iOS做其它的多语言适配,可能只是设计到多语言的翻译,还不会有太大的影响,但是如果要适配阿拉伯语,不仅是语言的翻译,还有他们的使用习惯问题需要适配。他们的语言阅读习惯是RTL(right-to-left,从右往左),而其它地区的是LTR(left-to-right,从左往右)。因此除了语言外,UI也需要做对应的适配,才会符合阿拉伯人的使用习惯。
1,添加多语言翻译
按上面的红框的流程就可以加上对应的多语言了
2,icon的flip。
有些图片时没有方向性的,有些图片时有方向性的,有方向性的icon我们就需要做适配,如back图标。一般情况下,我们的图片时这样的
如果需要做rtl的适配,需要
方向中选中both,然后在左边的图片视图里面就会多一个RTL的视图,再切一个对应的icon就可以了
3,UIPageController等view的适配
一般都有个引导页,引导页有个页面指示器,切换成ar后,页面指示器的方向还是RTL。因此需要修改下它的属性,在storyboard设置的属性如下
semantic属性默认值是unspecified。
具体这个属性的意义可参考
https://stackoverflow.com/questions/32634774/xcode-7-what-is-the-view-semantic-storyboard-setting
这个属性也可以通过代码中去设置
4,代码中如何判断方向
有时候有些逻辑可能需要在代码中去判断和处理,尤其是对于一些自定义的view,可能需要获取到当前的direction。
let dir = UIApplication.shared.userInterfaceLayoutDirection
这个属性就是个枚举值
@available(iOS 5.0, *)
public enum UIUserInterfaceLayoutDirection : Int {
case leftToRight
case rightToLeft
}
5,leading和left
在storyboard中,在给view添加constraint时,一般都是Leading space和Trailing space。但有时候手写的时候,就写成了left和right相关的属性了。如:
firstview.leadingAnchor.constraint(equalTo: scrollview.leadingAnchor, constant: 0).isActive = true
firstview.leftAnchor.constraint(equalTo: scrollview.leftAnchor, constant: 0).isActive = true
这两对属性在大部分情况下是一致的,但是在RTL模型中就不合适。因为left和right相当于而是固定了属性,所以如果你需要支持rtl,就必须要使用leading和trailing。
6,调试的时候设置调试的语言
如图
选中语言后,close弹窗,运行调试时就是按这个设置的语言来调试的