你正在嘗試做的也不是沒有可能修改Jekyll。他們定義的include
過濾器將其參數視爲字符串,而不是表達式。
我在過去曾與Jekyll創建過幾個雙語網站。我發現最乾淨的解決方案通常在_config.yml中存儲區域依賴變量,並在需要時引用它。
# _config.yml
...
locales:
en:
welcome_message: "Welcome to my site"
...
es:
welcome_message: "Bienvenido a mi sitio"
對於我渲染的每一頁,我都需要知道它的語言環境。這樣做的最簡單的方法是在頂部YAML添加locale
字段頁:
---
# a page or post (for example index.html)
...
locale: en
---
然後,您可以通過做page.locale
獲取當前頁面的語言環境。
如果您在文件夾(/en/ for english, /es/ for spanish, and so on
劃分你的網站,你可以使用頁面URL計算的語言環境,讓您不必在每一頁上指定區域:
{% capture locale %}{{ page.url | truncate: 3, "" | remove: "/" }}{% endcapture %}
{% if locale == "" %}{% assign locale = "en" %}{% endif %}
對於像/en/blog/
頁面,locale
將是「恩」;對於/fr/le-blog
,這將是「FR」你將不得不使用該行中的所有佈局,包括需要使用的語言環境,雖然
然後,您可以。得到這樣的本地化文本:
{{ site.locales[locale].welcome_message }}
或者,如果你喜歡page.locale
:
{{ site.locales[page.locale].welcome_message }}
菜單是相同的;你也可以從_config.yml生成它們:
# _config.yml
...
locales:
en:
nav:
- text: Welcome
url: /en/welcome
- text: Blog
url: /en/blog
layout: post
...
es:
nav:
- text: Bienvenido
url: /es/bienvenido
- text: Blog
url: /es/blog
layout: post
...
然後你可以有一個菜單。HTML生成根據頁面區域右鍵菜單:
{% capture locale %}{{ page.url | truncate: 3, "" | remove: "/" }}{% endcapture %}
{% if locale == "" %}{% assign locale = "en" %}{% endif %}
<nav>
<ul class="nav">
{% for link in site.locales[locale].nav %}
{% assign current = nil %}
{% if page.url == link.url or page.layout == link.layout %}
{% assign current = 'current' %}
{% endif %}
<li class="{% if forloop.first %}first{% endif %} {{ current }} {% if forloop.last %}last{% endif %}">
<a class="{{ current }}" href="{{ link.url }}">{{ link.text }}</a>
</li>
{% endfor %}
</ul>
</nav>
對於使用'page.locale'代替'locale'的,只是刪除了前兩行,並通過site.locales[page.locale].nav
我希望這個替換site.locales[locale].nav
幫助。
問候!
有添加多語言支持傑奇,如[這一個帕特里斯Brend'amour]插件(http://brendamour.net/en/2014/08/03/multilingual-jekyll-如何對後在-更比一個語言/)。 – DevSolar