PHP中的国际化

Internationalization in PHP

提问人:RobertPitt 提问时间:9/21/2010 最后编辑:JasonMArcherRobertPitt 更新时间:8/19/2015 访问量:7596

问:

我目前正在研究集成到项目中的最佳方法。i18n

我想到了几种方法,首先是存储字符串和相关语言环境的数据库方案,但问题是选择字符串并不容易,因为我不想执行这样的查询:

SELECT text FROM locales WHERE locale = 'en_GB' AND text_id = 245543

SELECT text FROM locales WHERE locale = 'en_GB' AND text_primary = 'hello'

下一个方法是将它们存储在文件中,例如,然后尝试通过专门开发的类访问它们,如下所示:locales/en_gb/login/strings.php

$Language = Registry::Construct('Language',array('en_GB'));
echo $Language->login->strings->hello;

这样做的问题是我必须构建一个系统,该系统将通过管理面板女巫更新这些文件,这非常耗时,不仅要构建系统来管理字符串,而且实际上要随着站点的增长管理字符串

  • 还有哪些其他方法对大型系统有益
  • 有没有自动化的方法可以进行这样的“翻译”
  • 我是否应该坚持使用数据库方法并构建一个系统供用户翻译带有评级/建议更好版本的字符串?
  • 您过去尝试过哪些系统,我应该研究它们还是完全避免它们。
PHP 国际化

评论

0赞 Sunny 12/13/2010
你最终做了什么?我也有类似的问题。

答:

3赞 Graham Perks 9/21/2010 #1

查看 Gettext (http://php.net/manual/en/book.gettext.php) 库。

不要将文本放入数据库。这只会让翻译团队的生活变得艰难。

8赞 Gordon 9/21/2010 #2

除了前面提到的,PHP 5.3 还具有原生的国际化支持gettext

如果这不是一个选项,请考虑使用 Zend Framework 的 Zend_TranslateZend_Locale和相关组件。 支持多种适配器,包括但不限于简单数组、gettext、XmlTm 等。Zend_Translate

5赞 halfdan 9/21/2010 #3

我已经实现了一个 XML 翻译实用程序,作为更大项目的一部分。你可以在这里找到它,一个示例翻译文件在这里(en_US)。

评论

1赞 halfdan 9/21/2010
他们还没有被起诉。这个项目相对较新,所以我正在建立框架。UnitTests 将在未来几天内推出。
0赞 RobertPitt 9/21/2010
太好了,我喜欢 XML Formation,而不是使用数组/对象之类的东西,使深度更简单:) +1
0赞 halfdan 9/21/2010
为翻译人员编写 GUI 工具也应该很容易。虽然没有时间写一个:)
0赞 xarlymg89 3/6/2013
惊人的图书馆!!我喜欢它,说真的。我会检查你的其余库,你的项目看起来非常有趣(我想是你的一切)。多谢!
5赞 UkrStackOverflow 9/21/2010 #4

最令人印象深刻的研究方法是Drupal的实现。第二好的,是Wordpress。两者都使用 gettext 和 .pot/.po/.mo 进行本地化。而且,好消息是有一个名为 Poedit 的漂亮的开源 .po 编辑器。它适用于 Windows 系统用户,这具有更广泛的吸引力。它也可用于 Mac 和 Linux。在这里查看: http://www.poedit.net/