多数据库:多语言/多板块

category
tags
type
status
slug
date
password
Last edited time
Jun 18, 2024 02:07 AM
summary
icon

使用原理

一个站点域名支持绑定多个数据库,每个数据库有自己的内容和主题配置信息。
原先NOTION_PAGE_ID 只能有一个,新版本中支持一个站点配置多个数据源,借此可以实现多语言、或多板块的功能。
  • 旧版NOTION_PAGE_ID
    • 新版NOTION_PAGE_ID

      适用场景

      有两种用法:
      1. 需要向不同语言的用户展现完全不同内容,例如项目官网,品牌官网等。
      1. 需要将一个站点切分成多个子版块,根据路径区分访问哪个版块的数据。

      效果预览

      • 自动化多语言跳转:
        • 💡
          最新版中默认关闭。如需开启请在NOTION_CONFIG 中添加REDIRECT_LANG=true
          访问首页时,会检测用户的默认语言进行自动跳转。
          默认语言取自用户浏览器中的偏好语言(window.navigator.language)
          例如用户的浏览器默认语言如果是英文 , 则会跳转到 /en目录;否则就不会自动跳转,当然用户可以选择从菜单栏自行选择切换语言。
          notion image
           
      • 理论上可以配置无数种语言。

      使用方法

      ⚠️
      注意:多语言功能不支持静态导出的部署方案:例如 yarn export,cloudflarePage、4Everland等都不支持多种语言。 若要用静态导出方案,可以用多域名站点解决:例如创建多个不同的域名:xxx.cn xxx.en, xxx.jp 等; 或者用二级域名 cn.xxx.com , jp.xxx.com, cn.xxx.com

      1. 网站准备多个数据库

      一种语言一个数据库。例如我准备两个演示数据库

      2. 配置NOTION_PAGE_ID

      blog.config.js中将NOTION_PAGE_ID设置成多个(用英文逗号隔开): 示例:'02ab3b8678004aa69e9e415905ef32a5en:7c1d570661754c8fbc568e00a01fd70e
      notion image
      其中第一个PAGE_ID视作默认主语言,与以往旧版的NotionNext使用方式无异。
      而逗号后面的ID要以语言名开头且ID中间用英文冒号:隔开。例如缩写en:xxxx 表示英文站点使用xxxx这个数据库,访问站点的 [domain.com]/en 读取的站点数据来自xxxx 这个数据库。

      3. 路径与数据库映射

      多语言示例

      按照上面的规律我们可以创建更多语言
      假设我要创建支持4种语言的站点,默认语言是日文,然后支持切换中文、英文、西班牙文,该如何设置呢?
      先准备好对应的四个数据库,如下:
      路径名
      数据库ID(示例)
      说明
      jp
      xxJPxx
      日文优先
      en
      xxENxx
      英文
      zh
      xxZHxx
      中文
      es
      xxesxx
      西班牙文
       
      然后将他们配置到NOTION_PAGE_ID中:
      至此大功告成。
       

      子版块用法

      这里的路径名,可以不是标准语言名,而是任意英文,这样可以用来区分子版块业务。 例如
      路径名
      数据库ID(示例)
      说明
      blog
      xxblogxx
      绑定一个数据库,专门写博客
      products
      xxProductxx
      绑定一个数据库,专门介绍产品
      movie
      xxMoviex
      影视板块的数据库
      docs
      xxDocsxx
      文档板块
      结合Notion_CONFIG的功能,你可以为每个版块配置不同的主题。

      4. 切换语言

      只要让用户跳转到对应的语言路径即可,例如我的默认语言是中文,设置一个菜单让用户点击后切换到英文路径 /en 即可。
       
      但是多语言的菜单处理会比较特殊,不能使用相对路径,例如 /en , /zh , /jp 这种作为菜单的slug,而是要用全路径。
       
      例如默认中文主页是 https://preview.tangly1024.com/ , 则要切换成英文,则需要创建一个菜单,slug是 https://preview.tangly1024.com/en。 否则会切换异常。
       

      其它

      为什么用这种多数据库的方案实现?

      考虑到网站中所有的按钮菜单、提示语和文章内容都要设置不同语言的版本,有两种方案:
      1. 通过在数据库添加字段区分语言的方案,例如为一条数据打上标签English
      1. 允许一个站点绑定多个数据库,即多数据源方案。
      方案一,势必会导致单个Notion数据库模板的庞大复杂,从而难以维护。
      我决定使用“多数据源”的方案, 即一个NotionNext网站支持绑定多个Notion数据库,根据用户的语言地区或者所选语言自动切换展示对应数据库的内容。这样的好处有:
      1. 差异化运营:针对不同人群,显示的菜单数量和内容、文章内容和数量都可完全不同的,便于不同地区定制化运营。
      1. 各数据库独立,使单个数据库的内容更少更易于维护,并且不会在原来的数据库中新增一个”语言”字段,对于不需要多语言的用户来说体验更加无缝。
      1. 此方案理论上,允许一个站点配置无数种语言。从而使网站有了更强的扩展性,一个站点可以接入多套数据带来更多可能性。多语言的路径除了 /en/article/test.html/zh /jp 这类语言前缀,也可以是其它丰富的格式,甚至可以借此开发出多个子板块,每个板块定制不同的主题、配置、功能等等。当然,你也可以多建几个二级域名的网站。
      自定义数据库表头站点组合
      Loading...
      Catalog
      Article List
      ✨ 更新日志
      🚀 安装部署
      ✒ 写作指引
      🛠 站点配置
      📊 网站统计
      ⭐ 主题配置
      📩 评论插件
      🧷 外部插件
      🔊 站点订阅
      ⌨ 开发指引
      👨‍👦‍👦 联系方式
      🤝 购买服务