0Pricing
Swift Academy · 课时

字符串目录与本地化字符串

使用现代 String Catalog 本地化文本。

字符串目录与本地化字符串 是 CoddyKit 上的免费 Swift Academy 课时。 这是第 1 节课,共 4 节。 你可以在下方免费阅读本课时的完整内容 — 然后在浏览器中使用内置代码编辑器和全天候 AI 导师进行实践。 这是 Swift Academy 学习路径的一部分,你的进度在网页和 CoddyKit 应用中同步。 Swift Academy 课程共包含 4 节课。

为什么要进行本地化

本地化(l10n)是指以用户的语言呈现应用文本;国际化(i18n)是指以便进行本地化为目标来组织代码。第一步是停止硬编码面向用户的字符串,改为从资源目录中获取它们。

// Hardcoded — bad for localization
// let title = "Welcome"

// Localized — looked up by key
let title = String(localized: "Welcome")

字符串目录

现代 Xcode 项目使用字符串目录(.xcstrings 文件)。它是一个由 JSON 支持的单一文件,列出每个可本地化的 key、各语言对应的翻译,以及注释和复数形式等元数据。Xcode 可以自动从代码中提取 key。

// Localizable.xcstrings holds entries like:
// key: "Welcome"
//   en: "Welcome"
//   tr: "Hos geldiniz"
//   ja: "Yokoso"

String(localized:)

在代码中,String(localized:) 会在运行时将 key 解析为当前区域设置下的翻译。您传入的字面量同时充当 key 和开发语言的 fallback。

let greeting = String(localized: "Welcome back")
let cancel = String(localized: "Cancel")
print(greeting)

为翻译人员添加注释

一个孤立的词语可能表示“执行”或“慢跑”。comment: 参数可以为翻译人员提供上下文,帮助他们选择正确的措辞。注释会自动流入字符串目录。

let runLabel = String(
    localized: "Run",
    comment: "Button that executes the user's code")

插入运行时值

您可以在本地化字符串中嵌入运行时值。Swift 会将每个插值转换为格式占位符,以便翻译人员重新排列它们。不同语言中,主语和数字的位置各不相同。

let name = "Mira"
let count = 3
let msg = String(localized: "\(name) has \(count) new messages")
print(msg)

SwiftUI 中的 LocalizedStringKey

在 SwiftUI 中,您很少会直接调用 String(localized:)。大多数接受文本的视图都会接收 LocalizedStringKey,因此普通字符串字面量会自动进行本地化。

// In SwiftUI — the literal is a LocalizedStringKey
// Text("Welcome back")        // auto-localized
// Button("Save") { save() }   // auto-localized
let key: LocalizedStringKey = "Welcome back"
_ = key

避免意外本地化

由于 SwiftUI 会将字面量视为 key,因此动态的 String 变量不会进行本地化。如果您通过拼接构建文本,字符串目录永远看不到真正的 key。需要本地化时,请传入单个字面量;明确不需要本地化时,请使用 verbatim:。

let userInput = "hello"
// Text(userInput)            // NOT a localization key
// Text(verbatim: userInput)  // explicitly raw, never localized
let verbatimKey = userInput
_ = verbatimKey

指定表

大型应用会将字符串拆分到多个目录(表)中。您可以指定目标表和捆绑包;当您要在框架或 Swift 软件包中随附字符串时,这一点至关重要。

let onboardingTitle = String(
    localized: "Get Started",
    table: "Onboarding",
    bundle: .main)

LocalizedStringResource

LocalizedStringResource 将可本地化字符串表示为一个可以存储并稍后解析的值,甚至可以跨进程使用(这对 App Intents 和小组件很有用)。它会将实际查找延迟到显示时。

let resource = LocalizedStringResource("Order shipped")
// Resolve later, possibly in another locale context
let resolved = String(localized: resource)
print(resolved)

默认本地化

项目的开发语言会在翻译缺失时提供 fallback。您在代码中编写的字符串字面量会被视为源语言值,因此代码保持可读,并且您永远不会将类似 welcome_screen_title 的原始 key 发布给用户。

// If only 'en' is translated and device is set to 'fr',
// the development-language value is shown as fallback.
let fallback = String(localized: "Settings")
print(fallback)

一次真实的查找

综合起来:一个返回完整本地化、带有上下文注释和插值、可供任何用户界面使用的消息的函数。

func welcomeMessage(for user: String) -> String {
    return String(
        localized: "Welcome, \(user)!",
        comment: "Greeting shown after sign-in")
}
print(welcomeMessage(for: "Ada"))

快速检查

回想 SwiftUI 如何决定是否对文本进行本地化。

总结

您已搭建本地化文本的基础:

  • 将翻译存储在字符串目录(.xcstrings)中。
  • 使用 String(localized:) 查找字符串,并添加 comment: 为翻译人员提供说明。
  • 在 SwiftUI 中,字面量会成为 LocalizedStringKey 并自动本地化;变量不会。
  • 对框架使用 table:/bundle:,并使用 LocalizedStringResource 进行延迟解析。

常见问题解答

「字符串目录与本地化字符串」课时是免费的吗?

是的 — 「字符串目录与本地化字符串」的完整文本可在网页上免费阅读。要进行交互式练习(内置代码编辑器和全天候 AI 导师)并解锁 Swift Academy 课程的其余内容,请升级到 CoddyKit PRO。 Swift Academy 课程共包含 4 节课。

「字符串目录与本地化字符串」这节课中我会学到什么?

使用现代 String Catalog 本地化文本。 你通过在浏览器中直接运行的动手代码来练习 Swift Academy,全天候 AI 导师会在你学习这节课的过程中回答你的问题。

学习 Swift Academy 需要有经验吗?

无需任何先前经验。CoddyKit 上的 Swift Academy 课程适合初学者到高级学习者,你可以从这里开始或从头开始,按照自己的节奏学习。 这是第 1 节课,共 4 节。

「字符串目录与本地化字符串」课时需要多长时间?

大多数 CoddyKit 课程大约需要 5–10 分钟。每节课都很精短且互动,所以你能稳步进步,并在网页和应用中从离开的地方继续。

我能在这节 Swift Academy 课中编写并运行代码吗?

能。每节 Swift Academy 课都包含内置代码编辑器,你可以在浏览器中直接编写并运行真实代码,并获得即时 AI 反馈 — 无需本地设置。

此课程中的所有课时

  1. 字符串目录与本地化字符串
  2. 复数形式与 Stringsdict
  3. 区域设置感知的格式化
  4. 从右到左与布局方向
← 返回 Swift Academy