巧妙地使用text-align(如果arab dir = rtl,则为english dir = ltr)

时间:2012-08-02 23:39:01

标签: javascript html css internationalization right-to-left

我有一个社区网站,我希望用户写

  • 英文帖子,方向为LTR / text-align:left)和
  • 方向为RTL / text-align的阿拉伯语帖子:右。

E.g。 Google+和Twitter提供了这样的POST解决方案。

当我从rtl或ltr中的数据库后加载中读取它时,我想自动添加方向属性!但我不知道怎么样?!

5 个答案:

答案 0 :(得分:18)

您需要创建一个函数,其中包含您知道的所有字母都是RTL并在加载时检查。要显示RTL,您需要CSS属性directiontext-alignunicode-bidi

演示: jsFiddle

脚本

function checkRtl( character ) {
    var RTL = ['ا','ب','پ','ت','س','ج','چ','ح','خ','د','ذ','ر','ز','ژ','س','ش','ص','ض','ط','ظ','ع','غ','ف','ق','ک','گ','ل','م','ن','و','ه','ی'];
    return RTL.indexOf( character ) > -1;
};

var divs = document.getElementsByTagName( 'div' );

for ( var index = 0; index < divs.length; index++ ) {
    if( checkRtl( divs[index].textContent[0] ) ) {
        divs[index].className = 'rtl';
    } else {
        divs[index].className = 'ltr';
    };
};

CSS

.rtl {
    direction: rtl; 
    text-align: right;
    unicode-bidi: bidi-override;
}

.ltr {
    direction: ltr; 
    text-align: left;
    unicode-bidi: bidi-override;
}

HTML

<div>hello</div>
<div>ظ</div>

答案 1 :(得分:2)

您可以在html标签中指定dir="rtl",以便使用php

进行正确的演示 在您的CMS中

或如果您没有使用它,在将上下文存储到数据库时,您可以选择使用作者使用的文本方向存储变量。

因此,在提取帖子时,您还可以获取作者标记的选项。

否则,就像其他程序员所建议的那样,解析内容,看看它的阿拉伯字符或拉丁字符。

示例

<body dir="<?php se_11787707_get_post_language(); ?>">

如果没有关于如何发布帖子的更多信息,我无法详细说明。 请提供 如何存储您的帖子以及如何获取它们。

我使用此tecnique构建了一个网站,我每天处理阿拉伯语rtl内容。这很简单:

dir =“rtl”的工作示例

jsfiddle.net

参考:w3.org

答案 2 :(得分:1)

这很容易。你可以使用dir =&#39; auto&#39;归属于Html元素。因此,如果您的文本是阿拉伯语或波斯语文本使用RTL,如果您的文本是英文自动文本使用LTR。

<p dir='auto'>Hello</p>
<p dir='auto'>سلام</p>

答案 3 :(得分:1)

只有CSS解决方案:

div {
    text-align: start;
    unicode-bidi: plaintext;
}

jsFiddle

不幸的是,此解决方案不适用于Microsoft Edge。

答案 4 :(得分:0)

实际上阿拉伯字母是这些

var RTL = ['ا','ء','ب','ت','ث','ج','ح','خ','د','ذ','ر','ز','س','ش','ص','ض','ط','ظ','ع','غ','ف','ق','ک','ل','م','ن','و','ه','ی'];

和波斯语(波斯语)字母是这些

var RTL = ['ا','ب','پ','ت','ث','ج','چ','ح','خ','د','ذ','ر','ز','ژ','س','ش','ص','ض','ط','ظ','ع','غ','ف','ق','ک','گ','ل','م','ن','و','ه','ی'];

如果检查第一个和第二个字母会有用,因为有时它可以通过子弹或类似的东西开始。

for ( var index = 0; index < divs.length; index++ ) {
    if( checkRtl( divs[index].textContent[0] ) || checkRtl( divs[index].textContent[1] ) ) {
        divs[index].className = 'rtl';
    } else {
        divs[index].className = 'ltr';
    };
};