Jump to content
Menú alternativo
Alternar el menú de preferencias
Menú alternativo personal
No has accedido
Tu dirección IP será visible si haces alguna edición

La documentación para este módulo puede ser creada en Módulo:Autotranslate/doc

  --[[
  __  __           _       _           _         _        _                       _       _       
 |  \/  | ___   __| |_   _| | ___ _   / \  _   _| |_ ___ | |_ _ __ __ _ _ __  ___| | __ _| |_ ___ 
 | |\/| |/ _ \ / _` | | | | |/ _ (_) / _ \| | | | __/ _ \| __| '__/ _` | '_ \/ __| |/ _` | __/ _ \
 | |  | | (_) | (_| | |_| | |  __/_ / ___ \ |_| | || (_) | |_| | | (_| | | | \__ \ | (_| | ||  __/
 |_|  |_|\___/ \__,_|\__,_|_|\___(_)_/   \_\__,_|\__\___/ \__|_|  \__,_|_| |_|___/_|\__,_|\__\___|
 
 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)

	-- find base page
	local base = args.base
	args.base = nil
	assert(base and  #base>0, 'Base page not provided for autotranslate' )
	if not mw.ustring.find(base,':') then   -- if base page does not indicate namespace
		base = 'Template:' .. base          -- than assume it is a template 
	end
 
	-- find base template language subpage
	local page = args.default  -- default page if provided or nil otherwise
	for _, language in ipairs(langList) do
		if mw.title.new(base .. '/' .. language).exists then
			page =  base .. '/' .. language -- returns only the page
			break
		end
	end
	assert(page, string.format('No fallback page found for autotranslate (base=[[%s]], lang=%s)', base, args.lang))
 
	-- Transclude {{page |....}} with template arguments the same as the ones passed to {{autotranslate}} template.
	return frame:expandTemplate{ title = page, args = args}
end

return p