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 MeEnd Sub Private Sub Command2_Click() Lengua = 100 LoadRes MeEnd Sub Private Sub Command3_Click() Lengua = 1000 LoadRes MeEnd Sub Private Sub Command4_Click() Lengua = 10000 LoadRes MeEnd Sub Private Sub Command5_Click() MsgBox (LoadResString(Lengua + 4)) Unload MeEnd Sub Private Sub Form_Load() ActualizarLCDInfo LoadRes MeEnd Sub Private Sub ActualizarLCDInfo() Dim tLocaleInfo As CLocaleInfo Set tLocaleInfo = New CLocaleInfo With tLocaleInfo Text1 = .NativeLanguage End With Select Case Text1.TextCase "Español"
Lengua = 0
Case "English"
Lengua = 100Case "Italiano"
Lengua = 1000
Case "Française"
Lengua = 10000 End SelectEnd 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 IntegerPrivate Declare Function SetLocaleInfo Lib "kernel32" Alias "SetLocaleInfoA" _ (ByVal Locale As Long, ByVal LCType As Long, _ ByVal lpLCData As String) As LongPrivate 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 languageEnd 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 = LCIDEnd 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 IfEnd 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)