PDA

View Full Version : با چه دستوری می تونیم نوع زبان سیستم رو بگیریم



Valadi
یک شنبه 30 تیر 1387, 10:01 صبح
با سلام
با چه دستوری می تونیم نوع زبان سیستم رو بگیریم ؟
ضمنا از این کد جواب نگرفتم

Application.BiDiKeyboard

Loveski
یک شنبه 30 تیر 1387, 10:23 صبح
سلام
برای تغییر زبان سیستم می خواهی؟
یا برای فهمیدن که الان از کدوم زبان داره استفاده می کنه ؟

Valadi
یک شنبه 30 تیر 1387, 10:31 صبح
ا برای فهمیدن که الان از کدوم زبان داره استفاده می کنه ؟
بله اینو می خوام

Hsimple11
یک شنبه 30 تیر 1387, 11:05 صبح
زبان Default


function GetWindowsLanguage: string;
var
WinLanguage: array [0..50] of char;
begin
VerLanguageName(GetSystemDefaultLangID, WinLanguage, 50);
Result := StrPas(WinLanguage);
end;

procedure TForm1.Button1Click(Sender: TObject);
begin
ShowMessage(GetWindowsLanguage);
end;

Loveski
یک شنبه 30 تیر 1387, 11:12 صبح
عزیزم
ایشان زبان جاری سیستم را می خواد نه زبان پیش فرض رو.:گریه:

Valadi
یک شنبه 30 تیر 1387, 11:16 صبح
زبان جاری سیستم را می خواد نه زبان پیش فرض رو
دقیقا همین مورد می خوام

Hsimple11
یک شنبه 30 تیر 1387, 11:37 صبح
عزیزم
ایشان زبان جاری سیستم را می خواد نه زبان پیش فرض رو.:گریه:

GetCurrentUILanguage


type
TGetUserDefaultUILanguage = function: LANGID; stdcall;

function GetUserDefaultUILanguage: LANGID;

implementation
{$R *.DFM}

var
hKernel: HMODULE = 0;
_GetUserDefaultUILanguage: TGetUserDefaultUILanguage = nil;

function GetUserDefaultUILanguage: LANGID;
begin

if Assigned(@_GetUserDefaultUILanguage) then
result:=_GetUserDefaultUILanguage
else
begin
SetLastError(ERROR_INVALID_HANDLE);
result:=0;
end;
end;

initialization

hKernel:=GetModuleHandle('kernel32');

if (hKernel <> 0) then
// Get function address
@_GetUserDefaultUILanguage:=GetProcAddress(hKernel , 'GetUserDefaultUILanguage')
else
// Set function address to nil
@_GetUserDefaultUILanguage:=nil;
end.

//////////////////////////////////////////////////////////////

Edit1.Text:=IntToStr(GetUserDefaultUILanguage);

Loveski
یک شنبه 30 تیر 1387, 11:52 صبح
سلام
از GetUserDefaultUILanguage میشه به وسیله ShellApi هم استفاده کرد ولی همیشه یک عددی را برمی گردونه ؟
آیا راه حل بهتری دارید؟

Hsimple11
یک شنبه 30 تیر 1387, 14:20 عصر
میتوانید این کدهای Primary را تعریف کنید مثال:


0x00 LANG_NEUTRAL Neutral
0x01 LANG_ARABIC Arabic
0x02 LANG_BULGARIAN Bulgarian
0x03 LANG_CATALAN Catalan
0x04 LANG_CHINESE Chinese
0x05 LANG_CZECH Czech
0x06 LANG_DANISH Danish
0x07 LANG_GERMAN German
0x08 LANG_GREEK Greek
0x09 LANG_ENGLISH English
0x0a LANG_SPANISH Spanish
0x0b LANG_FINNISH Finnish
0x0c LANG_FRENCH French
0x0d LANG_HEBREW Hebrew
0x0e LANG_HUNGARIAN Hungarian
0x0f LANG_ICELANDIC Icelandic
0x10 LANG_ITALIAN Italian
0x11 LANG_JAPANESE Japanese
0x12 LANG_KOREAN Korean
0x13 LANG_DUTCH Dutch
0x14 LANG_NORWEGIAN Norwegian
0x15 LANG_POLISH Polish
0x16 LANG_PORTUGUESE Portuguese
0x18 LANG_ROMANIAN Romanian
0x19 LANG_RUSSIAN Russian
0x1a LANG_CROATIAN Croatian
0x1a LANG_SERBIAN Serbian
0x1b LANG_SLOVAK Slovak
0x1c LANG_ALBANIAN Albanian
0x1d LANG_SWEDISH Swedish
0x1e LANG_THAI Thai
0x1f LANG_TURKISH Turkish
0x20 LANG_URDU Urdu
0x21 LANG_INDONESIAN Indonesian
0x22 LANG_UKRANIAN Ukrainian
0x23 LANG_BELARUSIAN Belarusian
0x24 LANG_SLOVENIAN Slovenian
0x25 LANG_ESTONIAN Estonian
0x26 LANG_LATVIAN Latvian
0x27 LANG_LITHUANIAN Lithuanian
0x29 LANG_FARSI Farsi
0x2a LANG_VIETNAMESE Vietnamese
0x2b LANG_ARMENIAN Armenian
0x2c LANG_AZERI Azeri
0x2d LANG_BASQUE Basque
0x2f LANG_MACEDONIAN FYRO Macedonian
0x36 LANG_AFRIKAANS Afrikaans
0x37 LANG_GEORGIAN Georgian
0x38 LANG_FAEROESE Faeroese
0x39 LANG_HINDI Hindi
0x3e LANG_MALAY Malay
0x3f LANG_KAZAK Kazak
0x40 LANG_KYRGYZ Kyrgyz
0x41 LANG_SWAHILI Swahili
0x43 LANG_UZBEK Uzbek
0x44 LANG_TATAR Tatar
0x45 LANG_BENGALI Bengali
0x46 LANG_PUNJABI Punjabi
0x47 LANG_GUJARATI Gujarati
0x48 LANG_ORIYA Oriya
0x49 LANG_TAMIL Tamil
0x4a LANG_TELUGU Telugu
0x4b LANG_KANNADA Kannada
0x4c LANG_MALAYALAM Malayalam
0x4d LANG_ASSAMESE Assamese
0x4e LANG_MARATHI Marathi
0x4f LANG_SANSKRIT Sanskrit
0x50 LANG_MONGOLIAN Mongolian
0x56 LANG_GALICIAN Galician
0x57 LANG_KONKANI Konkani
0x58 LANG_MANIPURI Manipuri
0x59 LANG_SINDHI Sindhi
0x5a LANG_SYRIAC Syriac
0x60 LANG_KASHMIRI Kashmiri
0x61 LANG_NEPALI Nepali
0x65 LANG_DIVEHI Divehi
0x7f LANG_INVARIANT

The sublanguage codes are:

0x00 SUBLANG_NEUTRAL Language neutral
0x01 SUBLANG_DEFAULT User Default
0x02 SUBLANG_SYS_DEFAULT System Default
0x01 SUBLANG_ARABIC_SAUDI_ARABIA Arabic (Saudi Arabia)
0x02 SUBLANG_ARABIC_IRAQ Arabic (Iraq)
0x03 SUBLANG_ARABIC_EGYPT Arabic (Egypt)
0x04 SUBLANG_ARABIC_LIBYA Arabic (Libya)
0x05 SUBLANG_ARABIC_ALGERIA Arabic (Algeria)
0x06 SUBLANG_ARABIC_MOROCCO Arabic (Morocco)
0x07 SUBLANG_ARABIC_TUNISIA Arabic (Tunisia)
0x08 SUBLANG_ARABIC_OMAN Arabic (Oman)
0x09 SUBLANG_ARABIC_YEMEN Arabic (Yemen)
0x0a SUBLANG_ARABIC_SYRIA Arabic (Syria)
0x0b SUBLANG_ARABIC_JORDAN Arabic (Jordan)
0x0c SUBLANG_ARABIC_LEBANON Arabic (Lebanon)
0x0d SUBLANG_ARABIC_KUWAIT Arabic (Kuwait)
0x0e SUBLANG_ARABIC_UAE Arabic (U.A.E.)
0x0f SUBLANG_ARABIC_BAHRAIN Arabic (Bahrain)
0x10 SUBLANG_ARABIC_QATAR Arabic (Qatar)
0x01 SUBLANG_AZERI_LATIN Azeri (Latin)
0x02 SUBLANG_AZERI_CYRILLIC Azeri (Cyrillic)
0x01 SUBLANG_CHINESE_TRADITIONAL Chinese (Traditional)
0x02 SUBLANG_CHINESE_SIMPLIFIED Chinese (Simplified)
0x03 SUBLANG_CHINESE_HONGKONG Chinese (Hong Kong SAR, PRC)
0x04 SUBLANG_CHINESE_SINGAPORE Chinese (Singapore)
0x05 SUBLANG_CHINESE_MACAU Chinese (Macau SAR)
0x01 SUBLANG_DUTCH Dutch
0x02 SUBLANG_DUTCH_BELGIAN Dutch (Belgian)
0x01 SUBLANG_ENGLISH_US English (US)
0x02 SUBLANG_ENGLISH_UK English (UK)
0x03 SUBLANG_ENGLISH_AUS English (Australian)
0x04 SUBLANG_ENGLISH_CAN English (Canadian)
0x05 SUBLANG_ENGLISH_NZ English (New Zealand)
0x06 SUBLANG_ENGLISH_EIRE English (Ireland)
0x07 SUBLANG_ENGLISH_SOUTH_AFRICA English (South Africa)
0x08 SUBLANG_ENGLISH_JAMAICA English (Jamaica)
0x09 SUBLANG_ENGLISH_CARIBBEAN English (Caribbean)
0x0a SUBLANG_ENGLISH_BELIZE English (Belize)
0x0b SUBLANG_ENGLISH_TRINIDAD English (Trinidad)
0x0c SUBLANG_ENGLISH_ZIMBABWE English (Zimbabwe)
0x0d SUBLANG_ENGLISH_PHILIPPINES English (Philippines)
0x01 SUBLANG_FRENCH French
0x02 SUBLANG_FRENCH_BELGIAN French (Belgian)
0x03 SUBLANG_FRENCH_CANADIAN French (Canadian)
0x04 SUBLANG_FRENCH_SWISS French (Swiss)
0x05 SUBLANG_FRENCH_LUXEMBOURG French (Luxembourg)
0x06 SUBLANG_FRENCH_MONACO French (Monaco)
0x01 SUBLANG_GERMAN German
0x02 SUBLANG_GERMAN_SWISS German (Swiss)
0x03 SUBLANG_GERMAN_AUSTRIAN German (Austrian)
0x04 SUBLANG_GERMAN_LUXEMBOURG German (Luxembourg)
0x05 SUBLANG_GERMAN_LIECHTENSTEIN German (Liechtenstein)
0x01 SUBLANG_ITALIAN Italian
0x02 SUBLANG_ITALIAN_SWISS Italian (Swiss)
0x02 SUBLANG_KASHMIRI_INDIA Kashmiri (India)
0x01 SUBLANG_KOREAN Korean
0x01 SUBLANG_LITHUANIAN Lithuanian
0x01 SUBLANG_MALAY_MALAYSIA Malay (Malaysia)
0x02 SUBLANG_MALAY_BRUNEI_DARUSSALAM Malay (Brunei Darassalam)
0x02 SUBLANG_NEPALI_INDIA Nepali (India)
0x01 SUBLANG_NORWEGIAN_BOKMAL Norwegian (Bokmal)
0x02 SUBLANG_NORWEGIAN_NYNORSK Norwegian (Nynorsk)
0x01 SUBLANG_PORTUGUESE_BRAZILIAN Portuguese (Brazilian)
0x02 SUBLANG_PORTUGUESE Portuguese
0x02 SUBLANG_SERBIAN_LATIN Serbian (Latin)
0x03 SUBLANG_SERBIAN_CYRILLIC Serbian (Cyrillic)
0x01 SUBLANG_SPANISH Spanish (Castilian)
0x02 SUBLANG_SPANISH_MEXICAN Spanish (Mexican)
0x03 SUBLANG_SPANISH_MODERN Spanish (Modern)
0x04 SUBLANG_SPANISH_GUATEMALA Spanish (Guatemala)
0x05 SUBLANG_SPANISH_COSTA_RICA Spanish (Costa Rica)
0x06 SUBLANG_SPANISH_PANAMA Spanish (Panama)
0x07 SUBLANG_SPANISH_DOMINICAN_REPUBLIC Spanish (Dominican Republic)
0x08 SUBLANG_SPANISH_VENEZUELA Spanish (Venezuela)
0x09 SUBLANG_SPANISH_COLOMBIA Spanish (Colombia)
0x0a SUBLANG_SPANISH_PERU Spanish (Peru)
0x0b SUBLANG_SPANISH_ARGENTINA Spanish (Argentina)
0x0c SUBLANG_SPANISH_ECUADOR Spanish (Ecuador)
0x0d SUBLANG_SPANISH_CHILE Spanish (Chile)
0x0e SUBLANG_SPANISH_URUGUAY Spanish (Uruguay)
0x0f SUBLANG_SPANISH_PARAGUAY Spanish (Paraguay)
0x10 SUBLANG_SPANISH_BOLIVIA Spanish (Bolivia)
0x11 SUBLANG_SPANISH_EL_SALVADOR Spanish (El Salvador)
0x12 SUBLANG_SPANISH_HONDURAS Spanish (Honduras)
0x13 SUBLANG_SPANISH_NICARAGUA Spanish (Nicaragua)
0x14 SUBLANG_SPANISH_PUERTO_RICO Spanish (Puerto Rico)
0x01 SUBLANG_SWEDISH Swedish
0x02 SUBLANG_SWEDISH_FINLAND Swedish (Finland)
0x01 SUBLANG_URDU_PAKISTAN Urdu (Pakistan)
0x02 SUBLANG_URDU_INDIA Urdu (India)
0x01 SUBLANG_UZBEK_LATIN Uzbek (Latin)
0x02 SUBLANG_UZBEK_CYRILLIC

So for example, in the US, the langid code is 0x409 (1033), once split apart the Primary Language ID is 9, and the Sub language ID is 1. Using the above information, you could build constant tables to return whatever abbreviation you wanted. I also offer the following, which is (according to the msdn) a listing of all the language identifiers (comprised of both primary and sub):

Identifier Language
$0000 Language Neutral
$007f The language for the invariant locale (LOCALE_INVARIANT). See MAKELCID.
$0400 Process or User Default Language
$0800 System Default Language
$0436 Afrikaans
$041c Albanian
$0401 Arabic (Saudi Arabia)
$0801 Arabic (Iraq)
$0c01 Arabic (Egypt)
$1001 Arabic (Libya)
$1401 Arabic (Algeria)
$1801 Arabic (Morocco)
$1c01 Arabic (Tunisia)
$2001 Arabic (Oman)
$2401 Arabic (Yemen)
$2801 Arabic (Syria)
$2c01 Arabic (Jordan)
$3001 Arabic (Lebanon)
$3401 Arabic (Kuwait)
$3801 Arabic (U.A.E.)
$3c01 Arabic (Bahrain)
$4001 Arabic (Qatar)
$042b Windows 2000 or later: Armenian. This is Unicode only.
$042c Azeri (Latin)
$082c Azeri (Cyrillic)
$042d Basque
$0423 Belarussian
$0402 Bulgarian
$0455 Burmese
$0403 Catalan
$0404 Chinese (Taiwan)
$0804 Chinese (PRC)
$0c04 Chinese (Hong Kong SAR, PRC)
$1004 Chinese (Singapore)
$1404 Windows 98/Me, Windows 2000 or later: Chinese (Macau SAR)
$041a Croatian
$0405 Czech
$0406 Danish
$0465 Whistler: Divehi. This is Unicode only.
$0413 Dutch (Netherlands)
$0813 Dutch (Belgium)
$0409 English (United States)
$0809 English (United Kingdom)
$0c09 English (Australian)
$1009 English (Canadian)
$1409 English (New Zealand)
$1809 English (Ireland)
$1c09 English (South Africa)
$2009 English (Jamaica)
$2409 English (Caribbean)
$2809 English (Belize)
$2c09 English (Trinidad)
$3009 Windows 98/Me, Windows 2000 or later: English (Zimbabwe)
$3409 Windows 98/Me, Windows 2000 or later: English (Philippines)
$0425 Estonian
$0438 Faeroese
$0429 Farsi
$040b Finnish
$040c French (Standard)
$080c French (Belgian)
$0c0c French (Canadian)
$100c French (Switzerland)
$140c French (Luxembourg)
$180c Windows 98/Me, Windows 2000 or later: French (Monaco)
$0456 Whistler: Galician
$0437 Windows 2000 and later: Georgian. This is Unicode only.
$0407 German (Standard)
$0807 German (Switzerland)
$0c07 German (Austria)
$1007 German (Luxembourg)
$1407 German (Liechtenstein)
$0408 Greek
$0447 Whistler: Gujarati. This is Unicode only.
$040d Hebrew
$0439 Windows 2000 and later: Hindi. This is Unicode only.
$040e Hungarian
$040f Icelandic
$0421 Indonesian
$0410 Italian (Standard)
$0810 Italian (Switzerland)
$0411 Japanese
$044b Whistler: Kannada. This is Unicode only.
$0860 Kashmiri (India)
$043f Kazakh
$0457 Windows 2000 and later: Konkani. This is Unicode only.
$0412 Korean
$0812 Windows 95, Windows NT 4.0 only: Korean (Johab)
$0440 Whistler: Kyrgyz.
$0426 Latvian
$0427 Lithuanian
$0827 Windows 98 only: Lithuanian (Classic)
$042f FYRO Macedonian
$043e Malay (Malaysian)
$083e Malay (Brunei Darussalam)
$0458 Manipuri
$044e Windows 2000 and later: Marathi. This is Unicode only.
$0450 Whistler: Mongolian
$0414 Norwegian (Bokmal)
$0814 Norwegian (Nynorsk)
$0415 Polish
$0416 Portuguese (Brazil)
$0816 Portuguese (Standard)
$0446 Whistler: Punjabi. This is Unicode only.
$0418 Romanian
$0419 Russian
$044f Windows 2000 and later: Sanskrit. This is Unicode only.
$0c1a Serbian (Cyrillic)
$081a Serbian (Latin)
$0459 Sindhi
$041b Slovak
$0424 Slovenian
$040a Spanish (Traditional Sort)
$080a Spanish (Mexican)
$0c0a Spanish (Modern Sort)
$100a Spanish (Guatemala)
$140a Spanish (Costa Rica)
$180a Spanish (Panama)
$1c0a Spanish (Dominican Republic)
$200a Spanish (Venezuela)
$240a Spanish (Colombia)
$280a Spanish (Peru)
$2c0a Spanish (Argentina)
$300a Spanish (Ecuador)
$340a Spanish (Chile)
$380a Spanish (Uruguay)
$3c0a Spanish (Paraguay)
$400a Spanish (Bolivia)
$440a Spanish (El Salvador)
$480a Spanish (Honduras)
$4c0a Spanish (Nicaragua)
$500a Spanish (Puerto Rico)
$0430 Sutu
$0441 Swahili (Kenya)
$041d Swedish
$081d Swedish (Finland)
$045a Whistler: Syriac. This is Unicode only.
$0449 Windows 2000 and later: Tamil. This is Unicode only.
$0444 Tatar (Tatarstan)
$044a Whistler: Telugu. This is Unicode only.
$041e Thai
$041f Turkish
$0422 Ukrainian
$0420 Windows 98/Me, Windows 2000 or later: Urdu (Pakistan)
$0820 Urdu (India)
$0443 Uzbek (Latin)
$0843 Uzbek (Cyrillic)
$042a Windows 98/Me, Windows NT 4.0 and later: Vietnamese

Valadi
دوشنبه 31 تیر 1387, 08:17 صبح
GetCurrentUILanguage


type
TGetUserDefaultUILanguage = function: LANGID; stdcall;

function GetUserDefaultUILanguage: LANGID;

implementation
{$R *.DFM}

var
hKernel: HMODULE = 0;
_GetUserDefaultUILanguage: TGetUserDefaultUILanguage = nil;

function GetUserDefaultUILanguage: LANGID;
begin

if Assigned(@_GetUserDefaultUILanguage) then
result:=_GetUserDefaultUILanguage
else
begin
SetLastError(ERROR_INVALID_HANDLE);
result:=0;
end;
end;

initialization

hKernel:=GetModuleHandle('kernel32');

if (hKernel <> 0) then
// Get function address
@_GetUserDefaultUILanguage:=GetProcAddress(hKernel , 'GetUserDefaultUILanguage')
else
// Set function address to nil
@_GetUserDefaultUILanguage:=nil;
end.

//////////////////////////////////////////////////////////////

Edit1.Text:=IntToStr(GetUserDefaultUILanguage);




این کد تست زدم اما جواب نگرفتم چون دقیق نیست با تغییر کیبورد (فارسی و انگلیسی ) مقدار تغییر نمی کنه
آیا راهی ساده تر و دقیق تر نیست ؟

Valadi
سه شنبه 01 مرداد 1387, 07:54 صبح
مدیران بخش و اعضا محترم جواب این سوال ما را نمی دونه