PDA

View Full Version : ---- آموزش ساخت برنامه چند زبانه با مثال 4 زبانه ----



vbhamed
پنج شنبه 08 اسفند 1387, 02:36 صبح
سلام

در اين تاپيك آموزش چند زبانه كردن برنامه از يك راه نسبتا ساده رو براتون شرح مي دم
خيلي ها شايد فكر كنند اين كار، كار سختي هست ولي اصلا اينطوري نيست

به صورت خلاصه در اين روش متون برنامه، ترجمه مي شود

1 - همه كلمات و جملات رو در دو يا چند فيلد فارسي و انگليسي و عربي و ... در يك فايل متني يا بانك اطلاعاتي يادداشت كنيد
2 - قبل از نمايش فرم ها، متن داخل اشياء رو با توجه به زبان انتخابي ترجمه كنيد

مزايا :

1 - به خاطر استفاده از بانك اطلاعاتي سرعت بالايي نيز دارد (البته ميشه از فايل متني يا ريسورس نيز استفاده كرد)
2 - از تكرار ترجمه جملات و كلمات در فرمهاي مختلف جلوگيري خواهد شد
3 - برنامه وابسته به اشياء فرم نبوده و به دلخواه مي توانيد تعداد كنترلهاي روي فرم را زياد و كم كنيد بدون اينكه نياز باشه به كد برنامه يا فايل ترجمه دست بزنيد

يكسري مزاياي ديگه هم هست كه در پست شماره 55 همين تاپيك توضيح داده شده

mpmsoft
پنج شنبه 08 اسفند 1387, 08:48 صبح
دوست عزيز من فکر مي کنم شما مي بايست يک کد براي هر يک از آبجکت هاي کل برنامه اختصاص مي داديد-منظورم در بانک اطلاعاتي هست (همانند ويندوز)

و در زمان بارگذاري مقادير رو نسبت به کد آبجکت و زبان مورد نظر در بانک فراخواني کرده و نمايش دهيد

فکر مي کنم کدتون مشکل داشته باشه چون من تست کردم کار نکرد

البته منظورم از کد اينه که کد هر آبجکتو مي تونيم تو Tag اون کنترل بنويسيم

vbhamed
پنج شنبه 08 اسفند 1387, 09:28 صبح
دوست عزيز من فکر مي کنم شما مي بايست يک کد براي هر يک از آبجکت هاي کل برنامه اختصاص مي داديد-منظورم در بانک اطلاعاتي هست (همانند ويندوز)

و در زمان بارگذاري مقادير رو نسبت به کد آبجکت و زبان مورد نظر در بانک فراخواني کرده و نمايش دهيد

البته منظورم از کد اينه که کد هر آبجکتو مي تونيم تو Tag اون کنترل بنويسيم


سلام

اتفاقا مسئله همينه كه اين برنامه مي خواد اين كارهاي سخت انجام نشه
با اين روش شما نياز نيست هيچ كار اضافه اي انجام بديد و خاصيت Tag رو هم اشغال كنيد
فرض كنيد كسي يك برنامه نوشته با 20 تا فرم و در كل 300 عدد Object
مي دونيد گذاشتن كد در تگ 300 شيء چه كار سختيه ؟
ضمن اينكه بايد مواظب باشيد اشتباه هم نكنيد
اما در اين روش فقط متن و ترجمه رو يادداشت مي كنيد
حتي برداشت متنهاي استفاده شده در فرمها (منظور متن Label ها و Command ها و ...) هم با يك روال ساده و به صورت اتوماتيك به راحتي امكان پذير هست




فکر مي کنم کدتون مشکل داشته باشه چون من تست کردم کار نکرد



مشكل شما چي هست كه كار نكرد
اين برنامه تست شده هست و من خودم از اون استفاده مي كنم

hamedMohammad
پنج شنبه 08 اسفند 1387, 17:47 عصر
با سلام

اشکال برنامه اینه که زبان ابجکت های فرم تغییر نمی کنن ! ولی برنامه exe شده درست کار میکنه .
موفق باشید

vbhamed
پنج شنبه 08 اسفند 1387, 23:07 عصر
با سلام

اشکال برنامه اینه که زبان ابجکت های فرم تغییر نمی کنن ! ولی برنامه exe شده درست کار میکنه .
موفق باشید

منظورتو از زبان آبجكتهاي فرم چيه ؟ نكنه در حالت طراحي رو مي گين يا حالت اجرا از درون ويژوال بيسيك

در هر صورت هم از درون محيط و هم فايل Exe تست شده هستند

xxxxx_xxxxx
پنج شنبه 08 اسفند 1387, 23:33 عصر
در هر صورت هم از درون محيط و هم فايل Exe تست شده هستند

سلام
براي من هم در حالت طراحي وقتي برنامه رو اجرا مي كنم كار نمي كنه. به خاطر on errorي هست كه تو رويداد load وجود داره. وقتي on error رو برداريم اين خطا رو ميده:

hamedMohammad
جمعه 09 اسفند 1387, 15:34 عصر
منظورتو از زبان آبجكتهاي فرم چيه ؟ نكنه در حالت طراحي رو مي گين يا حالت اجرا از درون ويژوال بيسيك

در هر صورت هم از درون محيط و هم فايل Exe تست شده هستند

سلام بر vbhamed عزیز

منظورم اینه که فرض کن برنامه در حالت زبان انگلیسی باشه ، وقتی کامند باتون Persian را زدیم انتظار دازیم کاپشن کامندهای فرم فارسی بشن ولی این اتفاق نمی افته!
راستی یه سوال ! فرم frmdata هنگام اجرای پروژه بکار گیری می شه؟ اگه جواب مثبته به چه شکل ؟

ممنونم همیشه موفق باشی
---------------------------------------------------------
حلول ماه ربیع الاول بر همه جهانیان مبارک باد

abulfazl
شنبه 10 اسفند 1387, 18:04 عصر
با سلام خدمت شما دوست عزيز كامند هاي برنامه ي شما وقتي فايل exe اش رو باز مي كني با وقتي كه با خود vb باز مي كني فرق دارد مي توني بگي چطور اين كار رو كردي
متشكرم abulfazl

vbhamed
یک شنبه 11 اسفند 1387, 00:52 صبح
سلام
براي من هم در حالت طراحي وقتي برنامه رو اجرا مي كنم كار نمي كنه. به خاطر on errorي هست كه تو رويداد load وجود داره. وقتي on error رو برداريم اين خطا رو ميده:

سلام

براي رفع مشكل بايد سرويس پك 6 ويژوال استوديو رو نصب كنيد يا اينكه خاصيت Connect كنترل dta در فرم frmData رو به جاي Access2000، روي Access قرار بديد

vbhamed
یک شنبه 11 اسفند 1387, 01:00 صبح
سلام بر vbhamed عزیز

منظورم اینه که فرض کن برنامه در حالت زبان انگلیسی باشه ، وقتی کامند باتون Persian را زدیم انتظار دازیم کاپشن کامندهای فرم فارسی بشن ولی این اتفاق نمی افته!
راستی یه سوال ! فرم frmdata هنگام اجرای پروژه بکار گیری می شه؟ اگه جواب مثبته به چه شکل ؟

ممنونم همیشه موفق باشی
---------------------------------------------------------
حلول ماه ربیع الاول بر همه جهانیان مبارک باد

سلام

براي رفع مشكل پست 9# رو ببينيد



راستی یه سوال ! فرم frmdata هنگام اجرای پروژه بکار گیری می شه؟ اگه جواب مثبته به چه شکل ؟



سؤال خوبي كرديد، frmData براي اين هست كه اين برنامه ترجمه رو از طريق تابع Translate در ماژول انجام مي ده و اين تابع فرم مورد نظر رو به عنوان پارامتر مي گيره و عناوين اون رو ترجمه مي كنه و براي خواندن اطلاعات زبانها از بانك اطلاعاتي نيازمند كنترل Data اي هست كه هميشه در دسترس باشه كه در فرم frmData قرار داره
اما اگر قرار باشه Data در هر فرم جداگانه قرار بگيره مصرف حافظه بيشتر، سرعت و انعطاف پذيري كمتري داريم

vbhamed
یک شنبه 11 اسفند 1387, 01:19 صبح
با سلام خدمت شما دوست عزيز كامند هاي برنامه ي شما وقتي فايل exe اش رو باز مي كني با وقتي كه با خود vb باز مي كني فرق دارد مي توني بگي چطور اين كار رو كردي
متشكرم abulfazl

سلام

اين كار با اعمال استايل ويندوز بر روي برنامه انجام شده كه نمونه مثالهاش تو سايت هست

تابع Api زير بايد فراخواني بشه


Private Sub Form_Initialize()
InitCommonControls
End Sub

ضمنا فايل MultiLanguage.exe.manifest بايد در پوشه برنامه وجود داشته باشه
البته به جاي MultiLanguage.exe در نام بالا، اسم فايل Exe برنامه خودتون رو بزاريد

jk
دوشنبه 12 اسفند 1387, 10:28 صبح
تشکر از بابت برنامه تون - از الگوریتم جالبی استفاده کردید.

استفاده از tag رو به هیچ وجه توصیه نمی کنم. چون در خیلی از جاها نیاز به تغییر زبان دارید و آن جاها tag ندارید! به عنوان مثال هدرهای یک گرید رو به چه شکلی می خواهید فارسی بکنید؟ هدرها که tag ندارند!

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

vbhamed
سه شنبه 13 اسفند 1387, 01:00 صبح
تشکر از بابت برنامه تون - از الگوریتم جالبی استفاده کردید.

استفاده از tag رو به هیچ وجه توصیه نمی کنم. چون در خیلی از جاها نیاز به تغییر زبان دارید و آن جاها tag ندارید! به عنوان مثال هدرهای یک گرید رو به چه شکلی می خواهید فارسی بکنید؟ هدرها که tag ندارند!

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

سلام
در اين روش هم از tag استفاده نشده است
براي اشيائي هم كه خاصيت Caption يا Text ندارند (مثل گرايدهاي مختلف يا ...)
برنامه قابل گسترش مي باشد، مثلا اگر از FlexGrid استفاده شده بود تابع Translate به شكل زير تعميم مي يابد



With frmData.dta.Recordset

For Each obj In frm.Controls

If TypeOf obj Is VSFlexGrid Then

...

End If

به جاي ... فرض را بر اين مي گيريم كه Obj اسم يك FlexGrid هست و با اين نام تمام خواص و متدهاي FlexGrid قابل استفاده هستند، مثلا با خاصيت TextMatrix ميشه متن هدر رو عوض كرد


Obj.TextMatrix(0,1) = "Test"

shahmahi
سه شنبه 18 اسفند 1388, 10:33 صبح
ممنون از برنامتون 2 تا سوال داشتم:
يكي اينكه وقتي زبان برنامه رو تغيير ميديم اين تغييرات فقط روي همون فرم اصلي اجرا ميشه و روي بقيه فرم ها اعمال نميشه چي كار بايد بكنيم واسه بقيه فرم ها كه بعد از انتخاب زبان مورد نظر تمام فرم هاي پروژه روشون اعمال بشه.

و يكي ديگه اينكه آيا ميشه متن پيغامها رو هم مطابق زبان مورد نظر در بياريم و يا اگه داخل برناممون يكي از ابزار هاي Codejock مثل CommandBar داشه باشيم چي.
ممنون ميشم توضيح بديد.

shahmahi
چهارشنبه 19 اسفند 1388, 12:44 عصر
سلام

جناب vbhamed ميشه توضيح بدين چطوري بايد تابع Translate رو تعميم بديم كه به Caption هاي يك RibbonBar و يا هيدرهاي يك VSFlexGrid دسترسي داشته باشيم و بتونيم اونارو تغيير بديم.

حمید محمودی
چهارشنبه 19 اسفند 1388, 13:26 عصر
سلام

1 - به خاطر استفاده از بانك اطلاعاتي سرعت بالايي نيز دارد (البته ميشه از فايل متني يا ريسورس نيز استفاده كرد)


سلام . استفاده از بانک اطلاعاتی به نظر من مناسب نیست . بهتر بود از فرمت های دیگه مثل ini و xml استفاده میکردید.

استفاده از فایل های متنی مزایایی داره که ممکنه در مورد بانک اطلاعاتی صدق نکنه مثل. حجم بسیار پایین و ست کردن خیلی راحت .

در مورد ریسورس هم اگه از روش ست کردن فایل جدا استفاده بشه خوب خوبه ولی خوب باز هم مشکلات خاص خودشو داره مثل عدم راحتی کاربران برای ترجمه فایل ها به زبان های دیگه . البته میشه کاری کرد که این مشکل هم حل بشه . ولی درکل استفاده از فایل متنی سهولت بسیار زیادی برای کاربران داره.

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

یکی از بهترین روش های ini در IDM پیاده شده. در مورد ریسورس هم میتونم به CClearner اشاره کنم. که فکر کنم بایستی مثل Babylon یک تولز جدا برای ویرایش فایل هاش که به dll تغییر نام داده استفاده کرد.

حمید محمودی
چهارشنبه 19 اسفند 1388, 21:11 عصر
دوستان عزيز لطفا بحث رو منحرف نكنيد .آقا من يك سوال پرسيدم از دوستان كسي ميدونه بايد چي كار كنم ؟.(پستهاي 14 و 15)

دوست عزیز هدف ما منحرف کردن بحث نیست . ببینید وقتی میشه با روش های ایده آل تر MultiLanguage رو پیاده کرد حالا چرا از این روش .
مسئله بعدی شما چطور به این نتیجه رسیدین که بحث داره منحرف میشه؟


ممنون از برنامتون 2 تا سوال داشتم:
يكي اينكه وقتي زبان برنامه رو تغيير ميديم اين تغييرات فقط روي همون فرم اصلي اجرا ميشه و روي بقيه فرم ها اعمال نميشه چي كار بايد بكنيم واسه بقيه فرم ها كه بعد از انتخاب زبان مورد نظر تمام فرم هاي پروژه روشون اعمال بشه.

و يكي ديگه اينكه آيا ميشه متن پيغامها رو هم مطابق زبان مورد نظر در بياريم و يا اگه داخل برناممون يكي از ابزار هاي Codejock مثل CommandBar داشه باشيم چي.
ممنون ميشم توضيح بديد.

در مورد سوال اول شما چون شما گفتی :
Translate Me, CurrentLanguage, "English"
که در واقع به اینجا اشاره داره:

Public Sub Translate(frm As Form, FromLanguage As String, ToLanguage As String)
سوال دومم :
بله هم در مورد کدجاک و هم درمورد کادر پیام قابل پیاده سازی است

shahmahi
پنج شنبه 20 اسفند 1388, 10:50 صبح
مسئله بعدی شما چطور به این نتیجه رسیدین که بحث داره منحرف میشه؟


اونش مهم نيست مهم اينه كه درراستاي عنوان تاپيك بحث ادامه پيدا كنه نه خراب كردن گروه هاي برنامه نويسي.( البته من منظورم بيشتر متوجه جناب kooroushخان بود )



بله هم در مورد کدجاک و هم درمورد کادر پیام قابل پیاده سازی است.


البته اينو ميدونم و لي نميدونم چطوري بايد اين كار رو بكنم . راستش من يك برنامه دارم داخلش از VSFlexGrid و RibbonBar و چند تا ابزار ديگه استفاده كردم و احتياج به تغيير زبانم دارم كه بقيه ابزار هامو تونستم با برنامه اي كه داريم دربارش بحث ميكنيم تغيير بدم ولي در مورد اين 2 تا يعني Ribbon و Vs نتونستم .

راهنمايي ميخام كه اگه مشكلي نيست همراه با مثال باشه.



استفاده از فایل های متنی مزایایی داره که ممکنه در مورد بانک اطلاعاتی صدق نکنه مثل. حجم بسیار پایین و ست کردن خیلی راحت .


در اين تاپيك (http://barnamenevis.org/forum/showthread.php?t=209085) يكي از دوستان لطف كرد برنامشو قرار داد بنظرم منظورتون بايد يك همچين چيزي باشه خوب بگين در مورد همين 2 ابزار كاربردي (Ribbon و Vs )چطوري بايد Caption ها و هيدر ها رو مطابق با زبان مورد نظر دربياريم.

حمید محمودی
پنج شنبه 20 اسفند 1388, 11:10 صبح
اونش مهم نيست مهم اينه كه درراستاي عنوان تاپيك بحث ادامه پيدا كنه نه خراب كردن گروه هاي برنامه نويسي.


در این مورد باید بگم که بنده همیشه سعی مینم قوانین رو رعایت کنم و فکر نکنم پست های من در تاپیک اصلا موردی داشته باشه.



البته اينو ميدونم و لي نميدونم چطوري بايد اين كار رو بكنم . راستش من يك برنامه دارم داخلش از VSFlexGrid و RibbonBar و چند تا ابزار ديگه استفاده كردم و احتياج به تغيير زبانم دارم كه بقيه ابزار هامو تونستم با برنامه اي كه داريم دربارش بحث ميكنيم تغيير بدم ولي در مورد اين 2 تا يعني Ribbon و Vs نتونستم .

راهنمايي ميخام كه اگه مشكلي نيست همراه با مثال باشه.


دوست عزیز خیلی وقته که دیگه از این زبان و از این کنترل استفاده نمیکنم . الان دقیق یادم نیست.
ولی تا اون جایی که یادم مونده در مورد VSFlexGrid هدر ها ور که خیلی راحت میشد تغییر داد. نمیدونم شاید لینک زیر بتونه کمک کنه

http://www.barnamenevis.org/forum/attachment.php?attachmentid=23725&d=1222246673




در اين تاپيك (http://barnamenevis.org/forum/showthread.php?t=209085) يكي از دوستان لطف كرد برنامشو قرار داد بنظرم منظورتون بايد يك همچين چيزي باشه خوب بگين در مورد همين 2 ابزار كاربردي (Ribbon و Vs )چطوري بايد Caption ها و هيدر ها رو مطابق با زبان مورد نظر دربياريم.

خیر منظورمو توی پست اولم در این تاپیک گفتم. این لینکی هم که شما گفتین اصلا برای برنامه های بزرگ که نیاز به بروزرسانی مداوم دارند به درد نمیخوره.. البته نمونه های ini تو این سایت زیاد هست . ولی xml رو نمیدونم
اون مثال Lang1 که اصلا مالتی لنگج نیست ...
اون دومی هم که با حلقه پیاده سازی شده مناسب نیست. ( البته بستگی به برنامتون داره )

unforgiven
پنج شنبه 20 اسفند 1388, 11:47 صبح
سلام به همه و مخصوصا shahmahi
بحث خوبي رو شروع كرديد به نظر من هم ذخيره زبان ها در بانك كار صحيحي نيست و بهتره در فايل هاي جداگانه مثل txt يا xml يا نظير اينها ذخيره بشن . البته اگه برنامه فرم و كنترل هاي زيادي نداره ميشه در بانك هم ذخيره بشه ولي اگر مثلا 150 تا فرم و كلي كنترل وجود داره بهتره در بانك ذخيره نشه .
اگر از ريبون codejock استفاده كرديد كه خودش يه مثال براي مولتي لن داره كه اتفاقا با XML و Dll هم ساخته شده . موقع رجيستر كد جوك هم ازتون مي پرسه كه ميخواهيد به صورت اسكي رجيستر بشه يا يوني كد كه شما بايد يوني كد رو انتخاب كنيد . البته خودشون توضيح دادند كه يونيكد حافظه بيشتري رو اشغال مي كنه. البته مثالش براي ريبون نيست , اگه خواستي بگو بذارم

shahmahi
پنج شنبه 20 اسفند 1388, 11:54 صبح
خیر منظورمو توی پست اولم در این تاپیک گفتم. این لینکی هم که شما گفتین اصلا برای برنامه های بزرگ که نیاز به بروزرسانی مداوم دارند به درد نمیخوره.. البته نمونه های ini تو این سایت زیاد هست . ولی xml رو نمیدونم
اون مثال Lang1 که اصلا مالتی لنگج نیست ...
اون دومی هم که با حلقه پیاده سازی شده مناسب نیست. ( البته بستگی به برنامتون داره )

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

حمید محمودی
پنج شنبه 20 اسفند 1388, 12:25 عصر
من خيلي دوست دارم با تجربه هاي افراد مختلف آشنا بشم و استفاده كنم شما قبلا تو همين ضمينه كار كردين پس ميشه يك نمونه از برنامه هاي خودتون رو كه مناسب هست براي مولتي لنگويج رو اينجا ضميمه كنين تا من و بقيه دوستان هم استفاده كنيم. ممنون ميشم.

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


موفق باشید.

M.T.P
پنج شنبه 20 اسفند 1388, 16:58 عصر
راستش من قبلا هم گفتم خیلی وقته که از VB6 استفاده نمیکنم. کد های که توسط گروه نرم افزاری ما برای مالتی لنگج استفاده میشوند همگی برای زبان های دیگه هست که اکثرا برپایه INI استفاده میشه. کاربران زیادی هم از برنامه های ما استفاده میکنند که تا حالا مشکلی نداشتند. در مورد مثال هم گفتم یه سرچ کنید نمونه هاش تو همین سایت هست . تو سایت های دیگه هم همین طور . البته این رو هم باید بگم که اکثرا مشکل دارند. همانطور که قبلا هم گفتم شما اگه از روش مالتی لنگج IDM استفاده بکنید بهترین گزینه برای برنامه هایتون خواهد بود


موفق باشید.

دوست من dcamera اگه ایده ای نظری ، طرز فکر خاصی چیزی داری بفرما این بنده خدا کارش راه بیفته (هم کار ما رو و هم برنامه vbhamed بنده خدا رو بردی زیر ذره بین که چی؟!) من خودم میدونم اون دوتا برنامه کارایی 100درصد نداره ،،، ایشون(Shahmahi) خب انگار اون دوتا برنامه من(LAN1 LAN2) که همینطوری به ذهنم رسید به کارشون نیومد و صرفا به خاطر این بود که بتونن در مورد این مسئله فکر کنند.
شاید اگه یه کم راجع بهش فکر کنیم بشه با دستکاری و تغییر ،، حال و هواشو عوض کرد و به یک روش ایده آل واسه تغییر زبان برنامه درآوردش....تا اینکه ازش انتقاد کنیم.

تا جایی که من دیدم تمام برنامه های مهم دنیا مثلا(Office) که زبان فارسی هم واسش نصب میشه فقط نمای ظاهری (فرم ، منو ، پیغام و ...) رو فارسی میکنند و کاری با اطلاعات در حال تغییر و ترجمه مقادیر دیتابیس لود شده نداره ، اگه غیر از اینه یه نمونه معرفی کنید!
راستی Shahmahi این جدولی که شما داری چه نوع اطلاعاتی رو توش لود میکنی؟:متفکر:

حمید محمودی
پنج شنبه 20 اسفند 1388, 17:47 عصر
هم کار ما رو و هم برنامه vbhamed بنده خدا رو بردی زیر ذره بین که چی؟!)

هیچی. مگه نه اینکه فروم ها جایی برای تبادل نظر و تجربات برای همه است. من هم نظر و تجربه چنیدن ساله خودم رو گفتم. (کار و زحمت همه در هر حدی برای من مورد احترام است)


من خودم میدونم اون دوتا برنامه کارایی 100درصد نداره ،،،

بله . من هم که چیزه دیگه ای نگفتم. اون lan1 که اصلا هیچی (البته با عرض پوزش). اون دومی هم با تغییراتی میشه بهترش کرد اما در کل خوب نیست.



ایشون(Shahmahi) خب انگار اون دوتا برنامه من(LAN1 LAN2) که همینطوری به ذهنم رسید به کارشون نیومد و صرفا به خاطر این بود که بتونن در مورد این مسئله فکر کنند.
شاید اگه یه کم راجع بهش فکر کنیم بشه با دستکاری و تغییر ،، حال و هواشو عوض کرد و به یک روش ایده آل واسه تغییر زبان برنامه درآوردش....تا اینکه ازش انتقاد کنیم.


در این مورد باید بگم که متاسفانه وقت کافی برای این کار در اختیار بنده نیست. وگرنه تغییر دادنش کار سختی نیست. در مورد انتقاد هم که گفتین بر میگرده به همین نوشته اولم. تو این پست.



تا جایی که من دیدم تمام برنامه های مهم دنیا مثلا(Office) که زبان فارسی هم واسش نصب میشه فقط نمای ظاهری (فرم ، منو ، پیغام و ...) رو فارسی میکنند و کاری با اطلاعات در حال تغییر و ترجمه مقادیر دیتابیس لود شده نداره ، اگه غیر از اینه یه نمونه معرفی کنید!


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



دوست من dcamera اگه ایده ای نظری ، طرز فکر خاصی چیزی داری بفرما این بنده خدا کارش راه بیفته

:متعجب: .من پست های قبلیم گفتم که. اما مثل اینکه نیاز به توضیح بیشتر داره. دوست عزیز ایده من اینه که از روش مالتی لنگج idm استفاده بشه ( که متاسفانه من کدی رو خصوصا با وی بی ندارم و ندیدم ... اما نزدیک به این روش مثال هاش هست)

روش هایی که در idm استفاده شده و الان به نظرم رسید :


استفاده از روش INI File
داشتن ID مخصوص در فایل متنی برای هر کنترل در برنامه که این کار باعث بالا رفتن قدرت انعطاف پذیری برنامه برای کامپایل های بعدی میشه.
دانلود آسان و سریع و ست کردن خیلی راحت در برنامه ولود شدن سریع
ترجمه کردن راحت فایل های لنگج توسط کاربران
قابلیت اضافه کردن هر نوع خصوصیات برای هر نوع کنترل یا متن که نیاز به نمایش داره.
و...

البته ممکنه در مورد روش های دیگه مثل بانک یا ریسورس این موارد صدق کنه ولی همش باهم نه اینطور نیست

یه نگاهی به IDM بندازین شاید بهتر بتونین منظور منو متوجه بشین. بنده روش های زیادی رو تست کردم و سر اخر به جوابی بهتر از این که باب میل کاربر هام باشه نرسیدم.

M.T.P
پنج شنبه 20 اسفند 1388, 18:18 عصر
استفاده از روش INI File
داشتن ID مخصوص در فایل متنی برای هر کنترل در برنامه که این کار باعث بالا رفتن قدرت انعطاف پذیری برنامه برای کامپایل های بعدی میشه.


خب الان این شد یه چیزی:لبخند:
اگه در هر خط از فایل متنی که من با روش دوم یعنی (LAN2) نوشتم اسم کنترل رو بنویسیم و در خط بعد متن اون رو و یه سرچ بزاریم هر جا اسم کنترل رو پیدا کرد خط بعدش رو به عنوان متن کنترل بگیره و بهش اعمال کنه ... چطوره؟:متفکر:

مثلا به این شکل:

CmdOK
ok
CmdCancel
Cancel
CmdEdit
Edit
CmdClose
End


البته این روش بازهم واسه ترجمه متون دیتابیس که معلوم نیست از چه نوع دیتایی هستن به درد نمیخوره و واسه تغییر زبان کنترل ها خوبه:لبخند:


یا اینکه واسه خوانا شدن فایل متنی تو Tag هر کنترل شماره خطی که متن اون کنترل تو فایل هست رو بنویسیم... اینم به هرحال یه جورشه:تشویق:

حمید محمودی
پنج شنبه 20 اسفند 1388, 18:36 عصر
خب الان این شد یه چیزی:لبخند:
اگه در هر خط از فایل متنی که من با روش دوم یعنی (LAN2) نوشتم اسم کنترل رو بنویسیم و در خط بعد متن اون رو و یه سرچ بزاریم هر جا اسم کنترل رو پیدا کرد خط بعدش رو به عنوان متن کنترل بگیره و بهش اعمال کنه ... چطوره؟:متفکر:

مثلا به این شکل:

CmdOK
ok
CmdCancel
Cancel
CmdEdit
Edit
CmdClose
End


البته این روش بازهم واسه ترجمه متون دیتابیس که معلوم نیست از چه نوع دیتایی هستن به درد نمیخوره و واسه تغییر زبان کنترل ها خوبه:لبخند:


یا اینکه واسه خوانا شدن فایل متنی تو Tag هر کنترل شماره خطی که متن اون کنترل تو فایل هست رو بنویسیم... اینم به هرحال یه جورشه:تشویق:


خیر منظور من این بود .(فایل زیر رو بعد از اکسترکت با notepad باز کنید )
فکر نکنم دیگه نیاز به توضیح باشه

حمید محمودی
پنج شنبه 20 اسفند 1388, 18:59 عصر
روش اینم حدودا یه چیزی در این مایه ها :

موفق باشید

shahmahi
پنج شنبه 20 اسفند 1388, 19:03 عصر
ایشون(Shahmahi) خب انگار اون دوتا برنامه من(LAN1 LAN2) که همینطوری به ذهنم رسیدبه کارشون نیومد و صرفا به خاطر این بود که بتونن در مورد این مسئله فکر کنند.

دوست عزيز راستش من درباره برنامه هاي چند زبانه اطلاعات كمي دارم اولش برنامه شما رو ديدم يكم باهاش ور رفتم به كارم نيومد بعد برنامه جناب vbhamed رو ديدم تا حدي مشكلمو حل كرد يعني تونستم مشكلمو در باره هيدر هاي VSFlexGrid حل كنم و كار كرد بعد با توجه به بحث هايي كه شد برنامه زير رو پيدا كردم كه در واقع همون چيزيه كه جناب dcamera گفتن يعني INI File كه بعد از اين دوباره رفتم سر خونه اول ، بازم با vs و Ribbon مشكل پيدا كردم .

لطفا درمورد برنامه زير راهنماييم كنيد كه چه كنم.


راستی Shahmahi این جدولی که شما داری چه نوع اطلاعاتی رو توش لود میکنی؟

يك سري لغت هستش هم به صورت فارسي و هم انگليسي كه در واقع لغت هاي يك ديكشنري هستن. البته اين تغيير زبان رو واسه ترجمه اين لغات نميخام استفاده كنم فقط Caption هاي Ribbon و هيدر Vs رو بتونم با برنامه زير يا هر برنامه ديگه تغيير بدم مشكلم حل شده.

حمید محمودی
پنج شنبه 20 اسفند 1388, 19:20 عصر
دوست عزيز با توجه به بحث هايي كه شد برنامه زير رو پيدا كردم كه در واقع همون چيزيه كه جناب dcamera گفتن

خیر . فکر کنم شما دقیقا متوجه پست های من نشدید.

فرض کنید که در یه پروژه ای چند فرم و چند صد کنترل وجود داره. و این پروژه به 50 زبون مختلف ترجمه شده. حالا شما بعد از اینکه چهار ورژن رو بیرون دادید و خاستید که ورژن 5می رو بیرون بدید و اسم یه کنترل رو در پروژه تون عوض کنید ( بنا به دلایلی ) باید توی تموم 50تا فایل لنگج اسم اون کنترل رو تغییر بدیدن. حالا این روش مناسبه؟!!! بهتر نبود فقط توی ماژول پروژتون یکبار اسم کنترل رو عوض میکردید!!!! تازه اینم در بهترین حالتشه

shahmahi
پنج شنبه 20 اسفند 1388, 21:51 عصر
بهتر نبود فقط توی ماژول پروژتون یکبار اسم کنترل رو عوض میکردید!!!!
اين چيزي كه شما ميگين بنظرم درسته پروژه اي هم كه ضميمه كردم مال من نيست از اينترنت پيدا كردم . شما كه ايرادشو ميگين لطفا راه برطرف شدنشو هم كه ميگين همراه با كد باشه تا به نتيجه هم برسيم .


يك سوال ديگه : من چطوري ميتونم Caption هاي يك RibbonBar و يا پيغامهايي كه داخل برنامم هستش رو به ماژولم بفهمونم .

aryasoft2872
شنبه 22 اسفند 1388, 15:05 عصر
با سلام راجع به زبان و استفاده از ریبون اگه بخوایم همزمان تغییر بدیم که کار سختی می شه و از خوصله افراد خارج ولی کاری که من توی parniyan pdf reader هم انجام دادم و در در ریبون هم کاربرد داشت این بود که اومدم یک پلاگین ساده ساختم تا باهاش اطلاعاتی رو که می خوام توی لیست باکس بریزه و بعدش ذخیره کنه و موقع لود برنامه لیست باکس رو توی یک فرمی که هیچوقت باز نمی شه گذاشتم و و از روی منوی مین هرچی رو می خواستم از اون لیست باکس با توجه به اندیس گرفتم دیگه نه مشکل سرعت هست نه مشکلات پایگاه داده ولی تنها مشکلی که وجود داره اینه که برای هر بار تغییر زبان برنامه باید ریستارت بشه ولی خیلی از برنامه های خارجی هم این مشکل رو دارن و اهمیتی نداره

vbhamed
شنبه 22 اسفند 1388, 18:01 عصر
سلام

جناب dcamera و shahmahi و بقيه دوستان

من هم روشهاي چند زبانه ساختن برنامه هاي مختلف و معروف رو ديدم

اگر ممكنه مزيتها و معايب اين روشي كه در اين تاپيك معرفي كردم رو بگيد.

سرعت اجرا ؟
سرعت چند زبانه كردن اوليه برنامه ؟
انعطاف پذيري ؟
پشتيباني از اشياء مختلف و قابليت تعميم ؟
سرعت گسترش برنامه چند زبانه ؟

من يك برنامه خيلي ساده نوشتم كه خودش متنها رو از تو فايل سورس برنامه در مياره و در صورتيكه تو بانك اطلاعاتي نباشه، اون رو اضافه مي كنه، فقط كافيه شما بانك رو باز و ترجمش رو بنويسي

حالا ميشه بگين روشهايي كه شما معرفي كردين چه برتريها و چه عيبهايي نسبت به اين روش داره ؟

shahmahi
شنبه 22 اسفند 1388, 20:55 عصر
اگر ممكنه مزيتها و معايب اين روشي كه در اين تاپيك معرفي كردم رو بگيد.

سلام
مزايا شو كه خودتون توي تاپيك اول توضيح دادين حرفيم توش نيست فقط يك چيزي كه توي برنامه شما منو اذيت كرد فهموندن كپشنها به ماژولتون بود كه يكم سخت بود درباره VS كه بعد از كلي كلن جار رفتن تونستم هيدرهارو هر چند تا كه باشن رو با توجه به تابع Translate شما تغيير بدم ولي در مورد Ribbon كه اصلا نتونستم و براي tooltiptext هم اولش مشكل داشتم بعدش رفع شد و براي متن پيغام هايي كه تو برنامم بود هم نشد كه از برنامه شما استفاده كنم البته يكم به كم تجربه بودن منم برميگشت كه نتونستم از برنامه شما استفاده كنم .

كه فكر كنم استفاده از همون فايلهاي Lng راحت تر از همه باشه من بعد از كلي جست و جو تونستم با استفاده از همين نوع فايلها كپشن تمام قسمتهايي رو كه لازم داشتم عوض كنم حتي نحوه RightToLeft و متن پيغامها رو با توجه به زبان انتخابي به راحتي تونستم تغيير بدم.
در كل الگوريتمي كه استفاده كردين خيلي جالب بود ولي كار كردن باهاش بنظرم سخت اومد البته اين نظر منه.

با سلام راجع به زبان و استفاده از ریبون اگه بخوایم همزمان تغییر بدیم که کار سختی می شه و از خوصله افراد خارج ولی کاری که من توی parniyan pdf reader هم انجام دادم و در در ریبون هم کاربرد داشت این بود که اومدم یک پلاگین ساده ساختم تا باهاش اطلاعاتی رو که می خوام توی لیست باکس بریزه و بعدش ذخیره کنه و موقع لود برنامه لیست باکس رو توی یک فرمی که هیچوقت باز نمی شه گذاشتم و و از روی منوی مین هرچی رو می خواستم از اون لیست باکس با توجه به اندیس گرفتم دیگه نه مشکل سرعت هست نه مشکلات پایگاه داده ولی تنها مشکلی که وجود داره اینه که برای هر بار تغییر زبان برنامه باید ریستارت بشه ولی خیلی از برنامه های خارجی هم این مشکل رو دارن و اهمیتی نداره
در مورد ريبون هم راه حل ساده تري است كه من از همين استفاده كردم ميشه متن كپشنهاي ريبون رو در هنگاه لودشدن فرم مقدار دهي كرد به شكل زير :

Private Sub CreateActions()
CommandBars.EnableActions
CommandBars.Actions.Add ID_FILE, "Caption", "ToolTipText", "DescriptionText", "File"
End Sub

ID_FILE = شماره آيدي كه توسط اون ميشه به تمام كپشنها دسترسي داشت
بقيشم كه مشخصه ،كه يك بار به زبان فارسي مقدار دهي ميكنيد و يك بار هم به زبان ديگه كه مثلا انگليسي هستش متنها رو كامل ميكنيد بعد با توجه به انتخاب زبان توسط كاربر هر كدوم كه لازم بود رو فراخاني ميكنيد.

vbhamed
شنبه 22 اسفند 1388, 23:09 عصر
سلام

نمي دونم مشكلتون براي Ribbon و ساير اشياء چي بوده ولي يك راه كلي وجود داره كه بايد انجام بشه

1 - متن مورد نظر كه قراره ترجمه بشه بايد به نحوي با يك آي دي مشخص بشه مثلا در خاصيت Tag و غيره يا از ايندكسش استفاده بشه

2 - آي دي مورد نظر در فايل lng يا ini جستجو و پيدا بشه كه البته چون فايل متنيه، جستجو در اون با سرعت كمتري از ديتابيس انجام ميشه

3 - متن جايگزين بشه

اما در روش بالا فقط قسمت آخر رو داريم و جستجو هم كه به راحتي و با سرعت در ديتابيس انجام ميشه

براي رشته هاي داخل برنامه هم مي تونيد يك Id تعريف كنيد و با يك روال فرضي زير رشته رو از بانك لود و نمايش بديد


Function StringFromDatabase(Id as long) As String
'load string from file with Id
End Function

فكر نمي كنم كار سختي باشه اين ها
در صورتيكه در ساير روشها كار خيلي بيشتري بايد انجام بشه

حمید محمودی
شنبه 22 اسفند 1388, 23:36 عصر
من هم روشهاي چند زبانه ساختن برنامه هاي مختلف و معروف رو ديدم

اگر ممكنه مزيتها و معايب اين روشي كه در اين تاپيك معرفي كردم رو بگيد.

سرعت اجرا ؟
سرعت چند زبانه كردن اوليه برنامه ؟
انعطاف پذيري ؟
پشتيباني از اشياء مختلف و قابليت تعميم ؟
سرعت گسترش برنامه چند زبانه ؟

من يك برنامه خيلي ساده نوشتم كه خودش متنها رو از تو فايل سورس برنامه در مياره و در صورتيكه تو بانك اطلاعاتي نباشه، اون رو اضافه مي كنه، فقط كافيه شما بانك رو باز و ترجمش رو بنويسي

حالا ميشه بگين روشهايي كه شما معرفي كردين چه برتريها و چه عيبهايي نسبت به اين روش داره ؟

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

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

مزایای روش فایل متنی رو من فکر کنم توی پست های قبلی خودم گفتم (خصوصا اون شکل که خیلی تابلوه ) از معایبش هم میتونم فقط به پیچیدگی ظاهری برای برنامه نویس در زمان پیاده سازی نرم افزار اشاره بکنم. بازهم میگم با روش مالتی لنگجی که توی IDM استفاده شده میشه هر نوع متنی رو برای هر نوع خصوصیات انواع کنترل و به طور کل هر نوع متنی که نیاز به نمایش داره با سرعت خیلی بیشتر از روش بانک استفاده بشه. که البته با بانک/ریسورس (جدا و یا پیوست شده) شاید بشه شبیه به فایل متنی پیاده بشه اما فکر نکنم بشه رضایت کاربر ها رو برای تموم حالات یک برنامه ایدال چند زبانه جلب کرد . این رو هم میگم من فقط تجربه کاریمو تو این چند سال برنامه نویسی بیان کردم و کاربرهای ما خیلی زیاد از این روش راضی هستند. ولی هر کسی هر روشی که دوست داره میتونه استفاده کنه حتی اون روش Lan1 دوستمون رو :لبخند:

متاسفانه بنده دارم روی پروژههایی کار میکنم که تموم وقت منو گرفته و وقت کافی برای توضیح بیشتر رو ندارم

موفق باشید

vbhamed
یک شنبه 23 اسفند 1388, 23:06 عصر
سلام


من به مزیت های روش بانک در چند زبانه کار ندارم.

مگر ميشه موضوع به اين مهمي رو ناديده گرفت !


شما میگین که استفاده از روش بانک برای برنامه نویس ساده هست و پیچیدگی رو میاره پایین و خیلی راحت میشه ازش استفاده کرد. اما به نظر من بهتره که نظرات کاربرانی که از نرم افزارهای ما کار کردند رو لحاظ کنیم و نه راحتی خودمونو...


درسته كه ما گفتيم برنامه نويسها راحت تر مي تونن كار كنن، اما نگفتيم كار كاربران مشكل ميشه

به نظر شما گذاشتن يك فرم با يك گرايد خيلي ساده كه به بانك وصله و فقط دو تا ستون داره و امكان ويرايش و اضافه كردن زبان رو به كاربر مي ده كار سختيه ؟


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


اولا كه با بانك هم ميشه، ثانيا اگر براي هر زبان از يك ديتابيس استفاده نماييد، دانلود يك فايل ديتابيس 65 كيلوبايتي با اينترنت ذغالي هم راحته تازه اگر فشردش كنيد كه ميشه چند كيلوبايت


بازهم میگم با روش مالتی لنگجی که توی IDM استفاده شده میشه هر نوع متنی رو برای هر نوع خصوصیات انواع کنترل و به طور کل هر نوع متنی که نیاز به نمایش داره با سرعت خیلی بیشتر از روش بانک استفاده بشه.


هر نوع شي ئي كه با اين روش هم ميشه ولي دليلتون براي سرعت بيشتر چيه ؟

هدف من از اين روش اينه كه خيلي راحت بتونيد برنامتون رو چند زبانه كنيد

فرض كنيد يك برنامه حسابداري نوشتيد با 50 تا فرم و 1000 تا شي ء
مي دونيد دادن 1000 تا Id و پياده سازي اونها چه زمان طولاني يي مي بره
اينقدر كه اصلا خيلي ها منصرف ميشن، مخصوصا اگر از اول اينكار رو انجام نداده باشن

بعدش فكر كنيد هر آپديتي روي فرمتون انجام بدين بايد فايلهاي زبان رو اصلاح كنيد

ولي در اين روش، هر تغييري تو برنامتون بدين نياز به هيچ كار ديگه اي نيست
فقط كلمات و جملات جديد رو به بانكتون اضافه كنيد

حمید محمودی
سه شنبه 25 اسفند 1388, 02:00 صبح
سلام.



مگر ميشه موضوع به اين مهمي رو ناديده گرفت !
آره دیگه وقتی کاملا منظورمونو توی نوشته هامون نیاریم خوب برداشت هایی که ازش میشه ممنکه اونی نباشه که ما میخاستیم بگیم. منظورم از اون نوشته این بود که هر یکی از مشکلات و نقص هایی که در روش بانک هست ممکنه جلوی خوبی های این روش رو بگیره. بعد از همین جمله ای که شما در جوابش میگین نمیشه نادیش گرفت، بیان کردم که.



درسته كه ما گفتيم برنامه نويسها راحت تر مي تونن كار كنن، اما نگفتيم كار كاربران مشكل ميشه. به نظر شما گذاشتن يك فرم با يك گرايد خيلي ساده كه به بانك وصله و فقط دو تا ستون داره و امكان ويرايش و اضافه كردن زبان رو به كاربر مي ده كار سختيه ؟
نه به نظر من اینطور نیست که بخوایم مثلا برنامه ای رو که کاربرهامون دادیم اگه یه تولز جدا ویرایش متون لنگج بسازیم و بگیم از اون طریق اقدام کنن و یا بگیم با همین ACCESS بازش کنین ترجمش کنین کار سختی برای کاربران باشه. منظورم استفاده از روش خود بانک بود. همانطور که توی پست های اولم تو این تاپیک عرض کردم. به نطر بنده اگه بخوایم تمامی مزیت های و خاصیت یه برنامه مالتی لنکج رو پیاده بکنیم استفاده از روش فایل متنی بهتر است. به علاوه اگه دقت کنیم فایل متنی رو میشه از همین راهی که گفته شد هم ویرایش کرد و با اصلا با هر نوع ویرایشگر ساده ای مثل notepad و خیلی راحت تر از بانک



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



هدف من از اين روش اينه كه خيلي راحت بتونيد برنامتون رو چند زبانه كنيد.
ولي در روش گفته شده شما هر تغييري تو برنامتون بدين نياز به هيچ كار ديگه اي نيست
فقط كلمات و جملات جديد رو به بانكتون اضافه كنيد.

فرض كنيد يك برنامه حسابداري نوشتيد با 50 تا فرم و 1000 تا شي ء
مي دونيد دادن 1000 تا Id و پياده سازي اونها چه زمان طولاني يي مي بره
اينقدر كه اصلا خيلي ها منصرف ميشن، مخصوصا اگر از اول اينكار رو انجام نداده باشن
بله . من هم فکر کنم در خلال بحثی که با شما و دیگر دوستان داشتم بیان کردم که افراد برنامه نویس راحتر میتونن روش بانک رو پیاده کنن. خوب من بیان کردم که بستگی داره که بخوایم چه برنامه ای بنویسیم!! و در واقع چه افرادی اونو مینویسن.و تا چه حدی میخان برنامه رو بست بدن. همانطور که توی پست قبلی هم گفتم ( و شما هم الان گفتین ) پیچیدگی ظاهری در روش فایل متنی اجتناب ناپذیر است. ولی گروه برنامه نویسی متشکل از افراد مختلفی برای کارهای مختلف هستش که هر کدوم وظایف خودشونو باید انجام بدن. اونی که میخاد رهبری افراد رو برای پیشبرد پروژه جلو ببره بایستی مقدار بست دادن نرم افزاری رو که توی دستور کار گروه هست پیش بیینی کنه تا حداقل از دوباره کاری ها و بسیار مشکلات دیگه ای که ممکنه توی یه پروژه برزگ (مثل همون پایگاه داده و حسابداری که مثال زدین!) کمتر رخ بده. خوب مالتی لنکج در یه برنامه ای که در سطح ملی قراره منتشر بشه فکر کنم بدیهی هست که ابتداً بهش فکر بشه تا در حین پیشرفت پروژه مشکلی پیش نیاد. البته اگه توی vb از اول مالتی لنگج فکر بهش نشه و بعد از یه دفعه بخوایم باهاش به روش متنی استفاده کنیم خوب مشکلات خاص خودش رو داره. اما به نظر من خوب برنامه های خیلی بزرگ رو با وی بی 6 نمینویسن (به دلیل ضعف هایی که در برابر زبان های هم رده خودش داره )



بعدش فكر كنيد هر آپديتي روي فرمتون انجام بدين بايد فايلهاي زبان رو اصلاح كنيد
این مطلبی که شما میگین بستگی به نوع برنامه و برنامه نویس هاش داره. ما که تا حالا به مشکلی بر نخوردیم. درسته که اگه مثلا یه کنترل حذف بشه متنش توی تموم فایل های متنی هست . خوب توی بانک هم همینطوره . توی زبانی که ما کار میکنیم بدست آوردن لیست کنترل های جدید خیلی راحتره . به علاوه کامپوننت های زیادی با روش های بسیار ایده آل برای مالتی لنکج وجود داره. البته ما از روش خودمون استفاده میکنیم.



هر نوع شي ئي كه با اين روش هم ميشه ولي دليلتون براي سرعت بيشتر چيه ؟


بله من هم گفتم که اگه کار بشه روش بانک رو میشه به روش فایل متنی نزدیک کرد. در مورد سرعت هم بله اگه بخوایم روی کامپوتر خودمون که برنامه های سنگین رو خیلی راحت باز میکنه بسنجیم، سرعت فایل متنی و بانک حس نمیشه کرد. اما اگه روی کامپوتر هایی که رم و سی پی یو پایینی دارن( و امثالهم) امتحان بشه فکر کنم اون موقع بیشتر مشخص بشه. شاید این بحث مطرح بشه که امروزه کامپوتر ها همه سرعت بالایی در لود کردن برنامه های سنگین دارن اما به هر حال بایستی کمترین حافظه برای حالات یه اپلکیشن در حال اجرا از طرف برنامه نویس لحاظ بشه. و به علاوه هم روش بانک هم روش ریسورس (با ترکیب های مختلف ) در مقابل روش متنی که عرض کردم بصورت عملی تست شده اند و برای کاربران ما کارایی و راحتی کمتری رو داشته.

در آخر هم راستش من الان که دارم این پست رو ریپلای میکنم هر چی فکر میکنم چیزی به خاطرم نمیاد که چه برنامه هایی مهم و معروفی الان از روش بانک استفاده میکنن؟؟

موفق باشید

mds_boy
یک شنبه 14 شهریور 1389, 23:33 عصر
از vbhamed (http://www.barnamenevis.org/forum/member.php?u=10624) عزیز ممنونم که این تاپیک رو ساخته، من هم تو فکرش بودم، و خیلی مفید بود و از برنامه خوبش هم ممنونم.
اگه دوستانی که تجربه دارن در این زمینه، کمی راهنمایی کنن، نمونه مثالی از روشهای دیگه بزارین و .... .
خودم دنباله این موضوع هستم، اگر مثالی یا مطلبی بدرد بخور دیدم در اینجا اضافه خواهم کرد.
با تشکر.

l4dl4d
دوشنبه 12 تیر 1391, 09:21 صبح
زبونش عوض نميشه...

از vbhamed عزیز ممنونم که این تاپیک رو ساخته، من هم تو فکرش بودم، و خیلی مفید بود و از برنامه خوبش هم ممنونم.
عالي بود واقعا!!!

سپهر-111
شنبه 05 اسفند 1391, 10:21 صبح
سلام دوستان
من میخوام از این روش که دوست گرامی (vbhamed) ذکر کردند ، برای چند زبانه کردن نرم افزار استفاده کنم
ولی میخوام فایل بانک اطلاعاتی توی ریسورس باشه
چطور میتونم فایل بانک اطلاعاتی رو در ریسورس قرار بدم ؟؟
ممنون میشم راهنمایی بفرمایید
باتشکر از حسن توجه دوستان

حمید محمودی
شنبه 05 اسفند 1391, 10:27 صبح
سلام،

فایل بانک اطلاعاتی رو میشه در ریسورس قرار داد؛ ولی تا اونجایی که اطلاع دارم برای ارتباط با اون ، باید در مکانی از هارد بازیابی/اکسترکت بشه و باهاش ارتباط برقرار کرد؛
موفق باشید.

سپهر-111
شنبه 05 اسفند 1391, 10:38 صبح
سلام،

فایل بانک اطلاعاتی رو میشه در ریسورس قرار داد؛ ولی تا اونجایی که اطلاع دارم برای ارتباط با اون ، باید در مکانی از هارد بازیابی/اکسترکت بشه و باهاش ارتباط برقرار کرد؛
موفق باشید.

سلام

اگه در ریسورس قرار بدم ، بعدش با چه دستوری ، در مسیری که برنامه وجود داره اکسترکت کنم ؟
ممنون میشم راهمنایی بفرمایید

حمید محمودی
شنبه 05 اسفند 1391, 10:44 صبح
Public Function SaveResItemToDisk( _
ByVal iResourceNum As Integer, _
ByVal sResourceType As String, _
ByVal sDestFileName As String _
) As Long
'=============================================
'Saves a resource item to disk

'Returns 0 on success, error number on failure
'=============================================

'Example Call:
' iRetVal = SaveResItemToDisk(101, "CUSTOM", "C:\myDB.MDB")

Dim bytResourceData() As Byte
Dim iFileNumOut As Integer

On Error GoTo SaveResItemToDisk_err

'Retrieve the resource contents (data) into a byte array
bytResourceData = LoadResData(iResourceNum, sResourceType)

'Get Free File Handle
iFileNumOut = FreeFile

'Open the output file
Open sDestFileName For Binary Access Write As #iFileNumOut

'Write the resource to the file
Put #iFileNumOut, , bytResourceData

'Close the file
Close #iFileNumOut

'Return 0 for success
SaveResItemToDisk = 0

Exit Function
SaveResItemToDisk_err:
'Return error number
SaveResItemToDisk = Err.Number
End Function

سپهر-111
شنبه 05 اسفند 1391, 11:07 صبح
ممنون زحمت کشیدید
کدی گذاشتید درست بود
حالا اگه بخوام این فایل پس از بسته شدن برنامه از بین ببرم باید از چه کدی استفاده کنم ؟؟

حمید محمودی
شنبه 05 اسفند 1391, 11:31 صبح
حالا اگه بخوام این فایل پس از بسته شدن برنامه از بین ببرم باید از چه کدی استفاده کنم ؟؟ فکر میکنم حذف کردن فایل در زمان خروج از برنامه کافی باشه.


Kill "C:\myDB.MDB"روش های دیگه هم اینجا (http://stackoverflow.com/questions/1466766)ذکر شده؛

سپهر-111
شنبه 05 اسفند 1391, 11:39 صبح
ممنون دوست عزیز
از این روش استفاده کردم ولی فکر کنم قبلش باید فایل بسته بشه (آزاد بشه) و بعدش بتونم فایل حذف کنم
حالا چطور میتونم ببندمش ؟؟
ممنون میشم راهنمایی بفرمایید

حمید محمودی
شنبه 05 اسفند 1391, 11:51 صبح
مطمئن نیستم ولی از اونجایی که روش این تاپیک بر اساس بانک اطلاعاتی هست و از Data control استفاده شده، فکر میکنم با بستنش میتونید فایل رو هم ازاد کنید؛


Data1.Recordset.Close

Data1.Database.Close

فقط تست نکردم؛ تست کنید ببنید جواب میده یا نه...

البته بانک اطلاعاتی اکسس فایلی با پسوند .ldb میسازه که نشون دهنده باز بودن فایله؛ و به نظر میرسه که وقتی برنامه از حافظه خارج شد؛ ارتباط Data control با اون فایل قطع میشه و نیازی به بستن به صورت دستی بوجود نمیاد. چون اون فایل .ldbهم از بین خواهد رفت با بستن برنامه...

سپهر-111
شنبه 05 اسفند 1391, 11:59 صبح
مطمئن نیستم ولی از اونجایی که روش این تاپیک بر اساس بانک اطلاعاتی هست و از Data control استفاده شده، فکر میکنم با بستنش میتونید فایل رو هم ازاد کنید؛


Data1.Recordset.Close

Data1.Database.Close

فقط تست نکردم؛ تست کنید ببنید جواب میده یا نه...

البته بانک اطلاعاتی اکسس فایلی با پسوند .ldb میسازه که نشون دهنده باز بودن فایله؛ و به نظر میرسه که وقتی برنامه از حافظه خارج شد؛ ارتباط Data control با اون فایل قطع میشه و نیازی به بستن به صورت دستی بوجود نمیاد. چون اون فایل .ldbهم از بین خواهد رفت با بستن برنامه...


ممنون دوست عزیز از وقتی که گذاشتی و جواب دادید .
بله این دستور درست بود

Data1.Database.Close

سپهر-111
شنبه 05 اسفند 1391, 16:54 عصر
سلام مجدد خدمت دوستان واساتید گرامی


من از روشی که جناب vbhamed ذکر کردند ، برای چند زبانه کردن نرم افزارمیخوام استفاده کنم

حالا میخوام بدونم چطور میتونم رشته های داخل برنامه رو هم چند زبانه کنم ؟!

و سوال دیگه اینکه اگه یک رشته حدود 500 کاراکتر یا بیشتر باشه ، ایا بازم میشه از این روش استفاده کرد ؟


ممنون میشم راهنمایی بفرمایید

با تشکر

vbhamed
شنبه 05 اسفند 1391, 19:59 عصر
سلام

براي رشته هاي داخل برنامه بهترين راه اينه كه از يك شماره Id براي هر رشته استفاده كرده و ابتداي برنامه يا ابتداي نمايش هر فرم، رشته هاي مربوط به اون رو از ديتابيس بخونيد
ضمنا تعداد كاراكتر محدوديت خاصي نداره اگر بزرگ بود مي‌تونيد از فيلد memo استفاده كنيد

سپهر-111
شنبه 05 اسفند 1391, 20:09 عصر
سلام
شوربختانه من تا حالا با اکسس کار نکردم ، در این زمینه کاملا مبتدی هستم
اگه براتون امکان داره یک فایل اکسس ایجاد کنید که کاراکتر بیشتر از 255 تا توش جا بگیره (اخه اون فایلی که شما تو برنامه تون استفاده کرده بودید رو نتونستم سایز فیلد هارو تغییر بدم !)
و یک مثال بزنید که چه جوری ID رو در فایل اکسس وارد کنم و بعدش چطوری توی برنامه فراخوانی کنم
ممنون میشم راهنمایی بفرمایید
باتشکر از حسن توجه شما

vbhamed
شنبه 05 اسفند 1391, 20:56 عصر
سلام

در زمينه كار با ديتابيس تو سايت نمونه زياد هست
Id يك فيلد در اكسس هست، ضمنا سايز فيلد اگر از نوع Text باشه نمي تونه خيلي زياد باشه بلكه بايد نوعش Memo انتخاب بشه

سپهر-111
شنبه 05 اسفند 1391, 21:26 عصر
سلام
اگه داخل برنامه ای که زحمت کشیدید وساختید ، فراخوانی یک رشته رو هم بهش اضافه کنید (برای تغییر زبان) دیگه نور اعلا نور میشه :تشویق:
(توی سایت هم سرچ کردم ولی چیزی متوجه نشدم)

vbhamed
یک شنبه 06 اسفند 1391, 12:51 عصر
سلام

به برنامه ارتباطي نداره و تغييري توي اون نياز نيست، نوع فيلد بايد داخل بانك تعيين بشه

vbhamed
پنج شنبه 14 شهریور 1392, 10:23 صبح
سلام

دوستان، اين روش يك سري مزاياي ديگه هم داره كه سایر روشها ندارند یا محدودیت بسیاری دارند که مي‌تونيد در زير ببينيد

1 - عبارات مشابه در فرمهاي مختلف نياز به ترجمه مجدد ندارند و به همين دليل تغيير ترجمه يك عبارت هم كار راحتيه و فقط يكبار انجام ميشه نه به تعداد اشياء

2 - زمان لازم جهت چند زبانه كردن يك برنامه به شدت كاهش پيدا مي‌كنه

3 - مي‌تونيد رشته هاي بسيار بزرگ رو هم به راحتي ترجمه كنيد مثلا يك مقاله بزرگ كه داخل تكست باكس Multiline هست چون مي‌تونيد براش فيلد Memo در نظر بگيريد و اين يعني عدم محدوديت

4 - با گسترش اين روش مي‌تونيد حتي اصوات و تصاوير رو هم ترجمه كنيد !!!! يعني مثلا براي زبان انگليسي از اصوات انگليسي و براي فارسي از اصوات فارسي استفاده كنيد

5 - مي‌تونيد با اين روش برنامه هايي كه توسط افرادي ديگه نوشته شده و فقط فایل exe اونها در دسترسه رو هم با در آوردن هندل اشياء اون برنامه ترجمه كنيد