gettext设置不起作用

| 我的gettext工作正常,但是现在突然不翻译了。我知道发生了什么事。我正在尝试使用
/sys/locale/no_NO/LC_MESSAGES/messages.po
将页面翻译成挪威语。 /public/home.php
$locale = \"en_US\";
if (isSet($_COOKIE[\'lang\'])) $locale = $_COOKIE[\'lang\'];
putenv(\"LC_ALL=$locale\");
setlocale(LC_ALL, $locale);
bindtextdomain(\"messages\", \"../sys/locale\");
textdomain(\"messages\");

echo \"<p>locale: \" . $locale . \" \"; 
echo gettext(\"Home\"); 
exit(); 
打印出来 should2ѭ我应该是ѭ3     
已邀请:
我看到您正在与挪威人作战。我也遇到了Debian服务器的问题,该服务器仅支持nb_NO和nn_NO,但不支持no_NO。 解决方案是使用语言环境名称的确切名称作为文件夹和设置: 确保安装了语言环境:
$ locale -a
C
POSIX
en_US.utf8
nb_NO.utf8
nn_NO.utf8
因此,挪威语bokmål的php设置:
setlocale(LC_ALL, \'nb_NO.utf8\');
putenv(\'LANGUAGE=nb_NO.utf8\');
PO文件的路径应具有相同的名称,例如:
./i18n/nb_NO.utf8/LC_MESSAGES/messages.po
我想同样的解决方案将适用于Ubuntu。     
使用日语时,我必须执行以下操作:
putenv(\"LANG=ja_JP.UTF-8\");
setlocale(LC_MESSAGES, \'ja_JP.UTF-8\');
bindtextdomain(\'messages\', \'../locale\');
bind_textdomain_codeset(\'messages\', \'UTF-8\');
textdomain(\'messages\');
使用其他语言时,我发现我不必总是添加编码后缀,这是非常不一致的。同样,当\“ en \”工作正常时,我不能仅使用\“ ja \”。 除非
/usr/share/i18n/SUPPORTED
中列出了语言环境,否则
setlocale
将返回false,但是尽管有错误,翻译仍然可以正常工作。     
您可能需要重新配置语言环境: 安装debconf(即以root身份运行apt-get update然后apt-get install debconf) 以root身份运行dpkg-reconfigure语言环境 这段代码对我有用:
//Put this in cookie for example

$lang = GetPrefLanguage($_SERVER[\"HTTP_ACCEPT_LANGUAGE\"]);

$language = $lang . \'.utf8\';

setlocale(LC_ALL, $language);

// Set language
putenv(\'LANG=\'.$language);

// Specify location of translation tables
bindtextdomain(\'traductions\', dirname(__FILE__).\'/locale\');

// Choose domain
textdomain(\"traductions\");

// Translation is looking for in ./locale/xx_XX/LC_MESSAGES/traductions.mo now
/*GET Pref language */
function GetPrefLanguage($str_http_languages)
{
    $lang = substr($str_http_languages, 0, 2);

    switch($lang) {
        case \'fr\':
            return \'fr_FR\';
        break;
        case \'de\':
            return \'de_DE\';
        break;
        case \'en\':
            return \'en_US\';
        break;
        default:
            return \'en_US\';
    }
}
    

要回复问题请先登录注册