本模块用于生成一个对某个页面(或当前页面)的一个描述性的词语。比如,在模板页面(如Template:Fullurl)返回“模板”,在用户页面(如User:Example)返回“用户”。此外,对于模板和模块文档,还会返回“模板文档”或“模块文档”。
用法
指定页面
你可以使用参数title指定一个页面的标题,如果不指定标题,将会默认为当前页面标题。例如:
{{#invoke: page name|main}}
返回:模块{{#invoke: page name|main|title=Template:Tlx}}
返回:模板{{#invoke: page name|main|title=火山}}
返回:条目{{#invoke: page name|main|title=特殊:展开模板}}
返回:特殊页面{{#invoke: page name|main|title=user talk:MediaWiki default}}
返回:用户讨论页
指定命名空间
你可以使用参数namespace指定显示特定命名空间的页面名称。命名空间可以根据其名称、别称或id来指定。这种情况下,不会检测/doc
。例如:
{{#invoke: page name|main|namespace=114514}}
返回:页面{{#invoke: page name|main|namespace=Template}}
返回:模板{{#invoke: page name|main|namespace=828}}
返回:模块
指定繁简转换
一般地,模块会返回简体中文,并通过繁简转换系统转换为你当前看到的语言变种(如果需要转换的话)。但是某些消息页面,不支持繁简转换,需要手动转换为简体或繁体,可以设置参数variant=-1以强制显示简体,variant=1以强制显示繁体,variant=2以强制显示台湾繁体,这在消息页面中会比较实用。
代码 | 结果(未转换) | 结果(已转换) |
---|---|---|
{{#invoke: page name|main}}
|
-{zh-hans:模块;zh-hant:模組}- | 模块 |
{{#invoke: page name|main|variant=1}}
|
-{zh-hans:模块;zh-hant:模組}- | 模块 |
{{#invoke: page name|main|variant=-1}}
|
-{zh-hans:模块;zh-hant:模組}- | 模块 |
{{#invoke: page name|main|title=Template:Tl/doc}}
|
模板-{zh-hans:文档;zh-hant:文件}- | 模板文档 |
{{#invoke: page name|main|title=Template:Tl/doc|variant=1}}
|
模板-{zh-hans:文档;zh-hant:文件}- | 模板文档 |
{{#invoke: page name|main|title=Template:Tl/doc|variant=-1}}
|
模板-{zh-hans:文档;zh-hant:文件}- | 模板文档 |
{{#invoke: page name|main|title=User talk:Example}}
|
-{zh-hans:用户;zh-hant:用戶;zh-tw:使用者}-讨论页 | 用户讨论页 |
{{#invoke: page name|main|title=User talk:Example|variant=1}}
|
-{zh-hans:用户;zh-hant:用戶;zh-tw:使用者}-讨论页 | 用户讨论页 |
{{#invoke: page name|main|title=User talk:Example|variant=-1}}
|
-{zh-hans:用户;zh-hant:用戶;zh-tw:使用者}-讨论页 | 用户讨论页 |
不检查文档
如果需要表述到模板或者模块本身,而不需要检查页面是否为文档,可以添加一个doc=false
,例如:
代码 | 效果 |
---|---|
模板链接:{{#invoke:page name|main|title=Template:Tl/doc}}
|
模板文档 |
模板链接:{{#invoke:page name|main|doc=true|title=Template:Tl/doc}}
|
模板文档 |
模板链接:{{#invoke:page name|main|doc=false|title=Template:Tl/doc}}
|
模板 |
函数用法
如需在Lua模块中使用此功能,应该使用类似于如下语法:
local pageName = require'Module:Page name'.pageName
local page
-- 如果需要获取当前页面的表述
page = pageName()
-- 如需获取特定页面(以User talk:Example为例)的表述
page = pageName(mw.title.new'User talk:Example')
-- 如需获取特定语言变种(以简体中文为例)的表述
page = pageName(nil, -1)
-- 如需获取特定页面(以Template:消息框/doc为例)的特定语言变种(以繁体中文为例)的表述
page = pageName(mw.title.new'Template:消息框/doc', 1)
从上面的示例可以看出,两个参数都是可以省略的,第一个参数表示页面标题对象(默认为当前页面标题对象),第二个参数为语言变种(默认为0,即不指定)。
此外,如果只需要获取指定命名空间的页面名称,可以直接使用
local namespacePageName = require 'Module:Page name'.namespacePageName
该参数的第一个参数为命名空间的名称或者id(若为id,应该是数字而不是用字符串)。
local p = {}
local getArgs = require 'Module:Arguments'.getArgs
local yesno = require 'Module:yesno'
function p.convert(variant, simplified, traditional, taiwan, transfer)
-- 0允许繁简转换
-- -1强制简体
-- 1强制繁体
-- 2强制台湾繁体
if not traditional then
return simplified
elseif variant == 2 then
return taiwan or traditional
elseif variant == 1 then
return traditional
elseif variant == -1 then
return simplified
else -- if variant == 0
if transfer and taiwan then
return string.format('-{zh-hans:%s;zh-hant:%s;zh-tw:%s}-',
simplified, traditional, taiwan)
elseif transfer then
return string.format('-{zh-hans:%s;zh-hant:%s}-',
simplified, traditional)
else
return simplified
end
end
end
local title
local function getConfig(variant)
variant = variant or 0
-- 0允许繁简转换
-- -1强制简体
-- 1强制繁体
local t = {}
local function convert(simplified, traditional, taiwan, transfer)
return p.convert(variant, simplified, traditional, taiwan, transfer)
-- 这里只是简化一下p.convert,省略一个参数。
-- 这里的variant是getConfig函数中的,不是p.convert中的。
end
t[0] = convert('条目','條目')
t.page = convert('页面','頁面')
local page = t.page
t[1] = convert('讨论页','討論頁')
local talk = t[1]
t[10] = convert'模板'
t[11] = t[10] .. talk
t[828] = convert('模块','模組',nil,true)
t[829] = t[828] .. talk
t[2] = convert('用户页','用戶頁','使用者頁面')
t[3] = convert('用户','用戶','使用者',true) .. talk
t[4] = convert('项目','專案','計畫',true) .. page
t[5] = convert('项目','專案','計劃',true) .. talk
t[6] = convert('文件','檔案',nil,true)
t[7] = t[6] .. talk
t[8] = convert('消息','介面',nil,true) .. page
t[9] = convert('消息','介面',nil,true) .. talk
t[12] = convert('帮助','幫助') .. page
t[13] = convert('帮助','幫助') .. talk
t[14] = convert('分类','分類')
t[15] = t[14] .. talk
t[118] = '草稿'
t[119] = t[118] .. talk
t[218] = '新草稿'
t[219] = '新草稿' .. talk
t[460] = convert('活动','活動')
t[461] = t[460] .. talk
t[-1] = convert('特殊页面','特殊頁面')
t.doc = convert('文档','文件',nil,true)
return t
end
p.getConfig = getConfig
function p.pageName(title, variant, doc)
-- doc : bool 是否检查文档
if type(title)=='string' then
title = mw.title.new(title)
end
title = title or mw.title.getCurrentTitle()
variant = variant or 0
local id = title.namespace
local t = getConfig(variant)
local ret = t[id] or t.page
if (id==10 or id==828) and doc and title.subpageText=='doc' then
ret = ret .. t.doc
end
return ret
end
function p.namespacePageName(namespace, variant)
local id = (mw.site.namespaces[namespace] or {}).id
local t = getConfig(variant)
return t[id] or t.page
end
function p.main(frame)
local args = getArgs(frame)
local title = args.title
local namespace = args.namespace
local variant = args.variant
return namespace and
p.namespacePageName(tonumber(namespace) or namespace, variant)
or p.pageName(title and mw.title.new(title), variant, yesno(args.doc, true) ~= false)
end
function p.template(frame)
return p.main(frame:getParent())
end
return p