我一直在寻找国际化开源项目的选项:
Gettext,似乎每个人都推荐,显然需要“安装在您的系统上”才能使用语言环境。看到这个note http://www.php.net/manual/en/book.gettext.php#91187PHP手册上的内容准确地反映了我的情况。这所以问题 https://stackoverflow.com/questions/3398113/php-gettext-problems也询问同样的问题。这不适合开源项目,因为我不相信最终用户的系统上安装了适当的区域设置。此外,非常非常奇怪的是,您必须安装语言环境才能使用您已翻译的字符串(IMO)。
有时也建议使用 Zend_Translate 以支持 gettext,但我没有使用 Zend 框架,所以我认为这不是我的选择。有些人说你可以将它从 Zend 框架中分离出来,但我不知道如何分离。如果有人可以告诉我需要挑选哪些文件(我已经下载了 Zend 框架的 tarball),我将愿意使用 Zend_Translate。
-
数组。这就是我现在正在做的,但它并不理想,因为:
- 当当前页面不会使用大多数翻译时,它将占用大量内存来定义每个翻译。
- 我发现自己在复制数组中的键时遇到问题,数组已经有 1000 行代码长,而且我几乎没有添加任何内容......
- 这意味着非程序员无法真正翻译,而 POedit 是每个人都期望使用的标准。
我能以某种方式阅读吗.mo
没有 Gettext 或 Zend_Translate 的文件,还是必须使用 Gettext?如果是这样,我怎样才能使所有区域设置正常工作,就像我上面链接的问题一样?
编辑:我现在愿意使用 Zend_Translate。我只需要弄清楚我需要哪些文件(如果它们可以合并到一个文件中那就太好了) - 我不希望在我的项目中使用整个 Zend Framework。
更新:我有兴趣了解大型开源项目如何处理 i18n:
- Moodle 使用arrays https://github.com/moodle/moodle/blob/master/lang/en/.
- Drupal好像用数组,带有数据库后备 https://github.com/drupal/drupal/blob/7.x/includes/bootstrap.inc#L1464。他们也跑
setlocale('C')
获得一个通用的语言环境并绕过整个setlocale
mess.
- WordPress 使用自己的函数堆 https://github.com/WordPress/WordPress/blob/55fb020e84fd46bd56668facd1f3a74be1776cbf/wp-includes/l10n.php对于 i18n,虽然下面确实使用了 gettext。
因此,据我所知,这三个随机项目都没有使用 Zend_Translate,也没有直接使用 gettext。
也许使用C
locale,将语言名称存储在文本域名中,然后从那里开始。
据我所知,这就是:
$lang = 'de'; //debug
setlocale( LC_ALL, 'C' );
bindtextdomain( 'default', PATH . "/locale/$lang" );
bind_textdomain_codeset( 'default', 'UTF-8' );
textdomain( 'default' );
var_dump( file_exists( PATH . "/locale/$lang/C/LC_MESSAGES/default.mo" ) ); //bool(true)
但我仍然只得到英文字符串,即使我使用了 poedit、msgfmt 等来制作适当的文件。我也尝试过重新启动 Apache。
Try gettext-php https://launchpad.net/php-gettext/。它是用 PHP 编写的 gettext 的直接替代品。我认为,它最初是为 WordPress 完成的,因为 WP 需要在共享主机上运行,而这些主机并不总是针对每个区域设置进行配置。在我看来,这也是你的问题。
它对性能造成了一些影响,但这对我来说根本不是问题。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)