Back to blog

用 Paraglide 做编译期多语言

Nov 3, 2026VrmMate Team

没有 provider、没有运行时查表,消息直接编译成可摇树的函数。

Paraglide 把翻译编译成函数,没有 provider,也没有运行时查表。

心智模型

消息源是 messages/en.json 和 messages/zh.json,键是扁平的点路径。调用写成 m'landing.hero.headline',编译后是可直接摇树优化的函数。

服务端怎么拿到语言

server.ts 用 paraglideMiddleware 包裹请求,语言通过 AsyncLocalStorage 传递,所以 loader 里的 getLocale() 同样有效。

URL 怎么处理

路由本身不带语言段,router 的 rewrite 在输出时补上 /zh 前缀。内部链接保持 locale-free,用 core/i18n/navigation 的 Link,而不是裸 a 标签。

常见错误

运行时拼接键会失去摇树;只改 en 不改 zh 会静默回退。新增文案时两边一起加,是唯一可靠的做法。