View Full Version : بین المللی کردن برنامه ها
علی رضائی
سه شنبه 13 شهریور 1386, 14:25 عصر
فرض کنید در برنامه یک لیبل داریم که کپشن آن کلمه ((اسب)) می باشد. دو کلید هم هست که کپشن یکی کلمه ((فارسی )) و کپشن دیگری کلمه (( انگلیسی)) است. می خواهیم با کلیک بر روی کلید با کپشن (( انگلیسی)) , کپشن لیبل از (( اسب)) به ((horse)) تغییر کند. و این تغییر با یک فایل TXT در ارتباط باشد.
توضیح آنکه از روش دیتابیس یا لنگوئج دلفی نیز استفاده نکنیم.
پیشاپیش از همکاری دوستان؛ کمال تشکر و قدر دانی را دارم.
hossein taghi zadeh
سه شنبه 13 شهریور 1386, 15:13 عصر
با سلام
برای این کار باید فرهنگ لغت داشته باشید، که می تونه یه فایل متنی ساده یا یه فایل ini یا ... باشه. برای مثال فایل En.ini داخلش به این صورت پر شده باشه.
[Header]
CreatedBy=None
[Dic]
SMap=Map
SHorse=Horse
و فایل Fa.ini هم به این صورت
[Header]
CreatedBy=پوچ
[Dic]
SMap=نقشه
SHorse=اسب
در ضمن در مورد خواندن و نوشتن از/در فایل Ini یونیت IniFiles رو به پروژتون اضافه کنید و با کلاس TIniFile کار کنید و برای کار با فایلهای متنی از کلاس TStringList استفاده کنید.
علی رضائی
سه شنبه 13 شهریور 1386, 17:17 عصر
آقای تقی زاده ؛ فکر کنم منظورم را خوب نرسانده ام. من قصد ساخت دیکشنری ندارم. بلکه می خواهم با این روش کپشن لیبلها و کلیدها را از فارسی به زبانهای مورد انتخاب کاربر تغییر دهم.
اگر یک پروژه کوتاه ارائه کنید سپاسگذار شما خواهم بود.
SYNDROME
سه شنبه 13 شهریور 1386, 17:47 عصر
با سلام
یک Table بسازد و در آن نام کامپونتها و دو فیلد برای فارسی و انگلیسی بسازید.
حالا اگر En بود فیلد انگلیسی را بخوانید و اگر فارسی بود فیلد فارسی را بخوانید.
موفق باشید
hossein taghi zadeh
سه شنبه 13 شهریور 1386, 22:08 عصر
با سلام
مثالی از برنامه چند زبانه که با فایل ini کار می کنه (می تونید پس از تولید نرم افزار زبان جدیدی به اون اضافه کنید)، ضمیمه شده.
علی رضائی
چهارشنبه 14 شهریور 1386, 08:44 صبح
با سپاس فراوان از محبت شما - فایل ارسالی را دریافت، مطالعه و اطلاعات آنرا به پروژه مورد نظرم منتقل کردم. اما ظاهرا از آنجا که در پروژه مذکور به جای
MaimMenu
از
suiMainMenu
که در کامپوننت
SUIPack
موجود است استفاده کرده ام در خط
Procedure SelectMenuClick(Sender: TObject);
Procedure LoadLanguage(FileName: TFileName);
خطا گرفته و پیغام زیر را نمایش داده می شود.
[Error] Unitmain.pas(1072): Unsatisfied forward or external declaration: 'TFormmain.SelectMenuClick'
[Hint] Unitmain.pas(1073): Private symbol 'LoadLanguage' declared but never used
آیا ممکن است خطا مربوط به تفاوت نام
MaimMenu و suiMainMenu
باشد
nasr
پنج شنبه 15 شهریور 1386, 08:13 صبح
از مجموعه کامپوننتهای TSiLang (http://www.tsilang.com/delphiglobalizationtool_faq.html)استفاده کنید
hossein taghi zadeh
پنج شنبه 15 شهریور 1386, 08:56 صبح
با سلام
آیا ممکن است خطا مربوط به تفاوت نام MainMenu و suiMainMenu باشد
خیر
پیغام زیر را نمایش داده می شود.
[Error] Unitmain.pas(1072): Unsatisfied forward or external declaration: 'TFormmain.SelectMenuClick'
مشکل در تعریف پروسیجر SelectMenuClick در بدنه برنامه است. شما پروسیجری به نام SelectMenuClick در فرم تان ندارید که باید آنرا به این صورت تعریف کنید:
Procedure TFormMain.SelectMenuClick(Sender: TObject);
Begin
...
End;
[Hint] Unitmain.pas(1073): Private symbol 'LoadLanguage' declared but never used
از پروسیجر LoadLanguage در برنامه تان استفاده نکرده اید و تنها آنرا تعریف کرده اید.
علی رضائی
شنبه 17 شهریور 1386, 16:54 عصر
بسیار عالی بود و اشکال با توضیح شما برطرف شد یکی از مشکلات باقی مانده ؛ تغییر عنوانها در ستونهای دبی گرید است.
برای لیبل از این خط استفاده می شود و خطائی رخ نمی دهد.
Labelsearch.Caption:=LangIni.ReadString('Dic', Labelsearch.Name, 'Search');
اما برای دبی گرید چنین می نویسم.
DBGrid1.Columns[0].Title:=LangIni.ReadString('Dic', DBGrid1.Columns['0'].Name, 'Name');
و خطای زیر ثبت می شود.
Incompatible types: 'TColumnTitle' and 'String'
و اگر اینگونه بنویسم
DBGrid1.Columns[0].Title.Caption:=LangIni.ReadString('Dic', DBGrid1.Columns['0'].Title.Name, 'Name');
پیغام خطای زیر نمایش داده می شود
Incompatible types: 'Integer' and 'Char'
اگر راهنمائی کنید متشکر و قدردان شما خواهم بود.
SYNDROME
شنبه 17 شهریور 1386, 19:07 عصر
با سلام
Incompatible types: 'Integer' and 'Char'
این خطا به خاطر یک نوع نبودن مقادیر شما می باشد.
موفق باشید
hossein taghi zadeh
شنبه 17 شهریور 1386, 19:47 عصر
با سلام
DBGrid1.Columns[0].Title:=LangIni.ReadString('Dic', DBGrid1.Columns['0'].Name, 'Name');
پارامتر دوم متد ReadString عنوان کلیدی است که مقدار مقابلش باید از فایل خوانده شود, شما می توانید از نام فیلد برای این منظور استفاده کنید.
DBGrid1.Columns[0].Title:=LangIni.ReadString('Dic', DBGrid1.Columns[0].FieldName, 'Name');
vBulletin® v4.2.5, Copyright ©2000-1404, Jelsoft Enterprises Ltd.