文档图示 模块文档[查看] [编辑] [历史] [清除缓存]

该模块将ISO 639代码和语言标签转换为其等效的语言名称(或说明)。它有三种模式:simple(简单),fuzzy(模糊)和formal(正式)。在simple模式中,整个标签需要完全匹配;在fuzzy模式,只有基础ISO 639代码需要完全匹配。例如,如果列表中没有mn-Cyrl标签,但是存在mn,则simple模式将无法找到匹配,而fuzzy则可以。 最后,在formal模式,脚本将尝试通过语言、脚本(编写系统)与区域来正确解码标签,并完整印出其名称。 以下是三种模式如何处理zhzh-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

参见

编辑

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