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