Bom dia, amigos.
Minha aplicação precisa ter a opção de no mínimo 4 idiomas disponíveis (português, inglês, alemão e espanhol).
Pois bem, a tradução do programa eu consegui fazer setando um número para cada idioma, conforme abaixo:
1 - Alemão
2 - Inglês
3 - Espanhol
4 - Português
O usuário escolhe o idioma desejado através de uma combobox e o número armazenado. Criei um módulo chamado MDL_TRANSLATE onde há uma função que retorna o número do idioma e um procedimento sub que faz a tradução com o select case. Vejam o módulo abaixo:
Option Compare Database
Option Explicit
Public strBemVindo As String
Public strUsuario As String
Public strSenha As String
Public strBtnLogin As String
Public strBtnSair As String
Function RetornarIdioma() As Integer
'Cria uma conexão
Dim conexao As New Connection
'Estabelece uma conexão com este bd
Set conexao = CurrentProject.Connection
'Instrução SQL para pegar o idioma atual
Dim sqlSelect As String
sqlSelect = "SELECT SPRACH_NR FROM AUSWAHL_SPRACHE"
'Cria um RecordSet
Dim rs As New Recordset
'Abre o Recordset utilizando a conexão ativa e insere o resultado SQL
rs.Open sqlSelect, conexao
'Retorna o número do idioma configurado
RetornarIdioma = rs!SPRACH_NR
'Fecha a conexão e limpa a memória
rs.Close
Set rs = Nothing
conexao.Close
Set conexao = Nothing
End Function
Sub Traduzir()
Select Case RetornarIdioma
Case 1
'Alemão
Case 2
'Inglês
strBemVindo = "Welcome to Program"
strUsuario = "User"
strSenha = "Password"
strBtnLogin = "Login"
strBtnSair = "Exit"
Case 3
'Espanhol
Case 4
strBemVindo = "Bem-vindo(a) ao Programa"
strUsuario = "Usuário"
strSenha = "Senha"
strBtnLogin = "Entrar"
strBtnSair = "Sair"
End Select
End Sub
---------------------------------
Feito isso, chamo o procedimento em todos os formulários. Um exemplo com o formulário de login:
Private Sub Form_Open(Cancel As Integer)
'Seta o foco para um campo invisível
Me.txtFoco.SetFocus
Call Traduzir
Me.rtlBemVindo.Caption = strBemVindo
Me.rtlUsuario.Caption = strUsuario
Me.rtlSenha.Caption = strSenha
Me.btnLogin.Caption = strBtnLogin
Me.btnSair.Caption = strBtnSair
End Sub
-----------------------------
Ok. Funciona perfeitamente. A questão é que após a tradução completa para os 4 idiomas, o select case vai ficar enorme, pois seria uma tradução universal, ou seja, de todos os formulários e relatórios. Gostaria de saber: é mais eficiente deste modo mesmo que estou fazendo, ou devo fazer o select case separado em cada formulário? Optei pelo módulo pois há muitos termos que se repetem em formulários diferentes...
Conto com a experiência de vocês!!
Minha aplicação precisa ter a opção de no mínimo 4 idiomas disponíveis (português, inglês, alemão e espanhol).
Pois bem, a tradução do programa eu consegui fazer setando um número para cada idioma, conforme abaixo:
1 - Alemão
2 - Inglês
3 - Espanhol
4 - Português
O usuário escolhe o idioma desejado através de uma combobox e o número armazenado. Criei um módulo chamado MDL_TRANSLATE onde há uma função que retorna o número do idioma e um procedimento sub que faz a tradução com o select case. Vejam o módulo abaixo:
Option Compare Database
Option Explicit
Public strBemVindo As String
Public strUsuario As String
Public strSenha As String
Public strBtnLogin As String
Public strBtnSair As String
Function RetornarIdioma() As Integer
'Cria uma conexão
Dim conexao As New Connection
'Estabelece uma conexão com este bd
Set conexao = CurrentProject.Connection
'Instrução SQL para pegar o idioma atual
Dim sqlSelect As String
sqlSelect = "SELECT SPRACH_NR FROM AUSWAHL_SPRACHE"
'Cria um RecordSet
Dim rs As New Recordset
'Abre o Recordset utilizando a conexão ativa e insere o resultado SQL
rs.Open sqlSelect, conexao
'Retorna o número do idioma configurado
RetornarIdioma = rs!SPRACH_NR
'Fecha a conexão e limpa a memória
rs.Close
Set rs = Nothing
conexao.Close
Set conexao = Nothing
End Function
Sub Traduzir()
Select Case RetornarIdioma
Case 1
'Alemão
Case 2
'Inglês
strBemVindo = "Welcome to Program"
strUsuario = "User"
strSenha = "Password"
strBtnLogin = "Login"
strBtnSair = "Exit"
Case 3
'Espanhol
Case 4
strBemVindo = "Bem-vindo(a) ao Programa"
strUsuario = "Usuário"
strSenha = "Senha"
strBtnLogin = "Entrar"
strBtnSair = "Sair"
End Select
End Sub
---------------------------------
Feito isso, chamo o procedimento em todos os formulários. Um exemplo com o formulário de login:
Private Sub Form_Open(Cancel As Integer)
'Seta o foco para um campo invisível
Me.txtFoco.SetFocus
Call Traduzir
Me.rtlBemVindo.Caption = strBemVindo
Me.rtlUsuario.Caption = strUsuario
Me.rtlSenha.Caption = strSenha
Me.btnLogin.Caption = strBtnLogin
Me.btnSair.Caption = strBtnSair
End Sub
-----------------------------
Ok. Funciona perfeitamente. A questão é que após a tradução completa para os 4 idiomas, o select case vai ficar enorme, pois seria uma tradução universal, ou seja, de todos os formulários e relatórios. Gostaria de saber: é mais eficiente deste modo mesmo que estou fazendo, ou devo fazer o select case separado em cada formulário? Optei pelo módulo pois há muitos termos que se repetem em formulários diferentes...
Conto com a experiência de vocês!!