如何使用Jekyll的字符串插值?

时间:2017-01-18 12:35:42

标签: ruby jekyll interpolation

我有一个允许语言选择的Jekyll 3项目。我们使用'jekyll-multiple-languages-plugin'宝石进行国际化。 我们有一个词汇表,应根据所选语言显示德语术语或英语术语。我使用'jekyll-multiple-languages-plugin'gem提供的变量site.lang来获取所选语言。 现在,glossary.html看起来像这样

  <div id="glossary">
    {% if site.lang == "de" %}
      {% for term in site.data['terms_de'] %}
        <!-- German glossary goes here -->
      {% endfor %}
    {% elsif site.lang == "en" %}
      {% for term in site.data['terms_en'] %}
        <!-- English glossary goes here -->
      {% endfor %}
    {% endif %}
  </div>

但是,我喜欢这样的东西

  <div id="glossary">
     {% for term in site.data["terms_#{site.lang}"] %}
       <!-- Glossary goes here -->
     {% endfor %}
  </div>

但由于某种原因,字符串插值"terms_#{site.lang}"不起作用。我也试过'terms_'+site.lang

我认为插值不起作用,因为当我在页面中放置{{ site.lang }}时,我会看到所选语言,但是当我写{{ "terms_"+site.lang }}时,我看不到任何内容。

提前致谢。

1 个答案:

答案 0 :(得分:3)

您可以使用capture标记,而不是显示它为变量设置的值:

{% capture term_lang %}{{ 'terms_' | append: site.lang }}{% endcapture%}

然后您可以将该变量用作数组的索引:

 site.data[term_lang]

在你的例子中:

{% capture term_lang %}{{ 'terms_' | append: site.lang }}{% endcapture%}
<div id="glossary">
 {% for term in site.data[term_lang] %}
   <!-- Glossary goes here -->
 {% endfor %}
</div>