支持特定语言的 iOS 应用程序:语言设置是持久的,但不应该
Posted
技术标签:
【中文标题】支持特定语言的 iOS 应用程序:语言设置是持久的,但不应该【英文标题】:iOS App supporting specific languages: language setting is persistent but shouldn't 【发布时间】:2015-11-12 17:30:32 【问题描述】:我们的客户在 App-Store 上收到报告说应用程序的语言选择有问题。
我自己试图找到解决方案,但我无法正确读出用户在设置页面上设置的设置。
信息:
我们无法使用 NSBundle 解决它,因为它会超出客户的预算... App 支持 3 种基本语言(德语、法语和英语)(瑞士德语、瑞士法语、英语英国英语美国等都转换为 de、fr 或 en) 应用包含 3 个语言文件(de.lproj、fr.lproj 和 en.lproj) 应用在常量数组中定义支持的语言 + 后备语言 (en) 位于首位 必须设置语言,否则 ios 会决定显示瑞士德语的英语或瑞士法语的英语问题:
-
我们在设置里选择英文然后启动应用-->应用是英文-->OK
-
然后我们将设置中的语言更改为德语,然后启动应用程序 --> 应用程序是英文的 --> 不行
-
重新安装应用程序让我们再次回到第 1 点(使用所选语言)
应用程序有什么作用?
-
阅读
[[NSUserDefaults standardUserDefaults] objectForKey:@"AppleLanguages"]
(首选语言)
-
阅读
[[NSLocale autoupdatingCurrentLocale] objectForKey:NSLocaleLanguageCode]
(获取区域格式)
-
将 de-CH fr-CH en-US en-UK 等转换为 de/fr/en
-
如果 SupportedLanguages 包含 autoupdatingCurrentLocale
[[NSUserDefaults standardUserDefaults] setObject:languages forKey:@"AppleLanguages"];
第一个位置是 autoupdatingCurrentLocale
ELSE: [[NSUserDefaults standardUserDefaults] setObject:languages forKey:@"AppleLanguages"];
后备语言 (en) 在首位
[[NSUserDefaults standardUserDefaults] synchronize];
当用户在设置中更改语言时,[[NSUserDefaults standardUserDefaults] objectForKey:@"AppleLanguages"]
不再更改。
如何正确解决这个问题?有什么想法吗?
【问题讨论】:
【参考方案1】:通过谷歌搜索为自己找到了解决方案。
在我们完成语言处理并在 NSUserDefaults 中设置它(如上所示)后,我们想在 NSUserDefaults standardUserDefaults 中“重置”AppleLanguages 对象。
这是通过以下命令实现的:
[[NSUserDefaults standardUserDefaults] removeObjectForKey:@"AppleLanguages"]
把这个命令放在哪里?
在您的代表中做了 didFinishLaunchingWithOptions。
此时删除是安全的,因为所有的包初始化已经完成(在 main 方法中)。 AppleLanguages 对象正在恢复,然后再次反映系统设置。
感谢:iPhone App Localization - English problems?
【讨论】:
以上是关于支持特定语言的 iOS 应用程序:语言设置是持久的,但不应该的主要内容,如果未能解决你的问题,请参考以下文章
具有与系统语言不同的单一支持语言的 iOS 应用程序的一致性