fix: handles translation keys that have only one word (i.e. no spaces… (#596)

* fix: handles translation keys that have only one word (i.e. no spaces) in the actual dialogue

* fix: fixes dialogue that starts with a space

* fix: issues warning if translation key cannot be found (same for a voice file that can't be found) and uses the untranslated text in this case
This commit is contained in:
Duncan Brown
2022-06-23 05:27:04 -04:00
committed by GitHub
parent b634de542d
commit 653e336383
2 changed files with 31 additions and 4 deletions

View File

@@ -46,7 +46,9 @@ func _init(command_string):
parameters.append(
parameter
)
elif ":" in parameter and '"' in parameter:
elif ':"' in parameter and (parameter.ends_with(':"') or not parameter.ends_with('"')):
# The second clause in this helps to handle dialogue that starts with a space
# and also allowing single-word dialogue to be handled in a separate elif.
quote_open = true
parameter_values.append(parameter)
elif not quote_open and parameter.begins_with('"'):

View File

@@ -30,9 +30,13 @@ var _dialog_manager: ESCDialogManager = null
var _keytext_regex: RegEx = RegEx.new()
# Constructor
func _init() -> void:
_keytext_regex.compile(KEYTEXT_REGEX)
# Register the dialog player and load the dialog resources
func _ready():
_keytext_regex.compile(KEYTEXT_REGEX)
if !Engine.is_editor_hint():
escoria.dialog_player = self
@@ -131,12 +135,33 @@ func say(character: String, type: String, text: String) -> void:
var _speech_resource = _get_voice_file(
matches.get_string("key")
)
if _speech_resource != "":
if _speech_resource == "":
escoria.logger.report_warnings(
"esc_dialog_player.gd:say",
[
"Unable to find voice file with key '%s'." % matches.get_string("key")
]
)
else:
(
escoria.object_manager.get_object(escoria.object_manager.SPEECH).node\
as ESCSpeechPlayer
).set_state(_speech_resource)
text = tr(matches.get_string("key"))
var translated_text: String = tr(matches.get_string("key"))
# Only update the text if the translated text was found; otherwise, raise
# a warning and use the original, untranslated text.
if translated_text == matches.get_string("key"):
escoria.logger.report_warnings(
"esc_dialog_player.gd:say",
[
"Unable to find translation key '%s'. Using untranslated text." % matches.get_string("key")
]
)
text = matches.get_string("text")
else:
text = translated_text
else:
text = matches.get_string("text")