SwiftUI-国际化(二)

介绍

SwiftUI-国际化一文中,我们详细介绍了国际化的内容。在 Xcode 15 之后,Apple 提供了一种新的国际化方式,通过引入String Catalog,使得处理国际化更加高效与便捷。

特点

  • Info.plist 文件国际化需要新建一个String Catelog,必须命名为InfoPlist.xcstrings
  • 文本国际化需要新建一个String Catelog,必须命名为Localizable.xcstrings
  • Xcode 为xcstrings文件提供了可视化的编辑界面,并且会显示每一种语言的国际化完成比例。
  • 编译时可以自动提取需要国际化的内容到xcstrings文件。

案例

  1. 配置国际化语言。
  2. 新建Localizable.xcstrings
  3. SwiftUI 代码。
swift 复制代码
import SwiftUI

struct ContentView: View {
    let temperature = 10

    var body: some View {
        VStack {
            // 纯文本
            Text(String(localized: "title", defaultValue: "Kindly Reminder"))

            // 自定义View
            MessageView(String(localized: "message", defaultValue: "Weather Information"))

            // 插值
            Text(String(localized: "weather",
                        defaultValue: "Weather is \(String(localized: "localizedWeather", defaultValue: "Sunny"))"))

            Text(String(localized: "temperature",
                        defaultValue: "Temperature is \(temperature) ℃"))
        }
        .padding()
    }
}

struct MessageView: View {
    let message: String

    init(_ message: String) {
        self.message = message
    }

    var body: some View {
        Text(message)
    }
}
  1. 编译项目,可以自动提取需要国际化的内容到xcstrings文件。
  2. 在 Xcode 提供的可视化的界面进行国际化内容的编辑,并且会显示每一种语言的国际化完成比例。

  1. 运行并且测试。

效果

  • 英文。

  • 中文。

相关推荐
HarderCoder5 小时前
我们真的需要 typealias 吗?——一次 Swift 抽象成本的深度剖析
swift
HarderCoder6 小时前
ByAI-Swift 6 全览:一份面向实战开发者的新特性速查手册
swift
HarderCoder7 小时前
Swift 中 let 与 var 的真正区别:不仅关乎“可变”与否
swift
HarderCoder7 小时前
深入理解 Swift 6.2 并发:从默认隔离到@concurrent 的完整指南
swift
麦兜*1 天前
Swift + Xcode 开发环境搭建终极指南
开发语言·ios·swiftui·xcode·swift·苹果vision pro·swift5.6.3
大熊猫侯佩3 天前
「内力探查术」:用 Instruments 勘破 SwiftUI 卡顿迷局
swiftui·debug·xcode
HarderCoder3 天前
Swift Concurrency:彻底告别“线程思维”,拥抱 Task 的世界
swift
HarderCoder3 天前
深入理解 Swift 中的 async/await:告别回调地狱,拥抱结构化并发
swift
HarderCoder3 天前
深入理解 SwiftUI 的 ViewBuilder:从隐式语法到自定义容器
swiftui·swift
HarderCoder3 天前
在 async/throwing 场景下优雅地使用 Swift 的 defer 关键字
swift