# Native Code > برنامه نویسی در Delphi >  چگونه زبان تعیین شده در regional languauge‌را تغییر دهیم

## javad_hosseiny

چگونه می توان با کدنویسی می توان در قسمت advance‌ مربوط به regional languauge‌ویندوز زبان non-unicode را به زبان دلخواه (مثلا عربی یا فارسی) تغییر داد

----------


## شکوه

سلام دوستان 
سال نو مبارک
اگه منظورت رو درست متوجه شده باشم 
کد زیر صفحه کلید رو تغییر میده
کد زبان مورد نظر =:  Application.BiDiKeyboard
  انگلیسی 00020409
  فارسی 00000429
موفق باشین

----------


## javad_hosseiny

ممنون ولی منظورم این نیست (کد مربوطه جهت تغییر صفحه کلید است ) حال آنکه منظورم من تغییر کلی ساختار زبان non-unicode به زبان دیگر (مثلا عربی) است (مشکل اصلی از آنجا ناشی می شود که در برخی Object های مورد استفاده در برخی زبانها مانند: Listbox,grid,combox) زبان فارسی را به عنوان یک زبان right-to-left نمی شناسد و در متن فارسی را از سمت چپ تراز میکند که با تغییر گزینه موردنظر در کنترل پنل به زبان عربی این مشکل حل می شود و حال منظور من این است که این کار را در برنامه نصب با برنامه نویسی انجام بدهم تا نیازی به تغییر آن توسط کاربر نباشد

----------


## Farshad Paydar

با سلام.
من فکر کنم موفق شدم بفهمم چه کلیدی باید در رجیستری تغییر کند تا این مشکل حل شود البته من فقط توانستم روی دو تا سیستم تست کنم . لطفا شما هم تست کنید و نتیجه را بگید . امیدوارم درست باشه :
برای اینکه زبان برنامه های non-unicode را به *فارسی* تغییر دهید به آدرس زیر در رجیستری بروید :
&#91;HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\C  ontrol\Nls\CodePage&#93;و این مقادیر را set کنید :
"ACP"="1256"
"OEMCP"="720"
"MACCP"="10004"
همچنین به آدرس زیر بروید :
&#91;HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\C  ontrol\Nls\Language&#93;
و مقدار زیر را set کنید :
"Default"="0429"

برای اینکه زبان برنامه های non-unicode را به *انگلیسی* تغییر دهید به آدرس زیر در رجیستری بروید :
&#91;HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\C  ontrol\Nls\CodePage&#93;و مقادیر زیر را set کنید :
"ACP"="1252"
"OEMCP"="437"
"MACCP"="10000"
همچنین به آدرس زیر بروید :
&#91;HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\C  ontrol\Nls\Language&#93;
و مقدار زیر را set کنید :
"Default"="0409"

موفق باشید .

----------


## شکوه

سلام
"اقا شکوه ممنون "
من آقا نیستم

----------


## Touska

ای ولا عالی بود  :flower:

----------


## ebnsina

با تشکر از آقای Farshad Paydar   :flower: 

آیا این تغییرات فقط برای این کاربر ذخیره میشود یا برای تمام کاربران ؟

----------


## ma_mohsen

ضمنا کد پیچ سیستم را می توانی از طریق GetACP بدست بیاوری که اگر عربی تنظیم شده باشد 1256 خواهد داد.
البته در خصوص سوال مطرح شده جواب کاملتری در کتاب 296 برنامه دلفی 6 آمده است که آن هم از طریق رجیستری توضیح داده است. 
گرچه من نه آن را تست کرده ام و نه کدی را که  جناب فرشاد نوشتند.
(نیازمند تست بر روی چند سیستم و مقادیری وقت می باشد)

----------


## javad_hosseiny

اقا محسن میشه لطفا کنید اون نمونه برنامه مربوطه را  که گفته اید در کتاب 296 برنامه دیده اید اینجا بگذارید؟
با تشکر

----------


## javad_hosseiny

کسی نبود کد نویسی مربوط به این تغییرات رجیستری را بنویسه؟

----------


## vcldeveloper

> کلیدهای دیگری نیز وجود دارد یعنی بجای کلید CurrentControllset چیزی مثل Controllset001 وجود دارد که عینا همان مقادیر را دارد. من اینطور برداشت کردم که هر یک از Controllset ها به یک user مربوط است و CurrentControllSet به user فعلی . اما چون من خودم تست نکردم مطمین نیستم . اما فکر کنم اگر می خواهید برای تمام کاربران تنظیم شود باید در تمام ControllSet ها تغییر گفته شده را اعمال کنید .


در رجیستری سیستم می تونه چندین شاخه ControlSetXXX وجود داشته باشه. تعداد این شاخه بستگی به دفعاتی که تنظیمات سیستم رو تغییر میدید داره،
CurrentControlSet به یکی از COntrolSetهای موجود که فعال هست اشاره می کنه و خودش مقدار متفاوتی نداره. یعنی اگر در سیستم شما چهار ControlSet (از ControlSet001 تا ContrlSet004) وجود داشته باشه، مقدار CurrentControlSet برابر با یکی از اونها ست.

----------


## vcldeveloper

> کسی نبود کد نویسی مربوط به این تغییرات رجیستری را بنویسه؟



uses Registry;

type
  TLanguageName = &#40;Fa,En&#41;;

procedure NonUnicode_Lang&#40;Language&#58; TLanguageName&#41;;
var
  Reg &#58; TRegistry;
begin
  Reg &#58;= TRegistry.Create;
  with Reg do
  try
    RootKey &#58;= HKEY_LOCAL_MACHINE;
    if OpenKey&#40;'SYSTEM\CurrentControlSet\Control\Nls\  CodePage',False&#41; then
      case Language of
        Fa &#58; begin
               WriteString&#40;'ACP','1256'&#41;;
               WriteString&#40;'OEMCP','720'&#41;;
               WriteString&#40;'MACCP','10004'&#41;;
               CloseKey;
             end;
        En &#58; begin
               WriteString&#40;'ACP','1252'&#41;;
               WriteString&#40;'OEMCP','437'&#41;;
               WriteString&#40;'MACCP','10000'&#41;;
               CloseKey;
             end;
      end;//case

    if OpenKey&#40;'SYSTEM\CurrentControlSet\Control\Nls\  Language',False&#41; then
      case Language of
        Fa &#58; begin
               WriteString&#40;'Default','0429'&#41;;
               CloseKey;
             end;
        En &#58; begin
               WriteString&#40;'Default','0409'&#41;;
               CloseKey;
             end;
      end;//case
  finally
    Reg.Free;
  end;//try..finally
end;

----------


## javad_hosseiny

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

----------


## vcldeveloper

> ولی مشکلی است و آن هم اینکه بعد از انجام این کار علامت مربوط به تغییر زبان در گوشه پایین سمت راست ویندوز از بین می رود 
> برای رفع این مشکل چاره ای هست


من روی سیستم خودم همچین مشکلی ندارم.

----------


## javad_hosseiny

اگر لطف کنید و به لینک زیر بروید و سورس بنده را ببنید ممنون می شوم (برنامه نصب مشابه اینستال شیلد)
http://www.barnamenevis.org/viewtopic.php?t=25862

----------


## Mah

سلام :
از همگی شما برای این اطلاعات خوبتان ممنونم .

----------


## sajioo

> با سلام.
> من فکر کنم موفق شدم بفهمم چه کلیدی باید در رجیستری تغییر کند تا این مشکل حل شود البته من فقط توانستم روی دو تا سیستم تست کنم . لطفا شما هم تست کنید و نتیجه را بگید . امیدوارم درست باشه :
> برای اینکه زبان برنامه های non-unicode را به فارسی تغییر دهید به آدرس زیر در رجیستری بروید :
> 1
> &#91;HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSe  t\C  ontrol\Nls\CodePage&#93;
> و این مقادیر را set کنید :
> 1
> 2
> 3
> ...


دوستان عزیز البته سیستم باید رسیت بشه تا تغییرات اعمال شود.

----------

