Error EditorTranslationImportPlugin::import(const String& p_path, const Ref<ResourceImportMetadata>& p_from) { Ref<ResourceImportMetadata> from = p_from; ERR_FAIL_COND_V( from->get_source_count()!=1, ERR_INVALID_PARAMETER); String source = EditorImportPlugin::expand_source_path( from->get_source_path(0) ); FileAccessRef f = FileAccess::open(source,FileAccess::READ); ERR_FAIL_COND_V( !f, ERR_INVALID_PARAMETER ); bool first=false; bool skip_first = from->get_option("skip_first"); int index = from->get_option("index"); index+=1; String locale = from->get_option("locale"); Ref<Translation> translation = memnew( Translation ); translation->set_locale( locale ); Vector<String> line = f->get_csv_line(); while(line.size()>1) { if (!skip_first) { ERR_FAIL_INDEX_V(index,line.size(),ERR_INVALID_DATA ); translation->add_message(line[0].strip_edges(),line[index]); } else { skip_first=false; } line = f->get_csv_line(); } from->set_source_md5(0,FileAccess::get_md5(source)); from->set_editor(get_name()); String dst_path = p_path; if (from->get_option("compress")) { Ref<PHashTranslation> cxl = memnew( PHashTranslation ); cxl->generate( translation ); translation=cxl; } translation->set_import_metadata(from); return ResourceSaver::save(dst_path,translation); }
void MonoBuildTab::_load_issues_from_file(const String &p_csv_file) { FileAccessRef f = FileAccess::open(p_csv_file, FileAccess::READ); if (!f) return; while (!f->eof_reached()) { Vector<String> csv_line = f->get_csv_line(); if (csv_line.size() == 1 && csv_line[0].empty()) return; ERR_CONTINUE(csv_line.size() != 7); BuildIssue issue; issue.warning = csv_line[0] == "warning"; issue.file = csv_line[1]; issue.line = csv_line[2].to_int(); issue.column = csv_line[3].to_int(); issue.code = csv_line[4]; issue.message = csv_line[5]; issue.project_file = csv_line[6]; if (issue.warning) warning_count += 1; else error_count += 1; issues.push_back(issue); } }
Error ResourceImporterCSVTranslation::import(const String &p_source_file, const String &p_save_path, const Map<StringName, Variant> &p_options, List<String> *r_platform_variants, List<String> *r_gen_files) { bool compress = p_options["compress"]; String delimiter; switch ((int)p_options["delimiter"]) { case 0: delimiter = ","; break; case 1: delimiter = ";"; break; case 2: delimiter = "\t"; break; } FileAccessRef f = FileAccess::open(p_source_file, FileAccess::READ); ERR_FAIL_COND_V(!f, ERR_INVALID_PARAMETER); Vector<String> line = f->get_csv_line(delimiter); ERR_FAIL_COND_V(line.size() <= 1, ERR_PARSE_ERROR); Vector<String> locales; Vector<Ref<Translation> > translations; for (int i = 1; i < line.size(); i++) { String locale = line[i]; ERR_EXPLAIN("Error importing CSV translation: '" + locale + "' is not a valid locale"); ERR_FAIL_COND_V(!TranslationServer::is_locale_valid(locale), ERR_PARSE_ERROR); locales.push_back(locale); Ref<Translation> translation; translation.instance(); translation->set_locale(locale); translations.push_back(translation); } line = f->get_csv_line(delimiter); while (line.size() == locales.size() + 1) { String key = line[0]; if (key != "") { for (int i = 1; i < line.size(); i++) { translations.write[i - 1]->add_message(key, line[i]); } } line = f->get_csv_line(delimiter); } for (int i = 0; i < translations.size(); i++) { Ref<Translation> xlt = translations[i]; if (compress) { Ref<PHashTranslation> cxl = memnew(PHashTranslation); cxl->generate(xlt); xlt = cxl; } String save_path = p_source_file.get_basename() + "." + translations[i]->get_locale() + ".translation"; ResourceSaver::save(save_path, xlt); if (r_gen_files) { r_gen_files->push_back(save_path); } } return OK; }