首页 > 解决方案 > 您如何获得标点符号以使用 RTL 语言?

问题描述

您如何在 RTL 语言的段落末尾出现句点?

<p dir="rtl" style="float: right;direction: rtl;">   
    .זהו משפט בשפה מימין לשמאל
</p>

这是它在我的托管网站上如何错误呈现的屏幕截图。红色箭头是期间所在的位置。绿色箭头是它应该放置的位置:

在此处输入图像描述

有趣的是,当在浏览器中呈现时,它确实有效:

.זהו משפט בשפה מימין לשמאל

标签: htmlcss

解决方案


编辑

在自己玩过之后,我确信问题出在文本编码中,必须在浏览器有机会应用自己的 HTML 规则之前对其进行解释。

换句话说,由于这个 rtl 文本之前是 ltr 文本(即 html 文档本身),因此文本解码器在读取句点时处于 ltr 上下文中。句点本身不会改变文本方向。但是,插入从右到左的标记似乎没有效果。

<p dir="rtl" style="float: right;direction: rtl;">   
    &rlm;.זהו משפט בשפה מימין לשמאל
</p>


弄清楚事情

请注意句点的位置与Mozilla 的 rtl 示例中使用的位置之间的差异。

我认为问题的发生(部分)是因为周期本身没有方向性。当您将句点放在源文件的左侧时,它会移至输出的开头,因为句点位于文本本身的 ltr 上下文中。

在 ltr 上下文中(如您的第一个示例中),它最终位于左侧;在 rtl 上下文中(如您的第二个示例中),它最终位于右侧。当您使用自动方向时,浏览器会选择 rtl,如下所示。这表明第一个强方向性字符是ל,而不是.

<p dir="ltl">
    .זהו משפט בשפה מימין לשמאל
</p>
<p dir="rtl">
    .זהו משפט בשפה מימין לשמאל
</p>
<br>
<p dir="auto">
    .זהו משפט בשפה מימין לשמאל
</p>

当我尝试编辑上面的文本时,它会在 rtl 和 ltr 上下文之间切换,具体取决于我是在句点之前还是之后输入的。我认为这个问题与文本编码本身有关。您可能需要在文本开头或句点“之后”放置一个 rtl 标记。

有趣的是,如果您将句点放在更大的文本块中,它会起作用。由于它不是源文本中最左边的字符,因此它不会在其他文本的 rtl 上下文之前创建隐式 ltr 上下文。

    <p dir="rtl">
        זהו משפט בשפה מימין לשמאל. לשמאל
    </p>
    <p dir="rtl">
        .זהו משפט בשפה מימין לשמאל 
    </p>

看到不同?


推荐阅读