Розширене: Локалізація

Перекладайте текстові підказки!

Основа системи локалізації

Система включає:

  • Об'єкт InputStringsScriptableObject (TSR > TipTextData)

  • CSV таблицю з перекладами (TSR > TipTextData > CSVFile)

  • Тексти звідси вбудовані в кроки туторіалу та окремі текстові об’єкти

Збереження

Додавання перекладів

Для перекладу потрібно мати текстові підказки доступні принаймні однією мовою. Щоб додати переклади:

  1. Відкрийте TSR > TipTextData. Тут зберігаються всі текстові підказки для всіх сцен і туторіалів.

  2. Натисніть кнопку "Export current strings to CSV".

  3. Відредагуйте CSV. Копії ваших поточних рядків були створені в стовпці "Default". Пропустіть їх через перекладач і вставте переклади у відповідні стовпці мов.

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

Перемикання мови (4 способи)

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

circle-check
  • В інспекторі: змініть мову через TSR > TipTextData, просто вибравши інше значення зі списку, що розкривається.

  • Через скрипт (рекомендовано): Викличте TSR > TipTextData > inputTextSettings.ChangeLanguage() . Вкажіть будь-яку мову та викликайте переклад, не потребуючи посилання на ATM на сцені.

  • Через скрипт: викличте метод TSR > TranslateAllTutorial(). Використовуйте для нього одну з існуючих мов зі списку, що розкривається. sceneReferences.TranslateAllTutorial(InputStringsScriptableObject.Language.Italian);

  • Через скрипт: викличте метод TSR > TranslateAllTutorialByString(). Вкажіть будь-яку мову, оголошену в першому рядку CSV-файлу, навіть ту, якої немає в меню, що розкривається. sceneReferences.TranslateAllTutorialByString("Polish");

Додавання нової мови

Спрощено (пошук по "назві")
Як Enum у списку (пошук по індексу колонки)
  1. Відкрийте CSV-файл і заповніть будь-який порожній стовпець перекладами

  2. Переконайтеся, що рядок 0 у стовпці названий відповідно до використовуваної мови, наприклад "Romanian"

  3. Готово. Однак, виклик цієї мови для перекладу можливий лише через метод TranslateAllTutorialByString("Romanian"). Прив'яжіть його, наприклад, до кнопки з прапором.

  1. Відкрийте InputStringsScriptableObject.cs

  2. Знайдіть "public enum Language" > "AddCustomLanguage = 11" і замініть його на вашу мову, наприклад "Romanian = 11"

  3. Відкрийте CSV-файл і заповніть 11-й стовпець (L) румунськими перекладами

  4. Готово. Щоб створити нові мови, використовуйте індекси невикористаних стовпців, наприклад "CustomLanguage = 16"

Призначення шрифтів

Використовуйте список Language Special Fonts, щоб при перемиканні на спеціальну мову текстовий об'єкт змінював шрифт - наприклад, це актуально для китайської та японської мов.

  • Додайте елемент до списку Language Special Fonts, вкажіть назву колонки для мови та призначте відповідний шрифт.

  • Також призначте Default Font, до якого текст повертатиметься при переключенні зі спеціальної мови назад на стандартну.

  • Встановіть Initial Font = true, щоб навіть базові підказки ATM спочатку використовували або стандартний, або спеціальний шрифт. Інакше вони з`являтимуться у початковому вигляді і змінюватимуть шрифт лише при перекладі, переключенні на спеціальну мову та назад.

Sprite Assets

Для підтримки спрайт асетів в тексті (наприклад, іконок клавіш) використовується референс Main Sprite Asset в InputStringsScriptableObject. За замовчуванням він містить пустий атлас key_empty і fallback на робочі асети, де кожна клавіша - окремий Sprite Asset. Це зроблено для простоти використання і заміни.

  • Щоб створити власний Sprite Asset, можна створити його зі спрайта (Create > TextMeshPro > Sprite Asset) та додати у список Fallback Sprite Assets всередині асета key_empty. Далі в тексті підказок звертатись до нього за назвою, наприклад: <sprite name="key_e">.

  • Щоб замінити один з існуючих асетів, наприклад, поміняти дизайн клавіші E, можна замінити Sprite Atlas на свій всередині асета тієї клавіші (key_e).

  • Використання спрайт асетів може впливати на продуктивність, тому за потреби замініть автогенеровані теги в текстах на прості назви (<sprite name="key_e"> на E), або до генерації видаліть Main Sprite Asset рефренс зі скриптабл об'єкта InputStringsScriptableObject.

Додаткові тексти, що перекладаються

Окрім підказок, керованих ATM, можна створювати додаткові текстові об’єкти для префабів підказок або інших цілей. Вони також можуть отримувати переклади з CSV. Для цього використовуйте публічні методи доступу до ScriptableObject.

Ознайомтеся з компонентом LocalizedTooltip, який може отримувати значення за номером рядка або ключем рядка. Він використовується в Graphic Popup Skip Tutorial prefab та в об’єкті Tutorial Skipper на демо-сцені - подивіться як на приклад.

TSR > TipTextData метод
Опис
Приклад

InitializeLocalizator()

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

inputTextSettings.InitializeLocalizator();

ChangeLanguage()

Перекладає мову всіх текстів, пов`язаних із TipTextData.

inputTextSettings.ChangeLanguage("English");

GetCurrentFont()

Отримує шрифт поточної мови, якщо його потрібно застосувати до конкретного тексту.

objectText.font = inputTextSettings.GetCurrentFont();

GetStringText(int rowIndex)

Отримує текст із рядка таблиці за номером відповідно до поточної мови.

objectText.text = inputStrings.GetStringText(3) + "...";

GetStringTextByKey(string key)

Отримує текст із рядка таблиці за ключем рядка з колонки 0 відповідно до поточної мови.

objectText.text = inputStrings.GetStringTextByKey("main_menu_play");

FillTextObject(int rowIndex, TMP_Text textToFill)

Заповнює текстовий об’єкт текстом із таблиці. Кешує текст для подальшого автоматичного перекладу.

inputTextSettings.FillTextObject(connectedTableRow, objectText);

FillTextObjectByKey(string key, TMP_Text textToFill)

Заповнює текстовий об’єкт текстом із таблиці та кешує його, щоб пізніше забезпечити автоматичний переклад.

inputStrings.FillTextObjectByKey("settings_title", settingsText);

ReplacePlaceholders(int rowIndex, params object[] values)

Отримує текст із плейсхолдерами {} та замінює їх на актуальні змінні.

inputStrings.ReplacePlaceholders(2, userName, coins);

FillTextObjectWithPlaceholders(int tableRow, TMP_Text textToFill, params object[] values)

Отримує текст із плейсхолдерами {} і замінює їх на актуальні змінні. Також кешує текст для подальшого автоматичного перекладу.

inputStrings.FillTextObjectWithPlaceholders(5, myTextComponent, "John", 100);

Last updated