void popup_import(const String& p_from) { popup_centered(Size2(400,400)); if (p_from!="") { Ref<ResourceImportMetadata> rimd = ResourceLoader::load_import_metadata(p_from); ERR_FAIL_COND(!rimd.is_valid()); ERR_FAIL_COND(rimd->get_source_count()!=1); _choose_file(EditorImportPlugin::expand_source_path(rimd->get_source_path(0))); _choose_save_dir(p_from.get_base_dir()); String locale = rimd->get_option("locale"); bool skip_first=rimd->get_option("skip_first"); bool compressed = rimd->get_option("compress"); int idx=-1; for(int i=0;i<items.size();i++) { String il = TranslationServer::get_all_locales()[items[i]->get_range(1)]; if (il==locale) { idx=i; break; } } if (idx!=-1) { idx=rimd->get_option("index"); } for(int i=0;i<items.size();i++) { if (i==idx) { Vector<String> locs = TranslationServer::get_all_locales(); for(int j=0;j<locs.size();j++) { if (locs[j]==locale) { items[i]->set_range(1,j); } } items[i]->set_checked(0,true); } else { items[i]->set_checked(0,false); } } ignore_first->set_pressed(skip_first); compress->set_pressed(compressed); } }
void _choose_file(const String& p_path) { import_path->set_text(p_path); FileAccess *f = FileAccess::open(p_path,FileAccess::READ); if (!f) { error_dialog->set_text(TTR("Invalid source!")); error_dialog->popup_centered(Size2(200,100)); return; } Vector<String> csvh = f->get_csv_line(); memdelete(f); if (csvh.size()<2) { error_dialog->set_text(TTR("Invalid translation source!")); error_dialog->popup_centered(Size2(200,100)); return; } columns->clear(); columns->set_columns(2); TreeItem *root = columns->create_item(); columns->set_hide_root(true); columns->set_column_titles_visible(true); columns->set_column_title(0,TTR("Column")); columns->set_column_title(1,TTR("Language")); Vector<String> langs = TranslationServer::get_all_locales(); Vector<String> names = TranslationServer::get_all_locale_names(); if (csvh[0]=="") ignore_first->set_pressed(true); items.clear(); for(int i=1;i<csvh.size();i++) { TreeItem *ti = columns->create_item(root); ti->set_editable(0,true); ti->set_selectable(0,false); ti->set_cell_mode(0,TreeItem::CELL_MODE_CHECK); ti->set_checked(0,true); ti->set_text(0,itos(i)); items.push_back(ti); String lname = csvh[i].to_lower().strip_edges(); int idx=-1; String hint; for(int j=0;j<langs.size();j++) { if (langs[j]==lname.substr(0,langs[j].length()).to_lower()) { idx=j; } if (j>0) { hint+=","; } hint+=names[j].replace(","," "); } ti->set_cell_mode(1,TreeItem::CELL_MODE_RANGE); ti->set_text(1,hint); ti->set_editable(1,true); if (idx!=-1) { ignore_first->set_pressed(true); ti->set_range(1,idx); } else { //not found, maybe used stupid name if (lname.begins_with("br")) //brazilian ti->set_range(1,langs.find("pt")); else if (lname.begins_with("ch")) //chinese ti->set_range(1,langs.find("zh")); else if (lname.begins_with("sp")) //spanish ti->set_range(1,langs.find("es")); else if (lname.begins_with("kr"))// kprean ti->set_range(1,langs.find("ko")); else if (i==0) ti->set_range(1,langs.find("en")); else ti->set_range(1,langs.find("es")); } ti->set_metadata(1,names[ti->get_range(1)]); } }
EditorTranslationImportDialog(EditorTranslationImportPlugin *p_plugin) { plugin=p_plugin; set_title(TTR("Import Translation")); VBoxContainer *vbc = memnew( VBoxContainer ); add_child(vbc); set_child_rect(vbc); VBoxContainer *csvb = memnew( VBoxContainer ); HBoxContainer *hbc = memnew( HBoxContainer ); csvb->add_child(hbc); vbc->add_margin_child(TTR("Source CSV:"),csvb); import_path = memnew( LineEdit ); import_path->set_h_size_flags(SIZE_EXPAND_FILL); hbc->add_child(import_path); ignore_first = memnew( CheckButton ); ignore_first->set_text(TTR("Ignore First Row")); csvb->add_child(ignore_first); Button * import_choose = memnew( Button ); import_choose->set_text(" .. "); hbc->add_child(import_choose); import_choose->connect("pressed", this,"_browse"); VBoxContainer *tcomp = memnew( VBoxContainer); hbc = memnew( HBoxContainer ); tcomp->add_child(hbc); vbc->add_margin_child(TTR("Target Path:"),tcomp); save_path = memnew( LineEdit ); save_path->set_h_size_flags(SIZE_EXPAND_FILL); hbc->add_child(save_path); Button * save_choose = memnew( Button ); save_choose->set_text(" .. "); hbc->add_child(save_choose); save_choose->connect("pressed", this,"_browse_target"); compress = memnew( CheckButton); compress->set_pressed(true); compress->set_text(TTR("Compress")); tcomp->add_child(compress); add_to_project = memnew( CheckButton); add_to_project->set_pressed(true); add_to_project->set_text(TTR("Add to Project (engine.cfg)")); tcomp->add_child(add_to_project); file_select = memnew(EditorFileDialog); file_select->set_access(EditorFileDialog::ACCESS_FILESYSTEM); add_child(file_select); file_select->set_mode(EditorFileDialog::MODE_OPEN_FILE); file_select->connect("file_selected", this,"_choose_file"); file_select->add_filter("*.csv ; Translation CSV"); save_select = memnew( EditorDirDialog ); add_child(save_select); // save_select->set_mode(EditorFileDialog::MODE_OPEN_DIR); save_select->connect("dir_selected", this,"_choose_save_dir"); get_ok()->connect("pressed", this,"_import"); get_ok()->set_text(TTR("Import")); error_dialog = memnew ( ConfirmationDialog ); add_child(error_dialog); error_dialog->get_ok()->set_text(TTR("Accept")); // error_dialog->get_cancel()->hide(); set_hide_on_ok(false); columns = memnew( Tree ); vbc->add_margin_child(TTR("Import Languages:"),columns,true); }