很多年前寫過一篇《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}}等魔術字,還可以加入對當前語言的判斷來決定是否轉換,然後其它頁面就調用模闆{{轉換|需要轉換的内容}},這個辦法更簡單好用。
评论