解决wpmu和lyceum中文化不起作用的问题

原来lyceum0.34的时候是通过更改gettext.php里php5的bug来实现的。但是升级到lyceum1.0.1后whatup的插件怎么改都不对,当初还以为是他的插件有问题呢。找上门去,whatup说他的插件没有做任何修改就工作正常。

真是妖怪了。

今天装上wpmu以为中文化会很顺利的,结果发现选择了chinese之后界面还是英文的。看来不是程序的问题啊。继续在gettext上下功夫。

最后在wpmu论坛里发现了这篇文章——language error (strange),死马当作活马医,按照Bloggproffs的方法把gettext106行开始的

$this->enable_cache = $enable_cache;

// $MAGIC1 = (int)0×950412de; //bug in PHP 5.0.2
$MAGIC1 = (int) - 1794895138;
// $MAGIC2 = (int)0xde120495; //bug
$MAGIC2 = (int) - 569244523;
// 64-bit fix
$MAGIC3 = (int) 2500072158;

$this->STREAM = $Reader;
$magic = $this->readint();
if ($magic == ($MAGIC1 & 0xFFFFFFFF) || $magic == ($MAGIC3 & 0xFFFFFFFF)) { // to make sure it works for 64-bit platforms
$this->BYTEORDER = 0;
} elseif ($magic == ($MAGIC2 & 0xFFFFFFFF)) {
$this->BYTEORDER = 1;
} else {
$this->error = 1; // not MO file
return false;
}

替换成

$this->enable_cache = $enable_cache;

// $MAGIC1 = (int)0×950412de; //bug in PHP 5
$MAGIC1 = (int) - 1794895138;
// $MAGIC2 = (int)0xde120495; //bug
$MAGIC2 = (int) - 569244523;
$MAGIC3 = (int) 2500072158; // <- 64 BIT FIX: ADD THIS LINE!

$this->STREAM = $Reader;
$magic = $this->readint();
if ($magic == $MAGIC1 || $magic == $MAGIC3) { // <- 64 BIT FIX: CHANGE THIS LINE!
$this->BYTEORDER = 0;
} elseif ($magic == $MAGIC2) {
$this->BYTEORDER = 1;
} else {
$this->error = 1; // not MO file
return false;
}

上传,刷新,竟然显示中文了。wpmu和lyceum都正常了。

同一个虚拟主机上第一段代码在wordpress单用户版本上工作正常,我对比过wordpress跟wpmu里的gettext文件,两者完全一样,为什么到wpmu和lyceum下面就不对了呢? 经测试更改过的gettext在wordpress下也是工作正常的。

问题的根源原来是Wordpress在64位的CPU下(linux系统)运行时,由于PHP-gettext解析.mo语言文件出错,以至于Wordpress在使用中文版本时失败。这是由于PHP-gettext在加载.mo文件时,没有正确匹配验证位导致stream自动关闭。详细请看此文

看来我在的meyu这台服务器是64位CPU的啊。奇怪wordpress怎么一直没修正这个问题,Wordpress使用的PHP-gettext版本不是最新版本?

One Response to “解决wpmu和lyceum中文化不起作用的问题”

  1. 胡言乱语 » Blog 存档 » 原来Lyceum是wordpress的多用户版变种版 Says:

    […] 解决wpmu和lyceum中文化不起作用的问题 […]

Leave a Reply