2015-09-26 71 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];