Difference between revisions of "Module:I18n"
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" | + | 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 | 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) |
− | + | elseif type(i18n) == "table" then | |
-- merge to global i18n | -- merge to global i18n | ||
− | + | tableMerge(i18n, res.i18n, true) | |
end | end | ||
end | end |
Latest revision as of 09: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