在变得活跃时改变本地化

时间:2011-08-22 11:55:06

标签: objective-c ios ios4

我需要在iOS应用程序变为活动状态时更改其本地化。

所以..

我在settings.bundle文件中通过main.m制作的设置中有一个语言选择器。我正在读这样的设置

int main(int argc, char *argv[]) {
    NSAutoreleasePool *pool = [NSAutoreleasePool new];
    // --
    NSString *appLang = [[NSUserDefaults standardUserDefaults] stringForKey:@"appLang"];

    if (appLang == nil)
        [[NSUserDefaults standardUserDefaults] setValue:[[NSLocale preferredLanguages] objectAtIndex:0] forKey:@"appLang"];

        [[NSUserDefaults standardUserDefaults]
         setObject:[NSArray arrayWithObjects:[[NSUserDefaults standardUserDefaults] stringForKey:@"appLang"], nil]
         forKey:@"AppleLanguages"];

        [[NSUserDefaults standardUserDefaults] synchronize];
        [appLang release];
        // --
        int retVal = UIApplicationMain(argc, argv, nil, @"AppDelegate");
        [pool release];
        return retVal;
    }

因此,应用程序使用设置中的数据更改不同语言的图像。

现在,我正在使用条件来定义这样的语言:

if ([[[NSLocale preferredLanguages] objectAtIndex:0] isEqual:@"en"])

一切正常,但问题是:当应用程序变为活动状态时,我可以更改应用程序的本地化(使用我的方法)(applicationWillEnterForeground或类似的东西)?我怎么能这样做?

1 个答案:

答案 0 :(得分:0)

您可以在视图控制器中收听UIApplicationWillEnterForegroundNotification。你可以这样做:

[[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(myFunc) name:UIApplicationWillEnterForegroundNotification object:nil];

当应用程序进入前景时myFunc将被调用,在那里您将能够设置所有内容 - 设置正确的本地化,切换图像等。


我不知道它是否正是您需要的,但假设您有一个名为myImage的UIImageVIew并且您想要将新图像加载到此容器中,您只需设置它的图像属性即可设置myFunc喜欢这样:

- (void) myFunc {
    /* 
    set localization parameters
    */ 
    // set image
    myImage.image = [UIImage imageNamed:[NSString stringWithFormat:@"img_%@.jpg", appLang]];
}
相关问题