PDA

View Full Version : فارسی شدن اعداد



mina1363
جمعه 16 مرداد 1388, 07:07 صبح
سلام دوستان
ویندوز من فارسی است برای همین اعدادی که تو برنامه ام مینویسم فارسی است حالا وقتی برنامه ام را روی یه سیستم دیگه اجرا میکنم اعداد انگلیسی میشن باید چکارکنم که اعداد در همه سیستم ها فارسی باشه؟

afsharm
جمعه 16 مرداد 1388, 09:19 صبح
‫کد یونیکد اعداد انگلیسی با اعداد فارسی فرق دارند. مثلا کد عدد 1 انگلیسی (http://www.fileformat.info/info/unicode/char/0031/index.htm) برابر است با U+0031 (هگزا دسیمال) و کد عدد ۱ فارسی (http://www.fileformat.info/info/unicode/char/06F1/index.htm)برابر است با U+06F1. در مورد مشکل شما معمولا اعداد را به صورت رشته‌ای نمایش داده و قبل از نمایش آنها را با کدی مثل کد زیر تبدیل می‌کنند:‬

public static string ConvertToFarsi(string str)
{


if (string.IsNullOrEmpty(str)) str = string.Empty;

return str.Replace('0', '۰').Replace('1', '۱').Replace('2', '۲').Replace('3', '۳').Replace('4', '۴').Replace('5', '۵').Replace('6', '۶').Replace('7', '۷').Replace('8', '۸').Replace('9', '۹').Replace('.', '٫').Replace(',', '٬');
}



‫اگر جفت اعداد موجود در هر Replace را به صورت فارسی می‌بینید به خاطر Regional Settings ویندوزتان است. و الا من آنها را به دو صورت فارسی و انگلیسی تایپ کرده‌ام.
برای آشنایی بیشتر با کد اعداد فارسی و انگلیسی به ابزارک فردیس (http://fardis.codeplex.com) مراجعه فرمایید.

Unknownlive
جمعه 16 مرداد 1388, 09:50 صبح
خوب نمی شه از روش محلی سازی استفاده کزد ؟ از کلاس Cultureinfo استفاده کن.

asefy2008
جمعه 16 مرداد 1388, 10:19 صبح
char[] myCharArrayOfDate = EnglishString.Tostring().ToCharArray();
for (int i = 0; i < myCharArrayOfDate.Length; i++)
{
if (myCharArrayOfDate[i] >= 0x30 && myCharArrayOfDate[i] < 0x3A)
{
myCharArrayOfDate[i] = Convert.ToChar(myCharArrayOfDate[i] + 0x660 - 0x30);
}
}
string myPersianDateInFarsiCharacters = "";
for (int i = 0; i < myCharArrayOfDate.Length; i++)
{
myPersianDateInFarsiCharacters += myCharArrayOfDate[i].ToString();
}

mina1363
جمعه 16 مرداد 1388, 10:27 صبح
دوستان عزیز این متدها و روشهایی رو که گفتید باید در ایونت keypress بنویسم؟ اگر نه کجا؟

asefy2008
جمعه 16 مرداد 1388, 14:44 عصر
بستگی داره شما چه زمانی می خواهید رشتتون رو فارسی کنید .
EnglishString رشته ای هست که شما به برنامه میدی .
می تونی به عنوان تابع یا هرجوری که خودتون لازم دارید ازش استفاده کنید.
موفق باشید

hojjat_gh
جمعه 16 مرداد 1388, 15:12 عصر
سلام دوستان
ویندوز من فارسی است برای همین اعدادی که تو برنامه ام مینویسم فارسی است حالا وقتی برنامه ام را روی یه سیستم دیگه اجرا میکنم اعداد انگلیسی میشن باید چکارکنم که اعداد در همه سیستم ها فارسی باشه؟
با سلام
با اجازه از اساتید:
سوال:ایا به جز روشهای کد نویسی از طریق تنظیمات ویندوز مشکل حل نمیشه ؟
اینکه تو سیستم کاربر تو مسیر زیر location ایران باشه و زبان سیستم هم فارسی باشه :
control pael>>regional and language>>reginal option
البته این فقط یه نظر بود

keivan mousavi
جمعه 16 مرداد 1388, 15:43 عصر
با سلام
با اجازه از اساتید:
سوال:ایا به جز روشهای کد نویسی از طریق تنظیمات ویندوز مشکل حل نمیشه ؟
اینکه تو سیستم کاربر تو مسیر زیر location ایران باشه و زبان سیستم هم فارسی باشه :
control pael>>regional and language>>reginal option
البته این فقط یه نظر بود

به نظر من این کار کاملاً علمی و درسته من تا حالا چند بار این کدهارو روی سیستمهای مختلف امتحان کردم ولی بیشترشون مشکل داشتن تنها راهی که میشه خوب جواب گرفت همین کاره

Amir Oveisi
جمعه 16 مرداد 1388, 19:18 عصر
یک روش دیگه اینه که از فونت های فارسی استفاده کنید و این فونت ها رو بصورت Embed شده در برنامه همراه با برنامه منتقل کنید. در این صورت در همه سیستم هایی که قابلیت تایپ فارسی داشته باشه اعداد در برنامه شما بصورت فارسی نشون داده میشن.

موفق باشید.

Sociant
جمعه 16 مرداد 1388, 22:48 عصر
متدی که من واسه کارام استفاده میکنم :



private string ConvertToPersianDigit(string date)
{
date = date.Replace('1', '۱');
date = date.Replace('2', '۲');
date = date.Replace('3', '۳');
date = date.Replace('4', '۴');
date = date.Replace('5', '۵');
date = date.Replace('6', '۶');
date = date.Replace('7', '۷');
date = date.Replace('8', '۸');
date = date.Replace('9', '۹');
date = date.Replace('0', '۰');
return date;
}


شاید خیلی بهینه نباشه ولی جواب میده و بی دردسره ، همه جا هم جواب میده

mina1363
شنبه 17 مرداد 1388, 06:26 صبح
بله دوستان از راهنماییتون ممنونم

سوال:ایا به جز روشهای کد نویسی از طریق تنظیمات ویندوز مشکل حل نمیشه ؟
اینکه تو سیستم کاربر تو مسیر زیر location ایران باشه و زبان سیستم هم فارسی باشه :
control pael>>regional and language>>reginal option
البته این فقط یه نظر بود
باید عرض کنم که خیر این روش جواب نداده

یه مسئله دیگه دوست عزیز Sociant این کدی که شما گذاشتید php است میتونم تو C# ازش استفاده کنم؟

hozouri
شنبه 17 مرداد 1388, 07:18 صبح
دوست عزیز از فونتی بر روی کامپیوتر خودت استفاده می کنی بر روی کامپیوتر مقصد هم هست ؟؟؟
tahoma معمولاً روی همه سیستم ها است ...

من فکر کنم فونت روی اون کامپیوتر نصب نشده ...

Sociant
شنبه 17 مرداد 1388, 10:27 صبح
یه مسئله دیگه دوست عزیز Sociant این کدی که شما گذاشتید php است میتونم تو C# ازش استفاده کنم؟

بله ، من هم تو PHP و هم#C ازش استفاده کردم. توقسمت نمونه برنامه های کوچک با آی دی Sociant7 یه dll گذاشتم که کار تبدیل تاریخ میلادی به هجری رو انجام میده و داخلش از همین متد واسه تبدیل اعداد استفاده کردم

afsharm
جمعه 23 مرداد 1388, 18:38 عصر
یک روش دیگه اینه که از فونت های فارسی استفاده کنید و این فونت ها رو بصورت Embed شده در برنامه همراه با برنامه منتقل کنید. در این صورت در همه سیستم هایی که قابلیت تایپ فارسی داشته باشه اعداد در برنامه شما بصورت فارسی نشون داده میشن.

موفق باشید.

این راه غیر استاندارده و به هیچ وجه توصیه نمی‌شه.