روشن فکری بنیان ماست !

ما هرگز نمی گذاریم حوصله شما سربرود !

اللَّهُ نُورُ السَّمَاوَاتِ وَالْأَرْضِ مَثَلُ نُورِهِ کَمِشْکَاةٍ فِیهَا مِصْبَاحٌ الْمِصْبَاحُ فِی زُجَاجَةٍ الزُّجَاجَةُ کَأَنَّهَا کَوْکَبٌ دُرِّیٌّ یُوقَدُ مِن شَجَرَةٍ مُّبَارَکَةٍ زَیْتُونِةٍ لَّا شَرْقِیَّةٍ وَلَا غَرْبِیَّةٍ یَکَادُ زَیْتُهَا یُضِیءُ وَلَوْ لَمْ تَمْسَسْهُ نَارٌ نُّورٌ عَلَی نُورٍ یَهْدِی اللَّهُ لِنُورِهِ مَن یَشَاءُ وَیَضْرِبُ اللَّهُ الْأَمْثَالَ لِلنَّاسِ وَاللَّهُ بِکُلِّ شَیْءٍ عَلِیمٌ ( برخی از خواص آینه ۳۵ سوره نور از کتاب قرآن کریم )
هرگونه کپی برداری از فایل های اختصاصی پیگرد قانونی دارد لذا در صورت کپی مطالب لینک دریافت آن ها را تغییر ندهید .
روشن فکری بنیان ماست !

به نام او که یادش ترنم عارفانه زندگیست . سلام من سید امیرحسین طــاووســی هستم طــراح و برنامه نویس وب . فـعالیتم را در زمینه کــامپـیوتـر قبل از سـال اول دبـسـتـان شـروع کــردم و تا دوره راهنمایی اطلاعات کاملی از این تکنولوژی بدست آوردم . از ان دوره تا کنون در زمینه های مختلف فعالیت می کنم که مهـم ترین آن برنامه نویسی وب است یکی از عواملی که باعث شد تا به این سمت بیام کـدباز بودن زبان های وب هستش و روز به روز به دانستنیهایم در این زمینه می افزایم. شاد و سرزنده باشید , امیر

جستجو در وبلاگ
آخرین نظرات

درصد پیشرفت پروژه ها

Projects Progress
اسکریپت اشتراک ویدیو + منتظر بزرگترین سوپرایز وبلاگ من در فروردین ۹۵ باشید۷۹ درصد

دریافت جزیات اسکریپت اشتراک ویدیو

فارسی سازی اعداد در صفحات وب با جاوا اسکریپت

پنجشنبه, ۱۴ خرداد ۱۳۹۴، ۱۰:۳۳ ق.ظ


به نام او که از موشک های اسراییل قوی تر است !
سلام و درود به طرفدارای عزیز وبلاگ امیر ، حتما برای شما هم پیش آمده که در صفحه وبلاگ و یا وبسایت خود دوست داشتید اعداد انگلیسی را فارسی نمایش دهید و همیشه موفق به این امر نبوده اید برای مثال شما اگه از یک فونت فارسی استفاده کنید تمام اعداد صفحه شما فارسی میشه و نکته منفی این روش فارسی شدن کارکترهای عددی در تگ های input هستش چون مثلا کاربر اگر در ادرس ایمیلش عدد باشد موقع تایپ آن در input آن اعداد فارسی تایپ می شود و ظاهر جالبی ندارد هرچند در عملکرد مشکلی بوجود نمی آورد . از دیدگاه من اگر می خواهید در وب از فونت استفاده کنید به خصوص فونت های فارسی که بحث ما هست حتما از فونت های اصلاح شده وب استفاده کنید برای مثال همین فونت BYekan که من در وبلاگم استفاده می کنم 2 نسخه دارد یکی که هم اعداد رو فارسی می کند که همانند فونت اصلی می باشد و دیگری فونت اصلاح شده وب هست که این مزیت را دارد تا اعداد را فارسی نکند و کیفیت نمایش خوبی در سایزهای بزرگ دارد . خوب سوال اینجاست اگه ما از فونت اصلاح شده استفاده کردیم چگونه تمامی اعداد صفحه یا بخش هایی از آن را فارسی کنیم ؟ برای پاسخ به این سوال در ادامه مطلب با ما همراه باشید .

برای این منظور به معرفی کدی که آقای بهنام امامیان دوست عزیزمان نوشته اند می پردازیم ، کدی بسیار جذاب برای جاواکارها که تمام اعداد درون صفحه رو بررسی می کند و با اعداد فارسی جایگزین می کند به کد زیر توجه داشته باشید .

/*
Convert English Numbers to Persian in a web page
Behnam Emamian(www.BehnamEmamian.com)
*/
 
String.prototype.toPersianDigit = function (a) {
    return this.replace(/\d+/g, function (digit) {
        var enDigitArr = [], peDigitArr = [];
        for (var i = 0; i < digit.length; i++) {
            enDigitArr.push(digit.charCodeAt(i));
        }
        for (var j = 0; j < enDigitArr.length; j++) {
            peDigitArr.push(String.fromCharCode(enDigitArr[j] + ((!!a && a == true) ? 1584 : 1728)));
        }
        return peDigitArr.join('');
    });
};
 
function TraceNodes(Node) {
    if (Node.nodeType == 3)  //TextNode
        Node.nodeValue = Node.nodeValue.toPersianDigit();
    else
        for (var i = 0; i < Node.childNodes.length; i++)
            TraceNodes(Node.childNodes[i]);
}
 
TraceNodes(document);
همان طور که مشاهده می کنید که استاتیک بالا شما را در امر فارسی کردن اعداد کمک می کند اما یه سوال مطرح می شود اگر ما از این کد استفاده کردیم ، تمام صفحه اعدادش فارسی می شوند اگر نیاز باشه یه قسمت از صفحه اعدادش ترجمه نشود باید چی کار کرد ؟ من با کمک از "Ginden" در وبسایت "Stackoverflow.com" به کد زیر رسیدم .
function getParentLang(node) {
    var defaultLang = 'fa';
    var currLang = null;
    while(currLang === null && node.parentNode) {
        if (node.getAttribute && node.getAttribute('lang')) {
            currLang = node.getAttribute('lang');
        }
        node = node.parentNode;
    }
    return currLang || defaultLang;
}
function TraceNodes(e) {
    if (e.nodeType == 3 && getParentLang(e) === 'fa' /* Persian */) {
        e.nodeValue = e.nodeValue.toPersianDigit();
    } else {
        for (var t = 0; t < e.childNodes.length; t++) {
            TraceNodes(e.childNodes[t]);
        }
    }
}
String.prototype.toPersianDigit = function(e) {
    return this.replace(/\d+/g, function(t) {
        var n = [],
            r = [];
        for (var i = 0; i < t.length; i++) {
            n.push(t.charCodeAt(i))
        }
        for (var s = 0; s < n.length; s++) {
            r.push(String.fromCharCode(n[s] + (!!e && e == true ? 1584 : 1728)))
        }
        return r.join("")
    })
};
TraceNodes(document);
کد بالا کمک می کند تا تمام صفحه همانند کد قبلی ترجمه شود اما اگر خواستیم تا قسمتی دچار تغییرات نشود فقط کافیست از صفت یا به اصطلاح خودم از المنت lang در کد html استفاده کنیم تا در آن ناحیه تغییراتی صورت نگیرد ، برای مثال :  <div lang="en"></div>
امیداورم مورد استفاده شما دوستان عزیز واقع گردد ، در پناه حق شاد و سرزنده باشید .

من سید امیرحسین طــاووســی هستم طــراح و برنامه نویس وب . فـعالیتم را در زمینه کــامپـیوتـر قبل از سـال اول دبـسـتـان شـروع کــردم و تا دوره راهنمایی اطلاعات کاملی از این تکنولوژی بدست آوردم . از ان دوره تا کنون در زمینه های مختلف فعالیت می کنم که مهـم ترین آن برنامه نویسی وب است یکی از عواملی که باعث شد تا به این سمت بیام کـدباز بودن زبان های وب هستش و روز به روز به دانستنیهایم در این زمینه می افزایم. شاد و سرزنده باشید .

رمز فایل ها در بیان باکس : tavousi.name

در صورت مشکل در دانلود فایل ها و یا حذف شدن آن ها ما را مطلع نمایید .

نظرات  (۴)

این روش یه مشکلی داره نمیدونم متوجه شدید یا نه
مثلا توی بوت استرب یه سری اعداد توی کلاس ها هست اونا توسط این کد فارسی میشن و قالب بهم میخوره
یا مثلا توی استایل های اینلاین اعداد فارسی میشن و باعث میشه از کار بیفته
برای این مشکل چه راهی پیشنهاد میدید
نمیشه بر عکسش کرد؟
یعنی همه جا انگلیسی باشه برجا fa دادیم فارسی بشه
پاسخ:
درود ، چرا به راحتی میشه برعکسش کرد مقدار دیفالت داخل جاوا اسکریپت رو از fa به en تغییر بدید . اما در این رابطه شاید با فریمورک بوت استرپ مشکل داره چون من در خیلی از پروژه هام حتی فریمورک های واکنشگرا استاتیک البته بوت استرپ نبوده استفاده کردم و مشکلی به وجود نیومده در view source فارسی مشاهده میشود اما در عمل اتفاقی نمی افتد .
ممنون از پاسختون من یک جایگزین عالی پیدا کردم که این مشکلو نداره و استایل ها و جاوااسکریپت های اینلاین رو فارسی نمیکنه
http://1o2.ir/uzfx3
اگرم میخواید روی همه ی اعداد اعمال بشه * بزارید به جای استایل
سلام.
بدیش اینه اعداد استایل اینلاینو هم فارسی میکنه !!! استایل اثر نمیکنه اونموقع
سلام

از این کتابخونه هم میتونید استفاده کنید.

https://github.com/ali-master/persian-tools

ارسال نظر

ارسال نظر آزاد است، اما اگر قبلا در بیان ثبت نام کرده اید می توانید ابتدا وارد شوید.
شما میتوانید از این تگهای html استفاده کنید:
<b> یا <strong>، <em> یا <i>، <u>، <strike> یا <s>، <sup>، <sub>، <blockquote>، <code>، <pre>، <hr>، <br>، <p>، <a href="" title="">، <span style="">، <div align="">
تجدید کد امنیتی