文档路径需要保持一致,国内和国外网站中中文都应该包含 zh-cn,英文都应该包含 en-us
xiaosongxiaosong opened this issue · comments
现在路径这块是否能不默认呢?比如,中文是:
http://ossrs.io/zh-cn/docs/doc/git
英文是:
http://ossrs.io/docs/doc/git
能否格式统一成:
http://ossrs.io/en-us/docs/doc/git
因为有可能会贴这个路径,有时候要贴两个,但他们却不一样。
需要达到的效果是同一个文档的四个路径应该如下:
参考 facebook/docusaurus#4723 (comment) 中的解决方案修改,看起来可以工作,但是会有一下几个问题
- 构建时需要同时使用下面的四条命令进行构建,导致构建命令特别的复杂,后续基本无法维护
- 本地预览也非常麻烦,需要 build 两次后再 serve
- 调试时多语言切换路径中会一直增加 locate
- issues 6462
"build:io:en-us": "cross-env BASE_URL='/en-us/' docusaurus build --locale en-us --out-dir build/en-us",
"build:io:zh-cn": "cross-env BASE_URL='/zh-cn/' docusaurus build --locale zh-cn --out-dir build/zh-cn",
"build:net:en-us": "cross-env REGION='zh-cn' BASE_URL='/lts/en-us/' docusaurus build --locale en-us --out-dir build/en-us",
"build:net:zh-cn": "cross-env REGION='zh-cn' BASE_URL='/lts/zh-cn/' docusaurus build --locale zh-cn --out-dir build/zh-cn",
- 方案二:rewriteSiteConfig 中动态修改 baseUrl 和 outDir
验证不可行
- 方案三: 修改器的 Nginx 配置进行实现
待验证
- 方案四:实现 localeConfigs 增加 baseUrl 支持
推荐方案
方案四实现过程记录
Win 10 运行 docusaurus 项目 start 失败
软连接有关
facebook/docusaurus#6604
facebook/docusaurus#6257
- path: fs.realpathSync('_dogfooding/docs-tests-symlink'),
+ path: fs.realpathSync('_dogfooding/_docs tests'),
localizePath 函数逻辑修改
i18n: {
defaultLocale: 'en',
locales: [ 'en', 'fr', 'pt-BR', 'ko', 'zh-CN', [length]: 5 ],
currentLocale: 'en',
localeConfigs: {
en: {
label: 'English',
direction: 'ltr',
htmlLang: 'en',
baseUrl: 'en-us/'
},
fr: {
label: 'Français',
direction: 'ltr',
htmlLang: 'fr',
baseUrl: ''
},
'pt-BR': {
label: 'Português (Brasil)',
direction: 'ltr',
htmlLang: 'pt-BR',
baseUrl: ''
},
ko: { label: '한국어', direction: 'ltr', htmlLang: 'ko', baseUrl: '' },
'zh-CN': {
label: '中文(**)',
direction: 'ltr',
htmlLang: 'zh-CN',
baseUrl: ''
}
}
}
i18n: {
defaultLocale: 'en',
locales: [ 'en', 'fr', 'pt-BR', 'ko', 'zh-CN', [length]: 5 ],
currentLocale: 'en',
localeConfigs: {
en: {
label: 'English',
direction: 'ltr',
htmlLang: 'en',
baseUrl: 'en-us/'
},
fr: {
label: 'Français',
direction: 'ltr',
htmlLang: 'fr',
baseUrl: ''
},
'pt-BR': {
label: 'Português (Brasil)',
direction: 'ltr',
htmlLang: 'pt-BR',
baseUrl: ''
},
ko: { label: '한국어', direction: 'ltr', htmlLang: 'ko', baseUrl: '' },
'zh-CN': {
label: '中文(**)',
direction: 'ltr',
htmlLang: 'zh-CN',
baseUrl: ''
}
}
}
@xiaosongxiaosong 看到你的 PR 了,我觉得这是可行的,维护者们也讨论过是不是要做这个 feature (facebook/docusaurus#6075 ),但我不确定的是:
- 你有考虑过 Nginx 配置重定向的可行性吗?
- 如果两个 locale 都包含 base URL,那你的网站 root 就是无法访问的,
http://ossrs.io/
就会是 404。我觉得这样用户体验不好。
你有考虑过 Nginx 配置重定向的可行性吗?
Nginx 配置重定向的方法考虑过,配置起来会比较麻烦,可行性没有验证,以 http://ossrs.io
为例进行说明:
- 英文的静态文件需要放在
nginx
的根目录,中文文档放在根目录下的/zh-CN/
目录中 - 中文不需要处理,访问链接是
http://ossrs.io/zh-CN/
- 用户访问默认路径或者文档路径上自动 301 到
/en-US/
的路径 - nginx 接受到
http://ossrs.io/en-US/
的请求时匹配的文件夹是/
如果两个 locale 都包含 base URL,那你的网站 root 就是无法访问的, http://ossrs.io/ 就会是 404。我觉得这样用户体验不好。
这种情况下需要配置一个 301 跳转,用户访问 http://ossrs.io/ 时自动跳转到 http://ossrs.io/en-US/
,目前 [MDN](https://developer.mozilla.org/)
也是类似处理的,这种方式时满足我们的需求的
还有一些情况,比如用户访问 http://ossrs.io/docs/doc/git/
自动跳转到 http://ossrs.io/en-US/docs/doc/git/
我也还没有验证
这两天我学习一下 nginx 配置验证一下重定向的方案和 http://ossrs.io/docs/doc/git/
自动跳转到 http://ossrs.io/en-US/docs/doc/git/
这两个问题
好的,你的 PR 我先接手了,后续其他 maintainer 的 review 我会来帮你处理,我也会自己做一些重构,因为它现在有点奇怪。其实我自己也之前研究过这个,但没有完全完成,所以很感谢你能再提起这件事
关于 Nginx 的配置,其实从 /en-US/
重定向到 /
,要比倒过来从 /
重定向到 /en-US/
容易,因为倒过来的话,就需要你在正则表达式里排除掉所有的 locale 名字(不然会把 /zh-CN/
重定向到 /en-US/zh-CN/
),但如果从 /en-US/
重定向到 /
,就只用匹配一个 locale 的名字,不需要这么麻烦。你甚至可以用一个 path alias,比如
location /en-US {
alias /var/www/website/
}
这样就不需要重写路径了,可以直接访问。当然,具体的可行性我也没试过,我也不是非常了解 Nginx……
方案三试了一下,在 win10 上面配置,baseUrl 是 '/lts/',如果不增加最后一个 alias 配置,目录跳转和预期是一致的,显示 404,但是加上以后,并不能和预期一样正常显示文件,也不会正确的进行跳转
location = /lts/ {
return 302 /lts/en-us/;
}
location ~ /lts/(docs|blog)(/.*)? {
return 302 /lts/en-us/$1$2;
}
location /lts/en-us/ {
alias html/lts/;
}