Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Fetcher for IACR eprints #3473

Merged
merged 25 commits into from
Dec 13, 2017
Merged
Show file tree
Hide file tree
Changes from 10 commits
Commits
Show all changes
25 commits
Select commit Hold shift + click to select a range
e23fee2
Add an initial WIP version of an IACR eprint fetcher
derTimme Nov 30, 2017
096d857
Refactor IACR fetcher and improve error handling
derTimme Nov 30, 2017
20ad210
Localize error messages in IACR fetcher
derTimme Nov 30, 2017
83ac917
Refactoring of IACR fetcher
derTimme Nov 30, 2017
95e431c
More refactoring of IACR fetcher
derTimme Nov 30, 2017
b76a3f7
Fix the download encoding - doesn't fit library encoding though
derTimme Dec 1, 2017
1076c1d
Add tests for IACR fetcher
derTimme Dec 1, 2017
89e237b
Make checkstyle happy
derTimme Dec 1, 2017
fad3203
Add IACR fetcher to changelog
derTimme Dec 1, 2017
025eb88
Fix the encoding of entries retrieved via IACR fetcher
derTimme Dec 1, 2017
4054e16
Migrate IACR fetcher tests to junit5
derTimme Dec 1, 2017
53be6f7
Use enum constant for IACR fetcher import encoding
derTimme Dec 1, 2017
58034e5
Fix a bug in the IACR fetcher tests
derTimme Dec 2, 2017
4fa1534
Migrate IACR fetcher to java8 date classes
derTimme Dec 2, 2017
8a091b0
Remove abstracts from IACR fetcher tests
derTimme Dec 2, 2017
fee6ccf
Fix the IACR fetcher for entries created before year 2000
derTimme Dec 7, 2017
2ac6451
Make the localization strings in the IACR fetcher reusable
derTimme Dec 7, 2017
7f05741
Disable a long running test for the IACR fetcher
derTimme Dec 7, 2017
ff6bfa7
Fix codacy issues in the IACR eprint fetcher
derTimme Dec 8, 2017
f8b671d
Merge localization files with master
derTimme Dec 11, 2017
108b8a9
Merge branch 'master' into iacr_eprint_fetcher
derTimme Dec 11, 2017
4ebb7db
Merge remote-tracking branch 'upstream/master' into iacr_eprint_fetcher
derTimme Dec 12, 2017
031aa87
Fix duplicate keys in localization files
derTimme Dec 13, 2017
116de21
Merge branch 'master' into iacr_eprint_fetcher
derTimme Dec 13, 2017
079ba27
Merge branch 'master' into iacr_eprint_fetcher
derTimme Dec 13, 2017
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
1 change: 1 addition & 0 deletions CHANGELOG.md
Original file line number Diff line number Diff line change
Expand Up @@ -34,6 +34,7 @@ We refer to [GitHub issues](https://github.com/JabRef/jabref/issues) by using `#
- We added an option to mass append to fields via the Quality -> set/clear/append/rename fields dialog. [#2721](https://github.com/JabRef/jabref/issues/2721)
- We added a check on startup to ensure JabRef is run with an adequate Java version. [3310](https://github.com/JabRef/jabref/issues/3310)
- In the preference, all installed java Look and Feels are now listed and selectable
- We added an ID fetcher for [IACR eprints](https://eprint.iacr.org/). [#3473](https://github.com/JabRef/jabref/pull/3473)

### Fixed
- We fixed the translation of \textendash in the entry preview [#3307](https://github.com/JabRef/jabref/issues/3307)
Expand Down
2 changes: 2 additions & 0 deletions src/main/java/org/jabref/logic/importer/WebFetchers.java
Original file line number Diff line number Diff line change
Expand Up @@ -13,6 +13,7 @@
import org.jabref.logic.importer.fetcher.DoiFetcher;
import org.jabref.logic.importer.fetcher.GoogleScholar;
import org.jabref.logic.importer.fetcher.GvkFetcher;
import org.jabref.logic.importer.fetcher.IacrEprintFetcher;
import org.jabref.logic.importer.fetcher.IsbnFetcher;
import org.jabref.logic.importer.fetcher.LibraryOfCongress;
import org.jabref.logic.importer.fetcher.MathSciNet;
Expand Down Expand Up @@ -90,6 +91,7 @@ public static List<IdBasedFetcher> getIdBasedFetchers(ImportFormatPreferences im
list.add(new MathSciNet(importFormatPreferences));
list.add(new CrossRef());
list.add(new LibraryOfCongress());
list.add(new IacrEprintFetcher(importFormatPreferences));
list.sort(Comparator.comparing(WebFetcher::getName));
return list;
}
Expand Down
157 changes: 157 additions & 0 deletions src/main/java/org/jabref/logic/importer/fetcher/IacrEprintFetcher.java
Original file line number Diff line number Diff line change
@@ -0,0 +1,157 @@
package org.jabref.logic.importer.fetcher;

import java.io.IOException;
import java.nio.charset.Charset;
import java.text.DateFormat;
import java.text.SimpleDateFormat;
import java.util.ArrayList;
import java.util.Collections;
import java.util.Date;
import java.util.List;
import java.util.Optional;
import java.util.function.Predicate;
import java.util.regex.Matcher;
import java.util.regex.Pattern;

import org.jabref.logic.importer.FetcherException;
import org.jabref.logic.importer.IdBasedFetcher;
import org.jabref.logic.importer.ImportFormatPreferences;
import org.jabref.logic.importer.ParseException;
import org.jabref.logic.importer.fileformat.BibtexParser;
import org.jabref.logic.l10n.Localization;
import org.jabref.logic.net.URLDownload;
import org.jabref.model.entry.BibEntry;
import org.jabref.model.entry.FieldName;

import org.apache.commons.lang3.StringUtils;
import org.apache.commons.logging.Log;
import org.apache.commons.logging.LogFactory;

public class IacrEprintFetcher implements IdBasedFetcher {

public static final String NAME = "IACR eprints";

private static final Log LOGGER = LogFactory.getLog(IacrEprintFetcher.class);
private static final Pattern DATE_FROM_WEBSITE_PATTERN = Pattern.compile("[a-z ]+(\\d{1,2} [A-Za-z][a-z]{2} \\d{4})");
private static final DateFormat DATE_FORMAT_WEBSITE = new SimpleDateFormat("dd MMM yyyy");
private static final DateFormat DATE_FORMAT_BIBTEX = new SimpleDateFormat("yyyy-MM-dd");
Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

SimpleDateFormat is outdated, it has been replaced by several other constructs in java8:
http://www.baeldung.com/java-8-date-time-intro
Or see example 18 here for an idea: http://javarevisited.blogspot.de/2015/03/20-examples-of-date-and-time-api-from-Java8.html

Copy link
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Didn't know that - I'm working on changing it.

private static final Predicate<String> IDENTIFIER_PREDICATE = Pattern.compile("\\d{4}/\\d{3,5}").asPredicate();
private static final String CITATION_URL_PREFIX = "https://eprint.iacr.org/eprint-bin/cite.pl?entry=";
private static final String DESCRIPTION_URL_PREFIX = "https://eprint.iacr.org/";
private static final Charset WEBSITE_CHARSET = Charset.forName("iso-8859-1");
Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

very very minor, you can directly use the predefined enum Constant:
https://docs.oracle.com/javase/8/docs/api/java/nio/charset/StandardCharsets.html#ISO_8859_1

Copy link
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Thanks for pointing that out - was looking for something like that, but apparently didn't look long enough...

Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

For other cases where Java provides default enum variables, they all start with StandardXXX, for example for file opening there exists: StandardOpenOption, not really obvious if you search for it ;)

Copy link
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Jep, I expected them in something like Charsets or directly as constants in the Charset class...


private final ImportFormatPreferences prefs;

public IacrEprintFetcher(ImportFormatPreferences prefs) {
this.prefs = prefs;
}

@Override
public Optional<BibEntry> performSearchById(String identifier) throws FetcherException {
String identifierWithoutLettersAndSpaces = identifier.replaceAll("[^0-9/]", " ").trim();

if (!IDENTIFIER_PREDICATE.test(identifierWithoutLettersAndSpaces)) {
throw new FetcherException(Localization.lang("Invalid IACR identifier: '%0'.", identifier));
}

Optional<BibEntry> entry = createEntryFromIacrCitation(identifierWithoutLettersAndSpaces);

if (entry.isPresent()) {
setAdditionalFields(entry.get(), identifierWithoutLettersAndSpaces);
}

return entry;
}

private Optional<BibEntry> createEntryFromIacrCitation(String validIdentifier) throws FetcherException {
String bibtexCitationHtml = getHtml(CITATION_URL_PREFIX + validIdentifier);
String actualEntry = getValueBetween("<PRE>", "</PRE>", bibtexCitationHtml);

Optional<BibEntry> entry;
Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

I am not sure, but you probably need to initialize it with Optional.empty() or you could get still an NPE if no entry is found

Copy link
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

If the javadoc on BibtexParser.singleFromString is correct, it should always return an entry or an Optional.empty().
But I might as well initialize it...

Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

you can also just return the entry directly in the try construct. This is in my opinion the most readable solution.

Copy link
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

👍

try {
entry = BibtexParser.singleFromString(actualEntry, prefs);
} catch (ParseException e) {
throw new FetcherException(Localization.lang("Entry from IACR could not be parsed."), e);
}
return entry;
}

private void setAdditionalFields(BibEntry entry, String identifier) throws FetcherException {
String descriptiveHtml = getHtml(DESCRIPTION_URL_PREFIX + identifier);
String version = getVersion(identifier, descriptiveHtml);

entry.setField(FieldName.VERSION, version);
entry.setField(FieldName.URL, DESCRIPTION_URL_PREFIX + identifier + "/" + version);
entry.setField(FieldName.ABSTRACT, getAbstract(descriptiveHtml));

String dateStringAsInHtml = getValueBetween("<b>Date: </b>", "<p />", descriptiveHtml);
entry.setField(FieldName.DATE, getLatestDate(dateStringAsInHtml));
}

private String getVersion(String identifier, String descriptiveHtml) throws FetcherException {
String startOfVersionString = "<b>Version: </b><a href=\"/" + identifier + "/";
String version = getValueBetween(startOfVersionString, "\"", descriptiveHtml);
return version;
}

private String getAbstract(String descriptiveHtml) throws FetcherException {
String abstractText = getValueBetween("<b>Abstract: </b>", "<p />", descriptiveHtml);
// for some reason, all spaces are doubled...
abstractText = abstractText.replaceAll("\\s(\\s)", "$1");
return abstractText;
}

private String getLatestDate(String dateStringAsInHtml) throws FetcherException {
String[] rawDates = dateStringAsInHtml.split(",");
List<String> formattedDates = new ArrayList<>();
for (String rawDate : rawDates) {
Date date = parseDateFromWebsite(rawDate);
if (date != null) {
formattedDates.add(DATE_FORMAT_BIBTEX.format(date));
}
}

if (formattedDates.isEmpty()) {
throw new FetcherException(Localization.lang("Entry from IACR could not be parsed."));
}

Collections.sort(formattedDates, Collections.reverseOrder());
return formattedDates.get(0);
}

private Date parseDateFromWebsite(String dateStringFromWebsite) {
Date date = null;
Matcher dateMatcher = DATE_FROM_WEBSITE_PATTERN.matcher(dateStringFromWebsite.trim());
if (dateMatcher.find()) {
try {
date = DATE_FORMAT_WEBSITE.parse(dateMatcher.group(1));
} catch (java.text.ParseException e) {
LOGGER.warn("Date from IACR could not be parsed", e);
}
}
return date;
}

private String getHtml(String url) throws FetcherException {
try {
URLDownload download = new URLDownload(url);
return download.asString(WEBSITE_CHARSET);
} catch (IOException e) {
throw new FetcherException(Localization.lang("Could not retrieve entry data from IACR at '%0'.", url), e);
}
}

private String getValueBetween(String from, String to, String haystack) throws FetcherException {
String value = StringUtils.substringBetween(haystack, from, to);
if (value == null) {
throw new FetcherException(Localization.lang("Could not extract required data from IACR HTML."));
} else {
return value;
}
}

@Override
public String getName() {
return NAME;
}
}
4 changes: 4 additions & 0 deletions src/main/resources/l10n/JabRef_da.properties
Original file line number Diff line number Diff line change
Expand Up @@ -1819,6 +1819,10 @@ Copy_BibTeX_key_and_title=
File_rename_failed_for_%0_entries.=
Merged_BibTeX_source_code=
Invalid_DOI\:_'%0'.=Ugyldig_DOI\:_'%0'.
Invalid_IACR_identifier\:_'%0'.=
Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Please try to use a more generic version in these strings. As of now, they are not reusable in other fetchers or situations. E.g. just use invalid identifier or replace ICAR by a parameter slot.

Could_not_extract_required_data_from_IACR_HTML.=
Could_not_retrieve_entry_data_from_IACR_at_'%0'.=
Entry_from_IACR_could_not_be_parsed.=
should_start_with_a_name=
should_end_with_a_name=
unexpected_closing_curly_bracket=
Expand Down
4 changes: 4 additions & 0 deletions src/main/resources/l10n/JabRef_de.properties
Original file line number Diff line number Diff line change
Expand Up @@ -1819,6 +1819,10 @@ Copy_BibTeX_key_and_title=BibTeX-Key_und_Titel_kopieren
File_rename_failed_for_%0_entries.=Dateiumbennung_schlug_ür_%0_Einträge_fehl.
Merged_BibTeX_source_code=BibTeX-Quelltext_zusammengeführt
Invalid_DOI\:_'%0'.=Ungültiger_DOI\:_'%0'.
Invalid_IACR_identifier\:_'%0'.=
Could_not_extract_required_data_from_IACR_HTML.=
Could_not_retrieve_entry_data_from_IACR_at_'%0'.=
Entry_from_IACR_could_not_be_parsed.=
should_start_with_a_name=sollte_mit_einem_Name_beginnen
should_end_with_a_name=sollte_mit_einem_Name_enden
unexpected_closing_curly_bracket=unerwartete_schließende_geschweifte_Klammer
Expand Down
4 changes: 4 additions & 0 deletions src/main/resources/l10n/JabRef_el.properties
Original file line number Diff line number Diff line change
Expand Up @@ -1819,6 +1819,10 @@ Copy_BibTeX_key_and_title=
File_rename_failed_for_%0_entries.=
Merged_BibTeX_source_code=
Invalid_DOI\:_'%0'.=
Invalid_IACR_identifier\:_'%0'.=
Could_not_extract_required_data_from_IACR_HTML.=
Could_not_retrieve_entry_data_from_IACR_at_'%0'.=
Entry_from_IACR_could_not_be_parsed.=
should_start_with_a_name=
should_end_with_a_name=
unexpected_closing_curly_bracket=
Expand Down
4 changes: 4 additions & 0 deletions src/main/resources/l10n/JabRef_en.properties
Original file line number Diff line number Diff line change
Expand Up @@ -1819,6 +1819,10 @@ Copy_BibTeX_key_and_title=Copy_BibTeX_key_and_title
File_rename_failed_for_%0_entries.=File_rename_failed_for_%0_entries.
Merged_BibTeX_source_code=Merged_BibTeX_source_code
Invalid_DOI\:_'%0'.=Invalid_DOI\:_'%0'.
Invalid_IACR_identifier\:_'%0'.=Invalid_IACR_identifier\:_'%0'.
Could_not_extract_required_data_from_IACR_HTML.=Could_not_extract_required_data_from_IACR_HTML.
Could_not_retrieve_entry_data_from_IACR_at_'%0'.=Could_not_retrieve_entry_data_from_IACR_at_'%0'.
Entry_from_IACR_could_not_be_parsed.=Entry_from_IACR_could_not_be_parsed.
should_start_with_a_name=should_start_with_a_name
should_end_with_a_name=should_end_with_a_name
unexpected_closing_curly_bracket=unexpected_closing_curly_bracket
Expand Down
4 changes: 4 additions & 0 deletions src/main/resources/l10n/JabRef_es.properties
Original file line number Diff line number Diff line change
Expand Up @@ -1819,6 +1819,10 @@ Copy_BibTeX_key_and_title=Copiar_clave_y_título_BibTeX
File_rename_failed_for_%0_entries.=Ha_fallado_el_renombrado_para_%0_entradas.
Merged_BibTeX_source_code=Código_fuente_BibTex_fusionado
Invalid_DOI\:_'%0'.=DOI_no_válida\:_'%0'.
Invalid_IACR_identifier\:_'%0'.=
Could_not_extract_required_data_from_IACR_HTML.=
Could_not_retrieve_entry_data_from_IACR_at_'%0'.=
Entry_from_IACR_could_not_be_parsed.=
should_start_with_a_name=debería_comenzar_por_un_nombre
should_end_with_a_name=debería_acabar_por_un_nombre
unexpected_closing_curly_bracket=Llave_de_cierre_inesperada
Expand Down
4 changes: 4 additions & 0 deletions src/main/resources/l10n/JabRef_fa.properties
Original file line number Diff line number Diff line change
Expand Up @@ -1819,6 +1819,10 @@ Copy_BibTeX_key_and_title=
File_rename_failed_for_%0_entries.=
Merged_BibTeX_source_code=
Invalid_DOI\:_'%0'.=
Invalid_IACR_identifier\:_'%0'.=
Could_not_extract_required_data_from_IACR_HTML.=
Could_not_retrieve_entry_data_from_IACR_at_'%0'.=
Entry_from_IACR_could_not_be_parsed.=
should_start_with_a_name=
should_end_with_a_name=
unexpected_closing_curly_bracket=
Expand Down
4 changes: 4 additions & 0 deletions src/main/resources/l10n/JabRef_fr.properties
Original file line number Diff line number Diff line change
Expand Up @@ -1819,6 +1819,10 @@ Copy_BibTeX_key_and_title=Copier_la_clef_BibTeX_et_le_titre
File_rename_failed_for_%0_entries.=Le_renommage_des_fichiers_a_échoué_pour_%0_entrées.
Merged_BibTeX_source_code=Code_source_BibTeX_fusionné
Invalid_DOI\:_'%0'.=DOI_invalide_\:_'%0'.
Invalid_IACR_identifier\:_'%0'.=
Could_not_extract_required_data_from_IACR_HTML.=
Could_not_retrieve_entry_data_from_IACR_at_'%0'.=
Entry_from_IACR_could_not_be_parsed.=
should_start_with_a_name=devrait_débuter_par_un_nom
should_end_with_a_name=devrait_se_terminer_par_un_nom
unexpected_closing_curly_bracket=accolade_fermante_incongrue
Expand Down
4 changes: 4 additions & 0 deletions src/main/resources/l10n/JabRef_in.properties
Original file line number Diff line number Diff line change
Expand Up @@ -1819,6 +1819,10 @@ Copy_BibTeX_key_and_title=Salin_kunci_BibTeX_dan_judul
File_rename_failed_for_%0_entries.=Perubahan_nama_berkas_gagal_untuk_%0_entri.
Merged_BibTeX_source_code=
Invalid_DOI\:_'%0'.=DOI_salah\:_'%0'.
Invalid_IACR_identifier\:_'%0'.=
Could_not_extract_required_data_from_IACR_HTML.=
Could_not_retrieve_entry_data_from_IACR_at_'%0'.=
Entry_from_IACR_could_not_be_parsed.=
should_start_with_a_name=harus_bermula_dengan_nama
should_end_with_a_name=harus_berakhiran_nama
unexpected_closing_curly_bracket=
Expand Down
4 changes: 4 additions & 0 deletions src/main/resources/l10n/JabRef_it.properties
Original file line number Diff line number Diff line change
Expand Up @@ -1819,6 +1819,10 @@ Copy_BibTeX_key_and_title=Copia_la_chiave_BibTeX_ed_il_titolo
File_rename_failed_for_%0_entries.=Rinominazione_dei_file_fallita_per_%0_voci.
Merged_BibTeX_source_code=Codice_sorgente_BibTeX_accorpato
Invalid_DOI\:_'%0'.=DOI_non_valido\:_'%0'.
Invalid_IACR_identifier\:_'%0'.=
Could_not_extract_required_data_from_IACR_HTML.=
Could_not_retrieve_entry_data_from_IACR_at_'%0'.=
Entry_from_IACR_could_not_be_parsed.=
should_start_with_a_name=deve_cominciare_con_un_nome
should_end_with_a_name=deve_finire_con_un_nome
unexpected_closing_curly_bracket=parentesi_graffa_chiusa_inaspettata
Expand Down
4 changes: 4 additions & 0 deletions src/main/resources/l10n/JabRef_ja.properties
Original file line number Diff line number Diff line change
Expand Up @@ -1819,6 +1819,10 @@ Copy_BibTeX_key_and_title=BibTeX鍵とタイトルをコピー
File_rename_failed_for_%0_entries.=%0項目のファイル名変更が失敗しました.
Merged_BibTeX_source_code=統合後のBibTeXソースコード
Invalid_DOI\:_'%0'.=無効なDOIです:'%0'.
Invalid_IACR_identifier\:_'%0'.=
Could_not_extract_required_data_from_IACR_HTML.=
Could_not_retrieve_entry_data_from_IACR_at_'%0'.=
Entry_from_IACR_could_not_be_parsed.=
should_start_with_a_name=始まりは名前でなくてはなりません
should_end_with_a_name=終わりは名前でなくてはなりません
unexpected_closing_curly_bracket=閉じ波かっこが余分にあります
Expand Down
4 changes: 4 additions & 0 deletions src/main/resources/l10n/JabRef_nl.properties
Original file line number Diff line number Diff line change
Expand Up @@ -1819,6 +1819,10 @@ Copy_BibTeX_key_and_title=Kopieer_BibTeX_sleutel_en_titel
File_rename_failed_for_%0_entries.=
Merged_BibTeX_source_code=
Invalid_DOI\:_'%0'.=Ongeldig_DOI\:_'%0'.
Invalid_IACR_identifier\:_'%0'.=
Could_not_extract_required_data_from_IACR_HTML.=
Could_not_retrieve_entry_data_from_IACR_at_'%0'.=
Entry_from_IACR_could_not_be_parsed.=
should_start_with_a_name=
should_end_with_a_name=
unexpected_closing_curly_bracket=
Expand Down
4 changes: 4 additions & 0 deletions src/main/resources/l10n/JabRef_no.properties
Original file line number Diff line number Diff line change
Expand Up @@ -1819,6 +1819,10 @@ Copy_BibTeX_key_and_title=Kopier_BibTeX-n\u00f8kkel_og_tittel
File_rename_failed_for_%0_entries.=
Merged_BibTeX_source_code=
Invalid_DOI\:_'%0'.=Ugyldig_DOI\:_'%0'.
Invalid_IACR_identifier\:_'%0'.=
Could_not_extract_required_data_from_IACR_HTML.=
Could_not_retrieve_entry_data_from_IACR_at_'%0'.=
Entry_from_IACR_could_not_be_parsed.=
should_start_with_a_name=
should_end_with_a_name=
unexpected_closing_curly_bracket=
Expand Down
4 changes: 4 additions & 0 deletions src/main/resources/l10n/JabRef_pt_BR.properties
Original file line number Diff line number Diff line change
Expand Up @@ -1819,6 +1819,10 @@ Copy_BibTeX_key_and_title=Copiar_chave_BibTeX_e_título
File_rename_failed_for_%0_entries.=Renomeação_de_arquivo_falho_para_%0_referências
Merged_BibTeX_source_code=Código_BibTex_combinado
Invalid_DOI\:_'%0'.=DOI_inválida\:_'%0'.
Invalid_IACR_identifier\:_'%0'.=
Could_not_extract_required_data_from_IACR_HTML.=
Could_not_retrieve_entry_data_from_IACR_at_'%0'.=
Entry_from_IACR_could_not_be_parsed.=
should_start_with_a_name=deve_iniciar_com_um_nome
should_end_with_a_name=deve_terminar_com_um_nome
unexpected_closing_curly_bracket=fechamento_de_chaves_inesperado_}
Expand Down
4 changes: 4 additions & 0 deletions src/main/resources/l10n/JabRef_ru.properties
Original file line number Diff line number Diff line change
Expand Up @@ -1819,6 +1819,10 @@ Copy_BibTeX_key_and_title=Копировать_ключ_и_заголовок_Bi
File_rename_failed_for_%0_entries.=Ошибка_переименования_файла_для_%0_записи.
Merged_BibTeX_source_code=Объединенный_исходный_код_BibTeX
Invalid_DOI\:_'%0'.=Недопустимый_DOI-адрес\:_'%0'.
Invalid_IACR_identifier\:_'%0'.=
Could_not_extract_required_data_from_IACR_HTML.=
Could_not_retrieve_entry_data_from_IACR_at_'%0'.=
Entry_from_IACR_could_not_be_parsed.=
should_start_with_a_name=должно_начинаться_с_имени
should_end_with_a_name=должно_заканчиваться_именем
unexpected_closing_curly_bracket=непредвиденная_закрывающая_фигурная_скобка
Expand Down
4 changes: 4 additions & 0 deletions src/main/resources/l10n/JabRef_sv.properties
Original file line number Diff line number Diff line change
Expand Up @@ -1819,6 +1819,10 @@ Copy_BibTeX_key_and_title=Kopiera_BibTeX-nyckel_och_titel
File_rename_failed_for_%0_entries.=Döpa_om_filen_misslyckades_för_%0_poster.
Merged_BibTeX_source_code=Kombinerad_BibTeX-källkod
Invalid_DOI\:_'%0'.=Ogiltig_DOI\:_'%0'.
Invalid_IACR_identifier\:_'%0'.=
Could_not_extract_required_data_from_IACR_HTML.=
Could_not_retrieve_entry_data_from_IACR_at_'%0'.=
Entry_from_IACR_could_not_be_parsed.=
should_start_with_a_name=ska_börja_med_ett_namn
should_end_with_a_name=ska_avslutas_med_ett_namn
unexpected_closing_curly_bracket=oväntad_avslutande_måsvinge
Expand Down
4 changes: 4 additions & 0 deletions src/main/resources/l10n/JabRef_tr.properties
Original file line number Diff line number Diff line change
Expand Up @@ -1819,6 +1819,10 @@ Copy_BibTeX_key_and_title=BibTeX_anahtarı_ve_başlığını_kopyala
File_rename_failed_for_%0_entries.=%0_girdide_dosya_yeniden_adlandırma_başarısız.
Merged_BibTeX_source_code=Birleşik_BibTeX_kaynak_kodu
Invalid_DOI\:_'%0'.=Geçersiz_DOI\:_'%0'.
Invalid_IACR_identifier\:_'%0'.=
Could_not_extract_required_data_from_IACR_HTML.=
Could_not_retrieve_entry_data_from_IACR_at_'%0'.=
Entry_from_IACR_could_not_be_parsed.=
should_start_with_a_name=bir_isimle_başlamalı
should_end_with_a_name=bir_isimle_sonlanmalı
unexpected_closing_curly_bracket=beklenmeyen_küme_parantezi_kapanışı
Expand Down
4 changes: 4 additions & 0 deletions src/main/resources/l10n/JabRef_vi.properties
Original file line number Diff line number Diff line change
Expand Up @@ -1819,6 +1819,10 @@ Copy_BibTeX_key_and_title=
File_rename_failed_for_%0_entries.=
Merged_BibTeX_source_code=
Invalid_DOI\:_'%0'.=DOI_không_hợp_lệ\:_'%0'.
Invalid_IACR_identifier\:_'%0'.=
Could_not_extract_required_data_from_IACR_HTML.=
Could_not_retrieve_entry_data_from_IACR_at_'%0'.=
Entry_from_IACR_could_not_be_parsed.=
should_start_with_a_name=
should_end_with_a_name=
unexpected_closing_curly_bracket=
Expand Down
4 changes: 4 additions & 0 deletions src/main/resources/l10n/JabRef_zh.properties
Original file line number Diff line number Diff line change
Expand Up @@ -1819,6 +1819,10 @@ Copy_BibTeX_key_and_title=复制_BibTeX_键值和标题
File_rename_failed_for_%0_entries.=
Merged_BibTeX_source_code=已合并_BibTeX_源代码
Invalid_DOI\:_'%0'.=不合法的_DOI\:
Invalid_IACR_identifier\:_'%0'.=
Could_not_extract_required_data_from_IACR_HTML.=
Could_not_retrieve_entry_data_from_IACR_at_'%0'.=
Entry_from_IACR_could_not_be_parsed.=
should_start_with_a_name=
should_end_with_a_name=
unexpected_closing_curly_bracket=
Expand Down
Loading