今天在解决用户反馈的问题的时候,遇到一个很奇怪的问题,就是国外用户在使用我们APP的时候,选择的语言并不在我们的国际化范围内(我们只国际化了中文和英语),按照预期,我们APP应该显示英文,但是,它居然堂而皇之的全部显示成了中文!!!
本着开发的第一反应,我觉得肯定是售后反馈的有问题,我用手机试验了一下,把语言设置成日文,完美显示出了英文,因此让我更加觉得反馈有问题;
由于这个项目是之前离职的同事做的,因此,为了让我确定, 我重新看了一遍他的代码。
我发现了前同事给我留下的几个坑:
-
在info.plist文件内,设置应用的原始语系地区时,Localization native development region原来被设置为了China,这会使该应用默认显示中文,正是这个原因导致出现了以上现象,为了能默认显示英文,此处需要设置成en,如下图所示;
- 只将字符串进行了国际化,应用内的storyboard都没有;
- 没有在info.plist文件内添加Localized resources can be mixed并将其值设置为YES,否则的话,应用内调用系统相册的话,会显示英文,不会随国际化语言变化;
由于客户没有详细的反馈细节,因此将以上未完成的内容挨个搞完;
在所有一切都按照预期的进行完之后,我将手机默认语言设置成日文,地区设置成日本后,大跌眼镜的事情出现了,APP居然显示出中文!!!这,太奇怪了,我的信心一下灰飞烟灭了。。。难道哪里又出问题了???
正没有头绪的时候,设置应用的语言与地区的首选语言顺序突然惊醒了我,出现刚才的情况应该跟这个顺序有关,虽然已经将语言和地区设置成了日语和日本,但是, 语言的优先顺序内还是有简体中文,因此在无法匹配默认语言的情况下,手机选择了默认的第二个语言。将此处的简体中文和英语全部删除,同样使用刚才的测试方法,应用语言不出预料的显示出了英文;
因此可以得出iphone的语言设置优先级:
- 首先,得看应用内国际化的语言,如果用户手机的当前使用语言与APP的国际化语言有任一匹配的,那肯定显示手机对应的语言;
- 如果当前使用语言都无法匹配,则看当前用户手机设置应用的语言与地区的首选语言顺序的其他几个,按顺序匹配如果有对应的,则显示匹配的那个语言;因为iphone认为,既然在你的语言列表内有该语言,说明你能看懂该语言;
因此这个跟APP本身的默认语言设置没有关系,这跟苹果自己的系统语音设置有关,进系统设置-》通用-》语言与地区,看到首选语言项,如果英文在前就显示英文,中文在前就显示中文,有匹配的就显示匹配的。 - 当前用户的语言列表内的所有语言都无法与国际化语言匹配,则要看当前应用设置的Localization native development region是哪里,一般如果设置为China则默认就是中文,en就是英文;
参考文章
Core Foundation Keys