版权声明:本文为博主原创文章,未经博主允许不得转载。 -- 老陶
刚工作的时候做了多语言,发现网上方法很多都是关于跟随系统语言设置的,而系统内部设置的确比较少。
所以今天闲来没事,写一写总结,供大家参考。
当然做的时候,也会百度搜索,所以项目中可能会看到网上一些比较熟悉的东西。
大家做这一步,相信项目工程是有的了吧(因为本人做独立开发,所以一般新功能几乎都是在项目中做的,很少有写demo,就不考虑demo的情况了)
在项目文件的Supporting Files中的InfoPlist.strings中,右键(或command + N)–>新建一个string文件。
(如果没有这个文件,在xcode6中创建,好像没有看到,可以自己创建一个文件,名字可以随便取,后面会给一个方法,获取这个文件的。) 如图1-1所以
创建完文件之后,点击项目—>选择Project—>选择Info—>点击“+”号。(画线隐藏)
在右下方有个Language的选项,默认进来是只有English的,点击+号之后可以看到各种语言选项
在这里选择Chinese(Simplified)。下面会出现一个选项,选择InfoPlist.string文件,那个是语言设置的。(如果是自定义的文件,就选择自定义的那个)
//———————————————————–
到这里,基本配置就完成了。然后后面就是设置需要的字符,以及调用方法了
在相应的string文件中,写入需要的字符。前面相当于key。后面是value。
CFBundleDisplayName是app的名字,技术不够,暂时不知道如何手动切换语言,改变桌面的名字,这一步,只是根据系统语言来的。
如果默认根据系统语言更改语言,那么调用的时候只需要NSLocalizedString(<#key#>, <#comment#>)用这一句就可以了。其他的不需要做处理。
如果是想自定义的话,那么需要写一个类:
//.h头文件: #import <Foundation/Foundation.h>
@interface InternationalController : NSObject
- (NSBundle *)bundle; //获取当前资源文件
- (void)initUserLanguage; //初始化语言文件
- (NSString *)userLanguage; //获取应用当前语言
- (void)setUserLanguage:(NSString *)language; //设置当前语言
@end
//.m类体文件
// // InternationalController.m // mworkingHaier // // Created by LaoTao on 14-10-20. // Copyright (c) 2014年 CaiGaoBaDou. All rights reserved. //
#import “InternationalController.h” #import <UIKit/UIKit.h>
@implementation InternationalController
//创建静态变量bundle,以及获取方法bundle(此处不要使用getBundle). static NSBundle *bundle = nil;
- (NSBundle *)bundle { return bundle; }
//初始化方法:
-
(void)initUserLanguage { NSUserDefaults *def = [NSUserDefaults standardUserDefaults]; NSString *string = [def valueForKey:kLanguage];
if (string.length == 0) { //获取系统当前语言版本(中文zh-Hans,英文en) NSArray *languages = [def objectForKey:@“AppleLanguages”]; NSString *current =[languages objectAtIndex:0]; string = current; [def setValue:current forKey:kLanguage]; [def synchronize]; //持久化,不加的话不会保存 }
//获取文件路径 NSString *path = [[NSBundle mainBundle] pathForResource:string ofType:@“lproj”]; // NSLog(@"%@",path); bundle = [NSBundle bundleWithPath:path]; //生成bundle }
//获得当前语言的方法
- (NSString *)userLanguage { NSUserDefaults *def = [NSUserDefaults standardUserDefaults]; NSString *language = [def valueForKey:kLanguage]; return language; }
//设置语言
-
(void)setUserLanguage:(NSString *)language { NSUserDefaults *def = [NSUserDefaults standardUserDefaults];
//1.第一步改变bundle的值 NSString *path = [[NSBundle mainBundle] pathForResource:language ofType:@“lproj”]; bundle = [NSBundle bundleWithPath:path];
//2.持久化 [def setValue:language forKey:kLanguage]; [def synchronize]; }
@end
把"InternationalController.h"这个在.pch文件中引用,这样全局就都可以调用了
在AppDelegate.m的didFinishLaunchingWithOptions方法中,加一句:
[InternationalController initUserLanguage]; //初始化应用语言
然后设置个全局的宏变量,系统的是NSLocalizedString.这里就设置了LTlocalizedString(LT是老陶的首字母,beyond521t这个t同理,嘿嘿)
self.title = LTLocalizedString(@“TitleName”, nil);
如此就可以使用了。切换语言,请看头文件,直接方法名 + 方法,以及语言就OK了。
注:英文在iOS中为"en",简体中文"zh-Hans".
切换语言后:处理方法是,再次跳转到根视图即可。(更多处理方式,请看本人另一篇日志,根视图处理)