确认你的po是不是utf-8编码吧, 我遇到同样的问题
后来直接拿了一个已经是UTF-8的po文件,修改内容就能解决问题了.现在我的多语言是存到数据库里, 再用php导出写成po,自动编译成mo的,就再没有这个问题了.(我的php当然都是utf-8了)
后来直接拿了一个已经是UTF-8的po文件,修改内容就能解决问题了.现在我的多语言是存到数据库里, 再用php导出写成po,自动编译成mo的,就再没有这个问题了.(我的php当然都是utf-8了)
* 语言编译,生成po和mo文件
*
* @param 语言编码 $LangCode
* @return bool
*/
public function complie($LangCode){
$fileName = $LangCode . '.po';
$LangRoot = LOCALE_PATH;
if (!is_dir($LangRoot . $LangCode)){
mkdir($LangRoot . $LangCode);
mkdir($LangRoot . $LangCode . '/' . 'LC_MESSAGES');
}
$LangFullPath = $LangRoot . $LangCode . '/' . 'LC_MESSAGES/';
if (!is_writeable($LangFullPath)){
throw new Exception($LangFullPath . ' can not be write');
}
$data = $this->listTran($LangCode);
$fp = fopen($LangFullPath.$fileName,'w+');
flock($fp,LOCK_EX);
foreach ($data as $row){
if (isset($row['F_TEXT']) && $row['F_TEXT'] != ''){
fputs($fp,"msgid \"".str_replace("\\'","'",$row['F_CODE_DICT'])."\"\n");
fputs($fp,"msgstr \"".str_replace("\\'","'",$row['F_TEXT'])."\"\n");
fputs($fp,"\n");
}
}
flock($fp,LOCK_UN);
fclose($fp);
$ComplieCmd = $this->_msgfmt . ' -o ' . $LangFullPath . $LangCode . '.mo ' . $LangFullPath . $fileName;
exec($ComplieCmd);
return true;
}