Module:translations: Difference between revisions

From Laenkea
Jump to navigation Jump to search
mNo edit summary
mNo edit summary
Line 56: Line 56:
end
end
for lang, _ in pairs(args) do
for lang, _ in pairs(args) do
out = out .. "[[Category:" .. language.name .. " terms with " .. m_languages.get_by_code(lang).name .. " translations]]"
if type(k) == "string" and type(v) == "string" then
out = out .. "[[Category:" .. language.name .. " terms with " .. m_languages.get_by_code(lang).name .. " translations]]"
end
end
end
return out
return out

Revision as of 23:56, 1 March 2024

Documentation for this module may be created at Module:translations/documentation

local export = {}

local m_languages = require("Module:languages")
local m_links = require("Module:links")

function export.show(frame)
	---PLEASE DELETE THIS SOON
	if frame:getParent().args[2] == nil then return "[[Category:Translations to update]]" end
	
	local function sort_function(a, b)
		return a.name < b.name
	end
	local tag_missing = {"rad", "lfv", "ryn"}
	local translations = {}
	local title
	local args = frame:getParent().args
	local language = m_languages.get_by_code(args[1])
	local title = args[2] or args["title"] or args["t"]
	if title then title = string.gsub(title, "%s+$", "") end
	for k, v in pairs(args) do
		if type(k) == "string" and type(v) == "string" then
			local tr_language = m_languages.get_by_code(k)
			local to_process = v
			local bytext = ""
			-- add links between *asterisks* --
			while #to_process > 0 do
				if mw.ustring.match(to_process, "%*[^%*]+%*") then
					local pre = mw.ustring.match(to_process, "^([^%*]+)%*") or ""
					local translink = mw.ustring.match(to_process, "%*([^%*]+)%*")
					to_process = mw.ustring.sub(to_process, mw.ustring.len(pre) + mw.ustring.len(translink) + 3)
					translink = m_links.full_link{term = translink, language = tr_language, nobold = true}
					bytext = bytext .. pre .. translink
				else
					bytext = bytext .. to_process
					to_process = ""
				end
			end
			table.insert(translations, {name = tr_language.name, display = tr_language.name .. ": " .. bytext})
		end
	end
	if not title then error("the first parameter provided must be a title for the translations box") end
	table.sort(translations, sort_function)
	local out = '<div class="mw-collapsible mw-collapsed" data-expandtext="{{int:show}}" data-collapsetext="{{int:hide}}" style="padding:0.2em 0.6em 0.2em 0.6em; border-right:1px solid #BEBEBE; border-bottom:1px dotted black; background:#EDEDED">'
	out = out .. "'''" .. title .. "'''"
	out = out .. '\n<div class="z-index:-1; toccolours mw-collapsible-content" style="border:0;">'
	out = out .. '\n{| border="0" width="100%" class="translations"'
	out = out .. '\n|-'
	out = out .. '\n| bgcolor="beige" valign="top" width="48%" |'
	for _, n in ipairs(translations) do out = out .. '\n* ' .. n.display end
	out = out .. '\n|}'
	out = out .. '\n</div></div>[[Category:' .. language.name .. ' terms with translations]]'
	for _, lang in ipairs(tag_missing) do
		if lang ~= language.code and args[lang] == nil then
			out = out .. "[[Category:" .. language.name .. " terms needing " .. m_languages.get_by_code(lang).name .. " translations]]"
		end
	end
	for lang, _ in pairs(args) do
		if type(k) == "string" and type(v) == "string" then
			out = out .. "[[Category:" .. language.name .. " terms with " .. m_languages.get_by_code(lang).name .. " translations]]"
		end
	end
	return out
end

return export