martes, 7 de agosto de 2007

Traduccion de programas

Traduccion de programas by cr0n0triger


Utilizaremos:



  • ResHacker o ExeScope

  • WinHex

  • Win32Dasm(Programa a traducir)

  • Gigaget

  • Y nada lo mas importante: Ganas!


Bien procedo a crear un tutorial completo de como traducir programa
modificando el resource o modificando en hexadesimal:


1º. Buscar un programa para traducir, yo elegiré "Win32Dasm 8.9"(desensamblador),
bien primero mostraré como hacerlo con Reshacker: Vamos a Archivo -> Abrir y
seleccionamos el programa a traducir, veremos algo como esto...



No veras todas estas opciones en todos los programas que abras porque no
siempre los menús o mensajes están en el ejecutable, algunas veces pueden estar
en una dll o casos especiales que ya mencionare. NOTA: Los demás controles no
conciernen a la traducción de programas por eso no los mencionare ( ósea Icon,
Accelerators, Versión Info).


Ahora abriremos menú y veremos un listado de los posibles menús, se vera así:



Bien ese es el código, solo se modifica lo que esta entre paréntesis porque
lo demás son comandos, también puedes ver una visualización del menú, cuando
terminas alguna modificación debes de darle a "Compilar Script" para que cuando
guardes el archivo los cambios tenga efecto. Nota: Compilar Script no guarda el
ejecutable solo modifica en memoria las modificaciones, si quieres guardar los
cambios para el programa debes seleccionar guardar en el menú Archivo.


Modificaré algunas cosas para que veas los resultados:



Después de modificar compilé el script y entonces ya se puede ver la
modificación, si le diera a guardar entonces se modificaría el ejecutable pero
mientras no lo haga todos los cambios se hacen en memoria.


Ahora a modificar un cuadro de dialogo:


Primero seleccionamos "Dialog" lo abrimos hasta llegar al símbolo de
engranaje y veremos algo así:



Explicaré algunas cosas del script...



  • DIALOG es la descripción del tamaño de la ventana

  • CONTROL es la orden principal del cuadro.

  • CAPTION no se mira muy bien pero ese es titulo de la ventana

  • STYLE ahí se define el estilo de la ventana

  • FONT es el tamaño de letra y la fuente (tamaño [8], fuente ["MS Sans Serif"])

  • EDIT significa que es una zona editable


  • STATIC significa que es un texto fijo


  • BUTTON indica que se trata de un botón


  • Lo demás son ordenes a las APIs sin importancia para nuestro fin


Después de editar para traducir quedaría así:



Ahora, ResHacker permite la edición de las ventanas visualmente y además
permite agregar nuevos elementos.... para hacerlo debes de dar clic derecho
sobre la ventana y luego seleccionar "Insertar Control", luego aparecerá una
ventana donde podemos elegir el tipo de elemento que queremos agregar.



Un ejemplo, aquí le agregare a el "About..." el traductor y unos controles
mas solo para probar:






Usando eXeScope


Porque usar eXeScope si tengo Reshacker? bien la respuesta
es muy simple, los resource que no aparecen en el Reshacker pueden aparecer en
el eXeScope, claro no es siempre el caso y además eXeScope es de paga y en
cambio Reshacker es "GRATIS"(Gracias Angus).


Los cambios en la edición son mínimos creo que con solo ver las imágenes
entenderás:





Casos especiales



Edición Hexadesimal


Sino logramos nada con el Reshacker ni con el eXeScope aun podemos traducir
el programa con editor Hexadesimal, yo usaré WinHex.


Porque WinHex? tengo otros editores hexadesimales pero este es el mas me ha
gustado porque tiene muchas opciones y además me permite alargar los bites de un
archivo, algo muy útil en la traducción de programas.


Con la edición Hex no solo podremos editar menús y diálogos sino otras cosas
que no encontramos en el resource ósea que es posible traducir todos los
caracteres, siempre que el ejecutable no este comprimido claro.


Bien iniciemos, este es el programa:




Las palabras estan en la columna de código ASCII pero están separadas por
"."(puntos) ósea que si buscamos la palabra "About" tendremos que buscar así "A.b.o.u.t",
el problema es que los puntos tienen un valor hexadesimal de "2E" y en WinHex
los puntos son "00" entonces si buscamos con A.b.o.u.t no nos mostrara resultado
porque estará buscando "412E622E6F2E752E74"
cosa que no encontrara, la manera correcta es la siguiente "410062006F00750074"
espero haberme explicado y sino no importa porque en la practica será mas fácil.


Tabla de valores Hex ASCII:

Con esa tabla podemos formar palabras en hexadesimal y así será mas fácil
buscar las palabras para traducir, como ejemplo si queremos buscar la palabra "file"
damos en la opción "Búsqueda" luego en "Encontrar valor Hexa..." luego
escribimos "66696C65",
si ven la tabla verán las concordancias pero claro esta como ya he explicado
antes si buscamos una frase para traducir debemos de escribir un punto entre
cada letra ósea que si busco la palabra "file" para traducir debo de poner en
hexadesimal "660069006C0065", notaran los ceros entra cada valor hex, eso
buscará en el ASCII "f.i.l.e", ahora traduciremos el programa del ejemplo
anterior pero en hexadesimal, primero abrimos el programa y miramos las palabras
que queremos traducir, por ejemplo la palabra "Project", una cosa más, el hex es
"case sensitive", no es lo mismo buscar project a buscar Project,
ahora en hex esa palabra va así "500072006F006A006500630074" si lo busco en hexa
me aparecerá



Pero debemos tener cuidado en algunas cosas, en el ASCII también hay algunas
palabras que son comandos y si las modificamos corromperemos el archivo, para
estar seguro que lo que estas modificando es una palabra del programa debes de
ver las demás palabra cercanas porque esas palabras deben de ser parte del menú
o del cuadro de dialogo, en la foto de arriba ves la palabra "Project" pero
tambien ves otras palabras que son parte del menú porque todos los valores
hexadesimales del menú están juntos, ahora modificare algunos.


La traduccion de "project" es "proyecto" pero proyecto tiene una letra mas
que "project", por eso me gusta WinHex, con el puedes añadir ceros al ejecutable
solo das un clic derecho despues de la ultima letra y luego eliges editar para
que cambie el menú contextual y seleccionas "Pegar Bytes Cero" y como solo vamos
a agregar una letra mas le ponemos 2 uno para el 00 o punto y el otro para la
letra:



Me quedo así:



Como puedes ver tiene mas bytes que la imagen anterior, lo guardas y listo
esas palabra aparecen cambiadas en el programa, aconsejo hacer una copia del
ejecutable antes de editar por si modificamos algo que no debíamos y arruinamos
el ejecutable.


Edición en archivos externos


Algunos archivos no necesitan ninguno de los casos anteriores porque vienen
con un archivo de texto plano el cual podemos modificar sin problemas pondré
como ejemplo el Gigaget, en la carpeta de Gigaget hay una carpeta con el nombre
"Languages" y un archivo con el nombre de "eng.ini", nosotros podemos modificar
ese archivo y el programa recure a ese archivo para su lenguaje, por ejemplo:


[MainMenu]

miFile=&FileFile

miNewTask=Add New &URL...New Download

miNewBatchTask=Add &Batch URLsAdd Batch Downloads

miExportTDList=&Export List of Selected Downloads...Export URL's List

miImportTDList=&Import Download List...Import URL's List

miImportFile=Import Broken Download...Import an unfinished or broken download
with .cfg file type

miDefaultProperty=Default Download PropertiesDefault download Properties

miExit=E&xitExit



Lo único que debemos modificar son las palabras que están después del igual y
como siempre el símbolo "&" significa que esa letra aparecerá subrayada lo que
va después del símbolo "" es lo que aparece en la barra de status, claro que no
será el mismo caso para todos los programas de este tipo, pueden variar pero
normalmente es fácil de entender que es lo que se puede o no editar, la manera
correcta para traducir este ejemplo quedaría así:


[MainMenu]

miFile=&ArchivoArchivo

miNewTask=Añadir nueva &URL...Nueva Descarga

miNewBatchTask=Añadir &Batch URLsAñadir lista de URLs

miExportTDList=&Exportar Lista de Descargas Seleccionadas...Exportar lista
de URLs

miImportTDList=&Importar lista de descargas...Importar lista de URL's

miImportFile=Importar descargas rotas...Importar una descarga sin terminar o
rota con tipo de archivo .cfg

miDefaultProperty=Propiedades de descarga predeterminadas Propiedades de
descarga predeterminadas

miExit=&SalirCerrar el programa



Bueno creo que eso es suficiente, no es necesario que las traducciones queden
igual puedes añadirle algo de humor o tus propias interpretaciones para que sea
mas fácil de entender, espero y me haya hecho entender.

No hay comentarios.: