diff --git a/.github/workflows/automerge.yml b/.github/workflows/automerge.yml index b8f22170b1b..60cdc796b08 100644 --- a/.github/workflows/automerge.yml +++ b/.github/workflows/automerge.yml @@ -16,7 +16,7 @@ jobs: env: GITHUB_TOKEN: "${{ secrets.GITHUB_TOKEN }}" - name: Merge pull requests - uses: pascalgn/automerge-action@v0.12.0 + uses: pascalgn/automerge-action@v0.13.0 if: steps.waitforstatuschecks.outputs.status == 'success' env: MERGE_METHOD: "squash" diff --git a/.github/workflows/deployment.yml b/.github/workflows/deployment.yml index 52c04be0e7a..ee3e6e9cd09 100644 --- a/.github/workflows/deployment.yml +++ b/.github/workflows/deployment.yml @@ -1,6 +1,7 @@ name: Deployment on: + workflow_dispatch: push: branches: - master diff --git a/.github/workflows/tests.yml b/.github/workflows/tests.yml index fe57e60d3d0..5651082269f 100644 --- a/.github/workflows/tests.yml +++ b/.github/workflows/tests.yml @@ -261,6 +261,6 @@ jobs: echo echo "In case you want to use a different one, please comment here and adjust your name in your git configuration for future commits" echo - echo "Just adding yourself into the AUHTORS file does not help as it is overwritten by our script ./scripts/generate-authors." + echo "Just adding yourself into the AUTHORS file does not help as it is overwritten by our script ./scripts/generate-authors." echo "Read more on the AUTHORS file at found at https://github.com/JabRef/jabref/blob/master/CONTRIBUTING.md#author-credits" exit 1 diff --git a/AUTHORS b/AUTHORS index 2ae2ec19c9c..1ea7c309626 100644 --- a/AUTHORS +++ b/AUTHORS @@ -133,6 +133,7 @@ Felix Luthman Felix Wilke Fernando Santagata ffffatgoose +Fiyinfolu Eludire Florian Beetz Florian Straßer Foivos Christoulakis @@ -163,6 +164,7 @@ Hollyqqqqq Houssem Nasri hrandrianasolo Hussain Arif +IfIWantedTo Igor Chernyavsky Igor Steinmacher Illes Solt diff --git a/CHANGELOG.md b/CHANGELOG.md index 5ac0262ca58..8ee5078e4fa 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,4 +1,3 @@ - # Changelog All notable changes to this project will be documented in this file. @@ -12,13 +11,27 @@ Note that this project **does not** adhere to [Semantic Versioning](http://semve ### Added +- We added the extension support and the external application support (For Texshow, Texmaker and LyX) to the flatpak [#7248](https://github.com/JabRef/jabref/pull/7248) + +### Changed + +### Fixed + +- We fixed an issue with the style of highlighted check boxes while searching in preferences. [#7226](https://github.com/JabRef/jabref/issues/7226) +- We fixed an issue where the option "Move file to file directory" was disabled in the entry editor for all files [#7194](https://github.com/JabRef/jabref/issues/7194) + +### Removed + +## [5.2] – 2020-12-24 + +### Added + - We added a validation to check if the current database location is shared, preventing an exception when Pulling Changes From Shared Database. [#6959](https://github.com/JabRef/jabref/issues/6959) - We added a query parser and mapping layer to enable conversion of queries formulated in simplified lucene syntax by the user into api queries. [#6799](https://github.com/JabRef/jabref/pull/6799) - We added some basic functionality to customise the look of JabRef by importing a css theme file. [#5790](https://github.com/JabRef/jabref/issues/5790) - We added connection check function in network preference setting [#6560](https://github.com/JabRef/jabref/issues/6560) - We added support for exporting to YAML. [#6974](https://github.com/JabRef/jabref/issues/6974) - We added a DOI format and organization check to detect [American Physical Society](https://journals.aps.org/) journals to copy the article ID to the page field for cases where the page numbers are missing. [#7019](https://github.com/JabRef/jabref/issues/7019) -- We added a new fetcher to enable users to search jstor.org [#6627](https://github.com/JabRef/jabref/issues/6627) - We added an error message in the New Entry dialog that is shown in case the fetcher did not find anything . [#7000](https://github.com/JabRef/jabref/issues/7000) - We added a new formatter to output shorthand month format. [#6579](https://github.com/JabRef/jabref/issues/6579) - We added support for the new Microsoft Edge browser in all platforms. [#7056](https://github.com/JabRef/jabref/pull/7056) @@ -80,9 +93,12 @@ Note that this project **does not** adhere to [Semantic Versioning](http://semve - We fixed an issue where the password for a shared SQL database was not remembered [#6869](https://github.com/JabRef/jabref/issues/6869) - We fixed an issue where newly added entires were not synced to a shared SQL database [#7176](https://github.com/JabRef/jabref/issues/7176) - We fixed an issue where the PDF-Content importer threw an exception when no DOI number is present at the first page of the PDF document [#7203](https://github.com/JabRef/jabref/issues/7203) +- We fixed an issue where authors that only have last names were incorrectly identified as institutes when generating citation keys [#7199](https://github.com/JabRef/jabref/issues/7199) +- We fixed an issue where institutes were incorrectly identified as universities when generating citation keys [#6942](https://github.com/JabRef/jabref/issues/6942) ### Removed +- We removed the Google Scholar fetcher and the ACM fetcher do not work due to traffic limitations [#6369](https://github.com/JabRef/jabref/issues/6369) - We removed the menu entry "Manage external file types" because it's already in 'Preferences' dialog [#6991](https://github.com/JabRef/jabref/issues/6991) - We removed the integrity check "Abbreviation detected" for the field journal/journaltitle in the entry editor [#3925](https://github.com/JabRef/jabref/issues/3925) @@ -483,7 +499,8 @@ The changelog of JabRef 4.x is available at the [v4.3.1 tag](https://github.com/ The changelog of JabRef 3.x is available at the [v3.8.2 tag](https://github.com/JabRef/jabref/blob/v3.8.2/CHANGELOG.md). The changelog of JabRef 2.11 and all previous versions is available as [text file in the v2.11.1 tag](https://github.com/JabRef/jabref/blob/v2.11.1/CHANGELOG). -[Unreleased]: https://github.com/JabRef/jabref/compare/v5.1...HEAD +[Unreleased]: https://github.com/JabRef/jabref/compare/v5.2...HEAD +[5.2]: https://github.com/JabRef/jabref/compare/v5.1...v5.2 [5.1]: https://github.com/JabRef/jabref/compare/v5.0...v5.1 [5.0]: https://github.com/JabRef/jabref/compare/v5.0-beta...v5.0 [5.0-beta]: https://github.com/JabRef/jabref/compare/v5.0-alpha...v5.0-beta diff --git a/build.gradle b/build.gradle index f921dd8fdbe..41dcceaa4ca 100644 --- a/build.gradle +++ b/build.gradle @@ -13,8 +13,8 @@ plugins { id 'me.champeau.gradle.jmh' version '0.5.2' id 'com.github.ben-manes.versions' version '0.36.0' id 'org.javamodularity.moduleplugin' version '1.7.0' - id 'org.openjfx.javafxplugin' version '0.0.9' - id 'org.beryx.jlink' version '2.23.0' + // id 'org.openjfx.javafxplugin' version '0.0.9' + id 'org.beryx.jlink' version '2.23.1' // nicer test outputs during running and completion // Homepage: https://github.com/radarsh/gradle-test-logger-plugin id 'com.adarshr.test-logger' version '2.1.1' @@ -38,12 +38,14 @@ version = project.findProperty('projVersion') ?: '100.0.0' java { sourceCompatibility = JavaVersion.VERSION_14 targetCompatibility = JavaVersion.VERSION_14 + } application { mainClassName = "org.jabref.gui.JabRefLauncher" mainModule ='org.jabref' } +modularity.disableEffectiveArgumentsAdjustment() // TODO: Ugly workaround to temporarily ignore build errors to dependencies of latex2unicode // These should be removed, as well as the files in the lib folder, as soon as they have valid module names @@ -51,10 +53,6 @@ modularity.patchModule("test", "fastparse_2.12-1.0.0.jar") modularity.patchModule("test2", "fastparse-utils_2.12-1.0.0.jar") modularity.patchModule("test3", "sourcecode_2.12-0.1.4.jar") -// These are the Java version requirements we will check on each start of JabRef -ext.minRequiredJavaVersion = "1.8.0_171" -ext.allowJava9 = true - sourceSets { main { java { @@ -92,10 +90,6 @@ configurations { } } -javafx { - version = "15" - modules = [ 'javafx.controls', 'javafx.fxml', 'javafx.web', 'javafx.swing' ] -} dependencies { // Include all jar-files in the 'lib' folder as dependencies @@ -111,7 +105,7 @@ dependencies { implementation group: 'org.apache.tika', name: 'tika-core', version: '1.25' // required for reading write-protected PDFs - see https://github.com/JabRef/jabref/pull/942#issuecomment-209252635 - implementation 'org.bouncycastle:bcprov-jdk15on:1.67' + implementation 'org.bouncycastle:bcprov-jdk15on:1.68' implementation 'commons-cli:commons-cli:1.4' @@ -153,6 +147,12 @@ dependencies { implementation group: 'jakarta.annotation', name: 'jakarta.annotation-api', version: '1.3.5' // JavaFX stuff + + // https://mvnrepository.com/artifact/org.openjfx/javafx-controls + implementation group: 'org.openjfx', name: 'javafx-controls', version: '15.0.1' + implementation group: 'org.openjfx', name: 'javafx-fxml', version: '15.0.1' + implementation group: 'org.openjfx', name: 'javafx-web', version: '15.0.1' + implementation 'de.jensd:fontawesomefx-commons:11.0' implementation 'de.jensd:fontawesomefx-materialdesignfont:1.7.22-11' implementation 'de.saxsys:mvvmfx-validation:1.9.0-SNAPSHOT' @@ -165,7 +165,7 @@ dependencies { implementation 'org.controlsfx:controlsfx:11.0.3' implementation 'org.jsoup:jsoup:1.13.1' - implementation 'com.konghq:unirest-java:3.11.06' + implementation 'com.konghq:unirest-java:3.11.09' implementation 'org.slf4j:slf4j-api:2.0.0-alpha1' implementation group: 'org.apache.logging.log4j', name: 'log4j-jcl', version: '3.0.0-SNAPSHOT' @@ -194,7 +194,7 @@ dependencies { implementation 'com.vladsch.flexmark:flexmark-ext-gfm-strikethrough:0.62.2' implementation 'com.vladsch.flexmark:flexmark-ext-gfm-tasklist:0.62.2' - testImplementation 'io.github.classgraph:classgraph:4.8.97' + testImplementation 'io.github.classgraph:classgraph:4.8.98' testImplementation 'org.junit.jupiter:junit-jupiter:5.7.0' testRuntimeOnly 'org.junit.vintage:junit-vintage-engine:5.7.0' testImplementation 'org.junit.platform:junit-platform-launcher:1.7.0' @@ -203,8 +203,8 @@ dependencies { testRuntime group: 'org.apache.logging.log4j', name: 'log4j-core', version: '3.0.0-SNAPSHOT' testRuntime group: 'org.apache.logging.log4j', name: 'log4j-jul', version: '3.0.0-SNAPSHOT' testImplementation 'org.mockito:mockito-core:3.6.28' - testImplementation 'org.xmlunit:xmlunit-core:2.8.1' - testImplementation 'org.xmlunit:xmlunit-matchers:2.8.1' + testImplementation 'org.xmlunit:xmlunit-core:2.8.2' + testImplementation 'org.xmlunit:xmlunit-matchers:2.8.2' testRuntime 'com.tngtech.archunit:archunit-junit5-engine:0.15.0' testImplementation 'com.tngtech.archunit:archunit-junit5-api:0.15.0' testImplementation "org.testfx:testfx-core:4.0.17-alpha-SNAPSHOT" @@ -275,15 +275,12 @@ processResources { "azureInstrumentationKey": System.getenv('AzureInstrumentationKey'), "springerNatureAPIKey": System.getenv('SpringerNatureAPIKey'), "astrophysicsDataSystemAPIKey": System.getenv('AstrophysicsDataSystemAPIKey'), - "ieeeAPIKey": System.getenv('IEEEAPIKey'), - "minRequiredJavaVersion": minRequiredJavaVersion, - "allowJava9": allowJava9 - + "ieeeAPIKey": System.getenv('IEEEAPIKey') ) filteringCharset = 'UTF-8' } - filesMatching("resource/**/meta.xml") { + filesMatching(["resources/resource/ods/meta.xml", "resources/resource/openoffice/meta.xml"]) { expand version: project.version } } diff --git a/buildres/linux/jabrefHost.py b/buildres/linux/jabrefHost.py index ef3fd603b86..72e2eacbbfa 100755 --- a/buildres/linux/jabrefHost.py +++ b/buildres/linux/jabrefHost.py @@ -1,8 +1,4 @@ -#!/usr/bin/python3 -u - -# Note that running python with the `-u` flag is required on Windows, -# in order to ensure that stdin and stdout are opened in binary, rather -# than text, mode. +#!/usr/bin/python3 import json import logging @@ -15,17 +11,24 @@ import sys from pathlib import Path -# We assume that this python script is located in "jabref/lib" while the executable is "jabref/bin/JabRef" +# Try a set of possible launchers to execute JabRef script_dir = Path(__file__).resolve().parent.parent relpath_path = script_dir / "bin/JabRef" lowercase_path = shutil.which("jabref") uppercase_path = shutil.which("JabRef") + +# Relative path used in the portable install if relpath_path.exists(): JABREF_PATH = relpath_path +# Lowercase launcher used in deb/rpm/snap packages elif lowercase_path is not None and os.path.exists(lowercase_path): JABREF_PATH = Path(lowercase_path) +# Uppercase launcher used in Arch AUR package elif uppercase_path is not None and os.path.exists(uppercase_path): JABREF_PATH = Path(uppercase_path) +# FLatpak support +elif subprocess.run(["flatpak", "info", "org.jabref.jabref"], capture_output=True).returncode == 0: + JABREF_PATH = "flatpak run org.jabref.jabref" else: logging.error("Could not determine JABREF_PATH") sys.exit(-1) @@ -70,7 +73,7 @@ def send_message(message): def add_jabref_entry(data): """Send string via cli as literal to preserve special characters""" - cmd = [str(JABREF_PATH), "--importBibtex", r"{}".format(data)] + cmd = str(JABREF_PATH).split() + ["--importBibtex", r"{}".format(data)] logging.info("Try to execute command {}".format(cmd)) try: response = subprocess.check_output(cmd, stderr=subprocess.STDOUT) @@ -90,7 +93,7 @@ def add_jabref_entry(data): logging.info(str(message)) if "status" in message and message["status"] == "validate": - cmd = [str(JABREF_PATH), "--version"] + cmd = str(JABREF_PATH).split() + ["--version"] try: response = subprocess.check_output(cmd, stderr=subprocess.STDOUT) except subprocess.CalledProcessError as exc: diff --git a/crowdin.yml b/crowdin.yml index 54d5e1039ad..1ec4fb7a69c 100644 --- a/crowdin.yml +++ b/crowdin.yml @@ -5,3 +5,5 @@ files: two_letters_code: pt-BR: pt_BR id: in + zh-CN: zh_CN + zh-TW: zh_TW diff --git a/docs/.gitbook/assets/contribution-process-reviews (2).svg b/docs/.gitbook/assets/contribution-process-reviews (2).svg new file mode 100644 index 00000000000..39951a21137 --- /dev/null +++ b/docs/.gitbook/assets/contribution-process-reviews (2).svg @@ -0,0 +1,4 @@ + + + +ContributorCreate ContributionSubmit ContributionUpdate CodeComment Pull RequestJabRef TeamFrist DeveloperSecond DeveloperProvide FeedbackReview CodeProvide FeedbackReview CodeRequest ChangesMerge Pull ReuquestQuality OKQuality does not meet JabRef's requirementsQuality does not meet JabRef's requirementsPull Request incomingQuality OK`?Quality OK?Quality OKEverything OKChanges Requested \ No newline at end of file diff --git a/docs/.gitbook/assets/contribution-process-reviews-with-instructor.svg b/docs/.gitbook/assets/contribution-process-reviews-with-instructor (1) (1).svg similarity index 100% rename from docs/.gitbook/assets/contribution-process-reviews-with-instructor.svg rename to docs/.gitbook/assets/contribution-process-reviews-with-instructor (1) (1).svg diff --git a/docs/.gitbook/assets/contribution-process-reviews-with-instructor (1) (2).svg b/docs/.gitbook/assets/contribution-process-reviews-with-instructor (1) (2).svg new file mode 100644 index 00000000000..7e196fe5e1a --- /dev/null +++ b/docs/.gitbook/assets/contribution-process-reviews-with-instructor (1) (2).svg @@ -0,0 +1,4 @@ + + + +ContributorPrepare SubmissionSubmit and Refine ContributionJabRef TeamCheck, Support,and MergeInstructorReview and Support Submission \ No newline at end of file diff --git a/docs/.gitbook/assets/eclipse-create-run-config.png b/docs/.gitbook/assets/eclipse-create-run-config (1) (2).png similarity index 100% rename from docs/.gitbook/assets/eclipse-create-run-config.png rename to docs/.gitbook/assets/eclipse-create-run-config (1) (2).png diff --git a/docs/.gitbook/assets/eclipse-create-run-config (1) (3).png b/docs/.gitbook/assets/eclipse-create-run-config (1) (3).png new file mode 100644 index 00000000000..1412291a55a Binary files /dev/null and b/docs/.gitbook/assets/eclipse-create-run-config (1) (3).png differ diff --git a/docs/.gitbook/assets/github-flow (2).png b/docs/.gitbook/assets/github-flow (2).png new file mode 100644 index 00000000000..dc9fdeb82bc Binary files /dev/null and b/docs/.gitbook/assets/github-flow (2).png differ diff --git a/docs/.gitbook/assets/intellij-checkstyle-settings (1).png b/docs/.gitbook/assets/intellij-checkstyle-settings (1).png new file mode 100644 index 00000000000..e5f0c027190 Binary files /dev/null and b/docs/.gitbook/assets/intellij-checkstyle-settings (1).png differ diff --git a/docs/.gitbook/assets/intellij-enable-annotation-processing (1).png b/docs/.gitbook/assets/intellij-enable-annotation-processing (1).png new file mode 100644 index 00000000000..784ce6cd19e Binary files /dev/null and b/docs/.gitbook/assets/intellij-enable-annotation-processing (1).png differ diff --git a/docs/.gitbook/assets/intellij-gradle-config-ignore-buildSrc.png b/docs/.gitbook/assets/intellij-gradle-config-ignore-buildSrc (2) (1).png similarity index 100% rename from docs/.gitbook/assets/intellij-gradle-config-ignore-buildSrc.png rename to docs/.gitbook/assets/intellij-gradle-config-ignore-buildSrc (2) (1).png diff --git a/docs/.gitbook/assets/intellij-gradle-config-ignore-buildSrc (2) (2).png b/docs/.gitbook/assets/intellij-gradle-config-ignore-buildSrc (2) (2).png new file mode 100644 index 00000000000..203ad5ad207 Binary files /dev/null and b/docs/.gitbook/assets/intellij-gradle-config-ignore-buildSrc (2) (2).png differ diff --git a/docs/.gitbook/assets/intellij-run-configuration-command-line (1).png b/docs/.gitbook/assets/intellij-run-configuration-command-line (2) (1).png similarity index 100% rename from docs/.gitbook/assets/intellij-run-configuration-command-line (1).png rename to docs/.gitbook/assets/intellij-run-configuration-command-line (2) (1).png diff --git a/docs/.gitbook/assets/intellij-run-configuration-command-line.png b/docs/.gitbook/assets/intellij-run-configuration-command-line (2) (2).png similarity index 100% rename from docs/.gitbook/assets/intellij-run-configuration-command-line.png rename to docs/.gitbook/assets/intellij-run-configuration-command-line (2) (2).png diff --git a/docs/.gitbook/assets/intellij-run-configuration-command-line (2) (3).png b/docs/.gitbook/assets/intellij-run-configuration-command-line (2) (3).png new file mode 100644 index 00000000000..cc71d5d068e Binary files /dev/null and b/docs/.gitbook/assets/intellij-run-configuration-command-line (2) (3).png differ diff --git a/docs/.gitbook/assets/grafik (1) (1).png b/docs/.gitbook/assets/intellij-wrap-at-right-margin (1).png similarity index 100% rename from docs/.gitbook/assets/grafik (1) (1).png rename to docs/.gitbook/assets/intellij-wrap-at-right-margin (1).png diff --git a/docs/.gitbook/assets/grafik (1).png b/docs/.gitbook/assets/intellij-wrap-at-right-margin (2).png similarity index 100% rename from docs/.gitbook/assets/grafik (1).png rename to docs/.gitbook/assets/intellij-wrap-at-right-margin (2).png diff --git a/docs/.gitbook/assets/grafik.png b/docs/.gitbook/assets/intellij-wrap-at-right-margin (3).png similarity index 100% rename from docs/.gitbook/assets/grafik.png rename to docs/.gitbook/assets/intellij-wrap-at-right-margin (3).png diff --git a/docs/.gitbook/assets/intellij-wrap-at-right-margin (4).png b/docs/.gitbook/assets/intellij-wrap-at-right-margin (4).png new file mode 100644 index 00000000000..c3b7615fdda Binary files /dev/null and b/docs/.gitbook/assets/intellij-wrap-at-right-margin (4).png differ diff --git a/docs/README.md b/docs/README.md index 5dc3b67c95e..a542dbba954 100644 --- a/docs/README.md +++ b/docs/README.md @@ -27,7 +27,7 @@ The package `org.jabref.cli` is responsible for handling the command line option During development, one can configure IntelliJ to pass command line parameters: -![IntelliJ-run-configuration](.gitbook/assets/intellij-run-configuration-command-line%20%282%29.png) +![IntelliJ-run-configuration](.gitbook/assets/intellij-run-configuration-command-line%20%282%29%20%281%29.png) Passing command line arguments using gradle is currently not possible as all arguments \(such as `-Dfile.encoding=windows-1252`\) are passed to the application. @@ -45,9 +45,9 @@ For new ADRs, please use [template.md](https://github.com/JabRef/jabref/tree/3b3 ## FAQ -* Q: I get `java: package org.jabref.logic.journals does not exist`. +* Q: I get `java: package org.jabref.logic.journals does not exist`. - A: You have to ignore `buildSrc/src/main` as source directory in IntelliJ as indicated in our [setup guide](https://devdocs.jabref.org/getting-into-the-code/guidelines-for-setting-up-a-local-workspace). + A: You have to ignore `buildSrc/src/main` as source directory in IntelliJ as indicated in our [setup guide](https://devdocs.jabref.org/getting-into-the-code/guidelines-for-setting-up-a-local-workspace). - Also filed as IntelliJ issue [IDEA-240250](https://youtrack.jetbrains.com/issue/IDEA-240250). + Also filed as IntelliJ issue [IDEA-240250](https://youtrack.jetbrains.com/issue/IDEA-240250). diff --git a/docs/adr.md b/docs/adr.md index 988a2ba7593..61465e4cfb4 100644 --- a/docs/adr.md +++ b/docs/adr.md @@ -16,12 +16,13 @@ Architectural decisions for JabRef: * [ADR-0011](https://github.com/JabRef/jabref/tree/master/docs/adr/0011-test-external-links-in-documentation.md) - Test external links in documentation * [ADR-0012](https://github.com/JabRef/jabref/tree/master/docs/adr/0012-handle-different-bibEntry-formats-of-fetchers.md) - Handle different bibentry formats of fetchers by adding a layer * [ADR-0013](https://github.com/JabRef/jabref/tree/master/docs/adr/0013-add-native-support-biblatex-software.md) - Add Native Support for BibLatex-Software -fix checkstyle in adr + + fix checkstyle in adr + * [ADR-0014](https://github.com/JabRef/jabref/tree/master/docs/adr/0014-separate-URL-creation-to-enable-proper-logging.md) - Separate URL creation to enable proper logging * [ADR-0015](https://github.com/JabRef/jabref/tree/master/docs/adr/0015-support-an-abstract-query-syntax-for-query-conversion.md) - Query syntax design * [ADR-0016](https://github.com/JabRef/jabref/tree/master/docs/adr/0016-mutable-preferences-objects.md) - Mutable preferences objects * [ADR-0017](https://github.com/JabRef/jabref/tree/master/docs/adr/0017-allow-model-access-logic.md) - Allow org.jabref.model to access org.jabref.logic - For new ADRs, please use [template.md](https://github.com/JabRef/jabref/tree/master/docs/adr/template.md) as basis. More information on the used format is available at [https://adr.github.io/madr/](https://adr.github.io/madr/). General information about architectural decision records is available at [https://adr.github.io/](https://adr.github.io/). Then add them to the above list. diff --git a/docs/adr/0009-use-plain-junit5-for-testing.md b/docs/adr/0009-use-plain-junit5-for-testing.md index 35d58bf1097..65f4046f3b6 100644 --- a/docs/adr/0009-use-plain-junit5-for-testing.md +++ b/docs/adr/0009-use-plain-junit5-for-testing.md @@ -49,7 +49,7 @@ assertFalse(actual.contains("\n")); ### Hamcrest -Homepage: +Homepage: * Good, because offers advanced matchers (such as `contains`) * Bad, because not full fluent API diff --git a/docs/getting-into-the-code/code-howtos.md b/docs/getting-into-the-code/code-howtos.md index 354f6d26364..7005314618c 100644 --- a/docs/getting-into-the-code/code-howtos.md +++ b/docs/getting-into-the-code/code-howtos.md @@ -173,11 +173,21 @@ General hints: The tests check whether translation strings appear correctly in the resource bundles. 1. Add new `Localization.lang("KEY")` to Java file. Run the `LocalizationConsistencyTest`under \(src/test/org.jabref.logic. -\) + + \) + 2. Tests fail. In the test output a snippet is generated which must be added to the English translation file. 3. Add snippet to English translation file located at `src/main/resources/l10n/JabRef_en.properties` 4. Please do not add translations for other languages directly in the properties. They will be overwritten by [Crowdin](https://crowdin.com/project/jabref) +## Adding a new Language + +1. Add the new Language to the Language enum in [https://github.com/JabRef/jabref/blob/master/src/main/java/org/jabref/logic/l10n/Language.java](https://github.com/JabRef/jabref/blob/master/src/main/java/org/jabref/logic/l10n/Language.java) +2. Create an empty <locale code>.properties file +3. Configure the new language in [Crowdin](https://crowdin.com/project/jabref) + +If the language is a variant of a language `zh_CN` or `pt_BR` it is necessary to add a language mapping for Crowdin to the crowdin.yml file in the root. Of course the properties file also has to be named according to the language code and locale. + ## Cleanup and Formatters We try to build a cleanup mechanism based on formatters. The idea is that we can register these actions in arbitrary places, e.g., onSave, onImport, onExport, cleanup, etc. and apply them to different fields. The formatters themself are independent of any logic and therefore easy to test. diff --git a/docs/getting-into-the-code/guidelines-for-setting-up-a-local-workspace.md b/docs/getting-into-the-code/guidelines-for-setting-up-a-local-workspace.md index 38f335aff02..6fe7b1fe858 100644 --- a/docs/getting-into-the-code/guidelines-for-setting-up-a-local-workspace.md +++ b/docs/getting-into-the-code/guidelines-for-setting-up-a-local-workspace.md @@ -20,10 +20,9 @@ This section list the prerequisites you need to get started to develop JabRef. A A working Java \(Develoment Kit\) 15 installation with Java FX support is required. In the command line \(terminal in Linux, cmd in Windows\) run `javac -version` and make sure that the reported version is Java 15 \(e.g `javac 15`\). If `javac` is not found or a wrong version is reported, check your `PATH` environment variable, your `JAVA_HOME` environment variable or install the most recent JDK. -[JavaFX is not part of the default JDK any more](https://www.reddit.com/r/java/comments/82qm9x/javafx_will_be_removed_from_the_java_jdk_in_jdk_11/), it needs to be installed separately if not using a special JDK. ~~We recommend to setup the full Liberica JDK including JavaFX. You can get it from [https://bell-sw.com/pages/downloads/?version=java-15&package=jdk-full](https://bell-sw.com/pages/downloads/?version=java-15&package=jdk-full). On Windows, you can execute `choco install libericajdkfull` \(requires [installation of chocolatey - a package manager for Windows](https://chocolatey.org/install)\).~~ (Liberica JDK 15 does not include the Java compiler properly any more) +[JavaFX is not part of the default JDK any more](https://www.reddit.com/r/java/comments/82qm9x/javafx_will_be_removed_from_the_java_jdk_in_jdk_11/), it needs to be installed separately if not using a special JDK. ~~We recommend to setup the full Liberica JDK including JavaFX. You can get it from~~ [~~https://bell-sw.com/pages/downloads/?version=java-15&package=jdk-full~~](https://bell-sw.com/pages/downloads/?version=java-15&package=jdk-full)~~. On Windows, you can execute `choco install libericajdkfull` \(requires~~ [~~installation of chocolatey - a package manager for Windows~~](https://chocolatey.org/install)~~\).~~ \(Liberica JDK 15 does not include the Java compiler properly any more\) -Download and install the JDK from [https://jdk.java.net/](https://jdk.java.net/). -Afterwards, download the "jmods" JavaFX 15 zip archive from [https://gluonhq.com/products/javafx/](https://gluonhq.com/products/javafx/) and put the `.jmod` files into `C:\Program Files\OpenJDK\jdk-15\jmods`. +Download and install the JDK from [https://jdk.java.net/](https://jdk.java.net/). Afterwards, download the "jmods" JavaFX 15 zip archive from [https://gluonhq.com/products/javafx/](https://gluonhq.com/products/javafx/) and put the `.jmod` files into `C:\Program Files\OpenJDK\jdk-15\jmods`. ### GitHub Account @@ -55,8 +54,7 @@ It is strongly recommend that you have git installed. ### IDE -We suggest [IntelliJ IDEA](https://www.jetbrains.com/idea/?from=jabref). -For advanced users, [Eclipse](https://eclipse.org/) \(`2020-09` or newer\) is also possible. +We suggest [IntelliJ IDEA](https://www.jetbrains.com/idea/?from=jabref). For advanced users, [Eclipse](https://eclipse.org/) \(`2020-09` or newer\) is also possible. #### IntelliJ @@ -129,7 +127,7 @@ To prepare IntelliJ's build system two additional steps are required: To have autoformat working properly in the context of line wrapping, "Wrap at right margin" has to be disabled as shown below. Details are found in [IntelliJ issue 240517](https://youtrack.jetbrains.com/issue/IDEA-240517). -![Disable wrapping at right margin to prevent JavaDoc to be wrapped](../.gitbook/assets/intellij-wrap-at-right-margin.png) +![Disable wrapping at right margin to prevent JavaDoc to be wrapped](../.gitbook/assets/intellij-wrap-at-right-margin%20%281%29.png) #### Using Gradle from within IntelliJ IDEA @@ -157,7 +155,7 @@ To use IntelliJ IDEA's internal build system when you build JabRef through **Bui * In **File \| Settings \| Build, Execution, Deployment \| Build Tools \| Gradle** the setting "Build and run using" and "Test using" is set to "IntelliJ IDEA". * Ignore the Gradle project "buildSrc" by clicking the button **Select Project Data To Import** in the Gradle Tool Window and unchecking the folder "buildSrc". - ![Ignore the Gradle project "buildSrc"](../.gitbook/assets/intellij-gradle-config-ignore-buildSrc%20%282%29.png) + ![Ignore the Gradle project "buildSrc"](../.gitbook/assets/intellij-gradle-config-ignore-buildSrc%20%282%29.png) * Delete `org.jabref.gui.logging.plugins.Log4jPlugins` \(location: `generated\org\jabref\gui\logging\plugins\Log4jPlugins.java`\). Otherwise, you will see following error: @@ -198,7 +196,8 @@ Finally, ensure that the checkstyle configuration file is in place: 8. Set the "Scan Scope" to "Only Java sources \(including tests\) 9. Save settings by clicking "OK" 10. Your configuration should now look like this: - ![checkstyle settings](../.gitbook/assets/intellij-checkstyle-settings.png) + + ![checkstyle settings](../.gitbook/assets/intellij-checkstyle-settings.png) ### Setup for Eclipse @@ -215,7 +214,7 @@ Make sure your Eclipse installation us up to date. 4. Create a run/debug configuration for the main class `org.jabref.gui.JabRefLauncher` and/or for `org.jabref.gui.JabRefMain` \(both can be used equivalently\) * Remark: The run/debug configuration needs to be added by right clicking the class \(e.g. JabRefLauncher or JabRefMain\) otherwise it will not work. - ![Creating the run/debug configuration by right clicking on the class](../.gitbook/assets/eclipse-create-run-config%20%281%29%20%281%29.png) + ![Creating the run/debug configuration by right clicking on the class](../.gitbook/assets/eclipse-create-run-config%20%281%29.png) * In the tab "Arguments" of the run/debug configuration, enter the following runtime VM arguments: @@ -287,3 +286,4 @@ There might be problems with building if you have openjfx libraries in local mav ``` As a workaround, you can remove all local openjfx artifacts by deleting the whole openjfx folder from specified location. + diff --git a/docs/getting-into-the-code/testing.md b/docs/getting-into-the-code/testing.md index a62eea5c86a..4883c8e7c37 100644 --- a/docs/getting-into-the-code/testing.md +++ b/docs/getting-into-the-code/testing.md @@ -1,6 +1,6 @@ # How to test -For details on unit testing see . +For details on unit testing see [https://devdocs.jabref.org/getting-into-the-code/code-howtos\#test-cases](https://devdocs.jabref.org/getting-into-the-code/code-howtos#test-cases). ## Database tests @@ -8,7 +8,7 @@ For details on unit testing see 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" +