2015-09-26 74 views
3

以本地化我的應用程序,我使用下面的代碼。問題是,只適用於法國。我如何支持所有其他地區(加拿大,比利時......)?和法國的「一般設置」?preferredLanguages的iOS 9

感謝

回答

3

如果language將返回其他值這樣的 「FR-FR」 和 「FR-CA」,那麼你應該在-字符分割language。即使你只是得到「fr」,這也可以工作。

NSString *firstLanguage = [[NSLocale preferredLanguages] firstObject]; 
NSString *language = [[firstLanguage componentsSeparatedByString:@"-"] firstObject]; 
if ([language isEqualToString:@"fr"]) { 
} else { 
} 
+0

它的作品!非常感謝 – Mansour

+0

請小心使用此解決方案,因爲它可能無法正常工作。 zh-Hans-US將導致zh,而語言是zh-Hans。最後一次出現「 - 」時切斷。 – endowzoner

1

嘿,不要做這樣的定位時設置爲不同的區域像es-mxes-cl語言不同它將創建問題。在這種情況下,上述解決方案會產生問題 使用下面的解決方案代碼:

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

如果您已經從設置,但您的應用程序只有zh-Hans-TWzh-Hans-CN選擇zh-Hans-US。以上代碼將返回您"zh-Hans-TW"第一首選本地化。

試試這可能對你有用。

0

貼上我的代碼在這裏,也許幫助您

- (NSString *)localizedStringForKey:(NSString *)key withDefault:(NSString *)defaultString 
{ 
    static NSBundle *bundle = nil; 
    if (bundle == nil) 
    { 
     NSString *bundlePath = [[NSBundle mainBundle] pathForResource:@"your_resources" ofType:@"bundle"]; 
     bundle = [NSBundle bundleWithPath:bundlePath] ?: [NSBundle mainBundle]; 
     //manually select the desired lproj folder 
     for (NSString *language in [NSLocale preferredLanguages]) 
     { 
      for (NSString *loc in [bundle localizations]) { 
       if ([language hasPrefix:loc]) 
       { 
        bundlePath = [bundle pathForResource:loc ofType:@"lproj"]; 
        bundle = [NSBundle bundleWithPath:bundlePath]; 
        goto getString; 
       } 
      } 
     } 
    } 
getString: 
    defaultString = [bundle localizedStringForKey:key value:defaultString table:nil]; 
    return [[NSBundle mainBundle] localizedStringForKey:key value:defaultString table:nil]; 
} 
1

你不應該分裂NSLocale。 NSLocale有一些鍵,您可以用objectForKey:

檢索在您的例子,你可以寫:

[[[NSLocale currentLocale] objectForKey:NSLocaleLanguageCode] 
      isEqualToString:@"fr"] 

[NSLocale currentLocale]其實是一樣的[[NSLocale preferredLanguages] firstObject]但其中小數點分隔一些額外的信息,你可以檢索應該使用哪種貨幣符號。

其他相關Keys可以在蘋果的class reference中找到。

0

我對我的代碼修復很簡單:

NSString *language = [[NSLocale preferredLanguages] objectAtIndex:0]; 
NSRange range = [language rangeOfString:@"-" options:NSBackwardsSearch]; 
NSString * languageMark = [language substringToIndex:range.location];