سلام <br>
من یک سوال درباره کدهای تغییر زبان سیستم دارم.<br>
در یک فایلی که در رویداد FORMLOAD آن میخام بنویسم اگر زبان سیستم فارسی هست تکست 1 را مساوی "سلام" و اگه زبان سیستم انگلیسیه اون رو مساوی "HELLO" قرار بده. ولی کار نمیکند
سلام <br>
من یک سوال درباره کدهای تغییر زبان سیستم دارم.<br>
در یک فایلی که در رویداد FORMLOAD آن میخام بنویسم اگر زبان سیستم فارسی هست تکست 1 را مساوی "سلام" و اگه زبان سیستم انگلیسیه اون رو مساوی "HELLO" قرار بده. ولی کار نمیکند
آخرین ویرایش به وسیله Shahramdindoust : یک شنبه 09 آذر 1399 در 14:04 عصر
ضمناً کدهای نمونه رو برای اجرا در دو سیستم 32 و 64 بیتی اصلاح کردم
ممنونم
جسارتا فقط انگلیسیش میاد یعنی وقتی زبان سیستم en هستش عبارت hello ظاهر میشه ولی وقتی زبان فارسیه تکست باکس رو خالی نشون میده
میتونه ایراد بخاطر آفیسم باشه؟
یا اینکه انواع زبان فارسی داریم :مثل Persian standard keyboard ,Persian ,... ؟ همچنین بازهم کدهای قرمز که اتفاقا ارور هم نمیده نمیدونم دلیلش چیه
من فک کنم اگه سیستم 32 باشه هم خط های 64 رو قرمز کنه . باز هم ارور ندهredlines.jpg
درنمونه جدید داخل فرم یک لیبل قرار دادم که نام زبان در آن نمایش داده میشود . در سیستم خودت امتحان کن ببین نام زبان فارسی با چه کلمه نمایش داده میشود و آن نام هم در قسمت شرط با OR اضافه کن
کدهای قرمز مربوط به سیستم 32 بیتی است و چون سیستم شما 64 بیتی است کدها بصورت قرمز نمایش میدهد .مشکلی نداره
متاسفانه باز هم جواب نداد تو لیبل نام persian (iran)که تو لیبل بود را با or به شرط اضافه کردم ولی باز هم وقتی فارسی هست تکست باکس اhello نشون میده با دو سه تا زبان فارسی مختلف امتحان کردم نشد زبان ها من :
غغ.png
اینمورد در ویندوز های مختلف باید بررسی شود که عبارت زبان کیبورد در تسکبار ویندوز به چه صورتی نمایش داده میشود .
حالا با این فرض که کلمه اول عبارت زبان فارسی و انگلیسی در سیستم های مختلف با هر ترکیبی Persian و English است باید کد شرطی به این صورت تغییر پیدا کند که اگر نام زبان از سمت چپ به تعداد 7 کارکتر مساوی Persian بود تکست باکس را مساوی «سلام» و اگر نام زبان از سمت چپ به تعداد 7 کارکتر مساوی English بود تکست باکس را مساوی «Hello» قرار دهد
نمونه جدید رو بررسی بفرما !
سلام روز بخیر دوستان این بحث خیلی جذاب بود و بسیار ممنون از همه شما ویندوز من 8.1 هست و بدون مشکل کار کرد ......
حالا یک موردی هست که اگر امکانش باشه من ممنون میشم
میشه این توالی رو بصورت ماژول دراورد که بشه تو همه فرم ها ازش استفاده کرد
به این ترتیب که در هر فرم یک لیبل بالای فرم بزاریم و وضعیت زبان رو در لحظه در همون لیبل گزارش بده
مثلا بنویسه : زبان شما فارسی است---زبان شما انگلیسی است
این مورد مهم جلوی خطاهای نااگاهانه کاربر رو میگیره و در زمان خیلی صرفه جویی میشه ....اصلا این موضوع فارسی انگلیسی بوده کیبورد واقعا اعصاب خورد کن هست
بازم از شما ممنونم که وقت گذاشتین و این برنامه رو نوشتین ....خدا خیرتون بده
فعلاً که تنها استاد تالار اکسس جناب eb_1345 هستن که به اکثر تاپیک های مهم پاسخ های منطقی و کاربردی میدهن
سلام
خواسته شما در فایل ساده نمونه ضمیمه برآورد شده
در فایل ضمیمه یک فرم اصلی وجود دارد که منوهای برنامه در آن قرار دارد . در واقع این فرم بعنوان فرم مادر در طول زمان اجرای برنامه باز است و با بسته شدن آن برنامه بسته میشود . در رویداد تایمر این فرم ماژول مربوطه فراخوانی میشود . و در هر شرایط زبان سیستم را نمایش میدهد
آخرین ویرایش به وسیله eb_1345 : دوشنبه 10 آذر 1399 در 14:50 عصر دلیل: اصلاح
عالی... نفس شما گرم ..در همه امور برقرار ...باشید ...
کم هوشی من رو در درک موضوع ببخشید.سوال دارم: با این فایل که ساختید الان اون اتفاق (تغییر عبارت از سلام به hello همگام با تغییر زبان)، اگر ما بخواهیم اون اتفاق در چندین فرم بیوفته آیا فقط کدها رو در یک فرم بیاندازیم کافیه؟ فک کنم خوب منظورم رو نرسوندم. یعنی اگر ما فرم های مختلفی داشته باشیم و بخواهیم اتفاقاتی شبیه بالایی در هرکدوم مجزا و به اشکال مختلف بیوفته چطور؟ واسه همین گفتم ماژول بشه عالی میشه.
قابل توجه
شما درزمان ورود داده ها بهتر این است که از عملکرد خود اکسس استفاده کنید .
در property هر فیلد .
در تب format. انتهای لیست .شما نوع زبان تایپ رو انتخاب میکنید .
در اون صورت .زبان سیستم هر چه باشد .به محض ورود به ان فیلد به زبان تنظیم شده تغییر میکنه .
و این مشکل زبان در فیلدها پیش نمیاد .
----------------
نوع دیگر در تایپ در فیلدها به اینصورت هست
در برنامهنویسی بعضی سایتها متوجه میشوید که به محض ورود پیغام میدهد که زبان سیستم خود را به انگلیسی تغییر دهید .
در این موارد .در رویداد keypress فیلدها کد داده شده که متن فارسی استاندارد شده با کی برد انگلیسی تایپ بشه .
----------------
و نکته این تاپیک
اینجا هدف مشاهده زبان سیستم هست و تغییر زبان به فارسی بهمحض ورود به فرم اصلی اتفاق میفته و دیگه نیاز به کد نویسی و اصلاح زبان format هر فیلد در تمام فیلدها و فرمها به منظور تایپ فارسی نخواهید داشت
حتی میشه بر اساس زبان سیستم فرمها روجوری طراحی کرد که رنگ بک گراند فرم با تغییر زبان سیستم به رنگ مورد نظر تغییر کنه.
-----------------
نکته اخر.
با کد این تاپیک زبان سیستم از ابتدا تشخیص دادهمیشه و به محض باز شدن فرم اصلی به فارسی تغییر میکنه .
و حالا اگر زمان سیستم فارسی باشه .تا زمانی که تغییر داده نشده همچنان در تمام مراحل کار با سیستم ثابت میمونه . حتی اگر فرمهای دیگر هم باز بشه .
مگر اینکه با alt.shift و یا با کد در یک مرحله از ثبت داده ها مجدد زبان کی برد تغییر کنه .از اون مرحله به بعد هم به زبان تغییریافته ثابت میمونه .
------
آخرین ویرایش به وسیله padide55 : سه شنبه 11 آذر 1399 در 00:30 صبح
بذارین اینجوری بگم
فکر کنیم کاربران ما توصیه ها رو در بالای فرم ها میبینند و یا دستورالعمل هایی(در قالب لیبل یا تکست باکس) رو میبنند که باید در حین استفاده از فرم اون ها رو انجام بدن. فقط فرد کاربر در صفحه اصلی میخاد بگه که اون لیبل ها رو فارسی میخاد ببینه یا انگلسی. البته میشه فرم ها دوبار ساخت یه بار انگلیسی یه بار فارسی. ولی خیلی طولانی میشه هر بار هم که نمیشه اون کدها رو کپی کرد برای همین نیاز به ماژول دارم تا لازم نباشه اون کدها رو توی مثلا 150 تا فرم کپی کنم
و در یک کلام انگار میخای زبان برنامه و حتی اسم دکمه ها رو برای کاربر خارجی انگلیسی کنی مثلا دکمه "پرینت" بشه دکمه "print" و تکست باکس یا لیبل "لطفا نام خود را وارد کنید" بشه "please enter your name" بنابراین اگر فرد کاربر در صفحه اصلی زبان رو انگلیسی انتخاب کنه نه تنها زبان سیستم انگلیسی میشه لیبل ها و دکمه ها هم انگلیسی میشن ... البته نمیخام لیبل ها و دکمه ها رو دوبار بسازم که هر بار یکی visible بشه
سرتان را بدرد آوردم عذر تقصیر
آخرین ویرایش به وسیله Shahramdindoust : سه شنبه 11 آذر 1399 در 11:38 صبح
هر چند نوع زبان کی برد ارتباطی با نمایش فرم اصلی نداره و میشه در گوشه فرم اصلی فقط یک لیست باکس برای انتخاب زبان فرم قرار داد ولی
علی ایحالا در این تاپیک در ورود نوع زبان قابل مشاهده و تغییر شده
میشه بر اساس لیبل فرم اصلی
فرمهای دیگه رو جوری تعریف کرد که لیبل فارسی و یا انگلیسی نمایش داده بشه.ولی باز هم کد در هر فرم میخواید که لیبل رو عوض کنه.و کدها طولانی میشه.
مگر اینکه لیبلها هم کد بندی باشه مثلا بجای label1 و ..
برای فارسی داشته باشیم lablefa1
و برای انگلیسی داشته باشیم lableen1
و الی اخر
و با یک کد در ورودی فرم همه لیبلها عوض بشه
با کد نویسی به روش for
تقریبا
به این صورت. اصل کد نویسی به عهده دوستان
Dim Counter As Integer
For Counter = 1 to n
if
اگر زبان فارسی بود
then
لیبلهای فارسی visible=true
else
لیبلهای انگلیسی visible=true
Next
یک همچین چیزی ...
Counter رو عدد سمت راست لیبلها در نظر میگیریم
با عرض پوزش از دوستانی کهبرنامهنویسی انجام میدهند .
اگر هدف پست قبل همینه لطفا کد جدید رولطف کنید ارائه بدین .
آخرین ویرایش به وسیله padide55 : سه شنبه 11 آذر 1399 در 01:00 صبح
کافیه دو خط کد زیر رو در رویداد Form_Timer هر فرم وارد کنید!
If Left(Form_FrmMain.lblCurrentsystemlanguage.Caption , 4) = "Çäá" Then Text1 = "Hello"
If Left(Form_FrmMain.lblCurrentsystemlanguage.Caption , 4) = "ÝÇÑÓ" Then Text1 = "ÓáÇã"
در کدهای فوق فرض شده text1 همان تکست باکسی است که قرار است کلمه hello یا سلام در آن نمایش داده شود.
ضمناً بلحاظ اینکه در اغلب موارد در تشخیص ی و ک فارسی و ی و ک عربی مشکل ایجاد میشود بنده از تابع left به تعداد 4 کارکتر اول که در آن حروف ی و ک وجود ندارد استفاده کرده ام.
دقیقا همینه
به نظر من بهتره از تغییر متن به صورت سلام و hello اجتناب کنید و با visible کردن دو لیبل با متن سلام و hello مشکل روحل کنید .
اینجوری با یک خط کد .کل لیبلهای فرم عوض میشه .
فارسی ها مخفی و انگلیسی ها قابل مشاهده.
با عرض پوزش مجدد
طبق نمونه
اگر لیبلها کد بندی و مرتب باشند .
فرم 1 را برای هر دو زبان فارسی و انگلیسی باز کنید و لیبلها را مشاهده کنید
حالا بجای نمایش متن لیبل بصورت helloو سلام
با visibleنمودن لیبل فارسی و انگلیسی.که هر فیلد دو لیبل داشته باشه .که مشکل ی و ک هم نداره
اینجا میتوان رنگ فیلدها و هر تغییری رو اعمال کرد .حتی فونت مورد نظر و......
ضمنا تغییر رنگ فرم اصلی بر اساس زبان -قابل اجرا برای تمام فرمها و هر مورد دیگه......
فقط یک لیست باکس کم داره که با اون بشه از بین زبان کیبردهای نصب شده بوسیله کد یک زبان را انتخاب نمود .
آخرین ویرایش به وسیله padide55 : سه شنبه 11 آذر 1399 در 10:30 صبح
سلام مجدد
شما اگر صفحه اصلی زبان فارسی باشه فرم 1 رو باز کنید
اگر صفحه اول انگلیسی باشد هم فرم 1 رو باز کنید
لیبلها فارسی و انگلیسی میشه .
به همین روش باید عنوان کلیدها و .. رو عوض کنید .
ترکیبی از مخفی و اشکار نمودن لیبل
و تغییر لیبل استفاده کنید .
ولی اگر از تغییر لیبل استفاده کنید باید متن هر لیبل رو در فرم بنویسید و گیج کننده خواهد بود .
بهتره همون لیبل رو با فونت دلخواه ایجاد کنید و سپس مخفی و قابل مشاهده انجام بدین .
کدها رو هم به ترتیب شماره بندی کنید که با یک خط فرمول همه فارسی ها نمایش داده بشه و با یک خط فرمول همه انگلیسی ها .
در ارتباط با با دو زبانه یا چند زبانه کردن برنامه نمونه ای رو بطور آزمایشی تهیه کردم که فیلم (27 ثانیه ای ) اون رو در لینک زیر گذاشته ام
ضمناً با عرض پوزش از دوستان ، بنده به دالایلی (عمدتاً استقبال نکردن دوستان صرفاً نظارگر) زین پس تصمیم دارم سورس بعضی از نمونه کارها رو در اختیار نگذارم و صرفاً به ارائه فیلمی در خصوص نتیجه کار انجام شده اکتفا کنم .
https://s17.picofile.com/file/841598...guage.mp4.html
ضمناً باید عرض کنم که اینکار فقط با چند خط کد نویسی در بخش ماژول ها و تهیه یک جدول حاوی کلمات انگلیسی و ترجمه فارسی آنها انجام شده .
آخرین ویرایش به وسیله eb_1345 : سه شنبه 11 آذر 1399 در 15:52 عصر
حالا اگه میشه افتخار بفرمایید این فایل رو هم بذارین بی زحمت
آخرین ویرایش به وسیله Shahramdindoust : سه شنبه 11 آذر 1399 در 19:36 عصر
خودتون متوجه شدین که تشبیه مناسب و جالبی در پست دیروزتون بکارنبردین پست رو ویرایش کردین . بنده دیروز درپاسخ پست شوخی گونه و در عین حال متلک آمیز شمامطالبی رو نوشتم ولی از ارسال اون صرفنظر کردم ,چون احساس کردم ممکن است مطالب برای بعضی دوستان باعث سوء تفاهم شود .
دوست بزرگوار! اگر واقعاً هدفت اینست که در زمینه برنامه نویسی به یک اشراف نسبی برسید باید تلاشتون رو مضاعف کنید.
توصیه میکنم چند وقتی با نمونه برنامه های ساده تر که کدهای پیچیده ای ندارند کار کنید .
در پست 26 به شما پیشنهاد دادم که موضوع مورد درخواست شما در ادامه توضیحات این تاپیک مربوط به موضوع چند زبانه کردن برنامه است که باید درتاپیک جدیدی مطرح کنید ولی ...
اون نمونه برنامه هم که ویدئو نحوه اجرایش رو قرار داده بودم از روی کنجکاوی خودم انجام دادم و قصد این بود که ذهن دوستانی که تمایل به راهنمائی شما دارند متوجه خواسته شما بکنم
موفق باشید
سپاسگذارم
راستی تایپیکی بنام keycode حروف خاص هم هست که استقبالی ازش نشد اگر کسی زحمت بکشه یک جوابی بده ممنون هستم
https://barnamenevis.org/showthread....AE%D8%A7%D8%B5
اگر بخواهیم بگوییم وقتی فرم فعال شد اتوماتیک زبان رو فارسی کن و پیام بده زبان شما فارسی شد چیکار باید بکنیم ؟
من چون دیدم این تاپیک در مورد تغییر زبان هست اینجا گفتم اگر لازم میدونید تاپیک جدا بزنیم ....
من تو برنامم فیلدی ندارم که انگلیسی باشه پس نیازی هم ندارم ...کاربر وقتی برنامه رو minimize کنه بره یکجای دیگه با زبان انگلیسی کار کنه و برگرده تو برنامه .....یا
از همون اول که برنامه رو باز می کنه اتوماتیک زبانش فارسی بشه ...و پیام بده فارسی شد ....////////////////////////////////ممنونم
سلام
کد مربوط به تغییر زبان به فارسی یا انگلیسی در نمونه پست 2 ارائه شده .
#If Win64 Then
Private Declare PtrSafe Function ActivateKeyboardLayout Lib "user32" (ByVal HKL As Long, ByVal flags As Long) As Long
#Else
Private Declare Function ActivateKeyboardLayout Lib "user32" (ByVal HKL As Long, ByVal flags As Long) As Long
#End If
Private Sub Form_Activate()
Call ActivateKeyboardLayout(1065, 1)
End Sub