带有 gettext 但没有语言环境麻烦的 i18n?

i18n with gettext but without the locale hassle?

提问人:Pekka 提问时间:10/25/2009 更新时间:10/27/2009 访问量:2704

问:

我正在寻找一种符合标准的方式来存储 Web 应用程序的多语言内容。到目前为止,我一直使用自己的“translate()”函数从数据库中的文件或字典表中读取数据。但是,如果使用 Web 应用的不同副本,则在数据库表中使字典保持最新非常麻烦。

我喜欢gettext,因为有很多工具可用于它。但是,我为不同的平台开发应用程序。我绝对不愿意处理 setlocale() 和 consorts 的蹩脚方式 - 即您需要提供数十种不同的语言环境字符串变体,这些变体因系统而异才能使其正常工作。从来没有。我有一组语言 - 比如 de、en 和 es - 我想加载适当的字典并使用 _() 而不触及 setlocale() 或 bindtexdomain() 一次。

使用 gettext 可以以某种方式做到这一点吗?或者有人知道另一个简单、小、快速 (!) i18n 的 PHP 解决方案,它可以处理 .po/.mo 文件,最好不需要 PHP 扩展名?

PHP 国际化 翻译 gettext

评论

2赞 sorin 12/13/2009
如果不使用 gettext 扩展,实际上不可能在 PHP 中使用 gettext,但不要担心这是 PHP 的一个非常常见/标准的扩展,并且大多数安装都已经激活了它。
1赞 Alix Axel 7/27/2010
@Sorin:有可能,有一个原生的PHP实现,其中包含大多数(如果不是全部)gettext函数。
0赞 T0xicCode 8/27/2012
@votingmeisfree WordPress 和 Cakephp 中,仅举几例,使用 po 和 mo 文件而不使用 gettext 实现。他们直接打开文件。

答:

2赞 Valentin Golev 10/25/2009 #1

Zend_Translate使用它

http://framework.zend.com/manual/en/zend.translate.adapter.html#zend.translate.adapter.gettext

评论

0赞 David Snabel-Caunt 10/25/2009
而且它不需要 gettext 扩展名:)他们还有用于更友好来源的适配器 - 数组、xml、csv 等
0赞 Pekka 10/26/2009
谢谢,这看起来很有趣。我已经寻找和 Zend 很长一段时间了,也许我会尝试一下。如果有人知道的话,我仍然更喜欢轻量级的独立解决方案。
0赞 Valentin Golev 10/26/2009
哦,它比看起来更轻。你只能使用你需要的课程:对于Zend_Translate,你只需要Zend_Translate、Zend_Locale、Zend_Loader和Zend_Exception(也许我错了,你需要或多或少,试试吧)
3赞 Alix Axel 10/26/2009 #2

此方法即使适用于非标准区域设置:

$locale = 'someWeirdLocale';

putenv('LC_MESSAGES=' . $locale);
bindtextdomain('domain', './locale');
textdomain('domain');

享受!