我看到大多数示例都使用以下内容:
putenv('LC_ALL=de_DE');
setlocale(LC_ALL, 'de_DE');
bindtextdomain("myPHPApp", "./locale");
echo gettext("Welcome to My PHP Application");
如果我只想完成消息翻译,我尝试过只需要 putenv
,而不需要 setlocale
提供的功能,例如如时间、金钱等
那么,忽略 setlocale
是安全的吗?
最佳答案
不,这是必需的。
您当然可以执行 setlocale(LC_ALL, '');
正如其他答案所建议的那样,但这只会使其回退到由 putenv
设置的环境变量上面一行。
实际上可以删除的是 putenv
调用。至少对我来说,以下代码片段仍然返回德语翻译:
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");
而且在绑定(bind)域之前无需设置区域设置。您也可以在之后随时进行。
关于PHP gettext() - putenv 和 setlocale,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24247919/