开发语言:Swift 4.2
开发环境:Xcode 10.1
在项目中,我们常常需要制作多种语言的资源,现在我们就来了解一下文字和图片资源
1、准备工作
在project->Info->Localizations中增加使用的语言,下图是增加了简体中文的示例
完成此步骤后,我们就可以进行接下来的操作,创建多语言资源了
2、创建多语言文字
增加一个String File文件,文件名为Localizable 到项目中
然后选择此文件,在右侧选择Localize,再把所有的语言全部钩上
此时我们发现,增加的strings文件多出来了各种语言的版本
至此,我们可以在strings文件中增加一个文字的多个版本
例如在英文文件下增加:
test="test";
然后在中文文件下增加:
test="测试";
这样就完成了文字test的中英文两个版本。
3、创建多语言图片
将我们需要创建多语言的图片增加到项目中,与创建多语言文字类似,选择此文件,在右侧选择Localize,再把所有的语言全部钩上。
注意,图片会有一个base语言,表示如果设备选择的语言并不在我们所提供的语言列表中时,所使用的默认语言。完成选择后,Localize应该呈现如下的状态
然后,右键我们增加的图片资源,选择Show in Finder,我们可以看到如下目录
此时,将我们准备的不同语言的图片放在在不同语言的.lproj文件夹下,注意名字要和我们增加到项目中的文件名保持一致。
至此,我们文字多语言与图片多语言的资源全部创建完成,接下来我们需要使用它们。
4、加载系统语言文字和图片
使用系统语言加载文字和图片非常简单,只需要使用以下代码分别加载文字和图片资源即可
lTest.text = NSLocalizedString("test", tableName: "Localizable", comment: "")
iNext.image = UIImage.init(named: "next.png")
- 注意,strings文件的名字如果不是Localizable的话,则tableName参数需要传递strings文件的名字。
- 反之,我们可以省略这个参数,系统会默认的读取Localizable.strings文件
模拟器默认的语言为英文,加载效果如下。
然后我们在模拟器的系统设置中,修改语言为中文,重新开启app,加载效果如下。
5、加载指定语言文字和图片
在加载指定语言的文字和图片之前,我们可以先了解下,我们的多语言资源分保存在哪里。
首先我们找到模拟器的在mac上的路径,并且找到我们的app
然后右键我们的app,选择显示包内容,我们可以看到包中有en.lproj与zh-Hans.lproj文件夹。
这两个文件夹保存着我们添加到项目中的多语言资源,如果我们要指定加载某种语言,则我们需要通过指定以上的路径,用来创建自定义的Bundle,然后加载这个Bundle中的资源即可
//构建英文Bundle
let path1 = Bundle.main.path(forResource:"en" , ofType: "lproj")
let enBundle = Bundle.init(path: path1!)
//构建中文Bundle
let path2 = Bundle.main.path(forResource:"zh-Hans" , ofType: "lproj")
let znBundle = Bundle.init(path: path2!)
//使用中文Bundle加载文字
lTest.text = NSLocalizedString("test", tableName: "Localizable", bundle: znBundle!, comment: "")
//使用英文Bundle加载图片
iNext.image = UIImage.init(named: "next.png", in: enBundle!, compatibleWith: nil)
加载后的效果图下