支持特定语言的iOS应用程序:语言设置是持久的,但不应该

时间:2015-11-12 17:30:32

标签: ios localization

我们的客户在App-Store上收到了应用程序语言选择错误的报告。

我自己试图找到解决方案,但我无法正确读出用户在设置页面上设置的设置。

信息:

  • 我们无法通过NSBundle解决它,因为它会超出客户的预算......
  • 应用程序支持3种基本语言(德语,法语和英语)(瑞士德语,瑞士法语,英语英语英语美国等都转换为de,fr或en)
  • 应用包含3个语言文件(de.lproj,fr.lproj和en.lproj)
  • App定义了常量数组中支持的语言+后备语言(en)位于第一个位置
  • 语言必须设置,因为否则iOS将决定显示英语为瑞士德语或英语为瑞士法语例如

问题:

    1. 我们在设置中选择英语,然后启动应用程序 - > App是英文的 - >行
    1. 然后我们将设置中的语言更改为德语,然后启动应用程序 - > App是英文的 - >不行。
    1. 重新安装应用程序会让我们再次指向第1点(使用所选语言)

应用程序做了什么?

    1. 阅读[[NSUserDefaults standardUserDefaults] objectForKey:@"AppleLanguages"](首选语言)
    1. 阅读[[NSLocale autoupdatingCurrentLocale] objectForKey:NSLocaleLanguageCode](获取区域格式)
    1. 将de-CH fr-CH en-US en-UK等转换为de / fr / en
    1. 如果SupportedLanguages包含autoupdatingCurrentLocale
      • [[NSUserDefaults standardUserDefaults] setObject:languages forKey:@"AppleLanguages"];在第一个位置使用autoupdatingCurrentLocale
      • ELSE:[[NSUserDefaults standardUserDefaults] setObject:languages forKey:@"AppleLanguages"];在第一个位置使用后备语言(en)
    1. [[NSUserDefaults standardUserDefaults] synchronize];
当用户更改设置中的语言时,

[[NSUserDefaults standardUserDefaults] objectForKey:@"AppleLanguages"]不再发生变化。

如何正确解决此问题?有什么想法吗?

1 个答案:

答案 0 :(得分:0)

通过谷歌搜索为自己找到解决方案。

在我们完成语言杂耍并在NSUserDefaults中设置它之后(如上所示),我们想要“重置”NSUserDefaults standardUserDefaults中的AppleLanguages对象。

使用以下命令实现:

[[NSUserDefaults standardUserDefaults] removeObjectForKey:@“AppleLanguages”]

放置此命令的位置?

在你的代表中didFinishLaunchingWithOptions。

此时删除是安全的,因为所有的包初始化都已完成(在主方法中)。 AppleLanguages对象正在恢复,然后再次反映系统设置。

感谢:iPhone App Localization - English problems?