Jump to content
Toggle menu
  • 8 articles
  • 75 files
  • 7 users
  • 37.8K edits
Neodyland Wiki
Toggle preferences menu
Toggle personal menu
Not logged in
Your IP address will be publicly visible if you make any edits.

Module:Fallback: Difference between revisions

From Neodyland Wiki
fix
m 187 revisions imported
 
(181 intermediate revisions by 5 users not shown)
Line 1: Line 1:
--[[
  __  __          _      _        _____    _ _ _                _
|  \/  | ___  __| |_  _| | ___ _|  ___|_ _| | | |__  __ _  ___| | __
| |\/| |/ _ \ / _` | | | | |/ _ (_) |_ / _` | | | '_ \ / _` |/ __| |/ /
| |  | | (_) | (_| | |_| | |  __/_|  _| (_| | | | |_) | (_| | (__|  <
|_|  |_|\___/ \__,_|\__,_|_|\___(_)_|  \__,_|_|_|_.__/ \__,_|\___|_|\_\
Authors and maintainers:
* User:Zolo  - original version
* User:Jarekt
]]
local p = {}
local p = {}
local langlist = {
af = {'nl'},
als = {'de'},
arz = {'ar'},
bar = {'de'},
bexold = {'betarask'},
br = {'fr'},
ckb = {'fa'},
co = {'fr'},
crhcyrl = {'crh'},
crhlatn = {'crh'},
csb = {'pl'},
deat = {'de'},
dech = {'de'},
deformal = {'de'},
engb = {'en'},
frp = {'fr'},
frr = {'de'},
fy = {'nl'},
glk = {'fa'},
hifdeva = {'hif'},
hilatn = {'hif'},
ht = {'fr'},
ikecans = {'ik'},
kkarab = {'kk'},
kkcn = {'kk'},
kkcyrl = {'kk'},
kkkz = {'kk'},
kklatn = {'kk'},
kktr = {'kk'},
ksh = {'de'},
kuarab = {'ku'},
kulatn = {'ku'},
li = {'nl'},
mg = {'fr'},
mzn = {'fa'},
nds = {'ndsnl', 'de'},
ndsnl = {'nds', 'nl'},
nlinformal = {'nl'},
pdt = {'nds', 'de'},
ptbr = {'pt'},
ruggrek = {'ruq'},
rulatn = {'ruq'},
ruqcyrl = {'ruq'},
srec = {'sr'},
srel = {'sr'},
szl = {'pl'},
tgcyrl = {'tg'},
tglatn = {'tg'},
ttcyrl = {'tt'},
ttlatn = {'tt'},
ty = {'fr'},
vec = {'it'},
vls = {'nl'},
wa = {'fr'},
zea = {'nl'},
zh = {'zhhans'},
zhcn = {'zhhans'},
zhhans = {'zhcn', 'zh'},
zhhant = {'zh'},
zhhk = {'zhhant'},
zhmo = {'zhhant'},
zhmy = {'zhhans'},
zhsg = {'zhhans'},
zhtw = {'zhhant'}
}


function returnarg(arg)
--[[
if arg == '~' then
translatelua
return ''
elseif arg then
Allows easy translation or internalization of pages in Lua.
return arg
else
Example Usage from a template:
return nil
{{#invoke: fallback|translatelua| i18n/oil on canvas|lang={{{lang|}}}}}
Parameters:
  frame.args.1 - name of translation module
frame.args.2 - field name of the structure in Module:[frame.args.1] to use
  frame.args.lang - desired language (often user's native language)
Error Handling:
]]
function p.translatelua(frame)
local lang = mw.text.trim(frame.args.lang)
local page = require('Module:' .. mw.text.trim(frame.args[1])) -- page should only contain a simple of translations
if not lang or lang == '' then
lang = frame:callParserFunction("int", "lang")
end
if frame.args[2] then
page = page[mw.text.trim(frame.args[2])]
end
local langList = mw.language.getFallbacksFor(lang)
table.insert(langList,1,lang)
for _,language in ipairs(langList) do
if page[language] then
return page[language]
end
end
end
end
end


function p.langSwitch(frame)
--[[
local args = frame.args
fblist
for i, j in pairs(args) do
i = mw.ustring.gsub( i, "-", "")
Similar to  mw.language.getFallbacksFor(lang) but uses Commons old fallback chain
Parameters:
  lang - desired language (often user's native language)
Error Handling:
]]
function p.fblist(lang) -- list the full fallback chain from a language to en
local fbtable = p.fallbackloop{lang:lower()}
table.insert(fbtable, 'default')
table.insert(fbtable, 'en')
return fbtable
end
 
local function _inArray(x, t)
for i, v in ipairs(t) do
if v == x then return i end
end
end
if args.lang then
return -1
lang = args.lang
end
else
 
lang = frame:preprocess('{{int:lang}}')
function p.fallbackloop(fbtable) --list of fallback languages in string format (more convenient than tables)
end
local langlist = require('Module:Fallbacklist')
if args[lang] then
local changes = false
return returnarg(args[lang])
for i, j in ipairs(fbtable) do
end
local seq = langlist[j]
if langlist[lang] then
if seq then
tested = {} -- keep track of tested languages to avoid loops
for k, l in ipairs(seq) do
for i, j in pairs(langlist[lang]) do
if _inArray(l, fbtable) == -1 then
if args[j] then
table.insert(fbtable, l)
return returnarg(args[j])
changes = true
end
end
end
end
end
end
end
if args.default then
if changes then
return returnarg(args.default)
return p.fallbackloop(fbtable)
end
end
if args.en then
return fbtable
return returnarg(args.en)
end
end
 
return '[[Category:LangSwitch template without default version]]'
end
return p
return p

Latest revision as of 16:37, 12 August 2026

Module documentation[ view · edit · history · purge ]
This documentation is transcluded from Module:Fallback/doc.

Dependencies

edit
  • Module:Fallbacklist catalogs old fallback chains for each language as it was set up on Commons a decade ago. Lua allows now to access the default MediaWiki fallback chains which are used by most templates.
--[[
  __  __           _       _        _____     _ _ _                _
 |  \/  | ___   __| |_   _| | ___ _|  ___|_ _| | | |__   __ _  ___| | __
 | |\/| |/ _ \ / _` | | | | |/ _ (_) |_ / _` | | | '_ \ / _` |/ __| |/ /
 | |  | | (_) | (_| | |_| | |  __/_|  _| (_| | | | |_) | (_| | (__|   < 
 |_|  |_|\___/ \__,_|\__,_|_|\___(_)_|  \__,_|_|_|_.__/ \__,_|\___|_|\_\
 
 Authors and maintainers:
* User:Zolo   - original version
* User:Jarekt 
]]

local p = {}

--[[
translatelua
 
Allows easy translation or internalization of pages in Lua. 
 
Example Usage from a template:
{{#invoke: fallback|translatelua| i18n/oil on canvas|lang={{{lang|}}}}}
 
Parameters:
  frame.args.1 - name of translation module
frame.args.2 - field name of the structure in Module:[frame.args.1] to use
  frame.args.lang - desired language (often user's native language)
 
 Error Handling:
 
]]
function p.translatelua(frame)
	local lang = mw.text.trim(frame.args.lang)
	local page = require('Module:' .. mw.text.trim(frame.args[1])) -- page should only contain a simple of translations
	if not lang or lang == '' then
		lang = frame:callParserFunction("int", "lang")
	end
	if frame.args[2] then
		page = page[mw.text.trim(frame.args[2])]
	end
	
	local langList = mw.language.getFallbacksFor(lang)
	table.insert(langList,1,lang)
	for _,language in ipairs(langList) do
		if page[language] then
			return page[language]
		end
	end
end

--[[
fblist
 
Similar to  mw.language.getFallbacksFor(lang) but uses Commons old fallback chain 
 
Parameters:
  lang - desired language (often user's native language)
 
 Error Handling:
 
]]
function p.fblist(lang) -- list the full fallback chain from a language to en
	local fbtable = p.fallbackloop{lang:lower()}
	table.insert(fbtable, 'default')
	table.insert(fbtable, 'en')
	return fbtable
end

local function _inArray(x, t)
	for i, v in ipairs(t) do
		if v == x then return i end
	end
	return -1
end

function p.fallbackloop(fbtable) --list of fallback languages in string format (more convenient than tables)
	local langlist = require('Module:Fallbacklist')
	local changes = false
	for i, j in ipairs(fbtable) do
		local seq = langlist[j]
		if seq then
			for k, l in ipairs(seq) do
				if _inArray(l, fbtable) == -1 then
					table.insert(fbtable, l)
					changes = true
				end
			end
		end
	end
	if changes then
		return p.fallbackloop(fbtable)
	end
	return fbtable
end

return p
Cookies help us deliver our services. By using our services, you agree to our use of cookies.