app的多语言国际化

开发应用的时候遇到国际化业务,我们都会针对同一个App进行国际化适配,也就是语言本地化,不同地区的人打开应用会显示对应地区的语言和该有的图案。接下来从app名称、应用内字符串和图片三个方面来使用一下。

一、选择多种语言进行配置

  • 新建一个demo工程
  • 选中project->Info->Localizations,然后点击”+”,添加需要国际化/本地化的语言,如下图(默认需要勾选Use Base Internationalization)
  • 这里我们添加英语、汉语和简体中文,如下图:

二、应用名称多语言化

新建一个strings文件,名为infoPlist.strings,必须为infoPlist的名称,然后选中高亮这个文件,在xcode右边会出现Localization的选择,选中我们要进行国际化的三个语言,你会发现info.strings自动多出三个文件分别对应三个语言,如下图:

我们分别在对应的文件里面,对应的设置应用名称如下:

1
2
3
CFBundleDisplayName = "AppName";
CFBundleDisplayName = "앱 명칭";
CFBundleDisplayName = "应用名称";

将模拟器切换成韩语的环境,我们可以看到应用名称已经更改,其他语言也是如此

三、页面内字符串多语言化

对于页面内的任意字符而言,与上述较为接近。新建一个strings文件,名为Localizable.strings,必须为Localizable的名称,然后选中高亮这个文件,在xcode右边会出现Localization的选择,选中我们要进行国际化的三个语言,你会发现Localizable.strings自动多出三个文件分别对应三个语言。

Localizable的名字是为了和系统的方法进行关联,我们只需要使用Foundation框架自带的NSLocalizedString(key, comment)这个宏根据Key获取对应的字符串,然后赋值给代码中的字符串。

在对应的文件里面,对应的设置应用名称如下:

1
2
3
"home" = "home";
"home" = "명칭";
"home" = "首页";

然后在ViewController里面进行设置,统一设置为home字符串,代码如下:

1
2
3
4
5
6

UILabel *a = [[UILabel alloc] init];
a.text = NSLocalizedString(@"home",nil);
a.textColor = [UIColor blackColor];
[a sizeToFit];
[self.view addSubview:a];

然后我们调整为韩文环境,在模拟器中可以看到显示如下:

另外,如果的strings文件想要换个名字,比如多个人在协作开发的时候,要利用到别人的文件,这个时候,可以使用系统的NSLocalizedStringFromTable方法,调用是一样的,多一个参数用于传递别人的文件名称。

1
2
3
4
5
6

UILabel *a = [[UILabel alloc] init];
a.text = NSLocalizedStringFromTable(@"home","别人的文件名称",nil);
a.textColor = [UIColor blackColor];
[a sizeToFit];
[self.view addSubview:a];

四、图片的多语言化

  • 不同语言环境下不同名称

上述我们已经实现字符串的多语言,因为有imageNamed方法的存在,所以我们可以单独新建一份strings文件用于保存图片名称,这样在不同环境下会自动根据图片名称替换即可。

  • 不同语言环境下相同名称

我们拖入一个图片到工程里,然后选中图片,在右边进行localization,选中多个语言环境如下

然后我们选中图片show in finder进入文件夹,会发现自动生成了对应语言的文件夹,里面有相同名称的图片,这个时候我们对应替换文件就行了,名称依旧保持一致