2012-02-09 69 views
3

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

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

任何帮助将不胜感激。

+0

http://stackoverflow.com/questions/8351445/runtime-change-the-language-localization-in-three20 – 0xDE4E15B 2012-02-20 22:21:43

+0

我读过这篇文章之前,但为three20库的解决方案,我正在开发一个iPad应用程序不使用任何外部库。 thx评论。 – Scar 2012-02-20 22:42:41

回答

3

主要是你可以使用有人创建了一个项目:Advance Localization in iOS apps

或者还有另一种方法,来实现它通过yourself.You必须在你的项目中的所有本地化文件:

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

+0

伟大的解决方案,但这项工作,当我有一个启动页面,问用户你喜欢使用哪种语言,所以,主要问题是我如何重新加载屏幕上显示的当前视图控制器和已加载的控制器在记忆中。 注意:我使用TabBar项目模板,当用户点击它们时加载所有的点击,并且如果有内存警告,它将卸载它们。再次,很好的答案,谢谢。 – Scar 2012-02-23 07:10:03

相关问题