Batch-Satti
Gostaria de reagir a esta mensagem? Crie uma conta em poucos cliques ou inicie sessão para continuar.
Batch-Satti

Você não está conectado. Conecte-se ou registre-se

Como fazer um batch em vários idiomas?

3 participantes

Ir para baixo  Mensagem [Página 1 de 1]

1Como fazer um batch em vários idiomas? Empty Como fazer um batch em vários idiomas? Ter Jan 25, 2022 4:40 pm

llbranco

llbranco

Aloha,
preciso muito criar um batch com suporte a vários idiomas, mas não sei como começar
como o batch vai ser relativamente grande (de 2 a 5mil linhas de texto, fora comandos) ficaria muito difícil de "manter" ou atualizar as traduções se tudo ficasse dentro do mesmo arquivo

1) o batch deve detectar o idioma do sistema, caso seja um idioma suportado, ele mostra todos os textos naquele idioma, caso não seja um idioma suportado ele exibe todos os textos em inglês, o inglês não tem problema que fique dentro do batch, afinal será o idioma principal do projeto.

2) agora, definitivamente seria como bruxaria, no entanto seria muito mais fácil criar a tradução pra múltiplos idiomas se os textos ficassem em arquivos txt externos, tipo lang-pt.txt, lang-en.txt, lang-es.txt, lang-ru.txt, lang-fr.txt, lang-gr.txt ...
não importa se seja a tradução por linha, se seja variáveis dentro do txt
eu não faço a MINIMA ideia de como fazer isso, mas em minha mente visualizo os arquivos de idioma +/- como nos exemplos abaixo (basicamente o mesmo padrão que diversos apps e/ou jogos usam)


Código:
Português-Brasil
Oi
Menu inicial
voltar

Código:
English
Hi
Start menu
back

ou

Código:
language=Português-Brasil
lang=pt-br
Hi=Oi
StartMenu=Menu iniciar
back=voltar

Código:
language=English
lang=EN
Hi=Hi
StartMenu=Start Menu
back=back

caso o arquivo dos idiomas seja em qualquer dos formatos seria simplesmente PERFEITO

agradeço desde já a atenção de ter lido até aqui
e ficaria muito grato se pudessem me dar uma luz nessa empreitada



Última edição por llbranco em Qua Fev 09, 2022 2:14 pm, editado 1 vez(es)

Boss-Head

Boss-Head

Bom dia, fiz recentemente um batch que traduzia arquivos de texto, vou ver se acho, tem um truque nele, pra mim funcionou beleza, vou passar como funciona.

Vamos lá, este arquivo do link está em Inglês, salve ele numa pasta com qualquer nome desde que não tenha espaço ou caracteres especiais no nome tipo batch (1).bat, salve somente como teste.bat
[Tens de ter uma conta e sessão iniciada para poderes visualizar este link] ( ele é um ativador do Windows e Office )...
depois de salvar copie esse código abaixo e salve como tradutor.bat 
Código:
@echo Off  
:: tradutor.bat
@color 17  
chcp 1252>nul
CD "%~DP0"
SETLOCAL ENABLEEXTENSIONS ENABLEDELAYEDEXPANSION
IF [%1]==[] (
ECHO.
ECHO.            SEM ARQUIVO
ECHO.
ECHO. ARRASTE E SOLTE O ARQUIVO AQUI PARA TRADUZIR
SET /P ARQ= ^):
CALL:IINNIICCIIOO %ARQ%
PAUSE
EXIT
)

:IINNIICCIIOO
set "textFile=%~1"
set variaveisINGLES="%~n1-VariaveisINGLES.%~x1"
set variaveisPTB="%~n1-VariaveisPTB.%~x1"
set bakup="%~n1-bkp%~x1"
set tmp="%temp%\tmp.txt"

echo.>!variaveisINGLES!
echo.>!variaveisPTB!
echo.:INGLES>>!variaveisINGLES!
echo.:PTB>>!variaveisPTB!
echo.chcp 1252^>nul>>!variaveisPTB!


IF NOT EXIST !bakup! Type "%textFile%" >!bakup!
If not exist %temp%\_.vbs call :MakeReplace
If not exist "PALAVRAS2.txt" CALL:PALAVRAS2

call:INVERTE "@ECHO OFF" "@ECHO OFF & CALL:PTB" "%textFile%"
call:INVERTE "'y'" "'s'" "%textFile%"
call:INVERTE "'a'" "'t'" "%textFile%"
call:INVERTE "y/n/a:" "[S]im / [N]ão / [T]odos:" "%textFile%"
call:INVERTE "y/n:" "[S]im / [N]ão:" "%textFile%"
call:INVERTE "if '" "If /i '" "%textFile%"

for /f "tokens=1,2,3 delims=#" %%a in ( PALAVRAS2.TXT ) do (
set /a nn2=!nn2!+1
set var=call:INVERTE "%%~a" "%%%%LNG!nn2!%%%%" "%textFile%"
set INGLES=SET "LNG!nn2!=%%~a"
set PTB=SET "LNG!nn2!=%%~c"
call :chama
)

echo.GOTO:EOF>>!variaveisINGLES!
echo.GOTO:EOF>>!variaveisPTB!
call:chama2

if exist "%temp%\_.vbs" del "%temp%\_.vbs"
if exist "%temp%\tmp.txt" del "%temp%\tmp.txt"
DEL "!variaveisPTB!"
DEL "!variaveisINGLES!"

PAUSE
EXIT

:chama
!var!
echo.!INGLES!>>!variaveisINGLES!
echo.!PTB!>>!variaveisPTB!
goto:eof

:chama2
type !variaveisINGLES!>>"%textFile%"
type !variaveisPTB!>>"%textFile%"
exit /b



:INVERTE
for /f "tokens=*" %%a in ('dir "%3" /s /b /a-d /on') do (
  for /f "usebackq" %%b in (`Findstr /mic:"%~1" "%%a"`) do (
    echo(&Echo Substituindo: "%~1" por "%~2" no arquivo %%~nxa
    <%%a cscript //nologo %temp%\_.vbs "%~1" "%~2">%tmp%
    if exist %tmp% move /Y %tmp% "%%~dpnxa">nul
  )
)
exit /b

:MakeReplace
>%temp%\_.vbs echo with Wscript
>>%temp%\_.vbs echo set args=.arguments
>>%temp%\_.vbs echo .StdOut.Write _
>>%temp%\_.vbs echo Replace(.StdIn.ReadAll,args(0),args(1),1,-1,1)
>>%temp%\_.vbs echo end with
exit /b


:PALAVRAS2
for /f %%i in ("certutil.exe") do if not exist "%%~$path:i" (
  echo CertUtil.exe not found.
  pause
  exit /b
)
>"temp.b64~" (
echo(-----BEGIN CERTIFICATE-----
echo(I0RJR0lUQUwgQUNUSVZBVElPTiAkT0VNJCBGT0xERVIgRVhUUkFDVCBUTyMgI0FU
echo(SVZBx8NPIERJR0lUQUwgJE9FTSQgRVhUUkFJUiBQQVJBIFBBU1RBIw0KI0tNUyAy
echo(MDM4IEFDVElWQVRJT04gJE9FTSQgRk9MREVSIEVYVFJBQ1QgVE8jICNLTVMgMjAz
echo(OCBBVElWQcfDTyAkT0VNJCBFWFRSQUlSIFBBUkEgUEFTVEEjDQojRElHSVRBTCBv
echo(ciBLTVMzOCAkT0VNJCBBQ1RJVkFUSU9OIEZPTERFUiBFWFRSQUNUIFRPIyAjRElH
echo(SVRBTCBvdSBLTVMzOCAkT0VNJCBQQVNUQSBERSBBVElWQcfDTyBFWFRSQUlSIFBB
echo(UkEgUEFTVEEjDQojJE9FTSQgQUNUSVZBVElPTiBGT0xERVIgRVhUUkFDVCBUTyMg
echo(I0VYVFJBSVIgUEFSQSBQQVNUQSBERSBBVElWQcfDTyBERSAkT0VNJCBQQVJBIw0K
echo(IyRPRU0kIGZvbGRlciBhbHJlYWR5IGV4aXN0cyBvbiMgI0EgcGFzdGEgJE9FTSQg
echo(auEgZXhpc3RlIGVtIw0KIyRPRU0kIEZPTERFUiBFWFRSQUNUIFRPIyAjRVhUUkFJ
echo(UiBQQVJBIFBBU1RBICRPRU0kIw0KIyhhbGwgdmVyc2lvbnMpIyAjKFRvZGFzIHZl
echo(cnP1ZXMpIw0KIy4uOjogbWVwaGlzdG9vbzIgfCBUTkNUUiA6Oi4uIyAjLi4gOjog
echo(Qm9zcy1IZWFkIHwgQmF0Y2gtU2F0dGkgOjogLi4jDQojLi46OiBPRkZJQ0UgQUNU
echo(SVZBVElPTiBTVEFUVVMgOjouLiMgIy4uIDo6IEVTVEFETyBERSBBVElWQcfDTyBE
echo(TyBPRkZJQ0UgOjogLi4jDQojLi46OiBXQVJOSU5HIDo6Li4jICMuLjo6IEFWSVNP
echo(IDo6Li4jDQojW0FdbGwjICNbVF1vZG9zIw0KI1tCQVNBUklMSV0jICNbQkFTQVJJ
echo(TEldIw0KI1tTZXJ2aWNlIFN0YXR1cyMgI1tTdGF0dXMgZG8gc2VydmnnbyMNCiNb
echo(U3RhcnR1cCB0eXBlIyAjW1RpcG8gZGUgaW5pY2lhbGl6YefjbyMNCiNbU1VDQ0VT
echo(U0ZVTF0jICNbQkVNIFNVQ0VESURPXSMNCiMzMCBzLiB3YWl0aW5nLi4uIyAjMzAg
echo(cy4gZXNwZXJhLi4uIw0KI0EgV2luZG93cyBVcGRhdGUgYmxvY2tpbmcgcHJvZ3Jh
echo(bSBoYXMgc2FmZWx5IGRpc2FibGVkIHd1YXVzZXJ2LiMgI1VtIHByb2dyYW1hIGRl
echo(IGJsb3F1ZWlvIGRvIFdpbmRvd3MgVXBkYXRlIGRlc2F0aXZvdSBvIHd1YXVzZXJ2
echo(IGNvbSBzZWd1cmFu52EuIw0KI2FjdGl2YXRlZCB3aXRoIEtNUzM4LiMgI2F0aXZh
echo(ZG8gY29tIEtNUzM4LiMNCiNBQ1RJVkFUSU9OIChJbmplY3QgTWV0aG9kKSBTVEFS
echo(VCBGT1IgV0lORE9XUyAxMCMgI0FUSVZBx8NPIChN6XRvZG8gZGUgSW5qZefjbykg
echo(SU5JQ0lFIFBBUkEgV0lORE9XUyAxMCMNCiNBY3RpdmF0aW9uIElEOiMgI0lEIGRl
echo(IGF0aXZh5+NvOiMNCiNBY3RpdmF0aW9uIGlzIE5vdCBTdXBwb3J0ZWQuIyAjQSBh
echo(dGl2YefjbyBu428g6SBzdXBvcnRhZGEuIw0KI0FjdGl2YXRpb24gcHJvY2VzcyBz
echo(dGFydGVkIHZpYSMgI1Byb2Nlc3NvIGRlIGF0aXZh5+NvIGluaWNpYWRvIHZpYSMN
echo(CiNBY3RpdmF0aW9uIHByb2Nlc3Mgc3RhcnRlZCwgcGxlYXNlIHdhaXQuLi4jICNQ
echo(cm9jZXNzbyBkZSBhdGl2YefjbyBpbmljaWFkbywgcG9yIGZhdm9yIGFndWFyZGUg
echo(Li4uIw0KI0tNUzM4IEFDVElWQVRJT04gU1RBUlQgRk9SIFdJTkRPV1MgMTAjICNL
echo(TVMzOCBJTs1DSU8gREUgQVRJVkHHw08gUEFSQSBXSU5ET1dTIDEwIw0KI0RJR0lU
echo(QUwgQUNUSVZBVElPTiBTVEFSVCBGT1IgV0lORE9XUyAxMCMgI0lOzUNJTyBERSBB
echo(VElWQcfDTyBESUdJVEFMIFBBUkEgV0lORE9XUyAxMCMNCiNBQ1RJVkFUSU9OIFNU
echo(QVJUIEZPUiBXSU5ET1dTIDEwIChEaWdpdGFsIyAjSU7NQ0lPIERFIEFUSVZBx8NP
echo(IFBBUkEgV0lORE9XUyAxMCAoRGlnaXRhbCMNCiNBQ1RJVkFUSU9OIFNUQVJUIEZP
echo(UiBXSU5ET1dTIDEwIyAjSU7NQ0lPIERFIEFUSVZBx8NPIFBBUkEgV0lORE9XUyAx
echo(MCMNCiNBQ1RJVkFUSU9OIFNUQVRVUyBDSEVDSyMgI1ZFUklGSUNBx8NPIERFIFNU
echo(QVRVUyBERSBBVElWQcfDTyMNCiNBQ1RJVkFUSU9OIFRBU0sgU0NIRURVTEVSIEZP
echo(UiBXSU5ET1dTIDEwIyAjQUdFTkRBRE9SIERFIFRBUkVGQVMgREUgQVRJVkHHw08g
echo(UEFSQSBXSU5ET1dTIDEwIw0KI0FwcGx5aW5nIHNsbWdyIC9yZWFybSB0byBmaXgg
echo(YWN0aXZhdGlvbi4uLiMgI0FwbGljYW5kbyBzbG1nciAvIHJlYXJtIHBhcmEgY29y
echo(cmlnaXIgYSBhdGl2YefjbyAuLi4jDQojQVJDSElURUNUVVJBTCA6IyAjQVJRVUlU
echo(RVRVUkE6Iw0KI0FSQ0hJVEVDVFVSRSA6IyAjQVJRVUlURVRVUkE6Iw0KI0JlZm9y
echo(ZSB5b3UgY2FuIHVzZSAnUnVuIGFzIGFkbWluaXN0cmF0b3InIHN1Y2Nlc3NmdWxs
echo(eSwjICNBbnRlcyBkZSB1c2FyICdFeGVjdXRhciBjb21vIGFkbWluaXN0cmFkb3In
echo(IGNvbSBzdWNlc3NvLCMNCiNieSBtZXBoaXN0b29vMiAtIFROQ1RSLmNvbSMgI3Bv
echo(ciBCb3NzLUhlYWQgLSBCYXRjaC1TYXR0aSMNCiNDaGFuZ2luZyB0aGUgc2Vydmlj
echo(ZSBzdGFydCB0eXBlOiMgI0FsdGVyYW5kbyBvIHRpcG8gZGUgaW7tY2lvIGRvIHNl
echo(cnZp5286Iw0KI0NoZWNraW5nIFdpbmRvd3MgU2VydmljZXMsIHBsZWFzZSB3YWl0
echo(Li4uIyAjVmVyaWZpY2FuZG8gb3Mgc2Vydmnnb3MgZG8gV2luZG93cywgcG9yIGZh
echo(dm9yIGFndWFyZGUgLi4uIw0KI0NoZWNraW5nOiBOTyBJTlRFUk5FVCBDT05ORUNU
echo(SU9OLiMgI1ZlcmlmaWNhbmRvOiBTRU0gQ09ORVjDTyBDT00gQSBJTlRFUk5FVC4j
echo(DQojQ2xlYW5pbmcgQ2xpcHNTVkMgdG9rZW5zLi4uIyAjTGltcGFuZG8gdG9rZW5z
echo(IGRlIENsaXBzU1ZDIC4uLiMNCiNDb252ZXJ0aW5nIE9mZmljZSBDMlIgUmV0YWls
echo(LXRvLVZvbHVtZTojICNDb252ZXJ0ZW5kbyBPZmZpY2UgQzJSIFZhcmVqbyBwYXJh
echo(IHZvbHVtZTojDQojQ3JlYXRlIEdlbnVpbmVUaWNrZXQuWE1MIGZpbGUgZm9yIFdp
echo(bmRvd3MgMTAjICNDcmlhciBhcnF1aXZvIEdlbnVpbmVUaWNrZXQuWE1MIHBhcmEg
echo(V2luZG93cyAxMCMNCiNDcmVhdGVkIEtNUyB0YXNrIHNjaGVkdWxlci4jICNDcmlv
echo(dSBvIGFnZW5kYWRvciBkZSB0YXJlZmFzIEtNUy4jDQojZGF5cyAjICNkaWFzICMN
echo(CiNkYXkocykjICNkaWEocykjDQojREVMRVRFIEFDVElWQVRJT04gVEFTSyBTQ0hF
echo(RFVMRVIjICNFWENMVUlSIEFHRU5EQURPUiBERSBUQVJFRkFTIERFIEFUSVZBx8NP
echo(Iw0KI0RlbGV0ZWQgS01TIHRhc2sgc2NoZWR1bGVyLi4uIyAjQWdlbmRhZG9yIGRl
echo(IHRhcmVmYXMgS01TIGV4Y2x17WRvIC4uLiMNCiNEZXRlY3RlZDojICNEZXRlY3Rv
echo(dTojDQojRGV2YW0gZXRtZWsgaWNpbiBiaXIgdHVzYSBiYXNpbi4uLiMgI0RldmFt
echo(IGV0bWVrIGljaW4gYmlyIHR1c2EgYmFzaW4gLi4uIw0KI0RJR0lUQUwgJE9FTSQg
echo(WzJdIEtNUyAyMDM4ICRPRU0kIyAjRElHSVRBTCAkT0VNJCBbMl0gS01TIDIwMzgg
echo(JE9FTSQjDQojRElHSVRBTCBBQ1RJVkFUSU9OICRPRU0kIEZPTERFUiBFWFRSQUNU
echo(IFRPIyAjQVRJVkHHw08gRElHSVRBTCAkT0VNJCBFWFRSQUlSIFBBUkEgUEFTVEEj
echo(DQojRElHSVRBTCBBQ1RJVkFUSU9OIFZJU0lUIFdFQlNJVEUgKFROQ1RSKSMgI1NJ
echo(VEUgREUgVklTSVRBIERFIEFUSVZBx8NPIERJR0lUQUwgKEJhdGNoLVNhdHRpKSMN
echo(CiNESUdJVEFMIG9yIEtNUzM4ICRPRU0kIEFDVElWQVRJT04gRk9MREVSIEVYVFJB
echo(Q1QgVE8jICNESUdJVEFMIG91IEtNUzM4ICRPRU0kIEVYVFJBSVIgUEFSQSBQQVNU
echo(QSBERSBBVElWQcfDTyMNCiNEaXNhbGxvd2VkIHNwZWNpYWwgY2hhcmFjdGVycyBh
echo(cmUgZGV0ZWN0ZWQgaW4gdGhlIGZpbGUgcGF0aCBuYW1lLiMgI0NhcmFjdGVyZXMg
echo(ZXNwZWNpYWlzIG7jbyBwZXJtaXRpZG9zIHPjbyBkZXRlY3RhZG9zIG5vIG5vbWUg
echo(ZG8gY2FtaW5obyBkbyBhcnF1aXZvLiMNCiNFaXRoZXIgc3Bwc3ZjIHNlcnZpY2Ug
echo(b3IgU3BwRXh0Q29tT2JqSG9vay5kbGwgaXMgbm90IGZ1bmN0aW9uYWwuIyAjTyBz
echo(ZXJ2aedvIHNwcHN2YyBvdSBTcHBFeHRDb21PYmpIb29rLmRsbCBu428gZXN04SBm
echo(dW5jaW9uYW5kby4jDQojRVJST1I6IEFDVElWQVRJT04gRkFJTEVELiMgI0VSUk9S
echo(OiBBQ1RJVkFUSU9OIEZBSUxFRC4jDQojRVJST1I6IE5PIElOVEVSTkVUIENPTk5F
echo(Q1RJT04jICNFUlJPOiBTRU0gQ09ORVjDTyBDT00gQSBJTlRFUk5FVCMNCiNFcnJv
echo(cjogb3NwcHN2YyBzZXJ2aWNlIGlzIG5vdCBydW5uaW5nLi4uIyAjRXJybzogbyBz
echo(ZXJ2aedvIG9zcHBzdmMgbuNvIGVzdOEgZW0gZXhlY3Xn428gLi4uIw0KI0Vycm9y
echo(OiBwcm9kdWN0IGtleSBub3QgZm91bmQuIyAjRXJybzogY2hhdmUgZG8gcHJvZHV0
echo(byBu428gZW5jb250cmFkYS4jDQojRXZhbHVhdGlvbiBFbmQgRGF0ZTojICNEYXRh
echo(IEZpbmFsIGRhIEF2YWxpYefjbzojDQojXSBFWElUIyAjXSBTQc1SIw0KI0V4cGVj
echo(dGVkOiMgI0VzcGVyYWRvOiMNCiNFeHRlbmRlZCBQSUQ6IyAjUElEIGVzdGVuZGlk
echo(bzojDQojRmFpbGVkIGNoZWNraW5nIyAjRmFsaGEgbmEgdmVyaWZpY2Hn428jDQoj
echo(S01TIEFjdGl2YXRpb24gSUQjICNJRCBkZSBhdGl2YefjbyBLTVMjDQojZm9yIFdp
echo(bmRvd3MuIyAjcGFyYSBXaW5kb3dzLiMNCiNGYWlsZWQgcnVubmluZyBXTUkgcXVl
echo(cnkgY2hlY2suIyAjRmFsaGEgYW8gZXhlY3V0YXIgdmVyaWZpY2Hn428gZGUgY29u
echo(c3VsdGEgV01JLiMNCiNGYWlsZWQ6IyAjRnJhY2Fzc2FkbzojDQojRmlsZSBleGlz
echo(dGVuY2UgZmFpbGVkLiMgI0EgZXhpc3TqbmNpYSBkbyBhcnF1aXZvIGZhbGhvdS4j
echo(DQojR2VudWluZVRpY2tldC5YTUwgZmlsZSBpcyBpbnN0YWxsaW5nIGZvciBXaW5k
echo(b3dzIDEwIyAjTyBhcnF1aXZvIEdlbnVpbmVUaWNrZXQuWE1MIGVzdOEgc2VuZG8g
echo(aW5zdGFsYWRvIG5vIFdpbmRvd3MgMTAjDQojaWYgZGVmaW5lZCBQcm9kdWN0S2V5
echo(Q2hhbm5lbCBQcm9kdWN0IEtleSBDaGFubmVsOiMgI3NlIGRlZmluaWRvIFByb2R1
echo(Y3RLZXlDaGFubmVsIFByb2R1Y3QgS2V5IENoYW5uZWw6Iw0KI0lmIFJFVEFJTCBP
echo(ZmZpY2UgaXMgaW5zdGFsbGVkIG9uIHlvdXIgY29tcHV0ZXIsIFZPTFVNRSBsaWNl
echo(bnNlIGNlcnRpZmljYXRlcyB3aWxsIGJlIGluc3RhbGxlZCBhdXRvbWF0aWNhbGx5
echo(IyAjU2UgbyBPZmZpY2UgVmFyZWpvIGVzdGl2ZXIgaW5zdGFsYWRvIG5vIHNldSBj
echo(b21wdXRhZG9yLCBvcyBjZXJ0aWZpY2Fkb3MgZGUgbGljZW7nYSBWT0xVTUUgc2Vy
echo(428gaW5zdGFsYWRvcyBhdXRvbWF0aWNhbWVudGUjDQojSWYgeW91IGNvbXBpbGVk
echo(IHRoZSBmaWxlIHlvdXJzZWxmLCB0aGVuIGlnbm9yZSB0aGlzIG1lc3NhZ2UuIyAj
echo(U2Ugdm9j6iBtZXNtbyBjb21waWxvdSBvIGFycXVpdm8sIGlnbm9yZSBlc3RhIG1l
echo(bnNhZ2VtLiMNCiNJbnN0YWxsaW5nIGtleSMgI0luc3RhbGFuZG8gYSBjaGF2ZSMN
echo(CiNpcyBLTVMgMjAzOCBBY3RpdmF0ZWQuIyAj6SBLTVMgMjAzOCBhdGl2YWRvLiMN
echo(CiNpcyBub3QgZm91bmQuIyAjTuNvIGZvaSBlbmNvbnRyYWRvLiMNCiNpcyBQZXJt
echo(YW5lbnRseSBBY3RpdmF0ZWQjICNlc3ThIHBlcm1hbmVudGVtZW50ZSBhdGl2YWRv
echo(Iw0KI0tNUyAoSW5qZWN0KSBBY3RpdmF0aW9uIFdpbmRvd3MjICNKYW5lbGFzIGRl
echo(IGF0aXZh5+NvIEtNUyAoaW5qZefjbykjDQojS01TIChPbmxpbmUpIEFjdGl2YXRp
echo(b24gV2luZG93cyMgI1dpbmRvd3MgZGUgYXRpdmHn428gS01TIChvbmxpbmUpIw0K
echo(I0tNUyAyMDM4IEFDVElWQVRJT04gJE9FTSQgRk9MREVSIEVYVFJBQ1QgVE8jICNL
echo(TVMgMjAzOCBBVElWQcfDTyAkT0VNJCBFWFRSQUlSIFBBUkEgUEFTVEEjDQojS01T
echo(IDIwMzggQUNUSVZBVElPTiAkT0VNJCBGT0xERVIgRVhUUkFDVCBUUyMgI0tNUyAy
echo(MDM4IEFUSVZBx8NPICRPRU0kIEVYVFJBSVIgUEFSQSBQQVNUQSMNCiNLTVMgMjAz
echo(OCBBY3RpdmF0aW9uIE1ldGhvZCkjICNN6XRvZG8gZGUgYXRpdmHn428gS01TIDIw
echo(MzgpIw0KI0tNUyAyMDM4IEFjdGl2YXRpb24gV2luZG93cyAxMCMgI0tNUyAyMDM4
echo(IEF0aXZh5+NvIGRvIFdpbmRvd3MgMTAjDQojS01TIFNlcnZlciBJUCBhZGRyZXNz
echo(IDojICNFbmRlcmXnbyBJUCBkbyBzZXJ2aWRvciBLTVM6Iw0KI0tNUyBTRVJWRVIg
echo(V0lMTCBCRSBTRUxFQ1RFRCBBVVRPTUFUSUNBTExZIEFORCBUSEUgQUNUSVZBVElP
echo(TiBQUk9DRVNTIFdJTEwgQkVHSU5OSU5HLiMgI08gU0VSVklET1IgS01TIFNFUsEg
echo(U0VMRUNJT05BRE8gQVVUT01BVElDQU1FTlRFIEUgTyBQUk9DRVNTTyBERSBBVElW
echo(QcfDTyBDT01Fx0FSwS4jDQojS01TIFNlcnZlciwgcGxlYXNlIHdhaXQuLi4jICNT
echo(ZXJ2aWRvciBLTVMsIGFndWFyZGUgLi4uIw0KI0tNUzM4IEFDVElWQVRJT04gU1RB
echo(UlQgRk9SIFdJTkRPV1MgMTAjICNLTVMzOCBJTs1DSU8gREUgQVRJVkHHw08gUEFS
echo(QSBXSU5ET1dTIDEwIw0KI0tNUzM4IGlzIG5vdCBhY3RpdmF0ZWQuIyAjS01TMzgg
echo(buNvIGVzdOEgYXRpdmFkby4jDQojTGljZW5zZSBTdGF0dXM6IyAjU3RhdHVzIGRh
echo(IGxpY2Vu52E6Iw0KI21ha2Ugc3VyZSB0aGUgcGF0aCBkbyBub3QgaGF2ZSBhbnkg
echo(b2YgdGhlIGZvbGxvd2luZyBjaGFyYWN0ZXJzOiMgI2NlcnRpZmlxdWUtc2UgZGUg
echo(cXVlIG8gY2FtaW5obyBu428gdGVuaGEgbmVuaHVtIGRvcyBzZWd1aW50ZXMgY2Fy
echo(YWN0ZXJlczojDQojbWVwaGlzdG9vbzIgLSB3d3cuVE5DVFIuY29tIyAjQm9zcy1I
echo(ZWFkIC0gQmF0Y2gtU2F0dGkjDQojbWludXRlcyMgI21pbnV0b3MjDQojbWludXRl
echo(KHMpIyAjbWludXRvKHMpIw0KI05BTUUgT1MgOiMgI05PTUUgU086Iw0KI05hbWU6
echo(IyAjTm9tZTojDQojTm8gYXNzb2NpYXRlZCBLTVMgQ2xpZW50IGtleSBmb3VuZCMg
echo(I05lbmh1bWEgY2hhdmUgZGUgY2xpZW50ZSBLTVMgYXNzb2NpYWRhIGVuY29udHJh
echo(ZGEjDQojTk8gSU5URVJORVQgQ09OTkVDVElPTi4jICNTRU0gQ09ORVjDTyBDT00g
echo(QSBJTlRFUk5FVC4jDQojTm90IGRldGVjdGVkIFdpbmRvd3MgMTAuIERpZ2l0YWwg
echo(TGljZW5zZS9LTVMzOCMgI07jbyBkZXRlY3RhZG8gV2luZG93cyAxMC4gTGljZW7n
echo(YSBEaWdpdGFsIC8gS01TMzgjDQojQWN0aXZhdGlvbiBpcyBOb3QgU3VwcG9ydGVk
echo(LiAjICNBIGF0aXZh5+NvIG7jbyDpIHN1cG9ydGFkYS4jDQojVGhlIHByb2Nlc3Mg
echo(d2lsbCBiZSB0ZXJtaW5hdGVkIGluIDUgc2Vjb25kcy4jICNPIHByb2Nlc3NvIHNl
echo(cuEgZW5jZXJyYWRvIGVtIDUgc2VndW5kb3MuIw0KI09GRklDRSAoS01TIEluamVj
echo(dCBNZXRob2QpIyAjT0ZGSUNFICht6XRvZG8gZGUgaW5qZefjbyBLTVMpIw0KI09G
echo(RklDRSAoT25saW5lIEFjdGl2YXRpb24gTWV0aG9kKSMgI09GRklDRSAobel0b2Rv
echo(IGRlIGF0aXZh5+NvIG9ubGluZSkjDQojT2ZmaWNlIGFjdGl2YXRpb24gaXMgT0ZG
echo(Li4uIyAjQSBhdGl2YefjbyBkbyBPZmZpY2UgZXN04SBERVNMSUdBREEgLi4uIw0K
echo(I09GRklDRSBBQ1RJVkFUSU9OIFNUQVRVUyBDSEVDSyMgI1ZFUklGSUNBx8NPIERF
echo(IFNUQVRVUyBERSBBVElWQcfDTyBETyBPRkZJQ0UjDQojT2ZmaWNlIFZPTFVNRSBs
echo(aWNlbnNlIGNlcnRpZmljYXRlcyBhcmUgaW5zdGFsbGluZzojICNPcyBjZXJ0aWZp
echo(Y2Fkb3MgZGUgbGljZW7nYSBkbyBPZmZpY2UgVk9MVU1FIGVzdONvIHNlbmRvIGlu
echo(c3RhbGFkb3M6Iw0KI09ubGluZSBBY3RpdmF0aW9uIFN1aXRlIyAjUGFjb3RlIGRl
echo(IGF0aXZh5+NvIG9ubGluZSMNCiNPTkxJTkUgQUNUSVZBVElPTiBWSVNJVCBXRUJT
echo(SVRFIyAjQVRJVkHHw08gT05MSU5FIFZJU0lURSBPIFNJVEUjDQojT05MSU5FIEFD
echo(VElWQVRJT04gVklTSVQgV0VCU0lURSAoVE5DVFIpIyAjU0lURSBERSBWSVNJVEEg
echo(REUgQVRJVkHHw08gT05MSU5FIChCYXRjaC1TYXR0aSkjDQojT1MgTkFNRSA6IyAj
echo(Tk9NRSBETyBTTzojDQojUGFydGlhbCBQcm9kdWN0IEtleTojICNDaGF2ZSBwYXJj
echo(aWFsIGRvIHByb2R1dG86Iw0KI1BDIE5BTUUjICNOT01FIERPIFBDIw0KI1BsZWFz
echo(ZSBhY3RpdmF0ZSB0aGUgcHJvZHVjdCBpbiBvcmRlciB0byB1cGRhdGUgS01TIGNs
echo(aWVudCBpbmZvcm1hdGlvbiB2YWx1ZXMuIyAjQXRpdmUgbyBwcm9kdXRvIHBhcmEg
echo(YXR1YWxpemFyIG9zIHZhbG9yZXMgZGFzIGluZm9ybWHn9WVzIGRvIGNsaWVudGUg
echo(S01TLiMNCiNQbGVhc2UgcmVuYW1lIGl0IHRvIGEgbmFtZSB0aGF0IGRvZXMgbm90
echo(IGNvbnRhaW4gdGhlIGZvbGRlciBzcGFjZSBjaGFyYWN0ZXIuIyAjUmVub21laWUt
echo(byBjb20gdW0gbm9tZSBxdWUgbuNvIGNvbnRlbmhhIG8gY2FyYWN0ZXJlIGRlIGVz
echo(cGHnbyBkYSBwYXN0YS4jDQojUGxlYXNlIHVuaW5zdGFsbCBXaW5EaXZlcnQgTWV0
echo(aG9kIGZvciB1c2UgS01TSW5qZWN0IE1ldGhvZCMgI0Rlc2luc3RhbGUgbyBt6XRv
echo(ZG8gV2luRGl2ZXJ0IHBhcmEgdXNhciBvIG3pdG9kbyBLTVNJbmplY3QjDQojUHJl
echo(c3MgYW55IGtleSB0byBjb250aW51ZS4uLiMgI1ByZXNzaW9uZSBxdWFscXVlciB0
echo(ZWNsYSBwYXJhIGNvbnRpbnVhci4uLiMNCiNQcmVzcyBhbnkga2V5IHRvIGV4aXQj
echo(ICNhcGVydGUgcXVhbHF1ZXIgdGVjbGEgcGFyYSBzYWlyIw0KI1ByZXNzIHRoZSBN
echo(IGJ1dHRvbiB0byByZXR1cm4gdG8gdGhlIE1haW4gTWVudS4jICNQcmVzc2lvbmUg
echo(byBib3TjbyBNIHBhcmEgcmV0b3JuYXIgYW8gbWVudSBwcmluY2lwYWwuIw0KI1By
echo(b2R1Y3QgQWN0aXZhdGlvbiBGYWlsZWQjICNGYWxoYSBuYSBhdGl2YefjbyBkbyBw
echo(cm9kdXRvIw0KI1Byb2R1Y3QgQWN0aXZhdGlvbiBzdWNjZWVkZWQsIGJ1dCBSZW1h
echo(aW5pbmcgUGVyaW9kIGZhaWxlZCB0byBpbmNyZWFzZS4jICNBIGF0aXZh5+NvIGRv
echo(IHByb2R1dG8gZm9pIGJlbS1zdWNlZGlkYSwgbWFzIG8gcGVy7W9kbyByZXN0YW50
echo(ZSBu428gYXVtZW50b3UuIw0KI1Byb2R1Y3QgQWN0aXZhdGlvbiBTdWNjZXNzZnVs
echo(IyAjQXRpdmHn428gZG8gcHJvZHV0byBiZW0gc3VjZWRpZGEjDQojUHJvZHVjdCBL
echo(ZXkgQ2hhbm5lbDojICNDYW5hbCBkYSBjaGF2ZSBkbyBwcm9kdXRvOiMNCiNSZWFy
echo(bWluZyBXaW5kb3dzIEFwcGxpY2F0aW9uIElELi4uIyAjUmVhcm1hbmRvIG8gSUQg
echo(ZG8gYXBsaWNhdGl2byBkbyBXaW5kb3dzIC4uLiMNCiNSZWFybWluZyBXaW5kb3dz
echo(IFNLVSBJRC4uLiMgI1JlZXN0cnV0dXJhbmRvIG8gV2luZG93cyBTS1UgSUQgLi4u
echo(Iw0KI1JlbWFpbmluZyBQZXJpb2Q6IyAjUGVy7W9kbyBSZXN0YW50ZTojDQojUmVx
echo(dWlyZWQgZmlsZSMgI0FycXVpdm8gcmVxdWVyaWRvIw0KI1Jlc3RhcnQgeW91ciBj
echo(b21wdXRlciBhbmQgdHJ5IGFnYWluLiMgI1JlaW5pY2llIG8gc2V1IGNvbXB1dGFk
echo(b3IgZSB0ZW50ZSBub3ZhbWVudGUuIw0KI1Jlc3RhcnRpbmcgdGhlIHN5c3RlbS4u
echo(LiMgI1JlaW5pY2lhbmRvIG8gc2lzdGVtYSAuLi4jDQojUkVUVVJOIEtNUyBTVUlU
echo(RSBNRU5VIyAjUkVUT1JOQVIgTyBNRU5VIERBIFNVzVRFIEtNUyMNCiNSdW5uaW5n
echo(IGluIERlYnVnIE1vZGUuLi4jICNFeGVjdXRhbmRvIG5vIG1vZG8gZGUgZGVwdXJh
echo(5+NvIC4uLiMNCiNTZWUgS0IyNzM2MzAzIGZvciBkZXRhaWxzLiMgI0NvbnN1bHRl
echo(IEtCMjczNjMwMyBwYXJhIG9idGVyIGRldGFsaGVzLiMNCiNTZWUgUmVhZCBNZSBm
echo(b3IgdHJvdWJsZXNob290aW5nLiMgI0NvbnN1bHRlIG8gTGVpYS1tZSBwYXJhIHNv
echo(bHXn428gZGUgcHJvYmxlbWFzLiMNCiNTZXJ2aWNlIGZhaWxlZCB0byBzdGFydDoj
echo(ICNGYWxoYSBhbyBpbmljaWFyIG8gc2VydmnnbzojDQojU0hBMSBoYXNoIHZlcmlm
echo(aWNhdGlvbiBtaXNtYXRjaC4jICNJbmNvbXBhdGliaWxpZGFkZSBkZSB2ZXJpZmlj
echo(YefjbyBkZSBoYXNoIFNIQTEuIw0KI1NoYXJlUG9pbnQgRGVzaWduZXIgMjAxMyBB
echo(cHAjICNBcGxpY2F0aXZvIFNoYXJlUG9pbnQgRGVzaWduZXIgMjAxMyMNCiNTa3lw
echo(ZWZvckJ1c2luZXNzIDIwMTUgQXBwIyAjQXBsaWNhdGl2byBTa3lwZWZvckJ1c2lu
echo(ZXNzIDIwMTUjDQojU29mdHdhcmUgUHJvdGVjdGlvbiBbc3Bwc3ZjXSMgI1Byb3Rl
echo(5+NvIGRlIHNvZnR3YXJlIFtzcHBzdmNdIw0KI1NvbWUgb3IgYWxsIHJlcXVpcmVk
echo(IHJlZ2lzdHJ5IHZhbHVlcyBhcmUgbWlzc2luZy4jICNBbGd1bnMgb3UgdG9kb3Mg
echo(b3MgdmFsb3JlcyBkZSByZWdpc3RybyBuZWNlc3PhcmlvcyBlc3TjbyBmYWx0YW5k
echo(by4jDQojU1BFQ0lBTCBUSEFOS1MgOiBUTkNUUiBGYW1pbHkgLSBDT0RZUVg0LCBh
echo(YmJvZGkxNDA2LCBxZXdscGFsLCBzMWF2ZTc3LCBjeW5lY3gsIHFhZCwgTW91cmlf
echo(TmFydXRvIChNREwpLCBXaW5kb3dzQWRkaWN0LCBtc3BhaW50bXNpIyAjQUdSQURF
echo(Q0lNRU5UT1MgRVNQRUNJQUlTOiBGYW3tbGlhIEJhdGNoLVNhdHRpIGVtIGVzcGVj
echo(aWFsIEJvc3MtSGVhZCMNCiNTcGVjaWFsIHRoYW5rczogYWJib2RpMTQwNiwgczFh
echo(dmU3NywgY3luZWN4LCBNb3VyaV9OYXJ1dG8sIFdpbmRvd3NBZGRpY3QsIG1zcGFp
echo(bnRtc2kjICNBZ3JhZGVjaW1lbnRvcyBlc3BlY2lhaXM6IEJhdGNoLVNhdHRpIGVt
echo(IGVzcGVjaWFsIEJvc3MtSGVhZCMNCiNTdGFydGluZyBzZXJ2aWNlOiMgI0luaWNp
echo(YW5kbyBzZXJ2aedvOiMNCiNTVVBQT1JUIE1JQ1JPU09GVCBQUlVEVUNUUyMgI1NV
echo(UE9SVEUgQSBNSUNST1NPRlQgUFJVRFVDVFMjDQojU3ltYm9saWMgbGluayBjcmVh
echo(dGlvbiBmYWlsZWQuIyAjRmFsaGEgbmEgY3JpYefjbyBkbyBsaW5rIHNpbWLzbGlj
echo(by4jDQojdGhlIGN1cnJlbnQgZm9sZGVyIGlzIGV4Y2x1ZGVkLiMgI2EgcGFzdGEg
echo(YXR1YWwg6SBleGNsde1kYS4jDQojdGhlIGZpbGUgcGF0aCBpcyBleGNsdWRlZC4j
echo(ICNvIGNhbWluaG8gZG8gYXJxdWl2byDpIGV4Y2x17WRvLiMNCiN0aGUgcmVnaXN0
echo(cnkgcGF0aCBpcyBleGNsdWRlZC4jICNvIGNhbWluaG8gZG8gcmVnaXN0cm8g6SBl
echo(eGNsde1kby4jDQojVGhlcmUgYXJlIHNwYWNlcyBpbiB0aGUgY3VycmVudCBmb2xk
echo(ZXIgbmFtZS4jICNFeGlzdGVtIGVzcGHnb3Mgbm8gbm9tZSBkYSBwYXN0YSBhdHVh
echo(bC4jDQojVGhpcyBjb3VsZCBiZSByZWxhdGVkIHRvIHRoZSBlcnJvciBkZXNjcmli
echo(ZWQgaW4gS0I0NDg3MjY2IyAjSXNzbyBwb2RlIGVzdGFyIHJlbGFjaW9uYWRvIGFv
echo(IGVycm8gZGVzY3JpdG8gZW0gS0I0NDg3MjY2Iw0KI1RoaXMgc2NyaXB0IG5lZWRz
echo(IHRvIGJlIHJ1biBhcyBhZG1pbmlzdHJhdG9yLiMgI0VzdGUgc2NyaXB0IHByZWNp
echo(c2Egc2VyIGV4ZWN1dGFkbyBjb21vIGFkbWluaXN0cmFkb3IuIw0KI1RoaXMgd2lu
echo(ZG93IHdpbGwgY2xvc2UgYXV0b21hdGljYWxseSB3aGVuIHRoZSBwcm9jZXNzIGlz
echo(IGZpbmlzaGVkLiBQbGVhc2Ugd2FpdC4uLiMgI0VzdGEgamFuZWxhIHNlcuEgZmVj
echo(aGFkYSBhdXRvbWF0aWNhbWVudGUgcXVhbmRvIG8gcHJvY2Vzc28gZm9yIGNvbmNs
echo(de1kby4gUG9yIGZhdm9yLCBhZ3VhcmRlLi4uIw0KI0tNUyAoSW5qZWN0KSBBY3Rp
echo(dmF0aW9uIFdpbmRvd3MjICNKYW5lbGFzIGRlIGF0aXZh5+NvIEtNUyAoaW5qZefj
echo(bykjDQojVHVybiBFeHRlcm5hbCBvcHRpb24gT04gdG8gYWN0aXZhdGUgdmlhIGV4
echo(dGVybmFsIEtNUyBTZXJ2ZXIuIyAjTElHVUUgYSBvcOfjbyBleHRlcm5hIHBhcmEg
echo(YXRpdmFyIHZpYSBLTVMgUyBleHRlcm5vIw0KI1VuYWJsZSB0byBjaGFuZ2Ugc2Vy
echo(dmljZSBzdGFydCB0eXBlOiMgI07jbyDpIHBvc3PtdmVsIGFsdGVyYXIgbyB0aXBv
echo(IGRlIGlu7WNpbyBkbyBzZXJ2aedvOiMNCiNVbnN1cHBvcnRlZCBPUy4jICNTTyBu
echo(428gY29tcGF07XZlbC4jDQojVmVyaWZpZXJEbGxzLCBWZXJpZmllckRlYnVnLCBW
echo(ZXJpZmllckZsYWdzLCBHbG9iYWxGbGFnLCBLTVNfRW11bGF0aW9uIyAjVmVyaWZp
echo(ZXJEbGxzLCBWZXJpZmllckRlYnVnLCBWZXJpZmllckZsYWdzLCBHbG9iYWxGbGFn
echo(LCBLTVNfRW11bGF0aW9uIw0KI1ZlcmlmeSB0aGF0IEFudGl2aXJ1cyBwcm90ZWN0
echo(aW9uIGlzIE9GRiBvciMgI1ZlcmlmaXF1ZSBzZSBhIHByb3Rl5+NvIGFudGl27XJ1
echo(cyBlc3ThIERFU0xJR0FEQSBvdSMNCiNWZXJpZnkgdGhhdCB0aGVzZSBzZXJ2aWNl
echo(cyBhcmUgd29ya2luZyBjb3JyZWN0bHk6IyAjVmVyaWZpcXVlIHNlIGVzc2VzIHNl
echo(cnZp529zIGVzdONvIGZ1bmNpb25hbmRvIGNvcnJldGFtZW50ZTojDQojVkVSU0lP
echo(TiA6IyAjVkVSU8NPOiMNCiNXQVJOSU5HIyAjQVZJU08jDQojV2hpY2ggcHJvZHVj
echo(dCB3b3VsZCB5b3UgbGlrZSB0byBhY3RpdmF0ZT8jICNRdWFsIHByb2R1dG8gdm9j
echo(6iBnb3N0YXJpYSBkZSBhdGl2YXI/Iw0KI1dpbkRpdmVydCBNZXRob2QgaXMgaW5z
echo(dGFsbGVkIG9uIHRoZSBzeXN0ZW0uIyAjTyBt6XRvZG8gV2luRGl2ZXJ0IGVzdOEg
echo(aW5zdGFsYWRvIG5vIHNpc3RlbWEuIw0KI1dpbmRvd3MgNyBjYW5ub3QgYmUgS01T
echo(LWFjdGl2YXRlZCBvbiB0aGlzIGNvbXB1dGVyIGR1ZSB0byB1bnF1YWxpZmllZCBP
echo(RU0gQklPUy4jICNPIFdpbmRvd3MgNyBu428gcG9kZSBzZXIgYXRpdmFkbyBwb3Ig
echo(S01TIG5lc3RlIGNvbXB1dGFkb3IgZGV2aWRvIGFvIEJJT1MgT0VNIG7jbyBxdWFs
echo(aWZpY2Fkby4jDQojV2luZG93cyBhY3RpdmF0aW9uIGlzIE9GRi4uLiMgI0EgYXRp
echo(dmHn428gZG8gV2luZG93cyBlc3ThIERFU0xJR0FEQSAuLi4jDQojV0lORE9XUyBB
echo(Q1RJVkFUSU9OIFNUQVRVUyMgI1NUQVRVUyBERSBBVElWQcfDTyBETyBXSU5ET1dT
echo(Iw0KI1dpbmRvd3MgTWFuYWdlbWVudCBJbnN0cnVtZW50YXRpb24gW1dpbk1nbXRd
echo(IyAjSW5zdHJ1bWVudGHn428gZGUgZ2VyZW5jaWFtZW50byBkbyBXaW5kb3dzIFtX
echo(aW5NZ210XSMNCiNXaW5kb3dzIG5lZWRzIHRvIHJlYnVpbGQgdGhlIGFjdGl2YXRp
echo(b24tcmVsYXRlZCBmaWxlcy4jICNPIFdpbmRvd3MgcHJlY2lzYSByZWNvbnN0cnVp
echo(ciBvcyBhcnF1aXZvcyByZWxhY2lvbmFkb3Mg4CBhdGl2Yefjby4jDQojQWN0aXZh
echo(dGluZyMgI0F0aXZhbmRvIw0KI0NoZWNraW5nIyAjVmVyaWZpY2FuZG8jDQojUHJv
echo(ZHVjdCBBY3RpdmF0aW9uIyAjQXRpdmHn428gZGUgUHJvZHV0byMNCiNZT1VSIENI
echo(T0lDRSMgI0RJR0lURSBVTUEgT1DHw08jDQojaHR0cHM6Ly93d3cudG5jdHIuY29t
echo(L3RvcGljLzQ1MDkxNi1rbXMyMDM4LWRpaml0YWwtb25saW5lLWFrdGl2YXN5b24t
echo(c3VpdGUtdjY0LyMgIyBodHRwczovL2JhdGNoLXNhdHRpLmZvcnVtZWlyb3MuY29t
echo(LyMNCiMoVE5DVFIpIyAjKEJhdGNoLVNhdHRpKSMNCiNWb2x1bWUgYWN0aXZhdGlv
echo(biBleHBpcmF0aW9uOiMgI0V4cGlyYefjbyBkZSBhdGl2YefjbyBkZSB2b2x1bWU6
echo(Iw0KI1RpbWUgcmVtYWluaW5nOiMgI1RlbXBvIHJlc3RhbnRlOiMNCiNOb3RpZmlj
echo(YXRpb24gUmVhc29uOiMgI01vdGl2byBkYSBub3RpZmljYefjbzojDQojKG5vbi1n
echo(ZW51aW5lKSMgIyhu428gZ2Vude1ubykjDQojKGdyYWNlIHRpbWUgZXhwaXJlZCkj
echo(ICModGVtcG8gZGUgY2Fy6m5jaWEgZXhwaXJvdSkjDQojS01TIG5hbWUgbm90IGF2
echo(YWlsYWJsZSMgI05vbWUgS01TIG7jbyBkaXNwb27tdmVsIw0KI0ROUyBhdXRvLWRp
echo(c2NvdmVyeTojICNEZXRlY+fjbyBhdXRvbeF0aWNhIGRlIEROUzojDQojTGljZW5z
echo(ZT1VbmxpY2Vuc2VkIyAjTGljZW5zZT1u428gbGljZW5jaWFkbyMNCiNMaWNlbnNl
echo(PUxpY2Vuc2VkIyAjTGljZW5zZT1saWNlbmNpYWRvIw0KI0xpY2Vuc2U9Tm9uLWdl
echo(bnVpbmUgZ3JhY2UgcGVyaW9kLiMgI0xpY2Vuc2U9cGVy7W9kbyBkZSBjYXLqbmNp
echo(YSBu428gb3JpZ2luYWwuIw0KI0xpY2Vuc2U9SW5pdGlhbCBncmFjZSBwZXJpb2Qj
echo(ICNMaWNlbnNlPXBlcu1vZG8gZGUgY2Fy6m5jaWEgaW5pY2lhbCMNCiNUaW1lIHJl
echo(bWFpbmluZzojICNUZW1wbyByZXN0YW50ZTojDQojQWRkaXRpb25hbCBncmFjZSBw
echo(ZXJpb2QgKEtNUyBsaWNlbnNlIGV4cGlyZWQgb3IgaGFyZHdhcmUgb3V0IG9mIHRv
echo(bGVyYW5jZSkjICNQZXLtb2RvIGRlIGNhcupuY2lhIGFkaWNpb25hbCAobGljZW7n
echo(YSBLTVMgZXhwaXJhZGEgb3UgaGFyZHdhcmUgZm9yYSBkYSB0b2xlcuJuY2lhKSMN
echo(CiNMaWNlbnNlPUV4dGVuZGVkIGdyYWNlIHBlcmlvZCMgI0xpY2Vuc2U9cGVy7W9k
echo(byBkZSBjYXLqbmNpYSBlc3RlbmRpZG8jDQojTGljZW5zZT1Ob3RpZmljYXRpb24j
echo(ICNMaWNlbnNlPU5vdGlmaWNh5+NvIw0KI0xpY2Vuc2U9VW5rbm93biMgI0xpY2Vu
echo(c2U9RGVzY29uaGVjaWRhIw0KI0tNUyBtYWNoaW5lIG5hbWUgZnJvbSBETlM6IyAj
echo(Tm9tZSBkYSBt4XF1aW5hIEtNUyBkbyBETlM6Iw0KI0ROUyBhdXRvLWRpc2NvdmVy
echo(eTogIyAjRGV0ZWPn428gYXV0b23hdGljYSBkZSBETlM6Iw0KDQoNCg0K
echo(-----END CERTIFICATE-----
)
certutil.exe -f -decode "temp.b64~" "PALAVRAS2.txt"
del "temp.b64~"
GOTO:EOF
Feito isso arraste o arquivo em inglês e solte sobre o Tradutor.bat ou execute ele e arraste o arquivo se quiser, tambem pode digitar o caminho do arquivo ....

Execute o arquivo em inglês e veja o resultado, por precaução ele cria um bkp do arquivo original...

No arquivo PALAVRAS2.txt que é gerado as palavras são separadas por # por causa dos tokens do FOR.
para gerar esse arquivo de palavras eu uso um truque, eu pego o arquivo em inglês, russo ou espanhol e solto sobre esse arquivo :
Código:
@echo Off
::separapalavras.bat
ECHO. ARRASTE E SOLTE O ARQUIVO AQUI PARA SEPARAR PALAVRAS
SET /P ARQ= ):
REM FIND /I "REM" "%ARQ%" >TESTE3.TXT
FIND /I "ECHO" "%ARQ%" >>TESTE3.TXT
FIND /I "ECHO." "%ARQ%" >>TESTE3.TXT
REM FIND /I "::" "%ARQ%" >>TESTE3.TXT
FIND /I "call :Color" "%ARQ%" >>TESTE3.TXT
PAUSE
Para separar as palavras de dentro de um arquivo em outra língua eu uso esse scrit..
Código:
@echo Off
::separapalavras.bat
IF [%1]==[] (
ECHO.
ECHO.            SEM ARQUIVO
ECHO.
ECHO. ARRASTE E SOLTE O ARQUIVO AQUI PARA TRADUZIR
SET /P ARQ= ^):
CALL:IINNIICCIIOO %ARQ%
PAUSE
EXIT
)
call :MakeReplace
:IINNIICCIIOO
set "ARQ=%~1"
set tmp="%temp%\tmp.txt"

type nul>%~dp0TESTE3.TXT

FIND /I "REM" "%ARQ%" >%~dp0TESTE3.TXT
FIND /I "title" "%ARQ%" >>%~dp0TESTE3.TXT
FIND /I "ECHO" "%ARQ%" >>%~dp0TESTE3.TXT
FIND /I "::" "%ARQ%" >>%~dp0TESTE3.TXT
FIND /I "call :Color" "%ARQ%" >>%~dp0TESTE3.TXT
set "textFile=%~dp0TESTE3.TXT"

echo call:INVERTE "title" "." "%textFile%"

call:INVERTE "title" "#" "%textFile%"
call:INVERTE "Echo." "#" "%textFile%"
call:INVERTE "Echo" "#" "%textFile%"
call:INVERTE "call :Color" "#" "%textFile%"
call:INVERTE "::" "#" "%textFile%"
call:INVERTE "rem" "#" "%textFile%"

PAUSE
exit

:INVERTE
for /f "tokens=*" %%a in ('dir "%3" /s /b /a-d /on') do (
  for /f "usebackq" %%b in (`Findstr /mic:"%~1" "%%a"`) do (
    echo(&Echo Substituindo: "%~1" por "%~2" no arquivo %%~nxa
    <%%a cscript //nologo %temp%\_.vbs "%~1" "%~2">%tmp%
    if exist %tmp% move /Y %tmp% "%%~dpnxa">nul
  )
)
exit /b

:MakeReplace
>%temp%\_.vbs echo with Wscript
>>%temp%\_.vbs echo set args=.arguments
>>%temp%\_.vbs echo .StdOut.Write _
>>%temp%\_.vbs echo Replace(.StdIn.ReadAll,args(0),args(1),1,-1,1)
>>%temp%\_.vbs echo end with
exit /b

Boss-Head

Boss-Head

Depois de separar o que me interessa ex:
Código:
KMS  KMS 2038  Digital  Online Activation Suite %ver% by mephistooo2 - TNCTR.com
 KMS (Online) Activation Windows  Office %ver% by mephistooo2 - TNCTR.com
 WARNING ..
There are spaces in the current folder name.
Please rename it to a name that does not contain the folder space character.
Press any key to EXIT...
This script needs to be run as administrator.
78 KMS  KMS 2038  Digital  Online Activation Suite %ver% - mephistooo2 - www.TNCTR.com
Special thanks: abbodi1406, s1ave77, cynecx, Mouri_Naruto, WindowsAddict, mspaintmsi, BAU
6 SUPPORT MICROSOFT PRUDUCTS
Windows 7 (VL) / Windows 8 / 8.1 / 10
Windows Server 2008 / 2012 / 2012 R2 / 2016 / 2019
Office 2010 / 2013 / 2016 / 2019 (VL)
NAME OS
VERSION
ARCHITECTURE
PC NAME
ACTIVATION START FOR WINDOWS 10  OFFICE (KMS Inject Method)
ACTIVATION START FOR WINDOWS 10 (Digital  KMS 2038 Activation Method)
ACTIVATION START FOR WINDOWS 10  OFFICE (Online Activation Method)
WINDOWS  OFFICE ACTIVATION STATUS CHECK
KMS  KMS 2038  DIJITAL  ONLINE ACTIVATION VISIT WEBSITE
EXIT
KMS (Online) Activation Windows  Office %ver% - mephistooo2 - www.TNCTR.com
Special thanks: abbodi1406, s1ave77, cynecx, Mouri_Naruto, WindowsAddict, mspaintmsi
SUPPORT MICROSOFT PRUDUCTS:
Windows 7 (VL) / Windows 8 / 8.1 / 10
Windows Server 2008 / 2012 / 2012 R2 / 2016
Office 2010 / 2013 / 2016 / 2019 (VL)
NAME OS : %NameOS% %SP% %xOS% %vera%
VERSION : %Version%
ARCHITECTURE : %PROCESSOR_ARCHITECTURE%
PC NAME : %computername%
Press the M button to return to the Main Menu.
KMS SERVER WILL BE SELECTED AUTOMATICALLY AND THE ACTIVATION PROCESS WILL BEGINNING.
Which product would you like to activate?
[W]indows [O]ffice [A]ll
Running in Debug Mode...
This window will close automatically when the process is finished. Please wait...
NO INTERNET CONNECTION.
Press any key to continue...
Checking: NO INTERNET CONNECTION.
30 s. waiting...
ERROR: ACTIVATION FAILED.
Restart your computer and try again.

Boss-Head

Boss-Head

eu uso uma planilha excel pra colar o inglês e o traduzido !
assim
   
#NAME OS ##NOME SO#
#VERSION ##VERSÃO#
#ARCHITECTURE ##ARQUITETURA#
#PC NAME##NOME DO PC#

[Tens de ter uma conta e sessão iniciada para poderes visualizar esta imagem]

Boss-Head

Boss-Head

para isso pode usar o google tradutor copiar e colar na planilha !
[Tens de ter uma conta e sessão iniciada para poderes visualizar esta imagem]

Boss-Head

Boss-Head

espero que entenda, pra mim acho bom, más pode melhorar..
o arquivo gerado traduzido no final dele vai estar a versão em inglês e português, dai pode só acrescentando o que te interessa, russo, espanhol etc...

pra determinar a língua pode usar algo assim se quiser
Código:
@echo off
for /f "tokens=2 delims= " %%i in ('PowerShell Get-WinSystemLocale') do set "Lingua=%%i"
echo %lingua%
if /i '%lingua%'=='pt-br' call:pt-br
if /i '%lingua%'=='en-us' call:ingles
if /i '%lingua%'=='en-gb' call:inglesBri
pause

Boss-Head

Boss-Head

pro seu script não ficar gigantesco pode usar o powershell pra baixar as traduções, abaixo segue um exemplo de como usar ...
Código:
@echo off
cd "%~dp0"
pushd "%~dp0"
Mode 110,10 & color 0A
:CRIA_PROG_AUX
for /f %%a in ('"ping www.google.com.br -n 1|find "Recebidos""') do set adsl=1
if "%adsl%"=="1" (goto:CRIA_PROGS) else (ECHO.&ECHO.&ECHO.&ECHO    PRECISA ESTAR CONECTADO NA INTERNET &PAUSE >NUL&GOTO:CRIA_PROG_AUX)
:CRIA_PROGS
Title Baixe arquivos da web usando o PowerShell e batch
Set "Lista_de_Urls=Urls.txt"
Call :Cria_Lista_de_Urls
Setlocal enabledelayedexpansion
@For /f "delims=" %%a in ('Type "%Lista_de_Urls%"') do (
    Set "URL=%%a"
    Rem definimos o nome do arquivo a partir da variável !url!
    @for %%# in (!url!) do ( set "Arquivo=%%~xn#" )
    Rem Verifique se o nome do arquivo contém um ponto "."
    Rem Caso contrário, incrementamos o contador +1 para o arquivo a ser baixado
        ECHO !Arquivo! | FIND /I ".">Nul 2>&1
        If "!errorlevel!" NEQ "0" (
            Set /a Conta+=1
            cls & echo(
            echo              Download do Arquivo "Arquivo-!Conta!.bat" da URL : "!URL!"
            Call :Balao_Tray 'information' 10 '"Download do Arquivo-!Conta!.bat"' "'Por favor aguarde... Download do Arquivo-!Conta!.bat....'" 'info' 4
            Call :Download "%%a" "Arquivo-!Conta!.bat"
        ) else (
            cls & echo(
            echo    Download do Arquivo "!Arquivo!" da URL : "!URL!"
            Call :Balao_Tray 'information' 10 '"Download do !Arquivo!"' "'Por favor aguarde... Download do !Arquivo!....'" 'info' 4
            Call :Download "%%a" "!Arquivo!"

        )
)
rem Explorer "%~dp0"
exit
::*********************************************************************************
:Download <url> <Arquivo>
Powershell.exe -command "(New-Object System.Net.WebClient).DownloadFile('%1','%2')"
rem powershell.exe -Command {[Net.ServicePointManager]::SecurityProtocol +='tls12';$wc = New-object System.Net.WebClient; $wc.DownloadFile('%1','%2')}
exit /b
::*********************************************************************************
:Cria_Lista_de_Urls
(
echo.https://wallpaper.dog/large/10880383.jpg
echo.https://cutewallpaper.org/download.php?file=/21/ultra-hd-walpaper/4K-Ultra-HD-Desktop-Wallpapers-HD-3840x2160-for-WindowsMaciMac.jpg
echo.http://s1.picswalls.com/wallpapers/2016/06/10/4k-background_065217183_309.jpg
echo.http://s1.picswalls.com/thumbs2/2016/06/10/4k-desktop-backgrounds_065331385_309.jpg
echo.http://s1.picswalls.com/thumbs2/2016/06/10/4k-desktop-wallpapers_065328799_309.jpg
echo.http://s1.picswalls.com/thumbs2/2016/06/10/4k-hd-wallpapers_065326664_309.jpg
echo.http://s1.picswalls.com/thumbs2/2016/06/10/4k-high-quality-wallpaper_06532391_309.jpg
echo.http://s1.picswalls.com/thumbs2/2016/06/10/4k-picture_065317474_309.jpg
echo.http://s1.picswalls.com/thumbs2/2016/06/10/4k-pictures_065316401_309.jpg
echo.http://s1.picswalls.com/thumbs2/2016/06/10/4k-wallpaper_06531428_309.jpg
echo.http://s1.picswalls.com/thumbs2/2016/06/10/beautiful-4k-wallpaper_065308139_309.jpg
echo.http://s1.picswalls.com/thumbs2/2016/06/10/fantasy-4k-wallpaper_065302304_309.jpg
echo.http://s1.picswalls.com/thumbs2/2016/06/10/hd-4k-wallpaper_065259858_309.jpg
echo.http://s1.picswalls.com/thumbs2/2016/06/10/sunset-4k-wallpaper_065250832_309.jpg
echo.http://s1.picswalls.com/thumbs2/2015/08/21/windows-10-background_053257519_263.jpg
echo.http://s1.picswalls.com/thumbs2/2015/11/21/league-of-legends-background_111415167_289.jpg
echo.http://s1.picswalls.com/thumbs2/2015/11/21/league-of-legends-desktop-backgrounds_111411588_289.jpg
echo.http://s1.picswalls.com/thumbs2/2015/11/21/league-of-legends-desktop-wallpapers_111408743_289.jpg
echo.http://s1.picswalls.com/thumbs2/2015/11/21/league-of-legends-high-quality-wallpaper_111401350_289.jpg
echo.http://s1.picswalls.com/thumbs2/2015/09/27/motorcycle-wallpapers_051928137_278.jpg
)>"%Lista_de_Urls%"
exit /b
::*********************************************************************************
:Balao_Tray $notifyicon $time $title $text $icon $Timeout
PowerShell  ^
  [reflection.assembly]::loadwithpartialname('System.Windows.Forms') ^| Out-Null; ^
 [reflection.assembly]::loadwithpartialname('System.Drawing') ^| Out-Null; ^
 $notify = new-object system.windows.forms.notifyicon; ^
  $notify.icon = [System.Drawing.SystemIcons]::%1; ^
  $notify.visible = $true; ^
  $notify.showballoontip(%2,%3,%4,%5); ^
  Start-Sleep -s %6; ^
  $notify.Dispose()
%End PowerShell%
exit /B
::*************************************************************************

llbranco

llbranco

opa, valeu
vou dar uma analisada nesses e ver oq consigo extrair pra adaptar no meu projeto
vou postando meus testes aqui...
infelizmente, por causa de sequelas do covid (pós postagem inicial) to com o raciocínio meio lento e a memoria então, nem se fala...

forte abraço, em breve posto meu progresso

Boss-Head

Boss-Head

llbranco escreveu:opa, valeu
vou dar uma analisada nesses e ver oq consigo extrair pra adaptar no meu projeto
vou postando meus testes aqui...
infelizmente, por causa de sequelas do covid (pós postagem inicial) to com o raciocínio meio lento e a memoria então, nem se fala...

forte abraço, em breve posto meu progresso
estimo as melhoras, logo vem a 6 dose da vachina ai estará tudo resolvido...

llbranco

llbranco

valeu Boss-Head

achei outra parada interessante no script tron
Código:
:: Detect system language. This determines which string we look for in ipconfig output for determining if we have an active network connection
:: English
reg query "hklm\system\controlset001\control\nls\language" /v Installlanguage | %FIND% /i "0409" >nul 2>&1
if /i %ERRORLEVEL%==0 (
   set SYSTEM_LANGUAGE=en
   goto detect_network_connection
)

:: English UK
reg query "hklm\system\controlset001\control\nls\language" /v Installlanguage | %FIND% /i "0809" >nul 2>&1
if /i %ERRORLEVEL%==0 (
   set SYSTEM_LANGUAGE=gb
   goto detect_network_connection
)

:: German
reg query "hklm\system\controlset001\control\nls\language" /v Installlanguage | %FIND% /i "0407" >nul 2>&1
if /i %ERRORLEVEL%==0 (
   set SYSTEM_LANGUAGE=de
   goto detect_network_connection
)

:: Italian
reg query "hklm\system\controlset001\control\nls\language" /v Installlanguage | %FIND% /i "0410" >nul 2>&1
if /i %ERRORLEVEL%==0 (
   set SYSTEM_LANGUAGE=it
   goto detect_network_connection
)

:: French
reg query "hklm\system\controlset001\control\nls\language" /v Installlanguage | %FIND% /i "040C" >nul 2>&1
if /i %ERRORLEVEL%==0 (
   set SYSTEM_LANGUAGE=fr
   goto detect_network_connection
)

:: Spanish
reg query "hklm\system\controlset001\control\nls\language" /v Installlanguage | %FIND% /i "0C0A" >nul 2>&1
if /i %ERRORLEVEL%==0 (
   set SYSTEM_LANGUAGE=es
   goto detect_network_connection
)

:: Turkish
reg query "hklm\system\controlset001\control\nls\language" /v Installlanguage | %FIND% /i "041F" >nul 2>&1
if /i %ERRORLEVEL%==0 (
   set SYSTEM_LANGUAGE=tr
   goto detect_network_connection
)

:: Detect network connection. We assume it's available unless we actively detect it isn't
:detect_network_connection
set NETWORK_AVAILABLE=yes
:: English
if %SYSTEM_LANGUAGE%==en %WinDir%\system32\ipconfig /all | %FIND% /i "Subnet Mask" >NUL 2>&1
if /i not %ERRORLEVEL%==0 set NETWORK_AVAILABLE=no
:: English UK
if %SYSTEM_LANGUAGE%==gb %WinDir%\system32\ipconfig /all | %FIND% /i "Subnet Mask" >NUL 2>&1
if /i not %ERRORLEVEL%==0 set NETWORK_AVAILABLE=no
:: German
if %SYSTEM_LANGUAGE%==de %WinDir%\system32\ipconfig /all | %FIND% /i "Subnetzmaske" >NUL 2>&1
if /i not %ERRORLEVEL%==0 set NETWORK_AVAILABLE=no
:: Italian
if %SYSTEM_LANGUAGE%==it %WinDir%\system32\ipconfig /all | %FIND% /i "Subnet Mask" >NUL 2>&1
if /i not %ERRORLEVEL%==0 set NETWORK_AVAILABLE=no
:: French
if %SYSTEM_LANGUAGE%==fr %WinDir%\system32\ipconfig /all | %FIND% /i "Masque de" >NUL 2>&1
if /i not %ERRORLEVEL%==0 set NETWORK_AVAILABLE=no
:: Spanish
if %SYSTEM_LANGUAGE%==es %WinDir%\system32\ipconfig /all | %FIND% /i "de subred" >NUL 2>&1
if /i not %ERRORLEVEL%==0 set NETWORK_AVAILABLE=no

Lista de idiomas
[Tens de ter uma conta e sessão iniciada para poderes visualizar este link]
(confirmei com o ccleaner, apagando todas as dlls de idioma, mantendo apenas "1046.dll" decimal de "0416"(ptbr) e deu certinho)

pt-br no caso é 0416 (hexa de 1046) e ptpt 0816
[ fácil decorar 0x16 (4 brazuka e 8 tuga) ]
Código:
:: Português Brasileiro
reg query "hklm\system\controlset001\control\nls\language" /v Installlanguage | %FIND% /i "0416" >nul 2>&1
if /i %ERRORLEVEL%==0 (
   set SYSTEM_LANGUAGE=pt
   goto detect_network_connection
)
:: Português de Portugal
reg query "hklm\system\controlset001\control\nls\language" /v Installlanguage | %FIND% /i "0816" >nul 2>&1
if /i %ERRORLEVEL%==0 (
   set SYSTEM_LANGUAGE=pt
   goto detect_network_connection
)


postei o link do tron em outro post tbm
[Tens de ter uma conta e sessão iniciada para poderes visualizar este link]



espero que essas infos sejam úteis
tive uma ideia e assim q tiver uma folguinha (e ânimo) tento por em prática

llbranco

llbranco

achei isso:
[Tens de ter uma conta e sessão iniciada para poderes visualizar este link]

Código:
@echo off

cd /d "%~dp0" && setlocal EnableDelayedExpansion

for /f ^tokens^=*delims^= %%i in ('type test.txt'
)do set /a "_c+=1+0" && <con: set "_var!_c!=%%~i"

for /l %%l in (1 1 !_c!)do echo\_var%%l=!_var%%l!

%__AppDir__%timeout.exe -1 & endlocal & goto=:EOF



  • Código:
    test.txt
     file contents/layout:


Código:
This is line 1
  This is line 2
C:\dir
This is line 4
This is line 5
C:\util
This is line 7
C:\folder
This is line 9


  • Outputs:


Código:
_var1=This is line 1
_var2=  This is line 2
_var3=C:\dir
_var4=This is line 4
_var5=This is line 5
_var6=C:\util
_var7=This is line 7
_var8=C:\folder
_var9=This is line 9


1. You do not need to use 

Código:
"Tokens=1* Delims=] EOL="

 to save/set all strings on your line to a variable, so it is unnecessary, use 

Código:
tokens^=*delims^=

, this set tokens to all and reset/remove defaults delimiters.
Código:
... for /f ^tokens^=*delims^= %%i in (test.txt) ...
2. Increment a counter for your lines so that you can use a 

Código:
for /L

 loop dynamically and without having to edit it to manually add the number of lines in your file.
Código:
... set /a "_c+=1+0" ...
Obs.: When using this 

Código:
+=1+0

 in 

Código:
set /a "_c+=1+0"

, you don't need to predefine your variable with 

Código:
set _c=0


3. Use an operator to immediately set the variable after the counter is incremented by storing the current line using that counter already incremented
Código:
... set /a "_c+=1+0" && <con: set "_var!_c!=%%~i" ...
4. For dynamic listing of your saved variables/lines, use as a limit of your loop 

Código:
for /L

 the total already saved in the variable 

Código:
!_C!

, and to select them, just operate in a concatenation 

Código:
_var + %%l


Código:
for /l %%l in (1 1 !_c!)do echo\_var%%l=!_var%%l!


Obs.: 5 If the first character in line is space or tab and you need to remove it, just remove delimiter:
Código:
for /f ^tokens^=*delims^= %%i in ('type test.txt')do ...


Código:
@echo off && setlocal EnableDelayedExpansion

cd/d "%~dp0" && for /f tokens^=* %%i in (file.txt
)do set /a "_c+=1+0" && <con: set "_var!_c!=%%~i"

for /l %%l in (1 1 !_c!)do echo\_var%%l=!_var%%l!

%__AppDir__%timeout.exe -1 & endlocal & goto=:EOF



  • Código:
    file.txt
     file contents/layout:


Código:
This is line 1
TabThis is line 2
C:\dir
This is line 4
This is line 5
SpaceC:\util
This is line 7
C:\folder
This is line 9


  • Outputs removing the first character from the line if it is the same as the standard delimiters:


Código:
_var1=This is line 1
_var2=This is line 2
_var3=C:\dir
_var4=This is line 4
_var5=This is line 5
_var6=C:\util
_var7=This is line 7
_var8=C:\folder
_var9=This is line 9



é mais ou menos perto do que eu preciso
no entanto 1 idioma terá de estar "embutido no batch"
vou manter o inglês e demais idiomas em arquivos no formato
lang-[2 digitos].txt

vou por variaveis pra cod hexa vs idioma (0416=pt |0816=pt) pra cada idioma
fazer uma busca no registro pra identificar o idioma e caso 0416 seja identificado ele ira buscar lang-pt.txt e exibir a tradução de lá, por isso é importante manter o ingles como idioma padrão embutido no batch

(talvez até zipado embutido dentro do batch, o batch cria o arquivo de saída, extrai e boooooooom, 2 arquivos de idioma embutido em apenas 1 batch)


outra possibilidada é usar isso
[Tens de ter uma conta e sessão iniciada para poderes visualizar este link]


ele faz +/- isso:
Código:
variavel1=valor1
variavel2=valor2



oq acha?

12Como fazer um batch em vários idiomas? Empty Re: Como fazer um batch em vários idiomas? Sáb Fev 26, 2022 11:32 am

Boss-Head

Boss-Head

pode tenta usar algo assim é questão de adaptar a um script qualquer frase ou texto...

Código:
@echo Off 
@color 17 
:123
echo.
echo.
set /p fraze=Digite a frase ou texto em qualquer idioma ^>:
echo.
echo.
call:traduz

PAUSE
cls
goto 123

 

:traduz
echo.$Text = "%fraze%"> "%~dp0Tradutor.ps1"
echo.>> "%~dp0Tradutor.ps1"
echo.$TargetLanguage = "PT-BR">> "%~dp0Tradutor.ps1"
echo.$Uri = "https://translate.googleapis.com/translate_a/single?client=gtx&sl=auto&tl=$($TargetLanguage)&dt=t&q=$Text">> "%~dp0Tradutor.ps1"
echo.$Response = Invoke-RestMethod -Uri $Uri -Method Get>> "%~dp0Tradutor.ps1"
echo.>> "%~dp0Tradutor.ps1"
echo.$Translation = $Response[0].SyncRoot ^| foreach { $_[0] }>> "%~dp0Tradutor.ps1"
echo.>> "%~dp0Tradutor.ps1"
echo.write-host $Translation>> "%~dp0Tradutor.ps1"
powershell -file "%~dp0Tradutor.ps1"
Exit /b 0

13Como fazer um batch em vários idiomas? Empty Re: Como fazer um batch em vários idiomas? Sáb Fev 26, 2022 11:33 am

Boss-Head

Boss-Head

se separar as palavras em outro idioma e adaptar a esse script vai funcionar perfeitamente.

whinnycius



Amigo, pelo que eu entendi, vc quer criar um batch multi-idiomas.

Eu faria o seguinte:

1 - Criaria o arquivo de linguagem

Geralmente, quando preciso fazer algum batch assim, eu crio um arquivo TXT com o nome "lang_(idioma).txt" e a estrutura dele fica assim:

Código:
MSG1=Bem-vindo!
MSG2=Digite a opção desejada:
MSG3=Parabéns!
MSG4=Falhou!

onde:

NomeDaVariavel=TextoDaVariavel

Escrevo todas as mensagens (posso até ir escrevendo durante a programação) e salvo o arquivo.

2 - Escrevo o batch com as variáveis

Enquanto escrevo o script, ao invés de escrever as mensagens que eu preciso, eu coloco as variáveis das mensagens que eu quero que apareçam.

Então, ao invés de ser

Código:
@echo off
echo Bem vindo!
set /p "OPTION=Digite a opção desejada: "
if /i %OPTION%==1 (echo Parabéns!) else (echo Falhou!)
 
o arquivo ficará:


Código:
@echo off
echo %MSG1%
set /p "OPTION=%MSG2% "
if /i %OPTION%==1 (echo %MSG3%) else (echo %MSG4%)

3 - O PULO DO GATO

"Mas Vinicius, como ele vai ler o arquivo de texto e definir as variáveis?"

Usando o FOR no início do arquivo!


Código:
for /f "delims== tokens=1,2" %%a in (arquivo) do (set %%a=%%b)

onde: 
DELIMS=(o separador que você usou no seu arquivo. Pode ser qualquer coisa, mas geralmente eu uso =)
TOKENS=1,2 (ele vai interpretar %%a e %%b, antes e depois do delimitador)

A parte de identificar o idioma do Sistema eu nunca fiz, mas o Boss-Head mostrou aí em cima.

Boa sorte!



Última edição por whinnycius em Qua Mar 23, 2022 8:14 pm, editado 1 vez(es) (Motivo da edição : esqueci as aspas no FOR)

Conteúdo patrocinado



Ir para o topo  Mensagem [Página 1 de 1]

Permissões neste sub-fórum
Não podes responder a tópicos