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:
@@ -46,7 +46,9 @@ func _init(command_string):
|
|||||||
parameters.append(
|
parameters.append(
|
||||||
parameter
|
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
|
quote_open = true
|
||||||
parameter_values.append(parameter)
|
parameter_values.append(parameter)
|
||||||
elif not quote_open and parameter.begins_with('"'):
|
elif not quote_open and parameter.begins_with('"'):
|
||||||
|
|||||||
@@ -30,9 +30,13 @@ var _dialog_manager: ESCDialogManager = null
|
|||||||
var _keytext_regex: RegEx = RegEx.new()
|
var _keytext_regex: RegEx = RegEx.new()
|
||||||
|
|
||||||
|
|
||||||
|
# Constructor
|
||||||
|
func _init() -> void:
|
||||||
|
_keytext_regex.compile(KEYTEXT_REGEX)
|
||||||
|
|
||||||
|
|
||||||
# Register the dialog player and load the dialog resources
|
# Register the dialog player and load the dialog resources
|
||||||
func _ready():
|
func _ready():
|
||||||
_keytext_regex.compile(KEYTEXT_REGEX)
|
|
||||||
if !Engine.is_editor_hint():
|
if !Engine.is_editor_hint():
|
||||||
escoria.dialog_player = self
|
escoria.dialog_player = self
|
||||||
|
|
||||||
@@ -131,12 +135,33 @@ func say(character: String, type: String, text: String) -> void:
|
|||||||
var _speech_resource = _get_voice_file(
|
var _speech_resource = _get_voice_file(
|
||||||
matches.get_string("key")
|
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\
|
escoria.object_manager.get_object(escoria.object_manager.SPEECH).node\
|
||||||
as ESCSpeechPlayer
|
as ESCSpeechPlayer
|
||||||
).set_state(_speech_resource)
|
).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:
|
else:
|
||||||
text = matches.get_string("text")
|
text = matches.get_string("text")
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user