Skip to main content

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.

Chỉ một dự án di động kết hợp web cũng có thể dễ dàng dùng hơn 5 định dạng tệp bản dịch khác nhau. Đồng bộ chúng theo cách thủ công là cuộc chiến không thể thắng.

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).

Terminal
# 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 json

Tự độ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.

Terminal
npm install -g @i18n-agent/i18n-convert
Gói npm chứa sẵn tệp nhị phân đã biên dịch cho macOS, Linux và Windows. Bạn không cần bộ công cụ Rust.

Phé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.

Batch conversion
# 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

FormatExtensionFlag
Android XML.xml--to android-xml
iOS Strings.strings--to ios-strings
iOS Stringsdict.stringsdict--to ios-stringsdict
Flutter ARB.arb--to arb

Web

FormatExtensionFlag
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

FormatExtensionFlag
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

FormatExtensionFlag
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.

Terminal
$ 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-run
Luôn dùng --dry-run trước khi chuyển sang định dạng đơn giản hơn trong môi trường production. Lệnh này hiển thị mọi cảnh báo mà không ghi tệp nào.

Tí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
# .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 push
Kết hợp i18n-convert với i18n-validate trong pipeline CI. Trước tiên hãy chuyển đổi định dạng, sau đó xác thực để bảo đảm mọi tệp đích đều đầy đủ và đúng cấu trúc.

Dù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

Không cần đăng kýBáo giá tức thì

Câu hỏi thường gặp