暂时覆盖首选字符串本地化以进行测试

时间:2010-06-25 12:40:31

标签: cocoa localization nsbundle nslocalizedstring

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

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

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

但是我找不到字符串管理子系统的等价物。从these questions发出的声音是,您可以覆盖已注册的默认值,这听起来很傻,需要重新启动应用。

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

感谢。

3 个答案:

答案 0 :(得分:3)

我已经想到的唯一方法就是使用this answer建议的微妙技巧。您可以将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, @"");
}    

答案 1 :(得分:0)

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

这是我为此http://learning-ios.blogspot.com/2011/04/advance-localization-in-ios-apps.html

撰写的帖子

以下是一个示例应用https://github.com/object2dot0/Advance-Localization-in-ios-apps

的代码

答案 2 :(得分:-1)

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