想象一下这个用于翻译的字符串:
“您的路径被 %s 阻止”。
如果变量是“anaconda”怎么办。现在应该是“您的路径被 %s 阻塞”。
gettext 如何处理这个问题,或者客户端程序员应该如何处理这个问题,或者其他系统如何处理这个问题?
想象一下这个字符串:
“%s 的页面”。
我们想传入“Brian”或“Jim”或“Lucinda”。一切都很好。
但在法语翻译中,这是:
“%s 页”。
对于 Jean-Paul 或 Claudette 来说,这很好,但可怜的 Anais 呢?她需要“Page d'Anais”,而不是“Page de Anais”。
gettext 能解决这个问题吗?什么是标准做法?
最佳答案
正如您所期望的那样,gettext 不会帮助您构建语法正确的字符串。即使您在英语方面没有问题,以编程方式构建显示文本也是一个很大的本地化禁忌,因为特定语言的问题可能会突然出现。如果可以管理,您可能应该为每种情况设置单独的字符串,例如“你的路被恐龙挡住了”、“你的路被一只兔子挡住了”、“你的路被 python 挡住了”等。这意味着很多重复,但翻译系统通过使用翻译内存库帮助自动化流程,甚至在更复杂的情况下自动翻译(翻译人员只需要在需要时校对和修改)。
您的“Page d'Anais”/“Page de Claudette”就是一个很好的例子。在这种情况下,唯一的解决方案是将格式字符串存储在可本地化的字符串表中(听起来您已经这样做了),以便本地化人员可以提出可行的解决方案。 (例如,“Page de : Anais”虽然在每种情况下都不是很好用,所以他们会将“%s's Page”本地化为“Page de : %s”)。但是本地化人员确实需要了解此格式字符串的去向以及它的构造方式,因此您需要弄清楚这一点。
最广泛误译的字符串之一是“%n of %n”(用于打印页面,如“1 of 4”中的页面),如果没有上下文,通常会被完全错误地翻译。例如。在法语中,直译是“1 de 4”,在这种情况下没有意义,应该是“1 sur 4”。
关于localization - gettext 如何处理 a/an 或 d'/de?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/7383538/