Polyglot 1.8.1 - 社区 Bug 修复发布
18 Aug 2024Jekyll-Polyglot 1.8.1 版本已经发布,其中包含了一些功能改进,并修复了社区发现的 Bug。
社区提供的 Bug 修复
hacketiwack 提供了用于更严格检查设置文档永久链接的代码,防止因空的前置字段导致的下游问题。
Github 用户 blackpill 提交了针对 i18n headers 标签的单字符错误修复,用于渲染默认语言链接的替代链接(href)。
Jekyll-Polyglot 1.8.1 版本已经发布,其中包含了一些功能改进,并修复了社区发现的 Bug。
hacketiwack 提供了用于更严格检查设置文档永久链接的代码,防止因空的前置字段导致的下游问题。
Github 用户 blackpill 提交了针对 i18n headers 标签的单字符错误修复,用于渲染默认语言链接的替代链接(href)。
非常兴奋地宣布 Jekyll-Polyglot 1.8.0 版本发布了,这个版本增加了一些功能改进,并认可了来自社区的文档和贡献!
Polyglot 1.8.0 版本增加了一些新功能,可以为页面设置特定于语言的永久链接,并保留它们与其他相关页面的关联。这个新功能由一位绅士和学者—— antoniovazquezblanco 提供。
这个版本还认可了 jerturowetz 提供的高质量 sitemap.xml 和 robots.txt 解决方案。本网站现在通过这些文件更好地展示和捕获了搜索引擎提供的 SEO 力量。可以在这里查看示例网站的文件。
GitHub 用户 obfusk 在几年前贡献了一个微小的 PR:
通过多语言 :site, :post_write
钩子,像这样为每个子进程运行:
Jekyll::Hooks.register :site, :post_write do |site|
...
end
这个版本增加了一个自定义 :post_write
钩子,它在所有语言处理完成后运行一次(无论是否使用 parallel_localization
):
Jekyll::Hooks.register :polyglot, :post_write do |site|
# do something amazing here!
end
这一特性对于使用了 Jekyll hook 插件的复杂的 Jekyll 静态站点非常有用。
她还为语言子进程崩溃时的额外日志记录提供了修复。感谢这个贡献!
george-gca 是一个才华横溢的、很棒的家伙,他为如何最好地从站点数据本地化富文本贡献了一整篇博客文章。他还提供了本站的葡萄牙语翻译。
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 }}
我很兴奋地宣布 Jekyll-Polyglot 1.7.0 版本发布了。这个版本增加了一个新功能,可以为页面设置特定于语言的永久链接,并保留它们与其他相关页面的关联。
这项新功能由 antoniovazquezblanco 提供,他是一位绅士和学者。
page_id
前置元数据将页面与不同永久链接关联Polyglot 通过匹配永久链接或文件名来关联页面。然而,有些站点翻译可能希望页面具有独特的永久链接。
Polyglot 已经协调了不同语言的同一文档的多个副本。因此,基于 page_id
这样的新属性来协调相似页面,与基于永久链接协调没有任何区别。
使用 page_id
来协调具有不同永久链接的相似页面,确保了自定义永久链接仍然可以在特定语言的站点上看到。
独特永久链接的挑战在于相对化地生成的 URL。Polyglot 通过建议使用一致的永久链接完全避免了这个问题。
为了解决这个问题,Polyglot 在这些页面上设置了 redirect_from
隐藏前置元数据,列出了相应页面的唯一永久链接。
在使用 jekyll-redirect-from
插件时,将会读取这些前置元数据,并智能地将页面重定向到自定义的独特永久链接。
要查看此功能的实际效果,请访问这个不同语言的长永久链接的页面。
Polyglot 网站 现已更新支持中文!
本次更新由 aturret 带来。他做出了包括插件 bug 修正、网站 bug 修正,以及整个网站的中文完全翻译在内的诸多贡献。
此外,现在可以通过 RubyGems 下载 jekyll-polyglot 1.6.0 了。
Polyglot 先前使用 String::gsub! 进行字符串修正,导致在修正 .frozen?
字符串时出现错误。现在已通过在修改之前复制一份克隆的字符串修复此问题。
之前,网站布局中 html 中存在拼写错误,导致无法正确翻译之前的翻页导航。现已修复。
要向 aturret 的支持和欣赏说声大大的谢谢, polyglot.untra.io 现在支持 zh-CN
简体中文翻译了!