PDA

View Full Version : مقاله: تبدیل اعداد انگلیسی به فارسی در JavaScript!



eAmin
شنبه 02 خرداد 1388, 22:00 عصر
سلام.

این در حقیقت یه utility در js به شمار می یاد، برای اونهایی می خوان اعداد انگلیسی رو به اعداد پارسی تبدیل کنند.
قبلا یه تاپیک در اینمورد مورد بود، در بخش ASP.NET اینبار در جاوااسکریپت پیاده سازی شده.

توجه: شما مجازید فقط از string ها برای استفاده در کارتون ازش استفاده کنید، چون با این عمل خاصیت عددی اعداد تبدیل شده از بین می رود.

/*
* English digit to persian
* Copyright(C) 2009 by Amin Akbari [ http://eAmin.me ]
* Licensed under the MIT Style License [http://www.opensource.org/licenses/mit-license.php]
*
*/

String.prototype.toFaDigit = function() {
return this.replace(/\d+/g, function(digit) {
var ret = '';
for (var i = 0, len = digit.length; i < len; i++) {
ret += String.fromCharCode(digit.charCodeAt(i) + 1728);
}

return ret;
});
};

// Sample:
"012345srh6srh789".toFaDigit(); // ۰۱۲۳۴۵srh۶srh۷۸۹


و برعکس (برای انجام محاسبات بر روی اعداد):

String.prototype.toEnDigit = function() {
return this.replace(/[\u06F0-\u06F9]+/g, function(digit) {
var ret = '';
for (var i = 0, len = digit.length; i < len; i++) {
ret += String.fromCharCode(digit.charCodeAt(i) - 1728);
}

return ret;
});
};

parseInt(str.toEnDigit(), 10);


موفق باشید.

amirepsilon
سه شنبه 12 آبان 1388, 17:10 عصر
میشه توضیح بدی این رو چطور باید استفاده کنیم ؟

eAmin
شنبه 23 آبان 1388, 03:45 صبح
اگر می خواید تمامی اعداد درون صفحه به اعداد فارسی تبدیل بشن از کد زیر استفاده کنید:

window.onload = function() {
var body = document.getElementsByTagName("body")[0];
body.innerHTML = body.innerHTML.toPersian();
};

این روش بر روی تمامی اعداد سند شما تاثیر میزاره، یعنی اگر کلاس یا id برای تگهاتون در نظر گرفتید که در اونها عدد بکار رفته شده، اونها رو از کار میندازه.

vahid67
شنبه 26 دی 1388, 21:24 عصر
آقا این کدها رو کجای صفحه باید بگزاریم ؟؟؟؟؟ توی head توی body یا ؟؟؟؟؟
من همچین تگی درست کردم و گذاشتم بین این دوتا کار نکرد ....

<script language="javascript">

</script>

eAmin
دوشنبه 28 دی 1388, 02:29 صبح
عجیب بود خیلی!
شما این رو بزارید بین تگ head به امید خدا جواب می گیرید:


<script type="text/javascript" charset="utf-8">

window.onload = function() {
// argument true to arabic(!) num
alert("012345srh6srh789".toFaDigit(true)); // ٠١٢٣٤٥srh٦srh٧٨٩

// argument false|none to Persian(farsi) num
alert("012345srh6srh789".toFaDigit()); // ۰۱۲۳۴۵srh۶srh۷۸۹
};

</script>

vahid67
دوشنبه 28 دی 1388, 23:56 عصر
امین جان مرسی ایندفه وقتی صفحه رو باز میکنم دو تا پیغام میاد که باید OK کنم تا بره توی سایت بعدش هم باز هم اعداد انگلیسی هستند.... پیغامش هم اینه

٠١٢٣٤٥srh٦srh٧٨٩

یه بار هم بدون این دستورها گذاشتم هیچ اتفاقی نیافتاد....

window.onload = function() {
// argument true to arabic(!) num
alert("012345srh6srh789".toFaDigit(true)); // ٠١٢٣٤٥srh٦srh٧٨٩

// argument false|none to Persian(farsi) num
alert("012345srh6srh789".toFaDigit()); // ۰۱۲۳۴۵srh۶srh۷۸۹
};

eAmin
سه شنبه 29 دی 1388, 03:51 صبح
این کدها در Notepad ویندوز کپی کنید و با فرمت HTML ذخیره کنید و نتیجه رو مشاهده کنید:


<script type="text/javascript" charset="utf-8">

String.prototype.toFaDigit = function() {
return this.replace(/\d+/g, function(digit) {
var ret = '';
for (var i = 0, len = digit.length; i < len; i++) {
ret += String.fromCharCode(digit.charCodeAt(i) + 1728);
}

return ret;
});
};

window.onload = function() {
var body = document.getElementsByTagName("body")[0];
body.innerHTML = body.innerHTML.toFaDigit();
};

</script>

<body>

<p>329860v3908w09eymc</p>
<p>536349vm83w4tegy</p>

<p>4555585v9364v5</p>

<p>457346b747b7b5444e5y</p>



</body>

site20042005
چهارشنبه 14 بهمن 1388, 17:51 عصر
با سلام
یه سوال فوری دارم:
اگه بخوام بر عکس این کار را انجام بدم باید چه تغییری تو این کد بدم؟؟؟؟؟
یعنی تو صفحه اعداد فارسی دارم و می خوام به انگلیسی تبدیل بشه.

خیلی اورژانسیه
ممنونم

eAmin
یک شنبه 18 بهمن 1388, 12:37 عصر
جواب در پست اول هست ������

desiran
پنج شنبه 20 اسفند 1388, 08:37 صبح
اگر می خواید تمامی اعداد درون صفحه به اعداد فارسی تبدیل بشن از کد زیر استفاده کنید:

window.onload = function() {
var body = document.getElementsByTagName("body")[0];
body.innerHTML = body.innerHTML.toPersian();
};
امتحان کنید و feedback بفرستید.

سلام خسته نباشید من می خواهم از این کد این طوری استفاده کنم که به جای اینکه عداد داخل تگ body رو برام فارسی کنه عداد داخل هر چندتا تگ Span رو برام فارسی کنه و وقتی عبارت body رو تویه کد زیر به جاش span می زارم کار نمی کنه فقط عداد اولین تگ span صفحه را فارسی می کنه چی کار باید کرد


var body = document.getElementsByTagName("span")[0];

eAmin
یک شنبه 23 اسفند 1388, 19:15 عصر
سلام خسته نباشید من می خواهم از این کد این طوری استفاده کنم که به جای اینکه عداد داخل تگ body رو برام فارسی کنه عداد داخل هر چندتا تگ Span رو برام فارسی کنه و وقتی عبارت body رو تویه کد زیر به جاش span می زارم کار نمی کنه فقط عداد اولین تگ span صفحه را فارسی می کنه چی کار باید کرد


var body = document.getElementsByTagName("span")[0];
سلام

خب چیزی عجیبی نیست، همونطور که مشخصه خروجی getElementsByTagName آرایه است، و شما باید برای اینکه تمامی المنتهای پیدا شده رو پیمایش کنید باید از حلقه کمک بگیرید.

var ele = document.getElementsByTagName('span');
for (var i=0; i < ele.length; i++) {
ele[i].innerHTML = ele[i].innerHTML.toPersian();
}

nPad.Net
چهارشنبه 18 فروردین 1389, 10:43 صبح
اگر می خواید تمامی اعداد درون صفحه به اعداد فارسی تبدیل بشن از کد زیر استفاده کنید:

window.onload = function() {
var body = document.getElementsByTagName("body")[0];
body.innerHTML = body.innerHTML.toPersian();
};
امتحان کنید و feedback بفرستید.

با تشکر از دوستمون eAmin
تابع رو اجرا کردم اگه کل page فقط متن باشه خیلی خوب جواب میده ولی چون تمام اعداد رو فارسی میکنه کل سایزهایی (Width Or Height)که برا کنترل های صفحه انتخاب می کنیم رو از حالت valid خارج میکنه در نتیجه همه کنترل ها با size پیش فرض نشون داده میشن!چطور میتونیم این Bug رو رفع کنیم؟


ممنون از راهنماییتون

rakhshanmt
یک شنبه 05 اردیبهشت 1389, 13:37 عصر
سلام من وقتي كد زير رو مي ذارم تمام سايز فونت ها بهم ميريزه و رنگ هاشونم يكي ميشه

من مي خوام يك كدي داشته باشم كه فقط اعداد رو فارسي كنه بدون دخالت در حروف
كداي ديگه هم هر جا ميذارم بصورت نوشته ميشه نه دستور . من خيلي مبتدي هستم

<script type="text/javascript" charset="utf-8">

String.prototype.toPersian = String.prototype.toFaDigit = function(a) {
return this.replace(/\d+/g, function(digit) {
var digitArr = [], pDigitArr = [];
for (var i = 0, len = digit.length; i < len; i++) {
digitArr.push(digit.charCodeAt(i));
}

for (var j = 0, leng = digitArr.length; j < leng; j++) {
pDigitArr.push(String.fromCharCode(digitArr[j]+((!!a && a == true) ? 1584 : 1728)));
}

return pDigitArr.join('');
});
};


window.onload = function() {
var body = document.getElementsByTagName("body")[0];
body.innerHTML = body.innerHTML.toPersian();
};

</script>

mohrdmk
شنبه 18 اردیبهشت 1389, 00:31 صبح
سلام.
من هم مشکل nPad.Net (http://www.barnamenevis.org/forum/member.php?u=124888) و rakhshanmt (http://www.barnamenevis.org/forum/member.php?u=76876) رو دارم .. کسی میتونه این مشکلات رو رفع کنه ؟؟؟؟؟ خیلی لازمه!!! :افسرده:

fumnimda
یک شنبه 19 اردیبهشت 1389, 00:30 صبح
با تشکر از دوستمون eAmin
تابع رو اجرا کردم اگه کل page فقط متن باشه خیلی خوب جواب میده ولی چون تمام اعداد رو فارسی میکنه کل سایزهایی (Width Or Height)که برا کنترل های صفحه انتخاب می کنیم رو از حالت valid خارج میکنه در نتیجه همه کنترل ها با size پیش فرض نشون داده میشن!چطور میتونیم این Bug رو رفع کنیم؟


ممنون از راهنماییتون

خب این اتفاق طبیعیه. چون از همه چیز در html به صورت متنی دیده می شه. یک راهش اینه که از css و class برای اندازه دادن به کنترل ها و هر چیزی تو صفحه استفاده کنید. البته دقت کنید که css ای که تعریف می کنید رو به صورت درون خطی تعریف نکنید و حتما از کلاس استفاده کنید.

raha_1362
شنبه 01 آبان 1389, 13:18 عصر
سلام
من این کد را استفاده کردم در حالت عادی (وقتی توی صفحه گیرید نباشد) خیلی خوب جواب می ده اما با گیرید اسکین گیرید رو برمی داره و صفحه حالت ساده ای پیدا می کنه
با این کد چطور می شه اعداد توی گیرید را فارسی کرد؟

bemamian
چهارشنبه 31 فروردین 1390, 13:46 عصر
درود

با کد زیر میتونید تمام اعداد رو توی صفحه فارسی کنید




String.prototype.toPersian = String.prototype.toFaDigit = function (a) {
return this.replace(/\d+/g, function (digit) {
var digitArr = [], pDigitArr = [];
for (var i = 0, len = digit.length; i < len; i++) {
digitArr.push(digit.charCodeAt(i));
}
for (var j = 0, leng = digitArr.length; j < leng; j++) {
pDigitArr.push(String.fromCharCode(digitArr[j] + ((!!a && a == true) ? 1584 : 1728)));
}
return pDigitArr.join('');
});
};

function TraceNodes(Node) {
if (Node.nodeType == 3) //TextNode
Node.nodeValue = Node.nodeValue.toPersian();
else
for (var i = 0; i < Node.childNodes.length; i++)
TraceNodes(Node.childNodes[i]);
}
TraceNodes(document);

Morteza.B
دوشنبه 08 اسفند 1390, 09:40 صبح
سلام
من از اين كد استفاده كردم ولي يه مشكلي هست...اونم اينه كه جدولام رو خرا ميكنه..
ميشه كمك كنيد؟؟؟؟

فكر كنم از لودي هست كه تو بادي ازش استفاده شده

miyandari
چهارشنبه 20 اردیبهشت 1391, 08:53 صبح
اگر می خواید تمامی اعداد درون صفحه به اعداد فارسی تبدیل بشن از کد زیر استفاده کنید:

window.onload = function() {
var body = document.getElementsByTagName("body")[0];
body.innerHTML = body.innerHTML.toPersian();
};
امتحان کنید و feedback بفرستید.


با سلام
یه سئوال داشتم اگه بخوام فقط عدد های بین تگها (نه داخل تگها) یعنی بین علامتهای > < به فارسی تبدیل بشن چیکار باید بکنم ؟
چون همونطور که مستحضرید ما داخل تگها value هایی داریم که مقدار آنها در دیتابیس ریخته می شود با تبدیل کد اعداد به مشکل بر میخوریم . ولی اون چیزی که نمایش داده میشه داخل علامات بزرگتر و کوچکتره .
با تشکر

id1385
سه شنبه 27 تیر 1391, 21:00 عصر
سلام
دوستان یک مورد برای جاوا اسکریپت نوشتم که میزارم شاید بدردتون بخوره!
توی این اسکریپت دو فانکشن نوشاتم که یکی برای تبدیل اعداد به فارسی هست و دیگری برای جدا کردن اعداد بصورت سه تایی است که درمورد پول بکار میرود.

شکل خروجی :


Farsi Numbers = ۱۲۳۴۵۶۷۸۹۰
Splited Numbers1 = 1/234/567/890
Splited Numbers2 = ۱/۲۳۴/۵۶۷/۸۹



فانکشن تبدیل اعداد به فارسی :


function Number2Farsi(Numbers){ // Output = (1234567890 => ۱۲۳۴۵۶۷۸۹۰)
/*
Please Dont Remove No Line : Coded By Ata Amini(id1385)
SAMPLE 1 = Number2Farsi('1234567890');
SAMPLE 2 = Number2Farsi('Ata Amini: 09123532116');
SAMPLE 3 = var MyNumbers = '1234567890'; Number2Farsi(MyNumbers);
*///Defintion(s)
var NumbersLen = Numbers.length;
var CurentDigit = ''; // store current digit in for lap
var FinalDigits = ''; // store converted digit in for lap
var num0 = "۰";
var num1 = "۱";
var num2 = "۲";
var num3 = "۳";
var num4 = "۴";
var num5 = "۵";
var num6 = "۶";
var num7 = "۷";
var num8 = "۸";
var num9 = "۹";
if (NumbersLen <= 0 ){
return num0;}//if
else if (NumbersLen > 0 ){
for (var i=0 ; i <= NumbersLen-1 ; i++){
CurentDigit = Numbers.substring(i,i+1);
FinalDigits += ConvertNum(CurentDigit);
}//for
}//else
function ConvertNum(Num){
switch (Num) {
case '0': return num0; break;
case '1': return num1; break;
case '2': return num2; break;
case '3': return num3; break;
case '4': return num4; break;
case '5': return num5; break;
case '6': return num6; break;
case '7': return num7; break;
case '8': return num8; break;
case '9': return num9; break;
default: return Num; // End
}//switch
}//ConvertNum
return FinalDigits; // Final Return
}//Number2Farsi



فانکشن جداکردن اعداد:

function SplitDigit(Digit,Splictor){
/*
Please Dont Remove No Line : Coded By Ata Amini(id1385)
Not Allwed In Splictor "\"
SAMPLE = SplitDigit('1200000',',');
SAMPLE = Number2Farsi(SplitDigit('1200000','.'));
*///DEFINTION(S)
var DigitsLen = Digit.length;
var CurrentDigit = '';
var FinalDigit = '';
var DefaultSplictor = '';
var DigitArray = new Array();
var DigitREV = new Array();
var N = 0;
// SPLICTOR STATE
if (Splictor == "") { DefaultSplictor = ','} else { DefaultSplictor = Splictor; }
// SUBSTRING
for (var i=0 ; i <= DigitsLen-1 ; i++){
CurrentDigit = Digit.substring(i,i+1); //SUBSTRING DIGITS
DigitArray += CurrentDigit; // SETTING IN ARRAY
}// FOR
// REV
for (var i=0 ; i <= DigitArray.length -1 ; i++){
var K = (DigitArray.length - 1) - i ;
N++;
if (N == 1 || N == 2 || N == 3){
DigitREV += DigitArray[K];} else if (
N >= 3) {
N = 1; DigitREV += DefaultSplictor + DigitArray[K];
}
}// FOR
// Final
for (var i=0 ; i <= DigitREV.length-1 ; i++){
var L = (DigitREV.length - 1) - i ;
FinalDigit += DigitREV [L];
}// FOR

return FinalDigit; // Output
}



در آخر هم براتون اتچ میکنم.


موفق باشین.

mahsa.n
جمعه 15 آبان 1394, 10:12 صبح
شما به محتوای اون دو پیغام توجه کردید؟ آیا فهمیدید چه اتفاقی افتاد؟ اونها فقط یک مثال بودن تا شما متوجه بشید که کد مربوطه مشکل خاصی نداره.

دوست عزیز، عذر می خوام ولی اینجا یک مکان تخصصی هست، شما باید مطالب پیش پا افتاده رو از طریق کتاب خودندن و جستجو در اینترنت یاد بگیرید، نه اینکه چون اینجا صرفا یک انجمن فارسی هست، بیاید و درخواست کد کنید ( البته کد برای عموم گذاشته شده! به اضافه طرز استفاده از اون. ) و یا ...
اگر شما کمی JavaScript بلد بودید با یک نگاه می تونستید از این کد استفاده کنید.

امیدوارم به بنده خرده نگیرید، در هر صورت برای آخرین شمارو راهنمایی می کنم.

</body>
[/CODE]

دوستان برای اینکه مشکلاتشون حل بشه به جامعه برنامه نویس مراجعه میکنن، اینجا برای سوال کردن و یاد گرفتنه
خیلی خوبه که وقتی به دیگران آموزش میدیم این کار رو با حوصله و با جزییات انجام بدیم

mohammad50
دوشنبه 31 خرداد 1395, 19:52 عصر
سلام آیا امکان این هست که اعداد رو توی صفحه فارسی نشون بده ولی وقتی اعداد رو کاربر کپی میکنه همون انگلیسی باشه.
مثلا در نظر بگیرید من میخوام شناسه تراکنش در صفحه به صورت ٤٠٧٢٢٨١٢ نشون بده ولی وقتی کاربر میخواد این شناسه رو کپی کنه 40722812 باشه.