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 /> | |\/| |/ _ \ / _` | | | | |/ _ (_) | / _` | &#039;_ \ / _` \___ \ \ /\ / / | __/ __| &#039;_ \ <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=&#039;text in english&#039;, pl=&#039;tekst po polsku&#039;}, lang)<br /> <br /> Parameters:<br /> args - table with translations by language<br /> lang - desired language (often user&#039;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 = &#039;&lt;b class=&quot;error&quot;&gt;LangSwitch Error: no default&lt;/b&gt;&#039;<br /> if args.nocat == &#039;1&#039; then<br /> return err<br /> else<br /> return err .. &#039;[[Category:LangSwitch template without default version]]&#039;<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 == &#039;~&#039; then<br /> arg = &#039;&#039;<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&#039;s fallback chain) and check their content<br /> assert(lang, &#039;LangSwitch Error: no lang&#039;)<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), &#039;default&#039;)<br /> --end<br /> <br /> for _, language in ipairs(langList) do<br /> lang = args[language]<br /> if lang == &#039;~&#039; then<br /> return &#039;&#039;<br /> elseif lang and lang ~= &#039;&#039; 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&#039;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(&quot;int&quot;, &quot;lang&quot;) -- get user&#039;s chosen language<br /> end<br /> <br /> -- Try quick switch<br /> local args1 = args[lang]<br /> if args1 and args1 ~= &#039;&#039; 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 ~= &#039;&#039; and type(name) == &#039;string&#039; then<br /> -- split multi keys<br /> for str in string.gmatch(name, &quot;([^/]+)&quot;) 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