SwiftUI应用本地化
SwiftUI应用本地化

SwiftUI应用本地化

本文以 SwiftUI + Xcode 项目 为例,系统梳理应用本地化的完整流程,涵盖:

1、本地化语种配置

2、应用标题(App Name)本地化

3、应用内容(界面文案)本地化

4、String Catalog 与传统 strings / stringsdict 的区别与选型

文中示例基于 Xcode 15实现,但整体思路不依赖具体版本,适用于 iOS / macOS 的 SwiftUI 项目。

本地化语种配置

首先本地化设置中添加本地化语种,添加路径:

左侧顶部应用 -> PROJECT -> 应用名称 -> Localizations。

然后在底部找到添加按钮。

然后将需要本地化的语种添加进来。

全部配置完成后,我们可以查看配置的语种列表,这里我将简体中文作为默认语种。

提示:中文开发者建议使用英文作文默认语种,避免出现缺失翻译时的显示问题。

本地化应用标题

1、创建InfoPlist.strings文件

在项目中新建一个 Strings File,命名必须为:

InfoPlist

注意:文件名必须严格为 InfoPlist,否则无法生效

2、启用多语言

选中 InfoPlist.strings 文件,在右侧 Localization 区域勾选需要支持的语种。

提示:

1、如果没有看到右侧面板,可点击右上角的侧边栏按钮展开。

2、勾选语种时建议从上到下顺序勾选,否则左侧生成的语言文件顺序会混乱,后期维护成本较高。

勾选完成后,Xcode 会在左侧自动生成对应语言的文件,例如:

InfoPlist (Chinese, Simplified)
InfoPlist (English)

3、配置 CFBundleDisplayName

在对应语种文件中添加:

"CFBundleDisplayName" = "存钱猪猪";

不同语种配置不同的显示名称即可。

此时,应用在不同系统语言环境下,将显示对应的应用名称。

本地化应用内容

SwiftUI 项目推荐使用 String Catalog 来管理本地化文本。

1、创建String Catalog

在项目中新建文件,选择:

String Catalog

找到名为:String Catalog的文件并双击进行创建。

创建完成后,Xcode 会自动生成一个名为 Localizable 的本地化资源。

注意:建议保持默认命名 Localizable,自定义命名可能导致某些场景下无法正确加载

点击非默认语种,比如French(Canada),显示本地化的字段。

这里我们可以看到多了一个Default Localization(zh-Hans),各字段的含义分别为:

1、Key表示本地化语言调取时的关键词,我们在视图中使用String(localized: Key)调取

2、Default Localization(zh-Hans)表示默认语种是中文以及对应的中文内容

3、本地化语种字段,表示需要翻译成对应的语种内容

4、Comment表示备注

其中需要注意的是,本地化的字段内容属于“牵一发而动全身”,新增一个文字内容就需要将全部的本地化字段进行汉化,工作量还是有的。比如我这个应用的提示内容大概20条左右,然后我设置了40个语种,工作量大概在6-8个小时左右,还是很费时间和精力的。

提示:在翻译本地化语种时,建议导入和导出批量翻译(可参考Apple的导入本地化导出本地化版本文章),或者使用Ai进行翻译能够减少大量的工作量,普通的翻译工具(Google翻译)可能无法正确的实现语义翻译,AI可以降低翻译的错误率。

实现效果

1、实现代码:

import SwiftUI

struct ContentView: View {
    var body: some View {
        let love = String(localized: "爱来自中国山东日照")
        VStack {
            Image(systemName: "globe")
                .imageScale(.large)
                .foregroundStyle(.tint)
            Text(love)
        }
        .padding()
    }
}

#Preview {
    ContentView()
}

2、预览效果:

相关文章

1、Xcode本地化失效问题:https://fangjunyu.com/2024/06/02/xcode%e6%9c%ac%e5%9c%b0%e5%8c%96%e5%a4%b1%e6%95%88%e9%97%ae%e9%a2%98/

2、Xcode本地化词条文件失效:https://fangjunyu.com/2024/06/05/xcode%e6%9c%ac%e5%9c%b0%e5%8c%96%e8%af%8d%e6%9d%a1%e6%96%87%e4%bb%b6%e5%a4%b1%e6%95%88/

3、Swift本地化显示异常问题:Localizable与插值不兼容:https://fangjunyu.com/2024/10/17/swift%e6%9c%ac%e5%9c%b0%e5%8c%96%e6%98%be%e7%a4%ba%e5%bc%82%e5%b8%b8%e9%97%ae%e9%a2%98%ef%bc%9alocalizable%e4%b8%8e%e6%8f%92%e5%80%bc%e4%b8%8d%e5%85%bc%e5%ae%b9/

4、Swift取消Text的自动本地化实现:https://fangjunyu.com/2024/10/18/swift%e5%8f%96%e6%b6%88text%e7%9a%84%e8%87%aa%e5%8a%a8%e6%9c%ac%e5%9c%b0%e5%8c%96%e5%ae%9e%e7%8e%b0/

5、Swift本地化应用名称失效问题:https://fangjunyu.com/2024/10/29/swift%e6%9c%ac%e5%9c%b0%e5%8c%96%e5%ba%94%e7%94%a8%e5%90%8d%e7%a7%b0%e5%a4%b1%e6%95%88%e9%97%ae%e9%a2%98/

附录

1、设置默认语种

左侧顶部应用 -> PROJECT -> 应用名称 -> Localizations,点击任意语种后,底部有一个“Set Default”按钮,可以设置默认语种。

   

如果您认为这篇文章给您带来了帮助,您可以在此通过支付宝或者微信打赏网站开发者。

欢迎加入我们的 微信交流群QQ交流群,交流更多精彩内容!
微信交流群二维码 QQ交流群二维码

发表回复

您的电子邮箱地址不会被公开。 必填项已用 * 标注