Jump to content

Template:Fallback: Difference between revisions

From Meta, a Wikimedia project coordination wiki
Content deleted Content added
Zolo (talk | contribs)
m
Zolo (talk | contribs)
t
Line 75: Line 75:
function p.fallbackloop(args, str) --list of fallback languages in a string, more convenient than tables
function p.fallbackloop(args, str) --list of fallback languages in a string, more convenient than tables
local newstr = str
local newstr = str
if not str then return error end
for i, j in pairs(mw.text.split(str)) do
t = mw.text.split(str)
if type(t) ~= table then return error end
for i, j in pairs(t) do
if langlist[j] then
if langlist[j] then
for k, l in pairs(langlist[i]) do
for k, l in pairs(langlist[i]) do

Revision as of 13:54, 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) -- creates a list a fallback languages from user's language to en
	local fbstr = p.fallbackloop(args, ' ' .. lang) 
	fbstr = fbstr .. ' ' .. 'default'
	fbstr = fbstr .. ' ' .. 'en'
	return mw.text.split(fbstring)
end

function p.fallbackloop(args, str)  --list of fallback languages in   a string, more convenient than tables
	local newstr = str
	if not str then return error end
	t = mw.text.split(str)
	if type(t) ~= table then return error end
	for i, j in pairs(t) do
		if langlist[j] then
			for k, l in pairs(langlist[i]) do
				if not string.find(newstr, k) then
					newstr = newstr .. ' ' .. k
				end
			end
		end
	end
	if newstr ~= str then
		return p.fallbackloop(args, newstr)
	end
	return newstr
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)
	text = ''
	for i in pairs(fblist) do text = text .. i end
	return text
end

return p