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

Posted

技术标签:

【中文标题】在运行时本地化 iPad 应用程序【英文标题】:Localize iPad app at run time 【发布时间】:2012-02-09 11:55:03 【问题描述】:

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

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

我们将不胜感激。

【问题讨论】:

***.com/questions/8351445/… 我以前读过这篇文章,但是对于three20库的解决方案,我正在开发一个不使用任何外部库的iPad应用程序。谢谢你的评论。 【参考方案1】:

主要可以使用别人创建的项目: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: 方法,并将结果设置为所需的标签或文本字段或任何其他NSString 需要 i18n 的类型参数。所以还有更多的工作,但这是一个非常好的基础。我不认为它可以自动发生,你必须编码。

【讨论】:

很好的解决方案,但是当我有一个启动页面询问用户您喜欢使用哪种语言时,这个工作,所以,主要问题是我如何重新加载出现在当前视图控制器屏幕和已经加载到内存中的控制器。注意:我使用的是 TabBar 项目模板,当用户单击它们时加载所有点击,如果出现内存警告则卸载它们。再次,很好的答案,谢谢。【参考方案2】:

查看我对Creating a localized iPhone app but allowing the user to change language for the application的回复。

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

【讨论】:

很好的答案,你能提供一些源代码的答案吗,一个示例项目会很棒。提前谢谢你。

以上是关于在运行时本地化 iPad 应用程序的主要内容,如果未能解决你的问题,请参考以下文章

在 ipad 与 iphone 上传递本地通知问题

在 iPad 上运行时 iPhone 应用程序外部显示窗口放大/缩小

在 iPad 上查看时,应用程序没有以 iPhone 分辨率运行

应用程序在 ipad 中运行 10 分钟时错误 = 24

在 iPad 上运行时无法启动我的 iPhone 应用程序的启动图像

在ipad上测试时,Xcode退出我的应用程序说“完成运行应用程序”