2015-10-08 11 views
0

到現在爲止我已經使用這個代碼,以檢索手機語言:IOS什麼是最好和安全的方式來檢查手機語言?

NSString * language = [[NSLocale preferredLanguages] objectAtIndex:0]; 

正如我們已經現在,因爲IOS 9蘋果已經改變了這個函數的返回,從類似「恩」,以類似「恩GB「。在我的應用程序中,我通常會做一個」istostring「來檢查與我必須工作。 現在我需要實現像正確答案,這question

,我要實現每一個方法調用的條件,以檢查設備是否IOS < 9或IOS> = 9。這個蘋果的變化似乎沒有考慮任何舊版本的比較問題,我對這個功能進行了大量使用,所以我必須更新我的所有應用程序......也許問題是另一個,有更好的方法來檢查實際的語言電話?

+0

其實蘋果變回了老辦法的iOS 3,它用來區分本地化字符串中的語言和區域。 例如,您可以獲得意大利語的意大利語IT-it意大利語的意大利語和意大利語IT-ch的瑞士語。 –

回答

2

不幸的是,這是開發者社區共同的痛苦,我們無能爲力解決這個問題。

但是,我通過在添加類別像這樣維護自己:

+ (NSString *)deviceLanguage { 
    return [[NSLocale preferredLanguages] objectAtIndex:0]; 
} 

然後,只需撥打:

[UIDevice deviceLanguage] 

獲取設備的語言。至少,就像您的情況一樣,如果您在多個位置使用此功能,則只需更改一個位置即可使整個應用程序與新的語言/操作系統支持保持一致。

1

我想這可能會幫助你

NSArray *array = [NSLocale preferredLanguages]; 
for (NSString *lan in array) 
{ 

NSLog(@"%@: %@ %@",lan, [NSLocale canonicalLanguageIdentifierFromString:lan], [[[NSLocale alloc] initWithLocaleIdentifier:lan] displayNameForKey:NSLocaleIdentifier value:lan]); 
} 
1

在Objective C中

NSString *language = [[[NSBundle mainBundle] preferredLocalizations] objectAtIndex:0]; 

在斯威夫特

let language = NSBundle.mainBundle().preferredLocalizations.first! as NSString 
+0

它不會提供設備語言。它會給出您在app.ie中提供的語言。如果CFBundleAllowMixedLocalizations在info.plist中爲true,那麼在info.plist中給出您在CFBundleDevelopmentRegion中給出的語言,然後在info中輸入CFBundleLocalizations的第一項。 plist被退回 –

相關問題