Modul:I18n: Forskjell mellom sideversjoner
Hopp til navigering
Hopp til søk
+tableMergeNotOverwrite |
Prune code duplication |
||
| Linje 3: | Linje 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" and type(t1[k]) == "table" then | if type(v) == "table" and type(t1[k]) == "table" then | ||
-- since type(t1[k]) == type(v) == "table", so t1[k] and v is true | -- since type(t1[k]) == type(v) == "table", so t1[k] and v is true | ||
tableMerge(t1[k], v) -- t2[k] == v | tableMerge(t1[k], v, overwrite) -- t2[k] == v | ||
else | else | ||
if overwrite or t1[k] == nil then t1[k] = v end | |||
if t1[k] == nil then t1[k] = v end | |||
end | end | ||
end | end | ||
| Linje 31: | Linje 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 | else | ||
-- merge to global i18n | -- merge to global i18n | ||
if type(i18n) == "table" then tableMerge(i18n, res.i18n) end | if type(i18n) == "table" then tableMerge(i18n, res.i18n, true) end | ||
end | end | ||
end | end | ||
Sideversjonen fra 10. okt. 2017 kl. 02:32
Dokumentasjon for denne modulen kan opprettes på Modul:I18n/dok
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)
else
-- merge to global i18n
if type(i18n) == "table" then tableMerge(i18n, res.i18n, true) end
end
end
end
function p.loadI18nFrame(frame, i18n_arg)
p.loadI18n(frame:getTitle().."/i18n", i18n_arg)
end
return p