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 = [[NSBundlemainBundle] pathForResource:@"it"ofType:@"lproj"]; NSBundle * languageBundle = [NSBundle bundleWithPath:path]; s = [languageBundle localizedStringForKey:translation_key value:@"" table:nil]; } return s; } 這樣,程式碼中把使用的國際化的巨集NSLocalizedString統一更改成DPLocalizdString就可以實現預設語言的修改了 |