如何根据自然方向自动显示用户文本

时间:2013-05-28 11:18:55

标签: css html5 unicode bidi

我想支持在Unicode中根据其一般方向而不是默认的从左到右方向显示用户输入的文本。例如,在下面的阿拉伯文中,英文单词(4th)似乎被拆分:

اردوکابعضاوقاتہندیکےساتھموازنہکیاجاتاہے。 اردواورہندیمیںبنیادیفرقیہہہےہررررراااااااااااااہےہےہےہے جبکہہندیدیوناگریرسمالخطمیںلکھیجاتیہےاورسنسکرتالفاظزیادہاستعمالکرتیہے。更多信息,请点击链接,享受免费无线网络连接,免费无线网络连接,免费无线网络连接。 تاہم,دوسرےانکومعاشاللسانیتفرقاتکیبنیادپرالگسمجھتےےیں。 بلکہحقیقتیہہکہہندی,اردوسےنکلی.اسیطرحاگراردواورھندیزبانکوایکسمجھاجاۓتویہدنیاکیچوتھی(4th)بڑیزبانہے。

是否有自动考虑文本流的自然方向的CSS或HTML方法?我阅读了this article from W3C,其中讨论了设置文本方向的方法,但未找到任何自动执行此操作的解决方案。

3 个答案:

答案 0 :(得分:3)

有一种方法可以自动检测文本流的自然方向,这会给您带来麻烦:双向算法并不完美。有时您需要给它一些额外的提示,如Unicode controls vs. markup for bidi support中所述。

  

Unicode双向算法根据每个字符的方向属性确定文本的方向性。有时,算法需要一些帮助来确定文本中的对象流,这些对象将阿拉伯语或希伯来语字符与其他脚本的字符混合在一起。在其他情况下,您可能希望完全覆盖双向算法的效果。

您可以通过在文本中添加U+202A ʟᴇғᴛ-ᴛᴏ-ʀɪɢʜᴛ ᴇᴍʙᴇᴅᴅɪɴɢU+202C ᴘᴏᴘ ᴅɪʀᴇᴄᴛɪᴏɴᴀʟ ғᴏʀᴍᴀᴛᴛɪɴɢ字符来手动解决此问题,如下所示:

اردوکابعضاوقاتہندیکےساتھموازنہکیاجاتاہے。 اردواورہندیمیںبنیادیفرقیہہہےہررررراااااااااااااہےہےہےہے جبکہہندیدیوناگریرسمالخطمیںلکھیجاتیہےاورسنسکرتالفاظزیادہاستعمالکرتیہے。更多信息,请点击链接,享受免费无线网络连接,免费无线网络连接,免费无线网络连接。 تاہم,دوسرےانکومعاشاللسانیتفرقاتکیبنیادپرالگسمجھتےےیں。 بلکہحقیقتیہہکہہندی,اردوسےنکلی.اسیطرحاگراردواورھندیزبانکوایکسمجھاجاۓتویہدنیاکیچوتھی(4th)بڑیزبانہے。

...‪(4th)‬...

您还可以使用HTML5中的<bdi>元素或HTML4中的<span>

...<bdi dir="ltr">(4th)</bdi>...

...<span dir="ltr">(4th)</span>...

有关双向算法的详细信息,请参阅What you need to know about the bidi algorithm and inline markup

如果此文本来自用户,我想您无能为力。我会把它视为任何其他类型的错误用户输入;像一个错字。

答案 1 :(得分:1)

首先是一个棘手的问题,但是有很好的记录和对此的支持。

我尝试过同样的问题并遇到了同样的问题。我在一篇文章中读到你可以使用dojo来做到这一点。我想给你的链接是移动的。希望这会给你一个启动。

  

https://dojotoolkit.org/reference-guide/1.9/dojox/mobile/bidi.html

答案 2 :(得分:1)

浏览器是否决定根据访问者的偏好自动使用lrt的lrt?我不太确定,但我认为确实如此。

不是真正的答案,但这可能对您有意义: 在CSS3中,text-align属性有一个新值,即start。根据W3C标准,这将“与线盒的起始边缘对齐”。因此,如果访问者偏好是rtl,它将正确对齐,反之亦然。