实现的功能是第一次app打开跟随系统语言, 其他则显示用户选择的语言,直接上代码:
.h文件
#import <Foundation/Foundation.h> @interface MyLocalString : NSObject +(MyLocalString *)sharedInstance; -(NSString *)MyLocalStringForKey:(NSString *)key; -(void)setMyLanguage:(NSString *)language; @end
.m文件
#import "MyLocalString.h" static MyLocalString* localString=nil; NSBundle *languageBundle=nil; @implementation MyLocalString +(MyLocalString*)sharedInstance { static dispatch_once_t oncePredicate; dispatch_once(&oncePredicate,^{ localString = [[MyLocalStringalloc]init]; NSUserDefaults *def=[NSUserDefaults standardUserDefaults]; NSString *language=[def valueForKey:@"userLanguage"]; NSString *currentString=nil; if (language.length==0) { NSArray *languageArr=[def valueForKey:@"AppleLanguages"]; currentString=[languageArr objectAtIndex:0]; [def setValue:currentString forKey:@"userLanguage"]; [def synchronize]; }else { currentString=language; } NSString *path = [[NSBundle mainBundle] pathForResource:currentString ofType:@"lproj"]; // "zh", "fr"等 languageBundle=[NSBundle bundleWithPath:path]; }); return localString; } -(NSString *)MyLocalStringForKey:(NSString *)key { return [languageBundle localizedStringForKey:key value:@"" table:nil]; } -(void)setMyLanguage:(NSString *)language { NSUserDefaults *def=[NSUserDefaults standardUserDefaults]; [def setValue:language forKey:@"userLanguage"]; [def synchronize]; NSString *path = [[NSBundle mainBundle] pathForResource:language ofType:@"lproj"]; languageBundle=[NSBundle bundleWithPath:path]; } @end