Scripting Reference

Localization Settings

// To get localization settings:
LocalizationSettings localizationSettings = LocalizationSettings.Instance;

// You can get available languages as:
List<SystemLanguage> availableLanguages = localizationSettings.AvailableLanguages;

// To access Google auth file:
TextAsset authFile = localizationSettings.GoogleAuthenticationFile;

Localization Manager

// You can get current language:
SystemLanguage currentLanguage = Localization.Instance.CurrentLanguage;

// or you can set current language:
Localization.Instance.CurrentLanguage = SystemLanguage.English;

// or set by system language:
Localization.Instance.SetSystemLanguage();

// or set by default language defined in LocalizationSettings (first item is the default language):
Localization.Instance.SetDefaultLanguage();

// Register application locale changed event:
Localization.Instance.LocaleChanged += (object sender, LocaleChangedEventArgs e) => 
{
    Debug.Log("Application locale has changed from " + e.PreviousLanguage + " to " + e.CurrentLanguage);
};

Use Localization.Instance if only if application is playing. See Application.isPlaying.

Extending Custom Localized Asset

Creating custom localized asset is involved simple steps:

  • Extend class from LocalizedAsset<T>, enter your asset type for generic parameter:

[CreateAssetMenu(fileName = "MyLocalizedCustomAsset", menuName = "GameToolkit/Localization/My Custom Asset")]
public class MyLocalizedCustomAsset : LocalizedAsset<MyCustomAsset>
  • Your custom localized asset automatically registered under Localization Explorer -> Createmenu if you set menuName property of CreateAssetMenu attribute as "GameToolkit/Localization/<your_asset_name>"

  • Create serializable asset item by extending LocaleItem<T>, enter your asset type for generic parameter again (it is necessary for the Unity to serialize object):

[Serializable]
private class MyCustomLocaleItem : LocaleItem<MyCustomAsset> { };
  • Define locale items array with concrete type you declared:

[SerializeField]
private MyCustomLocaleItem[] m_LocaleItems = new MyCustomLocaleItem[1];
  • Finally, implement getter method for getting locale items with the base class type:

public override LocaleItemBase[] LocaleItems { get { return m_LocaleItems; } }

Complete code:

using System;
using UnityEngine;
using GameToolkit.Localization;

[CreateAssetMenu(fileName = "MyLocalizedCustomAsset", menuName = "GameToolkit/Localization/My Custom Asset")]
public class MyLocalizedCustomAsset : LocalizedAsset<MyCustomAsset>
{
    [Serializable]
    private class MyCustomLocaleItem : LocaleItem<MyCustomAsset> { };

    [SerializeField]
    private MyCustomLocaleItem[] m_LocaleItems = new MyCustomLocaleItem[1];

    public override LocaleItemBase[] LocaleItems { get { return m_LocaleItems; } }
}

Congratulations! You have a custom localized asset that can use your game.

Extending Custom Localized Asset Behaviour

If you want to extend localized asset behavior, you have two options:

  • If you want to implement completely custom behavior, you should extend from LocalizedAssetBehaviour.

  • If you want to create generic component & property based behavior for your custom localized asset, then you should extend from LocalizedGenericAssetBehaviour.

1. Extending from LocalizedAssetBehaviour

You must extend your class from LocalizedAssetBehaviour and override the TryUpdateComponentLocalization() appropriately. This method is invoked every-time when game starts or application language has changed. You should update the component property with your custom localized asset's value.

public class MyLocalizedAssetBehaviour : LocalizedAssetBehaviour
{
    public MyLocalizedCustomAsset LocalizedAsset;

    protected override bool TryUpdateComponentLocalization(bool isOnValidate)
    {
        // Update the specified property with current value.
        ... = LocalizedAsset.Value;
        
        // or using safe value getter.
        ... = GetValueOrDefault(LocalizedAsset);
        
        // If component is updated successfully.
        return true;
    }
}

2. Extending from LocalizedGenericAssetBehaviour<TAsset, TType>

The only step you need to take is the extend from LocalizedGenericAssetBehaviour and specify your custom asset type for the first generic parameter, and specify your asset value type as the second generic parameter. That's it!

public class MyLocalizedAssetBehaviour : LocalizedGenericAssetBehaviour<MyLocalizedCustomAsset, MyCustomAsset>
{
}

Last updated