Internacionalització (i18n) sense dolor, expandida als teus propis horitzons sense gastar milers de dòlars.
Totalment gratuït. Projectes il·limitats, tots els 48 idiomes, sense caducitat, no cal cap clau de llicència.
Projectes il·limitats. Tots els 48 idiomes. Sense caducitat.
- Totes les 48 llengües, traduccions il·limitades
- El tauler de control, el servidor MCP, cada SDK
- Res de comprar, res d'introduir excepte la vostra clau d'IA
L'i18n ja no és complicat, pots experimentar-ho. No em fa res rebre una propina per això.
- Quan ho sents
- Si t'ho proposes
- Des 1 fins a 1 milió de dòlars, no més
Pagament segur amb Stripe. Una clau de llicència arriba a la teva safata d'entrada — silencia la sol·licitud de donació al tauler de control.
Allò que obtens
- Projectes il·limitats, tots els 48 idiomes, sense caducitat
- Traduccions il·limitades, sense límit d'ús
- El tauler de control, el servidor MCP per als teus agents, cada SDK
- Un contenidor, un fitxer SQLite per fer còpia de seguretat
- Una llicència comprovada sense connexió: el teu servidor mai no es connecta a casa
- Cada actualització, per a tota la vida: docker compose pull
Allò que portes
- Una màquina amb Docker: un VPS de 4 € és suficient
- Una clau d'API d'IA (Mistral, OpenAI, Anthropic, Google o qualsevol proveïdor compatible amb OpenAI). Les traduccions s'executen al teu compte, per uns pocs cèntims per aplicació
- Cinc minuts
El suport és per correu electrònic, amb el millor esforç possible. Necessites algú disponible? Els plans allotjats són per a tu.
Com funciona
Instal·la, crea l'administrador, enganxa la teva clau d'IA. Cada projecte és gratuït, per sempre.
Amb ONCE — un servidor nou, un domini, cinc minuts
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
Amb Docker Compose — qualsevol màquina que executi 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
Després, apunteu el vostre SDK al vostre servidor:
I18nKeyless.init({
API_KEY: "your-project-key",
API_URL: "https://i18n.example.com",
// …
});La guia completa: https://docs.i18n-keyless.com/docs/guides/self-hosting
Per què fer una donació?
Perquè tu gestiones el VPS i la clau de l'API d'IA tu mateix. No hi ha cap motiu perquè et cobri per una subscripció. Jo mateix odio les subscripcions. Així que, en comptes d'això: tu decideixes quin valor té el programari per a tu, i jo continuo desenvolupant-lo.
La imatge s'instal·la gratuïtament i executa projectes il·limitats, amb tots els idiomes i sense caducitat.
Preguntes abans de comprar? Escriviu'ns
Configura l'i18n, mantén la teva base de codi neta i envia-ho ràpidament
Hi ha múltiples PITA amb les solucions d'i18n actuals. Els dolors són tan grans que endarrereixes l'i18n tant com puguis.
Consumeix el temps que hauries d'estar a la platja
Configura el sistema de claus: almenys 1 hora de temps de desenvolupador sènior
Endavant i endarrere per cada nova clau: 1 minut per clau, x500 claus, x2 idiomes = 17 hores
Amb i18n-keyless, no et preocupes gens pel sistema d'internacionalització. Pots anar a la platja i demanar un mojito.
Avui la majoria de sistemes utilitzen claus per traduir el text
É dolorós de generar. Això és dolorós de mantenir.
Quan veus un text a l'aplicació i vols actualitzar-lo, has de trobar la clau corresponent.
Amb i18n-keyless, no et preocupes gens pel sistema d'i18n. Fes servir el teu cervell per alguna cosa més interessant.
Deixa les traduccions a la IA
Amb el sistema de claus, heu de gestionar les traduccions a l'aplicació.
Altrament, els seus usuaris veuran un someheader.welcome.title a la seva aplicació.
Amb i18n-keyless, en el pitjor escenari offline veus paraules reals sense traduir. A un ritme normal, no et preocupa gens el sistema d'i18n. Només escriu bons titulars, centra't en el màrqueting i obté vendes.
Les bases de codi són belles... fins que les claus d'i18n s'infecten
Amb el sistema de claus, quan llegeixes el codi i el contingut, has de llegir les claus, no el llenguatge natural.
De vegades hauríeu de fer una correcció perquè una frase no és gramaticalment correcta. Però no ho sabeu perquè llegiu claus.
Amb i18n-keyless, no us preocupa gens del sistema d'internacionalització. La base de codi es manté bonica.
Servidor MCP per cobrir totes les teves necessitats d'internacionalització
Sisena altra raó per la qual el sistema està tan optimitzat per a la programació agentiva.
Cap nom per inventar
Una clau és una decisió de denominació sense resposta correcta. Dos agents escriuen login.submit i auth.button.send per al mateix botó. Sense claus no hi ha cap decisió a prendre.
Un sol fitxer per editar, no vint
Un canvi amb clau afecta el component i tots els fitxers JSON de localització, i els agents obliden els fitxers. Aquí, un canvi de còpia és una edició d'un sol fitxer.
Zero conflictes de fusió en flotes d'agents
Cinc agents en cinc branques editen tots en.json: un conflicte garantit. No hi ha cap fitxer compartit, així que els worktrees i els agents en segon pla mai xoquen.
Barat en tokens
Per reutilitzar una clau, un agent ha de carregar els fitxers de localització en el context a cada edició. Les càrregues sense clau no fan res: el text ja és allà al component.
Diferències llegibles
La sol·licitud de pull mostra frases reals. Un humà o un agent de revisió pot jutjar la còpia sense haver de buscar què representa una clau.
Una regla al teu CLAUDE.md
Cada regla d'i18n que escrius és una regla que l'agent pot trencar. Aquesta necessita només una línia — i la substitució és el text real, així que un error no mostrarà a.b.c a la pantalla.
L'única regla d'i18n que el teu agent necessita
# CLAUDE.md Write the UI copy in English and wrap it in <T>…</T> from i18n-keyless-react. That is the whole i18n setup.
El teu agent pot operar-lo, no només escriure'l
A través del servidor MCP, l'agent llista les traduccions que falten, en llegeix una, substitueix una de dolenta o importa la còpia que ja tens — amb el seu propi inici de sessió OAuth, sense necessitat de copiar-hi cap clau.
Llegeix la guia de l'MCPLlança a escala global des del primer dia
Deixa de retardar la internacionalització per la seva complexitat. Implementa-ho en 5 minuts, no en dies. Mantén la velocitat del desenvolupament com si no s'hagués implementat la internacionalització.
- Implementació en 5 minuts. No estic fent broma.
Un simple objecte de configuració i ja està fet.
- Mantén la velocitat de desenvolupament
Codi com si l'i18n no s'hagués implementat en absolut.
- Enviar a mercats globals
No cal necessari de refactorització en escalar a nous idiomes.
- SSR i SEO preparats
Funciona amb Next.js, Remix, TanStack Start i Astro. Renderitza al servidor qualsevol idioma per als motors de cerca — mateixa configuració de 5 minuts.
Tradicional i18n
i18n-sense-clau
No cal gens per configurar-ho
Només el més simple objecte de configuració i ja pots començar a escala global.
I fins i tot, el teu agent ho configurarà per a tu.
1. Configuració bàsica
import * as I18nKeyless from "i18n-keyless-react";
I18nKeyless.init({
API_KEY: "YOUR_API_KEY",
storage: window.localStorage,
languages: {
primary: "en",
supported: ["en", "fr"],
},
});2. Ús de components (React aquí; el mateix en Vue, Angular, Flutter, Swift i 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. Ús servidor (Node.js aquí; la mateixa crida en Laravel, Rails, Python i 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. Per al text fora de components
import { getTranslation } from "i18n-keyless-react";
export default function Navigation() {
return (
<HomeTabs.Navigator>
<HomeTabs.Screen
options={{ tabBarLabel: getTranslation("Welcome") }}
name="WELCOME"
/>
</HomeTabs.Navigator>
);
}5. Trieu el vostre SDK: una línia d'instal·lació, la mateixa API a tot arreu
- 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
Com funcionen les traduccions
i18n-keyless és una biblioteca, combinada amb un servei d'API, que us permet traduir el vostre text sense necessitat d'utilitzar claus.
Si no es troba la traducció, es realitzarà una sol·licitud asíncrona a l'API d'I18nKeyless per obtenir la traducció mitjançant una crida a una API d'IA.
Aquesta operació es fa habitualment en mode de desenvolupament, mentre codifiques. Si en trobes una de faltant, en producció només el primer usuari que no tingui la traducció veurà un error, i després estarà disponible immediatament per a tots els usuaris arreu del món.
La teva llista d’articles en tots els idiomes, en cada llançament
Cada actualització significa noves notes de llançament, una descripció i paraules clau — per a cada idioma, en ambdues botigues. Això és el que t'impedeix afegir idiomes. No l'aplicació.
- Notes de llançament per a cada idioma, en una trucada
Escriu l'actualització una vegada. awaitForTranslation la retorna en cada idioma en què venes i la configuració de la teva botiga la proporciona a EAS o fastlane.
- 48 idiomes, assignats als espais de l'App Store
pt-BR i pt-PT són dues llistes; en-GB, en-AU i en-CA en són tres. toAppStoreLocale posa cada traducció al lloc correcte.
- Corregeix una mala traducció sense alliberament
A l'aplicació, un sobreescrit en el tauler de control està actiu alhora — sense compilació de correcció urgent, sense revisió d'emmagatzematge. A la llista, torna a executar l'impuls.
- No es preu per paraula
Un traductor cobra aproximadament 0,10 € per paraula. 2.000 cadenes multiplicades per 10 idiomes és un pressupost que un desenvolupador solitari no es pot permetre. Aquí no es compten les paraules.
La recepta completa per a una aplicació 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 } };
};La mateixa trucada escriu fitxers de metadades de fastlane per a Google Play. Les majúscules són consultives: posa el límit en el context i comprova la longitud abans de fer push.
Sandbox Interactiu
Veugeu com funciona l'i18n-keyless en temps real
Obriu un projecte StackBlitz en directe i editable per veure com es resolen les traduccions mentre escriviu.
Per què vaig construir això
Sempre havia postergat la internacionalització fins que el meu client la va voler tant que no vaig tenir altra opció. Odio llegir el codi amb claus d'internacionalització a dins, i odio mantenir fitxers JSON tant com veure el cost dels proveïdors d'internacionalització. Així que vaig haver de crear-ne una de pròpia, i ME FASCINA. Ara totes les meves aplicacions estan internacionalitzades per defecte.
Arnaud Ambroselli
Fundador de i18n-keyless
Vols afegir el teu?
Un testimoni contra una subscripció gratuïta. Demana la teva!
Envia el meu testimoniPreguntes freqüents
Necessito gestionar els fitxers de traducció?
No. No hi ha fitxers JSON, cap pas d'extracció de claus ni cap connector en temps de compilació. Escriviu les vostres frases en la vostra llengua d'origen, l'SDK les envia a l'API en la primera sol·licitud, l'API les tradueix amb IA, i cada sol·licitud posterior es serveix des de la memòria cau. El vostre codi és l'única font de veritat.
Què passa quan canvio el text d'origen?
El text d'origen és la clau. Si el canvies, obtindràs una nova clau amb una nova traducció d'IA. L'antiga clau deixa simplement de rebre sol·licituds, i el tauler de control l'elimina després de 30 dies sense ús. Corregir una errada tipogràfica és igual: corregeix-la al codi, desplega-la, i el nou text es tradueix en la primera sol·licitud.
Quant costa?
Autoallotjat: completament gratuït, projectes il·limitats, sense subscripció i sense límit d'ús — instal·la la imatge de Docker, utilitza la teva pròpia clau d'IA. T'agrada? ¡Dona'm un cop de mà! Allotjat: un preu únic per projecte al mes, segons els usuaris actius mensualment — 4 € fins a 1.000, 9 € fins a 5.000, 29 € fins a 50.000, 99 € fins a 500.000 — facturat mensualment, cancel·la quan vulguis. No hi ha preu per seient, per paraula ni per cadena en cap dels dos casos.
Puc exportar les meves traduccions?
Sí. El tauler de control té un botó "Exporta JSON" que descarrega totes les traduccions del teu projecte com un únic fitxer JSON. L'exportació inclou totes les files, no només les utilitzades en els últims 30 dies, així que és una còpia de seguretat completa. No hi ha cap restricció: les teves dades sempre estan a un clic de distància.
Un mantenidor: què passa si el projecte s'atura?
Els SDK estan sota llicència MIT i romanen a npm, PyPI, RubyGems i altres registres. El servidor és públic sota la Llicència Elastic 2.0 i el protocol entre ells està documentat, de manera que qualsevol pot executar-lo, fer-ne un fork o escriure un servidor contra ell. Les teves traduccions es guarden en una exportació JSON en qualsevol moment. Si el servei allotjat s'atura: les aplicacions instal·lades continuen servint les seves traduccions emmagatzemades, un client nou retrocedeix a la llengua original, i apuntar l'SDK a la teva pròpia instància amb API_URL ho restaura tot. El que perdries és la traducció mitjançant IA de noves cadenes a i18n-keyless.com — no les teves dades ni la teva aplicació.
Llegeix la resposta completa, amb codiMira la demostració
Mira aquest vídeo curt per veure l'i18n-keyless en acció