<?xml version="1.0"?>
<feed xmlns="http://www.w3.org/2005/Atom" xml:lang="en">
	<id>https://linguifex.com/w/index.php?action=history&amp;feed=atom&amp;title=Module%3Atranslations</id>
	<title>Module:translations - Revision history</title>
	<link rel="self" type="application/atom+xml" href="https://linguifex.com/w/index.php?action=history&amp;feed=atom&amp;title=Module%3Atranslations"/>
	<link rel="alternate" type="text/html" href="https://linguifex.com/w/index.php?title=Module:translations&amp;action=history"/>
	<updated>2026-04-22T11:24:28Z</updated>
	<subtitle>Revision history for this page on the wiki</subtitle>
	<generator>MediaWiki 1.43.6</generator>
	<entry>
		<id>https://linguifex.com/w/index.php?title=Module:translations&amp;diff=496537&amp;oldid=prev</id>
		<title>Sware: Created page with &quot;local export = {}  local anchors_module = &quot;Module:anchors&quot; local debug_track_module = &quot;Module:debug/track&quot; local languages_module = &quot;Module:languages&quot; local links_module = &quot;Module:links&quot; local pages_module = &quot;Module:pages&quot; local parameters_module = &quot;Module:parameters&quot; local string_utilities_module = &quot;Module:string utilities&quot; local templatestyles_module = &quot;Module:TemplateStyles&quot; local utilities_module = &quot;Module:utilities&quot; local wikimedia_languages_module = &quot;Module:wikimed...&quot;</title>
		<link rel="alternate" type="text/html" href="https://linguifex.com/w/index.php?title=Module:translations&amp;diff=496537&amp;oldid=prev"/>
		<updated>2026-04-21T14:09:31Z</updated>

		<summary type="html">&lt;p&gt;Created page with &amp;quot;local export = {}  local anchors_module = &amp;quot;Module:anchors&amp;quot; local debug_track_module = &amp;quot;Module:debug/track&amp;quot; local languages_module = &amp;quot;Module:languages&amp;quot; local links_module = &amp;quot;Module:links&amp;quot; local pages_module = &amp;quot;Module:pages&amp;quot; local parameters_module = &amp;quot;Module:parameters&amp;quot; local string_utilities_module = &amp;quot;Module:string utilities&amp;quot; local templatestyles_module = &amp;quot;Module:TemplateStyles&amp;quot; local utilities_module = &amp;quot;Module:utilities&amp;quot; local wikimedia_languages_module = &amp;quot;Module:wikimed...&amp;quot;&lt;/p&gt;
&lt;p&gt;&lt;b&gt;New page&lt;/b&gt;&lt;/p&gt;&lt;div&gt;local export = {}&lt;br /&gt;
&lt;br /&gt;
local anchors_module = &amp;quot;Module:anchors&amp;quot;&lt;br /&gt;
local debug_track_module = &amp;quot;Module:debug/track&amp;quot;&lt;br /&gt;
local languages_module = &amp;quot;Module:languages&amp;quot;&lt;br /&gt;
local links_module = &amp;quot;Module:links&amp;quot;&lt;br /&gt;
local pages_module = &amp;quot;Module:pages&amp;quot;&lt;br /&gt;
local parameters_module = &amp;quot;Module:parameters&amp;quot;&lt;br /&gt;
local string_utilities_module = &amp;quot;Module:string utilities&amp;quot;&lt;br /&gt;
local templatestyles_module = &amp;quot;Module:TemplateStyles&amp;quot;&lt;br /&gt;
local utilities_module = &amp;quot;Module:utilities&amp;quot;&lt;br /&gt;
local wikimedia_languages_module = &amp;quot;Module:wikimedia languages&amp;quot;&lt;br /&gt;
&lt;br /&gt;
local concat = table.concat&lt;br /&gt;
local html_create = mw.html.create&lt;br /&gt;
local insert = table.insert&lt;br /&gt;
local load_data = mw.loadData&lt;br /&gt;
local new_title = mw.title.new&lt;br /&gt;
local require = require&lt;br /&gt;
&lt;br /&gt;
--[==[&lt;br /&gt;
Loaders for functions in other modules, which overwrite themselves with the target function when called. This ensures modules are only loaded when needed, retains the speed/convenience of locally-declared pre-loaded functions, and has no overhead after the first call, since the target functions are called directly in any subsequent calls.]==]&lt;br /&gt;
local function decode_uri(...)&lt;br /&gt;
	decode_uri = require(string_utilities_module).decode_uri&lt;br /&gt;
	return decode_uri(...)&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
local function format_categories(...)&lt;br /&gt;
	format_categories = require(utilities_module).format_categories&lt;br /&gt;
	return format_categories(...)&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
local function full_link(...)&lt;br /&gt;
	full_link = require(links_module).full_link&lt;br /&gt;
	return full_link(...)&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
local function get_link_page(...)&lt;br /&gt;
	get_link_page = require(links_module).get_link_page&lt;br /&gt;
	return get_link_page(...)&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
local function get_wikimedia_lang(...)&lt;br /&gt;
	get_wikimedia_lang = require(wikimedia_languages_module).getByCode&lt;br /&gt;
	return get_wikimedia_lang(...)&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
local function language_link(...)&lt;br /&gt;
	language_link = require(links_module).language_link&lt;br /&gt;
	return language_link(...)&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
local function normalize_anchor(...)&lt;br /&gt;
	normalize_anchor = require(anchors_module).normalize_anchor&lt;br /&gt;
	return normalize_anchor(...)&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
local function plain_link(...)&lt;br /&gt;
	plain_link = require(links_module).plain_link&lt;br /&gt;
	return plain_link(...)&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
local function process_params(...)&lt;br /&gt;
	process_params = require(parameters_module).process&lt;br /&gt;
	return process_params(...)&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
local function remove_links(...)&lt;br /&gt;
	remove_links = require(links_module).remove_links&lt;br /&gt;
	return remove_links(...)&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
local function split_on_slashes(...)&lt;br /&gt;
	split_on_slashes = require(links_module).split_on_slashes&lt;br /&gt;
	return split_on_slashes(...)&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
local function templatestyles(...)&lt;br /&gt;
	templatestyles = require(templatestyles_module)&lt;br /&gt;
	return templatestyles(...)&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
local function track(...)&lt;br /&gt;
	track = require(debug_track_module)&lt;br /&gt;
	return track(...)&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
--[==[&lt;br /&gt;
Loaders for objects, which load data (or some other object) into some variable, which can then be accessed as &amp;quot;foo or get_foo()&amp;quot;, where the function get_foo sets the object to &amp;quot;foo&amp;quot; and then returns it. This ensures they are only loaded when needed, and avoids the need to check for the existence of the object each time, since once &amp;quot;foo&amp;quot; has been set, &amp;quot;get_foo&amp;quot; will not be called again.]==]&lt;br /&gt;
	local en&lt;br /&gt;
	local function get_en()&lt;br /&gt;
		en, get_en = require(languages_module).getByCode(&amp;quot;en&amp;quot;), nil&lt;br /&gt;
		return en&lt;br /&gt;
	end&lt;br /&gt;
	&lt;br /&gt;
	local headword_data&lt;br /&gt;
	local function get_headword_data()&lt;br /&gt;
		headword_data, get_headword_data = load_data(&amp;quot;Module:headword/data&amp;quot;), nil&lt;br /&gt;
		return headword_data&lt;br /&gt;
	end&lt;br /&gt;
	&lt;br /&gt;
	local parameters_data&lt;br /&gt;
	local function get_parameters_data()&lt;br /&gt;
		parameters_data, get_parameters_data = load_data(&amp;quot;Module:parameters/data&amp;quot;), nil&lt;br /&gt;
		return parameters_data&lt;br /&gt;
	end&lt;br /&gt;
	&lt;br /&gt;
	local translations_data&lt;br /&gt;
	local function get_translations_data()&lt;br /&gt;
		translations_data, get_translations_data = load_data(&amp;quot;Module:translations/data&amp;quot;), nil&lt;br /&gt;
		return translations_data&lt;br /&gt;
	end&lt;br /&gt;
&lt;br /&gt;
local function is_translation_subpage(pagename)&lt;br /&gt;
	if (headword_data or get_headword_data()).page.namespace ~= &amp;quot;&amp;quot; then&lt;br /&gt;
		return false&lt;br /&gt;
	elseif not pagename then&lt;br /&gt;
		pagename = (headword_data or get_headword_data()).encoded_pagename&lt;br /&gt;
	end&lt;br /&gt;
	return pagename:match(&amp;quot;./translations$&amp;quot;) and true or false&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
local function canonical_pagename()&lt;br /&gt;
	local pagename = (headword_data or get_headword_data()).encoded_pagename&lt;br /&gt;
	return is_translation_subpage(pagename) and pagename:sub(1, -14) or pagename&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
local function interwiki(terminfo, term, lang, langcode)&lt;br /&gt;
	-- No interwiki link if term is empty/missing&lt;br /&gt;
	if not term or #term &amp;lt; 1 then&lt;br /&gt;
		terminfo.interwiki = false&lt;br /&gt;
		return&lt;br /&gt;
	end&lt;br /&gt;
	&lt;br /&gt;
	-- Percent-decode the term.&lt;br /&gt;
	term = decode_uri(terminfo.term, &amp;quot;PATH&amp;quot;)&lt;br /&gt;
	&lt;br /&gt;
	-- Don&amp;#039;t show an interwiki link if it&amp;#039;s an invalid title.&lt;br /&gt;
	if not new_title(term) then&lt;br /&gt;
		terminfo.interwiki = false&lt;br /&gt;
		return&lt;br /&gt;
	end&lt;br /&gt;
	&lt;br /&gt;
	local interwiki_langcode = (translations_data or get_translations_data()).interwiki_langs[langcode]&lt;br /&gt;
	local wmlangs = interwiki_langcode and {get_wikimedia_lang(interwiki_langcode)} or lang:getWikimediaLanguages()&lt;br /&gt;
	&lt;br /&gt;
	-- Don&amp;#039;t show the interwiki link if the language is not recognised by Wikimedia.&lt;br /&gt;
	if #wmlangs == 0 then&lt;br /&gt;
		terminfo.interwiki = false&lt;br /&gt;
		return&lt;br /&gt;
	end&lt;br /&gt;
	&lt;br /&gt;
	local sc = terminfo.sc&lt;br /&gt;
	&lt;br /&gt;
	local target_page = get_link_page(term, lang, sc)&lt;br /&gt;
	local split = split_on_slashes(target_page)&lt;br /&gt;
	if not split[1] then&lt;br /&gt;
		terminfo.interwiki = false&lt;br /&gt;
		return&lt;br /&gt;
	end&lt;br /&gt;
	target_page = split[1]&lt;br /&gt;
	&lt;br /&gt;
	local wmlangcode = wmlangs[1]:getCode()&lt;br /&gt;
	local interwiki_link = language_link{&lt;br /&gt;
		lang = lang,&lt;br /&gt;
		sc = sc,&lt;br /&gt;
		term = wmlangcode .. &amp;quot;:&amp;quot; .. target_page,&lt;br /&gt;
		alt = &amp;quot;(&amp;quot; .. wmlangcode .. &amp;quot;)&amp;quot;,&lt;br /&gt;
		tr = &amp;quot;-&amp;quot;&lt;br /&gt;
	}&lt;br /&gt;
	&lt;br /&gt;
	terminfo.interwiki = tostring(html_create(&amp;quot;span&amp;quot;)&lt;br /&gt;
		:addClass(&amp;quot;tpos&amp;quot;)&lt;br /&gt;
		:wikitext(&amp;quot;&amp;amp;nbsp;&amp;quot; .. interwiki_link)&lt;br /&gt;
	)&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
function export.show_terminfo(terminfo, check)&lt;br /&gt;
	local lang = terminfo.lang&lt;br /&gt;
	local langcode, langname = lang:getCode(), lang:getCanonicalName()&lt;br /&gt;
	-- Translations must be for mainspace languages.&lt;br /&gt;
	if not lang:hasType(&amp;quot;regular&amp;quot;) then&lt;br /&gt;
		error(&amp;quot;Translations must be for attested and approved main-namespace languages.&amp;quot;)&lt;br /&gt;
	else&lt;br /&gt;
		local disallowed = (translations_data or get_translations_data()).disallowed&lt;br /&gt;
		local err_msg = disallowed[langcode]&lt;br /&gt;
		if err_msg then&lt;br /&gt;
			error(&amp;quot;Translations not allowed in &amp;quot; .. langname .. &amp;quot; (&amp;quot; .. langcode .. &amp;quot;). &amp;quot; .. langname .. &amp;quot; translations should &amp;quot; .. err_msg)&lt;br /&gt;
		end&lt;br /&gt;
		local fullcode = lang:getFullCode()&lt;br /&gt;
		if fullcode ~= langcode then&lt;br /&gt;
			err_msg = disallowed[fullcode]&lt;br /&gt;
			if err_msg then&lt;br /&gt;
				langname = lang:getFullName()&lt;br /&gt;
				error(&amp;quot;Translations not allowed in &amp;quot; .. langname .. &amp;quot; (&amp;quot; .. fullcode .. &amp;quot;). &amp;quot; .. langname .. &amp;quot; translations should &amp;quot; .. err_msg)&lt;br /&gt;
			end&lt;br /&gt;
		end&lt;br /&gt;
	end&lt;br /&gt;
	&lt;br /&gt;
	if langcode == &amp;quot;en&amp;quot; then&lt;br /&gt;
		if terminfo.interwiki then&lt;br /&gt;
			error(&amp;quot;Interwiki translations not allowed for English; they should always link to a different Wiktionary&amp;quot;)&lt;br /&gt;
		end&lt;br /&gt;
		local current_L2 = require(pages_module).get_current_L2()&lt;br /&gt;
		if current_L2 ~= &amp;quot;Translingual&amp;quot; and mw.title.getCurrentTitle().nsText ~= &amp;quot;Wiktionary&amp;quot; then&lt;br /&gt;
			if current_L2 then&lt;br /&gt;
				error(&amp;quot;English translations only allowed in Translingual section, not in &amp;quot; .. current_L2)&lt;br /&gt;
			else&lt;br /&gt;
				error(&amp;quot;English translations only allowed in Translingual section, not outside of any L2&amp;quot;)&lt;br /&gt;
			end&lt;br /&gt;
		end&lt;br /&gt;
	end&lt;br /&gt;
&lt;br /&gt;
	local term = terminfo.term&lt;br /&gt;
	&lt;br /&gt;
	-- Check if there is a term. Don&amp;#039;t show the interwiki link if there is nothing to link to.&lt;br /&gt;
	if not term then&lt;br /&gt;
		-- Track entries that don&amp;#039;t provide a term.&lt;br /&gt;
		-- FIXME: This should be a category.&lt;br /&gt;
		track(&amp;quot;translations/no term&amp;quot;)&lt;br /&gt;
		track(&amp;quot;translations/no term/&amp;quot; .. langcode)&lt;br /&gt;
	end&lt;br /&gt;
	if terminfo.interwiki then&lt;br /&gt;
		interwiki(terminfo, term, lang, langcode)&lt;br /&gt;
	end&lt;br /&gt;
&lt;br /&gt;
	langcode = lang:getFullCode()&lt;br /&gt;
	&lt;br /&gt;
	if (translations_data or get_translations_data()).need_super[langcode] then&lt;br /&gt;
		local tr = terminfo.tr&lt;br /&gt;
		if tr ~= nil then&lt;br /&gt;
			terminfo.tr = tr:gsub(&amp;quot;%d[%d%*%-]*%f[^%d%*]&amp;quot;, &amp;quot;&amp;lt;sup&amp;gt;%0&amp;lt;/sup&amp;gt;&amp;quot;)&lt;br /&gt;
		end&lt;br /&gt;
	end&lt;br /&gt;
&lt;br /&gt;
	terminfo.show_qualifiers = true&lt;br /&gt;
	local link = full_link(terminfo, &amp;quot;translation&amp;quot;)&lt;br /&gt;
	local canonical_name = lang:getCanonicalName()&lt;br /&gt;
	local full_name = lang:getFullName()&lt;br /&gt;
	local categories = {&amp;quot;Terms with &amp;quot; .. canonical_name .. &amp;quot; translations&amp;quot;}&lt;br /&gt;
	if canonical_name ~= full_name then&lt;br /&gt;
		insert(categories, &amp;quot;Terms with &amp;quot; .. full_name .. &amp;quot; translations&amp;quot;)&lt;br /&gt;
	end&lt;br /&gt;
&lt;br /&gt;
	if check then&lt;br /&gt;
		link = tostring(html_create(&amp;quot;span&amp;quot;)&lt;br /&gt;
			:addClass(&amp;quot;ttbc&amp;quot;)&lt;br /&gt;
			:tag(&amp;quot;sup&amp;quot;)&lt;br /&gt;
				:addClass(&amp;quot;ttbc&amp;quot;)&lt;br /&gt;
				:wikitext(&amp;quot;(please [[WT:Translations#Translations to be checked|verify]])&amp;quot;)&lt;br /&gt;
				:done()&lt;br /&gt;
			:wikitext(&amp;quot; &amp;quot; .. link)&lt;br /&gt;
		)&lt;br /&gt;
		insert(categories, &amp;quot;Requests for review of &amp;quot; .. langname .. &amp;quot; translations&amp;quot;)&lt;br /&gt;
	end&lt;br /&gt;
	&lt;br /&gt;
	return link .. format_categories(categories, en or get_en(), nil, canonical_pagename())&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
-- Implements {{t}}, {{t+}}, {{t-check}} and {{t+check}}.&lt;br /&gt;
function export.show(frame)&lt;br /&gt;
	local args = process_params(frame:getParent().args, (parameters_data or get_parameters_data())[&amp;quot;translation&amp;quot;])&lt;br /&gt;
	local check = frame.args.check&lt;br /&gt;
	return export.show_terminfo({&lt;br /&gt;
		lang = args[1],&lt;br /&gt;
		sc = args.sc,&lt;br /&gt;
		track_sc = true,&lt;br /&gt;
		term = args[2],&lt;br /&gt;
		alt = args.alt,&lt;br /&gt;
		id = args.id,&lt;br /&gt;
		genders = args[3],&lt;br /&gt;
		tr = args.tr,&lt;br /&gt;
		ts = args.ts,&lt;br /&gt;
		lit = args.lit,&lt;br /&gt;
		q = args.q,&lt;br /&gt;
		qq = args.qq,&lt;br /&gt;
		l = args.l,&lt;br /&gt;
		ll = args.ll,&lt;br /&gt;
		refs = args.ref,&lt;br /&gt;
		interwiki = frame.args.interwiki,&lt;br /&gt;
	}, check and check ~= &amp;quot;&amp;quot;)&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
local function add_id(div, id)&lt;br /&gt;
	return id and div:attr(&amp;quot;id&amp;quot;, normalize_anchor(&amp;quot;Translations-&amp;quot; .. id)) or div&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
-- Implements {{trans-top}} and part of {{trans-top-also}}.&lt;br /&gt;
local function top(args, title, id, navhead)&lt;br /&gt;
	local column_width = (args[&amp;quot;column-width&amp;quot;] == &amp;quot;wide&amp;quot; or args[&amp;quot;column-width&amp;quot;] == &amp;quot;narrow&amp;quot;) and &amp;quot;-&amp;quot; .. args[&amp;quot;column-width&amp;quot;] or &amp;quot;&amp;quot;&lt;br /&gt;
	&lt;br /&gt;
	local div = html_create(&amp;quot;div&amp;quot;)&lt;br /&gt;
		:addClass(&amp;quot;NavFrame&amp;quot;)&lt;br /&gt;
		:node(navhead)&lt;br /&gt;
		:tag(&amp;quot;div&amp;quot;)&lt;br /&gt;
			:addClass(&amp;quot;NavContent&amp;quot;)&lt;br /&gt;
			:tag(&amp;quot;table&amp;quot;)&lt;br /&gt;
				:addClass(&amp;quot;translations&amp;quot;)&lt;br /&gt;
				:attr(&amp;quot;role&amp;quot;, &amp;quot;presentation&amp;quot;)&lt;br /&gt;
				:attr(&amp;quot;data-gloss&amp;quot;, title or &amp;quot;&amp;quot;)&lt;br /&gt;
				:tag(&amp;quot;tr&amp;quot;)&lt;br /&gt;
					:tag(&amp;quot;td&amp;quot;)&lt;br /&gt;
						:addClass(&amp;quot;translations-cell&amp;quot;)&lt;br /&gt;
						:addClass(&amp;quot;multicolumn-list&amp;quot; .. column_width)&lt;br /&gt;
						:attr(&amp;quot;colspan&amp;quot;, &amp;quot;3&amp;quot;)&lt;br /&gt;
		:allDone()&lt;br /&gt;
	div = add_id(div, id)&lt;br /&gt;
&lt;br /&gt;
	local categories = {}&lt;br /&gt;
&lt;br /&gt;
	if not title then&lt;br /&gt;
		insert(categories, &amp;quot;Translation table header lacks gloss&amp;quot;)&lt;br /&gt;
	end&lt;br /&gt;
&lt;br /&gt;
	local pagename = canonical_pagename()&lt;br /&gt;
	if is_translation_subpage() then&lt;br /&gt;
		insert(categories, &amp;quot;Translation subpages&amp;quot;)&lt;br /&gt;
	end&lt;br /&gt;
&lt;br /&gt;
	return (tostring(div):gsub(&amp;quot;&amp;lt;/td&amp;gt;&amp;lt;/tr&amp;gt;&amp;lt;/table&amp;gt;&amp;lt;/div&amp;gt;&amp;lt;/div&amp;gt;$&amp;quot;, &amp;quot;&amp;quot;)) ..&lt;br /&gt;
		(#categories &amp;gt; 0 and format_categories(categories, en or get_en(), nil, pagename) or &amp;quot;&amp;quot;) ..&lt;br /&gt;
		-- Category to trigger [[MediaWiki:Gadget-TranslationAdder.js]]; we want this even on&lt;br /&gt;
		-- user pages and such.&lt;br /&gt;
		format_categories(&amp;quot;Entries with translation boxes&amp;quot;, nil, nil, nil, true) ..&lt;br /&gt;
		templatestyles(&amp;quot;Module:translations/styles.css&amp;quot;)&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
-- Entry point for {{trans-top}}.&lt;br /&gt;
function export.top(frame)&lt;br /&gt;
	local args = process_params(frame:getParent().args, (parameters_data or get_parameters_data())[&amp;quot;trans-top&amp;quot;])&lt;br /&gt;
	local title = args[1]&lt;br /&gt;
	local id = args.id or title&lt;br /&gt;
	title = title and remove_links(title)&lt;br /&gt;
	return top(args, title, id, html_create(&amp;quot;div&amp;quot;)&lt;br /&gt;
		:addClass(&amp;quot;NavHead&amp;quot;)&lt;br /&gt;
		:css(&amp;quot;text-align&amp;quot;, &amp;quot;left&amp;quot;)&lt;br /&gt;
		:wikitext(title or &amp;quot;Translations&amp;quot;)&lt;br /&gt;
	)&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
-- Entry point for {{checktrans-top}}.&lt;br /&gt;
function export.check_top(frame)&lt;br /&gt;
	local args = process_params(frame:getParent().args, (parameters_data or get_parameters_data())[&amp;quot;checktrans-top&amp;quot;])&lt;br /&gt;
	&lt;br /&gt;
	local text = &amp;quot;\n:&amp;#039;&amp;#039;The translations below need to be checked and inserted above into the appropriate translation tables. See instructions at &amp;quot; ..&lt;br /&gt;
		frame:expandTemplate{&lt;br /&gt;
			title = &amp;quot;section link&amp;quot;,&lt;br /&gt;
			args = {&amp;quot;Wiktionary:Entry layout#Translations&amp;quot;}&lt;br /&gt;
		} ..&lt;br /&gt;
		&amp;quot;.&amp;#039;&amp;#039;\n&amp;quot;&lt;br /&gt;
	&lt;br /&gt;
	local header = html_create(&amp;quot;div&amp;quot;)&lt;br /&gt;
		:addClass(&amp;quot;checktrans&amp;quot;)&lt;br /&gt;
		:wikitext(text)&lt;br /&gt;
		&lt;br /&gt;
	local subtitle = args[1]&lt;br /&gt;
	local title = &amp;quot;Translations to be checked&amp;quot;&lt;br /&gt;
	if subtitle then&lt;br /&gt;
		title = title .. &amp;quot;&amp;amp;zwnj;: \&amp;quot;&amp;quot; .. subtitle .. &amp;quot;\&amp;quot;&amp;quot;&lt;br /&gt;
	end&lt;br /&gt;
	-- No ID, since these should always accompany proper translation tables, and can&amp;#039;t be trusted anyway (i.e. there&amp;#039;s no use-case for links).&lt;br /&gt;
	return tostring(header) .. &amp;quot;\n&amp;quot; .. top(args, title, nil, html_create(&amp;quot;div&amp;quot;)&lt;br /&gt;
		:addClass(&amp;quot;NavHead&amp;quot;)&lt;br /&gt;
		:css(&amp;quot;text-align&amp;quot;, &amp;quot;left&amp;quot;)&lt;br /&gt;
		:wikitext(title or &amp;quot;Translations&amp;quot;)&lt;br /&gt;
	)&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
-- Implements {{trans-bottom}}.&lt;br /&gt;
function export.bottom(frame)&lt;br /&gt;
	-- Check nothing is being passed as a parameter.&lt;br /&gt;
	process_params(frame:getParent().args, (parameters_data or get_parameters_data())[&amp;quot;trans-bottom&amp;quot;])&lt;br /&gt;
	return &amp;quot;&amp;lt;/table&amp;gt;&amp;lt;/div&amp;gt;&amp;lt;/div&amp;gt;&amp;quot;&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
-- Implements {{trans-see}} and part of {{trans-top-also}}.&lt;br /&gt;
local function see(args, see_text)&lt;br /&gt;
	local navhead = html_create(&amp;quot;div&amp;quot;)&lt;br /&gt;
		:addClass(&amp;quot;NavHead&amp;quot;)&lt;br /&gt;
		:css(&amp;quot;text-align&amp;quot;, &amp;quot;left&amp;quot;)&lt;br /&gt;
		:wikitext(args[1] .. &amp;quot; &amp;quot;)&lt;br /&gt;
		:tag(&amp;quot;span&amp;quot;)&lt;br /&gt;
			:css(&amp;quot;font-weight&amp;quot;, &amp;quot;normal&amp;quot;)&lt;br /&gt;
			:wikitext(&amp;quot;— &amp;quot;)&lt;br /&gt;
			:tag(&amp;quot;i&amp;quot;)&lt;br /&gt;
				:wikitext(see_text)&lt;br /&gt;
		:allDone()&lt;br /&gt;
	local terms, id = args[2], args.id&lt;br /&gt;
	&lt;br /&gt;
	if #terms == 0 then&lt;br /&gt;
		terms[1] = args[1]&lt;br /&gt;
	end&lt;br /&gt;
	&lt;br /&gt;
	for i = 1, #terms do&lt;br /&gt;
		local term_id = id[i] or id.default&lt;br /&gt;
		local data = {&lt;br /&gt;
			term = terms[i],&lt;br /&gt;
			id = term_id and &amp;quot;Translations-&amp;quot; .. term_id or &amp;quot;Translations&amp;quot;,&lt;br /&gt;
		}&lt;br /&gt;
		terms[i] = plain_link(data)&lt;br /&gt;
	end&lt;br /&gt;
	&lt;br /&gt;
	return navhead:wikitext(concat(terms, &amp;quot;,&amp;amp;lrm; &amp;quot;))&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
-- Entry point for {{trans-see}}.&lt;br /&gt;
function export.see(frame)&lt;br /&gt;
	local args = process_params(frame:getParent().args, (parameters_data or get_parameters_data())[&amp;quot;trans-see&amp;quot;])&lt;br /&gt;
	local div = html_create(&amp;quot;div&amp;quot;)&lt;br /&gt;
		:addClass(&amp;quot;pseudo&amp;quot;)&lt;br /&gt;
		:addClass(&amp;quot;NavFrame&amp;quot;)&lt;br /&gt;
		:node(see(args, &amp;quot;see &amp;quot;))&lt;br /&gt;
	return tostring(add_id(div, args.id.default or args[1]))&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
-- Entry point for {{trans-top-also}}.&lt;br /&gt;
function export.top_also(frame)&lt;br /&gt;
	local args = process_params(frame:getParent().args, (parameters_data or get_parameters_data())[&amp;quot;trans-top-also&amp;quot;])&lt;br /&gt;
	local navhead = see(args, &amp;quot;see also &amp;quot;)&lt;br /&gt;
	local title = args[1]&lt;br /&gt;
	local id = args.id.default or title&lt;br /&gt;
	title = remove_links(title)&lt;br /&gt;
	return top(args, title, id, navhead)&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
-- Implements {{translation subpage}}.&lt;br /&gt;
function export.subpage(frame)&lt;br /&gt;
	process_params(frame:getParent().args, (parameters_data or get_parameters_data())[&amp;quot;translation subpage&amp;quot;])&lt;br /&gt;
	if not is_translation_subpage() then&lt;br /&gt;
		error(&amp;quot;This template should only be used on translation subpages, which have titles that end with &amp;#039;/translations&amp;#039;.&amp;quot;)&lt;br /&gt;
	end&lt;br /&gt;
	-- &amp;quot;Translation subpages&amp;quot; category is handled by {{trans-top}}.&lt;br /&gt;
	return (&amp;quot;&amp;#039;&amp;#039;This page contains translations for &amp;#039;&amp;#039;%s&amp;#039;&amp;#039;. See the main entry for more information.&amp;#039;&amp;#039;&amp;quot;):format(full_link{&lt;br /&gt;
		lang = en or get_en(),&lt;br /&gt;
		term = canonical_pagename(),&lt;br /&gt;
	})&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
-- Implements {{t-needed}}.&lt;br /&gt;
function export.needed(frame)&lt;br /&gt;
	local args = process_params(frame:getParent().args, (parameters_data or get_parameters_data())[&amp;quot;t-needed&amp;quot;])&lt;br /&gt;
	local lang, category = args[1], &amp;quot;&amp;quot;&lt;br /&gt;
	local span = html_create(&amp;quot;span&amp;quot;)&lt;br /&gt;
		:addClass(&amp;quot;trreq&amp;quot;)&lt;br /&gt;
		:attr(&amp;quot;data-lang&amp;quot;, lang:getCode())&lt;br /&gt;
		:tag(&amp;quot;i&amp;quot;)&lt;br /&gt;
			:wikitext(&amp;quot;please add this translation if you can&amp;quot;)&lt;br /&gt;
			:done()&lt;br /&gt;
		&lt;br /&gt;
	if not args.nocat then&lt;br /&gt;
		local type, sort = args[2], args.sort&lt;br /&gt;
		if type == &amp;quot;quote&amp;quot; then&lt;br /&gt;
			category = &amp;quot;Requests for translations of &amp;quot; .. lang:getCanonicalName() .. &amp;quot; quotations&amp;quot;&lt;br /&gt;
		elseif type == &amp;quot;usex&amp;quot; then&lt;br /&gt;
			category = &amp;quot;Requests for translations of &amp;quot; .. lang:getCanonicalName() .. &amp;quot; usage examples&amp;quot;&lt;br /&gt;
		else&lt;br /&gt;
			category = &amp;quot;Requests for translations into &amp;quot; .. lang:getCanonicalName()&lt;br /&gt;
			lang = en or get_en()&lt;br /&gt;
		end&lt;br /&gt;
		category = format_categories(category, lang, sort, not sort and canonical_pagename() or nil)&lt;br /&gt;
	end&lt;br /&gt;
		&lt;br /&gt;
	return tostring(span) .. category&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
-- Implements {{no equivalent translation}}.&lt;br /&gt;
function export.no_equivalent(frame)&lt;br /&gt;
	local args = process_params(frame:getParent().args, (parameters_data or get_parameters_data())[&amp;quot;no equivalent translation&amp;quot;])&lt;br /&gt;
	&lt;br /&gt;
	local text = &amp;quot;no equivalent term in &amp;quot; .. args[1]:getCanonicalName()&lt;br /&gt;
	if not args.noend then&lt;br /&gt;
		text = text .. &amp;quot;, but see&amp;quot;&lt;br /&gt;
	end&lt;br /&gt;
	&lt;br /&gt;
	return tostring(html_create(&amp;quot;i&amp;quot;):wikitext(text))&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
-- Implements {{no attested translation}}.&lt;br /&gt;
function export.no_attested(frame)&lt;br /&gt;
	local args = process_params(frame:getParent().args, (parameters_data or get_parameters_data())[&amp;quot;no attested translation&amp;quot;])&lt;br /&gt;
	&lt;br /&gt;
	local langname = args[1]:getCanonicalName()&lt;br /&gt;
	local text = &amp;quot;no [[WT:ATTEST|attested]] term in &amp;quot; .. langname&lt;br /&gt;
	local category = &amp;quot;&amp;quot;&lt;br /&gt;
	&lt;br /&gt;
	if not args.noend then&lt;br /&gt;
		text = text .. &amp;quot;, but see&amp;quot;&lt;br /&gt;
		local sort = args.sort&lt;br /&gt;
		category = format_categories(langname .. &amp;quot; unattested translations&amp;quot;, en or get_en(), sort, not sort and canonical_pagename() or nil)&lt;br /&gt;
	end&lt;br /&gt;
	&lt;br /&gt;
	return tostring(html_create(&amp;quot;i&amp;quot;):wikitext(text)) .. category&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
-- Implements {{not used}}.&lt;br /&gt;
function export.not_used(frame)&lt;br /&gt;
	local args = process_params(frame:getParent().args, (parameters_data or get_parameters_data())[&amp;quot;not used&amp;quot;])&lt;br /&gt;
	return tostring(html_create(&amp;quot;i&amp;quot;):wikitext((args[2] or &amp;quot;not used&amp;quot;) .. &amp;quot; in &amp;quot; .. args[1]:getCanonicalName()))&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
return export&lt;/div&gt;</summary>
		<author><name>Sware</name></author>
	</entry>
</feed>