我正在开发一个用户可以随时更改语言的应用。我在一个演示应用程序中完成了这个。它工作正常。但它有一个问题,那就是本地化应用程序,我必须执行2个任务。
步骤1:我必须为每个对象创建IB插座(即每个类==>按钮,标签,textFields,TextViews)。
第2步:我必须为每个对象设置语言,例如:[myButton setTitle:[Language get:@"Language Test" alter:nil] forState:UIControlStateNormal];
或myLabel.text=LocalizedString(@"Forgot Passoword");
我有一个项目有很多屏幕,大约60个屏幕(在故事板中)。不幸的是,在这个项目中,没有IB出口可用于所有物体。字符串设置在故事板中。现在我必须用另一种语言支持这个应用程序(当前语言英语)名称阿拉伯语。
结论:如果我做了2个以上步骤(为每个对象创建IB插座 ,然后在.m文件中为每个对象编写代码)。这将需要非常多 时间。还有其他更好的选择吗?我想要不要 在.m文件中创建IB插座和编码。任何建议都会很棒!!
到目前为止我做了什么:
遵循这些tuttorials:
(1)。 How to force NSLocalizedString to use a specific language
和示例项目:
(1)。 https://github.com/tonisalae/TSLanguageManager
(2)。 https://github.com/object2dot0/Advance-Localization-in-ios-apps
我的代码:
示例调用:
[Language setLanguage:@"it"];
OR
[Language setLanguage:@"de"];
+(void)initialize {
NSUserDefaults* defs = [NSUserDefaults standardUserDefaults];
NSArray* languages = [defs objectForKey:@"AppleLanguages"];
NSString *current = [languages objectAtIndex:0];
[self setLanguage:current];
}
+(void)setLanguage:(NSString *)l {
NSLog(@"\n\n\t ***** Hint Lang. selected by user: %@ ****\n\n", l);
NSString *path = [[ NSBundle mainBundle ] pathForResource:l ofType:@"lproj" ];
bundle = [NSBundle bundleWithPath:path];
}
+(NSString *)get:(NSString *)key alter:(NSString *)alternate {
return [bundle localizedStringForKey:key value:alternate table:nil];
}