Difference between revisions of "Module:Template translation"
m
debugging subpage (currently not working)
>Guillom m (check for apostrophes before isKnownLanguageTag) |
>Verdy p m (debugging subpage (currently not working)) |
||
Line 1: | Line 1: | ||
local | local this = {} | ||
function | function this.getLanguageSubpage() | ||
--[[ If on a translation subpage (like Foobar/de), this function renders | -- Get the last subpage (this function isolated for debugging purpose) | ||
local subpage = mw.title.getCurrentTitle().subpageText | |||
return subpage | |||
end | |||
function this.renderTranslatedTemplate(frame) | |||
--[[If on a translation subpage (like Foobar/de), this function renders | |||
a given template in the same language, if the translation is available. | a given template in the same language, if the translation is available. | ||
Otherwise, the template is rendered in its default language, without | Otherwise, the template is rendered in its default language, without | ||
Line 8: | Line 14: | ||
This is aimed at replacing the current implementation of Template:TNT. | This is aimed at replacing the current implementation of Template:TNT. | ||
]] | ]] | ||
local template = frame.args['template'] | local template = frame.args['template'] | ||
local langcode = '/en' | local langcode = '/en' | ||
local namespace = 'Template:' | local namespace = 'Template:' | ||
-- Get the last subpage | -- Get the last subpage | ||
local subpage = | local subpage = this.getLanguageSubpage() | ||
--[[Check whether the template is actually in the Template namespace, or | |||
--[[ Check whether the template 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 templateFullTitle = mw.title.new( template, 'Template' ) | local templateFullTitle = mw.title.new(template, 'Template') | ||
if (templateFullTitle.id == 0) | |||
then | |||
namespace = ':' | |||
end | |||
--[[If the subpage is a valid language code, check if a translation of the | |||
--[[ If the subpage is a valid language code, check if a translation of the | |||
template exists in that language; if so, put it in langcode. | template exists in that language; if so, put it in langcode. | ||
Check first if there's an apostrophe, because they break the | Check first if there's an apostrophe, because they break the | ||
isKnownLanguageTag function. | isKnownLanguageTag function. | ||
]] | ]] | ||
if (type(mw.ustring.match(subpage, "'")) == nil) | |||
if (type (mw.ustring.match( subpage, "'" )) == nil ) | |||
then | then | ||
if ( mw.language.isKnownLanguageTag( subpage ) ) | if (mw.language.isKnownLanguageTag(subpage)) | ||
then | then | ||
local translation = mw.title.new( namespace..template..'/'..subpage ) | local translation = mw.title.new(namespace .. template .. '/' .. subpage) | ||
if ( translation.id ~= 0) | if (translation.id ~= 0) | ||
then | then | ||
langcode='/'..subpage | langcode = '/' .. subpage | ||
end | end | ||
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 | ||
local arguments = {} | local arguments = {} | ||
for k, v in pairs( frame.args ) do | for k, v in pairs(frame.args) do | ||
arguments[k] = v | arguments[k] = v | ||
end | end | ||
-- Render the template | -- Render the template | ||
return frame:expandTemplate{ title = namespace..template..langcode, args = arguments } | return frame:expandTemplate{title = namespace .. template .. langcode, args = arguments} | ||
end | end | ||
return | return this |