LocalizedStringKey 是 SwiftUI 中用于本地化字符串的类型,可以直接传递给 Text 视图或其他视图来进行本地化。它比 String(localized:) 更方便,特别是在 Text 和按钮等视图中。
LocalizedStringKey 在 Localizable.strings 文件中定义本地化键值,并通过 Text 直接引用这些键。
创建 Localizable.strings 文件

在创建文件时,搜索“String Catalog”文件。

创建完成后,点击左下角添加需要本地化的语言,并设置本地化文字内容。

代码示例
import SwiftUI
struct ContentView: View {
var body: some View {
VStack(spacing: 20) {
// 直接使用字符串键
Text("welcome") // ✅ 自动使用 LocalizedStringKey 进行本地化
// 使用 LocalizedStringKey 显式声明
Text(LocalizedStringKey("goodbye"))
// 使用动态键(变量)
let key = "username"
Text(LocalizedStringKey(key)) // ✅ 仍然可以解析
}
.padding()
}
}
在使用ForEach等遍历时,可以直接使用LocalizedStringKey。
ForEach(countrys,id: \.self) { country in
Text(LocalizedStringKey(country))
}
LocalizedStringKey vs String
LocalizedStringKey 会直接匹配 Localizable.strings 文件中的键进行本地化。
String 则不会自动进行本地化,需要使用 String(localized:) 或其他方法手动本地化。
// 使用 String 时不会自动本地化
let key = "welcome"
Text(key) // 这里 key 是一个 String,不会进行本地化
// 显式使用 LocalizedStringKey
let key = "welcome"
Text(LocalizedStringKey(key)) // 这里 key 会进行本地化
动态本地化:使用变量
根据用户的输入或动态值进行本地化,可以将字符串作为 LocalizedStringKey 传递:
struct ContentView: View {
let country = "China" // 动态键
var body: some View {
Text(LocalizedStringKey(country)) // ✅ 通过 Localizable.strings 查找对应的本地化值
}
}
使用 String(localized:) 进行插值
如果需要进行字符串插值并且希望本地化,可以使用 String(localized:tableName:bundle:):
let name = "张三"
Text(String(localized: "greeting", defaultValue: "Hello, %@!", arguments: [name]))
Localizable.strings 中:
"greeting" = "你好, %@!";
本地化按钮、文本字段等
LocalizedStringKey 也可以用于 Button、TextField 等其他视图:
Button("submit") {
print("按钮点击")
}
// Localizable.strings
// "submit" = "提交";
TextField("placeholder", text: $text)
// Localizable.strings
// "placeholder" = "请输入内容";
结合 Text 的字符串插值
如果要在 Text 中进行插值并本地化,可以使用 Text(verbatim:):
let itemCount = 5
Text("items_count \(itemCount)") // ❌ 不会自动本地化
// 使用带格式的方式
Text(String(localized: "items_count", arguments: [itemCount], defaultValue: "%d 个项目"))
// Localizable.strings
// "items_count" = "%d 个项目";
总结
LocalizedStringKey 直接用于 Text 等视图时,可以自动进行本地化。
如果有动态值或插值,可以使用 String(localized:) 进行本地化。
LocalizedStringKey 适用于静态和动态键,避免手动转换 String 的麻烦。