[iOS] App 預設語言 (App Default Language)
我App中有三個Localization,分別是:
- 繁體中文
- 簡體中文
- 英文
使用者可以在這三個隨意切換,來顯示他想要的語言介面。
三年前已有實現過多國語言化的預設語言 (Default (Fallback) Language of Localization),不過那篇文章我是有寫code,這次只要調整專案中的Info.plist即可!
調整過後,我切換到日語(SIM字眼旁是日文),App介面語言是英文喔~
我App中有三個Localization,分別是:
使用者可以在這三個隨意切換,來顯示他想要的語言介面。
三年前已有實現過多國語言化的預設語言 (Default (Fallback) Language of Localization),不過那篇文章我是有寫code,這次只要調整專案中的Info.plist即可!
調整過後,我切換到日語(SIM字眼旁是日文),App介面語言是英文喔~
正在開發跨國使用的iOS App,所以App名稱最好也能跟著變更,來讓當地使用者看到App名稱更輕易地辨識。
可以見到我的Info.plist檔中有五處是中文字,想要多國語言化可以怎麼做?其實也跟幾年前我寫的多國語言化很類似,參考文章:多國語系 (Localization)。
以繁體中文(因為是母語喲!)為主來做多國語言化,另外兩個語言是簡體中文和英文,跟著多國語系 (Localization)這篇文章做,照理說已經沒有其它問題,但是呢⋯⋯若哪天日本人想用這個App,那麼他會看到哪個語言?實際跑過發現是偉大的繁體中文,然而我們的期望卻是套用英文,這時候該怎麼辦呢?打掉重練?噢~不。
一個能夠跨國際使用的App,需要多國語言化(Localization),之前介紹的是系統運行時自動轉換字串的語言,然而我們想要知道目前使用者的偏好語言 (Prefer Language),來做更進一步的運用,比如將語言碼當作參數傳遞。
/** Theme: Language IDE: Xcode 6 Language: Objective C Date: 103/10/14 Author: HappyMan Blog: https://cg2010studio.wordpress.com/ */ // 記錄語言碼 NSString *languageStr = [[NSLocale preferredLanguages] objectAtIndex:0]; // NSString *languageStr = [[[NSBundle mainBundle] preferredLocalizations] objectAtIndex:0]; if ([languageStr isEqualToString:@"zh-Hant"]) {// 繁中 self.languageCode = @"2"; } if ([languageStr isEqualToString:@"zh-Hans"]) {// 簡中 self.languageCode = @"1"; } if ([languageStr isEqualToString:@"en"]) {// 英語 self.languageCode = @"0"; }
有兩種用法可行,注意事項請看文件說明!
+ (NSArray *)preferredLanguages NS_AVAILABLE(10_5, 2_0);
note that this list does not indicate what language the app is actually running in; the [NSBundle mainBundle] object determines that at launch and knows that information@property (readonly, copy) NSArray *preferredLocalizations;
a subset of this bundle’s localizations, re-ordered into the preferred order for this process’s current execution environment; the main bundle’s preferred localizations indicate the language (of text) the user is most likely seeing in the UI
跟程式裡的字串做多國語言化(Localization)不一樣,要讓App顯示名稱多國語言化 (Bundle Display Name Localization)必須經由別的做法,可以找尋檔案列表中InfoPlist.strings,在IDE右側界面「Localization」打勾所需的語系,即會出現我們想要的語系檔案如下。
分別在三個檔案內加入各語系想顯示的名稱即可!就是以Key-Value的方式設定。
/* Localized versions English of Info.plist keys */ "CFBundleDisplayName" = "HappyMan"; /* Localized versions Chinese Simplified of Info.plist keys */ "CFBundleDisplayName" = "逍遥文"; /* Localized versions Chinese Tradition of Info.plist keys */ "CFBundleDisplayName" = "逍遙文";
應該要翻成本地化(Localization)才是,不過我想會查詢的人多會以支援多國語系(Localization)為關鍵字,如此也才讓人好理解英文字Localization所要代表的意義。
HappyMan・迴響