İçindekiler
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:
- 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.
- 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.
- 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ı
| Olay | Tetikleyici | Tipik Eylem |
|---|---|---|
translation.completed | Bir dil için tüm string'ler çevrildi | Çevirileri çekme, PR oluşturma |
translation.reviewed | Çeviri incelemeyi geçti | Staging'e deploy etme |
source.updated | Yeni 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:
| Format | Güçlü Yönler | Yaygın Kullanım |
|---|---|---|
| JSON (düz/iç içe) | Ayrıştırması kolay, geniş çaplı desteklenen | React, Vue, Angular |
| XLIFF | Sektör standardı, meta verileri korur | Kurumsal araçlar |
| PO/POT | Olgun araçlar, çevirmen dostu | Django, Rails, PHP |
| RESX | .NET yerel formatı | C#, .NET projeleri |
| ARB | Flutter/Dart standardı | Flutter uygulamaları |
| Strings/Stringsdict | iOS yerel formatı | iOS/macOS uygulamaları |
| XML | Android 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:
- Placeholder doğrulaması: Kaynak string'lerdeki tüm placeholder'ların (
{name},{count}) çevirilerde mevcut olduğunu doğrulama - Uzunluk doğrulaması: Kaynak string uzunluğunu önemli ölçüde aşan çevirileri işaretleme (UI taşmasına neden olabilir)
- Tamlık kontrolü: Deployment'tan önce tüm gerekli dillerin minimum çeviri yüzdesini karşılamasını sağlama
- 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
- 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.
- 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.
- 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.
- Gizli bilgi yönetimi: TMS API token'ları depoya commit edilmemeli, CI/CD gizli bilgilerinde güvenli bir şekilde saklanmalıdır.
- 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.