如果在英语中使用相同的词而在其他语言中使用不同的词,如何将翻译分开?

How to keep translations separated where the same word is used in English but a different one in other languages?

假设我有一份报告,实际上是一封信,我需要将其翻译成多种语言。我在表单中创建了一个 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,"

我可以直接申请的解决方案

#. module: stock
#: model:res.company,msg:stock.res_company
msgid "Dear"
msgstr "Estimado/a"

这只是一个例子。我能想到许多在英语中看起来相同的词,但它们在其他语言中根据上下文使用不同的拼写或含义。

可能的最佳解决方案

你是不是觉得我太重视了哈哈?你知道有没有更好的解决方案?为什么 poedit 根本不考虑这个问题?

我提议扩展模型 res.partner.titleres.partner

res.partner.title 应该得到一个可翻译的字段来保存称呼前缀,例如 'Dear' 或 'Sehr geehrter'(德语)。也许也值得了解一些关于性别的知识,但我不会在这里详细介绍。 您可能想向配置用户显示一个示例,例如“Dear Mr. Name”或类似的内容。计算字段应该可以工作。

res.partner 上,您应该只实现一个计算字段或一个方法来获取合作伙伴记录的完整称呼。

在某种程度上这是一个语言学问题。我相信最好的解决方案是使用一种不同的“源语言”,一种由键组成的语言,然后将英语作为另一种翻译。英语中的“亲爱的”这个词没有性别背景(通常,大部分英语都没有),而西班牙语中的“Estimado”这个词有。从那个西班牙语单词到英语的翻译更恰当的是“男性亲爱的”。因此,使用键作为您的源语言,您将拥有:

SourceText (EnglishDescription) -> Translation (English) -> Translation (Spanish)
DearMasculine -> Dear -> Estimado
DearFeminine -> Dear -> Estimada
DearNuetral -> Dear -> Estimado/a