示例#1
0
 def test_lang_code(self):
     project = Project(language_aliases="xx:cs")
     component = Component(project=project)
     component.filemask = "Solution/Project/Resources.*.resx"
     # Pure extraction
     self.assertEqual(
         component.get_lang_code("Solution/Project/Resources.es-mx.resx"),
         "es-mx")
     # No match
     self.assertEqual(
         component.get_lang_code("Solution/Project/Resources.resx"), "")
     # Language aliases
     self.assertEqual(
         component.get_lang_code("Solution/Project/Resources.xx.resx"),
         "xx")
     self.assertEqual(project.get_language_alias("xx"), "cs")
     self.assertRaisesMessage(
         ValidationError,
         "The language code for "
         "Solution/Project/Resources.resx"
         " was empty, please check the filemask.",
         component.clean_lang_codes,
         [
             "Solution/Project/Resources.resx",
             "Solution/Project/Resources.de.resx",
             "Solution/Project/Resources.es.resx",
             "Solution/Project/Resources.es-mx.resx",
             "Solution/Project/Resources.fr.resx",
             "Solution/Project/Resources.fr-fr.resx",
         ],
     )
示例#2
0
 def check_unit(self, nplurals=3, template=None, source_info=None, **kwargs):
     if nplurals == 3:
         equation = "n==0 ? 0 : n==1 ? 1 : 2"
     else:
         equation = "0"
     lang = Language.objects.create(code="zz")
     plural = Plural.objects.create(
         language=lang, number=nplurals, equation=equation
     )
     project = Project(slug="test", source_language=Language.objects.get(code="en"))
     component = Component(
         slug="comp", project=project, file_format="xliff", template=template
     )
     translation = Translation(language=lang, component=component, plural=plural)
     # Fake file format to avoid need for actual files
     translation.store = EmptyFormat(BytesIOMode("", b""))
     unit = Unit(translation=translation, id_hash=-1, **kwargs)
     if source_info:
         for key, value in source_info.items():
             setattr(unit, key, value)
         unit.get_comments = fake_get_comments
         unit.__dict__["suggestions"] = [
             Suggestion(target="Weblate translator suggestion")
         ]
     else:
         unit.get_comments = empty_get_comments
     exporter = self.get_exporter(lang, translation=translation)
     exporter.add_unit(unit)
     return self.check_export(exporter)
示例#3
0
 def check_unit(self, nplurals=3, template=None, **kwargs):
     if nplurals == 3:
         equation = 'n==0 ? 0 : n==1 ? 1 : 2'
     else:
         equation = '0'
     lang = Language.objects.create(
         code='zz',
     )
     plural = Plural.objects.create(
         language=lang,
         number=nplurals,
         equation=equation
     )
     project = Project(
         slug='test',
         source_language=Language.objects.get(code='en'),
     )
     component = Component(
         slug='comp',
         project=project,
         file_format='xliff',
         template=template
     )
     translation = Translation(
         language=lang,
         component=component,
         plural=plural,
     )
     # Fake file format to avoid need for actual files
     translation.store = EmptyFormat(BytesIOMode('', b''))
     unit = Unit(translation=translation, id_hash=-1, **kwargs)
     exporter = self.get_exporter(lang, translation=translation)
     exporter.add_unit(unit)
     return self.check_export(exporter)
示例#4
0
 def check_unit(self, nplurals=3, template=None, source_info=None, **kwargs):
     if nplurals == 3:
         formula = "n==0 ? 0 : n==1 ? 1 : 2"
     else:
         formula = "0"
     lang = Language.objects.create(code="zz")
     plural = Plural.objects.create(language=lang, number=nplurals, formula=formula)
     project = Project(slug="test")
     component = Component(
         slug="comp",
         project=project,
         file_format="xliff",
         template=template,
         source_language=Language.objects.get(code="en"),
     )
     translation = Translation(language=lang, component=component, plural=plural)
     # Fake file format to avoid need for actual files
     translation.store = EmptyFormat(BytesIOMode("", b""))
     unit = Unit(translation=translation, id_hash=-1, **kwargs)
     if source_info:
         for key, value in source_info.items():
             setattr(unit, key, value)
         # The dashes need special handling in XML based formats
         unit.__dict__["unresolved_comments"] = [
             Comment(comment="Weblate translator comment ---- ")
         ]
         unit.__dict__["suggestions"] = [
             Suggestion(target="Weblate translator suggestion")
         ]
     else:
         unit.__dict__["unresolved_comments"] = []
     unit.source_unit = unit
     exporter = self.get_exporter(lang, translation=translation)
     exporter.add_unit(unit)
     return self.check_export(exporter)
示例#5
0
 def get_exporter(self, lang=None):
     if lang is None:
         lang = Language(code='xx')
     return self._class(
         language=lang,
         project=Project(slug='test', name='TEST'),
     )
示例#6
0
 def check_unit(self, nplurals=3, **kwargs):
     if nplurals == 3:
         equation = 'n==0 ? 0 : n==1 ? 1 : 2'
     else:
         equation = '0'
     lang = Language(
         code='zz',
         nplurals=nplurals,
         pluralequation=equation
     )
     project = Project(
         slug='test',
         source_language=Language.objects.get(code='en'),
     )
     subproject = SubProject(slug='comp', project=project)
     unit = Unit(
         translation=Translation(
             language=lang,
             subproject=subproject
         ),
         **kwargs
     )
     exporter = self.get_exporter(lang)
     exporter.add_unit(unit)
     return self.check_export(exporter)
示例#7
0
 def check_unit(self, nplurals=3, **kwargs):
     if nplurals == 3:
         equation = 'n==0 ? 0 : n==1 ? 1 : 2'
     else:
         equation = '0'
     lang = Language.objects.create(
         code='zz',
     )
     plural = Plural.objects.create(
         language=lang,
         number=nplurals,
         equation=equation
     )
     project = Project(
         slug='test',
         source_language=Language.objects.get(code='en'),
     )
     component = Component(slug='comp', project=project)
     unit = Unit(
         translation=Translation(
             language=lang,
             component=component,
             plural=plural,
         ),
         id_hash=-1,
         **kwargs
     )
     exporter = self.get_exporter(lang)
     exporter.add_unit(unit)
     return self.check_export(exporter)
示例#8
0
def validate_render_component(value, translation=None, **kwargs):
    from weblate.trans.models import Project, Component, Translation
    from weblate.lang.models import Language
    component = Component(
        project=Project(
            name='project',
            slug='project',
            id=-1,
        ),
        name='component',
        slug='component',
        branch='master',
        vcs='git',
        id=-1,
    )
    if translation:
        kwargs['translation'] = Translation(
            id=-1,
            component=component,
            language_code='xx',
            language=Language(name='xxx', code='xx'),
        )
    else:
        kwargs['component'] = component
    validate_render(value, **kwargs)
示例#9
0
 def test_lang_code_template(self):
     component = Component(project=Project())
     component.filemask = "Solution/Project/Resources.*.resx"
     component.template = "Solution/Project/Resources.resx"
     self.assertEqual(
         component.get_lang_code("Solution/Project/Resources.resx"), "en"
     )
示例#10
0
 def test_lang_code_plus(self):
     component = Component(project=Project())
     component.filemask = "po/*/master/pages/C_and_C++.po"
     self.assertEqual(
         component.get_lang_code("po/cs/master/pages/C_and_C++.po"),
         "cs",
     )
示例#11
0
 def test_lang_code_template(self):
     component = Component(project=Project())
     component.filemask = 'Solution/Project/Resources.*.resx'
     component.template = 'Solution/Project/Resources.resx'
     self.assertEqual(
         component.get_lang_code('Solution/Project/Resources.resx'), 'en'
     )
示例#12
0
 def get_exporter(self, lang=None, **kwargs):
     if lang is None:
         lang, created = Language.objects.get_or_create(code="xx")
         if created:
             Plural.objects.create(language=lang)
     return self._class(
         language=lang, project=Project(slug="test", name="TEST"), **kwargs
     )
示例#13
0
 def test_lang_code_template(self):
     subproject = SubProject(project=Project())
     subproject.filemask = 'Solution/Project/Resources.*.resx'
     subproject.template = 'Solution/Project/Resources.resx'
     self.assertEqual(
         subproject.get_lang_code('Solution/Project/Resources.resx'),
         'en'
     )
示例#14
0
    def clone_repo(self, path):

        return self._class.clone(
            self.format_local_path(getattr(self, "{0}_repo_path".format(self._vcs))),
            path,
            component=Component(
                slug="test", name="Test", project=Project(name="Test", slug="test")
            ),
        )
示例#15
0
 def get_exporter(self, lang=None):
     if lang is None:
         lang, created = Language.objects.get_or_create(code='xx')
         if created:
             Plural.objects.create(language=lang)
     return self._class(
         language=lang,
         project=Project(slug='test', name='TEST'),
     )
示例#16
0
 def clone_repo(self, path):
     return self._class.clone(
         self.get_remote_repo_url(),
         path,
         self._remote_branch,
         component=Component(slug="test",
                             name="Test",
                             project=Project(name="Test", slug="test")),
     )
示例#17
0
    def clone_repo(self, path):

        return self._class.clone(
            self.format_local_path(getattr(self, '{0}_repo_path'.format(self._vcs))),
            path,
            component=Component(
                slug='test', name='Test', project=Project(name='Test', slug='test')
            ),
        )
示例#18
0
 def setUp(self):
     self.unit = Unit(translation=Translation(
         component=Component(
             project=Project(source_language=Language(), slug="p",
                             name="p"),
             slug="c",
             name="c",
         ),
         language=Language(),
     ))
     self.profile = Profile()
示例#19
0
 def handle(self, *args, **options):
     """List installed add-ons."""
     fake_addon = Addon(component=Component(project=Project(pk=-1), pk=-1))
     for _unused, obj in sorted(ADDONS.items()):
         self.stdout.write(f".. _addon-{obj.name}:")
         self.stdout.write("\n")
         self.stdout.write(obj.verbose)
         self.stdout.write("-" * len(obj.verbose))
         self.stdout.write("\n")
         self.stdout.write(f":Add-on ID: ``{obj.name}``")
         if obj.settings_form:
             form = obj(fake_addon).get_settings_form(None)
             table = [(f"``{name}``", str(field.label),
                       self.get_help_text(field, name))
                      for name, field in form.fields.items()]
             prefix = ":Configuration: "
             name_width = max(
                 len(name) for name, _label, _help_text in table)
             label_width = max(
                 len(label) for _name, label, _help_text in table)
             help_text_width = max(
                 max(len(line) for line in help_text) if help_text else 0
                 for _name, _label, help_text in table)
             name_row = "-" * (name_width + 2)
             label_row = "-" * (label_width + 2)
             help_text_row = "-" * (help_text_width + 2)
             for name, label, help_text in table:
                 if not prefix.isspace():
                     self.stdout.write(
                         f"{prefix}+{name_row}+{label_row}+{help_text_row}+"
                     )
                     prefix = "                "
                 if not help_text:
                     line = ""
                     self.stdout.write(
                         f"{prefix}| {name:<{name_width}s} | {label:<{label_width}s} | {line:<{help_text_width}s} |"
                     )
                 for pos, line in enumerate(help_text):
                     if pos > 0:
                         name = label = ""
                     self.stdout.write(
                         f"{prefix}| {name:<{name_width}s} | {label:<{label_width}s} | {line:<{help_text_width}s} |"
                     )
                 self.stdout.write(
                     f"{prefix}+{name_row}+{label_row}+{help_text_row}+")
         else:
             self.stdout.write(
                 ":Configuration: `This add-on has no configuration.`")
         events = ", ".join(EVENT_NAMES[event] for event in obj.events)
         self.stdout.write(f":Triggers: {events}")
         self.stdout.write("\n")
         self.stdout.write("\n".join(wrap(obj.description, 79)))
         self.stdout.write("\n")
示例#20
0
 def test_lang_code_double(self):
     component = Component(project=Project())
     component.filemask = "path/*/resources/MessagesBundle_*.properties"
     self.assertEqual(
         component.get_lang_code(
             "path/pt/resources/MessagesBundle_pt_BR.properties"),
         "pt_BR",
     )
     self.assertEqual(
         component.get_lang_code(
             "path/el/resources/MessagesBundle_el.properties"),
         "el",
     )
示例#21
0
 def check_unit(self, nplurals=3, **kwargs):
     lang = Language(code='zz', nplurals=nplurals)
     project = Project(
         slug='test',
         source_language=Language.objects.get(code='en'),
     )
     subproject = SubProject(slug='comp', project=project)
     unit = Unit(translation=Translation(language=lang,
                                         subproject=subproject),
                 **kwargs)
     exporter = self.get_exporter()
     exporter.add_unit(unit)
     return self.check_export(exporter)
示例#22
0
 def handle(self, *args, **options):
     """List installed add-ons."""
     fake_addon = Addon(component=Component(project=Project()))
     for _unused, obj in sorted(ADDONS.items()):
         self.stdout.write(f".. _addon-{obj.name}:")
         self.stdout.write("\n")
         self.stdout.write(obj.verbose)
         self.stdout.write("-" * len(obj.verbose))
         self.stdout.write("\n")
         if obj.settings_form:
             form = obj(fake_addon).get_settings_form(None)
             params = ", ".join(f"``{key}``" for key in form.fields.keys())
         else:
             params = "`This add-on has no configuration.`"
         self.stdout.write(PARAMS_TABLE.format(obj.name, params))
         self.stdout.write("\n")
         self.stdout.write("\n".join(wrap(obj.description, 79)))
         self.stdout.write("\n")
示例#23
0
 def check_unit(self,
                nplurals=3,
                template=None,
                source_info=None,
                **kwargs):
     if nplurals == 3:
         equation = 'n==0 ? 0 : n==1 ? 1 : 2'
     else:
         equation = '0'
     lang = Language.objects.create(code='zz', )
     plural = Plural.objects.create(language=lang,
                                    number=nplurals,
                                    equation=equation)
     project = Project(
         slug='test',
         source_language=Language.objects.get(code='en'),
     )
     component = Component(slug='comp',
                           project=project,
                           file_format='xliff',
                           template=template)
     translation = Translation(
         language=lang,
         component=component,
         plural=plural,
     )
     # Fake file format to avoid need for actual files
     translation.store = EmptyFormat(BytesIOMode('', b''))
     unit = Unit(translation=translation, id_hash=-1, **kwargs)
     if source_info:
         for key, value in source_info.items():
             setattr(unit, key, value)
         unit.get_comments = fake_get_comments
         unit.__dict__['suggestions'] = [
             Suggestion(target='Weblate translator suggestion')
         ]
     else:
         unit.get_comments = empty_get_comments
     exporter = self.get_exporter(lang, translation=translation)
     exporter.add_unit(unit)
     return self.check_export(exporter)
示例#24
0
 def handle(self, *args, **options):
     """List installed add-ons."""
     fake_addon = Addon(component=Component(project=Project()))
     for _unused, obj in sorted(ADDONS.items()):
         self.stdout.write(f".. _addon-{obj.name}:")
         self.stdout.write("\n")
         self.stdout.write(obj.verbose)
         self.stdout.write("-" * len(obj.verbose))
         self.stdout.write("\n")
         self.stdout.write(f":Add-on ID: ``{obj.name}``")
         if obj.settings_form:
             form = obj(fake_addon).get_settings_form(None)
             table = [
                 (f"``{name}``", str(field.label), str(field.help_text))
                 for name, field in form.fields.items()
             ]
             prefix = ":Configuration: "
             name_width = max(len(row[0]) for row in table)
             label_width = max(len(row[1]) for row in table)
             help_text_width = max(len(row[2]) for row in table)
             name_row = "-" * (name_width + 2)
             label_row = "-" * (label_width + 2)
             help_text_row = "-" * (help_text_width + 2)
             for name, label, help_text in table:
                 if not prefix.isspace():
                     self.stdout.write(
                         f"{prefix}+{name_row}+{label_row}+{help_text_row}+"
                     )
                     prefix = "                "
                 self.stdout.write(
                     f"{prefix}| {name:<{name_width}s} | {label:<{label_width}s} | {help_text:<{help_text_width}s} |"
                 )
                 self.stdout.write(
                     f"{prefix}+{name_row}+{label_row}+{help_text_row}+"
                 )
         else:
             self.stdout.write(":Configuration: `This add-on has no configuration.`")
         self.stdout.write("\n")
         self.stdout.write("\n".join(wrap(obj.description, 79)))
         self.stdout.write("\n")
示例#25
0
def validate_render_component(value, translation=None, **kwargs):
    from weblate.lang.models import Language
    from weblate.trans.models import Component, Project, Translation

    component = Component(
        project=Project(name="project", slug="project", id=-1),
        name="component",
        slug="component",
        branch="main",
        vcs="git",
        id=-1,
    )
    if translation:
        kwargs["translation"] = Translation(
            id=-1,
            component=component,
            language_code="xx",
            language=Language(name="xxx", code="xx"),
        )
    else:
        kwargs["component"] = component
    validate_render(value, **kwargs)
def get_new_project(project_name, repository, tmpl_component_slug):
    tmpl_component = Component.objects.get(slug=tmpl_component_slug)
    new_project = Project()
    new_project.name = project_name
    new_project.slug = get_project_slug(project_name)
    new_project.web = giturlparse.parse(repository).url2https
    new_project.mail = tmpl_component.project.mail
    new_project.instructions = tmpl_component.project.instructions
    new_project.set_language_team = tmpl_component.project.set_language_team
    new_project.use_shared_tm = tmpl_component.project.use_shared_tm
    new_project.use_shared_tm = tmpl_component.project.use_shared_tm
    new_project.contribute_shared_tm = tmpl_component.project.contribute_shared_tm
    new_project.access_control = tmpl_component.project.access_control
    new_project.translation_review = tmpl_component.project.translation_review
    new_project.source_review = tmpl_component.project.source_review
    new_project.enable_hooks = tmpl_component.project.enable_hooks
    new_project.language_aliases = tmpl_component.project.language_aliases
    new_project.save()
    return new_project
示例#27
0
def get_new_project(project_name, repository, tmpl_component_slug):
    tmpl_component = Component.objects.get(slug=tmpl_component_slug)
    new_project = Project()
    new_project.name = project_name
    new_project.slug = get_project_slug(project_name)
    new_project.web = giturlparse.parse(repository).url2https
    new_project.access_control = \
        tmpl_component.project.access_control
    new_project.enable_review = \
        tmpl_component.project.enable_review
    new_project.enable_hooks = \
        tmpl_component.project.enable_hooks
    new_project.set_language_team = \
        tmpl_component.project.set_language_team
    new_project.source_language = \
        tmpl_component.project.source_language
    new_project.instructions = \
        tmpl_component.project.instructions
    new_project.mail = \
        tmpl_component.project.mail
    new_project.save()
    return new_project
示例#28
0
 def get_exporter(self):
     return self._class(
         language=Language(code='xx'),
         project=Project(slug='test', name='TEST'),
     )