代码之家  ›  专栏  ›  技术社区  ›  Nathan H

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

  •  21
  • Nathan H  · 技术社区  · 14 年前

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

    我研究过PHP的“getText”,但是,如果我理解正确,我会发现一个很大的缺陷:

    如果我的网页有“你好世界”作为静态文本。我可以把绳子当作 <?php echo gettext("Hello World"); ?> ,使用工具生成订单/生产任务文件。然后我会把文件交给一个翻译来处理。

    过了几天,我们想把英文改成“你好,小世界”? 我是否要更改GetText中的值?我是否要创建一个英文订单文件并在那里更改它? 如果您更改getText,它会将其视为一个新字符串,并立即释放当前翻译…

    在我看来,渐渐地,PHP文件的内容将到处都是旧文本。 或者翻译的人可能会被告知“当你看到hello world时,改为翻译hello small world”。

    我不知道我有点困惑。

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

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

    谢谢

    3 回复  |  直到 11 年前
        1
  •  14
  •   tplaner    14 年前

    你基本上是问和回答你自己的问题,答案可能只是对po文件的工作方式有一个稍微更好的理解。

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

    现在,您可以随心所欲地制作msgid,您完全可以做到:

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

    然后你再也不会在源代码中碰到这个字符串了,你只需要通过po文件编辑这个字符串。

    所以基本上,您的问题的答案是为字符串应该说的内容制作getText值标识符,但是翻译器通常使用默认语言文件文本作为转换的基础,而不是标识符本身。

    我希望这是清楚的。

        2
  •  9
  •   Tim    11 年前

    我知道答案已经被接受了,上面的答案是好的。但是使用永久的机器类型的钥匙还有一个问题,比如 thing.stuff.widget 使用GetText时。

    虽然使用永久密钥是一种更好的开发方法,但getText并没有针对这种工作方式进行设置,这会使您的 工作流 .

    如果您向翻译人员展示的是一个po文件,其中填充了键来代替源文本,那么他们可能不知道英语应该是什么。因此,您必须向他们提供第二个包含源语言翻译的文件,以便他们进行比较。不是世界末日,而是对他们更加挑剔,而不是GetText是如何设计的。(方桩、圆孔等)

    我认为po作为一种在PHP中进行翻译的文件格式是非常好的,特别是如果您没有使用一个具有良好的l10n模块的框架,但这并不意味着它对工作流程和您的翻译过程都有好处的话,建议您使用它。

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

    或者使用允许使用关键字和单词的不同临时文件格式。 TMX 就是一个例子。如果您仍然想在运行时使用gettext,可以 convert the files .

        3
  •  7
  •   ZZ Coder    14 年前

    目前,我正在处理同一个问题。getText的常见做法是使用英语文本作为键。最近,我们的复制编辑器更改了整个英文文本(其他语言几乎不接触),所以我们必须更改所有源代码所有的po文件。

    我们正在换一把中性钥匙。因为我们已经在Java上有了一些站点。我们将使用相同的属性名格式。