Переопределение предпочтительной локализации строк на лету для тестирования - PullRequest
4 голосов
/ 25 июня 2010

Использование приложения «Настройки» в симуляторе iPhone для переключения языков - это способ проверки настроек локализации PITA.Я пытаюсь выяснить способ переключения локализаций (en / fr / es / etc) на лету в моем приложении с настройкой отладки без перезапуска приложения.

NSBundle предоставляет способы запроса локализованных ресурсов изпроизвольная локализация, например

- (NSString *)pathForResource:(NSString *)name ofType:(NSString *)extension inDirectory:(NSString *)subpath forLocalization:(NSString *)localizationName

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

Есть ли здесь другие стратегии?Если я обернул NSLocalizedString чем-то, что в отладочных сборках выполняло свою работу, каков кратчайший путь для загрузки данного файла .strings?Есть ли программный способ доступа к этим таблицам строк без самостоятельного анализа и анализа?

Спасибо.

Ответы [ 3 ]

3 голосов
/ 28 июня 2010

Единственный способ сделать это, который я выяснил, - использовать тонкий прием, предложенный этим ответом .Вы можете обернуть NSLocalizedString() в функцию, которая знает о «переопределении» локализации и выбирает, как получить ее строки, основываясь на том, установлена ​​ли она.Когда вы хотите переопределить, вы можете создать «подпакет» из каталога локализации, а затем извлечь строку из этого пакета.Вот суть этого:

if (CurrentLocalization != nil) {
    NSBundle * locBundle = [NSBundle bundleWithPath:[[NSBundle mainBundle] pathForResource:CurrentLocalization ofType:@"lproj"]];
    return [locBundle localizedStringForKey:key value:nil table:nil];
} else {
    return NSLocalizedString(key, @"");
}    

и т. Д.

0 голосов
/ 01 мая 2011

Хитрость в использовании определенного языка путем выбора его из приложения состоит в том, чтобы заставить NSLocalizedString использовать конкретный пакет в зависимости от выбранного языка,

вот пост, который я написал для этого http://learning -ios.blogspot.com / 2011/04 / advance-localization-in-ios-apps.html

и вот код одного примера приложения https://github.com/object2dot0/Advance-Localization-in-ios-apps

0 голосов
/ 25 июня 2010

Установите значение по умолчанию AppleLanguages для массива, состоящего из предпочтительных языков, в первую очередь предпочтительного.Например, если вас интересует только английский, установите для него значение '("en");'

...