Batch multi-idiomas

Iniciado por z3nth10n, 24 Mayo 2012, 17:42 PM

0 Miembros y 3 Visitantes están viendo este tema.

z3nth10n

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.

Interesados hablad por Discord.

Eleкtro

Método 1:

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


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


test.bat
Código (dos) [Seleccionar]
@Echo OFF

Echo What language you will to use? \ Que lenguaje quiere usar? | MORE
Echo [1] English, [2] Spanish, [3] Catalan.                     | MORE
Choice /C 123 /M "Choose a language"
If %Errorlevel% EQU 1 (Set LANG=English)
If %Errorlevel% EQU 2 (Set LANG=Spanish)

For /F "Tokens=2 Delims==" %%a in ('Type "%LANG%.ini" ^| Find "1="') Do (set saludo=%%a)
For /F "Tokens=2 Delims==" %%a in ('Type "%LANG%.ini" ^| Find "2="') Do (set Selecciona=%%a)
For /F "Tokens=2 Delims==" %%a in ('Type "%LANG%.ini" ^| Find "3="') Do (set autor=%%a)
For /F "Tokens=2 Delims==" %%a in ('Type "%LANG%.ini" ^| Find "4="') Do (set opcion_menu=%%a)

:Menu
Echo+
Echo %Saludo%
Echo %autor%           | MORE
Echo %Selecciona%      | MORE
Echo: %opcion_menu% 1
Echo: %opcion_menu% 2
Echo: %opcion_menu% 3  | MORE

Set /P option= ^>^>
Pause
Exit





Método 2:

Código (dos) [Seleccionar]
@Echo OFF

Goto :Program
:Langs
If /I "%lang%" EQU "English" (
Title Language Test Menu
Set saludo=Welcome to my program
Set Selecciona=Please choose an option to continue...
Set opcion_menu=Option
Set Autor=Coded by Elektro H@cker
)

If /I "%lang%" EQU "Spanish" (
Title Test de menu de idiomas
Set saludo=Bienvenido a mi programa
Set Selecciona=Porfavor seleccione una opcion para continuar...
Set opcion_menu=Opcion
Set Autor=Codeado por Elektro H@cker
)

If /I "%lang%" EQU "Catalan" (
Title Test de menu d'idiomes
Set saludo=Benvingut al meu programa
Set Selecciona=Si us plau seleccioneu una opcio per continuar ...
Set opcion_menu=Opcio
Set Autor=Codeaixat per Elektro H@cker
)
Goto :EOF

:Program
Echo What language you will to use? \ Que lenguaje quiere usar? \ Que llenguatge voleu utilitzar? | MORE
Echo [1] English, [2] Spanish, [3] Catalan.                                                       | MORE
Choice /C 123 /M "Choose a language"
If %Errorlevel% EQU 1 (Set LANG=English)
If %Errorlevel% EQU 2 (Set LANG=Spanish)
If %Errorlevel% EQU 3 (Set LANG=Catalan)
Call :Langs

:Menu
Echo+
Echo %Saludo%
Echo %autor%           | MORE
Echo %Selecciona%      | MORE
Echo: %opcion_menu% 1
Echo: %opcion_menu% 2
Echo: %opcion_menu% 3  | MORE

Set /P option= ^>^>
Pause
Exit





Los dos codes dan el mismo resultado:






Saludos!








z3nth10n

#2
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:


: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???

Interesados hablad por Discord.

Eleкtro

Cita de: Seazoux en 24 Mayo 2012, 19:08 PM
Edito: Y si lo quiero hacer con if? que es como yo se... es decir... tengo:

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 (dos) [Seleccionar]
:Eng
El código entero en ingles...

:Spa
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...








z3nth10n

#4
Cita de: EleKtro H@cker en 24 Mayo 2012, 19:35 PM
Pues si lo quieres hacer así, Deberías duplicar el código dentro del propio bat...

Código (dos) [Seleccionar]
:Eng
El código entero en ingles...

:Spa
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 (dos) [Seleccionar]
if "%lang%"=="0" echo esp > lang.txt
if "%lang%"=="1" echo eng > lang.txt

Luego:

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

For /F "Tokens=2 Delims==" %%a in ('Type "%lang1%.ini" ^| Find "1="') Do (set saludo=%%a)
For /F "Tokens=2 Delims==" %%a in ('Type "%lang1%.ini" ^| Find "2="') Do (set Selecciona=%%a)
For /F "Tokens=2 Delims==" %%a in ('Type "%lang1%.ini" ^| Find "3="') Do (set autor=%%a)
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.

Interesados hablad por Discord.

Eleкtro

Cita de: Seazoux en 24 Mayo 2012, 21:09 PM

Código (dos) [Seleccionar]
if "%lang%"=="0" echo esp > lang.txt
if "%lang%"=="1" echo eng > lang.txt

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

For /F "Tokens=2 Delims==" %%a in ('Type "%lang1%.ini" ^| Find "1="') Do (set saludo=%%a)
For /F "Tokens=2 Delims==" %%a in ('Type "%lang1%.ini" ^| Find "2="') Do (set Selecciona=%%a)
For /F "Tokens=2 Delims==" %%a in ('Type "%lang1%.ini" ^| Find "3="') Do (set autor=%%a)
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 (dos) [Seleccionar]

@echo off
Echo Escribe "ESP" o "ENG"
Set /P option=
Set Lang=%option%

For /F "Tokens=2 Delims==" %%a in ('Type "%lang%.ini" ^| Find "1="') Do (set saludo=%%a)
For /F "Tokens=2 Delims==" %%a in ('Type "%lang%.ini" ^| Find "2="') Do (set Selecciona=%%a)
For /F "Tokens=2 Delims==" %%a in ('Type "%lang%.ini" ^| Find "3="') Do (set autor=%%a)
For /F "Tokens=2 Delims==" %%a in ('Type "%lang%.ini" ^| Find "4="') Do (set opcion_menu=%%a)


CitarC:\> 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.








z3nth10n

Es para guardar la configuración.

Interesados hablad por Discord.

Eleкtro

#7
Cita de: Seazoux en 25 Mayo 2012, 08:25 AM
Es para guardar la configuración.

ahmmm vale vale, pero entonces esto dejalo asi:

Código (dos) [Seleccionar]
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 (dos) [Seleccionar]
@Echo OFF

Set lang=0

if "%lang%"=="0" (Echo+ & Echo SaveLang=esp)>>"%~0"
if "%lang%"=="1" (Echo+ & Echo SaveLang=eng)>>"%~0"

for /f "tokens=2 delims==" %%x in ('Find "SaveLang" "%~0" ^| Find /V "%~0"') do (set "lang1=%%x")

echo %Lang1%
Pause
Exit


saludos








z3nth10n

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??

Interesados hablad por Discord.

Eleкtro

#9
Cita de: Seazoux 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.

Código (dos) [Seleccionar]

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


Cita de: Seazoux en 25 Mayo 2012, 15:24 PM
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 (dos) [Seleccionar]
choice /C SN /M "Te gustan los cambios?"
If %Errorlevel% EQU 1 (Echo elegiste S & Pause)
If %Errorlevel% EQU 2 (Echo Elegiste N & Pause)


EDITO: O...
Código (dos) [Seleccionar]
@Echo OFF

Set VAR=Y

Echo %VAR%| FINDSTR /I "^s$ ^si$ ^y$ ^yes$" >NUL
If %Errorlevel% EQU 0 (goto :TAL)
Exit

:TAL
pause