Difference between revisions of "Module:I18n"

From Eat Every Plant
Jump to navigation Jump to search
m (1 revision)
 
m (1 revision: Pinaceae)
 
(One intermediate revision by the same user not shown)
Line 3: Line 3:
 
-- Credit to http://stackoverflow.com/a/1283608/2644759
 
-- Credit to http://stackoverflow.com/a/1283608/2644759
 
-- cc-by-sa 3.0
 
-- cc-by-sa 3.0
local function tableMerge(t1, t2)
+
local function tableMerge(t1, t2, overwrite)
 
for k,v in pairs(t2) do
 
for k,v in pairs(t2) do
if type(v) == "table" then
+
if type(v) == "table" and type(t1[k]) == "table" then
if type(t1[k] or false) == "table" then
+
-- since type(t1[k]) == type(v) == "table", so t1[k] and v is true
tableMerge(t1[k] or {}, t2[k] or {})
+
tableMerge(t1[k], v, overwrite) -- t2[k] == v
else
 
t1[k] = v
 
end
 
 
else
 
else
t1[k] = v
+
if overwrite or t1[k] == nil then t1[k] = v end
 
end
 
end
 
end
 
end
Line 22: Line 19:
 
if exist and next(res) ~= nil then
 
if exist and next(res) ~= nil then
 
if i18n_arg then
 
if i18n_arg then
tableMerge(i18n_arg, res.i18n)
+
tableMerge(i18n_arg, res.i18n, true)
else
+
elseif type(i18n) == "table" then
 
-- merge to global i18n
 
-- merge to global i18n
if type(i18n) == "table" then tableMerge(i18n, res.i18n) end
+
tableMerge(i18n, res.i18n, true)
 
end
 
end
 
end
 
end

Latest revision as of 10:33, 28 October 2017

local p = {}

-- Credit to http://stackoverflow.com/a/1283608/2644759 -- cc-by-sa 3.0 local function tableMerge(t1, t2, overwrite) for k,v in pairs(t2) do if type(v) == "table" and type(t1[k]) == "table" then -- since type(t1[k]) == type(v) == "table", so t1[k] and v is true tableMerge(t1[k], v, overwrite) -- t2[k] == v else if overwrite or t1[k] == nil then t1[k] = v end end end return t1 end

function p.loadI18n(name, i18n_arg) local exist, res = pcall(require, name) if exist and next(res) ~= nil then if i18n_arg then tableMerge(i18n_arg, res.i18n, true) elseif type(i18n) == "table" then -- merge to global i18n tableMerge(i18n, res.i18n, true) end end end

function p.loadI18nFrame(frame, i18n_arg) p.loadI18n(frame:getTitle().."/i18n", i18n_arg) end

return p