İçindekiler
Yerelleştirme, artık kampanya sonuna bırakılan bir “ek iş” değil. Kodla birlikte akması, TM/terim tabanına oturması ve LQA ile otomatik kontrol edilmesi gerekiyor. Aşağıda, Sürekli Yerelleştirme (CI/CD) yaklaşımını; kimler için uygun olduğunu, karar matrisini, maliyet–fayda çerçevesini ve GitHub Actions YAML örneğini bulacaksınız.
Bu yazı kimler İçin?
- PM/Ürün: Sürüm hızını düşürmeden çok dilli yayınlamak isteyenler
 - CTO/DevOps: CI/CD’de string drift ve manuel adımları azaltmak isteyenler
 - Pazarlama/İçerik: Landing + e-posta zincirlerini yerelleştirip aynı gün yayına almak isteyenler
 

Sürekli Yerelleştirme (CI/CD) nedir? Ne zaman gerekir?
- Haftalık/günlük sürüm yapılan ürünlerde çevirinin kodla birlikte akması
 - ICU/placeholder yapılarının otomatik test edilmesi
 - Screenshot-diff ile kozmetik ve taşma risklerinin yayın öncesi yakalanması
 - Çok platform (web/iOS/Android) ve çok dil hedeflerinde ROI’nin hızla artması
 
Karar Matrisi – Ekip & Sıklık & İçerik
| Ölçek / Sıklık | İçerik Türü | Öneri | Gerekçe | 
|---|---|---|---|
| Küçük ekip, ayda 1 sürüm | Website kopyası | Manuel + hafif TMS | Kurulum maliyeti yerine esneklik | 
| Orta ekip, haftalık sürüm | Uygulama UI (ICU) | CI/CD + TMS API | Key drift & manuel hataları azaltır | 
| Büyük ekip, günlük sürüm | Web+iOS+Android | CI/CD + otomatik LQA | Görsel/senaryo testi şart | 
| Kampanya dönemleri | Landing + e-posta | CI/CD veya plugin | Hız + versiyonlama | 
Maliyet
| Kalem | Ne kapsar | Not | 
|---|---|---|
| TMS lisansı | API, kullanıcı, proje erişimi | Kullanım/koltuk bazlı olabilir | 
| CI/CD | Runner/dakika veya pipeline süresi | Önbellek ve matris azaltımı maliyeti düşürür | 
| Kurulum | 1–3 iş günü | Repo–TMS bağlama, test, dokümantasyon | 
| LQA | Screenshot-diff, cihaz matrisi | Yayın öncesi durdurucu koşul önerilir | 
Faydalar
Not: Değerler örnek senaryodur; ürün ve ekip yapısına göre değişebilir.
Kurulum adımları (HowTo)
- Depoyu hazırlayın: i18n dizin yapısı ve ICU/placeholder kurallarını netleştirin.
 - TMS entegrasyonu: API anahtarlarını Secrets olarak ekleyin; proje/dil ayarlarını açın.
 - Extract & Upload: Kaynaklardan string çıkarın ve TMS’e yükleyin.
 - Tetikler: 
push+ webhook (çeviri tamam → indirme işini başlat). - Download & Doğrulama: Pseudo-L10n, ICU kuralları ve screenshot-diff çalıştırın.
 - PR/MR: Otomatik PR oluşturun; code review sonrası birleştirin.
 - Release & Rollback: Sürüm notları ve geri dönüş planını kayıt altına alın.
 
GitHub Actions YAML
name: localization-ci
on:
  push:
    branches: ["main"]
    paths: ["src/**", "i18n/**"]
  workflow_dispatch:
concurrency:
  group: l10n-$
  cancel-in-progress: true
jobs:
  tms_sync:
    name: Extract / Upload / Download / Validate / PR
    runs-on: ubuntu-latest
    steps:
      - uses: actions/checkout@v4
      - uses: actions/setup-node@v4
        with:
          node-version: 20
      - run: npm ci
      - name: Extract strings
        run: npm run i18n:extract   # i18n/messages.pot üretir
      - name: Upload to TMS
        env:
          TMS_API_KEY: $
          TMS_PROJECT_ID: $
        run: |
          npx tms-cli upload 
            --project $TMS_PROJECT_ID 
            --token $TMS_API_KEY 
            --src i18n/messages.pot
      - name: (Optional) Start translation job
        env:
          TMS_API_KEY: $
          TMS_PROJECT_ID: $
        run: |
          npx tms-cli start-job 
            --project $TMS_PROJECT_ID 
            --token $TMS_API_KEY 
            --languages tr-TR,ar-SA
      - name: Download translations
        env:
          TMS_API_KEY: $
          TMS_PROJECT_ID: $
        run: |
          npx tms-cli download 
            --project $TMS_PROJECT_ID 
            --token $TMS_API_KEY 
            --dest i18n/locales
      - name: Pseudo-L10n smoke test
        run: npm run i18n:pseudo
      - name: LQA screenshot diff
        run: npm run test:screenshot   # Playwright/Puppeteer tabanlı
      - name: Create PR
        uses: peter-evans/create-pull-request@v6
        with:
          branch: l10n/auto-$
          title: "chore(i18n): pull latest translations"
          commit-message: "chore(i18n): update locales"
          body: "Otomatik yerelleştirme güncellemesi ve LQA kontrolleri."


			
