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

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

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

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

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

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

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

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

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

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

从1-6至1-8这三步其实可以在工程创建的时候就可以添加,前提是Main.storyboard或者Launch.storyboard没有被删除,这时添加语言时是可以选择这两项的,要不无法添加。由于我的开发习惯是纯代码开发,故不用这两项,所以在创建文件的时候直接就给删除了。这样就需要在创建了strings
文件之后再添加语言。
至此该创建的文件已创建完成,现在只需要在刚才图1-9的文件中按照固定格式(key = value)设置相应的名字即可,如图1-11至图1-13:



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



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

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

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

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

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

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

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

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



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

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



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

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

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

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



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

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



至此通过自定义strings
文件名称来实现APP内字符串国际化已完成。
由上可见无论是使用系统固定strings
文件名还是自定义strings
文件名的语言国际化在使用的时候都要使用到系统提供的相应的宏,但是这两个宏都比较长并且并不是所有的参数都是每次需要改变的,所以我们在使用的时候可以通过系统的宏来再次定义两个写起来比较简短的宏来提高开发写代码效率,并且也能稍微的提高一下代码的美观。
这里给大家暴露一下我的使用习惯如下:
#define LS(key) NSLocalizedString(key, nil)
#define RHLS(key) NSLocalizedStringFromTable(key, @"RHLocalizable", nil)
最后,还是希望能够帮助到有需要的朋友们,愿我们能够一起学习进步,在开发的道路上越走越顺利!!!
网友评论