Простая локализация в Unity3d

03.09.2013 at 18:16

Быстрые и простой способ локализации приложения на 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

Tags: