模板:Lan
| 此模板被引用於約170,000個頁面,佔全部頁面的2%。 為了避免造成大規模的影響,所有對此模板的編輯應先於沙盒、測試樣例或您的沙盒上測試。 測試後無誤的版本可以一次性地加入此模板中,但是修改前請務必於討論頁發起討論。 模板引用數量會自動更新。 |
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):
| − | zhwiki:pcache: | + | zhwiki:pcache:201888:|#|:idhash:userlang=zh-cn!zh-cn |
啟用了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。