Skip to main content

CI अनुवाद सत्यापन: अपनी पाइपलाइन में i18n जाँचें ऑटोमेट करें

कोड समीक्षा में अनुवाद संबंधी बग दिखाई नहीं देते। कोई गुम कुंजी, खराब प्लेसहोल्डर या गलत तरीके से बना बहुवचन—इनमें से कुछ भी diff में दिखाई नहीं देता। CI स्तर पर सत्यापन इन्हें प्रोडक्शन तक पहुँचने से पहले पकड़ लेता है।

1

अनुवाद संबंधी बग कोड समीक्षा से कैसे बच निकलते हैं

कोई डेवलपर en.json में 10 नई कुंजियाँ जोड़कर सुविधा का कोड अपडेट करता है। PR समीक्षक कोड की जाँच करता है, अंग्रेज़ी स्ट्रिंग सत्यापित करता है और स्वीकृति दे देता है। बाकी 14 लोकैल फ़ाइलों का diff कोई नहीं देखता। तीन बग प्रोडक्शन में पहुँच जाते हैं: de.json में 2 कुंजियाँ नहीं हैं (जर्मन यूज़र्स को वास्तविक टेक्स्ट के बजाय बिना प्रोसेस हुए कुंजी पथ दिखाई देते हैं), fr.json में {count} प्लेसहोल्डर खराब है (फ़्रेंच यूज़र्स को शाब्दिक रूप से {count} दिखाई देता है) और ja.json में ICU plural गलत तरीके से बना है (जापानी यूज़र्स को क्रैश का सामना करना पड़ता है)। CI में 30 सेकंड की जाँच से इन समस्याओं को रोका जा सकता है।

अनुवाद संबंधी बग की एक अनूठी विशेषता होती है: वे डेवलपर और समीक्षक, दोनों को दिखाई नहीं देते और केवल किसी विशिष्ट लोकैल के यूज़र्स को नज़र आते हैं। प्रोडक्शन से पहले उन्हें पकड़ने का एकमात्र विश्वसनीय तरीका CI सत्यापन है।
2

i18n-validate इंस्टॉल करें

अपने प्रोजेक्ट में i18n-validate को dev dependency के रूप में जोड़ें। यह JSON, YAML, PO, XLIFF और ARB फ़ॉर्मैट का तुरंत समर्थन करता है—बुनियादी उपयोग के लिए किसी कॉन्फ़िगरेशन की आवश्यकता नहीं होती।

Terminal
npm install --save-dev @anthropic/i18n-validate
3

GitHub Actions इंटीग्रेशन

अपने pull request कार्य-प्रवाह में i18n-validate को एक चरण के रूप में जोड़ें। गड़बड़ियाँ मिलने पर यह टूल code 1 के साथ बंद होता है, जिससे PR जाँच विफल हो जाती है। सीधे PR diff पर इनलाइन एनोटेशन पाने के लिए टेस्ट रिपोर्टर ऐक्शन के साथ JUnit XML आउटपुट का उपयोग करें।

.github/workflows/i18n-validate.yml
# .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
नए सत्यापन नियमों के कारण अप्रत्याशित गड़बड़ियों से बचने के लिए अपने कार्य-प्रवाह में i18n-validate का वर्ज़न पिन करें। @latest का उपयोग केवल डेवलपमेंट में करें।
4

GitLab CI इंटीग्रेशन

अपनी .gitlab-ci.yml पाइपलाइन में अनुवाद सत्यापन जॉब जोड़ें। GitLab में JUnit XML आर्टिफ़ैक्ट्स के लिए मूल समर्थन मौजूद है—सत्यापन रिपोर्ट अपलोड करें और गड़बड़ियाँ merge request के Test टैब में दिखाई देंगी।

.gitlab-ci.yml
# .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/**/*
5

Pre-Commit हुक

जल्दी फ़ीडबैक पाने के लिए सत्यापन को pre-commit हुक के रूप में चलाएँ। इससे समस्याएँ CI तक पहुँचने से पहले ही पकड़ में आ जाती हैं, जिससे पाइपलाइन का समय बचता है और फ़ीडबैक चक्र छोटा होता है। हुक प्रबंधित करने के लिए Husky (JS) या pre-commit (Python) का उपयोग करें।

.husky/pre-commit
# .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
Pre-commit हुक हर commit पर चलते हैं, इसलिए उन्हें तेज़ रखें। सभी लोकैल सत्यापित करने के बजाय केवल मौजूदा commit में बदले गए लोकैल सत्यापित करने के लिए --locales फ़्लैग का उपयोग करें। इससे अधिकांश प्रोजेक्ट में हुक का निष्पादन 2 सेकंड से कम समय में पूरा हो जाता है।
6

कॉन्फ़िगरेशन और गंभीरता के स्तर

.i18n-validate.toml कॉन्फ़िगरेशन फ़ाइल की मदद से सत्यापन के व्यवहार को अपनी ज़रूरत के अनुसार ढालें। हर नियम के लिए जाँच की गंभीरता (error, warning, off) सेट करें, अपेक्षित भाषाएँ निर्धारित करें, WIP लोकैल बाहर रखें और आउटपुट फ़ॉर्मैट कॉन्फ़िगर करें। CI में केवल errors के कारण पाइपलाइन विफल होती है—warnings रिपोर्ट में दिखाई देती हैं, लेकिन प्रक्रिया को रोकती नहीं हैं।

i18n-validate.config.json
// 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

या ब्राउज़ करने के लिए क्लिक करें

लक्षित भाषाएँ

साइन अप की ज़रूरत नहींतुरंत अनुमान

CI अनुवाद सत्यापन से जुड़े सामान्य प्रश्न