<?xml version="1.0"?>
<feed xmlns="http://www.w3.org/2005/Atom" xml:lang="en">
	<id>https://www.cultopedia.org/index.php?action=history&amp;feed=atom&amp;title=Module%3AMw_lang</id>
	<title>Module:Mw lang - Revision history</title>
	<link rel="self" type="application/atom+xml" href="https://www.cultopedia.org/index.php?action=history&amp;feed=atom&amp;title=Module%3AMw_lang"/>
	<link rel="alternate" type="text/html" href="https://www.cultopedia.org/index.php?title=Module:Mw_lang&amp;action=history"/>
	<updated>2026-04-06T02:14:06Z</updated>
	<subtitle>Revision history for this page on the wiki</subtitle>
	<generator>MediaWiki 1.44.5</generator>
	<entry>
		<id>https://www.cultopedia.org/index.php?title=Module:Mw_lang&amp;diff=281&amp;oldid=prev</id>
		<title>imported&gt;WOSlinker: use require(&#039;strict&#039;) instead of require(&#039;Module:No globals&#039;)</title>
		<link rel="alternate" type="text/html" href="https://www.cultopedia.org/index.php?title=Module:Mw_lang&amp;diff=281&amp;oldid=prev"/>
		<updated>2022-10-22T09:09:34Z</updated>

		<summary type="html">&lt;p&gt;use require(&amp;#039;strict&amp;#039;) instead of require(&amp;#039;Module:No globals&amp;#039;)&lt;/p&gt;
&lt;p&gt;&lt;b&gt;New page&lt;/b&gt;&lt;/p&gt;&lt;div&gt;require(&amp;#039;strict&amp;#039;);&lt;br /&gt;
local getArgs = require(&amp;#039;Module:Arguments&amp;#039;).getArgs&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
--[[--------------------------&amp;lt; E R R _ M S G _ M A K E &amp;gt;------------------------------------------------------&lt;br /&gt;
]]&lt;br /&gt;
&lt;br /&gt;
local function err_msg_make (msg)&lt;br /&gt;
	return &amp;#039;&amp;lt;span class=&amp;quot;error&amp;quot; style=&amp;quot;font-size:100%&amp;quot;&amp;gt;error: &amp;#039; .. msg .. &amp;#039; not recognized&amp;lt;/span&amp;gt;&amp;#039;&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
--[[--------------------------&amp;lt; _ I S _ C O D E &amp;gt;--------------------------------------------------------------&lt;br /&gt;
&lt;br /&gt;
local or require()d entry point&lt;br /&gt;
&lt;br /&gt;
return true if &amp;lt;code&amp;gt; is a mediawiki recognized code; false else&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt; - language code to validate; expected to be lowercase without leading/trailing whitespace&lt;br /&gt;
&amp;lt;target_lang_code&amp;gt; - language code for target language; expected to be valid; expected to be lowercase without leading/trailing whitespace&lt;br /&gt;
&lt;br /&gt;
specifying &amp;lt;target_lang_code&amp;gt; may be a pointless exercise because of cldr fallback.  For example,&lt;br /&gt;
	mw.language.fetchLanguageName (crh, sq) -&amp;gt; Crimean Turkish&lt;br /&gt;
because the Albanian language definitions do not have an Albanian-language version of the language name&lt;br /&gt;
&lt;br /&gt;
]]&lt;br /&gt;
&lt;br /&gt;
local function _is_code (code, target_lang_code)&lt;br /&gt;
	code = mw.language.fetchLanguageName (code, target_lang_code);&lt;br /&gt;
	return &amp;#039;&amp;#039; ~= code;&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
--[[--------------------------&amp;lt; _ _ V A L I D A T E _ T A R G E T _ L A N G _ C O D E &amp;gt;------------------------&lt;br /&gt;
&lt;br /&gt;
validates target_lang_code as a know language code; returns two values&lt;br /&gt;
	when target_lang_code is valid, first return value holds target_lang_code; second return value is nil&lt;br /&gt;
	when target_lang_code is invalid, first retrun value is nil; second return value has error message&lt;br /&gt;
&lt;br /&gt;
if target_lang_code argument is nil, (missing or empty in the invoke) use local wiki&amp;#039;s language code&lt;br /&gt;
&lt;br /&gt;
]]&lt;br /&gt;
&lt;br /&gt;
local function __validate_target_lang_code (target_lang_code)&lt;br /&gt;
	local msg;&lt;br /&gt;
	&lt;br /&gt;
	if target_lang_code then													-- not missing or empty&lt;br /&gt;
		if not _is_code (target_lang_code) then									-- validate target_lang_code&lt;br /&gt;
			msg = err_msg_make (&amp;#039;target language code: &amp;#039; .. target_lang_code);&lt;br /&gt;
			target_lang_code = nil;												-- unset as invalid&lt;br /&gt;
		end&lt;br /&gt;
	end&lt;br /&gt;
	if not target_lang_code then												-- if nil because missing or empty or because invlaid and we set it nil&lt;br /&gt;
		target_lang_code = mw.getContentLanguage():getCode();					-- use local wiki&amp;#039;s language code&lt;br /&gt;
	end&lt;br /&gt;
&lt;br /&gt;
	return target_lang_code, msg;												-- target_lang_code is valid or nil; msg is nil or has an error message&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
--[[--------------------------&amp;lt; I S _ C O D E &amp;gt;----------------------------------------------------------------&lt;br /&gt;
&lt;br /&gt;
module entry point&lt;br /&gt;
&lt;br /&gt;
args[1]: language code -&amp;gt; &amp;lt;code&amp;gt;&lt;br /&gt;
args[2]: optional target language code; same as &amp;lt;target lang code&amp;gt; in {{#language:&amp;lt;code&amp;gt;|&amp;lt;target lang code&amp;gt;}}; defaults to the local wiki language&lt;br /&gt;
&lt;br /&gt;
return true if &amp;lt;code&amp;gt; is a mediawiki recognized code; nil else&lt;br /&gt;
&lt;br /&gt;
]]&lt;br /&gt;
&lt;br /&gt;
local function is_code (frame)&lt;br /&gt;
	local args = getArgs (frame, {&lt;br /&gt;
		valueFunc = function (key, value)&lt;br /&gt;
			return (value and &amp;#039;&amp;#039; ~= value) and value:lower():gsub (&amp;#039;^%s*(.-)%s*$&amp;#039;, &amp;#039;%1&amp;#039;) or nil;&lt;br /&gt;
		end&lt;br /&gt;
		});&lt;br /&gt;
	local code = args[1];&lt;br /&gt;
	local target_lang_code = __validate_target_lang_code (args[2]);&lt;br /&gt;
&lt;br /&gt;
	return code and _is_code (code, target_lang_code) and true or nil;&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
--[[--------------------------&amp;lt; N A M E _ F R O M _ C O D E &amp;gt;--------------------------------------------------&lt;br /&gt;
&lt;br /&gt;
module entry point&lt;br /&gt;
&lt;br /&gt;
args[1]: language code&lt;br /&gt;
args[2]: optional target language code; same as &amp;lt;target lang code&amp;gt; in {{#language:&amp;lt;code&amp;gt;|&amp;lt;target lang code&amp;gt;}}; defaults to the local wiki language&lt;br /&gt;
&lt;br /&gt;
return language-name if language-code is a mediawiki recognized code; error message string else&lt;br /&gt;
&lt;br /&gt;
returned language name not guarenteed to be in target_lang_code (if specified), because mw language lists are incomplete&lt;br /&gt;
&lt;br /&gt;
]]&lt;br /&gt;
&lt;br /&gt;
local function name_from_code (frame)&lt;br /&gt;
	local args = getArgs (frame, {&lt;br /&gt;
		valueFunc = function (key, value)&lt;br /&gt;
			return (value and &amp;#039;&amp;#039; ~= value) and value:lower():gsub (&amp;#039;%s*(.-)%s*&amp;#039;, &amp;#039;%1&amp;#039;) or nil;&lt;br /&gt;
		end&lt;br /&gt;
		});&lt;br /&gt;
	local code = args[1];&lt;br /&gt;
	if not code then&lt;br /&gt;
		return err_msg_make (&amp;#039;code: (empty)&amp;#039;);&lt;br /&gt;
	end&lt;br /&gt;
	&lt;br /&gt;
	local target_lang_code, msg = __validate_target_lang_code (args[2]);&lt;br /&gt;
	if msg then&lt;br /&gt;
		return msg;&lt;br /&gt;
	end&lt;br /&gt;
&lt;br /&gt;
	local name = mw.language.fetchLanguageName (code, target_lang_code);		-- returns empty string if code not found&lt;br /&gt;
	return &amp;#039;&amp;#039; ~= name and name or err_msg_make (&amp;#039;language code: &amp;#039; .. code);		-- return language name or error message&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
--[[--------------------------&amp;lt; C O D E _ F R O M _ N A M E &amp;gt;--------------------------------------------------&lt;br /&gt;
&lt;br /&gt;
local entry point&lt;br /&gt;
&lt;br /&gt;
args[1]: language name&lt;br /&gt;
args[2]: optional target language code; instruct this function to fetch language name list in &amp;#039;this&amp;#039; language&lt;br /&gt;
&lt;br /&gt;
return language-code if language-name is a mediawiki recognized name and target language code is valid; error message string else&lt;br /&gt;
&lt;br /&gt;
second return value is a boolean used by is_name(); true when name is found; false else&lt;br /&gt;
&lt;br /&gt;
]]&lt;br /&gt;
&lt;br /&gt;
local function _code_from_name (args)&lt;br /&gt;
	local name = args[1];&lt;br /&gt;
	if not name then&lt;br /&gt;
		return err_msg_make (&amp;#039;name: (empty)&amp;#039;);&lt;br /&gt;
	end&lt;br /&gt;
&lt;br /&gt;
	local target_lang_code, msg =  __validate_target_lang_code (args[2]);&lt;br /&gt;
&lt;br /&gt;
	if msg then&lt;br /&gt;
		return msg;&lt;br /&gt;
	end&lt;br /&gt;
&lt;br /&gt;
	local code_name_list = mw.language.fetchLanguageNames (target_lang_code, &amp;#039;all&amp;#039;);	-- get language code / name list in target_lang_code language indexed by language code&lt;br /&gt;
	local name_code_list = {};													-- to hold language name / code list indexed by name&lt;br /&gt;
&lt;br /&gt;
	for k, v in pairs (code_name_list) do										-- spin through the code / name list and&lt;br /&gt;
		name_code_list[v:lower()] = k;											-- make a name / code list&lt;br /&gt;
	end&lt;br /&gt;
&lt;br /&gt;
	if name_code_list[name] then&lt;br /&gt;
		return name_code_list[name], true;										-- returns code when name is found and true for is_name()&lt;br /&gt;
	else&lt;br /&gt;
		return err_msg_make (&amp;#039;language name: &amp;#039; .. name), false;					-- return error message when name not found and false for is_name()&lt;br /&gt;
	end&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
--[[--------------------------&amp;lt; C O D E _ F R O M _ N A M E &amp;gt;--------------------------------------------------&lt;br /&gt;
&lt;br /&gt;
module entry point&lt;br /&gt;
&lt;br /&gt;
args[1]: language name&lt;br /&gt;
args[2]: optional target language code; instruct this function to fetch language name list in &amp;#039;this&amp;#039; language&lt;br /&gt;
&lt;br /&gt;
return language-code if language-name is a mediawiki recognized name and target language code is valid; error message string else&lt;br /&gt;
&lt;br /&gt;
]]&lt;br /&gt;
&lt;br /&gt;
local function code_from_name (frame)&lt;br /&gt;
	local args = getArgs (frame, {&lt;br /&gt;
		valueFunc = function (key, value)&lt;br /&gt;
			return (value and &amp;#039;&amp;#039; ~= value) and value:lower():gsub (&amp;#039;^%s*(.-)%s*$&amp;#039;, &amp;#039;%1&amp;#039;) or nil;&lt;br /&gt;
		end&lt;br /&gt;
		});&lt;br /&gt;
	&lt;br /&gt;
	local result, _ = _code_from_name (args);									-- suppress true/false return used by is_name()&lt;br /&gt;
	return result;&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
--[[--------------------------&amp;lt; I S _ N A M E &amp;gt;----------------------------------------------------------------&lt;br /&gt;
&lt;br /&gt;
return true if &amp;lt;name&amp;gt; is a mediawiki recognized language name; false else&lt;br /&gt;
&lt;br /&gt;
args[1]: language name&lt;br /&gt;
args[2]: optional target language code; instructs _code_from_name to fetch language name list in &amp;#039;this&amp;#039; language&lt;br /&gt;
			defaults to local wiki&amp;#039;s language;  when this parameter not valid, language name is assumed to be not valid&lt;br /&gt;
&lt;br /&gt;
]]&lt;br /&gt;
&lt;br /&gt;
local function is_name (frame)&lt;br /&gt;
	local args = getArgs (frame, {&lt;br /&gt;
		valueFunc = function (key, value)&lt;br /&gt;
			return (value and &amp;#039;&amp;#039; ~= value) and value:lower():gsub (&amp;#039;%s*(.-)%s*&amp;#039;, &amp;#039;%1&amp;#039;) or nil;&lt;br /&gt;
		end&lt;br /&gt;
		});&lt;br /&gt;
	&lt;br /&gt;
	local _, result = _code_from_name (args);									-- suppress code return used by code_from_name()&lt;br /&gt;
	return result and true or nil;&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
--[[--------------------------&amp;lt; E X P O R T E D   F U N C T I O N S &amp;gt;------------------------------------------&lt;br /&gt;
]]&lt;br /&gt;
&lt;br /&gt;
return {&lt;br /&gt;
	code_from_name = code_from_name,&lt;br /&gt;
	is_code = is_code,&lt;br /&gt;
	is_name = is_name,&lt;br /&gt;
	name_from_code = name_from_code,&lt;br /&gt;
&lt;br /&gt;
	_is_code = _is_code,														-- entry point from another module&lt;br /&gt;
	}&lt;/div&gt;</summary>
		<author><name>imported&gt;WOSlinker</name></author>
	</entry>
</feed>