Page 1 of 1
Override dialogue text and actor names runtime only
Posted: Thu Oct 10, 2024 4:38 am
by munkbusiness
Hey,
I have my own localization system that I have used in all projects that I have worked on. It basically loads in a file into a dictionary at runtime with a key and a string for that language. I do it this way because it lets translator use an external file, and easily test without needing access to unity.
I have written out conversations in English inside the dialogue system, I and for my writer I think I intend to keep doing it that way. And then regularly export the conversations for translations.
I exported it as a csv and the things called entrytag looks like a unique id.
So now my question, how would I go about dynamically loading from my dictionary instead of the "Dialogue text field", based on the entrytag.
Re: Override dialogue text and actor names runtime only
Posted: Thu Oct 10, 2024 8:15 am
by Tony Li
Hi,
Add a script with OnConversationLine(Subtitle) and OnConversationResponseMenu(Response[])
special script methods to the Dialogue Manager GameObject. Example:
Code: Select all
void OnConversationLine(Subtitle subtitle)
{
subtitle.formattedText = GetTranslation(subtitle.dialogueEntry);
}
void OnConversationResponseMenu(Response[] responses)
{
foreach (var response in responses)
{
response.formattedText = GetTranslation(response.destinationEntry);
}
}
string GetTranslation(DialogueEntry entry)
{
string entrytag = DialogueManager.masterDatabase.GetEntrytaglocal(entry.conversationID,
entry.id, DialogueManager.displaySettings.cameraSettings.entrytagFormat);
string translation = GET_TRANSLATION_FROM_YOUR_SYSTEM(entrytag);
return FormattedText.Parse(translation);
}
Other Notes:
- The GetTranslation() example method above calls FormattedText.Parse() in case your translation has any special markup tags to process.
- If you don't want to manage your own CSV export/import, you can export localization CSV files from the Dialogue Editor's Database > Export/Import Localization section.
- In version 2.2.48 (which I expect to be available on the Asset Store tomorrow), you can also import those localization CSV files at runtime. So your translator can drop the translated CSV files into a directory, and you can write a line of code to import it into your game.
Re: Override dialogue text and actor names runtime only
Posted: Fri Oct 11, 2024 9:23 am
by munkbusiness
Seems to work, nice and easy, had to do some slight alternations jsut in case sommeone else stummble into this
Code: Select all
void OnConversationLine(Subtitle subtitle) {
subtitle.formattedText = GetTranslation(subtitle.dialogueEntry);
}
void OnConversationResponseMenu(Response[] responses) {
foreach (var response in responses) {
response.formattedText = GetTranslation(response.destinationEntry);
}
}
FormattedText GetTranslation(DialogueEntry entry) {
string entrytag = DialogueManager.masterDatabase.GetEntrytag(entry.conversationID,
entry.id, EntrytagFormat.ActorName_ConversationID_EntryID);
Debug.Log(entrytag);
string translation = GameDataHolder.Instance.localizationData.localization[entrytag];
return FormattedText.Parse(translation);
}
As a follow up is ther anyway to manually export the data from the database with my own formatting, its a bit of copy paste job right now. When using the default CSV exporter
Re: Override dialogue text and actor names runtime only
Posted: Fri Oct 11, 2024 9:52 am
by Tony Li
Hi,
You could write your own exporter in a separate editor script/window of your own.
Or use the Dialogue Editor's Database > Localization Export/Import to export it to CSV.
Version 2.2.48 also has a new proofreading text format that looks like this:
Code: Select all
|> Proofreading File for Demo Database
|> Do not modify lines that start with '|>'!
|>
|> ACTORS -------------------------------------------------
|> ACTOR [1]: Player
|> DESCRIPTION:
The Player controls a soldier sent to intercept the evil space emperor's launch codes to prevent him from attacking your planet.
|>
|> ACTOR [2]: Private Hart
|> DESCRIPTION:
Private Hart is a kind-hearted soldier who offers the quest to hack the emperor's computer to get the launch codes.
|>
...
|> CONVERSATIONS ------------------------------------------
|> CONVERSATION [1]: Private Hart
|> DESCRIPTION:
This conversation occurs between the Player and Private Hart, who explains the main quest (Get the Launch Codes). Nodes' Conditions fields branch the conversation based on the current quest state.
|> ENTRY [1] (Private Hart)
|> DIALOGUE TEXT:
We need to intercept the launch codes before the enemy launches their weapon at our home world.
...
if that would be any help.