Bug 1491677 Migrate localization of a subset of extensions.dtd to Fluent r=flod,Gijs,zbraniecki
authorCollin Wing <masterkrombi@gmail.com>
Mon, 22 Oct 2018 18:21:56 +0000
changeset 490799 d38eafa9429c39224016bf74f67e13b9a9c1ba08
parent 490798 dafaac09926c037cb7ef23c69cd1bf0bed273d06
child 490800 0087557ee59e71e9756c44ef25ba23a22f08dc5a
push id247
push userfmarier@mozilla.com
push dateSat, 27 Oct 2018 01:06:44 +0000
reviewersflod, Gijs, zbraniecki
bugs1491677
milestone65.0a1
Bug 1491677 Migrate localization of a subset of extensions.dtd to Fluent r=flod,Gijs,zbraniecki Differential Revision: https://phabricator.services.mozilla.com/D6203
python/l10n/fluent_migrations/bug_1491677_extensions.py
toolkit/locales/en-US/chrome/mozapps/extensions/extensions.dtd
toolkit/locales/en-US/toolkit/about/aboutAddons.ftl
toolkit/mozapps/extensions/content/extensions.xul
new file mode 100644
--- /dev/null
+++ b/python/l10n/fluent_migrations/bug_1491677_extensions.py
@@ -0,0 +1,439 @@
+from __future__ import absolute_import
+import fluent.syntax.ast as FTL
+from fluent.migrate.helpers import transforms_from
+from fluent.migrate.helpers import TERM_REFERENCE
+from fluent.migrate.helpers import MESSAGE_REFERENCE
+from fluent.migrate import REPLACE
+from fluent.migrate import COPY
+from fluent.migrate import CONCAT
+
+def migrate(ctx):
+    """Bug 1491677 -  Migrate subsection of strings of extensions.dtd, part {index}"""
+
+    ctx.add_transforms(
+        "toolkit/toolkit/about/aboutAddons.ftl",
+        "toolkit/toolkit/about/aboutAddons.ftl",
+        transforms_from(
+"""
+addons-window =
+    .title = { COPY("toolkit/chrome/mozapps/extensions/extensions.dtd", "addons.windowTitle")}
+search-header =
+    .placeholder = { COPY("toolkit/chrome/mozapps/extensions/extensions.dtd", "search.placeholder3")}
+    .searchbuttonlabel = { COPY("toolkit/chrome/mozapps/extensions/extensions.dtd", "search.buttonlabel")}
+search-header-shortcut =
+    .key = { COPY("toolkit/chrome/mozapps/extensions/extensions.dtd", "search.commandkey")}
+loading-label =
+    .value = { COPY("toolkit/chrome/mozapps/extensions/extensions.dtd", "loading.label")}
+list-empty-installed =
+    .value = { COPY("toolkit/chrome/mozapps/extensions/extensions.dtd", "listEmpty.installed.label")}
+list-empty-available-updates = 
+    .value ={ COPY("toolkit/chrome/mozapps/extensions/extensions.dtd", "listEmpty.availableUpdates.label")}
+list-empty-recent-updates =
+    .value = { COPY("toolkit/chrome/mozapps/extensions/extensions.dtd", "listEmpty.recentUpdates.label")}
+list-empty-find-updates =
+    .label = { COPY("toolkit/chrome/mozapps/extensions/extensions.dtd", "listEmpty.findUpdates.label")}
+list-empty-button =
+    .label = { COPY("toolkit/chrome/mozapps/extensions/extensions.dtd", "listEmpty.button.label")}
+install-addon-from-file =
+    .label = { COPY("toolkit/chrome/mozapps/extensions/extensions.dtd", "installAddonFromFile.label")}
+    .accesskey = { COPY("toolkit/chrome/mozapps/extensions/extensions.dtd", "installAddonFromFile.accesskey")}
+help-button = { COPY("toolkit/chrome/mozapps/extensions/extensions.dtd", "helpButton.label")}
+tools-menu =
+    .tooltiptext = { COPY("toolkit/chrome/mozapps/extensions/extensions.dtd", "toolsMenu.tooltip")}
+show-unsigned-extensions-button =
+    .label = { COPY("toolkit/chrome/mozapps/extensions/extensions.dtd", "showUnsignedExtensions.button.label")}
+show-all-extensions-button =
+    .label = { COPY("toolkit/chrome/mozapps/extensions/extensions.dtd", "showAllExtensions.button.label")}
+debug-addons =
+    .label = { COPY("toolkit/chrome/mozapps/extensions/extensions.dtd", "debugAddons.label")}
+    .accesskey = { COPY("toolkit/chrome/mozapps/extensions/extensions.dtd", "debugAddons.accesskey")}
+cmd-show-details =
+    .label = { COPY("toolkit/chrome/mozapps/extensions/extensions.dtd", "cmd.showDetails.label")}
+    .accesskey = { COPY("toolkit/chrome/mozapps/extensions/extensions.dtd", "cmd.showDetails.accesskey")}
+cmd-find-updates =
+    .label = { COPY("toolkit/chrome/mozapps/extensions/extensions.dtd", "cmd.findUpdates.label")}
+    .accesskey = { COPY("toolkit/chrome/mozapps/extensions/extensions.dtd", "cmd.findUpdates.accesskey")}
+cmd-enable-theme =
+    .label = { COPY("toolkit/chrome/mozapps/extensions/extensions.dtd", "cmd.enableTheme.label")}
+    .accesskey = { COPY("toolkit/chrome/mozapps/extensions/extensions.dtd", "cmd.enableTheme.accesskey")}
+cmd-disable-theme = 
+    .label = { COPY("toolkit/chrome/mozapps/extensions/extensions.dtd", "cmd.disableTheme.label")}
+    .accesskey = { COPY("toolkit/chrome/mozapps/extensions/extensions.dtd", "cmd.disableTheme.accesskey")}
+cmd-install-addon = 
+    .label = { COPY("toolkit/chrome/mozapps/extensions/extensions.dtd", "cmd.installAddon.label")}
+    .accesskey = { COPY("toolkit/chrome/mozapps/extensions/extensions.dtd", "cmd.installAddon.accesskey")}
+cmd-contribute =
+    .label = { COPY("toolkit/chrome/mozapps/extensions/extensions.dtd", "cmd.contribute.label")}
+    .accesskey = { COPY("toolkit/chrome/mozapps/extensions/extensions.dtd", "cmd.contribute.accesskey")}
+    .tooltiptext = { COPY("toolkit/chrome/mozapps/extensions/extensions.dtd", "cmd.contribute.tooltip")}
+discover-title = { COPY("toolkit/chrome/mozapps/extensions/extensions.dtd", "discover.title")}
+discover-footer = { COPY("toolkit/chrome/mozapps/extensions/extensions.dtd", "discover.footer", trim:"True")}
+detail-version =
+    .label = { COPY("toolkit/chrome/mozapps/extensions/extensions.dtd", "detail.version.label")}
+detail-last-updated =
+    .label = { COPY("toolkit/chrome/mozapps/extensions/extensions.dtd", "detail.lastupdated.label")}
+detail-contributions-description = { COPY("toolkit/chrome/mozapps/extensions/extensions.dtd", "detail.contributions.description")}
+detail-update-type =
+    .value = { COPY("toolkit/chrome/mozapps/extensions/extensions.dtd", "detail.updateType")}
+detail-update-default = 
+    .label = { COPY("toolkit/chrome/mozapps/extensions/extensions.dtd", "detail.updateDefault.label")}
+    .tooltiptext = { COPY("toolkit/chrome/mozapps/extensions/extensions.dtd", "detail.updateDefault.tooltip")}
+detail-update-automatic =
+    .label = { COPY("toolkit/chrome/mozapps/extensions/extensions.dtd", "detail.updateAutomatic.label")}
+    .tooltiptext = { COPY("toolkit/chrome/mozapps/extensions/extensions.dtd", "detail.updateAutomatic.tooltip")}
+detail-update-manual =
+    .label = { COPY("toolkit/chrome/mozapps/extensions/extensions.dtd", "detail.updateManual.label")}
+    .tooltiptext = { COPY("toolkit/chrome/mozapps/extensions/extensions.dtd", "detail.updateManual.tooltip")}
+detail-home = 
+    .label ={ COPY("toolkit/chrome/mozapps/extensions/extensions.dtd", "detail.home")}
+detail-repository = 
+    .label = { COPY("toolkit/chrome/mozapps/extensions/extensions.dtd", "detail.repository")}
+detail-check-for-updates =
+    .label = { COPY("toolkit/chrome/mozapps/extensions/extensions.dtd", "detail.checkForUpdates.label")}
+    .accesskey = { COPY("toolkit/chrome/mozapps/extensions/extensions.dtd", "detail.checkForUpdates.accesskey")}
+    .tooltiptext = { COPY("toolkit/chrome/mozapps/extensions/extensions.dtd", "detail.checkForUpdates.tooltip")}
+detail-rating =
+    .value = { COPY("toolkit/chrome/mozapps/extensions/extensions.dtd", "rating2.label")}
+addon-restart-now =
+    .label = { COPY("toolkit/chrome/mozapps/extensions/extensions.dtd", "addon.restartNow.label")}
+disabled-unsigned-heading =
+    .value = { COPY("toolkit/chrome/mozapps/extensions/extensions.dtd", "disabledUnsigned.heading")}
+disabled-unsigned-learn-more = { COPY("toolkit/chrome/mozapps/extensions/extensions.dtd", "disabledUnsigned.learnMore")}
+legacy-warning-show-legacy = { COPY("toolkit/chrome/mozapps/extensions/extensions.dtd", "legacyWarning.showLegacy")}
+legacy-extensions =
+    .value = { COPY("toolkit/chrome/mozapps/extensions/extensions.dtd", "legacyExtensions.title")}
+""")
+    )
+
+    ctx.add_transforms(
+        "toolkit/toolkit/about/aboutAddons.ftl",
+        "toolkit/toolkit/about/aboutAddons.ftl",
+        [
+            FTL.Message(
+                id=FTL.Identifier("preferences"),
+                value=FTL.Pattern(
+                    elements=[
+                        FTL.Placeable(
+                            expression=FTL.SelectExpression(
+                                selector=FTL.CallExpression(
+                                    callee=FTL.Function("PLATFORM"),
+                                ),
+                                variants=[
+                                    FTL.Variant(
+                                        key=FTL.VariantName("windows"),
+                                        default=False,
+                                        value=REPLACE(
+                                            "toolkit/chrome/mozapps/extensions/extensions.dtd",
+                                            "preferencesWin.label",
+                                            {
+                                                "&brandShortName;" : TERM_REFERENCE("-brand-short-name")
+                                            }
+                                        )
+                                    ),
+                                    FTL.Variant(
+                                        key=FTL.VariantName("other"),
+                                        default=True,
+                                        value=REPLACE(
+                                            "toolkit/chrome/mozapps/extensions/extensions.dtd",
+                                            "preferencesUnix.label",
+                                            {
+                                                "&brandShortName;" : TERM_REFERENCE("-brand-short-name")
+                                            }
+                                        )
+                                    )
+                                ]
+                            )
+                        )
+                    ]
+                )
+            ),
+            FTL.Message(
+                id=FTL.Identifier("cmd-preferences"),
+                attributes=[
+                    FTL.Attribute(
+                        id=FTL.Identifier("label"),
+                        value=FTL.Pattern(
+                            elements=[
+                                FTL.Placeable(
+                                    expression=FTL.SelectExpression(
+                                        selector=FTL.CallExpression(
+                                            callee=FTL.Function("PLATFORM"),
+                                        ),
+                                        variants=[
+                                            FTL.Variant(
+                                                key=FTL.VariantName("windows"),
+                                                default=False,
+                                                value=COPY(
+                                                    "toolkit/chrome/mozapps/extensions/extensions.dtd",
+                                                    "cmd.preferencesWin.label"
+                                                )
+                                            ),
+                                            FTL.Variant(
+                                                key=FTL.VariantName("other"),
+                                                default=True,
+                                                value=COPY(
+                                                    "toolkit/chrome/mozapps/extensions/extensions.dtd",
+                                                    "cmd.preferencesUnix.label"
+                                                )
+                                            )
+                                        ]
+                                    )
+                                )
+                            ]
+                        )
+                    ),
+                    FTL.Attribute(
+                        id=FTL.Identifier("accesskey"),
+                        value=FTL.Pattern(
+                            elements=[
+                                FTL.Placeable(
+                                    expression=FTL.SelectExpression(
+                                        selector=FTL.CallExpression(
+                                            callee=FTL.Function("PLATFORM"),
+                                        ),
+                                        variants=[
+                                            FTL.Variant(
+                                                key=FTL.VariantName("windows"),
+                                                default=False,
+                                                value=COPY(
+                                                    "toolkit/chrome/mozapps/extensions/extensions.dtd",
+                                                    "cmd.preferencesWin.accesskey"
+                                                )
+                                            ),
+                                            FTL.Variant(
+                                                key=FTL.VariantName("other"),
+                                                default=True,
+                                                value=COPY(
+                                                    "toolkit/chrome/mozapps/extensions/extensions.dtd",
+                                                    "cmd.preferencesUnix.accesskey"
+                                                )
+                                            )
+                                        ]
+                                    )
+                                )
+                            ]
+                        )
+                    )
+                ]
+            ),
+            FTL.Message(
+                id=FTL.Identifier("discover-description"),
+                value=REPLACE(
+                    "toolkit/chrome/mozapps/extensions/extensions.dtd",
+                    "discover.description2",
+                    {
+                        "&brandShortName;": TERM_REFERENCE("-brand-short-name")
+                    },
+                    trim=True
+                )
+            ),
+            FTL.Message(
+                id=FTL.Identifier("detail-home-value"),
+                attributes=[
+                    FTL.Attribute(
+                        id=FTL.Identifier("value"),
+                        value=FTL.Pattern(
+                            elements=[
+                                FTL.Placeable(
+                                    expression=MESSAGE_REFERENCE("detail-home.label")
+                                )
+                            ]
+                        )
+                    )
+                ]
+            ),
+            FTL.Message(
+                id=FTL.Identifier("detail-repository-value"),
+                attributes=[
+                    FTL.Attribute(
+                        id=FTL.Identifier("value"),
+                        value=FTL.Pattern(
+                            elements=[
+                                FTL.Placeable(
+                                    expression=MESSAGE_REFERENCE("detail-repository.label")
+                                )
+                            ]
+                        )
+                    )
+                ]
+            ),
+            FTL.Message(
+                id=FTL.Identifier("detail-show-preferences"),
+                attributes=[
+                    FTL.Attribute(
+                        id=FTL.Identifier("label"),
+                        value=FTL.Pattern(
+                            elements=[
+                                FTL.Placeable(
+                                    expression=FTL.SelectExpression(
+                                        selector=FTL.CallExpression(
+                                            callee=FTL.Function("PLATFORM"),
+                                        ),
+                                        variants=[
+                                            FTL.Variant(
+                                                key=FTL.VariantName("windows"),
+                                                default=False,
+                                                value=COPY(
+                                                    "toolkit/chrome/mozapps/extensions/extensions.dtd",
+                                                    "detail.showPreferencesWin.label"
+                                                )
+                                            ),
+                                            FTL.Variant(
+                                                key=FTL.VariantName("other"),
+                                                default=True,
+                                                value=COPY(
+                                                    "toolkit/chrome/mozapps/extensions/extensions.dtd",
+                                                    "detail.showPreferencesUnix.label"
+                                                )
+                                            )
+                                        ]
+                                    )
+                                )
+                            ]
+                        )
+                    ),
+                    FTL.Attribute(
+                        id=FTL.Identifier("accesskey"),
+                        value=FTL.Pattern(
+                            elements=[
+                                FTL.Placeable(
+                                    expression=FTL.SelectExpression(
+                                        selector=FTL.CallExpression(
+                                            callee=FTL.Function("PLATFORM"),
+                                        ),
+                                        variants=[
+                                            FTL.Variant(
+                                                key=FTL.VariantName("windows"),
+                                                default=False,
+                                                value=COPY(
+                                                    "toolkit/chrome/mozapps/extensions/extensions.dtd",
+                                                    "detail.showPreferencesWin.accesskey"
+                                                )
+                                            ),
+                                            FTL.Variant(
+                                                key=FTL.VariantName("other"),
+                                                default=True,
+                                                value=COPY(
+                                                    "toolkit/chrome/mozapps/extensions/extensions.dtd",
+                                                    "detail.showPreferencesUnix.accesskey"
+                                                )
+                                            )
+                                        ]
+                                    )
+                                )
+                            ]
+                        )
+                    ),
+                    FTL.Attribute(
+                        id=FTL.Identifier("tooltiptext"),
+                        value=FTL.Pattern(
+                            elements=[
+                                FTL.Placeable(
+                                    expression=FTL.SelectExpression(
+                                        selector=FTL.CallExpression(
+                                            callee=FTL.Function("PLATFORM"),
+                                        ),
+                                        variants=[
+                                            FTL.Variant(
+                                                key=FTL.VariantName("windows"),
+                                                default=False,
+                                                value=COPY(
+                                                    "toolkit/chrome/mozapps/extensions/extensions.dtd",
+                                                    "detail.showPreferencesWin.tooltip"
+                                                )
+                                            ),
+                                            FTL.Variant(
+                                                key=FTL.VariantName("other"),
+                                                default=True,
+                                                value=COPY(
+                                                    "toolkit/chrome/mozapps/extensions/extensions.dtd",
+                                                    "detail.showPreferencesUnix.tooltip"
+                                                )
+                                            )
+                                        ]
+                                    )
+                                )
+                            ]
+                        )
+                    )
+                ]
+            ),
+            FTL.Message(
+                id=FTL.Identifier("disabled-unsigned-description"),
+                value=CONCAT(
+                    REPLACE(
+                        "toolkit/chrome/mozapps/extensions/extensions.dtd",
+                        "disabledUnsigned.description.start",
+                        {
+                            "&brandShortName;": TERM_REFERENCE("-brand-short-name")
+                        }
+                    ),
+                    FTL.TextElement('<label data-l10n-name="find-addons">'),
+                    COPY(
+                        "toolkit/chrome/mozapps/extensions/extensions.dtd",
+                        "disabledUnsigned.description.findAddonsLink"
+                    ),
+                    FTL.TextElement("</label>"),
+                    COPY(
+                        "toolkit/chrome/mozapps/extensions/extensions.dtd",
+                        "disabledUnsigned.description.end"
+                    )
+                )
+            ),
+            FTL.Message(
+                id=FTL.Identifier("disabled-unsigned-devinfo"),
+                value=CONCAT(
+                    COPY(
+                        "toolkit/chrome/mozapps/extensions/extensions.dtd",
+                        "disabledUnsigned.devInfo.start"
+                    ),
+                    FTL.TextElement('<label data-l10n-name="learn-more">'),
+                    COPY(
+                        "toolkit/chrome/mozapps/extensions/extensions.dtd",
+                        "disabledUnsigned.devInfo.linkToManual"
+                    ),
+                    FTL.TextElement("</label>"),
+                    COPY(
+                        "toolkit/chrome/mozapps/extensions/extensions.dtd",
+                        "disabledUnsigned.devInfo.end"
+                    )
+                )
+            ),
+            FTL.Message(
+                id=FTL.Identifier("plugin-deprecation-description"),
+                value=CONCAT(
+                    REPLACE(
+                        "toolkit/chrome/mozapps/extensions/extensions.dtd",
+                        "pluginDeprecation.description",
+                        {
+                            "&brandShortName;": TERM_REFERENCE("-brand-short-name")
+                        }
+                    ),
+                    FTL.TextElement(' <label data-l10n-name="learn-more">'),
+                    COPY(
+                        "toolkit/chrome/mozapps/extensions/extensions.dtd",
+                        "pluginDeprecation.learnMore"
+                    ),
+                    FTL.TextElement("</label>")
+                )
+            ),
+            FTL.Message(
+                id=FTL.Identifier("legacy-extensions-description"),
+                value=CONCAT(
+                    REPLACE(
+                        "toolkit/chrome/mozapps/extensions/extensions.dtd",
+                        "legacyExtensions.description",
+                        {
+                            "&brandShortName;": TERM_REFERENCE("-brand-short-name")
+                        }
+                    ),
+                    FTL.TextElement('<label data-l10n-name="legacy-learn-more">'),
+                    COPY(
+                        "toolkit/chrome/mozapps/extensions/extensions.dtd",
+                        "legacyExtensions.learnMore"
+                    ),
+                    FTL.TextElement("</label>")
+                )
+            )
+        ]
+    )
--- a/toolkit/locales/en-US/chrome/mozapps/extensions/extensions.dtd
+++ b/toolkit/locales/en-US/chrome/mozapps/extensions/extensions.dtd
@@ -1,53 +1,26 @@
 <!-- This Source Code Form is subject to the terms of the Mozilla Public
    - License, v. 2.0. If a copy of the MPL was not distributed with this
    - file, You can obtain one at http://mozilla.org/MPL/2.0/. -->
-<!ENTITY addons.windowTitle                   "Add-ons Manager">
-
-<!ENTITY search.placeholder3                  "Search addons.mozilla.org">
-<!ENTITY search.buttonlabel                   "Search">
-<!-- LOCALIZATION NOTE (search.commandkey):
-     The search command key should match findOnCmd.commandkey from browser.dtd -->
-<!ENTITY search.commandkey                    "f">
-
-<!ENTITY loading.label                        "Loading…">
-<!ENTITY listEmpty.installed.label            "You don’t have any add-ons of this type installed">
-<!ENTITY listEmpty.availableUpdates.label     "No updates found">
-<!ENTITY listEmpty.recentUpdates.label        "You haven’t recently updated any add-ons">
-<!ENTITY listEmpty.findUpdates.label          "Check For Updates">
-<!ENTITY listEmpty.button.label               "Learn more about add-ons">
-<!ENTITY installAddonFromFile.label           "Install Add-on From File…">
-<!ENTITY installAddonFromFile.accesskey       "I">
-<!ENTITY toolsMenu.tooltip                    "Tools for all add-ons">
-
-
-<!ENTITY showUnsignedExtensions.button.label  "Some extensions could not be verified">
-<!ENTITY showAllExtensions.button.label       "Show all extensions">
-<!ENTITY debugAddons.label                    "Debug Add-ons">
-<!ENTITY debugAddons.accesskey                "B">
 
 <!-- global warnings -->
 <!ENTITY warning.safemode.label                    "All add-ons have been disabled by safe mode.">
 <!ENTITY warning.checkcompatibility.label          "Add-on compatibility checking is disabled. You may have incompatible add-ons.">
 <!ENTITY warning.checkcompatibility.enable.label   "Enable">
 <!ENTITY warning.checkcompatibility.enable.tooltip "Enable add-on compatibility checking">
 <!ENTITY warning.updatesecurity.label              "Add-on update security checking is disabled. You may be compromised by updates.">
 <!ENTITY warning.updatesecurity.enable.label       "Enable">
 <!ENTITY warning.updatesecurity.enable.tooltip     "Enable add-on update security checking">
 
 <!-- categories / views -->
 <!ENTITY view.discover.label                  "Get Add-ons">
 <!ENTITY view.recentUpdates.label             "Recent Updates">
 <!ENTITY view.availableUpdates.label          "Available Updates">
 
-<!ENTITY helpButton.label                      "Add-ons Support">
-<!ENTITY preferencesWin.label                  "&brandShortName; Options">
-<!ENTITY preferencesUnix.label                 "&brandShortName; Preferences">
-
 <!-- addon updates -->
 <!ENTITY updates.checkForUpdates.label        "Check for Updates">
 <!ENTITY updates.checkForUpdates.accesskey    "C">
 <!ENTITY updates.viewUpdates.label            "View Recent Updates">
 <!ENTITY updates.viewUpdates.accesskey        "V">
 <!-- LOCALIZATION NOTE (updates.updateAddonsAutomatically.label): This menu item
      is a checkbox that toggles the default global behavior for add-on update
      checking. -->
@@ -68,106 +41,64 @@
 <!ENTITY updates.downloaded.label             "Your add-on updates have been downloaded.">
 <!ENTITY updates.restart.label                "Restart now to complete installation">
 <!ENTITY updates.noneFound.label              "No updates found">
 <!ENTITY updates.manualUpdatesFound.label     "View Available Updates">
 <!ENTITY updates.updateSelected.label         "Install Updates">
 <!ENTITY updates.updateSelected.tooltip       "Install available updates in this list">
 
 <!-- addon actions -->
-<!ENTITY cmd.showDetails.label                "Show More Information">
-<!ENTITY cmd.showDetails.accesskey            "S">
-<!ENTITY cmd.findUpdates.label                "Find Updates">
-<!ENTITY cmd.findUpdates.accesskey            "F">
-<!ENTITY cmd.preferencesWin.label             "Options">
-<!ENTITY cmd.preferencesWin.accesskey         "O">
-<!ENTITY cmd.preferencesUnix.label            "Preferences">
-<!ENTITY cmd.preferencesUnix.accesskey        "P">
+
+
+
+
+
+
+
+
 
 <!ENTITY cmd.enableAddon.label                "Enable">
 <!ENTITY cmd.enableAddon.accesskey            "E">
 <!ENTITY cmd.disableAddon.label               "Disable">
 <!ENTITY cmd.disableAddon.accesskey           "D">
-<!ENTITY cmd.enableTheme.label                "Wear Theme">
-<!ENTITY cmd.enableTheme.accesskey            "W">
-<!ENTITY cmd.disableTheme.label               "Stop Wearing Theme">
-<!ENTITY cmd.disableTheme.accesskey           "W">
+
+
+
+
 <!ENTITY cmd.askToActivate.label              "Ask to Activate">
 <!ENTITY cmd.askToActivate.tooltip            "Ask to use this add-on each time">
 <!ENTITY cmd.alwaysActivate.label             "Always Activate">
 <!ENTITY cmd.alwaysActivate.tooltip           "Always use this add-on">
 <!ENTITY cmd.neverActivate.label              "Never Activate">
 <!ENTITY cmd.neverActivate.tooltip            "Never use this add-on">
 <!ENTITY cmd.stateMenu.tooltip                "Change when this add-on runs">
-<!ENTITY cmd.installAddon.label               "Install">
-<!ENTITY cmd.installAddon.accesskey           "I">
+
+
 <!ENTITY cmd.uninstallAddon.label             "Remove">
 <!ENTITY cmd.uninstallAddon.accesskey         "R">
 <!ENTITY cmd.showPreferencesWin.label         "Options">
 <!ENTITY cmd.showPreferencesWin.tooltip       "Change this add-on’s options">
 <!ENTITY cmd.showPreferencesUnix.label        "Preferences">
 <!ENTITY cmd.showPreferencesUnix.tooltip      "Change this add-on’s preferences">
-<!ENTITY cmd.contribute.label                 "Contribute">
-<!ENTITY cmd.contribute.accesskey             "C">
-<!ENTITY cmd.contribute.tooltip               "Contribute to the development of this add-on">
+
+
+
 
 <!ENTITY cmd.showReleaseNotes.label           "Show Release Notes">
 <!ENTITY cmd.showReleaseNotes.tooltip         "Show the release notes for this update">
 <!ENTITY cmd.hideReleaseNotes.label           "Hide Release Notes">
 <!ENTITY cmd.hideReleaseNotes.tooltip         "Hide the release notes for this update">
 <!ENTITY cmd.findReplacement.label            "Find a Replacement">
 
-<!-- discovery view -->
-<!-- LOCALIZATION NOTE (discover.title,discover.description,discover.footer):
-     Displayed in the center of the Get Add-ons view, see bug 601143 for mockups. -->
-<!ENTITY discover.title                       "What are Add-ons?">
-<!ENTITY discover.description2                "Add-ons are applications that let you personalize &brandShortName; with
-  extra functionality or style. Try a time-saving sidebar, a weather notifier, or a themed look to make &brandShortName;
-  your own.">
-<!ENTITY discover.footer                      "When you’re connected to the internet, this pane will feature
-  some of the best and most popular add-ons for you to try out.">
-
-<!-- detail view -->
-<!ENTITY detail.version.label                 "Version">
-<!ENTITY detail.lastupdated.label             "Last Updated">
-<!ENTITY detail.creator.label                 "Developer">
-<!ENTITY detail.homepage.label                "Homepage">
-
-<!ENTITY detail.contributions.description     "The developer of this add-on asks that you help support its continued development by making a small contribution.">
 
-<!ENTITY detail.updateType                    "Automatic Updates">
-<!ENTITY detail.updateDefault.label           "Default">
-<!ENTITY detail.updateDefault.tooltip         "Automatically install updates only if that’s the default">
-<!ENTITY detail.updateAutomatic.label         "On">
-<!ENTITY detail.updateAutomatic.tooltip       "Automatically install updates">
-<!ENTITY detail.updateManual.label            "Off">
-<!ENTITY detail.updateManual.tooltip          "Don’t automatically install updates">
-<!ENTITY detail.home                          "Homepage">
-<!ENTITY detail.repository                    "Add-on Profile">
-<!ENTITY detail.size                          "Size">
+<!-- download/install progress -->
 
-<!ENTITY detail.checkForUpdates.label         "Check for Updates">
-<!ENTITY detail.checkForUpdates.accesskey     "F">
-<!ENTITY detail.checkForUpdates.tooltip       "Check for updates for this add-on">
-<!ENTITY detail.showPreferencesWin.label      "Options">
-<!ENTITY detail.showPreferencesWin.accesskey  "O">
-<!ENTITY detail.showPreferencesWin.tooltip    "Change this add-on’s options">
-<!ENTITY detail.showPreferencesUnix.label     "Preferences">
-<!ENTITY detail.showPreferencesUnix.accesskey "P">
-<!ENTITY detail.showPreferencesUnix.tooltip   "Change this add-on’s preferences">
+<!ENTITY progress.cancel.tooltip              "Cancel">
 
 
-<!-- ratings -->
-<!ENTITY rating2.label                        "Rating">
-
-<!-- download/install progress -->
-<!ENTITY progress.pause.tooltip               "Pause">
-<!ENTITY progress.cancel.tooltip              "Cancel">
-
-<!ENTITY addon.homepage                       "Homepage">
 <!ENTITY addon.details.label                  "More">
 <!ENTITY addon.details.tooltip                "Show more details about this add-on">
 <!ENTITY addon.unknownDate                    "Unknown">
 <!-- LOCALIZATION NOTE (addon.legacy.label): This appears in a badge next
      to the add-on name for extensions that are not webextensions, which
      will stop working in Firefox 57. -->
 <!ENTITY addon.legacy.label                   "LEGACY">
 <!-- LOCALIZATION NOTE (addon.disabled.postfix): This is used in a normal list
@@ -178,17 +109,17 @@
      updates list to signify that an item is an update, in the form
      "<Addon name> <1.1> Update". It is fine to use constructs like brackets if
      necessary -->
 <!ENTITY addon.update.postfix                 "Update">
 <!ENTITY addon.undoAction.label               "Undo">
 <!ENTITY addon.undoAction.tooltip             "Undo this action">
 <!ENTITY addon.undoRemove.label               "Undo">
 <!ENTITY addon.undoRemove.tooltip             "Keep this add-on installed">
-<!ENTITY addon.restartNow.label               "Restart now">
+
 <!ENTITY addon.install.label                  "Install">
 <!ENTITY addon.install.tooltip                "Install this add-on">
 <!ENTITY addon.updateNow.label                "Update Now">
 <!ENTITY addon.updateNow.tooltip              "Install the update for this add-on">
 <!ENTITY addon.includeUpdate.label            "Include in Update">
 <!ENTITY addon.updateAvailable.label          "An update is available">
 <!ENTITY addon.checkingForUpdates.label       "Checking for updates…">
 <!ENTITY addon.releaseNotes.label             "Release Notes:">
@@ -200,31 +131,8 @@
 <!ENTITY eula.title                           "End-User License Agreement">
 <!ENTITY eula.width                           "560px">
 <!ENTITY eula.height                          "400px">
 <!ENTITY eula.accept                          "Accept and Install…">
 
 <!ENTITY settings.path.button.label           "Browse…">
 
 <!ENTITY setting.learnmore "Learn More…">
-
-<!ENTITY disabledUnsigned.heading "Some add-ons have been disabled">
-<!-- LOCALIZATION NOTE (disabledUnsigned.description.start, disabledUnsigned.description.findAddonsLink, disabledUnsigned.description.end):
-     These entities form a sentence, with
-     disabledUnsigned.description.findAddonsLink being a link to an external site. -->
-<!ENTITY disabledUnsigned.description.start "The following add-ons have not been verified for use in &brandShortName;. You can ">
-<!ENTITY disabledUnsigned.description.findAddonsLink "find replacements">
-<!ENTITY disabledUnsigned.description.end " or ask the developer to get them verified.">
-<!ENTITY disabledUnsigned.learnMore "Learn more about our efforts to help keep you safe online.">
-<!-- LOCALIZATION NOTE (disabledUnsigned.devInfo.start, disabledUnsigned.devInfo.linkToManual, disabledUnsigned.devInfo.end):
-     These entities form a sentence, with disabledUnsigned.devInfo.linkToManual
-     being a link to an external site. -->
-<!ENTITY disabledUnsigned.devInfo.start "Developers interested in getting their add-ons verified can continue by reading our ">
-<!ENTITY disabledUnsigned.devInfo.linkToManual "manual">
-<!ENTITY disabledUnsigned.devInfo.end ".">
-
-<!ENTITY pluginDeprecation.description "Missing something? Some plugins are no longer supported by &brandShortName;.">
-<!ENTITY pluginDeprecation.learnMore "Learn More.">
-
-<!ENTITY legacyWarning.showLegacy "Show legacy extensions">
-<!ENTITY legacyExtensions.title "Legacy Extensions">
-<!ENTITY legacyExtensions.description "These extensions do not meet current &brandShortName; standards so they have been deactivated.">
-<!ENTITY legacyExtensions.learnMore "Learn about the changes to add-ons">
new file mode 100644
--- /dev/null
+++ b/toolkit/locales/en-US/toolkit/about/aboutAddons.ftl
@@ -0,0 +1,193 @@
+# This Source Code Form is subject to the terms of the Mozilla Public
+# License, v. 2.0. If a copy of the MPL was not distributed with this
+# file, You can obtain one at http://mozilla.org/MPL/2.0/.
+
+addons-window = 
+    .title = Add-ons Manager
+
+search-header =
+    .placeholder = Search addons.mozilla.org
+    .searchbuttonlabel = Search
+
+search-header-shortcut =
+    .key = f
+
+loading-label = 
+    .value = Loading…
+
+list-empty-installed = 
+    .value = You don’t have any add-ons of this type installed
+
+list-empty-available-updates = 
+    .value = No updates found
+
+list-empty-recent-updates =
+    .value = You haven’t recently updated any add-ons
+
+list-empty-find-updates =
+    .label = Check For Updates
+
+list-empty-button = 
+    .label = Learn more about add-ons
+
+install-addon-from-file =
+    .label = Install Add-on From File…
+    .accesskey = I
+
+help-button = Add-ons Support
+
+preferences = 
+    { PLATFORM() ->
+        [windows] { -brand-short-name } Options
+       *[other] { -brand-short-name } Preferences
+    }
+
+tools-menu =
+    .tooltiptext = Tools for all add-ons
+
+show-unsigned-extensions-button =
+    .label = Some extensions could not be verified
+
+show-all-extensions-button = 
+    .label = Show all extensions
+
+debug-addons =
+    .label = Debug Add-ons
+    .accesskey = b
+
+cmd-show-details =
+    .label = Show More Information
+    .accesskey = S
+
+cmd-find-updates = 
+    .label = Find Updates
+    .accesskey = F
+
+cmd-preferences = 
+    .label = 
+        { PLATFORM() ->
+            [windows] Options
+           *[other] Preferences
+        }
+    .accesskey = 
+        { PLATFORM() ->
+            [windows] O
+           *[other] P
+        }
+
+cmd-enable-theme =
+    .label = Wear Theme
+    .accesskey = W
+
+cmd-disable-theme =
+    .label = Stop Wearing Theme
+    .accesskey = W
+
+cmd-install-addon =
+    .label = Install
+    .accesskey = I
+
+cmd-contribute =
+    .label = Contribute
+    .accesskey = C
+    .tooltiptext = Contribute to the development of this add-on
+
+discover-title = What are Add-ons?
+
+discover-description = 
+    Add-ons are applications that let you personalize { -brand-short-name } with
+    extra functionality or style. Try a time-saving sidebar, a weather notifier, or a themed look to make { -brand-short-name }
+    your own.
+
+discover-footer = 
+    When you’re connected to the internet, this pane will feature
+    some of the best and most popular add-ons for you to try out.
+
+detail-version =
+    .label = Version
+
+detail-last-updated =
+    .label = Last Updated
+
+detail-contributions-description = The developer of this add-on asks that you help support its continued development by making a small contribution.
+
+detail-update-type = 
+    .value = Automatic Updates
+
+detail-update-default = 
+    .label = Default
+    .tooltiptext = Automatically install updates only if that’s the default
+
+detail-update-automatic = 
+    .label = On
+    .tooltiptext = Automatically install updates
+
+detail-update-manual =
+    .label = Off
+    .tooltiptext = Don’t automatically install updates
+
+detail-home = 
+    .label = Homepage
+
+detail-home-value =
+    .value = { detail-home.label }
+
+detail-repository = 
+    .label = Add-on Profile
+
+detail-repository-value =
+    .value = { detail-repository.label }
+
+detail-check-for-updates =
+    .label = Check for Updates
+    .accesskey = F
+    .tooltiptext = Check for updates for this add-on
+
+detail-show-preferences =
+    .label =
+        { PLATFORM() ->
+            [windows] Options
+           *[other] Preferences
+        }
+    .accesskey =
+        { PLATFORM() ->
+            [windows] O
+           *[other] P
+        }
+    .tooltiptext =
+        { PLATFORM() ->
+            [windows] Change this add-on’s options
+           *[other] Change this add-on’s preferences
+        }
+
+detail-rating = 
+    .value = Rating
+
+addon-restart-now =
+    .label = Restart now
+
+disabled-unsigned-heading =
+    .value = Some add-ons have been disabled
+
+disabled-unsigned-description =
+    The following add-ons have not been verified for use in { -brand-short-name }. You can
+    <label data-l10n-name="find-addons">find replacements</label> or ask the developer to get them verified.
+
+disabled-unsigned-learn-more = Learn more about our efforts to help keep you safe online.
+
+disabled-unsigned-devinfo =
+    Developers interested in getting their add-ons verified can continue by reading our 
+    <label data-l10n-name="learn-more">manual</label>.
+
+plugin-deprecation-description =
+    Missing something? Some plugins are no longer supported by { -brand-short-name }. <label data-l10n-name="learn-more">Learn More.</label>
+
+legacy-warning-show-legacy = Show legacy extensions
+
+legacy-extensions =
+    .value = Legacy Extensions
+
+legacy-extensions-description = 
+    These extensions do not meet current { -brand-short-name } standards so they have been deactivated.<label data-l10n-name="legacy-learn-more">Learn about the changes to add-ons</label>
+
+
--- a/toolkit/mozapps/extensions/content/extensions.xul
+++ b/toolkit/mozapps/extensions/content/extensions.xul
@@ -11,64 +11,57 @@
 <!ENTITY % brandDTD SYSTEM "chrome://branding/locale/brand.dtd" >
 %brandDTD;
 <!ENTITY % extensionsDTD SYSTEM "chrome://mozapps/locale/extensions/extensions.dtd">
 %extensionsDTD;
 ]>
 
 <page xmlns="http://www.mozilla.org/keymaster/gatekeeper/there.is.only.xul"
       xmlns:xhtml="http://www.w3.org/1999/xhtml"
-      id="addons-page" title="&addons.windowTitle;"
+      id="addons-page" data-l10n-id="addons-window"
       role="application" windowtype="Addons:Manager"
       disablefastfind="true">
 
   <xhtml:link rel="shortcut icon"
               href="chrome://mozapps/skin/extensions/extensionGeneric-16.svg"/>
+  <linkset>
+    <link rel="localization" href="branding/brand.ftl"/>
+    <link rel="localization" href="toolkit/about/aboutAddons.ftl"/>
+  </linkset>
 
   <script type="application/javascript"
           src="chrome://mozapps/content/extensions/extensions.js"/>
   <script type="application/javascript"
           src="chrome://global/content/contentAreaUtils.js"/>
 
   <popupset>
     <!-- menu for an addon item -->
     <menupopup id="addonitem-popup">
       <menuitem id="menuitem_showDetails" command="cmd_showItemDetails"
-                default="true" label="&cmd.showDetails.label;"
-                accesskey="&cmd.showDetails.accesskey;"/>
+                default="true" data-l10n-id="cmd-show-details"/>
       <menuitem id="menuitem_enableItem" command="cmd_enableItem"
                 label="&cmd.enableAddon.label;"
                 accesskey="&cmd.enableAddon.accesskey;"/>
       <menuitem id="menuitem_disableItem" command="cmd_disableItem"
                 label="&cmd.disableAddon.label;"
                 accesskey="&cmd.disableAddon.accesskey;"/>
       <menuitem id="menuitem_enableTheme" command="cmd_enableItem"
-                label="&cmd.enableTheme.label;"
-                accesskey="&cmd.enableTheme.accesskey;"/>
+                data-l10n-id="cmd-enable-theme"/>
       <menuitem id="menuitem_disableTheme" command="cmd_disableItem"
-                label="&cmd.disableTheme.label;"
-                accesskey="&cmd.disableTheme.accesskey;"/>
+                data-l10n-id="cmd-disable-theme"/>
       <menuitem id="menuitem_installItem" command="cmd_installItem"
-                label="&cmd.installAddon.label;"
-                accesskey="&cmd.installAddon.accesskey;"/>
+                data-l10n-id="cmd-install-addon"/>
       <menuitem id="menuitem_uninstallItem" command="cmd_uninstallItem"
                 label="&cmd.uninstallAddon.label;"
                 accesskey="&cmd.uninstallAddon.accesskey;"/>
       <menuseparator id="addonitem-menuseparator" />
       <menuitem id="menuitem_preferences" command="cmd_showItemPreferences"
-#ifdef XP_WIN
-                label="&cmd.preferencesWin.label;"
-                accesskey="&cmd.preferencesWin.accesskey;"/>
-#else
-                label="&cmd.preferencesUnix.label;"
-                accesskey="&cmd.preferencesUnix.accesskey;"/>
-#endif
+                data-l10n-id="cmd-preferences"/>
       <menuitem id="menuitem_findUpdates" command="cmd_findItemUpdates"
-                label="&cmd.findUpdates.label;"
-                accesskey="&cmd.findUpdates.accesskey;"/>
+                data-l10n-id="cmd-find-updates"/>
     </menupopup>
 
     <menulist popuponly="true" id="ContentSelectDropdown" hidden="true">
       <menupopup rolluponmousewheel="true"
                  activateontab="true" position="after_start"
                  level="parent"
 #ifdef XP_WIN
                  consumeoutsideclicks="false" ignorekeys="shortcuts"
@@ -122,18 +115,18 @@
     <command id="cmd_cancelOperation"/>
     <command id="cmd_contribute"/>
     <command id="cmd_askToActivateItem"/>
     <command id="cmd_alwaysActivateItem"/>
     <command id="cmd_neverActivateItem"/>
   </commandset>
 
   <keyset>
-    <key id="focusSearch" key="&search.commandkey;" modifiers="accel"
-         command="cmd_focusSearch"/>
+    <key id="focusSearch" data-l10n-id="search-header-shortcut"
+         modifiers="accel" command="cmd_focusSearch"/>
   </keyset>
   <hbox flex="1">
     <vbox id="category-box">
       <!-- category list -->
       <richlistbox id="categories" flex="1">
         <richlistitem id="category-discover" value="addons://discover/"
                       class="category"
                       name="&view.discover.label;" priority="1000"
@@ -153,60 +146,54 @@
       </richlistbox>
 
       <spacer flex="1"/>
 
       <hbox class="sidebar-footer-button" pack="center">
         <label id="preferencesButton" class="text-link">
           <hbox align="center">
             <image class="sidebar-footer-icon preferences-icon"/>
-            <label class="sidebar-footer-label" flex="1">
-#ifdef XP_WIN
-                &preferencesWin.label;
-#else
-                &preferencesUnix.label;
-#endif
-            </label>
+            <label class="sidebar-footer-label" data-l10n-id="preferences" flex="1"/>
           </hbox>
         </label>
       </hbox>
 
       <hbox class="sidebar-footer-button help-button" pack="center">
         <label id="helpButton" class="text-link">
           <hbox align="center">
             <image class="sidebar-footer-icon help-icon"/>
-            <label class="sidebar-footer-label" flex="1">&helpButton.label;</label>
+            <label class="sidebar-footer-label" data-l10n-id="help-button" flex="1"/>
           </hbox>
         </label>
       </hbox>
     </vbox>
 
     <vbox class="main-content" flex="1">
       <!-- view port -->
       <deck id="view-port" flex="1" selectedIndex="0">
         <!-- discover view -->
         <deck id="discover-view" flex="1" class="view-pane" selectedIndex="0" tabindex="0">
           <vbox id="discover-loading" align="center" pack="stretch" flex="1" class="alert-container">
             <spacer class="alert-spacer-before"/>
             <hbox class="alert loading" align="center">
               <image/>
-              <label value="&loading.label;"/>
+              <label data-l10n-id="loading-label"/>
             </hbox>
             <spacer class="alert-spacer-after"/>
           </vbox>
           <vbox id="discover-error" align="center" pack="stretch" flex="1" class="alert-container">
             <spacer class="alert-spacer-before"/>
             <hbox>
               <spacer class="discover-spacer-before"/>
               <vbox class="alert" align="center">
                 <image class="discover-logo"/>
                 <vbox flex="1" align="stretch">
-                  <label class="discover-title">&discover.title;</label>
-                  <description class="discover-description">&discover.description2;</description>
-                  <description class="discover-footer">&discover.footer;</description>
+                  <label class="discover-title" data-l10n-id="discover-title"></label>
+                  <description class="discover-description" data-l10n-id="discover-description"></description>
+                  <description class="discover-footer" data-l10n-id="discover-footer"></description>
                 </vbox>
               </vbox>
               <spacer class="discover-spacer-after"/>
             </hbox>
             <spacer class="alert-spacer-after"/>
           </vbox>
 
           <browser id="discover-browser" type="content" flex="1"
@@ -214,27 +201,26 @@
         </deck>
 
         <!-- container for views with the search/tools header -->
         <vbox id="headered-views" flex="1">
           <!-- main header -->
           <hbox id="header">
             <hbox id="header-inner" align="center">
               <button id="show-all-extensions" hidden="true"
-                      label="&showAllExtensions.button.label;"
+                      data-l10n-id="show-all-extensions-button"
                       command="cmd_showAllExtensions"/>
               <spacer flex="1"/>
               <button id="show-disabled-unsigned-extensions" hidden="true"
-                      class="warning"
-                      label="&showUnsignedExtensions.button.label;"
+                      class="warning" data-l10n-id="show-unsigned-extensions-button"
                       command="cmd_showUnsignedExtensions"/>
               <label id="search-label" control="header-search"/>
               <textbox id="header-search" type="search" searchbutton="true"
-                       searchbuttonlabel="&search.buttonlabel;"
-                       placeholder="&search.placeholder3;" maxlength="100"/>
+                       data-l10n-id="search-header"
+                       data-l10n-attrs="searchbuttonlabel" maxlength="100"/>
             </hbox>
           </hbox>
 
           <deck id="headered-views-content" flex="1" selectedIndex="0">
             <!-- list view -->
             <vbox id="list-view" flex="1" class="view-pane" align="stretch" tabindex="0">
               <hbox id="list-view-heading">
                 <hbox class="list-view-heading-inner">
@@ -254,34 +240,32 @@
                     <label id="updates-downloaded" hidden="true"
                            value="&updates.downloaded.label;"/>
                     <button id="updates-restart-btn" class="button-link" hidden="true"
                             label="&updates.restart.label;"
                             command="cmd_restartApp"/>
                   </hbox>
 
                   <toolbarbutton id="header-utils-btn" class="header-button" type="menu"
-                                 tooltiptext="&toolsMenu.tooltip;">
+                           data-l10n-id="tools-menu">
                     <menupopup id="utils-menu">
                       <menuitem id="utils-updateNow"
                                 label="&updates.checkForUpdates.label;"
                                 accesskey="&updates.checkForUpdates.accesskey;"
                                 command="cmd_findAllUpdates"/>
                       <menuitem id="utils-viewUpdates"
                                 label="&updates.viewUpdates.label;"
                                 accesskey="&updates.viewUpdates.accesskey;"
                                 command="cmd_goToRecentUpdates"/>
                       <menuseparator id="utils-installFromFile-separator"/>
                       <menuitem id="utils-installFromFile"
-                                label="&installAddonFromFile.label;"
-                                accesskey="&installAddonFromFile.accesskey;"
+                          data-l10n-id="install-addon-from-file"
                                 command="cmd_installFromFile"/>
                       <menuitem id="utils-debugAddons"
-                                label="&debugAddons.label;"
-                                accesskey="&debugAddons.accesskey;"
+                          data-l10n-id="debug-addons"
                                 command="cmd_debugAddons"/>
                       <menuseparator/>
                       <menuitem id="utils-autoUpdateDefault"
                                 label="&updates.updateAddonsAutomatically.label;"
                                 accesskey="&updates.updateAddonsAutomatically.accesskey;"
                                 type="checkbox" autocheck="false"
                                 command="cmd_toggleAutoUpdateDefault"/>
                       <menuitem id="utils-resetAddonUpdatesToAutomatic"
@@ -294,38 +278,37 @@
                                 command="cmd_resetAddonAutoUpdate"/>
                     </menupopup>
                   </toolbarbutton>
                 </hbox>
               </hbox>
 
               <!-- info UI for add-ons that have been disabled for being unsigned -->
               <vbox id="disabled-unsigned-addons-info" hidden="true">
-                <label id="disabled-unsigned-addons-heading" value="&disabledUnsigned.heading;"/>
-                <description>
-                  &disabledUnsigned.description.start;<label class="text-link plain" id="find-alternative-addons">&disabledUnsigned.description.findAddonsLink;</label>&disabledUnsigned.description.end;
+                <label id="disabled-unsigned-addons-heading" data-l10n-id="disabled-unsigned-heading"/>
+                <description data-l10n-id="disabled-unsigned-description">
+                  <label class="text-link plain" id="find-alternative-addons" data-l10n-name="find-addons"/>
                 </description>
-                <hbox pack="start"><label class="text-link" id="signing-learn-more">&disabledUnsigned.learnMore;</label></hbox>
-                <description id="signing-dev-info">
-                  &disabledUnsigned.devInfo.start;<label class="text-link plain" id="signing-dev-manual-link">&disabledUnsigned.devInfo.linkToManual;</label>&disabledUnsigned.devInfo.end;
+                <hbox pack="start"><label class="text-link" id="signing-learn-more" data-l10n-id="disabled-unsigned-learn-more"></label></hbox>
+                <description id="signing-dev-info" data-l10n-id="disabled-unsigned-devinfo">
+                  <label class="text-link plain" id="signing-dev-manual-link" data-l10n-name="learn-more"/>
                 </description>
               </vbox>
               <vbox id="legacy-extensions-notice" class="alert-container" hidden="true">
                 <vbox class="alert">
                   <description id="legacy-extensions-description">
-                    <label class="text-link plain" id="legacy-extensions-learnmore-link">&legacyWarning.showLegacy;</label>
+                    <label class="text-link plain" id="legacy-extensions-learnmore-link" data-l10n-id="legacy-warning-show-legacy"/>
                   </description>
                 </vbox>
               </vbox>
               <vbox id="plugindeprecation-notice" class="list-view-notice" align="start">
                 <hbox class="message-bar">
                   <image class="message-bar-icon"/>
-                  <description class="message-bar-description">
-                    &pluginDeprecation.description;
-                    <label class="text-link plain" id="plugindeprecation-learnmore-link">&pluginDeprecation.learnMore;</label>
+                  <description class="message-bar-description" data-l10n-id="plugin-deprecation-description">
+                    <label class="text-link plain" id="plugindeprecation-learnmore-link" data-l10n-name="learn-more"></label>
                   </description>
                 </hbox>
               </vbox>
               <hbox class="view-header global-warning-container">
                 <!-- global warnings -->
                 <hbox class="global-warning" flex="1">
                   <hbox class="global-warning-safemode" flex="1" align="center"
                         tooltiptext="&warning.safemode.label;">
@@ -355,34 +338,33 @@
                           command="cmd_enableUpdateSecurity"/>
                   <spacer flex="5000"/> <!-- Necessary to allow the message to wrap -->
                 </hbox>
               </hbox>
               <vbox id="addon-list-empty" class="alert-container"
                     flex="1" hidden="true">
                 <spacer class="alert-spacer-before"/>
                 <vbox class="alert">
-                  <label value="&listEmpty.installed.label;"/>
+                  <label data-l10n-id="list-empty-installed"/>
                   <button class="discover-button"
                           id="discover-button-install"
-                          label="&listEmpty.button.label;"
+                          data-l10n-id="list-empty-button"
                           command="cmd_goToDiscoverPane"/>
                 </vbox>
                 <spacer class="alert-spacer-after"/>
               </vbox>
               <richlistbox id="addon-list" class="list" flex="1"/>
             </vbox>
 
             <!-- legacy extensions view -->
             <vbox id="legacy-view" flex="1" class="view-pane" align="stretch" tabindex="0">
               <vbox id="legacy-extensions-info">
-                <label id="legacy-extensions-heading" value="&legacyExtensions.title;"/>
-                <description>
-                  &legacyExtensions.description;
-                  <label class="text-link plain" id="legacy-learnmore">&legacyExtensions.learnMore;</label>
+                <label id="legacy-extensions-heading" data-l10n-id="legacy-extensions"/>
+                <description data-l10n-id="legacy-extensions-description">
+                  <label class="text-link plain" id="legacy-learnmore" data-l10n-name="legacy-learn-more"></label>
                 </description>
               </vbox>
               <richlistbox id="legacy-list" class="list" flex="1"/>
             </vbox>
 
             <!-- updates view -->
             <vbox id="updates-view" flex="1" class="view-pane" tabindex="0">
               <hbox class="view-header global-warning-container" align="center">
@@ -416,19 +398,19 @@
                           command="cmd_enableUpdateSecurity"/>
                   <spacer flex="5000"/> <!-- Necessary to allow the message to wrap -->
                 </hbox>
               </hbox>
               <vbox id="updates-list-empty" class="alert-container"
                     flex="1" hidden="true">
                 <spacer class="alert-spacer-before"/>
                 <vbox class="alert">
-                  <label id="empty-availableUpdates-msg" value="&listEmpty.availableUpdates.label;"/>
-                  <label id="empty-recentUpdates-msg" value="&listEmpty.recentUpdates.label;"/>
-                  <button label="&listEmpty.findUpdates.label;"
+                  <label id="empty-availableUpdates-msg" data-l10n-id="list-empty-available-updates"/>
+                  <label id="empty-recentUpdates-msg" data-l10n-id="list-empty-recent-updates"/>
+                  <button data-l10n-id="list-empty-find-updates"
                           command="cmd_findAllUpdates"/>
                 </vbox>
                 <spacer class="alert-spacer-after"/>
               </vbox>
               <hbox id="update-actions" pack="center">
                 <button id="update-selected-btn" hidden="true"
                         label="&updates.updateSelected.label;"
                         tooltiptext="&updates.updateSelected.tooltip;"/>
@@ -470,17 +452,17 @@
                 <spacer flex="5000"/> <!-- Necessary to allow the message to wrap -->
               </hbox>
               <hbox class="detail-view-wrapper">
                 <!-- "loading" splash screen -->
                 <vbox class="alert-container">
                   <spacer class="alert-spacer-before"/>
                   <hbox class="alert loading">
                     <image/>
-                    <label value="&loading.label;"/>
+                    <label data-l10n-id="loading-label"/>
                   </hbox>
                   <spacer class="alert-spacer-after"/>
                 </vbox>
                 <!-- actual detail view -->
                 <vbox class="detail-view-container" contextmenu="addonitem-popup">
                   <vbox id="detail-notifications">
                     <hbox id="warning-container" align="center" class="warning">
                       <image class="warning-icon"/>
@@ -493,17 +475,17 @@
                       <label id="detail-error" flex="1"/>
                       <label id="detail-error-link" class="text-link"/>
                       <spacer flex="5000"/> <!-- Necessary to allow the message to wrap -->
                     </hbox>
                     <hbox id="pending-container" align="center" class="pending">
                       <image class="pending-icon"/>
                       <label id="detail-pending" flex="1"/>
                       <button id="detail-restart-btn" class="button-link"
-                              label="&addon.restartNow.label;"
+                              data-l10n-id="addon-restart-now"
                               command="cmd_restartApp"/>
                       <button id="detail-undo-btn" class="button-link"
                               label="&addon.undoAction.label;"
                               tooltipText="&addon.undoAction.tooltip;"
                               command="cmd_cancelOperation"/>
                       <spacer flex="5000"/> <!-- Necessary to allow the message to wrap -->
                     </hbox>
                   </vbox>
@@ -526,105 +508,87 @@
                           <label id="detail-creator" class="creator"/>
                         </vbox>
                       </hbox>
                       <vbox id="detail-desc-container" align="start" flex="1">
                         <description id="detail-desc"/>
                         <description id="detail-fulldesc"/>
                       </vbox>
                       <vbox id="detail-contributions">
-                        <description id="detail-contrib-description">
-                          &detail.contributions.description;
-                        </description>
+                        <description id="detail-contrib-description" data-l10n-id="detail-contributions-description"/>
                         <hbox align="center">
                           <spacer flex="1"/>
                           <button id="detail-contrib-btn"
-                                  label="&cmd.contribute.label;"
-                                  accesskey="&cmd.contribute.accesskey;"
-                                  tooltiptext="&cmd.contribute.tooltip;"
+                                  data-l10n-id="cmd-contribute"
                                   command="cmd_contribute"/>
                         </hbox>
                       </vbox>
                       <grid id="detail-grid">
                         <columns>
                            <column flex="1"/>
                            <column flex="2"/>
                         </columns>
                         <rows id="detail-rows">
                           <row class="detail-row-complex" id="detail-updates-row">
-                            <label class="detail-row-label" value="&detail.updateType;"/>
+                            <label class="detail-row-label" data-l10n-id="detail-update-type"/>
                             <hbox align="center">
                               <radiogroup id="detail-autoUpdate" orient="horizontal">
                                 <!-- The values here need to match the values of
                                      AddonManager.AUTOUPDATE_* -->
-                                <radio label="&detail.updateDefault.label;"
-                                       tooltiptext="&detail.updateDefault.tooltip;"
+                                <radio data-l10n-id="detail-update-default"
                                        value="1"/>
-                                <radio label="&detail.updateAutomatic.label;"
-                                       tooltiptext="&detail.updateAutomatic.tooltip;"
+                                <radio data-l10n-id="detail-update-automatic"
                                        value="2"/>
-                                <radio label="&detail.updateManual.label;"
-                                       tooltiptext="&detail.updateManual.tooltip;"
+                                <radio data-l10n-id="detail-update-manual"
                                        value="0"/>
                               </radiogroup>
                               <button id="detail-findUpdates-btn" class="button-link"
-                                      label="&detail.checkForUpdates.label;"
-                                      accesskey="&detail.checkForUpdates.accesskey;"
-                                      tooltiptext="&detail.checkForUpdates.tooltip;"
+                                      data-l10n-id="detail-check-for-updates"
                                       command="cmd_findItemUpdates"/>
                             </hbox>
                           </row>
-                          <row class="detail-row" id="detail-version" label="&detail.version.label;"/>
-                          <row class="detail-row" id="detail-dateUpdated" label="&detail.lastupdated.label;"/>
-                          <row class="detail-row-complex" id="detail-homepage-row" label="&detail.home;">
-                            <label class="detail-row-label" value="&detail.home;"/>
+                          <row class="detail-row" id="detail-version" data-l10n-id="detail-version"/>
+                          <row class="detail-row" id="detail-dateUpdated" data-l10n-id="detail-last-updated"/>
+                          <row class="detail-row-complex" id="detail-homepage-row" data-l10n-id="detail-home">
+                            <label class="detail-row-label" data-l10n-id="detail-home-value"/>
                             <label id="detail-homepage" class="detail-row-value text-link" crop="end"/>
                           </row>
-                          <row class="detail-row-complex" id="detail-repository-row" label="&detail.repository;">
-                            <label class="detail-row-label" value="&detail.repository;"/>
+                          <row class="detail-row-complex" id="detail-repository-row" data-l10n-id="detail-repository">
+                            <label class="detail-row-label" data-l10n-id="detail-repository-value"/>
                             <label id="detail-repository" class="detail-row-value text-link"/>
                           </row>
                           <row class="detail-row-complex" id="detail-rating-row">
-                            <label class="detail-row-label" value="&rating2.label;"/>
+                            <label class="detail-row-label" data-l10n-id="detail-rating"/>
                             <hbox>
                               <label id="detail-rating" class="meta-value meta-rating"
                                      showrating="average"/>
                               <label id="detail-reviews" class="text-link"/>
                             </hbox>
                           </row>
                         </rows>
                       </grid>
                       <hbox id="detail-controls">
                         <button id="detail-prefs-btn" class="addon-control preferences"
-#ifdef XP_WIN
-                                label="&detail.showPreferencesWin.label;"
-                                accesskey="&detail.showPreferencesWin.accesskey;"
-                                tooltiptext="&detail.showPreferencesWin.tooltip;"
-#else
-                                label="&detail.showPreferencesUnix.label;"
-                                accesskey="&detail.showPreferencesUnix.accesskey;"
-                                tooltiptext="&detail.showPreferencesUnix.tooltip;"
-#endif
+                                data-l10n-id="detail-show-preferences"
                                 command="cmd_showItemPreferences"/>
                         <spacer flex="1"/>
                         <button id="detail-enable-btn" class="addon-control enable"
                                 label="&cmd.enableAddon.label;"
                                 accesskey="&cmd.enableAddon.accesskey;"
                                 command="cmd_enableItem"/>
                         <button id="detail-disable-btn" class="addon-control disable"
                                 label="&cmd.disableAddon.label;"
                                 accesskey="&cmd.disableAddon.accesskey;"
                                 command="cmd_disableItem"/>
                         <button id="detail-uninstall-btn" class="addon-control remove"
                                 label="&cmd.uninstallAddon.label;"
                                 accesskey="&cmd.uninstallAddon.accesskey;"
                                 command="cmd_uninstallItem"/>
                         <button id="detail-install-btn" class="addon-control install"
-                                label="&cmd.installAddon.label;"
-                                accesskey="&cmd.installAddon.accesskey;"
+                                data-l10n-id="cmd-install-addon"
                                 command="cmd_installItem"/>
                         <menulist id="detail-state-menulist"
                                   crop="none" sizetopopup="always"
                                   tooltiptext="&cmd.stateMenu.tooltip;">
                           <menupopup>
                             <menuitem id="detail-ask-to-activate-menuitem"
                                       class="addon-control"
                                       label="&cmd.askToActivate.label;"