Skip to content

Scripting Reference

H. Ibrahim Penekli edited this page Nov 24, 2018 · 5 revisions

[DEPRECATED] Please refer to new documentation

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);
};

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 -> Create menu 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; } }
}

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

Extending Custom Localized Asset Behaviour

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

  • If you want to implement completely custom behaviour, you should extend from LocalizedAssetBehaviour.
  • If you want to create component&property based behaviour 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 UpdateComponentValue() appropriately. This method is invoked every-time when game starts or application language has changed. You sould update the component property with your custom localized asset's value.

public class MyLocalizedAssetBehaviour : LocalizedAssetBehaviour
{
    public MyLocalizedCustomAsset LocalizedAsset;

    protected override void UpdateComponentValue()
    {
        // Update the specified property with current value.
        ... = LocalizedAsset.Value;
    }
}

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>
{
}