PHP gettext() - putenv 和 setlocale

标签 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 是安全的吗?

最佳答案

不,这是必需的。

您当然可以执行 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/

相关文章:

django - 在 Django i18n 中,语言环境路径不起作用

javascript - 表单 -> 具有 jQuery 验证的数据库

asp.net - 使用 MVC 的属性路由和 RouteLocalization.mvc 的特定于语言的默认 URL

ios - 如何使用所有语言填充 iOS 选择器?

postgresql - 将 Postgresql 数据库从 SQL_ASCII 就地转换为 UTF8

grails - 在特定语言环境中呈现单个GSP

php - 获取数据库中行的站点 ID 以在 url 中发布

php - 仅使用 php 代码在模态框中加载完整的 HTML 页面

php - PHP PEAR Mail->发送成功/失败结果?

c# - ASP.NET MVC、本地化路由和用户的默认语言