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

3

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

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

我需要使用UISegmentedControl在不重新启动应用程序的情况下在两种语言之间切换。

如何更改(当前的)语言,以便当我调用一个方法来从相反的.lproj文件夹的Localizable.strings文件中读取所有UILabels'文本和UIImageViews'图像时?!?

我知道如何使用UISegmentedControl,这不是我的问题。我更多地寻找一行代码,该代码设置应用程序的束语言或区域设置或其他内容(因为我对国际化.本地化还比较陌生)。

-

以下是我如何为UIImageView设置图像的示例:

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

我设置UILabel文本的示例:

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

也许可以参考这个链接:https://dev59.com/X2025IYBdhLWcg3wNTAV? - Dima
1
这是对你问题的一个相当不错的回答:https://dev59.com/LnI-5IYBdhLWcg3wy70d - Brayden
好的,这个确实可以工作,但更改只在我重新启动应用程序时才反映出来。如何使其实时更新.xib文件?我阅读了说明但没有真正理解。 - Chris Allinson
http://stackoverflow.com/questions/34130853/how-to-force-an-app-to-change-language-in-ios-objective-c/34131794#34131794 - user3182143
1个回答

4
找到解决方法了!!! 下面这个测试应用程序有一个函数,从正确的“Localizable.strings”文件中读取所需的字符串(根据所选语言):https://github.com/object2dot0/Advance-Localization-in-ios-apps -
我使用了这段代码和设置应用程序主语言所需的代码(在Brayden发布的答案中找到:如何强制NSLocalizedString使用特定语言),将它们组合在一起。
现在我的代码看起来像这样(注意 - 我的UISegmentedControl调用其视图控制器中的一个函数[当UISegmentedControl的“值更改”方法被触发时],然后调用父视图控制器中的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"];
    }

感谢大家的帮助!!!
- Chris Allinson

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接