iOS 应用本地化与后续学习资源指南
1. 应用本地化
1.1 图像本地化
在进行应用本地化时,图像本地化是重要的一环。以国旗图像为例,我们可以直接在 nib 文件中为图像视图选择不同的图像来实现本地化,但这里我们选择直接对国旗图像本身进行本地化。
操作步骤如下:
1. 退出模拟器并确保应用停止运行。
2. 在 Xcode 中,在项目导航器中单击
flag.png
。
3. 打开文件检查器,找到当前为空的“Localization”部分。
4. 确保仍选中
flag.png
,然后按下“Localization”部分底部的“+”按钮,Xcode 会为该文件添加英文本地化,并将
flag.png
移动到
en.lproj
文件夹中。
5. 再次确保选中
flag.png
,使用文件检查器的“Localization”部分添加新的本地化,选择法语,此时
flag.png
会立即显示一个展开图标,展开后可看到两个国旗副本,分别标记为英文和法语。
6. 切换到 Finder 和项目目录,会看到
en.lproj
和
fr.lproj
文件夹中各包含一个
flag.png
文件,
fr.lproj
中的是原始文件的副本,并非正确图像。由于 Xcode 不能编辑图像文件,可通过 Finder 将正确图像复制到项目中。具体操作为:前往
21 - LocalizeMe
文件夹,打开
Images
文件夹,再打开
French
文件夹,用该文件夹中的
flag.png
文件替换
LocalizeMe/fr.lproj
中的
flag.png
。
7. 在 Xcode 中,单击项目导航器中的图像文件
flag.png (French)
,应能看到法国国旗。
8. 再次运行应用,如果未看到正确图像,可能是模拟器或设备缓存了美国国旗版本。若在模拟器中运行,可先退出应用(不退出模拟器),切换到 Xcode 停止应用,返回模拟器选择“iOS Simulator > Reset Contents and Settings”重置模拟器,然后退出模拟器,返回 Xcode 选择“Product > Clean”强制完全重建,再次运行应用,运行后需重置地区和语言以显示法国国旗;若仍不行,可尝试重置模拟器、退出模拟器、执行“Product > Clean”、退出 Xcode,然后重新开始。若在设备上运行,可使用 Xcode 的“Organizer”窗口移除旧应用,选择“Window > Organizer”打开“Organizer”窗口,在“Devices”标签下,选择设备的“Applications”项,找到
LocalizeMe
并点击“-”按钮移除旧版本应用及其相关缓存,然后选择“Project > Clean”,完成后重新构建并运行应用,应用启动后需重置地区和语言。
graph LR
A[退出模拟器并停止应用] --> B[在Xcode中单击flag.png]
B --> C[打开文件检查器找到Localization部分]
C --> D[按下+按钮添加英文本地化]
D --> E[再次选中flag.png添加法语本地化]
E --> F[切换到Finder替换图像]
F --> G[在Xcode中查看French图像]
G --> H[运行应用]
H --> I{看到正确图像?}
I -- 否 --> J{模拟器运行?}
J -- 是 --> K[重置模拟器等操作]
J -- 否 --> L[在设备上移除旧应用等操作]
I -- 是 --> M[完成]
1.2 字符串文件生成与本地化
在应用中,视图右侧的文字可能仍为英文,需要生成基础语言字符串文件并进行本地化。
操作步骤如下:
1. 启动
/Applications/Utilities/
中的
Terminal.app
,在终端窗口中输入
cd
加一个空格,不要按回车键。
2. 在 Finder 中,将项目文件夹
21 - LocalizeMe
拖到终端窗口,路径会显示在命令行上,然后按回车键,将终端会话从默认目录切换到项目目录。
3. 运行
genstrings
程序,在终端中输入命令
genstrings ./LocalizeMe/*.m
并按回车键,该命令会查找
Classes
文件夹中
.m
文件里所有
NSLocalizedString
的出现位置。
4. 命令执行完成后,在 Finder 的项目文件夹中找到名为
Localizable.strings
的新文件,将其拖到 Xcode 项目导航器的
LocalizeMe
文件夹中,提示时先取消勾选“Copy items into destination group’s folder (if needed)”,因为文件已在项目文件夹中,然后点击“Finish”导入文件。
5. 导入文件后,单击
Localizable.strings
,该文件包含五个条目,如下所示:
/* The number 5 */
"Five" = "Five";
/* The number 4 */
"Four" = "Four";
/* The number 1 */
"One" = "One";
/* The number 3 */
"Three" = "Three";
/* The number 2 */
"Two" = "Two";
-
对
Localizable.strings进行本地化,确保选中该文件,打开文件检查器,在“Localizations”部分点击“+”按钮创建英文本地化,可能会取消选择文件,但会创建英文本地化,重新选中Localizable.strings,再次点击“+”按钮创建法语本地化。 - 在项目导航器中选择文件的法语本地化,在编辑器中进行如下更改:
/* The number 5 */
"Five" = "Cinq";
/* The number 4 */
"Four" = "Quatre";
/* The number 1 */
"One" = "Un";
/* The number 3 */
"Three" = "Trois";
/* The number 2 */
"Two" = "Deux";
- 保存、编译并运行应用,应能看到相关数字已翻译成法语。
1.3 应用显示名称本地化
应用显示名称本地化也是常见需求,应用用于显示的名称存储在
Info.plist
文件中,在本例中为
LocalizeMe-Info.plist
,可在
Supporting Files
文件夹中找到。
操作步骤如下:
1. 选择该文件进行编辑,会看到其中的
Bundle display name
项当前设置为
${PRODUCT_NAME}
,这意味着 Xcode 编译应用时,该项的值将被替换为 Xcode 项目中的产品名称。
2. 由于
Info.plist
文件不能直接本地化,需要对
InfoPlist.strings
文件进行本地化,该文件在每个 Xcode 创建的项目中都已包含。在
Supporting Files
文件夹中找到
InfoPlist.strings
文件,使用文件检查器的“Localizations”部分按照之前的本地化步骤创建法语本地化。
3. 要定义应用的显示名称,在
LocalizeMe-Info.plist
文件中看到的
Bundle display name
并非真正的键名,真正的键名是
CFBundleDisplayName
,可通过选择
LocalizeMe-Info.plist
,右键单击视图并选择“Show Raw Keys/Values”来验证。
4. 选择
InfoPlist.strings
的英文本地化,添加以下行:
CFBundleDisplayName = "Localize Me";
-
选择
InfoPlist.strings的法语本地化,编辑文件为应用提供合适的法语名称:
CFBundleDisplayName = "Localisez Moi";
- 若此时在模拟器中构建并运行应用,可能看不到新名称,因为 iOS 可能会缓存应用信息。若在法语环境下运行模拟器但未看到新名称,可从模拟器中删除应用,返回 Xcode 重新构建并运行应用。
2. 后续学习资源
2.1 苹果文档
Xcode 的文档浏览器是获取大量有价值信息的前端工具,包括示例源代码、概念指南、API 参考、视频教程等。通过浏览苹果文档,能深入了解 iOS 的各个方面,熟悉苹果文档后,在面对新的技术和未知领域时会更容易应对。Xcode 的文档浏览器与访问苹果开发者网站(http://developer.apple.com)获取的信息相同。
2.2 邮件列表
以下是一些值得注册的邮件列表:
| 邮件列表名称 | 简介 | 链接 |
| — | — | — |
| Cocoa-dev | 由苹果运营的中等高流量列表,主要关于 Mac OS X 的 Cocoa,由于 Cocoa 和 Cocoa Touch 有共同渊源,列表中的许多人可能能提供帮助,提问前需先搜索列表存档。 | http://lists.apple.com/mailman/listinfo/cocoa-dev |
| Xcode-users | 苹果维护的列表,专门针对与 Xcode 相关的问题。 | http://lists.apple.com/mailman/listinfo/xcode-users |
| Quartz-dev | 苹果维护的用于讨论 Quartz 2D 和 Core Graphics 技术的邮件列表。 | http://lists.apple.com/mailman/listinfo/quartz-dev |
| Cocoa-unbound | 旨在讨论 Mac 和 iOS 开发,2010 年出现,以应对苹果运营列表有时过于严格的审核,发帖量较低,话题范围更广。 | http://groups.google.com/group/cocoa-unbound |
| IPhone SDK Development | 第三方列表,专注于 iOS 开发,有中等规模的社区和一些常客。 | http://groups.google.com/group/iphonesdkdevelopment |
2.3 讨论论坛
以下讨论论坛可用于发布问题:
| 论坛名称 | 简介 | 链接 |
| — | — | — |
| iphonedevbook.com | 活跃的社区,成员有购买相关资料的智慧和判断力。 | http://iphonedevbook.com |
| Apple Developer Forums | 苹果专门为讨论 iOS 和 Mac 软件开发设置的网络论坛,许多 iOS 程序员(包括苹果工程师和宣传人员)会参与,也是合法讨论保密协议下 SDK 预发布版本问题的唯一地方,需使用 Apple ID 登录访问。 | http://devforums.apple.com |
| Apple Discussions, Developer Forums | 连接到苹果的 Mac 和 iOS 软件开发社区论坛。 | http://discussions.apple.com/category.jspa?categoryID=164 |
| Apple Discussions, iPhone | 连接到苹果讨论 iPhone 的社区论坛。 | http://discussions.apple.com/category.jspa?categoryID=201 |
2.4 网站
以下网站可获取有用的编码建议:
| 网站名称 | 简介 | 链接 |
| — | — | — |
| CocoaHeads | 致力于 Cocoa 同行支持和推广的组织网站,专注于当地定期聚会的小组,Cocoa 开发者可聚在一起互相帮助和社交。 | http://cocoaheads.org |
| NSCoder Night | Cocoa 程序员每周组织的聚会,用于编码和社交,是独立组织的当地活动。 | http://nscodernight.com |
| Stack Overflow | 面向程序员的社区问答网站,许多有经验的 iOS 程序员会在此回答问题。 | http://stackoverflow.com |
| iDeveloper TV | 提供 iOS 和 Mac 开发深入视频培训的资源,需付费,也有一些免费视频内容,大多来自
NSConference
。 | http://ideveloper.tv |
在 iOS 开发中,尽可能对应用进行本地化可提高应用销量,即使不打算本地化应用,也应养成在代码中使用
NSLocalizedString
而非静态字符串的习惯,这样在需要翻译应用时会更加轻松。同时,当遇到难题时,可利用上述丰富的学习资源来解决问题。
iOS 应用本地化与后续学习资源指南(续)
3. 总结与建议
3.1 本地化总结
- 图像本地化 :通过对图像文件本身进行本地化,能让应用根据不同语言环境显示合适的图像。但要注意缓存问题,在模拟器或设备上运行时,若图像未正确显示,需按相应步骤清除缓存。
-
字符串文件本地化
:生成并本地化字符串文件可实现视图文字的翻译。不过要注意,一旦对字符串文件进行了其他语言的本地化,就不要更改
NSLocalizedString()宏中使用的文本,否则可能导致翻译无法正确显示。 -
应用显示名称本地化
:虽然
Info.plist文件不能直接本地化,但可通过本地化InfoPlist.strings文件来实现应用显示名称的本地化。同样要注意 iOS 可能会缓存应用信息,若未看到新名称,需删除应用重新构建运行。
graph LR
A[图像本地化] --> B[解决缓存问题]
C[字符串文件本地化] --> D[不更改关键文本]
E[应用显示名称本地化] --> F[处理缓存问题]
B --> G[正确显示图像]
D --> H[正确显示翻译文字]
F --> I[正确显示应用名称]
3.2 学习资源利用建议
- 苹果文档 :作为学习 iOS 开发的重要资源,应熟练使用 Xcode 的文档浏览器,它能帮助我们深入了解 iOS 各个方面的知识,在面对新技术和未知领域时能更从容应对。
- 邮件列表 :在遇到问题时,可先在邮件列表的存档中搜索答案。若未找到,再向列表中的成员提问,但要注意提问的方式和礼貌。
-
讨论论坛
:积极参与讨论论坛,与其他开发者交流经验和解决问题。在
Apple Developer Forums上,还能与苹果工程师和宣传人员进行互动,获取更专业的帮助。 -
网站
:不同的网站有不同的特点和优势,可根据自己的需求选择合适的网站进行学习。例如,
Stack Overflow适合查找常见问题的解决方案,iDeveloper TV适合进行深入的视频学习。
4. 常见问题解答
4.1 图像本地化问题
- 问题 :在模拟器或设备上运行应用时,图像未正确显示怎么办?
- 解答 :若在模拟器中运行,可先退出应用(不退出模拟器),切换到 Xcode 停止应用,返回模拟器选择“iOS Simulator > Reset Contents and Settings”重置模拟器,然后退出模拟器,返回 Xcode 选择“Product > Clean”强制完全重建,再次运行应用,运行后需重置地区和语言以显示正确图像;若仍不行,可尝试重置模拟器、退出模拟器、执行“Product > Clean”、退出 Xcode,然后重新开始。若在设备上运行,可使用 Xcode 的“Organizer”窗口移除旧应用,选择“Window > Organizer”打开“Organizer”窗口,在“Devices”标签下,选择设备的“Applications”项,找到应用并点击“-”按钮移除旧版本应用及其相关缓存,然后选择“Project > Clean”,完成后重新构建并运行应用,应用启动后需重置地区和语言。
4.2 字符串文件本地化问题
-
问题
:更改了
NSLocalizedString()宏中使用的文本后,翻译无法正确显示怎么办? - 解答 :需要更新本地化字符串文件或重新进行翻译。因为基础语言版本的字符串被用作检索翻译的键,若更改了这些键,就需要相应地更新翻译内容。
4.3 应用显示名称本地化问题
- 问题 :在模拟器中构建并运行应用,未看到新的应用显示名称怎么办?
- 解答 :由于 iOS 可能会缓存应用信息,可从模拟器中删除应用,返回 Xcode 重新构建并运行应用。
5. 结语
iOS 应用本地化能提升应用的用户体验和市场竞争力,让应用在不同语言和地区的用户中更受欢迎。同时,丰富的学习资源为开发者在遇到问题时提供了有力的支持。在开发过程中,要养成良好的编码习惯,如使用
NSLocalizedString
进行字符串处理,以便在需要本地化时更加轻松。不断学习和利用各种资源,开发者就能在 iOS 开发的道路上不断前进,创造出更优秀的应用。
通过遵循上述的本地化步骤和利用学习资源,相信开发者们能更好地应对 iOS 开发中的各种挑战,实现自己的开发目标。希望大家在 iOS 开发的旅程中取得成功!
超级会员免费看
795

被折叠的 条评论
为什么被折叠?



