Bug 1486936. Migrated about:config to Fluent for localization. r=Gijs,flod,jaws
authorJim <lennonj1@msu.edu>
Wed, 26 Sep 2018 04:33:22 +0000
changeset 438249 74670d52eefb
parent 438248 255ba5eac283
child 438250 0cdfaafc3e6b
push id69954
push usergijskruitbosch@gmail.com
push dateWed, 26 Sep 2018 07:43:12 +0000
treeherderautoland@74670d52eefb [default view] [failures only]
perfherder[talos] [build metrics] [platform microbench] (compared to previous push)
reviewersGijs, flod, jaws
bugs1486936
milestone64.0a1
first release with
nightly linux32
nightly linux64
nightly mac
nightly win32
nightly win64
last release without
nightly linux32
nightly linux64
nightly mac
nightly win32
nightly win64
Bug 1486936. Migrated about:config to Fluent for localization. r=Gijs,flod,jaws Bug 1486936 - Migrated about:config to Fluent for localization. Differential Revision: https://phabricator.services.mozilla.com/D5669
python/l10n/fluent_migrations/bug_1486936_about_config.py
toolkit/components/viewconfig/content/config.js
toolkit/components/viewconfig/content/config.xul
toolkit/locales/en-US/chrome/global/config.dtd
toolkit/locales/en-US/chrome/global/config.properties
toolkit/locales/en-US/toolkit/about/aboutConfig.ftl
toolkit/locales/jar.mn
new file mode 100644
--- /dev/null
+++ b/python/l10n/fluent_migrations/bug_1486936_about_config.py
@@ -0,0 +1,125 @@
+# 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 transforms_from, VARIABLE_REFERENCE
+from fluent.migrate import REPLACE, COPY
+
+def migrate(ctx):
+	"""Bug 1486936 - Convert about:config to using Fluent for localization, part {index}."""
+
+	ctx.add_transforms(
+	"toolkit/toolkit/about/aboutConfig.ftl",
+	"toolkit/toolkit/about/aboutConfig.ftl",
+	transforms_from(
+"""
+config-window =
+  .title = { COPY(from_path, "window.title") }
+config-about-warning-title =
+  .value = { COPY(from_path, "aboutWarningTitle.label") }
+config-about-warning-text = { COPY(from_path, "aboutWarningText.label") }
+config-about-warning-button = 
+  .label = { COPY(from_path, "aboutWarningButton2.label") }
+config-about-warning-checkbox =
+  .label = { COPY(from_path, "aboutWarningCheckbox.label") }
+config-search-prefs =
+  .value = { COPY(from_path, "searchPrefs.label") }
+  .accesskey = { COPY(from_path, "searchPrefs.accesskey") }
+config-focus-search =
+  .key = { COPY(from_path, "focusSearch.key") }
+config-focus-search-2 =
+  .key = { COPY(from_path, "focusSearch2.key") }
+config-pref-column =
+  .label = { COPY(from_path, "prefColumn.label") }
+config-lock-column =
+  .label = { COPY(from_path, "lockColumn.label") }
+config-type-column =
+  .label = { COPY(from_path, "typeColumn.label") }
+config-value-column =
+  .label = { COPY(from_path, "valueColumn.label") }
+config-pref-column-header =
+  .tooltip = { COPY(from_path, "prefColumnHeader.tooltip") }
+config-column-chooser =
+  .tooltip = { COPY(from_path, "columnChooser.tooltip") }
+config-copy-pref =
+  .key = { COPY(from_path, "copyPref.key") }
+  .label = { COPY(from_path, "copyPref.label") }
+  .accesskey = { COPY(from_path, "copyPref.accesskey") }
+config-copy-name =
+  .label = { COPY(from_path, "copyName.label") }
+  .accesskey = { COPY(from_path, "copyName.accesskey") }
+config-copy-value =
+  .label = { COPY(from_path, "copyValue.label") }
+  .accesskey = { COPY(from_path, "copyValue.accesskey") }
+config-modify =
+  .label = { COPY(from_path, "modify.label") }
+  .accesskey = { COPY(from_path, "modify.accesskey") }
+config-toggle =
+  .label = { COPY(from_path, "toggle.label") }
+  .accesskey = { COPY(from_path, "toggle.accesskey") }
+config-reset =
+  .label = { COPY(from_path, "reset.label") }
+  .accesskey = { COPY(from_path, "reset.accesskey") }
+config-new =
+  .label = { COPY(from_path, "new.label") }
+  .accesskey = { COPY(from_path, "new.accesskey") }
+config-string =
+  .label = { COPY(from_path, "string.label") }
+  .accesskey = { COPY(from_path, "string.accesskey") }
+config-integer =
+  .label = { COPY(from_path, "integer.label") }
+  .accesskey = { COPY(from_path, "integer.accesskey") }
+config-boolean =
+  .label = { COPY(from_path, "boolean.label") }
+  .accesskey = { COPY(from_path, "boolean.accesskey") }
+""", from_path="toolkit/chrome/global/config.dtd"))
+
+	ctx.add_transforms(
+	"toolkit/toolkit/about/aboutConfig.ftl",
+	"toolkit/toolkit/about/aboutConfig.ftl",
+		transforms_from(
+"""
+config-default = { COPY(from_path, "default") }
+config-modified = { COPY(from_path, "modified") }
+config-locked = { COPY(from_path, "locked") }
+config-property-string = { COPY(from_path, "string") }
+config-property-int = { COPY(from_path, "int") }
+config-property-bool = { COPY(from_path, "bool") }
+config-new-prompt = { COPY(from_path, "new_prompt") }
+config-nan-title = { COPY(from_path, "nan_title") }
+config-nan-text = { COPY(from_path, "nan_text") }
+""", from_path="toolkit/chrome/global/config.properties"))
+
+	ctx.add_transforms(
+	"toolkit/toolkit/about/aboutConfig.ftl",
+	"toolkit/toolkit/about/aboutConfig.ftl",
+	[
+		FTL.Message(
+			id=FTL.Identifier("config-new-title"),
+			value=REPLACE(
+				"toolkit/chrome/global/config.properties",
+				"new_title",
+				{
+					"%S": VARIABLE_REFERENCE(
+						"type"
+					),
+				}
+			)
+		),
+		FTL.Message(
+			id=FTL.Identifier("config-modify-title"),
+			value=REPLACE(
+				"toolkit/chrome/global/config.properties",
+				"modify_title",
+				{
+					"%S": VARIABLE_REFERENCE(
+						"type"
+					),
+				}
+			)
+		),
+	]
+	)
--- a/toolkit/components/viewconfig/content/config.js
+++ b/toolkit/components/viewconfig/content/config.js
@@ -26,17 +26,16 @@ const PREF_IS_MODIFIED = 1;
 const PREF_IS_LOCKED = 2;
 
 var gPrefHash = {};
 var gPrefArray = [];
 var gPrefView = gPrefArray; // share the JS array
 var gSortedColumn = "prefCol";
 var gSortFunction = null;
 var gSortDirection = 1; // 1 is ascending; -1 is descending
-var gConfigBundle = null;
 var gFilter = null;
 
 var view = {
   get rowCount() { return gPrefView.length; },
   getCellText(index, col) {
     if (!(index in gPrefView))
       return "";
 
@@ -299,27 +298,33 @@ function fetchPref(prefName, prefIndex) 
         break;
     }
   } catch (e) {
     // Also catch obscure cases in which you can't tell in advance
     // that the pref exists but has no user or default value...
   }
 }
 
-function onConfigLoad() {
+async function onConfigLoad() {
   // Load strings
-  gConfigBundle = document.getElementById("configBundle");
+  let [lockDefault, lockModified, lockLocked, typeString, typeInt, typeBool] =
+    await document.l10n.formatValues([
+      {id: "config-default"},
+      {id: "config-modified"},
+      {id: "config-locked"},
+      {id: "config-property-string"},
+      {id: "config-property-int"},
+      {id: "config-property-bool"}]);
 
-  gLockStrs[PREF_IS_DEFAULT_VALUE] = gConfigBundle.getString("default");
-  gLockStrs[PREF_IS_MODIFIED] = gConfigBundle.getString("modified");
-  gLockStrs[PREF_IS_LOCKED] = gConfigBundle.getString("locked");
-
-  gTypeStrs[nsIPrefBranch.PREF_STRING] = gConfigBundle.getString("string");
-  gTypeStrs[nsIPrefBranch.PREF_INT] = gConfigBundle.getString("int");
-  gTypeStrs[nsIPrefBranch.PREF_BOOL] = gConfigBundle.getString("bool");
+  gLockStrs[PREF_IS_DEFAULT_VALUE] = lockDefault;
+  gLockStrs[PREF_IS_MODIFIED] = lockModified;
+  gLockStrs[PREF_IS_LOCKED] = lockLocked;
+  gTypeStrs[nsIPrefBranch.PREF_STRING] = typeString;
+  gTypeStrs[nsIPrefBranch.PREF_INT] = typeInt;
+  gTypeStrs[nsIPrefBranch.PREF_BOOL] = typeBool;
 
   var showWarning = gPrefBranch.getBoolPref("general.warnOnAboutConfig");
 
   if (showWarning)
     document.getElementById("warningButton").focus();
   else
     ShowPrefs();
 }
@@ -521,23 +526,27 @@ function ModifySelected() {
     ModifyPref(gPrefView[view.selection.currentIndex]);
 }
 
 function ResetSelected() {
   var entry = gPrefView[view.selection.currentIndex];
   gPrefBranch.clearUserPref(entry.prefCol);
 }
 
-function NewPref(type) {
+async function NewPref(type) {
   var result = { value: "" };
   var dummy = { value: 0 };
+
+  let [newTitle, newPrompt] = await document.l10n.formatValues([
+    {id: "config-new-title", args: {type: gTypeStrs[type]} },
+    {id: "config-new-prompt"}]);
+
   if (Services.prompt.prompt(window,
-                             gConfigBundle.getFormattedString("new_title",
-                                                              [gTypeStrs[type]]),
-                             gConfigBundle.getString("new_prompt"),
+                             newTitle,
+                             newPrompt,
                              result,
                              null,
                              dummy)) {
     result.value = result.value.trim();
     if (!result.value) {
       return;
     }
 
@@ -558,37 +567,41 @@ function gotoPref(pref) {
     view.selection.select(index);
     view.treebox.ensureRowIsVisible(index);
   } else {
     view.selection.clearSelection();
     view.selection.currentIndex = -1;
   }
 }
 
-function ModifyPref(entry) {
+async function ModifyPref(entry) {
   if (entry.lockCol == PREF_IS_LOCKED)
     return false;
-  var title = gConfigBundle.getFormattedString("modify_title", [gTypeStrs[entry.typeCol]]);
+
+  let [title] = await document.l10n.formatValues([{id: "config-modify-title", args: { type: gTypeStrs[entry.typeCol] }}]);
+
   if (entry.typeCol == nsIPrefBranch.PREF_BOOL) {
     var check = { value: entry.valueCol == "false" };
     if (!entry.valueCol && !Services.prompt.select(window, title, entry.prefCol, 2, [false, true], check))
       return false;
     gPrefBranch.setBoolPref(entry.prefCol, check.value);
   } else {
     var result = { value: entry.valueCol };
     var dummy = { value: 0 };
     if (!Services.prompt.prompt(window, title, entry.prefCol, result, null, dummy))
       return false;
     if (entry.typeCol == nsIPrefBranch.PREF_INT) {
       // | 0 converts to integer or 0; - 0 to float or NaN.
       // Thus, this check should catch all cases.
       var val = result.value | 0;
       if (val != result.value - 0) {
-        var err_title = gConfigBundle.getString("nan_title");
-        var err_text = gConfigBundle.getString("nan_text");
+        const [err_title, err_text] = await document.l10n.formatValues([
+          {id: "config-nan-title"},
+          {id: "config-nan-text"}]);
+
         Services.prompt.alert(window, err_title, err_text);
         return false;
       }
       gPrefBranch.setIntPref(entry.prefCol, val);
     } else {
       gPrefBranch.setStringPref(entry.prefCol, result.value);
     }
   }
--- a/toolkit/components/viewconfig/content/config.xul
+++ b/toolkit/components/viewconfig/content/config.xul
@@ -3,100 +3,100 @@
 <!-- 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/. -->
 
 <?xml-stylesheet href="chrome://global/skin/" type="text/css"?>
 <?xml-stylesheet href="chrome://global/skin/in-content/info-pages.css" type="text/css"?>
 <?xml-stylesheet href="chrome://global/skin/config.css" type="text/css"?>
 
-<!DOCTYPE window SYSTEM "chrome://global/locale/config.dtd">
-
 <window id="config"
+        data-l10n-id="config-window"
+        aria-describedby="warningTitle warningText"
         xmlns="http://www.mozilla.org/keymaster/gatekeeper/there.is.only.xul"
-        title="&window.title;"
         windowtype="Preferences:ConfigManager"
         role="application"
-        aria-describedby="warningTitle warningText"
         width="750"
         height="500"
         disablefastfind="true"
         onunload="onConfigUnload();"
         onload="onConfigLoad();">
 
+<linkset>
+  <link rel="localization" href="toolkit/about/aboutConfig.ftl"/>
+</linkset>
+
 <script src="chrome://global/content/config.js"/>
 
 <stringbundle id="configBundle" src="chrome://global/locale/config.properties"/>
 
 <menupopup id="configContext" onpopupshowing="if (event.target == this) updateContextMenu();">
-  <menuitem id="toggleSelected" default="true"
-            label="&toggle.label;" accesskey="&toggle.accesskey;"
+  <menuitem id="toggleSelected" data-l10n-id="config-toggle" default="true"
             oncommand="ModifySelected();"/>
-  <menuitem id="modifySelected" default="true"
-            label="&modify.label;" accesskey="&modify.accesskey;"
+  <menuitem id="modifySelected" data-l10n-id="config-modify" default="true"
             oncommand="ModifySelected();"/>
   <menuseparator/>
-  <menuitem id="copyPref" label="&copyPref.label;" accesskey="&copyPref.accesskey;" oncommand="copyPref();"/>
-  <menuitem id="copyName" label="&copyName.label;" accesskey="&copyName.accesskey;" oncommand="copyName();"/>
-  <menuitem id="copyValue" label="&copyValue.label;" accesskey="&copyValue.accesskey;" oncommand="copyValue();"/>
-  <menu label="&new.label;" accesskey="&new.accesskey;">
+  <menuitem id="copyPref" data-l10n-id="config-copy-pref" oncommand="copyPref();"/>
+  <menuitem id="copyName" data-l10n-id="config-copy-name" oncommand="copyName();"/>
+  <menuitem id="copyValue" data-l10n-id="config-copy-value" oncommand="copyValue();"/>
+  <menu data-l10n-id="config-new">
     <menupopup>
-      <menuitem label="&string.label;" accesskey="&string.accesskey;" oncommand="NewPref(nsIPrefBranch.PREF_STRING);"/>
-      <menuitem label="&integer.label;" accesskey="&integer.accesskey;" oncommand="NewPref(nsIPrefBranch.PREF_INT);"/>
-      <menuitem label="&boolean.label;" accesskey="&boolean.accesskey;" oncommand="NewPref(nsIPrefBranch.PREF_BOOL);"/>
+      <menuitem data-l10n-id="config-string" oncommand="NewPref(nsIPrefBranch.PREF_STRING);"/>
+      <menuitem data-l10n-id="config-integer" oncommand="NewPref(nsIPrefBranch.PREF_INT);"/>
+      <menuitem data-l10n-id="config-boolean" oncommand="NewPref(nsIPrefBranch.PREF_BOOL);"/>
     </menupopup>
   </menu>
-  <menuitem id="resetSelected" label="&reset.label;" accesskey="&reset.accesskey;" oncommand="ResetSelected();"/>
+  <menuitem id="resetSelected" data-l10n-id="config-reset" oncommand="ResetSelected();"/>
 </menupopup>
 
 <keyset id="configTreeKeyset" disabled="true">
   <key keycode="VK_RETURN" oncommand="ModifySelected();"/>
-  <key key="&focusSearch.key;" modifiers="accel" oncommand="document.getElementById('textbox').focus();"/>
-  <key key="&focusSearch2.key;" modifiers="accel" oncommand="document.getElementById('textbox').focus();"/>
+  <key modifiers="accel" data-l10n-id="config-focus-search" oncommand="document.getElementById('textbox').focus();"/>
+  <key modifiers="accel" data-l10n-id="config-focus-search-2" oncommand="document.getElementById('textbox').focus();"/>
 </keyset>
 <deck id="configDeck" flex="1">
   <vbox id="warningScreen" flex="1" align="center" style="overflow: auto;">
     <spacer flex="1"/>
     <vbox id="warningBox" class="container">
       <hbox class="title" flex="1">
-        <label id="warningTitle" class="title-text" flex="1">&aboutWarningTitle.label;</label>
+        <label id="warningTitle" data-l10n-id="config-about-warning-title" class="title-text" flex="1"></label>
       </hbox>
       <vbox class="description" flex="1">
-        <label id="warningText">&aboutWarningText.label;</label>
-        <checkbox id="showWarningNextTime" label="&aboutWarningCheckbox.label;" checked="true"/>
+        <label id="warningText" data-l10n-id="config-about-warning-text"></label>
+        <checkbox id="showWarningNextTime" data-l10n-id="config-about-warning-checkbox" checked="true"/>
         <hbox class="button-container">
-          <button id="warningButton" class="primary" oncommand="ShowPrefs();" label="&aboutWarningButton2.label;"/>
+          <button id="warningButton" data-l10n-id="config-about-warning-button" class="primary" oncommand="ShowPrefs();"/>
         </hbox>
       </vbox>
     </vbox>
     <spacer flex="2"/>
   </vbox>
   <vbox flex="1">
     <hbox id="filterRow" align="center">
-      <label value="&searchPrefs.label;" accesskey="&searchPrefs.accesskey;" control="textbox"/>
+      <label data-l10n-id="config-search-prefs" control="textbox"/>
       <textbox id="textbox" flex="1" type="search" class="compact"
                aria-controls="configTree"
                oncommand="FilterPrefs();"/>
     </hbox>
 
     <tree id="configTree" flex="1" seltype="single"
           onselect="updateCommands('select');"
           enableColumnDrag="true" context="configContext">
       <treecols>
-        <treecol id="prefCol" label="&prefColumn.label;" flex="7"
+        <treecol id="prefCol" data-l10n-id="config-pref-column" flex="7"
             ignoreincolumnpicker="true"
             persist="hidden width ordinal sortDirection"/>
         <splitter class="tree-splitter" />
-        <treecol id="lockCol" label="&lockColumn.label;" flex="1"
+        <treecol id="lockCol" data-l10n-id="config-lock-column" flex="1"
             persist="hidden width ordinal sortDirection"/>
         <splitter class="tree-splitter" />
-        <treecol id="typeCol" label="&typeColumn.label;" flex="1"
+        <treecol id="typeCol" data-l10n-id="config-type-column" flex="1"
             persist="hidden width ordinal sortDirection"/>
         <splitter class="tree-splitter" />
-        <treecol id="valueCol" label="&valueColumn.label;" flex="10"
+        <treecol id="valueCol" data-l10n-id="config-value-column" flex="10"
             persist="hidden width ordinal sortDirection"/>
       </treecols>
 
       <treechildren id="configTreeBody" ondblclick="if (event.button == 0) ModifySelected();"/>
     </tree>
   </vbox>
 </deck>
 </window>
deleted file mode 100644
--- a/toolkit/locales/en-US/chrome/global/config.dtd
+++ /dev/null
@@ -1,50 +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 window.title "about:config">
-
-<!-- about:config warning page -->
-<!-- LOCALIZATION NOTE: aboutWarningTitle.label should be attention grabbing and playful -->
-<!ENTITY aboutWarningTitle.label "This might void your warranty!">
-<!ENTITY aboutWarningText.label "Changing these advanced settings can be harmful to the stability, security, and performance of this application. You should only continue if you are sure of what you are doing.">
-<!ENTITY aboutWarningButton2.label "I accept the risk!">
-<!ENTITY aboutWarningCheckbox.label "Show this warning next time">
-
-<!ENTITY searchPrefs.label "Search:">
-<!ENTITY searchPrefs.accesskey "r">
-<!ENTITY focusSearch.key "r">
-<!ENTITY focusSearch2.key "f">
-
-<!-- Columns -->
-<!ENTITY prefColumn.label "Preference Name">
-<!ENTITY lockColumn.label "Status">
-<!ENTITY typeColumn.label "Type">
-<!ENTITY valueColumn.label "Value">
-
-<!-- Tooltips -->
-<!ENTITY prefColumnHeader.tooltip "Click to sort"> 
-<!ENTITY columnChooser.tooltip "Click to select columns to display"> 
-
-<!-- Context Menu -->
-<!ENTITY copyPref.key "C">
-<!ENTITY copyPref.label "Copy">
-<!ENTITY copyPref.accesskey "C">
-<!ENTITY copyName.label "Copy Name">
-<!ENTITY copyName.accesskey "N">
-<!ENTITY copyValue.label "Copy Value">
-<!ENTITY copyValue.accesskey "V">
-<!ENTITY modify.label "Modify">
-<!ENTITY modify.accesskey "M">
-<!ENTITY toggle.label "Toggle">
-<!ENTITY toggle.accesskey "T">
-<!ENTITY reset.label "Reset">
-<!ENTITY reset.accesskey "R">
-<!ENTITY new.label "New">
-<!ENTITY new.accesskey "w">
-<!ENTITY string.label "String">
-<!ENTITY string.accesskey "S">
-<!ENTITY integer.label "Integer">
-<!ENTITY integer.accesskey "I">
-<!ENTITY boolean.label "Boolean">
-<!ENTITY boolean.accesskey "B">
deleted file mode 100644
--- a/toolkit/locales/en-US/chrome/global/config.properties
+++ /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/.
-
-# Lock column values
-default=default
-modified=modified
-locked=locked
-
-# Type column values
-string=string
-int=integer
-bool=boolean
-
-# Preference prompts
-# %S is replaced by one of the type column values above
-new_title=New %S value
-new_prompt=Enter the preference name
-modify_title=Enter %S value
-
-nan_title=Invalid value
-nan_text=The text you entered is not a number.
new file mode 100644
--- /dev/null
+++ b/toolkit/locales/en-US/toolkit/about/aboutConfig.ftl
@@ -0,0 +1,106 @@
+# 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/.
+
+config-window =
+    .title = about:config
+
+## Strings used to display a warning in about:config
+
+# This text should be attention grabbing and playful
+config-about-warning-title =
+    .value = This might void your warranty!
+config-about-warning-text = Changing these advanced settings can be harmful to the stability, security, and performance of this application. You should only continue if you are sure of what you are doing.
+config-about-warning-button =
+    .label = I accept the risk!
+config-about-warning-checkbox =
+    .label = Show this warning next time
+
+config-search-prefs =
+    .value = Search:
+    .accesskey = r
+
+config-focus-search =
+    .key = r
+
+config-focus-search-2 =
+    .key = f
+
+## These strings are used for column headers
+config-pref-column =
+    .label = Preference Name
+config-lock-column =
+    .label = Status
+config-type-column =
+    .label = Type
+config-value-column =
+    .label = Value
+
+## These strings are used for tooltips
+config-pref-column-header =
+    .tooltip = Click to sort
+config-column-chooser =
+    .tooltip = Click to select columns to display
+
+## These strings are used for the context menu
+config-copy-pref =
+    .key = C
+    .label = Copy
+    .accesskey = C
+
+config-copy-name =
+    .label = Copy Name
+    .accesskey = N
+
+config-copy-value =
+    .label = Copy Value
+    .accesskey = V
+
+config-modify =
+    .label = Modify
+    .accesskey = M
+
+config-toggle =
+    .label = Toggle
+    .accesskey = T
+
+config-reset =
+    .label = Reset
+    .accesskey = R
+
+config-new =
+    .label = New
+    .accesskey = w
+
+config-string =
+    .label = String
+    .accesskey = S
+
+config-integer =
+    .label = Integer
+    .accesskey = I
+
+config-boolean =
+    .label = Boolean
+    .accesskey = B
+
+config-default = default
+config-modified = modified
+config-locked = locked
+
+config-property-string = string
+config-property-int = integer
+config-property-bool = boolean
+
+config-new-prompt = Enter the preference name
+
+config-nan-title = Invalid value
+config-nan-text = The text you entered is not a number.
+
+# Variables:
+#   $type (String): type of value (boolean, integer or string)
+config-new-title = New { $type } value
+
+# Variables:
+#   $type (String): type of value (boolean, integer or string)
+config-modify-title = Enter { $type } value
--- a/toolkit/locales/jar.mn
+++ b/toolkit/locales/jar.mn
@@ -23,18 +23,16 @@
   locale/@AB_CD@/global/aboutWebrtc.properties          (%chrome/global/aboutWebrtc.properties)
   locale/@AB_CD@/global/autocomplete.properties         (%chrome/global/autocomplete.properties)
   locale/@AB_CD@/global/appPicker.dtd                   (%chrome/global/appPicker.dtd)
   locale/@AB_CD@/global/browser.properties              (%chrome/global/browser.properties)
   locale/@AB_CD@/global/charsetMenu.dtd                 (%chrome/global/charsetMenu.dtd)
   locale/@AB_CD@/global/charsetMenu.properties          (%chrome/global/charsetMenu.properties)
   locale/@AB_CD@/global/commonDialog.dtd                (%chrome/global/commonDialog.dtd)
   locale/@AB_CD@/global/commonDialogs.properties        (%chrome/global/commonDialogs.properties)
-  locale/@AB_CD@/global/config.dtd                      (%chrome/global/config.dtd)
-  locale/@AB_CD@/global/config.properties               (%chrome/global/config.properties)
   locale/@AB_CD@/global/contentAreaCommands.properties  (%chrome/global/contentAreaCommands.properties)
   locale/@AB_CD@/global/datetimebox.dtd                 (%chrome/global/datetimebox.dtd)
   locale/@AB_CD@/global/dialogOverlay.dtd               (%chrome/global/dialogOverlay.dtd)
 #ifndef MOZ_FENNEC
   locale/@AB_CD@/global/editMenuOverlay.dtd             (%chrome/global/editMenuOverlay.dtd)
 #endif
   locale/@AB_CD@/global/extensions.properties           (%chrome/global/extensions.properties)
   locale/@AB_CD@/global/fallbackMenubar.properties      (%chrome/global/fallbackMenubar.properties)