当前位置:首页 > 技术 > 正文内容

Hexo 博客多语言配置:通过 Nginx 实现中英文自动切换

访客 技术 2026年7月10日 1

本文将指导您如何配置 Hexo 博客,使其支持中英文双语,并实现用户手动切换及基于浏览器语言设置的自动重定向功能。核心思路是利用 Hexo 的多配置文件特性生成不同语言的静态文件,再通过 Nginx 的重写规则进行智能路由。

核心功能说明

URL 结构区分

博客的中文版和英文版通过不同的 URL 前缀进行区分:

  • 中文版首页:https://yourdomain.com/cn/blog/
  • 英文版首页:https://yourdomain.com/en/blog/

手动语言切换

在任何页面,用户都可以通过点击导航栏中的语言切换链接,在两种语言版本间自由跳转。例如,在中文文章页面点击 "English" 链接,即可跳转到对应的英文版页面。

自动语言重定向

当用户访问不包含语言前缀的 URL(如 https://yourdomain.com/blog/post-title/)时,Nginx 会根据其浏览器设置的首选语言,自动将请求重定向到相应的语言版本。

Hexo 多配置设置

创建英文版配置文件

在 Hexo 项目根目录下,创建一个新的配置文件,例如 _config_en.yml,用于定义英文版站点的参数。

# 网站基础信息
title: "My English Blog Title"
subtitle: "A subtitle for the English version"
description: "This is the English description of the blog."
keywords: "english, blog, tech"
language: en  # 关键设置,指定语言为英语

# URL 配置
url: "https://example.com/en/blog"  # 英文版博客的完整 URL
root: "/en/blog/"  # 英文版博客的根路径

# 目录结构
source_dir: source_en  # 英文版源文件目录
public_dir: public_en  # 英文版静态文件输出目录

此配置文件的核心是 language: en,它告诉 Hexo 使用英文的语言包。同时,通过设置独立的 source_dirpublic_dir,确保中英文内容被分开处理,互不干扰。

添加构建脚本

为了方便管理,在 package.json 文件中添加针对英文版的构建、清理和本地预览命令。

{
  "scripts": {
    "build:en": "hexo generate --config _config.yml,_config_en.yml",
    "clean:en": "hexo clean --config _config.yml,_config_en.yml",
    "server:en": "hexo server --config _config.yml,_config_en.yml"
  }
}

这些脚本会同时使用主配置文件和英文版配置文件进行操作,生成叠加后的配置。系统会自动生成一个 _multiconfig.yml 文件,建议将其添加到 .gitignore 中。

Nginx 服务器配置

在 Nginx 的虚拟主机配置中,添加以下规则以实现智能路由。

# 根据浏览器语言首选项进行重定向
if ($http_accept_language ~* "^en") {
    rewrite ^(/blog.*)$ /en$1 permanent; # 永久重定向 (301)
}
rewrite ^(/blog.*)$ /cn$1 permanent; # 默认重定向到中文版

# 配置中文版站点
location /cn/blog {
    alias /var/www/hexo_blog/public; # 使用 alias 指向中文版静态文件
    error_page 404 = $scheme://$host/cn/blog; # 404 时跳转到中文首页
}

# 配置英文版站点
location /en/blog {
    alias /var/www/hexo_blog/public_en; # 使用 alias 指向英文版静态文件
    error_page 404 = $scheme://$host/en/blog; # 404 时跳转到英文首页
}

上述配置中,$http_accept_language 是 Nginx 内置变量,用于获取请求头中的 Accept-Language。通过正则表达式匹配以 "en" 开头的语言代码,实现英文用户的自动重定向。默认情况下,所有其他语言请求都会被重定向到中文版。alias 指令用于正确映射静态文件目录,而 error_page 则确保当请求的页面不存在时,用户被引导至相应语言的首页。

前端语言切换功能

在主题的 JavaScript 文件中(例如 themes/your-theme/source/js/main.js),添加以下代码以动态生成语言切换链接。

// 检测当前页面语言并生成切换链接
const currentLang = location.pathname.startsWith('/en') ? 'en' : 'cn';
const switchLink = document.createElement('a');
switchLink.className = 'main-nav-link';

if (currentLang === 'en') {
    switchLink.textContent = '中文';
    switchLink.href = location.pathname.replace('/en', '/cn');
} else {
    switchLink.textContent = 'English';
    switchLink.href = location.pathname.replace('/cn', '/en');
}

// 将切换链接添加到导航栏
const navContainer = document.querySelector('#sub-nav');
if (navContainer) {
    navContainer.insertBefore(switchLink, navContainer.firstChild);
}

此脚本通过检查当前 URL 的路径前缀来判断当前语言。然后,它会创建一个指向另一语言版本的链接,并将其插入到导航栏的指定位置。如果目标页面不存在,Nginx 的重定向规则会自动将其引导至正确的首页。

相关文章

Linux crontab 详解

1) crontab 是什么cron 是 Linux 的定时任务守护进程;crontab 是用来编辑/查看“按时间周期执行命令”的表(cron table)。常见两类:用户 crontab:每个用户一份(crontab -e 编辑)系统级 crontab / cron.d:可指定执行用户(/etc/crontab、/etc/cron.d/*)2) crontab 时间...

富文本里可以允许的 HTML 属性

一、所有标签默认允许的安全属性(极少)class        (可选)id           (通常建议禁用)title️ 注意:id 容易被滥用做锚点注入,很多系统直接禁用class 允许的话最好只允许固定前缀(如 editor-*)二、a 标签允许属性<a href="" t...

Mac 安装 Node.js 指南

方法一:通过官网安装包(最简单,适合初学者)如果你只是想快速安装并开始使用,这是最直接的方法。访问 Node.js 官网。页面会显示两个版本:LTS (Recommended For Most Users):长期支持版,最稳定。建议选这个。Current:最新特性版,包含最新功能但可能不够稳定。下载 .pkg 安装包并运行。按照安装向导点击“下一步”即可完成。方法二:使用 Homebrew 安装(...

Dom\HTML_NO_DEFAULT_NS 的副作用:自动加闭合标签

在使用Dom\HTMLDocument时,Dom\HTML_NO_DEFAULT_NS 将禁止在解析过程中设置元素的命名空间, 此设置是为了与DOMDocument向后兼容而存在的。当使用它时,已知的一个副作用就是:自动加闭合标签例如 </img> 为什么会这样?当你使用:Dom\HTML_NO_DEFAULT_NS文档会变成 无命名空间模式,此时内部更接近 XML...

Laravel 事件和监听器创建

在 Laravel 中,使用 Artisan 命令创建 Events(事件) 和 Listeners(监听器) 是非常高效的。你可以通过以下几种方式来实现:1. 手动创建单个 Event如果你只想创建一个事件类,可以使用 make:event 命令:Bashphp artisan make:event UserRegistered执行后,文件将生成在 app/Even...

自定义域名解析神器 dnsmasq

什么是 dnsmasq?dnsmasq 是一个轻量级、功能强大的网络服务工具,专为小型和中等规模网络设计。它是一个综合的网络基础设施解决方案[1]。dnsmasq 能做什么?功能说明应用场景DNS 转发与缓存将 DNS 查询转发到上游服务器(ISP、Google DNS 等),并在本地缓存结果加快 DNS 查询速度,减少外部 DNS 流量本地 DNS解析本地网络设备的主机名,无需编辑&n...

发表评论

访客

◎欢迎参与讨论,请在这里发表您的看法和观点。