Я хочу изменить язык приложения внутри приложения без перезагрузки.Как изменить язык приложения внутри приложения?
Файлы Localizable.strings для обоих языков. Все мои XIB и главная раскадровка тоже.
Те ниже кода можно изменить язык только после перезапуска приложения
main.m:
int main(int argc, char *argv[])
{
NSString *currLang = [[NSUserDefaults standardUserDefaults] stringForKey:@"Lang"];
if (!currLang) {
NSString *languageCode = [[NSLocale preferredLanguages] objectAtIndex:0];
if ([languageCode isEqualToString:@"ru"]) {
[[NSUserDefaults standardUserDefaults] setValue:languageCode forKey:@"Lang"];
}
else [[NSUserDefaults standardUserDefaults] setValue:@"en" forKey:@"Lang"];
[[NSUserDefaults standardUserDefaults] synchronize];
}
currLang = nil;
currLang = [[NSUserDefaults standardUserDefaults] stringForKey:@"Lang"];
if ([currLang isEqualToString:@"ru"]) {
[[NSUserDefaults standardUserDefaults] setObject:[NSArray arrayWithObjects:@"ru", @"en", nil]
forKey:@"AppleLanguages"];
}
else
[[NSUserDefaults standardUserDefaults] setObject:[NSArray arrayWithObjects:@"en", @"ru", nil]
forKey:@"AppleLanguages"];
[[NSUserDefaults standardUserDefaults] synchronize];
@autoreleasepool {
return UIApplicationMain(argc, argv, nil, NSStringFromClass([AppDelegate class]));
}
}
Есть 2 кнопки (Eng & Ru) муравей метод:
- (IBAction)changeLang:(UIButton *)sender
{
if ([sender isEqual:btnSetRuLang]) {
if ([[userDefaults stringForKey:@"Lang"] isEqualToString:@"ru"]) {
return;
}
[userDefaults setValue:@"ru" forKey:@"Lang"];
[userDefaults synchronize];
}
else {
if ([[userDefaults stringForKey:@"Lang"] isEqualToString:@"en"]) {
return;
}
[userDefaults setValue:@"en" forKey:@"Lang"];
[userDefaults synchronize];
}
NSString *currLang = [userDefaults stringForKey:@"Lang"];
NSString *alertBody;
if ([currLang isEqualToString:@"ru"]) {
[userDefaults setObject:[NSArray arrayWithObjects:@"ru", @"en", nil]
forKey:@"AppleLanguages"];
alertBody = @"Перезапустите приложение для смены языка";
}
else {
[userDefaults setObject:[NSArray arrayWithObjects:@"en", @"ru", nil]
forKey:@"AppleLanguages"];
alertBody = @"Restart application for change language";
}
[userDefaults synchronize];
UIAlertView *alertView = [[UIAlertView alloc] initWithTitle:@"Hom" message:alertBody delegate:self cancelButtonTitle:@"Ok" otherButtonTitles: nil];
[alertView show];
}
Итак, как мне изменить lang без перезапуска приложения?
спасибо.
Возможный дубликат [Изменить язык приложения iOS на лету] (http://stackoverflow.com/questions/6150576/change-ios-apps-language-on-the-fly) – Raptor
У вас есть en.strings & ru.strings в вашем проекте? Глядя на код, который вы опубликовали выше, не похоже, что вы делаете локализацию правильно. –
@EvolGate: У меня есть Localizable.strings (English) и Localizable.strings (русский) – Romowski