From 09a4762be40a20aff286581c5d0f8a484659fff0 Mon Sep 17 00:00:00 2001 From: "Chong Wang (cwg)" Date: Thu, 16 Nov 2023 12:42:06 +0100 Subject: [PATCH] [IMP] test_translation_import: support testing exported pot files test exported pot files Part-of: odoo/odoo#142329 --- .../i18n/test_translation_import.pot | 27 ++++++++++++++----- .../tests/test_term_count.py | 20 ++++++++++++-- odoo/tools/translate.py | 8 +++--- 3 files changed, 43 insertions(+), 12 deletions(-) diff --git a/odoo/addons/test_translation_import/i18n/test_translation_import.pot b/odoo/addons/test_translation_import/i18n/test_translation_import.pot index 3b86a707cff..b99f750ff5c 100644 --- a/odoo/addons/test_translation_import/i18n/test_translation_import.pot +++ b/odoo/addons/test_translation_import/i18n/test_translation_import.pot @@ -51,16 +51,19 @@ msgstr "" #. module: test_translation_import #: model:ir.model.fields,field_description:test_translation_import.field_test_translation_import_model1__create_uid +#: model:ir.model.fields,field_description:test_translation_import.field_test_translation_import_model2__create_uid msgid "Created by" msgstr "" #. module: test_translation_import #: model:ir.model.fields,field_description:test_translation_import.field_test_translation_import_model1__create_date +#: model:ir.model.fields,field_description:test_translation_import.field_test_translation_import_model2__create_date msgid "Created on" msgstr "" #. module: test_translation_import #: model:ir.model.fields,field_description:test_translation_import.field_test_translation_import_model1__display_name +#: model:ir.model.fields,field_description:test_translation_import.field_test_translation_import_model2__display_name msgid "Display Name" msgstr "" @@ -71,11 +74,13 @@ msgstr "" #. module: test_translation_import #: model:ir.model.fields,help:test_translation_import.field_test_translation_import_model1__name +#: model:ir.model.fields,help:test_translation_import.field_test_translation_import_model2__name msgid "Help, English" msgstr "" #. module: test_translation_import #: model:ir.model.fields,field_description:test_translation_import.field_test_translation_import_model1__id +#: model:ir.model.fields,field_description:test_translation_import.field_test_translation_import_model2__id msgid "ID" msgstr "" @@ -84,23 +89,26 @@ msgstr "" msgid "Knife" msgstr "" -#. module: test_translation_import -#: model:ir.model.fields,field_description:test_translation_import.field_test_translation_import_model1____last_update -msgid "Last Modified on" -msgstr "" - #. module: test_translation_import #: model:ir.model.fields,field_description:test_translation_import.field_test_translation_import_model1__write_uid +#: model:ir.model.fields,field_description:test_translation_import.field_test_translation_import_model2__write_uid msgid "Last Updated by" msgstr "" #. module: test_translation_import #: model:ir.model.fields,field_description:test_translation_import.field_test_translation_import_model1__write_date +#: model:ir.model.fields,field_description:test_translation_import.field_test_translation_import_model2__write_date msgid "Last Updated on" msgstr "" +#. module: test_translation_import +#: model:ir.model.fields,field_description:test_translation_import.field_test_translation_import_model2__model1_id +msgid "Model1" +msgstr "" + #. module: test_translation_import #: model:ir.model.fields,field_description:test_translation_import.field_test_translation_import_model1__name +#: model:ir.model.fields,field_description:test_translation_import.field_test_translation_import_model2__name msgid "Name" msgstr "" @@ -141,6 +149,7 @@ msgstr "" #. module: test_translation_import #: model:ir.model.fields,field_description:test_translation_import.field_test_translation_import_model1__selection +#: model:ir.model.fields,field_description:test_translation_import.field_test_translation_import_model2__selection msgid "Selection" msgstr "" @@ -180,8 +189,14 @@ msgstr "" msgid "Translation Test 1" msgstr "" +#. module: test_translation_import +#: model:ir.model,name:test_translation_import.model_test_translation_import_model2 +msgid "Translation Test 2" +msgstr "" + #. module: test_translation_import #: model:ir.model.fields,field_description:test_translation_import.field_test_translation_import_model1__xml +#: model:ir.model.fields,field_description:test_translation_import.field_test_translation_import_model2__xml msgid "XML" msgstr "" @@ -235,8 +250,8 @@ msgid "link label" msgstr "" #. module: test_translation_import -#. odoo-javascript #. odoo-python +#. odoo-javascript #: code:addons/test_translation_import/models/models.py:0 #: code:addons/test_translation_import/static/src/xml/js_templates.xml:0 #, python-format diff --git a/odoo/addons/test_translation_import/tests/test_term_count.py b/odoo/addons/test_translation_import/tests/test_term_count.py index e608f534cac..7bb55a6ae38 100644 --- a/odoo/addons/test_translation_import/tests/test_term_count.py +++ b/odoo/addons/test_translation_import/tests/test_term_count.py @@ -5,8 +5,8 @@ import io from markupsafe import Markup from odoo.tests import common, tagged -from odoo.tools.misc import file_open, mute_logger -from odoo.tools.translate import TranslationModuleReader, TranslationRecordReader, code_translations, CodeTranslations, PYTHON_TRANSLATION_COMMENT, JAVASCRIPT_TRANSLATION_COMMENT, WEB_TRANSLATION_COMMENT +from odoo.tools.misc import file_open, mute_logger, file_path +from odoo.tools.translate import TranslationModuleReader, TranslationRecordReader, code_translations, CodeTranslations, PYTHON_TRANSLATION_COMMENT, JAVASCRIPT_TRANSLATION_COMMENT, WEB_TRANSLATION_COMMENT, TranslationFileReader from odoo import Command from odoo.addons.base.models.ir_fields import BOOLEAN_TRANSLATIONS @@ -231,6 +231,22 @@ class TestImport(common.TransactionCase): @tagged('post_install', '-at_install') class TestTranslationFlow(common.TransactionCase): + def test_export_pot(self): + module_name = 'test_translation_import' + module = self.env.ref('base.module_' + module_name) + export = self.env["base.language.export"].create({ + 'format': 'po', + 'modules': [Command.set([module.id])] + }) + export.act_getfile() + pot_file_data = export.data + self.assertIsNotNone(pot_file_data) + + with io.BytesIO(base64.b64decode(pot_file_data)) as pot_file: + pot_file.name = f'{module_name}.pot' + for line1, line2 in zip(TranslationFileReader(pot_file, 'po'), TranslationFileReader(file_path(f'{module_name}/i18n/{module_name}.pot'), 'po')): + self.assertEqual(line1, line2) + def test_export_import(self): """ Ensure export+import gives the same result as loading a language """ self.env["base.language.install"].create({ diff --git a/odoo/tools/translate.py b/odoo/tools/translate.py index 22ce7d4fd6c..3e881f39a45 100644 --- a/odoo/tools/translate.py +++ b/odoo/tools/translate.py @@ -30,7 +30,7 @@ from psycopg2.extras import Json import odoo from odoo.exceptions import UserError from . import config, pycompat -from .misc import file_open, file_path, get_iso_codes, SKIPPED_ELEMENT_TYPES +from .misc import file_open, file_path, get_iso_codes, SKIPPED_ELEMENT_TYPES, OrderedSet _logger = logging.getLogger(__name__) @@ -747,14 +747,14 @@ class PoFileWriter: def write_rows(self, rows): # we now group the translations by source. That means one translation per source. grouped_rows = {} - modules = set([]) + modules = OrderedSet([]) for module, type, name, res_id, src, trad, comments in rows: row = grouped_rows.setdefault(src, {}) - row.setdefault('modules', set()).add(module) + row.setdefault('modules', OrderedSet()).add(module) if not row.get('translation') and trad != src: row['translation'] = trad row.setdefault('tnrs', []).append((type, name, res_id)) - row.setdefault('comments', set()).update(comments) + row.setdefault('comments', OrderedSet()).update(comments) modules.add(module) for src, row in sorted(grouped_rows.items()):