<?xml version="1.0"?>
<feed xmlns="http://www.w3.org/2005/Atom" xml:lang="en">
	<id>https://wiki.stiles.casa/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://wiki.stiles.casa/index.php?action=history&amp;feed=atom&amp;title=Module%3ALangSwitch"/>
	<link rel="alternate" type="text/html" href="https://wiki.stiles.casa/index.php?title=Module:LangSwitch&amp;action=history"/>
	<updated>2026-04-07T11:06:58Z</updated>
	<subtitle>Revision history for this page on the wiki</subtitle>
	<generator>MediaWiki 1.39.2</generator>
	<entry>
		<id>https://wiki.stiles.casa/index.php?title=Module:LangSwitch&amp;diff=8074&amp;oldid=prev</id>
		<title>imported&gt;RexxS: sync from Commons</title>
		<link rel="alternate" type="text/html" href="https://wiki.stiles.casa/index.php?title=Module:LangSwitch&amp;diff=8074&amp;oldid=prev"/>
		<updated>2019-02-24T14:36:55Z</updated>

		<summary type="html">&lt;p&gt;sync from Commons&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;
 | |\/| |/ _ \ / _` | | | | |/ _ (_) |   / _` | &amp;#039;_ \ / _` \___ \ \ /\ / / | __/ __| &amp;#039;_ \ &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;
local p = {}&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=&amp;#039;text in english&amp;#039;, pl=&amp;#039;tekst po polsku&amp;#039;}, 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&amp;#039;s native language)&lt;br /&gt;
 &lt;br /&gt;
 Error Handling:&lt;br /&gt;
 &lt;br /&gt;
]]&lt;br /&gt;
local function defaultCheck(args)&lt;br /&gt;
	if not args.en and not args.default then&lt;br /&gt;
		local err = &amp;#039;&amp;lt;b class=&amp;quot;error&amp;quot;&amp;gt;LangSwitch Error: no default&amp;lt;/b&amp;gt;&amp;#039;&lt;br /&gt;
		if args.nocat == &amp;#039;1&amp;#039; then&lt;br /&gt;
			return err&lt;br /&gt;
		else&lt;br /&gt;
			return err .. &amp;#039;[[Category:LangSwitch template without default version]]&amp;#039;&lt;br /&gt;
		end&lt;br /&gt;
	end&lt;br /&gt;
	return false&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
local function quickSwitch(args, arg)&lt;br /&gt;
	local err = defaultCheck(args)&lt;br /&gt;
	if err then&lt;br /&gt;
		return err&lt;br /&gt;
	end&lt;br /&gt;
	if arg == &amp;#039;~&amp;#039; then&lt;br /&gt;
		arg = &amp;#039;&amp;#039;&lt;br /&gt;
	end&lt;br /&gt;
	return arg&lt;br /&gt;
end&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;
	local err = defaultCheck(args)&lt;br /&gt;
	if err then&lt;br /&gt;
		return err&lt;br /&gt;
	end&lt;br /&gt;
	-- get the list of accepetable language (lang + those in lang&amp;#039;s fallback chain) and check their content&lt;br /&gt;
	assert(lang, &amp;#039;LangSwitch Error: no lang&amp;#039;)&lt;br /&gt;
&lt;br /&gt;
	--local langList = {lang}&lt;br /&gt;
	--if not args[lang] then&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), &amp;#039;default&amp;#039;)&lt;br /&gt;
	--end&lt;br /&gt;
&lt;br /&gt;
	for _, language in ipairs(langList) do&lt;br /&gt;
		lang = args[language]&lt;br /&gt;
		if lang == &amp;#039;~&amp;#039; then&lt;br /&gt;
			return &amp;#039;&amp;#039;&lt;br /&gt;
		elseif lang and lang ~= &amp;#039;&amp;#039; then&lt;br /&gt;
			return lang&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&amp;#039;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;
&lt;br /&gt;
	local lang = args.lang&lt;br /&gt;
	if not lang or not mw.language.isSupportedLanguage(lang) then&lt;br /&gt;
		lang = frame:callParserFunction(&amp;quot;int&amp;quot;, &amp;quot;lang&amp;quot;) -- get user&amp;#039;s chosen language&lt;br /&gt;
	end&lt;br /&gt;
&lt;br /&gt;
	-- Try quick switch&lt;br /&gt;
	local args1 = args[lang]&lt;br /&gt;
	if args1 and args1 ~= &amp;#039;&amp;#039; then&lt;br /&gt;
		return quickSwitch(args, args1)&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;
	args1 = {}&lt;br /&gt;
	for name, value in pairs(args) do&lt;br /&gt;
		if value ~= &amp;#039;&amp;#039; and type(name) == &amp;#039;string&amp;#039; then&lt;br /&gt;
			-- split multi keys&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)&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
return p&lt;/div&gt;</summary>
		<author><name>imported&gt;RexxS</name></author>
	</entry>
</feed>