iOS开发 App本地化(开发日记)
简书新人,写的不好的地方,还请指出。
前期准备
先点击工程
->PROJECT
->Localizations
添加你要本地化的语言
![](https://img.haomeiwen.com/i1909630/cf27aaea72ba3af4.png)
如果是已经本地化过的项目,这里添加之后会弹出
![](https://img.haomeiwen.com/i1909630/0212bd5b34959e25.png)
Resource File
是需要本地化为你刚刚选择的语言的项目,Reference Language
是本地化文件生成时使用的模板,一般默认即可。
1,App名称(以我的Xcode9.2为例)
点击工程
->TARGETS
->General
![](https://img.haomeiwen.com/i1909630/af0a72afb62daf30.png)
会看到如下界面,在Display Name
一项填写你的App名称(中英文都可)
,不填可能会导致编译不通过,填写完成之后,Xcode
会自动在工程的info.plist
里面生成此字段。
此后要在工程目录下新建一个strings
文件
![](https://img.haomeiwen.com/i1909630/1a71a3517fd66e92.png)
并命名为InfoPlist
(不要问我为什么)
![](https://img.haomeiwen.com/i1909630/f54b50138bb0a70e.png)
点击该文件,在Xcode
最右边会出现此界面
![](https://img.haomeiwen.com/i1909630/eb887e956c6a4d8b.png)
点击Localize...
按钮
![](https://img.haomeiwen.com/i1909630/ff2fddbc81a73fa0.png)
点击Localize
,本地化此语言,一般默认即可。完成之后刚才的Localize...
按钮位置的地方会变成这样
![](https://img.haomeiwen.com/i1909630/772537d4f797c70a.png)
勾选你要本地化的语言即可。
之后文件就变成了这种状态,包含各种语言,应用安装时或者系统语言切换时会自动加载各语言文件,来设置不同语言的App名称
![](https://img.haomeiwen.com/i1909630/88486ad650a718f8.png)
选中一个
![](https://img.haomeiwen.com/i1909630/9be188ae7ec0adb6.png)
![](https://img.haomeiwen.com/i1909630/f45bcafadf93e2f1.png)
这里用到了CFBundleDisplayName
这个key,这个key是设置App名称
的,按照此方法设置好对应语言App名称
即可(这里和开头设置的Display Name
字段不冲突,如果这里设置的话,就会按照这里的来显示)。
2,本地化图片
(1)直接本地化
大致与上面的一样,选中需要本地化的文件,点击Localize...
按钮,勾选你需要本地化的语言即可。
之后就变成了这样
![](https://img.haomeiwen.com/i1909630/a1e75dc66784ca40.png)
注:Assets.xcassets里面的图片不能直接本地化
然后右键点击文件
![](https://img.haomeiwen.com/i1909630/6888d29090e7b445.png)
去到工程目录下,
![](https://img.haomeiwen.com/i1909630/821fe5850b3fc9ba.png)
在 对应的语言文件夹 下,复制替换 对应图片的对应语言版本 就好了,可以看到此时这个图片现在是在en
英文语言文件夹下
那么我们就把他替换为 英文版图片 就好了,同理, 中文 或者 其他语言版本的图片 的步骤一样。
(2)间接本地化
请看文末
3,本地化字符串
和本地化App名称
一样,先创建一个strings
文件,并命名为Localizable
(还是不要问我为什么)
接下来选中文件,点击Localize...
按钮,勾选你要本地化的语言
![](https://img.haomeiwen.com/i1909630/00971c057549ab7a.png)
然后可以在里面以key
=value
的形式添加一项
![](https://img.haomeiwen.com/i1909630/08f8f322d8e5db7d.png)
![](https://img.haomeiwen.com/i1909630/628d481219ba74a7.png)
在你的代码里面,找到需要本地化的字符串,加上NSLocalizedString()
NSString *title = NSLocalizedString(@"viewVC_title", nil);
![](https://img.haomeiwen.com/i1909630/b96cca73eb3979e5.png)
这样title
的值在英文环境下显示为hahaha
在中文简体环境下显示为哈哈哈
注:此NSLocalizedString()宏的返回值为NSString类型,因此可以直接当做NSString*对象来使用,如
self.title = NSLocalizedString(@"viewVC_title", nil);
[button setTitle:NSLocalizedString(@"viewVC_buttontitle", nil) forState:UIControlStateNormal];
![](https://img.haomeiwen.com/i1909630/0164188a4cb56173.png)
![](https://img.haomeiwen.com/i1909630/f1d8fafd6aca88cc.png)
这种方法一般需要来回切换文件一行一行的手动添加,下面介绍一种相对来说简单一些的方法
首先把需要本地化的字符串按照下面的形式全部包装起来,第一个参数是key
,第二个参数是注释
,注意是注释
,也就是说你之后要是看到这个注释
,你就知道这个字符串是 在哪里用到的, 怎么赋值等等。
NSLocalizedString(@"viewVC_title", "哈哈哈");
![](https://img.haomeiwen.com/i1909630/15e6c295e5156a9d.png)
选中工程
![](https://img.haomeiwen.com/i1909630/02bb138b7fb2d9ba.png)
![](https://img.haomeiwen.com/i1909630/e89430c12301fafb.png)
选择好导出的目录
和类型
(这里我们选择development language only
也就是英文语言),导出之后找到导出的文件
![](https://img.haomeiwen.com/i1909630/989a07fb1305128c.png)
是一个.xliff
的文件,右键选择打开方式
,选择Xcode
打开它
![](https://img.haomeiwen.com/i1909630/6f19287fa08113da.png)
![](https://img.haomeiwen.com/i1909630/45db2b34ec2e878a.png)
这个文件是一个xml
的形式,可以看到有三个<file>
标签,
我们先删除掉暂时用不到的两个,变成了下面这样
![](https://img.haomeiwen.com/i1909630/cd21703a440a8fd0.png)
因为这个是我们导出的英文版翻译,可以看到source-language
为en
,也就是这个导出的语言包的源语言
是英文
,导入时要加上目标语言,target-language="en"
![](https://img.haomeiwen.com/i1909630/7c823c9e41a01eca.png)
之后对<body>
标签里面的内容进行修改,增加一个<target>
标签,内容填写英文翻译
![](https://img.haomeiwen.com/i1909630/952bf413635e8ca1.png)
现在我们导入看看效果,同样选中工程
![](https://img.haomeiwen.com/i1909630/b759efbcb6a74061.png)
![](https://img.haomeiwen.com/i1909630/887c6fca8c72c2cc.png)
![](https://img.haomeiwen.com/i1909630/e95d6909584cacd9.png)
导入完成
![](https://img.haomeiwen.com/i1909630/d0e90d11c30b74e7.png)
这样就完成了英文语言的导入。接下来我们来导出 中文翻译
![](https://img.haomeiwen.com/i1909630/de9e0a2234ca2c23.png)
![](https://img.haomeiwen.com/i1909630/51cc324f15f254c1.png)
![](https://img.haomeiwen.com/i1909630/08776b51511f8a20.png)
选中Xcode
打开来看看
![](https://img.haomeiwen.com/i1909630/089298d591012952.png)
![](https://img.haomeiwen.com/i1909630/9ff0dce78856030e.png)
删除掉暂时用不到的两个<file>
![](https://img.haomeiwen.com/i1909630/ac41722d7bc9293c.png)
然后我们加上<target>
标签,填上中文翻译
![](https://img.haomeiwen.com/i1909630/25fa905a5922cbe5.png)
然后保存导入
![](https://img.haomeiwen.com/i1909630/4bda171b1c06d25d.png)
就ok啦,同理,其它语言也和 中文 翻译的方法一样的。
最后我们来介绍下图片的 间接本地化,就是把 图片名字 当做 字符串 来进行本地化,
[button setImage:[UIImage imageNamed:NSLocalizedString(@"viewVC_buttonimagename", @"buttonimage")] forState:UIControlStateNormal];
![](https://img.haomeiwen.com/i1909630/25336389b5ee47e2.png)
![](https://img.haomeiwen.com/i1909630/b6b4d29ea4d06dee.png)
![](https://img.haomeiwen.com/i1909630/213b8b7f7f655d9d.png)
注:图片名字一定要写对。