100 lines
3.5 KiB
C#
100 lines
3.5 KiB
C#
using System;
|
|
using UnityEngine;
|
|
using UnityEngine.Localization;
|
|
using UnityEngine.Localization.Components;
|
|
|
|
public class LocalizeStringEventExample : MonoBehaviour
|
|
{
|
|
[Serializable]
|
|
public class CharacterData
|
|
{
|
|
public string name;
|
|
public string surname;
|
|
public int age;
|
|
}
|
|
|
|
public CharacterData characterInfo = new CharacterData { name = "Guy", surname = "Threepwood", age = 17 };
|
|
|
|
public LocalizeStringEvent localizedStringEvent;
|
|
LocalizedString originalLocalizedString;
|
|
|
|
// Various ways to address a string table entry
|
|
public LocalizedString localizedString = new LocalizedString { TableReference = "My String Table Collection", TableEntryReference = "My Text 1" };
|
|
public string tableName = "My String Table Collection";
|
|
public string keyName = "My Text 2";
|
|
public long keyId = 123;
|
|
|
|
void Start()
|
|
{
|
|
// Keep track of the original so we dont change localizedString by mistake
|
|
originalLocalizedString = localizedStringEvent.StringReference;
|
|
|
|
// Assuming the Localizing String is using Smart Format:
|
|
// The string
|
|
// "{name} {surname} is {age} years old"
|
|
// would produce:
|
|
// "Guy Threepwood is 17 years old"
|
|
localizedStringEvent.StringReference.Arguments = new[] { characterInfo };
|
|
|
|
// We can add a listener if we are interested in the Localized String.
|
|
localizedStringEvent.OnUpdateString.AddListener(OnStringChanged);
|
|
}
|
|
|
|
void OnStringChanged(string s)
|
|
{
|
|
Debug.Log($"String changed to `{s}`");
|
|
}
|
|
|
|
void OnGUI()
|
|
{
|
|
if (GUILayout.Button("Change using LocalizedString"))
|
|
{
|
|
// We are assigning a new LocalizedString so will need to copy the arguments across
|
|
localizedString.Arguments = localizedStringEvent.StringReference.Arguments;
|
|
|
|
// Assign the new LocalizedString, this will trigger an update
|
|
localizedStringEvent.StringReference = localizedString;
|
|
}
|
|
|
|
if (GUILayout.Button("Change using key name"))
|
|
{
|
|
// Restore the original LocalizedString in case we changed it previously.
|
|
localizedStringEvent.StringReference = originalLocalizedString;
|
|
|
|
// Assign a new Table and Entry. This will trigger an update.
|
|
localizedStringEvent.StringReference.SetReference(tableName, keyName);
|
|
|
|
// We could do this if we only wanted to change the entry but use the same table
|
|
// localizedStringEvent.StringReference.TableEntryReference = keyName;
|
|
}
|
|
|
|
if (GUILayout.Button("Change using key id"))
|
|
{
|
|
// Restore the original LocalizedString in case we changed it previously.
|
|
localizedStringEvent.StringReference = originalLocalizedString;
|
|
|
|
// Assign a new Table and Entry. This will trigger an update.
|
|
localizedStringEvent.StringReference.SetReference(tableName, keyId);
|
|
|
|
// We could do this if we only wanted to change the entry but use the same table
|
|
// localizedStringEvent.StringReference.TableEntryReference = keyId;
|
|
}
|
|
|
|
if (GUILayout.Button("Increase Age"))
|
|
{
|
|
characterInfo.age++;
|
|
|
|
// Force the string to refresh
|
|
localizedStringEvent.RefreshString();
|
|
}
|
|
|
|
if (GUILayout.Button("Decrease Age"))
|
|
{
|
|
characterInfo.age--;
|
|
|
|
// Force the string to refresh
|
|
localizedStringEvent.RefreshString();
|
|
}
|
|
}
|
|
}
|