Konwerter i18n
Konwertuj między ponad 32 formatami plików i18n: Android XML, iOS Strings, XLIFF, PO, JSON, YAML i innymi. Bezstratnie, gdy to możliwe, a w przeciwnym razie z jasnymi ostrzeżeniami o utracie danych.
Problem
Każda platforma posługuje się innym formatem tłumaczeń. Android używa strings.xml, iOS plików .strings i .stringsdict, a aplikacje internetowe JSON lub YAML. Tłumacze i platformy TMS oczekują XLIFF albo PO. Gdy trzeba udostępniać ciągi między platformami, kończy się na kopiowaniu między formatami, pisaniu jednorazowych skryptów lub ręcznej zmianie struktury plików. To żmudne, podatne na błędy i przestaje działać po pojawieniu się każdego nowego formatu.
Rozwiązanie
i18n-convert to jedno narzędzie CLI, które konwertuje między ponad 32 formatami plików i18n. Automatycznie wykrywa format wejściowy, zachowuje możliwie najwięcej struktury i ostrzega, gdy konwersja spowodowałaby utratę danych, na przykład form liczby mnogiej w 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 jsonAutomatyczne wykrywanie
Format wejściowy jest wykrywany automatycznie na podstawie rozszerzenia i zawartości pliku. Flagi nie są potrzebne.
Bezstratnie, gdy to możliwe
Metadane, komentarze i formy liczby mnogiej są zachowywane, jeśli format docelowy je obsługuje.
Ostrzeżenia o utracie danych
Jeśli konwersja spowodowałaby utratę informacji, przed zapisaniem jakiegokolwiek pliku otrzymasz wyraźne ostrzeżenia.
Instalacja
Zainstaluj przez npm, aby uzyskać najprostszą konfigurację, przez Homebrew w macOS albo zbuduj ze źródeł za pomocą Cargo.
npm install -g @i18n-agent/i18n-convertTypowe konwersje
Większość zespołów regularnie potrzebuje kilku konwersji: JSON na Android XML dla aplikacji mobilnej, PO na JSON dla aplikacji internetowej oraz XLIFF w obie strony przy przekazywaniu plików tłumaczom. Oto kilka typowych wzorców.
# 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/Obsługiwane formaty
i18n-convert obsługuje ponad 32 formaty z kategorii aplikacji mobilnych, internetu, standardów lokalizacyjnych i wymiany danych.
Aplikacje mobilne
| 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 |
Internet
| 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 |
Standardy lokalizacyjne
| 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 |
Wymiana danych
| Format | Extension | Flag |
|---|---|---|
| CSV | .csv | --to csv |
| TSV | .tsv | --to tsv |
| Excel | .xlsx | --to xlsx |
Ostrzeżenia o utracie danych
Nie wszystkie formaty są równoważne. XLIFF obsługuje notatki, kontekst i formy liczby mnogiej, a CSV nie obsługuje żadnego z tych elementów. Podczas konwersji z bogatego formatu do prostszego i18n-convert dokładnie informuje, co zostanie utracone.
$ 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-runIntegracja z CI
Zautomatyzuj synchronizację formatów w pipeline CI/CD. Po zmianie źródłowego pliku tłumaczeń automatycznie wygeneruj ponownie wszystkie formaty pochodne, aby pliki mobilne, internetowe i przeznaczone dla tłumaczy pozostawały zsynchronizowane.
# .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 pushPrzetłumacz również:
Wypróbuj i18n Agent
Upuść tutaj plik tłumaczenia
JSON, YAML, PO, XML, CSV, Markdown, Properties
lub kliknij, aby go wybrać
Języki docelowe