【问题标题】:PHP- Get current localePHP- 获取当前语言环境
【发布时间】:2015-04-29 01:30:05
【问题描述】:

我正在使用此功能设置网站的区域设置:

function set_locale($locale) { // ie. en, es

    $language = $locale;
    putenv("LANG=".$language); 
    setlocale(LC_ALL, $language);
    $domain = "phd";
    bindtextdomain($domain, "locale"); 
    bind_textdomain_codeset($domain, 'UTF-8');

    textdomain($domain);

} // end set_locale

当有人访问该网站时,他们可以更改他们的语言环境。我要做的是在站点的其他地方检索当前语言环境。

我该怎么做?

【问题讨论】:

  • 保存在会话中?
  • 不知道为什么你使用 putenv,但要检索它只需使用 getenv()
  • 这个配置的范围是什么?您是否允许他们在连接期间进行设置?您在寻找永久套装吗?或者您是否尝试动态确定他们的语言环境?
  • 他们点击带有 GET 变量的链接,例如 ?do=locale&lang=en,每个页面都会检查这些 GET 变量,如果设置,将运行此函数。

标签: php


【解决方案1】:

你可以像这样调用 setlocale,它会返回当前的本地。

$currentLocale = setlocale(LC_ALL, 0);
echo $currentLocale; //outputs C/en_US.UTF-8/C/C/C/C on my machine

这是来自 php.net 的文档,由 @JROB 评论

语言环境

如果 locale 为“0”,则 locale 设置不受影响,仅返回当前设置。

如果 locale 为 NULL 或空字符串 "",则 locale 名称将从与上述类别同名的环境变量的值中设置,或者从 "LANG" 中设置。

如果语言环境是一个数组或后跟附加参数,则尝试将每个数组元素或参数设置为新的语言环境,直到成功。如果在不同的系统上以不同的名称知道某个语言环境,或者为可能不可用的语言环境提供后备,这将非常有用。

【讨论】:

  • 为了澄清,我已经从 php.net 发布了这个:setlocale (int $category, string $locale)。如果 locale 为“0”,则 locale 设置不受影响,仅返回当前设置。
  • 另请参阅localeconv 以获取数字格式。
  • PHP 8.0+ 的更新。我使用setlocale(LC_ALL, 'en_US');setlocale(LC_ALL, 0); 只返回C
  • 对不起,我现在发现了问题。 (stackoverflow.com/a/70312801/128761)
【解决方案2】:

两年后的另一个答案!

您可以简单地使用Locale::getDefault()locale_get_default() 来获取当前语言环境。

http://php.net/manual/en/locale.getdefault.php

Intl Locale 类是旧函数的现代替代品。一旦开始使用,需要通过php.net/manual/en/locale.setdefault.php函数更新本地

【讨论】:

  • 不,它没有。它获取 default 语言环境,而不是 current 语言环境。根据定义,默认语言环境与当前语言环境不同。当您在语言环境之间切换时, setlocale(LC_WHATEVER, 0) 仍然是检索当前语言环境的方法。
  • 您再次指的是 default 语言环境,正如我已经说过的,根据定义与 current 语言环境不同。跨度>
  • 代码生成具有不同语言环境的文档,例如使用 strftime。无法将语言环境传递给 strftime,因此需要临时更改语言环境。我知道 intl 模块可以用于日期/时间格式,但是 php 中仍然有很多函数依赖于当前的语言环境。甚至从浮点数到字符串的转换也使用当前语言环境。因此,当你在做 i18n 的事情并且需要在不同的语言环境之间切换时,默认语言环境并不总是有用的。
  • 这也不适用于所有机器。我收到“未捕获的错误:调用未定义的函数 locale_get_default”错误。
  • @vee,你需要先安装 intl 扩展
猜你喜欢
  • 2017-04-11
  • 1970-01-01
  • 1970-01-01
  • 2014-10-25
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2019-06-22
相关资源
最近更新 更多