2013-12-11 2 views
4

Я создаю приложение, которое будет локализовано в будущей версии, поэтому я хочу настроить его для этого.Localizable.strings в iOS, а не локализованные языки

На данный момент у меня есть только один язык (французский), а папка fr.lproj содержит Localizable.strings с французскими переводами для соответствующих ключей.

Проблема в том, что если я устанавливаю свое устройство на английский язык, я не получаю французский перевод по умолчанию, но я вижу имя Keys, которое я использую в NSLocalizedString.

Например, если я пытаюсь получить название для View Controller с:

NSLocalizedStrings(@"viewController_Title",nil); 

The View Controller, для устройства с английским языком показывает «viewController_title» в названии, а если установить французский язык его работает без проблем.

Как я могу справиться с этим?

ответ

0

Ваш проект настроен на использование английского языка по умолчанию.

В вашем файле Info.plist: Установите «Местный регион разработки локализации» на французский язык.

Отсутствующие переводы теперь вернутся на французский, а не на английский.

+0

Ничего не изменится Если я установил локальную область разработки локализации на французский язык. Я все еще получаю ключи вместо переводов – MatterGoal

1

В этом файле строки "Localizable.strings" Вы должны объявить локализацию как этого

French.strings

"viewController_Title" = "ViewController_Title_In_Frech";

English.strings

"viewController_Title" = "ViewController_Title_In_English";

Вы должны использовать локализованную строку, как этот

NSLocalizedStringFromTable (Key, LanguageType, @ "N/A")

например:

NSLocalizedStringFromTable("viewController_Title", English, @"N/A"); 

Примечание: Изменение типа языка программно, тогда вы можете получить соответствующую строку Localized. И локализованная декларация должна быть в файле соответствующих строк.

+0

Это формат, который я использую в своем приложении. его рабочий штраф. – Ganapathy

1

Ваша проблема в том, что вам нужен язык для возврата. Насколько я знаю, нет никакого официального способа вокруг него, я написал методы, как это в прошлом:

NSString * L(NSString * translation_key) { 
    NSString * s = NSLocalizedString(translation_key, nil); 
    if (![[[NSLocale preferredLanguages] objectAtIndex:0] isEqualToString:@"en"] && [s isEqualToString:translation_key]) { 
     NSString * path = [[NSBundle mainBundle] pathForResource:@"en" ofType:@"lproj"]; 
     NSBundle * languageBundle = [NSBundle bundleWithPath:path]; 
     s = [languageBundle localizedStringForKey:translation_key value:@"" table:nil]; 
    } 
    return s; 
} 

В этом случае, используя L(@"viewController_Title"); возвратит строку для языка по умолчанию, в этом случай английский.

Shameless self-citation

0

Как уже упоминалось в других ответах, по умолчанию используется английский язык в случае отсутствующего языка. Есть два решения:
1. Добавить локализацию строка файл для английского языка, а также (с тем же содержанием, как французская локализованной строка имеет)
2. Или добавьте следующий код в основном методе main.m перед вызовом UIApplicationMain

//sets the french as default language 
NSArray *lang = [[NSUserDefaults standardUserDefaults] stringArrayForKey:@"AppleLanguages"]; 
if ([lang count] > 0 && (![[lang objectAtIndex:0] isEqualToString:@"fr"])) { 
    NSLog(@"language is neither de nor fr. forcing de"); 
    [[NSUserDefaults standardUserDefaults] setObject:[NSArray arrayWithObjects:@"fr", @"en", nil] forKey:@"AppleLanguages"]; 
} 
Смежные вопросы