PDA

Показать полную графическую версию : Вернуть ID языка OS


FlatX007
15-01-2010, 16:02
Написал функцию ... я правильно всё сделал, если язык OS английский эта функция правильно покажет ?

Global Const $aID_LAND[14] = [0419, 0409, 0809, "0c09", 1009, 1409, 1809, "1c09", 2009, 2409, 2809, "2c09", 3009, 3409]
Global $aReturnValueIdLand[2] = ["Rus", "Eng"]

MsgBox(64, Default, "LangOS - " & _Global_Lang_Sistem())

Func _Global_Lang_Sistem()
For $i = 1 To UBound($aID_LAND) - 1
If $aID_LAND[0] = @OSLang Then Return($aReturnValueIdLand[0])
If $aID_LAND[$i] = @OSLang Then Return($aReturnValueIdLand[1])
Next
Return($aReturnValueIdLand[1])
EndFunc

beve
15-01-2010, 17:02
я правильно всё сделал, если язык OS английский эта функция правильно покажет ? »
Знаеш, у меня например макрос @OSLang постоянно показывает, что у меня русский, хотя установлен укр. Поэтому советую тебе лучше написать функцию на основании получении информации из реестра. Тут: HKEY_CURRENT_USER\Keyboard Layout\Preload под пунктом 1 показан код текущего языка ввода в системе.

Creat0R
15-01-2010, 17:47
у меня например макрос @OSLang постоянно показывает, что у меня русский »
Что именно он показывает? возможно это из за внешней локализаций системы (мод)?

под пунктом 1 показан код текущего языка ввода в системе »
@OSLang не возвращает код языка ввода, а код языка системы, с клавиатурной раскладкой это не связано.

У меня @OSLang это 0419 (рус.), а в реестре по указанному тобой адресу в первом параметре прописано 0409 (анг.), это у меня раскладка по умолчанию в системе.

Я лично использую такую функцию:


$sOSLang_Str = _OSGetLangString(-1)
ConsoleWrite (http://www.autoitscript.com/autoit3/docs/functions/ConsoleWrite.htm)("+ [Get @OSLang string] (Default): " & $sOSLang_Str & @CRLF (http://www.autoitscript.com/autoit3/docs/macros.htm#@CRLF))

$sOSLang_Str = _OSGetLangString("English_United_States")
ConsoleWrite (http://www.autoitscript.com/autoit3/docs/functions/ConsoleWrite.htm)("> [Get lang code by specific string]: " & $sOSLang_Str & @CRLF (http://www.autoitscript.com/autoit3/docs/macros.htm#@CRLF))

$sOSLang_Code = _OSGetLangString($sOSLang_Str)
ConsoleWrite (http://www.autoitscript.com/autoit3/docs/functions/ConsoleWrite.htm)("! [Get string by specific lang code]: " & $sOSLang_Code & @CRLF (http://www.autoitscript.com/autoit3/docs/macros.htm#@CRLF))

; #FUNCTION# ====================================================================================================
; Name...........: _OSGetLangString
; Description....: Retrieves Operating System language, or converts passed in parameter language code/string.
; Syntax.........: _OSGetLangString($sOSLang_Code=-1)
; Parameters.....: $sOSLang_Code - [Optional] If this parameter <> -1,
; then this function will return converted code <-> string language.
;
; Return values..: Success - Return language code/string depending on $sOSLang_Code parametr (see it's description).
; Failure - Returns 0 and set @error to 1 if invalid language code/string passed.
; Author.........: G.Sandler (a.k.a MrCreatoR)
; Modified.......:
; Remarks........:
; Related........: @OSLang
; Link...........:
; Example........: 1. $sOSLang_Str = _OSGetLangString(-1) ;Will return current OS language
; 2. $sOSLang_Str = _OSGetLangString("English_United_States") ;Will return 0409
; 3. $sOSLang_Str = _OSGetLangString(0409) ;Will return "English_United_States"
; ==================================================================================================== ===========
Func (http://www.autoitscript.com/autoit3/docs/keywords.htm#Func) _OSGetLangString($sOSLang_Code=-1)
If (http://www.autoitscript.com/autoit3/docs/keywords.htm#If) $sOSLang_Code == 0 Then (http://www.autoitscript.com/autoit3/docs/keywords.htm#Then) Return (http://www.autoitscript.com/autoit3/docs/keywords.htm#Return) SetError (http://www.autoitscript.com/autoit3/docs/functions/SetError.htm)(1, 0, 0)

Local (http://www.autoitscript.com/autoit3/docs/keywords.htm#Local) $aOSLang_Codes = StringSplit (http://www.autoitscript.com/autoit3/docs/functions/StringSplit.htm)( _
"0436|41c|0401|0801|0c01|1001|1401|1801|1c01|2001|2401|2801|2c01|3001|3401|3801|3c01|4001|042b|042c|0 82c|" & _
"042d|0423|0402|0403|0404|0804|0c04|1004|1404|041a|0405|0406|0413|0813|0409|0809|0c09|1009|1409|1809| 1c09|2009|2409|" & _
"2809|2c09|3009|3409|0425|0438|0429|040b|040c|080c|0c0c|100c|140c|180c|0437|407|0807|0c07|1007|1407|4 08|040d|0439|" & _
"040e|040f|0421|0410|0810|0411|043f|0457|0412|0426|0427|042f|043e|083e|044e|0414|0814|0415|0416|0816| 0418|0419|044f|" & _
"081a|0c1a|041b|0424|040a|080a|0c0a|100a|140a|180a|1c0a|200a|240a|280a|2c0a|300a|340a|380a|3c0a|400a| 440a|480a|4c0a|" & _
"500a|0441|041d|081d|0449|0444|041e|041f|0422|0420|0443|0843|042a", "|")

Local (http://www.autoitscript.com/autoit3/docs/keywords.htm#Local) $aOSLang_Strings = StringSplit (http://www.autoitscript.com/autoit3/docs/functions/StringSplit.htm)( _
"Afrikaans|Albanian|Arabic_Saudi_Arabia|Arabic_Iraq|Arabic_Egypt|Arabic_Libya|Arabic_Algeria|Arabic_M orocco|" & _
"Arabic_Tunisia|Arabic_Oman|Arabic_Yemen|Arabic_Syria|Arabic_Jordan|Arabic_Lebanon|Arabic_Kuwait|Arab ic_UAE|" & _
"Arabic_Bahrain|Arabic_Qatar|Armenian|Azeri_Latin|Azeri_Cyrillic|Basque|Belarusian|Bulgarian|Catalan| Chinese_Taiwan|" & _
"Chinese_PRC|Chinese_Hong_Kong|Chinese_Singapore|Chinese_Macau|Croatian|Czech|Danish|Dutch_Standard|D utch_Belgian|" & _
"English_United_States|English_United_Kingdom|English_Australian|English_Canadian|English_New_Zealand |English_Irish|" & _
"English_South_Africa|English_Jamaica|English_Caribbean|English_Belize|English_Trinidad|English_Zimba bwe|" & _
"English_Philippines|Estonian|Faeroese|Farsi|Finnish|French_Standard|French_Belgian|French_Canadian|F rench_Swiss|" & _
"French_Luxembourg|French_Monaco|Georgian|German_Standard|German_Swiss|German_Austrian|German_Luxembo urg|" & _
"German_Liechtenstei|Greek|Hebrew|Hindi|Hungarian|Icelandic|Indonesian|Italian_Standard|Italian_Swiss |Japanese|" & _
"Kazakh|Konkani|Korean|Latvian|Lithuanian|Macedonian|Malay_Malaysia|Malay_Brunei_Darussalam|Marathi|N orwegian_Bokmal|" & _
"Norwegian_Nynorsk|Polish|Portuguese_Brazilian|Portuguese_Standard|Romanian|Russian|Sanskrit|Serbian_ Latin|" & _
"Serbian_Cyrillic|Slovak|Slovenian|Spanish_Traditional_Sort|Spanish_Mexican|Spanish_Modern_Sort|Spani sh_Guatemala|" & _
"Spanish_Costa_Rica|Spanish_Panama|Spanish_Dominican_Republic|Spanish_Venezuela|Spanish_Colombia|Span ish_Peru|" & _
"Spanish_Argentina|Spanish_Ecuador|Spanish_Chile|Spanish_Uruguay|Spanish_Paraguay|Spanish_Bolivia|Spa nish_El_Salvador|" & _
"Spanish_Honduras|Spanish_Nicaragua|Spanish_Puerto_Rico|Swahili|Swedish|Swedish_Finland|Tamil|Tatar|T hai|Turkish|" & _
"Ukrainian|Urdu|Uzbek_Latin|Uzbek_Cyrillic|Vietnamese", "|")

For (http://www.autoitscript.com/autoit3/docs/keywords.htm#For) $i = 1 To (http://www.autoitscript.com/autoit3/docs/keywords.htm#To) $aOSLang_Codes[0]
If (http://www.autoitscript.com/autoit3/docs/keywords.htm#If) $sOSLang_Code = -1 Then (http://www.autoitscript.com/autoit3/docs/keywords.htm#Then)
If (http://www.autoitscript.com/autoit3/docs/keywords.htm#If) @OSLang (http://www.autoitscript.com/autoit3/docs/macros.htm#@OSLang) = $aOSLang_Codes[$i] Then (http://www.autoitscript.com/autoit3/docs/keywords.htm#Then) Return (http://www.autoitscript.com/autoit3/docs/keywords.htm#Return) $aOSLang_Strings[$i]
Else (http://www.autoitscript.com/autoit3/docs/keywords.htm#Else)
If (http://www.autoitscript.com/autoit3/docs/keywords.htm#If) $sOSLang_Code = $aOSLang_Codes[$i] Then (http://www.autoitscript.com/autoit3/docs/keywords.htm#Then) Return (http://www.autoitscript.com/autoit3/docs/keywords.htm#Return) $aOSLang_Strings[$i]
If (http://www.autoitscript.com/autoit3/docs/keywords.htm#If) $sOSLang_Code = $aOSLang_Strings[$i] Then (http://www.autoitscript.com/autoit3/docs/keywords.htm#Then) Return (http://www.autoitscript.com/autoit3/docs/keywords.htm#Return) $aOSLang_Codes[$i]
EndIf (http://www.autoitscript.com/autoit3/docs/keywords.htm#EndIf)
Next (http://www.autoitscript.com/autoit3/docs/keywords.htm#Next)

Return (http://www.autoitscript.com/autoit3/docs/keywords.htm#Return) SetError (http://www.autoitscript.com/autoit3/docs/functions/SetError.htm)(1, 0, 0)
EndFunc (http://www.autoitscript.com/autoit3/docs/keywords.htm#EndFunc)

FlatX007
15-01-2010, 17:57
Creat0R » - спасибо конечно (функцию пихну в архив) ...но меня интесовал ответ на мой вопрос :)
Мне все языки совершенно не нужны.

beve
15-01-2010, 18:16
У меня @OSLang это 0419 (рус.), а в реестре по указанному тобой адресу в первом параметре прописано 0409 (анг.), это у меня раскладка по умолчанию в системе. »
Так и у меня там в реестре расскладка по умолчанию, я думал ему это и нужно... не так я понял.
У меня @OSLang это 0419 (рус.) »
У меня Тоже постоянно 0419, притом так всегда и показывает, хотя язык менял и на англ, и на рус и на укр, но во время запуска скрипта или уже скомпелированого в exe файла, все равно показывает 0419! Установлен пунто свитчер, но он на время теста не был запущен. Выходит так, что в трее показывает, например укр, но во время запуска windows сам поменял туда сюда язык, на мгновение стал англ потом рус, потом опять вернулся на укр, а в окне сообщения - 0419.

Creat0R
15-01-2010, 19:23
если язык OS английский эта функция правильно покажет ? »
Да, и это легко проверить, подставив вместо @OSLang 0409 ;)
Но зачем глобально объявлять переменные массива?

beve, Ты путаешь язык раскладки клавиатуры с языком установленным в системе.

beve
15-01-2010, 23:11
beve, Ты путаешь язык раскладки клавиатуры с языком установленным в системе. »
Выходит если у меня система на русском языке, то макрос @OSLang поэтому и возвращает код русского языка? Точно, путал, причем, с самого начала... думал, что у меня не работает, вот это да...




© OSzone.net 2001-2012