「MediaWiki:Common.js」:修訂間差異
無編輯摘要 |
無編輯摘要 |
||
| 第2行: | 第2行: | ||
$(function() { | $(function() { | ||
// 1. **自定義語系下拉選單 | // 在這裡加入 console.log,方便除錯 | ||
console.log("wgContentLanguageVariants:", mw.config.get('wgContentLanguageVariants')); | |||
console.log("wgUserVariant:", mw.config.get('wgUserVariant')); | |||
// 1. **自定義語系下拉選單** | |||
var variants = mw.config.get('wgContentLanguageVariants'); // 獲取可用的語言變體 | var variants = mw.config.get('wgContentLanguageVariants'); // 獲取可用的語言變體 | ||
| 第102行: | 第106行: | ||
} | } | ||
} | } | ||
// 3. **隱藏 MediaWiki 內建語系切換器 (如果存在)** | // 3. **隱藏 MediaWiki 內建語系切換器 (如果存在)** | ||
// 這部分是為了防止兩個語系選單同時出現,造成混淆 | // 這部分是為了防止兩個語系選單同時出現,造成混淆 | ||
$(document).ready(function() { | $(document).ready(function() { // 這個 ready 函數其實可以省略,因為外層已經是 $(function(){}) | ||
var variantsMenu = $('#p-variants'); // MediaWiki 標準語系選單 ID | var variantsMenu = $('#p-variants'); // MediaWiki 標準語系選單 ID | ||
if (variantsMenu.length > 0) { | if (variantsMenu.length > 0) { | ||
variantsMenu.hide(); // 直接隱藏整個內建選單 | variantsMenu.hide(); // 直接隱藏整個內建選單 | ||
} | } | ||
}); | }); | ||
}); | }); // 此處為最外層 $(function() { ... }); 的結束 | ||
於 2025年6月24日 (二) 08:20 的修訂
/* === MediaWiki Custom Language Variant Handling === */
$(function() {
// 在這裡加入 console.log,方便除錯
console.log("wgContentLanguageVariants:", mw.config.get('wgContentLanguageVariants'));
console.log("wgUserVariant:", mw.config.get('wgUserVariant'));
// 1. **自定義語系下拉選單**
var variants = mw.config.get('wgContentLanguageVariants'); // 獲取可用的語言變體
// 篩選出只包含簡體和繁體的變體
var filteredVariants = [];
if (variants) {
for (var i = 0; i < variants.length; i++) {
var variantCode = variants[i];
if (variantCode === 'zh-tw' || variantCode === 'zh-hant' ||
variantCode === 'zh-cn' || variantCode === 'zh-hans') {
filteredVariants.push(variantCode);
}
}
}
// 如果篩選後有至少兩種語系變體,才建立下拉選單
if (filteredVariants.length > 1) {
var currentVariant = mw.config.get('wgUserVariant');
var languageDropdown = $('<div id="zh-variant-dropdown" class="portal"></div>'); // 增加portal class 讓外觀更像側邊欄組件
languageDropdown.append('<h3>中文</h3>'); // 增加標題
var variantSelect = $('<select id="zh-variant-select"></select>');
for (var i = 0; i < filteredVariants.length; i++) {
var variantCode = filteredVariants[i];
var variantName = '';
switch (variantCode) {
case 'zh-tw':
case 'zh-hant':
variantName = '繁體中文';
break;
case 'zh-cn':
case 'zh-hans':
variantName = '簡體中文';
break;
default:
// 這裡應該不會執行到,因為上面已經過濾了
variantName = variantCode;
}
var option = $('<option>').val(variantCode).text(variantName);
if (variantCode === currentVariant) {
option.prop('selected', true);
}
variantSelect.append(option);
}
variantSelect.on('change', function() {
var selectedVariant = $(this).val();
var currentUrl = new URL(window.location.href);
// 設置 URL 參數 'variant'
currentUrl.searchParams.set('variant', selectedVariant);
// 如果頁面當前有 /簡體 或 /繁體 這種路徑,需要移除它們,因為我們現在用 ?variant=
var pathParts = currentUrl.pathname.split('/');
var lastPart = pathParts[pathParts.length - 1];
if (lastPart === '簡體' || lastPart === '繁體') {
pathParts.pop(); // 移除最後一個部分
currentUrl.pathname = pathParts.join('/');
}
window.location.href = currentUrl.toString();
});
// 將下拉選單添加到側邊欄頂部 (通常是 #mw-panel 或 #p-navigation)
// 選擇 #mw-panel 是為了讓它在整個側邊欄的頂部
$('#mw-panel').prepend(languageDropdown.append(variantSelect));
// 如果您的維基百科使用的是不同的側邊欄 ID,請調整這裡
// 例如:$('#p-navigation').prepend(languageDropdown.append(variantSelect));
}
// 2. **自動語系導向邏輯 (基於瀏覽器語系,並使用 ?variant= 參數)**
// 只有當頁面URL中沒有 `?variant=` 參數時才自動導向
var currentUrl = new URL(window.location.href);
if (!currentUrl.searchParams.has('variant')) {
var browserLang = (navigator.language || navigator.userLanguage).toLowerCase();
var simplifiedCodes = ['zh-cn', 'zh-sg', 'zh-hans'];
var traditionalCodes = ['zh-tw', 'zh-hk', 'zh-mo', 'zh-hant'];
var targetVariant = '';
if (simplifiedCodes.includes(browserLang)) {
targetVariant = 'zh-hans'; // 導向簡體變體
} else if (traditionalCodes.includes(browserLang)) {
targetVariant = 'zh-hant'; // 導向繁體變體
} else {
// 如果瀏覽器語系既不是簡體也不是繁體中文,預設導向繁體
targetVariant = 'zh-hant';
}
// 只有當目標變體與當前用戶變體不同時才導向
if (targetVariant && mw.config.get('wgUserVariant') !== targetVariant) {
currentUrl.searchParams.set('variant', targetVariant);
// 同樣,如果頁面當前有 /簡體 或 /繁體 這種路徑,需要移除它們
var pathParts = currentUrl.pathname.split('/');
var lastPart = pathParts[pathParts.length - 1];
if (lastPart === '簡體' || lastPart === '繁體') {
pathParts.pop();
currentUrl.pathname = pathParts.join('/');
}
window.location.href = currentUrl.toString();
}
}
// 3. **隱藏 MediaWiki 內建語系切換器 (如果存在)**
// 這部分是為了防止兩個語系選單同時出現,造成混淆
$(document).ready(function() { // 這個 ready 函數其實可以省略,因為外層已經是 $(function(){})
var variantsMenu = $('#p-variants'); // MediaWiki 標準語系選單 ID
if (variantsMenu.length > 0) {
variantsMenu.hide(); // 直接隱藏整個內建選單
}
});
}); // 此處為最外層 $(function() { ... }); 的結束