7

我正在开发一个相对简单的 Android 应用程序。我希望它有英文版和希伯来文版。(RTL 从右到左对齐)

我已在布局 xml 文件中手动将对齐方式更改为右对齐。当一个句子包含数字时(在它的中间),数字出现在镜像视图中: 29 显示为 9221:45 显示为 54:12 ,2,000 显示为 000,2

此外,当一个句子以数字或英文字符开头时,它们会被扔到句子的末尾,把它弄得一团糟。

我认为对于 android 版本 4.0.3 它支持希伯来语。我已经在模拟器中检查过了。

那么对于旧版本是否有正确的方法来实现希伯来语?请帮忙。

4

2 回答 2

23

我认为Android的bidi分析算法存在一些缺陷。Unicode 有两个不可见的强方向性字符,可能有助于解决这些问题:

  • U+200E - 从左到右的标记
  • U+200F - 从右到左的标记

对于数字顺序问题,请尝试在数字序列的两侧放置从左到右的标记(U+200E)。

Unicode 还具有以下双向格式代码:

  • U+202A - 从左到右嵌入
  • U+202B - 从右到左嵌入
  • U+202C - 弹出方向格式(取消之前的嵌入或覆盖)
  • U+202D - 从左到右覆盖
  • U+202E - 从右到左覆盖

对于希伯来语文本中英文片段的问题,可能就像在英文之前放置一个从右到左的标记一样简单。(Android 的算法可能会认为段落是从左到右的,因为第一个字符是英文。)如果这不起作用,也许可以尝试使用一些格式代码组合来包围选定的文本。(我会尝试从左到右嵌入,然后是弹出定向格式。我还会尝试在所有内容周围从右到左嵌入,并结合选择性显式从右到左嵌入。)

这些应该影响文本布局的方式由 Unicode Bidirectional Algorithm Unicode Standard Annex #9定义。但是,如果 Android 的实现被破坏了(我怀疑是这样),你能做的最好的就是反复试验,直到你得到正确的结果。祝你好运。

编辑

就代码而言,这是一个如何在 Java 中完成的示例:

String text = "גרסה \u200e2.100\u200e זמינה";

在 XML 中,它可能是:

<string name="update_available">גרסה &#x200e;2.100&#x200e; זמינה</string>
于 2012-06-12T01:25:35.043 回答
2

这是我的希伯来语字符串 xml 中的一个示例,感谢 Ted Hopp 的回答:

您需要在导致问题的字符之前添加 '\u200e':

<string name="basic_text1">המר על תוצאת המשחק\u200e:</string>

结果将是:

 :המר על תוצאת המשחק
于 2015-03-19T08:15:13.677 回答