cocoa – 动态覆盖首选字符串本地化以进行测试

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

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

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

但我发现字符串管理子系统没有相应的东西.从these questions开始,您可以覆盖已注册的默认值,这听起来很傻,需要重启应用程序.

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

谢谢.

最佳答案 执行此操作的唯一方法是使用
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, @"");
}    

等等

点赞