Module:I18n

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

local function missinginpage(page, lang) if type(page) == 'string' then page = require(page) end local list = {} for i, j in pairs(page) do		if i ~= 'keys' and (not j[lang]) and not (j.default) and (not j.message) then table.insert(list, i)		end end if #list == 0 then return "No translation missing for " .. lang .. '! '	else return #list .. " translations missing in " .. lang .. ':\n* ' .. table.concat(list, '\n* ') end end function p.pagedoc(frame) local page = mw.title.getCurrentTitle.fullText page = mw.text.split(page, '/')[1] .. '/' .. mw.text.split(page, '/')[2] local lang = frame:preprocess("") return missinginpage(page, lang) end

return p