Swift iOS macOS 如何 Localize StoryBoard,StoryBoard 本地化,添加多语言支持,基于 String

Swift iOS macOS 如何 Localize StoryBoard,StoryBoard 本地化,添加多语言支持,基于 String

本地化主要包含两个部分:代码中文本的本地化StoryBoard 中文本的本地化
iOSmacOS 是一样的
这里只介绍 StoryBoard 的本地化,代码中文本的本地化 请参阅这篇文章的前半部分,懒得说了

Internationalizing Your iOS App: Getting Started

前言:StoryBoard 的本地化分为两种方式

一种是基于一个 StoryBoard 文件,摘取其中的字符串生成不同语言的 .string 文件,来实现多语言支持
一种是基于多个 StoryBoard 文件,每个语言都对应一个文件,这样做很麻烦,只要改一处就需要改多个文件

所以我们只说基于多个 .string 文件的本地化操作

一、项目概览

有这样一个项目,结构是这样的,目前没有实现多语言支持,也就是本文中所谓的 本地化 Localization,这些词都是一个意思。

Swift iOS macOS 如何 Localize StoryBoard,StoryBoard 本地化,添加多语言支持,基于 String

二、给项目添加多语言支持

点击左侧项目,选择 [Project] 点选该项目,切到 [Info] 标签,点击下面的 [Localizations] 添加你需要支持的语言,如图:

Swift iOS macOS 如何 Localize StoryBoard,StoryBoard 本地化,添加多语言支持,基于 String

此时点选左侧项目栏中的 main.storyboard 文件,会看到右侧会有多种语言支持,点选你需要支持的语言。
再点开 main.storyboard 右侧的箭头时会看到下面多出两个文件 Main.string(English) Main.string(Chinese_Simple),这里面就包含了该 storybaord 文件中所有的字符串。
如图:

其实你还可以看到 Localization.string 文件下面也有两个语言文件,这个是用于程序代码中使用的字符串,具体查看开篇提到的那个教程文章

Swift iOS macOS 如何 Localize StoryBoard,StoryBoard 本地化,添加多语言支持,基于 String

三、翻译对应的文本

打开上面生成的文件,会看到如下的内容,进行翻译即可

Swift iOS macOS 如何 Localize StoryBoard,StoryBoard 本地化,添加多语言支持,基于 String

四、编译调试不同语言下的呈现状态

我们完成了多语言支持,那么如何调试呢? xcode 有相应的功能,来设置调试时的系统语言来,来实现调试应用在不同语言状态下的状态。

[点击项目名] 选择 [Edit Schema]

Swift iOS macOS 如何 Localize StoryBoard,StoryBoard 本地化,添加多语言支持,基于 String

Swift iOS macOS 如何 Localize StoryBoard,StoryBoard 本地化,添加多语言支持,基于 String

然后 [Run] - [Info] - [Language] 选择语言即可,这样再运行,就会显示对应语言的状态了

Swift iOS macOS 如何 Localize StoryBoard,StoryBoard 本地化,添加多语言支持,基于 String
Swift iOS macOS 如何 Localize StoryBoard,StoryBoard 本地化,添加多语言支持,基于 String

五、效果

以下是我这个应用在实现多语言支持后的效果: 中文英文
Swift iOS macOS 如何 Localize StoryBoard,StoryBoard 本地化,添加多语言支持,基于 String
Swift iOS macOS 如何 Localize StoryBoard,StoryBoard 本地化,添加多语言支持,基于 String

六、重要:修改 StoryBoard 之后如何添加新词

前面做的已经很好,但如果你修改了 StoryBoard ,添加或删除了部分字符串后,如何修改呢?
对应的 .string 中的字符串并不会跟着变,新加的字符串也不会自己出现在 .string 文件中。

此时我们就需要手动进行一下一系列操作,来把新的字符串添加到对应的语言中,让我们开始:

1. 导出最新版的字符串

点击 项目名,选择 [Editor] 菜单中的 [Export for Localization] 即可将当前 StroyBoardInfo.plist 对应的字符串都导出,然后选择保存位置
Swift iOS macOS 如何 Localize StoryBoard,StoryBoard 本地化,添加多语言支持,基于 String
Swift iOS macOS 如何 Localize StoryBoard,StoryBoard 本地化,添加多语言支持,基于 String

2. 修改对应的翻译文件

打开导出的文件夹看到如下结构,主要是修改其中的 xxx.xcloc/Localized Contents/xxx.xliff 文件,里面包含所有需要翻译的字符串

Swift iOS macOS 如何 Localize StoryBoard,StoryBoard 本地化,添加多语言支持,基于 String

打开看一下

Swift iOS macOS 如何 Localize StoryBoard,StoryBoard 本地化,添加多语言支持,基于 String

里面 <source> 标签中的文本是原文本, <target> 中的文本是翻译后的文本

Swift iOS macOS 如何 Localize StoryBoard,StoryBoard 本地化,添加多语言支持,基于 String
对于新添加的一些东西,是没有<target> 这个标签的,需要手动添加内容

Swift iOS macOS 如何 Localize StoryBoard,StoryBoard 本地化,添加多语言支持,基于 String

为了方便查找哪些没有翻译,Command + F 搜索正则 </source>\n *<note>,就可以很容易定位到没有翻译的地方了,添加相应内容即可

Swift iOS macOS 如何 Localize StoryBoard,StoryBoard 本地化,添加多语言支持,基于 String

3. 导入修改后的翻译文件

点击 项目名,选择 [Editor] 菜单中的 [Import Localization],选择你刚才修改的文件目录即可导入

Swift iOS macOS 如何 Localize StoryBoard,StoryBoard 本地化,添加多语言支持,基于 String

导入后会看到 .string 里面已经添加了对应的翻译条目

Swift iOS macOS 如何 Localize StoryBoard,StoryBoard 本地化,添加多语言支持,基于 String

如果有些内容没有翻译,它会提示你哪些没有被翻译,以如下的方式展示,再根据指示回去修改即可

Swift iOS macOS 如何 Localize StoryBoard,StoryBoard 本地化,添加多语言支持,基于 String

Swift iOS macOS 如何 Localize StoryBoard,StoryBoard 本地化,添加多语言支持,基于 String
Swift iOS macOS 如何 Localize StoryBoard,StoryBoard 本地化,添加多语言支持,基于 String

七、结

截图累死我了,不留下个赞就走,不太合适吧 ????