
การตรวจสอบคำแปลใน CI : ทำให้การตรวจ i18n ในไปป์ไลน์เป็นอัตโนมัติ
ข้อบกพร่องคำแปลมองไม่เห็นในการตรวจโค้ด คีย์ที่หาย ตัวยึดตำแหน่งเสียหาย หรือพหูพจน์ผิดรูปไม่ปรากฏในส่วนต่าง การตรวจระดับ CI จะจับก่อนถึงระบบจริง
เหตุใดข้อบกพร่องคำแปลจึงหลุดผ่านการตรวจโค้ด
นักพัฒนาเพิ่ม 10 คีย์ใน en.json และอัปเดตโค้ด ผู้ตรวจ PR ตรวจโค้ดกับอังกฤษแล้วอนุมัติ แต่ไม่มีใครเปรียบเทียบอีก 14 ภาษา ข้อบกพร่องสามรายการเข้าสู่ระบบจริง : de.json ขาด 2 คีย์ ผู้ใช้เยอรมันเห็นพาธดิบ, fr.json มีตัวยึด {count} เสีย ผู้ใช้เห็น {count} ตามตัวอักษร และ ja.json มีพหูพจน์ ICU ผิดรูปจนแอปหยุด ทั้งหมดป้องกันได้ด้วยการตรวจ CI 30 วินาที
ติดตั้ง i18n-validate
เพิ่ม i18n-validate เป็นการพึ่งพาสำหรับพัฒนา รองรับ JSON, YAML, PO, XLIFF และ ARB ให้ทันที โดยไม่ต้องกำหนดค่าสำหรับการใช้พื้นฐาน
npm install --save-dev @anthropic/i18n-validateการเชื่อมต่อ GitHub Actions
เพิ่ม i18n-validate เป็นขั้นตอนในเวิร์กโฟลว์ pull request เครื่องมือจบด้วยโค้ด 1 เมื่อพบข้อผิดพลาดจึงทำให้การตรวจ PR ล้มเหลว ใช้ผล JUnit XML กับ test reporter เพื่อรับคำอธิบายโดยตรงบนส่วนต่าง PR
# .github/workflows/i18n-validate.yml
name: Validate Translations
on:
pull_request:
paths:
- 'src/locales/**'
- 'public/locales/**'
jobs:
validate:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v4
- name: Setup Node.js
uses: actions/setup-node@v4
with:
node-version: 20
- name: Install dependencies
run: npm ci
- name: Validate translation files
run: npx i18n-validate \
--source src/locales/en.json \
--targets 'src/locales/*.json' \
--check-missing \
--check-unused \
--check-placeholders \
--check-plurals \
--min-coverage 95 \
--junit-output reports/i18n.xml
- name: Upload report
if: always()
uses: actions/upload-artifact@v4
with:
name: i18n-validation-report
path: reports/i18n.xmlการเชื่อมต่อ GitLab CI
เพิ่มงานตรวจคำแปลในไปป์ไลน์ .gitlab-ci.yml GitLab รองรับอาร์ติแฟกต์ JUnit XML โดยตรง อัปโหลดรายงานแล้วข้อผิดพลาดจะปรากฏในแท็บ Test ของ merge request
# .gitlab-ci.yml
i18n-validate:
stage: test
image: node:20
script:
- npm ci
- npx i18n-validate \
--source src/locales/en.json \
--targets 'src/locales/*.json' \
--check-missing \
--check-unused \
--check-placeholders \
--min-coverage 95 \
--junit-output reports/i18n.xml
artifacts:
reports:
junit: reports/i18n.xml
only:
changes:
- src/locales/**/*ฮุก Pre-Commit
เพื่อรับผลเร็วขึ้น ให้รันการตรวจเป็นฮุก pre-commit จับปัญหาก่อนถึง CI ประหยัดเวลาไปป์ไลน์และลดวงจรผลตอบกลับ ใช้ Husky (JS) หรือ pre-commit (Python) จัดการฮุก
# .husky/pre-commit
#!/bin/sh
. "$(dirname "$0")/_/husky.sh"
# Only validate if translation files changed
CHANGED_FILES=$(git diff --cached --name-only --diff-filter=ACM | grep -E '(locales|i18n|translations)/')
if [ -n "$CHANGED_FILES" ]; then
echo "Translation files changed, validating..."
npx i18n-validate \
--source src/locales/en.json \
--targets 'src/locales/*.json' \
--check-missing \
--check-placeholders
fiการกำหนดค่าและระดับความรุนแรง
ปรับพฤติกรรมด้วย .i18n-validate.toml ตั้งระดับกฎ (error, warning, off) กำหนดภาษาที่คาดหวัง ไม่รวมภาษาที่กำลังทำ และตั้งรูปแบบผลลัพธ์ ใน CI เฉพาะ error ทำให้ไปป์ไลน์ล้ม ส่วน warning แสดงในรายงานแต่ไม่บล็อก
// i18n-validate.config.json
{
"source": "src/locales/en.json",
"targets": "src/locales/*.json",
"checks": {
"missing": true, // Keys in source missing from target
"unused": true, // Keys in target not in source
"placeholders": true, // Mismatched {variables}
"plurals": true, // Missing CLDR plural forms
"icu": true, // ICU syntax validation
"emptyValues": true, // Empty string values
"duplicateValues": false // Same value as source (untranslated)
},
"minCoverage": 95,
"exclude": [
"src/locales/pseudo.json"
],
"junitOutput": "reports/i18n.xml",
"format": "json" // json | yaml | po | xliff
}ลองใช้ i18n Agent ตอนนี้
ลากและวางไฟล์แปลของคุณที่นี่
JSON, YAML, PO, XML, CSV, Markdown, Properties
หรือคลิกเพื่อเลือกไฟล์
ภาษาเป้าหมาย