m (Fulfilling edit request by OmegaFallon. Thanks for helping!) |
m (1 revision imported) |
||
(2 intermediate revisions by 2 users not shown) | |||
Line 49: | Line 49: | ||
-- get language fallback list | -- get language fallback list | ||
if not args.lang or not mw.language.isSupportedLanguage(args.lang) then | if not args.lang or not mw.language.isSupportedLanguage(args.lang) then | ||
args.lang = frame:callParserFunction( "int", "lang" ) | args.lang = frame:callParserFunction( "int", "lang" ) -- get user's chosen language | ||
end | end | ||
local langList = mw.language.getFallbacksFor(args.lang) | local langList = mw.language.getFallbacksFor(args.lang) | ||
table.insert(langList,1,args.lang) | table.insert(langList,1,args.lang) -- user's language will be the first one to check | ||
-- find base page | -- find base page | ||
local base = args.base | local base = args.base | ||
args.base = nil | args.base = nil -- blank it so it is not passed to language sub-templates | ||
assert(base and #base>0, 'Base page not provided for autotranslate' ) | assert(base and #base>0, 'Base page not provided for autotranslate' ) | ||
-- Local function for expanding a template that can be pcall()ed: call the template | |||
-- with the same template arguments as the ones passed to {{autotranslate}} template. | |||
local function expandTemplate(title) | |||
return frame:expandTemplate{ title = title, args = args } | |||
end | end | ||
-- find base template language subpage | -- find base template language subpage | ||
local | local success, res | ||
for _, language in ipairs(langList) do | for _, language in ipairs(langList) do | ||
success, res = pcall(expandTemplate, base .. '/' .. language) | |||
if success then | |||
break | break | ||
end | end | ||
end | end | ||
local err_msg = 'No fallback page found for autotranslate (base=[[:%s]], lang=%s)' | |||
if (not success) then | |||
-- | assert(args.default, string.format(err_msg, base, args.lang)) | ||
return | success, res = pcall(expandTemplate, args.default) | ||
assert(success, string.format(err_msg, base, args.default)) | |||
end | |||
-- If this if the base page being translateda | |||
if (mw.title.getCurrentTitle().fullText==base) then | |||
-- English language is the last fallback language for most languages, if | |||
-- nothing else there should be at least an english subpage | |||
local en_exist = mw.title.new(base .. '/en').exists | |||
assert(en_exist, string.format(err_msg, base, 'en')) | |||
if (mw.site.siteName=='Wikimedia Commons') then | |||
res = res .. '\n[[Category:Autotranslated templates|' .. base .. ']]' | |||
end | |||
end | |||
return res | |||
end | end | ||
return p | return p |
Latest revision as of 12:26, 19 April 2024
Warning: | Do not edit. This page is maintained by an automated tool. All edits should be done at commons.wikimedia.org. (translate this warning) |
This module is rated as ready for general use. It has reached a mature form and is thought to be relatively bug-free and ready for use wherever appropriate. It is ready to mention on help pages and other Wikipedia resources as an option for new users to learn. To reduce server load and bad output, it should be improved by sandbox testing rather than repeated trial-and-error editing. |
This module is subject to page protection. It is a highly visible module in use by a very large number of pages, or is substituted very frequently. Because vandalism or mistakes would affect many pages, and even trivial editing might cause substantial load on the servers, it is protected from editing. |
Code for {{Autotranslate}}. Also used for {{Autotranslate/clone 1}}, {{Autotranslate/clone 2}}. {{Autotranslate/clone 3}}, {{Autotranslate/clone 4}}, {{Autotranslate/clone 5}}, {{Documentation subpage}}.
--[[ __ __ _ _ _ _ _ _ _ | \/ | ___ __| |_ _| | ___ _ / \ _ _| |_ ___ | |_ _ __ __ _ _ __ ___| | __ _| |_ ___ | |\/| |/ _ \ / _` | | | | |/ _ (_) / _ \| | | | __/ _ \| __| '__/ _` | '_ \/ __| |/ _` | __/ _ \ | | | | (_) | (_| | |_| | | __/_ / ___ \ |_| | || (_) | |_| | | (_| | | | \__ \ | (_| | || __/ |_| |_|\___/ \__,_|\__,_|_|\___(_)_/ \_\__,_|\__\___/ \__|_| \__,_|_| |_|___/_|\__,_|\__\___| Authors and maintainers: * User:Zolo - original version * User:Jarekt ]] -- local function to help normalize input arguments local function normalize_input_args(input_args, output_args) for name, value in pairs( input_args ) do if value ~= '' then -- nuke empty strings if type(name)=='string' then name=string.lower(name) end -- convert to lower case output_args[name] = value end end return output_args end -- initialize object to be returned local p = {} --[[ autotranslate This function is the core part of the Autotranslate template. Usage from a template: {{#invoke:autotranslate|autotranslate|base=|lang= }} Parameters: frame.args.base - base page name frame.args.lang - desired language (often user's native language) Error Handling: ]] function p.autotranslate(frame) -- switch to lowercase parameters to make them case independent local args = {} args = normalize_input_args(frame:getParent().args, args) args = normalize_input_args(frame.args, args) -- get language fallback list if not args.lang or not mw.language.isSupportedLanguage(args.lang) then args.lang = frame:callParserFunction( "int", "lang" ) -- get user's chosen language end local langList = mw.language.getFallbacksFor(args.lang) table.insert(langList,1,args.lang) -- user's language will be the first one to check -- find base page local base = args.base args.base = nil -- blank it so it is not passed to language sub-templates assert(base and #base>0, 'Base page not provided for autotranslate' ) -- Local function for expanding a template that can be pcall()ed: call the template -- with the same template arguments as the ones passed to {{autotranslate}} template. local function expandTemplate(title) return frame:expandTemplate{ title = title, args = args } end -- find base template language subpage local success, res for _, language in ipairs(langList) do success, res = pcall(expandTemplate, base .. '/' .. language) if success then break end end local err_msg = 'No fallback page found for autotranslate (base=[[:%s]], lang=%s)' if (not success) then assert(args.default, string.format(err_msg, base, args.lang)) success, res = pcall(expandTemplate, args.default) assert(success, string.format(err_msg, base, args.default)) end -- If this if the base page being translateda if (mw.title.getCurrentTitle().fullText==base) then -- English language is the last fallback language for most languages, if -- nothing else there should be at least an english subpage local en_exist = mw.title.new(base .. '/en').exists assert(en_exist, string.format(err_msg, base, 'en')) if (mw.site.siteName=='Wikimedia Commons') then res = res .. '\n[[Category:Autotranslated templates|' .. base .. ']]' end end return res end return p