所以我开始讨论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, and LC_MESSAGES
- 我是否必须更新任何脚本,例如,生成时间或类似的东西?
比方说,新配置的服务器没有配置es_ES.utf-8
语言环境,我知道如何生成语言环境,但如果它不可用,那么我应该在数组中提供备份吗?如果有人可以提供一个实际的例子,那会很棒,例如:
setlocale( LC_ALL, array('es_ES.UTF-8', 'es_ES', 'es') )
是否有某种类型的网站提供此类示例,或者人们通常会提出优先顺序?
我在某处读到locale
或i18n
文件夹的常规结构如下所示。
结构真的重要吗?似乎所有发生的事情就是当你bindtextdomain('messages', 'locale')
递归搜索该目录messages.mo
时,我可能没有注意到,但它可能会考虑这些目录。
我对结构有多严格?
locale
en_US
LC_MESSAGES
messages.po
es_ES
LC_MESSAGES
messages.po
6.我是否应该费心去尝试测试系统是否真的支持语言环境?因为,例如,如果服务器没有语言环境,并且我尝试使用setlocale
进行设置,那么它就不会出错或任何错误,它只会默默地让它过去。
答案 0 :(得分:3)
这是不你的问题的合格答案,我不是说使用gettext是坏的 - 我从来没有用它来对它有一个非常深刻的意见 - 但我决定由于其复杂性和在具有不同语言环境的不同平台上的大量不可预测性,因此单独留下gettext。我发布了一个寻找替代here的问题,虽然周围的情况并不多,但Zend_translate软件包似乎值得一看。我自己还没有解决这个问题。
如果您使用gettext,请务必查看PHP Manual User Contributed Notes on Gettext。