Modul:Language
Dokumentaci tohoto modulu lze vytvořit na stránce Nápověda:Modul:Language
-- @brief
-- Language object.
--
-- @author
-- [[meta:User:Danny B.]]
local Language = {}
----------------------------------------
local Languages = require( "Module:Languages" )
-- @brief
-- Parses and splits the language tag into appropriate parts.
--
-- @details
-- Very trivial implementation
--
-- @param
-- String langTag Language tag
--
-- @return
-- table Parts of parsed language tag
-- nil If language tag is invalid or any of its part is unknown
function Language._parseLanguageTag( langTag )
local parsedLangTag = {}
local subtagStartPos
local subtagPartPos
local _
_, _, parsedLangTag.lang, subtagStartPos = langTag:find( "^(%l%l%l?)()" )
_, _, parsedLangTag.region, subtagPartPos = langTag:find( "^%-(%u%u)()", subtagStartPos )
_, _, parsedLangTag.script, subtagPartPos = langTag:find( "^%-(%u%l%l%l)()", subtagPartPos or subtagStartPos )
return next( parsedLangTag ) and parsedLangTag
end
-- @brief
-- Gets the language direction by language tag.
--
-- @param
-- String langTag Language tag
--
-- @return
-- String Language direction
-- nil If language tag is invalid or any of its language part is unknown
function Language:getDirection( langTag )
local lang = self._parseLanguageTag( langTag ).lang
return Languages[lang] and Languages[lang].dir or nil
end
-- @brief
-- Gets the language name by language tag.
--
-- @param
-- String langTag Language tag
--
-- @return
-- String Language name
-- nil If language tag is invalid or any of its language part is unknown
function Language:getName( langTag )
local lang = self._parseLanguageTag( langTag ).lang
return Languages[lang] and Languages[lang].name or nil
end
-- @brief
-- Gets the full language name (including script and region) by language tag.
--
-- @param
-- String langTag Language tag
--
-- @return
-- String Full language name
-- nil If language tag is invalid or any of its parts is unknown
function Language:getFullName( langTag )
local output
local parsedLangTag = self._parseLanguageTag( langTag )
if parsedLangTag then
local lang = Languages[parsedLangTag.lang] and Languages[parsedLangTag.lang].name
local region = ""
local script = ""
if lang then
output = lang
if parsedLangTag.region then
region = Languages[parsedLangTag.lang].regions and Languages[parsedLangTag.lang].regions[parsedLangTag.region]
end
if parsedLangTag.script then
script = Languages[parsedLangTag.lang].scripts and Languages[parsedLangTag.lang].scripts[parsedLangTag.script]
end
if parsedLangTag.region or parsedLangTag.script then
if region and script then
if ( region ~= "" and script ~= "" ) then
output = output .. " (" .. region .. ", " .. script .. ")"
else
output = output .. " (" .. ( region ~= "" and region or script ) .. ")"
end
else
output = nil
end
end
end
end
return output
end
----------------------------------------
return Language