为了本地化我的应用程序,我使用以下代码:
NSString * language = [[NSLocale preferredLanguages] objectAtIndex:0];
if ([language isEqualToString:@"fr"]) {
}else{
}
但是从iOS 9开始,我必须用“fr-FR”替换“fr”。问题是只适用于法国。我如何支持所有其他地区(加拿大,比利时,......)?和法国的“一般设定”?
由于
答案 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-mx
和es-cl
时)会产生问题。在这种情况下,上述解决方案将产生问题
使用以下代码解决方案:
NSString *selectedLanguage = [[[NSBundle mainBundle] preferredLocalizations] objectAtIndex:0];
如果您从设置中选择了zh-Hans-US
,但您的应用仅限zh-Hans-TW
和zh-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];