该页面由AI翻译并经过人工校对,你可能想要 查看原文
前言
如果您希望在部署博客后只使用单一语言,可以参考 i18n。但是,如果您希望在部署后使用多语言网站,甚至切换显示语言,而您的主题不支持(当然,有些主题,例如 NexT,已经支持),那么这篇博客就非常适合您。
可能的解决方案
创建多个博客并合并它们的public
这种方式,您需要创建多个博客,并使用构建脚本分别构建每个语言的博客,并将它们合并为一个public。
例如,您希望支持英语和中文。您可以使用 pnpm 来管理工作区,并创建如下目录结构。
1 | my-blog |
每种语言的博客都被放入packages中,你可以像以前一样在其中撰写文章,除了一些我稍后会提到的更改。
但是,如果你想构建到public,则需要一个自定义的构建脚本,该脚本用于构建每种语言并将其public复制到你的项目根目录的public。
1 | # build.sh |
真正痛苦的是本地预览,hexo server
根本没用。您要么需要实现类似hexo server
的功能,要么使用 build.sh 和 http-server 进行预览,但这比hexo server
慢得多。
另一个痛点是必须进行一些修改才能确保一切正常。例如,在 packages/zh-CN 目录中,_config.yml 中的root应该是 /zh-CN,并且资源引用路径可能需要以 /zh-CN 为前缀。packages/en也是类似的操作。
起初,我采用了这个解决方案,但逐渐感到厌倦,幸运的是,我找到了另一种更适合我的方法。
自定义主题
谈到自定义主题,我们可能会感到畏惧。但幸运的是,这个主题 arch 支持多语言网站功能。如果您更喜欢使用自己现在的主题并希望使用此功能,可以参考 arch 的实现或寻求其作者的帮助。
据我所知,这个主题基于 hexo-theme-oranges 构建,并支持所有 oranges 的功能。查看其代码,我发现 arch 移除了所有 hexo-generator-*,并在 plugin 中使用了它自己的实现👍。查看源代码后,我发现文章被划分到不同语言的子目录中,而属于同一语言的导航菜单则合并在一起。以下是我当前的目录结构。
1 | source |
如果您可能需要一个多语言网站,那么 arch 将是您的理想之选。