Module:Template translation: Difference between revisions

Content added Content deleted
m (debug version in separate sandbox)
m (fix the script error when TNT is used on a pagename still without any /en subpage)
Line 58: Line 58:
]]
]]
function this.renderTranslatedTemplate(frame)
function this.renderTranslatedTemplate(frame)
local template = frame.args['template']
local args = frame.args
local pagename = args['template']

--[[Check whether the template is actually in the Template namespace, or
--[[Check whether the pagename is actually in the Template namespace, or
if we're transcluding a main-namespace page.
if we're transcluding a main-namespace page.
(added for backward compatibility of Template:TNT)
(added for backward compatibility of Template:TNT)
]]
]]
local namespace = 'Template'
local title
if (frame.args['namespace']~='')--checks for namespace parameter for custom ns
local namespace = args['namespace'] or ''
if (namespace ~= '') -- Checks for namespace parameter for custom ns.
then
then
namespace = frame.args['namespace']
title = mw.title.new(pagename, namespace) -- Costly
else--supposes that set page is in ns10
else -- Supposes that set page is in ns10.
local templateFullTitle = mw.title.new(template, namespace)
title = mw.title.new(pagename, 'Template') -- Costly
if (templateFullTitle.id == 0)
if (title.id == 0)
then -- not found in the Template namespace, assume the main namespace
then -- not found in the Template namespace, assume the main namespace (for backward compatibility)
namespace = ''
title = mw.title.new(pagename, '') -- Costly
end
end
end
end
-- Get the last subpage and check if it matches a known language code
-- At this point the title should exist, otherwise render a red link to the missing page
if (title.id == 0)
local langcode = 'en' -- default language template subpage to render
then
return '[[' .. title.prefixedText .. ']]'
end
-- Get the last subpage and check if it matches a known language code.
local subpage = this.getLanguageSubpage()
local subpage = this.getLanguageSubpage()
if (subpage ~= '')
if (subpage ~= '')
then
then
-- Check if a translation of the template exists in that language; if so, put it in langcode
-- Check if a translation of the pagename exists in that language
local translation = mw.title.new(template .. '/' .. subpage, namespace)
local newtitle = mw.title.new(title.prefixedText .. '/' .. subpage) -- Costly
if (translation.id ~= 0)
if (newtitle.id == 0)
then
-- Check if a translation of the pagename exists in English
newtitle = mw.title.new(title.prefixedText .. '/' .. 'en') -- Costly
end
-- Use the translation when it exists
if (newtitle.id ~= 0)
then
then
langcode = subpage
title = newtitle
end
end
end
end

-- Copy args pseudo-table to a proper table so we can feed it to expandTemplate
-- Copy args pseudo-table to a proper table so we can feed it to expandTemplate.
-- Then render the template
-- Then render the pagename.
local arguments = {}
local arguments = {}
for k, v in pairs((frame:getParent() or {}).args) do
for k, v in pairs((frame:getParent() or {}).args) do
Line 105: Line 118:
end
end
end
end
return frame:expandTemplate{title = namespace .. ':' .. template .. '/' .. langcode, args = arguments}
return frame:expandTemplate{title = title, args = arguments}
end
end