[英]PHP Localization Best Practices? gettext?
我们正在使我们的网站国际化,允许多种语言。
我已经研究过php的“gettext”但是,如果我理解正确,我会看到一个很大的缺陷:
如果我的网页让“Hello World”作为静态文本。 我可以把字符串作为<?php echo gettext("Hello World"); ?>
<?php echo gettext("Hello World"); ?>
,使用工具生成po / mo文件。 然后我会把文件交给译员继续工作。
几天后,我们想用英文改成文字说“Hello Small World”? 我是否更改了gettext中的值? 我是否创建了一个英文PO文件并在那里进行更改? 如果您更改了gettext,它会将其视为一个新字符串,您将立即松开当前的翻译...
在我看来,渐渐地,php文件的内容到处都会有旧文本。 或者翻译人员可能必须被告知“当你看到Hello World,而不是翻译Hello Small World”。
我不知道我感到困惑。
在其他编程语言中,我看到他们使用web.home.featured.HelloWorld
等关键字。
在PHP中处理翻译的最佳方法是什么?
谢谢
你基本上问了并回答了你自己的问题,答案可能只是对PO文件的工作方式有了更好的理解。
在PO文件中,您有一个msgid和一个msgstr。 msgid是PHP文件中的msgstr替换的值,具体取决于本地化。
现在你可以把这些msgid做成你想要的任何东西,你可以很好地做到:
<?php echo _("web.home.featured.HelloWorld"); ?>
然后你永远不会在源代码中再次触摸此字符串,只能通过PO文件编辑字符串。
所以基本上你的问题的答案是你为字符串应该说的内容制作gettext值标识符,但翻译人员通常使用默认语言文件文本作为转换的基础,而不是标识符本身。
我希望这很清楚。
我知道答案已经被接受了,上面的答案很好。 但是在使用Gettext时,使用诸如thing.stuff.widget
类的永久机器式键存在另一个问题。
虽然使用永久密钥是一种更好的开发方法,但Gettext并未针对该工作方式进行设置,这可能会使您的工作流程复杂化。
如果您提供的翻译器的PO文件中填充了密钥来代替源文本,他们可能不知道英语应该是什么。 因此,您必须为他们提供包含源语言翻译的第二个文件,以便与之进行比较。 不是世界末日,而是更加繁琐,而不是如何设计Gettext。 (方形钉,圆孔等..)
我认为PO作为PHP翻译的文件格式非常好,特别推荐如果你不使用具有良好l10n模块的框架,但这并不意味着它对工作流程和翻译过程有利。
我建议你到达一个工作流程,允许程序员使用永久密钥,翻译人员使用单词,并在另一端提供MO文件。 看一下Loco的解决方案。
或者,使用允许使用键和单词的不同临时文件格式。 TMX就是一个例子。 如果您仍想在运行时使用Gettext,则可以转换文件 。
目前,我正在处理同样的问题。 gettext的常见做法是使用英文文本作为关键字。 最近,我们的复制编辑器改变了一大堆英文文本(其他语言很难触及)所以我们必须更改所有PO文件的所有源代码。
我们正在转向中性密钥。 因为我们已经在Java上有一些网站。 我们将使用相同的属性名称格式。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.