简书新人,写的不好的地方,还请指出。
前期准备
先点击工程
->PROJECT
->Localizations
添加你要本地化的语言
如果是已经本地化过的项目,这里添加之后会弹出
Resource File
是需要本地化为你刚刚选择的语言的项目,Reference Language
是本地化文件生成时使用的模板,一般默认即可。
1,App名称(以我的Xcode9.2为例)
点击工程
->TARGETS
->General
会看到如下界面,在Display Name
一项填写你的App名称(中英文都可)
,不填可能会导致编译不通过,填写完成之后,Xcode
会自动在工程的info.plist
里面生成此字段。
此后要在工程目录下新建一个strings
文件
并命名为InfoPlist
(不要问我为什么)
点击该文件,在Xcode
最右边会出现此界面
点击Localize...
按钮
点击Localize
,本地化此语言,一般默认即可。完成之后刚才的Localize...
按钮位置的地方会变成这样
勾选你要本地化的语言即可。
之后文件就变成了这种状态,包含各种语言,应用安装时或者系统语言切换时会自动加载各语言文件,来设置不同语言的App名称
选中一个
这里用到了CFBundleDisplayName
这个key,这个key是设置App名称
的,按照此方法设置好对应语言App名称
即可(这里和开头设置的Display Name
字段不冲突,如果这里设置的话,就会按照这里的来显示)。
2,本地化图片
(1)直接本地化
大致与上面的一样,选中需要本地化的文件,点击Localize...
按钮,勾选你需要本地化的语言即可。
之后就变成了这样
注:Assets.xcassets里面的图片不能直接本地化
然后右键点击文件
去到工程目录下,
在 对应的语言文件夹 下,复制替换 对应图片的对应语言版本 就好了,可以看到此时这个图片现在是在en
英文语言文件夹下
那么我们就把他替换为 英文版图片 就好了,同理, 中文 或者 其他语言版本的图片 的步骤一样。
(2)间接本地化
请看文末
3,本地化字符串
和本地化App名称
一样,先创建一个strings
文件,并命名为Localizable
(还是不要问我为什么)
接下来选中文件,点击Localize...
按钮,勾选你要本地化的语言
然后可以在里面以key
=value
的形式添加一项
在你的代码里面,找到需要本地化的字符串,加上NSLocalizedString()
NSString *title = NSLocalizedString(@"viewVC_title", nil);
这样title
的值在英文环境下显示为hahaha
在中文简体环境下显示为哈哈哈
注:此NSLocalizedString()宏的返回值为NSString类型,因此可以直接当做NSString*对象来使用,如
self.title = NSLocalizedString(@"viewVC_title", nil);
[button setTitle:NSLocalizedString(@"viewVC_buttontitle", nil) forState:UIControlStateNormal];
这种方法一般需要来回切换文件一行一行的手动添加,下面介绍一种相对来说简单一些的方法
首先把需要本地化的字符串按照下面的形式全部包装起来,第一个参数是key
,第二个参数是注释
,注意是注释
,也就是说你之后要是看到这个注释
,你就知道这个字符串是 在哪里用到的, 怎么赋值等等。
NSLocalizedString(@"viewVC_title", "哈哈哈");
选中工程
选择好导出的目录
和类型
(这里我们选择development language only
也就是英文语言),导出之后找到导出的文件
是一个.xliff
的文件,右键选择打开方式
,选择Xcode
打开它
这个文件是一个xml
的形式,可以看到有三个<file>
标签,
我们先删除掉暂时用不到的两个,变成了下面这样
因为这个是我们导出的英文版翻译,可以看到source-language
为en
,也就是这个导出的语言包的源语言
是英文
,导入时要加上目标语言,target-language="en"
之后对<body>
标签里面的内容进行修改,增加一个<target>
标签,内容填写英文翻译
现在我们导入看看效果,同样选中工程
导入完成
这样就完成了英文语言的导入。接下来我们来导出 中文翻译
选中Xcode
打开来看看
删除掉暂时用不到的两个<file>
然后我们加上<target>
标签,填上中文翻译
然后保存导入
就ok啦,同理,其它语言也和 中文 翻译的方法一样的。
最后我们来介绍下图片的 间接本地化,就是把 图片名字 当做 字符串 来进行本地化,
[button setImage:[UIImage imageNamed:NSLocalizedString(@"viewVC_buttonimagename", @"buttonimage")] forState:UIControlStateNormal];
注:图片名字一定要写对。