Проста система перекладів в Unity

В нашому розділі блогу ми будемо викладати статті на деякі теми, котрі можуть бути корисними для починаючих розробників ігор. 

В цій статті ми розглянемо як в редакторі Unity відносно швидко зробити систему перекладу тексту.

По перше, нам потрібно інсталювати в Unity доповнення Localization. Для цього в запущеному редакторі переходимо в верхньому меню Windows - Package Manager. В менеджері в першому меню зверху треба обрати замість In Project пункт Unity Registryта в вікні пошука достатьно вбити Local як потрібне доповнення з'явиться. Його ми і інсталюємо.

Далі, нам потрібно налаштувати наш проєкт і додати до нього теки з перекладами. Для цього переходимо в Edit - Project Settings. Тут в списку зліва ми побачимо пункт Localization.

Через те, що в нас не буде ще ніяких налаштувань, тицяємо на Create і створюємо теку в Assets нашого проекту, на приклад - LocalSettings. Після цього, в томуж вікни ми додамо мови, котрі нам будуть потрібні в нашому проекті. Для цього клікаємо на Locale Generator та відмічаємо мови котрі нам потрібні. 

Після  цого тицяємо на Generate Locales. Нам запропонується створити теку для наших перекладів. Створюємо в середині нашого LocalSettings теку Locales.

Тепер, коли в нас є заготовка наших мов, треба відразу обрати мову, котра буде в нас стояти за замовченням. Для цього в розділі Specific Locale Selector, в Locale ID тицяємо на круглу іконку та в вспливаючому вікни обираємо мову, котру бажаємо виставити за замовченням. 

Також виставимо основну мову в пункті Project Locale Identifier. Можна зачиняти це вікно і переходити до створення таблиці перекладів.

Йдемо в Window - Asset Manager - Localization Tables. В нас відкриється вікно таблці перекладів, де в нас ще нічого немає. Тицяємо на кнопці New Table Collection. Через те, що в нас поки що простий варіант додавання перекладів, ми будемо змінювати переклад лише для тексту, тож нижче, в пункті Type треба виставити параметр String Talbe Collection. Нижче додаємо ім'я нашої таблиці та тиснемо на Create. Нам буде запропановоно створити для цього теку, можна її створити в нашій LocalSettings.

Тепер в нас буде створена таблиця, де ми можемо додавати ключ для перекладу строки та текст перекладу.

Також, треба тицнути на кнопці зверху строки перекладу та переконатися, що в нас стоїть відмітка в пункті Preload All Tables 

Далі, ми можемо додати будь який текстовий об'єкт в сцену, прибираємо будь який текст в ньому. Додаємо компонент Localize String Event. В пункті String Reference тицяємо та у вспливаючемо вікні обираємо ключ перекладу, котрий нам потрібен. 

Трохи нижче, в Update String (String) тицяємо на плюсику, зліва, там де в нас None (Object), перетягуємо наш TextMeshPro, а справа, там де No Function, обираємо TextMeshProUGUI - text. 

На цьому етапі, ми вже можемо спробувати запустити нашу гру, та побачити, що при перемиканні мови, в верхньому правому куту сцени, в нас зміниться переклад нашого текстового елементу.

Тепер зробимо перемикання мови при натисканні на певні кнопки в сцені, на приклад в попапі налаштувань, кнопки зміни мови.

Створимо скрипт, та назвемо його, на приклад, LocaleSelector, з наступним кодом:

using System.Collections;
using System.Collections.Generic;
using UnityEngine;

using UnityEngine.Localization.Settings;

public class LocaleSelector : MonoBehaviour
{
    private void Start()
    {
        int ID = PlayerPrefs.GetInt("LocaleKey", 0);
        ChangeLocale(ID);
    }

    private bool active = false;

    public void ChangeLocale(int localeID)
    {
        if (active == true)
            return;
        StartCoroutine(SetLocale(localeID));
    }

    private IEnumerator SetLocale(int _localeID)
    {
        active = true;
        yield return LocalizationSettings.InitializationOperation;
        LocalizationSettings.SelectedLocale = LocalizationSettings.AvailableLocales.Locales[_localeID];
        PlayerPrefs.SetInt("LocaleKey", _localeID);
        active = false;
    }
}

Тепер, в нашій ієрархії сцени створемо порожній об'єкт та назвемо LocalizationManager та перетягнемо у вікно інспектора менеджера наш скрипт.

Після цього переходимо до кнопки (елемент button), котрий буде відповідальним за вмикання певного перекладу. Обираємо кнопку, та додаємо обробник On Click () в Inspector.

Перетягуємо наш створений LocalizationManager до поля об'єкта, а в функції обираємо LocaleSelector - ChangeLocale(int) 

Нижче нашого LocaleSelector є інпут для ввода айді мови, на котру буде перемикати ця кнопка. Якщо, для прикладу, ви додали дві мови - Англійську та Українську, та виставили Українську за замовченням, то її айді буде 0, а Английської - 1.

Все заберігаємо та запускаємо і перевіряємо роботу перемикання мови.

До речи, наш скрипт зберігає виставлену мову та завантажує гру з обраною раніше мовою, тож немає потреби весь час перемикатися.

Також слід відзначити, що таким чином можна не тільки текстові об'єкти перекладати а також написи кнопок, що також є текстом.

 

 

Простий текст

  • Не дозволено жодних HTML теґів.
  • Рядки й абзаци переносяться автоматично.
  • Адреси вебсторінок та адреси електронної пошти автоматично перетворюються у посилання.