예제 #1
0
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()
예제 #2
0
    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()
예제 #6
0
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)
예제 #7
0
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):
        """
예제 #8
0
 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."
     ),
예제 #9
0
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)