将不同语言(阿拉伯语和英语)一起显示的原则是什么?

时间:2011-12-14 09:23:19

标签: html string unicode arabic

如句:

  

عفوايبدوأنالنظاملايستطيعتحديدأنكمنعملاءSTCأملا,فإذاكنتعميلSTCالرجاءالضغطعلىزر “إعادةالمحاولة”,وإذالمتكنمنعملاءSTCالرجاءالضغطعلىزر“لستعميلSTC

阿拉伯语是RTL,英语是LTR。有时复制和粘贴后文本会变得混乱。当我在英语和阿拉伯语字符之间移动句子内的光标时,它会以一种非常奇怪的方式跳跃。而且我也对它如何存储在内存中感到困惑。任何人都可以帮忙解释一下吗?

2 个答案:

答案 0 :(得分:6)

在内存中,这一切都存储为一系列Unicode代码点(希望之前有很多令人讨厌的东西,但是我们不要去那里) - 这就是文本本身,它是如何在计算机中表示的。文本首先与写作方向无关,它只是一系列字符。

此序列通过一个知道Unicode Bidi算法的渲染引擎,因此可以将文本整形为字形以显示在特定位置。 Unicode中的每个字符都有一个Bidi属性,可以控制它在这种上下文中的行为方式。这指定a是LTR字符,而א是RTL字符;它控制在RTL上下文中正确镜像括号(即使您看到(),文本中的左括号仍为);并且在两个上下文中都可以出现多个字符。这一切都非常简单,那里有很多工作要做。最后,多个字形可以相互叠加(例如变音符号)或形成连字;那些是字素,这基本上就是我们所认为的“字母”。

光标移动很容易,因为光标只能在两个字形之间(在LTR或RTL段开始时会变得更复杂,但现在让它留在那里)和→< / kbd>将前进移动过来,而向后移动。在RTL转发中,当然是 left ;它遵循文字方向。两个字素相对于彼此的顺序与定位光标无关。

我承认,看到混合的RTL和LTR文本可能会令人困惑,但我想阿拉伯语或希伯来语国家的人们已经习惯了。

关于复制粘贴文本时有时会丢失正确的文本布局的问题,我想最常见的问题是对相应脚本的应用程序或布局引擎支持。如果布局引擎不知道如何布局阿拉伯文本,则所有得到的字符都是从左到右的逻辑顺序。没有形成连字,没有应用文本方向。例如,浏览器现在对这种事情有很好的支持,但是如果我把阿拉伯语文本粘贴到Word中就会看起来不对(就像Word 2007一样; PowerPoint做得很好)。遗憾的是没有简单的解决方法,但通常你复制的文本完全相同,只是显示错误。

免责声明:我在Unicode邮件列表上潜伏了很长时间,但我绝不是这方面的专家。我说两种语言,两者都是平凡的布局。这是对我认为它可能起作用的回忆,也可能不是实际的事实。

答案 1 :(得分:3)

这些字母以逻辑顺序存储;意思是像“你好!萨拉姆!”这样的句子。实际上是按照这个顺序存储了字母。

然而,除此之外,还会在文本中添加某些unicode标志,通知文本布局引擎在显示时应该颠倒句子的“Salaam”部分;所以最终的文本布局变成了“Hello!maalaS!”,它也应该是。

这些标志是通过自然BIDI分类设置的;例如غ;或者通过使用Unicode RTL和LTR标记U+200EU+200F

如果你注意,光标实际上并不奇怪地跳跃,它总是遵循逻辑字符顺序。