2013-07-31 2 views
2

Я пытаюсь показать другую строку для мексиканского испанского, чем испанский. Приложение всегда отображает американскую испанскую фразу. FYI - английский, французский и португальский работают нормально - но у них нет указанных мест.iOS localization - не распознает es-US vs es-MX

Я создал папку локализации в разделе «Настройки сборки» -> «Локализации», нажав кнопку «+» и выбрав Испанский (Мексика) (es-MX) и испанский (США) (es-US) из меню «Другое». Затем я обновил соответствующие фразы. В проекте я вижу 5 файлов Localizable.strings, включая (испанский-Мексико) и (испанский-США). Аналогично, я вижу ожидаемые папки в Finder, включая es-MX и es-US.

Я положил некоторые сообщения NSLog в didFinishLaunchingWithOptions применения:

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.lproj - не es-MX.lproj или es-US.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); 
    } 

Он не чувствует себя хорошо, так что если кто-то имеет «правильный путь» Я ценю это.