# Native Code > برنامه نویسی در Delphi > مباحث عمومی دلفی و پاسکال >  فارسی کردن پیغام های برنامه

## karzari

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

----------


## B-Vedadian

فارسی کردن پیغامهای معمولی که کاری نداره. برای فارسی کردن پیغام های خطا، اول یک ApplicationEvent از تب Additionalv روی فرم اصلی برنامت بذار، بعدش تو رویداد OnException پیغام مورد نظر رو نمایش بده. برای اینکه بتونی این کار رو بکنی، باید پیغام Exceptionهای ممکن رو ترجمه کنی و بر اساس کد نشونشون بدی. یک بخش هم برای قسمتهایی که احیانا ترجمه نکردی بذار که مثلا بگه "خطا با پیغام انگلیسی ... ایجاد شد، با توزیع کننده نرم افزار تماس بگیرید"!

----------


## SYNDROME

یک نگاه به این هم بنداز.
https://barnamenevis.org/showth...112#post512112
موفق باشید

----------


## daffy_duck376

با عرض ادب خدمت SYNDROME
براي كپشن هم كافيه از منوي پروژه گزينه option ‌را انتخاب كني بعدش براي برنامه يه TITLE بنويسي

----------


## a_mosavian

فایلهای Consts.pas و DBConsts.pas و SysConsts.pas و VDBConsts و RTLConsts.pas و ComStr.pas رو پیدا کنید و داخل پوشه ی برنامه کپی کنید و پیغام های آن را فارسی کنید

----------


## Tasiyan

> فایلهای Consts.pas و DBConsts.pas و SysConsts.pas و VDBConsts و RTLConsts.pas و ComStr.pas رو پیدا کنید و داخل پوشه ی برنامه کپی کنید و پیغام های آن را فارسی کنید


خسته نباشی a_mosavian،زحمت کشیدید
ولی یه نگاهم به تاریخ تاپیک می کردی بد نبود :اشتباه:  :لبخند گشاده!:

----------


## a_mosavian

چیزی که نوشتم تاریخ بردار نیست. همیشه کار میکنه. استثناها ایجاد شدن تا جلوی برنامه نویسی اضافی برای نمایش پیغام خطا رو بگیرن.رویداد OnException برای این تعبیه نشده که شما اونجا چه پیغامی نمایش بدید. صرفا برای تعیین نحوه نمایش پیغام های خطا و استثناها رو تغییر بدید. مثل کاری که توی ویندوز اکس پی انجام شده و مثلا پیغام خطا رو می تونید به سایت مایکروسافت بفرستید تا اونا بررسی کنن. این رویداد صرفا برای این موضوع هستش.
من این فایل ها را برای خودم فارسی کردم. اگه کسی می خواد بگه.
در ضمن حال نداشتم بگم برای اینکه پیغام های خطا و MessageDlg ها رو راست به چپ کنید باید خط زیر رو به سورس فایل اصلی پروژه اضافه کنید
  Application.BiDiMode:=bdRightToLeft;
برای فارسی کردن دکمه های OK و Cancel هم تغییر فایل Consts.pas کفایت می کنه. لازم نیست برای پیاده کردن متدی برای نمایش پیغام با دکمه های فارسی خودتون رو آزار بدید.

*** هیچ وقت به سورس های اصلی VCL دست نزنید. اگه می خواید Customize کنید اول توی فولدر برنامه کپی کنید بعد دستکاری کنید.

**متاسفانه اکثر برنامه نویسای ما مدیریت استثناها رو بلد نیستند و هنور با سیستم برنامه نویسی داس کار میکنند و کد خطا رو کشف رمز میکنند. هنگامی که یک خطا هم توسط کاربر بوجود میاد از تابع MessageDlg یا ShowMessage استفاده می کنند. در صورتی که باید از دستور 
raise Exception.Create('پیغام')
 استفاده کنن. 
اصلاح: البته حتما این پیغام رو تو بلوک try بگذارید تا بتونید نمونه های اشیایی که ایجاد کردید آزاد کنید و از Memory Leak جلوگیری کنید. چون ایجاد استثنا از اجرای ادامه روتین جلوگیری میکنه و کار ناقص میشه.
نکته: اگه استثنا رو توی رویداد BeforePost ایجاد کنیداز پست شدن رکورد جلوگیری می کند.
تکته 2: تابع Abort هم استثنای EAbort رو ایجاد میکنه که روتین رو ناقص می کنه و اگه دارید این متد رو استفاده می کنید، به دلایل بالا حتما توی بلوک try استفاده کنید. تنها تفاوت این استثنا به بقیه این است که پیغامی نمایش نمی دهد که اصطلاحا به آن Silent Exception می گویند

----------


## hojjatcroos

اگه می خواهید پیغام های برنامه رو فارسی کنید به طور کلی باید پیغامتون رو از نوع فرم تعریف کنید(به نقل از یکی از اساتید) و درست هم هست.حتی با این کار می تونید دکمه های پیغام کپشن و چیز های دیگر رو هم فارسی کنید قبلا دربارش بحث شده

----------


## V60

سلام a_mosavian
نیکی و پرسش
خب اگر فارسی کردی بذار تا ما هم استفاده کنیم
متشکر

----------


## جواد ملاولی

سلام. این دو تا فایل رو در پوشه برنامه کپی کنید تا همه چی درست بشه.

----------


## V60

سلام
این که فقط 10 درصد خطاها فارسی شده مهندس!

----------


## a_mosavian

مسئله نیکی و پرسش نیست. این فایل ها کپی رایت شرکت بورلند را دارند. مثلا راست به چپ شده ی کمپوننت ریبون دلفی 2009 را هم دارم که مشمول کپی رایت است. یا تقویم شمسی پیک آپ با استفاده از کمپوننت های Adv که زحمت خودم هست ولی کپی رایت شرکت سازنده را دارد و آپلود آنها احتمالا خلاف قوانین سایت خواهد بود. فایل زیر را برای ترجمه پیغام های دلفی 2009 ضمیمه کردم که البته روی نسخه های قدیمی تر قهرا کار خواهد کرد. آنهایی را فارسی کرده ام که نیاز داشته م. از ترجمه قسمت های زمان طراحی هم خودداری کرده م، نیازی هم نبود چون دلفی در زمان طراحی از این فایل ها استفاده نمی کند. محتویات فایل زیپ را باید درون پوشه برنامه بریزید.

----------


## a_mosavian

البته خودم روی فارسی کردن پیغام های Ado مشکل دارم. احتمالا متن پیغام ها داخل فایل های DLL خود ADO هست. اگر کسی برای آنها راه عاقلانه ای پیدا کرد لطف کند بزند.

----------


## جواد ملاولی

> محتویات فایل زیپ را باید درون پوشه برنامه بریزید.


سلام. ضمن تشکر از شما دوست عزیز، 2 تا مشکل دارم و از شما کمک می خوام:
1- فایلهای شما در حالت عادی درست کار می کنه ولی وقتی از کامپوننت alphaControls استفاده می کنم، فایل sConst رو که از فایلهای این کامپوننته نمی تونه کامپایل کنه (به دلیل وجود فایل Const شما در کنار برنامه) و خطا میده. چکار کنم؟
2- وقتی از دیتابیس DBISAM استفاده می کنم، پیغامهای دیتابیس فارسی نیستن. باز هم چکار کنم؟!
پیشاپیش از کمکت ممنونم.

----------


## جواد ملاولی

رفقا لطفاً کمک کنن.

----------


## a_mosavian

آقا جواد،
لطفا متن شرح خطا رو بگید شاید بتونم کمکی کنم.
با DBISAM کار نکردم. ولی اگه کنترلر خطا مثل ADO جزء خود موتور باشه متاسفانه نمیشه کاری کرد. باید resource های فایل های DLL ش رو تغییر داد که عملا غیر ممکنه. ولی اگر جزء سورس دلفی ش باشه و شما دسترسی به سورس موتور داشته باشید، می تونید همین پروسه ای که من انجام دادم انجام بدید.

----------


## جواد ملاولی

> آقا جواد،
> لطفا متن شرح خطا رو بگید شاید بتونم کمکی کنم.


سلام جناب موسویان. خیلی ممنون از لطفتون.
اون خطا بر طرف شد. الان 2 تا مشکل دارم. یکی این که پیامهای مربوط به ADO به شکل زیر نشون داده میشه. (شکل 1)

و دومی این که من در سورس برنامه کد زیر رو می نویسم تا آیکون پیامها سمت راست بیاد:
Application.BiDiMode := bdRightToLeft; 
و درست هم کار میکنه؛ ولی وقتی از کامپوننت Alpha Controls استفاده می کنم یه کم خراب میشه (شکل 2)
البته شاید این مشکل دوم هیچ ربطی به فایلهای شما نداشته باشه.

باز هم خیلی ممنون.

----------


## a_mosavian

قابلی نداره جناب ملاولی،
من نمی دونم آلفا چطوری کار میکنه. ولی احتمالا توابع رسم مربوط به دیالوگ ها رو تغییر میده. بهترین کار اینه که اگه به سورس آلفا دسترسی دارید قسمت مربوط به رسم دیالوگ رو پیدا کنید و تصحیح کنید.
اون طوری هم که من فهمیدم این دستور کمی با اکس پی مشکل داره، علیرغم اینکه رسم دیالوگ تو ویستا درست و صحیح هست. متاسفانه وقت ندارم وگرنه قسمت باگ دار سورس دلفی رو پیدا می کردم و درستش رو میفرستادم. اگه وقت کردم این کار رو براتون می کنم

----------


## جواد ملاولی

جناب موسویان ضمن تشکر مجدد از شما، یه سوال دیگه هم داشتم. اگه بخوایم برنامه مون چند زبانه باشه، در مورد پیغامها باید چکار بکنیم؟ این یونیتها رو که کنار پروژه میذاریم فارسی میشن. برای زبانهای دیگه چی؟

----------


## جواد ملاولی

جناب موسویان! یونیتهایی که برای فارسی کردن پیغامها گذاشته بودید،‌ در دلفی 2010 جواب نمیده. آپدیت شون نکردید؟

----------


## BORHAN TEC

> جناب موسویان ضمن تشکر مجدد از شما، یه سوال دیگه هم داشتم. اگه بخوایم  برنامه مون چند زبانه باشه، در مورد پیغامها باید چکار بکنیم؟ این یونیتها  رو که کنار پروژه میذاریم فارسی میشن. برای زبانهای دیگه چی؟


بايد از Resource ها استفاده كنيم. و تمام پيام ها را دا داخل Resource ها نگهداري كنيم و به فراخوار زبان انتخاب شده براي برنامه آنها را لود كنيم.

----------


## جواد ملاولی

> بايد از Resource ها استفاده كنيم. و تمام پيام ها را دا داخل Resource ها نگهداري كنيم و به فراخوار زبان انتخاب شده براي برنامه آنها را لود كنيم.


با تشكر از شما؛ من خيلي با Resource ها كار نكردم. ممكنه بيشتر توضيح بديد؟

----------


## حسین خانی

با سلام   :لبخند: 




> من خيلي با Resource ها كار نكردم. ممكنه بيشتر توضيح بديد؟


به تاپیک آقای *Mahmood_N* در لینک زیر مراجعه کنید :

https://barnamenevis.org/showth...200#post931200

موفق باشید ...

----------


## جواد ملاولی

برای فارسی کردن پیغامها در دلفی 2010، کسی یونیتهای آپلود شده در همین تاپیک رو آپدیت نکرده؟

----------


## mofrad

چه جوری توی 2010 پیغام ها رو فارسی کنم؟
من فایل consts.pas رو ندارم! فقط کامپایل شده است (consts.dcu)

----------


## MOJTABAATEFEH

> سلام
> من یه برنامه دارم که امکان رخداد خطا همیشه وجود داره مثلا وقتی که یوزر و پسورد اشتباه وارد بشه
> حالا من می خوام این پیغام ها رو فارسی کنم
> در ضمن من می خوام در کلیه مسیج باکس و دیالوگ ها تمامی کپشن ها فارسی باشن
> چگونه میشه چنین کاری کرد


دوست عزیز از کد زیر هم می توانید استفاده کنید

MessageBox( Handle, PChar('Your Message'), PChar('Your Caption'), MB_OK + MB_ICONSTOP + MB_DEFBUTTON1 + MB_APPLMODAL + MB_RIGHT + MB_RTLREADING);

----------


## mofrad

با احترام . جناب  *MOJTABAATEFEH* تاپیک اون بنده خدا یکم قدیمی نیست! :متفکر: 
سؤال بنده جدیدتره!
اگه کسی یونیت Consts.pas دلفی 2010 رو داره بذاره خیییییلی ممنون میشم. یا حداقل کامپایل شده با پیغام های فارسی رو دوستان اگه دارن بذارن تا ما هم فیض ببریم!
ممنون

----------


## Pascal

> با احترام . جناب *MOJTABAATEFEH* تاپیک اون بنده خدا یکم قدیمی نیست!
> سؤال بنده جدیدتره!
> اگه کسی یونیت Consts.pas دلفی 2010 رو داره بذاره خیییییلی ممنون میشم. یا حداقل کامپایل شده با پیغام های فارسی رو دوستان اگه دارن بذارن تا ما هم فیض ببریم!
> ممنون


 این فایل را می توانید در آدرس RAD Studio\7.0\source\Win32\vcl پیدا کنید با این حال من فایل را ضمیمه می کنم

----------


## mofrad

> این فایل را می توانید در آدرس RAD Studio\7.0\source\Win32\vcl پیدا کنید با این حال من فایل را ضمیمه می کنم


ممنون
بله ولی من دلفیم بدون سورسه و کامل نصب نیست!!!
باز هم ممنون

----------

