Skip to main content

TMS olmadan sürekli yerelleştirme

Kodunuz sürekli dağıtılıyor. Çevirileriniz de öyle olmalı. Yerelleştirmeyi geliştirme iş akışınızda nasıl otomatikleştirebileceğinizi öğrenin.

Sürekli yerelleştirme nedir?

Sürekli yerelleştirme, çevirileri dönemsel sürümlerde toplu olarak yapmak yerine yeni dizeleri geliştirme iş akışınızın bir parçası olarak otomatik biçimde çevirme uygulamasıdır. Bir geliştirici arayüz dizeleri içeren yeni bir özellik eklediğinde bu dizeler özellik yayımlanmadan önce çevrilir.

Geleneksel yaklaşım

Çoğu ekip çevirileri toplu olarak yapar: yeni dizeleri toplar, bir TMS'ye aktarır, çevirmenleri bekler, sonuçları içe aktarır ve ardından yayımlar. Bu süreç, uluslararası sürümleri günlerce veya haftalarca geciktiren bir yerelleştirme darboğazı oluşturur.

1

Geliştirici kaynak yerel ayar dosyasına yeni dizeler ekler

2

Dizeler dışa aktarılır ve bir TMS platformuna yüklenir

3

Çevirmenlere bildirim gönderilir ve çalışmalar başlar

4

Çeviriler incelenir ve onaylanır

5

Çevrilmiş dosyalar indirilir ve yeniden birleştirilir

6

Özellik çevirileriyle birlikte yayımlanır (günler veya haftalar sonra)

Days to weeks

IDE'ye özgü yaklaşım

IDE'ye özgü çeviriyle geliştirici, dizeleri normal kodlama iş akışının bir parçası olarak çevirir. Dışa aktarma, yükleme veya bekleme gerekmez; çeviriler geliştirmeyle aynı oturumda yapılır.

1

Geliştirici kaynak yerel ayar dosyasına yeni dizeler ekler

2

Geliştirici yapay zeka asistanından dosyayı çevirmesini ister

3

Çevrilmiş dosyalar doğrudan projeye yazılır

4

Özellik aynı işlemede çevirileriyle birlikte yayımlanır

Same commit

Geleneksel yaklaşım

6 steps

Multiple tools and platforms

Days to weeks per cycle

IDE'ye özgü yaklaşım

4 steps

Inside your editor

Same commit

3

Çeviri işlem hattınızı kurun

IDE dışında da otomatik çeviri isteyen ekipler için main dalına yapılan her gönderimde yeni veya değiştirilmiş dizeleri çeviren bir CI/CD adımı ekleyin. Bu yaklaşım GitHub Actions, GitLab CI veya herhangi bir CI/CD sistemiyle çalışır.

Küçük ekiplerde IDE'ye özgü çeviriyle başlayın. Ekibiniz 3-4 geliştiriciyi aştığında veya main dalındaki her birleştirmede çevirilerin bulunmasını güvence altına almanız gerektiğinde CI/CD otomasyonu ekleyin.

Mevcut CI/CD işlem hattınıza bir adım olarak çeviri ekleyin. Çeviri, derlemeniz başarıyla tamamlandıktan sonra ve dağıtımdan önce çalışarak her sürümün güncel çeviriler içermesini sağlar.
.github/workflows/translate.yml
# .github/workflows/translate.yml
name: Translate
on:
  push:
    branches: [main]
    paths: ['locales/en/**']

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

      - name: Translate changed strings
        run: |
          npx i18n-agent translate locales/en.json \
            --to de,ja,es,fr,ko,zh-Hans \
            --api-key ${{ secrets.I18N_AGENT_API_KEY }}

      - name: Commit translations
        run: |
          git config user.name "github-actions"
          git config user.email "[email protected]"
          git add locales/
          git diff --cached --quiet || git commit -m "chore: update translations"
          git push
.gitlab-ci.yml
# .gitlab-ci.yml
translate:
  stage: deploy
  only:
    changes:
      - locales/en/**
  script:
    - npx i18n-agent translate locales/en.json
        --to de,ja,es,fr --api-key $I18N_AGENT_API_KEY
    - git add locales/ && git commit -m "chore: translations" && git push
4

CI'a çeviri kalite güvencesi ekleyin

CI işlem hattınızdaki otomatik denetimler eksik çevirileri, bozuk yer tutucuları ve geçersiz ICU ileti biçimlerini üretime ulaşmadan önce yakalar. Bunlar, kaynak yerel ayar dosyanızı tüm hedef yerel ayarlarla karşılaştıran basit betiklerdir.

CI düzeyinde çeviri doğrulaması olmadığında eksik çeviriler fark edilmeden üretime ulaşır. Kullanıcılar çevrilmiş metin yerine "settings.title" gibi işlenmemiş anahtarlar veya boş dizeler görür. 5 dakikalık bir CI denetimi bunu tamamen önler.
check-translations.sh
#!/bin/bash
# check-translations.sh — Run in CI to catch missing translations

SOURCE="locales/en.json"
LANGS=("de" "ja" "es" "fr")
EXIT_CODE=0

# Extract all keys from source
SOURCE_KEYS=$(jq -r '[paths(scalars)] | map(join(".")) | .[]' "$SOURCE" | sort)
SOURCE_COUNT=$(echo "$SOURCE_KEYS" | wc -l)

for lang in "${LANGS[@]}"; do
  TARGET="locales/$lang.json"
  if [ ! -f "$TARGET" ]; then
    echo "❌ Missing: $TARGET"
    EXIT_CODE=1
    continue
  fi

  TARGET_KEYS=$(jq -r '[paths(scalars)] | map(join(".")) | .[]' "$TARGET" | sort)
  MISSING=$(comm -23 <(echo "$SOURCE_KEYS") <(echo "$TARGET_KEYS"))

  if [ -n "$MISSING" ]; then
    COUNT=$(echo "$MISSING" | wc -l)
    echo "❌ $lang: $COUNT missing keys"
    echo "$MISSING" | head -5
    EXIT_CODE=1
  else
    echo "✅ $lang: all $SOURCE_COUNT keys present"
  fi
done

exit $EXIT_CODE
check-placeholders.sh
#!/bin/bash
# check-placeholders.sh — Validate placeholder consistency

SOURCE="locales/en.json"
LANGS=("de" "ja" "es")

for lang in "${LANGS[@]}"; do
  TARGET="locales/$lang.json"

  # Compare placeholders like {{name}}, {count}, %s, %d
  jq -r 'paths(scalars) as $p | [($p | join(".")), (getpath($p))]
    | @tsv' "$SOURCE" | while IFS=$'\t' read -r key value; do
    SOURCE_PH=$(echo "$value" | grep -oE '\{\{[^}]+\}\}|%[sd@]' | sort)
    TARGET_VAL=$(jq -r "getpath($(echo $key | jq -R 'split(".")'))" "$TARGET")
    TARGET_PH=$(echo "$TARGET_VAL" | grep -oE '\{\{[^}]+\}\}|%[sd@]' | sort)

    if [ "$SOURCE_PH" != "$TARGET_PH" ]; then
      echo "❌ $lang/$key: placeholder mismatch"
      echo "   Source: $SOURCE_PH"
      echo "   Target: $TARGET_PH"
    fi
  done
done

CI'da çevirileri doğrulayın

Eksik anahtarları, bozuk yer tutucuları ve çoğul sorunlarını otomatik olarak yakalamak için CI işlem hattınıza i18n-validate ekleyin. Görsel regresyon testleri için sahte çeviriler oluşturmak üzere i18n-pseudo kullanın.
5

Çeviri sapmasını algılayın ve yönetin

Kaynak dizeler değişirken çeviriler güncellenmediğinde çeviri sapması oluşur. İngilizce metinde "Save changes" yazarken Almanca hâlâ eski metni gösterir. Sapma algılama, kaynak ve çeviri dosyalarının zaman damgalarını veya içerik karmalarını karşılaştırır.

Eski çeviriler, eksik çevirilerden daha kötüdür. Eksik bir çevirinin yanlış olduğu açıktır; kullanıcılar bir anahtar veya geri dönüş dilini görür. Eski bir çeviri ise yanlış bilgiyi ikna edici biçimde aktararak kullanıcıları yanıltabilir veya destek sorunlarına yol açabilir.
detect-drift.sh
#!/bin/bash
# detect-drift.sh — Find stale translations

SOURCE="locales/en.json"
SOURCE_HASH=$(md5sum "$SOURCE" | cut -d' ' -f1)
HASH_FILE=".translation-hashes"

# Compare current source hash with stored hash
if [ -f "$HASH_FILE" ]; then
  STORED_HASH=$(grep "^en:" "$HASH_FILE" | cut -d: -f2)
  if [ "$SOURCE_HASH" != "$STORED_HASH" ]; then
    echo "⚠️  Source strings changed since last translation"
    echo "   Run translations to update all locales"

    # Show which keys changed
    git diff HEAD~1 "$SOURCE" | grep '^[+-]' | grep -v '^[+-][+-]'
  fi
fi

# Update stored hash
echo "en:$SOURCE_HASH" > "$HASH_FILE"
6

Çeviri yaklaşımınızı seçin

Her içerik aynı çeviri yaklaşımını gerektirmez. Arayüz dizeleri ve etiketler yapay zeka çevirisiyle çok iyi sonuç verir. Pazarlama metinleri yapay zeka ve insan incelemesinden yararlanır. Hukuk ve mevzuata uygunluk metinlerinde daima profesyonel insan çevirmenler kullanılmalıdır.

Yapay zeka çevirisi, tipik uygulama dizelerinin %80'den fazlasını üretim kalitesinde çevirebilir. İnsan çevirmenleri hukuk metinleri, marka dili ve kültürel açıdan hassas, inceliklerin büyük önem taşıdığı içerikler için kullanın.
Cost Comparison
Translation Approach Comparison:

Content Type         | Approach          | Cost/word  | Quality
─────────────────────┼───────────────────┼────────────┼──────────
UI strings, labels   | AI/LLM            | $0.001-01  | Production
Tooltips, help text  | AI/LLM            | $0.001-01  | Production
Marketing copy       | AI + human review | $0.05-0.15 | High
Legal / compliance   | Human translator  | $0.15-0.40 | Certified
Brand voice content  | Human translator  | $0.20-0.50 | Premium
7

Çeviriler için Git iş akışı

Çevirileri birleştirmeden sonra değil önce, özellik dalınızda yapın. Böylece main dalındaki her birleştirme eksiksiz çeviriler içerir. Desteklenen tüm yerel ayarlarda çevirilerin eksiksizliğini doğrulayan bir birleştirme öncesi denetim ekleyin.

Birden fazla dal aynı anda değişiklik yaptığında büyük JSON yerel ayar dosyaları sık sık birleştirme çakışmalarına yol açar. Fark boyutunu küçültmek ve çakışmaların çözümünü kolaylaştırmak için anahtarları alfabetik olarak sıralayın ve her satıra tek bir anahtar yazın.

Çeviri dosyaları kodunuzla birlikte deponuzda bulunur. Sürüm denetimine alınır, çekme isteklerinde incelenebilir ve diğer her şeyle aynı işlem hattı üzerinden dağıtılır.
.gitattributes + package.json
# .gitattributes — reduce merge conflicts in locale files
locales/*.json merge=union

# Sort keys alphabetically to minimize diffs:
# package.json script:
"sort-locales": "node -e \"
  const fs = require('fs');
  const f = process.argv[1];
  const d = JSON.parse(fs.readFileSync(f));
  const s = (o) => Object.keys(o).sort().reduce((r,k) =>
    ({...r, [k]: typeof o[k]==='object' ? s(o[k]) : o[k]}), {});
  fs.writeFileSync(f, JSON.stringify(s(d), null, 2)+'\\n');
\""

Yaygın sorunlar

Yerelleştirmeyi geliştirme sonrası bir işlem olarak görmek

En büyük hata, çeviri için geliştirme sonrasını beklemektir. Bu durum darboğazlara yol açar, sürümleri geciktirir ve çevirileri sonradan düşünülen bir işe dönüştürür. Geliştirmeden sonra değil geliştirme sırasında çeviri yapın.

CI düzeyinde çeviri doğrulamasının olmaması

Otomatik denetimler olmadığında eksik çeviriler, bozuk yer tutucular ve geçersiz biçimler üretime ulaşır. CI işlem hattınıza eksiksizlik ve biçim doğrulaması ekleyin.

TMS ile gereğinden fazla karmaşıklaştırma

TMS, insan çevirmenlerin iş akışlarını yönetmek için tasarlanmıştır. Yapay zeka çevirisi kullanıyorsanız TMS'nin getirdiği ek yüke ihtiyaç duymayabilirsiniz. Basit başlayın; IDE veya CI/CD içinde çeviri yapın ve yalnızca insan çevirmen yönetimine ihtiyaç duyduğunuzda bir TMS ekleyin.

Çevirilerin güncelliğini izlememek

Güncellik takibi olmadan hangi çevirilerin eski olduğunu bilemezsiniz. Kaynak dizeler değişir ancak eski çeviriler kalır. Eski içerikleri yakalamak için iş akışınıza sapma algılama özelliği ekleyin.

i18n Agent'ı şimdi deneyin

Çeviri dosyanızı buraya bırakın

JSON, YAML, PO, XML, CSV, Markdown, Properties

veya göz atmak için tıklayın

Hedef diller

Kayıt gerekmezAnında fiyat tahmini

Sık sorulan sorular