편집을 취소할 수 있습니다. 이 편집을 되돌리려면 아래의 바뀐 내용을 확인한 후 게시해주세요.
최신판 | 당신의 편집 | ||
2번째 줄: | 2번째 줄: | ||
function this.checkLanguage(subpage, default) | function this.checkLanguage(subpage, default) | ||
--[[Check first if there's an | --[[Check first if there's an apostrophe, because they break the isKnownLanguageTag | ||
function. This test does not work with regexps, use plain search instead (no need | |||
to use Unicode parser, apostrophes can only appear isolated as one byte in UTF-8). | |||
]] | |||
if (string.find(subpage, "'", 1, true) == nil) | |||
then | then | ||
return subpage | -- Return the subpage only if it is a valid language code. | ||
if (mw.language.isKnownLanguageTag(subpage)) | |||
then | |||
return subpage | |||
end | |||
end | end | ||
-- Otherwise there's currently no known language subpage | -- Otherwise there's currently no known language subpage | ||
return default | return default | ||
end | end | ||
--[[Get the last subpage of the current page if it is a translation. | --[[Get the last subpage of the current page if it is a translation. | ||
]] | ]] | ||
function this. | function this.getLanguageSubpage() | ||
local subpage = mw.title.getCurrentTitle().subpageText | |||
return this.checkLanguage(subpage, '') | |||
end | end | ||
108번째 줄: | 29번째 줄: | ||
]] | ]] | ||
function this.getFrameLanguageSubpage(frame) | function this.getFrameLanguageSubpage(frame) | ||
local titleparts = mw.text.split(frame:getParent():getTitle(), '/') | |||
local subpage = titleparts[#titleparts] | |||
return this.checkLanguage(subpage, '') | |||
end | end | ||
128번째 줄: | 51번째 줄: | ||
end | end | ||
function this. | --[[If on a translation subpage (like Foobar/de), this function renders | ||
local | a given template in the same language, if the translation is available. | ||
local | Otherwise, the template is rendered in its default language, without | ||
if ( | modification. | ||
This is aimed at replacing the current implementation of Template:TNT. | |||
]] | |||
function this.renderTranslatedTemplate(frame) | |||
local args = frame.args | |||
local pagename = args['template'] | |||
--[[Check whether the pagename is actually in the Template namespace, or | |||
if we're transcluding a main-namespace page. | |||
(added for backward compatibility of Template:TNT) | |||
]] | |||
local namespace = 'Template' | |||
if (args['namespace'] ~= '') -- Checks for namespace parameter for custom ns. | |||
then | then | ||
namespace = args['namespace'] | |||
else -- Supposes that set page is in ns10. | |||
local templateFullTitle = mw.title.new(pagename, namespace) -- Costly | |||
if (templateFullTitle.id == 0) | |||
then -- not found in the Template namespace, assume the main namespace | |||
namespace = '' | |||
end | |||
end | end | ||
-- Get the last subpage and check if it matches a known language code. | |||
local langcode = 'en' -- Default language subpage to render. | |||
local subpage = this.getLanguageSubpage() | |||
if (subpage ~= '') | |||
if | |||
then | then | ||
-- Check if a translation of the pagename exists in that language; if so, put it in langcode | |||
local translation = mw.title.new(pagename .. '/' .. subpage, namespace) -- Costly | |||
if (translation.id ~= 0) | |||
then | |||
langcode = subpage | |||
end | |||
end | |||
-- Copy args pseudo-table to a proper table so we can feed it to expandTemplate. | |||
-- Then render the pagename. | |||
local arguments = {} | |||
for k, v in pairs((frame:getParent() or {}).args) 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 | end | ||
return { | return frame:expandTemplate{title = namespace .. ':' .. pagename .. '/' .. langcode, args = arguments} | ||
end | end | ||
--[[If on a translation subpage (like Foobar/de), this function | --[[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 | Otherwise, the template is rendered in its default language, without | ||
modification. | modification. | ||
This is aimed at replacing the current implementation of Template: | This is aimed at replacing the current implementation of Template:TNT. | ||
]] | ]] | ||
function this. | function this.renderTranslatedTemplateDebug(frame) | ||
local args = frame.args | |||
local pagename = args['template'] | local pagename = args['template'] | ||
171번째 줄: | 124번째 줄: | ||
]] | ]] | ||
local title | local title | ||
local namespace = args[' | local namespace = args['namespace'] or '' | ||
if (namespace ~= '') -- Checks for | if (namespace ~= '') -- Checks for namespace parameter for custom ns. | ||
then | then | ||
title = | title = mw.title.new(pagename, namespace) -- Costly | ||
else -- Supposes that set page is in ns10. | else -- Supposes that set page is in ns10. | ||
title = mw.title.new(pagename, 'Template') -- Costly | |||
title = | if (title.id == 0) | ||
if title.id == | |||
then -- not found in the Template namespace, assume the main namespace (for backward compatibility) | then -- not found in the Template namespace, assume the main namespace (for backward compatibility) | ||
namespace = '' | |||
title = mw.title.new(pagename, namespace) -- Costly | |||
end | end | ||
end | end | ||
-- Get the last subpage and check if it matches a known language code. | -- Get the last subpage and check if it matches a known language code. | ||
local | local langcode = 'en' -- Default language subpage to render. | ||
if (subpage | local subpage = this.getLanguageSubpage() | ||
if (subpage ~= '') | |||
then | then | ||
-- Check if a translation of the pagename exists in that language; if so, put it in langcode | |||
local title = mw.title.new(title.prefixedText .. '/' .. subpage) -- Costly | |||
if (title.id == 0) | |||
-- Check if a translation of the pagename exists in | |||
local | |||
if | |||
then | then | ||
langcode = subpage | |||
end | end | ||
end | |||
local | -- Copy args pseudo-table to a proper table so we can feed it to expandTemplate. | ||
-- Then render the pagename. | |||
local arguments = {} | |||
for k, v in pairs((frame:getParent() or {}).args) 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 | ||
end | end | ||
return frame:expandTemplate{title = title, args = arguments} | |||
-- return frame:expandTemplate{title = namespace .. ':' .. pagename .. '/' .. langcode, args = arguments} | |||
end | end | ||
function this.renderTranslatedTemplate(frame) | function this.renderTranslatedTemplate(frame) | ||
local template = frame.args['template'] | |||
-- | --[[Check whether the template is actually in the Template namespace, or | ||
if we're transcluding a main-namespace page. | |||
(added for backward compatibility of Template:TNT) | |||
]] | |||
local | local namespace = 'Template' | ||
if (args[' | if (frame.args['namespace']~='')--checks for namespace parameter for custom ns | ||
then | then | ||
namespace = frame.args['namespace'] | |||
else--supposes that set page is in ns10 | |||
local templateFullTitle = mw.title.new(template, namespace) | |||
if (templateFullTitle.id == 0) | |||
then -- not found in the Template namespace, assume the main namespace | |||
namespace = '' | |||
end | end | ||
end | |||
-- Get the last subpage and check if it matches a known language code | |||
local langcode = 'en' -- default language template subpage to render | |||
local subpage = this.getLanguageSubpage() | |||
if (subpage ~= '') | |||
then | |||
-- Check if a translation of the template exists in that language; if so, put it in langcode | |||
local translation = mw.title.new(template .. '/' .. subpage, namespace) | |||
if (translation.id ~= 0) | |||
then | |||
langcode = subpage | |||
end | end | ||
end | end | ||
-- | -- Copy args pseudo-table to a proper table so we can feed it to expandTemplate | ||
-- Then render the template | |||
local arguments = {} | local arguments = {} | ||
for k, v in pairs( | for k, v in pairs((frame:getParent() or {}).args) do | ||
-- numbered args >= 1 need to be shifted | -- 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 | arguments[n - 1] = v | ||
end | end | ||
301번째 줄: | 218번째 줄: | ||
end | end | ||
end | end | ||
return frame:expandTemplate{title = namespace .. ':' .. template .. '/' .. langcode, args = arguments} | |||
return frame:expandTemplate{title = ' | |||
end | end | ||
return this | return this |