【发布时间】:2021-03-19 00:12:02
【问题描述】:
假设我有一份报告,实际上是一封信,我需要将其翻译成多种语言。我在表单中创建了一个 greeting 字段,该字段由 onchange 事件方法以编程方式填充。
if self.partner_id.gender == 'female':
self.letter_greeting = _('Dear %s %s,') % ( # the translation should be "Estimada"
self.repr_recipient_id.title.shorcut, surname
)
elif self.partner_id.gender == 'male':
self.letter_greeting = _('Dear %s %s,') % ( # translation "Estimado"
self.repr_recipient_id.title.shorcut, surname
)
else:
self.letter_greeting = _('Dear %s %s,') % ( # translation: "Estimado/a"
self.partner_id.title.shorcut, surname
)
在这种情况下,单词Dear 应该根据使用的选项翻译成不同的西班牙语翻译,这是因为我们根据性别使用不同的终止。导出po 文件,我发现所有选项都是完全一致的,这是有道理的,因为几乎所有情况下的翻译都是相同的,但在这种情况下并非如此:
#. module: custom_module
#: code:addons/custom_module/models/sale_order.py:334
#: code:addons/custom_module/models/sale_order.py:338
#: code:addons/custom_module/models/sale_order.py:342
#, python-format
msgid "Dear %s %s,"
msgstr "Dear %s %s,"
我可以直接申请的解决方案
-
每次我需要更新 po 文件时,将所有术语放在不同的条目中,以避免手动进行相同的翻译。如果您对这个问题有很多不同的词,这可能会很麻烦。如果我这样做并使用 poedit 打开文件,则会出现此错误:
duplicate message definition -
将所有可能的组合都用斜线表示,这是在 Odoo 的其他部分完成的。对于两种性别都是:
#. module: stock
#: model:res.company,msg:stock.res_company
msgid "Dear"
msgstr "Estimado/a"
这只是一个例子。我可以想到许多在英语中看起来相同的单词,但根据上下文,它们在其他语言中使用不同的拼写或含义。
可能的最佳解决方案
-
我不知道 Odoo 是否知道某个单词的 context 是否已被翻译。手动添加上下文可以解决问题,至少对于具有不同含义的单词而言。
-
最好的解决方案是为翻译模块设置一个参数,以确保将单词作为特定翻译的独立条目导出。
你是不是觉得我太重视它了哈哈?不知道有没有更好的解决方案?为什么 poedit 根本没有考虑到这个问题?
【问题讨论】:
-
我们已将这些半静态报表部分外包给 odoo 模型,其中 char 字段是可翻译的。使用这种方法,您在报告内容的上下文中会更加灵活。对于问候,我们还构建了一些特别的东西。我们只是扩展了 res.partner.title 并实现了功能以获得对合作伙伴的完整称呼。最后是相同的方法(可翻译的字符字段),但称呼是与合作伙伴绑定的,所以我们直接在 res.partner.title 上做了一个。我们甚至在 res.partner.title 上添加了一些性别内容。
-
非常好的想法@CZoellner,谢谢。如果您将其写在答案中,我会接受。我希望有一些更复杂的东西可以在这些术语之间产生差异,但恐怕不会,或者至少在导出 po 文件时在 Odoo 中。一些other tranlation tools 可以考虑上下文
-
这将是太多的代码,我可能不允许在这里发布代码;-)
-
@CZoellner 不,我不是要发布完整代码哈哈,你在评论中写的解释对我来说已经足够了:) 你可以发布它作为答案
标签: odoo translation multilingual po poedit