模組:Vgname
外观
require('Module:No globals')
local getArgs = require('Module:Arguments').getArgs
local yesno = require('Module:Yesno')
local lc = require('Module:WikitextLC')
local labelList = mw.loadData('Module:Vgname/languages')
local areaList = {
cnhk = '中国大陆和香港'; hkcn = '中国大陆和香港';
cntw = '中国大陆和台灣'; twcn = '中国大陆和台灣';
hktw = '台港'; twhk = '台港';
cn = '中国大陆';
hk = '香港';
tw = '台灣';
all = ''
}
local getArgs = require('Module:Arguments').getArgs
local p = {}
local function refSeparator(content)
content = content or ''
local pattern = '\127\'"`UNIQ%-%-ref%-%x+%-QINU`"\'\127'
local s, _ = string.find(content, pattern)
if s then
return string.sub(content, 1, s-1), string.sub(content, s)
end
return content, ''
end
local function bold(args, content, markBegin, markEnd)
local text, ref = refSeparator(content)
markBegin = markBegin or ''
markEnd = markEnd or ''
if yesno(args['bold']) ~= false then
return string.format('%s<b>%s</b>%s%s', markBegin, text, markEnd, ref)
end
return string.format('%s%s%s%s', markBegin, text, markEnd, ref)
end
local function italic(args, lcodeNum, content)
if (yesno(args['italic']) ~= false) and (labelList[lcodeNum].italic == true) then
local text, ref = refSeparator(content)
return string.format('<i>%s</i>%s', text, ref)
end
return content
end
local function origLabel(args, lcodeNum)
if yesno(args.label) == false then
return ''
end
if yesno(args.diff) or args.na or args.eu then
return labelList[lcodeNum][3] .. ':'
end
return labelList[lcodeNum][2] .. ':'
end
local function origText(args, lcodeNum)
local lcode, content
lcode = (type(lcodeNum) == 'number') and labelList[lcodeNum][1] or lcodeNum
content = args[lcode]
local _, _, p1, p2 = string.find(content, '^(.-) *, *([%w%p ]+)$')
if p1 then
return string.format('<span lang="%s">-{%s}-</span>,<span lang="%s">-{%s}-</span>',
lcode, italic(args, lcodeNum, p1),
lcode, italic(args, lcodeNum, p2)
)
end
return string.format('<span lang="%s">-{%s}-</span>', lcode, italic(args, lcodeNum, content))
end
local function transLabel(args, area, content, as)
local function converted(content)
return lc.converted(content, {'zh-hans', 'zh-hant'})
end
if content == 'en' then
return converted(areaList[area] .. '多用英文')
end
if as == nil then
return converted(areaList[area] .. '译作' .. bold(args, content, '「', '」'))
end
local arr = mw.text.split(content, '、')
for i, v in ipairs(arr) do
arr[i] = bold(args, v, '「', '」')
end
return converted(areaList[area] .. as .. table.concat(arr, '、'))
end
local function transArray(args)
local cont = {}
local lnc = {'zh', 'zh-hans', 'zh-hant', 'zh-sg'}
if args.hk == 'tw' or args.hk == args.tw or args.hk == nil then
local ltw = {'zh-hk', 'zh-mo', 'zh-tw'}
for i, v in ipairs(lnc) do
cont[v] = string.format('%s,%s', transLabel(args, 'cn', args.cn), transLabel(args, 'hktw', args.tw))
end
for i, v in ipairs(ltw) do
cont[v] = transLabel(args, 'cn', args.cn)
end
cont['zh-cn'] = transLabel(args, 'hktw', args.tw)
return cont
end
if args.hk == 'cn' or args.hk == args.cn then
local lcn = {'zh-cn', 'zh-hk', 'zh-mo'}
for i, v in ipairs(lnc) do
cont[v] = string.format('%s,%s', transLabel(args, 'cnhk', args.cn), transLabel(args, 'tw', args.tw))
end
for i, v in ipairs(lcn) do
cont[v] = transLabel(args, 'tw', args.tw)
end
cont['zh-tw'] = transLabel(args, 'cnhk', args.cn)
return cont
end
if args.cn == 'tw' or args.cn == args.tw or args.tw == args.cn then
local temp = (args.tw == 'cn') and args.cn or args.tw
local lcn = {'zh-cn', 'zh-tw'}
local lhk = {'zh-hk', 'zh-mo'}
for i, v in ipairs(lnc) do
cont[v] = string.format('%s,%s', transLabel(args, 'cntw', temp), transLabel(args, 'hk', args.hk))
end
for i, v in ipairs(lcn) do
cont[v] = transLabel(args, 'hk', args.hk)
end
for i, v in ipairs(lhk) do
cont[v] = transLabel(args, 'cntw', temp)
end
return cont
end
for i, v in ipairs(lnc) do
cont[v] = string.format('%s,%s,%s', transLabel(args, 'cn', args.cn), transLabel(args, 'hk', args.hk), transLabel(args, 'tw', args.tw))
end
cont['zh-cn'] = string.format('%s,%s', transLabel(args, 'hk', args.hk), transLabel(args, 'tw', args.tw))
cont['zh-tw'] = string.format('%s,%s', transLabel(args, 'cn', args.cn), transLabel(args, 'hk', args.hk))
cont['zh-hk'] = string.format('%s,%s', transLabel(args, 'cn', args.cn), transLabel(args, 'tw', args.tw))
cont['zh-mo'] = string.format('%s,%s', transLabel(args, 'cn', args.cn), transLabel(args, 'tw', args.tw))
return cont
end
local function transOther(args, ascode, as)
local ret = ''
local temp = {'cnhk', 'hkcn', 'cntw', 'twcn', 'hktw', 'twhk', 'cn', 'cn', 'hk', 'hk', 'tw', 'tw'}
if args[ascode] then
ret = transLabel(args, 'all', args[ascode], as) .. ','
end
for i = 1, #temp, 2 do
if args[ascode .. '-' .. temp[i]] then
ret = ret .. transLabel(args, temp[i], args[ascode .. '-' .. temp[i]], as) .. ','
elseif args[ascode .. '-' .. temp[i+1]] then
ret = ret .. transLabel(args, temp[i], args[ascode .. '-' .. temp[i+1]], as) .. ','
end
end
if ret == '' then
return
end
return string.sub(ret, 1, -4)
end
local function head(args)
local context = args[1] or tostring(mw.title.getCurrentTitle())
if yesno(args.bracket) == true then
return bold(args, context, '《', '》')
end
if yesno(args.bracket) == false then
return bold(args, context)
end
if args.bracket == 'q' then
return bold(args, context, '「', '」')
end
return bold(args, context, '《', '》')
end
local function orig(args)
for i, v in ipairs(labelList) do
if args[v[1]] then
return origLabel(args, i) .. origText(args, i)
end
end
return
end
local function eng(args)
local ret
if args.na then
ret = origLabel(args, 'na') .. origText(args, 'na')
end
if args.eu then
ret = ret and (ret .. ',') or ''
ret = ret .. origLabel(args, 'eu') .. origText(args, 'eu')
end
if args.en and (ret == nil) then
ret = origLabel(args, 'en') .. origText(args, 'en')
end
return ret
end
local function trans(args)
if args.cn and args.tw then
return lc.selective(transArray(args))
end
return
end
function p.main(frame)
local args = getArgs(frame)
return p._main(args)
end
function p._main(args)
-- Main module code goes here.
local temp, ret = {}
local _orig = orig(args)
local _eng = eng(args)
local _trans = trans(args)
local _aka = transOther(args, 'aka', '又译')
local _old = transOther(args, 'old', '旧译')
local _note = args[2]
if _orig == nil and _eng == nil then
return '<span class="error"><code>{{Vgname}}</code>仅适用于原生非中文游戏,故必须指定游戏原文</span>'
end
if _orig then table.insert(temp, _orig) end
if _eng then table.insert(temp, _eng) end
if _trans then table.insert(temp, _trans) end
if _aka then table.insert(temp, _aka) end
if _old then table.insert(temp, _old) end
if _note then table.insert(temp, _note) end
if #temp > 0 then
ret = table.concat(temp, ',')
return head(args) .. '<span style="font-weight: normal;">(' .. ret .. ')</span>'
end
end
return p