Autonomo

Internazionalizzazione (i18n) indolore, ampliata ai tuoi orizzonti senza spendere migliaia di dollari.

Completamente gratuito. Progetti illimitati, tutte le 48 lingue, nessuna scadenza, nessuna chiave di licenza necessaria.

Gratis per sempre
€0per sempre

Progetti illimitati. Tutte le 48 lingue. Nessuna scadenza.

  • Tutte le 48 lingue, traduzioni illimitate
  • La dashboard, il server MCP, ogni SDK
  • Niente da comprare, niente da inserire tranne la tua chiave AI
Installalo gratuitamente
Dammi una mancia
Ti piace?

i18n ora è più complicato, puoi sperimentarlo. Non mi dispiace ricevere una mancia per questo.

  • Quando lo senti
  • Se ti va
  • Da 1 a 1 milione di dollari, non di più

Pagamento sicuro tramite Stripe. Una chiave di licenza arriva nella tua casella di posta — disattiva la richiesta di donazione nella dashboard.

Quello che ottieni

  • Progetti illimitati, tutte le 48 lingue, senza scadenza
  • Traduzioni illimitate, nessun limite di utilizzo
  • La dashboard, il server MCP per i tuoi agenti, ogni SDK
  • Un contenitore, un file SQLite da salvare
  • Una licenza controllata offline: il tuo server non chiama mai a casa
  • Ogni aggiornamento, per la vita: docker compose pull

Quello che porti

  • Una macchina con Docker: un VPS da 4 € è sufficiente
  • Una chiave API AI (Mistral, OpenAI, Anthropic, Google o qualsiasi provider compatibile con OpenAI). Le traduzioni vengono eseguite sul tuo account, per pochi centesimi per app
  • Cinque minuti

Il supporto avviene tramite email, con il massimo sforzo possibile. Hai bisogno di qualcuno reperibile? I piani hosted sono per te.

Come funziona

Installa, crea l'amministratore, incolla la tua chiave AI. Ogni progetto è gratuito, per sempre.

Con ONCE — un server nuovo, un dominio, cinque minuti

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

Con Docker Compose — qualsiasi macchina che esegue 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

Quindi punta il tuo SDK al tuo server:

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

La guida completa: https://docs.i18n-keyless.com/docs/guides/self-hosting

Perché una donazione?

Perché gestisci tu stesso il VPS e la chiave API dell'IA. Non c'è motivo per cui ti farei pagare un abbonamento. Io stesso odio gli abbonamenti. Quindi invece: tu decidi quanto vale il software per te, e io continuo a svilupparlo.

L'immagine si installa gratuitamente ed esegue progetti illimitati, con ogni lingua e senza scadenza.

Domande prima di acquistare? Scrivici

Configurare i18n, mantenere il codice pulito e spedire velocemente

Esistono molte PITA con le soluzioni attuali di i18n. I dolori sono così grandi che ritardi l'i18n il più possibile.

Consuma il tempo che dovresti trascorrere in spiaggia

Configurare il sistema delle chiavi: almeno 1 ora di tempo di sviluppo senior

Avanti e indietro per ogni nuova chiave: 1 minuto per chiave, x500 chiavi, x2 lingue = 17 ore

Con i18n-keyless, non ti preoccupi del sistema di i18n. Puoi andare in spiaggia e ordinare un mojito.

Oggi, la maggior parte dei sistemi utilizza chiavi per tradurre il testo

Fa male generare. Fa male mantenere.

Quando vedi un testo nell'app e vuoi aggiornarlo, devi trovare la chiave corrispondente.

Con i18n-keyless, non ti preoccupi del sistema di i18n. Usa il tuo cervello per qualcosa di più interessante.

Lasciare le traduzioni all'IA

Con il sistema di chiave, devi gestire le traduzioni nell'app.

Altrimenti i tuoi utenti vedranno someheader.welcome.title nella loro app.

Con i18n-keyless, nel peggiore scenario offline vedrai parole reali non tradotte. A un ritmo normale, non ti importa affatto del sistema i18n. Scrivi semplicemente bei titoli, concentrati sul marketing e ottieni vendite.

Le basi di codice sono belle... fino all'infezione delle chiavi i18n

Con il sistema di chiavi, quando leggi il codice e il contenuto, devi leggere le chiavi, non il linguaggio naturale.

A volte devi fare una correzione perché una frase non è grammaticalmente corretta. Ma non lo sai perché leggi le chiavi.

Con i18n-keyless, non ti preoccupi affatto del sistema i18n. Il codice rimane bello.

Aggiungi i18n fin dal primo giorno senza alcun impatto sul tuo ritmo di sviluppo
Costruito per agenti di codifica

Server MCP per coprire tutte le tue esigenze di internazionalizzazione

Altri sei motivi per cui il sistema è così ottimizzato per la programmazione agentica.

Nessun nome da inventare

Una chiave è una decisione di denominazione senza una risposta corretta. Due agenti scrivono login.submit e auth.button.send per lo stesso pulsante. Senza chiavi non c'è alcuna decisione da prendere.

Un file da modificare, non venti

Una modifica basata su chiave interessa il componente e ogni file JSON di localizzazione, e gli agenti dimenticano i file. Qui, una modifica di copia è un'edizione di un singolo file.

Zero conflitti di merge nelle flotte di agenti

Cinque agenti su cinque rami modificano tutti en.json: un conflitto garantito. Non esiste un file condiviso, quindi i worktrees e gli agenti in background non collidono mai.

Economico in token

Per riutilizzare una chiave, un agente deve caricare i file di localizzazione nel contesto a ogni modifica. I caricamenti senza chiave non fanno nulla: il testo è proprio lì nel componente.

Diff leggibili

La pull request mostra frasi reali. Un umano o un agente di revisione può giudicare la copia senza dover scavare per capire cosa rappresenta una chiave.

Una regola nel tuo CLAUDE.md

Ogni regola di i18n che scrivi è una regola che l'agente può violare. Questa regola richiede solo una riga — e il fallback è il testo reale, quindi un errore non mostrerà a.b.c sullo schermo.

L'unica regola i18n di cui il tuo agente ha bisogno

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

Il tuo agente può farlo funzionare, non solo scriverlo

Tramite il server MCP, l'agente elenca le traduzioni mancanti, ne legge una, sovrascrive una errata o importa la copia che già possiedi — con il proprio accesso OAuth, senza bisogno di incollare alcuna chiave.

Leggi la guida MCP
Perfetto per gli MVP

Lancio globale dal primo giorno

Smettila di ritardare l'i18n a causa della complessità. Implementa in 5 minuti, non in giorni. Mantieni la tua velocità di sviluppo come se l'i18n non fosse implementata.

  • Implementazione in 5 minuti. Non sto scherzando.

    Un semplice oggetto di configurazione e hai fatto.

  • Mantenere la velocità di sviluppo

    Codifica come se l'i18n non fosse implementato affatto.

  • Spedizione ai mercati globali

    Nessuna rifattorizzazione necessaria quando si scala a nuove lingue.

  • Pronto per SSR & SEO

    Funziona con Next.js, Remix, TanStack Start e Astro. Rendering lato server in qualsiasi lingua per i motori di ricerca — stessa configurazione in 5 minuti.

Tradizionale i18n

Configurazione del sistema di chiavi (1 ora)
Crea file di traduzione (2 ore)
Rifattorizzare i componenti (4 ore)
Testa tutte le lingue (2 ore)
Risolvere problemi di layout (3 ore)
12+ ore di lavoro

i18n-keyless

Aggiungi pacchetto (1 min)
Configurare con chiave API (2 min)
Avvolgere i componenti di testo (2 min)
5 minuti di lavoro
Come funziona

È un gioco da ragazzi da configurare

Solo il più semplice oggetto di configurazione e sei pronto per andare globale.
E ancora di più, il tuo agente lo imposterà per te.

1. Configurazione di 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. Utilizzo del componente (Qui React; lo stesso in Vue, Angular, Flutter, Swift e 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. Utilizzo lato server (qui Node.js; la stessa chiamata in Laravel, Rails, Python e 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 il testo al di fuori dei componenti

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

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

5. Scegli il tuo SDK: una riga di installazione, la stessa API ovunque

  • 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

Configurazione rapida per ciascuno dei dodici SDK

Come funzionano le traduzioni

i18n-keyless è una libreria, combinata con un servizio API, che ti permette di tradurre il tuo testo senza la necessità di utilizzare chiavi.

Se la traduzione non viene trovata, ci sarà un recupero asincrono all'API di I18nKeyless per ottenere la traduzione tramite una chiamata API di IA.

Questa operazione viene solitamente eseguita in modalità di sviluppo, mentre stai codificando. Se ne hai persa una, in produzione solo il primo utente che manca la traduzione vedrà un glitch, poi sarà disponibile istantaneamente per gli utenti di tutto il mondo.

App Store & Google Play

La tua lista del negozio in ogni lingua, ad ogni rilascio

Ogni aggiornamento significa nuove note di rilascio, una descrizione e parole chiave — per ogni lingua, su entrambi gli store. Questo è ciò che ti impedisce di aggiungere lingue. Non l'app.

  • Note di rilascio per ogni lingua, in una chiamata

    Scrivi l'aggiornamento una volta. awaitForTranslation lo restituisce in ogni lingua in cui vendi, e la configurazione del tuo store lo invia a EAS o fastlane.

  • 48 lingue, mappate agli slot dell'App Store

    pt-BR e pt-PT sono due elenchi; en-GB, en-AU e en-CA sono tre. toAppStoreLocale posiziona ogni traduzione nel posto giusto.

  • Correggi una traduzione scadente senza un rilascio

    Nell'app, un override nella dashboard è attivo una alla volta — nessun build di hotfix, nessuna recensione del negozio. Nell'elenco, riesegui il push.

  • Non quotato a parola

    Un traduttore applica circa €0,10 a parola. 2.000 string per 10 lingue rappresentano un budget che uno sviluppatore singolo non può permettersi. Qui le parole non vengono contate.

La ricetta completa per un'app 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 stessa chiamata scrive i file di metadati fastlane per Google Play. Le maiuscole sono consultive: imposta il limite nel contesto e controlla la lunghezza prima di fare push.

Prova tu stesso

Sandbox interattivo

Vedi come funziona i18n-keyless in tempo reale

Apri un progetto StackBlitz live e modificabile per vedere le traduzioni risolversi mentre digiti.

Perché ho costruito questo

Ho sempre rimandato l'internazionalizzazione finché il mio cliente non l'ha voluta così tanto da non lasciarmi scelta. Odio leggere codice con chiavi di internazionalizzazione dentro e odio altrettanto mantenere file JSON come vedere quanto siano cari i provider di traduzioni per l'internazionalizzazione. Quindi ho dovuto costruire il mio e LO ADORO. Tutte le mie app sono ora internazionalizzate di default.

AA

Arnaud Ambroselli

Fondatore di i18n-keyless

Vuoi aggiungere il tuo?

Una testimonianza contro un abbonamento gratuito. Richiedi il tuo!

Invia la mia testimonianza
Prima che tu chieda

Domande frequenti

Devo gestire i file di traduzione?

No. Non ci sono file JSON, non ci sono passaggi di estrazione delle chiavi e nessun plugin di build-time. Scrivi le tue frasi nella tua lingua di origine, l'SDK le invia all'API alla prima richiesta, l'API le traduce con l'IA e ogni richiesta successiva viene servita dalla cache. Il tuo codice è l'unica fonte di verità.

Cosa succede quando modifico il testo di origine?

Il testo di origine è la chiave. Cambiandolo otterrai una nuova chiave con una traduzione AI fresca. La chiave vecchia semplicemente smette di essere richiesta e la dashboard la rimuove dopo 30 giorni di inattività. Anche la correzione di un refuso funziona allo stesso modo: correggilo nel codice, distribuiscilo e il nuovo testo verrà tradotto alla prima richiesta.

Quanto costa?

Self-hosted: completamente gratuito, progetti illimitati, senza abbonamento e senza limiti d'uso — installa l'immagine Docker, usa la tua chiave AI. Ti piace? Lasciami un tip! Hosted: un prezzo fisso per progetto al mese, in base agli utenti attivi mensilmente — 4 € fino a 1.000, 9 € fino a 5.000, 29 € fino a 50.000, 99 € fino a 500.000 — addebitato mensilmente, annullabile in qualsiasi momento. Non c'è alcuna tariffazione per posto, per parola o per stringa in entrambi i casi.

Posso esportare le mie traduzioni?

Sì. La dashboard ha un pulsante "Esporta JSON" che scarica tutte le traduzioni del tuo progetto come un singolo file JSON. L'esportazione include tutte le righe, non solo quelle utilizzate negli ultimi 30 giorni, quindi è un backup completo. Non c'è alcun vincolo: i tuoi dati sono sempre a un clic di distanza.

Un maintainer: cosa succede se il progetto si ferma?

Gli SDK sono sotto licenza MIT e rimangono disponibili su npm, PyPI, RubyGems e altri registri. Il server è pubblico sotto la licenza Elastic 2.0 e il protocollo tra loro è documentato, quindi chiunque può eseguirlo, forkarlo o scrivere un server contro di esso. Le tue traduzioni rimangono in un'unica esportazione JSON in qualsiasi momento. Se il servizio ospitato si ferma: le app installate continuano a servire le loro traduzioni memorizzate nella cache, un nuovo client torna alla lingua di origine, e indirizzando l'SDK alla tua istanza con API_URL tutto viene ripristinato. Quello che perderesti è la traduzione AI di nuove stringhe su i18n-keyless.com — non i tuoi dati né la tua app.

Leggi la risposta completa, con il codice
Prova tu stesso

Guarda la demo

Guarda questo breve video per vedere i18n-keyless in azione