[Pkg-mozext-commits] [stylish] 01/05: Imported Upstream version 1.4.0

Dmitry Smirnov onlyjob at moszumanska.debian.org
Mon Feb 10 15:53:42 UTC 2014


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

onlyjob pushed a commit to branch master
in repository stylish.

commit 2babb8e
Author: Dmitry Smirnov <onlyjob at member.fsf.org>
Date:   Wed Dec 4 15:30:43 2013

    Imported Upstream version 1.4.0
---
 chrome.manifest                 |   9 +-
 components/stylishStyle.js      |  24 ++--
 content/common.js               | 275 ++++++++++++++++++++++++++++++++++++++++
 content/edit.js                 |  29 +++--
 content/install-overlay.js      |  84 +-----------
 content/install.js              |  12 +-
 content/install.xul             |   1 +
 content/manage-addons-fx4.js    |  12 ++
 content/manage-addons-fx4.xul   |   7 +-
 content/manage.html             | 116 ++++++++++++++++-
 content/overlay.js              |  15 +--
 idl/stylishStyle.idl            |   7 +
 install.rdf                     |  12 +-
 locale/cs/manage.dtd            |   1 +
 locale/cs/manage.properties     |   3 +
 locale/da/manage.dtd            |   1 +
 locale/da/manage.properties     |   3 +
 locale/de/manage.dtd            |   1 +
 locale/de/manage.properties     |   3 +
 locale/en-GB/manage.dtd         |   1 +
 locale/en-GB/manage.properties  |   3 +
 locale/en-US/manage.dtd         |   1 +
 locale/en-US/manage.properties  |   3 +
 locale/es-AR/edit.dtd           |   4 +-
 locale/es-AR/edit.properties    |   4 +-
 locale/es-AR/extensions.dtd     |  82 ++++++------
 locale/es-AR/install.dtd        |   2 +-
 locale/es-AR/install.properties |   8 +-
 locale/es-AR/manage.dtd         |   5 +-
 locale/es-AR/manage.properties  |   5 +-
 locale/es-AR/overlay.dtd        |   8 +-
 locale/es-AR/overlay.properties |   6 +-
 locale/es-ES/manage.dtd         |   1 +
 locale/es-ES/manage.properties  |   3 +
 locale/et-EE/manage.dtd         |   1 +
 locale/et-EE/manage.properties  |   3 +
 locale/fi/extensions.dtd        |   2 +-
 locale/fi/manage.dtd            |   1 +
 locale/fi/manage.properties     |   5 +-
 locale/fi/overlay.properties    |   6 +-
 locale/fr/manage.dtd            |   1 +
 locale/fr/manage.properties     |   3 +
 locale/he-IL/common.properties  |  10 --
 locale/he-IL/domi.dtd           |   1 -
 locale/he-IL/edit.dtd           |  24 ----
 locale/he-IL/edit.properties    |   7 -
 locale/he-IL/extensions.dtd     | 160 -----------------------
 locale/he-IL/install.dtd        |   8 --
 locale/he-IL/install.properties |   8 --
 locale/he-IL/manage.dtd         |  18 ---
 locale/he-IL/manage.properties  |  21 ---
 locale/he-IL/overlay.dtd        |  12 --
 locale/he-IL/overlay.properties |  10 --
 locale/{he-IL => he}/common.dtd |   2 +-
 locale/he/common.properties     |  10 ++
 locale/he/domi.dtd              |   1 +
 locale/he/edit.dtd              |  24 ++++
 locale/he/edit.properties       |   7 +
 locale/he/extensions.dtd        | 160 +++++++++++++++++++++++
 locale/he/install.dtd           |   8 ++
 locale/he/install.properties    |   8 ++
 locale/he/manage.dtd            |  19 +++
 locale/he/manage.properties     |  24 ++++
 locale/he/overlay.dtd           |  12 ++
 locale/he/overlay.properties    |  10 ++
 locale/hu-HU/manage.dtd         |   1 +
 locale/hu-HU/manage.properties  |   3 +
 locale/it/manage.dtd            |   1 +
 locale/it/manage.properties     |   3 +
 locale/ja/edit.properties       |   2 +-
 locale/ja/manage.dtd            |   1 +
 locale/ja/manage.properties     |   3 +
 locale/ko-KR/extensions.dtd     |   2 +-
 locale/ko-KR/manage.dtd         |   1 +
 locale/ko-KR/manage.properties  |   3 +
 locale/lt/manage.dtd            |   1 +
 locale/lt/manage.properties     |   3 +
 locale/nl/manage.dtd            |   1 +
 locale/nl/manage.properties     |   3 +
 locale/pl-PL/manage.dtd         |   1 +
 locale/pl-PL/manage.properties  |   3 +
 locale/pt-BR/common.properties  |   2 +-
 locale/pt-BR/edit.properties    |   2 +-
 locale/pt-BR/extensions.dtd     |  78 ++++++------
 locale/pt-BR/manage.dtd         |   1 +
 locale/pt-BR/manage.properties  |   3 +
 locale/pt-BR/overlay.properties |  10 +-
 locale/ro-RO/manage.dtd         |   1 +
 locale/ro-RO/manage.properties  |   3 +
 locale/ru-RU/manage.dtd         |   1 +
 locale/ru-RU/manage.properties  |   3 +
 locale/sr/manage.dtd            |   1 +
 locale/sr/manage.properties     |   3 +
 locale/sv-SE/common.properties  |   2 +-
 locale/sv-SE/manage.dtd         |   1 +
 locale/sv-SE/manage.properties  |   3 +
 locale/uk/manage.dtd            |   1 +
 locale/uk/manage.properties     |   3 +
 locale/vi/manage.dtd            |   1 +
 locale/vi/manage.properties     |   3 +
 locale/zh-CN/manage.dtd         |   1 +
 locale/zh-CN/manage.properties  |   3 +
 locale/zh-TW/common.properties  |   4 +-
 locale/zh-TW/manage.dtd         |   1 +
 locale/zh-TW/manage.properties  |   3 +
 skin/manage-addons-fx11.css     |   3 +
 skin/manage-addons-fx4.css      |   8 ++
 107 files changed, 995 insertions(+), 519 deletions(-)

diff --git a/chrome.manifest b/chrome.manifest
index 1bd33f8..3579f8c 100644
--- a/chrome.manifest
+++ b/chrome.manifest
@@ -19,7 +19,7 @@ locale	stylish	es-ES	locale/es-ES/
 locale	stylish	et-EE	locale/et-EE/
 locale	stylish	fi	locale/fi/
 locale	stylish	fr	locale/fr/
-locale	stylish	he-IL	locale/he-IL/
+locale	stylish	he	locale/he/
 locale	stylish	hu-HU	locale/hu-HU/
 locale	stylish	it	locale/it/
 locale	stylish	ja	locale/ja/
@@ -73,6 +73,13 @@ style	chrome://mozapps/content/extensions/extensions.xul	chrome://stylish/skin/m
 style	chrome://mozapps/content/extensions/extensions.xul	chrome://stylish/skin/manage-addons-fx6.css 	application={3550f703-e582-4d05-9a08-453d09bdfdc6}	appversion>=6.0a1
 style	chrome://mozapps/content/extensions/extensions.xul	chrome://stylish/skin/manage-addons-fx6.css 	application={92650c4d-4b8e-4d2a-b7eb-24ecf4f6b63a}	appversion>=2.3
 
+style	about:addons	chrome://stylish/skin/manage-addons-fx11.css 	application={ec8030f7-c20a-464f-9b0e-13a3a9e97384}	appversion>=11
+style	about:addons	chrome://stylish/skin/manage-addons-fx11.css 	application={3550f703-e582-4d05-9a08-453d09bdfdc6}	appversion>=11
+style	about:addons	chrome://stylish/skin/manage-addons-fx11.css 	application={92650c4d-4b8e-4d2a-b7eb-24ecf4f6b63a}	appversion>=2.8
+style	chrome://mozapps/content/extensions/extensions.xul	chrome://stylish/skin/manage-addons-fx11.css 	application={ec8030f7-c20a-464f-9b0e-13a3a9e97384}	appversion>=11
+style	chrome://mozapps/content/extensions/extensions.xul	chrome://stylish/skin/manage-addons-fx11.css 	application={3550f703-e582-4d05-9a08-453d09bdfdc6}	appversion>=11
+style	chrome://mozapps/content/extensions/extensions.xul	chrome://stylish/skin/manage-addons-fx11.css 	application={92650c4d-4b8e-4d2a-b7eb-24ecf4f6b63a}	appversion>=2.8
+
 # fennec
 override chrome://stylish/content/overlay-fx4.xul chrome://stylish/content/overlay-mobile.xul	application={aa3c5121-dab2-40e2-81ca-7ea25febc110}
 override chrome://stylish/content/manage-standalone.xul chrome://stylish/content/manage.html	application={aa3c5121-dab2-40e2-81ca-7ea25febc110}
diff --git a/components/stylishStyle.js b/components/stylishStyle.js
index cf81739..b5b1dda 100644
--- a/components/stylishStyle.js
+++ b/components/stylishStyle.js
@@ -426,14 +426,14 @@ Style.prototype = {
 	},
 
 	checkForUpdates: function(observer) {
+		var that = this;
+		
 		var observerService = Components.classes["@mozilla.org/observer-service;1"].getService(Components.interfaces.nsIObserverService);
-		observerService.notifyObservers(this, "stylish-style-update-check-start", null);
+		observerService.notifyObservers(that, "stylish-style-update-check-start", null);
 		if (observer) {
-			observer.observe(this, "stylish-style-update-check-start", null);
+			observer.observe(that, "stylish-style-update-check-start", null);
 		}
 
-		var that = this;
-
 		function notifyDone(result) {
 			observerService.notifyObservers(that, "stylish-style-update-check-done", result);
 			if (observer) {
@@ -903,11 +903,17 @@ Style.prototype = {
 		request.QueryInterface(Components.interfaces.nsIDOMEventTarget);
 		request.addEventListener("readystatechange", function(event) {
 			if (request.readyState == 4) {
-				if ((request.status == 200 || (request.status == 0 && url.indexOf("data:") == 0)) && request.responseText) {
-					var contentType = request.getResponseHeader("Content-type");
-					// get rid of charset
-					if (contentType != null && contentType.indexOf(";") > -1) {
-						contentType = contentType.split(";")[0];
+				if ((request.status == 200 || (request.status == 0 && (url.indexOf("data:") == 0 || url.indexOf("file:") == 0))) && request.responseText) {
+					var contentType;
+					if (url.indexOf("file:") == 0) {
+						// assume a local file is CSS
+						contentType = "text/css";
+					} else {
+						contentType = request.getResponseHeader("Content-type");
+						// get rid of charset
+						if (contentType != null && contentType.indexOf(";") > -1) {
+							contentType = contentType.split(";")[0];
+						}
 					}
 					successCallback(request.responseText, contentType);
 				} else {
diff --git a/content/common.js b/content/common.js
index aa65b5b..d9aba6d 100644
--- a/content/common.js
+++ b/content/common.js
@@ -31,6 +31,8 @@ var stylishCommon = {
 		var appInfo = Components.classes["@mozilla.org/xre/app-info;1"].getService(Components.interfaces.nsIXULAppInfo);
 		return appInfo.name;
 	},
+	
+	isXULAvailable: Components.classes["@mozilla.org/xre/app-info;1"].getService(Components.interfaces.nsIXULRuntime).widgetToolkit.toLowerCase() != "android",
 
 	deleteWithPrompt: function(style) {
 		const STRINGS = document.getElementById("stylish-common-strings");
@@ -99,8 +101,281 @@ var stylishCommon = {
 		var style = service.find(id, service.REGISTER_STYLE_ON_CHANGE | service.CALCULATE_META);
 		return stylishCommon.openEditForStyle(style);
 	},
+	
+	// Installing from URLs, with prompting and UI and such. startedCallback is called after the user has entered their URLs,
+	// endedCallback is called when the process is done.
+	startInstallFromUrls: function(startedCallback, endedCallback) {
+		const STRINGS = Components.classes["@mozilla.org/intl/stringbundle;1"].getService(Components.interfaces.nsIStringBundleService).createBundle("chrome://stylish/locale/manage.properties")
+		var promptService = Components.classes["@mozilla.org/embedcomp/prompt-service;1"].getService(Components.interfaces.nsIPromptService);
+		var o = {value: ""};
+		if (!promptService.prompt(window, STRINGS.GetStringFromName("installfromurlsprompttitle"), STRINGS.GetStringFromName("installfromurlsprompt"), o, null, {})) {
+			return;
+		}
+		var urls = o.value.split(/\s+/);
+		if (urls.length == 0) {
+			return;
+		}
+		
+		if (startedCallback) {
+			startedCallback();
+		}
+		
+		// Run through each one, one at a time, keeping track of successes or failures
+		var currentIndex = 0;
+		var results = {successes: [], failures: []};
+		function processResult(result) {
+			// We'll consider "cancelled" and "existing" as success, so only "failure" is a failure.
+			(result != "failure" ? results.successes : results.failures).push(urls[currentIndex]);
+			currentIndex++;
+			if (currentIndex < urls.length) {
+				stylishCommon.installFromUrl(urls[currentIndex], processResult);
+			} else {
+				stylishCommon.endInstallFromUrls(results, endedCallback);
+			}
+		}
+		stylishCommon.installFromUrl(urls[currentIndex], processResult);
+	},
+	
+	endInstallFromUrls: function(results, endedCallback) {
+		if (endedCallback) {
+			endedCallback();
+		}
+		if (results.failures.length > 0) {
+			const STRINGS = Components.classes["@mozilla.org/intl/stringbundle;1"].getService(Components.interfaces.nsIStringBundleService).createBundle("chrome://stylish/locale/manage.properties")
+			var promptService = Components.classes["@mozilla.org/embedcomp/prompt-service;1"].getService(Components.interfaces.nsIPromptService);
+			promptService.alert(window, STRINGS.GetStringFromName("installfromurlsprompttitle"), STRINGS.formatStringFromName("installfromurlserror", [results.failures.join(", ")], 1));
+		}
+	},
+
+	installFromUrl: function(url, callback) {
+		// Valid URLs can retrived a CSS file or a HTML file. We'll try HTML first, and if the
+		// content type comes back as CSS, we'll do that instead. These need to be separate requests
+		// because setting responseType to document (for HTML parsing) prevents access to responseText.
+		stylishCommon.installFromUrlHtml(url, function(result) {
+			if (result == "css") {
+				stylishCommon.installFromUrlCss(url, callback);
+				return;
+			}
+			callback(result);
+		});
+	},
+
+	installFromUrlHtml: function(url, callback) {
+		// Assume a local file is a CSS file.
+		if (/^file:.*/i.test(url)) {
+			callback("css");
+			return;
+		}
+		var xhr = new XMLHttpRequest();
+		xhr.onload = function() {
+			if (this.status != 200) {
+				Components.utils.reportError("Stylish install from URL '" + url + "' resulted in HTTP error code " + this.status + ".");
+				callback("failure");
+				return;
+			}
+			var contentType = this.getResponseHeader("Content-Type");
+			if (contentType.indexOf("text/css") == 0) {
+				callback("css");
+				return;
+			}
+			if (contentType.indexOf("text/html") == 0) {
+				stylishCommon.installFromSite(this.responseXML, callback);
+				return;
+			}
+			Components.utils.reportError("Stylish install from URL '" + url + "' resulted in unknown content type " + contentType + ".");
+			callback("failure");
+		}
+		try {
+			xhr.open("GET", url);
+		} catch (ex) {
+			// invalid url
+			Components.utils.reportError("Stylish install from URL '" + url + "' failed - not a valid URL.");
+			callback("failure");
+			return;
+		}
+		xhr.responseType = "document";
+		xhr.send();
+	},
+
+	installFromUrlCss: function(url, callback) {
+		var xhr = new XMLHttpRequest();
+		xhr.onload = function() {
+			if (xhr.status >= 400) {
+				Components.utils.reportError("Stylish install from URL '" + url + "' resulted in HTTP error code " + this.status + ".");
+				callback("failure");
+				return;
+			}
+			stylishCommon.installFromString(this.responseText, url, callback);
+		}
+		xhr.open("GET", url);
+		xhr.send();
+	},
+	
+	// Callback passes a string parameter - installed, failure, cancelled, existing
+	installFromSite: function(doc, callback) {
+		var resourcesNeeded = [{name: "stylish-code", download: true}, {name: "stylish-description", download: true}, {name: "stylish-install-ping-url"}, {name: "stylish-update-url"}, {name: "stylish-md5-url"}, {name: "stylish-id-url"}];
+		
+		stylishCommon.getResourcesFromMetas(doc, resourcesNeeded, function(results) {
+			// This is the only required property
+			if (results["stylish-code"] == null || results["stylish-code"].length == 0) {
+				callback("failure")
+				return;
+			}
+			var uri = stylishCommon.cleanURI("documentURI" in doc ? doc.documentURI : doc.location.href);
+			if (results["stylish-id-url"] == null) {
+				results["stylish-id-url"] = uri
+			}
+
+			var style = Components.classes["@userstyles.org/style;1"].createInstance(Components.interfaces.stylishStyle);
+			style.mode = style.CALCULATE_META | style.REGISTER_STYLE_ON_CHANGE;
+			style.init(uri, results["stylish-id-url"], results["stylish-update-url"], results["stylish-md5-url"], results["stylish-description"], results["stylish-code"], false, results["stylish-code"], null);
+
+			stylishCommon.openInstall({style: style, installPingURL: results["stylish-install-ping-url"], installCallback: callback});
+
+		});
+	},
+	
+	// Results the value of the <link> with a "rel" of the passed name.
+	getMeta: function(doc, name) {
+		var e = doc.querySelector("link[rel='" + name + "']");
+		return e ? e.getAttribute("href") : null;
+	},
+	
+	// Gets the values of the passed meta names.
+	//   doc
+	//   resourcesToGet: an array of:
+	//     name: meta name to get
+	//     download: if true, will download if the value is a remote URL
+	//   callback: called with a hash of name to value
+	getResourcesFromMetas: function(doc, resourcesToGet, callback) {
+		var keyUrls = {};
+		var resourcesToDownload = [];
+		resourcesToGet.forEach(function(r) {
+			var c = stylishCommon.getMeta(doc, r.name);
+			if (r.download) {
+				resourcesToDownload.push({name: r.name, url: c});
+			} else {
+				keyUrls[r.name] = c;
+			}
+		});
+		stylishCommon.getResources(doc, resourcesToDownload, function(results) {
+			results.forEach(function(r) {
+				keyUrls[r.name] = r.value;
+			});
+			callback(keyUrls);
+		});
+	},
+	
+	// Gets the values of the passed URLs.
+	//   doc
+	//   resources: an array of:
+	//     name: name of the resource
+	//     url: url of the resource
+	//   callback: called with a hash of name to value
+	getResources: function(doc, resources, callback) {
+		var results = [];
+		
+		function assembleResults(name, value) {
+			results.push({name: name, value: value});
+			if (results.length == resources.length) {
+				callback(results);
+			}
+		}
+		
+		resources.forEach(function(resource) {
+			stylishCommon.getResource(doc, resource.name, resource.url, assembleResults);
+		});
+	},
+	
+	// Get the value of the passed URL.
+	getResource: function(doc, name, url, callback) {
+		if (url == null) {
+			callback(name, null);
+			return;
+		}
+		if (url.indexOf("#") == 0) {
+			callback(name, doc.getElementById(url.substring(1)).textContent);
+			return;
+		}
+		var xhr = new XMLHttpRequest();
+		xhr.onload = function() {
+			if (xhr.status >= 400) {
+				callback(name, null);
+			} else {
+				callback(name, xhr.responseText);
+			}
+		}
+		if (url.length > 2000) {
+			var parts = url.split("?");
+			xhr.open("POST", parts[0], true);
+			xhr.setRequestHeader("Content-type","application/x-www-form-urlencoded");
+			xhr.send(parts[1]);
+		} else {
+			xhr.open("GET", url, true);
+			xhr.send();
+		}
+	},
+	
+	installFromFile: function(doc) {
+		stylishCommon.installFromString(doc.body.textContent, doc.location.href);
+	},
+	
+	installFromString: function(css, uri, callback) {
+		uri = stylishCommon.cleanURI(uri);
+		var style = Components.classes["@userstyles.org/style;1"].createInstance(Components.interfaces.stylishStyle);
+		style.mode = style.CALCULATE_META | style.REGISTER_STYLE_ON_CHANGE;
+		style.init(uri, uri, uri, null, null, css, false, css, null);
+		stylishCommon.openInstall({style: style, installCallback: callback});
+	},
 
 	openInstall: function(params) {
+		var style = params.style;
+		// let's check if it's already installed
+		var service = Components.classes["@userstyles.org/style;1"].getService(Components.interfaces.stylishStyle);
+		if (service.findByUrl(style.idUrl, 0) != null) {
+			if (params.installCallback) {
+				params.installCallback("existing");
+			}
+			return;
+		}
+		
+		if (!stylishCommon.isXULAvailable) {
+			var installStrings = Components.classes["@mozilla.org/intl/stringbundle;1"].getService(Components.interfaces.nsIStringBundleService).createBundle("chrome://stylish/locale/install.properties");
+			var promptService = Components.classes["@mozilla.org/embedcomp/prompt-service;1"].getService(Components.interfaces.nsIPromptService);
+			var promptTitle = typeof stylishStrings == "undefined" ? "Install user style" : stylishStrings.title;
+			var result;
+			if (style.name) {
+				var installPrompt = installStrings.formatStringFromName("installintro", [style.name], 1);
+				// title is read from entity in overlay-mobile.xul, but not available in manage.html (which is not localized anyway!)
+				result = promptService.confirm(window, promptTitle, installPrompt);
+			} else {
+				var installPrompt = "Give the style from '" + style.idUrl + "' a name.";
+				var name = {value: ""};
+				result = promptService.prompt(window, promptTitle, installPrompt, name, null, {});
+				if (result) {
+					style.name = name.value;
+				}
+			}
+			if (result) {
+				style.enabled = true;
+				style.save();
+				if (params.installPingURL) {
+					var req = new XMLHttpRequest();
+					req.open("GET", params.installPingURL, true);
+					stylishCommon.fixXHR(req);
+					req.send(null);
+				}
+				if (params.installCallback) {
+					params.installCallback("installed");
+				}
+			} else {
+				if (params.installCallback) {
+					params.installCallback("cancelled");
+				}
+			}
+			return;
+		}
+		
 		function fillName(prefix) {
 			params.windowType = stylishCommon.getWindowName(prefix, params.triggeringDocument ? stylishCommon.cleanURI(params.triggeringDocument.location.href) : null);
 		}
diff --git a/content/edit.js b/content/edit.js
index c32ca93..06376ff 100644
--- a/content/edit.js
+++ b/content/edit.js
@@ -280,9 +280,6 @@ function save() {
 		stylishCommon.fixXHR(req);
 		req.send(null);
 	}
-	if (installCallback) {
-		installCallback();
-	}
 
 	return true;
 }
@@ -311,15 +308,18 @@ function cancelDialog() {
 	return true;
 }
 
-//turn off preview!
 function dialogClosing() {
+	//turn off preview!
 	style.setPreview(false);
 	if (!saved) {
 		style.revert();
 	}
+	
+	if (installCallback) {
+		installCallback(saved ? "success" : "cancelled");
+	}
 }
 
-
 function checkForErrors() {
 	var service = Components.classes["@userstyles.org/style;1"].getService(Components.interfaces.stylishStyle);
 	var errors = document.getElementById("errors");
@@ -327,17 +327,26 @@ function checkForErrors() {
 	while (errors.hasChildNodes()) {
 		errors.removeChild(errors.lastChild);
 	}
+	var currentMessages = [];
 	var errorListener = {
 		QueryInterface: XPCOMUtils.generateQI([Components.interfaces.nsIConsoleListener, Components.interfaces.nsISupports]),
 		observe: function(message) {
 			if ("QueryInterface" in message) {
 				errors.style.display = "-moz-box";
-				var label = document.createElementNS(stylishCommon.XULNS, "label");
 				var error = message.QueryInterface(Components.interfaces.nsIScriptError);
-
-				label.appendChild(document.createTextNode(error.lineNumber + ":" + error.columnNumber + " " + error.errorMessage));
-				label.addEventListener("click", function() {goToLine(error.lineNumber, error.columnNumber) }, false);
-				errors.appendChild(label);
+				
+				// ignore other crap
+				if (error.category == "CSS Parser" && error.sourceName == "about:blank") {
+					var message = error.lineNumber + ":" + error.columnNumber + " " + error.errorMessage;
+					// don't duplicate
+					if (currentMessages.indexOf(message) == -1) {
+						currentMessages.push(message);
+						var label = document.createElementNS(stylishCommon.XULNS, "label");
+						label.appendChild(document.createTextNode(message));
+						label.addEventListener("click", function() {goToLine(error.lineNumber, error.columnNumber) }, false);
+						errors.appendChild(label);
+					}
+				}
 			}
 		}
 	}
diff --git a/content/install-overlay.js b/content/install-overlay.js
index a605908..82f077f 100644
--- a/content/install-overlay.js
+++ b/content/install-overlay.js
@@ -4,8 +4,6 @@ var stylishInstallOverlay = {
 
 	init: function() {
 		stylishInstallOverlay.STRINGS = Components.classes["@mozilla.org/intl/stringbundle;1"].getService(Components.interfaces.nsIStringBundleService).createBundle("chrome://stylish/locale/overlay.properties");
-		stylishInstallOverlay.INSTALL_STRINGS = Components.classes["@mozilla.org/intl/stringbundle;1"].getService(Components.interfaces.nsIStringBundleService).createBundle("chrome://stylish/locale/install.properties");
-
 
 		//page load listener
 		var appcontent = document.getElementById("appcontent"); // browser
@@ -96,78 +94,11 @@ var stylishInstallOverlay = {
 	},
 
 	installFromSite: function(event) {
-		var doc;
-		if (event.target.nodeName == "#document") {
-			doc = event.target;
-		}
-		var uri = stylishCommon.cleanURI(doc.location.href);
-		var links = doc.getElementsByTagName("link");
-		var code = null;
-		var description = null;
-		var updateURL = null;
-		var md5URL = null;
-		var installPingURL = null;
-		var idUrl = null;
-		for (var i = 0; i < links.length; i++) {
-			switch (links[i].rel) {
-				case "stylish-code":
-					var id = links[i].getAttribute("href").replace("#", "");
-					var element = doc.getElementById(id);
-					if (element) {
-						code = element.textContent;
-					}
-					break;
-				case "stylish-description":
-					var id = links[i].getAttribute("href").replace("#", "");
-					var element = doc.getElementById(id);
-					if (element) {
-						description = element.textContent;
-					}
-					break;
-				case "stylish-install-ping-url":
-					installPingURL = links[i].href;
-					break;
-				case "stylish-update-url":
-					updateURL = links[i].href;
-					break;
-				case "stylish-md5-url":
-					md5URL = links[i].href;
-					break;
-				case "stylish-id-url":
-					idUrl = links[i].href;
-					break;
+		stylishCommon.installFromSite(event.target, function(result) {
+			if (result == "installed") {
+				stylishCommon.dispatchEvent(event.target, "styleInstalled");
 			}
-		}
-		if (idUrl == null) {
-			idUrl = uri;
-		}
-
-		var style = Components.classes["@userstyles.org/style;1"].createInstance(Components.interfaces.stylishStyle);
-		style.mode = style.CALCULATE_META | style.REGISTER_STYLE_ON_CHANGE;
-		style.init(uri, idUrl, updateURL, md5URL, description, code, false, code, null);
-
-		var installCallback = function() {
-			stylishCommon.dispatchEvent(doc, "styleInstalled");
-		};
-
-		if (typeof stylishStrings != "undefined") {
-			// stylishStrings is set in overlay-mobile.xul, in which case XUL is not available
-			var installPrompt = stylishInstallOverlay.INSTALL_STRINGS.formatStringFromName("installintro", [style.name], 1);
-			var promptService = Components.classes["@mozilla.org/embedcomp/prompt-service;1"].getService(Components.interfaces.nsIPromptService);
-			if (promptService.confirm(window, stylishStrings.title, installPrompt)) {
-				style.enabled = true;
-				style.save();
-				if (installPingURL) {
-					var req = new XMLHttpRequest();
-					req.open("GET", installPingURL, true);
-					stylishCommon.fixXHR(req);
-					req.send(null);
-				}
-				installCallback();
-			}		
-		} else {
-			stylishCommon.openInstall({style: style, installPingURL: installPingURL, installCallback: installCallback});
-		}
+		});
 	},
 
 	updateFromSite: function(event) {
@@ -204,12 +135,7 @@ var stylishInstallOverlay = {
 	},
 
 	installFromFile: function(event) {
-		var doc = content.document;
-		var uri = stylishCommon.cleanURI(doc.location.href);
-		var style = Components.classes["@userstyles.org/style;1"].createInstance(Components.interfaces.stylishStyle);
-		style.mode = style.CALCULATE_META | style.REGISTER_STYLE_ON_CHANGE;
-		style.init(uri, uri, uri, null, null, doc.body.textContent, false, doc.body.textContent, null);
-		stylishCommon.openInstall({style: style});
+		stylishCommon.installFromFile(content.document);
 	}
 
 };
diff --git a/content/install.js b/content/install.js
index f082a6b..9ea53f0 100644
--- a/content/install.js
+++ b/content/install.js
@@ -1,6 +1,7 @@
 var style, strings, name;
 var installPingURL = null;
 var installCallback = null;
+var saved = false;
 
 function init() {
 	style = window.arguments[0].style;
@@ -62,7 +63,7 @@ function switchToEdit() {
 function save(andClose) {
 	if (!name.value) {
 		alert(strings.getString("missingname"));
-		return;
+		return false;
 	}
 	style.name = name.value;
 	style.enabled = true;
@@ -73,9 +74,8 @@ function save(andClose) {
 		stylishCommon.fixXHR(req);
 		req.send(null);
 	}
-	if (installCallback) {
-		installCallback();
-	}
+	saved = true;
+	
 	// do it this way otherwise the ping doesn't work
 	if (andClose) {
 		setTimeout(window.close, 500);
@@ -86,3 +86,7 @@ function save(andClose) {
 function preview() {
 	style.setPreview(true);
 }
+
+function callCallback() {
+	installCallback(saved ? "installed" : "cancelled");
+}
diff --git a/content/install.xul b/content/install.xul
index e2aa2a9..1ed35dd 100644
--- a/content/install.xul
+++ b/content/install.xul
@@ -16,6 +16,7 @@
 	height="300"
 	buttons="accept,cancel,extra1,extra2"
 	onload="init()"
+	onunload="callCallback()"
 	title="&title;"
 	ondialogaccept="return save(true)"
 	ondialogextra2="preview();"
diff --git a/content/manage-addons-fx4.js b/content/manage-addons-fx4.js
index e3150e5..392908c 100644
--- a/content/manage-addons-fx4.js
+++ b/content/manage-addons-fx4.js
@@ -38,6 +38,18 @@ var stylishManageAddonsFx4 = {
 			frag.appendChild(el);
 		});
 		list.appendChild(frag);
+	},
+	
+	startInstallFromUrls: function(button) {
+		var startedCallback = function() {
+			button.setAttribute("image", "chrome://browser/skin/tabbrowser/connecting.png");
+			button.setAttribute("disabled", "true");
+		}
+		var endedCallback = function() {
+			button.setAttribute("image", "");
+			button.setAttribute("disabled", "");
+		}
+		stylishCommon.startInstallFromUrls(startedCallback, endedCallback);
 	}
 }
 
diff --git a/content/manage-addons-fx4.xul b/content/manage-addons-fx4.xul
index 8a43894..a579c13 100644
--- a/content/manage-addons-fx4.xul
+++ b/content/manage-addons-fx4.xul
@@ -14,12 +14,14 @@
 	<script src="chrome://stylish/content/manage-addons-fx4.js"></script>
 
 	<richlistbox id="categories">
+		<stringbundle id="stylishStrings" src="chrome://stylish/locale/manage.properties"/>
 		<richlistitem id="category-userstyles" insertafter="category-plugins" name="&manageaddonstitle;" class="category" value="addons://list/userstyle"/>
 	</richlistbox>
 
 	<vbox id="list-view">
 		<hbox id="userstyle-sorting" class="view-header" insertafter="addon-list-empty">
 			<button id="new-userstyle" label="&writenew;" oncommand="stylishCommon.addCode('')" class="addon-control"/>
+			<button id="install-from-url" label="&installfromurls;" oncommand="stylishManageAddonsFx4.startInstallFromUrls(this)" class="addon-control" style="display: none"/>
 			<spacer flex="1"/>
 			<button id="userstyle-sorting-status" label="&sortenabled;" tooltiptext="&sortenabled;"
 				class="sorter" sortBy="uiState,name"
@@ -39,7 +41,10 @@
 		<hbox position="3">
 			<description id="no-styles-note">&nostylesstart;<label href="http://userstyles.org/" class="text-link">userstyles.org</label>&nostylesend;</description>
 		</hbox>
-		<button id="no-styles-write-new" position="4" label="&writenew;" oncommand="stylishCommon.addCode('')" class="addon-control"/>
+		<hbox>
+			<button id="no-styles-write-new" position="4" label="&writenew;" oncommand="stylishCommon.addCode('')" class="addon-control"/>
+			<button id="no-styles-install-from-url" label="&installfromurls;" oncommand="stylishManageAddonsFx4.startInstallFromUrls(this)" class="addon-control" style="display: none"/>
+		</hbox>
 	</vbox>
 
 	<menupopup id="addonitem-popup">
diff --git a/content/manage.html b/content/manage.html
index 0c86df2..61c3f39 100644
--- a/content/manage.html
+++ b/content/manage.html
@@ -19,7 +19,7 @@
 			padding-top: 0.5em;
 			padding-bottom: 0.5em;
 		}
-		.style-item .enable-disable-column, .style-item .remove-column {
+		.style-item .enable-disable-column, .style-item .remove-column, .style-item .enable-disable-column, .style-item .update-column {
 			text-align: center;
 		}
 		.style-item .enable-disable-column button {
@@ -35,16 +35,44 @@
 		.style-disabled .style-name {
 			color: gray;
 		}
+		#check-all-for-updates-container {
+			display: none;
+		}
+		.style-update-status, .checking-for-update-message, .update-style, .updating-message, .updated-message, .no-update-message, .update-error-message, .update-not-possible-message {
+			display: none;
+		}
+		.style-update-status, .checking-for-update-message,  .updating-message, .updated-message, .no-update-message, .update-error-message, .update-not-possible-message {
+			color: gray;
+			font-size: smaller;
+			font-style: italic;
+			text-align: right;
+		}
+		.checking-for-update .checking-for-update-message, .update-error .update-error-message, .no-update .no-update-message, .updatable .update-style, .update-not-possible .update-not-possible-message {
+			display: inline;
+		}
+		.checking-for-update .style-update-status, .update-error .style-update-status, .no-update .style-update-status, .update-not-possible .style-update-status {
+			display: block;
+		}
+		.loading-image {
+			display: none;
+			margin-right: 0.5em;
+		}
+		.loading .loading-image {
+			display: inline;
+		}
 	</style>
+	<script src="common.js"></script>
 </head>
 <body>
-<h1>Stylish</h1>
+<h1><img src="../skin/32.png" alt=""> Stylish</h1>
 
 <table>
 	<tbody id="styles">
 	</tbody>
 </table>
 
+<p id="check-all-for-updates-container"><button id="check-all-for-updates" onclick="checkAllForUpdates()"><img src="chrome://browser/skin/tabbrowser/connecting.png" alt="" class="loading-image">Check all for updates</button></p>
+
 <script>
 	// None of the actions we can perform from this page will directly change the UI. Instead, we will listen to the observer service so we can change ourselves not only from actions from this page, but actions from anywhere.
 
@@ -89,7 +117,7 @@
 		style.save();
 	}
 
-	function remove(id) {
+	function removeStyle(id) {
 		var style = get(id);
 		style.delete();
 	}
@@ -111,17 +139,33 @@
 			.replace(/STYLE_LINK/g, style.url == null ? "" : "<a href=\"" + escapeHtml(style.url) + "\">[→]</a>");
 	}
 
-	var styleTemplate = "<tr id='style-STYLE_ID' class='style-item style-STYLE_STATUS'><td class='style-name'>STYLE_NAME STYLE_LINK</td><td class='enable-disable-column'><button class='enable-style' onclick='enable(\"STYLE_ID\")'>Enable</button><button class='disable-style' onclick='disable(\"STYLE_ID\")'>Disable</button></td><td class='remove-column'><button class='remove-style' onclick='remove(\"STYLE_ID\")'>Remove</button></td></tr>";
+	function startInstallFromUrls(button) {
+		var startedCallback = function() {
+			updateButtonStatus(button, true);
+		}
+		var endedCallback = function() {
+			updateButtonStatus(button, false);
+		}
+		stylishCommon.startInstallFromUrls(startedCallback, endedCallback);
+	}
+
+	var styleTemplate = "<tr id='style-STYLE_ID' class='style-item style-STYLE_STATUS'><td class='style-info'><div class='style-name'>STYLE_NAME STYLE_LINK</div><div class='style-update-status'><span class='checking-for-update-message'>Checking for updates...</span><span class='updated-message'>Updated.</span><span class='no-update-message'>No update available.</span><span class='update-error-message'>Error updating.</span><span class='update-not-possible-message'>No update possible.</span> [...]
 	var service = Components.classes["@userstyles.org/style;1"].getService(Components.interfaces.stylishStyle);
 	var styles = service.list(0, {});
 	var html = styles.map(getCode).join("\n");
 	document.getElementById("styles").innerHTML = html;
+	updateUpdateAllButton(styles.length > 0);
+	
+	function updateUpdateAllButton(show) {
+		document.getElementById("check-all-for-updates-container").style.display = show ? "block" : "none";
+	}
 
 	var observerService = Components.classes["@mozilla.org/observer-service;1"].getService(Components.interfaces.nsIObserverService);
 
 	var deleteObserver = {
 		observe: function(subject, topic, data) {
 			removeUI(subject.id);
+			updateUpdateAllButton(document.getElementById("styles").childNodes.length > 0);
 		}
 	};
 	observerService.addObserver(deleteObserver, "stylish-style-delete", false);
@@ -129,6 +173,7 @@
 	var addObserver = {
 		observe: function(subject, topic, data) {
 			addUI(subject.id);
+			updateUpdateAllButton(true);
 		}
 	};
 	observerService.addObserver(addObserver, "stylish-style-add", false);
@@ -139,10 +184,71 @@
 		}
 	};
 	observerService.addObserver(updateObserver, "stylish-style-change", false);
+	
+	var checkForUpdateObserver = {
+		observe: function(subject, topic, data) {
+			var ui = getUI(subject.id);
+			if (topic == "stylish-style-update-check-start") {
+				ui.classList.add("checking-for-update");
+			} else if (topic == "stylish-style-update-check-done") {
+				ui.classList.remove("checking-for-update");
+				switch (data) {
+					case "update-check-error":
+						ui.classList.add("update-error");
+						break;
+					case "no-update-available":
+						ui.classList.add("no-update");
+						break;
+					case "update-available":
+						ui.classList.add("updatable");
+						break;
+					case "no-update-possible":
+						ui.classList.add("update-not-possible");
+						break;
+				}
+			}
+		}
+	};
+	
+	function checkAllForUpdates() {
+		var button = document.getElementById("check-all-for-updates");
+		updateButtonStatus(button, true);
+		var styles = service.list(0, {});
+		styles.forEach(function(style) {
+			// remove any previous update stuff
+			var cl = getUI(style.id).classList;
+			cl.remove("update-error");
+			cl.remove("no-update");
+			cl.remove("updatable");
+			cl.remove("update-not-possible");
+			cl.remove("checking-for-update");
+
+			style.checkForUpdates(checkForUpdateObserver);
+		});
+		updateButtonStatus(button, false);
+	}
+	
+	function applyUpdate(id) {
+		var ui = getUI(id);
+		var button = ui.querySelector('.update-style');
+		updateButtonStatus(button, true);
+		get(id).applyUpdate();
+		// that should fire stylish-style-change when done, which we're listening to above, and refresh it
+	}
+	
+	function updateButtonStatus(button, loading) {
+		if (loading) {
+			button.classList.add("loading");
+			button.setAttribute("disabled", "true");
+		} else {
+			button.classList.remove("loading");
+			button.removeAttribute("disabled");
+		}
+	}
 
 </script>
 
-<p>Visit <a href="http://userstyles.org">userstyles.org</a> to install styles.</p>
+<p>Visit <a href="http://userstyles.org">userstyles.org</a> to install styles, or <button onclick="startInstallFromUrls(this)"><img src="chrome://browser/skin/tabbrowser/connecting.png" alt="" class="loading-image">install from URLs.</button></p>
 
 </body>
 </html>
diff --git a/content/overlay.js b/content/overlay.js
index 03aa447..178bddf 100644
--- a/content/overlay.js
+++ b/content/overlay.js
@@ -19,15 +19,14 @@ var stylishOverlay = {
 					setTimeout(function() {openUILinkIn(stylishOverlay.URL_STRINGS.getString("firstrun"), "tab")}, 100);
 				}
 			case 2:
-				// add to addon bar
-				var addonBar = document.getElementById("addon-bar");
+				// add to nav bar
+				var navbar = document.getElementById("nav-bar");
 				var button = document.getElementById("stylish-toolbar-button");
-				if (addonBar && !button) {
-					var newCurrentSet = ["stylish-toolbar-button"].concat(addonBar.currentSet.split(",")).join(",");
-					addonBar.currentSet = newCurrentSet; // for immediate display
-					addonBar.setAttribute("currentset", newCurrentSet); // for persisting
-					document.persist(addonBar.id, "currentset");
-					setToolbarVisibility(addonBar, true);
+				if (navbar && !button) {
+					var newCurrentSet = navbar.currentSet.split(",").concat(["stylish-toolbar-button"]).join(",");
+					navbar.currentSet = newCurrentSet; // for immediate display
+					navbar.setAttribute("currentset", newCurrentSet); // for persisting
+					document.persist(navbar.id, "currentset");
 					try {
 						BrowserToolboxCustomizeDone(true);
 					} catch (e) {
diff --git a/idl/stylishStyle.idl b/idl/stylishStyle.idl
index 1279fb0..6e4e3e8 100644
--- a/idl/stylishStyle.idl
+++ b/idl/stylishStyle.idl
@@ -42,6 +42,13 @@ interface stylishStyle : nsIClassInfo
 	void save();
 	void delete();
 	boolean appliesToUrl(in AString url);
+	// observer's topics can be:
+	//   - stylish-style-update-check-start
+	//   - stylish-style-update-check-done with data:
+	//     - update-check-error
+	//     - no-update-available
+	//     - update-available
+	//     - no-update-possible
 	void checkForUpdates(in nsIObserver observer);
 	void applyUpdate();
 	void setPreview(in boolean on);
diff --git a/install.rdf b/install.rdf
index 3980091..fef8428 100644
--- a/install.rdf
+++ b/install.rdf
@@ -5,7 +5,7 @@
 	<Description rdf:about="urn:mozilla:install-manifest">
 		<em:id>{46551EC9-40F0-4e47-8E18-8E5CF550CFB8}</em:id>
 		<em:name>Stylish</em:name>
-		<em:version>1.3.3</em:version>
+		<em:version>1.4.0</em:version>
 		<em:creator>Jason Barnabe</em:creator>
 		<em:homepageURL>http://userstyles.org/</em:homepageURL>
 		<em:iconURL>chrome://stylish/skin/32.png</em:iconURL>
@@ -58,7 +58,7 @@
 			<Description>
 				<em:id>{ec8030f7-c20a-464f-9b0e-13a3a9e97384}</em:id>
 				<em:minVersion>4.0</em:minVersion>
-				<em:maxVersion>27.0</em:maxVersion>
+				<em:maxVersion>28.0</em:maxVersion>
 			</Description>
 		</em:targetApplication>
 		<!--Thunderbird-->
@@ -66,7 +66,7 @@
 			<Description>
 				<em:id>{3550f703-e582-4d05-9a08-453d09bdfdc6}</em:id>
 				<em:minVersion>5.0</em:minVersion>
-				<em:maxVersion>27.0</em:maxVersion>
+				<em:maxVersion>28.0</em:maxVersion>
 			</Description>
 		</em:targetApplication>
 		<!--SeaMonkey-->
@@ -74,7 +74,7 @@
 			<Description>
 				<em:id>{92650c4d-4b8e-4d2a-b7eb-24ecf4f6b63a}</em:id>
 				<em:minVersion>2.1</em:minVersion>
-				<em:maxVersion>2.24</em:maxVersion>
+				<em:maxVersion>2.25</em:maxVersion>
 			</Description>
 		</em:targetApplication>
 		<!--Toolkit-->
@@ -82,7 +82,7 @@
 			<Description>
 				<em:id>toolkit at mozilla.org</em:id>
 				<em:minVersion>2.0</em:minVersion>
-				<em:maxVersion>27.0</em:maxVersion>
+				<em:maxVersion>28.0</em:maxVersion>
 			</Description>
 		</em:targetApplication>
 		<!-- Postbox -->
@@ -106,7 +106,7 @@
 			<Description>
 				<em:id>{aa3c5121-dab2-40e2-81ca-7ea25febc110}</em:id>
 				<em:minVersion>14.0</em:minVersion>
-				<em:maxVersion>27.0</em:maxVersion>
+				<em:maxVersion>28.0</em:maxVersion>
 			</Description>
 		</em:targetApplication>
 	</Description>
diff --git a/locale/cs/manage.dtd b/locale/cs/manage.dtd
index da2db19..914bf25 100644
--- a/locale/cs/manage.dtd
+++ b/locale/cs/manage.dtd
@@ -3,6 +3,7 @@
 <!ENTITY done "Dokončeno">
 <!ENTITY done.ak "D">
 <!ENTITY filter "Hledat">
+<!ENTITY installfromurls "Install from URLs...">
 <!ENTITY manageaddonstitle "Uživatelské styly">
 <!ENTITY managetitle "Stylish">
 <!ENTITY nostylesstart "Navštivte">
diff --git a/locale/cs/manage.properties b/locale/cs/manage.properties
index 7140bc5..3c9ad67 100644
--- a/locale/cs/manage.properties
+++ b/locale/cs/manage.properties
@@ -19,3 +19,6 @@ globalstyledescription=Může ovlivnit cokoli.
 sitestyledescription=Ovlivňuje %S.
 tagstyledescription=Štítky: %S.
 manageaddonstitle=Uživatelské styly
+installfromurlsprompttitle=Install from URLs
+installfromurlsprompt=Enter URLs of user styles to install. These can be pages on userstyles.org or CSS files. Separate multiple URLs by spaces.
+installfromurlserror=Could not install from the following URLs: %s.
diff --git a/locale/da/manage.dtd b/locale/da/manage.dtd
index 9d0ea02..e964838 100644
--- a/locale/da/manage.dtd
+++ b/locale/da/manage.dtd
@@ -3,6 +3,7 @@
 <!ENTITY done "Færdig">
 <!ENTITY done.ak "F">
 <!ENTITY filter "Søg">
+<!ENTITY installfromurls "Install from URLs...">
 <!ENTITY manageaddonstitle "User Styles">
 <!ENTITY managetitle "Stylish">
 <!ENTITY nostylesstart "Besøg">
diff --git a/locale/da/manage.properties b/locale/da/manage.properties
index 813dd3c..af5ffbe 100644
--- a/locale/da/manage.properties
+++ b/locale/da/manage.properties
@@ -19,3 +19,6 @@ globalstyledescription=Kan påvirke alting.
 sitestyledescription=Påvirker %S.
 tagstyledescription=Tags: %S.
 manageaddonstitle=User Styles
+installfromurlsprompttitle=Install from URLs
+installfromurlsprompt=Enter URLs of user styles to install. These can be pages on userstyles.org or CSS files. Separate multiple URLs by spaces.
+installfromurlserror=Could not install from the following URLs: %s.
diff --git a/locale/de/manage.dtd b/locale/de/manage.dtd
index 7f32bd8..219f656 100644
--- a/locale/de/manage.dtd
+++ b/locale/de/manage.dtd
@@ -3,6 +3,7 @@
 <!ENTITY done "Fertig">
 <!ENTITY done.ak "F">
 <!ENTITY filter "Suche">
+<!ENTITY installfromurls "Install from URLs...">
 <!ENTITY manageaddonstitle "Benutzerstile">
 <!ENTITY managetitle "Stylish">
 <!ENTITY nostylesstart "Besuchen Sie">
diff --git a/locale/de/manage.properties b/locale/de/manage.properties
index 5e6fd44..000ccfd 100644
--- a/locale/de/manage.properties
+++ b/locale/de/manage.properties
@@ -19,3 +19,6 @@ globalstyledescription=Kann sich auf alles auswirken.
 sitestyledescription=Wirkt sich auf \"%S\" aus.
 tagstyledescription=Schlagwörter: %S.
 manageaddonstitle=Benutzerstile
+installfromurlsprompttitle=Install from URLs
+installfromurlsprompt=Enter URLs of user styles to install. These can be pages on userstyles.org or CSS files. Separate multiple URLs by spaces.
+installfromurlserror=Could not install from the following URLs: %s.
diff --git a/locale/en-GB/manage.dtd b/locale/en-GB/manage.dtd
index b63c317..80bb428 100644
--- a/locale/en-GB/manage.dtd
+++ b/locale/en-GB/manage.dtd
@@ -3,6 +3,7 @@
 <!ENTITY done "Done">
 <!ENTITY done.ak "D">
 <!ENTITY filter "Search">
+<!ENTITY installfromurls "Install from URLs…">
 <!ENTITY manageaddonstitle "User Styles">
 <!ENTITY managetitle "Stylish">
 <!ENTITY nostylesstart "Visit">
diff --git a/locale/en-GB/manage.properties b/locale/en-GB/manage.properties
index 6222b15..3e8cb10 100644
--- a/locale/en-GB/manage.properties
+++ b/locale/en-GB/manage.properties
@@ -19,3 +19,6 @@ globalstyledescription=Can affect anything.
 sitestyledescription=Affects %S.
 tagstyledescription=Tags: %S.
 manageaddonstitle=User Styles
+installfromurlsprompttitle=Install from URLs
+installfromurlsprompt=Enter URLs of user styles to install. These can be pages on userstyles.org or CSS files. Separate multiple URLs by spaces.
+installfromurlserror=Could not install from the following URLs: %S.
diff --git a/locale/en-US/manage.dtd b/locale/en-US/manage.dtd
index b63c317..faf6b6a 100644
--- a/locale/en-US/manage.dtd
+++ b/locale/en-US/manage.dtd
@@ -3,6 +3,7 @@
 <!ENTITY done "Done">
 <!ENTITY done.ak "D">
 <!ENTITY filter "Search">
+<!ENTITY installfromurls "Install from URLs...">
 <!ENTITY manageaddonstitle "User Styles">
 <!ENTITY managetitle "Stylish">
 <!ENTITY nostylesstart "Visit">
diff --git a/locale/en-US/manage.properties b/locale/en-US/manage.properties
index 6222b15..bb54b6d 100644
--- a/locale/en-US/manage.properties
+++ b/locale/en-US/manage.properties
@@ -19,3 +19,6 @@ globalstyledescription=Can affect anything.
 sitestyledescription=Affects %S.
 tagstyledescription=Tags: %S.
 manageaddonstitle=User Styles
+installfromurlsprompttitle=Install from URLs
+installfromurlsprompt=Enter URLs of user styles to install. These can be pages on userstyles.org or CSS files. Separate multiple URLs by spaces.
+installfromurlserror=Could not install from the following URLs: %s.
diff --git a/locale/es-AR/edit.dtd b/locale/es-AR/edit.dtd
index b153aa1..9092985 100644
--- a/locale/es-AR/edit.dtd
+++ b/locale/es-AR/edit.dtd
@@ -1,6 +1,6 @@
-<!ENTITY chromefolder "Ruta de la carpeta Chrome">
+<!ENTITY chromefolder "Ruta de la carpeta de chrome">
 <!ENTITY chromefolder.ak "C">
-<!ENTITY dataURI "URI de datos...">
+<!ENTITY dataURI "URI de datos…">
 <!ENTITY dataURI.ak "d">
 <!ENTITY htmlnamespace "Espacio de nombre HTML por defecto">
 <!ENTITY htmlnamespace.ak "H">
diff --git a/locale/es-AR/edit.properties b/locale/es-AR/edit.properties
index 99d3703..a33b03e 100644
--- a/locale/es-AR/edit.properties
+++ b/locale/es-AR/edit.properties
@@ -1,7 +1,7 @@
 dataURIDialogTitle=Seleccioná archivo a insertar
 editstyletitle=Editar \'%S\'
 newstyletitle=Nuevo estilo
-missingcode=Ingresar un poco de código para este estilo.
-missingname=Nombrar este estilo.
+missingcode=Ingresá algo de código para este estilo.
+missingname=Nombrá este estilo.
 unsavedchanges=¿Querés guardar los cambios a este estilo?
 unsavedchangestitle=¿Guardar cambios?
diff --git a/locale/es-AR/extensions.dtd b/locale/es-AR/extensions.dtd
index 30f115c..fd529a5 100644
--- a/locale/es-AR/extensions.dtd
+++ b/locale/es-AR/extensions.dtd
@@ -1,4 +1,4 @@
-<!ENTITY addons.title "Agregados">
+<!ENTITY addons.title "Complementos">
 <!-- Default window size for the addon manager in pixels -->
 <!ENTITY em.width "520">
 <!ENTITY em.height "380">
@@ -6,7 +6,7 @@
 <!ENTITY cmd.options.commandKey ",">
 <!ENTITY cmd.close.commandKey "w">
 <!-- View labels -->
-<!ENTITY search.label "Obtener agregados">
+<!ENTITY search.label "Obtener complementos">
 <!ENTITY extensions.label "Extensiones">
 <!ENTITY themes.label "Temas">
 <!ENTITY locales.label "Idiomas">
@@ -16,12 +16,12 @@
 <!-- Command Bar items -->
 <!ENTITY cmd.checkUpdatesAll.label "Buscar actualizaciones">
 <!ENTITY cmd.checkUpdatesAll.accesskey "B">
-<!ENTITY cmd.checkUpdatesAllAddon.tooltip "Buscar actualizaciones a sus agregados">
-<!ENTITY cmd.checkUpdatesAllTheme.tooltip "Buscar actualizaciones a sus temas">
-<!ENTITY cmd.checkUpdatesAllPlugin.tooltip "Buscar actualizaciones a sus plugins">
+<!ENTITY cmd.checkUpdatesAllAddon.tooltip "Buscar actualizaciones a tus complementos">
+<!ENTITY cmd.checkUpdatesAllTheme.tooltip "Buscar actualizaciones a tus temas">
+<!ENTITY cmd.checkUpdatesAllPlugin.tooltip "Buscar actualizaciones a tus plugins">
 <!ENTITY cmd.installLocalFile.label "Instalar…">
 <!ENTITY cmd.installLocalFile.accesskey "n">
-<!ENTITY cmd.installFileAddon.tooltip "Instalar un agregado">
+<!ENTITY cmd.installFileAddon.tooltip "Instalar un complemento">
 <!ENTITY cmd.installFileTheme.tooltip "Instalar un tema">
 <!ENTITY cmd.installUpdatesAll2.label "Instalar actualizaciones">
 <!ENTITY cmd.installUpdatesAll2.accesskey "I">
@@ -37,10 +37,10 @@
 <!ENTITY cmd.continue.tooltip "Continuar cargando &brandShortName;">
 <!ENTITY cmd.enableAll.label "Habilitar todo">
 <!ENTITY cmd.enableAll.accesskey "a">
-<!ENTITY cmd.enableAll.tooltip "Habilitar todos los agregados mostrados">
+<!ENTITY cmd.enableAll.tooltip "Habilitar todos los complementos mostrados">
 <!ENTITY cmd.disableAll.label "Deshabilitar todo">
 <!ENTITY cmd.disableAll.accesskey "s">
-<!ENTITY cmd.disableAll.tooltip "Deshabilitar todos los agregados mostrados">
+<!ENTITY cmd.disableAll.tooltip "Deshabilitar todos los complementos mostrados">
 <!-- Displayed in the selected Add-on\'s richlistitem and context menu -->
 <!ENTITY cmd.useTheme.label "Usar tema">
 <!ENTITY cmd.useTheme.accesskey "U">
@@ -53,34 +53,34 @@
 <!ENTITY cmd.optionsUnix.tooltip "Editar preferencias para la extensión seleccionada">
 <!ENTITY cmd.enable.label "Habilitar">
 <!ENTITY cmd.enable.accesskey "H">
-<!ENTITY cmd.enable.tooltip "Habilitar este agregado cuando se reinicie &brandShortName;">
+<!ENTITY cmd.enable.tooltip "Habilitar este complemento cuando se reinicie &brandShortName;">
 <!ENTITY cmd.disable.label "Deshabilitar">
 <!ENTITY cmd.disable.accesskey "D">
-<!ENTITY cmd.disable.tooltip "Deshabilitar este agregado cuando se reinicie &brandShortName;">
+<!ENTITY cmd.disable.tooltip "Deshabilitar este complemento cuando se reinicie &brandShortName;">
 <!ENTITY cmd.uninstall.label "Desinstalar">
 <!ENTITY cmd.uninstall2.accesskey "s">
-<!ENTITY cmd.uninstall2.tooltip "Desinstalar este agregados cuando se reinicie &brandShortName;">
+<!ENTITY cmd.uninstall2.tooltip "Desinstalar este complemento cuando se reinicie &brandShortName;">
 <!ENTITY cmd.cancelUninstall.label "Cancelar desinstalación">
 <!ENTITY cmd.cancelUninstall.accesskey "C">
-<!ENTITY cmd.cancelUninstall.tooltip "Cancelar la desinstalación de este agregado">
+<!ENTITY cmd.cancelUninstall.tooltip "Cancelar la desinstalación de este complemento">
 <!ENTITY cmd.cancelInstall.label "Cancelar instalación">
 <!ENTITY cmd.cancelInstall.accesskey "C">
-<!ENTITY cmd.cancelInstall.tooltip "Cancelar la instalación de este agregado">
+<!ENTITY cmd.cancelInstall.tooltip "Cancelar la instalación de este complemento">
 <!ENTITY cmd.cancelUpgrade.label "Cancelar actualización">
 <!ENTITY cmd.cancelUpgrade.accesskey "C">
-<!ENTITY cmd.cancelUpgrade.tooltip "Cancelar la actualización de este agregado">
+<!ENTITY cmd.cancelUpgrade.tooltip "Cancelar la actualización de este complemento">
 <!ENTITY cmd.installUpdate.label "Instalar actualización">
 <!ENTITY cmd.installUpdate.accesskey "I">
-<!ENTITY cmd.installUpdate.tooltip "Instalar una actualización para este agregado">
+<!ENTITY cmd.installUpdate.tooltip "Instalar una actualización para este complemento">
 <!ENTITY cmd.showUpdateInfo.label "Mostrar información">
 <!ENTITY cmd.showUpdateInfo.accesskey "S">
 <!ENTITY cmd.showUpdateInfo.tooltip "Mostrar más información sobre estas actualizaciones">
 <!ENTITY cmd.hideUpdateInfo.label "Ocultar información">
 <!ENTITY cmd.hideUpdateInfo.accesskey "O">
-<!ENTITY cmd.hideUpdateInfo.tooltip "Ocultar información acerca de estas actualizaciones">
+<!ENTITY cmd.hideUpdateInfo.tooltip "Ocultar información sobre estas actualizaciones">
 <!ENTITY cmd.installSearchResult.label "Agregar a &brandShortName;…">
 <!ENTITY cmd.installSearchResult.accesskey "A">
-<!ENTITY cmd.installSearchResult.tooltip "Descargar e instalar este agregado">
+<!ENTITY cmd.installSearchResult.tooltip "Descargar e instalar este complemento">
 <!-- The selected add-on\'s cancel action button label -->
 <!ENTITY cancel.label "Cancelar">
 <!ENTITY cancel.accesskey "C">
@@ -89,9 +89,9 @@
 <!ENTITY cancelUpgrade.label "Cancelar">
 <!ENTITY cancelUpgrade.accesskey "C">
 <!-- Only displayed in the selected Add-on\'s context menu -->
-<!ENTITY cmd.homepage.label "Visitar página web">
+<!ENTITY cmd.homepage.label "Visitar sitio web oficial">
 <!ENTITY cmd.homepage.accesskey "V">
-<!ENTITY cmd.about2.label "Acerca de este agregado">
+<!ENTITY cmd.about2.label "Acerca de este complemento">
 <!ENTITY cmd.about.accesskey "A">
 <!ENTITY cmd.checkUpdate.label "Buscar actualización">
 <!ENTITY cmd.checkUpdate.accesskey "B">
@@ -99,48 +99,48 @@
 <!ENTITY cmd.includeUpdate.accesskey "n">
 <!ENTITY includeUpdate.label "Incluir esta actualización">
 <!ENTITY includeUpdate.accesskey "n">
-<!ENTITY includeUpdate.tooltip "Incluir este agregado cuando se instalen las actualizaciones">
+<!ENTITY includeUpdate.tooltip "Incluir este complemento cuando se instalen las actualizaciones">
 <!-- Status Messsages -->
-<!ENTITY insecureUpdate.label "No provee actualizaciones seguras">
+<!ENTITY insecureUpdate.label "No provee actualizaciones seguras.">
 <!ENTITY needsDependencies.label "Requiere ítems adicionales.">
 <!ENTITY blocklisted.label "Deshabilitado para su protección.">
 <!ENTITY softBlocklisted.label "Se sabe que causa problemas de seguridad o estabilidad.">
-<!ENTITY outdated.label "Una versión más nueva y segura está disponible.">
-<!ENTITY toBeDisabled.label "Este agregado se deshabilitará cuando se reinicie &brandShortName;.">
-<!ENTITY toBeEnabled.label "Este agregado se habilitará cuando se reinicie &brandShortName;.">
-<!ENTITY toBeInstalled.label "Este agregado se instalará cuando se reinicie &brandShortName;.">
-<!ENTITY toBeUninstalled.label "Este agregado se desinstalará cuando se reinicie &brandShortName;.">
-<!ENTITY toBeUpdated.label "Este agregado se actualizará cuando se reinicie &brandShortName;.">
+<!ENTITY outdated.label "Hay disponible una versión más segura.">
+<!ENTITY toBeDisabled.label "Este complemento se deshabilitará cuando se reinicie &brandShortName;.">
+<!ENTITY toBeEnabled.label "Este complemento se habilitará cuando se reinicie &brandShortName;.">
+<!ENTITY toBeInstalled.label "Este complemento se instalará cuando se reinicie &brandShortName;.">
+<!ENTITY toBeUninstalled.label "Este complemento se desinstalará cuando se reinicie &brandShortName;.">
+<!ENTITY toBeUpdated.label "Este complemento se actualizará cuando se reinicie &brandShortName;.">
 <!ENTITY getExtensions.label "Obtener extensiones">
 <!ENTITY getThemes.label "Obtener temas">
 <!ENTITY getPlugins.label "Obtener plugins">
-<!ENTITY searchAddons.label "Buscar todos los agregados">
-<!ENTITY browseAddons.label "Revisar todos los agregados">
-<!ENTITY searchFailed.label "&brandShortName; no pudo recuperar agregados">
+<!ENTITY searchAddons.label "Buscar en todos los complementos">
+<!ENTITY browseAddons.label "Revisar todos los complementos">
+<!ENTITY searchFailed.label "&brandShortName; no pudo devolver complementos">
 <!ENTITY recommendedHeader.label "Recomendado">
-<!ENTITY recommendedThrobber.label "Recuperando agregados recomendados">
-<!ENTITY searchThrobber.label "Buscando agregados">
+<!ENTITY recommendedThrobber.label "Devolviendo complementos recomendados">
+<!ENTITY searchThrobber.label "Buscando complementos">
 <!ENTITY resetSearch.label "Limpiar resultados">
 <!ENTITY noSearchResults.label "Todos los resultados ya están instalados o son incompatibles.">
 <!ENTITY noRecommendedResults.label "Todas las recomendaciones ya están instaladas o son incompatibles.">
-<!ENTITY emptySearch.label "No se encontraron agregados">
+<!ENTITY emptySearch.label "No se encontraron complementos">
 <!ENTITY emptySearch.button "Aceptar">
 <!ENTITY cancelSearch.button "Cancelar">
 <!ENTITY searchFailed.button "Aceptar">
-<!ENTITY searchResultHomepage.value "Aprender más">
-<!ENTITY searchBox.label "Buscar todos los agregados">
-<!ENTITY recommendedResults.label "Ver todos los agregados recomendados">
+<!ENTITY searchResultHomepage.value "Leer más">
+<!ENTITY searchBox.label "Buscar en todos los complementos">
+<!ENTITY recommendedResults.label "Ver todos los complementos recomendados">
 <!ENTITY searchResultConnecting.label "Conectando…">
 <!ENTITY searchResultInstalling.label "Instalando…">
-<!ENTITY searchResultFailed.label "Instalación fallida">
+<!ENTITY searchResultFailed.label "Falló la instalación">
 <!ENTITY searchResultInstalled.label "Instalación completa">
 <!ENTITY addonTypeExtension.label "Extensión">
 <!ENTITY addonTypeTheme.label "Tema">
 <!ENTITY missingThumbnail.label "Sin vista previa">
-<!ENTITY previewNoThemeSelected.label "No hay tema seleccionado">
+<!ENTITY previewNoThemeSelected.label "No hay ningún tema seleccionado">
 <!ENTITY previewNoPreviewImage.label "Este tema no tiene una vista previa">
 <!ENTITY moreInfo.label "Más información">
-<!ENTITY infoNoAddonSelected.label "No se seleccionó actualización">
+<!ENTITY infoNoAddonSelected.label "No se seleccionó ninguna actualización">
 <!ENTITY infoNoUpdateInfo.label "Esta actualización no tiene información adicional">
 <!ENTITY infoUpdateInfoError.label "Hubo un error cargando la información de esta actualización">
 <!ENTITY updateSuccess.label "Actualización exitosa.">
@@ -150,11 +150,11 @@
 <!ENTITY installWaiting.label "Esperando…">
 <!ENTITY installIncompatibleUpdate.label "Verificando compatibilidad…">
 <!ENTITY installFinishing.label "Instalando…">
-<!ENTITY installFailure.label "Instalación fallida.">
+<!ENTITY installFailure.label "Falló la instalación.">
 <!ENTITY progressStatus.label "Buscando actualizaciones">
 <!ENTITY eula.title "Contrato de licencia">
 <!ENTITY eula.width "560px">
 <!ENTITY eula.height "400px">
-<!ENTITY eula.accept "Acceptar e instalar…">
+<!ENTITY eula.accept "Aceptar e instalar…">
 <!ENTITY blocklist.blocked.label "Bloqueado">
 <!ENTITY blocklist.checkbox.label "Deshabilitar">
diff --git a/locale/es-AR/install.dtd b/locale/es-AR/install.dtd
index f29e003..79981a7 100644
--- a/locale/es-AR/install.dtd
+++ b/locale/es-AR/install.dtd
@@ -1,4 +1,4 @@
-<!ENTITY entername "Nombrar este estilo:">
+<!ENTITY entername "Nombrá este estilo:">
 <!ENTITY install "Instalar">
 <!ENTITY install.ak "I">
 <!ENTITY preview "Previsualización">
diff --git a/locale/es-AR/install.properties b/locale/es-AR/install.properties
index 0ea5438..185fad7 100644
--- a/locale/es-AR/install.properties
+++ b/locale/es-AR/install.properties
@@ -1,8 +1,8 @@
 installintro=Estás a punto de instalar \'%S\' en Stylish.
 installintrononame=Estás a punto de instalar un estilo en Stylish.
-installapp=Este estilo puede afectar la %S interface de usuario. Quizás necesités reiniciar %S para que este estilo surta efecto.
+installapp=Este estilo puede afectar la interface de usuario de %S. Quizás necesités reiniciar %S para que este estilo surta efecto.
 installglobal=Este estilo puede afectar todos los sitios web.
 installsite=Este estilo puede afectar los siguientes sitios web:
-installnotype=Este estilo puede afectar sitios web o la %S interface de usuario.
-missingname=Nombrar este estilo.
-preview.tooltip=Aplicar este estilo temporalmente, así podés ver si te gusta.
+installnotype=Este estilo puede afectar sitios web o la interface de usuario de %S.
+missingname=Nombrá este estilo.
+preview.tooltip=Aplicá este estilo temporalmente, así podés ver si te gusta.
diff --git a/locale/es-AR/manage.dtd b/locale/es-AR/manage.dtd
index eb3c1d4..17a2f31 100644
--- a/locale/es-AR/manage.dtd
+++ b/locale/es-AR/manage.dtd
@@ -1,11 +1,12 @@
 <!ENTITY changetags "Cambiar etiquetas">
 <!ENTITY changetags.ak "C">
 <!ENTITY done "Hecho">
-<!ENTITY done.ak "D">
+<!ENTITY done.ak "H">
 <!ENTITY filter "Buscar">
+<!ENTITY installfromurls "Instalar desde direcciones web…">
 <!ENTITY manageaddonstitle "Estilos de usuario">
 <!ENTITY managetitle "Stylish">
-<!ENTITY nostylesstart "Visitar">
+<!ENTITY nostylesstart "Visitá">
 <!ENTITY nostylesend "para obtener información sobre cómo usar Stylish.">
 <!ENTITY sortenabled "Habilitado">
 <!ENTITY sortname "Nombre">
diff --git a/locale/es-AR/manage.properties b/locale/es-AR/manage.properties
index ddf05e4..044f4ed 100644
--- a/locale/es-AR/manage.properties
+++ b/locale/es-AR/manage.properties
@@ -17,5 +17,8 @@ updateNotPossible=No es posible actualizar.
 appstyledescription=Afecta la interface de usuario.
 globalstyledescription=Puede afectar todo.
 sitestyledescription=Afecta %S.
-tagstyledescription=Tags: %S.
+tagstyledescription=Etiquetas: %S.
 manageaddonstitle=Estilos de usuario
+installfromurlsprompttitle=Instalar desde direcciones web
+installfromurlsprompt=Ingresá direcciones web de estilos de usuarios para instalar. Estas pueden ser páginas en userstyles.org o archivos CSS. Separá varias direcciones web mediante espacios.
+installfromurlserror=No se pudo instalar desde las siguientes direcciones web: %s.
diff --git a/locale/es-AR/overlay.dtd b/locale/es-AR/overlay.dtd
index 322ad1e..f6a7b7d 100644
--- a/locale/es-AR/overlay.dtd
+++ b/locale/es-AR/overlay.dtd
@@ -1,8 +1,8 @@
-<!ENTITY addfile "Instalar archivo...">
+<!ENTITY addfile "Instalar archivo…">
 <!ENTITY addfile.ak "I">
-<!ENTITY findstylebrowser "Encontrar estilos para este estilo...">
-<!ENTITY findstylebrowser.ak "E">
-<!ENTITY managestyles "Administrar estilos...">
+<!ENTITY findstylebrowser "Buscar estilos para este sitio web…">
+<!ENTITY findstylebrowser.ak "B">
+<!ENTITY managestyles "Administrar estilos…">
 <!ENTITY managestyles.ak "A">
 <!ENTITY turnon "Activar todos los estilos">
 <!ENTITY turnon.ak "c">
diff --git a/locale/es-AR/overlay.properties b/locale/es-AR/overlay.properties
index ce50640..6b83d6c 100644
--- a/locale/es-AR/overlay.properties
+++ b/locale/es-AR/overlay.properties
@@ -3,8 +3,8 @@ tooltipStylesOff=Stylish - Los estilos están desactivados
 updatestyle=¿Estás seguro que querés actualizar \'%S\'?
 updatestyleok=Actualizar
 updatestyletitle=Actualizar estilo
-writeblank=Estilo nulo...
+writeblank=Estilo nulo…
 writeblankaccesskey=n
-writefordomain=Para %S...
-writeforsite=Para esta dirección web...
+writefordomain=Para %S…
+writeforsite=Para esta dirección web…
 writeforsiteaccesskey=d
diff --git a/locale/es-ES/manage.dtd b/locale/es-ES/manage.dtd
index 827e621..e68342d 100644
--- a/locale/es-ES/manage.dtd
+++ b/locale/es-ES/manage.dtd
@@ -3,6 +3,7 @@
 <!ENTITY done "Hecho">
 <!ENTITY done.ak "H">
 <!ENTITY filter "Buscar">
+<!ENTITY installfromurls "Install from URLs...">
 <!ENTITY manageaddonstitle "Estilos de usuario">
 <!ENTITY managetitle "Stylish">
 <!ENTITY nostylesstart "Visite">
diff --git a/locale/es-ES/manage.properties b/locale/es-ES/manage.properties
index c39af77..210e98e 100644
--- a/locale/es-ES/manage.properties
+++ b/locale/es-ES/manage.properties
@@ -19,3 +19,6 @@ globalstyledescription=Pueden afectar a todo.
 sitestyledescription=Afecta a %S.
 tagstyledescription=Etiquetas: %S.
 manageaddonstitle=Estilos de usuario
+installfromurlsprompttitle=Install from URLs
+installfromurlsprompt=Enter URLs of user styles to install. These can be pages on userstyles.org or CSS files. Separate multiple URLs by spaces.
+installfromurlserror=Could not install from the following URLs: %s.
diff --git a/locale/et-EE/manage.dtd b/locale/et-EE/manage.dtd
index 2dab49a..4289351 100644
--- a/locale/et-EE/manage.dtd
+++ b/locale/et-EE/manage.dtd
@@ -3,6 +3,7 @@
 <!ENTITY done "Valmis">
 <!ENTITY done.ak "D">
 <!ENTITY filter "Otsi">
+<!ENTITY installfromurls "Install from URLs...">
 <!ENTITY manageaddonstitle "Kasutaja stiilid">
 <!ENTITY managetitle "Stylish">
 <!ENTITY nostylesstart "Külasta">
diff --git a/locale/et-EE/manage.properties b/locale/et-EE/manage.properties
index 48b55e1..6d02f16 100644
--- a/locale/et-EE/manage.properties
+++ b/locale/et-EE/manage.properties
@@ -19,3 +19,6 @@ globalstyledescription=Can affect anything.
 sitestyledescription=Affects %S.
 tagstyledescription=Tags: %S.
 manageaddonstitle=Kasutaja stiilid
+installfromurlsprompttitle=Install from URLs
+installfromurlsprompt=Enter URLs of user styles to install. These can be pages on userstyles.org or CSS files. Separate multiple URLs by spaces.
+installfromurlserror=Could not install from the following URLs: %s.
diff --git a/locale/fi/extensions.dtd b/locale/fi/extensions.dtd
index 8a352f5..ed8d947 100644
--- a/locale/fi/extensions.dtd
+++ b/locale/fi/extensions.dtd
@@ -122,7 +122,7 @@
 <!ENTITY searchThrobber.label "Etsi lisäosia">
 <!ENTITY resetSearch.label "Tyhjennä hakutulokset">
 <!ENTITY noSearchResults.label "Kaikki haun tulokset on jo asennettu tai ovat yhteensopimattomia.">
-<!ENTITY noRecommendedResults.label "Kaikki suositukseton jo asennettu tai ovat yhteensopimattomia.">
+<!ENTITY noRecommendedResults.label "Kaikki suositukset on jo asennettu tai ovat yhteensopimattomia.">
 <!ENTITY emptySearch.label "Ei hakua vastaavia lisäosia">
 <!ENTITY emptySearch.button "OK">
 <!ENTITY cancelSearch.button "Peruuta">
diff --git a/locale/fi/manage.dtd b/locale/fi/manage.dtd
index b0e9bb0..9862452 100644
--- a/locale/fi/manage.dtd
+++ b/locale/fi/manage.dtd
@@ -3,6 +3,7 @@
 <!ENTITY done "Valmis">
 <!ENTITY done.ak "V">
 <!ENTITY filter "Etsi">
+<!ENTITY installfromurls "Asenna sijainneista...">
 <!ENTITY manageaddonstitle "E">
 <!ENTITY managetitle "Stylish">
 <!ENTITY nostylesstart "Vieraile sivulla">
diff --git a/locale/fi/manage.properties b/locale/fi/manage.properties
index e725e00..03b9957 100644
--- a/locale/fi/manage.properties
+++ b/locale/fi/manage.properties
@@ -5,7 +5,7 @@ groupTypeApp=Sovellus
 groupTypeGlobal=Yleinen
 groupTypeNone=Ei tyyppiä
 groupTypeSite=Sivu
-styleRegistrationOff=Kaikki tyylit on laitettu pois käytöstä.
+styleRegistrationOff=Kaikki tyylit on poistettu käytöstä.
 styleRegistrationTurnOn=Ota kaikki tyylit käyttöön
 styleRegistrationTurnOn.ak=O
 updateAvailable=Päivitys on saatavilla.
@@ -19,3 +19,6 @@ globalstyledescription=Voi vaikuttaa mihin vain.
 sitestyledescription=Vaikuttaa sivustoon %S.
 tagstyledescription=Tunnukset: %S.
 manageaddonstitle=Tyylit
+installfromurlsprompttitle=Asenna sijainnista
+installfromurlsprompt=Syötä asennettavien tyylien sijainnit. Nämä voivat olla sivuja userstyles.org -osoitteessa tai CSS-tiedostoja. Erota osoitteet väleillä.
+installfromurlserror=Seuraavista sijainneista ei voitu asentaa: %s.
diff --git a/locale/fi/overlay.properties b/locale/fi/overlay.properties
index 3798bbb..ff02da6 100644
--- a/locale/fi/overlay.properties
+++ b/locale/fi/overlay.properties
@@ -1,10 +1,10 @@
-tooltip=Stylish - %S sivutyyli(ä), %S yleistä tyyli(ä)
+tooltip=Stylish - sivuston tyylejä: %S, yleisiä tyylejä: %S
 tooltipStylesOff=Stylish - tyylit on poissa käytöstä
-updatestyle=Päivitetäänkö varmasti tyyli \'%S\'?
+updatestyle=Haluatko varmasti päivittää tyylin \'%S\'?
 updatestyleok=Päivitä
 updatestyletitle=Päivitä tyyli
 writeblank=Tyhjä tyyli...
 writeblankaccesskey=y
-writefordomain=Sivulle %S...
+writefordomain=Sivustolle %S...
 writeforsite=Tälle osoitteelle
 writeforsiteaccesskey=T
diff --git a/locale/fr/manage.dtd b/locale/fr/manage.dtd
index 1824a3f..4f149cf 100644
--- a/locale/fr/manage.dtd
+++ b/locale/fr/manage.dtd
@@ -3,6 +3,7 @@
 <!ENTITY done "Effectué">
 <!ENTITY done.ak "f">
 <!ENTITY filter "Chercher">
+<!ENTITY installfromurls "Install from URLs...">
 <!ENTITY manageaddonstitle "Styles utilisateurs">
 <!ENTITY managetitle "Stylish">
 <!ENTITY nostylesstart "Visitez">
diff --git a/locale/fr/manage.properties b/locale/fr/manage.properties
index 4456f09..d54c1cf 100644
--- a/locale/fr/manage.properties
+++ b/locale/fr/manage.properties
@@ -19,3 +19,6 @@ globalstyledescription=Peut tout affecter.
 sitestyledescription=Affecte %S.
 tagstyledescription=Balises : %S.
 manageaddonstitle=Styles utilisateurs
+installfromurlsprompttitle=Install from URLs
+installfromurlsprompt=Enter URLs of user styles to install. These can be pages on userstyles.org or CSS files. Separate multiple URLs by spaces.
+installfromurlserror=Could not install from the following URLs: %s.
diff --git a/locale/he-IL/common.properties b/locale/he-IL/common.properties
deleted file mode 100644
index ffad959..0000000
--- a/locale/he-IL/common.properties
+++ /dev/null
@@ -1,10 +0,0 @@
-changeTags=הסרת התווית \'%S\' והוספת התוויות הבאות:
-changeTagsNoCurrent=הוספת התוויות הבאות:
-changeTagsTitle=שינוי תוויות
-deleteStyle=האם להסיר את \'%S\'?
-deleteStyleTitle=הסרת סגנון?
-deleteStyleOK=הסרה
-deleteStyles=האם להסיר את %S הסגנונות הללו בוודאות?
-deleteStylesTitle=הסרת הסגנונות?
-deleteStylesOK=הסרה
-extensions.{46551EC9-40F0-4e47-8E18-8E5CF550CFB8}.description=סגנון הרשת מחדש עם Stylish, מנהל סגנונות משתמש.
diff --git a/locale/he-IL/domi.dtd b/locale/he-IL/domi.dtd
deleted file mode 100644
index 3458fca..0000000
--- a/locale/he-IL/domi.dtd
+++ /dev/null
@@ -1 +0,0 @@
-<!ENTITY copyselector "העתקת סלקטור">
diff --git a/locale/he-IL/edit.dtd b/locale/he-IL/edit.dtd
deleted file mode 100644
index 032fc4f..0000000
--- a/locale/he-IL/edit.dtd
+++ /dev/null
@@ -1,24 +0,0 @@
-<!ENTITY chromefolder "נתיב תיקיית הכרום">
-<!ENTITY chromefolder.ak "כ">
-<!ENTITY dataURI "מידע זיהוי משאב אחיד (URI)...">
-<!ENTITY dataURI.ak "מ">
-<!ENTITY htmlnamespace "מרחב שם HTML כברירת מחדל">
-<!ENTITY htmlnamespace.ak "ח">
-<!ENTITY insert "הכנסת">
-<!ENTITY insert.ak "ה">
-<!ENTITY name "שם">
-<!ENTITY name.ak "ש">
-<!ENTITY openintexternaleditor "פתיחה באמצעות עורך חיצוני">
-<!ENTITY openintexternaleditor.ak "פ">
-<!ENTITY preview "תצוגה מקדימה">
-<!ENTITY preview.ak "צ">
-<!ENTITY save "שמירה">
-<!ENTITY save.ak "מ">
-<!ENTITY switchtoinstall "מעבר להתקנה">
-<!ENTITY switchtoinstall.ak "ע">
-<!ENTITY tags "תגיות">
-<!ENTITY tags.ak "ת">
-<!ENTITY wraplines "גלישת שורות">
-<!ENTITY wraplines.ak "ג">
-<!ENTITY xulnamespace "שם מרחב XUL כברירת מחדל">
-<!ENTITY xulnamespace.ak "ם">
diff --git a/locale/he-IL/edit.properties b/locale/he-IL/edit.properties
deleted file mode 100644
index 3bc7892..0000000
--- a/locale/he-IL/edit.properties
+++ /dev/null
@@ -1,7 +0,0 @@
-dataURIDialogTitle=בחירת קובץ להכנסה
-editstyletitle=עריכת '%S'
-newstyletitle=סגנון חדש
-missingcode=הכנסת מעט קוד לסגנון זה.
-missingname=הענקת שם לסגנון זה.
-unsavedchanges=מעוניינים לשמור השינויים שביצעתם לסגנון זה?
-unsavedchangestitle=שמירת שינויים?
diff --git a/locale/he-IL/extensions.dtd b/locale/he-IL/extensions.dtd
deleted file mode 100644
index c0d1f72..0000000
--- a/locale/he-IL/extensions.dtd
+++ /dev/null
@@ -1,160 +0,0 @@
-<!ENTITY addons.title "תוספות">
-<!-- Status Messsages -->
-<!ENTITY em.width "520">
-<!ENTITY em.height "380">
-<!ENTITY cmd.info.commandKey "i">
-<!ENTITY cmd.options.commandKey ",">
-<!ENTITY cmd.close.commandKey "w">
-<!-- View labels -->
-<!ENTITY search.label "השגת תוספות">
-<!ENTITY extensions.label "הרחבות">
-<!ENTITY themes.label "ערכות נושא">
-<!ENTITY locales.label "שפות">
-<!ENTITY plugins.label "תוספים">
-<!ENTITY update.label "עדכונים">
-<!ENTITY install.label "התקנה">
-<!-- Command Bar items -->
-<!ENTITY cmd.checkUpdatesAll.label "מציאת עדכונים">
-<!ENTITY cmd.checkUpdatesAll.accesskey "ע">
-<!ENTITY cmd.checkUpdatesAllAddon.tooltip "מציאת עדכונים לתוספות שלך">
-<!ENTITY cmd.checkUpdatesAllTheme.tooltip "מציאת עדכונים לערכות הנושא שלך">
-<!ENTITY cmd.checkUpdatesAllPlugin.tooltip "מציאת עדכונים לתוספים שלך">
-<!ENTITY cmd.installLocalFile.label "התקנה…">
-<!ENTITY cmd.installLocalFile.accesskey "ה">
-<!ENTITY cmd.installFileAddon.tooltip "התקנת תוספת">
-<!ENTITY cmd.installFileTheme.tooltip "התקנת ערכת נושא">
-<!ENTITY cmd.installUpdatesAll2.label "התקנת עדכונים">
-<!ENTITY cmd.installUpdatesAll2.accesskey "ה">
-<!ENTITY cmd.installUpdatesAll2.tooltip "התקנת עדכונים נבחרים">
-<!ENTITY cmd.restartApp2.label "הפעלה מחדש של &brandShortName;">
-<!ENTITY cmd.restartApp2.accesskey "מ">
-<!ENTITY cmd.restartApp2.tooltip "הפעלה מחדש של &brandShortName; להחלת השינויים">
-<!ENTITY cmd.skip.label "דילוג">
-<!ENTITY cmd.skip.accesskey "ד">
-<!ENTITY cmd.skip.tooltip "דילוג על עדכונים אלו">
-<!ENTITY cmd.continue.label "המשך">
-<!ENTITY cmd.continue.accesskey "מ">
-<!ENTITY cmd.continue.tooltip "המשך טעינת &brandShortName;">
-<!ENTITY cmd.enableAll.label "אפשר הכל">
-<!ENTITY cmd.enableAll.accesskey "פ">
-<!ENTITY cmd.enableAll.tooltip "אפשר כל התוספות המוצגות">
-<!ENTITY cmd.disableAll.label "נטרול הכל">
-<!ENTITY cmd.disableAll.accesskey "נ">
-<!ENTITY cmd.disableAll.tooltip "נטרול כל התוספות המוצגות">
-<!-- Displayed in the selected Add-on\'s richlistitem and context menu -->
-<!ENTITY cmd.useTheme.label "שימוש בערכת הנושא">
-<!ENTITY cmd.useTheme.accesskey "ש">
-<!ENTITY cmd.useTheme.tooltip "שינוי ערכת הנושא של &brandShortName;.">
-<!ENTITY cmd.options.label "אפשרויות">
-<!ENTITY cmd.options.accesskey "א">
-<!ENTITY cmd.options.tooltip "קביעת אפשרויות להרחבה הנבחרת">
-<!ENTITY cmd.optionsUnix.label "העדפות">
-<!ENTITY cmd.optionsUnix.accesskey "פ">
-<!ENTITY cmd.optionsUnix.tooltip "עריכת ההעדפות עבור ההרחבה הנבחרת">
-<!ENTITY cmd.enable.label "אפשר">
-<!ENTITY cmd.enable.accesskey "ש">
-<!ENTITY cmd.enable.tooltip "אפשר תוספת זו כאשר &brandShortName; מופעל מחדש">
-<!ENTITY cmd.disable.label "נטרל">
-<!ENTITY cmd.disable.accesskey "נ">
-<!ENTITY cmd.disable.tooltip "נטרול תוספת זו כאשר &brandShortName; מופעל מחדש">
-<!ENTITY cmd.uninstall.label "הסרה">
-<!ENTITY cmd.uninstall2.accesskey "ס">
-<!ENTITY cmd.uninstall2.tooltip "הסר תוספת זו כאשר &brandShortName; מופעל מחדש">
-<!ENTITY cmd.cancelUninstall.label "ביטול ההסרה">
-<!ENTITY cmd.cancelUninstall.accesskey "ב">
-<!ENTITY cmd.cancelUninstall.tooltip "ביטול ההסרה של תוספת זו">
-<!ENTITY cmd.cancelInstall.label "ביטול ההתקנה">
-<!ENTITY cmd.cancelInstall.accesskey "ב">
-<!ENTITY cmd.cancelInstall.tooltip "ביטול ההתקנה של התוספת הזו">
-<!ENTITY cmd.cancelUpgrade.label "ביטול השדרוג">
-<!ENTITY cmd.cancelUpgrade.accesskey "ב">
-<!ENTITY cmd.cancelUpgrade.tooltip "ביטול השדרוג של תוספת זו">
-<!ENTITY cmd.installUpdate.label "התקנת עדכון">
-<!ENTITY cmd.installUpdate.accesskey "ה">
-<!ENTITY cmd.installUpdate.tooltip "התקנת עדכון לתוספת זו">
-<!ENTITY cmd.showUpdateInfo.label "הצגת מידע">
-<!ENTITY cmd.showUpdateInfo.accesskey "ה">
-<!ENTITY cmd.showUpdateInfo.tooltip "הצגת מידע נוסף אודות עדכונים אלו">
-<!ENTITY cmd.hideUpdateInfo.label "הסתרת מידע">
-<!ENTITY cmd.hideUpdateInfo.accesskey "ה">
-<!ENTITY cmd.hideUpdateInfo.tooltip "הסתרת מידע אודות עדכונים אלו">
-<!ENTITY cmd.installSearchResult.label "הוספת ל־&brandShortName;…">
-<!ENTITY cmd.installSearchResult.accesskey "ה">
-<!ENTITY cmd.installSearchResult.tooltip "הורדה והתקנת תוספת זו">
-<!-- The selected add-on\'s cancel action button label -->
-<!ENTITY cancel.label "ביטול">
-<!ENTITY cancel.accesskey "ב">
-<!ENTITY cancelInstall.label "ביטול">
-<!ENTITY cancelInstall.accesskey "ב">
-<!ENTITY cancelUpgrade.label "ביטול">
-<!ENTITY cancelUpgrade.accesskey "ב">
-<!-- Only displayed in the selected Add-on\'s context menu -->
-<!ENTITY cmd.homepage.label "בקרו בדף הבית">
-<!ENTITY cmd.homepage.accesskey "ב">
-<!ENTITY cmd.about2.label "אודות תוספת זו">
-<!ENTITY cmd.about.accesskey "ד">
-<!ENTITY cmd.checkUpdate.label "מצא עדכון">
-<!ENTITY cmd.checkUpdate.accesskey "מ">
-<!ENTITY cmd.includeUpdate.label "הכללת עדכון">
-<!ENTITY cmd.includeUpdate.accesskey "כ">
-<!ENTITY includeUpdate.label "הכללת עדכון זה">
-<!ENTITY includeUpdate.accesskey "כ">
-<!ENTITY includeUpdate.tooltip "הכללת תוספת זו בעת התקנת עדכונים">
-<!-- Status Messsages -->
-<!ENTITY insecureUpdate.label "אינו מספק עדכונים מאובטחים.">
-<!ENTITY needsDependencies.label "נדרשים פריטים נוספים.">
-<!ENTITY blocklisted.label "נוטרל להגנתך.">
-<!ENTITY softBlocklisted.label "ידועה בגרימת בעיות יציבות או אבטחה.">
-<!ENTITY outdated.label "גרסה חדשה ובטוחה יותר זמינה.">
-<!ENTITY toBeDisabled.label "תוספת זו תנוטרל כאשר &brandShortName; יופעל מחדש.">
-<!ENTITY toBeEnabled.label "תוספת זו תאפשר כאשר &brandShortName; יופעל מחדש.">
-<!ENTITY toBeInstalled.label "תוספת זו תותקן כאשר &brandShortName; יופעל מחדש.">
-<!ENTITY toBeUninstalled.label "תוספת זו תוסר כאשר &brandShortName; יופעל מחדש.">
-<!ENTITY toBeUpdated.label "תוספת זו תעודכן כאשר &brandShortName; יופעל מחדש.">
-<!ENTITY getExtensions.label "השגת הרחבות">
-<!ENTITY getThemes.label "השגת ערכות נושא">
-<!ENTITY getPlugins.label "השגת תוספים">
-<!ENTITY searchAddons.label "חיפוש בכל התוספים">
-<!ENTITY browseAddons.label "עיון בכל התוספים">
-<!ENTITY searchFailed.label "&brandShortName; לא מצליח לקבל תוספות">
-<!ENTITY recommendedHeader.label "המלצות">
-<!ENTITY recommendedThrobber.label "קבלת תוספים מומלצות">
-<!ENTITY searchThrobber.label "חיפוש תוספים">
-<!ENTITY resetSearch.label "ניקוי תוצאות">
-<!ENTITY noSearchResults.label "כל התוצאות כבר מותקנות או שאינן תואמות.">
-<!ENTITY noRecommendedResults.label "כל ההמלצות כבר מותקנות או שאינן תואמות.">
-<!ENTITY emptySearch.label "לא נמצאו תוספים מתאימים">
-<!ENTITY emptySearch.button "אישור">
-<!ENTITY cancelSearch.button "ביטול">
-<!ENTITY searchFailed.button "אישור">
-<!ENTITY searchResultHomepage.value "מידע נוסף">
-<!ENTITY searchBox.label "הצגת כל התוספים">
-<!ENTITY recommendedResults.label "הצגת כל התוספים המומלצים">
-<!ENTITY searchResultConnecting.label "מתחבר…">
-<!ENTITY searchResultInstalling.label "מתקין…">
-<!ENTITY searchResultFailed.label "התקנה נכשלה">
-<!ENTITY searchResultInstalled.label "התקנה הושלמה">
-<!ENTITY addonTypeExtension.label "הרחבה">
-<!ENTITY addonTypeTheme.label "ערכת נושא">
-<!ENTITY missingThumbnail.label "אין תצוגה מקדימה">
-<!ENTITY previewNoThemeSelected.label "לא נבחרה ערכת נושא">
-<!ENTITY previewNoPreviewImage.label "לערכה זו אין תמונה לתצוגה מקדימה">
-<!ENTITY moreInfo.label "מידע נוסף">
-<!ENTITY infoNoAddonSelected.label "לא נבחרו עדכונים">
-<!ENTITY infoNoUpdateInfo.label "עדכון זה לא כולל מידע נוסף">
-<!ENTITY infoUpdateInfoError.label "אירעה תקלה בטעינת מידע אודות עדכון זה">
-<!ENTITY updateSuccess.label "עדכון הושלם בהצלחה.">
-<!ENTITY installSuccess.label "התקנה הושלמה בהצלחה.">
-<!ENTITY installSuccessRestart.label "הפעלה מחדש להשלמת ההתקנה.">
-<!ENTITY updateSuccessRestart.label "הפעלה מחדש כדי לסיים את תהליך העדכון.">
-<!ENTITY installWaiting.label "ממתין…">
-<!ENTITY installIncompatibleUpdate.label "בדיקת תאימות…">
-<!ENTITY installFinishing.label "מתקין…">
-<!ENTITY installFailure.label "התקנה נכשלה.">
-<!ENTITY progressStatus.label "בדיקה אחר עדכונים">
-<!ENTITY eula.title "הסכם רישיון למשתמש קצה">
-<!ENTITY eula.width "560px">
-<!ENTITY eula.height "400px">
-<!ENTITY eula.accept "קבלת תנאים והמשך…">
-<!ENTITY blocklist.blocked.label "נחסם">
-<!ENTITY blocklist.checkbox.label "מנוטרל">
diff --git a/locale/he-IL/install.dtd b/locale/he-IL/install.dtd
deleted file mode 100644
index a191243..0000000
--- a/locale/he-IL/install.dtd
+++ /dev/null
@@ -1,8 +0,0 @@
-<!ENTITY entername "הענקת שם לסגנון זה:">
-<!ENTITY install "התקנה">
-<!ENTITY install.ak "ה">
-<!ENTITY preview "תצוגה מקדימה">
-<!ENTITY preview.ak "ת">
-<!ENTITY switchtoedit "מעבר לעריכה">
-<!ENTITY switchtoedit.ak "ס">
-<!ENTITY title "התקנת סגנון משתמש">
diff --git a/locale/he-IL/install.properties b/locale/he-IL/install.properties
deleted file mode 100644
index b0ec853..0000000
--- a/locale/he-IL/install.properties
+++ /dev/null
@@ -1,8 +0,0 @@
-installintro=\'%S\' עומד להיות מותקן לתוך Stylish.
-installintrononame=סגנון עומד להיות מותקן לתוך Stylish.
-installapp=סגנון זה עלול להשפיע על ממשק המשתמש של %S. אולי יש צורך באתחול של %S כדי שהסגנון ישפיע.
-installglobal=יתכן וסגנון זה ישפיע על כל האתרים.
-installsite=יתכן וסגנון זה ישפיע על אתרים אלו:
-installnotype=יתכן וסגנון זה ישפיע על אתרים או על ממשק משתמש %S.
-missingname=הענקת שם לסגנון זה.
-preview.tooltip=מאפשר סגנון זה זמנית על מנת לראות אם רוצים אותו.
diff --git a/locale/he-IL/manage.dtd b/locale/he-IL/manage.dtd
deleted file mode 100644
index 7978516..0000000
--- a/locale/he-IL/manage.dtd
+++ /dev/null
@@ -1,18 +0,0 @@
-<!ENTITY changetags "שינוי תוויות">
-<!ENTITY changetags.ak "ש">
-<!ENTITY done "הסתיים">
-<!ENTITY done.ak "ג">
-<!ENTITY filter "חיפוש">
-<!ENTITY manageaddonstitle "סגנונות משתמש">
-<!ENTITY managetitle "Stylish">
-<!ENTITY nostylesstart "ביקור">
-<!ENTITY nostylesend "למידע על איך להשתמש בStylish.">
-<!ENTITY sortenabled "מאפשר">
-<!ENTITY sortname "שם">
-<!ENTITY sorttag "תווית">
-<!ENTITY sorttype "סוג">
-<!ENTITY sortgroup "מיון לפי:">
-<!ENTITY update "עדכון">
-<!ENTITY update.ak "ד">
-<!ENTITY writenew "כתיבת סגנון חדש">
-<!ENTITY writenew.ak "כ">
diff --git a/locale/he-IL/manage.properties b/locale/he-IL/manage.properties
deleted file mode 100644
index 90407ba..0000000
--- a/locale/he-IL/manage.properties
+++ /dev/null
@@ -1,21 +0,0 @@
-groupEnabledTrue=מאפשר
-groupEnabledFalse=מנוטרל
-groupTagNone=ללא תוויות
-groupTypeApp=יישום
-groupTypeGlobal=גלובלי
-groupTypeNone=ללא סוג
-groupTypeSite=אתר
-styleRegistrationOff=כל הסגנונות מנוטרלים.
-styleRegistrationTurnOn=הפעלת כל הסגנונות
-styleRegistrationTurnOn.ak=ה
-updateAvailable=עדכון זמין.
-updateCheckError=התרחשה שגיאה, בודק לעדכונים.
-updateCompleted=העדכון הושלם.
-updateFailed=העדכון נכשל.
-updateNotFound=לא נמצאו עדכונים.
-updateNotPossible=העדכונים אינם אפשריים.
-appstyledescription=משפיע על ממשק המשתמש.
-globalstyledescription=יכול להשפיע על כל דבר.
-sitestyledescription=השפעות %S.
-tagstyledescription=תוויות: %S.
-manageaddonstitle=סגנונות משתמש
diff --git a/locale/he-IL/overlay.dtd b/locale/he-IL/overlay.dtd
deleted file mode 100644
index 32aa35c..0000000
--- a/locale/he-IL/overlay.dtd
+++ /dev/null
@@ -1,12 +0,0 @@
-<!ENTITY addfile "התקנת קובץ...">
-<!ENTITY addfile.ak "ה">
-<!ENTITY findstylebrowser "מציאת סגנונות לאתר זה...">
-<!ENTITY findstylebrowser.ak "מ">
-<!ENTITY managestyles "ניהול סגנונות...">
-<!ENTITY managestyles.ak "נ">
-<!ENTITY turnon "אפשור כל הסגנונות">
-<!ENTITY turnon.ak "ד">
-<!ENTITY turnoff "נטרול כל הסגנונות">
-<!ENTITY turnoff.ak "כ">
-<!ENTITY writestyle "כתיבת סגנון חדש">
-<!ENTITY writestyle.ak "ת">
diff --git a/locale/he-IL/overlay.properties b/locale/he-IL/overlay.properties
deleted file mode 100644
index f4418a3..0000000
--- a/locale/he-IL/overlay.properties
+++ /dev/null
@@ -1,10 +0,0 @@
-tooltip=Stylish - %S סגנונות אתר, %S סגנונות גלובליים
-tooltipStylesOff=Stylish - הסגנונות מנוטרלים
-updatestyle=האם לעדכן את \'%S\'?
-updatestyleok=עדכון
-updatestyletitle=עדכון סגנון
-writeblank=סגנון ריק...
-writeblankaccesskey=ס
-writefordomain=ל%S...
-writeforsite=לכתובת אינטרנט זו...
-writeforsiteaccesskey=ל
diff --git a/locale/he-IL/common.dtd b/locale/he/common.dtd
similarity index 62%
rename from locale/he-IL/common.dtd
rename to locale/he/common.dtd
index a9bea2e..39302e4 100644
--- a/locale/he-IL/common.dtd
+++ b/locale/he/common.dtd
@@ -1,3 +1,3 @@
-<!ENTITY editstyle "עריכה">
+<!ENTITY editstyle "ערוך">
 <!ENTITY editstyle.ak "ע">
 <!ENTITY stylish "Stylish">
diff --git a/locale/he/common.properties b/locale/he/common.properties
new file mode 100644
index 0000000..6845d1b
--- /dev/null
+++ b/locale/he/common.properties
@@ -0,0 +1,10 @@
+changeTags=הסר את התג \'%S\' והוסף את התגיות הבאות:
+changeTagsNoCurrent=הוסף את התגיות הבאות:
+changeTagsTitle=שנה תגיות
+deleteStyle=האם אתה בטוח שברצונך להסיר את ההתקנה של \'%S\'?
+deleteStyleTitle=להסיר את הסגנון?
+deleteStyleOK=הסר
+deleteStyles=האם אתה בטוח שברצונך להסיר את ההתקנה של סגנונות אלה של %S?
+deleteStylesTitle=להסיר את הסגנונות?
+deleteStylesOK=הסר
+extensions.{46551EC9-40F0-4e47-8E18-8E5CF550CFB8}.description=עצב מחדש את אתרי האינטרנט עם Stylish, (עם) מנהל הסגנונות של המשתמש
diff --git a/locale/he/domi.dtd b/locale/he/domi.dtd
new file mode 100644
index 0000000..6a7cc35
--- /dev/null
+++ b/locale/he/domi.dtd
@@ -0,0 +1 @@
+<!ENTITY copyselector "העתק תו בחירה">
diff --git a/locale/he/edit.dtd b/locale/he/edit.dtd
new file mode 100644
index 0000000..24479b4
--- /dev/null
+++ b/locale/he/edit.dtd
@@ -0,0 +1,24 @@
+<!ENTITY chromefolder "נתיב תיקית Chrome">
+<!ENTITY chromefolder.ak "נ">
+<!ENTITY dataURI "Data URI...">
+<!ENTITY dataURI.ak "D">
+<!ENTITY htmlnamespace "שם מרחב HTML כברירת מחדל">
+<!ENTITY htmlnamespace.ak "ש">
+<!ENTITY insert "הכנס">
+<!ENTITY insert.ak "כ">
+<!ENTITY name "שם">
+<!ENTITY name.ak "ש">
+<!ENTITY openintexternaleditor "פתח בעורך (תמליל) חיצוני">
+<!ENTITY openintexternaleditor.ak "פ">
+<!ENTITY preview "תצוגה מקדימה">
+<!ENTITY preview.ak "צ">
+<!ENTITY save "שמור">
+<!ENTITY save.ak "מ">
+<!ENTITY switchtoinstall "עבור להתקנה">
+<!ENTITY switchtoinstall.ak "ע">
+<!ENTITY tags "תגיות">
+<!ENTITY tags.ak "ג">
+<!ENTITY wraplines "גלישת שורות">
+<!ENTITY wraplines.ak "ש">
+<!ENTITY xulnamespace "שם מרחב XUL כברירת מחדל">
+<!ENTITY xulnamespace.ak "מ">
diff --git a/locale/he/edit.properties b/locale/he/edit.properties
new file mode 100644
index 0000000..e44dc39
--- /dev/null
+++ b/locale/he/edit.properties
@@ -0,0 +1,7 @@
+dataURIDialogTitle=בחר קובץ להוספה
+editstyletitle=עורך את \'%S\'
+newstyletitle=סגנון חדש
+missingcode=הזן קטע code עבור סגנון זה.
+missingname=תן שם לסגנון הזה.
+unsavedchanges=האם את מעוניין לשמור את השינויים עבור הסגנון הזה?
+unsavedchangestitle=האם לשמור את השינויים?
diff --git a/locale/he/extensions.dtd b/locale/he/extensions.dtd
new file mode 100644
index 0000000..ece5770
--- /dev/null
+++ b/locale/he/extensions.dtd
@@ -0,0 +1,160 @@
+<!ENTITY addons.title "תוספות">
+<!-- Default window size for the addon manager in pixels -->
+<!ENTITY em.width "520">
+<!ENTITY em.height "380">
+<!ENTITY cmd.info.commandKey "i">
+<!ENTITY cmd.options.commandKey ",">
+<!ENTITY cmd.close.commandKey "w">
+<!-- View labels -->
+<!ENTITY search.label "קבל תוספות">
+<!ENTITY extensions.label "הרחבות">
+<!ENTITY themes.label "ערכות נושא">
+<!ENTITY locales.label "שפות">
+<!ENTITY plugins.label "תוספים">
+<!ENTITY update.label "עדכונים">
+<!ENTITY install.label "התקנה">
+<!-- Command Bar items -->
+<!ENTITY cmd.checkUpdatesAll.label "מצא עדכונים">
+<!ENTITY cmd.checkUpdatesAll.accesskey "מ">
+<!ENTITY cmd.checkUpdatesAllAddon.tooltip "מצא עדכונים לתוספות שלך">
+<!ENTITY cmd.checkUpdatesAllTheme.tooltip "מצא עדכונים לערכות הנושא שלך">
+<!ENTITY cmd.checkUpdatesAllPlugin.tooltip "מצא עדכונים לתוספים שלך">
+<!ENTITY cmd.installLocalFile.label "התקן...">
+<!ENTITY cmd.installLocalFile.accesskey "ק">
+<!ENTITY cmd.installFileAddon.tooltip "התקן תוסף">
+<!ENTITY cmd.installFileTheme.tooltip "התקן ערכת נושא">
+<!ENTITY cmd.installUpdatesAll2.label "התקן עדכונים">
+<!ENTITY cmd.installUpdatesAll2.accesskey "ע">
+<!ENTITY cmd.installUpdatesAll2.tooltip "התקן עדכונים שנבחרו">
+<!ENTITY cmd.restartApp2.label "הפעל מחדש">
+<!ENTITY cmd.restartApp2.accesskey "פ">
+<!ENTITY cmd.restartApp2.tooltip "הפעל מחדש להחיל את השינויים">
+<!ENTITY cmd.skip.label "דלג">
+<!ENTITY cmd.skip.accesskey "ל">
+<!ENTITY cmd.skip.tooltip "דלג על עדכון זה">
+<!ENTITY cmd.continue.label "המשך">
+<!ENTITY cmd.continue.accesskey "ש">
+<!ENTITY cmd.continue.tooltip "המשך לטעון את Firefox">
+<!ENTITY cmd.enableAll.label "אפשר הכל">
+<!ENTITY cmd.enableAll.accesskey "כ">
+<!ENTITY cmd.enableAll.tooltip "אפשר את כל התוספות שמוצגות">
+<!ENTITY cmd.disableAll.label "בטל הכל">
+<!ENTITY cmd.disableAll.accesskey "ב">
+<!ENTITY cmd.disableAll.tooltip "בטל את כל התוספות שמוצגות">
+<!-- Displayed in the selected Add-on\'s richlistitem and context menu -->
+<!ENTITY cmd.useTheme.label "השתמש בערכת נושא">
+<!ENTITY cmd.useTheme.accesskey "נ">
+<!ENTITY cmd.useTheme.tooltip "שינוי ערכת הנושא של Firefox">
+<!ENTITY cmd.options.label "אפשרויות">
+<!ENTITY cmd.options.accesskey "ש">
+<!ENTITY cmd.options.tooltip "הגדר אפשרויות עבור ההרחבה שנבחרה">
+<!ENTITY cmd.optionsUnix.label "מאפיינים">
+<!ENTITY cmd.optionsUnix.accesskey "נ">
+<!ENTITY cmd.optionsUnix.tooltip "עריכת מאפיינים עבור ההרחבה שנבחרה">
+<!ENTITY cmd.enable.label "הפוך לזמין">
+<!ENTITY cmd.enable.accesskey "פ">
+<!ENTITY cmd.enable.tooltip "הפוך הרחבה זו לזמינה כאשר Firefox מופעל מחדש">
+<!ENTITY cmd.disable.label "הפוך ללא זמין">
+<!ENTITY cmd.disable.accesskey "מ">
+<!ENTITY cmd.disable.tooltip "הפוך הרחבה זו ללא זמינה כאשר Firefox מופעל מחדש">
+<!ENTITY cmd.uninstall.label "הסרה">
+<!ENTITY cmd.uninstall2.accesskey "ס">
+<!ENTITY cmd.uninstall2.tooltip "הסר הרחבה זו כאשר Firefox מופעל מחדש">
+<!ENTITY cmd.cancelUninstall.label "בטל הסרה">
+<!ENTITY cmd.cancelUninstall.accesskey "ב">
+<!ENTITY cmd.cancelUninstall.tooltip "בטל את ההסרה הרחבה זו">
+<!ENTITY cmd.cancelInstall.label "בטל התקנה">
+<!ENTITY cmd.cancelInstall.accesskey "נ">
+<!ENTITY cmd.cancelInstall.tooltip "בטל את ההתקנה של הרחבה זו">
+<!ENTITY cmd.cancelUpgrade.label "בטל שדרוג">
+<!ENTITY cmd.cancelUpgrade.accesskey "ש">
+<!ENTITY cmd.cancelUpgrade.tooltip "בטל את השדרוג של הרחבה זו">
+<!ENTITY cmd.installUpdate.label "התקן עדכון">
+<!ENTITY cmd.installUpdate.accesskey "ע">
+<!ENTITY cmd.installUpdate.tooltip "התקן עדכון לתוספת הזאת">
+<!ENTITY cmd.showUpdateInfo.label "הצג מידע">
+<!ENTITY cmd.showUpdateInfo.accesskey "צ">
+<!ENTITY cmd.showUpdateInfo.tooltip "הצג מידע נוסף אודות עדכונים אלה">
+<!ENTITY cmd.hideUpdateInfo.label "הסתר מידע">
+<!ENTITY cmd.hideUpdateInfo.accesskey "ע">
+<!ENTITY cmd.hideUpdateInfo.tooltip "הסתר מידע נוסף אודות עדכונים אלה">
+<!ENTITY cmd.installSearchResult.label "הוסף אל Firefox...">
+<!ENTITY cmd.installSearchResult.accesskey "ס">
+<!ENTITY cmd.installSearchResult.tooltip "הורד והתקן תוספת זו">
+<!-- The selected add-on\'s cancel action button label -->
+<!ENTITY cancel.label "ביטול">
+<!ENTITY cancel.accesskey "ב">
+<!ENTITY cancelInstall.label "ביטול">
+<!ENTITY cancelInstall.accesskey "ב">
+<!ENTITY cancelUpgrade.label "ביטול">
+<!ENTITY cancelUpgrade.accesskey "ב">
+<!-- Only displayed in the selected Add-on\'s context menu -->
+<!ENTITY cmd.homepage.label "בקר בדף בית">
+<!ENTITY cmd.homepage.accesskey "ק">
+<!ENTITY cmd.about2.label "אודות תוספת זו">
+<!ENTITY cmd.about.accesskey "פ">
+<!ENTITY cmd.checkUpdate.label "מצא עדכון">
+<!ENTITY cmd.checkUpdate.accesskey "צ">
+<!ENTITY cmd.includeUpdate.label "כלול עדכון">
+<!ENTITY cmd.includeUpdate.accesskey "כ">
+<!ENTITY includeUpdate.label "כלול עדכון זה">
+<!ENTITY includeUpdate.accesskey "ע">
+<!ENTITY includeUpdate.tooltip "כלול תוספת זו בעת התקנת העדכונים">
+<!-- Status Messsages -->
+<!ENTITY insecureUpdate.label "אינו מספק עדכונים מאובטחים.">
+<!ENTITY needsDependencies.label "דורש פריטים נוספים.">
+<!ENTITY blocklisted.label "לא זמין מטעמי אבטחה.">
+<!ENTITY softBlocklisted.label "ידוע כגורם לבעיות אבטחה או יציבות.">
+<!ENTITY outdated.label "קיימת גירסה חדשה ובטוחה יותר.">
+<!ENTITY toBeDisabled.label "תוספת זו תהפוך ללא זמינה כאשר Firefox יופעל מחדש.">
+<!ENTITY toBeEnabled.label "תוספת זו תהפוך לזמינה כאשר Firefox יופעל מחדש.">
+<!ENTITY toBeInstalled.label "תוספת זו תותקן כאשר Firefox יופעל מחדש.">
+<!ENTITY toBeUninstalled.label "תוספת זו תוסר כאשר תפעיל את Firefox מחדש.">
+<!ENTITY toBeUpdated.label "תוספת זו תעודכן כאשר תפעיל את Firefox מחדש.">
+<!ENTITY getExtensions.label "קבל הרחבות">
+<!ENTITY getThemes.label "קבל ערכות נושא">
+<!ENTITY getPlugins.label "קבל תוספים">
+<!ENTITY searchAddons.label "חפש בכל התוספות">
+<!ENTITY browseAddons.label "נווט בכל התוספות">
+<!ENTITY searchFailed.label "Firefox לא הצליח למצוא מידע ולהציגו עבור התוספות">
+<!ENTITY recommendedHeader.label "מומלץ">
+<!ENTITY recommendedThrobber.label "מחפש ומציג מידע עבור תוספות מומלצות">
+<!ENTITY searchThrobber.label "מחפש תוספות">
+<!ENTITY resetSearch.label "נקה תוצאות">
+<!ENTITY noSearchResults.label "כל התוצאות הן כבר מותקנות או לא תואמות.">
+<!ENTITY noRecommendedResults.label "כל ההמלצות הן כבר מותקנות או לא תואמות.">
+<!ENTITY emptySearch.label "אין תוספות תואמות">
+<!ENTITY emptySearch.button "אישור">
+<!ENTITY cancelSearch.button "ביטול">
+<!ENTITY searchFailed.button "אישור">
+<!ENTITY searchResultHomepage.value "למד עוד">
+<!ENTITY searchBox.label "חפש בכל התוספות">
+<!ENTITY recommendedResults.label "ראה את כל התוספות המומלצות">
+<!ENTITY searchResultConnecting.label "מתחבר...">
+<!ENTITY searchResultInstalling.label "מתקין...">
+<!ENTITY searchResultFailed.label "ההתקנה נכשלה">
+<!ENTITY searchResultInstalled.label "ההתקנה הושלמה">
+<!ENTITY addonTypeExtension.label "הרחבה">
+<!ENTITY addonTypeTheme.label "ערכת נושא">
+<!ENTITY missingThumbnail.label "ללא תצוגה">
+<!ENTITY previewNoThemeSelected.label "לא נבחרה ערכת נושא">
+<!ENTITY previewNoPreviewImage.label "ערכת נושא זו היא ללא תצוגה מקדימה">
+<!ENTITY moreInfo.label "מידע נוסף">
+<!ENTITY infoNoAddonSelected.label "לא נבחר עדכון">
+<!ENTITY infoNoUpdateInfo.label "לא קיים מידע נוסף עבור עדכון זה">
+<!ENTITY infoUpdateInfoError.label "אירעה שגיאה עבור טעינת המידע אודות עדכון זה">
+<!ENTITY updateSuccess.label "העדכון הושלם בהצלחה.">
+<!ENTITY installSuccess.label "ההתקנה הושלמה בהצלחה.">
+<!ENTITY installSuccessRestart.label "הפעל מחדש להשלמת התתקנה.">
+<!ENTITY updateSuccessRestart.label "הפעל מחדש להשלמת העדכון.">
+<!ENTITY installWaiting.label "ממתין...">
+<!ENTITY installIncompatibleUpdate.label "בודק תאימות...">
+<!ENTITY installFinishing.label "מתקין...">
+<!ENTITY installFailure.label "התקנה נכשלה.">
+<!ENTITY progressStatus.label "בודק עבור עדכונים">
+<!ENTITY eula.title "הסכם רשיון למשתמש הקצה">
+<!ENTITY eula.width "560px">
+<!ENTITY eula.height "400px">
+<!ENTITY eula.accept "קבל את תנאי ההסכם והתקן...">
+<!ENTITY blocklist.blocked.label "חסום">
+<!ENTITY blocklist.checkbox.label "לא זמין">
diff --git a/locale/he/install.dtd b/locale/he/install.dtd
new file mode 100644
index 0000000..2d76c2e
--- /dev/null
+++ b/locale/he/install.dtd
@@ -0,0 +1,8 @@
+<!ENTITY entername "תן שם לסגנון הזה:">
+<!ENTITY install "התקן">
+<!ENTITY install.ak "ק">
+<!ENTITY preview "תצוגה מקדימה">
+<!ENTITY preview.ak "צ">
+<!ENTITY switchtoedit "עבור להתקנה">
+<!ENTITY switchtoedit.ak "ב">
+<!ENTITY title "התקן סגנון של משתמש">
diff --git a/locale/he/install.properties b/locale/he/install.properties
new file mode 100644
index 0000000..d2cc5f5
--- /dev/null
+++ b/locale/he/install.properties
@@ -0,0 +1,8 @@
+installintro=הינך עומד להתקין את \'%S\' ב־ Stylish
+installintrononame=הינך עומד להתקין סגנון ב־ Stylish
+installapp=סגנון זה עלול להשפיע על %S בממשק המשתמש. יתכן ויהיה עליך להפעיל את %S מחדש כדי שסגנון זה יפעל.
+installglobal=סגנון זה עלול להשפיע בכל האתרים.
+installsite=סגנון זה עלול להשפיע באתרים הבאים:
+installnotype=סגנון זה עלול להשפיע על אתרים או על %S בממשק המשתמש.
+missingname=תן שם לסגנון זה.
+preview.tooltip=מיישם באופן זמני את הסגנון הזה כדי שתוכל לראות אם הוא מוצא חן בעיניך.
diff --git a/locale/he/manage.dtd b/locale/he/manage.dtd
new file mode 100644
index 0000000..ca7275e
--- /dev/null
+++ b/locale/he/manage.dtd
@@ -0,0 +1,19 @@
+<!ENTITY changetags "שנה תגיות">
+<!ENTITY changetags.ak "ש">
+<!ENTITY done "הושלם">
+<!ENTITY done.ak "ש">
+<!ENTITY filter "חיפוש">
+<!ENTITY installfromurls "התקנת מכתובות Url...">
+<!ENTITY manageaddonstitle "סגנונות משתמש">
+<!ENTITY managetitle "Stylish">
+<!ENTITY nostylesstart "בקר באתר">
+<!ENTITY nostylesend "לקבלת מידע כיצד יש להשתמש ב־ Stylish">
+<!ENTITY sortenabled "פעיל">
+<!ENTITY sortname "שם">
+<!ENTITY sorttag "תגית">
+<!ENTITY sorttype "סוג">
+<!ENTITY sortgroup "סדר לפי:">
+<!ENTITY update "עדכן">
+<!ENTITY update.ak "ע">
+<!ENTITY writenew "כתוב סגנון חדש">
+<!ENTITY writenew.ak "כ">
diff --git a/locale/he/manage.properties b/locale/he/manage.properties
new file mode 100644
index 0000000..1f15187
--- /dev/null
+++ b/locale/he/manage.properties
@@ -0,0 +1,24 @@
+groupEnabledTrue=פעיל
+groupEnabledFalse=לא פעיל
+groupTagNone=ללא תגיות
+groupTypeApp=יישום
+groupTypeGlobal=כללי
+groupTypeNone=ללא סוג
+groupTypeSite=אתר
+styleRegistrationOff=כל הסגנונות לא פעילים
+styleRegistrationTurnOn=הפעל סגנונות
+styleRegistrationTurnOn.ak=ע
+updateAvailable=קים עדכון זמין
+updateCheckError=אירעה שגיאה בבדיקה של העדכון.
+updateCompleted=עדכון הושלם.
+updateFailed=עדכון נכשל.
+updateNotFound=לא נמצאו עדכונים.
+updateNotPossible=עדכונים אינם אפשריים.
+appstyledescription=משפיע ופועל על ממשק המשתמש.
+globalstyledescription=לא משפיע על כלום.
+sitestyledescription=משפיע על %S.
+tagstyledescription=תגיות: %S.
+manageaddonstitle=סגנונות משתמש
+installfromurlsprompttitle=התקנת מכתובות Url...
+installfromurlsprompt=הזן כתובות Url של משתמש סגנונות על מנת להתקין. אלה יכולים להיות דפים מ־ userstyles.org או קבצי CSS. יש להפריד כתובות מרובות ע"י רווחים.
+installfromurlserror=לא ניתן להתקין מכתובות ה־Url הבאות: %s.
diff --git a/locale/he/overlay.dtd b/locale/he/overlay.dtd
new file mode 100644
index 0000000..f7f5313
--- /dev/null
+++ b/locale/he/overlay.dtd
@@ -0,0 +1,12 @@
+<!ENTITY addfile "התקנת קובץ...">
+<!ENTITY addfile.ak "ב">
+<!ENTITY findstylebrowser "מצא סגנונות עבור אתר זה...">
+<!ENTITY findstylebrowser.ak "מ">
+<!ENTITY managestyles "ניהול סגנונות...">
+<!ENTITY managestyles.ak "נ">
+<!ENTITY turnon "הפעל את כל הסגנונות">
+<!ENTITY turnon.ak "ע">
+<!ENTITY turnoff "כבה את כל הסגנונות">
+<!ENTITY turnoff.ak "ב">
+<!ENTITY writestyle "כתוב סגנון חדש">
+<!ENTITY writestyle.ak "כ">
diff --git a/locale/he/overlay.properties b/locale/he/overlay.properties
new file mode 100644
index 0000000..fbde0b5
--- /dev/null
+++ b/locale/he/overlay.properties
@@ -0,0 +1,10 @@
+tooltip=%S אתרי סגנונות, %S סגנונות כלליים
+tooltipStylesOff=Stylish - סגנונות לא פעילים
+updatestyle=האם אתה בטוח שברצונך לעדכן את \'%S\'?
+updatestyleok=עדכון
+updatestyletitle=עדכן סגנון
+writeblank=סגנון ריק...
+writeblankaccesskey=נ
+writefordomain=עבור %S...
+writeforsite=עבור כתובת URL זו...
+writeforsiteaccesskey=ב
diff --git a/locale/hu-HU/manage.dtd b/locale/hu-HU/manage.dtd
index d60fefe..ee8d3c9 100644
--- a/locale/hu-HU/manage.dtd
+++ b/locale/hu-HU/manage.dtd
@@ -3,6 +3,7 @@
 <!ENTITY done "Kész">
 <!ENTITY done.ak "K">
 <!ENTITY filter "Keresés">
+<!ENTITY installfromurls "Install from URLs...">
 <!ENTITY manageaddonstitle "Stílusfájlok">
 <!ENTITY managetitle "Stylish">
 <!ENTITY nostylesstart "Látogassa meg">
diff --git a/locale/hu-HU/manage.properties b/locale/hu-HU/manage.properties
index f87e5a3..4445bca 100644
--- a/locale/hu-HU/manage.properties
+++ b/locale/hu-HU/manage.properties
@@ -19,3 +19,6 @@ globalstyledescription=Bármire hatással lehet.
 sitestyledescription=A %S -ra van hatással.
 tagstyledescription=Címkék: %S.
 manageaddonstitle=Stílusfájlok
+installfromurlsprompttitle=Install from URLs
+installfromurlsprompt=Enter URLs of user styles to install. These can be pages on userstyles.org or CSS files. Separate multiple URLs by spaces.
+installfromurlserror=Could not install from the following URLs: %s.
diff --git a/locale/it/manage.dtd b/locale/it/manage.dtd
index 33bf857..9e01fea 100644
--- a/locale/it/manage.dtd
+++ b/locale/it/manage.dtd
@@ -3,6 +3,7 @@
 <!ENTITY done "Fatto">
 <!ENTITY done.ak "F">
 <!ENTITY filter "Cerca">
+<!ENTITY installfromurls "Installa da URL…">
 <!ENTITY manageaddonstitle "Stili utente">
 <!ENTITY managetitle "Stylish">
 <!ENTITY nostylesstart "Visitare">
diff --git a/locale/it/manage.properties b/locale/it/manage.properties
index 6db9c70..3ef81a8 100644
--- a/locale/it/manage.properties
+++ b/locale/it/manage.properties
@@ -19,3 +19,6 @@ globalstyledescription=Può influire su tutti gli elementi
 sitestyledescription=Può influire su %S
 tagstyledescription=Etichette: %S
 manageaddonstitle=Stili utente
+installfromurlsprompttitle=Installazione da URL
+installfromurlsprompt=Immettere URL degli stili utente, che possono essere pagine del sito userstyles.org oppure file CSS, da installare. Separare molteplici URL tramite spazi
+installfromurlserror=Impossibile installare dai seguenti URL: %s
diff --git a/locale/ja/edit.properties b/locale/ja/edit.properties
index d7cdd40..47b8f52 100644
--- a/locale/ja/edit.properties
+++ b/locale/ja/edit.properties
@@ -4,4 +4,4 @@ newstyletitle=新しいスタイル
 missingcode=このスタイルにコードを入力してください。
 missingname=このスタイルに名前を付けてください。
 unsavedchanges=このスタイルの変更を保存しますか?
-unsavedchangestitle=変更の保存
+unsavedchangestitle=変更を保存しますか?
diff --git a/locale/ja/manage.dtd b/locale/ja/manage.dtd
index c7c8c61..7ce3b24 100644
--- a/locale/ja/manage.dtd
+++ b/locale/ja/manage.dtd
@@ -3,6 +3,7 @@
 <!ENTITY done "完了">
 <!ENTITY done.ak "D">
 <!ENTITY filter "検索">
+<!ENTITY installfromurls "URLからインストール...">
 <!ENTITY manageaddonstitle "ユーザースタイル">
 <!ENTITY managetitle "Stylish">
 <!ENTITY nostylesstart "Stylish の使い方に関する情報は">
diff --git a/locale/ja/manage.properties b/locale/ja/manage.properties
index a56af44..d0d4897 100644
--- a/locale/ja/manage.properties
+++ b/locale/ja/manage.properties
@@ -19,3 +19,6 @@ globalstyledescription=すべての Web サイトに作用します。
 sitestyledescription=作用%S
 tagstyledescription=タグ:%S
 manageaddonstitle=ユーザースタイル
+installfromurlsprompttitle=URL からインストール
+installfromurlsprompt=インストールするには、ユーザースタイルの URL を入力してください。これらは userstyles.org または CSS ファイル上のページがあります。スペースで複数の URL を区切ります。
+installfromurlserror=%s は以下の URL からインストールできませんでした。
diff --git a/locale/ko-KR/extensions.dtd b/locale/ko-KR/extensions.dtd
index 6ccd1f5..ecbcce4 100644
--- a/locale/ko-KR/extensions.dtd
+++ b/locale/ko-KR/extensions.dtd
@@ -49,7 +49,7 @@
 <!ENTITY cmd.options.accesskey "O">
 <!ENTITY cmd.options.tooltip "선택된 확장 기능 설정">
 <!ENTITY cmd.optionsUnix.label "환경 설정">
-<!ENTITY cmd.optionsUnix.accesskey "r">
+<!ENTITY cmd.optionsUnix.accesskey "P">
 <!ENTITY cmd.optionsUnix.tooltip "선택된 확장 기능 설정 편집">
 <!ENTITY cmd.enable.label "사용함">
 <!ENTITY cmd.enable.accesskey "E">
diff --git a/locale/ko-KR/manage.dtd b/locale/ko-KR/manage.dtd
index 67d7bf5..29af126 100644
--- a/locale/ko-KR/manage.dtd
+++ b/locale/ko-KR/manage.dtd
@@ -3,6 +3,7 @@
 <!ENTITY done "완료">
 <!ENTITY done.ak "D">
 <!ENTITY filter "검색">
+<!ENTITY installfromurls "주소에서 설치">
 <!ENTITY manageaddonstitle "사용자 스타일">
 <!ENTITY managetitle "Stylish">
 <!ENTITY nostylesstart "스타일리시 사용법을 알고 싶으면">
diff --git a/locale/ko-KR/manage.properties b/locale/ko-KR/manage.properties
index d8acb7b..5b81fbe 100644
--- a/locale/ko-KR/manage.properties
+++ b/locale/ko-KR/manage.properties
@@ -19,3 +19,6 @@ globalstyledescription=모든 것에 영향을 미침
 sitestyledescription=%S에 영향을 미침
 tagstyledescription=태그 : %S
 manageaddonstitle=사용자 스타일
+installfromurlsprompttitle=주소에서 설치
+installfromurlsprompt=설치를 위한 userstyles.org 혹은 CSS 파일의 주소를 입력하세요. 여러 개의 주소일 경우 스페이스로 구분합니다.
+installfromurlserror=Could not install from the following URLs: %s.
diff --git a/locale/lt/manage.dtd b/locale/lt/manage.dtd
index cf36757..975155f 100644
--- a/locale/lt/manage.dtd
+++ b/locale/lt/manage.dtd
@@ -3,6 +3,7 @@
 <!ENTITY done "Atlikta">
 <!ENTITY done.ak "A">
 <!ENTITY filter "Ieškoti">
+<!ENTITY installfromurls "Install from URLs...">
 <!ENTITY manageaddonstitle "Naudotojo stiliai">
 <!ENTITY managetitle "Stylish">
 <!ENTITY nostylesstart "Aplankykite">
diff --git a/locale/lt/manage.properties b/locale/lt/manage.properties
index f729398..593cd21 100644
--- a/locale/lt/manage.properties
+++ b/locale/lt/manage.properties
@@ -19,3 +19,6 @@ globalstyledescription=Gali paveikti viską.
 sitestyledescription=Įtakoja %S.
 tagstyledescription=Žymės: %S.
 manageaddonstitle=Naudotojo stiliai
+installfromurlsprompttitle=Install from URLs
+installfromurlsprompt=Enter URLs of user styles to install. These can be pages on userstyles.org or CSS files. Separate multiple URLs by spaces.
+installfromurlserror=Could not install from the following URLs: %s.
diff --git a/locale/nl/manage.dtd b/locale/nl/manage.dtd
index 87b8258..8151d3b 100644
--- a/locale/nl/manage.dtd
+++ b/locale/nl/manage.dtd
@@ -3,6 +3,7 @@
 <!ENTITY done "Voltooid">
 <!ENTITY done.ak "V">
 <!ENTITY filter "Zoeken">
+<!ENTITY installfromurls "Install from URLs...">
 <!ENTITY manageaddonstitle "Stijlen">
 <!ENTITY managetitle "Stylish">
 <!ENTITY nostylesstart "Bezoek">
diff --git a/locale/nl/manage.properties b/locale/nl/manage.properties
index 9ec28cc..9233444 100644
--- a/locale/nl/manage.properties
+++ b/locale/nl/manage.properties
@@ -19,3 +19,6 @@ globalstyledescription=Kan invloed op alles hebben.
 sitestyledescription=Beïnvloed %S.
 tagstyledescription=Labels: %S.
 manageaddonstitle=Stijlen
+installfromurlsprompttitle=Install from URLs
+installfromurlsprompt=Enter URLs of user styles to install. These can be pages on userstyles.org or CSS files. Separate multiple URLs by spaces.
+installfromurlserror=Could not install from the following URLs: %s.
diff --git a/locale/pl-PL/manage.dtd b/locale/pl-PL/manage.dtd
index ef8b5c1..4e3f5f7 100644
--- a/locale/pl-PL/manage.dtd
+++ b/locale/pl-PL/manage.dtd
@@ -3,6 +3,7 @@
 <!ENTITY done "Gotowe">
 <!ENTITY done.ak "G">
 <!ENTITY filter "Szukaj">
+<!ENTITY installfromurls "Install from URLs...">
 <!ENTITY manageaddonstitle "Style">
 <!ENTITY managetitle "Stylish">
 <!ENTITY nostylesstart "Przejdź na witrynę">
diff --git a/locale/pl-PL/manage.properties b/locale/pl-PL/manage.properties
index c3a3da3..6daa244 100644
--- a/locale/pl-PL/manage.properties
+++ b/locale/pl-PL/manage.properties
@@ -19,3 +19,6 @@ globalstyledescription=Może wpływać na wszystko.
 sitestyledescription=Wpływa %S.
 tagstyledescription=Znaczniki: %S.
 manageaddonstitle=Style
+installfromurlsprompttitle=Install from URLs
+installfromurlsprompt=Enter URLs of user styles to install. These can be pages on userstyles.org or CSS files. Separate multiple URLs by spaces.
+installfromurlserror=Could not install from the following URLs: %s.
diff --git a/locale/pt-BR/common.properties b/locale/pt-BR/common.properties
index 58c7594..d4c20be 100644
--- a/locale/pt-BR/common.properties
+++ b/locale/pt-BR/common.properties
@@ -7,4 +7,4 @@ deleteStyleOK=Desinstalar
 deleteStyles=Tem certeza de que deseja desinstalar esses %S estilos?
 deleteStylesTitle=Desinstalar estilos?
 deleteStylesOK=Desinstalar
-extensions.{46551EC9-40F0-4e47-8E18-8E5CF550CFB8}.description=Reestilize a web com Stylish, um gerenciador de estilos do usuário.
+extensions.{46551EC9-40F0-4e47-8E18-8E5CF550CFB8}.description=Mude o visual da sua navegação com o Stylish, um gerenciador de estilos do usuário.
diff --git a/locale/pt-BR/edit.properties b/locale/pt-BR/edit.properties
index 5e2c7ba..8b902e7 100644
--- a/locale/pt-BR/edit.properties
+++ b/locale/pt-BR/edit.properties
@@ -1,4 +1,4 @@
-dataURIDialogTitle=Escolha o Arquivo a Inserir
+dataURIDialogTitle=Escolha o arquivo a inserir
 editstyletitle=Editando \'%S\'
 newstyletitle=Novo estilo
 missingcode=Insira algum código para este estilo.
diff --git a/locale/pt-BR/extensions.dtd b/locale/pt-BR/extensions.dtd
index 873d7e9..37a1556 100644
--- a/locale/pt-BR/extensions.dtd
+++ b/locale/pt-BR/extensions.dtd
@@ -16,71 +16,71 @@
 <!-- Command Bar items -->
 <!ENTITY cmd.checkUpdatesAll.label "Localizar atualizações">
 <!ENTITY cmd.checkUpdatesAll.accesskey "L">
-<!ENTITY cmd.checkUpdatesAllAddon.tooltip "Localizar atualizações de suas extensões">
+<!ENTITY cmd.checkUpdatesAllAddon.tooltip "Localiza atualizações de suas extensões">
 <!ENTITY cmd.checkUpdatesAllTheme.tooltip "Localizar atualizações de seus temas">
-<!ENTITY cmd.checkUpdatesAllPlugin.tooltip "Localizar atualizações de seus plugins">
+<!ENTITY cmd.checkUpdatesAllPlugin.tooltip "Localiza atualizações de seus plugins">
 <!ENTITY cmd.installLocalFile.label "Instalar…">
 <!ENTITY cmd.installLocalFile.accesskey "I">
-<!ENTITY cmd.installFileAddon.tooltip "Instalar um complemento">
-<!ENTITY cmd.installFileTheme.tooltip "Instalar um tema">
+<!ENTITY cmd.installFileAddon.tooltip "Instala um complemento">
+<!ENTITY cmd.installFileTheme.tooltip "Instala um tema">
 <!ENTITY cmd.installUpdatesAll2.label "Instalar atualizações">
 <!ENTITY cmd.installUpdatesAll2.accesskey "I">
-<!ENTITY cmd.installUpdatesAll2.tooltip "Instalar as atualizações selecionadas">
+<!ENTITY cmd.installUpdatesAll2.tooltip "Instala as atualizações selecionadas">
 <!ENTITY cmd.restartApp2.label "Reiniciar o &brandShortName;">
 <!ENTITY cmd.restartApp2.accesskey "R">
-<!ENTITY cmd.restartApp2.tooltip "Reiniciar o &brandShortName; para aplicar as alterações">
+<!ENTITY cmd.restartApp2.tooltip "Reinicia o &brandShortName; para aplicar as alterações">
 <!ENTITY cmd.skip.label "Depois">
 <!ENTITY cmd.skip.accesskey "D">
-<!ENTITY cmd.skip.tooltip "Ignorar estas atualizações">
+<!ENTITY cmd.skip.tooltip "Ignora estas atualizações">
 <!ENTITY cmd.continue.label "Continuar">
 <!ENTITY cmd.continue.accesskey "C">
-<!ENTITY cmd.continue.tooltip "Continuar carregando o &brandShortName;">
+<!ENTITY cmd.continue.tooltip "Continua carregando o &brandShortName;">
 <!ENTITY cmd.enableAll.label "Ativar tudo">
 <!ENTITY cmd.enableAll.accesskey "t">
-<!ENTITY cmd.enableAll.tooltip "Ativar todos os complementos exibidos">
+<!ENTITY cmd.enableAll.tooltip "Ativa todos os complementos exibidos">
 <!ENTITY cmd.disableAll.label "Desativar tudo">
 <!ENTITY cmd.disableAll.accesskey "D">
-<!ENTITY cmd.disableAll.tooltip "Desativar todos os complementos exibidos">
+<!ENTITY cmd.disableAll.tooltip "Desativa todos os complementos exibidos">
 <!-- Displayed in the selected Add-on\'s richlistitem and context menu -->
 <!ENTITY cmd.useTheme.label "Usar o tema">
 <!ENTITY cmd.useTheme.accesskey "U">
-<!ENTITY cmd.useTheme.tooltip "Modificar o tema do &brandShortName;">
+<!ENTITY cmd.useTheme.tooltip "Modifica o tema do &brandShortName;">
 <!ENTITY cmd.options.label "Opções">
 <!ENTITY cmd.options.accesskey "o">
-<!ENTITY cmd.options.tooltip "Definir as opções da extensão selecionada">
+<!ENTITY cmd.options.tooltip "Define as opções da extensão selecionada">
 <!ENTITY cmd.optionsUnix.label "Preferências">
 <!ENTITY cmd.optionsUnix.accesskey "P">
-<!ENTITY cmd.optionsUnix.tooltip "Definir as preferências da extensão selecionada">
+<!ENTITY cmd.optionsUnix.tooltip "Define as preferências da extensão selecionada">
 <!ENTITY cmd.enable.label "Ativar">
 <!ENTITY cmd.enable.accesskey "A">
-<!ENTITY cmd.enable.tooltip "Ativar este complemento quando o &brandShortName; for reiniciado">
+<!ENTITY cmd.enable.tooltip "Ativa este complemento quando o &brandShortName; for reiniciado">
 <!ENTITY cmd.disable.label "Desativar">
 <!ENTITY cmd.disable.accesskey "e">
-<!ENTITY cmd.disable.tooltip "Desativar este complemento quando o &brandShortName; for reiniciado">
+<!ENTITY cmd.disable.tooltip "Desativa este complemento quando o &brandShortName; for reiniciado">
 <!ENTITY cmd.uninstall.label "Desinstalar">
 <!ENTITY cmd.uninstall2.accesskey "D">
-<!ENTITY cmd.uninstall2.tooltip "Desinstalar este complemento quando o &brandShortName; for reiniciado">
+<!ENTITY cmd.uninstall2.tooltip "Desinstala este complemento quando o &brandShortName; for reiniciado">
 <!ENTITY cmd.cancelUninstall.label "Cancelar desinstalação">
 <!ENTITY cmd.cancelUninstall.accesskey "C">
-<!ENTITY cmd.cancelUninstall.tooltip "Cancelar a desinstalação deste complemento">
+<!ENTITY cmd.cancelUninstall.tooltip "Cancela a desinstalação deste complemento">
 <!ENTITY cmd.cancelInstall.label "Cancelar instalação">
 <!ENTITY cmd.cancelInstall.accesskey "C">
-<!ENTITY cmd.cancelInstall.tooltip "Cancelar a instalação deste complemento">
+<!ENTITY cmd.cancelInstall.tooltip "Cancela a instalação deste complemento">
 <!ENTITY cmd.cancelUpgrade.label "Cancelar atualização">
 <!ENTITY cmd.cancelUpgrade.accesskey "C">
-<!ENTITY cmd.cancelUpgrade.tooltip "Cancelar a atualização deste complemento">
+<!ENTITY cmd.cancelUpgrade.tooltip "Cancela a atualização deste complemento">
 <!ENTITY cmd.installUpdate.label "Instalar atualização">
 <!ENTITY cmd.installUpdate.accesskey "I">
-<!ENTITY cmd.installUpdate.tooltip "Instalar uma atualização deste complemento">
+<!ENTITY cmd.installUpdate.tooltip "Instala uma atualização deste complemento">
 <!ENTITY cmd.showUpdateInfo.label "Exibir informações">
 <!ENTITY cmd.showUpdateInfo.accesskey "x">
-<!ENTITY cmd.showUpdateInfo.tooltip "Exibir mais informações sobre estas atualizações">
+<!ENTITY cmd.showUpdateInfo.tooltip "Exibe mais informações sobre estas atualizações">
 <!ENTITY cmd.hideUpdateInfo.label "Ocultar informações">
 <!ENTITY cmd.hideUpdateInfo.accesskey "O">
-<!ENTITY cmd.hideUpdateInfo.tooltip "Ocultar informações sobre estas atualizações">
+<!ENTITY cmd.hideUpdateInfo.tooltip "Oculta informações sobre estas atualizações">
 <!ENTITY cmd.installSearchResult.label "Adicionar ao &brandShortName;…">
 <!ENTITY cmd.installSearchResult.accesskey "A">
-<!ENTITY cmd.installSearchResult.tooltip "Receber e instalar este complemento">
+<!ENTITY cmd.installSearchResult.tooltip "Recebe e instala este complemento">
 <!-- The selected add-on\'s cancel action button label -->
 <!ENTITY cancel.label "Cancelar">
 <!ENTITY cancel.accesskey "C">
@@ -93,32 +93,32 @@
 <!ENTITY cmd.homepage.accesskey "V">
 <!ENTITY cmd.about2.label "Sobre este complemento">
 <!ENTITY cmd.about.accesskey "S">
-<!ENTITY cmd.checkUpdate.label "Localizar atualização">
-<!ENTITY cmd.checkUpdate.accesskey "L">
+<!ENTITY cmd.checkUpdate.label "Procurar atualização">
+<!ENTITY cmd.checkUpdate.accesskey "P">
 <!ENTITY cmd.includeUpdate.label "Incluir atualização">
 <!ENTITY cmd.includeUpdate.accesskey "n">
 <!ENTITY includeUpdate.label "Incluir atualização">
 <!ENTITY includeUpdate.accesskey "n">
-<!ENTITY includeUpdate.tooltip "Incluir este complemento ao instalar as atualizações">
+<!ENTITY includeUpdate.tooltip "Inclui este complemento ao instalar as atualizações">
 <!-- Status Messsages -->
 <!ENTITY insecureUpdate.label "Não fornece um método seguro de atualização.">
 <!ENTITY needsDependencies.label "Necessita de itens adicionais.">
 <!ENTITY blocklisted.label "Desativado para sua proteção.">
-<!ENTITY softBlocklisted.label "Sabida causa de problemas de segurança ou estabilidade.">
+<!ENTITY softBlocklisted.label "Conhecido por causar problemas de segurança ou estabilidade.">
 <!ENTITY outdated.label "Uma versão mais recente e segura está disponível.">
 <!ENTITY toBeDisabled.label "Este complemento será desativado quando o &brandShortName; for reiniciado.">
 <!ENTITY toBeEnabled.label "Este complemento será ativado quando o &brandShortName; for reiniciado.">
 <!ENTITY toBeInstalled.label "Este complemento será instalado quando o &brandShortName; for reiniciado.">
 <!ENTITY toBeUninstalled.label "Este complemento será desinstalado quando o &brandShortName; for reiniciado.">
 <!ENTITY toBeUpdated.label "Este complemento será atualizado quando o &brandShortName; for reiniciado.">
-<!ENTITY getExtensions.label "Mais extensões">
-<!ENTITY getThemes.label "Mais temas">
-<!ENTITY getPlugins.label "Mais plugins">
-<!ENTITY searchAddons.label "Pesquisar complementos">
-<!ENTITY browseAddons.label "Exibir todos os complementos">
+<!ENTITY getExtensions.label "Adicionar extensões">
+<!ENTITY getThemes.label "Adicionar temas">
+<!ENTITY getPlugins.label "Adicionar plugins">
+<!ENTITY searchAddons.label "Pesquisar todos os complementos">
+<!ENTITY browseAddons.label "Navegar em todos os complementos">
 <!ENTITY searchFailed.label "O &brandShortName; não conseguiu carregar complementos">
-<!ENTITY recommendedHeader.label "Recomendações">
-<!ENTITY recommendedThrobber.label "Carregando as recomendações">
+<!ENTITY recommendedHeader.label "Recomendados">
+<!ENTITY recommendedThrobber.label "Carregando complementos recomendados">
 <!ENTITY searchThrobber.label "Pesquisando complementos">
 <!ENTITY resetSearch.label "Limpar resultados">
 <!ENTITY noSearchResults.label "Todos os resultados já estão instalados ou são incompatíveis.">
@@ -129,7 +129,7 @@
 <!ENTITY searchFailed.button "OK">
 <!ENTITY searchResultHomepage.value "Saiba mais">
 <!ENTITY searchBox.label "Pesquisar todos os complementos">
-<!ENTITY recommendedResults.label "Exibir todas as recomendações">
+<!ENTITY recommendedResults.label "Ver todos os complementos recomendados">
 <!ENTITY searchResultConnecting.label "Conectando…">
 <!ENTITY searchResultInstalling.label "Instalando…">
 <!ENTITY searchResultFailed.label "Falha na instalação">
@@ -138,10 +138,10 @@
 <!ENTITY addonTypeTheme.label "Tema">
 <!ENTITY missingThumbnail.label "Sem visualização">
 <!ENTITY previewNoThemeSelected.label "Nenhum tema selecionado.">
-<!ENTITY previewNoPreviewImage.label "O tema não possui uma imagem para visualização.">
+<!ENTITY previewNoPreviewImage.label "Este tema não tem uma imagem para visualização">
 <!ENTITY moreInfo.label "Mais informações">
 <!ENTITY infoNoAddonSelected.label "Nenhuma atualização selecionada">
-<!ENTITY infoNoUpdateInfo.label "Esta atualização não possui informações adicionais.">
+<!ENTITY infoNoUpdateInfo.label "Esta atualização não tem nenhuma informação adicional">
 <!ENTITY infoUpdateInfoError.label "Houve um erro durante o carregamento de informações sobre esta atualização">
 <!ENTITY updateSuccess.label "Atualização concluída com êxito.">
 <!ENTITY installSuccess.label "Instalação concluída com êxito.">
@@ -150,8 +150,8 @@
 <!ENTITY installWaiting.label "Aguardando…">
 <!ENTITY installIncompatibleUpdate.label "Verificando compatibilidade…">
 <!ENTITY installFinishing.label "Instalando…">
-<!ENTITY installFailure.label "Falha na instalação">
-<!ENTITY progressStatus.label "Verificando atualizações…">
+<!ENTITY installFailure.label "Falha na instalação.">
+<!ENTITY progressStatus.label "Verificando atualizações">
 <!ENTITY eula.title "Acordo de licença para o usuário final">
 <!ENTITY eula.width "560px">
 <!ENTITY eula.height "400px">
diff --git a/locale/pt-BR/manage.dtd b/locale/pt-BR/manage.dtd
index 7412fac..6384e56 100644
--- a/locale/pt-BR/manage.dtd
+++ b/locale/pt-BR/manage.dtd
@@ -3,6 +3,7 @@
 <!ENTITY done "Pronto">
 <!ENTITY done.ak "P">
 <!ENTITY filter "Buscar">
+<!ENTITY installfromurls "Install from URLs...">
 <!ENTITY manageaddonstitle "Estilos de Usuário">
 <!ENTITY managetitle "Stylish">
 <!ENTITY nostylesstart "Visitar">
diff --git a/locale/pt-BR/manage.properties b/locale/pt-BR/manage.properties
index d648157..4af5cd3 100644
--- a/locale/pt-BR/manage.properties
+++ b/locale/pt-BR/manage.properties
@@ -19,3 +19,6 @@ globalstyledescription=Pode afetar qualquer coisa.
 sitestyledescription=Afeta %S.
 tagstyledescription=Marcadores: %S.
 manageaddonstitle=Estilos de Usuário
+installfromurlsprompttitle=Install from URLs
+installfromurlsprompt=Enter URLs of user styles to install. These can be pages on userstyles.org or CSS files. Separate multiple URLs by spaces.
+installfromurlserror=Could not install from the following URLs: %S.
diff --git a/locale/pt-BR/overlay.properties b/locale/pt-BR/overlay.properties
index 8bf9c76..036b324 100644
--- a/locale/pt-BR/overlay.properties
+++ b/locale/pt-BR/overlay.properties
@@ -1,10 +1,10 @@
 tooltip=Stylish - %S estilo(s) de site, %S estilo(s) global(is)
-tooltipStylesOff=Stylish - Estilos estão desativados
+tooltipStylesOff=Stylish - Os estilos estão desativados
 updatestyle=Tem certeza que quer atualizar \'%S\'?
 updatestyleok=Atualizar
-updatestyletitle=Atualizar Estilo
-writeblank=Estilo Vazio...
+updatestyletitle=Atualizar estilo
+writeblank=Estilo vazio…
 writeblankaccesskey=V
-writefordomain=Para %S...
-writeforsite=Para esta URL...
+writefordomain=Para %S…
+writeforsite=Para esta URL…
 writeforsiteaccesskey=U
diff --git a/locale/ro-RO/manage.dtd b/locale/ro-RO/manage.dtd
index 7abd92c..609c68e 100644
--- a/locale/ro-RO/manage.dtd
+++ b/locale/ro-RO/manage.dtd
@@ -3,6 +3,7 @@
 <!ENTITY done "Done">
 <!ENTITY done.ak "D">
 <!ENTITY filter "Search">
+<!ENTITY installfromurls "Install from URLs...">
 <!ENTITY manageaddonstitle "User Styles">
 <!ENTITY managetitle "Stylish">
 <!ENTITY nostylesstart "Visit">
diff --git a/locale/ro-RO/manage.properties b/locale/ro-RO/manage.properties
index 5bdfaaa..d402745 100644
--- a/locale/ro-RO/manage.properties
+++ b/locale/ro-RO/manage.properties
@@ -19,3 +19,6 @@ globalstyledescription=Poate afecta totul.
 sitestyledescription=Afecteaza %S.
 tagstyledescription=Etichete: %S.
 manageaddonstitle=Stiluri de utilizator
+installfromurlsprompttitle=Install from URLs
+installfromurlsprompt=Enter URLs of user styles to install. These can be pages on userstyles.org or CSS files. Separate multiple URLs by spaces.
+installfromurlserror=Could not install from the following URLs: %s.
diff --git a/locale/ru-RU/manage.dtd b/locale/ru-RU/manage.dtd
index 44506ad..541bb49 100644
--- a/locale/ru-RU/manage.dtd
+++ b/locale/ru-RU/manage.dtd
@@ -3,6 +3,7 @@
 <!ENTITY done "Завершено">
 <!ENTITY done.ak "З">
 <!ENTITY filter "Поиск">
+<!ENTITY installfromurls "Установка стилей по URL адресам…">
 <!ENTITY manageaddonstitle "Стили">
 <!ENTITY managetitle "Stylish">
 <!ENTITY nostylesstart "Для информации о том, как использовать Stylish, посетите">
diff --git a/locale/ru-RU/manage.properties b/locale/ru-RU/manage.properties
index 979e461..a5d0618 100644
--- a/locale/ru-RU/manage.properties
+++ b/locale/ru-RU/manage.properties
@@ -19,3 +19,6 @@ globalstyledescription=Может повлиять нa всё.
 sitestyledescription=Влияет на %S.
 tagstyledescription=Теги: %S.
 manageaddonstitle=Стили
+installfromurlsprompttitle=Установка стилей по URL адресам
+installfromurlsprompt=Введите URL адреса стилей, которые хотите установить. Это могут быть страницы на userstyles.org или CSS файлы. При указании нескольких URL адресов, разделяйте их пробелами.
+installfromurlserror=Не удалось установить стили по следующим URL адресам: %s.
diff --git a/locale/sr/manage.dtd b/locale/sr/manage.dtd
index 724523c..774c86e 100644
--- a/locale/sr/manage.dtd
+++ b/locale/sr/manage.dtd
@@ -3,6 +3,7 @@
 <!ENTITY done "Готово">
 <!ENTITY done.ak "Г">
 <!ENTITY filter "Претражи">
+<!ENTITY installfromurls "Install from URLs...">
 <!ENTITY manageaddonstitle "Кориснички стилови">
 <!ENTITY managetitle "Stylish">
 <!ENTITY nostylesstart "Посетите">
diff --git a/locale/sr/manage.properties b/locale/sr/manage.properties
index 1b8c342..442eaaf 100644
--- a/locale/sr/manage.properties
+++ b/locale/sr/manage.properties
@@ -19,3 +19,6 @@ globalstyledescription=Може да утиче на било шта.
 sitestyledescription=Утиче на %S.
 tagstyledescription=Ознаке: %S.
 manageaddonstitle=Кориснички стилови
+installfromurlsprompttitle=Install from URLs
+installfromurlsprompt=Enter URLs of user styles to install. These can be pages on userstyles.org or CSS files. Separate multiple URLs by spaces.
+installfromurlserror=Could not install from the following URLs: %s.
diff --git a/locale/sv-SE/common.properties b/locale/sv-SE/common.properties
index 4c1cb37..bd96271 100644
--- a/locale/sv-SE/common.properties
+++ b/locale/sv-SE/common.properties
@@ -2,7 +2,7 @@ changeTags=Ta bort taggen '%S' och lägg till följande taggar:
 changeTagsNoCurrent=Lägg till följande taggar:
 changeTagsTitle=Byt taggar
 deleteStyle=Är du säker på att du vill avinstallera "%S"?
-deleteStyleTitle=Avinstallera stylen?
+deleteStyleTitle=Avinstallera denna style?
 deleteStyleOK=Avinstallera
 deleteStyles=Är du säker på att du vill avinstallera dessa %S styles?
 deleteStylesTitle=Avinstallera styles?
diff --git a/locale/sv-SE/manage.dtd b/locale/sv-SE/manage.dtd
index 338140c..feb0cd7 100644
--- a/locale/sv-SE/manage.dtd
+++ b/locale/sv-SE/manage.dtd
@@ -3,6 +3,7 @@
 <!ENTITY done "Klar">
 <!ENTITY done.ak "K">
 <!ENTITY filter "Sök">
+<!ENTITY installfromurls "Installera från URL:er…">
 <!ENTITY manageaddonstitle "Userstyles">
 <!ENTITY managetitle "Stylish">
 <!ENTITY nostylesstart "Gå till">
diff --git a/locale/sv-SE/manage.properties b/locale/sv-SE/manage.properties
index cb77fd0..a14af1d 100644
--- a/locale/sv-SE/manage.properties
+++ b/locale/sv-SE/manage.properties
@@ -19,3 +19,6 @@ globalstyledescription=Kan påverka vadsomhelst.
 sitestyledescription=Påverkar %S.
 tagstyledescription=Taggar: %S.
 manageaddonstitle=Userstyles
+installfromurlsprompttitle=Installera från URL:er
+installfromurlsprompt=Ange URL:er till userstyles att installera. Dessa kan vara sidor på userstyles.org eller CSS-filer. Separera URL:erna med mellanslag.
+installfromurlserror=Kunde inte installera från följande URL:er: %s.
diff --git a/locale/uk/manage.dtd b/locale/uk/manage.dtd
index 47ae682..1cf23c2 100644
--- a/locale/uk/manage.dtd
+++ b/locale/uk/manage.dtd
@@ -3,6 +3,7 @@
 <!ENTITY done "Готово">
 <!ENTITY done.ak "Г">
 <!ENTITY filter "Шукати:">
+<!ENTITY installfromurls "Install from URLs...">
 <!ENTITY manageaddonstitle "Стилі">
 <!ENTITY managetitle "Stylish">
 <!ENTITY nostylesstart "Завітайте">
diff --git a/locale/uk/manage.properties b/locale/uk/manage.properties
index c01ed42..3ead3ac 100644
--- a/locale/uk/manage.properties
+++ b/locale/uk/manage.properties
@@ -19,3 +19,6 @@ globalstyledescription=Може стосуватись усього.
 sitestyledescription=Стосується %S.
 tagstyledescription=Мітки: %S.
 manageaddonstitle=Стилі
+installfromurlsprompttitle=Install from URLs
+installfromurlsprompt=Enter URLs of user styles to install. These can be pages on userstyles.org or CSS files. Separate multiple URLs by spaces.
+installfromurlserror=Could not install from the following URLs: %s.
diff --git a/locale/vi/manage.dtd b/locale/vi/manage.dtd
index 67d936e..034ef95 100644
--- a/locale/vi/manage.dtd
+++ b/locale/vi/manage.dtd
@@ -3,6 +3,7 @@
 <!ENTITY done "Xong">
 <!ENTITY done.ak "X">
 <!ENTITY filter "Tìm kiếm">
+<!ENTITY installfromurls "Install from URLs...">
 <!ENTITY manageaddonstitle "Style Người dùng">
 <!ENTITY managetitle "Stylish">
 <!ENTITY nostylesstart "Vào">
diff --git a/locale/vi/manage.properties b/locale/vi/manage.properties
index 88e32d5..df76b12 100644
--- a/locale/vi/manage.properties
+++ b/locale/vi/manage.properties
@@ -19,3 +19,6 @@ globalstyledescription=Can affect anything.
 sitestyledescription=Affects %S.
 tagstyledescription=Tags: %S.
 manageaddonstitle=Style Người dùng
+installfromurlsprompttitle=Install from URLs
+installfromurlsprompt=Enter URLs of user styles to install. These can be pages on userstyles.org or CSS files. Separate multiple URLs by spaces.
+installfromurlserror=Could not install from the following URLs: %s.
diff --git a/locale/zh-CN/manage.dtd b/locale/zh-CN/manage.dtd
index 2011b20..657ee32 100644
--- a/locale/zh-CN/manage.dtd
+++ b/locale/zh-CN/manage.dtd
@@ -3,6 +3,7 @@
 <!ENTITY done "完成">
 <!ENTITY done.ak "D">
 <!ENTITY filter "搜索">
+<!ENTITY installfromurls "Install from URLs...">
 <!ENTITY manageaddonstitle "用户样式">
 <!ENTITY managetitle "Stylish">
 <!ENTITY nostylesstart "浏览">
diff --git a/locale/zh-CN/manage.properties b/locale/zh-CN/manage.properties
index 79d8407..aef9a66 100644
--- a/locale/zh-CN/manage.properties
+++ b/locale/zh-CN/manage.properties
@@ -19,3 +19,6 @@ globalstyledescription=不能更改。
 sitestyledescription=生效 %S。
 tagstyledescription=标签: %S。
 manageaddonstitle=用户样式
+installfromurlsprompttitle=Install from URLs
+installfromurlsprompt=Enter URLs of user styles to install. These can be pages on userstyles.org or CSS files. Separate multiple URLs by spaces.
+installfromurlserror=Could not install from the following URLs: %s.
diff --git a/locale/zh-TW/common.properties b/locale/zh-TW/common.properties
index 011c9ed..ef97bf2 100644
--- a/locale/zh-TW/common.properties
+++ b/locale/zh-TW/common.properties
@@ -1,4 +1,4 @@
-changeTags=移除「%S」標籤並且增加以下標籤:
+changeTags=移除「%S」標籤並增加以下標籤:
 changeTagsNoCurrent=增加以下標籤:
 changeTagsTitle=變更標籤
 deleteStyle=你確定要移除「%S」嗎?
@@ -7,4 +7,4 @@ deleteStyleOK=移除
 deleteStyles=你確定要移除這 %S 個樣式嗎?
 deleteStylesTitle=移除這些樣式?
 deleteStylesOK=移除
-extensions.{46551EC9-40F0-4e47-8E18-8E5CF550CFB8}.description=使用 Stylish 打造專屬你的網頁與使用者介面!
+extensions.{46551EC9-40F0-4e47-8E18-8E5CF550CFB8}.description=使用 Stylish 打造專屬你的網頁與使用者介面!
diff --git a/locale/zh-TW/manage.dtd b/locale/zh-TW/manage.dtd
index fcb8594..21311ce 100644
--- a/locale/zh-TW/manage.dtd
+++ b/locale/zh-TW/manage.dtd
@@ -3,6 +3,7 @@
 <!ENTITY done "完成(D)">
 <!ENTITY done.ak "D">
 <!ENTITY filter "搜尋">
+<!ENTITY installfromurls "從 URL 安裝...">
 <!ENTITY manageaddonstitle "使用者樣式">
 <!ENTITY managetitle "Stylish">
 <!ENTITY nostylesstart "瀏覽">
diff --git a/locale/zh-TW/manage.properties b/locale/zh-TW/manage.properties
index 58b386c..c19ac9d 100644
--- a/locale/zh-TW/manage.properties
+++ b/locale/zh-TW/manage.properties
@@ -19,3 +19,6 @@ globalstyledescription=影響所有設定。
 sitestyledescription=影響 %S。
 tagstyledescription=標籤:%S。
 manageaddonstitle=使用者樣式
+installfromurlsprompttitle=從 URL 安裝
+installfromurlsprompt=輸入 URL 以進行安裝,可以是 userstyles.org 頁面或 CSS 檔案;多組 URL 請以空白區隔。
+installfromurlserror=無法從這個 URL 安裝: %s。
diff --git a/skin/manage-addons-fx11.css b/skin/manage-addons-fx11.css
new file mode 100644
index 0000000..e5c6dad
--- /dev/null
+++ b/skin/manage-addons-fx11.css
@@ -0,0 +1,3 @@
+#install-from-url, #no-styles-install-from-url {
+	display: -moz-box !important;
+}
diff --git a/skin/manage-addons-fx4.css b/skin/manage-addons-fx4.css
index 935a08b..58cd0b0 100644
--- a/skin/manage-addons-fx4.css
+++ b/skin/manage-addons-fx4.css
@@ -45,3 +45,11 @@ richlistitem[type="userstyle"] [anonid="date-updated"] {
 #list-view[type="userstyle"] #addon-list-empty:not([hidden]) ~ #userstyle-footer {
 	display: none;
 }
+/* Override add-ons manager's "disabled is display: none" */
+#install-from-url, #no-styles-install-from-url {
+	display: -moz-box;
+}
+/* Override Gnome "no images in buttons" */
+#install-from-url:not([image=""]) .button-icon, #no-styles-install-from-url:not([image=""]) .button-icon {
+	display: -moz-box;
+}

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



More information about the Pkg-mozext-commits mailing list