Multilenguaje
Ejemplo para hacer un sistema Multi Lenguaje
Publicado el
17/Ene/2002
Fecha: 15/Ene/2002
Autor: Miguelacho ( [email protected] )
Hola de nuevo Guille, te mando un ejemplito muy sencillo y corto pero lo suficientemente completo como para usarlo de base para construir un sistema multilenguaje. El mismo consta de una clase modificada de tu ejemplo LocaleInfo, la cual detecta el idioma desde la configuración Regional para elegir el idioma del formulario y escribir todas las etiquetas en el lenguaje predeterminado, luego, tienes la opción de cambiarlo pulsando los botones según el idioma al que se quiera cambiar.
Esta es la pantalla:
A continuación los Códigos:
Form:
'---------------------------------------------------------------------------------------
' Module : frmMultileng
' DateTime : 15/01/2002 16:35
' Author : Miguelacho© 2001 [email protected]
' Purpose : Ejemplo para un sistema Multilenguaje
'---------------------------------------------------------------------------------------
Option Explicit
Private Sub Command1_Click()
Lengua = 0
LoadRes Me
End Sub
Private Sub Command2_Click()
Lengua = 100
LoadRes Me
End Sub
Private Sub Command3_Click()
Lengua = 1000
LoadRes Me
End Sub
Private Sub Command4_Click()
Lengua = 10000
LoadRes Me
End Sub
Private Sub Command5_Click()
MsgBox (LoadResString(Lengua + 4))
Unload Me
End Sub
Private Sub Form_Load()
ActualizarLCDInfo
LoadRes Me
End Sub
Private Sub ActualizarLCDInfo()
Dim tLocaleInfo As CLocaleInfo
Set tLocaleInfo = New CLocaleInfo
With tLocaleInfo
Text1 = .NativeLanguage
End With
Select Case Text1.Text
Case "Español"
Lengua = 0
Case "English"
Lengua = 100
Case "Italiano"
Lengua = 1000
Case "Française"
Lengua = 10000
End Select
End Sub
Módula de Clase:
'------------------------------------------------------------------------------
'ESTE CÓDIGO HA SIDO MODIFICADO PARA ADAPTARLA A ESTE EJEMPLO
'ELIMINANDO ALGUNAS DE SUS FUNCIONES
'EL CÓDIGO COMPLETO PERTENECE AL AUTOR ABAJO IDENTIFICADO
' CLocaleInfo (03/Sep/99)
' Clase para obtener la información del idioma actual del sistema
'
' Probado en Windows 2000 Professional (23/Mar/01)
'
' ©Guillermo 'guille' Som, 1999-2001
'http://www.elguille.info/vb/api/localeinfo.htm
'------------------------------------------------------------------------------
Option Explicit
' LCID del idioma actual
Private LCID As Long
' Longitud del buffer para obtener la información
Private Const MAX_LOCALE_BUF As Long = 256&
Private Declare Function GetSystemDefaultLangID Lib "kernel32" () As Integer
Private Declare Function SetLocaleInfo Lib "kernel32" Alias "SetLocaleInfoA" _
(ByVal Locale As Long, ByVal LCType As Long, _
ByVal lpLCData As String) 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
Public Enum eLocaleInfo
LOCALE_SENGLANGUAGE = &H1001 ' English name of language
LOCALE_SNATIVELANGNAME = &H4 ' native name of language
End Enum
Public Function NativeLanguage() As String
' Devuelve el idioma actual, en el propio idioma
NativeLanguage = LocaleInfo(LOCALE_SNATIVELANGNAME)
End Function
Private Function TrimNull(ByVal sCadena As String) As String
' Devuelve la cadena hasta el primer null
' También quita los espacios extras
Dim i As Long
i = InStr(sCadena, Chr$(0))
If i Then
TrimNull = Left$(sCadena, i - 1)
End If
TrimNull = Trim$(sCadena)
End Function
Private Sub Class_Initialize()
' Al iniciar la clase, obtener el ID del idioma usado
GetLCID
End Sub
Public Function GetLCID() As Long
' Obtener el ID del idioma usado
' Lo he puesto en un método público por si se quiere refrescar la información
LCID = GetSystemDefaultLangID
GetLCID = LCID
End Function
Public Function LocaleInfo(Optional ByVal nLocaleInfo As eLocaleInfo = LOCALE_SENGLANGUAGE) As String
' Devuelve la información indicada en el parámetro
' Si no se especifica el parámetro,
' será el nombre del idioma según la norma ISO (en inglés)
Dim sBuf As String
sBuf = Space$(MAX_LOCALE_BUF)
Call GetLocaleInfo(LCID, nLocaleInfo, sBuf, Len(sBuf))
LocaleInfo = TrimNull(sBuf)
End Function
Módulo BAS:
'---------------------------------------------------------------------------------------
' Module : Multilengua
' DateTime : 15/01/2002 16:32
' Author : Miguelacho© 2001 [email protected]
'---------------------------------------------------------------------------------------
Option Explicit
Public Lengua As Long
Public Sub LoadRes(myFrm As Form)
Dim myControl As Control
Dim myIndice As Long
For Each myControl In myFrm.Controls
If Len(myControl.Tag) Then
myIndice = myControl.Tag
If TypeOf myControl Is Label Then
myControl.Caption = LoadResString(Lengua + myIndice)
End If
If TypeOf myControl Is CommandButton Then
myControl.Caption = LoadResString(myIndice + Lengua)
End If
If TypeOf myControl Is TextBox Then
myControl.Text = LoadResString(myIndice + Lengua)
End If
End If
Next
If Len(myFrm.Tag) Then
myFrm.Caption = LoadResString(myFrm.Tag + Lengua)
End If
End Sub
Archivo RES:
0 Español
1 Este es un ejemplo para cambiar los idiomas en un sistema. Es una aplicación sencilla pero lo suficientemente completa para iniciarse en un sistema MULTILENGUAJE
2 Salir
3 El idioma es:
4 Gracias por usar el programa
5 Ejemplo en Español
6 Español
7 Inglés
8 Italiano
9 Francés
100 English
101 This is an example to change the languages in a system. It is a simple application but the sufficiently complete thing to begin in a system MULTILENGUAJE
102 Exit
103 The lenguage is:
104 Thanks for using this program
105 Example in English
106 Spanish
107 English
108 Italian
109 French
1000 Italiano
1001 Questo è un esempio per cambiare le lingue in un sistema. È una semplice domanda ma il sufficientemente cosa completa cominciare in un sistema MULTILENGUAGE
1002 Uscita
1003 Il lenguage è:
1004 Grazie per usare questo programma
1005 Esempio nell'italiano
1006 Epagnolo
1007 Inglese
1008 Italiano
1009 Francese
10000 Française
10001 C'est un exemple pour changer les langues dans un système. Il est une candidature simple mais la chose suffisamment complète commencer dans un système MULTILENGUAGE
10002 Sortie
10003 Ce lenguage est:
10004 Remerciements pour utiliser ce programme
10005 Exemple dans français
10006 Espagnol
10007 Anglais
10008 Italien
10009 Français
Fichero con el código Completo (Multilenguage.zip – 4.5 KB)