【问题标题】:Include subdirectory as part of Jekyll's post URL包含子目录作为 Jekyll 的帖子 URL 的一部分
【发布时间】:2019-01-14 21:08:53
【问题描述】:

我正在建立一个英语和西班牙语两种语言的博客。我的意图是直接从基本 URL:http://blog/ 访问默认的西班牙语内容,从 http://blog/en 访问英文内容。

通过检查我在每个帖子前端问题中设置的locale 变量进行分页时,我已经有了所有代码来循环仅用英语或西班牙语发布帖子。虽然我的博客文章没有相同的文件名,但我使用前面的另一个变量链接它们,称为 ref

所以对于西班牙文的帖子 A 和英文的帖子 B,我会有这样的内容:

2018-01-01-post-A.md

---
locale: en
ref: my-ref
---
foo

2019-01-04-post-B.md:

---
locale: es
ref: my-ref
---
bar

我的问题是:我应该把我的英文帖子放在哪里,以便通过http://blog/en/post-name/ 访问它们?

这些帖子除了语言之外已经有自己的类别,因此将它们放在/en/_posts 中是行不通的,因为将_config.yml 中的永久链接指定为permalink: /:categories/:year/:month/:title/ 之类的东西会使网址看起来像http://blog/en/category-1/category-2/post-name .

在每篇英文帖子中定义一个永久链接也不是一种选择,因为我希望它们是从帖子数据(日期和标题)中生成的。

我是否缺少某些东西可以让我根据需要使用 /en/ 作为 URL 的一部分?

菜单语言选择器和分页都有效,只显示所选语言的帖子。但是,当将鼠标悬停在英文帖子上时,虽然我将它们放在 _posts/en 中,但子文件夹不会成为 url 的一部分。当我尝试相反的情况时也会发生同样的情况,在项目根目录中创建一个名为 en 的新文件夹并在其中添加所有英文帖子,留下类似 en/_posts/ 的内容

【问题讨论】:

标签: ruby jekyll liquid


【解决方案1】:

您可以为您的英文页面设置frontmatter default

# _config.yml

defaults:
-
    scope:
      locale: "en" # To sort by locale. You could also sort by path.
      type: "posts"
    values:
      permalink: en/:categories/:year/:month/:title/

【讨论】:

  • 这成功了!这种方法有什么缺点吗?我假设我必须为类型创建另一个默认值:“页面”并复制所有这些,对吗?
  • 值得阅读我链接的文档。您可以通过 frontmatter 设置的任何内容,都可以设置默认值。没有缺点,这正是它的目的!
  • 谢谢罗伯特!接受您的解决方案。
猜你喜欢
  • 2015-07-24
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-06-11
  • 2016-03-13
  • 2013-03-03
  • 2014-01-03
  • 1970-01-01
相关资源
最近更新 更多