<?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%3AEngvar</id>
	<title>Module:Engvar - 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%3AEngvar"/>
	<link rel="alternate" type="text/html" href="https://the-democratika.com/wiki/index.php?title=Module:Engvar&amp;action=history"/>
	<updated>2026-04-04T15:04:31Z</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:Engvar&amp;diff=7192&amp;oldid=prev</id>
		<title>&gt;Ahecht: Sync with sandbox, answer edit request</title>
		<link rel="alternate" type="text/html" href="https://the-democratika.com/wiki/index.php?title=Module:Engvar&amp;diff=7192&amp;oldid=prev"/>
		<updated>2024-08-20T14:34:56Z</updated>

		<summary type="html">&lt;p&gt;Sync with sandbox, answer edit request&lt;/p&gt;
&lt;p&gt;&lt;b&gt;New page&lt;/b&gt;&lt;/p&gt;&lt;div&gt;-- This module implements Template:Engvar.&lt;br /&gt;
-- Template:Engvar is to be build into the template (like an infobox), with default &amp;amp; variant spellings defined.&lt;br /&gt;
-- That template should also allow parameter &amp;#039;|engvar=&amp;#039; for the editor (article page).&lt;br /&gt;
-- The module/template Engvar then returns the spelling variant as is set in that article (for example &amp;#039;|engvar=en-GB&amp;#039;).&lt;br /&gt;
-- The defaultWord is returned, unless the engvar input hits on a defined (en-XX) variant word.&lt;br /&gt;
local p = {}&lt;br /&gt;
local getArgs = require(&amp;#039;Module:Arguments&amp;#039;).getArgs&lt;br /&gt;
local yesno = require(&amp;#039;Module:Yesno&amp;#039;)&lt;br /&gt;
local gsub = string.gsub&lt;br /&gt;
local lower = string.lower&lt;br /&gt;
local upper = string.upper&lt;br /&gt;
&lt;br /&gt;
function p.variants(frame)&lt;br /&gt;
	local args = getArgs(frame)&lt;br /&gt;
	return p._variants(args)&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
local function fallback(args, useLang)&lt;br /&gt;
	local cwealthLangs = { [&amp;#039;en-OED&amp;#039;] = 1, [&amp;#039;en-IUPAC&amp;#039;] = 1,&lt;br /&gt;
		[&amp;#039;en-AU&amp;#039;] = 1, [&amp;#039;en-CA&amp;#039;] = 1, [&amp;#039;en-EI&amp;#039;] = 1, [&amp;#039;en-HK&amp;#039;] = 1,&lt;br /&gt;
		[&amp;#039;en-IN&amp;#039;] = 1, [&amp;#039;en-JM&amp;#039;] = 1, [&amp;#039;en-NZ&amp;#039;] = 1, [&amp;#039;en-PK&amp;#039;] = 1,&lt;br /&gt;
		[&amp;#039;en-SCO&amp;#039;] = 1,	[&amp;#039;en-SG&amp;#039;] = 1, [&amp;#039;en-ZA&amp;#039;] = 1 }&lt;br /&gt;
	if (useLang == &amp;#039;en-IUPAC&amp;#039; or useLang == &amp;#039;en-OED&amp;#039;) and (args[&amp;#039;en-OED&amp;#039;] or args[&amp;#039;en-CA&amp;#039;]) then&lt;br /&gt;
		return args[&amp;#039;en-OED&amp;#039;] or args[&amp;#039;en-CA&amp;#039;]&lt;br /&gt;
	elseif useLang == &amp;#039;en-CA&amp;#039; and (args[&amp;#039;en-OED&amp;#039;] or args[&amp;#039;en-US&amp;#039;]) then&lt;br /&gt;
		return args[&amp;#039;en-OED&amp;#039;] or args[&amp;#039;en-US&amp;#039;]&lt;br /&gt;
	elseif cwealthLangs[useLang] and args[&amp;#039;en-GB&amp;#039;] then&lt;br /&gt;
		return args[&amp;#039;en-GB&amp;#039;]&lt;br /&gt;
	end&lt;br /&gt;
	&lt;br /&gt;
	return args.defaultWord or &amp;#039;&amp;#039;&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
function p._variants(args)&lt;br /&gt;
	local returnWord = nil&lt;br /&gt;
	local auto = false&lt;br /&gt;
	&lt;br /&gt;
	local defaultWord = args.defaultWord or &amp;#039;&amp;#039;&lt;br /&gt;
	local engvar = args.engvar&lt;br /&gt;
&lt;br /&gt;
	if (lower(engvar or &amp;#039;&amp;#039;) == &amp;#039;auto&amp;#039;) then&lt;br /&gt;
		engvar = require(&amp;#039;Module:Engvar/detect&amp;#039;).detect()&lt;br /&gt;
		auto = true&lt;br /&gt;
	end&lt;br /&gt;
&lt;br /&gt;
	if engvar == nil then&lt;br /&gt;
		-- Nothing to look for; use defaultWord right away&lt;br /&gt;
		returnWord = defaultWord&lt;br /&gt;
	elseif args.defaultLang == gsub(lower(engvar), &amp;#039;^en%-(%w%w)$&amp;#039;, formatISO) then&lt;br /&gt;
		-- By the defaultLang, the defaultWord is asked&lt;br /&gt;
		returnWord = defaultWord&lt;br /&gt;
	else&lt;br /&gt;
		returnWord = args[gsub(lower(engvar), &amp;#039;^en%-(%w%w)$&amp;#039;, formatISO)]&lt;br /&gt;
	end&lt;br /&gt;
&lt;br /&gt;
	if returnWord == nil then&lt;br /&gt;
		-- No hit so far. Search by words in the engvar entered, checking the list&lt;br /&gt;
		local useLang = engvarLang(engvar)&lt;br /&gt;
		if useLang == nil then&lt;br /&gt;
			returnWord = defaultWord .. addMaintCat(args)&lt;br /&gt;
		elseif args[useLang] then&lt;br /&gt;
			returnWord = args[useLang]&lt;br /&gt;
		elseif yesno(args.fallback or auto, auto) then --default to fallback if auto, otherwise default to no fallback&lt;br /&gt;
			returnWord = fallback(args, useLang)&lt;br /&gt;
		else&lt;br /&gt;
			returnWord = defaultWord&lt;br /&gt;
		end&lt;br /&gt;
	end&lt;br /&gt;
&lt;br /&gt;
	return returnWord&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
-- Returns arguments and intermediate result. Plus the template result, in front.&lt;br /&gt;
function p.explain(frame)&lt;br /&gt;
	local args = getArgs(frame)&lt;br /&gt;
	local ret = {}&lt;br /&gt;
	local engvar = args.engvar or &amp;#039;&amp;#039;&lt;br /&gt;
	table.insert(ret, &amp;#039;\n\n: Settings:&amp;#039;)&lt;br /&gt;
	table.insert(ret, &amp;#039;defaultWord=&amp;#039; .. (args.defaultWord or &amp;#039;&amp;#039;) .. &amp;#039;; &amp;#039;)&lt;br /&gt;
	table.insert(ret, &amp;#039;defaultLang=&amp;#039; .. (args.defaultLang or &amp;#039;&amp;#039;) .. &amp;#039;; &amp;#039;)&lt;br /&gt;
	table.insert(ret, &amp;#039;engvarCat=&amp;#039; .. (args.engvarCat or &amp;#039;[default:yes]&amp;#039;) .. &amp;#039;; &amp;#039;)&lt;br /&gt;
	table.insert(ret, &amp;#039;engvarCatSort=&amp;#039; .. (args.engvarCatSort or &amp;#039;&amp;#039;))&lt;br /&gt;
	table.insert(ret, &amp;#039;fallback=&amp;#039; .. (args.fallback or &amp;#039;&amp;#039;))&lt;br /&gt;
	table.insert(ret, &amp;#039;\n\n: engvar=&amp;#039; .. engvar .. &amp;#039; [input] &amp;#039;)&lt;br /&gt;
	if (lower(engvar) == &amp;#039;auto&amp;#039;) then&lt;br /&gt;
		engvar = require(&amp;#039;Module:Engvar/detect&amp;#039;).detect() or &amp;#039;&amp;#039;&lt;br /&gt;
		table.insert(ret, &amp;#039;engvar=&amp;#039; .. engvar .. &amp;#039; [detected] &amp;#039;)&lt;br /&gt;
	end&lt;br /&gt;
	local useLang = engvarLang(engvar)&lt;br /&gt;
	table.insert(ret, &amp;#039; =&amp;gt; Engvar code [used]: &amp;gt;&amp;#039; .. (useLang or &amp;#039;&amp;#039;) .. &amp;#039;&amp;lt;.&amp;#039;)&lt;br /&gt;
	&lt;br /&gt;
	for k, v in pairs(args) do&lt;br /&gt;
		if k == &amp;#039;en-UK&amp;#039; then&lt;br /&gt;
			table.insert(ret, k .. &amp;#039; ? better: use &amp;quot;en-GB&amp;quot;; &amp;#039;)&lt;br /&gt;
		elseif k == &amp;#039;en-SA&amp;#039; then&lt;br /&gt;
			table.insert(ret, k .. &amp;#039; ? misleading; use &amp;quot;en-ZA&amp;quot;; &amp;#039;)&lt;br /&gt;
		end&lt;br /&gt;
		&lt;br /&gt;
		if k == &amp;#039;defaultWord&amp;#039; then&lt;br /&gt;
		elseif k == &amp;#039;defaultLang&amp;#039; then&lt;br /&gt;
		elseif k == &amp;#039;engvar&amp;#039; then&lt;br /&gt;
		elseif k == &amp;#039;engvarcat&amp;#039; then&lt;br /&gt;
		elseif k == gsub(lower(k), &amp;#039;^en%-(%w%w)$&amp;#039;, formatISO) then&lt;br /&gt;
			table.insert(ret, k .. &amp;#039;=&amp;#039; .. v .. &amp;#039;; &amp;#039;)&lt;br /&gt;
		else&lt;br /&gt;
			table.insert(ret, k .. &amp;#039; [not standard:]=&amp;#039; .. v .. &amp;#039;; &amp;#039;)&lt;br /&gt;
		end&lt;br /&gt;
&lt;br /&gt;
	end&lt;br /&gt;
	return engvar .. &amp;#039; =&amp;gt; &amp;#039; .. p._variants(args) .. table.concat(ret, &amp;#039; &amp;#039;)&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
-- Turn a match into pattern &amp;#039;en-XX&amp;#039;&lt;br /&gt;
function formatISO(country)&lt;br /&gt;
	return (&amp;#039;en-&amp;#039; .. upper(country) or &amp;#039;&amp;#039;)&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
function engvarLang(searchEngvar)&lt;br /&gt;
-- Search verbose language identifiers to ISO-format &amp;#039;en-XX&amp;#039;&lt;br /&gt;
-- Assumed: not a blank string &amp;#039;&amp;#039; to search&lt;br /&gt;
	local match = string.match&lt;br /&gt;
	local langs = {&lt;br /&gt;
		us = &amp;#039;US&amp;#039;, usa = &amp;#039;US&amp;#039;,&lt;br /&gt;
		au = &amp;#039;AU&amp;#039;, aus = &amp;#039;AU&amp;#039;,&lt;br /&gt;
		gb = &amp;#039;GB&amp;#039;, gbr = &amp;#039;GB&amp;#039;, uk = &amp;#039;GB&amp;#039;,&lt;br /&gt;
		ca = &amp;#039;CA&amp;#039;, can = &amp;#039;CA&amp;#039;,&lt;br /&gt;
		ei = &amp;#039;EI&amp;#039;, irl = &amp;#039;EI&amp;#039;,&lt;br /&gt;
		hk = &amp;#039;HK&amp;#039;, hkg = &amp;#039;HK&amp;#039;,&lt;br /&gt;
		[&amp;#039;in&amp;#039;] = &amp;#039;IN&amp;#039;, ind = &amp;#039;IN&amp;#039;, --&amp;#039;in&amp;#039; is a reserved keyword and needs to be in quotes&lt;br /&gt;
		jm = &amp;#039;JM&amp;#039;, jam = &amp;#039;JM&amp;#039;,&lt;br /&gt;
		mw = &amp;#039;MW&amp;#039;, mwi = &amp;#039;MW&amp;#039;,&lt;br /&gt;
		nz = &amp;#039;NZ&amp;#039;, nzl = &amp;#039;NZ&amp;#039;,&lt;br /&gt;
		ng = &amp;#039;NG&amp;#039;, nga = &amp;#039;NG&amp;#039;,&lt;br /&gt;
		pk = &amp;#039;PK&amp;#039;, pak = &amp;#039;PK&amp;#039;,&lt;br /&gt;
		ph = &amp;#039;PH&amp;#039;, phl = &amp;#039;PH&amp;#039;,&lt;br /&gt;
		sco = &amp;#039;SCO&amp;#039;,&lt;br /&gt;
		sg = &amp;#039;SG&amp;#039;, sgp = &amp;#039;SG&amp;#039;,&lt;br /&gt;
		za = &amp;#039;ZA&amp;#039;, zaf = &amp;#039;ZA&amp;#039;,&lt;br /&gt;
		tt = &amp;#039;TT&amp;#039;, tto = &amp;#039;TT&amp;#039;,&lt;br /&gt;
		oed = &amp;#039;OED&amp;#039;};&lt;br /&gt;
	searchEngvar = gsub(searchEngvar, &amp;#039;^%s*en%-(.*)&amp;#039;, &amp;#039;%1&amp;#039;) -- rm any opening &amp;#039;en-&amp;#039;.&lt;br /&gt;
	searchEngvar = gsub(lower(searchEngvar), &amp;#039;[%s%(%)%-]&amp;#039;, &amp;#039;&amp;#039;) -- To lc, remove all: (, ) , ws, hyphen.&lt;br /&gt;
	--normalize language codes so we don&amp;#039;t trigger the maintenence category on valid codes&lt;br /&gt;
	local useLang = langs[searchEngvar]&lt;br /&gt;
	if useLang then&lt;br /&gt;
		return &amp;#039;en-&amp;#039;..useLang&lt;br /&gt;
	--Special codes&lt;br /&gt;
	elseif match(searchEngvar, &amp;#039;oxford&amp;#039;) then&lt;br /&gt;
			useLang = &amp;#039;OED&amp;#039; -- &amp;#039;oxford&amp;#039; to catch before anyting &amp;#039;british&amp;#039;&lt;br /&gt;
	elseif match(searchEngvar, &amp;#039;iupac&amp;#039;) then&lt;br /&gt;
			useLang = &amp;#039;IUPAC&amp;#039; -- chemistry&lt;br /&gt;
	-- Very often used&lt;br /&gt;
	elseif match(searchEngvar, &amp;#039;british&amp;#039;) then&lt;br /&gt;
			useLang = &amp;#039;GB&amp;#039;&lt;br /&gt;
	elseif match(searchEngvar, &amp;#039;unitedstates&amp;#039;)&lt;br /&gt;
		or match(searchEngvar, &amp;#039;american&amp;#039;) then&lt;br /&gt;
			useLang = &amp;#039;US&amp;#039;&lt;br /&gt;
	elseif match(searchEngvar, &amp;#039;australia&amp;#039;) then&lt;br /&gt;
			useLang = &amp;#039;AU&amp;#039;&lt;br /&gt;
	-- Often used&lt;br /&gt;
	elseif match(searchEngvar, &amp;#039;india&amp;#039;) then&lt;br /&gt;
			useLang = &amp;#039;IN&amp;#039;&lt;br /&gt;
	elseif match(searchEngvar, &amp;#039;newzealand&amp;#039;) then&lt;br /&gt;
			useLang = &amp;#039;NZ&amp;#039;&lt;br /&gt;
	elseif match(searchEngvar, &amp;#039;southafrica&amp;#039;) then -- not: SA&lt;br /&gt;
			useLang = &amp;#039;ZA&amp;#039;&lt;br /&gt;
	elseif  match(searchEngvar, &amp;#039;canad&amp;#039;) then --&amp;#039;canada&amp;#039; or &amp;#039;canadian&amp;#039;&lt;br /&gt;
			useLang = &amp;#039;CA&amp;#039;&lt;br /&gt;
	elseif match(searchEngvar, &amp;#039;hiberno&amp;#039;)&lt;br /&gt;
		or match(searchEngvar, &amp;#039;ireland&amp;#039;)&lt;br /&gt;
		or match(searchEngvar, &amp;#039;irish&amp;#039;) then&lt;br /&gt;
			useLang = &amp;#039;EI&amp;#039;&lt;br /&gt;
	elseif match(searchEngvar, &amp;#039;hongkong&amp;#039;) then&lt;br /&gt;
			useLang = &amp;#039;HK&amp;#039;&lt;br /&gt;
	-- Less often used&lt;br /&gt;
	elseif match(searchEngvar, &amp;#039;jamaica&amp;#039;) then&lt;br /&gt;
			useLang = &amp;#039;JM&amp;#039;&lt;br /&gt;
	elseif match(searchEngvar, &amp;#039;malawi&amp;#039;) then&lt;br /&gt;
			useLang = &amp;#039;MW&amp;#039;&lt;br /&gt;
	elseif match(searchEngvar, &amp;#039;nigeria&amp;#039;) then&lt;br /&gt;
			useLang = &amp;#039;NG&amp;#039;&lt;br /&gt;
	elseif match(searchEngvar, &amp;#039;pakistan&amp;#039;) then&lt;br /&gt;
			useLang = &amp;#039;PK&amp;#039;&lt;br /&gt;
	elseif match(searchEngvar, &amp;#039;philippine&amp;#039;) then&lt;br /&gt;
			useLang = &amp;#039;PH&amp;#039;&lt;br /&gt;
	elseif match(searchEngvar, &amp;#039;scotland&amp;#039;)&lt;br /&gt;
		or match(searchEngvar, &amp;#039;scottish&amp;#039;) then&lt;br /&gt;
			useLang = &amp;#039;SCO&amp;#039; -- Has no alpha-2 code; not &amp;#039;scotch&amp;#039;&lt;br /&gt;
	elseif match(searchEngvar, &amp;#039;singapore&amp;#039;) then&lt;br /&gt;
			useLang = &amp;#039;SG&amp;#039;&lt;br /&gt;
	elseif match(searchEngvar, &amp;#039;trinidad&amp;#039;)&lt;br /&gt;
		or match(searchEngvar, &amp;#039;tobago&amp;#039;) then&lt;br /&gt;
			useLang = &amp;#039;TT&amp;#039;&lt;br /&gt;
	end&lt;br /&gt;
	&lt;br /&gt;
	return useLang and &amp;#039;en-&amp;#039;..useLang&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
function addMaintCat(args)&lt;br /&gt;
	local catMaintenance&lt;br /&gt;
	if args.engvarCat ~= &amp;#039;no&amp;#039; then&lt;br /&gt;
		local title = mw.title.getCurrentTitle()&lt;br /&gt;
		if title:inNamespaces(0) then  -- 0=main, 10=templ, 828=module&lt;br /&gt;
			if args.engvarCatSort then&lt;br /&gt;
				catMaintenance = &amp;#039;|&amp;#039; .. args.engvarCatSort .. &amp;#039;, &amp;#039; .. title.text&lt;br /&gt;
			end&lt;br /&gt;
			catMaintenance = &amp;#039;[[Category:Articles using an unknown Template:Engvar option&amp;#039; .. (catMaintenance or &amp;#039;&amp;#039;) .. &amp;#039;]]&amp;#039;&lt;br /&gt;
		end&lt;br /&gt;
	end&lt;br /&gt;
	return catMaintenance or &amp;#039;&amp;#039;&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
return p&lt;/div&gt;</summary>
		<author><name>&gt;Ahecht</name></author>
	</entry>
</feed>