Jump to content

Template:Fallback: Difference between revisions

From Meta, a Wikimedia project coordination wiki
Content deleted Content added
Zolo (talk | contribs)
No edit summary
Zolo (talk | contribs)
move langlist to Module:Fallbacklist, per talk
Line 1: Line 1:
local p = {}
local p = {}

local langlist = {
local langlist = require('Module:Fallbacklist')
['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(lang) -- list the full fallback chain from a language to en
function p.fblist(lang) -- list the full fallback chain from a language to en
Line 129: Line 66:
args.lang = frame:preprocess( "{{int:lang}}" )
args.lang = frame:preprocess( "{{int:lang}}" )
end
end
local page = p.fallbackpage('Template:' .. args.base, args.lang)
if not args.namespace then -- if the namespace is not indicated, look in the template namespace (legacy)
args.namespace = 'Template'
end
local page = p.fallbackpage(args.namespace .. ':' .. args.base, args.lang)
if not page then return "no fallback page found for autotranslate" end
if not page then return "no fallback page found for autotranslate" end
return frame:expandTemplate{ title = page, args = args }
return frame:expandTemplate{ title = page, args = args }

Revision as of 13:55, 22 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 = require('Module:Fallbacklist')

function p.fblist(lang) -- list the full fallback chain from a language to en
	local fbstr = p.fallbackloop(' ' .. lang) 
	fbstr = fbstr .. ' ' .. 'default'
	fbstr = fbstr .. ' ' .. 'en'
	return mw.text.split(fbstr, " ")
end

function p.fallbackloop(init)  --list of fallback languages in string format (more convenient than tables)
	local new = init
	for i, j in pairs(mw.text.split(init, " ")) do
		if langlist[j] then
			for k, l in pairs(langlist[j]) do
				if not string.find(new, ' ' .. l, 1, true) then
					new = new .. ' ' .. l
				end
			end
		end
	end
	if new ~= init then
		return p.fallbackloop(new)
	end
	return new
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)
	local lang = args.lang
	if not lang or lang == '' then
		lang = frame:preprocess( "{{int:lang}}" )
	end
	-- get lhe list of accpetable language (lang + those in lang's fallback chain) and check their content
	local parselist = p.fblist(lang)
	for j, k in pairs(parselist) do 
		if args[k] == '~' then return '' end
		if args[k] and args[k] ~= '' then return args[k] end
	end
end

function p.fallbackpage(base, lang)
	local languages = p.fblist(lang)
	for i, j in pairs(languages) do
		if p.pageexist( base .. '/' .. j) then 
			return base .. '/' .. j 
		end
	end
end

function p.pageexist(page) -- isolated function to deal with old-style #ifexist parser without Lua equivalent 
	local frame = mw.getCurrentFrame()
	local exist = frame:callParserFunction{name = '#ifexist', args= {[1] = page, [2] = "true"} }
	if exist == "true" then return true else return false end
end

function p.autotranslate(frame) -- logic for template:Autotranslate
	local args = mw.getCurrentFrame():getParent().args
	if not args.lang or args.lang == '' then
		args.lang = frame:preprocess( "{{int:lang}}" )
	end
	local page = p.fallbackpage('Template:' .. args.base, args.lang)
	if not page then return "no fallback page found for autotranslate" end
	return frame:expandTemplate{ title = page, args = args }
end

return p