better-i18n
Compare original and translation side by side
🇺🇸
Original
English🇨🇳
Translation
Chinesebetter-i18n — Localization infrastructure for modern apps. CMS + TMS + CDN + AI + MCP.
Dashboard: https://better-i18n.com · Docs: https://docs.better-i18n.com · CDN: https://cdn.better-i18n.com · Skills: https://github.com/better-i18n/skills
better-i18n —— 现代应用的本地化基础设施。CMS + TMS + CDN + AI + MCP。
仪表盘:https://better-i18n.com · 文档:https://docs.better-i18n.com · CDN:https://cdn.better-i18n.com · 技能库:https://github.com/better-i18n/skills
Package versions
包版本
| Package | Version | Install |
|---|---|---|
| 0.7.2 | |
| 0.5.0 | |
| 0.5.0 | |
| 0.7.5 | |
| 3.2.0 | |
| 0.2.6 | |
| 0.15.5 | |
| 0.8.1 | |
Always check npm for the latest version before installing.
| 包 | 版本 | 安装命令 |
|---|---|---|
| 0.7.2 | |
| 0.5.0 | |
| 0.5.0 | |
| 0.7.5 | |
| 3.2.0 | |
| 0.2.6 | |
| 0.15.5 | |
| 0.8.1 | |
安装前请务必查看npm获取最新版本。
SDK selection
SDK选择
| Framework | Package | Reference |
|---|---|---|
| Next.js (App Router or Pages Router) | | <references/sdk-next.md> |
| React + TanStack Router / use-intl | | <references/sdk-react.md> |
| Hono / Node.js server | | <references/sdk-react.md> |
| Remix / Shopify Hydrogen | | <references/sdk-react.md> |
| React Native / Expo | | <references/sdk-mobile.md> |
| Swift (iOS / macOS / visionOS) | | <references/sdk-mobile.md> |
| Flutter / Dart | | <references/sdk-mobile.md> |
| Headless / Vanilla JS | | <references/sdk-react.md> |
| 框架 | 包 | 参考文档 |
|---|---|---|
| Next.js(App Router 或 Pages Router) | | <references/sdk-next.md> |
| React + TanStack Router / use-intl | | <references/sdk-react.md> |
| Hono / Node.js 服务器 | | <references/sdk-react.md> |
| Remix / Shopify Hydrogen | | <references/sdk-react.md> |
| React Native / Expo | | <references/sdk-mobile.md> |
| Swift(iOS / macOS / visionOS) | | <references/sdk-mobile.md> |
| Flutter / Dart | | <references/sdk-mobile.md> |
| Headless / Vanilla JS | | <references/sdk-react.md> |
Framework quick-start
框架快速开始
| Framework | Docs page |
|---|---|
| Next.js App Router | https://docs.better-i18n.com/frameworks/nextjs.mdx |
| TanStack Start (SSR) | https://docs.better-i18n.com/frameworks/tanstack-start.mdx |
| Vite + React | https://docs.better-i18n.com/frameworks/vite.mdx |
| Vite + React Router | https://docs.better-i18n.com/frameworks/vite/react-router.mdx |
| Remix / Hydrogen | https://docs.better-i18n.com/frameworks/remix.mdx |
| Expo / React Native | https://docs.better-i18n.com/frameworks/expo.mdx |
| iOS / Swift | https://docs.better-i18n.com/frameworks/ios.mdx |
| Flutter / Dart | https://docs.better-i18n.com/frameworks/flutter.mdx |
| Hono / Node.js | https://docs.better-i18n.com/frameworks/server-sdk/hono.mdx |
| Express / Fastify | https://docs.better-i18n.com/frameworks/server-sdk/node.mdx |
| tRPC | https://docs.better-i18n.com/frameworks/server-sdk/trpc.mdx |
| Supabase Edge | https://docs.better-i18n.com/frameworks/server-sdk/supabase.mdx |
| 框架 | 文档页面 |
|---|---|
| Next.js App Router | https://docs.better-i18n.com/frameworks/nextjs.mdx |
| TanStack Start (SSR) | https://docs.better-i18n.com/frameworks/tanstack-start.mdx |
| Vite + React | https://docs.better-i18n.com/frameworks/vite.mdx |
| Vite + React Router | https://docs.better-i18n.com/frameworks/vite/react-router.mdx |
| Remix / Hydrogen | https://docs.better-i18n.com/frameworks/remix.mdx |
| Expo / React Native | https://docs.better-i18n.com/frameworks/expo.mdx |
| iOS / Swift | https://docs.better-i18n.com/frameworks/ios.mdx |
| Flutter / Dart | https://docs.better-i18n.com/frameworks/flutter.mdx |
| Hono / Node.js | https://docs.better-i18n.com/frameworks/server-sdk/hono.mdx |
| Express / Fastify | https://docs.better-i18n.com/frameworks/server-sdk/node.mdx |
| tRPC | https://docs.better-i18n.com/frameworks/server-sdk/trpc.mdx |
| Supabase Edge | https://docs.better-i18n.com/frameworks/server-sdk/supabase.mdx |
Workflow selection
工作流选择
| Task | Approach | Reference |
|---|---|---|
| Upload JSON files, no GitHub needed | CDN-first | <references/cdn.md> |
| GitHub PR-based translation sync | GitHub App + publish flow | <references/github-sync.md> |
| AI-assisted key and translation management | MCP tools | <references/mcp.md> |
| Localized CMS content (blog, docs, pages) | Content CMS + SDK | <references/content.md> |
| Scan codebase for hardcoded strings | CLI | <references/cli.md> |
| Check translation coverage and key sync | CLI | <references/cli.md> |
| Full i18n health analysis with score | CLI | <references/cli.md> |
| Define key naming and namespace structure | Key conventions | <references/key-naming.md> |
| Choose JSON file format | File formats | <references/file-formats.md> |
| Publish translations to CDN or GitHub | Publish flows | <references/publish-and-analytics.md> |
| Track coverage, health trends, CDN usage | Analytics | <references/publish-and-analytics.md> |
| Format dates, numbers, currencies, relative time | Formatting | <references/sdk-react.md> |
| Detect locale from country / Accept-Language | Geo detection | <references/cdn.md> |
Type-safe | TypeScript | <references/sdk-react.md> |
| Webhooks on publish / key change events | Outgoing webhooks | <references/publish-and-analytics.md> |
| 任务 | 方案 | 参考文档 |
|---|---|---|
| 上传JSON文件,无需GitHub | CDN优先 | <references/cdn.md> |
| 基于GitHub PR的翻译同步 | GitHub App + 发布流程 | <references/github-sync.md> |
| AI辅助的键与翻译管理 | MCP工具 | <references/mcp.md> |
| 本地化CMS内容(博客、文档、页面) | 内容CMS + SDK | <references/content.md> |
| 扫描代码库查找硬编码字符串 | CLI | <references/cli.md> |
| 检查翻译覆盖率与键同步情况 | CLI | <references/cli.md> |
| 完整i18n健康分析并生成评分 | CLI | <references/cli.md> |
| 定义键命名与命名空间结构 | 键命名规范 | <references/key-naming.md> |
| 选择JSON文件格式 | 文件格式规范 | <references/file-formats.md> |
| 将翻译发布到CDN或GitHub | 发布流程 | <references/publish-and-analytics.md> |
| 跟踪覆盖率、健康趋势、CDN使用情况 | 分析功能 | <references/publish-and-analytics.md> |
| 格式化日期、数字、货币、相对时间 | 格式化功能 | <references/sdk-react.md> |
| 根据国家/Accept-Language检测语言环境 | 地域检测 | <references/cdn.md> |
类型安全的 | TypeScript支持 | <references/sdk-react.md> |
| 发布/键变更事件的Webhooks | Outgoing webhooks | <references/publish-and-analytics.md> |
Read the relevant reference before writing any code.
编写代码前请阅读相关参考文档。
Critical rules (apply everywhere)
重要规则(适用于所有场景)
- Project identifier is always — e.g.
"org/project"or"acme/dashboard""stripe/web" - Locale codes are lowercase BCP 47 on the CDN: →
"pt-BR". Always call"pt-br"before constructing CDN paths.normalizeLocale() - Singletons — (Next.js),
createI18n,createServerI18n,createRemixI18nmust be instantiated once at module scope. Never inside a function, request handler, or component.createI18nCore - vs
createKeys—updateKeyscreates NEW keys only. Using it on existing keys causes phantom key accumulation (documented incident: 1,005 duplicates in one operation). Always fetch the key ID withcreateKeysfirst, then calllistKeys.updateKeys - CDN always returns HTTP 200 — check for in the JSON body, not HTTP status codes.
{ fallback: true } - Default namespace → in CDN paths — the namespace
"translations"is stored as"default"internally. Use"translations"namespace for flat-key projects.null - Free to get started — all SDKs and CLI are open-source. Paid plans unlock more languages, history, and team features.
- 项目标识符始终为格式——例如
"org/project"或"acme/dashboard""stripe/web" - CDN上的语言代码为小写BCP 47格式:→
"pt-BR"。构建CDN路径前务必调用"pt-br"方法。normalizeLocale() - 单例模式——(Next.js)、
createI18n、createServerI18n、createRemixI18n必须在模块作用域内实例化一次。绝不能在函数、请求处理器或组件内部实例化。createI18nCore - 与
createKeys的区别——updateKeys仅创建新键。在已有键上使用它会导致幽灵键堆积(已记录事件:一次操作产生1005个重复键)。请先调用createKeys获取键ID,再调用listKeys。updateKeys - CDN始终返回HTTP 200——请检查JSON体中的字段,而非HTTP状态码。
{ fallback: true } - 默认命名空间在CDN路径中为——命名空间
"translations"在内部存储为"default"。扁平键项目请使用"translations"命名空间。null - 免费入门——所有SDK和CLI均为开源。付费计划可解锁更多语言、历史记录和团队功能。