[MD Bookmarks] Separate single vs plural messages in toasts.

This CL separates the single and plural messages for copying and deleting
items. This is necessary because mixing $1 style placeholders with
ICU style plural formatting was providing translators with a string that
excluded the placeholder. This then broke when the translated string
was fed into a build, because it was missing the placeholder.

Bug: 741195
Change-Id: Ib4bb619081282c9b497c7363c1a2b72252e3252f
Reviewed-on: https://chromium-review.googlesource.com/572478
Commit-Queue: calamity <[email protected]>
Reviewed-by: Tim Sergeant <[email protected]>
Cr-Commit-Position: refs/heads/master@{#487346}
diff --git a/chrome/app/bookmarks_strings.grdp b/chrome/app/bookmarks_strings.grdp
index fbea426..acae39a 100644
--- a/chrome/app/bookmarks_strings.grdp
+++ b/chrome/app/bookmarks_strings.grdp
@@ -431,17 +431,21 @@
   <message name="IDS_MD_BOOKMARK_MANAGER_TOAST_FOLDER_SORTED" desc="Label displayed in toast popup message when a folder's children are sorted.">
     Folder sorted
   </message>
-  <message name="IDS_MD_BOOKMARK_MANAGER_TOAST_ITEMS_DELETED" desc="Label displayed in toast popup message when several items are deleted.">
+  <message name="IDS_MD_BOOKMARK_MANAGER_TOAST_ITEM_DELETED" desc="Label displayed in toast popup message when a single item is deleted.">
+    '<ph name="DELETED_ITEM_NAME">$1<ex>Bookmark X</ex></ph>' has been deleted
+  </message>
+  <message name="IDS_MD_BOOKMARK_MANAGER_TOAST_ITEMS_DELETED" desc="Label displayed in toast popup message when two or more items are deleted.">
     {COUNT, plural,
-      =1 {'<ph name="DELETED_ITEM_NAME">$1</ph>' has been deleted}
       other {# bookmarks deleted}}
   </message>
   <message name="IDS_MD_BOOKMARK_MANAGER_TOAST_URL_COPIED" desc="Label displayed in toast popup message when a URL is copied.">
     URL copied
   </message>
-  <message name="IDS_MD_BOOKMARK_MANAGER_TOAST_ITEMS_COPIED" desc="Label displayed in a toast popup message when several bookmark items are copied">
+  <message name="IDS_MD_BOOKMARK_MANAGER_TOAST_ITEM_COPIED" desc="Label displayed in toast popup message when a single item is copied.">
+    '<ph name="COPIED_ITEM_NAME">$1<ex>Bookmark X</ex></ph>' copied
+  </message>
+  <message name="IDS_MD_BOOKMARK_MANAGER_TOAST_ITEMS_COPIED" desc="Label displayed in a toast popup message when two or more bookmark items are copied">
     {COUNT, plural,
-      =1 {'<ph name="COPIED_ITEM_NAME">$1</ph>' copied}
       other {# items copied}}
   </message>
   <!-- End of material design Bookmarks Manager strings. -->
diff --git a/chrome/browser/resources/md_bookmarks/command_manager.js b/chrome/browser/resources/md_bookmarks/command_manager.js
index 020f92b1..ce6ae6b1 100644
--- a/chrome/browser/resources/md_bookmarks/command_manager.js
+++ b/chrome/browser/resources/md_bookmarks/command_manager.js
@@ -273,6 +273,9 @@
             if (command == Command.COPY_URL) {
               labelPromise =
                   Promise.resolve(loadTimeData.getString('toastUrlCopied'));
+            } else if (idList.length == 1) {
+              labelPromise =
+                  Promise.resolve(loadTimeData.getString('toastItemCopied'));
             } else {
               labelPromise = cr.sendWithPromise(
                   'getPluralString', 'toastItemsCopied', idList.length);
@@ -290,8 +293,16 @@
         case Command.DELETE:
           var idList = Array.from(this.minimizeDeletionSet_(itemIds));
           var title = state.nodes[idList[0]].title;
-          var labelPromise = cr.sendWithPromise(
-              'getPluralString', 'toastItemsDeleted', idList.length);
+          var labelPromise;
+
+          if (idList.length == 1) {
+            labelPromise =
+                Promise.resolve(loadTimeData.getString('toastItemDeleted'));
+          } else {
+            labelPromise = cr.sendWithPromise(
+                'getPluralString', 'toastItemsDeleted', idList.length);
+          }
+
           chrome.bookmarkManagerPrivate.removeTrees(idList, function() {
             this.showTitleToast_(labelPromise, title, true);
           }.bind(this));
diff --git a/chrome/browser/ui/webui/md_bookmarks/md_bookmarks_ui.cc b/chrome/browser/ui/webui/md_bookmarks/md_bookmarks_ui.cc
index 12316c4..fbe77ca 100644
--- a/chrome/browser/ui/webui/md_bookmarks/md_bookmarks_ui.cc
+++ b/chrome/browser/ui/webui/md_bookmarks/md_bookmarks_ui.cc
@@ -103,6 +103,10 @@
   AddLocalizedString(source, "title", IDS_MD_BOOKMARK_MANAGER_TITLE);
   AddLocalizedString(source, "toastFolderSorted",
                      IDS_MD_BOOKMARK_MANAGER_TOAST_FOLDER_SORTED);
+  AddLocalizedString(source, "toastItemCopied",
+                     IDS_MD_BOOKMARK_MANAGER_TOAST_ITEM_COPIED);
+  AddLocalizedString(source, "toastItemDeleted",
+                     IDS_MD_BOOKMARK_MANAGER_TOAST_ITEM_DELETED);
   AddLocalizedString(source, "toastUrlCopied",
                      IDS_MD_BOOKMARK_MANAGER_TOAST_URL_COPIED);
   AddLocalizedString(source, "undo", IDS_BOOKMARK_BAR_UNDO);