⭐️ 继续捣鼓多语言博客,总算放弃了 Gatsby

2024-07-08

今天依旧在继续捣鼓多语言博客的问题,一边是同事还在尝试二次定制的 Docusaurus,一边是我的 Gatsby。简单描述需求就是需要不同语言返回不同的博客内容,且必须支持多语言(界面语言选择日语只能看日语版本的博客)Docusaurus 支持多语言,但默认适配的场景是一篇文章多种翻译的模式,并非我们想要的效果。

他那边的新发现就是只能通过修改模板渲染逻辑,来实现博客语言的判断。我的猜想是修改翻译模块,或者重写修改 React Provider 下的多语言状态。他尝试了第一种方案,直接手搓检测语言的逻辑,再返回翻译内容,勉勉强强完成了目标。

而我这边 Gatsby 就没这么幸运了,正常的页面路由一旦加入多语言就会变成 404,主要是目录结构种存在动态查询的参数。pages/blog/page/[pageNum].tsx 正常,pages/about.ja.tsx 也正常,pages/blog/page/[pageNum].ja.tsx 这种加入多语言之后就不行。

看了很久才发现官方文档推荐的 多语言插件(用于路由地址的转发和重写)上次提交居然是在四年前,Issues 区更是堆积了好多问题没有回答(包括我上面提到的 类似问题)。

我都开始好奇了 Notta 他们的官网多语言是咋做的,难道是一个语言一个目录实现的不成?这样做的话这代码重复率特别高,修改起来就火葬场了。他们博客也并没有分页的路由,仅仅是在前端做了无限翻页,体验非常糟糕,如果设计成他们那样,估计又要被其他人吐槽。

总的来说,Gatsby 它独特的 GraphQL 查询方式,以及插件化调用多个外部数据源的技术实现方案,我觉得使用集成起来还是比较不错的。就是文档在某些参数方面没做详细解释,对我的学习过程造成不小困扰。再加上多语言和动态路由参数同时存在时存在致命 Bug(404),因此只能和它说再见了。兜兜转转最后果然还是只能选择 NextJS 啊!除了它我只看到 Astro 这个新星以及社区相对活跃的 Remix,前者或许值得一试,后者目前不支持 SSG 就比较头疼。

一般
概览页 时间轴
奇趣音乐盒 技术源于 Kico Player
Emmm,这里是歌词君