Traduza um arquivo JSON i18n com todas as chaves, placeholders e plurais intactos
Envie o en.json (ou vários arquivos de namespace) e receba o es.json de volta com as mesmas chaves aninhadas, na mesma ordem e com a mesma indentação. Só os valores são traduzidos, e todo {name}, {{count}} e plural ICU é verificado em cada string. As primeiras strings são grátis, sem cadastro; a tarefa inteira, com até 5,000 strings, custa $5, em pagamento único.
- Chaves e aninhamento nunca são traduzidos; arrays, números e booleanos ficam como estão
- Placeholders verificados: {name}, {{count}}, %s, :attribute, $t(key), @:key
- Plurais ICU mantêm a estrutura e recebem as categorias de que o idioma de destino precisa
- ARB do Flutter: @metadata mantido e usado como contexto, @@locale atualizado
- Arquivo nomeado conforme o idioma: en.json vira es.json, app_en.arb vira app_es.arb
{
"home.greeting": "Good morning, {name}Buenos días, {name}",
"home.nearby": "{count, plural, =0 {No trails near you yet} one {# trail near you} other {# trails near you}}{count, plural, =0 {Aún no hay rutas cerca de ti} one {# ruta cerca de ti} other {# rutas cerca de ti}}",
"trail.offline_done": "<b>{name}</b> is saved on this phone. You can use the map without a signal.<b>{name}</b> está guardado en este teléfono. Puedes usar el mapa sin señal.",
"trail.share_text": "I just finished {trail} with Trailbook! {km} km and {meters} m up. 🥾¡Acabo de terminar {trail} con Trailbook! {km} km y {meters} m de subida. 🥾",
"saved.empty": "You have not saved any trails yet.\nTap the heart on a trail to keep it here.Aún no has guardado ninguna ruta.\nToca el corazón en una ruta para guardarla aquí."
}
Amarelo: placeholders e sintaxe de plural ICU, verificados em cada texto. Verde-azulado: tags, escapes e emojis, mantidos como estão.
Mesmas chaves. Mesmos placeholders. Novo idioma.
Só os valores mudam. O arquivo volta com o mesmo aninhamento e a mesma ordem, com o nome es.json, e qualquer texto que perca um placeholder é refeito antes de chegar ao seu build.
App de demonstração criado para esta página; os textos em espanhol são resultado real da ferramenta, a partir de um arquivo de 85 textos.
O que é traduzido e o que não é
Cada valor de texto é enviado para tradução com a chave completa como contexto, então "settings.save" e "cart.save" podem voltar com palavras diferentes. As chaves nunca são enviadas. Valores que não são texto, como uma URL, um endereço de e-mail ou um valor formado só por placeholders como "{count}", ficam como estão.
As tags de rich text usadas pelo react-intl e bibliotecas semelhantes, como <b>{name}</b> ou <link>Undo</link>, são trocadas por marcadores antes da tradução e recolocadas depois. Sequências literais \n e emoji também precisam sobreviver; uma string que perde qualquer um deles é traduzida de novo, e se falhar pela segunda vez, o inglês permanece e a chave é listada para você.
Plurais
Uma mensagem ICU como {count, plural, one {# trail} other {# trails}} é traduzida como uma única string. O tradutor sabe quais categorias de plural o idioma de destino usa, por exemplo one, few, many e other para russo ou polonês, e o resultado é verificado para manter o nome da variável e a palavra-chave do plural. Arquivos i18next que usam chaves separadas, como trail_one e trail_other, são traduzidos chave por chave; chaves que faltam para o idioma de destino (trail_few, trail_many) não são adicionadas.
Como a ferramenta funciona, quanto custa e como seus arquivos são tratados está na página Tradutor de arquivos de localização; os preços de todas as ferramentas estão na página de preços.
Última atualização:
Perguntas e respostas
A saída vai manter minha formatação?
Sim. A indentação (dois espaços, quatro espaços ou tabs), a ordem das chaves, o espaço depois dos dois-pontos e a quebra de linha final são copiados do seu arquivo. Um arquivo minificado continua em uma única linha.
Posso enviar vários arquivos de namespace de uma vez?
Sim, até 20 arquivos em uma tarefa, como common.json, cart.json e errors.json. Eles são baixados juntos em um único ZIP.
E as strings que não devem ser traduzidas?
Liste nomes de produtos e marcas em "Nunca traduzir"; cada string que contém um deles é verificada para mantê-lo. Valores que são apenas uma URL, um endereço de e-mail ou placeholders são ignorados automaticamente.
Quanto custa?
As primeiras strings são grátis. A tarefa inteira, com até 5,000 strings, custa $5, em pagamento único. O Ilimitado cobre até 15,000 strings por tarefa. As tarefas pequenas são a exceção: uma tarefa de até 300 strings é grátis por inteiro, downloads incluídos.