Xcode15本地化应用程序名称和内容
Xcode15本地化应用程序名称和内容

Xcode15本地化应用程序名称和内容

前期提要

因为想要制作一款iOS软件应用,想着应用能够显示本地化的名称以及内容,比如日本使用显示日语、美国使用显示英文等。

环境配置

  • Mac Sonoma 14.5
  • Xcode Version 15.4 (15F31d)
  • iOS 17.5

本地化语种配置

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

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

然后在底部找到添加按钮

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

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

本地化应用标题

首先在项目中创建一个String文件

双击Strings File文件并进行创建,我设置的文件名称为InfoPlist,这个名称应该是可以自定义的。

然后依次勾选Localization列表中的各语种

注:如果没有找到右侧列表,可以点击右上角的侧边按钮展开。

注:点击右侧语种时要从上而下依次点击,左侧列表会根据右侧点击的顺序进行创建排序,如果点击右侧语种时是乱序,左侧显示的文件也是乱序,这会导致进行翻译对应时出现困难。

勾选完成后,我们可以发现左侧InfoPlist文件下面会自动创建对应的语种文件,比如我们要让应用在简体中文下显示“存钱猪猪”,我们可以在左侧找到InfoPlist ( Chinese, Simplified ) 文件并配置:

"CFBundleDisplayName" = "存钱猪猪";

其他语种则同样配置对应的CFBundleDisplayName字段。

实现效果如下:

本地化应用内容

在项目中新建一个本地化文件

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

创建完成后,会自动生成一个Localizable文件,我们可以点击这个文件,并将各语种进行本地化。

我们可以点击其他语种,比如French(Canada)

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

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

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

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

Comment表示备注

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

提示:在翻译本地化语种时,建议导入和导出批量翻译(可参考Apple的导入本地化导出本地化版本文章),或者使用Ai进行翻译能够减少大量的工作量,不建议逐条翻译,工作量巨大且难以维护。

实现效果

实现代码:

let love = String(localized: "爱来自中国山东日照")
Text(love)

预览效果:

全部代码:

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()
}

注:Localized后面的内容,就是我们前面提到Localizable文件中的Key字段。

附录

设置默认语种

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

主流语种列表

如果想要针对主要的人群进行本地化适配,根据SIL国际的民族语研究(夏季语言学研究院(2023年)),依母语使用人数排列

  1. 汉语(1,407,132,000)
  2. 西班牙语(532,000,000)
  3. 英语(322,000,000)
  4. 孟加拉语(189,000,000)
  5. 印地语/乌尔都语(182,000,000)
  6. 阿拉伯语(174,950,000)
  7. 葡萄牙语(170,000,000)
  8. 俄语(170,000,000)
  9. 日语(125,000,000)
  10. 德语(98,000,000)
  11. 法语(79,572,000)

大量语种列表

本次我打算涵盖大部分语种,因此我使用的本地化语种共40个:

  1. Chinese, Simplified – 简体中文
  2. Arabic – 阿拉伯语
  3. Catalan – 加泰罗尼亚语
  4. Chinese (Hong Kong) – 香港繁体中文
  5. Chinese, Traditional – 繁体中文
  6. Croatian – 克罗地亚语
  7. Czech – 捷克语
  8. Danish – 丹麦语
  9. Dutch – 荷兰语
  10. English – 英语
  11. English (Australia) – 英语(澳大利亚)
  12. English (India) – 英语(印度)
  13. English (United Kingdom) – 英语(英国)
  14. Finnish – 芬兰语
  15. French – 法语
  16. French (Canada) – 法语(加拿大)
  17. German – 德语
  18. Greek – 希腊语
  19. Hebrew – 希伯来语
  20. Hindi – 印地语
  21. Hungarian – 匈牙利语
  22. Indonesian – 印度尼西亚语
  23. Italian – 意大利语
  24. Japanese – 日语
  25. Korean – 韩语
  26. Malay – 马来语
  27. Norwegian Bokmål – 挪威语(博克马尔语)
  28. Polish – 波兰语
  29. Portuguese (Brazil) – 葡萄牙语(巴西)
  30. Portuguese (Portugal) – 葡萄牙语(葡萄牙)
  31. Romanian – 罗马尼亚语
  32. Russian – 俄语
  33. Slovak – 斯洛伐克语
  34. Spanish – 西班牙语
  35. Spanish (Latin America) – 西班牙语(拉丁美洲)
  36. Swedish – 瑞典语
  37. Thai – 泰语
  38. Turkish – 土耳其语
  39. Ukrainian – 乌克兰语
  40. Vietnamese – 越南语

CFBundleDisplayName和CFBundleName

CFBundleDisplayName 是显示在用户界面上的应用名称。这个名称会出现在主屏幕图标下面以及设备的设置中。当想要本地化应用名称时,通常会使用这个键。它允许不同的语言和地区设置不同的应用名称,以便用户可以在其本地语言中看到应用名称。CFBundleName

CFBundleName 是应用程序的内部名称,通常不会显示给用户。这个名称通常用于应用程序包的标识符和其他内部使用的配置。它可以是一个简短的标识符,通常由开发者设置,并且在不同的语言环境下不需要本地化。

  1. 显示位置
    • CFBundleDisplayName:显示在用户界面上,如主屏幕图标下面和设备的设置中。
    • CFBundleName:内部使用,通常不直接显示给用户。
  2. 用途
    • CFBundleDisplayName:用于本地化和用户界面展示。
    • CFBundleName:用于内部标识和应用程序包的配置。
  3. 本地化
    • CFBundleDisplayName:通常需要进行本地化,以便不同语言的用户看到本地化的应用名称。
    • CFBundleName:通常不需要本地化。

String catalog、strings File(Legacy)、Stringsdict File(Legacy)

在 Xcode 中,本地化字符串有多种存储和管理方式,包括 String Catalog、strings 文件(Legacy)、和 stringsdict 文件(Legacy)。它们各自有不同的用途和适用场景。下面详细介绍这三种方式及其区别:

1. String Catalog

概述

String Catalog 是 Xcode 12 及更高版本中引入的新特性,旨在简化和改进字符串管理和本地化流程。

特点

  • 集中管理:所有本地化字符串集中在一个地方,便于管理和维护。
  • 可视化编辑:提供图形界面,可以直接在 Xcode 中查看和编辑不同语言的字符串。
  • 支持复用:允许字符串在多个文件和模块之间复用。
  • 自动本地化:支持自动将字符串添加到适当的语言包中。
  • 性能优化:相比传统的 strings 文件,加载速度更快,性能更高。

使用场景

  • 大型项目:适用于有大量字符串需要管理和本地化的大型项目。
  • 频繁更新:适用于需要频繁更新本地化内容的项目。

2. strings 文件(Legacy)

概述

strings 文件是早期的本地化方式,依旧被广泛使用。它是一个简单的键值对文件,每一对键值代表一个本地化字符串。

特点

  • 文本格式:采用纯文本格式,容易阅读和编辑。
  • 简单直观:结构简单,适合小规模本地化。
  • 广泛支持:几乎所有的 iOS 和 macOS 项目都支持这种方式。

使用场景

  • 小型项目:适用于本地化需求不多的小型项目。
  • 简单本地化:适用于简单的键值对本地化,没有复杂的字符串复用需求。

3. stringsdict 文件(Legacy)

概述

stringsdict 文件用于管理包含复数形式的本地化字符串。它基于 XML 格式,能够处理更复杂的字符串替换和复数规则。

特点

  • 复数支持:提供对复数形式的支持,可以根据数量动态选择不同的字符串。
  • 复杂规则:适用于需要复杂字符串替换和规则的场景。
  • XML 格式:结构较为复杂,但功能强大。

使用场景

  • 复数形式:适用于需要处理复数形式的项目。
  • 复杂本地化规则:适用于本地化规则复杂的项目。

选择合适的方式

选择哪种本地化管理方式取决于项目需求:

  • String Catalog:推荐用于大型项目或频繁更新的项目,提供集中管理和更高的性能。
  • strings 文件(Legacy):适用于简单、本地化需求不高的项目,易于使用和维护。
  • stringsdict 文件(Legacy):适用于需要处理复数和复杂本地化规则的项目。

参考资料

  1. 为 App 扩展新市场:https://developer.apple.com/cn/localization/
  2. Localizing and varying text with a string catalog:https://developer.apple.com/documentation/xcode/localizing-and-varying-text-with-a-string-catalog
  3. 世界语言:https://zh.wikipedia.org/wiki/%E4%B8%96%E7%95%8C%E8%AA%9E%E8%A8%80
  4. How to localize bundle display name in iPhone app?https://stackoverflow.com/questions/2871990/how-to-localize-bundle-display-name-in-iphone-app

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

发表回复

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