多语言网站也会有不易察觉的“政治生活”。一种语言占据根网址,像主人一样;其他语言则被分到子目录。如果只是按惯例这样做,就可能无意中告诉访客:你是客人,尽管网站本来就是为他们建的。

在 Shuklina Consulting 的项目中,我处理了两种市场配置。法国项目以英语作为根目录语言,法语位于 /fr。斯洛伐克项目的根目录语言是斯洛伐克语,英语位于 /en。这不是一套方案换面国旗就能解决的。

复用代码,分别决策

两个应用都使用 React、Vite 和 TypeScript。文案放在语言消息中,市场设置放在配置中,样式使用原生 CSS。不过两个项目的发布和网址集合仍然独立。

这样可以复用组件,而不混淆内容和路由。共用的服务卡片仍然共用,但显示什么文字、打开哪个网址,以及语言切换跳到哪里,都由具体网站决定。

“Shuklina Consulting——首屏”保留了项目的真实内容和设计。

Shuklina Consulting — 首屏

归档界面 · 演示数据

Shuklina Consulting — 首屏
已保存的项目画面 · 无交互控件

这样就能避免一种令人不快的技术性省事:开发者维护一个版本很方便,访客却得琢磨,为什么自己的语言总把自己带回别人的首页。

“Shuklina Consulting——内页”保留了项目的真实内容和设计。

Shuklina Consulting — 内页

归档界面 · 演示数据

Shuklina Consulting — 内页
已保存的项目画面 · 无交互控件

每个市场独立发布

法国和斯洛伐克项目分别发布。可以修改一个市场的内容和联系方式,而不影响另一个市场。因此,这里把共享组件与独立配置结合起来。

Shuklina Consulting — 联系页面

归档界面 · 演示数据

Shuklina Consulting — 联系页面
已保存的项目画面 · 无交互控件

与 AI 协作时,必须把这种安排说清楚。如果让智能体“把第二个网站照着做”,它可能会认真复制一切,连不合适的语言顺序也复制过去。只有先明确哪些决策确实可以重复,复用才有意义。

在这个项目中,我复用代码,同时为每个市场保留独立的决策。斯洛伐克代码仓库的历史不能代表法国版本的全部工作。归档页面证明的是选定阶段的状态;线上域名是否可访问需要另行检查。

相关故事:Connection.me 与 RTL · 三个网站的共享平台。