PHP 本地化最佳实践?获取文本?

我们正在使我们的网站国际化,允许多种语言。

我已经研究了php的“gettext”,但是,如果我理解正确,我看到了一个很大的缺陷:

如果我的网页有,让我们说“Hello World”作为静态文本。我可以把字符串作为,使用工具生成po / mo文件。然后我会把文件交给翻译人员来处理。<?php echo gettext("Hello World"); ?>

几天后,我们想将英文文本更改为“Hello Small World”?我是否更改 gettext 中的值?我是否创建一个英文PO文件并在那里进行更改?如果您更改gettext,它将将其视为新字符串,并且您将立即失去当前的翻译...

在我看来,逐渐地,php文件的内容将无处不在的旧文本。或者翻译的人可能不得不被告知“当你看到Hello World时,翻译Hello Small World”。

我不知道我感到困惑。

在其他编程语言中,我看到它们使用关键字,例如.web.home.featured.HelloWorld

在 PHP 中处理翻译的最佳方式是什么?

谢谢


答案 1

您基本上提出并回答了自己的问题,答案可能只是对PO文件的工作原理有了更好的理解。

在 PO 文件中,您有一个 msgid 和一个 msgstr。msgid 是 PHP 文件中替换为 msgstr 的值,具体取决于本地化。

现在你可以做任何你想做的事,你完全可以做到:

<?php echo _("web.home.featured.HelloWorld"); ?>

然后你再也不会在源中触摸这个字符串,你只能通过PO文件编辑这个字符串。

因此,基本上,您的问题的答案是,您将gettext值标识符设置为字符串应该说什么的内容,但是翻译人员通常使用默认语言文件文本作为转换的基础,而不是标识符本身。

我希望这很清楚。


答案 2

我知道一个答案已经被接受,上面的答案很好。但是,使用永久计算机样式的键(例如在使用 Gettext 时)存在另一个问题。thing.stuff.widget

虽然使用永久键是一种更好的开发方法,但 Gettext 不是针对这种工作方式设置的,这可能会使您的工作流程复杂化。

如果您向翻译人员出示一个 PO 文件,其中填充了键来代替源文本,他们可能不知道英语应该是什么。因此,您必须为他们提供包含源语言翻译的第二个文件,以便他们进行比较。不是世界末日,但对他们来说更繁琐,而不是Gettext的设计方式。(方钉、圆孔等)

我认为PO作为PHP翻译的文件格式是完全可以的,如果你没有使用一个具有良好l10n模块的框架,特别是建议这样做,但这并不意味着它对工作流程和翻译过程有好处。

我建议你达到一个工作流程,允许你的程序员使用永久密钥,你的翻译人员使用单词,并在另一端给你一个MO文件。看看Loco,了解一个解决方案。

或者,使用允许使用键和单词的其他临时文件格式。TMX就是一个例子。如果仍想在运行时使用 Gettext,则可以转换文件


推荐