Jump to content

Recommended Posts

Hola buenas, estoy realizando un pequeño proyecto y se me ha ocurrido gran idea (notese lla ironía) de dar la opción al usuario de elegir entre castellano e inglés.

Mi problema viene con que soy incapaz de encontrar una manera eficiente de hacer esto, mi primera idea consistía en cambiar todos los textos en función de una variable idioma directamente desde el código, algo así:

if (idioma == 0){
    titulo = "title";
}else if (idioma == 1){
    titulo = "titulo";
}

Pero al ver  lo largo y tedioso de este proceso desistí y me enfrasqué en la búsqueda de un sistema más practico. He llegado a la conclusión de que la mejor opción es crear un archivo .json compuesto por una lista compuesta por otras sub listas, cada una de las cuales sería un idioma, pero no estoy seguro de si esto es posible, pues no tengo unos conocimientos especialmente avanzados en este ámbito y me esta dando verdaderos dolores de cabeza. Mi codigo actual es algo así:

Lista de idiomas:

{
    "Lenguage":[
        [
            "title",
            "New Game",
            "Continue",
            "Options",
            "Exit",
            "Volume",
            "Lenguage",
            "Controller",
            "Keyboard",
            "Graphics",
            "Done",
            "Pause",
            "Achievements",
            "Exit to main menu",
            "Pres Esc to continue"],
        [
            "Titulo",
            "Nueva partida",
            "Continuar",
            "Opciones",
            "Salir",
            "Volumen",
            "Idioma",
            "Mando",
            "Teclado",
            "Graficos",
            "Hecho",
            "Pausa",
            "Logros",
            "Menu principal",
            "Pulsa Esc para continuar"]
    ]
}

Código:

using System.Collections.Generic;
using UnityEngine;
using UnityEngine.UI;
using System.IO;

public class lenguages : MonoBehaviour {

    public int IntLenguage;
    public Dropdown DropLenguage;

    public Text Title;
    public Text NewGame;
    public Text Continue;
    public Text Options;
    public Text Options1;
    public Text Exit;
    public Text Volume;
    public Text Lenguage;
    public Text Controller;
    public Text Keyboard;
    public Text Graphics;
    public Text Graphics1;
    public Text Done;
    public Text Done1;

    string filePath;
    string jsonString;

    void Start () {
        filePath = Application.dataPath + "/Data/Options.json";
        jsonString = File.ReadAllText (filePath);
        options info = JsonUtility.FromJson<options> (jsonString);
        IntLenguage = info.lenguage;
        DropLenguage.value = IntLenguage;

        filePath = Application.dataPath + "/Data/Lenguage.json";
        jsonString = File.ReadAllText (filePath);
        ListaLenguages lista = JsonUtility.FromJson<ListaLenguages> (jsonString);
        Title.text = lista [IntLenguage [0]];
    }
}

//He hecho esto en base a un tutorial el cual no explicaba esto concretamente y por ello hay cosas como estas que no estoy seguro de como modificar para listas

[System.Serializable]
public class Lenguage1{
    public string title;
    public string NewGame;
    public string Continue;
    public string Options;
    public string Exit;
    public string Volume;
    public string Lenguage;
    public string Controller;
    public string Keyboard;
    public string Graphics;
    public string Done;
    public string Pause;
    public string Achievements;
    public string ExitToMainMenu;
    public string PresEsc;
}

[System.Serializable]
public class ListaLenguages{
    public List<Lenguage1> Lenguage;
}

Pues este es mi problema, agradecería tanto una ayuda con este código en concreto como una forma mejor de hacerlo, gracias a todos y espero con ansia cualquier respuesta.

Pdt.: Lamento cualquier falta ortográfica.

Edited by romadritex
Por favor, usa el <> o el "quote" para pegar código.

Share this post


Link to post
Share on other sites

Ironía, no sarcasmo. Son cosas distintas...

La mejor adecuada de hacer lo que buscas es usando Dictionaries<key,idioma>, para poder aplicar cualquier idioma dónde convenga...

Share this post


Link to post
Share on other sites
hace 1 hora, pioj said:

Ironía, no sarcasmo. Son cosas distintas...

La mejor adecuada de hacer lo que buscas es usando Dictionaries<key,idioma>, para poder aplicar cualquier idioma dónde convenga...

Gracias, haré los cambios pertinentes.

:4_joy::4_joy::4_joy:

Share this post


Link to post
Share on other sites

Antes de que te líes mira un  asset que se llama I18N, lo puedes encontrar en la store y te deja localizar textos, imágenes, sonidos y algunas cosas más. Funciona muy bien y el manejo de textos es muy cómodo porque lo llevas en una hoja Excel y lo exportas a CSV y lo metes en el proyecto y no hay que hacer más. Encima es gratis. Yo lo he usado en un montón de proyectos multidioma y funciona de lujo. Te lo recomiendo.

Share this post


Link to post
Share on other sites
hace 4 horas, FNP said:

Antes de que te líes mira un  asset que se llama I18N, lo puedes encontrar en la store y te deja localizar textos, imágenes, sonidos y algunas cosas más. Funciona muy bien y el manejo de textos es muy cómodo porque lo llevas en una hoja Excel y lo exportas a CSV y lo metes en el proyecto y no hay que hacer más. Encima es gratis. Yo lo he usado en un montón de proyectos multidioma y funciona de lujo. Te lo recomiendo.

Muchísimas gracias, lo miraré sin falta

Share this post


Link to post
Share on other sites

Además puedes asignar varias fuentes, por si la App va en ruso, chino, arabe, hebreo, etc. y necesitas varios alfabetos.

 

Share this post


Link to post
Share on other sites

UnitySpain © Todos los derechos reservados 2020
×
×
  • Create New...