Index: trunk/src/org/openstreetmap/josm/actions/AbstractInfoAction.java
===================================================================
--- trunk/src/org/openstreetmap/josm/actions/AbstractInfoAction.java	(revision 6506)
+++ trunk/src/org/openstreetmap/josm/actions/AbstractInfoAction.java	(revision 6507)
@@ -3,4 +3,5 @@
 
 import static org.openstreetmap.josm.tools.I18n.tr;
+import static org.openstreetmap.josm.tools.I18n.trn;
 
 import java.awt.event.ActionEvent;
@@ -85,8 +86,11 @@
 
     public static boolean confirmLaunchMultiple(int numBrowsers) {
-        String msg  = tr(
+        String msg  = /* for correct i18n of plural forms - see #9110 */ trn(
                 "You are about to launch {0} browser windows.<br>"
-                + "This may both clutter your screen with browser windows<br>"
-                + "and take some time to finish.", numBrowsers);
+                        + "This may both clutter your screen with browser windows<br>"
+                        + "and take some time to finish.",
+                "You are about to launch {0} browser windows.<br>"
+                        + "This may both clutter your screen with browser windows<br>"
+                        + "and take some time to finish.", numBrowsers, numBrowsers);
         msg = "<html>" + msg + "</html>";
         ButtonSpec[] spec = new ButtonSpec[] {
@@ -94,5 +98,5 @@
                         tr("Continue"),
                         ImageProvider.get("ok"),
-                        tr("Click to continue and to open {0} browsers", numBrowsers),
+                        trn("Click to continue and to open {0} browsers", "Click to continue and to open {0} browsers", numBrowsers, numBrowsers),
                         null // no specific help topic
                 ),
Index: trunk/src/org/openstreetmap/josm/actions/CombineWayAction.java
===================================================================
--- trunk/src/org/openstreetmap/josm/actions/CombineWayAction.java	(revision 6506)
+++ trunk/src/org/openstreetmap/josm/actions/CombineWayAction.java	(revision 6507)
@@ -4,4 +4,6 @@
 import static org.openstreetmap.josm.gui.help.HelpUtil.ht;
 import static org.openstreetmap.josm.tools.I18n.tr;
+import static org.openstreetmap.josm.tools.I18n.trc;
+import static org.openstreetmap.josm.tools.I18n.trn;
 
 import java.awt.event.ActionEvent;
@@ -188,5 +190,6 @@
         cmds.addAll(resolution);
         cmds.add(new DeleteCommand(deletedWays));
-        final SequenceCommand sequenceCommand = new SequenceCommand(tr("Combine {0} ways", ways.size()), cmds);
+        final SequenceCommand sequenceCommand = new SequenceCommand(/* for correct i18n of plural forms - see #9110 */
+                trn("Combine {0} ways", "Combine {0} ways", ways.size(), ways.size()), cmds);
 
         return new Pair<Way, Command>(targetWay, sequenceCommand);
Index: trunk/src/org/openstreetmap/josm/actions/MergeNodesAction.java
===================================================================
--- trunk/src/org/openstreetmap/josm/actions/MergeNodesAction.java	(revision 6506)
+++ trunk/src/org/openstreetmap/josm/actions/MergeNodesAction.java	(revision 6507)
@@ -4,4 +4,5 @@
 import static org.openstreetmap.josm.gui.help.HelpUtil.ht;
 import static org.openstreetmap.josm.tools.I18n.tr;
+import static org.openstreetmap.josm.tools.I18n.trn;
 
 import java.awt.event.ActionEvent;
@@ -354,6 +355,6 @@
                 cmds.add(new DeleteCommand(waysToDelete));
             }
-            Command cmd = new SequenceCommand(tr("Merge {0} nodes", nodes.size()), cmds);
-            return cmd;
+            return new SequenceCommand(/* for correct i18n of plural forms - see #9110 */
+                    trn("Merge {0} nodes", "Merge {0} nodes", nodes.size(), nodes.size()), cmds);
         } catch (UserCancelException ex) {
             return null;
Index: trunk/src/org/openstreetmap/josm/actions/SplitWayAction.java
===================================================================
--- trunk/src/org/openstreetmap/josm/actions/SplitWayAction.java	(revision 6506)
+++ trunk/src/org/openstreetmap/josm/actions/SplitWayAction.java	(revision 6507)
@@ -505,5 +505,7 @@
         return new SplitWayResult(
                 new SequenceCommand(
-                        tr("Split way {0} into {1} parts", way.getDisplayName(DefaultNameFormatter.getInstance()),wayChunks.size()),
+                        /* for correct i18n of plural forms - see #9110 */
+                        trn("Split way {0} into {1} parts", "Split way {0} into {1} parts", wayChunks.size(),
+                                way.getDisplayName(DefaultNameFormatter.getInstance()), wayChunks.size()),
                         commandList
                         ),
Index: trunk/src/org/openstreetmap/josm/actions/UnGlueAction.java
===================================================================
--- trunk/src/org/openstreetmap/josm/actions/UnGlueAction.java	(revision 6506)
+++ trunk/src/org/openstreetmap/josm/actions/UnGlueAction.java	(revision 6507)
@@ -379,5 +379,6 @@
         fixRelations(selectedNode, cmds, newNodes);
 
-        Main.main.undoRedo.add(new SequenceCommand(tr("Dupe into {0} nodes", newNodes.size()+1), cmds));
+        Main.main.undoRedo.add(new SequenceCommand(/* for correct i18n of plural forms - see #9110 */
+                trn("Dupe into {0} nodes", "Dupe into {0} nodes", newNodes.size() + 1, newNodes.size() + 1), cmds));
         // select one of the new nodes
         getCurrentDataSet().setSelected(newNodes.getFirst());
Index: trunk/src/org/openstreetmap/josm/actions/mapmode/SelectAction.java
===================================================================
--- trunk/src/org/openstreetmap/josm/actions/mapmode/SelectAction.java	(revision 6506)
+++ trunk/src/org/openstreetmap/josm/actions/mapmode/SelectAction.java	(revision 6507)
@@ -806,5 +806,10 @@
                     new String[]{tr("Move them"), tr("Undo move")});
             ed.setButtonIcons(new String[]{"reorder.png", "cancel.png"});
-            ed.setContent(tr("You moved more than {0} elements. " + "Moving a large number of elements is often an error.\n" + "Really move them?", max));
+            ed.setContent(
+                    /* for correct i18n of plural forms - see #9110 */
+                    trn(
+                            "You moved more than {0} elements. " + "Moving a large number of elements is often an error.\n" + "Really move them?",
+                            "You moved more than {0} elements. " + "Moving a large number of elements is often an error.\n" + "Really move them?",
+                            max, max));
             ed.setCancelButton(2);
             ed.toggleEnable("movedManyElements");
Index: trunk/src/org/openstreetmap/josm/command/ChangePropertyCommand.java
===================================================================
--- trunk/src/org/openstreetmap/josm/command/ChangePropertyCommand.java	(revision 6506)
+++ trunk/src/org/openstreetmap/josm/command/ChangePropertyCommand.java	(revision 6507)
@@ -4,4 +4,5 @@
 import static org.openstreetmap.josm.tools.I18n.marktr;
 import static org.openstreetmap.josm.tools.I18n.tr;
+import static org.openstreetmap.josm.tools.I18n.trn;
 
 import java.util.AbstractMap;
@@ -165,8 +166,11 @@
         } else if (objects.size() > 1 && tags.size() == 1) {
             Map.Entry<String, String> entry = tags.entrySet().iterator().next();
-            if (entry.getValue() == null)
-                text = tr("Remove \"{0}\" for {1} objects", entry.getKey(), objects.size());
-            else
-                text = tr("Set {0}={1} for {2} objects", entry.getKey(), entry.getValue(), objects.size());
+            if (entry.getValue() == null) {
+                /* for correct i18n of plural forms - see #9110 */
+                text = trn("Remove \"{0}\" for {1} objects", "Remove \"{0}\" for {1} objects", objects.size(), entry.getKey(), objects.size());
+            } else {
+                /* for correct i18n of plural forms - see #9110 */
+                text = trn("Set {0}={1} for {2} objects", "Set {0}={1} for {2} objects", objects.size(), entry.getKey(), entry.getValue(), objects.size());
+            }
         }
         else {
@@ -180,7 +184,10 @@
 
             if (allnull) {
-                text = tr("Deleted {0} tags for {1} objects", tags.size(), objects.size());
-            } else
-                text = tr("Set {0} tags for {1} objects", tags.size(), objects.size());
+                /* for correct i18n of plural forms - see #9110 */
+                text = trn("Deleted {0} tags for {1} objects", "Deleted {0} tags for {1} objects", objects.size(), tags.size(), objects.size());
+            } else {
+                /* for correct i18n of plural forms - see #9110 */
+                text = trn("Set {0} tags for {1} objects", "Set {0} tags for {1} objects", objects.size(), tags.size(), objects.size());
+            }
         }
         return text;
Index: trunk/src/org/openstreetmap/josm/command/TagConflictResolveCommand.java
===================================================================
--- trunk/src/org/openstreetmap/josm/command/TagConflictResolveCommand.java	(revision 6506)
+++ trunk/src/org/openstreetmap/josm/command/TagConflictResolveCommand.java	(revision 6507)
@@ -4,4 +4,5 @@
 import static org.openstreetmap.josm.tools.I18n.marktr;
 import static org.openstreetmap.josm.tools.I18n.tr;
+import static org.openstreetmap.josm.tools.I18n.trn;
 
 import java.util.Collection;
@@ -56,11 +57,16 @@
     @Override
     public String getDescriptionText() {
-        String msg = "";
-        switch(OsmPrimitiveType.from(conflict.getMy())) {
-        case NODE: msg = marktr("Resolve {0} tag conflicts in node {1}"); break;
-        case WAY: msg = marktr("Resolve {0} tag conflicts in way {1}"); break;
-        case RELATION: msg = marktr("Resolve {0} tag conflicts in relation {1}"); break;
+        switch (OsmPrimitiveType.from(conflict.getMy())) {
+            case NODE:
+                /* for correct i18n of plural forms - see #9110 */
+                return trn("Resolve {0} tag conflicts in node {1}", "Resolve {0} tag conflicts in node {1}", getNumDecidedConflicts(), getNumDecidedConflicts(), conflict.getMy().getId());
+            case WAY:
+                /* for correct i18n of plural forms - see #9110 */
+                return trn("Resolve {0} tag conflicts in way {1}", "Resolve {0} tag conflicts in way {1}", getNumDecidedConflicts(), getNumDecidedConflicts(), conflict.getMy().getId());
+            case RELATION:
+                /* for correct i18n of plural forms - see #9110 */
+                return trn("Resolve {0} tag conflicts in relation {1}", "Resolve {0} tag conflicts in relation {1}", getNumDecidedConflicts(), getNumDecidedConflicts(), conflict.getMy().getId());
         }
-        return tr(msg,getNumDecidedConflicts(), conflict.getMy().getId());
+        return "";
     }
 
Index: trunk/src/org/openstreetmap/josm/gui/conflict/tags/CombinePrimitiveResolverDialog.java
===================================================================
--- trunk/src/org/openstreetmap/josm/gui/conflict/tags/CombinePrimitiveResolverDialog.java	(revision 6506)
+++ trunk/src/org/openstreetmap/josm/gui/conflict/tags/CombinePrimitiveResolverDialog.java	(revision 6507)
@@ -596,10 +596,14 @@
             }
         }));
-        String msg = tr("You are about to combine {0} objects, "
+        String msg = /* for correct i18n of plural forms - see #9110 */ trn("You are about to combine {0} objects, "
+                + "but the following tags are used conflictingly:<br/>{1}"
+                + "If these objects are combined, the resulting object may have unwanted tags.<br/>"
+                + "If you want to continue, you are shown a dialog to fix the conflicting tags.<br/><br/>"
+                + "Do you want to continue?", "You are about to combine {0} objects, "
                 + "but the following tags are used conflictingly:<br/>{1}"
                 + "If these objects are combined, the resulting object may have unwanted tags.<br/>"
                 + "If you want to continue, you are shown a dialog to fix the conflicting tags.<br/><br/>"
                 + "Do you want to continue?",
-                primitives.size(), conflicts);
+                primitives.size(), primitives.size(), conflicts);
 
         if (!ConditionalOptionPaneUtil.showConfirmationDialog(
Index: trunk/src/org/openstreetmap/josm/gui/dialogs/FilterTableModel.java
===================================================================
--- trunk/src/org/openstreetmap/josm/gui/dialogs/FilterTableModel.java	(revision 6506)
+++ trunk/src/org/openstreetmap/josm/gui/dialogs/FilterTableModel.java	(revision 6507)
@@ -4,4 +4,5 @@
 import static org.openstreetmap.josm.tools.I18n.tr;
 import static org.openstreetmap.josm.tools.I18n.trc;
+import static org.openstreetmap.josm.tools.I18n.trn;
 
 import java.awt.Color;
@@ -374,5 +375,6 @@
 
         if (disabledAndHiddenCount != 0) {
-            message += tr("<p><b>{0}</b> objects hidden", disabledAndHiddenCount);
+            /* for correct i18n of plural forms - see #9110 */
+            message += trn("<p><b>{0}</b> objects hidden", "<p><b>{0}</b> objects hidden", disabledAndHiddenCount, disabledAndHiddenCount);
         }
 
@@ -382,5 +384,6 @@
 
         if (disabledCount != 0) {
-            message += tr("<b>{0}</b> objects disabled", disabledCount);
+            /* for correct i18n of plural forms - see #9110 */
+            message += trn("<b>{0}</b> objects disabled", "<b>{0}</b> objects disabled", disabledCount, disabledCount);
         }
 
