Template:Fallback: Difference between revisions

From Meta, a Wikimedia project coordination wiki
Content deleted Content added
Zolo (talk | contribs)
m
Zolo (talk | contribs)
try workaround
Line 67: Line 67:


function p.fblist(args, lang)
function p.fblist(args, lang)
fblist = p.fallbackloop(args, {lang})
fblist = p.fallbackloop(args, {[lang] = true})
table.insert(fblist, 1, lang)
table.insert(fblist, 'default')
table.insert(fblist, 'default')
table.insert(fblist, 'en')
table.insert(fblist, 'en')
Line 76: Line 75:
function p.fallbackloop(args, fblist)
function p.fallbackloop(args, fblist)
local newlist = fblist
local newlist = fblist
for i, j in pairs(fblist) do
for i in pairs(fblist) do
if langlist[j] then
if langlist[i] then
for k, l in pairs (langlist[j]) do
for j in pairs(langlist[i]) do
if not newlist[j] then
for m, n in pairs(fblist) do
if n == l then
newlist[j] = true
break
end
table.insert(newlist, n)
end
end
end
end
Line 89: Line 85:
end
end
if newlist ~= fblist then
if newlist ~= fblist then
return newlist -- p.fallback(args, newlist)
return p.fallbackloop(args, newlist)
else
return newlist
end
end
return newlist
end
end



Revision as of 13:06, 21 November 2013

Template documentation

This template was imported from commons:Template:Fallback without the here unusable documentation.


Use localised subpage for the user language with fallback to {{CONTENTLANGUAGE}}

Template parameters[Edit template data]

ParameterDescriptionTypeStatus
page1

Template name

Page namerequired
lang2

override user language on localised page

Default
{{int:Lang}}
Stringoptional

local p = {}
local langlist = {
 ['af']         = {'nl'}, 
 ['als']        = {'de'}, 
 ['arz']        = {'ar'}, 
 ['bar']        = {'de'}, 
 ['be-x-old']   = {'be-tarask'}, 
 ['br']         = {'fr'}, 
 ['ckb']        = {'fa'}, 
 ['co']         = {'fr'}, 
 ['crh-cyrl']   = {'crh'}, 
 ['crh-latn']   = {'crh'},
 ['de-ch']      = {'de'}, 
 ['de-formal']  = {'de'},
 ['de-formal']  = {'de'},
 ['en-gb']      = {'en'}, 
 ['frp']        = {'fr'}, 
 ['frr']        = {'de'}, 
 ['fy']         = {'nl'}, 
 ['glk']        = {'fa'}, 
 ['hif-deva']   = {'hif'}, 
 ['hif-latn']   = {'hif'}, 
 ['ht']         = {'fr'}, 
 ['ike-cans']   = {'ik'}, 
 ['kk-arab']    = {'kk'}, 
 ['kk-cn']      = {'kk'}, 
 ['kk-cyrl']    = {'kk'}, 
 ['kk-kz']      = {'kk'}, 
 ['kk-latn']    = {'kk'}, 
 ['kk-tr']      = {'kk'}, 
 ['ksh']        = {'de'}, 
 ['ku-arab']    = {'ku'}, 
 ['ku-latn']    = {'ku'}, 
 ['li']         = {'nl'}, 
 ['mg']         = {'fr'}, 
 ['mzn']        = {'fa'}, 
 ['nds']        = {'nds-nl', 'de'}, 
 ['nds-nl']     = {'nds', 'nl'}, 
 ['nl-informal']= {'nl'}, 
 ['pdt']        = {'nds', 'de'}, 
 ['pt-br']      = {'pt'}, 
 ['ruq-grek']   = {'ruq'}, 
 ['rug-latn']   = {'ruq'}, 
 ['ruq-cyrl']   = {'ruq'}, 
 ['sr-ec']      = {'sr'}, 
 ['sr-el']      = {'sr'}, 
 ['szl']        = {'pl'}, 
 ['tg-cyrl']    = {'tg'}, 
 ['tg-latn']    = {'tg'}, 
 ['tt-cyrl']    = {'tt'}, 
 ['tt-latn']    = {'tt'}, 
 ['ty']         = {'fr'}, 
 ['vec']        = {'it'}, 
 ['vls']        = {'nl'}, 
 ['wa']         = {'fr'}, 
 ['zea']        = {'nl'}, 
 ['zh']         = {'zh-hans'}, 
 ['zh-cn']      = {'zh-hans'}, 
 ['zh-hans']    = {'zh-cn', 'zh'}, 
 ['zh-hant']    = {'zh'}, 
 ['zh-hk']      = {'zh-hant'}, 
 ['zh-mo']      = {'zh-hant'}, 
 ['zh-my']      = {'zh-hans'}, 
 ['zh-sg']      = {'zh-hans'}, 
 ['zh-tw']      = {'zh-hant'}
}

function p.fblist(args, lang)
	fblist = p.fallbackloop(args, {[lang] = true})
	table.insert(fblist, 'default')
	table.insert(fblist, 'en')
	return fblist
end

function p.fallbackloop(args, fblist) 
	local newlist = fblist
	for i in pairs(fblist) do
		if langlist[i] then
			for j in pairs(langlist[i]) do
				if not newlist[j] then
					newlist[j] = true
				end
			end
		end
	end
	if newlist ~= fblist then
		return p.fallbackloop(args, newlist)
	end
	return newlist
end

function p.langSwitch(frame)
	args = mw.getCurrentFrame():getParent().args
	-- Return error if there is not default and no english version
	if not args.en and not args.default and args.nocat ~= '1' then
		return frame:expandTemplate{ title = "red", args = {'LangSwitch error: no default'}} .. '[[Category:LangSwitch template without default version]]' 
	end
	-- get language (either stated one or user's default language)
	if args.lang then 
		lang = args.lang
	else 
		lang = frame:preprocess( "{{int:lang}}" )
	end
	-- gets the most appropriate language 
	local fblist = p.fblist(args,lang)
	for i, j in pairs(fblist) do
		if args[j] and args[j] == '~' then -- '~' means, display nothing for this language
			return ''
		elseif args[j] then
			return args[j]
		end
	end
end

return p