1. 程式人生 > >ios 國際化及預設語言設定

ios 國際化及預設語言設定

1、iOS程式名稱國際化

1.1 新建一個Single View app模版專案,命名為Localization。

1.2 新建後,可以看到工作目錄結構檔案如下,單擊InfoPlist.strings,檢視右邊的屬性,在Localization欄新增語言。

    

1.3 新增完成後開啟對應語言檔案,比如English的新增

CFBundleDisplayName="China";

Chinese檔案新增

CFBundleDisplayName="中國";

執行,如果此時你的模擬器是中文,你會看到你的程式名稱變成了 中國:

來到設定裡把語言設定成 English。此時程式名稱變成了:China

這時,程式名稱的國際化完成了。那裡面內容呢?

2、內容國際化

2.1新建Localization.strings檔案

      

2.2 新增語言和1.1環節一樣。

2.3 新增語言內容

新增"Key"="value"; 然後使用時用NSLocalizedString(@"key", @""); 讀取內容.

Localization.strings English檔案新增 

"key" = "english value";

Localization.strings English檔案新增 

"key" = "中文內容";

在ViewController.m 中新增UILabel實驗一下

- (void)viewDidLoad { [super viewDidLoad]; UILabel *label = [[UILabel alloc] init]; label.frame = CGRectMake(20, 40, 250, 60); label.text = NSLocalizedString(@"key", @""); [self.view addSubview:label]; }

執行

設定項裡切換英文

3、如何在執行的時候判斷現在執行環境是哪個語言?

3.1 獲得所支援的語言

NSUserDefaults
 *defaults = [ NSUserDefaults standardUserDefaults ]; // 取得 iPhone 支援的所有語言設定 NSArray *languages = [defaults objectForKey : @"AppleLanguages" ]; NSLog ( @"%@" , languages);

執行,列印結果:

(

    en,

    "zh-Hant",

    "zh-Hans",

    fr,

    de,

    ja,

    nl,

    it,

    es,

    pt,

    "pt-PT",

    da,

    fi,

    nb,

    sv,

    ko,

    ru,

    pl,

    tr,

    uk,

    ar,

    hr,

    cs,

    el,

    he,

    ro,

    sk,

    th,

    id,

    "en-GB",

    ca,

    hu,

    vi

)

    "zh-Hant"   繁體中文

    "zh-Hans", 簡體中文

這段程式碼獲取當前系統支援的語言。  

3.2 獲取當前使用語言

NSArray *languages = [NSLocale preferredLanguages]; NSString *currentLanguage = [languages objectAtIndex:0]; NSLog ( @"%@" , currentLanguage);

列印結果:

en

用獲取到的當前語言,和支援的語言做字串對比,就可以知道是那種語言了。

if([currentLanguage isEqualToString:@"en"]) { NSLog(@"current Language:en"); }

有時我們需要做本地化的動作,對一些資源(主要是字串),在不同的語言下顯示各自的內容。比如edit,在英語下顯示“Edit”,中文下就是“編輯”。

最近做的專案客戶要求支援兩種語言,英語和義大利語,並且強調預設義大利語,要求當前語言非英語和義大利語是,顯示義大利語。

本來以為xcode裡面的Localization native development region這個選項就是設定預設的區域,這樣在本地化的區域中顯示本地化的資源,沒有本地化的區域就顯示預設的資源。但驗證下來這項設定不是這個意思,預設的字串採用的是英語,無論這個development region設定成什麼,非本地化的區域顯示的是英文。


為了實現這個預設語言的功能,只能嘗試其他的途徑,最後我用程式碼實現了,基本思路就是發現當前語言並非系統支援的英語和義大利語時,統一訪問指定的資原始檔,返回預設的資源,程式碼如下:

#define CURR_LANG                        ([[NSLocale preferredLanguages] objectAtIndex:0])

+ (NSString *)DPLocalizedString:(NSString *)translation_key {

    NSString * s = NSLocalizedString(translation_key, nil);

//NSString * s = NSLocalizedStringFromTable(@"trainTitle",@"檔名",@"");

    if (![CURR_LANG isEqual:@"en"] && ![CURR_LANG isEqual:@"it"]) {

NSString * path = [[NSBundlemainBundlepathForResource:@"it"ofType:@"lproj"];

        NSBundle * languageBundle = [NSBundle bundleWithPath:path];

        s = [languageBundle localizedStringForKey:translation_key value:@"" table:nil];

    }

    return s;

}

這樣,程式碼中把使用的國際化的巨集NSLocalizedString統一更改成DPLocalizdString就可以實現預設語言的修改了