وحدة:Language/name
صُنفت هذه الوحدة على أنها في مرحلة ألفا. تكون الوحدة في هذه المرحلة جاهزة نوعا ما لأن تستخدم من طرف ثالث، أي بمعنى أخر على النطاقات في صفحات التجارب. لكن يجب أن تستخدم في صفحات محددة للغاية وأن لا يوسع إستخدامها ابدا، حتى تنتقل للمرحلة التي بعدها. يجب أن يضاف لهذه الوحدة صفحة توثيق تشرح مدخلاتها وطريقة استخدامها. يجب أن تراقب هذه الوحدة جيدا وملاحظة أي أخطاء قد تحدث والعمل على عزلها وإصلاحها. |
This module converts أيزو 639 codes and language tags into their equivalent language names (descriptions). It has three modes: simple (strict), fuzzy and formal. In simple, the whole tag needs to be an exact match; in fuzzy, only the base ISO 639 code needs to be an exact match. For example, if there's no mn-Cyrl
tag in the list, but there's mn
, simple will not be able to find a match, whereas fuzzy will. Finally, in formal, the script will attempt to properly decode the tag by language, script (writing system) and region and print its name in full. Here's how the three modes will handle zh
and zh-Hans-CN
:
Chinese |
→ | Chinese |
العربية |
→ | العربية |
|
→ | |
Chinese |
→ | Chinese |
Chinese (Han (Simplified variant), الصين) |
→ | Chinese (Han (Simplified variant), الصين) |
{{اسم آيزو 639}}
and وحدة:Language/text use fuzzy. Input is case-insensitive. If input is omitted, this module with return an error; if no match is found, it'll return an empty string that can be used with #if
constructs in wikicode, e.g. {{#if:{{ISO 639 name|{{{1}}}}}| ... }}
.
Data is pulled from /data.
For info on language tags, see BCP 47, the IANA Language Subtag Registry, Richard Ishida's Language Subtag Lookup and the وسم لغة article here on Wikipedia.
طالع أيضاً
[عدل]- وحدة:Language/external links
- وحدة:Language/text
- وحدة:Language/name/data
- وحدة:Language/data/names
- خاص: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