如果在英语中使用相同的词而在其他语言中使用不同的词,如何将翻译分开?
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,"
我可以直接申请的解决方案
将所有术语放在不同的条目中,以避免每次我需要更新 po 文件时手动进行相同的翻译。如果您对该问题有很多不同的词,这可能会很麻烦。如果我这样做并使用 poedit 打开文件,则会出现此错误:duplicate message definition
将所有可能的组合与斜杠放在一起,这是在 Odoo 的其他部分完成的。对于两种性别都是:
#. module: stock
#: model:res.company,msg:stock.res_company
msgid "Dear"
msgstr "Estimado/a"
这只是一个例子。我能想到许多在英语中看起来相同的词,但它们在其他语言中根据上下文使用不同的拼写或含义。
可能的最佳解决方案
我不知道 Odoo 是否知道某个词的 context 是否已经被翻译。手动添加上下文可以解决问题,至少对于具有不同含义的单词。
最好的解决方案是为翻译模块设置一个参数,以确保该词作为特定翻译的独立条目导出。
你是不是觉得我太重视了哈哈?你知道有没有更好的解决方案?为什么 poedit 根本不考虑这个问题?
我提议扩展模型 res.partner.title
和 res.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
假设我有一份报告,实际上是一封信,我需要将其翻译成多种语言。我在表单中创建了一个 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 根本不考虑这个问题?
我提议扩展模型 res.partner.title
和 res.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