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)]); } }