• iOS多语言备选机制


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

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

    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/

  • 相关阅读:
    ios 点击webview获取图片url (js交互)
    ios基础视频
    截取图片
    记录最大坐标
    数据库缓存
    ios崩溃日志
    图片裁剪处理
    结构体
    block注意事项
    学习资料
  • 原文地址:https://www.cnblogs.com/yunxinxi/p/4152854.html
Copyright © 2020-2023  润新知