Foro de elhacker.net

Programación => Scripting => Mensaje iniciado por: z3nth10n en 24 Mayo 2012, 17:42 pm



Título: Batch multi-idiomas
Publicado por: z3nth10n en 24 Mayo 2012, 17:42 pm
Hola amigos, hay alguna forma de hacer un batch multi-idiomas, es decir yo tengo un batch. Y desde varios archivos de configuracion tengo los idiomas, hay alguna forma? o algo alternativo?

Gracias  y un saludo.
Si no hay ninguna forma da igual, tengo otra que es un poco chapucera pero bueno.


Título: Re: Batch multi-idiomas
Publicado por: Eleкtro en 24 Mayo 2012, 18:25 pm
Método 1:

Spanish.ini
Código:
1=Bienvenido a mi programa
2=Porfavor seleccione una opcion para continuar...
3=Codeado por Elektro H@cker
4=opcion

English.ini
Código:
1=Welcome to my program
2=Please choose an option to continue...
3=Coded by Elektro H@cker
4=option

test.bat
Código
  1. @Echo OFF
  2.  
  3. Echo What language you will to use? \ Que lenguaje quiere usar? | MORE
  4. Echo [1] English, [2] Spanish, [3] Catalan.                     | MORE
  5. Choice /C 123 /M "Choose a language"
  6. If %Errorlevel% EQU 1 (Set LANG=English)
  7. If %Errorlevel% EQU 2 (Set LANG=Spanish)
  8.  
  9. For /F "Tokens=2 Delims==" %%a in ('Type "%LANG%.ini" ^| Find "1="') Do (set saludo=%%a)
  10. For /F "Tokens=2 Delims==" %%a in ('Type "%LANG%.ini" ^| Find "2="') Do (set Selecciona=%%a)
  11. For /F "Tokens=2 Delims==" %%a in ('Type "%LANG%.ini" ^| Find "3="') Do (set autor=%%a)
  12. For /F "Tokens=2 Delims==" %%a in ('Type "%LANG%.ini" ^| Find "4="') Do (set opcion_menu=%%a)
  13.  
  14. :Menu
  15. Echo %Saludo%
  16. Echo %autor%           | MORE
  17. Echo %Selecciona%      | MORE
  18. Echo: %opcion_menu% 1
  19. Echo: %opcion_menu% 2
  20. Echo: %opcion_menu% 3  | MORE
  21.  
  22. Set /P option= ^>^>



Método 2:

Código
  1. @Echo OFF
  2.  
  3. Goto :Program
  4. :Langs
  5. If /I "%lang%" EQU "English" (
  6. Title Language Test Menu
  7. Set saludo=Welcome to my program
  8. Set Selecciona=Please choose an option to continue...
  9. Set opcion_menu=Option
  10. Set Autor=Coded by Elektro H@cker
  11. )
  12.  
  13. If /I "%lang%" EQU "Spanish" (
  14. Title Test de menu de idiomas
  15. Set saludo=Bienvenido a mi programa
  16. Set Selecciona=Porfavor seleccione una opcion para continuar...
  17. Set opcion_menu=Opcion
  18. Set Autor=Codeado por Elektro H@cker
  19. )
  20.  
  21. If /I "%lang%" EQU "Catalan" (
  22. Title Test de menu d'idiomes
  23. Set saludo=Benvingut al meu programa
  24. Set Selecciona=Si us plau seleccioneu una opcio per continuar ...
  25. Set opcion_menu=Opcio
  26. Set Autor=Codeaixat per Elektro H@cker
  27. )
  28. Goto :EOF
  29.  
  30. :Program
  31. Echo What language you will to use? \ Que lenguaje quiere usar? \ Que llenguatge voleu utilitzar? | MORE
  32. Echo [1] English, [2] Spanish, [3] Catalan.                                                       | MORE
  33. Choice /C 123 /M "Choose a language"
  34. If %Errorlevel% EQU 1 (Set LANG=English)
  35. If %Errorlevel% EQU 2 (Set LANG=Spanish)
  36. If %Errorlevel% EQU 3 (Set LANG=Catalan)
  37. Call :Langs
  38.  
  39. :Menu
  40. Echo %Saludo%
  41. Echo %autor%           | MORE
  42. Echo %Selecciona%      | MORE
  43. Echo: %opcion_menu% 1
  44. Echo: %opcion_menu% 2
  45. Echo: %opcion_menu% 3  | MORE
  46.  
  47. Set /P option= ^>^>



Los dos codes dan el mismo resultado:

(http://img221.imageshack.us/img221/3095/prtscrcaptureow.jpg)




Saludos!


Título: Re: Batch multi-idiomas
Publicado por: z3nth10n en 24 Mayo 2012, 19:08 pm
Wow! Gracias, me voy a tirar un siglo entero para adaptarlo a mi code pero bueno... XD  :¬¬  :xD

Edito: Y si lo quiero hacer con if? que es como yo se... es decir... tengo:

Código:
:LANG
echo Idiomas disponibles:
echo [0 - Inglés]
echo [1 - Español]
echo.
set /p "lang=>> "
if not defined lang goto:LANG
if "%lang%"=="0" goto:ENG
if "%lang%"=="b" goto:SPA
pause

Como lo deberia hacer?, que deberia poner en SPA y ENG???


Título: Re: Batch multi-idiomas
Publicado por: Eleкtro en 24 Mayo 2012, 19:35 pm
Edito: Y si lo quiero hacer con if? que es como yo se... es decir... tengo:
Código:
if "%lang%"=="0" goto:ENG
if "%lang%"=="b" goto:SPA
pause
¿que deberia poner en SPA y ENG???

Pues si lo quieres hacer así, Deberías duplicar el código dentro del propio bat...

Código
  1. :Eng
  2. El código entero en ingles...
  3.  
  4. :Spa
  5. El código entero en español...

PD: Bueno no es necesario duplicarlo todo... a las funciones importantes donde no haya texto que mostrar (En ningun idioma) las puedes llamar usando CALL...


Título: Re: Batch multi-idiomas
Publicado por: z3nth10n en 24 Mayo 2012, 21:09 pm
Pues si lo quieres hacer así, Deberías duplicar el código dentro del propio bat...

Código
  1. :Eng
  2. El código entero en ingles...
  3.  
  4. :Spa
  5. El código entero en español...

PD: Bueno no es necesario duplicarlo todo... a las funciones importantes donde no haya texto que mostrar (En ningun idioma) las puedes llamar usando CALL...

Voy a hacerte como iria, a ver si va bien:

Tengo los Inis: esp.ini, eng.ini; por ejemplo

Luego,
Yo tengo un bat, me pide el idioma, ok.
Cuando lo selecciona pongo por ejemplo:
Código
  1. if "%lang%"=="0" echo esp > lang.txt
  2. if "%lang%"=="1" echo eng > lang.txt
  3.  
Luego:

Código
  1. for /f "tokens=*" %%x in (lang.txt) do (%%x
  2. set "lang1=%%x")
  3.  
  4. For /F "Tokens=2 Delims==" %%a in ('Type "%lang1%.ini" ^| Find "1="') Do (set saludo=%%a)
  5. For /F "Tokens=2 Delims==" %%a in ('Type "%lang1%.ini" ^| Find "2="') Do (set Selecciona=%%a)
  6. For /F "Tokens=2 Delims==" %%a in ('Type "%lang1%.ini" ^| Find "3="') Do (set autor=%%a)
  7. For /F "Tokens=2 Delims==" %%a in ('Type "%lang1%.ini" ^| Find "4="') Do (set opcion_menu=%%a)

Todo esto al principio del Batch, claro...

Que como lo ves?

por cierto, eso de |MORE, que hace...

Un saludo.


Título: Re: Batch multi-idiomas
Publicado por: Eleкtro en 24 Mayo 2012, 21:20 pm

Código
  1. if "%lang%"=="0" echo esp > lang.txt
  2. if "%lang%"=="1" echo eng > lang.txt
  3.  
  4. for /f "tokens=*" %%x in (lang.txt) do (%%x
  5. set "lang1=%%x")
  6.  
  7. For /F "Tokens=2 Delims==" %%a in ('Type "%lang1%.ini" ^| Find "1="') Do (set saludo=%%a)
  8. For /F "Tokens=2 Delims==" %%a in ('Type "%lang1%.ini" ^| Find "2="') Do (set Selecciona=%%a)
  9. For /F "Tokens=2 Delims==" %%a in ('Type "%lang1%.ini" ^| Find "3="') Do (set autor=%%a)
  10. For /F "Tokens=2 Delims==" %%a in ('Type "%lang1%.ini" ^| Find "4="') Do (set opcion_menu=%%a)

No entiendo la intención de escribir "esp" o "eng" en un archivo de texto, Y luego usar un for para setear el lenguaje según lo que haya escrito ene l texto... Si puedes hacer esto como te puse en mis ejemplos:

Código
  1. @echo off
  2. Echo Escribe "ESP" o "ENG"
  3. Set /P option=
  4. Set Lang=%option%
  5.  
  6. For /F "Tokens=2 Delims==" %%a in ('Type "%lang%.ini" ^| Find "1="') Do (set saludo=%%a)
  7. For /F "Tokens=2 Delims==" %%a in ('Type "%lang%.ini" ^| Find "2="') Do (set Selecciona=%%a)
  8. For /F "Tokens=2 Delims==" %%a in ('Type "%lang%.ini" ^| Find "3="') Do (set autor=%%a)
  9. For /F "Tokens=2 Delims==" %%a in ('Type "%lang%.ini" ^| Find "4="') Do (set opcion_menu=%%a)
  10.  

Citar
C:\> more /?
Muestra la información pantalla a pantalla.

MORE [/E [/C] [/P] [/S] [/Tn] [+n]] < [unidad:][ruta]archivo
comando | MORE [/E [/C] [/P] [/S] [/Tn] [+n]]
MORE /E [/C] [/P] [/S] [/Tn] [+n] [archivos]

En este caso lo uso para ahorrar lineas y no tener que escribir "Echo+" para insertar una linea en blanco.

Saludos.


Título: Re: Batch multi-idiomas
Publicado por: z3nth10n en 25 Mayo 2012, 08:25 am
Es para guardar la configuración.


Título: Re: Batch multi-idiomas
Publicado por: Eleкtro en 25 Mayo 2012, 08:36 am
Es para guardar la configuración.

ahmmm vale vale, pero entonces esto dejalo asi:

Código
  1. for /f "tokens=*" %%x in (lang.txt) do (set "lang1=%%x")

O mejor aún, Guarda la configuración en el propio bat (Al final del archivo)

Código
  1. @Echo OFF
  2.  
  3. Set lang=0
  4.  
  5. if "%lang%"=="0" (Echo+ & Echo SaveLang=esp)>>"%~0"
  6. if "%lang%"=="1" (Echo+ & Echo SaveLang=eng)>>"%~0"
  7.  
  8. for /f "tokens=2 delims==" %%x in ('Find "SaveLang" "%~0" ^| Find /V "%~0"') do (set "lang1=%%x")
  9.  
  10. echo %Lang1%

saludos


Título: Re: Batch multi-idiomas
Publicado por: z3nth10n en 25 Mayo 2012, 15:24 pm
Eh, así me ahorro muchos txt inservibles... una cosita. Y si quiero borrar la configuracion es decir, (esto lo voy a utilizar para otras cosas), como borro el idioma seteado que esta guardado.

Y otra cosita, tengo un archivo de configuracion de color, y siempre a los usuarios le pregunto, te gustan los cambios? en poner "Te gustan los cambios (S/N)", no hay problema, pero en ingles, el (S/N), se convierte en (Y/N), de Yes y No. En el if, lo tengo puesto así. If "%tal%"=="s" goto:TAL, como lo puedo adaptar esa s, a una y, del ingles??


Título: Re: Batch multi-idiomas
Publicado por: Eleкtro en 25 Mayo 2012, 15:40 pm
Eh, así me ahorro muchos txt inservibles... una cosita. Y si quiero borrar la configuracion es decir, (esto lo voy a utilizar para otras cosas), como borro el idioma seteado que esta guardado.

Código
  1. :: Esto copia el bat a otro archivo, Sin la linea que contiene la configuración.
  2. :: El bat original se elimina, Haz una copia antes de usar.
  3. Type %0 | FINDSTR /V "^SaveLang=...$" > "%~n0_New.bat" && Del /Q %0 && CMD /C "%~n0_New.bat"

Y otra cosita, tengo un archivo de configuracion de color, y siempre a los usuarios le pregunto, te gustan los cambios? en poner "Te gustan los cambios (S/N)", no hay problema, pero en ingles, el (S/N), se convierte en (Y/N), de Yes y No. En el if, lo tengo puesto así. If "%tal%"=="s" goto:TAL, como lo puedo adaptar esa s, a una y, del ingles??
Código
  1. choice /C SN /M "Te gustan los cambios?"
  2. If %Errorlevel% EQU 1 (Echo elegiste S & Pause)
  3. If %Errorlevel% EQU 2 (Echo Elegiste N & Pause)

EDITO: O...
Código
  1. @Echo OFF
  2.  
  3. Set VAR=Y
  4.  
  5. Echo %VAR%| FINDSTR /I "^s$ ^si$ ^y$ ^yes$" >NUL
  6. If %Errorlevel% EQU 0 (goto :TAL)
  7.  
  8. :TAL


Título: Re: Batch multi-idiomas
Publicado por: z3nth10n en 25 Mayo 2012, 17:33 pm
Otra cosita, los EQU, no se le pueden poner valores de caracteres? es decir en vez de un 0 o un 1, o un 2, una s, una n, o una b  :huh:

Una cosa cuando se copie el nuevo bat que nombre va atomar, el del antiguo o el de: n0_new.bat??

JEJE, parece como si te estuviera poniendo a prueba (contra preguntones)  >:D


Título: Re: Batch multi-idiomas
Publicado por: Eleкtro en 25 Mayo 2012, 17:54 pm
Otra cosita, los EQU, no se le pueden poner valores de caracteres? es decir en vez de un 0 o un 1, o un 2, una s, una n, o una b  :huh:
Si, se puede, Pero los códigos de error son números, Asi que en "%Errorlevel% EQU *" debe ser un número correspondiente al código de error...

http://ss64.com/nt/if.html

Una cosa cuando se copie el nuevo bat que nombre va atomar, el del antiguo o el de: n0_new.bat??
Si el bat se llama "archivo.bat", La nueva copia se llamará "archivo_new.bat" (Y el antiguo bat se elimina)
PD: Puedes usar el comando "REN" "RENAME" para cambiarle el nombre a la copia, a tu gusto...

JEJE, parece como si te estuviera poniendo a prueba (contra preguntones)  >:D
Son preguntas fáciles xD, Pero deberias leer un manual...

Saludos


Título: Re: Batch multi-idiomas
Publicado por: z3nth10n en 25 Mayo 2012, 18:16 pm

http://ss64.com/nt/if.html
Si el bat se llama "archivo.bat", La nueva copia se llamará "archivo_new.bat" (Y el antiguo bat se elimina)

Saludos

Y directamente, no se puede poner una nombre? como por ejemplo... en vez de %~n0_New.bat, esto %~n0.bat...

 :)


Título: Re: Batch multi-idiomas
Publicado por: Eleкtro en 25 Mayo 2012, 18:25 pm
Si pones esto %~n0.bat sobreescribirás el bat original, Y quedará un archivo en blanco.

Salu2


Título: Re: Batch multi-idiomas
Publicado por: z3nth10n en 25 Mayo 2012, 18:44 pm
pero el antiguo bat se elimina automatica mente o hay que poner un "del"


Título: Re: Batch multi-idiomas
Publicado por: Eleкtro en 25 Mayo 2012, 18:59 pm
pero el antiguo bat se elimina automatica mente o hay que poner un "del"

Código
  1. Type %0 | FINDSTR /V "^SaveLang=...$" > "%~n0_New.bat" && Del /Q %0 && CMD /C "%~n0_New.bat"

Hay que eliminarlo con DEL, Si sobreescribes el mismoa rchivo queda en blanco, vacio.

saludos


Título: Re: Batch multi-idiomas
Publicado por: z3nth10n en 26 Mayo 2012, 12:57 pm
Ya he estado probando el código, pero... Tarda un puñado en cargar.... Puede hacer algo para acelerar, es que tengo 76 variables para cargar al principio....  :laugh:

Aparte, no se carga bien... Le pongo una variable nada mas, y se carga otro texto...
Confirmado, si pongo %txt1%, a lo mejor se carga el numero 10... :(

Como puedes observar aquí:

(http://i.imgur.com/fYg0U.png)


Título: Re: Batch multi-idiomas
Publicado por: z3nth10n en 26 Mayo 2012, 23:58 pm
Vale, ya lo he corregido, en vez de poner: 1,2,3,4,5,6,7,8,9; he puesto, 1b,2b,3b,4b,5b,6b,7b,8b,9b...  ;D


Título: Re: Batch multi-idiomas
Publicado por: z3nth10n en 27 Mayo 2012, 12:08 pm
Grandes problemas. Primero algunas variables no se cargan ponen echo est desactivado.  :¬¬ y luego. Tarda mucho en cargar... (Siempre carga las variables...)  :¬¬ :-[

Edito, he corregido el error de que siempre carga las variables, ahora necesito que me deigais porque me sale echo est desactivado...  :o

Edito, ya he conseguido arreglar los errores, perdon por el spam XD  ::)