模块:I18n

    来自中国珂学院
    wp>Jimmy Xu2018年12月4日 (二) 22:42的版本 (已保护“模块:I18n”:高风险模板([编辑=仅管理员](无限期)[移动=仅管理员](无限期)))
    (差异) ←上一版本 | 最后版本 (差异) | 下一版本→ (差异)

    可在模块:I18n/doc创建此模块的帮助文档

    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