Il Localization Package di Unity è sicuramente un componente molto valido per implementare logiche di multi-linguaggio all’interno di applicazioni e videogiochi. Se da un lato l’interfaccia permette di gestire facilmente tabelle, chiavi e contenuti, dall’altro potrebbe sorgere la necessitò di gestire i componenti a livello di script.
Una delle prime necessità che potrebbero sorgere è quella di prelevare il nome della tabella e il nome della chiave associati ad un componente LocalizeStringEvent a sua volta associato ad un campo testo e associare una nuova chiave. Per farlo bastano poche righe:
LocalizeStringEvent localize = GetComponent<LocalizeStringEvent>();
var tableEntry = LocalizationSettings.StringDatabase.GetTableEntry(localize.StringReference.TableReference, localize.StringReference.TableEntryReference);
string tableName = localize.StringReference.TableReference;
var keyName = tableEntry.Entry.SharedEntry.Key;
localize.StringReference.SetReference(tableName, keyName + "_2");
Come si vede dal codice purtroppo il nome della chiave non può essere prelavato tramite localize.StringReference.TableEntryReference come si potrebbe pensare (risulterebbe null o vuoto) ma è necessario scomodare l’oggetto .StringDatabase ed interrogarlo passando le referenze.
A quel punto la funzione StringReference.SetReference(…) permette facilmente di sostituire un tabella e chiave di un LocalizationStringEvent e aggiornarne immediatamente il contenuto senza chiamare esplicitamente la funzione StringReference.RefreshString().