【问题标题】:Manually loading a different localized nib in iOs在 iO 中手动加载不同的本地化笔尖
【发布时间】:2012-02-01 11:30:58
【问题描述】:

我正在开发一款支持多语言的应用。 正如您所料,我有时会使用如下代码加载一些 nib 文件:

 self.currentController = [[newClass alloc] initWithNibName:@"CustomController" bundle:nil];

然后应用程序将从其语言文件夹中加载相应的本地化 xib 版本。 现在,我想知道是否可以手动加载本地化的 nib 文件。 例如,不是简单地加载 CustomController,而是加载 english / french / german / etc. 版本的自定义控制器。

有什么方法可以实现吗?

提前感谢您的帮助!

附:我知道这可能不是在 iphone/ipad 应用程序中更改语言的正确方法,但这不是我的决定

[稍后编辑] 这看起来有点奇怪,像一个 hack,但它似乎工作(加载德国笔尖):

NSString* path= [[NSBundle mainBundle] pathForResource:@"de" ofType:@"lproj"];  
NSBundle* languageBundle = [NSBundle bundleWithPath:path];
self.currentController = [[newClass alloc] initWithNibName:@"CustomController" bundle:languageBundle];

我在这里找到了提示:http://learning-ios.blogspot.com/2011/04/advance-localization-in-ios-apps.html

但感觉并不完全正确,我想知道是否还有其他解决方案。 对于初学者,我觉得这会给旧版本的 iO 带来麻烦,因为语言文件夹有不同的命名约定

【问题讨论】:

  • 检查这是否可以帮助您:stackoverflow.com/questions/598020/…
  • 确实如此,但在这种情况下不是。我对如何在不使用本地化笔尖的情况下实现这种效果有一些想法。不幸的是,该应用程序现在使用它们,并且我们的想法是尽快执行此操作,而无需对应用程序进行大量重写/重新思考。如果我可以手动加载本地化的xib,那么转换它真的很容易
  • 但是我们说的是在运行中做它?例如,我有英国英语的笔尖,然后我去设置并将语言切换为法语,它就会改变??
  • 这就是应用程序现在的工作方式,有点(您按下按钮,重新启动应用程序并更改语言)。但他们希望它在运行中改变。您在应用程序中,按下按钮,语言就会改变

标签: objective-c ios localization xib


【解决方案1】:

所以,就像我在编辑中所说的那样,这是我找到的解决方案:

NSString* path= [[NSBundle mainBundle] pathForResource:@"de" ofType:@"lproj"]; 

NSBundle* languageBundle = [NSBundle bundleWithPath:path];

self.currentController = [[newClass alloc] initWithNibName:@"CustomController" bundle:languageBundle];

如果您需要将文本加载到本地化标签中

NSString* path= [[NSBundle mainBundle] pathForResource:[[[NSUserDefaults standardUserDefaults] objectForKey:@"AppleLanguages"] objectAtIndex:0] ofType:@"lproj"];

NSBundle* languageBundle = [NSBundle bundleWithPath:path];

someLabel.text = [languageBundle localizedStringForKey:@"textKey" value:@"" table:nil];       

更多信息在这里:http://learning-ios.blogspot.com/2011/04/advance-localization-in-ios-apps.html

对谁来说,这种方法会引发很多问题。 对于初学者来说,可能会影响到每个人:您需要将本地化 xib 使用的每个资源也本地化。 如果我使用此方法加载新的本地化 xib,并且该 xib 包含常规的非本地化图像,则在本地化之前不会显示。 其他问题更为特殊,与您检索本地化数据的方式有关。

最后,我认为我不会使用它,因为对于当前的应用程序来说,它的问题太大了,但它可能会在未来变得很方便。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-01-29
    • 2011-11-13
    • 1970-01-01
    • 2012-03-16
    • 1970-01-01
    相关资源
    最近更新 更多