模組:Vgname/sandbox
外观
![]() | 这是Module:Vgname(差异)的沙盒。 参见本模块的测试样例(运行)。 |
请在 Module:Vgname/languages定义新的外语
require('Module:No globals')
local p = {}
local getArgs = require('Module:Arguments').getArgs
local yesno = require('Module:Yesno')
local lc = require('Module:WikitextLC')
local label = mw.loadData('Module:Vgname/languages')
local akaPrefix = {
["official"] = "官方",
["old"] = "旧翻译",
["main"] = "主标题",
["sub"] = "副标题",
}
local region = {
["cn"] = {"中国大陆", "cn"},
["cnhk"] = {"中国大陆和香港", "cn"},
["cntw"] = {"中国大陆和台湾", "tw"},
["hk"] = {"香港", "hk"},
["hkcn"] = {"中国大陆和香港", "cn"},
["hktw"] = {"港台", "tw"},
["tw"] = {"台湾", "tw"},
["twcn"] = {"中国大陆和台湾", "tw"},
["twhk"] = {"港台", "tw"},
}
local function refSplit(content)
content = content or ""
local pattern = '\127\'"`UNIQ%-%-ref%-%x+%-QINU`"\'\127' -- [[en:WP:UNIQ]]
local s, _ = content:find(pattern)
if s then
return content:sub(1, s-1), content:sub(s)
end
return content, ""
end
local function bold(args, content, openBracket, closeBracket, converted) -- with refSplit()
local text, ref = refSplit(content)
if converted then
text = lc.converted(text, {'zh-hans', 'zh-hant'})
end
if yesno(args.bold) ~= false then
text = "<b>" .. text .. "</b>"
end
return openBracket .. text .. closeBracket .. ref
end
local function lang(args, langIndex, content) -- with italic but not prefix
local lang = label[langIndex][1]
local text, ref = refSplit(content or args[lang])
local style = "normal"
if yesno(args.italic) ~= false and label[langIndex].italic then
style = "italic"
end
return string.format('<span lang="%s" style="font-style:%s;">-{%s}-</span>%s', lang, style, text, ref)
end
local function head(args)
local openBracket, closeBracket = "《", "》"
if args.bracket == "q" then
openBracket, closeBracket = "「", "」"
elseif yesno(args.bracket) == false then
openBracket, closeBracket = "", ""
end
return bold(args, args[1], openBracket, closeBracket, false)
end
local function foreign(args)
local tab = {}
local tagcode -- For return value, see [[Module:Vgname/languages]]; e.g. 2 => "英语", 3 => "英文版名".
if yesno(args.diff) == false then tagcode = 2
elseif yesno(args.diff) == true then tagcode = 3
elseif args.na or args.eu or args.au then tagcode = 3
else tagcode = 2
end
for _, val in ipairs{"na", "eu", "au"} do
if args[val] then
table.insert(tab, label[val][tagcode] .. ":" .. lang(args, val, args[val]))
end
end
if #tab == 0 and args.en then
table.insert(tab, label.en[tagcode] .. ":" .. lang(args, "en"))
end
for langIndex, val in ipairs(label) do
if args[val[1]] then
table.insert(tab, 1, val[tagcode] .. ":" .. lang(args, langIndex))
break
end
end
return #tab == 0 and "" or table.concat(tab, ",")
end
local function variant(args)
if args.cn == nil or args.tw == nil then return '' end
local tab, varUsed = {}, {}
local _args = {
["cn"]= args.cn,
["hk"]= args.hk,
["tw"]= args.tw,
}
local variants = {"hans", "hant", "cn", "hk", "sg", "tw"}
if _args.hk == "tw" or _args.hk == _args.tw or _args.hk == nil then
varUsed = {'cn', 'twhk'}
elseif _args.hk == "cn" or _args.hk == _args.cn then
varUsed = {'cnhk', 'tw'}
elseif _args.cn == "tw" or _args.tw == "cn" or _args.cn == _args.tw then
if _args.tw == "cn" then _args.tw = _args.cn end
varUsed = {'cnhk', 'tw'}
else
varUsed = {'cn', 'hk', 'tw'}
end
-- 要手工简体和繁体,并且要修改region的简繁体,等会打包成函数
for _, dispVar in ipairs(variants) do
local tabInner = {}
for _, usedVar in ipairs(varUsed) do
if usedVar:sub(1, 2) ~= dispVar and usedVar:sub(-2, -1) ~= dispVar then
local regionName, translation = region[usedVar][1], _args[region[usedVar][2]]
if translation == "en" then
translation = "常用英文"
else
translation = "译作" .. bold(args, translation, "「", "」", true)
end
table.insert(tabInner, regionName .. translation)
end
end
tab["zh-" .. dispVar] = table.concat(tabInner, "、")
end
tab["zh-mo"] = tab["zh-hk"]
return lc.selective(tab)
end
local function aka(args)
end
function p.main(frame)
local args = getArgs(frame)
return p._main(args)
end
function p._main(args)
-- Main module code goes here.
local text, tab, _tab = "", {}, {}
_tab = {
foreign(args),
variant(args),
-- aka(args),
args[2] or ""
}
for _, val in ipairs(_tab) do
if val ~= "" then
table.insert(tab, val)
end
end
if #tab > 0 then
text = '<span style="font-weight: normal;">(' .. table.concat(tab, ",") .. ')</span>'
text = head(args) .. text
else
text = head(args)
end
return text
end
return p