https://en.wikipedia.org/w/index.php?action=history&feed=atom&title=Module%3ALangSwitch
Module:LangSwitch - Revision history
2025-05-30T14:13:59Z
Revision history for this page on the wiki
MediaWiki 1.45.0-wmf.3
https://en.wikipedia.org/w/index.php?title=Module:LangSwitch&diff=884864693&oldid=prev
RexxS: sync from Commons
2019-02-24T14:36:55Z
<p>sync from Commons</p>
<p><b>New page</b></p><div>--[[<br />
__ __ _ _ _ ____ _ _ _ <br />
| \/ | ___ __| |_ _| | ___ _| | __ _ _ __ __ _/ ___|_ _(_) |_ ___| |__ <br />
| |\/| |/ _ \ / _` | | | | |/ _ (_) | / _` | '_ \ / _` \___ \ \ /\ / / | __/ __| '_ \ <br />
| | | | (_) | (_| | |_| | | __/_| |__| (_| | | | | (_| |___) \ V V /| | || (__| | | |<br />
|_| |_|\___/ \__,_|\__,_|_|\___(_)_____\__,_|_| |_|\__, |____/ \_/\_/ |_|\__\___|_| |_|<br />
|___/ <br />
Authors and maintainers:<br />
* User:Zolo - original version in Module:Fallback<br />
* User:Jarekt <br />
]]<br />
<br />
local p = {}<br />
<br />
--[[<br />
_langSwitch<br />
<br />
This function is the core part of the LangSwitch template. <br />
<br />
Example usage from Lua:<br />
text = _langSwitch({en='text in english', pl='tekst po polsku'}, lang)<br />
<br />
Parameters:<br />
args - table with translations by language<br />
lang - desired language (often user's native language)<br />
<br />
Error Handling:<br />
<br />
]]<br />
local function defaultCheck(args)<br />
if not args.en and not args.default then<br />
local err = '<b class="error">LangSwitch Error: no default</b>'<br />
if args.nocat == '1' then<br />
return err<br />
else<br />
return err .. '[[Category:LangSwitch template without default version]]'<br />
end<br />
end<br />
return false<br />
end<br />
<br />
<br />
local function quickSwitch(args, arg)<br />
local err = defaultCheck(args)<br />
if err then<br />
return err<br />
end<br />
if arg == '~' then<br />
arg = ''<br />
end<br />
return arg<br />
end<br />
<br />
<br />
function p._langSwitch(args, lang) -- args: table of translations<br />
-- Return error if there is not default and no english version<br />
local err = defaultCheck(args)<br />
if err then<br />
return err<br />
end<br />
-- get the list of accepetable language (lang + those in lang's fallback chain) and check their content<br />
assert(lang, 'LangSwitch Error: no lang')<br />
<br />
--local langList = {lang}<br />
--if not args[lang] then<br />
local langList = mw.language.getFallbacksFor(lang)<br />
table.insert(langList, 1, lang)<br />
table.insert(langList, math.max(#langList, 2), 'default')<br />
--end<br />
<br />
for _, language in ipairs(langList) do<br />
lang = args[language]<br />
if lang == '~' then<br />
return ''<br />
elseif lang and lang ~= '' then<br />
return lang<br />
end<br />
end<br />
end<br />
<br />
--[[<br />
langSwitch<br />
<br />
This function is the core part of the LangSwitch template. <br />
<br />
Example Usage from a template:<br />
{{#invoke:fallback|langSwitch|en=text in english|pl=tekst po polsku|lang={{int:lang}} }}<br />
<br />
Parameters:<br />
frame.args - table with translations by language<br />
frame.args.lang - desired language (often user's native language)<br />
<br />
Error Handling:<br />
<br />
]]<br />
function p.langSwitch(frame) -- version to be used from wikitext<br />
local args = frame.args<br />
-- if no expected args provided than check parent template/module args<br />
if args.en == nil and args.default == nil and args.nocat == nil then<br />
args = mw.getCurrentFrame():getParent().args<br />
end<br />
<br />
local lang = args.lang<br />
if not lang or not mw.language.isSupportedLanguage(lang) then<br />
lang = frame:callParserFunction("int", "lang") -- get user's chosen language<br />
end<br />
<br />
-- Try quick switch<br />
local args1 = args[lang]<br />
if args1 and args1 ~= '' then<br />
return quickSwitch(args, args1)<br />
end<br />
<br />
-- Allow input in format: {{LangSwitch|de=GrĂ¼n|es/it/pt=Verde|fr=Vert|en=Green |lang=en}}<br />
-- with multiple languages mapping to a single value<br />
args1 = {}<br />
for name, value in pairs(args) do<br />
if value ~= '' and type(name) == 'string' then<br />
-- split multi keys<br />
for str in string.gmatch(name, "([^/]+)") do<br />
args1[str] = value<br />
end<br />
end<br />
end<br />
return p._langSwitch(args1, lang)<br />
end<br />
<br />
return p</div>
RexxS