Bug 1435912 - Migrate Preferences::General XUL part to the new Localization API. r?flod,jaws draft
authorZibi Braniecki <zbraniecki@mozilla.com>
Tue, 27 Feb 2018 21:20:54 -0800
changeset 760763 6d6efe43a3fd8f44e0dbc8b8fa1b101da94d17d1
parent 760740 95057e639b064d56f6239873624ccf36113abf20
push id100753
push userbmo:gandalf@aviary.pl
push dateWed, 28 Feb 2018 05:27:53 +0000
reviewersflod, jaws
bugs1435912
milestone60.0a1
Bug 1435912 - Migrate Preferences::General XUL part to the new Localization API. r?flod,jaws MozReview-Commit-ID: J5Rr8Gc0oCx
browser/components/preferences/handlers.xml
browser/components/preferences/in-content/main.js
browser/components/preferences/in-content/main.xul
browser/components/preferences/in-content/preferences.xul
browser/components/preferences/in-content/tests/browser_fluent.js
browser/locales/en-US/browser/preferences/main.ftl
browser/locales/en-US/browser/preferences/preferences.ftl
browser/locales/en-US/chrome/browser/preferences/advanced.dtd
browser/locales/en-US/chrome/browser/preferences/applications.dtd
browser/locales/en-US/chrome/browser/preferences/content.dtd
browser/locales/en-US/chrome/browser/preferences/main.dtd
browser/locales/en-US/chrome/browser/preferences/preferences.dtd
browser/locales/en-US/chrome/browser/preferences/preferences.properties
browser/locales/en-US/chrome/browser/preferences/privacy.dtd
browser/locales/en-US/chrome/browser/preferences/tabs.dtd
browser/locales/jar.mn
python/l10n/fluent_migrations/bug_1435912_preferences_general_xul.py
--- a/browser/components/preferences/handlers.xml
+++ b/browser/components/preferences/handlers.xml
@@ -2,20 +2,18 @@
 
 <!-- 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/. -->
 <!-- import-globals-from in-content/main.js -->
 
 <!DOCTYPE overlay [
   <!ENTITY % brandDTD SYSTEM "chrome://branding/locale/brand.dtd">
-  <!ENTITY % applicationsDTD SYSTEM "chrome://browser/locale/preferences/applications.dtd">
   <!ENTITY % containersDTD SYSTEM "chrome://browser/locale/preferences/containers.dtd">
   %brandDTD;
-  %applicationsDTD;
   %containersDTD;
 ]>
 
 <bindings id="handlerBindings"
           xmlns="http://www.mozilla.org/xbl"
           xmlns:xul="http://www.mozilla.org/keymaster/gatekeeper/there.is.only.xul"
           xmlns:xbl="http://www.mozilla.org/xbl">
 
--- a/browser/components/preferences/in-content/main.js
+++ b/browser/components/preferences/in-content/main.js
@@ -493,17 +493,21 @@ var gMainPane = {
     // Append "(32-bit)" or "(64-bit)" build architecture to the version number:
     let bundle = Services.strings.createBundle("chrome://browser/locale/browser.properties");
     let archResource = Services.appinfo.is64Bit
       ? "aboutDialog.architecture.sixtyFourBit"
       : "aboutDialog.architecture.thirtyTwoBit";
     let arch = bundle.GetStringFromName(archResource);
     version += ` (${arch})`;
 
-    document.getElementById("version").textContent = version;
+    document.l10n.setAttributes(
+      document.getElementById("updateAppInfo"),
+      "update-application-info",
+      { version }
+    );
 
     // Show a release notes link if we have a URL.
     let relNotesLink = document.getElementById("releasenotes");
     let relNotesPrefType = Services.prefs.getPrefType("app.releaseNotesURL");
     if (relNotesPrefType != Services.prefs.PREF_INVALID) {
       let relNotesURL = Services.urlFormatter.formatURLPref("app.releaseNotesURL");
       if (relNotesURL != "about:blank") {
         relNotesLink.href = relNotesURL;
@@ -761,33 +765,42 @@ var gMainPane = {
 
   syncFromHomePref() {
     let homePref = Preferences.get("browser.startup.homepage");
 
     // Set the "Use Current Page(s)" button's text and enabled state.
     this._updateUseCurrentButton();
 
     function setInputDisabledStates(isControlled) {
+      let tabCount = this._getTabsForHomePage().length;
+
       // Disable or enable the inputs based on if this is controlled by an extension.
       document.querySelectorAll("#browserHomePage, .homepage-button")
         .forEach((element) => {
-          let isLocked = Preferences.get(element.getAttribute("preference")).locked;
-          element.disabled = isLocked || isControlled;
+          let pref = element.getAttribute("preference");
+
+          let isDisabled = Preferences.get(pref).locked || isControlled;
+          if (pref == "pref.browser.disable_button.current_page") {
+            // Special case for current_page to disable it if tabCount is 0
+            isDisabled = isDisabled || tabCount < 1;
+          }
+
+          element.disabled = isDisabled;
         });
     }
 
     if (homePref.locked) {
       // An extension can't control these settings if they're locked.
       hideControllingExtension(HOMEPAGE_OVERRIDE_KEY);
-      setInputDisabledStates(false);
+      setInputDisabledStates.call(this, false);
     } else {
       // Asynchronously update the extension controlled UI.
       handleControllingExtension(
         PREF_SETTING_TYPE, HOMEPAGE_OVERRIDE_KEY, "extensionControlled.homepage_override2")
-        .then(setInputDisabledStates);
+        .then(setInputDisabledStates.bind(this));
     }
 
     // If the pref is set to about:home or about:newtab, set the value to ""
     // to show the placeholder text (about:home title) rather than
     // exposing those URLs to users.
     let defaultBranch = Services.prefs.getDefaultBranch("");
     let defaultValue = defaultBranch.getComplexValue("browser.startup.homepage",
       Ci.nsIPrefLocalizedString).data;
@@ -879,45 +892,45 @@ var gMainPane = {
   /**
    * Switches the "Use Current Page" button between its singular and plural
    * forms.
    */
   async _updateUseCurrentButton() {
     let useCurrent = document.getElementById("useCurrent");
     let tabs = this._getTabsForHomePage();
 
-    if (tabs.length > 1)
-      useCurrent.label = useCurrent.getAttribute("label2");
-    else
-      useCurrent.label = useCurrent.getAttribute("label1");
+    const tabCount = tabs.length;
+
+    document.l10n.setAttributes(useCurrent, "use-current-pages", { tabCount });
 
     // If the homepage is controlled by an extension then you can't use this.
     if (await getControllingExtensionInfo(PREF_SETTING_TYPE, HOMEPAGE_OVERRIDE_KEY)) {
-      useCurrent.disabled = true;
       return;
     }
 
     // In this case, the button's disabled state is set by preferences.xml.
     let prefName = "pref.browser.homepage.disable_button.current_page";
     if (Preferences.get(prefName).locked)
       return;
 
-    useCurrent.disabled = !tabs.length;
+    useCurrent.disabled = tabCount < 1;
   },
 
   _getTabsForHomePage() {
     var tabs = [];
     var win = Services.wm.getMostRecentWindow("navigator:browser");
 
     if (win && win.document.documentElement
       .getAttribute("windowtype") == "navigator:browser") {
       // We should only include visible & non-pinned tabs
 
       tabs = win.gBrowser.visibleTabs.slice(win.gBrowser._numPinnedTabs);
       tabs = tabs.filter(this.isNotAboutPreferences);
+      // XXX: Bug 1441637 - Fix tabbrowser to report tab.closing before it blurs it
+      tabs = tabs.filter(tab => !tab.closing);
     }
 
     return tabs;
   },
 
   /**
    * Check to see if a tab is not about:preferences
    */
@@ -1125,37 +1138,39 @@ var gMainPane = {
     // Remove the old content from the description.
     while (description.firstChild) {
       description.firstChild.remove();
     }
 
     description.appendChild(fragment);
   },
 
-  checkBrowserContainers(event) {
+  async checkBrowserContainers(event) {
     let checkbox = document.getElementById("browserContainersCheckbox");
     if (checkbox.checked) {
       Services.prefs.setBoolPref("privacy.userContext.enabled", true);
       return;
     }
 
     let count = ContextualIdentityService.countContainerTabs();
     if (count == 0) {
       Services.prefs.setBoolPref("privacy.userContext.enabled", false);
       return;
     }
 
-    let bundlePreferences = document.getElementById("bundlePreferences");
-
-    let title = bundlePreferences.getString("disableContainersAlertTitle");
-    let message = PluralForm.get(count, bundlePreferences.getString("disableContainersMsg"))
-      .replace("#S", count);
-    let okButton = PluralForm.get(count, bundlePreferences.getString("disableContainersOkButton"))
-      .replace("#S", count);
-    let cancelButton = bundlePreferences.getString("disableContainersButton2");
+    let [
+      title, message, okButton, cancelButton
+    ] = await document.l10n.formatValues([
+      "containers-disable-alert-title",
+      "containers-disable-alert-desc",
+      "containers-disable-alert-ok-button",
+      "containers-disable-alert-cancel-button"
+    ], {
+      tabCount: count
+    });
 
     let buttonFlags = (Ci.nsIPrompt.BUTTON_TITLE_IS_STRING * Ci.nsIPrompt.BUTTON_POS_0) +
       (Ci.nsIPrompt.BUTTON_TITLE_IS_STRING * Ci.nsIPrompt.BUTTON_POS_1);
 
     let rv = Services.prompt.confirmEx(window, title, message, buttonFlags,
       okButton, cancelButton, null, null, {});
     if (rv == 0) {
       Services.prefs.setBoolPref("privacy.userContext.enabled", false);
@@ -1344,39 +1359,25 @@ var gMainPane = {
       performanceSettings.hidden = false;
     }
   },
 
   buildContentProcessCountMenuList() {
     if (Services.appinfo.browserTabsRemoteAutostart) {
       let processCountPref = Preferences.get("dom.ipc.processCount");
       let defaultProcessCount = processCountPref.defaultValue;
-      let bundlePreferences = document.getElementById("bundlePreferences");
 
       let contentProcessCount =
         document.querySelector(`#contentProcessCount > menupopup >
                                 menuitem[value="${defaultProcessCount}"]`);
 
-      // New localization API experiment (October 2017).
-      // See bug 1402061 for details.
-      //
-      // The `intl.l10n.fluent.disabled` pref can be used
-      // to opt-out of the experiment in case of any
-      // unforseen problems. The legacy API will then
-      // be used.
-      if (Services.prefs.getBoolPref("intl.l10n.fluent.disabled", false)) {
-        let label = bundlePreferences.getFormattedString("defaultContentProcessCount",
-          [defaultProcessCount]);
-        contentProcessCount.label = label;
-      } else {
-        document.l10n.setAttributes(
-          contentProcessCount,
-          "default-content-process-count",
-          { num: defaultProcessCount });
-      }
+      document.l10n.setAttributes(
+        contentProcessCount,
+        "performance-default-content-process-count",
+        { num: defaultProcessCount });
 
       document.getElementById("limitContentProcess").disabled = false;
       document.getElementById("contentProcessCount").disabled = false;
       document.getElementById("contentProcessCountEnabledDescription").hidden = false;
       document.getElementById("contentProcessCountDisabledDescription").hidden = true;
     } else {
       document.getElementById("limitContentProcess").disabled = true;
       document.getElementById("contentProcessCount").disabled = true;
--- a/browser/components/preferences/in-content/main.xul
+++ b/browser/components/preferences/in-content/main.xul
@@ -15,95 +15,95 @@
         src="chrome://mozapps/content/preferences/fontbuilder.js"/>
 
 <stringbundle id="bundlePreferences" src="chrome://browser/locale/preferences.properties"/>
 
 <hbox id="generalCategory"
       class="subcategory"
       hidden="true"
       data-category="paneGeneral">
-  <label class="header-name" flex="1">&paneGeneral.title;</label>
+      <label class="header-name" flex="1" data-l10n-id="pane-general-title"/>
 </hbox>
 
 <!-- Startup -->
 <groupbox id="startupGroup"
           data-category="paneGeneral"
           hidden="true">
-  <caption><label>&startup.label;</label></caption>
+  <caption><label data-l10n-id="startup-header"/></caption>
 
 #ifdef MOZ_DEV_EDITION
   <vbox id="separateProfileBox">
     <checkbox id="separateProfileMode"
-              label="&separateProfileMode.label;"/>
-    <hbox id="sync-dev-edition-root" align="center" class="indent">
-      <label id="useFirefoxSync">&useFirefoxSync.label;</label>
+              data-l10n-id="separate-profile-mode"/>
+    <hbox aid="sync-dev-edition-root" lign="center" class="indent">
+      <label id="useFirefoxSync" data-l10n-id="use-firefox-sync"/>
       <deck id="getStarted">
-        <label class="text-link">&getStarted.notloggedin.label;</label>
-        <label class="text-link">&getStarted.configured.label;</label>
+        <label class="text-link" data-l10n-id="get-started-not-logged-in"/>
+        <label class="text-link" data-l10n-id="get-started-configured"/>
       </deck>
     </hbox>
   </vbox>
 #endif
 
 #ifdef HAVE_SHELL_SERVICE
   <vbox id="defaultBrowserBox">
     <checkbox id="alwaysCheckDefault" preference="browser.shell.checkDefaultBrowser"
-              label="&alwaysCheckDefault2.label;" accesskey="&alwaysCheckDefault2.accesskey;"/>
+              data-l10n-id="always-check-default"/>
     <deck id="setDefaultPane">
       <hbox align="center" class="indent">
         <image class="face-sad"/>
-        <label id="isNotDefaultLabel" flex="1">&isNotDefault.label;</label>
+        <label id="isNotDefaultLabel" flex="1" data-l10n-id="is-not-default"/>
         <button id="setDefaultButton"
                 class="accessory-button"
-                label="&setAsMyDefaultBrowser3.label;" accesskey="&setAsMyDefaultBrowser3.accesskey;"
+                data-l10n-id="set-as-my-default-browser"
                 preference="pref.general.disable_button.default_browser"/>
       </hbox>
       <hbox align="center" class="indent">
         <image class="face-smile"/>
-        <label id="isDefaultLabel" flex="1">&isDefault.label;</label>
+        <label id="isDefaultLabel" flex="1" data-l10n-id="is-default"/>
       </hbox>
     </deck>
   </vbox>
 #endif
 
   <vbox id="startupPageBox">
-    <label accesskey="&startupPage2.accesskey;"
-           control="browserStartupPage">&startupPage2.label;</label>
+    <label data-l10n-id="startup-page"
+           control="browserStartupPage"/>
     <radiogroup id="browserStartupPage"
                 preference="browser.startup.page">
-      <radio label="&startupUserHomePage.label;"
+      <radio data-l10n-id="startup-user-homepage"
              value="1"
              id="browserStartupHomePage"/>
-      <radio label="&startupBlankPage.label;"
+      <radio data-l10n-id="startup-blank-page"
              value="0"
              id="browserStartupBlank"/>
-      <radio label="&startupPrevSession.label;"
+      <radio data-l10n-id="startup-prev-session"
              value="3"
              id="browserStartupLastSession"/>
     </radiogroup>
     <hbox id="browserNewTabExtensionContent" align="center" hidden="true">
       <description control="disableNewTabExtension" flex="1" />
       <button id="disableNewTabExtension"
               class="extension-controlled-button accessory-button"
-              label="&disableExtension.label;" />
+              data-l10n-id="disable-extension" />
     </hbox>
   </vbox>
 </groupbox>
 
 <!-- Home Page -->
 <groupbox id="homepageGroup"
           data-category="paneGeneral"
           hidden="true">
-  <caption><label>&homepage2.label;</label></caption>
+  <caption><label data-l10n-id="home-page-header"/></caption>
 
   <hbox id="browserHomePageExtensionContent" align="center" hidden="true">
     <description control="disableHomePageExtension" flex="1" />
     <button id="disableHomePageExtension"
             class="extension-controlled-button accessory-button"
-            label="&disableExtension.label;" />
+            data-l10n-id="disable-extension" />
   </hbox>
 
   <vbox>
     <textbox id="browserHomePage"
              class="uri-element"
              type="autocomplete"
              autocompletesearch="unifiedcomplete"
              onsyncfrompreference="return gMainPane.syncFromHomePref();"
@@ -111,122 +111,109 @@
              placeholder="&abouthome.pageTitle;"
              preference="browser.startup.homepage"/>
   </vbox>
 
   <hbox class="homepage-buttons">
     <button id="useCurrent"
             flex="1"
             class="homepage-button"
-            label=""
-            accesskey="&useCurrentPage.accesskey;"
-            label1="&useCurrentPage.label;"
-            label2="&useMultiple.label;"
+            data-l10n-id="use-current-pages"
+            data-l10n-args='{"tabCount": 0}'
+            disabled="true"
             preference="pref.browser.homepage.disable_button.current_page"/>
     <button id="useBookmark"
             flex="1"
             class="homepage-button"
-            label="&chooseBookmark.label;"
-            accesskey="&chooseBookmark.accesskey;"
+            data-l10n-id="choose-bookmark"
             preference="pref.browser.homepage.disable_button.bookmark_page"
             searchkeywords="&selectBookmark.title; &selectBookmark.label;"/>
     <button id="restoreDefaultHomePage"
             flex="1"
             class="homepage-button"
-            label="&restoreDefault.label;"
-            accesskey="&restoreDefault.accesskey;"
+            data-l10n-id="restore-default"
             preference="pref.browser.homepage.disable_button.restore_default"/>
   </hbox>
 </groupbox>
 
 <!-- Tab preferences -->
 <groupbox data-category="paneGeneral"
           hidden="true">
-    <caption><label>&tabsGroup.label;</label></caption>
+    <caption><label data-l10n-id="tabs-group-header"/></caption>
 
-    <checkbox id="ctrlTabRecentlyUsedOrder" label="&ctrlTabRecentlyUsedOrder.label;"
-              accesskey="&ctrlTabRecentlyUsedOrder.accesskey;"
+    <checkbox id="ctrlTabRecentlyUsedOrder" data-l10n-id="ctrl-tab-recently-used-order"
               preference="browser.ctrlTab.previews"/>
 
-    <checkbox id="linkTargeting" label="&newWindowsAsTabs3.label;"
-              accesskey="&newWindowsAsTabs3.accesskey;"
+    <checkbox id="linkTargeting" data-l10n-id="open-new-link-as-tabs"
               preference="browser.link.open_newwindow"
               onsyncfrompreference="return gMainPane.readLinkTarget();"
               onsynctopreference="return gMainPane.writeLinkTarget();"/>
 
-    <checkbox id="warnCloseMultiple" label="&warnOnCloseMultipleTabs.label;"
-              accesskey="&warnOnCloseMultipleTabs.accesskey;"
+    <checkbox id="warnCloseMultiple" data-l10n-id="warn-on-close-multiple-tabs"
               preference="browser.tabs.warnOnClose"/>
 
-    <checkbox id="warnOpenMany" label="&warnOnOpenManyTabs.label;"
-              accesskey="&warnOnOpenManyTabs.accesskey;"
+    <checkbox id="warnOpenMany" data-l10n-id="warn-on-open-many-tabs"
               preference="browser.tabs.warnOnOpen"/>
 
-    <checkbox id="switchToNewTabs" label="&switchLinksToNewTabs.label;"
-              accesskey="&switchLinksToNewTabs.accesskey;"
+    <checkbox id="switchToNewTabs" data-l10n-id="switch-links-to-new-tabs"
               preference="browser.tabs.loadInBackground"/>
 
 #ifdef XP_WIN
-    <checkbox id="showTabsInTaskbar" label="&showTabsInTaskbar.label;"
-              accesskey="&showTabsInTaskbar.accesskey;"
+    <checkbox id="showTabsInTaskbar" data-l10n-id="show-tabs-in-taskbar"
               preference="browser.taskbar.previews.enable"/>
 #endif
 
     <vbox id="browserContainersbox" hidden="true">
       <hbox id="browserContainersExtensionContent" align="center">
         <description control="disableContainersExtension" flex="1" />
         <button id="disableContainersExtension"
                 class="extension-controlled-button accessory-button"
-                label="&disableExtension.label;" />
+                data-l10n-id="disable-extension" />
       </hbox>
       <hbox align="center">
         <checkbox id="browserContainersCheckbox"
                   class="tail-with-learn-more"
-                  label="&browserContainersEnabled.label;"
-                  accesskey="&browserContainersEnabled.accesskey;"
+                  data-l10n-id="browser-containers-enabled"
                   preference="privacy.userContext.enabled"
                   onsyncfrompreference="return gMainPane.readBrowserContainersCheckbox();"/>
-        <label id="browserContainersLearnMore" class="learnMore text-link">
-          &browserContainersLearnMore.label;
-        </label>
+        <label id="browserContainersLearnMore" class="learnMore text-link" data-l10n-id="browser-containers-learn-more"/>
         <spacer flex="1"/>
         <!-- Please don't remove the wrapping hbox/vbox/box for these elements. It's used to properly compute the search tooltip position. -->
         <hbox>
           <button id="browserContainersSettings"
                   class="accessory-button"
-                  label="&browserContainersSettings.label;"
-                  accesskey="&browserContainersSettings.accesskey;"
+                  data-l10n-id="browser-containers-settings"
                   searchkeywords="&addButton.label;
                                   &preferencesButton.label;
                                   &removeButton.label;"/>
         </hbox>
       </hbox>
     </vbox>
 </groupbox>
 
 <hbox id="languageAndAppearanceCategory"
       class="subcategory"
       hidden="true"
       data-category="paneGeneral">
-  <label class="header-name" flex="1">&languageAndAppearance.label;</label>
+  <label class="header-name" flex="1" data-l10n-id="language-and-appearance-header"/>
 </hbox>
 
 <!-- Fonts and Colors -->
 <groupbox id="fontsGroup" data-category="paneGeneral" hidden="true">
-  <caption><label>&fontsAndColors.label;</label></caption>
+  <caption><label data-l10n-id="fonts-and-colors-header"/></caption>
 
   <vbox>
     <hbox id="fontSettings">
       <hbox align="center" flex="1">
-        <label control="defaultFont" accesskey="&defaultFont2.accesskey;">&defaultFont2.label;</label>
+        <label control="defaultFont" data-l10n-id="default-font"/>
         <!-- Please don't remove the wrapping hbox/vbox/box for these elements. It's used to properly compute the search tooltip position. -->
         <hbox flex="1">
           <menulist id="defaultFont" flex="1" delayprefsave="true" onsyncfrompreference="return FontBuilder.readFontSelection(this);"/>
         </hbox>
-        <label id="defaultFontSizeLabel" control="defaultFontSize" accesskey="&defaultSize2.accesskey;">&defaultSize2.label;</label>
+        <label id="defaultFontSizeLabel" control="defaultFontSize" data-l10n-id="default-font-size"></label>
         <!-- Please don't remove the wrapping hbox/vbox/box for these elements. It's used to properly compute the search tooltip position. -->
         <hbox>
           <menulist id="defaultFontSize" delayprefsave="true">
             <menupopup>
               <menuitem value="9" label="9"/>
               <menuitem value="10" label="10"/>
               <menuitem value="11" label="11"/>
               <menuitem value="12" label="12"/>
@@ -256,18 +243,17 @@
         </hbox>
       </hbox>
 
       <!-- Please don't remove the wrapping hbox/vbox/box for these elements. It's used to properly compute the search tooltip position. -->
       <hbox>
         <button id="advancedFonts"
                 class="accessory-button"
                 icon="select-font"
-                label="&advancedFonts.label;"
-                accesskey="&advancedFonts.accesskey;"
+                data-l10n-id="advanced-fonts"
                 searchkeywords="&fontsDialog.title;
                                 &fonts.label;
                                 &size2.label;
                                 &proportional2.label;
                                 &serif2.label;
                                 &sans-serif2.label;
                                 &monospace2.label;
                                 &font.langGroup.latin;
@@ -327,18 +313,17 @@
     </hbox>
     <hbox id="colorsSettings">
       <spacer flex="1" />
       <!-- Please don't remove the wrapping hbox/vbox/box for these elements. It's used to properly compute the search tooltip position. -->
       <hbox>
         <button id="colors"
                 class="accessory-button"
                 icon="select-color"
-                label="&colors.label;"
-                accesskey="&colors.accesskey;"
+                data-l10n-id="colors-settings"
                 searchkeywords="&overrideDefaultPageColors2.label;
                                 &overrideDefaultPageColors.always.label;
                                 &overrideDefaultPageColors.auto.label;
                                 &overrideDefaultPageColors.never.label;
                                 &color;
                                 &textColor2.label;
                                 &backgroundColor2.label;
                                 &useSystemColors.label;
@@ -348,192 +333,176 @@
                                 &visitedLinkColor2.label;"/>
       </hbox>
     </hbox>
   </vbox>
 </groupbox>
 
 <!-- Languages -->
 <groupbox id="languagesGroup" data-category="paneGeneral" hidden="true">
-  <caption><label>&language2.label;</label></caption>
+  <caption><label data-l10n-id="language-header"/></caption>
 
   <hbox id="languagesBox" align="center">
-    <description flex="1" control="chooseLanguage">&chooseLanguage.label;</description>
+    <description flex="1" control="chooseLanguage" data-l10n-id="choose-language-description"/>
     <!-- Please don't remove the wrapping hbox/vbox/box for these elements. It's used to properly compute the search tooltip position. -->
     <hbox>
       <button id="chooseLanguage"
               class="accessory-button"
-              label="&chooseButton.label;"
-              accesskey="&chooseButton.accesskey;"
+              data-l10n-id="choose-button"
               searchkeywords="&languages.customize.Header;
                               &languages.customize2.description;
                               &languages.customize.moveUp.label;
                               &languages.customize.moveDown.label;
                               &languages.customize.deleteButton.label;
                               &languages.customize.selectLanguage.label;
                               &languages.customize.addButton.label;"/>
     </hbox>
   </hbox>
 
   <hbox id="translationBox" hidden="true">
     <hbox align="center" flex="1">
       <checkbox id="translate" preference="browser.translation.detectLanguage"
-                label="&translateWebPages.label;." accesskey="&translateWebPages.accesskey;"
+                data-l10n-id="translate-web-pages"
                 onsyncfrompreference="return gMainPane.updateButtons('translateButton',
                                               'browser.translation.detectLanguage');"/>
       <hbox id="bingAttribution" hidden="true" align="center">
-        <separator orient="vertical" class="thin"/>
         <label>&translation.options.attribution.beforeLogo;</label>
         <separator orient="vertical" class="thin"/>
         <image id="translationAttributionImage" aria-label="Microsoft Translator"
                src="chrome://browser/content/microsoft-translator-attribution.png"/>
         <separator orient="vertical" class="thin"/>
         <label>&translation.options.attribution.afterLogo;</label>
       </hbox>
     </hbox>
     <button id="translateButton"
             class="accessory-button"
-            label="&translateExceptions.label;"
-            accesskey="&translateExceptions.accesskey;"/>
+            data-l10n-id="translate-exceptions"/>
   </hbox>
   <checkbox id="checkSpelling"
-          label="&checkUserSpelling.label;"
-          accesskey="&checkUserSpelling.accesskey;"
+          data-l10n-id="check-user-spelling"
           onsyncfrompreference="return gMainPane.readCheckSpelling();"
           onsynctopreference="return gMainPane.writeCheckSpelling();"
           preference="layout.spellcheckDefault"/>
 </groupbox>
 
 <!-- Files and Applications -->
 <hbox id="filesAndApplicationsCategory"
       class="subcategory"
       hidden="true"
       data-category="paneGeneral">
-  <label class="header-name" flex="1">&filesAndApplications.label;</label>
+  <label class="header-name" flex="1" data-l10n-id="files-and-applications-title"/>
 </hbox>
 
 <!--Downloads-->
 <groupbox id="downloadsGroup" data-category="paneGeneral" hidden="true">
-  <caption><label>&downloads.label;</label></caption>
+  <caption><label data-l10n-id="download-header"/></caption>
 
   <radiogroup id="saveWhere"
               preference="browser.download.useDownloadDir"
               onsyncfrompreference="return gMainPane.readUseDownloadDir();">
     <hbox id="saveToRow">
       <radio id="saveTo"
             value="true"
-            label="&saveTo.label;"
-            accesskey="&saveTo.accesskey;"
+            data-l10n-id="download-save-to"
             aria-labelledby="saveTo downloadFolder"/>
       <filefield id="downloadFolder"
                 flex="1"
                 preference="browser.download.folderList"
                 preference-editable="true"
                 aria-labelledby="saveTo"
                 onsyncfrompreference="return gMainPane.displayDownloadDirPref();"/>
       <button id="chooseFolder"
-#ifdef XP_MACOSX
-              accesskey="&chooseFolderMac.accesskey;"
-              label="&chooseFolderMac.label;"
-#else
-              accesskey="&chooseFolderWin.accesskey;"
-              label="&chooseFolderWin.label;"
-#endif
+              data-l10n-id="download-choose-folder"
       />
     </hbox>
     <!-- Additional radio button added to support CloudStorage - Bug 1357171 -->
     <radio id="saveToCloud"
           value="true"
           hidden="true"/>
     <radio id="alwaysAsk"
           value="false"
-          label="&alwaysAskWhere.label;"
-          accesskey="&alwaysAskWhere.accesskey;"/>
+          data-l10n-id="download-always-ask-where"/>
   </radiogroup>
 </groupbox>
 
 <groupbox id="applicationsGroup" data-category="paneGeneral" hidden="true">
-  <caption><label>&applications.label;</label></caption>
-  <description>&applications.description;</description>
+  <caption><label data-l10n-id="applications-header"/></caption>
+  <description data-l10n-id="applications-description"/>
   <textbox id="filter" flex="1"
            type="search"
-           placeholder="&filter2.emptytext;"
+           data-l10n-id="applications-filter"
            aria-controls="handlersView"/>
 
   <richlistbox id="handlersView" orient="vertical" persist="lastSelectedType"
                preference="pref.downloads.disable_button.edit_actions"
                flex="1">
     <listheader equalsize="always">
-        <treecol id="typeColumn" label="&typeColumn.label;" value="type"
-                 accesskey="&typeColumn.accesskey;" persist="sortDirection"
+        <treecol id="typeColumn" data-l10n-id="applications-type-column" value="type"
+                 persist="sortDirection"
                  flex="1" sortDirection="ascending"/>
-        <treecol id="actionColumn" label="&actionColumn2.label;" value="action"
-                 accesskey="&actionColumn2.accesskey;" persist="sortDirection"
+        <treecol id="actionColumn" data-l10n-id="applications-action-column" value="action"
+                 persist="sortDirection"
                  flex="1"/>
     </listheader>
   </richlistbox>
 </groupbox>
 
 
 <!-- DRM Content -->
 <groupbox id="drmGroup" data-category="paneGeneral" data-subcategory="drm" hidden="true">
-  <caption><label>&drmContent2.label;</label></caption>
+  <caption><label data-l10n-id="drm-content-header"/></caption>
   <grid id="contentGrid2">
     <columns>
       <column flex="1"/>
       <column/>
     </columns>
     <rows id="contentRows-2">
       <row id="playDRMContentRow">
         <hbox align="center">
           <checkbox id="playDRMContent" preference="media.eme.enabled"
-                    class="tail-with-learn-more" label="&playDRMContent2.label;" accesskey="&playDRMContent2.accesskey;"/>
-          <label id="playDRMContentLink" class="learnMore text-link">
-            &playDRMContent.learnMore.label;
-          </label>
+                    class="tail-with-learn-more" data-l10n-id="play-drm-content" />
+          <label id="playDRMContentLink" class="learnMore text-link" data-l10n-id="play-drm-content-learn-more"/>
         </hbox>
       </row>
     </rows>
   </grid>
 </groupbox>
 
 #ifdef HAVE_SHELL_SERVICE
   <stringbundle id="bundleShell" src="chrome://browser/locale/shellservice.properties"/>
   <stringbundle id="bundleBrand" src="chrome://branding/locale/brand.properties"/>
 #endif
 
 <hbox id="updatesCategory"
       class="subcategory"
       hidden="true"
       data-category="paneGeneral">
-  <label class="header-name" flex="1">&updateApplication.label;</label>
+  <label class="header-name" flex="1" data-l10n-id="update-application-title"/>
 </hbox>
 
 <!-- Update -->
 <groupbox id="updateApp" data-category="paneGeneral" hidden="true">
-  <caption class="search-header" hidden="true"><label>&updateApplication.label;</label></caption>
+  <caption class="search-header" hidden="true"><label data-l10n-id="update-application-title"/></caption>
 
-  <label>&updateApplicationDescription.label;</label>
+  <label data-l10n-id="update-application-description"/>
   <hbox align="center">
     <vbox flex="1">
-      <description>
-        &updateApplication.version.pre;<label id="version" class="tail-with-learn-more" />&updateApplication.version.post;
-        <label id="releasenotes" class="learnMore text-link" hidden="true">&releaseNotes.link;</label>
+      <description id="updateAppInfo">
+        <html:a id="releasenotes" class="learnMore text-link" hidden="true"/>
       </description>
       <description id="distribution" class="text-blurb" hidden="true"/>
       <description id="distributionId" class="text-blurb" hidden="true"/>
     </vbox>
 #ifdef MOZ_UPDATER
     <spacer flex="1"/>
     <!-- Please don't remove the wrapping hbox/vbox/box for these elements. It's used to properly compute the search tooltip position. -->
     <vbox>
       <button id="showUpdateHistory"
               class="accessory-button"
-              label="&updateHistory2.label;"
-              accesskey="&updateHistory2.accesskey;"
+              data-l10n-id="update-history"
               preference="app.update.disable_button.showUpdateHistory"
               searchkeywords="&history.title; &history2.intro;"/>
     </vbox>
 #endif
   </hbox>
 #ifdef MOZ_UPDATER
   <vbox id="updateBox">
     <deck id="updateDeck" orient="vertical">
@@ -625,152 +594,141 @@
                 accesskey="&update.updateButton.accesskey;"
                 disabled="true"/>
       </hbox>
     </deck>
   </vbox>
 #endif
 
 #ifdef MOZ_UPDATER
-  <description>&updateApplication.description;</description>
+  <description data-l10n-id="update-application-allow-description"></description>
   <radiogroup id="updateRadioGroup">
     <radio id="autoDesktop"
            value="auto"
-           label="&updateAuto3.label;"
-           accesskey="&updateAuto3.accesskey;"/>
+           data-l10n-id="update-application-auto"/>
     <radio value="checkOnly"
-          label="&updateCheckChoose2.label;"
-          accesskey="&updateCheckChoose2.accesskey;"/>
+           data-l10n-id="update-application-check-choose"/>
     <radio value="manual"
-          label="&updateManual2.label;"
-          accesskey="&updateManual2.accesskey;"/>
+           data-l10n-id="update-application-manual"/>
   </radiogroup>
 #ifdef MOZ_MAINTENANCE_SERVICE
   <checkbox id="useService"
-            label="&useService.label;"
-            accesskey="&useService.accesskey;"
+            data-l10n-id="update-application-use-service"
             preference="app.update.service.enabled"/>
 #endif
 #endif
   <checkbox id="enableSearchUpdate"
-            label="&enableSearchUpdate2.label;"
-            accesskey="&enableSearchUpdate2.accesskey;"
+            data-l10n-id="update-enable-search-update"
             preference="browser.search.update"/>
 </groupbox>
 
 <hbox id="performanceCategory"
       class="subcategory"
       hidden="true"
       data-category="paneGeneral">
-  <label class="header-name" flex="1">&performance.label;</label>
+  <label class="header-name" flex="1" data-l10n-id="performance-title"/>
 </hbox>
 
 <!-- Performance -->
 <groupbox id="performanceGroup" data-category="paneGeneral" hidden="true">
-  <caption class="search-header" hidden="true"><label>&performance.label;</label></caption>
+  <caption class="search-header" hidden="true"><label data-l10n-id="performance-title"/></caption>
 
   <hbox align="center">
     <checkbox id="useRecommendedPerformanceSettings"
               class="tail-with-learn-more"
-              label="&useRecommendedPerformanceSettings2.label;"
-              accesskey="&useRecommendedPerformanceSettings2.accesskey;"
+              data-l10n-id="performance-use-recommended-settings-checkbox"
               preference="browser.preferences.defaultPerformanceSettings.enabled"/>
-    <label id="performanceSettingsLearnMore" class="learnMore text-link">&performanceSettingsLearnMore.label;</label>
+    <label id="performanceSettingsLearnMore" class="learnMore text-link" data-l10n-id="performance-settings-learn-more"/>
   </hbox>
-  <description class="indent tip-caption">&useRecommendedPerformanceSettings2.description;</description>
+  <description class="indent tip-caption" data-l10n-id="performance-use-recommended-settings-desc"/>
 
   <vbox id="performanceSettings" class="indent" hidden="true">
     <checkbox id="allowHWAccel"
-              label="&allowHWAccel.label;"
-              accesskey="&allowHWAccel.accesskey;"
+              data-l10n-id="performance-allow-hw-accel"
               preference="layers.acceleration.disabled"/>
     <hbox align="center">
-      <label id="limitContentProcess" accesskey="&limitContentProcessOption.accesskey;" control="contentProcessCount">&limitContentProcessOption.label;</label>
+      <label id="limitContentProcess" data-l10n-id="performance-limit-content-process-option" control="contentProcessCount"/>
       <menulist id="contentProcessCount" preference="dom.ipc.processCount">
         <menupopup>
           <menuitem label="1" value="1"/>
           <menuitem label="2" value="2"/>
           <menuitem label="3" value="3"/>
           <menuitem label="4" value="4"/>
           <menuitem label="5" value="5"/>
           <menuitem label="6" value="6"/>
           <menuitem label="7" value="7"/>
         </menupopup>
       </menulist>
     </hbox>
-    <description id="contentProcessCountEnabledDescription" class="tip-caption">&limitContentProcessOption.description;</description>
-    <description id="contentProcessCountDisabledDescription" class="tip-caption">&limitContentProcessOption.disabledDescription;<label class="text-link" href="https://wiki.mozilla.org/Electrolysis">&limitContentProcessOption.disabledDescriptionLink;</label></description>
+    <description id="contentProcessCountEnabledDescription" class="tip-caption" data-l10n-id="performance-limit-content-process-enabled-desc"/>
+    <description id="contentProcessCountDisabledDescription" class="tip-caption" data-l10n-id="performance-limit-content-process-disabled-desc">
+      <html:a class="text-link" href="https://wiki.mozilla.org/Electrolysis"/>
+    </description>
   </vbox>
 </groupbox>
 
 <hbox id="browsingCategory"
       class="subcategory"
       hidden="true"
       data-category="paneGeneral">
-  <label class="header-name" flex="1">&browsing.label;</label>
+  <label class="header-name" flex="1" data-l10n-id="browsing-title"/>
 </hbox>
 
 <!-- Browsing -->
 <groupbox id="browsingGroup" data-category="paneGeneral" hidden="true">
-  <caption class="search-header" hidden="true"><label>&browsing.label;</label></caption>
+  <caption class="search-header" hidden="true"><label data-l10n-id="browsing-title"/></caption>
 
   <checkbox id="useAutoScroll"
-            label="&useAutoScroll.label;"
-            accesskey="&useAutoScroll.accesskey;"
+            data-l10n-id="browsing-use-autoscroll"
             preference="general.autoScroll"/>
   <checkbox id="useSmoothScrolling"
-            label="&useSmoothScrolling.label;"
-            accesskey="&useSmoothScrolling.accesskey;"
+            data-l10n-id="browsing-use-smooth-scrolling"
             preference="general.smoothScroll"/>
 
 #ifdef XP_WIN
   <checkbox id="useOnScreenKeyboard"
             hidden="true"
-            label="&useOnScreenKeyboard.label;"
-            accesskey="&useOnScreenKeyboard.accesskey;"
+            data-l10n-id="browsing-use-onscreen-keyboard"
             preference="ui.osk.enabled"/>
 #endif
   <checkbox id="useCursorNavigation"
-            label="&useCursorNavigation.label;"
-            accesskey="&useCursorNavigation.accesskey;"
+            data-l10n-id="browsing-use-cursor-navigation"
             preference="accessibility.browsewithcaret"/>
   <checkbox id="searchStartTyping"
-            label="&searchOnStartTyping.label;"
-            accesskey="&searchOnStartTyping.accesskey;"
+            data-l10n-id="browsing-search-on-start-typing"
             preference="accessibility.typeaheadfind"/>
 </groupbox>
 
 <hbox id="networkProxyCategory"
       class="subcategory"
       hidden="true"
       data-category="paneGeneral">
-  <label class="header-name" flex="1">&networkProxy.label;</label>
+  <label class="header-name" flex="1" data-l10n-id="network-proxy-title"/>
 </hbox>
 
 <!-- Network Proxy-->
 <groupbox id="connectionGroup" data-category="paneGeneral" hidden="true">
-  <caption class="search-header" hidden="true"><label>&networkProxy.label;</label></caption>
+  <caption class="search-header" hidden="true"><label data-l10n-id="network-proxy-title"/></caption>
 
   <hbox align="center">
     <hbox align="center" flex="1">
-      <description id="connectionSettingsDescription" control="connectionSettings"></description>
+      <description id="connectionSettingsDescription" control="connectionSettings"/>
       <spacer width="5"/>
-      <label id="connectionSettingsLearnMore" class="learnMore text-link">
-        &connectionSettingsLearnMore.label;
+      <label id="connectionSettingsLearnMore" class="learnMore text-link"
+        data-l10n-id="network-proxy-connection-learn-more">
       </label>
       <separator orient="vertical"/>
     </hbox>
 
     <!-- Please don't remove the wrapping hbox/vbox/box for these elements. It's used to properly compute the search tooltip position. -->
     <hbox>
       <button id="connectionSettings"
               class="accessory-button"
               icon="network"
-              label="&connectionSettings.label;"
-              accesskey="&connectionSettings.accesskey;"
+              data-l10n-id="network-proxy-connection-settings"
               searchkeywords="&connectionsDialog.title;
                               &noProxyTypeRadio.label;
                               &WPADTypeRadio.label;
                               &systemTypeRadio.label;
                               &manualTypeRadio2.label;
                               &http2.label;
                               &ssl2.label;
                               &ftp2.label;
--- a/browser/components/preferences/in-content/preferences.xul
+++ b/browser/components/preferences/in-content/preferences.xul
@@ -30,30 +30,27 @@
 <!ENTITY % passwordManagerDTD SYSTEM "chrome://passwordmgr/locale/passwordManager.dtd">
 <!ENTITY % historyDTD SYSTEM "chrome://mozapps/locale/update/history.dtd">
 <!ENTITY % certManagerDTD SYSTEM "chrome://pippki/locale/certManager.dtd">
 <!ENTITY % deviceManangerDTD SYSTEM "chrome://pippki/locale/deviceManager.dtd">
 <!ENTITY % connectionDTD SYSTEM "chrome://browser/locale/preferences/connection.dtd">
 <!ENTITY % siteDataSettingsDTD SYSTEM
   "chrome://browser/locale/preferences/siteDataSettings.dtd" >
 <!ENTITY % privacyDTD SYSTEM "chrome://browser/locale/preferences/privacy.dtd">
-<!ENTITY % tabsDTD SYSTEM "chrome://browser/locale/preferences/tabs.dtd">
 <!ENTITY % searchDTD SYSTEM "chrome://browser/locale/preferences/search.dtd">
 <!ENTITY % syncBrandDTD SYSTEM "chrome://browser/locale/syncBrand.dtd">
 <!ENTITY % syncDTD SYSTEM "chrome://browser/locale/preferences/sync.dtd">
 <!ENTITY % securityDTD SYSTEM
   "chrome://browser/locale/preferences/security.dtd">
 <!ENTITY % containersDTD SYSTEM
   "chrome://browser/locale/preferences/containers.dtd">
 <!ENTITY % sanitizeDTD SYSTEM "chrome://browser/locale/sanitize.dtd">
 <!ENTITY % mainDTD SYSTEM "chrome://browser/locale/preferences/main.dtd">
 <!ENTITY % aboutHomeDTD SYSTEM "chrome://browser/locale/aboutHome.dtd">
 <!ENTITY % contentDTD SYSTEM "chrome://browser/locale/preferences/content.dtd">
-<!ENTITY % applicationsDTD SYSTEM
-  "chrome://browser/locale/preferences/applications.dtd">
 <!ENTITY % advancedDTD SYSTEM
   "chrome://browser/locale/preferences/advanced.dtd">
 <!ENTITY % aboutDialogDTD SYSTEM "chrome://browser/locale/aboutDialog.dtd" >
 %aboutDialogDTD;
 %brandDTD;
 %globalPreferencesDTD;
 %preferencesDTD;
 %selectBookmarkDTD;
@@ -63,42 +60,39 @@
 %permissionsDTD;
 %passwordManagerDTD;
 %historyDTD;
 %certManagerDTD;
 %deviceManangerDTD;
 %connectionDTD;
 %siteDataSettingsDTD;
 %privacyDTD;
-%tabsDTD;
 %searchDTD;
 %syncBrandDTD;
 %syncDTD;
 %securityDTD;
 %containersDTD;
 %sanitizeDTD;
 %mainDTD;
 %aboutHomeDTD;
 %contentDTD;
-%applicationsDTD;
 %advancedDTD;
 ]>
 
 #ifdef XP_WIN
 #define USE_WIN_TITLE_STYLE
 #endif
 
 <page xmlns="http://www.mozilla.org/keymaster/gatekeeper/there.is.only.xul"
       xmlns:html="http://www.w3.org/1999/xhtml"
       disablefastfind="true"
       data-l10n-id="pref-page"
       data-l10n-attrs="title">
 
   <link rel="localization" href="branding/brand.ftl"/>
-  <link rel="localization" href="browser/preferences/main.ftl"/>
   <link rel="localization" href="browser/preferences/preferences.ftl"/>
   <script type="text/javascript" src="chrome://global/content/l10n.js"></script>
 
   <html:link rel="shortcut icon"
               href="chrome://browser/skin/settings.svg"/>
 
   <script type="application/javascript"
           src="chrome://browser/content/utilityOverlay.js"/>
--- a/browser/components/preferences/in-content/tests/browser_fluent.js
+++ b/browser/components/preferences/in-content/tests/browser_fluent.js
@@ -27,17 +27,17 @@ add_task(async function() {
   let doc = gBrowser.contentDocument;
   let win = gBrowser.contentWindow;
   await doc.l10n.ready;
 
   let processCountPref = win.Preferences.get("dom.ipc.processCount");
   let defaultProcessCount = processCountPref.defaultValue;
 
   let [ msg ] = await doc.l10n.formatMessages([
-    ["default-content-process-count", { num: defaultProcessCount }]
+    ["performance-default-content-process-count", { num: defaultProcessCount }]
   ]);
 
   let elem = doc.querySelector(
     `#contentProcessCount > menupopup > menuitem[value="${defaultProcessCount}"]`);
 
   Assert.deepEqual(msg, {
     value: null,
     attrs: [
deleted file mode 100644
--- a/browser/locales/en-US/browser/preferences/main.ftl
+++ /dev/null
@@ -1,4 +0,0 @@
-// Variables:
-//   $num - default value of the `dom.ipc.processCount` pref.
-default-content-process-count
-    .label = { $num } (default)
--- a/browser/locales/en-US/browser/preferences/preferences.ftl
+++ b/browser/locales/en-US/browser/preferences/preferences.ftl
@@ -5,17 +5,18 @@
 do-not-track-description = Send websites a “Do Not Track” signal that you don’t want to be tracked
 do-not-track-learn-more = Learn more
 do-not-track-option-default =
     .label = Only when using Tracking Protection
 do-not-track-option-always =
     .label = Always
 
 pref-page =
-    .title = { PLATFORM() ->
+    .title =
+        { PLATFORM() ->
             [windows] Options
            *[other] Preferences
         }
 
 # This is used to determine the width of the search field in about:preferences,
 # in order to make the entire placeholder string visible
 #
 # Notice: The value of the `.style` attribute is a CSS string, and the `width`
@@ -52,8 +53,297 @@ close-button =
 ## Browser Restart Dialog
 
 feature-enable-requires-restart = { -brand-short-name } must restart to enable this feature.
 feature-disable-requires-restart = { -brand-short-name } must restart to disable this feature.
 should-restart-title = Restart { -brand-short-name }
 should-restart-ok = Restart { -brand-short-name } now
 cancel-no-restart-button = Cancel
 restart-later = Restart Later
+
+## General Section
+
+startup-header = Startup
+
+# { -brand-short-name } will be 'Firefox Developer Edition',
+# since this setting is only exposed in Firefox Developer Edition
+separate-profile-mode =
+    .label = Allow { -brand-short-name } and Firefox to run at the same time
+use-firefox-sync = Tip: This uses separate profiles. Use { -sync-brand-short-name } to share data between them.
+get-started-not-logged-in = Sign in to { -sync-brand-short-name }…
+get-started-configured = Open { -sync-brand-short-name } preferences
+
+always-check-default =
+    .label = Always check if { -brand-short-name } is your default browser
+    .accesskey = y
+
+is-default = { -brand-short-name } is currently your default browser
+is-not-default = { -brand-short-name } is not your default browser
+
+set-as-my-default-browser =
+    .label = Make Default…
+    .accesskey = D
+
+startup-page = When { -brand-short-name } starts
+    .accesskey = s
+
+startup-user-homepage =
+    .label = Show your home page
+startup-blank-page =
+    .label = Show a blank page
+startup-prev-session =
+    .label = Show your windows and tabs from last time
+
+disable-extension =
+    .label = Disable Extension
+
+home-page-header = Home page
+
+# This string has a special case for '1' and [other] (default). If necessary for
+# your language, you can add {$tabCount} to your translations and use the
+# standard CLDR forms, or only use the form for [other] if both strings should
+# be identical.
+use-current-pages =
+    .label =
+        { $tabCount ->
+            [1] Use Current Page
+           *[other] Use Current Pages
+        }
+    .accesskey = C
+
+choose-bookmark =
+    .label = Use Bookmark…
+    .accesskey = B
+
+restore-default =
+    .label = Restore to Default
+    .accesskey = R
+
+tabs-group-header = Tabs
+
+ctrl-tab-recently-used-order =
+    .label = Ctrl+Tab cycles through tabs in recently used order
+    .accesskey = T
+
+open-new-link-as-tabs =
+    .label = Open links in tabs instead of new windows
+    .accesskey = w
+
+warn-on-close-multiple-tabs =
+    .label = Warn you when closing multiple tabs
+    .accesskey = m
+
+warn-on-open-many-tabs =
+    .label = Warn you when opening multiple tabs might slow down { -brand-short-name }
+    .accesskey = d
+
+switch-links-to-new-tabs =
+    .label = When you open a link in a new tab, switch to it immediately
+    .accesskey = h
+
+show-tabs-in-taskbar =
+    .label = Show tab previews in the Windows taskbar
+    .accesskey = k
+
+browser-containers-enabled =
+    .label = Enable Container Tabs
+    .accesskey = n
+
+browser-containers-learn-more = Learn more
+
+browser-containers-settings =
+    .label = Settings…
+    .accesskey = i
+
+containers-disable-alert-title = Close All Container Tabs?
+containers-disable-alert-desc =
+    { $tabCount ->
+        [one] If you disable Container Tabs now, { $tabCount } container tab will be closed. Are you sure you want to disable Container Tabs?
+       *[other] If you disable Container Tabs now, { $tabCount } container tabs will be closed. Are you sure you want to disable Container Tabs?
+    }
+
+containers-disable-alert-ok-button =
+    { $tabCount ->
+        [one] Close { $tabCount } Container Tab
+       *[other] Close { $tabCount } Container Tabs
+    }
+containers-disable-alert-cancel-button = Keep enabled
+
+## General Section - Language & Appearance
+
+language-and-appearance-header = Language and Appearance
+
+fonts-and-colors-header = Fonts & Colors
+
+default-font = Default font
+    .accesskey = D
+default-font-size = Size
+    .accesskey = S
+
+advanced-fonts =
+    .label = Advanced…
+    .accesskey = A
+
+colors-settings =
+    .label = Colors…
+    .accesskey = C
+
+language-header = Language
+
+choose-language-description = Choose your preferred language for displaying pages
+
+choose-button =
+    .label = Choose…
+    .accesskey = o
+
+translate-web-pages =
+    .label = Translate web content
+    .accesskey = T
+
+translate-exceptions =
+    .label = Exceptions…
+    .accesskey = x
+
+check-user-spelling =
+    .label = Check your spelling as you type
+    .accesskey = t
+
+## General Section - Files and Applications
+
+files-and-applications-title = Files and Applications
+
+download-header = Downloads
+
+download-save-to =
+    .label = Save files to
+    .accesskey = v
+
+download-choose-folder =
+    .label =
+        { PLATFORM() ->
+            [macos] Choose…
+           *[other] Browse…
+        }
+    .accesskey =
+        { PLATFORM() ->
+            [macos] e
+           *[other] o
+        }
+
+download-always-ask-where =
+    .label = Always ask you where to save files
+    .accesskey = A
+
+applications-header = Applications
+
+applications-description = Choose how { -brand-short-name } handles the files you download from the web or the applications you use while browsing.
+
+applications-filter =
+    .placeholder = Search file types or applications
+
+applications-type-column =
+    .label = Content Type
+    .accesskey = T
+
+applications-action-column =
+    .label = Action
+    .accesskey = A
+
+drm-content-header = Digital Rights Management (DRM) Content
+
+play-drm-content =
+    .label = Play DRM-controlled content
+    .accesskey = P
+
+play-drm-content-learn-more = Learn more
+
+update-application-title = { -brand-short-name } Updates
+
+update-application-description = Keep { -brand-short-name } up to date for the best performance, stability, and security.
+
+update-application-info = Version { $version } <a>What's new</a>
+
+update-history =
+    .label = Show Update History…
+    .accesskey = p
+
+update-application-allow-description = Allow { -brand-short-name } to
+
+update-application-auto =
+    .label = Automatically install updates (recommended)
+    .accesskey = A
+
+update-application-check-choose =
+    .label = Check for updates but let you choose to install them
+    .accesskey = C
+
+update-application-manual =
+    .label = Never check for updates (not recommended)
+    .accesskey = N
+
+update-application-use-service =
+    .label = Use a background service to install updates
+    .accesskey = b
+
+update-enable-search-update =
+    .label = Automatically update search engines
+    .accesskey = e
+
+## General Section - Performance
+
+performance-title = Performance
+
+performance-use-recommended-settings-checkbox =
+    .label = Use recommended performance settings
+    .accesskey = U
+
+performance-use-recommended-settings-desc = These settings are tailored to your computer’s hardware and operating system.
+
+performance-settings-learn-more = Learn more
+
+performance-allow-hw-accel =
+    .label = Use hardware acceleration when available
+    .accesskey = r
+
+performance-limit-content-process-option = Content process limit
+    .accesskey = l
+
+performance-limit-content-process-enabled-desc = Additional content processes can improve performance when using multiple tabs, but will also use more memory.
+performance-limit-content-process-disabled-desc = Modifying the number of content processes is only possible with multiprocess { -brand-short-name }. <a>Learn how to check if multiprocess is enabled</a>
+
+# Variables:
+#   $num - default value of the `dom.ipc.processCount` pref.
+performance-default-content-process-count =
+    .label = { $num } (default)
+
+## General Section - Browsing
+
+browsing-title = Browsing
+
+browsing-use-autoscroll =
+    .label = Use autoscrolling
+    .accesskey = a
+
+browsing-use-smooth-scrolling =
+    .label = Use smooth scrolling
+    .accesskey = m
+
+browsing-use-onscreen-keyboard =
+    .label = Show a touch keyboard when necessary
+    .accesskey = c
+
+browsing-use-cursor-navigation =
+    .label = Always use the cursor keys to navigate within pages
+    .accesskey = k
+
+browsing-search-on-start-typing =
+    .label = Search for text when you start typing
+    .accesskey = x
+
+## General Section - Proxy
+
+network-proxy-title = Network Proxy
+
+network-proxy-connection-learn-more = Learn More
+
+network-proxy-connection-settings =
+    .label = Settings…
+    .accesskey = e
--- a/browser/locales/en-US/chrome/browser/preferences/advanced.dtd
+++ b/browser/locales/en-US/chrome/browser/preferences/advanced.dtd
@@ -1,32 +1,16 @@
 <!-- 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/. -->
 
 <!-- Note: each tab panel must contain unique accesskeys -->
 
 <!ENTITY generalTab.label                "General">
 
-<!ENTITY useCursorNavigation.label       "Always use the cursor keys to navigate within pages">
-<!ENTITY useCursorNavigation.accesskey   "c">
-<!ENTITY searchOnStartTyping.label       "Search for text when you start typing">
-<!ENTITY searchOnStartTyping.accesskey   "x">
-<!ENTITY useOnScreenKeyboard.label       "Show a touch keyboard when necessary">
-<!ENTITY useOnScreenKeyboard.accesskey   "k">
-
-<!ENTITY browsing.label                  "Browsing">
-
-<!ENTITY useAutoScroll.label             "Use autoscrolling">
-<!ENTITY useAutoScroll.accesskey         "a">
-<!ENTITY useSmoothScrolling.label        "Use smooth scrolling">
-<!ENTITY useSmoothScrolling.accesskey    "m">
-<!ENTITY checkUserSpelling.label         "Check your spelling as you type">
-<!ENTITY checkUserSpelling.accesskey     "t">
-
 <!ENTITY dataChoicesTab.label            "Data Choices">
 
 <!-- LOCALIZATION NOTE (healthReportingDisabled.label): This message is displayed above
 disabled data sharing options in developer builds or builds with no Telemetry support
 available. -->
 <!ENTITY healthReportingDisabled.label   "Data reporting is disabled for this build configuration">
 
 <!ENTITY enableHealthReport2.label       "Allow &brandShortName; to send technical and interaction data to Mozilla">
@@ -42,88 +26,30 @@ available. -->
 <!ENTITY collectBrowserErrorsLearnMore.label "Learn more">
 
 <!ENTITY sendBackloggedCrashReports.label  "Allow &brandShortName; to send backlogged crash reports on your behalf">
 <!ENTITY sendBackloggedCrashReports.accesskey "c">
 <!ENTITY crashReporterLearnMore.label    "Learn more">
 
 <!ENTITY networkTab.label                "Network">
 
-<!ENTITY networkProxy.label              "Network Proxy">
-
-<!ENTITY connectionSettingsLearnMore.label "Learn more">
-<!ENTITY connectionSettings.label        "Settings…">
-<!ENTITY connectionSettings.accesskey    "e">
-
 <!--  Site Data section manages sites using Storage API and is under Network -->
 <!ENTITY siteData1.label                 "Cookies and Site Data">
 <!ENTITY clearSiteData1.label            "Clear Data…">
 <!ENTITY clearSiteData1.accesskey        "l">
 <!ENTITY siteDataSettings.label          "Settings…">
 <!ENTITY siteDataSettings.accesskey      "i">
 <!ENTITY siteDataLearnMoreLink.label     "Learn more">
 
 <!ENTITY updateTab.label                 "Update">
 
-<!-- LOCALIZATION NOTE (updateApplication.label):
-  Strings from aboutDialog.dtd are displayed in this section of the preferences.
-  Please check for possible accesskey conflicts.
--->
-<!ENTITY updateApplication.label         "&brandShortName; Updates">
-<!-- LOCALIZATION NOTE (updateApplication.version.*): updateApplication.version.pre
-# is followed by a version number, keep the trailing space or replace it with a
-# different character as needed. updateApplication.version.post is displayed
-# after the version number, and is empty on purpose for English. You can use it
-# if required by your language.
- -->
-<!ENTITY updateApplicationDescription.label
-                                         "Keep &brandShortName; up to date for the best performance, stability, and security.">
-<!ENTITY updateApplication.version.pre   "Version ">
-<!ENTITY updateApplication.version.post  "">
-<!ENTITY updateApplication.description   "Allow &brandShortName; to">
-<!ENTITY updateAuto3.label               "Automatically install updates (recommended)">
-<!ENTITY updateAuto3.accesskey           "A">
-<!ENTITY updateCheckChoose2.label        "Check for updates but let you choose to install them">
-<!ENTITY updateCheckChoose2.accesskey    "C">
-<!ENTITY updateManual2.label             "Never check for updates (not recommended)">
-<!ENTITY updateManual2.accesskey         "N">
-
-<!ENTITY updateHistory2.label            "Show Update History…">
-<!ENTITY updateHistory2.accesskey        "p">
-
-<!ENTITY useService.label                "Use a background service to install updates">
-<!ENTITY useService.accesskey            "b">
-
-<!ENTITY enableSearchUpdate2.label       "Automatically update search engines">
-<!ENTITY enableSearchUpdate2.accesskey   "e">
-
 <!ENTITY certificateTab.label            "Certificates">
 <!ENTITY certPersonal2.description       "When a server requests your personal certificate">
 <!ENTITY selectCerts.auto                "Select one automatically">
 <!ENTITY selectCerts.auto.accesskey      "S">
 <!ENTITY selectCerts.ask                 "Ask you every time">
 <!ENTITY selectCerts.ask.accesskey       "A">
 <!ENTITY enableOCSP.label                "Query OCSP responder servers to confirm the current validity of certificates">
 <!ENTITY enableOCSP.accesskey            "Q">
 <!ENTITY viewCerts2.label                "View Certificates…">
 <!ENTITY viewCerts2.accesskey            "C">
 <!ENTITY viewSecurityDevices2.label      "Security Devices…">
 <!ENTITY viewSecurityDevices2.accesskey  "D">
-
-<!ENTITY performance.label               "Performance">
-<!ENTITY useRecommendedPerformanceSettings2.label
-                                         "Use recommended performance settings">
-<!ENTITY useRecommendedPerformanceSettings2.description
-                                         "These settings are tailored to your computer’s hardware and operating system.">
-<!ENTITY useRecommendedPerformanceSettings2.accesskey
-                                         "U">
-<!ENTITY performanceSettingsLearnMore.label
-                                         "Learn more">
-<!ENTITY limitContentProcessOption.label "Content process limit">
-<!ENTITY limitContentProcessOption.description
-                                         "Additional content processes can improve performance when using multiple tabs, but will also use more memory.">
-<!ENTITY limitContentProcessOption.accesskey   "L">
-<!ENTITY limitContentProcessOption.disabledDescription
-                                         "Modifying the number of content processes is only possible with multiprocess &brandShortName;.">
-<!ENTITY limitContentProcessOption.disabledDescriptionLink
-                                         "Learn how to check if multiprocess is enabled">
-<!ENTITY allowHWAccel.label              "Use hardware acceleration when available">
-<!ENTITY allowHWAccel.accesskey          "r">
deleted file mode 100644
--- a/browser/locales/en-US/chrome/browser/preferences/applications.dtd
+++ /dev/null
@@ -1,14 +0,0 @@
-<!-- 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  applications.label       "Applications">
-<!ENTITY  applications.description "Choose how &brandShortName; handles the files you download from the web or the applications you use while browsing.">
-
-<!ENTITY  typeColumn.label        "Content Type">
-<!ENTITY  typeColumn.accesskey    "T">
-
-<!ENTITY  actionColumn2.label     "Action">
-<!ENTITY  actionColumn2.accesskey "A">
-
-<!ENTITY  filter2.emptytext        "Search file types or applications">
--- a/browser/locales/en-US/chrome/browser/preferences/content.dtd
+++ b/browser/locales/en-US/chrome/browser/preferences/content.dtd
@@ -22,47 +22,17 @@
 <!ENTITY  cameraPermissions.label                               "Camera">
 <!ENTITY  cameraSettingsButton.label                            "Settings…">
 <!ENTITY  cameraSettingsButton.accesskey                        "t">
 
 <!ENTITY  microphonePermissions.label                           "Microphone">
 <!ENTITY  microphoneSettingsButton.label                        "Settings…">
 <!ENTITY  microphoneSettingsButton.accesskey                    "t">
 
-<!ENTITY  fontsAndColors.label        "Fonts &amp; Colors">
-
-<!ENTITY  defaultFont2.label          "Default font">
-<!ENTITY  defaultFont2.accesskey      "D">
-<!ENTITY  defaultSize2.label          "Size">
-<!ENTITY  defaultSize2.accesskey      "S">
-
-<!ENTITY  advancedFonts.label         "Advanced…">
-<!ENTITY  advancedFonts.accesskey     "A">
-
-<!ENTITY  colors.label                "Colors…">
-<!ENTITY  colors.accesskey            "C">
-
-
-<!ENTITY language2.label              "Language">
-<!ENTITY chooseLanguage.label         "Choose your preferred language for displaying pages">
-<!ENTITY chooseButton.label           "Choose…">
-<!ENTITY chooseButton.accesskey       "o">
-
-<!ENTITY translateWebPages.label      "Translate web content">
-<!ENTITY translateWebPages.accesskey  "T">
-<!ENTITY translateExceptions.label    "Exceptions…">
-<!ENTITY translateExceptions.accesskey "x">
-
 <!-- LOCALIZATION NOTE (translation.options.attribution.beforeLogo,
   -                     translation.options.attribution.afterLogo):
   -  These 2 strings are displayed before and after a 'Microsoft Translator'
   -  logo.
   -  The translations for these strings should match the translations in
   -  browser/translation.dtd
   -->
 <!ENTITY translation.options.attribution.beforeLogo "Translations by">
 <!ENTITY translation.options.attribution.afterLogo "">
-
-<!ENTITY  drmContent2.label              "Digital Rights Management (DRM) Content">
-
-<!ENTITY  playDRMContent2.label          "Play DRM-controlled content">
-<!ENTITY  playDRMContent2.accesskey      "P">
-<!ENTITY  playDRMContent.learnMore.label "Learn more">
--- a/browser/locales/en-US/chrome/browser/preferences/main.dtd
+++ b/browser/locales/en-US/chrome/browser/preferences/main.dtd
@@ -1,46 +1,1 @@
-<!-- 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 startup.label             "Startup">
-
-<!ENTITY startupPage2.label        "When &brandShortName; starts">
-<!ENTITY startupPage2.accesskey    "s">
-<!ENTITY startupUserHomePage.label "Show your home page">
-<!ENTITY startupBlankPage.label    "Show a blank page">
-<!ENTITY startupPrevSession.label  "Show your windows and tabs from last time">
-
-<!ENTITY homepage2.label           "Home page">
-<!ENTITY homepage2.accesskey       "P">
-<!ENTITY useCurrentPage.label      "Use Current Page">
-<!ENTITY useCurrentPage.accesskey  "C">
-<!ENTITY useMultiple.label         "Use Current Pages">
-<!ENTITY chooseBookmark.label      "Use Bookmark…">
-<!ENTITY chooseBookmark.accesskey  "B">
-<!ENTITY restoreDefault.label      "Restore to Default">
-<!ENTITY restoreDefault.accesskey  "R">
-
 <!ENTITY disableExtension.label    "Disable Extension">
-
-<!ENTITY downloads.label     "Downloads">
-
-<!ENTITY saveTo.label "Save files to">
-<!ENTITY saveTo.accesskey "v">
-<!ENTITY chooseFolderWin.label        "Browse…">
-<!ENTITY chooseFolderWin.accesskey    "o">
-<!ENTITY chooseFolderMac.label        "Choose…">
-<!ENTITY chooseFolderMac.accesskey    "e">
-<!ENTITY alwaysAskWhere.label         "Always ask you where to save files">
-<!ENTITY alwaysAskWhere.accesskey     "A">
-
-<!ENTITY alwaysCheckDefault2.label        "Always check if &brandShortName; is your default browser">
-<!ENTITY alwaysCheckDefault2.accesskey    "y">
-<!ENTITY setAsMyDefaultBrowser3.label     "Make Default…">
-<!ENTITY setAsMyDefaultBrowser3.accesskey "D">
-<!ENTITY isDefault.label                  "&brandShortName; is currently your default browser">
-<!ENTITY isNotDefault.label               "&brandShortName; is not your default browser">
-
-<!ENTITY separateProfileMode.label        "Allow &brandShortName; and Firefox to run at the same time">
-<!ENTITY useFirefoxSync.label             "Tip: This uses separate profiles. Use Sync to share data between them.">
-<!ENTITY getStarted.notloggedin.label     "Sign in to &syncBrand.shortName.label;…">
-<!ENTITY getStarted.configured.label      "Open &syncBrand.shortName.label; preferences">
--- a/browser/locales/en-US/chrome/browser/preferences/preferences.dtd
+++ b/browser/locales/en-US/chrome/browser/preferences/preferences.dtd
@@ -1,15 +1,13 @@
 <!-- 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  paneSearchResults.title       "Search Results">
-<!ENTITY  paneGeneral.title             "General">
 <!ENTITY  paneSearch.title              "Search">
 <!ENTITY  paneContainers.title          "Container Tabs">
 
-<!ENTITY  languageAndAppearance.label   "Language and Appearance">
-<!ENTITY  filesAndApplications.label    "Files and Applications">
+
 <!ENTITY  browserPrivacy.label          "Browser Privacy">
 
 <!-- LOCALIZATION NOTE (paneSync1.title): This should match syncBrand.fxAccount.label in ../syncBrand.dtd -->
 <!ENTITY  paneSync1.title          "Firefox Account">
--- a/browser/locales/en-US/chrome/browser/preferences/preferences.properties
+++ b/browser/locales/en-US/chrome/browser/preferences/preferences.properties
@@ -202,30 +202,16 @@ spaceAlert.over5GB.message1=%S is runnin
 # - On Windows Preferences is called Options
 # - %S = brandShortName
 spaceAlert.over5GB.messageWin1=%S is running out of disk space. Website contents may not display properly. You can clear stored data in Options > Privacy & Security > Cookies and Site Data.
 spaceAlert.under5GB.okButton.label=OK, Got it
 spaceAlert.under5GB.okButton.accesskey=K
 # LOCALIZATION NOTE (spaceAlert.under5GB.message): %S = brandShortName
 spaceAlert.under5GB.message=%S is running out of disk space. Website contents may not display properly. Visit “Learn More” to optimize your disk usage for better browsing experience.
 
-disableContainersAlertTitle=Close All Container Tabs?
-
-# LOCALIZATION NOTE (disableContainersMsg): Semi-colon list of plural forms.
-# See: http://developer.mozilla.org/en/docs/Localization_and_Plurals
-# #S is the number of container tabs
-disableContainersMsg=If you disable Container Tabs now, #S container tab will be closed. Are you sure you want to disable Container Tabs?;If you disable Container Tabs now, #S container tabs will be closed. Are you sure you want to disable Container Tabs?
-
-# LOCALIZATION NOTE (disableContainersOkButton): Semi-colon list of plural forms.
-# See: http://developer.mozilla.org/en/docs/Localization_and_Plurals
-# #S is the number of container tabs
-disableContainersOkButton=Close #S Container Tab;Close #S Container Tabs
-
-disableContainersButton2=Keep enabled
-
 removeContainerAlertTitle=Remove This Container?
 
 # LOCALIZATION NOTE (removeContainerMsg): Semi-colon list of plural forms.
 # See: http://developer.mozilla.org/en/docs/Localization_and_Plurals
 # #S is the number of container tabs
 removeContainerMsg=If you remove this Container now, #S container tab will be closed. Are you sure you want to remove this Container?;If you remove this Container now, #S container tabs will be closed. Are you sure you want to remove this Container?
 
 removeContainerOkButton=Remove this Container
@@ -241,19 +227,16 @@ searchInput.labelUnix=Find in Preference
 searchResults.sorryMessageWin=Sorry! There are no results in Options for “%S”.
 searchResults.sorryMessageUnix=Sorry! There are no results in Preferences for “%S”.
 # LOCALIZATION NOTE (searchResults.needHelp3): %S will be replaced with a link to the support page.
 # The label of the link is in searchResults.needHelpSupportLink .
 searchResults.needHelp3=Need help? Visit %S
 # LOCALIZATION NOTE (searchResults.needHelpSupportLink): %S will be replaced with the browser name.
 searchResults.needHelpSupportLink=%S Support
 
-# LOCALIZATION NOTE %S is the default value of the `dom.ipc.processCount` pref.
-defaultContentProcessCount=%S (default)
-
 # LOCALIZATION NOTE (extensionControlled.homepage_override):
 # This string is shown to notify the user that their home page is being controlled by an extension.
 extensionControlled.homepage_override2 = An extension, %S, is controlling your home page.
 
 # LOCALIZATION NOTE (extensionControlled.newTabURL):
 # This string is shown to notify the user that their new tab page is being controlled by an extension.
 extensionControlled.newTabURL2 = An extension, %S, is controlling your New Tab page.
 
--- a/browser/locales/en-US/chrome/browser/preferences/privacy.dtd
+++ b/browser/locales/en-US/chrome/browser/preferences/privacy.dtd
@@ -83,18 +83,12 @@
 <!ENTITY  rememberSearchForm.accesskey   "f">
 
 <!ENTITY  clearOnClose.label             "Clear history when &brandShortName; closes">
 <!ENTITY  clearOnClose.accesskey         "r">
 
 <!ENTITY  clearOnCloseSettings.label     "Settings…">
 <!ENTITY  clearOnCloseSettings.accesskey "t">
 
-<!ENTITY  browserContainersLearnMore.label      "Learn more">
-<!ENTITY  browserContainersEnabled.label        "Enable Container Tabs">
-<!ENTITY  browserContainersEnabled.accesskey    "n">
-<!ENTITY  browserContainersSettings.label        "Settings…">
-<!ENTITY  browserContainersSettings.accesskey    "i">
-
 <!ENTITY  a11yPrivacy.checkbox.label     "Prevent accessibility services from accessing your browser">
 <!ENTITY  a11yPrivacy.checkbox.accesskey "a">
 <!ENTITY  a11yPrivacy.learnmore.label    "Learn more">
 <!ENTITY enableSafeBrowsingLearnMore.label "Learn more">
deleted file mode 100644
--- a/browser/locales/en-US/chrome/browser/preferences/tabs.dtd
+++ /dev/null
@@ -1,22 +0,0 @@
-<!-- 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 ctrlTabRecentlyUsedOrder.label       "Ctrl+Tab cycles through tabs in recently used order">
-<!ENTITY ctrlTabRecentlyUsedOrder.accesskey   "T">
-
-<!ENTITY newWindowsAsTabs3.label       "Open links in tabs instead of new windows">
-<!ENTITY newWindowsAsTabs3.accesskey   "w">
-
-<!ENTITY warnOnCloseMultipleTabs.label      "Warn you when closing multiple tabs">
-<!ENTITY warnOnCloseMultipleTabs.accesskey  "m">
-
-<!ENTITY warnOnOpenManyTabs.label       "Warn you when opening multiple tabs might slow down &brandShortName;">
-<!ENTITY warnOnOpenManyTabs.accesskey   "d">
-
-<!ENTITY switchLinksToNewTabs.label        "When you open a link in a new tab, switch to it immediately">
-<!ENTITY switchLinksToNewTabs.accesskey    "h">
-
-<!ENTITY showTabsInTaskbar.label          "Show tab previews in the Windows taskbar">
-<!ENTITY showTabsInTaskbar.accesskey      "k">
-<!ENTITY tabsGroup.label          "Tabs">
--- a/browser/locales/jar.mn
+++ b/browser/locales/jar.mn
@@ -59,17 +59,16 @@
     locale/browser/safebrowsing/safebrowsing.properties   (%chrome/browser/safebrowsing/safebrowsing.properties)
     locale/browser/feeds/subscribe.dtd              (%chrome/browser/feeds/subscribe.dtd)
     locale/browser/feeds/subscribe.properties       (%chrome/browser/feeds/subscribe.properties)
     locale/browser/migration/migration.dtd         (%chrome/browser/migration/migration.dtd)
     locale/browser/migration/migration.properties  (%chrome/browser/migration/migration.properties)
     locale/browser/preferences/advanced.dtd           (%chrome/browser/preferences/advanced.dtd)
     locale/browser/preferences/applicationManager.dtd     (%chrome/browser/preferences/applicationManager.dtd)
     locale/browser/preferences/applicationManager.properties     (%chrome/browser/preferences/applicationManager.properties)
-    locale/browser/preferences/applications.dtd       (%chrome/browser/preferences/applications.dtd)
     locale/browser/preferences/blocklists.dtd         (%chrome/browser/preferences/blocklists.dtd)
     locale/browser/preferences/clearSiteData.dtd      (%chrome/browser/preferences/clearSiteData.dtd)
     locale/browser/preferences/clearSiteData.properties     (%chrome/browser/preferences/clearSiteData.properties)
     locale/browser/preferences/colors.dtd             (%chrome/browser/preferences/colors.dtd)
     locale/browser/preferences/connection.dtd         (%chrome/browser/preferences/connection.dtd)
     locale/browser/preferences/containers.dtd         (%chrome/browser/preferences/containers.dtd)
     locale/browser/preferences/containers.properties     (%chrome/browser/preferences/containers.properties)
     locale/browser/preferences/content.dtd            (%chrome/browser/preferences/content.dtd)
@@ -81,17 +80,16 @@
     locale/browser/preferences/preferences.dtd        (%chrome/browser/preferences/preferences.dtd)
     locale/browser/preferences/preferences.properties     (%chrome/browser/preferences/preferences.properties)
     locale/browser/preferences/privacy.dtd            (%chrome/browser/preferences/privacy.dtd)
     locale/browser/preferences/search.dtd             (%chrome/browser/preferences/search.dtd)
     locale/browser/preferences/security.dtd           (%chrome/browser/preferences/security.dtd)
     locale/browser/preferences/selectBookmark.dtd     (%chrome/browser/preferences/selectBookmark.dtd)
     locale/browser/preferences/siteDataSettings.dtd     (%chrome/browser/preferences/siteDataSettings.dtd)
     locale/browser/preferences/sync.dtd               (%chrome/browser/preferences/sync.dtd)
-    locale/browser/preferences/tabs.dtd               (%chrome/browser/preferences/tabs.dtd)
     locale/browser/preferences/translation.dtd        (%chrome/browser/preferences/translation.dtd)
     locale/browser/syncBrand.dtd                (%chrome/browser/syncBrand.dtd)
     locale/browser/syncSetup.properties         (%chrome/browser/syncSetup.properties)
 #if BUILD_FASTER
     locale/browser/searchplugins/               (searchplugins/*.xml)
     locale/browser/searchplugins/list.json      (search/list.json)
 #else
     locale/browser/searchplugins/               (.deps/generated_@AB_CD@/*.xml)
new file mode 100644
--- /dev/null
+++ b/python/l10n/fluent_migrations/bug_1435912_preferences_general_xul.py
@@ -0,0 +1,1308 @@
+# coding=utf8
+
+# Any copyright is dedicated to the Public Domain.
+# http://creativecommons.org/publicdomain/zero/1.0/
+
+from __future__ import absolute_import
+import fluent.syntax.ast as FTL
+from fluent.migrate.helpers import MESSAGE_REFERENCE, EXTERNAL_ARGUMENT
+from fluent.migrate.transforms import REPLACE, PLURALS, REPLACE_IN_TEXT
+from fluent.migrate import COPY, CONCAT
+
+
+def migrate(ctx):
+    """Bug 1435912 - Migrate Preferences::General XUL to Fluent, part {index}."""
+
+    ctx.add_transforms(
+        'browser/browser/preferences/preferences.ftl',
+        'browser/locales/en-US/browser/preferences/preferences.ftl',
+        [
+            FTL.Message(
+                id=FTL.Identifier('startup-header'),
+                value=COPY(
+                    'browser/chrome/browser/preferences/main.dtd',
+                    'startup.label'
+                )
+            ),
+            FTL.Message(
+                id=FTL.Identifier('separate-profile-mode'),
+                attributes=[
+                    FTL.Attribute(
+                        FTL.Identifier('label'),
+                        REPLACE(
+                            'browser/chrome/browser/preferences/main.dtd',
+                            'separateProfileMode.label',
+                            {
+                                '&brandShortName;': MESSAGE_REFERENCE('-brand-short-name')
+                            }
+                        )
+                    )
+                ]
+            ),
+            FTL.Message(
+                id=FTL.Identifier('use-firefox-sync'),
+                value=REPLACE(
+                    'browser/chrome/browser/preferences/main.dtd',
+                    'useFirefoxSync.label',
+                    {
+                        'Sync': MESSAGE_REFERENCE('-sync-brand-short-name')
+                    },
+                )
+            ),
+            FTL.Message(
+                id=FTL.Identifier('get-started-not-logged-in'),
+                value=REPLACE(
+                    'browser/chrome/browser/preferences/main.dtd',
+                    'getStarted.notloggedin.label',
+                    {
+                        '&syncBrand.shortName.label;': MESSAGE_REFERENCE('-sync-brand-short-name')
+                    },
+                )
+            ),
+            FTL.Message(
+                id=FTL.Identifier('get-started-configured'),
+                value=REPLACE(
+                    'browser/chrome/browser/preferences/main.dtd',
+                    'getStarted.configured.label',
+                    {
+                        '&syncBrand.shortName.label;': MESSAGE_REFERENCE('-sync-brand-short-name')
+                    },
+                )
+            ),
+            FTL.Message(
+                id=FTL.Identifier('always-check-default'),
+                attributes=[
+                    FTL.Attribute(
+                        FTL.Identifier('label'),
+                        REPLACE(
+                            'browser/chrome/browser/preferences/main.dtd',
+                            'alwaysCheckDefault2.label',
+                            {
+                                '&brandShortName;': MESSAGE_REFERENCE('-brand-short-name')
+                            },
+                        )
+                    ),
+                    FTL.Attribute(
+                        FTL.Identifier('accesskey'),
+                        COPY(
+                            'browser/chrome/browser/preferences/main.dtd',
+                            'alwaysCheckDefault2.accesskey',
+                        )
+                    ),
+                ],
+            ),
+            FTL.Message(
+                id=FTL.Identifier('is-default'),
+                value=REPLACE(
+                    'browser/chrome/browser/preferences/main.dtd',
+                    'isDefault.label',
+                    {
+                        '&brandShortName;': MESSAGE_REFERENCE('-brand-short-name')
+                    },
+                )
+            ),
+            FTL.Message(
+                id=FTL.Identifier('is-not-default'),
+                value=REPLACE(
+                    'browser/chrome/browser/preferences/main.dtd',
+                    'isNotDefault.label',
+                    {
+                        '&brandShortName;': MESSAGE_REFERENCE('-brand-short-name')
+                    },
+                )
+            ),
+            FTL.Message(
+                id=FTL.Identifier('set-as-my-default-browser'),
+                attributes=[
+                    FTL.Attribute(
+                        FTL.Identifier('label'),
+                        COPY(
+                            'browser/chrome/browser/preferences/main.dtd',
+                            'setAsMyDefaultBrowser3.label',
+                        )
+                    ),
+                    FTL.Attribute(
+                        FTL.Identifier('accesskey'),
+                        COPY(
+                            'browser/chrome/browser/preferences/main.dtd',
+                            'setAsMyDefaultBrowser3.accesskey',
+                        )
+                    ),
+                ],
+            ),
+            FTL.Message(
+                id=FTL.Identifier('startup-page'),
+                value=REPLACE(
+                    'browser/chrome/browser/preferences/main.dtd',
+                    'startupPage2.label',
+                    {
+                        '&brandShortName;': MESSAGE_REFERENCE('-brand-short-name')
+                    },
+                ),
+                attributes=[
+                    FTL.Attribute(
+                        FTL.Identifier('accesskey'),
+                        COPY(
+                            'browser/chrome/browser/preferences/main.dtd',
+                            'startupPage2.accesskey',
+                        )
+                    ),
+                ],
+            ),
+            FTL.Message(
+                id=FTL.Identifier('startup-user-homepage'),
+                attributes=[
+                    FTL.Attribute(
+                        FTL.Identifier('label'),
+                        COPY(
+                            'browser/chrome/browser/preferences/main.dtd',
+                            'startupUserHomePage.label',
+                        )
+                    ),
+                ],
+            ),
+            FTL.Message(
+                id=FTL.Identifier('startup-blank-page'),
+                attributes=[
+                    FTL.Attribute(
+                        FTL.Identifier('label'),
+                        COPY(
+                            'browser/chrome/browser/preferences/main.dtd',
+                            'startupBlankPage.label',
+                        )
+                    ),
+                ],
+            ),
+            FTL.Message(
+                id=FTL.Identifier('startup-prev-session'),
+                attributes=[
+                    FTL.Attribute(
+                        FTL.Identifier('label'),
+                        COPY(
+                            'browser/chrome/browser/preferences/main.dtd',
+                            'startupPrevSession.label',
+                        )
+                    ),
+                ],
+            ),
+            FTL.Message(
+                id=FTL.Identifier('disable-extension'),
+                attributes=[
+                    FTL.Attribute(
+                        FTL.Identifier('label'),
+                        COPY(
+                            'browser/chrome/browser/preferences/main.dtd',
+                            'disableExtension.label',
+                        )
+                    ),
+                ],
+            ),
+            FTL.Message(
+                id=FTL.Identifier('home-page-header'),
+                value=COPY(
+                    'browser/chrome/browser/preferences/main.dtd',
+                    'startupUserHomePage.label',
+                )
+            ),
+            FTL.Message(
+                id=FTL.Identifier('use-current-pages'),
+                attributes=[
+                    FTL.Attribute(
+                        FTL.Identifier('label'),
+                        FTL.Pattern(
+                            elements=[
+                                FTL.Placeable(
+                                    expression=FTL.SelectExpression(
+                                        expression=EXTERNAL_ARGUMENT('tabCount'),
+                                        variants=[
+                                            FTL.Variant(
+                                                key=FTL.VariantName('1'),
+                                                default=False,
+                                                value=COPY(
+                                                    'browser/chrome/browser/preferences/main.dtd',
+                                                    'useCurrentPage.label',
+                                                )
+                                            ),
+                                            FTL.Variant(
+                                                key=FTL.VariantName('other'),
+                                                default=True,
+                                                value=COPY(
+                                                    'browser/chrome/browser/preferences/main.dtd',
+                                                    'useMultiple.label',
+                                                )
+                                            )
+                                        ]
+                                    )
+                                )
+                            ]
+                        )
+                    ),
+                    FTL.Attribute(
+                        FTL.Identifier('accesskey'),
+                        COPY(
+                            'browser/chrome/browser/preferences/main.dtd',
+                            'useCurrentPage.accesskey',
+                        )
+                    ),
+                ],
+            ),
+            FTL.Message(
+                id=FTL.Identifier('choose-bookmark'),
+                attributes=[
+                    FTL.Attribute(
+                        FTL.Identifier('label'),
+                        COPY(
+                            'browser/chrome/browser/preferences/main.dtd',
+                            'chooseBookmark.label',
+                        )
+                    ),
+                    FTL.Attribute(
+                        FTL.Identifier('accesskey'),
+                        COPY(
+                            'browser/chrome/browser/preferences/main.dtd',
+                            'chooseBookmark.accesskey',
+                        )
+                    ),
+                ],
+            ),
+            FTL.Message(
+                id=FTL.Identifier('restore-default'),
+                attributes=[
+                    FTL.Attribute(
+                        FTL.Identifier('label'),
+                        COPY(
+                            'browser/chrome/browser/preferences/main.dtd',
+                            'restoreDefault.label',
+                        )
+                    ),
+                    FTL.Attribute(
+                        FTL.Identifier('accesskey'),
+                        COPY(
+                            'browser/chrome/browser/preferences/main.dtd',
+                            'restoreDefault.accesskey',
+                        )
+                    ),
+                ],
+            ),
+            FTL.Message(
+                id=FTL.Identifier('tabs-group-header'),
+                value=COPY(
+                    'browser/chrome/browser/preferences/tabs.dtd',
+                    'tabsGroup.label',
+                )
+            ),
+            FTL.Message(
+                id=FTL.Identifier('ctrl-tab-recently-used-order'),
+                attributes=[
+                    FTL.Attribute(
+                        FTL.Identifier('label'),
+                        COPY(
+                            'browser/chrome/browser/preferences/tabs.dtd',
+                            'ctrlTabRecentlyUsedOrder.label',
+                        )
+                    ),
+                    FTL.Attribute(
+                        FTL.Identifier('accesskey'),
+                        COPY(
+                            'browser/chrome/browser/preferences/tabs.dtd',
+                            'ctrlTabRecentlyUsedOrder.accesskey',
+                        )
+                    ),
+                ],
+            ),
+            FTL.Message(
+                id=FTL.Identifier('open-new-link-as-tabs'),
+                attributes=[
+                    FTL.Attribute(
+                        FTL.Identifier('label'),
+                        COPY(
+                            'browser/chrome/browser/preferences/tabs.dtd',
+                            'newWindowsAsTabs3.label',
+                        )
+                    ),
+                    FTL.Attribute(
+                        FTL.Identifier('accesskey'),
+                        COPY(
+                            'browser/chrome/browser/preferences/tabs.dtd',
+                            'newWindowsAsTabs3.accesskey',
+                        )
+                    ),
+                ],
+            ),
+            FTL.Message(
+                id=FTL.Identifier('warn-on-close-multiple-tabs'),
+                attributes=[
+                    FTL.Attribute(
+                        FTL.Identifier('label'),
+                        COPY(
+                            'browser/chrome/browser/preferences/tabs.dtd',
+                            'warnOnCloseMultipleTabs.label',
+                        )
+                    ),
+                    FTL.Attribute(
+                        FTL.Identifier('accesskey'),
+                        COPY(
+                            'browser/chrome/browser/preferences/tabs.dtd',
+                            'warnOnCloseMultipleTabs.accesskey',
+                        )
+                    ),
+                ],
+            ),
+            FTL.Message(
+                id=FTL.Identifier('warn-on-open-many-tabs'),
+                attributes=[
+                    FTL.Attribute(
+                        FTL.Identifier('label'),
+                        REPLACE(
+                            'browser/chrome/browser/preferences/tabs.dtd',
+                            'warnOnOpenManyTabs.label',
+                            {
+                                '&brandShortName;': MESSAGE_REFERENCE('-brand-short-name')
+                            },
+                        )
+                    ),
+                    FTL.Attribute(
+                        FTL.Identifier('accesskey'),
+                        COPY(
+                            'browser/chrome/browser/preferences/tabs.dtd',
+                            'warnOnOpenManyTabs.accesskey',
+                        )
+                    ),
+                ],
+            ),
+            FTL.Message(
+                id=FTL.Identifier('switch-links-to-new-tabs'),
+                attributes=[
+                    FTL.Attribute(
+                        FTL.Identifier('label'),
+                        COPY(
+                            'browser/chrome/browser/preferences/tabs.dtd',
+                            'switchLinksToNewTabs.label',
+                        )
+                    ),
+                    FTL.Attribute(
+                        FTL.Identifier('accesskey'),
+                        COPY(
+                            'browser/chrome/browser/preferences/tabs.dtd',
+                            'switchLinksToNewTabs.accesskey',
+                        )
+                    ),
+                ],
+            ),
+            FTL.Message(
+                id=FTL.Identifier('show-tabs-in-taskbar'),
+                attributes=[
+                    FTL.Attribute(
+                        FTL.Identifier('label'),
+                        COPY(
+                            'browser/chrome/browser/preferences/tabs.dtd',
+                            'showTabsInTaskbar.label',
+                        )
+                    ),
+                    FTL.Attribute(
+                        FTL.Identifier('accesskey'),
+                        COPY(
+                            'browser/chrome/browser/preferences/tabs.dtd',
+                            'showTabsInTaskbar.accesskey',
+                        )
+                    ),
+                ],
+            ),
+            FTL.Message(
+                id=FTL.Identifier('browser-containers-enabled'),
+                attributes=[
+                    FTL.Attribute(
+                        FTL.Identifier('label'),
+                        COPY(
+                            'browser/chrome/browser/preferences/privacy.dtd',
+                            'browserContainersEnabled.label',
+                        )
+                    ),
+                    FTL.Attribute(
+                        FTL.Identifier('accesskey'),
+                        COPY(
+                            'browser/chrome/browser/preferences/privacy.dtd',
+                            'browserContainersEnabled.accesskey',
+                        )
+                    ),
+                ],
+            ),
+            FTL.Message(
+                id=FTL.Identifier('browser-containers-learn-more'),
+                value=COPY(
+                    'browser/chrome/browser/preferences/privacy.dtd',
+                    'browserContainersLearnMore.label',
+                )
+            ),
+            FTL.Message(
+                id=FTL.Identifier('browser-containers-settings'),
+                attributes=[
+                    FTL.Attribute(
+                        FTL.Identifier('label'),
+                        COPY(
+                            'browser/chrome/browser/preferences/privacy.dtd',
+                            'browserContainersSettings.label'
+                        )
+                    ),
+                    FTL.Attribute(
+                        FTL.Identifier('accesskey'),
+                        COPY(
+                            'browser/chrome/browser/preferences/privacy.dtd',
+                            'browserContainersSettings.accesskey'
+                        )
+                    ),
+                ],
+            ),
+            FTL.Message(
+                id=FTL.Identifier('containers-disable-alert-title'),
+                value=COPY(
+                    'browser/chrome/browser/preferences/preferences.properties',
+                    'disableContainersAlertTitle',
+                )
+            ),
+            FTL.Message(
+                id=FTL.Identifier('containers-disable-alert-desc'),
+                value=PLURALS(
+                    'browser/chrome/browser/preferences/preferences.properties',
+                    'disableContainersMsg',
+                    EXTERNAL_ARGUMENT('tabCount'),
+                    lambda text: REPLACE_IN_TEXT(
+                        text,
+                        {
+                            '#S': EXTERNAL_ARGUMENT('tabCount')
+                        }
+                    )
+                )
+            ),
+            FTL.Message(
+                id=FTL.Identifier('containers-disable-alert-ok-button'),
+                value=PLURALS(
+                    'browser/chrome/browser/preferences/preferences.properties',
+                    'disableContainersOkButton',
+                    EXTERNAL_ARGUMENT('tabCount'),
+                    lambda text: REPLACE_IN_TEXT(
+                        text,
+                        {
+                            '#S': EXTERNAL_ARGUMENT('tabCount')
+                        }
+                    )
+                )
+            ),
+            FTL.Message(
+                id=FTL.Identifier('containers-disable-alert-cancel-button'),
+                value=COPY(
+                    'browser/chrome/browser/preferences/preferences.properties',
+                    'disableContainersButton2',
+                )
+            ),
+            FTL.Message(
+                id=FTL.Identifier('language-and-appearance-header'),
+                value=COPY(
+                    'browser/chrome/browser/preferences/preferences.dtd',
+                    'languageAndAppearance.label',
+                )
+            ),
+            FTL.Message(
+                id=FTL.Identifier('fonts-and-colors-header'),
+                value=COPY(
+                    'browser/chrome/browser/preferences/content.dtd',
+                    'fontsAndColors.label',
+                )
+            ),
+            FTL.Message(
+                id=FTL.Identifier('default-font'),
+                value=COPY(
+                    'browser/chrome/browser/preferences/content.dtd',
+                    'defaultFont2.label',
+                ),
+                attributes=[
+                    FTL.Attribute(
+                        FTL.Identifier('accesskey'),
+                        COPY(
+                            'browser/chrome/browser/preferences/content.dtd',
+                            'defaultFont2.accesskey',
+                        )
+                    ),
+                ],
+            ),
+            FTL.Message(
+                id=FTL.Identifier('default-font-size'),
+                value=COPY(
+                    'browser/chrome/browser/preferences/content.dtd',
+                    'defaultSize2.label',
+                ),
+                attributes=[
+                    FTL.Attribute(
+                        FTL.Identifier('accesskey'),
+                        COPY(
+                            'browser/chrome/browser/preferences/content.dtd',
+                            'defaultSize2.accesskey',
+                        )
+                    ),
+                ],
+            ),
+            FTL.Message(
+                id=FTL.Identifier('advanced-fonts'),
+                attributes=[
+                    FTL.Attribute(
+                        FTL.Identifier('label'),
+                        COPY(
+                            'browser/chrome/browser/preferences/content.dtd',
+                            'advancedFonts.label',
+                        )
+                    ),
+                    FTL.Attribute(
+                        FTL.Identifier('accesskey'),
+                        COPY(
+                            'browser/chrome/browser/preferences/content.dtd',
+                            'advancedFonts.accesskey',
+                        )
+                    ),
+                ],
+            ),
+            FTL.Message(
+                id=FTL.Identifier('colors-settings'),
+                attributes=[
+                    FTL.Attribute(
+                        FTL.Identifier('label'),
+                        COPY(
+                            'browser/chrome/browser/preferences/content.dtd',
+                            'colors.label',
+                        )
+                    ),
+                    FTL.Attribute(
+                        FTL.Identifier('accesskey'),
+                        COPY(
+                            'browser/chrome/browser/preferences/content.dtd',
+                            'colors.accesskey',
+                        )
+                    ),
+                ],
+            ),
+            FTL.Message(
+                id=FTL.Identifier('language-header'),
+                value=COPY(
+                    'browser/chrome/browser/preferences/content.dtd',
+                    'language2.label',
+                )
+            ),
+            FTL.Message(
+                id=FTL.Identifier('choose-language-description'),
+                value=COPY(
+                    'browser/chrome/browser/preferences/content.dtd',
+                    'chooseLanguage.label',
+                )
+            ),
+            FTL.Message(
+                id=FTL.Identifier('choose-button'),
+                attributes=[
+                    FTL.Attribute(
+                        FTL.Identifier('label'),
+                        COPY(
+                            'browser/chrome/browser/preferences/content.dtd',
+                            'chooseButton.label',
+                        )
+                    ),
+                    FTL.Attribute(
+                        FTL.Identifier('accesskey'),
+                        COPY(
+                            'browser/chrome/browser/preferences/content.dtd',
+                            'chooseButton.accesskey',
+                        )
+                    ),
+                ],
+            ),
+            FTL.Message(
+                id=FTL.Identifier('translate-web-pages'),
+                attributes=[
+                    FTL.Attribute(
+                        FTL.Identifier('label'),
+                        COPY(
+                            'browser/chrome/browser/preferences/content.dtd',
+                            'translateWebPages.label',
+                        )
+                    ),
+                    FTL.Attribute(
+                        FTL.Identifier('accesskey'),
+                        COPY(
+                            'browser/chrome/browser/preferences/content.dtd',
+                            'translateWebPages.accesskey',
+                        )
+                    ),
+                ],
+            ),
+            FTL.Message(
+                id=FTL.Identifier('translate-exceptions'),
+                attributes=[
+                    FTL.Attribute(
+                        FTL.Identifier('label'),
+                        COPY(
+                            'browser/chrome/browser/preferences/content.dtd',
+                            'translateExceptions.label',
+                        )
+                    ),
+                    FTL.Attribute(
+                        FTL.Identifier('accesskey'),
+                        COPY(
+                            'browser/chrome/browser/preferences/content.dtd',
+                            'translateExceptions.accesskey',
+                        )
+                    ),
+                ],
+            ),
+            FTL.Message(
+                id=FTL.Identifier('check-user-spelling'),
+                attributes=[
+                    FTL.Attribute(
+                        FTL.Identifier('label'),
+                        COPY(
+                            'browser/chrome/browser/preferences/advanced.dtd',
+                            'checkUserSpelling.label',
+                        )
+                    ),
+                    FTL.Attribute(
+                        FTL.Identifier('accesskey'),
+                        COPY(
+                            'browser/chrome/browser/preferences/advanced.dtd',
+                            'checkUserSpelling.accesskey',
+                        )
+                    ),
+                ],
+            ),
+            FTL.Message(
+                id=FTL.Identifier('files-and-applications-title'),
+                value=COPY(
+                    'browser/chrome/browser/preferences/preferences.dtd',
+                    'filesAndApplications.label',
+                )
+            ),
+            FTL.Message(
+                id=FTL.Identifier('download-header'),
+                value=COPY(
+                    'browser/chrome/browser/preferences/main.dtd',
+                    'downloads.label',
+                )
+            ),
+            FTL.Message(
+                id=FTL.Identifier('download-save-to'),
+                attributes=[
+                    FTL.Attribute(
+                        FTL.Identifier('label'),
+                        COPY(
+                            'browser/chrome/browser/preferences/main.dtd',
+                            'saveTo.label',
+                        )
+                    ),
+                    FTL.Attribute(
+                        FTL.Identifier('accesskey'),
+                        COPY(
+                            'browser/chrome/browser/preferences/main.dtd',
+                            'saveTo.accesskey',
+                        )
+                    ),
+                ],
+            ),
+            FTL.Message(
+                id=FTL.Identifier('download-choose-folder'),
+                attributes=[
+                    FTL.Attribute(
+                        FTL.Identifier('label'),
+                        FTL.Pattern(
+                            elements=[
+                                FTL.Placeable(
+                                    expression=FTL.SelectExpression(
+                                        expression=FTL.CallExpression(
+                                            callee=FTL.Identifier('PLATFORM')
+                                        ),
+                                        variants=[
+                                            FTL.Variant(
+                                                key=FTL.VariantName('macos'),
+                                                default=False,
+                                                value=COPY(
+                                                    'browser/chrome/browser/preferences/main.dtd',
+                                                    'chooseFolderMac.label'
+                                                )
+                                            ),
+                                            FTL.Variant(
+                                                key=FTL.VariantName('other'),
+                                                default=True,
+                                                value=COPY(
+                                                    'browser/chrome/browser/preferences/main.dtd',
+                                                    'chooseFolderWin.label'
+                                                )
+                                            )
+                                        ]
+                                    )
+                                )
+                            ]
+                        )
+                    ),
+                    FTL.Attribute(
+                        FTL.Identifier('accesskey'),
+                        FTL.Pattern(
+                            elements=[
+                                FTL.Placeable(
+                                    expression=FTL.SelectExpression(
+                                        expression=FTL.CallExpression(
+                                            callee=FTL.Identifier('PLATFORM')
+                                        ),
+                                        variants=[
+                                            FTL.Variant(
+                                                key=FTL.VariantName('macos'),
+                                                default=False,
+                                                value=COPY(
+                                                    'browser/chrome/browser/preferences/main.dtd',
+                                                    'chooseFolderMac.accesskey'
+                                                )
+                                            ),
+                                            FTL.Variant(
+                                                key=FTL.VariantName('other'),
+                                                default=True,
+                                                value=COPY(
+                                                    'browser/chrome/browser/preferences/main.dtd',
+                                                    'chooseFolderWin.accesskey'
+                                                )
+                                            )
+                                        ]
+                                    )
+                                )
+                            ]
+                        )
+                    ),
+                ],
+            ),
+            FTL.Message(
+                id=FTL.Identifier('download-always-ask-where'),
+                attributes=[
+                    FTL.Attribute(
+                        FTL.Identifier('label'),
+                        COPY(
+                            'browser/chrome/browser/preferences/main.dtd',
+                            'alwaysAskWhere.label'
+                        )
+                    ),
+                    FTL.Attribute(
+                        FTL.Identifier('accesskey'),
+                        COPY(
+                            'browser/chrome/browser/preferences/main.dtd',
+                            'alwaysAskWhere.accesskey'
+                        )
+                    ),
+                ],
+            ),
+            FTL.Message(
+                id=FTL.Identifier('applications-header'),
+                value=COPY(
+                    'browser/chrome/browser/preferences/applications.dtd',
+                    'applications.label',
+                )
+            ),
+            FTL.Message(
+                id=FTL.Identifier('applications-description'),
+                value=REPLACE(
+                    'browser/chrome/browser/preferences/applications.dtd',
+                    'applications.description',
+                    {
+                        '&brandShortName;': MESSAGE_REFERENCE('-brand-short-name')
+                    },
+                )
+            ),
+            FTL.Message(
+                id=FTL.Identifier('applications-filter'),
+                attributes=[
+                    FTL.Attribute(
+                        FTL.Identifier('placeholder'),
+                        COPY(
+                            'browser/chrome/browser/preferences/applications.dtd',
+                            'filter2.emptytext',
+                        )
+                    ),
+                ],
+            ),
+            FTL.Message(
+                id=FTL.Identifier('applications-type-column'),
+                attributes=[
+                    FTL.Attribute(
+                        FTL.Identifier('label'),
+                        COPY(
+                            'browser/chrome/browser/preferences/applications.dtd',
+                            'typeColumn.label',
+                        )
+                    ),
+                    FTL.Attribute(
+                        FTL.Identifier('accesskey'),
+                        COPY(
+                            'browser/chrome/browser/preferences/applications.dtd',
+                            'typeColumn.accesskey',
+                        )
+                    ),
+                ],
+            ),
+            FTL.Message(
+                id=FTL.Identifier('applications-action-column'),
+                attributes=[
+                    FTL.Attribute(
+                        FTL.Identifier('label'),
+                        COPY(
+                            'browser/chrome/browser/preferences/applications.dtd',
+                            'actionColumn2.label',
+                        )
+                    ),
+                    FTL.Attribute(
+                        FTL.Identifier('accesskey'),
+                        COPY(
+                            'browser/chrome/browser/preferences/applications.dtd',
+                            'actionColumn2.accesskey',
+                        )
+                    ),
+                ],
+            ),
+            FTL.Message(
+                id=FTL.Identifier('drm-content-header'),
+                value=COPY(
+                    'browser/chrome/browser/preferences/content.dtd',
+                    'drmContent2.label',
+                )
+            ),
+            FTL.Message(
+                id=FTL.Identifier('play-drm-content'),
+                attributes=[
+                    FTL.Attribute(
+                        FTL.Identifier('label'),
+                        COPY(
+                            'browser/chrome/browser/preferences/content.dtd',
+                            'playDRMContent2.label',
+                        )
+                    ),
+                    FTL.Attribute(
+                        FTL.Identifier('accesskey'),
+                        COPY(
+                            'browser/chrome/browser/preferences/content.dtd',
+                            'playDRMContent2.accesskey',
+                        )
+                    ),
+                ],
+            ),
+            FTL.Message(
+                id=FTL.Identifier('play-drm-content-learn-more'),
+                value=COPY(
+                    'browser/chrome/browser/preferences/content.dtd',
+                    'playDRMContent.learnMore.label',
+                )
+            ),
+            FTL.Message(
+                id=FTL.Identifier('update-application-title'),
+                value=REPLACE(
+                    'browser/chrome/browser/preferences/advanced.dtd',
+                    'updateApplication.label',
+                    {
+                        '&brandShortName;': MESSAGE_REFERENCE('-brand-short-name')
+                    },
+                )
+            ),
+            FTL.Message(
+                id=FTL.Identifier('update-application-description'),
+                value=REPLACE(
+                    'browser/chrome/browser/preferences/advanced.dtd',
+                    'updateApplicationDescription.label',
+                    {
+                        '&brandShortName;': MESSAGE_REFERENCE('-brand-short-name')
+                    },
+                )
+            ),
+            FTL.Message(
+                id=FTL.Identifier('update-application-info'),
+                value=CONCAT(
+                    COPY(
+                        'browser/chrome/browser/preferences/advanced.dtd',
+                        'updateApplication.version.pre'
+                    ),
+                    EXTERNAL_ARGUMENT('version'),
+                    COPY(
+                        'browser/chrome/browser/preferences/advanced.dtd',
+                        'updateApplication.version.post'
+                    ),
+                    FTL.TextElement(' <a>'),
+                    COPY(
+                        'browser/chrome/browser/aboutDialog.dtd',
+                        'releaseNotes.link',
+                    ),
+                    FTL.TextElement('</a>'),
+                ),
+            ),
+            FTL.Message(
+                id=FTL.Identifier('update-history'),
+                attributes=[
+                    FTL.Attribute(
+                        FTL.Identifier('label'),
+                        COPY(
+                            'browser/chrome/browser/preferences/advanced.dtd',
+                            'updateHistory2.label',
+                        )
+                    ),
+                    FTL.Attribute(
+                        FTL.Identifier('accesskey'),
+                        COPY(
+                            'browser/chrome/browser/preferences/advanced.dtd',
+                            'updateHistory2.accesskey',
+                        )
+                    ),
+                ],
+            ),
+            FTL.Message(
+                id=FTL.Identifier('update-application-allow-description'),
+                value=REPLACE(
+                    'browser/chrome/browser/preferences/advanced.dtd',
+                    'updateApplication.description',
+                    {
+                        '&brandShortName;': MESSAGE_REFERENCE('-brand-short-name')
+                    },
+                )
+            ),
+            FTL.Message(
+                id=FTL.Identifier('update-application-auto'),
+                attributes=[
+                    FTL.Attribute(
+                        FTL.Identifier('label'),
+                        COPY(
+                            'browser/chrome/browser/preferences/advanced.dtd',
+                            'updateAuto3.label',
+                        )
+                    ),
+                    FTL.Attribute(
+                        FTL.Identifier('accesskey'),
+                        COPY(
+                            'browser/chrome/browser/preferences/advanced.dtd',
+                            'updateAuto3.accesskey',
+                        )
+                    ),
+                ],
+            ),
+            FTL.Message(
+                id=FTL.Identifier('update-application-check-choose'),
+                attributes=[
+                    FTL.Attribute(
+                        FTL.Identifier('label'),
+                        COPY(
+                            'browser/chrome/browser/preferences/advanced.dtd',
+                            'updateCheckChoose2.label',
+                        )
+                    ),
+                    FTL.Attribute(
+                        FTL.Identifier('accesskey'),
+                        COPY(
+                            'browser/chrome/browser/preferences/advanced.dtd',
+                            'updateCheckChoose2.accesskey',
+                        )
+                    ),
+                ],
+            ),
+            FTL.Message(
+                id=FTL.Identifier('update-application-manual'),
+                attributes=[
+                    FTL.Attribute(
+                        FTL.Identifier('label'),
+                        COPY(
+                            'browser/chrome/browser/preferences/advanced.dtd',
+                            'updateManual2.label',
+                        )
+                    ),
+                    FTL.Attribute(
+                        FTL.Identifier('accesskey'),
+                        COPY(
+                            'browser/chrome/browser/preferences/advanced.dtd',
+                            'updateManual2.accesskey',
+                        )
+                    ),
+                ],
+            ),
+            FTL.Message(
+                id=FTL.Identifier('update-application-use-service'),
+                attributes=[
+                    FTL.Attribute(
+                        FTL.Identifier('label'),
+                        COPY(
+                            'browser/chrome/browser/preferences/advanced.dtd',
+                            'useService.label',
+                        )
+                    ),
+                    FTL.Attribute(
+                        FTL.Identifier('accesskey'),
+                        COPY(
+                            'browser/chrome/browser/preferences/advanced.dtd',
+                            'useService.accesskey',
+                        )
+                    ),
+                ],
+            ),
+            FTL.Message(
+                id=FTL.Identifier('update-enable-search-update'),
+                attributes=[
+                    FTL.Attribute(
+                        FTL.Identifier('label'),
+                        COPY(
+                            'browser/chrome/browser/preferences/advanced.dtd',
+                            'enableSearchUpdate2.label',
+                        )
+                    ),
+                    FTL.Attribute(
+                        FTL.Identifier('accesskey'),
+                        COPY(
+                            'browser/chrome/browser/preferences/advanced.dtd',
+                            'enableSearchUpdate2.accesskey',
+                        )
+                    ),
+                ],
+            ),
+            FTL.Message(
+                id=FTL.Identifier('performance-title'),
+                value=COPY(
+                    'browser/chrome/browser/preferences/advanced.dtd',
+                    'performance.label',
+                )
+            ),
+            FTL.Message(
+                id=FTL.Identifier('performance-use-recommended-settings-checkbox'),
+                attributes=[
+                    FTL.Attribute(
+                        FTL.Identifier('label'),
+                        COPY(
+                            'browser/chrome/browser/preferences/advanced.dtd',
+                            'useRecommendedPerformanceSettings2.label',
+                        )
+                    ),
+                    FTL.Attribute(
+                        FTL.Identifier('accesskey'),
+                        COPY(
+                            'browser/chrome/browser/preferences/advanced.dtd',
+                            'useRecommendedPerformanceSettings2.accesskey',
+                        )
+                    ),
+                ],
+            ),
+            FTL.Message(
+                id=FTL.Identifier('performance-use-recommended-settings-desc'),
+                value=COPY(
+                    'browser/chrome/browser/preferences/advanced.dtd',
+                    'useRecommendedPerformanceSettings2.description',
+                )
+            ),
+            FTL.Message(
+                id=FTL.Identifier('performance-settings-learn-more'),
+                value=COPY(
+                    'browser/chrome/browser/preferences/advanced.dtd',
+                    'performanceSettingsLearnMore.label',
+                )
+            ),
+            FTL.Message(
+                id=FTL.Identifier('performance-allow-hw-accel'),
+                attributes=[
+                    FTL.Attribute(
+                        FTL.Identifier('label'),
+                        COPY(
+                            'browser/chrome/browser/preferences/advanced.dtd',
+                            'allowHWAccel.label',
+                        )
+                    ),
+                    FTL.Attribute(
+                        FTL.Identifier('accesskey'),
+                        COPY(
+                            'browser/chrome/browser/preferences/advanced.dtd',
+                            'allowHWAccel.accesskey',
+                        )
+                    ),
+                ],
+            ),
+            FTL.Message(
+                id=FTL.Identifier('performance-limit-content-process-option'),
+                value=COPY(
+                    'browser/chrome/browser/preferences/advanced.dtd',
+                    'limitContentProcessOption.label',
+                ),
+                attributes=[
+                    FTL.Attribute(
+                        FTL.Identifier('accesskey'),
+                        COPY(
+                            'browser/chrome/browser/preferences/advanced.dtd',
+                            'limitContentProcessOption.accesskey',
+                        )
+                    ),
+                ],
+            ),
+            FTL.Message(
+                id=FTL.Identifier('performance-limit-content-process-enabled-desc'),
+                value=COPY(
+                    'browser/chrome/browser/preferences/advanced.dtd',
+                    'limitContentProcessOption.description',
+                )
+            ),
+            FTL.Message(
+                id=FTL.Identifier('performance-limit-content-process-disabled-desc'),
+                value=CONCAT(
+                    REPLACE(
+                        'browser/chrome/browser/preferences/advanced.dtd',
+                        'limitContentProcessOption.disabledDescription',
+                        {
+                            '&brandShortName;': MESSAGE_REFERENCE('-brand-short-name')
+                        },
+                    ),
+                    FTL.TextElement(' <a>'),
+                    COPY(
+                        'browser/chrome/browser/preferences/advanced.dtd',
+                        'limitContentProcessOption.disabledDescriptionLink',
+                    ),
+                    FTL.TextElement('</a>'),
+                )
+            ),
+            FTL.Message(
+                id=FTL.Identifier('performance-default-content-process-count'),
+                attributes=[
+                    FTL.Attribute(
+                        FTL.Identifier('label'),
+                        REPLACE(
+                            'browser/chrome/browser/preferences/preferences.properties',
+                            'defaultContentProcessCount',
+                            {
+                                '%S': EXTERNAL_ARGUMENT('num')
+                            },
+                        )
+                    ),
+                ],
+            ),
+            FTL.Message(
+                id=FTL.Identifier('browsing-title'),
+                value=COPY(
+                    'browser/chrome/browser/preferences/advanced.dtd',
+                    'browsing.label',
+                )
+            ),
+            FTL.Message(
+                id=FTL.Identifier('browsing-use-autoscroll'),
+                attributes=[
+                    FTL.Attribute(
+                        FTL.Identifier('label'),
+                        COPY(
+                            'browser/chrome/browser/preferences/advanced.dtd',
+                            'useAutoScroll.label',
+                        )
+                    ),
+                    FTL.Attribute(
+                        FTL.Identifier('accesskey'),
+                        COPY(
+                            'browser/chrome/browser/preferences/advanced.dtd',
+                            'useAutoScroll.accesskey',
+                        )
+                    ),
+                ],
+            ),
+            FTL.Message(
+                id=FTL.Identifier('browsing-use-smooth-scrolling'),
+                attributes=[
+                    FTL.Attribute(
+                        FTL.Identifier('label'),
+                        COPY(
+                            'browser/chrome/browser/preferences/advanced.dtd',
+                            'useSmoothScrolling.label',
+                        )
+                    ),
+                    FTL.Attribute(
+                        FTL.Identifier('accesskey'),
+                        COPY(
+                            'browser/chrome/browser/preferences/advanced.dtd',
+                            'useSmoothScrolling.accesskey',
+                        )
+                    ),
+                ],
+            ),
+            FTL.Message(
+                id=FTL.Identifier('browsing-use-onscreen-keyboard'),
+                attributes=[
+                    FTL.Attribute(
+                        FTL.Identifier('label'),
+                        COPY(
+                            'browser/chrome/browser/preferences/advanced.dtd',
+                            'useOnScreenKeyboard.label',
+                        )
+                    ),
+                    FTL.Attribute(
+                        FTL.Identifier('accesskey'),
+                        COPY(
+                            'browser/chrome/browser/preferences/advanced.dtd',
+                            'useOnScreenKeyboard.accesskey',
+                        )
+                    ),
+                ],
+            ),
+            FTL.Message(
+                id=FTL.Identifier('browsing-use-cursor-navigation'),
+                attributes=[
+                    FTL.Attribute(
+                        FTL.Identifier('label'),
+                        COPY(
+                            'browser/chrome/browser/preferences/advanced.dtd',
+                            'useCursorNavigation.label',
+                        )
+                    ),
+                    FTL.Attribute(
+                        FTL.Identifier('accesskey'),
+                        COPY(
+                            'browser/chrome/browser/preferences/advanced.dtd',
+                            'useCursorNavigation.accesskey',
+                        )
+                    ),
+                ],
+            ),
+            FTL.Message(
+                id=FTL.Identifier('browsing-search-on-start-typing'),
+                attributes=[
+                    FTL.Attribute(
+                        FTL.Identifier('label'),
+                        COPY(
+                            'browser/chrome/browser/preferences/advanced.dtd',
+                            'searchOnStartTyping.label',
+                        )
+                    ),
+                    FTL.Attribute(
+                        FTL.Identifier('accesskey'),
+                        COPY(
+                            'browser/chrome/browser/preferences/advanced.dtd',
+                            'searchOnStartTyping.accesskey',
+                        )
+                    ),
+                ],
+            ),
+            FTL.Message(
+                id=FTL.Identifier('network-proxy-title'),
+                value=COPY(
+                    'browser/chrome/browser/preferences/advanced.dtd',
+                    'networkProxy.label',
+                )
+            ),
+            FTL.Message(
+                id=FTL.Identifier('network-proxy-connection-learn-more'),
+                value=COPY(
+                    'browser/chrome/browser/preferences/advanced.dtd',
+                    'connectionSettingsLearnMore.label',
+                )
+            ),
+            FTL.Message(
+                id=FTL.Identifier('network-proxy-connection-settings'),
+                attributes=[
+                    FTL.Attribute(
+                        FTL.Identifier('label'),
+                        COPY(
+                            'browser/chrome/browser/preferences/advanced.dtd',
+                            'connectionSettings.label',
+                        )
+                    ),
+                    FTL.Attribute(
+                        FTL.Identifier('accesskey'),
+                        COPY(
+                            'browser/chrome/browser/preferences/advanced.dtd',
+                            'connectionSettings.accesskey',
+                        )
+                    ),
+                ],
+            ),
+        ]
+    )