Android(Java)中包含英语,希伯来语和数字的字符串中的RTL问题

时间:2018-12-08 16:02:57

标签: android string right-to-left hebrew

将英语,希伯来语和数字混入一个字符串时出现问题。 希伯来语旁边的数字顺序被颠倒了,无论我按什么顺序-首先是数字,然后是文本,首先是文本,然后是希伯来语-它被颠倒为:左边的数字,右边的文本。 我的文字示例是:

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 ;

结果是一样的...

有什么想法吗?看来我缺少了一些简单的东西

enter image description here

2 个答案:

答案 0 :(得分:1)

这里没有任何问题,这实际上是正确的行为。数字在希伯来语单词的结尾之后-希伯来语单词的结尾在左边。您似乎想要的是该数字出现在希伯来语单词之前。但是,当您将其与英语结合使用时,它不知道该数字应该绑定到希伯来语部分,而不是英语部分,因此将其置于希伯来语部分也不起作用。

我建议将数字放在希伯来语部分的前面,然后将数字和希伯来语文本以unicode的方式从右到左标记字符包装起来,以明确地告诉它8是右到左文本的一部分。

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

答案 1 :(得分:0)

与希伯来语混合使用时,迫使英语很好地显示的提示:

用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