提问人:RobertPitt 提问时间:9/21/2010 最后编辑:JasonMArcherRobertPitt 更新时间:8/19/2015 访问量:7596
PHP中的国际化
Internationalization in PHP
问:
我目前正在研究集成到项目中的最佳方法。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;
这样做的问题是我必须构建一个系统,该系统将通过管理面板女巫更新这些文件,这非常耗时,不仅要构建系统来管理字符串,而且实际上要随着站点的增长管理字符串
- 还有哪些其他方法对大型系统有益
- 有没有自动化的方法可以进行这样的“翻译”
- 我是否应该坚持使用数据库方法并构建一个系统供用户翻译带有评级/建议更好版本的字符串?
- 您过去尝试过哪些系统,我应该研究它们还是完全避免它们。
答:
查看 Gettext (http://php.net/manual/en/book.gettext.php) 库。
不要将文本放入数据库。这只会让翻译团队的生活变得艰难。
除了前面提到的,PHP 5.3 还具有原生的国际化支持gettext
如果这不是一个选项,请考虑使用 Zend Framework 的 Zend_Translate
、Zend_Locale
和相关组件。 支持多种适配器,包括但不限于简单数组、gettext、XmlTm 等。Zend_Translate
我已经实现了一个 XML 翻译实用程序,作为更大项目的一部分。你可以在这里找到它,一个示例翻译文件在这里(en_US)。
评论
最令人印象深刻的研究方法是Drupal的实现。第二好的,是Wordpress。两者都使用 gettext 和 .pot/.po/.mo 进行本地化。而且,好消息是有一个名为 Poedit 的漂亮的开源 .po 编辑器。它适用于 Windows 系统用户,这具有更广泛的吸引力。它也可用于 Mac 和 Linux。在这里查看: http://www.poedit.net/
上一个:MySql JOINS 的优缺点
下一个:C# 应用程序中的本地化
评论