<?xml version="1.0"?>
<rss version="2.0" xmlns:dc="http://purl.org/dc/elements/1.1/">
	<channel>
		<title>Unimage Wiki  - 最近更改 [zh-hans]</title>
		<link>https://unimage.wcnm.pw/wiki/%E7%89%B9%E6%AE%8A:%E6%9C%80%E8%BF%91%E6%9B%B4%E6%94%B9</link>
		<description>用这个订阅源跟踪本wiki的最近更改。</description>
		<language>zh-Hans</language>
		<generator>MediaWiki 1.43.9</generator>
		<lastBuildDate>Mon, 31 Aug 2026 20:25:34 GMT</lastBuildDate>
		<item>
			<title>模块:Quote</title>
			<link>https://unimage.wcnm.pw/index.php?title=%E6%A8%A1%E5%9D%97:Quote&amp;diff=730&amp;oldid=42</link>
			<guid isPermaLink="false">https://unimage.wcnm.pw/index.php?title=%E6%A8%A1%E5%9D%97:Quote&amp;diff=730&amp;oldid=42</guid>
			<description>&lt;p&gt;将 Fandom Dev 模块依赖切换到本地副本&lt;/p&gt;
&lt;table style=&quot;background-color: #fff; color: #202122;&quot; data-mw=&quot;interface&quot;&gt;
				&lt;col class=&quot;diff-marker&quot; /&gt;
				&lt;col class=&quot;diff-content&quot; /&gt;
				&lt;col class=&quot;diff-marker&quot; /&gt;
				&lt;col class=&quot;diff-content&quot; /&gt;
				&lt;tr class=&quot;diff-title&quot; lang=&quot;zh-Hans&quot;&gt;
				&lt;td colspan=&quot;2&quot; style=&quot;background-color: #fff; color: #202122; text-align: center;&quot;&gt;←上一版本&lt;/td&gt;
				&lt;td colspan=&quot;2&quot; style=&quot;background-color: #fff; color: #202122; text-align: center;&quot;&gt;2026年8月31日 (一) 20:55的版本&lt;/td&gt;
				&lt;/tr&gt;&lt;tr&gt;&lt;td colspan=&quot;2&quot; class=&quot;diff-lineno&quot; id=&quot;mw-diff-left-l3&quot;&gt;第3行：&lt;/td&gt;
&lt;td colspan=&quot;2&quot; class=&quot;diff-lineno&quot;&gt;第3行：&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;-- The Fandom Developer&amp;#039;s Wiki hosts Global Lua Modules that can be imported and locally overridden.&lt;/div&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;-- The Fandom Developer&amp;#039;s Wiki hosts Global Lua Modules that can be imported and locally overridden.&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;-- The next line imports the Quote module from the [[w:c:dev:Global Lua Modules]].&lt;/div&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;-- The next line imports the Quote module from the [[w:c:dev:Global Lua Modules]].&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;diff-marker&quot; data-marker=&quot;−&quot;&gt;&lt;/td&gt;&lt;td style=&quot;color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #ffe49c; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;local Quote = require(&#039;Dev&lt;del style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;:&lt;/del&gt;Quote&#039;)&lt;/div&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot; data-marker=&quot;+&quot;&gt;&lt;/td&gt;&lt;td style=&quot;color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #a3d3ff; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;local Quote = require(&#039;&lt;ins style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;Module:&lt;/ins&gt;Dev&lt;ins style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;/&lt;/ins&gt;Quote&#039;)&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;-- See more details about this module at [[w:c:dev:Global_Lua_Modules/Quote]]&lt;/div&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;-- See more details about this module at [[w:c:dev:Global_Lua_Modules/Quote]]&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;br&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;br&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;-- The last line produces the output for the template&lt;/div&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;-- The last line produces the output for the template&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;return Quote&lt;/div&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;return Quote&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;/table&gt;</description>
			<pubDate>Mon, 31 Aug 2026 12:55:07 GMT</pubDate>
			<dc:creator>WikiAdmin</dc:creator>
			<comments>https://unimage.wcnm.pw/wiki/%E6%A8%A1%E5%9D%97%E8%AE%A8%E8%AE%BA:Quote</comments>
		</item>
		<item>
			<title>模块:Navbox</title>
			<link>https://unimage.wcnm.pw/index.php?title=%E6%A8%A1%E5%9D%97:Navbox&amp;diff=729&amp;oldid=40</link>
			<guid isPermaLink="false">https://unimage.wcnm.pw/index.php?title=%E6%A8%A1%E5%9D%97:Navbox&amp;diff=729&amp;oldid=40</guid>
			<description>&lt;p&gt;将 Fandom Dev 模块依赖切换到本地副本&lt;/p&gt;
&lt;table style=&quot;background-color: #fff; color: #202122;&quot; data-mw=&quot;interface&quot;&gt;
				&lt;col class=&quot;diff-marker&quot; /&gt;
				&lt;col class=&quot;diff-content&quot; /&gt;
				&lt;col class=&quot;diff-marker&quot; /&gt;
				&lt;col class=&quot;diff-content&quot; /&gt;
				&lt;tr class=&quot;diff-title&quot; lang=&quot;zh-Hans&quot;&gt;
				&lt;td colspan=&quot;2&quot; style=&quot;background-color: #fff; color: #202122; text-align: center;&quot;&gt;←上一版本&lt;/td&gt;
				&lt;td colspan=&quot;2&quot; style=&quot;background-color: #fff; color: #202122; text-align: center;&quot;&gt;2026年8月31日 (一) 20:55的版本&lt;/td&gt;
				&lt;/tr&gt;&lt;tr&gt;&lt;td colspan=&quot;2&quot; class=&quot;diff-lineno&quot; id=&quot;mw-diff-left-l3&quot;&gt;第3行：&lt;/td&gt;
&lt;td colspan=&quot;2&quot; class=&quot;diff-lineno&quot;&gt;第3行：&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;-- The Fandom Developer&amp;#039;s Wiki hosts Global Lua Modules that can be imported and locally overridden.&lt;/div&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;-- The Fandom Developer&amp;#039;s Wiki hosts Global Lua Modules that can be imported and locally overridden.&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;-- The next line imports the Navbox module from the [[w:c:dev:Global Lua Modules]].&lt;/div&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;-- The next line imports the Navbox module from the [[w:c:dev:Global Lua Modules]].&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;diff-marker&quot; data-marker=&quot;−&quot;&gt;&lt;/td&gt;&lt;td style=&quot;color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #ffe49c; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;local N = require(&#039;Dev&lt;del style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;:&lt;/del&gt;Navbox&#039;)&lt;/div&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot; data-marker=&quot;+&quot;&gt;&lt;/td&gt;&lt;td style=&quot;color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #a3d3ff; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;local N = require(&#039;&lt;ins style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;Module:&lt;/ins&gt;Dev&lt;ins style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;/&lt;/ins&gt;Navbox&#039;)&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;-- See more details about this module at [[w:c:dev:Global_Lua_Modules/Navbox]]&lt;/div&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;-- See more details about this module at [[w:c:dev:Global_Lua_Modules/Navbox]]&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;br&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;br&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;-- The last line produces the output for the template&lt;/div&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;-- The last line produces the output for the template&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;return N&lt;/div&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;return N&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;/table&gt;</description>
			<pubDate>Mon, 31 Aug 2026 12:55:05 GMT</pubDate>
			<dc:creator>WikiAdmin</dc:creator>
			<comments>https://unimage.wcnm.pw/wiki/%E6%A8%A1%E5%9D%97%E8%AE%A8%E8%AE%BA:Navbox</comments>
		</item>
		<item>
			<title>模块:Namespace detect/config</title>
			<link>https://unimage.wcnm.pw/index.php?title=%E6%A8%A1%E5%9D%97:Namespace_detect/config&amp;diff=728&amp;oldid=37</link>
			<guid isPermaLink="false">https://unimage.wcnm.pw/index.php?title=%E6%A8%A1%E5%9D%97:Namespace_detect/config&amp;diff=728&amp;oldid=37</guid>
			<description>&lt;p&gt;将 Fandom Dev 模块依赖切换到本地副本&lt;/p&gt;
&lt;table style=&quot;background-color: #fff; color: #202122;&quot; data-mw=&quot;interface&quot;&gt;
				&lt;col class=&quot;diff-marker&quot; /&gt;
				&lt;col class=&quot;diff-content&quot; /&gt;
				&lt;col class=&quot;diff-marker&quot; /&gt;
				&lt;col class=&quot;diff-content&quot; /&gt;
				&lt;tr class=&quot;diff-title&quot; lang=&quot;zh-Hans&quot;&gt;
				&lt;td colspan=&quot;2&quot; style=&quot;background-color: #fff; color: #202122; text-align: center;&quot;&gt;←上一版本&lt;/td&gt;
				&lt;td colspan=&quot;2&quot; style=&quot;background-color: #fff; color: #202122; text-align: center;&quot;&gt;2026年8月31日 (一) 20:55的版本&lt;/td&gt;
				&lt;/tr&gt;&lt;tr&gt;&lt;td colspan=&quot;2&quot; class=&quot;diff-lineno&quot; id=&quot;mw-diff-left-l3&quot;&gt;第3行：&lt;/td&gt;
&lt;td colspan=&quot;2&quot; class=&quot;diff-lineno&quot;&gt;第3行：&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;-- The Fandom Developer&amp;#039;s Wiki hosts Global Lua Modules that can be imported and locally overridden.&lt;/div&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;-- The Fandom Developer&amp;#039;s Wiki hosts Global Lua Modules that can be imported and locally overridden.&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;-- The next line imports from the [[w:c:dev:Global Lua Modules]].&lt;/div&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;-- The next line imports from the [[w:c:dev:Global Lua Modules]].&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;diff-marker&quot; data-marker=&quot;−&quot;&gt;&lt;/td&gt;&lt;td style=&quot;color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #ffe49c; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;local nsConfiguration = require(&#039;Dev&lt;del style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;:&lt;/del&gt;Namespace_detect/config&#039;)&lt;/div&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot; data-marker=&quot;+&quot;&gt;&lt;/td&gt;&lt;td style=&quot;color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #a3d3ff; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;local nsConfiguration = require(&#039;&lt;ins style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;Module:&lt;/ins&gt;Dev&lt;ins style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;/&lt;/ins&gt;Namespace_detect/config&#039;)&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;-- See more details about this module at [[w:c:dev:Global_Lua_Modules/Namespace_detect]]&lt;/div&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;-- See more details about this module at [[w:c:dev:Global_Lua_Modules/Namespace_detect]]&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;   &lt;/div&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;   &lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;/table&gt;</description>
			<pubDate>Mon, 31 Aug 2026 12:55:04 GMT</pubDate>
			<dc:creator>WikiAdmin</dc:creator>
			<comments>https://unimage.wcnm.pw/wiki/%E6%A8%A1%E5%9D%97%E8%AE%A8%E8%AE%BA:Namespace_detect/config</comments>
		</item>
		<item>
			<title>模块:Namespace detect</title>
			<link>https://unimage.wcnm.pw/index.php?title=%E6%A8%A1%E5%9D%97:Namespace_detect&amp;diff=727&amp;oldid=36</link>
			<guid isPermaLink="false">https://unimage.wcnm.pw/index.php?title=%E6%A8%A1%E5%9D%97:Namespace_detect&amp;diff=727&amp;oldid=36</guid>
			<description>&lt;p&gt;将 Fandom Dev 模块依赖切换到本地副本&lt;/p&gt;
&lt;table style=&quot;background-color: #fff; color: #202122;&quot; data-mw=&quot;interface&quot;&gt;
				&lt;col class=&quot;diff-marker&quot; /&gt;
				&lt;col class=&quot;diff-content&quot; /&gt;
				&lt;col class=&quot;diff-marker&quot; /&gt;
				&lt;col class=&quot;diff-content&quot; /&gt;
				&lt;tr class=&quot;diff-title&quot; lang=&quot;zh-Hans&quot;&gt;
				&lt;td colspan=&quot;2&quot; style=&quot;background-color: #fff; color: #202122; text-align: center;&quot;&gt;←上一版本&lt;/td&gt;
				&lt;td colspan=&quot;2&quot; style=&quot;background-color: #fff; color: #202122; text-align: center;&quot;&gt;2026年8月31日 (一) 20:55的版本&lt;/td&gt;
				&lt;/tr&gt;&lt;tr&gt;&lt;td colspan=&quot;2&quot; class=&quot;diff-lineno&quot; id=&quot;mw-diff-left-l3&quot;&gt;第3行：&lt;/td&gt;
&lt;td colspan=&quot;2&quot; class=&quot;diff-lineno&quot;&gt;第3行：&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;-- The Fandom Developer&amp;#039;s Wiki hosts Global Lua Modules that can be imported and locally overridden.&lt;/div&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;-- The Fandom Developer&amp;#039;s Wiki hosts Global Lua Modules that can be imported and locally overridden.&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;-- The next line imports the Namespace_detect module from the [[w:c:dev:Global Lua Modules]].&lt;/div&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;-- The next line imports the Namespace_detect module from the [[w:c:dev:Global Lua Modules]].&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;diff-marker&quot; data-marker=&quot;−&quot;&gt;&lt;/td&gt;&lt;td style=&quot;color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #ffe49c; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;local NS = require(&#039;Dev&lt;del style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;:&lt;/del&gt;Namespace_detect&#039;)&lt;/div&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot; data-marker=&quot;+&quot;&gt;&lt;/td&gt;&lt;td style=&quot;color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #a3d3ff; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;local NS = require(&#039;&lt;ins style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;Module:&lt;/ins&gt;Dev&lt;ins style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;/&lt;/ins&gt;Namespace_detect&#039;)&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;-- Local configuration can be modified in  &lt;/div&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;-- Local configuration can be modified in  &lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;-- [[Module:Namespace detect/data]] and&lt;/div&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;-- [[Module:Namespace detect/data]] and&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;/table&gt;</description>
			<pubDate>Mon, 31 Aug 2026 12:55:03 GMT</pubDate>
			<dc:creator>WikiAdmin</dc:creator>
			<comments>https://unimage.wcnm.pw/wiki/%E6%A8%A1%E5%9D%97%E8%AE%A8%E8%AE%BA:Namespace_detect</comments>
		</item>
		<item>
			<title>模块:Mbox</title>
			<link>https://unimage.wcnm.pw/index.php?title=%E6%A8%A1%E5%9D%97:Mbox&amp;diff=726&amp;oldid=32</link>
			<guid isPermaLink="false">https://unimage.wcnm.pw/index.php?title=%E6%A8%A1%E5%9D%97:Mbox&amp;diff=726&amp;oldid=32</guid>
			<description>&lt;p&gt;将 Fandom Dev 模块依赖切换到本地副本&lt;/p&gt;
&lt;table style=&quot;background-color: #fff; color: #202122;&quot; data-mw=&quot;interface&quot;&gt;
				&lt;col class=&quot;diff-marker&quot; /&gt;
				&lt;col class=&quot;diff-content&quot; /&gt;
				&lt;col class=&quot;diff-marker&quot; /&gt;
				&lt;col class=&quot;diff-content&quot; /&gt;
				&lt;tr class=&quot;diff-title&quot; lang=&quot;zh-Hans&quot;&gt;
				&lt;td colspan=&quot;2&quot; style=&quot;background-color: #fff; color: #202122; text-align: center;&quot;&gt;←上一版本&lt;/td&gt;
				&lt;td colspan=&quot;2&quot; style=&quot;background-color: #fff; color: #202122; text-align: center;&quot;&gt;2026年8月31日 (一) 20:55的版本&lt;/td&gt;
				&lt;/tr&gt;&lt;tr&gt;&lt;td colspan=&quot;2&quot; class=&quot;diff-lineno&quot; id=&quot;mw-diff-left-l3&quot;&gt;第3行：&lt;/td&gt;
&lt;td colspan=&quot;2&quot; class=&quot;diff-lineno&quot;&gt;第3行：&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;-- The Fandom Developer&amp;#039;s Wiki hosts Global Lua Modules that can be imported and locally overridden.&lt;/div&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;-- The Fandom Developer&amp;#039;s Wiki hosts Global Lua Modules that can be imported and locally overridden.&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;-- The next line imports the Mbox module from the [[w:c:dev:Global Lua Modules]].&lt;/div&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;-- The next line imports the Mbox module from the [[w:c:dev:Global Lua Modules]].&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;diff-marker&quot; data-marker=&quot;−&quot;&gt;&lt;/td&gt;&lt;td style=&quot;color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #ffe49c; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;local Mbox = require(&#039;Dev&lt;del style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;:&lt;/del&gt;Mbox&#039;)&lt;/div&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot; data-marker=&quot;+&quot;&gt;&lt;/td&gt;&lt;td style=&quot;color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #a3d3ff; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;local Mbox = require(&#039;&lt;ins style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;Module:&lt;/ins&gt;Dev&lt;ins style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;/&lt;/ins&gt;Mbox&#039;)&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;-- See more details about this module at [[w:c:dev:Global_Lua_Modules/Mbox]]&lt;/div&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;-- See more details about this module at [[w:c:dev:Global_Lua_Modules/Mbox]]&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;br&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;br&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td colspan=&quot;2&quot; class=&quot;diff-lineno&quot; id=&quot;mw-diff-left-l18&quot;&gt;第18行：&lt;/td&gt;
&lt;td colspan=&quot;2&quot; class=&quot;diff-lineno&quot;&gt;第18行：&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;--&lt;/div&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;--&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;br&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;br&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;diff-marker&quot; data-marker=&quot;−&quot;&gt;&lt;/td&gt;&lt;td style=&quot;color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #ffe49c; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;local getArgs = require(&#039;Dev&lt;del style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;:&lt;/del&gt;Arguments&#039;).getArgs&lt;/div&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot; data-marker=&quot;+&quot;&gt;&lt;/td&gt;&lt;td style=&quot;color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #a3d3ff; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;local getArgs = require(&#039;&lt;ins style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;Module:&lt;/ins&gt;Dev&lt;ins style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;/&lt;/ins&gt;Arguments&#039;).getArgs&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;local localCSS = mw.loadData(&amp;#039;Module:Mbox/data&amp;#039;).localStyle&lt;/div&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;local localCSS = mw.loadData(&amp;#039;Module:Mbox/data&amp;#039;).localStyle&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;br&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;br&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;/table&gt;</description>
			<pubDate>Mon, 31 Aug 2026 12:55:01 GMT</pubDate>
			<dc:creator>WikiAdmin</dc:creator>
			<comments>https://unimage.wcnm.pw/wiki/%E6%A8%A1%E5%9D%97%E8%AE%A8%E8%AE%BA:Mbox</comments>
		</item>
		<item>
			<title>模块:I18n</title>
			<link>https://unimage.wcnm.pw/index.php?title=%E6%A8%A1%E5%9D%97:I18n&amp;diff=725&amp;oldid=115</link>
			<guid isPermaLink="false">https://unimage.wcnm.pw/index.php?title=%E6%A8%A1%E5%9D%97:I18n&amp;diff=725&amp;oldid=115</guid>
			<description>&lt;p&gt;将 Fandom Dev 模块依赖切换到本地副本&lt;/p&gt;
&lt;table style=&quot;background-color: #fff; color: #202122;&quot; data-mw=&quot;interface&quot;&gt;
				&lt;col class=&quot;diff-marker&quot; /&gt;
				&lt;col class=&quot;diff-content&quot; /&gt;
				&lt;col class=&quot;diff-marker&quot; /&gt;
				&lt;col class=&quot;diff-content&quot; /&gt;
				&lt;tr class=&quot;diff-title&quot; lang=&quot;zh-Hans&quot;&gt;
				&lt;td colspan=&quot;2&quot; style=&quot;background-color: #fff; color: #202122; text-align: center;&quot;&gt;←上一版本&lt;/td&gt;
				&lt;td colspan=&quot;2&quot; style=&quot;background-color: #fff; color: #202122; text-align: center;&quot;&gt;2026年8月31日 (一) 20:55的版本&lt;/td&gt;
				&lt;/tr&gt;&lt;tr&gt;&lt;td colspan=&quot;2&quot; class=&quot;diff-lineno&quot; id=&quot;mw-diff-left-l3&quot;&gt;第3行：&lt;/td&gt;
&lt;td colspan=&quot;2&quot; class=&quot;diff-lineno&quot;&gt;第3行：&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;-- The Fandom Developer&amp;#039;s Wiki hosts Global Lua Modules that can be imported and locally overridden.&lt;/div&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;-- The Fandom Developer&amp;#039;s Wiki hosts Global Lua Modules that can be imported and locally overridden.&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;-- The next line imports the I18n module from the [[w:c:dev:Global Lua Modules]].&lt;/div&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;-- The next line imports the I18n module from the [[w:c:dev:Global Lua Modules]].&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;diff-marker&quot; data-marker=&quot;−&quot;&gt;&lt;/td&gt;&lt;td style=&quot;color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #ffe49c; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;local i18n = require(&#039;Dev&lt;del style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;:&lt;/del&gt;I18n&#039;)&lt;/div&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot; data-marker=&quot;+&quot;&gt;&lt;/td&gt;&lt;td style=&quot;color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #a3d3ff; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;local i18n = require(&#039;&lt;ins style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;Module:&lt;/ins&gt;Dev&lt;ins style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;/&lt;/ins&gt;I18n&#039;)&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;-- See more details about this module at [[w:c:dev:Global_Lua_Modules/I18n]]&lt;/div&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;-- See more details about this module at [[w:c:dev:Global_Lua_Modules/I18n]]&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;   &lt;/div&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;   &lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;-- The last line produces the output for the template&lt;/div&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;-- The last line produces the output for the template&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;return i18n&lt;/div&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;return i18n&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;/table&gt;</description>
			<pubDate>Mon, 31 Aug 2026 12:55:00 GMT</pubDate>
			<dc:creator>WikiAdmin</dc:creator>
			<comments>https://unimage.wcnm.pw/wiki/%E6%A8%A1%E5%9D%97%E8%AE%A8%E8%AE%BA:I18n</comments>
		</item>
		<item>
			<title>模块:Hatnote/i18n</title>
			<link>https://unimage.wcnm.pw/index.php?title=%E6%A8%A1%E5%9D%97:Hatnote/i18n&amp;diff=724&amp;oldid=113</link>
			<guid isPermaLink="false">https://unimage.wcnm.pw/index.php?title=%E6%A8%A1%E5%9D%97:Hatnote/i18n&amp;diff=724&amp;oldid=113</guid>
			<description>&lt;p&gt;将 Fandom Dev 模块依赖切换到本地副本&lt;/p&gt;
&lt;table style=&quot;background-color: #fff; color: #202122;&quot; data-mw=&quot;interface&quot;&gt;
				&lt;col class=&quot;diff-marker&quot; /&gt;
				&lt;col class=&quot;diff-content&quot; /&gt;
				&lt;col class=&quot;diff-marker&quot; /&gt;
				&lt;col class=&quot;diff-content&quot; /&gt;
				&lt;tr class=&quot;diff-title&quot; lang=&quot;zh-Hans&quot;&gt;
				&lt;td colspan=&quot;2&quot; style=&quot;background-color: #fff; color: #202122; text-align: center;&quot;&gt;←上一版本&lt;/td&gt;
				&lt;td colspan=&quot;2&quot; style=&quot;background-color: #fff; color: #202122; text-align: center;&quot;&gt;2026年8月31日 (一) 20:54的版本&lt;/td&gt;
				&lt;/tr&gt;&lt;tr&gt;&lt;td colspan=&quot;2&quot; class=&quot;diff-lineno&quot; id=&quot;mw-diff-left-l3&quot;&gt;第3行：&lt;/td&gt;
&lt;td colspan=&quot;2&quot; class=&quot;diff-lineno&quot;&gt;第3行：&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;-- The Fandom Developer&amp;#039;s Wiki hosts Global Lua Modules that can be imported and locally overridden.&lt;/div&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;-- The Fandom Developer&amp;#039;s Wiki hosts Global Lua Modules that can be imported and locally overridden.&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;-- The next line imports the Hatnote module from the [[w:c:dev:Global Lua Modules]].&lt;/div&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;-- The next line imports the Hatnote module from the [[w:c:dev:Global Lua Modules]].&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;diff-marker&quot; data-marker=&quot;−&quot;&gt;&lt;/td&gt;&lt;td style=&quot;color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #ffe49c; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;local Hi18n = require(&#039;Dev&lt;del style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;:&lt;/del&gt;Hatnote/i18n&#039;)&lt;/div&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot; data-marker=&quot;+&quot;&gt;&lt;/td&gt;&lt;td style=&quot;color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #a3d3ff; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;local Hi18n = require(&#039;&lt;ins style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;Module:&lt;/ins&gt;Dev&lt;ins style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;/&lt;/ins&gt;Hatnote/i18n&#039;)&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;-- See more details about this module at [[w:c:dev:Global_Lua_Modules/Hatnote]]&lt;/div&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;-- See more details about this module at [[w:c:dev:Global_Lua_Modules/Hatnote]]&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;   &lt;/div&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;   &lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;-- The last line produces the output for the template&lt;/div&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;-- The last line produces the output for the template&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;return Hi18n&lt;/div&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;return Hi18n&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;/table&gt;</description>
			<pubDate>Mon, 31 Aug 2026 12:54:59 GMT</pubDate>
			<dc:creator>WikiAdmin</dc:creator>
			<comments>https://unimage.wcnm.pw/wiki/%E6%A8%A1%E5%9D%97%E8%AE%A8%E8%AE%BA:Hatnote/i18n</comments>
		</item>
		<item>
			<title>模块:Hatnote</title>
			<link>https://unimage.wcnm.pw/index.php?title=%E6%A8%A1%E5%9D%97:Hatnote&amp;diff=723&amp;oldid=30</link>
			<guid isPermaLink="false">https://unimage.wcnm.pw/index.php?title=%E6%A8%A1%E5%9D%97:Hatnote&amp;diff=723&amp;oldid=30</guid>
			<description>&lt;p&gt;将 Fandom Dev 模块依赖切换到本地副本&lt;/p&gt;
&lt;table style=&quot;background-color: #fff; color: #202122;&quot; data-mw=&quot;interface&quot;&gt;
				&lt;col class=&quot;diff-marker&quot; /&gt;
				&lt;col class=&quot;diff-content&quot; /&gt;
				&lt;col class=&quot;diff-marker&quot; /&gt;
				&lt;col class=&quot;diff-content&quot; /&gt;
				&lt;tr class=&quot;diff-title&quot; lang=&quot;zh-Hans&quot;&gt;
				&lt;td colspan=&quot;2&quot; style=&quot;background-color: #fff; color: #202122; text-align: center;&quot;&gt;←上一版本&lt;/td&gt;
				&lt;td colspan=&quot;2&quot; style=&quot;background-color: #fff; color: #202122; text-align: center;&quot;&gt;2026年8月31日 (一) 20:54的版本&lt;/td&gt;
				&lt;/tr&gt;&lt;tr&gt;&lt;td colspan=&quot;2&quot; class=&quot;diff-lineno&quot; id=&quot;mw-diff-left-l3&quot;&gt;第3行：&lt;/td&gt;
&lt;td colspan=&quot;2&quot; class=&quot;diff-lineno&quot;&gt;第3行：&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;-- The Fandom Developer&amp;#039;s Wiki hosts Global Lua Modules that can be imported and locally overridden.&lt;/div&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;-- The Fandom Developer&amp;#039;s Wiki hosts Global Lua Modules that can be imported and locally overridden.&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;-- The next line imports the Hatnote module from the [[w:c:dev:Global Lua Modules]].&lt;/div&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;-- The next line imports the Hatnote module from the [[w:c:dev:Global Lua Modules]].&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;diff-marker&quot; data-marker=&quot;−&quot;&gt;&lt;/td&gt;&lt;td style=&quot;color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #ffe49c; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;local H = require(&#039;Dev&lt;del style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;:&lt;/del&gt;Hatnote&#039;)&lt;/div&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot; data-marker=&quot;+&quot;&gt;&lt;/td&gt;&lt;td style=&quot;color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #a3d3ff; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;local H = require(&#039;&lt;ins style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;Module:&lt;/ins&gt;Dev&lt;ins style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;/&lt;/ins&gt;Hatnote&#039;)&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;-- See more details about this module at [[w:c:dev:Global_Lua_Modules/Hatnote]]&lt;/div&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;-- See more details about this module at [[w:c:dev:Global_Lua_Modules/Hatnote]]&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;   &lt;/div&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;   &lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;-- The last line produces the output for the template&lt;/div&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;-- The last line produces the output for the template&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;return H&lt;/div&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;return H&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;/table&gt;</description>
			<pubDate>Mon, 31 Aug 2026 12:54:58 GMT</pubDate>
			<dc:creator>WikiAdmin</dc:creator>
			<comments>https://unimage.wcnm.pw/wiki/%E6%A8%A1%E5%9D%97%E8%AE%A8%E8%AE%BA:Hatnote</comments>
		</item>
		<item>
			<title>模块:Dialogue</title>
			<link>https://unimage.wcnm.pw/index.php?title=%E6%A8%A1%E5%9D%97:Dialogue&amp;diff=722&amp;oldid=28</link>
			<guid isPermaLink="false">https://unimage.wcnm.pw/index.php?title=%E6%A8%A1%E5%9D%97:Dialogue&amp;diff=722&amp;oldid=28</guid>
			<description>&lt;p&gt;将 Fandom Dev 模块依赖切换到本地副本&lt;/p&gt;
&lt;table style=&quot;background-color: #fff; color: #202122;&quot; data-mw=&quot;interface&quot;&gt;
				&lt;col class=&quot;diff-marker&quot; /&gt;
				&lt;col class=&quot;diff-content&quot; /&gt;
				&lt;col class=&quot;diff-marker&quot; /&gt;
				&lt;col class=&quot;diff-content&quot; /&gt;
				&lt;tr class=&quot;diff-title&quot; lang=&quot;zh-Hans&quot;&gt;
				&lt;td colspan=&quot;2&quot; style=&quot;background-color: #fff; color: #202122; text-align: center;&quot;&gt;←上一版本&lt;/td&gt;
				&lt;td colspan=&quot;2&quot; style=&quot;background-color: #fff; color: #202122; text-align: center;&quot;&gt;2026年8月31日 (一) 20:54的版本&lt;/td&gt;
				&lt;/tr&gt;&lt;tr&gt;&lt;td colspan=&quot;2&quot; class=&quot;diff-lineno&quot; id=&quot;mw-diff-left-l3&quot;&gt;第3行：&lt;/td&gt;
&lt;td colspan=&quot;2&quot; class=&quot;diff-lineno&quot;&gt;第3行：&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;-- The Fandom Developer&amp;#039;s Wiki hosts Global Lua Modules that can be imported and locally overridden.&lt;/div&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;-- The Fandom Developer&amp;#039;s Wiki hosts Global Lua Modules that can be imported and locally overridden.&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;-- The next line imports the Dialogue module from the [[w:c:dev:Global Lua Modules]].&lt;/div&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;-- The next line imports the Dialogue module from the [[w:c:dev:Global Lua Modules]].&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;diff-marker&quot; data-marker=&quot;−&quot;&gt;&lt;/td&gt;&lt;td style=&quot;color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #ffe49c; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;local Dialogue = require(&#039;Dev&lt;del style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;:&lt;/del&gt;Dialogue&#039;)&lt;/div&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot; data-marker=&quot;+&quot;&gt;&lt;/td&gt;&lt;td style=&quot;color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #a3d3ff; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;local Dialogue = require(&#039;&lt;ins style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;Module:&lt;/ins&gt;Dev&lt;ins style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;/&lt;/ins&gt;Dialogue&#039;)&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;-- See more details about this module at [[w:c:dev:Global_Lua_Modules/Dialogue]]&lt;/div&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;-- See more details about this module at [[w:c:dev:Global_Lua_Modules/Dialogue]]&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;   &lt;/div&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;   &lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;-- The last line produces the output for the template&lt;/div&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;-- The last line produces the output for the template&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;return Dialogue&lt;/div&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;return Dialogue&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;/table&gt;</description>
			<pubDate>Mon, 31 Aug 2026 12:54:57 GMT</pubDate>
			<dc:creator>WikiAdmin</dc:creator>
			<comments>https://unimage.wcnm.pw/wiki/%E6%A8%A1%E5%9D%97%E8%AE%A8%E8%AE%BA:Dialogue</comments>
		</item>
		<item>
			<title>模块:Dev/Yesno</title>
			<link>https://unimage.wcnm.pw/index.php?title=%E6%A8%A1%E5%9D%97:Dev/Yesno&amp;diff=721&amp;oldid=0</link>
			<guid isPermaLink="false">https://unimage.wcnm.pw/index.php?title=%E6%A8%A1%E5%9D%97:Dev/Yesno&amp;diff=721&amp;oldid=0</guid>
			<description>&lt;p&gt;从 Fandom Developer Wiki 本地化全局模块，源修订 198227&lt;/p&gt;
&lt;p&gt;&lt;b&gt;新页面&lt;/b&gt;&lt;/p&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 (`&amp;#039;yes&amp;#039;`, `&amp;#039;y&amp;#039;`, `&amp;#039;1&amp;#039;`,&lt;br /&gt;
--                      `&amp;#039;t&amp;#039;` or `&amp;#039;on&amp;#039;`) produces `true` as output.&lt;br /&gt;
--                       * The string representations of Lua&amp;#039;s true&lt;br /&gt;
--                      boolean value (`&amp;#039;true&amp;#039;`) also produces `true`.&lt;br /&gt;
--                       * Falsy wikitext input (`&amp;#039;no&amp;#039;`, `&amp;#039;n&amp;#039;`, `&amp;#039;0&amp;#039;`,&lt;br /&gt;
--                      `&amp;#039;f&amp;#039;` or `&amp;#039;off&amp;#039;`) produces `false` as output.&lt;br /&gt;
--                       * The string representation of Lua&amp;#039;s false&lt;br /&gt;
--                      boolean value (`&amp;#039;false&amp;#039;`) also produces `false`.&lt;br /&gt;
--                       * Localised text meaning `&amp;#039;yes&amp;#039;` or `&amp;#039;no&amp;#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&amp;#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(&amp;#039;htmlform-yes&amp;#039;):plain())&lt;br /&gt;
local no = lower(msg(&amp;#039;htmlform-no&amp;#039;):plain())&lt;br /&gt;
local en_yes = lower(msg(&amp;#039;htmlform-yes&amp;#039;):inLanguage(&amp;#039;en&amp;#039;):plain())&lt;br /&gt;
local en_no = lower(msg(&amp;#039;htmlform-no&amp;#039;):inLanguage(&amp;#039;en&amp;#039;):plain())&lt;br /&gt;
&lt;br /&gt;
return function(value, default)&lt;br /&gt;
    value = type(value) == &amp;#039;string&amp;#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 == &amp;#039;y&amp;#039;&lt;br /&gt;
        or value == &amp;#039;true&amp;#039;&lt;br /&gt;
        or value == &amp;#039;t&amp;#039;&lt;br /&gt;
        or value == &amp;#039;on&amp;#039;&lt;br /&gt;
        or value == &amp;#039;enable&amp;#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 == &amp;#039;n&amp;#039;&lt;br /&gt;
        or value == &amp;#039;false&amp;#039;&lt;br /&gt;
        or value == &amp;#039;f&amp;#039;&lt;br /&gt;
        or value == &amp;#039;off&amp;#039;&lt;br /&gt;
        or value == &amp;#039;disable&amp;#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;</description>
			<pubDate>Mon, 31 Aug 2026 12:54:56 GMT</pubDate>
			<dc:creator>WikiAdmin</dc:creator>
			<comments>https://unimage.wcnm.pw/wiki/%E6%A8%A1%E5%9D%97%E8%AE%A8%E8%AE%BA:Dev/Yesno</comments>
		</item>
		<item>
			<title>模块:Dev/TableTools</title>
			<link>https://unimage.wcnm.pw/index.php?title=%E6%A8%A1%E5%9D%97:Dev/TableTools&amp;diff=720&amp;oldid=0</link>
			<guid isPermaLink="false">https://unimage.wcnm.pw/index.php?title=%E6%A8%A1%E5%9D%97:Dev/TableTools&amp;diff=720&amp;oldid=0</guid>
			<description>&lt;p&gt;从 Fandom Developer Wiki 本地化全局模块，源修订 183115&lt;/p&gt;
&lt;p&gt;&lt;b&gt;新页面&lt;/b&gt;&lt;/p&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(&amp;#039;libraryUtil&amp;#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(&amp;#039;#&amp;#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(&amp;#039;Module:Dev/TableTools.selectFirst&amp;#039;, 1, n, &amp;#039;number&amp;#039;)&lt;br /&gt;
&lt;br /&gt;
    local function err()&lt;br /&gt;
        error(&amp;#039;bad argument #1 to \&amp;#039;Module:Dev/TableTools.selectFirst\&amp;#039; &amp;#039; ..&lt;br /&gt;
              &amp;#039;(index out of range)&amp;#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(&amp;#039;Module:Dev/TableTools.isSequence&amp;#039;, 1, t, &amp;#039;table&amp;#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(&amp;#039;Module:Dev/TableTools.size&amp;#039;, 1, t, &amp;#039;table&amp;#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(&amp;#039;Module:Dev/TableTools.includes&amp;#039;, 1, t, &amp;#039;table&amp;#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(&amp;#039;Module:Dev/TableTools.merge&amp;#039;, 1, dest, &amp;#039;table&amp;#039;)&lt;br /&gt;
    checkType(&amp;#039;Module:Dev/TableTools.merge&amp;#039;, 2, source, &amp;#039;table&amp;#039;)&lt;br /&gt;
&lt;br /&gt;
    for k, v in pairs(source) do&lt;br /&gt;
        if type(v) == &amp;#039;table&amp;#039; and type(dest[k]) == &amp;#039;table&amp;#039; then&lt;br /&gt;
            -- Don&amp;#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&amp;#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) == &amp;#039;number&amp;#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&amp;#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) == &amp;#039;number&amp;#039; and tostring(v) == &amp;#039;-nan&amp;#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(&amp;#039;removeDuplicates&amp;#039;, 1, t, &amp;#039;table&amp;#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&amp;#039;t be table keys, and they are also unique, so we don&amp;#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(&amp;#039;numKeys&amp;#039;, 1, t, &amp;#039;table&amp;#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 = &amp;#039;foo&amp;#039;, a3 = &amp;#039;bar&amp;#039;, a6 = &amp;#039;baz&amp;#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(&amp;#039;affixNums&amp;#039;, 1, t, &amp;#039;table&amp;#039;)&lt;br /&gt;
	checkType(&amp;#039;affixNums&amp;#039;, 2, prefix, &amp;#039;string&amp;#039;, true)&lt;br /&gt;
	checkType(&amp;#039;affixNums&amp;#039;, 3, suffix, &amp;#039;string&amp;#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(&amp;#039;([%(%)%%%.%[%]%*%+%-%?%^%$])&amp;#039;, &amp;#039;%%%1&amp;#039;)&lt;br /&gt;
		return s&lt;br /&gt;
	end&lt;br /&gt;
&lt;br /&gt;
	prefix = prefix or &amp;#039;&amp;#039;&lt;br /&gt;
	suffix = suffix or &amp;#039;&amp;#039;&lt;br /&gt;
	prefix = cleanPattern(prefix)&lt;br /&gt;
	suffix = cleanPattern(suffix)&lt;br /&gt;
	local pattern = &amp;#039;^&amp;#039; .. prefix .. &amp;#039;([1-9]%d*)&amp;#039; .. suffix .. &amp;#039;$&amp;#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) == &amp;#039;string&amp;#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 = &amp;#039;text&amp;#039;, bar = &amp;#039;text&amp;#039;}, [2] = {foo = &amp;#039;text&amp;#039;, baz = &amp;#039;text&amp;#039;} }&lt;br /&gt;
-- Keys that don&amp;#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(&amp;#039;numData&amp;#039;, 1, t, &amp;#039;table&amp;#039;)&lt;br /&gt;
	checkType(&amp;#039;numData&amp;#039;, 2, compress, &amp;#039;boolean&amp;#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), &amp;#039;^([^0-9]*)([1-9][0-9]*)$&amp;#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 == &amp;#039;&amp;#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(&amp;#039;compressSparseArray&amp;#039;, 1, t, &amp;#039;table&amp;#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(&amp;#039;sparseIpairs&amp;#039;, 1, t, &amp;#039;table&amp;#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;</description>
			<pubDate>Mon, 31 Aug 2026 12:54:54 GMT</pubDate>
			<dc:creator>WikiAdmin</dc:creator>
			<comments>https://unimage.wcnm.pw/wiki/%E6%A8%A1%E5%9D%97%E8%AE%A8%E8%AE%BA:Dev/TableTools</comments>
		</item>
		<item>
			<title>模块:Dev/Quote/i18n</title>
			<link>https://unimage.wcnm.pw/index.php?title=%E6%A8%A1%E5%9D%97:Dev/Quote/i18n&amp;diff=719&amp;oldid=0</link>
			<guid isPermaLink="false">https://unimage.wcnm.pw/index.php?title=%E6%A8%A1%E5%9D%97:Dev/Quote/i18n&amp;diff=719&amp;oldid=0</guid>
			<description>&lt;p&gt;从 Fandom Developer Wiki 本地化全局模块，源修订 205803&lt;/p&gt;
&lt;p&gt;&lt;b&gt;新页面&lt;/b&gt;&lt;/p&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;</description>
			<pubDate>Mon, 31 Aug 2026 12:54:54 GMT</pubDate>
			<dc:creator>WikiAdmin</dc:creator>
			<comments>https://unimage.wcnm.pw/wiki/%E6%A8%A1%E5%9D%97%E8%AE%A8%E8%AE%BA:Dev/Quote/i18n</comments>
		</item>
		<item>
			<title>模块:Dev/Quote</title>
			<link>https://unimage.wcnm.pw/index.php?title=%E6%A8%A1%E5%9D%97:Dev/Quote&amp;diff=718&amp;oldid=0</link>
			<guid isPermaLink="false">https://unimage.wcnm.pw/index.php?title=%E6%A8%A1%E5%9D%97:Dev/Quote&amp;diff=718&amp;oldid=0</guid>
			<description>&lt;p&gt;从 Fandom Developer Wiki 本地化全局模块，源修订 214339&lt;/p&gt;
&lt;p&gt;&lt;b&gt;新页面&lt;/b&gt;&lt;/p&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(&amp;#039;Module:Dev/Arguments&amp;#039;).getArgs&lt;br /&gt;
local i18n = require(&amp;#039;Module:Dev/I18n&amp;#039;).loadMessages(&amp;#039;Quote&amp;#039;)&lt;br /&gt;
&lt;br /&gt;
local function build(quote_contents, quote_source, options)&lt;br /&gt;
	local quote_container = mw.html.create(&amp;#039;blockquote&amp;#039;)&lt;br /&gt;
		:addClass(&amp;#039;pull-quote&amp;#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(&amp;#039;div&amp;#039;)&lt;br /&gt;
			:addClass(&amp;#039;pull-quote__source&amp;#039;)&lt;br /&gt;
				:tag(&amp;#039;cite&amp;#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(&amp;#039;class&amp;#039;, args)&lt;br /&gt;
	options.extrastyles = i18n:parameter(&amp;#039;style&amp;#039;, args)&lt;br /&gt;
	options.align = &amp;#039;&amp;#039;&lt;br /&gt;
	local align = i18n:parameter(&amp;#039;align&amp;#039;, args)&lt;br /&gt;
	if align then&lt;br /&gt;
		options.align = &amp;#039;pull-quote--&amp;#039; .. align&lt;br /&gt;
		options.styles[&amp;#039;width&amp;#039;] = i18n:parameter(&amp;#039;width&amp;#039;, args) or&lt;br /&gt;
								  i18n:parameter(&amp;#039;quotewidth&amp;#039;, args) or&lt;br /&gt;
								  &amp;#039;300px&amp;#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 &amp;#039;\n&amp;#039; .. quotetext .. &amp;#039;\n&amp;#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(&amp;#039;quotetext&amp;#039;, args) or&lt;br /&gt;
					  i18n:parameter(&amp;#039;quote&amp;#039;, args) or&lt;br /&gt;
					  i18n:parameter(&amp;#039;text&amp;#039;, args) or &amp;#039;&amp;#039;&lt;br /&gt;
&lt;br /&gt;
	local person = args[2] or&lt;br /&gt;
				   i18n:parameter(&amp;#039;person&amp;#039;, args) or&lt;br /&gt;
				   i18n:parameter(&amp;#039;speaker&amp;#039;, args) or&lt;br /&gt;
				   i18n:parameter(&amp;#039;personquoted&amp;#039;, args) or nil&lt;br /&gt;
&lt;br /&gt;
	local source = args[3] or&lt;br /&gt;
				   i18n:parameter(&amp;#039;source&amp;#039;, args) or&lt;br /&gt;
				   i18n:parameter(&amp;#039;quote_source&amp;#039;, args) or nil&lt;br /&gt;
&lt;br /&gt;
	local quote_contents = mw.html.create(&amp;#039;div&amp;#039;)&lt;br /&gt;
		:addClass(&amp;#039;pull-quote__text&amp;#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 .. &amp;#039;, &amp;#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(&amp;#039;div&amp;#039;)&lt;br /&gt;
		:addClass(&amp;#039;pull-quote__text&amp;#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(&amp;#039;div&amp;#039;)&lt;br /&gt;
				:addClass(&amp;#039;pull-quote__line&amp;#039;)&lt;br /&gt;
				:tag(&amp;#039;strong&amp;#039;)&lt;br /&gt;
					:addClass(&amp;#039;pull-quote__speaker&amp;#039;)&lt;br /&gt;
					:wikitext(v .. &amp;#039;:&amp;#039;)&lt;br /&gt;
					:done()&lt;br /&gt;
				:wikitext(&amp;#039; &amp;#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(&amp;#039;context&amp;#039;, args)&lt;br /&gt;
	local source = i18n:parameter(&amp;#039;source&amp;#039;, args)&lt;br /&gt;
	if context and source then&lt;br /&gt;
		quote_source = context .. &amp;#039;, &amp;#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;</description>
			<pubDate>Mon, 31 Aug 2026 12:54:53 GMT</pubDate>
			<dc:creator>WikiAdmin</dc:creator>
			<comments>https://unimage.wcnm.pw/wiki/%E6%A8%A1%E5%9D%97%E8%AE%A8%E8%AE%BA:Dev/Quote</comments>
		</item>
		<item>
			<title>模块:Dev/Navbox/i18n</title>
			<link>https://unimage.wcnm.pw/index.php?title=%E6%A8%A1%E5%9D%97:Dev/Navbox/i18n&amp;diff=717&amp;oldid=0</link>
			<guid isPermaLink="false">https://unimage.wcnm.pw/index.php?title=%E6%A8%A1%E5%9D%97:Dev/Navbox/i18n&amp;diff=717&amp;oldid=0</guid>
			<description>&lt;p&gt;从 Fandom Developer Wiki 本地化全局模块，源修订 209224&lt;/p&gt;
&lt;p&gt;&lt;b&gt;新页面&lt;/b&gt;&lt;/p&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;</description>
			<pubDate>Mon, 31 Aug 2026 12:54:52 GMT</pubDate>
			<dc:creator>WikiAdmin</dc:creator>
			<comments>https://unimage.wcnm.pw/wiki/%E6%A8%A1%E5%9D%97%E8%AE%A8%E8%AE%BA:Dev/Navbox/i18n</comments>
		</item>
		<item>
			<title>模块:Dev/Navbox</title>
			<link>https://unimage.wcnm.pw/index.php?title=%E6%A8%A1%E5%9D%97:Dev/Navbox&amp;diff=716&amp;oldid=0</link>
			<guid isPermaLink="false">https://unimage.wcnm.pw/index.php?title=%E6%A8%A1%E5%9D%97:Dev/Navbox&amp;diff=716&amp;oldid=0</guid>
			<description>&lt;p&gt;从 Fandom Developer Wiki 本地化全局模块，源修订 210054&lt;/p&gt;
&lt;p&gt;&lt;b&gt;新页面&lt;/b&gt;&lt;/p&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(&amp;#039;Module:Dev/i18n&amp;#039;).loadMessages(&amp;#039;Navbox&amp;#039;)&lt;br /&gt;
&lt;br /&gt;
local showText, hideText = i18n:useLanguageConversionType(&amp;#039;userLanguage&amp;#039;):msg(&amp;#039;show&amp;#039;), i18n:useLanguageConversionType(&amp;#039;userLanguage&amp;#039;):msg(&amp;#039;hide&amp;#039;)&lt;br /&gt;
&lt;br /&gt;
local showText_zh_hans, hideText_zh_hans = i18n:inLang(&amp;#039;zh-hans&amp;#039;):msg(&amp;#039;show&amp;#039;), i18n:inLang(&amp;#039;zh-hans&amp;#039;):msg(&amp;#039;hide&amp;#039;)&lt;br /&gt;
local showText_zh_hant, hideText_zh_hant = i18n:inLang(&amp;#039;zh-hant&amp;#039;):msg(&amp;#039;show&amp;#039;), i18n:inLang(&amp;#039;zh-hant&amp;#039;):msg(&amp;#039;hide&amp;#039;)&lt;br /&gt;
local showText_zh_hant_hk, hideText_zh_hant_hk = i18n:inLang(&amp;#039;zh-hk&amp;#039;):msg(&amp;#039;show&amp;#039;), i18n:inLang(&amp;#039;zh-hk&amp;#039;):msg(&amp;#039;hide&amp;#039;)&lt;br /&gt;
&lt;br /&gt;
local cfg = {&lt;br /&gt;
	marker = {&lt;br /&gt;
		oddeven = &amp;#039;\127_ODDEVEN_\127&amp;#039;,&lt;br /&gt;
		contains_subgroup = &amp;#039;\127_ODDEVEN0_\127&amp;#039;,&lt;br /&gt;
		restart_header = &amp;#039;\127_ODDEVEN1_\127&amp;#039;,&lt;br /&gt;
		regex_changer = &amp;#039;\127_ODDEVEN([01]?)_\127&amp;#039;,&lt;br /&gt;
		odd = &amp;#039;\127_ODD_\127&amp;#039;,&lt;br /&gt;
		even = &amp;#039;\127_EVEN_\127&amp;#039;,&lt;br /&gt;
		oddeven_sep = &amp;#039;\127_ODDEVEN2_\127&amp;#039;,&lt;br /&gt;
		oddeven_end = &amp;#039;\127_ODDEVEN3_\127&amp;#039;,&lt;br /&gt;
		regex_oddeven_sep = &amp;#039;\127_ODDEVEN[23]_\127&amp;#039;,&lt;br /&gt;
		regex_odd = &amp;#039;(\127_ODD_\127[^\127]*)\127_ODDEVEN2_\127([^\127]*)\127_ODDEVEN2_\127[^\127]*\127_ODDEVEN3_\127&amp;#039;,&lt;br /&gt;
		regex_even = &amp;#039;(\127_EVEN_\127[^\127]*)\127_ODDEVEN2_\127[^\127]*\127_ODDEVEN2_\127([^\127]*)\127_ODDEVEN3_\127&amp;#039;&lt;br /&gt;
	},&lt;br /&gt;
	pattern = {&lt;br /&gt;
		hlist = &amp;#039;hlist&amp;#039;,&lt;br /&gt;
		plainlist = &amp;#039;plainlist&amp;#039;,&lt;br /&gt;
	},&lt;br /&gt;
&lt;br /&gt;
	category = {&lt;br /&gt;
		error = &amp;#039;[[Category:Navboxes with internal errors]]&amp;#039;,&lt;br /&gt;
		orphan = &amp;#039;[[Category:Navbox orphans]]&amp;#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 ~= &amp;#039;&amp;#039; then&lt;br /&gt;
			local str = tostring(k)&lt;br /&gt;
			local cat, num, subnum = str:match(&amp;#039;^(%a+)([1-9]%d*)%.([1-9][%d%.]*)$&amp;#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(&amp;#039;^(%a+)([1-9]%d*)$&amp;#039;)&lt;br /&gt;
				if cat == &amp;#039;header&amp;#039; or cat == &amp;#039;list&amp;#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({&amp;#039;showall&amp;#039;, &amp;#039;alternaterows&amp;#039;, &amp;#039;titlestyle&amp;#039;, &amp;#039;titleclass&amp;#039;, &amp;#039;abovestyle&amp;#039;, &amp;#039;aboveclass&amp;#039;, &amp;#039;rowclass&amp;#039;, &amp;#039;altrowclass&amp;#039;, &amp;#039;groupstyle&amp;#039;, &amp;#039;groupclass&amp;#039;, &amp;#039;altgroupstyle&amp;#039;, &amp;#039;altgroupclass&amp;#039;, &amp;#039;liststyle&amp;#039;, &amp;#039;listclass&amp;#039;, &amp;#039;altliststyle&amp;#039;, &amp;#039;altlistclass&amp;#039;, &amp;#039;belowstyle&amp;#039;, &amp;#039;belowclass&amp;#039;, &amp;#039;defaultstate&amp;#039;, &amp;#039;defaultcollapsetext&amp;#039;, &amp;#039;defaultexpandtext&amp;#039;}) do&lt;br /&gt;
			v[arg] = args[arg]&lt;br /&gt;
		end&lt;br /&gt;
		v.border = &amp;#039;child&amp;#039;&lt;br /&gt;
		args[&amp;#039;list&amp;#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[&amp;#039;header&amp;#039;..num] then&lt;br /&gt;
			cSection = true&lt;br /&gt;
			cSkip = false&lt;br /&gt;
			local showme = args[&amp;#039;show&amp;#039;..num]&lt;br /&gt;
			if showme == &amp;#039;no&amp;#039; then&lt;br /&gt;
				cSkip = true&lt;br /&gt;
			elseif showme == &amp;#039;auto&amp;#039; or (showme ~= &amp;#039;yes&amp;#039; and showall ~= &amp;#039;yes&amp;#039;) then&lt;br /&gt;
				if not args[&amp;#039;list&amp;#039;..num] then&lt;br /&gt;
					local nextNum = rownums[i+1]&lt;br /&gt;
					cSkip = not nextNum or args[&amp;#039;header&amp;#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({&amp;#039;groupclass&amp;#039;, &amp;#039;groupstyle&amp;#039;, &amp;#039;listclass&amp;#039;, &amp;#039;liststyle&amp;#039;}) do&lt;br /&gt;
		if args[&amp;#039;alt&amp;#039; .. v] then&lt;br /&gt;
			args[v] = cfg.marker.oddeven_sep .. (args[v] or &amp;#039;&amp;#039;) .. cfg.marker.oddeven_sep .. args[&amp;#039;alt&amp;#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 &amp;#039;&amp;#039;) or &amp;#039;&amp;#039;&lt;br /&gt;
	if border == &amp;#039;child&amp;#039; then border = &amp;#039;subgroup&amp;#039; end&lt;br /&gt;
	local isChild = (border == &amp;#039;subgroup&amp;#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() == &amp;#039;zh&amp;#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) == &amp;#039;{|&amp;#039; then&lt;br /&gt;
			return &amp;#039;\n&amp;#039; .. item ..&amp;#039;\n&amp;#039;&lt;br /&gt;
		end&lt;br /&gt;
		if item:match(&amp;#039;^[*:;#]&amp;#039;) then&lt;br /&gt;
			return &amp;#039;\n&amp;#039; .. item ..&amp;#039;\n&amp;#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 == &amp;#039;subgroup&amp;#039; and args.orphan ~= &amp;#039;yes&amp;#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 &amp;#039;alt&amp;#039;&lt;br /&gt;
		altrowclass = &amp;#039; &amp;#039; .. altrowclass&lt;br /&gt;
		local first, second = &amp;#039;&amp;#039;, altrowclass&lt;br /&gt;
		if args.alternaterows then&lt;br /&gt;
			if args.alternaterows == &amp;#039;swap&amp;#039; then&lt;br /&gt;
				first, second = second, first&lt;br /&gt;
			elseif args.alternaterows == &amp;#039;no&amp;#039; or args.alternaterows == &amp;#039;odd&amp;#039; then&lt;br /&gt;
				second = &amp;#039;&amp;#039;&lt;br /&gt;
			elseif args.alternaterows == &amp;#039;even&amp;#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 == &amp;#039;0&amp;#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 == &amp;#039;1&amp;#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 &amp;#039;&amp;#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(&amp;#039;([%[%]])&amp;#039;, &amp;#039;%%%1&amp;#039;)&lt;br /&gt;
		wikitext = wikitext:gsub(regex, &amp;#039;&amp;#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, &amp;#039;%1%2&amp;#039;):gsub(cfg.marker.regex_even, &amp;#039;%1%2&amp;#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(&amp;#039;&amp;lt;span class=&amp;quot;navbox-vde&amp;quot;&amp;gt;&amp;#039;&lt;br /&gt;
			.. mw.getCurrentFrame():expandTemplate({&lt;br /&gt;
				title = &amp;#039;vdelinks&amp;#039;,&lt;br /&gt;
				args = { args.template, [&amp;#039;type&amp;#039;] = &amp;#039;navbox&amp;#039; }&lt;br /&gt;
			}) .. &amp;#039;&amp;lt;/span&amp;gt;&amp;#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(&amp;#039;tr&amp;#039;):addClass(&amp;#039;navbox-title&amp;#039;..cfg.marker.restart_header)&lt;br /&gt;
		local titlecell = mw.html.create(&amp;#039;th&amp;#039;):attr(&amp;#039;colspan&amp;#039;,colspan):attr(&amp;#039;scope&amp;#039;,&amp;#039;col&amp;#039;)&lt;br /&gt;
		local titlediv = mw.html.create(&amp;#039;div&amp;#039;)&lt;br /&gt;
&lt;br /&gt;
		if not pcall( processVde, titlecell ) then&lt;br /&gt;
			titlediv:wikitext( &amp;#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;&amp;#039; )&lt;br /&gt;
		end&lt;br /&gt;
&lt;br /&gt;
		titlediv:wikitext( args.title or &amp;#039;{{{title}}}&amp;#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 ~= &amp;#039;plain&amp;#039;&lt;br /&gt;
&lt;br /&gt;
		if hasTemplate or hasState then&lt;br /&gt;
			-- remove redundant classes in future if it won&amp;#039;t break the display of wikis&amp;#039; navboxes&lt;br /&gt;
			titlediv:addClass(&amp;#039;navbox-title-pad navbox-title-padleft navbox-title-padright&amp;#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(&amp;#039;tr&amp;#039;):addClass(&amp;#039;navbox-gutter&amp;#039;):tag(&amp;#039;td&amp;#039;):attr(&amp;#039;colspan&amp;#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 &amp;#039;above&amp;#039; or &amp;#039;below&amp;#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(&amp;#039;tr&amp;#039;):addClass(&amp;#039;navbox-&amp;#039;..rowtype)&lt;br /&gt;
		local abcell = mw.html.create(&amp;#039;td&amp;#039;):attr(&amp;#039;colspan&amp;#039;,colspan):wikitext( processItem(args[rowtype]) )&lt;br /&gt;
&lt;br /&gt;
		if args[rowtype .. &amp;#039;class&amp;#039;] then abrow:addClass( args[rowtype .. &amp;#039;class&amp;#039;] ) end&lt;br /&gt;
		if args[rowtype .. &amp;#039;style&amp;#039;] then abcell:cssText( args[rowtype .. &amp;#039;style&amp;#039;] ) end&lt;br /&gt;
&lt;br /&gt;
		abrow:node( abcell )&lt;br /&gt;
		if hasTitle or rowtype == &amp;#039;below&amp;#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 == &amp;#039;image&amp;#039; and &amp;#039;navbox-image-right&amp;#039; or &amp;#039;navbox-image-left&amp;#039;&lt;br /&gt;
&lt;br /&gt;
		local imagecell = mw.html.create(&amp;#039;td&amp;#039;):addClass(&amp;#039;navbox-image&amp;#039;):addClass(iclass)&lt;br /&gt;
&lt;br /&gt;
		local image = args[imgtype]&lt;br /&gt;
		if image:sub(1,1) ~= &amp;#039;[&amp;#039; then&lt;br /&gt;
			local width = args[imgtype .. &amp;#039;width&amp;#039;] or &amp;#039;100px&amp;#039;&lt;br /&gt;
			imagecell:css(&amp;#039;width&amp;#039;,width):wikitext(&amp;#039;[&amp;#039;..&amp;#039;[&amp;#039; .. image  .. &amp;#039;|&amp;#039; .. width .. &amp;#039;|link=&amp;#039; .. (args[imgtype .. &amp;#039;link&amp;#039;] or &amp;#039;&amp;#039;) .. &amp;#039;]]&amp;#039;)&lt;br /&gt;
		else&lt;br /&gt;
			imagecell:css(&amp;#039;width&amp;#039;,&amp;#039;0%&amp;#039;):wikitext(image)&lt;br /&gt;
		end&lt;br /&gt;
&lt;br /&gt;
		if args[imgtype .. &amp;#039;class&amp;#039;] then imagecell:addClass( args[imgtype .. &amp;#039;class&amp;#039;] ) end&lt;br /&gt;
		if args[imgtype .. &amp;#039;style&amp;#039;] then imagecell:cssText( args[imgtype .. &amp;#039;style&amp;#039;] ) end&lt;br /&gt;
&lt;br /&gt;
		row:node( imagecell )&lt;br /&gt;
		if imgtype == &amp;#039;image&amp;#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(&amp;#039;tr&amp;#039;):addClass(&amp;#039;navbox-section-row&amp;#039;)&lt;br /&gt;
		local cell = mw.html.create(&amp;#039;td&amp;#039;):attr(&amp;#039;colspan&amp;#039;, 2)&lt;br /&gt;
&lt;br /&gt;
		if not hasrows then&lt;br /&gt;
			_processImage(row, &amp;#039;imageleft&amp;#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, &amp;#039;image&amp;#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[&amp;#039;header&amp;#039;..num] then return end&lt;br /&gt;
&lt;br /&gt;
		_closeCurrentSection()&lt;br /&gt;
&lt;br /&gt;
		local subtable = mw.html.create(&amp;#039;table&amp;#039;):addClass(&amp;#039;navbox-section&amp;#039;)&lt;br /&gt;
		local headerrow = mw.html.create(&amp;#039;tr&amp;#039;)&lt;br /&gt;
		local header = mw.html.create(&amp;#039;th&amp;#039;):addClass(&amp;#039;navbox-header&amp;#039;..cfg.marker.restart_header):attr(&amp;#039;colspan&amp;#039;,2):attr(&amp;#039;scope&amp;#039;,&amp;#039;col&amp;#039;)&lt;br /&gt;
		local headerdiv = mw.html.create(&amp;#039;div&amp;#039;):wikitext( args[&amp;#039;header&amp;#039;..num] )&lt;br /&gt;
&lt;br /&gt;
		local collapseme = args[&amp;#039;state&amp;#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 ~= &amp;#039;plain&amp;#039; then&lt;br /&gt;
				state = collapseme == &amp;#039;expanded&amp;#039; and &amp;#039;expanded&amp;#039; or &amp;#039;collapsed&amp;#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 == &amp;#039;expanded&amp;#039; and &amp;#039;expanded&amp;#039; or &amp;#039;collapsed&amp;#039;&lt;br /&gt;
			end&lt;br /&gt;
		end&lt;br /&gt;
&lt;br /&gt;
		if state then&lt;br /&gt;
			subtable:addClass(&amp;#039;mw-collapsible&amp;#039;):attr(&amp;#039;data-expandtext&amp;#039;,args[&amp;#039;expandtext&amp;#039;..num] or args[&amp;#039;defaultexpandtext&amp;#039;] or showText):attr(&amp;#039;data-collapsetext&amp;#039;,args[&amp;#039;collapsetext&amp;#039;..num] or args[&amp;#039;defaultcollapsetext&amp;#039;] or hideText)&lt;br /&gt;
			if state == &amp;#039;collapsed&amp;#039; then&lt;br /&gt;
				subtable:addClass(&amp;#039;mw-collapsed&amp;#039;)&lt;br /&gt;
			end&lt;br /&gt;
			-- remove redundant classes in future if it won&amp;#039;t break the display of wikis&amp;#039; navboxes&lt;br /&gt;
			headerdiv:addClass(&amp;#039;navbox-header-pad navbox-title-padleft navbox-title-padright&amp;#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;
			&amp;#039;^&amp;#039; .. htmlclass .. &amp;#039;$&amp;#039;,&lt;br /&gt;
			&amp;#039;%s&amp;#039; .. htmlclass .. &amp;#039;$&amp;#039;,&lt;br /&gt;
			&amp;#039;^&amp;#039; .. htmlclass .. &amp;#039;%s&amp;#039;,&lt;br /&gt;
			&amp;#039;%s&amp;#039; .. htmlclass .. &amp;#039;%s&amp;#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 &amp;#039;&amp;#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[&amp;#039;list&amp;#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[&amp;#039;list&amp;#039;..num]&lt;br /&gt;
&lt;br /&gt;
		hasChild = false&lt;br /&gt;
&lt;br /&gt;
		if data:sub(1, 12) == &amp;#039;&amp;lt;/div&amp;gt;&amp;lt;table&amp;#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(&amp;#039;tr&amp;#039;):addClass(&amp;#039;navbox-row&amp;#039;..oddEven)&lt;br /&gt;
&lt;br /&gt;
		if not hasrows and not activeSection then&lt;br /&gt;
			_processImage(row, &amp;#039;imageleft&amp;#039;)&lt;br /&gt;
		end&lt;br /&gt;
&lt;br /&gt;
		local listcell = mw.html.create(&amp;#039;td&amp;#039;):addClass(&amp;#039;navbox-list&amp;#039;)&lt;br /&gt;
		local hlistcell = listcell:tag(&amp;#039;div&amp;#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, &amp;#039;listclass&amp;#039;) or hasListClass(cfg.pattern.plainlist, &amp;#039;listclass&amp;#039;))) then&lt;br /&gt;
			hlistcell:addClass(&amp;#039;hlist&amp;#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(&amp;#039;background: none&amp;#039;)&lt;br /&gt;
		end&lt;br /&gt;
&lt;br /&gt;
		if args[&amp;#039;group&amp;#039;..num] then&lt;br /&gt;
			local groupcell = mw.html.create(&amp;#039;th&amp;#039;):addClass(&amp;#039;navbox-group&amp;#039;):attr(&amp;#039;scope&amp;#039;,&amp;#039;row&amp;#039;):wikitext( args[&amp;#039;group&amp;#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(&amp;#039;colspan&amp;#039;,2)&lt;br /&gt;
			if not hasChild then&lt;br /&gt;
				listcell:addClass(&amp;#039;no-group&amp;#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, &amp;#039;image&amp;#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(&amp;#039;rowspan&amp;#039;,rowspan)&lt;br /&gt;
		end&lt;br /&gt;
		if cimage then&lt;br /&gt;
			cimage:attr(&amp;#039;rowspan&amp;#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(&amp;#039;table&amp;#039;):addClass(&amp;#039;navbox-subgroup&amp;#039;)&lt;br /&gt;
			navbox_zh_hant = mw.html.create(&amp;#039;table&amp;#039;):addClass(&amp;#039;navbox-subgroup&amp;#039;)&lt;br /&gt;
			navbox_zh_hant_hk = mw.html.create(&amp;#039;table&amp;#039;):addClass(&amp;#039;navbox-subgroup&amp;#039;)&lt;br /&gt;
		else&lt;br /&gt;
			navbox = mw.html.create(&amp;#039;table&amp;#039;):addClass(&amp;#039;navbox-subgroup&amp;#039;)&lt;br /&gt;
		end&lt;br /&gt;
	else&lt;br /&gt;
		if useZhConverter then&lt;br /&gt;
			navbox_zh_hans = mw.html.create(&amp;#039;table&amp;#039;):addClass(&amp;#039;navbox&amp;#039;)&lt;br /&gt;
			navbox_zh_hant = mw.html.create(&amp;#039;table&amp;#039;):addClass(&amp;#039;navbox&amp;#039;)&lt;br /&gt;
			navbox_zh_hant_hk = mw.html.create(&amp;#039;table&amp;#039;):addClass(&amp;#039;navbox&amp;#039;)&lt;br /&gt;
		else&lt;br /&gt;
			navbox = mw.html.create(&amp;#039;table&amp;#039;):addClass(&amp;#039;navbox&amp;#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(&amp;#039;navbox-subgroup-with-title&amp;#039;)&lt;br /&gt;
			navbox_zh_hant:addClass(&amp;#039;navbox-subgroup-with-title&amp;#039;)&lt;br /&gt;
			navbox_zh_hant_hk:addClass(&amp;#039;navbox-subgroup-with-title&amp;#039;)&lt;br /&gt;
		else&lt;br /&gt;
			navbox:addClass(&amp;#039;navbox-subgroup-with-title&amp;#039;)&lt;br /&gt;
		end&lt;br /&gt;
	end&lt;br /&gt;
&lt;br /&gt;
	if hasTitle and args.state ~= &amp;#039;plain&amp;#039; then&lt;br /&gt;
		if useZhConverter then&lt;br /&gt;
			navbox_zh_hans:addClass(&amp;#039;mw-collapsible&amp;#039;):attr(&amp;#039;data-expandtext&amp;#039;, args[&amp;#039;expandtext_zh-hans&amp;#039;] or args[&amp;#039;expandtext&amp;#039;] or args[&amp;#039;defaultexpandtext_zh-hans&amp;#039;] or args[&amp;#039;defaultexpandtext&amp;#039;] or showText_zh_hans or showText):attr(&amp;#039;data-collapsetext&amp;#039;, args[&amp;#039;collapsetext_zh-hans&amp;#039;] or args[&amp;#039;collapsetext&amp;#039;] or args[&amp;#039;defaultcollapsetext_zh-hans&amp;#039;] or args[&amp;#039;defaultcollapsetext&amp;#039;] or hideText_zh_hans or hideText)&lt;br /&gt;
			navbox_zh_hant:addClass(&amp;#039;mw-collapsible&amp;#039;):attr(&amp;#039;data-expandtext&amp;#039;, args[&amp;#039;expandtext_zh-hant&amp;#039;] or args[&amp;#039;expandtext&amp;#039;] or args[&amp;#039;defaultexpandtext_zh-hant&amp;#039;] or args[&amp;#039;defaultexpandtext&amp;#039;] or showText_zh_hant or showText):attr(&amp;#039;data-collapsetext&amp;#039;, args[&amp;#039;collapsetext_zh-hant&amp;#039;] or args[&amp;#039;collapsetext&amp;#039;] or args[&amp;#039;defaultcollapsetext_zh-hant&amp;#039;] or args[&amp;#039;defaultcollapsetext&amp;#039;] or hideText_zh_hant or hideText)&lt;br /&gt;
			navbox_zh_hant_hk:addClass(&amp;#039;mw-collapsible&amp;#039;):attr(&amp;#039;data-expandtext&amp;#039;, args[&amp;#039;expandtext_zh-hant-hk&amp;#039;] or args[&amp;#039;expandtext_zh-hant&amp;#039;] or args[&amp;#039;expandtext&amp;#039;] or args[&amp;#039;defaultexpandtext_zh-hant-hk&amp;#039;] or args[&amp;#039;defaultexpandtext_zh-hant&amp;#039;] or args[&amp;#039;defaultexpandtext&amp;#039;] or showText_zh_hant_hk or showText_zh_hant or showText):attr(&amp;#039;data-collapsetext&amp;#039;, args[&amp;#039;collapsetext_zh-hant-hk&amp;#039;] or args[&amp;#039;collapsetext_zh-hant&amp;#039;] or args[&amp;#039;collapsetext&amp;#039;] or args[&amp;#039;defaultcollapsetext_zh-hant-hk&amp;#039;] or args[&amp;#039;defaultcollapsetext_zh-hant&amp;#039;] or args[&amp;#039;defaultcollapsetext&amp;#039;] or hideText_zh_hant_hk or hideText_zh_hant or hideText)&lt;br /&gt;
		else&lt;br /&gt;
			navbox:addClass(&amp;#039;mw-collapsible&amp;#039;):attr(&amp;#039;data-expandtext&amp;#039;, args[&amp;#039;expandtext&amp;#039;] or args[&amp;#039;defaultexpandtext&amp;#039;] or showText):attr(&amp;#039;data-collapsetext&amp;#039;, args[&amp;#039;collapsetext&amp;#039;] or args[&amp;#039;defaultcollapsetext&amp;#039;] or hideText)&lt;br /&gt;
		end&lt;br /&gt;
&lt;br /&gt;
		if args.state == &amp;#039;collapsed&amp;#039; then&lt;br /&gt;
			if useZhConverter then&lt;br /&gt;
				navbox_zh_hans:addClass(&amp;#039;mw-collapsed&amp;#039;)&lt;br /&gt;
				navbox_zh_hant:addClass(&amp;#039;mw-collapsed&amp;#039;)&lt;br /&gt;
				navbox_zh_hant_hk:addClass(&amp;#039;mw-collapsed&amp;#039;)&lt;br /&gt;
			else&lt;br /&gt;
				navbox:addClass(&amp;#039;mw-collapsed&amp;#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(&amp;#039;above&amp;#039;)&lt;br /&gt;
	processRows()&lt;br /&gt;
	processAboveBelow(&amp;#039;below&amp;#039;)&lt;br /&gt;
&lt;br /&gt;
	if not isChild then&lt;br /&gt;
		if useZhConverter then&lt;br /&gt;
			return &amp;#039;-{|&amp;#039; ..&lt;br /&gt;
				&amp;#039;zh-hans:-{zh-cn|&amp;#039; .. striped(tostring(navbox_zh_hans), border) .. &amp;#039;}-; &amp;#039; ..&lt;br /&gt;
				&amp;#039;zh-hant:-{zh-tw|&amp;#039; .. striped(tostring(navbox_zh_hant), border) .. &amp;#039;}-; &amp;#039; ..&lt;br /&gt;
				&amp;#039;zh-hk:-{zh-hk|&amp;#039; .. striped(tostring(navbox_zh_hant_hk), border) .. &amp;#039;}-;&amp;#039; ..&lt;br /&gt;
				&amp;#039;}-&amp;#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(&amp;#039;&amp;#039;)&lt;br /&gt;
		wrapper:wikitext(&amp;#039;&amp;lt;/div&amp;gt;&amp;#039;)&lt;br /&gt;
&lt;br /&gt;
		if useZhConverter then&lt;br /&gt;
			wrapper:wikitext(&amp;#039;-{|&amp;#039;)&lt;br /&gt;
			wrapper:wikitext(&amp;#039;zh-hans:-{zh-cn|&amp;#039;)&lt;br /&gt;
			wrapper:node(navbox_zh_hans)&lt;br /&gt;
			wrapper:wikitext(&amp;#039;}-; &amp;#039;)&lt;br /&gt;
			wrapper:wikitext(&amp;#039;zh-hant:-{zh-tw|&amp;#039;)&lt;br /&gt;
			wrapper:node(navbox_zh_hant)&lt;br /&gt;
			wrapper:wikitext(&amp;#039;}-; &amp;#039;)&lt;br /&gt;
			wrapper:wikitext(&amp;#039;zh-hk:-{zh-hk|&amp;#039;)&lt;br /&gt;
			wrapper:node(navbox_zh_hant_hk)&lt;br /&gt;
			wrapper:wikitext(&amp;#039;}-; &amp;#039;)&lt;br /&gt;
			wrapper:wikitext(&amp;#039;}-&amp;#039;)&lt;br /&gt;
		else&lt;br /&gt;
			wrapper:node(navbox)&lt;br /&gt;
		end&lt;br /&gt;
&lt;br /&gt;
		wrapper:wikitext(&amp;#039;&amp;lt;div class=&amp;quot;hlist&amp;quot;&amp;gt;&amp;#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;</description>
			<pubDate>Mon, 31 Aug 2026 12:54:51 GMT</pubDate>
			<dc:creator>WikiAdmin</dc:creator>
			<comments>https://unimage.wcnm.pw/wiki/%E6%A8%A1%E5%9D%97%E8%AE%A8%E8%AE%BA:Dev/Navbox</comments>
		</item>
		<item>
			<title>模块:Dev/Namespace detect/data</title>
			<link>https://unimage.wcnm.pw/index.php?title=%E6%A8%A1%E5%9D%97:Dev/Namespace_detect/data&amp;diff=715&amp;oldid=0</link>
			<guid isPermaLink="false">https://unimage.wcnm.pw/index.php?title=%E6%A8%A1%E5%9D%97:Dev/Namespace_detect/data&amp;diff=715&amp;oldid=0</guid>
			<description>&lt;p&gt;从 Fandom Developer Wiki 本地化全局模块，源修订 198201&lt;/p&gt;
&lt;p&gt;&lt;b&gt;新页面&lt;/b&gt;&lt;/p&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( &amp;#039;Module:Namespace detect/config&amp;#039;).exists and require(&amp;#039;Module:Namespace detect/config&amp;#039;) or require(&amp;#039;Module:Dev/Namespace detect/config&amp;#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;
	&amp;#039;main&amp;#039;,&lt;br /&gt;
	&amp;#039;talk&amp;#039;,&lt;br /&gt;
	&amp;#039;other&amp;#039;,&lt;br /&gt;
	&amp;#039;subjectns&amp;#039;,&lt;br /&gt;
	&amp;#039;demospace&amp;#039;,&lt;br /&gt;
	&amp;#039;demopage&amp;#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 == &amp;#039;string&amp;#039; then&lt;br /&gt;
		addKey(t, cfgValue, defaultKey)&lt;br /&gt;
	elseif cfgValueType == &amp;#039;table&amp;#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&amp;#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;
	--   [&amp;#039;&amp;#039;] = {&amp;#039;main&amp;#039;},&lt;br /&gt;
	--   [&amp;#039;wikipedia&amp;#039;] = {&amp;#039;wikipedia&amp;#039;, &amp;#039;project&amp;#039;, &amp;#039;wp&amp;#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[&amp;#039;talk&amp;#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;</description>
			<pubDate>Mon, 31 Aug 2026 12:54:50 GMT</pubDate>
			<dc:creator>WikiAdmin</dc:creator>
			<comments>https://unimage.wcnm.pw/wiki/%E6%A8%A1%E5%9D%97%E8%AE%A8%E8%AE%BA:Dev/Namespace_detect/data</comments>
		</item>
		<item>
			<title>模块:Dev/Namespace detect/config</title>
			<link>https://unimage.wcnm.pw/index.php?title=%E6%A8%A1%E5%9D%97:Dev/Namespace_detect/config&amp;diff=714&amp;oldid=0</link>
			<guid isPermaLink="false">https://unimage.wcnm.pw/index.php?title=%E6%A8%A1%E5%9D%97:Dev/Namespace_detect/config&amp;diff=714&amp;oldid=0</guid>
			<description>&lt;p&gt;从 Fandom Developer Wiki 本地化全局模块，源修订 32183&lt;/p&gt;
&lt;p&gt;&lt;b&gt;新页面&lt;/b&gt;&lt;/p&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&amp;#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&amp;#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 = &amp;#039;parameter name&amp;#039;                                                 --&lt;br /&gt;
--                                                                            --&lt;br /&gt;
-- To add multiple names, you can use this format:                            --&lt;br /&gt;
--                                                                            --&lt;br /&gt;
-- cfg.foo = {&amp;#039;parameter name 1&amp;#039;, &amp;#039;parameter name 2&amp;#039;, &amp;#039;parameter name 3&amp;#039;}     --&lt;br /&gt;
--------------------------------------------------------------------------------&lt;br /&gt;
&lt;br /&gt;
---- This parameter displays content for the main namespace:&lt;br /&gt;
-- cfg.main = &amp;#039;main&amp;#039;&lt;br /&gt;
&lt;br /&gt;
---- This parameter displays in talk namespaces:&lt;br /&gt;
-- cfg.talk = &amp;#039;talk&amp;#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 = &amp;#039;other&amp;#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 = &amp;#039;subjectns&amp;#039;&lt;br /&gt;
&lt;br /&gt;
---- This parameter sets a demonstration namespace:&lt;br /&gt;
-- cfg.demospace = &amp;#039;demospace&amp;#039;&lt;br /&gt;
&lt;br /&gt;
---- This parameter sets a specific page to compare:&lt;br /&gt;
cfg.demopage = &amp;#039;page&amp;#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 = &amp;#039;Namespace&amp;#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 = &amp;#039;Aliases&amp;#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&amp;#039;t edit this line.&lt;/div&gt;</description>
			<pubDate>Mon, 31 Aug 2026 12:54:49 GMT</pubDate>
			<dc:creator>WikiAdmin</dc:creator>
			<comments>https://unimage.wcnm.pw/wiki/%E6%A8%A1%E5%9D%97%E8%AE%A8%E8%AE%BA:Dev/Namespace_detect/config</comments>
		</item>
		<item>
			<title>模块:Dev/Namespace detect</title>
			<link>https://unimage.wcnm.pw/index.php?title=%E6%A8%A1%E5%9D%97:Dev/Namespace_detect&amp;diff=713&amp;oldid=0</link>
			<guid isPermaLink="false">https://unimage.wcnm.pw/index.php?title=%E6%A8%A1%E5%9D%97:Dev/Namespace_detect&amp;diff=713&amp;oldid=0</guid>
			<description>&lt;p&gt;从 Fandom Developer Wiki 本地化全局模块，源修订 118284&lt;/p&gt;
&lt;p&gt;&lt;b&gt;新页面&lt;/b&gt;&lt;/p&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( &amp;#039;Module:Namespace detect/data&amp;#039;).exists and mw.loadData(&amp;#039;Module:Namespace detect/data&amp;#039;) or mw.loadData(&amp;#039;Module:Dev/Namespace detect/data&amp;#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(&amp;#039;Module:Dev/Yesno&amp;#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 == &amp;#039;&amp;#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 == &amp;#039;&amp;#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 = &amp;#039;talk&amp;#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&amp;#039;t exist.&lt;br /&gt;
		end&lt;br /&gt;
	end&lt;br /&gt;
	ret = ret:gsub(&amp;#039;_&amp;#039;, &amp;#039; &amp;#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 &amp;#039;other&amp;#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(&amp;#039;Module:Dev/Arguments&amp;#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 &amp;#039;&amp;#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(&amp;#039;Module:Dev/TableTools&amp;#039;)&lt;br /&gt;
	local namespaces = mw.site.namespaces&lt;br /&gt;
	local cfg = data.cfg&lt;br /&gt;
	local useTalk = type(frame) == &amp;#039;table&amp;#039; &lt;br /&gt;
		and type(frame.args) == &amp;#039;table&amp;#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) == &amp;#039;string&amp;#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, &amp;#039;Namespace&amp;#039;)&lt;br /&gt;
	local aliasesHeader = checkValue(cfg.wikitableAliasesHeader, &amp;#039;Aliases&amp;#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 ~= &amp;#039;talk&amp;#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 = &amp;#039;{| class=&amp;quot;wikitable&amp;quot;&amp;#039;&lt;br /&gt;
		.. &amp;#039;\n|-&amp;#039;&lt;br /&gt;
		.. &amp;#039;\n! &amp;#039; .. nsHeader&lt;br /&gt;
		.. &amp;#039;\n! &amp;#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 .. &amp;#039;\n|-&amp;#039;&lt;br /&gt;
					.. &amp;#039;\n| &amp;lt;code&amp;gt;&amp;#039; .. param .. &amp;#039;&amp;lt;/code&amp;gt;&amp;#039;&lt;br /&gt;
					.. &amp;#039;\n| &amp;#039;&lt;br /&gt;
			elseif j == 2 then&lt;br /&gt;
				ret = ret .. &amp;#039;&amp;lt;code&amp;gt;&amp;#039; .. param .. &amp;#039;&amp;lt;/code&amp;gt;&amp;#039;&lt;br /&gt;
			else&lt;br /&gt;
				ret = ret .. &amp;#039;, &amp;lt;code&amp;gt;&amp;#039; .. param .. &amp;#039;&amp;lt;/code&amp;gt;&amp;#039;&lt;br /&gt;
			end&lt;br /&gt;
		end&lt;br /&gt;
	end&lt;br /&gt;
	ret = ret .. &amp;#039;\n|-&amp;#039;&lt;br /&gt;
		.. &amp;#039;\n|}&amp;#039;&lt;br /&gt;
	return ret&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
return p&lt;/div&gt;</description>
			<pubDate>Mon, 31 Aug 2026 12:54:48 GMT</pubDate>
			<dc:creator>WikiAdmin</dc:creator>
			<comments>https://unimage.wcnm.pw/wiki/%E6%A8%A1%E5%9D%97%E8%AE%A8%E8%AE%BA:Dev/Namespace_detect</comments>
		</item>
		<item>
			<title>模块:Dev/Mbox/i18n</title>
			<link>https://unimage.wcnm.pw/index.php?title=%E6%A8%A1%E5%9D%97:Dev/Mbox/i18n&amp;diff=712&amp;oldid=0</link>
			<guid isPermaLink="false">https://unimage.wcnm.pw/index.php?title=%E6%A8%A1%E5%9D%97:Dev/Mbox/i18n&amp;diff=712&amp;oldid=0</guid>
			<description>&lt;p&gt;从 Fandom Developer Wiki 本地化全局模块，源修订 191139&lt;/p&gt;
&lt;p&gt;&lt;b&gt;新页面&lt;/b&gt;&lt;/p&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;</description>
			<pubDate>Mon, 31 Aug 2026 12:54:47 GMT</pubDate>
			<dc:creator>WikiAdmin</dc:creator>
			<comments>https://unimage.wcnm.pw/wiki/%E6%A8%A1%E5%9D%97%E8%AE%A8%E8%AE%BA:Dev/Mbox/i18n</comments>
		</item>
		<item>
			<title>模块:Dev/Mbox</title>
			<link>https://unimage.wcnm.pw/index.php?title=%E6%A8%A1%E5%9D%97:Dev/Mbox&amp;diff=711&amp;oldid=0</link>
			<guid isPermaLink="false">https://unimage.wcnm.pw/index.php?title=%E6%A8%A1%E5%9D%97:Dev/Mbox&amp;diff=711&amp;oldid=0</guid>
			<description>&lt;p&gt;从 Fandom Developer Wiki 本地化全局模块，源修订 210980&lt;/p&gt;
&lt;p&gt;&lt;b&gt;新页面&lt;/b&gt;&lt;/p&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(&amp;#039;Module:Dev/Arguments&amp;#039;).getArgs&lt;br /&gt;
local i18n = require(&amp;#039;Module:Dev/I18n&amp;#039;).loadMessages(&amp;#039;Mbox&amp;#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[&amp;#039;border-left-color&amp;#039;] = i18n:parameter(&amp;#039;bordercolor&amp;#039;, args)&lt;br /&gt;
    styles[&amp;#039;background-color&amp;#039;] = i18n:parameter(&amp;#039;bgcolor&amp;#039;, args)&lt;br /&gt;
&lt;br /&gt;
    -- images&lt;br /&gt;
    local image = i18n:parameter(&amp;#039;image&amp;#039;, args) or &amp;#039;&amp;#039;&lt;br /&gt;
    local imageadjust = &amp;#039;&amp;#039;&lt;br /&gt;
    if args.imageadjust then&lt;br /&gt;
        imageadjust = &amp;#039;|&amp;#039; .. args.imageadjust&lt;br /&gt;
    end&lt;br /&gt;
    local imagewidth = i18n:parameter(&amp;#039;imagewidth&amp;#039;, args) or &amp;#039;80px&amp;#039;&lt;br /&gt;
    local imagelink = &amp;#039;|link=&amp;#039;&lt;br /&gt;
    local imagelinkarg = i18n:parameter(&amp;#039;imagelink&amp;#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 = &amp;#039;[[File:&amp;#039; .. image .. &amp;#039;|&amp;#039; .. imagewidth  .. imageadjust .. imagelink .. &amp;#039;]]&amp;#039;&lt;br /&gt;
&lt;br /&gt;
    -- id for closure&lt;br /&gt;
    local id = i18n:parameter(&amp;#039;id&amp;#039;, args) or &amp;#039;mbox&amp;#039;&lt;br /&gt;
    local typeclass = i18n:parameter(&amp;#039;type&amp;#039;, args)&lt;br /&gt;
&lt;br /&gt;
    local container = mw.html.create(&amp;#039;div&amp;#039;)&lt;br /&gt;
        :addClass(&amp;#039;mbox&amp;#039;)&lt;br /&gt;
        :addClass(typeclass and (&amp;#039;mbox-type-&amp;#039; .. typeclass))&lt;br /&gt;
        :addClass(i18n:parameter(&amp;#039;class&amp;#039;, args))&lt;br /&gt;
        :css(styles)&lt;br /&gt;
        :cssText(i18n:parameter(&amp;#039;style&amp;#039;, args))&lt;br /&gt;
&lt;br /&gt;
    local content = container:tag(&amp;#039;div&amp;#039;)&lt;br /&gt;
        :addClass(&amp;#039;mbox__content&amp;#039;)&lt;br /&gt;
    local collapsed = i18n:parameter(&amp;#039;collapsed&amp;#039;, args)&lt;br /&gt;
&lt;br /&gt;
    if image ~= &amp;#039;&amp;#039; then&lt;br /&gt;
        local image = content:tag(&amp;#039;div&amp;#039;)&lt;br /&gt;
            :addClass(&amp;#039;mbox__content__image&amp;#039;)&lt;br /&gt;
            :addClass(&amp;#039;mw-collapsible&amp;#039;)&lt;br /&gt;
            :attr(&amp;#039;id&amp;#039;, &amp;#039;mw-customcollapsible-&amp;#039; .. id)&lt;br /&gt;
            :wikitext(imagewikitext)&lt;br /&gt;
            if collapsed then&lt;br /&gt;
                image:addClass(&amp;#039;mw-collapsed&amp;#039;)&lt;br /&gt;
            end&lt;br /&gt;
    end&lt;br /&gt;
&lt;br /&gt;
    local contentwrapper = content:tag(&amp;#039;div&amp;#039;)&lt;br /&gt;
        :addClass(&amp;#039;mbox__content__wrapper&amp;#039;)&lt;br /&gt;
    local header = i18n:parameter(&amp;#039;header&amp;#039;, args)&lt;br /&gt;
&lt;br /&gt;
    if header then&lt;br /&gt;
        contentwrapper:tag(&amp;#039;div&amp;#039;)&lt;br /&gt;
            :addClass(&amp;#039;mbox__content__header&amp;#039;)&lt;br /&gt;
            :wikitext(header)&lt;br /&gt;
    end&lt;br /&gt;
&lt;br /&gt;
    local textarg = i18n:parameter(&amp;#039;text&amp;#039;, args)&lt;br /&gt;
    if textarg then&lt;br /&gt;
        local text = contentwrapper:tag(&amp;#039;div&amp;#039;)&lt;br /&gt;
            :addClass(&amp;#039;mbox__content__text&amp;#039;)&lt;br /&gt;
            :addClass(&amp;#039;mw-collapsible&amp;#039;)&lt;br /&gt;
            :attr(&amp;#039;id&amp;#039;, &amp;#039;mw-customcollapsible-&amp;#039; .. id)&lt;br /&gt;
            :wikitext(textarg)&lt;br /&gt;
            if collapsed then&lt;br /&gt;
                text:addClass(&amp;#039;mw-collapsed&amp;#039;)&lt;br /&gt;
            end&lt;br /&gt;
&lt;br /&gt;
        local comment = i18n:parameter(&amp;#039;comment&amp;#039;, args)&lt;br /&gt;
        if comment then&lt;br /&gt;
            text:tag(&amp;#039;div&amp;#039;)&lt;br /&gt;
                :addClass(&amp;#039;mbox__content__text__comment&amp;#039;)&lt;br /&gt;
                :wikitext(comment)&lt;br /&gt;
        end&lt;br /&gt;
    end&lt;br /&gt;
&lt;br /&gt;
    contentwrapper:tag(&amp;#039;span&amp;#039;)&lt;br /&gt;
        :addClass(&amp;#039;mbox__close&amp;#039;)&lt;br /&gt;
        :addClass(&amp;#039;mw-customtoggle-&amp;#039; .. id)&lt;br /&gt;
        :attr(&amp;#039;title&amp;#039;, i18n:msg(&amp;#039;dismiss&amp;#039;))&lt;br /&gt;
&lt;br /&gt;
    local asidearg = i18n:parameter(&amp;#039;aside&amp;#039;, args)&lt;br /&gt;
    if asidearg then&lt;br /&gt;
        local aside = content:tag(&amp;#039;div&amp;#039;)&lt;br /&gt;
            :addClass(&amp;#039;mbox__content__aside&amp;#039;)&lt;br /&gt;
            :addClass(&amp;#039;mw-collapsible&amp;#039;)&lt;br /&gt;
            :attr(&amp;#039;id&amp;#039;, &amp;#039;mw-customcollapsible-&amp;#039; .. id)&lt;br /&gt;
            :wikitext(asidearg)&lt;br /&gt;
            if collapsed then&lt;br /&gt;
                aside:addClass(&amp;#039;mw-collapsed&amp;#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;</description>
			<pubDate>Mon, 31 Aug 2026 12:54:46 GMT</pubDate>
			<dc:creator>WikiAdmin</dc:creator>
			<comments>https://unimage.wcnm.pw/wiki/%E6%A8%A1%E5%9D%97%E8%AE%A8%E8%AE%BA:Dev/Mbox</comments>
		</item>
		<item>
			<title>模块:Dev/I18n</title>
			<link>https://unimage.wcnm.pw/index.php?title=%E6%A8%A1%E5%9D%97:Dev/I18n&amp;diff=710&amp;oldid=0</link>
			<guid isPermaLink="false">https://unimage.wcnm.pw/index.php?title=%E6%A8%A1%E5%9D%97:Dev/I18n&amp;diff=710&amp;oldid=0</guid>
			<description>&lt;p&gt;从 Fandom Developer Wiki 本地化全局模块，源修订 213110&lt;/p&gt;
&lt;p&gt;&lt;b&gt;新页面&lt;/b&gt;&lt;/p&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(&amp;#039;Module:Dev/Fallbacklist&amp;#039;)&lt;br /&gt;
local entrypoint = require(&amp;#039;Module:Dev/Entrypoint&amp;#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, &amp;#039;%$&amp;#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) == &amp;#039;string&amp;#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) == &amp;#039;string&amp;#039; and&lt;br /&gt;
        (&lt;br /&gt;
            msg:find(&amp;#039;%-%-%-%-&amp;#039;) or&lt;br /&gt;
            msg:find(&amp;#039;%f[^\n%z][;:*#] &amp;#039;) or&lt;br /&gt;
            msg:find(&amp;#039;%f[^\n%z]==* *[^\n|]+ =*=%f[\n]&amp;#039;) or&lt;br /&gt;
            msg:find(&amp;#039;%b&amp;lt;&amp;gt;&amp;#039;) or msg:find(&amp;#039;\&amp;#039;\&amp;#039;&amp;#039;) or&lt;br /&gt;
            msg:find(&amp;#039;%[%b[]%]&amp;#039;) or msg:find(&amp;#039;{%b{}}&amp;#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 = &amp;#039;message-name&amp;#039;,&lt;br /&gt;
--          lang = &amp;#039;&amp;#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(&amp;#039;message-name&amp;#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} &amp;#039;missing arguments in Data:msg&amp;#039;&lt;br /&gt;
--  @return             {string} Localised datastore message or `&amp;#039;&amp;lt;key&amp;gt;&amp;#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(&amp;#039;missing arguments in Data:msg&amp;#039;)&lt;br /&gt;
    end&lt;br /&gt;
    local key = type(opts) == &amp;#039;table&amp;#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: &amp;#039;languageConverterMarkup&amp;#039;, &amp;#039;pageSourceCodeLanguage&amp;#039;,&lt;br /&gt;
    --   &amp;#039;siteLanguage&amp;#039;, &amp;#039;userLanguage&amp;#039;&lt;br /&gt;
    -- Note: Currently cannot handle page view language without using&lt;br /&gt;
    --   &amp;#039;languageConverterMarkup&amp;#039;, should use &amp;#039;userLanguage&amp;#039; in most cases if&lt;br /&gt;
    --   not able to use &amp;#039;languageConverterMarkup&amp;#039;.&lt;br /&gt;
    local languageConversionType = self.tempLanguageConversionType or&lt;br /&gt;
    	&amp;#039;languageConverterMarkup&amp;#039;&lt;br /&gt;
    self.tempLangConversionType = &amp;#039;languageConverterMarkup&amp;#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 == &amp;#039;zh&amp;#039; and&lt;br /&gt;
        	languageConversionType ~= &amp;#039;pageSourceCodeLanguage&amp;#039; and&lt;br /&gt;
        	languageConversionType ~= &amp;#039;siteLanguage&amp;#039; and&lt;br /&gt;
        	-- Lua error: too many expensive function calls.&lt;br /&gt;
        	-- (&lt;br /&gt;
        	--	mw.title.getCurrentTitle().pageLang:toBcp47Code() == &amp;#039;zh&amp;#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() == &amp;#039;zh&amp;#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[&amp;#039;zh&amp;#039;] or {})[key]&lt;br /&gt;
        	local zh_hans = (messages[&amp;#039;zh-hans&amp;#039;] or {})[key]&lt;br /&gt;
        	local zh_hant = (messages[&amp;#039;zh-hant&amp;#039;] or {})[key]&lt;br /&gt;
        	local zh_hant_hk = (messages[&amp;#039;zh-hk&amp;#039;] or {})[key]&lt;br /&gt;
&lt;br /&gt;
			if&lt;br /&gt;
				languageConversionType == &amp;#039;userLanguage&amp;#039;&lt;br /&gt;
			then&lt;br /&gt;
				if userLang == &amp;#039;zh&amp;#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 == &amp;#039;zh-hans&amp;#039; or&lt;br /&gt;
					userLang == &amp;#039;zh-cn&amp;#039; or&lt;br /&gt;
					userLang == &amp;#039;zh-my&amp;#039; or&lt;br /&gt;
					userLang == &amp;#039;zh-sg&amp;#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 == &amp;#039;zh-hant&amp;#039; or&lt;br /&gt;
					userLang == &amp;#039;zh-tw&amp;#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 == &amp;#039;zh-hk&amp;#039; or&lt;br /&gt;
					userLang == &amp;#039;zh-mo&amp;#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 = &amp;#039;-{&amp;#039; ..&lt;br /&gt;
    					&amp;#039;zh-hans:&amp;#039; .. zh_hans .. &amp;#039;;&amp;#039; ..&lt;br /&gt;
    					&amp;#039; zh-hant:&amp;#039; .. zh_hant .. &amp;#039;;&amp;#039;&lt;br /&gt;
&lt;br /&gt;
    				if zh_hant_hk ~= nil then&lt;br /&gt;
    					msg = msg ..&lt;br /&gt;
    						&amp;#039; zh-hk:&amp;#039; .. zh_hant_hk .. &amp;#039;;&amp;#039;&lt;br /&gt;
    				end&lt;br /&gt;
&lt;br /&gt;
    				msg = msg .. &amp;#039;}-&amp;#039;&lt;br /&gt;
        		elseif zh_hant_hk ~= nil then&lt;br /&gt;
        			msg = &amp;#039;-{&amp;#039; ..&lt;br /&gt;
        				&amp;#039;zh-hans:&amp;#039; .. zh_hans .. &amp;#039;;&amp;#039; ..&lt;br /&gt;
        				&amp;#039; zh-hk:&amp;#039; .. zh_hant_hk .. &amp;#039;;&amp;#039; ..&lt;br /&gt;
        				&amp;#039;}-&amp;#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 = &amp;#039;-{&amp;#039; ..&lt;br /&gt;
        				&amp;#039;zh-hant:&amp;#039; .. zh_hant .. &amp;#039;;&amp;#039; ..&lt;br /&gt;
        				&amp;#039; zh-hk:&amp;#039; .. zh_hant_hk .. &amp;#039;;&amp;#039; ..&lt;br /&gt;
        				&amp;#039;}-&amp;#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 &amp;#039;en&amp;#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 ~= &amp;#039;qqx&amp;#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, &amp;#039;\r\n\f\v&amp;#039;)&lt;br /&gt;
        end&lt;br /&gt;
    end&lt;br /&gt;
    return mw.text.nowiki(&amp;#039;&amp;lt;&amp;#039; .. key .. &amp;#039;&amp;gt;&amp;#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&amp;#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&amp;#039;s content language.&lt;br /&gt;
--  @function           Data:parameter&lt;br /&gt;
--  @param              {string} parameter Parameter&amp;#039;s key in the datastore&lt;br /&gt;
--  @param              {table} args Arguments to find the parameter in&lt;br /&gt;
--  @error[176]         {string} &amp;#039;missing arguments in Data:parameter&amp;#039;&lt;br /&gt;
--  @return             {string|nil} Parameter&amp;#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(&amp;#039;missing arguments in Data:parameter&amp;#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(&amp;#039;#&amp;#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) == &amp;#039;string&amp;#039; and type(self._sources[n]) == &amp;#039;number&amp;#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&amp;#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]         &amp;#039;missing arguments in i18n.getMsg&amp;#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(&amp;#039;missing arguments in i18n.getMsg&amp;#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} &amp;#039;no source supplied to i18n.loadMessages&amp;#039;&lt;br /&gt;
--  @return             {table} I18n datastore instance.&lt;br /&gt;
--  @usage              require(&amp;#039;Module:Dev/I18n&amp;#039;).loadMessages(&amp;#039;1&amp;#039;, &amp;#039;2&amp;#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(&amp;#039;#&amp;#039;, ...) do&lt;br /&gt;
        local source = select(j, ...)&lt;br /&gt;
        if type(source) == &amp;#039;string&amp;#039; and source ~= &amp;#039;&amp;#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, &amp;#039;^.&amp;#039;, mw.ustring.upper)&lt;br /&gt;
            source = mw.ustring.find(source, &amp;#039;:&amp;#039;)&lt;br /&gt;
                and source&lt;br /&gt;
                or  &amp;#039;Module:Dev/&amp;#039; .. source .. &amp;#039;/i18n&amp;#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(&amp;#039;no source supplied to i18n.loadMessages&amp;#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&amp;#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(&amp;#039;{{int:lang}}&amp;#039;)&lt;br /&gt;
                or  frame:preprocess(&amp;#039;{{int:lang}}&amp;#039;)&lt;br /&gt;
        local decodedLang = mw.text.decode(uselang) &lt;br /&gt;
        if decodedLang ~= &amp;#039;&amp;lt;lang&amp;gt;&amp;#039; and decodedLang ~= &amp;#039;⧼lang⧽&amp;#039; then&lt;br /&gt;
            code = decodedLang == &amp;#039;(lang)&amp;#039;&lt;br /&gt;
                and &amp;#039;qqx&amp;#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;</description>
			<pubDate>Mon, 31 Aug 2026 12:54:45 GMT</pubDate>
			<dc:creator>WikiAdmin</dc:creator>
			<comments>https://unimage.wcnm.pw/wiki/%E6%A8%A1%E5%9D%97%E8%AE%A8%E8%AE%BA:Dev/I18n</comments>
		</item>
		<item>
			<title>模块:Dev/Hatnote/i18n</title>
			<link>https://unimage.wcnm.pw/index.php?title=%E6%A8%A1%E5%9D%97:Dev/Hatnote/i18n&amp;diff=709&amp;oldid=0</link>
			<guid isPermaLink="false">https://unimage.wcnm.pw/index.php?title=%E6%A8%A1%E5%9D%97:Dev/Hatnote/i18n&amp;diff=709&amp;oldid=0</guid>
			<description>&lt;p&gt;从 Fandom Developer Wiki 本地化全局模块，源修订 214552&lt;/p&gt;
&lt;a href=&quot;https://unimage.wcnm.pw/index.php?title=%E6%A8%A1%E5%9D%97:Dev/Hatnote/i18n&amp;amp;diff=709&quot;&gt;显示更改&lt;/a&gt;</description>
			<pubDate>Mon, 31 Aug 2026 12:54:43 GMT</pubDate>
			<dc:creator>WikiAdmin</dc:creator>
			<comments>https://unimage.wcnm.pw/wiki/%E6%A8%A1%E5%9D%97%E8%AE%A8%E8%AE%BA:Dev/Hatnote/i18n</comments>
		</item>
		<item>
			<title>模块:Dev/Hatnote</title>
			<link>https://unimage.wcnm.pw/index.php?title=%E6%A8%A1%E5%9D%97:Dev/Hatnote&amp;diff=708&amp;oldid=0</link>
			<guid isPermaLink="false">https://unimage.wcnm.pw/index.php?title=%E6%A8%A1%E5%9D%97:Dev/Hatnote&amp;diff=708&amp;oldid=0</guid>
			<description>&lt;p&gt;从 Fandom Developer Wiki 本地化全局模块，源修订 214904&lt;/p&gt;
&lt;p&gt;&lt;b&gt;新页面&lt;/b&gt;&lt;/p&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(&amp;#039;libraryUtil&amp;#039;)&lt;br /&gt;
local checkType = libraryUtil.checkType&lt;br /&gt;
local mArguments = require(&amp;#039;Module:Dev/Arguments&amp;#039;)&lt;br /&gt;
local yesno = require(&amp;#039;Module:Dev/Yesno&amp;#039;)&lt;br /&gt;
local mTableTools = require(&amp;#039;Module:Dev/TableTools&amp;#039;)&lt;br /&gt;
local i18n = require(&amp;#039;Module:Dev/I18n&amp;#039;).loadMessages(&amp;#039;Hatnote&amp;#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(&amp;#039;^:?(.*)&amp;#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(&amp;#039;findNamespaceId&amp;#039;, 1, link, &amp;#039;string&amp;#039;)&lt;br /&gt;
    checkType(&amp;#039;findNamespaceId&amp;#039;, 2, removeColon, &amp;#039;boolean&amp;#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(&amp;#039;^(.-):&amp;#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 {{-&amp;#039;}}&lt;br /&gt;
	local quotationMarks = {&lt;br /&gt;
		[&amp;quot;&amp;#039;&amp;quot;]=true, [&amp;#039;&amp;quot;&amp;#039;]=true, [&amp;#039;“&amp;#039;]=true, [&amp;quot;‘&amp;quot;]=true, [&amp;#039;”&amp;#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 &amp;#039;&amp;quot;&amp;#039; .. tostring(title) .. &amp;#039;&amp;quot;&amp;#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(&amp;#039;formatPageTables&amp;#039;, i, t, &amp;#039;table&amp;#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(&amp;#039;makeWikitextError&amp;#039;, 1, msg, &amp;#039;string&amp;#039;)&lt;br /&gt;
    checkType(&amp;#039;makeWikitextError&amp;#039;, 2, helpLink, &amp;#039;string&amp;#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 = &amp;#039; ([[&amp;#039; .. helpLink .. &amp;#039;|&amp;#039; .. i18n:msg(&amp;#039;help&amp;#039;) .. &amp;#039;]])&amp;#039;&lt;br /&gt;
    else&lt;br /&gt;
        helpText = &amp;#039;&amp;#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(&amp;#039;siteLanguage&amp;#039;):msg(&amp;#039;cat-errors&amp;#039;)&lt;br /&gt;
        category = string.format(&lt;br /&gt;
            &amp;#039;[[%s:%s]]&amp;#039;,&lt;br /&gt;
            mw.site.namespaces[14].name,&lt;br /&gt;
            category&lt;br /&gt;
        )&lt;br /&gt;
    else&lt;br /&gt;
        category = &amp;#039;&amp;#039;&lt;br /&gt;
    end&lt;br /&gt;
    -- string.format doesn&amp;#039;t support positional specifiers&lt;br /&gt;
    return string.format(&lt;br /&gt;
        i18n:useLanguageConversionType(&amp;#039;userLanguage&amp;#039;):msg(&amp;#039;error&amp;#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(&amp;#039;disambiguate&amp;#039;, 1, page, &amp;#039;string&amp;#039;)&lt;br /&gt;
    checkType(&amp;#039;disambiguate&amp;#039;, 2, disambiguator, &amp;#039;string&amp;#039;, true)&lt;br /&gt;
    disambiguator = disambiguator or i18n:msg(&amp;#039;disambiguation&amp;#039;)&lt;br /&gt;
    -- string.format doesn&amp;#039;t support positional specifiers&lt;br /&gt;
    return string.format(i18n:useLanguageConversionType(&amp;#039;userLanguage&amp;#039;):msg(&amp;#039;brackets&amp;#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(&amp;#039;error-link&amp;#039;),&lt;br /&gt;
            &amp;#039;w:c:dev:Template:Format link#Errors&amp;#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(&amp;#039;_formatLink&amp;#039;, 1, link, &amp;#039;string&amp;#039;)&lt;br /&gt;
    checkType(&amp;#039;_formatLink&amp;#039;, 2, display, &amp;#039;string&amp;#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(&amp;#039;^(.-)|(.*)$&amp;#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(&amp;#039;^(.-)#(.*)$&amp;#039;)&lt;br /&gt;
        if page then&lt;br /&gt;
            display = page .. &amp;#039; §&amp;amp;nbsp;&amp;#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;
            &amp;#039;[[:%s|%s]]&amp;#039;,&lt;br /&gt;
            string.gsub(link, &amp;#039;|(.*)$&amp;#039;, &amp;#039;&amp;#039;), -- display overwrites manual piping&lt;br /&gt;
            display&lt;br /&gt;
        )&lt;br /&gt;
    else&lt;br /&gt;
        return string.format(&amp;#039;[[:%s]]&amp;#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(&amp;#039;error-text&amp;#039;),&lt;br /&gt;
            &amp;#039;w:c:dev:Template:Hatnote#Errors&amp;#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(&amp;#039;_hatnote&amp;#039;, 1, s, &amp;#039;string&amp;#039;)&lt;br /&gt;
    checkType(&amp;#039;_hatnote&amp;#039;, 2, options, &amp;#039;table&amp;#039;, true)&lt;br /&gt;
    options = options or {}&lt;br /&gt;
    local classes = {&amp;#039;notice&amp;#039;, &amp;#039;hatnote&amp;#039;}&lt;br /&gt;
    local extraclasses = options.extraclasses&lt;br /&gt;
    local selfref = options.selfref&lt;br /&gt;
    if type(extraclasses) == &amp;#039;string&amp;#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] = &amp;#039;selfref&amp;#039;&lt;br /&gt;
    end&lt;br /&gt;
    return string.format(&lt;br /&gt;
        &amp;#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;&amp;#039;,&lt;br /&gt;
        table.concat(classes, &amp;#039; &amp;#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(&amp;#039;conjunction&amp;#039;),&lt;br /&gt;
    separator = i18n:msg(&amp;#039;separator&amp;#039;),&lt;br /&gt;
    altSeparator = i18n:msg(&amp;#039;altSeparator&amp;#039;),&lt;br /&gt;
    space = i18n:msg(&amp;#039;space&amp;#039;),&lt;br /&gt;
    formatted = false&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
-- Stringifies a list generically; probably shouldn&amp;#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, &amp;#039;|&amp;#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;
        [&amp;#039;en&amp;#039;] = true,&lt;br /&gt;
        [&amp;#039;en-us&amp;#039;] = true,&lt;br /&gt;
        [&amp;#039;en-gb&amp;#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 &amp;#039;&amp;#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(&amp;#039;conj-and&amp;#039;), ...) end&lt;br /&gt;
function hatnote.orList (...) return conjList(i18n:msg(&amp;#039;conj-or&amp;#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(&amp;#039;conj-and&amp;#039;),&lt;br /&gt;
    title = mw.title.getCurrentTitle().text,&lt;br /&gt;
    otherText = i18n:msg(&amp;#039;other-uses&amp;#039;),&lt;br /&gt;
    -- string.format doesn&amp;#039;t support positional specifiers&lt;br /&gt;
    forSeeForm = i18n:useLanguageConversionType(&amp;#039;userLanguage&amp;#039;):msg(&amp;#039;for&amp;#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, &amp;#039;table&amp;#039;)&lt;br /&gt;
    checkType(&amp;quot;forSeeArgsToTable&amp;quot;, 2, from, &amp;#039;number&amp;#039;, true)&lt;br /&gt;
    from = from or 1&lt;br /&gt;
    checkType(&amp;quot;forSeeArgsToTable&amp;quot;, 3, options, &amp;#039;table&amp;#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&amp;#039;s gotten manually because getArgs() and table.maxn aren&amp;#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) == &amp;#039;number&amp;#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&amp;#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;&amp;#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(&amp;#039;space&amp;#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(&amp;#039;see-also&amp;#039;), --Final fallback for label argument&lt;br /&gt;
    labelForm = i18n:msg(&amp;#039;colon&amp;#039;),&lt;br /&gt;
    prefixes = {&amp;#039;label&amp;#039;, &amp;#039;label &amp;#039;, &amp;#039;l&amp;#039;},&lt;br /&gt;
    template = &amp;#039;Module:Hatnote&amp;#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. &amp;#039;label1&amp;#039;, &amp;#039;label 1&amp;#039;, &amp;amp; &amp;#039;l1&amp;#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) == &amp;#039;number&amp;#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(&amp;#039;%s|%s&amp;#039;, string.gsub(v, &amp;#039;|.*$&amp;#039;, &amp;#039;&amp;#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(&amp;#039;error-pagename&amp;#039;, 2),&lt;br /&gt;
            (options.template or LPLHdefaults.template) .. &amp;#039;#Errors&amp;#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(&amp;#039;_about&amp;#039;, 1, args, &amp;#039;table&amp;#039;, true)&lt;br /&gt;
    args = args or {}&lt;br /&gt;
    checkType(&amp;#039;_about&amp;#039;, 2, options, &amp;#039;table&amp;#039;, true)&lt;br /&gt;
    options = options or {}&lt;br /&gt;
    local defaultOptions = {&lt;br /&gt;
    	-- string.format doesn&amp;#039;t support positional specifiers&lt;br /&gt;
        aboutForm = i18n:useLanguageConversionType(&amp;#039;userLanguage&amp;#039;):msg(&amp;#039;about&amp;#039;, mw.title.getCurrentTitle().namespace),&lt;br /&gt;
        defaultPageType = i18n:msg(&amp;#039;page&amp;#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(&amp;#039;pagetype-0&amp;#039;),&lt;br /&gt;
            [14] = i18n:msg(&amp;#039;pagetype-14&amp;#039;)&lt;br /&gt;
        },&lt;br /&gt;
        sectionString = i18n:msg(&amp;#039;section&amp;#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 = &amp;#039;&amp;#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(&amp;#039;space&amp;#039;) .. hatnote._forSee(args, 2, fsOptions)&lt;br /&gt;
&lt;br /&gt;
    -- Concatenate and return&lt;br /&gt;
    return hatnote._hatnote(about .. forSee, {extraclasses = &amp;#039;context-link about dablink&amp;#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 = &amp;#039;context-link details dablink&amp;#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(&amp;#039;error-pagename&amp;#039;),&lt;br /&gt;
            &amp;#039;w:c:dev:Template:Details#Errors&amp;#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(&amp;#039;topic&amp;#039;)&lt;br /&gt;
    -- string.format doesn&amp;#039;t support positional specifiers&lt;br /&gt;
    local text = string.format(i18n:useLanguageConversionType(&amp;#039;userLanguage&amp;#039;):msg(&amp;#039;details&amp;#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 = &amp;#039;&amp;#039;&lt;br /&gt;
    if&lt;br /&gt;
        (not use or use == i18n:msg(&amp;#039;other-uses&amp;#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 = &amp;#039;[[Category:&amp;#039; .. i18n:useLanguageConversionType(&amp;#039;siteLanguage&amp;#039;):msg(&amp;#039;cat-unusual-parameters&amp;#039;) .. &amp;#039;]]&amp;#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(&amp;#039;error-pagename&amp;#039;, 2),&lt;br /&gt;
            &amp;#039;w:c:dev:Template:Further#Errors&amp;#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 = &amp;#039;context-link further dablink&amp;#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(&amp;#039;further2&amp;#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) == &amp;#039;number&amp;#039; then&lt;br /&gt;
            local display = args[&amp;#039;label &amp;#039; .. k] or args[&amp;#039;l&amp;#039; .. k]&lt;br /&gt;
            local page = display and&lt;br /&gt;
                string.format(&amp;#039;%s|%s&amp;#039;, string.gsub(v, &amp;#039;|.*$&amp;#039;, &amp;#039;&amp;#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(&amp;#039;error-pagename&amp;#039;, 2),&lt;br /&gt;
            &amp;#039;w:c:dev:Template:Main#Errors&amp;#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], &amp;#039;|.*$&amp;#039;, &amp;#039;&amp;#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(&amp;#039;article&amp;#039;, pageCount) or i18n:msg(&amp;#039;page&amp;#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&amp;#039;t support positional specifiers&lt;br /&gt;
        mainForm = i18n:useLanguageConversionType(&amp;#039;userLanguage&amp;#039;):msg(&amp;#039;main-category&amp;#039;, pageCount, pageType, list)&lt;br /&gt;
    else&lt;br /&gt;
        -- string.format doesn&amp;#039;t support positional specifiers&lt;br /&gt;
        mainForm = i18n:useLanguageConversionType(&amp;#039;userLanguage&amp;#039;):msg(&amp;#039;main&amp;#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 = &amp;#039;context-link main dablink&amp;#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) == &amp;#039;number&amp;#039; then&lt;br /&gt;
            local display = args[&amp;#039;label &amp;#039; .. k] or args[&amp;#039;l&amp;#039; .. k]&lt;br /&gt;
            local page = display and&lt;br /&gt;
                string.format(&amp;#039;%s|%s&amp;#039;, string.gsub(v, &amp;#039;|.*$&amp;#039;, &amp;#039;&amp;#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(&amp;#039;error-pagename&amp;#039;, 2),&lt;br /&gt;
            &amp;#039;w:c:dev:Template:See also#Errors&amp;#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(&amp;#039;_seeAlso&amp;#039;, 1, args, &amp;#039;table&amp;#039;)&lt;br /&gt;
    checkType(&amp;#039;_seeAlso&amp;#039;, 2, options, &amp;#039;table&amp;#039;, true)&lt;br /&gt;
    options = options or {}&lt;br /&gt;
    local list = hatnote.andList(args, true)&lt;br /&gt;
    -- string.format doesn&amp;#039;t support positional specifiers&lt;br /&gt;
    local text = string.format(i18n:useLanguageConversionType(&amp;#039;userLanguage&amp;#039;):msg(&amp;#039;see-also2&amp;#039;), list)&lt;br /&gt;
    -- Pass options through.&lt;br /&gt;
    local hnOptions = {&lt;br /&gt;
        selfref = options.selfref,&lt;br /&gt;
        extraclasses = &amp;#039;context-link seealso dablink&amp;#039;&lt;br /&gt;
    }&lt;br /&gt;
    return hatnote._hatnote(text, hnOptions)&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
hatnote[&amp;#039;for&amp;#039;] = hatnote.For&lt;br /&gt;
&lt;br /&gt;
return hatnote&lt;/div&gt;</description>
			<pubDate>Mon, 31 Aug 2026 12:54:42 GMT</pubDate>
			<dc:creator>WikiAdmin</dc:creator>
			<comments>https://unimage.wcnm.pw/wiki/%E6%A8%A1%E5%9D%97%E8%AE%A8%E8%AE%BA:Dev/Hatnote</comments>
		</item>
		<item>
			<title>模块:Dev/Fallbacklist</title>
			<link>https://unimage.wcnm.pw/index.php?title=%E6%A8%A1%E5%9D%97:Dev/Fallbacklist&amp;diff=707&amp;oldid=0</link>
			<guid isPermaLink="false">https://unimage.wcnm.pw/index.php?title=%E6%A8%A1%E5%9D%97:Dev/Fallbacklist&amp;diff=707&amp;oldid=0</guid>
			<description>&lt;p&gt;从 Fandom Developer Wiki 本地化全局模块，源修订 205706&lt;/p&gt;
&lt;p&gt;&lt;b&gt;新页面&lt;/b&gt;&lt;/p&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;
    [&amp;#039;crh&amp;#039;]          = {&amp;#039;crh-latn&amp;#039;},&lt;br /&gt;
    [&amp;#039;crh-cyrl&amp;#039;]     = {&amp;#039;crh&amp;#039;, &amp;#039;ru&amp;#039;}, &lt;br /&gt;
    [&amp;#039;crh-latn&amp;#039;]     = {&amp;#039;crh&amp;#039;},&lt;br /&gt;
&lt;br /&gt;
    -- de (German) cluster:&lt;br /&gt;
    [&amp;#039;als&amp;#039;]          = {&amp;#039;gsw&amp;#039;, &amp;#039;de&amp;#039;},                       -- Alemannisch&lt;br /&gt;
    [&amp;#039;bar&amp;#039;]          = {&amp;#039;de&amp;#039;},                              -- Bavarian&lt;br /&gt;
    [&amp;#039;de-at&amp;#039;]        = {&amp;#039;de&amp;#039;},                              -- Austrian German&lt;br /&gt;
    [&amp;#039;de-ch&amp;#039;]        = {&amp;#039;de&amp;#039;},                              -- Swiss High German&lt;br /&gt;
    [&amp;#039;de-formal&amp;#039;]    = {&amp;#039;de&amp;#039;},                              -- German (formal address)&lt;br /&gt;
    [&amp;#039;dsb&amp;#039;]          = {&amp;#039;de&amp;#039;},                              -- Lower Sorbian&lt;br /&gt;
    [&amp;#039;frr&amp;#039;]          = {&amp;#039;de&amp;#039;},                              -- Northern Frisian&lt;br /&gt;
    [&amp;#039;hsb&amp;#039;]          = {&amp;#039;de&amp;#039;},                              -- Upper Sorbian&lt;br /&gt;
    [&amp;#039;ksh&amp;#039;]          = {&amp;#039;de&amp;#039;},                              -- Colognian&lt;br /&gt;
    [&amp;#039;lb&amp;#039;]           = {&amp;#039;de&amp;#039;},                              -- Luxembourgish&lt;br /&gt;
    [&amp;#039;nds&amp;#039;]          = {&amp;#039;nds-nl&amp;#039;, &amp;#039;de&amp;#039;},                    -- Low German&lt;br /&gt;
    [&amp;#039;nds-nl&amp;#039;]       = {&amp;#039;nds&amp;#039;, &amp;#039;nl&amp;#039;},                       -- Low Saxon (Netherlands)&lt;br /&gt;
    [&amp;#039;pdc&amp;#039;]          = {&amp;#039;de&amp;#039;},                              -- Deitsch&lt;br /&gt;
    [&amp;#039;pdt&amp;#039;]          = {&amp;#039;nds&amp;#039;, &amp;#039;de&amp;#039;},                       -- Plautdietsch&lt;br /&gt;
    [&amp;#039;pfl&amp;#039;]          = {&amp;#039;de&amp;#039;},                              -- Pälzisch&lt;br /&gt;
    [&amp;#039;sli&amp;#039;]          = {&amp;#039;de&amp;#039;},                              -- Lower Silesian&lt;br /&gt;
    [&amp;#039;stq&amp;#039;]          = {&amp;#039;de&amp;#039;},                              -- Seeltersk&lt;br /&gt;
    [&amp;#039;vmf&amp;#039;]          = {&amp;#039;de&amp;#039;},                              -- Upper Franconian&lt;br /&gt;
&lt;br /&gt;
    -- es (Spanish) cluster&lt;br /&gt;
    [&amp;#039;an&amp;#039;]           = {&amp;#039;es&amp;#039;},                              -- Aragonese&lt;br /&gt;
    [&amp;#039;arn&amp;#039;]          = {&amp;#039;es&amp;#039;},                              -- Mapuche&lt;br /&gt;
    [&amp;#039;ay&amp;#039;]           = {&amp;#039;es&amp;#039;},                              -- Aymara&lt;br /&gt;
    [&amp;#039;cbk-zam&amp;#039;]      = {&amp;#039;es&amp;#039;},                              -- Chavacano de Zamboanga&lt;br /&gt;
    [&amp;#039;gn&amp;#039;]           = {&amp;#039;es&amp;#039;},                              -- Guarani&lt;br /&gt;
    [&amp;#039;lad&amp;#039;]          = {&amp;#039;es&amp;#039;},                              -- Ladino&lt;br /&gt;
    [&amp;#039;nah&amp;#039;]          = {&amp;#039;es&amp;#039;},                              -- Nahuatl&lt;br /&gt;
    [&amp;#039;qu&amp;#039;]           = {&amp;#039;es&amp;#039;},                              -- Quechua&lt;br /&gt;
    [&amp;#039;qug&amp;#039;]          = {&amp;#039;qu&amp;#039;, &amp;#039;es&amp;#039;},                        -- Runa shimi&lt;br /&gt;
&lt;br /&gt;
    -- et (Estonian) cluster&lt;br /&gt;
    [&amp;#039;liv&amp;#039;]          = {&amp;#039;et&amp;#039;},                              -- Līvõ kēļ&lt;br /&gt;
    [&amp;#039;vep&amp;#039;]          = {&amp;#039;et&amp;#039;},                              -- Veps&lt;br /&gt;
    [&amp;#039;vro&amp;#039;]          = {&amp;#039;et&amp;#039;},                              -- Võro&lt;br /&gt;
    [&amp;#039;fiu-vro&amp;#039;]      = {&amp;#039;vro&amp;#039;, &amp;#039;et&amp;#039;},                       -- Võro&lt;br /&gt;
&lt;br /&gt;
    -- fa (Persian) cluster&lt;br /&gt;
    [&amp;#039;bcc&amp;#039;]          = {&amp;#039;fa&amp;#039;},                              -- Southern Balochi&lt;br /&gt;
    [&amp;#039;bqi&amp;#039;]          = {&amp;#039;fa&amp;#039;},                              -- Bakhtiari&lt;br /&gt;
    [&amp;#039;glk&amp;#039;]          = {&amp;#039;fa&amp;#039;},                              -- Gilaki&lt;br /&gt;
    [&amp;#039;mzn&amp;#039;]          = {&amp;#039;fa&amp;#039;},                              -- Mazandarani&lt;br /&gt;
&lt;br /&gt;
    -- fi (Finnish) cluster:&lt;br /&gt;
    [&amp;#039;fit&amp;#039;]          = {&amp;#039;fi&amp;#039;},                              -- meänkieli&lt;br /&gt;
    [&amp;#039;vot&amp;#039;]          = {&amp;#039;fi&amp;#039;},                              -- Votic&lt;br /&gt;
&lt;br /&gt;
    -- fr (French) cluster:&lt;br /&gt;
    [&amp;#039;bm&amp;#039;]           = {&amp;#039;fr&amp;#039;},                              -- Bambara&lt;br /&gt;
    [&amp;#039;br&amp;#039;]           = {&amp;#039;fr&amp;#039;},                              -- Breton&lt;br /&gt;
    [&amp;#039;co&amp;#039;]           = {&amp;#039;fr&amp;#039;},                              -- Corsican&lt;br /&gt;
    [&amp;#039;ff&amp;#039;]           = {&amp;#039;fr&amp;#039;},                              -- Fulah&lt;br /&gt;
    [&amp;#039;frc&amp;#039;]          = {&amp;#039;fr&amp;#039;},                              -- Cajun French&lt;br /&gt;
    [&amp;#039;frp&amp;#039;]          = {&amp;#039;fr&amp;#039;},                              -- Franco-Provençal&lt;br /&gt;
    [&amp;#039;ht&amp;#039;]           = {&amp;#039;fr&amp;#039;},                              -- Haitian&lt;br /&gt;
    [&amp;#039;ln&amp;#039;]           = {&amp;#039;fr&amp;#039;},                              -- Lingala&lt;br /&gt;
    [&amp;#039;mg&amp;#039;]           = {&amp;#039;fr&amp;#039;},                              -- Malagasy&lt;br /&gt;
    [&amp;#039;pcd&amp;#039;]          = {&amp;#039;fr&amp;#039;},                              -- Picard&lt;br /&gt;
    [&amp;#039;sg&amp;#039;]           = {&amp;#039;fr&amp;#039;},                              -- Sango&lt;br /&gt;
    [&amp;#039;ty&amp;#039;]           = {&amp;#039;fr&amp;#039;},                              -- Tahitian&lt;br /&gt;
    [&amp;#039;wa&amp;#039;]           = {&amp;#039;fr&amp;#039;},                              -- Walloon&lt;br /&gt;
    [&amp;#039;wo&amp;#039;]           = {&amp;#039;fr&amp;#039;},                              -- Wolof&lt;br /&gt;
&lt;br /&gt;
    -- hi (Hindi) cluster&lt;br /&gt;
    [&amp;#039;anp&amp;#039;]          = {&amp;#039;hi&amp;#039;},                              -- Angika&lt;br /&gt;
    [&amp;#039;mai&amp;#039;]          = {&amp;#039;hi&amp;#039;},                              -- Maithili&lt;br /&gt;
    [&amp;#039;sa&amp;#039;]           = {&amp;#039;hi&amp;#039;},                              -- Sanskrit&lt;br /&gt;
&lt;br /&gt;
    -- hif (Fiji Hindi) cluster: hif-deva , hif-latn -&amp;gt; hif (Fiji Hindi)&lt;br /&gt;
    [&amp;#039;hif&amp;#039;]          = {&amp;#039;hif-latn&amp;#039;},&lt;br /&gt;
    [&amp;#039;hif-deva&amp;#039;]     = {&amp;#039;hif&amp;#039;}, &lt;br /&gt;
    [&amp;#039;hif-latn&amp;#039;]     = {&amp;#039;hif&amp;#039;},&lt;br /&gt;
&lt;br /&gt;
    -- id (Indonesian) cluster&lt;br /&gt;
    [&amp;#039;min&amp;#039;]          = {&amp;#039;id&amp;#039;},                              -- Minangkabau&lt;br /&gt;
    [&amp;#039;ace&amp;#039;]          = {&amp;#039;id&amp;#039;},                              -- Achinese&lt;br /&gt;
    [&amp;#039;bug&amp;#039;]          = {&amp;#039;id&amp;#039;},                              -- Buginese&lt;br /&gt;
    [&amp;#039;bjn&amp;#039;]          = {&amp;#039;id&amp;#039;},                              -- Banjar&lt;br /&gt;
    [&amp;#039;jv&amp;#039;]           = {&amp;#039;id&amp;#039;},                              -- Javanese&lt;br /&gt;
    [&amp;#039;su&amp;#039;]           = {&amp;#039;id&amp;#039;},                              -- Sundanese&lt;br /&gt;
    [&amp;#039;map-bms&amp;#039;]      = {&amp;#039;jv&amp;#039;, &amp;#039;id&amp;#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;
    [&amp;#039;ike-cans&amp;#039;]     = {&amp;#039;ik&amp;#039;}, &lt;br /&gt;
    [&amp;#039;ike-latn&amp;#039;]     = {&amp;#039;ik&amp;#039;}, &lt;br /&gt;
&lt;br /&gt;
    -- it (Italian) cluster&lt;br /&gt;
    [&amp;#039;egl&amp;#039;]          = {&amp;#039;it&amp;#039;},                              -- Emiliàn&lt;br /&gt;
    [&amp;#039;eml&amp;#039;]          = {&amp;#039;it&amp;#039;},                              -- Emiliano-Romagnolo&lt;br /&gt;
    [&amp;#039;fur&amp;#039;]          = {&amp;#039;it&amp;#039;},                              -- Friulian&lt;br /&gt;
    [&amp;#039;lij&amp;#039;]          = {&amp;#039;it&amp;#039;},                              -- Ligure&lt;br /&gt;
    [&amp;#039;lmo&amp;#039;]          = {&amp;#039;it&amp;#039;},                              -- lumbaart&lt;br /&gt;
    [&amp;#039;nap&amp;#039;]          = {&amp;#039;it&amp;#039;},                              -- Neapolitan&lt;br /&gt;
    [&amp;#039;pms&amp;#039;]          = {&amp;#039;it&amp;#039;},                              -- Piedmontese&lt;br /&gt;
    [&amp;#039;rgn&amp;#039;]          = {&amp;#039;it&amp;#039;},                              -- Romagnol&lt;br /&gt;
    [&amp;#039;scn&amp;#039;]          = {&amp;#039;it&amp;#039;},                              -- Sicilian&lt;br /&gt;
    [&amp;#039;vec&amp;#039;]          = {&amp;#039;it&amp;#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;
    [&amp;#039;kk&amp;#039;]           = {&amp;#039;kk-cyrl&amp;#039;},                         -- Kazakh&lt;br /&gt;
    [&amp;#039;kk-arab&amp;#039;]      = {&amp;#039;kk-cyrl&amp;#039;, &amp;#039;kk&amp;#039;},                   -- Kazakh (Arabic script)&lt;br /&gt;
    [&amp;#039;kk-cn&amp;#039;]        = {&amp;#039;kk-arab&amp;#039;, &amp;#039;kk-cyrl&amp;#039;, &amp;#039;kk&amp;#039;},        -- Kazakh (China)&lt;br /&gt;
    [&amp;#039;kk-cyrl&amp;#039;]      = {&amp;#039;kk&amp;#039;},                              -- Kazakh (Cyrillic script)&lt;br /&gt;
    [&amp;#039;kk-kz&amp;#039;]        = {&amp;#039;kk&amp;#039;, &amp;#039;kk-cyrl&amp;#039;},                   -- Kazakh (Kazakhstan)&lt;br /&gt;
    [&amp;#039;kk-latn&amp;#039;]      = {&amp;#039;kk-cyrl&amp;#039;, &amp;#039;kk&amp;#039;},                   -- Kazakh (Latin script)&lt;br /&gt;
    [&amp;#039;kk-tr&amp;#039;]        = {&amp;#039;kk-latn&amp;#039;, &amp;#039;kk-cyrl&amp;#039;, &amp;#039;kk&amp;#039;},        -- Kazakh (Turkey)&lt;br /&gt;
    [&amp;#039;kaa&amp;#039;]          = {&amp;#039;kk-latn&amp;#039;, &amp;#039;kk-cyrl&amp;#039;},              -- Kara-Kalpak&lt;br /&gt;
&lt;br /&gt;
    -- ku (Kurdish) cluster: ku-latn , ku-arab -&amp;gt; ku (Kurdish)&lt;br /&gt;
    [&amp;#039;ku&amp;#039;]           = {&amp;#039;ku-latn&amp;#039;},&lt;br /&gt;
    [&amp;#039;ku-arab&amp;#039;]      = {&amp;#039;ckb&amp;#039;, &amp;#039;ckb-arab&amp;#039;, &amp;#039;ku&amp;#039;},           -- كوردي (عەرەبی)&lt;br /&gt;
    [&amp;#039;ku-latn&amp;#039;]      = {&amp;#039;ku&amp;#039;},&lt;br /&gt;
    [&amp;#039;ckb&amp;#039;]          = {&amp;#039;ckb-arab&amp;#039;, &amp;#039;ku&amp;#039;},&lt;br /&gt;
&lt;br /&gt;
    -- nl (Dutch) cluster&lt;br /&gt;
    [&amp;#039;af&amp;#039;]           = {&amp;#039;nl&amp;#039;},                              -- Afrikaans&lt;br /&gt;
    [&amp;#039;fy&amp;#039;]           = {&amp;#039;nl&amp;#039;},                              -- Western Frisian&lt;br /&gt;
    [&amp;#039;li&amp;#039;]           = {&amp;#039;nl&amp;#039;},                              -- Liechtenstein&lt;br /&gt;
    [&amp;#039;nl-informal&amp;#039;]  = {&amp;#039;nl&amp;#039;},                              -- Nederlands (informeel)&lt;br /&gt;
    [&amp;#039;vls&amp;#039;]          = {&amp;#039;nl&amp;#039;},                              -- Vlaams&lt;br /&gt;
    [&amp;#039;zea&amp;#039;]          = {&amp;#039;nl&amp;#039;},                              -- Zeeuws&lt;br /&gt;
&lt;br /&gt;
    --pl (Polish) cluster&lt;br /&gt;
    [&amp;#039;csb&amp;#039;]          = {&amp;#039;pl&amp;#039;},                              -- Kashubian&lt;br /&gt;
    [&amp;#039;szl&amp;#039;]          = {&amp;#039;pl&amp;#039;},                              -- Silesian&lt;br /&gt;
&lt;br /&gt;
    -- pt (Portuguese) cluster&lt;br /&gt;
    [&amp;#039;gl&amp;#039;]           = {&amp;#039;pt&amp;#039;},                              -- Galician&lt;br /&gt;
    [&amp;#039;mwl&amp;#039;]          = {&amp;#039;pt&amp;#039;},                              -- Mirandese&lt;br /&gt;
    [&amp;#039;pt&amp;#039;]           = {&amp;#039;pt-br&amp;#039;},                           -- Brazilian Portuguese&lt;br /&gt;
&lt;br /&gt;
    -- ro (Romanian) cluster&lt;br /&gt;
    [&amp;#039;mo&amp;#039;]           = {&amp;#039;ro&amp;#039;},                              -- Moldavian&lt;br /&gt;
    [&amp;#039;rmy&amp;#039;]          = {&amp;#039;ro&amp;#039;},                              -- Romani&lt;br /&gt;
&lt;br /&gt;
    -- ru (Russian) cluster&lt;br /&gt;
    [&amp;#039;ab&amp;#039;]           = {&amp;#039;ru&amp;#039;},                              -- Abkhazian&lt;br /&gt;
    [&amp;#039;av&amp;#039;]           = {&amp;#039;ru&amp;#039;},                              -- Avaric&lt;br /&gt;
    [&amp;#039;ba&amp;#039;]           = {&amp;#039;ru&amp;#039;},                              -- Bashkir&lt;br /&gt;
    [&amp;#039;be-tarask&amp;#039;]    = {&amp;#039;ru&amp;#039;},                              -- Belorussian&lt;br /&gt;
    [&amp;#039;ce&amp;#039;]           = {&amp;#039;ru&amp;#039;},                              -- Chechen&lt;br /&gt;
    [&amp;#039;crh-cyrl&amp;#039;]     = {&amp;#039;ru&amp;#039;},                              -- Crimean Tatar (Cyrillic script)&lt;br /&gt;
    [&amp;#039;cv&amp;#039;]           = {&amp;#039;ru&amp;#039;},                              -- Chuvash&lt;br /&gt;
    [&amp;#039;inh&amp;#039;]          = {&amp;#039;ru&amp;#039;},                              -- Ingush&lt;br /&gt;
    [&amp;#039;koi&amp;#039;]          = {&amp;#039;ru&amp;#039;},                              -- Komi-Permyak&lt;br /&gt;
    [&amp;#039;krc&amp;#039;]          = {&amp;#039;ru&amp;#039;},                              -- Karachay-Balkar&lt;br /&gt;
    [&amp;#039;kv&amp;#039;]           = {&amp;#039;ru&amp;#039;},                              -- Komi&lt;br /&gt;
    [&amp;#039;lbe&amp;#039;]          = {&amp;#039;ru&amp;#039;},                              -- лакку&lt;br /&gt;
    [&amp;#039;lez&amp;#039;]          = {&amp;#039;ru&amp;#039;},                              -- Lezghian&lt;br /&gt;
    [&amp;#039;mhr&amp;#039;]          = {&amp;#039;ru&amp;#039;},                              -- Eastern Mari&lt;br /&gt;
    [&amp;#039;mrj&amp;#039;]          = {&amp;#039;ru&amp;#039;},                              -- Hill Mari&lt;br /&gt;
    [&amp;#039;myv&amp;#039;]          = {&amp;#039;ru&amp;#039;},                              -- Erzya&lt;br /&gt;
    [&amp;#039;os&amp;#039;]           = {&amp;#039;ru&amp;#039;},                              -- Ossetic&lt;br /&gt;
    [&amp;#039;rue&amp;#039;]          = {&amp;#039;uk&amp;#039;, &amp;#039;ru&amp;#039;},                        -- Rusyn&lt;br /&gt;
    [&amp;#039;sah&amp;#039;]          = {&amp;#039;ru&amp;#039;},                              -- Sakha&lt;br /&gt;
    [&amp;#039;tt&amp;#039;]           = {&amp;#039;tt-cyrl&amp;#039;, &amp;#039;ru&amp;#039;},                   -- Tatar&lt;br /&gt;
    [&amp;#039;tt-cyrl&amp;#039;]      = {&amp;#039;ru&amp;#039;},                              -- Tatar (Cyrillic script)&lt;br /&gt;
    [&amp;#039;udm&amp;#039;]          = {&amp;#039;ru&amp;#039;},                              -- Udmurt&lt;br /&gt;
    [&amp;#039;uk&amp;#039;]           = {&amp;#039;ru&amp;#039;},                              -- Ukranian&lt;br /&gt;
    [&amp;#039;xal&amp;#039;]          = {&amp;#039;ru&amp;#039;},                              -- Kalmyk&lt;br /&gt;
    [&amp;#039;tt&amp;#039;]           = {&amp;#039;tt-cyrl&amp;#039;, &amp;#039;ru&amp;#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;
    [&amp;#039;ruq&amp;#039;]          = {&amp;#039;ruq-latn&amp;#039;, &amp;#039;ro&amp;#039;},                  -- Megleno-Romanian&lt;br /&gt;
    [&amp;#039;ruq-cyrl&amp;#039;]     = {&amp;#039;ruq&amp;#039;, &amp;#039;mk&amp;#039;},                       -- Megleno-Romanian (Cyrillic script)&lt;br /&gt;
    [&amp;#039;ruq-grek&amp;#039;]     = {&amp;#039;ruq&amp;#039;},                             -- Megleno-Romanian (Greek script)&lt;br /&gt;
    [&amp;#039;ruq-latn&amp;#039;]     = {&amp;#039;ro&amp;#039;, &amp;#039;ruq&amp;#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;
    [&amp;#039;sr&amp;#039;]           = {&amp;#039;sr-ec&amp;#039;},&lt;br /&gt;
    [&amp;#039;sr-ec&amp;#039;]        = {&amp;#039;sr&amp;#039;}, &lt;br /&gt;
    [&amp;#039;sr-el&amp;#039;]        = {&amp;#039;sr&amp;#039;}, &lt;br /&gt;
&lt;br /&gt;
    -- tg (Tajik) cluster: tg-cyrl , tg-latn -&amp;gt; tg (Tajik)&lt;br /&gt;
    [&amp;#039;tg&amp;#039;]           = {&amp;#039;tg-cyrl&amp;#039;},&lt;br /&gt;
    [&amp;#039;tg-cyrl&amp;#039;]      = {&amp;#039;tg&amp;#039;}, &lt;br /&gt;
    [&amp;#039;tg-latn&amp;#039;]      = {&amp;#039;tg&amp;#039;}, &lt;br /&gt;
&lt;br /&gt;
    -- tr (Turkish) cluster&lt;br /&gt;
    [&amp;#039;gag&amp;#039;]          = {&amp;#039;tr&amp;#039;},                              -- Gagauz&lt;br /&gt;
    [&amp;#039;kiu&amp;#039;]          = {&amp;#039;tr&amp;#039;},                              -- Kirmanjki&lt;br /&gt;
    [&amp;#039;lzz&amp;#039;]          = {&amp;#039;tr&amp;#039;},                              -- Lazuri&lt;br /&gt;
&lt;br /&gt;
    -- tt (Tatar) cluster: tt-cyrl , tt-latn -&amp;gt; tt (Tatar)&lt;br /&gt;
    [&amp;#039;tt-cyrl&amp;#039;]      = {&amp;#039;tt&amp;#039;},&lt;br /&gt;
    [&amp;#039;tt-latn&amp;#039;]      = {&amp;#039;tt&amp;#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;
    [&amp;#039;cdo&amp;#039;]          = {&amp;#039;nan&amp;#039;, &amp;#039;zh-hant&amp;#039;, &amp;#039;zh&amp;#039;, &amp;#039;zh-hans&amp;#039;}, -- Min Dong Chinese&lt;br /&gt;
    [&amp;#039;gan&amp;#039;]          = {&amp;#039;gan-hant&amp;#039;, &amp;#039;gan-hans&amp;#039;, &amp;#039;zh-hant&amp;#039;, &amp;#039;zh-hans&amp;#039;, &amp;#039;zh&amp;#039;}, -- Gan &lt;br /&gt;
    [&amp;#039;gan-hans&amp;#039;]     = {&amp;#039;gan&amp;#039;, &amp;#039;gan-hant&amp;#039;, &amp;#039;zh-hans&amp;#039;, &amp;#039;zh&amp;#039;, &amp;#039;zh-hant&amp;#039;},      -- Simplified Gan script&lt;br /&gt;
    [&amp;#039;gan-hant&amp;#039;]     = {&amp;#039;gan&amp;#039;, &amp;#039;gan-hans&amp;#039;, &amp;#039;zh-hant&amp;#039;, &amp;#039;zh&amp;#039;, &amp;#039;zh-hans&amp;#039;},      -- Traditional Gan script&lt;br /&gt;
    [&amp;#039;hak&amp;#039;]          = {&amp;#039;zh-hant&amp;#039;, &amp;#039;zh&amp;#039;, &amp;#039;zh-hans&amp;#039;},        -- Hakka&lt;br /&gt;
    [&amp;#039;ii&amp;#039;]           = {&amp;#039;zh-cn&amp;#039;, &amp;#039;zh-hans&amp;#039;, &amp;#039;zh&amp;#039;, &amp;#039;zh-hant&amp;#039;}, -- Sichuan Yi&lt;br /&gt;
    [&amp;#039;lzh&amp;#039;]          = {&amp;#039;zh-hant&amp;#039;, &amp;#039;zh&amp;#039;, &amp;#039;zh-hans&amp;#039;},        -- Literary Chinese&lt;br /&gt;
    [&amp;#039;nan&amp;#039;]          = {&amp;#039;cdo&amp;#039;, &amp;#039;zh-hant&amp;#039;, &amp;#039;zh&amp;#039;, &amp;#039;zh-hans&amp;#039;}, -- Min Nan Chinese&lt;br /&gt;
    [&amp;#039;szy&amp;#039;]          = {&amp;#039;zh-tw&amp;#039;, &amp;#039;zh-hant&amp;#039;, &amp;#039;zh&amp;#039;, &amp;#039;zh-hans&amp;#039;}, -- Sakizaya&lt;br /&gt;
    [&amp;#039;tay&amp;#039;]          = {&amp;#039;zh-tw&amp;#039;, &amp;#039;zh-hant&amp;#039;, &amp;#039;zh&amp;#039;, &amp;#039;zh-hans&amp;#039;}, -- Atayal&lt;br /&gt;
    [&amp;#039;trv&amp;#039;]          = {&amp;#039;zh-tw&amp;#039;, &amp;#039;zh-hant&amp;#039;, &amp;#039;zh&amp;#039;, &amp;#039;zh-hans&amp;#039;}, -- Seediq&lt;br /&gt;
    [&amp;#039;wuu&amp;#039;]          = {&amp;#039;zh-hans&amp;#039;, &amp;#039;zh-hant&amp;#039;, &amp;#039;zh&amp;#039;},        -- Wu&lt;br /&gt;
    -- https://phabricator.wikimedia.org/T59138&lt;br /&gt;
    -- [&amp;#039;wuu&amp;#039;]          = {&amp;#039;wuu-hans, &amp;#039;wuu-hant&amp;#039;, &amp;#039;zh-hans&amp;#039;, &amp;#039;zh-hant&amp;#039;, &amp;#039;zh&amp;#039;}, -- Wu&lt;br /&gt;
    -- [&amp;#039;wuu-hans&amp;#039;]     = {&amp;#039;wuu&amp;#039;, &amp;#039;wuu-hant&amp;#039;, &amp;#039;zh-hans&amp;#039;, &amp;#039;zh&amp;#039;, &amp;#039;zh-hant&amp;#039;},     -- Simplified Wu&lt;br /&gt;
    -- [&amp;#039;wuu-hant&amp;#039;]     = {&amp;#039;wuu&amp;#039;, &amp;#039;wuu-hans&amp;#039;, &amp;#039;zh-hant&amp;#039;, &amp;#039;zh&amp;#039;, &amp;#039;zh-hans&amp;#039;},     -- Traditional Wu&lt;br /&gt;
    [&amp;#039;yue&amp;#039;]          = {&amp;#039;zh-hk&amp;#039;, &amp;#039;zh-hant&amp;#039;, &amp;#039;zh-hans&amp;#039;, &amp;#039;zh&amp;#039;}, -- Cantonese&lt;br /&gt;
    -- https://phabricator.wikimedia.org/T59106&lt;br /&gt;
    -- [&amp;#039;yue&amp;#039;]          = {&amp;#039;yue-hant&amp;#039;, &amp;#039;yue-hans, &amp;#039;zh-hk&amp;#039;, &amp;#039;zh-hant&amp;#039;, &amp;#039;zh-hans&amp;#039;, &amp;#039;zh&amp;#039;}, -- Cantonese&lt;br /&gt;
    -- [&amp;#039;yue-hans&amp;#039;]     = {&amp;#039;yue&amp;#039;, &amp;#039;yue-hant&amp;#039;, &amp;#039;zh-hans&amp;#039;, &amp;#039;zh&amp;#039;, &amp;#039;zh-hk&amp;#039;, &amp;#039;zh-hant&amp;#039;},     -- Simplified Cantonese&lt;br /&gt;
    -- [&amp;#039;yue-hant&amp;#039;]     = {&amp;#039;yue&amp;#039;, &amp;#039;yue-hans&amp;#039;, &amp;#039;zh-hk&amp;#039;, &amp;#039;zh-hant&amp;#039;, &amp;#039;zh&amp;#039;, &amp;#039;zh-hans&amp;#039;},     -- Traditional Cantonese&lt;br /&gt;
    [&amp;#039;za&amp;#039;]           = {&amp;#039;zh-hans&amp;#039;, &amp;#039;zh-hant&amp;#039;, &amp;#039;zh&amp;#039;},        -- Zhuang&lt;br /&gt;
    -- The time allocated for running scripts has expired.&lt;br /&gt;
    -- [&amp;#039;zh&amp;#039;]           = {&amp;#039;zh-hans&amp;#039;, &amp;#039;zh-hant&amp;#039;, &amp;#039;zh-cn&amp;#039;, &amp;#039;zh-tw&amp;#039;, &amp;#039;zh-hk&amp;#039;}, -- Chinese&lt;br /&gt;
    -- [&amp;#039;zh-hans&amp;#039;]      = {&amp;#039;zh-cn&amp;#039;, &amp;#039;zh&amp;#039;, &amp;#039;zh-hant&amp;#039;},   -- Simplified Chinese&lt;br /&gt;
    -- [&amp;#039;zh-hant&amp;#039;]      = {&amp;#039;zh-tw&amp;#039;, &amp;#039;zh-hk&amp;#039;, &amp;#039;zh&amp;#039;, &amp;#039;zh-hans&amp;#039;},   -- Traditional Chinese&lt;br /&gt;
    -- [&amp;#039;zh-tw&amp;#039;]        = {&amp;#039;zh-hant&amp;#039;, &amp;#039;zh-hk&amp;#039;, &amp;#039;zh&amp;#039;, &amp;#039;zh-hans&amp;#039;}, -- Chinese (Taiwan)&lt;br /&gt;
    -- [&amp;#039;zh-hk&amp;#039;]        = {&amp;#039;zh-hant&amp;#039;, &amp;#039;zh-tw&amp;#039;, &amp;#039;zh&amp;#039;, &amp;#039;zh-hans&amp;#039;}, -- Chinese (Hong Kong)&lt;br /&gt;
    [&amp;#039;zh&amp;#039;]           = {&amp;#039;zh-hans&amp;#039;, &amp;#039;zh-hant&amp;#039;, &amp;#039;zh-hk&amp;#039;}, -- Chinese&lt;br /&gt;
    [&amp;#039;zh-hans&amp;#039;]      = {&amp;#039;zh-hant&amp;#039;, &amp;#039;zh-hk&amp;#039;},   -- Simplified Chinese&lt;br /&gt;
    [&amp;#039;zh-hant&amp;#039;]      = {&amp;#039;zh-hk&amp;#039;, &amp;#039;zh-hans&amp;#039;},   -- Traditional Chinese&lt;br /&gt;
    [&amp;#039;zh-cn&amp;#039;]        = {&amp;#039;zh-hans&amp;#039;, &amp;#039;zh&amp;#039;, &amp;#039;zh-hant&amp;#039;}, -- Chinese (Mainland China)&lt;br /&gt;
    [&amp;#039;zh-sg&amp;#039;]        = {&amp;#039;zh-hans&amp;#039;, &amp;#039;zh-cn&amp;#039;, &amp;#039;zh&amp;#039;, &amp;#039;zh-hant&amp;#039;}, -- Chinese (Singapore)&lt;br /&gt;
    [&amp;#039;zh-my&amp;#039;]        = {&amp;#039;zh-hans&amp;#039;, &amp;#039;zh-sg&amp;#039;, &amp;#039;zh-cn&amp;#039;, &amp;#039;zh&amp;#039;, &amp;#039;zh-hant&amp;#039;}, -- Chinese (Malaysia)&lt;br /&gt;
    [&amp;#039;zh-tw&amp;#039;]        = {&amp;#039;zh-hant&amp;#039;, &amp;#039;zh-hk&amp;#039;, &amp;#039;zh-hans&amp;#039;}, -- Chinese (Taiwan)&lt;br /&gt;
    [&amp;#039;zh-hk&amp;#039;]        = {&amp;#039;zh-hant&amp;#039;, &amp;#039;zh-hans&amp;#039;}, -- Chinese (Hong Kong)&lt;br /&gt;
    [&amp;#039;zh-mo&amp;#039;]        = {&amp;#039;zh-hant&amp;#039;, &amp;#039;zh-hk&amp;#039;, &amp;#039;zh-tw&amp;#039;, &amp;#039;zh&amp;#039;, &amp;#039;zh-hans&amp;#039;}, -- Chinese (Macau)&lt;br /&gt;
    [&amp;#039;zh-classical&amp;#039;] = {&amp;#039;lzh&amp;#039;, &amp;#039;zh-hant&amp;#039;, &amp;#039;zh&amp;#039;, &amp;#039;zh-hans&amp;#039;}, -- Classical Chinese -&amp;gt; Literary Chinese&lt;br /&gt;
    [&amp;#039;zh-min-nan&amp;#039;]   = {&amp;#039;nan&amp;#039;, &amp;#039;cdo&amp;#039;, &amp;#039;zh-hant&amp;#039;, &amp;#039;zh&amp;#039;, &amp;#039;zh-hans&amp;#039;},   -- Chinese (Min Nan) -&amp;gt; Min Nan Chinese&lt;br /&gt;
    [&amp;#039;zh-yue&amp;#039;]       = {&amp;#039;yue&amp;#039;, &amp;#039;zh-hk&amp;#039;, &amp;#039;zh-hant&amp;#039;, &amp;#039;zh-hans&amp;#039;, &amp;#039;zh&amp;#039;}, -- Yue Chinese -&amp;gt; Cantonese&lt;br /&gt;
&lt;br /&gt;
    ------------------------&lt;br /&gt;
    --------- misc ---------&lt;br /&gt;
    ------------------------&lt;br /&gt;
    [&amp;#039;arz&amp;#039;]          = {&amp;#039;ar&amp;#039;},                              -- Egyptian Arabic -&amp;gt; Arabic&lt;br /&gt;
    [&amp;#039;azb&amp;#039;]          = {&amp;#039;az&amp;#039;},                              -- Southern Azerbaijani -&amp;gt; Azerbaijani &lt;br /&gt;
    [&amp;#039;be-x-old&amp;#039;]     = {&amp;#039;be-tarask&amp;#039;},                       -- be-x-old -&amp;gt; be-tarask (wrong to correct Taraškievica form of Belarusian orthography)&lt;br /&gt;
    [&amp;#039;bh&amp;#039;]           = {&amp;#039;bho&amp;#039;},                             -- Bihari -&amp;gt; Bhojpuri&lt;br /&gt;
    [&amp;#039;bpy&amp;#039;]          = {&amp;#039;bn&amp;#039;},                              -- Bishnupria Manipuri -&amp;gt; Bengali&lt;br /&gt;
&lt;br /&gt;
    -- da&lt;br /&gt;
    [&amp;#039;jut&amp;#039;]          = {&amp;#039;da&amp;#039;},                              -- Jutish -&amp;gt; Danish&lt;br /&gt;
    [&amp;#039;kl&amp;#039;]           = {&amp;#039;da&amp;#039;},                              -- Kalaallisut -&amp;gt; Danish&lt;br /&gt;
&lt;br /&gt;
    [&amp;#039;en-gb&amp;#039;]        = {&amp;#039;en&amp;#039;},                              -- Brexit -&amp;gt; English&lt;br /&gt;
    [&amp;#039;yi&amp;#039;]           = {&amp;#039;he&amp;#039;},                              -- Yiddish -&amp;gt; Hebrew&lt;br /&gt;
    [&amp;#039;iu&amp;#039;]           = {&amp;#039;ike-cans&amp;#039;},                        -- Inuktitut -&amp;gt; Eastern Canadian (Aboriginal syllabics)&lt;br /&gt;
    [&amp;#039;xmf&amp;#039;]          = {&amp;#039;ka&amp;#039;},                              -- Mingrelian -&amp;gt; Georgian&lt;br /&gt;
    [&amp;#039;kbd&amp;#039;]          = {&amp;#039;kbd-cyrl&amp;#039;, &amp;#039;ru&amp;#039;},                  -- Kabardian -&amp;gt; Адыгэбзэ&lt;br /&gt;
    [&amp;#039;tcy&amp;#039;]          = {&amp;#039;kn&amp;#039;},                              -- Tulu -&amp;gt; Kannada&lt;br /&gt;
    [&amp;#039;ko-kp&amp;#039;]        = {&amp;#039;ko&amp;#039;},                              -- 한국어 (조선) -&amp;gt; Korean&lt;br /&gt;
    [&amp;#039;ks&amp;#039;]           = {&amp;#039;ks-arab&amp;#039;},                         -- Kashmiri -&amp;gt; Kashmiri (Arabic script)&lt;br /&gt;
&lt;br /&gt;
    -- lt&lt;br /&gt;
    [&amp;#039;bat-smg&amp;#039;]      = {&amp;#039;sgs&amp;#039;, &amp;#039;lt&amp;#039;},                       -- Samogitian -&amp;gt; Lithuanian&lt;br /&gt;
    [&amp;#039;sgs&amp;#039;]          = {&amp;#039;lt&amp;#039;},                              -- Samogitian -&amp;gt; Lithuanian&lt;br /&gt;
&lt;br /&gt;
    [&amp;#039;ltg&amp;#039;]          = {&amp;#039;lv&amp;#039;},                              -- Latvian -&amp;gt; Latgalian&lt;br /&gt;
    [&amp;#039;dtp&amp;#039;]          = {&amp;#039;ms&amp;#039;},                              -- Central Dusun -&amp;gt; Malay&lt;br /&gt;
    [&amp;#039;no&amp;#039;]           = {&amp;#039;nb&amp;#039;},                              -- Norwegian (bokmål) -&amp;gt; Norwegian Bokmål&lt;br /&gt;
    [&amp;#039;roa-rup&amp;#039;]      = {&amp;#039;rup&amp;#039;},                             -- Aromanian (other Romance) -&amp;gt; Aromanian&lt;br /&gt;
    [&amp;#039;aln&amp;#039;]          = {&amp;#039;sq&amp;#039;},                              -- Gheg Albanian -&amp;gt; Albanian&lt;br /&gt;
    [&amp;#039;ug&amp;#039;]           = {&amp;#039;ug-arab&amp;#039;},                         -- Uyghur -&amp;gt; Uyghur (Arabic script)&lt;br /&gt;
    [&amp;#039;khw&amp;#039;]          = {&amp;#039;ur&amp;#039;},                              -- Khowar -&amp;gt; Urdu&lt;br /&gt;
}&lt;/div&gt;</description>
			<pubDate>Mon, 31 Aug 2026 12:54:39 GMT</pubDate>
			<dc:creator>WikiAdmin</dc:creator>
			<comments>https://unimage.wcnm.pw/wiki/%E6%A8%A1%E5%9D%97%E8%AE%A8%E8%AE%BA:Dev/Fallbacklist</comments>
		</item>
		<item>
			<title>模块:Dev/Entrypoint</title>
			<link>https://unimage.wcnm.pw/index.php?title=%E6%A8%A1%E5%9D%97:Dev/Entrypoint&amp;diff=706&amp;oldid=0</link>
			<guid isPermaLink="false">https://unimage.wcnm.pw/index.php?title=%E6%A8%A1%E5%9D%97:Dev/Entrypoint&amp;diff=706&amp;oldid=0</guid>
			<description>&lt;p&gt;从 Fandom Developer Wiki 本地化全局模块，源修订 155355&lt;/p&gt;
&lt;p&gt;&lt;b&gt;新页面&lt;/b&gt;&lt;/p&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} &amp;#039;you must specify a function to call&amp;#039;&lt;br /&gt;
--  @error[91]          {string} &amp;#039;the function you specified did not exist&amp;#039;&lt;br /&gt;
--  @error[opt,95]      {string} &amp;#039;$2 is not a function&amp;#039;&lt;br /&gt;
--  @return             {function} Template entrypoint - @{main}.&lt;br /&gt;
--  @note               Parent frames are not available in Entrypoint&amp;#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(&amp;#039;^%d+.%d+&amp;#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(&amp;#039;:%s*(.-)[.۔。෴։።]?$&amp;#039;)&lt;br /&gt;
        :gsub(&amp;#039;^.&amp;#039;, mw.ustring.lower)&lt;br /&gt;
        :gsub(&amp;#039;$2&amp;#039;, fn_name or &amp;#039;$2&amp;#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(&amp;#039;scribunto-common-nofunction&amp;#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(&amp;#039;scribunto-common-nosuchfunction&amp;#039;, fn_name))&lt;br /&gt;
    end&lt;br /&gt;
&lt;br /&gt;
    if func_check and type(package[fn_name]) ~= &amp;#039;function&amp;#039; then&lt;br /&gt;
        error(msg(&amp;#039;scribunto-common-notafunction&amp;#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;</description>
			<pubDate>Mon, 31 Aug 2026 12:54:33 GMT</pubDate>
			<dc:creator>WikiAdmin</dc:creator>
			<comments>https://unimage.wcnm.pw/wiki/%E6%A8%A1%E5%9D%97%E8%AE%A8%E8%AE%BA:Dev/Entrypoint</comments>
		</item>
		<item>
			<title>模块:Dev/Dialogue</title>
			<link>https://unimage.wcnm.pw/index.php?title=%E6%A8%A1%E5%9D%97:Dev/Dialogue&amp;diff=705&amp;oldid=0</link>
			<guid isPermaLink="false">https://unimage.wcnm.pw/index.php?title=%E6%A8%A1%E5%9D%97:Dev/Dialogue&amp;diff=705&amp;oldid=0</guid>
			<description>&lt;p&gt;从 Fandom Developer Wiki 本地化全局模块，源修订 194365&lt;/p&gt;
&lt;p&gt;&lt;b&gt;新页面&lt;/b&gt;&lt;/p&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(&amp;#039;Module:Dev/Arguments&amp;#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(&amp;#039;dialogue&amp;#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(&amp;#039;dl&amp;#039;):addClass(&amp;#039;dialogue-wrapper&amp;#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 == &amp;#039;action&amp;#039; then&lt;br /&gt;
          block:tag(&amp;#039;dd&amp;#039;)&lt;br /&gt;
          :tag(&amp;#039;small&amp;#039;):attr(&amp;#039;data-dialogue&amp;#039;,&amp;#039;action&amp;#039;)&lt;br /&gt;
          :tag(&amp;#039;u&amp;#039;)&lt;br /&gt;
          :wikitext(&amp;#039;[&amp;#039;..args[next_param]..&amp;#039;]&amp;#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]) == &amp;#039;string&amp;#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;&amp;#039;&amp;#039;&amp;#039;%s&amp;#039;&amp;#039;&amp;#039;&amp;quot;, speaker)&lt;br /&gt;
          local mood = args[&amp;#039;mood&amp;#039;..mood_line] or nil&lt;br /&gt;
          mood = mood and string.format(&amp;quot;&amp;amp;nbsp;&amp;#039;&amp;#039;(%s)&amp;#039;&amp;#039;&amp;quot;, mood)&lt;br /&gt;
          if speaker or mood then&lt;br /&gt;
            block:tag(&amp;#039;dt&amp;#039;)&lt;br /&gt;
            :wikitext(&lt;br /&gt;
              (&amp;#039;%s%s&amp;#039;):format( speaker or &amp;#039;&amp;#039;, mood or &amp;#039;&amp;#039;)&lt;br /&gt;
            ):done()&lt;br /&gt;
          end&lt;br /&gt;
          if args[next_param] then&lt;br /&gt;
            block:tag(&amp;#039;dd&amp;#039;):tag(&amp;#039;q&amp;#039;)&lt;br /&gt;
            :wikitext(args[next_param])&lt;br /&gt;
            :done():done()&lt;br /&gt;
          else&lt;br /&gt;
            block:tag(&amp;#039;dd&amp;#039;):wikitext(&amp;#039;...&amp;#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 == &amp;#039;action&amp;#039; then&lt;br /&gt;
          block:tag(&amp;#039;dd&amp;#039;)&lt;br /&gt;
          :tag(&amp;#039;small&amp;#039;)&lt;br /&gt;
          :attr(&amp;#039;data-dialogue&amp;#039;,&amp;#039;action&amp;#039;)&lt;br /&gt;
          :tag(&amp;#039;u&amp;#039;)&lt;br /&gt;
          :wikitext(&amp;#039;[&amp;#039;..args[next_param]..&amp;#039;]&amp;#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]) == &amp;#039;string&amp;#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;&amp;#039;&amp;#039;&amp;#039;%s&amp;#039;&amp;#039;&amp;#039;&amp;quot;, speaker)&lt;br /&gt;
          local mood = args[&amp;#039;mood&amp;#039;..mood_line] or nil&lt;br /&gt;
          mood = mood and string.format(&amp;quot;&amp;amp;nbsp;&amp;#039;&amp;#039;(%s)&amp;#039;&amp;#039;&amp;quot;, mood)&lt;br /&gt;
          if speaker or mood then&lt;br /&gt;
            block:tag(&amp;#039;dt&amp;#039;)&lt;br /&gt;
            :wikitext(&lt;br /&gt;
              (&amp;#039;%s%s&amp;#039;):format( speaker or &amp;#039;&amp;#039;, mood or &amp;#039;&amp;#039;)&lt;br /&gt;
            )&lt;br /&gt;
            :done()&lt;br /&gt;
          end&lt;br /&gt;
          if args[next_param] ~= &amp;#039;&amp;#039; then&lt;br /&gt;
            block:tag(&amp;#039;dd&amp;#039;):tag(&amp;#039;q&amp;#039;)&lt;br /&gt;
            :wikitext(args[next_param])&lt;br /&gt;
            :done():done()&lt;br /&gt;
          else&lt;br /&gt;
            block:tag(&amp;#039;dd&amp;#039;):wikitext(&amp;#039;...&amp;#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[&amp;#039;cite&amp;#039;] then&lt;br /&gt;
    block:tag(&amp;#039;cite&amp;#039;):wikitext(string.format(&amp;quot;— %s&amp;quot;, args[&amp;#039;cite&amp;#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;</description>
			<pubDate>Mon, 31 Aug 2026 12:54:32 GMT</pubDate>
			<dc:creator>WikiAdmin</dc:creator>
			<comments>https://unimage.wcnm.pw/wiki/%E6%A8%A1%E5%9D%97%E8%AE%A8%E8%AE%BA:Dev/Dialogue</comments>
		</item>
		<item>
			<title>模块:Dev/Arguments/i18n</title>
			<link>https://unimage.wcnm.pw/index.php?title=%E6%A8%A1%E5%9D%97:Dev/Arguments/i18n&amp;diff=704&amp;oldid=0</link>
			<guid isPermaLink="false">https://unimage.wcnm.pw/index.php?title=%E6%A8%A1%E5%9D%97:Dev/Arguments/i18n&amp;diff=704&amp;oldid=0</guid>
			<description>&lt;p&gt;从 Fandom Developer Wiki 本地化全局模块，源修订 204766&lt;/p&gt;
&lt;p&gt;&lt;b&gt;新页面&lt;/b&gt;&lt;/p&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&amp;#039;écrire dans la clé du tableau des arguments \&amp;quot;$1\&amp;quot;; l&amp;#039;écrasement des arguments existants n&amp;#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&amp;#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;</description>
			<pubDate>Mon, 31 Aug 2026 12:54:31 GMT</pubDate>
			<dc:creator>WikiAdmin</dc:creator>
			<comments>https://unimage.wcnm.pw/wiki/%E6%A8%A1%E5%9D%97%E8%AE%A8%E8%AE%BA:Dev/Arguments/i18n</comments>
		</item>
		<item>
			<title>模块:Dev/Arguments</title>
			<link>https://unimage.wcnm.pw/index.php?title=%E6%A8%A1%E5%9D%97:Dev/Arguments&amp;diff=703&amp;oldid=0</link>
			<guid isPermaLink="false">https://unimage.wcnm.pw/index.php?title=%E6%A8%A1%E5%9D%97:Dev/Arguments&amp;diff=703&amp;oldid=0</guid>
			<description>&lt;p&gt;从 Fandom Developer Wiki 本地化全局模块，源修订 197966&lt;/p&gt;
&lt;p&gt;&lt;b&gt;新页面&lt;/b&gt;&lt;/p&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(&amp;#039;getArgs&amp;#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(&amp;#039;Module:Dev/I18n&amp;#039;).loadMessages(&amp;#039;Arguments&amp;#039;)&lt;br /&gt;
local util = require(&amp;#039;libraryUtil&amp;#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&amp;#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) == &amp;#039;string&amp;#039; then&lt;br /&gt;
        val = val:match(&amp;#039;^%s*(.-)%s*$&amp;#039;)&lt;br /&gt;
        if val == &amp;#039;&amp;#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) == &amp;#039;string&amp;#039; then&lt;br /&gt;
        return val:match(&amp;#039;^%s*(.-)%s*$&amp;#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) == &amp;#039;string&amp;#039; then&lt;br /&gt;
        if val:find(&amp;#039;%S&amp;#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 == &amp;#039;string&amp;#039; or tp == &amp;#039;number&amp;#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&amp;#039;t cover&lt;br /&gt;
--                      the developer&amp;#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]     &amp;#039;bad value assigned to option &amp;quot;valueFunc&amp;quot;&lt;br /&gt;
--                      (function expected, got $type)&amp;#039;&lt;br /&gt;
--  @error[opt,407]     &amp;#039;could not write to argument table key &amp;quot;$key&amp;quot;;&lt;br /&gt;
--                      the table is read-only&amp;#039;&lt;br /&gt;
--  @error[opt,409]     &amp;#039;could not write to argument table key &amp;quot;$key&amp;quot;;&lt;br /&gt;
--                      overwriting existing arguments is not permitted&amp;#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(&amp;#039;Module:Arguments&amp;#039;).getArgs&lt;br /&gt;
--      function p.main(frame)&lt;br /&gt;
--          local args = getArgs(frame, {&lt;br /&gt;
--              wrapper = &amp;#039;Template:&amp;lt;TEMPLATE&amp;gt;&amp;#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&amp;#039;s wikitext output.&lt;br /&gt;
function arguments.getArgs(frame, options)&lt;br /&gt;
    checkType(&amp;#039;getArgs&amp;#039;, 1, frame, &amp;#039;table&amp;#039;, true)&lt;br /&gt;
    checkType(&amp;#039;getArgs&amp;#039;, 2, options, &amp;#039;table&amp;#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&amp;#039;s&lt;br /&gt;
    -- availability. If we weren&amp;#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) == &amp;#039;table&amp;#039; and&lt;br /&gt;
        type(frame.getParent) == &amp;#039;function&amp;#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&amp;#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(&amp;#039;/sandbox$&amp;#039;, &amp;#039;&amp;#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) == &amp;#039;table&amp;#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&amp;#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&amp;#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) ~= &amp;#039;function&amp;#039; then&lt;br /&gt;
            error(i18n:msg(&amp;#039;error-value-func&amp;#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 &amp;#039;s&amp;#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] ~= &amp;#039;h&amp;#039; then&lt;br /&gt;
                    local tidiedVal = tidyVal(key, val)&lt;br /&gt;
                    if tidiedVal == nil then&lt;br /&gt;
                        nilArgs[key] = &amp;#039;s&amp;#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) == &amp;#039;string&amp;#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] = &amp;#039;h&amp;#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) == &amp;#039;string&amp;#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(&amp;#039;error-write-permission&amp;#039;, tostring(key)), 2)&lt;br /&gt;
        elseif options.noOverwrite and args[key] ~= nil then&lt;br /&gt;
            error(i18n:msg(&amp;#039;error-overwrite-permission&amp;#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&amp;#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] = &amp;#039;h&amp;#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) ~= &amp;#039;string&amp;#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&amp;#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;</description>
			<pubDate>Mon, 31 Aug 2026 12:54:30 GMT</pubDate>
			<dc:creator>WikiAdmin</dc:creator>
			<comments>https://unimage.wcnm.pw/wiki/%E6%A8%A1%E5%9D%97%E8%AE%A8%E8%AE%BA:Dev/Arguments</comments>
		</item>
		<item>
			<title>文件:Fish raw.png</title>
			<link>https://unimage.wcnm.pw/index.php?title=%E6%96%87%E4%BB%B6:Fish_raw.png&amp;diff=702&amp;oldid=0</link>
			<guid isPermaLink="false">https://unimage.wcnm.pw/index.php?title=%E6%96%87%E4%BB%B6:Fish_raw.png&amp;diff=702&amp;oldid=0</guid>
			<description>&lt;p&gt;&lt;a href=&quot;/index.php?title=%E7%94%A8%E6%88%B7:WikiAdmin&amp;amp;action=edit&amp;amp;redlink=1&quot; class=&quot;new mw-userlink&quot; title=&quot;用户:WikiAdmin（页面不存在）&quot;&gt;&lt;bdi&gt;WikiAdmin&lt;/bdi&gt;&lt;/a&gt;上传&lt;a href=&quot;/wiki/%E6%96%87%E4%BB%B6:Fish_raw.png&quot; title=&quot;文件:Fish raw.png&quot;&gt;文件:Fish raw.png&lt;/a&gt; == 摘要 == 从旧 Fandom Unimage Wiki 迁移图片&lt;/p&gt;
&lt;p&gt;&lt;b&gt;新页面&lt;/b&gt;&lt;/p&gt;&lt;div&gt;&lt;/div&gt;</description>
			<pubDate>Mon, 31 Aug 2026 12:23:23 GMT</pubDate>
			<dc:creator>WikiAdmin</dc:creator>
			<comments>https://unimage.wcnm.pw/wiki/%E6%96%87%E4%BB%B6%E8%AE%A8%E8%AE%BA:Fish_raw.png</comments>
		</item>
		<item>
			<title>文件:Chao icon1.png</title>
			<link>https://unimage.wcnm.pw/index.php?title=%E6%96%87%E4%BB%B6:Chao_icon1.png&amp;diff=701&amp;oldid=0</link>
			<guid isPermaLink="false">https://unimage.wcnm.pw/index.php?title=%E6%96%87%E4%BB%B6:Chao_icon1.png&amp;diff=701&amp;oldid=0</guid>
			<description>&lt;p&gt;&lt;a href=&quot;/index.php?title=%E7%94%A8%E6%88%B7:WikiAdmin&amp;amp;action=edit&amp;amp;redlink=1&quot; class=&quot;new mw-userlink&quot; title=&quot;用户:WikiAdmin（页面不存在）&quot;&gt;&lt;bdi&gt;WikiAdmin&lt;/bdi&gt;&lt;/a&gt;上传&lt;a href=&quot;/wiki/%E6%96%87%E4%BB%B6:Chao_icon1.png&quot; title=&quot;文件:Chao icon1.png&quot;&gt;文件:Chao icon1.png&lt;/a&gt; == 摘要 == 从旧 Fandom Unimage Wiki 迁移图片&lt;/p&gt;
&lt;p&gt;&lt;b&gt;新页面&lt;/b&gt;&lt;/p&gt;&lt;div&gt;&lt;/div&gt;</description>
			<pubDate>Mon, 31 Aug 2026 12:23:23 GMT</pubDate>
			<dc:creator>WikiAdmin</dc:creator>
			<comments>https://unimage.wcnm.pw/wiki/%E6%96%87%E4%BB%B6%E8%AE%A8%E8%AE%BA:Chao_icon1.png</comments>
		</item>
		<item>
			<title>文件:Zs4.gif</title>
			<link>https://unimage.wcnm.pw/index.php?title=%E6%96%87%E4%BB%B6:Zs4.gif&amp;diff=700&amp;oldid=0</link>
			<guid isPermaLink="false">https://unimage.wcnm.pw/index.php?title=%E6%96%87%E4%BB%B6:Zs4.gif&amp;diff=700&amp;oldid=0</guid>
			<description>&lt;p&gt;&lt;a href=&quot;/index.php?title=%E7%94%A8%E6%88%B7:WikiAdmin&amp;amp;action=edit&amp;amp;redlink=1&quot; class=&quot;new mw-userlink&quot; title=&quot;用户:WikiAdmin（页面不存在）&quot;&gt;&lt;bdi&gt;WikiAdmin&lt;/bdi&gt;&lt;/a&gt;上传&lt;a href=&quot;/wiki/%E6%96%87%E4%BB%B6:Zs4.gif&quot; title=&quot;文件:Zs4.gif&quot;&gt;文件:Zs4.gif&lt;/a&gt; == 摘要 == 从旧 Fandom Unimage Wiki 迁移图片&lt;/p&gt;
&lt;p&gt;&lt;b&gt;新页面&lt;/b&gt;&lt;/p&gt;&lt;div&gt;&lt;/div&gt;</description>
			<pubDate>Mon, 31 Aug 2026 12:23:22 GMT</pubDate>
			<dc:creator>WikiAdmin</dc:creator>
			<comments>https://unimage.wcnm.pw/wiki/%E6%96%87%E4%BB%B6%E8%AE%A8%E8%AE%BA:Zs4.gif</comments>
		</item>
		<item>
			<title>文件:Sg.png</title>
			<link>https://unimage.wcnm.pw/index.php?title=%E6%96%87%E4%BB%B6:Sg.png&amp;diff=699&amp;oldid=0</link>
			<guid isPermaLink="false">https://unimage.wcnm.pw/index.php?title=%E6%96%87%E4%BB%B6:Sg.png&amp;diff=699&amp;oldid=0</guid>
			<description>&lt;p&gt;&lt;a href=&quot;/index.php?title=%E7%94%A8%E6%88%B7:WikiAdmin&amp;amp;action=edit&amp;amp;redlink=1&quot; class=&quot;new mw-userlink&quot; title=&quot;用户:WikiAdmin（页面不存在）&quot;&gt;&lt;bdi&gt;WikiAdmin&lt;/bdi&gt;&lt;/a&gt;上传&lt;a href=&quot;/wiki/%E6%96%87%E4%BB%B6:Sg.png&quot; title=&quot;文件:Sg.png&quot;&gt;文件:Sg.png&lt;/a&gt; == 摘要 == 从旧 Fandom Unimage Wiki 迁移图片&lt;/p&gt;
&lt;p&gt;&lt;b&gt;新页面&lt;/b&gt;&lt;/p&gt;&lt;div&gt;&lt;/div&gt;</description>
			<pubDate>Mon, 31 Aug 2026 12:23:22 GMT</pubDate>
			<dc:creator>WikiAdmin</dc:creator>
			<comments>https://unimage.wcnm.pw/wiki/%E6%96%87%E4%BB%B6%E8%AE%A8%E8%AE%BA:Sg.png</comments>
		</item>
		<item>
			<title>文件:Declined.png</title>
			<link>https://unimage.wcnm.pw/index.php?title=%E6%96%87%E4%BB%B6:Declined.png&amp;diff=697&amp;oldid=0</link>
			<guid isPermaLink="false">https://unimage.wcnm.pw/index.php?title=%E6%96%87%E4%BB%B6:Declined.png&amp;diff=697&amp;oldid=0</guid>
			<description>&lt;p&gt;&lt;a href=&quot;/index.php?title=%E7%94%A8%E6%88%B7:WikiAdmin&amp;amp;action=edit&amp;amp;redlink=1&quot; class=&quot;new mw-userlink&quot; title=&quot;用户:WikiAdmin（页面不存在）&quot;&gt;&lt;bdi&gt;WikiAdmin&lt;/bdi&gt;&lt;/a&gt;上传&lt;a href=&quot;/wiki/%E6%96%87%E4%BB%B6:Declined.png&quot; title=&quot;文件:Declined.png&quot;&gt;文件:Declined.png&lt;/a&gt; == 摘要 == 从旧 Fandom Unimage Wiki 迁移图片&lt;/p&gt;
&lt;p&gt;&lt;b&gt;新页面&lt;/b&gt;&lt;/p&gt;&lt;div&gt;&lt;/div&gt;</description>
			<pubDate>Mon, 31 Aug 2026 12:23:21 GMT</pubDate>
			<dc:creator>WikiAdmin</dc:creator>
			<comments>https://unimage.wcnm.pw/wiki/%E6%96%87%E4%BB%B6%E8%AE%A8%E8%AE%BA:Declined.png</comments>
		</item>
		<item>
			<title>文件:Iron shovel.png</title>
			<link>https://unimage.wcnm.pw/index.php?title=%E6%96%87%E4%BB%B6:Iron_shovel.png&amp;diff=693&amp;oldid=0</link>
			<guid isPermaLink="false">https://unimage.wcnm.pw/index.php?title=%E6%96%87%E4%BB%B6:Iron_shovel.png&amp;diff=693&amp;oldid=0</guid>
			<description>&lt;p&gt;&lt;a href=&quot;/index.php?title=%E7%94%A8%E6%88%B7:WikiAdmin&amp;amp;action=edit&amp;amp;redlink=1&quot; class=&quot;new mw-userlink&quot; title=&quot;用户:WikiAdmin（页面不存在）&quot;&gt;&lt;bdi&gt;WikiAdmin&lt;/bdi&gt;&lt;/a&gt;上传&lt;a href=&quot;/wiki/%E6%96%87%E4%BB%B6:Iron_shovel.png&quot; title=&quot;文件:Iron shovel.png&quot;&gt;文件:Iron shovel.png&lt;/a&gt; == 摘要 == 从旧 Fandom Unimage Wiki 迁移图片&lt;/p&gt;
&lt;p&gt;&lt;b&gt;新页面&lt;/b&gt;&lt;/p&gt;&lt;div&gt;&lt;/div&gt;</description>
			<pubDate>Mon, 31 Aug 2026 12:23:21 GMT</pubDate>
			<dc:creator>WikiAdmin</dc:creator>
			<comments>https://unimage.wcnm.pw/wiki/%E6%96%87%E4%BB%B6%E8%AE%A8%E8%AE%BA:Iron_shovel.png</comments>
		</item>
		<item>
			<title>文件:传说英雄.png</title>
			<link>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&amp;oldid=0</link>
			<guid isPermaLink="false">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&amp;oldid=0</guid>
			<description>&lt;p&gt;&lt;a href=&quot;/index.php?title=%E7%94%A8%E6%88%B7:WikiAdmin&amp;amp;action=edit&amp;amp;redlink=1&quot; class=&quot;new mw-userlink&quot; title=&quot;用户:WikiAdmin（页面不存在）&quot;&gt;&lt;bdi&gt;WikiAdmin&lt;/bdi&gt;&lt;/a&gt;上传&lt;a href=&quot;/wiki/%E6%96%87%E4%BB%B6:%E4%BC%A0%E8%AF%B4%E8%8B%B1%E9%9B%84.png&quot; title=&quot;文件:传说英雄.png&quot;&gt;文件:传说英雄.png&lt;/a&gt; == 摘要 == 从旧 Fandom Unimage Wiki 迁移图片&lt;/p&gt;
&lt;p&gt;&lt;b&gt;新页面&lt;/b&gt;&lt;/p&gt;&lt;div&gt;&lt;/div&gt;</description>
			<pubDate>Mon, 31 Aug 2026 12:23:21 GMT</pubDate>
			<dc:creator>WikiAdmin</dc:creator>
			<comments>https://unimage.wcnm.pw/wiki/%E6%96%87%E4%BB%B6%E8%AE%A8%E8%AE%BA:%E4%BC%A0%E8%AF%B4%E8%8B%B1%E9%9B%84.png</comments>
		</item>
		<item>
			<title>文件:Lo.png</title>
			<link>https://unimage.wcnm.pw/index.php?title=%E6%96%87%E4%BB%B6:Lo.png&amp;diff=695&amp;oldid=0</link>
			<guid isPermaLink="false">https://unimage.wcnm.pw/index.php?title=%E6%96%87%E4%BB%B6:Lo.png&amp;diff=695&amp;oldid=0</guid>
			<description>&lt;p&gt;&lt;a href=&quot;/index.php?title=%E7%94%A8%E6%88%B7:WikiAdmin&amp;amp;action=edit&amp;amp;redlink=1&quot; class=&quot;new mw-userlink&quot; title=&quot;用户:WikiAdmin（页面不存在）&quot;&gt;&lt;bdi&gt;WikiAdmin&lt;/bdi&gt;&lt;/a&gt;上传&lt;a href=&quot;/wiki/%E6%96%87%E4%BB%B6:Lo.png&quot; title=&quot;文件:Lo.png&quot;&gt;文件:Lo.png&lt;/a&gt; == 摘要 == 从旧 Fandom Unimage Wiki 迁移图片&lt;/p&gt;
&lt;p&gt;&lt;b&gt;新页面&lt;/b&gt;&lt;/p&gt;&lt;div&gt;&lt;/div&gt;</description>
			<pubDate>Mon, 31 Aug 2026 12:23:21 GMT</pubDate>
			<dc:creator>WikiAdmin</dc:creator>
			<comments>https://unimage.wcnm.pw/wiki/%E6%96%87%E4%BB%B6%E8%AE%A8%E8%AE%BA:Lo.png</comments>
		</item>
		<item>
			<title>文件:Coronation.png</title>
			<link>https://unimage.wcnm.pw/index.php?title=%E6%96%87%E4%BB%B6:Coronation.png&amp;diff=696&amp;oldid=0</link>
			<guid isPermaLink="false">https://unimage.wcnm.pw/index.php?title=%E6%96%87%E4%BB%B6:Coronation.png&amp;diff=696&amp;oldid=0</guid>
			<description>&lt;p&gt;&lt;a href=&quot;/index.php?title=%E7%94%A8%E6%88%B7:WikiAdmin&amp;amp;action=edit&amp;amp;redlink=1&quot; class=&quot;new mw-userlink&quot; title=&quot;用户:WikiAdmin（页面不存在）&quot;&gt;&lt;bdi&gt;WikiAdmin&lt;/bdi&gt;&lt;/a&gt;上传&lt;a href=&quot;/wiki/%E6%96%87%E4%BB%B6:Coronation.png&quot; title=&quot;文件:Coronation.png&quot;&gt;文件:Coronation.png&lt;/a&gt; == 摘要 == 从旧 Fandom Unimage Wiki 迁移图片&lt;/p&gt;
&lt;p&gt;&lt;b&gt;新页面&lt;/b&gt;&lt;/p&gt;&lt;div&gt;&lt;/div&gt;</description>
			<pubDate>Mon, 31 Aug 2026 12:23:21 GMT</pubDate>
			<dc:creator>WikiAdmin</dc:creator>
			<comments>https://unimage.wcnm.pw/wiki/%E6%96%87%E4%BB%B6%E8%AE%A8%E8%AE%BA:Coronation.png</comments>
		</item>
		<item>
			<title>文件:Tg.png</title>
			<link>https://unimage.wcnm.pw/index.php?title=%E6%96%87%E4%BB%B6:Tg.png&amp;diff=698&amp;oldid=0</link>
			<guid isPermaLink="false">https://unimage.wcnm.pw/index.php?title=%E6%96%87%E4%BB%B6:Tg.png&amp;diff=698&amp;oldid=0</guid>
			<description>&lt;p&gt;&lt;a href=&quot;/index.php?title=%E7%94%A8%E6%88%B7:WikiAdmin&amp;amp;action=edit&amp;amp;redlink=1&quot; class=&quot;new mw-userlink&quot; title=&quot;用户:WikiAdmin（页面不存在）&quot;&gt;&lt;bdi&gt;WikiAdmin&lt;/bdi&gt;&lt;/a&gt;上传&lt;a href=&quot;/wiki/%E6%96%87%E4%BB%B6:Tg.png&quot; title=&quot;文件:Tg.png&quot;&gt;文件:Tg.png&lt;/a&gt; == 摘要 == 从旧 Fandom Unimage Wiki 迁移图片&lt;/p&gt;
&lt;p&gt;&lt;b&gt;新页面&lt;/b&gt;&lt;/p&gt;&lt;div&gt;&lt;/div&gt;</description>
			<pubDate>Mon, 31 Aug 2026 12:23:21 GMT</pubDate>
			<dc:creator>WikiAdmin</dc:creator>
			<comments>https://unimage.wcnm.pw/wiki/%E6%96%87%E4%BB%B6%E8%AE%A8%E8%AE%BA:Tg.png</comments>
		</item>
		<item>
			<title>文件:Thousand.png</title>
			<link>https://unimage.wcnm.pw/index.php?title=%E6%96%87%E4%BB%B6:Thousand.png&amp;diff=692&amp;oldid=0</link>
			<guid isPermaLink="false">https://unimage.wcnm.pw/index.php?title=%E6%96%87%E4%BB%B6:Thousand.png&amp;diff=692&amp;oldid=0</guid>
			<description>&lt;p&gt;&lt;a href=&quot;/index.php?title=%E7%94%A8%E6%88%B7:WikiAdmin&amp;amp;action=edit&amp;amp;redlink=1&quot; class=&quot;new mw-userlink&quot; title=&quot;用户:WikiAdmin（页面不存在）&quot;&gt;&lt;bdi&gt;WikiAdmin&lt;/bdi&gt;&lt;/a&gt;上传&lt;a href=&quot;/wiki/%E6%96%87%E4%BB%B6:Thousand.png&quot; title=&quot;文件:Thousand.png&quot;&gt;文件:Thousand.png&lt;/a&gt; == 摘要 == 从旧 Fandom Unimage Wiki 迁移图片&lt;/p&gt;
&lt;p&gt;&lt;b&gt;新页面&lt;/b&gt;&lt;/p&gt;&lt;div&gt;&lt;/div&gt;</description>
			<pubDate>Mon, 31 Aug 2026 12:23:20 GMT</pubDate>
			<dc:creator>WikiAdmin</dc:creator>
			<comments>https://unimage.wcnm.pw/wiki/%E6%96%87%E4%BB%B6%E8%AE%A8%E8%AE%BA:Thousand.png</comments>
		</item>
		<item>
			<title>文件:Void1.png</title>
			<link>https://unimage.wcnm.pw/index.php?title=%E6%96%87%E4%BB%B6:Void1.png&amp;diff=691&amp;oldid=0</link>
			<guid isPermaLink="false">https://unimage.wcnm.pw/index.php?title=%E6%96%87%E4%BB%B6:Void1.png&amp;diff=691&amp;oldid=0</guid>
			<description>&lt;p&gt;&lt;a href=&quot;/index.php?title=%E7%94%A8%E6%88%B7:WikiAdmin&amp;amp;action=edit&amp;amp;redlink=1&quot; class=&quot;new mw-userlink&quot; title=&quot;用户:WikiAdmin（页面不存在）&quot;&gt;&lt;bdi&gt;WikiAdmin&lt;/bdi&gt;&lt;/a&gt;上传&lt;a href=&quot;/wiki/%E6%96%87%E4%BB%B6:Void1.png&quot; title=&quot;文件:Void1.png&quot;&gt;文件:Void1.png&lt;/a&gt; == 摘要 == 从旧 Fandom Unimage Wiki 迁移图片&lt;/p&gt;
&lt;p&gt;&lt;b&gt;新页面&lt;/b&gt;&lt;/p&gt;&lt;div&gt;&lt;/div&gt;</description>
			<pubDate>Mon, 31 Aug 2026 12:23:20 GMT</pubDate>
			<dc:creator>WikiAdmin</dc:creator>
			<comments>https://unimage.wcnm.pw/wiki/%E6%96%87%E4%BB%B6%E8%AE%A8%E8%AE%BA:Void1.png</comments>
		</item>
		<item>
			<title>文件:Scarp.png</title>
			<link>https://unimage.wcnm.pw/index.php?title=%E6%96%87%E4%BB%B6:Scarp.png&amp;diff=690&amp;oldid=0</link>
			<guid isPermaLink="false">https://unimage.wcnm.pw/index.php?title=%E6%96%87%E4%BB%B6:Scarp.png&amp;diff=690&amp;oldid=0</guid>
			<description>&lt;p&gt;&lt;a href=&quot;/index.php?title=%E7%94%A8%E6%88%B7:WikiAdmin&amp;amp;action=edit&amp;amp;redlink=1&quot; class=&quot;new mw-userlink&quot; title=&quot;用户:WikiAdmin（页面不存在）&quot;&gt;&lt;bdi&gt;WikiAdmin&lt;/bdi&gt;&lt;/a&gt;上传&lt;a href=&quot;/wiki/%E6%96%87%E4%BB%B6:Scarp.png&quot; title=&quot;文件:Scarp.png&quot;&gt;文件:Scarp.png&lt;/a&gt; == 摘要 == 从旧 Fandom Unimage Wiki 迁移图片&lt;/p&gt;
&lt;p&gt;&lt;b&gt;新页面&lt;/b&gt;&lt;/p&gt;&lt;div&gt;&lt;/div&gt;</description>
			<pubDate>Mon, 31 Aug 2026 12:23:20 GMT</pubDate>
			<dc:creator>WikiAdmin</dc:creator>
			<comments>https://unimage.wcnm.pw/wiki/%E6%96%87%E4%BB%B6%E8%AE%A8%E8%AE%BA:Scarp.png</comments>
		</item>
		<item>
			<title>文件:地纪.png</title>
			<link>https://unimage.wcnm.pw/index.php?title=%E6%96%87%E4%BB%B6:%E5%9C%B0%E7%BA%AA.png&amp;diff=689&amp;oldid=0</link>
			<guid isPermaLink="false">https://unimage.wcnm.pw/index.php?title=%E6%96%87%E4%BB%B6:%E5%9C%B0%E7%BA%AA.png&amp;diff=689&amp;oldid=0</guid>
			<description>&lt;p&gt;&lt;a href=&quot;/index.php?title=%E7%94%A8%E6%88%B7:WikiAdmin&amp;amp;action=edit&amp;amp;redlink=1&quot; class=&quot;new mw-userlink&quot; title=&quot;用户:WikiAdmin（页面不存在）&quot;&gt;&lt;bdi&gt;WikiAdmin&lt;/bdi&gt;&lt;/a&gt;上传&lt;a href=&quot;/wiki/%E6%96%87%E4%BB%B6:%E5%9C%B0%E7%BA%AA.png&quot; title=&quot;文件:地纪.png&quot;&gt;文件:地纪.png&lt;/a&gt; == 摘要 == 从旧 Fandom Unimage Wiki 迁移图片&lt;/p&gt;
&lt;p&gt;&lt;b&gt;新页面&lt;/b&gt;&lt;/p&gt;&lt;div&gt;&lt;/div&gt;</description>
			<pubDate>Mon, 31 Aug 2026 12:23:20 GMT</pubDate>
			<dc:creator>WikiAdmin</dc:creator>
			<comments>https://unimage.wcnm.pw/wiki/%E6%96%87%E4%BB%B6%E8%AE%A8%E8%AE%BA:%E5%9C%B0%E7%BA%AA.png</comments>
		</item>
		<item>
			<title>文件:Iron axe.png</title>
			<link>https://unimage.wcnm.pw/index.php?title=%E6%96%87%E4%BB%B6:Iron_axe.png&amp;diff=688&amp;oldid=0</link>
			<guid isPermaLink="false">https://unimage.wcnm.pw/index.php?title=%E6%96%87%E4%BB%B6:Iron_axe.png&amp;diff=688&amp;oldid=0</guid>
			<description>&lt;p&gt;&lt;a href=&quot;/index.php?title=%E7%94%A8%E6%88%B7:WikiAdmin&amp;amp;action=edit&amp;amp;redlink=1&quot; class=&quot;new mw-userlink&quot; title=&quot;用户:WikiAdmin（页面不存在）&quot;&gt;&lt;bdi&gt;WikiAdmin&lt;/bdi&gt;&lt;/a&gt;上传&lt;a href=&quot;/wiki/%E6%96%87%E4%BB%B6:Iron_axe.png&quot; title=&quot;文件:Iron axe.png&quot;&gt;文件:Iron axe.png&lt;/a&gt; == 摘要 == 从旧 Fandom Unimage Wiki 迁移图片&lt;/p&gt;
&lt;p&gt;&lt;b&gt;新页面&lt;/b&gt;&lt;/p&gt;&lt;div&gt;&lt;/div&gt;</description>
			<pubDate>Mon, 31 Aug 2026 12:23:20 GMT</pubDate>
			<dc:creator>WikiAdmin</dc:creator>
			<comments>https://unimage.wcnm.pw/wiki/%E6%96%87%E4%BB%B6%E8%AE%A8%E8%AE%BA:Iron_axe.png</comments>
		</item>
		<item>
			<title>文件:浅映旗帜.png</title>
			<link>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&amp;oldid=0</link>
			<guid isPermaLink="false">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&amp;oldid=0</guid>
			<description>&lt;p&gt;&lt;a href=&quot;/index.php?title=%E7%94%A8%E6%88%B7:WikiAdmin&amp;amp;action=edit&amp;amp;redlink=1&quot; class=&quot;new mw-userlink&quot; title=&quot;用户:WikiAdmin（页面不存在）&quot;&gt;&lt;bdi&gt;WikiAdmin&lt;/bdi&gt;&lt;/a&gt;上传&lt;a href=&quot;/wiki/%E6%96%87%E4%BB%B6:%E6%B5%85%E6%98%A0%E6%97%97%E5%B8%9C.png&quot; title=&quot;文件:浅映旗帜.png&quot;&gt;文件:浅映旗帜.png&lt;/a&gt; == 摘要 == 从旧 Fandom Unimage Wiki 迁移图片&lt;/p&gt;
&lt;p&gt;&lt;b&gt;新页面&lt;/b&gt;&lt;/p&gt;&lt;div&gt;&lt;/div&gt;</description>
			<pubDate>Mon, 31 Aug 2026 12:23:19 GMT</pubDate>
			<dc:creator>WikiAdmin</dc:creator>
			<comments>https://unimage.wcnm.pw/wiki/%E6%96%87%E4%BB%B6%E8%AE%A8%E8%AE%BA:%E6%B5%85%E6%98%A0%E6%97%97%E5%B8%9C.png</comments>
		</item>
		<item>
			<title>文件:Slime shovel.png</title>
			<link>https://unimage.wcnm.pw/index.php?title=%E6%96%87%E4%BB%B6:Slime_shovel.png&amp;diff=682&amp;oldid=0</link>
			<guid isPermaLink="false">https://unimage.wcnm.pw/index.php?title=%E6%96%87%E4%BB%B6:Slime_shovel.png&amp;diff=682&amp;oldid=0</guid>
			<description>&lt;p&gt;&lt;a href=&quot;/index.php?title=%E7%94%A8%E6%88%B7:WikiAdmin&amp;amp;action=edit&amp;amp;redlink=1&quot; class=&quot;new mw-userlink&quot; title=&quot;用户:WikiAdmin（页面不存在）&quot;&gt;&lt;bdi&gt;WikiAdmin&lt;/bdi&gt;&lt;/a&gt;上传&lt;a href=&quot;/wiki/%E6%96%87%E4%BB%B6:Slime_shovel.png&quot; title=&quot;文件:Slime shovel.png&quot;&gt;文件:Slime shovel.png&lt;/a&gt; == 摘要 == 从旧 Fandom Unimage Wiki 迁移图片&lt;/p&gt;
&lt;p&gt;&lt;b&gt;新页面&lt;/b&gt;&lt;/p&gt;&lt;div&gt;&lt;/div&gt;</description>
			<pubDate>Mon, 31 Aug 2026 12:23:19 GMT</pubDate>
			<dc:creator>WikiAdmin</dc:creator>
			<comments>https://unimage.wcnm.pw/wiki/%E6%96%87%E4%BB%B6%E8%AE%A8%E8%AE%BA:Slime_shovel.png</comments>
		</item>
		<item>
			<title>文件:Fhll.png</title>
			<link>https://unimage.wcnm.pw/index.php?title=%E6%96%87%E4%BB%B6:Fhll.png&amp;diff=683&amp;oldid=0</link>
			<guid isPermaLink="false">https://unimage.wcnm.pw/index.php?title=%E6%96%87%E4%BB%B6:Fhll.png&amp;diff=683&amp;oldid=0</guid>
			<description>&lt;p&gt;&lt;a href=&quot;/index.php?title=%E7%94%A8%E6%88%B7:WikiAdmin&amp;amp;action=edit&amp;amp;redlink=1&quot; class=&quot;new mw-userlink&quot; title=&quot;用户:WikiAdmin（页面不存在）&quot;&gt;&lt;bdi&gt;WikiAdmin&lt;/bdi&gt;&lt;/a&gt;上传&lt;a href=&quot;/wiki/%E6%96%87%E4%BB%B6:Fhll.png&quot; title=&quot;文件:Fhll.png&quot;&gt;文件:Fhll.png&lt;/a&gt; == 摘要 == 从旧 Fandom Unimage Wiki 迁移图片&lt;/p&gt;
&lt;p&gt;&lt;b&gt;新页面&lt;/b&gt;&lt;/p&gt;&lt;div&gt;&lt;/div&gt;</description>
			<pubDate>Mon, 31 Aug 2026 12:23:19 GMT</pubDate>
			<dc:creator>WikiAdmin</dc:creator>
			<comments>https://unimage.wcnm.pw/wiki/%E6%96%87%E4%BB%B6%E8%AE%A8%E8%AE%BA:Fhll.png</comments>
		</item>
		<item>
			<title>文件:Zs3.gif</title>
			<link>https://unimage.wcnm.pw/index.php?title=%E6%96%87%E4%BB%B6:Zs3.gif&amp;diff=685&amp;oldid=0</link>
			<guid isPermaLink="false">https://unimage.wcnm.pw/index.php?title=%E6%96%87%E4%BB%B6:Zs3.gif&amp;diff=685&amp;oldid=0</guid>
			<description>&lt;p&gt;&lt;a href=&quot;/index.php?title=%E7%94%A8%E6%88%B7:WikiAdmin&amp;amp;action=edit&amp;amp;redlink=1&quot; class=&quot;new mw-userlink&quot; title=&quot;用户:WikiAdmin（页面不存在）&quot;&gt;&lt;bdi&gt;WikiAdmin&lt;/bdi&gt;&lt;/a&gt;上传&lt;a href=&quot;/wiki/%E6%96%87%E4%BB%B6:Zs3.gif&quot; title=&quot;文件:Zs3.gif&quot;&gt;文件:Zs3.gif&lt;/a&gt; == 摘要 == 从旧 Fandom Unimage Wiki 迁移图片&lt;/p&gt;
&lt;p&gt;&lt;b&gt;新页面&lt;/b&gt;&lt;/p&gt;&lt;div&gt;&lt;/div&gt;</description>
			<pubDate>Mon, 31 Aug 2026 12:23:19 GMT</pubDate>
			<dc:creator>WikiAdmin</dc:creator>
			<comments>https://unimage.wcnm.pw/wiki/%E6%96%87%E4%BB%B6%E8%AE%A8%E8%AE%BA:Zs3.gif</comments>
		</item>
		<item>
			<title>文件:Ljdj2.png</title>
			<link>https://unimage.wcnm.pw/index.php?title=%E6%96%87%E4%BB%B6:Ljdj2.png&amp;diff=686&amp;oldid=0</link>
			<guid isPermaLink="false">https://unimage.wcnm.pw/index.php?title=%E6%96%87%E4%BB%B6:Ljdj2.png&amp;diff=686&amp;oldid=0</guid>
			<description>&lt;p&gt;&lt;a href=&quot;/index.php?title=%E7%94%A8%E6%88%B7:WikiAdmin&amp;amp;action=edit&amp;amp;redlink=1&quot; class=&quot;new mw-userlink&quot; title=&quot;用户:WikiAdmin（页面不存在）&quot;&gt;&lt;bdi&gt;WikiAdmin&lt;/bdi&gt;&lt;/a&gt;上传&lt;a href=&quot;/wiki/%E6%96%87%E4%BB%B6:Ljdj2.png&quot; title=&quot;文件:Ljdj2.png&quot;&gt;文件:Ljdj2.png&lt;/a&gt; == 摘要 == 从旧 Fandom Unimage Wiki 迁移图片&lt;/p&gt;
&lt;p&gt;&lt;b&gt;新页面&lt;/b&gt;&lt;/p&gt;&lt;div&gt;&lt;/div&gt;</description>
			<pubDate>Mon, 31 Aug 2026 12:23:19 GMT</pubDate>
			<dc:creator>WikiAdmin</dc:creator>
			<comments>https://unimage.wcnm.pw/wiki/%E6%96%87%E4%BB%B6%E8%AE%A8%E8%AE%BA:Ljdj2.png</comments>
		</item>
		<item>
			<title>文件:Lb2.png</title>
			<link>https://unimage.wcnm.pw/index.php?title=%E6%96%87%E4%BB%B6:Lb2.png&amp;diff=687&amp;oldid=0</link>
			<guid isPermaLink="false">https://unimage.wcnm.pw/index.php?title=%E6%96%87%E4%BB%B6:Lb2.png&amp;diff=687&amp;oldid=0</guid>
			<description>&lt;p&gt;&lt;a href=&quot;/index.php?title=%E7%94%A8%E6%88%B7:WikiAdmin&amp;amp;action=edit&amp;amp;redlink=1&quot; class=&quot;new mw-userlink&quot; title=&quot;用户:WikiAdmin（页面不存在）&quot;&gt;&lt;bdi&gt;WikiAdmin&lt;/bdi&gt;&lt;/a&gt;上传&lt;a href=&quot;/wiki/%E6%96%87%E4%BB%B6:Lb2.png&quot; title=&quot;文件:Lb2.png&quot;&gt;文件:Lb2.png&lt;/a&gt; == 摘要 == 从旧 Fandom Unimage Wiki 迁移图片&lt;/p&gt;
&lt;p&gt;&lt;b&gt;新页面&lt;/b&gt;&lt;/p&gt;&lt;div&gt;&lt;/div&gt;</description>
			<pubDate>Mon, 31 Aug 2026 12:23:19 GMT</pubDate>
			<dc:creator>WikiAdmin</dc:creator>
			<comments>https://unimage.wcnm.pw/wiki/%E6%96%87%E4%BB%B6%E8%AE%A8%E8%AE%BA:Lb2.png</comments>
		</item>
		<item>
			<title>文件:三足金乌.png</title>
			<link>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&amp;oldid=0</link>
			<guid isPermaLink="false">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&amp;oldid=0</guid>
			<description>&lt;p&gt;&lt;a href=&quot;/index.php?title=%E7%94%A8%E6%88%B7:WikiAdmin&amp;amp;action=edit&amp;amp;redlink=1&quot; class=&quot;new mw-userlink&quot; title=&quot;用户:WikiAdmin（页面不存在）&quot;&gt;&lt;bdi&gt;WikiAdmin&lt;/bdi&gt;&lt;/a&gt;上传&lt;a href=&quot;/wiki/%E6%96%87%E4%BB%B6:%E4%B8%89%E8%B6%B3%E9%87%91%E4%B9%8C.png&quot; title=&quot;文件:三足金乌.png&quot;&gt;文件:三足金乌.png&lt;/a&gt; == 摘要 == 从旧 Fandom Unimage Wiki 迁移图片&lt;/p&gt;
&lt;p&gt;&lt;b&gt;新页面&lt;/b&gt;&lt;/p&gt;&lt;div&gt;&lt;/div&gt;</description>
			<pubDate>Mon, 31 Aug 2026 12:23:18 GMT</pubDate>
			<dc:creator>WikiAdmin</dc:creator>
			<comments>https://unimage.wcnm.pw/wiki/%E6%96%87%E4%BB%B6%E8%AE%A8%E8%AE%BA:%E4%B8%89%E8%B6%B3%E9%87%91%E4%B9%8C.png</comments>
		</item>
</channel></rss>