在最近遇到了一些问题之后gettext
,我对它的工作原理以及将来如何避免这些问题提出了几个问题。
我的问题是我试图将语言环境设置为de
,而不是de_DE
,这在服务器上不可用。我的本地副本正在使用php-gettext
包(包是正确的术语吗?),因此很高兴使用系统上没有的语言环境。这产生了2个问题:
- 当目录
de_DE
结构为locales/de/LC_MESSAGES/file.po
- 如何检查是否安装了语言环境?例如,如果我想使用
de_DE.utf8
,但它不可用,所以我必须回退到de_DE
,或者zh_HK
不可用所以我想回退到zh_CN
。我知道这些是边缘情况,但我想让代码尽可能健壮。澄清一下,这是系统上是否有区域设置(如使用locale -a
命令所示),而不是系统中是否有文件。
另外,在多个平台上进行这项工作的最佳实践是什么?我目前的代码是:
$localeCode = 'de_DE'; // Example, would be generated
putenv('LANG=' . $localeCode);
putenv('LANGUAGE=' . $localeCode);
setlocale(LC_ALL, $localeCode);
$domain = 'mydomain'; // Again, example
// Don't load the locale from the cache
bindtextdomain($domain, '../locales/nocache');
bindtextdomain($domain, '../locales');
bind_textdomain_codeset($domain, 'UTF-8');
textdomain($domain);