Skip to content

Commit 9cc3252

Browse files
committed
chore(docs): add support for auto-redirect to language-specific docs
1 parent 349eb6f commit 9cc3252

23 files changed

+103
-89
lines changed

README.md

+2-2
Original file line numberDiff line numberDiff line change
@@ -94,13 +94,13 @@ Artalk.init({
9494

9595
<!-- prettier-ignore-end -->
9696

97-
[**Learn More →**](https://artalk.js.org/guide/deploy.html)
97+
[**Learn More →**](https://artalk.js.org/en/guide/deploy.html)
9898

9999
## For Developers
100100

101101
Pull requests are welcome!
102102

103-
See [Development](https://artalk.js.org/develop/) and [Contributing](./CONTRIBUTING.md) for information on working with the codebase, getting a local development setup, and contributing changes.
103+
See [Development](https://artalk.js.org/en/develop/) and [Contributing](./CONTRIBUTING.md) for information on working with the codebase, getting a local development setup, and contributing changes.
104104

105105
## Contributors
106106

README.zh.md

+2-2
Original file line numberDiff line numberDiff line change
@@ -94,13 +94,13 @@ Artalk.init({
9494

9595
<!-- prettier-ignore-end -->
9696

97-
[**了解更多 →**](https://artalk.js.org/guide/deploy.html)
97+
[**了解更多 →**](https://artalk.js.org/zh/guide/deploy.html)
9898

9999
## For Developers
100100

101101
Pull requests are welcome!
102102

103-
See [Development](https://artalk.js.org/develop/) and [Contributing](./CONTRIBUTING.md) for information on working with the codebase, getting a local development setup, and contributing changes.
103+
See [Development](https://artalk.js.org/zh/develop/) and [Contributing](./CONTRIBUTING.md) for information on working with the codebase, getting a local development setup, and contributing changes.
104104

105105
## Contributors
106106

docs/docs/.vitepress/config/index.ts

+1-1
Original file line numberDiff line numberDiff line change
@@ -6,7 +6,7 @@ import { en } from './en'
66
export default defineConfig({
77
...shared,
88
locales: {
9-
root: { label: '简体中文', ...zh },
109
en: { label: 'English', ...en },
10+
zh: { label: '简体中文', ...zh },
1111
},
1212
})

docs/docs/.vitepress/config/shared.ts

+1-6
Original file line numberDiff line numberDiff line change
@@ -5,14 +5,9 @@ import * as Version from '../../code/ArtalkVersion.json'
55
export const shared = defineConfig({
66
title: 'Artalk',
77

8-
rewrites: {
9-
'zh/:rest*': ':rest*',
10-
},
11-
128
/* prettier-ignore */
139
head: [
1410
['link', { rel: 'icon', type: 'image/png', href: '/favicon.png' }],
15-
['meta', { name: 'theme-color', content: '#007bff' }],
1611
['meta', { property: 'og:type', content: 'website' }],
1712
['meta', { property: 'og:locale', content: 'en' }],
1813
['meta', { property: 'og:title', content: 'Artalk - A Self-hosted Comment System'}],
@@ -65,7 +60,7 @@ export const shared = defineConfig({
6560

6661
vite: {
6762
server: {
68-
open: '/guide/intro.html',
63+
open: '/zh/guide/intro.html',
6964
},
7065
},
7166
})

docs/docs/.vitepress/config/zh.ts

+48-48
Original file line numberDiff line numberDiff line change
@@ -6,88 +6,88 @@ export const zh = defineConfig({
66

77
themeConfig: {
88
sidebar: {
9-
'/guide/': [
9+
'/zh/guide/': [
1010
{
1111
text: '快速开始',
1212
collapsed: false,
1313
items: [
14-
{ text: '项目介绍', link: '/guide/intro.md' },
15-
{ text: '程序部署', link: '/guide/deploy.md' },
16-
{ text: '数据迁移', link: '/guide/transfer.md' },
14+
{ text: '项目介绍', link: '/zh/guide/intro.md' },
15+
{ text: '程序部署', link: '/zh/guide/deploy.md' },
16+
{ text: '数据迁移', link: '/zh/guide/transfer.md' },
1717
],
1818
},
1919
{
2020
text: '核心指南',
2121
collapsed: false,
2222
items: [
23-
{ text: '侧边栏', link: '/guide/frontend/sidebar.md' },
24-
{ text: '邮件通知', link: '/guide/backend/email.md' },
25-
{ text: '多元推送', link: '/guide/backend/admin_notify.md' },
26-
{ text: '社交登录', link: '/guide/frontend/auth.md' },
27-
{ text: '评论审核', link: '/guide/backend/moderator.md' },
28-
{ text: '验证码', link: '/guide/backend/captcha.md' },
29-
{ text: '图片上传', link: '/guide/backend/img-upload.md' },
30-
{ text: '账户与多站点', link: '/guide/backend/multi-site.md' },
31-
{ text: '解析相对路径', link: '/guide/backend/relative-path.md' },
23+
{ text: '侧边栏', link: '/zh/guide/frontend/sidebar.md' },
24+
{ text: '邮件通知', link: '/zh/guide/backend/email.md' },
25+
{ text: '多元推送', link: '/zh/guide/backend/admin_notify.md' },
26+
{ text: '社交登录', link: '/zh/guide/frontend/auth.md' },
27+
{ text: '评论审核', link: '/zh/guide/backend/moderator.md' },
28+
{ text: '验证码', link: '/zh/guide/backend/captcha.md' },
29+
{ text: '图片上传', link: '/zh/guide/backend/img-upload.md' },
30+
{ text: '账户与多站点', link: '/zh/guide/backend/multi-site.md' },
31+
{ text: '解析相对路径', link: '/zh/guide/backend/relative-path.md' },
3232
],
3333
},
3434
{
3535
text: '进阶指南',
3636
collapsed: false,
3737
items: [
38-
{ text: '表情包', link: '/guide/frontend/emoticons.md' },
39-
{ text: '浏览量统计', link: '/guide/frontend/pv.md' },
40-
{ text: 'LaTeX', link: '/guide/frontend/latex.md' },
41-
{ text: '图片灯箱', link: '/guide/frontend/lightbox.md' },
42-
{ text: '图片懒加载', link: '/guide/frontend/img-lazy-load.md' },
43-
{ text: 'IP 属地', link: '/guide/frontend/ip-region.md' },
44-
{ text: '多语言', link: '/guide/frontend/i18n.md' },
45-
{ text: '开发文档', link: '/develop/index.md' },
38+
{ text: '表情包', link: '/zh/guide/frontend/emoticons.md' },
39+
{ text: '浏览量统计', link: '/zh/guide/frontend/pv.md' },
40+
{ text: 'LaTeX', link: '/zh/guide/frontend/latex.md' },
41+
{ text: '图片灯箱', link: '/zh/guide/frontend/lightbox.md' },
42+
{ text: '图片懒加载', link: '/zh/guide/frontend/img-lazy-load.md' },
43+
{ text: 'IP 属地', link: '/zh/guide/frontend/ip-region.md' },
44+
{ text: '多语言', link: '/zh/guide/frontend/i18n.md' },
45+
{ text: '开发文档', link: '/zh/develop/index.md' },
4646
],
4747
},
4848
{
4949
text: '配置文档',
5050
collapsed: false,
5151
items: [
52-
{ text: '环境变量', link: '/guide/env.md' },
53-
{ text: '配置文件', link: '/guide/backend/config.md' },
54-
{ text: '界面配置', link: '/guide/frontend/config.md' },
52+
{ text: '环境变量', link: '/zh/guide/env.md' },
53+
{ text: '配置文件', link: '/zh/guide/backend/config.md' },
54+
{ text: '界面配置', link: '/zh/guide/frontend/config.md' },
5555
],
5656
},
5757
{
5858
text: '部署说明',
5959
collapsed: true,
6060
items: [
61-
{ text: '守护进程', link: '/guide/backend/daemon.md' },
62-
{ text: '反向代理', link: '/guide/backend/reverse-proxy.md' },
63-
{ text: '编译构建', link: '/develop/contributing.md' },
64-
{ text: '程序升级', link: '/guide/backend/update.md' },
65-
{ text: 'Docker', link: '/guide/backend/docker.md' },
61+
{ text: '守护进程', link: '/zh/guide/backend/daemon.md' },
62+
{ text: '反向代理', link: '/zh/guide/backend/reverse-proxy.md' },
63+
{ text: '编译构建', link: '/zh/develop/contributing.md' },
64+
{ text: '程序升级', link: '/zh/guide/backend/update.md' },
65+
{ text: 'Docker', link: '/zh/guide/backend/docker.md' },
6666
],
6767
},
6868
{
6969
text: '更多内容',
7070
collapsed: true,
7171
items: [
72-
{ text: '安全防范', link: '/guide/security.md' },
73-
{ text: '扩展阅读', link: '/guide/extras.md' },
74-
{ text: '案例展示', link: '/guide/cases.md' },
75-
{ text: '关于我们', link: '/guide/about.md' },
72+
{ text: '安全防范', link: '/zh/guide/security.md' },
73+
{ text: '扩展阅读', link: '/zh/guide/extras.md' },
74+
{ text: '案例展示', link: '/zh/guide/cases.md' },
75+
{ text: '关于我们', link: '/zh/guide/about.md' },
7676
],
7777
},
7878
],
79-
'/develop/': [
79+
'/zh/develop/': [
8080
{
8181
text: '开发文档',
8282
items: [
83-
{ text: '开发说明', link: '/develop/index.md' },
84-
{ text: '贡献指南', link: '/develop/contributing.md' },
85-
{ text: '置入博客', link: '/develop/import-blog.md' },
86-
{ text: '置入框架', link: '/develop/import-framework.md' },
87-
{ text: '前端 API', link: '/develop/fe-api.md' },
88-
{ text: '前端 Event', link: '/develop/event.md' },
89-
{ text: '插件开发', link: '/develop/plugin.md' },
90-
{ text: '兼容性', link: '/develop/compatibility.md' },
83+
{ text: '开发说明', link: '/zh/develop/index.md' },
84+
{ text: '贡献指南', link: '/zh/develop/contributing.md' },
85+
{ text: '置入博客', link: '/zh/develop/import-blog.md' },
86+
{ text: '置入框架', link: '/zh/develop/import-framework.md' },
87+
{ text: '前端 API', link: '/zh/develop/fe-api.md' },
88+
{ text: '前端 Event', link: '/zh/develop/event.md' },
89+
{ text: '插件开发', link: '/zh/develop/plugin.md' },
90+
{ text: '兼容性', link: '/zh/develop/compatibility.md' },
9191
{
9292
text: 'HTTP API',
9393
link: 'https://artalk.js.org/http-api.html',
@@ -101,27 +101,27 @@ export const zh = defineConfig({
101101
// NavbarItem
102102
{
103103
text: '介绍',
104-
link: '/guide/intro',
104+
link: '/zh/guide/intro',
105105
},
106106
{
107107
text: '部署',
108-
link: '/guide/deploy',
108+
link: '/zh/guide/deploy',
109109
},
110110
{
111111
text: '配置',
112-
link: '/guide/backend/config',
112+
link: '/zh/guide/backend/config',
113113
},
114114
{
115115
text: '迁移',
116-
link: '/guide/transfer',
116+
link: '/zh/guide/transfer',
117117
},
118118
{
119119
text: '案例',
120-
link: '/guide/cases',
120+
link: '/zh/guide/cases',
121121
},
122122
{
123123
text: '开发',
124-
link: '/develop/',
124+
link: '/zh/develop/',
125125
},
126126
],
127127

docs/docs/.vitepress/theme/Artalk.vue

+4-1
Original file line numberDiff line numberDiff line change
@@ -66,7 +66,10 @@ function initArtalk(conf: any) {
6666
6767
function getConfByPage() {
6868
return {
69-
pageKey: `https://artalk.js.org/${router.route.path.replace(/^\//, '').replace(/\.html$/, '')}.html`,
69+
pageKey: `https://artalk.js.org/${router.route.path
70+
.replace(/^\/+/, '')
71+
.replace(/^zh\//, '')
72+
.replace(/\.html$/, '')}.html`,
7073
pageTitle: page.value.title,
7174
server: 'https://artalk.qwqaq.com',
7275
site: 'ArtalkDocs',

docs/docs/.vitepress/theme/Layout.vue

+8-1
Original file line numberDiff line numberDiff line change
@@ -1,9 +1,16 @@
11
<script setup>
22
import DefaultTheme from 'vitepress/theme'
3-
import { onMounted } from 'vue'
3+
import { inBrowser, useData } from 'vitepress'
4+
import { watchEffect } from 'vue'
45
import './style.scss'
56
67
const { Layout } = DefaultTheme
8+
9+
const { lang } = useData()
10+
watchEffect(() => {
11+
if (inBrowser)
12+
document.cookie = `nf_lang=${lang.value}; expires=Mon, 1 Jan 2030 00:00:00 UTC; path=/`
13+
})
714
</script>
815

916
<template>

docs/docs/public/_headers

+3
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,3 @@
1+
/assets/*
2+
cache-control: max-age=31536000
3+
cache-control: immutable

docs/docs/public/_redirects

+7
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,7 @@
1+
/guide/* /zh/guide/:splat 302 Language=zh
2+
/guide/* /en/guide/:splat 302 Language=en
3+
/guide/* /en/guide/:splat 302
4+
5+
/develop/* /zh/develop/:splat 302 Language=zh
6+
/develop/* /en/develop/:splat 302 Language=en
7+
/develop/* /en/develop/:splat 302

docs/docs/zh/guide/backend/admin_notify.md

+1-1
Original file line numberDiff line numberDiff line change
@@ -4,7 +4,7 @@ Artalk 支持通过多元推送功能以多种方式发送管理员通知。
44

55
支持 **Telegram****飞书****钉钉****Bark****Slack****LINE**,并且多种方式可以同时启用。
66

7-
你可以在 [控制中心](/guide/frontend/sidebar.md#设置) 的设置界面修改此配置,也可以通过 [配置文件](/guide/backend/config.md#多元推送-admin-notify)[环境变量](/guide/env.md#多元推送) 进行配置。
7+
你可以在 [控制中心](../frontend/sidebar.md#设置) 的设置界面修改此配置,也可以通过 [配置文件](./config.md#多元推送-admin-notify)[环境变量](../env.md#多元推送) 进行配置。
88

99
## 配置文件
1010

docs/docs/zh/guide/backend/captcha.md

+1-1
Original file line numberDiff line numberDiff line change
@@ -6,7 +6,7 @@ Artalk 内置图片验证码功能,你可以配置操作频率限制,当超
66

77
目前 Artalk 支持:Turnstile、reCAPTCHA、hCaptcha、极验。
88

9-
你可以在 [控制中心](/guide/frontend/sidebar.md#设置) 的设置界面修改此配置,也可以通过 [配置文件](/guide/backend/config.md#验证码-captcha)[环境变量](/guide/env.md#验证码) 进行配置。
9+
你可以在 [控制中心](../frontend/sidebar.md#设置) 的设置界面修改此配置,也可以通过 [配置文件](./config.md#验证码-captcha)[环境变量](../env.md#验证码) 进行配置。
1010

1111
## 配置文件
1212

docs/docs/zh/guide/backend/config.md

+7-7
Original file line numberDiff line numberDiff line change
@@ -2,7 +2,7 @@
22

33
## 轻松配置
44

5-
推荐在侧边栏 “[控制中心](/guide/frontend/sidebar.md)” 通过图形界面修改配置,无需手动编辑配置文件。
5+
推荐在侧边栏 “[控制中心](../frontend/sidebar.md)” 通过图形界面修改配置,无需手动编辑配置文件。
66

77
## 环境变量
88

@@ -114,7 +114,7 @@ http:
114114

115115
Artalk 支持多站点,你可以创建多个管理员账户,为其分配站点,让你的朋友们共用同一个后端程序。
116116

117-
详情参考:[管理员 × 多站点](/guide/backend/multi-site.md)
117+
详情参考:[管理员 × 多站点](./multi-site.md)
118118

119119
## 可信域名 `trusted_domains`
120120

@@ -184,25 +184,25 @@ frontend:
184184

185185
配置邮件通知,让回复通过邮件的形式通知目标用户,你可以自定义邮件发送者名称、标题、模版等。
186186

187-
详情参考:[后端 · 邮件通知](/guide/backend/email.md)
187+
详情参考:[后端 · 邮件通知](./email.md)
188188

189189
## 多元推送 `admin_notify`
190190

191191
你可以配置多种消息发送方式,例如飞书、Telegram 等,当收到新的评论时通知管理员。
192192

193-
详情参考:[后端 · 多元推送](/guide/backend/admin_notify.md)
193+
详情参考:[后端 · 多元推送](./admin_notify.md)
194194

195195
## 评论审核 `moderator`
196196

197197
配置评论审核来自动拦截垃圾评论。
198198

199-
详情参考:[后端 · 评论审核](/guide/backend/moderator.md)
199+
详情参考:[后端 · 评论审核](./moderator.md)
200200

201201
## 验证码 `captcha`
202202

203203
支持图片、滑动验证码,通过验证码对请求频率进行限制。
204204

205-
详情参考:[后端 · 验证码](/guide/backend/captcha.md)
205+
详情参考:[后端 · 验证码](./captcha.md)
206206

207207
## 高速缓存 `cache`
208208

@@ -356,5 +356,5 @@ test_file: ./data/artalk.log
356356

357357
配置文件相关代码:[/internal/config/config.go](https://github.com/ArtalkJS/Artalk/blob/master/internal/config/config.go)
358358

359-
前往:[前端配置](/guide/frontend/config.md)
359+
前往:[前端配置](../frontend/config.md)
360360
:::

docs/docs/zh/guide/backend/docker.md

+2-2
Original file line numberDiff line numberDiff line change
@@ -14,7 +14,7 @@ docker pull artalk/artalk-go
1414

1515
:::tip
1616

17-
推荐使用 Docker Compose,可参考 [程序部署](/guide/deploy) 页面的步骤。
17+
推荐使用 Docker Compose,可参考 [程序部署](../deploy) 页面的步骤。
1818

1919
:::
2020

@@ -98,4 +98,4 @@ docker exec -it artalk bash
9898

9999
## 多平台兼容性
100100

101-
Docker 镜像暂仅提供 x86、arm64 的镜像构建,如需更多平台架构版本,请下载 [二进制构建部署](/guide/deploy.md#普通方式部署)
101+
Docker 镜像暂仅提供 x86、arm64 的镜像构建,如需更多平台架构版本,请下载 [二进制构建部署](../deploy.md#普通方式部署)

docs/docs/zh/guide/backend/email.md

+1-1
Original file line numberDiff line numberDiff line change
@@ -2,7 +2,7 @@
22

33
Artalk 支持通过 SMTP 协议、阿里云邮件推送、调用系统 Sendmail 命令等方式向用户发送邮件通知。
44

5-
你可以在 [控制中心](/guide/frontend/sidebar.md#设置) 的设置界面修改此配置,也可以通过 [配置文件](/guide/backend/config.md#邮件通知-email)[环境变量](/guide/env.md#邮件通知) 进行配置。
5+
你可以在 [控制中心](../frontend/sidebar.md#设置) 的设置界面修改此配置,也可以通过 [配置文件](./config.md#邮件通知-email)[环境变量](../env.md#邮件通知) 进行配置。
66

77
## 配置文件
88

docs/docs/zh/guide/backend/img-upload.md

+2-2
Original file line numberDiff line numberDiff line change
@@ -2,7 +2,7 @@
22

33
Artalk 提供图片上传功能,支持限制图片大小、上传频率等,你还能结合 UpGit 将图片上传到图床。
44

5-
你可以在 [控制中心](/guide/frontend/sidebar.md#设置) 的设置界面修改此配置,也可以通过 [配置文件](/guide/backend/config.md#图片上传-img_upload)[环境变量](/guide/env.md#图片上传) 进行配置。
5+
你可以在 [控制中心](../frontend/sidebar.md#设置) 的设置界面修改此配置,也可以通过 [配置文件](./config.md#图片上传-img_upload)[环境变量](../env.md#图片上传) 进行配置。
66

77
## 配置文件
88

@@ -61,7 +61,7 @@ docker run -d --name artalk -v /path/to/upgit:/usr/bin/upgit -v /path/to/artalk:
6161

6262
频率限制跟随 `captcha` 验证码配置,当超出限制将弹出验证码。
6363

64-
可参考:[后端 · 验证码](/guide/backend/captcha.md)
64+
可参考:[后端 · 验证码](./captcha.md)
6565

6666
## path
6767

docs/docs/zh/guide/backend/moderator.md

+1-1
Original file line numberDiff line numberDiff line change
@@ -2,7 +2,7 @@
22

33
Artalk 支持多种评论过滤方式以拦截垃圾评论,支持通过 Akismet、腾讯云内容安全、阿里云内容安全 等在线 API 实现垃圾评论识别和拦截,也可通过本地离线关键词词库过滤评论,结合[验证码](./captcha.md)功能进一步提高评论审核强度,让垃圾评论没有容身之地。
44

5-
你可以在 [控制中心](/guide/frontend/sidebar.md#设置) 的设置界面修改此配置,也可以通过 [配置文件](/guide/backend/config.md#评论审核-moderator)[环境变量](/guide/env.md#评论审核) 进行配置。
5+
你可以在 [控制中心](../frontend/sidebar.md#设置) 的设置界面修改此配置,也可以通过 [配置文件](./config.md#评论审核-moderator)[环境变量](../env.md#评论审核) 进行配置。
66

77
## 配置文件
88

0 commit comments

Comments
 (0)