Jump to content

Template:Fallback: Difference between revisions

From Meta, a Wikimedia project coordination wiki
Content deleted Content added
Zolo (talk | contribs)
:-]
Zolo (talk | contribs)
try to create the list of language beforehand, so that it can be used by autotranslate
Line 66: Line 66:
}
}


function p.getfallback(args, lang)
function p.fblist(args, lang)
fblist = {}
if not lang then lang = args.lang end
if langlist[lang] then
flist = p.fallbackloop(args, langlist[lang])
if args[lang] and args[lang] ~= '' then
return args[lang]
end
if langlist[lang] then -- if there is a fallbacklist, check if there is a message for its languages
text = p.fallbackloop(args, langlist[lang], '')
end
if text then
return text
end
if args.default then
return args.default
end
if args.en then
return args.en
end
end
table.insert(fblist, 'default')
table.insert(fblist, 'en')
return fblist
end
end


function p.fallbackloop(args, totest, tested)
function p.fallbackloop(args, fblist)
newlist = fblist
-- iterates through the langlist fallback table
for i, j in pairs(fblist) do
-- totest = tables of languages whose fallbacks need to be examined
-- tested = string with language that have been examined
for i, j in pairs(totest) do
if args[j] and args[j] ~= '' then
return args[j]
end
if langlist[j] then
if langlist[j] then
for k, l in pairs(langlist[j]) do
for k, l in pairs (langlist[j]) do
for m, n in pairs(newlist) do
table.insert(totest, l)
if n == l then
break
end
table.insert(newlist, n)
end
end
end
end
end
tested = tested .. ' ' .. j
end
end
if newlist ~= fblist then
for i, j in pairs(totest) do
return p.fallback(args, newlist)
if not string.find(tested, ' ' .. j) then
else
p.getfallback(args, lang, totest, tested)
return newlist
end
end
end
return nil
end
end


Line 122: Line 110:
end
end
-- gets the most appropriate language
-- gets the most appropriate language
text = p.getfallback(args)
local fblist = p.fblist(args,lang)
for i, j in fblist do
if text == '~' then return '' end -- ~ indicates that no message should be shown in this language
if args[j] and args[j] == '~' then -- '~' means, display nothing for this language
return text
return ''
elseif args[j] then
return args[j]
end
end
end
end



Revision as of 11:33, 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 = {}
	if langlist[lang] then 
		flist = p.fallbackloop(args, langlist[lang])
	end
	table.insert(fblist, 'default')
	table.insert(fblist, 'en')
	return fblist
end

function p.fallbackloop(args, fblist) 
	newlist = fblist
	for i, j in pairs(fblist) do
		if langlist[j] then 
			for k, l in pairs (langlist[j]) do
				for m, n in pairs(newlist) do
					if n == l then
						break
					end
					table.insert(newlist, n)
				end
			end
		end
	end
	if newlist ~= fblist then
		return p.fallback(args, newlist)
	else 
		return newlist
	end
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 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