Module:Template translation: Difference between revisions

m
1 revision imported
Mediawiki>Shirayuki
(add exceptions for Help:Subpages/subpage and friends)
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 50: Line 43:
end
end


--[[Get the last subpage of an arbitrary page if it is a translation.
--[[Get the last subpage of the current 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._getLanguageSubpage(title)
function this.getLanguageSubpage()
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 84: Line 58:
--  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 = title.subpageText
local subpage = mw.title.getCurrentTitle().subpageText
--]]
--]]
local titleparts = mw.text.split(title.fullText, '/')
    local titleparts = mw.text.split(mw.title.getCurrentTitle().fullText, '/')
local subpage = titleparts[#titleparts]
    local subpage = titleparts[#titleparts]
return this.checkLanguage(subpage, mw.language.getContentLanguage():getCode())
    return this.checkLanguage(subpage, '')
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 108: Line 69:
     ]]
     ]]
function this.getFrameLanguageSubpage(frame)
function this.getFrameLanguageSubpage(frame)
return this._getLanguageSubpage(frame:getParent():getTitle())
    local titleparts = mw.text.split(frame:getParent():getTitle(), '/')
    local subpage = titleparts[#titleparts]
    return this.checkLanguage(subpage, '')
end
end


Line 171: Line 134:
         ]]
         ]]
     local title
     local title
     local namespace = args['tntns'] or ''
     local namespace = args['namespace'] or ''
     if (namespace ~= '') -- Checks for tntns parameter for custom ns.
     if (namespace ~= '') -- Checks for namespace parameter for custom ns.
     then
     then
         title = this.title(namespace, pagename) -- Costly
         title = this.title(namespace, pagename) -- Costly
Line 189: Line 152:
     if (subpage == '')
     if (subpage == '')
     then
     then
         subpage = this.getCurrentLanguageSubpage()
         subpage = this.getLanguageSubpage()
     end
     end
     if (subpage == '')
     if (subpage == '')
Line 273: Line 236:
     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['tntns'] = nil -- discard the specified namespace override
     arguments['namespace'] = 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