iOS APP多語言開發(國際化)
專案開發中考慮到不同國家的使用者,不同國家的語言,因而在APP裡面做了多語言(即為:APP內部切換語言),這裡有個問題,(未考慮手機系統的語言,我們將APP語言設定之後,直接儲存在本地,當APP下次進入時候直接載入我們本地儲存的語言,類似於微信的多種語言選擇)
1、使用Xcode新建專案,我們叫做ManyLanguage,
2、建立Strings Files 檔案,此處需要注意,APP的名稱name必須為:InfoPlist.strings,我們APP裡面用到的檔名必須為:Localizable.strings,
選中右邊操作Localization
選中語言
新增自己需要的語言種類
設定應用名稱
建立應用內部需要的string檔案 ,建立 Localizable.strings檔案
此處略過方法同上,需要注意的是應用內部key value 格式為:
“key” = “value”;(;不能少)
接下來我們編寫程式碼,首先在Localizable.strings檔案裡面按照key value格式確定需要國際化的地方,
這裡我們使用英語和柬埔寨高棉語;
好了到這一步,我們所有需要建立的部分全部完成,接下來我們編寫程式碼,我們建立一個NSBundle的類目(NSBundle+Language)
寫一個類方法
+(void)setLanguageTo:(NSString*)string;
方法實現
{
static dispatch_once_t onceToken; dispatch_once(&onceToken, ^{ object_setClass([NSBundle mainBundle], [BundleEx class]); }); objc_setAssociatedObject([NSBundle mainBundle], &_bundle, language ? [NSBundle bundleWithPath:[[NSBundle mainBundle] pathForResource:language ofType:@"lproj"]] : nil, OBJC_ASSOCIATION_RETAIN_NONATOMIC);
}
我們在需要的地方直接呼叫方法設定語言,此處需要注意的是
setLanguageTo後面的NSString為語言編碼如:中文”zh-Hans”,英文 “en”,高棉文”kh”對應的每種語言,在建立語言的時候後面括號裡面都有
-(IBAction)chinaActoion:(id)sender{
//語言設定為中文
[self changeLanguage:@”zh-Hans”];
}
設定好語言之後,我們使用NSUserDefaults直接儲存
-(void)changeLanguage:(NSString *)language
{
[NSBundle setLanguage:language];
// 然後將設定好的語言儲存好,下次進來直接載入
[[NSUserDefaults standardUserDefaults] setObject:language forKey:@"myLanguage"];
[[NSUserDefaults standardUserDefaults] synchronize];
// 我們要把系統windown的rootViewController替換掉
TabBarViewController *tab = [[TabBarViewController alloc] init];
[UIApplication sharedApplication].keyWindow.rootViewController = tab;
}
當APP退出重新進入時候,在appdelegate裡面設定
-(BOOL)application:(UIApplication*)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions {
if ([[NSUserDefaults standardUserDefaults] objectForKey:@"myLanguage"] && ![[[NSUserDefaults standardUserDefaults] objectForKey:@"myLanguage"] isEqualToString:@""]) {
[NSBundle setLanguage:[[NSUserDefaults standardUserDefaults] objectForKey:@"myLanguage"]];
}
// 建立主頁面
self.window = [[UIWindow alloc] initWithFrame:[UIScreen mainScreen].bounds];
self.window.rootViewController = [[TabBarViewController alloc] init];
[self.window makeKeyAndVisible];
return YES;
}
此處我們已經APP內部完成多語言的設定 ,demo 我稍後上傳