Home
Random
Recent changes
Special pages
Community portal
Preferences
About Stockhub
Disclaimers
Search
User menu
Talk
Contributions
Create account
Log in
Editing
Module:In lang/sandbox
Warning:
You are not logged in. Your IP address will be publicly visible if you make any edits. If you
log in
or
create an account
, your edits will be attributed to your username, along with other benefits.
Anti-spam check. Do
not
fill this in!
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> ]] local function _in_lang (args) local synonym_table = mw.loadData ('Module:Lang/ISO 639 synonyms'); -- ISO 639-2/639-2T code translation to 639-1 code local list_cats = 'yes' == args['list-cats']; -- make a boolean local list = {}; local cats = {}; local maint_msgs = {}; if not args[1] then local template = (args['template'] and table.concat ({'{{', args['template'], '}}: '})) or ''; -- make template name (if provided by the template) return table.concat ({'<span style=\"font-size:100%; font-style:normal;\" class=\"error\">error: ', template, 'missing language tag</span>'}); end local module = 'Module:Lang' .. (mw.getCurrentFrame():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) and not list_cats then -- 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 ..']]'})); end table.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 synonym end if (0 == namespace) or list_cats then -- when in article space if lang:find ('error') then -- add error category (message provided by Module:Lang) if not list_cats then -- don't include this cat when listin cats; TODO: right choice? table.insert (cats, '[[Category:in lang template errors]]'); end 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 ({'[[Category:Articles with ', lang, '-collective sources (', code, ')]]'})); else table.insert (cats, table.concat ({'[[Category:Articles with ', lang, '-language sources (', code, ')]]'})); end end end end if list_cats then local cats = table.concat (cats, ', '):gsub ('[%[%]]', ''); -- make a string of categories and then strip wikilink markup return cats end local result = {'<span class="languageicon">('}; -- 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, ')</span>'); -- 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 --[[--------------------------< 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}} ]] local function in_lang (frame) local args = require ('Module:Arguments').getArgs (frame); return _in_lang (args); end --[[--------------------------< N A T I V E _ N A M E _ L A N G >---------------------------------------------- experimental code; may not be retained implements combined is_ietf_tag() and tag_from_name() in Module:Lang for various infoboxen that support a |native_name_lang= parameter. if {{{1}}} is a valid ietf language tag, returns that tag; if {{{1}}} is a properly spelled (case agnostic) language name, returns the ietf language tag associated with that name error messages else entry point from an {{#invoke:Lang/utilities/sandbox|native_name_lang|<language name or tag>|template=<template name>}} ]] local function native_name_lang (frame) local lang_module = require ('Module:Lang/sandbox'); local getArgs = require ('Module:Arguments').getArgs; local args = getArgs(frame); if lang_module._is_ietf_tag (args[1]) then return args[1]; -- if a tag, return the tag else return lang_module._tag_from_name (args); -- not a tag, attempt to get a tag from the args[1] input value; return tag or error message end end --[[--------------------------< C A T _ T E S T >-------------------------------------------------------------- temporary test code to be deleted support for {{Category articles containing non-English-language text}} that tests the language parameters provided to that template against the category name. {{#invoke:Lang/utilities/sandbox|cat_test}} ]] local function cat_test (frame) local lang_module = require ('Module:Lang'); local args = require ('Module:Arguments').getArgs (frame); local err = false; -- boolean set true when an error is detected; one error message only local cat_page_title = mw.title.getCurrentTitle().text; -- get the category title local lang_name; local index; -- positional parameter index local lc_lang_name, lc_lang_name_col; -- individual and collective cat names are different local lc_title; for i, v in ipairs (args) do -- pairs because ipairs stops at nil value (empty positional parameter) if 'number' == type (i) and args[i] then -- only positional parameters and only when they have a value if lang_module._is_ietf_tag (v) then -- see if this thing 'v' is an ietf tag local t = {v}; -- it is so make an args table for _name_from_tag() lang_name = lang_module._name_from_tag (t); -- get the language name else lang_name = v; -- not a valid tag so presume it is a name end mw.logObject (lang_name, 'lang_name') lc_lang_name = table.concat ({ -- build a string to match category name form for individual and macro languages 'containing ', mw.ustring.lower (lang_name); -- to lowercase for comparisons '-language', }); mw.logObject (lc_lang_name, 'lc_lang_name') lc_lang_name_col = table.concat ({ -- build a string to match category name form for collective languages 'the ', mw.ustring.lower (lang_name); -- to lowercase for comparisons ' ', -- next word is languages which is included in the name retrieved from Module:lang }); mw.logObject (lc_lang_name_col, 'lc_lang_name_col') lc_title = mw.ustring.lower (cat_page_title); if not mw.ustring.find (lc_title, lc_lang_name, 1, true) and -- if lang name not found in cat title not mw.ustring.find (lc_title, lc_lang_name_col, 1, true) then err = true; -- set a flag index = i; -- remember which positional param failed the test break; -- abandon the search on first error end end end -- create error message and done return err and table.concat ({ '<span style=\"font-size:100%; font-style:normal;\" class=\"error\">error: language: ', lang_name, -- the thing that we think is the language name ' from {{{', index, -- the positional parameter index: 1 in {{{1}}} '}}} (', args[index], -- the content of the positional parameter ') does not match category title.</span>[[Category:Lang and lang-xx template errors]]' }) or nil; 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:}} native_name_lang = native_name_lang, -- experimental code; may not be retained _in_lang = _in_lang, -- module entry from another module cat_test = cat_test, -- temporary test code to be deleted }
Summary:
Please note that all contributions to Stockhub may be edited, altered, or removed by other contributors. If you do not want your writing to be edited mercilessly, then do not submit it here.
You are also promising us that you wrote this yourself, or copied it from a public domain or similar free resource (see
Stockhub:Copyrights
for details).
Do not submit copyrighted work without permission!
Cancel
Editing help
(opens in new window)
Template used on this page:
Module:In lang/sandbox/doc
(
edit
)