MediaWiki中的Magic Words(魔术字)技术解析

MediaWiki中的Magic Words(魔术字)技术解析

mediawiki 🌻 The collaborative editing software that runs Wikipedia. Mirror from https://gerrit.wikimedia.org/g/mediawiki/core. See https://mediawiki.org/wiki/Developer_access for contributing. mediawiki 项目地址: https://gitcode.com/gh_mirrors/me/mediawiki

什么是Magic Words

Magic Words(魔术字)是MediaWiki系统中一种特殊的本地化关键词,用于在维基文本(wikitext)中执行特定功能或获取特定值。它们可以被看作是MediaWiki内置的一套特殊指令系统,通过简单的语法就能实现复杂的功能。

Magic Words主要应用于以下场景:

  1. 解析器函数名称(如{{urlencode:...}}
  2. 系统变量名称(如{{CURRENTDAY}}
  3. 双下划线行为开关(如__NOTOC__
  4. 图片链接参数名称

Magic Words的核心特性

每个Magic Word都具备以下关键属性:

  1. 同义词列表:包含一个规范英文单词(必须存在)和其他语言或形式的同义词
  2. 大小写敏感标志:决定匹配时是否区分大小写
  3. 唯一ID:通常使用小写的规范英文同义词作为ID

MagicWord类提供了将这些魔术字转换为正则表达式进行匹配的功能,这是其实现的核心机制。

如何添加自定义Magic Words

在扩展中添加Magic Words

要为你的MediaWiki扩展添加新的Magic Words,需要遵循以下步骤:

  1. 创建一个i18n魔法文件(通常命名为ExtensionName.i18n.magic.php
  2. 在扩展的extension.json中注册这个文件
  3. 实现对应的处理逻辑
示例实现
  1. 首先创建魔法文件ExtensionName.i18n.magic.php
<?php
$magicWords = [];

// 英文版本定义
$magicWords['en'] = [
    // 0表示不区分大小写,1表示区分大小写
    'mag_custom' => [ 0, 'custom' ],
];

// 西班牙语版本定义
$magicWords['es'] = [
    'mag_custom' => [ 0, 'aduanero' ],
];
  1. 在extension.json中注册:
{
    "ExtensionMessagesFiles": {
        "ExtensionNameMagic": "ExtensionName.i18n.magic.php"
    },
    "Hooks": {
        "ParserFirstCallInit": "MyExtensionHooks::onParserFirstCallInit"
    }
}

注意:ExtensionNameMagic这个键必须是唯一的,不能与其他扩展冲突。

  1. 实现处理类:
<?php
class MyExtensionHooks {
    public static function onParserFirstCallInit( $parser ) {
        $parser->setFunctionHook( 'mag_custom', [ self::class, 'expandCustom' ] );
        return true;
    }

    public static function expandCustom( $parser, $var1, $var2 ) {
        return "custom: var1 is $var1, var2 is $var2";
    }
}

在核心中添加Magic Words

如果需要在MediaWiki核心中添加Magic Words,应该编辑MessagesEn.php文件中的$magicWords数组,并按照文件中的注释说明进行操作。

Magic Words的类型详解

MediaWiki中的Magic Words主要分为三大类:

  1. 解析器函数:以{{函数名:参数}}形式调用,执行特定功能
  2. 变量:以{{变量名}}形式调用,返回特定值
  3. 行为开关:以__开关名__形式使用,影响页面渲染行为

解析器函数示例

{{#urlencode:Hello World}} → Hello+World
{{#formatnum:1234567}} → 1,234,567

变量示例

{{CURRENTYEAR}} → 2023
{{PAGENAME}} → 当前页面名称

行为开关示例

__NOTOC__ → 禁用目录自动生成
__NOEDITSECTION__ → 禁用章节编辑链接

最佳实践

  1. 命名规范:Magic Words的ID应使用小写字母和下划线组合
  2. 国际化:为所有支持的语言提供翻译
  3. 性能考虑:频繁使用的Magic Words应考虑缓存结果
  4. 安全性:处理用户输入时要进行适当的过滤和转义

常见问题解决

  1. Magic Word不生效

    • 检查是否正确定义了大小写敏感标志
    • 确认扩展已正确加载
    • 检查是否有命名冲突
  2. 国际化问题

    • 确保所有支持的语言都有对应的翻译
    • 检查语言文件是否被正确加载
  3. 性能问题

    • 复杂的Magic Words实现应考虑使用缓存
    • 避免在Magic Words中进行耗时的数据库查询

通过深入理解MediaWiki的Magic Words机制,开发者可以创建更加强大和灵活的扩展功能,同时为用户提供更好的编辑体验。

mediawiki 🌻 The collaborative editing software that runs Wikipedia. Mirror from https://gerrit.wikimedia.org/g/mediawiki/core. See https://mediawiki.org/wiki/Developer_access for contributing. mediawiki 项目地址: https://gitcode.com/gh_mirrors/me/mediawiki

创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

晏其潇Aileen

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值