浏览代码

Parse the names of children of `TabContainer`s on POT generation

Michael Alexsander 1 年之前
父节点
当前提交
7b8c0b3a34
共有 1 个文件被更改,包括 21 次插入1 次删除
  1. 21 1
      editor/plugins/packed_scene_translation_parser_plugin.cpp

+ 21 - 1
editor/plugins/packed_scene_translation_parser_plugin.cpp

@@ -52,9 +52,11 @@ Error PackedSceneEditorTranslationParserPlugin::parse_file(const String &p_path,
 	Ref<SceneState> state = Ref<PackedScene>(loaded_res)->get_state();
 
 	Vector<String> parsed_strings;
+	List<String> tabcontainer_paths;
 	for (int i = 0; i < state->get_node_count(); i++) {
 		String node_type = state->get_node_type(i);
-		if (!ClassDB::is_parent_class(node_type, "Control") && !ClassDB::is_parent_class(node_type, "Window")) {
+		bool is_control = ClassDB::is_parent_class(node_type, "Control");
+		if (!is_control && !ClassDB::is_parent_class(node_type, "Window")) {
 			continue;
 		}
 
@@ -66,10 +68,28 @@ Error PackedSceneEditorTranslationParserPlugin::parse_file(const String &p_path,
 				break;
 			}
 		}
+
+		// Parse the names of children of `TabContainer`s, as they are used for tab titles.
+		if (!tabcontainer_paths.is_empty()) {
+			String parent_path = state->get_node_path(i, true);
+			if (!parent_path.begins_with(tabcontainer_paths[tabcontainer_paths.size() - 1])) {
+				// Switch to the previous `TabContainer` this was nested in, if that was the case.
+				tabcontainer_paths.pop_back();
+			}
+
+			if (is_control && auto_translating && !tabcontainer_paths.is_empty() && parent_path == tabcontainer_paths[tabcontainer_paths.size() - 1]) {
+				parsed_strings.push_back(state->get_node_name(i));
+			}
+		}
+
 		if (!auto_translating) {
 			continue;
 		}
 
+		if (node_type == "TabContainer") {
+			tabcontainer_paths.push_back(state->get_node_path(i));
+		}
+
 		for (int j = 0; j < state->get_node_property_count(i); j++) {
 			String property_name = state->get_node_property_name(i, j);
 			if (!lookup_properties.has(property_name) || (exception_list.has(node_type) && exception_list[node_type].has(property_name))) {