想象一下这个字符串用于翻译:
“你的路径被%s阻止了。”
如果变量是“anaconda”怎么办?现在它应该是“你的路径被%s阻止了”。
gettext如何处理这个问题,或者客户端程序员应该如何处理这个问题,或者其他系统如何处理这个?
想象一下这个字符串:
“%s的页面”。
我们希望传递“Brian”或“Jim”或“Lucinda”。一切都很好。
但在法语翻译中,这是:
“Page de%s”。
对于让 - 保罗或克劳德特来说,这很好但是可怜的阿奈斯呢?她需要“Page d'Anais”,而不是“Page de Anais”。
gettext是否应对此问题?什么是标准做法?
答案 0 :(得分:3)
如您所料,gettext无法帮助您构建语法正确的字符串。即使您没有英语问题,以编程方式构建显示文本也是一个很大的本地化,因为语言特定的问题可能会出现。如果它是可管理的,你可能应该为每个案例分别设置字符串,例如“你的路径被恐龙阻挡”,“你的路径被兔子阻挡”,“你的路径被一个蟒蛇阻挡”等等。这意味着很多重复,但翻译系统通过使用翻译记忆库帮助自动化过程,甚至在更复杂的情况下自动翻译(翻译人员只需要校对和修改,如果需要)。
你的“Page d'Anais”/“Page de Claudette”就是一个很好的例子。在这种情况下,唯一的解决方案是将格式字符串存储在可本地化的字符串表中(听起来你已经在这样做了),以便本地化人员可以提出一个可行的解决方案。 (例如“Page de:Anais”虽然在每种情况下都不是很漂亮,但是他们会将“%s的页面”本地化为“Page de:%s”)。但是本地化者确实需要了解这种格式字符串的位置以及它的构造方式,因此您需要明确这一点。
最广泛误译的字符串之一是“%n of%n”(用于打印页面,如第1页,共4页“),没有上下文通常会被完全翻译错误。例如。在法语中,字面翻译是“1 de 4”,在这种情况下没有意义,它应该是“1 sur 4”。