Module:Template translation: Difference between revisions
Richardpruen (talk | contribs) m 1 revision imported |
Richardpruen (talk | contribs) m 1 revision imported |
||
Line 36: | Line 36: | ||
and subpage ~= "sandbox" | and subpage ~= "sandbox" | ||
and subpage ~= "testcases" | and subpage ~= "testcases" | ||
and subpage ~= "init" | |||
and subpage ~= "preload" | |||
and subpage ~= "subpage" | |||
and subpage ~= "subpage2" | |||
and subpage ~= "sub-subpage" | |||
and subpage ~= "sub-sub-subpage" | |||
and subpage ~= "sub-sub-sub-subpage" | |||
then | then | ||
return subpage | return subpage | ||
Line 43: | Line 50: | ||
end | end | ||
--[[Get the last subpage of the | --[[Get the last subpage of an arbitrary page if it is a translation. | ||
To be used from templates. | |||
]] | |||
function this.getLanguageSubpage(frame) | |||
local title = frame and frame.args[1] | |||
if not title or title == '' then | |||
title = mw.title.getCurrentTitle() | |||
end | |||
return this._getLanguageSubpage(title) | |||
end | |||
--[[Get the last subpage of an arbitrary page if it is a translation. | |||
To be used from Lua. | |||
]] | ]] | ||
function this. | function this._getLanguageSubpage(title) | ||
if type(title) == 'string' then | |||
title = mw.title.new(title) | |||
end | |||
if not title then | |||
-- invalid title | |||
return mw.language.getContentLanguage():getCode() | |||
end | |||
--[[This code does not work in all namespaces where the Translate tool works. | --[[This code does not work in all namespaces where the Translate tool works. | ||
-- It works in the main namespace on Meta because it allows subpages there | -- It works in the main namespace on Meta because it allows subpages there | ||
Line 58: | Line 84: | ||
-- bug of Meta-Wiki. The work-around is to split the full title and then | -- bug of Meta-Wiki. The work-around is to split the full title and then | ||
-- get the last titlepart. | -- get the last titlepart. | ||
local subpage = | local subpage = title.subpageText | ||
--]] | --]] | ||
local titleparts = mw.text.split(title.fullText, '/') | |||
local subpage = titleparts[#titleparts] | |||
return this. | return this.checkLanguage(subpage, mw.language.getContentLanguage():getCode()) | ||
end | |||
--[[Get the last subpage of the current page if it is a translation. | |||
]] | |||
function this.getCurrentLanguageSubpage() | |||
return this._getLanguageSubpage(mw.title.getCurrentTitle()) | |||
end | |||
--[[Get the first part of the language code of the subpage, before the '-'. | |||
]] | |||
function this.getMainLanguageSubpage() | |||
parts = mw.text.split( this.getCurrentLanguageSubpage(), '-' ) | |||
return parts[1] | |||
end | end | ||
Line 69: | Line 108: | ||
]] | ]] | ||
function this.getFrameLanguageSubpage(frame) | function this.getFrameLanguageSubpage(frame) | ||
return this._getLanguageSubpage(frame:getParent():getTitle()) | |||
end | end | ||
Line 134: | Line 171: | ||
]] | ]] | ||
local title | local title | ||
local namespace = args[' | local namespace = args['tntns'] or '' | ||
if (namespace ~= '') -- Checks for | if (namespace ~= '') -- Checks for tntns parameter for custom ns. | ||
then | then | ||
title = this.title(namespace, pagename) -- Costly | title = this.title(namespace, pagename) -- Costly | ||
Line 152: | Line 189: | ||
if (subpage == '') | if (subpage == '') | ||
then | then | ||
subpage = this. | subpage = this.getCurrentLanguageSubpage() | ||
end | end | ||
if (subpage == '') | if (subpage == '') | ||
Line 236: | Line 273: | ||
end | end | ||
arguments['template'] = title -- override the existing parameter of the base template name supplied with the full name of the actual template expanded | arguments['template'] = title -- override the existing parameter of the base template name supplied with the full name of the actual template expanded | ||
arguments[' | arguments['tntns'] = nil -- discard the specified namespace override | ||
arguments['uselang'] = args['uselang'] -- argument forwarded into parent frame | arguments['uselang'] = args['uselang'] -- argument forwarded into parent frame | ||
arguments['noshift'] = args['noshift'] -- argument forwarded into parent frame | arguments['noshift'] = args['noshift'] -- argument forwarded into parent frame | ||
return frame:expandTemplate{title = ':' .. title, args = arguments} | 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 | end | ||
return this | return this |