Aplicación Multilenguaje [ECHO]

y programas personales para otros como tu, puede que te corrijan ;)
Responder
Avatar de Usuario
yasmany
Hacker del Foro
Mensajes: 249
Registrado: 06 Sep 2011, 21:30

Aplicación Multilenguaje [ECHO]

Mensaje por yasmany »

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.27 KiB) Descargado 229 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
PDF
Hacker del Foro
Mensajes: 152
Registrado: 18 Ene 2013, 23:23

Re: Aplicación Multilenguaje [ECHO]

Mensaje por PDF »

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...
Avatar de Usuario
yasmany
Hacker del Foro
Mensajes: 249
Registrado: 06 Sep 2011, 21:30

Re: Aplicación Multilenguaje [ECHO]

Mensaje por yasmany »

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
Dany
Profesional del Autoit
Mensajes: 651
Registrado: 28 Mar 2012, 22:49

Re: Aplicación Multilenguaje [ECHO]

Mensaje por Dany »

Excelente Gracias por el ejemplo.

Saludos
  • ............................................Imagen
    ......................................Imagen
Avatar de Usuario
yasmany
Hacker del Foro
Mensajes: 249
Registrado: 06 Sep 2011, 21:30

Re: Aplicación Multilenguaje [ECHO]

Mensaje por yasmany »

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
Responder