powered by simpleCommunicator - 2.0.41     © 2025 Programmizd 02
Форумы / Microsoft Access [игнор отключен] [закрыт для гостей] / возможность автоматической подстройки интерфейса
8 сообщений из 8, страница 1 из 1
возможность автоматической подстройки интерфейса
    #35142860
Фотография Александра-Александра
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Здравствуйте...

Такой вопрос...

Хотела бы сделать в базе возможность автоматической подстройки интерфейса (надписи), в зависимости от выбора языка клавиатуры... Например, если запускаешь базу где по умолчанию стоит русский язык, то и интерфейс стоновится русским. Открываешь в компютере, где по умолчанию выставлен украинский язык, то и интерфейс становится украинским....

Спасибо...

Александра
...
Рейтинг: 0 / 0
возможность автоматической подстройки интерфейса
    #35142988
Фотография %?*?%
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Простейшее решение:

1. Сделайте табличку tblLangWords:

ID Russia UnatedStates Ukraina1 НомерNumber ...2 Выход Exit ...3 Введите пароль Enter password ...............2001 Количество Quantity...

2. Каждому лейблу, который должен переводиться, пропишите в Tag нужный номер - 1, 2, 3, ...

3. На событие Load каждой формы поставьте:

Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
Dim ctl As Control
For Each ctl In Me.Controls
   If TypeOf ctl Is Label Then
      If ctl.Tag <> "" And Not IsNull(ctl.Tag) Then
         ctl.Caption = LoadString(ctl.Tag) 
      End If
   End If
Next ctl

4. Создайте стандартный модуль и скопируйте туда нижеследующий код:

Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
31.
32.
33.
34.
35.
36.
37.
38.
39.
40.
41.
42.
43.
44.
45.
46.
47.
48.
49.
50.
51.
52.
53.
54.
55.
56.
57.
58.
59.
60.
61.
62.
63.
64.
65.
66.
67.
68.
69.
70.
71.
72.
73.
74.
75.
76.
77.
78.
79.
Option Compare Database
Option Explicit

Private Const LOCALE_SCOUNTRY As Long = &H6
Private Declare Function GetKeyboardLayout Lib "user32" _
  (ByVal dwLayout As Long) As Long
Private Declare Function GetLocaleInfo Lib "kernel32" _
   Alias "GetLocaleInfoA" _
  (ByVal Locale As Long, _
   ByVal LCType As Long, _
   ByVal lpLCData As String, _
   ByVal cchData As Long) As Long

Private Function GetUserLocaleInfo(ByVal dwLocaleID As Long, _
                                  ByVal dwLCType As Long) As String
   Dim sReturn As String
   Dim nSize As Long
nSize = GetLocaleInfo(dwLocaleID, dwLCType, sReturn, Len(sReturn))
   If nSize >  0  Then
      sReturn = Space$(nSize)
      nSize = GetLocaleInfo(dwLocaleID, dwLCType, sReturn, Len(sReturn))
      If nSize >  0  Then
         GetUserLocaleInfo = Left$(sReturn, nSize -  1 )
      End If
   End If
End Function


Private Function LoWord(wParam As Long) As Integer
   If wParam And &H8000& Then
      LoWord = &H8000& Or (wParam And &H7FFF&)
   Else
      LoWord = wParam And &HFFFF&
   End If
End Function

   
Public Function sCountry() As String
   Dim hKeyboardID As Long
   Dim LCID As Long

hKeyboardID = GetKeyboardLayout( 0 &)
      If hKeyboardID >  0  Then LCID = LoWord(hKeyboardID)
      If LCID Then sCountry = Replace(GetUserLocaleInfo(LCID, LOCALE_SCOUNTRY)," ","")
End Function


Public Function LoadString(wdNumber As Long) As String
On Error GoTo HandleErrors
 Dim strLoadString As String
 Dim db As DAO.Database
 Dim rst As DAO.Recordset
 Dim strSQL As String

Set db = CurrentDb
strSQL = "SELECT tblLangWords." & sCountry _
          & " FROM tblLangWords" _
          & " WHERE tblLangWords.ID = " & wdNumber & ";"

Set rst = db.OpenRecordset(strSQL, dbOpenSnapshot)

   If Not rst.EOF Then
      rst.MoveFirst
      strLoadString = rst("wdText")
   End If

exithere:
 On Error Resume Next
 rst.Close
 db.Close
 Set rst = Nothing
 Set db = Nothing
 LoadString = strLoadString
 Exit Function

HandleErrors:
 MsgBox "MyModuleName - LoadString:" & vbNewLine & Err.Number & vbTab & Err.Description
 Resume exithere
 End Function

Все, можно играться...
...
Рейтинг: 0 / 0
возможность автоматической подстройки интерфейса
    #35142994
Фотография %?*?%
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Хотя, если подумать, в функцию sCountry надо добавить проверку:

Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
Public Function sCountry() As String
   Dim hKeyboardID As Long
   Dim LCID As Long
   Dim db As DAO.Database
   Dim tdf as DAO.TableDef
   Dim fld As DAO.Field
   Dim strCountry
   dim f as Boolean

hKeyboardID = GetKeyboardLayout( 0 &)
      If hKeyboardID >  0  Then LCID = LoWord(hKeyboardID)
      If LCID Then strCountry = Replace(GetUserLocaleInfo(LCID, LOCALE_SCOUNTRY)," ","")

f = False
Set db = CurrentDb
Set tdf = CurrentDb.TableDefs("tblLangWords")

For Each fld In tdf.Fields
   If tdf.Name = strCountry Then f = True
Next

If f Then 
   sCountry = strCountry
Else
   sCountry = "UnitedStates"
End If

End Function
...
Рейтинг: 0 / 0
возможность автоматической подстройки интерфейса
    #35143034
aleks2
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
%?*?%Простейшее решение:
2. Каждому лейблу, который должен переводиться, пропишите в Tag нужный номер - 1, 2, 3, ...


Лишнее, однако, проще в таблице поле "Russia" сделать ключевым и вести замену поиском прямо по нему, используя русский интерфейс как основной.

Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
Dim ctl As Control
For Each ctl In Me.Controls
   If TypeOf ctl Is Label Then
      ctl.Caption = LoadString(ctl.Caption) 
   End If
Next ctl

Public Function LoadString(aCaption As string) As String
  dim NewStr as string
  NewStr=DLookup(...,"Russia="""+aCaption+"""")
  if NewStr<>"" then LoadString = NewStr else LoadString =aCaption
Exit Function


Бонусы:
1. одинаковая фраза переводится только ОДИН раз и не надо помнить ID.
2. Можно сделать автодобавление текста в поле "Russia" и потом только перевести строчки...
...
Рейтинг: 0 / 0
возможность автоматической подстройки интерфейса
    #35143145
Karfaqen
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Аналогично не забыть обработать свойства StatusBarText, ValidationText, ControlTipText контролов форм, свойства Caption кнопок, ярлыков вкладок Tab-контролов, списковые источники строк лист- и комбобоксов и т.п.. Плюс, само-собой, пункты меню - подписи и подсказки для кнопок кустомных тулбаров (ну если все это есть).

Вообще ИМХО, если после установки приложение будет использоваться на одном языке, то можно даже делать процедуру такой замены НЕ каждый раз на ходу, а однократно после установки - перебрав все объекты трансляции (открывая макет в дизайне) и заменив статические тексты на языковые аналоги по таблице строковых ресурсов. Потому что есть еще отчеты, могут быть запросы, содержащие статический текст - много может быть, зачем закладывать лишние перманентные затраты на такую обработку.

Единственное, что можно делать на ходу - это программная генерация текстов сообщений выдаваемых из кода. Точнее даже не генерация, а просто динамическое получение нужного текста на текущем языке.

Для этого любые строковые константы из VB-кода придется убрать и вынести их в общую таблицу строковых ресурсов, присвоить им коды и по этим кодам получать текст на нужном языке (можно просто заменить стандартный MsgBox на свою функцию, где все это сделать).
...
Рейтинг: 0 / 0
возможность автоматической подстройки интерфейса
    #35143159
Karfaqen
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Уточнение Karfaqen любые строковые константы из VB-кода придется убратьНу имеются ввиду, конечно, строки текста, участующие в интерактивных процессах в качестве текста, предназначенного для чтения пользователем - т.е. как минимум строки сообщений, заголовки для MsgBox, InputBox, а также любые программно-формируемые строки текста для форм, отчетов, и т.д.
...
Рейтинг: 0 / 0
возможность автоматической подстройки интерфейса
    #35143377
osmor
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Небольшой пример ко всему вышеизложенному
Пример реализации мульниязычного интерфейса в ACCESS
...
Рейтинг: 0 / 0
возможность автоматической подстройки интерфейса
    #35143944
Фотография Александра-Александра
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Всем большое спасибо...
Теперь будет чем заняться..
...
Рейтинг: 0 / 0
8 сообщений из 8, страница 1 из 1
Форумы / Microsoft Access [игнор отключен] [закрыт для гостей] / возможность автоматической подстройки интерфейса
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]