本站文本内容除另有声明外,转载时均必须注明出处,并遵守CC BY-NC-SA 3.0协议。(转载须知)
本站是中文Minecraft Wiki的镜像站,与Mojang Studios、Weird Gloop没有从属关系。(免责声明)
模块:Advancement name
此模块为{{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