我正在开发一款相对简单的Android应用。我希望它有英文版和希伯来文版本。 (RTL从右到左对齐)
我已在布局xml文件中手动将对齐更改为右侧。当一个句子包含数字(在它的中间)时,数字出现在镜像视图中: 29显示为92 , 21:45显示为54:12 , 2,000显示为000,2 。
此外,当一个句子以数字或英文字符开头时,它们会被抛到句子的末尾,弄乱它。
我认为对于Android 4.0.3版本它支持希伯来语。我在模拟器中检查过。
那么对于旧版本是否有正确的方法来实现希伯来语? 请帮忙。
答案 0 :(得分:21)
我认为Android的bidi分析算法存在一些缺陷。 Unicode有两个不可见的强方向字符,可能有助于解决这些问题:
对于数字顺序问题,请尝试在数字序列的两侧放置从左到右的标记(U + 200E)。
Unicode还具有以下bidi格式代码:
对于希伯来文中英文片段的问题,可能就像在英语之前放置一个从右到左的标记一样简单。 (Android的算法可能会认为段落是从左到右的印象,因为第一个字符是英语。)如果这不起作用,也许可以尝试使用格式代码的某些组合来包围所选文本。 (我会尝试从左到右嵌入,然后是流行方向格式化。我还会尝试从右到左嵌入所有内容,并选择明确的从右到左嵌入。)
这些应该影响文本布局的方式由Unicode双向算法Unicode Standard Annex #9定义。但是,如果Android的实现被破坏(我怀疑它是),那么你可以做的最好的是反复试验,直到你看起来正确。祝你好运。
修改
就代码而言,这是一个如何在Java中完成它的例子:
String text = "גרסה \u200e2.100\u200e זמינה";
在XML中,它可能是:
<string name="update_available">גרסה ‎2.100‎ זמינה</string>
答案 1 :(得分:2)
这是我的希伯来字符串xml的示例,感谢Ted Hopp的回答:
您需要在导致问题的字符之前添加'\ u200e':
<string name="basic_text1">המר על תוצאת המשחק\u200e:</string>
,结果将是:
:המר על תוצאת המשחק