Module:Language
Jump to navigation
Jump to search
The source of truth for languages relevant to The Legend of Zelda series.
This module exports the following functions.enum
enum([options])
Parameters
[options]
[includeWikiLanguage]
- If true, the wiki's native language (
enAm
) is included in the list.
Returns
- A list of language codes for use by Module:UtilsArg and Module:Documentation.
Examples
# | Input | Output |
---|---|---|
1 | enum()
| {
"enBr",
"ja",
"zhT",
"zhS",
"cs",
"da",
"nl",
"fi",
"frC",
"frF",
"de",
"hu",
"it",
"ko",
"he",
"no",
"pl",
"ptB",
"ptP",
"ru",
"esL",
"esS",
"sv",
reference = "[[Module:Language/Data]]",
}
|
2 | enum({ includeWikiLanguage = true })
| {
"enAm",
"enBr",
"ja",
"zhT",
"zhS",
"cs",
"da",
"nl",
"fi",
"frC",
"frF",
"de",
"hu",
"it",
"ko",
"he",
"no",
"pl",
"ptB",
"ptP",
"ru",
"esL",
"esS",
"sv",
reference = "[[Module:Language/Data]]",
}
|
getLect
getLect(code, [options])
Parameters
code
- A code from Module:Language/Data.
[options]
[flagSize=20px]
- An image size for the returned flag(s).
Returns
- A Lua table of information on a particular lect (a language or variant thereof), or
nil
if the given code does not exist in Module:Language/Data. - An error category if the given code does not exist in Module:Language/Data.
Examples
# | Input | Output | Status |
---|---|---|---|
3 | getLect("enBr")
| {
abbr = "English<sup>'\"`UNIQ--templatestyles-0000002C-QINU`\"'<span class=\"explain tooltip\" title=\"British\">BR</span></sup>",
lang = "English",
name = "British English",
flags = {
'<span class="tooltip" title="The United Kingdom of Great Britain and Northern Ireland">[[File:United Kingdom Flag.png|20px|The United Kingdom of Great Britain and Northern Ireland]]</span>',
},
}
| |
nil
| |||
4 | getLect("ja", { flagSize = "40px" })
| {
abbr = "Japanese",
lang = "Japanese",
name = "Japanese",
flags = {
'<span class="tooltip" title="Japan">[[File:Japan Flag.png|40px|Japan]]</span>',
},
}
| |
nil
| |||
5 | getLect("zhT")
| {
abbr = "Chinese<sup>'\"`UNIQ--templatestyles-00000009-QINU`\"'<span class=\"explain tooltip\" title=\"Traditional\">TR</span></sup>",
lang = "Chinese",
name = "Traditional Chinese",
flags = {
'<span class="tooltip" title="The Republic of China">[[File:Taiwan Flag.svg|20px|The Republic of China]]</span>',
'<span class="tooltip" title="The Hong Kong Special Administrative Region of China">[[File:Hong Kong Flag.svg|20px|The Hong Kong Special Administrative Region of China]]</span>',
'<span class="tooltip" title="The Macao Special Administrative Region of China">[[File:Macao Flag.svg|20px|The Macao Special Administrative Region of China]]</span>',
},
}
| |
nil
| |||
6 | getLect("narnia")
| nil
| |
"[[Category:Articles using invalid arguments in template calls]]"
|
local p = {}
local Data = mw.loadData("Module:Language/Data")
local Region = require("Module:Region")
local CATEGORY_INVALID_ARGS = "[[Category:"..require("Module:Constants/category/invalidArgs").."]]"
local DEFAULT_FLAG_SIZE = "20px"
-- The enum is ordered according to [[Guidelines:Translations#Order_of_Languages]]
-- enAm, enBr, ja, then ordered by language name
function p.enum(options)
local options = options or {}
local includeWikiLanguage = options.includeWikiLanguage or false
local enum = {}
for code in pairs(Data.lects) do
if code ~= "enAm" and code ~= "enBr" and code ~= "ja" then
local lect = p.getLect(code)
table.insert(enum, {
code = code,
name = lect.name,
abbr = lect.abbr,
lang = lect.lang,
})
end
end
table.sort(enum, function(a, b)
return a.lang < b.lang
end)
for i, v in ipairs(enum) do
enum[i] = v.code
end
table.insert(enum, 1, "ja")
table.insert(enum, 1, "enBr")
if includeWikiLanguage then
table.insert(enum, 1, "enAm")
end
enum.reference = "[[Module:Language/Data]]"
return enum
end
function p.getLect(code, options)
local options = options or {}
local flagSize = options.flagSize or DEFAULT_FLAG_SIZE
local lect = Data.lects[code]
if not lect then
local utilsError = require("Module:UtilsError")
utilsError.warn(string.format("Invalid language code <code>%s</code>. See [[Module:Language/Data]] for a list of supported languages.", code))
return nil, CATEGORY_INVALID_ARGS
end
if lect.variant then
name = lect.variant.name.." "..lect.lang
local exp = mw.getCurrentFrame():expandTemplate({
title = "Exp",
args = {lect.variant.name, lect.variant.abbr}
})
abbr = lect.lang.."<sup>"..exp.."</sup>"
else
name = lect.lang
abbr = lect.lang
end
local region = Region.getRegion(lect.flag, { flagSize = flagSize })
return {
abbr = abbr,
flags = region.flags,
lang = lect.lang,
name = name,
}
end
function p.Data(frame)
local utilsLayout = require("Module:UtilsLayout")
local utilsMarkup = require("Module:UtilsMarkup")
local headers = {"Code", "Flag(s)", "Language", "{{Wp|Lect}}", "Abbr."}
local sortable = {1, 3, 4, 5}
local rows = {}
for i, code in ipairs(p.enum()) do
local lect = p.getLect(code)
local flags = #lect.flags > 1 and utilsMarkup.list(lect.flags) or lect.flags[1]
table.insert(rows, {"<code>"..code.."</code>", flags, lect.lang, lect.name, lect.abbr})
end
local wikitable = utilsLayout.table({
headers = headers,
sortable = sortable,
rows = rows,
})
return wikitable
end
function p.Documentation(frame)
return {
enum = {
params = {"options"},
returns = "A list of language codes for use by [[Module:UtilsArg]] and [[Module:Documentation]].",
cases = {
outputOnly = true,
{
args = {},
},
{
args = {
{ includeWikiLanguage = true },
},
},
},
},
getLect = {
params = {"code", "options"},
returns = {
"A Lua table of information on a particular {{Wp|lect}} (a language or variant thereof), or <code>nil</code> if the given code does not exist in [[Module:Language/Data]].",
"An error category if the given code does not exist in [[Module:Language/Data]].",
},
cases = {
outputOnly = true,
{
args = {"enBr"},
expect = {
-- {
-- abbr = 'English<sup><span class="explain" rel="tooltip" title="British" style="color:Yellow;">BR</span></sup>',
-- lang = "English",
-- name = "British English",
-- flags = {
-- '<span class="tooltip" title="The United Kingdom of Great Britain and Northern Ireland">[[File:United Kingdom Flag.png|20px|The United Kingdom of Great Britain and Northern Ireland]]</span>',
-- },
-- },
},
},
{
args = {"ja", { flagSize = "40px" }},
expect = {
{
abbr = "Japanese",
lang = "Japanese",
name = "Japanese",
flags = {
'<span class="tooltip" title="Japan">[[File:Japan Flag.png|40px|Japan]]</span>',
},
}
}
},
{
args = {"zhT"},
expect = {
-- {
-- abbr = "Chinese<sup>'\"`UNIQ--templatestyles-00000009-QINU`\"'<span class=\"explain tooltip\" title=\"Traditional\">TR</span></sup>",
-- lang = "Chinese",
-- name = "Traditional Chinese",
-- flags = {
-- '<span class="tooltip" title="The Republic of China">[[File:Taiwan Flag.svg|20px|The Republic of China]]</span>',
-- '<span class="tooltip" title="The Hong Kong Special Administrative Region of China">[[File:Hong Kong Flag.svg|20px|The Hong Kong Special Administrative Region of China]]</span>',
-- '<span class="tooltip" title="The Macao Special Administrative Region of China">[[File:Macao Flag.svg|20px|The Macao Special Administrative Region of China]]</span>',
-- },
-- }
}
},
{
args = {"narnia"},
expect = {
nil,
CATEGORY_INVALID_ARGS
}
},
}
}
}
end
function p.Schemas(frame)
return {
Data = {
type = "record",
required = true,
properties = {
{
name = "lects",
required = true,
type = "map",
desc = "A list of {{Wp|lect|lects}} (languages or variants thereof) relevant to {{TLoZ|Series}}.",
keyPlaceholder = "code",
keys = {
type = "string",
desc = "A identifying code for the lect. This should be an {{Wp|ISO 639-1}} code. For variants, append a one- or two-character abbreviation.",
},
values = {
type = "record",
properties = {
{
name = "lang",
required = true,
type = "string",
desc = "The name of the language.",
},
{
name = "flag",
required = true,
type = "string",
desc = "A [[Module:Region/Data|region code]] identifying a flag (or flags) to associate to the language.",
},
{
name = "variant",
type = "record",
properties = {
{
name = "abbr",
type = "string",
required = true,
desc = "An abbreviation of the language variant name.",
},
{
name = "name",
type = "string",
required = true,
desc = "A {{Wp|demonym}} representing the language variant."
},
},
},
},
},
},
},
},
enum = {
options = {
type = "record",
properties = {
{
name = "includeWikiLanguage",
default = false,
desc = "If true, the wiki's native language (<code>enAm</code>) is included in the list.",
},
},
},
},
getLect = {
code = {
required = true,
type = "string",
desc = "A code from [[Module:Language/Data]].",
},
options = {
type = "record",
properties = {
{
name = "flagSize",
type = "string",
default = DEFAULT_FLAG_SIZE,
desc = "An {{MediaWiki|Help:Images#Size_and_frame|image size}} for the returned flag(s).",
},
},
},
},
}
end
return p