Module:LangSwitch
From Neodyland Wiki
More actions
This documentation is transcluded from Module:LangSwitch/doc.
--[[
__ __ _ _ _____ _ _ _ _
| \/ | ___ __| |_ _| | ___ _| ___|_ _| | | |__ __ _ ___| | __
| |\/| |/ _ \ / _` | | | | |/ _ (_) |_ / _` | | | '_ \ / _` |/ __| |/ /
| | | | (_) | (_| | |_| | | __/_| _| (_| | | | |_) | (_| | (__| <
|_| |_|\___/ \__,_|\__,_|_|\___(_)_| \__,_|_|_|_.__/ \__,_|\___|_|\_\
Authors and maintainers:
* User:Zolo - original version
* User:Jarekt
]]
local function normalize_input_args(input_args, output_args)
for name, value in pairs( input_args ) do
if value ~= '' then -- nuke empty strings
if type(name)=='string' then name=string.lower(name) end -- convert to lower case
output_args[name] = value
end
end
return output_args
end
local p = {}
--[[
_langSwitch
This function is the core part of the LangSwitch template.
Example usage from Lua:
text = _langSwitch({en='text in english', pl='tekst po polsku'}, lang)
Parameters:
args - table with translations by language
lang - desired language (often user's native language)
Error Handling:
]]
function p._langSwitch(args, lang) -- args: table of translations
-- Return error if there is not default and no english version
if not args.en and not args.default then
if args.nocat == '1' then
return '<strong class="error">LangSwitch Error: no default</strong>'
else
return '<strong class="error">LangSwitch Error: no default</strong>[[Category:LangSwitch template without default version]]'
end
end
-- get the list of accepetable language (lang + those in lang's fallback chain) and check their content
assert(lang, 'LangSwitch Error: no lang')
local langList = mw.language.getFallbacksFor(lang)
table.insert(langList,1,lang)
table.insert(langList,math.max(#langList,2),'default')
for _, language in ipairs(langList) do
if args[language ] == '~' then
return ''
elseif args[language] and args[language] ~= '' then
return args[language]
end
end
end
--[[
langSwitch
This function is the core part of the LangSwitch template.
Example Usage from a template:
{{#invoke:fallback|langSwitch|en=text in english|pl=tekst po polsku|lang={{int:lang}} }}
Parameters:
frame.args - table with translations by language
frame.args.lang - desired language (often user's native language)
Error Handling:
]]
function p.langSwitch(frame) -- version to be used from wikitext
args = frame.args
-- if no expected args provided than check parent template/module args
if args.en==nil and args.default==nil and args.nocat==nil then
args = mw.getCurrentFrame():getParent().args
end
local lang = args.lang
if not lang or not mw.language.isSupportedLanguage(lang) then
lang = frame:callParserFunction( "int", "lang" ) -- get user's chosen language
end
args.lang = nil
return p._langSwitch(args, lang)
end
return p