İç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."



