使用 liquid 浏览嵌套的 yaml 列表

Navigate through nested yaml list with liquid

我已经看到一些关于这个主题的问题,但是 none 可以解决我的问题。我想在不使用任何插件的情况下拥有一个多语言的 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

但是我的代码没有打印任何内容,我只有两个没有文本的项目符号。我看不出我做错了什么,你们能帮帮我吗?

编辑:

好的,我唯一的问题是我没有在值指示器和值之间放置 space。现在问题解决了。谢谢!

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

YAML insists the “:” mapping value indicator be separated from the value by white space.

同时删除 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 键来访问该数据,而无需 menupage.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>