您的位置:首页 > 移动开发 > IOS开发

iOS多语言环境支持设计

2013-12-23 11:52 253 查看
关于iOS多语言环境支持的设计分为两种:根据系统语言环境的设计和应用内切换设计。

一、根据系统语言环境的设计

当支持这种模式的时候,需要在工程信息的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 =[[NSBundlemainBundle]
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的语言环境。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: