<?xml version="1.0"?>
<feed xmlns="http://www.w3.org/2005/Atom" xml:lang="en">
	<id>https://wonkpedia.org/mediawiki/index.php?action=history&amp;feed=atom&amp;title=Module%3ALangSwitch</id>
	<title>Module:LangSwitch - Revision history</title>
	<link rel="self" type="application/atom+xml" href="https://wonkpedia.org/mediawiki/index.php?action=history&amp;feed=atom&amp;title=Module%3ALangSwitch"/>
	<link rel="alternate" type="text/html" href="https://wonkpedia.org/mediawiki/index.php?title=Module:LangSwitch&amp;action=history"/>
	<updated>2026-04-15T07:53:11Z</updated>
	<subtitle>Revision history for this page on the wiki</subtitle>
	<generator>MediaWiki 1.35.13</generator>
	<entry>
		<id>https://wonkpedia.org/mediawiki/index.php?title=Module:LangSwitch&amp;diff=1876&amp;oldid=prev</id>
		<title>Bmueller: 1 revision imported</title>
		<link rel="alternate" type="text/html" href="https://wonkpedia.org/mediawiki/index.php?title=Module:LangSwitch&amp;diff=1876&amp;oldid=prev"/>
		<updated>2022-04-01T22:35:07Z</updated>

		<summary type="html">&lt;p&gt;1 revision imported&lt;/p&gt;
&lt;table class=&quot;diff diff-contentalign-left diff-editfont-monospace&quot; data-mw=&quot;interface&quot;&gt;
				&lt;col class=&quot;diff-marker&quot; /&gt;
				&lt;col class=&quot;diff-content&quot; /&gt;
				&lt;col class=&quot;diff-marker&quot; /&gt;
				&lt;col class=&quot;diff-content&quot; /&gt;
				&lt;tr class=&quot;diff-title&quot; lang=&quot;en&quot;&gt;
				&lt;td colspan=&quot;2&quot; style=&quot;background-color: #fff; color: #202122; text-align: center;&quot;&gt;← Older revision&lt;/td&gt;
				&lt;td colspan=&quot;2&quot; style=&quot;background-color: #fff; color: #202122; text-align: center;&quot;&gt;Revision as of 22:35, 1 April 2022&lt;/td&gt;
				&lt;/tr&gt;
&lt;!-- diff cache key lets_get_wonky-mediawiki-:diff:wikidiff2:1.12:old-1875:rev-1876:1.11.0 --&gt;
&lt;/table&gt;</summary>
		<author><name>Bmueller</name></author>
	</entry>
	<entry>
		<id>https://wonkpedia.org/mediawiki/index.php?title=Module:LangSwitch&amp;diff=1875&amp;oldid=prev</id>
		<title>Commons&gt;Jarekt: add &quot;add_label&quot; parameter for adding invisible but machine-readable labels if needed</title>
		<link rel="alternate" type="text/html" href="https://wonkpedia.org/mediawiki/index.php?title=Module:LangSwitch&amp;diff=1875&amp;oldid=prev"/>
		<updated>2022-03-08T14:31:58Z</updated>

		<summary type="html">&lt;p&gt;add &amp;quot;add_label&amp;quot; parameter for adding invisible but machine-readable labels if needed&lt;/p&gt;
&lt;p&gt;&lt;b&gt;New page&lt;/b&gt;&lt;/p&gt;&lt;div&gt;--[[&lt;br /&gt;
  __  __           _       _        _                      ____          _ _       _     &lt;br /&gt;
 |  \/  | ___   __| |_   _| | ___ _| |    __ _ _ __   __ _/ ___|_      _(_) |_ ___| |__  &lt;br /&gt;
 | |\/| |/ _ \ / _` | | | | |/ _ (_) |   / _` | '_ \ / _` \___ \ \ /\ / / | __/ __| '_ \ &lt;br /&gt;
 | |  | | (_) | (_| | |_| | |  __/_| |__| (_| | | | | (_| |___) \ V  V /| | || (__| | | |&lt;br /&gt;
 |_|  |_|\___/ \__,_|\__,_|_|\___(_)_____\__,_|_| |_|\__, |____/ \_/\_/ |_|\__\___|_| |_|&lt;br /&gt;
                                                     |___/                               &lt;br /&gt;
 Authors and maintainers:&lt;br /&gt;
* User:Zolo   - original version in Module:Fallback&lt;br /&gt;
* User:Jarekt &lt;br /&gt;
]]&lt;br /&gt;
&lt;br /&gt;
-- add optional module &lt;br /&gt;
-- used for debugging purposes as it detects cases of unintended global variables&lt;br /&gt;
require('Module:No globals') &lt;br /&gt;
&lt;br /&gt;
local p = {}&lt;br /&gt;
&lt;br /&gt;
local function add_labels(args)&lt;br /&gt;
	-- add invisible but machine readable labels to the files, which can be used to add titles to wikidata items&lt;br /&gt;
	local createTag = require('Module:TagQS').createTag -- lazy loading of the module: only for the files that need it&lt;br /&gt;
	local qsTable = {''}&lt;br /&gt;
&lt;br /&gt;
	-- add text of invisible tag brodcasted by the template which allows creation of QuickStatements command used to add this info to Wikidata&lt;br /&gt;
	for lang, text in pairs( args ) do &lt;br /&gt;
		if type(lang)=='string' and mw.language.isSupportedLanguage(lang)  then -- lang has to be a valid language &lt;br /&gt;
			table.insert( qsTable, createTag('label', 'L'..lang, '&amp;quot;' .. text .. '&amp;quot;') )&lt;br /&gt;
		end&lt;br /&gt;
	end&lt;br /&gt;
	return table.concat( qsTable, '\n')&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
--[[&lt;br /&gt;
_langSwitch&lt;br /&gt;
 &lt;br /&gt;
This function is the core part of the LangSwitch template. &lt;br /&gt;
 &lt;br /&gt;
Example usage from Lua:&lt;br /&gt;
text = _langSwitch({en='text in english', pl='tekst po polsku'}, lang)&lt;br /&gt;
 &lt;br /&gt;
Parameters:&lt;br /&gt;
  args - table with translations by language&lt;br /&gt;
  lang - desired language (often user's native language)&lt;br /&gt;
&lt;br /&gt;
 Error Handling:&lt;br /&gt;
&lt;br /&gt;
]]&lt;br /&gt;
&lt;br /&gt;
function p._langSwitch(args, lang) -- args: table of translations&lt;br /&gt;
	-- Return error if there is not default and no english version&lt;br /&gt;
	if not args.en and not args.default then&lt;br /&gt;
		local err = '&amp;lt;b class=&amp;quot;error&amp;quot;&amp;gt;LangSwitch Error: no default&amp;lt;/b&amp;gt;'&lt;br /&gt;
		if args.nocat == '1' then&lt;br /&gt;
			return err&lt;br /&gt;
		else&lt;br /&gt;
			return err .. '[[Category:LangSwitch template without default version]]'&lt;br /&gt;
		end&lt;br /&gt;
	end&lt;br /&gt;
	&lt;br /&gt;
	-- To improve performance try quick switch, and load fallback chain only if needed. &lt;br /&gt;
	-- In the vast majority of cases fast switch is sufficient&lt;br /&gt;
	local val = args[lang]&lt;br /&gt;
	if val == '~' then &lt;br /&gt;
		return ''&lt;br /&gt;
	elseif val and val ~= '' then &lt;br /&gt;
		return val &lt;br /&gt;
	elseif args.quick then&lt;br /&gt;
		return nil&lt;br /&gt;
	end&lt;br /&gt;
	&lt;br /&gt;
	-- get the list of accepetable language (lang + those in lang's fallback chain) and check their content&lt;br /&gt;
	assert(lang, 'LangSwitch Error: no lang')&lt;br /&gt;
	local langList = mw.language.getFallbacksFor(lang)&lt;br /&gt;
	table.insert(langList,1,lang)&lt;br /&gt;
	table.insert(langList,math.max(#langList,2),'default')&lt;br /&gt;
	for _, language in ipairs(langList) do &lt;br /&gt;
		val = args[language]&lt;br /&gt;
		if val == '~' then &lt;br /&gt;
			return ''&lt;br /&gt;
		elseif val and val ~= '' then &lt;br /&gt;
			return val &lt;br /&gt;
		end&lt;br /&gt;
	end&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
--[[&lt;br /&gt;
langSwitch&lt;br /&gt;
 &lt;br /&gt;
This function is the core part of the LangSwitch template. &lt;br /&gt;
 &lt;br /&gt;
Example Usage from a template:&lt;br /&gt;
{{#invoke:fallback|langSwitch|en=text in english|pl=tekst po polsku|lang={{int:lang}} }}&lt;br /&gt;
 &lt;br /&gt;
Parameters:&lt;br /&gt;
  frame.args - table with translations by language&lt;br /&gt;
  frame.args.lang - desired language (often user's native language)&lt;br /&gt;
&lt;br /&gt;
 Error Handling:&lt;br /&gt;
&lt;br /&gt;
]]&lt;br /&gt;
function p.langSwitch(frame) -- version to be used from wikitext&lt;br /&gt;
	local args = frame.args&lt;br /&gt;
	-- if no expected args provided than check parent template/module args&lt;br /&gt;
	if args.en==nil and args.default==nil and args.nocat==nil then&lt;br /&gt;
		args = mw.getCurrentFrame():getParent().args &lt;br /&gt;
	end&lt;br /&gt;
	local lang = args.lang&lt;br /&gt;
	if not lang or not mw.language.isKnownLanguageTag(lang) then&lt;br /&gt;
		lang = frame:callParserFunction( &amp;quot;int&amp;quot;, &amp;quot;lang&amp;quot; ) -- get user's chosen language &lt;br /&gt;
	end&lt;br /&gt;
	&lt;br /&gt;
	-- add text of invisible tag brodcasted by the template which allows creation of QuickStatements command used to add this info to Wikidata&lt;br /&gt;
	local labels = ''&lt;br /&gt;
	if args.add_labels then&lt;br /&gt;
		labels = add_labels(args)&lt;br /&gt;
	end&lt;br /&gt;
	&lt;br /&gt;
	-- Try quick switch which checks the most likely option when fallback is not needed&lt;br /&gt;
	args.quick = true;&lt;br /&gt;
	local val = p._langSwitch(args, lang)&lt;br /&gt;
	if val then&lt;br /&gt;
		return val .. labels&lt;br /&gt;
	end&lt;br /&gt;
	&lt;br /&gt;
	-- Allow input in format: {{LangSwitch|de=Grün|es/it/pt=Verde|fr=Vert|en=Green |lang=en}}&lt;br /&gt;
	-- with multiple languages mapping to a single value&lt;br /&gt;
	local args1 = {}&lt;br /&gt;
	for name, value in pairs( args ) do &lt;br /&gt;
		if value ~= '' and type(name)=='string' then &lt;br /&gt;
    		for str in string.gmatch( name, &amp;quot;([^/]+)&amp;quot; ) do&lt;br /&gt;
				args1[str] = value&lt;br /&gt;
			end&lt;br /&gt;
		end&lt;br /&gt;
	end&lt;br /&gt;
	return p._langSwitch(args1, lang) .. labels&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
return p&lt;/div&gt;</summary>
		<author><name>Commons&gt;Jarekt</name></author>
	</entry>
</feed>