本站文本内容除另有声明外,转载时均必须注明出处,并遵守CC BY-NC-SA 3.0协议。(转载须知
本站是中文Minecraft Wiki的镜像站,与Mojang Studios、Weird Gloop没有从属关系。(免责声明

全站通知:

模块:Advancement name

来自我的世界地下城WIKI_BWIKI_哔哩哔哩
跳到导航 跳到搜索

此模块为{{Advancement name}}提供功能。

进度历史名称及控制数据放置在Module:Advancement name/revisions中。

local p = {}
local f = mw.getCurrentFrame()

local keyPrefix = 'advancements.'
local keySuffix = '.title'

local revisionData = require( 'Module:Advancement name/revisions' )

local nameProvider = require( 'Module:NameProvider' ).call
local nameProvider_function = 'getnamebykey'

local languageVariants = {
	en = { 'en_us' },
	zh = { 'zh_cn', 'zh_tw', 'zh_hk' }
}

local function applyFormat( tbl )
	if tbl == nil then
		return nil
	end
	local f = mw.getCurrentFrame()
	if type(tbl) ~= 'table' then
		tbl = { tbl }
	end
	for k, v in pairs(tbl) do
		if string.sub(v, 1, 1) == '*' then
			tbl[k] = f:expandTemplate{
				title = 'Pending approval',
				args = { string.sub(v, 2, -1) }
			}
		end
	end
	return tbl
end

local function generateOutputString( tbl )
	if tbl == nil then
		return nil
	end
	if type(tbl) == 'string' then
		return tbl
	elseif type(tbl) == 'table' then
		for i=1, #tbl do
			if tbl[i] == nil then
				return nil
			end
		end
		if #tbl <= 1 then
			return tbl[1]
		else
			return require( 'Module:STConversion' ).call(tbl)
		end
	end
end

local function callNameProvider( key, variant )
	local translation_key = keyPrefix .. key .. keySuffix
	local inputargs = {
		['function'] = nameProvider_function,
		['arg1'] = translation_key,
		['to'] = variant
	}
	return nameProvider(inputargs, false)
end

local function grabNames( key, variant, revision )
	local variants = languageVariants[variant]
	local responses = {}
	if revision < 1 then
		for i=1, #variants do
			table.insert(responses, callNameProvider(key, variants[i]))
		end
	else
		responses = revisionData[key]
		if responses then
			responses = responses[variant][revision]
		end
	end
	return generateOutputString(applyFormat(responses))
end

function p.getname( args )
	if args[1] == nil then
		return { errno = 1 }
	end
	if args[2] == nil then
		return { errno = 2 }
	end
	if languageVariants[args[2]] == nil then
		return { errno = 3 }
	end
	local revision = args.rev or 0
	revision = tonumber(mw.text.trim(revision))
	local result = grabNames( string.lower(mw.text.trim(args[1])), string.lower(mw.text.trim(args[2])), revision )
	if result == nil then
		return { errno = 4 }
	end
	return result
end

function p.main( f )
	local args = require('Module:ProcessArgs').merge(true)
	local result = p.getname(args)
	if type(result) == 'string' then
		return result
	end
	local error_prompts = {
		'缺失本地化键名(参数“1”)!',
		'缺失目标语言变体(参数“2”)!',
		'目标语言变体(参数“2”)无效!',
		'无法找到与本地化键名(参数“1”)对应的一个或多个名称!'
	}
	if args.simpleerror then
		return f:preprocess('<span style="color: red">' .. "'''''待定'''''</span>")
	else
		return f:expandTemplate{ title = 'Error', args = { error_prompts[result.errno] } }
	end
end

function p.list( f )
	local args = require('Module:ProcessArgs').merge(true)

	local result = ''
	local map = {}
	local t = {}

	for k, _ in pairs(revisionData) do
		local advancement_name = grabNames(k, 'en', 0)
		if advancement_name then
			map[advancement_name] = k
			table.insert(t, advancement_name)
		end
	end

	table.sort(t)

	local limit = 50
	local count = 0

	local frame = mw.getCurrentFrame()

	local itemlist = nil
	local header = mw.html.create('tr')
	header:tag('th'):wikitext('英文名称')
	header:tag('th'):wikitext('中文名称')

	for _, v in ipairs(t) do
		if count == 0 then
			if itemlist ~= nil then
				result = result .. tostring(itemlist)
			end
			itemlist = mw.html.create('table')
				:addClass('data-table')
				:node(header)
		end

		local row = mw.html.create('tr')
		row:tag('td'):wikitext(v)
		row:tag('td'):wikitext(grabNames(map[v], 'zh', 0))
		itemlist:node(row)
		count = count + 1
		if count == limit then
			count = 0
		end
	end

	result = result .. tostring(itemlist)
	return result
end
return p