Comunidad Archiroleros

Bienvenido a la Comunidad Archiroleros de aficionados a Dungeons & Dragons. Registra una cuenta para disfrutar de todas las funciones del foro. Ahora mismo estamos de actualización y alguna de las antiguas partes de la comunidad estan en mantenimiento, durante el mes de Enero

¿Extensiones multidioma?

softbreakers

New member
Buenas,

Como comenté en el hilo de presentaciones me he embarcado en implementar un asistente para facilitar la la realización traducciones mediante extensiones para Fantasy Grounds.

Como no tengo mucho manejo todavía de FG me surgen algunas dudas de cara a seguir desarrollando el asistente, prefiero preguntar antes de meterme en cosas que Fantasy Grounds ya soporta, o que a lo mejor no tiene sentido hacer...

Si no he entendido mal el funcionamiento de la aplicación, el Director del Juego crea una campaña en la que entre otras cosas define el ruleset a utilizar así como las extensiones a cargar. Alguna de estas extensiones puede ser una traducción del ruleset, por ejemplo al español.

Los jugadores al conectarse al FG del Director, se descargarán todos los materiales que haya metido el Director en la campaña, entre ellas el ruleset y las extensiones que el Director haya decidido que se use. Esto implica que si una de las extensiones es una traducción al español del ruleset, a todos los jugadores le aparecerán los textos/imágenes del ruleset en español. ¿Tiene FG algún mecanismo para poder implementar una extensión que traduzca el ruleset a varios idiomas, de manera que cada FG cliente al conectarse use el idioma que tenga definido en su sistema operativo, o que pueda seleccionar el usuario?

Cada extensión (fichero .ext) lleva dentro un archivo maestro ("extension.xml") que define en qué archivos está lo que debe cargar. Si la extensión llevara dentro un archivo maestro para cada idioma (por ejemplo "extension_es.xml", "extension_fr.xml", "extension_de.xml", etc...), el paquete podría ser multilenguaje. ¿Soporta FG algo así, o se puede hacer de alguna manera?

Por supuesto que si un español, un inglés, un francés y un alemán se conectan para jugar al rol (suena a chiste), la comunicación de voz que realicen no podrá "traducirse", pero al menos los textos los tendrían cada uno en su idioma nativo...
 
Buenas! A ver, de entrada no estoy muy seguro de cuán útil es que cada jugador tenga los archivos en un idioma, la verdad... Pero bueno, puestos a... No, el FG lógicamente no tiene forma de darle a cada jugador los archivos en un idioma diferente, todo lo que no sea inglés, poco he visto. Lo que se me ocurre, aunque no estoy seguro de hasta que punto es viable, es añadir un cycler en, por ejemplo, la sección de opciones. Según la opción elegida, podría usar un archivo de strings diferente. Hay un mecanismo similar en el Multiruleset de W40k mediante el que eliges el juego (dark heresy, rogue trader, etc.). Al pulsar el cycler, se modifica la hoja de personajes así como varios de los cálculos y mecánicas. Viendo eso, sí, imagino que podría ser posible implementarlo para elegir el idioma de traducción.

Un saludo!
 
A ver, que he estado dándole unas vueltas mientras intentaba avanzar en el ruleset de EP. He buscado y me ha salido éste link en un post sobre el FG en alemán. Parece que sigue activo, así que te recomendaría escribirles por ahí a ver si podéis avanzar juntos más que hacer algo por separado.
 

softbreakers

New member
Himmelschrei dijo:
Buenas! A ver, de entrada no estoy muy seguro de cuán útil es que cada jugador tenga los archivos en un idioma, la verdad... Pero bueno, puestos a... No, el FG lógicamente no tiene forma de darle a cada jugador los archivos en un idioma diferente, todo lo que no sea inglés, poco he visto. Lo que se me ocurre, aunque no estoy seguro de hasta que punto es viable, es añadir un cycler en, por ejemplo, la sección de opciones. Según la opción elegida, podría usar un archivo de strings diferente. Hay un mecanismo similar en el Multiruleset de W40k mediante el que eliges el juego (dark heresy, rogue trader, etc.). Al pulsar el cycler, se modifica la hoja de personajes así como varios de los cálculos y mecánicas. Viendo eso, sí, imagino que podría ser posible implementarlo para elegir el idioma de traducción.

Un saludo!

La verdad es que no es que sea una funcionalidad que pueda ser de enorme utilidad ya que es imposible que puedan jugar un grupo de gente que no comparta un idioma común, porque por muchas cosas que automatice Fantasy Grounds la conexión por voz es necesaria. Y si todos pueden hablar y oír un mismo idioma, todos pueden entender los textos en ese idioma común.

La idea me ha venido más por como he hecho el asistente (en realidad está muy avanzado, otro tema es los errores que pueda tener). Es un programa en el que puedes crear proyectos, y en cada proyecto seleccionas un ruleset que quieras traducir, el idioma origen y el idioma objetivo. A partir de ahí, te lista los XML del ruleset en el que aparezcan cadenas o imágenes, y al pinchar en cada XML te lista las cadenas o imágenes que contiene permitiéndote introducir para cada una las líneas la cadena de traducción o la imagen traducida. Finalmente pulsas el botón de compilar la extensión y te genera el archivo .ext listo para ser usado en Fantasy Grounds. No tienes que meterte con un editor de textos en los XML, ni andar comprimiendo o descomprimiendo los .pak o los .ext. Además trae algunas herramientas de ayuda automatizada como importar otras traducciones para traducir automáticamente lo que pueda o incluso traducir cadenas usando Google Translator (aunque claro, es traducción "Google" que no es tan buena como la que hace un humano).

La cuestión es que la organización de cada proyecto, que al final es la traducción de un ruleset, lo pensé inicialmente para que soportara realizar la traducción a varios idiomas, por si algún "políglota" quiere traducir algún ruleset a dos o más idiomas, no solo a uno. Al crear el proyecto defines ruleset, idioma origen e idioma objetivo y posteriormente puedes añadir nuevos idiomas objetivo adicionales. La idea era que en cada proyecto, al compilar la extensión eliges cuál de los idiomas objetivo que has incluido quieres generar, y te genera una extensión con las traducciones que has metido para ese idioma objetivo.

Dando vueltas sobre eso al final me he dicho que por qué no dar la posibilidad de meter todos los idiomas objetivo en una misma extensión, y ver si existe alguna manera de que en cada uno de los Fantasy Grounds que se conectan al FG del Director se use el idioma que se desee de los que se han incluido en la extensión, extensión que todos se descargarán del FG del Director al conectarse a la campaña.

Lo de los cyclers que comentas del multiruleset de Warhammer (he tenido que buscar en Youtube un vídeo porque de uso de Fantasy Ground todavía no tengo ni idea, ni sabía lo que era un "cycler"...) parece factible, pero tendría que meterme en la entrañas de FG y scripts LUA a ver si eso es posible.

Ahora mismo estoy avanzando (y parece que tiene buena pinta) por otro camino totalmente distinto que es modificar el comportamiento de Fantasy Grounds a la hora de carga una extensión, inyectando código externo en el proceso de la aplicación (ya se que suena exótico y hasta peligroso  :biggrin:).

Himmelschrei dijo:
A ver, que he estado dándole unas vueltas mientras intentaba avanzar en el ruleset de EP. He buscado y me ha salido éste link en un post sobre el FG en alemán. Parece que sigue activo, así que te recomendaría escribirles por ahí a ver si podéis avanzar juntos más que hacer algo por separado.

Ya había visto el tema del LPak que comentan ahí. Básicamente lo que intentan es homogeneizar la manera en la que se generan las traducciones que se realicen y que todas las extensiones resultantes compartan una misma estructura, pero al final tienes que meterte con el bloc de notas u otro editor de textos en los XML, buscar donde hay cadenas e imágenes a traducir, y tener cuidado de poner cada imagen y archivo en su sitio.

Con el asistente que estoy haciendo no te puedes equivocar. Solo tienes que traducir y ya se encarga el programa de colocar todo en su sitio y generar un .ext correcto.

De hecho, del proyecto LPack me bajé la versión que tienen del CoreRPG en español para descubrir que no funciona con la versión actual de CoreRPG. Por eso mismo metí en el asistente la funcionalidad de importar otras traducciones. Usando el asistente creas un proyecto para traducir la versión actual de CoreRPG, importas esa traducción que es para una versión anterior de CoreRPG, y solo tienes que traducir las nuevas cadenas e imágenes que hayan podido meter en las versiones actuales de CoreRPG que no existían en la antigua.

Espero en breve poder poner una primera versión funcional para que los que sepan de Fantasy Ground puedan echarle un vistazo a ver si le ven utilidad...

Por cierto, sobre lo del ruleset de EP que estás haciendo ¿qué es EP?  :mda:
 
El tema del cycler ya te adelanto que complicación de uso tiene 0 (otra cosa es que el FG te lo acepte porque hay cosas que aunque se puedan programar, al FG lo dejan roto). En el ruleset que te he dicho de Warhammer las modificaciones que te hace a la hoja de personaje son poco más que comprobaciones de "está seleccionado Dark Heresy, ergo muestro x, y, z...". Lo que no sé es si se le puede indicar que, ante un mismo string pointer (que sería lo suyo en lugar de usar uno por idioma) te saque el string de un archivo u otro según el idioma indicado.
Ejemplo (que hoy llevo ya un par de explicaciones que me cuesta seguir hasta a mí  :lol:)

Asumo que quieres tener un strings.xml por idioma, de manera que cada uno que use el asistente pueda añadir diferentes idiomas de quererlo. (Realmente, tampoco es tontería que en un mismo grupo se usen diferentes idiomas: yo me he acostumbrado a jugar con las reglas en inglés, pero juego con algunos que sé que preferirían tenerlo en español, por ejemplo, así que si es posible, mejor.) Al caso...

No estoy seguro ahora de cómo lo tiene el de Warhammer, pero me suena que es en plan en el archivo de la hoja de personaje general algo tipo

<button_stringcycler name="system">
    <!-- por aquí el tema del posicionamiento del objeto -->
    <parameters>
            <labels>DH1|DH2|RT|blablabla</labels>
            <values>dh1|dh2|rt|blablabla</values>
    </parameters>
</button_stringcycler>


Y después en los scripts, por ejemplo

function updateDisplayMain()
    local nodeChar = getDatabaseNode();
    local sys = DB.getValue(nodeChar, "system", "");
    local DH1 = sys == "dh1";
    local DH2 = sys == "dh2";
    local RT = sys == "rt";
    blablablabla

    frame_que_solo_quieres_mostrar_en_dh1.setVisible(DH1);
    frame_que_solo_quieres_mostrar_en_RT.setVisible(RT);
    frame_que_muestras_en_RT_y_DH2.setVisible(RT or DH2);
end


Así simplemente se podría escoger de la misma forma un pointer para un objeto según el idioma seleccionado. En plan

    label_damage_español.setVisible(ESP);
    label_damage.setVisible(ENG);
    label_damage_deutsch(DEU);

Eso seguro que funcionaría, ahora, sería un coñazo porque tendría que modificarse el código de manera manual y lo bueno de tener el .xml de strings separado es que te permite hacer una traducción sin trastear con el código duro del ruleset. Otra opción que se me ocurre, por ejemplo, que según el idioma seleccionado añada "esp" por ejemplo a la llamada al string. En plan dejar el pointer incompleto y que lo complete el cycler según lo que tengas seleccionado (dejando default el inglés). La tercera y mejor opción (que parece que es también por donde tú vas) es sin duda señalar al archivo de strings con el idioma deseado "ocultándole" de alguna forma al programa los otros dejando para todos el mismo pointer (en el ejemplo de arriba, simplemente "label_damage" sin más).

Pongamos que tenemos strings.xml (inglés, los originales), stringsesp.xml (español), stringsdeu.xml (alemán)Sería algo tipo (usando el código que te he puesto arriba de W40k)

function updateDisplayMain()
  local nodeChar = getDatabaseNode();
  local Lang = DB.getValue(nodeChar, "language", "");

  if Lang == ESP then
      y aquí una función para llamar al archivo stringsesp.xml
  elseif Lang == DEU then
      blbalbalbalba
  end
end


Yo estoy aprendiendo lua conforme algo esto y mis conocimientos son aún bastante rudimentarios, la verdad. Más que costarme el lenguaje como tal, me da más problemas la arquitectura del FG. Ahora mismo estoy atascado con la automatización de las skills y me va a tocar ponerme a leer la documentación o hacerme el seppuku, una de dos...  :read:  Espero de verdad que cuando saquen el ya legendario FGU faciliten / aclaren el rollete un poco y simplifiquen esto, porque es un coñazo... Aumentaría muchísimo la cantidad de material que generaría la comunidad.


P.D.: EP es Eclipse Phase, un juego de ciencia ficción, transhumanismo, resleeve en cuerpos tipo carbono alterado, ghost in the shell, etc. Vamos, cremita de la buena :D
 

softbreakers

New member
Pues mi gozo en un pozo. Resulta que cuando los Fantasy Grounds clientes se conectan al del master, a la hora de descargarse los materiales de la campaña, entre los que se incluiría esa hipotética extensión multidioma, los guardan en un archivo "campaign.dat", que NO es un comprimido ZIP con la extensión renombrada, por lo que inicialmente no puedo abrirlo, renombrar el "extension_es.xml" (o del idioma que sea) a "extension.xml" para que cada cliente cargue el fichero maestro de la extensión que corresponda a su idioma. Tendría que remangarme y meterme hasta el fondo en las tripas de Fantasy Ground para ver qué se descarga, como se construye ese "campaign.dat", etc... y la verdad que es mucha faena para una funcionalidad que tampoco va a cambiar el mundo...

Así que me olvido por el momento de eso y sacaré una primera versión para construir extensiones, cada una en un solo idioma...

Ya he hecho una web simplona por si alguien tiene curiosidad. A ver si este fin le doy un último repaso y subo el instalable.
 
Vale, entonces te había entendido mal. Querías dejar TODO el código (con la excepción de la modificación en el archivo de strings de traducción, por supuesto) intacto y que se renombrasen dichos archivos para cambiar entonces el idioma. Sep, eso es no no. Me temo que vas a tener que hacer una extensión que sobreescriba el redireccionamiento al strings.xml como te puse antes, que es lo que pensaba que tenías pensado. Así que, toca aprender cómo va el FG. Ánimo!  :victory:

Svargth dijo:
.D.: EP es Eclipse Phase, un juego de ciencia ficción, transhumanismo, resleeve en cuerpos tipo carbono alterado, ghost in the shell, etc. Vamos, cremita de la buena :D

https://es.gizmodo.com/en-2045-os-hare-a-todos-inmortales-el-asombroso-plan-1819179677

Ya ha gente investigando para que deje de ser ciencia ficción

Cierto, lo vi hace ya un tiempo. Dios dirá que sale de todo eso. Yo por mi parte, ojalá llegue a verlo :D
 
Arriba