Swift 中的国际化 (i18n) 适用于 iOS 和 macOS

面向初学者的在线Python训练器

轻松学习Python,无需理论负担。在浏览器中直接解决带自动检查的实践任务,无需安装任何东西。

开始课程

Swift 中的国际化 (i18n):iOS 和 macOS 完整指南



国际化(简称 i18n)是指设计应用程序的过程,使其能够适应不同的语言和地区,而无需修改源代码。对于 Apple 平台(iOS、macOS、watchOS、tvOS)的开发者来说,Swift 提供了一套强大且优雅的工具。在本文中,我们将详细讨论如何使用 Apple 内置机制在您的 Swift 项目中配置 i18n。



为什么 i18n 至关重要?

即使您的应用程序最初只用一种语言创建,国际化也应在架构阶段就考虑进去。这可以:

  • 扩大受众:来自不同国家的用户更喜欢使用母语应用程序。
  • 简化本地化:正确的 i18n 将添加新语言变成简单的文件操作。
  • 避免硬编码:所有字符串都提取到单独的资源中,从而提高代码的可读性和可维护性。


核心工具:NSLocalizedString

Swift 中国际化的核心是宏 NSLocalizedString。它会在本地化文件(.strings)中查找字符串,并返回翻译后的版本。如果未找到翻译,则使用键(通常是英文字符串)。



// Swift 中的使用示例let welcomeMessage = NSLocalizedString("welcome_message", comment: "主屏幕上的问候语")label.text = welcomeMessage


建议始终指定 comment——它有助于翻译人员理解上下文。



本地化文件结构

在 Xcode 中,通过 Project Settings > Info > Localizations 添加语言。之后会创建 xx.lproj 文件夹(例如 en.lproj、ru.lproj)。其中包含:

  • Localizable.strings — 包含“键” = “值”对的主文件;
  • InfoPlist.strings — 用于本地化应用程序名称和系统字符串;
  • Storyboard.strings — 为在故事板中创建的界面自动生成的文件。


Localizable.strings 格式

文件语法简单:

// 英语 (en.lproj/Localizable.strings)"welcome_message" = "Welcome to our app!";"login_button" = "Log In";

// 俄语 (ru.lproj/Localizable.strings)"welcome_message" = "Добро пожаловать в наше приложение!";"login_button" = "Войти";


重要提示:字符串以分号结尾。文件编码应为 UTF-8 或 UTF-16。



带参数的字符串格式化

通常需要在字符串中插入动态数据(用户名、项目数量)。为此使用 String(format:):



// 在 Localizable.strings 中:"items_count" = "You have %d items.";"user_greeting" = "Hello, %@!";

// 在 Swift 代码中:let count = 5let itemsText = String(format: NSLocalizedString("items_count", comment: "项目数量"), count)

let userName = "Алексей"let greeting = String(format: NSLocalizedString("user_greeting", comment: "用户问候语"), userName)


要支持复数形式(1 个苹果,2 个苹果,5 个苹果),请使用 StringDict(.stringsdict 文件)。



为翻译人员使用 XLIFF

Apple 支持 XLIFF(XML 本地化交换文件)格式。这是用于交换翻译的行业标准。在 Xcode 中,您可以将所有字符串导出到 XLIFF 文件,交给翻译人员,然后再导入回来。



// 用于导出的终端命令:xcodebuild -exportLocalizations -localizationPath ./translations -project YourProject.xcodeproj

// 导入完成的翻译:

推荐