2013-07-31 3 views
2

멕시코 스페인어와 다른 문자열을 미국 스페인어보다 표시하려고합니다. 앱에는 항상 미국식 스페인어 문구가 표시됩니다. FYI - 영어, 프랑스어 및 포르투갈어는 정상적으로 작동하지만 로케일은 지정되지 않았습니다.iOS 현지화 - es-US와 es-MX를 인식하지 못합니다

+ 버튼을 클릭하고 "기타"메뉴에서 스페인어 (멕시코) (es-MX) 및 스페인어 (미국) (es-US)를 선택하여 빌드 설정 -> 현지화에 현지화 폴더를 만들었습니다. 그런 다음 구를 적절하게 업데이트했습니다. 프로젝트에서는 (스페인어 - 멕시코) 및 (스페인어 - 미국)을 포함한 5 개의 Localizable.strings 파일을 볼 수 있습니다. 마찬가지로 Finder에서 es-MX 및 es-US를 포함하여 예상되는 폴더를 볼 수 있습니다.

나는 응용 프로그램의 didFinishLaunchingWithOptions 일부 NSLog 메시지를 넣어 :

NSLog(@"preferredLocalizations=%@", [[[NSBundle mainBundle] preferredLocalizations] objectAtIndex:0]); 
    NSLog(@"localization array=%@, count=%d", [[NSBundle mainBundle] preferredLocalizations], [[[NSBundle mainBundle] preferredLocalizations] count]); 
    NSLog(@"preferredLanguage = %@", [[NSLocale preferredLanguages] objectAtIndex:0]); 
    NSLog(@"language array=%@, count=%d", [NSLocale preferredLanguages], [[NSLocale preferredLanguages] count]); 
    NSUserDefaults* defs = [NSUserDefaults standardUserDefaults]; 
    NSArray* languages = [defs objectForKey:@"AppleLanguages"]; 
    NSString *current = [languages objectAtIndex:0]; 
    NSLog(@"user default language=%@", current); 

출력은 다음과 같습니다

2013-07-30 22:21:24.911 ecatalog[33497:907] application:didFinishLaunchingWithOptions 
2013-07-30 22:21:24.918 ecatalog[33497:907] preferredLocalizations=es 
2013-07-30 22:21:24.920 ecatalog[33497:907] localization array=(
    es 
), count=1 
2013-07-30 22:21:24.922 ecatalog[33497:907] preferredLanguage = es 
2013-07-30 22:21:24.924 ecatalog[33497:907] language array=(
es, 
en, 
fr, <snipped a bunch for brevity> 
ms, 
"en-GB", 
ca, 
hu, 
vi 
), count=34 
2013-07-30 22:21:24.926 ecatalog[33497:907] user default language=es 

언어 배열이 휴대 전화에서 사용 가능한 언어 목록에 보인다, 나의 선호하는 순서 - 즉, 프랑스어로 전화를 설정하면 fr이 목록 맨 위에 표시됩니다.

관련이 있지만 내 프로젝트에 스페인어를 지원하는 두 개의 타사 프레임 워크가 포함되어 있지만 es-MX.lproj 또는 es-US.lproj가 아닌 es.lproj 변형이 포함되어 있는지는 잘 모르겠습니다.

다른 하나의 "증상"- 시뮬레이터에서 앱을 실행하면 영어와 내가 시뮬레이터를 설정 한 언어가 번갈아 나타납니다.

감사합니다.

답변

0

필자의 경우 멕시코와 미국 스페인어간에 다른 하나의 문자열 만있을 수 있으며 한 곳에서만 사용됩니다.

NSString *startString; 
    // HACK - to diferentiate between Mexican Spanish and all others 
    NSLocale* curentLocale = [NSLocale currentLocale]; 
    NSString *localId = [curentLocale localeIdentifier]; 
    if ([localId isEqualToString: @"es_MX"]) { 
     // hard code a string 
     startString = @"Para seleccionar un folleto da clic +"; 
    } else { 
     startString = NSLocalizedString(@"Click + to start!", nil); 
    } 

그것은 사람이있다, 그래서 만약 "올바른 방법은"나는 그것을 감사하겠습니다, 느낌이 좋지 않습니다 그래서 내 주위에 작업을 수동으로 로케일과 하드 코드 멕시코 스페인어 문자열을 확인하는 것입니다.