我正在考虑gettext
and .po
files创建一个多语言应用程序。我的理解是,.po
文件msgid
是来源,msgstr
是翻译。因此,我看到了两种定义msgid
的方法:
使用全文(例如"My name is %s.\n"
)具有以下优势:
gettext
时,您可以清楚地看到将要发生的事情
翻译.po
文件更容易,因为它们
包含要翻译的实际内容使用具有以下优点的密钥(例如my-name %s
):
gettext
调用更简洁,使您的视图更清晰.po
文件和视图,因为密钥更改的可能性更小(例如,company-description
的密钥远不如实际公司描述更改)因此我的问题:
是否有办法处理gettext
和.po
文件,这些文件可以结合两种方法的优点,即:
- gettext
次呼叫键的使用权
翻译人员是否能够查看需要翻译的全文?
答案 0 :(得分:6)
gettext旨在将英文文本翻译成其他语言,这就是您应该使用它的方式。不要将它与钥匙一起使用。如果需要键,请使用其他技术,例如关联数组。
我管理了两个大型开源项目(50种语言,5000种翻译),一种使用密钥方法,一种使用gettext方法 - 我再也不会使用密钥方法了。
缺点包括将英文文本的更改传播到其他语言。如果你改变了
msg_no_food = "We had no food left, so we had to eat the cats"
到
msg_no_food = "We had no food left, so we had to eat the cat's"
新文本的含义完全不同 - 那么如何确保其他翻译无效和更新?
你提到过长文本会让你的脚本难以阅读。解决方案可能是将它们放在一个单独的脚本中。例如,将其放在主代码中
print help_message('help_no_food')
并且有一个只提供帮助消息的脚本:
switch ($help_msg) {
...
case 'help_no_food': return gettext("We had no food left, so we had to eat the cat's");
...
}
gettext的另一个问题是当你有一整页要翻译时。也许是一个包含大量嵌入式图像的网站上的宣传册页面。如果您为具有长文本的语言(例如德语)留出了大量空间,则在短文本的语言(例如中文)上将有很多空格。因此,您可能会为每种语言使用不同的图像/布局。
由于这些数量往往很少,因此通常更容易完全实现这些外部gettext。 e.g。
brochure-view.en.php
brochure-view.de.php
brochure-view.zh.php
答案 1 :(得分:2)