Not logged in
Talk
Contributions
Log in
Navigation
Main page
Recent changes
Random page
Upload file
Module
Discussion
Edit
View history
Editing
Module:Mw lang
From Body Communication
Jump to:
navigation
,
search
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('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 >-------------------------------------------------- local 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 and target language code is valid; error message string else second return value is a boolean used by is_name(); true when name is found; false else ]] local function _code_from_name (args) 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]); 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 if name_code_list[name] then return name_code_list[name], true; -- returns code when name is found and true for is_name() else return err_msg_make ('language name: ' .. name), false; -- return error message when name not found and false for is_name() end 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 and target language code is valid; 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 result, _ = _code_from_name (args); -- suppress true/false return used by is_name() return result; end --[[--------------------------< I S _ N A M E >---------------------------------------------------------------- return true if <name> is a mediawiki recognized language name; false else args[1]: language name args[2]: optional target language code; instructs _code_from_name to fetch language name list in 'this' language defaults to local wiki's language; when this parameter not valid, language name is assumed to be not valid ]] local function is_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 _, result = _code_from_name (args); -- suppress code return used by code_from_name() return result and true or nil; end --[[--------------------------< E X P O R T E D F U N C T I O N S >------------------------------------------ ]] return { code_from_name = code_from_name, is_code = is_code, is_name = is_name, name_from_code = name_from_code, _is_code = _is_code, -- entry point from another module }
Summary:
Please note that all contributions to Body Communication are considered to be released under the Creative Commons Attribution-NonCommercial-ShareAlike 4.0 International License (see
Body Communication:Copyrights
for details). If you do not want your writing to be edited mercilessly and redistributed at will, 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.
Do not submit copyrighted work without permission!
Cancel
Editing help
(opens in new window)
Template used on this page:
Module:Mw lang/doc
(
edit
)
Tools
What links here
Related changes
Special pages
Page information