PDA

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



meysam_meysam74
پنج شنبه 25 آذر 1389, 23:11 عصر
سلام من یه برنامه نوشتم که تویه فارسی کردن اعداد داخل تکس باکسش مشکل دارم اگه راست به چپ کنم فارسی میشه ولی فرمت نوشته برعکس میشه میخواستم بدونم راهی هست که تکس باکس از چپ به راست باشه و فارسی باشه ؟

milad.biroonvand
جمعه 26 آذر 1389, 14:45 عصر
میتونی از textalign استفاده کنی و کاری به right to left نداشته باشی .

textalign خودش شش حالت داره ، اگه اسمشو درست گفته باشم.

meysam_meysam74
جمعه 26 آذر 1389, 15:06 عصر
والا قبلا تست کردم نشد
ببین برای این که من بتونم اعداد رو فارسی کنم تویه یه تکس باکس میام right to left رو عوض میکنم به این شکل اعداد فارسی میشن ولی مشکل اینه که اعدا از سمت راست نوشته میشن به عنوان مثلا
1365/9/17 میشه 17/9/1365 حالا اگه الیگین رو هم عوض کنم فرقی نمیکنه بازم جاش عوض میشه ولی میچسبه به سمت راست کلا باید بدونه این که مثلا right to left رو عوض کنیم یه راهی باشه مثلا استفاده کردن از یه فنت خاص یا نمیدونم یه چیزی دیگه
خوب این همه برنامه فارسی تویه ایران ساخته میشه اونا چه کار میکنن اخه ! من هر برنامه فاسی رو که میبینم اعداد فارسی هست توش !

omid-vbAuto
جمعه 26 آذر 1389, 15:12 عصر
میتونی از textalign استفاده کنی و کاری به right to left نداشته باشی .

textalign خودش شش حالت داره ، اگه اسمشو درست گفته باشم.

میلاد جون textalign رو از کجا بیارم و استفاده کنیم؟

mansourii
جمعه 26 آذر 1389, 16:30 عصر
سلام/ برای فارسی کردن فونتها در پروژه معمولا اینطور استفاده نمیکنن
چون ما فارسی زبان هستیم برنامه ای که به مشتری ارائه میدید (اگه برنامه صنعتی یا تجاری هست) باید کلا فارسی باشه.
برای همین معمولا یک دسته 10 تایی یا بیشتر برای برنامه تعریف میکنند که تا هنگامی که برنامه لود میشه برنامه اعداد و ارقام فارسی داشته باشه.
ولی یه مشکل بزرگ داره/اگه فونت حذف بشه برنامه شما کج و کوله نمایش داده میشه.
برای این که این مشکل هم بوجود نیاد وقتی دارید برنامه setup رو درست میکنید یک پکیج فارسی رو به برنامه معرفی کنید.

روش های دیگه ای هم هست مثل یک کیبورد مجازی در برنامه ولی وقت تیم رو میگیره کسایی از این روش استفاده میکنن که سورسش رو از قبل داشته باشن/اگه از این روش استفاده بشه مشکل حذف شدن رو نداریم

meysam_meysam74
جمعه 26 آذر 1389, 20:45 عصر
یعنی شما میگید باید از فونت های مریم یا همون f_ شروع میشه استفاده کنم یا بافونت فارسی مثلا چی اخه یه مثال میزنی از فونت
یا همون کی بردی که میگی چه جوری هست نمونه نداری ؟

Reza,M
شنبه 27 آذر 1389, 00:02 صبح
با سلام
دوست عزيز كد زير رو در قسمت Form1_Load فرمت بنويس

Dim i As New System.Globalization.CultureInfo("fa-ir")
InputLanguage.CurrentInputLanguage = InputLanguage.FromCulture(i)
TextBox1.TextAlign = HorizontalAlignment.Right

meysam_meysam74
شنبه 27 آذر 1389, 12:39 عصر
سلام عزیز کد جالبی بود ولی فرقی با حالتی که من توش مشکل دارم نکرد مثله همون عوض کردن تکس الیگین می مونه فکر کنم تنها راهش همون فونت باشه
کد شما رویه MaskedTextBox1 جواب نمیده بازم راست چین میکنه اعداد رو یعنی اعدد از سمت چپ به فارسی شروع نمیشه از سمت راست به چپ به فارسی شروع میشه من برای کد ملی میخواستم البته جا های دیگه هم مثله تاریخ هم مشکل دارم
نمیدونم فکر کنم باید بگردم دونبال فونت های خاص
بازم از شما ممنون بابت جوابتون

mansourii
شنبه 27 آذر 1389, 13:24 عصر
سلام/برای اینکه تاریخ یا کلمات شما درست بشه نیازی به کد نویسی نیست/گفتم برای اینکه این مشکلات حل بشه از فونت های خاص مثل B استفاده میکنید/
وقتی ویندوز عوض کردید بدون اینکه فونت فارسی نصب کنید برنامه شما فارسیه و به راحتی کار میکنه.
برنامه شما با کلمات فارسی دیگه مشکل نداره مثل کلمه " گاز " رو " ...از " نمینویسه.
فقط کافی وقتی دارید Setup نصب میکنید
10 تا فونت (پکیج فارسی) رو بگید به مسیر Windows:/windows/font ویندوز قرمز رنگ محل نصب ویندوز است مثلا درایو C
همین اصلا کار سختی نیست و نیاز به کد نویسی نداره./ با این کار وقتی می خواید برنامه رو نصب کنید فونت ها نصب میشن و برنامه شما دقیق کار میکنه
اگه مشکلی بود بگید تا آموزش تصویری Setup سازی رو براتون بذارم.:چشمک:

meysam_meysam74
شنبه 27 آذر 1389, 15:45 عصر
اره دوست عزیز مشکلم حل شد فونت سری b رو داشتم و نصب کردم و از اون تویه برنامه استفاده کردم حالا دیگه حتی تویه حالت معمولی که رایت تو لفت سمت راست هست هم فارسی میمونه
ممنون

ali.hojjati
شنبه 27 آذر 1389, 15:56 عصر
عزیز جان این کار راه حلی جز استفاده کردن از فونت هایی که فقط کد پیج فارسی دارن ممکن نیست. برای این کار اگر نمی خواهید راست به چپش کنید می بایست از فونت هایی مانند گروه ipt یا فونت های فارسی نویس های دیگر استفاده کنید. در کاراکتر فرقی نداره یعنی همون عدد استفاده می شه. اگه حل نشد بگو.

MEhdi Sobhani
شنبه 27 آذر 1389, 15:59 عصر
سلام
از این تابع استفاده کنید که از یونیکود استفاده میکنه . نه احتیاج به فونت خاصی داره نه لوکالیزین خاصی و نه چپ چین راست چین و ...



public string EnglishToArabicNo(string sIn)
{
System.Text.UTF8Encoding enc = new System.Text.UTF8Encoding();
System.Text.Decoder utf8Decoder;
utf8Decoder = enc.GetDecoder();
System.Text.StringBuilder sTranslated = new System.Text.StringBuilder();
char[] cTransChar = new char[1];
byte[] bytes = new byte[2] { 217, 160 };
char[] aChars = sIn.ToCharArray();
foreach (char c in aChars)
{
if (Char.IsDigit(c))
{
bytes[1] = (byte)(160 + (int)(Char.GetNumericValue(c)));
utf8Decoder.GetChars(bytes, 0, 2, cTransChar, 0);
sTranslated.Append(cTransChar[0]);
}
else
{
sTranslated.Append(c);
}
}
sTranslated.Replace('.', '/');
return sTranslated.ToString();
}



موفق باشید .

meysam_meysam74
یک شنبه 28 آذر 1389, 12:55 عصر
دوست عزیز کل شما خیلی عالی بود فقط یه بدی داشت اونم اینه که دیگه اعدا ماهیت خودشونو به عنوان اعدد از دست میدن خودتون راه حلی برای این مشکل دارید
جسارتا کدتونو به ویبی بردم که دوستان دیگه هم بتونن استفاده کنن

Private Function EnglishToArabicNo(ByVal sIn As String) As String
Dim enc As System.Text.UTF8Encoding = New System.Text.UTF8Encoding()
Dim utf8Decoder As System.Text.Decoder
utf8Decoder = enc.GetDecoder()
Dim sTranslated As System.Text.StringBuilder = New System.Text.StringBuilder()
Dim cTransChar(1) As Char
Dim bytes As Byte() = {217, 160}
Dim aChars() As Char = sIn.ToCharArray()
Dim C As Char
For Each C In aChars
If (Char.IsDigit(C)) Then
bytes(1) = CByte((160 + CInt((Char.GetNumericValue(C)))))
utf8Decoder.GetChars(bytes, 0, 2, cTransChar, 0)
sTranslated.Append(cTransChar(0))
Else
sTranslated.Append(C)
End If
Next
sTranslated.Replace(".", "/")
Return sTranslated.ToString()
End Function
علی جان روش شما هم خوب هست با روش شما دیگه مشکل اعدا رو نداریم دوستان تویه پست های قبلی هم به روش شما اشاره کردن ولی مشکل روشه شما اینه که حتما باید یه فونت جا به جا بشه

MEhdi Sobhani
یک شنبه 28 آذر 1389, 14:45 عصر
دوست عزیز کل شما خیلی عالی بود فقط یه بدی داشت اونم اینه که دیگه اعدا ماهیت خودشونو به عنوان اعدد از دست میدن خودتون راه حلی برای این مشکل دارید
جسارتا کدتونو به ویبی بردم که دوستان دیگه هم بتونن استفاده کنن

Private Function EnglishToArabicNo(ByVal sIn As String) As String
Dim enc As System.Text.UTF8Encoding = New System.Text.UTF8Encoding()
Dim utf8Decoder As System.Text.Decoder
utf8Decoder = enc.GetDecoder()
Dim sTranslated As System.Text.StringBuilder = New System.Text.StringBuilder()
Dim cTransChar(1) As Char
Dim bytes As Byte() = {217, 160}
Dim aChars() As Char = sIn.ToCharArray()
Dim C As Char
For Each C In aChars
If (Char.IsDigit(C)) Then
bytes(1) = CByte((160 + CInt((Char.GetNumericValue(C)))))
utf8Decoder.GetChars(bytes, 0, 2, cTransChar, 0)
sTranslated.Append(cTransChar(0))
Else
sTranslated.Append(C)
End If
Next
sTranslated.Replace(".", "/")
Return sTranslated.ToString()
End Functionعلی جان روش شما هم خوب هست با روش شما دیگه مشکل اعدا رو نداریم دوستان تویه پست های قبلی هم به روش شما اشاره کردن ولی مشکل روشه شما اینه که حتما باید یه فونت جا به جا بشه
سلام
ممنون . البته این کد رو من ننوشتم ، قبلا سرچ کرده بودم آماده پیدا کرده بودم .
میتونید همین تابع رو تغییر بدید تا کار عکسش رو هم انجام بده و یونیکود فارسی رو به معادل عدد انگلیسی تبدیل کنه .
پ ن : این تابع ممیز --> . رو هم به ممیز عربی یعنی --> / تبدیل میکنه .