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 · 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 · 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>© 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: <a href='#'>Affiliations</a>. Address. Contacts. Moto. Etc.</code>,而巴西葡萄牙语页面的值为 <code class="language-plaintext highlighter-rouge">subtitle: <a href='#'>Afiliações</a>. 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>
|