Страница: 1 | 2 |
Вопрос: Смена языка
Добавлено: 06.11.06 19:44
Автор вопроса: Graffin
Люди..Снова нужна помощь, подсказка..Так, вот, все что я прошу сделать, это относится к тому, что надо сделать на Vb.Net.И на этот раз, у меня такое задание, как написание простейшего оконного приложения, отображающее Label и Button, с поддержкой двух языков, которые переключаются через главное меню..Я как понимаю, что если выбрал русский язык, то на компонентах пишется на русском языке, если английсский - то на английском..Но, вот не знаю, какое событие, или метод или что-то еще, с помощью которого оно понимало, что язык поменялся...или может еще какие-то способы есть?
Ответы
Всего ответов: 28
Номер ответа: 1
Автор ответа:
GSerg
Вопросов: 0
Ответов: 1876
Профиль | | #1
Добавлено: 06.11.06 20:45
Люди.. У меня кнопка на форме... Я её сам нажимаю... Но, вот не знаю, какое событие, или метод или что-то ещё, с помощью которого оно понимало, что кнопка нажата...
Номер ответа: 2
Автор ответа:
Sharp
Лидер форума
ICQ: 216865379
Вопросов: 106
Ответов: 9979
Web-сайт:
Профиль | | #2
Добавлено: 06.11.06 21:41
Ну если тебе нужно именно событие, то делай RaiseEvent когда меняешь язык
Номер ответа: 3
Автор ответа:
-АлександР-
Вопросов: 55
Ответов: 1008
Web-сайт:
Профиль | | #3
Добавлено: 06.11.06 22:01
Другой - если ты вводишь в текстовой редактор текст, то можешь проверить диапазон вводимых символов по ASCII.
Но если тебе нужно просто поменять с английского на русский captionы кнопки и метки, то правда - жми кнопку, или в меню сделай "Опции", или что-то типа того, которая вызывает окно настроек, где меняется язык. Вроде везде так и делается, в нормальных программах
Номер ответа: 4
Автор ответа:
EROS
Вопросов: 58
Ответов: 4255
Профиль | | #4
Добавлено: 06.11.06 23:04
Ищи примеры локализации.. В инете их туча
Номер ответа: 5
Автор ответа:
Graffin
Вопросов: 4
Ответов: 7
Профиль | | #5
Добавлено: 07.11.06 00:16
Спасибо!
Номер ответа: 6
Автор ответа:
Fever
Вопросов: 60
Ответов: 808
Профиль | | #6
Добавлено: 08.11.06 19:43
можно из VB Application Wizard создать прогу, на одной из вкладок выбрать Yes когда спрашивают про Resource file. Тогда в проекте будет саб LoadResStrings, который надо чуть поменять под свои нужды и юзать. У меня это выглядело так
Attribute VB_Name = "modLanguage"
'//////////////////////////////////////////////////////////////////////////////
' modLanguage - module for loading *.LNG files.
' Version history
' • 1.00 for GC4 20.10.2006
' + StrOption 28.10.2006 SCHOOL AUTUMN HOLIDAYS STARTED!!!
' © Polkovnikov Philip, 2006
'//////////////////////////////////////////////////////////////////////////////
Option Explicit
Public Languages As Collection
Public CurrLang As Language
Public LangPath As String
Public Const LangExt As String = ".lng"
Private Const BS As String = "\"
Private Const LngFldr As String = "Languages\"
Public Function StrOption(ID As String, ParamArray Opts() As Variant) As String
Const S_OPTION As String = "%"
Dim i As Long
Dim txt As Variant
txt = CurrLang.Strings(ID)
For i = 0 To UBound(Opts)
txt = Replace(txt, S_OPTION, Opts(i), 1, 1)
Next
StrOption = txt
End Function
Public Function LoadLanguages()
Dim sPath As String
Dim NewItem As Language
Dim TmpArr As Variant
LangPath = App.Path
If Right(LangPath, 1) <> BS Then LangPath = LangPath & BS
LangPath = LangPath & LngFldr
Set Languages = New Collection
sPath = Dir(LangPath & "*.lng", vbNormal)
If sPath <> "." And sPath <> ".." And sPath <> vbNullString Then
Set NewItem = New Language
TmpArr = Split(sPath, ".", 2)
If LCase(TmpArr(1)) <> "lng" Then
Set NewItem = Nothing
Else
NewItem.Key = LCase(TmpArr(0))
Languages.Add NewItem, NewItem.Key
End If
End If
Do Until sPath = vbNullString
sPath = Dir()
If sPath <> "." And sPath <> ".." And sPath <> vbNullString Then
Set NewItem = New Language
TmpArr = Split(sPath, ".", 2)
If LCase(TmpArr(1)) <> "lng" Then
Set NewItem = Nothing
Else
NewItem.Key = LCase(TmpArr(0))
Languages.Add NewItem, NewItem.Key
End If
End If
Loop
If Languages.Count = 0 Then
RaiseError ERR_NOLNG
Else
For Each NewItem In Languages
If NewItem.Key = LastLang Then
If LoadLanguageFile(NewItem) = ERR_SUCCESS Then
Set CurrLang = NewItem
GoTo FinishLang
Else
NewItem.Corrupted = True
End If
End If
Next
For Each NewItem In Languages
If LoadLanguageFile(NewItem) = ERR_SUCCESS Then
Set CurrLang = NewItem
GoTo FinishLang
End If
Next
RaiseError ERR_ALLCORR
End If
FinishLang:
LoadLanguageStrings
End Function
Public Function LoadLanguageFile(Lng As Language)
Dim c As Long
Dim TmpStr As String
Dim TmpArr As Variant
Dim SectionFound As Boolean
Dim Descr As Long
LoadLanguageFile = ERR_SUCCESS
Set Lng.Strings = Nothing
Set Lng.Strings = New Collection
 escr = FreeFile
Open LangPath & Lng.Key & LangExt For Input As #Descr
Do Until EOF(Descr)
Line Input #Descr, TmpStr
TmpStr = Trim(TmpStr)
If TmpStr <> vbNullString Then
TmpStr = Trim(Split(TmpStr, ";", 2)(0))
If TmpStr <> vbNullString Then
If SectionFound Then
If Left(TmpStr, 1) = "[" Then Exit Do
TmpArr = Split(TmpStr, "="
TmpArr(0) = RTrim(TmpArr(0))
TmpArr(1) = LTrim(TmpArr(1))
Lng.Strings.Add mID(TmpArr(1), 2, Len(TmpArr(1)) - 2), TmpArr(0)
Else
If TmpStr = "[" & CStr(App.Major) & CStr(App.Minor) & "]" Then SectionFound = True
End If
End If
End If
Loop
Close #Descr
Exit Function
corr:
Set Lng.Strings = Nothing
Lng.Corrupted = True
LoadLanguageFile = ERR_SUCCESS + 1
End Function
Public Sub LoadLanguageStrings()
On Error Resume Next
Dim Frm As Form
Dim Ctl As Control
For Each Frm In Forms
Frm.Caption = CurrLang.Strings(Frm.Tag)
For Each Ctl In Frm.Controls
LoadLangString Ctl
Next
Next
End Sub
Private Sub LoadLangString(Ctl As Control)
On Error Resume Next
Dim TMP As String
Dim TMPMas As Variant
Select Case TypeName(Ctl)
Case "Menu"
If Ctl.HelpContextID > 0 Then Ctl.Caption = CurrLang.Strings(CStr(Ctl.HelpContextID))
Case Else
TMPMas = Split(Ctl.Tag, " ", 2)
TMP = vbNullString
TMP = CurrLang.Strings(TMPMas(0))
If TMP <> vbNullString Then Ctl.Caption = TMP
TMP = vbNullString
TMP = CurrLang.Strings(TMPMas(1))
If TMP <> vbNullString Then Ctl.ToolTipText = TMP
End Select
End Sub
Номер ответа: 7
Автор ответа:
Morpheus
Вопросов: 224
Ответов: 3777
Web-сайт:
Профиль | | #7
Добавлено: 08.11.06 21:58
GSerg - ass! (ugadayte, eto ya na translite pishu? :D ))
Номер ответа: 8
Автор ответа:
Sacred Phoenix
ICQ: 304238252
Вопросов: 52
Ответов: 927
Профиль | | #8
Добавлено: 08.11.06 23:08
2 Fever: кстать лучше юзать xml-файлы. Их легче парсить
ЗЫ. Морфеус жжот ))
Номер ответа: 9
Автор ответа:
EROS
Вопросов: 58
Ответов: 4255
Профиль | | #9
Добавлено: 08.11.06 23:59
Нее.. НЕТ я точно не на что не поменяю.. ))
Тут для локализации надо сделать пару движений мышкой и вставить 1-2 строчку кода в нужное место..
И для всех контролов поменяются надписи (разумеется если есть перевод в нужном ресурсе)
Номер ответа: 10
Автор ответа:
Artyom
Разработчик
Вопросов: 130
Ответов: 6602
Профиль | | #10
Добавлено: 09.11.06 00:13
Именно сразу после изменения локали поменяются или нужно как-то принудительно это вызывать? МОжно как-то отследить изменение локали?
Номер ответа: 11
Автор ответа:
EROS
Вопросов: 58
Ответов: 4255
Профиль | | #11
Добавлено: 09.11.06 02:02
Фишка в том, что эту строчку необходимо вставлять в конструкторе ДО InitializeComponent()
После этого форма будет брать все надписи из нужной локали.
В run-time такое изменение ни к чему не приведет.. вернее локаль поменяется, но надписи нет. Надо будет пробежаться по коллекции Controls и через ResourceManager выдернуть нужные строки и заново их присвоить контролам.
Что касается перехвата события изменения локали ... не знаю, не доводилось экспериментировать..
Еще один интересный момент в том, что если вообще ничего не писать, то локаль берется из настроек винды..
В 2005 студии появился новый метод My.Application.ChangeUICulture что, впрочем, одно и тоже..
Номер ответа: 12
Автор ответа:
Artyom
Разработчик
Вопросов: 130
Ответов: 6602
Профиль | | #12
Добавлено: 09.11.06 03:37
Мастдай
Вот если б контролы сами подхватывали свои свойства при изменении локали...
Номер ответа: 13
Автор ответа:
Sharp
Лидер форума
ICQ: 216865379
Вопросов: 106
Ответов: 9979
Web-сайт:
Профиль | | #13
Добавлено: 09.11.06 03:42
Morpheus: на чем бы не написал, выглядит все равно нехорошо
Номер ответа: 14
Автор ответа:
Morpheus
Вопросов: 224
Ответов: 3777
Web-сайт:
Профиль | | #14
Добавлено: 09.11.06 04:32
2Sharp: Ах да, конечно - ведь слово "ас" же с ошибкой... или без ошибки? А это смотря кого спросить Однозначно ответит только Гепард
Номер ответа: 15
Автор ответа:
Sacred Phoenix
ICQ: 304238252
Вопросов: 52
Ответов: 927
Профиль | | #15
Добавлено: 09.11.06 15:12