在 hugo 配置文件中使用可变语言特定字符串
Use variable language specific strings in hugo config file
我的目标是使用 hugo 构建一个多语言站点。为此,我想:
- 不要碰主题文件
- 有一个配置文件,它定义了所有语言的整体结构(config.toml)
- 有一个适用于所有语言的 "string" 文件
例如,我会有一个这样的 config.toml 文件:
[params.navigation]
brand = "out-website"
[params.navigation.links]
about = $ABOUT_NAME
services = $SERVICES_NAME
team = $TEAM_NAME
impressum = $IMPRESSUM_NAME
一个英文文件:
ABOUT_NAME=About
SERVICES_NAME=Services
TEAM_NAME=Team
IMPRESSUM_NAME=Impressum
和这样的德语文件:
ABOUT_NAME=Über uns
SERVICES_NAME=Dienste
TEAM_NAME=Mitarbeiter
IMPRESSUM_NAME=Impressum
然后我想编译英文项目,我做了一些事情:
hugo --theme=... --config=config.toml --config=english.toml
和德语:
hugo --theme=... --config=config.toml --config=german.toml
或以同样的方式。
为此,我需要使用在 english.toml 或 german.toml
中定义的 config.toml 中的变量
我的 google 搜索到目前为止说,我不能在 toml 中使用变量。
那么有没有不同的方法可以实现这一点?
您使用变量的方法不是最优的,请使用下面的教程。
多语言站点将作为 Hugo 0.16 的一个功能出现,但我使用 this 教程和一些技巧在当前的 Hugo 上成功地构建了一个多语言站点。
以上教程需要"have a separate domain name for each language"。我设法绕过它,必须访问站点,一个在根目录 (EN),一个在文件夹 (/LT/)。
这是我使用的步骤。
设置可靠的构建运行器,你可以使用Grunt/Gulp,但我使用了npm脚本。我黑了 npm-build-boilerplate 并从 Hugo 外包了渲染。 Hugo 仅用于生成文件。 这很重要,因为 1) 我们将生成两个站点; 2) 黑客需要对文件夹进行操作,这在 npm 上很容易(我不精通构建自定义 Grunt/Gulp 脚本)。
按照教程在根文件夹中设置 config_en.toml 和 config_de.toml。
这是我的 config_en.toml 的摘录:
contentdir = "content/en"
publishdir = "public"
这是我的 config_lt.toml 的摘录(在你的情况下将其更改为 DE):
contentdir = "content/lt"
publishdir = "public/lt"
基本上,我希望我的 website.com
显示 EN 版本,website.com/lt/
显示 LT 版本。这偏离了教程,需要修改。
按照教程在 /data
文件夹中设置翻译。
奖励:在 Dash 上设置代码段:
{{ ( 索引 $.Site.Data.translations $.Site.Params.locale ).@cursor }}
每当我输入 "trn" 时,我都会得到上面的结果,剩下的就是从翻译文件中粘贴密钥,然后我会得到正确语言的值。
- 破解部分。博客 posts 在
/lt/
上运行良好,但在静态页面(landing pages)上运行良好。我使用 this 指令。
基本上,每个静态页面,例如 content/lt/duk.md
都会设置 slug:
slug: "lt/duk"
但是这个 slug 会导致 double URL 路径,例如 lt/lt/duk
.
我使用 rsync
和手动命令删除冗余文件夹,使用我的 npm 脚本任务恢复此文件:
"restorefolders": "rsync -a public/lt/lt/ public/lt/ && rm -rf public/lt/lt/",
我的目标是使用 hugo 构建一个多语言站点。为此,我想:
- 不要碰主题文件
- 有一个配置文件,它定义了所有语言的整体结构(config.toml)
- 有一个适用于所有语言的 "string" 文件
例如,我会有一个这样的 config.toml 文件:
[params.navigation]
brand = "out-website"
[params.navigation.links]
about = $ABOUT_NAME
services = $SERVICES_NAME
team = $TEAM_NAME
impressum = $IMPRESSUM_NAME
一个英文文件:
ABOUT_NAME=About
SERVICES_NAME=Services
TEAM_NAME=Team
IMPRESSUM_NAME=Impressum
和这样的德语文件:
ABOUT_NAME=Über uns
SERVICES_NAME=Dienste
TEAM_NAME=Mitarbeiter
IMPRESSUM_NAME=Impressum
然后我想编译英文项目,我做了一些事情:
hugo --theme=... --config=config.toml --config=english.toml
和德语:
hugo --theme=... --config=config.toml --config=german.toml
或以同样的方式。
为此,我需要使用在 english.toml 或 german.toml
中定义的 config.toml 中的变量我的 google 搜索到目前为止说,我不能在 toml 中使用变量。 那么有没有不同的方法可以实现这一点?
您使用变量的方法不是最优的,请使用下面的教程。
多语言站点将作为 Hugo 0.16 的一个功能出现,但我使用 this 教程和一些技巧在当前的 Hugo 上成功地构建了一个多语言站点。
以上教程需要"have a separate domain name for each language"。我设法绕过它,必须访问站点,一个在根目录 (EN),一个在文件夹 (/LT/)。
这是我使用的步骤。
设置可靠的构建运行器,你可以使用Grunt/Gulp,但我使用了npm脚本。我黑了 npm-build-boilerplate 并从 Hugo 外包了渲染。 Hugo 仅用于生成文件。 这很重要,因为 1) 我们将生成两个站点; 2) 黑客需要对文件夹进行操作,这在 npm 上很容易(我不精通构建自定义 Grunt/Gulp 脚本)。
按照教程在根文件夹中设置 config_en.toml 和 config_de.toml。
这是我的 config_en.toml 的摘录:
contentdir = "content/en"
publishdir = "public"
这是我的 config_lt.toml 的摘录(在你的情况下将其更改为 DE):
contentdir = "content/lt"
publishdir = "public/lt"
基本上,我希望我的 website.com
显示 EN 版本,website.com/lt/
显示 LT 版本。这偏离了教程,需要修改。
按照教程在
/data
文件夹中设置翻译。奖励:在 Dash 上设置代码段:
{{ ( 索引 $.Site.Data.translations $.Site.Params.locale ).@cursor }}
每当我输入 "trn" 时,我都会得到上面的结果,剩下的就是从翻译文件中粘贴密钥,然后我会得到正确语言的值。
- 破解部分。博客 posts 在
/lt/
上运行良好,但在静态页面(landing pages)上运行良好。我使用 this 指令。
基本上,每个静态页面,例如 content/lt/duk.md
都会设置 slug:
slug: "lt/duk"
但是这个 slug 会导致 double URL 路径,例如 lt/lt/duk
.
我使用 rsync
和手动命令删除冗余文件夹,使用我的 npm 脚本任务恢复此文件:
"restorefolders": "rsync -a public/lt/lt/ public/lt/ && rm -rf public/lt/lt/",