仅为指定的div将英文数字转换为波斯语/阿拉伯语

时间:2016-01-17 17:11:31

标签: javascript jquery css3

我知道这个问题在这里已多次被回复,但我仍然没有得到确切答案。我需要通过一些javascript将英文字母转换为波斯语/阿拉伯字母,但不是整个页面,但只适用于div或更多。仅适用于特定类别。

我遇到过这些代码,但不知道哪一个最适合使用。

function convert($string) {
    $persian = array('۰', '۱', '۲', '۳', '۴', '۵', '۶', '۷', '۸', '۹');
    $num = range(0, 9);
    return str_replace($persian, $num, $string);
}

我需要确切的源只能在一个div类上实现。

例如:

<div class="demo">12345</div> 

应该改为

<div class="demo">۱۲۳۴۵</div>

9 个答案:

答案 0 :(得分:8)

我不相信您提供的代码示例中的任何一个都是JavaScript,第一个在语法上非常接近,但在range()定义上缺少new方法和array()。第二个是Java。

要实现您的要求,您可以将要翻译的每个HTML元素的文本转换为数组并逐步执行它们,通过Regex检查每个字符以查看是否找到了数字。如果是,您可以在将阵列重新连接到一起之前进行简单的替换。像这样:

var arabicNumbers = ['۰', '١', '٢', '٣', '٤', '٥', '٦', '٧', '٨', '٩'];
$('.translate').text(function(i, v) {
    var chars = v.split('');
    for (var i = 0; i < chars.length; i++) {
        if (/\d/.test(chars[i])) {
            chars[i] = arabicNumbers[chars[i]];
        }
    }
    return chars.join('');
})

Example fiddle

答案 1 :(得分:2)

你可以使用

$('.translate').text(function(i, v) {
   return convertToPersianNumber(v)
})

以及以下代码 this link

&#13;
&#13;
var persianDigits = "۰۱۲۳۴۵۶۷۸۹";
var persianMap = persianDigits.split("");

function convertToEnglishNumber(input){
    return input.replace(/[\u06F0-\u06F90]/g, function(m){
        return persianDigits.indexOf(m);
    });
}
function convertToPersianNumber(input){
    return input.replace(/\d/g,function(m){
        return persianMap[parseInt(m)];
    });
}

// tests
console.log(convertToEnglishNumber("۴۳۵"));
console.log(convertToEnglishNumber("۶۲۷۰۱"));
console.log(convertToEnglishNumber("۳۵۴۳"));
console.log(convertToPersianNumber("216541"));
console.log(convertToPersianNumber("16549"));
console.log(convertToPersianNumber("84621"));
&#13;
&#13;
&#13;

答案 2 :(得分:1)

用于React,使用此组件

import React, {Component} from "react";


class PersianNumber extends Component {


   render() {
       let en_number = this.props.number.toString();
       let persianDigits = "۰۱۲۳۴۵۶۷۸۹";
       let persianMap = persianDigits.split("");
       let persian_number = en_number.replace(/\d/g, function (m) {
         return persianMap[parseInt(m)];
       });

    return (
        <span>{persian_number}</span>
    )


  }

}


export default PersianNumber

将文件名保存为:PersianNumber.jsx并使用如下:

<PersianNumber number={12365}/>

答案 3 :(得分:0)

尝试使用具有许多功能的angularJS版本

GitHub - mohebifar/angular-persian: Persian tools for angular.js

<div >{{vm.value | pNumber}}</div>

注意:此解决方案非常易于使用,但基于angularJS。

答案 4 :(得分:0)

我认为这可以帮助您

    const arabicNumbers = ['۰', '١', '٢', '٣', '٤', '٥', '٦', '٧', '٨', '٩'];
    var ThirtyNine = 39;
    const convertToArabic = (number) => {
      return String(number).split('').map(char => arabicNumbers[Number(char)]).join('');
    }
    var inArabic = convertToArabic(ThirtyNine);

答案 5 :(得分:0)

要转换数字字符,您只需要将两组Unicode字符之间的差值加/减到原始数字即可。这是一个示例:

// English to Persian/Arabic
console.log(
'Persian now:',
'12345'.replace(/[0-9]/g, c => String.fromCharCode(c.charCodeAt(0) + 1728))
);

// Persian/Arabic to English
console.log(
'English now:',
'۵۶۷۸۹'.replace(/[۰-۹]/g, c => String.fromCharCode(c.charCodeAt(0) - 1728))
);

答案 6 :(得分:0)

在React Native中

我创建了一个函数,可以根据语言方向双向转换数字:

import React from 'react';
import {I18nManager} from 'react-native';
const isRTL = I18nManager.isRTL; //check app direction

export function NumberConverter(number){    
    if(!isRTL){  
        //english language
        const digit = (number.toString()).replace('.', ',')
        const id= '0123456789';
        return (digit.replace(/[۰-۹]/g, function(w){
            return id[w]}))
    } else{
        //Arabic Language
        const digit = (number.toString()).replace('.', ',')
        var id = '٠١٢٣٤٥٦٧٨٩';
        return (digit.replace(/[0-9]/g, function (w) {
            return id[w]}))
    
    }
}

然后像这样使用它:

        import {NumberConverter} from './NumberConverter';
        NumberConverter(10)
         

答案 7 :(得分:0)

您可以尝试以下功能:

translateFunction: function(number){
      var looper = ['۰','۱','۲','۳','۴','۵','۶','۷','۸','۹'];
      var englishDigits = Array.from(String(number), Number);
      var farsiDigits = [];
      englishDigits.forEach(digit => {
        farsiDigits.push(looper[digit]);
      });
      console.log(farsiDigits.join(""));
    }

我们要采取的步骤是:

  1. 我们定义了一个名为looper的数组,以使用其项替换我们的英文数字。

  2. 我们将字符串参数(如“ 123”)转换为数组。据我所知,我们不能在数字或字符串上使用forEach,因此我们应该将其转换为数组。

  3. 我们定义了一个空数组以获取最终结果。

  4. 最重要的部分是,我们遍历数组,并将数组中的每个数字推入farsiDigits中,具体取决于其如何成为弯针项目的索引。

我知道这段代码可以编写得更好,但这是我现在想到的,希望对您有所帮助!

答案 8 :(得分:0)

在VUE中使用“自定义过滤器”,以防万一需要。

    Vue.filter('NumToPer', function (input) {
        return input.replace(/[0-9]/g, c => String.fromCharCode(c.charCodeAt(0) + 1728));
        
**OR USE THIS ONE**
        // var persianDigits = "۰۱۲۳۴۵۶۷۸۹";
        // var persianMap = persianDigits.split("");
    
        // return input.replace(/\d/g, function(m) {
        //     return persianMap[parseInt(m)];
        // });
    })
相关问题