Mühendislik//15 dk okuma

Lokalizasyon için CI/CD: Dağıtım Hattınızda Çeviriyi Otomatikleştirme

Eray Gündoğmuş
Paylaş

Lokalizasyon için CI/CD: Dağıtım Hattınızda Çeviriyi Otomatikleştirme

Önemli Çıkarımlar

  • CI/CD entegrasyonu, manuel çeviri dosyası yönetimini ortadan kaldırır ve her dağıtımda çevirilerin yayına girmesini sağlar
  • Otomatik string çıkarımı ve doğrulama, eksik çevirileri üretime ulaşmadan önce yakalar
  • Webhook tetiklemeli derlemeler sürekli lokalizasyonu mümkün kılar — çeviriler onaylanır onaylanmaz yayına girer
  • Birleştirme öncesi kontroller, çevrilmemiş string içeren PR'ları engelleyerek eksik lokalizasyonların yayına çıkmasını önler

Lokalizasyonu CI/CD'de Neden Otomatikleştirmeliyiz?

Manuel lokalizasyon iş akışları darboğaz yaratır:

  • Geliştiriciler yeni stringleri TMS'ye yüklemeyi unutur
  • Çevrilen dosyalar TMS'de biri indirene kadar bekler
  • Manuel dosya yerleştirme merge çakışmalarına yol açar
  • Eksik çeviriler üretime sızar

CI/CD otomasyonu, çeviri senkronizasyonunu her derleme ve dağıtımın standart bir parçası hâline getirerek bu sorunları çözer.

Pipeline Mimarisi

Code Push → CI Triggered → Extract Strings → Push to TMS
                                                  ↓
Production ← Deploy ← Build ← Pull Translations ← Translations Complete (webhook)

GitHub Actions ile Uygulama

Pull Request'te: Çevirileri Doğrula

name: Translation Check
on: pull_request

jobs:
  check-translations:
    runs-on: ubuntu-latest
    steps:
      - uses: actions/checkout@v4

      - name: Scan for new strings
        run: npx better-i18n scan --check
        # Fails if untranslated strings found

      - name: Validate translation files
        run: npx better-i18n validate
        # Checks JSON syntax, missing keys, placeholder consistency

Main'e Birleştirmede: Senkronize Et ve Dağıt

name: Deploy with Translations
on:
  push:
    branches: [main]

jobs:
  deploy:
    runs-on: ubuntu-latest
    steps:
      - uses: actions/checkout@v4

      - name: Push new strings to TMS
        run: npx better-i18n push
        env:
          BETTER_I18N_TOKEN: ${{ secrets.BETTER_I18N_TOKEN }}

      - name: Pull latest translations
        run: npx better-i18n pull --all

      - name: Build
        run: npm run build

      - name: Deploy
        run: npm run deploy

Çeviri Tamamlandığında: Webhook Tetiklemeli Derleme

name: Translation Update
on:
  repository_dispatch:
    types: [translations-updated]

jobs:
  rebuild:
    runs-on: ubuntu-latest
    steps:
      - uses: actions/checkout@v4
      - run: npx better-i18n pull --all
      - run: npm run build
      - run: npm run deploy

Otomatik Doğrulama Kontrolleri

Bu kontrolleri CI pipeline'ınıza ekleyin:

KontrolNeyi YakalarNe Zaman Çalıştırılır
Eksik çevirilerHedef dillerde çevirisi olmayan anahtarlarPR kontrolü
Yer tutucu tutarlılığıKaynakta {name} var ama çeviride {nom} kullanılmışPR kontrolü
JSON/XLIFF sözdizimiBozuk çeviri dosyalarıHer derleme
String uzunluğuUI karakter sınırını aşan çevirilerPR kontrolü
Kullanılmayan anahtarlarKodda artık referans verilmeyen çeviri anahtarlarıHaftalık zamanlanmış

Eksik Çevirileri Yönetme

Dağıtım anında tüm çeviriler hazır olmayabilir. Olası stratejiler:

  1. Kaynak dile geri dön — Çeviri yoksa İngilizce göster (en yaygın yöntem)
  2. Dağıtımı engelle — Yalnızca tüm hedef diller %100 çevrildiğinde dağıt (en katı yöntem)
  3. Yüzde eşiği — Dil %90'ın üzerindeyse dağıt, altındaysa engelle
  4. Anahtar düzeyi önceliği — Kritik UI stringleri mutlaka çevrilmeli, kritik olmayanlar geri dönüş yapabilir

SSS

Çeviri dosyalarını git'e commit etmeli miyim? Evet. Çeviri dosyalarını commit'lemek, TMS API'si kullanılamaz olsa bile derlemelerin çalışmasını sağlar. CI pipeline'ı her derlemede güncel çevirileri çeker ve varsa değişiklikleri otomatik olarak commit'ler.

Çeviri dosyalarındaki merge çakışmalarını nasıl önlerim? TMS'i gerçeğin tek kaynağı olarak kullanın. CI her derlemede çevirileri taze olarak çeker ve yerel dosyaların üzerine yazar. Geliştiriciler çeviri dosyalarını hiçbir zaman manuel olarak düzenlemez.

Dağıtmam gerektiğinde çeviriler hazır değilse ne yapmalıyım? Geri dönüş stratejilerini kullanın (çevrilmemiş stringler için kaynak dili gösterin). Çeviri tamamlanma yüzdesini takip edin ve eşiğin altına düştüğünde uyarı alın.

Dal tabanlı geliştirmeyi nasıl yönetirim? Feature branch'lerden stringleri ayrı TMS namespace'lerine veya dallarına push edin. Feature branch, main'e birleştiğinde çevirileri de birleştirin.

Mobil uygulamalar için de lokalizasyon CI/CD çalıştırabilir miyim? Evet. Aynı prensipler geçerlidir — stringleri TMS'e push edin, derleme sırasında çevirileri çekin, yayınlamadan önce doğrulayın. Mobil'e özel: ASO meta verilerini pipeline'a dahil edin ve .strings/.xml dosya formatlarını doğrulayın.

Comments

Loading comments...