Mühendislik//9 dk okuma

Translation Automation: CI/CD ve Webhooks ile Lokalizasyonu Kolaylaştırın

Eray Gündoğmuş
Paylaş

Translation Automation: CI/CD ve Webhooks ile Lokalizasyonu Kolaylaştırın

Temel Çıkarımlar

  • Translation Automation, geliştiriciler ve çevirmenler arasındaki manuel dosya el değişimlerini ortadan kaldırarak lokalizasyon döngü sürelerini azaltır
  • CI/CD entegrasyonu, yeni string'lerin otomatik olarak çıkarıldığı, çevrildiği ve geri birleştirildiği sürekli lokalizasyonu mümkün kılar
  • Webhooks, çeviriler tamamlandığında TMS platformlarının eylemleri (build'ler, bildirimler, deployment'lar) tetiklemesine olanak tanır
  • Otomasyon, çevrilmemiş içerik veya eski çevirilerin yayınlanma riskini azaltır
  • İyi otomatize edilmiş bir workflow, lokalizasyon döngü süresini haftalardan saatlere indirebilir

Auto Translation Nedir?

Özünde, auto translation, içeriğin minimum insan müdahalesiyle kaynak dilden hedef dillere geçmesi için çeviri workflow'undan manuel adımları kaldırma pratiğidir. Terim geniş bir spektrumu kapsar — Google Translate'e basit bir API çağrısından, kodtabanınızdaki yeni string'leri algılayan, bunları bağlam-duyarlı yapay zeka ile çeviren, insan incelemesinden geçiren ve onaylanan çevirileri pull request olarak deponuza geri birleştiren tam orkestre edilmiş bir pipeline'a kadar.

Automatic translation önemlidir çünkü modern yazılım ekipleri sürekli yayınlar yapar. Çeviri süreciniz manuel dosya dışa aktarmaları, e-posta koordinasyonu ve manuel içe aktarmaları gerektiriyorsa, her uluslararası yayını geciktiren bir darboğaz haline gelir. Auto Translation bu darboğazı ortadan kaldırır.

Automatic translation olgunluğunun üç seviyesi vardır:

  1. Temel auto translation: Bir geliştirici dosyayı çevirmek için MT API'si (DeepL, Google Translate, Azure Translator) çağırır, ardından çıktıyı manuel olarak entegre eder. Tek seferlik görevler için hızlıdır ancak ölçeklenmez.
  2. Yarı otomatik çeviri: TMS, değişiklikler için deponuzu veya CMS'inizi izler, otomatik olarak translation memory ve machine translation uygular, ardından insan inceleyicilere bildirim gönderir. Pipeline'ın büyük kısmı müdahale olmadan çalışır, ancak insanlar yayınlamadan önce onaylar.
  3. Tam otomatize çeviri pipeline'ları: Birleştirmede string değişikliklerinin algılandığı, yapay zeka ile çevrildiği, quality gate'ler (placeholder kontrolleri, uzunluk doğrulaması, tamlık eşikleri) tarafından doğrulandığı ve tüm kontroller geçerse otomatik olarak geri birleştirildiği CI/CD entegre workflow'ları. İnsan incelemesi, bunu gerektiren içerik türleri (pazarlama metni, hukuki metin) için ayrılmıştır.

Bu kılavuzun geri kalanı, automatic translation'ı geliştirme workflow'unuzun tek seferlik bir kısayol değil, sürdürülebilir bir parçası haline getiren CI/CD ve webhook tabanlı yaklaşımlar olan seviye 2 ve 3'e odaklanmaktadır.

Çeviriyi Neden Otomatize Etmeli?

Manuel lokalizasyon workflow'unda geliştiriciler çeviri dosyalarını çıkarır, bunları çevirmenlere e-posta ile gönderir veya TMS'e yükler, çevirileri bekler, tamamlanan dosyaları indirir ve bunları kodtabanına geri birleştirir. Her el değişimi gecikmeler ve hata fırsatları ortaya çıkarır.

Translation Automation, kaynak kod deponuzu doğrudan çeviri yönetim sisteminize bağlayarak bu el değişimlerini ortadan kaldırır. Geliştiriciler değişiklikleri commit ettiğinde, yeni veya değiştirilmiş string'ler otomatik olarak algılanır ve çeviri için gönderilir. Çevirmenler işlerini tamamladığında, çeviriler otomatik olarak geri senkronize edilir.

Otomatize Lokalizasyon Pipeline'ı

Tipik bir otomatize pipeline bu akışı takip eder:

Geliştirici kodu commit eder
        ↓
CI/CD değiştirilmiş çeviri dosyalarını algılar
        ↓
TMS CLI yeni/değiştirilmiş string'leri TMS'e gönderir
        ↓
TMS translation memory uygular (anında eşleşmeler)
        ↓
Eşleşmeyen string'ler → MT ön çevirisi veya insan ataması
        ↓
Çevirmen TMS'de çevirileri tamamlar
        ↓
Webhook tetiklenir: "translations completed"
        ↓
CI/CD tamamlanan çevirileri depoya çeker
        ↓
Yeni çevirilerle PR oluşturulur
        ↓
İnceleme, birleştirme, deploy

CI/CD Entegrasyon Desenleri

GitHub Actions Örneği

Çoğu TMS platformu, CI/CD pipeline'larında kullanılabilecek CLI araçları sağlar:

# .github/workflows/sync-translations.yml
name: Sync Translations

on:
  push:
    branches: [main]
    paths:
      - 'src/locales/en/**'

jobs:
  push-sources:
    runs-on: ubuntu-latest
    steps:
      - uses: actions/checkout@v4
      - name: Push source strings to TMS
        run: |
          npx @better-i18n/cli push \
            --project your-org/your-project \
            --source src/locales/en
        env:
          BETTER_I18N_TOKEN: ${{ secrets.BETTER_I18N_TOKEN }}

Zamanlamaya Göre Çevirileri Çekme

# .github/workflows/pull-translations.yml
name: Pull Translations

on:
  schedule:
    - cron: '0 */6 * * *'  # Her 6 saatte bir
  workflow_dispatch:       # Manuel tetikleyici

jobs:
  pull-translations:
    runs-on: ubuntu-latest
    steps:
      - uses: actions/checkout@v4
      - name: Pull completed translations
        run: |
          npx @better-i18n/cli pull \
            --project your-org/your-project \
            --target src/locales
        env:
          BETTER_I18N_TOKEN: ${{ secrets.BETTER_I18N_TOKEN }}
      - name: Create PR if translations changed
        uses: peter-evans/create-pull-request@v6
        with:
          title: 'chore(i18n): update translations'
          commit-message: 'chore(i18n): pull latest translations from TMS'
          branch: i18n/update-translations

GitLab CI/CD

# .gitlab-ci.yml
push-sources:
  stage: sync
  only:
    changes:
      - src/locales/en/**
  script:
    - npx @better-i18n/cli push --project $PROJECT_ID --source src/locales/en

Webhook Tabanlı Workflow'lar

Webhooks, TMS'inizin olaylar gerçekleştiğinde sistemlerinizi bilgilendirmesine olanak tanır — çeviriler tamamlandı, incelemeler onaylandı veya yeni string'ler algılandı.

Yaygın Webhook Olayları

OlayTetikleyiciTipik Eylem
translation.completedBir dil için tüm string'ler çevrildiÇevirileri çekme, PR oluşturma
translation.reviewedÇeviri incelemeyi geçtiStaging'e deploy etme
source.updatedYeni kaynak string'ler algılandıÇevirmenlere bildir
project.exportedÇeviri dışa aktarımı hazırİndir ve birleştir

Webhook Handler Örneği

// Express.js webhook handler'ı
app.post('/webhooks/translations', (req, res) => {
  const { event, language, project } = req.body;

  if (event === 'translation.completed') {
    // API aracılığıyla GitHub Actions workflow'u tetikle
    triggerWorkflow('pull-translations', {
      language,
      project,
    });
  }

  res.status(200).json({ received: true });
});

Dosya Formatı Değerlendirmeleri

Farklı dosya formatları, otomasyonun nasıl çalıştığını etkiler:

FormatGüçlü YönlerYaygın Kullanım
JSON (düz/iç içe)Ayrıştırması kolay, geniş çaplı desteklenenReact, Vue, Angular
XLIFFSektör standardı, meta verileri korurKurumsal araçlar
PO/POTOlgun araçlar, çevirmen dostuDjango, Rails, PHP
RESX.NET yerel formatıC#, .NET projeleri
ARBFlutter/Dart standardıFlutter uygulamaları
Strings/StringsdictiOS yerel formatıiOS/macOS uygulamaları
XMLAndroid yerel formatıAndroid uygulamaları

Otomasyon pipeline'ınızın kodtabanınızın kullandığı belirli formatı işlemesi gerekir. Çoğu TMS CLI aracı tüm yaygın formatları destekler.

String Çıkarma Otomasyonu

Ayrı çeviri dosyaları kullanmayan projeler için, otomatize string çıkarma kaynak kodundaki çevrilebilir string'leri tanımlar:

Statik Analiz

Araçlar çeviri fonksiyon çağrıları için kaynak kodu tarar:

// Bu desenler çıkarma araçları tarafından algılanır:
t('home.title')
useTranslations('common')
formatMessage({ id: 'greeting' })

Çıkarma Yapılandırması

{
  "extract": {
    "patterns": ["src/**/*.{tsx,ts}"],
    "functions": ["t", "useTranslations", "formatMessage"],
    "output": "src/locales/en/messages.json"
  }
}

Çıkarma komutunu pre-commit hook veya CI adımı olarak çalıştırmak, yeni çevrilebilir string'lerin her zaman yakalanmasını sağlar.

Otomatize Pipeline'larda Quality Gates

Otomasyon, bozuk çevirilerin üretime ulaşmasını önlemek için kalite kontrolleri içermelidir:

  1. Placeholder doğrulaması: Kaynak string'lerdeki tüm placeholder'ların ({name}, {count}) çevirilerde mevcut olduğunu doğrulama
  2. Uzunluk doğrulaması: Kaynak string uzunluğunu önemli ölçüde aşan çevirileri işaretleme (UI taşmasına neden olabilir)
  3. Tamlık kontrolü: Deployment'tan önce tüm gerekli dillerin minimum çeviri yüzdesini karşılamasını sağlama
  4. Format doğrulaması: Çeviri dosyalarının geçerli JSON/XLIFF/PO olduğunu doğrulama (sözdizimi hatası yok)
# CI'da Quality gate
- name: Validate translations
  run: |
    npx @better-i18n/cli validate \
      --source src/locales/en \
      --target src/locales \
      --min-coverage 95

Yaygın Tuzaklar

  1. Aşırı senkronizasyon: Her commit'te çevirileri çekmek gürültülü PR'lar oluşturur. Bunun yerine zamanlanmış veya webhook tetiklemeli çekmeleri kullanın.
  2. Eksik bağlam: Otomatize çıkarma string'leri yakalar ancak ekran görüntülerini veya açıklamaları yakalamaz. Yorumlar veya TMS özellikleri aracılığıyla bağlam sağlayın.
  3. Dal çakışmaları: Çeviri PR'ları özellik dallarıyla çakışabilir. Çakışmaları en aza indirmek için çeviri güncellemelerini sık sık birleştirin.
  4. Gizli bilgi yönetimi: TMS API token'ları depoya commit edilmemeli, CI/CD gizli bilgilerinde güvenli bir şekilde saklanmalıdır.
  5. Rate Limiting: TMS platformlarına API çağrıları rate-limited olabilir. Otomasyon script'lerinde geri çekilme ve yeniden deneme mantığı uygulayın.

SSS

Çevirileri ne sıklıkta senkronize etmeliyim?

Main'e (veya birincil dalınıza) her birleştirmede kaynak string'leri gönderin. Çevirileri ya bir zamanlamaya göre (her 4-6 saatte bir) ya da çeviriler tamamlandığında webhook aracılığıyla çekin. Özellik dallarına her commit'te senkronizasyondan kaçının — gereksiz gürültü oluşturur.

Çeviri PR'larını otomatik birleştirmeli miyim?

Quality gate'leri (placeholder doğrulaması, format kontrolü) olan iyi kurulmuş workflow'lar için çeviri PR'larını otomatik birleştirmek güvenli olabilir. Yeni kurulumlar için kalite kontrollerine güvenene kadar manuel inceleme isteyin. Birçok ekip kritik olmayan diller için otomatik birleştirir ve birincil pazarlar için inceleme ister.

Çeviriler build'i bozarsa ne yapmalıyım?

Birleştirmeden önce çeviri dosyalarını doğrulayan bir CI kontrolü ekleyin. Bir çeviri dosyasının geçersiz sözdizimi, eksik placeholder'lar veya başka sorunları varsa PR CI'da başarısız olmalı ve birleştirilmemelidir. Bu, bozuk çevirilerin üretime ulaşmasını önler.

Auto Translation üretim için yeterince iyi mi?

Auto Translation — yani insan incelemesi olmaksızın tam otomatize machine translation — hızın ciladan daha önemli olduğu dahili araçlar, geliştirici dokümantasyonu ve düşük riskli içerik için uygundur. Kullanıcıya yönelik ürün UI'sı, pazarlama metni ve hukuki içerik için auto translation, insan incelemesini içeren bir pipeline'da ilk taslak olarak hizmet etmelidir. CI/CD bağlamında automatic translation'ın amacı insanları ortadan kaldırmak değil, onları yavaşlatan manuel koordinasyonu ortadan kaldırmaktır.

Comments

Loading comments...