@Sarmatz

Как перевести фразу?

Добрый день. Подскажите, пожалуйста, как можно сделать перевод фразы "Last hightscore: "? Перевод обычного текста у меня получилось сделать. Если тут делать так же, то очки уже не отображаются, просто слово "Рекорд" на разных языках (в зависимости от выбранного) без очков.
Вот код скрипта на рекорд:
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using UnityEngine.UI;

public class Record : MonoBehaviour
{
    public Text Records;
    private Text comp;
   
    void Start()
    {
        comp = GetComponent<Text>();
        comp.text = PlayerPrefs.GetInt("Record").ToString();
        Records.text = "Last hightscore: " + comp.text;
    }
}


Перевод обычного текста сделал двумя скриптами. Первый:
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using UnityEngine.UI;

public class Translator : MonoBehaviour
{
    private static int LaungageID;
    private static List<Transletable_text> listId = new List<Transletable_text>();

    #region ВЕСЬ ТЕКСТ [двухмерный массив]
    private static string[,] LineText =
    {
        #region АНГЛИЙСКИЙ
        {
        "Start", // 0 - Старт
        "Options", // 1 - Опции
        "Exit", // 2 - Выход
        "Last Hightscore", // 3 - Рекорд
        "Back", // 4 - Назад
        "Change language", // 5 - Выбор языка
        "Select a spaceship", // 6 - Выбор корабля
        "Restart", // 7 - Рестарт
        "Menu", // 8 - Меню
        "Score" // 9 - Счет
        },
        #endregion

        #region РУССКИЙ
        {
            "Старт",
            "Настройки",
            "Выход",
            "Прошлый рекорд",
            "Назад",
            "Выбор языка",
            "Выбор корабля",
            "Рестарт",
            "Меню",
            "Счет"
        },
        #endregion

        #region НЕМЕЦКИЙ
        {
            "Start", // 0 - Старт
            "Optionen", // 1 - Опции
            "Ausstieg", // 2 - Выход
            "Vergangene aufzeichnung", // 3 - Рекорд
            "Zurück", // 4 - Назад
            "Sprachauswahl", // 5 - Выбор языка
            "Raumschiff auswählen", // 6 - Выбор корабля
            "Neu starten", // 7 - Рестарт
            "Speisekarte", // 8 - Меню
            "Ergebnis" // 9 - Счет
        },
        #endregion
    };
    #endregion

    static public void Select_laungage(int id)
    {
        LaungageID = id;
        Update_texts();
    }

    static public string Get_text(int textKey)
    {
        return LineText[LaungageID, textKey];
    }

    static public void Add(Transletable_text idtext)
    {
        listId.Add(idtext);
    }

    static public void Delete(Transletable_text idtext)
    {
        listId.Remove(idtext);
    }

    static public void Update_texts()
    {
        for (int i = 0; i < listId.Count; i++)
        {
            listId[i].UIText.text = LineText[LaungageID, listId[i].textID];
        }
    }
}


Второй (вешается на текст в юнити):
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using UnityEngine.UI;

public class Transletable_text : MonoBehaviour
{
    public int textID;
    [HideInInspector] public Text UIText;

    private void Awake ()
    {
        UIText = GetComponent<Text>();
        Translator.Add(this);
    }

    private void OnEnable()
    {
        Translator.Update_texts();
    }

    private void OnDestroy()
    {
        Translator.Delete(this); 
    }
  
}
  • Вопрос задан
  • 94 просмотра
Пригласить эксперта
Ответы на вопрос 1
freeExec
@freeExec
Участник OpenStreetMap
Ещё 20 лет назад перевод делали так:
Records.text = _T("Last hightscore: ") + comp.text;

Либо в переводе используют в переводе строки для string.Format, чтобы в нужное место подставить динамические значения.
Ответ написан
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы