NSLocale currentLocale은 항상 사용자의 현재 언어가 아닌 "en_US"를 반환합니다.
아이폰 앱을 국제화하는 중입니다. 사용자의 현재 로케일에 따라 특정 보기를 프로그래밍 방식으로 변경해야 합니다.아이폰 시뮬레이터의 언어 선호도나 실제 하드웨어가 어떻든 간에, 저는 미칠 것 같습니다.locale
항상 "en_US"로 평가됩니다.
NSString *locale = [[NSLocale currentLocale] localeIdentifier];
NSLog(@"current locale: %@", locale);
이상한 것은 나머지 애플리케이션이 예상대로 작동한다는 것입니다.Localization.strings 파일에서 올바른 문자열을 선택하고 인터페이스에서 사용하며 선택한 로케일에 대한 올바른 .xib 파일이 사용됩니다.
저는 또한 다음과 같은 시도를 했지만 소용이 없었고 같은 결과를 얻었습니다.
NSString *locale = [[NSLocale autoupdatingCurrentLocale] localeIdentifier];
NSLog(@"current locale: %@", locale);
제가 놓친 간단한 것이 있나요?선호나 수입?
내가 하던 일:
대런의 대답에서 알 수 있듯이, 제가 원하는 선호도는NSLocale
오히려 여기에 있습니다.
NSUserDefaults* userDefaults = [NSUserDefaults standardUserDefaults];
NSArray* languages = [userDefaults objectForKey:@"AppleLanguages"];
NSString* preferredLanguage = [languages objectAtIndex:0];
NSLog(@"preferredLanguage: %@", preferredLang);
피터의 대답이 더 나은 해결책인 것 같습니다.
NSArray* preferredLanguages = [NSLocale preferredLanguages];
NSLog(@"preferredLanguages: %@", preferredLanguages);
[NSLocale currentLocale]
언어가 아닌 장치의 지역 형식 설정을 기반으로 합니다.지역이 미국으로 설정되어 있으면 _을 얻을 수 있습니다.어떤 언어를 사용하든 상관없이 미국.
문서화되지 않은 키를 사용하여 기본값을 직접 쿼리하는 대신 NSLocale 클래스에 기본 언어 배열을 요청합니다.
현재 장치 언어를 가져오려면 대신 다음을 사용합니다.
NSString * language = [[NSLocale preferredLanguages] objectAtIndex:0];
여기에 설명된 바와 같이: iOS에서 최신 장치 언어를 얻습니까?
우리에게 문제는 개발 계획에서 애플리케이션 언어와 애플리케이션 영역을 재정의하고 있다는 것이었습니다.구성표 옵션(편집 구성표 -> 옵션)에서 응용프로그램 언어가 시스템 언어로 설정되어 있는지 확인합니다.
나는 둘 다
NSString *localeString = [[NSLocale currentLocale] localeIdentifier];
그리고.
NSArray *array = [NSLocale preferredLanguages];
self.label.text = array[0];
시뮬레이터에서 동일한 결과를 얻을 수 있습니다.
월 이름을 프랑스어로 설정된 장치에서 영어로 포맷하는 문제가 있었습니다.
제 솔루션은 다음과 같습니다.
NSLocale *locale = [NSLocale localeWithLocaleIdentifier:[[NSLocale preferredLanguages] objectAtIndex:0] ];
[self.monthNameFormatter setLocale:locale];
[self.monthNameFormatter setDateFormat:@"MMMM"];
[self.monthNameFormatter stringFromDate:myDate];
저는 "en_US"를 제외하고 "en_US"의 복사본인 "en" 현지화가 있으면 시뮬레이터가 자동으로 언어 설정을 존중하기 시작하지만 "en_US"가 옵션이 되면 설정에 상관없이 항상 선택한다는 것을 발견했습니다.
질문이 너무 오래되었지만 이 코드는 많은 사람들에게 도움이 될 수 있습니다.
main.m은 다음과 같아야 합니다.
NSString *localecode=[[NSLocale currentLocale] localeIdentifier];
localecode=[localecode substringToIndex:2]; //en_GB -> en
NSArray *arr = [NSLocale preferredLanguages];
NSMutableArray * mutable = [arr mutableCopy];
NSString *prefered = [mutable firstObject];
if(![localecode isEqualToString:prefered]){
if(![prefered isEqualToString:@"es"] && ![prefered isEqualToString:@"en"] && ![prefered isEqualToString:@"pt"]){
int index = [mutable indexOfObject:@"en"];
[mutable replaceObjectAtIndex:0 withObject:@"en"];
[mutable replaceObjectAtIndex:index withObject:prefered];
[[NSUserDefaults standardUserDefaults] setObject:mutable forKey:@"AppleLanguages"];
}
else{
int index = [mutable indexOfObject:localecode];
[mutable replaceObjectAtIndex:0 withObject:localecode];
[mutable replaceObjectAtIndex:index withObject:prefered];
[[NSUserDefaults standardUserDefaults] setObject:mutable forKey:@"AppleLanguages"];
}
}
return UIApplicationMain(argc, argv, nil, NSStringFromClass([AppDelegate class]));
이게 뭐죠?장치의 현재 언어가 스페인어, 영어 또는 포르투갈어를 사용하는 경우 응용 프로그램은 현지화된 문자열을 사용하지만, 현재 언어가 해당 문자열 중 하나가 아니며 응용 프로그램에서 지원하지 않는 경우에는 영어로 설정됩니다.
실제 iPad에서 올바른 로케일을 보여줍니다.그러나 시뮬레이터에는 기본적으로 en-US로 설정된 자체 iOS가 있습니다.시뮬레이터 iOS 기본 설정으로 이동하여 원하는 언어 및 지역으로 전환합니다.
그렇게 하면 효과가 있습니다.
언급URL : https://stackoverflow.com/questions/1522210/nslocale-currentlocale-always-returns-en-us-not-users-current-language
'programing' 카테고리의 다른 글
MariaDB가 MySQL이나 Percona보다 SQL을 즉시 가져오는 속도가 빠른 이유는 무엇입니까? (0) | 2023.08.29 |
---|---|
mariaDB에서 InnoDB 테이블을 손상시키는 방법과 테이블이 손상되었는지 확인하는 방법은 무엇입니까? (0) | 2023.08.29 |
MySQL에서 테이블 별칭을 만드는 방법 (0) | 2023.08.29 |
Ajax와 함께 MVC 4를 사용한 파일 업로드 (0) | 2023.08.29 |
창 위치 변경 Jquery (0) | 2023.08.29 |