提问人:Pekka 提问时间:10/25/2009 更新时间:10/27/2009 访问量:2704
带有 gettext 但没有语言环境麻烦的 i18n?
i18n with gettext but without the locale hassle?
问:
我正在寻找一种符合标准的方式来存储 Web 应用程序的多语言内容。到目前为止,我一直使用自己的“translate()”函数从数据库中的文件或字典表中读取数据。但是,如果使用 Web 应用的不同副本,则在数据库表中使字典保持最新非常麻烦。
我喜欢gettext,因为有很多工具可用于它。但是,我为不同的平台开发应用程序。我绝对不愿意处理 setlocale() 和 consorts 的蹩脚方式 - 即您需要提供数十种不同的语言环境字符串变体,这些变体因系统而异才能使其正常工作。从来没有。我有一组语言 - 比如 de、en 和 es - 我想加载适当的字典并使用 _() 而不触及 setlocale() 或 bindtexdomain() 一次。
使用 gettext 可以以某种方式做到这一点吗?或者有人知道另一个简单、小、快速 (!) i18n 的 PHP 解决方案,它可以处理 .po/.mo 文件,最好不需要 PHP 扩展名?
答:
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');
享受!
评论