-- \/ | ___ __| |_ _| | ___ _| | __ _ _ __ __ _/ ___|_ _(_) |_ ___| |__ | |\/| |/ _ \ / _` | | | | |/ _ (_) | / _` | '_ \ / _` \___ \ \ /\ / / | __/ __| '_ \ | | | | (_) | (_| | |_| | | __/_| |__| (_| | | | | (_| |___) \ V V /| | || (__| | | | |_| |_|\___/ \__,_|\__,_|_|\___(_)_____\__,_|_| |_|\__, |____/ \_/\_/ |_|\__\___|_| |_| |___/ Authors and maintainers: User:Zolo - original version in Module:Fallback User:Jarekt -- add optional module -- used for debugging purposes as it detects cases of unintended global variables 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 local err = if args.nocat '1' then return err else return err .. end end -- To improve performance try quick switch, and load fallback chain only if needed. -- In the vast majority of cases fast switch is sufficient local val args[lang] if val '~' then return elseif val and val ~= then return val elseif args.quick then return nil 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 val = args[language] if val == '~' then return elseif val and val ~= then return val end end end --langSwitch This function is the core part of the LangSwitch template. Example Usage from a template: 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 local 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.isKnownLanguageTag(lang) then lang frame:callParserFunction( "int", "lang" ) -- get user's chosen language end -- Try quick switch which checks the most likely option when fallback is not needed args.quick true; local val p._langSwitch(args, lang) if val then return val end -- Allow input in format: -- with multiple languages mapping to a single value local args1 {} for name, value in pairs( args ) do if value ~ '' and type(name) 'string' then for str in string.gmatch( name, "([^/]+)" ) do args1[str] = value end end end return p._langSwitch(args1, lang) end return p