近期伊书突然接到一些外国用户的投诉,说伊书界面变成了中文,但他们系统语言不是中文,是法文俄文日文等,伊书只支持中文跟英文,在不支持系统所用语言的时候,理应会自动选用英文,不知为什么会选成了中文,经过艰难困苦的重重排查,终于找到原因,知道了iOS多语言备选的规则。

主要有两个影响因素,一是CFBundleDevelopmentRegion(Info.plist的一个字段),二是iOS8新增的系统首选语言列表:

iOS8 语言与地区

在iOS7及之前版本,系统只能设置一种语言,如果APP不支持系统设置的语言,选用备选语言的规则是:
1.如果APP支持英文,直接选择英文
2.如果APP不支持英文,随机挑选一个,不清楚这里挑选的规则。文档上说会选用CFBundleDevelopmentRegion设置的语言,但我测试后发现并没有,系统直接忽略了这个字段。

举个例子,APP支持中文跟英文,当系统语言是不是中文或英文时,都会选择英文。若APP支持中文跟日文,系统语言不是中文或日文,将会随机挑选一个。

从iOS8开始,系统语言可以设置一个语言列表,会根据这个语言列表的排序选用备选语言,规则就变了:
1.如果APP支持的语言在系统语言列表里有,优先选择列表上排序靠前的语言。
2.如果APP支持的语言没在系统语言列表上,按CFBundleDevelopmentRegion的值选择,无论APP是否支持英文,英文不再是默认的备选语言。
举个例子,APP支持中文跟英文,CFBundleDevelopmentRegion的值是中文,当系统语言列表是[日文]或[日文,中文]时,会选择中文,系统语言列表是[日文,英文]时,会选择英文。

苹果在语言方面似乎有不少bug,调试过程中出现不少坑爹的事,例如改变增删语言文件一定要clean工程否则不生效,iOS8模拟器不认CFBundleDevelopmentRegion的值,真机才认,再加上一开始不知道iOS8系统语言变成列表这事,把我迷惑得费了大量时间。总而言之,若要国际化,让APP支持英文,CFBundleDevelopmentRegion填英文,应该万无一失。
转载自:http://blog.cnbang.net/tech/2481/

最新文章

  1. [转]反向ajax项目
  2. JWS ,JAX-WS ,JAX-RS,REST,Restlet,SOAP 相关概念
  3. CCF 最大的矩形
  4. Objective-C的新特性
  5. Oracle数据库入门——常用的数据字典
  6. web前端跨域方案
  7. HDU 3351
  8. 无线端通用的reset样式
  9. HW3.9
  10. 【HDU3948】 The Number of Palindromes (后缀数组+RMQ)
  11. 利用readwritelock简单模拟实现多线程下cache的系统
  12. 字符串的使用(string,StringBuffer,StringBuilder)
  13. 兼容主流浏览器的js原生函数封装
  14. linux查看是否安装Apache,mysql,python等
  15. opencv 小程序170323
  16. C++11智能指针的深度理解
  17. ubuntu14.04 网络配置
  18. Windows下的pydoc
  19. 机器学习入门07 - 验证 (Validation)
  20. 【转】linux在shell中获取时间 date巧用

热门文章

  1. css制作简单的导航栏
  2. jQuery用户从服务器端注册登录
  3. [Jetty] jetty 内存调优
  4. Qt之图形视图框架
  5. hdu 2818 Building Block
  6. uva----(10794) A Different Task
  7. EasyUI DataGrid View
  8. Java 之 I/O 系列 02 ——序列化(二)
  9. CSS 收集
  10. WCF练习小程序总结