2009年2月23日星期一

国际化的乱码问题

MGP的国际化部分交给了老田来处理, 他在做了些准备的时候。根据我们项目的要求决定用po,mo的方法来实现(WP和CAKE都用得这种方案)。

一切都没有问题直到出现这个乱码问题,英语和东亚文字都没有问题, 当切换到欧洲其他语言如法语,意大利语的时候, 就会出现乱码, 主要是på, è 这样的字母。

开始着手解决:

首先检查输出页面的文档编码, 确认所有根输出有关的页面都有meta标签, 编码格式为utf-8

其次检查文档本身的编码, 这个工作可以在zend studio或者ultra edit来做。

然后是是数据源, 如果你用的是po,mo那么就要确保他们是utf-8编码, 如果你用的数据库如mysql,同理表的存贮字段为utf-8.

以上都确定了, 结果输出还是有乱码。

我尝试在各个页面直接输出这些语言, 没有问题。

由此我确定这是在读mo时, 出了问题 --------虽然mo的编码也是utf-8

在网上搜索了一下, 我发现在绑定语言包的时候, 可以设置它的编码, 也许我们忽略了这个。



setlocale(LC_ALL, $language); //指定要用的语系,如:en_US、zh_CN、zh_TW
setlocale(LC_MESSAGE, $language);//指定要用的语系,如:en_US、zh_CN、zh_TW
bindtextdomain(PACKAGE,'./languages/'); //语言包所在位置
textdomain(PACKAGE); //绑定语言包
bind_textdomain_codeset(PACKAGE, 'UTF-8');

所以我在language.php绑定语言包的部分后面加上这一句。

成功^^

没有评论: