一、根据系统语言环境的设计
当支持这种模式的时候,需要在工程信息的Localizations中添加你需要支持的语言
这样会在SupportFiles中增加你添加的语言文件
然后在这两个文件中添加需要的字符串
"Master" ="Master";
"Master" ="主视图";
前面是Key,后面是对应的Value。
最后就是在代码中如何读取了,
NSString *string =NSLocalizedString(@"Master",nil);
NslocalizedString()是一个宏定义方法,
#define NSLocalizedString(key, comment) \ [[NSBundle mainBundle]localizedStringForKey:(key) value:@"" table:nil]
key就是对应上面的Key,comment是对该字符串的描述,可以为nil,一般命名Key的时候就能直观的知道该字符串是干嘛用的。
该方法是通过系统语言自动读取对应文件中的字符串。
二、应用内多语言切换
1.字符串资源
这种模式不受系统语言的影响,由用户主动在APP内进行设置,设计思路也类似上面第一种的,通过对不同语言的本地文件进行读取。
不同的是这种模式需要自己创建不同语言的本地文件,根据上面使用键值对的方式我创建了两个plist文件
plist文件的Root类型设为Dictionary,Root下面就是一个个键值对
分别对应中英文文件里的字符串,设置好过后就是在代码中读取了。
首先获取文件路径
_chineshWordPath = [[NSBundlemainBundle] pathForResource:@"LocalString_chinese"ofType:@"plist"];
_englishWordPath =[[ NSBundle mainBundle] pathForResource: @"LocalString_english" ofType: @"plist"];
然后是获取文件中的Dictionary,最后通过Key去获取对应的Value
NSDictionary *dict = [NSDictionarydictionaryWithContentsOfFile:resourcePath];//这里的resourcePath就是上面对应的中文还是英文文件路径
NSString *string = [dictobjectForKey:key];
2.图片资源
有时候某些图片也需要不同的语言版本,又想用同一图片名去获取。这个时候需要创建多个文件夹,分别放不同的图片资源,添加到工程中
注意这两个文件是蓝色的,与上面黄色的不同,这是因为在Add Files时选择的是第二个
这样创建的是两个真正的文件夹,因为需要添加多个同名的图片资源。这样不能拖动文件添加到工程的这种文件夹中,只能去Finder中该文件夹所在的位置添加。工程中显示新添加的文件
最后就是在代码中读取图片了,首先要获取不同文件夹的路径,文件夹在资源文件夹里
_chineseImagesPath = [[[NSBundlemainBundle] resourcePath]stringByAppendingString:@"/Images_Chinese/"];
_englishImagesPath = [[[NSBundlemainBundle] resourcePath]stringByAppendingString:@"/Images_English/"];
同样的方法,图片在Images文件夹里
NSString *imagePath = [resourcePathstringByAppendingString:@"image.png"];//这里的resourcePath就是上面对应的中文还是英文文件路径
UIImage *image = [UIImageimageWithContentsOfFile:imagePath];
上面是设计的大概思路,具体使用如果这样一个一个去取还是很麻烦,还要判断语言环境。我在使用时用到一个单例,通过两个方法去读取字符串和图片
在初始化的时候获取资源路径
方法的实现
这里还用到另一个单例APPSetting时关于APP的一些设置,其中就有当前APP的语言环境。