build\reports\project\dependencies.txt`
2. Manually edit depedencies.txt to contain the tree of "compileClasspath" and "implementation" only
-3. sed 's/^.* //' < dependencies.txt | sort | uniq
+3. `sed 's/^.* //' < build/reports/project/dependencies.txt | sort | uniq > build/dependencies-for-external-libraries.txt`
```text
com.github.tomtung:latex2unicode_2.12:0.2.6
com.google.code.gson:gson:2.8.6
com.google.errorprone:error_prone_annotations:2.3.4
com.google.guava:failureaccess:1.0.1
-com.google.guava:guava:29.0-jre
+com.google.guava:guava:30.1-jre
com.google.guava:listenablefuture:9999.0-empty-to-avoid-conflict-with-guava
com.google.j2objc:j2objc-annotations:1.3
+com.googlecode.javaewah:JavaEWAH:1.1.7
com.h2database:h2-mvstore:1.4.200
com.ibm.icu:icu4j:62.1
com.jfoenix:jfoenix:9.0.10
-com.konghq:unirest-java:3.10.00
+com.konghq:unirest-java:3.11.06
com.microsoft.azure:applicationinsights-core:2.4.1
com.microsoft.azure:applicationinsights-logging-log4j2:2.4.1
com.oracle.ojdbc:ojdbc10:19.3.0.0
@@ -498,10 +520,8 @@ com.oracle.ojdbc:ucp:19.3.0.0
com.sun.istack:istack-commons-runtime:3.0.8
com.sun.xml.fastinfoset:FastInfoset:1.2.16
com.tobiasdiez:easybind:2.1.0
-com.vladsch.flexmark:flexmark:0.62.2
com.vladsch.flexmark:flexmark-ext-gfm-strikethrough:0.62.2
com.vladsch.flexmark:flexmark-ext-gfm-tasklist:0.62.2
-com.vladsch.flexmark:flexmark-util:0.62.2
com.vladsch.flexmark:flexmark-util-ast:0.62.2
com.vladsch.flexmark:flexmark-util-builder:0.62.2
com.vladsch.flexmark:flexmark-util-collection:0.62.2
@@ -513,46 +533,52 @@ com.vladsch.flexmark:flexmark-util-misc:0.62.2
com.vladsch.flexmark:flexmark-util-options:0.62.2
com.vladsch.flexmark:flexmark-util-sequence:0.62.2
com.vladsch.flexmark:flexmark-util-visitor:0.62.2
+com.vladsch.flexmark:flexmark-util:0.62.2
+com.vladsch.flexmark:flexmark:0.62.2
commons-cli:commons-cli:1.4
commons-codec:commons-codec:1.11
commons-logging:commons-logging:1.2
de.jensd:fontawesomefx-commons:11.0
de.jensd:fontawesomefx-materialdesignfont:1.7.22-11
-de.saxsys:mvvmfx:1.8.0
de.saxsys:mvvmfx-validation:1.9.0-SNAPSHOT
+de.saxsys:mvvmfx:1.8.0
de.undercouch:citeproc-java:2.1.0-SNAPSHOT
eu.lestard:doc-annotations:0.2
info.debatty:java-string-similarity:2.0.0
-io.github.java-diff-utils:java-diff-utils:4.7
+io.github.java-diff-utils:java-diff-utils:4.9
jakarta.activation:jakarta.activation-api:1.2.1
jakarta.annotation:jakarta.annotation-api:1.3.5
jakarta.xml.bind:jakarta.xml.bind-api:2.3.2
net.jcip:jcip-annotations:1.0
net.jodah:typetools:0.6.1
-org.antlr:antlr4-runtime:4.8-1
org.antlr:antlr-runtime:3.5.2
+org.antlr:antlr4-runtime:4.9
org.apache.commons:commons-csv:1.8
org.apache.commons:commons-lang3:3.9
org.apache.commons:commons-text:1.8
org.apache.httpcomponents:httpasyncclient:4.1.4
-org.apache.httpcomponents:httpclient:4.5.12
-org.apache.httpcomponents:httpcore:4.4.13
+org.apache.httpcomponents:httpclient:4.5.13
org.apache.httpcomponents:httpcore-nio:4.4.13
-org.apache.httpcomponents:httpmime:4.5.12
+org.apache.httpcomponents:httpcore:4.4.13
+org.apache.httpcomponents:httpmime:4.5.13
org.apache.logging.log4j:log4j-api:3.0.0-SNAPSHOT
org.apache.logging.log4j:log4j-core:3.0.0-SNAPSHOT
org.apache.logging.log4j:log4j-jcl:3.0.0-SNAPSHOT
org.apache.logging.log4j:log4j-plugins:3.0.0-SNAPSHOT
org.apache.logging.log4j:log4j-slf4j18-impl:3.0.0-SNAPSHOT
-org.apache.pdfbox:fontbox:2.0.20
-org.apache.pdfbox:pdfbox:2.0.20
-org.apache.pdfbox:xmpbox:2.0.20
-org.apache.tika:tika-core:1.24.1
-org.bouncycastle:bcprov-jdk15on:1.66
-org.checkerframework:checker-qual:2.11.1
-org.controlsfx:controlsfx:11.0.2
-org.fxmisc.flowless:flowless:0.6.1
-org.fxmisc.richtext:richtextfx:0.10.5
+org.apache.lucene:lucene-core:8.7.0
+org.apache.lucene:lucene-queries:8.7.0
+org.apache.lucene:lucene-queryparser:8.7.0
+org.apache.pdfbox:fontbox:2.0.22
+org.apache.pdfbox:pdfbox:2.0.22
+org.apache.pdfbox:xmpbox:2.0.22
+org.apache.tika:tika-core:1.25
+org.bouncycastle:bcprov-jdk15on:1.67
+org.checkerframework:checker-qual:3.5.0
+org.controlsfx:controlsfx:11.0.3
+org.eclipse.jgit:org.eclipse.jgit:5.10.0.202012080955-r
+org.fxmisc.flowless:flowless:0.6.2
+org.fxmisc.richtext:richtextfx:0.10.4
org.fxmisc.undo:undofx:2.1.0
org.fxmisc.wellbehaved:wellbehavedfx:0.3.3
org.glassfish.hk2.external:jakarta.inject:2.6.1
@@ -566,20 +592,22 @@ org.jbibtex:jbibtex:1.0.17
org.jetbrains:annotations:15.0
org.jsoup:jsoup:1.13.1
org.jvnet.staxex:stax-ex:1.8.1
-org.mariadb.jdbc:mariadb-java-client:2.6.2
-org.openjfx:javafx-base:14
-org.openjfx:javafx-controls:14
-org.openjfx:javafx-fxml:14
-org.openjfx:javafx-graphics:14
-org.openjfx:javafx-media:14
-org.openjfx:javafx-swing:14
-org.openjfx:javafx-web:14
-org.ow2.asm:asm:6.2.1
+org.libreoffice:libreoffice:7.0.3
+org.libreoffice:unoloader:7.0.4
+org.mariadb.jdbc:mariadb-java-client:2.7.1
+org.openjfx:javafx-base:15
+org.openjfx:javafx-controls:15
+org.openjfx:javafx-fxml:15
+org.openjfx:javafx-graphics:15
+org.openjfx:javafx-media:15
+org.openjfx:javafx-swing:15
+org.openjfx:javafx-web:15
org.ow2.asm:asm-analysis:6.2.1
org.ow2.asm:asm-commons:6.2.1
org.ow2.asm:asm-tree:6.2.1
org.ow2.asm:asm-util:6.2.1
-org.postgresql:postgresql:42.2.16
+org.ow2.asm:asm:6.2.1
+org.postgresql:postgresql:42.2.18
org.reactfx:reactfx:2.0-M5
org.scala-lang:scala-library:2.12.8
org.slf4j:slf4j-api:2.0.0-alpha1
diff --git a/gradle.properties b/gradle.properties
new file mode 100644
index 00000000000..08b655db0e5
--- /dev/null
+++ b/gradle.properties
@@ -0,0 +1 @@
+org.gradle.vs.watch=true
diff --git a/gradle/wrapper/gradle-wrapper.jar b/gradle/wrapper/gradle-wrapper.jar
index e708b1c023e..62d4c053550 100644
Binary files a/gradle/wrapper/gradle-wrapper.jar and b/gradle/wrapper/gradle-wrapper.jar differ
diff --git a/gradle/wrapper/gradle-wrapper.properties b/gradle/wrapper/gradle-wrapper.properties
index 622ab64a3cb..4d9ca164914 100644
--- a/gradle/wrapper/gradle-wrapper.properties
+++ b/gradle/wrapper/gradle-wrapper.properties
@@ -1,5 +1,5 @@
distributionBase=GRADLE_USER_HOME
distributionPath=wrapper/dists
-distributionUrl=https\://services.gradle.org/distributions/gradle-6.5-bin.zip
+distributionUrl=https\://services.gradle.org/distributions/gradle-6.7.1-bin.zip
zipStoreBase=GRADLE_USER_HOME
zipStorePath=wrapper/dists
diff --git a/gradlew b/gradlew
index 4f906e0c811..fbd7c515832 100755
--- a/gradlew
+++ b/gradlew
@@ -130,7 +130,7 @@ fi
if [ "$cygwin" = "true" -o "$msys" = "true" ] ; then
APP_HOME=`cygpath --path --mixed "$APP_HOME"`
CLASSPATH=`cygpath --path --mixed "$CLASSPATH"`
-
+
JAVACMD=`cygpath --unix "$JAVACMD"`
# We build the pattern for arguments to be converted via cygpath
diff --git a/gradlew.bat b/gradlew.bat
index 107acd32c4e..5093609d512 100644
--- a/gradlew.bat
+++ b/gradlew.bat
@@ -40,7 +40,7 @@ if defined JAVA_HOME goto findJavaFromJavaHome
set JAVA_EXE=java.exe
%JAVA_EXE% -version >NUL 2>&1
-if "%ERRORLEVEL%" == "0" goto execute
+if "%ERRORLEVEL%" == "0" goto init
echo.
echo ERROR: JAVA_HOME is not set and no 'java' command could be found in your PATH.
@@ -54,7 +54,7 @@ goto fail
set JAVA_HOME=%JAVA_HOME:"=%
set JAVA_EXE=%JAVA_HOME%/bin/java.exe
-if exist "%JAVA_EXE%" goto execute
+if exist "%JAVA_EXE%" goto init
echo.
echo ERROR: JAVA_HOME is set to an invalid directory: %JAVA_HOME%
@@ -64,6 +64,21 @@ echo location of your Java installation.
goto fail
+:init
+@rem Get command-line arguments, handling Windows variants
+
+if not "%OS%" == "Windows_NT" goto win9xME_args
+
+:win9xME_args
+@rem Slurp the command line arguments.
+set CMD_LINE_ARGS=
+set _SKIP=2
+
+:win9xME_args_slurp
+if "x%~1" == "x" goto execute
+
+set CMD_LINE_ARGS=%*
+
:execute
@rem Setup the command line
@@ -71,7 +86,7 @@ set CLASSPATH=%APP_HOME%\gradle\wrapper\gradle-wrapper.jar
@rem Execute Gradle
-"%JAVA_EXE%" %DEFAULT_JVM_OPTS% %JAVA_OPTS% %GRADLE_OPTS% "-Dorg.gradle.appname=%APP_BASE_NAME%" -classpath "%CLASSPATH%" org.gradle.wrapper.GradleWrapperMain %*
+"%JAVA_EXE%" %DEFAULT_JVM_OPTS% %JAVA_OPTS% %GRADLE_OPTS% "-Dorg.gradle.appname=%APP_BASE_NAME%" -classpath "%CLASSPATH%" org.gradle.wrapper.GradleWrapperMain %CMD_LINE_ARGS%
:end
@rem End local scope for the variables with windows NT shell
diff --git a/src/main/java/module-info.java b/src/main/java/module-info.java
index 839b1939fdf..0ccb82c21fa 100644
--- a/src/main/java/module-info.java
+++ b/src/main/java/module-info.java
@@ -57,6 +57,7 @@
requires reactfx;
requires commons.cli;
requires com.github.tomtung.latex2unicode;
+ requires fastparse;
requires jbibtex;
requires citeproc.java;
requires antlr.runtime;
diff --git a/src/main/java/org/jabref/gui/Base.css b/src/main/java/org/jabref/gui/Base.css
index e89c9a27680..9c1635a129b 100644
--- a/src/main/java/org/jabref/gui/Base.css
+++ b/src/main/java/org/jabref/gui/Base.css
@@ -427,8 +427,11 @@
}
.check-box > .box > .mark {
- -fx-background-color: -fx-control-inner-background;
-fx-padding: 0.2em 0.2em 0.2em 0.2em;
+}
+
+.check-box:selected > .box > .mark {
+ -fx-background-color: -fx-control-inner-background;
-fx-shape: "M6.61 11.89L3.5 8.78 2.44 9.84 6.61 14l8.95-8.95L14.5 4z";
-fx-stroke-width: 5;
}
diff --git a/src/main/java/org/jabref/gui/DefaultInjector.java b/src/main/java/org/jabref/gui/DefaultInjector.java
index 4cb672fa553..c79e077e23d 100644
--- a/src/main/java/org/jabref/gui/DefaultInjector.java
+++ b/src/main/java/org/jabref/gui/DefaultInjector.java
@@ -44,7 +44,7 @@ private static Object createDependency(Class> clazz) {
} else if (clazz == ProtectedTermsLoader.class) {
return Globals.protectedTermsLoader;
} else if (clazz == ClipBoardManager.class) {
- return Globals.clipboardManager;
+ return Globals.getClipboardManager();
} else if (clazz == UndoManager.class) {
return Globals.undoManager;
} else if (clazz == BibEntryTypesManager.class) {
diff --git a/src/main/java/org/jabref/gui/Globals.java b/src/main/java/org/jabref/gui/Globals.java
index 19e0ded1798..017611aa349 100644
--- a/src/main/java/org/jabref/gui/Globals.java
+++ b/src/main/java/org/jabref/gui/Globals.java
@@ -73,7 +73,8 @@ public class Globals {
public static ExporterFactory exportFactory;
public static CountingUndoManager undoManager = new CountingUndoManager();
public static BibEntryTypesManager entryTypesManager = new BibEntryTypesManager();
- public static ClipBoardManager clipboardManager = new ClipBoardManager(prefs);
+
+ private static ClipBoardManager clipBoardManager = null;
// Key binding preferences
private static KeyBindingRepository keyBindingRepository;
@@ -92,6 +93,13 @@ public static synchronized KeyBindingRepository getKeyPrefs() {
return keyBindingRepository;
}
+ public static synchronized ClipBoardManager getClipboardManager() {
+ if (clipBoardManager == null) {
+ clipBoardManager = new ClipBoardManager(prefs);
+ }
+ return clipBoardManager;
+ }
+
// Background tasks
public static void startBackgroundTasks() {
Globals.fileUpdateMonitor = new DefaultFileUpdateMonitor();
diff --git a/src/main/java/org/jabref/gui/JabRefFrame.java b/src/main/java/org/jabref/gui/JabRefFrame.java
index e751db5784a..74ba19fd5eb 100644
--- a/src/main/java/org/jabref/gui/JabRefFrame.java
+++ b/src/main/java/org/jabref/gui/JabRefFrame.java
@@ -716,13 +716,13 @@ private MenuBar createMenu() {
factory.createMenuItem(StandardActions.COPY, new EditAction(StandardActions.COPY, this, stateManager)),
factory.createSubMenu(StandardActions.COPY_MORE,
- factory.createMenuItem(StandardActions.COPY_TITLE, new CopyMoreAction(StandardActions.COPY_TITLE, dialogService, stateManager, Globals.clipboardManager, prefs)),
- factory.createMenuItem(StandardActions.COPY_KEY, new CopyMoreAction(StandardActions.COPY_KEY, dialogService, stateManager, Globals.clipboardManager, prefs)),
- factory.createMenuItem(StandardActions.COPY_CITE_KEY, new CopyMoreAction(StandardActions.COPY_CITE_KEY, dialogService, stateManager, Globals.clipboardManager, prefs)),
- factory.createMenuItem(StandardActions.COPY_KEY_AND_TITLE, new CopyMoreAction(StandardActions.COPY_KEY_AND_TITLE, dialogService, stateManager, Globals.clipboardManager, prefs)),
- factory.createMenuItem(StandardActions.COPY_KEY_AND_LINK, new CopyMoreAction(StandardActions.COPY_KEY_AND_LINK, dialogService, stateManager, Globals.clipboardManager, prefs)),
- factory.createMenuItem(StandardActions.COPY_CITATION_PREVIEW, new CopyCitationAction(CitationStyleOutputFormat.HTML, dialogService, stateManager, Globals.clipboardManager, prefs.getPreviewPreferences())),
- factory.createMenuItem(StandardActions.EXPORT_SELECTED_TO_CLIPBOARD, new ExportToClipboardAction(this, dialogService, Globals.exportFactory, Globals.clipboardManager, Globals.TASK_EXECUTOR))),
+ factory.createMenuItem(StandardActions.COPY_TITLE, new CopyMoreAction(StandardActions.COPY_TITLE, dialogService, stateManager, Globals.getClipboardManager(), prefs)),
+ factory.createMenuItem(StandardActions.COPY_KEY, new CopyMoreAction(StandardActions.COPY_KEY, dialogService, stateManager, Globals.getClipboardManager(), prefs)),
+ factory.createMenuItem(StandardActions.COPY_CITE_KEY, new CopyMoreAction(StandardActions.COPY_CITE_KEY, dialogService, stateManager, Globals.getClipboardManager(), prefs)),
+ factory.createMenuItem(StandardActions.COPY_KEY_AND_TITLE, new CopyMoreAction(StandardActions.COPY_KEY_AND_TITLE, dialogService, stateManager, Globals.getClipboardManager(), prefs)),
+ factory.createMenuItem(StandardActions.COPY_KEY_AND_LINK, new CopyMoreAction(StandardActions.COPY_KEY_AND_LINK, dialogService, stateManager, Globals.getClipboardManager(), prefs)),
+ factory.createMenuItem(StandardActions.COPY_CITATION_PREVIEW, new CopyCitationAction(CitationStyleOutputFormat.HTML, dialogService, stateManager, Globals.getClipboardManager(), prefs.getPreviewPreferences())),
+ factory.createMenuItem(StandardActions.EXPORT_SELECTED_TO_CLIPBOARD, new ExportToClipboardAction(this, dialogService, Globals.exportFactory, Globals.getClipboardManager(), Globals.TASK_EXECUTOR))),
factory.createMenuItem(StandardActions.PASTE, new EditAction(StandardActions.PASTE, this, stateManager)),
@@ -773,7 +773,7 @@ private MenuBar createMenu() {
new SeparatorMenuItem(),
- factory.createMenuItem(StandardActions.SET_FILE_LINKS, new AutoLinkFilesAction(this, prefs, stateManager, undoManager, Globals.TASK_EXECUTOR)),
+ factory.createMenuItem(StandardActions.SET_FILE_LINKS, new AutoLinkFilesAction(dialogService, prefs, stateManager, undoManager, Globals.TASK_EXECUTOR)),
new SeparatorMenuItem(),
diff --git a/src/main/java/org/jabref/gui/JabRefMain.java b/src/main/java/org/jabref/gui/JabRefMain.java
index 0afc8d7f720..ae0a6acbf96 100644
--- a/src/main/java/org/jabref/gui/JabRefMain.java
+++ b/src/main/java/org/jabref/gui/JabRefMain.java
@@ -4,7 +4,6 @@
import javafx.application.Application;
import javafx.application.Platform;
-import javafx.scene.control.Alert;
import javafx.stage.Stage;
import org.jabref.cli.ArgumentProcessor;
@@ -19,8 +18,6 @@
import org.jabref.logic.protectedterms.ProtectedTermsLoader;
import org.jabref.logic.remote.RemotePreferences;
import org.jabref.logic.remote.client.RemoteClient;
-import org.jabref.logic.util.BuildInfo;
-import org.jabref.logic.util.JavaVersion;
import org.jabref.logic.util.OS;
import org.jabref.migrations.PreferencesMigrations;
import org.jabref.model.database.BibDatabaseMode;
@@ -48,8 +45,6 @@ public static void main(String[] args) {
@Override
public void start(Stage mainStage) {
try {
- // Fail on unsupported Java versions
- ensureCorrectJavaVersion();
FallbackExceptionHandler.installExceptionHandler();
// Init preferences
@@ -93,51 +88,6 @@ public void stop() {
Globals.shutdownThreadPools();
}
- /**
- * Tests if we are running an acceptable Java and terminates JabRef when we are sure the version is not supported.
- * This test uses the requirements for the Java version as specified in gradle.build
. It is possible to
- * define a minimum version including the built number and to indicate whether Java 9 can be used (which it currently
- * can't). It tries to compare this version number to the version of the currently running JVM. The check is
- * optimistic and will rather return true even if we could not exactly determine the version.
- *
- * Note: Users with a very old version like 1.6 will not profit from this since class versions are incompatible and
- * JabRef won't even start. Currently, JabRef won't start with Java 9 either, but the warning that it cannot be used
- * with this version is helpful anyway to prevent users to update from an old 1.8 directly to version 9. Additionally,
- * we soon might have a JabRef that does start with Java 9 but is not perfectly compatible. Therefore, we should leave
- * the Java 9 check alive.
- */
- private static void ensureCorrectJavaVersion() {
- // Check if we are running an acceptable version of Java
- final BuildInfo buildInfo = Globals.BUILD_INFO;
- JavaVersion checker = new JavaVersion();
- final boolean java9Fail = !buildInfo.allowJava9 && checker.isJava9();
- final boolean versionFail = !checker.isAtLeast(buildInfo.minRequiredJavaVersion);
-
- if (java9Fail || versionFail) {
- StringBuilder versionError = new StringBuilder(
- Localization.lang("Your current Java version (%0) is not supported. Please install version %1 or higher.",
- checker.getJavaVersion(),
- buildInfo.minRequiredJavaVersion));
-
- versionError.append("\n");
- versionError.append(Localization.lang("Your Java Runtime Environment is located at %0.", checker.getJavaInstallationDirectory()));
-
- if (!buildInfo.allowJava9) {
- versionError.append("\n");
- versionError.append(Localization.lang("Note that currently, JabRef does not run with Java 9."));
- }
-
- FXDialog alert = new FXDialog(Alert.AlertType.ERROR, Localization.lang("Error"), true);
- alert.setHeaderText(null);
- alert.setContentText(versionError.toString());
-
- // We exit on Java 9 error since this will definitely not work
- if (java9Fail) {
- System.exit(0);
- }
- }
- }
-
private static boolean handleMultipleAppInstances(String[] args) {
RemotePreferences remotePreferences = Globals.prefs.getRemotePreferences();
if (remotePreferences.useRemoteServer()) {
diff --git a/src/main/java/org/jabref/gui/desktop/JabRefDesktop.java b/src/main/java/org/jabref/gui/desktop/JabRefDesktop.java
index 3cd156c24f3..9e7fab8c93a 100644
--- a/src/main/java/org/jabref/gui/desktop/JabRefDesktop.java
+++ b/src/main/java/org/jabref/gui/desktop/JabRefDesktop.java
@@ -212,7 +212,7 @@ public static void openBrowserShowPopup(String url) {
try {
openBrowser(url);
} catch (IOException exception) {
- Globals.clipboardManager.setContent(url);
+ Globals.getClipboardManager().setContent(url);
LOGGER.error("Could not open browser", exception);
String couldNotOpenBrowser = Localization.lang("Could not open browser.");
String openManually = Localization.lang("Please open %0 manually.", url);
diff --git a/src/main/java/org/jabref/gui/edit/CopyDoiUrlAction.java b/src/main/java/org/jabref/gui/edit/CopyDoiUrlAction.java
index 459df55a595..e97b62571b1 100644
--- a/src/main/java/org/jabref/gui/edit/CopyDoiUrlAction.java
+++ b/src/main/java/org/jabref/gui/edit/CopyDoiUrlAction.java
@@ -27,7 +27,7 @@ public void execute() {
Optional urlOptional = DOI.parse(identifier).map(DOI::getURIAsASCIIString);
if (urlOptional.isPresent()) {
- Globals.clipboardManager.setContent(urlOptional.get());
+ Globals.getClipboardManager().setContent(urlOptional.get());
JabRefGUI.getMainFrame().getDialogService().notify(Localization.lang("The link has been copied to the clipboard."));
} else {
JabRefGUI.getMainFrame().getDialogService().notify(Localization.lang("Invalid DOI: '%0'.", identifier));
diff --git a/src/main/java/org/jabref/gui/entryeditor/fileannotationtab/FileAnnotationTabViewModel.java b/src/main/java/org/jabref/gui/entryeditor/fileannotationtab/FileAnnotationTabViewModel.java
index d98e5e59d91..ff0283a92ee 100644
--- a/src/main/java/org/jabref/gui/entryeditor/fileannotationtab/FileAnnotationTabViewModel.java
+++ b/src/main/java/org/jabref/gui/entryeditor/fileannotationtab/FileAnnotationTabViewModel.java
@@ -123,7 +123,7 @@ public void copyCurrentAnnotation() {
sj.add(Localization.lang("Content") + ": " + getCurrentAnnotation().getContent());
sj.add(Localization.lang("Marking") + ": " + getCurrentAnnotation().markingProperty().get());
- Globals.clipboardManager.setContent(sj.toString());
+ Globals.getClipboardManager().setContent(sj.toString());
}
private FileAnnotationViewModel getCurrentAnnotation() {
diff --git a/src/main/java/org/jabref/gui/externalfiles/AutoLinkFilesAction.java b/src/main/java/org/jabref/gui/externalfiles/AutoLinkFilesAction.java
index 3bd30ed7ce7..6c51f8889dd 100644
--- a/src/main/java/org/jabref/gui/externalfiles/AutoLinkFilesAction.java
+++ b/src/main/java/org/jabref/gui/externalfiles/AutoLinkFilesAction.java
@@ -7,7 +7,6 @@
import javafx.concurrent.Task;
import org.jabref.gui.DialogService;
-import org.jabref.gui.JabRefFrame;
import org.jabref.gui.StateManager;
import org.jabref.gui.actions.SimpleCommand;
import org.jabref.gui.externalfiletype.ExternalFileTypes;
@@ -34,8 +33,8 @@ public class AutoLinkFilesAction extends SimpleCommand {
private final UndoManager undoManager;
private final TaskExecutor taskExecutor;
- public AutoLinkFilesAction(JabRefFrame frame, PreferencesService preferences, StateManager stateManager, UndoManager undoManager, TaskExecutor taskExecutor) {
- this.dialogService = frame.getDialogService();
+ public AutoLinkFilesAction(DialogService dialogService, PreferencesService preferences, StateManager stateManager, UndoManager undoManager, TaskExecutor taskExecutor) {
+ this.dialogService = dialogService;
this.preferences = preferences;
this.stateManager = stateManager;
this.undoManager = undoManager;
@@ -43,38 +42,50 @@ public AutoLinkFilesAction(JabRefFrame frame, PreferencesService preferences, St
this.executable.bind(needsDatabase(this.stateManager).and(needsEntriesSelected(stateManager)));
this.statusMessage.bind(BindingsHelper.ifThenElse(executable, "", Localization.lang("This operation requires one or more entries to be selected.")));
-
}
@Override
public void execute() {
- BibDatabaseContext database = stateManager.getActiveDatabase().orElseThrow(() -> new NullPointerException("Database null"));
- List entries = stateManager.getSelectedEntries();
-
- final NamedCompound nc = new NamedCompound(Localization.lang("Automatically set file links"));
- AutoSetFileLinksUtil util = new AutoSetFileLinksUtil(
+ final BibDatabaseContext database = stateManager.getActiveDatabase().orElseThrow(() -> new NullPointerException("Database null"));
+ final List entries = stateManager.getSelectedEntries();
+ final AutoSetFileLinksUtil util = new AutoSetFileLinksUtil(
database,
preferences.getFilePreferences(),
preferences.getAutoLinkPreferences(),
ExternalFileTypes.getInstance());
- Task> linkFilesTask = new Task<>() {
+ final NamedCompound nc = new NamedCompound(Localization.lang("Automatically set file links"));
+ Task linkFilesTask = new Task<>() {
@Override
- protected List call() {
+ protected AutoSetFileLinksUtil.LinkFilesResult call() {
return util.linkAssociatedFiles(entries, nc);
}
@Override
protected void succeeded() {
- if (!getValue().isEmpty()) {
- if (nc.hasEdits()) {
- nc.end();
- undoManager.addEdit(nc);
- }
- dialogService.notify(Localization.lang("Finished automatically setting external links."));
- } else {
- dialogService.notify(Localization.lang("Finished automatically setting external links.") + " " + Localization.lang("No files found."));
+ AutoSetFileLinksUtil.LinkFilesResult result = getValue();
+
+ if (!result.getFileExceptions().isEmpty()) {
+ dialogService.showWarningDialogAndWait(
+ Localization.lang("Automatically set file links"),
+ Localization.lang("Problem finding files. See error log for details."));
+ return;
}
+
+ if (result.getChangedEntries().isEmpty()) {
+ dialogService.showWarningDialogAndWait("Automatically set file links",
+ Localization.lang("Finished automatically setting external links.") + "\n"
+ + Localization.lang("No files found."));
+ return;
+ }
+
+ if (nc.hasEdits()) {
+ nc.end();
+ undoManager.addEdit(nc);
+ }
+
+ dialogService.notify(Localization.lang("Finished automatically setting external links.") + " "
+ + Localization.lang("Changed %0 entries.", String.valueOf(result.getChangedEntries().size())));
}
};
diff --git a/src/main/java/org/jabref/gui/externalfiles/AutoSetFileLinksUtil.java b/src/main/java/org/jabref/gui/externalfiles/AutoSetFileLinksUtil.java
index 2bc5a42b410..e783ee0aed3 100644
--- a/src/main/java/org/jabref/gui/externalfiles/AutoSetFileLinksUtil.java
+++ b/src/main/java/org/jabref/gui/externalfiles/AutoSetFileLinksUtil.java
@@ -31,10 +31,31 @@
public class AutoSetFileLinksUtil {
+ public static class LinkFilesResult {
+ private final List changedEntries = new ArrayList<>();
+ private final List fileExceptions = new ArrayList<>();
+
+ protected void addBibEntry(BibEntry bibEntry) {
+ changedEntries.add(bibEntry);
+ }
+
+ protected void addFileException(IOException exception) {
+ fileExceptions.add(exception);
+ }
+
+ public List getChangedEntries() {
+ return changedEntries;
+ }
+
+ public List getFileExceptions() {
+ return fileExceptions;
+ }
+ }
+
private static final Logger LOGGER = LoggerFactory.getLogger(AutoSetFileLinksUtil.class);
- private List directories;
- private AutoLinkPreferences autoLinkPreferences;
- private ExternalFileTypes externalFileTypes;
+ private final List directories;
+ private final AutoLinkPreferences autoLinkPreferences;
+ private final ExternalFileTypes externalFileTypes;
public AutoSetFileLinksUtil(BibDatabaseContext databaseContext, FilePreferences filePreferences, AutoLinkPreferences autoLinkPreferences, ExternalFileTypes externalFileTypes) {
this(databaseContext.getFileDirectories(filePreferences), autoLinkPreferences, externalFileTypes);
@@ -46,36 +67,41 @@ private AutoSetFileLinksUtil(List directories, AutoLinkPreferences autoLin
this.externalFileTypes = externalFileTypes;
}
- public List linkAssociatedFiles(List entries, NamedCompound ce) {
- List changedEntries = new ArrayList<>();
- for (BibEntry entry : entries) {
+ public LinkFilesResult linkAssociatedFiles(List entries, NamedCompound ce) {
+ LinkFilesResult result = new LinkFilesResult();
+ for (BibEntry entry : entries) {
List linkedFiles = new ArrayList<>();
+
try {
linkedFiles = findAssociatedNotLinkedFiles(entry);
} catch (IOException e) {
+ result.addFileException(e);
LOGGER.error("Problem finding files", e);
}
if (ce != null) {
+ boolean changed = false;
+
for (LinkedFile linkedFile : linkedFiles) {
// store undo information
String newVal = FileFieldWriter.getStringRepresentation(linkedFile);
-
String oldVal = entry.getField(StandardField.FILE).orElse(null);
-
UndoableFieldChange fieldChange = new UndoableFieldChange(entry, StandardField.FILE, oldVal, newVal);
ce.addEdit(fieldChange);
+ changed = true;
DefaultTaskExecutor.runInJavaFXThread(() -> {
entry.addFile(linkedFile);
});
}
- changedEntries.add(entry);
+ if (changed) {
+ result.addBibEntry(entry);
+ }
}
}
- return changedEntries;
+ return result;
}
public List findAssociatedNotLinkedFiles(BibEntry entry) throws IOException {
diff --git a/src/main/java/org/jabref/gui/fieldeditors/LinkedFileViewModel.java b/src/main/java/org/jabref/gui/fieldeditors/LinkedFileViewModel.java
index 7f14652a529..4586b3ad689 100644
--- a/src/main/java/org/jabref/gui/fieldeditors/LinkedFileViewModel.java
+++ b/src/main/java/org/jabref/gui/fieldeditors/LinkedFileViewModel.java
@@ -317,14 +317,14 @@ public boolean isGeneratedNameSameAsOriginal() {
}
/**
- * Compares suggested filepath of current linkedFile with existing filepath.
+ * Compares suggested directory of current linkedFile with existing filepath directory.
*
* @return true if suggested filepath is same as existing filepath.
*/
public boolean isGeneratedPathSameAsOriginal() {
Optional newDir = databaseContext.getFirstExistingFileDir(filePreferences);
- Optional currentDir = linkedFile.findIn(databaseContext, filePreferences);
+ Optional currentDir = linkedFile.findIn(databaseContext, filePreferences).map(Path::getParent);
BiPredicate equality = (fileA, fileB) -> {
try {
@@ -434,7 +434,7 @@ public void download() {
List linkedFiles = entry.getFiles();
int oldFileIndex = -1;
int i = 0;
- while (i < linkedFiles.size() && oldFileIndex == -1) {
+ while ((i < linkedFiles.size()) && (oldFileIndex == -1)) {
LinkedFile file = linkedFiles.get(i);
// The file type changes as part of download process (see prepareDownloadTask), thus we only compare by link
if (file.getLink().equalsIgnoreCase(linkedFile.getLink())) {
diff --git a/src/main/java/org/jabref/gui/fieldeditors/LinkedFilesEditor.java b/src/main/java/org/jabref/gui/fieldeditors/LinkedFilesEditor.java
index 846d2c7a709..b005a1a0624 100644
--- a/src/main/java/org/jabref/gui/fieldeditors/LinkedFilesEditor.java
+++ b/src/main/java/org/jabref/gui/fieldeditors/LinkedFilesEditor.java
@@ -267,15 +267,15 @@ public ContextAction(StandardActions command, LinkedFileViewModel linkedFile, Pr
this.executable.bind(
switch (command) {
- case RENAME_FILE_TO_PATTERN -> Bindings.createBooleanBinding(
+ case RENAME_FILE_TO_PATTERN, MOVE_FILE_TO_FOLDER_AND_RENAME -> Bindings.createBooleanBinding(
() -> !linkedFile.getFile().isOnlineLink()
&& linkedFile.getFile().findIn(databaseContext, preferencesService.getFilePreferences()).isPresent()
&& !linkedFile.isGeneratedNameSameAsOriginal(),
linkedFile.getFile().linkProperty());
- case MOVE_FILE_TO_FOLDER_AND_RENAME, MOVE_FILE_TO_FOLDER -> Bindings.createBooleanBinding(
+ case MOVE_FILE_TO_FOLDER -> Bindings.createBooleanBinding(
() -> !linkedFile.getFile().isOnlineLink()
&& linkedFile.getFile().findIn(databaseContext, preferencesService.getFilePreferences()).isPresent()
- && linkedFile.isGeneratedPathSameAsOriginal(),
+ && !linkedFile.isGeneratedPathSameAsOriginal(),
linkedFile.getFile().linkProperty());
case DOWNLOAD_FILE -> Bindings.createBooleanBinding(
() -> linkedFile.getFile().isOnlineLink(),
diff --git a/src/main/java/org/jabref/gui/maintable/MainTable.java b/src/main/java/org/jabref/gui/maintable/MainTable.java
index faf642b99f1..fa236101928 100644
--- a/src/main/java/org/jabref/gui/maintable/MainTable.java
+++ b/src/main/java/org/jabref/gui/maintable/MainTable.java
@@ -115,7 +115,7 @@ public MainTable(MainTableDataModel model,
stateManager,
preferencesService,
undoManager,
- Globals.clipboardManager))
+ Globals.getClipboardManager()))
.setOnDragDetected(this::handleOnDragDetected)
.setOnDragDropped(this::handleOnDragDropped)
.setOnDragOver(this::handleOnDragOver)
@@ -224,7 +224,7 @@ public void copy() {
if (!selectedEntries.isEmpty()) {
try {
- Globals.clipboardManager.setContent(selectedEntries);
+ Globals.getClipboardManager().setContent(selectedEntries);
dialogService.notify(libraryTab.formatOutputMessage(Localization.lang("Copied"), selectedEntries.size()));
} catch (IOException e) {
LOGGER.error("Error while copying selected entries to clipboard", e);
@@ -293,7 +293,7 @@ private void clearAndSelectLast() {
public void paste(BibDatabaseMode bibDatabaseMode) {
// Find entries in clipboard
- List entriesToAdd = Globals.clipboardManager.extractData();
+ List entriesToAdd = Globals.getClipboardManager().extractData();
ImportCleanup cleanup = new ImportCleanup(bibDatabaseMode);
cleanup.doPostCleanup(entriesToAdd);
libraryTab.insertEntries(entriesToAdd);
diff --git a/src/main/java/org/jabref/gui/preview/PreviewViewer.java b/src/main/java/org/jabref/gui/preview/PreviewViewer.java
index 4cf95de899d..68b71fe7ca6 100644
--- a/src/main/java/org/jabref/gui/preview/PreviewViewer.java
+++ b/src/main/java/org/jabref/gui/preview/PreviewViewer.java
@@ -104,7 +104,7 @@ public class PreviewViewer extends ScrollPane implements InvalidationListener {
public PreviewViewer(BibDatabaseContext database, DialogService dialogService, StateManager stateManager) {
this.database = Objects.requireNonNull(database);
this.dialogService = dialogService;
- this.clipBoardManager = Globals.clipboardManager;
+ this.clipBoardManager = Globals.getClipboardManager();
setFitToHeight(true);
setFitToWidth(true);
diff --git a/src/main/java/org/jabref/logic/citationkeypattern/BracketedPattern.java b/src/main/java/org/jabref/logic/citationkeypattern/BracketedPattern.java
index a3c93dfd898..0e5a7d4a518 100644
--- a/src/main/java/org/jabref/logic/citationkeypattern/BracketedPattern.java
+++ b/src/main/java/org/jabref/logic/citationkeypattern/BracketedPattern.java
@@ -1,5 +1,6 @@
package org.jabref.logic.citationkeypattern;
+import java.text.Normalizer;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.Collections;
@@ -31,6 +32,7 @@
import org.jabref.model.entry.field.InternalField;
import org.jabref.model.entry.field.StandardField;
import org.jabref.model.strings.LatexToUnicodeAdapter;
+import org.jabref.model.strings.StringUtil;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
@@ -59,13 +61,14 @@ public class BracketedPattern {
*/
private static final Pattern NOT_CAPITAL_CHARACTER = Pattern.compile("[^A-Z]");
/**
- * Matches with "({[A-Z]}+)", which should be used to abbreviate the name of an institution
+ * Matches uppercase english letters between "({" and "})", which should be used to abbreviate the name of an institution
*/
- private static final Pattern ABBREVIATIONS = Pattern.compile(".*\\(\\{[A-Z]+}\\).*");
+ private static final Pattern INLINE_ABBREVIATION = Pattern.compile("(?<=\\(\\{)[A-Z]+(?=}\\))");
/**
* Matches with "dep"/"dip", case insensitive
*/
private static final Pattern DEPARTMENTS = Pattern.compile("^d[ei]p.*", Pattern.CASE_INSENSITIVE);
+ private static final Pattern WHITESPACE = Pattern.compile("\\p{javaWhitespace}");
private enum Institution {
SCHOOL,
@@ -74,9 +77,9 @@ private enum Institution {
TECHNOLOGY;
/**
- * Matches "uni" at the start of a string or after a space, case insensitive
+ * Matches "uni" followed by "v" or "b", at the start of a string or after a space, case insensitive
*/
- private static final Pattern UNIVERSITIES = Pattern.compile("^uni.*", Pattern.CASE_INSENSITIVE);
+ private static final Pattern UNIVERSITIES = Pattern.compile("^uni(v|b|$).*", Pattern.CASE_INSENSITIVE);
/**
* Matches with "tech", case insensitive
*/
@@ -492,9 +495,9 @@ private static AuthorList createAuthorList(String unparsedAuthors) {
for (Author author : AuthorList.parse(unparsedAuthors).getAuthors()) {
// If the author is an institution, use an institution key instead of the full name
String lastName = author.getLast()
- .map(LatexToUnicodeAdapter::format)
- .map(isInstitution(author) ?
- BracketedPattern::generateInstitutionKey : Function.identity())
+ .map(lastPart -> isInstitution(author) ?
+ generateInstitutionKey(lastPart) :
+ LatexToUnicodeAdapter.format(lastPart))
.orElse(null);
authorList.addAuthor(
author.getFirst().map(LatexToUnicodeAdapter::format).orElse(null),
@@ -508,14 +511,15 @@ private static AuthorList createAuthorList(String unparsedAuthors) {
}
/**
- * Checks if an author is an institution by verifying that only the last name is present.
+ * Checks if an author is an institution which can get a citation key from {@link #generateInstitutionKey(String)}.
*
* @param author the checked author
- * @return true if only the last name is present
+ * @return true if only the last name is present and it contains at least one whitespace character.
*/
private static boolean isInstitution(Author author) {
return author.getFirst().isEmpty() && author.getFirstAbbr().isEmpty() && author.getJr().isEmpty()
- && author.getVon().isEmpty() && author.getLast().isPresent();
+ && author.getVon().isEmpty() && author.getLast().isPresent()
+ && WHITESPACE.matcher(author.getLast().get()).find();
}
/**
@@ -658,52 +662,31 @@ public static String camelizeSignificantWordsInTitle(String title) {
}
public static String removeSmallWords(String title) {
- StringJoiner stringJoiner = new StringJoiner(" ");
String formattedTitle = formatTitle(title);
try (Scanner titleScanner = new Scanner(formattedTitle)) {
- mainl:
- while (titleScanner.hasNext()) {
- String word = titleScanner.next();
-
- for (String smallWord : Word.SMALLER_WORDS) {
- if (word.equalsIgnoreCase(smallWord)) {
- continue mainl;
- }
- }
-
- stringJoiner.add(word);
- }
+ return titleScanner.tokens()
+ .filter(Predicate.not(
+ Word::isSmallerWord))
+ .collect(Collectors.joining(" "));
}
-
- return stringJoiner.toString();
}
private static String getTitleWordsWithSpaces(int number, String title) {
- StringJoiner stringJoiner = new StringJoiner(" ");
String formattedTitle = formatTitle(title);
- int words = 0;
try (Scanner titleScanner = new Scanner(formattedTitle)) {
- while (titleScanner.hasNext() && (words < number)) {
- String word = titleScanner.next();
-
- stringJoiner.add(word);
- words++;
- }
+ return titleScanner.tokens()
+ .limit(number)
+ .collect(Collectors.joining(" "));
}
-
- return stringJoiner.toString();
}
private static String keepLettersAndDigitsOnly(String in) {
- StringBuilder stringBuilder = new StringBuilder();
- for (int i = 0; i < in.length(); i++) {
- if (Character.isLetterOrDigit(in.charAt(i))) {
- stringBuilder.append(in.charAt(i));
- }
- }
- return stringBuilder.toString();
+ return in.codePoints()
+ .filter(Character::isLetterOrDigit)
+ .collect(StringBuilder::new, StringBuilder::appendCodePoint, StringBuilder::append)
+ .toString();
}
/**
@@ -1131,51 +1114,6 @@ protected static List parseFieldAndModifiers(String arg) {
return parts;
}
- /**
- * Will remove diacritics from the content.
- *
- * - Replaces umlaut: \"x with xe, e.g. \"o -> oe, \"u -> ue, etc.
- * - Removes all other diacritics: \?x -> x, e.g. \'a -> a, etc.
- *
- *
- * @param content The content.
- * @return The content without diacritics.
- */
- private static String removeDiacritics(String content) {
- if (content.isEmpty()) {
- return content;
- }
-
- String result = content;
- // Replace umlaut with '?e'
- result = result.replaceAll("\\{\\\\\"([a-zA-Z])\\}", "$1e");
- result = result.replaceAll("\\\\\"\\{([a-zA-Z])\\}", "$1e");
- result = result.replaceAll("\\\\\"([a-zA-Z])", "$1e");
- // Remove diacritics
- result = result.replaceAll("\\{\\\\.([a-zA-Z])\\}", "$1");
- result = result.replaceAll("\\\\.\\{([a-zA-Z])\\}", "$1");
- result = result.replaceAll("\\\\.([a-zA-Z])", "$1");
- return result;
- }
-
- /**
- * Unifies umlauts.
- *
- * - Replaces: $\ddot{\mathrm{X}}$ (an alternative umlaut) with: {\"X}
- * - Replaces: \?{X} and \?X with {\?X}, where ? is a diacritic symbol
- *
- *
- * @param content The content.
- * @return The content with unified diacritics.
- */
- private static String unifyDiacritics(String content) {
- return content.replaceAll(
- "\\$\\\\ddot\\{\\\\mathrm\\{([^\\}])\\}\\}\\$",
- "{\\\"$1}").replaceAll(
- "(\\\\[^\\-a-zA-Z])\\{?([a-zA-Z])\\}?",
- "{$1$2}");
- }
-
/**
*
* An author or editor may be and institution not a person. In that case the key generator builds very long keys,
@@ -1248,15 +1186,20 @@ private static String generateInstitutionKey(String content) {
return "";
}
- String result = content;
- result = unifyDiacritics(result);
- result = result.replaceAll("^\\{", "").replaceAll("}$", "");
- Matcher matcher = ABBREVIATIONS.matcher(result);
- if (matcher.matches()) {
- return matcher.group(1);
+ Matcher matcher = INLINE_ABBREVIATION.matcher(content);
+ if (matcher.find()) {
+ return LatexToUnicodeAdapter.format(matcher.group());
}
- result = removeDiacritics(result);
+ Optional unicodeFormattedName = LatexToUnicodeAdapter.parse(content);
+ if (unicodeFormattedName.isEmpty()) {
+ LOGGER.warn("{} could not be converted to unicode. This can result in an incorrect or missing institute citation key", content);
+ }
+ String result = unicodeFormattedName.orElse(Normalizer.normalize(content, Normalizer.Form.NFC));
+
+ // Special characters can't be allowed past this point because the citation key generator might replace them with multiple mixed-case characters
+ result = StringUtil.replaceSpecialCharacters(result);
+
String[] institutionNameTokens = result.split(",");
// Key parts
@@ -1335,7 +1278,6 @@ private static String generateInstitutionKey(String content) {
* institution keyword and has an uppercase first letter, except univ/tech key word.
*
* @param word to check
- * @return
*/
private static boolean noOtherInstitutionKeyWord(String word) {
return !DEPARTMENTS.matcher(word).matches()
diff --git a/src/main/java/org/jabref/logic/formatter/casechanger/Word.java b/src/main/java/org/jabref/logic/formatter/casechanger/Word.java
index 65474d3d2fd..bf5eee51bb6 100644
--- a/src/main/java/org/jabref/logic/formatter/casechanger/Word.java
+++ b/src/main/java/org/jabref/logic/formatter/casechanger/Word.java
@@ -1,11 +1,11 @@
package org.jabref.logic.formatter.casechanger;
import java.util.Arrays;
-import java.util.Collections;
import java.util.HashSet;
import java.util.Locale;
import java.util.Objects;
import java.util.Set;
+import java.util.stream.Collectors;
/**
* Represents a word in a title of a bibtex entry.
@@ -13,7 +13,12 @@
* A word can have protected chars (enclosed in '{' '}') and may be a small (a, an, the, ...) word.
*/
public final class Word {
+ /**
+ * Set containing common lowercase function words
+ */
public static final Set SMALLER_WORDS;
+ private final char[] chars;
+ private final boolean[] protectedChars;
static {
Set smallerWords = new HashSet<>();
@@ -26,12 +31,11 @@ public final class Word {
smallerWords.addAll(Arrays.asList("and", "but", "for", "nor", "or", "so", "yet"));
// unmodifiable for thread safety
- SMALLER_WORDS = Collections.unmodifiableSet(smallerWords);
+ SMALLER_WORDS = smallerWords.stream()
+ .map(word -> word.toLowerCase(Locale.ROOT))
+ .collect(Collectors.toUnmodifiableSet());
}
- private final char[] chars;
- private final boolean[] protectedChars;
-
public Word(char[] chars, boolean[] protectedChars) {
this.chars = Objects.requireNonNull(chars);
this.protectedChars = Objects.requireNonNull(protectedChars);
@@ -41,16 +45,21 @@ public Word(char[] chars, boolean[] protectedChars) {
}
}
+ /**
+ * Case-insensitive check against {@link Word#SMALLER_WORDS}. Checks for common function words.
+ */
+ public static boolean isSmallerWord(String word) {
+ return SMALLER_WORDS.contains(word.toLowerCase(Locale.ROOT));
+ }
+
/**
* Only change letters of the word that are unprotected to upper case.
*/
public void toUpperCase() {
for (int i = 0; i < chars.length; i++) {
- if (protectedChars[i]) {
- continue;
+ if (!protectedChars[i]) {
+ chars[i] = Character.toUpperCase(chars[i]);
}
-
- chars[i] = Character.toUpperCase(chars[i]);
}
}
@@ -59,24 +68,18 @@ public void toUpperCase() {
*/
public void toLowerCase() {
for (int i = 0; i < chars.length; i++) {
- if (protectedChars[i]) {
- continue;
+ if (!protectedChars[i]) {
+ chars[i] = Character.toLowerCase(chars[i]);
}
-
- chars[i] = Character.toLowerCase(chars[i]);
}
}
public void toUpperFirst() {
for (int i = 0; i < chars.length; i++) {
- if (protectedChars[i]) {
- continue;
- }
-
- if (i == 0) {
- chars[i] = Character.toUpperCase(chars[i]);
- } else {
- chars[i] = Character.toLowerCase(chars[i]);
+ if (!protectedChars[i]) {
+ chars[i] = (i == 0) ?
+ Character.toUpperCase(chars[i]) :
+ Character.toLowerCase(chars[i]);
}
}
}
diff --git a/src/main/java/org/jabref/logic/importer/WebFetchers.java b/src/main/java/org/jabref/logic/importer/WebFetchers.java
index b73dbf8191b..b37760bea66 100644
--- a/src/main/java/org/jabref/logic/importer/WebFetchers.java
+++ b/src/main/java/org/jabref/logic/importer/WebFetchers.java
@@ -20,13 +20,11 @@
import org.jabref.logic.importer.fetcher.DiVA;
import org.jabref.logic.importer.fetcher.DoiFetcher;
import org.jabref.logic.importer.fetcher.DoiResolution;
-import org.jabref.logic.importer.fetcher.GoogleScholar;
import org.jabref.logic.importer.fetcher.GvkFetcher;
import org.jabref.logic.importer.fetcher.IEEE;
import org.jabref.logic.importer.fetcher.INSPIREFetcher;
import org.jabref.logic.importer.fetcher.IacrEprintFetcher;
import org.jabref.logic.importer.fetcher.IsbnFetcher;
-import org.jabref.logic.importer.fetcher.JstorFetcher;
import org.jabref.logic.importer.fetcher.LibraryOfCongress;
import org.jabref.logic.importer.fetcher.MathSciNet;
import org.jabref.logic.importer.fetcher.MedlineFetcher;
@@ -96,7 +94,7 @@ public static SortedSet getSearchBasedFetchers(ImportFormatP
set.add(new ZbMATH(importFormatPreferences));
// see https://github.com/JabRef/jabref/issues/5804
// set.add(new ACMPortalFetcher(importFormatPreferences));
- set.add(new GoogleScholar(importFormatPreferences));
+ // set.add(new GoogleScholar(importFormatPreferences));
set.add(new DBLPFetcher(importFormatPreferences));
set.add(new SpringerFetcher());
set.add(new CrossRef());
@@ -105,7 +103,7 @@ public static SortedSet getSearchBasedFetchers(ImportFormatP
set.add(new IEEE(importFormatPreferences));
set.add(new CompositeSearchBasedFetcher(set, 30));
set.add(new CollectionOfComputerScienceBibliographiesFetcher(importFormatPreferences));
- set.add(new JstorFetcher(importFormatPreferences));
+ // set.add(new JstorFetcher(importFormatPreferences));
return set;
}
@@ -127,7 +125,7 @@ public static SortedSet getIdBasedFetchers(ImportFormatPreferenc
set.add(new IacrEprintFetcher(importFormatPreferences));
set.add(new RfcFetcher(importFormatPreferences));
set.add(new Medra());
- set.add(new JstorFetcher(importFormatPreferences));
+ // set.add(new JstorFetcher(importFormatPreferences));
return set;
}
@@ -169,8 +167,8 @@ public static Set getFullTextFetchers(ImportFormatPreferences i
fetchers.add(new IEEE(importFormatPreferences));
fetchers.add(new ApsFetcher());
// Meta search
- fetchers.add(new JstorFetcher(importFormatPreferences));
- fetchers.add(new GoogleScholar(importFormatPreferences));
+ // fetchers.add(new JstorFetcher(importFormatPreferences));
+ // fetchers.add(new GoogleScholar(importFormatPreferences));
fetchers.add(new OpenAccessDoi());
return fetchers;
diff --git a/src/main/java/org/jabref/logic/importer/fetcher/ComplexSearchQuery.java b/src/main/java/org/jabref/logic/importer/fetcher/ComplexSearchQuery.java
index ade12d2d8b9..0d1f0d39c6f 100644
--- a/src/main/java/org/jabref/logic/importer/fetcher/ComplexSearchQuery.java
+++ b/src/main/java/org/jabref/logic/importer/fetcher/ComplexSearchQuery.java
@@ -21,8 +21,9 @@ public class ComplexSearchQuery {
private final Integer toYear;
private final Integer singleYear;
private final String journal;
+ private final String doi;
- private ComplexSearchQuery(List defaultField, List authors, List titlePhrases, List abstractPhrases, Integer fromYear, Integer toYear, Integer singleYear, String journal) {
+ private ComplexSearchQuery(List defaultField, List authors, List titlePhrases, List abstractPhrases, Integer fromYear, Integer toYear, Integer singleYear, String journal, String doi) {
this.defaultField = defaultField;
this.authors = authors;
this.titlePhrases = titlePhrases;
@@ -32,6 +33,7 @@ private ComplexSearchQuery(List defaultField, List authors, List
this.toYear = toYear;
this.journal = journal;
this.singleYear = singleYear;
+ this.doi = doi;
}
public static ComplexSearchQuery fromTerms(List terms) {
@@ -45,6 +47,7 @@ public static ComplexSearchQuery fromTerms(List terms) {
case "journal" -> builder.journal(termText);
case "year" -> builder.singleYear(Integer.valueOf(termText));
case "year-range" -> builder.parseYearRange(termText);
+ case "doi" -> builder.DOI(termText);
case "default" -> builder.defaultFieldPhrase(termText);
// add unknown field as default field
default -> builder.defaultFieldPhrase(termText);
@@ -85,6 +88,10 @@ public Optional getJournal() {
return Optional.ofNullable(journal);
}
+ public Optional getDOI() {
+ return Optional.ofNullable(doi);
+ }
+
public static ComplexSearchQueryBuilder builder() {
return new ComplexSearchQueryBuilder();
}
@@ -122,12 +129,15 @@ public boolean equals(Object o) {
if (getSingleYear().isPresent() ? !getSingleYear().equals(that.getSingleYear()) : that.getSingleYear().isPresent()) {
return false;
}
- return getJournal().isPresent() ? getJournal().equals(that.getJournal()) : !that.getJournal().isPresent();
+ if (getDOI().isPresent() ? !getDOI().equals(that.getDOI()) : that.getDOI().isPresent()) {
+ return false;
+ }
+ return getJournal().isPresent() ? getJournal().equals(that.getJournal()) : that.getJournal().isEmpty();
}
@Override
public int hashCode() {
- return Objects.hash(defaultField, getAuthors(), getSingleYear(), getAbstractPhrases(), getFromYear(), getToYear(), getTitlePhrases(), getJournal());
+ return Objects.hash(defaultField, getAuthors(), getSingleYear(), getAbstractPhrases(), getFromYear(), getToYear(), getTitlePhrases(), getJournal(), getDOI());
}
@Override
@@ -138,6 +148,7 @@ public String toString() {
getFromYear().ifPresent(fromYear -> stringJoiner.add(fromYear.toString()));
getToYear().ifPresent(toYear -> stringJoiner.add(toYear.toString()));
getJournal().ifPresent(stringJoiner::add);
+ getDOI().ifPresent(newElement -> stringJoiner.add("doi:" + newElement));
stringJoiner.add(String.join(" ", getTitlePhrases()))
.add(String.join(" ", getDefaultFieldPhrases()))
.add(String.join(" ", getAuthors()))
@@ -147,11 +158,12 @@ public String toString() {
}
public static class ComplexSearchQueryBuilder {
- private List defaultFieldPhrases = new ArrayList<>();
- private List authors = new ArrayList<>();
- private List titlePhrases = new ArrayList<>();
- private List abstractPhrases = new ArrayList<>();
+ private final List defaultFieldPhrases = new ArrayList<>();
+ private final List authors = new ArrayList<>();
+ private final List titlePhrases = new ArrayList<>();
+ private final List abstractPhrases = new ArrayList<>();
private String journal;
+ private String doi;
private Integer fromYear;
private Integer toYear;
private Integer singleYear;
@@ -229,6 +241,14 @@ public ComplexSearchQueryBuilder journal(String journal) {
return this;
}
+ public ComplexSearchQueryBuilder DOI(String doi) {
+ if (Objects.requireNonNull(doi).isBlank()) {
+ throw new IllegalArgumentException("Parameter must not be blank");
+ }
+ this.doi = doi.replace("\"", "");
+ return this;
+ }
+
public ComplexSearchQueryBuilder terms(Collection terms) {
terms.forEach(term -> {
String termText = term.text();
@@ -237,6 +257,7 @@ public ComplexSearchQueryBuilder terms(Collection terms) {
case "title" -> this.titlePhrase(termText);
case "abstract" -> this.abstractPhrase(termText);
case "journal" -> this.journal(termText);
+ case "doi" -> this.DOI(termText);
case "year" -> this.singleYear(Integer.valueOf(termText));
case "year-range" -> this.parseYearRange(termText);
case "default" -> this.defaultFieldPhrase(termText);
@@ -257,7 +278,7 @@ public ComplexSearchQuery build() throws IllegalStateException {
if (textSearchFieldsAndYearFieldsAreEmpty()) {
throw new IllegalStateException("At least one text field has to be set");
}
- return new ComplexSearchQuery(defaultFieldPhrases, authors, titlePhrases, abstractPhrases, fromYear, toYear, singleYear, journal);
+ return new ComplexSearchQuery(defaultFieldPhrases, authors, titlePhrases, abstractPhrases, fromYear, toYear, singleYear, journal, doi);
}
void parseYearRange(String termText) {
@@ -281,7 +302,7 @@ void parseYearRange(String termText) {
private boolean textSearchFieldsAndYearFieldsAreEmpty() {
return this.stringListIsBlank(defaultFieldPhrases) && this.stringListIsBlank(titlePhrases) &&
- this.stringListIsBlank(authors) && this.stringListIsBlank(abstractPhrases) && StringUtil.isBlank(journal) && yearFieldsAreEmpty();
+ this.stringListIsBlank(authors) && this.stringListIsBlank(abstractPhrases) && StringUtil.isBlank(journal) && StringUtil.isBlank(doi) && yearFieldsAreEmpty();
}
private boolean yearFieldsAreEmpty() {
diff --git a/src/main/java/org/jabref/logic/l10n/Language.java b/src/main/java/org/jabref/logic/l10n/Language.java
index ca0245abe01..0a6c3f90ee6 100644
--- a/src/main/java/org/jabref/logic/l10n/Language.java
+++ b/src/main/java/org/jabref/logic/l10n/Language.java
@@ -23,7 +23,8 @@ public enum Language {
PERSIAN("Persian (فارسی)", "fa"),
PORTUGUESE("Português", "pt"),
RUSSIAN("Russian", "ru"),
- SIMPLIFIED_CHINESE("Simplified Chinese", "zh"),
+ SIMPLIFIED_CHINESE("Chinese (Simplified)", "zh_CN"),
+ TRADITIONAL_CHINESE("Chinese (Traditional)", "zh_TW"),
SVENSKA("Svenska", "sv"),
TURKISH("Turkish", "tr"),
VIETNAMESE("Vietnamese", "vi"),
diff --git a/src/main/java/org/jabref/logic/l10n/Localization.java b/src/main/java/org/jabref/logic/l10n/Localization.java
index ba352b7239b..dcc612a9e20 100644
--- a/src/main/java/org/jabref/logic/l10n/Localization.java
+++ b/src/main/java/org/jabref/logic/l10n/Localization.java
@@ -51,7 +51,7 @@ private Localization() {
public static String lang(String key, String... params) {
if (localizedMessages == null) {
// I'm logging this because it should never happen
- LOGGER.error("Messages are not initialized before accessing key: " + key);
+ LOGGER.error("Messages are not initialized before accessing key: {}", key);
setLanguage(Language.ENGLISH);
}
return lookup(localizedMessages, key, params);
@@ -67,7 +67,7 @@ public static void setLanguage(Language language) {
Optional knownLanguage = Language.convertToSupportedLocale(language);
final Locale defaultLocale = Locale.getDefault();
if (knownLanguage.isEmpty()) {
- LOGGER.warn("Language " + language + " is not supported by JabRef (Default:" + defaultLocale + ")");
+ LOGGER.warn("Language {} is not supported by JabRef (Default: {})", language, defaultLocale);
setLanguage(Language.ENGLISH);
return;
}
@@ -143,7 +143,7 @@ private static String lookup(LocalizationBundle bundle, String key, String... pa
String translation = bundle.containsKey(key) ? bundle.getString(key) : "";
if (translation.isEmpty()) {
- LOGGER.warn("Warning: could not get translation for \"" + key + "\" for locale " + Locale.getDefault());
+ LOGGER.warn("Warning: could not get translation for \"{}\" for locale {}", key, Locale.getDefault());
translation = key;
}
return new LocalizationKeyParams(translation, params).replacePlaceholders();
diff --git a/src/main/java/org/jabref/model/entry/identifier/DOI.java b/src/main/java/org/jabref/model/entry/identifier/DOI.java
index 428930db187..ad18670b4f6 100644
--- a/src/main/java/org/jabref/model/entry/identifier/DOI.java
+++ b/src/main/java/org/jabref/model/entry/identifier/DOI.java
@@ -45,7 +45,7 @@ public class DOI implements Identifier {
+ "10" // directory indicator
+ "(?:\\.[0-9]+)+" // registrant codes
+ "[/:]" // divider
- + "(?:[^\\s]+)" // suffix alphanumeric without space
+ + "(?:[^\\s,;]+[^,;(\\.\\s)])" // suffix alphanumeric without " "/","/";" and not ending on "."/","/";"
+ ")"; // end group \1
// Regex (Short DOI)
diff --git a/src/main/java/org/jabref/model/strings/LatexToUnicodeAdapter.java b/src/main/java/org/jabref/model/strings/LatexToUnicodeAdapter.java
index c1eb8dc4248..c8bfb0a3a6b 100644
--- a/src/main/java/org/jabref/model/strings/LatexToUnicodeAdapter.java
+++ b/src/main/java/org/jabref/model/strings/LatexToUnicodeAdapter.java
@@ -2,26 +2,49 @@
import java.text.Normalizer;
import java.util.Objects;
+import java.util.Optional;
import java.util.regex.Pattern;
import com.github.tomtung.latex2unicode.LaTeX2Unicode;
+import fastparse.core.Parsed;
/**
* Adapter class for the latex2unicode lib. This is an alternative to our LatexToUnicode class
*/
public class LatexToUnicodeAdapter {
- private static Pattern underscoreMatcher = Pattern.compile("_(?!\\{)");
+ private static final Pattern UNDERSCORE_MATCHER = Pattern.compile("_(?!\\{)");
- private static String replacementChar = "\uFFFD";
+ private static final String REPLACEMENT_CHAR = "\uFFFD";
- private static Pattern underscorePlaceholderMatcher = Pattern.compile(replacementChar);
+ private static final Pattern UNDERSCORE_PLACEHOLDER_MATCHER = Pattern.compile(REPLACEMENT_CHAR);
+ /**
+ * Attempts to resolve all LaTeX in the String.
+ *
+ * @param inField a String containing LaTeX
+ * @return a String with LaTeX resolved into Unicode, or the original String if the LaTeX could not be parsed
+ */
public static String format(String inField) {
Objects.requireNonNull(inField);
+ return parse(inField).orElse(Normalizer.normalize(inField, Normalizer.Form.NFC));
+ }
- String toFormat = underscoreMatcher.matcher(inField).replaceAll(replacementChar);
- toFormat = Normalizer.normalize(LaTeX2Unicode.convert(toFormat), Normalizer.Form.NFC);
- return underscorePlaceholderMatcher.matcher(toFormat).replaceAll("_");
+ /**
+ * Attempts to resolve all LaTeX in the String.
+ *
+ * @param inField a String containing LaTeX
+ * @return an {@code Optional} with LaTeX resolved into Unicode or {@code empty} on failure.
+ */
+ public static Optional parse(String inField) {
+ Objects.requireNonNull(inField);
+ String toFormat = UNDERSCORE_MATCHER.matcher(inField).replaceAll(REPLACEMENT_CHAR);
+ var parsingResult = LaTeX2Unicode.parse(toFormat);
+ if (parsingResult instanceof Parsed.Success) {
+ String text = parsingResult.get().value();
+ toFormat = Normalizer.normalize(text, Normalizer.Form.NFC);
+ return Optional.of(UNDERSCORE_PLACEHOLDER_MATCHER.matcher(toFormat).replaceAll("_"));
+ }
+ return Optional.empty();
}
}
diff --git a/src/main/resources/build.properties b/src/main/resources/build.properties
index c1ea1a14039..0057f67b238 100644
--- a/src/main/resources/build.properties
+++ b/src/main/resources/build.properties
@@ -6,5 +6,3 @@ azureInstrumentationKey=${azureInstrumentationKey}
springerNatureAPIKey=${springerNatureAPIKey}
astrophysicsDataSystemAPIKey=${astrophysicsDataSystemAPIKey}
ieeeAPIKey=${ieeeAPIKey}
-minRequiredJavaVersion = ${minRequiredJavaVersion}
-allowJava9 = ${allowJava9}
diff --git a/src/main/resources/l10n/JabRef_da.properties b/src/main/resources/l10n/JabRef_da.properties
index a3ad033829a..204acad8167 100644
--- a/src/main/resources/l10n/JabRef_da.properties
+++ b/src/main/resources/l10n/JabRef_da.properties
@@ -300,8 +300,6 @@ File\ exists=Filen eksisterer
File\ not\ found=Fil ikke fundet
-Finished\ automatically\ setting\ external\ links.=Fuldførte automatisk udfyldning af eksterne links.
-
Finished\ writing\ XMP\ for\ %0\ file\ (%1\ skipped,\ %2\ errors).=Fuldførte skrivning af XMP for %0-fil (sprang over %1, %2 fejl).
@@ -939,6 +937,8 @@ Manage\ keywords=Håndter nøgleord
Merge\ entries=Flet indgange
+Finished\ automatically\ setting\ external\ links.=Fuldførte automatisk udfyldning af eksterne links.
+
diff --git a/src/main/resources/l10n/JabRef_de.properties b/src/main/resources/l10n/JabRef_de.properties
index c775db238ac..dc78ceb14ae 100644
--- a/src/main/resources/l10n/JabRef_de.properties
+++ b/src/main/resources/l10n/JabRef_de.properties
@@ -302,6 +302,8 @@ Error=Fehler
Error\ occurred\ when\ parsing\ entry=Fehler beim Analysieren des Eintrags
Error\ opening\ file=Fehler beim Öffnen der Datei
Error\ while\ writing=Fehler beim Schreiben
+Error\ during\ persistence\ of\ crawling\ results.=Fehler bei der Aufzeichnung von Crawling-Ergebnissen.
+Error\ during\ reading\ of\ study\ definition\ file.=Fehler beim Lesen der Studiendefinitionsdatei.
'%0'\ exists.\ Overwrite\ file?='%0' existiert bereits. Überschreiben?
Export=Exportieren
Export\ preferences=Einstellungen exportieren
@@ -338,8 +340,6 @@ File\ not\ found=Datei nicht gefunden
Filter=Filter
-Finished\ automatically\ setting\ external\ links.=Automatische Einstellung externer Links abgeschlossen.
-
Filter\ groups=Gruppen filtern
Finished\ writing\ XMP\ for\ %0\ file\ (%1\ skipped,\ %2\ errors).=Schreiben der XMP-Metadaten für Datei %0 beendet (%1 übersprungen, %2 Fehler).
@@ -631,12 +631,14 @@ Previous\ preview\ layout=Voriger Vorschaustil
Available=Verfügbar
Selected=Ausgewählt
Selected\ Layouts\ can\ not\ be\ empty=Ausgewählte Layouts können nicht leer sein
+Start\ systematic\ literature\ review=Systematische Literaturrecherche starten
Reset\ default\ preview\ style=Standard-Vorschau-Stil zurücksetzen
Previous\ entry=Vorheriger Eintrag
Primary\ sort\ criterion=Primäres Sortierkriterium
Problem\ with\ parsing\ entry=Problem beim Analysieren des Eintrags
Processing\ %0=Bearbeite %0
Pull\ changes\ from\ shared\ database=Änderungen der geteilten Datenbank beziehen
+Problem\ finding\ files.\ See\ error\ log\ for\ details.=Probleme beim Finden von Dateien. Siehe Fehlerprotokoll für Details.
Pushed\ citations\ to\ %0=Einträge in %0 eingefügt
@@ -1190,6 +1192,9 @@ Update\ timestamp\ on\ modification=Zeitstempel bei Änderung aktualisieren
All\ key\ bindings\ will\ be\ reset\ to\ their\ defaults.=Alle Tastaturkürzel werden auf den Standard zurückgesetzt.
Automatically\ set\ file\ links=Dateilinks automatisch setzen
+Finished\ automatically\ setting\ external\ links.=Automatische Einstellung externer Links abgeschlossen.
+Changed\ %0\ entries.=%0 Einträge geändert.
+
Resetting\ all\ key\ bindings=Alle Tastaturkürzel werden zurückgesetzt
Network=Netzwerk
@@ -1571,6 +1576,7 @@ remove\ entry\ %0=Entferne Eintrag %0
remove\ string\ %0=Entferne String %0
undefined=unbekannt
Cannot\ get\ info\ based\ on\ given\ %0\:\ %1=Informationen können für den angegebenen %0 '%1' nicht ermittelt werden.
+Get\ bibliographic\ data\ from\ %0=Bibliografische Daten von %0 abrufen
No\ %0\ found=Keine %0 gefunden
Entry\ from\ %0=Eintrag basierend auf %0
Merge\ entry\ with\ %0\ information=Eintrag mit %0-Informationen zusammenführen
@@ -1610,6 +1616,7 @@ User=Benutzer
Connect=Verbinden
Connection\ error=Verbindungsfehler
Connection\ to\ %0\ server\ established.=Verbindung zum %0 Server hergestellt.
+There\ are\ connection\ issues\ with\ a\ JabRef\ server.\ Detailed\ information\:\ %0.=Es gibt Verbindungsprobleme mit einem JabRef Server. Detaillierte Informationen\: %0.
Required\ field\ "%0"\ is\ empty.=Erforederliches Feld "%0" ist leer.
%0\ driver\ not\ available.=%0-Treiber nicht verfügbar.
The\ connection\ to\ the\ server\ has\ been\ terminated.=Verbindung zum Server wurde abgebrochen.
@@ -1754,6 +1761,7 @@ There\ exists\ already\ a\ group\ with\ the\ same\ name.=Es existiert bereits ei
Copy\ linked\ file=Verlinkte Datei kopieren
Copy\ linked\ file\ to\ folder...=Verlinkte Datei in den Ordner kopieren...
Could\ not\ copy\ file\ to\ %0,\ maybe\ the\ file\ is\ already\ existing?=Datei konnte nicht nach %0 kopiert werden. Vielleicht ist die Datei bereits vorhanden?
+Successfully\ copied\ file\ to\ %0.=Datei erfolgreich nach %0 kopiert.
Could\ not\ resolve\ the\ file\ %0=Datei %0 konnte nicht gefunden werden
Copy\ linked\ files\ to\ folder...=Kopiere verknüpfte Dateien in Ordner...
@@ -1773,8 +1781,6 @@ Checking\ integrity...=Integrität prüfen...
Remove\ hyphenated\ line\ breaks=Entferne getrennte Zeilenumbrüche
Removes\ all\ hyphenated\ line\ breaks\ in\ the\ field\ content.=Entfernen aller Zeilenumbrüche im Inhalt des Feldes.
-Note\ that\ currently,\ JabRef\ does\ not\ run\ with\ Java\ 9.=JabRef kann nicht mit Java 9 verwendet werden.
-Your\ current\ Java\ version\ (%0)\ is\ not\ supported.\ Please\ install\ version\ %1\ or\ higher.=Die verwendete Java Installation (%0) wird nicht unterstützt. Bitte installieren Sie Version %1 oder neuer.
Could\ not\ retrieve\ entry\ data\ from\ '%0'.=Konnte Daten von '%0' nicht abrufen.
Entry\ from\ %0\ could\ not\ be\ parsed.=Eintrag von %0 konnte nicht analysiert werden.
@@ -1782,7 +1788,6 @@ Invalid\ identifier\:\ '%0'.=Ungültige Kennung\: "%0".
This\ paper\ has\ been\ withdrawn.=Dieses Paper wurde zurückgezogen.
Finished\ writing\ XMP\ metadata.=Schreiben von XMP Metadaten abgeschlossen.
empty\ citation\ key=leerer Zitationsschlüssel
-Your\ Java\ Runtime\ Environment\ is\ located\ at\ %0.=Ihre Java Laufzeitumgebung befindet sich in %0.
Aux\ file=Aux-Datei
Group\ containing\ entries\ cited\ in\ a\ given\ TeX\ file=Gruppe mit Einträgen die in einer vorhanden Tex-Datei zitiert worden sind
@@ -1897,6 +1902,7 @@ Are\ you\ sure\ you\ want\ to\ remove\ field\ name\:\ "%0"?=Sind Sie sicher, das
Add\ new\ keyword=Schlagwort hinzufügen
Keyword\:=Schlagwort\:
Keyword\ "%0"\ already\ exists=Schlagwort "%0" existiert bereits
+Keyword\ separator=Schlüsselworttrennzeichen
Remove\ keyword=Schlagwort entfernen
Are\ you\ sure\ you\ want\ to\ remove\ keyword\:\ "%0"?=Sind Sie sicher, dass Sie das Schlagwort "%0" entfernen möchten?
Reset\ to\ default=Auf Standard zurücksetzen
@@ -1988,6 +1994,7 @@ Font=Schriftart
Visual\ theme=Visuelles Theme
Light\ theme=Helles Theme
Dark\ theme=Dunkles Theme
+Custom\ theme=Benutzerdefinierte Design
Overwrite\ existing\ keys=Existierende Keys überschreiben
Key\ patterns=BibTeX-Key-Muster
Font\ settings=Schrifteinstellungen
@@ -1995,6 +2002,8 @@ Override\ font\ settings=Schrifteinstellungen überschreiben
Override\ font\ size=Schriftgröße überschreiben
Theme\ changed\ to\ dark\ theme.=Theme wurde zum dunklen Theme geändert.
Theme\ changed\ to\ light\ theme.=Theme wurde zu hellem Theme geändert.
+Theme\ changed\ to\ a\ custom\ theme\:=Design zu einem benutzerdefinierten Design geändert\:
+Please\ specify\ a\ css\ theme\ file.=Bitte geben Sie eine CSS-Design-Datei an.
You\ must\ enter\ an\ integer\ value\ higher\ than\ 8.=Sie müssen einen Ganzzahlwert größer als 8 eingeben.
Letters\ after\ duplicate\ generated\ keys=Buchstaben nach doppelten generierten Schlüsseln
Start\ on\ second\ duplicate\ key\ with\ letter\ A\ (a,\ b,\ ...)=Beim zweiten doppelten Schlüssel mit Buchstaben A (a, b, ...) starten
@@ -2027,6 +2036,7 @@ Intersection=Schnittmenge
Union=Vereinigungsmenge
Collect\ by=Erfassen nach
Explicit\ selection=Explizite Auswahl
+Searching\ for\ a\ keyword=Suche nach einem Schlüsselwort
Free\ search\ expression=Freier Suchausdruck
Specified\ keywords=Angegebene Schlüsselwörter
Cited\ entries=Zitierte Einträge
@@ -2064,7 +2074,25 @@ Required=Erforderlich
Entry\ type\ cannot\ be\ empty.\ Please\ enter\ a\ name.=Eintragstyp darf nicht leer sein. Bitte geben Sie einen Namen ein.
Field\ cannot\ be\ empty.\ Please\ enter\ a\ name.=Feld darf nicht leer sein. Bitte geben Sie einen Namen ein.
-
+Capitalize\ current\ word=Aktuelles Wort großschreiben
+Delete\ text=Text löschen
+Make\ current\ word\ lowercase=Wandelt das aktuelle Wort in Kleinbuchstaben um
+Make\ current\ word\ uppercase=Wandelt das aktuelle Wort in Großbuchstaben um
+Move\ caret\ left=Cursor nach links bewegen
+Move\ caret\ right=Cursor nach rechts bewegen
+Move\ caret\ to\ previous\ word=Cursor zum vorherigen Wort verschieben
+Move\ caret\ to\ next\ word=Cursor zum nächsten Wort verschieben
+Move\ caret\ to\ beginning\ of\ line=Cursor an Zeilenanfang bewegen
+Move\ caret\ to\ end\ of\ line=Cursor an Zeilenende bewegen
+Move\ the\ caret\ down=Cursor nach unten bewegen
+Move\ the\ caret\ to\ the\ beginning\ of\ text=Den Cursor an den Anfang des Textes bewegen
+Move\ the\ caret\ to\ the\ end\ of\ text=Den Cursor an das Ende des Textes bewegen
+Move\ the\ caret\ up=Den Cursor nach oben bewegen
+Remove\ line\ after\ caret=Zeile nach dem Cursor entfernen
+Remove\ characters\ until\ next\ word=Zeichen bis zum nächsten Wort entfernen
+Remove\ the\ current\ word\ backwards=Vorangehendes Wort entfernen
+
+Text\ editor=Text Editor
Search\ ShortScience=Durchsuche ShortScience
Unable\ to\ open\ ShortScience.=Kann keine Verbindung zu ShortScience herstellen.
@@ -2072,6 +2100,7 @@ Unable\ to\ open\ ShortScience.=Kann keine Verbindung zu ShortScience herstellen
Shared\ database=Geteilte SQL-Datenbank
Lookup=Nachschlagen
+Please\ enter\ a\ field\ name\ to\ search\ for\ a\ keyword.=Bitte geben Sie einen Feldnamen ein, um nach Schlüsselwörtern zu suchen.
Access\ date\ of\ the\ address\ specified\ in\ the\ url\ field.=Zugriffsdatum der im URL-Feld angegebenen Adresse.
Additional\ information\ related\ to\ the\ resource\ indicated\ by\ the\ eprint\ field.=Zusätzliche Informationen zur Quelle im eprint-Feld.
Annex\ to\ the\ eventtitle\ field.=Zusätzliche Informationen zum Feld eventtitle.
@@ -2222,10 +2251,15 @@ Close\ other\ libraries=Andere Bibliotheken schließen
Close\ others=Andere schließen
Reveal\ in\ file\ explorer=Im Datei-Explorer anzeigen
+Autolink\ files=Dateien automatisch verlinken
+Customized\ preview\ style=Angepasster Vorschaustil
+Next\ preview\ style=Nächster Vorschau-Stil
+Previous\ preview\ style=Vorheriger Vorschau-Stil
(\ Note\:\ Press\ return\ to\ commit\ changes\ in\ the\ table\!\ )=( Hinweis\: Drücke die Enter-Taste, um Änderungen in der Tabelle zu übertragen\!)
Reset=Zurücksetzen
+New\ inproceedings=Neue inproceedings
Reset\ entry\ types\ and\ fields\ to\ defaults=Eintragstypen und Felder auf Standardwerte zurücksetzen
This\ will\ reset\ all\ entry\ types\ to\ their\ default\ values\ and\ remove\ all\ custom\ entry\ types=Dies wird alle Eintragstypen auf ihre Standardwerte zurücksetzen und alle benutzerdefinierten Eintragstypen entfernen
Replace\ tabs\ with\ space=Tabs durch Leerzeichen ersetzen
@@ -2234,7 +2268,19 @@ Remove\ redundant\ spaces=Redundante Leerzeichen entfernen
Replaces\ consecutive\ spaces\ with\ a\ single\ space\ in\ the\ field\ content.=Ersetzt aufeinanderfolgende Leerzeichen durch einen einzigen Leerzeichen im Feldinhalt.
Remove\ digits=Ziffern entfernen
Removes\ digits.=Ziffern entfernen.
+The\ query\ cannot\ contain\ a\ year\ and\ year-range\ field.=Die Abfrage kann kein Jahres- und Jahresbereichsfeld enthalten.
+This\ query\ uses\ unsupported\ fields.=Diese Abfrage verwendet nicht unterstützte Felder.
+This\ query\ uses\ unsupported\ syntax.=Diese Abfrage verwendet nicht unterstützte Syntax.
+Presets=Voreinstellungen
+Check\ Proxy\ Setting=Überprüfe Proxy-Einstellungen
+Check\ connection=Verbindung prüfen
+Connection\ failed\!=Verbindung fehlgeschlagen\!
+Connection\ successful\!=Verbindung erfolgreich\!
+Generate\ groups\ from\ keywords\ in\ the\ following\ field=Gruppen aus Schlüsselwörtern im folgenden Feld generieren
+Generate\ groups\ for\ author\ last\ names=Gruppen für Nachnamen der Autoren generieren
+Regular\ expression=Regulärere Ausdruck
+Error\ importing.\ See\ the\ error\ log\ for\ details.=Fehler beim Importieren. Details finden Sie im Fehlerprotokoll.
diff --git a/src/main/resources/l10n/JabRef_el.properties b/src/main/resources/l10n/JabRef_el.properties
index 92f8b1b5e18..9a024a20964 100644
--- a/src/main/resources/l10n/JabRef_el.properties
+++ b/src/main/resources/l10n/JabRef_el.properties
@@ -308,8 +308,6 @@ File\ not\ found=Το αρχείο δε βρέθηκε
Filter=Φίλτρο
-Finished\ automatically\ setting\ external\ links.=Ο αυτόματος ορισμός εξωτερικών συνδέσμων έχει ολοκληρωθεί.
-
Finished\ writing\ XMP\ for\ %0\ file\ (%1\ skipped,\ %2\ errors).=Η εγγραφή XMP για το αρχείο %0 έχει ολοκληρωθεί (παραβλέφθηκαν %1, σφάλματα %2).
@@ -1077,6 +1075,8 @@ Update\ timestamp\ on\ modification=Ενημέρωση χρονοσήμανση
All\ key\ bindings\ will\ be\ reset\ to\ their\ defaults.=Θα γίνει επαναφορά όλων των συντομεύσεων πληκτρολογίου στις προεπιλογές τους.
Automatically\ set\ file\ links=Αυτόματος ορισμός συνδέσμων αρχείου
+Finished\ automatically\ setting\ external\ links.=Ο αυτόματος ορισμός εξωτερικών συνδέσμων έχει ολοκληρωθεί.
+
Resetting\ all\ key\ bindings=Πραγματοποιείται επαναφορά όλων των συντομεύσεων πληκτρολογίου
Network=Δίκτυο
@@ -1610,14 +1610,11 @@ Checking\ integrity...=Πραγματοποιείται έλεγχος ακερ
Remove\ hyphenated\ line\ breaks=Αφαίρεση αλλαγών γραμμής με ενωτικό
Removes\ all\ hyphenated\ line\ breaks\ in\ the\ field\ content.=Αφαιρεί όλες τις αλλαγές γραμμής με ενωτικό από τα περιεχόμενα του πεδίου.
-Note\ that\ currently,\ JabRef\ does\ not\ run\ with\ Java\ 9.=Σημειώστε ότι προς το παρόν, το JabRef δεν υποστηρίζει την έκδοση Java 9.
-Your\ current\ Java\ version\ (%0)\ is\ not\ supported.\ Please\ install\ version\ %1\ or\ higher.=Η εγκατεστημένη έκδοση Java (%0) δεν υποστηρίζεται. Παρακαλώ εγκαταστήστε την έκδοση %1 ή νεότερη.
Could\ not\ retrieve\ entry\ data\ from\ '%0'.=Αδυναμία ανάκτησης δεδομένων καταχώρησης από '%0'.
Entry\ from\ %0\ could\ not\ be\ parsed.=Αδυναμία ανάλυσης καταχώρησης από %0.
Invalid\ identifier\:\ '%0'.=Μη έγκυρο αναγνωριστικό\: '%0'.
This\ paper\ has\ been\ withdrawn.=Αυτή η εργασία έχει αποσυρθεί.
-Your\ Java\ Runtime\ Environment\ is\ located\ at\ %0.=Το Περιβάλλον Λειτουργίας Java βρίσκεται στο %0.
Aux\ file=Αρχείο AUX
Group\ containing\ entries\ cited\ in\ a\ given\ TeX\ file=Ομάδα που περιέχει καταχωρήσεις που αναφέρονται σε ένα συγκεκριμένο αρχείο TeX
diff --git a/src/main/resources/l10n/JabRef_en.properties b/src/main/resources/l10n/JabRef_en.properties
index 697c2fab18a..7fa46947f7c 100644
--- a/src/main/resources/l10n/JabRef_en.properties
+++ b/src/main/resources/l10n/JabRef_en.properties
@@ -340,8 +340,6 @@ File\ not\ found=File not found
Filter=Filter
-Finished\ automatically\ setting\ external\ links.=Finished automatically setting external links.
-
Filter\ groups=Filter groups
Finished\ writing\ XMP\ for\ %0\ file\ (%1\ skipped,\ %2\ errors).=Finished writing XMP for %0 file (%1 skipped, %2 errors).
@@ -640,6 +638,7 @@ Primary\ sort\ criterion=Primary sort criterion
Problem\ with\ parsing\ entry=Problem with parsing entry
Processing\ %0=Processing %0
Pull\ changes\ from\ shared\ database=Pull changes from shared database
+Problem\ finding\ files.\ See\ error\ log\ for\ details.=Problem finding files. See error log for details.
Pushed\ citations\ to\ %0=Pushed citations to %0
@@ -1193,6 +1192,9 @@ Update\ timestamp\ on\ modification=Update timestamp on modification
All\ key\ bindings\ will\ be\ reset\ to\ their\ defaults.=All key bindings will be reset to their defaults.
Automatically\ set\ file\ links=Automatically set file links
+Finished\ automatically\ setting\ external\ links.=Finished automatically setting external links.
+Changed\ %0\ entries.=Changed %0 entries.
+
Resetting\ all\ key\ bindings=Resetting all key bindings
Network=Network
@@ -1779,8 +1781,6 @@ Checking\ integrity...=Checking integrity...
Remove\ hyphenated\ line\ breaks=Remove hyphenated line breaks
Removes\ all\ hyphenated\ line\ breaks\ in\ the\ field\ content.=Removes all hyphenated line breaks in the field content.
-Note\ that\ currently,\ JabRef\ does\ not\ run\ with\ Java\ 9.=Note that currently, JabRef does not run with Java 9.
-Your\ current\ Java\ version\ (%0)\ is\ not\ supported.\ Please\ install\ version\ %1\ or\ higher.=Your current Java version (%0) is not supported. Please install version %1 or higher.
Could\ not\ retrieve\ entry\ data\ from\ '%0'.=Could not retrieve entry data from '%0'.
Entry\ from\ %0\ could\ not\ be\ parsed.=Entry from %0 could not be parsed.
@@ -1788,7 +1788,6 @@ Invalid\ identifier\:\ '%0'.=Invalid identifier: '%0'.
This\ paper\ has\ been\ withdrawn.=This paper has been withdrawn.
Finished\ writing\ XMP\ metadata.=Finished writing XMP metadata.
empty\ citation\ key=empty citation key
-Your\ Java\ Runtime\ Environment\ is\ located\ at\ %0.=Your Java Runtime Environment is located at %0.
Aux\ file=Aux file
Group\ containing\ entries\ cited\ in\ a\ given\ TeX\ file=Group containing entries cited in a given TeX file
diff --git a/src/main/resources/l10n/JabRef_es.properties b/src/main/resources/l10n/JabRef_es.properties
index f682fa82ea4..ccd9b013e97 100644
--- a/src/main/resources/l10n/JabRef_es.properties
+++ b/src/main/resources/l10n/JabRef_es.properties
@@ -340,8 +340,6 @@ File\ not\ found=No se ha encontrado el archivo
Filter=Filtro
-Finished\ automatically\ setting\ external\ links.=Se ha finalizado la configuración automática de enlaces esternos.
-
Filter\ groups=Filtros
Finished\ writing\ XMP\ for\ %0\ file\ (%1\ skipped,\ %2\ errors).=Se finalizó la escritura XMP en archivo %0 (%1 evitados, %2 errores).
@@ -1193,6 +1191,8 @@ Update\ timestamp\ on\ modification=Actualizar marca de tiempo al modificar
All\ key\ bindings\ will\ be\ reset\ to\ their\ defaults.=Todas las combinaciones de teclas serán restablecidas a su configuración por defecto
Automatically\ set\ file\ links=Establecer enlaces de archivo automáticamente
+Finished\ automatically\ setting\ external\ links.=Se ha finalizado la configuración automática de enlaces esternos.
+
Resetting\ all\ key\ bindings=Reestableciendo todas las combinaciones de teclas
Network=Red
@@ -1779,8 +1779,6 @@ Checking\ integrity...=Comprobando la integridad...
Remove\ hyphenated\ line\ breaks=Remover saltos de línea guionados
Removes\ all\ hyphenated\ line\ breaks\ in\ the\ field\ content.=Elimina todos los saltos de línea guionados en el contenido del campo.
-Note\ that\ currently,\ JabRef\ does\ not\ run\ with\ Java\ 9.=Tenga en cuenta que, actualmente, JabRef no funciona con Java 9.
-Your\ current\ Java\ version\ (%0)\ is\ not\ supported.\ Please\ install\ version\ %1\ or\ higher.=La versión actual de Java (%0) no es compatible. Por favor, instale la versión %1 o superior.
Could\ not\ retrieve\ entry\ data\ from\ '%0'.=No se pueden recuperar los datos de la entrada desde '%0'.
Entry\ from\ %0\ could\ not\ be\ parsed.=No se pudo analizar la entrada de %0.
@@ -1788,7 +1786,6 @@ Invalid\ identifier\:\ '%0'.=Identificador no válido\: '%0'.
This\ paper\ has\ been\ withdrawn.=Este artículo ha sido retirado.
Finished\ writing\ XMP\ metadata.=Terminó de escribir metadatos XMP.
empty\ citation\ key=clave de cita vacía
-Your\ Java\ Runtime\ Environment\ is\ located\ at\ %0.=Su Java Runtime Environment se encuentra en %0.
Aux\ file=Archivo Aux
Group\ containing\ entries\ cited\ in\ a\ given\ TeX\ file=Grupo que contiene las entradas citadas en un archivo TeX determinado
diff --git a/src/main/resources/l10n/JabRef_fa.properties b/src/main/resources/l10n/JabRef_fa.properties
index 46a643426ea..274bd3d2b88 100644
--- a/src/main/resources/l10n/JabRef_fa.properties
+++ b/src/main/resources/l10n/JabRef_fa.properties
@@ -254,7 +254,6 @@ Entry\ editor=ویرایشگر ورودی
-
Manage\ external\ file\ types=مدیریت نوع پروندههای خارجی
@@ -484,6 +483,7 @@ Merge\ entries=ترکیب کردن ورودیها
+
Open\ folder=بازکردن پوشه
diff --git a/src/main/resources/l10n/JabRef_fr.properties b/src/main/resources/l10n/JabRef_fr.properties
index 6b722313f44..32e578d9f28 100644
--- a/src/main/resources/l10n/JabRef_fr.properties
+++ b/src/main/resources/l10n/JabRef_fr.properties
@@ -340,8 +340,6 @@ File\ not\ found=Fichier non trouvé
Filter=Choix des filtres
-Finished\ automatically\ setting\ external\ links.=La définition automatique des liens externes est terminée.
-
Filter\ groups=Filtrer les groupes
Finished\ writing\ XMP\ for\ %0\ file\ (%1\ skipped,\ %2\ errors).=Fin de l'écriture des XMP pour %0 fichiers (%1 passés, %2 erreurs).
@@ -640,6 +638,7 @@ Primary\ sort\ criterion=Critère de tri principal
Problem\ with\ parsing\ entry=Problème de traitement d'une entrée
Processing\ %0=Traitement de %0
Pull\ changes\ from\ shared\ database=Récupérer les modifications depuis la base de données partagée
+Problem\ finding\ files.\ See\ error\ log\ for\ details.=Problème lors de la recherche des fichiers. Consultez le journal des erreurs pour plus de détails.
Pushed\ citations\ to\ %0=Envoyer les citations vers %0
@@ -1193,6 +1192,9 @@ Update\ timestamp\ on\ modification=Mettre à jour l'horodatage en cas de modifi
All\ key\ bindings\ will\ be\ reset\ to\ their\ defaults.=Tous les raccourcis clavier seront réinitialisés à leurs valeurs par défaut.
Automatically\ set\ file\ links=Configurer automatiquement les liens de fichier
+Finished\ automatically\ setting\ external\ links.=La définition automatique des liens externes est terminée.
+Changed\ %0\ entries.=%0 entrées modifiées.
+
Resetting\ all\ key\ bindings=Réinitialisation de tous les raccourcis clavier
Network=Réseau
@@ -1779,8 +1781,6 @@ Checking\ integrity...=Vérification d'intégrité...
Remove\ hyphenated\ line\ breaks=Suppression des sauts de ligne associé à un tiret
Removes\ all\ hyphenated\ line\ breaks\ in\ the\ field\ content.=Supprime du contenu du champ tous les sauts de ligne associés à un tiret.
-Note\ that\ currently,\ JabRef\ does\ not\ run\ with\ Java\ 9.=Notez qu'actuellement, JabRef ne fonctionne pas avec Java 9.
-Your\ current\ Java\ version\ (%0)\ is\ not\ supported.\ Please\ install\ version\ %1\ or\ higher.=Votre version actuelle de Java (%0) n'est pas supportée. Veuillez installer la version %1 ou supérieure.
Could\ not\ retrieve\ entry\ data\ from\ '%0'.=Impossible de récupérer les données sur l'entrée depuis « %0 ».
Entry\ from\ %0\ could\ not\ be\ parsed.=Entrée de %0 n’a pas pu être analysée.
@@ -1788,7 +1788,6 @@ Invalid\ identifier\:\ '%0'.=Identifiant non valide \: « %0 ».
This\ paper\ has\ been\ withdrawn.=Cet article a été retiré.
Finished\ writing\ XMP\ metadata.=Écriture des métadonnées XMP terminée.
empty\ citation\ key=clef de citation vide
-Your\ Java\ Runtime\ Environment\ is\ located\ at\ %0.=Votre environnement d’exécution Java se trouve dans %0.
Aux\ file=Fichier AUX
Group\ containing\ entries\ cited\ in\ a\ given\ TeX\ file=Groupe contenant les entrées citées dans un fichier TeX spécifique
diff --git a/src/main/resources/l10n/JabRef_in.properties b/src/main/resources/l10n/JabRef_in.properties
index 8948b7f7000..82128b9780a 100644
--- a/src/main/resources/l10n/JabRef_in.properties
+++ b/src/main/resources/l10n/JabRef_in.properties
@@ -305,8 +305,6 @@ File\ not\ found=Berkas tidak ditemukan
Filter=Penapis
-Finished\ automatically\ setting\ external\ links.=Selesai pengaturan otomatis tautan eksternal.
-
Finished\ writing\ XMP\ for\ %0\ file\ (%1\ skipped,\ %2\ errors).=Selesai menulis XMP untuk berkas %0 (%1 dilewati, %2 kesalahan).
@@ -1066,6 +1064,8 @@ Update\ timestamp\ on\ modification=Memperbarui timestamp pada modifikasi
All\ key\ bindings\ will\ be\ reset\ to\ their\ defaults.=Semua fungsi tombol akan setel ulang ke default mereka.
Automatically\ set\ file\ links=Buat tautan berkas secara otomatis.
+Finished\ automatically\ setting\ external\ links.=Selesai pengaturan otomatis tautan eksternal.
+
Resetting\ all\ key\ bindings=Reset semua fungsi tombol
Network=Jaringan
@@ -1591,8 +1591,6 @@ Checking\ integrity...=Memeriksa integritas...
Remove\ hyphenated\ line\ breaks=Hapus garis hubung patah
Removes\ all\ hyphenated\ line\ breaks\ in\ the\ field\ content.=Menghapus semua baris tanda hubung di bidang konten.
-Note\ that\ currently,\ JabRef\ does\ not\ run\ with\ Java\ 9.=Perhatikan bahwa saat ini, JabRef tidak berjalan dengan Java 9.
-Your\ current\ Java\ version\ (%0)\ is\ not\ supported.\ Please\ install\ version\ %1\ or\ higher.=Versi Java Anda saat ini ( % 0) tidak didukung. Harap pasang versi % 1 atau lebih tinggi.
Could\ not\ retrieve\ entry\ data\ from\ '%0'.=Tidak dapat mengambil data entri dari ' % 0 '.
Entry\ from\ %0\ could\ not\ be\ parsed.=Entri dari % 0 tidak dapat diuraikan.
diff --git a/src/main/resources/l10n/JabRef_it.properties b/src/main/resources/l10n/JabRef_it.properties
index 4061043432b..346fe870bae 100644
--- a/src/main/resources/l10n/JabRef_it.properties
+++ b/src/main/resources/l10n/JabRef_it.properties
@@ -340,8 +340,6 @@ File\ not\ found=File non trovato
Filter=Filtro
-Finished\ automatically\ setting\ external\ links.=Impostazione automatica dei collegamenti esterni terminata.
-
Filter\ groups=Filtra gruppi
Finished\ writing\ XMP\ for\ %0\ file\ (%1\ skipped,\ %2\ errors).=Terminata la scrittura di metadati XMP per %0 file (%1 saltati, %2 errori).
@@ -640,6 +638,7 @@ Primary\ sort\ criterion=Criterio di ordinamento principale
Problem\ with\ parsing\ entry=Problema di analisi di una voce
Processing\ %0=Elaborazione di %0
Pull\ changes\ from\ shared\ database=Recupera le modifiche dal database condiviso
+Problem\ finding\ files.\ See\ error\ log\ for\ details.=Problema nella ricerca dei file. Vedere il registro degli errori per i dettagli.
Pushed\ citations\ to\ %0=Citazioni inviate a %0
@@ -1193,6 +1192,9 @@ Update\ timestamp\ on\ modification=Aggiornare data e ora a seguito di una modif
All\ key\ bindings\ will\ be\ reset\ to\ their\ defaults.=Tutte le scorciatoie di tastiera saranno reimpostate ai valori predefiniti.
Automatically\ set\ file\ links=Impostazione automatica dei collegamenti ai file
+Finished\ automatically\ setting\ external\ links.=Impostazione automatica dei collegamenti esterni terminata.
+Changed\ %0\ entries.=Modificate %0 voci.
+
Resetting\ all\ key\ bindings=Reimpostazione di tutte le scorciatoie di tastiera
Network=Rete
@@ -1779,8 +1781,6 @@ Checking\ integrity...=Verifica dell'integrità...
Remove\ hyphenated\ line\ breaks=Rimuovi le interruzioni di riga con trattino
Removes\ all\ hyphenated\ line\ breaks\ in\ the\ field\ content.=Rimuove tutte le interruzioni di riga con trattino nel contenuto del campo.
-Note\ that\ currently,\ JabRef\ does\ not\ run\ with\ Java\ 9.=Nota che attualmente, JabRef non funziona con Java 9.
-Your\ current\ Java\ version\ (%0)\ is\ not\ supported.\ Please\ install\ version\ %1\ or\ higher.=La tua versione attuale di Java (%0) non è supportata. Si prega di installare la versione %1 o successiva.
Could\ not\ retrieve\ entry\ data\ from\ '%0'.=Impossibile recuperare dati in ingresso da '%0'.
Entry\ from\ %0\ could\ not\ be\ parsed.=Non è stato possibile analizzare la voce %0.
@@ -1788,7 +1788,6 @@ Invalid\ identifier\:\ '%0'.=Identificatore non valido\: '%0'.
This\ paper\ has\ been\ withdrawn.=Questo documento è stato ritirato.
Finished\ writing\ XMP\ metadata.=Terminata la scrittura dei metadati XMP.
empty\ citation\ key=chiave BibTeX vuota
-Your\ Java\ Runtime\ Environment\ is\ located\ at\ %0.=Il tuo ambiente di Runtime di Java si trova in %0.
Aux\ file=File aux
Group\ containing\ entries\ cited\ in\ a\ given\ TeX\ file=Gruppo contenente voci citate in un determinato file TeX
diff --git a/src/main/resources/l10n/JabRef_ja.properties b/src/main/resources/l10n/JabRef_ja.properties
index 4872639067b..0260f81e822 100644
--- a/src/main/resources/l10n/JabRef_ja.properties
+++ b/src/main/resources/l10n/JabRef_ja.properties
@@ -326,8 +326,6 @@ File\ not\ found=ファイルが見つかりませんでした
Filter=フィルタ
-Finished\ automatically\ setting\ external\ links.=外部リンクの自動設定が終了しました
-
Filter\ groups=グループ絞り込み
Finished\ writing\ XMP\ for\ %0\ file\ (%1\ skipped,\ %2\ errors).=XMPを%0ファイルに書き込み終わりました(%1スキップ・%2エラー).
@@ -1155,6 +1153,8 @@ Update\ timestamp\ on\ modification=修正時にタイムスタンプを更新
All\ key\ bindings\ will\ be\ reset\ to\ their\ defaults.=すべてのキー割当を既定値に復帰します.
Automatically\ set\ file\ links=ファイルリンクを自動設定
+Finished\ automatically\ setting\ external\ links.=外部リンクの自動設定が終了しました
+
Resetting\ all\ key\ bindings=キー割当をすべて復帰
Network=ネットワーク
@@ -1720,15 +1720,12 @@ Checking\ integrity...=整合性をチェックしています...
Remove\ hyphenated\ line\ breaks=ハイフネーションを行なった改行を取り除く
Removes\ all\ hyphenated\ line\ breaks\ in\ the\ field\ content.=フィールドの内容からハイフネーションを行なった改行を全て取り除きます.
-Note\ that\ currently,\ JabRef\ does\ not\ run\ with\ Java\ 9.=現在のところ,JabRefはJava 9では動作しないのでお気をつけください.
-Your\ current\ Java\ version\ (%0)\ is\ not\ supported.\ Please\ install\ version\ %1\ or\ higher.=お使いの Java バージョン (%0) はサポートされていません.バージョン %1 以上のものをインストールしてください.
Could\ not\ retrieve\ entry\ data\ from\ '%0'.='%0' から項目データを取得することができませんでした.
Entry\ from\ %0\ could\ not\ be\ parsed.=%0 からの項目を解析することができませんでした.
Invalid\ identifier\:\ '%0'.=「%0」は識別子として無効です.
This\ paper\ has\ been\ withdrawn.=この論文は撤回されました.
Finished\ writing\ XMP\ metadata.=XMPメタデータを書き終えました.
-Your\ Java\ Runtime\ Environment\ is\ located\ at\ %0.=お使いのJava Runtime Environmentは%0にあります.
Aux\ file=auxファイル
Group\ containing\ entries\ cited\ in\ a\ given\ TeX\ file=特定のTeXファイルでの引用項目を集めたグループ
diff --git a/src/main/resources/l10n/JabRef_nl.properties b/src/main/resources/l10n/JabRef_nl.properties
index 41c5650528c..141b1313ce4 100644
--- a/src/main/resources/l10n/JabRef_nl.properties
+++ b/src/main/resources/l10n/JabRef_nl.properties
@@ -18,6 +18,7 @@ Abbreviate\ names=Namen afkorten
Abbreviated\ %0\ journal\ names.=Afgekorte %0 logboek namen.
Abbreviation=Afkorting
+Abbreviations=Afkortingen
About\ JabRef=Over JabRef
@@ -58,6 +59,7 @@ Appearance=Uiterlijk
Application=Programma
+Application\ to\ push\ entries\ to=Applicatie om entries naar te sturen
Apply=Toepassen
@@ -84,8 +86,11 @@ Available\ import\ formats=Beschikbare importeer formaten
%0\ source=%0-broncode
+Background\ Tasks=Achtergrondtaken
+Background\ Tasks\ are\ running=Achtergrondtaken worden uitgevoerd
+Background\ Tasks\ are\ done=Achtergrondtaken zijn klaar
Browse=Bladeren
@@ -93,8 +98,11 @@ by=door
The\ conflicting\ fields\ of\ these\ entries\ will\ be\ merged\ into\ the\ 'Comment'\ field.=De tegenstrijdige velden van deze invoergegevens zullen worden samengevoegd in het veld 'Opmerking'.
Cancel=Annuleren
+Cannot\ create\ group=Kan groep niet maken
+Cannot\ create\ group.\ Please\ create\ a\ library\ first.=Kan groep niet maken. Maak eerst een bibliotheek.
+Cannot\ open\ folder\ as\ the\ file\ is\ an\ online\ link.=Kan map niet openen omdat het bestand een online link is.
case\ insensitive=hoofdletter ongevoelig
@@ -141,6 +149,7 @@ Copied=Gekopieerd
Copy=Kopiëren
+Copy\ citation\ key=Kopiëer citatiesleutel
Copy\ to\ clipboard=Kopiëren naar klembord
@@ -196,6 +205,7 @@ Default=Standaard
Default\ encoding=Standaard encodering
+Downloading=Downloaden
Delete=Verwijderen
@@ -242,6 +252,7 @@ Dynamically\ group\ entries\ by\ a\ free-form\ search\ expression=Dynamisch invo
Dynamically\ group\ entries\ by\ searching\ a\ field\ for\ a\ keyword=Dynamisch invoergegevens groeperen door een veld te zoeken via een sleutelwoord
+Each\ line\ must\ be\ of\ the\ following\ form\:\ 'tab\:field1;field2;...;fieldN'.=Elke regel moet zo geformuleerd zijn\: 'tab\:veld1;veld2;...;veldN'.
Edit=Bewerken
@@ -255,6 +266,7 @@ Edit\ preamble=Inleiding bewerken
Edit\ strings=Tekenreeksen bewerken
empty\ library=lege bibliotheek
+Autocompletion=Automatisch aanvullen
Enter\ URL\ to\ download=Geef URL om te downloaden in
@@ -297,6 +309,7 @@ field=veld
Field\ name=Veldnaam
+Field\ names\ are\ not\ allowed\ to\ contain\ white\ spaces\ or\ certain\ characters\ (%0).=Veldnamen mogen geen spaties of speciale tekens bevatten (%0).
Field\ to\ group\ by=Veld te groeperen op
@@ -311,8 +324,7 @@ File\ not\ found=Bestand niet gevonden
Filter=Filteren
-Finished\ automatically\ setting\ external\ links.=Automatisch instellen van de externe links voltooid.
-
+Filter\ groups=Filter groepen
Finished\ writing\ XMP\ for\ %0\ file\ (%1\ skipped,\ %2\ errors).=XMP schrijven voor %0 bestand voltooid (%1 overgeslagen, %2 fouten).
@@ -331,6 +343,7 @@ Formatter\ name=Naam van de opmaak
found\ in\ AUX\ file=gevonden in AUX bestand
+Fulltext\ for=Volledige tekst voor
General=Algemeen
@@ -339,12 +352,15 @@ General\ Fields=Algemene Velden
Generate=Genereren
+Generate\ citation\ key=Genereer citatiesleutel
Generate\ keys=Genereer sleutels
Generate\ keys\ before\ saving\ (for\ entries\ without\ a\ key)=Genereer sleutels voor het opslaan (voor entries zonder een sleutel)
+Generated\ citation\ key\ for=Citatiesleutel gegenereerd voor
+Generating\ citation\ key\ for=Citatiesleutel aan het genereren voor
Get\ fulltext=Verkrijg volledige tekst
Gray\ out\ non-hits=Maak niet gevonden items grijs
@@ -407,6 +423,7 @@ Include\ subgroups\:\ When\ selected,\ view\ entries\ contained\ in\ this\ group
Independent\ group\:\ When\ selected,\ view\ only\ this\ group's\ entries=Onafhankelijke groep\: Wanneer geselecteerd, toon enkel de invoergegevens van deze groep
I\ Agree=Ik ga akkoord
+Invalid\ citation\ key=Ongeldige citatiesleutel
Invalid\ date\ format=Ongeldig datumformaat
@@ -429,6 +446,7 @@ keys\ in\ library=sleutels in bibliotheek
Keyword=Sleutelwoord
+Keywords=Trefwoorden
Label=Label
@@ -440,6 +458,7 @@ Link=Link
Listen\ for\ remote\ operation\ on\ port=Luister naar operatie vanop afstand op poort
Load\ and\ Save\ preferences\ from/to\ jabref.xml\ on\ start-up\ (memory\ stick\ mode)=Laden en opstaan voorkeuren van/naar jabref.xml bij het opstarten (geheugenstick-modus)
+Show\ advanced\ hints\ (i.e.\ helpful\ tooltips,\ suggestions\ and\ explanation)=Toon geavanceerde hints (bijv. nuttige tooltips, suggesties en uitleg)
Main\ file\ directory=Hoofdbestand map
@@ -550,6 +569,7 @@ Paste=Plakken
paste\ entries=plak entries
+paste\ entry\ %0=plak entry %0
Path\ to\ %0\ not\ defined=Pad naar %0 niet gedefinieerd
@@ -582,6 +602,8 @@ Error\ while\ generating\ citation\ style=Fout bij het genereren van de citaties
Preview\ style\ changed\ to\:\ %0=Voorbeeld van de stijl gewijzigd naar\: %0
Next\ preview\ layout=Volgend lay-out voorbeeld
Previous\ preview\ layout=Vorig lay-out voorbeeld
+Available=Beschikbaar
+Selected=Geselecteerd
Previous\ entry=Vorige invoer
Primary\ sort\ criterion=Primair sorteercriterium
Problem\ with\ parsing\ entry=Probleem met ontleding invoer
@@ -593,6 +615,7 @@ Pushed\ citations\ to\ %0=Citaten verplaatst naar %0
Quit\ JabRef=JabRef afsluiten
+Read\ only=Alleen lezen
Redo=Overdoen
@@ -670,6 +693,7 @@ resolved=opgelost
Restart=Herstarten
+Restart\ required=Herstart vereist
Review=Herzien
Review\ changes=Wijzigingen herzien
@@ -1003,6 +1027,7 @@ Auto-generating\ PDF-Names\ does\ not\ support\ undo.\ Continue?=Ongedaan maken
Use\ full\ firstname\ whenever\ possible=Gebruik volledige voornaam indien mogelijk
Use\ abbreviated\ firstname\ whenever\ possible=Gebruik afgekorte voornaam indien mogelijk
Use\ abbreviated\ and\ full\ firstname=Gebruik afgekorte en volledige voornaam
+First\ names=Voornamen
Cleanup\ entries=Invoergevens opschonen
Automatically\ assign\ new\ entry\ to\ selected\ groups=Nieuwe invoer automatisch toewijzen aan geselecteerde groepen
%0\ mode=%0 modus
@@ -1097,6 +1122,8 @@ Update\ timestamp\ on\ modification=Tijdsstempel bij wijziging bijwerken
All\ key\ bindings\ will\ be\ reset\ to\ their\ defaults.=Alle sleutelbindingen worden teruggezet naar hun standaardwaarden.
Automatically\ set\ file\ links=Bestandslinks automatisch instellen
+Finished\ automatically\ setting\ external\ links.=Automatisch instellen van de externe links voltooid.
+
Resetting\ all\ key\ bindings=Sleutelbindingen allemaal resetten
Network=Netwerk
@@ -1315,6 +1342,7 @@ Add\ enclosing\ braces=Accolades toevoegen
Add\ braces\ encapsulating\ the\ complete\ field\ content.=Voeg accolades toe die de volledige veldinhoud inkapselen.
Remove\ enclosing\ braces=Accolades verwijderen
Removes\ braces\ encapsulating\ the\ complete\ field\ content.=Verwijdert accolades die de volledige veldinhoud inkapselen.
+Shorten\ DOI=Verkort DOI
Sentence\ case=Hoofdletterinstellingen van de zin
Shortens\ lists\ of\ persons\ if\ there\ are\ more\ than\ 2\ persons\ to\ "et\ al.".=Verkort de lijst van mensen naar 'et al.' wanneer er meer dan twee mensen zijn.
Title\ case=Hoofdletterinstellingen van de titel
@@ -1631,14 +1659,11 @@ Checking\ integrity...=Integriteitscontrole...
Remove\ hyphenated\ line\ breaks=Verwijder afgebroken regeleinden
Removes\ all\ hyphenated\ line\ breaks\ in\ the\ field\ content.=Verwijdert alle afgebroken regelafbrekingen in de veldinhoud.
-Note\ that\ currently,\ JabRef\ does\ not\ run\ with\ Java\ 9.=Merk op dat JabRef momenteel niet werkt met Java 9.
-Your\ current\ Java\ version\ (%0)\ is\ not\ supported.\ Please\ install\ version\ %1\ or\ higher.=Uw huidige versie van Java (%0) wordt niet ondersteunt. Installeer versie %1 of hoger.
Could\ not\ retrieve\ entry\ data\ from\ '%0'.=Kon geen data ophalen van '%0'.
Entry\ from\ %0\ could\ not\ be\ parsed.=Invoer van %0 kon niet worden geparseerd.
Invalid\ identifier\:\ '%0'.=Ongeldig Id\: '%0'.
This\ paper\ has\ been\ withdrawn.=Dit artikel is ingetrokken.
-Your\ Java\ Runtime\ Environment\ is\ located\ at\ %0.=Uw Java Runtime Environment bevindt zich op %0.
Aux\ file=Aux bestand
Group\ containing\ entries\ cited\ in\ a\ given\ TeX\ file=Groep bevat invoergegevens aangehaald in een bepaald TeX-bestand
diff --git a/src/main/resources/l10n/JabRef_no.properties b/src/main/resources/l10n/JabRef_no.properties
index 72d467b8b39..65b4bc83251 100644
--- a/src/main/resources/l10n/JabRef_no.properties
+++ b/src/main/resources/l10n/JabRef_no.properties
@@ -312,8 +312,6 @@ File\ not\ found=Fant ikke filen
Filter=Filtrér
-Finished\ automatically\ setting\ external\ links.=Fullførte automatisk setting av eksterne linker.
-
Finished\ writing\ XMP\ for\ %0\ file\ (%1\ skipped,\ %2\ errors).=Fullførte skriving av XMP-data for %0 fil(er) (hoppet over %1, %2 mislyktes).
@@ -991,6 +989,8 @@ Manage\ keywords=Administrer nøkkelord
Merge\ entries=Slå sammen oppføringer
+Finished\ automatically\ setting\ external\ links.=Fullførte automatisk setting av eksterne linker.
+
diff --git a/src/main/resources/l10n/JabRef_pl.properties b/src/main/resources/l10n/JabRef_pl.properties
index 4505b7a4ba0..29156d872af 100644
--- a/src/main/resources/l10n/JabRef_pl.properties
+++ b/src/main/resources/l10n/JabRef_pl.properties
@@ -247,7 +247,6 @@ File\ not\ found=Nie znaleziono pliku
Filter=Filtruj
-
Filter\ groups=Filtruj grupy
@@ -715,6 +714,7 @@ Result=Rezultat
+
Network=Sieć
Hostname=Nazwa hosta
diff --git a/src/main/resources/l10n/JabRef_pt.properties b/src/main/resources/l10n/JabRef_pt.properties
index d7f1404201b..925347b2083 100644
--- a/src/main/resources/l10n/JabRef_pt.properties
+++ b/src/main/resources/l10n/JabRef_pt.properties
@@ -317,8 +317,6 @@ File\ not\ found=Arquivo não encontrado
Filter=Filtro
-Finished\ automatically\ setting\ external\ links.=A definição automática de links externos foi finalizada.
-
Finished\ writing\ XMP\ for\ %0\ file\ (%1\ skipped,\ %2\ errors).=A escrita de metadados XMP para o arquivo %0 terminou (%1 ignorado, %2 erros).
@@ -1084,6 +1082,8 @@ Update\ timestamp\ on\ modification=Atualizar timestamp na modificação
All\ key\ bindings\ will\ be\ reset\ to\ their\ defaults.=Todas as teclas de atalho serão reconfiguradas para seus valores padrão.
Automatically\ set\ file\ links=Definir links para os arquivos automaticamente
+Finished\ automatically\ setting\ external\ links.=A definição automática de links externos foi finalizada.
+
Resetting\ all\ key\ bindings=Redefinindo todas as teclas de atalho
Network=Rede
diff --git a/src/main/resources/l10n/JabRef_pt_BR.properties b/src/main/resources/l10n/JabRef_pt_BR.properties
index 3e3307eeb81..de61e3a2b2d 100644
--- a/src/main/resources/l10n/JabRef_pt_BR.properties
+++ b/src/main/resources/l10n/JabRef_pt_BR.properties
@@ -338,8 +338,6 @@ File\ not\ found=Arquivo não encontrado
Filter=Filtro
-Finished\ automatically\ setting\ external\ links.=A definição automática de links externos foi finalizada.
-
Filter\ groups=Filtrar grupos
Finished\ writing\ XMP\ for\ %0\ file\ (%1\ skipped,\ %2\ errors).=A escrita de metadados XMP para o arquivo %0 terminou (%1 ignorado, %2 erros).
@@ -1190,6 +1188,8 @@ Update\ timestamp\ on\ modification=Atualizar timestamp na modificação
All\ key\ bindings\ will\ be\ reset\ to\ their\ defaults.=Todas as teclas de atalho serão reconfiguradas para seus valores padrão.
Automatically\ set\ file\ links=Definir links para os arquivos automaticamente
+Finished\ automatically\ setting\ external\ links.=A definição automática de links externos foi finalizada.
+
Resetting\ all\ key\ bindings=Redefinindo todas as teclas de atalho
Network=Rede
@@ -1772,8 +1772,6 @@ Checking\ integrity...=Verificando integridade...
Remove\ hyphenated\ line\ breaks=Remover quebras de linha hifenizadas
Removes\ all\ hyphenated\ line\ breaks\ in\ the\ field\ content.=Remove todas as quebras de linha hifenizadas no conteúdo do campo.
-Note\ that\ currently,\ JabRef\ does\ not\ run\ with\ Java\ 9.=Atualmente o JabRef não roda com Java 9.
-Your\ current\ Java\ version\ (%0)\ is\ not\ supported.\ Please\ install\ version\ %1\ or\ higher.=Sua versão atual do Java (%0) não é suportada. Por favor, instale a versão %1 ou superior.
Could\ not\ retrieve\ entry\ data\ from\ '%0'.=Não foi possível recuperar dados de referência a partir de '%0'.
Entry\ from\ %0\ could\ not\ be\ parsed.=Não foi possível analisar a referência a partir de %0.
@@ -1781,7 +1779,6 @@ Invalid\ identifier\:\ '%0'.=Identificador inválido\: '%0'.
This\ paper\ has\ been\ withdrawn.=Este documento foi retirado.
Finished\ writing\ XMP\ metadata.=Escrita de metadados XMP finalizada.
empty\ citation\ key=chave de citação vazia
-Your\ Java\ Runtime\ Environment\ is\ located\ at\ %0.=Seu Java Runtime Environment (JRE) está localizado em %0.
Aux\ file=Arquivo Aux
Group\ containing\ entries\ cited\ in\ a\ given\ TeX\ file=Grupo contendo referências citadas em um arquivo TeX
diff --git a/src/main/resources/l10n/JabRef_ru.properties b/src/main/resources/l10n/JabRef_ru.properties
index c6f0d326026..2e816e10baf 100644
--- a/src/main/resources/l10n/JabRef_ru.properties
+++ b/src/main/resources/l10n/JabRef_ru.properties
@@ -340,8 +340,6 @@ File\ not\ found=Файл не найден
Filter=Фильтр
-Finished\ automatically\ setting\ external\ links.=Автоопределение внешних ссылок выполнено.
-
Filter\ groups=Фильтровать группы
Finished\ writing\ XMP\ for\ %0\ file\ (%1\ skipped,\ %2\ errors).=Запись XMP в %0 файл(ов) выполнена (пропущено\: %1 ,с ошибками\: %2).
@@ -1192,6 +1190,8 @@ Update\ timestamp\ on\ modification=Обновить метку времени
All\ key\ bindings\ will\ be\ reset\ to\ their\ defaults.=Все назначения функциональных клавиш будут сброшены к значениям по умолчанию.
Automatically\ set\ file\ links=Автоуказание ссылок на файлы
+Finished\ automatically\ setting\ external\ links.=Автоопределение внешних ссылок выполнено.
+
Resetting\ all\ key\ bindings=Сброс назначений функциональных клавиш
Network=Сеть
@@ -1776,8 +1776,6 @@ Checking\ integrity...=Проверка целостности...
Remove\ hyphenated\ line\ breaks=Удалить переносы строк с использованием дефиса
Removes\ all\ hyphenated\ line\ breaks\ in\ the\ field\ content.=Удаляет все разрывы строк с использованием дефиса в содержимом поля.
-Note\ that\ currently,\ JabRef\ does\ not\ run\ with\ Java\ 9.=Важно\: в настоящее время JabRef не работает с Java 9.
-Your\ current\ Java\ version\ (%0)\ is\ not\ supported.\ Please\ install\ version\ %1\ or\ higher.=Ваша текущая версия Java (%0) не поддерживается. Пожалуйста, установите версию %1 или выше.
Could\ not\ retrieve\ entry\ data\ from\ '%0'.=Не удалось получить данные из записи '%0'.
Entry\ from\ %0\ could\ not\ be\ parsed.=Данные в %0 не могут быть обработаны.
@@ -1785,7 +1783,6 @@ Invalid\ identifier\:\ '%0'.=Неверный идентификатор\: '%0'.
This\ paper\ has\ been\ withdrawn.=Настоящий документ был отозван.
Finished\ writing\ XMP\ metadata.=Закончилась запись метаданных XMP.
empty\ citation\ key=пустой ключ цитаты
-Your\ Java\ Runtime\ Environment\ is\ located\ at\ %0.=Ваша исполнительная среда Java расположена в %0.
Aux\ file=Aux файл
Group\ containing\ entries\ cited\ in\ a\ given\ TeX\ file=Группа, содержащая записи в заданном TeX файле
diff --git a/src/main/resources/l10n/JabRef_sv.properties b/src/main/resources/l10n/JabRef_sv.properties
index df3745755ab..e934d90bfaa 100644
--- a/src/main/resources/l10n/JabRef_sv.properties
+++ b/src/main/resources/l10n/JabRef_sv.properties
@@ -314,7 +314,6 @@ File\ not\ found=Hittar ej filen
Filter=Filtrera
-
Filter\ groups=Filtrera grupper
@@ -1039,6 +1038,7 @@ Update\ timestamp\ on\ modification=Uppdatera tidsstämpeln efter ändring
All\ key\ bindings\ will\ be\ reset\ to\ their\ defaults.=Alla tangentbordsbindingar kommer att återställas till standardvärden.
Automatically\ set\ file\ links=Skapa fillänkar automatiskt
+
Resetting\ all\ key\ bindings=Återställer alla tangentbordsbindningar
Network=Nätverk
diff --git a/src/main/resources/l10n/JabRef_tl.properties b/src/main/resources/l10n/JabRef_tl.properties
index 25a25db3229..0c3b15e31de 100644
--- a/src/main/resources/l10n/JabRef_tl.properties
+++ b/src/main/resources/l10n/JabRef_tl.properties
@@ -305,8 +305,6 @@ File\ not\ found=Hindi makita ang file
Filter=Pagsala
-Finished\ automatically\ setting\ external\ links.=Tapusing awtomatiko ang pagtatakda ng panlabas na links.
-
Finished\ writing\ XMP\ for\ %0\ file\ (%1\ skipped,\ %2\ errors).=Tapusin ang pagsusulat ng XMP para sa %0 file (%1 nilaktawan, %2 may mga mali).
@@ -1063,6 +1061,8 @@ Update\ timestamp\ on\ modification=I-update ang timestamp sa pagbabago
All\ key\ bindings\ will\ be\ reset\ to\ their\ defaults.=Ang lahat ng mga pangunahing bindings ay i-reset sa kanilang mga default.
Automatically\ set\ file\ links=Awtomatikong itakda ang mga link ng file
+Finished\ automatically\ setting\ external\ links.=Tapusing awtomatiko ang pagtatakda ng panlabas na links.
+
Resetting\ all\ key\ bindings=Pag-reset ng lahat ng mga pangunahing bindings
Network=Network
@@ -1312,14 +1312,11 @@ Checking\ integrity...=Pagsusuri sa integridad...
Remove\ hyphenated\ line\ breaks=Alinisin ang mga linya ng hyphenated line
Removes\ all\ hyphenated\ line\ breaks\ in\ the\ field\ content.=Tinanggal ang lahat ng mga nalagpas na linya sa nilalaman ng patlang.
-Note\ that\ currently,\ JabRef\ does\ not\ run\ with\ Java\ 9.=Tandaan na sa kasalukuyan, ang JabRef ay hindi tumaktakbo sa Java 9.
-Your\ current\ Java\ version\ (%0)\ is\ not\ supported.\ Please\ install\ version\ %1\ or\ higher.=Ang iyong kasalukuyang bersyon ng Java (%0) ay hindi suportado. Mangyaring i-install ang bersyon %1 o mas mataas.
Could\ not\ retrieve\ entry\ data\ from\ '%0'.=Hindi makuha ang data mula sa entry '%0'.
Entry\ from\ %0\ could\ not\ be\ parsed.=Ang entry mula sa %0 ay hindi ma-parse.
Invalid\ identifier\:\ '%0'.=Di-wastong identifier\: '%0'.
This\ paper\ has\ been\ withdrawn.=Ang papel na ito ay na-withdraw.
-Your\ Java\ Runtime\ Environment\ is\ located\ at\ %0.=Ang iyong Java Runtime Environment ay matatagpuan sa %0.
Aux\ file=Aux file
Group\ containing\ entries\ cited\ in\ a\ given\ TeX\ file=Grupo na naglalaman ng mga entry na binanggit sa isang ibinigay na file ng TeX
diff --git a/src/main/resources/l10n/JabRef_tr.properties b/src/main/resources/l10n/JabRef_tr.properties
index 34c5f264b51..62c9ddd5cb9 100644
--- a/src/main/resources/l10n/JabRef_tr.properties
+++ b/src/main/resources/l10n/JabRef_tr.properties
@@ -340,8 +340,6 @@ File\ not\ found=Dosya bulunamadı
Filter=Süzgeç
-Finished\ automatically\ setting\ external\ links.=Harici linklerin otokurulması bitti.
-
Filter\ groups=Grupları filtrele
Finished\ writing\ XMP\ for\ %0\ file\ (%1\ skipped,\ %2\ errors).=%0 dosya için XMP yazımı bitti (%1 atlandı, %2 hata).
@@ -640,6 +638,7 @@ Primary\ sort\ criterion=Birincil sıralama kriteri
Problem\ with\ parsing\ entry=Girdi ayrıştırmada sorun
Processing\ %0=İşleniyor %0
Pull\ changes\ from\ shared\ database=Paylaşılmış veritabaınından değişiklikleri çek
+Problem\ finding\ files.\ See\ error\ log\ for\ details.=Dosyaları bulmada sorun. Ayrıntılar için hata kayıtlarına bakınız.
Pushed\ citations\ to\ %0=Atıflar %0'a itelendi
@@ -1193,6 +1192,9 @@ Update\ timestamp\ on\ modification=Değiştirirken zaman damgasını güncelle
All\ key\ bindings\ will\ be\ reset\ to\ their\ defaults.=Tüm tuş bağlantıları öntanımlılara dönüştürülecek.
Automatically\ set\ file\ links=Dosya bağlantılarını otomatik olarak kur
+Finished\ automatically\ setting\ external\ links.=Harici linklerin otokurulması bitti.
+Changed\ %0\ entries.=%0 girdi değiştirildi.
+
Resetting\ all\ key\ bindings=Tüm tuş bağlantıları başa döndürülüyor
Network=Ağ
@@ -1779,8 +1781,6 @@ Checking\ integrity...=Bütünlük denetleniyor...
Remove\ hyphenated\ line\ breaks=Hecelenmiş satır sonlarını kaldır
Removes\ all\ hyphenated\ line\ breaks\ in\ the\ field\ content.=Alan içeriğindeki tüm hecelenmiş satır sonlarını kaldırır.
-Note\ that\ currently,\ JabRef\ does\ not\ run\ with\ Java\ 9.=Dikkatinize\: JabRef halen Java 9'la çalışmaz.
-Your\ current\ Java\ version\ (%0)\ is\ not\ supported.\ Please\ install\ version\ %1\ or\ higher.=Mevcut Java sürümünüz (%0) desteklenmiyor. Lütfen sürüm %1 ya da daha güncelini kurunuz.
Could\ not\ retrieve\ entry\ data\ from\ '%0'.='%0' dan girdi verileri alınamadı.
Entry\ from\ %0\ could\ not\ be\ parsed.=%0'dan girdi çözümlenemedi.
@@ -1788,7 +1788,6 @@ Invalid\ identifier\:\ '%0'.=Geçersiz tanımlayıcı\: '%0 '.
This\ paper\ has\ been\ withdrawn.=Bu yayın geri çekildi.
Finished\ writing\ XMP\ metadata.=XMP metaveri yazımı bitti.
empty\ citation\ key=boş atıf anahtarı
-Your\ Java\ Runtime\ Environment\ is\ located\ at\ %0.=Sizin Java Runtime Environment'ınız %0'da yer alır.
Aux\ file=Aux dosya
Group\ containing\ entries\ cited\ in\ a\ given\ TeX\ file=Belirli bir TeX dosyasında alıntılanmış girdileri içeren grup
diff --git a/src/main/resources/l10n/JabRef_vi.properties b/src/main/resources/l10n/JabRef_vi.properties
index e3773291e67..8e239bb3b09 100644
--- a/src/main/resources/l10n/JabRef_vi.properties
+++ b/src/main/resources/l10n/JabRef_vi.properties
@@ -320,8 +320,6 @@ File\ not\ found=Không thấy tập tin
Filter=Lọc
-Finished\ automatically\ setting\ external\ links.=Thiết lập tự động các liên kết ngoài hoàn tất.
-
Filter\ groups=Nhóm bộ lọc
Finished\ writing\ XMP\ for\ %0\ file\ (%1\ skipped,\ %2\ errors).=Kết thúc ghi XMP cho %0 tập tin (bỏ qua %1, %2 lỗi).
@@ -920,6 +918,8 @@ None=Không có
Automatically\ set\ file\ links=Tự động tạo liên kết cho tập tin
+Finished\ automatically\ setting\ external\ links.=Thiết lập tự động các liên kết ngoài hoàn tất.
+
diff --git a/src/main/resources/l10n/JabRef_zh.properties b/src/main/resources/l10n/JabRef_zh_CN.properties
similarity index 99%
rename from src/main/resources/l10n/JabRef_zh.properties
rename to src/main/resources/l10n/JabRef_zh_CN.properties
index 2236cd8c9ec..748af0d586a 100644
--- a/src/main/resources/l10n/JabRef_zh.properties
+++ b/src/main/resources/l10n/JabRef_zh_CN.properties
@@ -302,6 +302,7 @@ Error=错误
Error\ occurred\ when\ parsing\ entry=分析记录时发生错误
Error\ opening\ file=打开文件错误
Error\ while\ writing=写入错误
+Error\ during\ persistence\ of\ crawling\ results.=挥舞结果持续存在时出错。
'%0'\ exists.\ Overwrite\ file?='%0' 已存在,是否覆盖文件?
Export=导出
Export\ preferences=导出首选项设置
@@ -338,8 +339,6 @@ File\ not\ found=无法找到文件
Filter=筛选
-Finished\ automatically\ setting\ external\ links.=完成自动设置外部链接。
-
Filter\ groups=筛选组
Finished\ writing\ XMP\ for\ %0\ file\ (%1\ skipped,\ %2\ errors).=完成写入 XMP-元数据到 %0 文件 (跳过 %1 条,%2 条错误).
@@ -1190,6 +1189,8 @@ Update\ timestamp\ on\ modification=修改记录时更新时间戳
All\ key\ bindings\ will\ be\ reset\ to\ their\ defaults.=所有键绑定都将重置为其默认值。
Automatically\ set\ file\ links=自动设置文件链接
+Finished\ automatically\ setting\ external\ links.=完成自动设置外部链接。
+
Resetting\ all\ key\ bindings=重置所有键绑定
Network=网络
@@ -1773,8 +1774,6 @@ Checking\ integrity...=正在检查完整性...
Remove\ hyphenated\ line\ breaks=移除带连字符的换行符
Removes\ all\ hyphenated\ line\ breaks\ in\ the\ field\ content.=移除字段内容中的所有带连字符的换行符。
-Note\ that\ currently,\ JabRef\ does\ not\ run\ with\ Java\ 9.=请注意,当前版本的JabRef 不能在 Java 9 中运行。
-Your\ current\ Java\ version\ (%0)\ is\ not\ supported.\ Please\ install\ version\ %1\ or\ higher.=不支持您当前的 Java 版本 (%0)。请安装 %1 或更高版本。
Could\ not\ retrieve\ entry\ data\ from\ '%0'.=无法从 "%0" 中检索条目数据。
Entry\ from\ %0\ could\ not\ be\ parsed.=无法解析 %0 中的条目。
@@ -1782,7 +1781,6 @@ Invalid\ identifier\:\ '%0'.=无效的标识符:'%0'。
This\ paper\ has\ been\ withdrawn.=这篇论文已被撤回。
Finished\ writing\ XMP\ metadata.=写入XMP元数据完毕
empty\ citation\ key=清空关键字
-Your\ Java\ Runtime\ Environment\ is\ located\ at\ %0.=您的Java运行环境位于 %0。
Aux\ file=Aux 文件
Group\ containing\ entries\ cited\ in\ a\ given\ TeX\ file=包含给定TeX文件中引用的条目组
diff --git a/src/main/resources/l10n/JabRef_zh_TW.properties b/src/main/resources/l10n/JabRef_zh_TW.properties
new file mode 100644
index 00000000000..3a5c68e209b
--- /dev/null
+++ b/src/main/resources/l10n/JabRef_zh_TW.properties
@@ -0,0 +1,794 @@
+%0\ contains\ the\ regular\ expression\ %1=%0 包含正規表達式 %1
+
+%0\ contains\ the\ term\ %1=%0 包含字詞 %1
+
+%0\ doesn't\ contain\ the\ regular\ expression\ %1=%0 不包含正規表達式 %1
+
+%0\ doesn't\ contain\ the\ term\ %1=%0 不包含字詞 %1
+
+%0\ export\ successful=%0 匯出成功
+
+%0\ matches\ the\ regular\ expression\ %1=%0 符合正規表達式 %1
+
+%0\ matches\ the\ term\ %1=%0 符合字詞 %1
+
+Abbreviate\ journal\ names\ of\ the\ selected\ entries\ (DEFAULT\ abbreviation)=縮寫選取條目的期刊名稱(以預設格式縮寫)
+Abbreviate\ journal\ names\ of\ the\ selected\ entries\ (MEDLINE\ abbreviation)=縮寫選取條目的期刊名稱(以 MEDLINE 格式縮寫)
+Abbreviate\ journal\ names\ of\ the\ selected\ entries\ (SHORTEST\ UNIQUE\ abbreviation)=縮寫選取條目的期刊名稱(以 SHORTEST UNIQUE 格式縮寫)
+
+Abbreviate\ names=縮寫名稱
+Abbreviated\ %0\ journal\ names.=縮寫的 %0 期刊名稱。
+
+Abbreviation=縮寫
+Abbreviations=縮寫
+
+About\ JabRef=關於 JabRef
+
+Abstract=摘要
+
+Accept=同意
+
+Accept\ change=同意變更
+
+Accept\ recommendations\ from\ Mr.\ DLib=接受 Mr. DLib 的建議
+
+Action=操作
+
+Add=新增
+
+
+
+Add\ selected\ entries\ to\ this\ group=新增選取條目至群組
+
+Add\ subgroup=建立子群組
+
+Added\ group\ "%0".=已新增群組「%0」。
+
+Added\ string=已新增字串
+
+All\ entries=所有條目
+
+Always\ reformat\ BIB\ file\ on\ save\ and\ export=總是在儲存與匯出重新格式化 BIB 檔案
+
+and=和
+
+
+Appearance=界面外觀
+
+Application=應用程式
+
+
+Apply=套用
+
+
+Assign\ the\ original\ group's\ entries\ to\ this\ group?=是否將原來群組中的條目分配到當前群組?
+
+Assigned\ %0\ entries\ to\ group\ "%1".=分配了 %0 項條目到群組「%1」。
+
+Assigned\ 1\ entry\ to\ group\ "%0".=分配了 1 項條目到群組「%0」。
+
+Autogenerate\ citation\ keys=自動生成引用鍵值(citation key)
+
+Autolink\ files\ with\ names\ starting\ with\ the\ citation\ key=自動連結名稱以引用鍵值(citatiom kwy)起始的檔案
+
+
+Automatically\ create\ groups=自動創建群組
+
+Automatically\ remove\ exact\ duplicates=自動移除重複條目
+
+AUX\ file\ import=AUX 檔案匯入
+
+Available\ export\ formats=可用的匯出格式
+
+Available\ import\ formats=可用的匯入格式
+
+%0\ source=%0 原始碼
+
+Background\ Tasks=背景任務
+
+Background\ Tasks\ are\ running=背景任務正在執行
+
+Background\ Tasks\ are\ done=背景任務執行完成
+
+Browse=瀏覽
+
+The\ conflicting\ fields\ of\ these\ entries\ will\ be\ merged\ into\ the\ 'Comment'\ field.=這些條目的衝突欄位將會合併到「註解」欄位。
+
+Cancel=取消
+Cannot\ create\ group=無法創建群組
+
+Cannot\ create\ group.\ Please\ create\ a\ library\ first.=無法創建群組。請先創建一個文庫。
+
+Cannot\ open\ folder\ as\ the\ file\ is\ an\ online\ link.=這個檔案是一個線上連結,因此無法開啟資料夾。
+
+case\ insensitive=不區分大小寫
+
+case\ sensitive=區分大小寫
+
+Case\ sensitive=區分大小寫
+
+
+Change\ case=修改大小寫
+
+Change\ entry\ type=修改條目類型
+
+
+Change\ of\ Grouping\ Method=群組方法改變
+
+change\ preamble=修改導言區
+
+Changed\ language=變更語言
+
+Changed\ preamble=已修改導言區
+
+Cite\ command=引用指令
+
+Clear=清除
+
+Clear\ fields=清除欄位
+
+Close\ entry=關閉條目
+
+Close\ dialog=關閉對話視窗
+
+Close\ the\ current\ library=關閉當前的文獻書庫
+
+Close\ window=關閉視窗
+
+Comments=註解
+
+Contained\ in=包含在
+
+Content=内容
+
+Copied=已複製
+
+
+Copy=複製
+
+Copy\ citation\ key=複製引用鍵值(citation key)
+
+Copy\ to\ clipboard=複製到剪貼簿
+
+
+Could\ not\ export\ file=無法匯出檔案
+
+Could\ not\ export\ preferences=無法匯出偏好設定
+
+Could\ not\ find\ a\ suitable\ import\ format.=無法找到符合的匯入格式。
+Could\ not\ import\ preferences=無法匯入偏好設定
+
+
+Could\ not\ print\ preview=無法列印預覽
+
+Could\ not\ run\ the\ 'vim'\ program.=無法運行「vim」程式。
+
+Could\ not\ save\ file.=無法儲存檔案
+Character\ encoding\ '%0'\ is\ not\ supported.=,不支援「%0」編碼。
+
+Create\ custom\ fields\ for\ each\ BibTeX\ entry=為每項 BibTeX 條目創建自定義欄位
+
+crossreferenced\ entries\ included=包含交叉引用的條目
+
+Current\ content=當前內容
+
+Current\ value=目前的值
+
+Custom\ entry\ types=自定義的條目類型
+
+Custom\ entry\ types\ found\ in\ file=檔案中包含自定義的條目類型
+
+Customize\ entry\ types=自定義條目類型
+
+Customize\ key\ bindings=自定義快捷熱鍵
+
+Cut=剪下
+
+cut\ entries=剪下條目
+
+cut\ entry\ %0=剪下條目 %0
+
+
+Library\ encoding=文獻倉庫編碼
+
+Library\ properties=文獻倉庫屬性
+
+Date\ format=日期格式
+
+Default=預設
+
+Default\ encoding=預設編碼
+
+Downloading=正在下載
+
+
+Delete=刪除
+
+Delete\ entry=刪除條目
+
+Delete\ multiple\ entries=刪除多個條目
+
+Deleted=已刪除
+
+Permanently\ delete\ local\ file=刪除本機檔案
+
+Descending=降序
+
+Description=敘述
+
+
+
+Display\ all\ error\ messages=顯示全部錯誤訊息
+
+Display\ help\ on\ command\ line\ options=在命令行選項中顯示幫助
+
+Display\ version=顯示版本
+
+
+Do\ not\ import\ entry=不要匯入條目
+
+
+
+
+Download\ file=下載檔案
+duplicate\ removal=移除重複
+
+
+
+
+
+
+Edit=編輯
+
+Edit\ entry=編輯條目
+Edit\ file\ type=編輯檔案類型
+
+Edit\ group=編輯群組
+
+
+
+Autocompletion=自動補全
+
+
+entries=條目
+
+
+entry=條目
+
+Entry\ editor=條目編輯器
+
+
+
+Error=錯誤
+Export=匯出
+Export\ preferences\ to\ file=匯出偏好設定至檔案
+Export\ to\ clipboard=匯出至剪貼簿
+
+
+External\ file\ links=外部檔案連結
+
+External\ programs=外部程式
+
+Field=欄位
+
+field=欄位
+
+Field\ name=欄位名稱
+
+Field\ names\ are\ not\ allowed\ to\ contain\ white\ spaces\ or\ certain\ characters\ (%0).=欄位名稱不能包含空格或特定字元 (%0)。
+
+
+File=檔案
+
+file=檔案
+File\ directory\ is\ not\ set\ or\ does\ not\ exist\!=尚未設置檔案目錄或目錄不存在!
+
+File\ exists=檔案已存在
+
+File\ not\ found=找不到檔案
+
+Filter=篩選
+
+Filter\ groups=篩選群組
+
+
+
+
+Float=浮動(結果上浮到最前)
+Format\:\ Tab\:field;field;...\ (e.g.\ General\:url;pdf;note...)=格式:Tab\:field;field;...(例:General\:url;pdf;note...)
+
+Format\ of\ author\ and\ editor\ names=作者和編輯的姓名格式
+Format\ string=格式化字串
+
+Format\ used=使用的格式
+Formatter\ name=格式化工具名稱
+
+found\ in\ AUX\ file=在 AUX 檔案内找到
+
+Fulltext\ for=全文如下:
+
+Further\ information\ about\ Mr.\ DLib\ for\ JabRef\ users.=更多關於 Mr. Dlib 的資訊
+
+General=一般
+
+
+Generate=生成
+
+Generate\ citation\ key=生成引用鍵值(citation key)
+
+Generate\ keys=生成鍵值
+
+
+
+Get\ fulltext=取得全文
+
+
+Groups=群組
+has/have\ both\ a\ 'Comment'\ and\ a\ 'Review'\ field.=包含「註解」和「評論」欄位。
+
+Have\ you\ chosen\ the\ correct\ package\ path?=您是否選擇了正確的套件路徑?
+
+Help=說明
+
+Help\ on\ regular\ expression\ search=正規表達式搜索幫助
+
+
+
+Highlight=高亮
+Marking=標記
+Underline=底線
+Empty\ Highlight=清除高亮
+Empty\ Marking=清除標記
+Empty\ Underline=清除底線
+
+
+HTML\ table=HTML 表格
+HTML\ table\ (with\ Abstract\ &\ BibTeX)=HTML 表格(包含摘要和 BibTeX)
+Icon=圖示
+
+Ignore=忽略
+
+Import=匯入
+
+Import\ and\ keep\ old\ entry=匯入且保留已有條目
+
+Import\ and\ remove\ old\ entry=匯入且移除已有條目
+
+Import\ entries=匯入條目
+Import\ file=匯入檔案
+
+Import\ name=匯入名稱
+
+Import\ preferences=匯入偏好設定
+
+Import\ preferences\ from\ file=從檔案匯入偏好設定
+
+Imported\ entries=已匯入條目
+
+
+Importing=正在匯入
+
+
+
+I\ Agree=我同意
+
+
+
+
+Online\ help=線上說明
+
+JabRef\ preferences=JabRef 偏好設定
+
+
+
+
+
+
+Keyword=關鍵字
+
+Keywords=關鍵字
+
+Label=標籤
+
+Language=語言
+
+
+Link=連結
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+Open=開啟
+
+Open\ library=開啟文獻倉庫
+
+
+Open\ file=開啟檔案
+
+
+
+
+
+
+
+
+
+
+
+
+Password=密碼
+
+Paste=貼上
+
+
+
+
+
+
+
+
+
+
+
+
+Preferences=偏好設定
+
+
+
+
+
+
+Read\ only=唯讀
+
+Redo=取消復原
+
+
+regular\ expression=正規表達式
+
+Related\ articles=相關文章
+
+Remote\ operation=遠端操作
+
+Remote\ server\ port=遠端伺服器埠號
+
+Remove=移除
+
+
+
+
+
+Remove\ group=移除群組
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+Replace=取代
+Replace\ With\:=取代為:
+Find\:=尋找:
+Find\ and\ Replace=尋找與取代
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+Search=搜尋
+
+
+
+
+
+Select\ all=全選
+
+
+
+
+
+
+Settings=設定
+
+Shortcut=快速鍵
+
+Show/edit\ %0\ source=顯示/编辑 %0 原始碼
+
+Show\ 'Firstname\ Lastname'=顯示「名(Firstname) 姓(Lastname)」
+
+Show\ 'Lastname,\ Firstname'=顯示「姓(Lastname), 名(Firstname) 」
+
+
+
+Show\ last\ names\ only=僅顯示「姓(Lastname)」
+
+
+
+
+
+
+Size=大小
+
+
+
+
+
+Status=狀態
+
+
+
+
+
+
+the\ field\ %0=欄位 %0
+The\ group\ "%0"\ already\ contains\ the\ selection.=群組「%0」中已經包含選取的內容。
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+Undo=復原
+
+Unknown\ BibTeX\ entries\:=未知的 BibTeX 條目:
+
+
+
+untitled=未命名
+
+
+
+
+Username=使用者名稱
+
+
+
+
+
+
+
+Warning=警告
+
+Warnings=警告
+
+
+
+
+
+
+You\ must\ restart\ JabRef\ for\ this\ to\ come\ into\ effect.=為了使這項變更生效,您必須重新啟動 JabRef。
+
+You\ must\ restart\ JabRef\ for\ the\ new\ key\ bindings\ to\ work\ properly.=為了使綁定的快捷鍵生效,您必須重新啟動 JabRef。
+
+
+
+
+
+Could\ not\ move\ file\ '%0'.=無法移動檔案「%0」。
+Could\ not\ find\ file\ '%0'.=無法找到檔案「%0」。
+
+Unable\ to\ save\ library=無法儲存文獻倉庫
+
+
+
+
+
+Autosave=自動儲存
+Autosave\ local\ libraries=自動儲存本機文獻倉庫
+Automatically\ save\ the\ library\ to=自動儲存文獻倉庫至
+Please\ enter\ a\ valid\ file\ path.=請輸入一個有效的路徑。
+
+
+
+
+
+
+
+
+
+LaTeX\ file\ directory=LaTeX 檔案目錄
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+Display\ count\ of\ items\ in\ group=顯示群組中的項目數量
+Close=關閉
+
+
+
+(\ Note\:\ Press\ return\ to\ commit\ changes\ in\ the\ table\!\ )=( 注意:按返回键提交表格中的修改! )
+Reset=重設
+Reset\ entry\ types\ and\ fields\ to\ defaults=將條目類型和欄位重置為預設值
+This\ will\ reset\ all\ entry\ types\ to\ their\ default\ values\ and\ remove\ all\ custom\ entry\ types=這將會把所有的條目類型重置為預設值,並且刪除所有自定義的條目類型。
+Replace\ tabs\ with\ space=將製表符(Tabs)取代為空格。
+Replace\ tabs\ with\ space\ in\ the\ field\ content.=將欄位内容中的製表符(Tabs)取代為空格。
+Remove\ redundant\ spaces=移除多餘的空格
+Replaces\ consecutive\ spaces\ with\ a\ single\ space\ in\ the\ field\ content.=將欄位内容中的連續空格取代為一個空格。
+
+
+Check\ connection=檢查連接
+Connection\ failed\!=連線失敗!
+Connection\ successful\!=連線成功!
+Regular\ expression=正規表達式
+
+
diff --git a/src/test/java/org/jabref/gui/fieldeditors/LinkedFileViewModelTest.java b/src/test/java/org/jabref/gui/fieldeditors/LinkedFileViewModelTest.java
index b84b6493bfc..7e37ca24303 100644
--- a/src/test/java/org/jabref/gui/fieldeditors/LinkedFileViewModelTest.java
+++ b/src/test/java/org/jabref/gui/fieldeditors/LinkedFileViewModelTest.java
@@ -23,7 +23,6 @@
import org.jabref.model.entry.BibEntry;
import org.jabref.model.entry.LinkedFile;
import org.jabref.preferences.FilePreferences;
-import org.jabref.testutils.category.FetcherTest;
import org.junit.jupiter.api.Assertions;
import org.junit.jupiter.api.BeforeEach;
@@ -152,12 +151,11 @@ void deleteWhenDialogCancelledReturnsFalseAndDoesNotRemoveFile() {
assertTrue(Files.exists(tempFile));
}
- @FetcherTest
void downloadDoesNotOverwriteFileTypeExtension() throws MalformedURLException {
linkedFile = new LinkedFile(new URL("http://arxiv.org/pdf/1207.0408v1"), "");
databaseContext = mock(BibDatabaseContext.class);
- when(filePreferences.getFileNamePattern()).thenReturn("[citationkey]"); // use this variant, as we cannot mock the linkedFileHandler cause it's initialized inside the viewModel
+ when(filePreferences.getFileNamePattern()).thenReturn("[citationkey]");
LinkedFileViewModel viewModel = new LinkedFileViewModel(linkedFile, entry, databaseContext, new CurrentThreadTaskExecutor(), dialogService, xmpPreferences, filePreferences, externalFileType);
@@ -170,4 +168,26 @@ void downloadDoesNotOverwriteFileTypeExtension() throws MalformedURLException {
task.onFailure(Assertions::fail);
new CurrentThreadTaskExecutor().execute(task);
}
+
+ @Test
+ void isNotSamePath() {
+ linkedFile = new LinkedFile("desc", tempFile, "pdf");
+ databaseContext = mock(BibDatabaseContext.class);
+ when(filePreferences.getFileNamePattern()).thenReturn("[citationkey]");
+ when(databaseContext.getFirstExistingFileDir(filePreferences)).thenReturn(Optional.of(Path.of("/home")));
+
+ LinkedFileViewModel viewModel = new LinkedFileViewModel(linkedFile, entry, databaseContext, taskExecutor, dialogService, xmpPreferences, filePreferences, externalFileType);
+ assertFalse(viewModel.isGeneratedPathSameAsOriginal());
+ }
+
+ @Test
+ void isSamePath() {
+ linkedFile = new LinkedFile("desc", tempFile, "pdf");
+ databaseContext = mock(BibDatabaseContext.class);
+ when(filePreferences.getFileNamePattern()).thenReturn("[citationkey]");
+ when(databaseContext.getFirstExistingFileDir(filePreferences)).thenReturn(Optional.of(tempFile.getParent()));
+
+ LinkedFileViewModel viewModel = new LinkedFileViewModel(linkedFile, entry, databaseContext, taskExecutor, dialogService, xmpPreferences, filePreferences, externalFileType);
+ assertTrue(viewModel.isGeneratedPathSameAsOriginal());
+ }
}
diff --git a/src/test/java/org/jabref/logic/citationkeypattern/BracketedPatternTest.java b/src/test/java/org/jabref/logic/citationkeypattern/BracketedPatternTest.java
index c7899d32c0b..d42754fef16 100644
--- a/src/test/java/org/jabref/logic/citationkeypattern/BracketedPatternTest.java
+++ b/src/test/java/org/jabref/logic/citationkeypattern/BracketedPatternTest.java
@@ -292,4 +292,36 @@ void expandBracketsEmptyStringFromEmptyBrackets() {
assertEquals("", BracketedPattern.expandBrackets("[]", null, bibEntry, null));
}
+
+ @Test
+ void expandBracketsInstitutionAbbreviationFromProvidedAbbreviation() {
+ BibEntry bibEntry = new BibEntry()
+ .withField(StandardField.AUTHOR, "{European Union Aviation Safety Agency ({EUASABRACKET})}");
+
+ assertEquals("EUASABRACKET", BracketedPattern.expandBrackets("[auth]", null, bibEntry, null));
+ }
+
+ @Test
+ void expandBracketsInstitutionAbbreviationForAuthorContainingUnion() {
+ BibEntry bibEntry = new BibEntry()
+ .withField(StandardField.AUTHOR, "{European Union Aviation Safety Agency}");
+
+ assertEquals("EUASA", BracketedPattern.expandBrackets("[auth]", null, bibEntry, null));
+ }
+
+ @Test
+ void expandBracketsLastNameForAuthorStartingWithOnlyLastNameStartingWithLowerCase() {
+ BibEntry bibEntry = new BibEntry()
+ .withField(StandardField.AUTHOR, "{eBay}");
+
+ assertEquals("eBay", BracketedPattern.expandBrackets("[auth]", null, bibEntry, null));
+ }
+
+ @Test
+ void expandBracketsLastNameWithChineseCharacters() {
+ BibEntry bibEntry = new BibEntry()
+ .withField(StandardField.AUTHOR, "杨秀群");
+
+ assertEquals("杨秀群", BracketedPattern.expandBrackets("[auth]", null, bibEntry, null));
+ }
}
diff --git a/src/test/java/org/jabref/logic/citationkeypattern/CitationKeyGeneratorTest.java b/src/test/java/org/jabref/logic/citationkeypattern/CitationKeyGeneratorTest.java
index 23eb958cb2c..82498577af2 100644
--- a/src/test/java/org/jabref/logic/citationkeypattern/CitationKeyGeneratorTest.java
+++ b/src/test/java/org/jabref/logic/citationkeypattern/CitationKeyGeneratorTest.java
@@ -377,7 +377,7 @@ void testcrossrefUniversity() {
.withField(StandardField.CROSSREF, "entry2");
BibEntry entry2 = new BibEntry()
.withCitationKey("entry2")
- .withField(StandardField.AUTHOR, "{Link{\\\"{o}}ping University}}");
+ .withField(StandardField.AUTHOR, "{Link{\\\"{o}}ping University}");
database.insertEntry(entry1);
database.insertEntry(entry2);
@@ -403,7 +403,7 @@ void testcrossrefDepartment() {
.withField(StandardField.CROSSREF, "entry2");
BibEntry entry2 = new BibEntry()
.withCitationKey("entry2")
- .withField(StandardField.AUTHOR, "{Link{\\\"{o}}ping University, Department of Electrical Engineering}}");
+ .withField(StandardField.AUTHOR, "{Link{\\\"{o}}ping University, Department of Electrical Engineering}");
database.insertEntry(entry1);
database.insertEntry(entry2);
@@ -449,7 +449,7 @@ void testcrossrefSchool() {
.withField(StandardField.CROSSREF, "entry2");
BibEntry entry2 = new BibEntry()
.withCitationKey("entry2")
- .withField(StandardField.AUTHOR, "{Link{\\\"{o}}ping University, School of Computer Engineering}}");
+ .withField(StandardField.AUTHOR, "{Link{\\\"{o}}ping University, School of Computer Engineering}");
database.insertEntry(entry1);
database.insertEntry(entry2);
diff --git a/src/test/java/org/jabref/logic/importer/WebFetchersTest.java b/src/test/java/org/jabref/logic/importer/WebFetchersTest.java
index 8a526482795..30e5b5c33fd 100644
--- a/src/test/java/org/jabref/logic/importer/WebFetchersTest.java
+++ b/src/test/java/org/jabref/logic/importer/WebFetchersTest.java
@@ -8,9 +8,11 @@
import org.jabref.logic.bibtex.FieldContentFormatterPreferences;
import org.jabref.logic.importer.fetcher.ACMPortalFetcher;
import org.jabref.logic.importer.fetcher.AbstractIsbnFetcher;
+import org.jabref.logic.importer.fetcher.GoogleScholar;
import org.jabref.logic.importer.fetcher.GrobidCitationFetcher;
import org.jabref.logic.importer.fetcher.IsbnViaEbookDeFetcher;
import org.jabref.logic.importer.fetcher.IsbnViaOttoBibFetcher;
+import org.jabref.logic.importer.fetcher.JstorFetcher;
import org.jabref.logic.importer.fetcher.MrDLibFetcher;
import io.github.classgraph.ClassGraph;
@@ -51,8 +53,10 @@ void getIdBasedFetchersReturnsAllFetcherDerivingFromIdBasedFetcher() throws Exce
expected.remove(IsbnViaEbookDeFetcher.class);
expected.remove(IsbnViaOttoBibFetcher.class);
- // Remove ACM, because it doesn't work currently
+ // Remove the following, because they don't work at the moment
expected.remove(ACMPortalFetcher.class);
+ expected.remove(JstorFetcher.class);
+ expected.remove(GoogleScholar.class);
assertEquals(expected, getClasses(idFetchers));
}
@@ -82,8 +86,10 @@ void getSearchBasedFetchersReturnsAllFetcherDerivingFromSearchBasedFetcher() thr
// Remove interfaces
expected.remove(SearchBasedParserFetcher.class);
- // Remove ACM, because it doesn't work currently
+ // Remove the following, because they don't work atm
expected.remove(ACMPortalFetcher.class);
+ expected.remove(JstorFetcher.class);
+ expected.remove(GoogleScholar.class);
expected.remove(PagedSearchBasedParserFetcher.class);
expected.remove(PagedSearchBasedFetcher.class);
@@ -102,6 +108,12 @@ void getFullTextFetchersReturnsAllFetcherDerivingFromFullTextFetcher() throws Ex
try (ScanResult scanResult = classGraph.scan()) {
ClassInfoList controlClasses = scanResult.getClassesImplementing(FulltextFetcher.class.getCanonicalName());
Set> expected = new HashSet<>(controlClasses.loadClasses());
+
+ // Remove the following, because they don't work atm
+ expected.remove(ACMPortalFetcher.class);
+ expected.remove(JstorFetcher.class);
+ expected.remove(GoogleScholar.class);
+
assertEquals(expected, getClasses(fullTextFetchers));
}
}
@@ -115,6 +127,10 @@ void getIdFetchersReturnsAllFetcherDerivingFromIdFetcher() throws Exception {
Set> expected = new HashSet<>(controlClasses.loadClasses());
expected.remove(IdParserFetcher.class);
+ // Remove the following, because they don't work at the moment
+ expected.remove(ACMPortalFetcher.class);
+ expected.remove(GoogleScholar.class);
+
assertEquals(expected, getClasses(idFetchers));
}
}
diff --git a/src/test/java/org/jabref/logic/importer/fetcher/CompositeSearchBasedFetcherTest.java b/src/test/java/org/jabref/logic/importer/fetcher/CompositeSearchBasedFetcherTest.java
index b0b326c50d5..b639c35cf5b 100644
--- a/src/test/java/org/jabref/logic/importer/fetcher/CompositeSearchBasedFetcherTest.java
+++ b/src/test/java/org/jabref/logic/importer/fetcher/CompositeSearchBasedFetcherTest.java
@@ -14,6 +14,7 @@
import org.jabref.logic.importer.SearchBasedFetcher;
import org.jabref.model.database.BibDatabaseMode;
import org.jabref.model.entry.BibEntry;
+import org.jabref.support.DisabledOnCIServer;
import org.jabref.testutils.category.FetcherTest;
import org.junit.jupiter.api.Assertions;
@@ -28,6 +29,7 @@
import static org.mockito.Mockito.when;
@FetcherTest
+@DisabledOnCIServer("Produces to many requests on CI")
public class CompositeSearchBasedFetcherTest {
private static final Logger LOGGER = LoggerFactory.getLogger(CompositeSearchBasedFetcherTest.class);
diff --git a/src/test/java/org/jabref/logic/importer/fetcher/JstorFetcherTest.java b/src/test/java/org/jabref/logic/importer/fetcher/JstorFetcherTest.java
index 2124b8f73cc..7d7c39a9002 100644
--- a/src/test/java/org/jabref/logic/importer/fetcher/JstorFetcherTest.java
+++ b/src/test/java/org/jabref/logic/importer/fetcher/JstorFetcherTest.java
@@ -44,7 +44,7 @@ public class JstorFetcherTest implements SearchBasedFetcherCapabilityTest {
.withCitationKey("10.1086/501484")
.withField(StandardField.AUTHOR, "Johnmarshall Reeve")
.withField(StandardField.TITLE, "Teachers as Facilitators: What Autonomy‐Supportive Teachers Do and Why Their Students Benefit")
- .withField(StandardField.ISSN, "{00135984, 15548279")
+ .withField(StandardField.ISSN, "00135984, 15548279")
.withField(StandardField.JOURNAL, "The Elementary School Journal")
.withField(StandardField.ABSTRACT, "Abstract Students are sometimes proactive and engaged in classroom learning activities, but they are also sometimes only reactive and passive. Recognizing this, in this article I argue that students’ classroom engagement depends, in part, on the supportive quality of the classroom climate in which they learn. According to the dialectical framework within self‐determination theory, students possess inner motivational resources that classroom conditions can support or frustrate. When teachers find ways to nurture these inner resources, they adopt an autonomy‐supportive motivating style. After articulating what autonomy‐supportive teachers say and do during instruction, I discuss 3 points: teachers can learn how to be more autonomy supportive toward students; teachers most engage students when they offer high levels of both autonomy support and structure; and an autonomy‐supportive motivating style is an important element to a high‐quality teacher‐student relationship.")
.withField(StandardField.PUBLISHER, "The University of Chicago Press")
diff --git a/src/test/java/org/jabref/logic/importer/fetcher/TitleFetcherTest.java b/src/test/java/org/jabref/logic/importer/fetcher/TitleFetcherTest.java
index 3a289eec9a8..9a4d229c0e2 100644
--- a/src/test/java/org/jabref/logic/importer/fetcher/TitleFetcherTest.java
+++ b/src/test/java/org/jabref/logic/importer/fetcher/TitleFetcherTest.java
@@ -34,6 +34,7 @@ public void setUp() {
bibEntryBischof2009.setField(StandardField.PUBLISHER, "{IEEE}");
bibEntryBischof2009.setField(StandardField.TITLE, "{BPELscript}: A Simplified Script Syntax for {WS}-{BPEL} 2.0");
bibEntryBischof2009.setField(StandardField.YEAR, "2009");
+ bibEntryBischof2009.setField(StandardField.MONTH, "aug");
bibEntryBischof2009.setField(StandardField.DOI, "10.1109/seaa.2009.21");
}
diff --git a/src/test/java/org/jabref/model/entry/identifier/DOITest.java b/src/test/java/org/jabref/model/entry/identifier/DOITest.java
index cc35b55fd5f..b1f9e4e5762 100644
--- a/src/test/java/org/jabref/model/entry/identifier/DOITest.java
+++ b/src/test/java/org/jabref/model/entry/identifier/DOITest.java
@@ -165,12 +165,23 @@ private static Stream testData() {
// findDoiInsideArbitraryText
Arguments.of("10.1006/jmbi.1998.2354",
DOI.findInText("other stuff 10.1006/jmbi.1998.2354 end").get().getDOI()),
+ Arguments.of("10.1007/s10549-018-4743-9",
+ DOI.findInText("Breast Cancer Res Treat. 2018 July ; 170(1): 77–87. doi:10.1007/s10549-018-4743-9. ").get().getDOI()),
+ Arguments.of("10.1007/s10549-018-4743-9",
+ DOI.findInText("Breast Cancer Res Treat. 2018 July ; 170(1): 77–87. doi:10.1007/s10549-018-4743-9, ").get().getDOI()),
+ Arguments.of("10.1007/s10549-018-4743-9",
+ DOI.findInText("Breast Cancer Res Treat. 2018 July ; 170(1): 77–87. doi:10.1007/s10549-018-4743-9;something else").get().getDOI()),
+ Arguments.of("10.1007/s10549-018-4743-9.1234",
+ DOI.findInText("bla doi:10.1007/s10549-018-4743-9.1234 with . in doi").get().getDOI()),
// findShortDoiInsideArbitraryText
Arguments.of("10/12ab", DOI.findInText("other stuff doi:10/12ab end").get().getDOI()),
Arguments.of("10/12ab", DOI.findInText("other stuff /urn:doi:10/12ab end").get().getDOI()),
Arguments.of("10%12ab", DOI.findInText("other stuff doi:10%12ab end").get().getDOI()),
Arguments.of("10%12ab", DOI.findInText("other stuff /doi:10%12ab end").get().getDOI()),
+ Arguments.of("10%12ab", DOI.findInText("other stuff /doi:10%12ab, end").get().getDOI()),
+ Arguments.of("10%12ab", DOI.findInText("other stuff /doi:10%12ab. end").get().getDOI()),
+ Arguments.of("10%12ab", DOI.findInText("other stuff /doi:10%12ab; end").get().getDOI()),
Arguments.of("10/1234", DOI.findInText("10/B(C)/15 \n" +
" \n" +
"10:51 \n" +