2011-01-19 2 views
9

iPhone 응용 프로그램을 현지화하려고합니다. 사용자 언어 (iOS 시스템 언어)가 독일어 인 경우 다른 URL을 사용하고 싶습니다. 내가 [NSLocale currentLocale] 현재 지역에 따라 언어를 반환 이해현지화 : 현재 사용자 언어를 얻는 방법?

NSURL *url = [NSURL URLWithString:@"http://..."]; // english URL 
NSString* languageCode = [[NSLocale preferredLanguages] objectAtIndex:0]; 
if ([languageCode isEqualToString:@"de"]) { 
    url = [NSURL URLWithString:@"http://..."]; // german URL 
} 

있지만 시스템 언어, 둘 [NSLocale systemLocale] 작업을 수행합니다

나는이 올바른 그 일의 방법이없는 경우 알고 싶어요.

은 (내가 여기 NSLocalizedString를 사용하지 않습니다!)

답변

13
NSUserDefaults *defaults = [NSUserDefaults standardUserDefaults]; 
NSArray *languages = [defaults objectForKey:@"AppleLanguages"]; 
NSString *currentLanguage = [languages objectAtIndex:0]; 

귀하의 코드는 OK입니다. 하지만이 같은 DOIT 것 : 당신의 Localizable.strings에

다음
NSString* urlString = NSLocalizedString(@"myUrlKey", nil); 

는 당신이 단지 수있는 파일 : 난 그냥이 같은 지역화 된 URL을 찾아 볼 NSLocalizedString을 사용

NSString *urlString = nil; 
    NSString *languageCode = [[NSLocale preferredLanguages] objectAtIndex:0]; 
    if ([languageCode isEqualToString:@"de"]) { 
     urlString = @"http://..."; 
    }else{ 
     urlString = @"http://..."; 
    } 
    NSURL *url = [NSURL URLWithString:[urlString stringByAddingPercentEscapesUsingEncoding: NSUTF8StringEncoding]]; 
9

// German 
"myUrlKey" = "http://www.example.com/de/myapp"; 

그리고

// English 
"myUrlKey" = "http://www.example.com/en/myapp"; 

각각. 당신은 엑스 코드로 변경 시스템의 설정의없이 다른 언어를 테스트 6 새로운 기능을 테스트하려는 경우

+3

번역 팀에 URL의 책임을 남기고 싶은지 잘 모르겠습니다. –

+0

나는이 솔루션이 최고라고 생각한다 – jimwan

2

더 나은

[[NSLocale currentLocale] objectForKey:NSLocaleLanguageCode]; 

를 사용합니다.

+0

주의 : 현재 로케일이 기본 설정 언어와 같지 않다! 로케일은 텍스트를 비교하는 방법과 숫자와 날짜의 형식을 지정하는 방법입니다. 선호하는 언어는 실제 언어입니다. 그래서, 나 같은 사용자가 독일어 로케일을 사용하고 (독일어 날짜와 24 시간 시계를 얻으려고해도) OS X을 영어로 사용하는 것을 선호합니다. 어떤 번역본을 표시할지 결정하려면, 로켈이 아닌 선호하는 언어를 사용하십시오! (많은 앱이이 오류를 낳고, 영어를 선호하지만 독일어로 앱을 만들면 상당히 짜증납니다.) –