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

在运行时本地化iPad应用程序,ipad,ios4,localization,nib,Ipad,Ios4,Localization,Nib,我正在开发一个需要在运行时进行本地化的应用程序,我的意思是,这将是一个立即更改语言的按钮,我搜索了本地化方面的内容,我发现如何根据iPhone国际语言对应用程序进行本地化 我已经本地化了我所有的nib文件,并根据其语言重新设计了每个nib文件,但是当用户单击按钮时,我如何更改nib文件呢 任何帮助都将不胜感激。请参阅我的答案 基本上,您将本地化分解为表和包,而不是使用内置的本地化系统。您可以从每种语言的表中查找字符串,从每种语言的捆绑包中查找nib文件。主要是您可以使用由某人创建的项目: 或者有

我正在开发一个需要在运行时进行本地化的应用程序,我的意思是,这将是一个立即更改语言的按钮,我搜索了本地化方面的内容,我发现如何根据iPhone国际语言对应用程序进行本地化

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

任何帮助都将不胜感激。

请参阅我的答案


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

主要是您可以使用由某人创建的项目:

或者有另一种方法可以自己实现。项目中必须有所有本地化文件:

@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
类型参数。所以还有更多的工作,但这是一个很好的基础。我认为这不会自动发生,你必须编写代码。

我以前读过这篇文章,但是three20库的解决方案,我正在开发一款不使用任何外部库的iPad应用程序。thx的评论。伟大的答案,你能提供一些源代码的答案,一个样本项目将是伟大的。提前感谢。这是一个很好的解决方案,但当我有一个启动页面询问用户您喜欢使用哪种语言时,这就起作用了。因此,主要问题是如何重新加载屏幕上显示的当前视图控制器和内存中已加载的控制器。注意:我使用的是一个TabBar项目模板,当用户点击它们时加载所有点击,如果出现内存警告,则卸载它们。再一次,很好的回答,谢谢。