Ana Sayfa / Blog / 36 dile lokalize edilmiş app yönetimi: automation olmazsa olmaz

36 dile lokalize edilmiş app yönetimi: automation olmazsa olmaz

12 iOS uygulamam 36+ dile lokalize. Manuel yönetim mümkün değil. String management, release workflow, translation service'leri.

12 iOS uygulamamın çoğu 20+ dile lokalize. Bazıları 36 dile kadar gidiyor. Manuel olarak her release’de translator’a göndermek, dönen strings’leri merge etmek, build’e ekleyip test etmek – bu işin her birinde 2-3 günlük overhead.

Zaman içinde automation pipeline kurdum. Her release 2 saatlik bir iş oldu. Bu yazıda kullandığım araçları ve workflow’u anlatacağım.

Başlangıç noktası: Localizable.strings ≠ enough

iOS’ta localization için standart format: Localizable.strings dosyaları. Her dil için ayrı bir dizinde. Bu sistem çalışıyor ama limitations var:

  • Format değişmez (key-value çiftleri)
  • Plural, gender handling zor (stringsdict ayrı dosya)
  • Developer manuel olarak key eklemek zorunda
  • Missing translation detection yok

Büyük app’ler için String Catalog (iOS 16+) veya .xcstrings kullanıyorum. Apple’ın modern format’ı:

Localizable.xcstrings

Xcode’da GUI ile edit edilebiliyor, Plural/Variant/Format desteği native, state tracking (needs review, needs translation).

Yeni projelerde .xcstrings default, eski projeleri migrate ediyorum.

Automation 1: Translation memory + version control

Strings dosyası git’te tracking ediliyor. Her PR’da yeni string eklendiyse, CI’da check:

# Pre-commit hook
localization-check.sh
- Tüm .xcstrings dosyalarında "needs_translation" var mı?
- Missing localization var mı?
- Key'ler consistent mi?

Yeni string eklediğin an CI seni uyarıyor: “Bu string 15 dile translate edilmemiş.”

Automation 2: Translation service entegrasyonu

Benim kullandığım tool’lar:

POEditor: Küçük-orta projeler için iyi. Web interface, GitHub integration, translator assignment.

Lokalise: Daha enterprise-focused. API-first, CI/CD integration güçlü.

Crowdin: Community translation için popüler. Açık kaynak projelerde.

Google Translate / DeepL API: İlk pass için otomatik. Sonra human translator review ediyor.

Benim workflow’um Lokalise ile:

  1. Developer string ekliyor, .xcstrings’e commit
  2. GitHub Action trigger, Lokalise’a upload (new strings)
  3. Translator Lokalise’da translate (email notification alıyor)
  4. Translator finish edince, GitHub Action Lokalise’tan pull, .xcstrings update
  5. PR otomatik açılıyor, developer review edip merge ediyor

Bu pipeline 3-4 saat translator turnaround + 15 dakika developer review ile yeni strings’leri 36 dile yayıyor.

Automation 3: Screenshot generation per locale

App Store her dil için ayrı screenshot istiyor. 36 dil * 6 screenshot * 3 device = 648 screenshot. Manuel imkansız.

Fastlane snapshot araç setini kullanıyorum:

fastlane snapshot

Config’de:

devices([
  "iPhone 15 Pro",
  "iPhone SE (3rd generation)",
  "iPad Pro 12.9-inch"
])
languages([
  "en-US", "tr-TR", "de-DE", "fr-FR",
  "es-ES", "it-IT", "ja-JP", "zh-Hans",
  # ... 36 dil
])

UI tests’lerin localized screenshot’lar generate ediyor. 1 saat çalışıyor, 600+ screenshot hazır.

Automation 4: App Store metadata

App description, keywords, what’s new her dile translate edilmeli. fastlane deliver araç seti:

fastlane/metadata/
  en-US/
    description.txt
    keywords.txt
    release_notes.txt
  tr-TR/
    description.txt
    ...
  [36 dil]

Lokalise bu metadata’yı da handle ediyor. Developer sadece en-US’yi yazıyor, rest auto-translated + human review.

Release:

fastlane deliver --metadata_only

App Store Connect’e 36 dilin metadata’sı upload oluyor.

Hangi dilleri destekleyelim?

36 dil destek etmek hedef değil, ama bazı dilleri dahil etmek doğal. Karar verirken:

1. App Store audience. App Store Connect’in analytics’inde hangi ülkeden kaç download geliyor? Top 10 ülke’nin dillerini ekle.

2. Organic search. App ismini App Store’da search eden kaç kişi hangi dilde search ediyor?

3. Localization cost. Bir dilin çeviri + ongoing maintenance maliyeti ne? Küçük return’lü diller zarar eder.

4. Regional compliance. Bazı ülkelerde lokal dil desteği regulatory requirement.

Benim uygulamalarım için evolution:
– v1.0: 5 dil (EN, TR, DE, FR, ES)
– v1.5: 15 dil
– v3.0: 36 dil

Her dil eklemede translator budget ayırıyorum. Aylık ~$30/app Lokalise + translator maliyetleri.

Common pitfalls

Localization’da sık yapılan hatalar:

1. String concatenation. “Hello ” + userName + “!” gibi. Bazı dillerde kelime sırası değişiyor. Always format strings:

String(format: NSLocalizedString("greeting_format", comment: ""), userName)

2. Plural unutmak. “%d items” ingilizce’de “1 item” / “5 items” ama Rusça’da “1 товар” / “2 товара” / “5 товаров”. Plural rules dile özgü. .stringsdict veya .xcstrings’in plural desteğini kullan.

3. RTL desteği. Arabic, Hebrew right-to-left. Bu sadece text alignment değil – icon’lar, progress bar’lar, swipe gesture’ları da flip olmalı. UIView.semanticContentAttribute ile handle.

4. Number formatting. 1,234.56 US’te. 1.234,56 German’da. 1 234,56 French’te. NumberFormatter kullan, manuel string concat etme.

5. Date/time formatting. DateFormatter’ın locale parameter’ı. Ayın kaçıncı günü önce, saat 12h veya 24h.

6. Currency formatting. $100 vs €100 vs ₺100. NumberFormatter.numberStyle = .currency.

Bu 6 pattern localize edilmiş app’in temel hijyeni.

Test strategy

Localized app test etmenin pratik yolu: simulator’da farklı region + language kombinasyonları:

# Simulator'da language change
xcrun simctl boot ID
xcrun simctl shutdown ID && xcrun simctl boot ID --locale ar_SA

Veya Xcode scheme’de runtime language change. Her dile UI test suite’i koşmuyorum, ama smoke test:

  • English (base)
  • Turkish (my native, yakın takip)
  • German (long strings typical)
  • Japanese (different writing direction)
  • Arabic (RTL)

Bu 5 dili test ederek çoğu localization bug’ı yakalıyorum.

Translator management

Translation quality variable. Pro translator vs amateur farklı sonuç veriyor.

Benim stratejim:

1. Professional for UI strings. App’in kullandığı UI strings (buton, label, error message) pro translator. Quality önemli.

2. Machine + review for long-form content. App description, help docs. DeepL auto-translate + native speaker review. %80 cost saving.

3. Community for free content. Ek dil destek’lerde community translator (user-submitted) kabul ediyorum. Quality check var ama hız önemli.

Release workflow

Yeni iOS release için:

  1. Developer feature branch’te new strings ekledi
  2. CI build check + string extract + Lokalise upload
  3. Translator’lar Lokalise’da çeviriyor (24-48 saat)
  4. Auto-merge PR: updated strings ana branch’e
  5. QA team 5 critical dili test ediyor
  6. Fastlane screenshots (36 dil, ~1 saat)
  7. Fastlane deliver metadata (36 dil)
  8. App Store Connect submission

Toplam: yeni release için 2-3 gün hazırlık, büyük kısmı translator turnaround. Eğer ben baştan sona manuel yapsaydım 2-3 hafta olurdu.

Sonuç

Global iOS app’i için localization automation investment kritik. 5 dilden sonra manuel yönetim sürdürülemez. Lokalise/POEditor + fastlane + proper string management ile 36+ dil sürdürülebilir.

İlk setup 1-2 haftalık iş. Ondan sonra her yeni release 2 saat overhead. Kullanıcı tabanının %60-70’i non-English dilde ise, bu investment’in ROI’si çok yüksek.

Bu konuda bir projeniz mi var?

Kısa bir özet bırakın, 24 saat içinde size dönüş yapayım.

İletişime Geç