Cytrogen 的个人博客

万圣节恶魔的领地

马上订阅 Cytrogen 的个人博客 RSS 更新: https://cytrogen.icu/atom.xml

Hexo 配置 i18n

2024年12月2日 10:20

运营个人博客时,可能会遇到这样的需求:希望网站能够支持多语言,让来自不同地区的读者都能便捷地阅读我们的内容。

这就需要用到网站的国际化(也就是 i18n)功能。

对于使用 Hexo 搭建的博客而言,实现国际化不仅需要考虑内容的翻译,还要处理模板渲染等问题。

  • 本文使用的主要插件是 hexo-generator-plus

    kiwirafe/hexo-generator-plus - GitHub

    在开始配置之前,请确保已经卸载以下插件以避免冲突:

    • hexo-generator-archive
    • hexo-generator-category
    • hexo-generator-index
    • hexo-generator-tag
  • 本文使用的模板语言是 Pug 语言。

  • 对于导航栏中切换语言的方案,我只实现了双语言的逻辑。

基础配置

为了避免困扰:

  1. Hexo 根目录下的 _config.yml 将被称呼为 Hexo 配置项
  2. themes/**/_config.yml 将被称呼为 主题配置项

首先,我们需要在 Hexo 的配置文件中进行一些基本设置。这些设置将决定网站的语言选项和 URL 结构。

language: [zh, en]  # 支持的语言列表,第一个为默认语言new_post_name: :title.md  # 新文章的命名方式# 如果你安装了 hexo-abbrlinkpermalink: posts/:abbrlink.html  # 文章的永久链接格式abbrlink:  rep: hex  # 使用十六进制作为文章的唯一标识# hexo-generator-plus 的配置项generator_plus:  language: [zh, en]  # 生成器支持的语言列表  pagination_dir: 'page'  # 分页目录  generator: ["index", "archive", "category", "tag"]  # 需要生成的页面类型  # 首页生成器配置  index_generator:    per_page: 10  # 这些数字和顺序可以自定义    order_by: -date  # 归档页面配置  archive_generator:    per_page: 25    order_by: -date  # 分类页面配置  category_generator:    per_page: 25    order_by: -date    enable_index_page: true  # 如果你想要分类列表页的话  # 标签页面配置  tag_generator:    per_page: 25    order_by: name    enable_index_page: true  # 如果你想要标签列表页的话

接着在主题配置项里配置想要的菜单链接:

menu:   home: /   archive: /archives   categories: /categories   tags: /tags   about: /about   GitHub: https://github.com/cytrogen   RSS: /atom.xml

目录结构

以下是必需的目录结构:

source/├── _posts/                     # 默认语言的所有博文│   └── *.md                    # 不能有子目录├── en/                         # 英文版特定内容│   └── 与 source 目录结构相同├── archives/                   # 归档页面│   └── index.md                # layout: archive├── categories/                 # 分类页面│   └── index.md                # layout: category-index└── tags/                       # 标签页面    └── index.md                # layout: tag-index

当然,你也可以选择其他语言,但其他语言的目录需要和对应的 themes/**/languages/*.yml 的名称相同。

请确保每个 *.md 的 Front-Matter 中都有 lang: **

语言文件配置

网站的固定文本(如导航菜单、按钮文字等)需要通过语言文件来实现国际化。这些文件需要放在 themes/**/languages/ 目录下。

这是我的例子:

  1. zh.yml

    menu:home: 首页archive: 归档tags: 标签categories: 分类about: 关于friendlinks: 友情链接archive_title: 归档tags_title: 标签categories_title: 分类prev: 上一页next: 下一页prev_post: 上一篇next_post: 下一篇more: ...阅读全文translated: 翻译 · 原文地址...

剩余内容已隐藏

查看完整文章以阅读更多