[MT Hack]让MT 3.31的日期格式告别日本语

This is a SiteLog for Easun's Blog.
MT支持多语言,但是后台选择Blog日期格式的时候居然没有中文格式可以选择。
一般人都选择英语,这样的话将会显示形如 August 30, 2006 的格式。而本人实在想让日期格式显示为 XXXX年X月X日 的中国格式。

开始并不想改程序,折中的想,反正是utf-8编码,对于时间格式来说,中文格式和日文格式显示的应该一样。所以就在后台选择了日文。到前台一看,果真见到了XXXX年X月X日的汉字。

以为成功了,结果无意中看了一下 rss.xml,发现其中很明显的写的

<language>ja</language>

虽然去后台编辑 RSS 模版,强行硬编码成zh_cn可以解决这个问题。
但是,看见后台哪个"日语" 偶非常的不舒服,非常非常的不舒服。于是乎决定,改程序。

MT的代码是 Perl 写的,完美的按照 OOP 编写,模版继承于 HTML::Template

先找到 界面的模版。
定位于 tmpl/cms/cfg_prefs.tmpl 和 tmpl/cms/cfg_simple.tmpl,
找到


<option value="ja"<TMPL_IF NAME=LANGUAGE_JA> selected="selected"</TMPL_IF>><MT_TRANS phrase="Japanese"></option>

在其下添加

<option value="zh_cn"<TMPL_IF NAME=LANGUAGE_ZH_CN> selected="selected"</TMPL_IF>><MT_TRANS phrase="Sim Chinese"></option>
<option value="zh_tw"<TMPL_IF NAME=LANGUAGE_ZH_TW> selected="selected"</TMPL_IF>><MT_TRANS phrase="Tra Chinese"></option>

然后定位日期输出功能,日期输入功能是由 lib/MT/Util.pm 中的 函数 sub format_ts 来定义的。
而日期格式来自 %Languages 定义。
我们先添加中文格式的定义吧
找到

'jp' => [
[ '日曜日', '月曜日',
'火曜日', '水曜日',
'木曜日', '金曜日',
'土曜日'],
[ qw( 1 2 3 4 5 6 7 8 9 10 11 12 ) ],
[ qw( AM PM ) ],
"%Y年%m月%d日 %H:%M",
"%Y年%m月%d日",
"%H:%M",
"%Y年%m月",
],

复制它改成

'zh' => [
[ '星期日', '星期一',
'星期二', '星期三',
'星期四', '星期五',
'星期六'],
[ qw( 1 2 3 4 5 6 7 8 9 10 11 12 ) ],
[ qw( AM PM ) ],
"%Y年%m月%d日 %H:%M",
"%Y年%m月%d日",
"%H:%M",
"%Y年%m月",
],

然后,定位到 sub format_ts 函数,在


if ($lang eq 'jp') { $lang = 'ja'; }

下面添加

if ($lang eq 'zh_cn' || $lang eq 'zh_tw') {$lang = 'zh';}

找到

if ($lang eq 'ja') {
$format =~ s!%B %Y!$Languages{$lang}->[6]!g;
}

改成

if ($lang eq 'ja' || $lang eq 'zh') {
$format =~ s!%B %Y!$Languages{$lang}->[6]!g;
}

好了,Hack 完成了。去MT的后台语言格式设定成 中文 ,重建Blog,现在打开 rss.xml ,看看,语言是
<language>zh-cn</language>

了吧:)

PS:好久不修改 Perl - CGI 程序了。呵呵 :P
PS:请注意,如果修改是用的汉字的话,保存的时候,请存成utf-8格式。不然就需要用编码方式了。

By Easun 2006.8.31