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.
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
@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:
@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:
(http://img221.imageshack.us/img221/3095/prtscrcaptureow.jpg)
Saludos!
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???
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...
: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...
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...
: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:
if "%lang%"=="0" echo esp > lang.txt
if "%lang%"=="1" echo eng > lang.txt
Luego:
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.
Cita de: Seazoux en 24 Mayo 2012, 21:09 PM
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:
@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.
Es para guardar la configuración.
Cita de: Seazoux en 25 Mayo 2012, 08:25 AM
Es para guardar la configuración.
ahmmm vale vale, pero entonces esto dejalo asi:
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)
@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
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??
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.
:: 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??
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...
@Echo OFF
Set VAR=Y
Echo %VAR%| FINDSTR /I "^s$ ^si$ ^y$ ^yes$" >NUL
If %Errorlevel% EQU 0 (goto :TAL)
Exit
:TAL
pause
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
Cita de: Seazoux 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:
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
Cita de: Seazoux en 25 Mayo 2012, 17:33 PM
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...
Cita de: Seazoux en 25 Mayo 2012, 17:33 PM
JEJE, parece como si te estuviera poniendo a prueba (contra preguntones) >:D
Son preguntas fáciles xD, Pero deberias leer un manual...
Saludos
Cita de: EleKtro H@cker en 25 Mayo 2012, 17:54 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...
:)
Si pones esto %~n0.bat sobreescribirás el bat original, Y quedará un archivo en blanco.
Salu2
pero el antiguo bat se elimina automatica mente o hay que poner un "del"
Cita de: Seazoux en 25 Mayo 2012, 18:44 PM
pero el antiguo bat se elimina automatica mente o hay que poner un "del"
Cita de: EleKtro H@cker en 25 Mayo 2012, 15:40 PM
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
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)
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
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 ::)