繁体   English   中英

PHP本地化最佳实践? gettext的?

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM