0

我正在尝试在 WordPress 网站中显示 Twitter 提要。我的客户用英语和阿拉伯语发布推文,有时还使用两种语言的组合。我需要检测语言并将“rtl”类添加到阿拉伯语推文以及内容主要为阿拉伯语的推文中。我正在使用一个去除 Twitter iso_language_code 元数据的插件。

几年前在以前的开发站点上尝试此操作时,我记得成功地使用了此处找到的 Tristan 解决方案的变体:

如何检测在文本区域中输入的文本是 RTL

不幸的是,它似乎不再起作用。

Tristan 的 jsfiddle 也不再有效。

我正在使用这个资源:

http://cdnjs.cloudflare.com/ajax/libs/xregexp/2.0.0/xregexp-min.js

这个脚本:

    jQuery(document).ready(function($) {
        $('p').each(function() {
        if(isRTL($(this).text()))
            $(this).addClass('rtl');
    });

    function isRTL(str) {
        var isArabic = XRegExp('[\\p{Arabic}]');
        var isLatin = XRegExp('[\\p{Latin}]');
        var partLatin = 0;
        var partArabic = 0;
        var rtlIndex = 0;
        var isRTL = false;

        for(i=0;i<str.length;i++){
            if(isLatin.test(str[i]))
                partLatin++;
            if(isArabic.test(str[i]))
                partArabic++;
        }
        rtlIndex = partArabic/(partLatin + partArabic);
        if(rtlIndex > .5) {
            isRTL = true;
        }

        return isRTL;
    }

    });

谁能帮我解决我哪里出错了?

非常感谢,

菲尔


更新


我设法使部分解决方案起作用:

    jQuery(document).ready(function($) {

    var arabic = /[\u0600-\u06FF]/;

    $('p').each(function() {

        if (arabic.test($(this).text())) {
      $(this).addClass( "rtl" ).attr('style','text-align:right;direction:rtl');
      }

      else {
      $(this).addClass( "ltr" ).attr('style','text-align:left;direction:ltr');
      }

    });

    });

我提前道歉 - 我是这方面的初学者。

我在这里做了一个jsfiddle:

http://jsfiddle.net/philnicholl/4xn6jftw

如果文本全是阿拉伯文或全英文,但英文推文中的一个阿拉伯文单词会搞砸,这很有效。

奇怪的是,当我将此脚本添加到真实世界的 WordPress 测试中时,它产生的结果与我想要的完全相反,因为在阿拉伯文段落和推文中,给定了 LTR 类,样式和英文文本给定了 RTL。

反转 if else 会给出正确的结果。

任何帮助将不胜感激。

再次感谢你。

菲尔

4

2 回答 2

0

如果您使用 wordpress,我建议另一种解决方案,您可以在header.php的头部或footer.php文件的末尾分配变量

您可以通过检查 wordpress 函数is_rtl()来分配新变量

示例:<script>标签之间header.php或footer.php中的js代码

  <?php if ( is_rtl() ) :?>
    var is_rtl = true
  <php else:?>
    var is_rtl = false;
  <?php endif;?>

然后在你的js文件中使用它来检查

jQuery(document).ready(function($) {
    $('p').each(function() {
    if(is_rtl)
      $(this).addClass('rtl');
});
于 2019-10-03T13:51:06.217 回答
0

您可以使用正则表达式来确定是否只包含阿拉伯字母

$('p').each(function() {
    if(isRTL($(this).text()))
        $(this).addClass('rtl');
});

function isRTL(str) {
    return /^[\u0600-\u06FF]/.test(str);
}
p.rtl {
    direction: rtl;
}
p.ltr {
    direction: ltr;
}
<script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.3.1/jquery.min.js"></script>
<p>Hello World</p>
<p>مرحبا بالعالم</p>
<p>Hello World مرحبا بالعالم</p>

于 2019-10-03T14:01:43.170 回答