Internacionalização (i18n) sem dores, expandida aos seus próprios horizontes sem gastar milhares de dólares.
Totalmente gratuito. Projetos ilimitados, todos os 48 idiomas, sem validade, nenhuma chave de licença necessária.
Projetos ilimitados. Todos os 48 idiomas. Sem validade.
- Todos os 48 idiomas, traduções ilimitadas
- O painel de controle, o servidor MCP, cada SDK
- Nada a comprar, nada a inserir exceto a sua chave de IA
O i18n agora é simples, você pode experimentá-lo. Não me importo de receber gorjeta por isso.
- Quando o sentes
- Se te apetecer
- De 1 a 1 milhão de dólares, não mais
Pagamento seguro pela Stripe. Uma chave de licença chega à sua caixa de entrada — ela silencia o prompt de doação no painel.
O que você obtém
- Projetos ilimitados, todos os 48 idiomas, sem validade
- Traduções ilimitadas, sem limite de uso
- O painel, o servidor MCP para os seus agentes, cada SDK
- Um contentor, um ficheiro SQLite para fazer backup
- Uma licença verificada offline: o seu servidor nunca liga para casa
- Cada atualização, para a vida: docker compose pull
O que trazes
- Uma máquina com Docker: um VPS de 4 € é suficiente
- Uma chave de API de IA (Mistral, OpenAI, Anthropic, Google ou qualquer fornecedor compatível com OpenAI). As traduções são executadas na sua própria conta, por alguns cêntimos por aplicação
- Cinco minutos
O suporte é feito por e-mail, com o melhor esforço possível. Precisa de alguém disponível? Os planos hospedados são para você.
Como funciona
Instale, crie o administrador, cole sua chave de IA. Cada projeto é gratuito, para sempre.
Com ONCE — um servidor novo, um domínio, cinco minutos
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
Com o Docker Compose — qualquer máquina que execute o 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
Em seguida, aponte o seu SDK para o seu servidor:
I18nKeyless.init({
API_KEY: "your-project-key",
API_URL: "https://i18n.example.com",
// …
});O guia completo: https://docs.i18n-keyless.com/docs/guides/self-hosting
Por que uma doação?
Porque você mesmo gere o VPS e a chave da API de IA. Não há razão para eu cobrar uma assinatura de você. Eu também odeio assinaturas. Então, em vez disso: você decide quanto vale o software para você, e eu continuo a desenvolvê-lo.
A imagem é instalada gratuitamente e executa projetos ilimitados, em todos os idiomas e sem validade.
Perguntas antes de comprar? Escreva-nos
Configurar i18n, manter seu código limpo e enviar rapidamente
Vários PITA existem com as soluções atuais de i18n. As dores são tão grandes que você adia o i18n o máximo possível.
Consome o tempo que você deveria passar na praia
Configurar o sistema de chaves: pelo menos 1 hora de tempo de desenvolvimento sênior
Ida e volta para cada nova chave: 1 minuto por chave, x500 chaves, x2 idiomas = 17 horas
Com o i18n-keyless, você não se preocupa com o sistema de i18n. Você pode ir à praia e pedir um mojito.
Hoje, a maioria dos sistemas usa chaves para traduzir o texto
Isso dói gerar. Isso dói manter.
Quando você vê um texto no aplicativo e quer atualizá-lo, você precisa encontrar a chave correspondente.
Com i18n-keyless, você não se preocupa com o sistema de i18n. Use seu cérebro para algo mais interessante.
Deixe as traduções para a IA
Com o sistema de chave, você precisa gerenciar as traduções no aplicativo.
Caso contrário, seus usuários verão someheader.welcome.title em seu aplicativo.
Com o i18n-keyless, no pior cenário offline, você vê palavras reais não traduzidas. Em um ritmo normal, você não se importa nem um pouco com o sistema i18n. Basta escrever bons títulos, focar no marketing e obter vendas.
As bases de código são bonitas... até a infecção das chaves i18n
Com o sistema de chaves, quando você lê o código e o conteúdo, você tem que ler as chaves, não o idioma natural.
Às vezes você deve fazer um ajuste porque uma frase não está gramaticalmente correta. Mas você não sabe disso porque você lê as chaves.
Com i18n-keyless, você não se preocupa com o sistema i18n. A base de código fica bonita.
Servidor MCP para cobrir todas as suas necessidades de internacionalização
Mais seis razões pelas quais o sistema está tão otimizado para codificação agentiva.
Nenhum nome para inventar
Uma chave é uma decisão de nomeação sem resposta correta. Dois agentes escrevem login.submit e auth.button.send para o mesmo botão. Sem chaves, não há decisão a tomar.
Um ficheiro para editar, não vinte
Uma alteração baseada em chave afeta o componente e cada ficheiro JSON de localização, e os agentes esquecem-se dos ficheiros. Aqui, uma alteração de cópia é uma edição de um único ficheiro.
Zero conflitos de mesclagem em frotas de agentes
Cinco agentes em cinco ramos editam todos o en.json: um conflito garantido. Não há ficheiro partilhado, por isso os worktrees e os agentes em segundo plano nunca colidem.
Barato em tokens
Para reutilizar uma chave, um agente deve carregar os arquivos de localização no contexto a cada edição. Os carregamentos sem chave não fazem nada: o texto está bem ali no componente.
Diferenças legíveis
O pedido de pull request mostra frases reais. Um humano ou um agente de revisão pode julgar a cópia sem precisar investigar o que uma chave representa.
Uma regra no seu CLAUDE.md
Toda regra de i18n que você escreve é uma regra que o agente pode quebrar. Esta regra precisa de apenas uma linha — e a alternativa é o texto real, então um erro não mostrará a.b.c na tela.
A única regra de i18n de que o seu agente precisa
# CLAUDE.md Write the UI copy in English and wrap it in <T>…</T> from i18n-keyless-react. That is the whole i18n setup.
O seu agente pode operá-lo, não apenas escrevê-lo
Através do servidor MCP, o agente lista as traduções em falta, lê uma, substitui uma má ou importa a cópia que já tens — com o seu próprio login OAuth, sem necessidade de colar uma chave.
Leia o guia do MCPLançamento global desde o primeiro dia
Pare de adiar a i18n por causa da complexidade. Implemente em 5 minutos, não em dias. Mantenha sua velocidade de desenvolvimento como se a i18n não estivesse implementada.
- Implementação em 5 minutos. Não estou brincando.
Um simples objeto de configuração e pronto.
- Manter a velocidade de desenvolvimento
Código como se a i18n não estivesse implementada de forma alguma.
- Envio para mercados globais
Não é necessária nenhuma refatoração ao escalar para novos idiomas.
- Pronto para SSR & SEO
Funciona com Next.js, Remix, TanStack Start e Astro. Renderização do lado do servidor em qualquer idioma para mecanismos de busca — mesma configuração em 5 minutos.
Tradicional i18n
i18n-keyless
É muito fácil de configurar
Apenas o objeto de configuração mais simples e você está pronto para ir global.
E ainda mais, o seu agente irá configurá-lo para si.
1. Configuração 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. Uso do Componente (Aqui React; o mesmo em 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. Uso no lado do servidor (aqui Node.js; a mesma chamada no 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. Para o texto fora dos componentes
import { getTranslation } from "i18n-keyless-react";
export default function Navigation() {
return (
<HomeTabs.Navigator>
<HomeTabs.Screen
options={{ tabBarLabel: getTranslation("Welcome") }}
name="WELCOME"
/>
</HomeTabs.Navigator>
);
}5. Escolha o seu SDK: uma linha de instalação, a mesma API em todo o lado
- 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
Como funcionam as traduções
i18n-keyless é uma biblioteca, combinada com um serviço de API, que permite traduzir seu texto sem a necessidade de usar chaves.
Se a tradução não for encontrada, haverá uma busca assíncrona para a API do I18nKeyless para obter a tradução por uma chamada de API de IA.
Esta operação é feita geralmente no modo de desenvolvimento, enquanto você está codificando. Se você perdeu uma, em produção apenas o primeiro usuário que falta a tradução verá um glitch, depois estará disponível instantaneamente para os usuários em todo o mundo.
A sua listagem da loja em todos os idiomas, em cada lançamento
Cada atualização significa novas notas de lançamento, uma descrição e palavras-chave — para cada idioma, em ambas as lojas. É isso que o impede de adicionar idiomas. Não o aplicativo.
- Notas de lançamento para cada idioma, em uma chamada
Escreva a atualização uma vez. awaitForTranslation retorna-a em cada idioma que vende e a configuração da sua loja alimenta-o para o EAS ou fastlane.
- 48 idiomas, mapeados para os slots da App Store
pt-BR e pt-PT são duas listas; en-GB, en-AU e en-CA são três. toAppStoreLocale coloca cada tradução no lugar certo.
- Corrija uma tradução ruim sem um lançamento
No aplicativo, uma substituição no painel de controle está ativa de uma vez — sem build de hotfix, sem revisão da loja. Na lista, execute novamente o push.
- Não tem preço por palavra
Um tradutor cobra cerca de €0,10 por palavra. 2.000 cadeias multiplicadas por 10 idiomas é um orçamento que um desenvolvedor solo não tem. Aqui as palavras não são contadas.
A receita completa para um aplicativo 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 } };
};A mesma chamada escreve ficheiros de metadados do fastlane para o Google Play. As maiúsculas são apenas indicativas: coloque o limite no contexto e verifique o comprimento antes de enviar.
Caixa de areia interativa
Veja como o i18n-keyless funciona em tempo real
Abra um projeto StackBlitz ao vivo e editável para ver as traduções se resolverem enquanto você digita.
Por que eu construí isso
Eu sempre adiei a internacionalização até que o meu cliente a quisesse tanto que não tive escolha. Odeio ler código com chaves de internacionalização dentro, e odeio manter ficheiros JSON tanto quanto ver o quão caros são os fornecedores de traduções de internacionalização. Por isso tive de criar o meu próprio, e EU AMO-O. Todos os meus apps estão internacionalizados por defeito agora.
Arnaud Ambroselli
Fundador do i18n-keyless
Quer adicionar o seu?
Um testemunho contra uma assinatura gratuita. Peça a sua!
Envie o meu testemunhoPerguntas frequentes
Preciso de gerir ficheiros de tradução?
Não. Não existem ficheiros JSON, nem etapa de extração de chaves, nem plugin de compilação. Escreve as tuas frases na tua língua de origem, o SDK envia-as para a API no primeiro pedido, a API traduz com IA, e cada pedido subsequente é servido a partir da cache. O teu código é a única fonte de verdade.
O que acontece quando mudo o texto de origem?
O texto de origem é a chave. Ao mudá-lo, obterá uma nova chave com uma tradução de IA fresca. A chave antiga simplesmente deixa de ser solicitada e o painel de controlo limpa-a após 30 dias sem utilização. Corrigir um erro de digitação é igual: corrija-o no código, implemente e o novo texto será traduzido no primeiro pedido.
Quanto custa?
Auto-hospedado: completamente gratuito, projetos ilimitados, sem assinatura e sem limite de uso — instale a imagem Docker, use sua própria chave de IA. Gostou? Me dê uma gorjeta! Hospedado: um preço fixo por projeto por mês, com base em usuários ativos mensalmente — €4 até 1.000, €9 até 5.000, €29 até 50.000, €99 até 500.000 — cobrado mensalmente, cancelável a qualquer momento. Não há precificação por assento, por palavra ou por string em nenhum dos casos.
Posso exportar as minhas traduções?
Sim. O painel de controlo tem um botão "Exportar JSON" que baixa todas as traduções do seu projeto como um único ficheiro JSON. A exportação inclui todas as linhas, não apenas as usadas nos últimos 30 dias, por isso é um backup completo. Não há qualquer bloqueio: os seus dados estão sempre a um clique de distância.
Um mantenedor: o que acontece se o projeto parar?
Os SDKs estão sob licença MIT e permanecem disponíveis no npm, PyPI, RubyGems e outros registros. O servidor é público sob a Elastic License 2.0 e o protocolo entre eles está documentado, então qualquer pessoa pode executá-lo, fazer um fork ou escrever um servidor contra ele. Suas traduções permanecem em um único export JSON a qualquer momento. Se o serviço hospedado parar: os aplicativos instalados continuam servindo suas traduções em cache, um novo cliente retorna ao idioma de origem, e apontar o SDK para sua própria instância com API_URL restaura tudo. O que você perderia é a tradução por IA de novas strings no i18n-keyless.com — não seus dados nem seu aplicativo.
Leia a resposta completa, com o códigoAssista à demonstração
Assista a este vídeo curto para ver o i18n-keyless em ação