我正在开发一个需要在运行时进行本地化的应用程序,我的意思是它将是一个立即更改语言的按钮,我搜索了本地化以及我发现的是如何本地化应用程序依赖在iPhone国际语言上。
我已经本地化了我拥有的所有nib文件,并根据它的语言重新设计每个nib文件,但是当用户点击按钮时我如何更改nib文件?
任何帮助将不胜感激。
答案 0 :(得分:3)
主要是您可以使用由某人创建的项目:Advance Localization in iOS apps
或者还有另一种方法,自己实现它。你必须在项目中拥有所有本地化文件:
@implementation Language
static NSBundle *bundle = nil;
+(void)initialize {
NSArray* languages = [NSLocale preferredLanguages];
NSString *current = [languages objectAtIndex:0];
[self setLanguage:current];
}
/*
example calls:
[Language setLanguage:@"it"];
[Language setLanguage:@"de"];
*/
+(void)setLanguage:(NSString *)l {
NSLog(@"preferredLang: %@", l);
NSString *path = [[ NSBundle mainBundle ] pathForResource:l ofType:@"lproj" ];
bundle = [[NSBundle bundleWithPath:path] retain];
}
+(NSString *)get:(NSString *)key alter:(NSString *)alternate {
return [bundle localizedStringForKey:key value:alternate table:nil];
}
@end
此代码适合您的需求。但这只是基础。因此,每个文本都必须使用get:alter:
方法加载,因此它将以正确的语言加载。正如您在初始化时看到的,此类将使用系统语言,但在您调用setLanguage
方法后,它将使用您设置的语言。使用get:alter:
方法设置语言后,您应该在视图控制器中重新加载所有文本,再次为出现的每个文本调用get:alter:
方法,并将结果设置为所需的标签或文本字段或者需要i18n的任何其他NSString
类型参数。所以有更多的工作,但这是一个非常好的基础。我认为它不会自动发生,你必须编码。
答案 1 :(得分:1)
请参阅我对Creating a localized iPhone app but allowing the user to change language for the application的回答。
基本上,您将本地化分为表和捆绑,而不是使用内置的本地化系统。您可以从每个语言表和每个语言包中的nib文件中查找字符串。