Module:Fallback: Difference between revisions
Jump to navigation
Jump to search
(Created page with "-- <nowiki> local p = {} local langlist = require('Dev:Fallbacklist') 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 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 conven...") |
No edit summary |
||
Line 1: | Line 1: | ||
-- < | --[[ | ||
__ __ _ _ _____ _ _ _ _ | |||
| \/ | ___ __| |_ _| | ___ _| ___|_ _| | | |__ __ _ ___| | __ | |||
| |\/| |/ _ \ / _` | | | | |/ _ (_) |_ / _` | | | '_ \ / _` |/ __| |/ / | |||
| | | | (_) | (_| | |_| | | __/_| _| (_| | | | |_) | (_| | (__| < | |||
|_| |_|\___/ \__,_|\__,_|_|\___(_)_| \__,_|_|_|_.__/ \__,_|\___|_|\_\ | |||
Authors and maintainers: | |||
* User:Zolo - original version | |||
* User:Jarekt | |||
]] | |||
local p = {} | local p = {} | ||
local | --[[ | ||
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 | function p.fblist(lang) -- list the full fallback chain from a language to en | ||
local fbtable = p.fallbackloop{ lang:lower() } | local fbtable = p.fallbackloop{lang:lower()} | ||
table.insert(fbtable, 'default') | table.insert(fbtable, 'default') | ||
table.insert(fbtable, 'en') | table.insert(fbtable, 'en') | ||
Line 11: | Line 66: | ||
end | end | ||
function _inArray(x, t) | local function _inArray(x, t) | ||
for i, v in ipairs(t) do | for i, v in ipairs(t) do | ||
if v == x then return i end | if v == x then return i end | ||
Line 18: | Line 73: | ||
end | end | ||
function p.fallbackloop(fbtable) | function p.fallbackloop(fbtable) --list of fallback languages in string format (more convenient than tables) | ||
local langlist = require('Module:Fallbacklist') | |||
local changes = false | local changes = false | ||
for i, j in ipairs(fbtable) do | for i, j in ipairs(fbtable) do | ||
Line 35: | Line 91: | ||
end | end | ||
return fbtable | return fbtable | ||
end | end | ||
return p | return p |
Latest revision as of 16:17, 9 August 2023
Documentation for this module may be created at Module:Fallback/doc
--[[
__ __ _ _ _____ _ _ _ _
| \/ | ___ __| |_ _| | ___ _| ___|_ _| | | |__ __ _ ___| | __
| |\/| |/ _ \ / _` | | | | |/ _ (_) |_ / _` | | | '_ \ / _` |/ __| |/ /
| | | | (_) | (_| | |_| | | __/_| _| (_| | | | |_) | (_| | (__| <
|_| |_|\___/ \__,_|\__,_|_|\___(_)_| \__,_|_|_|_.__/ \__,_|\___|_|\_\
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