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       

ir al índice

Fichero con el código Completo (Multilenguage.zip – 4.5 KB)