Index: /trunk/resources/data/validator/combinations.mapcss
===================================================================
--- /trunk/resources/data/validator/combinations.mapcss	(revision 19478)
+++ /trunk/resources/data/validator/combinations.mapcss	(revision 19479)
@@ -690,5 +690,5 @@
 }
 way["addr:housenumber"][!building][!"building:part"][!"demolished:building"][!note][!amenity][!leisure][!landuse][!man_made][!tourism][!barrier][place!=plot]!.part_of_building_MP {
-  /* don't exclude shop because a lot of real missing bulding tag cases have a shop tag. */
+  /* do not exclude shop because a lot of real missing bulding tag cases have a shop tag. */
   throwOther: tr("possibly missing {0} tag", "{1.key}");
   group: tr("missing tag");
Index: /trunk/src/org/openstreetmap/josm/data/imagery/WMTSTileSource.java
===================================================================
--- /trunk/src/org/openstreetmap/josm/data/imagery/WMTSTileSource.java	(revision 19478)
+++ /trunk/src/org/openstreetmap/josm/data/imagery/WMTSTileSource.java	(revision 19479)
@@ -609,5 +609,5 @@
         }
         if (layer.format == null) {
-            // no format found - it's mandatory parameter - can't use this layer
+            // no format found - parameter is mandatory - cannot use this layer
             Logging.warn(tr("Can''t use layer {0} because no supported formats were found. Layer is available in formats: {1}",
                     layer.getUserTitle(),
Index: /trunk/src/org/openstreetmap/josm/data/osm/DataSetMerger.java
===================================================================
--- /trunk/src/org/openstreetmap/josm/data/osm/DataSetMerger.java	(revision 19478)
+++ /trunk/src/org/openstreetmap/josm/data/osm/DataSetMerger.java	(revision 19479)
@@ -307,5 +307,5 @@
             // It indicates a serious problem in datasets.
             // For example, datasets can be fetched from different OSM servers or badly hand-modified.
-            // We shouldn't merge that datasets.
+            // We should not merge these datasets.
             throw new DataIntegrityProblemException(tr("Conflict in ''visible'' attribute for object of type {0} with id {1}",
                     target.getType(), target.getId()));
Index: /trunk/src/org/openstreetmap/josm/data/validation/routines/EmailValidator.java
===================================================================
--- /trunk/src/org/openstreetmap/josm/data/validation/routines/EmailValidator.java	(revision 19478)
+++ /trunk/src/org/openstreetmap/josm/data/validation/routines/EmailValidator.java	(revision 19479)
@@ -138,5 +138,5 @@
         }
 
-        if (email.endsWith(".")) { // check this first - it's cheap!
+        if (email.endsWith(".")) { // check this first - it is cheap!
             setErrorMessage(tr("E-mail address is invalid"));
             return false;
Index: /trunk/src/org/openstreetmap/josm/data/validation/tests/UntaggedNode.java
===================================================================
--- /trunk/src/org/openstreetmap/josm/data/validation/tests/UntaggedNode.java	(revision 19478)
+++ /trunk/src/org/openstreetmap/josm/data/validation/tests/UntaggedNode.java	(revision 19479)
@@ -62,5 +62,5 @@
     public void visitKeyValue(Tagged n, String key, String value) {
         if (key.toLowerCase(Locale.ENGLISH).contains("fixme") || value.toLowerCase(Locale.ENGLISH).contains("fixme")) {
-            /* translation note: don't translate quoted words */
+            /* translation note: do not translate quoted words */
             errors.add(TestError.builder(this, Severity.WARNING, UNTAGGED_NODE_FIXME)
                     .message(ERROR_MESSAGE, marktr("Has tag containing ''fixme''"))
@@ -73,17 +73,17 @@
         int code = 0;
         if (key.startsWith("note") || key.startsWith("comment") || key.startsWith("description")) {
-            /* translation note: don't translate quoted words */
+            /* translation note: do not translate quoted words */
             msg = marktr("Has key ''note'' or ''comment'' or ''description''");
             code = UNTAGGED_NODE_NOTE;
         } else if (key.startsWith("created_by")) {
-            /* translation note: don't translate quoted words */
+            /* translation note: do not translate quoted words */
             msg = marktr("Has key ''created_by''");
             code = UNTAGGED_NODE_CREATED_BY;
         } else if (key.startsWith("watch")) {
-            /* translation note: don't translate quoted words */
+            /* translation note: do not translate quoted words */
             msg = marktr("Has key ''watch''");
             code = UNTAGGED_NODE_WATCH;
         } else if (key.startsWith("source")) {
-            /* translation note: don't translate quoted words */
+            /* translation note: do not translate quoted words */
             msg = marktr("Has key ''source''");
             code = UNTAGGED_NODE_SOURCE;
Index: /trunk/src/org/openstreetmap/josm/gui/preferences/display/GPXSettingsPanel.java
===================================================================
--- /trunk/src/org/openstreetmap/josm/gui/preferences/display/GPXSettingsPanel.java	(revision 19478)
+++ /trunk/src/org/openstreetmap/josm/gui/preferences/display/GPXSettingsPanel.java	(revision 19479)
@@ -574,6 +574,6 @@
 
         if (global) {
-            // Setting waypoints for gpx layer doesn't make sense - waypoints are shown in marker layer that has different name - so show
-            // this only for global config
+            // Setting waypoints for gpx layer does not make sense - waypoints are shown in marker layer that has
+            // different name - so show this only for global config
 
             // waypointLabel
Index: /trunk/src/org/openstreetmap/josm/io/OsmApi.java
===================================================================
--- /trunk/src/org/openstreetmap/josm/io/OsmApi.java	(revision 19478)
+++ /trunk/src/org/openstreetmap/josm/io/OsmApi.java	(revision 19479)
@@ -998,5 +998,5 @@
                 return newNotes.get(0);
             }
-            // Shouldn't ever execute. Server will either respond with an error (caught elsewhere) or one note
+            // Should never execute. Server will either respond with an error (caught elsewhere) or one note
             throw new OsmTransferException(tr("Note upload failed"));
         } catch (SAXException | IOException e) {
Index: /trunk/src/org/openstreetmap/josm/tools/I18n.java
===================================================================
--- /trunk/src/org/openstreetmap/josm/tools/I18n.java	(revision 19478)
+++ /trunk/src/org/openstreetmap/josm/tools/I18n.java	(revision 19479)
@@ -76,4 +76,7 @@
          * <a href="https://www.unicode.org/cldr/charts/latest/supplemental/language_plural_rules.html#lt">Lithuanian</a>. */
         MODE_LT,
+        /** Special mode for
+         * <a href="https://www.unicode.org/cldr/charts/latest/supplemental/language_plural_rules.html#lv">Latvian</a>. */
+        MODE_LV,
         /** Special mode for
          * <a href="https://www.unicode.org/cldr/charts/latest/supplemental/language_plural_rules.html#ru">Russian</a>. */
@@ -133,7 +136,10 @@
         languages.put("km", PluralMode.MODE_NONE);
         languages.put("lt", PluralMode.MODE_LT);
+        languages.put("lo", PluralMode.MODE_NONE);
+        languages.put("lv", PluralMode.MODE_LV);
         languages.put("mr", PluralMode.MODE_NOTONE);
         languages.put("nb", PluralMode.MODE_NOTONE);
         languages.put("nl", PluralMode.MODE_NOTONE);
+        languages.put("nn", PluralMode.MODE_NOTONE);
         languages.put("pl", PluralMode.MODE_PL);
         languages.put("pt", PluralMode.MODE_NOTONE);
@@ -678,4 +684,6 @@
             return ((n % 10) == 1) && ((n % 100) != 11) ? 0 : (((n % 10) >= 2)
                     && (((n % 100) < 10) || ((n % 100) >= 20)) ? 1 : 2);
+        case MODE_LV:
+            return ((n % 10) == 1) && ((n % 100) != 11) ? 0 : (n != 0) ? 1 : 2;
         case MODE_RU:
             return (((n % 10) == 1) && ((n % 100) != 11)) ? 0 : (((((n % 10) >= 2)
Index: /trunk/src/org/openstreetmap/josm/tools/LanguageInfo.java
===================================================================
--- /trunk/src/org/openstreetmap/josm/tools/LanguageInfo.java	(revision 19478)
+++ /trunk/src/org/openstreetmap/josm/tools/LanguageInfo.java	(revision 19479)
@@ -67,5 +67,5 @@
             }
             switch (code) {
-                case "nb":          /* OSM-Wiki has "no", but no "nb" */
+                case "nb": case "nn":     /* OSM-Wiki has "no", but no "nb" */
                     return "No:";
                 case "sr@latin":    /* OSM-Wiki has "Sr-latn" and not Sr-latin */
