MediaWiki:Gadget-global-utils.js

来自Minecraft Wiki
跳转到导航 跳转到搜索
其他语言中

注意:在保存之后,您可能需要清除浏览器缓存才能看到所作出的更改的影响。
  • Firefox或Safari:按住Shift的同时单击刷新,或按Ctrl-F5或Ctrl-R(Mac为⌘-R)
  • Google Chrome:按Ctrl-Shift-R(Mac为⌘-Shift-R)
  • Internet Explorer:按住Ctrl的同时单击刷新,或按Ctrl-F5
  • Opera:前往菜单 → 设置(Mac为Opera → 选项),然后隐私和安全 → 清除浏览数据 → 缓存的图片和文件。
const wikis = Object.freeze( require( './global.json' ).wikis );
const wikiList = Object.freeze( Object.values( wikis ) );

function localization( i18nData ) {
	const i18n = {};
	
	mw.language.getFallbackLanguageChain().forEach( function(lang) {
		if ( !i18nData.hasOwnProperty( lang ) ) return;
		getAllKeys(i18nData[lang], i18n);
	} );
	
	return i18n;
}

function getAllKeys(data, target) {
	Object.keys(data).forEach( function(key) {
		if ( !data.hasOwnProperty( key ) ) return;
		if ( target.hasOwnProperty( key ) ) {
			if ( typeof target[key] === 'object' && !Array.isArray(target[key]) && target[key] !== null
			&& typeof data[key] === 'object' && !Array.isArray(data[key]) && data[key] !== null ) {
				getAllKeys(data[key], target[key]);
			}
			return;
		}
		target[key] = structuredClone(data[key]);
	} );
}

class MessageParser {
	constructor( i18nData, resolved ) {
		this.map = new mw.Map();
		if ( resolved ) this.map.set( i18nData );
		else this.map.set( localization( i18nData ) );
	}
	message( key, ...parameters ) {
		return new mw.Message( this.map, key, parameters );
	}
	msg( key, ...parameters ) {
		return this.message( key, ...parameters ).text();
	}
}

module.exports = {
	wikis,
	wikiList,
	localization,
	MessageParser
};