Polyglot · Straightforward I18n for Jekyll Blogs
Description: 一款为 Jekyll 提供 i18n 多语言功能的插件，方便快捷，适用于各类大小博客
Keywords: 多语言, i18n, 杰基尔, 多语种, 快速, 直观, untra, 깃허브, 页面, 博客, 插件, 卢比, gem, 国际化, 本地化, 翻译, 语言, 支持, 多语言, 多语言

# 本地化变量

29 Feb 2024

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

下面我将使用一个使用 Polyglot 创建的模板站点 作为示例。

## 在页面之间共享布局

在这个网站中，他们为每种语言的每个页面都有一个关于页面。其中，英语版本在 _pages/en-us/about.md，而巴西葡萄牙语版本在 _pages/pt-br/about.md 中。在这两个页面中，我们可以看到它们的前置元数据中有相同的键，但有些值不同。这两个文件都指向相同的布局：关于页面模板，并且此页面模板使用前置元数据中的值来渲染页面。

例如，英语页面的 `subtitle` 键的值为 `subtitle: <a href='#'>Affiliations</a>. Address. Contacts. Moto. Etc.`，而巴西葡萄牙语页面的值为 `subtitle: <a href='#'>Afiliações</a>. Endereço. Contatos. Lema. Etc.`。要在布局中使用此信息，可以这样使用：

    {{ page.subtitle }}

这两个文件中前置元数据下方的内容也是一样的，可以在布局中这样使用：

    {{ content }}

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

## 在页面之间共享布局和本地化数据

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

比如说，在模板站点中有两个文件，_data/en-us/strings.yml 和 _data/pt-br/strings.yml。在第一个文件中，前置元数据内容包括：

    latest_posts: latest posts

而在第二个文件中，前置元数据内容包括：

    latest_posts: últimas postagens

这样，他们可以在布局中使用 `latest_posts` 键，如下所示：

    {{ site.data[site.active_lang].strings.latest_posts }}

这样一来，`latest_posts` 变量的值将正确获取到当前语言的 `_data/:lang/strings.yml` 文件中定义的值。

## 在前置元数据中定义要使用的变量

现在，如果您想在页面的前置元数据中定义这个变量，这就有点棘手了。一个可能的解决方案是检查变量的值中是否有 `.`，如果有，就使用文件 `_data/:lang/strings.yml` 中的值。你可以这么进行操作：

    {% if frontmatter_var contains '.' %}
      {% assign first_part = frontmatter_var | split: '.' | first %}
      {% assign last_part = frontmatter_var | split: '.' | last %}
      {% capture result %}{{ site.data[site.active_lang].strings[first_part][last_part] }}{% endcapture %}
    {% endif %}

    {{ result }}

如果 `frontmatter_var = blog.title` ，这段代码就会生效。 This will work, for example, if `frontmatter_var = blog.title`.

现在，如果您需要在使用它之前检查本地化字符串（该案例情况下是 `blog.title`）是否实际存在于文件 `_data/:lang/strings.yml` 中，您将不得不创建一个插件来检查变量是否存在于文件 `_data/:lang/strings.yml` 中，如果存在，则使用它，否则回退到任何您想要的值。我不会详细介绍如何做到这一点，但我会向您展示如何使用它。您可以在这里参阅该插件的代码。

    {% if frontmatter_var contains '.' %}
      {% capture contains_localization %}{% localization_exists {{ frontmatter_var }} %}{% endcapture %}
      {% if contains_localization == 'true' %}
        {% assign first_part = frontmatter_var | split: '.' | first %}
        {% assign last_part = frontmatter_var | split: '.' | last %}
        {% capture result %}{{ site.data[site.active_lang].strings[first_part][last_part] }}{% endcapture %}
      {% else %}
        {% capture result %}fallback value{% endcapture %}
      {% endif %}
    {% endif %}

    {{ result }}

# Polyglot 1.7.0 以及使用 page_id 前置元数据区分不同语言的永久链接

29 Oct 2023

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

这项新功能由 antoniovazquezblanco 提供，他是一位绅士和学者。

## 使用 `page_id` 前置元数据将页面与不同永久链接关联

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

Polyglot 已经协调了不同语言的同一文档的多个副本。因此，基于 `page_id` 这样的新属性来协调相似页面，与基于永久链接协调没有任何区别。

使用 `page_id` 来协调具有不同永久链接的相似页面，确保了自定义永久链接仍然可以在特定语言的站点上看到。

### 为独特永久链接设置重定向

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

为了解决这个问题，Polyglot 在这些页面上设置了 `redirect_from` 隐藏前置元数据，列出了相应页面的唯一永久链接。

在使用 `jekyll-redirect-from` 插件时，将会读取这些前置元数据，并智能地将页面重定向到自定义的独特永久链接。

要查看此功能的实际效果，请访问这个不同语言的长永久链接的页面。

## 其他 bug 修复

- 本次发布应该修复了 #151 和 #184，防止在调用其他 jekyll 命令时启动时崩溃。

# Polyglot 1.6.0 以及简体中文支持

08 Jun 2023

Polyglot 网站 现已更新支持中文！

本次更新由 aturret 带来。他做出了包括插件 bug 修正、网站 bug 修正，以及整个网站的中文完全翻译在内的诸多贡献。

此外，现在可以通过 RubyGems 下载 jekyll-polyglot 1.6.0 了。

## 修复对冻结字符串进行相对化时的问题

Polyglot 先前使用 String::gsub! 进行字符串修正，导致在修正 `.frozen?` 字符串时出现错误。现在已通过在修改之前复制一份克隆的字符串修复此问题。

## 修复站点导航未被翻译的问题

之前，网站布局中 html 中存在拼写错误，导致无法正确翻译之前的翻页导航。现已修复。

## 中文语言支持

要向 aturret 的支持和欣赏说声大大的谢谢, polyglot.untra.io 现在支持 `zh-CN` 简体中文翻译了！

# Polyglot 网站朝鲜语支持上线

27 Feb 2023

Polyglot 网站 现已更新提供对朝鲜语的支持！

感谢 SalinatedCoffee 提供翻译贡献！프로젝트를 도와 주셔서 고마워요！

# Polyglot 1.5.1

01 Oct 2022

Polyglot 1.5.1 版本现已发布。

## 锚点链接中 url 的相对化

在 GitHub 用户 dougieh 的帮助下， Polyglot 现在可以相对化锚点链接中的 url 了。

## 希伯来语支持

Shalom，我的希伯来兄弟姐妹们！Polyglot 官方网站现在支持 עברית 了!

Older Newer