Module:In lang
Appearance
![]() | This Lua module is used on approximately 374,000 pages, or roughly 1% of all pages. To avoid major disruption and server load, any changes should be tested in the module's /sandbox or /testcases subpages, or in your own module sandbox. The tested changes can be added to this page in a single edit. Consider discussing changes on the talk page before implementing them. |
![]() | This module depends on the following other modules: |
This module implements {{In lang}}
.
require('strict');--[[--------------------------< _ I N _ L A N G >--------------------------------------------------------------implements {{in lang}}Module entry point from another module|link=yes - creates wikilinked language names|template=<template name> - customizes error messages created by Module:lang|list-cats=yes - documentation tool returns language-category names of cats populated by this template<span class="languageicon">(in <language>)</span>]]localfunction_in_lang(args)localyesno=require('Module:Yesno')localsynonym_table=mw.loadData('Module:Lang/ISO 639 synonyms');-- ISO 639-2/639-2T code translation to 639-1 codelocallist_cats='yes'==args['list-cats'];-- make a booleanlocallist={};localcats={};localmaint_msgs={};ifnotargs[1]thenlocaltemplate=(args['template']andtable.concat({'{{',args['template'],'}}: '}))or'';-- make template name (if provided by the template)returntable.concat({'<span style=\"color:#d33\">error: ',template,'missing language tag</span>'});endlocalmodule='Module:Lang'..(mw.getCurrentFrame():getTitle():match('/sandbox')or'');-- if this module is the sandbox,localname_from_tag=require(module)._name_from_tag;-- use Module:Lang/sandbox; Module:Lang elselocalnamespace=mw.title.getCurrentTitle().namespace;-- used for categorizationlocalthis_wiki_lang=mw.language.getContentLanguage().code;-- get this wiki's language codelocaloverride_t=mw.loadData('Module:Lang/data').override;-- this table holds IETF tag/name definitions known to Module:Langfori,langinipairs(args)dolocalcode=args[i]:lower();localt={code,['link']=args['link'],['template']=args['template']};-- build an 'args' tablelang=name_from_tag(t)-- get the language nametable.insert(list,lang)-- add this language or error message to the listifcode:find('%-')andnotoverride_t[code]then-- except for the IETF tags listed in <override_t>code=code:match('^%a%a%a?%f[^%a]');-- strip off region, script, and variant subtags so that they aren't used to make category namesendifsynonym_table[code]then-- if 639-2/639-2T code has a 639-1 synonymif(0==namespace)andnotlist_catsthen-- when listing cats don't include this cat; TODO: right choice?table.insert(cats,table.concat({'[[Category:Lang and lang-xx code promoted to ISO 639-1|',code..']]'}));endtable.insert(maint_msgs,' <span class="lang-comment" style="font-style:normal; display:none; color:#33aa33; margin-left:0.3em">')table.insert(maint_msgs,table.concat({'code: ',code,' promoted to code: ',synonym_table[code]}));table.insert(maint_msgs,'</span>;');code=synonym_table[code];-- use the synonymendif(0==namespace)orlist_catsthen-- when in article spaceiflang:find('[Ee]rror')then-- add error category (message provided by Module:Lang)ifnotlist_catsthen-- don't include this cat when listing cats; TODO: right choice?table.insert(cats,'[[Category:in lang template errors]]');endelseifthis_wiki_lang~=code:match('^%a%a%a?')then-- categorize article only when code is not this wiki's language code or variants thereofiflang:match('%[%[.-|.-%]%]')then-- wikilinked individual language namelang=lang:match('%[%[.-|(.-)%]%]');elseiflang:match('%[%[.-%]%]')then-- wikilinked collective languages namelang=lang:match('%[%[(.-)%]%]');end-- neither of these then plain-text language nameiflang:find('languages')then-- add appropriate language-name categorytable.insert(cats,table.concat({'[[Category:Articles with sources in ',lang,' (',code,')]]'}));elsetable.insert(cats,table.concat({'[[Category:Articles with ',lang,'-language sources (',code,')]]'}));endendendendiflist_catsthenlocalcats=table.concat(cats,', '):gsub('[%[%]]','');-- make a string of categories and then strip wikilink markupreturncatsendlocalcapBoolean=yesno(args['cap'])oryesno(args['caps'])localresult={'<span class="languageicon">('};-- opening span and (table.insert(result,capBooleanand'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 listtable.insert(result,')</span>');-- add closing ) and closing spantable.insert(result,table.concat(maint_msgs)or'');-- add maint messages, if anytable.insert(result,table.concat(cats));-- add categoriesreturntable.concat(result);-- make a big string and doneend--[[--------------------------< I N _ L A N G >----------------------------------------------------------------implements {{in lang}}Module entry point from an {{#invoke:lang/utilities/sanbox|in_lang|<code>|<code2>|<code3>|<code...>|link=yes|template=in lang|list-cats=yes}}]]localfunctionin_lang(frame)localargs=require('Module:Arguments').getArgs(frame);return_in_lang(args);end--[[--------------------------< E X P O R T E D F U N C T I O N S >------------------------------------------]]return{in_lang=in_lang,-- module entry from {{#invoke:}}_in_lang=_in_lang,-- module entry from another module}