×
Create a new article
Write your page title here:
We currently have 3 articles on Ballmedia Commons. Type your article name above or create one of the articles listed here!



    Ballmedia Commons

    Module:Autotranslate

    Documentation for this module may be created at Module: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
    
    Cookies help us deliver our services. By using our services, you agree to our use of cookies.
    Cookies help us deliver our services. By using our services, you agree to our use of cookies.