iPad应用程序 – 以编程方式更改语言

我有一个应用程序,需要2种语言,英语和法语。

我已经在各自的“en.lproj”和“fr.lproj”文件夹中设置Localizable.strings文件…当我更改iPad的语言(在本机设置应用程序),然后启动我的应用程序,它实际上加载正确的文本(即英文版或法文版)。

我需要有一个UISegmentedControl切换2种语言之间,而不必重新启动应用程序。

如何让应用程序改变(当前)的语言,以便当我调用一个方法,(重新)设置所有的UILabels的文本和UIImageViews的图像,他们从相反的.lproj文件夹的Localizable.strings文件?

我知道如何使用UISegmentedControl,这不是我的问题。 我正在寻找更多的设置应用程序的捆绑语言或语言环境的代码行(因为我是国际化.localization相当新的)。

我如何为UIImageView设置图片的例子:

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

我如何设置UILabel文本的例子:

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

find解决scheme!

以下testing应用程序具有从正确的“Localizable.strings”文件(基于所选语言)读取所需string的函数: https : //github.com/object2dot0/Advance-Localization-in-ios-apps

我把这个代码,以及设置应用程序的主要语言所需的代码(在Brayden发布的上述答案中find: 如何强制NSLocalizedString使用特定的语言 ),并将它们放在一起。

这里是我的代码看起来像现在( 注意 – 我的UISegmentedControl在视图的viewController中调用一个函数[当UISegmentedControl'Value Changed'方法被触发],然后调用父视图控制器中的toggleLanguage函数 ):

  -(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(currentLanguage==@"en") { path = [[NSBundle mainBundle] pathForResource:@"en" ofType:@"lproj"]; } else if(currentLanguage==@"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"]; } 

感谢大家的帮助!

克里斯·阿林森