Index: /trunk/data/defaultpresets.xml
===================================================================
--- /trunk/data/defaultpresets.xml	(revision 13760)
+++ /trunk/data/defaultpresets.xml	(revision 13761)
@@ -3643,5 +3643,5 @@
             <key key="vending" value="public_transport_tickets" />
             <reference ref="name_operator" />
-            <text key="ref" text="Reference Number" />
+            <text key="ref" text="Reference number" />
             <preset_link preset_name="Payment Methods" />
         </item> <!-- Ticket Machine -->
@@ -5538,5 +5538,5 @@
             <text key="operator" text="Operator" />
             <text key="defibrillator:location" text="Location description" />
-            <text key="phone" text="Phone Number" />
+            <text key="phone" text="Phone number" />
             <combo key="access" text="Access" values="yes,private,customers,permissive,no" />
             <check key="indoor" text="Located inside a building?" />
@@ -11278,5 +11278,5 @@
             <text key="email" text="Email Address" match="key" />
             <space />
-            <text key="phone" text="Phone Number" match="key" />
+            <text key="phone" text="Phone number" match="key" />
             <text key="fax" text="Fax Number" match="key" />
             <space />
@@ -11298,5 +11298,5 @@
             <text key="contact:email" text="Email Address" match="key" />
             <space />
-            <text key="contact:phone" text="Phone Number" match="key" />
+            <text key="contact:phone" text="Phone number" match="key" />
             <text key="contact:fax" text="Fax Number" match="key" />
             <space />
Index: /trunk/scripts/I18nSimilarStrings.java
===================================================================
--- /trunk/scripts/I18nSimilarStrings.java	(revision 13761)
+++ /trunk/scripts/I18nSimilarStrings.java	(revision 13761)
@@ -0,0 +1,40 @@
+import java.util.ArrayList;
+import java.util.Collections;
+import java.util.List;
+
+import org.openstreetmap.josm.data.validation.tests.SimilarNamedWays;
+import org.openstreetmap.josm.tools.I18n;
+
+// License: GPL. For details, see LICENSE file.
+
+/**
+ * Finds similar strings in lang files to find potential duplicates in order to reduce translation workload.
+ */
+public final class I18nSimilarStrings {
+
+    /**
+     * Main.
+     * @param args not used
+     */
+    public static void main(String[] args) {
+        I18n.init();
+        List<String> strings = new ArrayList<>();
+        strings.addAll(I18n.getSingularTranslations().keySet());
+        strings.addAll(I18n.getPluralTranslations().keySet());
+        System.out.println("Loaded " + strings.size() + " core strings");
+        strings.removeIf(s -> s.length() <= 5);
+        System.out.println("Kept " + strings.size() + " core strings longer than 5 characters");
+        Collections.sort(strings);
+        for (int i = 0; i < strings.size(); i++) {
+            for (int j = i+1; j < strings.size(); j++) {
+                String a = strings.get(i);
+                String b = strings.get(j);
+                int d = SimilarNamedWays.getLevenshteinDistance(a, b);
+                if (d <= 2) {
+                    System.err.println(": " + a + " <--> " + b);
+                }
+            }
+        }
+        System.out.println("Done!");
+    }
+}
Index: /trunk/src/org/openstreetmap/josm/actions/CloseChangesetAction.java
===================================================================
--- /trunk/src/org/openstreetmap/josm/actions/CloseChangesetAction.java	(revision 13760)
+++ /trunk/src/org/openstreetmap/josm/actions/CloseChangesetAction.java	(revision 13761)
@@ -45,7 +45,7 @@
         super(tr("Close open changesets"),
             "closechangeset",
-            tr("Closes open changesets"),
+            tr("Close open changesets"),
             Shortcut.registerShortcut("system:closechangeset",
-                tr("File: {0}", tr("Closes open changesets")),
+                tr("File: {0}", tr("Close open changesets")),
                 KeyEvent.VK_Q, Shortcut.ALT_CTRL),
             true
Index: /trunk/src/org/openstreetmap/josm/actions/DownloadPrimitiveAction.java
===================================================================
--- /trunk/src/org/openstreetmap/josm/actions/DownloadPrimitiveAction.java	(revision 13760)
+++ /trunk/src/org/openstreetmap/josm/actions/DownloadPrimitiveAction.java	(revision 13761)
@@ -33,5 +33,5 @@
      */
     public DownloadPrimitiveAction() {
-        super(tr("Download object..."), "downloadprimitive", tr("Download OSM object by ID."),
+        super(tr("Download object..."), "downloadprimitive", tr("Download OSM object by ID"),
                 SHORTCUT, true);
         putValue("help", ht("/Action/DownloadObject"));
Index: /trunk/src/org/openstreetmap/josm/actions/ImageryAdjustAction.java
===================================================================
--- /trunk/src/org/openstreetmap/josm/actions/ImageryAdjustAction.java	(revision 13760)
+++ /trunk/src/org/openstreetmap/josm/actions/ImageryAdjustAction.java	(revision 13761)
@@ -254,5 +254,5 @@
                     "If you want to save the offset as bookmark, enter the bookmark name below",
                     Main.getProjection().toString())), GBC.eop());
-            pnl.add(new JLabel(tr("Offset: ")), GBC.std());
+            pnl.add(new JLabel(tr("Offset:")), GBC.std());
             pnl.add(tOffset, GBC.eol().fill(GBC.HORIZONTAL).insets(0, 0, 0, 5));
             pnl.add(new JLabel(tr("Bookmark name: ")), GBC.std());
Index: /trunk/src/org/openstreetmap/josm/actions/JumpToAction.java
===================================================================
--- /trunk/src/org/openstreetmap/josm/actions/JumpToAction.java	(revision 13760)
+++ /trunk/src/org/openstreetmap/josm/actions/JumpToAction.java	(revision 13761)
@@ -49,6 +49,6 @@
      */
     public JumpToAction() {
-        super(tr("Jump To Position"), (ImageProvider) null, tr("Opens a dialog that allows to jump to a specific location"),
-                Shortcut.registerShortcut("tools:jumpto", tr("Tool: {0}", tr("Jump To Position")),
+        super(tr("Jump to Position"), (ImageProvider) null, tr("Opens a dialog that allows to jump to a specific location"),
+                Shortcut.registerShortcut("tools:jumpto", tr("Tool: {0}", tr("Jump to Position")),
                         KeyEvent.VK_J, Shortcut.CTRL), true, "action/jumpto", true);
         putValue("help", ht("/Action/JumpToPosition"));
Index: /trunk/src/org/openstreetmap/josm/actions/ReverseWayAction.java
===================================================================
--- /trunk/src/org/openstreetmap/josm/actions/ReverseWayAction.java	(revision 13760)
+++ /trunk/src/org/openstreetmap/josm/actions/ReverseWayAction.java	(revision 13761)
@@ -138,5 +138,5 @@
             c.addAll(revResult.getCommands());
         }
-        MainApplication.undoRedo.add(new SequenceCommand(tr("Reverse ways"), c));
+        MainApplication.undoRedo.add(new SequenceCommand(tr("Reverse Ways"), c));
     }
 
Index: /trunk/src/org/openstreetmap/josm/actions/SessionSaveAsAction.java
===================================================================
--- /trunk/src/org/openstreetmap/josm/actions/SessionSaveAsAction.java	(revision 13760)
+++ /trunk/src/org/openstreetmap/josm/actions/SessionSaveAsAction.java	(revision 13761)
@@ -118,7 +118,7 @@
 
         if (zipRequired) {
-            fc = createAndOpenFileChooser(false, false, tr("Save session"), joz, JFileChooser.FILES_ONLY, "lastDirectory");
+            fc = createAndOpenFileChooser(false, false, tr("Save Session"), joz, JFileChooser.FILES_ONLY, "lastDirectory");
         } else {
-            fc = createAndOpenFileChooser(false, false, tr("Save session"), Arrays.asList(jos, joz), jos,
+            fc = createAndOpenFileChooser(false, false, tr("Save Session"), Arrays.asList(jos, joz), jos,
                     JFileChooser.FILES_ONLY, "lastDirectory");
         }
Index: /trunk/src/org/openstreetmap/josm/actions/UnGlueAction.java
===================================================================
--- /trunk/src/org/openstreetmap/josm/actions/UnGlueAction.java	(revision 13760)
+++ /trunk/src/org/openstreetmap/josm/actions/UnGlueAction.java	(revision 13761)
@@ -208,5 +208,5 @@
 
         private PropertiesMembershipDialog(boolean preselectNew, boolean queryTags, boolean queryMemberships) {
-            super(Main.parent, tr("Tags / Memberships"), tr("Unglue"), tr("Cancel"));
+            super(Main.parent, tr("Tags/Memberships"), tr("Unglue"), tr("Cancel"));
             setButtonIcons("unglueways", "cancel");
 
Index: /trunk/src/org/openstreetmap/josm/actions/downloadtasks/DownloadNotesTask.java
===================================================================
--- /trunk/src/org/openstreetmap/josm/actions/downloadtasks/DownloadNotesTask.java	(revision 13760)
+++ /trunk/src/org/openstreetmap/josm/actions/downloadtasks/DownloadNotesTask.java	(revision 13761)
@@ -119,5 +119,5 @@
 
         DownloadTask(OsmServerReader reader, ProgressMonitor progressMonitor) {
-            super(tr("Downloading Notes"), progressMonitor, false);
+            super(tr("Downloading notes"), progressMonitor, false);
             this.reader = reader;
         }
Index: /trunk/src/org/openstreetmap/josm/actions/mapmode/AddNoteAction.java
===================================================================
--- /trunk/src/org/openstreetmap/josm/actions/mapmode/AddNoteAction.java	(revision 13760)
+++ /trunk/src/org/openstreetmap/josm/actions/mapmode/AddNoteAction.java	(revision 13761)
@@ -72,5 +72,5 @@
         map.selectMapMode(map.mapModeSelect);
 
-        NoteInputDialog dialog = new NoteInputDialog(Main.parent, tr("Create new note"), tr("Create note"));
+        NoteInputDialog dialog = new NoteInputDialog(Main.parent, tr("Create a new note"), tr("Create note"));
         dialog.showNoteDialog(tr("Enter a detailed comment to create a note"), ImageProvider.get("dialogs/notes", "note_new"));
 
Index: /trunk/src/org/openstreetmap/josm/actions/search/SearchAction.java
===================================================================
--- /trunk/src/org/openstreetmap/josm/actions/search/SearchAction.java	(revision 13760)
+++ /trunk/src/org/openstreetmap/josm/actions/search/SearchAction.java	(revision 13761)
@@ -171,5 +171,5 @@
      */
     public SearchAction() {
-        super(tr("Search..."), "dialogs/search", tr("Search for objects."),
+        super(tr("Search..."), "dialogs/search", tr("Search for objects"),
                 Shortcut.registerShortcut("system:find", tr("Search..."), KeyEvent.VK_F, Shortcut.CTRL), true);
         putValue("help", ht("/Action/Search"));
Index: /trunk/src/org/openstreetmap/josm/actions/upload/ApiPreconditionCheckerHook.java
===================================================================
--- /trunk/src/org/openstreetmap/josm/actions/upload/ApiPreconditionCheckerHook.java	(revision 13760)
+++ /trunk/src/org/openstreetmap/josm/actions/upload/ApiPreconditionCheckerHook.java	(revision 13761)
@@ -78,5 +78,5 @@
                                     key, Long.toString(osmPrimitive.getId()), Tagged.MAX_TAG_LENGTH, value.length()
                             ),
-                            tr("Precondition Violation"),
+                            tr("Precondition violation"),
                             JOptionPane.ERROR_MESSAGE
                     );
Index: /trunk/src/org/openstreetmap/josm/data/projection/CustomProjection.java
===================================================================
--- /trunk/src/org/openstreetmap/josm/data/projection/CustomProjection.java	(revision 13760)
+++ /trunk/src/org/openstreetmap/josm/data/projection/CustomProjection.java	(revision 13761)
@@ -632,5 +632,5 @@
     public static double parseDouble(Map<String, String> parameters, String parameterName) throws ProjectionConfigurationException {
         if (!parameters.containsKey(parameterName))
-            throw new ProjectionConfigurationException(tr("Unknown parameter ''{0}''", parameterName));
+            throw new ProjectionConfigurationException(tr("Unknown parameter: ''{0}''", parameterName));
         return parseDouble(Optional.ofNullable(parameters.get(parameterName)).orElseThrow(
                 () -> new ProjectionConfigurationException(tr("Expected number argument for parameter ''{0}''", parameterName))),
Index: /trunk/src/org/openstreetmap/josm/gui/ExceptionDialogUtil.java
===================================================================
--- /trunk/src/org/openstreetmap/josm/gui/ExceptionDialogUtil.java	(revision 13760)
+++ /trunk/src/org/openstreetmap/josm/gui/ExceptionDialogUtil.java	(revision 13761)
@@ -281,5 +281,5 @@
                 Main.parent,
                 msg,
-                tr("Authentication Failed"),
+                tr("Authentication failed"),
                 JOptionPane.ERROR_MESSAGE,
                 ht("/ErrorMessages#AuthenticationFailed")
Index: /trunk/src/org/openstreetmap/josm/gui/MapMover.java
===================================================================
--- /trunk/src/org/openstreetmap/josm/gui/MapMover.java	(revision 13760)
+++ /trunk/src/org/openstreetmap/josm/gui/MapMover.java	(revision 13761)
@@ -19,10 +19,10 @@
 import org.openstreetmap.josm.Main;
 import org.openstreetmap.josm.actions.mapmode.SelectAction;
-import org.openstreetmap.josm.spi.preferences.PreferenceChangeEvent;
-import org.openstreetmap.josm.spi.preferences.PreferenceChangedListener;
 import org.openstreetmap.josm.data.coor.EastNorth;
 import org.openstreetmap.josm.data.preferences.BooleanProperty;
 import org.openstreetmap.josm.gui.MapViewState.MapViewPoint;
 import org.openstreetmap.josm.spi.preferences.Config;
+import org.openstreetmap.josm.spi.preferences.PreferenceChangeEvent;
+import org.openstreetmap.josm.spi.preferences.PreferenceChangedListener;
 import org.openstreetmap.josm.tools.Destroyable;
 import org.openstreetmap.josm.tools.Pair;
@@ -146,8 +146,8 @@
         if (!Main.isPlatformOsx()) {
             registerActionShortcut(new ZoomerAction(",", "MapMover.Zoomer.in"),
-                    Shortcut.registerShortcut("view:zoominalternate", tr("Map: {0}", tr("Zoom in")), KeyEvent.VK_COMMA, Shortcut.CTRL));
+                    Shortcut.registerShortcut("view:zoominalternate", tr("Map: {0}", tr("Zoom In")), KeyEvent.VK_COMMA, Shortcut.CTRL));
 
             registerActionShortcut(new ZoomerAction(".", "MapMover.Zoomer.out"),
-                    Shortcut.registerShortcut("view:zoomoutalternate", tr("Map: {0}", tr("Zoom out")), KeyEvent.VK_PERIOD, Shortcut.CTRL));
+                    Shortcut.registerShortcut("view:zoomoutalternate", tr("Map: {0}", tr("Zoom Out")), KeyEvent.VK_PERIOD, Shortcut.CTRL));
         }
     }
Index: /trunk/src/org/openstreetmap/josm/gui/bugreport/BugReportDialog.java
===================================================================
--- /trunk/src/org/openstreetmap/josm/gui/bugreport/BugReportDialog.java	(revision 13760)
+++ /trunk/src/org/openstreetmap/josm/gui/bugreport/BugReportDialog.java	(revision 13761)
@@ -175,5 +175,5 @@
         panel.add(settings);
 
-        JButton sendBugReportButton = new JButton(tr("Report Bug"), ImageProvider.getIfAvailable("bug"));
+        JButton sendBugReportButton = new JButton(tr("Report bug"), ImageProvider.getIfAvailable("bug"));
         sendBugReportButton.addActionListener(e -> sendBug());
         panel.add(sendBugReportButton, GBC.eol().insets(0, 0, 0, 0).anchor(GBC.SOUTHEAST));
Index: /trunk/src/org/openstreetmap/josm/gui/conflict/tags/MultiValueResolutionDecision.java
===================================================================
--- /trunk/src/org/openstreetmap/josm/gui/conflict/tags/MultiValueResolutionDecision.java	(revision 13760)
+++ /trunk/src/org/openstreetmap/josm/gui/conflict/tags/MultiValueResolutionDecision.java	(revision 13761)
@@ -143,5 +143,5 @@
     public String getChosenValue() {
         switch(type) {
-        case UNDECIDED: throw new IllegalStateException(tr("Not decided yet."));
+        case UNDECIDED: throw new IllegalStateException(tr("Not decided yet"));
         case KEEP_ONE: return value;
         case SUM_ALL_NUMERIC: return tags.getSummedValues(getKey());
@@ -238,5 +238,5 @@
         if (primitive == null) return;
         if (!isDecided())
-            throw new IllegalStateException(tr("Not decided yet."));
+            throw new IllegalStateException(tr("Not decided yet"));
         String key = tags.getKeys().iterator().next();
         if (type.equals(MultiValueDecisionType.KEEP_NONE)) {
@@ -274,5 +274,5 @@
         CheckParameterUtil.ensureParameterNotNull(primitive, "primitive");
         if (!isDecided())
-            throw new IllegalStateException(tr("Not decided yet."));
+            throw new IllegalStateException(tr("Not decided yet"));
         String key = tags.getKeys().iterator().next();
         return new ChangePropertyCommand(primitive, key, getChosenValue());
@@ -290,5 +290,5 @@
         CheckParameterUtil.ensureParameterNotNull(primitives, "primitives");
         if (!isDecided())
-            throw new IllegalStateException(tr("Not decided yet."));
+            throw new IllegalStateException(tr("Not decided yet"));
         String key = tags.getKeys().iterator().next();
         return new ChangePropertyCommand(primitives, key, getChosenValue());
Index: /trunk/src/org/openstreetmap/josm/gui/dialogs/ChangesetDialog.java
===================================================================
--- /trunk/src/org/openstreetmap/josm/gui/dialogs/ChangesetDialog.java	(revision 13760)
+++ /trunk/src/org/openstreetmap/josm/gui/dialogs/ChangesetDialog.java	(revision 13761)
@@ -382,5 +382,5 @@
         CloseOpenChangesetsAction() {
             putValue(NAME, tr("Close open changesets"));
-            putValue(SHORT_DESCRIPTION, tr("Closes the selected open changesets"));
+            putValue(SHORT_DESCRIPTION, tr("Close the selected open changesets"));
             new ImageProvider("closechangeset").getResource().attachImageIcon(this, true);
             updateEnabledState();
Index: /trunk/src/org/openstreetmap/josm/gui/dialogs/ConflictDialog.java
===================================================================
--- /trunk/src/org/openstreetmap/josm/gui/dialogs/ConflictDialog.java	(revision 13760)
+++ /trunk/src/org/openstreetmap/josm/gui/dialogs/ConflictDialog.java	(revision 13761)
@@ -57,6 +57,6 @@
 import org.openstreetmap.josm.gui.MainApplication;
 import org.openstreetmap.josm.gui.NavigatableComponent;
+import org.openstreetmap.josm.gui.PopupMenuHandler;
 import org.openstreetmap.josm.gui.PrimitiveRenderer;
-import org.openstreetmap.josm.gui.PopupMenuHandler;
 import org.openstreetmap.josm.gui.SideButton;
 import org.openstreetmap.josm.gui.conflict.pair.ConflictResolver;
@@ -99,5 +99,5 @@
      */
     public ConflictDialog() {
-        super(tr("Conflict"), "conflict", tr("Resolve conflicts."),
+        super(tr("Conflict"), "conflict", tr("Resolve conflicts"),
                 Shortcut.registerShortcut("subwindow:conflict", tr("Toggle: {0}", tr("Conflict")),
                 KeyEvent.VK_C, Shortcut.ALT_SHIFT), 100);
Index: /trunk/src/org/openstreetmap/josm/gui/dialogs/InspectPrimitiveDataText.java
===================================================================
--- /trunk/src/org/openstreetmap/josm/gui/dialogs/InspectPrimitiveDataText.java	(revision 13760)
+++ /trunk/src/org/openstreetmap/josm/gui/dialogs/InspectPrimitiveDataText.java	(revision 13761)
@@ -147,5 +147,5 @@
         add(tr("Edited by: "), o.getUser() == null ? tr("<new object>")
                 : getNameAndId(o.getUser().getName(), o.getUser().getId()));
-        add(tr("Version: "), Integer.toString(o.getVersion()));
+        add(tr("Version:"), " ", Integer.toString(o.getVersion()));
         add(tr("In changeset: "), Integer.toString(o.getChangesetId()));
     }
@@ -212,5 +212,5 @@
     void addCoordinates(Node n) {
         if (n.isLatLonKnown()) {
-            add(tr("Coordinates: "),
+            add(tr("Coordinates:"), " ",
                     Double.toString(n.lat()), ", ",
                     Double.toString(n.lon()));
Index: /trunk/src/org/openstreetmap/josm/gui/dialogs/ValidatorDialog.java
===================================================================
--- /trunk/src/org/openstreetmap/josm/gui/dialogs/ValidatorDialog.java	(revision 13760)
+++ /trunk/src/org/openstreetmap/josm/gui/dialogs/ValidatorDialog.java	(revision 13761)
@@ -99,5 +99,5 @@
     public ValidatorDialog() {
         super(tr("Validation Results"), "validator", tr("Open the validation window."),
-                Shortcut.registerShortcut("subwindow:validator", tr("Toggle: {0}", tr("Validation results")),
+                Shortcut.registerShortcut("subwindow:validator", tr("Toggle: {0}", tr("Validation Results")),
                         KeyEvent.VK_V, Shortcut.ALT_SHIFT), 150, false, ValidatorPreference.class);
 
Index: /trunk/src/org/openstreetmap/josm/gui/dialogs/properties/PropertiesDialog.java
===================================================================
--- /trunk/src/org/openstreetmap/josm/gui/dialogs/properties/PropertiesDialog.java	(revision 13760)
+++ /trunk/src/org/openstreetmap/josm/gui/dialogs/properties/PropertiesDialog.java	(revision 13761)
@@ -676,5 +676,5 @@
             }
         } else {
-            setTitle(tr("Tags / Memberships"));
+            setTitle(tr("Tags/Memberships"));
         }
     }
Index: /trunk/src/org/openstreetmap/josm/gui/dialogs/relation/ChildRelationBrowser.java
===================================================================
--- /trunk/src/org/openstreetmap/josm/gui/dialogs/relation/ChildRelationBrowser.java	(revision 13760)
+++ /trunk/src/org/openstreetmap/josm/gui/dialogs/relation/ChildRelationBrowser.java	(revision 13761)
@@ -197,5 +197,5 @@
     class EditAction extends AbstractAction implements TreeSelectionListener {
         EditAction() {
-            putValue(SHORT_DESCRIPTION, tr("Edit the relation the currently selected relation member refers to."));
+            putValue(SHORT_DESCRIPTION, tr("Edit the relation the currently selected relation member refers to"));
             new ImageProvider("dialogs", "edit").getResource().attachImageIcon(this, true);
             putValue(NAME, tr("Edit"));
Index: /trunk/src/org/openstreetmap/josm/gui/dialogs/relation/GenericRelationEditor.java
===================================================================
--- /trunk/src/org/openstreetmap/josm/gui/dialogs/relation/GenericRelationEditor.java	(revision 13760)
+++ /trunk/src/org/openstreetmap/josm/gui/dialogs/relation/GenericRelationEditor.java	(revision 13761)
@@ -800,5 +800,5 @@
     protected static JMenuItem addToWindowMenu(IRelationEditor re, String layerName) {
         Relation r = re.getRelation();
-        String name = r == null ? tr("New Relation") : r.getLocalName();
+        String name = r == null ? tr("New relation") : r.getLocalName();
         JosmAction focusAction = new JosmAction(
                 tr("Relation Editor: {0}", name == null && r != null ? r.getId() : name),
Index: /trunk/src/org/openstreetmap/josm/gui/dialogs/relation/actions/DownloadIncompleteMembersAction.java
===================================================================
--- /trunk/src/org/openstreetmap/josm/gui/dialogs/relation/actions/DownloadIncompleteMembersAction.java	(revision 13760)
+++ /trunk/src/org/openstreetmap/josm/gui/dialogs/relation/actions/DownloadIncompleteMembersAction.java	(revision 13761)
@@ -40,5 +40,5 @@
         putValue(SHORT_DESCRIPTION, Main.platform.makeTooltip(tr("Download all incomplete members"), sc));
         new ImageProvider("dialogs/relation", "downloadincomplete").getResource().attachImageIcon(this, true);
-        putValue(NAME, tr("Download Members"));
+        putValue(NAME, tr("Download members"));
         updateEnabledState();
     }
Index: /trunk/src/org/openstreetmap/josm/gui/dialogs/relation/actions/DownloadSelectedIncompleteMembersAction.java
===================================================================
--- /trunk/src/org/openstreetmap/josm/gui/dialogs/relation/actions/DownloadSelectedIncompleteMembersAction.java	(revision 13760)
+++ /trunk/src/org/openstreetmap/josm/gui/dialogs/relation/actions/DownloadSelectedIncompleteMembersAction.java	(revision 13761)
@@ -34,5 +34,5 @@
         putValue(SHORT_DESCRIPTION, tr("Download selected incomplete members"));
         new ImageProvider("dialogs/relation", "downloadincompleteselected").getResource().attachImageIcon(this, true);
-        putValue(NAME, tr("Download Members"));
+        putValue(NAME, tr("Download members"));
         updateEnabledState();
     }
Index: /trunk/src/org/openstreetmap/josm/gui/download/OverpassQueryWizardDialog.java
===================================================================
--- /trunk/src/org/openstreetmap/josm/gui/download/OverpassQueryWizardDialog.java	(revision 13760)
+++ /trunk/src/org/openstreetmap/josm/gui/download/OverpassQueryWizardDialog.java	(revision 13761)
@@ -81,5 +81,5 @@
         JPanel panel = new JPanel(new GridBagLayout());
 
-        JLabel searchLabel = new JLabel(tr("Search :"));
+        JLabel searchLabel = new JLabel(tr("Search:"));
         JTextComponent descPane = buildDescriptionSection();
         JScrollPane scroll = GuiHelper.embedInVerticalScrollPane(descPane);
Index: /trunk/src/org/openstreetmap/josm/gui/download/PlaceSelection.java
===================================================================
--- /trunk/src/org/openstreetmap/josm/gui/download/PlaceSelection.java	(revision 13760)
+++ /trunk/src/org/openstreetmap/josm/gui/download/PlaceSelection.java	(revision 13761)
@@ -179,5 +179,5 @@
 
         SearchAction() {
-            putValue(NAME, tr("Search ..."));
+            putValue(NAME, tr("Search..."));
             new ImageProvider("dialogs", "search").getResource().attachImageIcon(this, true);
             putValue(SHORT_DESCRIPTION, tr("Click to start searching for places"));
Index: /trunk/src/org/openstreetmap/josm/gui/io/ChangesetCellRenderer.java
===================================================================
--- /trunk/src/org/openstreetmap/josm/gui/io/ChangesetCellRenderer.java	(revision 13760)
+++ /trunk/src/org/openstreetmap/josm/gui/io/ChangesetCellRenderer.java	(revision 13761)
@@ -75,5 +75,5 @@
             setToolTipText(buildToolTipText(cs));
         } else {
-            setText(tr("No open changeset"));
+            setText(tr("No open changesets"));
         }
         return this;
Index: /trunk/src/org/openstreetmap/josm/gui/oauth/FullyAutomaticAuthorizationUI.java
===================================================================
--- /trunk/src/org/openstreetmap/josm/gui/oauth/FullyAutomaticAuthorizationUI.java	(revision 13760)
+++ /trunk/src/org/openstreetmap/josm/gui/oauth/FullyAutomaticAuthorizationUI.java	(revision 13761)
@@ -131,5 +131,5 @@
         gc.gridx = 0;
         gc.weightx = 0.0;
-        pnl.add(new JLabel(tr("Password: ")), gc);
+        pnl.add(new JLabel(tr("Password:")), gc);
 
         gc.gridx = 1;
Index: /trunk/src/org/openstreetmap/josm/gui/oauth/FullyAutomaticPropertiesPanel.java
===================================================================
--- /trunk/src/org/openstreetmap/josm/gui/oauth/FullyAutomaticPropertiesPanel.java	(revision 13760)
+++ /trunk/src/org/openstreetmap/josm/gui/oauth/FullyAutomaticPropertiesPanel.java	(revision 13761)
@@ -20,5 +20,5 @@
  * Panel to enter username and password for the "fully automatic" authorization
  * procedure.
- * 
+ *
  * @see AuthorizationProcedure#FULLY_AUTOMATIC
  */
@@ -69,5 +69,5 @@
         gc.gridx = 0;
         gc.weightx = 0.0;
-        pnl.add(new JLabel(tr("Password: ")), gc);
+        pnl.add(new JLabel(tr("Password:")), gc);
 
         gc.gridx = 1;
Index: /trunk/src/org/openstreetmap/josm/gui/preferences/PreferenceDialog.java
===================================================================
--- /trunk/src/org/openstreetmap/josm/gui/preferences/PreferenceDialog.java	(revision 13760)
+++ /trunk/src/org/openstreetmap/josm/gui/preferences/PreferenceDialog.java	(revision 13761)
@@ -61,5 +61,5 @@
         JPanel pnl = new JPanel(new GridBagLayout());
 
-        JCheckBox expert = new JCheckBox(tr("Expert mode"));
+        JCheckBox expert = new JCheckBox(tr("Expert Mode"));
         expert.setSelected(ExpertToggleAction.isExpert());
         expert.addActionListener(e -> ExpertToggleAction.getInstance().actionPerformed(null));
Index: /trunk/src/org/openstreetmap/josm/gui/preferences/advanced/AdvancedPreference.java
===================================================================
--- /trunk/src/org/openstreetmap/josm/gui/preferences/advanced/AdvancedPreference.java	(revision 13760)
+++ /trunk/src/org/openstreetmap/josm/gui/preferences/advanced/AdvancedPreference.java	(revision 13761)
@@ -105,5 +105,5 @@
 
         txtFilter = new JosmTextField();
-        JLabel lbFilter = new JLabel(tr("Search: "));
+        JLabel lbFilter = new JLabel(tr("Search:"));
         lbFilter.setLabelFor(txtFilter);
         p.add(lbFilter);
Index: /trunk/src/org/openstreetmap/josm/gui/preferences/display/ColorPreference.java
===================================================================
--- /trunk/src/org/openstreetmap/josm/gui/preferences/display/ColorPreference.java	(revision 13760)
+++ /trunk/src/org/openstreetmap/josm/gui/preferences/display/ColorPreference.java	(revision 13761)
@@ -290,5 +290,5 @@
             }
         });
-        defaultSet = new JButton(tr("Set to default"));
+        defaultSet = new JButton(tr("Reset to default"));
         defaultSet.addActionListener(e -> {
             int sel = colors.getSelectedRow();
Index: /trunk/src/org/openstreetmap/josm/gui/preferences/display/GPXSettingsPanel.java
===================================================================
--- /trunk/src/org/openstreetmap/josm/gui/preferences/display/GPXSettingsPanel.java	(revision 13760)
+++ /trunk/src/org/openstreetmap/josm/gui/preferences/display/GPXSettingsPanel.java	(revision 13761)
@@ -217,5 +217,5 @@
 
         // hdopCircleGpsPoints
-        hdopCircleGpsPoints.setToolTipText(tr("Draw a circle from HDOP value."));
+        hdopCircleGpsPoints.setToolTipText(tr("Draw a circle from HDOP value"));
         add(hdopCircleGpsPoints, GBC.eop().insets(20, 0, 0, 0));
         ExpertToggleAction.addVisibilitySwitcher(hdopCircleGpsPoints);
Index: /trunk/src/org/openstreetmap/josm/gui/preferences/imagery/ImageryPreference.java
===================================================================
--- /trunk/src/org/openstreetmap/josm/gui/preferences/imagery/ImageryPreference.java	(revision 13760)
+++ /trunk/src/org/openstreetmap/josm/gui/preferences/imagery/ImageryPreference.java	(revision 13761)
@@ -99,5 +99,5 @@
 
     private ImageryPreference() {
-        super(/* ICON(preferences/) */ "imagery", tr("Imagery Preferences"), tr("Modify list of imagery layers displayed in the Imagery menu"),
+        super(/* ICON(preferences/) */ "imagery", tr("Imagery preferences"), tr("Modify list of imagery layers displayed in the Imagery menu"),
                 false, new JTabbedPane());
     }
Index: /trunk/src/org/openstreetmap/josm/gui/preferences/map/TaggingPresetPreference.java
===================================================================
--- /trunk/src/org/openstreetmap/josm/gui/preferences/map/TaggingPresetPreference.java	(revision 13760)
+++ /trunk/src/org/openstreetmap/josm/gui/preferences/map/TaggingPresetPreference.java	(revision 13761)
@@ -82,5 +82,5 @@
                         } catch (IOException e) {
                             // Should not happen, but at least show message
-                            String msg = tr("Could not read tagging preset source {0}", source);
+                            String msg = tr("Could not read tagging preset source: {0}", source);
                             Logging.log(Logging.LEVEL_ERROR, msg, e);
                             JOptionPane.showMessageDialog(Main.parent, msg);
Index: /trunk/src/org/openstreetmap/josm/io/OsmServerChangesetReader.java
===================================================================
--- /trunk/src/org/openstreetmap/josm/io/OsmServerChangesetReader.java	(revision 13760)
+++ /trunk/src/org/openstreetmap/josm/io/OsmServerChangesetReader.java	(revision 13761)
@@ -153,5 +153,5 @@
                     if (in == null)
                         return null;
-                    monitor.indeterminateSubTask(tr("({0}/{1}) Downloading changeset {2} ...", i, ids.size(), id));
+                    monitor.indeterminateSubTask(tr("({0}/{1}) Downloading changeset {2}...", i, ids.size(), id));
                     List<Changeset> changesets = OsmChangesetParser.parse(in, monitor.createSubTaskMonitor(1, true));
                     if (changesets == null || changesets.isEmpty()) {
Index: /trunk/src/org/openstreetmap/josm/plugins/PluginDownloadTask.java
===================================================================
--- /trunk/src/org/openstreetmap/josm/plugins/PluginDownloadTask.java	(revision 13760)
+++ /trunk/src/org/openstreetmap/josm/plugins/PluginDownloadTask.java	(revision 13761)
@@ -107,5 +107,5 @@
             ExtendedDialog dialog = new ExtendedDialog(
                     progressMonitor.getWindowParent(),
-                    tr("Skip download"),
+                    tr("Skip Download"),
                     tr("Download Plugin"), tr("Skip Download")
             );
Index: /trunk/src/org/openstreetmap/josm/tools/I18n.java
===================================================================
--- /trunk/src/org/openstreetmap/josm/tools/I18n.java	(revision 13760)
+++ /trunk/src/org/openstreetmap/josm/tools/I18n.java	(revision 13761)
@@ -86,6 +86,7 @@
     private static volatile String loadedCode = "en";
 
-
+    /** Map (english/locale) of singular strings **/
     private static volatile Map<String, String> strings;
+    /** Map (english/locale) of plural strings **/
     private static volatile Map<String, String[]> pstrings;
     private static Map<String, PluralMode> languages = new HashMap<>();
@@ -615,3 +616,21 @@
         return 0;
     }
+
+    /**
+     * Returns the map of singular translations.
+     * @return the map of singular translations.
+     * @since 13761
+     */
+    public static Map<String, String> getSingularTranslations() {
+        return new HashMap<>(strings);
+    }
+
+    /**
+     * Returns the map of plural translations.
+     * @return the map of plural translations.
+     * @since 13761
+     */
+    public static Map<String, String[]> getPluralTranslations() {
+        return new HashMap<>(pstrings);
+    }
 }
