File: index.html

package info (click to toggle)
ruby-jekyll-polyglot 1.9.0-1
  • links: PTS, VCS
  • area: main
  • in suites: forky, sid, trixie
  • size: 5,196 kB
  • sloc: xml: 1,500; ruby: 947; sh: 10; makefile: 4
file content (416 lines) | stat: -rw-r--r-- 28,849 bytes parent folder | download | duplicates (2)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
307
308
309
310
311
312
313
314
315
316
317
318
319
320
321
322
323
324
325
326
327
328
329
330
331
332
333
334
335
336
337
338
339
340
341
342
343
344
345
346
347
348
349
350
351
352
353
354
355
356
357
358
359
360
361
362
363
364
365
366
367
368
369
370
371
372
373
374
375
376
377
378
379
380
381
382
383
384
385
386
387
388
389
390
391
392
393
394
395
396
397
398
399
400
401
402
403
404
405
406
407
408
409
410
411
412
413
414
415
416
<!DOCTYPE html>
<html lang="en-us">

  <head>
  
  <link href="http://gmpg.org/xfn/11" rel="profile">
  <meta http-equiv="X-UA-Compatible" content="IE=edge">
  <meta http-equiv="content-type" content="text/html; charset=utf-8">
  <meta name="viewport" content="width=device-width, initial-scale=1.0">
  <meta name="title" content="Home &middot; Polyglot">
  <meta name="description" content="一款为 Jekyll 提供 i18n 多语言功能的插件,方便快捷,适用于各类大小博客">
  <meta name="keywords" content="多语言, i18n, 杰基尔, 多语种, 快速, 直观, untra, 깃허브, 页面, 博客, 插件, 卢比, gem, 国际化, 本地化, 翻译, 语言, 支持, 多语言, 多语言">
  <meta http-equiv="Content-Language" content="zh-CN">
<link rel="alternate" hreflang="en" href="https://polyglot.untra.io/"/>
<link rel="alternate" hreflang="es" href="https://polyglot.untra.io/es/"/>
<link rel="alternate" hreflang="de" href="https://polyglot.untra.io/de/"/>
<link rel="alternate" hreflang="fr" href="https://polyglot.untra.io/fr/"/>
<link rel="alternate" hreflang="ru" href="https://polyglot.untra.io/ru/"/>
<link rel="alternate" hreflang="nl" href="https://polyglot.untra.io/nl/"/>
<link rel="alternate" hreflang="he" href="https://polyglot.untra.io/he/"/>
<link rel="alternate" hreflang="ko" href="https://polyglot.untra.io/ko/"/>
<link rel="alternate" hreflang="zh-CN" href="https://polyglot.untra.io/zh-CN/"/>
<link rel="alternate" hreflang="pt-BR" href="https://polyglot.untra.io/pt-BR/"/>

  <title>
    
      Polyglot &middot; Straightforward I18n for Jekyll Blogs
    
  </title>

  <!-- CSS -->
  <link rel="stylesheet" href="/public/css/poole.css">
  <link rel="stylesheet" href="/public/css/syntax.css">
  <link rel="stylesheet" href="/public/css/hyde.css">
  <link rel="stylesheet" href="/public/css/custom.css">
  <link rel="stylesheet" href="https://fonts.googleapis.com/css?family=PT+Sans:400,400italic,700|Abril+Fatface">

  <!-- Icons -->
  <link rel="apple-touch-icon-precomposed" sizes="144x144" href="/public/apple-touch-icon-144-precomposed.png">
                                 <link rel="shortcut icon" href="/public/favicon.ico">

  <!-- RSS -->
  <link rel="alternate" type="application/rss+xml" title="RSS" href="/zh-CN/atom.xml">
</head>


  <body theme-base-08>

    
<div class="sidebar">
  <div class="container sidebar-sticky">
    <div class="sidebar-about">
      <p class="speech">你好!</p>
    </br>
      <h1>
        <a href="">
          Polyglot
        </a>
      </h1>
      <p class="lead">一款为 <a href="http://jekyllrb.com" target="_blank">Jekyll</a> 提供 i18n 多语言功能的插件,方便快捷,适用于各类大小博客。<a href="https://github.com/untra" target="_blank">@untra</a> 出品。</p>
    </div>

    <nav class="sidebar-nav">
      <a class="sidebar-nav-item" href="/zh-CN/">Home</a>

      
      
      
        
        
          
          
        
      
        
        
          
            <a class="sidebar-nav-item" href="/zh-CN/about/">About</a>
          
          
        
      
        
        
          
            <a class="sidebar-nav-item" href="/zh-CN/yi-tiao-chao-chang-de-yong-jiu-lian-jie/permalink/">一条超长的永久链接</a>
          
          
        
      
        
        
          
          
        
      
        
        
      
        
        
          
            <a class="sidebar-nav-item" href="/zh-CN/sample/">Sample rich text data</a>
          
          
        
      
        
        
          
            <a class="sidebar-nav-item" href="/zh-CN/seo/">SEO 方案</a>
          
          
        
      
        
        
      
        
        
      
        
        
      
        
        
      
        
        
      
        
        
      
        
        
      
        
        
      
        
        
      
        
        
      
        
          
        
          
        
          
        
          
      <a class="sidebar-nav-item" href=""></a>

      <a class="sidebar-nav-item" href="https://rubygems.org/gems/jekyll-polyglot">Ruby Gem</a>
      <a class="sidebar-nav-item" href="https://github.com/untra/polyglot">GitHub project</a>
      <a class="sidebar-nav-item" href="https://github.com/untra/polyglot/tree/master/site/index.html"><small>view this page source on github</small></a>
      <small class="sidebar-nav-item">Currently v1.9.0</small>
    </nav>

    <p><small>&copy; 2025 Samuel Volin</small><br/><small>MIT Licensed</small></p>
<p>
  <!-- jekyll-polyglot will process ferh= into href= through the static_href liquid block tag without relativizing the url; useful for making language navigation switchers  -->
  
<a  href="/" >en</a> •
<a  href="/es/" >es</a> •
<a  href="/de/" >de</a> •
<a  href="/fr/" >fr</a> •
<a  href="/ru/" >ru</a> •
<a  href="/nl/" >nl</a> •
<a  href="/he/" >he</a> •
<a  href="/ko/" >ko</a> •
<a style="font-weight: bold;" href="/zh-CN/" >zh-CN</a> •
<a  href="/pt-BR/" >pt-BR</a>
</p>
  </div>
</div>


    <div class="content container">
      <div class="posts">
  
  <div class="post">
    <h1 class="post-title">
      <a href="/zh-CN/2025/01/18/polyglot-1.9.0/">
        Polyglot 1.8.1 - 指令改进
      </a>
    </h1>

    <span class="post-date">18 Jan 2025</span>

    <p>Jekyll-Polyglot 1.9.0 发布了,它包含了一些小的依赖项更新,以及改进的指令,帮助您充分利用您的多语言网站。</p>

<h2 id="社区提供的教学改进">社区提供的教学改进</h2>

<p>感谢 <strong><a href="https://github.com/aturret">aturret</a></strong> 帮助维护现有的中文 (zh-CN) 网站页面。 谢谢!</p>

<p><strong><a href="https://github.com/george-gca">george-gca</a></strong> 改进了可选的 <code class="language-plaintext highlighter-rouge">derive_lang_from_path</code> 配置,以便更好地从路径推断中识别文档语言。 为他的实用 <a href="https://github.com/untra/polyglot/pull/222">功能改进 PR</a> 添加了测试。 此改进有助于推断缺少 <code class="language-plaintext highlighter-rouge">lang</code> frontmatter 的帖子和页面的语言,这些语言来自文档文件路径的任何部分。</p>

<p>Github 用户 <strong><a href="https://github.com/yunseo-kim">yunseo-kim</a></strong> 提交了 <a href="https://github.com/untra/polyglot/pull/230">改善站点地图生成的说明</a>。 为了帮助 SEO,网站应该只有一个根目录 sitemap.xml,而不是每个子语言站点都应该有一个副本。 请务必将 <code class="language-plaintext highlighter-rouge">sitemap.xml</code> 添加到 <code class="language-plaintext highlighter-rouge">exclude_from_localization</code> 配置中。</p>

  </div>
  
  <div class="post">
    <h1 class="post-title">
      <a href="/zh-CN/2024/08/18/polyglot-1.8.1/">
        Polyglot 1.8.1 - 社区 Bug 修复发布
      </a>
    </h1>

    <span class="post-date">18 Aug 2024</span>

    <p>Jekyll-Polyglot 1.8.1 版本已经发布,其中包含了一些功能改进,并修复了社区发现的 Bug。</p>

<h2 id="社区提供的-bug-修复">社区提供的 Bug 修复</h2>

<p><strong><a href="https://github.com/hacketiwack">hacketiwack</a></strong> 提供了用于<a href="https://github.com/untra/polyglot/pull/200/files">更严格检查设置文档永久链接</a>的代码,防止因空的前置字段导致的下游问题。</p>

<p>Github 用户 <strong><a href="https://github.com/blackpill">blackpill</a></strong> 提交了针对 i18n headers 标签的<a href="https://github.com/untra/polyglot/pull/211/files">单字符错误修复</a>,用于渲染默认语言链接的替代链接(href)。</p>

  </div>
  
  <div class="post">
    <h1 class="post-title">
      <a href="/zh-CN/2024/03/17/polyglot-1.8.0/">
        Polyglot 1.8.0 - 社区贡献发布
      </a>
    </h1>

    <span class="post-date">17 Mar 2024</span>

    <p>非常兴奋地宣布 Jekyll-Polyglot 1.8.0 版本发布了,这个版本增加了一些功能改进,并认可了来自社区的文档和贡献!</p>

<h2 id="不同语言的专属永久链接">不同语言的专属永久链接</h2>

<p>Polyglot 1.8.0 版本增加了一些新功能,可以为页面设置特定于语言的永久链接,并保留它们与其他相关页面的关联。这个新功能由一位绅士和学者—— <strong><a href="https://github.com/antoniovazquezblanco">antoniovazquezblanco</a></strong> 提供。</p>

<h2 id="网站地图生成和-i18n-seo">网站地图生成和 i18n SEO</h2>

<p>这个版本还认可了 <strong><a href="https://github.com/jerturowetz">jerturowetz</a></strong> 提供的高质量 <a href="https://polyglot.untra.io/sitemap.xml">sitemap.xml</a> 和 <a href="https://polyglot.untra.io/zh-CN/robots.txt">robots.txt</a> 解决方案。本网站现在通过这些文件更好地展示和捕获了搜索引擎提供的 SEO 力量。可以在<a href="https://github.com/untra/polyglot/tree/master/site">这里</a>查看示例网站的文件。</p>

<h2 id="jekyll-polyglot-post_write-钩子">jekyll :polyglot :post_write 钩子</h2>

<p>GitHub 用户 <strong><a href="https://github.com/obfusk">obfusk</a></strong> 在几年前贡献了一个<a href="https://github.com/untra/polyglot/pull/142">微小的 PR</a>:</p>

<p>通过多语言 <code class="language-plaintext highlighter-rouge">:site, :post_write</code> 钩子,像这样为每个子进程运行:</p>

<div class="language-rb highlighter-rouge"><div class="highlight"><pre class="highlight"><code><span class="no">Jekyll</span><span class="o">::</span><span class="no">Hooks</span><span class="p">.</span><span class="nf">register</span> <span class="ss">:site</span><span class="p">,</span> <span class="ss">:post_write</span> <span class="k">do</span> <span class="o">|</span><span class="n">site</span><span class="o">|</span>
  <span class="o">...</span>
<span class="k">end</span>
</code></pre></div></div>

<p>这个版本增加了一个自定义 <code class="language-plaintext highlighter-rouge">:post_write</code> 钩子,它在所有语言处理完成后运行一次(无论是否使用 <code class="language-plaintext highlighter-rouge">parallel_localization</code>):</p>

<div class="language-rb highlighter-rouge"><div class="highlight"><pre class="highlight"><code><span class="no">Jekyll</span><span class="o">::</span><span class="no">Hooks</span><span class="p">.</span><span class="nf">register</span> <span class="ss">:polyglot</span><span class="p">,</span> <span class="ss">:post_write</span> <span class="k">do</span> <span class="o">|</span><span class="n">site</span><span class="o">|</span>
  <span class="c1"># do something amazing here!</span>
<span class="k">end</span>
</code></pre></div></div>

<p>这一特性对于使用了 <a href="https://jekyllrb.com/docs/plugins/hooks/">Jekyll hook 插件</a>的复杂的 Jekyll 静态站点非常有用。</p>

<p>她还为<a href="https://github.com/untra/polyglot/pull/145">语言子进程崩溃时的额外日志记录</a>提供了修复。感谢这个贡献!</p>

<h2 id="本地化变量和葡萄牙语翻译">本地化变量和葡萄牙语翻译</h2>

<p><strong><a href="https://github.com/george-gca">george-gca</a></strong> 是一个才华横溢的、很棒的家伙,他为如何最好地从站点数据本地化富文本贡献了<a href="/zh-CN/2024/02/29/localized-variables/">一整篇博客文章</a>。他还提供了<a href="https://polyglot.untra.io/pt-BR/">本站的葡萄牙语翻译</a>。</p>

  </div>
  
  <div class="post">
    <h1 class="post-title">
      <a href="/zh-CN/2024/02/29/localized-variables/">
        本地化变量
      </a>
    </h1>

    <span class="post-date">29 Feb 2024</span>

    <p>Polyglot 允许您在 Jekyll 站点中为不同语言拥有不同的页面。例如,一个人可以在英语中有一个 <code class="language-plaintext highlighter-rouge">about.md</code> 页面,在西班牙语中有另一个 <code class="language-plaintext highlighter-rouge">about.md</code> 页面,它们具有完全不同的布局。但是,如果您希望为这两个页面使用相同的布局,您可以使用本地化变量。这是一种在 Jekyll 站点中为不同语言拥有不同数据的方法,但对所有语言使用相同的布局。</p>

<p>下面我将使用一个使用 Polyglot 创建的<a href="https://github.com/george-gca/multi-language-al-folio">模板站点</a> 作为示例。</p>

<h2 id="在页面之间共享布局">在页面之间共享布局</h2>

<p>在这个网站中,他们为每种语言的每个页面都有一个关于页面。其中,英语版本在 <a href="https://github.com/george-gca/multi-language-al-folio/blob/main/_pages/en-us/about.md">_pages/en-us/about.md</a>,而巴西葡萄牙语版本在 <a href="https://github.com/george-gca/multi-language-al-folio/blob/main/_pages/pt-br/about.md">_pages/pt-br/about.md</a> 中。在这两个页面中,我们可以看到它们的前置元数据中有相同的键,但有些值不同。这两个文件都指向相同的<a href="https://jekyllrb.com/docs/layouts/">布局</a>:<a href="https://github.com/george-gca/multi-language-al-folio/blob/main/_layouts/about.liquid">关于</a>页面模板,并且此页面模板使用前置元数据中的值来渲染页面。</p>

<p>例如,英语页面的 <code class="language-plaintext highlighter-rouge">subtitle</code> 键的值为 <code class="language-plaintext highlighter-rouge">subtitle: &lt;a href='#'&gt;Affiliations&lt;/a&gt;. Address. Contacts. Moto. Etc.</code>,而巴西葡萄牙语页面的值为 <code class="language-plaintext highlighter-rouge">subtitle: &lt;a href='#'&gt;Afiliações&lt;/a&gt;. Endereço. Contatos. Lema. Etc.</code>。要在布局中使用此信息,可以这样使用:</p>

<div class="language-liquid highlighter-rouge"><div class="highlight"><pre class="highlight"><code><span class="cp">{{</span><span class="w"> </span><span class="nv">page</span><span class="p">.</span><span class="nv">subtitle</span><span class="w"> </span><span class="cp">}}</span>
</code></pre></div></div>

<p>这两个文件中前置元数据下方的内容也是一样的,可以在布局中这样使用:</p>

<div class="language-liquid highlighter-rouge"><div class="highlight"><pre class="highlight"><code><span class="cp">{{</span><span class="w"> </span><span class="nv">content</span><span class="w"> </span><span class="cp">}}</span>
</code></pre></div></div>

<p>Polyglot 会自动使用当前语言的正确值渲染页面。</p>

<h2 id="在页面之间共享布局和本地化数据">在页面之间共享布局和本地化数据</h2>

<p>对于页面的 <code class="language-plaintext highlighter-rouge">subtitle</code>,他们在前置元数据中使用了 <code class="language-plaintext highlighter-rouge">key: value</code> 键值对,但有时我们希望在站点的不同部分中使用这些相同的对。例如,如果我们想在 <code class="language-plaintext highlighter-rouge">about.md</code> 和另一个页面中使用相同的 <code class="language-plaintext highlighter-rouge">subtitle</code>,我们将不得不在这两个页面的前置元数据中重复相同的对。这并不是我们想要的,因为如果我们需要更改 <code class="language-plaintext highlighter-rouge">subtitle</code>,我们将不得不在两个地方更改它。这就是本地化数据的用武之地。您可以创建一个文件,例如 <code class="language-plaintext highlighter-rouge">_data/:lang/strings.yml</code>,每种语言一个,Polyglot 将这些键带到 <code class="language-plaintext highlighter-rouge">site.data[:lang].strings</code> 下。</p>

<p>比如说,在模板站点中有两个文件,<a href="https://github.com/george-gca/multi-language-al-folio/blob/main/_data/en-us/strings.yml">_data/en-us/strings.yml</a> 和 <a href="https://github.com/george-gca/multi-language-al-folio/blob/main/_data/pt-br/strings.yml">_data/pt-br/strings.yml</a>。在第一个文件中,前置元数据内容包括:</p>

<div class="language-yaml highlighter-rouge"><div class="highlight"><pre class="highlight"><code><span class="na">latest_posts</span><span class="pi">:</span> <span class="s">latest posts</span>
</code></pre></div></div>

<p>而在第二个文件中,前置元数据内容包括:</p>

<div class="language-yaml highlighter-rouge"><div class="highlight"><pre class="highlight"><code><span class="na">latest_posts</span><span class="pi">:</span> <span class="s">últimas postagens</span>
</code></pre></div></div>

<p>这样,他们可以在布局中使用 <code class="language-plaintext highlighter-rouge">latest_posts</code> 键,如下所示:</p>

<div class="language-liquid highlighter-rouge"><div class="highlight"><pre class="highlight"><code><span class="cp">{{</span><span class="w"> </span><span class="nv">site</span><span class="p">.</span><span class="nv">data</span><span class="p">[</span><span class="nv">site</span><span class="p">.</span><span class="nv">active_lang</span><span class="p">].</span><span class="nv">strings</span><span class="p">.</span><span class="nv">latest_posts</span><span class="w"> </span><span class="cp">}}</span>
</code></pre></div></div>

<p>这样一来,<code class="language-plaintext highlighter-rouge">latest_posts</code> 变量的值将正确获取到当前语言的 <code class="language-plaintext highlighter-rouge">_data/:lang/strings.yml</code> 文件中定义的值。</p>

<h2 id="在前置元数据中定义要使用的变量">在前置元数据中定义要使用的变量</h2>

<p>现在,如果您想在页面的前置元数据中定义这个变量,这就有点棘手了。一个可能的解决方案是检查变量的值中是否有 <code class="language-plaintext highlighter-rouge">.</code>,如果有,就使用文件 <code class="language-plaintext highlighter-rouge">_data/:lang/strings.yml</code> 中的值。你可以这么进行操作:</p>

<div class="language-liquid highlighter-rouge"><div class="highlight"><pre class="highlight"><code><span class="cp">{%</span><span class="w"> </span><span class="nt">if</span><span class="w"> </span><span class="nv">frontmatter_var</span><span class="w"> </span><span class="ow">contains</span><span class="w"> </span><span class="s1">'.'</span><span class="w"> </span><span class="cp">%}</span>
  <span class="cp">{%</span><span class="w"> </span><span class="nt">assign</span><span class="w"> </span><span class="nv">first_part</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="nv">frontmatter_var</span><span class="w"> </span><span class="p">|</span><span class="w"> </span><span class="nf">split</span><span class="p">:</span><span class="w"> </span><span class="s1">'.'</span><span class="w"> </span><span class="p">|</span><span class="w"> </span><span class="nf">first</span><span class="w"> </span><span class="cp">%}</span>
  <span class="cp">{%</span><span class="w"> </span><span class="nt">assign</span><span class="w"> </span><span class="nv">last_part</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="nv">frontmatter_var</span><span class="w"> </span><span class="p">|</span><span class="w"> </span><span class="nf">split</span><span class="p">:</span><span class="w"> </span><span class="s1">'.'</span><span class="w"> </span><span class="p">|</span><span class="w"> </span><span class="nf">last</span><span class="w"> </span><span class="cp">%}</span>
  <span class="cp">{%</span><span class="w"> </span><span class="nt">capture</span><span class="w"> </span><span class="nv">result</span><span class="w"> </span><span class="cp">%}{{</span><span class="w"> </span><span class="nv">site</span><span class="p">.</span><span class="nv">data</span><span class="p">[</span><span class="nv">site</span><span class="p">.</span><span class="nv">active_lang</span><span class="p">].</span><span class="nv">strings</span><span class="p">[</span><span class="nv">first_part</span><span class="p">][</span><span class="nv">last_part</span><span class="p">]</span><span class="w"> </span><span class="cp">}}{%</span><span class="w"> </span><span class="nt">endcapture</span><span class="w"> </span><span class="cp">%}</span>
<span class="cp">{%</span><span class="w"> </span><span class="nt">endif</span><span class="w"> </span><span class="cp">%}</span>

<span class="cp">{{</span><span class="w"> </span><span class="nv">result</span><span class="w"> </span><span class="cp">}}</span>
</code></pre></div></div>

<p>如果 <code class="language-plaintext highlighter-rouge">frontmatter_var = blog.title</code> ,这段代码就会生效。
This will work, for example, if <code class="language-plaintext highlighter-rouge">frontmatter_var = blog.title</code>.</p>

<p>现在,如果您需要在使用它之前检查本地化字符串(该案例情况下是 <code class="language-plaintext highlighter-rouge">blog.title</code>)是否实际存在于文件 <code class="language-plaintext highlighter-rouge">_data/:lang/strings.yml</code> 中,您将不得不创建一个插件来检查变量是否存在于文件 <code class="language-plaintext highlighter-rouge">_data/:lang/strings.yml</code> 中,如果存在,则使用它,否则回退到任何您想要的值。我不会详细介绍如何做到这一点,但我会向您展示如何使用它。您可以在<a href="https://github.com/george-gca/multi-language-al-folio/blob/main/_plugins/localization-exists.rb">这里</a>参阅该插件的代码。</p>

<div class="language-liquid highlighter-rouge"><div class="highlight"><pre class="highlight"><code><span class="cp">{%</span><span class="w"> </span><span class="nt">if</span><span class="w"> </span><span class="nv">frontmatter_var</span><span class="w"> </span><span class="ow">contains</span><span class="w"> </span><span class="s1">'.'</span><span class="w"> </span><span class="cp">%}</span>
  <span class="cp">{%</span><span class="w"> </span><span class="nt">capture</span><span class="w"> </span><span class="nv">contains_localization</span><span class="w"> </span><span class="cp">%}{%</span><span class="w"> </span><span class="nt">localization_exists</span><span class="w"> </span><span class="cp">{{</span><span class="w"> </span><span class="nv">frontmatter_var</span><span class="w"> </span><span class="cp">}}</span><span class="w"> </span><span class="cp">%}{%</span><span class="w"> </span><span class="nt">endcapture</span><span class="w"> </span><span class="cp">%}</span>
  <span class="cp">{%</span><span class="w"> </span><span class="nt">if</span><span class="w"> </span><span class="nv">contains_localization</span><span class="w"> </span><span class="o">==</span><span class="w"> </span><span class="s1">'true'</span><span class="w"> </span><span class="cp">%}</span>
    <span class="cp">{%</span><span class="w"> </span><span class="nt">assign</span><span class="w"> </span><span class="nv">first_part</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="nv">frontmatter_var</span><span class="w"> </span><span class="p">|</span><span class="w"> </span><span class="nf">split</span><span class="p">:</span><span class="w"> </span><span class="s1">'.'</span><span class="w"> </span><span class="p">|</span><span class="w"> </span><span class="nf">first</span><span class="w"> </span><span class="cp">%}</span>
    <span class="cp">{%</span><span class="w"> </span><span class="nt">assign</span><span class="w"> </span><span class="nv">last_part</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="nv">frontmatter_var</span><span class="w"> </span><span class="p">|</span><span class="w"> </span><span class="nf">split</span><span class="p">:</span><span class="w"> </span><span class="s1">'.'</span><span class="w"> </span><span class="p">|</span><span class="w"> </span><span class="nf">last</span><span class="w"> </span><span class="cp">%}</span>
    <span class="cp">{%</span><span class="w"> </span><span class="nt">capture</span><span class="w"> </span><span class="nv">result</span><span class="w"> </span><span class="cp">%}{{</span><span class="w"> </span><span class="nv">site</span><span class="p">.</span><span class="nv">data</span><span class="p">[</span><span class="nv">site</span><span class="p">.</span><span class="nv">active_lang</span><span class="p">].</span><span class="nv">strings</span><span class="p">[</span><span class="nv">first_part</span><span class="p">][</span><span class="nv">last_part</span><span class="p">]</span><span class="w"> </span><span class="cp">}}{%</span><span class="w"> </span><span class="nt">endcapture</span><span class="w"> </span><span class="cp">%}</span>
  <span class="cp">{%</span><span class="w"> </span><span class="nt">else</span><span class="w"> </span><span class="cp">%}</span>
    <span class="cp">{%</span><span class="w"> </span><span class="nt">capture</span><span class="w"> </span><span class="nv">result</span><span class="w"> </span><span class="cp">%}</span>fallback value<span class="cp">{%</span><span class="w"> </span><span class="nt">endcapture</span><span class="w"> </span><span class="cp">%}</span>
  <span class="cp">{%</span><span class="w"> </span><span class="nt">endif</span><span class="w"> </span><span class="cp">%}</span>
<span class="cp">{%</span><span class="w"> </span><span class="nt">endif</span><span class="w"> </span><span class="cp">%}</span>

<span class="cp">{{</span><span class="w"> </span><span class="nv">result</span><span class="w"> </span><span class="cp">}}</span>
</code></pre></div></div>

  </div>
  
  <div class="post">
    <h1 class="post-title">
      <a href="/zh-CN/2023/10/29/polyglot-1.7.0/">
        Polyglot 1.7.0 以及使用 page_id 前置元数据区分不同语言的永久链接
      </a>
    </h1>

    <span class="post-date">29 Oct 2023</span>

    <p>我很兴奋地宣布 Jekyll-Polyglot 1.7.0 版本发布了。这个版本增加了一个新功能,可以为页面设置特定于语言的永久链接,并保留它们与其他相关页面的关联。</p>

<p>这项新功能由 <strong><a href="https://github.com/antoniovazquezblanco">antoniovazquezblanco</a></strong> 提供,他是一位绅士和学者。</p>

<h2 id="使用-page_id-前置元数据将页面与不同永久链接关联">使用 <code class="language-plaintext highlighter-rouge">page_id</code> 前置元数据将页面与不同永久链接关联</h2>

<p>Polyglot 通过匹配永久链接或文件名来关联页面。然而,有些站点翻译可能希望页面具有独特的永久链接。</p>

<p>Polyglot 已经协调了不同语言的同一文档的多个副本。因此,基于 <code class="language-plaintext highlighter-rouge">page_id</code> 这样的新属性来协调相似页面,与基于永久链接协调没有任何区别。</p>

<p>使用 <code class="language-plaintext highlighter-rouge">page_id</code> 来协调具有不同永久链接的相似页面,确保了自定义永久链接仍然可以在特定语言的站点上看到。</p>

<h3 id="为独特永久链接设置重定向">为独特永久链接设置重定向</h3>

<p>独特永久链接的挑战在于相对化地生成的 URL。Polyglot 通过建议使用一致的永久链接完全避免了这个问题。</p>

<p>为了解决这个问题,Polyglot 在这些页面上设置了 <code class="language-plaintext highlighter-rouge">redirect_from</code> 隐藏前置元数据,列出了相应页面的唯一永久链接。</p>

<p>在使用 <code class="language-plaintext highlighter-rouge">jekyll-redirect-from</code> 插件时,将会读取这些前置元数据,并智能地将页面重定向到自定义的独特永久链接。</p>

<p>要查看此功能的实际效果,请访问<a href="/zh-CN/a-really-long/permalink/">这个不同语言的长永久链接的页面</a>。</p>

<h2 id="其他-bug-修复">其他 bug 修复</h2>

<ul>
  <li>本次发布应该修复了 <a href="https://github.com/untra/polyglot/issues/151">#151</a> 和 <a href="https://github.com/untra/polyglot/issues/184">#184</a>,防止在调用其他 jekyll 命令时启动时崩溃。</li>
</ul>

  </div>
  
</div>

<div class="pagination">
  
    <a class="pagination-item older" href="/zh-CN/page2">Older</a>
  
  
    <span class="pagination-item newer">Newer</span>
  
</div>

    </div>

  </body>
  <script async src="https://www.googletagmanager.com/gtag/js?id=G-HWC3D32MT8"></script>
  <script>
    window.dataLayer = window.dataLayer || [];
    function gtag(){dataLayer.push(arguments);}
    gtag('js', new Date());
  
    gtag('config', 'G-HWC3D32MT8');
  </script>
</html>