Traducciones en Foundry VTT para Dummies (como yo)

Bueno, tercera entrada en menos de 24 horas. Estoy que me salgo. No, la verdad es que tengo varias pendientes (esta la tenía a medio hacer) y como el resto de la semana no me va a apetecer escribir (salvo que salga algo que me emocione especialmente), dejo esta lista y me desentiendo.

Como había dicho en esta entrada anterior, quería hacer una sobre las vicisitudes de un no-iniciado que intenta traducir un ruleset para Foundry VTT. Vamos a hacer unas pruebas con el de Dune.

Abrimos el mundo, creamos un PJ de prueba, una Casa de Prueba y obtendremos algo como esto.

Puedes pensar: “Eh, arriba hay un botoncito de traducir, le doy y ya”. No. Nice try. No funciona así, sorry (o yo he conseguido que funcione así). Te saldrá algo como esto. Nuestro gozo en un pozo.

Lo primero que se puede hacer es traducir los compendios. En el caso de Dune sólo hay uno, el de Talentos y no los trae todos, eso es algo que hay que solucionar añadiendo cosas y creando uno nuevo, pero ahora estamos viendo como traducirlos. Lo primero que necesitas, no lo he dicho antes, es tener instalado el módulo “Babele” y en los ajustes básicos del programa tener seleccionado “Preferencia de Idioma: Español”. Vale, sigamos, vamos al compendio, que está a la izquierda en la imagen. ¿Ves que arriba pone “Traducciones”? Pues pulsa ahí.

Tampoco te lo va a traducir, te va a aparecer una ventana para que exportes el compendio. Dale a exportar sin miedo, como si supieras lo que estás haciendo. Te exportará un fichero comprimido (en este caso llamado “dune.talents.zip, pero obviamente, el nombre cambiará según lo que exportes). Lo guardas, después lo descomprimes y verás que dentro tiene un archivo con extensión json (dune.talents.json). Cuya estructura interior es algo así.

Vas a ver que cada talento tiene, en este caso, dos campos, uno con el “id” (ese no debes tocarlo, porque es el que usa el ruleset para sus cosas internas) y otro con el “name”, que es el que puedes traducir para que te salga en español en el Foundry. He marcado con la flecha verde uno que he traducido y con la flecha roja uno que no. Lo ideal es que los traduzcas todos, aunque yo aquí no lo haya hecho para poder mostrar pantallazos. En otros rulesets puedes encontrar que cada objeto (cada talento, en este caso) tiene más campos, como descripciones y esas cosas. Esas puedes traducirlas también, pero si sale alguna fórmula intenta no tocarla para no fastidiar cálculos internos. O también puedes encontrar que las descripciones de los contenidos de los compendios (la descripción de cada uno de los talentos, en este caso), está en un archivo .db y tendrías que traducirlo ahí, pero por ahora vamos con esto.

Ahora haz un acto de fe y hazme caso. Dentro del Foundry (o si quieres en otro sitio, pero recuerda cual es) crea una carpeta que se llame “Traducciones” o algo parecido que te sea fácil de recordar, y dentro de esa crea otra que se llame “es”, “español” o similar. Dentro de esta carpeta vas a guardar el archivo .json que has modificado.

Después vas a decirle a Foundry que las traducciones del compendio están guardadas ahí, de modo que es importante que, como dije antes, las carpetas tengan nombres claramente identificativos. Y también es importante que estén en una carpeta dentro de otra carpeta. Foundry hace la búsqueda así, y he comprobado que si meto el archivo directamente en “Traducciones” es posible que de fallo, de modo que he aprendido a jugar sobre seguro y es lo que te transmito en mi dummiedad. Eso se lo vas a decir a Foundry en los Ajustes de módulos, en el de Babele.

Y te quedará algo así después de seleccionar “Traducciones”.

Listo, ya puedes darle a F5 para refrescar Foundry y abrir los compendios de nuevo.

Yo he dejado marcada la opción de “Mostrar nombre original” para que se viera en la captura, pero no es necesario. Como ves, las que he traducido en el json ya aparecen así (flecha negra), y las que no traduje aparecen todavía como en el original.

Guay, cojonudo, pero como decía el Sr. Lobo.

NO EMPECEMOS A CHUPARNOS LAS POLLAS TODAVIA. Señor Lobo, en Pulp Fiction |  Shopin

Que todavía nos queda lo gordo.

Dentro de la carpeta Foundry vas a encontrar lo siguiente. En este caso porque es el de Dune, pero dentro de cada sistema tendrás algo parecido. El “es.json” no viene y lo vas a crear tú, sólo tendrás, por ahora, el “en.json”.

Abres el en.json y lo guardas YA, pero YA, hazme caso, joder, YA, como es.json. Al guardarlo en el mismo momento con otro nombre te ahorras cualquier problema que te pueda sugir de haber toqueteado en el original. Por ahora guárdalo fuera de la carpeta “lang”. Luego tendrás que meter una copia dentro, pero por ahora es más seguro tenerla fuera, y también te convendrá en el futuro tener una copia fuera de la carpeta del ruleset, después veremos porqué.

Al abrir el json que has guardado (recuerda, es.json) te saldrá algo como esto. Es una especie de diccionario del que Foundry va a leer para traducir.

Aquí es donde te puedes poner a meter mano a lo loco con tus conocimientos de idioma, pero ojo, no seas literal, que no siempre las cosas son lo que parecen, te lo enseño con unas capturas.

En azul tengo señalado algo traducido, en rojo algo no traducido, y en recuadro amarillo algo traducido, pero mal traducido. ¿Porqué mal traducido? puedes pensar, si incluso wordreference lo traduce así. Ya, pero es que entonces tendrás como resultado esto.

Y no, no hace referencia “Conducir”, sino a “Motivación”, de modo que después de traducir haz revisiones.

Bueno, ahora supongamos que ya has traducido todo ese “diccionario”. Ahora tienes que decirle al ruleset (el de Dune en este caso, como leerlo).

En cada sistema de juego vas a encontrar un archivo llamado system.json (todos son Jason, es muy Halloween. Sí, lo sé, un chiste muy malo, pero si no lo soltaba me carcomía).

Cuando lo abras vas a encontrar una parte como esta.

Y tú vas a tener que escribir cosas para convertirla en esta otra.

Con esas líneas extra (ojo a los paréntesis, llaves y comas) vas a decirle al ruleset que, si tu Foundry está en español, utilice el diccionario que tiene los términos traducidos al español. Guardas los cambios y te despreocupas.

Y acto seguido copias (no muevas, copia) el archivo es.json a la misma carpeta en la que está el archivo en.json. ¿Porqué lo copias? Porque si, por casualidad, despiste y/o error actualizas el ruleset antes de terminar todo, la actualización borrará el archivo es.json y como no guardaste copia te tocará volver a empezar. Haciéndolo como yo te digo siempre tendrás un archivo de respaldo.

Ahora das F5 en el Foundry, refrescas y al abrir un PJ ya irás viendo cambios.

Ya podemos ver unas cuantas cosas traducidas en la ficha y en ventanas adicionales, del mismo modo que los talentos que arrastramos, si son de los que hemos traducido ya se ven con el nombre en español. Pero también vemos (rodeadas en rojo) partes que no han “aceptado la traducción”. Esto puede ser, principalmente por tres motivos.

1er motivo: Necesitas “hacer plano” el documento de diccionario.

No sé como se llama eso técnicamente, pero te lo voy a explicar. Usaré el json del ruleset de Achtung!Cthulhu, porque ahí sí que he tenido que hacerlo, y se entiende perfectamente, mucho mejor que en el de Dune (en donde el motivo no es ese). Lo explicaré en modo dummie, que me perdonen los informáticos por los pecados que voy a cometer.

¿Ves eso? un “objeto principal” (AC2D20.RANGE”), cosas después entre una llave inicio y una final. Esas cosas son propiedades posibles del objeto principal, en este caso son posibles alcances, es decir son posibles propiedades de RANGE, que a su vez es una propiedad de AC2D20.

Vale, pues eso es lo mismo que esto (lo único que ya traduje las cosas). ¿Ves la transformación? Cada propiedad se puede poner en una línea con toda la información añadiéndola después de un punto (.), y siempre teniendo en cuenta que lo que haya en el diccionario antes de los dos puntos debe estar incluido entre comillas.

La primera opción, la de las llaves, puede dar problemas de lectura del diccionario, la segunda no. ¿Porqué? Yo que sé, lo hizo un mago, como en Xena. El es.json de Achtung!Cthulhu he tenido que ponerlo todo “en plano” y en el de Dune no hay hecho falta. Pero si traduciendo un ruleset ves que no te coge algunas traducciones prueba a “poner en plano” una parte a ver si así te las acepta. Con esto ya solucionarás muchos problemas si el ruleset está hecho pensando en que pueda ser traducido.

2o motivo: Esas partes de la ficha no leen del diccionario.

Es decir, que tienen la palabra escrita tal cual, directamente, en lugar de poner el enlace al diccionario. Para comprobarlo tienes que ir a los archivos html de las fichas.

Vamos a ver la character-sheet.html a ver que ha pasado.

A no ser que quieras meterte a modificar el aspecto de la ficha, lo que te importa de verdad son las partes como estas que marco en verde, la de {{localize “Dune.xxxx”}}

¿Porqué? ¿Qué hace eso? Pues eso le dice que encuentre (localize) dentro del json del lenguaje (ese es.json que hiciste), el objeto DUNE y la clase xxx (siendo xxx la palabra en concreto a buscar en el diccionario).

Lo vemos en la captura de abajo. El objeto “DUNE” comienza al inicio de es.json, abre unas llaves y todo lo que hay entre ellas (que en este caso llega al final de documento) son propiedades a buscar. Y la instrucción {{localize “DUNE.Drive”}} le indica al programa que dentro de DUNE (flecha verde donde inicia) encuentre Drive (flecha azul) y devuelva ese “valor de diccionario”, en este caso “Motivación”.

Vale, como está con esa instrucción, nos lo traduce perfectamente, y en casi todo el html está todo con “localize”, de modo que el problema no está ahí. La cuestión es que, muchas veces, dentro de unos html se hace llamadas a otros (para organizar partes de la ficha, principalmente), por lo que tenemos que revisar todos los html hasta que demos con los fallos.

Voy a poner, de nuevo, el ejemplo de la ficha de Acthung!Cthulhu, donde eso pasa a menudo, y se ve con claridad, antes de ver el archivo de DUNE.

¿Lo ves? En verde está el “localize”, que permite la traducción automáticamente cuando se carga la ficha, y rodeado de rojo está escrita directamente la palabra. En el caso de estar escrita directamente da igual que la hayas traducido en el es.json, no la va a traducir, tendrías que cambiarla por el “localize” correspondiente para que lo hiciera.

Y aquí en los html de DUNE.

Algo de lo que me había olvidado: ve anotando todos los archivos en los que hagas cambios.

Con todo revisado obtenemos este resultado:

Donde, como vemos, lo tenemos traducido casi todo. Las motivaciones y habilidades que no están traducidas en la hoja, sí aparecen traducidas en el lanzador de dados que es donde tenemos que escoger que utilizamos para la tirada.

No he obtenido, por mi mismo, un resultado perfecto, pero sí que he dejado una traducción bastante decentilla, y si me interesase mucho la traducción completa y perfecta de este ruleset (que no es el caso, en el de Achtung!Cthulhu es distinto porque pienso hacer campaña) contactaría con alguien que supiese de javascript para ver si encontraba el porqué no se traducía eso.

¿Cómo hacer ahora para que no tener que, en el futuro, si hay actualizaciones, volver a mover el archivo es.json al ruleset y volver a modificar el system.json? Le enviamos, si queremos, al autor del ruleset, los archivos que hemos modificado para que acepten el “diccionario”, el archivo es.json, y le comentamos cuales son las partes que no se traducen (en caso de que, ni con ayuda de un sabio de javascript consiguiésemos averiguarlo). En la ficha, sospecho que lee las propiedades de alguna forma concreta que no he descubierto, pero seguro que el autor sí lo sabe y, si le apetece que su ruleset esté traducido a otros idiomas, añadirá a su distribución tus archivos y mirará de corregir eso que hace que no lea bien del es.json, y le quedará solucionado para futuras traducciones que se hagan en otros idiomas.

Y fin de este (bienintencionado, aunque no completo) tutorial para dummies.

Una futura asociación de editoriales roleras

 

Justo encima de estas líneas está el vídeo de youtube correspondiente a la charla de Edición de Juegos de Rol en España que se celebró al amparo de las Netcon. En los primeros minutos de la charla se habla sobre el proyecto (naciente) de una asociación de editoriales roleras, lo cual me parece no sólo encomiable sino también, dado el estado actual de la afición, algo útil.

Este es el claro ejemplo de que, si al final se lleva a cabo, la unión hace la fuerza.

Y hasta ahí llegaba lo que tenía escrito de la entrada cuando la comencé el martes por la tarde. La dejé a medio escribir (hoy al abrir el ordenador es lo primero que ha aparecido) y salí a la calle. Tuve un accidente (no de gravedad) que me machacó el pecho (lo tengo de colores entre morado y amarillo según la zona), me fisuró una costilla (de esas mierdas que sólo te duelen cuando respiras) y, como por si acaso me hicieron una revisión, me descubrieron un tromboembolismo pulmonar. Es decir, el accidente me ha salvado la vida porque el trombo ya tiene un cierto tamaño y de haber ido a más… pues chungo. ¿Y cómo es que hoy jueves por la tarde ya estoy escribiendo esto en mi casa?, pues porque como gasto parte de mi sueldo en un seguro privado en lugar de en toneladas de rol y otros vicios (que oye, cada uno se gasta el dinero en lo que le sale de los cojones), en estas 40 horas me han hecho dos analisis de sangre, tres electrocardiogramas, un TAC general, un angiotac torácico, un ecocardiograma y una ecografía doppler venoso de miembros inferiores. Algo que en la seguridad social (que en España es genial, que nadie venga a decir que afirmo lo contrario, que me conozco a los ofendiditos) me hubiese mantenido en el hospital durante varios días más. Ahora pertenezco al club del sintrom al menos durante unos meses. 

¿Y porqué os cuento toda esta mierda? Porque haberme salvado, de causalidad, de un mal futuro, me ha hecho subir de nivel en sudapollismo: ahora lo tengo a nivel 20 si lo miramos con sistema d20, o con nivel d12+2 si lo miramos en Savage Worlds. De modo que voy a continuar la entrada con ese nuevo espíritu:

Es cierto que la unión hace la fuerza y que, como dicen los propios participantes en el vídeo, les valdrá para darse apoyo unos a otros, solucionarse dudas, conseguir indicaciones de donde pueden conseguir una determinada cosa o buscar imprentas que les hagan trabajos de cierta manera…

Todo guay, cojonudo, es innegable. Pero hay algo que ninguno ha mencionado en las ventajas, y que yo esperaba escuchar: BUSCAR TRADUCTORES. Lo voy a repetir en centrado, con más espaciado y en negrita:  

B U S C A R  T R A D U C T O R E S.

Que oye, me parece genial que las editoriales que están comenzando tengan que mirar de ahorrarse unas perrillas para poder sacar el proyecto adelante, pero es que de un tiempo a esta parte las traducciones de los juegos han pasado de ser “mejorables” a ser “pasables” y después a ser “muy, muy, muy, muy, muy, muy,, pero que muy justitas”. Y eso siendo generoso. Aquí debo romper una lanza en favor de HT que hace unas buenas traducciones.

¿Qué una traducción mejor encarece el producto? Sí, ya, claro, pero es que igual la gente comienza a pensar que para tener una traducción “tu ya sabes” prefiere leerlo en inglés. Mísmamente hay un juego al que estoy jugando actualmente, que me lo he comprado en inglés (el básico y la expansión) porque he visto la traducción que tienen hecha de un juego ya publicado y… it’s going to be that not (¿veis la traducción cutre-literal que he hecho de “va a ser que no”?, pues ese es el nivel hacia el que se van dirigiendo las traducciones de rol). Y que me chirríen las traducciones a mí, que tengo un nivel medio-medio, es un indicativo de que la cosa va mal.

Y ya, que escribir acostado en cama es incómodo. Me voy a disfrutar de mis drogas legales.