跳转至主要内容
iOS i18n

iOS 本地化:原生 Swift 和 SwiftUI 翻译工作流

iOS 使用 String Catalog(Xcode 15+)以及 .strings/.stringsdict 文件管理翻译。SwiftUI 视图通过 Text() 初始化器自动完成本地化,Xcode 负责提取、复数规则处理以及导出为 XLIFF 供译者使用。借助 String Catalog,您可以获得一个可视化编辑器,跟踪每个支持语言版本的翻译状态。

iOS 本地化功能

String Catalog(.xcstrings),提供可视化翻译编辑器和状态跟踪
通过 Text() 和 LocalizedStringKey 实现 SwiftUI 的自动本地化
通过 .stringsdict 和自动语法引擎处理复数形式和语法一致性
通过 Xcode 导出/导入 XCLOC 文件,实现专业译者的交接
Storyboard 和 XIB 本地化,集成 Interface Builder
Auto Layout 约束,可适应文本长度和布局方向的变化
支持从右到左 (RTL) 布局,采用 leading/trailing 布局语义
Foundation 格式化器,支持感知区域设置的日期、数字和度量单位格式化
使用 .lproj 目录对应用包进行本地化,管理各语言版本的资源

iOS 本地化实践

在 Text() 中使用字符串字面量时,SwiftUI 视图会自动完成本地化。String Catalog 在单个文件中管理复数形式和设备变体。

// SwiftUI - Automatic localization
struct WelcomeView: View {
    let name: String

    var body: some View {
        VStack {
            // Automatically looks up "Welcome to %@" in String Catalog
            Text("Welcome to \(name)")

            // Pluralization via String Catalog
            Text("^[\(itemCount) item](inflect: true)")

            // Date formatting respects locale
            Text(Date.now, format: .dateTime.month(.wide).day())
        }
    }
}

// Localizable.xcstrings (String Catalog)
// Managed in Xcode - supports:
// - Automatic extraction from SwiftUI
// - Pluralization rules per locale
// - String variation by device
// - Translation state tracking

iOS Localization — Frequently Asked Questions

What is the recommended approach for iOS localization in 2026?

Apple's recommended approach is String Catalogs (.xcstrings), introduced in Xcode 15. String Catalogs replace the older .strings and .stringsdict files with a single JSON-based file that supports all plural rules, device-specific variants, and string variations. Xcode automatically extracts localizable strings from your Swift and SwiftUI code, and tracks translation completion percentage per locale.

How does Better I18N work with Xcode and String Catalogs?

Better I18N uses its CLI to export translations from your String Catalogs, push them to the dashboard for professional translation or AI-assisted translation, then import the translated files back into Xcode. The workflow is: `better-i18n push` exports your .xcstrings file, translators work in the Better I18N dashboard, and `better-i18n pull` downloads the completed translations back into Xcode format. This replaces manual .xcloc file management.

What is the difference between NSLocalizedString and SwiftUI's native localization?

NSLocalizedString is the UIKit/AppKit API that looks up a key in your .strings bundle. SwiftUI's Text() view performs automatic localization — it uses the string literal as the key itself, which means your source code is self-documenting. Both approaches work with String Catalogs in Xcode 15+. For new SwiftUI projects, the automatic approach is cleaner; for UIKit projects maintaining existing .strings files, NSLocalizedString remains the standard.

How do I implement RTL (right-to-left) support on iOS?

iOS handles RTL layout automatically when the user selects an RTL language like Arabic or Hebrew. SwiftUI's layout system uses leading/trailing instead of left/right, and UIKit respects UIView.semanticContentAttribute. The key is to avoid hardcoded left/right margins and use Auto Layout with leading/trailing constraints. Better I18N supports Arabic and Hebrew as target languages and handles bidirectional text in the translation editor.

Can I use over-the-air (OTA) translation updates on iOS?

Apple's App Store review policy requires that core app functionality not change between reviews, but translation content updates are generally permitted via OTA mechanisms. Better I18N's native Swift SDK (BetterI18n) fetches translations from the CDN at runtime, allowing you to push translation corrections and new language support without an app store release. The SDK uses a two-phase load: it reads from local storage first for instant display, then refreshes from CDN in the background.

What pluralization rules does iOS support and how many are there?

iOS supports all Unicode CLDR plural categories: zero, one, two, few, many, and other. Not all languages use all categories — English only uses one and other, while Arabic uses all six. String Catalogs in Xcode 15 automatically show the relevant plural forms for each target locale. Better I18N's translation editor also surfaces the correct plural forms per language so translators never miss a required plural case.

立即开始 iOS 本地化

使用 AI 驱动的工作流、CLI 同步和延迟低于 50ms 的 CDN 分发,管理您的 iOS String Catalog 翻译。