iOS开发-图文讲解语言国际化

iOS开发-图文讲解语言国际化_第1张图片
努力奔跑.jpg

前言:iOS的语言国际化是指根据用户手机系统的语言设置,自动将APP的语言设置为和用户手机系统语言一致的语言。通常一些APP需要支持多种语言,这就要求APP所展示的文字信息,能够在不同的系统语言下呈现出相对应的语言。本文将简单从以下常用的几方面进行图文讲解。

一、APP名称国际化

APP名称国际化是指同一个APP的名称,在不同的系统语言环境下显示不同的名称。
创建一个新的strings文件如图1-1:

iOS开发-图文讲解语言国际化_第2张图片
1-1.png

点击Next将文件命名为InfoPlist且必须是这个名字(这里有些电脑可能会显示出strings后缀,只需要改后缀前的名字即可)如图1-2:

iOS开发-图文讲解语言国际化_第3张图片
1-2.png

点击Create即创建成功在左侧列表会显示一个InfoPlist.strings文件如图1-3:

iOS开发-图文讲解语言国际化_第4张图片
1-3.png

此时选中该文件可以在右侧看到如图1-4:

iOS开发-图文讲解语言国际化_第5张图片
1-4.png

点击Localize...按钮即可显示出当前已添加的语言如图1-5:

iOS开发-图文讲解语言国际化_第6张图片
1-5.png

这里是由于我们还没有添加任何的语言只有一个默认的英语,现在可以添加一些我们需要的语言。如图1-6:

iOS开发-图文讲解语言国际化_第7张图片
1-6.png

这里我们添加简体中文和繁体中文如图1-7:

iOS开发-图文讲解语言国际化_第8张图片
1-7.png

这里选择了需要添加的资源文件即我们创建的InfoPlist.strings文件,创建完成后如图1-8:

iOS开发-图文讲解语言国际化_第9张图片
1-8.png

可以看到选择有三种语言:简体中文、繁体中文、英文。这三种语言都只有一个资源文件即我们的InfoPlist.strings文件。此时可以看到刚创建的InfoPlist.strings文件也发生了变化,在左侧出现了一个三角箭头,意味着该文件已经不是一个文件了,点击箭头可见里边包含了三个子文件如图1-9:

iOS开发-图文讲解语言国际化_第10张图片
1-9.png

同时选中主文件即当选选中的项查看右侧可见多了我们刚添加的语言如图1-10:

iOS开发-图文讲解语言国际化_第11张图片
1-10.png

从1-6至1-8这三步其实可以在工程创建的时候就可以添加,前提是Main.storyboard或者Launch.storyboard没有被删除,这时添加语言时是可以选择这两项的,要不无法添加。由于我的开发习惯是纯代码开发,故不用这两项,所以在创建文件的时候直接就给删除了。这样就需要在创建了strings文件之后再添加语言。

至此该创建的文件已创建完成,现在只需要在刚才图1-9的文件中按照固定格式(key = value)设置相应的名字即可,如图1-11至图1-13:

iOS开发-图文讲解语言国际化_第12张图片
1-11.png
iOS开发-图文讲解语言国际化_第13张图片
1-12.png
iOS开发-图文讲解语言国际化_第14张图片
1-13.png

CFBundleDisplayName为固定字段,可以加双引号也可以不加。
修改模拟器或者手机语言为英文、简体中文、繁体中文显示如图1-14至图1-16:

iOS开发-图文讲解语言国际化_第15张图片
1-14.png
iOS开发-图文讲解语言国际化_第16张图片
1-15.png
iOS开发-图文讲解语言国际化_第17张图片
1-16.png

至此,APP名称国际化已完成。

二、APP内字符串国际化

APP内字符串国际化实现有两种:
1、通过系统固定strings文件名称来实现;
创建strings文件如图2-1-1:

iOS开发-图文讲解语言国际化_第18张图片
2-1-1.png

点击Next将文件命名为Localizable且必须是这个名字(这里有些电脑可能会显示出strings后缀,只需要改后缀前的名字即可)如图2-1-2:

iOS开发-图文讲解语言国际化_第19张图片
2-1-2.png

点击Create即创建成功在左侧列表会显示一个Localizable.strings文件如图2-1-3:

iOS开发-图文讲解语言国际化_第20张图片
2-1-3.png

此时选中该文件可以在右侧看到如图2-1-4:

iOS开发-图文讲解语言国际化_第21张图片
2-1-4.png

点击Localize...按钮此时会弹出一个选择语言的弹框(这是由于当前工程包含的语言不止一种)如图2-1-5:

iOS开发-图文讲解语言国际化_第22张图片
2-1-5.png

选择一种语言点击Localize按钮即可如图2-1-6:

iOS开发-图文讲解语言国际化_第23张图片
2-1-6.png

现在显示的是我们刚才选择的那种语言,然后在这就可以对其他未选中的语言选择就行了,我们把未选中的两种语言均添加,选择语言大于一种,该strings文件会自动添加相应语言文件,即左侧会出现一个三角箭头如图2-1-7:

iOS开发-图文讲解语言国际化_第24张图片
2-1-7.png

现在我们只需要在相应的文件中按照固定格式(key = value)设置需要国际化的字符串即可。这里我们以标签栏标题为例如图2-1-8至图2-1-10:

iOS开发-图文讲解语言国际化_第25张图片
2-1-8.png
iOS开发-图文讲解语言国际化_第26张图片
2-1-9.png
iOS开发-图文讲解语言国际化_第27张图片
2-1-10.png

使用时需要用到Foundation框架下的一个宏NSLocalizedString(key, comment),该宏中包含两个参数ketcomment
key:我们在strings文件中的键(key)。
comment:对该字符串的描述(注释),可写nil或者@""或者任意字符串。
该宏的意思为根据传入的key来获取对应的字符串,如果没有找到相应的字符串会返回传入的key

代码中写法如图2-1-11:

2-1-11.png

修改模拟器或者手机语言为英文、简体中文、繁体中文我们来看一下显示效果如图2-1-12至图2-1-14:

iOS开发-图文讲解语言国际化_第28张图片
2-1-12.png
iOS开发-图文讲解语言国际化_第29张图片
2-1-13.png
iOS开发-图文讲解语言国际化_第30张图片
2-1-14.png

至此通过系统固定strings文件名称来实现APP内字符串国际化已完成。

2、通过自定义strings文件名称来实现。

通过自定义strings文件名称来实现语言国际化是为了在多人开发或者自己想发一个属于自己的第三方控件并添加语言国际化的时候使用。这是为了避免工程中已存在系统固定strings文件名称而产生冲突,同时也可以避免与其他人共用同一个strings文件而造成的不必要的麻烦。下面我们来简单讲解该实现方法。

创建strings文件如图2-2-1:

iOS开发-图文讲解语言国际化_第31张图片
2-2-1.png

点击Next将文件命名为RHLocalizable(这里有些电脑可能会显示出strings后缀,只需要改后缀前的名字即可)如图2-2-2:

iOS开发-图文讲解语言国际化_第32张图片
2-2-2.png

点击Create即创建成功在左侧列表会显示一个RHLocalizable.strings文件如图2-2-3:

iOS开发-图文讲解语言国际化_第33张图片
2-2-3.png

此时重复上图2-1-4至图2-1-7的操作。接下来我们在刚才创建的RHLocalizable文件中按照固定格式(key = value)设置需要国际化的字符串即可。这里我们以字符串“”为例如图2-2-4至图2-1-6:

iOS开发-图文讲解语言国际化_第34张图片
2-2-4.png
iOS开发-图文讲解语言国际化_第35张图片
2-2-5.png
iOS开发-图文讲解语言国际化_第36张图片
2-2-6.png

使用时需要用到Foundation框架下的一个宏NSLocalizedStringFromTable(key, tbl, comment),该宏中包含三个参数kettblcomment
key:我们在strings文件中的键(key)。
tbl:我们创建的strings文件的名称。
comment:对该字符串的描述(注释),可写nil或者@""或者任意字符串。
该宏的意思为根据传入的key在名为tblstrings文件中来获取对应的字符串,如果没有找到相应的字符串会返回传入的key

使用时代码中写法如图2-2-7:

iOS开发-图文讲解语言国际化_第37张图片
2-2-7.png

修改模拟器或者手机语言为英文、简体中文、繁体中文我们来看一下显示效果如图2-2-8至图2-2-10:

iOS开发-图文讲解语言国际化_第38张图片
2-2-8.png
iOS开发-图文讲解语言国际化_第39张图片
2-2-9.png
iOS开发-图文讲解语言国际化_第40张图片
2-2-10.png

至此通过自定义strings文件名称来实现APP内字符串国际化已完成。

由上可见无论是使用系统固定strings文件名还是自定义strings文件名的语言国际化在使用的时候都要使用到系统提供的相应的宏,但是这两个宏都比较长并且并不是所有的参数都是每次需要改变的,所以我们在使用的时候可以通过系统的宏来再次定义两个写起来比较简短的宏来提高开发写代码效率,并且也能稍微的提高一下代码的美观。
这里给大家暴露一下我的使用习惯如下:

#define   LS(key)          NSLocalizedString(key, nil)
#define   RHLS(key)        NSLocalizedStringFromTable(key, @"RHLocalizable", nil)

最后,还是希望能够帮助到有需要的朋友们,愿我们能够一起学习进步,在开发的道路上越走越顺利!!!

你可能感兴趣的:(iOS开发-图文讲解语言国际化)