iOS本地化混乱导致用户界面出现问题

4
我有一个支持多种语言的iOS应用程序,其中使用LTR Storyboard和RTL Storyboard,并从Plists中读取数据。当我在英语iOS版本的设备上运行应用程序并在不同语言之间切换时,一切都看起来完美。但是,当我将iPhone操作系统语言更改为RTL语言时,界面就会出现问题。
这种情况尤其发生在启用本地化以更改主屏幕上应用程序名称时。任何想法为什么会发生这种情况吗?
例如,整个菜单会混乱,它在左侧而应该在右侧,菜单项图标必须位于左侧,标签必须位于右侧。
在LTR iOS语言设备上的RTL语言(即英语): 在RTL iOS语言设备上的RTL语言: enter image description here

1
你能添加一张截图吗? - Marco Santarossa
@SaintThread 我已经编辑了我的帖子。 - Ali
你是否已经添加了指向ParenView的Label和指向ImageView的Trailing? - Marco Santarossa
@SaintThread 当然可以。 - Ali
3个回答

2
这是因为您使用了前导和尾随约束。 在从左到右的环境中,前导意味着左侧,在从右到左的环境中,前导意味着右侧。 这是苹果帮助我们轻松处理RTL / LTR的方式:[在您的情况下,不太好... 要禁用此行为,请更改视图的语义属性。
语义内容 如果您使用前导和尾随约束布置视图,则在从左到右的语言(如英语)和从右到左的语言(如阿拉伯语)之间切换时,视图会自动翻转位置。但是,某些界面元素不应根据阅读方向更改其位置。例如,基于物理方向(上,下,左和右)的按钮应始终保持相同的相对方向。 视图的semanticContentAttribute属性确定视图的内容在从左到右和从右到左的语言之间切换时是否应翻转。 在接口构建器中,设置属性检查器中的语义选项。如果值未指定,则视图的内容随阅读方向翻转。如果将其设置为Spatial,Playback或Force Left-to-Right,则始终使用前导边缘向左和尾随边缘向右排列内容。Force Right-to-Left始终使用前导边缘向右和尾随边缘向左排列内容。

如何添加对齐而不是前导/尾随? - Ali
你需要使用 rightAnchor / leftAnchor 而不是 trailingAnchor / leadingAnchor。我已经编辑了我的回复,引用了苹果文档的一章节。 - Florian Burel
为什么他们认为我们生活中的一切都被颠倒了?冷静点,苹果、谷歌,只是我们的文本 RTF 被改了,而不是整个世界。 - fullmoon

0

假设您已经在使用自动布局,请确保已完成以下步骤:

删除固定宽度约束。允许显示本地化文本的视图进行调整大小。如果使用固定宽度约束,则本地化文本可能会在某些语言中出现裁剪。

使用内在内容大小。文本字段和标签的默认行为是自动调整大小。如果视图未调整到本地化文本的大小,请选择该视图并选择“编辑器”>“大小适应内容”。

使用前导和尾随属性。添加约束时,对于水平约束,请使用前导和尾随属性。对于从左到右的语言(如英语),前导和尾随属性等同于左和右。对于从右到左的语言(如希伯来语或阿拉伯语),前导和尾随属性等同于右和左。前导和尾随属性是水平约束的默认值。

将视图固定到相邻视图。固定会引起多米诺骨牌效应。当一个视图调整大小以适应本地化文本时,其他视图也会这样做。否则,在某些语言中,视图可能会重叠。

不断测试您的布局变更。使用测试国际化应用中描述的不同语言设置测试您的应用程序。

不要设置窗口的最小大小或最大大小。让窗口及其内容视图调整为包含视图的大小,这可能会在语言更改时发生变化。请参阅更多信息


您可以通过以下步骤将您的应用程序国际化:
  1. 创建本地化的资源文件。这些资源包括字符串、图像和 NIB 文件。
  2. 使用 NSLocalizedString 函数读取本地化字符串。
  3. 使用 Auto Layout 和自动缩放来调整 UI 元素的大小和位置。
  4. 本地化日期、时间和数字等格式。
  5. 支持不同的语言书写习惯,比如从右到左的文本。
  6. 在代码中使用 Unicode。
  7. 测试您的应用程序,确保在不同的语言环境下都能正常工作。
- Martin R
我已经按照这些步骤进行了操作,并且限制条件已经设置好了。 - Ali
问题我认为在于前导和尾随属性,如何解决?@MartinR - Ali

0
可能是约束的问题。在故事板中,您可以使用预览编辑器在不同设备大小和语言中预览您的UI。

enter image description here


不,约束条件设置得很好。 - Ali

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