2012-02-01 6 views
0

В моем приложении пользователи могут выбрать язык, поэтому я хочу, чтобы мое приложение соответствующим образом меняло язык, но оно не работает. Я нашел этот код на сайте:iPhone - Настройка пользовательского языка

// Force languages 
NSString * lang=[[NSUserDefaults standardUserDefaults] stringForKey:@"idioma"]; 
NSLog(@"language %@",[[NSUserDefaults standardUserDefaults] stringForKey:@"AppleLanguages"]); 
if ([lang isEqualToString:@"castella"]) { 

    [[NSUserDefaults standardUserDefaults] 
    setObject:[NSArray arrayWithObject:@"es"] 
    forKey:@"AppleLanguages"]; 
} //else just default user lang 

Этот код не работает. Кажется, я просто настраиваю настройку предпочтений. Я действительно хочу изменить локаль. У меня есть некоторые строки, которые локализованы, а также некоторые из файлов NIB, поэтому я хотел бы добавить список испанских в список предпочтительных локалей на первой позиции, но я действительно не понимаю, как это сделать.

В настройках приложения у меня есть возможность выбрать язык. Это не просто из-за моей упрямства; просто здесь важны региональные языки, а иногда iPhone не поддерживает их, но я провозглашаю переводы.


Из ответов я решил отказаться от баловаться с локали, но это было бы возможно, чтобы показать другой NIB файл (от en.proj или es.proj)? У меня уже есть первая часть:

- (id)initWithNibName:(NSString *)nibNameOrNil bundle:(NSBundle *)nibBundleOrNil 
{ 
    self = [super initWithNibName:nibNameOrNil bundle:nibBundleOrNil]; 
    if (self) { 
     // Custom initialization 
     NSString * lang=[[NSUserDefaults standardUserDefaults] stringForKey:@"idioma"]; 

     if ([lang isEqualToString:@"castella"]) { 
      //Load NIB filer from "es.proj". 
     } 
    } 
    return self; 
} 

Возможно ли это?

ответ

0

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

Вместо этого добавьте localizations в свои файлы NIB и/или Localizable.strings в свой проект. Ваше приложение автоматически покажет лучший язык для пользователя.

Если вы по-прежнему хотите изменить язык внутри своего приложения, не пытайтесь изменить настройки локали, но просто измените то, что вы показываете на экране в своем приложении.

Вы можете сохранить язык, который вы хотите в [NSUserDefaults standardUserDefaults] и показать свои метки в соответствии с этим параметром:

if ([[[NSUserDefaults standardUserDefaults] objectForKey:@"language"] isEqualToString:@"English"]) { 
    aLabel.text = @"This is English."; 
} else if ([[[NSUserDefaults standardUserDefaults] objectForKey:@"language"] isEqualToString:@"Italian"]) { 
    aLabel.text = @"Questo e' italiano."; 
} else if ([[[NSUserDefaults standardUserDefaults] objectForKey:@"language"] isEqualToString:@"Japanese"]) { 
    aLabel.text = @"これは日本語です。"; 
} 
+0

Thnks, если она может быть отклонена, то я не хочу, чтобы это сделать, но как я могу показать nib из es.proj или из en.proj, относящегося к некоторым настройкам по умолчанию пользователя – vallllll

+0

iOS отображает лучший выбор автоматически, в соответствии с пользовательскими настройками. Это означает, что если ваш пользователь выбирает язык «es», ваше приложение показывает «es» версию ваших файлов NIB. – Beppe

+0

Я знаю об es, но это просто пример, для некоторых редких языков это не так, есть ли способ обойти это? – vallllll

0

Неправильная практика, чтобы пользователи выбирали язык второй раз (первый раз они это делали при настройке своего iPhone). Вам лучше взять текущий язык и получить языковые настройки оттуда.

Смежные вопросы