Gettext没有在PHP中正确检测到utf8

时间:2011-11-02 16:41:06

标签: php internationalization gettext

我有一个使用Gettext作为i18n引擎的PHP应用程序。翻译工作正常,唯一的问题是我有UTF8字符的编码问题。我加载gettext的PHP代码是这样的:

bindtextdomain( $domain, PATH_BASE . DS . "language" . DS );
$this->utf8Encode = strtolower($encoding) == "utf-8";
bind_textdomain_codeset($domain, $encoding);

textdomain($domain);

我的模板使用utf8字符集渲染页面,我已经尝试过任何东西来加载正确的字符集。对于我正在加载SL_sl的当前区域设置,名称显示正确,但是UTF8字符存在问题,因此它应显示在Država的位置,它显示为Dr?ava

3 个答案:

答案 0 :(得分:1)

所以,它发生过,现在又发生了,我自己找到了解决方案!问题是,就像我对@bozdoz说的那样,我已经转换了UTF8文本,但我没有意识到gettext函数返回了一个UTF8字符串,所以如果你这样做:

$encoded = utf8_encode($utf8String);

$utf8String是一个真正的UTF8字符串时,你会遇到一个非常讨厌的错误。因此,我对我的代码进行了一些修改,翻译方法(简化)最终结果如下:

$translation = gettext($singular);
$encoded = $this->utf8Encode ? $this->Utf8Encode($translation) : $translation;

Utf8Encode方法是这样的:

private function Utf8Encode( $text )
{
    if ( mb_check_encoding($text, "utf8") == TRUE ){
        return $text;

    return utf8_encode($text);
}

我希望如果有人有同样的错误,这可以提供帮助!

答案 1 :(得分:0)

从部分信息我可以建议你看看实际的mo / po文件,在poedit中有几个关于utf8编码的警告。假设其他一切都是正确的(元,标题等),这是唯一需要检查的东西

答案 2 :(得分:0)

尝试使用utf8_encode()进行编码。我无法从你的代码中说出来,但也许它可以这样实现:

utf8_encode($domain);