我们正准备将我们的PHP网站翻译成各种语言,PHP中的gettext支持看起来就像是要走的路.
我看到的所有教程都建议使用英文文本作为消息ID,即
gettext("你好!")
但这真的是个好主意吗?假设市场营销人员希望将文本更改为"你好,你们!".那么你不必更新所有语言文件,因为该字符串 - 实际上是消息ID - 已经改变了吗?
拥有某种通用ID(例如"hello.message")和英文翻译文件会更好吗?
寻找有关如何在对大型msgid值进行小编辑时有效使用gettext PO文件的提示和/或工具.
示例:我们有许多存储在PO消息目录文件中的多句/多段消息.如果我们对一条消息做了一个非常小的改动,也许编辑一个句子甚至纠正标点符号,我们在运行msgmerge实用程序时会丢失原始翻译.
我们的译员不是从头开始重新翻译长消息(已经通过编辑审批流程),而是返回其PO文件的备份副本,并手动搜索最后一个msgid/msgstr翻译对的文本当前的msgid值以查看已更改的内容,然后复制并粘贴最后一个转换,然后编辑它们以反映更新的msgid值.
这是很多工作!当然必须有更好的方法来处理这种类型的工作流程?
有没有一种最佳实践的方式归档和发现以前的翻译不再在PO文件?我想到的一个想法是存储唯一的MSG ID在我们的信息的文本或在我们之前的消息,并使用这个ID来检索审查以前MSGID/msgstr翻译对的意见.或者是否有PO编辑或在线服务使这一过程更有效率?
谢谢你,马尔科姆
我正在查看gettext和.po创建多语言应用程序的文件.我的理解是.po文件msgid中的来源msgstr是翻译.因此,我看到两种定义方式msgid:
使用全文(例如"My name is %s.\n")具有以下优点:
gettext你可以清楚地看到即将翻译的内容 .po文件更容易,因为它们包含要翻译的实际内容使用my-name %s具有以下优点的密钥(例如):
gettext调用更简洁,使您的视图更清晰 .po文件和视图,因为密钥不太可能更改(例如,密钥的company-description变化远不如实际的公司描述)因此我的问题是:
有没有一种方法可以使用gettext和.po文件,它们可以结合两种方法的优点,即: -
用于gettext调用的密钥用于
翻译者查看需要翻译的全文?
使用gettext,消息的原始(通常是英语)文本用作翻译的消息密钥("msgid").这意味着每次原始文本更改时,必须在所有.po文件中更新msgid.
对于文本的真实更改,这显然是不可避免的,因为翻译者必须更新翻译.
但是,如果原件的更改没有改变其含义,则重新翻译是超级的(例如,标点变化,空白变化或拼写错误的纠正).
有没有办法在这种情况下自动更新.po文件?
我试图使用xgettext和msgmerge(打开模糊匹配),但模糊匹配有时会失败,加上这会产生许多丑陋的"#,模糊"标志.
注意:有一个类似的问题: 如何在对大文本值进行小编辑时有效地使用gettext PO文件 但是,这是关于大字符串,因此是一个更具体的问题.