PageSourceSearch

https://gowind.cloud/assets/plugins-template.html-BdtRMnoE.js

js gowind.cloud collected 2026-10-05 22:13:46 UTC 30,543 bytes, 99 lines download raw bytes

1import{_ as l,c as i,a as o,b as s,d as t,w as e,r as c,o as u,e as p}from"./app-B7HVJ7q3.js";const d={};function r(k,n){const a=c("RouteLink");return u(),i("div",null,[n[2]||(n[2]=o(`<h1 id="模板渲染与验证插件" tabindex="-1"><a class="header-anchor" href="#模板渲染与验证插件"><span>模板渲染与验证插件</span></a></h1><p>go-wind-plugins 提供模板渲染和数据验证插件,用于邮件模板、API 参数校验等场景。</p><h2 id="一、模板渲染" tabindex="-1"><a class="header-anchor" href="#一、模板渲染"><span>一、模板渲染</span></a></h2><h3 id="_1-1-适配器列表" tabindex="-1"><a class="header-anchor" href="#_1-1-适配器列表"><span>1.1 适配器列表</span></a></h3><table><thead><tr><th>适配器</th><th>导入路径</th><th>特点</th></tr></thead><tbody><tr><td>Go Template</td><td><code>plugins/template/gotemplate</code></td><td>标准库 text/html template</td></tr><tr><td>Handlebars</td><td><code>plugins/template/handlebars</code></td><td>灵活的逻辑模板</td></tr><tr><td>Jet</td><td><code>plugins/template/jet</code></td><td>高性能、继承支持</td></tr></tbody></table><h3 id="_1-2-使用方式" tabindex="-1"><a class="header-anchor" href="#_1-2-使用方式"><span>1.2 使用方式</span></a></h3><div class="language-go line-numbers-mode" data-highlighter="prismjs" data-ext="go"><pre><code><span class="line"><span class="token keyword">import</span> templatePlugin <span class="token string">&quot;github.com/tx7do/go-wind-plugins/template/gotemplate&quot;</span></span>
2<span class="line"></span>
3<span class="line">renderer <span class="token operator">:=</span> templatePlugin<span class="token punctuation">.</span><span class="token function">New</span><span class="token punctuation">(</span></span>
4<span class="line">    templatePlugin<span class="token punctuation">.</span><span class="token function">WithRoot</span><span class="token punctuation">(</span><span class="token string">&quot;./templates&quot;</span><span class="token punctuation">)</span><span class="token punctuation">,</span></span>
5<span class="line">    templatePlugin<span class="token punctuation">.</span><span class="token function">WithSuffix</span><span class="token punctuation">(</span><span class="token string">&quot;.html&quot;</span><span class="token punctuation">)</span><span class="token punctuation">,</span></span>
6<span class="line">    templatePlugin<span class="token punctuation">.</span><span class="token function">WithFuncMap</span><span class="token punctuation">(</span>template<span class="token punctuation">.</span>FuncMap<span class="token punctuation">{</span></span>
7<span class="line">        <span class="token string">&quot;formatTime&quot;</span><span class="token punctuation">:</span> formatTime<span class="token punctuation">,</span></span>
8<span class="line">        <span class="token string">&quot;currency&quot;</span><span class="token punctuation">:</span>   formatCurrency<span class="token punctuation">,</span></span>
9<span class="line">    <span class="token punctuation">}</span><span class="token punctuation">)</span><span class="token punctuation">,</span></span>
10<span class="line"><span class="token punctuation">)</span></span>
11<span class="line"></span>
12<span class="line"><span class="token comment">// 渲染模板</span></span>
13<span class="line">output<span class="token punctuation">,</span> <span class="token boolean">_</span> <span class="token operator">:=</span> renderer<span class="token punctuation">.</span><span class="token function">Render</span><span class="token punctuation">(</span><span class="token string">&quot;email/welcome&quot;</span><span class="token punctuation">,</span> <span class="token keyword">map</span><span class="token punctuation">[</span><span class="token builtin">string</span><span class="token punctuation">]</span><span class="token keyword">interface</span><span class="token punctuation">{</span><span class="token punctuation">}</span><span class="token punctuation">{</span></span>
14<span class="line">    <span class="token string">&quot;UserName&quot;</span><span class="token punctuation">:</span> <span class="token string">&quot;Alice&quot;</span><span class="token punctuation">,</span></span>
15<span class="line">    <span class="token string">&quot;VerifyURL&quot;</span><span class="token punctuation">:</span> <span class="token string">&quot;https://app.example.com/verify?token=abc&quot;</span><span class="token punctuation">,</span></span>
16<span class="line"><span class="token punctuation">}</span><span class="token punctuation">)</span></span>
17<span class="line"></span></code></pre><div class="line-numbers" aria-hidden="true" style="counter-reset:line-number 0;"><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div></div></div><h3 id="_1-3-模板继承-jet" tabindex="-1"><a class="header-anchor" href="#_1-3-模板继承-jet"><span>1.3 模板继承(Jet)</span></a></h3><div class="language-go line-numbers-mode" data-highlighter="prismjs" data-ext="go"><pre><code><span class="line"><span class="token keyword">
17import</span> jetPlugin <span class="token string">&quot;github.com/tx7do/go-wind-plugins/template/jet&quot;</span></span>
18<span class="line"></span>
19<span class="line">renderer <span class="token operator">:=</span> jetPlugin<span class="token punctuation">.</span><span class="token function">New</span><span class="token punctuation">(</span></span>
20<span class="line">    jetPlugin<span class="token punctuation">.</span><span class="token function">WithRoot</span><span class="token punctuation">(</span><span class="token string">&quot;./views&quot;</span><span class="token punctuation">)</span><span class="token punctuation">,</span></span>
21<span class="line">    jetPlugin<span class="token punctuation">.</span><span class="token function">WithDevelopmentMode</span><span class="token punctuation">(</span><span class="token boolean">true</span><span class="token punctuation">)</span><span class="token punctuation">,</span>     <span class="token comment">// 热重载</span></span>
22<span class="line"><span class="token punctuation">)</span></span>
23<span class="line"></span></code></pre><div class="line-numbers" aria-hidden="true" style="counter-reset:line-number 0;"><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div></div></div><div class="language-jet line-numbers-mode" data-highlighter="prismjs" data-ext="jet"><pre><code><span class="line">// views/layout.jet</span>
24<span class="line">{{block content()}}{{end}}</span>
25<span class="line"></span>
26<span class="line">// views/page.jet</span>
27<span class="line">{{extends &quot;layout.jet&quot;}}</span>
28<span class="line">{{block content()}}</span>
29<span class="line">  &lt;h1&gt;{{.Title}}&lt;/h1&gt;</span>
30<span class="line">  &lt;p&gt;{{.Content}}&lt;/p&gt;</span>
31<span class="line">{{end}}</span>
32<span class="line"></span></code></pre><div class="line-numbers" aria-hidden="true" style="counter-reset:line-number 0;"><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div></div></div><h2 id="二、数据验证" tabindex="-1"><a class="header-anchor" href="#二、数据验证"><span>二、数据验证</span></a></h2><h3 id="_2-1-适配器" tabindex="-1"><a class="header-anchor" href="#_2-1-适配器"><span>2.1 适配器</span></a></h3><div class="language-go line-numbers-mode" data-highlighter="prismjs" data-ext="go"><pre><code><span class="line"><span class="token keyword">import</span> validatorPlugin <span class="token string">&quot;github.com/tx7do/go-wind-plugins/validator&quot;</span></span>
33<span class="line"></span></code></pre><div class="line-numbers" aria-hidden="true" style="counter-reset:line-number 0;"><div class="line-number"></div></div></div><h3 id="_2-2-结构体验证" tabindex="-1"><a class="header-anchor" href="#_2-2-结构体验证"><span>2.2 结构体验证</span></a></h3><div class="language-go line-numbers-mode" data-highlighter="prismjs" data-ext="go"><pre><code><span class="line"><span class="token keyword">type</span> CreateUserRequest <span class="token keyword">struct</span> <span class="token punctuation">{</span></span>
34<span class="line">    Username <span class="token builtin">string</span> <span class="token string">\`json:&quot;username&quot; validate:&quot;required,min=3,max=32&quot;\`</span></span>
35<span class="line">    Email    <span class="token builtin">string</span> <span class="token string">\`json:&quot;email&quot; validate:&quot;required,email&quot;\`</span></span>
36<span class="line">    Password <span class="token builtin">string</span> <span class="token string">\`json:&quot;password&quot; validate:&quot;required,min=8,max=128&quot;\`</span></span>
37<span class="line">    Age      <span class="token builtin">int</span>    <span class="token string">\`json:&quot;age&quot; validate:&quot;gte=18,lte=120&quot;\`</span></span>
38<span class="line">    Phone    <span class="token builtin">string</span> <span class="token string">\`json:&quot;phone&quot; validate:&quot;required,e164&quot;\`</span></span>
39<span class="line"><span class="token punctuation">}</span></span>
40<span class="line"></span>
41<span class="line"><span class="token keyword">func</span> <span class="token function">
41handleCreateUser</span><span class="token punctuation">(</span>w http<span class="token punctuation">.</span>ResponseWriter<span class="token punctuation">,</span> r <span class="token operator">*</span>http<span class="token punctuation">.</span>Request<span class="token punctuation">)</span> <span class="token punctuation">{</span></span>
42<span class="line">    <span class="token keyword">var</span> req CreateUserRequest</span>
43<span class="line">    json<span class="token punctuation">.</span><span class="token function">NewDecoder</span><span class="token punctuation">(</span>r<span class="token punctuation">.</span>Body<span class="token punctuation">)</span><span class="token punctuation">.</span><span class="token function">Decode</span><span class="token punctuation">(</span><span class="token operator">&amp;</span>req<span class="token punctuation">)</span></span>
44<span class="line"></span>
45<span class="line">    <span class="token keyword">if</span> err <span class="token operator">:=</span> validatorPlugin<span class="token punctuation">.</span><span class="token function">Validate</span><span class="token punctuation">(</span>req<span class="token punctuation">)</span><span class="token punctuation">;</span> err <span class="token operator">!=</span> <span class="token boolean">nil</span> <span class="token punctuation">{</span></span>
46<span class="line">        <span class="token comment">// 返回验证错误</span></span>
47<span class="line">        http<span class="token punctuation">.</span><span class="token function">Error</span><span class="token punctuation">(</span>w<span class="token punctuation">,</span> err<span class="token punctuation">.</span><span class="token function">Error</span><span class="token punctuation">(</span><span class="token punctuation">)</span><span class="token punctuation">,</span> http<span class="token punctuation">.</span>StatusBadRequest<span class="token punctuation">)</span></span>
48<span class="line">        <span class="token keyword">return</span></span>
49<span class="line">    <span class="token punctuation">}</span></span>
50<span class="line"></span>
51<span class="line">    <span class="token comment">// 验证通过,处理业务逻辑</span></span>
52<span class="line"><span class="token punctuation">}</span></span>
53<span class="line"></span></code></pre><div class="line-numbers" aria-hidden="true" style="counter-reset:line-number 0;"><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div></div></div><h3 id="_2-3-验证规则" tabindex="-1"><a class="header-anchor" href="#_2-3-验证规则"><span>2.3 验证规则</span></a></h3><table><thead><tr><th>Tag</th><th>说明</th><th>示例</th></tr></thead><tbody><tr><td><code>required</code></td><td>必填</td><td><code>validate:&quot;required&quot;</code></td></tr><tr><td><code>min</code> / <code>max</code></td><td>最小/最大长度</td><td><code>validate:&quot;min=3,max=32&quot;</code></td></tr><tr><td><code>len</code></td><td>固定长度</td><td><code>validate:&quot;len=11&quot;</code></td></tr><tr><td><code>gte</code> / <code>lte</code></td><td>数值范围</td><td><code>validate:&quot;gte=18,lte=120&quot;</code></td></tr><tr><td><code>email</code></td><td>邮箱格式</td><td><code>validate:&quot;email&quot;</code></td></tr><tr><td><code>url</code></td><td>URL 格式</td><td><code>validate:&quot;url&quot;</code></td></tr><tr><td><code>uuid</code></td><td>UUID 格式</td><td><code>validate:&quot;uuid&quot;</code></td></tr><tr><td><code>e164</code></td><td>手机号</td><td><code>validate:&quot;e164&quot;</code></td></tr><tr><td><code>oneof</code></td><td>枚举值</td><td><code>validate:&quot;oneof=red green blue&quot;</code></td></tr><tr><td><code>unique</code></td><td>唯一性</td><td><code>validate:&quot;unique&quot;</code></td></tr><tr><td><code>datetime</code></td><td>日期时间</td><td><code>validate:&quot;datetime=2006-01-02&quot;</code></td></tr><tr><td><code>ip</code></td><td>IP 地址</td><td><code>validate:&quot;ip&quot;</code></td></tr><tr><td><code>uuid4</code></td><td>UUID v4</td><td><code>validate:&quot;uuid4&quot;</code></td></tr></tbody></table><h3 id="_2-4-自定义验证" tabindex="-1"><a class="header-anchor" href="#_2-4-自定义验证"><span>2.4 自定义验证</span></a></h3><div class="language-go line-numbers-mode" data-highlighter="prismjs" data-ext="go"><pre><code><span class="line"><span class="token comment">// 注册自定义验证器</span></span>
54<span class="line">
54validatorPlugin<span class="token punctuation">.</span><span class="token function">RegisterValidation</span><span class="token punctuation">(</span><span class="token string">&quot;strong_password&quot;</span><span class="token punctuation">,</span> <span class="token keyword">func</span><span class="token punctuation">(</span>fl validator<span class="token punctuation">.</span>FieldLevel<span class="token punctuation">)</span> <span class="token builtin">bool</span> <span class="token punctuation">{</span></span>
55<span class="line">    password <span class="token operator">:=</span> fl<span class="token punctuation">.</span><span class="token function">Field</span><span class="token punctuation">(</span><span class="token punctuation">)</span><span class="token punctuation">.</span><span class="token function">String</span><span class="token punctuation">(</span><span class="token punctuation">)</span></span>
56<span class="line">    hasUpper <span class="token operator">:=</span> regexp<span class="token punctuation">.</span><span class="token function">MustCompile</span><span class="token punctuation">(</span><span class="token string">\`[A-Z]\`</span><span class="token punctuation">)</span><span class="token punctuation">.</span><span class="token function">MatchString</span><span class="token punctuation">(</span>password<span class="token punctuation">)</span></span>
57<span class="line">    hasLower <span class="token operator">:=</span> regexp<span class="token punctuation">.</span><span class="token function">MustCompile</span><span class="token punctuation">(</span><span class="token string">\`[a-z]\`</span><span class="token punctuation">)</span><span class="token punctuation">.</span><span class="token function">MatchString</span><span class="token punctuation">(</span>password<span class="token punctuation">)</span></span>
58<span class="line">    hasDigit <span class="token operator">:=</span> regexp<span class="token punctuation">.</span><span class="token function">MustCompile</span><span class="token punctuation">(</span><span class="token string">\`\\d\`</span><span class="token punctuation">)</span><span class="token punctuation">.</span><span class="token function">MatchString</span><span class="token punctuation">(</span>password<span class="token punctuation">)</span></span>
59<span class="line">    hasSpecial <span class="token operator">:=</span> regexp<span class="token punctuation">.</span><span class="token function">MustCompile</span><span class="token punctuation">(</span><span class="token string">\`[!@#$%^&amp;*]\`</span><span class="token punctuation">)</span><span class="token punctuation">.</span><span class="token function">MatchString</span><span class="token punctuation">(</span>password<span class="token punctuation">)</span></span>
60<span class="line">    <span class="token keyword">return</span> hasUpper <span class="token operator">&amp;&amp;</span> hasLower <span class="token operator">&amp;&amp;</span> hasDigit <span class="token operator">&amp;&amp;</span> hasSpecial</span>
61<span class="line"><span class="token punctuation">}</span><span class="token punctuation">)</span></span>
62<span class="line"></span>
63<span class="line"><span class="token keyword">type</span> RegisterRequest <span class="token keyword">struct</span> <span class="token punctuation">{</span></span>
64<span class="line">    Password <span class="token builtin">string</span> <span class="token string">\`json:&quot;password&quot; validate:&quot;required,strong_password&quot;\`</span></span>
65<span class="line"><span class="token punctuation">}</span></span>
66<span class="line"></span></code></pre><div class="line-numbers" aria-hidden="true" style="counter-reset:line-number 0;"><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div></div></div><h3 id="_2-5-中文错误消息" tabindex="-1"><a class="header-anchor" href="#_2-5-中文错误消息"><span>2.5 中文错误消息</span></a></h3><div class="language-go line-numbers-mode" data-highlighter="prismjs" data-ext="go"><pre><code><span class="line">
66validatorPlugin<span class="token punctuation">.</span><span class="token function">RegisterTranslations</span><span class="token punctuation">(</span><span class="token string">&quot;zh&quot;</span><span class="token punctuation">,</span> <span class="token keyword">map</span><span class="token punctuation">[</span><span class="token builtin">string</span><span class="token punctuation">]</span><span class="token builtin">string</span><span class="token punctuation">{</span></span>
67<span class="line">    <span class="token string">&quot;required&quot;</span><span class="token punctuation">:</span>       <span class="token string">&quot;{0}为必填项&quot;</span><span class="token punctuation">,</span></span>
68<span class="line">    <span class="token string">&quot;min&quot;</span><span class="token punctuation">:</span>            <span class="token string">&quot;{0}长度不能少于{1}个字符&quot;</span><span class="token punctuation">,</span></span>
69<span class="line">    <span class="token string">&quot;max&quot;</span><span class="token punctuation">:</span>            <span class="token string">&quot;{0}长度不能超过{1}个字符&quot;</span><span class="token punctuation">,</span></span>
70<span class="line">    <span class="token string">&quot;email&quot;</span><span class="token punctuation">:</span>          <span class="token string">&quot;{0}格式不正确&quot;</span><span class="token punctuation">,</span></span>
71<span class="line">    <span class="token string">&quot;gte&quot;</span><span class="token punctuation">:</span>            <span class="token string">&quot;{0}必须大于或等于{1}&quot;</span><span class="token punctuation">,</span></span>
72<span class="line">    <span class="token string">&quot;lte&quot;</span><span class="token punctuation">:</span>            <span class="token string">&quot;{0}必须小于或等于{1}&quot;</span><span class="token punctuation">,</span></span>
73<span class="line">    <span class="token string">&quot;oneof&quot;</span><span class="token punctuation">:</span>          <span class="token string">&quot;{0}必须是{1}中的一个&quot;</span><span class="token punctuation">,</span></span>
74<span class="line">    <span class="token string">&quot;strong_password&quot;</span><span class="token punctuation">:</span> <span class="token string">&quot;密码必须包含大小写字母、数字和特殊字符&quot;</span><span class="token punctuation">,</span></span>
75<span class="line"><span class="token punctuation">}</span><span class="token punctuation">)</span></span>
76<span class="line"></span></code></pre><div class="line-numbers" aria-hidden="true" style="counter-reset:line-number 0;"><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div></div></div><h3 id="_2-6-yaml-配置" tabindex="-1"><a class="header-anchor" href="#_2-6-yaml-配置"><span>2.6 YAML 配置</span></a></h3><div class="language-yaml line-numbers-mode" data-highlighter="prismjs" data-ext="yml"><pre><code><span class="line"><span class="token key atrule">validator</span><span class="token punctuation">:</span></span>
77<span class="line">  <span class="token key atrule">locale</span><span class="token punctuation">:</span> zh           <span class="token comment"># zh | en</span></span>
78<span class="line">  <span class="token key atrule">custom_rules</span><span class="token punctuation">:</span></span>
79<span class="line">    <span class="token punctuation">-</span> <span class="token key atrule">name</span><span class="token punctuation">:</span> phone_cn</span>
80<span class="line">      <span class="token key atrule">regex</span><span class="token punctuation">:</span> <span class="token string">&quot;^1[3-9]\\\\d{9}$&quot;</span></span>
81<span class="line">      <span class="token key atrule">message</span><span class="token punctuation">:</span> <span class="token string">&quot;手机号格式不正确&quot;</span></span>
82<span class="line"></span></code></pre><div class="line-numbers" aria-hidden="true" style="counter-reset:line-number 0;"><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div></div></div><h2 id="三、国际化-i18n" tabindex="-1"><a class="header-anchor" href="#三、国际化-i18n"><span>三、国际化(i18n)</span></a></h2><div class="language-go line-numbers-mode" data-highlighter="prismjs" data-ext="go"><pre><code><span class="line"><span class="token keyword">
82import</span> i18nPlugin <span class="token string">&quot;github.com/tx7do/go-wind-plugins/i18n&quot;</span></span>
83<span class="line"></span>
84<span class="line">translator <span class="token operator">:=</span> i18nPlugin<span class="token punctuation">.</span><span class="token function">New</span><span class="token punctuation">(</span></span>
85<span class="line">    i18nPlugin<span class="token punctuation">.</span><span class="token function">WithLocaleDir</span><span class="token punctuation">(</span><span class="token string">&quot;./locales&quot;</span><span class="token punctuation">)</span><span class="token punctuation">,</span></span>
86<span class="line">    i18nPlugin<span class="token punctuation">.</span><span class="token function">WithDefaultLocale</span><span class="token punctuation">(</span><span class="token string">&quot;zh-CN&quot;</span><span class="token punctuation">)</span><span class="token punctuation">,</span></span>
87<span class="line"><span class="token punctuation">)</span></span>
88<span class="line"></span>
89<span class="line"><span class="token comment">// 翻译</span></span>
90<span class="line">msg <span class="token operator">:=</span> translator<span class="token punctuation">.</span><span class="token function">T</span><span class="token punctuation">(</span><span class="token string">&quot;welcome&quot;</span><span class="token punctuation">,</span> <span class="token keyword">map</span><span class="token punctuation">[</span><span class="token builtin">string</span><span class="token punctuation">]</span><span class="token keyword">interface</span><span class="token punctuation">{</span><span class="token punctuation">}</span><span class="token punctuation">{</span></span>
91<span class="line">    <span class="token string">&quot;name&quot;</span><span class="token punctuation">:</span> <span class="token string">&quot;Alice&quot;</span><span class="token punctuation">,</span></span>
92<span class="line"><span class="token punctuation">}</span><span class="token punctuation">)</span></span>
93<span class="line"><span class="token comment">// &quot;欢迎,Alice!&quot;</span></span>
94<span class="line"></span></code></pre><div class="line-numbers" aria-hidden="true" style="counter-reset:line-number 0;"><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div></div></div><div class="language-yaml line-numbers-mode" data-highlighter="prismjs" data-ext="yml"><pre><code><span class="line"><span class="token comment"># locales/zh-CN.yaml</span></span>
95<span class="line"><span class="token key atrule">welcome</span><span class="token punctuation">:</span> <span class="token string">&quot;欢迎,{name}!&quot;</span></span>
96<span class="line"><span class="token key atrule">errors</span><span class="token punctuation">:</span></span>
97<span class="line">  <span class="token key atrule">not_found</span><span class="token punctuation">:</span> <span class="token string">&quot;资源不存在&quot;</span></span>
98<span class="line">  <span class="token key atrule">unauthorized</span><span class="token punctuation">:</span> <span class="token string">&quot;未授权&quot;</span></span>
99<span class="line"></span></code></pre><div class="line-numbers" aria-hidden="true" style="counter-reset:line-number 0;"><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div></div></div><h2 id="相关文档" tabindex="-1"><a class="header-anchor" href="#相关文档"><span>相关文档</span></a></h2>`,27)),s("ul",null,[s("li",null,[t(a,{to:"/framework/plugins-config.html"},{default:e(()=>[...n[0]||(n[0]=[p("插件配置系统",-1)])]),_:1})]),s("li",null,[t(a,{to:"/framework/plugins-intro.html"},{default:e(()=>[...n[1]||(n[1]=[p("插件总览",-1)])]),_:1})])])])}const v=l(d,[["render",r]]),g=JSON.parse('{"path":"/framework/plugins-template.html","title":"模板渲染与验证插件","lang":"en-US","frontmatter":{},"headers":[{"level":2,"title":"一、模板渲染","slug":"一、模板渲染","link":"#一、模板渲染","children":[{"level":3,"title":"1.1 适配器列表","slug":"_1-1-适配器列表","link":"#_1-1-适配器列表","children":[]},{"level":3,"title":"1.2 使用方式","slug":"_1-2-使用方式","link":"#_1-2-使用方式","children":[]},{"level":3,"title":"1.3 模板继承(Jet)","slug":"_1-3-模板继承-jet","link":"#_1-3-模板继承-jet","children":[]}]},{"level":2,"title":"二、数据验证","slug":"二、数据验证","link":"#二、数据验证","children":[{"level":3,"title":"2.1 适配器","slug":"_2-1-适配器","link":"#_2-1-适配器","children":[]},{"level":3,"title":"2.2 结构体验证","slug":"_2-2-结构体验证","link":"#_2-2-结构体验证","children":[]}
99,{"level":3,"title":"2.3 验证规则","slug":"_2-3-验证规则","link":"#_2-3-验证规则","children":[]},{"level":3,"title":"2.4 自定义验证","slug":"_2-4-自定义验证","link":"#_2-4-自定义验证","children":[]},{"level":3,"title":"2.5 中文错误消息","slug":"_2-5-中文错误消息","link":"#_2-5-中文错误消息","children":[]},{"level":3,"title":"2.6 YAML 配置","slug":"_2-6-yaml-配置","link":"#_2-6-yaml-配置","children":[]}]},{"level":2,"title":"三、国际化(i18n)","slug":"三、国际化-i18n","link":"#三、国际化-i18n","children":[]},{"level":2,"title":"相关文档","slug":"相关文档","link":"#相关文档","children":[]}],"git":{"updatedTime":1782048507000,"contributors":[{"name":"Bobo","username":"Bobo","email":"[email protected]","commits":1,"url":"https://github.com/Bobo"}],"changelog":[{"hash":"26902396683277256db28022df417e6070907850","time":1782048507000,"email":"[email protected]","author":"Bobo","message":"docs(bootstrap): 添加 Bootstrap 框架相关文档"}]},"filePathRelative":"framework/plugins-template.md"}');export{v as comp,g as data};

Line numbers count LF bytes from the start of the resource, as the search results do. Vendor segments are library code the classifier recognised; they are stored but not indexed. Bytes are shown as Latin1 characters, one per byte.