{{#invoke:I18n|function_name}}



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 are tables
			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 success, res = pcall(require, name)
	if success then
		if type(res) == "table" and type(res.i18n) == "table" 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
end

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

return p