
Ο πλήρης οδηγός τοπικής προσαρμογής εφαρμογών iOS
Από το Localizable.strings έως τα μεταδεδομένα του App Store: προσαρμόστε την εφαρμογή iOS με Xcode, SwiftUI, Fastlane και αυτοματοποιημένη μετάφραση AI.
Ενεργοποιήστε την τοπική προσαρμογή στο Xcode
Ανοίξτε τις ρυθμίσεις του έργου σας στο Xcode, μεταβείτε στο Info > Localizations και προσθέστε τις γλώσσες που θέλετε να υποστηρίζετε. Το Xcode δημιουργεί αυτόματα καταλόγους .lproj για κάθε γλώσσα.
// 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.stringsΔημιουργήστε το Localizable.strings
Το τυπικό αρχείο τοπικής προσαρμογής iOS χρησιμοποιεί ζεύγη κλειδιού-τιμής που χωρίζονται με σύμβολα ισότητας, ενώ κάθε γραμμή τελειώνει με τον χαρακτήρα «;». Τοποθετήστε το στον φάκελο Base.lproj για τη γλώσσα προέλευσης.
// 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 (Xcode 15+)
Τα String Catalogs (.xcstrings) αποτελούν τη σύγχρονη αντικατάσταση των αρχείων .strings από την Apple. Προσφέρουν οπτικό πρόγραμμα επεξεργασίας στο Xcode, αυτόματη εξαγωγή κειμένων από τα views του SwiftUI και ενσωματωμένη υποστήριξη πληθυντικού.
// 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")Χρησιμοποιήστε τοπικοποιημένα κείμενα σε SwiftUI και UIKit
Το view Text του SwiftUI προσαρμόζει αυτόματα τα string literal. Το UIKit χρησιμοποιεί NSLocalizedString. Για iOS 16+, το σύγχρονο API String(localized:comment:) προσφέρει καθαρότερη σύνταξη και ενσωματωμένη υποστήριξη από τον compiler.
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"
)
}
}
}Χειριστείτε τους πληθυντικούς
Το iOS χρησιμοποιεί αρχεία .stringsdict για τους κανόνες πληθυντικού και υποστηρίζει όλες τις κατηγορίες πληθυντικού CLDR: zero, one, two, few, many, other. Τα String Catalogs χειρίζονται τους πληθυντικούς μέσω ενός οπτικού προγράμματος επεξεργασίας στο Xcode — πολύ απλούστερα από τη μη αυτόματη σύνταξη XML stringsdict.
<!-- 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 με το Fastlane
Χρησιμοποιήστε το εργαλείο deliver του Fastlane για να διατηρείτε τα μεταδεδομένα του App Store — όνομα εφαρμογής, υπότιτλο, περιγραφή, λέξεις-κλειδιά και σημειώσεις έκδοσης — υπό έλεγχο εκδόσεων στο αποθετήριό σας, ως αρχεία απλού κειμένου οργανωμένα ανά τοπική ρύθμιση.
# 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 deliverΔοκιμάστε την τοπική προσαρμογή σας
Δοκιμάστε το τοπικοποιημένο περιεχόμενο χωρίς να αλλάξετε τη γλώσσα της συσκευής σας. Χρησιμοποιήστε τις παρακάμψεις scheme του Xcode για να εκτελέσετε την εφαρμογή σε οποιαδήποτε γλώσσα, προεπισκοπήσεις SwiftUI με περιβάλλον locale και XCUITest με ορίσματα εκκίνησης για αυτοματοποιημένες δοκιμές.
// 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()Αυτοματοποιήστε τον έλεγχο ποιότητας των μεταφράσεων
Αυτοματοποιήστε τις μεταφράσεις
Μεταφράστε τα αρχεία .strings, .xcstrings και μεταδεδομένων Fastlane με AI. Αυτοματοποιήστε τη μετάφραση τόσο των κειμένων εντός εφαρμογής όσο και των μεταδεδομένων του App Store, για μια πλήρως τοπικοποιημένη παρουσία.
# 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.2sΕπιπλέον: έξυπνη εναλλακτική τοπική ρύθμιση με LocaleChain
Από προεπιλογή, το iOS μεταβαίνει στη γλώσσα ανάπτυξης, όταν δεν είναι διαθέσιμη η ακριβής τοπική ρύθμιση ενός χρήστη. Ένας χρήστης με pt-BR που έχει διαθέσιμες μόνο μεταφράσεις pt-PT βλέπει Αγγλικά αντί για Πορτογαλικά. Το LocaleChain το διορθώνει με παραμετροποιήσιμες αλυσίδες εναλλακτικών επιλογών.
Το LocaleChain είναι πακέτο Swift ανοιχτού κώδικα. Προβολή στο GitHub
// 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"]]
)Συνήθεις παγίδες
Σφάλματα σύνταξης αρχείων .strings
Η παρεμβολή Text του SwiftUI δεν προσαρμόζεται
Τα widget/extension εμφανίζουν ανεπεξέργαστα κλειδιά
Οι μεταφράσεις που λείπουν εμφανίζουν κλειδιά στην παραγωγή
Προτεινόμενη δομή αρχείων
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.swiftΜεταφράστε επίσης:
Δοκιμάστε τώρα το i18n Agent
Αφήστε εδώ το αρχείο μετάφρασής σας
JSON, YAML, PO, XML, CSV, Markdown, Properties
ή κάντε κλικ για να επιλέξετε αρχείο
Γλώσσες-στόχοι
Εναλλακτική τοπική ρύθμιση με ios-localechain
Όταν λείπει ένα κλειδί μετάφρασης από μια περιφερειακή τοπική ρύθμιση όπως η de-AT, το iOS μεταβαίνει απευθείας στη γλώσσα ανάπτυξης αντί να ελέγξει πρώτα τη γονική τοπική ρύθμιση de.
// 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"],
])Δείτε τον οδηγό μας για τις εναλλακτικές τοπικές ρυθμίσεις, με την πλήρη λίστα των υποστηριζόμενων framework και 75 ενσωματωμένων αλυσίδων. Learn more →