Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

文档路径需要保持一致,国内和国外网站中中文都应该包含 zh-cn,英文都应该包含 en-us #11

Closed
xiaosongxiaosong opened this issue Feb 14, 2022 · 9 comments

Comments

@xiaosongxiaosong
Copy link
Collaborator

现在路径这块是否能不默认呢?比如,中文是:
http://ossrs.io/zh-cn/docs/doc/git

英文是:
http://ossrs.io/docs/doc/git

能否格式统一成:
http://ossrs.io/en-us/docs/doc/git

因为有可能会贴这个路径,有时候要贴两个,但他们却不一样。

需要达到的效果是同一个文档的四个路径应该如下:

@xiaosongxiaosong
Copy link
Collaborator Author

参考 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",

@xiaosongxiaosong
Copy link
Collaborator Author

  • 方案二:rewriteSiteConfig 中动态修改 baseUrl 和 outDir

    验证不可行

  • 方案三: 修改器的 Nginx 配置进行实现

    待验证

  • 方案四:实现 localeConfigs 增加 baseUrl 支持

    推荐方案

@xiaosongxiaosong
Copy link
Collaborator Author

方案四实现过程记录

Win 10 运行 docusaurus 项目 start 失败

软连接有关
facebook/docusaurus#6604
facebook/docusaurus#6257

修改 https://github.com/xiaosongxiaosong/docusaurus/blob/089ef14c9acf980447661ce688c77aafb28596fc/website/_dogfooding/dogfooding.config.js#L22 这里可以跑起来

-       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: ''
    }
  }
}

@Josh-Cena
Copy link

Josh-Cena commented Feb 21, 2022

@xiaosongxiaosong 看到你的 PR 了,我觉得这是可行的,维护者们也讨论过是不是要做这个 feature (facebook/docusaurus#6075 ),但我不确定的是:

  1. 你有考虑过 Nginx 配置重定向的可行性吗?
  2. 如果两个 locale 都包含 base URL,那你的网站 root 就是无法访问的,http://ossrs.io/ 就会是 404。我觉得这样用户体验不好。

@xiaosongxiaosong
Copy link
Collaborator Author

你有考虑过 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/ 这两个问题

@Josh-Cena
Copy link

Josh-Cena commented Feb 21, 2022

好的,你的 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……

@xiaosongxiaosong
Copy link
Collaborator Author

xiaosongxiaosong commented May 3, 2022

方案三试了一下,在 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/;
        }

@xiaosongxiaosong
Copy link
Collaborator Author

这个功能最新的 2.0.0-beta.22 版本已经支持,等此版本发布后测试验证一下

image

facebook/docusaurus#6731

@winlinvip winlinvip closed this as not planned Won't fix, can't repro, duplicate, stale Nov 6, 2023
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

No branches or pull requests

3 participants