PHP setlocale回退到系统默认语言环境

时间:2016-04-27 19:07:17

标签: php setlocale mo

这是我用来设置语言的代码:

$locale = 'en_US';
putenv('LANG='.$locale);
setlocale(LC_ALL, $locale);
bindtextdomain($locale, ROOTPATH.'/admin/locale');
bind_textdomain_codeset($locale, 'UTF-8');
textdomain($locale);
echo setlocale(LC_ALL, 0).'<br><br>';
echo _('register_success');

打破它:

$locale = 'en_US';

将此设置为'pt_PT'可以完成葡萄牙语的工作,但如果将其设置为其他,则不会转换任何内容。

putenv('LANG='.$locale);
setlocale(LC_ALL, $locale);
bindtextdomain($locale, ROOTPATH.'/admin/locale');

(ROOTPATH是项目根文件夹路径的var)

bind_textdomain_codeset($locale, 'UTF-8');
textdomain($locale);

下一部分总是输出: LC_COLLATE = C; LC_CTYPE = Portuguese_Portugal.1252; LC_MONETARY = C; LC_NUMERIC = C; LC_TIME = C

echo setlocale(LC_ALL, 0).'<br><br>';

我正在测试的字符串

echo _('register_success');

在将其设置为“en_US”之前,我已经尝试了setlocale(LC_ALL, NULL)setlocale(LC_ALL, ''),但它也没有帮助,尽管它echo setlocale(LC_ALL, 0)仅打印Portuguese_Portugal.1252

我也试图改变我的系统语言和所有语言,但它仍然在提升Portuguese_Portugal.1252,不太确定如何......

这是.po / .mo文件的文件夹结构。

root
    - admin/
        - locale/
            - en_US/
                - LC_MESSAGES/
                    - en_US.mo
                    - en_US.po
            - pt_PT/
                - LC_MESSAGES/
                    - pt_PT.mo
                    - pt_PT.po

修改

这些是setlocale()为不同代码返回的值(我不知道它是否有帮助,但它们对我来说似乎不太一致):

setlocale(LC_ALL, 'pt_PT');
echo setlocale(LC_ALL, '0');

输出:LC_COLLATE = C; LC_CTYPE = Portuguese_Portugal.1252; LC_MONETARY = C; LC_NUMERIC = C; LC_TIME = C

setlocale(LC_ALL, 'PT');
echo setlocale(LC_ALL, '0');

输出:PT

setlocale(LC_ALL, 'US');
echo setlocale(LC_ALL, '0');

输出:English_United States.1252

setlocale(LC_ALL, 'EN');
echo setlocale(LC_ALL, '0');

输出:EN

setlocale(LC_ALL, 'en_US');
echo setlocale(LC_ALL, '0');

输出:LC_COLLATE = C; LC_CTYPE = Portuguese_Portugal.1252; LC_MONETARY = C; LC_NUMERIC = C; LC_TIME = C

1 个答案:

答案 0 :(得分:0)

setlocale(LC_ALL, '')

为我工作。