使用场景
多语言静态站点
你用 Astro 构建,想要十种语言,又不想为此背上一个笨重的运行时。
问题
- 客户端 i18n 会增加体积,并在首屏留下一次闪烁。
- 手工让十棵文件树保持一致,本身就成了一份工作。
- 每改一句文案都要触发一次完整重建和部署。
Sonenta 改变了什么
@sonenta/astro在构建时取回 bundle,并内联进静态 HTML。零客户端 JavaScript。- 虚拟模块
sonenta:i18n暴露这些目录,并回退到源语言。 - 按屏幕的变体以 CDN 覆盖层的形式到达,不需要维护第二棵树。
这一页本身就是证据:sonenta.com 就跑在它上面,共 13 种语言。你正在读的文字,是构建时从 CDN 取回的。
从哪开始
// astro.config.mjs
import sonenta from "@sonenta/astro";
export default defineConfig({
integrations: [
sonenta({ project: "proj_xxx", version: "main",
locales: ["fr","en","es"], defaultLocale: "fr" }),
],
});
// dans un composant : zéro JavaScript client
import { getT } from "sonenta:i18n"; 已知限制
- bundle 在构建时被冻结。事后发布一条翻译需要重新构建静态站点,这一点和运行时加载的应用不同。
- 字体子集化和按书写系统的排版设置仍然归你。Sonenta 交付的是文字,不是排版。