【发布时间】:2016-04-27 19:07:17
【问题描述】:
这是我用来设置语言的代码:
$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 是项目根文件夹路径的变量)
bind_textdomain_codeset($locale, 'UTF-8');
textdomain($locale);
下一部分总是输出这个: LC_COLLATE=C; LC_CTYPE=葡萄牙语_葡萄牙语.1252; LC_MONETARY=C; LC_NUMERIC=C; LC_TIME=C
echo setlocale(LC_ALL, 0).'<br><br>';
还有我正在测试的字符串
echo _('register_success');
在将setlocale(LC_ALL, NULL) 和setlocale(LC_ALL, '') 设置为“en_US”之前,我已经尝试过,但它也没有帮助,尽管它使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');
输出:英文
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
【问题讨论】:
-
当您说它默认返回时;在什么时候?其次,你有
en_USLC_MESSAGES 文件夹吗?你确定它不是在看en_US而不是en_US.utf8? -
我认为它甚至没有设置任何东西,因为如果我在设置后立即回显 setlocale(),输出仍然相同(LC_ ...葡萄牙语等...)。是的,我有。我编辑了问题以包含文件夹结构。让我相信文件一切正常的唯一原因是 pt_PT 工作正常,并且 en_US 的文件实际上是相等的。
-
我是否应该为每种语言分别设置最后带有
.utf8的文件夹? -
这一切都取决于
setlocale()返回的内容,如果它返回en_US,它将寻找locale/en_US- 所以它返回Portuguese_Portugal.1252你需要一个文件夹locale/Portuguese_Portugal.1252bindtextdomain()正在查看的位置 -
但它对 pt_PT 工作正常,即使它返回
Portuguese_Portugal.1252并且文件夹名为pt_PT