我在Windows上使用WAMP服务器并制作测试项目。 我在网站文件夹中有这些文件:
C:\瓦帕\ WWW \项目\区域\ ar_EG \ LC_MESSAGES \ messages.po C:\瓦帕\ WWW \项目\区域\ EN_US \ LC_MESSAGES \ messages.po
以下是PHP代码:
$language="en_US";
$encoding = "UTF-8";
putenv("LANG=".$language);
setlocale(LC_ALL,$language);
$domain="messages"; // name of PO file
bindtextdomain($domain,"Locale");
bind_textdomain_codeset($domain, $encoding);
textdomain($domain);
echo gettext("name");
以上代码工作正常。
当我尝试将en_US
替换为ar_EG
时,它还会显示en_US
的翻译,当我尝试删除en_US
文件夹并再试一次时会显示{{1}不是msgid
。
我搜索并发现Windows平台上存在msgstr
的问题,但我需要一个解决方案才能在Windows上运行。
答案 0 :(得分:1)
setlocale()存在问题。
Windows用户可以在以下位置找到有关区域设置字符串的有用信息 微软的MSDN网站。支持的语言字符串可以在中找到 »language strings documentation和支持的国家/地区 »country/region strings documentation。
中的字符串
您可以尝试使用$language = 'english-us';
代替$language = 'en_US';
。
我不确定ar_eg
的语言代码,可能是Arabic_Egypt
或Arabic_Egypt.1256
。
如果这不起作用,您仍然可以选择使用实现gettext的PHP库, 例如https://github.com/oscarotero/Gettext或https://launchpad.net/php-gettext。
答案 1 :(得分:0)
我在Windows上使用以下代码:
$locale = 'en_US';
if(!defined('LC_MESSAGES') || !setlocale(LC_ALL, $locale)) {
putenv("LC_ALL=$locale");
}
$domain = 'messages';
$path = "C:\wamp\www\project\locale";
$codeset = 'UTF-8';
bindtextdomain($domain, $path);
textdomain($domain);
bind_textdomain_codeset($domain, $codeset);
echo gettext("name");