所以我开始搞乱gettext,但是我仍然对某些事情感到困惑,如果有人可以帮助我并为我填补空白,那将是很棒的.
>通常,大多数实现只是基于语言参数调用setlocale.在任何情况下,我可能需要使用putenv,对于Windows安装程序中的极端情况?
>我的php框架的默认语言是英语,UTF-8-因此我将LC_ALL设置为en_US.utf-8,因为en_US是ISO-8859-1 / Latin1,而且显然不像UTF-8那样支持?
>调用setlocale(LC_ALL,’en_US.utf-8′)之后,我应该了解一些陷阱吗?由于它会更改所有这些内容:LC_COLLATE,LC_CTYPE,LC_MONETARY,LC_NUMERIC,LC_TIME和LC_MESSAGES-我是否需要更新任何脚本,例如生成时间或类似时间的脚本?
>例如,假设一台新配置的服务器未配置es_ES.utf-8语言环境,我知道如何生成语言环境,但是如果它不可用,那么我应该在阵列中提供备份吗?如果有人可以提供一个实际的例子,那就太好了,例如:
setlocale(LC_ALL,array(‘es_ES.UTF-8′,’es_ES’,’es’)))
是否有某种提供此类示例的网站,或者人们通常会提出优先顺序吗?
>我在某处读到,语言环境或i18n文件夹的通常结构如下所示.
结构真的重要吗?似乎发生的一切是当您执行bindtextdomain(‘messages’,’locale’)时,它递归地在该目录中搜索messages.mo,我可能没有注意到,但可能是在考虑目录.
我对结构应该有多严格?
locale
en_US
LC_MESSAGES
messages.po
es_ES
LC_MESSAGES
messages.po
6.我什至应该尝试测试系统是否真正支持语言环境吗?因为例如,如果服务器没有语言环境,而我尝试使用setlocale设置它,则不会出错或发生任何错误,它只会默默地让它过去.
解决方法:
这不是您问题的合格答案,我并不是说使用gettext是不好的-我从没有用过足够的精力来对它有深刻的见解-但由于它的复杂性和巨大的不可预测性,我决定不使用它在具有不同语言环境的不同平台上.我发布了一个问题,寻找替代品here,虽然周围没有很多东西,但Zend_translate包似乎值得一看.我自己还没有解决.
如果使用gettext,请确保签出PHP Manual User Contributed Notes on Gettext.