Iphone NSLocale设置首选语言
我似乎在绕着这个问题转,现在我不想去任何地方 我正试图强制我的应用程序的语言(瑞典语),如下所示Iphone NSLocale设置首选语言,iphone,objective-c,nsuserdefaults,nssortdescriptor,nslocale,Iphone,Objective C,Nsuserdefaults,Nssortdescriptor,Nslocale,我似乎在绕着这个问题转,现在我不想去任何地方 我正试图强制我的应用程序的语言(瑞典语),如下所示 @autoreleasepool { [[NSUserDefaults standardUserDefaults] setObject:[NSArray arrayWithObjects:@"sv", nil] forKey:@"AppleLanguages"]; [[NSUserDefaults standardUserDefaults]sy
@autoreleasepool {
[[NSUserDefaults standardUserDefaults] setObject:[NSArray arrayWithObjects:@"sv", nil] forKey:@"AppleLanguages"];
[[NSUserDefaults standardUserDefaults]synchronize];
return UIApplicationMain(argc, argv, nil, NSStringFromClass([AppDelegate class]));
}
我已经在main方法中完成了这项工作,以便在应用程序启动时设置首选项
然后,当我想按字母顺序对数组排序时,我使用带有选择器的NSSortDescriptor
,localizedCaseInsensitiveCompare:
NSSortDescriptor*valueDescriptor=[[NSSortDescriptor alloc]initWithKey:@“iName”升序:是选择器:@选择器(localizedCaseInsensitiveCompare:)]
NSArray*描述符=[NSArray arrayWithObject:valueDescriptor]
self.ingredientsList=[NSMutableArray数组with数组:[self.ingredientsList sortedarray使用描述符:描述符]]
但我的问题是,用我的本地语言进行排序并不是第一次。但如果我重新启动应用程序,排序将根据语言(瑞典语)进行。为什么它不是第一次发生
我做错了什么
欢迎提供帮助/建议。
谢谢@DarkDust是正确的。您不应该尝试修改区域设置本身。这不在你的控制之下,正如你所看到的,它不太好用。最重要的是,如果您只想修改一个排序操作,这是一个非常大的锤来完成。。。。您可以使用各种本地化
Info.plist
条目(特别是CFBundleLocalizations
)来正确地执行此操作,而不仅仅是对单个列表进行排序
您要使用的是compare:options:range:locale:
,它允许您传递特定的语言环境。您可以在sortedarrayingselector:
或sortedarrayingcomparator:
中使用此方法
或者,您可以使用类别将自定义的swedishCaseInsensitiveCompare:
添加到NSString
。然后,您可以像当前一样使用NSSortDescriptor
例如<在英语中,code>a排序在
a
之后,但在瑞典语中排序在z
之后:
@interface NSString (SwedishSorting)
- (NSComparisonResult)caseInsensitiveSwedishCompare:(id)other;
@end
@implementation NSString (SwedishSorting)
- (NSComparisonResult)caseInsensitiveSwedishCompare:(id)other;
{
return [self compare:other options:NSCaseInsensitiveSearch range:NSMakeRange(0, self.length) locale:[[NSLocale alloc] initWithLocaleIdentifier:@"sv"]];
}
@end
int main(int argc, const char * argv[])
{
@autoreleasepool {
NSArray *array = [@"Jag är en test av sortering" componentsSeparatedByString:@" "];
NSArray *englishSort = [array sortedArrayUsingDescriptors:[NSArray arrayWithObject:[NSSortDescriptor sortDescriptorWithKey:@"description" ascending:YES selector:@selector(caseInsensitiveCompare:)]]];
NSLog(@"English = %@", englishSort);
NSArray *swedishSort = [array sortedArrayUsingDescriptors:[NSArray arrayWithObject:[NSSortDescriptor sortDescriptorWithKey:@"description" ascending:YES selector:@selector(caseInsensitiveSwedishCompare:)]]];
NSLog(@"Swedish = %@", swedishSort);
}
return 0;
}
首先,你不应该弄乱语言设置!我想要一份瑞典语的清单,按字母顺序排列。(瑞典语按字母顺序排列,而非英语,与用户的电话语言无关)。那么什么是正确的方法呢?@DarkDust那么强制使用应用程序语言是错误的吗?我在整个应用程序中只有一个排序,我希望用瑞典语而不是英语排序。对,以上应该可以做到这一点。修改区域设置会影响排序以外的许多事情。你能给我举个例子吗?当我将设备语言设置为瑞典语时,它工作得非常好。但是,如果我把设备语言转换成英语,排序是用英语完成的,而瑞典字符则放在中间。<代码> NSLALALE * LoaLe= [ [NSLaLaLaLeCal] ]与LoaLeI标识符:@“SE”];SorterDarray=[someArray SorterDarray UsingComparator:^(id a,id b){返回[a比较:b选项:0范围:NSMakerRange(0,a.length)区域设置:区域设置];}];[现场发布]代码>