<?xml version="1.0"?>
<feed xmlns="http://www.w3.org/2005/Atom" xml:lang="zh-Hans">
	<id>https://wiki.dolshipmaker.vip/index.php?action=history&amp;feed=atom&amp;title=%E6%A8%A1%E5%9D%97%3ALang</id>
	<title>模块:Lang - 版本历史</title>
	<link rel="self" type="application/atom+xml" href="https://wiki.dolshipmaker.vip/index.php?action=history&amp;feed=atom&amp;title=%E6%A8%A1%E5%9D%97%3ALang"/>
	<link rel="alternate" type="text/html" href="https://wiki.dolshipmaker.vip/index.php?title=%E6%A8%A1%E5%9D%97:Lang&amp;action=history"/>
	<updated>2026-04-22T16:50:02Z</updated>
	<subtitle>本wiki上该页面的版本历史</subtitle>
	<generator>MediaWiki 1.43.0</generator>
	<entry>
		<id>https://wiki.dolshipmaker.vip/index.php?title=%E6%A8%A1%E5%9D%97:Lang&amp;diff=55508&amp;oldid=prev</id>
		<title>2026年4月22日 (三) 12:37 Bb1980</title>
		<link rel="alternate" type="text/html" href="https://wiki.dolshipmaker.vip/index.php?title=%E6%A8%A1%E5%9D%97:Lang&amp;diff=55508&amp;oldid=prev"/>
		<updated>2026-04-22T12:37:09Z</updated>

		<summary type="html">&lt;p&gt;&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年4月22日 (三) 20:37的版本&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-l20&quot;&gt;第20行：&lt;/td&gt;
&lt;td colspan=&quot;2&quot; class=&quot;diff-lineno&quot;&gt;第20行：&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;     [&amp;#039;技能&amp;#039;]    = &amp;#039;skill-lang&amp;#039;,&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;     [&amp;#039;技能&amp;#039;]    = &amp;#039;skill-lang&amp;#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;     [&amp;#039;海域&amp;#039;]    = &amp;#039;sea-lang&amp;#039;,&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;     [&amp;#039;海域&amp;#039;]    = &amp;#039;sea-lang&amp;#039;,&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td colspan=&quot;2&quot; class=&quot;diff-side-deleted&quot;&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;&lt;ins style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;    [&#039;道具&#039;]    = &#039;item-lang&#039;,&lt;/ins&gt;&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td colspan=&quot;2&quot; class=&quot;diff-side-deleted&quot;&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;&lt;ins style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;    [&#039;装备&#039;]    = &#039;equip-lang&#039;,&lt;/ins&gt;&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td colspan=&quot;2&quot; class=&quot;diff-side-deleted&quot;&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;&lt;ins style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;    [&#039;船首像&#039;]  = &#039;item-lang&#039;,&lt;/ins&gt;&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td colspan=&quot;2&quot; class=&quot;diff-side-deleted&quot;&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;&lt;ins style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;    [&#039;船徽章&#039;]  = &#039;item-lang&#039;,&lt;/ins&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;}&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 colspan=&quot;2&quot; class=&quot;diff-lineno&quot; id=&quot;mw-diff-left-l54&quot;&gt;第54行：&lt;/td&gt;
&lt;td colspan=&quot;2&quot; class=&quot;diff-lineno&quot;&gt;第58行：&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;     local prefix   = frame.args[&amp;#039;prefix&amp;#039;] or &amp;#039;&amp;#039;&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 prefix   = frame.args[&amp;#039;prefix&amp;#039;] or &amp;#039;&amp;#039;&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td colspan=&quot;2&quot; class=&quot;diff-side-deleted&quot;&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;&lt;ins style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;    local suffix   = frame.args[&#039;suffix&#039;] or &#039;&#039;&lt;/ins&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;     local nolink   = frame.args[&amp;#039;nolink&amp;#039;] or &amp;#039;&amp;#039;&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 nolink   = frame.args[&amp;#039;nolink&amp;#039;] or &amp;#039;&amp;#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;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-l81&quot;&gt;第81行：&lt;/td&gt;
&lt;td colspan=&quot;2&quot; class=&quot;diff-lineno&quot;&gt;第86行：&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;     if nolink == &amp;#039;1&amp;#039; then&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;     if nolink == &amp;#039;1&amp;#039; then&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;         return prefix .. spans&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;         return prefix .. spans &lt;ins style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;.. suffix&lt;/ins&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;     else&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;     else&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;         return prefix .. &#039;[[&#039; .. pagePath .. &#039;|&#039; .. spans .. &#039;]]&#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;         return prefix .. &#039;[[&#039; .. pagePath .. &#039;|&#039; .. spans &lt;ins style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;.. suffix &lt;/ins&gt;.. &#039;]]&#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;     end&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;     end&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;end&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;end&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;/table&gt;</summary>
		<author><name>Bb1980</name></author>
	</entry>
	<entry>
		<id>https://wiki.dolshipmaker.vip/index.php?title=%E6%A8%A1%E5%9D%97:Lang&amp;diff=55497&amp;oldid=prev</id>
		<title>Bb1980：​创建页面，内容为“-- Module:Lang -- 用途：给定一个页面路径（如 &quot;交易品/葡萄酒&quot;、&quot;城市/塞维利亚&quot;）， --       读取该页面的 wikitext，解析 |zh= |zh-tw= |ja= |en= 字段， --       生成带多语言 span 的链接 HTML。 -- -- 调用方式： --   {{#invoke:Lang|link|交易品/葡萄酒}} --   {{#invoke:Lang|link|城市/塞维利亚|prefix=书库：}} --   {{#invoke:Lang|link|交易品/葡萄酒|nolink=1}} --   {{#invoke:Lang|links|技能/地…”</title>
		<link rel="alternate" type="text/html" href="https://wiki.dolshipmaker.vip/index.php?title=%E6%A8%A1%E5%9D%97:Lang&amp;diff=55497&amp;oldid=prev"/>
		<updated>2026-04-22T12:26:20Z</updated>

		<summary type="html">&lt;p&gt;创建页面，内容为“-- Module:Lang -- 用途：给定一个页面路径（如 &amp;quot;交易品/葡萄酒&amp;quot;、&amp;quot;城市/塞维利亚&amp;quot;）， --       读取该页面的 wikitext，解析 |zh= |zh-tw= |ja= |en= 字段， --       生成带多语言 span 的链接 HTML。 -- -- 调用方式： --   {{#invoke:Lang|link|交易品/葡萄酒}} --   {{#invoke:Lang|link|城市/塞维利亚|prefix=书库：}} --   {{#invoke:Lang|link|交易品/葡萄酒|nolink=1}} --   {{#invoke:Lang|links|技能/地…”&lt;/p&gt;
&lt;p&gt;&lt;b&gt;新页面&lt;/b&gt;&lt;/p&gt;&lt;div&gt;-- Module:Lang&lt;br /&gt;
-- 用途：给定一个页面路径（如 &amp;quot;交易品/葡萄酒&amp;quot;、&amp;quot;城市/塞维利亚&amp;quot;），&lt;br /&gt;
--       读取该页面的 wikitext，解析 |zh= |zh-tw= |ja= |en= 字段，&lt;br /&gt;
--       生成带多语言 span 的链接 HTML。&lt;br /&gt;
--&lt;br /&gt;
-- 调用方式：&lt;br /&gt;
--   {{#invoke:Lang|link|交易品/葡萄酒}}&lt;br /&gt;
--   {{#invoke:Lang|link|城市/塞维利亚|prefix=书库：}}&lt;br /&gt;
--   {{#invoke:Lang|link|交易品/葡萄酒|nolink=1}}&lt;br /&gt;
--   {{#invoke:Lang|links|技能/地理学 技能/生态调查}}&lt;br /&gt;
&lt;br /&gt;
local p = {}&lt;br /&gt;
&lt;br /&gt;
-- 页面路径前缀 → CSS class 前缀映射&lt;br /&gt;
local CLASS_MAP = {&lt;br /&gt;
    [&amp;#039;交易品&amp;#039;]  = &amp;#039;goods-lang&amp;#039;,&lt;br /&gt;
    [&amp;#039;城市&amp;#039;]    = &amp;#039;city-lang&amp;#039;,&lt;br /&gt;
    [&amp;#039;发现物&amp;#039;]  = &amp;#039;discovery-lang&amp;#039;,&lt;br /&gt;
    [&amp;#039;书库地图&amp;#039;] = &amp;#039;map-lang&amp;#039;,&lt;br /&gt;
    [&amp;#039;技能&amp;#039;]    = &amp;#039;skill-lang&amp;#039;,&lt;br /&gt;
    [&amp;#039;海域&amp;#039;]    = &amp;#039;sea-lang&amp;#039;,&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
-- 从 wikitext 中解析单个参数值&lt;br /&gt;
local function parseParam( wikitext, key )&lt;br /&gt;
    -- 匹配 |key=value，value 到下一个 | 或 }} 为止&lt;br /&gt;
    local val = wikitext:match( &amp;#039;|&amp;#039; .. key .. &amp;#039;=([^|{}]*)&amp;#039; )&lt;br /&gt;
    if val then&lt;br /&gt;
        val = val:match( &amp;#039;^%s*(.-)%s*$&amp;#039; ) -- trim&lt;br /&gt;
    end&lt;br /&gt;
    return val or &amp;#039;&amp;#039;&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
-- 生成多语言 span HTML（不含链接）&lt;br /&gt;
local function makeSpans( cssPrefix, zh, zhtw, ja, en )&lt;br /&gt;
    local function span( lang, text, hidden )&lt;br /&gt;
        local style = hidden and &amp;#039; style=&amp;quot;display:none&amp;quot;&amp;#039; or &amp;#039;&amp;#039;&lt;br /&gt;
        return string.format(&lt;br /&gt;
            &amp;#039;&amp;lt;span class=&amp;quot;%s %s-%s&amp;quot;%s&amp;gt;%s&amp;lt;/span&amp;gt;&amp;#039;,&lt;br /&gt;
            cssPrefix, cssPrefix, lang, style, text&lt;br /&gt;
        )&lt;br /&gt;
    end&lt;br /&gt;
    return span(&amp;#039;zh&amp;#039;, zh, false)&lt;br /&gt;
        .. span(&amp;#039;zh-tw&amp;#039;, zhtw ~= &amp;#039;&amp;#039; and zhtw or zh, true)&lt;br /&gt;
        .. span(&amp;#039;ja&amp;#039;,    ja   ~= &amp;#039;&amp;#039; and ja   or zh, true)&lt;br /&gt;
        .. span(&amp;#039;en&amp;#039;,    en   ~= &amp;#039;&amp;#039; and en   or zh, true)&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
-- 主函数：生成带链接的多语言 span&lt;br /&gt;
function p.link( frame )&lt;br /&gt;
    local pagePath = frame.args[1] or &amp;#039;&amp;#039;&lt;br /&gt;
    pagePath = pagePath:match( &amp;#039;^%s*(.-)%s*$&amp;#039; )&lt;br /&gt;
    if pagePath == &amp;#039;&amp;#039; then return &amp;#039;&amp;#039; end&lt;br /&gt;
&lt;br /&gt;
    local prefix   = frame.args[&amp;#039;prefix&amp;#039;] or &amp;#039;&amp;#039;&lt;br /&gt;
    local nolink   = frame.args[&amp;#039;nolink&amp;#039;] or &amp;#039;&amp;#039;&lt;br /&gt;
&lt;br /&gt;
    -- 取页面前缀（斜杠前的部分）&lt;br /&gt;
    local ns = pagePath:match( &amp;#039;^([^/]+)/&amp;#039; ) or &amp;#039;&amp;#039;&lt;br /&gt;
    local cssPrefix = CLASS_MAP[ ns ] or &amp;#039;lang&amp;#039;&lt;br /&gt;
&lt;br /&gt;
    -- 读取目标页面 wikitext&lt;br /&gt;
    local title = mw.title.new( pagePath )&lt;br /&gt;
    if not title then return &amp;#039;[[&amp;#039; .. pagePath .. &amp;#039;]]&amp;#039; end&lt;br /&gt;
&lt;br /&gt;
    local wikitext = title:getContent() or &amp;#039;&amp;#039;&lt;br /&gt;
&lt;br /&gt;
    -- 解析多语言字段&lt;br /&gt;
    local zh   = parseParam( wikitext, &amp;#039;zh&amp;#039; )&lt;br /&gt;
    local zhtw = parseParam( wikitext, &amp;#039;zh%-tw&amp;#039; )&lt;br /&gt;
    local ja   = parseParam( wikitext, &amp;#039;ja&amp;#039; )&lt;br /&gt;
    local en   = parseParam( wikitext, &amp;#039;en&amp;#039; )&lt;br /&gt;
&lt;br /&gt;
    -- 没有 zh 字段说明页面不存在或格式不对，回退到红链&lt;br /&gt;
    if zh == &amp;#039;&amp;#039; then&lt;br /&gt;
        local name = pagePath:match( &amp;#039;/(.+)$&amp;#039; ) or pagePath&lt;br /&gt;
        zh = name&lt;br /&gt;
    end&lt;br /&gt;
&lt;br /&gt;
    local spans = makeSpans( cssPrefix, zh, zhtw, ja, en )&lt;br /&gt;
&lt;br /&gt;
    if nolink == &amp;#039;1&amp;#039; then&lt;br /&gt;
        return prefix .. spans&lt;br /&gt;
    else&lt;br /&gt;
        return prefix .. &amp;#039;[[&amp;#039; .. pagePath .. &amp;#039;|&amp;#039; .. spans .. &amp;#039;]]&amp;#039;&lt;br /&gt;
    end&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
-- 批量生成：空格分隔多个页面路径，常用于技能列表&lt;br /&gt;
-- {{#invoke:Lang|links|技能/地理学 技能/生态调查|sep= }}&lt;br /&gt;
function p.links( frame )&lt;br /&gt;
    local input  = frame.args[1] or &amp;#039;&amp;#039;&lt;br /&gt;
    local sep    = frame.args[&amp;#039;sep&amp;#039;] or &amp;#039; &amp;#039;&lt;br /&gt;
    local nolink = frame.args[&amp;#039;nolink&amp;#039;] or &amp;#039;&amp;#039;&lt;br /&gt;
    local results = {}&lt;br /&gt;
    for path in input:gmatch( &amp;#039;%S+&amp;#039; ) do&lt;br /&gt;
        local inner = frame:callParserFunction( &amp;#039;#invoke&amp;#039;, { &amp;#039;Lang&amp;#039;, &amp;#039;link&amp;#039;, path, nolink = nolink } )&lt;br /&gt;
        -- 直接调用 p.link&lt;br /&gt;
        local f = { args = { path, nolink = nolink } }&lt;br /&gt;
        table.insert( results, p.link( f ) )&lt;br /&gt;
    end&lt;br /&gt;
    return table.concat( results, sep )&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
return p&lt;/div&gt;</summary>
		<author><name>Bb1980</name></author>
	</entry>
</feed>