Module:In lang

require ('Module:No globals');

--[[--< I N _ L A N G >

implements

Module entry point from an

(in )

]]

local function in_lang (frame) local getArgs = require ('Module:Arguments').getArgs; local synonym_table = mw.loadData ('Module:Lang/ISO 639 synonyms');				-- ISO 639-2/639-2T code translation to 639-1 code local args = getArgs(frame); local list = {}; local cats = {}; local maint_msgs = {}; if not args[1] then local template = (args['template'] and table.concat ({': '})) or '';	-- make template name (if provided by the template) return table.concat ({'error: ', template, 'missing language tag '}); end

local module = 'Module:Lang' .. (frame:getTitle:match ('/sandbox') or '');	-- if this module is the sandbox, local name_from_tag = require (module)._name_from_tag;						-- use Module:Lang/sandbox; Module:Lang else

local namespace = mw.title.getCurrentTitle.namespace;						-- used for categorization local this_wiki_lang = mw.language.getContentLanguage.code;				-- get this wiki's language code

for i, lang in ipairs (args) do		local code = args[i]:lower; local t = {code, ['link'] = args['link'], ['template'] = args['template']};	-- build an 'args' table lang = name_from_tag (t)												-- get the language name table.insert (list, lang)												-- add this language or error message to the list

if 'ca-valencia' ~= code then											-- except for valencian code = code:match ('^%a%a%a?%f[^%a]');								-- strip off region, script, and variant tags so that they aren't used to make category names end if synonym_table[code] then												-- if 639-2/639-2T code has a 639-1 synonym if (0 == namespace) then table.insert (cats, table.concat ({''})); end table.insert (maint_msgs, ' ') table.insert (maint_msgs, table.concat ({'code: ', code, ' promoted to code: ', synonym_table[code]})); table.insert (maint_msgs, ' ;'); code = synonym_table[code];											-- use the synonym end

if (0 == namespace) then												-- when in article space if lang:find ('error') then											-- add error category (message provided by Module:Lang) table.insert (cats, ''); elseif this_wiki_lang ~= code then									-- categorize article only when code is not this wiki's language code if lang:match ('%[%[.-|.-%]%]') then							-- wikilinked individual language name lang = lang:match ('%[%[.-|(.-)%]%]'); elseif lang:match ('%[%[.-%]%]') then							-- wikilinked collective languages name lang = lang:match ('%[%[(.-)%]%]'); end																-- neither of these then plain-text language name

if lang:find ('languages') then									-- add appropriate language-name category table.insert (cats, table.concat ({''})); else table.insert (cats, table.concat ({''})); end end end end local result = {' ('};							-- opening span and ( table.insert (result, 'yes' == args['cap'] and 'In ' or 'in ');				-- add capitalized or uncapitalized 'in' table.insert (result, mw.text.listToText (list, ', ', (2 < #list) and ', and ' or ' and ' ));	-- and concatenate the language list

table.insert (result, ') ');											-- add closing ) and closing span table.insert (result, table.concat (maint_msgs) or '');				-- add maint messages, if any table.insert (result, table.concat (cats));									-- add categories return table.concat (result);												-- make a big string and done end

----< E X P O R T E D  F U N C T I O N S >--

return { in_lang = in_lang, }