ตัวแปลง i18n
แปลงไฟล์ i18n มากกว่า 32 รูปแบบ ทั้ง Android XML, iOS Strings, XLIFF, PO, JSON, YAML และอื่นๆ โดยไม่สูญเสียข้อมูลเมื่อทำได้ พร้อมคำเตือนที่ชัดเจนเมื่อทำไม่ได้
ปัญหา
แต่ละแพลตฟอร์มใช้รูปแบบการแปลต่างกัน Android ใช้ strings.xml ส่วน iOS ใช้ .strings และ .stringsdict แอปเว็บใช้ JSON หรือ YAML ขณะที่นักแปลและแพลตฟอร์ม TMS ต้องการ XLIFF หรือ PO เมื่อต้องแชร์ข้อความระหว่างแพลตฟอร์ม คุณจึงต้องคัดลอกและวางระหว่างรูปแบบ เขียนสคริปต์เฉพาะกิจ หรือปรับโครงสร้างไฟล์ด้วยตนเอง งานนี้น่าเบื่อ เกิดข้อผิดพลาดง่าย และเสียหายทุกครั้งที่มีรูปแบบใหม่
วิธีแก้
i18n-convert เป็นเครื่องมือ CLI ตัวเดียวที่แปลงไฟล์ i18n มากกว่า 32 รูปแบบ โดยตรวจหารูปแบบอินพุตอัตโนมัติ รักษาโครงสร้างให้มากที่สุด และเตือนเมื่อการแปลงจะทำให้ข้อมูลสูญหาย เช่น พหูพจน์ใน 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 jsonการตรวจหาอัตโนมัติ
ระบบตรวจหารูปแบบอินพุตจากนามสกุลและเนื้อหาไฟล์โดยอัตโนมัติ ไม่ต้องใช้แฟล็ก
ไม่สูญเสียข้อมูลเมื่อทำได้
ระบบรักษาเมทาดาทา ความคิดเห็น และรูปพหูพจน์ไว้เมื่อรูปแบบเป้าหมายรองรับ
คำเตือนข้อมูลสูญหาย
เมื่อการแปลงจะทำให้ข้อมูลสูญหาย คุณจะได้รับคำเตือนอย่างชัดเจนก่อนเขียนไฟล์ใดๆ
การติดตั้ง
ติดตั้งผ่าน npm เพื่อการตั้งค่าที่ง่ายที่สุด ใช้ Homebrew บน macOS หรือบิลด์จากซอร์สด้วย Cargo
npm install -g @i18n-agent/i18n-convertการแปลงที่ใช้บ่อย
ทีมส่วนใหญ่ต้องใช้การแปลงไม่กี่ชนิดซ้ำๆ เช่น JSON เป็น Android XML สำหรับมือถือ PO เป็น JSON สำหรับเว็บ และ XLIFF ไปกลับสำหรับส่งมอบให้นักแปล ต่อไปนี้คือรูปแบบที่พบบ่อย
# 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/รูปแบบที่รองรับ
i18n-convert รองรับมากกว่า 32 รูปแบบ ครอบคลุมหมวดหมู่มือถือ เว็บ มาตรฐานโลคัลไลเซชัน และการแลกเปลี่ยนข้อมูล
มือถือ
| 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 |
เว็บ
| 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 |
มาตรฐานโลคัลไลเซชัน
| 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 |
การแลกเปลี่ยนข้อมูล
| Format | Extension | Flag |
|---|---|---|
| CSV | .csv | --to csv |
| TSV | .tsv | --to tsv |
| Excel | .xlsx | --to xlsx |
คำเตือนข้อมูลสูญหาย
แต่ละรูปแบบมีความสามารถไม่เท่ากัน XLIFF รองรับหมายเหตุ บริบท และรูปพหูพจน์ แต่ CSV ไม่รองรับสิ่งเหล่านี้ เมื่อแปลงจากรูปแบบที่มีข้อมูลสมบูรณ์เป็นรูปแบบที่เรียบง่ายกว่า i18n-convert จะบอกอย่างเจาะจงว่าสิ่งใดจะสูญหาย
$ 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การเชื่อมต่อ CI
ทำให้การซิงค์รูปแบบในไปป์ไลน์ CI/CD เป็นอัตโนมัติ เมื่อไฟล์แปลต้นฉบับเปลี่ยน ให้สร้างรูปแบบที่ได้มาทั้งหมดใหม่โดยอัตโนมัติ เพื่อให้ไฟล์มือถือ เว็บ และนักแปลซิงค์กัน
# .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แปลรายการต่อไปนี้ได้ด้วย :
ลองใช้ i18n Agent ตอนนี้
ลากและวางไฟล์แปลของคุณที่นี่
JSON, YAML, PO, XML, CSV, Markdown, Properties
หรือคลิกเพื่อเลือกไฟล์
ภาษาเป้าหมาย