
iOS uygulama yerelleştirmesi için eksiksiz rehber
Localizable.strings'den App Store meta verilerine: iOS uygulamanızı Xcode, SwiftUI, Fastlane ve otomatik yapay zeka çevirisiyle yerelleştirin.
Xcode'da yerelleştirmeyi etkinleştirin
Xcode proje ayarlarınızı açın, Info > Localizations bölümüne gidin ve desteklemek istediğiniz dilleri ekleyin. Xcode, her dil için .lproj dizinlerini otomatik olarak oluşturur.
// In Xcode:
// 1. Select your project in the navigator
// 2. Go to Info tab > Localizations
// 3. Click + to add languages (e.g., German, Japanese)
// 4. Select which files to localize
//
// Xcode creates .lproj directories automatically:
// en.lproj/Localizable.strings
// de.lproj/Localizable.strings
// ja.lproj/Localizable.stringsLocalizable.strings oluşturun
Standart iOS yerelleştirme dosyası, eşittir işaretleriyle ayrılmış anahtar-değer çiftleri kullanır ve her satır noktalı virgülle biter. Kaynak dil için bu dosyayı Base.lproj klasörünüze yerleştirin.
// Base.lproj/Localizable.strings
"welcome_title" = "Welcome to MyApp";
"login_button" = "Sign In";
"settings_label" = "Settings";
"greeting" = "Hello, %@!"; // %@ = string placeholder
"item_count" = "%d items"; // %d = integer placeholder// ❌ Common mistakes in .strings files:
// Missing semicolon — file loads but translations are empty
"welcome_title" = "Welcome"
// Unescaped quotes — causes parse error
"message" = "Click "here" to continue";
// ✅ Correct versions:
"welcome_title" = "Welcome";
"message" = "Click \"here\" to continue";String Catalogs'a geçin (Xcode 15+)
String Catalogs (.xcstrings), Apple'ın .strings dosyalarının yerine sunduğu modern çözümdür. Xcode'da görsel bir düzenleyici, SwiftUI görünümlerinizden otomatik dize çıkarma ve yerleşik çoğul desteği sunar.
// Xcode 15+ String Catalog (Localizable.xcstrings)
// Xcode automatically extracts strings from your code
// and manages translations in a visual editor.
// In SwiftUI, strings are automatically localizable:
Text("Welcome to MyApp")
Text("Hello, \(userName)!")
// Mark strings explicitly:
let title = String(localized: "welcome_title")Yerelleştirilmiş dizeleri SwiftUI ve UIKit'te kullanın
SwiftUI'ın Text görünümü, dize sabitlerini otomatik olarak yerelleştirir. UIKit, NSLocalizedString kullanır. iOS 16+ için modern String(localized:comment:) API'si, yerleşik derleyici desteğiyle daha temiz bir söz dizimi sağlar.
import SwiftUI
struct ContentView: View {
let userName: String
var body: some View {
VStack {
// ✅ SwiftUI auto-localizes string literals
Text("welcome_title")
// ⚠️ This does NOT localize (String interpolation)
// Text("Hello, \(userName)")
// ✅ Use String(localized:) for dynamic strings
Text(String(localized: "greeting \(userName)"))
// ✅ UIKit style (works everywhere)
let title = NSLocalizedString(
"settings_label",
comment: "Settings screen title"
)
// ✅ Modern API (iOS 16+)
let modern = String(
localized: "welcome_title",
comment: "Main screen title"
)
}
}
}Çoğulları yönetin
iOS, çoğul kuralları için .stringsdict dosyalarını kullanır ve tüm CLDR çoğul kategorilerini destekler: zero, one, two, few, many, other. String Catalogs, çoğulları Xcode'daki görsel bir düzenleyiciyle yönetir; bu, stringsdict XML'ini elle yazmaktan çok daha kolaydır.
<!-- Localizable.stringsdict -->
<?xml version="1.0" encoding="UTF-8"?>
<plist version="1.0">
<dict>
<key>items_count</key>
<dict>
<key>NSStringLocalizedFormatKey</key>
<string>%#@count@</string>
<key>count</key>
<dict>
<key>NSStringFormatSpecTypeKey</key>
<string>NSStringPluralRuleType</string>
<key>NSStringFormatValueTypeKey</key>
<string>d</string>
<key>zero</key>
<string>No items</string>
<key>one</key>
<string>%d item</string>
<key>other</key>
<string>%d items</string>
</dict>
</dict>
</dict>
</plist>
// Usage in Swift:
String(format: NSLocalizedString("items_count", comment: ""),
itemCount)App Store meta verilerini Fastlane ile yerelleştirin
App Store meta verilerini (uygulama adı, alt başlık, açıklama, anahtar sözcükler ve sürüm notları) deponuzda yerel ayara göre düzenlenmiş düz metin dosyaları hâlinde sürüm denetimi altında tutmak için Fastlane'in deliver aracını kullanın.
# Install Fastlane
$ gem install fastlane
# Initialize deliver for App Store metadata
$ fastlane deliver init
# Directory structure created:
# fastlane/metadata/
# ├── en-US/
# │ ├── name.txt # App name (30 chars)
# │ ├── subtitle.txt # Subtitle (30 chars)
# │ ├── description.txt # Full description
# │ ├── keywords.txt # Search keywords (100 chars)
# │ ├── release_notes.txt # What's New
# │ └── promotional_text.txt
# ├── de-DE/
# │ └── ...
# └── ja/
# └── ...
# Push metadata to App Store Connect:
$ fastlane deliverYerelleştirmenizi test edin
Cihazınızın dilini değiştirmeden yerelleştirilmiş içeriği test edin. Uygulamayı herhangi bir dilde çalıştırmak için Xcode şema geçersiz kılmalarını, yerel ayar ortamına sahip SwiftUI önizlemelerini ve otomatik testler için başlatma argümanlarıyla XCUITest'i kullanın.
// 1. Xcode Scheme Override:
// Edit Scheme > Run > Options > App Language > Choose language
// 2. SwiftUI Preview with locale:
struct ContentView_Previews: PreviewProvider {
static var previews: some View {
ContentView()
.environment(\.locale, Locale(identifier: "de"))
ContentView()
.environment(\.locale, Locale(identifier: "ja"))
ContentView()
.environment(\.locale, Locale(identifier: "ar"))
}
}
// 3. XCUITest with language override:
let app = XCUIApplication()
app.launchArguments += ["-AppleLanguages", "(de)"]
app.launchArguments += ["-AppleLocale", "de_DE"]
app.launch()Çeviri kalitesini otomatikleştirin
Çevirileri otomatikleştirin
.strings, .xcstrings ve Fastlane meta veri dosyalarınızı yapay zekayla çevirin. Tamamen yerelleştirilmiş bir varlık için hem uygulama içi dizelerin hem App Store meta verilerinin çevirisini otomatikleştirin.
# Translate .strings files
> Translate Base.lproj/Localizable.strings
to Japanese, German, and Spanish
# Translate App Store metadata too
> Translate fastlane/metadata/en-US/
to de-DE, ja, es-MX
✓ 6 files translated in 3.2sEk: LocaleChain ile akıllı yerel ayar geri dönüşü
Varsayılan olarak iOS, kullanıcının tam yerel ayarı bulunmadığında geliştirme dilinize döner. Yalnızca pt-PT çevirileri bulunan pt-BR kullanıcısı, Portekizce yerine İngilizce görür. LocaleChain, yapılandırılabilir geri dönüş zincirleriyle bu sorunu çözer.
LocaleChain, açık kaynaklı bir Swift paketidir. GitHub'da görüntüleyin
// Swift Package Manager
// File > Add Package Dependencies >
// https://github.com/i18n-agent/ios-localechain.gitimport LocaleChain
// In your App init or AppDelegate:
LocaleChain.configure() // Activates all default chains
// pt-BR user with only pt-PT translations?
// → Shows Portuguese instead of falling back to English
// Custom overrides for your specific locales:
LocaleChain.configure(
overrides: ["es-MX": ["es-419", "es"]]
)Yaygın sorunlar
.strings dosyası söz dizimi hataları
SwiftUI Text'te değer yerleştirmenin yerelleştirilmemesi
Widget'larda/uzantılarda ham anahtarların görünmesi
Eksik çevirilerin üretimde anahtar olarak görünmesi
Önerilen dosya yapısı
MyApp/
├── MyApp.xcodeproj
├── MyApp/
│ ├── Base.lproj/
│ │ ├── Localizable.strings # Source strings
│ │ └── Localizable.stringsdict # Plural rules
│ ├── en.lproj/
│ │ └── Localizable.strings
│ ├── de.lproj/
│ │ └── Localizable.strings
│ ├── ja.lproj/
│ │ └── Localizable.strings
│ ├── Localizable.xcstrings # OR String Catalog
│ └── Info.plist
├── MyAppTests/
├── fastlane/
│ ├── Fastfile
│ └── metadata/
│ ├── en-US/
│ │ ├── name.txt
│ │ ├── description.txt
│ │ └── keywords.txt
│ ├── de-DE/
│ └── ja/
└── Package.swifti18n 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
ios-localechain ile yerel ayar geri dönüşü
de-AT gibi bölgesel bir yerel ayarda çeviri anahtarı eksik olduğunda iOS, önce üst yerel ayar de'yi denetlemek yerine doğrudan geliştirme diline geçer.
// Swift Package Manager
// https://github.com/i18n-agent/ios-localechainimport LocaleChain
LocaleChain.configure(overrides: [
"de": ["en-GB", "en"],
"pt-BR": ["pt", "en"],
"zh-Hant-HK": ["zh-Hant", "zh", "en"],
])Desteklenen çerçevelerin tam listesi ve yerleşik 75 zincir için Yerel Ayar Geri Dönüşü Rehberimize bakın. Learn more →