Leaguepedia | League of Legends Esports Wiki
[checked revision][checked revision]
(disable for now (via Mediawiker ST3))
(MyVariables was patched!! (via Mediawiker ST3))
Line 35: Line 35:
 
end
 
end
 
output[#output+1] = ('|#default=%s')
 
output[#output+1] = ('|#default=%s')
return ('{{#switch:en%s}}'):format(table.concat(output, ''))
+
return ('{{#switch:{{USERLANGUAGECODE}}%s}}'):format(table.concat(output, ''))
 
end
 
end
   

Revision as of 05:41, 3 May 2019

Edit the documentation or categories for this module.


local DEFAULTLANG = 'en'

local p = {}
local h = {}

function p.initFromFile(name)
	-- generally the i18n will be located at a subpage of the parent module
	local tbl = require(('Module:%s/i18n'):format(name))
	p.init(tbl)
end

function p.initGlobalFromFile(name)
	-- generally the i18n will be located at a subpage of the parent module
	local tbl = require(('Module:%s/i18n'):format(name))
	p.initGlobal(tbl)
end

function p.initGlobal(tbl)
	-- initialize global table 'i18n' from file
	I18N_INTERNAL_TABLE = p.init(tbl)
end

function p.init(tbl)
	tbl.this = {}
	for k, v in pairs(tbl[DEFAULTLANG]) do
		tbl.this[k] = h.concatTranslations(tbl, k, v)
	end
	return tbl
end

function h.concatTranslations(tbl, k, v)
	local output = {}
	for lang, langTable in pairs(tbl) do
		output[#output+1] = ('|%s=%s'):format(lang, langTable[k] or v)
	end
	output[#output+1] = ('|#default=%s')
	return ('{{#switch:{{USERLANGUAGECODE}}%s}}'):format(table.concat(output, ''))
end

function p.print(key, tbl, lang)
	-- return the localized value
	-- optionally can specify an i18n table (this should be done for any util modules that print things directly)
	-- also optionally can specify language but you probably shouldn't do that ever because p.defaultLang exists
	if not key then return nil end
	if not tbl then tbl = I18N_INTERNAL_TABLE end
	local frame = mw.getCurrentFrame()
	if tbl.this[key] then
		return frame:preprocess(tbl.this[key]:format(tbl[DEFAULTLANG][key]))
	else
		return nil
	end
end

function p.printForInclusion(key, tbl, lang)
	-- same as print but doesn't preprocess the output, so it will be displayed in raw wikitext on the page
	-- then when the page is transcluded to raw text via a python script the switch will be included properly
	if not key then return nil end
	if not tbl then tbl = I18N_INTERNAL_TABLE end
	local frame = mw.getCurrentFrame()
	if tbl.this[key] then
		return tbl.this[key]:format(tbl[DEFAULTLANG][key])
	else
		return nil
	end
end

function p.printWithFallback(key, tbl, lang)
	local frame = mw.getCurrentFrame()
	if not key then return nil end
	if not tbl then tbl = I18N_INTERNAL_TABLE end
	if tbl.this[key] then
		return frame:preprocess(tbl.this[key]:format(tbl[DEFAULTLANG][key] or key))
	else
		return key
	end
end

function p.default(key, tbl)
	-- in the event we're storing a string in cargo it should still go through i18n but we'd just force default language
	return p.print(key, tbl, DEFAULTLANG)
end

function p.defaultWithFallback(key, tbl)
	return p.printWithFallback(key, tbl, DEFAULTLANG)
end

function p.exists()
	if I18N_INTERNAL_TABLE then return true end
end

return p