4

使用 iPhone 模拟器中的设置应用程序来切换语言是一种 PITA 测试本地化调整的方法。我正在尝试找出一种在我的应用程序中使用调试设置即时切换本地化(en/fr/es/etc)的方法,而无需重新启动应用程序。

NSBundle 提供了从任意本地化请求本地化资源的方法,例如

- (NSString *)pathForResource:(NSString *)name ofType:(NSString *)extension inDirectory:(NSString *)subpath forLocalization:(NSString *)localizationName

但我没有找到字符串管理子系统的等价物。从这些 问题来看,您可以覆盖注册的默认值,这听起来很傻,需要重新启动应用程序。

这里还有其他策略吗?如果我将 NSLocalizedString 包装在调试版本中自己工作的东西,那么加载给定.strings文件的最短路径是什么?是否有一种编程方式来访问这些字符串表,而无需自己去解析它们?

谢谢。

4

3 回答 3

3

我想出的唯一方法是使用这个答案建议的微妙技巧。您可以包装NSLocalizedString()一个了解本地化“覆盖”的函数,并根据是否设置来选择如何获取其字符串。当您想要覆盖时,您可以从本地化目录创建一个“子包”,然后从该包中提取字符串。这是它的要点:

if (CurrentLocalization != nil) {
    NSBundle * locBundle = [NSBundle bundleWithPath:[[NSBundle mainBundle] pathForResource:CurrentLocalization ofType:@"lproj"]];
    return [locBundle localizedStringForKey:key value:nil table:nil];
} else {
    return NSLocalizedString(key, @"");
}    

等等

于 2010-06-28T16:24:05.063 回答
0

通过从应用程序中选择特定语言来使用特定语言的技巧是强制 NSLocalizedString 根据所选语言使用特定包,

这是我为这个http://learning-ios.blogspot.com/2011/04/advance-localization-in-ios-apps.html写的帖子

这是一个示例应用程序的代码https://github.com/object2dot0/Advance-Localization-in-ios-apps

于 2011-05-01T17:37:21.830 回答
-1

AppleLanguages默认设置为由首选语言组成的数组,首先是最优先的。例如,如果您只关心英语,请将其设置为'("en");'

于 2010-06-25T12:45:41.123 回答