PDA

View Full Version : تشخیص نصب زبانهای Right-to-Left



Mavi.X
چهارشنبه 26 بهمن 1384, 20:05 عصر
با سلام

کسی میتونه بگه چطوری میشه بدونم که زبانهای Right-to-Left مانند فارسی رو سیستم نصب (فعال) شده است یا نه؟

MiRHaDi
پنج شنبه 27 بهمن 1384, 16:15 عصر
سلام
از رجیستری ویندوز
بای

realman
پنج شنبه 27 بهمن 1384, 20:27 عصر
آقای میرهادی ،من هم در این مورد با مشکل مواجه هستم.
ممکنه بیشتر توضیح بدین.

javad_hosseiny
جمعه 28 بهمن 1384, 13:15 عصر
یک نمونه سورس کد برای این منظور (تست تنظیمات فارسی یا عربی و ... و درصورت عدم وجود ست کردن این تنظیمات) براتون می گذارم


//-------------------
procedure NonUnicode_Lang(Language: TLanguageName);
var Reg : TRegistry;
begin
Reg := TRegistry.Create;
with Reg do
try
RootKey := HKEY_LOCAL_MACHINE;
if OpenKey('SYSTEM\CurrentControlSet\Control\Nls\Code Page',False) then
begin
case Language of
Fa,Ar : begin
if ReadString('ACP') <> '1256' then
begin
WriteString('ACP','1256');
WriteString('OEMCP','720');
WriteString('MACCP','10004');
end;
end;
end;//case
CloseKey;
end;
if OpenKey('SYSTEM\CurrentControlSet\Control\Nls\Lang uage',False) then
begin
case Language of
Ar : begin
if ReadString('Default') <> '0401' then
WriteString('Default','0401');
end;
Fa : begin
if ReadString('Default') <> '0429' then
WriteString('Default','0429');
end;
end;//case
if ReadString('0429') <> 'l_intl.nls' then
WriteString('0429','l_intl.nls');
CloseKey;
end;
if OpenKey('SYSTEM\CurrentControlSet\Control\Nls\Lang uage Groups',True) then
begin
if ReadString('d') <> '1' then
WriteString('d','1');
CloseKey;
end;
if OpenKey('SYSTEM\CurrentControlSet\Control\Nls\Loca le',True) then
begin
if ReadString('00000429') <> 'd' then
WriteString('00000429','d');
CloseKey;
end;
if OpenKey('SYSTEM\CurrentControlSet\Control\keyboard layouts\00000429',True) then
begin
if ReadString('Layout File') <> 'KBDFA.DLL' then
WriteString('Layout File','KBDFA.DLL');
if ReadString('Layout Text') <> 'Farsi' then
WriteString('Layout Text','Farsi');
CloseKey;
end;
RootKey := HKEY_CURRENT_USER;
if OpenKey('Control Panel\International',False) then
begin
if ReadString('Locale') <> '00000429' then
begin
WriteString('iCalendarType','2');
WriteString('iCountry' ,'981');
WriteString('iCurrDigits','2');
WriteString('iCurrency' ,'2');
WriteString('iDate' ,'2');
WriteString('iDigits' ,'2');
WriteString('iNegCurr' ,'3');
WriteString('iNegNumber' ,'3');
WriteString('iTLZero' ,'1');
WriteString('Locale' ,'00000429');
WriteString('NumShape' ,'0');
WriteString('s1159','ق.ظ');
WriteString('s2359','ب.ظ');
WriteString('sCountry' ,'Iran');
WriteString('sCurrency','ریال');
WriteString('sLanguage','FAR');
WriteString('sLongDate','yyyy/MM/dd');
// WriteString('sNativeDigits','0123456789');
WriteString('sShortDate','yyyy/MM/dd');
end;
CloseKey;
end;
if OpenKey('Control Panel\International\Geo',False) then
begin
if ReadString('Nation') <> '116' then
begin
// WriteString('Nation','116');
end;
CloseKey;
end;
finally
Reg.Free;
end;//try..finally
//end;
end;

البته باید در ابتدای برنامه ورودی این تابع را معرفی کنید بدین صورت:


type
TLanguageName = (Ar,Fa,En);

و بعد در هر قسمت از برنامه که خواستید آن را فراخوانی کنید:

NonUnicode_Lang(Fa);

و اگر فقط به دنبال آدرس رجیستری موردنظر می گیردید:
آدرس کدپیچ:
HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Contro l\Nls\CodePage
آدرس زبان:
HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Contro l\Nls\Language
باید 0429 باشد
و برای صفحه کلید باید این آدرس را تنظیم کنید:
HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Contro l\keyboard layouts\00000429
و برای تنظیمات کشور و ... :
HKEY_CURRENT_USER\Control Panel\International\local