2

이 문제를 해결하기 위해 서클에 등장한 것 같습니다. 지금은 어디로 가고 싶습니다.NSLocale setPreferredLanguage

다음과 같이 내 언어를 강제로 (스웨덴어로) 보내려고합니다.

@autoreleasepool { 
    [[NSUserDefaults standardUserDefaults] setObject:[NSArray arrayWithObjects:@"sv", nil] forKey:@"AppleLanguages"]; 
    [[NSUserDefaults standardUserDefaults]synchronize]; 
    return UIApplicationMain(argc, argv, nil, NSStringFromClass([AppDelegate class])); 
} 

주 방법으로 수행 했으므로 응용 프로그램이 시작 되 자마자 기본 설정이 적용됩니다.

알파벳순으로 배열을 정렬하려면 localizedCaseInsensitiveCompare:을 사용하여 NSSortDescriptor을 사용합니다.

NSSortDescriptor valueDescriptor * = [NSSortDescriptor의 ALLOC] initWithKey "iname 여기서"상승 @ : YES 선택기 : @ 선택기 (localizedCaseInsensitiveCompare :)];

NSArray * descriptors = [NSArray arrayWithObject : valueDescriptor];

self.ingredientsList = [NSMutableArray arrayWithArray : [self.ingredientsList sortedArrayUsingDescriptors : descriptors]];

하지만 내 로컬 언어로 정렬하는 것이 처음에는 발생하지 않습니다. 그러나 앱을 다시 시작하면 언어 (스웨덴어)에 따라 정렬됩니다. 왜 그것이 처음으로 일어날 수 있습니까?

내가 뭘 잘못하고 있니?

도움말/의견을 보내 주십시오. 감사합니다.

+1

당신이해야하지 처음부터 언어 설정 엉망! – DarkDust

+0

스웨덴어로 된 목록을 사전 순으로 정렬하고 싶습니다. (스웨덴어로 사전 순으로 사용자의 전화 언어와 관계없이 영어로 표시되지 않음). 이 일을 올바르게하는 방법은 무엇입니까? – Neelesh

+0

@DarkDust는 애플리케이션 언어를 강요하는 것이 잘못 되었습니까? – Neelesh

답변

6

@DarkDust가 정확합니다. 로켈 자체를 수정하지 마십시오. 그것은 당신의 통제하에 있지 않으며, 당신이 보는 것처럼, 그것은 잘 작동하지 않습니다. 가장 중요한 것은 하나의 정렬 작업 만 수정하려는 경우 매우 큰 해머입니다.이 작업을 올바르게 수행하려면 다양한 로컬라이제이션 Info.plist 항목 (특히 CFBundleLocalizations)을 사용할 수 있지만 단일 목록을 정렬합니다.

사용하려는 것은 compare:options:range:locale:입니다. 특정 로케일을 전달할 수 있습니다. 이 메서드는 sortedArrayUsingSelector: 또는 sortedArrayUsingComparator: 안에 사용할 수 있습니다.

또는 swedishCaseInsensitiveCompare:NSString에 추가하는 카테고리를 사용할 수 있습니다. 그러면 현재와 마찬가지로 NSSortDescriptor을 사용할 수 있습니다.


예. ä 영어 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; 
} 
+0

난 내 전체 애플 리케이션에서 단 하나의 정렬이 있고 나는 스웨덴어로 정렬되고 영어로 정렬되기를 원하지 않는다. – Neelesh

+0

맞아요, 위의 내용이이를 달성해야합니다. 로켈을 수정하면 정렬 이외의 많은 작업에 영향을줍니다. –

+0

예를 들어 주시겠습니까? – Neelesh