Время выполнения сменить язык / локализацию в Three20 - PullRequest
3 голосов
/ 02 декабря 2011

Можно ли изменить язык / локализацию Three20 во время выполнения без перезапуска приложения?

В настоящее время мне удалось изменить язык, изменив значение AppleLanguages в main.m

1 Ответ

3 голосов
/ 02 декабря 2011

Для этого есть «взлом».Вы можете загрузить свой собственный NSBundle с локализованным текстом и использовать вместо него этот NSBundle.Обратите внимание, что если локализованный языковой файл отсутствует, приложение не запустится, поэтому убедитесь, что вы указали правильный язык.

Над реализацией AppDelegate добавьте пользовательское объявление NSBundle:

static NSBundle *bundle = nil;

И затем загрузите нужный язык в этот пакет:

[[NSUserDefaults standardUserDefaults] setObject: [NSArray arrayWithObjects:@"he", nil] forKey:@"AppleLanguages"];

NSLocale* locale = TTCurrentLocale();  
NSString *path = [[NSBundle mainBundle] pathForResource:[locale localeIdentifier] ofType:@"lproj" ];
bundle = [[NSBundle bundleWithPath:path] retain];

Вы добавите пользовательскую функцию в свой AppDelegate, чтобы получить локализованный текст (вместо NSLocalizedString)

///////////////////////////////////////////////////////////////////////////////////////////////////
+ (NSString*)get:(NSString*)key  {
   return [bundle localizedStringForKey:key value:nil table:nil];
}

Чтобы упростить задачу, вы можете добавить статическую функцию в файл pch:

#import "AppDelegate.h"

#define MyLocalizedString(key, alt) [AppDelegate get:key]
...