From 8a9cec3e40405f60ab5e91e3a5313180441818b7 Mon Sep 17 00:00:00 2001 From: Tobias Diez Date: Fri, 22 Apr 2016 16:40:08 +0200 Subject: [PATCH 1/3] Entries are no longer saved in ExplictGroup --- src/main/java/net/sf/jabref/MetaData.java | 11 +- .../gui/groups/UndoableChangeAssignment.java | 23 +-- .../jabref/importer/AppendDatabaseAction.java | 7 +- .../importer/fileformat/BibtexParser.java | 2 +- .../sf/jabref/logic/groups/AbstractGroup.java | 9 +- .../sf/jabref/logic/groups/ExplicitGroup.java | 178 ++++-------------- .../sf/jabref/logic/groups/GroupTreeNode.java | 22 --- .../sf/jabref/migrations/VersionHandling.java | 23 +-- .../jabref/sql/exporter/DatabaseExporter.java | 12 -- .../jabref/sql/importer/DatabaseImporter.java | 2 +- .../importer/fileformat/BibtexParserTest.java | 6 +- .../logic/groups/ExplicitGroupTest.java | 2 +- 12 files changed, 70 insertions(+), 227 deletions(-) diff --git a/src/main/java/net/sf/jabref/MetaData.java b/src/main/java/net/sf/jabref/MetaData.java index f6c9636340e..58f9434840f 100644 --- a/src/main/java/net/sf/jabref/MetaData.java +++ b/src/main/java/net/sf/jabref/MetaData.java @@ -38,7 +38,6 @@ import net.sf.jabref.logic.labelpattern.DatabaseLabelPattern; import net.sf.jabref.logic.util.strings.StringUtil; import net.sf.jabref.migrations.VersionHandling; -import net.sf.jabref.model.database.BibDatabase; import net.sf.jabref.model.database.BibDatabaseMode; import net.sf.jabref.sql.DBStrings; @@ -78,7 +77,7 @@ public class MetaData implements Iterable { * must simply make sure the appropriate changes are reflected in the Vector * it has been passed. */ - public MetaData(Map inData, BibDatabase db) { + public MetaData(Map inData) { Objects.requireNonNull(inData); boolean groupsTreePresent = false; List flatGroupsData = null; @@ -117,7 +116,7 @@ public MetaData(Map inData, BibDatabase db) { // this possibly handles import of a previous groups version if (groupsTreePresent) { - putGroups(treeGroupsData, db, groupsVersionOnDisk); + putGroups(treeGroupsData, groupsVersionOnDisk); } if (!groupsTreePresent && (flatGroupsData != null)) { @@ -198,13 +197,11 @@ public void putData(String key, List orderedData) { * Parse the groups metadata string * * @param orderedData The vector of metadata strings - * @param db The BibDatabase this metadata belongs to * @param version The group tree version */ - private void putGroups(List orderedData, BibDatabase db, int version) { + private void putGroups(List orderedData, int version) { try { - groupsRoot = VersionHandling.importGroups(orderedData, db, - version); + groupsRoot = VersionHandling.importGroups(orderedData, version); groupTreeValid = true; } catch (Exception e) { // we cannot really do anything about this here diff --git a/src/main/java/net/sf/jabref/gui/groups/UndoableChangeAssignment.java b/src/main/java/net/sf/jabref/gui/groups/UndoableChangeAssignment.java index b7396300f7d..f6da00c00e2 100644 --- a/src/main/java/net/sf/jabref/gui/groups/UndoableChangeAssignment.java +++ b/src/main/java/net/sf/jabref/gui/groups/UndoableChangeAssignment.java @@ -15,14 +15,13 @@ */ package net.sf.jabref.gui.groups; -import java.util.HashSet; +import java.util.ArrayList; import java.util.List; import java.util.Optional; import java.util.Set; import javax.swing.undo.AbstractUndoableEdit; -import net.sf.jabref.logic.groups.ExplicitGroup; import net.sf.jabref.logic.groups.GroupTreeNode; import net.sf.jabref.logic.l10n.Localization; import net.sf.jabref.model.entry.BibEntry; @@ -32,8 +31,8 @@ */ public class UndoableChangeAssignment extends AbstractUndoableEdit { - private final Set previousAssignments; - private final Set newAssignments; + private final List previousAssignments; + private final List newAssignments; /** * The path to the edited node */ @@ -48,8 +47,8 @@ public class UndoableChangeAssignment extends AbstractUndoableEdit { */ public UndoableChangeAssignment(GroupTreeNodeViewModel node, Set previousAssignments, Set newAssignments) { - this.previousAssignments = new HashSet<>(previousAssignments); - this.newAssignments = new HashSet<>(newAssignments); + this.previousAssignments = new ArrayList<>(previousAssignments); + this.newAssignments = new ArrayList<>(newAssignments); this.root = node.getNode().getRoot(); this.pathToNode = node.getNode().getIndexedPathFromRoot(); } @@ -70,11 +69,7 @@ public void undo() { Optional node = root.getDescendant(pathToNode); if (node.isPresent()) { - ExplicitGroup group = (ExplicitGroup) node.get().getGroup(); - group.clearAssignments(); - for (final BibEntry entry : previousAssignments) { - group.addEntry(entry); - } + node.get().getGroup().add(previousAssignments); } } @@ -84,11 +79,7 @@ public void redo() { Optional node = root.getDescendant(pathToNode); if (node.isPresent()) { - ExplicitGroup group = (ExplicitGroup) node.get().getGroup(); - group.clearAssignments(); - for (final BibEntry entry : newAssignments) { - group.addEntry(entry); - } + node.get().getGroup().add(newAssignments); } } } diff --git a/src/main/java/net/sf/jabref/importer/AppendDatabaseAction.java b/src/main/java/net/sf/jabref/importer/AppendDatabaseAction.java index ca68e934d96..7f8f2d2a6d8 100644 --- a/src/main/java/net/sf/jabref/importer/AppendDatabaseAction.java +++ b/src/main/java/net/sf/jabref/importer/AppendDatabaseAction.java @@ -175,18 +175,13 @@ private static void mergeFromBibtex(JabRefFrame frame, BasePanel panel, ParserRe // create a dummy group ExplicitGroup group = new ExplicitGroup("Imported", GroupHierarchyType.INDEPENDENT); newGroups.setGroup(group); - appendedEntries.stream().map(group::addEntry); + group.add(appendedEntries); } // groupsSelector is always created, even when no groups // have been defined. therefore, no check for null is // required here frame.getGroupSelector().addGroups(newGroups, ce); - - // for explicit groups, the entries copied to the mother fromDatabase have to - // be "reassigned", i.e. the old reference is removed and the reference - // to the new fromDatabase is added. - newGroups.replaceEntriesInExplicitGroup(originalEntries, appendedEntries); } } diff --git a/src/main/java/net/sf/jabref/importer/fileformat/BibtexParser.java b/src/main/java/net/sf/jabref/importer/fileformat/BibtexParser.java index 55f5d0a9225..d050c94d113 100644 --- a/src/main/java/net/sf/jabref/importer/fileformat/BibtexParser.java +++ b/src/main/java/net/sf/jabref/importer/fileformat/BibtexParser.java @@ -196,7 +196,7 @@ private ParserResult parseFileContent() throws IOException { } // Instantiate meta data: - parserResult.setMetaData(new MetaData(meta, database)); + parserResult.setMetaData(new MetaData(meta)); parseRemainingContent(); diff --git a/src/main/java/net/sf/jabref/logic/groups/AbstractGroup.java b/src/main/java/net/sf/jabref/logic/groups/AbstractGroup.java index 1fe0e0aa50d..8bd465b7db2 100644 --- a/src/main/java/net/sf/jabref/logic/groups/AbstractGroup.java +++ b/src/main/java/net/sf/jabref/logic/groups/AbstractGroup.java @@ -15,6 +15,7 @@ */ package net.sf.jabref.logic.groups; +import java.util.Collections; import java.util.List; import java.util.Optional; @@ -60,7 +61,7 @@ public abstract class AbstractGroup implements SearchMatcher { * @throws Exception If an error occured and a group could not be created, e.g. * due to a malformed regular expression. */ - public static AbstractGroup fromString(String s, BibDatabase db, int version) throws Exception { + public static AbstractGroup fromString(String s, int version) throws Exception { if (s.startsWith(KeywordGroup.ID)) { return KeywordGroup.fromString(s, version); } @@ -71,7 +72,7 @@ public static AbstractGroup fromString(String s, BibDatabase db, int version) th return SearchGroup.fromString(s, version); } if (s.startsWith(ExplicitGroup.ID)) { - return ExplicitGroup.fromString(s, db, version); + return ExplicitGroup.fromString(s, version); } return null; // unknown group } @@ -117,6 +118,10 @@ public final void setName(String name) { */ public abstract Optional add(List entriesToAdd); + public Optional add(BibEntry entryToAdd) { + return add(Collections.singletonList(entryToAdd)); + } + /** * Removes the specified entries from this group. * diff --git a/src/main/java/net/sf/jabref/logic/groups/ExplicitGroup.java b/src/main/java/net/sf/jabref/logic/groups/ExplicitGroup.java index f1355a30e3a..d895fa1ddb8 100644 --- a/src/main/java/net/sf/jabref/logic/groups/ExplicitGroup.java +++ b/src/main/java/net/sf/jabref/logic/groups/ExplicitGroup.java @@ -15,34 +15,32 @@ */ package net.sf.jabref.logic.groups; -import java.util.HashSet; +import java.util.ArrayList; import java.util.List; -import java.util.Optional; +import java.util.Objects; import java.util.Set; import java.util.TreeSet; import net.sf.jabref.logic.l10n.Localization; import net.sf.jabref.logic.util.strings.QuotedStringTokenizer; import net.sf.jabref.logic.util.strings.StringUtil; -import net.sf.jabref.model.database.BibDatabase; -import net.sf.jabref.model.entry.BibEntry; /** * Select explicit bibtex entries. It is also known as static group. * * @author jzieren */ -public class ExplicitGroup extends AbstractGroup { +public class ExplicitGroup extends KeywordGroup { public static final String ID = "ExplicitGroup:"; - private final Set entries = new HashSet<>(); + private final List legacyEntryKeys = new ArrayList<>(); public ExplicitGroup(String name, GroupHierarchyType context) { - super(name, context); + super(name, "groups", name, true, false, context); } - public static AbstractGroup fromString(String s, BibDatabase db, int version) throws Exception { + public static AbstractGroup fromString(String s, int version) throws Exception { if (!s.startsWith(ExplicitGroup.ID)) { throw new Exception( "Internal error: ExplicitGroup cannot be created from \"" @@ -57,14 +55,14 @@ public static AbstractGroup fromString(String s, BibDatabase db, int version) th case 1: case 2: { ExplicitGroup newGroup = new ExplicitGroup(tok.nextToken(), GroupHierarchyType.INDEPENDENT); - newGroup.addEntries(tok, db); + newGroup.addLegacyEntryKeys(tok); return newGroup; } case 3: { String name = tok.nextToken(); int context = Integer.parseInt(tok.nextToken()); ExplicitGroup newGroup = new ExplicitGroup(name, GroupHierarchyType.getByNumber(context)); - newGroup.addEntries(tok, db); + newGroup.addLegacyEntryKeys(tok); return newGroup; } default: @@ -73,68 +71,22 @@ public static AbstractGroup fromString(String s, BibDatabase db, int version) th } /** - * Called only when created fromString + * Called only when created fromString. + * JabRef used to store the entries of an explicit group in the serialization, e.g. + * ExplicitGroup:GroupName\;0\;Key1\;Key2\;; + * This method exists for backwards compatibility. */ - private void addEntries(QuotedStringTokenizer tok, BibDatabase db) { + private void addLegacyEntryKeys(QuotedStringTokenizer tok) { while (tok.hasMoreTokens()) { - List entries = db.getEntriesByKey(StringUtil.unquote(tok.nextToken(), AbstractGroup.QUOTE_CHAR)); - this.entries.addAll(entries); + String key = StringUtil.unquote(tok.nextToken(), AbstractGroup.QUOTE_CHAR); + this.legacyEntryKeys.add(key); } } - @Override - public boolean supportsAdd() { - return true; - } - - @Override - public boolean supportsRemove() { - return true; - } - - @Override - public Optional add(List entriesToAdd) { - if (entriesToAdd.isEmpty()) { - return Optional.empty(); // nothing to do - } - - HashSet entriesBeforeEdit = new HashSet<>(this.entries); - this.entries.addAll(entriesToAdd); - - return Optional.of(new EntriesGroupChange(entriesBeforeEdit, this.entries)); - } - - public boolean addEntry(BibEntry entry) { - return entries.add(entry); - } - - @Override - public Optional remove(List entriesToRemove) { - if (entriesToRemove.isEmpty()) { - return Optional.empty(); // nothing to do - } - - HashSet entriesBeforeEdit = new HashSet<>(this.entries); - for (BibEntry entry : entriesToRemove) { - this.entries.remove(entry); - } - - return Optional.of(new EntriesGroupChange(entriesBeforeEdit, this.entries)); - } - - public boolean removeEntry(BibEntry entry) { - return entries.remove(entry); - } - - @Override - public boolean contains(BibEntry entry) { - return entries.contains(entry); - } - @Override public AbstractGroup deepCopy() { ExplicitGroup copy = new ExplicitGroup(getName(), getContext()); - copy.entries.addAll(entries); + copy.legacyEntryKeys.addAll(legacyEntryKeys); return copy; } @@ -144,67 +96,36 @@ public boolean equals(Object o) { return false; } ExplicitGroup other = (ExplicitGroup) o; - // compare entries assigned to both groups - if (entries.size() != other.entries.size()) { - return false; // add/remove - } - HashSet keys = new HashSet<>(); - BibEntry entry; - String key; - // compare bibtex keys for all entries that have one - for (BibEntry mEntry1 : entries) { - entry = mEntry1; - key = entry.getCiteKey(); - if (key != null) { - keys.add(key); - } - } - for (BibEntry mEntry : other.entries) { - entry = mEntry; - key = entry.getCiteKey(); - if ((key != null) && !keys.remove(key)) { - return false; - } - } - return keys.isEmpty() && other.getName().equals(getName()) && (other.getHierarchicalContext() == getHierarchicalContext()); + return Objects.equals(getName(), other.getName()) && Objects.equals(getHierarchicalContext(), + other.getHierarchicalContext()) && Objects.equals(getLegacyEntryKeys(), other.getLegacyEntryKeys()); } /** - * Returns a String representation of this group and its entries. Entries - * are referenced by their Bibtexkey. Entries that do not have a Bibtexkey - * are not included in the representation and will thus not be available - * upon recreation. + * Returns a String representation of this group and its entries. */ @Override public String toString() { StringBuilder sb = new StringBuilder(); - sb.append(ExplicitGroup.ID).append(StringUtil.quote(getName(), AbstractGroup.SEPARATOR, AbstractGroup.QUOTE_CHAR)). - append(AbstractGroup.SEPARATOR).append(getContext().ordinal()).append(AbstractGroup.SEPARATOR); - String s; - // write entries in well-defined order for CVS compatibility + sb.append(ExplicitGroup.ID).append( + StringUtil.quote(getName(), AbstractGroup.SEPARATOR, AbstractGroup.QUOTE_CHAR)). + append(AbstractGroup.SEPARATOR).append(getContext().ordinal()).append(AbstractGroup.SEPARATOR); + + // write legacy entry keys in well-defined order for CVS compatibility Set sortedKeys = new TreeSet<>(); - for (BibEntry mEntry : entries) { - s = mEntry.getCiteKey(); - if ((s != null) && !s.isEmpty()) { - sortedKeys.add(s); - } - } + sortedKeys.addAll(legacyEntryKeys); + for (String sortedKey : sortedKeys) { - sb.append(StringUtil.quote(sortedKey, AbstractGroup.SEPARATOR, AbstractGroup.QUOTE_CHAR)).append(AbstractGroup.SEPARATOR); + sb.append(StringUtil.quote(sortedKey, AbstractGroup.SEPARATOR, AbstractGroup.QUOTE_CHAR)).append( + AbstractGroup.SEPARATOR); } return sb.toString(); } /** - * Remove all assignments, resulting in an empty group. + * Remove all stored cite keys, resulting in an empty group. */ - public void clearAssignments() { - entries.clear(); - } - - @Override - public boolean isDynamic() { - return false; + public void clearLegacyEntryKeys() { + legacyEntryKeys.clear(); } @Override @@ -217,9 +138,7 @@ public static String getDescriptionForPreview() { + "Entries can be assigned to this group by selecting them " + "then using either drag and drop or the context menu. " + "Entries can be removed from this group by selecting them " - + "then using the context menu. Every entry assigned to this group " - + "must have a unique key. The key may be changed at any time " - + "as long as it remains unique."); + + "then using the context menu."); } @Override @@ -239,33 +158,8 @@ public String getShortDescription() { return sb.toString(); } - /** - * Update the group to handle the situation where the group - * is applied to a different BibDatabase than it was created for. - * This group type contains a Set of BibEntry objects, and these will not - * be the same objects as in the new database. We must reset the entire Set with - * matching entries from the new database. - * - * @param db The database to refresh for. - */ - @Override - public void refreshForNewDatabase(BibDatabase db) { - Set newSet = new HashSet<>(); - for (BibEntry entry : entries) { - BibEntry sameEntry = db.getEntryByKey(entry.getCiteKey()); - /*if (sameEntry == null) { - System.out.println("Error: could not find entry '"+entry.getCiteKey()+"'"); - } else { - System.out.println("'"+entry.getCiteKey()+"' ok"); - }*/ - newSet.add(sameEntry); - } - entries.clear(); - entries.addAll(newSet); - } - - public Set getEntries() { - return entries; + public List getLegacyEntryKeys() { + return legacyEntryKeys; } @Override @@ -274,13 +168,11 @@ public String getTypeId() { } public int getNumEntries() { - return entries.size(); + return legacyEntryKeys.size(); } @Override public int hashCode() { - // TODO Auto-generated method stub return super.hashCode(); } - } diff --git a/src/main/java/net/sf/jabref/logic/groups/GroupTreeNode.java b/src/main/java/net/sf/jabref/logic/groups/GroupTreeNode.java index 2a73b759f6f..3cae6ac4910 100644 --- a/src/main/java/net/sf/jabref/logic/groups/GroupTreeNode.java +++ b/src/main/java/net/sf/jabref/logic/groups/GroupTreeNode.java @@ -190,28 +190,6 @@ public List getMatchingGroups(List entries) { return groups; } - /** - * For all explicit subgroups, replace the i'th entry of originalEntries with the i'th entry of newEntries. - */ - public void replaceEntriesInExplicitGroup(List originalEntries, List newEntries) { - - if(this.group instanceof ExplicitGroup) { - ExplicitGroup group = (ExplicitGroup)this.group; - for (int i = 0; i < originalEntries.size(); ++i) { - BibEntry entry = originalEntries.get(i); - if (group.contains(entry)) { - group.removeEntry(entry); - group.addEntry(newEntries.get(i)); - } - } - } - - // Traverse children - for(GroupTreeNode child : getChildren()) { - child.replaceEntriesInExplicitGroup(originalEntries, newEntries); - } - } - public boolean supportsAddingEntries() { return group.supportsAdd(); } diff --git a/src/main/java/net/sf/jabref/migrations/VersionHandling.java b/src/main/java/net/sf/jabref/migrations/VersionHandling.java index 7ea23e9c506..7bdbb3bf768 100644 --- a/src/main/java/net/sf/jabref/migrations/VersionHandling.java +++ b/src/main/java/net/sf/jabref/migrations/VersionHandling.java @@ -23,7 +23,6 @@ import net.sf.jabref.logic.groups.GroupTreeNode; import net.sf.jabref.logic.groups.KeywordGroup; import net.sf.jabref.logic.util.strings.StringUtil; -import net.sf.jabref.model.database.BibDatabase; /** * Handles versioning of groups, e.g. automatic conversion from previous to @@ -59,16 +58,14 @@ public static GroupTreeNode importFlatGroups(List groups) return root; } - public static GroupTreeNode importGroups(List orderedData, - BibDatabase db, int version) throws Exception { + public static GroupTreeNode importGroups(List orderedData, int version) throws Exception { switch (version) { case 0: case 1: - return Version0_1.fromString(orderedData.get(0), - db, version); + return Version0_1.fromString(orderedData.get(0), version); case 2: case 3: - return Version2_3.fromString(orderedData, db, version); + return Version2_3.fromString(orderedData, version); default: throw new IllegalArgumentException( "Failed to read groups data (unsupported version: " + @@ -88,8 +85,7 @@ private static class Version0_1 { * @throws Exception * When a group could not be recreated */ - private static GroupTreeNode fromString(String str, BibDatabase db, - int version) throws Exception { + private static GroupTreeNode fromString(String str, int version) throws Exception { GroupTreeNode root = null; GroupTreeNode newNode; int i; @@ -98,7 +94,7 @@ private static GroupTreeNode fromString(String str, BibDatabase db, while (!s.isEmpty()) { if (s.startsWith("(")) { String subtree = Version0_1.getSubtree(s); - newNode = Version0_1.fromString(subtree, db, version); + newNode = Version0_1.fromString(subtree, version); // continue after this subtree by removing it // and the leading/trailing braces, and // the comma (that makes 3) that always trails it @@ -113,8 +109,7 @@ private static GroupTreeNode fromString(String str, BibDatabase db, } else { s = ""; } - newNode = new GroupTreeNode(AbstractGroup.fromString(StringUtil - .unquote(g, '\\'), db, version)); + newNode = new GroupTreeNode(AbstractGroup.fromString(StringUtil.unquote(g, '\\'), version)); } if (root == null) { root = newNode; @@ -185,8 +180,7 @@ private static int indexOfUnquoted(String s, char c) { private static class Version2_3 { - private static GroupTreeNode fromString(List data, BibDatabase db, - int version) throws Exception { + private static GroupTreeNode fromString(List data, int version) throws Exception { GroupTreeNode cursor = null; GroupTreeNode root = null; GroupTreeNode newNode; @@ -208,8 +202,7 @@ private static GroupTreeNode fromString(List data, BibDatabase db, throw new Exception("bad format"); } level = Integer.parseInt(s.substring(0, spaceIndex)); - group = AbstractGroup.fromString(s.substring(spaceIndex + 1), - db, version); + group = AbstractGroup.fromString(s.substring(spaceIndex + 1), version); newNode = new GroupTreeNode(group); if (cursor == null) { // create new root diff --git a/src/main/java/net/sf/jabref/sql/exporter/DatabaseExporter.java b/src/main/java/net/sf/jabref/sql/exporter/DatabaseExporter.java index 2530655167e..1bf3da705cb 100644 --- a/src/main/java/net/sf/jabref/sql/exporter/DatabaseExporter.java +++ b/src/main/java/net/sf/jabref/sql/exporter/DatabaseExporter.java @@ -151,18 +151,6 @@ private int populateEntryGroupsTable(GroupTreeNode cursor, int parentID, int cur return -1; } - // if this group contains entries... - if (cursor.getGroup() instanceof ExplicitGroup) { - ExplicitGroup grp = (ExplicitGroup) cursor.getGroup(); - for (BibEntry be : grp.getEntries()) { - SQLUtil.processQuery(connection, "INSERT INTO entry_group (entries_id, groups_id) " + "VALUES (" - + "(SELECT entries_id FROM entries WHERE jabref_eid=" + '\'' + be.getId() - + "' AND database_id = " + database_id + "), " - + "(SELECT groups_id FROM groups WHERE database_id=" + '\'' + database_id + "' AND parent_id=" - + '\'' + parentID + "' AND label=" + '\'' + grp.getName() + "')" + ");"); - } - } - // recurse on child nodes (depth-first traversal) String sql = "SELECT groups_id FROM groups WHERE label = ? AND database_id= ? AND parent_id = ? ;"; try (PreparedStatement statement = connection.prepareStatement(sql)) { diff --git a/src/main/java/net/sf/jabref/sql/importer/DatabaseImporter.java b/src/main/java/net/sf/jabref/sql/importer/DatabaseImporter.java index fd9ec0ff216..1de08663ac8 100644 --- a/src/main/java/net/sf/jabref/sql/importer/DatabaseImporter.java +++ b/src/main/java/net/sf/jabref/sql/importer/DatabaseImporter.java @@ -267,7 +267,7 @@ private void importGroupsTree(MetaData metaData, Map entries, GroupTreeNode node = groups.get(groupId); if ((node != null) && (node.getGroup() instanceof ExplicitGroup)) { ExplicitGroup expGroup = (ExplicitGroup) node.getGroup(); - expGroup.addEntry(entries.get(entryId)); + expGroup.add(entries.get(entryId)); } } } diff --git a/src/test/java/net/sf/jabref/importer/fileformat/BibtexParserTest.java b/src/test/java/net/sf/jabref/importer/fileformat/BibtexParserTest.java index 6a647727e8f..3c46993f851 100644 --- a/src/test/java/net/sf/jabref/importer/fileformat/BibtexParserTest.java +++ b/src/test/java/net/sf/jabref/importer/fileformat/BibtexParserTest.java @@ -20,6 +20,7 @@ import net.sf.jabref.logic.config.SaveOrderConfig; import net.sf.jabref.logic.formatter.casechanger.LowerCaseFormatter; import net.sf.jabref.logic.groups.AllEntriesGroup; +import net.sf.jabref.logic.groups.ExplicitGroup; import net.sf.jabref.logic.groups.GroupHierarchyType; import net.sf.jabref.logic.groups.GroupTreeNode; import net.sf.jabref.logic.groups.KeywordGroup; @@ -1421,18 +1422,21 @@ public void integrationTestGroupTree() throws IOException { + "1 KeywordGroup:Fréchet\\;0\\;keywords\\;FrechetSpace\\;0\\;1\\;;" + Globals.NEWLINE + "1 KeywordGroup:Invariant theory\\;0\\;keywords\\;GIT\\;0\\;0\\;;" + + Globals.NEWLINE + + "1 ExplicitGroup:TestGroup\\;0\\;Key1\\;Key2\\;;" + "}")); GroupTreeNode root = result.getMetaData().getGroups(); assertEquals(new AllEntriesGroup(), root.getGroup()); - assertEquals(2, root.getNumberOfChildren()); + assertEquals(3, root.getNumberOfChildren()); assertEquals( new KeywordGroup("Fréchet", "keywords", "FrechetSpace", false, true, GroupHierarchyType.INDEPENDENT), root.getChildren().get(0).getGroup()); assertEquals( new KeywordGroup("Invariant theory", "keywords", "GIT", false, false, GroupHierarchyType.INDEPENDENT), root.getChildren().get(1).getGroup()); + assertEquals(Arrays.asList("Key1", "Key2"), ((ExplicitGroup)root.getChildren().get(2).getGroup()).getLegacyEntryKeys()); } @Test diff --git a/src/test/java/net/sf/jabref/logic/groups/ExplicitGroupTest.java b/src/test/java/net/sf/jabref/logic/groups/ExplicitGroupTest.java index 58702e2c1d2..5e7a15f4730 100644 --- a/src/test/java/net/sf/jabref/logic/groups/ExplicitGroupTest.java +++ b/src/test/java/net/sf/jabref/logic/groups/ExplicitGroupTest.java @@ -27,7 +27,7 @@ public void testToStringSimple() { @Test public void testToStringComplex() { ExplicitGroup group = new ExplicitGroup("myExplicitGroup", GroupHierarchyType.INCLUDING); - group.addEntry(makeBibtexEntry()); + group.add(makeBibtexEntry()); assertEquals("ExplicitGroup:myExplicitGroup;2;shields01;", group.toString()); } From 96cec57da0c320eea75ba9228fc01e3fa38522b4 Mon Sep 17 00:00:00 2001 From: Tobias Diez Date: Fri, 22 Apr 2016 18:28:18 +0200 Subject: [PATCH 2/3] Convert old ExplicitGroups to new format --- .../importer/ConvertLegacyExplicitGroups.java | 58 +++++++++++++ .../jabref/importer/OpenDatabaseAction.java | 11 +-- .../net/sf/jabref/importer/ParserResult.java | 2 +- .../sf/jabref/logic/groups/ExplicitGroup.java | 8 +- .../ConvertLegacyExplicitGroupsTest.java | 82 +++++++++++++++++++ .../logic/groups/ExplicitGroupTest.java | 4 +- 6 files changed, 155 insertions(+), 10 deletions(-) create mode 100644 src/main/java/net/sf/jabref/importer/ConvertLegacyExplicitGroups.java create mode 100644 src/test/java/net/sf/jabref/importer/ConvertLegacyExplicitGroupsTest.java diff --git a/src/main/java/net/sf/jabref/importer/ConvertLegacyExplicitGroups.java b/src/main/java/net/sf/jabref/importer/ConvertLegacyExplicitGroups.java new file mode 100644 index 00000000000..106ac3474fd --- /dev/null +++ b/src/main/java/net/sf/jabref/importer/ConvertLegacyExplicitGroups.java @@ -0,0 +1,58 @@ +package net.sf.jabref.importer; + +import java.util.ArrayList; +import java.util.List; +import java.util.Objects; + +import net.sf.jabref.gui.BasePanel; +import net.sf.jabref.logic.groups.ExplicitGroup; +import net.sf.jabref.logic.groups.GroupTreeNode; +import net.sf.jabref.model.entry.BibEntry; + +/** + * Converts legacy explicit groups, where the group contained a list of assigned entries, to the new format, + * where the entry stores a list of groups it belongs to. + */ +public class ConvertLegacyExplicitGroups implements PostOpenAction { + + @Override + public boolean isActionNecessary(ParserResult pr) { + if(pr.getMetaData().getGroups() == null) { + return false; + } + return !getExplicitGroupsWithLegacyKeys(pr.getMetaData().getGroups()).isEmpty(); + } + + @Override + public void performAction(BasePanel panel, ParserResult pr) { + Objects.requireNonNull(pr); + if(pr.getMetaData().getGroups() == null) { + return; + } + + for (ExplicitGroup group : getExplicitGroupsWithLegacyKeys(pr.getMetaData().getGroups())) { + for (String entryKey : group.getLegacyEntryKeys()) { + for (BibEntry entry : pr.getDatabase().getEntriesByKey(entryKey)) { + group.add(entry); + } + } + group.clearLegacyEntryKeys(); + } + } + + private List getExplicitGroupsWithLegacyKeys(GroupTreeNode node) { + Objects.requireNonNull(node); + List findings = new ArrayList<>(); + + if (node.getGroup() instanceof ExplicitGroup) { + ExplicitGroup group = (ExplicitGroup) node.getGroup(); + if (!group.getLegacyEntryKeys().isEmpty()) { + findings.add(group); + } + } + + node.getChildren().forEach(child -> findings.addAll(getExplicitGroupsWithLegacyKeys(child))); + + return findings; + } +} diff --git a/src/main/java/net/sf/jabref/importer/OpenDatabaseAction.java b/src/main/java/net/sf/jabref/importer/OpenDatabaseAction.java index 87dd2aaf254..993abd64452 100644 --- a/src/main/java/net/sf/jabref/importer/OpenDatabaseAction.java +++ b/src/main/java/net/sf/jabref/importer/OpenDatabaseAction.java @@ -75,13 +75,14 @@ public class OpenDatabaseAction extends MnemonicAwareAction { private static final List POST_OPEN_ACTIONS = new ArrayList<>(); static { - // Add the action for checking for new custom entry types loaded from - // the bib file: - OpenDatabaseAction.POST_OPEN_ACTIONS.add(new CheckForNewEntryTypesAction()); + // Add the action for checking for new custom entry types loaded from the bib file: + POST_OPEN_ACTIONS.add(new CheckForNewEntryTypesAction()); + // Add the action for converting legacy entries in ExplicitGroup + POST_OPEN_ACTIONS.add(new ConvertLegacyExplicitGroups()); // Add the action for the new external file handling system in version 2.3: - OpenDatabaseAction.POST_OPEN_ACTIONS.add(new FileLinksUpgradeWarning()); + POST_OPEN_ACTIONS.add(new FileLinksUpgradeWarning()); // Add the action for warning about and handling duplicate BibTeX keys: - OpenDatabaseAction.POST_OPEN_ACTIONS.add(new HandleDuplicateWarnings()); + POST_OPEN_ACTIONS.add(new HandleDuplicateWarnings()); } public OpenDatabaseAction(JabRefFrame frame, boolean showDialog) { diff --git a/src/main/java/net/sf/jabref/importer/ParserResult.java b/src/main/java/net/sf/jabref/importer/ParserResult.java index fa638d6b7d8..bd93ab57655 100644 --- a/src/main/java/net/sf/jabref/importer/ParserResult.java +++ b/src/main/java/net/sf/jabref/importer/ParserResult.java @@ -51,7 +51,7 @@ public class ParserResult { public ParserResult(Collection entries) { - this(BibDatabases.createDatabase(BibDatabases.purgeEmptyEntries(entries)), null, new HashMap<>()); + this(BibDatabases.createDatabase(BibDatabases.purgeEmptyEntries(entries)), new MetaData(), new HashMap<>()); } public ParserResult(BibDatabase base, MetaData metaData, Map entryTypes) { diff --git a/src/main/java/net/sf/jabref/logic/groups/ExplicitGroup.java b/src/main/java/net/sf/jabref/logic/groups/ExplicitGroup.java index d895fa1ddb8..446171c2668 100644 --- a/src/main/java/net/sf/jabref/logic/groups/ExplicitGroup.java +++ b/src/main/java/net/sf/jabref/logic/groups/ExplicitGroup.java @@ -40,7 +40,7 @@ public ExplicitGroup(String name, GroupHierarchyType context) { super(name, "groups", name, true, false, context); } - public static AbstractGroup fromString(String s, int version) throws Exception { + public static ExplicitGroup fromString(String s, int version) throws Exception { if (!s.startsWith(ExplicitGroup.ID)) { throw new Exception( "Internal error: ExplicitGroup cannot be created from \"" @@ -79,10 +79,14 @@ public static AbstractGroup fromString(String s, int version) throws Exception { private void addLegacyEntryKeys(QuotedStringTokenizer tok) { while (tok.hasMoreTokens()) { String key = StringUtil.unquote(tok.nextToken(), AbstractGroup.QUOTE_CHAR); - this.legacyEntryKeys.add(key); + addLegacyEntryKey(key); } } + public void addLegacyEntryKey(String key) { + this.legacyEntryKeys.add(key); + } + @Override public AbstractGroup deepCopy() { ExplicitGroup copy = new ExplicitGroup(getName(), getContext()); diff --git a/src/test/java/net/sf/jabref/importer/ConvertLegacyExplicitGroupsTest.java b/src/test/java/net/sf/jabref/importer/ConvertLegacyExplicitGroupsTest.java new file mode 100644 index 00000000000..d7b9fbb851d --- /dev/null +++ b/src/test/java/net/sf/jabref/importer/ConvertLegacyExplicitGroupsTest.java @@ -0,0 +1,82 @@ +package net.sf.jabref.importer; + +import java.util.Collections; + +import net.sf.jabref.Globals; +import net.sf.jabref.JabRefPreferences; +import net.sf.jabref.gui.BasePanel; +import net.sf.jabref.logic.groups.AllEntriesGroup; +import net.sf.jabref.logic.groups.ExplicitGroup; +import net.sf.jabref.logic.groups.GroupHierarchyType; +import net.sf.jabref.logic.groups.GroupTreeNode; +import net.sf.jabref.model.entry.BibEntry; + +import org.junit.Before; +import org.junit.Test; +import org.mockito.Mock; + +import static org.junit.Assert.assertEquals; +import static org.junit.Assert.assertTrue; + +public class ConvertLegacyExplicitGroupsTest { + + private ConvertLegacyExplicitGroups action; + @Mock private BasePanel basePanel; + private BibEntry entry; + private ExplicitGroup group; + + @Before + public void setUp() throws Exception { + Globals.prefs = JabRefPreferences.getInstance(); + + action = new ConvertLegacyExplicitGroups(); + + entry = new BibEntry(); + entry.setCiteKey("Entry1"); + group = new ExplicitGroup("TestGroup", GroupHierarchyType.INCLUDING); + group.addLegacyEntryKey("Entry1"); + } + + @Test + public void performActionWritesGroupMembershipInEntry() throws Exception { + ParserResult parserResult = generateParserResult(entry, new GroupTreeNode(group)); + + action.performAction(basePanel, parserResult); + + assertEquals("TestGroup", entry.getField("groups")); + } + + @Test + public void performActionClearsLegacyKeys() throws Exception { + ParserResult parserResult = generateParserResult(entry, new GroupTreeNode(group)); + + action.performAction(basePanel, parserResult); + + assertEquals(Collections.emptyList(), group.getLegacyEntryKeys()); + } + + @Test + public void performActionWritesGroupMembershipInEntryForComplexGroupTree() throws Exception { + GroupTreeNode root = new GroupTreeNode(new AllEntriesGroup()); + root.addSubgroup(new ExplicitGroup("TestGroup2", GroupHierarchyType.INCLUDING)); + root.addSubgroup(group); + ParserResult parserResult = generateParserResult(entry, root); + + action.performAction(basePanel, parserResult); + + assertEquals("TestGroup", entry.getField("groups")); + } + + @Test + public void isActionNecessaryReturnsTrueIfGroupContainsLegacyKeys() throws Exception { + ParserResult parserResult = generateParserResult(entry, new GroupTreeNode(group)); + + assertTrue(action.isActionNecessary(parserResult)); + } + + private ParserResult generateParserResult(BibEntry entry, GroupTreeNode groupRoot) { + ParserResult parserResult = new ParserResult(Collections.singletonList(entry)); + parserResult.getMetaData().setGroups(groupRoot); + return parserResult; + } +} diff --git a/src/test/java/net/sf/jabref/logic/groups/ExplicitGroupTest.java b/src/test/java/net/sf/jabref/logic/groups/ExplicitGroupTest.java index 5e7a15f4730..41471b25a3f 100644 --- a/src/test/java/net/sf/jabref/logic/groups/ExplicitGroupTest.java +++ b/src/test/java/net/sf/jabref/logic/groups/ExplicitGroupTest.java @@ -25,10 +25,10 @@ public void testToStringSimple() { } @Test - public void testToStringComplex() { + public void toStringDoesNotWriteAssignedEntries() { ExplicitGroup group = new ExplicitGroup("myExplicitGroup", GroupHierarchyType.INCLUDING); group.add(makeBibtexEntry()); - assertEquals("ExplicitGroup:myExplicitGroup;2;shields01;", group.toString()); + assertEquals("ExplicitGroup:myExplicitGroup;2;", group.toString()); } public BibEntry makeBibtexEntry() { From 744c2967110c83f134284c6dcb86bf1d9605edc8 Mon Sep 17 00:00:00 2001 From: Tobias Diez Date: Fri, 22 Apr 2016 18:50:05 +0200 Subject: [PATCH 3/3] Add Changelog and modify translations --- CHANGELOG.md | 1 + src/main/resources/l10n/JabRef_da.properties | 2 +- src/main/resources/l10n/JabRef_de.properties | 2 +- src/main/resources/l10n/JabRef_en.properties | 2 +- src/main/resources/l10n/JabRef_es.properties | 2 +- src/main/resources/l10n/JabRef_fa.properties | 2 +- src/main/resources/l10n/JabRef_fr.properties | 2 +- src/main/resources/l10n/JabRef_in.properties | 2 +- src/main/resources/l10n/JabRef_it.properties | 2 +- src/main/resources/l10n/JabRef_ja.properties | 3 ++- src/main/resources/l10n/JabRef_nl.properties | 2 +- src/main/resources/l10n/JabRef_no.properties | 2 +- src/main/resources/l10n/JabRef_pt_BR.properties | 2 +- src/main/resources/l10n/JabRef_ru.properties | 2 +- src/main/resources/l10n/JabRef_sv.properties | 2 +- src/main/resources/l10n/JabRef_tr.properties | 2 +- src/main/resources/l10n/JabRef_vi.properties | 2 +- src/main/resources/l10n/JabRef_zh.properties | 3 ++- 18 files changed, 20 insertions(+), 17 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index 20acfaae3dd..80bed5dfa53 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -14,6 +14,7 @@ to [sourceforge feature requests](https://sourceforge.net/p/jabref/features/) by ## [Unreleased] ### Changed +- Implemented [#629](https://github.com/JabRef/jabref/issues/629): Explicit groups are now written in the "groups" field of the entry instead of at the end of the bib file - Main table now accepts pasted DOIs and tries to retrieve the entry - Added support for several Biblatex-fields through drop-down lists with valid alternatives - Added integrity checker for an odd number of unescaped '#' diff --git a/src/main/resources/l10n/JabRef_da.properties b/src/main/resources/l10n/JabRef_da.properties index bdd8db02c0f..7897bdb2560 100644 --- a/src/main/resources/l10n/JabRef_da.properties +++ b/src/main/resources/l10n/JabRef_da.properties @@ -763,7 +763,7 @@ This_entry_has_no_BibTeX_key._Generate_key_now?=Denne_post_har_ingen_BibTeX-nøg This_entry_is_incomplete=Denne_post_er_ufuldstændig This_entry_type_cannot_be_removed.=Denne_posttype_kan_ikke_slettes. This_external_link_is_of_the_type_'%0',_which_is_undefined._What_do_you_want_to_do?=Dette_eksterne_link_er_af_typen_'%0',_som_er_udefineret._Hvad_vil_du_gøre? -This_group_contains_entries_based_on_manual_assignment._Entries_can_be_assigned_to_this_group_by_selecting_them_then_using_either_drag_and_drop_or_the_context_menu._Entries_can_be_removed_from_this_group_by_selecting_them_then_using_the_context_menu._Every_entry_assigned_to_this_group_must_have_a_unique_key._The_key_may_be_changed_at_any_time_as_long_as_it_remains_unique.=Denne_gruppe_indeholder_poster_baseret_på_manuel_tildeling._Poster_kan_tildeles_til_denne_gruppe_ved_at_vælge_dem_og_derefter_trække_dem_over_til_gruppen,_eller_ved_hjælp_af_højreklikmenuen._Alle_poster_tildelt_denne_gruppen_skal_have_en_unik_nøgle._Nøglen_kan_ændres_til_enhver_tid,_så_længe_den_forbliver_unik. +This_group_contains_entries_based_on_manual_assignment._Entries_can_be_assigned_to_this_group_by_selecting_them_then_using_either_drag_and_drop_or_the_context_menu._Entries_can_be_removed_from_this_group_by_selecting_them_then_using_the_context_menu.=Denne_gruppe_indeholder_poster_baseret_på_manuel_tildeling._Poster_kan_tildeles_til_denne_gruppe_ved_at_vælge_dem_og_derefter_trække_dem_over_til_gruppen,_eller_ved_hjælp_af_højreklikmenuen. This_group_contains_entries_whose_%0_field_contains_the_keyword_%1=Denne_gruppe_indeholder_poster_hvis_%0-felt_indeholder_nøgleordet_%1 This_group_contains_entries_whose_%0_field_contains_the_regular_expression_%1=Denne_gruppe_indeholder_poster,_hvis_%0-felt_stemmer_med_regulærudtrykket_%1 diff --git a/src/main/resources/l10n/JabRef_de.properties b/src/main/resources/l10n/JabRef_de.properties index 379c1394349..6cedad02975 100644 --- a/src/main/resources/l10n/JabRef_de.properties +++ b/src/main/resources/l10n/JabRef_de.properties @@ -1416,7 +1416,7 @@ This_entry_is_incomplete=Dieser_Eintrag_ist_unvollständig This_entry_type_cannot_be_removed.=Dieser_Eintragstyp_kann_nicht_entfernt_werden. This_external_link_is_of_the_type_'%0',_which_is_undefined._What_do_you_want_to_do?=Dies_ist_ein_externer_Link_des_Typs_'%0',_der_nicht_definiert_ist._Was_wollen_Sie_tun? -This_group_contains_entries_based_on_manual_assignment._Entries_can_be_assigned_to_this_group_by_selecting_them_then_using_either_drag_and_drop_or_the_context_menu._Entries_can_be_removed_from_this_group_by_selecting_them_then_using_the_context_menu._Every_entry_assigned_to_this_group_must_have_a_unique_key._The_key_may_be_changed_at_any_time_as_long_as_it_remains_unique.=Diese_Gruppe_enthält_manuell_zugewiesene_Einträge._Einträge_können_dieser_Gruppe_zugewiesen_werden,_indem_Sie_sie_selektieren_und_dann_entweder_Drag&Drop_oder_das_Kontextmenü_benutzen._Einträge_können_aus_dieser_Gruppe_entfernt_werden,_indem_Sie_sie_selektieren_und_dann_das_Kontextmenü_benutzen._Jeder_Eintrag,_der_dieser_Gruppe_zugewiesen_wird,_muss_einen_eindeutigen_BibTeX-Key_haben._Der_BibTeX-Key_kann_jederzeit_geändert_werden,_solange_er_eindeutig_bleibt. +This_group_contains_entries_based_on_manual_assignment._Entries_can_be_assigned_to_this_group_by_selecting_them_then_using_either_drag_and_drop_or_the_context_menu._Entries_can_be_removed_from_this_group_by_selecting_them_then_using_the_context_menu.=Diese_Gruppe_enthält_manuell_zugewiesene_Einträge._Einträge_können_dieser_Gruppe_zugewiesen_werden,_indem_Sie_sie_selektieren_und_dann_entweder_Drag&Drop_oder_das_Kontextmenü_benutzen._Einträge_können_aus_dieser_Gruppe_entfernt_werden,_indem_Sie_sie_selektieren_und_dann_das_Kontextmenü_benutzen. diff --git a/src/main/resources/l10n/JabRef_en.properties b/src/main/resources/l10n/JabRef_en.properties index c10534333aa..7ffe738db78 100644 --- a/src/main/resources/l10n/JabRef_en.properties +++ b/src/main/resources/l10n/JabRef_en.properties @@ -1338,7 +1338,7 @@ This_entry_type_cannot_be_removed.=This_entry_type_cannot_be_removed. This_external_link_is_of_the_type_'%0',_which_is_undefined._What_do_you_want_to_do?=This_external_link_is_of_the_type_'%0',_which_is_undefined._What_do_you_want_to_do? -This_group_contains_entries_based_on_manual_assignment._Entries_can_be_assigned_to_this_group_by_selecting_them_then_using_either_drag_and_drop_or_the_context_menu._Entries_can_be_removed_from_this_group_by_selecting_them_then_using_the_context_menu._Every_entry_assigned_to_this_group_must_have_a_unique_key._The_key_may_be_changed_at_any_time_as_long_as_it_remains_unique.=This_group_contains_entries_based_on_manual_assignment._Entries_can_be_assigned_to_this_group_by_selecting_them_then_using_either_drag_and_drop_or_the_context_menu._Entries_can_be_removed_from_this_group_by_selecting_them_then_using_the_context_menu._Every_entry_assigned_to_this_group_must_have_a_unique_key._The_key_may_be_changed_at_any_time_as_long_as_it_remains_unique. +This_group_contains_entries_based_on_manual_assignment._Entries_can_be_assigned_to_this_group_by_selecting_them_then_using_either_drag_and_drop_or_the_context_menu._Entries_can_be_removed_from_this_group_by_selecting_them_then_using_the_context_menu.=This_group_contains_entries_based_on_manual_assignment._Entries_can_be_assigned_to_this_group_by_selecting_them_then_using_either_drag_and_drop_or_the_context_menu._Entries_can_be_removed_from_this_group_by_selecting_them_then_using_the_context_menu. This_group_contains_entries_whose_%0_field_contains_the_keyword_%1=This_group_contains_entries_whose_%0_field_contains_the_keyword_%1 diff --git a/src/main/resources/l10n/JabRef_es.properties b/src/main/resources/l10n/JabRef_es.properties index 32c37e240bd..a52146ed0d4 100644 --- a/src/main/resources/l10n/JabRef_es.properties +++ b/src/main/resources/l10n/JabRef_es.properties @@ -713,7 +713,7 @@ This_entry_has_no_BibTeX_key._Generate_key_now?=Esta_entrada_no_tiene_clave_BibT This_entry_is_incomplete=Esta_entrada_está_incompleta¡u+ This_entry_type_cannot_be_removed.=Este_tipo_de_entrada_no_puede_ser_eliminada. This_external_link_is_of_the_type_'%0',_which_is_undefined._What_do_you_want_to_do?=El_enlace_externo_es_del_tipo_'%0',_que_no_está_definido._¿Qué_desea_hacer? -This_group_contains_entries_based_on_manual_assignment._Entries_can_be_assigned_to_this_group_by_selecting_them_then_using_either_drag_and_drop_or_the_context_menu._Entries_can_be_removed_from_this_group_by_selecting_them_then_using_the_context_menu._Every_entry_assigned_to_this_group_must_have_a_unique_key._The_key_may_be_changed_at_any_time_as_long_as_it_remains_unique.=Este_grupo_contiene_entradas_basadas_en_asignación_manual._Las_entradas_pueden_ser_asignadas_a_este_grupo_seleccionándolas_usando_el_menú_contextual_o_bien_mediante_arrastrar-soltar._Las_entradas_pueden_ser_eliminadas_de_este_grupo_seleccionándolas_y_luego_usando_el_menú_contextual._Cada_entrada_asignada_a_este_grupo_debe_tener_una_clave_única._La_clave_puede_ser_cambiada_en_cualquier_momento,_siempre_y_cuando_permaneza_siendo_única. +This_group_contains_entries_based_on_manual_assignment._Entries_can_be_assigned_to_this_group_by_selecting_them_then_using_either_drag_and_drop_or_the_context_menu._Entries_can_be_removed_from_this_group_by_selecting_them_then_using_the_context_menu.=Este_grupo_contiene_entradas_basadas_en_asignación_manual._Las_entradas_pueden_ser_asignadas_a_este_grupo_seleccionándolas_usando_el_menú_contextual_o_bien_mediante_arrastrar-soltar._Las_entradas_pueden_ser_eliminadas_de_este_grupo_seleccionándolas_y_luego_usando_el_menú_contextual. This_group_contains_entries_whose_%0_field_contains_the_keyword_%1=Este_grupo_contiene_entradas_cuyo_campo_%0_contiene_la_palabra_clave_%1_ This_group_contains_entries_whose_%0_field_contains_the_regular_expression_%1=Este_grupo_contiene_entradas_cuyo_campo_%0_contiene_la<_expresión_regular_%1_ This_makes_JabRef_look_up_each_file_link_and_check_if_the_file_exists._If_not,_you_will_be_given_options
to_resolve_the_problem.=JabRef_inspeccionará_cada_enlace_archivo_y_comprobará_si_el_archivo_existe._En_caso_contrario,_se_le_ofrecerán_opciones_
_para_solucionar_el_problema. diff --git a/src/main/resources/l10n/JabRef_fa.properties b/src/main/resources/l10n/JabRef_fa.properties index 957c6630ef5..8b8c0c822ff 100644 --- a/src/main/resources/l10n/JabRef_fa.properties +++ b/src/main/resources/l10n/JabRef_fa.properties @@ -1376,7 +1376,7 @@ This_entry_type_cannot_be_removed.= This_external_link_is_of_the_type_'%0',_which_is_undefined._What_do_you_want_to_do?= -This_group_contains_entries_based_on_manual_assignment._Entries_can_be_assigned_to_this_group_by_selecting_them_then_using_either_drag_and_drop_or_the_context_menu._Entries_can_be_removed_from_this_group_by_selecting_them_then_using_the_context_menu._Every_entry_assigned_to_this_group_must_have_a_unique_key._The_key_may_be_changed_at_any_time_as_long_as_it_remains_unique.= +This_group_contains_entries_based_on_manual_assignment._Entries_can_be_assigned_to_this_group_by_selecting_them_then_using_either_drag_and_drop_or_the_context_menu._Entries_can_be_removed_from_this_group_by_selecting_them_then_using_the_context_menu.= diff --git a/src/main/resources/l10n/JabRef_fr.properties b/src/main/resources/l10n/JabRef_fr.properties index a87601edf60..5f30100db0d 100644 --- a/src/main/resources/l10n/JabRef_fr.properties +++ b/src/main/resources/l10n/JabRef_fr.properties @@ -713,7 +713,7 @@ This_entry_has_no_BibTeX_key._Generate_key_now?=Cette_entrée_n'a_pas_de_clef_Bi This_entry_is_incomplete=Cette_entrée_est_incomplète This_entry_type_cannot_be_removed.=Ce_type_d'entrée_ne_peut_pas_être_supprimé. This_external_link_is_of_the_type_'%0',_which_is_undefined._What_do_you_want_to_do?=Ce_lien_externe_est_du_type_'%0',_qui_est_indéfini._Que_voulez-vous_faire_? -This_group_contains_entries_based_on_manual_assignment._Entries_can_be_assigned_to_this_group_by_selecting_them_then_using_either_drag_and_drop_or_the_context_menu._Entries_can_be_removed_from_this_group_by_selecting_them_then_using_the_context_menu._Every_entry_assigned_to_this_group_must_have_a_unique_key._The_key_may_be_changed_at_any_time_as_long_as_it_remains_unique.=Ce_groupe_contient_des_entrées_basées_sur_un_ajout_manuel._Des_entrées_peuvent_être_ajoutées_à_ce_groupe_en_les_sélectionnant_puis_en_utilisant_un_glisser-déplacer_ou_le_menu_contextuel._Des_entrées_peuvent_être_supprimées_de_ce_groupe_en_les_sélectionnant_puis_en_utilisant_le_menu_contextuel._Chaque_entrée_assignée_à_ce_groupe_doit_avoir_une_clef_unique._La_clef_peut_être_changée_à_n'importe_quel_moment_tant_qu'elle_reste_unique. +This_group_contains_entries_based_on_manual_assignment._Entries_can_be_assigned_to_this_group_by_selecting_them_then_using_either_drag_and_drop_or_the_context_menu._Entries_can_be_removed_from_this_group_by_selecting_them_then_using_the_context_menu.=Ce_groupe_contient_des_entrées_basées_sur_un_ajout_manuel._Des_entrées_peuvent_être_ajoutées_à_ce_groupe_en_les_sélectionnant_puis_en_utilisant_un_glisser-déplacer_ou_le_menu_contextuel._Des_entrées_peuvent_être_supprimées_de_ce_groupe_en_les_sélectionnant_puis_en_utilisant_le_menu_contextuel. This_group_contains_entries_whose_%0_field_contains_the_keyword_%1=Ce_groupe_contient_des_entrées_dont_le_champ_%0_contient_le_mot-clef_%1_ This_group_contains_entries_whose_%0_field_contains_the_regular_expression_%1=Ce_groupe_contient_des_entrées_dont_le_champ_%0_contient_l'expression_régulière_%1_ This_makes_JabRef_look_up_each_file_link_and_check_if_the_file_exists._If_not,_you_will_be_given_options
to_resolve_the_problem.=JabRef_cherche_chaque_fichier_lien_et_vérifie_si_le_fichier_existe._Si_non,_des_options_vous_seront_proposées
pour_résoudre_le_problème. diff --git a/src/main/resources/l10n/JabRef_in.properties b/src/main/resources/l10n/JabRef_in.properties index fd9bb392c88..4a5f0179f11 100644 --- a/src/main/resources/l10n/JabRef_in.properties +++ b/src/main/resources/l10n/JabRef_in.properties @@ -712,7 +712,7 @@ This_entry_has_no_BibTeX_key._Generate_key_now?=Entri_ini_belum_mempunyai_kunci_ This_entry_is_incomplete=Entri_belum_lengkap This_entry_type_cannot_be_removed.=Tipe_entri_tidak_bisa_dihapus. This_external_link_is_of_the_type_'%0',_which_is_undefined._What_do_you_want_to_do?=Tautan_eksternal_dari_tipe_'%0',_yang_belum_didefinisikan._Apa_yang_akan_anda_lakukan? -This_group_contains_entries_based_on_manual_assignment._Entries_can_be_assigned_to_this_group_by_selecting_them_then_using_either_drag_and_drop_or_the_context_menu._Entries_can_be_removed_from_this_group_by_selecting_them_then_using_the_context_menu._Every_entry_assigned_to_this_group_must_have_a_unique_key._The_key_may_be_changed_at_any_time_as_long_as_it_remains_unique.=Grup_ini_mempunyai_entri_berdasar_dari_pengisian_manual._Entri_dapat_dituliskan_dalam_grup_ini_dengan_cara_memilih_entri_kemudian_menggunakannya_melalui_seret_dan_tempatkan_atau_dari_konteks_menu._Entri_dapat_dihapus_dari_grup_dengan_memilih_dan_hapus_dari_konteks_menu._Setiap_entri_ditulis_ke_grup_ini_harus_mempunyai_kunci_berbeda._Kunci_bisa_diganti_tetapi_harus_berbeda_dengan_lainnnya. +This_group_contains_entries_based_on_manual_assignment._Entries_can_be_assigned_to_this_group_by_selecting_them_then_using_either_drag_and_drop_or_the_context_menu._Entries_can_be_removed_from_this_group_by_selecting_them_then_using_the_context_menu.=Grup_ini_mempunyai_entri_berdasar_dari_pengisian_manual._Entri_dapat_dituliskan_dalam_grup_ini_dengan_cara_memilih_entri_kemudian_menggunakannya_melalui_seret_dan_tempatkan_atau_dari_konteks_menu._Entri_dapat_dihapus_dari_grup_dengan_memilih_dan_hapus_dari_konteks_menu. This_group_contains_entries_whose_%0_field_contains_the_keyword_%1=Grup_ini_memiliki_entri_dimana_bidang_%0_memiliki_katakunci_%1 This_group_contains_entries_whose_%0_field_contains_the_regular_expression_%1=Grup_ini_memiliki_entri_dimana_bidang_%0_mempunyai_ekspresi_reguler_%1 This_makes_JabRef_look_up_each_file_link_and_check_if_the_file_exists._If_not,_you_will_be_given_options
to_resolve_the_problem.=Ini_membuat_JabRef_mencari_disemua_tautan_berkas_dan_memeriksa_apakah_ada_berkas._Jika_tidak,_anda_diberi_pilihan_
untuk_mengatasi_masalah. diff --git a/src/main/resources/l10n/JabRef_it.properties b/src/main/resources/l10n/JabRef_it.properties index 0d89c9b7c7b..f384b363e83 100644 --- a/src/main/resources/l10n/JabRef_it.properties +++ b/src/main/resources/l10n/JabRef_it.properties @@ -777,7 +777,7 @@ This_entry_has_no_BibTeX_key._Generate_key_now?=Questa_voce_\u00e8_priva_di_una_ This_entry_is_incomplete=La_voce_\u00e8_incompleta This_entry_type_cannot_be_removed.=Questo_tipo_di_voce_non_pu\u00f2_essere_eliminato. This_external_link_is_of_the_type_'%0',_which_is_undefined._What_do_you_want_to_do?=Questo_collegamento_\u00e8_di_tipo_'%0',_ancora_indefinito._Cosa_vuoi_fare? -This_group_contains_entries_based_on_manual_assignment._Entries_can_be_assigned_to_this_group_by_selecting_them_then_using_either_drag_and_drop_or_the_context_menu._Entries_can_be_removed_from_this_group_by_selecting_them_then_using_the_context_menu._Every_entry_assigned_to_this_group_must_have_a_unique_key._The_key_may_be_changed_at_any_time_as_long_as_it_remains_unique.=Questo_gruppo_contiene_voci_assegnate_manualmente._Altre_voci_possono_essere_assegnate_a_questo_gruppo_selezionandole_e_utilizzando_il_menu_contestuale_oppure_trascinandole_nel_gruppo._Le_voci_possono_essere_rimosse_dal_gruppo_selezionandole_e_utilizzando_il_menu_contestuale._ciascuna_voce_assegnata_a_questo_gruppo_deve_avere_una_chiave_univoca._La_chiave_pu\u00f2_essere_modificata_in_qualsiasi_momento_a_condizione_che_rimanga_univoca. +This_group_contains_entries_based_on_manual_assignment._Entries_can_be_assigned_to_this_group_by_selecting_them_then_using_either_drag_and_drop_or_the_context_menu._Entries_can_be_removed_from_this_group_by_selecting_them_then_using_the_context_menu.=Questo_gruppo_contiene_voci_assegnate_manualmente._Altre_voci_possono_essere_assegnate_a_questo_gruppo_selezionandole_e_utilizzando_il_menu_contestuale_oppure_trascinandole_nel_gruppo._Le_voci_possono_essere_rimosse_dal_gruppo_selezionandole_e_utilizzando_il_menu_contestuale. This_group_contains_entries_whose_%0_field_contains_the_keyword_%1=Questo_gruppo_contiene_voci_in_cui_il_campo_%0__contiene_la_keyword_%1 This_group_contains_entries_whose_%0_field_contains_the_regular_expression_%1=Questo_gruppo_contiene_voci_in_cui_il_campo_%0__contiene_l'espressione_regolare_%1 This_makes_JabRef_look_up_each_file_link_and_check_if_the_file_exists._If_not,_you_will_be_given_options
to_resolve_the_problem.=Per_ciascuno_dei_file_collegamenti,_JabRef_verificher\u00e0_l'esistenza_del_file.
In_caso_negativo_proporr\u00e0_delle_opzioni_per_la_risoluzione_del_problema. diff --git a/src/main/resources/l10n/JabRef_ja.properties b/src/main/resources/l10n/JabRef_ja.properties index 9541a3b5fec..cc7667447d4 100644 --- a/src/main/resources/l10n/JabRef_ja.properties +++ b/src/main/resources/l10n/JabRef_ja.properties @@ -1397,7 +1397,8 @@ This_entry_type_cannot_be_removed.=この項目型は解消できません。 This_external_link_is_of_the_type_'%0',_which_is_undefined._What_do_you_want_to_do?=この外部リンクは「%0」型ですが、これは定義されていません。どうしますか? -This_group_contains_entries_based_on_manual_assignment._Entries_can_be_assigned_to_this_group_by_selecting_them_then_using_either_drag_and_drop_or_the_context_menu._Entries_can_be_removed_from_this_group_by_selecting_them_then_using_the_context_menu._Every_entry_assigned_to_this_group_must_have_a_unique_key._The_key_may_be_changed_at_any_time_as_long_as_it_remains_unique.=このグループは、手動割り当てによる項目を含んでいます。項目を選択して、ドラッグアンドドロップを行うかコンテクストメニューを使うかすれば、このグループに項目を割り当てることができます。項目を選択してコンテクストメニューを使えば、項目を削除することができます。このグループに割り当てた項目はすべて、他と重複しない鍵を持たなくてはなりません。鍵は一意である限り、いつでも変更することができます。 +This_group_contains_entries_based_on_manual_assignment._Entries_can_be_assigned_to_this_group_by_selecting_them_then_using_either_drag_and_drop_or_the_context_menu._Entries_can_be_removed_from_this_group_by_selecting_them_then_using_the_context_menu.= +#! このグループは、手動割り当てによる項目を含んでいます。項目を選択して、ドラッグアンドドロップを行うかコンテクストメニューを使うかすれば、このグループに項目を割り当てることができます。項目を選択してコンテクストメニューを使えば、項目を削除することができます。このグループに割り当てた項目はすべて、他と重複しない鍵を持たなくてはなりません。鍵は一意である限り、いつでも変更することができます。 diff --git a/src/main/resources/l10n/JabRef_nl.properties b/src/main/resources/l10n/JabRef_nl.properties index ece9e992eef..c76c173e4e6 100644 --- a/src/main/resources/l10n/JabRef_nl.properties +++ b/src/main/resources/l10n/JabRef_nl.properties @@ -1414,7 +1414,7 @@ This_entry_is_incomplete=Deze_entry_is_onvolledig This_entry_type_cannot_be_removed.=Dit_entry_type_kan_niet_verwijderd_worden. This_external_link_is_of_the_type_'%0',_which_is_undefined._What_do_you_want_to_do?= -This_group_contains_entries_based_on_manual_assignment._Entries_can_be_assigned_to_this_group_by_selecting_them_then_using_either_drag_and_drop_or_the_context_menu._Entries_can_be_removed_from_this_group_by_selecting_them_then_using_the_context_menu._Every_entry_assigned_to_this_group_must_have_a_unique_key._The_key_may_be_changed_at_any_time_as_long_as_it_remains_unique.=Deze_groep_bevat_entries_gebaseerd_op_manuele_toekenning._Entries_kunnen_aan_deze_groep_toegekend_worden_door_ze_te_selecteren_en_hierna_ofwel_"drag_and_drop"_of_het_contextmenu_te_gebruiken._Entries_kunnen_uit_deze_groep_verwijderd_worden_door_ze_te_selecteren_via_het_contextmenu._Elke_entry_toegekend_aan_deze_groep_moet_een_unieke_sleutel_hebben._De_sleutel_mag_op_elke_ogenblik_gewijzigd_worden_op_voorwaarde_dat_deze_uniek_blijft. +This_group_contains_entries_based_on_manual_assignment._Entries_can_be_assigned_to_this_group_by_selecting_them_then_using_either_drag_and_drop_or_the_context_menu._Entries_can_be_removed_from_this_group_by_selecting_them_then_using_the_context_menu.=Deze_groep_bevat_entries_gebaseerd_op_manuele_toekenning._Entries_kunnen_aan_deze_groep_toegekend_worden_door_ze_te_selecteren_en_hierna_ofwel_"drag_and_drop"_of_het_contextmenu_te_gebruiken._Entries_kunnen_uit_deze_groep_verwijderd_worden_door_ze_te_selecteren_via_het_contextmenu. diff --git a/src/main/resources/l10n/JabRef_no.properties b/src/main/resources/l10n/JabRef_no.properties index 45abab1323a..ad8bac31fae 100644 --- a/src/main/resources/l10n/JabRef_no.properties +++ b/src/main/resources/l10n/JabRef_no.properties @@ -1517,7 +1517,7 @@ This_entry_type_cannot_be_removed.=Denne_enhetstypen_kan_ikke_slettes. This_external_link_is_of_the_type_'%0',_which_is_undefined._What_do_you_want_to_do?=Denne_eksterne_linken_er_av_typen_'%0'_som_er_udefinert._Hva_vil_du_gj\u00f8re? -This_group_contains_entries_based_on_manual_assignment._Entries_can_be_assigned_to_this_group_by_selecting_them_then_using_either_drag_and_drop_or_the_context_menu._Entries_can_be_removed_from_this_group_by_selecting_them_then_using_the_context_menu._Every_entry_assigned_to_this_group_must_have_a_unique_key._The_key_may_be_changed_at_any_time_as_long_as_it_remains_unique.=Denne_gruppen_inneholder_enheter_basert_p\u00e5_manuell_tilordning._Enheter_kan_tilordnes_til_denne_gruppen_ved_\u00e5_velge_dem_og_deretter_trekke_dem_over_til_gruppen,_eller_ved_hjelp_av_h\u00f8yreklikkmenyen._Alle_enheter_tilordnet_til_denne_gruppen_m\u00e5_ha_en_unik_n\u00f8kkel._N\u00f8kkelen_kan_endres_til_enhver_tid_s\u00e5_lenge_den_forblir_unik. +This_group_contains_entries_based_on_manual_assignment._Entries_can_be_assigned_to_this_group_by_selecting_them_then_using_either_drag_and_drop_or_the_context_menu._Entries_can_be_removed_from_this_group_by_selecting_them_then_using_the_context_menu.=Denne_gruppen_inneholder_enheter_basert_p\u00e5_manuell_tilordning._Enheter_kan_tilordnes_til_denne_gruppen_ved_\u00e5_velge_dem_og_deretter_trekke_dem_over_til_gruppen,_eller_ved_hjelp_av_h\u00f8yreklikkmenyen. diff --git a/src/main/resources/l10n/JabRef_pt_BR.properties b/src/main/resources/l10n/JabRef_pt_BR.properties index 46d1712b322..c8d0985ef61 100644 --- a/src/main/resources/l10n/JabRef_pt_BR.properties +++ b/src/main/resources/l10n/JabRef_pt_BR.properties @@ -713,7 +713,7 @@ This_entry_has_no_BibTeX_key._Generate_key_now?=Esta_referência_não_possui_cha This_entry_is_incomplete=Esta_referência_está_incompleta This_entry_type_cannot_be_removed.=Este_tipo_de_referência_não_pode_ser_removida. This_external_link_is_of_the_type_'%0',_which_is_undefined._What_do_you_want_to_do?=Este_link_externo_é_do_tipo_'%0',_o_qual_não_está_definido._O_que_você_deseja_fazer? -This_group_contains_entries_based_on_manual_assignment._Entries_can_be_assigned_to_this_group_by_selecting_them_then_using_either_drag_and_drop_or_the_context_menu._Entries_can_be_removed_from_this_group_by_selecting_them_then_using_the_context_menu._Every_entry_assigned_to_this_group_must_have_a_unique_key._The_key_may_be_changed_at_any_time_as_long_as_it_remains_unique.=Este_grupo_contém_referências_baseadas_em_associações_manuais._Referências_pode_ser_associadas_para_este_grupo_selecionando-as_e_então_usando_arrastar_e_soltar_ou_o_menu_de_contexto._Referências_podem_ser_removidas_deste_grupo_selecionando-as_e_então_usando_o_menu_de_contexto._Cada_referência_associada_a_este_grupo_possui_um_identificador_único._A_chave_pode_ser_modificada_a_qualquer_momento,_contanto_que_permaneça_única. +This_group_contains_entries_based_on_manual_assignment._Entries_can_be_assigned_to_this_group_by_selecting_them_then_using_either_drag_and_drop_or_the_context_menu._Entries_can_be_removed_from_this_group_by_selecting_them_then_using_the_context_menu.=Este_grupo_contém_referências_baseadas_em_associações_manuais._Referências_pode_ser_associadas_para_este_grupo_selecionando-as_e_então_usando_arrastar_e_soltar_ou_o_menu_de_contexto._Referências_podem_ser_removidas_deste_grupo_selecionando-as_e_então_usando_o_menu_de_contexto. This_group_contains_entries_whose_%0_field_contains_the_keyword_%1=Este_grupo_contém_referências_cujo_campo_%0_contém_a_palavra-chave_%1 This_group_contains_entries_whose_%0_field_contains_the_regular_expression_%1=Este_grupo_contém_referências_cujo_campo_%0_contém_a_expressão_regular_%1 This_makes_JabRef_look_up_each_file_link_and_check_if_the_file_exists._If_not,_you_will_be_given_options
to_resolve_the_problem.=Isto_faz_com_que_o_JabRed_busque_cada_link_de arquivos_e_verifique_se_o_arquivo_existe._Caso_não_exista,_serão_exibidas_opções
_para_resolver_o_problema. diff --git a/src/main/resources/l10n/JabRef_ru.properties b/src/main/resources/l10n/JabRef_ru.properties index 768b4d3f8c1..063fc1be2b4 100644 --- a/src/main/resources/l10n/JabRef_ru.properties +++ b/src/main/resources/l10n/JabRef_ru.properties @@ -1369,7 +1369,7 @@ This_entry_type_cannot_be_removed.=Невозможно_удалить_этот_ This_external_link_is_of_the_type_'%0',_which_is_undefined._What_do_you_want_to_do?=Внешняя_ссылка_не_определенного_типа_'%0'._Выберите_дальнейшие_действия. -This_group_contains_entries_based_on_manual_assignment._Entries_can_be_assigned_to_this_group_by_selecting_them_then_using_either_drag_and_drop_or_the_context_menu._Entries_can_be_removed_from_this_group_by_selecting_them_then_using_the_context_menu._Every_entry_assigned_to_this_group_must_have_a_unique_key._The_key_may_be_changed_at_any_time_as_long_as_it_remains_unique.=Группа_содержит_записи,_на_основе_назначений_вручную._Чтобы_назначить_запись_этой_группе,_выберите_запись_и_перетащите_ее_в_группу_или_выберите_команду_контекстного_меню._Чтобы_удалить_запись_из_этой_группы,_выделите_запись_и_выберите_команду_контекстного_меню._Любая_запись,_назначенная_этой_группе_должна_иметь_уникальный_ключ._Возможно_изменение_ключа_до_тех_пор,_пока_он_остается_уникальным. +This_group_contains_entries_based_on_manual_assignment._Entries_can_be_assigned_to_this_group_by_selecting_them_then_using_either_drag_and_drop_or_the_context_menu._Entries_can_be_removed_from_this_group_by_selecting_them_then_using_the_context_menu.=Группа_содержит_записи,_на_основе_назначений_вручную._Чтобы_назначить_запись_этой_группе,_выберите_запись_и_перетащите_ее_в_группу_или_выберите_команду_контекстного_меню._Чтобы_удалить_запись_из_этой_группы,_выделите_запись_и_выберите_команду_контекстного_меню. diff --git a/src/main/resources/l10n/JabRef_sv.properties b/src/main/resources/l10n/JabRef_sv.properties index c582b7710b8..59ffe21b16e 100644 --- a/src/main/resources/l10n/JabRef_sv.properties +++ b/src/main/resources/l10n/JabRef_sv.properties @@ -1191,7 +1191,7 @@ This_external_link_is_of_the_type_'%0',_which_is_undefined._What_do_you_want_to_ This_feature_generates_a_new_database_based_on_which_entries_are_needed_in_an_existing_LaTeX_document.= This_feature_lets_new_files_be_opened_or_imported_into_an_already_running_instance_of_JabRef
instead_of_opening_a_new_instance._For_instance,_this_is_useful_when_you_open_a_file_in_JabRef
from_your_web_browser.
Note_that_this_will_prevent_you_from_running_more_than_one_instance_of_JabRef_at_a_time.= This_group_contains_all_entries._It_cannot_be_edited_or_removed.=Denna_grupp_innehåller_alla_poster._Den_kan_inte_ändras_eller_tas_bort. -This_group_contains_entries_based_on_manual_assignment._Entries_can_be_assigned_to_this_group_by_selecting_them_then_using_either_drag_and_drop_or_the_context_menu._Entries_can_be_removed_from_this_group_by_selecting_them_then_using_the_context_menu._Every_entry_assigned_to_this_group_must_have_a_unique_key._The_key_may_be_changed_at_any_time_as_long_as_it_remains_unique.= +This_group_contains_entries_based_on_manual_assignment._Entries_can_be_assigned_to_this_group_by_selecting_them_then_using_either_drag_and_drop_or_the_context_menu._Entries_can_be_removed_from_this_group_by_selecting_them_then_using_the_context_menu.= This_group_contains_entries_whose_%0_field_contains_the_keyword_%1=Denna_grupp_innehåller_poster_där_fältet_%0_innehåller_nyckelordet_%1 This_group_contains_entries_whose_%0_field_contains_the_regular_expression_%1= This_is_a_simple_copy_and_paste_dialog._First_load_or_paste_some_text_into_the_text_input_area.
After_that,_you_can_mark_text_and_assign_it_to_a_BibTeX_field.= diff --git a/src/main/resources/l10n/JabRef_tr.properties b/src/main/resources/l10n/JabRef_tr.properties index 56411fc1afb..5bee53bf3b7 100644 --- a/src/main/resources/l10n/JabRef_tr.properties +++ b/src/main/resources/l10n/JabRef_tr.properties @@ -713,7 +713,7 @@ This_entry_has_no_BibTeX_key._Generate_key_now?=Bu_girdinin_BibTeX_anahtarı_yok This_entry_is_incomplete=Girdi_eksik This_entry_type_cannot_be_removed.=Bu_girdi_türü_silinemiyor. This_external_link_is_of_the_type_'%0',_which_is_undefined._What_do_you_want_to_do?=Bu_harici_link,_tanımlanmamış_'%0'_türündendir._Ne_yapmak_istersiniz? -This_group_contains_entries_based_on_manual_assignment._Entries_can_be_assigned_to_this_group_by_selecting_them_then_using_either_drag_and_drop_or_the_context_menu._Entries_can_be_removed_from_this_group_by_selecting_them_then_using_the_context_menu._Every_entry_assigned_to_this_group_must_have_a_unique_key._The_key_may_be_changed_at_any_time_as_long_as_it_remains_unique.=Bu_grup,_elle_atanmış_girdiler_içeriyor._Bu_gruba_girdiler_seçilip_ya_sürükleyip_bırakarak_ya_da_fare_sağ_tıklama_menüsü_kullanılarak_eklenebilir._Bu_gruptan_girdiler_seçilip_fare_sağ_tıklama_menüsü_kullanılarak_silinebilir._Bu_gruba_dahil_edilmiş_her_girdinin_özgün_anahtarı_olmalıdır._Anahtar,_özgün_kalmak_şartıyla_her_zaman_değiştirilebilir. +This_group_contains_entries_based_on_manual_assignment._Entries_can_be_assigned_to_this_group_by_selecting_them_then_using_either_drag_and_drop_or_the_context_menu._Entries_can_be_removed_from_this_group_by_selecting_them_then_using_the_context_menu.=Bu_grup,_elle_atanmış_girdiler_içeriyor._Bu_gruba_girdiler_seçilip_ya_sürükleyip_bırakarak_ya_da_fare_sağ_tıklama_menüsü_kullanılarak_eklenebilir._Bu_gruptan_girdiler_seçilip_fare_sağ_tıklama_menüsü_kullanılarak_silinebilir. This_group_contains_entries_whose_%0_field_contains_the_keyword_%1=Bu_grup,_%0_alanı_%1_anahtar_sözcüğünü_içeren_girdileri_içerir This_group_contains_entries_whose_%0_field_contains_the_regular_expression_%1=Bu_grup,_%0_alanı_%1_düzenli_ifadesini_içeren_girdileri_içerir This_makes_JabRef_look_up_each_file_link_and_check_if_the_file_exists._If_not,_you_will_be_given_options
to_resolve_the_problem.=Bu,_JabRef'in_her_dosya_linki_bulup_dosyanın_var_olup_olmadığını_kontrol_etmesini_sağlar._Eğer_yoksa,_sorunu
çözmek_için_seçenekler_sunulacaktır. diff --git a/src/main/resources/l10n/JabRef_vi.properties b/src/main/resources/l10n/JabRef_vi.properties index 79bd975c618..a4d81e00fd7 100644 --- a/src/main/resources/l10n/JabRef_vi.properties +++ b/src/main/resources/l10n/JabRef_vi.properties @@ -1399,7 +1399,7 @@ This_entry_type_cannot_be_removed.=Không_thể_loại_bỏ_kiểu_mục_này. This_external_link_is_of_the_type_'%0',_which_is_undefined._What_do_you_want_to_do?=Liên_kết_ngoài_có_kiểu_'%0',_thuộc_loại_không_được_định_nghĩa._Bạn_muốn_làm_gì? -This_group_contains_entries_based_on_manual_assignment._Entries_can_be_assigned_to_this_group_by_selecting_them_then_using_either_drag_and_drop_or_the_context_menu._Entries_can_be_removed_from_this_group_by_selecting_them_then_using_the_context_menu._Every_entry_assigned_to_this_group_must_have_a_unique_key._The_key_may_be_changed_at_any_time_as_long_as_it_remains_unique.=Nhóm_này_chứa_các_mục_căn_cứ_trên_phép_gán_thủ_công._Các_mục_có_thể_được_gán_vào_nhóm_này_bằng_cách_chọn_chúng_rồi_dùng_cách_kéo_thả_hoặc_trình_đơn_ngữ_cảnh._Các_mục_có_thể_bị_loại_bỏ_khỏi_nhóm_này_bằng_cách_chọn_chúng_rồi_dùng_trình_đơn_ngữ_cảnh._Mỗi_mục_được_gán_vào_nhóm_này_phải_có_một_khóa_không_trùng._Có_thể_thay_đổi_khóa_này_bất_kỳ_lúc_nào_nếu_nó_vẫn_không_bị_trùng. +This_group_contains_entries_based_on_manual_assignment._Entries_can_be_assigned_to_this_group_by_selecting_them_then_using_either_drag_and_drop_or_the_context_menu._Entries_can_be_removed_from_this_group_by_selecting_them_then_using_the_context_menu.=Nhóm_này_chứa_các_mục_căn_cứ_trên_phép_gán_thủ_công._Các_mục_có_thể_được_gán_vào_nhóm_này_bằng_cách_chọn_chúng_rồi_dùng_cách_kéo_thả_hoặc_trình_đơn_ngữ_cảnh._Các_mục_có_thể_bị_loại_bỏ_khỏi_nhóm_này_bằng_cách_chọn_chúng_rồi_dùng_trình_đơn_ngữ_cảnh. diff --git a/src/main/resources/l10n/JabRef_zh.properties b/src/main/resources/l10n/JabRef_zh.properties index f68dd7f88a1..f136ee46838 100644 --- a/src/main/resources/l10n/JabRef_zh.properties +++ b/src/main/resources/l10n/JabRef_zh.properties @@ -731,7 +731,8 @@ This_entry_has_no_BibTeX_key._Generate_key_now?=此记录没有_BibTeX_键,现 This_entry_is_incomplete=该记录是不完整的 This_entry_type_cannot_be_removed.=该记录类型无法被移除。 This_external_link_is_of_the_type_'%0',_which_is_undefined._What_do_you_want_to_do?=此外部链接类型_'%0'_未定义,您想怎么办? -This_group_contains_entries_based_on_manual_assignment._Entries_can_be_assigned_to_this_group_by_selecting_them_then_using_either_drag_and_drop_or_the_context_menu._Entries_can_be_removed_from_this_group_by_selecting_them_then_using_the_context_menu._Every_entry_assigned_to_this_group_must_have_a_unique_key._The_key_may_be_changed_at_any_time_as_long_as_it_remains_unique.=此分组中的记录系用户手动方式分配。您可以使用拖放或者右键菜单将记录分配到此分组;选中记录后用右键菜单可以将该记录从此分组中移除;分配到此分组中的记录必须有一个唯一的键值,该键值可以随时被更改,但必须保证其唯一性。 +This_group_contains_entries_based_on_manual_assignment._Entries_can_be_assigned_to_this_group_by_selecting_them_then_using_either_drag_and_drop_or_the_context_menu._Entries_can_be_removed_from_this_group_by_selecting_them_then_using_the_context_menu.= +#! 此分组中的记录系用户手动方式分配。您可以使用拖放或者右键菜单将记录分配到此分组;选中记录后用右键菜单可以将该记录从此分组中移除;分配到此分组中的记录必须有一个唯一的键值,该键值可以随时被更改,但必须保证其唯一性。 This_group_contains_entries_whose_%0_field_contains_the_keyword_%1=此分组中记录的_%0_域包含关键词_%1_ This_group_contains_entries_whose_%0_field_contains_the_regular_expression_%1=此分组中记录的_%0_域包含正则表达式_%1_ This_makes_JabRef_look_up_each_file_link_and_check_if_the_file_exists._If_not,_you_will_be_given_options
to_resolve_the_problem.=该选项使_JabRef_遍历所有文件链接,检查链接文件是否存在。如果不存在,您将会得到一个选项来处理这个问题。