Skip to main content
Glama

i1n

让你的应用支持所有语言。只需一条命令。

npm license MCP

demo

代码即本地化。推送你的翻译键值,AI 会将其翻译为 182 种语言,并拉取类型安全的 TypeScript 定义。专为开发者、AI 智能体和产品团队打造。

永久免费 · 无需信用卡 · i1n.ai


为什么选择 i1n?

传统的 i18n 意味着数十个 JSON 文件、零类型安全、数小时的复制粘贴,以及在凌晨 2 点崩溃的部署。现有的工具每月收费 120 美元以上,且需要基于浏览器的操作流程。

i1n 与众不同:

  • 一条命令i1n push --translate es,fr,ja 即可完成

  • 类型安全 — 自动生成 i1n.d.ts,提供完整的 IDE 自动补全

  • AI 原生 — 为 Cursor、Claude Code、Windsurf 提供 MCP 服务器。让你的智能体为你处理 i18n

  • 零迁移 — 桥接模式 (Bridge Mode) 可封装你现有的 i18next/next-intl/vue-i18n

  • 成本降低 6 倍 — 包含免费层级。Pro 版每月 19 美元,而 Lokalise 每月 120 美元


📦 安装

# To use the CLI (global)
npm install -g i1n

# To use the SDK + types (in your app)
npm install i1n

# Local CLI usage (optional)
npm install -D i1n

支持 npmpnpmyarnbun


🏁 快速开始

# 1. Initialize (auth + auto-detect setup)
i1n init

# 2. Push your translation keys
i1n push

# 3. Pull translations + auto-generated TypeScript types
i1n pull

✨ 核心功能与命令

🛠️ i1n init

交互式设置,准备你的工作区。

  • 通过 API 密钥进行身份验证。

  • 新用户? 如果你还没有密钥,CLI 会提供清晰的入门指南。

  • 自动检测框架(Next.js、Vite、Expo、Flutter、Rails 等)。

  • 将配置保存到 i1n.config.json(通过 .gitignore 自动忽略)。

  • AI 编排:可选地为你的 AI 编码工具设置规则。

⬆️ i1n push

将本地翻译同步到 i1n。

  • 检测新的键值和源文件更改。

  • 智能翻译:在继续之前提供缺失键值的翻译并估算成本。

  • 高效的缓存层 — 重复翻译的成本仅为全新翻译的一小部分。

⬇️ i1n pull

下载翻译并生成类型安全的 ID。

  • 以你配置的格式更新本地语言环境文件。

  • 生成 i1n.d.ts 以实现完整的 IDE 自动补全。

📊 i1n limits

实时使用情况跟踪。

  • 查看你当前的套餐和额度使用情况。

  • 监控活跃语言槽位和可用容量。

🧠 i1n setup-ai

将你的 IDE 变成本地化专家。

  • Cursor (.mdc)Claude Code (CLAUDE.md)Windsurf 等生成项目特定的规则。

  • 确保 AI 智能体遵循你的命名规范、文件结构和品牌语调。

🔌 i1n mcp

用于 AI 编码助手的 MCP 服务器。

启动一个 Model Context Protocol 服务器,让 Cursor、Claude Code、Windsurf 和其他 AI 助手直接从你的 IDE 执行 i1n 命令。

# Add to Claude Code
claude mcp add i1n -- npx i1n mcp

# Or add to .mcp.json / cursor config
{
  "mcpServers": {
    "i1n": {
      "command": "npx",
      "args": ["i1n", "mcp"]
    }
  }
}

提供 7 个工具:

工具

描述

i1n_status

获取项目状态、套餐、限制和活跃语言

i1n_push

推送本地翻译文件并自动检测差异

i1n_pull

拉取翻译并生成类型安全的 TypeScript 定义

i1n_translate

使用 AI 将键值翻译为指定语言

i1n_add_language

添加新语言,可选自动翻译

i1n_extract_and_translate

从代码中提取字符串,作为键值推送,并翻译为所有语言

i1n_search

按名称或值搜索现有的翻译键值

杀手级工作流 — 告诉你的 AI 智能体“国际化这个组件”:

  1. 智能体读取你的文件并识别硬编码字符串

  2. 它使用提取的字符串调用 i1n_extract_and_translate

  3. i1n 推送键值,翻译为所有活跃语言,生成类型

  4. 智能体使用 t('key') 调用重写你的组件

原本 60 分钟的任务,现在只需 30 秒。


📁 支持的格式

格式

框架

文件示例

嵌套 JSON

i18next, next-intl, vue-i18n

en/common.json

扁平 JSON

React Native, Generic

locales/en.json

ARB

Flutter / Dart

app_en.arb

YAML

Ruby on Rails

en.yml

Android XML

Native Android

strings.xml

Apple Strings

iOS / macOS

Localizable.strings

TypeScript

类型安全 JSON

locales/en.ts


🧩 SDK 使用

i1n 包包含一个用于 Web 和移动端 JS/TS 项目的运行时 SDK。你可以通过两种方式使用它:

独立模式 — 替换你的 i18n 库

直接使用 i1n 原生引擎。无需外部依赖。

import { init, t, setLocale } from "i1n";

// Load your translation resources
init({
  locale: "en_us",
  resources: {
    en_us: {
      auth: { login: "Login", title: "Welcome back, {user}" },
      items_one: "One item",
      items_other: "{count} items",
    },
    es_es: {
      auth: { login: "Entrar", title: "Bienvenido de nuevo, {user}" },
      items_one: "Un elemento",
      items_other: "{count} elementos",
    },
  },
});

// Autocomplete and type-safety work out of the box after 'i1n pull'
t("auth.login"); // "Login"

// Support for default values (useful during development)
t("new.key", { defaultValue: "Coming soon..." }); // "Coming soon..."

// Variables & Plurals
t("auth.title", { user: "Fran" }); // "Welcome back, Fran"
t("items", { count: 5 }); // "5 items"

// Switch language at runtime
setLocale("es_es");
t("auth.login"); // "Entrar"

键值解析会自动处理嵌套和扁平结构 — 使用你项目偏好的任何格式即可。

桥接模式 — 保留你的库,增加类型安全

已经在用 i18next、vue-i18n 或 react-intl 了?用一行代码将其连接到 i1n,即可获得完整的自动补全。

import i18next from "i18next";
import { registerI1n, t } from "i1n";

// Set up i18next as usual
await i18next.init({
  lng: "en",
  resources: {
    /* ... */
  },
});

// Connect to i1n — one line
registerI1n((key, params) => i18next.t(key, params));

// Now t() uses i18next under the hood, but with strict type checking
t("common.greeting", { name: "World" }); // Powered by i18next, typed by i1n

适用于任何库:

  • vue-i18n: registerI1n((key, params) => i18n.global.t(key, params))

  • react-intl: registerI1n((key, params) => intl.formatMessage({ id: key }, params))

  • 自定义: registerI1n((key) => myLookup(key))

复数化

使用 _zero_one_other 后缀定义复数变体:

// In your translation files:
// "items_zero": "No items"
// "items_one": "One item"
// "items_other": "{count} items"

t("items", { count: 0 }); // "No items"
t("items", { count: 1 }); // "One item"
t("items", { count: 5 }); // "5 items"

插值

通用支持三种语法:{var}, {{var}}, %{var}

JavaScript (无 TypeScript)

SDK 可在纯 JS 中使用 — 只是没有自动补全功能:

import { init, t } from "i1n";
init({ locale: "en_us", resources: { en_us: { greeting: "Hello {name}" } } });
t("greeting", { name: "World" }); // "Hello World"

⚛️ React / Preact 集成

为了获得“即插即用”的体验,请使用这种极简的 Provider 模式。

import { createContext, useContext, useState, useEffect } from "react";
import { init, t, getLocale, setLocale as sdkSetLocale } from "i1n";

// 1. Initialize with wordings
// (In a real app, you'd probably import these from your locales folder)
init({
  locale: "en_us",
  resources: {
    /* ... */
  },
});

const STORAGE_KEY = "i1n-locale";
const I1nContext = createContext({
  locale: "en_us",
  setLocale: (l: string) => {},
});

// 2. Persistent Provider
export function I1nProvider({ children, defaultLocale = "en_us" }) {
  const [locale, setLocaleState] = useState(() => {
    return localStorage.getItem(STORAGE_KEY) || defaultLocale;
  });

  // Keep SDK in sync
  useEffect(() => {
    sdkSetLocale(locale);
  }, [locale]);

  const setLocale = (newLocale: string) => {
    localStorage.setItem(STORAGE_KEY, newLocale);
    setLocaleState(newLocale);
  };

  return (
    <I1nContext.Provider value={{ locale, setLocale }}>
      {children}
    </I1nContext.Provider>
  );
}

// 3. Simple Hook
export const useI1n = () => ({ t, ...useContext(I1nContext) });

用法:

const { t, setLocale } = useI1n();

return (
  <div>
    <h1>{t("auth.title", { user: "Fran" })}</h1>
    <button onClick={() => setLocale("es_es")}>Español</button>
  </div>
);

非 JS 平台

Flutter、Android 和 iOS 项目不使用 SDK。它们使用 i1n pull 生成的翻译文件(.arb.xml.strings)及其原生本地化系统。


🛡️ 开发者体验

🔒 隐私与安全

  • 自动忽略i1n init 会自动将敏感配置文件添加到你的 .gitignore 中。

  • 密钥管理:API 密钥仅存储在本地,绝不会提交到版本控制系统。

  • 加密传输:所有同步操作均通过安全的 HTTPS 通道进行。

🔒 零配置类型安全 (TypeScript)

CLI 会生成一个轻量级的声明文件 (i1n.d.ts),自动使用你项目的特定键值增强 i1n 包。

  1. 拉取:运行 i1n pull。CLI 会生成 locales/i1n.d.ts自动更新你的 tsconfig.json,以便你的 IDE 立即找到它们。

  2. 使用:从 i1n 导入 t,即可获得完整的自动补全和编译时检查。无需手动映射路径。

import { t } from "i1n";

// Full autocomplete & compile-time checking
t("auth.login.title");

// ERROR: Argument of type '"auth.login.titlse"' is not assignable...
t("auth.login.titlse");

💳 定价

套餐

价格

键值数

语言数

AI 翻译/月

Starter

$0

600

2

2,000

Pro

$19/月

5,000

5

10,000

Business

$49/月

15,000

12

20,000

Enterprise

自定义

自定义

182

自定义

CLI、SDK 和 MCP 服务器在所有套餐中均免费。Starter 套餐无需信用卡。

Pro 终身版 99 美元起 — 仅限前 200 名用户


📄 许可证

MIT — © 2026 i1n.ai

-
security - not tested
A
license - permissive license
-
quality - not tested

Latest Blog Posts

MCP directory API

We provide all the information about MCP servers via our MCP API.

curl -X GET 'https://glama.ai/api/mcp/v1/servers/Pakvothe/i1n-cli'

If you have feedback or need assistance with the MCP directory API, please join our Discord server