Trình chuyển đổi i18n
Chuyển đổi giữa hơn 32 định dạng tệp i18n: Android XML, iOS Strings, XLIFF, PO, JSON, YAML và nhiều định dạng khác. Không làm mất dữ liệu khi có thể; nếu không, công cụ sẽ cảnh báo rõ nguy cơ mất dữ liệu.
Vấn đề
Mỗi nền tảng dùng một định dạng bản dịch khác nhau. Android dùng strings.xml. iOS dùng .strings và .stringsdict. Ứng dụng web dùng JSON hoặc YAML. Biên dịch viên và nền tảng TMS cần XLIFF hoặc PO. Khi cần chia sẻ chuỗi giữa các nền tảng, bạn phải sao chép và dán giữa các định dạng, viết script dùng một lần hoặc tự chỉnh lại cấu trúc tệp. Công việc này vừa tẻ nhạt, dễ sai sót vừa hỏng mỗi khi xuất hiện định dạng mới.
Giải pháp
i18n-convert là một công cụ CLI duy nhất có thể chuyển đổi giữa hơn 32 định dạng tệp i18n. Công cụ tự động phát hiện định dạng đầu vào, giữ lại cấu trúc nhiều nhất có thể và cảnh báo bạn khi phép chuyển đổi có thể làm mất dữ liệu (chẳng hạn dạng số nhiều trong 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 jsonTự động phát hiện
Công cụ tự động phát hiện định dạng đầu vào từ phần mở rộng và nội dung tệp. Bạn không cần dùng cờ.
Không mất dữ liệu khi có thể
Công cụ giữ nguyên siêu dữ liệu, chú thích và dạng số nhiều khi định dạng đích hỗ trợ.
Cảnh báo mất dữ liệu
Khi phép chuyển đổi có thể làm mất thông tin, bạn sẽ nhận được cảnh báo rõ ràng trước khi công cụ ghi bất kỳ tệp nào.
Cài đặt
Cài đặt qua npm để thiết lập dễ nhất, qua Homebrew trên macOS hoặc tự biên dịch từ mã nguồn bằng Cargo.
npm install -g @i18n-agent/i18n-convertPhép chuyển đổi phổ biến
Hầu hết nhóm thường xuyên cần một số phép chuyển đổi: JSON sang Android XML cho thiết bị di động, PO sang JSON cho web, chuyển đổi khứ hồi XLIFF để bàn giao cho biên dịch viên. Sau đây là một số mẫu phổ biến.
# 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/Định dạng được hỗ trợ
i18n-convert hỗ trợ hơn 32 định dạng thuộc các nhóm thiết bị di động, web, tiêu chuẩn bản địa hóa và trao đổi dữ liệu.
Di động
| 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 |
Tiêu chuẩn bản địa hóa
| 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 |
Trao đổi dữ liệu
| Format | Extension | Flag |
|---|---|---|
| CSV | .csv | --to csv |
| TSV | .tsv | --to tsv |
| Excel | .xlsx | --to xlsx |
Cảnh báo mất dữ liệu
Không phải định dạng nào cũng có khả năng biểu đạt như nhau. XLIFF hỗ trợ ghi chú, ngữ cảnh và dạng số nhiều, còn CSV không hỗ trợ các thành phần này. Khi bạn chuyển từ định dạng giàu thông tin sang định dạng đơn giản hơn, i18n-convert cho biết chính xác dữ liệu nào sẽ mất.
$ 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-runTích hợp CI
Tự động hóa việc đồng bộ định dạng trong pipeline CI/CD. Khi tệp bản dịch nguồn thay đổi, hãy tự động tạo lại mọi định dạng dẫn xuất để các tệp dành cho thiết bị di động, web và biên dịch viên luôn đồng bộ.
# .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 pushDùng thử i18n Agent ngay
Thả tệp bản dịch của bạn vào đây
JSON, YAML, PO, XML, CSV, Markdown, Properties
hoặc nhấp để duyệt
Ngôn ngữ đích