You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何修改MediaWiki LanguageSelector扩展以保留自定义URL参数dbid?

保留LanguageSelector切换语言时的自定义URL参数

当然可以修改LanguageSelector扩展来保留dbid这类自定义参数!核心思路是让扩展在生成语言切换链接时,把当前URL里的自定义参数一并带上,而不是只添加setlang参数。下面是具体的修改步骤:

1. 定位扩展的核心代码文件

找到你安装的LanguageSelector扩展的主文件(通常是LanguageSelector.php),打开它并搜索生成语言切换链接的代码段。一般来说,这段代码会出现在钩子函数里(比如SkinTemplateNavigation::Universal),或者专门的链接生成方法中。

2. 修改链接生成逻辑

原来的代码大概率是直接生成只带setlang参数的URL,类似这样:

$href = $title->getFullURL( [ 'setlang' => $langCode ] );

我们需要把当前URL里的自定义参数(比如dbid)保留下来,替换成下面的逻辑:

// 获取当前请求对象,用来读取URL参数
$request = $skin->getRequest();
// 读取当前URL的所有查询参数
$currentParams = $request->getQueryValues();

// 移除已有的setlang参数,避免切换语言时出现冲突
unset($currentParams['setlang']);

// 【可选】如果只想保留特定参数(比如只留dbid),可以加个白名单过滤
// $allowedParams = ['dbid'];
// $currentParams = array_intersect_key($currentParams, array_flip($allowedParams));

// 添加新的语言切换参数
$currentParams['setlang'] = $langCode;

// 生成包含所有保留参数的新URL
$href = $title->getFullURL($currentParams);

举个完整的例子,如果扩展是通过SkinTemplateNavigation::Universal钩子添加语言链接的,修改后的钩子函数大概是这样:

public static function onSkinTemplateNavigationUniversal( $skin, &$links ) {
    global $wgLanguageSelectorLanguages;
    $title = $skin->getTitle();
    $request = $skin->getRequest();
    
    foreach ( $wgLanguageSelectorLanguages as $langCode => $langName ) {
        $currentParams = $request->getQueryValues();
        unset($currentParams['setlang']);
        // 只保留dbid参数的话取消下面两行注释
        // $allowedParams = ['dbid'];
        // $currentParams = array_intersect_key($currentParams, array_flip($allowedParams));
        $currentParams['setlang'] = $langCode;
        
        $links['user-menu'][$langCode] = [
            'text' => $langName,
            'href' => $title->getFullURL($currentParams),
            'class' => 'language-selector-link',
        ];
    }
    return true;
}

3. 生效修改

修改完成后,记得清除MediaWiki的缓存(可以直接刷新页面,或者在服务器上运行php maintenance/rebuildCache.php命令),这样新的链接生成逻辑就会生效了。

之后再切换语言时,URL里的dbid参数就会被保留下来,比如从/w/MainPage?dbid=12345切换到德语后,URL会变成/w/index.php?title=Main_Page&dbid=12345&setlang=de。

内容的提问来源于stack exchange,提问作者user3103115

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.15 08:41:05