支持特定语言的 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 应用程序:语言设置是持久的,但不应该的主要内容,如果未能解决你的问题,请参考以下文章

iOS8开始默认语言有变化

iOS8開始默认语言有变化

具有与系统语言不同的单一支持语言的 iOS 应用程序的一致性

iOS:如何检索特定语言环境的语言环境字符串而不是用户在操作系统中设置的字符串?

在 Swift 中更改 iOS 应用程序的默认基本语言

iOS- 国际化(多语言设置)