无痛的i18n,扩展到您自己的视野 无需花费 数千美元。
完全免费。无限项目,支持全部48种语言,无过期时间,无需许可证密钥。
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系统。代码库保持美观。
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.
从第一天开始全球发布
停止因复杂性而拖延i18n。在5分钟内实现,而不是几天。保持开发速度,就像i18n没有实现一样。
- 5分钟实施。不是开玩笑。
一个简单的配置对象,你就完成了。
- 保持开发速度
像i18n根本没有实现一样编码。
- 发货到全球市场
在扩展到新语言时,不需要重构。
- SSR 与 SEO 就绪
与 Next.js、Remix、TanStack Start 和 Astro 配合使用。为搜索引擎提供服务器端渲染的任何语言 — 相同的 5 分钟设置。
传统的i18n
i18n-keyless
设置非常简单
只需要最简单的配置对象,你就可以准备好全球化。
不仅如此,您的代理还会为您设置。
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
翻译如何工作
i18n-keyless 是一个结合了 API 服务的库,它可以让你在不需要使用键的情况下翻译你的文本。
如果找不到翻译,将异步获取I18nKeyless的API,通过AI API调用获取翻译。
此操作通常在开发模式下进行,当您在编码时。如果你漏掉了一个,在生产环境中只有缺少翻译的第一个用户会看到一个闪烁,然后它将立即对全球用户可用。
您的商店列表在每种语言、每次发布时
每次更新都意味着新的发行说明、描述和关键词 — 每种语言在两个商店中都有。这就是阻止你添加语言的原因。不是应用本身。
- 为每种语言发布说明,通过一次调用
写一次更新。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文件,就像讨厌看到国际化翻译服务提供商的高昂费用一样。所以我只能自己动手,而且我超爱这样。现在我的所有应用默认都支持国际化。
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的运作