Template:Lan
Lan模板可以在普通繁简转换功能(-{zh:; zh-hans:; zh-hant:; zh-cn:;……}-)无法发挥作用时替代其进行转换,比如编辑提示等界面文本(system message)的转换。然而,Lan模板是按界面语言而非语言变种转换的,不能通过页面顶部的用字标签改变用字。在正文中,若不对Lan模板的输出禁用变体转换,读者看到的内容仍将经过一般的变体转换过程。综上,在可以使用-{}-进行转换时,请不要使用Lan模板。
显示某一页面的界面语言与语言变体可通过URL的query parameter指定,参数名分别为uselang和variant。已登录用户可在参数设置-国际化的“语言:”和“内容语言变体:”更改两语言配置项的默认值。
| 此模板使用Lua语言: |
用法
[编辑]{{lan
|zh=原文
|zh-hans=简体中文
|zh-hant=繁體中文
|zh-cn=大陆
|zh-tw=台灣
|zh-hk=港澳
|zh-sg=马新
}}
实现细节
[编辑]Lan模板的实现机理与-{}-(即Language Converter)的方式完全不同。Lan模板通过解析器函数{{int:查询MediaWiki:Conversionname的值(取决于用户的界面语言),再自行按fallback规则从候选列表中挑选输出的字符串。因此,Lan模板支持代码的转换,而这一功能是-{}-所不具备的。
这种做法属于{{int:lang}} hack。2024年底的MediaWiki 1.43引入了{{USERLANGUAGE}}魔术字,在一些多语言维基取代了原先需要手动建立子页面的此类hack。
然而,这类做法会带来性能影响:由于页面内容开始依赖用户的界面语言选项,其渲染结果存于parser cache的key将带有userlang字段。例如,下列cache key分别来自未使用此类模板的WP:首页(页面ID 3597889),与使用了<inputbox>解析器扩展标签的WP:互助客栈/技术(页面ID 201888):
Template:TextDiff
启用了Language Converter的MediaWiki本就会将语言变体写入parser cache key(!后的部分,参见phab:T267067)。未登录用户若仅在URL指定了variant,界面语言会跟随变体语言;然而如果用户手动指定了uselang=zh-hant&variant=zh-tw或者注册用户配置了不一致的界面语言和变体,那么就会加剧parser cache的碎片化(ParserOptions::getUserLangObj):用户请求与常见组合不一致,所以难以命中缓存,服务器总需要重新渲染,造成不必要的等待和其他开销。对缓存碎片化的担忧是{{USERLANGUAGE}}魔术字未默认启用的原因(phab:T406057)。
因此,若能用-{}-完成任务,则不应使用Lan模板。
其他环境
[编辑]Lua语言应该首先尝试使用Module:WikitextLC进行-{}-转换。在无法使用处,可以使用本模板的对应模块:
local lan = require('Module:Lan')._main
local result = lan({
["zh-hans"] = "乌龟",
["zh-hant"] = "繁體"}, frame)
JavaScript小工具应该使用MediaWiki:Gadget-HanAssist.js中的conv()和convByVar()。详细文档见Wikipedia:HanAssist。
在元維基、維基數據及MediaWiki.org,本模板由於命名問題而改命名為meta:Template:Conversion-zh、d:Template:Conversion-zh及mw:Template:Conversion-zh。
参见
[编辑]| 上述文档嵌入自Template:Lan/doc。 (编辑 | 历史) 编者可以在本模板的沙盒 (创建 | 镜像)和测试样例 (创建)页面进行实验。 请在/doc子页面中添加分类。 本模板的子页面。 |