Modul:I18n: Forskjell mellom sideversjoner

Fra wikisida.no
Hopp til navigering Hopp til søk
+tableMergeNotOverwrite
m 25 sideversjoner ble importert
 
(21 mellomliggende versjoner av 8 brukere er ikke vist)
Linje 2: Linje 2:


-- 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
t1[k] = v
if overwrite or t1[k] == nil then t1[k] = v end
end
end
return t1
end
 
local function tableMergeNotOverwrite(t1, t2)
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
tableMergeNotOverwrite(t1[k], v) -- t2[k] == v
else
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
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

Siste sideversjon per 22. apr. 2026 kl. 01:10

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)
		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