TextView始终存在RTL(从右到左)语言的问题.由于我只知道如何阅读希伯来语(除了英语),我将讨论它的问题:
文本对齐(我不是在谈论引力).作为一种RTL语言,希伯来语从右到左放置单词(与英语相反).
为了展示它是多么令人讨厌,想象一下,而不是展示"Hello world".你通常得到".Hello world".如果你只用一个句子就可以很容易地解决这个问题,但是当有多个标点字符时会更难.
元音位置.希伯来语不需要元音来阅读文本,但有时没有它们就很难阅读(特别是圣经).对于元音,希伯来语有所谓的"NIKUD",它实际上就像字母内部的点.Android中的问题是它们通常位于错误的位置.
为了展示它是多么令人讨厌,想象一下,而不是展示"Hello world".你通常得到".eHlol owrld".即使你试图修复它(把元音总是放在当前元素之后的一个字符),字母中的位置也不正确(想象"Hello"中的"e"就像"H"之上的那样,例子).
仅在版本4.2(在此处阅读,在"原生RTL支持"下),谷歌已经修复了所有希伯来语相关问题(或者至少看起来如此).
希伯来语的问题导致每个以色列航空公司和每个定制ROM制造商都有自己的解决方案来解决不同的问题,这使得在4.2之前的设备上处理RTL文本几乎是不可能的.
如果文本包括希伯来语和英文字母,事情会变得更加令人沮丧.
我已经阅读了很多关于这些问题的网站,我尝试了很多解决方案,没有一个解决了所有设备上的问题:
有人建议将字符'\ u200F'(或'\ u202D')放在文本的结尾/开始/两个位置.
有人建议使用Html.fromHtml()方法并在那里添加一些特殊内容.
有些人甚至建议使用WebView(也许使用WebSettings.setDefaultTextEncodingName()).
这个问题有一个明确的解决方案吗?
我认为最好的事情是因为Android 4.2解决了这个问题,并且Android是开源的,我们应该将其TextView导入到我们可以使用的库中,但谷歌还没有提供这样的库.
对于<html dir="rtl">某些浏览器(Safari,Edge,IE)会自动将滚动条移动到左侧,这是正确的行为:
不幸的是,主流浏览器(Chrome和Firefox)的行为方式不同,滚动条仍位于浏览器的右侧.
是否有可能以编程方式检测(最好使用vanilla JS)哪一侧是滚动条?
UPD(28.09.2018):到目前为止,答案中没有可行的解决方案,人们试图通过使用getBoundingClientRect().left或者检测滚动条位置.offsetLeft,这将无法工作,因为它始终0至少在Edge中独立于滚动条位置.
UPD(15.10.2018):TLDR:没办法.
似乎浏览器不提供用于检测滚动条侧的API.在下面的答案中,有插入假人的技巧div并计算该div中的滚动条的位置.我不能将这些技巧视为答案,因为文档滚动条可以通过多种方式定位(<html dir="rtl">RTL版本的操作系统,浏览器设置等)
如果一个字符串开始(第一个字母)宽度为RTL语言/希伯来语,我试图打算.
有任何想法吗?
当我的网站显示混有数字的希伯来语文本,并且中间有一个带短划线的数字时,中间的短划线数字显示为RTL.例如,对于文本:
??? 4–0,它应该显示4-0而不是0-4,因为它是数字序列,并且'4'在'0'之前.但是,在我检查的浏览器上,它在'4'之前显示'0'.
由于可能会出现系统数据中的任何位置,因此最好使用不需要以下内容的CSS解决方案:
<span style="direction:ltr">4-0</span>
Run Code Online (Sandbox Code Playgroud)
文本的一般方向应保持RTL,但带有破折号的数字应显示为LTR.应该在主要浏览器(IE,Firefox,Chrome)上正确显示.
我正在尝试在我的情节中添加一些文本,即RTL(在本例中为希伯来语).经过一些工作设法让它显示文本,但它显示LTR(意思是,以崇敬的顺序).我已经挖掘了参考资料并在网上进行了广泛的搜索,没有任何结果.
我正在使用的一个例子:
import matplotlib.pyplot as plt
plt.text(0.5, 0.5, u'???? ???? ?', name = 'Arial')
plt.show()
Run Code Online (Sandbox Code Playgroud)
它显示'אהתיכםלוש'.如果你看不到希伯来语,就好像我输入'Hello',输出就是'olleH'.
我不能简单地反转输入,因为它是混合LTR和RTL.
我们将不胜感激.
我正在编写一个脚本,必须移动一些文件,但不幸的是它似乎并没有os.path很好的国际化.当我有希伯来语命名的文件时,有问题.这是目录内容的屏幕截图:

(来源:thegreenplace.net)
现在考虑这个代码遍历此目录中的文件:
files = os.listdir('test_source')
for f in files:
pf = os.path.join('test_source', f)
print pf, os.path.exists(pf)
Run Code Online (Sandbox Code Playgroud)
输出是:
test_source\ex True
test_source\joe True
test_source\mie.txt True
test_source\__()'''.txt True
test_source\????.txt False
Run Code Online (Sandbox Code Playgroud)
注意如何os.path.exists认为希伯来语命名的文件甚至不存在?我怎样才能解决这个问题?
Windows XP Home SP2上的ActivePython 2.5.2
我有这个代码:
DateTime dtAnyDateHebrew = new DateTime(5767, 1, 1, new System.Globalization.HebrewCalendar());
Run Code Online (Sandbox Code Playgroud)
我如何获得今天的数字希伯来日期?
含义:
例如,我想知道本月特定的希伯来月份是否会下降,所以我必须将希伯来月份发送到函数 - 今天的月份和年份,以便我能够检查dtAnyDateHebrew是否相等到今天,比...更大.等等
最后我需要得到 - 今天的希伯来日,今天的希伯来月,今天的希伯来年,当然是int(当然).
有人能帮我吗?
我正在阅读数据库中的一些希伯来语文本并尝试使用json_encode它.如果print_r我得到的结果:
Array
(
[0] => Array
(
[value] => 88
[text] => ???? ?'
[parent_id] => 1
[level] => 1
)
[1] => Array
(
[value] => 89
[text] => ???? ?'
[parent_id] => 1
[level] => 1
)
[2] => Array
(
[value] => 91
[text] => ???? ?'
[parent_id] => 1
[level] => 1
)
)
Run Code Online (Sandbox Code Playgroud)
而json_encode显示:
[{"value":"88","text":null,"parent_id":"1","level":"1"},{"value":"89","text":null,"parent_id":"1","level":"1"},{"value":"91","text":null,"parent_id":"1","level":"1"}]
Run Code Online (Sandbox Code Playgroud)
我相信它是因为我的数据库中的文本包含一个(')标记.尝试过各种条带组合或者real_escape_string没有帮助.
我在希伯来语上有TextView,我想要在右侧,所以我正在做
<TextView....
android:gravity="right"
</TextView>
Run Code Online (Sandbox Code Playgroud)
在某些手机上它将与右侧对齐,而在某些手机上它将与左侧对齐.我认为这取决于一些手机配置.我怎么能解决它?
谢谢.