2012-08-27 6 views
3

J'ai une application qui nécessite 2 langues, anglais et français.App iPad - Modifier les langues par programme

J'ai déjà configuré les fichiers Localizable.strings dans leurs dossiers respectifs "en.lproj" et "fr.lproj" ... et quand je change la langue de l'iPad (dans l'application native settings), lancez application, il charge en fait le texte correct (c'est-à-dire une copie anglaise ou une copie française).

Je dois avoir un UISegmentedControl basculer entre les 2 langues sans avoir à redémarrer l'application. Comment puis-je obtenir l'application pour modifier la langue (actuelle) de sorte que lorsque j'appelle une méthode qui (re) définit toutes les images de UILabels et UIImageViews qu'ils lisent à partir de la Localizable.strings du dossier .lproj opposé. fichier?!? Je sais comment utiliser UISegmentedControl, et ce n'est pas ma question. Je cherche plus d'une ligne de code qui définit la langue de l'application de l'application ou de la locale ou quelque chose (comme je suis assez nouveau pour internationalization.localization).

-

Exemple de la façon dont je mets l'image pour UIImageView:

myUIImageView1.image = [UIImage imageNamed:NSLocalizedString(@"myUIImageView1", @"comment for the translator")]; 

Exemple de la façon dont je mets le texte d'un UILabel:

myLabel1.text = NSLocalizedString(@"myLabel1", @"comment for the translator"); 
+0

peut-être [ce] (http://stackoverflow.com/questions/6150576/change-ios-apps-language-on-the-fly)? Ce – Dima

+1

est une assez bonne réponse à votre question: http://stackoverflow.com/questions/1669645/how-to-force-nslocalizedstring-to-use-a-specific-language – Brayden

+0

Ok, donc cela ne travailler, mais le changement ne se reflète que lorsque je redémarre l'application. Comment puis-je l'obtenir pour mettre à jour le fichier .xib à la volée? J'ai lu l'instruction mais je n'ai pas vraiment compris. –

Répondre

3

TROUVE LA SOLUTION! !!

L'application de test suivant a une fonction qui a lu la chaîne souhaitée à partir du fichier correct 'Localizable.strings' (en fonction de la langue choisie): https://github.com/object2dot0/Advance-Localization-in-ios-apps

-

Je pris ce code, et le code requis pour définir la langue principale de l'application (trouvé dans la réponse ci-dessus posté par Brayden: How to force NSLocalizedString to use a specific language), et les mettre ensemble.

Voici ce que mon code ressemble maintenant (note - mon UISegmentedControl appelle une fonction dans sa vue de viewController [lorsque la méthode « valeur modifiée » de UISegmentedControl est déclenché] qui appelle ensuite la fonction de toggleLanguage dans le parent viewController):

-(void)toggleLanguage:(NSString *)primaryLanguage secondaryLanguage:(NSString *)secondaryLanguage 
    { 
     //set app's primary language 
     defaults = [NSUserDefaults standardUserDefaults]; 
     [defaults setObject:[NSArray arrayWithObjects:primaryLanguage,secondaryLanguage,nil] forKey:@"AppleLanguages"]; 
     [defaults synchronize]; 

     //update UILabel and UIImageViews 
     [self setLanguageSpecificItems]; 
    } 
    -(NSString *)languageSelectedStringForKey:(NSString *)key 
    { 
     //read primary language 
     NSArray *appleLanguagesArray = [defaults objectForKey:@"AppleLanguages"]; 
     NSString *currentLanguage = [appleLanguagesArray objectAtIndex:0]; 

     //get the path to the desired lproj file 
     NSString *path; 
     if([email protected]"en") 
     { 
      path = [[NSBundle mainBundle] pathForResource:@"en" ofType:@"lproj"]; 
     } 
     else 
     if([email protected]"fr") 
     { 
      path = [[NSBundle mainBundle] pathForResource:@"fr" ofType:@"lproj"]; 
     } 
     NSBundle* languageBundle = [NSBundle bundleWithPath:path]; 

     //find and return the desired string 
     NSString* str=[languageBundle localizedStringForKey:key value:@"" table:nil]; 
     return str; 
    } 
    -(void)setLanguageSpecificItems 
    { 
     myUIImageView1.image = [UIImage imageNamed:[self languageSelectedStringForKey:@"myUIImageView1"]]; 
     myLabel1.text = [self languageSelectedStringForKey:@"myLabel1"]; 
    } 

-

Merci pour l'aide tout le monde !!!

-Chris Allinson

Questions connexes