Feed The Beast Wiki
Advertisement

Documentation for this module may be created at Module:Language/doc

local langNames = require([[Module:Language/Names]])
local code = function(title)
	local subPage = (title or mw.title.getCurrentTitle()).subpageText:lower()
	if langNames[subPage] then
		return subPage
	end
end
local pageSuffix = function()
	local langCode = code()
	if langCode then
		return '/' .. langCode
	end
	return ''
end

local p = {}

-- See {{L}}
p.link = function(f)
	local args = f or {}
	if f == mw.getCurrentFrame() then
		args = f.args or f:getParent().args
	end

	-- Get language suffix for links
	if not args[1] or args[1]:lower() == 't' then
		return pageSuffix()
	end

	local page = args[1] .. pageSuffix()
	-- Get page name with suffix
	if args.dest then
		return page
	end
	-- Get page link with suffix and specified text
	return '[[' .. page .. '|' .. ( args.o or args[2] or args[1] ) .. ']]'
end

-- See {{Language}}
p.name = function(f)
	local args = f or {}
	if f == mw.getCurrentFrame() then
		args = f.args or f:getParent().args
	end
	
	local langCode = code(args[1] and mw.title.new(args[1])) or 'en'
	
	-- Get language code for specified title or current page
	if args.code then
		return langCode
	end
	
	local langName = langNames[langCode]
	-- Get language name in English if the 2nd arg or 'en' arg is set
	if (args[2] and args[2] ~= '') or (args.en and args.en ~= '') then
		return langName[1]
	end
	-- Get language name in that language (autonym)
	return langName[2]
end

-- See {{ML}}
p.modlink = function(f)
	local args = f or {}
	if f == mw.getCurrentFrame() then
		args = f.args or f:getParent().args
	end

	local modname = require([[Module:Mods]]).getData(args[2]).localized

	if not modname then
		return 'No mod found'
	end

	local disambiguated = string.format("%s (%s)", args[1], modname)

	return p.link{disambiguated, args[1]}
end

p.code = function(f)
	local args = f or {}
	if f == mw.getCurrentFrame() then
		args = f.args or f:getParent().args
	end

	-- 'de' and 'Main Page/de' will be correctly processed regardless of the arg name
	-- These aliases are mainly to keep a standard
	local selected = args.code or args.title

	local code = code(selected and mw.title.new(selected) or mw.title.getCurrentTitle())

	if not code then
		return args.default or ''
	end

	return code
end

return p
Advertisement