Module:LangSwitch

Матеріал з База знань «Управління публічним інвестуванням»
Перейти до навігації Перейти до пошуку

--[[

 __  __           _       _        _                      ____          _ _       _     
|  \/  | ___   __| |_   _| | ___ _| |    __ _ _ __   __ _/ ___|_      _(_) |_ ___| |__  
| |\/| |/ _ \ / _` | | | | |/ _ (_) |   / _` | '_ \ / _` \___ \ \ /\ / / | __/ __| '_ \ 
| |  | | (_) | (_| | |_| | |  __/_| |__| (_| | | | | (_| |___) \ 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 require('Module:No globals')

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 = 'LangSwitch Error: no default' 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: {{#invoke:fallback|langSwitch|en=text in english|pl=tekst po polsku|lang=⧼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 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: {{#invoke:LangSwitch|langSwitch}} -- 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