Conversor de i18n
Converta entre mais de 32 formatos de i18n: XML do Android, Strings do iOS, XLIFF, PO, JSON, YAML e outros. Sem perdas quando possível e com avisos claros quando houver perda de dados.
O problema
Cada plataforma utiliza um formato de tradução diferente. O Android utiliza strings.xml; o iOS, .strings e .stringsdict; as aplicações Web, JSON ou YAML; os tradutores e TMS pretendem XLIFF ou PO. Para compartilhar strings entre plataformas, acaba copiando e colando entre formatos, escrevendo scripts descartáveis ou reestruturando arquivos manualmente. É demorado, propenso a erros e quebra sempre que aparece um novo formato.
A solução
i18n-convert é uma única ferramenta de CLI que converte entre mais de 32 formatos de i18n. Detecta automaticamente a entrada, preserva o máximo possível da estrutura e avisa quando uma conversão perderia dados —por exemplo, plurais em CSV—.
# Auto-detect input format, convert to Android XML
i18n-convert en.json --to android-xml -o strings.xml
# iOS Strings to Gettext PO
i18n-convert Localizable.strings --to po -o messages.po
# XLIFF to Rails YAML
i18n-convert translations.xliff --to yaml-rails -o en.yml
# Pipe to stdout
i18n-convert messages.po --to jsonDetecção automática
O formato de entrada é detectado automaticamente pela extensão e pelo conteúdo. Não precisa de sinalizadores.
Sem perdas quando possível
Os metadados, comentários e formas plurais são preservados quando o formato de destino os aceita.
Avisos de perda de dados
Se uma conversão puder perder informação, recebe avisos explícitos antes de ser gravado qualquer arquivo.
Instalação
Instale através de npm para uma configuração simples, Homebrew no macOS ou compile a partir do código-fonte com Cargo.
npm install -g @i18n-agent/i18n-convertConversões habituais
A maioria das equipes repete algumas conversões: JSON para XML do Android em dispositivos móveis, PO para JSON na Web e viagens de ida e volta por XLIFF para entregar conteúdo aos tradutores. Eis alguns padrões frequentes.
# Convert all PO files to JSON
for f in locales/*.po; do
i18n-convert "$f" --to json -o "${f%.po}.json"
done
# Convert entire directory
i18n-convert locales/ --to json --out-dir locales-json/Formatos compatíveis
i18n-convert é compatível com mais de 32 formatos nas categorias de dispositivos móveis, Web, normas de localização e intercâmbio de dados.
Dispositivos móveis
| Format | Extension | Flag |
|---|---|---|
| Android XML | .xml | --to android-xml |
| iOS Strings | .strings | --to ios-strings |
| iOS Stringsdict | .stringsdict | --to ios-stringsdict |
| Flutter ARB | .arb | --to arb |
Web
| Format | Extension | Flag |
|---|---|---|
| JSON (flat) | .json | --to json |
| JSON (nested) | .json | --to json-nested |
| YAML | .yml | --to yaml |
| YAML (Rails) | .yml | --to yaml-rails |
| Properties | .properties | --to properties |
Normas de localização
| Format | Extension | Flag |
|---|---|---|
| XLIFF 1.2 | .xlf | --to xliff |
| XLIFF 2.0 | .xlf | --to xliff-2 |
| Gettext PO | .po | --to po |
| Gettext POT | .pot | --to pot |
| TMX | .tmx | --to tmx |
| TBX | .tbx | --to tbx |
Intercâmbio de dados
| Format | Extension | Flag |
|---|---|---|
| CSV | .csv | --to csv |
| TSV | .tsv | --to tsv |
| Excel | .xlsx | --to xlsx |
Avisos de perda de dados
Nem todos os formatos são iguais. O XLIFF aceita notas, contextos e formas plurais; o CSV não aceita nenhum destes elementos. Quando converte um formato rico em um mais simples, i18n-convert indica exatamente aquilo que será perdido.
$ i18n-convert plurals.po --to csv
Data loss warnings:
[ERROR] 3 entries use plurals (not supported by CSV)
Proceed? [y/N]
# Skip prompts
i18n-convert plurals.po --to csv --force
# Preview warnings without writing
i18n-convert plurals.po --to csv --dry-runIntegração com CI
Automatize a sincronização de formatos no pipeline de CI/CD. Quando o arquivo de tradução de origem mudar, volte a gerar automaticamente todos os formatos derivados para manter sincronizados os arquivos de dispositivos móveis, Web e tradutores.
# .github/workflows/format-sync.yml
name: Sync Translation Formats
on:
push:
branches: [main]
paths: ['locales/en.json']
jobs:
sync-formats:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v4
- name: Install i18n-convert
run: npm install -g @i18n-agent/i18n-convert
- name: Convert JSON to Android XML
run: i18n-convert locales/en.json --to android-xml -o android/res/values/strings.xml
- name: Convert JSON to iOS Strings
run: i18n-convert locales/en.json --to ios-strings -o ios/en.lproj/Localizable.strings
- name: Commit synced formats
run: |
git config user.name "github-actions"
git config user.email "[email protected]"
git add android/ ios/
git diff --cached --quiet || git commit -m "chore: sync translation formats"
git pushTambém pode traduzir:
Experimente já o i18n Agent
Solte aqui seu arquivo de tradução
JSON, YAML, PO, XML, CSV, Markdown, Properties
ou clique para selecionar
Idiomas de destino