覆盖首选字符串在测试中即时定位
-
29-09-2019 - |
题
使用iPhone模拟器中的“设置应用程序”切换语言是测试本地化调整的PITA方式。我试图找出一种在我的应用程序中使用调试设置而无需重新启动应用程序的调试设置即可使用本地化(EN/FR/ES/等)的方法。
NSBundle提供了从任意本地化请求本地资源的方法,例如
- (NSString *)pathForResource:(NSString *)name ofType:(NSString *)extension inDirectory:(NSString *)subpath forLocalization:(NSString *)localizationName
但是我发现字符串管理子系统没有等效。听起来很像 这些 问题 您可以覆盖注册的默认值,这听起来很愚蠢,需要重新启动应用程序。
这里还有其他策略吗?如果我将nslocalizedstring包裹在Debug Build中的某些工作中完成了自己的工作,那么加载给定的最短途径是什么 .strings
文件?是否有一种程序化方法可以访问这些弦表,而无需我自己解析它们?
谢谢。
解决方案
我想出的唯一做到这一点的方法是使用由 这个答案. 。你可以包裹 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, @"");
}
等等
其他提示
从应用程序中选择特定语言的诀窍是强迫NSLocalizedString使用特定的束,具体取决于所选的语言,
这是我为此写的帖子 http://learning-ios.blogspot.com/2011/04/advance-localization-in-ios-apps.html
这是一个示例应用程序的代码 https://github.com/object2dot0/advance-localization-in-ios-apps
设置 AppleLanguages
默认为由首选语言组成的数组,最优先。例如,如果您只关心英语,请将其设置为 '("en");'