很多年前写过一篇《MediaWiki克隆繁体网站》,这个办法创建的繁体版本网站一直用到现在,而且也无需懂太多PHP知识,只是修改了很少量的设置和代码。
今年又尝试了《Drupal中文网站简体版本自动生成一个对应的繁体版本》,也是非常方便。我是在自建的“中文简体繁体转换的模块”中添加一个转换函数,然后在各个地方调用这个函数(PHP程序请看我另外一篇博文《一个独立可用的中文简体繁体转换PHP程序》)。
现在想让Wiki网站做一部分内页链接到Drupal站,但遇到原始页面都是繁体而目标网址都是简体的情况,需要在Wiki中实现变量的繁体到简体转换,也没有找到现成的,就按照《尝试编写MediaWiki的扩展程序》中记录的办法自己做了一个简单的扩展程序,一共两个文件(ZhConvert.i18n.php和ZhConvert.php),放置在一个目录(extensions/ZhConvert/)中:
ZhConvert.i18n.php 代码:
<?php $messages = array(); $magicWords = array(); $magicWords['en'] = array( 'zh_convert_to_tw' => array( 0, 'zh_convert_to_tw' ), 'zh_convert_to_cn' => array( 0, 'zh_convert_to_cn' ), ); ?>
ZhConvert.php 代码:
<?php /* * * James Qi 2017-8-9 * Zh Convert * */ $wgExtensionCredits['parserhook'][] = array( 'path' => __FILE__, 'name' => 'ZhConvert', 'namemsg' => 'msg: ZhConvert', 'author' => 'James Qi', 'url' => '', 'description' => 'This extension is used for Zh charactors conversion.', 'descriptionmsg' => 'msg: This extension is used for Zh charactors conversion.', 'license-name' => '', 'version' => '0.1', ); $wgHooks['ParserFirstCallInit'][] = 'ZhConvertSetupParserFunction'; function ZhConvertSetupParserFunction( &$parser ) { $parser->setFunctionHook( 'zh_convert_to_tw', 'ZhConvertToTWRenderParserFunction' ); $parser->setFunctionHook( 'zh_convert_to_cn', 'ZhConvertToCNRenderParserFunction' ); return true; } // Render the output of the parser function. function ZhConvertToTWRenderParserFunction( $parser, $param1 = '' ) { $title = $param1; $output = zh_hans_to_zh_hant($title); return $output; } function ZhConvertToCNRenderParserFunction( $parser, $param1 = '' ) { $title = $param1; $output = zh_hant_to_zh_hans($title); return $output; } $wgExtensionMessagesFiles['ZhConvert'] = __DIR__ . '/ZhConvert.i18n.php'; function zh_hans_to_zh_hant($input) {//简体到繁体的函数,$input是需要转的字符串,可以包含数字、字母、简体繁体汉字等 $array = get_array_zh_hans_to_zh_hant();//简体、繁体对照表 $array_zh_hans = array_keys($array); $array_zh_hant = array_values($array); if(trim($input)==''){ //输入为空则返回空字符串 return ''; } $output = str_replace($array_zh_hans, $array_zh_hant, $input); return $output;//返回输出 } function zh_hant_to_zh_hans($input) {//繁体到简体的函数,$input是需要转的字符串,可以包含数字、字母、简体繁体汉字等 $array = get_array_zh_hant_to_zh_hans();//简体、繁体对照表 $array_zh_hant = array_keys($array); $array_zh_hans = array_values($array); if(trim($input)==''){ //输入为空则返回空字符串 return ''; } $output = str_replace($array_zh_hant, $array_zh_hans, $input); return $output;//返回输出 } function get_array_zh_hant_to_zh_hans() {//1275个简体、繁体对照表做成数组反转+xx个繁体到简体的数组元素 ...略... } function get_array_zh_hans_to_zh_hant() {//1275个简体、繁体对照表做成数组 ...略... } ?>
把这个扩展程序安装,在LocalSettings.php中添加一句:
require_once "$IP/extensions/ZhConvert/ZhConvert.php";
这样在Wiki页面中编辑的时候就可以使用两个新的魔术字:
用法:{{#zh_convert_to_tw:中文简体字转繁体字}} 输出:中文簡體字轉繁體字 用法:{{#zh_convert_to_cn:中文繁體字轉簡體字}} 输出:中文繁体字转简体字
参看实际Wiki页面:https://www.jamesqi.com/ZhConvert
这个扩展可以用了,但并不完善,也没有调用MediaWiki本身的简体繁体转换类库,而是用的自己定义的一个对比数组,以后可以考虑改为MediaWiki本身的。
2017年9月1日补充:还可以在网站中创建一个[[模板:转换]],模板中调用{{#zh_convert_to_tw}}、{{#zh_convert_to_tw}}等魔术字,还可以加入对当前语言的判断来决定是否转换,然后其它页面就调用模板{{转换|需要转换的内容}},这个办法更简单好用。
评论