changeset ecbcef79165c in trytond:default
details: https://hg.tryton.org/trytond?cmd=changeset&node=ecbcef79165c
description:
Translate LazyString of ir.model and ir.model.field
issue10326
review321041002
diffstat:
trytond/ir/translation.py | 22 ++++++++++++++++++++-
trytond/model/fields/field.py | 45 +++++++++++++++++++++++++++++++++++++++++++
trytond/tests/test_ir.py | 13 ++++++++++++
3 files changed, 79 insertions(+), 1 deletions(-)
diffs (117 lines):
diff -r c14f51b77b30 -r ecbcef79165c trytond/ir/translation.py
--- a/trytond/ir/translation.py Sun Apr 25 17:56:39 2021 +0200
+++ b/trytond/ir/translation.py Sun Apr 25 18:19:29 2021 +0200
@@ -25,7 +25,7 @@
from trytond.pool import Pool
from trytond.pyson import PYSONEncoder, Eval
from trytond.tools import file_open, grouped_slice, cursor_dict
-from trytond.tools.string_ import LazyString
+from trytond.tools.string_ import LazyString, StringPartitioned
from trytond.transaction import Transaction
from trytond.wizard import (
Wizard, StateView, StateTransition, StateAction, Button)
@@ -321,6 +321,26 @@
else:
name = record.model + ',' + field_name
translations[record.id] = cls.get_source(name, ttype, lang)
+ if translations[record.id] is None:
+ with Transaction().set_context(language=lang):
+ if ttype in {'field', 'help'}:
+ field = getattr(
+ pool.get(record.model.model), record.name)
+ translations[record.id] = ''
+ if ttype == 'field':
+ value = field.string
+ else:
+ value = field.help
+ else:
+ model = pool.get(record.model)
+ if not model.__doc__:
+ continue
+ value = model._get_name()
+ if isinstance(value, StringPartitioned):
+ for source in value:
+ translations[record.id] += source
+ else:
+ translations[record.id] = value
return translations
# Don't use cache for fuzzy translation
diff -r c14f51b77b30 -r ecbcef79165c trytond/model/fields/field.py
--- a/trytond/model/fields/field.py Sun Apr 25 17:56:39 2021 +0200
+++ b/trytond/model/fields/field.py Sun Apr 25 18:19:29 2021 +0200
@@ -508,6 +508,51 @@
def _get_translation_join(self, Model, name,
translation, model, table, from_, language):
+ if Model.__name__ == 'ir.model.field':
+ pool = Pool()
+ IrModel = pool.get('ir.model')
+ ModelData = pool.get('ir.model.data')
+ ModelField = pool.get('ir.model.field')
+ Translation = pool.get('ir.translation')
+ model = IrModel.__table__()
+ model_data = ModelData.__table__()
+ model_field = ModelField.__table__()
+ msg_trans = Translation.__table__()
+ if name == 'field_description':
+ type_ = 'field'
+ else:
+ type_ = 'help'
+ translation = translation.select(
+ translation.id.as_('id'),
+ translation.res_id.as_('res_id'),
+ translation.value.as_('value'),
+ translation.name.as_('name'),
+ translation.lang.as_('lang'),
+ translation.type.as_('type'),
+ translation.fuzzy.as_('fuzzy'),
+ )
+ translation |= (msg_trans
+ .join(model_data,
+ condition=(msg_trans.res_id == model_data.db_id)
+ & (model_data.model == 'ir.message')
+ & (msg_trans.name == 'ir.message,text'))
+ .join(model_field,
+ condition=Concat(
+ Concat(model_data.module, '.'),
+ model_data.fs_id) == getattr(model_field, name))
+ .join(model,
+ condition=model_field.model == model.id)
+ .select(
+ msg_trans.id.as_('id'),
+ Literal(-1).as_('res_id'),
+ msg_trans.value.as_('value'),
+ Concat(
+ Concat(model.model, ','),
+ model_field.name).as_('name'),
+ msg_trans.lang.as_('lang'),
+ Literal(type_).as_('type'),
+ msg_trans.fuzzy.as_('fuzzy'),
+ ))
if backend.name == 'postgresql' and _sql_version >= (1, 1, 0):
query = translation.select(
translation.res_id.as_('res_id'),
diff -r c14f51b77b30 -r ecbcef79165c trytond/tests/test_ir.py
--- a/trytond/tests/test_ir.py Sun Apr 25 17:56:39 2021 +0200
+++ b/trytond/tests/test_ir.py Sun Apr 25 18:19:29 2021 +0200
@@ -71,6 +71,19 @@
[f.field_description for f in fields], ["Code", "Name"])
@with_transaction()
+ def test_model_field_lazy(self):
+ "Test searching on lazy string of model field"
+ pool = Pool()
+ ModelField = pool.get('ir.model.field')
+
+ field, = ModelField.search([
+ ('field_description', '=', "ID"),
+ ('model.model', '=', 'ir.lang'),
+ ('module', '=', 'ir'),
+ ])
+ self.assertEqual(field.field_description, "ID")
+
+ @with_transaction()
def test_sequence_substitutions(self):
'Test Sequence Substitutions'
pool = Pool()