Bug 658191 - Fix plural form in Add-on installation messages r=aswan
addonsInstalled and addonsInstalledNeedsRestart currently abuse
plural forms, using the singular form to expose the name of the add-on.
While the first form is singular for English, it's used for other numbers
in other languages, and in others there's only one form available,
making these strings impossible to translate.
MozReview-Commit-ID: 6hVJnaqTGtc
--- a/browser/base/content/browser-addons.js
+++ b/browser/base/content/browser-addons.js
@@ -436,42 +436,53 @@ var gXPInstallObserver = {
showNotification();
break; }
case "addon-install-complete": {
let needsRestart = installInfo.installs.some(function(i) {
return i.addon.pendingOperations != AddonManager.PENDING_NONE;
});
let secondaryActions = null;
+ let numAddons = installInfo.installs.length;
if (needsRestart) {
notificationID = "addon-install-restart";
- messageString = gNavigatorBundle.getString("addonsInstalledNeedsRestart");
+ if (numAddons == 1) {
+ messageString = gNavigatorBundle.getFormattedString("addonInstalledNeedsRestart",
+ [installInfo.installs[0].name, brandShortName]);
+ } else {
+ messageString = gNavigatorBundle.getString("addonsGenericInstalledNeedsRestart");
+ messageString = PluralForm.get(numAddons, messageString);
+ messageString = messageString.replace("#1", numAddons);
+ messageString = messageString.replace("#2", brandShortName);
+ }
action = {
label: gNavigatorBundle.getString("addonInstallRestartButton"),
accessKey: gNavigatorBundle.getString("addonInstallRestartButton.accesskey"),
callback() {
BrowserUtils.restartApplication();
}
};
secondaryActions = [{
label: gNavigatorBundle.getString("addonInstallRestartIgnoreButton"),
accessKey: gNavigatorBundle.getString("addonInstallRestartIgnoreButton.accesskey"),
callback: () => {},
}];
} else {
- messageString = gNavigatorBundle.getString("addonsInstalled");
+ if (numAddons == 1) {
+ messageString = gNavigatorBundle.getFormattedString("addonInstalled",
+ [installInfo.installs[0].name]);
+ } else {
+ messageString = gNavigatorBundle.getString("addonsGenericInstalled");
+ messageString = PluralForm.get(numAddons, messageString);
+ messageString = messageString.replace("#1", numAddons);
+ }
action = null;
}
- messageString = PluralForm.get(installInfo.installs.length, messageString);
- messageString = messageString.replace("#1", installInfo.installs[0].name);
- messageString = messageString.replace("#2", installInfo.installs.length);
- messageString = messageString.replace("#3", brandShortName);
-
// Remove notification on dismissal, since it's possible to cancel the
// install through the addons manager UI, making the "restart" prompt
// irrelevant.
options.removeOnDismissal = true;
options.persistent = false;
PopupNotifications.show(browser, notificationID, messageString, anchorID,
action, secondaryActions, options);
--- a/browser/locales/en-US/chrome/browser/browser.properties
+++ b/browser/locales/en-US/chrome/browser/browser.properties
@@ -193,22 +193,32 @@ addonConfirmInstallUnsigned.message=Caut
# LOCALIZATION NOTE (addonConfirmInstallSomeUnsigned.message):
# Semicolon-separated list of plural forms. See:
# http://developer.mozilla.org/en/docs/Localization_and_Plurals
# #1 is brandShortName
# #2 is the total number of add-ons being installed (at least 2)
addonConfirmInstallSomeUnsigned.message=;Caution: This site would like to install #2 add-ons in #1, some of which are unverified. Proceed at your own risk.
-# LOCALIZATION NOTE (addonsInstalled, addonsInstalledNeedsRestart):
+# LOCALIZATION NOTE (addonInstalled):
+# %S is the name of the add-on
+addonInstalled=%S has been installed successfully.
+# LOCALIZATION NOTE (addonsGenericInstalled):
# Semicolon-separated list of plural forms. See:
# http://developer.mozilla.org/en/docs/Localization_and_Plurals
-# #1 first add-on's name, #2 number of add-ons, #3 application name
-addonsInstalled=#1 has been installed successfully.;#2 add-ons have been installed successfully.
-addonsInstalledNeedsRestart=#1 will be installed after you restart #3.;#2 add-ons will be installed after you restart #3.
+# #1 number of add-ons
+addonsGenericInstalled=#1 add-on has been installed successfully.;#1 add-ons have been installed successfully.
+# LOCALIZATION NOTE (addonInstalledNeedsRestart):
+# %1$S is the name of the add-on, %2$S is the application's name
+addonInstalledNeedsRestart=%1$S will be installed after you restart %2$S.
+# LOCALIZATION NOTE (addonsGenericInstalledNeedsRestart):
+# Semicolon-separated list of plural forms. See:
+# http://developer.mozilla.org/en/docs/Localization_and_Plurals
+# #1 number of add-ons. #2 application's name
+addonsGenericInstalledNeedsRestart=#1 add-on will be installed after you restart #2.;#1 add-ons will be installed after you restart #2.
addonInstallRestartButton=Restart Now
addonInstallRestartButton.accesskey=R
addonInstallRestartIgnoreButton=Not Now
addonInstallRestartIgnoreButton.accesskey=N
# LOCALIZATION NOTE (addonInstallError-1, addonInstallError-2, addonInstallError-3, addonInstallError-4, addonInstallError-5, addonLocalInstallError-1, addonLocalInstallError-2, addonLocalInstallError-3, addonLocalInstallError-4, addonLocalInstallError-5):
# %1$S is the application name, %2$S is the add-on name
addonInstallError-1=The add-on could not be downloaded because of a connection failure.