我有一个使用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
答案 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);