Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/275.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何将浏览器区域设置映射到我的一个php gettext i18n区域设置?_Php_Internationalization_Locale - Fatal编程技术网

如何将浏览器区域设置映射到我的一个php gettext i18n区域设置?

如何将浏览器区域设置映射到我的一个php gettext i18n区域设置?,php,internationalization,locale,Php,Internationalization,Locale,我已经开始使用gettext来翻译我的站点。到目前为止,我已经将主要菜单和标题翻译成法语、西班牙语和葡萄牙语 我的文件夹结构如下所示: .../locale /en_GB.utf8 /LC_MESSAGES messages.po messages.mo /fr_FR.utf8 /LC_MESSAGES messages.po messages.mo

我已经开始使用gettext来翻译我的站点。到目前为止,我已经将主要菜单和标题翻译成法语、西班牙语和葡萄牙语

我的文件夹结构如下所示:

.../locale
    /en_GB.utf8
        /LC_MESSAGES
            messages.po
            messages.mo
    /fr_FR.utf8
        /LC_MESSAGES
            messages.po
            messages.mo
    /es_ES.utf8
        /LC_MESSAGES
            messages.po
            messages.mo
    /pt_PT.utf8
        /LC_MESSAGES
            messages.po
            messages.mo
我可以获得用户的默认浏览器区域设置,如下所示:

$locale = Locale::acceptFromHttp($_SERVER['HTTP_ACCEPT_LANGUAGE']);
如果他们的语言环境是
en\u GB
fr\u fr
es\u es
pt\u pt
这非常有效,我只需在语言环境中附加
.utf8
,我就可以开始了

但可能根本不设置区域设置。嗯,好的,我们将添加以下内容:

if (!$locale) {
    $locale = 'en_GB';
}
但我知道,区域设置可能只是
fr
(也可能是
fr
?)。没问题,这会抓住大多数人:

if (strlen($locale)==2) {
    $locale = strtolower($locale).'_'.strtoupper($locale);
}
好的。但是代码开始增加,现在我看到显然
french
是一个有效的语言环境。可能还有无数我不知道的奇怪的边缘案例

正确的方法是什么

在查看文档时,人们可能会认为
Locale::lookup
可以得到答案,但遗憾的是,答案不是:

var_dump(Locale::lookup(['en_GB','fr_FR','es_ES','pt_PT'], 'fr'));     // ''
var_dump(Locale::lookup(['en_GB','fr_FR','es_ES','pt_PT'], 'fr_FR'));  // 'fr_FR'
var_dump(Locale::lookup(['en_GB','fr_FR','es_ES','pt_PT'], 'fr_CA'));  // ''
var_dump(Locale::lookup(['en_GB','fr_FR','es_ES','pt_PT'], 'french')); // ''

var_dump(Locale::lookup(['en','fr','es','pt'], 'fr'));                 // 'fr'
var_dump(Locale::lookup(['en','fr','es','pt'], 'fr_FR'));              // 'fr'
var_dump(Locale::lookup(['en','fr','es','pt'], 'fr_CA'));              // 'fr'
var_dump(Locale::lookup(['en','fr','es','pt'], 'french'));             // ''