使用自动调整大小的 UI,适用于阿拉伯语和英语 iPhone?

7

你好,我希望将整个 UI 视图转换成阿拉伯语【从右到左】,如果用户更改了设置中的语言并打开应用程序。

我有以下问题:

1)我需要为每个语言创建单独的 UI 吗? 2)有没有简便的方法来实现这一点? 3)我需要完全转换 UI,就像镜子一样,从左边 [滑动菜单] 到右边等等... 4)Xcode 8.2 再次引入了自动调整大小和自动布局,我可以在不使用自动布局的情况下完成此操作吗?


3
如果你正在使用自动布局,并且正确使用"leading" / "trailing"边缘/边距而不是"left" / "right",你根本不需要做任何事情(除了检查所有文本是否适当地放置在所需位置)。 - jcaron
我只是在使用自动调整大小... Xcode 8.2 再次启用它。 - 9to5ios
1个回答

1
  1. 不管使用哪种语言,你只需要创建一个UI。

  2. 有一个简单的方法,你可以使用本地化。 苹果国际化文档

  3. iOS会完成UI转换(这只适用于uikit控制器,请参见下面的编辑)。

  4. 自动布局与本地化无关。通常最好使用自动布局,否则必须为不同的屏幕大小计算。 再次强调,与本地化无关。请参见下面的编辑。

编辑:如果您想要镜像您自己的视图,例如uiimage和uilabel。那么您必须自己使用自动布局或框架来完成。如果您正在使用uinavigation或tabbarcontroller,则这些控制器将由iOS进行镜像处理。因此,您必须自己处理内容视图。 您可以生成不同的约束,并在运行时相应地安装它。但如果您的视图非常复杂,则应设计两个不同的storyboard,一个用于从左到右,另一个用于从右到左,并在应用程序启动时加载适当的storyboard。

重新编辑: 这是我的应用程序的英文版。但是,我的应用程序不支持从右到左的语言。

english

现在,如果我添加从右到左的语言,例如阿拉伯语: 阿拉伯语

正如您所看到的,iOS 会自动转换表格单元格。我只是在英语、德语等之外增加了阿拉伯语的国际化支持。因此,如果您在适当的位置使用 UIKit 控件,则它将自动转换。但是,如果您的应用程序非常定制化,并具有复杂的视图层次结构,则 iOS 无法帮助您,那么您必须自己完成。如果您坚持使用标准和简单的层次结构,则不必太担心。只需测试并查看结果即可。

因此,例如在我的应用程序中,我所要做的就是将字符串翻译成从右到左的语言。

编辑: 这里是关于第四个问题的正确信息 苹果文档

使用自动布局来相对于彼此布置视图,而无需固定的起点、宽度和高度,因此当语言或区域设置更改时,视图会适当地重新定位和调整大小。自动布局使得可以为所有语言拥有一个 .storyboard 和 .xib 文件集合。

嘿,感谢您的回答,但是我想知道,如果我的所有工作都是使用自动调整大小完成的,如果我现在在其中应用国际化,它会自动转换UI吗?即使某些部分是以编程方式添加的? 假设在fdeviceheight-100和fdevicewidth-50位置添加了一个标签?它会自动转换为100和50吗? - 9to5ios
我已经添加了额外的解释。 - Hashmat Khalil
1
"AutoLayout与本地化无关" - 这是错误的。正如在问题的评论中指出的那样,如果设备语言是从右到左的,使用leading/trailing而不是left/right将导致UI镜像。这是原生应用程序的行为,每个人都应该这样做。 - hybridcattt
@hybridcattt 感谢您指出。是的,我错了,并在我的答案中加入了链接和文档引用。 - Hashmat Khalil
1
@HashmatKhalil “但是,如果您的视图非常复杂,则应设计两个不同的故事板,一个用于从左到右,另一个用于从右到左,并在应用程序启动期间加载适当的故事板。” - 实际上,您永远不应该这样做。如果所有视图都是自动布局,则根本不需要if-else语句 :) - hybridcattt
1
是的,那个答案与我的回答相矛盾,请查看第1条。重新设计其他语言的GUI应该有充分的理由,比如日语。如果您想要从上到下的方向,那么整个布局都会改变。在这种情况下,最好使用不同布局创建新的界面。 - Hashmat Khalil

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接