سلام به همگی
من با استفاده از کدی که از توی مطالب قبلی پیدا کردم ، فرمم رو فارسی کردم ، اما هنوز اعداد رو انگلیسی نشون میده ، واسه اعداد باید چیکار کنم ؟؟
سلام به همگی
من با استفاده از کدی که از توی مطالب قبلی پیدا کردم ، فرمم رو فارسی کردم ، اما هنوز اعداد رو انگلیسی نشون میده ، واسه اعداد باید چیکار کنم ؟؟
خاصیت RightToLeft مربوط به TextBox را true کردی
1. زبان پیش فرض ویندوز رو فارسی کنی (جالب نیست)
2. از فونتهایی که اعداد فارسی دارند استفاده کنی
3. همین
باید در کنترل پنل در قسمت Reginal and language option, روک دکمه Customize کلید کنی سپس قسمت Digit substituation رو به Natioinal تغییر بدی
سلام
تلفیق کاری که کاربر iranrose63 و once4ever گفتند بدن شک مشکل را حل میکند!
یعنی هم RightToLeft کنید و هم فونت را از فونتهای خام فارسی انتخاب کنید، مثلاً Homa یا Titr و یا ... (یادتان نرود در زمان انتقال و یا تحویل برنامه در فرآیند setup احتمالی فونت مورد نظر را هم نصب کنید.)
اگه توی Setting پروژه Localization اونو فارسی کنید تمام Textboxها و Comboboxها و ...حتی MessageBoxها کاملا فارسی میشن
یک خبر خوب :-) کدش رو پیدا کردم!!!!!!!
یک TextBox با اعداد فارسی داشته باشید بدون کوچکترین تغییری در سیستم عامل و حتی نوع فونت!
نه تنظیمات سیستم رو میخواد دستکاری کنید نه فونت رو عوض کنید!
فقط یک خط کوچولو به برنامتون اضافه کنید...
در رویداد KeyPress کافیه که unicode اعداد انگلیسی رو به unicode اعداد فارسی تبدیل کنیم!
امیدوارم دوستانی که احتیاج داشتند، حالش رو ببرند :-)
private void textBox1_KeyPress(object sender, KeyPressEventArgs e)
{
if ((int)e.KeyChar >= 48 && (int)e.KeyChar < 58)
e.KeyChar = (char)(1632 + int.Parse(e.KeyChar.ToString()));
}
این Localization کجاست ؟ من پیداش نکردم.اگه توی Setting پروژه Localization اونو فارسی کنید تمام Textboxها و Comboboxها و ...حتی MessageBoxها کاملا فارسی میشن
زیاد خوشحال نباشیک خبر خوب :-) کدش رو پیدا کردم!!!!!!!
یک TextBox با اعداد فارسی داشته باشید بدون کوچکترین تغییری در سیستم عامل و حتی نوع فونت!
نه تنظیمات سیستم رو میخواد دستکاری کنید نه فونت رو عوض کنید!
فقط یک خط کوچولو به برنامتون اضافه کنید...
در رویداد KeyPress کافیه که unicode اعداد انگلیسی رو به unicode اعداد فارسی تبدیل کنیم!
امیدوارم دوستانی که احتیاج داشتند، حالش رو ببرند :-)
کد:
این مورد برای خیلی وقت پیش اما به دلیل یک مشکل بزرگی که داره (و قبلا هم تو همین فروم نوشتم) کاربرد نمیتونه داشته باشه ( مگه اینکه یکار دیگه هم بهش اضافه کنی) ;)
از توضیحات خوبتون ممنونم. :-) :موفق:زیاد خوشحال نباش
این مورد برای خیلی وقت پیش اما به دلیل یک مشکل بزرگی که داره
چون گفتید که قبلا بحث شده، جستجو زدم و بالاخره پست زیر رو تونستم پیدا کردم:
https://barnamenevis.org/showthread.php?t=53125
اگر منظورتون همون پست باشه، در اونجا یک دوستی کدی مثل کدهای من نوشته بود، با این تفاوت که Unicode عدد صفر رو از 1776 شروع کرده بود!! با کمال تعجب اینکه، کد ایشون روی سیستم من هم جواب داد!!!
ولی متاسفانه نفهمیدم این روش چه مشکلی داره؟ ممنون میشم کمی بیشتر توضیح بدید!؟
پشت کار خوبی دارید ;)ولی متاسفانه نفهمیدم این روش چه مشکلی داره؟ ممنون میشم کمی بیشتر توضیح بدید!؟
تو همون تاپیک صفحه دوم نگاه کنی نوشتم.
https://barnamenevis.org/showpo...3&postcount=12
کلا به دردسری که ایجاد میکنه نمیرزه ;) درحالیکه با یک فونت خاص (و ساده) میتونی فارسی داشته باشی بدون هیچ عملیات تبدیل.
امیدوارم نتیجه مثبت گرفته باشیم
ممنون
با سلام
من که آخر نفهمیدم مشکل این کدی رو که دوستمون گذاشته چیه . ضمنا اون Localization رو هم پیدا نکردم کجاست . موفق باشید
فهمیدم چرا اینطور شده، چون دو نوع unicode برای اعداد فارسی وجود داره.نوشته شده توسط PC2st.ir
unicode اعدادی که کد آنها از 1632 شروع شده، بعنوان Arabic Indic-Digit تلقی میشوند.
و unicode اعدادی که کد آنها از 1776 شروع شده، بعنوان Extended Arabic Indic-Digit تلقی میشوند.
و جالب اینکه، اگر فونت TextBox را روی Tahoma تنظیم کنیم، در اینصورت Style اعدادی که کد آنها از 1632 شروع شده با Style اعدادی که کد آنها از 1776 شروع میشود، فرق میکنه!
مثلا ٤ و ۴ که هر دو چهار هستند، ولی شکل ظاهری و Style آنها با هم فرق میکند.
راستی یک چیزی، شما اون دو عدد 4 رو بصورت فارسی خوندید.
خوب به کمک متد زیر، میشه اونها رو دوباره به رشته ای تبدیل کرد تا به راحتی اون رشته رو به عدد تبدیل کنیم!نوشته شده توسط once4ever
private string GetNumber()
{
string output="";
foreach (char ch in textBox1.Text.ToCharArray())
if ((int)ch >= 1632 && (int)ch < 1642)
output += ((int)((int)ch - 1632)).ToString();
return output;
}
البته من متد فوق رو خیلی حول حولکی نوشتم، ممکنه بشه از این Optimize تر هم نوشت.
آخرین ویرایش به وسیله PC2st : یک شنبه 28 مرداد 1386 در 16:35 عصر دلیل: ویرایش کد
فکر کنم منظورش از Localization همون Localizable از خاصیت فرم باشه...
فکر نمیکنم مشکل بخصوصی داشته باشه.نوشته شده توسط sm_ezadpanah
بله، درسته اگر فونت رو روی سیستم نصب نکنیم و در resource برنامه خودمون ذخیره بشه، فکر خوبیه. (فقط یک فونت مناسب هم باید داشت)نوشته شده توسط once4ever
آخرین ویرایش به وسیله PC2st : یک شنبه 28 مرداد 1386 در 15:58 عصر دلیل: یک پاسخ اضافه شد!
این Localization بالاخره چی شد ؟ من خاصیت Localizable فرم رو برابر با true کردم و از لیست Languages، گزینه ی persian رو انتخاب کردم، ولی نشد. مشکل کجاست ؟
الان VB دمه دستمه خودتون به C# تبدیل کنید
'تنظیم زبان برنامه به فارسی
Dim myculture As New Globalization.CultureInfo("fa-ir")
Dim mylanguage As InputLanguage
InputLanguage.CurrentInputLanguage = mylanguage.FromCulture(myculture)
این کد زبان سیستم رو به فارسی تغییر میده، اعداد فارسی نمیشوند.
این کار خوبه ولی فکر کردی اگه یکی توی اون textbox متنی رو Paste بکنه می خوای چی کار کنی پس این تا یه حدی بدرد می خوره
باید اینو توی TextChange بگذاری و توی اون تکتک کاراکتر ها رو چک کنی
برای پیاده سازی یک چنین TextBox ای به چندین و چند روش میشه عمل کرد، از این لحاظ کاملا موافقم که هر چیزی تا حدی به درد میخوره و همه چیز 100% که Useful نیستاین کار خوبه ولی فکر کردی اگه یکی توی اون textbox متنی رو Paste بکنه می خوای چی کار کنی پس این تا یه حدی بدرد می خوره
باید اینو توی TextChange بگذاری و توی اون تکتک کاراکتر ها رو چک کنی
برای اینکه وقتی کاربر خواست کپی و Paste کنه، مثلا:
private void textBox1_KeyPress(object sender, KeyPressEventArgs e)
{
if (char.IsDigit(e.KeyChar))
e.KeyChar = (char)(1632 + int.Parse(e.KeyChar.ToString()));
else if ((int)e.KeyChar == 22)
{
string txt = Clipboard.GetText();
if (txt != "")
Clipboard.SetText(ToPersianNumbers(txt), TextDataFormat.UnicodeText);
}
}
private string ToPersianNumbers(string text)
{
string output = "";
foreach (char ch in text.ToCharArray())
if (char.IsDigit(ch))
output += (char)(int.Parse(ch.ToString()) + 1632);
else
output += ch.ToString();
return output;
}
کد فوق هم از عاری از ضرر نیست، چون:
- کاربر با کلیک راست میتونه عملیات کپی و Paste اش رو انجام بده بدون اینکه برنامه ما متوجه بشه!
- Clipboard دستکاری میشه، و اعداد داخل کلیپ بورد فارسی میشه.
ولی بازهم میشه کاری کرد که احتیاجی به تغییرات در Clipboard نباشه (باید از رویداد های دیگه کمک گرفت)، حالا ممکنه بگید خوب این چه کاریهاز رویداد TextChanged استفاده میکردی و این دردسرها هم نداشتی؟ ولی اگر بخوایم عمل تبدیل رو در رویداد TextChanged بنویسیم، هر چه متنی که کاربر وارد میکنه بیشتر باشه، عمل تبدیلات هم بیشتر میشه چون باید تک تک کاراکترهاش رو از اول تا آخر چک کرد، اما باز هم میشه کاری کرد که تبدیلات از اول صورت نگیره مثلا استفاده از متغیر کمکی و غیره. همه چیز بستگی به روش پیاده سازی داره.
امتحان کردم و جواب دادمامتحان کنید بعد جواب بدید
اعداد هم فارسی میشن
به احتمال زیاد به این دلیل اعدادش برای من فارسی نمیشه، چون زبان فارسی در سیستم من بعنوان زبان اول انتخاب نشده.
کد زیر رو در Load از From نوشتم (همون کد خودتون هست به زبان سی شارپ):
InputLanguage.CurrentInputLanguage = InputLanguage.FromCulture(new System.Globalization.CultureInfo("fa-ir"));
این کد بالایی اصلا کار نمیکنه، آبجکت mylanguage اصلا متدی به نام FromCulture نداره! (خط آخر).'تنظیم زبان برنامه به فارسی
Dim myculture As New Globalization.CultureInfo("fa-ir")
Dim mylanguage As InputLanguage
InputLanguage.CurrentInputLanguage = mylanguage.FromCulture(myculture)
کد PC2st.ir هم مشکل منو حل نکرد، هنوز انگلیسی مینویسه.
شما در نظر بگیر خواستیم پروژه رو در سیستمی که اصلا زبان فارسی کیبوردش نصب نشده اجرا کنیم ، اونوقت چی ؟
یه روشی که احتیاج به نصب فونت یا نصب زبان فارسی برای کیبورد نباشه ارائه بدید عالیه !
یه تابع تبدیل با کمترین مشکل
![]()
کدوم کد؟ کد تغییر زبان فارسی یا کد تبدیل اعداد انگلیسی به اعداد فارسی؟نوشته شده توسط hdv212
اونوقت دیگه هیچی، کاربر باید فینگلیش تایپ کنه !نوشته شده توسط federrer
شاید هم بشه؟ خدا رو چه دیدید؟!؟
آخرین ویرایش به وسیله PC2st : چهارشنبه 31 مرداد 1386 در 15:02 عصر دلیل: تغییرات در پاسخ دهی
شما این کد رو امتحان کنین، جواب می ده:
Dim Eng AsNew Globalization.CultureInfo("fa-ir")
InputLanguage.CurrentInputLanguage = InputLanguage.FromCulture(Eng)
این یکی هم اعداد رو فارسی نمیکنه.شما این کد رو امتحان کنین، جواب می ده:
Dim Eng AsNew Globalization.CultureInfo("fa-ir")
InputLanguage.CurrentInputLanguage = InputLanguage.FromCulture(Eng)
پست شماره ی 24، اعداد رو فارسی نکرد.کدوم کد؟ کد تغییر زبان فارسی یا کد تبدیل اعداد انگلیسی به اعداد فارسی؟
سه صفحه از این تاپیک پر شد ولی هنوز نتیجه نگرفتیم، موضوع اصلی فقط فارسی نویسی اهدا بود نه تغییر زبان، کدهای بالا هم هیچ کدوم اعداد رو فارسی نکردن (البته تا اونجایی که من تست کردم)، لطفا اگه کسی کدی رو تست کرده که اعداد رو فارسی مینویسه بذاره اینجا ما هم یه تستی بزنیم.
برای فارسی کردن اعداد در داخل textbox من این کارو کردم بالاخره جواب گرفتم
ابتدا در Event Load این کد رو نوشتم
InputLanguage.CurrentInputLanguage = InputLanguage.FromCulture(new System.Globalization.CultureInfo("fa-ir"));
بعدش مسیر زیر رو Set کردم Regional Language Options -- > Regional Options --> Customaize --> Numbres --> Digit Substitution --> Context
دیگه اعداد توی textbox فارسی نوشته میشن
سلام
این کد زبان سیستم رو تبدیل می کنه به فارسی
معادل این کد چی میشه
یعنی فارسی رو تبدیل کنه به انگلیسی
در واقع به جای fa-ir چه باید بذاریم
با تشکر
InputLanguage.CurrentInputLanguage = InputLanguage.FromCulture(new System.Globalization.CultureInfo("fa-ir"));
برای English - United States:
en-US
واسه فارسی بهترین فونت time new roman با right to left و size 14 یا 16 هست
دوست عزیز اینو که همه بلدن، هدف اینه که بدون تغییر تنظیمات ویندوز بتونیم اعداد رو به صورت فارسی نشون بدیم. اینطوری کل اعداد سیستم .. چه تو برنامه ی ما و چه خارج از برنامه ی ما به صورت فارسی نشون داده میشه که جالب نیست.برای فارسی کردن اعداد در داخل textbox من این کارو کردم بالاخره جواب گرفتم
ابتدا در Event Load این کد رو نوشتم :
InputLanguage.CurrentInputLanguage = InputLanguage.FromCulture(new System.Globalization.CultureInfo("fa-ir"));
بعدش مسیر زیر رو Set کردم Regional Language Options -- > Regional Options --> Customaize --> Numbres --> Digit Substitution --> Context
دیگه اعداد توی textbox فارسی نوشته میشن
با سلام
در مورد فارسی کردن اعداد، توی تاپیکها هرچی گشتم، نتیجه ای نگرفتم، این تاپیک هم مال چند ماه پیشه که بی نتیجه موند، منم نخواستم تاپیک جدیدی بزنم، سعی کردم همین تاپیک رو ادامه بدم که به یه نتیجه ای برسه.
مشکل بردن کد اسکی اعداد به کد دیگه برای ذخیره در دیتابیس، مشکل ما رو حل نمیکنه، مثلا کدهایی که توی تاپیک های مختلف برای تبدیل اعداد به فارسی مطرح شده بود، مثل این :
private string ToPersianNumbers(string text)
{
string output = "";
foreach (char ch in text.ToCharArray())
if (char.IsDigit(ch))
output += (char)(int.Parse(ch.ToString()) + 1584);
else
output += ch.ToString();
return output;
}
و این :
public string FarsiInt(object EnInt)
{
string A = EnInt.ToString();
string[] A2 = new string[A.Length + 1];
int i;
for (i = 0; i <= A.Length - 1; i++)
{
if (Information.IsNumeric(A.Substring(i, 1)))
{
A2[i] = Strings.ChrW(Strings.AscW(A.Substring(i, 1)) + 1728).ToString();
}
else
{
A2[i] = A.Substring(i, 1);
}
}
A = "";
for (i = 0; i <= A2.Length - 1; i++)
{
A += A2[i];
}
return A;
}
در زمان Insert به دیتابیس، خطا میده، در ضمن عددهای دیگه ای که بقیه ی دوستان گفتن مثل 1534 و .... بازم مشکلی رو حل نمیکنه.
این نکته رو هم بگم که در فرمهای استاندارد خود Visual Studio، مشکل فارسی نویسی با RightToLeft کردن و Localization حل میشه ولی من از کامپوننت استفاده میکنم که ظاهرا متون یونیکد رو پشتیبانی نمیکنه (کامپوننت DevExpress)، کسی راه حل جامعی در مورد اعداد فارسی داره که تست شده باشه ؟
مرسی
با این کد تو WPF کامل و راحت فارسی میشه ولی تو winform نه!!!!!
var calture = new CultureInfo("fa-IR");
Thread.CurrentThread.CurrentCulture = calture;
Thread.CurrentThread.CurrentUICulture = calture;
calture.NumberFormat.DigitSubstitution = DigitShapes.NativeNational;
واقعا واسه فارسی کردن اعداد تو winform به صورت آدم واری راهی نیست؟
سپاسگزارم
جواب!!!!!!!!!! نبود؟؟؟؟؟؟؟؟