Aplicación Multilenguaje [ECHO]

y programas personales para otros como tu, puede que te corrijan ;)

Aplicación Multilenguaje [ECHO]

Notapor yasmany » 25 Nov 2014, 03:30

Un buen día con todos, he realizado un pequeño ejemplo de una aplicación MULTILENGUAJE, incluye tambien para mensajes, solo está para ingles y español pero es adaptable para los idiomas que se quieran agregar al ini, adjunto el archivo INI.
No he comentado el código pero ESPERO que lo entiendan, no tengo casi mucho tiempo.

Imagen

Código: Seleccionar todo
#include <ButtonConstants.au3>
#include <ComboConstants.au3>
#include <GUIConstantsEx.au3>
#include <GuiStatusBar.au3>
#include <StaticConstants.au3>
#include <TabConstants.au3>
#include <WindowsConstants.au3>
#include <GuiComboBox.au3>
#include <GuiTab.au3>

Opt("GUICloseOnESC", 0) ; no cierra la ventana al presionar ESC
Opt("GUIOnEventMode", 1)

Global $guiPrincipal, $cmbIdioma, $btnMensaje, $lblTexto1, $lblLenguaje, $tabPrincipal, $tabItemLista, $tabItemValores, $tabItemFinal
Global $grupo, $rdoOpcion1, $rdoOpcion2, $menu, $mItemAbrir, $menuAyuda, $mItemInformacion, $mItemSalir,$menuVer, $mItemStatus

$guiPrincipal = GUICreate("Ventana MultiIdioma", 551, 307, 205, 147)
$cmbIdioma = GUICtrlCreateCombo("Español", 392, 56, 145, 25, BitOR($CBS_DROPDOWNLIST, $CBS_AUTOHSCROLL))
GUICtrlSetData($cmbIdioma, "English")

$btnMensaje = GUICtrlCreateButton("Mensaje", 368, 224, 139, 25)
$lblTexto1 = GUICtrlCreateLabel("Este es un pequeño ejemplo en el que se trata de mostrar una ventana multi idioma", 8, 32, 395, 17)
$lblLenguaje = GUICtrlCreateLabel("Seleccione el idioma", 440, 32, 101, 17)
$tabPrincipal = GUICtrlCreateTab(16, 64, 329, 185)
$tabItemLista = GUICtrlCreateTabItem("Lista")
$tabItemValores = GUICtrlCreateTabItem("Valores")
GUICtrlSetState(-1, $GUI_SHOW)

$tabItemFinal = GUICtrlCreateTabItem("Final")
GUICtrlCreateTabItem("")

$grupo = GUICtrlCreateGroup("Grupo Ejemplo", 352, 112, 185, 105)
$rdoOpcion1 = GUICtrlCreateRadio("Opcion Uno", 376, 144, 113, 17)
$rdoOpcion2 = GUICtrlCreateRadio("Opcion dos", 376, 168, 113, 17)
GUICtrlSetState($rdoOpcion2, $GUI_CHECKED)
GUICtrlCreateGroup("", -99, -99, 1, 1)

$menu = GUICtrlCreateMenu("&Archivo")
$mItemAbrir = GUICtrlCreateMenuItem("Abrir", $menu)
GUICtrlSetState(-1, $GUI_DEFBUTTON)
$menuAyuda = GUICtrlCreateMenu("Ayuda")
$mItemGuardar = GUICtrlCreateMenuItem("Guardar", $menu)
GUICtrlSetState(-1, $GUI_DISABLE)
$mItemInformacion = GUICtrlCreateMenuItem("Informacion", $menuAyuda)
$mItemSalir = GUICtrlCreateMenuItem("Salir", $menu)
GUICtrlCreateMenuItem("", $menu, 2) ; crea una línea separadora

$menuVer = GUICtrlCreateMenu("Ver", -1, 1) ; es creado antes del menú "?"
$mItemStatus = GUICtrlCreateMenuItem("Statusbar", $menuVer)
GUICtrlSetState(-1, $GUI_CHECKED)
_cargarEventos()

;cargo el idioma que haya utilizado la ultima vez---------------------------
If Iniread(@ScriptDir & "\idioma.ini", "Idioma", "english", "") = 1 Then
   _GUICtrlComboBox_SelectString($cmbIdioma,"English"); selecciono el item
   _cargarIdioma("English")
EndIf
;---------------------------------------------------------------------------
GUISetState(@SW_SHOW)
While 1
   Sleep(100)
WEnd

Func _cargarEventos()
   GUISetOnEvent($GUI_EVENT_CLOSE, "_cerrarInterfaz")
   GUICtrlSetOnEvent($cmbIdioma, '_idiomaSeleccion')
   GUICtrlSetOnEvent($btnMensaje, '_mensaje')
   GUICtrlSetOnEvent($mItemSalir, '_cerrarInterfaz')
   GUICtrlSetOnEvent($tabPrincipal, '_clicTab')
EndFunc   ;==>_cargarEventos

Func _clicTab()
   If _GUICtrlTab_GetCurSel($tabPrincipal) = 0 Then MsgBox(64, "Nombre Programa", _mensajesMultiIdiomas("clicTab0"), -1, $guiPrincipal)
   If _GUICtrlTab_GetCurSel($tabPrincipal) = 1 Then MsgBox(64, "Nombre Programa", _mensajesMultiIdiomas("clicTab1"), -1, $guiPrincipal)
   If _GUICtrlTab_GetCurSel($tabPrincipal) = 2 Then MsgBox(64, "Nombre Programa", _mensajesMultiIdiomas("clicTab2"), -1, $guiPrincipal)
EndFunc

Func _idiomaSeleccion()
   If GUICtrlRead($cmbIdioma) = "español" Then
      IniWrite(@ScriptDir & "\idioma.ini", "Idioma", "español", "1")
      IniWrite(@ScriptDir & "\idioma.ini", "Idioma", "english", "0")
      _cargarIdioma("Español")
   ElseIf GUICtrlRead($cmbIdioma) = "English" Then
      IniWrite(@ScriptDir & "\idioma.ini", "Idioma", "español", "0")
      IniWrite(@ScriptDir & "\idioma.ini", "Idioma", "english", "1")
      _cargarIdioma("English")
   EndIf
EndFunc   ;==>_idiomaSeleccion

Func _cargarIdioma($idiomaSeleccionado)
   Local $controles[23] = [$guiPrincipal, $btnMensaje, $lblTexto1 _
         , $lblLenguaje, $tabItemLista, $tabItemValores, $tabItemFinal _
         , $grupo, $rdoOpcion1, $rdoOpcion2, $menu, $mItemAbrir, $menuAyuda, $mItemGuardar, $mItemInformacion _
         , $mItemSalir, $menuVer, $mItemStatus]
      Local $claveYvalor = IniReadSection(@ScriptDir & "\idioma.ini", $idiomaSeleccionado)
      For $i = 1 To $claveYvalor[0][0]
         For $i = 0 To 22
            GUICtrlSetData($controles[$i], $claveYvalor[$i + 1][1])
         Next
      Next
EndFunc   ;==>_cargarIdioma

Func _mensaje()
   If GUICtrlRead($rdoOpcion1) = $GUI_CHECKED Then MsgBox(64, "Nombre Programa", _mensajesMultiIdiomas("mensajeClicOpcion1"), -1, $guiPrincipal)
   If GUICtrlRead($rdoOpcion2) = $GUI_CHECKED Then MsgBox(64, "Nombre Programa", _mensajesMultiIdiomas("mensajeClicOpcion2"), -1, $guiPrincipal)
EndFunc   ;==>_mensaje

Func _mensajesMultiIdiomas($razonDeMensaje)
   Local $textoMensaje
   Local $claveYvalor = IniReadSection(@ScriptDir & "\idioma.ini", GuiCtrlRead($cmbIdioma))
      For $i = 1 To $claveYvalor[0][0]
            If $claveYvalor[$i][0] = $razonDeMensaje Then
               $textoMensaje = $claveYvalor[$i][1]
               ExitLoop
            EndIf
      Next
      Return $textoMensaje
EndFunc   ;==>_mensajesMultiIdiomas

Func _cerrarInterfaz()
   Exit
EndFunc   ;==>_cerrarInterfaz


De seguro existe una mejor manera de hacerlo, espero que pongan ejemplos :smt003
Saludos... :smt024
Adjuntos
Ejemplo_Multi-Idioma.rar
(2.28 KiB) 67 veces
Obra de modo que merezcas a tu propio juicio y a juicio de los demás la eternidad, que te hagas insustituible que no merezcas morir.
https://www.facebook.com/yasmanycurimilma
Avatar de Usuario
yasmany
Hacker del Foro
 
Mensajes: 249
Registrado: 06 Sep 2011, 21:30

Re: Aplicación Multilenguaje [ECHO]

Notapor PDF » 25 Nov 2014, 14:56

Excelente ejemplo yasmany :smt023
Recuerdo que yo lo hacia usando una funcion para cada control, pero esto es mas efectivo...

Solo un pequeño detalle para la funcion _cargarIdioma, le agregué un if para comprobar que existan las claves, ya que sino manda un error como este:
"G:\guiMultiIdioma.au3" (96) : ==> Subscript used on non-accessible variable.:

Código: Seleccionar todo
Func _cargarIdioma($idiomaSeleccionado)
   Local $controles[23] = [$guiPrincipal, $btnMensaje, $lblTexto1 _
         , $lblLenguaje, $tabItemLista, $tabItemValores, $tabItemFinal _
         , $grupo, $rdoOpcion1, $rdoOpcion2, $menu, $mItemAbrir, $menuAyuda, $mItemGuardar, $mItemInformacion _
         , $mItemSalir, $menuVer, $mItemStatus]
   Local $claveYvalor = IniReadSection(@ScriptDir & "\idioma.ini", $idiomaSeleccionado)
   If Not @error Then
      For $i = 1 To $claveYvalor[0][0]
         For $i = 0 To 22
            GUICtrlSetData($controles[$i], $claveYvalor[$i + 1][1])
         Next
      Next
   EndIf

EndFunc   ;==>_cargarIdioma

Func _mensajesMultiIdiomas($razonDeMensaje)
   Local $textoMensaje
   Local $claveYvalor = IniReadSection(@ScriptDir & "\idioma.ini", GUICtrlRead($cmbIdioma))
   If Not @error Then
      For $i = 1 To $claveYvalor[0][0]
         If $claveYvalor[$i][0] = $razonDeMensaje Then
            $textoMensaje = $claveYvalor[$i][1]
            ExitLoop
         EndIf
      Next
   EndIf
   Return $textoMensaje
EndFunc   ;==>_mensajesMultiIdiomas

lo mismo para la funcion _mensajesMultiIdiomas

Gracias, y Saludos...
PDF
Hacker del Foro
 
Mensajes: 152
Registrado: 18 Ene 2013, 23:23

Re: Aplicación Multilenguaje [ECHO]

Notapor yasmany » 26 Nov 2014, 00:00

Gracias PDF, que bien que se vea útil. :smt024
Obra de modo que merezcas a tu propio juicio y a juicio de los demás la eternidad, que te hagas insustituible que no merezcas morir.
https://www.facebook.com/yasmanycurimilma
Avatar de Usuario
yasmany
Hacker del Foro
 
Mensajes: 249
Registrado: 06 Sep 2011, 21:30

Re: Aplicación Multilenguaje [ECHO]

Notapor Dany » 26 Nov 2014, 18:13

Excelente Gracias por el ejemplo.

Saludos
    ............................................Imagen
    ......................................Imagen
Avatar de Usuario
Dany
Profesional del Autoit
 
Mensajes: 643
Registrado: 28 Mar 2012, 22:49

Re: Aplicación Multilenguaje [ECHO]

Notapor yasmany » 26 Nov 2014, 18:54

De nada Dany , mientras pueda, ayudaré en lo que sea posible :smt024
Obra de modo que merezcas a tu propio juicio y a juicio de los demás la eternidad, que te hagas insustituible que no merezcas morir.
https://www.facebook.com/yasmanycurimilma
Avatar de Usuario
yasmany
Hacker del Foro
 
Mensajes: 249
Registrado: 06 Sep 2011, 21:30


Volver a esScripts - Programas - Abre tus creaciones maravillosas

¿Quién está conectado?

Usuarios navegando por este Foro: No hay usuarios registrados visitando el Foro y 2 invitados

cron