Browse Source

Improve POT Generation dialog

* Avoid "property not found" warnings when adding a file for the first
  time.
* When no file is added, disable the Generate POT button instead of
  printing a warning.
Haoyu Qiu 2 years ago
parent
commit
584136271c

+ 1 - 0
core/config/project_settings.cpp

@@ -1355,6 +1355,7 @@ ProjectSettings::ProjectSettings() {
 	GLOBAL_DEF_INTERNAL("application/config/features", PackedStringArray());
 	GLOBAL_DEF_INTERNAL("internationalization/locale/translation_remaps", PackedStringArray());
 	GLOBAL_DEF_INTERNAL("internationalization/locale/translations", PackedStringArray());
+	GLOBAL_DEF_INTERNAL("internationalization/locale/translations_pot_files", PackedStringArray());
 }
 
 ProjectSettings::~ProjectSettings() {

+ 13 - 13
editor/localization_editor.cpp

@@ -576,21 +576,21 @@ void LocalizationEditor::update_translations() {
 	translation_pot_list->clear();
 	root = translation_pot_list->create_item(nullptr);
 	translation_pot_list->set_hide_root(true);
-	if (ProjectSettings::get_singleton()->has_setting("internationalization/locale/translations_pot_files")) {
-		PackedStringArray pot_translations = GLOBAL_GET("internationalization/locale/translations_pot_files");
-		for (int i = 0; i < pot_translations.size(); i++) {
-			TreeItem *t = translation_pot_list->create_item(root);
-			t->set_editable(0, false);
-			t->set_text(0, pot_translations[i].replace_first("res://", ""));
-			t->set_tooltip_text(0, pot_translations[i]);
-			t->set_metadata(0, i);
-			t->add_button(0, get_theme_icon(SNAME("Remove"), SNAME("EditorIcons")), 0, false, TTR("Remove"));
-		}
+	PackedStringArray pot_translations = GLOBAL_GET("internationalization/locale/translations_pot_files");
+	for (int i = 0; i < pot_translations.size(); i++) {
+		TreeItem *t = translation_pot_list->create_item(root);
+		t->set_editable(0, false);
+		t->set_text(0, pot_translations[i].replace_first("res://", ""));
+		t->set_tooltip_text(0, pot_translations[i]);
+		t->set_metadata(0, i);
+		t->add_button(0, get_theme_icon(SNAME("Remove"), SNAME("EditorIcons")), 0, false, TTR("Remove"));
 	}
 
 	// New translation parser plugin might extend possible file extensions in POT generation.
 	_update_pot_file_extensions();
 
+	pot_generate_button->set_disabled(pot_translations.is_empty());
+
 	updating_translations = false;
 }
 
@@ -726,9 +726,9 @@ LocalizationEditor::LocalizationEditor() {
 		addtr->connect("pressed", callable_mp(this, &LocalizationEditor::_pot_file_open));
 		thb->add_child(addtr);
 
-		Button *generate = memnew(Button(TTR("Generate POT")));
-		generate->connect("pressed", callable_mp(this, &LocalizationEditor::_pot_generate_open));
-		thb->add_child(generate);
+		pot_generate_button = memnew(Button(TTR("Generate POT")));
+		pot_generate_button->connect("pressed", callable_mp(this, &LocalizationEditor::_pot_generate_open));
+		thb->add_child(pot_generate_button);
 
 		VBoxContainer *tmc = memnew(VBoxContainer);
 		tmc->set_v_size_flags(Control::SIZE_EXPAND_FILL);

+ 1 - 0
editor/localization_editor.h

@@ -54,6 +54,7 @@ class LocalizationEditor : public VBoxContainer {
 	Tree *translation_pot_list = nullptr;
 	EditorFileDialog *pot_file_open_dialog = nullptr;
 	EditorFileDialog *pot_generate_dialog = nullptr;
+	Button *pot_generate_button = nullptr;
 
 	bool updating_translations = false;
 	String localization_changed;

+ 3 - 3
editor/pot_generator.cpp

@@ -55,7 +55,9 @@ void POTGenerator::_print_all_translation_strings() {
 #endif
 
 void POTGenerator::generate_pot(const String &p_file) {
-	if (!ProjectSettings::get_singleton()->has_setting("internationalization/locale/translations_pot_files")) {
+	Vector<String> files = GLOBAL_GET("internationalization/locale/translations_pot_files");
+
+	if (files.is_empty()) {
 		WARN_PRINT("No files selected for POT generation.");
 		return;
 	}
@@ -63,8 +65,6 @@ void POTGenerator::generate_pot(const String &p_file) {
 	// Clear all_translation_strings of the previous round.
 	all_translation_strings.clear();
 
-	Vector<String> files = GLOBAL_GET("internationalization/locale/translations_pot_files");
-
 	// Collect all translatable strings according to files order in "POT Generation" setting.
 	for (int i = 0; i < files.size(); i++) {
 		Vector<String> msgids;