preferredLanguages iOS 9

时间:2015-09-26 18:14:27

标签: objective-c localization ios9

为了本地化我的应用程序,我使用以下代码:

NSString * language = [[NSLocale preferredLanguages] objectAtIndex:0];  
             if ([language isEqualToString:@"fr"]) {  
}else{  
}  

但是从iOS 9开始,我必须用“fr-FR”替换“fr”。问题是只适用于法国。我如何支持所有其他地区(加拿大,比利时,......)?和法国的“一般设定”?

由于

5 个答案:

答案 0 :(得分:3)

如果language正在返回其他值,例如" fr-FR"和" fr-CA",然后您应该在language字符上拆分-。即使你只是简单地得到了#34; fr"。

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

答案 1 :(得分:1)

嘿那里不这样做当本地化设置不同于具有不同区域的语言(例如es-mxes-cl时)会产生问题。在这种情况下,上述解决方案将产生问题 使用以下代码解决方案:

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

如果您从设置中选择了zh-Hans-US,但您的应用仅限zh-Hans-TWzh-Hans-CN。上述代码将为您返回 "zh-Hans-TW" 第一个首选的本地化版本。

尝试这可能对您有用。

答案 2 :(得分:1)

你不应该拆分NSLocale。 NSLocale有一些键,您可以使用objectForKey:

检索

在您的示例中,您可以编写以下内容:

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

[NSLocale currentLocale]实际上与[[NSLocale preferredLanguages] firstObject]相同,但有一些其他信息,您可以在其中检索应使用哪个小数分隔符或哪个货币符号。

其他相关的密钥可以在Apple的class reference中找到。

答案 3 :(得分: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];
}

答案 4 :(得分:0)

我对代码的修复很简单:

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