Difference between revisions of "Module:Mw lang"
Jump to navigation
Jump to search
blackwiki>Trappist the monk |
blackwiki>Trappist the monk |
||
| Line 1: | Line 1: | ||
require('Module:No globals'); | require('Module:No globals'); | ||
| − | + | local getArgs = require('Module:Arguments').getArgs | |
| − | |||
| − | |||
| − | |||
| − | |||
| − | |||
| − | |||
| − | |||
| − | |||
| − | |||
| − | |||
| − | |||
| − | local | ||
| − | |||
| − | |||
| − | |||
| − | |||
| − | |||
| − | |||
| − | |||
| − | |||
| − | |||
| − | |||
| − | |||
| − | |||
| − | |||
| − | |||
| Line 41: | Line 15: | ||
local or require()d entry point | local or require()d entry point | ||
| − | return true if code is a mediawiki recognized code; false else | + | return true if <code> is a mediawiki recognized code; false else |
| − | code - language code to validate; expected to be lowercase without leading/trailing whitespace | + | <code> - language code to validate; expected to be lowercase without leading/trailing whitespace |
| − | target_lang_code - language code for target language; expected to be lowercase without leading/trailing whitespace | + | <target_lang_code> - language code for target language; expected to be valid; expected to be lowercase without leading/trailing whitespace |
| − | specifying target_lang_code may be a pointless exercise because of cldr fallback. For example, | + | specifying <target_lang_code> may be a pointless exercise because of cldr fallback. For example, |
mw.language.fetchLanguageName (crh, sq) -> Crimean Turkish | mw.language.fetchLanguageName (crh, sq) -> Crimean Turkish | ||
because the Albanian language definitions do not have an Albanian-language version of the language name | because the Albanian language definitions do not have an Albanian-language version of the language name | ||
| Line 53: | Line 27: | ||
local function _is_code (code, target_lang_code) | local function _is_code (code, target_lang_code) | ||
| − | code = mw.language.fetchLanguageName (code, target_lang_code | + | code = mw.language.fetchLanguageName (code, target_lang_code); |
return '' ~= code; | return '' ~= code; | ||
| − | |||
| − | |||
| − | |||
| − | |||
| − | |||
| − | |||
| − | |||
| − | |||
| − | |||
| − | |||
| − | |||
| − | |||
| − | |||
| − | |||
| − | |||
| − | |||
| − | |||
| − | |||
| − | |||
end | end | ||
| Line 95: | Line 50: | ||
target_lang_code = nil; -- unset as invalid | target_lang_code = nil; -- unset as invalid | ||
end | end | ||
| − | + | end | |
| − | target_lang_code = mw.getContentLanguage():getCode(); -- | + | if not target_lang_code then -- if nil because missing or empty or because invlaid and we set it nil |
| + | target_lang_code = mw.getContentLanguage():getCode(); -- use local wiki's language code | ||
end | end | ||
return target_lang_code, msg; -- target_lang_code is valid or nil; msg is nil or has an error message | return target_lang_code, msg; -- target_lang_code is valid or nil; msg is nil or has an error message | ||
| + | end | ||
| + | |||
| + | |||
| + | --[[--------------------------< I S _ C O D E >---------------------------------------------------------------- | ||
| + | |||
| + | module entry point | ||
| + | |||
| + | args[1]: language code -> <code> | ||
| + | args[2]: optional target language code; same as <target lang code> in {{#language:<code>|<target lang code>}}; defaults to the local wiki language | ||
| + | |||
| + | return true if <code> is a mediawiki recognized code; nil else | ||
| + | |||
| + | ]] | ||
| + | |||
| + | local function is_code (frame) | ||
| + | local args = getArgs (frame, { | ||
| + | valueFunc = function (key, value) | ||
| + | return (value and '' ~= value) and value:lower():gsub ('%s*(.-)%s*', '%1') or nil; | ||
| + | end | ||
| + | }); | ||
| + | local code = args[1]; | ||
| + | local target_lang_code = __validate_target_lang_code (args[2]); | ||
| + | |||
| + | return code and _is_code (code, target_lang_code) and true or nil; | ||
end | end | ||
| Line 117: | Line 97: | ||
local function name_from_code (frame) | local function name_from_code (frame) | ||
| − | local | + | local args = getArgs (frame, { |
| − | local | + | valueFunc = function (key, value) |
| − | + | return (value and '' ~= value) and value:lower():gsub ('%s*(.-)%s*', '%1') or nil; | |
| + | end | ||
| + | }); | ||
| + | local code = args[1]; | ||
if not code then | if not code then | ||
return err_msg_make ('code: (empty)'); | return err_msg_make ('code: (empty)'); | ||
end | end | ||
| − | target_lang_code, msg = __validate_target_lang_code ( | + | local target_lang_code, msg = __validate_target_lang_code (args[2]); |
if msg then | if msg then | ||
return msg; | return msg; | ||
| Line 146: | Line 129: | ||
local function code_from_name (frame) | local function code_from_name (frame) | ||
| − | local | + | local args = getArgs (frame, { |
| − | local | + | valueFunc = function (key, value) |
| − | + | return (value and '' ~= value) and value:lower():gsub ('%s*(.-)%s*', '%1') or nil; | |
| + | end | ||
| + | }); | ||
| + | local name = args[1]; | ||
if not name then | if not name then | ||
return err_msg_make ('name: (empty)'); | return err_msg_make ('name: (empty)'); | ||
end | end | ||
| − | target_lang_code, msg = __validate_target_lang_code ( | + | local target_lang_code, msg = __validate_target_lang_code (args[2]); |
| + | -- local msg; | ||
if msg then | if msg then | ||
return msg; | return msg; | ||
end | end | ||
| + | |||
| + | -- if not name then | ||
| + | -- return err_msg_make ('name: (empty)'); | ||
| + | -- end | ||
| + | |||
| + | -- target_lang_code, msg = __validate_target_lang_code (target_lang_code); | ||
| + | -- if msg then | ||
| + | -- return msg; | ||
| + | -- end | ||
local code_name_list = mw.language.fetchLanguageNames (target_lang_code, 'all'); -- get language code / name list in target_lang_code language indexed by language code | local code_name_list = mw.language.fetchLanguageNames (target_lang_code, 'all'); -- get language code / name list in target_lang_code language indexed by language code | ||
Revision as of 19:28, 28 August 2020
| This module depends on the following other modules: |
| This Lua module is used on approximately 61,000 pages and changes may be widely noticed. Test changes in the module's /sandbox or /testcases subpages. Consider discussing changes on the talk page before implementing them.
Transclusion count updated automatically (see documentation). |
Implements {{mw lang}}
require('Module:No globals');
local getArgs = require('Module:Arguments').getArgs
--[[--------------------------< E R R _ M S G _ M A K E >------------------------------------------------------
]]
local function err_msg_make (msg)
return '<span class="error" style="font-size:100%">error: ' .. msg .. ' not recognized</span>'
end
--[[--------------------------< _ I S _ C O D E >--------------------------------------------------------------
local or require()d entry point
return true if <code> is a mediawiki recognized code; false else
<code> - language code to validate; expected to be lowercase without leading/trailing whitespace
<target_lang_code> - language code for target language; expected to be valid; expected to be lowercase without leading/trailing whitespace
specifying <target_lang_code> may be a pointless exercise because of cldr fallback. For example,
mw.language.fetchLanguageName (crh, sq) -> Crimean Turkish
because the Albanian language definitions do not have an Albanian-language version of the language name
]]
local function _is_code (code, target_lang_code)
code = mw.language.fetchLanguageName (code, target_lang_code);
return '' ~= code;
end
--[[--------------------------< _ _ V A L I D A T E _ T A R G E T _ L A N G _ C O D E >------------------------
validates target_lang_code as a know language code; returns two values
when target_lang_code is valid, first return value holds target_lang_code; second return value is nil
when target_lang_code is invalid, first retrun value is nil; second return value has error message
if target_lang_code argument is nil, (missing or empty in the invoke) use local wiki's language code
]]
local function __validate_target_lang_code (target_lang_code)
local msg;
if target_lang_code then -- not missing or empty
if not _is_code (target_lang_code) then -- validate target_lang_code
msg = err_msg_make ('target language code: ' .. target_lang_code);
target_lang_code = nil; -- unset as invalid
end
end
if not target_lang_code then -- if nil because missing or empty or because invlaid and we set it nil
target_lang_code = mw.getContentLanguage():getCode(); -- use local wiki's language code
end
return target_lang_code, msg; -- target_lang_code is valid or nil; msg is nil or has an error message
end
--[[--------------------------< I S _ C O D E >----------------------------------------------------------------
module entry point
args[1]: language code -> <code>
args[2]: optional target language code; same as <target lang code> in {{#language:<code>|<target lang code>}}; defaults to the local wiki language
return true if <code> is a mediawiki recognized code; nil else
]]
local function is_code (frame)
local args = getArgs (frame, {
valueFunc = function (key, value)
return (value and '' ~= value) and value:lower():gsub ('%s*(.-)%s*', '%1') or nil;
end
});
local code = args[1];
local target_lang_code = __validate_target_lang_code (args[2]);
return code and _is_code (code, target_lang_code) and true or nil;
end
--[[--------------------------< N A M E _ F R O M _ C O D E >--------------------------------------------------
module entry point
args[1]: language code
args[2]: optional target language code; same as <target lang code> in {{#language:<code>|<target lang code>}}; defaults to the local wiki language
return language-name if language-code is a mediawiki recognized code; error message string else
returned language name not guarenteed to be in target_lang_code (if specified), because mw language lists are incomplete
]]
local function name_from_code (frame)
local args = getArgs (frame, {
valueFunc = function (key, value)
return (value and '' ~= value) and value:lower():gsub ('%s*(.-)%s*', '%1') or nil;
end
});
local code = args[1];
if not code then
return err_msg_make ('code: (empty)');
end
local target_lang_code, msg = __validate_target_lang_code (args[2]);
if msg then
return msg;
end
local name = mw.language.fetchLanguageName (code, target_lang_code); -- returns empty string if code not found
return '' ~= name and name or err_msg_make ('language code: ' .. code); -- return language name or error message
end
--[[--------------------------< C O D E _ F R O M _ N A M E >--------------------------------------------------
module entry point
args[1]: language name
args[2]: optional target language code; instruct this function to fetch language name list in 'this' language
return language-code if language-name is a mediawiki recognized name; error message string else
]]
local function code_from_name (frame)
local args = getArgs (frame, {
valueFunc = function (key, value)
return (value and '' ~= value) and value:lower():gsub ('%s*(.-)%s*', '%1') or nil;
end
});
local name = args[1];
if not name then
return err_msg_make ('name: (empty)');
end
local target_lang_code, msg = __validate_target_lang_code (args[2]);
-- local msg;
if msg then
return msg;
end
-- if not name then
-- return err_msg_make ('name: (empty)');
-- end
-- target_lang_code, msg = __validate_target_lang_code (target_lang_code);
-- if msg then
-- return msg;
-- end
local code_name_list = mw.language.fetchLanguageNames (target_lang_code, 'all'); -- get language code / name list in target_lang_code language indexed by language code
local name_code_list = {}; -- to hold language name / code list indexed by name
for k, v in pairs (code_name_list) do -- spin through the code / name list and
name_code_list[v:lower()] = k; -- make a name / code list
end
return name_code_list[name] or err_msg_make ('language name: ' .. name); -- returns code when name is found; error message else
end
--[[--------------------------< E X P O R T E D F U N C T I O N S >------------------------------------------
]]
return {
name_from_code = name_from_code, -- switching to names more like those function names used in Module:Lang
is_code = is_code,
code_from_name = code_from_name,
_is_code = _is_code, -- entry point from another module
}