ts-intl
文档
Astro 集成已推出|ts-intl-astro

现代 TypeScript 国际化方案

零依赖 · 类型安全 · 框架无关

$
pnpm add@aaakul/ts-intl
export default {
  dashboard: {
    greeting: "你好,{name: string}!",
    membership: "{role, select, admin {管理员} pro {专业版会员} other {普通会员}}",
    cart: "{count, plural, =0 {购物车暂无商品} other {购物车共有 # 件商品}}",
    discount: "限时促销:<badge>全场 8 折</badge>",
    invoice: "结算总额:{amount, number, currency}",
    delivery: "预计送达:{time}",
  },
} as const;
实时预览

你好,开发者!

专业版会员
限时促销:全场 8 折
购物车共有 3 件商品结算总额:¥899.50
预计送达:2天后

类型安全

支持翻译键名、命名空间及插值参数的 TypeScript 类型推导,并校验跨语言词典结构的一致性。

零运行时依赖

基于 TypeScript 与 Web 标准 Intl API 构建,无需代码生成步骤。 Minified + Gzipped: < 5 kB

ICU Message Format 支持

支持复数规则、序数词、条件分支(select)与富文本标签映射,无需引入外部解析器。

框架无关

适用于 Astro、Next.js、React、Vue、Svelte、Node.js、Bun 及 Cloudflare Workers 等多种环境。

基准测试

网络传输体积基准测试

模拟多语言 Web 应用在首屏预渲染与客户端水合(Hydration)时,浏览器实际下载的全部国际化资源网络传输体积。

首屏网络传输体积 (KB)

Playwright Headless Chromium · Real HTTP Transfer Size

paraglide中间件拆包
-91%36.3 KB
ts-intl按需拆包
-86%57.8 KB
paraglide默认全量
-82%76.6 KB
i18nextHTTP 动态加载
-55%188.7 KB
ts-intl默认全量
-14%360.0 KB
i18next默认全量
Baseline420.4 KB
运行时体积与依赖考量

i18next 包含独立解析器与插件运行时,存在固定体积开销;ts-intl 无第三方依赖,核心运行时约 2 KB,在按需拆包模式下仅传输当前语言的字典分块。

编译型与运行时方案机制差异

Paraglide 编译每条消息为独立函数并支持 Tree-shaking 未使用词条;ts-intl 作为轻量运行时方案无需代码生成,通过标准动态 import 避免多语言字典合并打包。