Internationalisation (i18n) sans douleur, élargie à vos propres horizons sans dépenser des milliers de dollars.
Totalement gratuit. Projets illimités, les 48 langues, pas d'expiration, aucune clé de licence requise.
Projets illimités. Toutes les 48 langues. Aucune expiration.
- Toutes les 48 langues, traductions illimitées
- Le tableau de bord, le serveur MCP, chaque SDK
- Rien à acheter, rien à saisir sauf votre clé d'IA
i18n est maintenant sans effort, vous pouvez l'essayer. Ça ne me dérange pas de recevoir un pourboire pour ça.
- Quand tu le sens
- Si t’as le goût
- De 1 à 1 million de dollars, pas plus
Paiement sécurisé par Stripe. Une clé de licence arrive dans votre boîte de réception — elle désactive l'invite de don dans le tableau de bord.
Ce que tu obtiens
- Projets illimités, les 48 langues, sans expiration
- Traductions illimitées, pas de limite d'utilisation
- Le tableau de bord, le serveur MCP pour vos agents, chaque SDK
- Un conteneur, un fichier SQLite à sauvegarder
- Une licence vérifiée hors ligne : votre serveur n'appelle jamais à la maison
- À chaque mise à jour, pour la vie : docker compose pull
Ce que tu apportes
- Une machine avec Docker : un VPS à 4 $ est largement suffisant
- Une clé API d'IA (Mistral, OpenAI, Anthropic, Google ou tout fournisseur compatible OpenAI). Les traductions s'exécutent sur votre propre compte, pour quelques sous par application
- Cinq minutes
Le support se fait par courriel, avec le meilleur effort possible. Besoin de quelqu'un en permanence ? Les forfaits hébergés sont pour vous.
Comment ça fonctionne
Installez, créez l'administrateur, collez votre clé d'IA. Chaque projet est gratuit, pour toujours.
Avec ONCE — un nouveau serveur, un domaine, cinq minutes
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
Avec Docker Compose — n'importe quelle machine exécutant 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
Puis pointez votre SDK vers votre serveur :
I18nKeyless.init({
API_KEY: "your-project-key",
API_URL: "https://i18n.example.com",
// …
});Le guide complet : https://docs.i18n-keyless.com/docs/guides/self-hosting
Pourquoi faire un don ?
Parce que tu gères toi-même le VPS et la clé API de l'IA. Je n'ai aucune raison de te faire payer un abonnement. Moi-même, je déteste les abonnements. Alors voici : tu décides de la valeur que ce logiciel a pour toi, et moi je continue à le développer.
L'image s'installe gratuitement et exécute des projets illimités, dans toutes les langues et sans expiration.
Questions avant d'acheter ? Écrivez-nous
Configurez l'i18n, gardez votre base de code propre et livrez rapidement
Il existe plusieurs PITA avec les solutions d'i18n actuelles. Les douleurs sont si grandes que vous retardez l'i18n autant que possible.
Cela consomme le temps que vous devriez passer à la plage
Configurez le système de clés : au moins 1 heure de temps de développeur senior
D'avant en arrière pour chaque nouvelle clé : 1 minute par clé, x500 clés, x2 langues = 17 heures
Avec i18n-keyless, vous n’avez pas à vous soucier du tout du système d’internationalisation. Vous pouvez aller à la plage et commander un mojito.
Aujourd’hui, la plupart des systèmes utilisent des clés pour traduire le texte
C'est douloureux à générer. C'est douloureux à maintenir.
Lorsque vous voyez un texte dans l'application et que vous souhaitez le mettre à jour, vous devez trouver la clé correspondante.
Avec i18n-keyless, vous ne vous souciez même pas du système d'i18n. Utilisez votre cerveau pour quelque chose de plus intéressant.
Laissez les traductions à l'IA
Avec le système de clés, vous devez gérer les traductions dans l'application.
Sinon, vos utilisateurs verront someheader.welcome.title dans leur application.
Avec i18n-keyless, dans le pire scénario hors ligne, vous voyez des mots réels non traduits. À un rythme normal, vous ne vous souciez pas du tout du système i18n. Écrivez simplement de bons titres, concentrez-vous sur le marketing et obtenez des ventes.
Les bases de code sont belles... jusqu'à ce que les clés i18n s'infectent
Avec le système de clés, lorsque vous lisez le code et le contenu, vous devez lire les clés, pas le langage naturel.
Parfois, vous devriez faire une correction parce qu'une phrase n'est pas grammaticalement correcte. Mais vous ne le savez pas parce que vous lisez des clés.
Avec i18n-keyless, vous ne vous souciez même pas du système d’internationalisation. La base de code reste belle.
Serveur MCP pour couvrir tous vos besoins en internationalisation
Six autres raisons pour lesquelles le système est si optimisé pour le codage agentique.
Aucun nom à inventer
Une clé est une décision de nommage sans bonne réponse. Deux agents écrivent login.submit et auth.button.send pour le même bouton. Sans clés, il n'y a pas de décision à prendre.
Un seul fichier à éditer, pas vingt
Une modification avec clé affecte le composant et chaque fichier JSON de localisation, et les agents oublient les fichiers. Ici, une modification de copie est une édition d'un seul fichier.
Zéro conflit de fusion dans les flottes d'agents
Cinq agents sur cinq branches modifient tous en.json : un conflit garanti. Il n'y a pas de fichier partagé, donc les worktrees et les agents en arrière-plan ne se heurtent jamais.
Bon marché en jetons
Pour réutiliser une clé, un agent doit charger les fichiers de locale dans le contexte à chaque édition. Les chargements sans clé ne font rien : le texte est directement dans le composant.
Différences lisibles
La demande de pull request affiche des phrases réelles. Un humain ou un agent de révision peut évaluer la copie sans avoir à creuser pour savoir ce qu'une clé représente.
Une règle dans votre CLAUDE.md
Chaque règle d’internationalisation que vous écrivez est une règle que l’agent peut enfreindre. Celle-ci n’a besoin que d’une seule ligne — et la solution de repli est le texte réel, donc une erreur ne peut pas afficher a.b.c à l’écran.
La seule règle d'i18n dont votre agent a besoin
# CLAUDE.md Write the UI copy in English and wrap it in <T>…</T> from i18n-keyless-react. That is the whole i18n setup.
Votre agent peut l'utiliser, pas seulement l'écrire
Via le serveur MCP, l'agent liste les traductions manquantes, en lit une, remplace une mauvaise ou importe la copie que vous avez déjà — avec sa propre connexion OAuth, sans clé à coller.
Lisez le guide MCPLancez à l'échelle mondiale dès le premier jour
Arrêtez de retarder l'internationalisation (i18n) à cause de sa complexité. Implémentez-la en 5 minutes, pas en jours. Maintenez votre vitesse de développement comme si l'internationalisation n'avait pas été implémentée.
- Implémentation en 5 minutes. Je ne blague pas.
Un simple objet de configuration et vous avez terminé.
- Maintenez la vitesse de développement
Codez comme si l'i18n n'était pas du tout implémenté.
- Expédier vers les marchés mondiaux
Aucune refactorisation nécessaire lors du passage à de nouvelles langues.
- SSR et SEO prêts
Fonctionne avec Next.js, Remix, TanStack Start et Astro. Rendu côté serveur dans n'importe quelle langue pour les moteurs de recherche — même configuration en 5 minutes.
Traditionnel i18n
i18n-sans-clé
C'est évident à configurer
Il suffit de l'objet de configuration le plus simple et vous êtes prêt à conquérir le monde.
Et même plus, votre agent le configurera pour vous.
1. Configuration de base
import * as I18nKeyless from "i18n-keyless-react";
I18nKeyless.init({
API_KEY: "YOUR_API_KEY",
storage: window.localStorage,
languages: {
primary: "en",
supported: ["en", "fr"],
},
});2. Utilisation du composant (React ici ; la même chose dans Vue, Angular, Flutter, Swift et 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. Utilisation côté serveur (ici Node.js ; le même appel dans Laravel, Rails, Python et 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. Pour le texte à l'extérieur des composants
import { getTranslation } from "i18n-keyless-react";
export default function Navigation() {
return (
<HomeTabs.Navigator>
<HomeTabs.Screen
options={{ tabBarLabel: getTranslation("Welcome") }}
name="WELCOME"
/>
</HomeTabs.Navigator>
);
}5. Choisissez votre SDK : une seule ligne d'installation, la même API partout
- 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
Comment fonctionnent les traductions
i18n-keyless est une bibliothèque, combinée à un service API, qui vous permet de traduire votre texte sans avoir besoin d'utiliser des clés.
Si la traduction n'est pas trouvée, une récupération asynchrone sera effectuée auprès de l'API d'I18nKeyless pour obtenir la traduction via un appel API d'IA.
Cette opération est généralement effectuée en mode développement, pendant que vous codez. Si vous en ratez une, en production, seul le premier utilisateur qui manque de traduction verra un bogue, puis il sera immédiatement disponible pour les utilisateurs du monde entier.
Votre fiche de magasin dans toutes les langues, à chaque sortie
Chaque mise à jour signifie de nouvelles notes de version, une description et des mots-clés — pour chaque langue, sur les deux boutiques. C'est ce qui t'empêche d'ajouter des langues. Pas l'application.
- Notes de version pour chaque langue, en un seul appel
Écrivez la mise à jour une fois. awaitForTranslation la renvoie dans chaque langue dans laquelle vous vendez, et la configuration de votre boutique l'alimente vers EAS ou fastlane.
- 48 langues, mappées aux emplacements de l'App Store
pt-BR et pt-PT sont deux listes ; en-GB, en-AU et en-CA en sont trois. toAppStoreLocale place chaque traduction au bon endroit.
- Corrigez une mauvaise traduction sans version
Dans l'application, un override dans le tableau de bord est actif à la fois — pas de build de correctif à chaud, pas d'évaluation du magasin. Dans la liste, relancez le push.
- Non tarifé par mot
Un traducteur charge environ 0,10 $ par mot. 2 000 chaînes multipliées par 10 langues représentent un budget qu'un développeur solo ne peut pas se permettre. Ici, les mots ne sont pas comptés.
La recette complète pour une application 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 } };
};Le même appel écrit les fichiers de métadonnées fastlane pour Google Play. Les majuscules sont indicatives : fixez la limite dans le contexte et vérifiez la longueur avant de pousser.
Bac à sable interactif
Voyez comment i18n-keyless fonctionne en temps réel
Ouvrez un projet StackBlitz en direct et modifiable pour voir les traductions se résoudre au fur et à mesure que vous tapez.
Pourquoi j'ai construit ça
J’ai toujours repoussé l’internationalisation jusqu’à ce que mon client en ait tellement besoin que j’avais pas le choix. J’aime pas lire du code avec des clés d’internationalisation dedans, et j’aime pas plus maintenir des fichiers JSON que de voir à quel point les fournisseurs de traduction i18n sont chers. Alors j’ai dû créer mon propre système, et J’ADORE ÇA. Toutes mes applications sont maintenant internationalisées par défaut.
Arnaud Ambroselli
Fondateur de i18n-keyless
Vous voulez ajouter le vôtre ?
Un témoignage contre un abonnement gratuit. Demandez le vôtre !
Envoyez mon témoignageQuestions fréquentes
Dois-je gérer les fichiers de traduction ?
Non. Il n'y a pas de fichiers JSON, pas d'étape d'extraction de clés, ni de plugin de compilation. Vous écrivez vos phrases dans votre langue source, le SDK les envoie à l'API lors de la première requête, l'API les traduit avec l'IA, et chaque requête ultérieure est servie depuis le cache. Votre code est la seule source de vérité.
Que se passe-t-il lorsque je modifie le texte source ?
Le texte source est la clé. Si vous le modifiez, vous obtiendrez une nouvelle clé avec une nouvelle traduction par IA. L'ancienne clé n'est tout simplement plus demandée, et le tableau de bord la nettoie après 30 jours de non-utilisation. Corriger une faute de frappe fonctionne de la même manière : corrigez-la dans le code, déployez, et le nouveau texte sera traduit dès la première requête.
Combien ça coûte?
Auto-hébergé : entièrement gratuit, projets illimités, sans abonnement et sans limite d'utilisation — installez l'image Docker, utilisez votre propre clé AI. Ça vous plaît ? Offrez-moi un café ! Hébergé : un prix fixe par projet et par mois, selon les utilisateurs actifs mensuels — 4 $ jusqu'à 1 000, 9 $ jusqu'à 5 000, 29 $ jusqu'à 50 000, 99 $ jusqu'à 500 000 — facturé mensuellement, annulable en tout temps. Aucun tarif à l'utilisateur, au mot ou à la chaîne dans les deux cas.
Puis-je exporter mes traductions ?
Oui. Le tableau de bord a un bouton « Exporter JSON » qui télécharge toutes les traductions de votre projet en un seul fichier JSON. L'exportation inclut toutes les lignes, pas seulement celles utilisées au cours des 30 derniers jours, donc c'est une sauvegarde complète. Il n'y a pas de verrouillage : vos données sont toujours à un clic.
Un mainteneur : que se passe-t-il si le projet s'arrête ?
Les SDK sont sous licence MIT et restent disponibles sur npm, PyPI, RubyGems et les autres registres. Le serveur est public sous la licence Elastic 2.0 et le protocole entre eux est documenté, donc n'importe qui peut l'exécuter, le forker ou écrire un serveur contre lui. Vos traductions restent dans une seule exportation JSON en tout temps. Si le service hébergé cesse de fonctionner : les applications installées continuent de servir leurs traductions en cache, un nouveau client revient à la langue source, et en pointant le SDK vers votre propre instance avec API_URL, tout est restauré. Ce que vous perdriez, c'est la traduction par IA des nouvelles chaînes sur i18n-keyless.com — pas vos données ni votre application.
Lisez la réponse complète, avec le codeRegardez la démonstration
Regardez cette courte vidéo pour voir i18n-keyless en action