یکی از مشکلاتی که بیشتر برنامه نویسان برای طراحی و برنامه نویسی وب سایتهای فارسی زبان با آن مواجه هستند، فارسی سازی اعداد استخراج شده از پایگاه داده و یا محاسبه شده توسط زبان برنامه نویسی می باشد.
این اعداد چون از پایگاه داده می آیند و یا محاسبه می شوند، با فرمت انگلیسی نمایش داده می شوند و حتی ست کردن فونت فارسی هم باعث فارسی شدن اعداد نمی شوند. برای فارسی سازی آنها باید از برنامه نویسی کمک بگیریم.
در این آموزش قصد دارم سورس کد نحوه فارسی سازی با استفاده از جاوااسکریپت و PHP را قرار دهم.
فارسی سازی اعداد وبسایت با استفاده از JavaScript
برای اجرای کد زیر بهتر است کتابخانه jQuery را نیز به صفحه خود اضافه کنید. تا از طریق آن زمانی این کد را اجرا کنید که صفحه لود شده باشد و اگر نه اعداد تغییر نخواهند کرد.
persian = { 0: '۰', 1: '۱', 2: '۲', 3: '۳', 4: '۴', 5: '۵', 6: '۶', 7: '۷', 8: '۸', 9: '۹' };
function traverse(el) {
if (el.nodeType == 3) {
var list = el.data.match(/[0-9]/g);
if (list != null && list.length != 0) {
for (var i = 0; i < list.length; i++)
el.data = el.data.replace(list[i], persian[list[i]]);
}
}
for (var i = 0; i < el.childNodes.length; i++) {
traverse(el.childNodes[i]);
}
}
traverse(document.body);
در این کد از طریق جاوااسکریپت صفحه را حرف به حرف جستجو کرده و اعداد فارسی را جایگزین اعداد انگلیسی می کنیم.
کد بالا فقط برای اعدادی که در متن وجود دارند استفاده می شود اما عددهای داخل input را تغییر نمیدهد که برای تغییر آنها از کد زیر استفاده می شود.
persian = { 0: '۰', 1: '۱', 2: '۲', 3: '۳', 4: '۴', 5: '۵', 6: '۶', 7: '۷', 8: '۸', 9: '۹' };
var nodes=document.querySelectorAll('input[type=text]');
for(var i=0;i<nodes.length;i++){
var list = nodes[i].value.match(/[0-9]/g);
if (list != null && list.length != 0) {
for (var j = 0; j < list.length; j++) {
nodes[i].value = nodes[i].value.replace(list[j], persian[list[j]]);
}
}
}
با استفاده از PHP
اگر شما جز افرادی هستید که زیاد به JavaScript اعتماد ندارید و می خواهید همه چیز تحت کنترل و درست اجرا شود می توانید از تابع زیر برای کنترل خروجی های PHP استفاده نمایید.
function persian_number($number)
{
if(!is_numeric($number) || empty($number))
return '۰';
$en = array("0","1","2","3","4","5","6","7","8","9");
$fa = array("۰","۱","۲","۳","۴","۵","۶","۷","۸","۹");
return str_replace($en, $fa, $number);
}
مثال برای استفاده از تابع
$data = 'ab12cd34ef56';
echo persian_number($data);