模組:Language/name
此模块已评为alpha版,可接受第三方输入,并可用于少量页面以检查是否存在问题,但需要受到检查。欢迎提供新功能或修改其输入输出机制的建议。 |
該模塊將ISO 639代碼和語言標籤轉換為其等效的語言名稱(或說明)。它有三種模式:simple(簡單),fuzzy(模糊)和formal(正式)。在simple模式中,整個標籤需要完全匹配;在fuzzy模式,只有基礎ISO 639代碼需要完全匹配。例如,如果列表中沒有mn-Cyrl
標籤,但是存在mn
,則simple模式將無法找到匹配,而fuzzy則可以。
最後,在formal模式,腳本將嘗試通過語言、腳本(編寫系統)與區域來正確解碼標籤,並完整印出其名稱。 以下是三種模式如何處理zh
和 zh-Hans-CN
:
{{#invoke:Language/name|simple|code=zh}} |
→ | 中文 |
{{#invoke:Language/name|simple|code=zh-Hans-CN}} |
→ | |
{{#invoke:Language/name|fuzzy|code=zh-Hans-CN}} |
→ | 中文 |
{{#invoke:Language/name|formal|code=zh-Hans-CN}} |
→ | 中文 (Han (Simplified variant), China) |
{{ISO 639 name}}
和 Module:Language/text 使用了 fuzzy模式。輸入不區分大小寫。如果輸入被省略,該模塊將返回一個錯誤訊息;如果找不到匹配項,它將返回一個空字符串。它可以與維碼中的#if
結構一起使用,例如 {{#if:{{ISO 639 name|{{{1}}}}}| ... }}
.
數據從/data中提取。
有關語言標籤的信息,請參閱BCP 47, the IANA Language Subtag Registry, Richard Ishida's Language Subtag Lookup和維基百科上的IETF language tag。
參見
- Module:Language/external links
- Module:Language/text
- Module:Language/name/data
- Module:Language/data/names
- Special:PrefixIndex/Module:Language/data/, notably:
- language subtags
- script subtags
local getArgs = require("Module:Arguments").getArgs
local p, e = {}, {}
local function __compile(...)
local r,i = "",0
for _, v in ipairs(arg) do
i = i + 1
if i == 1 then
r = v[1]
elseif i == 2 then
r = r .. " (" .. v[1]
else
r = r .. ", " .. v[1]
end
end
if i > 1 then
r = r .. ")"
end
return r
end
function e.simple(args, data)
return __compile(data.lang[args.code])
end
function e.fuzzy(args, data)
-- split lang code at '-', starting from the end, one dash at a time
-- and try to find a match; break from loop when we do
repeat
if data.lang[args.code] then
break
end
args.code = args.code:gsub("-[^-]*$", "")
until not args.code:match("-")
return __compile(data.lang[args.code])
end
function e.formal(args, data)
-- split the whole lang code up at every '-' and stick the bits in an array
local bits = {}; for match in args.code:gmatch("[^-]+") do
bits[#bits+1] = match
end
-- if length of the 2nd array item is 4, assume it's a script code,
-- otherwise a region code
if bits[2] and #bits[2] == 4 then
return __compile(data.lang[bits[1]],
data.script[bits[2]],
data.region[bits[3]]
)
else
return __compile(data.lang[bits[1]],
data.region[bits[2]]
)
end
end
for function_name in pairs(e) do
p[function_name] = function (frame)
local args = getArgs(frame)
local data = mw.loadData("Module:Language/name/data")
args.code = args.code:lower()
-- if dataset=iana, discard wp language table
if args.dataset == "iana" then
data.lang = data.lang_iana
end
return e[function_name](args, data)
end
end
return p