在运行时本地化iPad应用程序

时间:2012-02-09 11:55:03

标签: ipad ios4 localization nib

我正在开发一个需要在运行时进行本地化的应用程序,我的意思是它将是一个立即更改语言的按钮,我搜索了本地化以及我发现的是如何本地化应用程序依赖在iPhone国际语言上。

我已经本地化了我拥有的所有nib文件,并根据它的语言重新设计每个nib文件,但是当用户点击按钮时我如何更改nib文件?

任何帮助将不胜感激。

2 个答案:

答案 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:方法,并将结果设置为所需的标签或文本字段或者需要i18​​n的任何其他NSString类型参数。所以有更多的工作,但这是一个非常好的基础。我认为它不会自动发生,你必须编码。

答案 1 :(得分:1)

请参阅我对Creating a localized iPhone app but allowing the user to change language for the application的回答。

基本上,您将本地化分为表和捆绑,而不是使用内置的本地化系统。您可以从每个语言表和每个语言包中的nib文件中查找字符串。