[Pkg-mozext-commits] [personasplus] 05/13: Restartless

David Prévot taffit at moszumanska.debian.org
Sun Jun 12 01:06:19 UTC 2016


This is an automated email from the git hooks/post-receive script.

taffit pushed a commit to branch master
in repository personasplus.

commit c76df2863301d25f6140f67d86f3364ff78b7efc
Author: Baris Derin <baris at barisderin.com>
Date:   Tue May 31 19:05:59 2016 +0300

    Restartless
---
 extension/bootstrap.js                             | 271 ++++++++++++
 extension/chrome.manifest                          |  24 +-
 extension/defaults/preferences/prefs.js            |   3 +
 extension/install.rdf                              |   2 +-
 extension/locale/ar/personas.dtd                   |   5 -
 extension/locale/ar/personas_bootstrap.properties  |   5 +
 extension/locale/ast-ES/personas.dtd               |   5 -
 .../locale/ast-ES/personas_bootstrap.properties    |   5 +
 extension/locale/bg-BG/personas.dtd                |   5 -
 .../locale/bg-BG/personas_bootstrap.properties     |   5 +
 extension/locale/cs-CZ/personas.dtd                |   5 -
 .../locale/cs-CZ/personas_bootstrap.properties     |   5 +
 extension/locale/da/personas.dtd                   |   5 -
 extension/locale/da/personas_bootstrap.properties  |   5 +
 extension/locale/de-DE/personas.dtd                |   5 -
 .../locale/de-DE/personas_bootstrap.properties     |   5 +
 extension/locale/de/personas.dtd                   |   5 -
 extension/locale/de/personas_bootstrap.properties  |   5 +
 extension/locale/el-GR/personas.dtd                |   5 -
 .../locale/el-GR/personas_bootstrap.properties     |   5 +
 extension/locale/el/personas.dtd                   |   5 -
 extension/locale/el/personas_bootstrap.properties  |   5 +
 extension/locale/en-US/personas.dtd                |   5 -
 .../locale/en-US/personas_bootstrap.properties     |   5 +
 extension/locale/es-AR/personas.dtd                |   5 -
 .../locale/es-AR/personas_bootstrap.properties     |   5 +
 extension/locale/es-CL/personas.dtd                |   5 -
 .../locale/es-CL/personas_bootstrap.properties     |   5 +
 extension/locale/es-ES/personas.dtd                |   5 -
 .../locale/es-ES/personas_bootstrap.properties     |   5 +
 extension/locale/es-MX/personas.dtd                |   5 -
 .../locale/es-MX/personas_bootstrap.properties     |   5 +
 extension/locale/eu-ES/personas.dtd                |   5 -
 .../locale/eu-ES/personas_bootstrap.properties     |   5 +
 extension/locale/eu/personas.dtd                   |   5 -
 extension/locale/eu/personas_bootstrap.properties  |   5 +
 extension/locale/fi-FI/personas.dtd                |   5 -
 .../locale/fi-FI/personas_bootstrap.properties     |   5 +
 extension/locale/fi/personas.dtd                   |   5 -
 extension/locale/fi/personas_bootstrap.properties  |   5 +
 extension/locale/fr/personas.dtd                   |   5 -
 extension/locale/fr/personas_bootstrap.properties  |   5 +
 extension/locale/fy-NL/personas.dtd                |   5 -
 .../locale/fy-NL/personas_bootstrap.properties     |   5 +
 extension/locale/ga-IE/personas.dtd                |   5 -
 .../locale/ga-IE/personas_bootstrap.properties     |   5 +
 extension/locale/gl-ES/personas.dtd                |   5 -
 .../locale/gl-ES/personas_bootstrap.properties     |   5 +
 extension/locale/he-IL/personas.dtd                |   5 -
 .../locale/he-IL/personas_bootstrap.properties     |   5 +
 extension/locale/hu-HU/personas.dtd                |   5 -
 .../locale/hu-HU/personas_bootstrap.properties     |   5 +
 extension/locale/it/personas.dtd                   |   5 -
 extension/locale/it/personas_bootstrap.properties  |   5 +
 extension/locale/ja-JP-mac/personas.dtd            |   5 -
 .../locale/ja-JP-mac/personas_bootstrap.properties |   5 +
 extension/locale/ja-JP/personas.dtd                |   5 -
 .../locale/ja-JP/personas_bootstrap.properties     |   5 +
 extension/locale/ja/personas.dtd                   |   5 -
 extension/locale/ja/personas_bootstrap.properties  |   5 +
 extension/locale/ko-KR/personas.dtd                |   5 -
 .../locale/ko-KR/personas_bootstrap.properties     |   5 +
 extension/locale/lt-LT/personas.dtd                |   5 -
 .../locale/lt-LT/personas_bootstrap.properties     |   5 +
 extension/locale/lt/personas.dtd                   |   5 -
 extension/locale/lt/personas_bootstrap.properties  |   5 +
 extension/locale/mk-MK/personas.dtd                |   5 -
 .../locale/mk-MK/personas_bootstrap.properties     |   5 +
 extension/locale/nl/personas.dtd                   |   5 -
 extension/locale/nl/personas_bootstrap.properties  |   5 +
 extension/locale/pl-PL/personas.dtd                |   5 -
 .../locale/pl-PL/personas_bootstrap.properties     |   5 +
 extension/locale/pl/personas.dtd                   |   5 -
 extension/locale/pl/personas_bootstrap.properties  |   5 +
 extension/locale/pt-BR/personas.dtd                |   5 -
 .../locale/pt-BR/personas_bootstrap.properties     |   5 +
 extension/locale/pt-PT/personas.dtd                |   5 -
 .../locale/pt-PT/personas_bootstrap.properties     |   5 +
 extension/locale/ro/personas.dtd                   |   5 -
 extension/locale/ro/personas_bootstrap.properties  |   5 +
 extension/locale/ru-RU/personas.dtd                |   5 -
 .../locale/ru-RU/personas_bootstrap.properties     |   5 +
 extension/locale/si-LK/personas.dtd                |   5 -
 .../locale/si-LK/personas_bootstrap.properties     |   5 +
 extension/locale/sk-SK/personas.dtd                |   5 -
 .../locale/sk-SK/personas_bootstrap.properties     |   5 +
 extension/locale/sl-SI/personas.dtd                |   5 -
 .../locale/sl-SI/personas_bootstrap.properties     |   5 +
 extension/locale/sr-RS/personas.dtd                |   5 -
 .../locale/sr-RS/personas_bootstrap.properties     |   5 +
 extension/locale/sr/personas.dtd                   |   5 -
 extension/locale/sr/personas_bootstrap.properties  |   5 +
 extension/locale/sv-SE/personas.dtd                |   5 -
 .../locale/sv-SE/personas_bootstrap.properties     |   5 +
 extension/locale/tr/personas.dtd                   |   5 -
 extension/locale/tr/personas_bootstrap.properties  |   5 +
 extension/locale/uk-UA/personas.dtd                |   5 -
 .../locale/uk-UA/personas_bootstrap.properties     |   5 +
 extension/locale/vi-VN/personas.dtd                |   5 -
 .../locale/vi-VN/personas_bootstrap.properties     |   5 +
 extension/locale/vi/personas.dtd                   |   5 -
 extension/locale/vi/personas_bootstrap.properties  |   5 +
 extension/locale/zh-CN/personas.dtd                |   5 -
 .../locale/zh-CN/personas_bootstrap.properties     |   5 +
 extension/locale/zh-TW/personas.dtd                |   5 -
 .../locale/zh-TW/personas_bootstrap.properties     |   5 +
 extension/{content => modules}/personas.js         | 480 ++++++++++++++++-----
 107 files changed, 920 insertions(+), 370 deletions(-)

diff --git a/extension/bootstrap.js b/extension/bootstrap.js
new file mode 100644
index 0000000..f39ff9d
--- /dev/null
+++ b/extension/bootstrap.js
@@ -0,0 +1,271 @@
+if (typeof Cc == "undefined")
+    var Cc = Components.classes;
+if (typeof Ci == "undefined")
+    var Ci = Components.interfaces;
+if (typeof Cr == "undefined")
+    var Cr = Components.results;
+if (typeof Cu == "undefined")
+    var Cu = Components.utils;
+
+Components.utils.import("resource://gre/modules/Services.jsm");
+Components.utils.import("resource://gre/modules/XPCOMUtils.jsm");
+
+var PersonaController = {}
+
+var WindowListener = {
+    setupBrowserUI: function(window, closebar) {
+        // Take any steps to add UI or anything to the browser window
+        // document.getElementById() etc. will work here 
+        PersonaController.startUp(window);
+    },
+    tearDownBrowserUI: function(window) {
+        // Take any steps to remove UI or anything from the browser window
+        // document.getElementById() etc. will work here
+        PersonaController.shutDown(window);
+    },
+    // nsIWindowMediatorListener functions
+    onOpenWindow: function(xulWindow) {
+        // A new window has opened
+        var domWindow = xulWindow.QueryInterface(Components.interfaces.nsIInterfaceRequestor)
+            .getInterface(Components.interfaces.nsIDOMWindow);
+        // Wait for it to finish loading
+        domWindow.addEventListener("load", function listener() {
+            domWindow.removeEventListener("load", listener, false);
+            // If this is a browser window then setup its UI
+            var windowtype = domWindow.document.documentElement.getAttribute("windowtype");
+            if (windowtype == "navigator:browser" || windowtype == "mail:3pane") WindowListener.setupBrowserUI(domWindow);
+        }, false);
+    },
+    onCloseWindow: function(xulWindow) {},
+    onWindowTitleChange: function(xulWindow, newTitle) {}
+};
+
+var PersonasPlusBootstrapAddon = {
+    prefsinstance: Components.classes["@mozilla.org/preferences-service;1"].getService(Components.interfaces.nsIPrefBranch),
+    STRINGS: [],
+    startup: function(data, reason) {
+        this.requestAddPrerequisites(data);
+        this.setDefaultPrefs();
+        this.setDefaultLocalizations();
+        Cu.import("resource://personas/modules/personas.js");
+        this.setupBrowserUI();
+        this.addWindowListener();
+        this.addAddonSkinCSS();
+        if (reason == ADDON_ENABLE) {
+            // modules that come with Firefox
+            Cu.import("resource://gre/modules/XPCOMUtils.jsm");
+            // LightweightThemeManager may not be not available (Firefox < 3.6 or Thunderbird)
+            try {
+                Cu.import("resource://gre/modules/LightweightThemeManager.jsm");
+            } catch (e) {
+                LightweightThemeManager = null;
+            }
+            try {
+                var lastselected0 = PersonasPlusBootstrapAddon.prefsinstance.getCharPref("extensions.personas.lastselected0");
+                LightweightThemeManager.currentTheme = JSON.parse(lastselected0);
+            } catch (e) {}
+        }
+    },
+    shutdown: function(data, reason) {
+        // When the application is shutting down we normally don't have to clean
+        // up any UI changes made
+        if (reason == APP_SHUTDOWN) return;
+        this.removeDefaultLocalizations();
+        this.tearBrowserUI();
+        this.removeWindowListener();
+        this.removeAddonSkinCSS();
+        Cu.unload("resource://personas/modules/personas.js");
+        this.requestRemovePrerequisites(data);
+        if (reason == ADDON_DISABLE) {
+            // modules that come with Firefox
+            Cu.import("resource://gre/modules/XPCOMUtils.jsm");
+            // LightweightThemeManager may not be not available (Firefox < 3.6 or Thunderbird)
+            try {
+                Cu.import("resource://gre/modules/LightweightThemeManager.jsm");
+            } catch (e) {
+                LightweightThemeManager = null;
+            }
+            try {
+                LightweightThemeManager.forgetUsedTheme(LightweightThemeManager.currentTheme.id);
+            } catch (e) {
+                try {
+                    LightweightThemeManager.currentTheme = null;
+                } catch (e) {}
+            }
+        }
+    },
+    requestAddPrerequisites: function(data) {
+        this.addResourceProtocol(data);
+        this.addChromeProtocol(data);
+    },
+    requestRemovePrerequisites: function(data) {
+        this.removeResourceProtocol(data);
+        this.removeChromeProtocol(data);
+    },
+    addResourceProtocol: function(data) {
+        var ios = Components.classes["@mozilla.org/network/io-service;1"].getService(Components.interfaces.nsIIOService);
+        var rh = ios.getProtocolHandler("resource").QueryInterface(Components.interfaces.nsIResProtocolHandler);
+        var nfu = ios.newFileURI(data.installPath);
+        var isDir = data.installPath.isDirectory();
+        if (isDir) {
+            nfu = ios.newURI(nfu.spec + "/", null, null);
+        } else {
+            nfu = ios.newURI("jar:" + nfu.spec + "!/", null, null);
+        }
+        //Note for Validator: This is safe and used to register resource protocol for our add-on, i.e. resource://personas/
+        rh.setSubstitution("personas", nfu);
+    },
+    removeResourceProtocol: function(data) {
+        var ios = Components.classes["@mozilla.org/network/io-service;1"].getService(Components.interfaces.nsIIOService);
+        var r = ios.getProtocolHandler("resource").QueryInterface(Components.interfaces.nsIResProtocolHandler);
+        r.setSubstitution("personas", null);
+    },
+    addChromeProtocol: function(data) {
+        if (Services.vc.compare(Services.appinfo.platformVersion, "10.0") < 0 && Services.vc.compare(Services.appinfo.platformVersion, "8.0") >= 0)
+            Components.manager.addBootstrappedManifestLocation(data.installPath);
+    },
+    removeChromeProtocol: function(data) {
+        if (Services.vc.compare(Services.appinfo.platformVersion, "10.0") < 0 && Services.vc.compare(Services.appinfo.platformVersion, "8.0") >= 0)
+            Components.manager.removeBootstrappedManifestLocation(data.installPath);
+    },
+    setDefaultPrefs: function() {
+        function setDefaultPrefs(name, value) {
+            function setPrefs(branch, name, value) {
+                if (typeof value == "string") {
+                    var str = Components.classes["@mozilla.org/supports-string;1"].createInstance(Components.interfaces.nsISupportsString);
+                    str.data = value;
+                    branch = branch ? branch : Services.prefs;
+                    branch.setComplexValue(name, Components.interfaces.nsISupportsString, str);
+                } else if (typeof value == "number") {
+                    branch.setIntPref(name, value);
+                } else if (typeof value == "boolean") {
+                    branch.setBoolPref(name, value);
+                }
+            }
+            var defaultBranch = Services.prefs.getDefaultBranch(null);
+            setPrefs(defaultBranch, name, value);
+        }
+        Services.scriptloader.loadSubScript(this.getPrefsJS(), { pref: setDefaultPrefs });
+    },
+    getPrefsJS: function() {
+        return "resource://personas/defaults/preferences/prefs.js";
+    },
+    setDefaultLocalizations: function() {
+        Components.classes["@mozilla.org/intl/stringbundle;1"].getService(Components.interfaces.nsIStringBundleService).flushBundles();
+        this.STRINGS["personas.properties"] = Components.classes["@mozilla.org/intl/stringbundle;1"]
+            .getService(Components.interfaces.nsIStringBundleService).createBundle("chrome://personas/locale/personas.properties");
+        this.STRINGS["personas_bootstrap.properties"] = Components.classes["@mozilla.org/intl/stringbundle;1"]
+            .getService(Components.interfaces.nsIStringBundleService).createBundle("chrome://personas/locale/personas_bootstrap.properties");
+    },
+    removeDefaultLocalizations: function() {
+        this.STRINGS = [];
+        Components.classes["@mozilla.org/intl/stringbundle;1"].getService(Components.interfaces.nsIStringBundleService).flushBundles();
+    },
+    setupBrowserUI: function() {
+        var wm = Cc["@mozilla.org/appshell/window-mediator;1"].
+        getService(Ci.nsIWindowMediator);
+        // Get the list of browser windows already open
+        var windows = wm.getEnumerator("navigator:browser");
+        while (windows.hasMoreElements()) {
+            var domWindow = windows.getNext().QueryInterface(Ci.nsIDOMWindow);
+            WindowListener.setupBrowserUI(domWindow, false);
+        }
+    },
+    tearBrowserUI: function() {
+        var wm = Cc["@mozilla.org/appshell/window-mediator;1"].
+        getService(Ci.nsIWindowMediator);
+        // Get the list of browser windows already open
+        var windows = wm.getEnumerator("navigator:browser");
+        while (windows.hasMoreElements()) {
+            var domWindow = windows.getNext().QueryInterface(Ci.nsIDOMWindow);
+            WindowListener.tearDownBrowserUI(domWindow);
+        }
+    },
+    addWindowListener: function() {
+        var wm = Cc["@mozilla.org/appshell/window-mediator;1"].
+        getService(Ci.nsIWindowMediator);
+        // Wait for any new browser windows to open
+        wm.addListener(WindowListener);
+    },
+    removeWindowListener: function() {
+        var wm = Cc["@mozilla.org/appshell/window-mediator;1"].
+        getService(Ci.nsIWindowMediator);
+        // Stop listening for any new browser windows to open
+        wm.removeListener(WindowListener);
+    },
+    registerStyle: function(url) {
+        var sss = Components.classes["@mozilla.org/content/style-sheet-service;1"]
+            .getService(Components.interfaces.nsIStyleSheetService);
+        var ios = Components.classes["@mozilla.org/network/io-service;1"]
+            .getService(Components.interfaces.nsIIOService);
+        var uri = ios.newURI(url, null, null);
+        if (!sss.sheetRegistered(uri, sss.AUTHOR_SHEET))
+            sss.loadAndRegisterSheet(uri, sss.AUTHOR_SHEET);
+    },
+    unregisterStyle: function(url) {
+        var sss = Components.classes["@mozilla.org/content/style-sheet-service;1"]
+            .getService(Components.interfaces.nsIStyleSheetService);
+        var ios = Components.classes["@mozilla.org/network/io-service;1"]
+            .getService(Components.interfaces.nsIIOService);
+        var u = ios.newURI(url, null, null);
+        if (sss.sheetRegistered(u, sss.AUTHOR_SHEET))
+        //Note for Validator: This is safe and used to register our add-on skin, i.e. chrome://personas/skin/personas.css
+            sss.unregisterSheet(u, sss.AUTHOR_SHEET);
+    },
+    addAddonSkinCSS: function() {
+        this.registerStyle(this.getContentPersonasCSS());
+        this.registerStyle(this.getSkinPersonasCSS());
+        this.registerStyle(this.getSkinPersonasCSS());
+    },
+    removeAddonSkinCSS: function() {
+        this.unregisterStyle(this.getContentPersonasCSS());
+        this.unregisterStyle(this.getSkinPersonasCSS());
+        this.unregisterStyle(this.getSkinPersonasCSS());
+    },
+    getContentPersonasCSS: function() {
+        return "chrome://personas/content/personas.css";
+    },
+    getSkinPersonasCSS: function() {
+        return "chrome://personas/skin/personas.css";
+    },
+    getContentOverlayCSS: function() {
+        return "chrome://personas/content/overlay.css";
+    }
+}
+
+function install(data) {}
+
+function uninstall(data, reason) {
+    if (reason != ADDON_UNINSTALL) return;
+    Components.classes["@mozilla.org/preferences-service;1"]
+        .getService(Components.interfaces.nsIPrefService).getBranch("extensions.personas.").deleteBranch("");
+    Components.classes["@mozilla.org/intl/stringbundle;1"]
+        .getService(Components.interfaces.nsIStringBundleService).flushBundles();
+    const Cc = Components.classes;
+    const Ci = Components.interfaces;
+    const Cr = Components.results;
+    const Cu = Components.utils;
+    // modules that come with Firefox
+    Cu.import("resource://gre/modules/XPCOMUtils.jsm");
+    // LightweightThemeManager may not be not available (Firefox < 3.6 or Thunderbird)
+    try {
+        Cu.import("resource://gre/modules/LightweightThemeManager.jsm");
+    } catch (e) {
+        LightweightThemeManager = null;
+    }
+    try {
+        LightweightThemeManager.forgetUsedTheme(LightweightThemeManager.currentTheme.id);
+    } catch (e) {
+        try {
+            LightweightThemeManager.currentTheme = null;
+        } catch (e) {}
+    }
+}
+
+function startup(data, reason) {
+    PersonasPlusBootstrapAddon.startup(data, reason);
+}
+
+function shutdown(data, reason) {
+    PersonasPlusBootstrapAddon.shutdown(data, reason);
+}
diff --git a/extension/chrome.manifest b/extension/chrome.manifest
index 2c6aa34..fcec656 100644
--- a/extension/chrome.manifest
+++ b/extension/chrome.manifest
@@ -1,11 +1,3 @@
-overlay chrome://browser/content/browser.xul                chrome://personas/content/personas.xul    application={ec8030f7-c20a-464f-9b0e-13a3a9e97384}
-overlay chrome://messenger/content/messenger.xul            chrome://personas/content/messenger.xul   application={3550f703-e582-4d05-9a08-453d09bdfdc6}
-
-# Register a resource: protocol alias so we can refer to files in this package
-# with URLs of the form resource://personas/path/to/file,
-# f.e. resource://personas/modules/service.js.
-resource personas   ./
-
 content  personas             content/
 
 # Register skins for various combinations of application (Firefox, Thunderbird),
@@ -27,12 +19,6 @@ skin  personas  classic/1.0  skin/winxp/thunderbird/ application={3550f703-e582-
 skin  personas  classic/1.0  skin/vista/thunderbird/ application={3550f703-e582-4d05-9a08-453d09bdfdc6}                      os=WINNT   osversion>=6
 skin  personas  classic/1.0  skin/mac/thunderbird/   application={3550f703-e582-4d05-9a08-453d09bdfdc6}                      os=Darwin
 
-# Choose default stylesheet for customPersonaEditor.xul according to application (Firefox, Thunderbird).
-style chrome://personas/content/customPersonaEditor.xul chrome://browser/skin/    application={ec8030f7-c20a-464f-9b0e-13a3a9e97384}
-style chrome://personas/content/customPersonaEditor.xul chrome://messenger/skin/  application={3550f703-e582-4d05-9a08-453d09bdfdc6}
-
-style chrome://global/content/customizeToolbar.xul  chrome://personas/content/personas.css  application={ec8030f7-c20a-464f-9b0e-13a3a9e97384}
-
 # localizations in alphabetical order
 #
 # Note: localizations sometimes become out of date, and we haven't quite
@@ -96,3 +82,13 @@ locale   personas   uk-UA       locale/uk-UA/
 locale   personas   vi          locale/vi/
 locale   personas   zh-CN       locale/zh-CN/
 locale   personas   zh-TW       locale/zh-TW/
+locale   personas   ar          locale/ar/
+locale   personas   ast-ES      locale/ast-ES/
+locale   personas   de-DE       locale/de-DE/
+locale   personas   el-GR       locale/el-GR/
+locale   personas   eu-ES       locale/eu-ES/
+locale   personas   fi-FI       locale/fi-FI/
+locale   personas   pt-PT       locale/pt-PT/
+locale   personas   sl-SI       locale/sl-SI/
+locale   personas   sr-RS       locale/sr-RS/
+locale   personas   vi-VN       locale/vi-VN/
diff --git a/extension/defaults/preferences/prefs.js b/extension/defaults/preferences/prefs.js
index e8cc105..c3c71df 100644
--- a/extension/defaults/preferences/prefs.js
+++ b/extension/defaults/preferences/prefs.js
@@ -121,3 +121,6 @@ pref("PersonaService.logging.dump", "None");
 
 // Whether or not the toolbar button has been installed once (Firefox 4 support)
 pref("extensions.personas.toolbarButtonInstalled", false);
+
+pref("extensions.personas.tbinsert",true);
+pref("extensions.personas.tbplaced",false);
diff --git a/extension/install.rdf b/extension/install.rdf
index fdd4b2f..135cee7 100644
--- a/extension/install.rdf
+++ b/extension/install.rdf
@@ -6,7 +6,7 @@
     <em:name>Personas Plus</em:name>
     <em:version>1.7.7</em:version>
     <em:description>Your Firefox, your style. Easy-to-change themes.</em:description>
-
+    <em:bootstrap>true</em:bootstrap>
     <em:creator>Chris Beard</em:creator>
     <em:contributor>Myk Melez</em:contributor>
     <em:contributor>Huang Yaoquan</em:contributor>
diff --git a/extension/locale/ar/personas.dtd b/extension/locale/ar/personas.dtd
index 0464b0d..1f0f018 100644
--- a/extension/locale/ar/personas.dtd
+++ b/extension/locale/ar/personas.dtd
@@ -1,6 +1,3 @@
-<!ENTITY personas_app_title "Personas">
-<!ENTITY useDefaultPersona.label "افتراضي">
-<!ENTITY preferences.label "التفضيلات">
 <!ENTITY viewDirectory.label "View Gallery">
 <!ENTITY customPersona.label "Custom Persona">
 <!ENTITY customName.label "الاسم:">
@@ -13,8 +10,6 @@
 <!ENTITY okButton.label "موافق">
 <!ENTITY contextHomePage.label "الصفحة الرئيسية">
 <!ENTITY contextPreferences.label "الإعدادات">
-<!ENTITY contextEdit.label "عدّل">
-<!ENTITY contextApply.label "طبّق">
 <!ENTITY usePersona.label "Use Persona">
 <!ENTITY usePersona.accesskey "P">
 <!ENTITY usePersona.tooltip "Use this Persona">
diff --git a/extension/locale/ar/personas_bootstrap.properties b/extension/locale/ar/personas_bootstrap.properties
new file mode 100644
index 0000000..06ded03
--- /dev/null
+++ b/extension/locale/ar/personas_bootstrap.properties
@@ -0,0 +1,5 @@
+personas_app_title= Personas
+useDefaultPersona.label= افتراضي
+preferences.label= التفضيلات
+contextEdit.label= عدّل
+contextApply.label= طبّق
diff --git a/extension/locale/ast-ES/personas.dtd b/extension/locale/ast-ES/personas.dtd
index aa56caf..e64d8af 100644
--- a/extension/locale/ast-ES/personas.dtd
+++ b/extension/locale/ast-ES/personas.dtd
@@ -1,6 +1,3 @@
-<!ENTITY personas_app_title "Personas">
-<!ENTITY useDefaultPersona.label "Predetermináu">
-<!ENTITY preferences.label "Preferencies">
 <!ENTITY viewDirectory.label "Ver Gallería">
 <!ENTITY customPersona.label "Personalizar Persona">
 <!ENTITY customName.label "Nome:">
@@ -13,8 +10,6 @@
 <!ENTITY okButton.label "OK">
 <!ENTITY contextHomePage.label "Páxina d'aniciu">
 <!ENTITY contextPreferences.label "Axustes">
-<!ENTITY contextEdit.label "Editar">
-<!ENTITY contextApply.label "Aplicar">
 <!ENTITY usePersona.label "Usar Persona">
 <!ENTITY usePersona.accesskey "P">
 <!ENTITY usePersona.tooltip "Usar esta Persona">
diff --git a/extension/locale/ast-ES/personas_bootstrap.properties b/extension/locale/ast-ES/personas_bootstrap.properties
new file mode 100644
index 0000000..7b0677d
--- /dev/null
+++ b/extension/locale/ast-ES/personas_bootstrap.properties
@@ -0,0 +1,5 @@
+personas_app_title= Personas
+useDefaultPersona.label= Predetermináu
+preferences.label= Preferencies
+contextEdit.label= Editar
+contextApply.label= Aplicar
diff --git a/extension/locale/bg-BG/personas.dtd b/extension/locale/bg-BG/personas.dtd
index 5882d24..8143549 100644
--- a/extension/locale/bg-BG/personas.dtd
+++ b/extension/locale/bg-BG/personas.dtd
@@ -1,6 +1,3 @@
-<!ENTITY personas_app_title "Персони">
-<!ENTITY useDefaultPersona.label "Стандартна">
-<!ENTITY preferences.label "Настройки">
 <!ENTITY viewDirectory.label "Преглед на списъка">
 <!ENTITY customPersona.label "Лична персона">
 <!ENTITY customName.label "Наименование:">
@@ -13,8 +10,6 @@
 <!ENTITY okButton.label "ОК">
 <!ENTITY contextHomePage.label "Домашна страница">
 <!ENTITY contextPreferences.label "Настройки">
-<!ENTITY contextEdit.label "Редакция">
-<!ENTITY contextApply.label "Прилагане">
 <!ENTITY usePersona.label "Използване на Персона">
 <!ENTITY usePersona.accesskey "П">
 <!ENTITY usePersona.tooltip "Използване на тази Персона">
diff --git a/extension/locale/bg-BG/personas_bootstrap.properties b/extension/locale/bg-BG/personas_bootstrap.properties
new file mode 100755
index 0000000..e19b9a0
--- /dev/null
+++ b/extension/locale/bg-BG/personas_bootstrap.properties
@@ -0,0 +1,5 @@
+personas_app_title = Персони
+useDefaultPersona.label = Стандартна
+preferences.label = Настройки
+contextEdit.label = Редакция
+contextApply.label = Прилагане
diff --git a/extension/locale/cs-CZ/personas.dtd b/extension/locale/cs-CZ/personas.dtd
index 8deb468..cb04260 100644
--- a/extension/locale/cs-CZ/personas.dtd
+++ b/extension/locale/cs-CZ/personas.dtd
@@ -1,6 +1,3 @@
-<!ENTITY personas_app_title "Personas">
-<!ENTITY useDefaultPersona.label "Výchozí">
-<!ENTITY preferences.label "Nastavení...">
 <!ENTITY viewDirectory.label "Zobrazit galerii...">
 <!ENTITY customPersona.label "Vlastní">
 <!ENTITY customName.label "Název:">
@@ -13,8 +10,6 @@
 <!ENTITY okButton.label "OK">
 <!ENTITY contextHomePage.label "Domovská stránka">
 <!ENTITY contextPreferences.label "Nastavení">
-<!ENTITY contextEdit.label "Upravit">
-<!ENTITY contextApply.label "Použít">
 <!ENTITY usePersona.label "Use Persona">
 <!ENTITY usePersona.accesskey "P">
 <!ENTITY usePersona.tooltip "Use this Persona">
diff --git a/extension/locale/cs-CZ/personas_bootstrap.properties b/extension/locale/cs-CZ/personas_bootstrap.properties
new file mode 100755
index 0000000..cb79557
--- /dev/null
+++ b/extension/locale/cs-CZ/personas_bootstrap.properties
@@ -0,0 +1,5 @@
+personas_app_title = Personas
+useDefaultPersona.label = Výchozí
+preferences.label = Nastavení...
+contextEdit.label = Upravit
+contextApply.label = Použít
diff --git a/extension/locale/da/personas.dtd b/extension/locale/da/personas.dtd
index fff3650..7e6f958 100644
--- a/extension/locale/da/personas.dtd
+++ b/extension/locale/da/personas.dtd
@@ -1,6 +1,3 @@
-<!ENTITY personas_app_title "Personas">
-<!ENTITY useDefaultPersona.label "Standard">
-<!ENTITY preferences.label "Indstillinger">
 <!ENTITY viewDirectory.label "Vis galleri">
 <!ENTITY customPersona.label "Tilpas Persona">
 <!ENTITY customName.label "Navn:">
@@ -13,8 +10,6 @@
 <!ENTITY okButton.label "OK">
 <!ENTITY contextHomePage.label "Hjemmeside">
 <!ENTITY contextPreferences.label "Indstillinger">
-<!ENTITY contextEdit.label "Rediger">
-<!ENTITY contextApply.label "Anvend">
 <!ENTITY usePersona.label "Brug Persona">
 <!ENTITY usePersona.accesskey "u">
 <!ENTITY usePersona.tooltip "Brug denne Persona">
diff --git a/extension/locale/da/personas_bootstrap.properties b/extension/locale/da/personas_bootstrap.properties
new file mode 100755
index 0000000..e8a5ce1
--- /dev/null
+++ b/extension/locale/da/personas_bootstrap.properties
@@ -0,0 +1,5 @@
+personas_app_title = Personas
+useDefaultPersona.label = Standard
+preferences.label = Indstillinger
+contextEdit.label = Rediger
+contextApply.label = Anvend
diff --git a/extension/locale/de-DE/personas.dtd b/extension/locale/de-DE/personas.dtd
index ccdc8c0..0623494 100644
--- a/extension/locale/de-DE/personas.dtd
+++ b/extension/locale/de-DE/personas.dtd
@@ -1,6 +1,3 @@
-<!ENTITY personas_app_title "Personas">
-<!ENTITY useDefaultPersona.label "Standard">
-<!ENTITY preferences.label "Einstellungen...">
 <!ENTITY viewDirectory.label "Personas im Internet...">
 <!ENTITY customPersona.label "Persona anpassen">
 <!ENTITY customName.label "Name:">
@@ -13,8 +10,6 @@
 <!ENTITY okButton.label "OK">
 <!ENTITY contextHomePage.label "Internetseite">
 <!ENTITY contextPreferences.label "Einstellungen">
-<!ENTITY contextEdit.label "Bearbeiten">
-<!ENTITY contextApply.label "Anwenden">
 <!ENTITY usePersona.label "Use Persona">
 <!ENTITY usePersona.accesskey "P">
 <!ENTITY usePersona.tooltip "Use this Persona">
diff --git a/extension/locale/de-DE/personas_bootstrap.properties b/extension/locale/de-DE/personas_bootstrap.properties
new file mode 100644
index 0000000..f48be8d
--- /dev/null
+++ b/extension/locale/de-DE/personas_bootstrap.properties
@@ -0,0 +1,5 @@
+personas_app_title= Personas
+useDefaultPersona.label= Standard
+preferences.label= Einstellungen...
+contextEdit.label= Bearbeiten
+contextApply.label= Anwenden
diff --git a/extension/locale/de/personas.dtd b/extension/locale/de/personas.dtd
index f13ecbb..6781d42 100644
--- a/extension/locale/de/personas.dtd
+++ b/extension/locale/de/personas.dtd
@@ -1,6 +1,3 @@
-<!ENTITY personas_app_title "Personas">
-<!ENTITY useDefaultPersona.label "Standard">
-<!ENTITY preferences.label "Einstellungen...">
 <!ENTITY viewDirectory.label "Personas-Galerie aufrufen...">
 <!ENTITY customPersona.label "Benutzerdefiniertes Persona">
 <!ENTITY customName.label "Name:">
@@ -13,8 +10,6 @@
 <!ENTITY okButton.label "OK">
 <!ENTITY contextHomePage.label "Internetseite">
 <!ENTITY contextPreferences.label "Einstellungen">
-<!ENTITY contextEdit.label "Bearbeiten">
-<!ENTITY contextApply.label "Anwenden">
 <!ENTITY usePersona.label "Persona verwenden">
 <!ENTITY usePersona.accesskey "P">
 <!ENTITY usePersona.tooltip "Dieses Persona verwenden">
diff --git a/extension/locale/de/personas_bootstrap.properties b/extension/locale/de/personas_bootstrap.properties
new file mode 100755
index 0000000..992919b
--- /dev/null
+++ b/extension/locale/de/personas_bootstrap.properties
@@ -0,0 +1,5 @@
+personas_app_title = Personas
+useDefaultPersona.label = Standard
+preferences.label = Einstellungen...
+contextEdit.label = Bearbeiten
+contextApply.label = Anwenden
diff --git a/extension/locale/el-GR/personas.dtd b/extension/locale/el-GR/personas.dtd
index b276f0e..5e9e77b 100644
--- a/extension/locale/el-GR/personas.dtd
+++ b/extension/locale/el-GR/personas.dtd
@@ -1,6 +1,3 @@
-<!ENTITY personas_app_title "Personas">
-<!ENTITY useDefaultPersona.label "Αρχική">
-<!ENTITY preferences.label "Προτιμήσεις">
 <!ENTITY viewDirectory.label "Εμφάνιση συλλογής">
 <!ENTITY customPersona.label "Προσαρμοσμένο Persona">
 <!ENTITY customName.label "Όνομα:">
@@ -13,8 +10,6 @@
 <!ENTITY okButton.label "Εντάξει">
 <!ENTITY contextHomePage.label "Αρχική σελίδα">
 <!ENTITY contextPreferences.label "Ρυθμίσεις">
-<!ENTITY contextEdit.label "Επεξεργασία">
-<!ENTITY contextApply.label "Εφαρμογή">
 <!ENTITY usePersona.label "Χρήση Persona">
 <!ENTITY usePersona.accesskey "χ">
 <!ENTITY usePersona.tooltip "Χρήση αυτού του Persona">
diff --git a/extension/locale/el-GR/personas_bootstrap.properties b/extension/locale/el-GR/personas_bootstrap.properties
new file mode 100644
index 0000000..a678b89
--- /dev/null
+++ b/extension/locale/el-GR/personas_bootstrap.properties
@@ -0,0 +1,5 @@
+personas_app_title= Personas
+useDefaultPersona.label= Αρχική
+preferences.label= Προτιμήσεις
+contextEdit.label= Επεξεργασία
+contextApply.label= Εφαρμογή
diff --git a/extension/locale/el/personas.dtd b/extension/locale/el/personas.dtd
index b276f0e..5e9e77b 100644
--- a/extension/locale/el/personas.dtd
+++ b/extension/locale/el/personas.dtd
@@ -1,6 +1,3 @@
-<!ENTITY personas_app_title "Personas">
-<!ENTITY useDefaultPersona.label "Αρχική">
-<!ENTITY preferences.label "Προτιμήσεις">
 <!ENTITY viewDirectory.label "Εμφάνιση συλλογής">
 <!ENTITY customPersona.label "Προσαρμοσμένο Persona">
 <!ENTITY customName.label "Όνομα:">
@@ -13,8 +10,6 @@
 <!ENTITY okButton.label "Εντάξει">
 <!ENTITY contextHomePage.label "Αρχική σελίδα">
 <!ENTITY contextPreferences.label "Ρυθμίσεις">
-<!ENTITY contextEdit.label "Επεξεργασία">
-<!ENTITY contextApply.label "Εφαρμογή">
 <!ENTITY usePersona.label "Χρήση Persona">
 <!ENTITY usePersona.accesskey "χ">
 <!ENTITY usePersona.tooltip "Χρήση αυτού του Persona">
diff --git a/extension/locale/el/personas_bootstrap.properties b/extension/locale/el/personas_bootstrap.properties
new file mode 100755
index 0000000..7f51571
--- /dev/null
+++ b/extension/locale/el/personas_bootstrap.properties
@@ -0,0 +1,5 @@
+personas_app_title = Personas
+useDefaultPersona.label = Αρχική
+preferences.label = Προτιμήσεις
+contextEdit.label = Επεξεργασία
+contextApply.label = Εφαρμογή
diff --git a/extension/locale/en-US/personas.dtd b/extension/locale/en-US/personas.dtd
index 6273944..e8541d8 100644
--- a/extension/locale/en-US/personas.dtd
+++ b/extension/locale/en-US/personas.dtd
@@ -1,6 +1,3 @@
-<!ENTITY personas_app_title "Personas">
-<!ENTITY useDefaultPersona.label "Default">
-<!ENTITY preferences.label "Preferences">
 <!ENTITY viewDirectory.label "View Gallery">
 <!ENTITY customPersona.label "Custom Persona">
 <!ENTITY customName.label "Name:">
@@ -13,8 +10,6 @@
 <!ENTITY okButton.label "OK">
 <!ENTITY contextHomePage.label "Home Page">
 <!ENTITY contextPreferences.label "Settings">
-<!ENTITY contextEdit.label "Edit">
-<!ENTITY contextApply.label "Apply">
 <!ENTITY usePersona.label "Use Persona">
 <!ENTITY usePersona.accesskey "P">
 <!ENTITY usePersona.tooltip "Use this Persona">
diff --git a/extension/locale/en-US/personas_bootstrap.properties b/extension/locale/en-US/personas_bootstrap.properties
new file mode 100755
index 0000000..6f4d989
--- /dev/null
+++ b/extension/locale/en-US/personas_bootstrap.properties
@@ -0,0 +1,5 @@
+personas_app_title= Personas
+useDefaultPersona.label= Default
+preferences.label= Preferences
+contextEdit.label= Edit
+contextApply.label= Apply
diff --git a/extension/locale/es-AR/personas.dtd b/extension/locale/es-AR/personas.dtd
index a80c122..c52c95c 100644
--- a/extension/locale/es-AR/personas.dtd
+++ b/extension/locale/es-AR/personas.dtd
@@ -1,6 +1,3 @@
-<!ENTITY personas_app_title "Personas">
-<!ENTITY useDefaultPersona.label "Predeterminada">
-<!ENTITY preferences.label "Preferencias">
 <!ENTITY viewDirectory.label "Ver galería">
 <!ENTITY customPersona.label "Mi persona">
 <!ENTITY customName.label "Nombre:">
@@ -13,8 +10,6 @@
 <!ENTITY okButton.label "Aceptar">
 <!ENTITY contextHomePage.label "Página principal">
 <!ENTITY contextPreferences.label "Configuración">
-<!ENTITY contextEdit.label "Editar">
-<!ENTITY contextApply.label "Aplicar">
 <!ENTITY usePersona.label "Usar persona">
 <!ENTITY usePersona.accesskey "P">
 <!ENTITY usePersona.tooltip "Usar esta persona">
diff --git a/extension/locale/es-AR/personas_bootstrap.properties b/extension/locale/es-AR/personas_bootstrap.properties
new file mode 100755
index 0000000..fc1e453
--- /dev/null
+++ b/extension/locale/es-AR/personas_bootstrap.properties
@@ -0,0 +1,5 @@
+personas_app_title = Personas
+useDefaultPersona.label = Predeterminada
+preferences.label = Preferencias
+contextEdit.label = Editar
+contextApply.label = Aplicar
diff --git a/extension/locale/es-CL/personas.dtd b/extension/locale/es-CL/personas.dtd
index 0964bcc..0a63ca1 100644
--- a/extension/locale/es-CL/personas.dtd
+++ b/extension/locale/es-CL/personas.dtd
@@ -1,6 +1,3 @@
-<!ENTITY personas_app_title "Personas">
-<!ENTITY useDefaultPersona.label "Por defecto">
-<!ENTITY preferences.label "Preferencias...">
 <!ENTITY viewDirectory.label "Ver directorio...">
 <!ENTITY customPersona.label "Persona personalizado">
 <!ENTITY customName.label "Nombre:">
@@ -13,8 +10,6 @@
 <!ENTITY okButton.label "Aceptar">
 <!ENTITY contextHomePage.label "Página de inicio">
 <!ENTITY contextPreferences.label "Configuraciones">
-<!ENTITY contextEdit.label "Editar">
-<!ENTITY contextApply.label "Aplicar">
 <!ENTITY usePersona.label "Usar Persona">
 <!ENTITY usePersona.accesskey "P">
 <!ENTITY usePersona.tooltip "Usar esta Persona">
diff --git a/extension/locale/es-CL/personas_bootstrap.properties b/extension/locale/es-CL/personas_bootstrap.properties
new file mode 100755
index 0000000..4383d9d
--- /dev/null
+++ b/extension/locale/es-CL/personas_bootstrap.properties
@@ -0,0 +1,5 @@
+personas_app_title = Personas
+useDefaultPersona.label = Por defecto
+preferences.label = Preferencias...
+contextEdit.label = Editar
+contextApply.label = Aplicar
diff --git a/extension/locale/es-ES/personas.dtd b/extension/locale/es-ES/personas.dtd
index 2e28d28..2163435 100644
--- a/extension/locale/es-ES/personas.dtd
+++ b/extension/locale/es-ES/personas.dtd
@@ -1,6 +1,3 @@
-<!ENTITY personas_app_title "Personas">
-<!ENTITY useDefaultPersona.label "Predeterminado">
-<!ENTITY preferences.label "Preferencias">
 <!ENTITY viewDirectory.label "Ver Galería">
 <!ENTITY customPersona.label "Persona personalizada">
 <!ENTITY customName.label "Nombre:">
@@ -13,8 +10,6 @@
 <!ENTITY okButton.label "OK">
 <!ENTITY contextHomePage.label "Página de inicio">
 <!ENTITY contextPreferences.label "Conguraciones">
-<!ENTITY contextEdit.label "Editar">
-<!ENTITY contextApply.label "Aplicar">
 <!ENTITY usePersona.label "Utilizar Persona">
 <!ENTITY usePersona.accesskey "P">
 <!ENTITY usePersona.tooltip "Utilice esta Persona">
diff --git a/extension/locale/es-ES/personas_bootstrap.properties b/extension/locale/es-ES/personas_bootstrap.properties
new file mode 100755
index 0000000..0c888b9
--- /dev/null
+++ b/extension/locale/es-ES/personas_bootstrap.properties
@@ -0,0 +1,5 @@
+personas_app_title = Personas
+useDefaultPersona.label = Predeterminado
+preferences.label = Preferencias
+contextEdit.label = Editar
+contextApply.label = Aplicar
diff --git a/extension/locale/es-MX/personas.dtd b/extension/locale/es-MX/personas.dtd
index 9f034eb..c1ae64a 100644
--- a/extension/locale/es-MX/personas.dtd
+++ b/extension/locale/es-MX/personas.dtd
@@ -1,6 +1,3 @@
-<!ENTITY personas_app_title "Personas">
-<!ENTITY useDefaultPersona.label "Predeterminado">
-<!ENTITY preferences.label "Preferencias">
 <!ENTITY viewDirectory.label "Ver Galería">
 <!ENTITY customPersona.label "Persona Personalizado">
 <!ENTITY customName.label "Nombre:">
@@ -13,8 +10,6 @@
 <!ENTITY okButton.label "OK">
 <!ENTITY contextHomePage.label "Página de Inicio">
 <!ENTITY contextPreferences.label "Configuraciones">
-<!ENTITY contextEdit.label "Editar">
-<!ENTITY contextApply.label "Aplicar">
 <!ENTITY usePersona.label "Usar Persona">
 <!ENTITY usePersona.accesskey "P">
 <!ENTITY usePersona.tooltip "Usar esta Persona">
diff --git a/extension/locale/es-MX/personas_bootstrap.properties b/extension/locale/es-MX/personas_bootstrap.properties
new file mode 100755
index 0000000..0c888b9
--- /dev/null
+++ b/extension/locale/es-MX/personas_bootstrap.properties
@@ -0,0 +1,5 @@
+personas_app_title = Personas
+useDefaultPersona.label = Predeterminado
+preferences.label = Preferencias
+contextEdit.label = Editar
+contextApply.label = Aplicar
diff --git a/extension/locale/eu-ES/personas.dtd b/extension/locale/eu-ES/personas.dtd
index 0d8b9af..611d4cc 100644
--- a/extension/locale/eu-ES/personas.dtd
+++ b/extension/locale/eu-ES/personas.dtd
@@ -1,6 +1,3 @@
-<!ENTITY personas_app_title "Personas">
-<!ENTITY useDefaultPersona.label "Lehentsia">
-<!ENTITY preferences.label "Hobespenak…">
 <!ENTITY viewDirectory.label "Ikusi galeria…">
 <!ENTITY customPersona.label "Pertsonalizatutako Persona">
 <!ENTITY customName.label "Izena:">
@@ -13,8 +10,6 @@
 <!ENTITY okButton.label "Ados">
 <!ENTITY contextHomePage.label "Etxe orrialdea">
 <!ENTITY contextPreferences.label "Ezarpenak">
-<!ENTITY contextEdit.label "Editatu">
-<!ENTITY contextApply.label "Ezarri">
 <!ENTITY usePersona.label "Use Persona">
 <!ENTITY usePersona.accesskey "P">
 <!ENTITY usePersona.tooltip "Use this Persona">
diff --git a/extension/locale/eu-ES/personas_bootstrap.properties b/extension/locale/eu-ES/personas_bootstrap.properties
new file mode 100644
index 0000000..4c7ff31
--- /dev/null
+++ b/extension/locale/eu-ES/personas_bootstrap.properties
@@ -0,0 +1,5 @@
+personas_app_title= Personas
+useDefaultPersona.label= Lehentsia
+preferences.label= Hobespenak…
+contextEdit.label= Editatu
+contextApply.label= Ezarri
diff --git a/extension/locale/eu/personas.dtd b/extension/locale/eu/personas.dtd
index 0d8b9af..611d4cc 100644
--- a/extension/locale/eu/personas.dtd
+++ b/extension/locale/eu/personas.dtd
@@ -1,6 +1,3 @@
-<!ENTITY personas_app_title "Personas">
-<!ENTITY useDefaultPersona.label "Lehentsia">
-<!ENTITY preferences.label "Hobespenak…">
 <!ENTITY viewDirectory.label "Ikusi galeria…">
 <!ENTITY customPersona.label "Pertsonalizatutako Persona">
 <!ENTITY customName.label "Izena:">
@@ -13,8 +10,6 @@
 <!ENTITY okButton.label "Ados">
 <!ENTITY contextHomePage.label "Etxe orrialdea">
 <!ENTITY contextPreferences.label "Ezarpenak">
-<!ENTITY contextEdit.label "Editatu">
-<!ENTITY contextApply.label "Ezarri">
 <!ENTITY usePersona.label "Use Persona">
 <!ENTITY usePersona.accesskey "P">
 <!ENTITY usePersona.tooltip "Use this Persona">
diff --git a/extension/locale/eu/personas_bootstrap.properties b/extension/locale/eu/personas_bootstrap.properties
new file mode 100755
index 0000000..851e4ce
--- /dev/null
+++ b/extension/locale/eu/personas_bootstrap.properties
@@ -0,0 +1,5 @@
+personas_app_title = Personas
+useDefaultPersona.label = Lehentsia
+preferences.label = Hobespenak…
+contextEdit.label = Editatu
+contextApply.label = Ezarri
diff --git a/extension/locale/fi-FI/personas.dtd b/extension/locale/fi-FI/personas.dtd
index c36ffa0..7b1be11 100644
--- a/extension/locale/fi-FI/personas.dtd
+++ b/extension/locale/fi-FI/personas.dtd
@@ -1,6 +1,3 @@
-<!ENTITY personas_app_title "Personas">
-<!ENTITY useDefaultPersona.label "Oletus">
-<!ENTITY preferences.label "Asetukset…">
 <!ENTITY viewDirectory.label "Siirry galleriaan">
 <!ENTITY customPersona.label "Mukautettu Persona">
 <!ENTITY customName.label "Nimi:">
@@ -13,8 +10,6 @@
 <!ENTITY okButton.label "OK">
 <!ENTITY contextHomePage.label "Kotisivu">
 <!ENTITY contextPreferences.label "Asetukset">
-<!ENTITY contextEdit.label "Muokkaa">
-<!ENTITY contextApply.label "Käytä">
 <!ENTITY usePersona.label "Käytä Personaa">
 <!ENTITY usePersona.accesskey "P">
 <!ENTITY usePersona.tooltip "Käytä tätä Personaa">
diff --git a/extension/locale/fi-FI/personas_bootstrap.properties b/extension/locale/fi-FI/personas_bootstrap.properties
new file mode 100644
index 0000000..16f5b67
--- /dev/null
+++ b/extension/locale/fi-FI/personas_bootstrap.properties
@@ -0,0 +1,5 @@
+personas_app_title= Personas
+useDefaultPersona.label= Oletus
+preferences.label= Asetukset…
+contextEdit.label= Muokkaa
+contextApply.label= Käytä
diff --git a/extension/locale/fi/personas.dtd b/extension/locale/fi/personas.dtd
index c36ffa0..7b1be11 100644
--- a/extension/locale/fi/personas.dtd
+++ b/extension/locale/fi/personas.dtd
@@ -1,6 +1,3 @@
-<!ENTITY personas_app_title "Personas">
-<!ENTITY useDefaultPersona.label "Oletus">
-<!ENTITY preferences.label "Asetukset…">
 <!ENTITY viewDirectory.label "Siirry galleriaan">
 <!ENTITY customPersona.label "Mukautettu Persona">
 <!ENTITY customName.label "Nimi:">
@@ -13,8 +10,6 @@
 <!ENTITY okButton.label "OK">
 <!ENTITY contextHomePage.label "Kotisivu">
 <!ENTITY contextPreferences.label "Asetukset">
-<!ENTITY contextEdit.label "Muokkaa">
-<!ENTITY contextApply.label "Käytä">
 <!ENTITY usePersona.label "Käytä Personaa">
 <!ENTITY usePersona.accesskey "P">
 <!ENTITY usePersona.tooltip "Käytä tätä Personaa">
diff --git a/extension/locale/fi/personas_bootstrap.properties b/extension/locale/fi/personas_bootstrap.properties
new file mode 100755
index 0000000..06ad8f3
--- /dev/null
+++ b/extension/locale/fi/personas_bootstrap.properties
@@ -0,0 +1,5 @@
+personas_app_title = Personas
+useDefaultPersona.label = Oletus
+preferences.label = Asetukset…
+contextEdit.label = Muokkaa
+contextApply.label = Käytä
diff --git a/extension/locale/fr/personas.dtd b/extension/locale/fr/personas.dtd
index 207dfce..d9b6e09 100644
--- a/extension/locale/fr/personas.dtd
+++ b/extension/locale/fr/personas.dtd
@@ -1,6 +1,3 @@
-<!ENTITY personas_app_title "Personas">
-<!ENTITY useDefaultPersona.label "Thème par défaut">
-<!ENTITY preferences.label "Préférences…">
 <!ENTITY viewDirectory.label "Afficher la galerie…">
 <!ENTITY customPersona.label "Persona personnalisé">
 <!ENTITY customName.label "Nom :">
@@ -13,8 +10,6 @@
 <!ENTITY okButton.label "OK">
 <!ENTITY contextHomePage.label "Page Web">
 <!ENTITY contextPreferences.label "Paramètres">
-<!ENTITY contextEdit.label "Éditer">
-<!ENTITY contextApply.label "Appliquer">
 <!ENTITY usePersona.label "Porter le Persona">
 <!ENTITY usePersona.accesskey "p">
 <!ENTITY usePersona.tooltip "Utiliser ce Persona">
diff --git a/extension/locale/fr/personas_bootstrap.properties b/extension/locale/fr/personas_bootstrap.properties
new file mode 100755
index 0000000..92bd08d
--- /dev/null
+++ b/extension/locale/fr/personas_bootstrap.properties
@@ -0,0 +1,5 @@
+personas_app_title = Personas
+useDefaultPersona.label = Thème par défaut
+preferences.label = Préférences…
+contextEdit.label = Éditer
+contextApply.label = Appliquer
diff --git a/extension/locale/fy-NL/personas.dtd b/extension/locale/fy-NL/personas.dtd
index c056ea4..d8c9fbc 100644
--- a/extension/locale/fy-NL/personas.dtd
+++ b/extension/locale/fy-NL/personas.dtd
@@ -1,6 +1,3 @@
-<!ENTITY personas_app_title "Personas">
-<!ENTITY useDefaultPersona.label "Standert">
-<!ENTITY preferences.label "Foarkarren...">
 <!ENTITY viewDirectory.label "Toan map...">
 <!ENTITY customPersona.label "Eigen Persona">
 <!ENTITY customName.label "Namme:">
@@ -13,8 +10,6 @@
 <!ENTITY okButton.label "OK">
 <!ENTITY contextHomePage.label "Thússide">
 <!ENTITY contextPreferences.label "Ynstellings">
-<!ENTITY contextEdit.label "Bewurkje">
-<!ENTITY contextApply.label "Tapasse">
 <!ENTITY usePersona.label "Use Persona">
 <!ENTITY usePersona.accesskey "P">
 <!ENTITY usePersona.tooltip "Use this Persona">
diff --git a/extension/locale/fy-NL/personas_bootstrap.properties b/extension/locale/fy-NL/personas_bootstrap.properties
new file mode 100755
index 0000000..83740ba
--- /dev/null
+++ b/extension/locale/fy-NL/personas_bootstrap.properties
@@ -0,0 +1,5 @@
+personas_app_title = Personas
+useDefaultPersona.label = Standert
+preferences.label = Foarkarren...
+contextEdit.label = Bewurkje
+contextApply.label = Tapasse
diff --git a/extension/locale/ga-IE/personas.dtd b/extension/locale/ga-IE/personas.dtd
index 15b9a92..1854f61 100644
--- a/extension/locale/ga-IE/personas.dtd
+++ b/extension/locale/ga-IE/personas.dtd
@@ -1,6 +1,3 @@
-<!ENTITY personas_app_title "Pearsantachtaí">
-<!ENTITY useDefaultPersona.label "Réamhshocrú">
-<!ENTITY preferences.label "Sainroghanna">
 <!ENTITY viewDirectory.label "Féach ar an nGailearaí">
 <!ENTITY customPersona.label "Pearsantacht Shaincheaptha">
 <!ENTITY customName.label "Ainm:">
@@ -13,8 +10,6 @@
 <!ENTITY okButton.label "OK">
 <!ENTITY contextHomePage.label "Leathanach Baile">
 <!ENTITY contextPreferences.label "Socruithe">
-<!ENTITY contextEdit.label "Eagar">
-<!ENTITY contextApply.label "Cuir i bhFeidhm">
 <!ENTITY usePersona.label "Úsáid Pearsantacht">
 <!ENTITY usePersona.accesskey "P">
 <!ENTITY usePersona.tooltip "Úsáid an Phearsantacht seo">
diff --git a/extension/locale/ga-IE/personas_bootstrap.properties b/extension/locale/ga-IE/personas_bootstrap.properties
new file mode 100755
index 0000000..2fbe6b5
--- /dev/null
+++ b/extension/locale/ga-IE/personas_bootstrap.properties
@@ -0,0 +1,5 @@
+personas_app_title = Pearsantachtaí
+useDefaultPersona.label = Réamhshocrú
+preferences.label = Sainroghanna
+contextEdit.label = Eagar
+contextApply.label = Cuir i bhFeidhm
diff --git a/extension/locale/gl-ES/personas.dtd b/extension/locale/gl-ES/personas.dtd
index 4b7f5bd..51a9775 100644
--- a/extension/locale/gl-ES/personas.dtd
+++ b/extension/locale/gl-ES/personas.dtd
@@ -1,6 +1,3 @@
-<!ENTITY personas_app_title "Personas">
-<!ENTITY useDefaultPersona.label "Predeterminado">
-<!ENTITY preferences.label "Preferencias...">
 <!ENTITY viewDirectory.label "Ver a galería...">
 <!ENTITY customPersona.label "Personalizar Persona">
 <!ENTITY customName.label "Nome:">
@@ -13,8 +10,6 @@
 <!ENTITY okButton.label "Aceptar">
 <!ENTITY contextHomePage.label "Páxina inicial">
 <!ENTITY contextPreferences.label "Axustes">
-<!ENTITY contextEdit.label "Editar">
-<!ENTITY contextApply.label "Aplicar">
 <!ENTITY usePersona.label "Usar Persona">
 <!ENTITY usePersona.accesskey "P">
 <!ENTITY usePersona.tooltip "Usar este Persona">
diff --git a/extension/locale/gl-ES/personas_bootstrap.properties b/extension/locale/gl-ES/personas_bootstrap.properties
new file mode 100755
index 0000000..86552ff
--- /dev/null
+++ b/extension/locale/gl-ES/personas_bootstrap.properties
@@ -0,0 +1,5 @@
+personas_app_title = Personas
+useDefaultPersona.label = Predeterminado
+preferences.label = Preferencias...
+contextEdit.label = Editar
+contextApply.label = Aplicar
diff --git a/extension/locale/he-IL/personas.dtd b/extension/locale/he-IL/personas.dtd
index dc34a1c..858bf9a 100644
--- a/extension/locale/he-IL/personas.dtd
+++ b/extension/locale/he-IL/personas.dtd
@@ -1,6 +1,3 @@
-<!ENTITY personas_app_title "Personas">
-<!ENTITY useDefaultPersona.label "ברירת מחדל">
-<!ENTITY preferences.label "העדפות...">
 <!ENTITY viewDirectory.label "הצגת הגלריה...">
 <!ENTITY customPersona.label "Persona מותאמת אישית">
 <!ENTITY customName.label "שם:">
@@ -13,8 +10,6 @@
 <!ENTITY okButton.label "אישור">
 <!ENTITY contextHomePage.label "עמוד הבית">
 <!ENTITY contextPreferences.label "הגדרות">
-<!ENTITY contextEdit.label "עריכה">
-<!ENTITY contextApply.label "החל">
 <!ENTITY usePersona.label "שימוש בפרסונה (Persona)">
 <!ENTITY usePersona.accesskey "פ">
 <!ENTITY usePersona.tooltip "שימוש בפרסונה הזאת (Persona)">
diff --git a/extension/locale/he-IL/personas_bootstrap.properties b/extension/locale/he-IL/personas_bootstrap.properties
new file mode 100755
index 0000000..9185bde
--- /dev/null
+++ b/extension/locale/he-IL/personas_bootstrap.properties
@@ -0,0 +1,5 @@
+personas_app_title = Personas
+useDefaultPersona.label = ברירת מחדל
+preferences.label = העדפות...
+contextEdit.label = עריכה
+contextApply.label = החל
diff --git a/extension/locale/hu-HU/personas.dtd b/extension/locale/hu-HU/personas.dtd
index 4ecb754..6e706eb 100644
--- a/extension/locale/hu-HU/personas.dtd
+++ b/extension/locale/hu-HU/personas.dtd
@@ -1,6 +1,3 @@
-<!ENTITY personas_app_title "Personas">
-<!ENTITY useDefaultPersona.label "Alapértelmezett">
-<!ENTITY preferences.label "Beállítások…">
 <!ENTITY viewDirectory.label "Könyvtár megtekintése…">
 <!ENTITY customPersona.label "Egyéni Persona">
 <!ENTITY customName.label "Név:">
@@ -13,8 +10,6 @@
 <!ENTITY okButton.label "OK">
 <!ENTITY contextHomePage.label "Kezdőlap">
 <!ENTITY contextPreferences.label "Beállítások">
-<!ENTITY contextEdit.label "Szerkesztés">
-<!ENTITY contextApply.label "Alkalmaz">
 <!ENTITY usePersona.label "Persona használata">
 <!ENTITY usePersona.accesskey "P">
 <!ENTITY usePersona.tooltip "Persona használata">
diff --git a/extension/locale/hu-HU/personas_bootstrap.properties b/extension/locale/hu-HU/personas_bootstrap.properties
new file mode 100755
index 0000000..9c34577
--- /dev/null
+++ b/extension/locale/hu-HU/personas_bootstrap.properties
@@ -0,0 +1,5 @@
+personas_app_title = Personas
+useDefaultPersona.label = Alapértelmezett
+preferences.label = Beállítások…
+contextEdit.label = Szerkesztés
+contextApply.label = Alkalmaz
diff --git a/extension/locale/it/personas.dtd b/extension/locale/it/personas.dtd
index 189faa4..259580a 100644
--- a/extension/locale/it/personas.dtd
+++ b/extension/locale/it/personas.dtd
@@ -1,6 +1,3 @@
-<!ENTITY personas_app_title "Personas">
-<!ENTITY useDefaultPersona.label "Predefinito">
-<!ENTITY preferences.label "Opzioni...">
 <!ENTITY viewDirectory.label "Visualizza galleria...">
 <!ENTITY customPersona.label "Personalizzazioni">
 <!ENTITY customName.label "Nome:">
@@ -13,8 +10,6 @@
 <!ENTITY okButton.label "OK">
 <!ENTITY contextHomePage.label "Pagina iniziale">
 <!ENTITY contextPreferences.label "Impostazioni">
-<!ENTITY contextEdit.label "Modifica">
-<!ENTITY contextApply.label "Applica">
 <!ENTITY usePersona.label "Utilizza tema">
 <!ENTITY usePersona.accesskey "z">
 <!ENTITY usePersona.tooltip "Utilizza questo tema">
diff --git a/extension/locale/it/personas_bootstrap.properties b/extension/locale/it/personas_bootstrap.properties
new file mode 100755
index 0000000..e2a11ae
--- /dev/null
+++ b/extension/locale/it/personas_bootstrap.properties
@@ -0,0 +1,5 @@
+personas_app_title = Personas
+useDefaultPersona.label = Predefinito
+preferences.label = Opzioni...
+contextEdit.label = Modifica
+contextApply.label = Applica
diff --git a/extension/locale/ja-JP-mac/personas.dtd b/extension/locale/ja-JP-mac/personas.dtd
index 497deac..46ac9d8 100644
--- a/extension/locale/ja-JP-mac/personas.dtd
+++ b/extension/locale/ja-JP-mac/personas.dtd
@@ -1,6 +1,3 @@
-<!ENTITY personas_app_title "Personas">
-<!ENTITY useDefaultPersona.label "デフォルトを利用する">
-<!ENTITY preferences.label "設定">
 <!ENTITY viewDirectory.label "ギャラリーを見る">
 <!ENTITY customPersona.label "カスタムペルソナ">
 <!ENTITY customName.label "名前:">
@@ -13,8 +10,6 @@
 <!ENTITY okButton.label "OK">
 <!ENTITY contextHomePage.label "ホームページ">
 <!ENTITY contextPreferences.label "設定">
-<!ENTITY contextEdit.label "編集">
-<!ENTITY contextApply.label "適用">
 <!ENTITY usePersona.label "Persona を使用する">
 <!ENTITY usePersona.accesskey "P">
 <!ENTITY usePersona.tooltip "この Persona を使用します">
diff --git a/extension/locale/ja-JP-mac/personas_bootstrap.properties b/extension/locale/ja-JP-mac/personas_bootstrap.properties
new file mode 100755
index 0000000..d3eff17
--- /dev/null
+++ b/extension/locale/ja-JP-mac/personas_bootstrap.properties
@@ -0,0 +1,5 @@
+personas_app_title = Personas
+useDefaultPersona.label = デフォルトを利用する
+preferences.label = 設定
+contextEdit.label = 編集
+contextApply.label = 適用
diff --git a/extension/locale/ja-JP/personas.dtd b/extension/locale/ja-JP/personas.dtd
index 208d553..1e7834c 100644
--- a/extension/locale/ja-JP/personas.dtd
+++ b/extension/locale/ja-JP/personas.dtd
@@ -1,6 +1,3 @@
-<!ENTITY personas_app_title "Personas">
-<!ENTITY useDefaultPersona.label "既定">
-<!ENTITY preferences.label "設定...">
 <!ENTITY viewDirectory.label "直接表示...">
 <!ENTITY customPersona.label "カスタムペルソナ">
 <!ENTITY customName.label "名前:">
@@ -13,8 +10,6 @@
 <!ENTITY okButton.label "OK">
 <!ENTITY contextHomePage.label "ホームページ">
 <!ENTITY contextPreferences.label "設定">
-<!ENTITY contextEdit.label "編集">
-<!ENTITY contextApply.label "適用">
 <!ENTITY usePersona.label "ペルソナを使用">
 <!ENTITY usePersona.accesskey "P">
 <!ENTITY usePersona.tooltip "このペルソナを使用する">
diff --git a/extension/locale/ja-JP/personas_bootstrap.properties b/extension/locale/ja-JP/personas_bootstrap.properties
new file mode 100755
index 0000000..d406913
--- /dev/null
+++ b/extension/locale/ja-JP/personas_bootstrap.properties
@@ -0,0 +1,5 @@
+personas_app_title = Personas
+useDefaultPersona.label = 既定
+preferences.label = 設定...
+contextEdit.label = 編集
+contextApply.label = 適用
diff --git a/extension/locale/ja/personas.dtd b/extension/locale/ja/personas.dtd
index 6990e68..41f2a3d 100644
--- a/extension/locale/ja/personas.dtd
+++ b/extension/locale/ja/personas.dtd
@@ -1,6 +1,3 @@
-<!ENTITY personas_app_title "Personas">
-<!ENTITY useDefaultPersona.label "既定を利用する">
-<!ENTITY preferences.label "設定">
 <!ENTITY viewDirectory.label "ギャラリーを見る">
 <!ENTITY customPersona.label "カスタムペルソナ">
 <!ENTITY customName.label "名前:">
@@ -13,8 +10,6 @@
 <!ENTITY okButton.label "OK">
 <!ENTITY contextHomePage.label "ホームページ">
 <!ENTITY contextPreferences.label "設定">
-<!ENTITY contextEdit.label "編集">
-<!ENTITY contextApply.label "適用">
 <!ENTITY usePersona.label "Use Persona">
 <!ENTITY usePersona.accesskey "P">
 <!ENTITY usePersona.tooltip "Use this Persona">
diff --git a/extension/locale/ja/personas_bootstrap.properties b/extension/locale/ja/personas_bootstrap.properties
new file mode 100755
index 0000000..e86be52
--- /dev/null
+++ b/extension/locale/ja/personas_bootstrap.properties
@@ -0,0 +1,5 @@
+personas_app_title = Personas
+useDefaultPersona.label = 既定を利用する
+preferences.label = 設定
+contextEdit.label = 編集
+contextApply.label = 適用
diff --git a/extension/locale/ko-KR/personas.dtd b/extension/locale/ko-KR/personas.dtd
index e7f6b0d..82d783f 100644
--- a/extension/locale/ko-KR/personas.dtd
+++ b/extension/locale/ko-KR/personas.dtd
@@ -1,6 +1,3 @@
-<!ENTITY personas_app_title "Personas">
-<!ENTITY useDefaultPersona.label "기본">
-<!ENTITY preferences.label "환경설정...">
 <!ENTITY viewDirectory.label "목록 보기…">
 <!ENTITY customPersona.label "사용자 Persona">
 <!ENTITY customName.label "이름:">
@@ -13,8 +10,6 @@
 <!ENTITY okButton.label "확인">
 <!ENTITY contextHomePage.label "홈 페이지">
 <!ENTITY contextPreferences.label "설정">
-<!ENTITY contextEdit.label "편집">
-<!ENTITY contextApply.label "적용">
 <!ENTITY usePersona.label "Persona 사용">
 <!ENTITY usePersona.accesskey "P">
 <!ENTITY usePersona.tooltip "이 Persona 사용">
diff --git a/extension/locale/ko-KR/personas_bootstrap.properties b/extension/locale/ko-KR/personas_bootstrap.properties
new file mode 100755
index 0000000..1ed68c3
--- /dev/null
+++ b/extension/locale/ko-KR/personas_bootstrap.properties
@@ -0,0 +1,5 @@
+personas_app_title = Personas
+useDefaultPersona.label = 기본
+preferences.label = 환경설정...
+contextEdit.label = 편집
+contextApply.label = 적용
diff --git a/extension/locale/lt-LT/personas.dtd b/extension/locale/lt-LT/personas.dtd
index 405c1c0..0cdfc2c 100644
--- a/extension/locale/lt-LT/personas.dtd
+++ b/extension/locale/lt-LT/personas.dtd
@@ -1,6 +1,3 @@
-<!ENTITY personas_app_title "Kaukės">
-<!ENTITY useDefaultPersona.label "Įprastasis">
-<!ENTITY preferences.label "Nuostatymai">
 <!ENTITY viewDirectory.label "Žiurėti galeriją">
 <!ENTITY customPersona.label "Kita kaukė">
 <!ENTITY customName.label "Pavadinimas:">
@@ -13,8 +10,6 @@
 <!ENTITY okButton.label "OK">
 <!ENTITY contextHomePage.label "Namų puslapis">
 <!ENTITY contextPreferences.label "Nustatymai">
-<!ENTITY contextEdit.label "Redaguoti">
-<!ENTITY contextApply.label "Taikyti">
 <!ENTITY usePersona.label "Use Persona">
 <!ENTITY usePersona.accesskey "P">
 <!ENTITY usePersona.tooltip "Use this Persona">
diff --git a/extension/locale/lt-LT/personas_bootstrap.properties b/extension/locale/lt-LT/personas_bootstrap.properties
new file mode 100755
index 0000000..12d5acb
--- /dev/null
+++ b/extension/locale/lt-LT/personas_bootstrap.properties
@@ -0,0 +1,5 @@
+personas_app_title = Kaukės
+useDefaultPersona.label = Įprastasis
+preferences.label = Nuostatymai
+contextEdit.label = Redaguoti
+contextApply.label = Taikyti
diff --git a/extension/locale/lt/personas.dtd b/extension/locale/lt/personas.dtd
index 2b6dd37..14c36a7 100644
--- a/extension/locale/lt/personas.dtd
+++ b/extension/locale/lt/personas.dtd
@@ -1,6 +1,3 @@
-<!ENTITY personas_app_title "Kaukės">
-<!ENTITY useDefaultPersona.label "Numatytoji">
-<!ENTITY preferences.label "Nustatymai">
 <!ENTITY viewDirectory.label "Žiūrėti galeriją">
 <!ENTITY customPersona.label "Pasirinktinė kaukė">
 <!ENTITY customName.label "Pavadinimas:">
@@ -13,8 +10,6 @@
 <!ENTITY okButton.label "Gerai">
 <!ENTITY contextHomePage.label "Namų puslapis">
 <!ENTITY contextPreferences.label "Nustatymai">
-<!ENTITY contextEdit.label "Redaguoti">
-<!ENTITY contextApply.label "Taikyti">
 <!ENTITY usePersona.label "Naudoti kaukę">
 <!ENTITY usePersona.accesskey "N">
 <!ENTITY usePersona.tooltip "Naudoti šią kaukę">
diff --git a/extension/locale/lt/personas_bootstrap.properties b/extension/locale/lt/personas_bootstrap.properties
new file mode 100755
index 0000000..8a47afd
--- /dev/null
+++ b/extension/locale/lt/personas_bootstrap.properties
@@ -0,0 +1,5 @@
+personas_app_title = Kaukės
+useDefaultPersona.label = Numatytoji
+preferences.label = Nustatymai
+contextEdit.label = Redaguoti
+contextApply.label = Taikyti
diff --git a/extension/locale/mk-MK/personas.dtd b/extension/locale/mk-MK/personas.dtd
index 8233093..4e3ede2 100644
--- a/extension/locale/mk-MK/personas.dtd
+++ b/extension/locale/mk-MK/personas.dtd
@@ -1,6 +1,3 @@
-<!ENTITY personas_app_title "Personas">
-<!ENTITY useDefaultPersona.label "Основно">
-<!ENTITY preferences.label "Подесувања…">
 <!ENTITY viewDirectory.label "Погледни ја галеријата…">
 <!ENTITY customPersona.label "Споствена персона">
 <!ENTITY customName.label "Име:">
@@ -13,8 +10,6 @@
 <!ENTITY okButton.label "OK">
 <!ENTITY contextHomePage.label "Домашна страна">
 <!ENTITY contextPreferences.label "Сетинзи">
-<!ENTITY contextEdit.label "Измени">
-<!ENTITY contextApply.label "Користи">
 <!ENTITY usePersona.label "Use Persona">
 <!ENTITY usePersona.accesskey "P">
 <!ENTITY usePersona.tooltip "Use this Persona">
diff --git a/extension/locale/mk-MK/personas_bootstrap.properties b/extension/locale/mk-MK/personas_bootstrap.properties
new file mode 100755
index 0000000..7bf1168
--- /dev/null
+++ b/extension/locale/mk-MK/personas_bootstrap.properties
@@ -0,0 +1,5 @@
+personas_app_title = Personas
+useDefaultPersona.label = Основно
+preferences.label = Подесувања…
+contextEdit.label = Измени
+contextApply.label = Користи
diff --git a/extension/locale/nl/personas.dtd b/extension/locale/nl/personas.dtd
index f41b537..dac411b 100644
--- a/extension/locale/nl/personas.dtd
+++ b/extension/locale/nl/personas.dtd
@@ -1,6 +1,3 @@
-<!ENTITY personas_app_title "Personas">
-<!ENTITY useDefaultPersona.label "Standaard">
-<!ENTITY preferences.label "Voorkeuren">
 <!ENTITY viewDirectory.label "Galerij bekijken">
 <!ENTITY customPersona.label "Eigen persona">
 <!ENTITY customName.label "Naam:">
@@ -13,8 +10,6 @@
 <!ENTITY okButton.label "OK">
 <!ENTITY contextHomePage.label "Startpagina">
 <!ENTITY contextPreferences.label "Instellingen">
-<!ENTITY contextEdit.label "Bewerken">
-<!ENTITY contextApply.label "Toepassen">
 <!ENTITY usePersona.label "Persona gebruiken">
 <!ENTITY usePersona.accesskey "P">
 <!ENTITY usePersona.tooltip "Deze persona gebruiken">
diff --git a/extension/locale/nl/personas_bootstrap.properties b/extension/locale/nl/personas_bootstrap.properties
new file mode 100755
index 0000000..9dc69ad
--- /dev/null
+++ b/extension/locale/nl/personas_bootstrap.properties
@@ -0,0 +1,5 @@
+personas_app_title = Personas
+useDefaultPersona.label = Standaard
+preferences.label = Voorkeuren
+contextEdit.label = Bewerken
+contextApply.label = Toepassen
diff --git a/extension/locale/pl-PL/personas.dtd b/extension/locale/pl-PL/personas.dtd
index d65c47f..7db98ea 100644
--- a/extension/locale/pl-PL/personas.dtd
+++ b/extension/locale/pl-PL/personas.dtd
@@ -1,6 +1,3 @@
-<!ENTITY personas_app_title "Minimotywy">
-<!ENTITY useDefaultPersona.label "Domyślny motyw">
-<!ENTITY preferences.label "Ustawienia…">
 <!ENTITY viewDirectory.label "Wyświetl galerię">
 <!ENTITY customPersona.label "Prywatny minimotyw">
 <!ENTITY customName.label "Nazwa:">
@@ -13,8 +10,6 @@
 <!ENTITY okButton.label "OK">
 <!ENTITY contextHomePage.label "Strona domowa">
 <!ENTITY contextPreferences.label "Ustawienia">
-<!ENTITY contextEdit.label "Edytuj">
-<!ENTITY contextApply.label "Zastosuj">
 <!ENTITY usePersona.label "Use Persona">
 <!ENTITY usePersona.accesskey "P">
 <!ENTITY usePersona.tooltip "Use this Persona">
diff --git a/extension/locale/pl-PL/personas_bootstrap.properties b/extension/locale/pl-PL/personas_bootstrap.properties
new file mode 100755
index 0000000..3a8af81
--- /dev/null
+++ b/extension/locale/pl-PL/personas_bootstrap.properties
@@ -0,0 +1,5 @@
+personas_app_title = Minimotywy
+useDefaultPersona.label = Domyślny motyw
+preferences.label = Ustawienia…
+contextEdit.label = Edytuj
+contextApply.label = Zastosuj
diff --git a/extension/locale/pl/personas.dtd b/extension/locale/pl/personas.dtd
index a519e9a..54cf17e 100644
--- a/extension/locale/pl/personas.dtd
+++ b/extension/locale/pl/personas.dtd
@@ -1,6 +1,3 @@
-<!ENTITY personas_app_title "Minimotywy">
-<!ENTITY useDefaultPersona.label "Domyślny motyw">
-<!ENTITY preferences.label "Ustawienia…">
 <!ENTITY viewDirectory.label "Wyświetl galerię">
 <!ENTITY customPersona.label "Prywatny minimotyw">
 <!ENTITY customName.label "Nazwa:">
@@ -13,8 +10,6 @@
 <!ENTITY okButton.label "OK">
 <!ENTITY contextHomePage.label "Strona domowa">
 <!ENTITY contextPreferences.label "Ustawienia">
-<!ENTITY contextEdit.label "Edytuj">
-<!ENTITY contextApply.label "Zastosuj">
 <!ENTITY usePersona.label "Użyj minimotywu">
 <!ENTITY usePersona.accesskey "m">
 <!ENTITY usePersona.tooltip "Użyj tego minimotywu">
diff --git a/extension/locale/pl/personas_bootstrap.properties b/extension/locale/pl/personas_bootstrap.properties
new file mode 100755
index 0000000..3a8af81
--- /dev/null
+++ b/extension/locale/pl/personas_bootstrap.properties
@@ -0,0 +1,5 @@
+personas_app_title = Minimotywy
+useDefaultPersona.label = Domyślny motyw
+preferences.label = Ustawienia…
+contextEdit.label = Edytuj
+contextApply.label = Zastosuj
diff --git a/extension/locale/pt-BR/personas.dtd b/extension/locale/pt-BR/personas.dtd
index 4faee19..5bc6dff 100644
--- a/extension/locale/pt-BR/personas.dtd
+++ b/extension/locale/pt-BR/personas.dtd
@@ -1,6 +1,3 @@
-<!ENTITY personas_app_title "Personas">
-<!ENTITY useDefaultPersona.label "Padrão">
-<!ENTITY preferences.label "Preferências…">
 <!ENTITY viewDirectory.label "Exibir catálogo…">
 <!ENTITY customPersona.label "Personalizar Persona">
 <!ENTITY customName.label "Nome:">
@@ -13,8 +10,6 @@
 <!ENTITY okButton.label "OK">
 <!ENTITY contextHomePage.label "Página inicial">
 <!ENTITY contextPreferences.label "Configurações">
-<!ENTITY contextEdit.label "Editar">
-<!ENTITY contextApply.label "Aplicar">
 <!ENTITY usePersona.label "Use Persona">
 <!ENTITY usePersona.accesskey "P">
 <!ENTITY usePersona.tooltip "Use this Persona">
diff --git a/extension/locale/pt-BR/personas_bootstrap.properties b/extension/locale/pt-BR/personas_bootstrap.properties
new file mode 100755
index 0000000..c033522
--- /dev/null
+++ b/extension/locale/pt-BR/personas_bootstrap.properties
@@ -0,0 +1,5 @@
+personas_app_title = Personas
+useDefaultPersona.label = Padrão
+preferences.label = Preferências…
+contextEdit.label = Editar
+contextApply.label = Aplicar
diff --git a/extension/locale/pt-PT/personas.dtd b/extension/locale/pt-PT/personas.dtd
index 6273944..e8541d8 100644
--- a/extension/locale/pt-PT/personas.dtd
+++ b/extension/locale/pt-PT/personas.dtd
@@ -1,6 +1,3 @@
-<!ENTITY personas_app_title "Personas">
-<!ENTITY useDefaultPersona.label "Default">
-<!ENTITY preferences.label "Preferences">
 <!ENTITY viewDirectory.label "View Gallery">
 <!ENTITY customPersona.label "Custom Persona">
 <!ENTITY customName.label "Name:">
@@ -13,8 +10,6 @@
 <!ENTITY okButton.label "OK">
 <!ENTITY contextHomePage.label "Home Page">
 <!ENTITY contextPreferences.label "Settings">
-<!ENTITY contextEdit.label "Edit">
-<!ENTITY contextApply.label "Apply">
 <!ENTITY usePersona.label "Use Persona">
 <!ENTITY usePersona.accesskey "P">
 <!ENTITY usePersona.tooltip "Use this Persona">
diff --git a/extension/locale/pt-PT/personas_bootstrap.properties b/extension/locale/pt-PT/personas_bootstrap.properties
new file mode 100644
index 0000000..6f4d989
--- /dev/null
+++ b/extension/locale/pt-PT/personas_bootstrap.properties
@@ -0,0 +1,5 @@
+personas_app_title= Personas
+useDefaultPersona.label= Default
+preferences.label= Preferences
+contextEdit.label= Edit
+contextApply.label= Apply
diff --git a/extension/locale/ro/personas.dtd b/extension/locale/ro/personas.dtd
index 39b1097..87a0b35 100644
--- a/extension/locale/ro/personas.dtd
+++ b/extension/locale/ro/personas.dtd
@@ -1,6 +1,3 @@
-<!ENTITY personas_app_title "Personas">
-<!ENTITY useDefaultPersona.label "Predefinită">
-<!ENTITY preferences.label "Opțiuni">
 <!ENTITY viewDirectory.label "Vizualizează galeria">
 <!ENTITY customPersona.label "Personalizare temă">
 <!ENTITY customName.label "Denumire:">
@@ -13,8 +10,6 @@
 <!ENTITY okButton.label "Ieșire">
 <!ENTITY contextHomePage.label "Pagină inițială">
 <!ENTITY contextPreferences.label "Configurare">
-<!ENTITY contextEdit.label "Editează">
-<!ENTITY contextApply.label "Aplică">
 <!ENTITY usePersona.label "Folosește tema">
 <!ENTITY usePersona.accesskey "F">
 <!ENTITY usePersona.tooltip "Folosește această temă">
diff --git a/extension/locale/ro/personas_bootstrap.properties b/extension/locale/ro/personas_bootstrap.properties
new file mode 100755
index 0000000..7790f44
--- /dev/null
+++ b/extension/locale/ro/personas_bootstrap.properties
@@ -0,0 +1,5 @@
+personas_app_title = Personas
+useDefaultPersona.label = Predefinită
+preferences.label = Opțiuni
+contextEdit.label = Editează
+contextApply.label = Aplică
diff --git a/extension/locale/ru-RU/personas.dtd b/extension/locale/ru-RU/personas.dtd
index 5fc372f..3c7dc17 100644
--- a/extension/locale/ru-RU/personas.dtd
+++ b/extension/locale/ru-RU/personas.dtd
@@ -1,6 +1,3 @@
-<!ENTITY personas_app_title "Personas">
-<!ENTITY useDefaultPersona.label "По умолчанию">
-<!ENTITY preferences.label "Настройки">
 <!ENTITY viewDirectory.label "Просмотреть каталог">
 <!ENTITY customPersona.label "Скин пользователя">
 <!ENTITY customName.label "Название:">
@@ -13,8 +10,6 @@
 <!ENTITY okButton.label "OK">
 <!ENTITY contextHomePage.label "Сайт">
 <!ENTITY contextPreferences.label "Настройки">
-<!ENTITY contextEdit.label "Редактировать">
-<!ENTITY contextApply.label "Применить">
 <!ENTITY usePersona.label "Use Persona">
 <!ENTITY usePersona.accesskey "P">
 <!ENTITY usePersona.tooltip "Use this Persona">
diff --git a/extension/locale/ru-RU/personas_bootstrap.properties b/extension/locale/ru-RU/personas_bootstrap.properties
new file mode 100755
index 0000000..fc1d318
--- /dev/null
+++ b/extension/locale/ru-RU/personas_bootstrap.properties
@@ -0,0 +1,5 @@
+personas_app_title = Personas
+useDefaultPersona.label = По умолчанию
+preferences.label = Настройки
+contextEdit.label = Редактировать
+contextApply.label = Применить
diff --git a/extension/locale/si-LK/personas.dtd b/extension/locale/si-LK/personas.dtd
index 168d181..17ecce6 100644
--- a/extension/locale/si-LK/personas.dtd
+++ b/extension/locale/si-LK/personas.dtd
@@ -1,6 +1,3 @@
-<!ENTITY personas_app_title "පුද්ගල සැකසුම">
-<!ENTITY useDefaultPersona.label "සාමාන්‍ය">
-<!ENTITY preferences.label "අභිමත">
 <!ENTITY viewDirectory.label "ගැලරිය පෙන්වන්න">
 <!ENTITY customPersona.label "සකස් කරන්න ලද පුද්ගල සැකසුම">
 <!ENTITY customName.label "නම">
@@ -13,8 +10,6 @@
 <!ENTITY okButton.label "හරි">
 <!ENTITY contextHomePage.label "මුල් පිටුව">
 <!ENTITY contextPreferences.label "සැකසුම්">
-<!ENTITY contextEdit.label "වෙනස් කරන්න">
-<!ENTITY contextApply.label "යොදන්න">
 <!ENTITY usePersona.label "Use Persona">
 <!ENTITY usePersona.accesskey "P">
 <!ENTITY usePersona.tooltip "Use this Persona">
diff --git a/extension/locale/si-LK/personas_bootstrap.properties b/extension/locale/si-LK/personas_bootstrap.properties
new file mode 100755
index 0000000..ce7550f
--- /dev/null
+++ b/extension/locale/si-LK/personas_bootstrap.properties
@@ -0,0 +1,5 @@
+personas_app_title = පුද්ගල සැකසුම
+useDefaultPersona.label = සාමාන්‍ය
+preferences.label = අභිමත
+contextEdit.label = වෙනස් කරන්න
+contextApply.label = යොදන්න
diff --git a/extension/locale/sk-SK/personas.dtd b/extension/locale/sk-SK/personas.dtd
index e3e095f..fb5ecd5 100644
--- a/extension/locale/sk-SK/personas.dtd
+++ b/extension/locale/sk-SK/personas.dtd
@@ -1,6 +1,3 @@
-<!ENTITY personas_app_title "Personas">
-<!ENTITY useDefaultPersona.label "Predvolené">
-<!ENTITY preferences.label "Možnosti...">
 <!ENTITY viewDirectory.label "Zobraziť galériu...">
 <!ENTITY customPersona.label "Vlastná téma">
 <!ENTITY customName.label "Názov:">
@@ -13,8 +10,6 @@
 <!ENTITY okButton.label "OK">
 <!ENTITY contextHomePage.label "Domovská stránka">
 <!ENTITY contextPreferences.label "Nastavenia">
-<!ENTITY contextEdit.label "Upraviť">
-<!ENTITY contextApply.label "Použiť">
 <!ENTITY usePersona.label "Use Persona">
 <!ENTITY usePersona.accesskey "P">
 <!ENTITY usePersona.tooltip "Use this Persona">
diff --git a/extension/locale/sk-SK/personas_bootstrap.properties b/extension/locale/sk-SK/personas_bootstrap.properties
new file mode 100755
index 0000000..33d4c16
--- /dev/null
+++ b/extension/locale/sk-SK/personas_bootstrap.properties
@@ -0,0 +1,5 @@
+personas_app_title = Personas
+useDefaultPersona.label = Predvolené
+preferences.label = Možnosti...
+contextEdit.label = Upraviť
+contextApply.label = Použiť
diff --git a/extension/locale/sl-SI/personas.dtd b/extension/locale/sl-SI/personas.dtd
index 6864796..2414a07 100644
--- a/extension/locale/sl-SI/personas.dtd
+++ b/extension/locale/sl-SI/personas.dtd
@@ -1,6 +1,3 @@
-<!ENTITY personas_app_title "Personas">
-<!ENTITY useDefaultPersona.label "Privzeto">
-<!ENTITY preferences.label "Nastavitve">
 <!ENTITY viewDirectory.label "Pokaži galerijo">
 <!ENTITY customPersona.label "Persona po meri">
 <!ENTITY customName.label "Ime:">
@@ -13,8 +10,6 @@
 <!ENTITY okButton.label "V redu">
 <!ENTITY contextHomePage.label "Domača stran">
 <!ENTITY contextPreferences.label "Nastavitve">
-<!ENTITY contextEdit.label "Uredi">
-<!ENTITY contextApply.label "Uveljavi">
 <!ENTITY usePersona.label "Uporabi persono">
 <!ENTITY usePersona.accesskey "U">
 <!ENTITY usePersona.tooltip "Uporabi to persono">
diff --git a/extension/locale/sl-SI/personas_bootstrap.properties b/extension/locale/sl-SI/personas_bootstrap.properties
new file mode 100644
index 0000000..295e834
--- /dev/null
+++ b/extension/locale/sl-SI/personas_bootstrap.properties
@@ -0,0 +1,5 @@
+personas_app_title= Personas
+useDefaultPersona.label= Privzeto
+preferences.label= Nastavitve
+contextEdit.label= Uredi
+contextApply.label= Uveljavi
diff --git a/extension/locale/sr-RS/personas.dtd b/extension/locale/sr-RS/personas.dtd
index fb2bff9..2b4ae8e 100644
--- a/extension/locale/sr-RS/personas.dtd
+++ b/extension/locale/sr-RS/personas.dtd
@@ -1,6 +1,3 @@
-<!ENTITY personas_app_title "Personas">
-<!ENTITY useDefaultPersona.label "Подразумевана">
-<!ENTITY preferences.label "Подешавања...">
 <!ENTITY viewDirectory.label "Прикажи деректоријум...">
 <!ENTITY customPersona.label "Прилагођена персона">
 <!ENTITY customName.label "Име:">
@@ -13,8 +10,6 @@
 <!ENTITY okButton.label "У реду">
 <!ENTITY contextHomePage.label "Матична страна">
 <!ENTITY contextPreferences.label "Подешавања">
-<!ENTITY contextEdit.label "Измени">
-<!ENTITY contextApply.label "Примени">
 <!ENTITY usePersona.label "Use Persona">
 <!ENTITY usePersona.accesskey "P">
 <!ENTITY usePersona.tooltip "Use this Persona">
diff --git a/extension/locale/sr-RS/personas_bootstrap.properties b/extension/locale/sr-RS/personas_bootstrap.properties
new file mode 100644
index 0000000..c6c8a9a
--- /dev/null
+++ b/extension/locale/sr-RS/personas_bootstrap.properties
@@ -0,0 +1,5 @@
+personas_app_title= Personas
+useDefaultPersona.label= Подразумевана
+preferences.label= Подешавања...
+contextEdit.label= Измени
+contextApply.label= Примени
diff --git a/extension/locale/sr/personas.dtd b/extension/locale/sr/personas.dtd
index a2d7d86..b732751 100644
--- a/extension/locale/sr/personas.dtd
+++ b/extension/locale/sr/personas.dtd
@@ -1,6 +1,3 @@
-<!ENTITY personas_app_title "Одела">
-<!ENTITY useDefaultPersona.label "Подразумевана">
-<!ENTITY preferences.label "Подешавања...">
 <!ENTITY viewDirectory.label "Прикажи галерију...">
 <!ENTITY customPersona.label "Прилагођено одело">
 <!ENTITY customName.label "Назив:">
@@ -13,8 +10,6 @@
 <!ENTITY okButton.label "У реду">
 <!ENTITY contextHomePage.label "Матична страна">
 <!ENTITY contextPreferences.label "Подешавања">
-<!ENTITY contextEdit.label "Уреди">
-<!ENTITY contextApply.label "Примени">
 <!ENTITY usePersona.label "Користи одело">
 <!ENTITY usePersona.accesskey "О">
 <!ENTITY usePersona.tooltip "Користи ово одело">
diff --git a/extension/locale/sr/personas_bootstrap.properties b/extension/locale/sr/personas_bootstrap.properties
new file mode 100755
index 0000000..413bede
--- /dev/null
+++ b/extension/locale/sr/personas_bootstrap.properties
@@ -0,0 +1,5 @@
+personas_app_title = Одела
+useDefaultPersona.label = Подразумевана
+preferences.label = Подешавања...
+contextEdit.label = Уреди
+contextApply.label = Примени
diff --git a/extension/locale/sv-SE/personas.dtd b/extension/locale/sv-SE/personas.dtd
index 9f5d6f9..234173e 100644
--- a/extension/locale/sv-SE/personas.dtd
+++ b/extension/locale/sv-SE/personas.dtd
@@ -1,6 +1,3 @@
-<!ENTITY personas_app_title "Personas">
-<!ENTITY useDefaultPersona.label "Standard">
-<!ENTITY preferences.label "Inställningar">
 <!ENTITY viewDirectory.label "Visa Directory">
 <!ENTITY customPersona.label "Anpassd Persona">
 <!ENTITY customName.label "Namn:">
@@ -13,8 +10,6 @@
 <!ENTITY okButton.label "OK">
 <!ENTITY contextHomePage.label "Hemsidda">
 <!ENTITY contextPreferences.label "Inställningar">
-<!ENTITY contextEdit.label "Hantera">
-<!ENTITY contextApply.label "Verkställ">
 <!ENTITY usePersona.label "Använd Persona">
 <!ENTITY usePersona.accesskey "P">
 <!ENTITY usePersona.tooltip "Använd denna Persona">
diff --git a/extension/locale/sv-SE/personas_bootstrap.properties b/extension/locale/sv-SE/personas_bootstrap.properties
new file mode 100755
index 0000000..d91576d
--- /dev/null
+++ b/extension/locale/sv-SE/personas_bootstrap.properties
@@ -0,0 +1,5 @@
+personas_app_title = Personas
+useDefaultPersona.label = Standard
+preferences.label = Inställningar
+contextEdit.label = Hantera
+contextApply.label = Verkställ
diff --git a/extension/locale/tr/personas.dtd b/extension/locale/tr/personas.dtd
index f629daa..baee318 100644
--- a/extension/locale/tr/personas.dtd
+++ b/extension/locale/tr/personas.dtd
@@ -1,6 +1,3 @@
-<!ENTITY personas_app_title "Personas">
-<!ENTITY useDefaultPersona.label "Varsayılan">
-<!ENTITY preferences.label "Tercihler...">
 <!ENTITY viewDirectory.label "Dizini Göster...">
 <!ENTITY customPersona.label "Varsayılan Kişi">
 <!ENTITY customName.label "İsim:">
@@ -13,8 +10,6 @@
 <!ENTITY okButton.label "TAMAM">
 <!ENTITY contextHomePage.label "Ana Sayfa">
 <!ENTITY contextPreferences.label "Ayarlar">
-<!ENTITY contextEdit.label "Düzenle">
-<!ENTITY contextApply.label "Uygula">
 <!ENTITY usePersona.label "Use Persona">
 <!ENTITY usePersona.accesskey "P">
 <!ENTITY usePersona.tooltip "Use this Persona">
diff --git a/extension/locale/tr/personas_bootstrap.properties b/extension/locale/tr/personas_bootstrap.properties
new file mode 100755
index 0000000..7e8938d
--- /dev/null
+++ b/extension/locale/tr/personas_bootstrap.properties
@@ -0,0 +1,5 @@
+personas_app_title = Personas
+useDefaultPersona.label = Varsayılan
+preferences.label = Tercihler...
+contextEdit.label = Düzenle
+contextApply.label = Uygula
diff --git a/extension/locale/uk-UA/personas.dtd b/extension/locale/uk-UA/personas.dtd
index 489a70b..d4e2ce2 100644
--- a/extension/locale/uk-UA/personas.dtd
+++ b/extension/locale/uk-UA/personas.dtd
@@ -1,6 +1,3 @@
-<!ENTITY personas_app_title "Персони">
-<!ENTITY useDefaultPersona.label "Типовий">
-<!ENTITY preferences.label "Налаштування">
 <!ENTITY viewDirectory.label "Переглянути галерею">
 <!ENTITY customPersona.label "Моя Персона">
 <!ENTITY customName.label "Ім`я:">
@@ -13,8 +10,6 @@
 <!ENTITY okButton.label "Гаразд">
 <!ENTITY contextHomePage.label "Домашня сторінка">
 <!ENTITY contextPreferences.label "Налаштування">
-<!ENTITY contextEdit.label "Редагувати">
-<!ENTITY contextApply.label "Прийняти">
 <!ENTITY usePersona.label "Use Persona">
 <!ENTITY usePersona.accesskey "P">
 <!ENTITY usePersona.tooltip "Use this Persona">
diff --git a/extension/locale/uk-UA/personas_bootstrap.properties b/extension/locale/uk-UA/personas_bootstrap.properties
new file mode 100755
index 0000000..7773833
--- /dev/null
+++ b/extension/locale/uk-UA/personas_bootstrap.properties
@@ -0,0 +1,5 @@
+personas_app_title = Персони
+useDefaultPersona.label = Типовий
+preferences.label = Налаштування
+contextEdit.label = Редагувати
+contextApply.label = Прийняти
diff --git a/extension/locale/vi-VN/personas.dtd b/extension/locale/vi-VN/personas.dtd
index 6fbd47b..244c015 100644
--- a/extension/locale/vi-VN/personas.dtd
+++ b/extension/locale/vi-VN/personas.dtd
@@ -1,6 +1,3 @@
-<!ENTITY personas_app_title "Personas">
-<!ENTITY useDefaultPersona.label "Mặc định">
-<!ENTITY preferences.label "Tùy chỉnh">
 <!ENTITY viewDirectory.label "Xem trang Trưng bày">
 <!ENTITY customPersona.label "Persona Tùy biến">
 <!ENTITY customName.label "Tên:">
@@ -13,8 +10,6 @@
 <!ENTITY okButton.label "OK">
 <!ENTITY contextHomePage.label "Trang chủ">
 <!ENTITY contextPreferences.label "Thiết lập">
-<!ENTITY contextEdit.label "Chỉnh sửa">
-<!ENTITY contextApply.label "Áp dụng">
 <!ENTITY usePersona.label "Use Persona">
 <!ENTITY usePersona.accesskey "P">
 <!ENTITY usePersona.tooltip "Use this Persona">
diff --git a/extension/locale/vi-VN/personas_bootstrap.properties b/extension/locale/vi-VN/personas_bootstrap.properties
new file mode 100644
index 0000000..4d167a1
--- /dev/null
+++ b/extension/locale/vi-VN/personas_bootstrap.properties
@@ -0,0 +1,5 @@
+personas_app_title= Personas
+useDefaultPersona.label= Mặc định
+preferences.label= Tùy chỉnh
+contextEdit.label= Chỉnh sửa
+contextApply.label= Áp dụng
diff --git a/extension/locale/vi/personas.dtd b/extension/locale/vi/personas.dtd
index 6fbd47b..244c015 100644
--- a/extension/locale/vi/personas.dtd
+++ b/extension/locale/vi/personas.dtd
@@ -1,6 +1,3 @@
-<!ENTITY personas_app_title "Personas">
-<!ENTITY useDefaultPersona.label "Mặc định">
-<!ENTITY preferences.label "Tùy chỉnh">
 <!ENTITY viewDirectory.label "Xem trang Trưng bày">
 <!ENTITY customPersona.label "Persona Tùy biến">
 <!ENTITY customName.label "Tên:">
@@ -13,8 +10,6 @@
 <!ENTITY okButton.label "OK">
 <!ENTITY contextHomePage.label "Trang chủ">
 <!ENTITY contextPreferences.label "Thiết lập">
-<!ENTITY contextEdit.label "Chỉnh sửa">
-<!ENTITY contextApply.label "Áp dụng">
 <!ENTITY usePersona.label "Use Persona">
 <!ENTITY usePersona.accesskey "P">
 <!ENTITY usePersona.tooltip "Use this Persona">
diff --git a/extension/locale/vi/personas_bootstrap.properties b/extension/locale/vi/personas_bootstrap.properties
new file mode 100755
index 0000000..a745d6f
--- /dev/null
+++ b/extension/locale/vi/personas_bootstrap.properties
@@ -0,0 +1,5 @@
+personas_app_title = Personas
+useDefaultPersona.label = Mặc định
+preferences.label = Tùy chỉnh
+contextEdit.label = Chỉnh sửa
+contextApply.label = Áp dụng
diff --git a/extension/locale/zh-CN/personas.dtd b/extension/locale/zh-CN/personas.dtd
index 49422ef..2a6ac55 100644
--- a/extension/locale/zh-CN/personas.dtd
+++ b/extension/locale/zh-CN/personas.dtd
@@ -1,6 +1,3 @@
-<!ENTITY personas_app_title "Personas">
-<!ENTITY useDefaultPersona.label "使用默认风格">
-<!ENTITY preferences.label "选项…">
 <!ENTITY viewDirectory.label "查看目录…">
 <!ENTITY customPersona.label "定制炫彩风格">
 <!ENTITY customName.label "名称:">
@@ -13,8 +10,6 @@
 <!ENTITY okButton.label "确定">
 <!ENTITY contextHomePage.label "主页">
 <!ENTITY contextPreferences.label "设置">
-<!ENTITY contextEdit.label "编辑">
-<!ENTITY contextApply.label "应用">
 <!ENTITY usePersona.label "使用炫彩风格">
 <!ENTITY usePersona.accesskey "P">
 <!ENTITY usePersona.tooltip "使用这款炫彩风格">
diff --git a/extension/locale/zh-CN/personas_bootstrap.properties b/extension/locale/zh-CN/personas_bootstrap.properties
new file mode 100755
index 0000000..5f82fd7
--- /dev/null
+++ b/extension/locale/zh-CN/personas_bootstrap.properties
@@ -0,0 +1,5 @@
+personas_app_title = Personas
+useDefaultPersona.label = 使用默认风格
+preferences.label = 选项…
+contextEdit.label = 编辑
+contextApply.label = 应用
diff --git a/extension/locale/zh-TW/personas.dtd b/extension/locale/zh-TW/personas.dtd
index 7381e67..e1633d0 100644
--- a/extension/locale/zh-TW/personas.dtd
+++ b/extension/locale/zh-TW/personas.dtd
@@ -1,6 +1,3 @@
-<!ENTITY personas_app_title "Personas">
-<!ENTITY useDefaultPersona.label "預設值">
-<!ENTITY preferences.label "偏好設定…">
 <!ENTITY viewDirectory.label "瀏覽更多…">
 <!ENTITY customPersona.label "自訂 Persona">
 <!ENTITY customName.label "名稱:">
@@ -13,8 +10,6 @@
 <!ENTITY okButton.label "確定">
 <!ENTITY contextHomePage.label "首頁">
 <!ENTITY contextPreferences.label "設定">
-<!ENTITY contextEdit.label "編輯">
-<!ENTITY contextApply.label "套用">
 <!ENTITY usePersona.label "使用 Persona">
 <!ENTITY usePersona.accesskey "P">
 <!ENTITY usePersona.tooltip "使用這個 Persona">
diff --git a/extension/locale/zh-TW/personas_bootstrap.properties b/extension/locale/zh-TW/personas_bootstrap.properties
new file mode 100755
index 0000000..512a539
--- /dev/null
+++ b/extension/locale/zh-TW/personas_bootstrap.properties
@@ -0,0 +1,5 @@
+personas_app_title = Personas
+useDefaultPersona.label = 預設值
+preferences.label = 偏好設定…
+contextEdit.label = 編輯
+contextApply.label = 套用
diff --git a/extension/content/personas.js b/extension/modules/personas.js
similarity index 69%
rename from extension/content/personas.js
rename to extension/modules/personas.js
index 656f96d..648e5fe 100644
--- a/extension/content/personas.js
+++ b/extension/modules/personas.js
@@ -39,6 +39,8 @@
  *
  * ***** END LICENSE BLOCK ***** */
 
+var EXPORTED_SYMBOLS = ["PersonaController"];
+
 // Generic modules get imported into the persona controller rather than
 // the global namespace after the controller definition below so they don't
 // conflict with modules with the same names imported by other extensions.
@@ -53,6 +55,14 @@ if (typeof Cr == "undefined")
 if (typeof Cu == "undefined")
     var Cu = Components.utils;
 
+Components.utils.import("resource://gre/modules/Services.jsm");
+
+try {
+    var console = (Cu.import("resource://gre/modules/Console.jsm", {})).console;
+} catch (error) {
+    var console = (Cu.import("resource://gre/modules/" + "devtools" + "/Console.jsm", {})).console;
+}
+
 // It's OK to import the service module into the global namespace because its
 // exported symbols all contain the word "persona" (f.e. PersonaService).
 Cu.import("resource://personas/modules/service.js");
@@ -91,24 +101,20 @@ var PersonaController = {
             new this.StringBundle("chrome://branding/locale/brand.properties");
     },
 
-    get _menu() {
-        delete this._menu;
-        return this._menu = document.getElementById("personas-menu");
+    get_menu(document) {
+        return document.getElementById("personas-menu");
     },
 
-    get _menuButton() {
-        delete this._menuButton;
-        return this._menuButton = document.getElementById("personas-selector-button");
+    get_menuButton(document) {
+        return document.getElementById("personas-selector-button");
     },
 
-    get _menuPopup() {
-        delete this._menuPopup;
-        return this._menuPopup = document.getElementById("personas-selector-menu");
+    get_menuPopup(document) {
+        return document.getElementById("personas-selector-menu");
     },
 
-    get _toolbarButton() {
-        delete this._toolbarButton;
-        return this._toolbarButton = document.getElementById("personas-toolbar-button");
+    get_toolbarButton(document) {
+        return document.getElementById("personas-toolbar-button");
     },
 
     get _sessionStore() {
@@ -117,25 +123,23 @@ var PersonaController = {
             .getService(Ci.nsISessionStore);
     },
 
-    get _header() {
-        delete this._header;
+    get_header(document) {
         switch (PersonaService.appInfo.ID) {
             case PersonaService.THUNDERBIRD_ID:
-                return this._header = document.getElementById("messengerWindow");
+                return document.getElementById("messengerWindow");
             case PersonaService.FIREFOX_ID:
-                return this._header = document.getElementById("main-window");
+                return document.getElementById("main-window");
             default:
                 throw "unknown application ID " + PersonaService.appInfo.ID;
         }
     },
 
-    get _footer() {
-        delete this._footer;
+    get_footer(document) {
         switch (PersonaService.appInfo.ID) {
             case PersonaService.THUNDERBIRD_ID:
-                return this._footer = document.getElementById("status-bar");
+                return document.getElementById("status-bar");
             case PersonaService.FIREFOX_ID:
-                return this._footer = document.getElementById("browser-bottombox");
+                return document.getElementById("browser-bottombox");
             default:
                 throw "unknown application ID " + PersonaService.appInfo.ID;
         }
@@ -175,7 +179,9 @@ var PersonaController = {
      */
     _escapeURLForCSS: function(url) url.replace(/[(),\s'"]/g, "\$&"),
 
-    openURLInTab: function(url) {
+    openURLInTab: function(url, event) {
+        var document = event.currentTarget.ownerDocument;
+        var window = document.defaultView;
         switch (PersonaService.appInfo.ID) {
             case PersonaService.THUNDERBIRD_ID:
                 // Thunderbird's "openTab" implementation for the "contentTab" mode
@@ -244,7 +250,7 @@ var PersonaController = {
                     this._sessionStore.getWindowValue(window, "persona")) {
                     this._applyPersona(JSON.parse(
                         this._sessionStore.getWindowValue(window, "persona")
-                    ));
+                    ), window.document);
                 }
                 break;
             case "personas:persona:changed":
@@ -253,18 +259,18 @@ var PersonaController = {
                     if (this._sessionStore.getWindowValue(window, "persona")) {
                         this._applyPersona(JSON.parse(
                             this._sessionStore.getWindowValue(window, "persona")
-                        ));
+                        ), window.document);
                     } else {
-                        this._applyDefault();
+                        this._applyDefault(window.document);
                     }
                     // Pan-window personas are enabled
                 } else {
                     if (PersonaService.previewingPersona) {
-                        this._applyPersona(PersonaService.previewingPersona);
+                        this._applyPersona(PersonaService.previewingPersona, window.document);
                     } else if (PersonaService.selected == "default") {
-                        this._applyDefault();
+                        this._applyDefault(window.document);
                     } else {
-                        this._applyPersona(PersonaService.currentPersona);
+                        this._applyPersona(PersonaService.currentPersona, window.document);
                     }
                     break;
                 }
@@ -279,7 +285,7 @@ var PersonaController = {
             case "ResetPersona":
                 let doc = aEvent.originalTarget.ownerDocument;
                 if (Services.perms.testPermission(doc.documentURIObject, "install") == Services.perms.ALLOW_ACTION)
-                    this.checkPrivateBrowsing();
+                    this.checkPrivateBrowsing(doc);
                 break;
             case "CheckPersonas":
                 this.onCheckPersonasFromContent(aEvent);
@@ -300,7 +306,15 @@ var PersonaController = {
     //**************************************************************************//
     // Initialization & Destruction
 
-    startUp: function() {
+    startUp: function(window) {
+
+        var document = window.document;
+
+        this.addToolbarButton(window);
+        this.addToolsMenu(window);
+
+        var menuButton = this.get_menuButton(document);
+
         // Set the label for the tooltip that informs users when personas data
         // is unavailable.
         // FIXME: make this a DTD entity rather than a properties string.
@@ -326,7 +340,8 @@ var PersonaController = {
                         observe: function() {
                             Services.obs.removeObserver(this, "sessionstore-windows-restored", false);
                             window.openUILinkIn("http://goo.gl/forms/6E2DiOVPNe", "tab");
-                        }}, "sessionstore-windows-restored", false);
+                        }
+                    }, "sessionstore-windows-restored", false);
                 }
                 this._prefs.set("lastversion", aAddon.version);
             }.bind(this));
@@ -337,23 +352,27 @@ var PersonaController = {
         if (PersonaService.appInfo.ID == PersonaService.FIREFOX_ID) {
             let addonBar = window.document.getElementById("addon-bar");
             if (addonBar) {
-                this._menuButton.setAttribute("hidden", true);
+                menuButton.setAttribute("hidden", true);
 
                 if (!this._prefs.get("toolbarButtonInstalled")) {
-                    this._installToolbarButton(addonBar);
+                    //this._installToolbarButton(addonBar);
                     this._prefs.set("toolbarButtonInstalled", true);
                 }
             }
         }
     },
 
-    shutDown: function() {
+    shutDown: function(window) {
+        var document = window.document;
         document.removeEventListener("SelectPersona", this, false);
         document.removeEventListener("PreviewPersona", this, false);
         document.removeEventListener("ResetPersona", this, false);
         document.removeEventListener("CheckPersonas", this, false);
         document.removeEventListener("AddFavoritePersona", this, false);
         document.removeEventListener("RemoveFavoritePersona", this, false);
+
+        this.removeToolbarButton(window);
+        this.removeToolsMenu(window);
     },
 
     _installToolbarButton: function(aToolbar) {
@@ -385,35 +404,37 @@ var PersonaController = {
     //**************************************************************************//
     // Appearance Updates
 
-    _applyPersona: function(persona) {
+    _applyPersona: function(persona, document) {
+        var header = this.get_header(document);
+        var footer = this.get_footer(document);
 
         // Style header and footer
-        this._header.setAttribute("persona", persona.id);
-        this._footer.setAttribute("persona", persona.id);
+        header.setAttribute("persona", persona.id);
+        footer.setAttribute("persona", persona.id);
 
         // First try to obtain the images from the cache
         let images = PersonaService.getCachedPersonaImages(persona);
         if (images && images.header && images.footer) {
-            this._header.style.backgroundImage = "url(" + images.header + ")";
-            this._footer.style.backgroundImage = "url(" + images.footer + ")";
+            header.style.backgroundImage = "url(" + images.header + ")";
+            footer.style.backgroundImage = "url(" + images.footer + ")";
         }
         // Else set them from their original source
         else {
             // Use the URI module to resolve the possibly relative URI to an absolute one.
             let headerURI = this.URI.get(persona.headerURL || persona.header,
                 null, null);
-            this._header.style.backgroundImage = "url(" + this._escapeURLForCSS(headerURI.spec) + ")";
+            header.style.backgroundImage = "url(" + this._escapeURLForCSS(headerURI.spec) + ")";
             // Use the URI module to resolve the possibly relative URI to an absolute one.
             let footerURI = this.URI.get(persona.footerURL || persona.footer,
                 null, null);
-            this._footer.style.backgroundImage = "url(" + this._escapeURLForCSS(footerURI.spec) + ")";
+            footer.style.backgroundImage = "url(" + this._escapeURLForCSS(footerURI.spec) + ")";
         }
 
         // Style the text color.
         if (this._prefs.get("useTextColor")) {
             // FIXME: fall back on the default text color instead of "black".
             let textColor = persona.textcolor || "black";
-            this._header.style.color = textColor;
+            header.style.color = textColor;
             for (let i = 0; i < document.styleSheets.length; i++) {
                 let styleSheet = document.styleSheets[i];
                 if (styleSheet.href == "chrome://personas/content/overlay.css") {
@@ -518,7 +539,7 @@ var PersonaController = {
                 active = "";
                 inactive = "";
             }
-            this._setTitlebarColors(general, active, inactive);
+            this._setTitlebarColors(general, active, inactive, document);
         }
 
         // Opacity overrides (firefox only)
@@ -555,14 +576,17 @@ var PersonaController = {
 
     },
 
-    _applyDefault: function() {
+    _applyDefault: function(document) {
+        var header = this.get_header(document);
+        var footer = this.get_footer(document);
+
         // Reset the header.
-        this._header.removeAttribute("persona");
-        this._header.style.backgroundImage = "";
+        header.removeAttribute("persona");
+        header.style.backgroundImage = "";
 
         // Reset the footer.
-        this._footer.removeAttribute("persona");
-        this._footer.style.backgroundImage = "";
+        footer.removeAttribute("persona");
+        footer.style.backgroundImage = "";
 
         // Reset the text color.
         for (let i = 0; i < document.styleSheets.length; i++) {
@@ -573,30 +597,33 @@ var PersonaController = {
                 break;
             }
         }
-        this._header.style.color = "";
+        header.style.color = "";
 
         // Reset the titlebar color.
         if (this._prefs.get("useAccentColor")) {
-            this._setTitlebarColors("", "", "");
+            this._setTitlebarColors("", "", "", document);
         }
     },
 
-    _setTitlebarColors: function(general, active, inactive) {
+    _setTitlebarColors: function(general, active, inactive, document) {
+        var window = document.defaultView;
+        var header = this.get_header(document);
+
         // Titlebar colors only have an effect on Mac.
         if (PersonaService.appInfo.OS != "Darwin")
             return;
 
         let changed = false;
 
-        if (general != this._header.getAttribute("titlebarcolor")) {
+        if (general != header.getAttribute("titlebarcolor")) {
             document.documentElement.setAttribute("titlebarcolor", general);
             changed = true;
         }
-        if (active != this._header.getAttribute("activetitlebarcolor")) {
+        if (active != header.getAttribute("activetitlebarcolor")) {
             document.documentElement.setAttribute("activetitlebarcolor", active);
             changed = true;
         }
-        if (inactive != this._header.getAttribute("inactivetitlebarcolor")) {
+        if (inactive != header.getAttribute("inactivetitlebarcolor")) {
             document.documentElement.setAttribute("inactivetitlebarcolor", inactive);
             changed = true;
         }
@@ -625,7 +652,8 @@ var PersonaController = {
      * Checks if the current window is in private browsing mode, and shows
      * an alert warning that personas will not work, if so.
      */
-    checkPrivateBrowsing: function() {
+    checkPrivateBrowsing: function(document) {
+        var window = document.defaultView;
         if (typeof PrivateBrowsingUtils !== "undefined" &&
             PrivateBrowsingUtils.isWindowPrivate(window)) {
 
@@ -660,6 +688,9 @@ var PersonaController = {
      *        the SelectPersona DOM event
      */
     onSelectPersona: PersonaService.wrap(function(event) {
+        var document = event.currentTarget.ownerDocument;
+        var window = document.defaultView;
+
         let node = event.target;
 
         if (!node.hasAttribute("persona"))
@@ -678,11 +709,11 @@ var PersonaController = {
                 // per-window mode. We'll add a new type property when we support
                 // other types of selectable personas, such as "random".
                 case "default":
-                    this._applyDefault();
+                    this._applyDefault(document);
                     this._sessionStore.setWindowValue(window, "persona", "default");
                     break;
                 default:
-                    this._applyPersona(JSON.parse(persona));
+                    this._applyPersona(JSON.parse(persona), document);
                     this._sessionStore.setWindowValue(window, "persona", persona);
                     break;
             }
@@ -708,6 +739,8 @@ var PersonaController = {
     }),
 
     onPreviewPersona: PersonaService.wrap(function(event) {
+        var document = event.currentTarget.ownerDocument;
+        var window = document.defaultView;
         if (!this._prefs.get("previewEnabled"))
             return;
 
@@ -723,10 +756,10 @@ var PersonaController = {
             // onResetPersona reset it.
             switch (persona) {
                 case "default":
-                    this._applyDefault();
+                    this._applyDefault(document);
                     break;
                 default:
-                    this._applyPersona(persona);
+                    this._applyPersona(persona, document);
                     break;
             }
         } else {
@@ -750,6 +783,8 @@ var PersonaController = {
     },
 
     onResetPersona: PersonaService.wrap(function(event) {
+        var document = event.currentTarget.ownerDocument;
+        var window = document.defaultView;
         if (!this._prefs.get("previewEnabled"))
             return;
 
@@ -791,13 +826,15 @@ var PersonaController = {
         event.target.setAttribute("personas", "true");
     }),
 
-    onSelectPreferences: PersonaService.wrap(function() {
+    onSelectPreferences: PersonaService.wrap(function(event) {
+        var document = event.currentTarget.ownerDocument;
+        var window = document.defaultView;
         window.openDialog('chrome://personas/content/preferences.xul', '',
             'chrome,titlebar,toolbar,centerscreen');
     }),
 
-    onEditCustomPersona: PersonaService.wrap(function() {
-        this.openURLInTab("chrome://personas/content/customPersonaEditor.xul");
+    onEditCustomPersona: PersonaService.wrap(function(event) {
+        this.openURLInTab("chrome://personas/content/customPersonaEditor.xul", event);
     }),
 
     /**
@@ -880,46 +917,62 @@ var PersonaController = {
     // Popup Construction
 
     onMenuButtonMouseDown: PersonaService.wrap(function(event) {
+        var document = event.currentTarget.ownerDocument;
+        var menuButton = this.get_menuButton(document);
+        var menuPopup = this.get_menuPopup(document);
+
         // If the menu popup isn't on the menu button, then move the popup
         // onto the button so the popup appears when the user clicks it.
         // We'll move the popup back onto the Personas menu in the Tools menu
         // when the popup hides.
         // FIXME: remove this workaround once bug 461899 is fixed.
-        if (this._menuPopup.parentNode != this._menuButton)
-            this._menuButton.appendChild(this._menuPopup);
+        if (menuPopup.parentNode != menuButton)
+            menuButton.appendChild(menuPopup);
     }),
 
     onToolbarButtonMouseDown: PersonaService.wrap(function(event) {
+        var document = event.currentTarget.ownerDocument;
+        var toolbarButton = this.get_toolbarButton(document);
+        var menuPopup = this.get_menuPopup(document);
+
         // If the menu popup isn't on the toolbar button, then move the popup
         // onto the button so the popup appears when the user clicks it.
         // We'll move the popup back onto the Personas menu in the Tools menu
         // when the popup hides.
         // FIXME: remove this workaround once bug 461899 is fixed.
-        if (this._menuPopup.parentNode != this._toolbarButton)
-            this._toolbarButton.appendChild(this._menuPopup);
+        if (menuPopup.parentNode != toolbarButton)
+            toolbarButton.appendChild(menuPopup);
     }),
 
     onPopupShowing: PersonaService.wrap(function(event) {
-        if (event.target == this._menuPopup)
-            this._rebuildMenu();
+        var document = event.currentTarget.ownerDocument;
+        var menuPopup = this.get_menuPopup(document);
+
+        if (event.target == menuPopup)
+            this._rebuildMenu(document, menuPopup);
 
         return true;
     }),
 
     onPopupHiding: PersonaService.wrap(function(event) {
-        if (event.target == this._menuPopup) {
+        var document = event.currentTarget.ownerDocument;
+        var menuPopup = this.get_menuPopup(document);
+
+        var menu = this.get_menu(document);
+        if (event.target == menuPopup) {
             // If the menu popup isn't on the Personas menu in the Tools menu,
             // then move the popup back onto that menu so the popup appears when
             // the user selects it.  We'll move the popup back onto the menu button
             // in onMenuButtonMouseDown when the user clicks on the menu button.
-            if (this._menuPopup.parentNode != this._menu) {
-                this._menuPopup.parentNode.removeAttribute("open");
-                this._menu.appendChild(this._menuPopup);
+            if (menuPopup.parentNode != menu) {
+                menuPopup.parentNode.removeAttribute("open");
+                menu.appendChild(menuPopup);
             }
         }
     }),
 
-    _rebuildMenu: function() {
+    _rebuildMenu: function(document, menuPopup) {
+
         // If we don't have personas data, we won't be able to fully build the menu,
         // and we'll display a message to that effect in tooltips over the parts
         // of the menu that are data-dependent (the Most Popular, New, and
@@ -934,7 +987,7 @@ var PersonaController = {
 
         // Remove everything between the two separators.
         while (openingSeparator.nextSibling && openingSeparator.nextSibling != closingSeparator)
-            this._menuPopup.removeChild(openingSeparator.nextSibling);
+            menuPopup.removeChild(openingSeparator.nextSibling);
 
         // Update the item that identifies the current persona.
         let personaStatus = document.getElementById("persona-current");
@@ -959,7 +1012,7 @@ var PersonaController = {
         let personaStatusDetail = document.getElementById("persona-current-view-detail");
         personaStatusDetail.setAttribute("disabled", PersonaService.currentPersona.detailURL ? "false" : "true");
         personaStatusDetail.setAttribute("label", this._strings.get("viewDetail"));
-        personaStatusDetail.setAttribute("oncommand", "PersonaController.openURLInTab(this.getAttribute('href'))");
+        personaStatusDetail.addEventListener("command", PersonaController.viewDetailListener, true);
         personaStatusDetail.setAttribute("href", PersonaService.currentPersona.detailURL);
 
         let personaStatusDesigner = document.getElementById("persona-current-view-designer");
@@ -974,7 +1027,7 @@ var PersonaController = {
             personaStatusDesigner.removeAttribute("collapsed");
             let designerLabel = persona.author || persona.username;
             personaStatusDesigner.setAttribute("label", this._strings.get("viewDesigner", [designerLabel]));
-            personaStatusDesigner.setAttribute("oncommand", "PersonaController.openURLInTab(this.getAttribute('href'))");
+            personaStatusDesigner.addEventListener("command", PersonaController.viewDesignerListener, true);
             personaStatusDesigner.setAttribute("href", persona.authorURL);
         }
 
@@ -997,13 +1050,13 @@ var PersonaController = {
             } else if (!PersonaService.favorites) {
                 let item = popupmenu.appendChild(document.createElement("menuitem"));
                 item.setAttribute("label", this._strings.get("favoritesSignIn"));
-                item.setAttribute("oncommand", "PersonaController.openURLInTab(this.getAttribute('href'))");
+                item.addEventListener("command", PersonaController.favoritesSignInListener, true);
                 item.setAttribute("href", PersonaService.getURL("favorites-browse"));
             } else {
                 let favorites = PersonaService.favorites;
                 if (favorites.length) {
                     for each(let persona in favorites)
-                    popupmenu.appendChild(this._createPersonaItem(persona));
+                    popupmenu.appendChild(this._createPersonaItem(persona, document));
                     popupmenu.appendChild(document.createElement("menuseparator"));
 
                     // Disable random from favorites menu item if per-window
@@ -1014,18 +1067,18 @@ var PersonaController = {
                         // item.setAttribute("type", "checkbox");
                         item.setAttribute("checked", (PersonaService.selected == "randomFavorite"));
                         item.setAttribute("autocheck", "false");
-                        item.setAttribute("oncommand", "PersonaController.toggleFavoritesRotation()");
+                        item.addEventListener("command", PersonaController.useRandomPersonaInListener, true);
                     }
                 }
 
                 // go to my favorites menu item
                 let item = popupmenu.appendChild(document.createElement("menuitem"));
                 item.setAttribute("label", this._strings.get("favoritesGoTo"));
-                item.setAttribute("oncommand", "PersonaController.openURLInTab(this.getAttribute('href'))");
+                item.addEventListener("command", PersonaController.favoritesGoToListener, true);
                 item.setAttribute("href", PersonaService.getURL("favorites-browse"));
             }
 
-            this._menuPopup.insertBefore(menu, closingSeparator);
+            menuPopup.insertBefore(menu, closingSeparator);
         }
 
         // Create the "Recently Selected" menu.
@@ -1036,12 +1089,12 @@ var PersonaController = {
 
             let recentPersonas = PersonaService.getRecentPersonas();
             for each(let persona in recentPersonas) {
-                popupmenu.appendChild(this._createPersonaItem(persona));
+                popupmenu.appendChild(this._createPersonaItem(persona, document));
             }
 
             menu.appendChild(popupmenu);
-            this._menuPopup.insertBefore(menu, closingSeparator);
-            this._menuPopup.insertBefore(document.createElement("menuseparator"), closingSeparator);
+            menuPopup.insertBefore(menu, closingSeparator);
+            menuPopup.insertBefore(document.createElement("menuseparator"), closingSeparator);
         }
 
         // Create the Featured menu.
@@ -1052,20 +1105,20 @@ var PersonaController = {
             if (PersonaService.personas) {
                 let popupmenu = document.createElement("menupopup");
                 for each(let persona in PersonaService.personas.featured)
-                popupmenu.appendChild(this._createPersonaItem(persona));
+                popupmenu.appendChild(this._createPersonaItem(persona, document));
 
                 // Create an item that picks a random persona from the category.
                 // Disable random from category menu item if per-window
                 // personas are enabled.
                 if (!this._prefs.get("perwindow")) {
                     popupmenu.appendChild(document.createElement("menuseparator"));
-                    popupmenu.appendChild(this._createRandomItem(this._strings.get("featured"), "featured"));
+                    popupmenu.appendChild(this._createRandomItem(this._strings.get("featured"), "featured", document));
                 }
 
                 // Create an item that links to the gallery for this category.
                 popupmenu.appendChild(
                     this._createViewMoreItem(this._strings.get("featured"),
-                        "featured"));
+                        "featured", document));
 
                 menu.appendChild(popupmenu);
             } else {
@@ -1073,7 +1126,7 @@ var PersonaController = {
                 menu.setAttribute("tooltip", "personasDataUnavailableTooltip");
             }
 
-            this._menuPopup.insertBefore(menu, closingSeparator);
+            menuPopup.insertBefore(menu, closingSeparator);
         }
 
         // Update the Custom menu. Custom personas unavailable in per-window
@@ -1087,7 +1140,7 @@ var PersonaController = {
         }
     },
 
-    _createPersonaItem: function(persona) {
+    _createPersonaItem: function(persona, document) {
         let item = document.createElement("menuitem");
         let theme = PersonaService.getPersonaJSON(persona);
 
@@ -1106,7 +1159,9 @@ var PersonaController = {
             PersonaService.currentPersona &&
             PersonaService.currentPersona.id == persona.id));
         item.setAttribute("autocheck", "false");
-        item.setAttribute("oncommand", "PersonaController.onSelectPersona(event)");
+        item.addEventListener("command", function(event) {
+            PersonaController.onSelectPersona(event)
+        }, true);
         item.setAttribute("recent", persona.recent ? "true" : "false");
         item.setAttribute("persona", JSON.stringify(theme));
         item.addEventListener("DOMMenuItemActive", function(evt) {
@@ -1119,12 +1174,15 @@ var PersonaController = {
         return item;
     },
 
-    _createViewMoreItem: function(category, categoryId) {
+    _createViewMoreItem: function(category, categoryId, document) {
+
         let item = document.createElement("menuitem");
 
         item.setAttribute("class", "menuitem-iconic");
         item.setAttribute("label", this._strings.get("viewMoreFrom", [category]));
-        item.setAttribute("oncommand", "PersonaController.openURLInTab(this.getAttribute('href'))");
+        item.addEventListener("command", function(event) {
+            PersonaController.openURLInTab(this.getAttribute('href'), event)
+        }, true);
 
         if (categoryId == "featured") {
             item.setAttribute("href", PersonaService.getURL("browse", {
@@ -1135,12 +1193,15 @@ var PersonaController = {
         return item;
     },
 
-    _createRandomItem: function(aCategoryName, aCategory) {
+    _createRandomItem: function(aCategoryName, aCategory, document) {
+
         let item = document.createElement("menuitem");
 
         item.setAttribute("class", "menuitem-iconic");
         item.setAttribute("label", this._strings.get("useRandomPersona", [aCategoryName]));
-        item.setAttribute("oncommand", "PersonaController.onSelectPersona(event)");
+        item.addEventListener("command", function(event) {
+            PersonaController.onSelectPersona(event)
+        }, true);
         item.setAttribute("persona", "random");
         item.setAttribute("category", aCategory || aCategoryName);
 
@@ -1153,7 +1214,233 @@ var PersonaController = {
         } else {
             PersonaService.selected = "current";
         }
+    },
+
+    widgetCreated: false,
+    viewDetailListener: function(event) {
+        PersonaController.openURLInTab(this.getAttribute('href'), event);
+    },
+    viewDesignerListener: function(event) {
+        PersonaController.openURLInTab(this.getAttribute('href'), event);
+    },
+    favoritesSignInListener: function(event) {
+        PersonaController.openURLInTab(this.getAttribute('href'), event);
+    },
+    useRandomPersonaInListener: function(event) {
+        PersonaController.toggleFavoritesRotation();
+    },
+    favoritesGoToListener: function(event) {
+        PersonaController.openURLInTab(this.getAttribute('href'), event);
+    },
+    dtd: function(entity_string) {
+        var path = "chrome://personas/locale/personas_bootstrap.properties";
+        var overlayProperties = Cc["@mozilla.org/intl/stringbundle;1"].getService(Ci.nsIStringBundleService).createBundle(path);
+        return overlayProperties.GetStringFromName(entity_string.replace(/^(&)/, "").replace(/(;)$/, ""));
+    },
+    createToolbarButton: function(document) {
+        var toolbarbutton = document.createElement('toolbarbutton');
+        //toolbarbutton.setAttribute("onmousedown", "PersonaController.onToolbarButtonMouseDown();");
+        toolbarbutton.addEventListener("mousedown", function(event) {
+            var window = event.currentTarget.ownerDocument.defaultView;
+            PersonaController.onToolbarButtonMouseDown(event);
+        }, true);
+        toolbarbutton.setAttribute("label", this.dtd("&personas_app_title;"));
+        toolbarbutton.setAttribute("type", "menu");
+        toolbarbutton.setAttribute("id", "personas-toolbar-button"); //personas-toolbar-button
+        toolbarbutton.setAttribute("class", (PersonaService.appInfo.ID != PersonaController.SEAMONKEY_ID) ? "toolbarbutton-1" : "toolbarbutton-1 seamonkey");
+        return toolbarbutton;
+    },
+    addToolbarButton: function(window) {
+        var document = window.document;
+        if (window.CustomizableUI) {
+            if (!PersonaController.widgetCreated) {
+                window.CustomizableUI.createWidget({
+                    type: 'custom',
+                    defaultArea: window.CustomizableUI.AREA_NAVBAR,
+                    id: "personas-toolbar-button",
+                    onBuild: function(aDocument) {
+                        return PersonaController.createToolbarButton(aDocument);
+                    }
+                });
+            }
+            PersonaController.widgetCreated = true;
+            if (!PersonaController._prefs.get("tbplaced")) PersonaController.placeToolbarButton(window);
+        } else {
+            var toolbarbutton = PersonaController.createToolbarButton(document);
+            (document.getElementById("navigator-toolbox") || document.getElementById("mail-toolbox")).palette.appendChild(toolbarbutton);
+            //PersonaController.placeToolbarButton(window,toolbarbutton);
+            if (PersonaService.appInfo.ID != "{8de7fcbb-c55c-4fbe-bfc5-fc555c87dbc4}") PersonaController.placeToolbarButton(window, toolbarbutton);
+            else {
+                window.setTimeout(function() {
+                    PersonaController.placeToolbarButton(window, toolbarbutton);
+                }, 1000)
+            }
+        }
+        window.addEventListener("aftercustomization", PersonaController.afterCustomization, false);
+    },
+    removeToolbarButton: function(window) {
+        if (window.CustomizableUI) {
+            window.CustomizableUI.destroyWidget("personas-toolbar-button");
+        } else {
+            var document = window.document;
+            var buttonId = "personas-toolbar-button";
+            var button = document.getElementById(buttonId);
+            button.parentNode.removeChild(button);
+        }
+        window.removeEventListener("aftercustomization", PersonaController.afterCustomization, false);
+        PersonaController.widgetCreated = false;
+    },
+    placeToolbarButton: function(window, toolbarbutton) {
+        if (!PersonaController._prefs.get("tbinsert")) return;
+        var document = window.document;
+        if (window.CustomizableUI) {
+            window.CustomizableUI.addWidgetToArea("personas-toolbar-button", window.CustomizableUI.AREA_NAVBAR, 5);
+            PersonaController._prefs.set("tbplaced", true);
+        } else {
+            var toolbar = document.querySelector("[currentset^='" + toolbarbutton.id + ",'],[currentset*='," + toolbarbutton.id +
+                ",'],[currentset$='," + toolbarbutton.id + "']");
+            if (toolbar) {
+                var currentset = toolbar.getAttribute("currentset").split(",");
+                var i = currentset.indexOf(toolbarbutton.id) + 1;
+                var before = null;
+                while (i < currentset.length && !(before = document.getElementById(currentset[i]))) i++;
+                toolbar.insertItem(toolbarbutton.id, before, null, false);
+            } else {
+                var navbar = (document.getElementById("nav-bar") || document.getElementById("mail-bar3") || document.getElementById("msgToolbar"));
+                navbar.insertItem(toolbarbutton.id, null, null, false);
+            }
+            if (!document.getElementById(toolbarbutton.id))(toolbar || navbar).insertItem(toolbarbutton.id, null, null, false);
+        }
+    },
+    afterCustomization: function(event) {
+        var window = event.currentTarget;
+        var document = window.document;
+        var ythdprefsinstance = Components.classes["@mozilla.org/preferences-service;1"].getService(Components.interfaces.nsIPrefBranch);
+        if (!document.getElementById("personas-toolbar-button") || document.getElementById("personas-toolbar-button").parentNode.id == "BrowserToolbarPalette") ythdprefsinstance.setBoolPref("extensions.personas.tbinsert", false);
+        else ythdprefsinstance.setBoolPref("extensions.personas.tbinsert", true);
+    },
+    addToolsMenu: function(window) {
+        var document = window.document;
+        var windowtype = window.document.documentElement.getAttribute("windowtype");
+
+        var tooltip = document.createElement('tooltip');
+        tooltip.setAttribute("id", "personasDataUnavailableTooltip");
+        document.getElementById("mainPopupSet").appendChild(tooltip);
+
+        var personasmenu = document.createElement('menu');
+        if (windowtype == "navigator:browser") personasmenu.setAttribute("insertafter", "menu_openAddons");
+        else if (windowtype == "mail:3pane") personasmenu.setAttribute("insertafter", "addonsManager");
+        else personasmenu.setAttribute("insertafter", "menu_openAddons");
+        personasmenu.setAttribute("label", this.dtd("&personas_app_title;"));
+        personasmenu.setAttribute("class", "menu-iconic");
+        personasmenu.setAttribute("id", "personas-menu");
+
+        var personasselectormenu = document.createElement('menupopup');
+        personasselectormenu.addEventListener("popuphiding", function(event) {
+            PersonaController.onPopupHiding(event)
+        }, true);
+        personasselectormenu.addEventListener("popupshowing", function(event) {
+            return PersonaController.onPopupShowing(event)
+        }, true);
+        personasselectormenu.setAttribute("id", "personas-selector-menu");
+        personasmenu.appendChild(personasselectormenu);
+
+        var personacurrent = document.createElement('menu');
+        personacurrent.setAttribute("class", "menu-iconic");
+        personacurrent.setAttribute("id", "persona-current");
+        personasselectormenu.appendChild(personacurrent);
+
+        var personacurrentcontextmenu = document.createElement('menupopup');
+        personacurrentcontextmenu.setAttribute("id", "persona-current-context-menu");
+        personacurrent.appendChild(personacurrentcontextmenu);
+
+        var personacurrentviewdetail = document.createElement('menuitem');
+        personacurrentviewdetail.setAttribute("id", "persona-current-view-detail");
+        personacurrentcontextmenu.appendChild(personacurrentviewdetail);
+
+        var personacurrentviewdesigner = document.createElement('menuitem');
+        personacurrentviewdesigner.setAttribute("id", "persona-current-view-designer");
+        personacurrentcontextmenu.appendChild(personacurrentviewdesigner);
+
+        var personasopeningseparator = document.createElement('menuseparator');
+        personasopeningseparator.setAttribute("id", "personasOpeningSeparator");
+        personasselectormenu.appendChild(personasopeningseparator);
+
+        var personasclosingseparator = document.createElement('menuseparator');
+        personasclosingseparator.setAttribute("hidden", "true");
+        personasclosingseparator.setAttribute("id", "personasClosingSeparator");
+        personasselectormenu.appendChild(personasclosingseparator);
+
+        var personaspluscustommenu = document.createElement('menu');
+        personaspluscustommenu.setAttribute("id", "personas-plus-custom-menu");
+        personasselectormenu.appendChild(personaspluscustommenu);
+
+        var personaspluscustomcontextmenu = document.createElement('menupopup');
+        personaspluscustomcontextmenu.setAttribute("id", "personas-plus-custom-context-menu");
+        personaspluscustommenu.appendChild(personaspluscustomcontextmenu);
+
+        var personaspluscustommenuapply = document.createElement('menuitem');
+        personaspluscustommenuapply.addEventListener("command", function(event) {
+            PersonaController.onSelectPersona(event)
+        }, true);
+        personaspluscustommenuapply.setAttribute("persona", "custom");
+        personaspluscustommenuapply.setAttribute("label", this.dtd("&contextApply.label;"));
+        personaspluscustommenuapply.setAttribute("id", "personas-plus-custom-menu-apply");
+        personaspluscustomcontextmenu.appendChild(personaspluscustommenuapply);
+
+        var menuitem = document.createElement('menuitem');
+        menuitem.addEventListener("command", function(event) {
+            PersonaController.onEditCustomPersona(event)
+        }, true);
+        menuitem.setAttribute("label", this.dtd("&contextEdit.label;"));
+        personaspluscustomcontextmenu.appendChild(menuitem);
+
+        var menuseparator = document.createElement('menuseparator');
+        personasselectormenu.appendChild(menuseparator);
+
+        var defaultpersona = document.createElement('menuitem');
+        defaultpersona.addEventListener("command", function(event) {
+            PersonaController.onSelectPersona(event)
+        }, true);
+        defaultpersona.setAttribute("autocheck", "false");
+        defaultpersona.setAttribute("type", "checkbox");
+        defaultpersona.setAttribute("persona", "default");
+        defaultpersona.setAttribute("label", this.dtd("&useDefaultPersona.label;"));
+        defaultpersona.setAttribute("id", "defaultPersona");
+        personasselectormenu.appendChild(defaultpersona);
+
+        var menuseparator_0 = document.createElement('menuseparator');
+        personasselectormenu.appendChild(menuseparator_0);
+
+        var menuitem_0 = document.createElement('menuitem');
+        menuitem_0.addEventListener("command", function(event) {
+            PersonaController.onSelectPreferences(event)
+        }, true);
+        menuitem_0.setAttribute("label", this.dtd("&preferences.label;"));
+        personasselectormenu.appendChild(menuitem_0);
+
+        (document.getElementById("menu_ToolsPopup") || document.getElementById("taskPopup")).appendChild(personasmenu);
+
+        var personasselectorbutton = document.createElement('statusbarpanel');
+        personasselectorbutton.setAttribute("id", "personas-selector-button");
+        personasselectorbutton.addEventListener("mousedown", function(event) {
+            PersonaController.onMenuButtonMouseDown(event)
+        }, true);
+        personasselectorbutton.setAttribute("insertbefore", "statusbar-display");
+        if (windowtype == "navigator:browser") personasselectorbutton.setAttribute("insertbefore", "statusbar-display");
+        else if (windowtype == "mail:3pane") personasselectorbutton.setAttribute("insertbefore", "addonsManager");
+        else personasselectorbutton.setAttribute("insertbefore", "statusbar-display");
+        personasselectorbutton.setAttribute("class", "statusbarpanel-menu-iconic");
+        if (document.getElementById("status-bar")) document.getElementById("status-bar").appendChild(personasselectorbutton);
+
+    },
+    removeToolsMenu: function(window) {
+        var document = window.document;
+        document.getElementById("personasDataUnavailableTooltip").parentNode.removeChild(document.getElementById("personasDataUnavailableTooltip"));
+        document.getElementById("personas-menu").parentNode.removeChild(document.getElementById("personas-menu"));
+        document.getElementById("personas-selector-button").parentNode.removeChild(document.getElementById("personas-selector-button"));
     }
+
 };
 
 // Import generic modules into the persona controller rather than
@@ -1170,10 +1457,3 @@ Cu.import("resource://personas/modules/URI.js", PersonaController);
 try {
     Cu.import("resource://gre/modules/LightweightThemeManager.jsm", PersonaController);
 } catch (e) {}
-
-window.addEventListener("load", PersonaService.wrap(function(e) {
-    PersonaController.startUp(e)
-}), false);
-window.addEventListener("unload", PersonaService.wrap(function(e) {
-    PersonaController.shutDown(e)
-}), false);
\ No newline at end of file

-- 
Alioth's /usr/local/bin/git-commit-notice on /srv/git.debian.org/git/pkg-mozext/personasplus.git



More information about the Pkg-mozext-commits mailing list