<?xml version="1.0"?>
<feed xmlns="http://www.w3.org/2005/Atom" xml:lang="en-GB">
	<id>https://the-democratika.com/wiki/index.php?action=history&amp;feed=atom&amp;title=Module%3ALanguage_with_name%2Ffor</id>
	<title>Module:Language with name/for - Revision history</title>
	<link rel="self" type="application/atom+xml" href="https://the-democratika.com/wiki/index.php?action=history&amp;feed=atom&amp;title=Module%3ALanguage_with_name%2Ffor"/>
	<link rel="alternate" type="text/html" href="https://the-democratika.com/wiki/index.php?title=Module:Language_with_name/for&amp;action=history"/>
	<updated>2026-04-04T18:29:24Z</updated>
	<subtitle>Revision history for this page on the wiki</subtitle>
	<generator>MediaWiki 1.43.0</generator>
	<entry>
		<id>https://the-democratika.com/wiki/index.php?title=Module:Language_with_name/for&amp;diff=9687&amp;oldid=prev</id>
		<title>&gt;Trappist the monk at 23:18, 5 January 2025</title>
		<link rel="alternate" type="text/html" href="https://the-democratika.com/wiki/index.php?title=Module:Language_with_name/for&amp;diff=9687&amp;oldid=prev"/>
		<updated>2025-01-05T23:18:50Z</updated>

		<summary type="html">&lt;p&gt;&lt;/p&gt;
&lt;p&gt;&lt;b&gt;New page&lt;/b&gt;&lt;/p&gt;&lt;div&gt;--[=[&lt;br /&gt;
&lt;br /&gt;
This module is a rewrite of the existing wikitext template {{Language with name/for}}.  The primary purpose of&lt;br /&gt;
the rewrite is to bring the non-English text into the template so that it can be marked up by {{lang}}.&lt;br /&gt;
&lt;br /&gt;
To accomodate the variety of uses of the template, news parameters are introduced to allow variable styling.&lt;br /&gt;
&lt;br /&gt;
supported parameters (original)&lt;br /&gt;
	{{{1}}} – language tag&lt;br /&gt;
	{{{2}}} – non-English &amp;#039;term&amp;#039; to be wrapped in {{lang}} using tag in {{{1}}}; modified to accept keyword &amp;#039;none&amp;#039; to prevent categorization&lt;br /&gt;
	{{{3}}} – English translation of {{{2}}} in single quotes; alias: |term1=&lt;br /&gt;
	|links= – &amp;#039;yes&amp;#039; or &amp;#039;no&amp;#039;; default is &amp;#039;yes&amp;#039;; links language name derived from {{{2}}}&lt;br /&gt;
&lt;br /&gt;
supported parameters (new)&lt;br /&gt;
	|term1= – alias of {{{3}}}&lt;br /&gt;
	|term2= .. |termn= – additional &amp;#039;or&amp;#039;-like translations; each rendered in single quotes; quoted terms separated by &amp;#039;&amp;lt;space&amp;gt;/&amp;lt;space&amp;gt;&amp;#039;&lt;br /&gt;
	|italic-term= &amp;#039;yes&amp;#039; or &amp;#039;no&amp;#039;; default is &amp;#039;no&amp;#039;; useful to multi-term translations when all should be italicized&lt;br /&gt;
	|lang-name= – for those cases where ISO 639 does not have a language tag; {{{1}}} ignored; template wraps {{{2}}} with {{lang}} using &amp;#039;mis&amp;#039; (uncoded language)&lt;br /&gt;
	|break= – &amp;#039;yes&amp;#039; or &amp;#039;no&amp;#039;; default is &amp;#039;no&amp;#039;; inserts &amp;lt;br /&amp;gt; between {{{2}}} and the rest of the rendering&lt;br /&gt;
	|paren= – takes one of three values:&lt;br /&gt;
		&amp;#039;none&amp;#039; – omit left and right parens around &amp;#039;&amp;lt;language-name&amp;gt; for &amp;lt;term&amp;gt;&amp;#039;&lt;br /&gt;
		&amp;#039;left&amp;#039; – includes left paren, omits right paren&lt;br /&gt;
		&amp;#039;right&amp;#039; – includes right paren, omits left paren&lt;br /&gt;
&lt;br /&gt;
because this template now calls {{lang}} properly, it also supports the {{lang}} parameters:&lt;br /&gt;
	|rtl=&lt;br /&gt;
	|italic= (and aliases |italics= and |i=)&lt;br /&gt;
	|size=&lt;br /&gt;
	|cat=&lt;br /&gt;
	|nocat=&lt;br /&gt;
	&lt;br /&gt;
basic rendering&lt;br /&gt;
	&amp;lt;non-English text&amp;gt; (&amp;lt;language-name&amp;gt; for &amp;#039;&amp;lt;term&amp;gt;&amp;#039;)&lt;br /&gt;
&lt;br /&gt;
multiple terms&lt;br /&gt;
	&amp;lt;non-English text&amp;gt; (&amp;lt;language-name&amp;gt; for &amp;#039;&amp;lt;term&amp;gt;&amp;#039; / &amp;#039;&amp;lt;term&amp;gt;&amp;#039; / &amp;#039;&amp;lt;term&amp;gt;&amp;#039;)&lt;br /&gt;
&lt;br /&gt;
|paren=none&lt;br /&gt;
	&amp;lt;non-English text&amp;gt; &amp;lt;language-name&amp;gt; for &amp;#039;&amp;lt;term&amp;gt;&amp;#039;&lt;br /&gt;
&lt;br /&gt;
|break=yes&lt;br /&gt;
	&amp;lt;non-English text&amp;gt;&amp;lt;br /&amp;gt;(&amp;lt;language-name&amp;gt; for &amp;#039;&amp;lt;term&amp;gt;&amp;#039;)&lt;br /&gt;
&lt;br /&gt;
|italic-term=yes&lt;br /&gt;
	&amp;lt;non-English text&amp;gt; (&amp;lt;language-name&amp;gt; for &amp;#039;&amp;lt;i&amp;gt;&amp;lt;term&amp;gt;&amp;lt;/i&amp;gt;&amp;#039; / &amp;#039;&amp;lt;i&amp;gt;&amp;lt;term&amp;gt;&amp;lt;/i&amp;gt;&amp;#039; / &amp;#039;&amp;lt;i&amp;gt;&amp;lt;term&amp;gt;&amp;lt;/i&amp;gt;&amp;#039;)&lt;br /&gt;
&lt;br /&gt;
|lang-name=&amp;lt;lang-name&amp;gt;&lt;br /&gt;
	&amp;lt;non-English text&amp;gt; ([[&amp;lt;lang-name&amp;gt; language|&amp;lt;lang-name&amp;gt;]] for &amp;#039;&amp;lt;term&amp;gt;&amp;#039;)&lt;br /&gt;
&lt;br /&gt;
]=]&lt;br /&gt;
&lt;br /&gt;
require (&amp;#039;strict&amp;#039;);&lt;br /&gt;
local get_args = require (&amp;#039;Module:Arguments&amp;#039;).getArgs;&lt;br /&gt;
local lang_mod = require (&amp;#039;Module:Lang&amp;#039;);&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
--[[--------------------------&amp;lt; E R R O R _ M E S S A G E &amp;gt;----------------------------------------------------&lt;br /&gt;
&lt;br /&gt;
render an error message with help-text link and category.&lt;br /&gt;
&lt;br /&gt;
]]&lt;br /&gt;
&lt;br /&gt;
local function error_message (message)&lt;br /&gt;
	local err_msg_t = {&amp;#039;&amp;lt;span style=&amp;quot;color:#d33&amp;quot;&amp;gt;Error: {{language with name/for}}: &amp;#039;};		-- open span and initial bit of the error message&lt;br /&gt;
	table.insert (err_msg_t, message);											-- the rest of the message&lt;br /&gt;
	table.insert (err_msg_t, &amp;#039; ([[Template:Language with name/for|help]])&amp;lt;/span&amp;gt;&amp;#039;);	-- the help link&lt;br /&gt;
&lt;br /&gt;
	local namespace = mw.title.getCurrentTitle().namespace;						-- namespace number&lt;br /&gt;
	if 0 == namespace or 10 == namespace then&lt;br /&gt;
		table.insert (err_msg_t, &amp;#039;[[Category:Language with name/for errors]]&amp;#039;);	-- categorize in main and template namespaces&lt;br /&gt;
	end&lt;br /&gt;
&lt;br /&gt;
	return table.concat (err_msg_t);											-- make a big string and done&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
--[[--------------------------&amp;lt; T E R M S _ G E T &amp;gt;------------------------------------------------------------&lt;br /&gt;
&lt;br /&gt;
get value(s) assigned to {{{3}}} or to any number of |termn= parameters.  Return a string where each term is in&lt;br /&gt;
single quotes.  If more than one |termn= parameter, separate each term with &amp;lt;space&amp;gt;/&amp;lt;space&amp;gt;.  Apply italic markup&lt;br /&gt;
when |itlaic-term=yes&lt;br /&gt;
&lt;br /&gt;
]]&lt;br /&gt;
&lt;br /&gt;
local function terms_get (args_t)&lt;br /&gt;
	local function render_term (term, is_italic)								-- local function to do the rendering&lt;br /&gt;
		if is_italic then&lt;br /&gt;
			term = term:gsub (&amp;#039;.+&amp;#039;, &amp;#039;&amp;lt;i&amp;gt;%1&amp;lt;/i&amp;gt;&amp;#039;);								-- apply italic markup; html to avoid converting &amp;#039;&amp;#039; to &amp;#039;&amp;#039;&amp;#039; when quoted&lt;br /&gt;
		end&lt;br /&gt;
		if is_italic or term:match (&amp;#039;[^\&amp;#039;]\&amp;#039;\&amp;#039;$&amp;#039;) then&lt;br /&gt;
			term = term:gsub (&amp;#039;.+&amp;#039;, &amp;#039;&amp;amp;#39;%1&amp;lt;span style=&amp;quot;margin-left:.09em&amp;quot;&amp;gt;&amp;amp;#39;&amp;lt;/span&amp;gt;&amp;#039;);&lt;br /&gt;
		else&lt;br /&gt;
			term = term:gsub (&amp;#039;.+&amp;#039;, &amp;#039;&amp;amp;#39;%1&amp;amp;#39;&amp;#039;);								-- quote using &amp;amp;#39; in case term uses italic or bold wikimarkup&lt;br /&gt;
		end&lt;br /&gt;
		return term;															-- done this was to avoid second string.gsub() return value&lt;br /&gt;
	end&lt;br /&gt;
&lt;br /&gt;
	local is_italic = &amp;#039;yes&amp;#039; == args_t[&amp;#039;italic-term&amp;#039;];							-- make boolean&lt;br /&gt;
	&lt;br /&gt;
	if args_t[3] then															-- if {{{3}}} has a value&lt;br /&gt;
		return render_term (args_t[3], is_italic);&lt;br /&gt;
	end&lt;br /&gt;
	&lt;br /&gt;
	local terms = {};															-- a table to hold one or more non-English terms&lt;br /&gt;
	&lt;br /&gt;
	for k, v in pairs (args_t) do&lt;br /&gt;
		if &amp;#039;string&amp;#039; == type (k) and k:match (&amp;#039;term%d&amp;#039;) then						-- string parameter names only&lt;br /&gt;
			table.insert (terms, k:match (&amp;#039;term(%d+)&amp;#039;) .. &amp;#039;=&amp;#039; .. v);			-- convert k/v pairs to a sequence that can be sorted by |termn= enumerator (enum=term)&lt;br /&gt;
		end&lt;br /&gt;
	end&lt;br /&gt;
	&lt;br /&gt;
	table.sort (terms, function (a, b)											-- sort the sequence using local sort function&lt;br /&gt;
		local enum_a = a:match (&amp;#039;^%d+&amp;#039;);										-- make numbers for the comparison&lt;br /&gt;
		local enum_b = b:match (&amp;#039;^%d+&amp;#039;);&lt;br /&gt;
		return tonumber(enum_a) &amp;lt; tonumber(enum_b)								-- and compare&lt;br /&gt;
		end&lt;br /&gt;
		);&lt;br /&gt;
	&lt;br /&gt;
	for i, v in ipairs (terms) do												-- rewrite the sequence to be sorted sequence of terms&lt;br /&gt;
		terms[i] = render_term (v:gsub (&amp;#039;%d+=(.+)&amp;#039;, &amp;#039;%1&amp;#039;), is_italic);			-- extract term; italicize as required, and quote&lt;br /&gt;
	end&lt;br /&gt;
&lt;br /&gt;
	return table.concat (terms, &amp;#039; / &amp;#039;);											-- form a string and done&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
--[[--------------------------&amp;lt; T E X T _ M A K E &amp;gt;------------------------------------------------------------&lt;br /&gt;
&lt;br /&gt;
if {{{2}}} has a value (the non-English text) use {{lang}} to apply proper html markup.  When |lang-name= has a&lt;br /&gt;
value, override any value that might be in {{{1}}} with &amp;#039;mis&amp;#039; (uncoded languages) &lt;br /&gt;
&lt;br /&gt;
TODO: error condition when both of {{{2}}} and |lang-name= have values?&lt;br /&gt;
&lt;br /&gt;
]]&lt;br /&gt;
&lt;br /&gt;
local function text_make (lang_params_t)&lt;br /&gt;
	if not lang_params_t[2] then&lt;br /&gt;
		return &amp;#039;&amp;#039;;&lt;br /&gt;
	end&lt;br /&gt;
&lt;br /&gt;
	return lang_mod._lang (lang_params_t);&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
--[[--------------------------&amp;lt; L A N G _ M A K E &amp;gt;------------------------------------------------------------&lt;br /&gt;
&lt;br /&gt;
render the language name portion of the output.  |lang-name= overrides {{{1}}}.  Language name links to language&lt;br /&gt;
article through &amp;#039;&amp;lt;language name&amp;gt; language&amp;#039; redirect except when |links=no&lt;br /&gt;
&lt;br /&gt;
]]&lt;br /&gt;
&lt;br /&gt;
local function lang_make (args_t, lang_params_t)&lt;br /&gt;
	if args_t[&amp;#039;lang-name&amp;#039;] then&lt;br /&gt;
		if &amp;#039;no&amp;#039; == args_t.links or &amp;#039;no&amp;#039; == args_t.link then&lt;br /&gt;
			return args_t[&amp;#039;lang-name&amp;#039;];&lt;br /&gt;
		end&lt;br /&gt;
		&lt;br /&gt;
		local lang_t = {};														-- holds component parts of language name link when using |lang-name=&amp;lt;language&amp;gt;&lt;br /&gt;
		table.insert (lang_t, &amp;#039;[[&amp;#039;);											-- open wikilink&lt;br /&gt;
		table.insert (lang_t, args_t[&amp;#039;lang-name&amp;#039;]);								-- add the name from |lang-name=&lt;br /&gt;
		table.insert (lang_t, &amp;#039; language|&amp;#039;);									-- add &amp;#039; languge&amp;#039; for redirect and pipe for link label&lt;br /&gt;
		table.insert (lang_t, args_t[&amp;#039;lang-name&amp;#039;]);								-- add language name as label for wikilink&lt;br /&gt;
		table.insert (lang_t, &amp;#039;]]&amp;#039;);											-- close wikilink&lt;br /&gt;
		return table.concat (lang_t);											-- and make a big string and done&lt;br /&gt;
	end&lt;br /&gt;
		&lt;br /&gt;
	return lang_mod._name_from_tag ({											-- get language name (linked or not) from {{lang|fn=name_from_tag}}&lt;br /&gt;
		link = args_t.links or args_t.link or &amp;#039;yes&amp;#039;,							-- link language name by default&lt;br /&gt;
		[1] = args_t[&amp;#039;lang-name&amp;#039;] and &amp;#039;mis&amp;#039; or args_t[1],						-- when |language-name= something, use tag &amp;#039;mis&amp;#039;; tag from {{{1}}} else&lt;br /&gt;
		});&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
--[[--------------------------&amp;lt; _ L A N G N F &amp;gt;----------------------------------------------------------------&lt;br /&gt;
&lt;br /&gt;
entry point from another module&lt;br /&gt;
&lt;br /&gt;
]]&lt;br /&gt;
&lt;br /&gt;
local function _langnf (args_t)&lt;br /&gt;
	if not (args_t[1] or args_t[&amp;#039;lang-name&amp;#039;]) then&lt;br /&gt;
		return error_message (&amp;#039;missing language tag or language name&amp;#039;);&lt;br /&gt;
	end&lt;br /&gt;
&lt;br /&gt;
	if (args_t[1] and args_t[&amp;#039;lang-name&amp;#039;]) then&lt;br /&gt;
		return error_message (&amp;#039;only one of &amp;lt;kbd&amp;gt;{{{1}}}&amp;lt;/kbd&amp;gt; and &amp;lt;kbd&amp;gt;|lang-name=&amp;lt;/kbd&amp;gt; allowed&amp;#039;);&lt;br /&gt;
	end&lt;br /&gt;
&lt;br /&gt;
	if not (args_t[3] or args_t.term1) then&lt;br /&gt;
		return error_message (&amp;#039;missing English translation&amp;#039;);&lt;br /&gt;
	end&lt;br /&gt;
&lt;br /&gt;
	local lang_params_t = {														-- build a table of parameters to be used by {{lang}}&lt;br /&gt;
		[&amp;#039;rtl&amp;#039;]=args_t.rtl,														-- used by {{lang}}&lt;br /&gt;
		[1] = args_t[&amp;#039;lang-name&amp;#039;] and &amp;#039;mis&amp;#039; or args_t[1],						-- used by {{lang}}&lt;br /&gt;
		[2] = args_t[2],														-- the rest of these are {{lang}} parameters used only by {{lang}}&lt;br /&gt;
		rtl = args_t.rtl,														-- right-to-left; not normally needed&lt;br /&gt;
		i = args_t.i,															-- |italic= alias&lt;br /&gt;
		italic = args_t.italic,&lt;br /&gt;
		italics = args_t.italics,												-- |italic= alias&lt;br /&gt;
		size = args_t.size,&lt;br /&gt;
		cat = args_t.cat,&lt;br /&gt;
		nocat = args_t.nocat,&lt;br /&gt;
		template = &amp;#039;Language with name/for&amp;#039;,&lt;br /&gt;
		}&lt;br /&gt;
&lt;br /&gt;
	local out_t = {};															-- components of the rendering go here&lt;br /&gt;
	local left_paren = (&amp;#039;none&amp;#039; == args_t.paren or &amp;#039;right&amp;#039; == args_t.paren) and &amp;#039;&amp;#039; or &amp;#039;(&amp;#039;;&lt;br /&gt;
	local right_paren = (not args_t[2] or &amp;#039;none&amp;#039; == args_t[2] or &amp;#039;left&amp;#039; == args_t.paren or &amp;#039;none&amp;#039; == args_t.paren) and &amp;#039;&amp;#039; or &amp;#039;)&amp;#039;;&lt;br /&gt;
	&lt;br /&gt;
	if args_t[2] and (&amp;#039;none&amp;#039; ~= args_t[2]) then									-- optional;  {{{2}}} may be omitted; keyword &amp;#039;none&amp;#039; prevents categorization; used in {{infobox papal document}}&lt;br /&gt;
		table.insert (out_t, text_make (lang_params_t));						-- the non-English text marked up by {{lang}}&lt;br /&gt;
		table.insert (out_t, &amp;#039;yes&amp;#039; == args_t[&amp;#039;break&amp;#039;] and &amp;#039;&amp;lt;br /&amp;gt;&amp;#039; or &amp;#039; &amp;#039;);		-- &amp;lt;br /&amp;gt; when |break=yes; &amp;lt;space&amp;gt; else&lt;br /&gt;
		table.insert (out_t, left_paren);										-- omit left paren around &amp;#039;&amp;lt;language name&amp;gt; for &amp;lt;term&amp;gt;&amp;#039; when |paren=none or |paren=right&lt;br /&gt;
	end&lt;br /&gt;
	table.insert (out_t, lang_make (args_t));									-- language name; linked unless |links=no&lt;br /&gt;
	table.insert (out_t, &amp;#039; for &amp;#039;);												-- the &amp;#039;for&amp;#039; static text&lt;br /&gt;
	table.insert (out_t, terms_get (args_t));									-- and the term(s) italicized as appropriate and quoted&lt;br /&gt;
	table.insert (out_t, right_paren);											-- omit right paren around &amp;#039;&amp;lt;language name&amp;gt; for &amp;lt;term&amp;gt;&amp;#039; when |paren=none or |paren=left or {{{2}}} omitted&lt;br /&gt;
	&lt;br /&gt;
	if not args_t[2] then														-- if this template doesn&amp;#039;t use {{{2}}} for the non-English text&lt;br /&gt;
		table.insert (out_t, &amp;#039;[[Category:Pages with Langnf omitting second positional parameter]]&amp;#039;);	-- add this category&lt;br /&gt;
	end&lt;br /&gt;
	&lt;br /&gt;
	return table.concat (out_t);												-- make a big string and done&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
--[[--------------------------&amp;lt; L A N G N F &amp;gt;------------------------------------------------------------------&lt;br /&gt;
&lt;br /&gt;
implements {{language with name/for}}&lt;br /&gt;
&lt;br /&gt;
{{#invoke:Language with name/for|langnf}}&lt;br /&gt;
&lt;br /&gt;
]]&lt;br /&gt;
&lt;br /&gt;
local function langnf (frame)&lt;br /&gt;
	local args_t = get_args (frame);&lt;br /&gt;
	return _langnf (args_t)&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
--[[--------------------------&amp;lt; E X P O R T S &amp;gt;----------------------------------------------------------------&lt;br /&gt;
]]&lt;br /&gt;
&lt;br /&gt;
return {&lt;br /&gt;
	langnf = langnf,															-- entry point from a template&lt;br /&gt;
	&lt;br /&gt;
	_langnf = _langnf,															-- entry point from another module&lt;br /&gt;
	}&lt;/div&gt;</summary>
		<author><name>&gt;Trappist the monk</name></author>
	</entry>
</feed>