PDA

View Full Version : سوال: get and set non-unicode system locale for windows os



kiadata
یک شنبه 24 اسفند 1393, 09:51 صبح
آیا امکانش هست که زبان سیستم رو بوسیله برنامه نویسی طوری تغییر داد که متن هایی مثل متن فارسی که در بسیاری از موارد در سیستم یونیکد به درستی نمایش داده نمیشه , مشکلش حل شه.
مثلا توی ویندوز 7 باید مسیر زیر طی بشه :

Control panel\region and language\Adminstrative\Change system local

و در اونجا زبان مورد نظر را انتخاب کنیم.
آیا روشی برای انجام این کار از طریق برنامه نویسی با سی شارپ هست؟

کدهایی که پیدا کردم CultureInfo تغییر میده اما تغییرات در کنترل پنل ذخیره نمیشن لطفا راهنمائیم کنید ممنونم.
کد اول :


System.Globalization.CultureInfo ci = new System.Globalization.CultureInfo("fa-IR");
System.Threading.Thread.CurrentThread.CurrentCultu re = ci;
System.Threading.Thread.CurrentThread.CurrentUICul ture = ci;


کد دوم :

Thread.CurrentThread.CurrentUICulture = new CultureInfo("fa-IR");

plus
یک شنبه 24 اسفند 1393, 10:42 صبح
از تابع SetLocaleInfo (https://msdn.microsoft.com/en-us/library/dd374049%28v=vs.85%29.aspx) در Windows API استفاده کنید. البته اینکار از طریق نرم افزار توصیه نمیشه. ممکنه تو کار برنامه های دیگه اختلال ایجاد کنه.
برای اجرا به دسترسی Administrator برای برنامه احتیاج دارین.
برای استفاده از توابع Windows API در C# در همین فروم جستجو کنید نمونه هست.

kiadata
دوشنبه 25 اسفند 1393, 09:08 صبح
با سلام دوستان عزیزم مشکلم حل شد با دستکاری فایلهای رجیستری که به زبان( Arabic(UAE تنظیم میکنم میتونید با داشتن کدهاش از اینترنت مقادیر رجیستری و با این کدها مقدار

بدین اینم کدهاییکه استفاده کردم.



RegistryKey myKey = Registry.LocalMachine.OpenSubKey("SYSTEM\\CurrentControlSet\\Control\\Nls\\CodePage", true);
myKey.SetValue("OEMCP", "720", RegistryValueKind.String);


RegistryKey myKey1 = Registry.LocalMachine.OpenSubKey("SYSTEM\\CurrentControlSet\\Control\\Nls\\Language", true);
myKey1.SetValue("Default", "3801", RegistryValueKind.String);

RegistryKey myKey2 = Registry.LocalMachine.OpenSubKey("SYSTEM\\CurrentControlSet\\Control\\Nls\\Locale", true);
myKey2.SetValue("Default", "00003801", RegistryValueKind.String);