<?xml version="1.0"?>
<feed xmlns="http://www.w3.org/2005/Atom" xml:lang="zh-Hans">
	<id>https://unimage.wcnm.pw/api.php?action=feedcontributions&amp;feedformat=atom&amp;user=WikiAdmin</id>
	<title>Unimage Wiki - 用户贡献 [zh-hans]</title>
	<link rel="self" type="application/atom+xml" href="https://unimage.wcnm.pw/api.php?action=feedcontributions&amp;feedformat=atom&amp;user=WikiAdmin"/>
	<link rel="alternate" type="text/html" href="https://unimage.wcnm.pw/wiki/%E7%89%B9%E6%AE%8A:%E7%94%A8%E6%88%B7%E8%B4%A1%E7%8C%AE/WikiAdmin"/>
	<updated>2026-08-31T23:25:12Z</updated>
	<subtitle>用户贡献</subtitle>
	<generator>MediaWiki 1.43.9</generator>
	<entry>
		<id>https://unimage.wcnm.pw/index.php?title=%E6%A8%A1%E5%9D%97:Quote&amp;diff=730</id>
		<title>模块:Quote</title>
		<link rel="alternate" type="text/html" href="https://unimage.wcnm.pw/index.php?title=%E6%A8%A1%E5%9D%97:Quote&amp;diff=730"/>
		<updated>2026-08-31T12:55:07Z</updated>

		<summary type="html">&lt;p&gt;WikiAdmin：​将 Fandom Dev 模块依赖切换到本地副本&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;-- This Module is used for making templates based in the Lua language.&lt;br /&gt;
-- See more details about Lua in [[w:Help:Lua]].&lt;br /&gt;
-- The Fandom Developer&#039;s Wiki hosts Global Lua Modules that can be imported and locally overridden.&lt;br /&gt;
-- The next line imports the Quote module from the [[w:c:dev:Global Lua Modules]].&lt;br /&gt;
local Quote = require(&#039;Module:Dev/Quote&#039;)&lt;br /&gt;
-- See more details about this module at [[w:c:dev:Global_Lua_Modules/Quote]]&lt;br /&gt;
&lt;br /&gt;
-- The last line produces the output for the template&lt;br /&gt;
return Quote&lt;/div&gt;</summary>
		<author><name>WikiAdmin</name></author>
	</entry>
	<entry>
		<id>https://unimage.wcnm.pw/index.php?title=%E6%A8%A1%E5%9D%97:Navbox&amp;diff=729</id>
		<title>模块:Navbox</title>
		<link rel="alternate" type="text/html" href="https://unimage.wcnm.pw/index.php?title=%E6%A8%A1%E5%9D%97:Navbox&amp;diff=729"/>
		<updated>2026-08-31T12:55:05Z</updated>

		<summary type="html">&lt;p&gt;WikiAdmin：​将 Fandom Dev 模块依赖切换到本地副本&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;-- This Module is used for making templates based in the Lua language.&lt;br /&gt;
-- See more details about Lua in [[w:Help:Lua]].&lt;br /&gt;
-- The Fandom Developer&#039;s Wiki hosts Global Lua Modules that can be imported and locally overridden.&lt;br /&gt;
-- The next line imports the Navbox module from the [[w:c:dev:Global Lua Modules]].&lt;br /&gt;
local N = require(&#039;Module:Dev/Navbox&#039;)&lt;br /&gt;
-- See more details about this module at [[w:c:dev:Global_Lua_Modules/Navbox]]&lt;br /&gt;
&lt;br /&gt;
-- The last line produces the output for the template&lt;br /&gt;
return N&lt;/div&gt;</summary>
		<author><name>WikiAdmin</name></author>
	</entry>
	<entry>
		<id>https://unimage.wcnm.pw/index.php?title=%E6%A8%A1%E5%9D%97:Namespace_detect/config&amp;diff=728</id>
		<title>模块:Namespace detect/config</title>
		<link rel="alternate" type="text/html" href="https://unimage.wcnm.pw/index.php?title=%E6%A8%A1%E5%9D%97:Namespace_detect/config&amp;diff=728"/>
		<updated>2026-08-31T12:55:04Z</updated>

		<summary type="html">&lt;p&gt;WikiAdmin：​将 Fandom Dev 模块依赖切换到本地副本&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;-- This Module is used for making templates based in the Lua language.&lt;br /&gt;
-- See more details about Lua in [[w:Help:Lua]].&lt;br /&gt;
-- The Fandom Developer&#039;s Wiki hosts Global Lua Modules that can be imported and locally overridden.&lt;br /&gt;
-- The next line imports from the [[w:c:dev:Global Lua Modules]].&lt;br /&gt;
local nsConfiguration = require(&#039;Module:Dev/Namespace_detect/config&#039;)&lt;br /&gt;
-- See more details about this module at [[w:c:dev:Global_Lua_Modules/Namespace_detect]]&lt;br /&gt;
 &lt;br /&gt;
-- The imported Module is overwritten locally to include default configuration.&lt;br /&gt;
-- For a more flexible experience, delete the page import &lt;br /&gt;
-- and paste (and modify as you like) its contents into this page&lt;br /&gt;
-- https://dev.fandom.com/wiki/Module:Namespace_detect/config&lt;br /&gt;
&lt;br /&gt;
-- The last line produces the output for the template&lt;br /&gt;
return nsConfiguration&lt;/div&gt;</summary>
		<author><name>WikiAdmin</name></author>
	</entry>
	<entry>
		<id>https://unimage.wcnm.pw/index.php?title=%E6%A8%A1%E5%9D%97:Namespace_detect&amp;diff=727</id>
		<title>模块:Namespace detect</title>
		<link rel="alternate" type="text/html" href="https://unimage.wcnm.pw/index.php?title=%E6%A8%A1%E5%9D%97:Namespace_detect&amp;diff=727"/>
		<updated>2026-08-31T12:55:03Z</updated>

		<summary type="html">&lt;p&gt;WikiAdmin：​将 Fandom Dev 模块依赖切换到本地副本&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;-- This Module is used for making templates based in the Lua language.&lt;br /&gt;
-- See more details about Lua in [[w:Help:Lua]].&lt;br /&gt;
-- The Fandom Developer&#039;s Wiki hosts Global Lua Modules that can be imported and locally overridden.&lt;br /&gt;
-- The next line imports the Namespace_detect module from the [[w:c:dev:Global Lua Modules]].&lt;br /&gt;
local NS = require(&#039;Module:Dev/Namespace_detect&#039;)&lt;br /&gt;
-- Local configuration can be modified in &lt;br /&gt;
-- [[Module:Namespace detect/data]] and&lt;br /&gt;
-- [[Module:Namespace detect/config]]&lt;br /&gt;
-- See more details about this module at [[w:c:dev:Global_Lua_Modules/Namespace detect]]&lt;br /&gt;
 &lt;br /&gt;
-- The last line produces the output for the template&lt;br /&gt;
return NS&lt;/div&gt;</summary>
		<author><name>WikiAdmin</name></author>
	</entry>
	<entry>
		<id>https://unimage.wcnm.pw/index.php?title=%E6%A8%A1%E5%9D%97:Mbox&amp;diff=726</id>
		<title>模块:Mbox</title>
		<link rel="alternate" type="text/html" href="https://unimage.wcnm.pw/index.php?title=%E6%A8%A1%E5%9D%97:Mbox&amp;diff=726"/>
		<updated>2026-08-31T12:55:01Z</updated>

		<summary type="html">&lt;p&gt;WikiAdmin：​将 Fandom Dev 模块依赖切换到本地副本&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;-- This Module is used for making templates based in the Lua language.&lt;br /&gt;
-- See more details about Lua in [[w:Help:Lua]].&lt;br /&gt;
-- The Fandom Developer&#039;s Wiki hosts Global Lua Modules that can be imported and locally overridden.&lt;br /&gt;
-- The next line imports the Mbox module from the [[w:c:dev:Global Lua Modules]].&lt;br /&gt;
local Mbox = require(&#039;Module:Dev/Mbox&#039;)&lt;br /&gt;
-- See more details about this module at [[w:c:dev:Global_Lua_Modules/Mbox]]&lt;br /&gt;
&lt;br /&gt;
-- The imported Module is overwritten locally to include default styling.&lt;br /&gt;
-- For a more flexible Mbox experience, delete the function below and import &lt;br /&gt;
-- https://dev.fandom.com/wiki/MediaWiki:Global_Lua_Modules/Mbox.css&lt;br /&gt;
-- or paste (and modify as you like) its contents in your wiki&#039;s &lt;br /&gt;
-- [[MediaWiki:Wikia.css]] (see [[w:Help:Including_additional_CSS_and_JS]])&lt;br /&gt;
-- or look at https://dev.fandom.com/wiki/Global_Lua_Modules/Mbox&lt;br /&gt;
-- for more customization inspiration&lt;br /&gt;
&lt;br /&gt;
-- &lt;br /&gt;
-- BEGIN DELETION HERE&lt;br /&gt;
--&lt;br /&gt;
&lt;br /&gt;
local getArgs = require(&#039;Module:Dev/Arguments&#039;).getArgs&lt;br /&gt;
local localCSS = mw.loadData(&#039;Module:Mbox/data&#039;).localStyle&lt;br /&gt;
&lt;br /&gt;
function Mbox.main(frame)&lt;br /&gt;
    local args = getArgs(frame)&lt;br /&gt;
&lt;br /&gt;
    -- styles&lt;br /&gt;
    local styles = {}&lt;br /&gt;
    if args.bordercolor then&lt;br /&gt;
        styles[&#039;border-left-color&#039;] = args.bordercolor&lt;br /&gt;
    elseif args.type then&lt;br /&gt;
        styles[&#039;border-left-color&#039;] = &#039;var(--type-&#039; .. args.type .. &#039;)&#039;&lt;br /&gt;
    end&lt;br /&gt;
&lt;br /&gt;
    if args.bgcolor then&lt;br /&gt;
        styles[&#039;background-color&#039;] = args.bgcolor&lt;br /&gt;
    end&lt;br /&gt;
&lt;br /&gt;
    -- images&lt;br /&gt;
    local image = args.image or &#039;&#039;&lt;br /&gt;
    local imagewidth = args.imagewidth or &#039;80px&#039;&lt;br /&gt;
    local imagelink = &#039;&#039;&lt;br /&gt;
    if args.imagelink then&lt;br /&gt;
        imagelink = &#039;|link=&#039; .. args.imagelink&lt;br /&gt;
    end&lt;br /&gt;
&lt;br /&gt;
    local imagewikitext = (&#039;%sFile:%s|%s%s&#039; .. &#039;]]&#039;):format(&#039;[[&#039;, image, imagewidth, imagelink)&lt;br /&gt;
&lt;br /&gt;
    -- id for closure&lt;br /&gt;
    local id = args.id or &#039;mbox&#039;&lt;br /&gt;
&lt;br /&gt;
    local container = mw.html.create(&#039;div&#039;)&lt;br /&gt;
        :addClass(&#039;mbox&#039;)&lt;br /&gt;
        :addClass(args.class)&lt;br /&gt;
        :css(styles)&lt;br /&gt;
        :css(localCSS[&#039;mbox&#039;])&lt;br /&gt;
        :cssText(args.style)&lt;br /&gt;
&lt;br /&gt;
    local content = container:tag(&#039;div&#039;)&lt;br /&gt;
        :addClass(&#039;mbox__content&#039;)&lt;br /&gt;
        :css(localCSS[&#039;mbox__content&#039;])&lt;br /&gt;
&lt;br /&gt;
    if args.image then&lt;br /&gt;
        local image = content:tag(&#039;div&#039;)&lt;br /&gt;
            :addClass(&#039;mbox__content__image&#039;)&lt;br /&gt;
            :addClass(&#039;mw-collapsible&#039;)&lt;br /&gt;
            :attr(&#039;id&#039;, &#039;mw-customcollapsible-&#039; .. id)&lt;br /&gt;
        :css(localCSS[&#039;mbox__content__image&#039;])&lt;br /&gt;
            :wikitext(imagewikitext)&lt;br /&gt;
            if args.collapsed then&lt;br /&gt;
                image:addClass(&#039;mw-collapsed&#039;)&lt;br /&gt;
            end&lt;br /&gt;
    end&lt;br /&gt;
&lt;br /&gt;
    local contentwrapper = content:tag(&#039;div&#039;)&lt;br /&gt;
        :addClass(&#039;mbox__content__wrapper&#039;)&lt;br /&gt;
        :css(localCSS[&#039;mbox__content__wrapper&#039;])&lt;br /&gt;
&lt;br /&gt;
    if args.header then&lt;br /&gt;
        contentwrapper:tag(&#039;div&#039;)&lt;br /&gt;
            :addClass(&#039;mbox__content__header&#039;)&lt;br /&gt;
            :css(localCSS[&#039;mbox__content__header&#039;])&lt;br /&gt;
            :wikitext(args.header)&lt;br /&gt;
    end&lt;br /&gt;
&lt;br /&gt;
    if args.text then&lt;br /&gt;
        local text = contentwrapper:tag(&#039;div&#039;)&lt;br /&gt;
            :addClass(&#039;mbox__content__text&#039;)&lt;br /&gt;
            :addClass(&#039;mw-collapsible&#039;)&lt;br /&gt;
            :attr(&#039;id&#039;, &#039;mw-customcollapsible-&#039; .. id)&lt;br /&gt;
            :css(localCSS[&#039;mbox__content__text&#039;])&lt;br /&gt;
            :wikitext(args.text)&lt;br /&gt;
            if args.collapsed then&lt;br /&gt;
                text:addClass(&#039;mw-collapsed&#039;)&lt;br /&gt;
            end&lt;br /&gt;
&lt;br /&gt;
        if args.comment then&lt;br /&gt;
            text:tag(&#039;div&#039;)&lt;br /&gt;
                :addClass(&#039;mbox__content__text__comment&#039;)&lt;br /&gt;
                :css(localCSS[&#039;mbox__content__text__comment&#039;])&lt;br /&gt;
                :wikitext(args.comment)&lt;br /&gt;
        end&lt;br /&gt;
    end&lt;br /&gt;
&lt;br /&gt;
    contentwrapper:tag(&#039;span&#039;)&lt;br /&gt;
        :addClass(&#039;mbox__close&#039;)&lt;br /&gt;
        :addClass(&#039;mw-customtoggle-&#039; .. id)&lt;br /&gt;
        :css(localCSS[&#039;mbox__close&#039;])&lt;br /&gt;
        :attr(&#039;title&#039;, &#039;Dismiss&#039;)&lt;br /&gt;
&lt;br /&gt;
    if args.aside then&lt;br /&gt;
        local aside = content:tag(&#039;div&#039;)&lt;br /&gt;
            :addClass(&#039;mbox__content__aside&#039;)&lt;br /&gt;
            :addClass(&#039;mw-collapsible&#039;)&lt;br /&gt;
            :attr(&#039;id&#039;, &#039;mw-customcollapsible-&#039; .. id)&lt;br /&gt;
            :css(localCSS[&#039;mbox__content__aside&#039;])&lt;br /&gt;
            :wikitext(args.aside)&lt;br /&gt;
            if args.collapsed then&lt;br /&gt;
                aside:addClass(&#039;mw-collapsed&#039;)&lt;br /&gt;
            end&lt;br /&gt;
    end&lt;br /&gt;
&lt;br /&gt;
    return container&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
-- &lt;br /&gt;
-- END DELETION HERE&lt;br /&gt;
--&lt;br /&gt;
&lt;br /&gt;
-- The last line produces the output for the template&lt;br /&gt;
return Mbox&lt;/div&gt;</summary>
		<author><name>WikiAdmin</name></author>
	</entry>
	<entry>
		<id>https://unimage.wcnm.pw/index.php?title=%E6%A8%A1%E5%9D%97:I18n&amp;diff=725</id>
		<title>模块:I18n</title>
		<link rel="alternate" type="text/html" href="https://unimage.wcnm.pw/index.php?title=%E6%A8%A1%E5%9D%97:I18n&amp;diff=725"/>
		<updated>2026-08-31T12:55:00Z</updated>

		<summary type="html">&lt;p&gt;WikiAdmin：​将 Fandom Dev 模块依赖切换到本地副本&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;-- This Module is used for making templates based in the Lua language.&lt;br /&gt;
-- See more details about Lua in [[Help:Lua]].&lt;br /&gt;
-- The Fandom Developer&#039;s Wiki hosts Global Lua Modules that can be imported and locally overridden.&lt;br /&gt;
-- The next line imports the I18n module from the [[w:c:dev:Global Lua Modules]].&lt;br /&gt;
local i18n = require(&#039;Module:Dev/I18n&#039;)&lt;br /&gt;
-- See more details about this module at [[w:c:dev:Global_Lua_Modules/I18n]]&lt;br /&gt;
 &lt;br /&gt;
-- The last line produces the output for the template&lt;br /&gt;
return i18n&lt;/div&gt;</summary>
		<author><name>WikiAdmin</name></author>
	</entry>
	<entry>
		<id>https://unimage.wcnm.pw/index.php?title=%E6%A8%A1%E5%9D%97:Hatnote/i18n&amp;diff=724</id>
		<title>模块:Hatnote/i18n</title>
		<link rel="alternate" type="text/html" href="https://unimage.wcnm.pw/index.php?title=%E6%A8%A1%E5%9D%97:Hatnote/i18n&amp;diff=724"/>
		<updated>2026-08-31T12:54:59Z</updated>

		<summary type="html">&lt;p&gt;WikiAdmin：​将 Fandom Dev 模块依赖切换到本地副本&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;-- This Module is used for making templates based in the Lua language.&lt;br /&gt;
-- See more details about Lua in [[Help:Lua]].&lt;br /&gt;
-- The Fandom Developer&#039;s Wiki hosts Global Lua Modules that can be imported and locally overridden.&lt;br /&gt;
-- The next line imports the Hatnote module from the [[w:c:dev:Global Lua Modules]].&lt;br /&gt;
local Hi18n = require(&#039;Module:Dev/Hatnote/i18n&#039;)&lt;br /&gt;
-- See more details about this module at [[w:c:dev:Global_Lua_Modules/Hatnote]]&lt;br /&gt;
 &lt;br /&gt;
-- The last line produces the output for the template&lt;br /&gt;
return Hi18n&lt;/div&gt;</summary>
		<author><name>WikiAdmin</name></author>
	</entry>
	<entry>
		<id>https://unimage.wcnm.pw/index.php?title=%E6%A8%A1%E5%9D%97:Hatnote&amp;diff=723</id>
		<title>模块:Hatnote</title>
		<link rel="alternate" type="text/html" href="https://unimage.wcnm.pw/index.php?title=%E6%A8%A1%E5%9D%97:Hatnote&amp;diff=723"/>
		<updated>2026-08-31T12:54:58Z</updated>

		<summary type="html">&lt;p&gt;WikiAdmin：​将 Fandom Dev 模块依赖切换到本地副本&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;-- This Module is used for making templates based in the Lua language.&lt;br /&gt;
-- See more details about Lua in [[w:Help:Lua]].&lt;br /&gt;
-- The Fandom Developer&#039;s Wiki hosts Global Lua Modules that can be imported and locally overridden.&lt;br /&gt;
-- The next line imports the Hatnote module from the [[w:c:dev:Global Lua Modules]].&lt;br /&gt;
local H = require(&#039;Module:Dev/Hatnote&#039;)&lt;br /&gt;
-- See more details about this module at [[w:c:dev:Global_Lua_Modules/Hatnote]]&lt;br /&gt;
 &lt;br /&gt;
-- The last line produces the output for the template&lt;br /&gt;
return H&lt;/div&gt;</summary>
		<author><name>WikiAdmin</name></author>
	</entry>
	<entry>
		<id>https://unimage.wcnm.pw/index.php?title=%E6%A8%A1%E5%9D%97:Dialogue&amp;diff=722</id>
		<title>模块:Dialogue</title>
		<link rel="alternate" type="text/html" href="https://unimage.wcnm.pw/index.php?title=%E6%A8%A1%E5%9D%97:Dialogue&amp;diff=722"/>
		<updated>2026-08-31T12:54:57Z</updated>

		<summary type="html">&lt;p&gt;WikiAdmin：​将 Fandom Dev 模块依赖切换到本地副本&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;-- This Module is used for making templates based in the Lua language.&lt;br /&gt;
-- See more details about Lua in [[w:Help:Lua]].&lt;br /&gt;
-- The Fandom Developer&#039;s Wiki hosts Global Lua Modules that can be imported and locally overridden.&lt;br /&gt;
-- The next line imports the Dialogue module from the [[w:c:dev:Global Lua Modules]].&lt;br /&gt;
local Dialogue = require(&#039;Module:Dev/Dialogue&#039;)&lt;br /&gt;
-- See more details about this module at [[w:c:dev:Global_Lua_Modules/Dialogue]]&lt;br /&gt;
 &lt;br /&gt;
-- The last line produces the output for the template&lt;br /&gt;
return Dialogue&lt;/div&gt;</summary>
		<author><name>WikiAdmin</name></author>
	</entry>
	<entry>
		<id>https://unimage.wcnm.pw/index.php?title=%E6%A8%A1%E5%9D%97:Dev/Yesno&amp;diff=721</id>
		<title>模块:Dev/Yesno</title>
		<link rel="alternate" type="text/html" href="https://unimage.wcnm.pw/index.php?title=%E6%A8%A1%E5%9D%97:Dev/Yesno&amp;diff=721"/>
		<updated>2026-08-31T12:54:56Z</updated>

		<summary type="html">&lt;p&gt;WikiAdmin：​从 Fandom Developer Wiki 本地化全局模块，源修订 198227&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;-- 来源：https://dev.fandom.com/wiki/Module%3AYesno&lt;br /&gt;
-- 许可：CC BY-SA，作者与修订记录见来源页面&lt;br /&gt;
--  &amp;lt;nowiki&amp;gt;&lt;br /&gt;
--- Yesno module for processing of boolean-like wikitext input.&lt;br /&gt;
--  &lt;br /&gt;
--  It works similarly to the [[wikipedia:Template:Yesno|Yesno Wikipedia&lt;br /&gt;
--  template]]. This module is a consistent Lua interface for wikitext&lt;br /&gt;
--  input from templates.&lt;br /&gt;
--  &lt;br /&gt;
--  Wikitext markup used by MediaWiki templates only permit&lt;br /&gt;
--  string parameters like `&amp;quot;0&amp;quot;`, `&amp;quot;yes&amp;quot;`, `&amp;quot;no&amp;quot;` etc. As Lua&lt;br /&gt;
--  has a boolean primitive type, Yesno converts this&lt;br /&gt;
--  wikitext into boolean output for Lua to process.&lt;br /&gt;
--  &lt;br /&gt;
--  @script             yesno&lt;br /&gt;
--  @release            stable&lt;br /&gt;
--  @author             [[User:Dessamator|Dessamator]]&lt;br /&gt;
--  @attribution        [[wikipedia:User:ATDT|ATDT]]&lt;br /&gt;
--  @attribution        [[wikipedia:User:Mr. Stradivarius|Mr. Stradivarius]]&lt;br /&gt;
--  @attribution        [[wikipedia:Special:PageHistory/Module:Yesno|Other Wikipedia contributors]]&lt;br /&gt;
--  @see                [[wikipedia:Module:Yesno|Original module on&lt;br /&gt;
--                      Wikipedia]]&lt;br /&gt;
--  @see                [[Module:Yesno/testcases|Test cases for this&lt;br /&gt;
--                      module]]&lt;br /&gt;
--  @param              {?boolean|string} value Wikitext boolean-style&lt;br /&gt;
--                      or Lua boolean input.&lt;br /&gt;
--                       * Truthy wikitext input (`&#039;yes&#039;`, `&#039;y&#039;`, `&#039;1&#039;`,&lt;br /&gt;
--                      `&#039;t&#039;` or `&#039;on&#039;`) produces `true` as output.&lt;br /&gt;
--                       * The string representations of Lua&#039;s true&lt;br /&gt;
--                      boolean value (`&#039;true&#039;`) also produces `true`.&lt;br /&gt;
--                       * Falsy wikitext input (`&#039;no&#039;`, `&#039;n&#039;`, `&#039;0&#039;`,&lt;br /&gt;
--                      `&#039;f&#039;` or `&#039;off&#039;`) produces `false` as output.&lt;br /&gt;
--                       * The string representation of Lua&#039;s false&lt;br /&gt;
--                      boolean value (`&#039;false&#039;`) also produces `false`.&lt;br /&gt;
--                       * Localised text meaning `&#039;yes&#039;` or `&#039;no&#039;` also&lt;br /&gt;
--                      evaluate to `true` or `false` respectively.&lt;br /&gt;
--  @param[opt]         {?boolean|string} default Output to return if&lt;br /&gt;
--                      the Yesno `value` input is unrecognised.&lt;br /&gt;
--  @return             {?boolean} Boolean output corresponding to&lt;br /&gt;
--                      `val`:&lt;br /&gt;
--                       * The strings documented above produce a&lt;br /&gt;
--                      boolean value.&lt;br /&gt;
--                       * A `nil` value produces an output of `nil`.&lt;br /&gt;
--                      As this is falsy, additional logic may be needed&lt;br /&gt;
--                      to treat missing template parameters as truthy.&lt;br /&gt;
--                       * Unrecognised values return the `default`&lt;br /&gt;
--                      parameter. Blank strings are a key example&lt;br /&gt;
--                      of Yesno&#039;s unrecognised values and can evaluate&lt;br /&gt;
--                      to `true` if there is a default value.&lt;br /&gt;
local lower = mw.ustring.lower&lt;br /&gt;
local msg = mw.message.new&lt;br /&gt;
&lt;br /&gt;
local yes = lower(msg(&#039;htmlform-yes&#039;):plain())&lt;br /&gt;
local no = lower(msg(&#039;htmlform-no&#039;):plain())&lt;br /&gt;
local en_yes = lower(msg(&#039;htmlform-yes&#039;):inLanguage(&#039;en&#039;):plain())&lt;br /&gt;
local en_no = lower(msg(&#039;htmlform-no&#039;):inLanguage(&#039;en&#039;):plain())&lt;br /&gt;
&lt;br /&gt;
return function(value, default)&lt;br /&gt;
    value = type(value) == &#039;string&#039; and lower(value) or value&lt;br /&gt;
&lt;br /&gt;
    if value == nil then&lt;br /&gt;
        return nil&lt;br /&gt;
&lt;br /&gt;
    elseif value == true&lt;br /&gt;
        or value == yes&lt;br /&gt;
        or value == en_yes&lt;br /&gt;
        or value == &#039;y&#039;&lt;br /&gt;
        or value == &#039;true&#039;&lt;br /&gt;
        or value == &#039;t&#039;&lt;br /&gt;
        or value == &#039;on&#039;&lt;br /&gt;
        or value == &#039;enable&#039;&lt;br /&gt;
        or tonumber(value) == 1&lt;br /&gt;
    then&lt;br /&gt;
        return true&lt;br /&gt;
&lt;br /&gt;
    elseif value == false&lt;br /&gt;
        or value == no&lt;br /&gt;
        or value == en_no&lt;br /&gt;
        or value == &#039;n&#039;&lt;br /&gt;
        or value == &#039;false&#039;&lt;br /&gt;
        or value == &#039;f&#039;&lt;br /&gt;
        or value == &#039;off&#039;&lt;br /&gt;
        or value == &#039;disable&#039;&lt;br /&gt;
        or tonumber(value) == 0&lt;br /&gt;
    then&lt;br /&gt;
        return false&lt;br /&gt;
&lt;br /&gt;
    else&lt;br /&gt;
        return default&lt;br /&gt;
    end&lt;br /&gt;
end&lt;br /&gt;
--  &amp;lt;/nowiki&amp;gt;&lt;/div&gt;</summary>
		<author><name>WikiAdmin</name></author>
	</entry>
	<entry>
		<id>https://unimage.wcnm.pw/index.php?title=%E6%A8%A1%E5%9D%97:Dev/TableTools&amp;diff=720</id>
		<title>模块:Dev/TableTools</title>
		<link rel="alternate" type="text/html" href="https://unimage.wcnm.pw/index.php?title=%E6%A8%A1%E5%9D%97:Dev/TableTools&amp;diff=720"/>
		<updated>2026-08-31T12:54:54Z</updated>

		<summary type="html">&lt;p&gt;WikiAdmin：​从 Fandom Developer Wiki 本地化全局模块，源修订 183115&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;-- 来源：https://dev.fandom.com/wiki/Module%3ATableTools&lt;br /&gt;
-- 许可：CC BY-SA，作者与修订记录见来源页面&lt;br /&gt;
-- &amp;lt;nowiki&amp;gt;&lt;br /&gt;
--------------------------------------------------------------------------------&lt;br /&gt;
-- This module includes a number of functions for dealing with Lua tables.&lt;br /&gt;
--&lt;br /&gt;
-- @script TableTools&lt;br /&gt;
-- @alias p&lt;br /&gt;
-- @release stable&lt;br /&gt;
-- @require [[mw:Extension:Scribunto/Lua_reference_manual#libraryUtil|libraryUtil]]&lt;br /&gt;
-- @attribution [[wikipedia:Module:TableTools|Module:TableTools]] (Wikipedia)&lt;br /&gt;
-- @see [[Wikipedia:Module:TableTools]] for a similar module.&lt;br /&gt;
--------------------------------------------------------------------------------&lt;br /&gt;
local p = {}&lt;br /&gt;
local libraryUtil = require(&#039;libraryUtil&#039;)&lt;br /&gt;
 &lt;br /&gt;
-- Define often-used variables and functions.&lt;br /&gt;
local floor = math.floor&lt;br /&gt;
local infinity = math.huge&lt;br /&gt;
local checkType = libraryUtil.checkType&lt;br /&gt;
&lt;br /&gt;
--------------------------------------------------------------------------------&lt;br /&gt;
-- Returns a new table with all parameters stored into keys 1, 2, etc. and with&lt;br /&gt;
-- a field `n` with the total number of parameters. Note that the resulting&lt;br /&gt;
-- table may not be a sequence.&lt;br /&gt;
--&lt;br /&gt;
-- @function p.pack&lt;br /&gt;
-- @param[opt] ...&lt;br /&gt;
-- @return {table}&lt;br /&gt;
-- @see &amp;lt;http://www.lua.org/manual/5.2/manual.html#pdf-table.pack&amp;gt;&lt;br /&gt;
--------------------------------------------------------------------------------&lt;br /&gt;
function p.pack(...)&lt;br /&gt;
    return {n = select(&#039;#&#039;, ...), ...}&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
--------------------------------------------------------------------------------&lt;br /&gt;
-- Returns the first `n` arguments in `...`. If `n` is negative, arguments are&lt;br /&gt;
-- counted from the end of the table.&lt;br /&gt;
--&lt;br /&gt;
-- @function p.selectFirst&lt;br /&gt;
-- @param {number} n&lt;br /&gt;
-- @param[opt] ...&lt;br /&gt;
-- @see [[Lua reference manual/Standard libraries#select]]&lt;br /&gt;
-- @see &amp;lt;http://lua-users.org/wiki/VarargTheSecondClassCitizen&amp;gt;&lt;br /&gt;
--------------------------------------------------------------------------------&lt;br /&gt;
function p.selectFirst(n, ...)&lt;br /&gt;
    checkType(&#039;Module:Dev/TableTools.selectFirst&#039;, 1, n, &#039;number&#039;)&lt;br /&gt;
&lt;br /&gt;
    local function err()&lt;br /&gt;
        error(&#039;bad argument #1 to \&#039;Module:Dev/TableTools.selectFirst\&#039; &#039; ..&lt;br /&gt;
              &#039;(index out of range)&#039;)&lt;br /&gt;
    end&lt;br /&gt;
&lt;br /&gt;
    local function recurse(index, next, ...)&lt;br /&gt;
        if index == 0 then&lt;br /&gt;
            return&lt;br /&gt;
        end&lt;br /&gt;
&lt;br /&gt;
        return next, recurse(index - 1, ...)&lt;br /&gt;
    end&lt;br /&gt;
&lt;br /&gt;
    n = math.modf(n)&lt;br /&gt;
&lt;br /&gt;
    local count = select(&amp;quot;#&amp;quot;, ...)&lt;br /&gt;
&lt;br /&gt;
    if -count &amp;gt; n then&lt;br /&gt;
        err()&lt;br /&gt;
    elseif -1 &amp;gt; n and n &amp;gt;= -count then&lt;br /&gt;
        return recurse(count + 1 + n, ...)&lt;br /&gt;
    elseif n == -1 then&lt;br /&gt;
        return ...&lt;br /&gt;
    elseif n == 0 then&lt;br /&gt;
        err()&lt;br /&gt;
    elseif n == 1 then&lt;br /&gt;
        return (...)&lt;br /&gt;
    elseif 1 &amp;lt; n and n &amp;lt;= count then&lt;br /&gt;
        return recurse(n, ...)&lt;br /&gt;
    elseif count &amp;lt; n then&lt;br /&gt;
        return ...&lt;br /&gt;
    end&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
--------------------------------------------------------------------------------&lt;br /&gt;
-- Returns `true` if a given table is a sequence.&lt;br /&gt;
--&lt;br /&gt;
-- @function p.isSequence&lt;br /&gt;
-- @param {table} t&lt;br /&gt;
-- @return {boolean}&lt;br /&gt;
-- @see &amp;lt;http://stackoverflow.com/a/6080274&amp;gt;&lt;br /&gt;
--------------------------------------------------------------------------------&lt;br /&gt;
function p.isSequence(t)&lt;br /&gt;
    checkType(&#039;Module:Dev/TableTools.isSequence&#039;, 1, t, &#039;table&#039;)&lt;br /&gt;
&lt;br /&gt;
    local i = 1&lt;br /&gt;
&lt;br /&gt;
    for _ in pairs(t) do&lt;br /&gt;
        if t[i] == nil then&lt;br /&gt;
            return false&lt;br /&gt;
        end&lt;br /&gt;
&lt;br /&gt;
        i = i + 1&lt;br /&gt;
    end&lt;br /&gt;
&lt;br /&gt;
    return true&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
--------------------------------------------------------------------------------&lt;br /&gt;
-- Returns the number of elements in a table, even if it is not a sequence.&lt;br /&gt;
--&lt;br /&gt;
-- @function p.size&lt;br /&gt;
-- @param {table} t&lt;br /&gt;
-- @return {number}&lt;br /&gt;
-- @see &amp;lt;http://stackoverflow.com/a/2705804&amp;gt;&lt;br /&gt;
--------------------------------------------------------------------------------&lt;br /&gt;
function p.size(t)&lt;br /&gt;
    checkType(&#039;Module:Dev/TableTools.size&#039;, 1, t, &#039;table&#039;)&lt;br /&gt;
&lt;br /&gt;
    local i = 0&lt;br /&gt;
&lt;br /&gt;
    for _ in pairs(t) do&lt;br /&gt;
        i = i + 1&lt;br /&gt;
    end&lt;br /&gt;
&lt;br /&gt;
    return i&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
--------------------------------------------------------------------------------&lt;br /&gt;
-- Returns `true` if a given table contains a certain element.&lt;br /&gt;
--&lt;br /&gt;
-- @function p.includes&lt;br /&gt;
-- @param {table} t&lt;br /&gt;
-- @param elm&lt;br /&gt;
-- @return {boolean}&lt;br /&gt;
-- @see &amp;lt;http://stackoverflow.com/q/2282444&amp;gt;&lt;br /&gt;
--------------------------------------------------------------------------------&lt;br /&gt;
function p.includes(t, elm)&lt;br /&gt;
    checkType(&#039;Module:Dev/TableTools.includes&#039;, 1, t, &#039;table&#039;)&lt;br /&gt;
&lt;br /&gt;
    for _, v in pairs(t) do&lt;br /&gt;
        if v == elm then&lt;br /&gt;
            return true&lt;br /&gt;
        end&lt;br /&gt;
    end&lt;br /&gt;
&lt;br /&gt;
    return false&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
--------------------------------------------------------------------------------&lt;br /&gt;
-- Merges the content of the second table with the content in the first one.&lt;br /&gt;
--&lt;br /&gt;
-- @function p.merge&lt;br /&gt;
-- @param {table} dest&lt;br /&gt;
-- @param {table} source&lt;br /&gt;
-- @return {table}&lt;br /&gt;
-- @see &amp;lt;http://wiki.garrysmod.com/page/table/Merge&amp;gt;&lt;br /&gt;
--------------------------------------------------------------------------------&lt;br /&gt;
function p.merge(dest, source)&lt;br /&gt;
    checkType(&#039;Module:Dev/TableTools.merge&#039;, 1, dest, &#039;table&#039;)&lt;br /&gt;
    checkType(&#039;Module:Dev/TableTools.merge&#039;, 2, source, &#039;table&#039;)&lt;br /&gt;
&lt;br /&gt;
    for k, v in pairs(source) do&lt;br /&gt;
        if type(v) == &#039;table&#039; and type(dest[k]) == &#039;table&#039; then&lt;br /&gt;
            -- Don&#039;t overwrite one table with another; instead merge them&lt;br /&gt;
            -- recurisvely.&lt;br /&gt;
            p.merge(dest[k], v)&lt;br /&gt;
        else&lt;br /&gt;
            dest[k] = v&lt;br /&gt;
        end&lt;br /&gt;
    end&lt;br /&gt;
&lt;br /&gt;
    return dest&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
------------------------------------------------------------------------------------&lt;br /&gt;
-- This function returns true if the given value is a positive integer, and false&lt;br /&gt;
-- if not. Although it doesn&#039;t operate on tables, it is included here as it is&lt;br /&gt;
-- useful for determining whether a given table key is in the array part or the&lt;br /&gt;
-- hash part of a table.&lt;br /&gt;
--&lt;br /&gt;
-- @function p.isPositiveInteger&lt;br /&gt;
-- @param v&lt;br /&gt;
-- @return {boolean}&lt;br /&gt;
------------------------------------------------------------------------------------&lt;br /&gt;
function p.isPositiveInteger(v)&lt;br /&gt;
	if type(v) == &#039;number&#039; and v &amp;gt;= 1 and floor(v) == v and v &amp;lt; infinity then&lt;br /&gt;
		return true&lt;br /&gt;
	else&lt;br /&gt;
		return false&lt;br /&gt;
	end&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
------------------------------------------------------------------------------------&lt;br /&gt;
-- This function returns true if the given number is a NaN value, and false&lt;br /&gt;
-- if not. Although it doesn&#039;t operate on tables, it is included here as it is&lt;br /&gt;
-- useful for determining whether a value can be a valid table key. Lua will&lt;br /&gt;
-- generate an error if a NaN is used as a table key.&lt;br /&gt;
--&lt;br /&gt;
-- @function p.isNan&lt;br /&gt;
-- @param v&lt;br /&gt;
-- @return {boolean}&lt;br /&gt;
------------------------------------------------------------------------------------&lt;br /&gt;
function p.isNan(v)&lt;br /&gt;
	if type(v) == &#039;number&#039; and tostring(v) == &#039;-nan&#039; then&lt;br /&gt;
		return true&lt;br /&gt;
	else&lt;br /&gt;
		return false&lt;br /&gt;
	end&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
------------------------------------------------------------------------------------&lt;br /&gt;
-- This returns a clone of a table. The value returned is a new table, but all&lt;br /&gt;
-- subtables and functions are shared. Metamethods are respected, but the returned&lt;br /&gt;
-- table will have no metatable of its own.&lt;br /&gt;
--&lt;br /&gt;
-- @function p.shallowClone&lt;br /&gt;
-- @param {table} t&lt;br /&gt;
-- @return {table}&lt;br /&gt;
------------------------------------------------------------------------------------&lt;br /&gt;
function p.shallowClone(t)&lt;br /&gt;
	local ret = {}&lt;br /&gt;
	for k, v in pairs(t) do&lt;br /&gt;
		ret[k] = v&lt;br /&gt;
	end&lt;br /&gt;
	return ret&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
------------------------------------------------------------------------------------&lt;br /&gt;
-- This removes duplicate values from an array. Non-positive-integer keys are&lt;br /&gt;
-- ignored. The earliest value is kept, and all subsequent duplicate values are&lt;br /&gt;
-- removed, but otherwise the array order is unchanged.&lt;br /&gt;
--&lt;br /&gt;
-- @function p.removeDuplicates&lt;br /&gt;
-- @param {table} t&lt;br /&gt;
-- @return {table}&lt;br /&gt;
------------------------------------------------------------------------------------&lt;br /&gt;
function p.removeDuplicates(t)&lt;br /&gt;
	checkType(&#039;removeDuplicates&#039;, 1, t, &#039;table&#039;)&lt;br /&gt;
	local isNan = p.isNan&lt;br /&gt;
	local ret, exists = {}, {}&lt;br /&gt;
	for i, v in ipairs(t) do&lt;br /&gt;
		if isNan(v) then&lt;br /&gt;
			-- NaNs can&#039;t be table keys, and they are also unique, so we don&#039;t need to check existence.&lt;br /&gt;
			ret[#ret + 1] = v&lt;br /&gt;
		else&lt;br /&gt;
			if not exists[v] then&lt;br /&gt;
				ret[#ret + 1] = v&lt;br /&gt;
				exists[v] = true&lt;br /&gt;
			end&lt;br /&gt;
		end	&lt;br /&gt;
	end&lt;br /&gt;
	return ret&lt;br /&gt;
end			&lt;br /&gt;
&lt;br /&gt;
------------------------------------------------------------------------------------&lt;br /&gt;
-- This takes a table and returns an array containing the numbers of any numerical&lt;br /&gt;
-- keys that have non-nil values, sorted in numerical order.&lt;br /&gt;
--&lt;br /&gt;
-- @function p.numKeys&lt;br /&gt;
-- @param {table} t&lt;br /&gt;
-- @return {table}&lt;br /&gt;
------------------------------------------------------------------------------------&lt;br /&gt;
function p.numKeys(t)&lt;br /&gt;
	checkType(&#039;numKeys&#039;, 1, t, &#039;table&#039;)&lt;br /&gt;
	local isPositiveInteger = p.isPositiveInteger&lt;br /&gt;
	local nums = {}&lt;br /&gt;
	for k, v in pairs(t) do&lt;br /&gt;
		if isPositiveInteger(k) then&lt;br /&gt;
			nums[#nums + 1] = k&lt;br /&gt;
		end&lt;br /&gt;
	end&lt;br /&gt;
	table.sort(nums)&lt;br /&gt;
	return nums&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
------------------------------------------------------------------------------------&lt;br /&gt;
-- This takes a table and returns an array containing the numbers of keys with the&lt;br /&gt;
-- specified prefix and suffix. For example, for the table&lt;br /&gt;
-- {a1 = &#039;foo&#039;, a3 = &#039;bar&#039;, a6 = &#039;baz&#039;} and the prefix &amp;quot;a&amp;quot;, affixNums will&lt;br /&gt;
-- return {1, 3, 6}.&lt;br /&gt;
--&lt;br /&gt;
-- @function p.affixNums&lt;br /&gt;
-- @param {table} t&lt;br /&gt;
-- @param[opt] {boolean} prefix&lt;br /&gt;
-- @param[opt] {boolean} suffix&lt;br /&gt;
-- @return {table}&lt;br /&gt;
------------------------------------------------------------------------------------&lt;br /&gt;
function p.affixNums(t, prefix, suffix)&lt;br /&gt;
	checkType(&#039;affixNums&#039;, 1, t, &#039;table&#039;)&lt;br /&gt;
	checkType(&#039;affixNums&#039;, 2, prefix, &#039;string&#039;, true)&lt;br /&gt;
	checkType(&#039;affixNums&#039;, 3, suffix, &#039;string&#039;, true)&lt;br /&gt;
&lt;br /&gt;
	local function cleanPattern(s)&lt;br /&gt;
		-- Cleans a pattern so that the magic characters ()%.[]*+-?^$ are interpreted literally.&lt;br /&gt;
		s = s:gsub(&#039;([%(%)%%%.%[%]%*%+%-%?%^%$])&#039;, &#039;%%%1&#039;)&lt;br /&gt;
		return s&lt;br /&gt;
	end&lt;br /&gt;
&lt;br /&gt;
	prefix = prefix or &#039;&#039;&lt;br /&gt;
	suffix = suffix or &#039;&#039;&lt;br /&gt;
	prefix = cleanPattern(prefix)&lt;br /&gt;
	suffix = cleanPattern(suffix)&lt;br /&gt;
	local pattern = &#039;^&#039; .. prefix .. &#039;([1-9]%d*)&#039; .. suffix .. &#039;$&#039;&lt;br /&gt;
&lt;br /&gt;
	local nums = {}&lt;br /&gt;
	for k, v in pairs(t) do&lt;br /&gt;
		if type(k) == &#039;string&#039; then			&lt;br /&gt;
			local num = mw.ustring.match(k, pattern)&lt;br /&gt;
			if num then&lt;br /&gt;
				nums[#nums + 1] = tonumber(num)&lt;br /&gt;
			end&lt;br /&gt;
		end&lt;br /&gt;
	end&lt;br /&gt;
	table.sort(nums)&lt;br /&gt;
	return nums&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
------------------------------------------------------------------------------------&lt;br /&gt;
-- Given a table with keys like (&amp;quot;foo1&amp;quot;, &amp;quot;bar1&amp;quot;, &amp;quot;foo2&amp;quot;, &amp;quot;baz2&amp;quot;), returns a table&lt;br /&gt;
-- of subtables in the format &lt;br /&gt;
-- { [1] = {foo = &#039;text&#039;, bar = &#039;text&#039;}, [2] = {foo = &#039;text&#039;, baz = &#039;text&#039;} }&lt;br /&gt;
-- Keys that don&#039;t end with an integer are stored in a subtable named &amp;quot;other&amp;quot;.&lt;br /&gt;
-- The compress option compresses the table so that it can be iterated over with&lt;br /&gt;
-- ipairs.&lt;br /&gt;
--&lt;br /&gt;
-- @function p.numData&lt;br /&gt;
-- @param {table} t&lt;br /&gt;
-- @param[opt] {boolean} compress&lt;br /&gt;
-- @return {table}&lt;br /&gt;
------------------------------------------------------------------------------------&lt;br /&gt;
function p.numData(t, compress)&lt;br /&gt;
	checkType(&#039;numData&#039;, 1, t, &#039;table&#039;)&lt;br /&gt;
	checkType(&#039;numData&#039;, 2, compress, &#039;boolean&#039;, true)&lt;br /&gt;
	local ret = {}&lt;br /&gt;
	for k, v in pairs(t) do&lt;br /&gt;
		local prefix, num = mw.ustring.match(tostring(k), &#039;^([^0-9]*)([1-9][0-9]*)$&#039;)&lt;br /&gt;
		if num then&lt;br /&gt;
			num = tonumber(num)&lt;br /&gt;
			local subtable = ret[num] or {}&lt;br /&gt;
			if prefix == &#039;&#039; then&lt;br /&gt;
				-- Positional parameters match the blank string; put them at the start of the subtable instead.&lt;br /&gt;
				prefix = 1&lt;br /&gt;
			end&lt;br /&gt;
			subtable[prefix] = v&lt;br /&gt;
			ret[num] = subtable&lt;br /&gt;
		else&lt;br /&gt;
			local subtable = ret.other or {}&lt;br /&gt;
			subtable[k] = v&lt;br /&gt;
			ret.other = subtable&lt;br /&gt;
		end&lt;br /&gt;
	end&lt;br /&gt;
	if compress then&lt;br /&gt;
		local other = ret.other&lt;br /&gt;
		ret = p.compressSparseArray(ret)&lt;br /&gt;
		ret.other = other&lt;br /&gt;
	end&lt;br /&gt;
	return ret&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
------------------------------------------------------------------------------------&lt;br /&gt;
-- This takes an array with one or more nil values, and removes the nil values&lt;br /&gt;
-- while preserving the order, so that the array can be safely traversed with&lt;br /&gt;
-- ipairs.&lt;br /&gt;
--&lt;br /&gt;
-- @function p.compressSparseArray&lt;br /&gt;
-- @param {table} t&lt;br /&gt;
-- @return {table}&lt;br /&gt;
------------------------------------------------------------------------------------&lt;br /&gt;
function p.compressSparseArray(t)&lt;br /&gt;
	checkType(&#039;compressSparseArray&#039;, 1, t, &#039;table&#039;)&lt;br /&gt;
	local ret = {}&lt;br /&gt;
	local nums = p.numKeys(t)&lt;br /&gt;
	for _, num in ipairs(nums) do&lt;br /&gt;
		ret[#ret + 1] = t[num]&lt;br /&gt;
	end&lt;br /&gt;
	return ret&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
------------------------------------------------------------------------------------&lt;br /&gt;
-- This is an iterator for sparse arrays. It can be used like ipairs, but can&lt;br /&gt;
-- handle nil values.&lt;br /&gt;
--&lt;br /&gt;
-- @function p.sparseIpairs&lt;br /&gt;
-- @param {table} t&lt;br /&gt;
-- @return {function}&lt;br /&gt;
------------------------------------------------------------------------------------&lt;br /&gt;
function p.sparseIpairs(t)&lt;br /&gt;
	checkType(&#039;sparseIpairs&#039;, 1, t, &#039;table&#039;)&lt;br /&gt;
	local nums = p.numKeys(t)&lt;br /&gt;
	local i = 0&lt;br /&gt;
	local lim = #nums&lt;br /&gt;
	return function ()&lt;br /&gt;
		i = i + 1&lt;br /&gt;
		if i &amp;lt;= lim then&lt;br /&gt;
			local key = nums[i]&lt;br /&gt;
			return key, t[key]&lt;br /&gt;
		else&lt;br /&gt;
			return nil, nil&lt;br /&gt;
		end&lt;br /&gt;
	end&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
------------------------------------------------------------------------------------&lt;br /&gt;
-- This returns the length of a table, or the first integer key n counting from&lt;br /&gt;
-- 1 such that t[n + 1] is nil. It is similar to the operator #, but may return&lt;br /&gt;
-- a different value when there are gaps in the array portion of the table.&lt;br /&gt;
-- Intended to be used on data loaded with mw.loadData. For other tables, use #.&lt;br /&gt;
-- Note: #frame.args in frame object always be set to 0, regardless of &lt;br /&gt;
-- the number of unnamed template parameters, so use this function for&lt;br /&gt;
-- frame.args.&lt;br /&gt;
-- &lt;br /&gt;
-- @function p.length&lt;br /&gt;
-- @param {table} t&lt;br /&gt;
-- @return {number}&lt;br /&gt;
------------------------------------------------------------------------------------&lt;br /&gt;
function p.length(t)&lt;br /&gt;
	local i = 1&lt;br /&gt;
	while t[i] ~= nil do&lt;br /&gt;
		i = i + 1&lt;br /&gt;
	end&lt;br /&gt;
	return i - 1&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
return p&lt;br /&gt;
&lt;br /&gt;
-- &amp;lt;/nowiki&amp;gt;&lt;br /&gt;
-- (Add categories here.)&lt;/div&gt;</summary>
		<author><name>WikiAdmin</name></author>
	</entry>
	<entry>
		<id>https://unimage.wcnm.pw/index.php?title=%E6%A8%A1%E5%9D%97:Dev/Quote/i18n&amp;diff=719</id>
		<title>模块:Dev/Quote/i18n</title>
		<link rel="alternate" type="text/html" href="https://unimage.wcnm.pw/index.php?title=%E6%A8%A1%E5%9D%97:Dev/Quote/i18n&amp;diff=719"/>
		<updated>2026-08-31T12:54:54Z</updated>

		<summary type="html">&lt;p&gt;WikiAdmin：​从 Fandom Developer Wiki 本地化全局模块，源修订 205803&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;-- 来源：https://dev.fandom.com/wiki/Module%3AQuote/i18n&lt;br /&gt;
-- 许可：CC BY-SA，作者与修订记录见来源页面&lt;br /&gt;
-- &amp;lt;nowiki&amp;gt;&lt;br /&gt;
return {&lt;br /&gt;
    [&amp;quot;_metadata&amp;quot;] = {&lt;br /&gt;
        [&amp;quot;order&amp;quot;] = {&lt;br /&gt;
            &amp;quot;align&amp;quot;,&lt;br /&gt;
            &amp;quot;class&amp;quot;,&lt;br /&gt;
            &amp;quot;context&amp;quot;,&lt;br /&gt;
            &amp;quot;person&amp;quot;,&lt;br /&gt;
            &amp;quot;personquoted&amp;quot;,&lt;br /&gt;
            &amp;quot;quote&amp;quot;,&lt;br /&gt;
            &amp;quot;quotesource&amp;quot;,&lt;br /&gt;
            &amp;quot;quotetext&amp;quot;,&lt;br /&gt;
            &amp;quot;quotewidth&amp;quot;,&lt;br /&gt;
            &amp;quot;source&amp;quot;,&lt;br /&gt;
            &amp;quot;speaker&amp;quot;,&lt;br /&gt;
            &amp;quot;style&amp;quot;,&lt;br /&gt;
            &amp;quot;text&amp;quot;,&lt;br /&gt;
            &amp;quot;width&amp;quot;&lt;br /&gt;
        }&lt;br /&gt;
    },&lt;br /&gt;
    [&amp;quot;en&amp;quot;] = {&lt;br /&gt;
        [&amp;quot;align&amp;quot;] = &amp;quot;align&amp;quot;,&lt;br /&gt;
        [&amp;quot;class&amp;quot;] = &amp;quot;class&amp;quot;,&lt;br /&gt;
        [&amp;quot;context&amp;quot;] = &amp;quot;context&amp;quot;,&lt;br /&gt;
        [&amp;quot;person&amp;quot;] = &amp;quot;person&amp;quot;,&lt;br /&gt;
        [&amp;quot;personquoted&amp;quot;] = &amp;quot;personquoted&amp;quot;,&lt;br /&gt;
        [&amp;quot;quote&amp;quot;] = &amp;quot;quote&amp;quot;,&lt;br /&gt;
        [&amp;quot;quotesource&amp;quot;] = &amp;quot;quotesource&amp;quot;,&lt;br /&gt;
        [&amp;quot;quotetext&amp;quot;] = &amp;quot;quotetext&amp;quot;,&lt;br /&gt;
        [&amp;quot;quotewidth&amp;quot;] = &amp;quot;quotewidth&amp;quot;,&lt;br /&gt;
        [&amp;quot;source&amp;quot;] = &amp;quot;source&amp;quot;,&lt;br /&gt;
        [&amp;quot;speaker&amp;quot;] = &amp;quot;speaker&amp;quot;,&lt;br /&gt;
        [&amp;quot;style&amp;quot;] = &amp;quot;style&amp;quot;,&lt;br /&gt;
        [&amp;quot;text&amp;quot;] = &amp;quot;text&amp;quot;,&lt;br /&gt;
        [&amp;quot;width&amp;quot;] = &amp;quot;width&amp;quot;&lt;br /&gt;
    },&lt;br /&gt;
    [&amp;quot;de&amp;quot;] = {&lt;br /&gt;
        [&amp;quot;align&amp;quot;] = &amp;quot;textausrichtung&amp;quot;,&lt;br /&gt;
        [&amp;quot;class&amp;quot;] = &amp;quot;klasse&amp;quot;,&lt;br /&gt;
        [&amp;quot;context&amp;quot;] = &amp;quot;kontext&amp;quot;,&lt;br /&gt;
        [&amp;quot;person&amp;quot;] = &amp;quot;person&amp;quot;,&lt;br /&gt;
        [&amp;quot;personquoted&amp;quot;] = &amp;quot;zitierte person&amp;quot;,&lt;br /&gt;
        [&amp;quot;quote&amp;quot;] = &amp;quot;zitat&amp;quot;,&lt;br /&gt;
        [&amp;quot;quotesource&amp;quot;] = &amp;quot;zitatquelle&amp;quot;,&lt;br /&gt;
        [&amp;quot;quotetext&amp;quot;] = &amp;quot;zitattext&amp;quot;,&lt;br /&gt;
        [&amp;quot;quotewidth&amp;quot;] = &amp;quot;zitatbreite&amp;quot;,&lt;br /&gt;
        [&amp;quot;source&amp;quot;] = &amp;quot;quelle&amp;quot;,&lt;br /&gt;
        [&amp;quot;speaker&amp;quot;] = &amp;quot;sprecher&amp;quot;,&lt;br /&gt;
        [&amp;quot;style&amp;quot;] = &amp;quot;style&amp;quot;,&lt;br /&gt;
        [&amp;quot;text&amp;quot;] = &amp;quot;text&amp;quot;,&lt;br /&gt;
        [&amp;quot;width&amp;quot;] = &amp;quot;breite&amp;quot;&lt;br /&gt;
    },&lt;br /&gt;
    [&amp;quot;et&amp;quot;] = {&lt;br /&gt;
        [&amp;quot;align&amp;quot;] = &amp;quot;joondus&amp;quot;,&lt;br /&gt;
        [&amp;quot;class&amp;quot;] = &amp;quot;klass&amp;quot;,&lt;br /&gt;
        [&amp;quot;context&amp;quot;] = &amp;quot;kontekst&amp;quot;,&lt;br /&gt;
        [&amp;quot;person&amp;quot;] = &amp;quot;isik&amp;quot;,&lt;br /&gt;
        [&amp;quot;personquoted&amp;quot;] = &amp;quot;tsiteeritudisik&amp;quot;,&lt;br /&gt;
        [&amp;quot;quote&amp;quot;] = &amp;quot;tsitaat&amp;quot;,&lt;br /&gt;
        [&amp;quot;quotesource&amp;quot;] = &amp;quot;tsitaadiallikas&amp;quot;,&lt;br /&gt;
        [&amp;quot;quotetext&amp;quot;] = &amp;quot;tsitaaditekst&amp;quot;,&lt;br /&gt;
        [&amp;quot;quotewidth&amp;quot;] = &amp;quot;tsitaadilaius&amp;quot;,&lt;br /&gt;
        [&amp;quot;source&amp;quot;] = &amp;quot;alikas&amp;quot;,&lt;br /&gt;
        [&amp;quot;speaker&amp;quot;] = &amp;quot;kõneleja&amp;quot;,&lt;br /&gt;
        [&amp;quot;style&amp;quot;] = &amp;quot;stiil&amp;quot;,&lt;br /&gt;
        [&amp;quot;text&amp;quot;] = &amp;quot;tekst&amp;quot;,&lt;br /&gt;
        [&amp;quot;width&amp;quot;] = &amp;quot;laius&amp;quot;&lt;br /&gt;
    },&lt;br /&gt;
    [&amp;quot;hi&amp;quot;] = {&lt;br /&gt;
        [&amp;quot;align&amp;quot;] = &amp;quot;संरेखण&amp;quot;,&lt;br /&gt;
        [&amp;quot;class&amp;quot;] = &amp;quot;क्लास&amp;quot;,&lt;br /&gt;
        [&amp;quot;context&amp;quot;] = &amp;quot;प्रसंग&amp;quot;,&lt;br /&gt;
        [&amp;quot;person&amp;quot;] = &amp;quot;व्यक्ति&amp;quot;,&lt;br /&gt;
        [&amp;quot;personquoted&amp;quot;] = &amp;quot;personquoted&amp;quot;,&lt;br /&gt;
        [&amp;quot;quote&amp;quot;] = &amp;quot;उद्धरण&amp;quot;,&lt;br /&gt;
        [&amp;quot;quotesource&amp;quot;] = &amp;quot;quotesource&amp;quot;,&lt;br /&gt;
        [&amp;quot;quotetext&amp;quot;] = &amp;quot;quotetext&amp;quot;,&lt;br /&gt;
        [&amp;quot;quotewidth&amp;quot;] = &amp;quot;quotewidth&amp;quot;,&lt;br /&gt;
        [&amp;quot;source&amp;quot;] = &amp;quot;स्रोत&amp;quot;,&lt;br /&gt;
        [&amp;quot;speaker&amp;quot;] = &amp;quot;वक्ता&amp;quot;,&lt;br /&gt;
        [&amp;quot;style&amp;quot;] = &amp;quot;स्टाइल&amp;quot;,&lt;br /&gt;
        [&amp;quot;text&amp;quot;] = &amp;quot;टेक्स्ट&amp;quot;,&lt;br /&gt;
        [&amp;quot;width&amp;quot;] = &amp;quot;चौड़ाई&amp;quot;&lt;br /&gt;
    },&lt;br /&gt;
    [&amp;quot;pl&amp;quot;] = {&lt;br /&gt;
        [&amp;quot;align&amp;quot;] = &amp;quot;wyrównanie&amp;quot;,&lt;br /&gt;
        [&amp;quot;class&amp;quot;] = &amp;quot;klasa&amp;quot;,&lt;br /&gt;
        [&amp;quot;context&amp;quot;] = &amp;quot;kontekst&amp;quot;,&lt;br /&gt;
        [&amp;quot;person&amp;quot;] = &amp;quot;osoba&amp;quot;,&lt;br /&gt;
        [&amp;quot;personquoted&amp;quot;] = &amp;quot;cytowana osoba&amp;quot;,&lt;br /&gt;
        [&amp;quot;quote&amp;quot;] = &amp;quot;cytat&amp;quot;,&lt;br /&gt;
        [&amp;quot;quotesource&amp;quot;] = &amp;quot;źródło cytatu&amp;quot;,&lt;br /&gt;
        [&amp;quot;quotetext&amp;quot;] = &amp;quot;tekst cytatu&amp;quot;,&lt;br /&gt;
        [&amp;quot;quotewidth&amp;quot;] = &amp;quot;szerokość cytatu&amp;quot;,&lt;br /&gt;
        [&amp;quot;source&amp;quot;] = &amp;quot;źródło&amp;quot;,&lt;br /&gt;
        [&amp;quot;speaker&amp;quot;] = &amp;quot;mówca&amp;quot;,&lt;br /&gt;
        [&amp;quot;style&amp;quot;] = &amp;quot;style&amp;quot;,&lt;br /&gt;
        [&amp;quot;text&amp;quot;] = &amp;quot;tekst&amp;quot;,&lt;br /&gt;
        [&amp;quot;width&amp;quot;] = &amp;quot;szerokość&amp;quot;&lt;br /&gt;
    },&lt;br /&gt;
    [&amp;quot;pt-br&amp;quot;] = {&lt;br /&gt;
        [&amp;quot;align&amp;quot;] = &amp;quot;alinhar&amp;quot;,&lt;br /&gt;
        [&amp;quot;class&amp;quot;] = &amp;quot;class&amp;quot;,&lt;br /&gt;
        [&amp;quot;context&amp;quot;] = &amp;quot;contexto&amp;quot;,&lt;br /&gt;
        [&amp;quot;person&amp;quot;] = &amp;quot;pessoa&amp;quot;,&lt;br /&gt;
        [&amp;quot;personquoted&amp;quot;] = &amp;quot;citado por pessoa&amp;quot;,&lt;br /&gt;
        [&amp;quot;quote&amp;quot;] = &amp;quot;citação&amp;quot;,&lt;br /&gt;
        [&amp;quot;quotesource&amp;quot;] = &amp;quot;fonte da citação&amp;quot;,&lt;br /&gt;
        [&amp;quot;quotetext&amp;quot;] = &amp;quot;textp da citação&amp;quot;,&lt;br /&gt;
        [&amp;quot;quotewidth&amp;quot;] = &amp;quot;largura da citação&amp;quot;,&lt;br /&gt;
        [&amp;quot;source&amp;quot;] = &amp;quot;fonte&amp;quot;,&lt;br /&gt;
        [&amp;quot;speaker&amp;quot;] = &amp;quot;orador&amp;quot;,&lt;br /&gt;
        [&amp;quot;style&amp;quot;] = &amp;quot;estilo&amp;quot;,&lt;br /&gt;
        [&amp;quot;text&amp;quot;] = &amp;quot;texto&amp;quot;,&lt;br /&gt;
        [&amp;quot;width&amp;quot;] = &amp;quot;largura&amp;quot;&lt;br /&gt;
    },&lt;br /&gt;
    [&amp;quot;ru&amp;quot;] = {&lt;br /&gt;
        [&amp;quot;align&amp;quot;] = &amp;quot;align&amp;quot;,&lt;br /&gt;
        [&amp;quot;class&amp;quot;] = &amp;quot;class&amp;quot;,&lt;br /&gt;
        [&amp;quot;context&amp;quot;] = &amp;quot;context&amp;quot;,&lt;br /&gt;
        [&amp;quot;person&amp;quot;] = &amp;quot;person&amp;quot;,&lt;br /&gt;
        [&amp;quot;personquoted&amp;quot;] = &amp;quot;personquoted&amp;quot;,&lt;br /&gt;
        [&amp;quot;quote&amp;quot;] = &amp;quot;цитата&amp;quot;,&lt;br /&gt;
        [&amp;quot;quotesource&amp;quot;] = &amp;quot;quotesource&amp;quot;,&lt;br /&gt;
        [&amp;quot;quotetext&amp;quot;] = &amp;quot;quotetext&amp;quot;,&lt;br /&gt;
        [&amp;quot;quotewidth&amp;quot;] = &amp;quot;quotewidth&amp;quot;,&lt;br /&gt;
        [&amp;quot;source&amp;quot;] = &amp;quot;источник&amp;quot;,&lt;br /&gt;
        [&amp;quot;speaker&amp;quot;] = &amp;quot;автор&amp;quot;,&lt;br /&gt;
        [&amp;quot;style&amp;quot;] = &amp;quot;style&amp;quot;,&lt;br /&gt;
        [&amp;quot;text&amp;quot;] = &amp;quot;text&amp;quot;,&lt;br /&gt;
        [&amp;quot;width&amp;quot;] = &amp;quot;width&amp;quot;&lt;br /&gt;
    },&lt;br /&gt;
    [&amp;quot;th&amp;quot;] = {&lt;br /&gt;
        [&amp;quot;context&amp;quot;] = &amp;quot;ข้อมูล&amp;quot;,&lt;br /&gt;
        [&amp;quot;person&amp;quot;] = &amp;quot;บุคคล&amp;quot;,&lt;br /&gt;
        [&amp;quot;style&amp;quot;] = &amp;quot;ลักษณะ&amp;quot;,&lt;br /&gt;
        [&amp;quot;width&amp;quot;] = &amp;quot;กว้าง&amp;quot;&lt;br /&gt;
    },&lt;br /&gt;
    [&amp;quot;tl&amp;quot;] = {&lt;br /&gt;
        [&amp;quot;align&amp;quot;] = &amp;quot;paghahanay&amp;quot;,&lt;br /&gt;
        [&amp;quot;class&amp;quot;] = &amp;quot;klase&amp;quot;,&lt;br /&gt;
        [&amp;quot;context&amp;quot;] = &amp;quot;konteksto&amp;quot;,&lt;br /&gt;
        [&amp;quot;person&amp;quot;] = &amp;quot;tao&amp;quot;,&lt;br /&gt;
        [&amp;quot;personquoted&amp;quot;] = &amp;quot;&amp;quot;,&lt;br /&gt;
        [&amp;quot;quote&amp;quot;] = &amp;quot;quote&amp;quot;,&lt;br /&gt;
        [&amp;quot;quotesource&amp;quot;] = &amp;quot;pinagmulanngquote&amp;quot;,&lt;br /&gt;
        [&amp;quot;quotetext&amp;quot;] = &amp;quot;tekstongquote&amp;quot;,&lt;br /&gt;
        [&amp;quot;quotewidth&amp;quot;] = &amp;quot;lapadngquote&amp;quot;,&lt;br /&gt;
        [&amp;quot;source&amp;quot;] = &amp;quot;pinagkukunan&amp;quot;,&lt;br /&gt;
        [&amp;quot;speaker&amp;quot;] = &amp;quot;tagapagsalita&amp;quot;,&lt;br /&gt;
        [&amp;quot;style&amp;quot;] = &amp;quot;istilo&amp;quot;,&lt;br /&gt;
        [&amp;quot;text&amp;quot;] = &amp;quot;teksto&amp;quot;,&lt;br /&gt;
        [&amp;quot;width&amp;quot;] = &amp;quot;haba&amp;quot;&lt;br /&gt;
    },&lt;br /&gt;
    [&amp;quot;tr&amp;quot;] = {&lt;br /&gt;
        [&amp;quot;align&amp;quot;] = &amp;quot;hizalama&amp;quot;,&lt;br /&gt;
        [&amp;quot;class&amp;quot;] = &amp;quot;sınıf&amp;quot;,&lt;br /&gt;
        [&amp;quot;context&amp;quot;] = &amp;quot;bağlam&amp;quot;,&lt;br /&gt;
        [&amp;quot;person&amp;quot;] = &amp;quot;kişi&amp;quot;,&lt;br /&gt;
        [&amp;quot;personquoted&amp;quot;] = &amp;quot;kişitırnağı&amp;quot;,&lt;br /&gt;
        [&amp;quot;quote&amp;quot;] = &amp;quot;ksöz&amp;quot;,&lt;br /&gt;
        [&amp;quot;quotesource&amp;quot;] = &amp;quot;tırnakkaynağı&amp;quot;,&lt;br /&gt;
        [&amp;quot;quotetext&amp;quot;] = &amp;quot;tırnakmetni&amp;quot;,&lt;br /&gt;
        [&amp;quot;quotewidth&amp;quot;] = &amp;quot;tırnakgenişliği&amp;quot;,&lt;br /&gt;
        [&amp;quot;source&amp;quot;] = &amp;quot;kaynak&amp;quot;,&lt;br /&gt;
        [&amp;quot;speaker&amp;quot;] = &amp;quot;sözcü&amp;quot;,&lt;br /&gt;
        [&amp;quot;style&amp;quot;] = &amp;quot;stil&amp;quot;,&lt;br /&gt;
        [&amp;quot;text&amp;quot;] = &amp;quot;metin&amp;quot;,&lt;br /&gt;
        [&amp;quot;width&amp;quot;] = &amp;quot;genişlik&amp;quot;&lt;br /&gt;
    },&lt;br /&gt;
    [&amp;quot;vi&amp;quot;] = {&lt;br /&gt;
        [&amp;quot;align&amp;quot;] = &amp;quot;căn&amp;quot;,&lt;br /&gt;
        [&amp;quot;class&amp;quot;] = &amp;quot;lớp&amp;quot;,&lt;br /&gt;
        [&amp;quot;context&amp;quot;] = &amp;quot;nội dung&amp;quot;,&lt;br /&gt;
        [&amp;quot;person&amp;quot;] = &amp;quot;người&amp;quot;,&lt;br /&gt;
        [&amp;quot;personquoted&amp;quot;] = &amp;quot;người nói&amp;quot;,&lt;br /&gt;
        [&amp;quot;quote&amp;quot;] = &amp;quot;trích dẫn&amp;quot;,&lt;br /&gt;
        [&amp;quot;quotesource&amp;quot;] = &amp;quot;nguồn trích dẫn&amp;quot;,&lt;br /&gt;
        [&amp;quot;quotetext&amp;quot;] = &amp;quot;văn bản trích dẫn&amp;quot;,&lt;br /&gt;
        [&amp;quot;quotewidth&amp;quot;] = &amp;quot;chiều dài trích dẫn&amp;quot;,&lt;br /&gt;
        [&amp;quot;source&amp;quot;] = &amp;quot;nguồn&amp;quot;,&lt;br /&gt;
        [&amp;quot;speaker&amp;quot;] = &amp;quot;diễn giả&amp;quot;,&lt;br /&gt;
        [&amp;quot;style&amp;quot;] = &amp;quot;kiểu dáng&amp;quot;,&lt;br /&gt;
        [&amp;quot;text&amp;quot;] = &amp;quot;văn bản&amp;quot;,&lt;br /&gt;
        [&amp;quot;width&amp;quot;] = &amp;quot;chiều dài&amp;quot;&lt;br /&gt;
    }&lt;br /&gt;
}&lt;br /&gt;
-- &amp;lt;/nowiki&amp;gt;&lt;/div&gt;</summary>
		<author><name>WikiAdmin</name></author>
	</entry>
	<entry>
		<id>https://unimage.wcnm.pw/index.php?title=%E6%A8%A1%E5%9D%97:Dev/Quote&amp;diff=718</id>
		<title>模块:Dev/Quote</title>
		<link rel="alternate" type="text/html" href="https://unimage.wcnm.pw/index.php?title=%E6%A8%A1%E5%9D%97:Dev/Quote&amp;diff=718"/>
		<updated>2026-08-31T12:54:53Z</updated>

		<summary type="html">&lt;p&gt;WikiAdmin：​从 Fandom Developer Wiki 本地化全局模块，源修订 214339&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;-- 来源：https://dev.fandom.com/wiki/Module%3AQuote&lt;br /&gt;
-- 许可：CC BY-SA，作者与修订记录见来源页面&lt;br /&gt;
-- &amp;lt;nowiki&amp;gt;&lt;br /&gt;
local Quote = {}&lt;br /&gt;
local getArgs = require(&#039;Module:Dev/Arguments&#039;).getArgs&lt;br /&gt;
local i18n = require(&#039;Module:Dev/I18n&#039;).loadMessages(&#039;Quote&#039;)&lt;br /&gt;
&lt;br /&gt;
local function build(quote_contents, quote_source, options)&lt;br /&gt;
	local quote_container = mw.html.create(&#039;blockquote&#039;)&lt;br /&gt;
		:addClass(&#039;pull-quote&#039;)&lt;br /&gt;
		:addClass(options.align)&lt;br /&gt;
		:addClass(options.extraclasses)&lt;br /&gt;
		:css(options.styles)&lt;br /&gt;
		:cssText(options.extrastyles)&lt;br /&gt;
		:node(quote_contents)&lt;br /&gt;
&lt;br /&gt;
	if quote_source then&lt;br /&gt;
		quote_container:tag(&#039;div&#039;)&lt;br /&gt;
			:addClass(&#039;pull-quote__source&#039;)&lt;br /&gt;
				:tag(&#039;cite&#039;)&lt;br /&gt;
				:wikitext(quote_source)&lt;br /&gt;
				:done()&lt;br /&gt;
			:done()&lt;br /&gt;
	end&lt;br /&gt;
&lt;br /&gt;
	return quote_container&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
local function options(args)&lt;br /&gt;
	local options = {}&lt;br /&gt;
&lt;br /&gt;
	options.styles = {}&lt;br /&gt;
	options.extraclasses = i18n:parameter(&#039;class&#039;, args)&lt;br /&gt;
	options.extrastyles = i18n:parameter(&#039;style&#039;, args)&lt;br /&gt;
	options.align = &#039;&#039;&lt;br /&gt;
	local align = i18n:parameter(&#039;align&#039;, args)&lt;br /&gt;
	if align then&lt;br /&gt;
		options.align = &#039;pull-quote--&#039; .. align&lt;br /&gt;
		options.styles[&#039;width&#039;] = i18n:parameter(&#039;width&#039;, args) or&lt;br /&gt;
								  i18n:parameter(&#039;quotewidth&#039;, args) or&lt;br /&gt;
								  &#039;300px&#039;&lt;br /&gt;
	end&lt;br /&gt;
&lt;br /&gt;
	return options&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
-- let MediaWiki parser auto-generate &amp;lt;p&amp;gt; tags&lt;br /&gt;
local function paragraph(quotetext)&lt;br /&gt;
	return &#039;\n&#039; .. quotetext .. &#039;\n&#039;&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
function Quote.quote(frame)&lt;br /&gt;
	local args = getArgs(frame)&lt;br /&gt;
&lt;br /&gt;
	local options = options(args)&lt;br /&gt;
&lt;br /&gt;
	local quotetext = args[1] or&lt;br /&gt;
					  i18n:parameter(&#039;quotetext&#039;, args) or&lt;br /&gt;
					  i18n:parameter(&#039;quote&#039;, args) or&lt;br /&gt;
					  i18n:parameter(&#039;text&#039;, args) or &#039;&#039;&lt;br /&gt;
&lt;br /&gt;
	local person = args[2] or&lt;br /&gt;
				   i18n:parameter(&#039;person&#039;, args) or&lt;br /&gt;
				   i18n:parameter(&#039;speaker&#039;, args) or&lt;br /&gt;
				   i18n:parameter(&#039;personquoted&#039;, args) or nil&lt;br /&gt;
&lt;br /&gt;
	local source = args[3] or&lt;br /&gt;
				   i18n:parameter(&#039;source&#039;, args) or&lt;br /&gt;
				   i18n:parameter(&#039;quote_source&#039;, args) or nil&lt;br /&gt;
&lt;br /&gt;
	local quote_contents = mw.html.create(&#039;div&#039;)&lt;br /&gt;
		:addClass(&#039;pull-quote__text&#039;)&lt;br /&gt;
		:wikitext(paragraph(quotetext))&lt;br /&gt;
&lt;br /&gt;
	local quote_source = person&lt;br /&gt;
&lt;br /&gt;
	if person and source then&lt;br /&gt;
		quote_source = person .. &#039;, &#039; .. source&lt;br /&gt;
	elseif source then&lt;br /&gt;
		quote_source = source&lt;br /&gt;
	end&lt;br /&gt;
&lt;br /&gt;
	return build(quote_contents, quote_source, options)&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
function Quote.dialogue(frame)&lt;br /&gt;
	local args = getArgs(frame)&lt;br /&gt;
&lt;br /&gt;
	local options = options(args)&lt;br /&gt;
&lt;br /&gt;
	local quote_contents = mw.html.create(&#039;div&#039;)&lt;br /&gt;
		:addClass(&#039;pull-quote__text&#039;)&lt;br /&gt;
&lt;br /&gt;
	local quote_source&lt;br /&gt;
&lt;br /&gt;
	for i, v in ipairs(args) do&lt;br /&gt;
		local next_param = i + 1&lt;br /&gt;
		&lt;br /&gt;
		if i % 2 ~= 0 then&lt;br /&gt;
			quote_contents:tag(&#039;div&#039;)&lt;br /&gt;
				:addClass(&#039;pull-quote__line&#039;)&lt;br /&gt;
				:tag(&#039;strong&#039;)&lt;br /&gt;
					:addClass(&#039;pull-quote__speaker&#039;)&lt;br /&gt;
					:wikitext(v .. &#039;:&#039;)&lt;br /&gt;
					:done()&lt;br /&gt;
				:wikitext(&#039; &#039; .. paragraph(args[next_param]))&lt;br /&gt;
				:done()&lt;br /&gt;
		end&lt;br /&gt;
	end&lt;br /&gt;
&lt;br /&gt;
	local context = i18n:parameter(&#039;context&#039;, args)&lt;br /&gt;
	local source = i18n:parameter(&#039;source&#039;, args)&lt;br /&gt;
	if context and source then&lt;br /&gt;
		quote_source = context .. &#039;, &#039; .. source&lt;br /&gt;
	elseif context and not source then&lt;br /&gt;
		quote_source = context&lt;br /&gt;
	elseif source and not context then&lt;br /&gt;
		quote_source = source&lt;br /&gt;
	end&lt;br /&gt;
&lt;br /&gt;
	return build(quote_contents, quote_source, options)&lt;br /&gt;
&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
return Quote&lt;br /&gt;
-- &amp;lt;/nowiki&amp;gt;&lt;/div&gt;</summary>
		<author><name>WikiAdmin</name></author>
	</entry>
	<entry>
		<id>https://unimage.wcnm.pw/index.php?title=%E6%A8%A1%E5%9D%97:Dev/Navbox/i18n&amp;diff=717</id>
		<title>模块:Dev/Navbox/i18n</title>
		<link rel="alternate" type="text/html" href="https://unimage.wcnm.pw/index.php?title=%E6%A8%A1%E5%9D%97:Dev/Navbox/i18n&amp;diff=717"/>
		<updated>2026-08-31T12:54:52Z</updated>

		<summary type="html">&lt;p&gt;WikiAdmin：​从 Fandom Developer Wiki 本地化全局模块，源修订 209224&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;-- 来源：https://dev.fandom.com/wiki/Module%3ANavbox/i18n&lt;br /&gt;
-- 许可：CC BY-SA，作者与修订记录见来源页面&lt;br /&gt;
-- &amp;lt;nowiki&amp;gt;&lt;br /&gt;
return {&lt;br /&gt;
    [&amp;quot;_metadata&amp;quot;] = {&lt;br /&gt;
        [&amp;quot;order&amp;quot;] = {&lt;br /&gt;
            &amp;quot;hide&amp;quot;,&lt;br /&gt;
            &amp;quot;show&amp;quot;&lt;br /&gt;
        }&lt;br /&gt;
    },&lt;br /&gt;
    [&amp;quot;en&amp;quot;] = {&lt;br /&gt;
        [&amp;quot;hide&amp;quot;] = &amp;quot;Hide&amp;quot;,&lt;br /&gt;
        [&amp;quot;show&amp;quot;] = &amp;quot;Show&amp;quot;&lt;br /&gt;
    },&lt;br /&gt;
    [&amp;quot;qqq&amp;quot;] = {&lt;br /&gt;
        [&amp;quot;hide&amp;quot;] = &amp;quot;\&amp;quot;Hide\&amp;quot; button (i.e. collapse the navbox).&amp;quot;,&lt;br /&gt;
        [&amp;quot;show&amp;quot;] = &amp;quot;\&amp;quot;Show\&amp;quot; button (i.e. expand the navbox).&amp;quot;&lt;br /&gt;
    },&lt;br /&gt;
    [&amp;quot;de&amp;quot;] = {&lt;br /&gt;
        [&amp;quot;hide&amp;quot;] = &amp;quot;Einklappen&amp;quot;,&lt;br /&gt;
        [&amp;quot;show&amp;quot;] = &amp;quot;Ausklappen&amp;quot;&lt;br /&gt;
    },&lt;br /&gt;
    [&amp;quot;es&amp;quot;] = {&lt;br /&gt;
        [&amp;quot;hide&amp;quot;] = &amp;quot;Ocultar&amp;quot;,&lt;br /&gt;
        [&amp;quot;show&amp;quot;] = &amp;quot;Mostrar&amp;quot;&lt;br /&gt;
    },&lt;br /&gt;
    [&amp;quot;fr&amp;quot;] = {&lt;br /&gt;
        [&amp;quot;hide&amp;quot;] = &amp;quot;Réduire&amp;quot;,&lt;br /&gt;
        [&amp;quot;show&amp;quot;] = &amp;quot;Développer&amp;quot;&lt;br /&gt;
    },&lt;br /&gt;
    [&amp;quot;hi&amp;quot;] = {&lt;br /&gt;
        [&amp;quot;hide&amp;quot;] = &amp;quot;छिपाएँ&amp;quot;,&lt;br /&gt;
        [&amp;quot;show&amp;quot;] = &amp;quot;दिखाएँ&amp;quot;&lt;br /&gt;
    },&lt;br /&gt;
    [&amp;quot;ja&amp;quot;] = {&lt;br /&gt;
        [&amp;quot;hide&amp;quot;] = &amp;quot;隠す&amp;quot;,&lt;br /&gt;
        [&amp;quot;show&amp;quot;] = &amp;quot;表示&amp;quot;&lt;br /&gt;
    },&lt;br /&gt;
    [&amp;quot;pt-br&amp;quot;] = {&lt;br /&gt;
        [&amp;quot;hide&amp;quot;] = &amp;quot;Ocultar&amp;quot;,&lt;br /&gt;
        [&amp;quot;show&amp;quot;] = &amp;quot;Mostrar&amp;quot;&lt;br /&gt;
    },&lt;br /&gt;
    [&amp;quot;ru&amp;quot;] = {&lt;br /&gt;
        [&amp;quot;hide&amp;quot;] = &amp;quot;Скрыть&amp;quot;,&lt;br /&gt;
        [&amp;quot;show&amp;quot;] = &amp;quot;Показать&amp;quot;&lt;br /&gt;
    },&lt;br /&gt;
    [&amp;quot;vi&amp;quot;] = {&lt;br /&gt;
        [&amp;quot;hide&amp;quot;] = &amp;quot;Ẩn&amp;quot;,&lt;br /&gt;
        [&amp;quot;show&amp;quot;] = &amp;quot;Hiện&amp;quot;&lt;br /&gt;
    },&lt;br /&gt;
    [&amp;quot;zh-hans&amp;quot;] = {&lt;br /&gt;
        [&amp;quot;hide&amp;quot;] = &amp;quot;隐藏&amp;quot;,&lt;br /&gt;
        [&amp;quot;show&amp;quot;] = &amp;quot;显示&amp;quot;&lt;br /&gt;
    },&lt;br /&gt;
    [&amp;quot;zh-hant&amp;quot;] = {&lt;br /&gt;
        [&amp;quot;hide&amp;quot;] = &amp;quot;隱藏&amp;quot;,&lt;br /&gt;
        [&amp;quot;show&amp;quot;] = &amp;quot;顯示&amp;quot;&lt;br /&gt;
    },&lt;br /&gt;
    [&amp;quot;zh-hk&amp;quot;] = {&lt;br /&gt;
        [&amp;quot;hide&amp;quot;] = &amp;quot;隱藏&amp;quot;,&lt;br /&gt;
        [&amp;quot;show&amp;quot;] = &amp;quot;顯示&amp;quot;&lt;br /&gt;
    }&lt;br /&gt;
}&lt;br /&gt;
-- &amp;lt;/nowiki&amp;gt;&lt;/div&gt;</summary>
		<author><name>WikiAdmin</name></author>
	</entry>
	<entry>
		<id>https://unimage.wcnm.pw/index.php?title=%E6%A8%A1%E5%9D%97:Dev/Navbox&amp;diff=716</id>
		<title>模块:Dev/Navbox</title>
		<link rel="alternate" type="text/html" href="https://unimage.wcnm.pw/index.php?title=%E6%A8%A1%E5%9D%97:Dev/Navbox&amp;diff=716"/>
		<updated>2026-08-31T12:54:51Z</updated>

		<summary type="html">&lt;p&gt;WikiAdmin：​从 Fandom Developer Wiki 本地化全局模块，源修订 210054&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;-- 来源：https://dev.fandom.com/wiki/Module%3ANavbox&lt;br /&gt;
-- 许可：CC BY-SA，作者与修订记录见来源页面&lt;br /&gt;
--------------------------------------------------------------------&lt;br /&gt;
--&amp;lt;pre&amp;gt; Navbox Module&lt;br /&gt;
--&lt;br /&gt;
-- * Fully CSS styled (inline styles possible but not default)&lt;br /&gt;
-- * Supports unlimited rows&lt;br /&gt;
-- * Automatic striping alternation, including for child navbox subsections&lt;br /&gt;
--&lt;br /&gt;
-- Original module by User:Tjcool007 from layton.fandom.com&lt;br /&gt;
--------------------------------------------------------------------&lt;br /&gt;
&lt;br /&gt;
local p = {}&lt;br /&gt;
&lt;br /&gt;
local i18n = require(&#039;Module:Dev/i18n&#039;).loadMessages(&#039;Navbox&#039;)&lt;br /&gt;
&lt;br /&gt;
local showText, hideText = i18n:useLanguageConversionType(&#039;userLanguage&#039;):msg(&#039;show&#039;), i18n:useLanguageConversionType(&#039;userLanguage&#039;):msg(&#039;hide&#039;)&lt;br /&gt;
&lt;br /&gt;
local showText_zh_hans, hideText_zh_hans = i18n:inLang(&#039;zh-hans&#039;):msg(&#039;show&#039;), i18n:inLang(&#039;zh-hans&#039;):msg(&#039;hide&#039;)&lt;br /&gt;
local showText_zh_hant, hideText_zh_hant = i18n:inLang(&#039;zh-hant&#039;):msg(&#039;show&#039;), i18n:inLang(&#039;zh-hant&#039;):msg(&#039;hide&#039;)&lt;br /&gt;
local showText_zh_hant_hk, hideText_zh_hant_hk = i18n:inLang(&#039;zh-hk&#039;):msg(&#039;show&#039;), i18n:inLang(&#039;zh-hk&#039;):msg(&#039;hide&#039;)&lt;br /&gt;
&lt;br /&gt;
local cfg = {&lt;br /&gt;
	marker = {&lt;br /&gt;
		oddeven = &#039;\127_ODDEVEN_\127&#039;,&lt;br /&gt;
		contains_subgroup = &#039;\127_ODDEVEN0_\127&#039;,&lt;br /&gt;
		restart_header = &#039;\127_ODDEVEN1_\127&#039;,&lt;br /&gt;
		regex_changer = &#039;\127_ODDEVEN([01]?)_\127&#039;,&lt;br /&gt;
		odd = &#039;\127_ODD_\127&#039;,&lt;br /&gt;
		even = &#039;\127_EVEN_\127&#039;,&lt;br /&gt;
		oddeven_sep = &#039;\127_ODDEVEN2_\127&#039;,&lt;br /&gt;
		oddeven_end = &#039;\127_ODDEVEN3_\127&#039;,&lt;br /&gt;
		regex_oddeven_sep = &#039;\127_ODDEVEN[23]_\127&#039;,&lt;br /&gt;
		regex_odd = &#039;(\127_ODD_\127[^\127]*)\127_ODDEVEN2_\127([^\127]*)\127_ODDEVEN2_\127[^\127]*\127_ODDEVEN3_\127&#039;,&lt;br /&gt;
		regex_even = &#039;(\127_EVEN_\127[^\127]*)\127_ODDEVEN2_\127[^\127]*\127_ODDEVEN2_\127([^\127]*)\127_ODDEVEN3_\127&#039;&lt;br /&gt;
	},&lt;br /&gt;
	pattern = {&lt;br /&gt;
		hlist = &#039;hlist&#039;,&lt;br /&gt;
		plainlist = &#039;plainlist&#039;,&lt;br /&gt;
	},&lt;br /&gt;
&lt;br /&gt;
	category = {&lt;br /&gt;
		error = &#039;[[Category:Navboxes with internal errors]]&#039;,&lt;br /&gt;
		orphan = &#039;[[Category:Navbox orphans]]&#039;&lt;br /&gt;
	}&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
------------------------------------------------&lt;br /&gt;
-- ARGUMENTS PREPROCESSOR&lt;br /&gt;
-- * Extracts arguments from frame and stores them in args table&lt;br /&gt;
-- * At the same time, checks for valid row numbers&lt;br /&gt;
------------------------------------------------&lt;br /&gt;
&lt;br /&gt;
--- Preprocessor for the arguments.&lt;br /&gt;
-- Will fill up the args table with the parameters from the frame grouped by their type.&lt;br /&gt;
--&lt;br /&gt;
-- @param frame The frame passed to the Module.&lt;br /&gt;
local function preProcessArgs(frame)&lt;br /&gt;
	local tmp, args, rownums, skiprows = {}, {}, {}, {}&lt;br /&gt;
&lt;br /&gt;
	if frame == mw.getCurrentFrame() then&lt;br /&gt;
		tmp = frame:getParent().args&lt;br /&gt;
	else&lt;br /&gt;
		tmp = frame&lt;br /&gt;
	end&lt;br /&gt;
&lt;br /&gt;
	-- Storage tables&lt;br /&gt;
	local nums, subnums = {}, {}&lt;br /&gt;
&lt;br /&gt;
	-- Loop over all the args&lt;br /&gt;
	for k, v in pairs(tmp) do&lt;br /&gt;
		-- Skip empty args, which are useless&lt;br /&gt;
		if v ~= &#039;&#039; then&lt;br /&gt;
			local str = tostring(k)&lt;br /&gt;
			local cat, num, subnum = str:match(&#039;^(%a+)([1-9]%d*)%.([1-9][%d%.]*)$&#039;)&lt;br /&gt;
			if subnum then&lt;br /&gt;
				nums[num] = true&lt;br /&gt;
				if type(subnums[num]) ~= &amp;quot;table&amp;quot; then&lt;br /&gt;
					subnums[num] = {}&lt;br /&gt;
				end&lt;br /&gt;
				subnums[num][cat..subnum] = v&lt;br /&gt;
			else&lt;br /&gt;
				cat, num = str:match(&#039;^(%a+)([1-9]%d*)$&#039;)&lt;br /&gt;
				if cat == &#039;header&#039; or cat == &#039;list&#039; then&lt;br /&gt;
					nums[num] = true&lt;br /&gt;
				end&lt;br /&gt;
				args[k] = v -- Simple copy&lt;br /&gt;
			end&lt;br /&gt;
		end&lt;br /&gt;
	end&lt;br /&gt;
&lt;br /&gt;
	-- Generate child navboxes&lt;br /&gt;
	for k, v in pairs(subnums) do&lt;br /&gt;
		for _, arg in ipairs({&#039;showall&#039;, &#039;alternaterows&#039;, &#039;titlestyle&#039;, &#039;titleclass&#039;, &#039;abovestyle&#039;, &#039;aboveclass&#039;, &#039;rowclass&#039;, &#039;altrowclass&#039;, &#039;groupstyle&#039;, &#039;groupclass&#039;, &#039;altgroupstyle&#039;, &#039;altgroupclass&#039;, &#039;liststyle&#039;, &#039;listclass&#039;, &#039;altliststyle&#039;, &#039;altlistclass&#039;, &#039;belowstyle&#039;, &#039;belowclass&#039;, &#039;defaultstate&#039;, &#039;defaultcollapsetext&#039;, &#039;defaultexpandtext&#039;}) do&lt;br /&gt;
			v[arg] = args[arg]&lt;br /&gt;
		end&lt;br /&gt;
		v.border = &#039;child&#039;&lt;br /&gt;
		args[&#039;list&#039;..k] = p.main(v)&lt;br /&gt;
	end&lt;br /&gt;
&lt;br /&gt;
	for k, v in pairs(nums) do&lt;br /&gt;
		rownums[#rownums+1] = tonumber(k)&lt;br /&gt;
	end&lt;br /&gt;
&lt;br /&gt;
	table.sort(rownums)&lt;br /&gt;
&lt;br /&gt;
	-- Calculate skip rows&lt;br /&gt;
	local cSection, cSkip&lt;br /&gt;
	local showall = args.showall&lt;br /&gt;
	for i=1,#rownums do&lt;br /&gt;
		local num = rownums[i]&lt;br /&gt;
		if args[&#039;header&#039;..num] then&lt;br /&gt;
			cSection = true&lt;br /&gt;
			cSkip = false&lt;br /&gt;
			local showme = args[&#039;show&#039;..num]&lt;br /&gt;
			if showme == &#039;no&#039; then&lt;br /&gt;
				cSkip = true&lt;br /&gt;
			elseif showme == &#039;auto&#039; or (showme ~= &#039;yes&#039; and showall ~= &#039;yes&#039;) then&lt;br /&gt;
				if not args[&#039;list&#039;..num] then&lt;br /&gt;
					local nextNum = rownums[i+1]&lt;br /&gt;
					cSkip = not nextNum or args[&#039;header&#039;..nextNum] -- If next has a header -&amp;gt; skip&lt;br /&gt;
				end&lt;br /&gt;
			end&lt;br /&gt;
		end&lt;br /&gt;
		if cSection and cSkip then&lt;br /&gt;
			skiprows[num] = true&lt;br /&gt;
		end&lt;br /&gt;
	end&lt;br /&gt;
&lt;br /&gt;
	-- Insert markers into class and style parameters where needed&lt;br /&gt;
	for i, v in ipairs({&#039;groupclass&#039;, &#039;groupstyle&#039;, &#039;listclass&#039;, &#039;liststyle&#039;}) do&lt;br /&gt;
		if args[&#039;alt&#039; .. v] then&lt;br /&gt;
			args[v] = cfg.marker.oddeven_sep .. (args[v] or &#039;&#039;) .. cfg.marker.oddeven_sep .. args[&#039;alt&#039; .. v] .. cfg.marker.oddeven_end&lt;br /&gt;
		end&lt;br /&gt;
	end&lt;br /&gt;
&lt;br /&gt;
	return args, rownums, skiprows&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
------------------------------------------------&lt;br /&gt;
-- MAIN FUNCTIONS&lt;br /&gt;
------------------------------------------------&lt;br /&gt;
&lt;br /&gt;
--- Processes the arguments to create the navbox.&lt;br /&gt;
--&lt;br /&gt;
-- @return A string with HTML that is the navbox.&lt;br /&gt;
local function _navbox(args, rownums, skiprows)&lt;br /&gt;
	local navbox -- Actual navbox&lt;br /&gt;
	local navbox_zh_hans, navbox_zh_hant, navbox_zh_hant_hk&lt;br /&gt;
&lt;br /&gt;
	local hasrows, hasData, hasTitle, hasChild = false, false, false, false&lt;br /&gt;
	local activeSection, sections, cimage, cimageleft&lt;br /&gt;
	&lt;br /&gt;
	local border = args.border or mw.text.trim(args[1] or &#039;&#039;) or &#039;&#039;&lt;br /&gt;
	if border == &#039;child&#039; then border = &#039;subgroup&#039; end&lt;br /&gt;
	local isChild = (border == &#039;subgroup&#039;)&lt;br /&gt;
&lt;br /&gt;
	local colspan = args.image and 3 or 2&lt;br /&gt;
	if args.imageleft then colspan = colspan + 1 end&lt;br /&gt;
	local rowspan = 0&lt;br /&gt;
	&lt;br /&gt;
	-- Language converter support&lt;br /&gt;
	local useZhConverter = false&lt;br /&gt;
    if mw.language.getContentLanguage():toBcp47Code() == &#039;zh&#039; then&lt;br /&gt;
    	useZhConverter = true&lt;br /&gt;
    end&lt;br /&gt;
&lt;br /&gt;
	--- Wraps text in newlines if it begins with a list or table&lt;br /&gt;
	local function processItem(item)&lt;br /&gt;
		if item:sub(1, 2) == &#039;{|&#039; then&lt;br /&gt;
			return &#039;\n&#039; .. item ..&#039;\n&#039;&lt;br /&gt;
		end&lt;br /&gt;
		if item:match(&#039;^[*:;#]&#039;) then&lt;br /&gt;
			return &#039;\n&#039; .. item ..&#039;\n&#039;&lt;br /&gt;
		end&lt;br /&gt;
		return item&lt;br /&gt;
	end&lt;br /&gt;
&lt;br /&gt;
	--- Returns navbox contents with markers replaced for odd/even striping&lt;br /&gt;
	local function striped(wikitext, border)&lt;br /&gt;
		-- Child (subgroup) navboxes are flagged with a category that is removed&lt;br /&gt;
		-- by parent navboxes. The result is that the category shows all pages&lt;br /&gt;
		-- where a child navbox is not contained in a parent navbox.&lt;br /&gt;
		local orphanCat = cfg.category.orphan&lt;br /&gt;
		if border == &#039;subgroup&#039; and args.orphan ~= &#039;yes&#039; then&lt;br /&gt;
			-- No change; striping occurs in outermost navbox.&lt;br /&gt;
			return wikitext .. orphanCat&lt;br /&gt;
		end&lt;br /&gt;
		local altrowclass = args.altrowclass or &#039;alt&#039;&lt;br /&gt;
		altrowclass = &#039; &#039; .. altrowclass&lt;br /&gt;
		local first, second = &#039;&#039;, altrowclass&lt;br /&gt;
		if args.alternaterows then&lt;br /&gt;
			if args.alternaterows == &#039;swap&#039; then&lt;br /&gt;
				first, second = second, first&lt;br /&gt;
			elseif args.alternaterows == &#039;no&#039; or args.alternaterows == &#039;odd&#039; then&lt;br /&gt;
				second = &#039;&#039;&lt;br /&gt;
			elseif args.alternaterows == &#039;even&#039; then&lt;br /&gt;
				first = altrowclass&lt;br /&gt;
			else&lt;br /&gt;
				first = args.alternaterows&lt;br /&gt;
				second = first&lt;br /&gt;
			end&lt;br /&gt;
		end&lt;br /&gt;
		local changer&lt;br /&gt;
		if first == second then&lt;br /&gt;
			changer = cfg.marker.odd&lt;br /&gt;
		else&lt;br /&gt;
			local index = 0&lt;br /&gt;
			changer = function (code)&lt;br /&gt;
				if code == &#039;0&#039; then&lt;br /&gt;
					-- Subgroup encountered.&lt;br /&gt;
					-- Return a marker without incrementing the index.&lt;br /&gt;
					return index % 2 == 0 and cfg.marker.odd or cfg.marker.even&lt;br /&gt;
				elseif code == &#039;1&#039; then&lt;br /&gt;
					-- Title or header encountered.&lt;br /&gt;
					-- Restart the index and remove the marker.&lt;br /&gt;
					-- The next occurrence will use the initial class.&lt;br /&gt;
					index = 0&lt;br /&gt;
					return &#039;&#039;&lt;br /&gt;
				end&lt;br /&gt;
				index = index + 1&lt;br /&gt;
				return index % 2 == 1 and cfg.marker.odd or cfg.marker.even&lt;br /&gt;
			end&lt;br /&gt;
		end&lt;br /&gt;
		local regex = orphanCat:gsub(&#039;([%[%]])&#039;, &#039;%%%1&#039;)&lt;br /&gt;
		wikitext = wikitext:gsub(regex, &#039;&#039;):gsub(cfg.marker.regex_changer, changer)&lt;br /&gt;
		local prevWikitext, hasNoMoreOddevenMarkers&lt;br /&gt;
		repeat&lt;br /&gt;
			prevWikitext = wikitext&lt;br /&gt;
			wikitext = wikitext:gsub(cfg.marker.regex_odd, &#039;%1%2&#039;):gsub(cfg.marker.regex_even, &#039;%1%2&#039;)&lt;br /&gt;
			hasNoMoreOddevenMarkers = wikitext:match(cfg.marker.regex_oddeven_sep) == nil&lt;br /&gt;
		until hasNoMoreOddevenMarkers or wikitext == prevWikitext&lt;br /&gt;
		wikitext = wikitext:gsub(cfg.marker.odd, first):gsub(cfg.marker.even, second)&lt;br /&gt;
		if not hasNoMoreOddevenMarkers then&lt;br /&gt;
			-- Something went wrong. Flag for investigation.&lt;br /&gt;
			-- See &amp;lt;https://discord.com/channels/246075715714416641/1266361437484486778&amp;gt; for details.&lt;br /&gt;
			wikitext = wikitext .. cfg.category.error&lt;br /&gt;
		end&lt;br /&gt;
		return wikitext&lt;br /&gt;
	end&lt;br /&gt;
&lt;br /&gt;
	------------------------------------------------&lt;br /&gt;
	-- Title&lt;br /&gt;
	------------------------------------------------&lt;br /&gt;
&lt;br /&gt;
	--- Processes the VDE links in the title&lt;br /&gt;
	--&lt;br /&gt;
	-- @param titlecell The table cell of the title&lt;br /&gt;
	local function processVde( titlecell )&lt;br /&gt;
		if not args.template then return end&lt;br /&gt;
&lt;br /&gt;
		titlecell:wikitext(&#039;&amp;lt;span class=&amp;quot;navbox-vde&amp;quot;&amp;gt;&#039;&lt;br /&gt;
			.. mw.getCurrentFrame():expandTemplate({&lt;br /&gt;
				title = &#039;vdelinks&#039;,&lt;br /&gt;
				args = { args.template, [&#039;type&#039;] = &#039;navbox&#039; }&lt;br /&gt;
			}) .. &#039;&amp;lt;/span&amp;gt;&#039;)&lt;br /&gt;
	end&lt;br /&gt;
&lt;br /&gt;
	--- Processes the main title row&lt;br /&gt;
	local function processTitle()&lt;br /&gt;
		if not hasTitle then return end&lt;br /&gt;
&lt;br /&gt;
		local titlerow = mw.html.create(&#039;tr&#039;):addClass(&#039;navbox-title&#039;..cfg.marker.restart_header)&lt;br /&gt;
		local titlecell = mw.html.create(&#039;th&#039;):attr(&#039;colspan&#039;,colspan):attr(&#039;scope&#039;,&#039;col&#039;)&lt;br /&gt;
		local titlediv = mw.html.create(&#039;div&#039;)&lt;br /&gt;
&lt;br /&gt;
		if not pcall( processVde, titlecell ) then&lt;br /&gt;
			titlediv:wikitext( &#039;&amp;lt;b class=&amp;quot;navbox-vde error&amp;quot; title=&amp;quot;Missing Template:Vdelinks&amp;quot;&amp;gt;!!!&amp;lt;/b&amp;gt;&#039; )&lt;br /&gt;
		end&lt;br /&gt;
&lt;br /&gt;
		titlediv:wikitext( args.title or &#039;{{{title}}}&#039; )&lt;br /&gt;
&lt;br /&gt;
		-- Padding&lt;br /&gt;
		local hasTemplate = args.template ~= nil&lt;br /&gt;
		local hasState = not args.state or args.state ~= &#039;plain&#039;&lt;br /&gt;
&lt;br /&gt;
		if hasTemplate or hasState then&lt;br /&gt;
			-- remove redundant classes in future if it won&#039;t break the display of wikis&#039; navboxes&lt;br /&gt;
			titlediv:addClass(&#039;navbox-title-pad navbox-title-padleft navbox-title-padright&#039;)&lt;br /&gt;
		end&lt;br /&gt;
&lt;br /&gt;
		if args.titleclass then titlerow:addClass( args.titleclass ) end&lt;br /&gt;
		if args.titlestyle then titlecell:cssText( args.titlestyle ) end&lt;br /&gt;
&lt;br /&gt;
		titlecell:node(titlediv)&lt;br /&gt;
		titlerow:node(titlecell)&lt;br /&gt;
&lt;br /&gt;
		if useZhConverter then&lt;br /&gt;
			navbox_zh_hans:node(titlerow)&lt;br /&gt;
			navbox_zh_hant:node(titlerow)&lt;br /&gt;
			navbox_zh_hant_hk:node(titlerow)&lt;br /&gt;
		else&lt;br /&gt;
			navbox:node(titlerow)&lt;br /&gt;
		end&lt;br /&gt;
	end&lt;br /&gt;
&lt;br /&gt;
	local function _addGutter( parent, incRowspan )&lt;br /&gt;
		parent:tag(&#039;tr&#039;):addClass(&#039;navbox-gutter&#039;):tag(&#039;td&#039;):attr(&#039;colspan&#039;,2)&lt;br /&gt;
&lt;br /&gt;
		if incRowspan then&lt;br /&gt;
			rowspan = rowspan + 1&lt;br /&gt;
		end&lt;br /&gt;
	end&lt;br /&gt;
&lt;br /&gt;
	------------------------------------------------&lt;br /&gt;
	-- Above/Below&lt;br /&gt;
	------------------------------------------------&lt;br /&gt;
&lt;br /&gt;
	--- Processes the above and below rows&lt;br /&gt;
	--&lt;br /&gt;
	-- @param rowtype Either &#039;above&#039; or &#039;below&#039;&lt;br /&gt;
	local function processAboveBelow( rowtype )&lt;br /&gt;
		if not args[rowtype] then return end&lt;br /&gt;
&lt;br /&gt;
		local abrow = mw.html.create(&#039;tr&#039;):addClass(&#039;navbox-&#039;..rowtype)&lt;br /&gt;
		local abcell = mw.html.create(&#039;td&#039;):attr(&#039;colspan&#039;,colspan):wikitext( processItem(args[rowtype]) )&lt;br /&gt;
&lt;br /&gt;
		if args[rowtype .. &#039;class&#039;] then abrow:addClass( args[rowtype .. &#039;class&#039;] ) end&lt;br /&gt;
		if args[rowtype .. &#039;style&#039;] then abcell:cssText( args[rowtype .. &#039;style&#039;] ) end&lt;br /&gt;
&lt;br /&gt;
		abrow:node( abcell )&lt;br /&gt;
		if hasTitle or rowtype == &#039;below&#039; then&lt;br /&gt;
			if useZhConverter then&lt;br /&gt;
				_addGutter( navbox_zh_hans )&lt;br /&gt;
				_addGutter( navbox_zh_hant )&lt;br /&gt;
				_addGutter( navbox_zh_hant_hk )&lt;br /&gt;
			else&lt;br /&gt;
				_addGutter( navbox )&lt;br /&gt;
			end&lt;br /&gt;
		end&lt;br /&gt;
&lt;br /&gt;
		if useZhConverter then&lt;br /&gt;
			navbox_zh_hans:node( abrow )&lt;br /&gt;
			navbox_zh_hant:node( abrow )&lt;br /&gt;
			navbox_zh_hant_hk:node( abrow )&lt;br /&gt;
		else&lt;br /&gt;
			navbox:node( abrow )&lt;br /&gt;
		end&lt;br /&gt;
	end&lt;br /&gt;
&lt;br /&gt;
	------------------------------------------------&lt;br /&gt;
	-- Main Rows&lt;br /&gt;
	------------------------------------------------&lt;br /&gt;
&lt;br /&gt;
	--- Processes the images&lt;br /&gt;
	local function _processImage(row, imgtype)&lt;br /&gt;
		if not args[imgtype] then return end&lt;br /&gt;
&lt;br /&gt;
		local iclass = imgtype == &#039;image&#039; and &#039;navbox-image-right&#039; or &#039;navbox-image-left&#039;&lt;br /&gt;
&lt;br /&gt;
		local imagecell = mw.html.create(&#039;td&#039;):addClass(&#039;navbox-image&#039;):addClass(iclass)&lt;br /&gt;
&lt;br /&gt;
		local image = args[imgtype]&lt;br /&gt;
		if image:sub(1,1) ~= &#039;[&#039; then&lt;br /&gt;
			local width = args[imgtype .. &#039;width&#039;] or &#039;100px&#039;&lt;br /&gt;
			imagecell:css(&#039;width&#039;,width):wikitext(&#039;[&#039;..&#039;[&#039; .. image  .. &#039;|&#039; .. width .. &#039;|link=&#039; .. (args[imgtype .. &#039;link&#039;] or &#039;&#039;) .. &#039;]]&#039;)&lt;br /&gt;
		else&lt;br /&gt;
			imagecell:css(&#039;width&#039;,&#039;0%&#039;):wikitext(image)&lt;br /&gt;
		end&lt;br /&gt;
&lt;br /&gt;
		if args[imgtype .. &#039;class&#039;] then imagecell:addClass( args[imgtype .. &#039;class&#039;] ) end&lt;br /&gt;
		if args[imgtype .. &#039;style&#039;] then imagecell:cssText( args[imgtype .. &#039;style&#039;] ) end&lt;br /&gt;
&lt;br /&gt;
		row:node( imagecell )&lt;br /&gt;
		if imgtype == &#039;image&#039; then&lt;br /&gt;
			cimage = imagecell&lt;br /&gt;
		else&lt;br /&gt;
			cimageleft = imagecell&lt;br /&gt;
		end&lt;br /&gt;
	end&lt;br /&gt;
&lt;br /&gt;
	--- Closes the currently active section (if any)&lt;br /&gt;
	local function _closeCurrentSection()&lt;br /&gt;
		if not activeSection then return end&lt;br /&gt;
&lt;br /&gt;
		local row = mw.html.create(&#039;tr&#039;):addClass(&#039;navbox-section-row&#039;)&lt;br /&gt;
		local cell = mw.html.create(&#039;td&#039;):attr(&#039;colspan&#039;, 2)&lt;br /&gt;
&lt;br /&gt;
		if not hasrows then&lt;br /&gt;
			_processImage(row, &#039;imageleft&#039;)&lt;br /&gt;
		end&lt;br /&gt;
&lt;br /&gt;
		cell:node(sections[activeSection])&lt;br /&gt;
		row:node(cell)&lt;br /&gt;
&lt;br /&gt;
		local firstRow = false&lt;br /&gt;
		if not hasrows then&lt;br /&gt;
			firstRow = true&lt;br /&gt;
			hasrows = true&lt;br /&gt;
			_processImage(row, &#039;image&#039;)&lt;br /&gt;
		end&lt;br /&gt;
&lt;br /&gt;
		if not isChild or not firstRow or hasTitle or args.above then&lt;br /&gt;
			if useZhConverter then&lt;br /&gt;
				_addGutter(navbox_zh_hans, not firstRow)&lt;br /&gt;
				_addGutter(navbox_zh_hant, not firstRow)&lt;br /&gt;
				_addGutter(navbox_zh_hant_hk, not firstRow)&lt;br /&gt;
			else&lt;br /&gt;
				_addGutter(navbox, not firstRow)&lt;br /&gt;
			end&lt;br /&gt;
		end&lt;br /&gt;
&lt;br /&gt;
		if useZhConverter then&lt;br /&gt;
			navbox_zh_hans:node(row)&lt;br /&gt;
			navbox_zh_hant:node(row)&lt;br /&gt;
			navbox_zh_hant_hk:node(row)&lt;br /&gt;
		else&lt;br /&gt;
			navbox:node(row)&lt;br /&gt;
		end&lt;br /&gt;
&lt;br /&gt;
		rowspan = rowspan + 1&lt;br /&gt;
&lt;br /&gt;
		activeSection = false&lt;br /&gt;
		hasData = false&lt;br /&gt;
	end&lt;br /&gt;
&lt;br /&gt;
	--- Process a single Header &amp;quot;row&amp;quot;&lt;br /&gt;
	--&lt;br /&gt;
	-- @param num Number of the row to be processed&lt;br /&gt;
	local function processHeader(num)&lt;br /&gt;
		if not args[&#039;header&#039;..num] then return end&lt;br /&gt;
&lt;br /&gt;
		_closeCurrentSection()&lt;br /&gt;
&lt;br /&gt;
		local subtable = mw.html.create(&#039;table&#039;):addClass(&#039;navbox-section&#039;)&lt;br /&gt;
		local headerrow = mw.html.create(&#039;tr&#039;)&lt;br /&gt;
		local header = mw.html.create(&#039;th&#039;):addClass(&#039;navbox-header&#039;..cfg.marker.restart_header):attr(&#039;colspan&#039;,2):attr(&#039;scope&#039;,&#039;col&#039;)&lt;br /&gt;
		local headerdiv = mw.html.create(&#039;div&#039;):wikitext( args[&#039;header&#039;..num] )&lt;br /&gt;
&lt;br /&gt;
		local collapseme = args[&#039;state&#039;..num] or false&lt;br /&gt;
		local state = false&lt;br /&gt;
&lt;br /&gt;
		if collapseme then&lt;br /&gt;
			-- Look at this one&lt;br /&gt;
			if collapseme ~= &#039;plain&#039; then&lt;br /&gt;
				state = collapseme == &#039;expanded&#039; and &#039;expanded&#039; or &#039;collapsed&#039;&lt;br /&gt;
			end&lt;br /&gt;
		else&lt;br /&gt;
			-- Look at default&lt;br /&gt;
			local collapseall = args.defaultstate or false&lt;br /&gt;
			if collapseall then&lt;br /&gt;
				state = collapseall == &#039;expanded&#039; and &#039;expanded&#039; or &#039;collapsed&#039;&lt;br /&gt;
			end&lt;br /&gt;
		end&lt;br /&gt;
&lt;br /&gt;
		if state then&lt;br /&gt;
			subtable:addClass(&#039;mw-collapsible&#039;):attr(&#039;data-expandtext&#039;,args[&#039;expandtext&#039;..num] or args[&#039;defaultexpandtext&#039;] or showText):attr(&#039;data-collapsetext&#039;,args[&#039;collapsetext&#039;..num] or args[&#039;defaultcollapsetext&#039;] or hideText)&lt;br /&gt;
			if state == &#039;collapsed&#039; then&lt;br /&gt;
				subtable:addClass(&#039;mw-collapsed&#039;)&lt;br /&gt;
			end&lt;br /&gt;
			-- remove redundant classes in future if it won&#039;t break the display of wikis&#039; navboxes&lt;br /&gt;
			headerdiv:addClass(&#039;navbox-header-pad navbox-title-padleft navbox-title-padright&#039;)&lt;br /&gt;
		end&lt;br /&gt;
&lt;br /&gt;
		if args.headerclass then headerrow:addClass( args.headerclass ) end&lt;br /&gt;
		if args.headerstyle then header:cssText( args.headerstyle ) end&lt;br /&gt;
&lt;br /&gt;
		header:node(headerdiv)&lt;br /&gt;
		headerrow:node(header)&lt;br /&gt;
		subtable:node(headerrow)&lt;br /&gt;
&lt;br /&gt;
		sections[num] = subtable&lt;br /&gt;
		activeSection = num&lt;br /&gt;
	end&lt;br /&gt;
&lt;br /&gt;
	-- Check if a string contains a particular CSS class&lt;br /&gt;
	local function hasListClass(htmlclass, arg)&lt;br /&gt;
		local patterns = {&lt;br /&gt;
			&#039;^&#039; .. htmlclass .. &#039;$&#039;,&lt;br /&gt;
			&#039;%s&#039; .. htmlclass .. &#039;$&#039;,&lt;br /&gt;
			&#039;^&#039; .. htmlclass .. &#039;%s&#039;,&lt;br /&gt;
			&#039;%s&#039; .. htmlclass .. &#039;%s&#039;&lt;br /&gt;
		}&lt;br /&gt;
&lt;br /&gt;
		for _, pattern in ipairs(patterns) do&lt;br /&gt;
			if mw.ustring.find(args[arg] or &#039;&#039;, pattern) then&lt;br /&gt;
				return true&lt;br /&gt;
			end&lt;br /&gt;
		end&lt;br /&gt;
		return false&lt;br /&gt;
	end&lt;br /&gt;
&lt;br /&gt;
	--- Processes a single list row&lt;br /&gt;
	--&lt;br /&gt;
	-- @param num Number of the row to be processed&lt;br /&gt;
	local function processList(num)&lt;br /&gt;
		if not args[&#039;list&#039;..num] then return end&lt;br /&gt;
&lt;br /&gt;
		local oddEven = cfg.marker.oddeven&lt;br /&gt;
&lt;br /&gt;
		local data = args[&#039;list&#039;..num]&lt;br /&gt;
&lt;br /&gt;
		hasChild = false&lt;br /&gt;
&lt;br /&gt;
		if data:sub(1, 12) == &#039;&amp;lt;/div&amp;gt;&amp;lt;table&#039; then&lt;br /&gt;
			hasChild = true&lt;br /&gt;
			oddEven = cfg.marker.contains_subgroup&lt;br /&gt;
		end&lt;br /&gt;
&lt;br /&gt;
		local row = mw.html.create(&#039;tr&#039;):addClass(&#039;navbox-row&#039;..oddEven)&lt;br /&gt;
&lt;br /&gt;
		if not hasrows and not activeSection then&lt;br /&gt;
			_processImage(row, &#039;imageleft&#039;)&lt;br /&gt;
		end&lt;br /&gt;
&lt;br /&gt;
		local listcell = mw.html.create(&#039;td&#039;):addClass(&#039;navbox-list&#039;)&lt;br /&gt;
		local hlistcell = listcell:tag(&#039;div&#039;)&lt;br /&gt;
		&lt;br /&gt;
		-- Only add hlist class if listclass parameter does not contain hlist or plainlist&lt;br /&gt;
		if not (args.listclass and (hasListClass(cfg.pattern.hlist, &#039;listclass&#039;) or hasListClass(cfg.pattern.plainlist, &#039;listclass&#039;))) then&lt;br /&gt;
			hlistcell:addClass(&#039;hlist&#039;)&lt;br /&gt;
		end&lt;br /&gt;
		&lt;br /&gt;
		hlistcell:wikitext( processItem(data) )&lt;br /&gt;
&lt;br /&gt;
		if args.rowclass then row:addClass( args.rowclass ) end&lt;br /&gt;
		if args.listclass then listcell:addClass( args.listclass ) end&lt;br /&gt;
		if args.liststyle then listcell:cssText( args.liststyle ) end&lt;br /&gt;
&lt;br /&gt;
		if hasChild then&lt;br /&gt;
			listcell:cssText(&#039;background: none&#039;)&lt;br /&gt;
		end&lt;br /&gt;
&lt;br /&gt;
		if args[&#039;group&#039;..num] then&lt;br /&gt;
			local groupcell = mw.html.create(&#039;th&#039;):addClass(&#039;navbox-group&#039;):attr(&#039;scope&#039;,&#039;row&#039;):wikitext( args[&#039;group&#039;..num] )&lt;br /&gt;
&lt;br /&gt;
			if args.groupclass then groupcell:addClass( args.groupclass ) end&lt;br /&gt;
			if args.groupstyle then groupcell:cssText( args.groupstyle ) end&lt;br /&gt;
&lt;br /&gt;
			row:node( groupcell )&lt;br /&gt;
		else&lt;br /&gt;
			listcell:attr(&#039;colspan&#039;,2)&lt;br /&gt;
			if not hasChild then&lt;br /&gt;
				listcell:addClass(&#039;no-group&#039;)&lt;br /&gt;
			end&lt;br /&gt;
		end&lt;br /&gt;
&lt;br /&gt;
		row:node( listcell )&lt;br /&gt;
&lt;br /&gt;
		local firstRow = false&lt;br /&gt;
		if not hasrows and not activeSection then&lt;br /&gt;
			firstRow = true&lt;br /&gt;
			hasrows = true&lt;br /&gt;
			_processImage(row, &#039;image&#039;)&lt;br /&gt;
		end&lt;br /&gt;
&lt;br /&gt;
		if activeSection then&lt;br /&gt;
			local parent = sections[activeSection]&lt;br /&gt;
			if not isChild or not firstRow then&lt;br /&gt;
				_addGutter(parent)&lt;br /&gt;
			end&lt;br /&gt;
			parent:node(row)&lt;br /&gt;
			hasData = true&lt;br /&gt;
		else&lt;br /&gt;
			if not isChild or not firstRow or hasTitle or args.above then&lt;br /&gt;
				if useZhConverter then&lt;br /&gt;
					_addGutter(navbox_zh_hans, not firstRow)&lt;br /&gt;
					_addGutter(navbox_zh_hant, not firstRow)&lt;br /&gt;
					_addGutter(navbox_zh_hant_hk, not firstRow)&lt;br /&gt;
				else&lt;br /&gt;
					_addGutter(navbox, not firstRow)&lt;br /&gt;
				end&lt;br /&gt;
			end&lt;br /&gt;
			&lt;br /&gt;
			if useZhConverter then&lt;br /&gt;
				navbox_zh_hans:node( row )&lt;br /&gt;
				navbox_zh_hant:node( row )&lt;br /&gt;
				navbox_zh_hant_hk:node( row )&lt;br /&gt;
			else&lt;br /&gt;
				navbox:node( row )&lt;br /&gt;
			end&lt;br /&gt;
&lt;br /&gt;
			rowspan = rowspan + 1&lt;br /&gt;
		end&lt;br /&gt;
	end&lt;br /&gt;
&lt;br /&gt;
	--- Processes all rows&lt;br /&gt;
	local function processRows()&lt;br /&gt;
		sections = {}&lt;br /&gt;
		for i=1,#rownums do&lt;br /&gt;
			local num = rownums[i]&lt;br /&gt;
			if not skiprows[num] then&lt;br /&gt;
				processHeader(num)&lt;br /&gt;
				processList(num)&lt;br /&gt;
			end&lt;br /&gt;
		end&lt;br /&gt;
		_closeCurrentSection()&lt;br /&gt;
&lt;br /&gt;
		if cimageleft then&lt;br /&gt;
			cimageleft:attr(&#039;rowspan&#039;,rowspan)&lt;br /&gt;
		end&lt;br /&gt;
		if cimage then&lt;br /&gt;
			cimage:attr(&#039;rowspan&#039;,rowspan)&lt;br /&gt;
		end&lt;br /&gt;
	end&lt;br /&gt;
&lt;br /&gt;
	-- Create the root HTML element&lt;br /&gt;
&lt;br /&gt;
	if isChild then&lt;br /&gt;
		if useZhConverter then&lt;br /&gt;
			navbox_zh_hans = mw.html.create(&#039;table&#039;):addClass(&#039;navbox-subgroup&#039;)&lt;br /&gt;
			navbox_zh_hant = mw.html.create(&#039;table&#039;):addClass(&#039;navbox-subgroup&#039;)&lt;br /&gt;
			navbox_zh_hant_hk = mw.html.create(&#039;table&#039;):addClass(&#039;navbox-subgroup&#039;)&lt;br /&gt;
		else&lt;br /&gt;
			navbox = mw.html.create(&#039;table&#039;):addClass(&#039;navbox-subgroup&#039;)&lt;br /&gt;
		end&lt;br /&gt;
	else&lt;br /&gt;
		if useZhConverter then&lt;br /&gt;
			navbox_zh_hans = mw.html.create(&#039;table&#039;):addClass(&#039;navbox&#039;)&lt;br /&gt;
			navbox_zh_hant = mw.html.create(&#039;table&#039;):addClass(&#039;navbox&#039;)&lt;br /&gt;
			navbox_zh_hant_hk = mw.html.create(&#039;table&#039;):addClass(&#039;navbox&#039;)&lt;br /&gt;
		else&lt;br /&gt;
			navbox = mw.html.create(&#039;table&#039;):addClass(&#039;navbox&#039;)&lt;br /&gt;
		end&lt;br /&gt;
	end&lt;br /&gt;
&lt;br /&gt;
	if not isChild or args.title then&lt;br /&gt;
		hasTitle = true&lt;br /&gt;
	end&lt;br /&gt;
&lt;br /&gt;
	if hasTitle and isChild then&lt;br /&gt;
		if useZhConverter then&lt;br /&gt;
			navbox_zh_hans:addClass(&#039;navbox-subgroup-with-title&#039;)&lt;br /&gt;
			navbox_zh_hant:addClass(&#039;navbox-subgroup-with-title&#039;)&lt;br /&gt;
			navbox_zh_hant_hk:addClass(&#039;navbox-subgroup-with-title&#039;)&lt;br /&gt;
		else&lt;br /&gt;
			navbox:addClass(&#039;navbox-subgroup-with-title&#039;)&lt;br /&gt;
		end&lt;br /&gt;
	end&lt;br /&gt;
&lt;br /&gt;
	if hasTitle and args.state ~= &#039;plain&#039; then&lt;br /&gt;
		if useZhConverter then&lt;br /&gt;
			navbox_zh_hans:addClass(&#039;mw-collapsible&#039;):attr(&#039;data-expandtext&#039;, args[&#039;expandtext_zh-hans&#039;] or args[&#039;expandtext&#039;] or args[&#039;defaultexpandtext_zh-hans&#039;] or args[&#039;defaultexpandtext&#039;] or showText_zh_hans or showText):attr(&#039;data-collapsetext&#039;, args[&#039;collapsetext_zh-hans&#039;] or args[&#039;collapsetext&#039;] or args[&#039;defaultcollapsetext_zh-hans&#039;] or args[&#039;defaultcollapsetext&#039;] or hideText_zh_hans or hideText)&lt;br /&gt;
			navbox_zh_hant:addClass(&#039;mw-collapsible&#039;):attr(&#039;data-expandtext&#039;, args[&#039;expandtext_zh-hant&#039;] or args[&#039;expandtext&#039;] or args[&#039;defaultexpandtext_zh-hant&#039;] or args[&#039;defaultexpandtext&#039;] or showText_zh_hant or showText):attr(&#039;data-collapsetext&#039;, args[&#039;collapsetext_zh-hant&#039;] or args[&#039;collapsetext&#039;] or args[&#039;defaultcollapsetext_zh-hant&#039;] or args[&#039;defaultcollapsetext&#039;] or hideText_zh_hant or hideText)&lt;br /&gt;
			navbox_zh_hant_hk:addClass(&#039;mw-collapsible&#039;):attr(&#039;data-expandtext&#039;, args[&#039;expandtext_zh-hant-hk&#039;] or args[&#039;expandtext_zh-hant&#039;] or args[&#039;expandtext&#039;] or args[&#039;defaultexpandtext_zh-hant-hk&#039;] or args[&#039;defaultexpandtext_zh-hant&#039;] or args[&#039;defaultexpandtext&#039;] or showText_zh_hant_hk or showText_zh_hant or showText):attr(&#039;data-collapsetext&#039;, args[&#039;collapsetext_zh-hant-hk&#039;] or args[&#039;collapsetext_zh-hant&#039;] or args[&#039;collapsetext&#039;] or args[&#039;defaultcollapsetext_zh-hant-hk&#039;] or args[&#039;defaultcollapsetext_zh-hant&#039;] or args[&#039;defaultcollapsetext&#039;] or hideText_zh_hant_hk or hideText_zh_hant or hideText)&lt;br /&gt;
		else&lt;br /&gt;
			navbox:addClass(&#039;mw-collapsible&#039;):attr(&#039;data-expandtext&#039;, args[&#039;expandtext&#039;] or args[&#039;defaultexpandtext&#039;] or showText):attr(&#039;data-collapsetext&#039;, args[&#039;collapsetext&#039;] or args[&#039;defaultcollapsetext&#039;] or hideText)&lt;br /&gt;
		end&lt;br /&gt;
&lt;br /&gt;
		if args.state == &#039;collapsed&#039; then&lt;br /&gt;
			if useZhConverter then&lt;br /&gt;
				navbox_zh_hans:addClass(&#039;mw-collapsed&#039;)&lt;br /&gt;
				navbox_zh_hant:addClass(&#039;mw-collapsed&#039;)&lt;br /&gt;
				navbox_zh_hant_hk:addClass(&#039;mw-collapsed&#039;)&lt;br /&gt;
			else&lt;br /&gt;
				navbox:addClass(&#039;mw-collapsed&#039;)&lt;br /&gt;
			end&lt;br /&gt;
		end&lt;br /&gt;
	end&lt;br /&gt;
&lt;br /&gt;
 	if args.bodyclass then&lt;br /&gt;
 		if useZhConverter then&lt;br /&gt;
 			navbox_zh_hans:addClass(args.bodyclass)&lt;br /&gt;
 			navbox_zh_hant:addClass(args.bodyclass)&lt;br /&gt;
 			navbox_zh_hant_hk:addClass(args.bodyclass)&lt;br /&gt;
 		else&lt;br /&gt;
 			navbox:addClass(args.bodyclass)&lt;br /&gt;
 		end&lt;br /&gt;
 	end&lt;br /&gt;
	if args.bodystyle then&lt;br /&gt;
		if useZhConverter then&lt;br /&gt;
			navbox_zh_hans:cssText(args.bodystyle)&lt;br /&gt;
			navbox_zh_hant:cssText(args.bodystyle)&lt;br /&gt;
			navbox_zh_hant_hk:cssText(args.bodystyle)&lt;br /&gt;
		else&lt;br /&gt;
			navbox:cssText(args.bodystyle)&lt;br /&gt;
		end&lt;br /&gt;
	end&lt;br /&gt;
&lt;br /&gt;
	-- Process...&lt;br /&gt;
	processTitle()&lt;br /&gt;
	processAboveBelow(&#039;above&#039;)&lt;br /&gt;
	processRows()&lt;br /&gt;
	processAboveBelow(&#039;below&#039;)&lt;br /&gt;
&lt;br /&gt;
	if not isChild then&lt;br /&gt;
		if useZhConverter then&lt;br /&gt;
			return &#039;-{|&#039; ..&lt;br /&gt;
				&#039;zh-hans:-{zh-cn|&#039; .. striped(tostring(navbox_zh_hans), border) .. &#039;}-; &#039; ..&lt;br /&gt;
				&#039;zh-hant:-{zh-tw|&#039; .. striped(tostring(navbox_zh_hant), border) .. &#039;}-; &#039; ..&lt;br /&gt;
				&#039;zh-hk:-{zh-hk|&#039; .. striped(tostring(navbox_zh_hant_hk), border) .. &#039;}-;&#039; ..&lt;br /&gt;
				&#039;}-&#039;&lt;br /&gt;
		end&lt;br /&gt;
		return striped(tostring(navbox), border)&lt;br /&gt;
	else&lt;br /&gt;
		local wrapper = mw.html.create(&#039;&#039;)&lt;br /&gt;
		wrapper:wikitext(&#039;&amp;lt;/div&amp;gt;&#039;)&lt;br /&gt;
&lt;br /&gt;
		if useZhConverter then&lt;br /&gt;
			wrapper:wikitext(&#039;-{|&#039;)&lt;br /&gt;
			wrapper:wikitext(&#039;zh-hans:-{zh-cn|&#039;)&lt;br /&gt;
			wrapper:node(navbox_zh_hans)&lt;br /&gt;
			wrapper:wikitext(&#039;}-; &#039;)&lt;br /&gt;
			wrapper:wikitext(&#039;zh-hant:-{zh-tw|&#039;)&lt;br /&gt;
			wrapper:node(navbox_zh_hant)&lt;br /&gt;
			wrapper:wikitext(&#039;}-; &#039;)&lt;br /&gt;
			wrapper:wikitext(&#039;zh-hk:-{zh-hk|&#039;)&lt;br /&gt;
			wrapper:node(navbox_zh_hant_hk)&lt;br /&gt;
			wrapper:wikitext(&#039;}-; &#039;)&lt;br /&gt;
			wrapper:wikitext(&#039;}-&#039;)&lt;br /&gt;
		else&lt;br /&gt;
			wrapper:node(navbox)&lt;br /&gt;
		end&lt;br /&gt;
&lt;br /&gt;
		wrapper:wikitext(&#039;&amp;lt;div class=&amp;quot;hlist&amp;quot;&amp;gt;&#039;)&lt;br /&gt;
		return striped(tostring(wrapper), border)&lt;br /&gt;
	end&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
--- Main module entry point.&lt;br /&gt;
-- To be called with {{#invoke:navbox|main}} or directly from another module.&lt;br /&gt;
--&lt;br /&gt;
-- @param frame The frame passed to the module via the #invoke. If called from another&lt;br /&gt;
--              module directly, this should be a table with the parameter definition.&lt;br /&gt;
function p.main(frame)&lt;br /&gt;
	return _navbox(preProcessArgs(frame))&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
return p&lt;/div&gt;</summary>
		<author><name>WikiAdmin</name></author>
	</entry>
	<entry>
		<id>https://unimage.wcnm.pw/index.php?title=%E6%A8%A1%E5%9D%97:Dev/Namespace_detect/data&amp;diff=715</id>
		<title>模块:Dev/Namespace detect/data</title>
		<link rel="alternate" type="text/html" href="https://unimage.wcnm.pw/index.php?title=%E6%A8%A1%E5%9D%97:Dev/Namespace_detect/data&amp;diff=715"/>
		<updated>2026-08-31T12:54:50Z</updated>

		<summary type="html">&lt;p&gt;WikiAdmin：​从 Fandom Developer Wiki 本地化全局模块，源修订 198201&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;-- 来源：https://dev.fandom.com/wiki/Module%3ANamespace_detect/data&lt;br /&gt;
-- 许可：CC BY-SA，作者与修订记录见来源页面&lt;br /&gt;
--------------------------------------------------------------------------------&lt;br /&gt;
--                          Namespace detect data                             --&lt;br /&gt;
-- This module holds data for [[Module:Namespace detect]] to be loaded per    --&lt;br /&gt;
-- page, rather than per #invoke, for performance reasons.                    --&lt;br /&gt;
--------------------------------------------------------------------------------&lt;br /&gt;
&lt;br /&gt;
local cfg = mw.title.new( &#039;Module:Namespace detect/config&#039;).exists and require(&#039;Module:Namespace detect/config&#039;) or require(&#039;Module:Dev/Namespace detect/config&#039;)&lt;br /&gt;
&lt;br /&gt;
local function addKey(t, key, defaultKey)&lt;br /&gt;
	if key ~= defaultKey then&lt;br /&gt;
		t[#t + 1] = key&lt;br /&gt;
	end&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
-- Get a table of parameters to query for each default parameter name.&lt;br /&gt;
-- This allows wikis to customise parameter names in the cfg table while&lt;br /&gt;
-- ensuring that default parameter names will always work. The cfg table&lt;br /&gt;
-- values can be added as a string, or as an array of strings.&lt;br /&gt;
&lt;br /&gt;
local defaultKeys = {&lt;br /&gt;
	&#039;main&#039;,&lt;br /&gt;
	&#039;talk&#039;,&lt;br /&gt;
	&#039;other&#039;,&lt;br /&gt;
	&#039;subjectns&#039;,&lt;br /&gt;
	&#039;demospace&#039;,&lt;br /&gt;
	&#039;demopage&#039;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
local argKeys = {}&lt;br /&gt;
for i, defaultKey in ipairs(defaultKeys) do&lt;br /&gt;
	argKeys[defaultKey] = {defaultKey}&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
for defaultKey, t in pairs(argKeys) do&lt;br /&gt;
	local cfgValue = cfg[defaultKey]&lt;br /&gt;
	local cfgValueType = type(cfgValue)&lt;br /&gt;
	if cfgValueType == &#039;string&#039; then&lt;br /&gt;
		addKey(t, cfgValue, defaultKey)&lt;br /&gt;
	elseif cfgValueType == &#039;table&#039; then&lt;br /&gt;
		for i, key in ipairs(cfgValue) do&lt;br /&gt;
			addKey(t, key, defaultKey)&lt;br /&gt;
		end&lt;br /&gt;
	end&lt;br /&gt;
	cfg[defaultKey] = nil -- Free the cfg value as we don&#039;t need it any more.&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
local function getParamMappings()&lt;br /&gt;
	--[[&lt;br /&gt;
	-- Returns a table of how parameter names map to namespace names. The keys&lt;br /&gt;
	-- are the actual namespace names, in lower case, and the values are the&lt;br /&gt;
	-- possible parameter names for that namespace, also in lower case. The&lt;br /&gt;
	-- table entries are structured like this:&lt;br /&gt;
	-- {&lt;br /&gt;
	--   [&#039;&#039;] = {&#039;main&#039;},&lt;br /&gt;
	--   [&#039;wikipedia&#039;] = {&#039;wikipedia&#039;, &#039;project&#039;, &#039;wp&#039;},&lt;br /&gt;
	--   ...&lt;br /&gt;
	-- }&lt;br /&gt;
	--]]&lt;br /&gt;
	local mappings = {}&lt;br /&gt;
	local mainNsName = mw.site.subjectNamespaces[0].name&lt;br /&gt;
	mainNsName = mw.ustring.lower(mainNsName)&lt;br /&gt;
	mappings[mainNsName] = mw.clone(argKeys.main)&lt;br /&gt;
	mappings[&#039;talk&#039;] = mw.clone(argKeys.talk)&lt;br /&gt;
	for nsid, ns in pairs(mw.site.subjectNamespaces) do&lt;br /&gt;
		if nsid ~= 0 then -- Exclude main namespace.&lt;br /&gt;
			local nsname = mw.ustring.lower(ns.name)&lt;br /&gt;
			local canonicalName = mw.ustring.lower(ns.canonicalName)&lt;br /&gt;
			mappings[nsname] = {nsname}&lt;br /&gt;
			if canonicalName ~= nsname then&lt;br /&gt;
				table.insert(mappings[nsname], canonicalName)&lt;br /&gt;
			end&lt;br /&gt;
			for _, alias in ipairs(ns.aliases) do&lt;br /&gt;
				table.insert(mappings[nsname], mw.ustring.lower(alias))&lt;br /&gt;
			end&lt;br /&gt;
		end&lt;br /&gt;
	end&lt;br /&gt;
	return mappings&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
return {&lt;br /&gt;
	argKeys = argKeys,&lt;br /&gt;
	cfg = cfg,&lt;br /&gt;
	mappings = getParamMappings()&lt;br /&gt;
}&lt;/div&gt;</summary>
		<author><name>WikiAdmin</name></author>
	</entry>
	<entry>
		<id>https://unimage.wcnm.pw/index.php?title=%E6%A8%A1%E5%9D%97:Dev/Namespace_detect/config&amp;diff=714</id>
		<title>模块:Dev/Namespace detect/config</title>
		<link rel="alternate" type="text/html" href="https://unimage.wcnm.pw/index.php?title=%E6%A8%A1%E5%9D%97:Dev/Namespace_detect/config&amp;diff=714"/>
		<updated>2026-08-31T12:54:49Z</updated>

		<summary type="html">&lt;p&gt;WikiAdmin：​从 Fandom Developer Wiki 本地化全局模块，源修订 32183&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;-- 来源：https://dev.fandom.com/wiki/Module%3ANamespace_detect/config&lt;br /&gt;
-- 许可：CC BY-SA，作者与修订记录见来源页面&lt;br /&gt;
--------------------------------------------------------------------------------&lt;br /&gt;
--                    Namespace detect configuration data                     --&lt;br /&gt;
--                                                                            --&lt;br /&gt;
-- This module stores configuration data for Module:Namespace detect. Here    --&lt;br /&gt;
-- you can localise the module to your wiki&#039;s language.                       --&lt;br /&gt;
--                                                                            --&lt;br /&gt;
-- To activate a configuration item, you need to uncomment it. This means     --&lt;br /&gt;
-- that you need to remove the text &amp;quot;-- &amp;quot; at the start of the line.           --&lt;br /&gt;
--------------------------------------------------------------------------------&lt;br /&gt;
&lt;br /&gt;
local cfg = {} -- Don&#039;t edit this line.&lt;br /&gt;
&lt;br /&gt;
--------------------------------------------------------------------------------&lt;br /&gt;
--                              Parameter names                               --&lt;br /&gt;
-- These configuration items specify custom parameter names. Values added     --&lt;br /&gt;
-- here will work in addition to the default English parameter names.         --&lt;br /&gt;
-- To add one extra name, you can use this format:                            --&lt;br /&gt;
--                                                                            --&lt;br /&gt;
-- cfg.foo = &#039;parameter name&#039;                                                 --&lt;br /&gt;
--                                                                            --&lt;br /&gt;
-- To add multiple names, you can use this format:                            --&lt;br /&gt;
--                                                                            --&lt;br /&gt;
-- cfg.foo = {&#039;parameter name 1&#039;, &#039;parameter name 2&#039;, &#039;parameter name 3&#039;}     --&lt;br /&gt;
--------------------------------------------------------------------------------&lt;br /&gt;
&lt;br /&gt;
---- This parameter displays content for the main namespace:&lt;br /&gt;
-- cfg.main = &#039;main&#039;&lt;br /&gt;
&lt;br /&gt;
---- This parameter displays in talk namespaces:&lt;br /&gt;
-- cfg.talk = &#039;talk&#039;&lt;br /&gt;
&lt;br /&gt;
---- This parameter displays content for &amp;quot;other&amp;quot; namespaces (namespaces for which&lt;br /&gt;
---- parameters have not been specified):&lt;br /&gt;
-- cfg.other = &#039;other&#039;&lt;br /&gt;
&lt;br /&gt;
---- This parameter makes talk pages behave as though they are the corresponding&lt;br /&gt;
---- subject namespace. Note that this parameter is used with [[Module:Yesno]].&lt;br /&gt;
---- Edit that module to change the default values of &amp;quot;yes&amp;quot;, &amp;quot;no&amp;quot;, etc.&lt;br /&gt;
-- cfg.subjectns = &#039;subjectns&#039;&lt;br /&gt;
&lt;br /&gt;
---- This parameter sets a demonstration namespace:&lt;br /&gt;
-- cfg.demospace = &#039;demospace&#039;&lt;br /&gt;
&lt;br /&gt;
---- This parameter sets a specific page to compare:&lt;br /&gt;
cfg.demopage = &#039;page&#039;&lt;br /&gt;
&lt;br /&gt;
--------------------------------------------------------------------------------&lt;br /&gt;
--                           Table configuration                              --&lt;br /&gt;
-- These configuration items allow customisation of the &amp;quot;table&amp;quot; function,     --&lt;br /&gt;
-- used to generate a table of possible parameters in the module              --&lt;br /&gt;
-- documentation.                                                             --&lt;br /&gt;
--------------------------------------------------------------------------------&lt;br /&gt;
&lt;br /&gt;
---- The header for the namespace column in the wikitable containing the list of&lt;br /&gt;
---- possible subject-space parameters.&lt;br /&gt;
-- cfg.wikitableNamespaceHeader = &#039;Namespace&#039;&lt;br /&gt;
&lt;br /&gt;
---- The header for the wikitable containing the list of possible subject-space&lt;br /&gt;
---- parameters.&lt;br /&gt;
-- cfg.wikitableAliasesHeader = &#039;Aliases&#039;&lt;br /&gt;
&lt;br /&gt;
--------------------------------------------------------------------------------&lt;br /&gt;
--                        End of configuration data                           --&lt;br /&gt;
--------------------------------------------------------------------------------&lt;br /&gt;
&lt;br /&gt;
return cfg -- Don&#039;t edit this line.&lt;/div&gt;</summary>
		<author><name>WikiAdmin</name></author>
	</entry>
	<entry>
		<id>https://unimage.wcnm.pw/index.php?title=%E6%A8%A1%E5%9D%97:Dev/Namespace_detect&amp;diff=713</id>
		<title>模块:Dev/Namespace detect</title>
		<link rel="alternate" type="text/html" href="https://unimage.wcnm.pw/index.php?title=%E6%A8%A1%E5%9D%97:Dev/Namespace_detect&amp;diff=713"/>
		<updated>2026-08-31T12:54:48Z</updated>

		<summary type="html">&lt;p&gt;WikiAdmin：​从 Fandom Developer Wiki 本地化全局模块，源修订 118284&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;-- 来源：https://dev.fandom.com/wiki/Module%3ANamespace_detect&lt;br /&gt;
-- 许可：CC BY-SA，作者与修订记录见来源页面&lt;br /&gt;
-- &amp;lt;nowiki&amp;gt;&lt;br /&gt;
--[[&lt;br /&gt;
--------------------------------------------------------------------------------&lt;br /&gt;
--                                                                            --&lt;br /&gt;
--                            NAMESPACE DETECT                                --&lt;br /&gt;
--                                                                            --&lt;br /&gt;
-- This module implements the {{namespace detect}} template in Lua, with a    --&lt;br /&gt;
-- few improvements: all namespaces and all namespace aliases are supported,  --&lt;br /&gt;
-- and namespace names are detected automatically for the local wiki. The     --&lt;br /&gt;
-- module can also use the corresponding subject namespace value if it is     --&lt;br /&gt;
-- used on a talk page. Parameter names can be configured for different wikis --&lt;br /&gt;
-- by altering the values in the &amp;quot;cfg&amp;quot; table in                               --&lt;br /&gt;
-- Module:Namespace detect/config.                                            --&lt;br /&gt;
--                                                                            --&lt;br /&gt;
--------------------------------------------------------------------------------&lt;br /&gt;
--]]&lt;br /&gt;
&lt;br /&gt;
local data = mw.title.new( &#039;Module:Namespace detect/data&#039;).exists and mw.loadData(&#039;Module:Namespace detect/data&#039;) or mw.loadData(&#039;Module:Dev/Namespace detect/data&#039;)&lt;br /&gt;
local argKeys = data.argKeys&lt;br /&gt;
local cfg = data.cfg&lt;br /&gt;
local mappings = data.mappings&lt;br /&gt;
&lt;br /&gt;
local yesno = require(&#039;Module:Dev/Yesno&#039;)&lt;br /&gt;
local mArguments -- Lazily initialise Module:Arguments&lt;br /&gt;
local mTableTools -- Lazily initilalise Module:TableTools&lt;br /&gt;
local ustringLower = mw.ustring.lower&lt;br /&gt;
&lt;br /&gt;
local p = {}&lt;br /&gt;
&lt;br /&gt;
local function fetchValue(t1, t2)&lt;br /&gt;
	-- Fetches a value from the table t1 for the first key in array t2 where&lt;br /&gt;
	-- a non-nil value of t1 exists.&lt;br /&gt;
	for i, key in ipairs(t2) do&lt;br /&gt;
		local value = t1[key]&lt;br /&gt;
		if value ~= nil then&lt;br /&gt;
			return value&lt;br /&gt;
		end&lt;br /&gt;
	end&lt;br /&gt;
	return nil&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
local function equalsArrayValue(t, value)&lt;br /&gt;
	-- Returns true if value equals a value in the array t. Otherwise&lt;br /&gt;
	-- returns false.&lt;br /&gt;
	for i, arrayValue in ipairs(t) do&lt;br /&gt;
		if value == arrayValue then&lt;br /&gt;
			return true&lt;br /&gt;
		end&lt;br /&gt;
	end&lt;br /&gt;
	return false&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
function p.getPageObject(page)&lt;br /&gt;
	-- Get the page object, passing the function through pcall in case of&lt;br /&gt;
	-- errors, e.g. being over the expensive function count limit.&lt;br /&gt;
	if page then&lt;br /&gt;
		local success, pageObject = pcall(mw.title.new, page)&lt;br /&gt;
		if success then&lt;br /&gt;
			return pageObject&lt;br /&gt;
		else&lt;br /&gt;
			return nil&lt;br /&gt;
		end&lt;br /&gt;
	else&lt;br /&gt;
		return mw.title.getCurrentTitle()&lt;br /&gt;
	end&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
-- Provided for backward compatibility with other modules&lt;br /&gt;
function p.getParamMappings()&lt;br /&gt;
	return mappings&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
local function getNamespace(args)&lt;br /&gt;
	-- This function gets the namespace name from the page object.&lt;br /&gt;
	local page = fetchValue(args, argKeys.demopage)&lt;br /&gt;
	if page == &#039;&#039; then&lt;br /&gt;
		page = nil&lt;br /&gt;
	end&lt;br /&gt;
	local demospace = fetchValue(args, argKeys.demospace)&lt;br /&gt;
	if demospace == &#039;&#039; then&lt;br /&gt;
		demospace = nil&lt;br /&gt;
	end&lt;br /&gt;
	local subjectns = fetchValue(args, argKeys.subjectns)&lt;br /&gt;
	local ret&lt;br /&gt;
	if demospace then&lt;br /&gt;
		-- Handle &amp;quot;demospace = main&amp;quot; properly.&lt;br /&gt;
		if equalsArrayValue(argKeys.main, ustringLower(demospace)) then&lt;br /&gt;
			ret = mw.site.namespaces[0].name&lt;br /&gt;
		else&lt;br /&gt;
			ret = demospace&lt;br /&gt;
		end&lt;br /&gt;
	else&lt;br /&gt;
		local pageObject = p.getPageObject(page)&lt;br /&gt;
		if pageObject then&lt;br /&gt;
			if pageObject.isTalkPage then&lt;br /&gt;
				-- Get the subject namespace if the option is set,&lt;br /&gt;
				-- otherwise use &amp;quot;talk&amp;quot;.&lt;br /&gt;
				if yesno(subjectns) then&lt;br /&gt;
					ret = mw.site.namespaces[pageObject.namespace].subject.name&lt;br /&gt;
				else&lt;br /&gt;
					ret = &#039;talk&#039;&lt;br /&gt;
				end&lt;br /&gt;
			else&lt;br /&gt;
				ret = pageObject.nsText&lt;br /&gt;
			end&lt;br /&gt;
		else&lt;br /&gt;
			return nil -- return nil if the page object doesn&#039;t exist.&lt;br /&gt;
		end&lt;br /&gt;
	end&lt;br /&gt;
	ret = ret:gsub(&#039;_&#039;, &#039; &#039;)&lt;br /&gt;
	return ustringLower(ret)&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
function p._main(args)&lt;br /&gt;
	-- Check the parameters stored in the mappings table for any matches.&lt;br /&gt;
	local namespace = getNamespace(args) or &#039;other&#039; -- &amp;quot;other&amp;quot; avoids nil table keys&lt;br /&gt;
	local params = mappings[namespace] or {}&lt;br /&gt;
	local ret = fetchValue(args, params)&lt;br /&gt;
	--[[&lt;br /&gt;
	-- If there were no matches, return parameters for other namespaces.&lt;br /&gt;
	-- This happens if there was no text specified for the namespace that&lt;br /&gt;
	-- was detected or if the demospace parameter is not a valid&lt;br /&gt;
	-- namespace. Note that the parameter for the detected namespace must be&lt;br /&gt;
	-- completely absent for this to happen, not merely blank.&lt;br /&gt;
	--]]&lt;br /&gt;
	if ret == nil then&lt;br /&gt;
		ret = fetchValue(args, argKeys.other)&lt;br /&gt;
	end&lt;br /&gt;
	return ret&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
function p.main(frame)&lt;br /&gt;
	mArguments = require(&#039;Module:Dev/Arguments&#039;)&lt;br /&gt;
	local args = mArguments.getArgs(frame, {removeBlanks = false})&lt;br /&gt;
	local ret = p._main(args)&lt;br /&gt;
	return ret or &#039;&#039;&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
function p.table(frame)&lt;br /&gt;
	--[[&lt;br /&gt;
	-- Create a wikitable of all subject namespace parameters, for&lt;br /&gt;
	-- documentation purposes. The talk parameter is optional, in case it&lt;br /&gt;
	-- needs to be excluded in the documentation.&lt;br /&gt;
	--]]&lt;br /&gt;
	&lt;br /&gt;
	-- Load modules and initialise variables.&lt;br /&gt;
	mTableTools = require(&#039;Module:Dev/TableTools&#039;)&lt;br /&gt;
	local namespaces = mw.site.namespaces&lt;br /&gt;
	local cfg = data.cfg&lt;br /&gt;
	local useTalk = type(frame) == &#039;table&#039; &lt;br /&gt;
		and type(frame.args) == &#039;table&#039; &lt;br /&gt;
		and yesno(frame.args.talk) -- Whether to use the talk parameter.&lt;br /&gt;
	&lt;br /&gt;
	-- Get the header names.&lt;br /&gt;
	local function checkValue(value, default)&lt;br /&gt;
		if type(value) == &#039;string&#039; then&lt;br /&gt;
			return value&lt;br /&gt;
		else&lt;br /&gt;
			return default&lt;br /&gt;
		end&lt;br /&gt;
	end&lt;br /&gt;
	local nsHeader = checkValue(cfg.wikitableNamespaceHeader, &#039;Namespace&#039;)&lt;br /&gt;
	local aliasesHeader = checkValue(cfg.wikitableAliasesHeader, &#039;Aliases&#039;)&lt;br /&gt;
&lt;br /&gt;
	-- Put the namespaces in order.&lt;br /&gt;
	local mappingsOrdered = {}&lt;br /&gt;
	for nsname, params in pairs(mappings) do&lt;br /&gt;
		if useTalk or nsname ~= &#039;talk&#039; then&lt;br /&gt;
			local nsid = namespaces[nsname].id&lt;br /&gt;
			-- Add 1, as the array must start with 1; nsid 0 would be lost otherwise.&lt;br /&gt;
			nsid = nsid + 1 &lt;br /&gt;
			mappingsOrdered[nsid] = params&lt;br /&gt;
		end&lt;br /&gt;
	end&lt;br /&gt;
	mappingsOrdered = mTableTools.compressSparseArray(mappingsOrdered)&lt;br /&gt;
&lt;br /&gt;
	-- Build the table.&lt;br /&gt;
	local ret = &#039;{| class=&amp;quot;wikitable&amp;quot;&#039;&lt;br /&gt;
		.. &#039;\n|-&#039;&lt;br /&gt;
		.. &#039;\n! &#039; .. nsHeader&lt;br /&gt;
		.. &#039;\n! &#039; .. aliasesHeader&lt;br /&gt;
	for i, params in ipairs(mappingsOrdered) do&lt;br /&gt;
		for j, param in ipairs(params) do&lt;br /&gt;
			if j == 1 then&lt;br /&gt;
				ret = ret .. &#039;\n|-&#039;&lt;br /&gt;
					.. &#039;\n| &amp;lt;code&amp;gt;&#039; .. param .. &#039;&amp;lt;/code&amp;gt;&#039;&lt;br /&gt;
					.. &#039;\n| &#039;&lt;br /&gt;
			elseif j == 2 then&lt;br /&gt;
				ret = ret .. &#039;&amp;lt;code&amp;gt;&#039; .. param .. &#039;&amp;lt;/code&amp;gt;&#039;&lt;br /&gt;
			else&lt;br /&gt;
				ret = ret .. &#039;, &amp;lt;code&amp;gt;&#039; .. param .. &#039;&amp;lt;/code&amp;gt;&#039;&lt;br /&gt;
			end&lt;br /&gt;
		end&lt;br /&gt;
	end&lt;br /&gt;
	ret = ret .. &#039;\n|-&#039;&lt;br /&gt;
		.. &#039;\n|}&#039;&lt;br /&gt;
	return ret&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
return p&lt;/div&gt;</summary>
		<author><name>WikiAdmin</name></author>
	</entry>
	<entry>
		<id>https://unimage.wcnm.pw/index.php?title=%E6%A8%A1%E5%9D%97:Dev/Mbox/i18n&amp;diff=712</id>
		<title>模块:Dev/Mbox/i18n</title>
		<link rel="alternate" type="text/html" href="https://unimage.wcnm.pw/index.php?title=%E6%A8%A1%E5%9D%97:Dev/Mbox/i18n&amp;diff=712"/>
		<updated>2026-08-31T12:54:47Z</updated>

		<summary type="html">&lt;p&gt;WikiAdmin：​从 Fandom Developer Wiki 本地化全局模块，源修订 191139&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;-- 来源：https://dev.fandom.com/wiki/Module%3AMbox/i18n&lt;br /&gt;
-- 许可：CC BY-SA，作者与修订记录见来源页面&lt;br /&gt;
-- &amp;lt;nowiki&amp;gt;&lt;br /&gt;
return {&lt;br /&gt;
    [&amp;quot;_metadata&amp;quot;] = {&lt;br /&gt;
        [&amp;quot;order&amp;quot;] = {&lt;br /&gt;
            &amp;quot;aside&amp;quot;,&lt;br /&gt;
            &amp;quot;bgcolor&amp;quot;,&lt;br /&gt;
            &amp;quot;bordercolor&amp;quot;,&lt;br /&gt;
            &amp;quot;class&amp;quot;,&lt;br /&gt;
            &amp;quot;collapsed&amp;quot;,&lt;br /&gt;
            &amp;quot;comment&amp;quot;,&lt;br /&gt;
            &amp;quot;dismiss&amp;quot;,&lt;br /&gt;
            &amp;quot;header&amp;quot;,&lt;br /&gt;
            &amp;quot;id&amp;quot;,&lt;br /&gt;
            &amp;quot;image&amp;quot;,&lt;br /&gt;
            &amp;quot;imagelink&amp;quot;,&lt;br /&gt;
            &amp;quot;imagewidth&amp;quot;,&lt;br /&gt;
            &amp;quot;style&amp;quot;,&lt;br /&gt;
            &amp;quot;text&amp;quot;,&lt;br /&gt;
            &amp;quot;type&amp;quot;&lt;br /&gt;
        }&lt;br /&gt;
    },&lt;br /&gt;
    [&amp;quot;en&amp;quot;] = {&lt;br /&gt;
        [&amp;quot;aside&amp;quot;] = &amp;quot;aside&amp;quot;,&lt;br /&gt;
        [&amp;quot;bgcolor&amp;quot;] = &amp;quot;bgcolor&amp;quot;,&lt;br /&gt;
        [&amp;quot;bordercolor&amp;quot;] = &amp;quot;bordercolor&amp;quot;,&lt;br /&gt;
        [&amp;quot;class&amp;quot;] = &amp;quot;class&amp;quot;,&lt;br /&gt;
        [&amp;quot;collapsed&amp;quot;] = &amp;quot;collapsed&amp;quot;,&lt;br /&gt;
        [&amp;quot;comment&amp;quot;] = &amp;quot;comment&amp;quot;,&lt;br /&gt;
        [&amp;quot;dismiss&amp;quot;] = &amp;quot;Dismiss&amp;quot;,&lt;br /&gt;
        [&amp;quot;header&amp;quot;] = &amp;quot;header&amp;quot;,&lt;br /&gt;
        [&amp;quot;id&amp;quot;] = &amp;quot;id&amp;quot;,&lt;br /&gt;
        [&amp;quot;image&amp;quot;] = &amp;quot;image&amp;quot;,&lt;br /&gt;
        [&amp;quot;imagelink&amp;quot;] = &amp;quot;imagelink&amp;quot;,&lt;br /&gt;
        [&amp;quot;imagewidth&amp;quot;] = &amp;quot;imagewidth&amp;quot;,&lt;br /&gt;
        [&amp;quot;style&amp;quot;] = &amp;quot;style&amp;quot;,&lt;br /&gt;
        [&amp;quot;text&amp;quot;] = &amp;quot;text&amp;quot;,&lt;br /&gt;
        [&amp;quot;type&amp;quot;] = &amp;quot;type&amp;quot;&lt;br /&gt;
    },&lt;br /&gt;
    [&amp;quot;de&amp;quot;] = {&lt;br /&gt;
        [&amp;quot;aside&amp;quot;] = &amp;quot;nebenbemerkung&amp;quot;,&lt;br /&gt;
        [&amp;quot;bgcolor&amp;quot;] = &amp;quot;hintergrundfarbe&amp;quot;,&lt;br /&gt;
        [&amp;quot;bordercolor&amp;quot;] = &amp;quot;randfarbe&amp;quot;,&lt;br /&gt;
        [&amp;quot;class&amp;quot;] = &amp;quot;klasse&amp;quot;,&lt;br /&gt;
        [&amp;quot;collapsed&amp;quot;] = &amp;quot;eingeklappt&amp;quot;,&lt;br /&gt;
        [&amp;quot;comment&amp;quot;] = &amp;quot;Kommentar&amp;quot;,&lt;br /&gt;
        [&amp;quot;dismiss&amp;quot;] = &amp;quot;Verstecken&amp;quot;,&lt;br /&gt;
        [&amp;quot;header&amp;quot;] = &amp;quot;Titel&amp;quot;,&lt;br /&gt;
        [&amp;quot;id&amp;quot;] = &amp;quot;id&amp;quot;,&lt;br /&gt;
        [&amp;quot;image&amp;quot;] = &amp;quot;bild&amp;quot;,&lt;br /&gt;
        [&amp;quot;imagelink&amp;quot;] = &amp;quot;bildlink&amp;quot;,&lt;br /&gt;
        [&amp;quot;imagewidth&amp;quot;] = &amp;quot;bildbreite&amp;quot;,&lt;br /&gt;
        [&amp;quot;style&amp;quot;] = &amp;quot;style&amp;quot;,&lt;br /&gt;
        [&amp;quot;text&amp;quot;] = &amp;quot;Text&amp;quot;,&lt;br /&gt;
        [&amp;quot;type&amp;quot;] = &amp;quot;typ&amp;quot;&lt;br /&gt;
    },&lt;br /&gt;
    [&amp;quot;et&amp;quot;] = {&lt;br /&gt;
        [&amp;quot;aside&amp;quot;] = &amp;quot;kõrval&amp;quot;,&lt;br /&gt;
        [&amp;quot;bgcolor&amp;quot;] = &amp;quot;taustavärv&amp;quot;,&lt;br /&gt;
        [&amp;quot;bordercolor&amp;quot;] = &amp;quot;piirivärv&amp;quot;,&lt;br /&gt;
        [&amp;quot;class&amp;quot;] = &amp;quot;klass&amp;quot;,&lt;br /&gt;
        [&amp;quot;comment&amp;quot;] = &amp;quot;kommentaar&amp;quot;,&lt;br /&gt;
        [&amp;quot;dismiss&amp;quot;] = &amp;quot;Loobu&amp;quot;,&lt;br /&gt;
        [&amp;quot;id&amp;quot;] = &amp;quot;id&amp;quot;,&lt;br /&gt;
        [&amp;quot;image&amp;quot;] = &amp;quot;pilt&amp;quot;,&lt;br /&gt;
        [&amp;quot;imagelink&amp;quot;] = &amp;quot;pildilink&amp;quot;,&lt;br /&gt;
        [&amp;quot;imagewidth&amp;quot;] = &amp;quot;pildisuurus&amp;quot;,&lt;br /&gt;
        [&amp;quot;style&amp;quot;] = &amp;quot;stiil&amp;quot;,&lt;br /&gt;
        [&amp;quot;text&amp;quot;] = &amp;quot;tekst&amp;quot;,&lt;br /&gt;
        [&amp;quot;type&amp;quot;] = &amp;quot;tüüp&amp;quot;&lt;br /&gt;
    },&lt;br /&gt;
    [&amp;quot;hi&amp;quot;] = {&lt;br /&gt;
        [&amp;quot;aside&amp;quot;] = &amp;quot;अलग&amp;quot;,&lt;br /&gt;
        [&amp;quot;bgcolor&amp;quot;] = &amp;quot;bgcolor&amp;quot;,&lt;br /&gt;
        [&amp;quot;bordercolor&amp;quot;] = &amp;quot;bordercolour&amp;quot;,&lt;br /&gt;
        [&amp;quot;class&amp;quot;] = &amp;quot;क्लास&amp;quot;,&lt;br /&gt;
        [&amp;quot;collapsed&amp;quot;] = &amp;quot;छोटा&amp;quot;,&lt;br /&gt;
        [&amp;quot;comment&amp;quot;] = &amp;quot;टिप्पणी&amp;quot;,&lt;br /&gt;
        [&amp;quot;dismiss&amp;quot;] = &amp;quot;हटाएँ&amp;quot;,&lt;br /&gt;
        [&amp;quot;header&amp;quot;] = &amp;quot;हैडर&amp;quot;,&lt;br /&gt;
        [&amp;quot;id&amp;quot;] = &amp;quot;id&amp;quot;,&lt;br /&gt;
        [&amp;quot;image&amp;quot;] = &amp;quot;चित्र&amp;quot;,&lt;br /&gt;
        [&amp;quot;imagelink&amp;quot;] = &amp;quot;imagelink&amp;quot;,&lt;br /&gt;
        [&amp;quot;imagewidth&amp;quot;] = &amp;quot;imagewidth&amp;quot;,&lt;br /&gt;
        [&amp;quot;style&amp;quot;] = &amp;quot;स्टाइल&amp;quot;,&lt;br /&gt;
        [&amp;quot;text&amp;quot;] = &amp;quot;टेक्स्ट&amp;quot;,&lt;br /&gt;
        [&amp;quot;type&amp;quot;] = &amp;quot;प्रकार&amp;quot;&lt;br /&gt;
    },&lt;br /&gt;
    [&amp;quot;ja&amp;quot;] = {&lt;br /&gt;
        [&amp;quot;aside&amp;quot;] = &amp;quot;アサイド&amp;quot;,&lt;br /&gt;
        [&amp;quot;bgcolor&amp;quot;] = &amp;quot;背景色&amp;quot;,&lt;br /&gt;
        [&amp;quot;bordercolor&amp;quot;] = &amp;quot;境界線の色&amp;quot;,&lt;br /&gt;
        [&amp;quot;class&amp;quot;] = &amp;quot;クラス&amp;quot;,&lt;br /&gt;
        [&amp;quot;collapsed&amp;quot;] = &amp;quot;折り畳む&amp;quot;,&lt;br /&gt;
        [&amp;quot;comment&amp;quot;] = &amp;quot;コメント&amp;quot;,&lt;br /&gt;
        [&amp;quot;dismiss&amp;quot;] = &amp;quot;後で見る&amp;quot;,&lt;br /&gt;
        [&amp;quot;header&amp;quot;] = &amp;quot;ヘッダー&amp;quot;,&lt;br /&gt;
        [&amp;quot;id&amp;quot;] = &amp;quot;ID&amp;quot;,&lt;br /&gt;
        [&amp;quot;image&amp;quot;] = &amp;quot;画像&amp;quot;,&lt;br /&gt;
        [&amp;quot;imagelink&amp;quot;] = &amp;quot;画像リンク&amp;quot;,&lt;br /&gt;
        [&amp;quot;imagewidth&amp;quot;] = &amp;quot;画像の幅&amp;quot;,&lt;br /&gt;
        [&amp;quot;style&amp;quot;] = &amp;quot;スタイル&amp;quot;,&lt;br /&gt;
        [&amp;quot;text&amp;quot;] = &amp;quot;テキスト&amp;quot;,&lt;br /&gt;
        [&amp;quot;type&amp;quot;] = &amp;quot;種類&amp;quot;&lt;br /&gt;
    },&lt;br /&gt;
    [&amp;quot;pl&amp;quot;] = {&lt;br /&gt;
        [&amp;quot;aside&amp;quot;] = &amp;quot;aside&amp;quot;,&lt;br /&gt;
        [&amp;quot;bgcolor&amp;quot;] = &amp;quot;tło&amp;quot;,&lt;br /&gt;
        [&amp;quot;bordercolor&amp;quot;] = &amp;quot;krawędź&amp;quot;,&lt;br /&gt;
        [&amp;quot;class&amp;quot;] = &amp;quot;klasa&amp;quot;,&lt;br /&gt;
        [&amp;quot;collapsed&amp;quot;] = &amp;quot;zwinięty&amp;quot;,&lt;br /&gt;
        [&amp;quot;comment&amp;quot;] = &amp;quot;komentarz&amp;quot;,&lt;br /&gt;
        [&amp;quot;dismiss&amp;quot;] = &amp;quot;Odrzuć&amp;quot;,&lt;br /&gt;
        [&amp;quot;header&amp;quot;] = &amp;quot;nagłówek&amp;quot;,&lt;br /&gt;
        [&amp;quot;id&amp;quot;] = &amp;quot;id&amp;quot;,&lt;br /&gt;
        [&amp;quot;image&amp;quot;] = &amp;quot;obraz&amp;quot;,&lt;br /&gt;
        [&amp;quot;imagelink&amp;quot;] = &amp;quot;link obrazu&amp;quot;,&lt;br /&gt;
        [&amp;quot;imagewidth&amp;quot;] = &amp;quot;szerokość obrazu&amp;quot;,&lt;br /&gt;
        [&amp;quot;style&amp;quot;] = &amp;quot;style&amp;quot;,&lt;br /&gt;
        [&amp;quot;text&amp;quot;] = &amp;quot;tekst&amp;quot;,&lt;br /&gt;
        [&amp;quot;type&amp;quot;] = &amp;quot;typ&amp;quot;&lt;br /&gt;
    },&lt;br /&gt;
    [&amp;quot;pt-br&amp;quot;] = {&lt;br /&gt;
        [&amp;quot;aside&amp;quot;] = &amp;quot;de lado&amp;quot;,&lt;br /&gt;
        [&amp;quot;bgcolor&amp;quot;] = &amp;quot;bgcolor&amp;quot;,&lt;br /&gt;
        [&amp;quot;bordercolor&amp;quot;] = &amp;quot;cor da borda&amp;quot;,&lt;br /&gt;
        [&amp;quot;class&amp;quot;] = &amp;quot;class&amp;quot;,&lt;br /&gt;
        [&amp;quot;collapsed&amp;quot;] = &amp;quot;recolher&amp;quot;,&lt;br /&gt;
        [&amp;quot;comment&amp;quot;] = &amp;quot;comentário&amp;quot;,&lt;br /&gt;
        [&amp;quot;dismiss&amp;quot;] = &amp;quot;Dispensar&amp;quot;,&lt;br /&gt;
        [&amp;quot;header&amp;quot;] = &amp;quot;cabeçalho&amp;quot;,&lt;br /&gt;
        [&amp;quot;id&amp;quot;] = &amp;quot;id&amp;quot;,&lt;br /&gt;
        [&amp;quot;image&amp;quot;] = &amp;quot;imagem&amp;quot;,&lt;br /&gt;
        [&amp;quot;imagelink&amp;quot;] = &amp;quot;link imagem&amp;quot;,&lt;br /&gt;
        [&amp;quot;imagewidth&amp;quot;] = &amp;quot;largura da imagem&amp;quot;,&lt;br /&gt;
        [&amp;quot;style&amp;quot;] = &amp;quot;estilo&amp;quot;,&lt;br /&gt;
        [&amp;quot;text&amp;quot;] = &amp;quot;texto&amp;quot;,&lt;br /&gt;
        [&amp;quot;type&amp;quot;] = &amp;quot;tipo&amp;quot;&lt;br /&gt;
    },&lt;br /&gt;
    [&amp;quot;ru&amp;quot;] = {&lt;br /&gt;
        [&amp;quot;aside&amp;quot;] = &amp;quot;текст справа&amp;quot;,&lt;br /&gt;
        [&amp;quot;bgcolor&amp;quot;] = &amp;quot;bgcolor&amp;quot;,&lt;br /&gt;
        [&amp;quot;bordercolor&amp;quot;] = &amp;quot;bordercolor&amp;quot;,&lt;br /&gt;
        [&amp;quot;class&amp;quot;] = &amp;quot;class&amp;quot;,&lt;br /&gt;
        [&amp;quot;collapsed&amp;quot;] = &amp;quot;collapsed&amp;quot;,&lt;br /&gt;
        [&amp;quot;comment&amp;quot;] = &amp;quot;дополнение&amp;quot;,&lt;br /&gt;
        [&amp;quot;dismiss&amp;quot;] = &amp;quot;dismiss&amp;quot;,&lt;br /&gt;
        [&amp;quot;header&amp;quot;] = &amp;quot;заголовок&amp;quot;,&lt;br /&gt;
        [&amp;quot;id&amp;quot;] = &amp;quot;id&amp;quot;,&lt;br /&gt;
        [&amp;quot;image&amp;quot;] = &amp;quot;изображение&amp;quot;,&lt;br /&gt;
        [&amp;quot;imagelink&amp;quot;] = &amp;quot;ссылка в изображении&amp;quot;,&lt;br /&gt;
        [&amp;quot;imagewidth&amp;quot;] = &amp;quot;ширина изображения&amp;quot;,&lt;br /&gt;
        [&amp;quot;style&amp;quot;] = &amp;quot;style&amp;quot;,&lt;br /&gt;
        [&amp;quot;text&amp;quot;] = &amp;quot;текст&amp;quot;,&lt;br /&gt;
        [&amp;quot;type&amp;quot;] = &amp;quot;type&amp;quot;&lt;br /&gt;
    },&lt;br /&gt;
    [&amp;quot;tr&amp;quot;] = {&lt;br /&gt;
        [&amp;quot;aside&amp;quot;] = &amp;quot;kenar&amp;quot;,&lt;br /&gt;
        [&amp;quot;bgcolor&amp;quot;] = &amp;quot;aprengi&amp;quot;,&lt;br /&gt;
        [&amp;quot;bordercolor&amp;quot;] = &amp;quot;kenarlıkrengi&amp;quot;,&lt;br /&gt;
        [&amp;quot;class&amp;quot;] = &amp;quot;sınıf&amp;quot;,&lt;br /&gt;
        [&amp;quot;collapsed&amp;quot;] = &amp;quot;daratılmış&amp;quot;,&lt;br /&gt;
        [&amp;quot;comment&amp;quot;] = &amp;quot;yorum&amp;quot;,&lt;br /&gt;
        [&amp;quot;dismiss&amp;quot;] = &amp;quot;Kapat&amp;quot;,&lt;br /&gt;
        [&amp;quot;header&amp;quot;] = &amp;quot;başlık&amp;quot;,&lt;br /&gt;
        [&amp;quot;id&amp;quot;] = &amp;quot;kimlik&amp;quot;,&lt;br /&gt;
        [&amp;quot;image&amp;quot;] = &amp;quot;resim&amp;quot;,&lt;br /&gt;
        [&amp;quot;imagelink&amp;quot;] = &amp;quot;resimbağlantısı&amp;quot;,&lt;br /&gt;
        [&amp;quot;imagewidth&amp;quot;] = &amp;quot;resimgenişliği&amp;quot;,&lt;br /&gt;
        [&amp;quot;style&amp;quot;] = &amp;quot;stil&amp;quot;,&lt;br /&gt;
        [&amp;quot;text&amp;quot;] = &amp;quot;metin&amp;quot;,&lt;br /&gt;
        [&amp;quot;type&amp;quot;] = &amp;quot;tür&amp;quot;&lt;br /&gt;
    },&lt;br /&gt;
    [&amp;quot;vi&amp;quot;] = {&lt;br /&gt;
        [&amp;quot;aside&amp;quot;] = &amp;quot;phía bên&amp;quot;,&lt;br /&gt;
        [&amp;quot;bgcolor&amp;quot;] = &amp;quot;màu nền&amp;quot;,&lt;br /&gt;
        [&amp;quot;bordercolor&amp;quot;] = &amp;quot;màu viền&amp;quot;,&lt;br /&gt;
        [&amp;quot;class&amp;quot;] = &amp;quot;lớp&amp;quot;,&lt;br /&gt;
        [&amp;quot;collapsed&amp;quot;] = &amp;quot;đã đóng&amp;quot;,&lt;br /&gt;
        [&amp;quot;comment&amp;quot;] = &amp;quot;bình luận&amp;quot;,&lt;br /&gt;
        [&amp;quot;dismiss&amp;quot;] = &amp;quot;Bỏ qua&amp;quot;,&lt;br /&gt;
        [&amp;quot;header&amp;quot;] = &amp;quot;tiêu đề&amp;quot;,&lt;br /&gt;
        [&amp;quot;id&amp;quot;] = &amp;quot;id&amp;quot;,&lt;br /&gt;
        [&amp;quot;image&amp;quot;] = &amp;quot;hình ảnh&amp;quot;,&lt;br /&gt;
        [&amp;quot;imagelink&amp;quot;] = &amp;quot;liên kết ảnh&amp;quot;,&lt;br /&gt;
        [&amp;quot;imagewidth&amp;quot;] = &amp;quot;độ rộng ảnh&amp;quot;,&lt;br /&gt;
        [&amp;quot;style&amp;quot;] = &amp;quot;phong cách&amp;quot;,&lt;br /&gt;
        [&amp;quot;text&amp;quot;] = &amp;quot;văn bản&amp;quot;,&lt;br /&gt;
        [&amp;quot;type&amp;quot;] = &amp;quot;loại&amp;quot;&lt;br /&gt;
    },&lt;br /&gt;
    [&amp;quot;zh&amp;quot;] = {&lt;br /&gt;
        [&amp;quot;aside&amp;quot;] = &amp;quot;侧栏&amp;quot;,&lt;br /&gt;
        [&amp;quot;bgcolor&amp;quot;] = &amp;quot;背景颜色&amp;quot;,&lt;br /&gt;
        [&amp;quot;bordercolor&amp;quot;] = &amp;quot;边框颜色&amp;quot;,&lt;br /&gt;
        [&amp;quot;class&amp;quot;] = &amp;quot;类&amp;quot;,&lt;br /&gt;
        [&amp;quot;collapsed&amp;quot;] = &amp;quot;折叠&amp;quot;,&lt;br /&gt;
        [&amp;quot;comment&amp;quot;] = &amp;quot;备注&amp;quot;,&lt;br /&gt;
        [&amp;quot;dismiss&amp;quot;] = &amp;quot;关闭&amp;quot;,&lt;br /&gt;
        [&amp;quot;header&amp;quot;] = &amp;quot;标题&amp;quot;,&lt;br /&gt;
        [&amp;quot;id&amp;quot;] = &amp;quot;id&amp;quot;,&lt;br /&gt;
        [&amp;quot;image&amp;quot;] = &amp;quot;图像&amp;quot;,&lt;br /&gt;
        [&amp;quot;imagelink&amp;quot;] = &amp;quot;图像链接&amp;quot;,&lt;br /&gt;
        [&amp;quot;imagewidth&amp;quot;] = &amp;quot;图像宽度&amp;quot;,&lt;br /&gt;
        [&amp;quot;style&amp;quot;] = &amp;quot;样式&amp;quot;,&lt;br /&gt;
        [&amp;quot;text&amp;quot;] = &amp;quot;文字&amp;quot;,&lt;br /&gt;
        [&amp;quot;type&amp;quot;] = &amp;quot;类型&amp;quot;&lt;br /&gt;
    },&lt;br /&gt;
    [&amp;quot;zh-tw&amp;quot;] = {&lt;br /&gt;
        [&amp;quot;aside&amp;quot;] = &amp;quot;邊界&amp;quot;,&lt;br /&gt;
        [&amp;quot;bgcolor&amp;quot;] = &amp;quot;背景色彩&amp;quot;,&lt;br /&gt;
        [&amp;quot;bordercolor&amp;quot;] = &amp;quot;邊框色彩&amp;quot;,&lt;br /&gt;
        [&amp;quot;class&amp;quot;] = &amp;quot;屬性&amp;quot;,&lt;br /&gt;
        [&amp;quot;collapsed&amp;quot;] = &amp;quot;摺疊&amp;quot;,&lt;br /&gt;
        [&amp;quot;comment&amp;quot;] = &amp;quot;評論&amp;quot;,&lt;br /&gt;
        [&amp;quot;dismiss&amp;quot;] = &amp;quot;忽略&amp;quot;,&lt;br /&gt;
        [&amp;quot;header&amp;quot;] = &amp;quot;標頭&amp;quot;,&lt;br /&gt;
        [&amp;quot;id&amp;quot;] = &amp;quot;ID&amp;quot;,&lt;br /&gt;
        [&amp;quot;image&amp;quot;] = &amp;quot;圖片&amp;quot;,&lt;br /&gt;
        [&amp;quot;imagelink&amp;quot;] = &amp;quot;圖片連結&amp;quot;,&lt;br /&gt;
        [&amp;quot;imagewidth&amp;quot;] = &amp;quot;圖片長度&amp;quot;,&lt;br /&gt;
        [&amp;quot;style&amp;quot;] = &amp;quot;樣式&amp;quot;,&lt;br /&gt;
        [&amp;quot;text&amp;quot;] = &amp;quot;文字&amp;quot;,&lt;br /&gt;
        [&amp;quot;type&amp;quot;] = &amp;quot;類型&amp;quot;&lt;br /&gt;
    }&lt;br /&gt;
}&lt;br /&gt;
-- &amp;lt;/nowiki&amp;gt;&lt;/div&gt;</summary>
		<author><name>WikiAdmin</name></author>
	</entry>
	<entry>
		<id>https://unimage.wcnm.pw/index.php?title=%E6%A8%A1%E5%9D%97:Dev/Mbox&amp;diff=711</id>
		<title>模块:Dev/Mbox</title>
		<link rel="alternate" type="text/html" href="https://unimage.wcnm.pw/index.php?title=%E6%A8%A1%E5%9D%97:Dev/Mbox&amp;diff=711"/>
		<updated>2026-08-31T12:54:46Z</updated>

		<summary type="html">&lt;p&gt;WikiAdmin：​从 Fandom Developer Wiki 本地化全局模块，源修订 210980&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;-- 来源：https://dev.fandom.com/wiki/Module%3AMbox&lt;br /&gt;
-- 许可：CC BY-SA，作者与修订记录见来源页面&lt;br /&gt;
-- &amp;lt;nowiki&amp;gt;&lt;br /&gt;
local Mbox = {}&lt;br /&gt;
local getArgs = require(&#039;Module:Dev/Arguments&#039;).getArgs&lt;br /&gt;
local i18n = require(&#039;Module:Dev/I18n&#039;).loadMessages(&#039;Mbox&#039;)&lt;br /&gt;
&lt;br /&gt;
function Mbox.main(frame)&lt;br /&gt;
    local args = getArgs(frame)&lt;br /&gt;
&lt;br /&gt;
    -- styles&lt;br /&gt;
    local styles = {}&lt;br /&gt;
    styles[&#039;border-left-color&#039;] = i18n:parameter(&#039;bordercolor&#039;, args)&lt;br /&gt;
    styles[&#039;background-color&#039;] = i18n:parameter(&#039;bgcolor&#039;, args)&lt;br /&gt;
&lt;br /&gt;
    -- images&lt;br /&gt;
    local image = i18n:parameter(&#039;image&#039;, args) or &#039;&#039;&lt;br /&gt;
    local imageadjust = &#039;&#039;&lt;br /&gt;
    if args.imageadjust then&lt;br /&gt;
        imageadjust = &#039;|&#039; .. args.imageadjust&lt;br /&gt;
    end&lt;br /&gt;
    local imagewidth = i18n:parameter(&#039;imagewidth&#039;, args) or &#039;80px&#039;&lt;br /&gt;
    local imagelink = &#039;|link=&#039;&lt;br /&gt;
    local imagelinkarg = i18n:parameter(&#039;imagelink&#039;, args)&lt;br /&gt;
    if imagelinkarg then&lt;br /&gt;
        imagelink = imagelink .. imagelinkarg&lt;br /&gt;
    end&lt;br /&gt;
&lt;br /&gt;
    local imagewikitext = &#039;[[File:&#039; .. image .. &#039;|&#039; .. imagewidth  .. imageadjust .. imagelink .. &#039;]]&#039;&lt;br /&gt;
&lt;br /&gt;
    -- id for closure&lt;br /&gt;
    local id = i18n:parameter(&#039;id&#039;, args) or &#039;mbox&#039;&lt;br /&gt;
    local typeclass = i18n:parameter(&#039;type&#039;, args)&lt;br /&gt;
&lt;br /&gt;
    local container = mw.html.create(&#039;div&#039;)&lt;br /&gt;
        :addClass(&#039;mbox&#039;)&lt;br /&gt;
        :addClass(typeclass and (&#039;mbox-type-&#039; .. typeclass))&lt;br /&gt;
        :addClass(i18n:parameter(&#039;class&#039;, args))&lt;br /&gt;
        :css(styles)&lt;br /&gt;
        :cssText(i18n:parameter(&#039;style&#039;, args))&lt;br /&gt;
&lt;br /&gt;
    local content = container:tag(&#039;div&#039;)&lt;br /&gt;
        :addClass(&#039;mbox__content&#039;)&lt;br /&gt;
    local collapsed = i18n:parameter(&#039;collapsed&#039;, args)&lt;br /&gt;
&lt;br /&gt;
    if image ~= &#039;&#039; then&lt;br /&gt;
        local image = content:tag(&#039;div&#039;)&lt;br /&gt;
            :addClass(&#039;mbox__content__image&#039;)&lt;br /&gt;
            :addClass(&#039;mw-collapsible&#039;)&lt;br /&gt;
            :attr(&#039;id&#039;, &#039;mw-customcollapsible-&#039; .. id)&lt;br /&gt;
            :wikitext(imagewikitext)&lt;br /&gt;
            if collapsed then&lt;br /&gt;
                image:addClass(&#039;mw-collapsed&#039;)&lt;br /&gt;
            end&lt;br /&gt;
    end&lt;br /&gt;
&lt;br /&gt;
    local contentwrapper = content:tag(&#039;div&#039;)&lt;br /&gt;
        :addClass(&#039;mbox__content__wrapper&#039;)&lt;br /&gt;
    local header = i18n:parameter(&#039;header&#039;, args)&lt;br /&gt;
&lt;br /&gt;
    if header then&lt;br /&gt;
        contentwrapper:tag(&#039;div&#039;)&lt;br /&gt;
            :addClass(&#039;mbox__content__header&#039;)&lt;br /&gt;
            :wikitext(header)&lt;br /&gt;
    end&lt;br /&gt;
&lt;br /&gt;
    local textarg = i18n:parameter(&#039;text&#039;, args)&lt;br /&gt;
    if textarg then&lt;br /&gt;
        local text = contentwrapper:tag(&#039;div&#039;)&lt;br /&gt;
            :addClass(&#039;mbox__content__text&#039;)&lt;br /&gt;
            :addClass(&#039;mw-collapsible&#039;)&lt;br /&gt;
            :attr(&#039;id&#039;, &#039;mw-customcollapsible-&#039; .. id)&lt;br /&gt;
            :wikitext(textarg)&lt;br /&gt;
            if collapsed then&lt;br /&gt;
                text:addClass(&#039;mw-collapsed&#039;)&lt;br /&gt;
            end&lt;br /&gt;
&lt;br /&gt;
        local comment = i18n:parameter(&#039;comment&#039;, args)&lt;br /&gt;
        if comment then&lt;br /&gt;
            text:tag(&#039;div&#039;)&lt;br /&gt;
                :addClass(&#039;mbox__content__text__comment&#039;)&lt;br /&gt;
                :wikitext(comment)&lt;br /&gt;
        end&lt;br /&gt;
    end&lt;br /&gt;
&lt;br /&gt;
    contentwrapper:tag(&#039;span&#039;)&lt;br /&gt;
        :addClass(&#039;mbox__close&#039;)&lt;br /&gt;
        :addClass(&#039;mw-customtoggle-&#039; .. id)&lt;br /&gt;
        :attr(&#039;title&#039;, i18n:msg(&#039;dismiss&#039;))&lt;br /&gt;
&lt;br /&gt;
    local asidearg = i18n:parameter(&#039;aside&#039;, args)&lt;br /&gt;
    if asidearg then&lt;br /&gt;
        local aside = content:tag(&#039;div&#039;)&lt;br /&gt;
            :addClass(&#039;mbox__content__aside&#039;)&lt;br /&gt;
            :addClass(&#039;mw-collapsible&#039;)&lt;br /&gt;
            :attr(&#039;id&#039;, &#039;mw-customcollapsible-&#039; .. id)&lt;br /&gt;
            :wikitext(asidearg)&lt;br /&gt;
            if collapsed then&lt;br /&gt;
                aside:addClass(&#039;mw-collapsed&#039;)&lt;br /&gt;
            end&lt;br /&gt;
    end&lt;br /&gt;
&lt;br /&gt;
    return container&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
return Mbox&lt;/div&gt;</summary>
		<author><name>WikiAdmin</name></author>
	</entry>
	<entry>
		<id>https://unimage.wcnm.pw/index.php?title=%E6%A8%A1%E5%9D%97:Dev/I18n&amp;diff=710</id>
		<title>模块:Dev/I18n</title>
		<link rel="alternate" type="text/html" href="https://unimage.wcnm.pw/index.php?title=%E6%A8%A1%E5%9D%97:Dev/I18n&amp;diff=710"/>
		<updated>2026-08-31T12:54:45Z</updated>

		<summary type="html">&lt;p&gt;WikiAdmin：​从 Fandom Developer Wiki 本地化全局模块，源修订 213110&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;-- 来源：https://dev.fandom.com/wiki/Module%3AI18n&lt;br /&gt;
-- 许可：CC BY-SA，作者与修订记录见来源页面&lt;br /&gt;
--- I18n library for message storage in Lua datastore collections.&lt;br /&gt;
--  The module is designed to enable message separation from modules &amp;amp;&lt;br /&gt;
--  templates. It has support for handling language fallbacks. This&lt;br /&gt;
--  module is a Lua port of [[I18n-js]] and i18n modules that can be loaded&lt;br /&gt;
--  by it are editable through [[I18nEdit]].&lt;br /&gt;
--  &lt;br /&gt;
--  @module         i18n&lt;br /&gt;
--  @version        1.5.0&lt;br /&gt;
--  @require        Module:Entrypoint&lt;br /&gt;
--  @require        Module:Fallbacklist&lt;br /&gt;
--  @author         [[User:KockaAdmiralac|KockaAdmiralac]]&lt;br /&gt;
--  @author         [[User:Speedit|Speedit]]&lt;br /&gt;
--  @attribution    [[User:Cqm|Cqm]]&lt;br /&gt;
--  @release        stable&lt;br /&gt;
--  @see            [[I18n|I18n guide]]&lt;br /&gt;
--  @see            [[I18n-js]]&lt;br /&gt;
--  @see            [[I18nEdit]]&lt;br /&gt;
--  &amp;lt;nowiki&amp;gt;&lt;br /&gt;
local i18n, _i18n = {}, {}&lt;br /&gt;
&lt;br /&gt;
--  Module variables &amp;amp; dependencies.&lt;br /&gt;
local title = mw.title.getCurrentTitle()&lt;br /&gt;
local fallbacks = require(&#039;Module:Dev/Fallbacklist&#039;)&lt;br /&gt;
local entrypoint = require(&#039;Module:Dev/Entrypoint&#039;)&lt;br /&gt;
local uselang&lt;br /&gt;
&lt;br /&gt;
--- Argument substitution as $n where n &amp;gt; 0.&lt;br /&gt;
--  @function           _i18n.handleArgs&lt;br /&gt;
--  @param              {string} msg Message to substitute arguments into.&lt;br /&gt;
--  @param              {table} args Arguments table to substitute.&lt;br /&gt;
--  @return             {string} Resulting message.&lt;br /&gt;
--  @local&lt;br /&gt;
function _i18n.handleArgs(msg, args)&lt;br /&gt;
    for i, a in ipairs(args) do&lt;br /&gt;
        msg = (string.gsub(msg, &#039;%$&#039; .. tostring(i), tostring(a)))&lt;br /&gt;
    end&lt;br /&gt;
    return msg&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
--- Checks whether a language code is valid.&lt;br /&gt;
--  @function           _i18n.isValidCode&lt;br /&gt;
--  @param              {string} code Language code to check.&lt;br /&gt;
--  @return             {boolean} Whether the language code is valid.&lt;br /&gt;
--  @local&lt;br /&gt;
function _i18n.isValidCode(code)&lt;br /&gt;
    return type(code) == &#039;string&#039; and #mw.language.fetchLanguageName(code) ~= 0&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
--- Checks whether a message contains unprocessed wikitext.&lt;br /&gt;
--  Used to optimise message getter by not preprocessing pure text.&lt;br /&gt;
--  @function           _i18n.isWikitext&lt;br /&gt;
--  @param              {string} msg Message to check.&lt;br /&gt;
--  @return             {boolean} Whether the message contains wikitext.&lt;br /&gt;
function _i18n.isWikitext(msg)&lt;br /&gt;
    return&lt;br /&gt;
        type(msg) == &#039;string&#039; and&lt;br /&gt;
        (&lt;br /&gt;
            msg:find(&#039;%-%-%-%-&#039;) or&lt;br /&gt;
            msg:find(&#039;%f[^\n%z][;:*#] &#039;) or&lt;br /&gt;
            msg:find(&#039;%f[^\n%z]==* *[^\n|]+ =*=%f[\n]&#039;) or&lt;br /&gt;
            msg:find(&#039;%b&amp;lt;&amp;gt;&#039;) or msg:find(&#039;\&#039;\&#039;&#039;) or&lt;br /&gt;
            msg:find(&#039;%[%b[]%]&#039;) or msg:find(&#039;{%b{}}&#039;)&lt;br /&gt;
        )&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
--- I18n datastore class.&lt;br /&gt;
--  This is used to control language translation and access to individual&lt;br /&gt;
--  messages. The datastore instance provides language and message&lt;br /&gt;
--  getter-setter methods, which can be used to internationalize Lua modules.&lt;br /&gt;
--  The language methods (any ending in `Lang`) are all **chainable**.&lt;br /&gt;
--  @type            Data&lt;br /&gt;
local Data = {}&lt;br /&gt;
Data.__index = Data&lt;br /&gt;
&lt;br /&gt;
--- Gets data message utility.&lt;br /&gt;
--  This method returns localized messages from the datastore corresponding&lt;br /&gt;
--  to a `key`. These messages may have `$n` parameters, which can be&lt;br /&gt;
--  replaced by optional argument strings supplied by the `msg` call.&lt;br /&gt;
--  &lt;br /&gt;
--  This function supports [[Lua reference manual#named_arguments|named&lt;br /&gt;
--  arguments]]. The named argument syntax is more versatile despite its&lt;br /&gt;
--  verbosity; it can be used to select message language &amp;amp; source(s).&lt;br /&gt;
--  @function           Data:msg&lt;br /&gt;
&lt;br /&gt;
--  @usage&lt;br /&gt;
--  &lt;br /&gt;
--      ds:msg{&lt;br /&gt;
--          key = &#039;message-name&#039;,&lt;br /&gt;
--          lang = &#039;&#039;,&lt;br /&gt;
--          args = {...},&lt;br /&gt;
--          sources = {}&lt;br /&gt;
--      }&lt;br /&gt;
--  &lt;br /&gt;
--  @usage&lt;br /&gt;
--  &lt;br /&gt;
--      ds:msg(&#039;message-name&#039;, ...)&lt;br /&gt;
--  &lt;br /&gt;
--  @param              {string|table} opts Message configuration or key.&lt;br /&gt;
--  @param[opt]         {string} opts.key Message key to return from the&lt;br /&gt;
--                      datastore.&lt;br /&gt;
--  @param[opt]         {table} opts.args Arguments to substitute into the&lt;br /&gt;
--                      message (`$n`).&lt;br /&gt;
--  @param[opt]         {table} opts.sources Source names to limit to (see&lt;br /&gt;
--                      `Data:fromSources`).&lt;br /&gt;
--  @param[opt]         {table} opts.lang Temporary language to use (see&lt;br /&gt;
--                      `Data:inLang`).&lt;br /&gt;
--  @param[opt]         {string} ... Arguments to substitute into the message&lt;br /&gt;
--                      (`$n`).&lt;br /&gt;
--  @error[115]         {string} &#039;missing arguments in Data:msg&#039;&lt;br /&gt;
--  @return             {string} Localised datastore message or `&#039;&amp;lt;key&amp;gt;&#039;`.&lt;br /&gt;
function Data:msg(opts, ...)&lt;br /&gt;
    local frame = mw.getCurrentFrame()&lt;br /&gt;
    -- Argument normalization.&lt;br /&gt;
    if not self or not opts then&lt;br /&gt;
        error(&#039;missing arguments in Data:msg&#039;)&lt;br /&gt;
    end&lt;br /&gt;
    local key = type(opts) == &#039;table&#039; and opts.key or opts&lt;br /&gt;
    local args = opts.args or {...}&lt;br /&gt;
    -- Configuration parameters.&lt;br /&gt;
    if opts.sources then&lt;br /&gt;
        self:fromSources(unpack(opts.sources))&lt;br /&gt;
    end&lt;br /&gt;
    if opts.lang then&lt;br /&gt;
        self:inLang(opts.lang)&lt;br /&gt;
    end&lt;br /&gt;
    -- Source handling.&lt;br /&gt;
    local source_n = self.tempSources or self._sources&lt;br /&gt;
    local source_i = {}&lt;br /&gt;
    for n, i in pairs(source_n) do&lt;br /&gt;
        source_i[i] = n&lt;br /&gt;
    end&lt;br /&gt;
    self.tempSources = nil&lt;br /&gt;
    -- Language handling.&lt;br /&gt;
    local lang = self.tempLang or self.defaultLang&lt;br /&gt;
    self.tempLang = nil&lt;br /&gt;
    -- Language converter handling&lt;br /&gt;
    -- Types: &#039;languageConverterMarkup&#039;, &#039;pageSourceCodeLanguage&#039;,&lt;br /&gt;
    --   &#039;siteLanguage&#039;, &#039;userLanguage&#039;&lt;br /&gt;
    -- Note: Currently cannot handle page view language without using&lt;br /&gt;
    --   &#039;languageConverterMarkup&#039;, should use &#039;userLanguage&#039; in most cases if&lt;br /&gt;
    --   not able to use &#039;languageConverterMarkup&#039;.&lt;br /&gt;
    local languageConversionType = self.tempLanguageConversionType or&lt;br /&gt;
    	&#039;languageConverterMarkup&#039;&lt;br /&gt;
    self.tempLangConversionType = &#039;languageConverterMarkup&#039;&lt;br /&gt;
    -- Message fetching.&lt;br /&gt;
    local msg&lt;br /&gt;
    for i, messages in ipairs(self._messages) do&lt;br /&gt;
        -- Message data.&lt;br /&gt;
        local msg = nil&lt;br /&gt;
        -- Language converter support&lt;br /&gt;
        if lang == &#039;zh&#039; and&lt;br /&gt;
        	languageConversionType ~= &#039;pageSourceCodeLanguage&#039; and&lt;br /&gt;
        	languageConversionType ~= &#039;siteLanguage&#039; and&lt;br /&gt;
        	-- Lua error: too many expensive function calls.&lt;br /&gt;
        	-- (&lt;br /&gt;
        	--	mw.title.getCurrentTitle().pageLang:toBcp47Code() == &#039;zh&#039; or&lt;br /&gt;
        	--	(&lt;br /&gt;
        	--		-- Module namespace&lt;br /&gt;
        	-- 		mw.title.getCurrentTitle():inNamespace( 828 ) and&lt;br /&gt;
        			mw.language.getContentLanguage():toBcp47Code() == &#039;zh&#039;&lt;br /&gt;
    		--	)&lt;br /&gt;
        	-- )&lt;br /&gt;
        then&lt;br /&gt;
        	local userLang = ( i18n.getLang() or self.defaultLang )&lt;br /&gt;
        	local zh_hani = (messages[&#039;zh&#039;] or {})[key]&lt;br /&gt;
        	local zh_hans = (messages[&#039;zh-hans&#039;] or {})[key]&lt;br /&gt;
        	local zh_hant = (messages[&#039;zh-hant&#039;] or {})[key]&lt;br /&gt;
        	local zh_hant_hk = (messages[&#039;zh-hk&#039;] or {})[key]&lt;br /&gt;
&lt;br /&gt;
			if&lt;br /&gt;
				languageConversionType == &#039;userLanguage&#039;&lt;br /&gt;
			then&lt;br /&gt;
				if userLang == &#039;zh&#039; then&lt;br /&gt;
        			msg = zh_hani or zh_hans or zh_hant or zh_hant_hk&lt;br /&gt;
				elseif&lt;br /&gt;
					userLang == &#039;zh-hans&#039; or&lt;br /&gt;
					userLang == &#039;zh-cn&#039; or&lt;br /&gt;
					userLang == &#039;zh-my&#039; or&lt;br /&gt;
					userLang == &#039;zh-sg&#039;&lt;br /&gt;
				then&lt;br /&gt;
        			msg = zh_hans or zh_hani or zh_hant or zh_hant_hk&lt;br /&gt;
				elseif&lt;br /&gt;
					userLang == &#039;zh-hant&#039; or&lt;br /&gt;
					userLang == &#039;zh-tw&#039;&lt;br /&gt;
				then&lt;br /&gt;
        			msg = zh_hant or zh_hant_hk or zh_hani or zh_hans&lt;br /&gt;
				elseif&lt;br /&gt;
					userLang == &#039;zh-hk&#039; or&lt;br /&gt;
					userLang == &#039;zh-mo&#039;&lt;br /&gt;
				then&lt;br /&gt;
        			msg = zh_hant_hk or zh_hant or zh_hani or zh_hans&lt;br /&gt;
        		end&lt;br /&gt;
        	elseif zh_hans ~= nil then&lt;br /&gt;
        		if zh_hant ~= nil then&lt;br /&gt;
    				msg = &#039;-{&#039; ..&lt;br /&gt;
    					&#039;zh-hans:&#039; .. zh_hans .. &#039;;&#039; ..&lt;br /&gt;
    					&#039; zh-hant:&#039; .. zh_hant .. &#039;;&#039;&lt;br /&gt;
&lt;br /&gt;
    				if zh_hant_hk ~= nil then&lt;br /&gt;
    					msg = msg ..&lt;br /&gt;
    						&#039; zh-hk:&#039; .. zh_hant_hk .. &#039;;&#039;&lt;br /&gt;
    				end&lt;br /&gt;
&lt;br /&gt;
    				msg = msg .. &#039;}-&#039;&lt;br /&gt;
        		elseif zh_hant_hk ~= nil then&lt;br /&gt;
        			msg = &#039;-{&#039; ..&lt;br /&gt;
        				&#039;zh-hans:&#039; .. zh_hans .. &#039;;&#039; ..&lt;br /&gt;
        				&#039; zh-hk:&#039; .. zh_hant_hk .. &#039;;&#039; ..&lt;br /&gt;
        				&#039;}-&#039;&lt;br /&gt;
        		else&lt;br /&gt;
        			msg = zh_hans&lt;br /&gt;
        		end&lt;br /&gt;
        	elseif zh_hant ~= nil then&lt;br /&gt;
        		if zh_hant_hk ~= nil then&lt;br /&gt;
        			msg = &#039;-{&#039; ..&lt;br /&gt;
        				&#039;zh-hant:&#039; .. zh_hant .. &#039;;&#039; ..&lt;br /&gt;
        				&#039; zh-hk:&#039; .. zh_hant_hk .. &#039;;&#039; ..&lt;br /&gt;
        				&#039;}-&#039;&lt;br /&gt;
        		else&lt;br /&gt;
        			msg = zh_hant&lt;br /&gt;
        		end&lt;br /&gt;
        	elseif zh_hant_hk ~= nil then&lt;br /&gt;
        		msg = zh_hant_hk&lt;br /&gt;
        	end&lt;br /&gt;
        end&lt;br /&gt;
&lt;br /&gt;
        if msg == nil then&lt;br /&gt;
        	msg = (messages[lang] or {})[key]&lt;br /&gt;
        end&lt;br /&gt;
        -- Fallback support (experimental).&lt;br /&gt;
        for _, l in ipairs((fallbacks[lang] or {})) do&lt;br /&gt;
            if msg == nil then&lt;br /&gt;
                msg = (messages[l] or {})[key]&lt;br /&gt;
            end&lt;br /&gt;
        end&lt;br /&gt;
        -- Internal fallback to &#039;en&#039;.&lt;br /&gt;
        msg = msg ~= nil and msg or messages.en[key]&lt;br /&gt;
        -- Handling argument substitution from Lua.&lt;br /&gt;
        if msg and source_i[i] and #args &amp;gt; 0 then&lt;br /&gt;
            msg = _i18n.handleArgs(msg, args)&lt;br /&gt;
        end&lt;br /&gt;
        if msg and source_i[i] and lang ~= &#039;qqx&#039; then&lt;br /&gt;
            return frame and _i18n.isWikitext(msg)&lt;br /&gt;
                and frame:preprocess(msg)&lt;br /&gt;
                or  mw.text.trim(msg, &#039;\r\n\f\v&#039;)&lt;br /&gt;
        end&lt;br /&gt;
    end&lt;br /&gt;
    return mw.text.nowiki(&#039;&amp;lt;&#039; .. key .. &#039;&amp;gt;&#039;)&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
--- Gets localised template parameter from a datastore.&lt;br /&gt;
--  This method, given a table of arguments, tries to find a parameter&#039;s&lt;br /&gt;
--  localized name in the datastore and returns its value, or nil if&lt;br /&gt;
--  not present.&lt;br /&gt;
--&lt;br /&gt;
--  This method always uses the wiki&#039;s content language.&lt;br /&gt;
--  @function           Data:parameter&lt;br /&gt;
--  @param              {string} parameter Parameter&#039;s key in the datastore&lt;br /&gt;
--  @param              {table} args Arguments to find the parameter in&lt;br /&gt;
--  @error[176]         {string} &#039;missing arguments in Data:parameter&#039;&lt;br /&gt;
--  @return             {string|nil} Parameter&#039;s value or nil if not present&lt;br /&gt;
function Data:parameter(key, args)&lt;br /&gt;
    -- Argument normalization.&lt;br /&gt;
    if not self or not key or not args then&lt;br /&gt;
        error(&#039;missing arguments in Data:parameter&#039;)&lt;br /&gt;
    end&lt;br /&gt;
    local contentLang = mw.language.getContentLanguage():getCode()&lt;br /&gt;
    -- Message fetching.&lt;br /&gt;
    for i, messages in ipairs(self._messages) do&lt;br /&gt;
        local msg = (messages[contentLang] or {})[key]&lt;br /&gt;
        if msg ~= nil and args[msg] ~= nil then&lt;br /&gt;
            return args[msg]&lt;br /&gt;
        end&lt;br /&gt;
        for _, l in ipairs((fallbacks[contentLang] or {})) do&lt;br /&gt;
            if msg == nil or args[msg] == nil then&lt;br /&gt;
                -- Check next fallback.&lt;br /&gt;
                msg = (messages[l] or {})[key]&lt;br /&gt;
            else&lt;br /&gt;
                -- A localized message was found.&lt;br /&gt;
                return args[msg]&lt;br /&gt;
            end&lt;br /&gt;
        end&lt;br /&gt;
        -- Fallback to English.&lt;br /&gt;
        msg = messages.en[key]&lt;br /&gt;
        if msg ~= nil and args[msg] ~= nil then&lt;br /&gt;
            return args[msg]&lt;br /&gt;
        end&lt;br /&gt;
    end&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
--- Sets temporary source to a specificed subset of datastores.&lt;br /&gt;
--  By default, messages are fetched from the datastore in the same&lt;br /&gt;
--  order of priority as `i18n.loadMessages`.&lt;br /&gt;
--  @function           Data:fromSource&lt;br /&gt;
--  @param              {string} ... Source name(s) to use.&lt;br /&gt;
--  @return             {Data} Datastore instance.&lt;br /&gt;
function Data:fromSource(...)&lt;br /&gt;
    local c = select(&#039;#&#039;, ...)&lt;br /&gt;
    if c ~= 0 then&lt;br /&gt;
        self.tempSources = {}&lt;br /&gt;
        for i = 1, c do&lt;br /&gt;
            local n = select(i, ...)&lt;br /&gt;
            if type(n) == &#039;string&#039; and type(self._sources[n]) == &#039;number&#039; then&lt;br /&gt;
                self.tempSources[n] = self._sources[n]&lt;br /&gt;
            end&lt;br /&gt;
        end&lt;br /&gt;
    end&lt;br /&gt;
    return self&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
--- Gets data default language.&lt;br /&gt;
--  @function           Data:getLang&lt;br /&gt;
--  @return             {string} Default language to serve datastore messages in.&lt;br /&gt;
function Data:getLang()&lt;br /&gt;
    return self.defaultLang&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
--- Sets data language to `wgUserLanguage`.&lt;br /&gt;
--  @function           Data:useUserLang&lt;br /&gt;
--  @return             {Data} Datastore instance.&lt;br /&gt;
--  @note               Scribunto only registers `wgUserLanguage` when an&lt;br /&gt;
--                      invocation is at the top of the call stack.&lt;br /&gt;
function Data:useUserLang()&lt;br /&gt;
    self.defaultLang = i18n.getLang() or self.defaultLang&lt;br /&gt;
    return self&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
--- Sets data language to `wgContentLanguage`.&lt;br /&gt;
--  @function           Data:useContentLang&lt;br /&gt;
--  @return             {Data} Datastore instance.&lt;br /&gt;
function Data:useContentLang()&lt;br /&gt;
    self.defaultLang = i18n.getContentLang()&lt;br /&gt;
    return self&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
--- Sets data language to specificed language.&lt;br /&gt;
--  @function           Data:useLang&lt;br /&gt;
--  @param              {string} code Language code to use.&lt;br /&gt;
--  @return             {Data} Datastore instance.&lt;br /&gt;
function Data:useLang(code)&lt;br /&gt;
    self.defaultLang = _i18n.isValidCode(code)&lt;br /&gt;
        and code&lt;br /&gt;
        or  self.defaultLang&lt;br /&gt;
    return self&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
--- Sets temporary data language to `wgUserLanguage`.&lt;br /&gt;
--  The data language reverts to the default language in the next&lt;br /&gt;
--  @{Data:msg} call.&lt;br /&gt;
--  @function           Data:inUserLang&lt;br /&gt;
--  @return             {Data} Datastore instance.&lt;br /&gt;
function Data:inUserLang()&lt;br /&gt;
    self.tempLang = i18n.getLang() or self.tempLang&lt;br /&gt;
    return self&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
--- Sets temporary data language to `wgContentLanguage`.&lt;br /&gt;
--  Only affects the next @{Data:msg} call.&lt;br /&gt;
--  @function           Data:inContentLang&lt;br /&gt;
--  @return             {Data} Datastore instance.&lt;br /&gt;
function Data:inContentLang()&lt;br /&gt;
    self.tempLang = i18n.getContentLang()&lt;br /&gt;
    return self&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
--- Sets temporary data language to a specificed language.&lt;br /&gt;
--  Only affects the next @{Data:msg} call.&lt;br /&gt;
--  @function           Data:inLang&lt;br /&gt;
--  @param              {string} code Language code to use.&lt;br /&gt;
--  @return             {Data} Datastore instance.&lt;br /&gt;
function Data:inLang(code)&lt;br /&gt;
    self.tempLang = _i18n.isValidCode(code)&lt;br /&gt;
        and code&lt;br /&gt;
        or  self.tempLang&lt;br /&gt;
    return self&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
--- Sets temporary data language to a specificed language conversion resolution.&lt;br /&gt;
--  Only affects the next @{Data:msg} call.&lt;br /&gt;
--  @function           Data:useLanguageConversionType&lt;br /&gt;
--  @param              {string} convType Language conversion type to use.&lt;br /&gt;
--  @return             {Data} Datastore instance.&lt;br /&gt;
function Data:useLanguageConversionType(convType)&lt;br /&gt;
    self.tempLanguageConversionType = convType&lt;br /&gt;
    return self&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
--  Package functions.&lt;br /&gt;
&lt;br /&gt;
--- Gets a localized message by data module key.&lt;br /&gt;
--  Can be used to fetch messages in a specific language code through `uselang`&lt;br /&gt;
--  parameter. Extra numbered parameters can be supplied for substitution into&lt;br /&gt;
--  the data collection&#039;s message.&lt;br /&gt;
--  @function           i18n.getMsg&lt;br /&gt;
--  @param              {table} frame Frame table from invocation.&lt;br /&gt;
--  @param              {table} frame.args Metatable containing arguments.&lt;br /&gt;
--  @param              {string} frame.args[1] ROOTPAGENAME of i18n submodule.&lt;br /&gt;
--  @param              {string} frame.args[2] Key of i18n message.&lt;br /&gt;
--  @param[opt]         {string} frame.args.lang Default language of message.&lt;br /&gt;
--  @error[271]         &#039;missing arguments in i18n.getMsg&#039;&lt;br /&gt;
--  @return             {string} I18n message in localised language.&lt;br /&gt;
--  @usage              {{i18n|getMsg|source|key|arg1|arg2|uselang {{=}} code}}&lt;br /&gt;
function i18n.getMsg(frame)&lt;br /&gt;
    if&lt;br /&gt;
        not frame or&lt;br /&gt;
        not frame.args or&lt;br /&gt;
        not frame.args[1] or&lt;br /&gt;
        not frame.args[2]&lt;br /&gt;
    then&lt;br /&gt;
        error(&#039;missing arguments in i18n.getMsg&#039;)&lt;br /&gt;
    end&lt;br /&gt;
    local source = frame.args[1]&lt;br /&gt;
    local key = frame.args[2]&lt;br /&gt;
    -- Pass through extra arguments.&lt;br /&gt;
    local repl = {}&lt;br /&gt;
    for i, a in ipairs(frame.args) do&lt;br /&gt;
        if i &amp;gt;= 3 then&lt;br /&gt;
            repl[i-2] = a&lt;br /&gt;
        end&lt;br /&gt;
    end&lt;br /&gt;
    -- Load message data.&lt;br /&gt;
    local ds = i18n.loadMessages(source)&lt;br /&gt;
    -- Pass through language argument.&lt;br /&gt;
    ds:inLang(frame.args.uselang)&lt;br /&gt;
    -- Return message.&lt;br /&gt;
    return ds:msg { key = key, args = repl }&lt;br /&gt;
end&lt;br /&gt;
 &lt;br /&gt;
--- I18n data loader for message collections.&lt;br /&gt;
--  @function           i18n.loadMessages&lt;br /&gt;
--  @param              {string} ... ROOTPAGENAME/path for target i18n&lt;br /&gt;
--                      submodules.&lt;br /&gt;
--  @error[322]         {string} &#039;no source supplied to i18n.loadMessages&#039;&lt;br /&gt;
--  @return             {table} I18n datastore instance.&lt;br /&gt;
--  @usage              require(&#039;Module:Dev/I18n&#039;).loadMessages(&#039;1&#039;, &#039;2&#039;)&lt;br /&gt;
function i18n.loadMessages(...)&lt;br /&gt;
    local ds&lt;br /&gt;
    local i = 0&lt;br /&gt;
    local s = {}&lt;br /&gt;
    for j = 1, select(&#039;#&#039;, ...) do&lt;br /&gt;
        local source = select(j, ...)&lt;br /&gt;
        if type(source) == &#039;string&#039; and source ~= &#039;&#039; then&lt;br /&gt;
            i = i + 1&lt;br /&gt;
            s[source] = i&lt;br /&gt;
            if not ds then&lt;br /&gt;
                -- Instantiate datastore.&lt;br /&gt;
                ds = {}&lt;br /&gt;
                ds._messages = {}&lt;br /&gt;
                -- Set default language.&lt;br /&gt;
                setmetatable(ds, Data)&lt;br /&gt;
                ds:useUserLang()&lt;br /&gt;
            end&lt;br /&gt;
            source = string.gsub(source, &#039;^.&#039;, mw.ustring.upper)&lt;br /&gt;
            source = mw.ustring.find(source, &#039;:&#039;)&lt;br /&gt;
                and source&lt;br /&gt;
                or  &#039;Module:Dev/&#039; .. source .. &#039;/i18n&#039;&lt;br /&gt;
            ds._messages[i] = mw.loadData(source)&lt;br /&gt;
        end&lt;br /&gt;
    end&lt;br /&gt;
    if not ds then&lt;br /&gt;
        error(&#039;no source supplied to i18n.loadMessages&#039;)&lt;br /&gt;
    else&lt;br /&gt;
        -- Attach source index map.&lt;br /&gt;
        ds._sources = s&lt;br /&gt;
        -- Return datastore instance.&lt;br /&gt;
        return ds&lt;br /&gt;
    end&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
--- Gets the language code of the wiki or page contents.&lt;br /&gt;
--  @function           i18n.getContentLang&lt;br /&gt;
--  @usage              {{i18n|getContentLang}}&lt;br /&gt;
--  @return             {string} Content language code.&lt;br /&gt;
function i18n.getContentLang()&lt;br /&gt;
    local code = mw.language.getContentLanguage():getCode()&lt;br /&gt;
    local subPage = title.subpageText&lt;br /&gt;
&lt;br /&gt;
    -- Subpage language test.&lt;br /&gt;
    if title.isSubpage and _i18n.isValidCode(subPage) then&lt;br /&gt;
        code = _i18n.isValidCode(subPage) and subPage or code&lt;br /&gt;
    end&lt;br /&gt;
    &lt;br /&gt;
    return code&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
--- Gets the language code of the content.&lt;br /&gt;
--  Can validate a template&#039;s language code through `uselang` parameter.&lt;br /&gt;
--  @function           i18n.getLang&lt;br /&gt;
--  @usage              {{i18n|getLang|uselang {{=}} code}}&lt;br /&gt;
--  @return             {string} Language code.&lt;br /&gt;
function i18n.getLang()&lt;br /&gt;
    local frame = mw.getCurrentFrame() or {}&lt;br /&gt;
    local parentFrame = frame.getParent and frame:getParent() or {}&lt;br /&gt;
&lt;br /&gt;
    local code = i18n.getContentLang()&lt;br /&gt;
&lt;br /&gt;
    -- Language argument test.&lt;br /&gt;
    local langOverride =&lt;br /&gt;
        (frame.args or {}).uselang or&lt;br /&gt;
        (parentFrame.args or {}).uselang&lt;br /&gt;
    if _i18n.isValidCode(langOverride) then&lt;br /&gt;
        code = langOverride&lt;br /&gt;
&lt;br /&gt;
    -- User language test.&lt;br /&gt;
    elseif parentFrame.preprocess or frame.preprocess then&lt;br /&gt;
        uselang = uselang&lt;br /&gt;
            or  parentFrame.preprocess&lt;br /&gt;
                and parentFrame:preprocess(&#039;{{int:lang}}&#039;)&lt;br /&gt;
                or  frame:preprocess(&#039;{{int:lang}}&#039;)&lt;br /&gt;
        local decodedLang = mw.text.decode(uselang) &lt;br /&gt;
        if decodedLang ~= &#039;&amp;lt;lang&amp;gt;&#039; and decodedLang ~= &#039;⧼lang⧽&#039; then&lt;br /&gt;
            code = decodedLang == &#039;(lang)&#039;&lt;br /&gt;
                and &#039;qqx&#039;&lt;br /&gt;
                or  uselang&lt;br /&gt;
        end&lt;br /&gt;
    end&lt;br /&gt;
&lt;br /&gt;
    return code&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
--- Template wrapper for [[Template:I18n]].&lt;br /&gt;
--  @function           i18n.main&lt;br /&gt;
--  @param              {table} frame Frame invocation object.&lt;br /&gt;
--  @return             {string} Module output in template context.&lt;br /&gt;
--  @usage              {{#invoke:i18n|main}}&lt;br /&gt;
i18n.main = entrypoint(i18n)&lt;br /&gt;
&lt;br /&gt;
return i18n&lt;br /&gt;
-- &amp;lt;/nowiki&amp;gt;&lt;/div&gt;</summary>
		<author><name>WikiAdmin</name></author>
	</entry>
	<entry>
		<id>https://unimage.wcnm.pw/index.php?title=%E6%A8%A1%E5%9D%97:Dev/Hatnote/i18n&amp;diff=709</id>
		<title>模块:Dev/Hatnote/i18n</title>
		<link rel="alternate" type="text/html" href="https://unimage.wcnm.pw/index.php?title=%E6%A8%A1%E5%9D%97:Dev/Hatnote/i18n&amp;diff=709"/>
		<updated>2026-08-31T12:54:43Z</updated>

		<summary type="html">&lt;p&gt;WikiAdmin：​从 Fandom Developer Wiki 本地化全局模块，源修订 214552&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;-- 来源：https://dev.fandom.com/wiki/Module%3AHatnote/i18n&lt;br /&gt;
-- 许可：CC BY-SA，作者与修订记录见来源页面&lt;br /&gt;
-- &amp;lt;nowiki&amp;gt;&lt;br /&gt;
return {&lt;br /&gt;
    [&amp;quot;_metadata&amp;quot;] = {&lt;br /&gt;
        [&amp;quot;order&amp;quot;] = {&lt;br /&gt;
            &amp;quot;about&amp;quot;,&lt;br /&gt;
            &amp;quot;altSeparator&amp;quot;,&lt;br /&gt;
            &amp;quot;article&amp;quot;,&lt;br /&gt;
            &amp;quot;brackets&amp;quot;,&lt;br /&gt;
            &amp;quot;cat-errors&amp;quot;,&lt;br /&gt;
            &amp;quot;cat-unusual-parameters&amp;quot;,&lt;br /&gt;
            &amp;quot;colon&amp;quot;,&lt;br /&gt;
            &amp;quot;conj-and&amp;quot;,&lt;br /&gt;
            &amp;quot;conj-or&amp;quot;,&lt;br /&gt;
            &amp;quot;conjunction&amp;quot;,&lt;br /&gt;
            &amp;quot;details&amp;quot;,&lt;br /&gt;
            &amp;quot;disambiguation&amp;quot;,&lt;br /&gt;
            &amp;quot;error&amp;quot;,&lt;br /&gt;
            &amp;quot;error-link&amp;quot;,&lt;br /&gt;
            &amp;quot;error-pagename&amp;quot;,&lt;br /&gt;
            &amp;quot;error-text&amp;quot;,&lt;br /&gt;
            &amp;quot;for&amp;quot;,&lt;br /&gt;
            &amp;quot;further&amp;quot;,&lt;br /&gt;
            &amp;quot;further2&amp;quot;,&lt;br /&gt;
            &amp;quot;help&amp;quot;,&lt;br /&gt;
            &amp;quot;main&amp;quot;,&lt;br /&gt;
            &amp;quot;main-category&amp;quot;,&lt;br /&gt;
            &amp;quot;other-uses&amp;quot;,&lt;br /&gt;
            &amp;quot;page&amp;quot;,&lt;br /&gt;
            &amp;quot;pagetype-0&amp;quot;,&lt;br /&gt;
            &amp;quot;pagetype-14&amp;quot;,&lt;br /&gt;
            &amp;quot;section&amp;quot;,&lt;br /&gt;
            &amp;quot;see-also&amp;quot;,&lt;br /&gt;
            &amp;quot;see-also2&amp;quot;,&lt;br /&gt;
            &amp;quot;separator&amp;quot;,&lt;br /&gt;
            &amp;quot;similar-terms&amp;quot;,&lt;br /&gt;
            &amp;quot;space&amp;quot;,&lt;br /&gt;
            &amp;quot;topic&amp;quot;&lt;br /&gt;
        }&lt;br /&gt;
    },&lt;br /&gt;
    [&amp;quot;en&amp;quot;] = {&lt;br /&gt;
        [&amp;quot;about&amp;quot;] = &amp;quot;This %s is about %s. &amp;quot;,&lt;br /&gt;
        [&amp;quot;altSeparator&amp;quot;] = &amp;quot;;&amp;quot;,&lt;br /&gt;
        [&amp;quot;article&amp;quot;] = &amp;quot;article&amp;quot;,&lt;br /&gt;
        [&amp;quot;brackets&amp;quot;] = &amp;quot;%s (%s)&amp;quot;,&lt;br /&gt;
        [&amp;quot;cat-errors&amp;quot;] = &amp;quot;Hatnote templates with errors&amp;quot;,&lt;br /&gt;
        [&amp;quot;cat-unusual-parameters&amp;quot;] = &amp;quot;Hatnote templates using unusual parameters&amp;quot;,&lt;br /&gt;
        [&amp;quot;colon&amp;quot;] = &amp;quot;%s: %s&amp;quot;,&lt;br /&gt;
        [&amp;quot;conj-and&amp;quot;] = &amp;quot;and&amp;quot;,&lt;br /&gt;
        [&amp;quot;conj-or&amp;quot;] = &amp;quot;or&amp;quot;,&lt;br /&gt;
        [&amp;quot;conjunction&amp;quot;] = &amp;quot;and&amp;quot;,&lt;br /&gt;
        [&amp;quot;details&amp;quot;] = &amp;quot;For more details on %s, see %s.&amp;quot;,&lt;br /&gt;
        [&amp;quot;disambiguation&amp;quot;] = &amp;quot;disambiguation&amp;quot;,&lt;br /&gt;
        [&amp;quot;error&amp;quot;] = &amp;quot;&amp;lt;strong class=&#039;error&#039;&amp;gt;Error: %s%s.&amp;lt;/strong&amp;gt;%s&amp;quot;,&lt;br /&gt;
        [&amp;quot;error-link&amp;quot;] = &amp;quot;no link specified&amp;quot;,&lt;br /&gt;
        [&amp;quot;error-pagename&amp;quot;] = &amp;quot;no {{plural:$1|page name|page names}} specified&amp;quot;,&lt;br /&gt;
        [&amp;quot;error-text&amp;quot;] = &amp;quot;no text specified&amp;quot;,&lt;br /&gt;
        [&amp;quot;for&amp;quot;] = &amp;quot;For %s, see %s.&amp;quot;,&lt;br /&gt;
        [&amp;quot;further&amp;quot;] = &amp;quot;Further information&amp;quot;,&lt;br /&gt;
        [&amp;quot;further2&amp;quot;] = &amp;quot;Further information:&amp;amp;#32;&amp;quot;,&lt;br /&gt;
        [&amp;quot;help&amp;quot;] = &amp;quot;help&amp;quot;,&lt;br /&gt;
        [&amp;quot;main&amp;quot;] = &amp;quot;{{plural:$1|Main %s: %s|Main %ss: %s}}&amp;quot;,&lt;br /&gt;
        [&amp;quot;main-category&amp;quot;] = &amp;quot;{{plural:$1|The main %s for this category is %s|The main %ss for this category are %s}}&amp;quot;,&lt;br /&gt;
        [&amp;quot;other-uses&amp;quot;] = &amp;quot;other uses&amp;quot;,&lt;br /&gt;
        [&amp;quot;page&amp;quot;] = &amp;quot;page&amp;quot;,&lt;br /&gt;
        [&amp;quot;pagetype-0&amp;quot;] = &amp;quot;article&amp;quot;,&lt;br /&gt;
        [&amp;quot;pagetype-14&amp;quot;] = &amp;quot;category&amp;quot;,&lt;br /&gt;
        [&amp;quot;section&amp;quot;] = &amp;quot;section&amp;quot;,&lt;br /&gt;
        [&amp;quot;see-also&amp;quot;] = &amp;quot;See also&amp;quot;,&lt;br /&gt;
        [&amp;quot;see-also2&amp;quot;] = &amp;quot;See also: %s&amp;quot;,&lt;br /&gt;
        [&amp;quot;separator&amp;quot;] = &amp;quot;,&amp;quot;,&lt;br /&gt;
        [&amp;quot;similar-terms&amp;quot;] = &amp;quot;similar terms&amp;quot;,&lt;br /&gt;
        [&amp;quot;space&amp;quot;] = &amp;quot;&amp;amp;#32;&amp;quot;,&lt;br /&gt;
        [&amp;quot;topic&amp;quot;] = &amp;quot;this topic&amp;quot;&lt;br /&gt;
    },&lt;br /&gt;
    [&amp;quot;be&amp;quot;] = {&lt;br /&gt;
        [&amp;quot;conj-or&amp;quot;] = &amp;quot;або&amp;quot;,&lt;br /&gt;
        [&amp;quot;disambiguation&amp;quot;] = &amp;quot;неадназначнасць&amp;quot;,&lt;br /&gt;
        [&amp;quot;for&amp;quot;] = &amp;quot;Калі вы шукаеце %s, глядзіце %s.&amp;quot;,&lt;br /&gt;
        [&amp;quot;main&amp;quot;] = &amp;quot;{{plural:$1|Асноўны артыкул|Асноўныя артыкулы}}&amp;quot;,&lt;br /&gt;
        [&amp;quot;other-uses&amp;quot;] = &amp;quot;іншых мэт&amp;quot;,&lt;br /&gt;
        [&amp;quot;see-also&amp;quot;] = &amp;quot;Гл. таксама&amp;quot;,&lt;br /&gt;
        [&amp;quot;see-also2&amp;quot;] = &amp;quot;Гл. таксама: %s&amp;quot;&lt;br /&gt;
    },&lt;br /&gt;
    [&amp;quot;bn&amp;quot;] = {&lt;br /&gt;
        [&amp;quot;about&amp;quot;] = &amp;quot;এই %s %sটির জন্যে&amp;quot;,&lt;br /&gt;
        [&amp;quot;altSeparator&amp;quot;] = &amp;quot;;&amp;quot;,&lt;br /&gt;
        [&amp;quot;article&amp;quot;] = &amp;quot;আর্টিকেল&amp;quot;,&lt;br /&gt;
        [&amp;quot;brackets&amp;quot;] = &amp;quot;%s (%s)&amp;quot;,&lt;br /&gt;
        [&amp;quot;cat-errors&amp;quot;] = &amp;quot;ত্রুটি থাকা হেট্নোট টেম্পলেট&amp;quot;,&lt;br /&gt;
        [&amp;quot;cat-unusual-parameters&amp;quot;] = &amp;quot;অস্বাভাবিক প্যারামিটার থাকা হেট্নোট টেম্পলেট&amp;quot;,&lt;br /&gt;
        [&amp;quot;colon&amp;quot;] = &amp;quot;%s: %s&amp;quot;,&lt;br /&gt;
        [&amp;quot;conj-and&amp;quot;] = &amp;quot;আর&amp;quot;,&lt;br /&gt;
        [&amp;quot;conj-or&amp;quot;] = &amp;quot;বা&amp;quot;,&lt;br /&gt;
        [&amp;quot;conjunction&amp;quot;] = &amp;quot;আর&amp;quot;,&lt;br /&gt;
        [&amp;quot;details&amp;quot;] = &amp;quot;%sের সম্বন্ধে আরও তথ্যের জন্যে, %s দেখুন।&amp;quot;,&lt;br /&gt;
        [&amp;quot;disambiguation&amp;quot;] = &amp;quot;ডিসঅম্বিগাশন&amp;quot;,&lt;br /&gt;
        [&amp;quot;error&amp;quot;] = &amp;quot;&amp;lt;strong class=&#039;error&#039;&amp;gt;ত্রুটি: %s%s.&amp;lt;/strong&amp;gt;%s&amp;quot;,&lt;br /&gt;
        [&amp;quot;error-link&amp;quot;] = &amp;quot;কোনও লিংক দেওয়া হয় নেই&amp;quot;,&lt;br /&gt;
        [&amp;quot;error-pagename&amp;quot;] = &amp;quot;কোনও পৃষ্ঠের নাম দেওয়া হয় নেই&amp;quot;,&lt;br /&gt;
        [&amp;quot;error-text&amp;quot;] = &amp;quot;কোনও টেক্সট দেওয়া হয় নেই&amp;quot;,&lt;br /&gt;
        [&amp;quot;for&amp;quot;] = &amp;quot;%sতীর জন্যে, %s দেখুন।&amp;quot;,&lt;br /&gt;
        [&amp;quot;further&amp;quot;] = &amp;quot;আরও তথ্য&amp;quot;,&lt;br /&gt;
        [&amp;quot;further2&amp;quot;] = &amp;quot;আরও তথ্য:&amp;amp;#32;&amp;quot;,&lt;br /&gt;
        [&amp;quot;help&amp;quot;] = &amp;quot;সাহায্য&amp;quot;,&lt;br /&gt;
        [&amp;quot;main&amp;quot;] = &amp;quot;{{plural:$1|মুখ্য %s: %s|মুখ্য %ss: %s}}&amp;quot;,&lt;br /&gt;
        [&amp;quot;main-category&amp;quot;] = &amp;quot;{{plural:$1|এই শ্রেণীর মুখ্য %s %s|এই শ্রেণীর মুখ্য %ssগুলো %s}}&amp;quot;,&lt;br /&gt;
        [&amp;quot;other-uses&amp;quot;] = &amp;quot;আরও ব্যাবহার&amp;quot;,&lt;br /&gt;
        [&amp;quot;page&amp;quot;] = &amp;quot;পৃষ্ঠ&amp;quot;,&lt;br /&gt;
        [&amp;quot;pagetype-0&amp;quot;] = &amp;quot;আর্টিকেল&amp;quot;,&lt;br /&gt;
        [&amp;quot;pagetype-14&amp;quot;] = &amp;quot;শ্রেণী&amp;quot;,&lt;br /&gt;
        [&amp;quot;section&amp;quot;] = &amp;quot;সেকশন&amp;quot;,&lt;br /&gt;
        [&amp;quot;see-also&amp;quot;] = &amp;quot;আরও দেখুন&amp;quot;,&lt;br /&gt;
        [&amp;quot;see-also2&amp;quot;] = &amp;quot;আরও দেখুন: %s&amp;quot;,&lt;br /&gt;
        [&amp;quot;separator&amp;quot;] = &amp;quot;,&amp;quot;,&lt;br /&gt;
        [&amp;quot;similar-terms&amp;quot;] = &amp;quot;অনুরূপ টার্ম&amp;quot;,&lt;br /&gt;
        [&amp;quot;space&amp;quot;] = &amp;quot;&amp;amp;#32;&amp;quot;,&lt;br /&gt;
        [&amp;quot;topic&amp;quot;] = &amp;quot;এই বিষয়টি&amp;quot;&lt;br /&gt;
    },&lt;br /&gt;
    [&amp;quot;da&amp;quot;] = {&lt;br /&gt;
        [&amp;quot;about&amp;quot;] = &amp;quot;Denne %s er om %s.&amp;quot;,&lt;br /&gt;
        [&amp;quot;altSeparator&amp;quot;] = &amp;quot;;&amp;quot;,&lt;br /&gt;
        [&amp;quot;article&amp;quot;] = &amp;quot; {{plural:$1|artikel|artikl}} &amp;quot;,&lt;br /&gt;
        [&amp;quot;brackets&amp;quot;] = &amp;quot;%s (%s)&amp;quot;,&lt;br /&gt;
        [&amp;quot;cat-errors&amp;quot;] = &amp;quot;Hatnote-skabeloner med fejl&amp;quot;,&lt;br /&gt;
        [&amp;quot;cat-unusual-parameters&amp;quot;] = &amp;quot;Hatnoteskabeloner, som bruger usædvanlige parametre&amp;quot;,&lt;br /&gt;
        [&amp;quot;colon&amp;quot;] = &amp;quot;%s: %s&amp;quot;,&lt;br /&gt;
        [&amp;quot;conj-and&amp;quot;] = &amp;quot;og&amp;quot;,&lt;br /&gt;
        [&amp;quot;conj-or&amp;quot;] = &amp;quot;eller&amp;quot;,&lt;br /&gt;
        [&amp;quot;conjunction&amp;quot;] = &amp;quot;og&amp;quot;,&lt;br /&gt;
        [&amp;quot;details&amp;quot;] = &amp;quot;For mere information om %s, se %s.&amp;quot;,&lt;br /&gt;
        [&amp;quot;disambiguation&amp;quot;] = &amp;quot;flertydig&amp;quot;,&lt;br /&gt;
        [&amp;quot;error&amp;quot;] = &amp;quot;&amp;lt;strong class=&#039;error&#039;&amp;gt;Fejl: %s%s.&amp;lt;/strong&amp;gt;%s&amp;quot;,&lt;br /&gt;
        [&amp;quot;error-link&amp;quot;] = &amp;quot;intet link angivet&amp;quot;,&lt;br /&gt;
        [&amp;quot;error-pagename&amp;quot;] = &amp;quot;ingen {{plural:$1|sidenavn|sidenavne}} angivet&amp;quot;,&lt;br /&gt;
        [&amp;quot;error-text&amp;quot;] = &amp;quot;ingen tekst angivet&amp;quot;,&lt;br /&gt;
        [&amp;quot;for&amp;quot;] = &amp;quot;For %s, se %s.&amp;quot;,&lt;br /&gt;
        [&amp;quot;further&amp;quot;] = &amp;quot;Yderligere information&amp;quot;,&lt;br /&gt;
        [&amp;quot;further2&amp;quot;] = &amp;quot;Yderligere information:&amp;amp;#32;&amp;quot;,&lt;br /&gt;
        [&amp;quot;help&amp;quot;] = &amp;quot;hjælp&amp;quot;,&lt;br /&gt;
        [&amp;quot;main&amp;quot;] = &amp;quot;{{plural:$1|Hoved%s: %s|Hoved%ser: %s}}&amp;quot;,&lt;br /&gt;
        [&amp;quot;main-category&amp;quot;] = &amp;quot;{{plural:$1|Hoved%s for denne kategori er %s|Hoved%serne for denne kategori er %s}}&amp;quot;,&lt;br /&gt;
        [&amp;quot;other-uses&amp;quot;] = &amp;quot;andre betydninger&amp;quot;,&lt;br /&gt;
        [&amp;quot;page&amp;quot;] = &amp;quot;side&amp;quot;,&lt;br /&gt;
        [&amp;quot;pagetype-0&amp;quot;] = &amp;quot;artikel&amp;quot;,&lt;br /&gt;
        [&amp;quot;pagetype-14&amp;quot;] = &amp;quot;kategori&amp;quot;,&lt;br /&gt;
        [&amp;quot;section&amp;quot;] = &amp;quot;sektion&amp;quot;,&lt;br /&gt;
        [&amp;quot;see-also&amp;quot;] = &amp;quot;Se også&amp;quot;,&lt;br /&gt;
        [&amp;quot;see-also2&amp;quot;] = &amp;quot;Se også: %s&amp;quot;,&lt;br /&gt;
        [&amp;quot;separator&amp;quot;] = &amp;quot;,&amp;quot;,&lt;br /&gt;
        [&amp;quot;similar-terms&amp;quot;] = &amp;quot;lignende betydninger&amp;quot;,&lt;br /&gt;
        [&amp;quot;space&amp;quot;] = &amp;quot;&amp;amp;#32;&amp;quot;,&lt;br /&gt;
        [&amp;quot;topic&amp;quot;] = &amp;quot;dette emne&amp;quot;&lt;br /&gt;
    },&lt;br /&gt;
    [&amp;quot;de&amp;quot;] = {&lt;br /&gt;
        [&amp;quot;about&amp;quot;] = &amp;quot;{{#switch:$1|0=In diesem|14=In dieser|Auf dieser}} %s geht es um %s. &amp;quot;,&lt;br /&gt;
        [&amp;quot;altSeparator&amp;quot;] = &amp;quot;;&amp;quot;,&lt;br /&gt;
        [&amp;quot;article&amp;quot;] = &amp;quot;Artikel&amp;quot;,&lt;br /&gt;
        [&amp;quot;brackets&amp;quot;] = &amp;quot;%s (%s)&amp;quot;,&lt;br /&gt;
        [&amp;quot;cat-errors&amp;quot;] = &amp;quot;Hatnote-Vorlagen mit Fehlern&amp;quot;,&lt;br /&gt;
        [&amp;quot;cat-unusual-parameters&amp;quot;] = &amp;quot;Hatnote-Vorlagen mit seltsamen Parametern&amp;quot;,&lt;br /&gt;
        [&amp;quot;colon&amp;quot;] = &amp;quot;%s: %s&amp;quot;,&lt;br /&gt;
        [&amp;quot;conj-and&amp;quot;] = &amp;quot;und&amp;quot;,&lt;br /&gt;
        [&amp;quot;conj-or&amp;quot;] = &amp;quot;oder&amp;quot;,&lt;br /&gt;
        [&amp;quot;conjunction&amp;quot;] = &amp;quot;und&amp;quot;,&lt;br /&gt;
        [&amp;quot;details&amp;quot;] = &amp;quot;Für weitere Details zu %s, siehe %s.&amp;quot;,&lt;br /&gt;
        [&amp;quot;disambiguation&amp;quot;] = &amp;quot;Begriffsklärung&amp;quot;,&lt;br /&gt;
        [&amp;quot;error&amp;quot;] = &amp;quot;&amp;lt;strong class=&#039;error&#039;&amp;gt;Fehler: %s%s.&amp;lt;/strong&amp;gt;%s&amp;quot;,&lt;br /&gt;
        [&amp;quot;error-link&amp;quot;] = &amp;quot;Kein Link angegeben&amp;quot;,&lt;br /&gt;
        [&amp;quot;error-pagename&amp;quot;] = &amp;quot;{{plural:$1|Kein Seitenname|Keine Seitennamen}} angegeben&amp;quot;,&lt;br /&gt;
        [&amp;quot;error-text&amp;quot;] = &amp;quot;Kein Text angegeben&amp;quot;,&lt;br /&gt;
        [&amp;quot;for&amp;quot;] = &amp;quot;Für %s, siehe %s.&amp;quot;,&lt;br /&gt;
        [&amp;quot;further&amp;quot;] = &amp;quot;Weitere Informationen&amp;quot;,&lt;br /&gt;
        [&amp;quot;further2&amp;quot;] = &amp;quot;Weitere Informationen:&amp;amp;#32;&amp;quot;,&lt;br /&gt;
        [&amp;quot;help&amp;quot;] = &amp;quot;Hilfe&amp;quot;,&lt;br /&gt;
        [&amp;quot;main&amp;quot;] = &amp;quot;Haupt{{lcfirst:$2}}: $3&amp;quot;,&lt;br /&gt;
        [&amp;quot;main-category&amp;quot;] = &amp;quot;{{plural:$1|Der Haupt{{lcfirst:%s}} für diese Kategorie ist %s|Die Haupt{{lcfirst:%ss}} für diese Kategorie sind %s}}&amp;quot;,&lt;br /&gt;
        [&amp;quot;other-uses&amp;quot;] = &amp;quot;andere Bedeutungen&amp;quot;,&lt;br /&gt;
        [&amp;quot;page&amp;quot;] = &amp;quot;Seite&amp;quot;,&lt;br /&gt;
        [&amp;quot;pagetype-0&amp;quot;] = &amp;quot;Artikel&amp;quot;,&lt;br /&gt;
        [&amp;quot;pagetype-14&amp;quot;] = &amp;quot;Kategorie&amp;quot;,&lt;br /&gt;
        [&amp;quot;section&amp;quot;] = &amp;quot;Abschnitt&amp;quot;,&lt;br /&gt;
        [&amp;quot;see-also&amp;quot;] = &amp;quot;Siehe auch&amp;quot;,&lt;br /&gt;
        [&amp;quot;see-also2&amp;quot;] = &amp;quot;Siehe auch: %s&amp;quot;,&lt;br /&gt;
        [&amp;quot;separator&amp;quot;] = &amp;quot;,&amp;quot;,&lt;br /&gt;
        [&amp;quot;similar-terms&amp;quot;] = &amp;quot;ähnliche Begriffe&amp;quot;,&lt;br /&gt;
        [&amp;quot;space&amp;quot;] = &amp;quot;&amp;amp;#32;&amp;quot;,&lt;br /&gt;
        [&amp;quot;topic&amp;quot;] = &amp;quot;diesem Thema&amp;quot;&lt;br /&gt;
    },&lt;br /&gt;
    [&amp;quot;el&amp;quot;] = {&lt;br /&gt;
        [&amp;quot;see-also&amp;quot;] = &amp;quot;Δείτε επίσης&amp;quot;,&lt;br /&gt;
        [&amp;quot;see-also2&amp;quot;] = &amp;quot;Δείτε επίσης: %s&amp;quot;&lt;br /&gt;
    },&lt;br /&gt;
    [&amp;quot;eo&amp;quot;] = {&lt;br /&gt;
        [&amp;quot;see-also&amp;quot;] = &amp;quot;Vidu ankaŭ&amp;quot;,&lt;br /&gt;
        [&amp;quot;see-also2&amp;quot;] = &amp;quot;Vidu ankaŭ: %s&amp;quot;&lt;br /&gt;
    },&lt;br /&gt;
    [&amp;quot;es&amp;quot;] = {&lt;br /&gt;
        [&amp;quot;about&amp;quot;] = &amp;quot;Este %s es sobre %s. &amp;quot;,&lt;br /&gt;
        [&amp;quot;altSeparator&amp;quot;] = &amp;quot;;&amp;quot;,&lt;br /&gt;
        [&amp;quot;article&amp;quot;] = &amp;quot;artículo&amp;quot;,&lt;br /&gt;
        [&amp;quot;brackets&amp;quot;] = &amp;quot;%s (%s)&amp;quot;,&lt;br /&gt;
        [&amp;quot;cat-errors&amp;quot;] = &amp;quot;Plantilla Hatnote con errores&amp;quot;,&lt;br /&gt;
        [&amp;quot;cat-unusual-parameters&amp;quot;] = &amp;quot;Plantillas Hatnote usando parámetros inusuales&amp;quot;,&lt;br /&gt;
        [&amp;quot;colon&amp;quot;] = &amp;quot;%s: %s&amp;quot;,&lt;br /&gt;
        [&amp;quot;conj-and&amp;quot;] = &amp;quot;y&amp;quot;,&lt;br /&gt;
        [&amp;quot;conj-or&amp;quot;] = &amp;quot;o&amp;quot;,&lt;br /&gt;
        [&amp;quot;conjunction&amp;quot;] = &amp;quot;y&amp;quot;,&lt;br /&gt;
        [&amp;quot;details&amp;quot;] = &amp;quot;Para más detalles en %s, ver %s.&amp;quot;,&lt;br /&gt;
        [&amp;quot;disambiguation&amp;quot;] = &amp;quot;desambiguación&amp;quot;,&lt;br /&gt;
        [&amp;quot;error&amp;quot;] = &amp;quot;&amp;lt;strong class=&#039;error&#039;&amp;gt;Error: %s%s.&amp;lt;/strong&amp;gt;%s&amp;quot;,&lt;br /&gt;
        [&amp;quot;error-link&amp;quot;] = &amp;quot;no se ha especificado ningún enlace&amp;quot;,&lt;br /&gt;
        [&amp;quot;error-pagename&amp;quot;] = &amp;quot;no se ha especificado {{plural:$1|nombre de la página|nombres de la página}}&amp;quot;,&lt;br /&gt;
        [&amp;quot;error-text&amp;quot;] = &amp;quot;no se ha especificado ningún texto&amp;quot;,&lt;br /&gt;
        [&amp;quot;for&amp;quot;] = &amp;quot;Para %s, ver %s.&amp;quot;,&lt;br /&gt;
        [&amp;quot;further&amp;quot;] = &amp;quot;Más información&amp;quot;,&lt;br /&gt;
        [&amp;quot;further2&amp;quot;] = &amp;quot;Más información: &amp;amp;#32;&amp;quot;,&lt;br /&gt;
        [&amp;quot;help&amp;quot;] = &amp;quot;ayuda&amp;quot;,&lt;br /&gt;
        [&amp;quot;main&amp;quot;] = &amp;quot;{{plural:$1|%s principal: %s|%ss principales: %s}}&amp;quot;,&lt;br /&gt;
        [&amp;quot;main-category&amp;quot;] = &amp;quot;{{plural:$1|El %s principal de esta categoría es %s|Los %ss principales de esta categoría son %s}}&amp;quot;,&lt;br /&gt;
        [&amp;quot;other-uses&amp;quot;] = &amp;quot;otros usos&amp;quot;,&lt;br /&gt;
        [&amp;quot;page&amp;quot;] = &amp;quot;página&amp;quot;,&lt;br /&gt;
        [&amp;quot;pagetype-0&amp;quot;] = &amp;quot;artículo&amp;quot;,&lt;br /&gt;
        [&amp;quot;pagetype-14&amp;quot;] = &amp;quot;categoría&amp;quot;,&lt;br /&gt;
        [&amp;quot;section&amp;quot;] = &amp;quot;sección&amp;quot;,&lt;br /&gt;
        [&amp;quot;see-also&amp;quot;] = &amp;quot;Ver también&amp;quot;,&lt;br /&gt;
        [&amp;quot;see-also2&amp;quot;] = &amp;quot;Ver también: %s&amp;quot;,&lt;br /&gt;
        [&amp;quot;separator&amp;quot;] = &amp;quot;,&amp;quot;,&lt;br /&gt;
        [&amp;quot;similar-terms&amp;quot;] = &amp;quot;términos similares&amp;quot;,&lt;br /&gt;
        [&amp;quot;space&amp;quot;] = &amp;quot;&amp;amp;#32;&amp;quot;,&lt;br /&gt;
        [&amp;quot;topic&amp;quot;] = &amp;quot;este tema&amp;quot;&lt;br /&gt;
    },&lt;br /&gt;
    [&amp;quot;et&amp;quot;] = {&lt;br /&gt;
        [&amp;quot;about&amp;quot;] = &amp;quot;See %s räägib %s.&amp;quot;,&lt;br /&gt;
        [&amp;quot;altSeparator&amp;quot;] = &amp;quot;;&amp;quot;,&lt;br /&gt;
        [&amp;quot;article&amp;quot;] = &amp;quot;artikkel&amp;quot;,&lt;br /&gt;
        [&amp;quot;brackets&amp;quot;] = &amp;quot;%s (%s)&amp;quot;,&lt;br /&gt;
        [&amp;quot;cat-errors&amp;quot;] = &amp;quot;Tõrgetega päisemärkuse mallid&amp;quot;,&lt;br /&gt;
        [&amp;quot;cat-unusual-parameters&amp;quot;] = &amp;quot;Päisemärkuse mallid kasutavad ebatavalisi parameetreid&amp;quot;,&lt;br /&gt;
        [&amp;quot;colon&amp;quot;] = &amp;quot;%s: %s&amp;quot;,&lt;br /&gt;
        [&amp;quot;conj-and&amp;quot;] = &amp;quot;ja&amp;quot;,&lt;br /&gt;
        [&amp;quot;conj-or&amp;quot;] = &amp;quot;või&amp;quot;,&lt;br /&gt;
        [&amp;quot;conjunction&amp;quot;] = &amp;quot;ja&amp;quot;,&lt;br /&gt;
        [&amp;quot;details&amp;quot;] = &amp;quot;Lisateavet %s kohta vaadake %s.&amp;quot;,&lt;br /&gt;
        [&amp;quot;disambiguation&amp;quot;] = &amp;quot;täpsustus&amp;quot;,&lt;br /&gt;
        [&amp;quot;error&amp;quot;] = &amp;quot;&amp;lt;strong class=&#039;error&#039;&amp;gt;Viga: %s%s.&amp;lt;/strong&amp;gt;%s&amp;quot;,&lt;br /&gt;
        [&amp;quot;error-link&amp;quot;] = &amp;quot;Link on määratlemata&amp;quot;,&lt;br /&gt;
        [&amp;quot;error-pagename&amp;quot;] = &amp;quot;{{plural:$1|Lehekülje nimi|Lehekülgede nimi}} on määratlemata&amp;quot;,&lt;br /&gt;
        [&amp;quot;error-text&amp;quot;] = &amp;quot;Tekst on määratlemata&amp;quot;,&lt;br /&gt;
        [&amp;quot;for&amp;quot;] = &amp;quot;%s kohta vaadake %s.&amp;quot;,&lt;br /&gt;
        [&amp;quot;further&amp;quot;] = &amp;quot;Lisateave&amp;quot;,&lt;br /&gt;
        [&amp;quot;further2&amp;quot;] = &amp;quot;Lisateave:&amp;amp;#32;&amp;quot;,&lt;br /&gt;
        [&amp;quot;help&amp;quot;] = &amp;quot;abi&amp;quot;,&lt;br /&gt;
        [&amp;quot;main&amp;quot;] = &amp;quot;Põhi%s: %s&amp;quot;,&lt;br /&gt;
        [&amp;quot;main-category&amp;quot;] = &amp;quot;Selle kategooria põhi%s on %s&amp;quot;,&lt;br /&gt;
        [&amp;quot;other-uses&amp;quot;] = &amp;quot;Teiste tähenduste&amp;quot;,&lt;br /&gt;
        [&amp;quot;page&amp;quot;] = &amp;quot;lehekülg&amp;quot;,&lt;br /&gt;
        [&amp;quot;pagetype-0&amp;quot;] = &amp;quot;artikkel&amp;quot;,&lt;br /&gt;
        [&amp;quot;pagetype-14&amp;quot;] = &amp;quot;kategooria&amp;quot;,&lt;br /&gt;
        [&amp;quot;section&amp;quot;] = &amp;quot;osa&amp;quot;,&lt;br /&gt;
        [&amp;quot;see-also&amp;quot;] = &amp;quot;Vaata ka&amp;quot;,&lt;br /&gt;
        [&amp;quot;see-also2&amp;quot;] = &amp;quot;Vaata ka: %s&amp;quot;,&lt;br /&gt;
        [&amp;quot;separator&amp;quot;] = &amp;quot;,&amp;quot;,&lt;br /&gt;
        [&amp;quot;similar-terms&amp;quot;] = &amp;quot;Sarnaste terminite&amp;quot;,&lt;br /&gt;
        [&amp;quot;space&amp;quot;] = &amp;quot;&amp;amp;#32;&amp;quot;,&lt;br /&gt;
        [&amp;quot;topic&amp;quot;] = &amp;quot;see teema&amp;quot;&lt;br /&gt;
    },&lt;br /&gt;
    [&amp;quot;fi&amp;quot;] = {&lt;br /&gt;
        [&amp;quot;see-also&amp;quot;] = &amp;quot;Katso myös&amp;quot;,&lt;br /&gt;
        [&amp;quot;see-also2&amp;quot;] = &amp;quot;Katso myös: %s&amp;quot;&lt;br /&gt;
    },&lt;br /&gt;
    [&amp;quot;fr&amp;quot;] = {&lt;br /&gt;
        [&amp;quot;about&amp;quot;] = &amp;quot;Cette {{lc:%s}} concerne %s. &amp;quot;,&lt;br /&gt;
        [&amp;quot;altSeparator&amp;quot;] = &amp;quot;;&amp;quot;,&lt;br /&gt;
        [&amp;quot;article&amp;quot;] = &amp;quot;Page&amp;quot;,&lt;br /&gt;
        [&amp;quot;brackets&amp;quot;] = &amp;quot;%s (%s)&amp;quot;,&lt;br /&gt;
        [&amp;quot;cat-errors&amp;quot;] = &amp;quot;Modèle Hatnote contenant des erreurs&amp;quot;,&lt;br /&gt;
        [&amp;quot;cat-unusual-parameters&amp;quot;] = &amp;quot;Modèle Hatnote utilisant des paramètres inhabituels&amp;quot;,&lt;br /&gt;
        [&amp;quot;colon&amp;quot;] = &amp;quot;%s&amp;amp;nbsp;: %s&amp;quot;,&lt;br /&gt;
        [&amp;quot;conj-and&amp;quot;] = &amp;quot;et&amp;quot;,&lt;br /&gt;
        [&amp;quot;conj-or&amp;quot;] = &amp;quot;ou à&amp;quot;,&lt;br /&gt;
        [&amp;quot;conjunction&amp;quot;] = &amp;quot;et&amp;quot;,&lt;br /&gt;
        [&amp;quot;details&amp;quot;] = &amp;quot;Pour plus d&#039;informations sur %s, consultez %s.&amp;quot;,&lt;br /&gt;
        [&amp;quot;disambiguation&amp;quot;] = &amp;quot;homonymie&amp;quot;,&lt;br /&gt;
        [&amp;quot;error&amp;quot;] = &amp;quot;&amp;lt;strong class=&#039;error&#039;&amp;gt;Erreur&amp;amp;nbsp;: %s%s.&amp;lt;/strong&amp;gt;%s&amp;quot;,&lt;br /&gt;
        [&amp;quot;error-link&amp;quot;] = &amp;quot;aucun lien spécifié&amp;quot;,&lt;br /&gt;
        [&amp;quot;error-pagename&amp;quot;] = &amp;quot;aucun nom de page spécifié&amp;quot;,&lt;br /&gt;
        [&amp;quot;error-text&amp;quot;] = &amp;quot;aucun texte spécifié&amp;quot;,&lt;br /&gt;
        [&amp;quot;for&amp;quot;] = &amp;quot;Pour %s, se référer à %s.&amp;quot;,&lt;br /&gt;
        [&amp;quot;further&amp;quot;] = &amp;quot;Plus d&#039;informations&amp;quot;,&lt;br /&gt;
        [&amp;quot;further2&amp;quot;] = &amp;quot;Plus d&#039;informations&amp;amp;nbsp;: &amp;quot;,&lt;br /&gt;
        [&amp;quot;help&amp;quot;] = &amp;quot;Aide&amp;quot;,&lt;br /&gt;
        [&amp;quot;main&amp;quot;] = &amp;quot;{{plural:$1|%s principale&amp;amp;nbsp;: %s|%ss principales&amp;amp;nbsp;: %s}}&amp;quot;,&lt;br /&gt;
        [&amp;quot;main-category&amp;quot;] = &amp;quot;{{plural:$1|La {{lc:%s}} principale pour cette catégorie est %s|Les {{lc:%s}}s principales pour cette catégorie sont %s}}&amp;quot;,&lt;br /&gt;
        [&amp;quot;other-uses&amp;quot;] = &amp;quot;autres utilisations&amp;quot;,&lt;br /&gt;
        [&amp;quot;page&amp;quot;] = &amp;quot;Page&amp;quot;,&lt;br /&gt;
        [&amp;quot;pagetype-0&amp;quot;] = &amp;quot;Page&amp;quot;,&lt;br /&gt;
        [&amp;quot;pagetype-14&amp;quot;] = &amp;quot;Catégorie&amp;quot;,&lt;br /&gt;
        [&amp;quot;section&amp;quot;] = &amp;quot;Section&amp;quot;,&lt;br /&gt;
        [&amp;quot;see-also&amp;quot;] = &amp;quot;Voir aussi&amp;quot;,&lt;br /&gt;
        [&amp;quot;see-also2&amp;quot;] = &amp;quot;Voir aussi&amp;amp;nbsp;: %s&amp;quot;,&lt;br /&gt;
        [&amp;quot;separator&amp;quot;] = &amp;quot;,&amp;quot;,&lt;br /&gt;
        [&amp;quot;similar-terms&amp;quot;] = &amp;quot;termes similaires&amp;quot;,&lt;br /&gt;
        [&amp;quot;space&amp;quot;] = &amp;quot;&amp;amp;#32;&amp;quot;,&lt;br /&gt;
        [&amp;quot;topic&amp;quot;] = &amp;quot;ce sujet&amp;quot;&lt;br /&gt;
    },&lt;br /&gt;
    [&amp;quot;he&amp;quot;] = {&lt;br /&gt;
        [&amp;quot;see-also&amp;quot;] = &amp;quot;ראה/י גם&amp;quot;&lt;br /&gt;
    },&lt;br /&gt;
    [&amp;quot;hi&amp;quot;] = {&lt;br /&gt;
        [&amp;quot;about&amp;quot;] = &amp;quot;यह %s %s के बारे में है। &amp;quot;,&lt;br /&gt;
        [&amp;quot;altSeparator&amp;quot;] = &amp;quot;;&amp;quot;,&lt;br /&gt;
        [&amp;quot;article&amp;quot;] = &amp;quot;लेख&amp;quot;,&lt;br /&gt;
        [&amp;quot;brackets&amp;quot;] = &amp;quot;%s (%s)&amp;quot;,&lt;br /&gt;
        [&amp;quot;cat-errors&amp;quot;] = &amp;quot;त्रुटियों वाले हैटनोट साँचें&amp;quot;,&lt;br /&gt;
        [&amp;quot;cat-unusual-parameters&amp;quot;] = &amp;quot;अजीब पैरामीटरों का इस्तेमाल करने वाले हैटनोट साँचें&amp;quot;,&lt;br /&gt;
        [&amp;quot;colon&amp;quot;] = &amp;quot;%s: %s&amp;quot;,&lt;br /&gt;
        [&amp;quot;conj-and&amp;quot;] = &amp;quot;और&amp;quot;,&lt;br /&gt;
        [&amp;quot;conj-or&amp;quot;] = &amp;quot;या&amp;quot;,&lt;br /&gt;
        [&amp;quot;conjunction&amp;quot;] = &amp;quot;और&amp;quot;,&lt;br /&gt;
        [&amp;quot;details&amp;quot;] = &amp;quot;%s के बारे में अधिक जानकारी के लिए %s देखें।&amp;quot;,&lt;br /&gt;
        [&amp;quot;disambiguation&amp;quot;] = &amp;quot;बहुविकल्पी&amp;quot;,&lt;br /&gt;
        [&amp;quot;error&amp;quot;] = &amp;quot;&amp;lt;strong class=&#039;error&#039;&amp;gt;त्रुटि: %s%s.&amp;lt;/strong&amp;gt;%s&amp;quot;,&lt;br /&gt;
        [&amp;quot;error-link&amp;quot;] = &amp;quot;कोई कड़ी निर्धारित नहीं की गई है&amp;quot;,&lt;br /&gt;
        [&amp;quot;error-pagename&amp;quot;] = &amp;quot;कोई {{plural:$1|पृष्ठ नाम|पृष्ठ नाम}} निर्धारित नहीं किया गया है&amp;quot;,&lt;br /&gt;
        [&amp;quot;error-text&amp;quot;] = &amp;quot;कोई टेक्स्ट निर्धारित नहीं किया गया है&amp;quot;,&lt;br /&gt;
        [&amp;quot;for&amp;quot;] = &amp;quot;%s के लिए, %s  देखें।&amp;quot;,&lt;br /&gt;
        [&amp;quot;further&amp;quot;] = &amp;quot;अधिक जानकारी&amp;quot;,&lt;br /&gt;
        [&amp;quot;further2&amp;quot;] = &amp;quot;अधिक जानकारी: &amp;quot;,&lt;br /&gt;
        [&amp;quot;help&amp;quot;] = &amp;quot;सहायता&amp;quot;,&lt;br /&gt;
        [&amp;quot;main&amp;quot;] = &amp;quot;{{plural:$1|मुख्य %s: %s|मुख्य %ss: %s}}&amp;quot;,&lt;br /&gt;
        [&amp;quot;main-category&amp;quot;] = &amp;quot;{{plural:$1|इस श्रेणी के लिए मुख्य %s है %s|इस श्रेणी के लिए मुख्य %ss हैं %s}}&amp;quot;,&lt;br /&gt;
        [&amp;quot;other-uses&amp;quot;] = &amp;quot;दूसरे प्रयोग&amp;quot;,&lt;br /&gt;
        [&amp;quot;page&amp;quot;] = &amp;quot;पृष्ठ&amp;quot;,&lt;br /&gt;
        [&amp;quot;pagetype-0&amp;quot;] = &amp;quot;लेख&amp;quot;,&lt;br /&gt;
        [&amp;quot;pagetype-14&amp;quot;] = &amp;quot;श्रेणी&amp;quot;,&lt;br /&gt;
        [&amp;quot;section&amp;quot;] = &amp;quot;अनुभाग&amp;quot;,&lt;br /&gt;
        [&amp;quot;see-also&amp;quot;] = &amp;quot;ये भी देखें&amp;quot;,&lt;br /&gt;
        [&amp;quot;see-also2&amp;quot;] = &amp;quot;ये भी देखें: %s&amp;quot;,&lt;br /&gt;
        [&amp;quot;separator&amp;quot;] = &amp;quot;,&amp;quot;,&lt;br /&gt;
        [&amp;quot;similar-terms&amp;quot;] = &amp;quot;समान शब्द&amp;quot;,&lt;br /&gt;
        [&amp;quot;space&amp;quot;] = &amp;quot;&amp;amp;#32;&amp;quot;,&lt;br /&gt;
        [&amp;quot;topic&amp;quot;] = &amp;quot;यह विषय&amp;quot;&lt;br /&gt;
    },&lt;br /&gt;
    [&amp;quot;id&amp;quot;] = {&lt;br /&gt;
        [&amp;quot;about&amp;quot;] = &amp;quot;&amp;quot;,&lt;br /&gt;
        [&amp;quot;altSeparator&amp;quot;] = &amp;quot;;&amp;quot;,&lt;br /&gt;
        [&amp;quot;article&amp;quot;] = &amp;quot;artikel&amp;quot;,&lt;br /&gt;
        [&amp;quot;brackets&amp;quot;] = &amp;quot;%s (%s)&amp;quot;,&lt;br /&gt;
        [&amp;quot;colon&amp;quot;] = &amp;quot;%s: %s&amp;quot;,&lt;br /&gt;
        [&amp;quot;conj-and&amp;quot;] = &amp;quot;dan&amp;quot;,&lt;br /&gt;
        [&amp;quot;conj-or&amp;quot;] = &amp;quot;atau&amp;quot;,&lt;br /&gt;
        [&amp;quot;conjunction&amp;quot;] = &amp;quot;dan&amp;quot;,&lt;br /&gt;
        [&amp;quot;details&amp;quot;] = &amp;quot;Untuk keterangan lebih lanjut untuk %s, lihat %s.&amp;quot;,&lt;br /&gt;
        [&amp;quot;disambiguation&amp;quot;] = &amp;quot;disambiguation&amp;quot;,&lt;br /&gt;
        [&amp;quot;for&amp;quot;] = &amp;quot;Untuk %s, lihat %s.&amp;quot;,&lt;br /&gt;
        [&amp;quot;further&amp;quot;] = &amp;quot;informasi lebih lanjut&amp;quot;,&lt;br /&gt;
        [&amp;quot;help&amp;quot;] = &amp;quot;bantuan&amp;quot;,&lt;br /&gt;
        [&amp;quot;main&amp;quot;] = &amp;quot;{{plural:$1|Main %s: %s|Main %ss: %s}}&amp;quot;,&lt;br /&gt;
        [&amp;quot;other-uses&amp;quot;] = &amp;quot;kegunaan lain&amp;quot;,&lt;br /&gt;
        [&amp;quot;page&amp;quot;] = &amp;quot;laman&amp;quot;,&lt;br /&gt;
        [&amp;quot;pagetype-0&amp;quot;] = &amp;quot;artikel&amp;quot;,&lt;br /&gt;
        [&amp;quot;pagetype-14&amp;quot;] = &amp;quot;kategori&amp;quot;,&lt;br /&gt;
        [&amp;quot;see-also&amp;quot;] = &amp;quot;lihat juga&amp;quot;,&lt;br /&gt;
        [&amp;quot;see-also2&amp;quot;] = &amp;quot;Lihat juga: %s&amp;quot;,&lt;br /&gt;
        [&amp;quot;separator&amp;quot;] = &amp;quot;,&amp;quot;,&lt;br /&gt;
        [&amp;quot;topic&amp;quot;] = &amp;quot;topik ini&amp;quot;&lt;br /&gt;
    },&lt;br /&gt;
    [&amp;quot;it&amp;quot;] = {&lt;br /&gt;
        [&amp;quot;about&amp;quot;] = &amp;quot;Questo %s riguarda %s&amp;quot;,&lt;br /&gt;
        [&amp;quot;altSeparator&amp;quot;] = &amp;quot;;&amp;quot;,&lt;br /&gt;
        [&amp;quot;article&amp;quot;] = &amp;quot;articolo&amp;quot;,&lt;br /&gt;
        [&amp;quot;brackets&amp;quot;] = &amp;quot;%s (%s)&amp;quot;,&lt;br /&gt;
        [&amp;quot;cat-errors&amp;quot;] = &amp;quot;Template Hatnote con errori&amp;quot;,&lt;br /&gt;
        [&amp;quot;cat-unusual-parameters&amp;quot;] = &amp;quot;Template Hatnote che utilizzano parametri insoliti&amp;quot;,&lt;br /&gt;
        [&amp;quot;colon&amp;quot;] = &amp;quot;%s: %s&amp;quot;,&lt;br /&gt;
        [&amp;quot;conj-and&amp;quot;] = &amp;quot;e&amp;quot;,&lt;br /&gt;
        [&amp;quot;conj-or&amp;quot;] = &amp;quot;o&amp;quot;,&lt;br /&gt;
        [&amp;quot;conjunction&amp;quot;] = &amp;quot;e&amp;quot;,&lt;br /&gt;
        [&amp;quot;details&amp;quot;] = &amp;quot;Per più dettagli su %s, vedi %s.&amp;quot;,&lt;br /&gt;
        [&amp;quot;disambiguation&amp;quot;] = &amp;quot;disambiguazione&amp;quot;,&lt;br /&gt;
        [&amp;quot;error&amp;quot;] = &amp;quot;&amp;lt;strong class=&#039;error&#039;&amp;gt;Errore: %s%s.&amp;lt;/strong&amp;gt;%s&amp;quot;,&lt;br /&gt;
        [&amp;quot;error-link&amp;quot;] = &amp;quot;nessun link specificato&amp;quot;,&lt;br /&gt;
        [&amp;quot;error-pagename&amp;quot;] = &amp;quot;nessun {{plural:$1|nome della pagina|nomi delle pagine}} specificato&amp;quot;,&lt;br /&gt;
        [&amp;quot;error-text&amp;quot;] = &amp;quot;nessun testo specificato&amp;quot;,&lt;br /&gt;
        [&amp;quot;for&amp;quot;] = &amp;quot;Per %s, vedi %s.&amp;quot;,&lt;br /&gt;
        [&amp;quot;further&amp;quot;] = &amp;quot;Ulteriori informazioni&amp;quot;,&lt;br /&gt;
        [&amp;quot;further2&amp;quot;] = &amp;quot;Ulteriori informazioni:&amp;amp;#32;&amp;quot;,&lt;br /&gt;
        [&amp;quot;help&amp;quot;] = &amp;quot;aiuto&amp;quot;,&lt;br /&gt;
        [&amp;quot;main&amp;quot;] = &amp;quot;{{plural:$1|%s principale: %s|%ss principali: %s}}&amp;quot;,&lt;br /&gt;
        [&amp;quot;main-category&amp;quot;] = &amp;quot;{{plural:$1|Il/la %s principale per questa categoria è %s|I/gli %ss principali per questa categoria sono %s}}&amp;quot;,&lt;br /&gt;
        [&amp;quot;other-uses&amp;quot;] = &amp;quot;altri utilizzi&amp;quot;,&lt;br /&gt;
        [&amp;quot;page&amp;quot;] = &amp;quot;pagina&amp;quot;,&lt;br /&gt;
        [&amp;quot;pagetype-0&amp;quot;] = &amp;quot;articolo&amp;quot;,&lt;br /&gt;
        [&amp;quot;pagetype-14&amp;quot;] = &amp;quot;categoria&amp;quot;,&lt;br /&gt;
        [&amp;quot;section&amp;quot;] = &amp;quot;sezione&amp;quot;,&lt;br /&gt;
        [&amp;quot;see-also&amp;quot;] = &amp;quot;Vedi anche&amp;quot;,&lt;br /&gt;
        [&amp;quot;see-also2&amp;quot;] = &amp;quot;Vedi anche: %s&amp;quot;,&lt;br /&gt;
        [&amp;quot;separator&amp;quot;] = &amp;quot;,&amp;quot;,&lt;br /&gt;
        [&amp;quot;similar-terms&amp;quot;] = &amp;quot;termini simili&amp;quot;,&lt;br /&gt;
        [&amp;quot;space&amp;quot;] = &amp;quot;&amp;amp;#32;&amp;quot;,&lt;br /&gt;
        [&amp;quot;topic&amp;quot;] = &amp;quot;questo argomento&amp;quot;&lt;br /&gt;
    },&lt;br /&gt;
    [&amp;quot;ja&amp;quot;] = {&lt;br /&gt;
        [&amp;quot;about&amp;quot;] = &amp;quot;この%sでは%sについて説明しています。&amp;quot;,&lt;br /&gt;
        [&amp;quot;altSeparator&amp;quot;] = &amp;quot;；&amp;quot;,&lt;br /&gt;
        [&amp;quot;article&amp;quot;] = &amp;quot;記事&amp;quot;,&lt;br /&gt;
        [&amp;quot;brackets&amp;quot;] = &amp;quot;%s (%s)&amp;quot;,&lt;br /&gt;
        [&amp;quot;cat-errors&amp;quot;] = &amp;quot;エラーのあるHatnoteテンプレート&amp;quot;,&lt;br /&gt;
        [&amp;quot;cat-unusual-parameters&amp;quot;] = &amp;quot;異常な引数のあるHatnoteテンプレート&amp;quot;,&lt;br /&gt;
        [&amp;quot;colon&amp;quot;] = &amp;quot;%s：%s&amp;quot;,&lt;br /&gt;
        [&amp;quot;conj-and&amp;quot;] = &amp;quot;及び&amp;quot;,&lt;br /&gt;
        [&amp;quot;conj-or&amp;quot;] = &amp;quot;または&amp;quot;,&lt;br /&gt;
        [&amp;quot;conjunction&amp;quot;] = &amp;quot;及び&amp;quot;,&lt;br /&gt;
        [&amp;quot;details&amp;quot;] = &amp;quot;%sの詳細については、%sをご覧ください。&amp;quot;,&lt;br /&gt;
        [&amp;quot;disambiguation&amp;quot;] = &amp;quot;曖昧さ回避&amp;quot;,&lt;br /&gt;
        [&amp;quot;error&amp;quot;] = &amp;quot;&amp;lt;strong class=&#039;error&#039;&amp;gt;エラー：%s%s。&amp;lt;/strong&amp;gt;%s&amp;quot;,&lt;br /&gt;
        [&amp;quot;error-link&amp;quot;] = &amp;quot;リンクを入力してください&amp;quot;,&lt;br /&gt;
        [&amp;quot;error-pagename&amp;quot;] = &amp;quot;{{plural:$1|ページ名|ページ名}}を入力してください&amp;quot;,&lt;br /&gt;
        [&amp;quot;error-text&amp;quot;] = &amp;quot;テキストを入力してください&amp;quot;,&lt;br /&gt;
        [&amp;quot;for&amp;quot;] = &amp;quot;%sについては、%sをご覧ください。&amp;quot;,&lt;br /&gt;
        [&amp;quot;further&amp;quot;] = &amp;quot;詳しい情報&amp;quot;,&lt;br /&gt;
        [&amp;quot;further2&amp;quot;] = &amp;quot;詳しい情報：&amp;quot;,&lt;br /&gt;
        [&amp;quot;help&amp;quot;] = &amp;quot;ヘルプ&amp;quot;,&lt;br /&gt;
        [&amp;quot;main&amp;quot;] = &amp;quot;{{plural:$1|主要%s：%s|主要%s：%s}}&amp;quot;,&lt;br /&gt;
        [&amp;quot;main-category&amp;quot;] = &amp;quot;{{plural:$1|このカテゴリの主要%sは%s|このカテゴリの主要%sは%s}}&amp;quot;,&lt;br /&gt;
        [&amp;quot;other-uses&amp;quot;] = &amp;quot;その他の用法&amp;quot;,&lt;br /&gt;
        [&amp;quot;page&amp;quot;] = &amp;quot;ページ&amp;quot;,&lt;br /&gt;
        [&amp;quot;pagetype-0&amp;quot;] = &amp;quot;記事&amp;quot;,&lt;br /&gt;
        [&amp;quot;pagetype-14&amp;quot;] = &amp;quot;カテゴリ&amp;quot;,&lt;br /&gt;
        [&amp;quot;section&amp;quot;] = &amp;quot;節&amp;quot;,&lt;br /&gt;
        [&amp;quot;see-also&amp;quot;] = &amp;quot;関連情報&amp;quot;,&lt;br /&gt;
        [&amp;quot;see-also2&amp;quot;] = &amp;quot;関連情報：%s&amp;quot;,&lt;br /&gt;
        [&amp;quot;separator&amp;quot;] = &amp;quot;、&amp;quot;,&lt;br /&gt;
        [&amp;quot;similar-terms&amp;quot;] = &amp;quot;類語&amp;quot;,&lt;br /&gt;
        [&amp;quot;space&amp;quot;] = &amp;quot;&amp;quot;,&lt;br /&gt;
        [&amp;quot;topic&amp;quot;] = &amp;quot;この話題&amp;quot;&lt;br /&gt;
    },&lt;br /&gt;
    [&amp;quot;ko&amp;quot;] = {&lt;br /&gt;
        [&amp;quot;about&amp;quot;] = &amp;quot;이 %s는 %s에 대한 것입니다. &amp;quot;,&lt;br /&gt;
        [&amp;quot;altSeparator&amp;quot;] = &amp;quot;;&amp;quot;,&lt;br /&gt;
        [&amp;quot;article&amp;quot;] = &amp;quot;문서&amp;quot;,&lt;br /&gt;
        [&amp;quot;brackets&amp;quot;] = &amp;quot;%s (%s)&amp;quot;,&lt;br /&gt;
        [&amp;quot;cat-errors&amp;quot;] = &amp;quot;오류 있는 Hatnote 틀&amp;quot;,&lt;br /&gt;
        [&amp;quot;cat-unusual-parameters&amp;quot;] = &amp;quot;잘못된 매개변수를 사용하는 Hatnote 틀&amp;quot;,&lt;br /&gt;
        [&amp;quot;colon&amp;quot;] = &amp;quot;%s: %s&amp;quot;,&lt;br /&gt;
        [&amp;quot;conj-and&amp;quot;] = &amp;quot;및&amp;quot;,&lt;br /&gt;
        [&amp;quot;conj-or&amp;quot;] = &amp;quot;또는&amp;quot;,&lt;br /&gt;
        [&amp;quot;conjunction&amp;quot;] = &amp;quot;및&amp;quot;,&lt;br /&gt;
        [&amp;quot;details&amp;quot;] = &amp;quot;%s에 대한 자세한 정보는 %s 문서를 참고하십시오&amp;quot;,&lt;br /&gt;
        [&amp;quot;disambiguation&amp;quot;] = &amp;quot;동음이의어&amp;quot;,&lt;br /&gt;
        [&amp;quot;error&amp;quot;] = &amp;quot;&amp;lt;strong class=&#039;error&#039;&amp;gt;오류: %s%s.&amp;lt;/strong&amp;gt;%s&amp;quot;,&lt;br /&gt;
        [&amp;quot;error-link&amp;quot;] = &amp;quot;링크 미지정&amp;quot;,&lt;br /&gt;
        [&amp;quot;error-pagename&amp;quot;] = &amp;quot;{{plural:$1|문서 이름|문서 이름}} 미지정&amp;quot;,&lt;br /&gt;
        [&amp;quot;error-text&amp;quot;] = &amp;quot;텍스트 미지정&amp;quot;,&lt;br /&gt;
        [&amp;quot;for&amp;quot;] = &amp;quot;%s에 대해서는 %s 문서를 참고하십시오.&amp;quot;,&lt;br /&gt;
        [&amp;quot;further&amp;quot;] = &amp;quot;자세한 정보&amp;quot;,&lt;br /&gt;
        [&amp;quot;further2&amp;quot;] = &amp;quot;자세한 정보: &amp;quot;,&lt;br /&gt;
        [&amp;quot;help&amp;quot;] = &amp;quot;도움말&amp;quot;,&lt;br /&gt;
        [&amp;quot;main&amp;quot;] = &amp;quot;{{plural:$1|본 %s: %s|본 %s: %s}}&amp;quot;,&lt;br /&gt;
        [&amp;quot;main-category&amp;quot;] = &amp;quot;{{plural:$1|이 분류의 본 %s에 대해서는 %s 문서를 참고하십시오|이 분류의 본 %s에 대해서는 %s 문서를 참고하십시오}}&amp;quot;,&lt;br /&gt;
        [&amp;quot;other-uses&amp;quot;] = &amp;quot;그 외&amp;quot;,&lt;br /&gt;
        [&amp;quot;page&amp;quot;] = &amp;quot;문서&amp;quot;,&lt;br /&gt;
        [&amp;quot;pagetype-0&amp;quot;] = &amp;quot;문서&amp;quot;,&lt;br /&gt;
        [&amp;quot;pagetype-14&amp;quot;] = &amp;quot;분류&amp;quot;,&lt;br /&gt;
        [&amp;quot;section&amp;quot;] = &amp;quot;문단&amp;quot;,&lt;br /&gt;
        [&amp;quot;see-also&amp;quot;] = &amp;quot;같이 보기&amp;quot;,&lt;br /&gt;
        [&amp;quot;see-also2&amp;quot;] = &amp;quot;같이 보기: %s&amp;quot;,&lt;br /&gt;
        [&amp;quot;separator&amp;quot;] = &amp;quot;,&amp;quot;,&lt;br /&gt;
        [&amp;quot;similar-terms&amp;quot;] = &amp;quot;비슷한 용어&amp;quot;,&lt;br /&gt;
        [&amp;quot;space&amp;quot;] = &amp;quot;&amp;amp;#32;&amp;quot;,&lt;br /&gt;
        [&amp;quot;topic&amp;quot;] = &amp;quot;이 주제&amp;quot;&lt;br /&gt;
    },&lt;br /&gt;
    [&amp;quot;la&amp;quot;] = {&lt;br /&gt;
        [&amp;quot;see-also&amp;quot;] = &amp;quot;Vide etiam&amp;quot;,&lt;br /&gt;
        [&amp;quot;see-also2&amp;quot;] = &amp;quot;Vide etiam: %s&amp;quot;&lt;br /&gt;
    },&lt;br /&gt;
    [&amp;quot;nl&amp;quot;] = {&lt;br /&gt;
        [&amp;quot;see-also&amp;quot;] = &amp;quot;Zie ook&amp;quot;,&lt;br /&gt;
        [&amp;quot;see-also2&amp;quot;] = &amp;quot;Zie ook: %s&amp;quot;&lt;br /&gt;
    },&lt;br /&gt;
    [&amp;quot;pl&amp;quot;] = {&lt;br /&gt;
        [&amp;quot;about&amp;quot;] = &amp;quot;{{plural:$1|{{gender:$1|Ten|Ta|To}}|Te}} %s {{plural:$1|dotyczy|dotyczą}} %s. &amp;quot;,&lt;br /&gt;
        [&amp;quot;article&amp;quot;] = &amp;quot;{{plural:$1|artykuł|artykuły}}&amp;quot;,&lt;br /&gt;
        [&amp;quot;brackets&amp;quot;] = &amp;quot;%s (%s)&amp;quot;,&lt;br /&gt;
        [&amp;quot;cat-errors&amp;quot;] = &amp;quot;Szablony kontekstowe z błędami&amp;quot;,&lt;br /&gt;
        [&amp;quot;cat-unusual-parameters&amp;quot;] = &amp;quot;Szablony kontekstowe z nietypowymi parametrami&amp;quot;,&lt;br /&gt;
        [&amp;quot;conj-and&amp;quot;] = &amp;quot;oraz&amp;quot;,&lt;br /&gt;
        [&amp;quot;conj-or&amp;quot;] = &amp;quot;lub&amp;quot;,&lt;br /&gt;
        [&amp;quot;conjunction&amp;quot;] = &amp;quot;oraz&amp;quot;,&lt;br /&gt;
        [&amp;quot;details&amp;quot;] = &amp;quot;Aby uzyskać więcej informacji na temat %s, zobacz %s.&amp;quot;,&lt;br /&gt;
        [&amp;quot;disambiguation&amp;quot;] = &amp;quot;{{plural:$1|ujednoznacznienie|ujednoznacznienia}}&amp;quot;,&lt;br /&gt;
        [&amp;quot;error&amp;quot;] = &amp;quot;&amp;lt;strong class=&#039;error&#039;&amp;gt;Błąd: %s%s.&amp;lt;/strong&amp;gt;%s&amp;quot;,&lt;br /&gt;
        [&amp;quot;error-link&amp;quot;] = &amp;quot;Nie wskazano linku do strony&amp;quot;,&lt;br /&gt;
        [&amp;quot;error-pagename&amp;quot;] = &amp;quot;Nie wskazano {{plural:$1|tytułu strony|tytułów stron}}&amp;quot;,&lt;br /&gt;
        [&amp;quot;error-text&amp;quot;] = &amp;quot;Nie wskazano tekstu&amp;quot;,&lt;br /&gt;
        [&amp;quot;for&amp;quot;] = &amp;quot;Jeśli szukasz %s, zobacz %s.&amp;quot;,&lt;br /&gt;
        [&amp;quot;further&amp;quot;] = &amp;quot;Więcej informacji:&amp;quot;,&lt;br /&gt;
        [&amp;quot;further2&amp;quot;] = &amp;quot;Więcej informacji:&amp;amp;#32;&amp;quot;,&lt;br /&gt;
        [&amp;quot;help&amp;quot;] = &amp;quot;pomoc&amp;quot;,&lt;br /&gt;
        [&amp;quot;main&amp;quot;] = &amp;quot;{{plural:$1|Główny %s: %s|Główne %s: %s}}&amp;quot;,&lt;br /&gt;
        [&amp;quot;main-category&amp;quot;] = &amp;quot;{{plural:$1|Głównym %s dla tej kategorii jest %s|Głównymi %s dla tej kategorii są %s}}&amp;quot;,&lt;br /&gt;
        [&amp;quot;other-uses&amp;quot;] = &amp;quot;innych znaczeń tego słowa&amp;quot;,&lt;br /&gt;
        [&amp;quot;page&amp;quot;] = &amp;quot;{{plural:$1|strona|strony}}&amp;quot;,&lt;br /&gt;
        [&amp;quot;pagetype-0&amp;quot;] = &amp;quot;{{plural:$1|artykuł|artykuły}}&amp;quot;,&lt;br /&gt;
        [&amp;quot;pagetype-14&amp;quot;] = &amp;quot;{{plural:$1|kategoria|kategorie}}&amp;quot;,&lt;br /&gt;
        [&amp;quot;section&amp;quot;] = &amp;quot;{{plural:$1|sekcja|sekcje}}&amp;quot;,&lt;br /&gt;
        [&amp;quot;see-also&amp;quot;] = &amp;quot;Zobacz też&amp;quot;,&lt;br /&gt;
        [&amp;quot;see-also2&amp;quot;] = &amp;quot;Zobacz też: %s&amp;quot;,&lt;br /&gt;
        [&amp;quot;similar-terms&amp;quot;] = &amp;quot;podobnych haseł&amp;quot;,&lt;br /&gt;
        [&amp;quot;topic&amp;quot;] = &amp;quot;ten temat&amp;quot;&lt;br /&gt;
    },&lt;br /&gt;
    [&amp;quot;pt&amp;quot;] = {&lt;br /&gt;
        [&amp;quot;see-also&amp;quot;] = &amp;quot;Vê também&amp;quot;,&lt;br /&gt;
        [&amp;quot;see-also2&amp;quot;] = &amp;quot;Vê também: %s&amp;quot;&lt;br /&gt;
    },&lt;br /&gt;
    [&amp;quot;pt-br&amp;quot;] = {&lt;br /&gt;
        [&amp;quot;about&amp;quot;] = &amp;quot;Este %s é sobre %s. &amp;quot;,&lt;br /&gt;
        [&amp;quot;altSeparator&amp;quot;] = &amp;quot;;&amp;quot;,&lt;br /&gt;
        [&amp;quot;article&amp;quot;] = &amp;quot;Artigo&amp;quot;,&lt;br /&gt;
        [&amp;quot;brackets&amp;quot;] = &amp;quot;%s (%s)&amp;quot;,&lt;br /&gt;
        [&amp;quot;cat-errors&amp;quot;] = &amp;quot;Predefinição de nota de cabeçalho com erros&amp;quot;,&lt;br /&gt;
        [&amp;quot;cat-unusual-parameters&amp;quot;] = &amp;quot;Predefinição de nota de cabeçalho usando parâmetros errados&amp;quot;,&lt;br /&gt;
        [&amp;quot;colon&amp;quot;] = &amp;quot;%s: %s&amp;quot;,&lt;br /&gt;
        [&amp;quot;conj-and&amp;quot;] = &amp;quot;e&amp;quot;,&lt;br /&gt;
        [&amp;quot;conj-or&amp;quot;] = &amp;quot;ou&amp;quot;,&lt;br /&gt;
        [&amp;quot;conjunction&amp;quot;] = &amp;quot;e&amp;quot;,&lt;br /&gt;
        [&amp;quot;details&amp;quot;] = &amp;quot;Para mais detalhes sobre %s, consulte %s.&amp;quot;,&lt;br /&gt;
        [&amp;quot;disambiguation&amp;quot;] = &amp;quot;desambiguação&amp;quot;,&lt;br /&gt;
        [&amp;quot;error&amp;quot;] = &amp;quot;&amp;lt;strong class=&#039;error&#039;&amp;gt;Erro: %s%s.&amp;lt;/strong&amp;gt;%s&amp;quot;,&lt;br /&gt;
        [&amp;quot;error-link&amp;quot;] = &amp;quot;nenhum link foi especificado&amp;quot;,&lt;br /&gt;
        [&amp;quot;error-pagename&amp;quot;] = &amp;quot;nenhum nome de página foi especificado&amp;quot;,&lt;br /&gt;
        [&amp;quot;error-text&amp;quot;] = &amp;quot;nenhum texto especificado&amp;quot;,&lt;br /&gt;
        [&amp;quot;for&amp;quot;] = &amp;quot;Para %s, veja %s.&amp;quot;,&lt;br /&gt;
        [&amp;quot;further&amp;quot;] = &amp;quot;Outras informações&amp;quot;,&lt;br /&gt;
        [&amp;quot;further2&amp;quot;] = &amp;quot;Outras informações: &amp;quot;,&lt;br /&gt;
        [&amp;quot;help&amp;quot;] = &amp;quot;ajuda&amp;quot;,&lt;br /&gt;
        [&amp;quot;main&amp;quot;] = &amp;quot;{{plural:$1|%s principal: %s|%ss principais: %s}}&amp;quot;,&lt;br /&gt;
        [&amp;quot;main-category&amp;quot;] = &amp;quot;{{plural:$1|O %s principal para esta categoria é %s|Os %ss principais para esta categoria são %s}}&amp;quot;,&lt;br /&gt;
        [&amp;quot;other-uses&amp;quot;] = &amp;quot;outros usos&amp;quot;,&lt;br /&gt;
        [&amp;quot;page&amp;quot;] = &amp;quot;página&amp;quot;,&lt;br /&gt;
        [&amp;quot;pagetype-0&amp;quot;] = &amp;quot;artigo&amp;quot;,&lt;br /&gt;
        [&amp;quot;pagetype-14&amp;quot;] = &amp;quot;categoria&amp;quot;,&lt;br /&gt;
        [&amp;quot;section&amp;quot;] = &amp;quot;seção&amp;quot;,&lt;br /&gt;
        [&amp;quot;see-also&amp;quot;] = &amp;quot;Veja também&amp;quot;,&lt;br /&gt;
        [&amp;quot;see-also2&amp;quot;] = &amp;quot;Veja também: %s&amp;quot;,&lt;br /&gt;
        [&amp;quot;separator&amp;quot;] = &amp;quot;,&amp;quot;,&lt;br /&gt;
        [&amp;quot;similar-terms&amp;quot;] = &amp;quot;termos semelhantes&amp;quot;,&lt;br /&gt;
        [&amp;quot;space&amp;quot;] = &amp;quot;&amp;amp;#32;&amp;quot;,&lt;br /&gt;
        [&amp;quot;topic&amp;quot;] = &amp;quot;este tópico&amp;quot;&lt;br /&gt;
    },&lt;br /&gt;
    [&amp;quot;ru&amp;quot;] = {&lt;br /&gt;
        [&amp;quot;about&amp;quot;] = &amp;quot;Эта %s про %s.&amp;quot;,&lt;br /&gt;
        [&amp;quot;altSeparator&amp;quot;] = &amp;quot;;&amp;quot;,&lt;br /&gt;
        [&amp;quot;article&amp;quot;] = &amp;quot;{{plural:$1|статья|статьи}}&amp;quot;,&lt;br /&gt;
        [&amp;quot;brackets&amp;quot;] = &amp;quot;%s (%s)&amp;quot;,&lt;br /&gt;
        [&amp;quot;cat-errors&amp;quot;] = &amp;quot;Шаблоны ссылок с ошибками&amp;quot;,&lt;br /&gt;
        [&amp;quot;cat-unusual-parameters&amp;quot;] = &amp;quot;Шаблон Hatnote, использующий необычные аргументы&amp;quot;,&lt;br /&gt;
        [&amp;quot;colon&amp;quot;] = &amp;quot;%s: %s&amp;quot;,&lt;br /&gt;
        [&amp;quot;conj-and&amp;quot;] = &amp;quot;и&amp;quot;,&lt;br /&gt;
        [&amp;quot;conj-or&amp;quot;] = &amp;quot;или&amp;quot;,&lt;br /&gt;
        [&amp;quot;conjunction&amp;quot;] = &amp;quot;и&amp;quot;,&lt;br /&gt;
        [&amp;quot;details&amp;quot;] = &amp;quot;Подробнее про %s, см. %s.&amp;quot;,&lt;br /&gt;
        [&amp;quot;disambiguation&amp;quot;] = &amp;quot;неоднозначность&amp;quot;,&lt;br /&gt;
        [&amp;quot;error&amp;quot;] = &amp;quot;&amp;lt;strong class=&#039;error&#039;&amp;gt;Ошибка: %s%s.&amp;lt;/strong&amp;gt;%s&amp;quot;,&lt;br /&gt;
        [&amp;quot;error-link&amp;quot;] = &amp;quot;не указана ссылка&amp;quot;,&lt;br /&gt;
        [&amp;quot;error-pagename&amp;quot;] = &amp;quot;{{plural:$1|название страницы не указано|названия страниц не указаны}}&amp;quot;,&lt;br /&gt;
        [&amp;quot;error-text&amp;quot;] = &amp;quot;текст шаблона не указан&amp;quot;,&lt;br /&gt;
        [&amp;quot;for&amp;quot;] = &amp;quot;Если вы ищете %s, смотрите %s.&amp;quot;,&lt;br /&gt;
        [&amp;quot;further&amp;quot;] = &amp;quot;Дальнейшая информация&amp;quot;,&lt;br /&gt;
        [&amp;quot;further2&amp;quot;] = &amp;quot;Дальнейшая информация:&amp;amp;#32;&amp;quot;,&lt;br /&gt;
        [&amp;quot;help&amp;quot;] = &amp;quot;справка&amp;quot;,&lt;br /&gt;
        [&amp;quot;main&amp;quot;] = &amp;quot;{{plural:$1|Основная %s: %s|Основные %s: %s}}&amp;quot;,&lt;br /&gt;
        [&amp;quot;main-category&amp;quot;] = &amp;quot;{{plural:$1|Основная %s для этой категории: %s|Основные %s для этой категории: %s}}&amp;quot;,&lt;br /&gt;
        [&amp;quot;other-uses&amp;quot;] = &amp;quot;другую информацию&amp;quot;,&lt;br /&gt;
        [&amp;quot;page&amp;quot;] = &amp;quot;страница&amp;quot;,&lt;br /&gt;
        [&amp;quot;pagetype-0&amp;quot;] = &amp;quot;статья&amp;quot;,&lt;br /&gt;
        [&amp;quot;pagetype-14&amp;quot;] = &amp;quot;категория&amp;quot;,&lt;br /&gt;
        [&amp;quot;section&amp;quot;] = &amp;quot;раздел&amp;quot;,&lt;br /&gt;
        [&amp;quot;see-also&amp;quot;] = &amp;quot;См. также&amp;quot;,&lt;br /&gt;
        [&amp;quot;see-also2&amp;quot;] = &amp;quot;См. также: %s&amp;quot;,&lt;br /&gt;
        [&amp;quot;separator&amp;quot;] = &amp;quot;,&amp;quot;,&lt;br /&gt;
        [&amp;quot;similar-terms&amp;quot;] = &amp;quot;другие значения&amp;quot;,&lt;br /&gt;
        [&amp;quot;space&amp;quot;] = &amp;quot;&amp;amp;#32;&amp;quot;,&lt;br /&gt;
        [&amp;quot;topic&amp;quot;] = &amp;quot;эту тему&amp;quot;&lt;br /&gt;
    },&lt;br /&gt;
    [&amp;quot;th&amp;quot;] = {&lt;br /&gt;
        [&amp;quot;about&amp;quot;] = &amp;quot;%s นี้เกี่ยวกับ %s&amp;quot;,&lt;br /&gt;
        [&amp;quot;altSeparator&amp;quot;] = &amp;quot;;&amp;quot;,&lt;br /&gt;
        [&amp;quot;article&amp;quot;] = &amp;quot;บทความ&amp;quot;,&lt;br /&gt;
        [&amp;quot;brackets&amp;quot;] = &amp;quot;%s (%s)&amp;quot;,&lt;br /&gt;
        [&amp;quot;cat-errors&amp;quot;] = &amp;quot;แม่แบบ Hatnote มีข้อผิดพลาด&amp;quot;,&lt;br /&gt;
        [&amp;quot;cat-unusual-parameters&amp;quot;] = &amp;quot;แม่แบบ Hatnote ใช้พารามิเตอร์ที่ผิดปกติ&amp;quot;,&lt;br /&gt;
        [&amp;quot;colon&amp;quot;] = &amp;quot;%s: %s&amp;quot;,&lt;br /&gt;
        [&amp;quot;conj-and&amp;quot;] = &amp;quot;และ&amp;quot;,&lt;br /&gt;
        [&amp;quot;conj-or&amp;quot;] = &amp;quot;หรือ&amp;quot;,&lt;br /&gt;
        [&amp;quot;conjunction&amp;quot;] = &amp;quot;และ&amp;quot;,&lt;br /&gt;
        [&amp;quot;details&amp;quot;] = &amp;quot;สำหรับรายละเอียดเพิ่มเติมเกี่ยวกับ %s ดูเพิ่มเติมที่ %s&amp;quot;,&lt;br /&gt;
        [&amp;quot;disambiguation&amp;quot;] = &amp;quot;แก้ความกำกวม&amp;quot;,&lt;br /&gt;
        [&amp;quot;error&amp;quot;] = &amp;quot;&amp;lt;strong class=&#039;error&#039;&amp;gt;ข้อผิดพลาด: %s%s&amp;lt;/strong&amp;gt;%s&amp;quot;,&lt;br /&gt;
        [&amp;quot;error-link&amp;quot;] = &amp;quot;ไม่สามารถพบลิงก์&amp;quot;,&lt;br /&gt;
        [&amp;quot;error-pagename&amp;quot;] = &amp;quot;ไม่มีหน้า $1 ที่ระบุ&amp;quot;,&lt;br /&gt;
        [&amp;quot;error-text&amp;quot;] = &amp;quot;ไม่ได้มีการระบุข้อความ&amp;quot;,&lt;br /&gt;
        [&amp;quot;for&amp;quot;] = &amp;quot;สําหรับ %s ดูเพิ่มเติมที่ %s&amp;quot;,&lt;br /&gt;
        [&amp;quot;further&amp;quot;] = &amp;quot;ข้อมูลเพิ่มเติม&amp;quot;,&lt;br /&gt;
        [&amp;quot;further2&amp;quot;] = &amp;quot;ข้อมูลเพิ่มเติม:&amp;amp;#32;&amp;quot;,&lt;br /&gt;
        [&amp;quot;help&amp;quot;] = &amp;quot;ช่วยเหลือ&amp;quot;,&lt;br /&gt;
        [&amp;quot;main&amp;quot;] = &amp;quot;{{plural:$1|%sหลัก: %s|%ssหลัก: %s}}&amp;quot;,&lt;br /&gt;
        [&amp;quot;main-category&amp;quot;] = &amp;quot;{{plural:$1|%s หลักสำหรับหมวดหมู่นี้คือ %s|%ss หลักสำหรับหมวดหมู่นี้คือ %s}}&amp;quot;,&lt;br /&gt;
        [&amp;quot;other-uses&amp;quot;] = &amp;quot;ผู้ใช้อื่น&amp;quot;,&lt;br /&gt;
        [&amp;quot;page&amp;quot;] = &amp;quot;หน้า&amp;quot;,&lt;br /&gt;
        [&amp;quot;pagetype-0&amp;quot;] = &amp;quot;บทความ&amp;quot;,&lt;br /&gt;
        [&amp;quot;pagetype-14&amp;quot;] = &amp;quot;หมวดหมู่&amp;quot;,&lt;br /&gt;
        [&amp;quot;section&amp;quot;] = &amp;quot;ส่วน&amp;quot;,&lt;br /&gt;
        [&amp;quot;see-also&amp;quot;] = &amp;quot;ดูเพิ่มเติม&amp;quot;,&lt;br /&gt;
        [&amp;quot;see-also2&amp;quot;] = &amp;quot;ดูเพิ่มเติม: %s&amp;quot;,&lt;br /&gt;
        [&amp;quot;separator&amp;quot;] = &amp;quot;,&amp;quot;,&lt;br /&gt;
        [&amp;quot;similar-terms&amp;quot;] = &amp;quot;คำที่คล้ายกัน&amp;quot;,&lt;br /&gt;
        [&amp;quot;space&amp;quot;] = &amp;quot;&amp;amp;#32;&amp;quot;,&lt;br /&gt;
        [&amp;quot;topic&amp;quot;] = &amp;quot;หัวข้อนี้&amp;quot;&lt;br /&gt;
    },&lt;br /&gt;
    [&amp;quot;tl&amp;quot;] = {&lt;br /&gt;
        [&amp;quot;about&amp;quot;] = &amp;quot;Ang %s na ito ay tungkol sa %s.&amp;quot;,&lt;br /&gt;
        [&amp;quot;article&amp;quot;] = &amp;quot;artikulo&amp;quot;,&lt;br /&gt;
        [&amp;quot;brackets&amp;quot;] = &amp;quot;%s (%s)&amp;quot;,&lt;br /&gt;
        [&amp;quot;cat-errors&amp;quot;] = &amp;quot;Mga template ng hatnote na may mga error&amp;quot;,&lt;br /&gt;
        [&amp;quot;cat-unusual-parameters&amp;quot;] = &amp;quot;Mga template ng hatnote na gumagamit ng hindi pangkaraniwang mga parameter\n&amp;quot;,&lt;br /&gt;
        [&amp;quot;colon&amp;quot;] = &amp;quot;%s: %s&amp;quot;,&lt;br /&gt;
        [&amp;quot;conj-and&amp;quot;] = &amp;quot;at&amp;quot;,&lt;br /&gt;
        [&amp;quot;conj-or&amp;quot;] = &amp;quot;o&amp;quot;,&lt;br /&gt;
        [&amp;quot;conjunction&amp;quot;] = &amp;quot;at&amp;quot;,&lt;br /&gt;
        [&amp;quot;details&amp;quot;] = &amp;quot;Para sa karagdagang detalye tungkol sa %s, tingnan ang %s.&amp;quot;,&lt;br /&gt;
        [&amp;quot;disambiguation&amp;quot;] = &amp;quot;paglilinaw&amp;quot;,&lt;br /&gt;
        [&amp;quot;error-link&amp;quot;] = &amp;quot;Walang tinukoy na link&amp;quot;,&lt;br /&gt;
        [&amp;quot;error-pagename&amp;quot;] = &amp;quot;Walang tinukoy na {{plural:$1|pamagat ng pahina|mga pamagat ng pahina}}&amp;quot;,&lt;br /&gt;
        [&amp;quot;error-text&amp;quot;] = &amp;quot;Walang teksto ang tinukoy.\n&amp;quot;,&lt;br /&gt;
        [&amp;quot;for&amp;quot;] = &amp;quot;Para sa %s, tingnan ang %s.\n&amp;quot;,&lt;br /&gt;
        [&amp;quot;further&amp;quot;] = &amp;quot;Karagdagang impormasyon&amp;quot;,&lt;br /&gt;
        [&amp;quot;further2&amp;quot;] = &amp;quot;Karagdagang impormasyon:&amp;amp;#32;&amp;quot;,&lt;br /&gt;
        [&amp;quot;help&amp;quot;] = &amp;quot;tumulong\n&amp;quot;,&lt;br /&gt;
        [&amp;quot;main-category&amp;quot;] = &amp;quot;{{plural:$1|Ang pangunahing %s para sa kategoryang ito ay %s|Ang mga pangunahing %ss para sa kategoryang ito ay %s}}\n&amp;quot;,&lt;br /&gt;
        [&amp;quot;other-uses&amp;quot;] = &amp;quot;ibang gamit\n&amp;quot;,&lt;br /&gt;
        [&amp;quot;page&amp;quot;] = &amp;quot;pahina\n&amp;quot;,&lt;br /&gt;
        [&amp;quot;pagetype-0&amp;quot;] = &amp;quot;artikulo\n&amp;quot;,&lt;br /&gt;
        [&amp;quot;pagetype-14&amp;quot;] = &amp;quot;kategorya\n&amp;quot;,&lt;br /&gt;
        [&amp;quot;section&amp;quot;] = &amp;quot;bahagi&amp;quot;,&lt;br /&gt;
        [&amp;quot;see-also&amp;quot;] = &amp;quot;Tingnan din&amp;quot;,&lt;br /&gt;
        [&amp;quot;see-also2&amp;quot;] = &amp;quot;Tingnan din: %s&amp;quot;,&lt;br /&gt;
        [&amp;quot;separator&amp;quot;] = &amp;quot;,&amp;quot;,&lt;br /&gt;
        [&amp;quot;similar-terms&amp;quot;] = &amp;quot;mga katulad na termino&amp;quot;,&lt;br /&gt;
        [&amp;quot;space&amp;quot;] = &amp;quot;&amp;amp;#32;&amp;quot;,&lt;br /&gt;
        [&amp;quot;topic&amp;quot;] = &amp;quot;ang paksang ito\n&amp;quot;&lt;br /&gt;
    },&lt;br /&gt;
    [&amp;quot;tr&amp;quot;] = {&lt;br /&gt;
        [&amp;quot;about&amp;quot;] = &amp;quot;Bu %s, %s hakkındadır. &amp;quot;,&lt;br /&gt;
        [&amp;quot;altSeparator&amp;quot;] = &amp;quot;;&amp;quot;,&lt;br /&gt;
        [&amp;quot;article&amp;quot;] = &amp;quot;madde&amp;quot;,&lt;br /&gt;
        [&amp;quot;brackets&amp;quot;] = &amp;quot;%s (%s)&amp;quot;,&lt;br /&gt;
        [&amp;quot;cat-errors&amp;quot;] = &amp;quot;Hatalı hatnote şablonları&amp;quot;,&lt;br /&gt;
        [&amp;quot;cat-unusual-parameters&amp;quot;] = &amp;quot;Olağandışı parametreler kullanan hatnote şablonları&amp;quot;,&lt;br /&gt;
        [&amp;quot;colon&amp;quot;] = &amp;quot;%s: %s&amp;quot;,&lt;br /&gt;
        [&amp;quot;conj-and&amp;quot;] = &amp;quot;ve&amp;quot;,&lt;br /&gt;
        [&amp;quot;conj-or&amp;quot;] = &amp;quot;veya&amp;quot;,&lt;br /&gt;
        [&amp;quot;conjunction&amp;quot;] = &amp;quot;ve&amp;quot;,&lt;br /&gt;
        [&amp;quot;details&amp;quot;] = &amp;quot;%s sayfasında daha fazla ayrıntı için %s sayfasına bakın.&amp;quot;,&lt;br /&gt;
        [&amp;quot;disambiguation&amp;quot;] = &amp;quot;anlam ayrımı&amp;quot;,&lt;br /&gt;
        [&amp;quot;error&amp;quot;] = &amp;quot;&amp;lt;strong class=&#039;error&#039;&amp;gt;Hata: %s%s.&amp;lt;/strong&amp;gt;%s&amp;quot;,&lt;br /&gt;
        [&amp;quot;error-link&amp;quot;] = &amp;quot;bağlantı belirtilmedi&amp;quot;,&lt;br /&gt;
        [&amp;quot;error-pagename&amp;quot;] = &amp;quot;{{plural:$1|sayfa adı|sayfa adları}} belirtilmedi&amp;quot;,&lt;br /&gt;
        [&amp;quot;error-text&amp;quot;] = &amp;quot;metin belirtilmedi&amp;quot;,&lt;br /&gt;
        [&amp;quot;for&amp;quot;] = &amp;quot;%s için %s sayfasına bakın.&amp;quot;,&lt;br /&gt;
        [&amp;quot;further&amp;quot;] = &amp;quot;Daha fazla bilgi&amp;quot;,&lt;br /&gt;
        [&amp;quot;further2&amp;quot;] = &amp;quot;Daha fazla bilgi: &amp;quot;,&lt;br /&gt;
        [&amp;quot;help&amp;quot;] = &amp;quot;yardım&amp;quot;,&lt;br /&gt;
        [&amp;quot;main&amp;quot;] = &amp;quot;{{plural:$1|Ana %s: %s|Ana %s: %s}}&amp;quot;,&lt;br /&gt;
        [&amp;quot;main-category&amp;quot;] = &amp;quot;{{plural:$1|Bu kategori için ana %s, %s sayfasıdır}}&amp;quot;,&lt;br /&gt;
        [&amp;quot;other-uses&amp;quot;] = &amp;quot;diğer kullanımlar&amp;quot;,&lt;br /&gt;
        [&amp;quot;page&amp;quot;] = &amp;quot;sayfa&amp;quot;,&lt;br /&gt;
        [&amp;quot;pagetype-0&amp;quot;] = &amp;quot;madde&amp;quot;,&lt;br /&gt;
        [&amp;quot;pagetype-14&amp;quot;] = &amp;quot;kategori&amp;quot;,&lt;br /&gt;
        [&amp;quot;section&amp;quot;] = &amp;quot;bölüm&amp;quot;,&lt;br /&gt;
        [&amp;quot;see-also&amp;quot;] = &amp;quot;Ayrıca bakınız&amp;quot;,&lt;br /&gt;
        [&amp;quot;see-also2&amp;quot;] = &amp;quot;Ayrıca bakınız: %s&amp;quot;,&lt;br /&gt;
        [&amp;quot;separator&amp;quot;] = &amp;quot;,&amp;quot;,&lt;br /&gt;
        [&amp;quot;similar-terms&amp;quot;] = &amp;quot;benzer terimler&amp;quot;,&lt;br /&gt;
        [&amp;quot;space&amp;quot;] = &amp;quot;&amp;amp;#32;&amp;quot;,&lt;br /&gt;
        [&amp;quot;topic&amp;quot;] = &amp;quot;bu konu&amp;quot;&lt;br /&gt;
    },&lt;br /&gt;
    [&amp;quot;uk&amp;quot;] = {&lt;br /&gt;
        [&amp;quot;about&amp;quot;] = &amp;quot;Ця %s про %s.&amp;quot;,&lt;br /&gt;
        [&amp;quot;article&amp;quot;] = &amp;quot;{{plural:$1|стаття|статті}}&amp;quot;,&lt;br /&gt;
        [&amp;quot;cat-errors&amp;quot;] = &amp;quot;Шаблони посилань з помилками&amp;quot;,&lt;br /&gt;
        [&amp;quot;cat-unusual-parameters&amp;quot;] = &amp;quot;Шаблон Hatnote, що використовує незвичайні аргументи?&amp;quot;,&lt;br /&gt;
        [&amp;quot;conj-and&amp;quot;] = &amp;quot;і&amp;quot;,&lt;br /&gt;
        [&amp;quot;conj-or&amp;quot;] = &amp;quot;або&amp;quot;,&lt;br /&gt;
        [&amp;quot;conjunction&amp;quot;] = &amp;quot;і&amp;quot;,&lt;br /&gt;
        [&amp;quot;details&amp;quot;] = &amp;quot;Детально про %s, див. %s.&amp;quot;,&lt;br /&gt;
        [&amp;quot;disambiguation&amp;quot;] = &amp;quot;неоднозначність&amp;quot;,&lt;br /&gt;
        [&amp;quot;error&amp;quot;] = &amp;quot;&amp;lt;strong class=&#039;error&#039;&amp;gt;Помилка: %s%s.&amp;lt;/strong&amp;gt;%s&amp;quot;,&lt;br /&gt;
        [&amp;quot;error-link&amp;quot;] = &amp;quot;не вказане посилання&amp;quot;,&lt;br /&gt;
        [&amp;quot;error-pagename&amp;quot;] = &amp;quot;{{plural:$1|назву сторінки не вказано|назви сторінок не вказано}}&amp;quot;,&lt;br /&gt;
        [&amp;quot;error-text&amp;quot;] = &amp;quot;текст шаблону не вказаний&amp;quot;,&lt;br /&gt;
        [&amp;quot;for&amp;quot;] = &amp;quot;Якщо ви шукаєте %s, дивіться %s.&amp;quot;,&lt;br /&gt;
        [&amp;quot;further&amp;quot;] = &amp;quot;Подальша інформація&amp;quot;,&lt;br /&gt;
        [&amp;quot;further2&amp;quot;] = &amp;quot;Подальша інформація: &amp;quot;,&lt;br /&gt;
        [&amp;quot;help&amp;quot;] = &amp;quot;довідка&amp;quot;,&lt;br /&gt;
        [&amp;quot;main&amp;quot;] = &amp;quot;{{plural:$1|Загальна %s: %s|Загальні %s: %s}}&amp;quot;,&lt;br /&gt;
        [&amp;quot;main-category&amp;quot;] = &amp;quot;{{plural:$1|Загальна %s для цієї категорії: %s|Загальні %s для цієї категорії: %s}}&amp;quot;,&lt;br /&gt;
        [&amp;quot;other-uses&amp;quot;] = &amp;quot;іншу інформацію&amp;quot;,&lt;br /&gt;
        [&amp;quot;page&amp;quot;] = &amp;quot;сторінка&amp;quot;,&lt;br /&gt;
        [&amp;quot;pagetype-0&amp;quot;] = &amp;quot;стаття&amp;quot;,&lt;br /&gt;
        [&amp;quot;pagetype-14&amp;quot;] = &amp;quot;категорія&amp;quot;,&lt;br /&gt;
        [&amp;quot;section&amp;quot;] = &amp;quot;розділ&amp;quot;,&lt;br /&gt;
        [&amp;quot;see-also&amp;quot;] = &amp;quot;Див. також&amp;quot;,&lt;br /&gt;
        [&amp;quot;see-also2&amp;quot;] = &amp;quot;Див. також: %s&amp;quot;,&lt;br /&gt;
        [&amp;quot;similar-terms&amp;quot;] = &amp;quot;інші значення&amp;quot;,&lt;br /&gt;
        [&amp;quot;topic&amp;quot;] = &amp;quot;цю тему&amp;quot;&lt;br /&gt;
    },&lt;br /&gt;
    [&amp;quot;vi&amp;quot;] = {&lt;br /&gt;
        [&amp;quot;about&amp;quot;] = &amp;quot;%s này viết về %s.&amp;quot;,&lt;br /&gt;
        [&amp;quot;altSeparator&amp;quot;] = &amp;quot;;&amp;quot;,&lt;br /&gt;
        [&amp;quot;article&amp;quot;] = &amp;quot;Bài viết&amp;quot;,&lt;br /&gt;
        [&amp;quot;brackets&amp;quot;] = &amp;quot;%s (%s)&amp;quot;,&lt;br /&gt;
        [&amp;quot;cat-errors&amp;quot;] = &amp;quot;Bản mẫu Hatnote có lỗi&amp;quot;,&lt;br /&gt;
        [&amp;quot;cat-unusual-parameters&amp;quot;] = &amp;quot;Bản mẫu Hatnote sử dụng tham số bất thường&amp;quot;,&lt;br /&gt;
        [&amp;quot;colon&amp;quot;] = &amp;quot;%s: %s&amp;quot;,&lt;br /&gt;
        [&amp;quot;conj-and&amp;quot;] = &amp;quot;và&amp;quot;,&lt;br /&gt;
        [&amp;quot;conj-or&amp;quot;] = &amp;quot;hoặc&amp;quot;,&lt;br /&gt;
        [&amp;quot;conjunction&amp;quot;] = &amp;quot;và&amp;quot;,&lt;br /&gt;
        [&amp;quot;details&amp;quot;] = &amp;quot;Để xem thêm chi tiết về %s, xem %s.&amp;quot;,&lt;br /&gt;
        [&amp;quot;disambiguation&amp;quot;] = &amp;quot;định hướng&amp;quot;,&lt;br /&gt;
        [&amp;quot;error&amp;quot;] = &amp;quot;&amp;lt;strong class=&#039;error&#039;&amp;gt;Lỗi: %s%s.&amp;lt;/strong&amp;gt;%s&amp;quot;,&lt;br /&gt;
        [&amp;quot;error-link&amp;quot;] = &amp;quot;không có liên kết nào được chỉ rõ&amp;quot;,&lt;br /&gt;
        [&amp;quot;error-pagename&amp;quot;] = &amp;quot;không có {{plural:$1|tên trang|tên trang}} nào được chỉ rõ&amp;quot;,&lt;br /&gt;
        [&amp;quot;error-text&amp;quot;] = &amp;quot;không có văn bản được chỉ rõ&amp;quot;,&lt;br /&gt;
        [&amp;quot;for&amp;quot;] = &amp;quot;Đối với %s, xem %s.&amp;quot;,&lt;br /&gt;
        [&amp;quot;further&amp;quot;] = &amp;quot;Thông tin thêm&amp;quot;,&lt;br /&gt;
        [&amp;quot;further2&amp;quot;] = &amp;quot;Thông tin thêm:&amp;amp;#32;&amp;quot;,&lt;br /&gt;
        [&amp;quot;help&amp;quot;] = &amp;quot;trợ giúp&amp;quot;,&lt;br /&gt;
        [&amp;quot;main&amp;quot;] = &amp;quot;%s chính: %s&amp;quot;,&lt;br /&gt;
        [&amp;quot;main-category&amp;quot;] = &amp;quot;{{plural:$1|%s chính cho thể loại này là %s|%ss chính cho thể loại này là %s}}&amp;quot;,&lt;br /&gt;
        [&amp;quot;other-uses&amp;quot;] = &amp;quot;các định nghĩa khác&amp;quot;,&lt;br /&gt;
        [&amp;quot;page&amp;quot;] = &amp;quot;Trang&amp;quot;,&lt;br /&gt;
        [&amp;quot;pagetype-0&amp;quot;] = &amp;quot;Bài viết&amp;quot;,&lt;br /&gt;
        [&amp;quot;pagetype-14&amp;quot;] = &amp;quot;Thể loại&amp;quot;,&lt;br /&gt;
        [&amp;quot;section&amp;quot;] = &amp;quot;Đoạn&amp;quot;,&lt;br /&gt;
        [&amp;quot;see-also&amp;quot;] = &amp;quot;Xem thêm&amp;quot;,&lt;br /&gt;
        [&amp;quot;see-also2&amp;quot;] = &amp;quot;Xem thêm: %s&amp;quot;,&lt;br /&gt;
        [&amp;quot;separator&amp;quot;] = &amp;quot;,&amp;quot;,&lt;br /&gt;
        [&amp;quot;similar-terms&amp;quot;] = &amp;quot;thuật ngữ tương tự&amp;quot;,&lt;br /&gt;
        [&amp;quot;space&amp;quot;] = &amp;quot;&amp;amp;#32;&amp;quot;,&lt;br /&gt;
        [&amp;quot;topic&amp;quot;] = &amp;quot;chủ đề này&amp;quot;&lt;br /&gt;
    },&lt;br /&gt;
    [&amp;quot;zh-hans&amp;quot;] = {&lt;br /&gt;
        [&amp;quot;about&amp;quot;] = &amp;quot;本%s的主题是%s。&amp;quot;,&lt;br /&gt;
        [&amp;quot;altSeparator&amp;quot;] = &amp;quot;；&amp;quot;,&lt;br /&gt;
        [&amp;quot;article&amp;quot;] = &amp;quot;条目&amp;quot;,&lt;br /&gt;
        [&amp;quot;brackets&amp;quot;] = &amp;quot;%s (%s)&amp;quot;,&lt;br /&gt;
        [&amp;quot;cat-errors&amp;quot;] = &amp;quot;有错误的顶注模板&amp;quot;,&lt;br /&gt;
        [&amp;quot;cat-unusual-parameters&amp;quot;] = &amp;quot;使用异常参数的顶注模板&amp;quot;,&lt;br /&gt;
        [&amp;quot;colon&amp;quot;] = &amp;quot;%s：%s&amp;quot;,&lt;br /&gt;
        [&amp;quot;conj-and&amp;quot;] = &amp;quot;和&amp;quot;,&lt;br /&gt;
        [&amp;quot;conj-or&amp;quot;] = &amp;quot;或&amp;quot;,&lt;br /&gt;
        [&amp;quot;conjunction&amp;quot;] = &amp;quot;和&amp;quot;,&lt;br /&gt;
        [&amp;quot;details&amp;quot;] = &amp;quot;关于%s的更多详情，请见%s。&amp;quot;,&lt;br /&gt;
        [&amp;quot;disambiguation&amp;quot;] = &amp;quot;消歧义&amp;quot;,&lt;br /&gt;
        [&amp;quot;error&amp;quot;] = &amp;quot;&amp;lt;strong class=&#039;error&#039;&amp;gt;错误：%s%s。&amp;lt;/strong&amp;gt;%s&amp;quot;,&lt;br /&gt;
        [&amp;quot;error-link&amp;quot;] = &amp;quot;没有填写链接&amp;quot;,&lt;br /&gt;
        [&amp;quot;error-pagename&amp;quot;] = &amp;quot;没有填写{{plural:$1|页面名称|页面名称}}&amp;quot;,&lt;br /&gt;
        [&amp;quot;error-text&amp;quot;] = &amp;quot;没有填写内容&amp;quot;,&lt;br /&gt;
        [&amp;quot;for&amp;quot;] = &amp;quot;关于%s，请见%s。&amp;quot;,&lt;br /&gt;
        [&amp;quot;further&amp;quot;] = &amp;quot;更多信息&amp;quot;,&lt;br /&gt;
        [&amp;quot;further2&amp;quot;] = &amp;quot;更多信息：&amp;quot;,&lt;br /&gt;
        [&amp;quot;help&amp;quot;] = &amp;quot;帮助&amp;quot;,&lt;br /&gt;
        [&amp;quot;main&amp;quot;] = &amp;quot;{{plural:$1|主%s：%s|主%s：%s}}&amp;quot;,&lt;br /&gt;
        [&amp;quot;main-category&amp;quot;] = &amp;quot;{{plural:$1|本分类的主%s是%s|本分类的主%s是%s}}&amp;quot;,&lt;br /&gt;
        [&amp;quot;other-uses&amp;quot;] = &amp;quot;其他用法&amp;quot;,&lt;br /&gt;
        [&amp;quot;page&amp;quot;] = &amp;quot;页面&amp;quot;,&lt;br /&gt;
        [&amp;quot;pagetype-0&amp;quot;] = &amp;quot;条目&amp;quot;,&lt;br /&gt;
        [&amp;quot;pagetype-14&amp;quot;] = &amp;quot;分类&amp;quot;,&lt;br /&gt;
        [&amp;quot;section&amp;quot;] = &amp;quot;章节&amp;quot;,&lt;br /&gt;
        [&amp;quot;see-also&amp;quot;] = &amp;quot;另见&amp;quot;,&lt;br /&gt;
        [&amp;quot;see-also2&amp;quot;] = &amp;quot;另见：%s&amp;quot;,&lt;br /&gt;
        [&amp;quot;separator&amp;quot;] = &amp;quot;、&amp;quot;,&lt;br /&gt;
        [&amp;quot;similar-terms&amp;quot;] = &amp;quot;相似术语&amp;quot;,&lt;br /&gt;
        [&amp;quot;space&amp;quot;] = &amp;quot;&amp;amp;zwnj;&amp;quot;,&lt;br /&gt;
        [&amp;quot;topic&amp;quot;] = &amp;quot;本主题&amp;quot;&lt;br /&gt;
    },&lt;br /&gt;
    [&amp;quot;zh-hant&amp;quot;] = {&lt;br /&gt;
        [&amp;quot;about&amp;quot;] = &amp;quot;本%s的主題是%s。&amp;quot;,&lt;br /&gt;
        [&amp;quot;altSeparator&amp;quot;] = &amp;quot;；&amp;quot;,&lt;br /&gt;
        [&amp;quot;article&amp;quot;] = &amp;quot;條目&amp;quot;,&lt;br /&gt;
        [&amp;quot;brackets&amp;quot;] = &amp;quot;%s (%s)&amp;quot;,&lt;br /&gt;
        [&amp;quot;cat-errors&amp;quot;] = &amp;quot;有錯誤的頂註模板&amp;quot;,&lt;br /&gt;
        [&amp;quot;cat-unusual-parameters&amp;quot;] = &amp;quot;使用異常參數的頂註模板&amp;quot;,&lt;br /&gt;
        [&amp;quot;colon&amp;quot;] = &amp;quot;%s：%s&amp;quot;,&lt;br /&gt;
        [&amp;quot;conj-and&amp;quot;] = &amp;quot;和&amp;quot;,&lt;br /&gt;
        [&amp;quot;conj-or&amp;quot;] = &amp;quot;或&amp;quot;,&lt;br /&gt;
        [&amp;quot;conjunction&amp;quot;] = &amp;quot;和&amp;quot;,&lt;br /&gt;
        [&amp;quot;details&amp;quot;] = &amp;quot;關於%s的更多細節，請見%s。&amp;quot;,&lt;br /&gt;
        [&amp;quot;disambiguation&amp;quot;] = &amp;quot;消歧義&amp;quot;,&lt;br /&gt;
        [&amp;quot;error&amp;quot;] = &amp;quot;&amp;lt;strong class=&#039;error&#039;&amp;gt;錯誤：%s%s。&amp;lt;/strong&amp;gt;%s&amp;quot;,&lt;br /&gt;
        [&amp;quot;error-link&amp;quot;] = &amp;quot;沒有填寫連結&amp;quot;,&lt;br /&gt;
        [&amp;quot;error-pagename&amp;quot;] = &amp;quot;沒有填寫{{plural:$1|頁面名稱|頁面名稱}}&amp;quot;,&lt;br /&gt;
        [&amp;quot;error-text&amp;quot;] = &amp;quot;沒有填寫內容&amp;quot;,&lt;br /&gt;
        [&amp;quot;for&amp;quot;] = &amp;quot;關於%s，請見%s。&amp;quot;,&lt;br /&gt;
        [&amp;quot;further&amp;quot;] = &amp;quot;更多資訊&amp;quot;,&lt;br /&gt;
        [&amp;quot;further2&amp;quot;] = &amp;quot;更多資訊：&amp;quot;,&lt;br /&gt;
        [&amp;quot;help&amp;quot;] = &amp;quot;說明&amp;quot;,&lt;br /&gt;
        [&amp;quot;main&amp;quot;] = &amp;quot;{{plural:$1|主%s：%s|主%s：%s}}&amp;quot;,&lt;br /&gt;
        [&amp;quot;main-category&amp;quot;] = &amp;quot;{{plural:$1|本分類的主%s是%s|本分類的主%s是%s}}&amp;quot;,&lt;br /&gt;
        [&amp;quot;other-uses&amp;quot;] = &amp;quot;其他用法&amp;quot;,&lt;br /&gt;
        [&amp;quot;page&amp;quot;] = &amp;quot;頁面&amp;quot;,&lt;br /&gt;
        [&amp;quot;pagetype-0&amp;quot;] = &amp;quot;條目&amp;quot;,&lt;br /&gt;
        [&amp;quot;pagetype-14&amp;quot;] = &amp;quot;分類&amp;quot;,&lt;br /&gt;
        [&amp;quot;section&amp;quot;] = &amp;quot;章節&amp;quot;,&lt;br /&gt;
        [&amp;quot;see-also&amp;quot;] = &amp;quot;參見&amp;quot;,&lt;br /&gt;
        [&amp;quot;see-also2&amp;quot;] = &amp;quot;參見：%s&amp;quot;,&lt;br /&gt;
        [&amp;quot;separator&amp;quot;] = &amp;quot;、&amp;quot;,&lt;br /&gt;
        [&amp;quot;similar-terms&amp;quot;] = &amp;quot;相似術語&amp;quot;,&lt;br /&gt;
        [&amp;quot;space&amp;quot;] = &amp;quot;&amp;amp;zwnj;&amp;quot;,&lt;br /&gt;
        [&amp;quot;topic&amp;quot;] = &amp;quot;本主題&amp;quot;&lt;br /&gt;
    }&lt;br /&gt;
}&lt;br /&gt;
-- &amp;lt;/nowiki&amp;gt;&lt;/div&gt;</summary>
		<author><name>WikiAdmin</name></author>
	</entry>
	<entry>
		<id>https://unimage.wcnm.pw/index.php?title=%E6%A8%A1%E5%9D%97:Dev/Hatnote&amp;diff=708</id>
		<title>模块:Dev/Hatnote</title>
		<link rel="alternate" type="text/html" href="https://unimage.wcnm.pw/index.php?title=%E6%A8%A1%E5%9D%97:Dev/Hatnote&amp;diff=708"/>
		<updated>2026-08-31T12:54:42Z</updated>

		<summary type="html">&lt;p&gt;WikiAdmin：​从 Fandom Developer Wiki 本地化全局模块，源修订 214904&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;-- 来源：https://dev.fandom.com/wiki/Module%3AHatnote&lt;br /&gt;
-- 许可：CC BY-SA，作者与修订记录见来源页面&lt;br /&gt;
-- &amp;lt;nowiki&amp;gt;&lt;br /&gt;
--------------------------------------------------------------------------------&lt;br /&gt;
--                              Module:Hatnote                                --&lt;br /&gt;
--                                                                            --&lt;br /&gt;
-- This module produces hatnote links and links to related articles. It       --&lt;br /&gt;
-- implements the {{hatnote}} and {{format link}} meta-templates and includes --&lt;br /&gt;
-- helper functions for other Lua hatnote modules.                            --&lt;br /&gt;
--------------------------------------------------------------------------------&lt;br /&gt;
&lt;br /&gt;
local libraryUtil = require(&#039;libraryUtil&#039;)&lt;br /&gt;
local checkType = libraryUtil.checkType&lt;br /&gt;
local mArguments = require(&#039;Module:Dev/Arguments&#039;)&lt;br /&gt;
local yesno = require(&#039;Module:Dev/Yesno&#039;)&lt;br /&gt;
local mTableTools = require(&#039;Module:Dev/TableTools&#039;)&lt;br /&gt;
local i18n = require(&#039;Module:Dev/I18n&#039;).loadMessages(&#039;Hatnote&#039;)&lt;br /&gt;
local hatnote = {}&lt;br /&gt;
&lt;br /&gt;
--------------------------------------------------------------------------------&lt;br /&gt;
-- Helper functions&lt;br /&gt;
--------------------------------------------------------------------------------&lt;br /&gt;
&lt;br /&gt;
local function getArgs(frame)&lt;br /&gt;
    -- Fetches the arguments from the parent frame. Whitespace is trimmed and&lt;br /&gt;
    -- blanks are removed.&lt;br /&gt;
    return mArguments.getArgs(frame, {parentOnly = true})&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
local function removeInitialColon(s)&lt;br /&gt;
    -- Removes the initial colon from a string, if present.&lt;br /&gt;
    return s:match(&#039;^:?(.*)&#039;)&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
function hatnote.findNamespaceId(link, removeColon)&lt;br /&gt;
    -- Finds the namespace id (namespace number) of a link or a pagename. This&lt;br /&gt;
    -- function will not work if the link is enclosed in double brackets. Colons&lt;br /&gt;
    -- are trimmed from the start of the link by default. To skip colon&lt;br /&gt;
    -- trimming, set the removeColon parameter to false.&lt;br /&gt;
    checkType(&#039;findNamespaceId&#039;, 1, link, &#039;string&#039;)&lt;br /&gt;
    checkType(&#039;findNamespaceId&#039;, 2, removeColon, &#039;boolean&#039;, true)&lt;br /&gt;
    if removeColon ~= false then&lt;br /&gt;
        link = removeInitialColon(link)&lt;br /&gt;
    end&lt;br /&gt;
    local namespace = link:match(&#039;^(.-):&#039;)&lt;br /&gt;
    if namespace then&lt;br /&gt;
        local nsTable = mw.site.namespaces[namespace]&lt;br /&gt;
        if nsTable then&lt;br /&gt;
            return nsTable.id&lt;br /&gt;
        end&lt;br /&gt;
    end&lt;br /&gt;
    return 0&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
function hatnote.quote(title)&lt;br /&gt;
	--Wraps titles in quotation marks. If the title starts/ends with a quotation&lt;br /&gt;
	--mark, kerns that side as with {{-&#039;}}&lt;br /&gt;
	local quotationMarks = {&lt;br /&gt;
		[&amp;quot;&#039;&amp;quot;]=true, [&#039;&amp;quot;&#039;]=true, [&#039;“&#039;]=true, [&amp;quot;‘&amp;quot;]=true, [&#039;”&#039;]=true, [&amp;quot;’&amp;quot;]=true&lt;br /&gt;
	}&lt;br /&gt;
	local quoteLeft, quoteRight = -- Test if start/end are quotation marks&lt;br /&gt;
		quotationMarks[string.sub(title,  1,  1)],&lt;br /&gt;
		quotationMarks[string.sub(title, -1, -1)]&lt;br /&gt;
	if quoteLeft or quoteRight then&lt;br /&gt;
		title = mw.html.create(&amp;quot;span&amp;quot;):wikitext(title)&lt;br /&gt;
	end&lt;br /&gt;
	if quoteLeft  then title:css(&amp;quot;padding-left&amp;quot;,  &amp;quot;0.15em&amp;quot;) end&lt;br /&gt;
	if quoteRight then title:css(&amp;quot;padding-right&amp;quot;, &amp;quot;0.15em&amp;quot;) end&lt;br /&gt;
	return &#039;&amp;quot;&#039; .. tostring(title) .. &#039;&amp;quot;&#039;&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
function hatnote.formatPages(...)&lt;br /&gt;
    -- Formats a list of pages using formatLink and returns it as an array. Nil&lt;br /&gt;
    -- values are not allowed.&lt;br /&gt;
    local pages = {...}&lt;br /&gt;
    local ret = {}&lt;br /&gt;
    for i, page in ipairs(pages) do&lt;br /&gt;
        ret[i] = hatnote._formatLink(page)&lt;br /&gt;
    end&lt;br /&gt;
    return ret&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
function hatnote.formatPageTables(...)&lt;br /&gt;
    -- Takes a list of page/display tables and returns it as a list of&lt;br /&gt;
    -- formatted links. Nil values are not allowed.&lt;br /&gt;
    local pages = {...}&lt;br /&gt;
    local links = {}&lt;br /&gt;
    for i, t in ipairs(pages) do&lt;br /&gt;
        checkType(&#039;formatPageTables&#039;, i, t, &#039;table&#039;)&lt;br /&gt;
        local link = t[1]&lt;br /&gt;
        local display = t[2]&lt;br /&gt;
        links[i] = hatnote._formatLink(link, display)&lt;br /&gt;
    end&lt;br /&gt;
    return links&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
function hatnote.makeWikitextError(msg, helpLink, addTrackingCategory, title)&lt;br /&gt;
    -- Formats an error message to be returned to wikitext. If&lt;br /&gt;
    -- addTrackingCategory is not false after being returned from&lt;br /&gt;
    -- [[Module:Yesno]], and if we are not on a talk page, a tracking category&lt;br /&gt;
    -- is added.&lt;br /&gt;
    checkType(&#039;makeWikitextError&#039;, 1, msg, &#039;string&#039;)&lt;br /&gt;
    checkType(&#039;makeWikitextError&#039;, 2, helpLink, &#039;string&#039;, true)&lt;br /&gt;
    title = title or mw.title.getCurrentTitle()&lt;br /&gt;
    -- Make the help link text.&lt;br /&gt;
    local helpText&lt;br /&gt;
    if helpLink then&lt;br /&gt;
        helpText = &#039; ([[&#039; .. helpLink .. &#039;|&#039; .. i18n:msg(&#039;help&#039;) .. &#039;]])&#039;&lt;br /&gt;
    else&lt;br /&gt;
        helpText = &#039;&#039;&lt;br /&gt;
    end&lt;br /&gt;
    -- Make the category text.&lt;br /&gt;
    local category&lt;br /&gt;
    if not title.isTalkPage and yesno(addTrackingCategory) ~= false then&lt;br /&gt;
    	-- Category LinkTarget is unconvertible&lt;br /&gt;
        category = i18n:useLanguageConversionType(&#039;siteLanguage&#039;):msg(&#039;cat-errors&#039;)&lt;br /&gt;
        category = string.format(&lt;br /&gt;
            &#039;[[%s:%s]]&#039;,&lt;br /&gt;
            mw.site.namespaces[14].name,&lt;br /&gt;
            category&lt;br /&gt;
        )&lt;br /&gt;
    else&lt;br /&gt;
        category = &#039;&#039;&lt;br /&gt;
    end&lt;br /&gt;
    -- string.format doesn&#039;t support positional specifiers&lt;br /&gt;
    return string.format(&lt;br /&gt;
        i18n:useLanguageConversionType(&#039;userLanguage&#039;):msg(&#039;error&#039;),&lt;br /&gt;
        msg,&lt;br /&gt;
        helpText,&lt;br /&gt;
        category&lt;br /&gt;
    )&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
function hatnote.disambiguate(page, disambiguator)&lt;br /&gt;
    -- Formats a page title with a disambiguation parenthetical,&lt;br /&gt;
    -- i.e. &amp;quot;Example&amp;quot; → &amp;quot;Example (disambiguation)&amp;quot;.&lt;br /&gt;
    checkType(&#039;disambiguate&#039;, 1, page, &#039;string&#039;)&lt;br /&gt;
    checkType(&#039;disambiguate&#039;, 2, disambiguator, &#039;string&#039;, true)&lt;br /&gt;
    disambiguator = disambiguator or i18n:msg(&#039;disambiguation&#039;)&lt;br /&gt;
    -- string.format doesn&#039;t support positional specifiers&lt;br /&gt;
    return string.format(i18n:useLanguageConversionType(&#039;userLanguage&#039;):msg(&#039;brackets&#039;), page, disambiguator)&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
--------------------------------------------------------------------------------&lt;br /&gt;
-- Format link&lt;br /&gt;
--&lt;br /&gt;
-- Makes a wikilink from the given link and display values. Links are escaped&lt;br /&gt;
-- with colons if necessary, and links to sections are detected and displayed&lt;br /&gt;
-- with &amp;quot; § &amp;quot; as a separator rather than the standard MediaWiki &amp;quot;#&amp;quot;. Used in&lt;br /&gt;
-- the {{format link}} template.&lt;br /&gt;
--------------------------------------------------------------------------------&lt;br /&gt;
&lt;br /&gt;
function hatnote.formatLink(frame)&lt;br /&gt;
    local args = getArgs(frame)&lt;br /&gt;
    local link = args[1]&lt;br /&gt;
    local display = args[2]&lt;br /&gt;
    if not link then&lt;br /&gt;
        return hatnote.makeWikitextError(&lt;br /&gt;
            i18n:msg(&#039;error-link&#039;),&lt;br /&gt;
            &#039;w:c:dev:Template:Format link#Errors&#039;,-- there is no actual docs for this. not even on wikipedia&lt;br /&gt;
            args.category&lt;br /&gt;
        )&lt;br /&gt;
    end&lt;br /&gt;
    return hatnote._formatLink(link, display)&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
function hatnote._formatLink(link, display)&lt;br /&gt;
    checkType(&#039;_formatLink&#039;, 1, link, &#039;string&#039;)&lt;br /&gt;
    checkType(&#039;_formatLink&#039;, 2, display, &#039;string&#039;, true)&lt;br /&gt;
&lt;br /&gt;
    -- Remove the initial colon for links where it was specified manually.&lt;br /&gt;
    link = removeInitialColon(link)&lt;br /&gt;
&lt;br /&gt;
    -- Find whether a faux display value has been added with the {{!}} magic&lt;br /&gt;
    -- word.&lt;br /&gt;
    if not display then&lt;br /&gt;
        local prePipe, postPipe = link:match(&#039;^(.-)|(.*)$&#039;)&lt;br /&gt;
        link = prePipe or link&lt;br /&gt;
        display = postPipe&lt;br /&gt;
    end&lt;br /&gt;
&lt;br /&gt;
    -- Find the display value.&lt;br /&gt;
    if not display then&lt;br /&gt;
        local page, section = link:match(&#039;^(.-)#(.*)$&#039;)&lt;br /&gt;
        if page then&lt;br /&gt;
            display = page .. &#039; §&amp;amp;nbsp;&#039; .. section&lt;br /&gt;
        end&lt;br /&gt;
    end&lt;br /&gt;
&lt;br /&gt;
    -- Assemble the link.&lt;br /&gt;
    if display then&lt;br /&gt;
        return string.format(&lt;br /&gt;
            &#039;[[:%s|%s]]&#039;,&lt;br /&gt;
            string.gsub(link, &#039;|(.*)$&#039;, &#039;&#039;), -- display overwrites manual piping&lt;br /&gt;
            display&lt;br /&gt;
        )&lt;br /&gt;
    else&lt;br /&gt;
        return string.format(&#039;[[:%s]]&#039;, link)&lt;br /&gt;
    end&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
--------------------------------------------------------------------------------&lt;br /&gt;
-- Hatnote&lt;br /&gt;
--&lt;br /&gt;
-- Produces standard hatnote text. Implements the {{hatnote}} template.&lt;br /&gt;
--------------------------------------------------------------------------------&lt;br /&gt;
&lt;br /&gt;
function hatnote.hatnote(frame)&lt;br /&gt;
    local args = getArgs(frame)&lt;br /&gt;
    local s = args[1]&lt;br /&gt;
    local options = {}&lt;br /&gt;
    if not s then&lt;br /&gt;
        return hatnote.makeWikitextError(&lt;br /&gt;
            i18n:msg(&#039;error-text&#039;),&lt;br /&gt;
            &#039;w:c:dev:Template:Hatnote#Errors&#039;,&lt;br /&gt;
            args.category&lt;br /&gt;
        )&lt;br /&gt;
    end&lt;br /&gt;
    options.extraclasses = args.extraclasses&lt;br /&gt;
    options.selfref = args.selfref&lt;br /&gt;
    return hatnote._hatnote(s, options)&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
function hatnote._hatnote(s, options)&lt;br /&gt;
    checkType(&#039;_hatnote&#039;, 1, s, &#039;string&#039;)&lt;br /&gt;
    checkType(&#039;_hatnote&#039;, 2, options, &#039;table&#039;, true)&lt;br /&gt;
    options = options or {}&lt;br /&gt;
    local classes = {&#039;notice&#039;, &#039;hatnote&#039;}&lt;br /&gt;
    local extraclasses = options.extraclasses&lt;br /&gt;
    local selfref = options.selfref&lt;br /&gt;
    if type(extraclasses) == &#039;string&#039; then&lt;br /&gt;
        classes[#classes + 1] = extraclasses&lt;br /&gt;
    end&lt;br /&gt;
    if selfref then&lt;br /&gt;
        classes[#classes + 1] = &#039;selfref&#039;&lt;br /&gt;
    end&lt;br /&gt;
    return string.format(&lt;br /&gt;
        &#039;&amp;lt;div role=&amp;quot;note&amp;quot; data-nosnippet class=&amp;quot;%s&amp;quot;&amp;gt;%s&amp;lt;/div&amp;gt;&#039;,&lt;br /&gt;
        table.concat(classes, &#039; &#039;),&lt;br /&gt;
        s&lt;br /&gt;
    )&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
--------------------------------------------------------------------------------&lt;br /&gt;
--                           Module:Hatnote list                              --&lt;br /&gt;
--                                                                            --&lt;br /&gt;
-- This module produces and formats lists for use in hatnotes. In particular, --&lt;br /&gt;
-- it implements the for-see list, i.e. lists of &amp;quot;For X, see Y&amp;quot; statements,   --&lt;br /&gt;
-- as used in {{about}}, and its variants. Also introduced are andList &amp;amp;      --&lt;br /&gt;
-- orList helpers for formatting lists with those conjunctions.               --&lt;br /&gt;
--------------------------------------------------------------------------------&lt;br /&gt;
&lt;br /&gt;
--------------------------------------------------------------------------------&lt;br /&gt;
-- List stringification helper functions&lt;br /&gt;
--&lt;br /&gt;
-- These functions are used for stringifying lists, usually page lists inside&lt;br /&gt;
-- the &amp;quot;Y&amp;quot; portion of &amp;quot;For X, see Y&amp;quot; for-see items.&lt;br /&gt;
--------------------------------------------------------------------------------&lt;br /&gt;
&lt;br /&gt;
--default options table used across the list stringification functions&lt;br /&gt;
local stringifyListDefaultOptions = {&lt;br /&gt;
    conjunction = i18n:msg(&#039;conjunction&#039;),&lt;br /&gt;
    separator = i18n:msg(&#039;separator&#039;),&lt;br /&gt;
    altSeparator = i18n:msg(&#039;altSeparator&#039;),&lt;br /&gt;
    space = i18n:msg(&#039;space&#039;),&lt;br /&gt;
    formatted = false&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
-- Stringifies a list generically; probably shouldn&#039;t be used directly&lt;br /&gt;
local function stringifyList(list, options)&lt;br /&gt;
    -- Type-checks, defaults, and a shortcut&lt;br /&gt;
    checkType(&amp;quot;stringifyList&amp;quot;, 1, list, &amp;quot;table&amp;quot;)&lt;br /&gt;
    if #list == 0 then return nil end&lt;br /&gt;
    checkType(&amp;quot;stringifyList&amp;quot;, 2, options, &amp;quot;table&amp;quot;, true)&lt;br /&gt;
    options = options or {}&lt;br /&gt;
    for k, v in pairs(stringifyListDefaultOptions) do&lt;br /&gt;
        if options[k] == nil then options[k] = v end&lt;br /&gt;
    end&lt;br /&gt;
    local s = options.space&lt;br /&gt;
    -- Format the list if requested&lt;br /&gt;
    if options.formatted then list = hatnote.formatPages(unpack(list)) end&lt;br /&gt;
    -- Set the separator; if any item contains it, use the alternate separator&lt;br /&gt;
    local separator = options.separator&lt;br /&gt;
    --searches display text only&lt;br /&gt;
    function searchDisp(t, f)&lt;br /&gt;
        return string.find(string.sub(t, (string.find(t, &#039;|&#039;) or 0) + 1), f)&lt;br /&gt;
    end&lt;br /&gt;
    for k, v in pairs(list) do&lt;br /&gt;
        if searchDisp(v, separator) then&lt;br /&gt;
            separator = options.altSeparator&lt;br /&gt;
            break&lt;br /&gt;
        end&lt;br /&gt;
    end&lt;br /&gt;
    -- Set the conjunction, apply Oxford comma, and force a comma if #1 has &amp;quot;§&amp;quot;&lt;br /&gt;
    local oxfordLangs = {&lt;br /&gt;
        -- list of languages that does respect oxford commas&lt;br /&gt;
        [&#039;en&#039;] = true,&lt;br /&gt;
        [&#039;en-us&#039;] = true,&lt;br /&gt;
        [&#039;en-gb&#039;] = true,&lt;br /&gt;
    }&lt;br /&gt;
&lt;br /&gt;
    local conjunction = s .. options.conjunction .. s&lt;br /&gt;
    if #list == 2 and searchDisp(list[1], &amp;quot;§&amp;quot;) or #list &amp;gt; 2 then&lt;br /&gt;
        conjunction = (oxfordLangs[i18n.defaultLang] and separator or &#039;&#039;) .. conjunction&lt;br /&gt;
    end&lt;br /&gt;
    -- Return the formatted string&lt;br /&gt;
    return mw.text.listToText(list, separator .. s, conjunction)&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
--DRY function&lt;br /&gt;
local function conjList (conj, list, fmt)&lt;br /&gt;
    return stringifyList(list, {conjunction = conj, formatted = fmt})&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
-- Stringifies lists with &amp;quot;and&amp;quot; or &amp;quot;or&amp;quot;&lt;br /&gt;
function hatnote.andList (...) return conjList(i18n:msg(&#039;conj-and&#039;), ...) end&lt;br /&gt;
function hatnote.orList (...) return conjList(i18n:msg(&#039;conj-or&#039;), ...) end&lt;br /&gt;
&lt;br /&gt;
--------------------------------------------------------------------------------&lt;br /&gt;
-- For see&lt;br /&gt;
--&lt;br /&gt;
-- Makes a &amp;quot;For X, see [[Y]].&amp;quot; list from raw parameters. Intended for the&lt;br /&gt;
-- {{about}} templates and their variants.&lt;br /&gt;
--------------------------------------------------------------------------------&lt;br /&gt;
&lt;br /&gt;
--default options table used across the forSee family of functions&lt;br /&gt;
local forSeeDefaultOptions = {&lt;br /&gt;
    andKeyword = i18n:msg(&#039;conj-and&#039;),&lt;br /&gt;
    title = mw.title.getCurrentTitle().text,&lt;br /&gt;
    otherText = i18n:msg(&#039;other-uses&#039;),&lt;br /&gt;
    -- string.format doesn&#039;t support positional specifiers&lt;br /&gt;
    forSeeForm = i18n:useLanguageConversionType(&#039;userLanguage&#039;):msg(&#039;for&#039;)&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
--Collapses duplicate punctuation&lt;br /&gt;
local function punctuationCollapse (text)&lt;br /&gt;
    local replacements = {&lt;br /&gt;
        [&amp;quot;%.%.$&amp;quot;] = &amp;quot;.&amp;quot;,&lt;br /&gt;
        [&amp;quot;%?%.$&amp;quot;] = &amp;quot;?&amp;quot;,&lt;br /&gt;
        [&amp;quot;%!%.$&amp;quot;] = &amp;quot;!&amp;quot;,&lt;br /&gt;
        [&amp;quot;%.%]%]%.$&amp;quot;] = &amp;quot;.]]&amp;quot;,&lt;br /&gt;
        [&amp;quot;%?%]%]%.$&amp;quot;] = &amp;quot;?]]&amp;quot;,&lt;br /&gt;
        [&amp;quot;%!%]%]%.$&amp;quot;] = &amp;quot;!]]&amp;quot;&lt;br /&gt;
    }&lt;br /&gt;
    for k, v in pairs(replacements) do text = string.gsub(text, k, v) end&lt;br /&gt;
    return text&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
-- Structures arguments into a table for stringification, &amp;amp; options&lt;br /&gt;
function hatnote.forSeeArgsToTable (args, from, options)&lt;br /&gt;
    -- Type-checks and defaults&lt;br /&gt;
    checkType(&amp;quot;forSeeArgsToTable&amp;quot;, 1, args, &#039;table&#039;)&lt;br /&gt;
    checkType(&amp;quot;forSeeArgsToTable&amp;quot;, 2, from, &#039;number&#039;, true)&lt;br /&gt;
    from = from or 1&lt;br /&gt;
    checkType(&amp;quot;forSeeArgsToTable&amp;quot;, 3, options, &#039;table&#039;, true)&lt;br /&gt;
    options = options or {}&lt;br /&gt;
    for k, v in pairs(forSeeDefaultOptions) do&lt;br /&gt;
        if options[k] == nil then options[k] = v end&lt;br /&gt;
    end&lt;br /&gt;
    -- maxArg&#039;s gotten manually because getArgs() and table.maxn aren&#039;t friends&lt;br /&gt;
    local maxArg = 0&lt;br /&gt;
    for k, v in pairs(args) do&lt;br /&gt;
        if type(k) == &#039;number&#039; and k &amp;gt; maxArg then maxArg = k end&lt;br /&gt;
    end&lt;br /&gt;
    -- Structure the data out from the parameter list:&lt;br /&gt;
    -- * forTable is the wrapper table, with forRow rows&lt;br /&gt;
    -- * Rows are tables of a &amp;quot;use&amp;quot; string &amp;amp; a &amp;quot;pages&amp;quot; table of pagename strings&lt;br /&gt;
    -- * Blanks are left empty for defaulting elsewhere, but can terminate list&lt;br /&gt;
    local forTable = {}&lt;br /&gt;
    local i = from&lt;br /&gt;
    local terminated = false&lt;br /&gt;
    -- Loop to generate rows&lt;br /&gt;
    repeat&lt;br /&gt;
        -- New empty row&lt;br /&gt;
        local forRow = {}&lt;br /&gt;
        -- On blank use, assume list&#039;s ended &amp;amp; break at end of this loop&lt;br /&gt;
        forRow.use = args[i]&lt;br /&gt;
        if not args[i] then terminated = true end&lt;br /&gt;
        -- New empty list of pages&lt;br /&gt;
        forRow.pages = {}&lt;br /&gt;
        -- Insert first pages item if present&lt;br /&gt;
        table.insert(forRow.pages, args[i + 1])&lt;br /&gt;
        -- If the param after next is &amp;quot;and&amp;quot;, do inner loop to collect params&lt;br /&gt;
        -- until the &amp;quot;and&amp;quot;&#039;s stop. Blanks are ignored: &amp;quot;1|and||and|3&amp;quot; → {1, 3}&lt;br /&gt;
        while args[i + 2] == options.andKeyword do&lt;br /&gt;
            if args[i + 3] then&lt;br /&gt;
                table.insert(forRow.pages, args[i + 3])&lt;br /&gt;
            end&lt;br /&gt;
            -- Increment to next &amp;quot;and&amp;quot;&lt;br /&gt;
            i = i + 2&lt;br /&gt;
        end&lt;br /&gt;
        -- Increment to next use&lt;br /&gt;
        i = i + 2&lt;br /&gt;
        -- Append the row&lt;br /&gt;
        table.insert(forTable, forRow)&lt;br /&gt;
    until terminated or i &amp;gt; maxArg&lt;br /&gt;
&lt;br /&gt;
    return forTable&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
-- Stringifies a table as formatted by forSeeArgsToTable&lt;br /&gt;
function hatnote.forSeeTableToString (forSeeTable, options)&lt;br /&gt;
    -- Type-checks and defaults&lt;br /&gt;
    checkType(&amp;quot;forSeeTableToString&amp;quot;, 1, forSeeTable, &amp;quot;table&amp;quot;)&lt;br /&gt;
    checkType(&amp;quot;forSeeTableToString&amp;quot;, 2, options, &amp;quot;table&amp;quot;, true)&lt;br /&gt;
    options = options or {}&lt;br /&gt;
    for k, v in pairs(forSeeDefaultOptions) do&lt;br /&gt;
        if options[k] == nil then options[k] = v end&lt;br /&gt;
    end&lt;br /&gt;
    -- Stringify each for-see item into a list&lt;br /&gt;
    local strList = {}&lt;br /&gt;
    for k, v in pairs(forSeeTable) do&lt;br /&gt;
        local useStr = v.use or options.otherText&lt;br /&gt;
        local pagesStr = hatnote.andList(v.pages, true) or&lt;br /&gt;
            hatnote._formatLink(hatnote.disambiguate(options.title))&lt;br /&gt;
        local forSeeStr = string.format(options.forSeeForm, useStr, pagesStr)&lt;br /&gt;
        forSeeStr = punctuationCollapse(forSeeStr)&lt;br /&gt;
        table.insert(strList, forSeeStr)&lt;br /&gt;
    end&lt;br /&gt;
    -- Return the concatenated list&lt;br /&gt;
    return table.concat(strList, i18n:msg(&#039;space&#039;))&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
-- Produces a &amp;quot;For X, see [[Y]]&amp;quot; string from arguments. Expects index gaps&lt;br /&gt;
-- but not blank/whitespace values. Ignores named args and args &amp;lt; &amp;quot;from&amp;quot;.&lt;br /&gt;
function hatnote._forSee (args, from, options)&lt;br /&gt;
    local forSeeTable = hatnote.forSeeArgsToTable(args, from, options)&lt;br /&gt;
    return hatnote.forSeeTableToString(forSeeTable, options)&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
-- As _forSee, but uses the frame.&lt;br /&gt;
function hatnote.forSee (frame, from, options)&lt;br /&gt;
    return hatnote._forSee(mArguments.getArgs(frame), from, options)&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
--------------------------------------------------------------------------------&lt;br /&gt;
-- Produces a labelled pages-list hatnote.&lt;br /&gt;
-- The main frame (template definition) takes 1 or 2 arguments, for a singular&lt;br /&gt;
-- and (optionally) plural label respectively:&lt;br /&gt;
-- * {{#invoke:Hatnote|labelledList|Singular label|Plural label}}&lt;br /&gt;
-- The resulting template takes pagename &amp;amp; label parameters normally.&lt;br /&gt;
--------------------------------------------------------------------------------&lt;br /&gt;
-- Defaults global to this module&lt;br /&gt;
local LPLHdefaults = {&lt;br /&gt;
    label = i18n:msg(&#039;see-also&#039;), --Final fallback for label argument&lt;br /&gt;
    labelForm = i18n:msg(&#039;colon&#039;),&lt;br /&gt;
    prefixes = {&#039;label&#039;, &#039;label &#039;, &#039;l&#039;},&lt;br /&gt;
    template = &#039;Module:Hatnote&#039;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
-- Helper function that pre-combines display parameters into page arguments.&lt;br /&gt;
-- Also compresses sparse arrays, as a desirable side-effect.&lt;br /&gt;
function hatnote.preprocessDisplays (args, prefixes)&lt;br /&gt;
    -- Prefixes specify which parameters, in order, to check for display options&lt;br /&gt;
    -- They each have numbers auto-appended, e.g. &#039;label1&#039;, &#039;label 1&#039;, &amp;amp; &#039;l1&#039;&lt;br /&gt;
    prefixes = prefixes or LPLHdefaults.prefixes&lt;br /&gt;
    local pages = {}&lt;br /&gt;
    for k, v in pairs(args) do&lt;br /&gt;
        if type(k) == &#039;number&#039; then&lt;br /&gt;
            local display&lt;br /&gt;
            for i = 1, #prefixes do&lt;br /&gt;
                display = args[prefixes[i] .. k]&lt;br /&gt;
                if display then break end&lt;br /&gt;
            end&lt;br /&gt;
            local page = display and&lt;br /&gt;
                string.format(&#039;%s|%s&#039;, string.gsub(v, &#039;|.*$&#039;, &#039;&#039;), display) or v&lt;br /&gt;
            pages[#pages + 1] = page&lt;br /&gt;
        end&lt;br /&gt;
    end&lt;br /&gt;
    return pages&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
function hatnote.labelledList (frame)&lt;br /&gt;
    local labels = {frame.args[1] or LPLHdefaults.label}&lt;br /&gt;
    labels[2] = frame.args[2] or labels[1]&lt;br /&gt;
    local template = frame:getParent():getTitle()&lt;br /&gt;
    local args = mArguments.getArgs(frame, {parentOnly = true})&lt;br /&gt;
    local pages = hatnote.preprocessDisplays(args)&lt;br /&gt;
    local options = {&lt;br /&gt;
        extraclasses = frame.args.extraclasses,&lt;br /&gt;
        category = args.category,&lt;br /&gt;
        selfref = frame.args.selfref or args.selfref,&lt;br /&gt;
        template = template&lt;br /&gt;
    }&lt;br /&gt;
    return hatnote._labelledList(pages, labels, options)&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
function hatnote._labelledList (pages, labels, options)&lt;br /&gt;
    labels = labels or {}&lt;br /&gt;
    if #pages == 0 then&lt;br /&gt;
        return hatnote.makeWikitextError(&lt;br /&gt;
            i18n:msg(&#039;error-pagename&#039;, 2),&lt;br /&gt;
            (options.template or LPLHdefaults.template) .. &#039;#Errors&#039;,&lt;br /&gt;
            options.category&lt;br /&gt;
        )&lt;br /&gt;
    end&lt;br /&gt;
    label = (#pages == 1 and labels[1] or labels[2]) or LPLHdefaults.label&lt;br /&gt;
    local text = string.format(&lt;br /&gt;
        options.labelForm or LPLHdefaults.labelForm,&lt;br /&gt;
        label,&lt;br /&gt;
        hatnote.andList(pages, true)&lt;br /&gt;
    )&lt;br /&gt;
    local hnOptions = {&lt;br /&gt;
        extraclasses = options.extraclasses,&lt;br /&gt;
        selfref = options.selfref&lt;br /&gt;
    }&lt;br /&gt;
    return hatnote._hatnote(text, hnOptions)&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
--------------------------------------------------------------------------------&lt;br /&gt;
-- About&lt;br /&gt;
--&lt;br /&gt;
-- These functions implement the {{about}} hatnote template.&lt;br /&gt;
--------------------------------------------------------------------------------&lt;br /&gt;
function hatnote.about (frame)&lt;br /&gt;
    -- A passthrough that gets args from the frame and all&lt;br /&gt;
    args = mArguments.getArgs(frame)&lt;br /&gt;
    return hatnote._about(args)&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
function hatnote._about (args, options)&lt;br /&gt;
    -- Produces &amp;quot;about&amp;quot; hatnote.&lt;br /&gt;
&lt;br /&gt;
    -- Type checks and defaults&lt;br /&gt;
    checkType(&#039;_about&#039;, 1, args, &#039;table&#039;, true)&lt;br /&gt;
    args = args or {}&lt;br /&gt;
    checkType(&#039;_about&#039;, 2, options, &#039;table&#039;, true)&lt;br /&gt;
    options = options or {}&lt;br /&gt;
    local defaultOptions = {&lt;br /&gt;
    	-- string.format doesn&#039;t support positional specifiers&lt;br /&gt;
        aboutForm = i18n:useLanguageConversionType(&#039;userLanguage&#039;):msg(&#039;about&#039;, mw.title.getCurrentTitle().namespace),&lt;br /&gt;
        defaultPageType = i18n:msg(&#039;page&#039;),&lt;br /&gt;
        namespace = mw.title.getCurrentTitle().namespace,&lt;br /&gt;
        otherText = nil, --included for complete list&lt;br /&gt;
        pageTypesByNamespace = {&lt;br /&gt;
            [0] =  i18n:msg(&#039;pagetype-0&#039;),&lt;br /&gt;
            [14] = i18n:msg(&#039;pagetype-14&#039;)&lt;br /&gt;
        },&lt;br /&gt;
        sectionString = i18n:msg(&#039;section&#039;)&lt;br /&gt;
    }&lt;br /&gt;
    for k, v in pairs(defaultOptions) do&lt;br /&gt;
        if options[k] == nil then options[k] = v end&lt;br /&gt;
    end&lt;br /&gt;
&lt;br /&gt;
    -- Set initial &amp;quot;about&amp;quot; string&lt;br /&gt;
    local pageType = (args.section and options.sectionString) or&lt;br /&gt;
        options.pageTypesByNamespace[options.namespace] or&lt;br /&gt;
        options.defaultPageType&lt;br /&gt;
    local about = &#039;&#039;&lt;br /&gt;
    if args[1] then&lt;br /&gt;
        about = string.format(options.aboutForm, pageType, args[1])&lt;br /&gt;
    end&lt;br /&gt;
&lt;br /&gt;
    --Allow passing through certain options&lt;br /&gt;
    local fsOptions = {&lt;br /&gt;
        otherText = options.otherText&lt;br /&gt;
    }&lt;br /&gt;
&lt;br /&gt;
    -- Set for-see list&lt;br /&gt;
    local forSee = i18n:msg(&#039;space&#039;) .. hatnote._forSee(args, 2, fsOptions)&lt;br /&gt;
&lt;br /&gt;
    -- Concatenate and return&lt;br /&gt;
    return hatnote._hatnote(about .. forSee, {extraclasses = &#039;context-link about dablink&#039;})&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
--------------------------------------------------------------------------------&lt;br /&gt;
-- Details&lt;br /&gt;
--&lt;br /&gt;
-- These functions implement the {{details}} hatnote template.&lt;br /&gt;
--------------------------------------------------------------------------------&lt;br /&gt;
function hatnote.details (frame)&lt;br /&gt;
    local args = mArguments.getArgs(frame, {parentOnly = true})&lt;br /&gt;
    local topic, category = args.topic, args.category&lt;br /&gt;
    local options = {&lt;br /&gt;
        selfref = args.selfref,&lt;br /&gt;
        extraclasses = &#039;context-link details dablink&#039;&lt;br /&gt;
    }&lt;br /&gt;
    args = mTableTools.compressSparseArray(args)&lt;br /&gt;
    if #args == 0 then&lt;br /&gt;
        return hatnote.makeWikitextError(&lt;br /&gt;
            i18n:msg(&#039;error-pagename&#039;),&lt;br /&gt;
            &#039;w:c:dev:Template:Details#Errors&#039;,-- another undocumented thing&lt;br /&gt;
            category&lt;br /&gt;
        )&lt;br /&gt;
    end&lt;br /&gt;
    return hatnote._details(args, topic, options)&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
function hatnote._details (list, topic, options)&lt;br /&gt;
    list = hatnote.andList(list, true)&lt;br /&gt;
    topic = topic or i18n:msg(&#039;topic&#039;)&lt;br /&gt;
    -- string.format doesn&#039;t support positional specifiers&lt;br /&gt;
    local text = string.format(i18n:useLanguageConversionType(&#039;userLanguage&#039;):msg(&#039;details&#039;), topic, list)&lt;br /&gt;
    return hatnote._hatnote(text, options)&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
--------------------------------------------------------------------------------&lt;br /&gt;
-- For&lt;br /&gt;
--&lt;br /&gt;
-- These functions implement the {{for}} hatnote template.&lt;br /&gt;
--------------------------------------------------------------------------------&lt;br /&gt;
function hatnote.For (frame)&lt;br /&gt;
    return hatnote._For(mArguments.getArgs(frame))&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
--Implements {{For}} but takes a manual arguments table&lt;br /&gt;
function hatnote._For (args)&lt;br /&gt;
    local use = args[1]&lt;br /&gt;
    local category = &#039;&#039;&lt;br /&gt;
    if&lt;br /&gt;
        (not use or use == i18n:msg(&#039;other-uses&#039;)) and&lt;br /&gt;
        (not args.category or yesno(args.category))&lt;br /&gt;
    then&lt;br /&gt;
        -- Category LinkTarget is unconvertible&lt;br /&gt;
        category = &#039;[[Category:&#039; .. i18n:useLanguageConversionType(&#039;siteLanguage&#039;):msg(&#039;cat-unusual-parameters&#039;) .. &#039;]]&#039;&lt;br /&gt;
    end&lt;br /&gt;
    local pages = {}&lt;br /&gt;
    function two (a, b) return a, b, 1 end --lets us run ipairs from 2&lt;br /&gt;
    for k, v in two(ipairs(args)) do table.insert(pages, v) end&lt;br /&gt;
    return hatnote._hatnote(&lt;br /&gt;
        hatnote.forSeeTableToString({{use = use, pages = pages}}),&lt;br /&gt;
        {selfref = args.selfref, extraclasses = args.extraclasses}&lt;br /&gt;
    ) .. category&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
--------------------------------------------------------------------------------&lt;br /&gt;
-- Further&lt;br /&gt;
--&lt;br /&gt;
-- These functions implement the {{further}} hatnote template.&lt;br /&gt;
--------------------------------------------------------------------------------&lt;br /&gt;
function hatnote.further(frame)&lt;br /&gt;
    local args = mArguments.getArgs(frame, {parentOnly = true})&lt;br /&gt;
    local pages = mTableTools.compressSparseArray(args)&lt;br /&gt;
    if #pages &amp;lt; 1 then&lt;br /&gt;
        return hatnote.makeWikitextError(&lt;br /&gt;
            i18n:msg(&#039;error-pagename&#039;, 2),&lt;br /&gt;
            &#039;w:c:dev:Template:Further#Errors&#039;,-- undocumented thing #3&lt;br /&gt;
            args.category&lt;br /&gt;
        )&lt;br /&gt;
    end&lt;br /&gt;
    local options = {&lt;br /&gt;
        selfref = args.selfref,&lt;br /&gt;
        extraclasses = &#039;context-link further dablink&#039;&lt;br /&gt;
    }&lt;br /&gt;
    return hatnote._further(pages, options)&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
function hatnote._further(pages, options)&lt;br /&gt;
    local text = i18n:msg(&#039;further2&#039;) .. hatnote.andList(pages, true)&lt;br /&gt;
    return hatnote._hatnote(text, options)&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
--------------------------------------------------------------------------------&lt;br /&gt;
-- Main&lt;br /&gt;
--&lt;br /&gt;
-- These functions implement the {{main}} hatnote template.&lt;br /&gt;
--------------------------------------------------------------------------------&lt;br /&gt;
function hatnote.main(frame)&lt;br /&gt;
    local args = mArguments.getArgs(frame, {parentOnly = true})&lt;br /&gt;
    local pages = {}&lt;br /&gt;
    for k, v in pairs(args) do&lt;br /&gt;
        if type(k) == &#039;number&#039; then&lt;br /&gt;
            local display = args[&#039;label &#039; .. k] or args[&#039;l&#039; .. k]&lt;br /&gt;
            local page = display and&lt;br /&gt;
                string.format(&#039;%s|%s&#039;, string.gsub(v, &#039;|.*$&#039;, &#039;&#039;), display) or v&lt;br /&gt;
            pages[#pages + 1] = page&lt;br /&gt;
        end&lt;br /&gt;
    end&lt;br /&gt;
    if #pages == 0 and mw.title.getCurrentTitle().namespace == 0 then&lt;br /&gt;
        return hatnote.makeWikitextError(&lt;br /&gt;
            i18n:msg(&#039;error-pagename&#039;, 2),&lt;br /&gt;
            &#039;w:c:dev:Template:Main#Errors&#039;,-- undocumented thing #4&lt;br /&gt;
            args.category&lt;br /&gt;
        )&lt;br /&gt;
    end&lt;br /&gt;
    local options = {&lt;br /&gt;
        selfref = args.selfref&lt;br /&gt;
    }&lt;br /&gt;
    return hatnote._main(pages, options)&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
function hatnote._main(args, options)&lt;br /&gt;
    -- Get the list of pages. If no first page was specified we use the current&lt;br /&gt;
    -- page name.&lt;br /&gt;
    local currentTitle = mw.title.getCurrentTitle()&lt;br /&gt;
    if #args == 0 then args = {currentTitle.text} end&lt;br /&gt;
    local firstPage = string.gsub(args[1], &#039;|.*$&#039;, &#039;&#039;)&lt;br /&gt;
    -- Make the formatted link text&lt;br /&gt;
    list = hatnote.andList(args, true)&lt;br /&gt;
    -- Build the text.&lt;br /&gt;
    local pageCount = #args&lt;br /&gt;
    -- Find the pagetype.&lt;br /&gt;
    local pageType = hatnote.findNamespaceId(firstPage) == 0 and i18n:msg(&#039;article&#039;, pageCount) or i18n:msg(&#039;page&#039;, pageCount)&lt;br /&gt;
    local mainForm&lt;br /&gt;
    local curNs = currentTitle.namespace&lt;br /&gt;
    if (curNs == 14) or (curNs == 15) then --category/talk namespaces&lt;br /&gt;
        -- string.format doesn&#039;t support positional specifiers&lt;br /&gt;
        mainForm = i18n:useLanguageConversionType(&#039;userLanguage&#039;):msg(&#039;main-category&#039;, pageCount, pageType, list)&lt;br /&gt;
    else&lt;br /&gt;
        -- string.format doesn&#039;t support positional specifiers&lt;br /&gt;
        mainForm = i18n:useLanguageConversionType(&#039;userLanguage&#039;):msg(&#039;main&#039;, pageCount, pageType, list)&lt;br /&gt;
    end&lt;br /&gt;
    local text = string.format(mainForm, pageType, list)&lt;br /&gt;
    options = options or {}&lt;br /&gt;
    local hnOptions = {&lt;br /&gt;
        selfref = options.selfref,&lt;br /&gt;
        extraclasses = &#039;context-link main dablink&#039;&lt;br /&gt;
    }&lt;br /&gt;
    return hatnote._hatnote(text, hnOptions)&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
--------------------------------------------------------------------------------&lt;br /&gt;
-- See also&lt;br /&gt;
--&lt;br /&gt;
-- These functions implement the {{see also}} hatnote template.&lt;br /&gt;
--------------------------------------------------------------------------------&lt;br /&gt;
function hatnote.seeAlso(frame)&lt;br /&gt;
    local args = mArguments.getArgs(frame, {parentOnly = true})&lt;br /&gt;
    local pages = {}&lt;br /&gt;
    for k, v in pairs(args) do&lt;br /&gt;
        if type(k) == &#039;number&#039; then&lt;br /&gt;
            local display = args[&#039;label &#039; .. k] or args[&#039;l&#039; .. k]&lt;br /&gt;
            local page = display and&lt;br /&gt;
                string.format(&#039;%s|%s&#039;, string.gsub(v, &#039;|.*$&#039;, &#039;&#039;), display) or v&lt;br /&gt;
            pages[#pages + 1] = page&lt;br /&gt;
        end&lt;br /&gt;
    end&lt;br /&gt;
    if not pages[1] then&lt;br /&gt;
        return hatnote.makeWikitextError(&lt;br /&gt;
            i18n:msg(&#039;error-pagename&#039;, 2),&lt;br /&gt;
            &#039;w:c:dev:Template:See also#Errors&#039;,-- undocumented thing #5&lt;br /&gt;
            args.category&lt;br /&gt;
        )&lt;br /&gt;
    end&lt;br /&gt;
    local options = {&lt;br /&gt;
        selfref = args.selfref&lt;br /&gt;
    }&lt;br /&gt;
    return hatnote._seeAlso(pages, options)&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
function hatnote._seeAlso(args, options)&lt;br /&gt;
    checkType(&#039;_seeAlso&#039;, 1, args, &#039;table&#039;)&lt;br /&gt;
    checkType(&#039;_seeAlso&#039;, 2, options, &#039;table&#039;, true)&lt;br /&gt;
    options = options or {}&lt;br /&gt;
    local list = hatnote.andList(args, true)&lt;br /&gt;
    -- string.format doesn&#039;t support positional specifiers&lt;br /&gt;
    local text = string.format(i18n:useLanguageConversionType(&#039;userLanguage&#039;):msg(&#039;see-also2&#039;), list)&lt;br /&gt;
    -- Pass options through.&lt;br /&gt;
    local hnOptions = {&lt;br /&gt;
        selfref = options.selfref,&lt;br /&gt;
        extraclasses = &#039;context-link seealso dablink&#039;&lt;br /&gt;
    }&lt;br /&gt;
    return hatnote._hatnote(text, hnOptions)&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
hatnote[&#039;for&#039;] = hatnote.For&lt;br /&gt;
&lt;br /&gt;
return hatnote&lt;/div&gt;</summary>
		<author><name>WikiAdmin</name></author>
	</entry>
	<entry>
		<id>https://unimage.wcnm.pw/index.php?title=%E6%A8%A1%E5%9D%97:Dev/Fallbacklist&amp;diff=707</id>
		<title>模块:Dev/Fallbacklist</title>
		<link rel="alternate" type="text/html" href="https://unimage.wcnm.pw/index.php?title=%E6%A8%A1%E5%9D%97:Dev/Fallbacklist&amp;diff=707"/>
		<updated>2026-08-31T12:54:39Z</updated>

		<summary type="html">&lt;p&gt;WikiAdmin：​从 Fandom Developer Wiki 本地化全局模块，源修订 205706&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;-- 来源：https://dev.fandom.com/wiki/Module%3AFallbacklist&lt;br /&gt;
-- 许可：CC BY-SA，作者与修订记录见来源页面&lt;br /&gt;
-- Language fallback rules for other Lua modules.&lt;br /&gt;
-- @see       https://commons.wikimedia.org/wiki/Module:Fallbacklist&lt;br /&gt;
-- @release   2017-01-01T20:33:00.000Z&lt;br /&gt;
-- @submodule&lt;br /&gt;
return {&lt;br /&gt;
&lt;br /&gt;
    -- crh (Crimean Tatar) cluster: crh-cyrl , crh-latn -&amp;gt; crh (Crimean Tatar)&lt;br /&gt;
    [&#039;crh&#039;]          = {&#039;crh-latn&#039;},&lt;br /&gt;
    [&#039;crh-cyrl&#039;]     = {&#039;crh&#039;, &#039;ru&#039;}, &lt;br /&gt;
    [&#039;crh-latn&#039;]     = {&#039;crh&#039;},&lt;br /&gt;
&lt;br /&gt;
    -- de (German) cluster:&lt;br /&gt;
    [&#039;als&#039;]          = {&#039;gsw&#039;, &#039;de&#039;},                       -- Alemannisch&lt;br /&gt;
    [&#039;bar&#039;]          = {&#039;de&#039;},                              -- Bavarian&lt;br /&gt;
    [&#039;de-at&#039;]        = {&#039;de&#039;},                              -- Austrian German&lt;br /&gt;
    [&#039;de-ch&#039;]        = {&#039;de&#039;},                              -- Swiss High German&lt;br /&gt;
    [&#039;de-formal&#039;]    = {&#039;de&#039;},                              -- German (formal address)&lt;br /&gt;
    [&#039;dsb&#039;]          = {&#039;de&#039;},                              -- Lower Sorbian&lt;br /&gt;
    [&#039;frr&#039;]          = {&#039;de&#039;},                              -- Northern Frisian&lt;br /&gt;
    [&#039;hsb&#039;]          = {&#039;de&#039;},                              -- Upper Sorbian&lt;br /&gt;
    [&#039;ksh&#039;]          = {&#039;de&#039;},                              -- Colognian&lt;br /&gt;
    [&#039;lb&#039;]           = {&#039;de&#039;},                              -- Luxembourgish&lt;br /&gt;
    [&#039;nds&#039;]          = {&#039;nds-nl&#039;, &#039;de&#039;},                    -- Low German&lt;br /&gt;
    [&#039;nds-nl&#039;]       = {&#039;nds&#039;, &#039;nl&#039;},                       -- Low Saxon (Netherlands)&lt;br /&gt;
    [&#039;pdc&#039;]          = {&#039;de&#039;},                              -- Deitsch&lt;br /&gt;
    [&#039;pdt&#039;]          = {&#039;nds&#039;, &#039;de&#039;},                       -- Plautdietsch&lt;br /&gt;
    [&#039;pfl&#039;]          = {&#039;de&#039;},                              -- Pälzisch&lt;br /&gt;
    [&#039;sli&#039;]          = {&#039;de&#039;},                              -- Lower Silesian&lt;br /&gt;
    [&#039;stq&#039;]          = {&#039;de&#039;},                              -- Seeltersk&lt;br /&gt;
    [&#039;vmf&#039;]          = {&#039;de&#039;},                              -- Upper Franconian&lt;br /&gt;
&lt;br /&gt;
    -- es (Spanish) cluster&lt;br /&gt;
    [&#039;an&#039;]           = {&#039;es&#039;},                              -- Aragonese&lt;br /&gt;
    [&#039;arn&#039;]          = {&#039;es&#039;},                              -- Mapuche&lt;br /&gt;
    [&#039;ay&#039;]           = {&#039;es&#039;},                              -- Aymara&lt;br /&gt;
    [&#039;cbk-zam&#039;]      = {&#039;es&#039;},                              -- Chavacano de Zamboanga&lt;br /&gt;
    [&#039;gn&#039;]           = {&#039;es&#039;},                              -- Guarani&lt;br /&gt;
    [&#039;lad&#039;]          = {&#039;es&#039;},                              -- Ladino&lt;br /&gt;
    [&#039;nah&#039;]          = {&#039;es&#039;},                              -- Nahuatl&lt;br /&gt;
    [&#039;qu&#039;]           = {&#039;es&#039;},                              -- Quechua&lt;br /&gt;
    [&#039;qug&#039;]          = {&#039;qu&#039;, &#039;es&#039;},                        -- Runa shimi&lt;br /&gt;
&lt;br /&gt;
    -- et (Estonian) cluster&lt;br /&gt;
    [&#039;liv&#039;]          = {&#039;et&#039;},                              -- Līvõ kēļ&lt;br /&gt;
    [&#039;vep&#039;]          = {&#039;et&#039;},                              -- Veps&lt;br /&gt;
    [&#039;vro&#039;]          = {&#039;et&#039;},                              -- Võro&lt;br /&gt;
    [&#039;fiu-vro&#039;]      = {&#039;vro&#039;, &#039;et&#039;},                       -- Võro&lt;br /&gt;
&lt;br /&gt;
    -- fa (Persian) cluster&lt;br /&gt;
    [&#039;bcc&#039;]          = {&#039;fa&#039;},                              -- Southern Balochi&lt;br /&gt;
    [&#039;bqi&#039;]          = {&#039;fa&#039;},                              -- Bakhtiari&lt;br /&gt;
    [&#039;glk&#039;]          = {&#039;fa&#039;},                              -- Gilaki&lt;br /&gt;
    [&#039;mzn&#039;]          = {&#039;fa&#039;},                              -- Mazandarani&lt;br /&gt;
&lt;br /&gt;
    -- fi (Finnish) cluster:&lt;br /&gt;
    [&#039;fit&#039;]          = {&#039;fi&#039;},                              -- meänkieli&lt;br /&gt;
    [&#039;vot&#039;]          = {&#039;fi&#039;},                              -- Votic&lt;br /&gt;
&lt;br /&gt;
    -- fr (French) cluster:&lt;br /&gt;
    [&#039;bm&#039;]           = {&#039;fr&#039;},                              -- Bambara&lt;br /&gt;
    [&#039;br&#039;]           = {&#039;fr&#039;},                              -- Breton&lt;br /&gt;
    [&#039;co&#039;]           = {&#039;fr&#039;},                              -- Corsican&lt;br /&gt;
    [&#039;ff&#039;]           = {&#039;fr&#039;},                              -- Fulah&lt;br /&gt;
    [&#039;frc&#039;]          = {&#039;fr&#039;},                              -- Cajun French&lt;br /&gt;
    [&#039;frp&#039;]          = {&#039;fr&#039;},                              -- Franco-Provençal&lt;br /&gt;
    [&#039;ht&#039;]           = {&#039;fr&#039;},                              -- Haitian&lt;br /&gt;
    [&#039;ln&#039;]           = {&#039;fr&#039;},                              -- Lingala&lt;br /&gt;
    [&#039;mg&#039;]           = {&#039;fr&#039;},                              -- Malagasy&lt;br /&gt;
    [&#039;pcd&#039;]          = {&#039;fr&#039;},                              -- Picard&lt;br /&gt;
    [&#039;sg&#039;]           = {&#039;fr&#039;},                              -- Sango&lt;br /&gt;
    [&#039;ty&#039;]           = {&#039;fr&#039;},                              -- Tahitian&lt;br /&gt;
    [&#039;wa&#039;]           = {&#039;fr&#039;},                              -- Walloon&lt;br /&gt;
    [&#039;wo&#039;]           = {&#039;fr&#039;},                              -- Wolof&lt;br /&gt;
&lt;br /&gt;
    -- hi (Hindi) cluster&lt;br /&gt;
    [&#039;anp&#039;]          = {&#039;hi&#039;},                              -- Angika&lt;br /&gt;
    [&#039;mai&#039;]          = {&#039;hi&#039;},                              -- Maithili&lt;br /&gt;
    [&#039;sa&#039;]           = {&#039;hi&#039;},                              -- Sanskrit&lt;br /&gt;
&lt;br /&gt;
    -- hif (Fiji Hindi) cluster: hif-deva , hif-latn -&amp;gt; hif (Fiji Hindi)&lt;br /&gt;
    [&#039;hif&#039;]          = {&#039;hif-latn&#039;},&lt;br /&gt;
    [&#039;hif-deva&#039;]     = {&#039;hif&#039;}, &lt;br /&gt;
    [&#039;hif-latn&#039;]     = {&#039;hif&#039;},&lt;br /&gt;
&lt;br /&gt;
    -- id (Indonesian) cluster&lt;br /&gt;
    [&#039;min&#039;]          = {&#039;id&#039;},                              -- Minangkabau&lt;br /&gt;
    [&#039;ace&#039;]          = {&#039;id&#039;},                              -- Achinese&lt;br /&gt;
    [&#039;bug&#039;]          = {&#039;id&#039;},                              -- Buginese&lt;br /&gt;
    [&#039;bjn&#039;]          = {&#039;id&#039;},                              -- Banjar&lt;br /&gt;
    [&#039;jv&#039;]           = {&#039;id&#039;},                              -- Javanese&lt;br /&gt;
    [&#039;su&#039;]           = {&#039;id&#039;},                              -- Sundanese&lt;br /&gt;
    [&#039;map-bms&#039;]      = {&#039;jv&#039;, &#039;id&#039;},                        -- Basa Banyumasan&lt;br /&gt;
&lt;br /&gt;
    -- ike (Eastern Canadian Inuktitut) cluster: ike-cans , ike-latn -&amp;gt; ike (Eastern Canadian Inuktitut)&lt;br /&gt;
    [&#039;ike-cans&#039;]     = {&#039;ik&#039;}, &lt;br /&gt;
    [&#039;ike-latn&#039;]     = {&#039;ik&#039;}, &lt;br /&gt;
&lt;br /&gt;
    -- it (Italian) cluster&lt;br /&gt;
    [&#039;egl&#039;]          = {&#039;it&#039;},                              -- Emiliàn&lt;br /&gt;
    [&#039;eml&#039;]          = {&#039;it&#039;},                              -- Emiliano-Romagnolo&lt;br /&gt;
    [&#039;fur&#039;]          = {&#039;it&#039;},                              -- Friulian&lt;br /&gt;
    [&#039;lij&#039;]          = {&#039;it&#039;},                              -- Ligure&lt;br /&gt;
    [&#039;lmo&#039;]          = {&#039;it&#039;},                              -- lumbaart&lt;br /&gt;
    [&#039;nap&#039;]          = {&#039;it&#039;},                              -- Neapolitan&lt;br /&gt;
    [&#039;pms&#039;]          = {&#039;it&#039;},                              -- Piedmontese&lt;br /&gt;
    [&#039;rgn&#039;]          = {&#039;it&#039;},                              -- Romagnol&lt;br /&gt;
    [&#039;scn&#039;]          = {&#039;it&#039;},                              -- Sicilian&lt;br /&gt;
    [&#039;vec&#039;]          = {&#039;it&#039;},                              -- vèneto&lt;br /&gt;
&lt;br /&gt;
    -- kk (Kazakh) cluster:&lt;br /&gt;
    -- kk-arab , kk-cyrl , kk-latn , kk-cn , kk-kz , kk-tr -&amp;gt; kk (Kazakh)&lt;br /&gt;
    [&#039;kk&#039;]           = {&#039;kk-cyrl&#039;},                         -- Kazakh&lt;br /&gt;
    [&#039;kk-arab&#039;]      = {&#039;kk-cyrl&#039;, &#039;kk&#039;},                   -- Kazakh (Arabic script)&lt;br /&gt;
    [&#039;kk-cn&#039;]        = {&#039;kk-arab&#039;, &#039;kk-cyrl&#039;, &#039;kk&#039;},        -- Kazakh (China)&lt;br /&gt;
    [&#039;kk-cyrl&#039;]      = {&#039;kk&#039;},                              -- Kazakh (Cyrillic script)&lt;br /&gt;
    [&#039;kk-kz&#039;]        = {&#039;kk&#039;, &#039;kk-cyrl&#039;},                   -- Kazakh (Kazakhstan)&lt;br /&gt;
    [&#039;kk-latn&#039;]      = {&#039;kk-cyrl&#039;, &#039;kk&#039;},                   -- Kazakh (Latin script)&lt;br /&gt;
    [&#039;kk-tr&#039;]        = {&#039;kk-latn&#039;, &#039;kk-cyrl&#039;, &#039;kk&#039;},        -- Kazakh (Turkey)&lt;br /&gt;
    [&#039;kaa&#039;]          = {&#039;kk-latn&#039;, &#039;kk-cyrl&#039;},              -- Kara-Kalpak&lt;br /&gt;
&lt;br /&gt;
    -- ku (Kurdish) cluster: ku-latn , ku-arab -&amp;gt; ku (Kurdish)&lt;br /&gt;
    [&#039;ku&#039;]           = {&#039;ku-latn&#039;},&lt;br /&gt;
    [&#039;ku-arab&#039;]      = {&#039;ckb&#039;, &#039;ckb-arab&#039;, &#039;ku&#039;},           -- كوردي (عەرەبی)&lt;br /&gt;
    [&#039;ku-latn&#039;]      = {&#039;ku&#039;},&lt;br /&gt;
    [&#039;ckb&#039;]          = {&#039;ckb-arab&#039;, &#039;ku&#039;},&lt;br /&gt;
&lt;br /&gt;
    -- nl (Dutch) cluster&lt;br /&gt;
    [&#039;af&#039;]           = {&#039;nl&#039;},                              -- Afrikaans&lt;br /&gt;
    [&#039;fy&#039;]           = {&#039;nl&#039;},                              -- Western Frisian&lt;br /&gt;
    [&#039;li&#039;]           = {&#039;nl&#039;},                              -- Liechtenstein&lt;br /&gt;
    [&#039;nl-informal&#039;]  = {&#039;nl&#039;},                              -- Nederlands (informeel)&lt;br /&gt;
    [&#039;vls&#039;]          = {&#039;nl&#039;},                              -- Vlaams&lt;br /&gt;
    [&#039;zea&#039;]          = {&#039;nl&#039;},                              -- Zeeuws&lt;br /&gt;
&lt;br /&gt;
    --pl (Polish) cluster&lt;br /&gt;
    [&#039;csb&#039;]          = {&#039;pl&#039;},                              -- Kashubian&lt;br /&gt;
    [&#039;szl&#039;]          = {&#039;pl&#039;},                              -- Silesian&lt;br /&gt;
&lt;br /&gt;
    -- pt (Portuguese) cluster&lt;br /&gt;
    [&#039;gl&#039;]           = {&#039;pt&#039;},                              -- Galician&lt;br /&gt;
    [&#039;mwl&#039;]          = {&#039;pt&#039;},                              -- Mirandese&lt;br /&gt;
    [&#039;pt&#039;]           = {&#039;pt-br&#039;},                           -- Brazilian Portuguese&lt;br /&gt;
&lt;br /&gt;
    -- ro (Romanian) cluster&lt;br /&gt;
    [&#039;mo&#039;]           = {&#039;ro&#039;},                              -- Moldavian&lt;br /&gt;
    [&#039;rmy&#039;]          = {&#039;ro&#039;},                              -- Romani&lt;br /&gt;
&lt;br /&gt;
    -- ru (Russian) cluster&lt;br /&gt;
    [&#039;ab&#039;]           = {&#039;ru&#039;},                              -- Abkhazian&lt;br /&gt;
    [&#039;av&#039;]           = {&#039;ru&#039;},                              -- Avaric&lt;br /&gt;
    [&#039;ba&#039;]           = {&#039;ru&#039;},                              -- Bashkir&lt;br /&gt;
    [&#039;be-tarask&#039;]    = {&#039;ru&#039;},                              -- Belorussian&lt;br /&gt;
    [&#039;ce&#039;]           = {&#039;ru&#039;},                              -- Chechen&lt;br /&gt;
    [&#039;crh-cyrl&#039;]     = {&#039;ru&#039;},                              -- Crimean Tatar (Cyrillic script)&lt;br /&gt;
    [&#039;cv&#039;]           = {&#039;ru&#039;},                              -- Chuvash&lt;br /&gt;
    [&#039;inh&#039;]          = {&#039;ru&#039;},                              -- Ingush&lt;br /&gt;
    [&#039;koi&#039;]          = {&#039;ru&#039;},                              -- Komi-Permyak&lt;br /&gt;
    [&#039;krc&#039;]          = {&#039;ru&#039;},                              -- Karachay-Balkar&lt;br /&gt;
    [&#039;kv&#039;]           = {&#039;ru&#039;},                              -- Komi&lt;br /&gt;
    [&#039;lbe&#039;]          = {&#039;ru&#039;},                              -- лакку&lt;br /&gt;
    [&#039;lez&#039;]          = {&#039;ru&#039;},                              -- Lezghian&lt;br /&gt;
    [&#039;mhr&#039;]          = {&#039;ru&#039;},                              -- Eastern Mari&lt;br /&gt;
    [&#039;mrj&#039;]          = {&#039;ru&#039;},                              -- Hill Mari&lt;br /&gt;
    [&#039;myv&#039;]          = {&#039;ru&#039;},                              -- Erzya&lt;br /&gt;
    [&#039;os&#039;]           = {&#039;ru&#039;},                              -- Ossetic&lt;br /&gt;
    [&#039;rue&#039;]          = {&#039;uk&#039;, &#039;ru&#039;},                        -- Rusyn&lt;br /&gt;
    [&#039;sah&#039;]          = {&#039;ru&#039;},                              -- Sakha&lt;br /&gt;
    [&#039;tt&#039;]           = {&#039;tt-cyrl&#039;, &#039;ru&#039;},                   -- Tatar&lt;br /&gt;
    [&#039;tt-cyrl&#039;]      = {&#039;ru&#039;},                              -- Tatar (Cyrillic script)&lt;br /&gt;
    [&#039;udm&#039;]          = {&#039;ru&#039;},                              -- Udmurt&lt;br /&gt;
    [&#039;uk&#039;]           = {&#039;ru&#039;},                              -- Ukranian&lt;br /&gt;
    [&#039;xal&#039;]          = {&#039;ru&#039;},                              -- Kalmyk&lt;br /&gt;
    [&#039;tt&#039;]           = {&#039;tt-cyrl&#039;, &#039;ru&#039;},                   -- Tatar&lt;br /&gt;
&lt;br /&gt;
    -- ruq (Megleno Romanian) cluster: ruq-cyrl , ruq-grek , ruq-latn -&amp;gt; ruq (Megleno Romanian)&lt;br /&gt;
    [&#039;ruq&#039;]          = {&#039;ruq-latn&#039;, &#039;ro&#039;},                  -- Megleno-Romanian&lt;br /&gt;
    [&#039;ruq-cyrl&#039;]     = {&#039;ruq&#039;, &#039;mk&#039;},                       -- Megleno-Romanian (Cyrillic script)&lt;br /&gt;
    [&#039;ruq-grek&#039;]     = {&#039;ruq&#039;},                             -- Megleno-Romanian (Greek script)&lt;br /&gt;
    [&#039;ruq-latn&#039;]     = {&#039;ro&#039;, &#039;ruq&#039;},                       -- Megleno-Romanian (Latin script)&lt;br /&gt;
&lt;br /&gt;
    -- sr (Serbian) cluster: sr-ec , sr-el -&amp;gt; sr (Serbian)&lt;br /&gt;
    [&#039;sr&#039;]           = {&#039;sr-ec&#039;},&lt;br /&gt;
    [&#039;sr-ec&#039;]        = {&#039;sr&#039;}, &lt;br /&gt;
    [&#039;sr-el&#039;]        = {&#039;sr&#039;}, &lt;br /&gt;
&lt;br /&gt;
    -- tg (Tajik) cluster: tg-cyrl , tg-latn -&amp;gt; tg (Tajik)&lt;br /&gt;
    [&#039;tg&#039;]           = {&#039;tg-cyrl&#039;},&lt;br /&gt;
    [&#039;tg-cyrl&#039;]      = {&#039;tg&#039;}, &lt;br /&gt;
    [&#039;tg-latn&#039;]      = {&#039;tg&#039;}, &lt;br /&gt;
&lt;br /&gt;
    -- tr (Turkish) cluster&lt;br /&gt;
    [&#039;gag&#039;]          = {&#039;tr&#039;},                              -- Gagauz&lt;br /&gt;
    [&#039;kiu&#039;]          = {&#039;tr&#039;},                              -- Kirmanjki&lt;br /&gt;
    [&#039;lzz&#039;]          = {&#039;tr&#039;},                              -- Lazuri&lt;br /&gt;
&lt;br /&gt;
    -- tt (Tatar) cluster: tt-cyrl , tt-latn -&amp;gt; tt (Tatar)&lt;br /&gt;
    [&#039;tt-cyrl&#039;]      = {&#039;tt&#039;},&lt;br /&gt;
    [&#039;tt-latn&#039;]      = {&#039;tt&#039;},&lt;br /&gt;
&lt;br /&gt;
    -- zh (Chinese) cluster&lt;br /&gt;
    -- /includes/language/converters/ZhConverter.php&lt;br /&gt;
    -- https://gerrit.wikimedia.org/r/703560&lt;br /&gt;
    [&#039;cdo&#039;]          = {&#039;nan&#039;, &#039;zh-hant&#039;, &#039;zh&#039;, &#039;zh-hans&#039;}, -- Min Dong Chinese&lt;br /&gt;
    [&#039;gan&#039;]          = {&#039;gan-hant&#039;, &#039;gan-hans&#039;, &#039;zh-hant&#039;, &#039;zh-hans&#039;, &#039;zh&#039;}, -- Gan &lt;br /&gt;
    [&#039;gan-hans&#039;]     = {&#039;gan&#039;, &#039;gan-hant&#039;, &#039;zh-hans&#039;, &#039;zh&#039;, &#039;zh-hant&#039;},      -- Simplified Gan script&lt;br /&gt;
    [&#039;gan-hant&#039;]     = {&#039;gan&#039;, &#039;gan-hans&#039;, &#039;zh-hant&#039;, &#039;zh&#039;, &#039;zh-hans&#039;},      -- Traditional Gan script&lt;br /&gt;
    [&#039;hak&#039;]          = {&#039;zh-hant&#039;, &#039;zh&#039;, &#039;zh-hans&#039;},        -- Hakka&lt;br /&gt;
    [&#039;ii&#039;]           = {&#039;zh-cn&#039;, &#039;zh-hans&#039;, &#039;zh&#039;, &#039;zh-hant&#039;}, -- Sichuan Yi&lt;br /&gt;
    [&#039;lzh&#039;]          = {&#039;zh-hant&#039;, &#039;zh&#039;, &#039;zh-hans&#039;},        -- Literary Chinese&lt;br /&gt;
    [&#039;nan&#039;]          = {&#039;cdo&#039;, &#039;zh-hant&#039;, &#039;zh&#039;, &#039;zh-hans&#039;}, -- Min Nan Chinese&lt;br /&gt;
    [&#039;szy&#039;]          = {&#039;zh-tw&#039;, &#039;zh-hant&#039;, &#039;zh&#039;, &#039;zh-hans&#039;}, -- Sakizaya&lt;br /&gt;
    [&#039;tay&#039;]          = {&#039;zh-tw&#039;, &#039;zh-hant&#039;, &#039;zh&#039;, &#039;zh-hans&#039;}, -- Atayal&lt;br /&gt;
    [&#039;trv&#039;]          = {&#039;zh-tw&#039;, &#039;zh-hant&#039;, &#039;zh&#039;, &#039;zh-hans&#039;}, -- Seediq&lt;br /&gt;
    [&#039;wuu&#039;]          = {&#039;zh-hans&#039;, &#039;zh-hant&#039;, &#039;zh&#039;},        -- Wu&lt;br /&gt;
    -- https://phabricator.wikimedia.org/T59138&lt;br /&gt;
    -- [&#039;wuu&#039;]          = {&#039;wuu-hans, &#039;wuu-hant&#039;, &#039;zh-hans&#039;, &#039;zh-hant&#039;, &#039;zh&#039;}, -- Wu&lt;br /&gt;
    -- [&#039;wuu-hans&#039;]     = {&#039;wuu&#039;, &#039;wuu-hant&#039;, &#039;zh-hans&#039;, &#039;zh&#039;, &#039;zh-hant&#039;},     -- Simplified Wu&lt;br /&gt;
    -- [&#039;wuu-hant&#039;]     = {&#039;wuu&#039;, &#039;wuu-hans&#039;, &#039;zh-hant&#039;, &#039;zh&#039;, &#039;zh-hans&#039;},     -- Traditional Wu&lt;br /&gt;
    [&#039;yue&#039;]          = {&#039;zh-hk&#039;, &#039;zh-hant&#039;, &#039;zh-hans&#039;, &#039;zh&#039;}, -- Cantonese&lt;br /&gt;
    -- https://phabricator.wikimedia.org/T59106&lt;br /&gt;
    -- [&#039;yue&#039;]          = {&#039;yue-hant&#039;, &#039;yue-hans, &#039;zh-hk&#039;, &#039;zh-hant&#039;, &#039;zh-hans&#039;, &#039;zh&#039;}, -- Cantonese&lt;br /&gt;
    -- [&#039;yue-hans&#039;]     = {&#039;yue&#039;, &#039;yue-hant&#039;, &#039;zh-hans&#039;, &#039;zh&#039;, &#039;zh-hk&#039;, &#039;zh-hant&#039;},     -- Simplified Cantonese&lt;br /&gt;
    -- [&#039;yue-hant&#039;]     = {&#039;yue&#039;, &#039;yue-hans&#039;, &#039;zh-hk&#039;, &#039;zh-hant&#039;, &#039;zh&#039;, &#039;zh-hans&#039;},     -- Traditional Cantonese&lt;br /&gt;
    [&#039;za&#039;]           = {&#039;zh-hans&#039;, &#039;zh-hant&#039;, &#039;zh&#039;},        -- Zhuang&lt;br /&gt;
    -- The time allocated for running scripts has expired.&lt;br /&gt;
    -- [&#039;zh&#039;]           = {&#039;zh-hans&#039;, &#039;zh-hant&#039;, &#039;zh-cn&#039;, &#039;zh-tw&#039;, &#039;zh-hk&#039;}, -- Chinese&lt;br /&gt;
    -- [&#039;zh-hans&#039;]      = {&#039;zh-cn&#039;, &#039;zh&#039;, &#039;zh-hant&#039;},   -- Simplified Chinese&lt;br /&gt;
    -- [&#039;zh-hant&#039;]      = {&#039;zh-tw&#039;, &#039;zh-hk&#039;, &#039;zh&#039;, &#039;zh-hans&#039;},   -- Traditional Chinese&lt;br /&gt;
    -- [&#039;zh-tw&#039;]        = {&#039;zh-hant&#039;, &#039;zh-hk&#039;, &#039;zh&#039;, &#039;zh-hans&#039;}, -- Chinese (Taiwan)&lt;br /&gt;
    -- [&#039;zh-hk&#039;]        = {&#039;zh-hant&#039;, &#039;zh-tw&#039;, &#039;zh&#039;, &#039;zh-hans&#039;}, -- Chinese (Hong Kong)&lt;br /&gt;
    [&#039;zh&#039;]           = {&#039;zh-hans&#039;, &#039;zh-hant&#039;, &#039;zh-hk&#039;}, -- Chinese&lt;br /&gt;
    [&#039;zh-hans&#039;]      = {&#039;zh-hant&#039;, &#039;zh-hk&#039;},   -- Simplified Chinese&lt;br /&gt;
    [&#039;zh-hant&#039;]      = {&#039;zh-hk&#039;, &#039;zh-hans&#039;},   -- Traditional Chinese&lt;br /&gt;
    [&#039;zh-cn&#039;]        = {&#039;zh-hans&#039;, &#039;zh&#039;, &#039;zh-hant&#039;}, -- Chinese (Mainland China)&lt;br /&gt;
    [&#039;zh-sg&#039;]        = {&#039;zh-hans&#039;, &#039;zh-cn&#039;, &#039;zh&#039;, &#039;zh-hant&#039;}, -- Chinese (Singapore)&lt;br /&gt;
    [&#039;zh-my&#039;]        = {&#039;zh-hans&#039;, &#039;zh-sg&#039;, &#039;zh-cn&#039;, &#039;zh&#039;, &#039;zh-hant&#039;}, -- Chinese (Malaysia)&lt;br /&gt;
    [&#039;zh-tw&#039;]        = {&#039;zh-hant&#039;, &#039;zh-hk&#039;, &#039;zh-hans&#039;}, -- Chinese (Taiwan)&lt;br /&gt;
    [&#039;zh-hk&#039;]        = {&#039;zh-hant&#039;, &#039;zh-hans&#039;}, -- Chinese (Hong Kong)&lt;br /&gt;
    [&#039;zh-mo&#039;]        = {&#039;zh-hant&#039;, &#039;zh-hk&#039;, &#039;zh-tw&#039;, &#039;zh&#039;, &#039;zh-hans&#039;}, -- Chinese (Macau)&lt;br /&gt;
    [&#039;zh-classical&#039;] = {&#039;lzh&#039;, &#039;zh-hant&#039;, &#039;zh&#039;, &#039;zh-hans&#039;}, -- Classical Chinese -&amp;gt; Literary Chinese&lt;br /&gt;
    [&#039;zh-min-nan&#039;]   = {&#039;nan&#039;, &#039;cdo&#039;, &#039;zh-hant&#039;, &#039;zh&#039;, &#039;zh-hans&#039;},   -- Chinese (Min Nan) -&amp;gt; Min Nan Chinese&lt;br /&gt;
    [&#039;zh-yue&#039;]       = {&#039;yue&#039;, &#039;zh-hk&#039;, &#039;zh-hant&#039;, &#039;zh-hans&#039;, &#039;zh&#039;}, -- Yue Chinese -&amp;gt; Cantonese&lt;br /&gt;
&lt;br /&gt;
    ------------------------&lt;br /&gt;
    --------- misc ---------&lt;br /&gt;
    ------------------------&lt;br /&gt;
    [&#039;arz&#039;]          = {&#039;ar&#039;},                              -- Egyptian Arabic -&amp;gt; Arabic&lt;br /&gt;
    [&#039;azb&#039;]          = {&#039;az&#039;},                              -- Southern Azerbaijani -&amp;gt; Azerbaijani &lt;br /&gt;
    [&#039;be-x-old&#039;]     = {&#039;be-tarask&#039;},                       -- be-x-old -&amp;gt; be-tarask (wrong to correct Taraškievica form of Belarusian orthography)&lt;br /&gt;
    [&#039;bh&#039;]           = {&#039;bho&#039;},                             -- Bihari -&amp;gt; Bhojpuri&lt;br /&gt;
    [&#039;bpy&#039;]          = {&#039;bn&#039;},                              -- Bishnupria Manipuri -&amp;gt; Bengali&lt;br /&gt;
&lt;br /&gt;
    -- da&lt;br /&gt;
    [&#039;jut&#039;]          = {&#039;da&#039;},                              -- Jutish -&amp;gt; Danish&lt;br /&gt;
    [&#039;kl&#039;]           = {&#039;da&#039;},                              -- Kalaallisut -&amp;gt; Danish&lt;br /&gt;
&lt;br /&gt;
    [&#039;en-gb&#039;]        = {&#039;en&#039;},                              -- Brexit -&amp;gt; English&lt;br /&gt;
    [&#039;yi&#039;]           = {&#039;he&#039;},                              -- Yiddish -&amp;gt; Hebrew&lt;br /&gt;
    [&#039;iu&#039;]           = {&#039;ike-cans&#039;},                        -- Inuktitut -&amp;gt; Eastern Canadian (Aboriginal syllabics)&lt;br /&gt;
    [&#039;xmf&#039;]          = {&#039;ka&#039;},                              -- Mingrelian -&amp;gt; Georgian&lt;br /&gt;
    [&#039;kbd&#039;]          = {&#039;kbd-cyrl&#039;, &#039;ru&#039;},                  -- Kabardian -&amp;gt; Адыгэбзэ&lt;br /&gt;
    [&#039;tcy&#039;]          = {&#039;kn&#039;},                              -- Tulu -&amp;gt; Kannada&lt;br /&gt;
    [&#039;ko-kp&#039;]        = {&#039;ko&#039;},                              -- 한국어 (조선) -&amp;gt; Korean&lt;br /&gt;
    [&#039;ks&#039;]           = {&#039;ks-arab&#039;},                         -- Kashmiri -&amp;gt; Kashmiri (Arabic script)&lt;br /&gt;
&lt;br /&gt;
    -- lt&lt;br /&gt;
    [&#039;bat-smg&#039;]      = {&#039;sgs&#039;, &#039;lt&#039;},                       -- Samogitian -&amp;gt; Lithuanian&lt;br /&gt;
    [&#039;sgs&#039;]          = {&#039;lt&#039;},                              -- Samogitian -&amp;gt; Lithuanian&lt;br /&gt;
&lt;br /&gt;
    [&#039;ltg&#039;]          = {&#039;lv&#039;},                              -- Latvian -&amp;gt; Latgalian&lt;br /&gt;
    [&#039;dtp&#039;]          = {&#039;ms&#039;},                              -- Central Dusun -&amp;gt; Malay&lt;br /&gt;
    [&#039;no&#039;]           = {&#039;nb&#039;},                              -- Norwegian (bokmål) -&amp;gt; Norwegian Bokmål&lt;br /&gt;
    [&#039;roa-rup&#039;]      = {&#039;rup&#039;},                             -- Aromanian (other Romance) -&amp;gt; Aromanian&lt;br /&gt;
    [&#039;aln&#039;]          = {&#039;sq&#039;},                              -- Gheg Albanian -&amp;gt; Albanian&lt;br /&gt;
    [&#039;ug&#039;]           = {&#039;ug-arab&#039;},                         -- Uyghur -&amp;gt; Uyghur (Arabic script)&lt;br /&gt;
    [&#039;khw&#039;]          = {&#039;ur&#039;},                              -- Khowar -&amp;gt; Urdu&lt;br /&gt;
}&lt;/div&gt;</summary>
		<author><name>WikiAdmin</name></author>
	</entry>
	<entry>
		<id>https://unimage.wcnm.pw/index.php?title=%E6%A8%A1%E5%9D%97:Dev/Entrypoint&amp;diff=706</id>
		<title>模块:Dev/Entrypoint</title>
		<link rel="alternate" type="text/html" href="https://unimage.wcnm.pw/index.php?title=%E6%A8%A1%E5%9D%97:Dev/Entrypoint&amp;diff=706"/>
		<updated>2026-08-31T12:54:33Z</updated>

		<summary type="html">&lt;p&gt;WikiAdmin：​从 Fandom Developer Wiki 本地化全局模块，源修订 155355&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;-- 来源：https://dev.fandom.com/wiki/Module%3AEntrypoint&lt;br /&gt;
-- 许可：CC BY-SA，作者与修订记录见来源页面&lt;br /&gt;
--- Entrypoint templating wrapper for Scribunto packages.&lt;br /&gt;
--  The module generates an entrypoint function that can execute Scribunto&lt;br /&gt;
--  package calls in the template context. This allows a package to support&lt;br /&gt;
--  both direct and template invocations.&lt;br /&gt;
--  &lt;br /&gt;
--  @script             entrypoint&lt;br /&gt;
--  @release            stable&lt;br /&gt;
--  @author             [[User:8nml|8nml]]&lt;br /&gt;
--  @param              {table} package Scribunto package.&lt;br /&gt;
--  @error[85]          {string} &#039;you must specify a function to call&#039;&lt;br /&gt;
--  @error[91]          {string} &#039;the function you specified did not exist&#039;&lt;br /&gt;
--  @error[opt,95]      {string} &#039;$2 is not a function&#039;&lt;br /&gt;
--  @return             {function} Template entrypoint - @{main}.&lt;br /&gt;
--  @note               Parent frames are not available in Entrypoint&#039;s&lt;br /&gt;
--                      `frame`. This is because recursive (grandparent)&lt;br /&gt;
--                      frame access is impossible in legacy Scribunto&lt;br /&gt;
--                      due to [[mw:Manual:Parser#Empty-argument expansion&lt;br /&gt;
--                      cache|empty-argument expansion cache]] limitations.&lt;br /&gt;
--  @note               As Entrypoint enables template access rather than&lt;br /&gt;
--                      a new extension hook, it does not work with named&lt;br /&gt;
--                      numeric parameters such as `1=` or `2=`. This may&lt;br /&gt;
--                      result in unexpected behaviour such as Entrypoint&lt;br /&gt;
--                      and module errors.&lt;br /&gt;
&lt;br /&gt;
--- Stateless, sequential Lua iterator.&lt;br /&gt;
--  @function           inext&lt;br /&gt;
--  @param              {table} t Invariant state to loop over.&lt;br /&gt;
--  @param              {number} i Control variable (current index).&lt;br /&gt;
--  @return[opt]        {number} Next index.&lt;br /&gt;
--  @return[opt]        {number|string|table|boolean} Next value.&lt;br /&gt;
--  @see                [[github:lua/lua/blob/v5.1.1/lbaselib.c#L247]]&lt;br /&gt;
local inext = select(1, ipairs{})&lt;br /&gt;
&lt;br /&gt;
--- Check for MediaWiki version 1.25.&lt;br /&gt;
--  The concurrent Scribunto release adds a type check for package functions.&lt;br /&gt;
--  @variable           {boolean} func_check&lt;br /&gt;
--  @see                [[mw:MediaWiki 1.24/wmf7#Scribunto]]&lt;br /&gt;
local func_check = tonumber(mw.site.currentVersion:match(&#039;^%d+.%d+&#039;)) &amp;gt;= 1.25&lt;br /&gt;
&lt;br /&gt;
--- MediaWiki error message getter.&lt;br /&gt;
--  Mimics Scribunto error formatting for script errors. &lt;br /&gt;
--  @function           msg&lt;br /&gt;
--  @param              {string} key MediaWiki i18n message key.&lt;br /&gt;
--  @param[opt]         {string} fn_name Name of package function.&lt;br /&gt;
--  @return             {string} Formatted lowercase message.&lt;br /&gt;
--  @local&lt;br /&gt;
local function msg(key, fn_name)&lt;br /&gt;
    return select(1, mw.message.new(key)&lt;br /&gt;
        :plain()&lt;br /&gt;
        :match(&#039;:%s*(.-)[.۔。෴։።]?$&#039;)&lt;br /&gt;
        :gsub(&#039;^.&#039;, mw.ustring.lower)&lt;br /&gt;
        :gsub(&#039;$2&#039;, fn_name or &#039;$2&#039;)&lt;br /&gt;
    )&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
--- Template entrypoint function generated by this module.&lt;br /&gt;
--  @function           main&lt;br /&gt;
--  @param              {Frame} frame Scribunto frame in module context.&lt;br /&gt;
--  @return             {string} Module output in template context.&lt;br /&gt;
return function(package) return function(f)&lt;br /&gt;
    local frame = f:getParent()&lt;br /&gt;
&lt;br /&gt;
    local args_mt = {}&lt;br /&gt;
    local arg_cache = {}&lt;br /&gt;
&lt;br /&gt;
    args_mt.__pairs = function()&lt;br /&gt;
        return next, arg_cache, nil&lt;br /&gt;
    end&lt;br /&gt;
    args_mt.__ipairs = function()&lt;br /&gt;
        return inext, arg_cache, 0&lt;br /&gt;
    end&lt;br /&gt;
    args_mt.__index = function(t, k)&lt;br /&gt;
        return arg_cache[k]&lt;br /&gt;
    end&lt;br /&gt;
&lt;br /&gt;
    for key, val in pairs(frame.args) do&lt;br /&gt;
        arg_cache[key] = val&lt;br /&gt;
    end&lt;br /&gt;
    local fn_name = table.remove(arg_cache, 1)&lt;br /&gt;
&lt;br /&gt;
    f.args = setmetatable({}, args_mt)&lt;br /&gt;
    frame.args = setmetatable({}, args_mt)&lt;br /&gt;
&lt;br /&gt;
    if not fn_name then&lt;br /&gt;
        error(msg(&#039;scribunto-common-nofunction&#039;))&lt;br /&gt;
    end&lt;br /&gt;
&lt;br /&gt;
    fn_name = mw.text.trim(fn_name)&lt;br /&gt;
&lt;br /&gt;
    if not package[fn_name] then&lt;br /&gt;
        error(msg(&#039;scribunto-common-nosuchfunction&#039;, fn_name))&lt;br /&gt;
    end&lt;br /&gt;
&lt;br /&gt;
    if func_check and type(package[fn_name]) ~= &#039;function&#039; then&lt;br /&gt;
        error(msg(&#039;scribunto-common-notafunction&#039;, fn_name))&lt;br /&gt;
    end&lt;br /&gt;
&lt;br /&gt;
    return package[fn_name](frame)&lt;br /&gt;
end end&lt;/div&gt;</summary>
		<author><name>WikiAdmin</name></author>
	</entry>
	<entry>
		<id>https://unimage.wcnm.pw/index.php?title=%E6%A8%A1%E5%9D%97:Dev/Dialogue&amp;diff=705</id>
		<title>模块:Dev/Dialogue</title>
		<link rel="alternate" type="text/html" href="https://unimage.wcnm.pw/index.php?title=%E6%A8%A1%E5%9D%97:Dev/Dialogue&amp;diff=705"/>
		<updated>2026-08-31T12:54:32Z</updated>

		<summary type="html">&lt;p&gt;WikiAdmin：​从 Fandom Developer Wiki 本地化全局模块，源修订 194365&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;-- 来源：https://dev.fandom.com/wiki/Module%3ADialogue&lt;br /&gt;
-- 许可：CC BY-SA，作者与修订记录见来源页面&lt;br /&gt;
--| Creates dialogue definition lists&lt;br /&gt;
--- For whatever reason, refuses to make blockquotes&lt;br /&gt;
--- &amp;lt;nowiki&amp;gt;&lt;br /&gt;
local Dialogue = {}&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
-- Libraries and Globals&lt;br /&gt;
----&lt;br /&gt;
-- Parses invocation and template parameters, trims whitespace, and removes blanks.&lt;br /&gt;
local getArgs = require(&#039;Module:Dev/Arguments&#039;).getArgs&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
-- Local Functions&lt;br /&gt;
----&lt;br /&gt;
local function makeInvokeFunc(funcName)&lt;br /&gt;
  return function (frame)&lt;br /&gt;
    local args = getArgs(frame, {removeBlanks = false})&lt;br /&gt;
    return Dialogue[funcName](args)&lt;br /&gt;
  end&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
-- Public Functions&lt;br /&gt;
----&lt;br /&gt;
--% Formats dialogue between multiple speakers&lt;br /&gt;
--- Intended to replace {{Dialogue}}.  &lt;br /&gt;
--- Syntax compliant with [[wikipedia:Template:Dialogue]] &lt;br /&gt;
--- with portability and citation modifications&lt;br /&gt;
--@ frame (table) Invokes the frame from {{Dialogue}}. See [[Template:Dialogue/doc]].&lt;br /&gt;
--: (string) HTML &amp;lt;dl /&amp;gt;&lt;br /&gt;
Dialogue.main = makeInvokeFunc(&#039;dialogue&#039;)&lt;br /&gt;
--% &amp;amp; crafts the Dialogue definition list&lt;br /&gt;
--@ args (table) Arguments passed from Module function call &amp;lt;code&amp;gt;[.main]&amp;lt;/code&amp;gt; or other Lua Modules&lt;br /&gt;
function Dialogue.dialogue (args)&lt;br /&gt;
  local block = mw.html.create(&#039;dl&#039;):addClass(&#039;dialogue-wrapper&#039;)&lt;br /&gt;
  for i,v in ipairs(args) do&lt;br /&gt;
    local next_param = i + 1&lt;br /&gt;
    local mood_line = next_param / 2&lt;br /&gt;
      if i == 1 then &lt;br /&gt;
        if v == &#039;action&#039; then&lt;br /&gt;
          block:tag(&#039;dd&#039;)&lt;br /&gt;
          :tag(&#039;small&#039;):attr(&#039;data-dialogue&#039;,&#039;action&#039;)&lt;br /&gt;
          :tag(&#039;u&#039;)&lt;br /&gt;
          :wikitext(&#039;[&#039;..args[next_param]..&#039;]&#039;)&lt;br /&gt;
          :done():done():done()&lt;br /&gt;
        else&lt;br /&gt;
          local speaker = &lt;br /&gt;
            (args[i] and args[args[i]]) &lt;br /&gt;
            and args[args[i]]&lt;br /&gt;
            or (&lt;br /&gt;
                type(args[i]) == &#039;string&#039; &lt;br /&gt;
                    and mw.text.trim(args[i]):len() &amp;gt; 0&lt;br /&gt;
                ) &lt;br /&gt;
              and args[i] &lt;br /&gt;
              or nil&lt;br /&gt;
          speaker = speaker and string.format(&amp;quot;&#039;&#039;&#039;%s&#039;&#039;&#039;&amp;quot;, speaker)&lt;br /&gt;
          local mood = args[&#039;mood&#039;..mood_line] or nil&lt;br /&gt;
          mood = mood and string.format(&amp;quot;&amp;amp;nbsp;&#039;&#039;(%s)&#039;&#039;&amp;quot;, mood)&lt;br /&gt;
          if speaker or mood then&lt;br /&gt;
            block:tag(&#039;dt&#039;)&lt;br /&gt;
            :wikitext(&lt;br /&gt;
              (&#039;%s%s&#039;):format( speaker or &#039;&#039;, mood or &#039;&#039;)&lt;br /&gt;
            ):done()&lt;br /&gt;
          end&lt;br /&gt;
          if args[next_param] then&lt;br /&gt;
            block:tag(&#039;dd&#039;):tag(&#039;q&#039;)&lt;br /&gt;
            :wikitext(args[next_param])&lt;br /&gt;
            :done():done()&lt;br /&gt;
          else&lt;br /&gt;
            block:tag(&#039;dd&#039;):wikitext(&#039;...&#039;):done()&lt;br /&gt;
          end&lt;br /&gt;
        end&lt;br /&gt;
      elseif math.fmod(i, 2) == 1 then&lt;br /&gt;
        if v == &#039;action&#039; then&lt;br /&gt;
          block:tag(&#039;dd&#039;)&lt;br /&gt;
          :tag(&#039;small&#039;)&lt;br /&gt;
          :attr(&#039;data-dialogue&#039;,&#039;action&#039;)&lt;br /&gt;
          :tag(&#039;u&#039;)&lt;br /&gt;
          :wikitext(&#039;[&#039;..args[next_param]..&#039;]&#039;)&lt;br /&gt;
          :done():done():done()&lt;br /&gt;
        else&lt;br /&gt;
          local speaker = &lt;br /&gt;
            (args[i] and args[args[i]]) &lt;br /&gt;
            and args[args[i]]&lt;br /&gt;
            or (&lt;br /&gt;
                type(args[i]) == &#039;string&#039; &lt;br /&gt;
                    and mw.text.trim(args[i]):len() &amp;gt; 0&lt;br /&gt;
                ) &lt;br /&gt;
              and args[i] &lt;br /&gt;
              or nil&lt;br /&gt;
          speaker = speaker and string.format(&amp;quot;&#039;&#039;&#039;%s&#039;&#039;&#039;&amp;quot;, speaker)&lt;br /&gt;
          local mood = args[&#039;mood&#039;..mood_line] or nil&lt;br /&gt;
          mood = mood and string.format(&amp;quot;&amp;amp;nbsp;&#039;&#039;(%s)&#039;&#039;&amp;quot;, mood)&lt;br /&gt;
          if speaker or mood then&lt;br /&gt;
            block:tag(&#039;dt&#039;)&lt;br /&gt;
            :wikitext(&lt;br /&gt;
              (&#039;%s%s&#039;):format( speaker or &#039;&#039;, mood or &#039;&#039;)&lt;br /&gt;
            )&lt;br /&gt;
            :done()&lt;br /&gt;
          end&lt;br /&gt;
          if args[next_param] ~= &#039;&#039; then&lt;br /&gt;
            block:tag(&#039;dd&#039;):tag(&#039;q&#039;)&lt;br /&gt;
            :wikitext(args[next_param])&lt;br /&gt;
            :done():done()&lt;br /&gt;
          else&lt;br /&gt;
            block:tag(&#039;dd&#039;):wikitext(&#039;...&#039;):done()&lt;br /&gt;
          end&lt;br /&gt;
        end&lt;br /&gt;
      end&lt;br /&gt;
  end&lt;br /&gt;
  block:done()&lt;br /&gt;
  if args[&#039;cite&#039;] then&lt;br /&gt;
    block:tag(&#039;cite&#039;):wikitext(string.format(&amp;quot;— %s&amp;quot;, args[&#039;cite&#039;])):done()&lt;br /&gt;
  end&lt;br /&gt;
  return tostring(block)&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
-- Output&lt;br /&gt;
----&lt;br /&gt;
return Dialogue&lt;/div&gt;</summary>
		<author><name>WikiAdmin</name></author>
	</entry>
	<entry>
		<id>https://unimage.wcnm.pw/index.php?title=%E6%A8%A1%E5%9D%97:Dev/Arguments/i18n&amp;diff=704</id>
		<title>模块:Dev/Arguments/i18n</title>
		<link rel="alternate" type="text/html" href="https://unimage.wcnm.pw/index.php?title=%E6%A8%A1%E5%9D%97:Dev/Arguments/i18n&amp;diff=704"/>
		<updated>2026-08-31T12:54:31Z</updated>

		<summary type="html">&lt;p&gt;WikiAdmin：​从 Fandom Developer Wiki 本地化全局模块，源修订 204766&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;-- 来源：https://dev.fandom.com/wiki/Module%3AArguments/i18n&lt;br /&gt;
-- 许可：CC BY-SA，作者与修订记录见来源页面&lt;br /&gt;
-- &amp;lt;nowiki&amp;gt;&lt;br /&gt;
return {&lt;br /&gt;
    [&amp;quot;_metadata&amp;quot;] = {&lt;br /&gt;
        [&amp;quot;order&amp;quot;] = {&lt;br /&gt;
            &amp;quot;error-overwrite-permission&amp;quot;,&lt;br /&gt;
            &amp;quot;error-value-func&amp;quot;,&lt;br /&gt;
            &amp;quot;error-write-permission&amp;quot;&lt;br /&gt;
        }&lt;br /&gt;
    },&lt;br /&gt;
    [&amp;quot;en&amp;quot;] = {&lt;br /&gt;
        [&amp;quot;error-overwrite-permission&amp;quot;] = &amp;quot;could not write to argument table key \&amp;quot;$1\&amp;quot;; overwriting existing arguments is not permitted&amp;quot;,&lt;br /&gt;
        [&amp;quot;error-value-func&amp;quot;] = &amp;quot;bad value assigned to option \&amp;quot;valueFunc\&amp;quot; (function expected, got $1)&amp;quot;,&lt;br /&gt;
        [&amp;quot;error-write-permission&amp;quot;] = &amp;quot;could not write to argument table key \&amp;quot;$1\&amp;quot;; the table is read-only&amp;quot;&lt;br /&gt;
    },&lt;br /&gt;
    [&amp;quot;qqq&amp;quot;] = {&lt;br /&gt;
        [&amp;quot;error-overwrite-permission&amp;quot;] = &amp;quot;Error thrown after write attempt to existing arguments when options.noOverwrite is true&amp;quot;,&lt;br /&gt;
        [&amp;quot;error-value-func&amp;quot;] = &amp;quot;Error thrown when options.valueFunc is not a function&amp;quot;,&lt;br /&gt;
        [&amp;quot;error-write-permission&amp;quot;] = &amp;quot;Error thrown after write attempt to arguments when options.readOnly is true&amp;quot;&lt;br /&gt;
    },&lt;br /&gt;
    [&amp;quot;bn&amp;quot;] = {&lt;br /&gt;
        [&amp;quot;error-overwrite-permission&amp;quot;] = &amp;quot;আর্গুমেন্ট টেবিল কী \&amp;quot;$1\&amp;quot; কে লিখতে পারেনি ; আগের থেকে থাকা আর্গুমেন্ট কে ওভাররাইট করার অনুমতি নাই&amp;quot;,&lt;br /&gt;
        [&amp;quot;error-value-func&amp;quot;] = &amp;quot;\&amp;quot;valueFunc\&amp;quot; কে খারাপ ভ্যালু দেয়া হয়েছে। (fফাঙ্কশনের অপক্ষা করতে $1 পেয়েছে)&amp;quot;,&lt;br /&gt;
        [&amp;quot;error-write-permission&amp;quot;] = &amp;quot;আর্গুমেন্ট টেবিল কী \&amp;quot;$1\&amp;quot; কে ওভাররাইট করতে পৰ যায়নি; এই টেবিলটি রিড-অনলি&amp;quot;&lt;br /&gt;
    },&lt;br /&gt;
    [&amp;quot;de&amp;quot;] = {&lt;br /&gt;
        [&amp;quot;error-overwrite-permission&amp;quot;] = &amp;quot;konnte nicht in den Argument Tabellenschlüssel „$1“ schreiben; das Überschreiben vorhandener Argumente ist nicht erlaubt&amp;quot;,&lt;br /&gt;
        [&amp;quot;error-value-func&amp;quot;] = &amp;quot;der Option „valueFunc“ wurde ein falscher Wert zugewiesen (Funktion erwartet, erhielt $1)&amp;quot;,&lt;br /&gt;
        [&amp;quot;error-write-permission&amp;quot;] = &amp;quot;konnte nicht in das Argument Tabellenschlüssel „$1“ schreiben; die Tabelle ist schreibgeschützt&amp;quot;&lt;br /&gt;
    },&lt;br /&gt;
    [&amp;quot;es&amp;quot;] = {&lt;br /&gt;
        [&amp;quot;error-overwrite-permission&amp;quot;] = &amp;quot;No se puede escribir en la clave de matriz de argumentos \&amp;quot;$1\&amp;quot;; no se permite sobrescribir los argumentos existentes&amp;quot;,&lt;br /&gt;
        [&amp;quot;error-value-func&amp;quot;] = &amp;quot;Se asignó un valor inválido a la opción \&amp;quot;valueFunc\&amp;quot; (se esperaba una función, se obtuvo $1)&amp;quot;,&lt;br /&gt;
        [&amp;quot;error-write-permission&amp;quot;] = &amp;quot;No se puede escribir en la matriz clave de los argumentos \&amp;quot;$1\&amp;quot;; la matriz está en modo de solo lectura&amp;quot;&lt;br /&gt;
    },&lt;br /&gt;
    [&amp;quot;fr&amp;quot;] = {&lt;br /&gt;
        [&amp;quot;error-overwrite-permission&amp;quot;] = &amp;quot;impossible d&#039;écrire dans la clé du tableau des arguments \&amp;quot;$1\&amp;quot;; l&#039;écrasement des arguments existants n&#039;est pas autorisé&amp;quot;,&lt;br /&gt;
        [&amp;quot;error-value-func&amp;quot;] = &amp;quot;valeur invalide assignée à une option \&amp;quot;valueFunc\&amp;quot; (fonction espérée, donne $1)&amp;quot;,&lt;br /&gt;
        [&amp;quot;error-write-permission&amp;quot;] = &amp;quot;impossible d&#039;écrire dans la clé du tableau des arguments \&amp;quot;$1\&amp;quot;; le tableau est en mode lecture-seule&amp;quot;&lt;br /&gt;
    },&lt;br /&gt;
    [&amp;quot;hi&amp;quot;] = {&lt;br /&gt;
        [&amp;quot;error-overwrite-permission&amp;quot;] = &amp;quot;तर्क टेबल की \&amp;quot;$1\&amp;quot; पर ओवर्राइट नहीं किया जा सका; मौजूदा तर्कों को ओवर्राइट करने की अनुमति नहीं है&amp;quot;,&lt;br /&gt;
        [&amp;quot;error-value-func&amp;quot;] = &amp;quot;\&amp;quot;valueFunc\&amp;quot; फंक्शन को बुरा वैल्यू निर्धारित किया गया है (फंक्शन की अपेक्षा की, $1 पाया)&amp;quot;,&lt;br /&gt;
        [&amp;quot;error-write-permission&amp;quot;] = &amp;quot;तर्क टेबल की \&amp;quot;$1\&amp;quot; पर ओवर्राइट नहीं किया जा सका; टेबल केवल पठन के लिए है&amp;quot;&lt;br /&gt;
    },&lt;br /&gt;
    [&amp;quot;ru&amp;quot;] = {&lt;br /&gt;
        [&amp;quot;error-overwrite-permission&amp;quot;] = &amp;quot;невозможно записать аргумент \&amp;quot;$1\&amp;quot;: перезаписывать существующие аргументы запрещено&amp;quot;,&lt;br /&gt;
        [&amp;quot;error-value-func&amp;quot;] = &amp;quot;параметру \&amp;quot;valueFunc\&amp;quot; присвоено неверное значение (ожидается функция, предоставлено $1)&amp;quot;,&lt;br /&gt;
        [&amp;quot;error-write-permission&amp;quot;] = &amp;quot;невозможно записать аргумент \&amp;quot;$1\&amp;quot;: таблица находится в режиме \&amp;quot;только чтение\&amp;quot;&amp;quot;&lt;br /&gt;
    },&lt;br /&gt;
    [&amp;quot;tr&amp;quot;] = {&lt;br /&gt;
        [&amp;quot;error-overwrite-permission&amp;quot;] = &amp;quot;\&amp;quot;$1\&amp;quot; bağımsız değişken tablosu anahtarına yazılamadı; mevcut bağımsız değişkenlerin üzerine yazılmasına izin verilmez&amp;quot;,&lt;br /&gt;
        [&amp;quot;error-value-func&amp;quot;] = &amp;quot;\&amp;quot;valueFunc\&amp;quot; seçeneğine atanan hatalı değer (işlev beklendi, $1 alındı)&amp;quot;,&lt;br /&gt;
        [&amp;quot;error-write-permission&amp;quot;] = &amp;quot;\&amp;quot;$1\&amp;quot; bağımsız değişken tablosu anahtarına yazılamadı; tablo salt okunurdur&amp;quot;&lt;br /&gt;
    }&lt;br /&gt;
}&lt;br /&gt;
-- &amp;lt;/nowiki&amp;gt;&lt;/div&gt;</summary>
		<author><name>WikiAdmin</name></author>
	</entry>
	<entry>
		<id>https://unimage.wcnm.pw/index.php?title=%E6%A8%A1%E5%9D%97:Dev/Arguments&amp;diff=703</id>
		<title>模块:Dev/Arguments</title>
		<link rel="alternate" type="text/html" href="https://unimage.wcnm.pw/index.php?title=%E6%A8%A1%E5%9D%97:Dev/Arguments&amp;diff=703"/>
		<updated>2026-08-31T12:54:30Z</updated>

		<summary type="html">&lt;p&gt;WikiAdmin：​从 Fandom Developer Wiki 本地化全局模块，源修订 197966&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;-- 来源：https://dev.fandom.com/wiki/Module%3AArguments&lt;br /&gt;
-- 许可：CC BY-SA，作者与修订记录见来源页面&lt;br /&gt;
--- Arguments invocation argument extractor for Scribunto modules.&lt;br /&gt;
--  It is intended for use by other Lua modules, and should not be&lt;br /&gt;
--  called from an invocation (`#invoke`) directly.&lt;br /&gt;
--  &lt;br /&gt;
--  This module supports the following features:&lt;br /&gt;
--   * Trimming and blank argument removal.&lt;br /&gt;
--   * Argument inheritance between child and parent frames.&lt;br /&gt;
--   * Argument extraction for external modules and console input.&lt;br /&gt;
--   * Options to customise argument extraction behaviour.&lt;br /&gt;
--  &lt;br /&gt;
--  @script             arguments&lt;br /&gt;
--  @release            stable&lt;br /&gt;
--  @note               The `args` table from the @{arguments.getArgs}&lt;br /&gt;
--                      function is a metatable for performance reasons.&lt;br /&gt;
--                      Thus, the table will not permit Lua table methods&lt;br /&gt;
--                      such as `#args`, @{next|next(args)}, and @{table}&lt;br /&gt;
--                      library functions.&lt;br /&gt;
--  @note               This module will eventually be adapted as a&lt;br /&gt;
--                      library in [[mw:gerrit:q/158323|MediaWiki&lt;br /&gt;
--                      core]], called as `require(&#039;getArgs&#039;)`. The core&lt;br /&gt;
--                      library will remove `options.parentOnly`.&lt;br /&gt;
--  @author             [[wikipedia:User:Mr. Stradivarius|Mr. Stradivarius]] (Wikipedia)&lt;br /&gt;
--  @author             [[wikipedia:User:Anomie|Anomie]] (Wikipedia)&lt;br /&gt;
--  @author             [[wikipedia:User:Jackmcbarn|Jackmcbarn]] (Wikipedia)&lt;br /&gt;
--  @author             [[User:Dessamator|Dessamator]]&lt;br /&gt;
--  @author             [[User:DarthKitty|DarthKitty]]&lt;br /&gt;
--  @attribution        [[wikipedia:Module:Arguments|Module:Arguments]] (Wikipedia)&lt;br /&gt;
--  @see                [[wikipedia:Module:Arguments|Original module on Wikipedia]]&lt;br /&gt;
--  @see                [[Module:Arguments/testcases|Test cases for this module]]&lt;br /&gt;
local arguments = {}&lt;br /&gt;
&lt;br /&gt;
--  Module dependencies.&lt;br /&gt;
local i18n = require(&#039;Module:Dev/I18n&#039;).loadMessages(&#039;Arguments&#039;)&lt;br /&gt;
local util = require(&#039;libraryUtil&#039;)&lt;br /&gt;
local checkType = util.checkType&lt;br /&gt;
&lt;br /&gt;
-- Four different value tidying functions.&lt;br /&gt;
-- This way, we don&#039;t have to check the options every time we call them.&lt;br /&gt;
&lt;br /&gt;
--- Default value tidying function.&lt;br /&gt;
--  Trims parameter values automatically if they are defined strings.&lt;br /&gt;
--  Treats blank strings as `nil`.&lt;br /&gt;
--  @function           tidyValDefault&lt;br /&gt;
--  @param              {string|number} key MediaWiki parameter key.&lt;br /&gt;
--  @param              {string|nil} val MediaWiki parameter value,&lt;br /&gt;
--                      or nil if `key` is an empty string or nil.&lt;br /&gt;
--  @local&lt;br /&gt;
local function tidyValDefault(key, val)&lt;br /&gt;
    if type(val) == &#039;string&#039; then&lt;br /&gt;
        val = val:match(&#039;^%s*(.-)%s*$&#039;)&lt;br /&gt;
        if val == &#039;&#039; then&lt;br /&gt;
            return nil&lt;br /&gt;
        else&lt;br /&gt;
            return val&lt;br /&gt;
        end&lt;br /&gt;
    else&lt;br /&gt;
        return val&lt;br /&gt;
    end&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
--- Value tidying function that trims values.&lt;br /&gt;
--  Trims parameter values automatically if they are defined strings.&lt;br /&gt;
--  @function           tidyValTrimOnly&lt;br /&gt;
--  @param              {string|number} key MediaWiki parameter key.&lt;br /&gt;
--  @param              {string|nil} val MediaWiki parameter value.&lt;br /&gt;
--  @local&lt;br /&gt;
local function tidyValTrimOnly(key, val)&lt;br /&gt;
    if type(val) == &#039;string&#039; then&lt;br /&gt;
        return val:match(&#039;^%s*(.-)%s*$&#039;)&lt;br /&gt;
    else&lt;br /&gt;
        return val&lt;br /&gt;
    end&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
--- Value tidying function that removes blanks.&lt;br /&gt;
--  Removes blank values from the arguments table.&lt;br /&gt;
--  @function           tidyValRemoveBlanksOnly&lt;br /&gt;
--  @param              {string|number} key MediaWiki parameter key.&lt;br /&gt;
--  @param              {string|nil} val MediaWiki parameter value,&lt;br /&gt;
--                      or nil if `key` is whitespace or nil.&lt;br /&gt;
--  @local&lt;br /&gt;
local function tidyValRemoveBlanksOnly(key, val)&lt;br /&gt;
    if type(val) == &#039;string&#039; then&lt;br /&gt;
        if val:find(&#039;%S&#039;) then&lt;br /&gt;
            return val&lt;br /&gt;
        else&lt;br /&gt;
            return nil&lt;br /&gt;
        end&lt;br /&gt;
    else&lt;br /&gt;
        return val&lt;br /&gt;
    end&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
--- Value tidying function that returns original value.&lt;br /&gt;
--  Effectively a NOOP function that does no value processing.&lt;br /&gt;
--  @function           tidyValNoChange&lt;br /&gt;
--  @param              {string|number} key MediaWiki parameter key.&lt;br /&gt;
--  @param              {string|nil} val MediaWiki parameter value.&lt;br /&gt;
--  @local&lt;br /&gt;
local function tidyValNoChange(key, val)&lt;br /&gt;
    return val&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
--- Parent template title match checker.&lt;br /&gt;
--  @function           matchesTitle&lt;br /&gt;
--  @param              {string|number|nil} given Local prefixed page&lt;br /&gt;
--                      title, or MediaWiki article ID (`wgArticleId`).&lt;br /&gt;
--  @param              {string} title Title of parent template.&lt;br /&gt;
--  @return             {boolean} Whether the `given` ID/title matches&lt;br /&gt;
--                      the title of the parent template.&lt;br /&gt;
local function matchesTitle(given, title)&lt;br /&gt;
    local tp = type( given )&lt;br /&gt;
    return (tp == &#039;string&#039; or tp == &#039;number&#039;) and mw.title.new( given ).prefixedText == title&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
--- Default argument translation metatable.&lt;br /&gt;
--  @table              translate_mt&lt;br /&gt;
--  @local&lt;br /&gt;
local translate_mt = { __index = function(t, k) return k end }&lt;br /&gt;
&lt;br /&gt;
--- Main argument extraction utility.&lt;br /&gt;
--  Arguments are memoized once fetched for optimal performance,&lt;br /&gt;
--  as with the `frame.args` metatable in Scribunto core.&lt;br /&gt;
--  &lt;br /&gt;
--  The default argument lookup behaviour uses the child frame arguments&lt;br /&gt;
--  first, then the parent frame arguments. There are numerous frame&lt;br /&gt;
--  options to change this behaviour.&lt;br /&gt;
--  &lt;br /&gt;
--  The default value tidying behaviour trims parameter values if they&lt;br /&gt;
--  are defined strings and treats blank strings as `nil`. This can be&lt;br /&gt;
--  customised in the `getArgs` options.&lt;br /&gt;
--  &lt;br /&gt;
--  @param              {frame|table} frame Scribunto frame object or&lt;br /&gt;
--                      Lua arguments table, passed from an invocation&lt;br /&gt;
--                      or Lua logic such as `frame:getParent()`.&lt;br /&gt;
--                      If this parameter does not have an `args` field&lt;br /&gt;
--                      and a `getParent` method, `frame` is assumed&lt;br /&gt;
--                      to be a Lua arguments table, such as the&lt;br /&gt;
--                      arguments from a named arguments call.&lt;br /&gt;
--  @param[opt]         {table} options Extraction/processing options.&lt;br /&gt;
--  @param[opt]         {boolean} options.trim&lt;br /&gt;
--                      Whether to trim the blank arguments present in&lt;br /&gt;
--                      the arguments table. Accepts `false` only.&lt;br /&gt;
--                      Default: `true`.&lt;br /&gt;
--  @param[opt]         {boolean} options.removeBlanks&lt;br /&gt;
--                      Whether to remove blank arguments from the&lt;br /&gt;
--                      arguments table. Does not shift sequential&lt;br /&gt;
--                      arguments removed by the processing stage.&lt;br /&gt;
--                      Accepts `false` only. Default: `true`.&lt;br /&gt;
--  @param[opt]         {function} options.valueFunc&lt;br /&gt;
--                      Custom value tidying function for use if the&lt;br /&gt;
--                      `trim` and `removeBlanks` options don&#039;t cover&lt;br /&gt;
--                      the developer&#039;s argument processing use case.&lt;br /&gt;
--  @param[opt]         {boolean} options.frameOnly&lt;br /&gt;
--                      Only read arguments from child frame (the&lt;br /&gt;
--                      `frame` parameter - usually invocation frame).&lt;br /&gt;
--  @param[opt]         {boolean} options.parentOnly&lt;br /&gt;
--                      Only read arguments from `frame` parent (the&lt;br /&gt;
--                      `frame` parameter - usually template frame).&lt;br /&gt;
--  @param[opt]         {boolean} options.parentFirst&lt;br /&gt;
--                      Argument lookup in the `frame` parent first,&lt;br /&gt;
--                      prioritised over the invocation frame arguments.&lt;br /&gt;
--  @param[opt]         {table} options.wrappers&lt;br /&gt;
--                      Individual value or array of values, listing&lt;br /&gt;
--                      wrapper title name(s) or article ID(s) to permit&lt;br /&gt;
--                      parent argument lookup from.&lt;br /&gt;
--  @param[opt]         {string|number} options.wrapper&lt;br /&gt;
--                      Alias of `options.wrappers` - contains title&lt;br /&gt;
--                      name or article ID to permit parent argument&lt;br /&gt;
--                      lookup from.&lt;br /&gt;
--  @param[opt]         {boolean} options.readOnly&lt;br /&gt;
--                      Whether to restrict write permissions to the&lt;br /&gt;
--                      arguments table. When set to a truthy value,&lt;br /&gt;
--                      an error will be thrown on any write attempt.&lt;br /&gt;
--  @param[opt]         {boolean} options.noOverwrite&lt;br /&gt;
--                      Whether to restrict overwrite attempts on&lt;br /&gt;
--                      existing argument keys in the arguments table.&lt;br /&gt;
--                      When set to a truthy value, an error will be&lt;br /&gt;
--                      thrown on any write attempt that would result&lt;br /&gt;
--                      in an existing argument being overwritten.&lt;br /&gt;
--  @param[opt]         {table} options.translate&lt;br /&gt;
--                      Map of parameter name aliases to their canonical&lt;br /&gt;
--                      argument parameter names.&lt;br /&gt;
--  @param[opt]         {table} options.backtranslate&lt;br /&gt;
--                      Map of canonical parameter names to their&lt;br /&gt;
--                      argument parameter aliases.&lt;br /&gt;
--                      Supersedes `options.translate` if both options&lt;br /&gt;
--                      are in use.&lt;br /&gt;
--  @error[opt,317]     &#039;bad value assigned to option &amp;quot;valueFunc&amp;quot;&lt;br /&gt;
--                      (function expected, got $type)&#039;&lt;br /&gt;
--  @error[opt,407]     &#039;could not write to argument table key &amp;quot;$key&amp;quot;;&lt;br /&gt;
--                      the table is read-only&#039;&lt;br /&gt;
--  @error[opt,409]     &#039;could not write to argument table key &amp;quot;$key&amp;quot;;&lt;br /&gt;
--                      overwriting existing arguments is not permitted&#039;&lt;br /&gt;
--  @return             {table} Arguments extracted from invocation.&lt;br /&gt;
--                      The argument data is embedded as a metatable in&lt;br /&gt;
--                      the exported table and cannot be accessed with&lt;br /&gt;
--                      the `#` operator or @{table} library methods.&lt;br /&gt;
--                      However, the exported table can be written to if&lt;br /&gt;
--                      the `options.readOnly` flag parameter is not&lt;br /&gt;
--                      truthy.&lt;br /&gt;
--  @usage&lt;br /&gt;
--      &lt;br /&gt;
--      local getArgs = require(&#039;Module:Arguments&#039;).getArgs&lt;br /&gt;
--      function p.main(frame)&lt;br /&gt;
--          local args = getArgs(frame, {&lt;br /&gt;
--              wrapper = &#039;Template:&amp;lt;TEMPLATE&amp;gt;&#039;&lt;br /&gt;
--          })&lt;br /&gt;
--          -- Use the args table here.&lt;br /&gt;
--          -- A common paradigm is `return p._main(args)`.&lt;br /&gt;
--          -- This allows other Lua modules to access the&lt;br /&gt;
--          -- main logic in a performant manner without a&lt;br /&gt;
--          -- frame object.&lt;br /&gt;
--      end&lt;br /&gt;
--      &lt;br /&gt;
--  @note               Reference tags in the form of `&amp;lt;ref&amp;gt;` will&lt;br /&gt;
--                      generate phantom references when calling the&lt;br /&gt;
--                      @{pairs} iterator on the arguments table,&lt;br /&gt;
--                      **IF** the `&amp;lt;ref&amp;gt;` tag does not appear in the&lt;br /&gt;
--                      dependent module&#039;s wikitext output.&lt;br /&gt;
function arguments.getArgs(frame, options)&lt;br /&gt;
    checkType(&#039;getArgs&#039;, 1, frame, &#039;table&#039;, true)&lt;br /&gt;
    checkType(&#039;getArgs&#039;, 2, options, &#039;table&#039;, true)&lt;br /&gt;
    frame = frame or {}&lt;br /&gt;
    options = options or {}&lt;br /&gt;
&lt;br /&gt;
    -- Set up argument translation.&lt;br /&gt;
    options.translate = options.translate or {}&lt;br /&gt;
    if getmetatable(options.translate) == nil then&lt;br /&gt;
        setmetatable(options.translate, translate_mt)&lt;br /&gt;
    end&lt;br /&gt;
    if options.backtranslate == nil then&lt;br /&gt;
        options.backtranslate = {}&lt;br /&gt;
        for k,v in pairs(options.translate) do&lt;br /&gt;
            options.backtranslate[v] = k&lt;br /&gt;
        end&lt;br /&gt;
    end&lt;br /&gt;
    if options.backtranslate and getmetatable(options.backtranslate) == nil then&lt;br /&gt;
        setmetatable(options.backtranslate, {&lt;br /&gt;
            __index = function(t, k)&lt;br /&gt;
                if options.translate[k] ~= k then&lt;br /&gt;
                    return nil&lt;br /&gt;
                else&lt;br /&gt;
                    return k&lt;br /&gt;
                end&lt;br /&gt;
            end&lt;br /&gt;
        })&lt;br /&gt;
    end&lt;br /&gt;
&lt;br /&gt;
    -- Get the argument tables. If we were passed a valid frame object,&lt;br /&gt;
    -- get the frame arguments (fargs) and the parent frame arguments&lt;br /&gt;
    -- (pargs), depending on the options set and on the parent frame&#039;s&lt;br /&gt;
    -- availability. If we weren&#039;t passed a valid frame object, we are&lt;br /&gt;
    -- being called from another Lua module or from the debug console,&lt;br /&gt;
    -- so assume that we were passed a table of args directly, and&lt;br /&gt;
    -- assign it to a new variable (luaArgs).&lt;br /&gt;
    local fargs, pargs, luaArgs&lt;br /&gt;
    options.wrappers = options.wrappers or options.wrapper&lt;br /&gt;
    if&lt;br /&gt;
        type(frame.args) == &#039;table&#039; and&lt;br /&gt;
        type(frame.getParent) == &#039;function&#039;&lt;br /&gt;
    then&lt;br /&gt;
        -- The wrappers option makes Module:Arguments look up&lt;br /&gt;
        -- arguments in either the frame argument table or the&lt;br /&gt;
        -- parent argument table, but not both. This means that&lt;br /&gt;
        -- users can use either the #invoke syntax or a wrapper&lt;br /&gt;
        -- template without the loss of performance associated&lt;br /&gt;
        -- with looking arguments up in both the frame and the&lt;br /&gt;
        -- parent frame.&lt;br /&gt;
        -- The arguments will be fetched from the parent frame if&lt;br /&gt;
        -- the parent frame&#039;s title is present in options.wrapper;&lt;br /&gt;
        -- otherwise it will look up arguments in the frame object&lt;br /&gt;
        -- passed to getArgs.&lt;br /&gt;
        if options.wrappers then&lt;br /&gt;
            local parent = frame:getParent()&lt;br /&gt;
            if not parent then&lt;br /&gt;
                fargs = frame.args&lt;br /&gt;
            else&lt;br /&gt;
                local title = parent:getTitle():gsub(&#039;/sandbox$&#039;, &#039;&#039;)&lt;br /&gt;
                local found = false&lt;br /&gt;
                if matchesTitle(options.wrappers, title) then&lt;br /&gt;
                    found = true&lt;br /&gt;
                elseif type(options.wrappers) == &#039;table&#039; then&lt;br /&gt;
                    for _,v in pairs(options.wrappers) do&lt;br /&gt;
                        if matchesTitle(v, title) then&lt;br /&gt;
                            found = true&lt;br /&gt;
                            break&lt;br /&gt;
                        end&lt;br /&gt;
                    end&lt;br /&gt;
                end&lt;br /&gt;
&lt;br /&gt;
                -- We test for false specifically here so that nil (the&lt;br /&gt;
                -- default) acts like true.&lt;br /&gt;
                if found or options.frameOnly == false then&lt;br /&gt;
                    pargs = parent.args&lt;br /&gt;
                end&lt;br /&gt;
                if not found or options.parentOnly == false then&lt;br /&gt;
                    fargs = frame.args&lt;br /&gt;
                end&lt;br /&gt;
            end&lt;br /&gt;
        -- When options.wrapper isn&#039;t set, check the other options.&lt;br /&gt;
        else&lt;br /&gt;
            if not options.parentOnly then&lt;br /&gt;
                fargs = frame.args&lt;br /&gt;
            end&lt;br /&gt;
            if not options.frameOnly then&lt;br /&gt;
                local parent = frame:getParent()&lt;br /&gt;
                pargs = parent and parent.args or nil&lt;br /&gt;
            end&lt;br /&gt;
        end&lt;br /&gt;
        if options.parentFirst then&lt;br /&gt;
            fargs, pargs = pargs, fargs&lt;br /&gt;
        end&lt;br /&gt;
    else&lt;br /&gt;
        luaArgs = frame&lt;br /&gt;
    end&lt;br /&gt;
&lt;br /&gt;
    -- Set the order of precedence of the argument tables. If the variables are&lt;br /&gt;
    -- nil, nothing will be added to the table, which is how we avoid clashes&lt;br /&gt;
    -- between the frame/parent args and the Lua args.&lt;br /&gt;
    local argTables = {fargs}&lt;br /&gt;
    argTables[#argTables + 1] = pargs&lt;br /&gt;
    argTables[#argTables + 1] = luaArgs&lt;br /&gt;
&lt;br /&gt;
    -- Generate the tidyVal function. If it has been specified by the user, we&lt;br /&gt;
    -- use that; if not, we choose one of four functions depending on the&lt;br /&gt;
    -- options chosen. This is so that we don&#039;t have to call the options table&lt;br /&gt;
    -- every time the function is called.&lt;br /&gt;
    local tidyVal = options.valueFunc&lt;br /&gt;
    if tidyVal then&lt;br /&gt;
        if type(tidyVal) ~= &#039;function&#039; then&lt;br /&gt;
            error(i18n:msg(&#039;error-value-func&#039;, type(tidyVal)), 2)&lt;br /&gt;
        end&lt;br /&gt;
    elseif options.trim ~= false then&lt;br /&gt;
        if options.removeBlanks ~= false then&lt;br /&gt;
            tidyVal = tidyValDefault&lt;br /&gt;
        else&lt;br /&gt;
            tidyVal = tidyValTrimOnly&lt;br /&gt;
        end&lt;br /&gt;
    else&lt;br /&gt;
        if options.removeBlanks ~= false then&lt;br /&gt;
            tidyVal = tidyValRemoveBlanksOnly&lt;br /&gt;
        else&lt;br /&gt;
            tidyVal = tidyValNoChange&lt;br /&gt;
        end&lt;br /&gt;
    end&lt;br /&gt;
&lt;br /&gt;
    -- Set up the args, metaArgs and nilArgs tables. args will be the one&lt;br /&gt;
    -- accessed from functions, and metaArgs will hold the actual arguments. Nil&lt;br /&gt;
    -- arguments are memoized in nilArgs, and the metatable connects all of them&lt;br /&gt;
    -- together.&lt;br /&gt;
    local args, metaArgs, nilArgs, metatable = {}, {}, {}, {}&lt;br /&gt;
    setmetatable(args, metatable)&lt;br /&gt;
&lt;br /&gt;
    -- Accepts multiple tables as input and merges their keys and values&lt;br /&gt;
    -- into one table. If a value is already present it is not overwritten;&lt;br /&gt;
    -- tables listed earlier have precedence. We are also memoizing nil&lt;br /&gt;
    -- values, which can be overwritten if they are &#039;s&#039; (soft).&lt;br /&gt;
    local function mergeArgs(tables)&lt;br /&gt;
        for _, t in ipairs(tables) do&lt;br /&gt;
            for key, val in pairs(t) do&lt;br /&gt;
                if metaArgs[key] == nil and nilArgs[key] ~= &#039;h&#039; then&lt;br /&gt;
                    local tidiedVal = tidyVal(key, val)&lt;br /&gt;
                    if tidiedVal == nil then&lt;br /&gt;
                        nilArgs[key] = &#039;s&#039;&lt;br /&gt;
                    else&lt;br /&gt;
                        metaArgs[key] = tidiedVal&lt;br /&gt;
                    end&lt;br /&gt;
                end&lt;br /&gt;
            end&lt;br /&gt;
        end&lt;br /&gt;
    end&lt;br /&gt;
&lt;br /&gt;
    -- Define metatable behaviour. Arguments are memoized in the metaArgs table,&lt;br /&gt;
    -- and are only fetched from the argument tables once. Fetching arguments&lt;br /&gt;
    -- from the argument tables is the most resource-intensive step in this&lt;br /&gt;
    -- module, so we try and avoid it where possible. For this reason, nil&lt;br /&gt;
    -- arguments are also memoized, in the nilArgs table. Also, we keep a record&lt;br /&gt;
    -- in the metatable of when pairs and ipairs have been called, so we do not&lt;br /&gt;
    -- run pairs and ipairs on the argument tables more than once. We also do&lt;br /&gt;
    -- not run ipairs on fargs and pargs if pairs has already been run, as all&lt;br /&gt;
    -- the arguments will already have been copied over.&lt;br /&gt;
&lt;br /&gt;
    -- Fetches an argument when the args table is indexed. First we check&lt;br /&gt;
    -- to see if the value is memoized, and if not we try and fetch it from&lt;br /&gt;
    -- the argument tables. When we check memoization, we need to check&lt;br /&gt;
    -- metaArgs before nilArgs, as both can be non-nil at the same time.&lt;br /&gt;
    -- If the argument is not present in metaArgs, we also check whether&lt;br /&gt;
    -- pairs has been run yet. If pairs has already been run, we return nil.&lt;br /&gt;
    -- This is because all the arguments will have already been copied into&lt;br /&gt;
    -- metaArgs by the mergeArgs function, meaning that any other arguments&lt;br /&gt;
    -- must be nil.&lt;br /&gt;
    metatable.__index = function (t, key)&lt;br /&gt;
        if type(key) == &#039;string&#039; then&lt;br /&gt;
            key = options.translate[key]&lt;br /&gt;
        end&lt;br /&gt;
        local val = metaArgs[key]&lt;br /&gt;
        if val ~= nil then&lt;br /&gt;
            return val&lt;br /&gt;
        elseif metatable.donePairs or nilArgs[key] then&lt;br /&gt;
            return nil&lt;br /&gt;
        end&lt;br /&gt;
        for _, argTable in ipairs(argTables) do&lt;br /&gt;
            local argTableVal = tidyVal(key, argTable[key])&lt;br /&gt;
            if argTableVal ~= nil then&lt;br /&gt;
                metaArgs[key] = argTableVal&lt;br /&gt;
                return argTableVal&lt;br /&gt;
            end&lt;br /&gt;
        end&lt;br /&gt;
        nilArgs[key] = &#039;h&#039;&lt;br /&gt;
        return nil&lt;br /&gt;
    end&lt;br /&gt;
&lt;br /&gt;
    metatable.__newindex = function (t, key, val)&lt;br /&gt;
        -- This function is called when a module tries to add a new&lt;br /&gt;
        -- value to the args table, or tries to change an existing&lt;br /&gt;
        -- value.&lt;br /&gt;
        if type(key) == &#039;string&#039; then&lt;br /&gt;
            key = options.translate[key]&lt;br /&gt;
        end&lt;br /&gt;
        if options.readOnly then&lt;br /&gt;
            error(i18n:msg(&#039;error-write-permission&#039;, tostring(key)), 2)&lt;br /&gt;
        elseif options.noOverwrite and args[key] ~= nil then&lt;br /&gt;
            error(i18n:msg(&#039;error-overwrite-permission&#039;, tostring(key)), 2)&lt;br /&gt;
        elseif val == nil then&lt;br /&gt;
            -- If the argument is to be overwritten with nil, we need to erase&lt;br /&gt;
            -- the value in metaArgs, so that __index, __pairs and __ipairs do&lt;br /&gt;
            -- not use a previous existing value, if present; and we also need&lt;br /&gt;
            -- to memoize the nil in nilArgs, so that the value isn&#039;t looked&lt;br /&gt;
            -- up in the argument tables if it is accessed again.&lt;br /&gt;
            metaArgs[key] = nil&lt;br /&gt;
            nilArgs[key] = &#039;h&#039;&lt;br /&gt;
        else&lt;br /&gt;
            metaArgs[key] = val&lt;br /&gt;
        end&lt;br /&gt;
    end&lt;br /&gt;
&lt;br /&gt;
    local function translatenext(invariant)&lt;br /&gt;
        local k, v = next(invariant.t, invariant.k)&lt;br /&gt;
        invariant.k = k&lt;br /&gt;
        if k == nil then&lt;br /&gt;
            return nil&lt;br /&gt;
        elseif type(k) ~= &#039;string&#039; or not options.backtranslate then&lt;br /&gt;
            return k, v&lt;br /&gt;
        else&lt;br /&gt;
            local backtranslate = options.backtranslate[k]&lt;br /&gt;
            if backtranslate == nil then&lt;br /&gt;
                -- Skip this one. This is a tail call, so this&lt;br /&gt;
                -- won&#039;t cause stack overflow.&lt;br /&gt;
                return translatenext(invariant)&lt;br /&gt;
            else&lt;br /&gt;
                return backtranslate, v&lt;br /&gt;
            end&lt;br /&gt;
        end&lt;br /&gt;
    end&lt;br /&gt;
&lt;br /&gt;
    -- This metamethod is called when pairs is run on the args table.&lt;br /&gt;
    metatable.__pairs = function ()&lt;br /&gt;
        if not metatable.donePairs then&lt;br /&gt;
            mergeArgs(argTables)&lt;br /&gt;
            metatable.donePairs = true&lt;br /&gt;
        end&lt;br /&gt;
        return translatenext, { t = metaArgs }&lt;br /&gt;
    end&lt;br /&gt;
&lt;br /&gt;
    -- This custom `ipairs`-style iterator uses our __index metamethod.&lt;br /&gt;
    local function inext(t, i)&lt;br /&gt;
        local v = t[i + 1]&lt;br /&gt;
        if v ~= nil then&lt;br /&gt;
            return i + 1, v&lt;br /&gt;
        end&lt;br /&gt;
    end&lt;br /&gt;
&lt;br /&gt;
    -- This metamethod is called when ipairs is run on the args table.&lt;br /&gt;
    metatable.__ipairs = function (t)&lt;br /&gt;
        return inext, t, 0&lt;br /&gt;
    end&lt;br /&gt;
&lt;br /&gt;
    return args&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
return arguments&lt;/div&gt;</summary>
		<author><name>WikiAdmin</name></author>
	</entry>
	<entry>
		<id>https://unimage.wcnm.pw/index.php?title=%E6%96%87%E4%BB%B6:Fish_raw.png&amp;diff=702</id>
		<title>文件:Fish raw.png</title>
		<link rel="alternate" type="text/html" href="https://unimage.wcnm.pw/index.php?title=%E6%96%87%E4%BB%B6:Fish_raw.png&amp;diff=702"/>
		<updated>2026-08-31T12:23:23Z</updated>

		<summary type="html">&lt;p&gt;WikiAdmin：​WikiAdmin上传文件:Fish raw.png&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&lt;/div&gt;</summary>
		<author><name>WikiAdmin</name></author>
	</entry>
	<entry>
		<id>https://unimage.wcnm.pw/index.php?title=%E6%96%87%E4%BB%B6:Chao_icon1.png&amp;diff=701</id>
		<title>文件:Chao icon1.png</title>
		<link rel="alternate" type="text/html" href="https://unimage.wcnm.pw/index.php?title=%E6%96%87%E4%BB%B6:Chao_icon1.png&amp;diff=701"/>
		<updated>2026-08-31T12:23:23Z</updated>

		<summary type="html">&lt;p&gt;WikiAdmin：​WikiAdmin上传文件:Chao icon1.png&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&lt;/div&gt;</summary>
		<author><name>WikiAdmin</name></author>
	</entry>
	<entry>
		<id>https://unimage.wcnm.pw/index.php?title=%E6%96%87%E4%BB%B6:Zs4.gif&amp;diff=700</id>
		<title>文件:Zs4.gif</title>
		<link rel="alternate" type="text/html" href="https://unimage.wcnm.pw/index.php?title=%E6%96%87%E4%BB%B6:Zs4.gif&amp;diff=700"/>
		<updated>2026-08-31T12:23:22Z</updated>

		<summary type="html">&lt;p&gt;WikiAdmin：​WikiAdmin上传文件:Zs4.gif&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&lt;/div&gt;</summary>
		<author><name>WikiAdmin</name></author>
	</entry>
	<entry>
		<id>https://unimage.wcnm.pw/index.php?title=%E6%96%87%E4%BB%B6:Sg.png&amp;diff=699</id>
		<title>文件:Sg.png</title>
		<link rel="alternate" type="text/html" href="https://unimage.wcnm.pw/index.php?title=%E6%96%87%E4%BB%B6:Sg.png&amp;diff=699"/>
		<updated>2026-08-31T12:23:22Z</updated>

		<summary type="html">&lt;p&gt;WikiAdmin：​WikiAdmin上传文件:Sg.png&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&lt;/div&gt;</summary>
		<author><name>WikiAdmin</name></author>
	</entry>
	<entry>
		<id>https://unimage.wcnm.pw/index.php?title=%E6%96%87%E4%BB%B6:Tg.png&amp;diff=698</id>
		<title>文件:Tg.png</title>
		<link rel="alternate" type="text/html" href="https://unimage.wcnm.pw/index.php?title=%E6%96%87%E4%BB%B6:Tg.png&amp;diff=698"/>
		<updated>2026-08-31T12:23:21Z</updated>

		<summary type="html">&lt;p&gt;WikiAdmin：​WikiAdmin上传文件:Tg.png&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&lt;/div&gt;</summary>
		<author><name>WikiAdmin</name></author>
	</entry>
	<entry>
		<id>https://unimage.wcnm.pw/index.php?title=%E6%96%87%E4%BB%B6:Declined.png&amp;diff=697</id>
		<title>文件:Declined.png</title>
		<link rel="alternate" type="text/html" href="https://unimage.wcnm.pw/index.php?title=%E6%96%87%E4%BB%B6:Declined.png&amp;diff=697"/>
		<updated>2026-08-31T12:23:21Z</updated>

		<summary type="html">&lt;p&gt;WikiAdmin：​WikiAdmin上传文件:Declined.png&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&lt;/div&gt;</summary>
		<author><name>WikiAdmin</name></author>
	</entry>
	<entry>
		<id>https://unimage.wcnm.pw/index.php?title=%E6%96%87%E4%BB%B6:Coronation.png&amp;diff=696</id>
		<title>文件:Coronation.png</title>
		<link rel="alternate" type="text/html" href="https://unimage.wcnm.pw/index.php?title=%E6%96%87%E4%BB%B6:Coronation.png&amp;diff=696"/>
		<updated>2026-08-31T12:23:21Z</updated>

		<summary type="html">&lt;p&gt;WikiAdmin：​WikiAdmin上传文件:Coronation.png&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&lt;/div&gt;</summary>
		<author><name>WikiAdmin</name></author>
	</entry>
	<entry>
		<id>https://unimage.wcnm.pw/index.php?title=%E6%96%87%E4%BB%B6:Lo.png&amp;diff=695</id>
		<title>文件:Lo.png</title>
		<link rel="alternate" type="text/html" href="https://unimage.wcnm.pw/index.php?title=%E6%96%87%E4%BB%B6:Lo.png&amp;diff=695"/>
		<updated>2026-08-31T12:23:21Z</updated>

		<summary type="html">&lt;p&gt;WikiAdmin：​WikiAdmin上传文件:Lo.png&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&lt;/div&gt;</summary>
		<author><name>WikiAdmin</name></author>
	</entry>
	<entry>
		<id>https://unimage.wcnm.pw/index.php?title=%E6%96%87%E4%BB%B6:%E4%BC%A0%E8%AF%B4%E8%8B%B1%E9%9B%84.png&amp;diff=694</id>
		<title>文件:传说英雄.png</title>
		<link rel="alternate" type="text/html" href="https://unimage.wcnm.pw/index.php?title=%E6%96%87%E4%BB%B6:%E4%BC%A0%E8%AF%B4%E8%8B%B1%E9%9B%84.png&amp;diff=694"/>
		<updated>2026-08-31T12:23:21Z</updated>

		<summary type="html">&lt;p&gt;WikiAdmin：​WikiAdmin上传文件:传说英雄.png&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&lt;/div&gt;</summary>
		<author><name>WikiAdmin</name></author>
	</entry>
	<entry>
		<id>https://unimage.wcnm.pw/index.php?title=%E6%96%87%E4%BB%B6:Iron_shovel.png&amp;diff=693</id>
		<title>文件:Iron shovel.png</title>
		<link rel="alternate" type="text/html" href="https://unimage.wcnm.pw/index.php?title=%E6%96%87%E4%BB%B6:Iron_shovel.png&amp;diff=693"/>
		<updated>2026-08-31T12:23:21Z</updated>

		<summary type="html">&lt;p&gt;WikiAdmin：​WikiAdmin上传文件:Iron shovel.png&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&lt;/div&gt;</summary>
		<author><name>WikiAdmin</name></author>
	</entry>
	<entry>
		<id>https://unimage.wcnm.pw/index.php?title=%E6%96%87%E4%BB%B6:Thousand.png&amp;diff=692</id>
		<title>文件:Thousand.png</title>
		<link rel="alternate" type="text/html" href="https://unimage.wcnm.pw/index.php?title=%E6%96%87%E4%BB%B6:Thousand.png&amp;diff=692"/>
		<updated>2026-08-31T12:23:20Z</updated>

		<summary type="html">&lt;p&gt;WikiAdmin：​WikiAdmin上传文件:Thousand.png&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&lt;/div&gt;</summary>
		<author><name>WikiAdmin</name></author>
	</entry>
	<entry>
		<id>https://unimage.wcnm.pw/index.php?title=%E6%96%87%E4%BB%B6:Void1.png&amp;diff=691</id>
		<title>文件:Void1.png</title>
		<link rel="alternate" type="text/html" href="https://unimage.wcnm.pw/index.php?title=%E6%96%87%E4%BB%B6:Void1.png&amp;diff=691"/>
		<updated>2026-08-31T12:23:20Z</updated>

		<summary type="html">&lt;p&gt;WikiAdmin：​WikiAdmin上传文件:Void1.png&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&lt;/div&gt;</summary>
		<author><name>WikiAdmin</name></author>
	</entry>
	<entry>
		<id>https://unimage.wcnm.pw/index.php?title=%E6%96%87%E4%BB%B6:Scarp.png&amp;diff=690</id>
		<title>文件:Scarp.png</title>
		<link rel="alternate" type="text/html" href="https://unimage.wcnm.pw/index.php?title=%E6%96%87%E4%BB%B6:Scarp.png&amp;diff=690"/>
		<updated>2026-08-31T12:23:20Z</updated>

		<summary type="html">&lt;p&gt;WikiAdmin：​WikiAdmin上传文件:Scarp.png&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&lt;/div&gt;</summary>
		<author><name>WikiAdmin</name></author>
	</entry>
	<entry>
		<id>https://unimage.wcnm.pw/index.php?title=%E6%96%87%E4%BB%B6:%E5%9C%B0%E7%BA%AA.png&amp;diff=689</id>
		<title>文件:地纪.png</title>
		<link rel="alternate" type="text/html" href="https://unimage.wcnm.pw/index.php?title=%E6%96%87%E4%BB%B6:%E5%9C%B0%E7%BA%AA.png&amp;diff=689"/>
		<updated>2026-08-31T12:23:20Z</updated>

		<summary type="html">&lt;p&gt;WikiAdmin：​WikiAdmin上传文件:地纪.png&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&lt;/div&gt;</summary>
		<author><name>WikiAdmin</name></author>
	</entry>
	<entry>
		<id>https://unimage.wcnm.pw/index.php?title=%E6%96%87%E4%BB%B6:Iron_axe.png&amp;diff=688</id>
		<title>文件:Iron axe.png</title>
		<link rel="alternate" type="text/html" href="https://unimage.wcnm.pw/index.php?title=%E6%96%87%E4%BB%B6:Iron_axe.png&amp;diff=688"/>
		<updated>2026-08-31T12:23:20Z</updated>

		<summary type="html">&lt;p&gt;WikiAdmin：​WikiAdmin上传文件:Iron axe.png&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&lt;/div&gt;</summary>
		<author><name>WikiAdmin</name></author>
	</entry>
	<entry>
		<id>https://unimage.wcnm.pw/index.php?title=%E6%96%87%E4%BB%B6:Lb2.png&amp;diff=687</id>
		<title>文件:Lb2.png</title>
		<link rel="alternate" type="text/html" href="https://unimage.wcnm.pw/index.php?title=%E6%96%87%E4%BB%B6:Lb2.png&amp;diff=687"/>
		<updated>2026-08-31T12:23:19Z</updated>

		<summary type="html">&lt;p&gt;WikiAdmin：​WikiAdmin上传文件:Lb2.png&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&lt;/div&gt;</summary>
		<author><name>WikiAdmin</name></author>
	</entry>
	<entry>
		<id>https://unimage.wcnm.pw/index.php?title=%E6%96%87%E4%BB%B6:Ljdj2.png&amp;diff=686</id>
		<title>文件:Ljdj2.png</title>
		<link rel="alternate" type="text/html" href="https://unimage.wcnm.pw/index.php?title=%E6%96%87%E4%BB%B6:Ljdj2.png&amp;diff=686"/>
		<updated>2026-08-31T12:23:19Z</updated>

		<summary type="html">&lt;p&gt;WikiAdmin：​WikiAdmin上传文件:Ljdj2.png&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&lt;/div&gt;</summary>
		<author><name>WikiAdmin</name></author>
	</entry>
	<entry>
		<id>https://unimage.wcnm.pw/index.php?title=%E6%96%87%E4%BB%B6:Zs3.gif&amp;diff=685</id>
		<title>文件:Zs3.gif</title>
		<link rel="alternate" type="text/html" href="https://unimage.wcnm.pw/index.php?title=%E6%96%87%E4%BB%B6:Zs3.gif&amp;diff=685"/>
		<updated>2026-08-31T12:23:19Z</updated>

		<summary type="html">&lt;p&gt;WikiAdmin：​WikiAdmin上传文件:Zs3.gif&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&lt;/div&gt;</summary>
		<author><name>WikiAdmin</name></author>
	</entry>
	<entry>
		<id>https://unimage.wcnm.pw/index.php?title=%E6%96%87%E4%BB%B6:%E6%B5%85%E6%98%A0%E6%97%97%E5%B8%9C.png&amp;diff=684</id>
		<title>文件:浅映旗帜.png</title>
		<link rel="alternate" type="text/html" href="https://unimage.wcnm.pw/index.php?title=%E6%96%87%E4%BB%B6:%E6%B5%85%E6%98%A0%E6%97%97%E5%B8%9C.png&amp;diff=684"/>
		<updated>2026-08-31T12:23:19Z</updated>

		<summary type="html">&lt;p&gt;WikiAdmin：​WikiAdmin上传文件:浅映旗帜.png&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&lt;/div&gt;</summary>
		<author><name>WikiAdmin</name></author>
	</entry>
	<entry>
		<id>https://unimage.wcnm.pw/index.php?title=%E6%96%87%E4%BB%B6:Fhll.png&amp;diff=683</id>
		<title>文件:Fhll.png</title>
		<link rel="alternate" type="text/html" href="https://unimage.wcnm.pw/index.php?title=%E6%96%87%E4%BB%B6:Fhll.png&amp;diff=683"/>
		<updated>2026-08-31T12:23:19Z</updated>

		<summary type="html">&lt;p&gt;WikiAdmin：​WikiAdmin上传文件:Fhll.png&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&lt;/div&gt;</summary>
		<author><name>WikiAdmin</name></author>
	</entry>
	<entry>
		<id>https://unimage.wcnm.pw/index.php?title=%E6%96%87%E4%BB%B6:Slime_shovel.png&amp;diff=682</id>
		<title>文件:Slime shovel.png</title>
		<link rel="alternate" type="text/html" href="https://unimage.wcnm.pw/index.php?title=%E6%96%87%E4%BB%B6:Slime_shovel.png&amp;diff=682"/>
		<updated>2026-08-31T12:23:19Z</updated>

		<summary type="html">&lt;p&gt;WikiAdmin：​WikiAdmin上传文件:Slime shovel.png&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&lt;/div&gt;</summary>
		<author><name>WikiAdmin</name></author>
	</entry>
	<entry>
		<id>https://unimage.wcnm.pw/index.php?title=%E6%96%87%E4%BB%B6:%E4%B8%89%E8%B6%B3%E9%87%91%E4%B9%8C.png&amp;diff=681</id>
		<title>文件:三足金乌.png</title>
		<link rel="alternate" type="text/html" href="https://unimage.wcnm.pw/index.php?title=%E6%96%87%E4%BB%B6:%E4%B8%89%E8%B6%B3%E9%87%91%E4%B9%8C.png&amp;diff=681"/>
		<updated>2026-08-31T12:23:19Z</updated>

		<summary type="html">&lt;p&gt;WikiAdmin：​WikiAdmin上传文件:三足金乌.png&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&lt;/div&gt;</summary>
		<author><name>WikiAdmin</name></author>
	</entry>
</feed>