使用gettext php函数无法翻译成任何其他语言

时间:2014-12-30 11:51:26

标签: php gettext php-gettext

我在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上运行。

2 个答案:

答案 0 :(得分:1)

Windows上的

setlocale()存在问题。

来自setLocale() in PHP Manual

  

Windows用户可以在以下位置找到有关区域设置字符串的有用信息   微软的MSDN网站。支持的语言字符串可以在中找到   »language strings documentation和支持的国家/地区   »country/region strings documentation

中的字符串

您可以尝试使用$language = 'english-us';代替$language = 'en_US';

我不确定ar_eg的语言代码,可能是Arabic_EgyptArabic_Egypt.1256

如果这不起作用,您仍然可以选择使用实现gettext的PHP库, 例如https://github.com/oscarotero/Gettexthttps://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");