Простая локализация в Unity3d
Быстрые и простой способ локализации приложения на Unity3D
Определение текущего языка
В unity текущий язык лежит в свойстве Application.systemLanguage. Возвращает оно перечисление, нас будет интересовать только значение SystemLanguage.Russian.
Загрузка ресурсов
Файлы с ресурсами локализации нужно хранить в папке Assets/Resources. Это позволит получать их с помощью метода Resources.Load.
Класс менеджера локализации
Менеджера я решил сделать одиночкой. При первом обращении создается экземпляр, определяется язык, запоминается его код: Ru для русского, En для всех остальных. Имена файлы ресурсов для разных языков должны отличаться только такими же постфиксами.
using UnityEngine; /// <summary> /// Менеджер локализации. /// </summary> public class LocalizationManager { #region Singleton private static LocalizationManager instance; public static LocalizationManager Instance { get { if (instance == null) instance = new LocalizationManager(); return instance; } } #endregion /// <summary> /// Код языка. /// </summary> public string LanguageCode { get; private set; } /// <summary> /// Локализовать имя ресурса. /// </summary> /// <param name="resourceName">Имя ресурса.</param> private string LocalizeResourceName(string resourceName) { return resourceName + this.LanguageCode; } /// <summary> /// Загрузить ресурс. /// </summary> /// <param name="resourceName">Имя ресурса.</param> public TextAsset LoadResource(string resourceName) { return Resources.Load(this.LocalizeResourceName(resourceName), typeof(TextAsset)) as TextAsset; } /// <summary> /// Конструктор. /// </summary> private LocalizationManager() { if (Application.systemLanguage == SystemLanguage.Russian) this.LanguageCode = "Ru"; else this.LanguageCode = "En"; } }
Пример использования
var config = LocalizationManager.Instance.LoadResource("Messages");
Содержимое конфига будет лежать в свойстве config.text. Файлы ресурсов называются MessagesRu.xml и MessagesEn.xml