使用液体浏览嵌套的yaml列表

时间:2017-10-28 10:13:11

标签: menu internationalization yaml jekyll liquid

我已经看过关于这个主题的一些问题,但没有一个可以解决我的问题。我希望有一个多语言的jekyll网站,而不使用任何插件。我有一个带有这个嵌套列表的yaml文件

menu:
  fr:
    home:
      name:"Acceuil"
      url:"/"
    team:
      name:"Équipe"
      url:"/equipe"
  en:
    home:
      name:"Home"
      url:"/home.html"
    team:
      name:"Team"
      url:"/team"

我想根据yaml前面的页面 lang 选项打印不同的菜单。最小的例子是:

---
lang: en
---
<ul>
  {% for item in site.menu.[page.lang] %}
      <li><a href="{{ item[1].url }}">{{ item[1].name }}</a></li>
  {% endfor %}
</ul>

这应该以原始html打印

  • 主页

但是我的代码没有打印任何东西,我只有两个没有文字的子弹。我看不出我做错了什么,你能帮助我吗?

修改

好吧,我唯一的问题就是我没有在价值指标和价值之间留出空间。现在问题解决了。谢谢!

1 个答案:

答案 0 :(得分:0)

根据YAML规范,在菜单文件中的冒号和值之间添加一个空格:

  

YAML坚持将“:”映射值指标与之分开   白色空间的价值。

同时删除menu:键并将菜单保存在名为_data/menu.yml的文件中。

fr:
  home:
    name: "Acceuil"
    url: "/"
  team:
    name: "Équipe"
    url: "/equipe"
en:
  home:
    name: "Home"
    url: "/home.html"
  team:
    name: "Team"
    url: "/team"

然后,您可以site.data.menu直接访问lang密钥而.menu之间没有page.lang来访问该数据:

<ul>
    {% for item in site.data.menu[page.lang] %}
      <li><a href="{{ item[1].url }}">{{ item[1].name }}</a></li>
  {% endfor %}
</ul>

这会产生:

<ul>

      <li><a href="/home.html">Home</a></li>

      <li><a href="/team">Team</a></li>

</ul>