我一直在寻找为国际化的一个开源项目的选项:
Gettext的,这似乎每个人都建议,显然需要语言环境被“安装在系统上”使用。 请参阅本笔记上的PHP手册,这正好反映了我的情况。 这太问题也问到同样的问题。 因为我不能相信最终用户有其系统上安装相应的语言环境,这是不适合的开源项目。 此外,这是非常非常奇怪的,你要只安装语言环境中使用已翻译(IMO)的字符串。
一个Zend_Translate还建议支持的gettext的时候,但是我没有使用Zend框架,所以我不认为这是我的选择。 有些人说,你可以从Zend框架拆分它,但我不知道如何。 如果有人能告诉我是什么文件,我需要(我已经下载了Zend框架的压缩包),挑,我会开到里用Zend_Translate。
阵列。 这就是我现在做的事情,但它的效果并不理想,因为:
- 这将是使用了大量的内存来定义每一个翻译的时候,大部分不会由当前页面中使用。
- 我有发现自己复制阵列,这已经成为1000行代码长在按键的问题,我很少添加任何东西...
- 这意味着非程序员不能真正转化,而poEdit的是,每个人都希望使用标准。
我能以某种方式阅读.mo
文件,而Gettext的或一个Zend_Translate,或者我必须使用gettext? 如果是这样,我怎样才能使所有的语言环境中我连接到上面的问题的工作,什么样的?
编辑:现在我愿意用一个Zend_Translate。 我只需要找出哪些文件,我需要(这将是巨大的,如果他们可以合并成一个文件) - 我不想整个Zend框架在我的项目。
更新:我很感兴趣,看看开源项目有多大处理国际化:
- Moodle的使用数组 。
- Drupal的似乎使用阵列,数据库回退 。 他们还运行
setlocale('C')
来获得一个通用的语言环境和规避整个setlocale
混乱。 - WordPress使用自己的职能堆的国际化,但下面不使用gettext。
所以没有这三个随机项目都使用了Zend_Framework,也不直接gettext的,据我所看到的。
也许这是用一个好主意C
区域,存储在文本域名语言的名称,并从那里走。
因此,这里的据我再也忍受不了了:
$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的。