自托管

无痛的i18n,扩展到您自己的视野 无需花费 数千美元。

完全免费。无限项目,支持全部48种语言,无过期时间,无需许可证密钥。

永久免费
€0永远

无限项目。全部48种语言。无过期时间。

  • 所有48种语言,无限次翻译
  • 仪表板、MCP 服务器、每个 SDK
  • 无需购买,无需输入,只需您的AI密钥
免费安装
给我小费
你喜欢它吗?

i18n 现在毫不费力,你可以亲身体验。我不介意为此获得小费。

  • 当你感受到它
  • 如果你愿意的话
  • 从1美元到100万美元,不超过

由 Stripe 提供安全支付。许可证密钥会发送到您的收件箱——它会在仪表板中静音捐赠提示。

你得到的

  • 无限项目,支持48种语言,永不过期
  • 无限制翻译,无使用上限
  • 仪表板,您的代理的MCP服务器,每个SDK
  • 一个容器,一个用于备份的SQLite文件
  • 离线检查的许可证:您的服务器从不调用家庭
  • 每次更新,终身受益:docker compose pull

你带来的东西

  • 一台带有Docker的机器:一个4欧元的VPS足够用了
  • 一个AI API密钥(Mistral、OpenAI、Anthropic、Google或任何与OpenAI兼容的提供商)。翻译在您自己的账户上运行,每个应用只需几美分
  • 五分钟

支持通过电子邮件提供,尽最大努力。需要有人值班吗?托管计划就是为您准备的。

它如何运行

安装,创建管理员,粘贴您的AI密钥。每个项目永久免费。

使用 ONCE — 一个新服务器、一个域名、五分钟

curl -fsSL https://get.once.com | sh
once   # add an app: ghcr.io/ambroselli-io/i18n-keyless:latest, pick a host name
# then open it: create the admin, paste your AI key on Settings
# fully free, unlimited projects — donate if you want
# ONCE does the domain, the TLS, the updates and the backups

使用 Docker Compose — 任何运行 Docker 的机器

mkdir i18n-keyless && cd i18n-keyless
curl -fsSL https://i18n-keyless.com/self-hosted/docker-compose.yml -o docker-compose.yml
docker compose up -d
# → http://localhost:1800: create the admin, paste your AI key on Settings
# fully free, unlimited projects — donate if you want

然后将您的 SDK 指向您的服务器:

I18nKeyless.init({
  API_KEY: "your-project-key",
  API_URL: "https://i18n.example.com",
  // …
});

完整指南: https://docs.i18n-keyless.com/docs/guides/self-hosting

为什么捐款?

因为你自己管理VPS和AI API密钥。我没有理由向你收取订阅费。我自己也讨厌订阅。所以,改为:你来决定这个软件对你的价值,而我继续开发它。

该图像免费安装并运行无限项目,支持所有语言且无过期时间。

购买前的问题? 写信给我们

设置i18n,保持代码库整洁并快速发布

当前的i18n解决方案存在多个PITA。痛苦如此之大,以至于你尽可能推迟i18n。

它消耗了你应该在海滩上度过的时间

设置密钥系统:至少1小时高级开发人员时间

每个新密钥往返:每个密钥1分钟,x500密钥,x2语言=17小时

使用 i18n-keyless,您不需要关心 i18n 系统。您可以去海滩并点一杯莫吉托。

今天,大多数系统使用密钥来翻译文本

这很痛苦生成。这很痛苦维护。

当你在应用程序中看到一段文字,并且想要更新它时,你需要找到对应的键。

使用 i18n-keyless,你完全不需要关心 i18n 系统。把你的大脑用在更有趣的事情上。

将翻译留给AI

使用密钥系统,您需要在应用程序中管理翻译。

否则,您的用户将在应用程序中看到 someheader.welcome.title。

使用 i18n-keyless 时,最坏情况下离线时你会看到未翻译的实际词汇。正常情况下,你根本不会在意 i18n 系统。只需写好标题,专注于营销,提高销售额。

代码库很美... 直到i18n键的感染

使用键系统时,读取代码和内容时,必须读取键,而不是自然语言。

有时,你需要做一个修正,因为一个句子在语法上是不正确的。但你不知道这一点,因为你读的是键。

使用i18n-keyless,你完全不需要关心i18n系统。代码库保持美观。

从第一天开始添加i18n,不会影响您的开发速度
为编码代理构建

MCP 服务器,满足您所有的国际化需求

系统如此优化以支持智能编码的另外六个原因。

没有名字可发明

键是一个命名决策,没有正确答案。两个代理分别为同一个按钮写下 login.submit 和 auth.button.send。没有键,就没有决策可做。

编辑一个文件,而不是二十个

一个键控的更改会影响组件以及每个区域设置的JSON文件,代理会遗忘文件。在这里,复制更改是单个文件的编辑。

代理车队中零合并冲突

五个代理在五个分支上都编辑 en.json:冲突在所难免。没有共享文件,因此工作树和后台代理永远不会发生冲突。

代币便宜

要重复使用键,代理必须在每次编辑时将区域设置文件加载到上下文中。无键加载不做任何操作:文本直接存在于组件中。

可读差异

拉取请求显示真实的句子。人类或审查代理可以在不深入了解键代表什么的情况下判断副本。

您的 CLAUDE.md 中的一个规则

你编写的每一条 i18n 规则都是代理可能违反的规则。这一条只需要一行——而回退是真实文本,因此错误不会在屏幕上显示 a.b.c。

您的代理只需要的唯一 i18n 规则

# CLAUDE.md
Write the UI copy in English and wrap it in <T>…</T> from i18n-keyless-react.
That is the whole i18n setup.

您的代理可以操作它,而不仅仅是编写它

通过MCP服务器,代理会列出缺失的翻译,读取其中一条,覆盖错误的翻译,或导入你已有的副本——使用其自带的OAuth登录,无需粘贴任何密钥。

阅读MCP指南
非常适合MVP

从第一天开始全球发布

停止因复杂性而拖延i18n。在5分钟内实现,而不是几天。保持开发速度,就像i18n没有实现一样。

  • 5分钟实施。不是开玩笑。

    一个简单的配置对象,你就完成了。

  • 保持开发速度

    像i18n根本没有实现一样编码。

  • 发货到全球市场

    在扩展到新语言时,不需要重构。

  • SSR 与 SEO 就绪

    与 Next.js、Remix、TanStack Start 和 Astro 配合使用。为搜索引擎提供服务器端渲染的任何语言 — 相同的 5 分钟设置。

传统的i18n

设置密钥系统(1小时)
创建翻译文件(2小时)
重构组件(4小时)
测试所有语言 (2 小时)
修复布局问题(3小时)
12+ 小时工作

i18n-keyless

添加包 (1 分钟)
使用API密钥配置 (2分钟)
包裹文本组件 (2 分钟)
5分钟的工作
如何工作

设置非常简单

只需要最简单的配置对象,你就可以准备好全球化。
不仅如此,您的代理还会为您设置。

1. 基本设置

import * as I18nKeyless from "i18n-keyless-react";

I18nKeyless.init({
  API_KEY: "YOUR_API_KEY",
  storage: window.localStorage,
  languages: {
    primary: "en",
    supported: ["en", "fr"],
  },
});

2. 组件使用(此处为 React;在 Vue、Angular、Flutter、Swift 和 Kotlin 中相同)

import { I18nKeylessText } from "i18n-keyless-react";
// import { T } from "i18n-keyless-react"; // also works

// Just write in your primary language
<I18nKeylessText>
  Welcome to our website
</I18nKeylessText>

3. 服务器端使用(此处为 Node.js;在 Laravel、Rails、Python 和 Go 中的相同调用)

import { awaitForTranslationOrFallbackToOriginal, type Lang } from 'i18n-keyless-node';

const title = await awaitForTranslationOrFallbackToOriginal('Come see my app!', user.lang as Lang);
const body = await awaitForTranslationOrFallbackToOriginal('So many new stuff!', user.lang as Lang);

await sendExpoPushNotification({ user, title, body });

4. 组件外的文本

import { getTranslation } from "i18n-keyless-react";

export default function Navigation() {
  return (
    <HomeTabs.Navigator>
      <HomeTabs.Screen
        options={{ tabBarLabel: getTranslation("Welcome") }}
        name="WELCOME"
      />
    </HomeTabs.Navigator>
  );
}

5. 选择您的 SDK:一行安装,无处不在的相同 API

  • React, React Native, Expo, Next.js, Remix, TanStack Start, Astronpm install i18n-keyless-react
  • Vue, Nuxtnpm install i18n-keyless-vue
  • Angularnpm install i18n-keyless-angular
  • Plain HTML, Svelte, Alpine, htmx, one script tagnpm install i18n-keyless-browser
  • Node.jsnpm install i18n-keyless-node
  • Laravel, PHPcomposer require i18n-keyless/laravel
  • Rails, Rubybundle add i18n-keyless-rails
  • Flutter, Dartflutter pub add i18n_keyless
  • Swift, iOS, macOS, VaporSwiftPM: arnaudambro/i18n-keyless-swift
  • Kotlin, Android, Ktorio.github.arnaudambro:i18n-keyless-kotlin
  • Python, Django, Flask, FastAPIpip install i18n-keyless
  • Gogo get github.com/arnaudambro/i18n-keyless/ports/go/v3

为每个十二个 SDK 快速设置

翻译如何工作

i18n-keyless 是一个结合了 API 服务的库,它可以让你在不需要使用键的情况下翻译你的文本。

如果找不到翻译,将异步获取I18nKeyless的API,通过AI API调用获取翻译。

此操作通常在开发模式下进行,当您在编码时。如果你漏掉了一个,在生产环境中只有缺少翻译的第一个用户会看到一个闪烁,然后它将立即对全球用户可用。

App Store 与 Google Play

您的商店列表在每种语言、每次发布时

每次更新都意味着新的发行说明、描述和关键词 — 每种语言在两个商店中都有。这就是阻止你添加语言的原因。不是应用本身。

  • 为每种语言发布说明,通过一次调用

    写一次更新。awaitForTranslation 会将其返回为您销售的每种语言,您的商店配置会将其传递给 EAS 或 fastlane。

  • 48种语言,已映射到App Store的插槽

    pt-BR 和 pt-PT 是两个列表;en-GB、en-AU 和 en-CA 是三个。toAppStoreLocale 将每个翻译放在正确的位置。

  • 修复一个未发布的糟糕翻译

    在应用中,仪表板中的一个覆盖一次只能激活一个——没有热修复构建,没有商店审核。在列表中,重新推送。

  • 非按字计价

    翻译大约每字收费0.10欧元。2000个字符串乘以10种语言,这是一个独立开发者无法承担的预算。在这里,字数不计算。

一个 Expo 应用的完整配方

// store.config.js — EAS Metadata awaits an async config
const { init, awaitForTranslation, toAppStoreLocale } = require("i18n-keyless-node");

const LANGS = ["en", "fr", "de", "ja", "pt-BR"];
const DESCRIPTION = "Bibi translates your app while you sleep…";

module.exports = async () => {
  init({ API_KEY: process.env.I18N_KEYLESS_KEY, languages: { primary: "en", supported: LANGS } });
  const info = {};
  for (const lang of LANGS) {
    info[toAppStoreLocale(lang)] = {
      title: await awaitForTranslation("Bibi", lang, { context: "App Store app name, 30 characters max" }),
      subtitle: await awaitForTranslation("Keyless i18n", lang, { context: "App Store subtitle, 30 characters max" }),
      description: await awaitForTranslation(DESCRIPTION, lang, { context: "App Store description" }),
    };
  }
  return { configVersion: 0, apple: { info } };
};

相同的调用为 Google Play 写入 fastlane 元数据文件。大写字母仅供参考:在上下文中设置限制并在推送前检查长度。

亲自试试

互动沙盒

查看i18n-keyless如何实时工作

打开一个实时可编辑的 StackBlitz 项目,边输入边查看翻译的解析。

我为什么要建造这个

我总是推迟国际化,直到我的客户如此渴望,以至于我别无选择。我讨厌阅读代码中带有国际化键的内容,也讨厌维护JSON文件,就像讨厌看到国际化翻译服务提供商的高昂费用一样。所以我只能自己动手,而且我超爱这样。现在我的所有应用默认都支持国际化。

AA

Arnaud Ambroselli

i18n-keyless 的创始人

想要添加你的吗?

对免费订阅的控诉。请索取您的!

发送我的证词
在你问之前

常见问题

我需要管理翻译文件吗?

不。没有 JSON 文件,没有键提取步骤,也没有构建时插件。您用源语言编写句子,SDK 在首次请求时将它们发送到 API,API 使用 AI 进行翻译,之后的每次请求都从缓存中提供。您的代码是唯一的真理来源。

当我更改源文本时会发生什么?

源文本是键。修改它,你会得到一个新的键,并获得全新的AI翻译。旧键将不再被请求,仪表板会在30天未使用后自动清理。修正拼写错误也是一样:在代码中修正它,部署,新文本将在首次请求时被翻译。

多少钱?

自托管:完全免费,无限项目,无需订阅且无使用限制 — 安装 Docker 镜像,使用您自己的 AI 密钥。喜欢吗?请我喝杯咖啡!托管:每个项目每月固定价格,按月活跃用户计算 — 1,000 以内 4 欧元,5,000 以内 9 欧元,50,000 以内 29 欧元,500,000 以内 99 欧元 — 按月计费,随时取消。两种方案均无按座位、按字数或按字符串的定价。

我可以导出我的翻译吗?

是的。仪表板有一个“导出 JSON”按钮,可将项目中的所有翻译下载为单个 JSON 文件。导出包括所有行,而不仅仅是最近 30 天使用的行,因此这是一个完整的备份。没有锁定:您的数据随时可通过一键访问。

一位维护者:如果项目停止会发生什么?

SDK 采用 MIT 许可证,并保留在 npm、PyPI、RubyGems 和其他注册表中。服务器在 Elastic License 2.0 下公开,且它们之间的协议已记录,因此任何人都可以运行、分叉或编写针对它的服务器。您的翻译会在任何时间以单个 JSON 导出文件保存。如果托管服务停止:已安装的应用会继续提供其缓存的翻译,新客户端会回退到源语言,而将 SDK 指向您自己的实例(通过 API_URL)即可恢复一切。您将失去的只是 i18n-keyless.com 上新字符串的 AI 翻译——而不是您的数据或应用。

阅读完整答案,包括代码
亲自试试

观看演示

观看这段短视频,看看i18n-keyless的运作