我已在项目中添加了以下代码:
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文件。
可能是什么问题?
答案 0 :(得分:0)
这里有一些事情:
1)为什么保留+初始化当前字符串?那会泄漏。
2)你对此有何看法?你只是在很高的层次上改变语言。该应用程序肯定不会观察这些设置,以立即调整语言。它可能在重新启动应用程序后工作,但这不是解决此问题的方法。
3)为什么要在应用程序中更改语言?在您的应用中,没有人会期待这个功能。所以我只是放弃了这个功能,因为这是不必要的。
答案 1 :(得分:0)
如果您想使用不基于手机语言的应用语言,您需要执行以下操作:
答案 2 :(得分:0)
您的问题是nib加载不知道它应该使用您自己的i18n方法。因此,您需要在viewDidLoad方法
中以编程方式填充标签等