- PVSM.RU - https://www.pvsm.ru -

Локализация игр и приложений в Unity. Быстро и удобно

Привет! В этой статье я поделюсь своим опытом локализации игр и приложений в Unity, а также расскажу о своем плагине Simple Localization, который доступен в Asse Store. Уровень статьи — Easy. Кода не будет вообще, он вам не пригодится.

Локализация игр и приложений в Unity. Быстро и удобно - 1

С точки зрения общей концепции все просто. У нас должен быть список словарей для каждого языка с одинаковыми ключами, из которых мы и будем получать локализованные значения. С технической стороны нужно определить:

  • Какими будут наши словари?
  • Где они будут храниться?
  • Как мы будем их редактировать и расширять?
  • Как реализовать связку с интерфейсом приложения?

При реализации я руководствовался двумя принципами: простота и удобство. Итак, самый простой структурированный формат, который подойдет для словарей — CSV (Comma Separated Values). Это текстовый файл, в котором все ячейки разделены разделителем — либо запятой (","), либо точкой с запятой (";"), в зависимости от региональных настроек. CSV можно открыть и редактировать в любом текстовом редакторе, но лучше всего для этого подойдет Excel. Храниться CSV будут, конечно же, в папке Resources, чтобы приложение в любой момент могло прочитать их.

Формат будет следующий: первая колонка — ключи, все последующие колонки — словари. Первая строка — заголовок. Можно иметь один общий CSV, если текстов в приложении немного, а можно разбить на несколько CSV по какому-либо принципу, например: меню, настройки, достижения и т.д.

Идем дальше. Редактирование локализации в Excel, это, конечно, здорово, но я предлагаю загрузить их в Google Sheets. Тогда редактировать их можно будет из любого места, в любое время и с любого устройства. Но самое главное — локализацию можно будет расшарить переводчикам, и у них не будет никаких сложностей с переводом. Посмотреть на словарь можно по ссылке [1].
Локализация игр и приложений в Unity. Быстро и удобно - 2

И последний пункт — интеграция с Unity, с uGUI. Тут тоже все просто — на каждый текстовый компонент Text добавим свой компонент LocalizedText, в котором укажем ключ. При запуске этот компонент получит локализованное значение и установит его в Text.

Локализация игр и приложений в Unity. Быстро и удобно - 3

Дальше возникает несколько вопросов:

  • Как и когда инициализировать словарь? Достаточно сделать вызов LocalizationManager.Read из управляющего скрипта. Это можно сделать в Awake или Start, если вас устроит автоматическое определение языка (Application.systemLanguage), или после загрузки профиля, когда уже будут известны пользовательские настройки.
  • Что делать, если мы заранее не знаем, какое именно значение будет иметь компонент Text? Не добавляем компонент LocalizedText, а потом присвоим ему значение из кода, обратившись к словарю через LocalizationManager.Localize(string localizationKey).
  • Что делать, если в локализованное значение нужно вставить параметр? Просто используем в локализованной строке форматирование, например «Level {0}», а потом через string.Format выполним подстановку. Для этого есть перегрузка LocalizationManager.Localize(string localizationKey, params object[] args).
  • Как изменить локализацию в runtime? Просто меняем язык через LocalizationManager.Language. При этом возникнет событие, на которое подписаны все компоненты LocalizedText. Однако, локализованные из кода компоненты Text (у которых нет компонента LocalizedText) нужно будет обновить вручную.
  • Что делать, с другими элементами, например, с выпадающим списком Dropdown? Очевидно, использовать компонент LocalizedDropdown =)

Ну и последняя плюшка в моем ассете — он умеет автоматически скачивать все листы из Google Sheets и сохранять их в ресурсах игры. Для этого есть компонент LocalizationSync, у которого есть кнопка Sync (в инспекторе).

Скачать можно в Asset Store: Simple Localization [2].

Автор: Олег Мекекечко

Источник [3]


Сайт-источник PVSM.RU: https://www.pvsm.ru

Путь до страницы источника: https://www.pvsm.ru/unity3d/286678

Ссылки в тексте:

[1] ссылке: https://docs.google.com/spreadsheets/d/1RvKY3VE_y5FPhEECCa5dv4F7REJ7rBtGzQg9Z_B_DE4

[2] Simple Localization: https://assetstore.unity.com/packages/tools/gui/simple-localization-by-hippo-120113

[3] Источник: https://habr.com/post/417675/?utm_source=habrahabr&utm_medium=rss&utm_campaign=417675