Jump to content

Module:LangSwitch

From Wikipedia, the free encyclopedia
--[[ __ __ _ _ _ ____ _ _ _  | \/ | ___ __| |_ _| | ___ _| | __ _ _ __ __ _/ ___|_ _(_) |_ ___| |__  | |\/| |/ _ \ / _` | | | | |/ _ (_) | / _` | '_ \ / _` \___ \ \ /\ / / | __/ __| '_ \  | | | | (_) | (_| | |_| | | __/_| |__| (_| | | | | (_| |___) \ V V /| | || (__| | | | |_| |_|\___/ \__,_|\__,_|_|\___(_)_____\__,_|_| |_|\__, |____/ \_/\_/ |_|\__\___|_| |_| |___/  Authors and maintainers:* User:Zolo - original version in Module:Fallback* User:Jarekt ]]localp={}--[[_langSwitchThis 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:]]localfunctiondefaultCheck(args)ifnotargs.enandnotargs.defaultthenlocalerr='<b class="error">LangSwitch Error: no default</b>'ifargs.nocat=='1'thenreturnerrelsereturnerr..'[[Category:LangSwitch template without default version]]'endendreturnfalseendlocalfunctionquickSwitch(args,arg)localerr=defaultCheck(args)iferrthenreturnerrendifarg=='~'thenarg=''endreturnargendfunctionp._langSwitch(args,lang)-- args: table of translations-- Return error if there is not default and no english versionlocalerr=defaultCheck(args)iferrthenreturnerrend-- get the list of accepetable language (lang + those in lang's fallback chain) and check their contentassert(lang,'LangSwitch Error: no lang')--local langList = {lang}--if not args[lang] thenlocallangList=mw.language.getFallbacksFor(lang)table.insert(langList,1,lang)table.insert(langList,math.max(#langList,2),'default')--endfor_,languageinipairs(langList)dolang=args[language]iflang=='~'thenreturn''elseiflangandlang~=''thenreturnlangendendend--[[langSwitchThis 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:]]functionp.langSwitch(frame)-- version to be used from wikitextlocalargs=frame.args-- if no expected args provided than check parent template/module argsifargs.en==nilandargs.default==nilandargs.nocat==nilthenargs=mw.getCurrentFrame():getParent().argsendlocallang=args.langifnotlangornotmw.language.isSupportedLanguage(lang)thenlang=frame:callParserFunction("int","lang")-- get user's chosen languageend-- Try quick switchlocalargs1=args[lang]ifargs1andargs1~=''thenreturnquickSwitch(args,args1)end-- Allow input in format: {{LangSwitch|de=Grün|es/it/pt=Verde|fr=Vert|en=Green |lang=en}}-- with multiple languages mapping to a single valueargs1={}forname,valueinpairs(args)doifvalue~=''andtype(name)=='string'then-- split multi keysforstrinstring.gmatch(name,"([^/]+)")doargs1[str]=valueendendendreturnp._langSwitch(args1,lang)endreturnp
close