Module:Fallback: Difference between revisions
From Neodyland Wiki
More actions
try |
m 187 revisions imported |
||
| (180 intermediate revisions by 5 users not shown) | |||
| Line 1: | Line 1: | ||
--[[ | |||
__ __ _ _ _____ _ _ _ _ | |||
| \/ | ___ __| |_ _| | ___ _| ___|_ _| | | |__ __ _ ___| | __ | |||
| |\/| |/ _ \ / _` | | | | |/ _ (_) |_ / _` | | | '_ \ / _` |/ __| |/ / | |||
| | | | (_) | (_| | |_| | | __/_| _| (_| | | | |_) | (_| | (__| < | |||
|_| |_|\___/ \__,_|\__,_|_|\___(_)_| \__,_|_|_|_.__/ \__,_|\___|_|\_\ | |||
Authors and maintainers: | |||
* User:Zolo - original version | |||
* User:Jarekt | |||
]] | |||
local p = {} | local p = {} | ||
function | --[[ | ||
if | translatelua | ||
return '' | |||
Allows easy translation or internalization of pages in Lua. | |||
Example Usage from a template: | |||
return | {{#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 | end | ||
return -1 | |||
end | end | ||
function | function p.fallbackloop(fbtable) --list of fallback languages in string format (more convenient than tables) | ||
local langlist = require('Module:Fallbacklist') | |||
for i, j in | local changes = false | ||
for k, l in | 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 | end | ||
end | end | ||
if | if changes then | ||
return | return p.fallbackloop(fbtable) | ||
end | end | ||
return | return fbtable | ||
end | end | ||
return p | return p | ||
Latest revision as of 16:37, 12 August 2026
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