Skip to main content

ตัวแปลง i18n

แปลงไฟล์ i18n มากกว่า 32 รูปแบบ ทั้ง Android XML, iOS Strings, XLIFF, PO, JSON, YAML และอื่นๆ โดยไม่สูญเสียข้อมูลเมื่อทำได้ พร้อมคำเตือนที่ชัดเจนเมื่อทำไม่ได้

ปัญหา

แต่ละแพลตฟอร์มใช้รูปแบบการแปลต่างกัน Android ใช้ strings.xml ส่วน iOS ใช้ .strings และ .stringsdict แอปเว็บใช้ JSON หรือ YAML ขณะที่นักแปลและแพลตฟอร์ม TMS ต้องการ XLIFF หรือ PO เมื่อต้องแชร์ข้อความระหว่างแพลตฟอร์ม คุณจึงต้องคัดลอกและวางระหว่างรูปแบบ เขียนสคริปต์เฉพาะกิจ หรือปรับโครงสร้างไฟล์ด้วยตนเอง งานนี้น่าเบื่อ เกิดข้อผิดพลาดง่าย และเสียหายทุกครั้งที่มีรูปแบบใหม่

โปรเจกต์มือถือและเว็บเพียงโปรเจกต์เดียวอาจใช้ไฟล์แปลมากกว่า 5 รูปแบบได้ง่ายๆ การซิงค์ด้วยตนเองเป็นการต่อสู้ที่ไม่มีวันชนะ

วิธีแก้

i18n-convert เป็นเครื่องมือ CLI ตัวเดียวที่แปลงไฟล์ i18n มากกว่า 32 รูปแบบ โดยตรวจหารูปแบบอินพุตอัตโนมัติ รักษาโครงสร้างให้มากที่สุด และเตือนเมื่อการแปลงจะทำให้ข้อมูลสูญหาย เช่น พหูพจน์ใน 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

การตรวจหาอัตโนมัติ

ระบบตรวจหารูปแบบอินพุตจากนามสกุลและเนื้อหาไฟล์โดยอัตโนมัติ ไม่ต้องใช้แฟล็ก

ไม่สูญเสียข้อมูลเมื่อทำได้

ระบบรักษาเมทาดาทา ความคิดเห็น และรูปพหูพจน์ไว้เมื่อรูปแบบเป้าหมายรองรับ

คำเตือนข้อมูลสูญหาย

เมื่อการแปลงจะทำให้ข้อมูลสูญหาย คุณจะได้รับคำเตือนอย่างชัดเจนก่อนเขียนไฟล์ใดๆ

การติดตั้ง

ติดตั้งผ่าน npm เพื่อการตั้งค่าที่ง่ายที่สุด ใช้ Homebrew บน macOS หรือบิลด์จากซอร์สด้วย Cargo

Terminal
npm install -g @i18n-agent/i18n-convert
แพ็กเกจ npm มีไบนารีที่บิลด์ไว้แล้วสำหรับ macOS, Linux และ Windows โดยไม่ต้องใช้ชุดเครื่องมือ Rust

การแปลงที่ใช้บ่อย

ทีมส่วนใหญ่ต้องใช้การแปลงไม่กี่ชนิดซ้ำๆ เช่น JSON เป็น Android XML สำหรับมือถือ PO เป็น JSON สำหรับเว็บ และ XLIFF ไปกลับสำหรับส่งมอบให้นักแปล ต่อไปนี้คือรูปแบบที่พบบ่อย

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/

รูปแบบที่รองรับ

i18n-convert รองรับมากกว่า 32 รูปแบบ ครอบคลุมหมวดหมู่มือถือ เว็บ มาตรฐานโลคัลไลเซชัน และการแลกเปลี่ยนข้อมูล

มือถือ

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

เว็บ

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

มาตรฐานโลคัลไลเซชัน

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

การแลกเปลี่ยนข้อมูล

FormatExtensionFlag
CSV.csv--to csv
TSV.tsv--to tsv
Excel.xlsx--to xlsx

คำเตือนข้อมูลสูญหาย

แต่ละรูปแบบมีความสามารถไม่เท่ากัน XLIFF รองรับหมายเหตุ บริบท และรูปพหูพจน์ แต่ CSV ไม่รองรับสิ่งเหล่านี้ เมื่อแปลงจากรูปแบบที่มีข้อมูลสมบูรณ์เป็นรูปแบบที่เรียบง่ายกว่า i18n-convert จะบอกอย่างเจาะจงว่าสิ่งใดจะสูญหาย

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
ใช้ --dry-run เสมอก่อนแปลงเป็นรูปแบบที่เรียบง่ายกว่าในระบบจริง คำสั่งนี้จะแสดงทุกคำเตือนโดยไม่เขียนไฟล์

การเชื่อมต่อ CI

ทำให้การซิงค์รูปแบบในไปป์ไลน์ CI/CD เป็นอัตโนมัติ เมื่อไฟล์แปลต้นฉบับเปลี่ยน ให้สร้างรูปแบบที่ได้มาทั้งหมดใหม่โดยอัตโนมัติ เพื่อให้ไฟล์มือถือ เว็บ และนักแปลซิงค์กัน

.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
ใช้ i18n-convert ร่วมกับ i18n-validate ในไปป์ไลน์ CI โดยแปลงรูปแบบก่อน แล้วตรวจว่าไฟล์เป้าหมายทั้งหมดครบถ้วนและมีรูปแบบสมบูรณ์

แปลรายการต่อไปนี้ได้ด้วย :

ลองใช้ i18n Agent ตอนนี้

ลากและวางไฟล์แปลของคุณที่นี่

JSON, YAML, PO, XML, CSV, Markdown, Properties

หรือคลิกเพื่อเลือกไฟล์

ภาษาเป้าหมาย

ไม่ต้องลงทะเบียนประเมินราคาได้ทันที

คำถามที่พบบ่อย