我知道这个问题在这里已多次被回复,但我仍然没有得到确切答案。我需要通过一些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>
答案 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('');
})
答案 1 :(得分:2)
你可以使用
$('.translate').text(function(i, v) {
return convertToPersianNumber(v)
})
以及以下代码 this link
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;
答案 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)
我创建了一个函数,可以根据语言方向双向转换数字:
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(""));
}
我们要采取的步骤是:
我们定义了一个名为looper的数组,以使用其项替换我们的英文数字。
我们将字符串参数(如“ 123”)转换为数组。据我所知,我们不能在数字或字符串上使用forEach,因此我们应该将其转换为数组。
我们定义了一个空数组以获取最终结果。
最重要的部分是,我们遍历数组,并将数组中的每个数字推入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)];
// });
})