
Ang Kumpletong Gabay sa iOS App Localization
Mula Localizable.strings hanggang App Store metadata: i-localize ang inyong iOS app gamit ang Xcode, SwiftUI, Fastlane, at awtomatikong AI translation.
I-enable ang Localization sa Xcode
Buksan ang Xcode project settings ninyo, pumunta sa Info > Localizations, at idagdag ang mga wikang gusto ninyong suportahan. Awtomatikong gumagawa ang Xcode ng mga .lproj directory para sa bawat wika.
// 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.stringsGumawa ng Localizable.strings
Gumagamit ang standard na iOS localization file ng mga key-value pair na pinaghiwalay ng equals sign, at nagtatapos sa semicolon ang bawat linya. Ilagay ito sa inyong Base.lproj folder para sa source language.
// 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";Mag-migrate sa String Catalogs (Xcode 15+)
Ang String Catalogs (.xcstrings) ang modernong kapalit ng Apple para sa mga .strings file. Nag-aalok ang mga ito ng visual editor sa Xcode, awtomatikong pag-extract ng string mula sa inyong SwiftUI view, at built-in na suporta sa plural.
// 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")Gamitin ang Mga Localized String sa SwiftUI at UIKit
Awtomatikong naglo-localize ang Text view ng SwiftUI ng mga string literal. Gumagamit ang UIKit ng NSLocalizedString. Para sa iOS 16+, nagbibigay ang modernong String(localized:comment:) API ng mas malinis na syntax na may built-in na compiler support.
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"
)
}
}
}Pangasiwaan ang Mga Plural
Gumagamit ang iOS ng mga .stringsdict file para sa mga panuntunan sa plural, na sumusuporta sa lahat ng CLDR plural category: zero, one, two, few, many, other. Pinangangasiwaan ng String Catalogs ang mga plural gamit ang visual editor sa Xcode — mas simple kaysa sa pagsulat ng stringsdict XML nang manu-mano.
<!-- 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)I-localize ang App Store Metadata gamit ang Fastlane
Gamitin ang deliver tool ng Fastlane para panatilihing naka-version control sa inyong repository ang App Store metadata — app name, subtitle, description, keywords, release notes — bilang mga plain text file na nakaayos ayon sa locale.
# 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 deliverI-test ang Inyong Localization
I-test ang localized na nilalaman nang hindi binabago ang wika ng device. Gamitin ang Xcode scheme overrides para patakbuhin ang app sa anumang wika, SwiftUI previews na may locale environment, at XCUITest na may launch argument para sa automated testing.
// 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()I-automate ang Kalidad ng Pagsasalin
I-automate ang mga Pagsasalin
Isalin ang inyong mga .strings, .xcstrings, at Fastlane metadata file gamit ang AI. I-automate ang pagsasalin ng parehong in-app string at App Store metadata para sa ganap na localized na presence.
# 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.2sBonus: Smart Locale Fallback gamit ang LocaleChain
Bilang default, nagfa-fallback ang iOS sa inyong development language kapag hindi available ang eksaktong locale ng user. Ang isang pt-BR user na pt-PT translations lang ang mayroon ay makakakita ng English sa halip na Portuguese. Inaayos ito ng LocaleChain gamit ang mga configurable na fallback chain.
Ang LocaleChain ay isang open-source Swift package. Tingnan sa 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"]]
)Mga Karaniwang Pitfall
Mga Syntax Error sa .strings File
Hindi Naglo-localize ang SwiftUI Text Interpolation
Nagpapakita ng Raw Key ang Mga Widget/Extension
Ipinapakita ng Mga Nawawalang Pagsasalin ang Mga Key sa Production
Inirerekomendang File Structure
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.swiftSubukan ang i18n Agent Ngayon
I-drop dito ang inyong translation file
JSON, YAML, PO, XML, CSV, Markdown, Properties
o i-click para mag-browse
Mga target language
Locale Fallback gamit ang ios-localechain
Kapag nawawala ang translation key sa isang regional locale tulad ng de-AT, agad na tumatalon ang iOS diretso sa development language sa halip na i-check muna ang parent locale na 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"],
])Tingnan ang aming Locale Fallback Guide para sa buong listahan ng mga sinusuportahang framework at 75 built-in chain. Learn more →