Module:Template translation: Difference between revisions

m
16 revisions imported
m (supplement for TNTN (to be used to solve self-recursions of TNT, with translatable templates trying to transclude other translatable templates also with TNT))
m (16 revisions imported)
 
(28 intermediate revisions by 18 users not shown)
Line 22:
case-insensitive; they are not "SupportedLanguages" for MediaWiki, so
they are not "KnownLanguageTags" for MediaWiki).
To be more restrictive, we exclude any character that is not
* that is not ASCII and not a lowercase letter, minus-hyphen, or digit, and any code
that or does not start by a letter or does not finish by a letter or digit.;
of* or that has more than 8 characters between hyphens, or has two hyphens.;
* or that has two hyphens;
* or with specific uses in template subpages and unusable as languages.
--]]
or string.find(subpage, "^[%l][%-%d%l]*[%d%l]$") ~= nil
and string.find(subpage, "[%d%l][%d%l][%d%l][%d%l][%d%l][%d%l][%d%l][%d%l][%d%l]") == nil
and string.find(subpage, "%-%-") == nil
and subpage ~= "doc"
and subpage ~= "layout"
and subpage ~= "sandbox"
and subpage ~= "testcases"
then
return subpage
Line 40 ⟶ 46:
]]
function this.getLanguageSubpage()
--[[This code does not work ibin all namespaces where the Translate tool works.
-- It works in the main namespace on Meta because it allows subpages there
-- It would not work in the main namespace of English Wikipedia (but the
Line 57 ⟶ 63:
local subpage = titleparts[#titleparts]
return this.checkLanguage(subpage, '')
end
 
--[[Get the first part of the language code of the subpage, before the '-'.
]]
function this.getMainLanguageSubpage()
parts = mw.text.split( this.getLanguageSubpage(), '-' )
return parts[1]
end
 
Line 119 ⟶ 132:
to transclude other translable templates (such as Tnavbar).
]]
function this.getTranslatedTemplate(frame, withStatus)
local args = frame.args
local pagename = args['template']
Line 128 ⟶ 141:
]]
local title
local namespace = args['namespacetntns'] or ''
if (namespace ~= '') -- Checks for namespacetntns parameter for custom ns.
then
title = this.title(namespace, pagename) -- Costly
Line 172 ⟶ 185:
end
-- At this point the title should exist
if withStatus then
return title.prefixedText, title.id ~= nil
-- status returned to Lua function below
return title.prefixedText, title.id ~= nil
else
-- returned directly to MediaWiki
return title.prefixedText
end
end
 
Line 187 ⟶ 206:
]]
function this.renderTranslatedTemplate(frame)
local title, found = this.getTranslatedTemplate(frame, true)
-- At this point the title should exist prior to performing the expansion
-- of the template, otherwise render a red link to the missing page
Line 199 ⟶ 218:
-- Copy args pseudo-table to a proper table so we can feed it to expandTemplate.
-- Then render the pagename.
local args = frame.args
local pargs = (frame:getParent() or {}).args
local arguments = {}
Line 223 ⟶ 243:
end
arguments['template'] = title -- override the existing parameter of the base template name supplied with the full name of the actual template expanded
arguments['namespacetntns'] = nil -- discard the specified namespace override
arguments['uselang'] = args['uselang'] -- argument forwarded into parent frame
arguments['noshift'] = args['noshift'] -- argument forwarded into parent frame
return frame:expandTemplate{title = ':' .. title, args = arguments}
end
 
--[[A helper for mocking TNT in Special:TemplateSandbox. TNT breaks
TemplateSandbox; mocking it with this method means templates won't be
localized but at least TemplateSandbox substitutions will work properly.
Won't work with complex uses.
]]
function this.mockTNT(frame)
local pargs = (frame:getParent() or {}).args
local arguments = {}
for k, v in pairs(pargs) do
-- numbered args >= 1 need to be shifted
local n = tonumber(k) or 0
if (n > 0)
then
if (n >= 2)
then
arguments[n - 1] = v
end
else
arguments[k] = v
end
end
if not pargs[1]
then
return ''
end
return frame:expandTemplate{title = 'Template:' .. pargs[1], args = arguments}
end