【问题标题】:i18n with gettext but without the locale hassle?i18n 与 gettext 但没有语言环境的麻烦?
【发布时间】:2009-10-25 11:30:13
【问题描述】:

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

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

这是否可以使用 gettext 实现?或者有人知道另一种简单、小巧、快速 (!) i18n 的 PHP 解决方案,它可以处理 .po/.mo 文件,最好不需要 PHP 扩展?

【问题讨论】:

  • 不使用 gettext 扩展在 PHP 中使用 gettext 实际上是不可能的,但不要担心这是 PHP 的一个非常常见/标准的扩展,并且大多数安装确实已经激活了它。
  • @Sorin:有可能,有一个原生 PHP 实现,其中包含大多数(如果不是全部)gettext 函数。
  • @votingmeisfree wordpress 和 cakephp,仅举几例,使用 po 和 mo 文件而不使用 gettext 实现。他们直接打开文件。

标签: php internationalization translation gettext


【解决方案1】:

即使在非标准语言环境下,此方法也应有效:

$locale = 'someWeirdLocale';

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

享受吧!

【讨论】:

    【解决方案2】:

    【讨论】:

    • 而且它不需要 gettext 扩展 :) 他们也有用于更友好源的适配器 - 数组、xml、csv 等
    • 谢谢,这看起来很有趣。我一直在寻找 Zend 很长一段时间,也许我会尝试一下。如果有人知道的话,我仍然更喜欢轻量级的独立解决方案。
    • 哦,它比看起来更轻巧。你可以只使用你需要的类:对于 Zend_Translate,你只需要 Zend_Translate、Zend_Locale、Zend_Loader 和 Zend_Exception(也许我错了,你需要或多或少,试试看)
    • 谢谢,我想我会试一试的!
    猜你喜欢
    • 2011-01-04
    • 1970-01-01
    • 1970-01-01
    • 2013-06-14
    • 2018-01-03
    • 1970-01-01
    • 1970-01-01
    • 2016-02-22
    • 2015-10-03
    相关资源
    最近更新 更多