def set_rels(apps, schema_editor): TranslationEntry = apps.get_model('translation_manager', 'TranslationEntry') for row in TranslationEntry.objects.all(): row.locale_path = os.path.relpath( settings.LOCALE_PATHS[0], get_settings('TRANSLATIONS_BASE_DIR')) row.save() TranslationBackup = apps.get_model('translation_manager', 'TranslationBackup') for row in TranslationBackup.objects.all(): row.locale_path = os.path.relpath( settings.LOCALE_PATHS[0], get_settings('TRANSLATIONS_BASE_DIR')) row.save()
def handle(self, *args, **options): if get_settings('TRANSLATIONS_AUTO_CREATE_LANGUAGE_DIRS'): for language, language_name in settings.LANGUAGES: for locale in settings.LOCALE_PATHS: language_dir_path = os.path.join(locale, language) if not os.path.isdir(language_dir_path): os.mkdir(language_dir_path) self.manager = Manager() if get_settings('TRANSLATIONS_MAKE_BACKUPS'): self.manager.backup_po_to_db() self.angular_domain = False os.chdir(get_settings('TRANSLATIONS_PROJECT_BASE_DIR')) if 'django' in options['domain']: kwargs = deepcopy(options) kwargs.update({'domain': 'django'}) super(Command, self).handle(*args, **kwargs) if get_settings('TRANSLATIONS_ENABLE_API_ANGULAR_JS'): self.domain = 'angularjs' self.extensions = ['.html', '.js'] created = self.gettext_angular_js() if created: self.angular_domain = True kwargs = deepcopy(options) kwargs.update({'domain': 'djangojs'}) kwargs.update({'extensions': ['html', 'js']}) temp_dir = os.path.join(get_settings('TRANSLATIONS_BASE_DIR'), 'angularjs_temp') os.chdir(temp_dir) super(Command, self).handle(*args, **kwargs) options['extensions'] = [] self.angular_domain = False translation_temp_dir_path = os.path.join( get_settings('TRANSLATIONS_BASE_DIR'), 'angularjs_temp') if os.path.exists(translation_temp_dir_path): shutil.rmtree(translation_temp_dir_path) os.chdir(get_settings('TRANSLATIONS_PROJECT_BASE_DIR')) if 'djangojs' in options['domain']: kwargs = deepcopy(options) kwargs.update({'domain': 'djangojs'}) # Force jsx-files to be read kwargs.update({'extensions': ['js', 'jsx']}) super(Command, self).handle(*args, **kwargs) try: from django.core.management.commands.makemessages import make_messages as old_make_messages except ImportError: self.manager.postprocess()
def find_files(self, root): if self.domain == 'angularjs': if root: old_ignore_patterns = self.ignore_patterns self.ignore_patterns = get_settings( 'TRANSLATIONS_API_IGNORED_PATHS') all_files = super(Command, self).find_files(root) self.ignore_patterns = old_ignore_patterns return all_files else: return [] return super(Command, self).find_files(root)
def gettext_angular_js(self): all_files = self.find_files( get_settings('TRANSLATIONS_API_CLIENT_APP_SRC_PATH')) if all_files: temp_dir = os.path.join(get_settings('TRANSLATIONS_BASE_DIR'), 'angularjs_temp') os.makedirs(temp_dir, exist_ok=True) regexes = get_settings( 'TRANSLATIONS_API_TRANSLATION_STRINGS_REGEX_LIST') regex_legacy = get_settings( 'TRANSLATIONS_API_TRANSLATION_STRINGS_REGEX') if regex_legacy: regexes.append(regex_legacy) for file in all_files: temp_file_path = os.path.join( temp_dir, file.path.replace( settings.TRANSLATIONS_API_CLIENT_APP_SRC_PATH, '')[1:]) temp_dir_path = os.path.join( temp_dir, file.dirpath.replace( settings.TRANSLATIONS_API_CLIENT_APP_SRC_PATH, '')[1:]) os.makedirs(temp_dir_path, exist_ok=True) output_file = open(temp_file_path, 'w+') html_file = open(file.path, 'r') text_in_file = html_file.read() html_file.close() for regex in regexes: pattern = re.compile(regex) translation_strings = pattern.findall(text_in_file) for translation_string in translation_strings: gettext_string = '%s(\'%s\');' % ('gettext', translation_string) output_file.write(gettext_string) output_file.close() return True else: return False
def handle(self, *args, **options): self.manager = Manager() if get_settings('TRANSLATIONS_MAKE_BACKUPS'): self.manager.backup_po_to_db() for domain in options['domain']: kwargs = deepcopy(options) kwargs.update({'domain': domain}) super(Command, self).handle(*args, **kwargs) try: from django.core.management.commands.makemessages import make_messages as old_make_messages except ImportError: self.manager.postprocess()
class TranslationCase(TestCase): def setUp(self): self.username = '******' self.password = '******' self.email = '*****@*****.**' self.admin_user = User.objects.create_superuser(email=self.email, username=self.username, password=self.password) manager = TranslationManager() manager.load_data_from_po() def test_loaded_entry(self): """ Tests that test locale was loaded correctly """ entry = TranslationEntry.objects.get(original='test-case1') self.assertTrue(entry.is_published) self.assertEqual(entry.language, 'cs') self.assertEqual(entry.translation, 'test-case1_translation') self.assertEqual(entry.domain, 'django') self.assertEqual(entry.locale_path, 'tests/locale') self.assertEqual(entry.locale_parent_dir, 'tests') def test_makemessages_django_1_4_19(self): if django.get_version() >= "2": call_command('makemessages', add_location='full') else: call_command('makemessages') if get_settings('TRANSLATIONS_PROCESSING_METHOD') == 'async_django_rq': def test_makemessages_django_rq_single_run(self): queue = get_queue('default') queue.enqueue(tasks.makemessages_task) get_worker().work(burst=True) def test_makemessages_django_tq_more_jobs(self): queue = get_queue('default') queue.enqueue(tasks.makemessages_task) queue.enqueue(tasks.makemessages_task) queue.enqueue(tasks.makemessages_task) get_worker().work(burst=True)
from django.test import TestCase from django.contrib.auth.models import User from translation_manager.manager import Manager as TranslationManager from translation_manager.models import TranslationEntry from django.core.management import call_command from translation_manager import tasks from translation_manager.settings import get_settings if get_settings('TRANSLATIONS_PROCESSING_METHOD') == 'async_django_rq': from django_rq import get_queue, get_worker import django class TranslationCase(TestCase): def setUp(self): self.username = '******' self.password = '******' self.email = '*****@*****.**' self.admin_user = User.objects.create_superuser(email=self.email, username=self.username, password=self.password) manager = TranslationManager() manager.load_data_from_po() def test_loaded_entry(self): """
def add_arguments(self, parser): parser.add_argument( '--locale', '-l', default=[], dest='locale', action='append', help= 'Creates or updates the message files for the given locale(s) (e.g. pt_BR). ' 'Can be used multiple times.'), parser.add_argument( '--exclude', '-x', default=[], dest='exclude', action='append', help= 'Locales to exclude. Default is none. Can be used multiple times.' ), parser.add_argument( '--domain', '-d', default=get_settings('TRANSLATIONS_DOMAINS') or ['django', 'djangojs'], dest='domain', help='The domain of the message files (default: "django").'), parser.add_argument( '--all', '-a', action='store_true', dest='all', default=True, help='Updates the message files for all existing locales.'), parser.add_argument( '--extension', '-e', dest='extensions', help= 'The file extension(s) to examine (default: "html,txt", or "js" if the domain is "djangojs"). Separate multiple extensions with commas, or use -e multiple times.', action='append'), parser.add_argument( '--symlinks', '-s', action='store_true', dest='symlinks', default=False, help= 'Follows symlinks to directories when examining source code and templates for translation strings.' ), parser.add_argument( '--ignore', '-i', action='append', dest='ignore_patterns', default=get_settings('TRANSLATIONS_IGNORED_PATHS') or [], metavar='PATTERN', help= 'Ignore files or directories matching this glob-style pattern. Use multiple times to ignore more.' ), parser.add_argument( '--no-default-ignore', action='store_false', dest='use_default_ignore_patterns', default=True, help= "Don't ignore the common glob-style patterns 'CVS', '.*', '*~' and '*.pyc'." ), parser.add_argument( '--no-wrap', action='store_true', dest='no_wrap', default=False, help="Don't break long message lines into several lines."), parser.add_argument('--no-location', action='store_true', dest='no_location', default=False, help="Don't write '#: filename:line' lines."), parser.add_argument('--no-obsolete', action='store_true', dest='no_obsolete', default=False, help="Remove obsolete message strings."), parser.add_argument( '--keep-pot', action='store_true', dest='keep_pot', default=False, help="Keep .pot file after making messages. Useful when debugging." ),
from translation_manager.settings import get_settings if get_settings('TRANSLATIONS_ENABLE_API_COMMUNICATION'): from rest_framework.test import APITestCase from translation_manager.models import TranslationEntry from translation_manager import defaults class TranslationTests(APITestCase): def setUp(self): TranslationEntry.objects.create(language='cs', original='admin-test', is_published=True) TranslationEntry.objects.create(language='cs', original='test', is_published=True) def test_get_translations(self): defaults.TRANSLATIONS_API_QUERYSET_FORCE_FILTERS = [] response = self.client.get('/translations/cs/') self.assertTrue(len(response.data) == 2) def test_force_filter(self): defaults.TRANSLATIONS_API_QUERYSET_FORCE_FILTERS = ['admin-'] response = self.client.get('/translations/cs/') self.assertTrue(len(response.data) == 1)