【发布时间】:2014-04-11 11:30:52
【问题描述】:
我已经使用 iOS 中的本地化功能本地化了我的应用程序,我在我的项目中添加了 Localizable.strings 文件(英语和西班牙语)。
到目前为止,该应用程序运行良好,发现以下问题
一段时间后,当将设备/模拟器切换为西班牙语时,应用仍然是英语,反之亦然。我一直在记录以下内容
NSLog(@"Preferred Language : %@", [[NSLocale preferredLanguages] objectAtIndex:0]);
NSLog(@"Locale Identifier : %@", [[NSLocale currentLocale] localeIdentifier]);
NSLog(@"NSUserDefaults AppleLanguages : %@", [[NSUserDefaults standardUserDefaults] objectForKey:@"AppleLanguages"]);
在应用程序到达此问题之前有以下输出
Preferred Language : en
Locale Identifier : en_US
NSUserDefaults AppleLanguages : (
en,
es,
de,
fr,
ja,
nl,
it,
pt,
"pt-PT",
da,
fi,
nb,
sv,
ko,
"zh-Hans",
"zh-Hant",
ru,
pl,
tr,
uk,
ar,
hr,
cs,
el,
he,
ro,
sk,
th,
id,
ms,
"en-GB",
ca,
hu,
vi
)
然后过了一会儿(即使我已经成功切换了语言)当再次切换应用程序以西班牙语时,NSUserDefaults 中的 AppleLanguages 数组只有一种语言,在这种情况下为英语(en)。
Preferred Language : en
Locale Identifier : en_US
NSUserDefaults AppleLanguages : (
en
)
这会导致应用程序按照唯一的首选语言显示,这是AppleLanguages 数组中的第一个元素。
到目前为止,我没有在代码中的任何位置更改或修改 NSUserDefaults 中的 AppleLanguages 数组。我唯一强迫的是使用以下代码为Localizable.string 文件加载英文bundle
NSBundle *englishBundle = [NSBundle bundleWithPath:[[NSBundle mainBundle] pathForResource:@"en" ofType:@"lproj"]];
NSString *localizedString = NSLocalizedStringFromTableInBundle(@"Key to localize", nil, englishBundle, @"");
我评论了这段代码,认为这可能会弄乱NSUserDefaults AppleLanguages 数组,但问题仍然存在。我想知道究竟是什么导致了这个问题,或者我是否在项目配置中遗漏了一些东西。
编辑(1)
到目前为止,我发现存储应用程序 NSUserDefaults 属性的 Info.plist 文件出于某种原因仅使用一种语言项保存 AppleLanguages,而不管在整个代码中我没有覆盖AppleLanguages 数组。
我暂时在applicationDidEnterBackground中添加了以下代码
[[NSUserDefaults standardDefaults] setObject:nil forKey:@"AppleLanguages"];
[[NSUserDefaults standardDefaults] synchronize];
通过执行上述解决方法,我已强制应用程序始终从 Info.plist 文件中删除 AppleLanguages,到目前为止,我发现此问题仅发生在 iOS 7.0 到 iOS 7.02 中,我仍在测试不同的 iOS 版本,我不想假设这是一个 iOS 错误,但可能是我的项目中的错误配置,到目前为止我还无法识别或重现。
【问题讨论】:
-
这可能对你有帮助:stackoverflow.com/a/12193507/400544
标签: ios objective-c localization nsuserdefaults