iPhone应用程序语言中的问题即时更改

时间:2012-01-31 14:08:42

标签: iphone objective-c ios cocoa-touch

我已在项目中添加了以下代码:

Language.h:

@interface Language : UIViewController

@end

@implementation Language

static NSBundle *bundle = nil;

+(void)setLanguage:(NSString *)l {
    NSLog(@"preferredLang: %@", l);
    NSString *path = [[ NSBundle mainBundle ] pathForResource:l ofType:@"lproj" ];
    bundle = [[NSBundle bundleWithPath:path] retain];
}

+(void)initialize {
    NSUserDefaults* defs = [NSUserDefaults standardUserDefaults];
    NSArray* languages = [defs objectForKey:@"AppleLanguages"];
    NSString *current = [[languages objectAtIndex:0] retain];
    [self setLanguage:current];

}

此方法+(NSString *)get:未被调用

+(NSString *)get:(NSString *)key alter:(NSString *)alternate {
NSLog(@"Bundle path: %@", [bundle bundlePath]);

    return [bundle localizedStringForKey:key value:alternate table:nil];
}

@end

在我的viewController.m文件中,我有两个用于更改语言土耳其语和英语语言的按钮:

-(IBAction)englishLang:(id)sender{

[Language setLanguage:@"en"];
NSLog(@"language to english");

}

-(IBAction)turkishLang:(id)sender{

[Language setLanguage:@"tr"];
NSLog(@"language to turkish");
}

问题是,当我点击turkish lang按钮时,应该更改语言并且下一个nib文件应该是turkish本地化的,由应用程序选择。但我没有从我的申请中获得这种行为。

它只加载英文本地化的nib文件。

可能是什么问题?

3 个答案:

答案 0 :(得分:0)

这里有一些事情:

1)为什么保留+初始化当前字符串?那会泄漏。

2)你对此有何看法?你只是在很高的层次上改变语言。该应用程序肯定不会观察这些设置,以立即调整语言。它可能在重新启动应用程序后工作,但这不是解决此问题的方法。

3)为什么要在应用程序中更改语言?在您的应用中,没有人会期待这个功能。所以我只是放弃了这个功能,因为这是不必要的。

答案 1 :(得分:0)

如果您想使用不基于手机语言的应用语言,您需要执行以下操作:

  • 制作您自己的NSLocalizedString版本,它将返回 字符串基于您的语言,而不是手机(听起来这是主要问题,如果你通过应用程序有NSLocalizedStrings,返回的值将只与手机的语言相同)
  • 在更改语言时发布通知,以便您的视图可以使用新内容刷新

答案 2 :(得分:0)

您的问题是nib加载不知道它应该使用您自己的i18n方法。因此,您需要在viewDidLoad方法

中以编程方式填充标签等