فهرست مطالب

کدهای آماده برای تبدیل اعداد انگلیسی به فارسی و بالعکس در وب

رفیق برنامه‌نویس، تا حالا شده بخوای یه عدد رو از انگلیسی به فارسی یا برعکس تبدیل کنی و کلی دنبال یه تکه کد درست‌وحسابی بگردی؟ می‌دونم چی می‌گی! توی دنیای وب فارسی، این نیاز مثل نون شب واجبه. چه برای نمایش تاریخ شمسی و مبلغ فاکتور، چه برای پردازش ورودی‌های کاربر. این مقاله همون رفرنس جامعیه که دنبالش بودی تا یک‌بار برای همیشه این مشکل رو حل کنی. کدهای آماده و بهینه برای جاوااسکریپت و PHP رو اینجا پیدا می‌کنی که می‌تونی مستقیم کپی کنی و بذاری تو پروژت. ضمناً، اگه دنبال ابزارهای حرفه‌ای‌تر و کدهای آماده بیشتری هستی، حتماً یه سر به فروشگاه ابزارهای ما بزن؛ کلی چیز خفن منتظرته! و اگه جایی به مشکل خوردی، تیم فنی ما همیشه آماده پاسخ‌گوییه، کافیه با شماره 09202232789 تماس بگیری.

✨ نقشه راه تبدیل اعداد: یه نگاه کلی ✨

🔢 چرا تبدیل؟

  • تجربه کاربری بهتر (UX)
  • بومی‌سازی وب‌سایت
  • نمایش صحیح تاریخ و مبالغ

⚙️ متدهای اصلی

  • جاوااسکریپت: فرانت‌اند، سریع
  • PHP: بک‌اند، قابل اعتماد
  • سایر زبان‌ها (پایتون، نود و…)

🛠️ نکات مهم

  • مدیریت اعشار و جداکننده‌ها
  • اعداد منفی و فرمت‌ها
  • عملکرد و یونی‌کد

چرا باید اعداد رو تبدیل کنیم؟ داستان از کجا شروع میشه؟

ببین رفیق، وقتی داریم یه اپلیکیشن یا وب‌سایت برای کاربرای فارسی‌زبان می‌نویسیم، جزئیات کوچیک می‌تونن یه تجربه کاربری عالی رو از یه تجربه معمولی جدا کنن. یکی از این جزئیات، نمایش اعداد به فرمت فارسیه. ما عادت داریم اعداد رو به این شکل (۰، ۱، ۲، …) ببینیم، نه به شکل (0, 1, 2, …). اگه سایت یا اپ ما اعداد رو همین‌طوری انگلیسی نمایش بده، شاید برای بعضیا خیلی مهم نباشه، اما برای خیلی‌ها حس غریبه بودن ایجاد می‌کنه و حتی می‌تونه باعث سوءتفاهم بشه. مثلاً تصور کن قیمت یه محصول رو به تومان داری، اما عددش انگلیسیه. این تبدیل نه تنها باعث میشه رابط کاربری دوست‌داشتنی‌تر و بومی‌تر به نظر برسه، بلکه خوانایی محتوا رو هم به شدت بالا می‌بره. از نمایش تاریخ شمسی توی تقویم‌ها گرفته تا مبلغ فاکتور و حتی شمارشگر بازدید، همه جا این تبدیل ضروریه.

قلب تپنده تبدیل: متدها و رویکردهای اصلی

حالا که فهمیدیم چرا باید این کارو بکنیم، بریم سراغ اینکه چطور انجامش بدیم. دو تا روش اصلی داریم: یکی سمت فرانت‌اند (با جاوااسکریپت) و یکی هم سمت بک‌اند (با زبان‌هایی مثل PHP). هر کدوم مزایا و معایب خودشون رو دارن که با هم بررسی می‌کنیم.

تبدیل اعداد انگلیسی به فارسی (از سمت فرانت‌اند)

این روش برای جاهایی مناسبه که می‌خوایم بدون نیاز به سرور، سرعت لود صفحه رو بالا ببریم و کاربر بلافاصله اعداد رو فارسی ببینه. بهترین ابزار برای این کار، جاوااسکریپته.

با جاوااسکریپت خالص (Vanilla JS)

اینجا یه تابع ساده و کارآمد برات آوردم که اعداد انگلیسی رو به فارسی تبدیل می‌کنه. این تابع هر رشته‌ای رو می‌گیره و تمام اعداد انگلیسی توش رو به معادل فارسی‌شون تغییر میده. می‌تونی مستقیماً تو اسکریپت‌هات ازش استفاده کنی.

برای کپی کد، روی آن کلیک کنید (یا کلیک کنید و بکشید).


function convertToPersianNumbers(str) {
    if (typeof str !== 'string' && typeof str !== 'number') {
        return str; // Return as is if not string or number
    }
    str = String(str); // Ensure it's a string

    const englishNumbers = ['0', '1', '2', '3', '4', '5', '6', '7', '8', '9'];
    const persianNumbers = ['۰', '۱', '۲', '۳', '۴', '۵', '۶', '۷', '۸', '۹'];

    for (let i = 0; i < 10; i++) {
        str = str.replace(new RegExp(englishNumbers[i], 'g'), persianNumbers[i]);
    }
    return str;
}

// مثال استفاده:
console.log(convertToPersianNumbers("12345.67"));   // خروجی: "۱۲۳۴۵.۶۷"
console.log(convertToPersianNumbers("تعداد: 85 عدد")); // خروجی: "تعداد: ۸۵ عدد"
console.log(convertToPersianNumbers(123));          // خروجی: "۱۲۳"
    

مزایا:

  • سرعت بالا: چون سمت کاربر اجرا میشه، نیازی به رفت و برگشت به سرور نداره و سریعه.
  • بار کمتر روی سرور: هیچ فشاری به سرور وارد نمیشه.
  • تجربه کاربری بی‌درنگ: کاربر بلافاصله اعداد رو بومی‌شده می‌بینه.

معایب:

  • وابستگی به جاوااسکریپت: اگه کاربر جاوااسکریپت رو غیرفعال کرده باشه (که البته خیلی نادر شده)، کار نمی‌کنه.
  • امنیت: اگه قرار باشه اعداد تبدیل‌شده برای پردازش‌های مهم به سرور فرستاده بشن، باید حتماً سمت سرور اعتبارسنجی و تبدیل مجدد به انگلیسی انجام بشه.

استفاده از کتابخانه‌ها و پلاگین‌ها

برای پروژه‌های بزرگ‌تر و نیازهای پیچیده‌تر، مثلاً تبدیل تاریخ‌های میلادی به شمسی و فارسی‌سازی همزمان اعداد، می‌تونی از کتابخانه‌هایی مثل Moment.js (البته دیگه توسعه فعال نداره و بهتره از جایگزین‌هاش استفاده کنی) یا Jalaali.js که برای تقویم شمسی محبوبیت زیادی داره، استفاده کنی. این کتابخانه‌ها معمولاً توابع آماده‌ای برای تبدیل اعداد هم دارن و کار رو برات راحت‌تر می‌کنن. اگه خواستی یه نگاهی به کدهای آماده و اسنیپت‌های مربوط به تقویم شمسی بندازی، اینجا می‌تونی پیداشون کنی.

تبدیل اعداد انگلیسی به فارسی (در بک‌اند)

این روش زمانی استفاده میشه که بخوایم مطمئن باشیم اعداد همیشه به فرمت فارسی نمایش داده میشن، حتی اگه کاربر جاوااسکریپت رو غیرفعال کرده باشه. یا مثلاً اگه داریم یه فایل PDF تولید می‌کنیم که جاوااسکریپت توش اجرا نمیشه. PHP یکی از محبوب‌ترین زبان‌ها برای بک‌انده و یه راه‌حل قوی برای این کار ارائه میده.

با PHP: راه‌حلی قدرتمند و سرورمحور

PHP به ما اجازه میده قبل از اینکه اطلاعات به سمت مرورگر کاربر فرستاده بشن، تبدیل رو انجام بدیم. این تابع هم مثل نمونه جاوااسکریپت، یه رشته یا عدد رو می‌گیره و اعداد انگلیسی توش رو به فارسی تبدیل می‌کنه.

برای کپی کد، روی آن کلیک کنید (یا کلیک کنید و بکشید).


function convertToPersianNumbers($str) {
    if (!is_string($str) && !is_numeric($str)) {
        return $str; // Return as is if not string or number
    }
    $str = (string)$str; // Ensure it's a string

    $englishNumbers = ['0', '1', '2', '3', '4', '5', '6', '7', '8', '9'];
    $persianNumbers = ['۰', '۱', '۲', '۳', '۴', '۵', '۶', '۷', '۸', '۹'];

    return str_replace($englishNumbers, $persianNumbers, $str);
}

// مثال استفاده:
echo convertToPersianNumbers("12345.67");   // خروجی: "۱۲۳۴۵.۶۷"
echo convertToPersianNumbers("تعداد: 85 عدد"); // خروجی: "تعداد: ۸۵ عدد"
echo convertToPersianNumbers(123);          // خروجی: "۱۲۳"
    

مزایا:

  • اعتبار بالا: چون روی سرور اجرا میشه، همیشه مطمئنی که تبدیل اتفاق می‌افته.
  • استقلال از کلاینت: به تنظیمات مرورگر کاربر وابسته نیست.
  • امنیت: برای خروجی‌های حساس مثل گزارشات مالی یا PDFها که نیاز به دقت دارن، مناسبه.

معایب:

  • بار روی سرور: در حجم بالای درخواست‌ها، ممکنه کمی به سرور فشار بیاره.
  • زمان پاسخ‌گویی: ممکنه کمی به زمان لود صفحه اضافه کنه، البته این مقدار معمولاً ناچیزه.

پایتون، نود.جی‌اس و سایر زبان‌ها

اگه با پایتون، Node.js، روبی یا هر زبان بک‌اند دیگه‌ای کار می‌کنی، جای نگرانی نیست. همین منطق جایگزینی کاراکترها رو می‌تونی با توابع مختص اون زبان پیاده‌سازی کنی. معمولاً همه زبان‌ها توابعی مشابه `str_replace` در PHP یا `replace` در جاوااسکریپت دارن. فقط کافیه آرایه‌های اعداد انگلیسی و فارسی رو تعریف کنی و بعد با یک حلقه یا تابع جایگزینی، تبدیل رو انجام بدی.

تبدیل اعداد فارسی به انگلیسی (برای دیتابیس و پردازش)

حالا که اعداد رو فارسی کردیم، ممکنه نیاز داشته باشیم که ورودی‌های فارسی کاربر رو به انگلیسی تبدیل کنیم تا بتونیم توی دیتابیس ذخیره کنیم یا روشون عملیات ریاضی انجام بدیم. دیتابیس‌ها و توابع ریاضی معمولاً با اعداد انگلیسی (۰-۹) راحت‌تر کار می‌کنن.

در جاوااسکریپت

وقتی کاربر یه عدد رو به فارسی وارد می‌کنه (مثلاً تو یه فرم)، می‌تونیم قبل از فرستادن به سرور، اون رو با جاوااسکریپت به انگلیسی تبدیل کنیم.

برای کپی کد، روی آن کلیک کنید (یا کلیک کنید و بکشید).


function convertToEnglishNumbers(str) {
    if (typeof str !== 'string' && typeof str !== 'number') {
        return str;
    }
    str = String(str);

    const persianNumbers = ['۰', '۱', '۲', '۳', '۴', '۵', '۶', '۷', '۸', '۹'];
    const englishNumbers = ['0', '1', '2', '3', '4', '5', '6', '7', '8', '9'];

    for (let i = 0; i < 10; i++) {
        str = str.replace(new RegExp(persianNumbers[i], 'g'), englishNumbers[i]);
    }
    return str;
}

// مثال استفاده:
console.log(convertToEnglishNumbers("۱۲۳۴۵.۶۷")); // خروجی: "12345.67"
console.log(convertToEnglishNumbers("تاریخ: ۱۴۰۲/۰۵/۲۳")); // خروجی: "تاریخ: 1402/05/23"
    

در PHP

بهترین کار اینه که تبدیل فارسی به انگلیسی رو سمت سرور انجام بدی، چون امنیت و یکپارچگی داده‌ها رو تضمین می‌کنه. اگه جاوااسکریپت کاربر غیرفعال باشه یا حتی اگه یه ربات بخواد اطلاعاتی رو با اعداد فارسی بفرسته، PHP می‌تونه قبل از هر پردازشی، اونا رو استاندارد کنه.

برای کپی کد، روی آن کلیک کنید (یا کلیک کنید و بکشید).


function convertToEnglishNumbers($str) {
    if (!is_string($str) && !is_numeric($str)) {
        return $str;
    }
    $str = (string)$str;

    $persianNumbers = ['۰', '۱', '۲', '۳', '۴', '۵', '۶', '۷', '۸', '۹'];
    $englishNumbers = ['0', '1', '2', '3', '4', '5', '6', '7', '8', '9'];

    return str_replace($persianNumbers, $englishNumbers, $str);
}

// مثال استفاده:
echo convertToEnglishNumbers("۱۲۳۴۵.۶۷"); // خروجی: "12345.67"
echo convertToEnglishNumbers("تاریخ: ۱۴۰۲/۰۵/۲۳"); // خروجی: "تاریخ: 1402/05/23"
    

جدول مقایسه روش‌های تبدیل: کدوم رو انتخاب کنم؟

خب، حالا که با روش‌های مختلف آشنا شدی، ممکنه این سوال برات پیش بیاد که در هر سناریو بهتره از کدوم استفاده کنی. این جدول کمکت می‌کنه تا تصمیم درستی بگیری:

ویژگی توضیحات
مکان اجرا فرانت‌اند (جاوااسکریپت) یا بک‌اند (PHP)
مناسب برای
  • JS: نمایش سریع به کاربر، فرم‌های تعاملی
  • PHP: ذخیره‌سازی در دیتابیس، گزارش‌گیری، خروجی‌های PDF، تضمین نمایش
میزان بار سرور
  • JS: صفر
  • PHP: کم تا متوسط (بسته به حجم تبدیل)
پشتیبانی آفلاین
  • JS: بله (در صورت کش شدن فایل اسکریپت)
  • PHP: خیر (نیاز به سرور)

نکات طلایی و بهترین شیوه‌ها در تبدیل اعداد

فقط تبدیل کردن اعداد کافی نیست. باید حواست به چند تا نکته مهم هم باشه تا کدت واقعاً بدون ایراد باشه و تو هر سناریویی درست کار کنه.

اهمیت کاراکترهای اعشاری و جداکننده‌ها

در زبان‌های مختلف، جداکننده اعشار و جداکننده هزارگان متفاوته. مثلاً در انگلیسی “1,234.50” داریم، در حالی که در بعضی کشورها “1.234,50” استفاده میشه. در فارسی معمولاً از “۱۲۳۴.۵۰” (نقطه برای اعشار و بدون جداکننده هزارگان در نمایش ساده) یا “۱,۲۳۴.۵۰” (کاما برای جداکننده هزارگان) استفاده می‌کنیم. توابع بالا فقط ارقام رو تبدیل می‌کنن و به کاراکترهای مثل نقطه یا کاما دست نمی‌زنن. اگه نیاز به تبدیل فرمت کامل عدد داری (مثلاً از “1,234.50” انگلیسی به “۱,۲۳۴.۵۰” فارسی)، باید قبل از تبدیل ارقام، کاراکترهای جداکننده رو هم با توجه به استاندارد فارسی تنظیم کنی.

نکته: برای مبالغ مالی یا اعداد با اعشار زیاد، ممکنه نیاز داشته باشی که ابتدا عدد رو به یک فرمت استاندارد مثل `float` یا `decimal` تبدیل کنی، بعد عملیات ریاضی رو انجام بدی و در نهایت برای نمایش، با استفاده از توابع فرمتینگ (مثل `number_format` در PHP یا `toLocaleString` در جاوااسکریپت) و توابع تبدیل اعداد، اون رو به شکل دلخواه فارسی دربیاری.

مدیریت اعداد منفی و فرمت‌های پیچیده

توابع ما به خوبی اعداد منفی رو هم پشتیبانی می‌کنن، چون فقط ارقام رو جایگزین می‌کنن و به علامت منفی (‘-‘) دست نمی‌زنن. مثلاً “-123” تبدیل میشه به “-۱۲۳”. اما اگه با فرمت‌های پیچیده‌تری مثل اعداد علمی (مثل “1.23e+5”) یا درصدها (“50%”) سر و کار داری، توابع فعلی فقط ارقام رو تغییر میدن و بقیه کاراکترها رو دست‌نخورده نگه می‌دارن. این معمولاً همون چیزیه که میخوایم، چون علامت‌های خاص مثل ‘e’ یا ‘%’ باید همونطور که هستن بمونن.

عملکرد (Performance) در حجم بالای داده

توابعی که اینجا معرفی شد، برای اکثر سناریوها بهینه و سریع هستن. استفاده از `replace` با `RegExp` (برای جاوااسکریپت) یا `str_replace` (برای PHP) به صورت داخلی بهینه شده و سرعت بالایی داره.
اما اگه داری هزاران یا میلیون‌ها عدد رو در لحظه تبدیل می‌کنی، ممکنه نیاز به رویکردهای بهینه‌تری داشته باشی. مثلاً در PHP می‌تونی از توابعی مثل `mb_convert_kana` (اگر افزونه `mbstring` فعال باشه) یا ساخت یک میکروکش برای نتایج تبدیل‌شده استفاده کنی.

مسئله یونی‌کد و چالش‌های نمایش

اعداد فارسی بخشی از استاندارد یونی‌کد هستن و برای نمایش صحیحشون باید مطمئن بشی که:

  • انکودینگ صفحه: صفحه وب‌سایتت باید از UTF-8 استفاده کنه. (معمولاً با `<meta charset=”UTF-8″>` تو تگ `head`).
  • فونت: فونتی که برای نمایش متن استفاده می‌کنی (مثل فونت‌های فارسی استاندارد مثل ایران سنس یا وزیر) باید کاراکترهای فارسی رو پشتیبانی کنه. در غیر این صورت، ممکنه اعداد به شکل مربع یا کاراکترهای نامفهوم نمایش داده بشن.
  • جهت متن (RTL): برای وب‌سایت‌های فارسی، `direction: rtl;` خیلی مهمه. این کار باعث میشه اعداد هم به درستی در کنار متن فارسی قرار بگیرن.

عیب‌یابی سریع: مشکلات رایج و راه حل‌ها

گاهی اوقات با اینکه کد رو درست کپی کردی، بازم اعداد به درستی تبدیل نمیشن یا چیزای عجیب غریب می‌بینی. بیا چند تا از مشکلات رایج و راه حلشون رو بررسی کنیم:

مشکل: اعداد بعد از تبدیل به شکل مربع یا علامت سوال نشون داده میشن.

راه حل: این مشکل معمولاً به خاطر پشتیبانی نکردن فونت از کاراکترهای فارسی یا عدم تنظیم صحیح انکودینگ (UTF-8) صفحه‌ست. مطمئن شو که:

  • تگ “ رو توی `<head>` صفحه‌ات داری.
  • از یک فونت فارسی استاندارد (مثل Vazirmatn، Iran Sans) استفاده می‌کنی که شامل کاراکترهای اعداد فارسی باشه.
  • در PHP، مطمئن شو که فایل‌های سورس PHP با UTF-8 ذخیره شدن.

مشکل: فقط بخشی از اعداد تبدیل میشن یا اصلاً تبدیل اتفاق نمی‌افته.

راه حل:

  • نوع ورودی: مطمئن شو که ورودی تابع، یک `string` یا `number` هست. توابع ما بررسی می‌کنند، اما اگه ورودی چیز دیگه‌ای باشه (مثلاً `null` یا `undefined` بدون `toString` شدن)، تبدیل انجام نمیشه.
  • اسکوپ و زمان اجرا (جاوااسکریپت): اگه داری کد جاوااسکریپت رو می‌نویسی، مطمئن شو که تابع رو بعد از بارگذاری کامل DOM اجرا می‌کنی (مثلاً داخل `DOMContentLoaded` یا آخر بدنه `<body>`).
  • کش (Cache): اگه داری تغییرات رو روی سرور اعمال می‌کنی، ممکنه کش مرورگر یا کش سرور باعث بشه تغییرات رو نبینی. یک‌بار کش رو پاک کن و دوباره امتحان کن.

مشکل: اعداد تبدیل میشن، ولی ترتیب نمایششون (مثلاً در تاریخ) به هم می‌ریزه.

راه حل: این مشکل معمولاً مربوط به جهت‌دهی (Direction) متن میشه. اگه متن اصلی انگلیسی باشه و اعداد فارسی بشن، ممکنه مرورگر تو نمایش دچار چالش بشه. برای حل این مسئله، مطمئن شو که تگ `<html>` یا حداقل کانتینری که اعداد رو نشون میده، خاصیت `dir=”rtl”` رو داشته باشه:


<html lang="fa" dir="rtl">
    <!-- یا در یک دیو خاص -->
    <div style="direction: rtl;">این یک متن فارسی است با اعداد ۱۲۳</div>
</html>
        

کلام آخر: تبدیل اعداد، پلی برای تجربه کاربری بهتر

خب رفیق، رسیدیم به آخر خط. دیدی که تبدیل اعداد انگلیسی به فارسی و بالعکس کار پیچیده‌ای نیست، فقط باید بدونی از چه ابزاری و کجا استفاده کنی. چه با جاوااسکریپت بخوای سمت فرانت‌اند کار رو رند کنی، چه با PHP بخوای یه خروجی مطمئن و سرورمحور داشته باشی، کدهای لازم رو اینجا پیدا کردی. هدف اصلی از همه این کارا، ارتقاء تجربه کاربریه. وقتی کاربر حس کنه سایتت واقعاً برای اون طراحی شده و به نیازهاش توجه شده، اعتمادش بیشتر میشه و بیشتر بهت سر می‌زنه. پس این کارای کوچیک رو دست کم نگیر! همیشه یادت باشه، اگه جایی نیاز به کمک داشتی یا سوالی برات پیش اومد، ما کنارتیم. موفق باشی!

سوالات متداول (FAQ)

چرا باید اعداد رو در وب‌سایت‌های فارسی‌زبان تبدیل کنیم؟

تبدیل اعداد انگلیسی به فارسی باعث افزایش خوانایی، بومی‌سازی رابط کاربری و بهبود تجربه کاربری برای مخاطبان فارسی‌زبان میشه. این کار حس نزدیکی و توجه به نیازهای فرهنگی کاربر رو منتقل می‌کنه.

بهترین روش برای تبدیل اعداد انگلیسی به فارسی چیه؟

بهترین روش بستگی به نیاز پروژه داره:

  • جاوااسکریپت: برای نمایش سریع و بدون بار سرور در فرانت‌اند.
  • PHP (یا سایر زبان‌های بک‌اند): برای اطمینان از تبدیل در سمت سرور، ذخیره‌سازی در دیتابیس و تولید خروجی‌هایی مثل PDF.

آیا توابع تبدیل، کاراکترهای اعشاری یا جداکننده هزارگان رو هم تغییر میدن؟

خیر، توابع ارائه شده در این مقاله فقط ارقام (۰ تا ۹) رو تبدیل می‌کنن و به کاراکترهایی مثل نقطه یا کاما دست نمی‌زنن. اگه نیاز به فرمت‌بندی کامل اعداد با اعشار و جداکننده هزارگان داری، باید قبل یا بعد از تبدیل ارقام، از توابع مخصوص فرمت‌بندی اعداد (مثل `number_format` در PHP) استفاده کنی.

آیا این کدها برای موبایل و تبلت هم مناسب هستن؟

بله، کدهای جاوااسکریپت و PHP مستقل از دستگاه هستن و در هر پلتفرمی (موبایل، تبلت، لپ‌تاپ یا حتی تلویزیون) که مرورگر یا سرور رو پشتیبانی کنه، کار می‌کنن. چیدمان و نمایش بصری این مقاله هم با استفاده از ساختارهای HTML استاندارد و ساده طراحی شده که به طور طبیعی در ابعاد مختلف صفحه نمایش، رسپانسیو و خوانا باشد.

چرا اعداد فارسی من مربع یا نامفهوم نمایش داده میشن؟

این مشکل معمولاً به خاطر اینه که فونت مورد استفاده‌ات از کاراکترهای اعداد فارسی پشتیبانی نمی‌کنه یا انکودینگ صفحه‌ات (charset) روی UTF-8 تنظیم نشده. مطمئن شو که فونتت استاندارد فارسی باشه و “ رو در `<head>` صفحه‌ات قرار داده باشی.

دیدگاهتان را بنویسید

نشانی ایمیل شما منتشر نخواهد شد. بخش‌های موردنیاز علامت‌گذاری شده‌اند *