【问题标题】:RTL issue in string containing English, Hebrew and digits in Android (Java)Android (Java) 中包含英语、希伯来语和数字的字符串中的 RTL 问题
【发布时间】:2019-05-10 02:12:48
【问题描述】:

在混合一个字符串英语、希伯来语和数字时遇到问题。 希伯来语旁边的数字顺序正在反转,无论我按什么顺序 - 第一个数字然后是文本,第一个文本然后是希伯来语 - 它正在反转为:在左边的数字上,在右边的文本上。 我的文本示例是:

String leftPart = "10 gr";
int numder = 8;
String hebrewText = "כפות";
String rightPart = hebrewText + " " + number;
String finalString = leftPart + " · " + rightPart; //10 gr · כפות 8

我想在这个字符串的末尾显示数字 8,在希伯来语单词之后,而不是在它之前,但即使在这里我也无法做到......由于乞求中的英文文本,它正在反转.

即使我将顺序更改为:

String rightPart = number + " " + hebrewText ;

结果是一样的……

有什么想法吗?它看起来像我想念的一些简单的东西

【问题讨论】:

  • 我想在这个字符串的末尾显示数字 8,在希伯来语单词之后,而不是之前——这正是你在屏幕截图中得到的。 '8' 在希伯来语单词之后,因为对于希伯来语来说,after 表示向左。

标签: android string right-to-left hebrew


【解决方案1】:

强制英语与希伯来语混合时显示良好的提示:

用 LRI 和 PDI 将英文(或数字)单词括起来(查看此处:https://unicode.org/reports/tr9/)。

例如,而不是这些(第一个单词是英文):

    <string name="test">ABC היא האפליקציה הכי טובה</string>
    <string name="test2">%1$s היא האפליקציה הכי טובה</string>

使用这些:

    <string name="test">\u2066ABC\u2069 היא האפליקציה הכי טובה</string>
    <string name="test2">\u2066%1$s\u2069 היא האפליקציה הכי טובה</string>

其他有用的可以在这里找到:

https://stackoverflow.com/a/10989502/878126

【讨论】:

    【解决方案2】:

    这里没有搞砸,这实际上是正确的行为。数字出现在希伯来词的结尾之后——希伯来词的结尾在左边。您似乎想要的是数字出现在希伯来语单词之前。但是当你把它和英语结合起来时,它不知道这个数字应该绑定到希伯来语部分而不是英语部分,所以把它放在希伯来语之前也不起作用。

    我建议将数字放在希伯来语部分之前,并将数字和希伯来语文本包装在 unicode 从右到左标记字符中,明确告诉它 8 是从右到左文本的一部分。

    或者,您可以将数字放在希伯来文文本之后,但在希伯来文之前使用 rtl 标记,在之后使用 ltr 标记。如果您想在其他地方进行更复杂的嵌入,这可能是一种更好的整体处理方式。

    【讨论】:

    • 我添加了一个截图。行为与预期不符 - 数字出现在希伯来语单词的左侧,而不是单词之后的右侧。
    • 行为符合预期,只是你不明白它是如何工作的。数字显示在 LTR 或 RTL 上下文中,具体取决于它们之前的内容。如果您将数字放在希伯来语之后,则它位于 RTL 上下文中,因此它出现在希伯来语单词的左侧。如果你把它放在前面,然后在它之前添加英语,它会出现在 LTR 上下文中,并布置在希伯来语单词的左侧。答案就像我上面说的——明确的 LTR 和 RTL 标记
    • 正如我在问题中提到的,即使我将顺序更改为 String rightPart = number + " " + hebrewText;数字仍然不在字符串的末尾,我需要在整个字符串的末尾有数字。我该怎么做?
    • @Natalie 我已经告诉你为什么会发生这种情况,并告诉你答案两次。显式 LTR 和 RTL 标记。
    猜你喜欢
    • 1970-01-01
    • 2012-08-02
    • 1970-01-01
    • 2011-08-16
    • 1970-01-01
    • 2017-12-29
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多