1. 程式人生 > >iOS APP多語言開發(國際化)

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 我稍後上傳