我工作在一个相对简单的Android应用程序。 我希望它有一个英文版本以及一个希伯来语版本。 (RTL从右到左对齐)
我对齐已手动更改到右布局xml文件。 当一个句子中包含的数字(在它的中间),则数字显示在一个镜视图:29个显示为92,21:45 显示为54:12和2000显示为000,2。
此外,当一个句子用数字或英文字母开始,它们就抛出来了句结束搞乱了这一切。
我认为Android版本4.0.3,它支持希伯来语。 我有检查,在模拟器。
所以对于旧版本有没有实现希伯来语正确的方法? 请帮忙。
我认为,Android的比迪烟的分析算法有一定的缺陷。 Unicode的有两个看不见的,强烈方向性的字符可能与这些问题有所帮助:
- U + 200E - 左至右符号
- U + 200F - 右至左符号
对于数字顺序的问题,可以尝试在左到右标记(U + 200E)的数字序列的两侧。
统一还具有以下的比迪格式代码:
- U + 202A - 左到右嵌入
- U + 202B - 从右到左嵌入
- U + 202C - 弹出定向格式化(取消以前的包埋或覆写)
- U + 202D - 左到右覆盖
- U + 202E - 从右到左的优先
对于在希伯来文英语碎片问题,这可能是因为把一个右至左符号的英文以前一样简单。 (Android的算法可能的印象是,该段落为左到右,因为第一个字符是英文)。如果不工作,也许尝试与周围的格式化代码的某种组合选定的文本。 (我想尝试从左向右嵌入随后弹出方向性格式。我也想尝试从右到左周围的一切选择性明确的权利到左的嵌入结合嵌入。)
这些都应该影响文本布局的方式是通过Unicode双向算法定义Unicode标准附件#9 。 但是,如果Android的执行坏了(我怀疑它),你能做的最好的尝试和错误,直到你把事情看的权利。 祝好运。
编辑
至于代码而言,这里有它如何在Java中工作的一个示例:
String text = "גרסה \u200e2.100\u200e זמינה";
在XML中,它可能是:
<string name="update_available">גרסה ‎2.100‎ זמינה</string>
这里是从我的希伯来文字符串XML的例子,由于泰德·霍普的回答:
你需要使你的问题炭前加“\ u200e”:
<string name="basic_text1">המר על תוצאת המשחק\u200e:</string>
其结果将是:
:המר על תוצאת המשחק