我在用gettext翻译应用程序时遇到问题。
我的代码是:
<?php
$language = 'cs_CZ';
$translatefile = 'default';
setlocale(LC_ALL, $language);
putenv("LANG=".$language);
bindtextdomain($translatefile, __DIR__.'/locale');
textdomain($translatefile);
echo gettext("ADMIN_LOGIN_PROFESSIONAL");
当我运行脚本时,它仍然显示"ADMIN_LOGIN_PROFESSIONAL"。
我的文件结构:
- 根/
- index.php
- 区域设置/
- cs_CZ/
- LC_消息/
- 默认.mo
- LC_消息/
- cs_CZ/
我运行的是Windows7、Apache 2.2.22和PHP 5.3.13。
非常感谢你的帮助。。。
这对我有效:
$language = 'cs_CZ';
$translatefile = 'default';
putenv("LC_ALL=".$language);
setlocale(LC_ALL, $language);
bindtextdomain($translatefile, '/locale');
textdomain($translatefile);
echo gettext("ADMIN_LOGIN_PROFESSIONAL");
这对我在win 7,php 5.3&5.4,iis。未在linux上测试。代码已准备好通过strftime('%c')
等格式化日期:
/**
* Setup locale (strings and formats)
* @param string $lang Lang code in ISO format ('cs')
* @see locales: http://www.roseindia.net/tutorials/I18N/locales-list.shtml
* @see languages: http://msdn.microsoft.com/en-us/library/39cwe7zf%28vs.71%29.aspx
* @see regions: http://msdn.microsoft.com/en-us/library/cdax410z%28vs.71%29.aspx
*/
function setAppLocale($lang)
{
$domain = 'Tis';
switch ($lang)
{
case 'cs':
$locale = 'czech';
$strings = 'cs_CZ';
break;
case 'en':
$locale = 'english';
$strings = 'en_US';
break;
case 'de':
$locale = 'german';
$strings = 'de_DE';
break;
case 'hu':
$locale = 'hungarian';
$strings = 'hu_HU';
break;
case 'ru':
$locale = 'russian';
$strings = 'ru_RU';
break;
}
putenv("LANGUAGE=$strings");
putenv("LC_ALL=$locale");
setlocale(LC_ALL, $locale);
bindtextdomain($domain, APPDIR . "/locale");
bind_textdomain_codeset($domain, "UTF-8");
textdomain($domain);
}