Difference between revisions of "Module:Languages"

From Team Fortress Wiki
Jump to: navigation, search
m
(might actually work now?)
Line 1: Line 1:
 
local p = {}
 
local p = {}
local languages = {'ar', 'cs', 'da', 'de', 'es', 'fi', 'fr', 'hu', 'it', 'ja', 'ko', 'nl', 'no', 'pl', 'pt', 'pt-br', 'ro', 'ru', 'sv', 'tr', 'zh-hans', 'zh-hant'}
+
 
 +
local languages = {}
 +
languages['en'] = 'Languages:'
 +
languages['ar'] = ':اللغة'
 +
languages['cs'] = 'Jazyk:'
 +
languages['da'] = 'Sprog:'
 +
languages['de'] = 'Sprache:'
 +
languages['es'] = 'Idioma:'
 +
languages['fi'] = 'Kieli:'
 +
languages['fr'] = 'Langue:'
 +
languages['hu'] = 'Nyelv:'
 +
languages['it'] = 'Lingua:'
 +
languages['ja'] = '言語:'
 +
languages['ko'] = '언어:'
 +
languages['nl'] = 'Taal:'
 +
languages['no'] = 'Språk:'
 +
languages['pl'] = 'Język:'
 +
languages['pt'] = 'Língua:'
 +
languages['pt-br'] = 'Idioma:'
 +
languages['ro'] = 'Limba:'
 +
languages['ru'] = 'Язык:'
 +
languages['sv'] = 'Språk:'
 +
languages['tr'] = 'Dil:'
 +
languages['zh-hans'] = '语言:'
 +
languages['zh-hant'] = '語言:'
  
 
page = tostring(mw.title.getCurrentTitle())
 
page = tostring(mw.title.getCurrentTitle())
 +
-- Allow first parameter to overwrite page location
 +
if frame.args[1] ~= nil then
 +
page = frame.args[1]
 +
end
  
 
function p.getLanguage()
 
function p.getLanguage()
Line 16: Line 44:
 
end
 
end
 
return 'en'
 
return 'en'
 +
end
 +
 +
function p.getEnglishPage()
 +
-- ^.*/ matches from the start of string (^) as many characters as it can (.*) and then a forward slash (/).
 +
-- It will thus match the entirety of the title, except the final part.
 +
s, e = string.match(page, '^.*/')
 +
-- I reduce e by 1 to exclude the final / from the return value.
 +
return string.sub(s, e-1)
 
end
 
end
  
 
function p.languages(frame)
 
function p.languages(frame)
local wikitext = ''
+
-- Table header & overall formatting
for _, language in ipairs(languages) do
+
local wikitext = '{| class="plainlinks lang-box" style="border:1px solid #aaa; border-collapse:collapse; clear:both; font-size:90%; margin:1em 0 0.25em; width:100%; background:#f9f9f9;" summary="Display this page in a different language."\n'
if mw.title.new(page .. '/' .. tostring(language)).exists then
+
wikitext = wikitext .. '| class="lang-title" style="width:3em; padding:0.5em 1em; background:#fd9;" | '
wikitext = wikitext .. '<span style="font-weight:bold;">&nbsp;·</span>&#32;<span lang="' .. tostring(language) .. '">[[' .. page .. '/' .. language .. '|' .. mw.language.fetchLanguageName(language) .. ']]</span>'
+
-- Adding the link to the language translation page (in the page's current language)
 +
wikitext = wikitext .. "'''[[Help:Language translation|" .. languages[p.getLanguage()] .. "]]'''\n"
 +
 +
-- Now we build the list of languages. First we need to know the base page name.
 +
local englishPage = p.getEnglishPage()
 +
for language, _ in pairs(languages) do
 +
-- English pages don't have a '/en' on them, I handle that here.
 +
local title = englishPage
 +
if language ~= 'en' then
 +
title = title .. '/' .. language
 +
end
 +
 +
-- If the page exists
 +
if mw.title.new(title).exists then
 +
-- Some styling and formatting
 +
wikitext = wikitext .. '| <span style="font-weight:bold;">&nbsp;·</span>&#32;<span lang="' .. language .. '">'
 +
-- A link to the page, with the link text being the translated name of that language.
 +
wikitext = wikitext .. '[[' .. title .. '|' .. mw.language.fetchLanguageName(language) .. ']]'
 
else
 
else
wikitext = wikitext .. "<span></span>"
+
-- If there's no page in this language, make a blank span.
 +
wikitext = wikitext .. '<span>'
 
end
 
end
 +
wikitext = wikitext .. '</span>\n'
 
end
 
end
 +
wikitext = wikitext .. '|}'
 
return wikitext
 
return wikitext
 
end
 
end
  
 
return p
 
return p

Revision as of 14:07, 11 February 2016

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

local p = {}

local languages = {}
languages['en'] = 'Languages:'
languages['ar'] = ':اللغة'
languages['cs'] = 'Jazyk:'
languages['da'] = 'Sprog:'
languages['de'] = 'Sprache:'
languages['es'] = 'Idioma:'
languages['fi'] = 'Kieli:'
languages['fr'] = 'Langue:'
languages['hu'] = 'Nyelv:'
languages['it'] = 'Lingua:'
languages['ja'] = '言語:'
languages['ko'] = '언어:'
languages['nl'] = 'Taal:'
languages['no'] = 'Språk:'
languages['pl'] = 'Język:'
languages['pt'] = 'Língua:'
languages['pt-br'] = 'Idioma:'
languages['ro'] = 'Limba:'
languages['ru'] = 'Язык:'
languages['sv'] = 'Språk:'
languages['tr'] = 'Dil:'
languages['zh-hans'] = '语言:'
languages['zh-hant'] = '語言:'

page = tostring(mw.title.getCurrentTitle())
-- Allow first parameter to overwrite page location
if frame.args[1] ~= nil then
	page = frame.args[1]
end

function p.getLanguage()
	-- [^/] refers to any character that *isn't* a forward slash.
	-- * means match as many as possible
	-- $ means match the end of the string
	-- Togther, this matches as many non-/ characters as possible until the end of the string. In other words, the last part of the page.
	local lastPart = string.match(page, '[^/]*$')
	for _, language in pairs(languages) do
		if language == lastPart then
			return language
		end
	end
	return 'en'
end

function p.getEnglishPage()
	-- ^.*/ matches from the start of string (^) as many characters as it can (.*) and then a forward slash (/).
	-- It will thus match the entirety of the title, except the final part.
	s, e = string.match(page, '^.*/')
	-- I reduce e by 1 to exclude the final / from the return value.
	return string.sub(s, e-1)
end

function p.languages(frame)
	-- Table header & overall formatting
	local wikitext = '{| class="plainlinks lang-box" style="border:1px solid #aaa; border-collapse:collapse; clear:both; font-size:90%; margin:1em 0 0.25em; width:100%; background:#f9f9f9;" summary="Display this page in a different language."\n'
	wikitext = wikitext .. '| class="lang-title" style="width:3em; padding:0.5em 1em; background:#fd9;" | '
	-- Adding the link to the language translation page (in the page's current language)
	wikitext = wikitext .. "'''[[Help:Language translation|" .. languages[p.getLanguage()] .. "]]'''\n"
	
	-- Now we build the list of languages. First we need to know the base page name.
	local englishPage = p.getEnglishPage()
	for language, _ in pairs(languages) do
		-- English pages don't have a '/en' on them, I handle that here.
		local title = englishPage
		if language ~= 'en' then
			title = title .. '/' .. language
		end
		
		-- If the page exists
		if mw.title.new(title).exists then
			-- Some styling and formatting
			wikitext = wikitext .. '| <span style="font-weight:bold;">&nbsp;·</span>&#32;<span lang="' .. language .. '">'
			-- A link to the page, with the link text being the translated name of that language.
			wikitext = wikitext .. '[[' .. title .. '|' .. mw.language.fetchLanguageName(language) .. ']]'
		else
			-- If there's no page in this language, make a blank span.
			wikitext = wikitext .. '<span>'
		end
		wikitext = wikitext .. '</span>\n'
	end
	wikitext = wikitext .. '|}'
	return wikitext
end

return p