Guest User

Untitled

a guest
Oct 16th, 2017
89
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
AutoIt 6.33 KB | None | 0 0
  1.  
  2. ;  @AZJIO пример программы с внешними языковыми файлами
  3.  
  4. #include <ComboConstants.au3>
  5.  
  6. ;=============================================================
  7. ; создаём два языковых файла En.lng и Ru.lng. В скрипте они не обязательны, нужны для этого примера.
  8. If Not FileExists(@ScriptDir&'\Lang') Then DirCreate(@ScriptDir&'\Lang')
  9. $file = FileOpen(@ScriptDir&'\Lang\En.lng',2)
  10. FileWrite($file, _
  11. '[lng]' & @CRLF & _
  12. 'Title=My Programs' & @CRLF & _
  13. 'But=Open' & @CRLF & _
  14. 'ButH=Open File' & @CRLF & _
  15. 'Lab=Example choice language' & @CRLF & _
  16. 'Sl=Select' & @CRLF & _
  17. 'Type=Language')
  18. FileClose($file)
  19.  
  20. $file = FileOpen(@ScriptDir&'\Lang\Ru.lng',2)
  21. FileWrite($file, _
  22. '[lng]' & @CRLF & _
  23. 'Title=Моя программа' & @CRLF & _
  24. 'But=Открыть' & @CRLF & _
  25. 'ButH=Открыть файл' & @CRLF & _
  26. 'Lab=Пример выбора языка' & @CRLF & _
  27. 'Sl=Выбор' & @CRLF & _
  28. 'Type=Языковой файл')
  29. FileClose($file)
  30. ;=============================================================
  31.  
  32. #NoTrayIcon
  33. Global $LangPath, $Ini = @ScriptDir&'\prog_set.ini'
  34.  
  35. ; создаём файл настроек с языковым параметром. Используется при первом запуске.
  36. If Not FileExists($ini) And DriveStatus(StringLeft(@ScriptDir, 1))<>'NOTREADY' Then
  37.     $file = FileOpen($Ini,2)
  38.     FileWrite($file, _
  39.     '[Set]' & @CRLF & _
  40.     'Lang=none')
  41.     FileClose($file)
  42. EndIf
  43.  
  44. ; По умолчанию устанавливаем англоязычный интерфейс, в случае отсутствия языковых файлов.
  45. Global $aLng0[7][2]=[[ _
  46. 6, 6],[ _
  47. 'Title', 'My Programs'],[ _
  48. 'But', 'Open'],[ _
  49. 'ButH', 'Open File'],[ _
  50. 'Lab', 'Example choice language'],[ _
  51. 'Sl', 'Select'],[ _
  52. 'Type', 'Language']]
  53.  
  54. $Lang_dll = DllOpen("kernel32.dll")
  55. $UserIntLang=DllCall ( $Lang_dll, "int", "GetUserDefaultUILanguage" )
  56. If Not @error Then $UserIntLang=Hex($UserIntLang[0],4)
  57. DllClose($Lang_dll)
  58.  
  59. ; Ru
  60. ; если русская локализация, то русский язык
  61. If $UserIntLang = 0419 Then
  62. Dim $aLng0[7][2]=[[ _
  63. 6, 6],[ _
  64. 'Title', 'Моя программа'],[ _
  65. 'But', 'Открыть'],[ _
  66. 'ButH', 'Открыть файл'],[ _
  67. 'Lab', 'Пример выбора языка'],[ _
  68. 'Sl', 'Выбор'],[ _
  69. 'Type', 'Языковой файл']]
  70. EndIf
  71.  
  72. ; генерируем переменные массива
  73. For $i = 1 To $aLng0[0][0]
  74.     If StringInStr($aLng0[$i][1], '\r\n') Then $aLng0[$i][1]=StringReplace($aLng0[$i][1],'\r\n',@CRLF)
  75.     Assign('Lng'&$aLng0[$i][0],$aLng0[$i][1])
  76. Next
  77.  
  78. ; применяем языковой файл, если указан.
  79. ; 1 - переменные добавляются с первиксом "Lng", поэтому они не могут пересекаться с переменными скрипта ни при каких обстоятельствах
  80. ; 2 - переменные проверяются на декларирование, поэтому добавить в скрипт недекларируемые невозможно
  81. $LangPath=IniRead($Ini, 'Set', 'Lang', 'none') ; читаем значение параметра lng в глобавльную переменную $LangPath
  82. If $LangPath<>'none' And FileExists(@ScriptDir&'\Lang\'&$LangPath) Then
  83.     $aLng = IniReadSection(@ScriptDir&'\Lang\'&$LangPath, 'lng')
  84.     If Not @error Then
  85.         For $i = 1 To $aLng[0][0]
  86.             If StringInStr($aLng[$i][1], '\r\n') Then $aLng[$i][1]=StringReplace($aLng[$i][1],'\r\n',@CRLF)
  87.             If IsDeclared('Lng'&$aLng[$i][0]) Then Assign('Lng'&$aLng[$i][0],$aLng[$i][1])
  88.         Next
  89.     EndIf
  90. EndIf
  91.  
  92. $Gui = GUICreate($LngTitle, 250, 100)
  93. $Button = GUICtrlCreateButton($LngBut, 10, 60, 99, 22)
  94. GUICtrlSetTip(-1, $LngButH)
  95. $Label = GUICtrlCreateLabel($LngLab, 10, 5, 153, 15)
  96. ; $Checkbox = GUICtrlCreateCheckbox ($LngCh, 10, 50, 55, 22)
  97.  
  98. $LangList='none'
  99. $search = FileFindFirstFile(@ScriptDir&'\Lang\*.lng')
  100. If $search<>-1 Then
  101.     While 1
  102.         $file = FileFindNextFile($search)
  103.         If @error Then ExitLoop
  104.         $LangList&='|'&$file
  105.     WEnd
  106. EndIf
  107. GUICtrlCreateLabel('Language', 10, 33, 75, 17)
  108. $ComboLang=GUICtrlCreateCombo('', 85, 30, 70, 22, $CBS_DROPDOWNLIST)
  109. GUICtrlSetData(-1, $LangList, $LangPath)
  110. FileClose($search)
  111.  
  112. GUISetState ()
  113.  
  114. While 1
  115.     $msg = GUIGetMsg()
  116.     Select
  117.         Case $msg = $ComboLang
  118.                 _SetLang()
  119.         Case $msg = -3
  120.             Exit
  121.     EndSelect
  122. WEnd
  123.  
  124. ; функция смены языка
  125. Func _SetLang()
  126.     Local $aLng
  127.     $LangPath=GUICtrlRead($ComboLang)
  128.     If $LangPath<>'none' And FileExists(@ScriptDir&'\Lang\'&$LangPath) Then
  129.         $aLng = IniReadSection(@ScriptDir&'\Lang\'&$LangPath, 'lng') ;читаем все пераметры в секции lng
  130.         If Not @error Then
  131.             For $i = 1 To $aLng[0][0]
  132.                 If StringInStr($aLng[$i][1], '\r\n') Then $aLng[$i][1]=StringReplace($aLng[$i][1],'\r\n',@CRLF); делаем замену \r\n в случае использования многострочных текстов
  133.                 If IsDeclared('Lng'&$aLng[$i][0]) Then Assign('Lng'&$aLng[$i][0],$aLng[$i][1]) ; обновляем имена декларированных переменных
  134.             Next
  135.             _SetLang2()
  136.             IniWrite($Ini, 'Set', 'Lang', $LangPath)
  137.         EndIf
  138.     Else ; если нет файла или выбран "none", то используем язык встроенный в программу
  139.         For $i = 1 To $aLng0[0][0]
  140.             If StringInStr($aLng0[$i][1], '\r\n') Then $aLng0[$i][1]=StringReplace($aLng0[$i][1],'\r\n',@CRLF)
  141.             Assign('Lng'&$aLng0[$i][0],$aLng0[$i][1])
  142.         Next
  143.         _SetLang2()
  144.         IniWrite($Ini, 'Set', 'Lang', 'none')
  145.     EndIf
  146. EndFunc
  147.  
  148. ; функция обновления текстов интерфейса
  149. Func _SetLang2()
  150.     ; недостаточно обновить имена в переменных, их нужно сменить в видимом интерфейсе программы
  151.     WinSetTitle($Gui, '', $LngTitle) ; сменить имя окна, если это окно настройки
  152.     GUICtrlSetData($Label, $LngLab)
  153.     GUICtrlSetData($Button, $LngBut)
  154.     GUICtrlSetTip($Button, $LngButH)
  155.     ; смена языка взависимости от состояния чекбокса
  156.     ; If $TrCh = 0 Then
  157.         ; GUICtrlSetTip($Checkbox,  $LngCh1)
  158.     ; Else
  159.         ; GUICtrlSetTip($Checkbox,  $LngCh2)
  160.     ; EndIf
  161. EndFunc
Add Comment
Please, Sign In to add comment