ossrs / srs-docs

The documents for SRS

Home Page:https://ossrs.io

Geek Repo:Geek Repo

Github PK Tool:Github PK Tool

文档路径需要保持一致,国内和国外网站中中文都应该包含 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

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

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

  1. 你有考虑过 Nginx 配置重定向的可行性吗?
  2. 如果两个 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/;
        }

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

image

facebook/docusaurus#6731