当前位置

自定义MediaWiki简体繁体转换的扩展程序

James Qi 在 2017年8月9日 - 12:03 提交
内容摘要:很多年前写过一篇《MediaWiki克隆繁体网站》,这个办法创建的繁体版本网站一直用到现在,而且也无需懂太多PHP知识,只是修改了很少量的设置和代码。 今年又尝试了《Drupal中文网站简体版本......

  很多年前写过一篇《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}}等魔术字,还可以加入对当前语言的判断来决定是否转换,然后其它页面就调用模板{{转换|需要转换的内容}},这个办法更简单好用。

添加新评论

Plain text

  • 不允许使用HTML标签。
  • 自动将网址与电子邮件地址转变为链接。
  • 自动断行和分段。
验证码
本问题用于测试您是否为人类访问者,避免自动垃圾发贴。
图形验证
键入显示在图片中的字符