PHP gettext()-putenv和setlocale

PHP gettext()-putenv和setlocale,php,localization,internationalization,locale,gettext,Php,Localization,Internationalization,Locale,Gettext,我看到大多数示例都使用了以下内容: putenv('LC_ALL=de_DE'); setlocale(LC_ALL, 'de_DE'); bindtextdomain("myPHPApp", "./locale"); echo gettext("Welcome to My PHP Application"); 如果我只想完成消息翻译,我已经尝试过只需要putenv,而不需要使用setlocale提供的函数,如时间、货币等 因此,忽略setlocale?似乎不包括它是安全的 如果区域设置为N

我看到大多数示例都使用了以下内容:

putenv('LC_ALL=de_DE');
setlocale(LC_ALL, 'de_DE');

bindtextdomain("myPHPApp", "./locale");
echo gettext("Welcome to My PHP Application");
如果我只想完成消息翻译,我已经尝试过只需要
putenv
,而不需要使用
setlocale
提供的函数,如时间、货币等


因此,忽略
setlocale

似乎不包括它是安全的

如果区域设置为NULL或空字符串“”,则将设置区域设置名称 从与 以上类别,或来自“朗”

信息:

不需要

当然,您可以执行
setlocale(LC_ALL,”)正如另一个答案所建议的,但这只会使其返回到上面一行中的环境变量设置
putenv

实际上可以删除的是
putenv
call。至少对我来说,以下片段仍然返回德语翻译:

putenv('LC_ALL=en_US');
setlocale(LC_ALL, 'de_DE');

bindtextdomain("myPHPApp", "./locale");
echo gettext("Welcome to My PHP Application");
使用
setlocale
的另一个好处是检查系统中是否实际安装了给定的语言环境。例如:

if (false === setlocale(LC_ALL, $localeCode)) {
    throw new LocaleNotSupportedException(sprintf('Locale "%s" is not installed in the system.', $localeCode));
}

echo gettext("Welcome to My PHP Application");
而且在绑定域之前也不需要设置区域设置。你也可以在以后的任何时候做