tbb-commits
Threads by month
- ----- 2025 -----
- June
- May
- April
- March
- February
- January
- ----- 2024 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2023 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2022 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2021 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2020 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2019 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2018 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2017 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2016 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2015 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2014 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
October 2019
- 3 participants
- 154 discussions

[tor-browser-build/master] Pick up latest browser changes for build2
by gk@torproject.org 12 Oct '19
by gk@torproject.org 12 Oct '19
12 Oct '19
commit dd7cf4d480a74f416795c449e75ed7d2935956a3
Author: Georg Koppen <gk(a)torproject.org>
Date: Sat Oct 12 19:37:49 2019 +0000
Pick up latest browser changes for build2
---
projects/firefox/config | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/projects/firefox/config b/projects/firefox/config
index 55de6de..ac2ceb2 100644
--- a/projects/firefox/config
+++ b/projects/firefox/config
@@ -1,7 +1,7 @@
# vim: filetype=yaml sw=2
version: '[% c("abbrev") %]'
filename: 'firefox-[% c("version") %]-[% c("var/osname") %]-[% c("var/build_id") %]'
-git_hash: 'tor-browser-[% c("var/firefox_version") %]-[% c("var/torbrowser_branch") %]-2-build4'
+git_hash: 'tor-browser-[% c("var/firefox_version") %]-[% c("var/torbrowser_branch") %]-2-build5'
tag_gpg_id: 1
git_url: https://git.torproject.org/tor-browser.git
git_submodule: 1
1
0
commit 7a6350089a20d864b338bff35d13672479991b26
Author: Georg Koppen <gk(a)torproject.org>
Date: Sat Oct 12 19:38:15 2019 +0000
9.0a8-build2
---
rbm.conf | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/rbm.conf b/rbm.conf
index eae7d86..3ba38e4 100644
--- a/rbm.conf
+++ b/rbm.conf
@@ -25,7 +25,7 @@ buildconf:
var:
torbrowser_version: '9.0a8'
- torbrowser_build: 'build1'
+ torbrowser_build: 'build2'
torbrowser_incremental_from:
- 9.0a7
project_name: tor-browser
1
0

[tor-browser/tor-browser-68.1.0esr-9.0-2] fixup! TB4: Tor Browser's Firefox preference overrides.
by gk@torproject.org 12 Oct '19
by gk@torproject.org 12 Oct '19
12 Oct '19
commit 5e45bc82579d4d712e0f34cb58ad62f1030127ca
Author: Alex Catarineu <acat(a)torproject.org>
Date: Thu Oct 3 16:45:57 2019 +0200
fixup! TB4: Tor Browser's Firefox preference overrides.
Bug 19417: reenable asmjs
---
browser/app/profile/000-tor-browser.js | 3 ---
1 file changed, 3 deletions(-)
diff --git a/browser/app/profile/000-tor-browser.js b/browser/app/profile/000-tor-browser.js
index c146a83e26fe..78b252846689 100644
--- a/browser/app/profile/000-tor-browser.js
+++ b/browser/app/profile/000-tor-browser.js
@@ -245,9 +245,6 @@ pref("browser.policies.testing.disallowEnterprise", true);
// Security slider
pref("svg.in-content.enabled", true);
pref("mathml.disabled", false);
-// Until we address at least the linkability concerns in #19417 let's disable
-// asmjs.
-pref("javascript.options.asmjs", false);
// Unless we audit wasm properly in #21549 let's disable it.
pref("javascript.options.wasm", false);
// Mozilla keeps still finding critical bugs in Graphite code. Disable it for
1
0
commit c2ba1e9d235da2f0fe5a9ab23162d37f1e2721f5
Author: Georg Koppen <gk(a)torproject.org>
Date: Sat Oct 12 13:24:22 2019 +0000
Release prep for 9.0a8
Changelog update and versions bump
---
projects/firefox/config | 2 +-
.../tor-browser/Bundle-Data/Docs/ChangeLog.txt | 51 ++++++++++++++++++++++
projects/tor-launcher/config | 2 +-
projects/tor/config | 2 +-
rbm.conf | 4 +-
5 files changed, 56 insertions(+), 5 deletions(-)
diff --git a/projects/firefox/config b/projects/firefox/config
index 63d2652..55de6de 100644
--- a/projects/firefox/config
+++ b/projects/firefox/config
@@ -1,7 +1,7 @@
# vim: filetype=yaml sw=2
version: '[% c("abbrev") %]'
filename: 'firefox-[% c("version") %]-[% c("var/osname") %]-[% c("var/build_id") %]'
-git_hash: 'tor-browser-[% c("var/firefox_version") %]-[% c("var/torbrowser_branch") %]-2-build3'
+git_hash: 'tor-browser-[% c("var/firefox_version") %]-[% c("var/torbrowser_branch") %]-2-build4'
tag_gpg_id: 1
git_url: https://git.torproject.org/tor-browser.git
git_submodule: 1
diff --git a/projects/tor-browser/Bundle-Data/Docs/ChangeLog.txt b/projects/tor-browser/Bundle-Data/Docs/ChangeLog.txt
index 519e228..56a7725 100644
--- a/projects/tor-browser/Bundle-Data/Docs/ChangeLog.txt
+++ b/projects/tor-browser/Bundle-Data/Docs/ChangeLog.txt
@@ -1,3 +1,54 @@
+Tor Browser 9.0a8 -- October 14 2019
+ * All Platforms
+ * Bug 13543: Spoof smooth and powerEfficient for Media Capabilities
+ * Bug 28196: about:preferences is not properly translated anymore
+ * Bug 19417: Disable asmjs on safer and safest security levels
+ * Bug 30463: Explicitly disable MOZ_TELEMETRY_REPORTING
+ * Bug 31935: Disable profile downgrade protection
+ * Bug 31811: Backport fix for bug 1554805
+ * Bug 16285: Disable DRM/EME on Android and drop Adobe CDM
+ * Bug 31602: Remove Pocket indicators in UI and disable it
+ * Bug 31914: Fix eslint linter error
+ * Translations update
+ * Windows + OS X + Linux
+ * Update Tor to 0.4.2.2-alpha
+ * Update Tor Launcher to 0.2.19.5
+ * Bug 31286: New strings for about:preferences#tor
+ * Translations update
+ * Bug 31286: Provide network settings on about:preferences#tor
+ * Bug 31886: Fix ko bundle bustage
+ * Bug 31768: Update onboarding for Tor Browser 9
+ * Bug 27511: Add new identity button to toolbar
+ * Bug 31778: Support dark-theme for the Circuit Display UI
+ * Bug 31910: Replace meek_lite with meek in circuit display
+ * Bug 30504: Deal with New Identity related browser console errors
+ * Bug 31929: Don't escape DTD entity in ar
+ * Bug 31747: Some onboarding UI is always shown in English
+ * Bug 32041: Replace = with real hamburguer icon ≡
+ * Windows
+ * Bug 31942: Re-enable signature check for language packs
+ * Bug 29013: Enable stack protection for Firefox on Windows
+ * OS X
+ * Bug 31607: App menu items stop working on macOS
+ * Bug 31955: On macOS avoid throwing inside nonBrowserWindowStartup()
+ * Linux
+ * Bug 31942: Re-enable signature check for language packs
+ * Bug 31968: Don't fail if /proc/cpuinfo is not readable
+ * Bug 24755: Stop using a heredoc in start-tor-browser
+ * Bug 31550: Put curly quotes inside single quotes
+ * Android
+ * Bug 31822: Security slider is not really visible on Android anymore
+ * Build System
+ * All Platforms
+ * Bug 31293: Make sure the lo interface inside the containers is up
+ * Windows
+ * Bug 29013: Enable stack protection support for Firefox on Windows
+ * Android
+ * Bug 31564: Make Android bundles based on ESR 68 reproducible
+ * Bug 31981: Remove require-api.patch
+ * Bug 31979: TOPL: Sort dependency list
+ * Bug 30665: Remove unnecessary build patches for Firefox
+
Tor Browser 9.0a7 -- October 1 2019
* All platforms
* Bug 30304: Browser locale can be obtained via DTD strings
diff --git a/projects/tor-launcher/config b/projects/tor-launcher/config
index 6b9a3cf..3171be7 100644
--- a/projects/tor-launcher/config
+++ b/projects/tor-launcher/config
@@ -1,5 +1,5 @@
# vim: filetype=yaml sw=2
-version: 0.2.19.4
+version: 0.2.19.5
git_url: https://git.torproject.org/tor-launcher.git
git_hash: '[% c("version") %]'
gpg_keyring: torbutton.gpg
diff --git a/projects/tor/config b/projects/tor/config
index 7bec267..ae2ef16 100644
--- a/projects/tor/config
+++ b/projects/tor/config
@@ -1,6 +1,6 @@
# vim: filetype=yaml sw=2
filename: '[% project %]-[% c("version") %]-[% c("var/osname") %]-[% c("var/build_id") %]'
-version: 0.4.2.1-alpha
+version: 0.4.2.2-alpha
git_hash: 'tor-[% c("version") %]'
git_url: https://git.torproject.org/tor.git
git_submodule: 1
diff --git a/rbm.conf b/rbm.conf
index 303f0bb..eae7d86 100644
--- a/rbm.conf
+++ b/rbm.conf
@@ -24,10 +24,10 @@ buildconf:
git_signtag_opt: '-s'
var:
- torbrowser_version: '9.0a7'
+ torbrowser_version: '9.0a8'
torbrowser_build: 'build1'
torbrowser_incremental_from:
- - 9.0a6
+ - 9.0a7
project_name: tor-browser
multi_lingual: 0
build_mar: 1
1
0

[tor-browser/tor-browser-68.1.0esr-9.0-2] Update Torbutton to latest master for 9.0a8
by gk@torproject.org 12 Oct '19
by gk@torproject.org 12 Oct '19
12 Oct '19
commit 661fc1772b12fb7745224f97a3c6bd79ce78fc13
Author: Georg Koppen <gk(a)torproject.org>
Date: Sat Oct 12 13:20:07 2019 +0000
Update Torbutton to latest master for 9.0a8
---
toolkit/torproject/torbutton | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/toolkit/torproject/torbutton b/toolkit/torproject/torbutton
index e54639aab0c6..a1fe61ca5e14 160000
--- a/toolkit/torproject/torbutton
+++ b/toolkit/torproject/torbutton
@@ -1 +1 @@
-Subproject commit e54639aab0c60274c14809cd9129b534bb79f92c
+Subproject commit a1fe61ca5e14e166617c516f2af449b043a3ef1c
1
0

[tor-browser/tor-browser-68.1.0esr-9.0-2] fixup! Bug 31286: Implementation of bridge, proxy, and firewall settings in about:preferences#tor
by gk@torproject.org 12 Oct '19
by gk@torproject.org 12 Oct '19
12 Oct '19
commit 109c1defa853ec6364c66a72b3554ea05304dd3f
Author: Georg Koppen <gk(a)torproject.org>
Date: Sat Oct 12 13:17:35 2019 +0000
fixup! Bug 31286: Implementation of bridge, proxy, and firewall settings in about:preferences#tor
---
browser/modules/BridgeDB.jsm | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/browser/modules/BridgeDB.jsm b/browser/modules/BridgeDB.jsm
index 16bf02e6c688..2caa26b4e2e0 100644
--- a/browser/modules/BridgeDB.jsm
+++ b/browser/modules/BridgeDB.jsm
@@ -1,4 +1,4 @@
-"use strict;";
+"use strict";
var EXPORTED_SYMBOLS = ["BridgeDB"];
1
0

[tor-browser/tor-browser-68.1.0esr-9.0-2] Bug 31286: Implementation of bridge, proxy, and firewall settings in about:preferences#tor
by gk@torproject.org 12 Oct '19
by gk@torproject.org 12 Oct '19
12 Oct '19
commit bd4082f2f1db8a1f1c135d6d1689242f7c659a19
Author: Richard Pospesel <richard(a)torproject.org>
Date: Mon Sep 16 15:25:39 2019 -0700
Bug 31286: Implementation of bridge, proxy, and firewall settings in about:preferences#tor
This patch adds a new about:preferences#tor page which allows modifying
bridge, proxy, and firewall settings from within Tor Browser. All of the
functionality present in tor-launcher's Network Configuration panel is
present:
- Setting built-in bridges
- Requesting bridges from BridgeDB via moat
- Using user-provided bridges
- Configuring SOCKS4, SOCKS5, and HTTP/HTTPS proxies
- Setting firewall ports
- Viewing and Copying Tor's logs
In addition the following changes have been made:
- The Networking Settings in General preferences has been removed
- TorStrings has been removed from the SecurityLevel component and
moved into a common shared module also used by about:preferences#tor
---
browser/components/moz.build | 1 +
browser/components/preferences/in-content/main.js | 15 -
browser/components/preferences/in-content/main.xul | 56 --
.../preferences/in-content/preferences.js | 2 +
.../preferences/in-content/preferences.xul | 5 +
.../components/preferences/in-content/privacy.js | 1 +
.../securitylevel/content/securityLevel.js | 155 +---
.../torpreferences/content/parseFunctions.jsm | 76 ++
.../torpreferences/content/requestBridgeDialog.jsm | 220 ++++++
.../torpreferences/content/requestBridgeDialog.xul | 35 +
.../torpreferences/content/torBridgeSettings.jsm | 325 +++++++++
.../torpreferences/content/torCategory.inc.xul | 8 +
.../torpreferences/content/torFirewallSettings.jsm | 72 ++
.../torpreferences/content/torLogDialog.jsm | 65 ++
.../torpreferences/content/torLogDialog.xul | 22 +
.../components/torpreferences/content/torPane.js | 802 +++++++++++++++++++++
.../components/torpreferences/content/torPane.xul | 119 +++
.../torpreferences/content/torPreferences.css | 63 ++
.../torpreferences/content/torPreferencesIcon.svg | 5 +
.../torpreferences/content/torProxySettings.jsm | 245 +++++++
browser/components/torpreferences/jar.mn | 14 +
browser/components/torpreferences/moz.build | 1 +
browser/modules/BridgeDB.jsm | 110 +++
browser/modules/TorProtocolService.jsm | 203 ++++++
browser/modules/TorStrings.jsm | 326 +++++++++
browser/modules/moz.build | 3 +
26 files changed, 2755 insertions(+), 194 deletions(-)
diff --git a/browser/components/moz.build b/browser/components/moz.build
index 111794a7532c..c0c9629cac65 100644
--- a/browser/components/moz.build
+++ b/browser/components/moz.build
@@ -56,6 +56,7 @@ DIRS += [
'syncedtabs',
'uitour',
'urlbar',
+ 'torpreferences',
'translation',
]
diff --git a/browser/components/preferences/in-content/main.js b/browser/components/preferences/in-content/main.js
index 845ef2f61e30..98c73c5ac119 100644
--- a/browser/components/preferences/in-content/main.js
+++ b/browser/components/preferences/in-content/main.js
@@ -365,16 +365,6 @@ var gMainPane = {
});
this.updatePerformanceSettingsBox({ duringChangeEvent: false });
- let connectionSettingsLink = document.getElementById(
- "connectionSettingsLearnMore"
- );
- let connectionSettingsUrl =
- Services.urlFormatter.formatURLPref("app.support.baseURL") +
- "prefs-connection-settings";
- connectionSettingsLink.setAttribute("href", connectionSettingsUrl);
- this.updateProxySettingsUI();
- initializeProxyUI(gMainPane);
-
if (Services.prefs.getBoolPref("intl.multilingual.enabled")) {
gMainPane.initBrowserLocale();
}
@@ -464,11 +454,6 @@ var gMainPane = {
gMainPane.updateHardwareAcceleration.bind(gMainPane)
);
setEventListener(
- "connectionSettings",
- "command",
- gMainPane.showConnections
- );
- setEventListener(
"browserContainersCheckbox",
"command",
gMainPane.checkBrowserContainers
diff --git a/browser/components/preferences/in-content/main.xul b/browser/components/preferences/in-content/main.xul
index 83d64f26a62d..85a219ff783b 100644
--- a/browser/components/preferences/in-content/main.xul
+++ b/browser/components/preferences/in-content/main.xul
@@ -669,60 +669,4 @@
<label id="cfrFeaturesLearnMore" class="learnMore" data-l10n-id="browsing-cfr-recommendations-learn-more" is="text-link"/>
</hbox>
</groupbox>
-
-<hbox id="networkProxyCategory"
- class="subcategory"
- hidden="true"
- data-category="paneGeneral">
- <html:h1 data-l10n-id="network-settings-title"/>
-</hbox>
-
-<!-- Network Settings-->
-<groupbox id="connectionGroup" data-category="paneGeneral" hidden="true">
- <label class="search-header" hidden="true"><html:h2 data-l10n-id="network-settings-title"/></label>
-
- <hbox align="center">
- <hbox align="center" flex="1">
- <description id="connectionSettingsDescription" control="connectionSettings"/>
- <spacer width="5"/>
- <label id="connectionSettingsLearnMore" class="learnMore" is="text-link"
- data-l10n-id="network-proxy-connection-learn-more">
- </label>
- <separator orient="vertical"/>
- </hbox>
-
- <!-- Please don't remove the wrapping hbox/vbox/box for these elements. It's used to properly compute the search tooltip position. -->
- <hbox>
- <button id="connectionSettings"
- is="highlightable-button"
- class="accessory-button"
- icon="network"
- data-l10n-id="network-proxy-connection-settings"
- searchkeywords="doh trr"
- search-l10n-ids="
- connection-window.title,
- connection-proxy-option-no.label,
- connection-proxy-option-auto.label,
- connection-proxy-option-system.label,
- connection-proxy-option-manual.label,
- connection-proxy-http,
- connection-proxy-ssl,
- connection-proxy-ftp,
- connection-proxy-http-port,
- connection-proxy-socks,
- connection-proxy-socks4,
- connection-proxy-socks5,
- connection-proxy-noproxy,
- connection-proxy-noproxy-desc,
- connection-proxy-http-share.label,
- connection-proxy-autotype.label,
- connection-proxy-reload.label,
- connection-proxy-autologin.label,
- connection-proxy-socks-remote-dns.label,
- connection-dns-over-https.label,
- connection-dns-over-https-url-custom.label,
- " />
- </hbox>
- </hbox>
-</groupbox>
</html:template>
diff --git a/browser/components/preferences/in-content/preferences.js b/browser/components/preferences/in-content/preferences.js
index d2851f20d2ca..b5b5f87af459 100644
--- a/browser/components/preferences/in-content/preferences.js
+++ b/browser/components/preferences/in-content/preferences.js
@@ -13,6 +13,7 @@
/* import-globals-from findInPage.js */
/* import-globals-from ../../../base/content/utilityOverlay.js */
/* import-globals-from ../../../../toolkit/content/preferencesBindings.js */
+/* import-globals-from ../../torpreferences/content/torPane.js */
/* global MozXULElement */
"use strict";
@@ -92,6 +93,7 @@ function init_all() {
document.getElementById("template-paneSync").remove();
}
register_module("paneSearchResults", gSearchResultsPane);
+ register_module("paneTor", gTorPane);
gSearchResultsPane.init();
gMainPane.preInit();
diff --git a/browser/components/preferences/in-content/preferences.xul b/browser/components/preferences/in-content/preferences.xul
index 3b07e4596907..7a01443ab048 100644
--- a/browser/components/preferences/in-content/preferences.xul
+++ b/browser/components/preferences/in-content/preferences.xul
@@ -16,6 +16,7 @@
<?xml-stylesheet href="chrome://browser/skin/preferences/in-content/containers.css"?>
<?xml-stylesheet href="chrome://browser/skin/preferences/in-content/privacy.css"?>
<?xml-stylesheet href="chrome://browser/content/securitylevel/securityLevelPreferences.css"?>
+<?xml-stylesheet href="chrome://browser/content/torpreferences/torPreferences.css"?>
<!DOCTYPE page [
<!ENTITY % aboutTorDTD SYSTEM "chrome://torbutton/locale/aboutTor.dtd">
@@ -138,6 +139,9 @@
<image class="category-icon"/>
<label class="category-name" flex="1" data-l10n-id="pane-sync-title2"></label>
</richlistitem>
+
+#include ../../torpreferences/content/torCategory.inc.xul
+
</richlistbox>
<spacer flex="1"/>
@@ -195,6 +199,7 @@
#include privacy.xul
#include containers.xul
#include sync.xul
+#include ../../torpreferences/content/torPane.xul
</vbox>
</vbox>
</vbox>
diff --git a/browser/components/preferences/in-content/privacy.js b/browser/components/preferences/in-content/privacy.js
index e9112a2c467e..297d07fadf1f 100644
--- a/browser/components/preferences/in-content/privacy.js
+++ b/browser/components/preferences/in-content/privacy.js
@@ -62,6 +62,7 @@ XPCOMUtils.defineLazyGetter(this, "AlertsServiceDND", function() {
}
});
+// TODO: module import via ChromeUtils.defineModuleGetter
XPCOMUtils.defineLazyScriptGetter(
this,
["SecurityLevelPreferences"],
diff --git a/browser/components/securitylevel/content/securityLevel.js b/browser/components/securitylevel/content/securityLevel.js
index 9965046a7d15..7f307c5df43a 100644
--- a/browser/components/securitylevel/content/securityLevel.js
+++ b/browser/components/securitylevel/content/securityLevel.js
@@ -8,102 +8,11 @@ XPCOMUtils.defineLazyModuleGetters(this, {
PanelMultiView: "resource:///modules/PanelMultiView.jsm",
});
-XPCOMUtils.defineLazyGlobalGetters(this, ["DOMParser"]);
-XPCOMUtils.defineLazyGetter(this, "domParser", () => {
- const parser = new DOMParser();
- parser.forceEnableDTD();
- return parser;
-});
-
-/*
- Security Level Strings
-
- Strings loaded from torbutton, but en-US defaults provided in case torbutton addon not enabled
-*/
-XPCOMUtils.defineLazyGetter(this, "SecurityLevelStrings", function() {
- // copied from testing/marionette/l10n.js
- let localizeEntity = function(urls, id) {
- // Build a string which contains all possible entity locations
- let locations = [];
- urls.forEach((url, index) => {
- locations.push(`<!ENTITY % dtd_${index} SYSTEM "${url}">%dtd_${index};`);
- });
-
- // Use the DOM parser to resolve the entity and extract its real value
- let header = `<?xml version="1.0"?><!DOCTYPE elem [${locations.join("")}]>`;
- let elem = `<elem id="elementID">&${id};</elem>`;
- let doc = domParser.parseFromString(header + elem, "text/xml");
- let element = doc.querySelector("elem[id='elementID']");
-
- if (element === null) {
- throw new Error(`Entity with id='${id}' hasn't been found`);
- }
-
- return element.textContent;
- };
-
- let getString = function(key, fallback) {
- try {
- return localizeEntity(
- ['chrome://torbutton/locale/torbutton.dtd'],
- `torbutton.prefs.sec_${key}`
- );
- } catch (e) { }
- return fallback;
- };
-
- // read localized strings from torbutton; but use hard-coded en-US strings as fallbacks in case of error
- let retval = {
- securityLevel : getString("caption", "Security Level"),
- customWarning : getString("custom_warning", "Custom"),
- overview : getString("overview", "Disable certain web features that can be used to attack your security and anonymity."),
- standard : {
- level : getString("standard_label", "Standard"),
- tooltip : getString("standard_tooltip", "Security Level : Standard"),
- summary : getString("standard_description", "All Tor Browser and website features are enabled."),
- },
- safer : {
- level : getString("safer_label", "Safer"),
- tooltip : getString("safer_tooltip", "Security Level : Safer"),
- summary : getString("safer_description", "Disables website features that are often dangerous, causing some sites to lose functionality."),
- description1 : getString("js_on_https_sites_only", "JavaScript is disabled on non-HTTPS sites."),
- description2 : getString("limit_typography", "Some fonts and math symbols are disabled."),
- description3 : getString("click_to_play_media", "Audio and video (HTML5 media), and WebGL are click-to-play."),
- },
- safest : {
- level : getString("safest_label", "Safest"),
- tooltip : getString("safest_tooltip", "Security Level : Safest"),
- summary : getString("safest_description", "Only allows website features required for static sites and basic services. These changes affect images, media, and scripts."),
- description1 : getString("js_disabled", "JavaScript is disabled by default on all sites."),
- description2 : getString("limit_graphics_and_typography", "Some fonts, icons, math symbols, and images are disabled."),
- description3 : getString("click_to_play_media", "Audio and video (HTML5 media), and WebGL are click-to-play."),
- },
- custom : {
- summary : getString("custom_summary", "Your custom browser preferences have resulted in unusual security settings. For security and privacy reasons, we recommend you choose one of the default security levels."),
- },
- learnMore : getString("learn_more_label", "Learn more"),
- learnMoreURL : function() {
- let locale = "";
- try {
- let { getLocale } =
- Cu.import("resource://torbutton/modules/utils.js", {});
- locale = getLocale();
- } catch(e) {}
-
- if (locale == "") {
- locale = "en-US";
- }
-
- return "https://tb-manual.torproject.org/" + locale + "/security-settings/";
- }(),
- restoreDefaults : getString("restore_defaults", "Restore Defaults"),
- advancedSecuritySettings : getString("advanced_security_settings", "Advanced Security Settings\u2026"),
- };
-
-
- return retval;
-});
-
+ChromeUtils.defineModuleGetter(
+ this,
+ "TorStrings",
+ "resource:///modules/TorStrings.jsm"
+);
/*
Security Level Prefs
@@ -158,8 +67,8 @@ const SecurityLevelButton = {
_populateXUL : function(securityLevelButton) {
if (securityLevelButton != null) {
- securityLevelButton.setAttribute("tooltiptext", SecurityLevelStrings.securityLevel);
- securityLevelButton.setAttribute("label", SecurityLevelStrings.securityLevel);
+ securityLevelButton.setAttribute("tooltiptext", TorStrings.securityLevel.securityLevel);
+ securityLevelButton.setAttribute("label", TorStrings.securityLevel.securityLevel);
}
},
@@ -171,15 +80,15 @@ const SecurityLevelButton = {
switch(securitySlider) {
case 4:
classList.add("standard");
- securityLevelButton.setAttribute("tooltiptext", SecurityLevelStrings.standard.tooltip);
+ securityLevelButton.setAttribute("tooltiptext", TorStrings.securityLevel.standard.tooltip);
break;
case 2:
classList.add("safer");
- securityLevelButton.setAttribute("tooltiptext", SecurityLevelStrings.safer.tooltip);
+ securityLevelButton.setAttribute("tooltiptext", TorStrings.securityLevel.safer.tooltip);
break;
case 1:
classList.add("safest");
- securityLevelButton.setAttribute("tooltiptext", SecurityLevelStrings.safest.tooltip);
+ securityLevelButton.setAttribute("tooltiptext", TorStrings.securityLevel.safest.tooltip);
break;
}
}
@@ -294,12 +203,12 @@ const SecurityLevelPanel = {
let buttonRestoreDefaults = panelview.querySelector("#securityLevel-restoreDefaults");
let buttonAdvancedSecuritySettings = panelview.querySelector("#securityLevel-advancedSecuritySettings");
- labelHeader.setAttribute("value", SecurityLevelStrings.securityLevel);
- labelCustomWarning.setAttribute("value", SecurityLevelStrings.customWarning);
- labelLearnMore.setAttribute("value", SecurityLevelStrings.learnMore);
- labelLearnMore.setAttribute("href", SecurityLevelStrings.learnMoreURL);
- buttonRestoreDefaults.setAttribute("label", SecurityLevelStrings.restoreDefaults);
- buttonAdvancedSecuritySettings.setAttribute("label", SecurityLevelStrings.advancedSecuritySettings);
+ labelHeader.setAttribute("value", TorStrings.securityLevel.securityLevel);
+ labelCustomWarning.setAttribute("value", TorStrings.securityLevel.customWarning);
+ labelLearnMore.setAttribute("value", TorStrings.securityLevel.learnMore);
+ labelLearnMore.setAttribute("href", TorStrings.securityLevel.learnMoreURL);
+ buttonRestoreDefaults.setAttribute("label", TorStrings.securityLevel.restoreDefaults);
+ buttonAdvancedSecuritySettings.setAttribute("label", TorStrings.securityLevel.advancedSecuritySettings);
// rest of the XUL is set based on security prefs
this._configUIFromPrefs();
@@ -328,24 +237,24 @@ const SecurityLevelPanel = {
switch(securitySlider) {
// standard
case 4:
- labelLevel.setAttribute("value", SecurityLevelStrings.standard.level);
- summary.textContent = SecurityLevelStrings.standard.summary;
+ labelLevel.setAttribute("value", TorStrings.securityLevel.standard.level);
+ summary.textContent = TorStrings.securityLevel.standard.summary;
break;
// safer
case 2:
- labelLevel.setAttribute("value", SecurityLevelStrings.safer.level);
- summary.textContent = SecurityLevelStrings.safer.summary;
+ labelLevel.setAttribute("value", TorStrings.securityLevel.safer.level);
+ summary.textContent = TorStrings.securityLevel.safer.summary;
break;
// safest
case 1:
- labelLevel.setAttribute("value", SecurityLevelStrings.safest.level);
- summary.textContent = SecurityLevelStrings.safest.summary;
+ labelLevel.setAttribute("value", TorStrings.securityLevel.safest.level);
+ summary.textContent = TorStrings.securityLevel.safest.summary;
break;
}
// override the summary text with custom warning
if (securityCustom) {
- summary.textContent = SecurityLevelStrings.custom.summary;
+ summary.textContent = TorStrings.securityLevel.custom.summary;
}
},
@@ -425,14 +334,14 @@ const SecurityLevelPreferences =
let groupbox = document.getElementById("securityLevel-groupbox");
let labelHeader = groupbox.querySelector("#securityLevel-header");
- labelHeader.setAttribute("value", SecurityLevelStrings.securityLevel);
+ labelHeader.setAttribute("value", TorStrings.securityLevel.securityLevel);
let spanOverview = groupbox.querySelector("#securityLevel-overview");
- spanOverview.textContent = SecurityLevelStrings.overview;
+ spanOverview.textContent = TorStrings.securityLevel.overview;
let labelLearnMore = groupbox.querySelector("#securityLevel-learnMore");
- labelLearnMore.setAttribute("value", SecurityLevelStrings.learnMore);
- labelLearnMore.setAttribute("href", SecurityLevelStrings.learnMoreURL);
+ labelLearnMore.setAttribute("value", TorStrings.securityLevel.learnMore);
+ labelLearnMore.setAttribute("href", TorStrings.securityLevel.learnMoreURL);
let populateRadioElements = function(vboxQuery, stringStruct) {
let vbox = groupbox.querySelector(vboxQuery);
@@ -441,13 +350,13 @@ const SecurityLevelPreferences =
radio.setAttribute("label", stringStruct.level);
let customWarning = vbox.querySelector("#securityLevel-customWarning");
- customWarning.setAttribute("value", SecurityLevelStrings.customWarning);
+ customWarning.setAttribute("value", TorStrings.securityLevel.customWarning);
let labelSummary = vbox.querySelector("#securityLevel-summary");
labelSummary.textContent = stringStruct.summary;
let labelRestoreDefaults = vbox.querySelector("#securityLevel-restoreDefaults");
- labelRestoreDefaults.setAttribute("value", SecurityLevelStrings.restoreDefaults);
+ labelRestoreDefaults.setAttribute("value", TorStrings.securityLevel.restoreDefaults);
let description1 = vbox.querySelector("#securityLevel-description1");
if (description1) {
@@ -463,9 +372,9 @@ const SecurityLevelPreferences =
}
};
- populateRadioElements("#securityLevel-vbox-standard", SecurityLevelStrings.standard);
- populateRadioElements("#securityLevel-vbox-safer", SecurityLevelStrings.safer);
- populateRadioElements("#securityLevel-vbox-safest", SecurityLevelStrings.safest);
+ populateRadioElements("#securityLevel-vbox-standard", TorStrings.securityLevel.standard);
+ populateRadioElements("#securityLevel-vbox-safer", TorStrings.securityLevel.safer);
+ populateRadioElements("#securityLevel-vbox-safest", TorStrings.securityLevel.safest);
},
_configUIFromPrefs : function() {
diff --git a/browser/components/torpreferences/content/parseFunctions.jsm b/browser/components/torpreferences/content/parseFunctions.jsm
new file mode 100644
index 000000000000..a6e6c554ca63
--- /dev/null
+++ b/browser/components/torpreferences/content/parseFunctions.jsm
@@ -0,0 +1,76 @@
+"use strict";
+
+var EXPORTED_SYMBOLS = [
+ "parsePort",
+ "parseAddrPort",
+ "parseUsernamePassword",
+ "parseAddrPortList",
+ "parseBridgeStrings",
+ "parsePortList",
+];
+
+// expects a string representation of an integer from 1 to 65535
+let parsePort = function(aPort) {
+ // ensure port string is a valid positive integer
+ const validIntRegex = /^[0-9]+$/;
+ if (!validIntRegex.test(aPort)) {
+ throw new Error(`Invalid PORT string : '${aPort}'`);
+ }
+
+ // ensure port value is on valid range
+ let port = Number.parseInt(aPort);
+ if (port < 1 || port > 65535) {
+ throw new Error(
+ `Invalid PORT value, needs to be on range [1,65535] : '${port}'`
+ );
+ }
+
+ return port;
+};
+// expects a string in the format: "ADDRESS:PORT"
+let parseAddrPort = function(aAddrColonPort) {
+ let tokens = aAddrColonPort.split(":");
+ if (tokens.length != 2) {
+ throw new Error(`Invalid ADDRESS:PORT string : '${aAddrColonPort}'`);
+ }
+ let address = tokens[0];
+ let port = parsePort(tokens[1]);
+ return [address, port];
+};
+
+// expects a string in the format: "USERNAME:PASSWORD"
+// split on the first colon and any subsequent go into password
+let parseUsernamePassword = function(aUsernameColonPassword) {
+ let colonIndex = aUsernameColonPassword.indexOf(":");
+ if (colonIndex < 0) {
+ // we don't log the contents of the potentially password containing string
+ throw new Error("Invalid USERNAME:PASSWORD string");
+ }
+
+ let username = aUsernameColonPassword.substring(0, colonIndex);
+ let password = aUsernameColonPassword.substring(colonIndex + 1);
+
+ return [username, password];
+};
+
+// expects tring in the format: ADDRESS:PORT,ADDRESS:PORT,...
+// returns array of ports (as ints)
+let parseAddrPortList = function(aAddrPortList) {
+ let addrPorts = aAddrPortList.split(",");
+ // parse ADDRESS:PORT string and only keep the port (second element in returned array)
+ let retval = addrPorts.map(addrPort => parseAddrPort(addrPort)[1]);
+ return retval;
+};
+
+// expects a '/n' delimited string of bridge string, which we split and trim
+let parseBridgeStrings = function(aBridgeStrings) {
+ let splitStrings = aBridgeStrings.split("\n");
+ return splitStrings.map(val => val.trim());
+};
+
+// expecting a ',' delimited list of ints with possible white space between
+// returns an array of ints
+let parsePortList = function(aPortListString) {
+ let splitStrings = aPortListString.split(",");
+ return splitStrings.map(val => parsePort(val.trim()));
+};
diff --git a/browser/components/torpreferences/content/requestBridgeDialog.jsm b/browser/components/torpreferences/content/requestBridgeDialog.jsm
new file mode 100644
index 000000000000..b66272edf880
--- /dev/null
+++ b/browser/components/torpreferences/content/requestBridgeDialog.jsm
@@ -0,0 +1,220 @@
+"use strict";
+
+var EXPORTED_SYMBOLS = ["RequestBridgeDialog"];
+
+const { BridgeDB } = ChromeUtils.import("resource:///modules/BridgeDB.jsm");
+const { TorStrings } = ChromeUtils.import("resource:///modules/TorStrings.jsm");
+
+class RequestBridgeDialog {
+ constructor() {
+ this._dialog = null;
+ this._submitCommand = null;
+ this._submitButton = null;
+ this._dialogDescription = null;
+ this._captchaImage = null;
+ this._captchaEntryTextbox = null;
+ this._captchaRefreshCommand = null;
+ this._captchaRefreshButton = null;
+ this._incorrectCaptchaHbox = null;
+ this._incorrectCaptchaLabel = null;
+ this._bridges = [];
+ this._proxyURI = null;
+ }
+
+ static get selectors() {
+ return {
+ submitButton:
+ "accept" /* not really a selector but a key for dialog's getButton */,
+ dialogDescription: "description#torPreferences-requestBridge-description",
+ submitCommand: "command#torPreferences-requestBridge-submitCommand",
+ captchaImage: "image#torPreferences-requestBridge-captchaImage",
+ captchaEntryTextbox:
+ "textbox#torPreferences-requestBridge-captchaTextbox",
+ refreshCaptchaCommand:
+ "command#torPreferences-requestBridge-refreshCaptchaCommand",
+ refreshCaptchaButton:
+ "button#torPreferences-requestBridge-refreshCaptchaButton",
+ incorrectCaptchaHbox:
+ "hbox#torPreferences-requestBridge-incorrectCaptchaHbox",
+ incorrectCaptchaLabel:
+ "label#torPreferences-requestBridge-incorrectCaptchaError",
+ };
+ }
+
+ _populateXUL(dialog) {
+ const selectors = RequestBridgeDialog.selectors;
+
+ this._dialog = dialog;
+ this._dialog.setAttribute(
+ "title",
+ TorStrings.settings.requestBridgeDialogTitle
+ );
+ // user may have opened a Request Bridge dialog in another tab, so update the
+ // CAPTCHA image or close out the dialog if we have a bridge list
+ this._dialog.addEventListener("focusin", () => {
+ const uri = BridgeDB.currentCaptchaImage;
+ const bridges = BridgeDB.currentBridges;
+
+ // new captcha image
+ if (uri) {
+ this._setcaptchaImage(uri);
+ } else if (bridges) {
+ this._bridges = bridges;
+ this._submitButton.disabled = false;
+ this._dialog.acceptDialog();
+ }
+ });
+
+ this._submitCommand = this._dialog.querySelector(selectors.submitCommand);
+
+ this._submitButton = this._dialog.getButton(selectors.submitButton);
+ this._submitButton.setAttribute("label", TorStrings.settings.submitCaptcha);
+ this._submitButton.setAttribute("command", this._submitCommand.id);
+ this._submitButton.disabled = true;
+
+ this._dialogDescription = this._dialog.querySelector(
+ selectors.dialogDescription
+ );
+ this._dialogDescription.textContent =
+ TorStrings.settings.contactingBridgeDB;
+
+ this._captchaImage = this._dialog.querySelector(selectors.captchaImage);
+
+ // request captcha from bridge db
+ BridgeDB.requestNewCaptchaImage(this._proxyURI).then(uri => {
+ this._setcaptchaImage(uri);
+ });
+
+ this._captchaEntryTextbox = this._dialog.querySelector(
+ selectors.captchaEntryTextbox
+ );
+ this._captchaEntryTextbox.setAttribute(
+ "placeholder",
+ TorStrings.settings.captchaTextboxPlaceholder
+ );
+ this._captchaEntryTextbox.disabled = true;
+ this._captchaEntryTextbox.onkeypress = evt => {
+ const ENTER_KEY = 13;
+ if (evt.keyCode == ENTER_KEY) {
+ // logically same as pressing the 'submit' button of the parent dialog
+ this.onSubmitCaptcha();
+ return false;
+ }
+ return true;
+ };
+ // disable submit if entry textbox is empty
+ this._captchaEntryTextbox.oninput = () => {
+ this._submitButton.disabled = this._captchaEntryTextbox.value == "";
+ };
+
+ this._captchaRefreshCommand = this._dialog.querySelector(
+ selectors.refreshCaptchaCommand
+ );
+ this._captchaRefreshButton = this._dialog.querySelector(
+ selectors.refreshCaptchaButton
+ );
+ this._captchaRefreshButton.setAttribute(
+ "command",
+ this._captchaRefreshCommand.id
+ );
+ this._captchaRefreshButton.disabled = true;
+
+ this._incorrectCaptchaHbox = this._dialog.querySelector(
+ selectors.incorrectCaptchaHbox
+ );
+ this._incorrectCaptchaLabel = this._dialog.querySelector(
+ selectors.incorrectCaptchaLabel
+ );
+ this._incorrectCaptchaLabel.setAttribute(
+ "value",
+ TorStrings.settings.incorrectCaptcha
+ );
+
+ return true;
+ }
+
+ _setcaptchaImage(uri) {
+ if (uri != this._captchaImage.src) {
+ this._captchaImage.src = uri;
+ this._dialogDescription.textContent = TorStrings.settings.solveTheCaptcha;
+ this._setUIDisabled(false);
+ this._captchaEntryTextbox.focus();
+ this._captchaEntryTextbox.select();
+ }
+ }
+
+ _setUIDisabled(disabled) {
+ this._submitButton.disabled = this._captchaGuessIsEmpty() || disabled;
+ this._captchaEntryTextbox.disabled = disabled;
+ this._captchaRefreshButton.disabled = disabled;
+ }
+
+ _captchaGuessIsEmpty() {
+ return this._captchaEntryTextbox.value == "";
+ }
+
+ init(window, dialog) {
+ // defer to later until firefox has populated the dialog with all our elements
+ window.setTimeout(() => {
+ this._populateXUL(dialog);
+ }, 0);
+ }
+
+ close() {
+ BridgeDB.close();
+ }
+
+ /*
+ Event Handlers
+ */
+ onSubmitCaptcha() {
+ let captchaText = this._captchaEntryTextbox.value.trim();
+ // noop if the field is empty
+ if (captchaText == "") {
+ return;
+ }
+
+ // freeze ui while we make request
+ this._setUIDisabled(true);
+ this._incorrectCaptchaHbox.style.visibility = "hidden";
+
+ BridgeDB.submitCaptchaGuess(captchaText)
+ .then(aBridges => {
+ this._bridges = aBridges;
+
+ this._submitButton.disabled = false;
+ this._dialog.acceptDialog();
+ })
+ .catch(aError => {
+ this._bridges = [];
+ this._setUIDisabled(false);
+ this._incorrectCaptchaHbox.style.visibility = "visible";
+ });
+ }
+
+ onRefreshCaptcha() {
+ this._setUIDisabled(true);
+ this._captchaImage.src = "";
+ this._dialogDescription.textContent =
+ TorStrings.settings.contactingBridgeDB;
+ this._captchaEntryTextbox.value = "";
+ this._incorrectCaptchaHbox.style.visibility = "hidden";
+
+ BridgeDB.requestNewCaptchaImage(this._proxyURI).then(uri => {
+ this._setcaptchaImage(uri);
+ });
+ }
+
+ openDialog(gSubDialog, aProxyURI, aCloseCallback) {
+ this._proxyURI = aProxyURI;
+ gSubDialog.open(
+ "chrome://browser/content/torpreferences/requestBridgeDialog.xul",
+ "resizable=yes",
+ this,
+ () => {
+ this.close();
+ aCloseCallback(this._bridges);
+ }
+ );
+ }
+}
diff --git a/browser/components/torpreferences/content/requestBridgeDialog.xul b/browser/components/torpreferences/content/requestBridgeDialog.xul
new file mode 100644
index 000000000000..67cae40b9a48
--- /dev/null
+++ b/browser/components/torpreferences/content/requestBridgeDialog.xul
@@ -0,0 +1,35 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<?xml-stylesheet href="chrome://global/skin/" type="text/css"?>
+<?xml-stylesheet href="chrome://browser/skin/preferences/preferences.css"?>
+<?xml-stylesheet href="chrome://browser/content/torpreferences/torPreferences.css"?>
+
+<dialog id="torPreferences-requestBridge-dialog" type="child" class="prefwindow"
+ xmlns="http://www.mozilla.org/keymaster/gatekeeper/there.is.only.xul"
+ xmlns:html="http://www.w3.org/1999/xhtml"
+ title="Request Bridge"
+ buttons="cancel,accept"
+ role="dialog">
+ <command id="torPreferences-requestBridge-submitCommand" oncommand="requestBridgeDialog.onSubmitCaptcha();"/>
+ <!-- ok, so ​ is a zero-width space. We need to have *something* in the innerText so that XUL knows how tall the
+ description node is so that it can determine how large to make the dialog element's inner draw area. If we have
+ nothing in the innerText, then it collapse to 0 height, and the contents of the dialog ends up partially hidden >:( -->
+ <description id="torPreferences-requestBridge-description">​</description>
+ <!-- init to transparent 400x125 png -->
+ <image id="torPreferences-requestBridge-captchaImage" flex="1"/>
+ <hbox id="torPreferences-requestBridge-inputHbox">
+ <textbox id="torPreferences-requestBridge-captchaTextbox" flex="1" />
+ <command id="torPreferences-requestBridge-refreshCaptchaCommand" oncommand="requestBridgeDialog.onRefreshCaptcha();"/>
+ <button id="torPreferences-requestBridge-refreshCaptchaButton" image="chrome://browser/skin/reload.svg"/>
+ </hbox>
+ <hbox id="torPreferences-requestBridge-incorrectCaptchaHbox" align="center">
+ <image id="torPreferences-requestBridge-errorIcon" />
+ <label id="torPreferences-requestBridge-incorrectCaptchaError" flex="1"/>
+ </hbox>
+ <script type="application/javascript"><![CDATA[
+ "use strict";
+
+ let requestBridgeDialog = window.arguments[0];
+ let dialog = document.getElementById("torPreferences-requestBridge-dialog");
+ requestBridgeDialog.init(window, dialog);
+ ]]></script>
+</dialog>
\ No newline at end of file
diff --git a/browser/components/torpreferences/content/torBridgeSettings.jsm b/browser/components/torpreferences/content/torBridgeSettings.jsm
new file mode 100644
index 000000000000..ceb61d3ec972
--- /dev/null
+++ b/browser/components/torpreferences/content/torBridgeSettings.jsm
@@ -0,0 +1,325 @@
+"use strict";
+
+var EXPORTED_SYMBOLS = [
+ "TorBridgeSource",
+ "TorBridgeSettings",
+ "makeTorBridgeSettingsNone",
+ "makeTorBridgeSettingsBuiltin",
+ "makeTorBridgeSettingsBridgeDB",
+ "makeTorBridgeSettingsUserProvided",
+];
+
+const { Services } = ChromeUtils.import("resource://gre/modules/Services.jsm");
+const { TorProtocolService } = ChromeUtils.import(
+ "resource:///modules/TorProtocolService.jsm"
+);
+const { TorStrings } = ChromeUtils.import("resource:///modules/TorStrings.jsm");
+
+const TorBridgeSource = {
+ NONE: "NONE",
+ BUILTIN: "BUILTIN",
+ BRIDGEDB: "BRIDGEDB",
+ USERPROVIDED: "USERPROVIDED",
+};
+
+class TorBridgeSettings {
+ constructor() {
+ this._bridgeSource = TorBridgeSource.NONE;
+ this._selectedDefaultBridgeType = null;
+ this._bridgeStrings = [];
+ }
+
+ get selectedDefaultBridgeType() {
+ if (this._bridgeSource == TorBridgeSource.BUILTIN) {
+ return this._selectedDefaultBridgeType;
+ }
+ return undefined;
+ }
+
+ get bridgeSource() {
+ return this._bridgeSource;
+ }
+
+ // for display
+ get bridgeStrings() {
+ return this._bridgeStrings.join("\n");
+ }
+
+ // raw
+ get bridgeStringsArray() {
+ return this._bridgeStrings;
+ }
+
+ static get defaultBridgeTypes() {
+ if (TorBridgeSettings._defaultBridgeTypes) {
+ return TorBridgeSettings._defaultBridgeTypes;
+ }
+
+ let bridgeListBranch = Services.prefs.getBranch(
+ TorStrings.preferenceBranches.defaultBridge
+ );
+ let bridgePrefs = bridgeListBranch.getChildList("", {});
+
+ // an unordered set for shoving bridge types into
+ let bridgeTypes = new Set();
+ // look for keys ending in ".N" and treat string before that as the bridge type
+ const pattern = /\.[0-9]+$/;
+ for (const key of bridgePrefs) {
+ const offset = key.search(pattern);
+ if (offset != -1) {
+ const bt = key.substring(0, offset);
+ bridgeTypes.add(bt);
+ }
+ }
+
+ // recommended bridge type goes first in the list
+ let recommendedBridgeType = Services.prefs.getCharPref(
+ TorStrings.preferenceKeys.recommendedBridgeType,
+ null
+ );
+
+ let retval = [];
+ if (recommendedBridgeType && bridgeTypes.has(recommendedBridgeType)) {
+ retval.push(recommendedBridgeType);
+ }
+
+ for (const bridgeType of bridgeTypes.values()) {
+ if (bridgeType != recommendedBridgeType) {
+ retval.push(bridgeType);
+ }
+ }
+
+ // cache off
+ TorBridgeSettings._defaultBridgeTypes = retval;
+ return retval;
+ }
+
+ _readDefaultBridges(aBridgeType) {
+ let bridgeBranch = Services.prefs.getBranch(
+ TorStrings.preferenceBranches.defaultBridge
+ );
+ let bridgeBranchPrefs = bridgeBranch.getChildList("", {});
+
+ let retval = [];
+
+ // regex matches against strings ending in ".N" where N is a positive integer
+ let pattern = /\.[0-9]+$/;
+ for (const key of bridgeBranchPrefs) {
+ // verify the location of the match is the correct offset required for aBridgeType
+ // to fit, and that the string begins with aBridgeType
+ if (
+ key.search(pattern) == aBridgeType.length &&
+ key.startsWith(aBridgeType)
+ ) {
+ let bridgeStr = bridgeBranch.getCharPref(key);
+ retval.push(bridgeStr);
+ }
+ }
+
+ // fisher-yates shuffle
+ // shuffle so that Tor Browser users don't all try the built-in bridges in the same order
+ for (let i = retval.length - 1; i > 0; --i) {
+ // number n such that 0.0 <= n < 1.0
+ const n = Math.random();
+ // integer j such that 0 <= j <= i
+ const j = Math.floor(n * (i + 1));
+
+ // swap values at indices i and j
+ const tmp = retval[i];
+ retval[i] = retval[j];
+ retval[j] = tmp;
+ }
+
+ return retval;
+ }
+
+ _readBridgeDBBridges() {
+ let bridgeBranch = Services.prefs.getBranch(
+ `${TorStrings.preferenceBranches.bridgeDBBridges}`
+ );
+ let bridgeBranchPrefs = bridgeBranch.getChildList("", {});
+ // the child prefs do not come in any particular order so sort the keys
+ // so the values can be compared to what we get out off torrc
+ bridgeBranchPrefs.sort();
+
+ // just assume all of the prefs under the parent point to valid bridge string
+ let retval = bridgeBranchPrefs.map(key =>
+ bridgeBranch.getCharPref(key).trim()
+ );
+
+ return retval;
+ }
+
+ _readTorrcBridges() {
+ let bridgeList = TorProtocolService.readStringArraySetting(
+ TorStrings.configKeys.bridgeList
+ );
+
+ let retval = [];
+ for (const line of bridgeList) {
+ let trimmedLine = line.trim();
+ if (trimmedLine) {
+ retval.push(trimmedLine);
+ }
+ }
+
+ return retval;
+ }
+
+ // analagous to initBridgeSettings()
+ readSettings() {
+ // restore to defaults
+ this._bridgeSource = TorBridgeSource.NONE;
+ this._selectedDefaultBridgeType = null;
+ this._bridgeStrings = [];
+
+ // So the way tor-launcher determines the origin of the configured bridges is a bit
+ // weird and depends on inferring our scenario based on some firefox prefs and the
+ // relationship between the saved list of bridges in about:config vs the list saved in torrc
+
+ // first off, if "extensions.torlauncher.default_bridge_type" is set to one of our
+ // builtin default types (obfs4, meek-azure, snowflake, etc) then we provide the
+ // bridges in "extensions.torlauncher.default_bridge.*" (filtered by our default_bridge_type)
+
+ // next, we compare the list of bridges saved in torrc to the bridges stored in the
+ // "extensions.torlauncher.bridgedb_bridge."" branch. If they match *exactly* then we assume
+ // the bridges were retrieved from BridgeDB and use those. If the torrc list is empty then we know
+ // we have no bridge settings
+
+ // finally, if none of the previous conditions are not met, it is assumed the bridges stored in
+ // torrc are user-provided
+
+ // what we should(?) do once we excise tor-launcher entirely is explicitly store an int/enum in
+ // about:config that tells us which scenario we are in so we don't have to guess
+
+ let defaultBridgeType = Services.prefs.getCharPref(
+ TorStrings.preferenceKeys.defaultBridgeType,
+ null
+ );
+
+ // check if source is BUILTIN
+ if (defaultBridgeType) {
+ this._bridgeStrings = this._readDefaultBridges(defaultBridgeType);
+ this._bridgeSource = TorBridgeSource.BUILTIN;
+ this._selectedDefaultBridgeType = defaultBridgeType;
+ return;
+ }
+
+ let torrcBridges = this._readTorrcBridges();
+
+ // no stored bridges means no bridge is in use
+ if (torrcBridges.length == 0) {
+ this._bridgeStrings = [];
+ this._bridgeSource = TorBridgeSource.NONE;
+ return;
+ }
+
+ let bridgedbBridges = this._readBridgeDBBridges();
+
+ // if these two lists are equal then we got our bridges from bridgedb
+ // ie: same element in identical order
+ let arraysEqual = (left, right) => {
+ if (left.length != right.length) {
+ return false;
+ }
+ const length = left.length;
+ for (let i = 0; i < length; ++i) {
+ if (left[i] != right[i]) {
+ return false;
+ }
+ }
+ return true;
+ };
+
+ // agreement between prefs and torrc means bridgedb bridges
+ if (arraysEqual(torrcBridges, bridgedbBridges)) {
+ this._bridgeStrings = torrcBridges;
+ this._bridgeSource = TorBridgeSource.BRIDGEDB;
+ return;
+ }
+
+ // otherwise they must be user provided
+ this._bridgeStrings = torrcBridges;
+ this._bridgeSource = TorBridgeSource.USERPROVIDED;
+ }
+
+ writeSettings() {
+ let settingsObject = new Map();
+
+ // init tor bridge settings to null
+ settingsObject.set(TorStrings.configKeys.useBridges, null);
+ settingsObject.set(TorStrings.configKeys.bridgeList, null);
+
+ // clear bridge related firefox prefs
+ Services.prefs.setCharPref(TorStrings.preferenceKeys.defaultBridgeType, "");
+ let bridgeBranch = Services.prefs.getBranch(
+ `${TorStrings.preferenceBranches.bridgeDBBridges}`
+ );
+ let bridgeBranchPrefs = bridgeBranch.getChildList("", {});
+ for (const pref of bridgeBranchPrefs) {
+ Services.prefs.clearUserPref(
+ `${TorStrings.preferenceBranches.bridgeDBBridges}${pref}`
+ );
+ }
+
+ switch (this._bridgeSource) {
+ case TorBridgeSource.BUILTIN:
+ // set builtin bridge type to use in prefs
+ Services.prefs.setCharPref(
+ TorStrings.preferenceKeys.defaultBridgeType,
+ this._selectedDefaultBridgeType
+ );
+ break;
+ case TorBridgeSource.BRIDGEDB:
+ // save bridges off to prefs
+ for (let i = 0; i < this.bridgeStringsArray.length; ++i) {
+ Services.prefs.setCharPref(
+ `${TorStrings.preferenceBranches.bridgeDBBridges}${i}`,
+ this.bridgeStringsArray[i]
+ );
+ }
+ break;
+ }
+
+ // write over our bridge list if bridges are enabled
+ if (this._bridgeSource != TorBridgeSource.NONE) {
+ settingsObject.set(TorStrings.configKeys.useBridges, true);
+ settingsObject.set(
+ TorStrings.configKeys.bridgeList,
+ this.bridgeStringsArray
+ );
+ }
+ TorProtocolService.writeSettings(settingsObject);
+ }
+}
+
+function makeTorBridgeSettingsNone() {
+ return new TorBridgeSettings();
+}
+
+function makeTorBridgeSettingsBuiltin(aBridgeType) {
+ let retval = new TorBridgeSettings();
+ retval._bridgeSource = TorBridgeSource.BUILTIN;
+ retval._selectedDefaultBridgeType = aBridgeType;
+ retval._bridgeStrings = retval._readDefaultBridges(aBridgeType);
+
+ return retval;
+}
+
+function makeTorBridgeSettingsBridgeDB(aBridges) {
+ let retval = new TorBridgeSettings();
+ retval._bridgeSource = TorBridgeSource.BRIDGEDB;
+ retval._selectedDefaultBridgeType = null;
+ retval._bridgeStrings = aBridges;
+
+ return retval;
+}
+
+function makeTorBridgeSettingsUserProvided(aBridges) {
+ let retval = new TorBridgeSettings();
+ retval._bridgeSource = TorBridgeSource.USERPROVIDED;
+ retval._selectedDefaultBridgeType = null;
+ retval._bridgeStrings = aBridges;
+
+ return retval;
+}
diff --git a/browser/components/torpreferences/content/torCategory.inc.xul b/browser/components/torpreferences/content/torCategory.inc.xul
new file mode 100644
index 000000000000..746059358d5f
--- /dev/null
+++ b/browser/components/torpreferences/content/torCategory.inc.xul
@@ -0,0 +1,8 @@
+<richlistitem id="category-tor"
+ class="category"
+ value="paneTor"
+ helpTopic="prefs-tor"
+ align="center">
+ <image class="category-icon"/>
+ <label id="torPreferences-labelCategory" class="category-name" flex="1" value="Tor"/>
+</richlistitem>
diff --git a/browser/components/torpreferences/content/torFirewallSettings.jsm b/browser/components/torpreferences/content/torFirewallSettings.jsm
new file mode 100644
index 000000000000..e77f18ef2fae
--- /dev/null
+++ b/browser/components/torpreferences/content/torFirewallSettings.jsm
@@ -0,0 +1,72 @@
+"use strict";
+
+var EXPORTED_SYMBOLS = [
+ "TorFirewallSettings",
+ "makeTorFirewallSettingsNone",
+ "makeTorFirewallSettingsCustom",
+];
+
+const { TorProtocolService } = ChromeUtils.import(
+ "resource:///modules/TorProtocolService.jsm"
+);
+const { TorStrings } = ChromeUtils.import("resource:///modules/TorStrings.jsm");
+const { parseAddrPortList } = ChromeUtils.import(
+ "chrome://browser/content/torpreferences/parseFunctions.jsm"
+);
+
+class TorFirewallSettings {
+ constructor() {
+ this._allowedPorts = [];
+ }
+
+ get portsConfigurationString() {
+ let portStrings = this._allowedPorts.map(port => `*:${port}`);
+ return portStrings.join(",");
+ }
+
+ get commaSeparatedListString() {
+ return this._allowedPorts.join(",");
+ }
+
+ get hasPorts() {
+ return this._allowedPorts.length > 0;
+ }
+
+ readSettings() {
+ let addressPortList = TorProtocolService.readStringSetting(
+ TorStrings.configKeys.reachableAddresses
+ );
+
+ let allowedPorts = [];
+ if (addressPortList) {
+ allowedPorts = parseAddrPortList(addressPortList);
+ }
+ this._allowedPorts = allowedPorts;
+ }
+
+ writeSettings() {
+ let settingsObject = new Map();
+
+ // init to null so Tor daemon resets if no ports
+ settingsObject.set(TorStrings.configKeys.reachableAddresses, null);
+
+ if (this._allowedPorts.length > 0) {
+ settingsObject.set(
+ TorStrings.configKeys.reachableAddresses,
+ this.portsConfigurationString
+ );
+ }
+
+ TorProtocolService.writeSettings(settingsObject);
+ }
+}
+
+function makeTorFirewallSettingsNone() {
+ return new TorFirewallSettings();
+}
+
+function makeTorFirewallSettingsCustom(aPortsList) {
+ let retval = new TorFirewallSettings();
+ retval._allowedPorts = aPortsList;
+ return retval;
+}
diff --git a/browser/components/torpreferences/content/torLogDialog.jsm b/browser/components/torpreferences/content/torLogDialog.jsm
new file mode 100644
index 000000000000..13a8c42884d2
--- /dev/null
+++ b/browser/components/torpreferences/content/torLogDialog.jsm
@@ -0,0 +1,65 @@
+"use strict";
+
+var EXPORTED_SYMBOLS = ["TorLogDialog"];
+
+const { TorProtocolService } = ChromeUtils.import(
+ "resource:///modules/TorProtocolService.jsm"
+);
+const { TorStrings } = ChromeUtils.import("resource:///modules/TorStrings.jsm");
+
+class TorLogDialog {
+ constructor() {
+ this._dialog = null;
+ this._logTextarea = null;
+ this._copyLogButton = null;
+ }
+
+ static get selectors() {
+ return {
+ copyLogButton: "extra1",
+ logTextarea: "textarea#torPreferences-torDialog-textarea",
+ };
+ }
+
+ _populateXUL(aDialog) {
+ this._dialog = aDialog;
+ this._dialog.setAttribute("title", TorStrings.settings.torLogDialogTitle);
+
+ this._logTextarea = this._dialog.querySelector(
+ TorLogDialog.selectors.logTextarea
+ );
+
+ this._copyLogButton = this._dialog.getButton(
+ TorLogDialog.selectors.copyLogButton
+ );
+ this._copyLogButton.setAttribute("label", TorStrings.settings.copyLog);
+ this._copyLogButton.addEventListener("command", () => {
+ this.copyTorLog();
+ });
+
+ this._logTextarea.value = TorProtocolService.getLog();
+ }
+
+ init(window, aDialog) {
+ // defer to later until firefox has populated the dialog with all our elements
+ window.setTimeout(() => {
+ this._populateXUL(aDialog);
+ }, 0);
+ }
+
+ copyTorLog() {
+ // Copy tor log messages to the system clipboard.
+ let clipboard = Cc["@mozilla.org/widget/clipboardhelper;1"].getService(
+ Ci.nsIClipboardHelper
+ );
+ clipboard.copyString(this._logTextarea.value);
+ }
+
+ openDialog(gSubDialog) {
+ gSubDialog.open(
+ "chrome://browser/content/torpreferences/torLogDialog.xul",
+ "resizable=yes",
+ this
+ );
+ }
+}
diff --git a/browser/components/torpreferences/content/torLogDialog.xul b/browser/components/torpreferences/content/torLogDialog.xul
new file mode 100644
index 000000000000..ae0f4b294204
--- /dev/null
+++ b/browser/components/torpreferences/content/torLogDialog.xul
@@ -0,0 +1,22 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<?xml-stylesheet href="chrome://global/skin/" type="text/css"?>
+<?xml-stylesheet href="chrome://browser/skin/preferences/preferences.css"?>
+<?xml-stylesheet href="chrome://browser/content/torpreferences/torPreferences.css"?>
+
+<dialog id="torPreferences-torLog-dialog" type="child" class="prefwindow"
+ xmlns="http://www.mozilla.org/keymaster/gatekeeper/there.is.only.xul"
+ xmlns:html="http://www.w3.org/1999/xhtml"
+ buttons="accept,extra1"
+ role="dialog">
+ <html:textarea
+ id="torPreferences-torDialog-textarea"
+ multiline="true"
+ readonly="true"/>
+ <script type="application/javascript"><![CDATA[
+ "use strict";
+
+ let torLogDialog = window.arguments[0];
+ let dialog = document.getElementById("torPreferences-torLog-dialog");
+ torLogDialog.init(window, dialog);
+ ]]></script>
+</dialog>
\ No newline at end of file
diff --git a/browser/components/torpreferences/content/torPane.js b/browser/components/torpreferences/content/torPane.js
new file mode 100644
index 000000000000..08de0613e1d4
--- /dev/null
+++ b/browser/components/torpreferences/content/torPane.js
@@ -0,0 +1,802 @@
+"use strict";
+
+const { TorProtocolService } = ChromeUtils.import(
+ "resource:///modules/TorProtocolService.jsm"
+);
+
+const {
+ TorBridgeSource,
+ TorBridgeSettings,
+ makeTorBridgeSettingsNone,
+ makeTorBridgeSettingsBuiltin,
+ makeTorBridgeSettingsBridgeDB,
+ makeTorBridgeSettingsUserProvided,
+} = ChromeUtils.import(
+ "chrome://browser/content/torpreferences/torBridgeSettings.jsm"
+);
+
+const {
+ TorProxyType,
+ TorProxySettings,
+ makeTorProxySettingsNone,
+ makeTorProxySettingsSocks4,
+ makeTorProxySettingsSocks5,
+ makeTorProxySettingsHTTPS,
+} = ChromeUtils.import(
+ "chrome://browser/content/torpreferences/torProxySettings.jsm"
+);
+const {
+ TorFirewallSettings,
+ makeTorFirewallSettingsNone,
+ makeTorFirewallSettingsCustom,
+} = ChromeUtils.import(
+ "chrome://browser/content/torpreferences/torFirewallSettings.jsm"
+);
+
+const { TorLogDialog } = ChromeUtils.import(
+ "chrome://browser/content/torpreferences/torLogDialog.jsm"
+);
+
+const { RequestBridgeDialog } = ChromeUtils.import(
+ "chrome://browser/content/torpreferences/requestBridgeDialog.jsm"
+);
+
+ChromeUtils.defineModuleGetter(
+ this,
+ "TorStrings",
+ "resource:///modules/TorStrings.jsm"
+);
+
+const { parsePort, parseBridgeStrings, parsePortList } = ChromeUtils.import(
+ "chrome://browser/content/torpreferences/parseFunctions.jsm"
+);
+
+/*
+ Tor Pane
+
+ Code for populating the XUL in about:preferences#tor, handling input events, interfacing with tor-launcher
+*/
+const gTorPane = (function() {
+ /* CSS selectors for all of the Tor Network DOM elements we need to access */
+ const selectors = {
+ category: {
+ title: "label#torPreferences-labelCategory",
+ },
+ torPreferences: {
+ header: "h1#torPreferences-header",
+ description: "span#torPreferences-description",
+ learnMore: "label#torPreferences-learnMore",
+ },
+ bridges: {
+ header: "h2#torPreferences-bridges-header",
+ description: "span#torPreferences-bridges-description",
+ learnMore: "label#torPreferences-bridges-learnMore",
+ useBridgeCheckbox: "checkbox#torPreferences-bridges-toggle",
+ bridgeSelectionRadiogroup:
+ "radiogroup#torPreferences-bridges-bridgeSelection",
+ builtinBridgeOption: "radio#torPreferences-bridges-radioBuiltin",
+ builtinBridgeList: "menulist#torPreferences-bridges-builtinList",
+ requestBridgeOption: "radio#torPreferences-bridges-radioRequestBridge",
+ requestBridgeButton: "button#torPreferences-bridges-buttonRequestBridge",
+ requestBridgeTextarea:
+ "textarea#torPreferences-bridges-textareaRequestBridge",
+ provideBridgeOption: "radio#torPreferences-bridges-radioProvideBridge",
+ provideBridgeDescription:
+ "description#torPreferences-bridges-descriptionProvideBridge",
+ provideBridgeTextarea:
+ "textarea#torPreferences-bridges-textareaProvideBridge",
+ },
+ advanced: {
+ header: "h2#torPreferences-advanced-header",
+ description: "span#torPreferences-advanced-description",
+ learnMore: "label#torPreferences-advanced-learnMore",
+ useProxyCheckbox: "checkbox#torPreferences-advanced-toggleProxy",
+ proxyTypeLabel: "label#torPreferences-localProxy-type",
+ proxyTypeList: "menulist#torPreferences-localProxy-builtinList",
+ proxyAddressLabel: "label#torPreferences-localProxy-address",
+ proxyAddressTextbox: "textbox#torPreferences-localProxy-textboxAddress",
+ proxyPortLabel: "label#torPreferences-localProxy-port",
+ proxyPortTextbox: "input#torPreferences-localProxy-textboxPort",
+ proxyUsernameLabel: "label#torPreferences-localProxy-username",
+ proxyUsernameTextbox: "textbox#torPreferences-localProxy-textboxUsername",
+ proxyPasswordLabel: "label#torPreferences-localProxy-password",
+ proxyPasswordTextbox: "textbox#torPreferences-localProxy-textboxPassword",
+ useFirewallCheckbox: "checkbox#torPreferences-advanced-toggleFirewall",
+ firewallAllowedPortsLabel: "label#torPreferences-advanced-allowedPorts",
+ firewallAllowedPortsTextbox:
+ "textbox#torPreferences-advanced-textboxAllowedPorts",
+ torLogsLabel: "label#torPreferences-torLogs",
+ torLogsButton: "button#torPreferences-buttonTorLogs",
+ },
+ }; /* selectors */
+
+ let retval = {
+ // cached frequently accessed DOM elements
+ _useBridgeCheckbox: null,
+ _bridgeSelectionRadiogroup: null,
+ _builtinBridgeOption: null,
+ _builtinBridgeMenulist: null,
+ _requestBridgeOption: null,
+ _requestBridgeButton: null,
+ _requestBridgeTextarea: null,
+ _provideBridgeOption: null,
+ _provideBridgeTextarea: null,
+ _useProxyCheckbox: null,
+ _proxyTypeLabel: null,
+ _proxyTypeMenulist: null,
+ _proxyAddressLabel: null,
+ _proxyAddressTextbox: null,
+ _proxyPortLabel: null,
+ _proxyPortTextbox: null,
+ _proxyUsernameLabel: null,
+ _proxyUsernameTextbox: null,
+ _proxyPasswordLabel: null,
+ _proxyPasswordTextbox: null,
+ _useFirewallCheckbox: null,
+ _allowedPortsLabel: null,
+ _allowedPortsTextbox: null,
+
+ // tor network settings
+ _bridgeSettings: null,
+ _proxySettings: null,
+ _firewallSettings: null,
+
+ // disables the provided list of elements
+ _setElementsDisabled(elements, disabled) {
+ for (let currentElement of elements) {
+ currentElement.disabled = disabled;
+ }
+ },
+
+ // populate xul with strings and cache the relevant elements
+ _populateXUL() {
+ // saves tor settings to disk when navigate away from about:preferences
+ window.addEventListener("blur", val => {
+ TorProtocolService.flushSettings();
+ });
+
+ document
+ .querySelector(selectors.category.title)
+ .setAttribute("value", TorStrings.settings.categoryTitle);
+
+ let prefpane = document.getElementById("mainPrefPane");
+
+ // Heading
+ prefpane.querySelector(selectors.torPreferences.header).innerText =
+ TorStrings.settings.torPreferencesHeading;
+ prefpane.querySelector(selectors.torPreferences.description).textContent =
+ TorStrings.settings.torPreferencesDescription;
+ {
+ let learnMore = prefpane.querySelector(
+ selectors.torPreferences.learnMore
+ );
+ learnMore.setAttribute("value", TorStrings.settings.learnMore);
+ learnMore.setAttribute(
+ "href",
+ TorStrings.settings.learnMoreTorBrowserURL
+ );
+ }
+
+ // Bridge setup
+ prefpane.querySelector(selectors.bridges.header).innerText =
+ TorStrings.settings.bridgesHeading;
+ prefpane.querySelector(selectors.bridges.description).textContent =
+ TorStrings.settings.bridgesDescription;
+ {
+ let learnMore = prefpane.querySelector(selectors.bridges.learnMore);
+ learnMore.setAttribute("value", TorStrings.settings.learnMore);
+ learnMore.setAttribute("href", TorStrings.settings.learnMoreBridgesURL);
+ }
+
+ this._useBridgeCheckbox = prefpane.querySelector(
+ selectors.bridges.useBridgeCheckbox
+ );
+ this._useBridgeCheckbox.setAttribute(
+ "label",
+ TorStrings.settings.useBridge
+ );
+ this._bridgeSelectionRadiogroup = prefpane.querySelector(
+ selectors.bridges.bridgeSelectionRadiogroup
+ );
+ this._bridgeSelectionRadiogroup.value = TorBridgeSource.BUILTIN;
+
+ // Builtin bridges
+ this._builtinBridgeOption = prefpane.querySelector(
+ selectors.bridges.builtinBridgeOption
+ );
+ this._builtinBridgeOption.setAttribute(
+ "label",
+ TorStrings.settings.selectBridge
+ );
+ this._builtinBridgeOption.setAttribute("value", TorBridgeSource.BUILTIN);
+ this._builtinBridgeMenulist = prefpane.querySelector(
+ selectors.bridges.builtinBridgeList
+ );
+
+ // Request bridge
+ this._requestBridgeOption = prefpane.querySelector(
+ selectors.bridges.requestBridgeOption
+ );
+ this._requestBridgeOption.setAttribute(
+ "label",
+ TorStrings.settings.requestBridgeFromTorProject
+ );
+ this._requestBridgeOption.setAttribute("value", TorBridgeSource.BRIDGEDB);
+ this._requestBridgeButton = prefpane.querySelector(
+ selectors.bridges.requestBridgeButton
+ );
+ this._requestBridgeButton.setAttribute(
+ "label",
+ TorStrings.settings.requestNewBridge
+ );
+ this._requestBridgeTextarea = prefpane.querySelector(
+ selectors.bridges.requestBridgeTextarea
+ );
+
+ // Provide a bridge
+ this._provideBridgeOption = prefpane.querySelector(
+ selectors.bridges.provideBridgeOption
+ );
+ this._provideBridgeOption.setAttribute(
+ "label",
+ TorStrings.settings.provideBridge
+ );
+ this._provideBridgeOption.setAttribute(
+ "value",
+ TorBridgeSource.USERPROVIDED
+ );
+ prefpane.querySelector(
+ selectors.bridges.provideBridgeDescription
+ ).textContent = TorStrings.settings.provideBridgeDirections;
+ this._provideBridgeTextarea = prefpane.querySelector(
+ selectors.bridges.provideBridgeTextarea
+ );
+ this._provideBridgeTextarea.setAttribute(
+ "placeholder",
+ TorStrings.settings.provideBridgePlaceholder
+ );
+
+ // Advanced setup
+ prefpane.querySelector(selectors.advanced.header).innerText =
+ TorStrings.settings.advancedHeading;
+ prefpane.querySelector(selectors.advanced.description).textContent =
+ TorStrings.settings.advancedDescription;
+ {
+ let learnMore = prefpane.querySelector(selectors.advanced.learnMore);
+ learnMore.setAttribute("value", TorStrings.settings.learnMore);
+ learnMore.setAttribute(
+ "href",
+ TorStrings.settings.learnMoreNetworkSettingsURL
+ );
+ }
+
+ // Local Proxy
+ this._useProxyCheckbox = prefpane.querySelector(
+ selectors.advanced.useProxyCheckbox
+ );
+ this._useProxyCheckbox.setAttribute(
+ "label",
+ TorStrings.settings.useLocalProxy
+ );
+ this._proxyTypeLabel = prefpane.querySelector(
+ selectors.advanced.proxyTypeLabel
+ );
+ this._proxyTypeLabel.setAttribute("value", TorStrings.settings.proxyType);
+
+ let mockProxies = [
+ {
+ value: TorProxyType.SOCKS4,
+ label: TorStrings.settings.proxyTypeSOCKS4,
+ },
+ {
+ value: TorProxyType.SOCKS5,
+ label: TorStrings.settings.proxyTypeSOCKS5,
+ },
+ { value: TorProxyType.HTTPS, label: TorStrings.settings.proxyTypeHTTP },
+ ];
+ this._proxyTypeMenulist = prefpane.querySelector(
+ selectors.advanced.proxyTypeList
+ );
+ for (let currentProxy of mockProxies) {
+ let menuEntry = document.createElement("menuitem");
+ menuEntry.setAttribute("value", currentProxy.value);
+ menuEntry.setAttribute("label", currentProxy.label);
+ this._proxyTypeMenulist.querySelector("menupopup").append(menuEntry);
+ }
+
+ this._proxyAddressLabel = prefpane.querySelector(
+ selectors.advanced.proxyAddressLabel
+ );
+ this._proxyAddressLabel.setAttribute(
+ "value",
+ TorStrings.settings.proxyAddress
+ );
+ this._proxyAddressTextbox = prefpane.querySelector(
+ selectors.advanced.proxyAddressTextbox
+ );
+ this._proxyAddressTextbox.setAttribute(
+ "placeholder",
+ TorStrings.settings.proxyAddressPlaceholder
+ );
+ this._proxyPortLabel = prefpane.querySelector(
+ selectors.advanced.proxyPortLabel
+ );
+ this._proxyPortLabel.setAttribute("value", TorStrings.settings.proxyPort);
+ this._proxyPortTextbox = prefpane.querySelector(
+ selectors.advanced.proxyPortTextbox
+ );
+ this._proxyUsernameLabel = prefpane.querySelector(
+ selectors.advanced.proxyUsernameLabel
+ );
+ this._proxyUsernameLabel.setAttribute(
+ "value",
+ TorStrings.settings.proxyUsername
+ );
+ this._proxyUsernameTextbox = prefpane.querySelector(
+ selectors.advanced.proxyUsernameTextbox
+ );
+ this._proxyUsernameTextbox.setAttribute(
+ "placeholder",
+ TorStrings.settings.proxyUsernamePasswordPlaceholder
+ );
+ this._proxyPasswordLabel = prefpane.querySelector(
+ selectors.advanced.proxyPasswordLabel
+ );
+ this._proxyPasswordLabel.setAttribute(
+ "value",
+ TorStrings.settings.proxyPassword
+ );
+ this._proxyPasswordTextbox = prefpane.querySelector(
+ selectors.advanced.proxyPasswordTextbox
+ );
+ this._proxyPasswordTextbox.setAttribute(
+ "placeholder",
+ TorStrings.settings.proxyUsernamePasswordPlaceholder
+ );
+
+ // Local firewall
+ this._useFirewallCheckbox = prefpane.querySelector(
+ selectors.advanced.useFirewallCheckbox
+ );
+ this._useFirewallCheckbox.setAttribute(
+ "label",
+ TorStrings.settings.useFirewall
+ );
+ this._allowedPortsLabel = prefpane.querySelector(
+ selectors.advanced.firewallAllowedPortsLabel
+ );
+ this._allowedPortsLabel.setAttribute(
+ "value",
+ TorStrings.settings.allowedPorts
+ );
+ this._allowedPortsTextbox = prefpane.querySelector(
+ selectors.advanced.firewallAllowedPortsTextbox
+ );
+ this._allowedPortsTextbox.setAttribute(
+ "placeholder",
+ TorStrings.settings.allowedPortsPlaceholder
+ );
+
+ // Tor logs
+ prefpane
+ .querySelector(selectors.advanced.torLogsLabel)
+ .setAttribute("value", TorStrings.settings.showTorDaemonLogs);
+ prefpane
+ .querySelector(selectors.advanced.torLogsButton)
+ .setAttribute("label", TorStrings.settings.showLogs);
+
+ // Disable all relevant elements by default
+ this._setElementsDisabled(
+ [
+ this._builtinBridgeOption,
+ this._builtinBridgeMenulist,
+ this._requestBridgeOption,
+ this._requestBridgeButton,
+ this._requestBridgeTextarea,
+ this._provideBridgeOption,
+ this._provideBridgeTextarea,
+ this._proxyTypeLabel,
+ this._proxyTypeMenulist,
+ this._proxyAddressLabel,
+ this._proxyAddressTextbox,
+ this._proxyPortLabel,
+ this._proxyPortTextbox,
+ this._proxyUsernameLabel,
+ this._proxyUsernameTextbox,
+ this._proxyPasswordLabel,
+ this._proxyPasswordTextbox,
+ this._allowedPortsLabel,
+ this._allowedPortsTextbox,
+ ],
+ true
+ );
+
+ // load bridge settings
+ let torBridgeSettings = new TorBridgeSettings();
+ torBridgeSettings.readSettings();
+
+ // populate the bridge list
+ for (let currentBridge of TorBridgeSettings.defaultBridgeTypes) {
+ let menuEntry = document.createElement("menuitem");
+ menuEntry.setAttribute("value", currentBridge);
+ menuEntry.setAttribute("label", currentBridge);
+ this._builtinBridgeMenulist
+ .querySelector("menupopup")
+ .append(menuEntry);
+ }
+
+ this.onSelectBridgeOption(torBridgeSettings.bridgeSource);
+ this.onToggleBridge(
+ torBridgeSettings.bridgeSource != TorBridgeSource.NONE
+ );
+ switch (torBridgeSettings.bridgeSource) {
+ case TorBridgeSource.NONE:
+ break;
+ case TorBridgeSource.BUILTIN:
+ this._builtinBridgeMenulist.value =
+ torBridgeSettings.selectedDefaultBridgeType;
+ break;
+ case TorBridgeSource.BRIDGEDB:
+ this._requestBridgeTextarea.value = torBridgeSettings.bridgeStrings;
+ break;
+ case TorBridgeSource.USERPROVIDED:
+ this._provideBridgeTextarea.value = torBridgeSettings.bridgeStrings;
+ break;
+ }
+
+ this._bridgeSettings = torBridgeSettings;
+
+ // load proxy settings
+ let torProxySettings = new TorProxySettings();
+ torProxySettings.readSettings();
+
+ if (torProxySettings.type != TorProxyType.NONE) {
+ this.onToggleProxy(true);
+ this.onSelectProxyType(torProxySettings.type);
+ this._proxyAddressTextbox.value = torProxySettings.address;
+ this._proxyPortTextbox.value = torProxySettings.port;
+ this._proxyUsernameTextbox.value = torProxySettings.username;
+ this._proxyPasswordTextbox.value = torProxySettings.password;
+ }
+
+ this._proxySettings = torProxySettings;
+
+ // load firewall settings
+ let torFirewallSettings = new TorFirewallSettings();
+ torFirewallSettings.readSettings();
+
+ if (torFirewallSettings.hasPorts) {
+ this.onToggleFirewall(true);
+ this._allowedPortsTextbox.value =
+ torFirewallSettings.commaSeparatedListString;
+ }
+
+ this._firewallSettings = torFirewallSettings;
+ },
+
+ init() {
+ this._populateXUL();
+ },
+
+ //
+ // Callbacks
+ //
+
+ // callback when using bridges toggled
+ onToggleBridge(enabled) {
+ this._useBridgeCheckbox.checked = enabled;
+ let disabled = !enabled;
+
+ // first disable all the bridge related elements
+ this._setElementsDisabled(
+ [
+ this._builtinBridgeOption,
+ this._builtinBridgeMenulist,
+ this._requestBridgeOption,
+ this._requestBridgeButton,
+ this._requestBridgeTextarea,
+ this._provideBridgeOption,
+ this._provideBridgeTextarea,
+ ],
+ disabled
+ );
+
+ // and selectively re-enable based on the radiogroup's current value
+ if (enabled) {
+ this.onSelectBridgeOption(this._bridgeSelectionRadiogroup.value);
+ } else {
+ this.onSelectBridgeOption(TorBridgeSource.NONE);
+ }
+ return this;
+ },
+
+ // callback when a bridge option is selected
+ onSelectBridgeOption(source) {
+ // disable all of the bridge elements under radio buttons
+ this._setElementsDisabled(
+ [
+ this._builtinBridgeMenulist,
+ this._requestBridgeButton,
+ this._requestBridgeTextarea,
+ this._provideBridgeTextarea,
+ ],
+ true
+ );
+
+ if (source != TorBridgeSource.NONE) {
+ this._bridgeSelectionRadiogroup.value = source;
+ }
+
+ switch (source) {
+ case TorBridgeSource.BUILTIN: {
+ this._setElementsDisabled([this._builtinBridgeMenulist], false);
+ break;
+ }
+ case TorBridgeSource.BRIDGEDB: {
+ this._setElementsDisabled(
+ [this._requestBridgeButton, this._requestBridgeTextarea],
+ false
+ );
+ break;
+ }
+ case TorBridgeSource.USERPROVIDED: {
+ this._setElementsDisabled([this._provideBridgeTextarea], false);
+ break;
+ }
+ }
+ return this;
+ },
+
+ // called when the request brige button is activated
+ onRequestBridge() {
+ let requestBridgeDialog = new RequestBridgeDialog();
+ requestBridgeDialog.openDialog(
+ gSubDialog,
+ this._proxySettings.proxyURI,
+ aBridges => {
+ if (aBridges.length > 0) {
+ let bridgeSettings = makeTorBridgeSettingsBridgeDB(aBridges);
+ bridgeSettings.writeSettings();
+ this._bridgeSettings = bridgeSettings;
+
+ this._requestBridgeTextarea.value = bridgeSettings.bridgeStrings;
+ }
+ }
+ );
+ return this;
+ },
+
+ // pushes bridge settings from UI to tor
+ onUpdateBridgeSettings() {
+ let bridgeSettings = null;
+
+ let source = this._useBridgeCheckbox.checked
+ ? this._bridgeSelectionRadiogroup.value
+ : TorBridgeSource.NONE;
+ switch (source) {
+ case TorBridgeSource.NONE: {
+ bridgeSettings = makeTorBridgeSettingsNone();
+ break;
+ }
+ case TorBridgeSource.BUILTIN: {
+ // if there is a built-in bridge already selected, use that
+ let bridgeType = this._builtinBridgeMenulist.value;
+ if (bridgeType) {
+ bridgeSettings = makeTorBridgeSettingsBuiltin(bridgeType);
+ } else {
+ bridgeSettings = makeTorBridgeSettingsNone();
+ }
+ break;
+ }
+ case TorBridgeSource.BRIDGEDB: {
+ // if there are bridgedb bridges saved in the text area, use them
+ let bridgeStrings = this._requestBridgeTextarea.value;
+ if (bridgeStrings) {
+ let bridgeStringList = parseBridgeStrings(bridgeStrings);
+ bridgeSettings = makeTorBridgeSettingsBridgeDB(bridgeStringList);
+ } else {
+ bridgeSettings = makeTorBridgeSettingsNone();
+ }
+ break;
+ }
+ case TorBridgeSource.USERPROVIDED: {
+ // if bridges already exist in the text area, use them
+ let bridgeStrings = this._provideBridgeTextarea.value;
+ if (bridgeStrings) {
+ let bridgeStringList = parseBridgeStrings(bridgeStrings);
+ bridgeSettings = makeTorBridgeSettingsUserProvided(
+ bridgeStringList
+ );
+ } else {
+ bridgeSettings = makeTorBridgeSettingsNone();
+ }
+ break;
+ }
+ }
+ bridgeSettings.writeSettings();
+ this._bridgeSettings = bridgeSettings;
+ return this;
+ },
+
+ // callback when proxy is toggled
+ onToggleProxy(enabled) {
+ this._useProxyCheckbox.checked = enabled;
+ let disabled = !enabled;
+
+ this._setElementsDisabled(
+ [
+ this._proxyTypeLabel,
+ this._proxyTypeMenulist,
+ this._proxyAddressLabel,
+ this._proxyAddressTextbox,
+ this._proxyPortLabel,
+ this._proxyPortTextbox,
+ this._proxyUsernameLabel,
+ this._proxyUsernameTextbox,
+ this._proxyPasswordLabel,
+ this._proxyPasswordTextbox,
+ ],
+ disabled
+ );
+ this.onSelectProxyType(this._proxyTypeMenulist.value);
+ return this;
+ },
+
+ // callback when proxy type is changed
+ onSelectProxyType(value) {
+ if (value == "") {
+ value = TorProxyType.NONE;
+ }
+ this._proxyTypeMenulist.value = value;
+ switch (value) {
+ case TorProxyType.NONE: {
+ this._setElementsDisabled(
+ [
+ this._proxyAddressLabel,
+ this._proxyAddressTextbox,
+ this._proxyPortLabel,
+ this._proxyPortTextbox,
+ this._proxyUsernameLabel,
+ this._proxyUsernameTextbox,
+ this._proxyPasswordLabel,
+ this._proxyPasswordTextbox,
+ ],
+ true
+ ); // DISABLE
+
+ this._proxyAddressTextbox.value = "";
+ this._proxyPortTextbox.value = "";
+ this._proxyUsernameTextbox.value = "";
+ this._proxyPasswordTextbox.value = "";
+ break;
+ }
+ case TorProxyType.SOCKS4: {
+ this._setElementsDisabled(
+ [
+ this._proxyAddressLabel,
+ this._proxyAddressTextbox,
+ this._proxyPortLabel,
+ this._proxyPortTextbox,
+ ],
+ false
+ ); // ENABLE
+ this._setElementsDisabled(
+ [
+ this._proxyUsernameLabel,
+ this._proxyUsernameTextbox,
+ this._proxyPasswordLabel,
+ this._proxyPasswordTextbox,
+ ],
+ true
+ ); // DISABLE
+
+ this._proxyUsernameTextbox.value = "";
+ this._proxyPasswordTextbox.value = "";
+ break;
+ }
+ case TorProxyType.SOCKS5:
+ case TorProxyType.HTTPS: {
+ this._setElementsDisabled(
+ [
+ this._proxyAddressLabel,
+ this._proxyAddressTextbox,
+ this._proxyPortLabel,
+ this._proxyPortTextbox,
+ this._proxyUsernameLabel,
+ this._proxyUsernameTextbox,
+ this._proxyPasswordLabel,
+ this._proxyPasswordTextbox,
+ ],
+ false
+ ); // ENABLE
+ break;
+ }
+ }
+ return this;
+ },
+
+ // pushes proxy settings from UI to tor
+ onUpdateProxySettings() {
+ const proxyType = this._useProxyCheckbox.checked
+ ? this._proxyTypeMenulist.value
+ : TorProxyType.NONE;
+ const addressString = this._proxyAddressTextbox.value;
+ const portString = this._proxyPortTextbox.value;
+ const usernameString = this._proxyUsernameTextbox.value;
+ const passwordString = this._proxyPasswordTextbox.value;
+
+ let proxySettings = null;
+
+ switch (proxyType) {
+ case TorProxyType.NONE:
+ proxySettings = makeTorProxySettingsNone();
+ break;
+ case TorProxyType.SOCKS4:
+ proxySettings = makeTorProxySettingsSocks4(
+ addressString,
+ parsePort(portString)
+ );
+ break;
+ case TorProxyType.SOCKS5:
+ proxySettings = makeTorProxySettingsSocks5(
+ addressString,
+ parsePort(portString),
+ usernameString,
+ passwordString
+ );
+ break;
+ case TorProxyType.HTTPS:
+ proxySettings = makeTorProxySettingsHTTPS(
+ addressString,
+ parsePort(portString),
+ usernameString,
+ passwordString
+ );
+ break;
+ }
+
+ proxySettings.writeSettings();
+ this._proxySettings = proxySettings;
+ return this;
+ },
+
+ // callback when firewall proxy is toggled
+ onToggleFirewall(enabled) {
+ this._useFirewallCheckbox.checked = enabled;
+ let disabled = !enabled;
+
+ this._setElementsDisabled(
+ [this._allowedPortsLabel, this._allowedPortsTextbox],
+ disabled
+ );
+
+ return this;
+ },
+
+ // pushes firewall settings from UI to tor
+ onUpdateFirewallSettings() {
+ let portListString = this._useFirewallCheckbox.checked
+ ? this._allowedPortsTextbox.value
+ : "";
+ let firewallSettings = null;
+
+ if (portListString) {
+ firewallSettings = makeTorFirewallSettingsCustom(
+ parsePortList(portListString)
+ );
+ } else {
+ firewallSettings = makeTorFirewallSettingsNone();
+ }
+
+ firewallSettings.writeSettings();
+ this._firewallSettings = firewallSettings;
+ return this;
+ },
+
+ onViewTorLogs() {
+ let torLogDialog = new TorLogDialog();
+ torLogDialog.openDialog(gSubDialog);
+ },
+ };
+ return retval;
+})(); /* gTorPane */
diff --git a/browser/components/torpreferences/content/torPane.xul b/browser/components/torpreferences/content/torPane.xul
new file mode 100644
index 000000000000..298c148bcbf2
--- /dev/null
+++ b/browser/components/torpreferences/content/torPane.xul
@@ -0,0 +1,119 @@
+<!-- Tor panel -->
+
+<script type="application/javascript"
+ src="chrome://browser/content/torpreferences/torPane.js"/>
+
+<hbox id="torPreferencesCategory"
+ class="subcategory"
+ hidden="true"
+ data-category="paneTor">
+ <html:h1 id="torPreferences-header"/>
+</hbox>
+
+<groupbox data-category="paneTor" >
+ <description flex="1">
+ <html:span id="torPreferences-description" class="tail-with-learn-more"/>
+ <label id="torPreferences-learnMore" class="learnMore text-link" is="text-link"/>
+ </description>
+</groupbox>
+
+<!-- Bridges -->
+<groupbox id="torPreferences-bridges-group" data-category="paneTor" >
+ <html:h2 id="torPreferences-bridges-header"/>
+ <description flex="1">
+ <html:span id="torPreferences-bridges-description" class="tail-with-learn-more"/>
+ <label id="torPreferences-bridges-learnMore" class="learnMore text-link" is="text-link"/>
+ </description>
+ <checkbox id="torPreferences-bridges-toggle" oncommand="gTorPane.onToggleBridge(this.checked).onUpdateBridgeSettings();"/>
+ <radiogroup id="torPreferences-bridges-bridgeSelection"
+ oncommand="gTorPane.onSelectBridgeOption(this.value).onUpdateBridgeSettings();">
+ <hbox class="indent">
+ <radio id="torPreferences-bridges-radioBuiltin"/>
+ <spacer flex="1"/>
+ <menulist id="torPreferences-bridges-builtinList" class="torMarginFix" oncommand="gTorPane.onUpdateBridgeSettings();">
+ <menupopup/>
+ </menulist>
+ </hbox>
+ <vbox class="indent">
+ <hbox>
+ <radio id="torPreferences-bridges-radioRequestBridge"/>
+ <space flex="1"/>
+ <button id="torPreferences-bridges-buttonRequestBridge" class="torMarginFix" oncommand="gTorPane.onRequestBridge();"/>
+ </hbox>
+ <html:textarea
+ id="torPreferences-bridges-textareaRequestBridge"
+ class="indent torMarginFix"
+ multiline="true"
+ rows="3"
+ readonly="true"/>
+ </vbox>
+ <hbox class="indent" flex="1">
+ <vbox flex="1">
+ <radio id="torPreferences-bridges-radioProvideBridge"/>
+ <description id="torPreferences-bridges-descriptionProvideBridge" class="indent"/>
+ <html:textarea
+ id="torPreferences-bridges-textareaProvideBridge"
+ class="indent torMarginFix"
+ multiline="true"
+ rows="3"
+ onblur="gTorPane.onUpdateBridgeSettings();"/>
+ </vbox>
+ </hbox>
+ </radiogroup>
+</groupbox>
+
+<!-- Advanced -->
+<groupbox id="torPreferences-advanced-group" data-category="paneTor">
+ <html:h2 id="torPreferences-advanced-header"/>
+ <description flex="1">
+ <html:span id="torPreferences-advanced-description" class="tail-with-learn-more"/>
+ <label id="torPreferences-advanced-learnMore" class="learnMore text-link" is="text-link"/>
+ </description>
+ <grid flex="1">
+ <columns>
+ <column flex="0"/>
+ <column flex="1"/>
+ </columns>
+ <rows>
+ <!-- Local Proxy -->
+ <checkbox id="torPreferences-advanced-toggleProxy" oncommand="gTorPane.onToggleProxy(this.checked).onUpdateProxySettings();"/>
+ <row class="indent" align="center">
+ <label id="torPreferences-localProxy-type"/>
+ <hbox>
+ <spacer flex="1"/>
+ <menulist id="torPreferences-localProxy-builtinList" class="torMarginFix" oncommand="gTorPane.onSelectProxyType(this.value).onUpdateProxySettings();">
+ <menupopup/>
+ </menulist>
+ </hbox>
+ </row>
+ <row class="indent" align="center">
+ <label id="torPreferences-localProxy-address"/>
+ <hbox align="center">
+ <textbox id="torPreferences-localProxy-textboxAddress" class="torMarginFix" flex="4" onblur="gTorPane.onUpdateProxySettings();"/>
+ <label id="torPreferences-localProxy-port"/>
+ <!-- proxy-port-input class style pulled from preferences.css and used in the vanilla proxy setup menu -->
+ <html:input id="torPreferences-localProxy-textboxPort" class="proxy-port-input torMarginFix" hidespinbuttons="true" type="number" min="0" max="65535" maxlength="5" onblur="gTorPane.onUpdateProxySettings();"/>
+ </hbox>
+ </row>
+ <row class="indent" align="center">
+ <label id="torPreferences-localProxy-username"/>
+ <hbox align="center">
+ <textbox id="torPreferences-localProxy-textboxUsername" class="torMarginFix" flex="1" onblur="gTorPane.onUpdateProxySettings();"/>
+ <label id="torPreferences-localProxy-password"/>
+ <textbox id="torPreferences-localProxy-textboxPassword" class="torMarginFix" type="password" flex="1" onblur="gTorPane.onUpdateProxySettings();"/>
+ </hbox>
+ </row>
+ <!-- Firewall -->
+ <checkbox id="torPreferences-advanced-toggleFirewall" oncommand="gTorPane.onToggleFirewall(this.checked).onUpdateFirewallSettings();"/>
+ <row class="indent" align="center">
+ <label id="torPreferences-advanced-allowedPorts"/>
+ <textbox id="torPreferences-advanced-textboxAllowedPorts" class="torMarginFix" value="80,443" onblur="gTorPane.onUpdateFirewallSettings();"/>
+ </row>
+ </rows>
+ </grid>
+ <hbox id="torPreferences-torDaemon-hbox" align="center">
+ <label id="torPreferences-torLogs"/>
+ <spacer flex="1"/>
+ <button id="torPreferences-buttonTorLogs" class="torMarginFix" oncommand="gTorPane.onViewTorLogs();"/>
+ </hbox>
+</groupbox>
diff --git a/browser/components/torpreferences/content/torPreferences.css b/browser/components/torpreferences/content/torPreferences.css
new file mode 100644
index 000000000000..19c7421cd647
--- /dev/null
+++ b/browser/components/torpreferences/content/torPreferences.css
@@ -0,0 +1,63 @@
+#category-tor > .category-icon {
+ list-style-image: url("chrome://browser/content/torpreferences/torPreferencesIcon.svg");
+}
+
+hbox#torPreferences-torDaemon-hbox {
+ margin-top: 20px;
+}
+
+description#torPreferences-requestBridge-description {
+ /*margin-bottom: 1em;*/
+ min-height: 2em;
+}
+
+image#torPreferences-requestBridge-captchaImage {
+ margin: 1em;
+ min-height: 125px;
+}
+
+button#torPreferences-requestBridge-refreshCaptchaButton {
+ min-width: initial;
+}
+
+dialog#torPreferences-requestBridge-dialog > hbox
+{
+ margin-bottom: 1em;
+}
+
+/*
+ Various elements that really should be lining up don't because they have inconsistent margins
+*/
+.torMarginFix
+{
+ margin-left : 4px;
+ margin-right : 4px;
+}
+
+/*
+ This hbox is hidden by css here by default so that the
+ xul dialog allocates enough screen space for the error message
+ element, otherwise it gets cut off since dialog's overflow is hidden
+*/
+hbox#torPreferences-requestBridge-incorrectCaptchaHbox {
+ visibility: hidden;
+}
+
+image#torPreferences-requestBridge-errorIcon {
+ list-style-image: url("chrome://browser/skin/warning.svg");
+}
+
+groupbox#torPreferences-bridges-group textarea {
+ white-space: pre;
+ overflow: auto;
+}
+
+textarea#torPreferences-torDialog-textarea {
+ -moz-box-flex: 1;
+ font-family: monospace;
+ font-size: 0.8em;
+ white-space: pre;
+ overflow: auto;
+ /* 10 lines */
+ min-height: 20em;
+}
\ No newline at end of file
diff --git a/browser/components/torpreferences/content/torPreferencesIcon.svg b/browser/components/torpreferences/content/torPreferencesIcon.svg
new file mode 100644
index 000000000000..d7895f1107c5
--- /dev/null
+++ b/browser/components/torpreferences/content/torPreferencesIcon.svg
@@ -0,0 +1,5 @@
+<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24">
+ <g fill="context-fill" fill-opacity="context-fill-opacity" fill-rule="nonzero">
+ <path d="M12.0246161,21.8174863 L12.0246161,20.3628098 C16.6324777,20.3495038 20.3634751,16.6108555 20.3634751,11.9996673 C20.3634751,7.38881189 16.6324777,3.65016355 12.0246161,3.63685757 L12.0246161,2.18218107 C17.4358264,2.1958197 21.8178189,6.58546322 21.8178189,11.9996673 C21.8178189,17.4142042 17.4358264,21.8041803 12.0246161,21.8174863 L12.0246161,21.8174863 Z M12.0246161,16.7259522 C14.623607,16.7123136 16.7272828,14.6023175 16.7272828,11.9996673 C16.7272828,9.39734991 14.623607,7.28735377 12.0246161,7.27371516 L12.0246161,5.81937131 C15.4272884,5.8326773 18.1819593,8.59400123 18.1819593,11.9996673 C18.1819593,15.4056661 15.4272884,18.1669901 12.0246161,18.1802961 L12.0246161,16.7259522 Z M12.0246161,9.45556355 C13.4187503,9.46886953 14.5454344,10.6022066 14.5454344,11.9996673 C14.5454344,13.3974608 13.4187503,14.5307978 12.0246161,14.5441038 L12.0246161,9.45556355 Z M0,11.9996673 C0,18.6273771 5.37229031,24 12,24 C18.6273771,24 24,18.6273771 24,11.9996673 C24,5.37229031
18.6273771,0 12,0 C5.37229031,0 0,5.37229031 0,11.9996673 Z"/>
+ </g>
+</svg>
\ No newline at end of file
diff --git a/browser/components/torpreferences/content/torProxySettings.jsm b/browser/components/torpreferences/content/torProxySettings.jsm
new file mode 100644
index 000000000000..98bb5e8d5cbf
--- /dev/null
+++ b/browser/components/torpreferences/content/torProxySettings.jsm
@@ -0,0 +1,245 @@
+"use strict";
+
+var EXPORTED_SYMBOLS = [
+ "TorProxyType",
+ "TorProxySettings",
+ "makeTorProxySettingsNone",
+ "makeTorProxySettingsSocks4",
+ "makeTorProxySettingsSocks5",
+ "makeTorProxySettingsHTTPS",
+];
+
+const { TorProtocolService } = ChromeUtils.import(
+ "resource:///modules/TorProtocolService.jsm"
+);
+const { TorStrings } = ChromeUtils.import("resource:///modules/TorStrings.jsm");
+const { parseAddrPort, parseUsernamePassword } = ChromeUtils.import(
+ "chrome://browser/content/torpreferences/parseFunctions.jsm"
+);
+
+const TorProxyType = {
+ NONE: "NONE",
+ SOCKS4: "SOCKS4",
+ SOCKS5: "SOCKS5",
+ HTTPS: "HTTPS",
+};
+
+class TorProxySettings {
+ constructor() {
+ this._proxyType = TorProxyType.NONE;
+ this._proxyAddress = undefined;
+ this._proxyPort = undefined;
+ this._proxyUsername = undefined;
+ this._proxyPassword = undefined;
+ }
+
+ get type() {
+ return this._proxyType;
+ }
+ get address() {
+ return this._proxyAddress;
+ }
+ get port() {
+ return this._proxyPort;
+ }
+ get username() {
+ return this._proxyUsername;
+ }
+ get password() {
+ return this._proxyPassword;
+ }
+ get proxyURI() {
+ switch (this._proxyType) {
+ case TorProxyType.SOCKS4:
+ return `socks4a://${this._proxyAddress}:${this._proxyPort}`;
+ case TorProxyType.SOCKS5:
+ if (this._proxyUsername) {
+ return `socks5://${this._proxyUsername}:${this._proxyPassword}@${
+ this._proxyAddress
+ }:${this._proxyPort}`;
+ }
+ return `socks5://${this._proxyAddress}:${this._proxyPort}`;
+ case TorProxyType.HTTPS:
+ if (this._proxyUsername) {
+ return `http://${this._proxyUsername}:${this._proxyPassword}@${
+ this._proxyAddress
+ }:${this._proxyPort}`;
+ }
+ return `http://${this._proxyAddress}:${this._proxyPort}`;
+ }
+ return undefined;
+ }
+
+ // attempts to read proxy settings from Tor daemon
+ readSettings() {
+ // SOCKS4
+ {
+ let addressPort = TorProtocolService.readStringSetting(
+ TorStrings.configKeys.socks4Proxy
+ );
+ if (addressPort) {
+ // address+port
+ let [proxyAddress, proxyPort] = parseAddrPort(addressPort);
+
+ this._proxyType = TorProxyType.SOCKS4;
+ this._proxyAddress = proxyAddress;
+ this._proxyPort = proxyPort;
+ this._proxyUsername = "";
+ this._proxyPassword = "";
+
+ return;
+ }
+ }
+
+ // SOCKS5
+ {
+ let addressPort = TorProtocolService.readStringSetting(
+ TorStrings.configKeys.socks5Proxy
+ );
+
+ if (addressPort) {
+ // address+port
+ let [proxyAddress, proxyPort] = parseAddrPort(addressPort);
+ // username
+ let proxyUsername = TorProtocolService.readStringSetting(
+ TorStrings.configKeys.socks5ProxyUsername
+ );
+ // password
+ let proxyPassword = TorProtocolService.readStringSetting(
+ TorStrings.configKeys.socks5ProxyPassword
+ );
+
+ this._proxyType = TorProxyType.SOCKS5;
+ this._proxyAddress = proxyAddress;
+ this._proxyPort = proxyPort;
+ this._proxyUsername = proxyUsername;
+ this._proxyPassword = proxyPassword;
+
+ return;
+ }
+ }
+
+ // HTTP
+ {
+ let addressPort = TorProtocolService.readStringSetting(
+ TorStrings.configKeys.httpsProxy
+ );
+
+ if (addressPort) {
+ // address+port
+ let [proxyAddress, proxyPort] = parseAddrPort(addressPort);
+
+ // username:password
+ let proxyAuthenticator = TorProtocolService.readStringSetting(
+ TorStrings.configKeys.httpsProxyAuthenticator
+ );
+
+ let [proxyUsername, proxyPassword] = ["", ""];
+ if (proxyAuthenticator) {
+ [proxyUsername, proxyPassword] = parseUsernamePassword(
+ proxyAuthenticator
+ );
+ }
+
+ this._proxyType = TorProxyType.HTTPS;
+ this._proxyAddress = proxyAddress;
+ this._proxyPort = proxyPort;
+ this._proxyUsername = proxyUsername;
+ this._proxyPassword = proxyPassword;
+ }
+ }
+ // no proxy settings
+ } /* TorProxySettings::ReadFromTor() */
+
+ // attempts to write proxy settings to Tor daemon
+ // throws on error
+ writeSettings() {
+ let settingsObject = new Map();
+
+ // init proxy related settings to null so Tor daemon resets them
+ settingsObject.set(TorStrings.configKeys.socks4Proxy, null);
+ settingsObject.set(TorStrings.configKeys.socks5Proxy, null);
+ settingsObject.set(TorStrings.configKeys.socks5ProxyUsername, null);
+ settingsObject.set(TorStrings.configKeys.socks5ProxyPassword, null);
+ settingsObject.set(TorStrings.configKeys.httpsProxy, null);
+ settingsObject.set(TorStrings.configKeys.httpsProxyAuthenticator, null);
+
+ switch (this._proxyType) {
+ case TorProxyType.SOCKS4:
+ settingsObject.set(
+ TorStrings.configKeys.socks4Proxy,
+ `${this._proxyAddress}:${this._proxyPort}`
+ );
+ break;
+ case TorProxyType.SOCKS5:
+ settingsObject.set(
+ TorStrings.configKeys.socks5Proxy,
+ `${this._proxyAddress}:${this._proxyPort}`
+ );
+ settingsObject.set(
+ TorStrings.configKeys.socks5ProxyUsername,
+ this._proxyUsername
+ );
+ settingsObject.set(
+ TorStrings.configKeys.socks5ProxyPassword,
+ this._proxyPassword
+ );
+ break;
+ case TorProxyType.HTTPS:
+ settingsObject.set(
+ TorStrings.configKeys.httpsProxy,
+ `${this._proxyAddress}:${this._proxyPort}`
+ );
+ settingsObject.set(
+ TorStrings.configKeys.httpsProxyAuthenticator,
+ `${this._proxyUsername}:${this._proxyPassword}`
+ );
+ break;
+ }
+
+ TorProtocolService.writeSettings(settingsObject);
+ } /* TorProxySettings::WriteToTor() */
+}
+
+// factory methods for our various supported proxies
+function makeTorProxySettingsNone() {
+ return new TorProxySettings();
+}
+
+function makeTorProxySettingsSocks4(aProxyAddress, aProxyPort) {
+ let retval = new TorProxySettings();
+ retval._proxyType = TorProxyType.SOCKS4;
+ retval._proxyAddress = aProxyAddress;
+ retval._proxyPort = aProxyPort;
+ return retval;
+}
+
+function makeTorProxySettingsSocks5(
+ aProxyAddress,
+ aProxyPort,
+ aProxyUsername,
+ aProxyPassword
+) {
+ let retval = new TorProxySettings();
+ retval._proxyType = TorProxyType.SOCKS5;
+ retval._proxyAddress = aProxyAddress;
+ retval._proxyPort = aProxyPort;
+ retval._proxyUsername = aProxyUsername;
+ retval._proxyPassword = aProxyPassword;
+ return retval;
+}
+
+function makeTorProxySettingsHTTPS(
+ aProxyAddress,
+ aProxyPort,
+ aProxyUsername,
+ aProxyPassword
+) {
+ let retval = new TorProxySettings();
+ retval._proxyType = TorProxyType.HTTPS;
+ retval._proxyAddress = aProxyAddress;
+ retval._proxyPort = aProxyPort;
+ retval._proxyUsername = aProxyUsername;
+ retval._proxyPassword = aProxyPassword;
+ return retval;
+}
diff --git a/browser/components/torpreferences/jar.mn b/browser/components/torpreferences/jar.mn
new file mode 100644
index 000000000000..44920322fe4f
--- /dev/null
+++ b/browser/components/torpreferences/jar.mn
@@ -0,0 +1,14 @@
+browser.jar:
+ content/browser/torpreferences/parseFunctions.jsm (content/parseFunctions.jsm)
+ content/browser/torpreferences/requestBridgeDialog.xul (content/requestBridgeDialog.xul)
+ content/browser/torpreferences/requestBridgeDialog.jsm (content/requestBridgeDialog.jsm)
+ content/browser/torpreferences/torBridgeSettings.jsm (content/torBridgeSettings.jsm)
+ content/browser/torpreferences/torCategory.inc.xul (content/torCategory.inc.xul)
+ content/browser/torpreferences/torFirewallSettings.jsm (content/torFirewallSettings.jsm)
+ content/browser/torpreferences/torLogDialog.jsm (content/torLogDialog.jsm)
+ content/browser/torpreferences/torLogDialog.xul (content/torLogDialog.xul)
+ content/browser/torpreferences/torPane.js (content/torPane.js)
+ content/browser/torpreferences/torPane.xul (content/torPane.xul)
+ content/browser/torpreferences/torPreferences.css (content/torPreferences.css)
+ content/browser/torpreferences/torPreferencesIcon.svg (content/torPreferencesIcon.svg)
+ content/browser/torpreferences/torProxySettings.jsm (content/torProxySettings.jsm)
diff --git a/browser/components/torpreferences/moz.build b/browser/components/torpreferences/moz.build
new file mode 100644
index 000000000000..7e103239c8d6
--- /dev/null
+++ b/browser/components/torpreferences/moz.build
@@ -0,0 +1 @@
+JAR_MANIFESTS += ['jar.mn']
diff --git a/browser/modules/BridgeDB.jsm b/browser/modules/BridgeDB.jsm
new file mode 100644
index 000000000000..16bf02e6c688
--- /dev/null
+++ b/browser/modules/BridgeDB.jsm
@@ -0,0 +1,110 @@
+"use strict;";
+
+var EXPORTED_SYMBOLS = ["BridgeDB"];
+
+const { TorLauncherBridgeDB } = ChromeUtils.import(
+ "resource://torlauncher/modules/tl-bridgedb.jsm"
+);
+const { TorProtocolService } = ChromeUtils.import(
+ "resource:///modules/TorProtocolService.jsm"
+);
+const { TorStrings } = ChromeUtils.import("resource:///modules/TorStrings.jsm");
+
+var BridgeDB = {
+ _moatRequestor: null,
+ _currentCaptchaInfo: null,
+ _bridges: null,
+
+ get currentCaptchaImage() {
+ if (this._currentCaptchaInfo) {
+ return this._currentCaptchaInfo.captchaImage;
+ }
+ return null;
+ },
+
+ get currentBridges() {
+ return this._bridges;
+ },
+
+ submitCaptchaGuess(aCaptchaSolution) {
+ if (this._moatRequestor && this._currentCaptchaInfo) {
+ return this._moatRequestor
+ .finishFetch(
+ this._currentCaptchaInfo.transport,
+ this._currentCaptchaInfo.challenge,
+ aCaptchaSolution
+ )
+ .then(aBridgeInfo => {
+ this._moatRequestor.close();
+ this._moatRequestor = null;
+ this._currentCaptchaInfo = null;
+ this._bridges = aBridgeInfo.bridges;
+ // array of bridge strings
+ return this._bridges;
+ });
+ }
+
+ return new Promise((aResponse, aReject) => {
+ aReject(new Error("Invalid _moatRequestor or _currentCaptchaInfo"));
+ });
+ },
+
+ requestNewCaptchaImage(aProxyURI) {
+ // close and clear out existing state on captcha request
+ this.close();
+
+ let transportPlugins = TorProtocolService.readStringArraySetting(
+ TorStrings.configKeys.clientTransportPlugin
+ );
+
+ let meekClientPath;
+ let meekTransport; // We support both "meek" and "meek_lite".
+ let meekClientArgs;
+ // TODO: shouldn't this early out once meek settings are found?
+ for (const line of transportPlugins) {
+ // Parse each ClientTransportPlugin line and look for the meek or
+ // meek_lite transport. This code works a lot like the Tor daemon's
+ // parse_transport_line() function.
+ let tokens = line.split(" ");
+ if (tokens.length > 2 && tokens[1] == "exec") {
+ let transportArray = tokens[0].split(",").map(aStr => aStr.trim());
+ let transport = transportArray.find(
+ aTransport => aTransport === "meek"
+ );
+ if (!transport) {
+ transport = transportArray.find(
+ aTransport => aTransport === "meek_lite"
+ );
+ }
+ if (transport) {
+ meekTransport = transport;
+ meekClientPath = tokens[2];
+ meekClientArgs = tokens.slice(3);
+ }
+ }
+ }
+
+ this._moatRequestor = TorLauncherBridgeDB.createMoatRequestor();
+
+ return this._moatRequestor
+ .init(aProxyURI, meekTransport, meekClientPath, meekClientArgs)
+ .then(() => {
+ // TODO: get this from TorLauncherUtil
+ let bridgeType = "obfs4";
+ return this._moatRequestor.fetchBridges([bridgeType]);
+ })
+ .then(aCaptchaInfo => {
+ // cache off the current captcha info as the challenge is needed for response
+ this._currentCaptchaInfo = aCaptchaInfo;
+ return aCaptchaInfo.captchaImage;
+ });
+ },
+
+ close() {
+ if (this._moatRequestor) {
+ this._moatRequestor.close();
+ this._moatRequestor = null;
+ }
+ this._currentCaptchaInfo = null;
+ },
+};
diff --git a/browser/modules/TorProtocolService.jsm b/browser/modules/TorProtocolService.jsm
new file mode 100644
index 000000000000..682e7be9de1a
--- /dev/null
+++ b/browser/modules/TorProtocolService.jsm
@@ -0,0 +1,203 @@
+"use strict";
+
+var EXPORTED_SYMBOLS = ["TorProtocolService"];
+
+var TorProtocolService = {
+ _tlps: Cc["@torproject.org/torlauncher-protocol-service;1"].getService(
+ Ci.nsISupports
+ ).wrappedJSObject,
+ // maintain a map of tor settings set by Tor Browser so that we don't
+ // repeatedly set the same key/values over and over
+ // this map contains string keys to primitive or array values
+ _settingsCache: new Map(),
+
+ _typeof(aValue) {
+ switch (typeof aValue) {
+ case "boolean":
+ return "boolean";
+ case "string":
+ return "string";
+ case "object":
+ if (aValue == null) {
+ return "null";
+ } else if (Array.isArray(aValue)) {
+ return "array";
+ }
+ return "object";
+ }
+ return "unknown";
+ },
+
+ _assertValidSettingKey(aSetting) {
+ // ensure the 'key' is a string
+ if (typeof aSetting != "string") {
+ throw new Error(
+ `Expected setting of type string but received ${typeof aSetting}`
+ );
+ }
+ },
+
+ _assertValidSetting(aSetting, aValue) {
+ this._assertValidSettingKey(aSetting);
+
+ const valueType = this._typeof(aValue);
+ switch (valueType) {
+ case "boolean":
+ case "string":
+ case "null":
+ return;
+ case "array":
+ for (const element of aValue) {
+ if (typeof element != "string") {
+ throw new Error(
+ `Setting '${aSetting}' array contains value of invalid type '${typeof element}'`
+ );
+ }
+ }
+ return;
+ default:
+ throw new Error(
+ `Invalid object type received for setting '${aSetting}'`
+ );
+ }
+ },
+
+ // takes a Map containing tor settings
+ // throws on error
+ writeSettings(aSettingsObj) {
+ // only write settings that have changed
+ let newSettings = new Map();
+ for (const [setting, value] of aSettingsObj) {
+ let saveSetting = false;
+
+ // make sure we have valid data here
+ this._assertValidSetting(setting, value);
+
+ if (!this._settingsCache.has(setting)) {
+ // no cached setting, so write
+ saveSetting = true;
+ } else {
+ const cachedValue = this._settingsCache.get(setting);
+ if (value != cachedValue) {
+ // compare arrays member-wise
+ if (Array.isArray(value) && Array.isArray(cachedValue)) {
+ if (value.length != cachedValue.length) {
+ saveSetting = true;
+ } else {
+ const arrayLength = value.length;
+ for (let i = 0; i < arrayLength; ++i) {
+ if (value[i] != cachedValue[i]) {
+ saveSetting = true;
+ break;
+ }
+ }
+ }
+ } else {
+ // some other different values
+ saveSetting = true;
+ }
+ }
+ }
+
+ if (saveSetting) {
+ newSettings.set(setting, value);
+ }
+ }
+
+ // only write if new setting to save
+ if (newSettings.size > 0) {
+ // convert settingsObject map to js object for torlauncher-protocol-service
+ let settingsObject = {};
+ for (const [setting, value] of newSettings) {
+ // console.log(`${setting} : ${value}`);
+ settingsObject[setting] = value;
+ }
+
+ let errorObject = {};
+ if (!this._tlps.TorSetConfWithReply(settingsObject, errorObject)) {
+ throw new Error(errorObject.details);
+ }
+
+ // save settings to cache after successfully writing to Tor
+ for (const [setting, value] of newSettings) {
+ this._settingsCache.set(setting, value);
+ }
+ }
+ },
+
+ _readSetting(aSetting) {
+ this._assertValidSettingKey(aSetting);
+ let reply = this._tlps.TorGetConf(aSetting);
+ if (this._tlps.TorCommandSucceeded(reply)) {
+ return reply.lineArray;
+ }
+ throw new Error(reply.lineArray.join("\n"));
+ },
+
+ _readBoolSetting(aSetting) {
+ let lineArray = this._readSetting(aSetting);
+ if (lineArray.length != 1) {
+ throw new Error(
+ `Expected an array with length 1 but received array of length ${
+ lineArray.length
+ }`
+ );
+ }
+
+ let retval = lineArray[0];
+ switch (retval) {
+ case "0":
+ return false;
+ case "1":
+ return true;
+ default:
+ throw new Error(`Expected boolean (1 or 0) but received '${retval}'`);
+ }
+ },
+
+ _readStringSetting(aSetting) {
+ let lineArray = this._readSetting(aSetting);
+ if (lineArray.length != 1) {
+ throw new Error(
+ `Expected an array with length 1 but received array of length ${
+ lineArray.length
+ }`
+ );
+ }
+ return lineArray[0];
+ },
+
+ _readStringArraySetting(aSetting) {
+ let lineArray = this._readSetting(aSetting);
+ return lineArray;
+ },
+
+ readBoolSetting(aSetting) {
+ let value = this._readBoolSetting(aSetting);
+ this._settingsCache.set(aSetting, value);
+ return value;
+ },
+
+ readStringSetting(aSetting) {
+ let value = this._readStringSetting(aSetting);
+ this._settingsCache.set(aSetting, value);
+ return value;
+ },
+
+ readStringArraySetting(aSetting) {
+ let value = this._readStringArraySetting(aSetting);
+ this._settingsCache.set(aSetting, value);
+ return value;
+ },
+
+ // writes current tor settings to disk
+ flushSettings() {
+ this._tlps.TorSendCommand("SAVECONF");
+ },
+
+ getLog() {
+ let countObj = { value: 0 };
+ let torLog = this._tlps.TorGetLog(countObj);
+ return torLog;
+ },
+};
diff --git a/browser/modules/TorStrings.jsm b/browser/modules/TorStrings.jsm
new file mode 100644
index 000000000000..c7bd6f4236ae
--- /dev/null
+++ b/browser/modules/TorStrings.jsm
@@ -0,0 +1,326 @@
+"use strict";
+
+var EXPORTED_SYMBOLS = ["TorStrings"];
+
+const { XPCOMUtils } = ChromeUtils.import(
+ "resource://gre/modules/XPCOMUtils.jsm"
+);
+const { getLocale } = ChromeUtils.import(
+ "resource://torbutton/modules/utils.js"
+);
+
+XPCOMUtils.defineLazyGlobalGetters(this, ["DOMParser"]);
+XPCOMUtils.defineLazyGetter(this, "domParser", () => {
+ const parser = new DOMParser();
+ parser.forceEnableDTD();
+ return parser;
+});
+
+/*
+ Tor String Bundle
+
+ Strings loaded from torbutton/tor-launcher, but provide a fallback in case they aren't available
+*/
+class TorStringBundle {
+ constructor(aBundleURLs, aPrefix) {
+ let locations = [];
+ for (const [index, url] of aBundleURLs.entries()) {
+ locations.push(`<!ENTITY % dtd_${index} SYSTEM "${url}">%dtd_${index};`);
+ }
+ this._locations = locations;
+ this._prefix = aPrefix;
+ }
+
+ // copied from testing/marionette/l10n.js
+ localizeEntity(urls, id) {
+ // Use the DOM parser to resolve the entity and extract its real value
+ let header = `<?xml version="1.0"?><!DOCTYPE elem [${this._locations.join(
+ ""
+ )}]>`;
+ let elem = `<elem id="elementID">&${id};</elem>`;
+ let doc = domParser.parseFromString(header + elem, "text/xml");
+ let element = doc.querySelector("elem[id='elementID']");
+
+ if (element === null) {
+ throw new Error(`Entity with id='${id}' hasn't been found`);
+ }
+
+ return element.textContent;
+ }
+
+ getString(key, fallback) {
+ if (key) {
+ try {
+ return this.localizeEntity(this._bundleURLs, `${this._prefix}${key}`);
+ } catch (e) {}
+ }
+
+ // on failure, assign the fallback if it exists
+ if (fallback) {
+ return fallback;
+ }
+ // otherwise return string key
+ return `$(${key})`;
+ }
+}
+
+/*
+ Security Level Strings
+*/
+var TorStrings = {
+ /*
+ Tor Browser Security Level Strings
+ */
+ securityLevel: (function() {
+ let tsb = new TorStringBundle(
+ ["chrome://torbutton/locale/torbutton.dtd"],
+ "torbutton.prefs.sec_"
+ );
+ let getString = function(key, fallback) {
+ return tsb.getString(key, fallback);
+ };
+
+ // read localized strings from torbutton; but use hard-coded en-US strings as fallbacks in case of error
+ let retval = {
+ securityLevel: getString("caption", "Security Level"),
+ customWarning: getString("custom_warning", "Custom"),
+ overview: getString(
+ "overview",
+ "Disable certain web features that can be used to attack your security and anonymity."
+ ),
+ standard: {
+ level: getString("standard_label", "Standard"),
+ tooltip: getString("standard_tooltip", "Security Level : Standard"),
+ summary: getString(
+ "standard_description",
+ "All Tor Browser and website features are enabled."
+ ),
+ },
+ safer: {
+ level: getString("safer_label", "Safer"),
+ tooltip: getString("safer_tooltip", "Security Level : Safer"),
+ summary: getString(
+ "safer_description",
+ "Disables website features that are often dangerous, causing some sites to lose functionality."
+ ),
+ description1: getString(
+ "js_on_https_sites_only",
+ "JavaScript is disabled on non-HTTPS sites."
+ ),
+ description2: getString(
+ "limit_typography",
+ "Some fonts and math symbols are disabled."
+ ),
+ description3: getString(
+ "click_to_play_media",
+ "Audio and video (HTML5 media), and WebGL are click-to-play."
+ ),
+ },
+ safest: {
+ level: getString("safest_label", "Safest"),
+ tooltip: getString("safest_tooltip", "Security Level : Safest"),
+ summary: getString(
+ "safest_description",
+ "Only allows website features required for static sites and basic services. These changes affect images, media, and scripts."
+ ),
+ description1: getString(
+ "js_disabled",
+ "JavaScript is disabled by default on all sites."
+ ),
+ description2: getString(
+ "limit_graphics_and_typography",
+ "Some fonts, icons, math symbols, and images are disabled."
+ ),
+ description3: getString(
+ "click_to_play_media",
+ "Audio and video (HTML5 media), and WebGL are click-to-play."
+ ),
+ },
+ custom: {
+ summary: getString(
+ "custom_summary",
+ "Your custom browser preferences have resulted in unusual security settings. For security and privacy reasons, we recommend you choose one of the default security levels."
+ ),
+ },
+ learnMore: getString("learn_more_label", "Learn more"),
+ learnMoreURL: `https://tb-manual.torproject.org/${getLocale()}/security-settings/`,
+ restoreDefaults: getString("restore_defaults", "Restore Defaults"),
+ advancedSecuritySettings: getString(
+ "advanced_security_settings",
+ "Advanced Security Settings\u2026"
+ ),
+ };
+ return retval;
+ })() /* Security Level Strings */,
+
+ /*
+ Tor about:preferences#tor Strings
+ */
+ settings: (function() {
+ let tsb = new TorStringBundle(
+ ["chrome://torlauncher/locale/network-settings.dtd"],
+ ""
+ );
+ let getString = function(key, fallback) {
+ return tsb.getString(key, fallback);
+ };
+
+ let retval = {
+ categoryTitle: getString("torPreferences.categoryTitle", "Tor"),
+ torPreferencesHeading: getString(
+ "torPreferences.torSettings",
+ "Tor Settings"
+ ),
+ torPreferencesDescription: getString(
+ "torPreferences.torSettingsDescription",
+ "Tor Browser routes your traffic over the Tor Network, run by thousands of volunteers around the world."
+ ),
+ learnMore: getString("torPreferences.learnMore", "Learn More"),
+ bridgesHeading: getString("torPreferences.bridges", "Bridges"),
+ bridgesDescription: getString(
+ "torPreferences.bridgesDescription",
+ "Bridges help you access the Tor Network in places where Tor is blocked. Depending on where you are, one bridge may work better than another."
+ ),
+ useBridge: getString("torPreferences.useBridge", "Use a bridge"),
+ selectBridge: getString(
+ "torsettings.useBridges.default",
+ "Select a bridge"
+ ),
+ requestBridgeFromTorProject: getString(
+ "torsettings.useBridges.bridgeDB",
+ "Request a bridge from torproject.org"
+ ),
+ requestNewBridge: getString(
+ "torPreferences.requestNewBridge",
+ "Request a New Bridge\u2026"
+ ),
+ provideBridge: getString(
+ "torPreferences.provideBridge",
+ "Provide a bridge"
+ ),
+ provideBridgeDirections: getString(
+ "torsettings.useBridges.label",
+ "Enter bridge information from a trusted source."
+ ),
+ provideBridgePlaceholder: getString(
+ "torsettings.useBridges.placeholder",
+ "type address:port (one per line)"
+ ),
+ advancedHeading: getString("torPreferences.advanced", "Advanced"),
+ advancedDescription: getString(
+ "torPreferences.advancedDescription",
+ "Configure how Tor Browser connects to the internet."
+ ),
+ useLocalProxy: getString("torPreferences.useProxy", "Use a local proxy"),
+ proxyType: getString("torsettings.useProxy.type", "Proxy Type"),
+ proxyTypeSOCKS4: getString("torsettings.useProxy.type.socks4", "SOCKS4"),
+ proxyTypeSOCKS5: getString("torsettings.useProxy.type.socks5", "SOCKS5"),
+ proxyTypeHTTP: getString("torsettings.useProxy.type.http", "HTTP/HTTPS"),
+ proxyAddress: getString("torsettings.useProxy.address", "Address"),
+ proxyAddressPlaceholder: getString(
+ "torsettings.useProxy.address.placeholder",
+ "IP address or hostname"
+ ),
+ proxyPort: getString("torsettings.useProxy.port", "Port"),
+ proxyUsername: getString("torsettings.useProxy.username", "Username"),
+ proxyPassword: getString("torsettings.useProxy.password", "Password"),
+ proxyUsernamePasswordPlaceholder: getString(
+ "torsettings.optional",
+ "Optional"
+ ),
+ useFirewall: getString(
+ "torsettings.firewall.checkbox",
+ "This computer goes through a firewall that only allows connections to certain ports"
+ ),
+ allowedPorts: getString(
+ "torsettings.firewall.allowedPorts",
+ "Allowed Ports"
+ ),
+ allowedPortsPlaceholder: getString(
+ "torPreferences.firewallPortsPlaceholder",
+ "Comma-seperated values"
+ ),
+ requestBridgeDialogTitle: getString(
+ "torPreferences.requestBridgeDialogTitle",
+ "Request Bridge"
+ ),
+ submitCaptcha: getString(
+ "torsettings.useBridges.captchaSubmit",
+ "Submit"
+ ),
+ contactingBridgeDB: getString(
+ "torPreferences.requestBridgeDialogWaitPrompt",
+ "Contacting BridgeDB. Please Wait."
+ ),
+ solveTheCaptcha: getString(
+ "torPreferences.requestBridgeDialogSolvePrompt",
+ "Solve the CAPTCHA to request a bridge."
+ ),
+ captchaTextboxPlaceholder: getString(
+ "torsettings.useBridges.captchaSolution.placeholder",
+ "Enter the characters from the image"
+ ),
+ incorrectCaptcha: getString(
+ "torPreferences.requestBridgeErrorBadSolution",
+ "The solution is not correct. Please try again."
+ ),
+ showTorDaemonLogs: getString(
+ "torPreferences.viewTorLogs",
+ "View the Tor logs."
+ ),
+ showLogs: getString("torPreferences.viewLogs", "View Logs\u2026"),
+ torLogDialogTitle: getString(
+ "torPreferences.torLogsDialogTitle",
+ "Tor Logs"
+ ),
+ copyLog: getString("torsettings.copyLog", "Copy Tor Log to Clipboard"),
+
+ learnMoreTorBrowserURL: `https://tb-manual.torproject.org/${getLocale()}/about/`,
+ learnMoreBridgesURL: `https://tb-manual.torproject.org/${getLocale()}/bridges/`,
+ learnMoreNetworkSettingsURL: `about:blank`,
+ };
+
+ return retval;
+ })() /* Tor Network Settings Strings */,
+
+ /*
+ Tor Deamon Configuration Key Strings
+ */
+
+ // TODO: proper camel case
+ configKeys: {
+ /* Bridge Conf Settings */
+ useBridges: "UseBridges",
+ bridgeList: "Bridge",
+ /* Proxy Conf Strings */
+ socks4Proxy: "Socks4Proxy",
+ socks5Proxy: "Socks5Proxy",
+ socks5ProxyUsername: "Socks5ProxyUsername",
+ socks5ProxyPassword: "Socks5ProxyPassword",
+ httpsProxy: "HTTPSProxy",
+ httpsProxyAuthenticator: "HTTPSProxyAuthenticator",
+ /* Firewall Conf Strings */
+ reachableAddresses: "ReachableAddresses",
+
+ /* BridgeDB Strings */
+ clientTransportPlugin: "ClientTransportPlugin",
+ },
+
+ /*
+ about:config preference keys
+ */
+
+ preferenceKeys: {
+ defaultBridgeType: "extensions.torlauncher.default_bridge_type",
+ recommendedBridgeType:
+ "extensions.torlauncher.default_bridge_recommended_type",
+ },
+
+ /*
+ about:config preference branches
+ */
+ preferenceBranches: {
+ defaultBridge: "extensions.torlauncher.default_bridge.",
+ bridgeDBBridges: "extensions.torlauncher.bridgedb_bridge.",
+ },
+};
diff --git a/browser/modules/moz.build b/browser/modules/moz.build
index 304bd34d2ff2..43f1524f4553 100644
--- a/browser/modules/moz.build
+++ b/browser/modules/moz.build
@@ -134,6 +134,7 @@ XPCSHELL_TESTS_MANIFESTS += ['test/unit/xpcshell.ini']
EXTRA_JS_MODULES += [
'AboutNewTab.jsm',
'AsyncTabSwitcher.jsm',
+ 'BridgeDB.jsm',
'BrowserUsageTelemetry.jsm',
'BrowserWindowTracker.jsm',
'ContentClick.jsm',
@@ -165,6 +166,8 @@ EXTRA_JS_MODULES += [
'TabsList.jsm',
'TabUnloader.jsm',
'ThemeVariableMap.jsm',
+ 'TorProtocolService.jsm',
+ 'TorStrings.jsm',
'TransientPrefs.jsm',
'webrtcUI.jsm',
'ZoomUI.jsm',
1
0
commit a1fe61ca5e14e166617c516f2af449b043a3ef1c
Author: Georg Koppen <gk(a)torproject.org>
Date: Sat Oct 12 12:09:12 2019 +0000
Translations update
---
chrome/locale/ar/browserOnboarding.properties | 2 +-
chrome/locale/bn-BD/browserOnboarding.properties | 2 +-
chrome/locale/ca/browserOnboarding.properties | 2 +-
chrome/locale/cs/browserOnboarding.properties | 2 +-
chrome/locale/da/browserOnboarding.properties | 2 +-
chrome/locale/de/browserOnboarding.properties | 2 +-
chrome/locale/el/browserOnboarding.properties | 2 +-
chrome/locale/es-AR/browserOnboarding.properties | 2 +-
chrome/locale/eu/browserOnboarding.properties | 2 +-
chrome/locale/fa/browserOnboarding.properties | 2 +-
chrome/locale/fr/browserOnboarding.properties | 8 ++++----
chrome/locale/ga-IE/browserOnboarding.properties | 2 +-
chrome/locale/he/browserOnboarding.properties | 12 ++++++------
chrome/locale/hu/browserOnboarding.properties | 2 +-
chrome/locale/id/browserOnboarding.properties | 2 +-
chrome/locale/is/browserOnboarding.properties | 2 +-
chrome/locale/it/browserOnboarding.properties | 2 +-
chrome/locale/ja/browserOnboarding.properties | 4 ++--
chrome/locale/ja/torbutton.properties | 6 +++---
chrome/locale/ka/browserOnboarding.properties | 2 +-
chrome/locale/ko/browserOnboarding.properties | 2 +-
chrome/locale/mk/browserOnboarding.properties | 12 ++++++------
chrome/locale/nb-NO/browserOnboarding.properties | 8 ++++----
chrome/locale/nl/browserOnboarding.properties | 12 ++++++------
chrome/locale/pl/browserOnboarding.properties | 2 +-
chrome/locale/pt-BR/browserOnboarding.properties | 12 ++++++------
chrome/locale/ro/browserOnboarding.properties | 2 +-
chrome/locale/ru/browserOnboarding.properties | 2 +-
chrome/locale/sv-SE/browserOnboarding.properties | 2 +-
chrome/locale/tr/browserOnboarding.properties | 12 ++++++------
chrome/locale/tr/torbutton.properties | 2 +-
chrome/locale/vi/browserOnboarding.properties | 2 +-
chrome/locale/zh-CN/browserOnboarding.properties | 12 ++++++------
chrome/locale/zh-TW/browserOnboarding.properties | 2 +-
34 files changed, 73 insertions(+), 73 deletions(-)
diff --git a/chrome/locale/ar/browserOnboarding.properties b/chrome/locale/ar/browserOnboarding.properties
index 33aaf5d2..4366f4d4 100644
--- a/chrome/locale/ar/browserOnboarding.properties
+++ b/chrome/locale/ar/browserOnboarding.properties
@@ -51,7 +51,7 @@ onboarding.tour-tor-update.prefix-updated=تحديث
onboarding.tour-tor-toolbar=شريط الأدوات
onboarding.tour-tor-toolbar-update-9.0.title=Goodbye Onion Button.
onboarding.tour-tor-toolbar-update-9.0.description=We want your experience using Tor to be fully integrated within Tor Browser.
-onboarding.tour-tor-toolbar-update-9.0.description-para2=That's why now, rather than using the onion button, you can see your Tor Circuit via the [i] in the URL bar and request a New Identity using the toolbar button or the [=] menu.
+onboarding.tour-tor-toolbar-update-9.0.description-para2=That's why now, rather than using the onion button, you can see your Tor Circuit via the [i] in the URL bar and request a New Identity using the toolbar button or the [≡] menu.
onboarding.tour-tor-toolbar-update-9.0.button=How to Request a New Identity
onboarding.tour-tor-toolbar-update-9.0.next-button=اذهب الى شبكة تور
diff --git a/chrome/locale/bn-BD/browserOnboarding.properties b/chrome/locale/bn-BD/browserOnboarding.properties
index 1b6aa316..9513be00 100644
--- a/chrome/locale/bn-BD/browserOnboarding.properties
+++ b/chrome/locale/bn-BD/browserOnboarding.properties
@@ -51,7 +51,7 @@ onboarding.tour-tor-update.prefix-updated=Updated
onboarding.tour-tor-toolbar=Toolbar
onboarding.tour-tor-toolbar-update-9.0.title=Goodbye Onion Button.
onboarding.tour-tor-toolbar-update-9.0.description=We want your experience using Tor to be fully integrated within Tor Browser.
-onboarding.tour-tor-toolbar-update-9.0.description-para2=That's why now, rather than using the onion button, you can see your Tor Circuit via the [i] in the URL bar and request a New Identity using the toolbar button or the [=] menu.
+onboarding.tour-tor-toolbar-update-9.0.description-para2=That's why now, rather than using the onion button, you can see your Tor Circuit via the [i] in the URL bar and request a New Identity using the toolbar button or the [≡] menu.
onboarding.tour-tor-toolbar-update-9.0.button=How to Request a New Identity
onboarding.tour-tor-toolbar-update-9.0.next-button=টর নেটওয়ার্কে যান
diff --git a/chrome/locale/ca/browserOnboarding.properties b/chrome/locale/ca/browserOnboarding.properties
index 247260b3..b3125ed0 100644
--- a/chrome/locale/ca/browserOnboarding.properties
+++ b/chrome/locale/ca/browserOnboarding.properties
@@ -51,7 +51,7 @@ onboarding.tour-tor-update.prefix-updated=Actualitzat
onboarding.tour-tor-toolbar=Barra d'eines
onboarding.tour-tor-toolbar-update-9.0.title=Goodbye Onion Button.
onboarding.tour-tor-toolbar-update-9.0.description=We want your experience using Tor to be fully integrated within Tor Browser.
-onboarding.tour-tor-toolbar-update-9.0.description-para2=That's why now, rather than using the onion button, you can see your Tor Circuit via the [i] in the URL bar and request a New Identity using the toolbar button or the [=] menu.
+onboarding.tour-tor-toolbar-update-9.0.description-para2=That's why now, rather than using the onion button, you can see your Tor Circuit via the [i] in the URL bar and request a New Identity using the toolbar button or the [≡] menu.
onboarding.tour-tor-toolbar-update-9.0.button=How to Request a New Identity
onboarding.tour-tor-toolbar-update-9.0.next-button=Aneu a la Xarxa Tor
diff --git a/chrome/locale/cs/browserOnboarding.properties b/chrome/locale/cs/browserOnboarding.properties
index 8f6d6e86..de61ab4e 100644
--- a/chrome/locale/cs/browserOnboarding.properties
+++ b/chrome/locale/cs/browserOnboarding.properties
@@ -51,7 +51,7 @@ onboarding.tour-tor-update.prefix-updated=Aktualizováno
onboarding.tour-tor-toolbar=Panel nástrojů
onboarding.tour-tor-toolbar-update-9.0.title=Goodbye Onion Button.
onboarding.tour-tor-toolbar-update-9.0.description=We want your experience using Tor to be fully integrated within Tor Browser.
-onboarding.tour-tor-toolbar-update-9.0.description-para2=That's why now, rather than using the onion button, you can see your Tor Circuit via the [i] in the URL bar and request a New Identity using the toolbar button or the [=] menu.
+onboarding.tour-tor-toolbar-update-9.0.description-para2=That's why now, rather than using the onion button, you can see your Tor Circuit via the [i] in the URL bar and request a New Identity using the toolbar button or the [≡] menu.
onboarding.tour-tor-toolbar-update-9.0.button=How to Request a New Identity
onboarding.tour-tor-toolbar-update-9.0.next-button=Přejít na síť Tor
diff --git a/chrome/locale/da/browserOnboarding.properties b/chrome/locale/da/browserOnboarding.properties
index 3993caf5..0b6f4ddc 100644
--- a/chrome/locale/da/browserOnboarding.properties
+++ b/chrome/locale/da/browserOnboarding.properties
@@ -51,7 +51,7 @@ onboarding.tour-tor-update.prefix-updated=Opdateret
onboarding.tour-tor-toolbar=Værktøjslinje
onboarding.tour-tor-toolbar-update-9.0.title=Farvel Onion-knap.
onboarding.tour-tor-toolbar-update-9.0.description=We want your experience using Tor to be fully integrated within Tor Browser.
-onboarding.tour-tor-toolbar-update-9.0.description-para2=That's why now, rather than using the onion button, you can see your Tor Circuit via the [i] in the URL bar and request a New Identity using the toolbar button or the [=] menu.
+onboarding.tour-tor-toolbar-update-9.0.description-para2=That's why now, rather than using the onion button, you can see your Tor Circuit via the [i] in the URL bar and request a New Identity using the toolbar button or the [≡] menu.
onboarding.tour-tor-toolbar-update-9.0.button=Forespørg en ny identitet
onboarding.tour-tor-toolbar-update-9.0.next-button=Gå til Tor-netværk
diff --git a/chrome/locale/de/browserOnboarding.properties b/chrome/locale/de/browserOnboarding.properties
index b6750198..9eea6582 100644
--- a/chrome/locale/de/browserOnboarding.properties
+++ b/chrome/locale/de/browserOnboarding.properties
@@ -51,7 +51,7 @@ onboarding.tour-tor-update.prefix-updated=Aktualisiert
onboarding.tour-tor-toolbar=Symbolleiste
onboarding.tour-tor-toolbar-update-9.0.title=Goodbye Onion Button.
onboarding.tour-tor-toolbar-update-9.0.description=We want your experience using Tor to be fully integrated within Tor Browser.
-onboarding.tour-tor-toolbar-update-9.0.description-para2=That's why now, rather than using the onion button, you can see your Tor Circuit via the [i] in the URL bar and request a New Identity using the toolbar button or the [=] menu.
+onboarding.tour-tor-toolbar-update-9.0.description-para2=That's why now, rather than using the onion button, you can see your Tor Circuit via the [i] in the URL bar and request a New Identity using the toolbar button or the [≡] menu.
onboarding.tour-tor-toolbar-update-9.0.button=How to Request a New Identity
onboarding.tour-tor-toolbar-update-9.0.next-button=Öffne Tor-Netzwerk
diff --git a/chrome/locale/el/browserOnboarding.properties b/chrome/locale/el/browserOnboarding.properties
index 1f061edc..d76aebc3 100644
--- a/chrome/locale/el/browserOnboarding.properties
+++ b/chrome/locale/el/browserOnboarding.properties
@@ -51,7 +51,7 @@ onboarding.tour-tor-update.prefix-updated=Αναβαθμίστηκε
onboarding.tour-tor-toolbar=Γραμμή εργαλείων
onboarding.tour-tor-toolbar-update-9.0.title=Goodbye Onion Button.
onboarding.tour-tor-toolbar-update-9.0.description=We want your experience using Tor to be fully integrated within Tor Browser.
-onboarding.tour-tor-toolbar-update-9.0.description-para2=That's why now, rather than using the onion button, you can see your Tor Circuit via the [i] in the URL bar and request a New Identity using the toolbar button or the [=] menu.
+onboarding.tour-tor-toolbar-update-9.0.description-para2=That's why now, rather than using the onion button, you can see your Tor Circuit via the [i] in the URL bar and request a New Identity using the toolbar button or the [≡] menu.
onboarding.tour-tor-toolbar-update-9.0.button=How to Request a New Identity
onboarding.tour-tor-toolbar-update-9.0.next-button=Πηγαίντε στο Δίκτυο Tor
diff --git a/chrome/locale/es-AR/browserOnboarding.properties b/chrome/locale/es-AR/browserOnboarding.properties
index cc8931f8..b3d531b7 100644
--- a/chrome/locale/es-AR/browserOnboarding.properties
+++ b/chrome/locale/es-AR/browserOnboarding.properties
@@ -51,7 +51,7 @@ onboarding.tour-tor-update.prefix-updated=Actualizado
onboarding.tour-tor-toolbar=Barra de herramientas
onboarding.tour-tor-toolbar-update-9.0.title=Goodbye Onion Button.
onboarding.tour-tor-toolbar-update-9.0.description=We want your experience using Tor to be fully integrated within Tor Browser.
-onboarding.tour-tor-toolbar-update-9.0.description-para2=That's why now, rather than using the onion button, you can see your Tor Circuit via the [i] in the URL bar and request a New Identity using the toolbar button or the [=] menu.
+onboarding.tour-tor-toolbar-update-9.0.description-para2=That's why now, rather than using the onion button, you can see your Tor Circuit via the [i] in the URL bar and request a New Identity using the toolbar button or the [≡] menu.
onboarding.tour-tor-toolbar-update-9.0.button=How to Request a New Identity
onboarding.tour-tor-toolbar-update-9.0.next-button=Ir a la red Tor
diff --git a/chrome/locale/eu/browserOnboarding.properties b/chrome/locale/eu/browserOnboarding.properties
index 35289c49..e9103eaf 100644
--- a/chrome/locale/eu/browserOnboarding.properties
+++ b/chrome/locale/eu/browserOnboarding.properties
@@ -51,7 +51,7 @@ onboarding.tour-tor-update.prefix-updated=Eguneratua
onboarding.tour-tor-toolbar=Tresna-barra
onboarding.tour-tor-toolbar-update-9.0.title=Goodbye Onion Button.
onboarding.tour-tor-toolbar-update-9.0.description=We want your experience using Tor to be fully integrated within Tor Browser.
-onboarding.tour-tor-toolbar-update-9.0.description-para2=That's why now, rather than using the onion button, you can see your Tor Circuit via the [i] in the URL bar and request a New Identity using the toolbar button or the [=] menu.
+onboarding.tour-tor-toolbar-update-9.0.description-para2=That's why now, rather than using the onion button, you can see your Tor Circuit via the [i] in the URL bar and request a New Identity using the toolbar button or the [≡] menu.
onboarding.tour-tor-toolbar-update-9.0.button=How to Request a New Identity
onboarding.tour-tor-toolbar-update-9.0.next-button=Joan Tor sarera
diff --git a/chrome/locale/fa/browserOnboarding.properties b/chrome/locale/fa/browserOnboarding.properties
index 8926015e..4d25d226 100644
--- a/chrome/locale/fa/browserOnboarding.properties
+++ b/chrome/locale/fa/browserOnboarding.properties
@@ -51,7 +51,7 @@ onboarding.tour-tor-update.prefix-updated=بهروزرسانی شد
onboarding.tour-tor-toolbar=نوار ابزار
onboarding.tour-tor-toolbar-update-9.0.title=Goodbye Onion Button.
onboarding.tour-tor-toolbar-update-9.0.description=We want your experience using Tor to be fully integrated within Tor Browser.
-onboarding.tour-tor-toolbar-update-9.0.description-para2=That's why now, rather than using the onion button, you can see your Tor Circuit via the [i] in the URL bar and request a New Identity using the toolbar button or the [=] menu.
+onboarding.tour-tor-toolbar-update-9.0.description-para2=That's why now, rather than using the onion button, you can see your Tor Circuit via the [i] in the URL bar and request a New Identity using the toolbar button or the [≡] menu.
onboarding.tour-tor-toolbar-update-9.0.button=How to Request a New Identity
onboarding.tour-tor-toolbar-update-9.0.next-button=برو به شبکه تور
diff --git a/chrome/locale/fr/browserOnboarding.properties b/chrome/locale/fr/browserOnboarding.properties
index 01065625..8e1019c3 100644
--- a/chrome/locale/fr/browserOnboarding.properties
+++ b/chrome/locale/fr/browserOnboarding.properties
@@ -15,7 +15,7 @@ onboarding.tour-tor-privacy.button=Poursuivre vers Réseau Tor
onboarding.tour-tor-network=Réseau Tor
onboarding.tour-tor-network.title=Naviguez sur un réseau décentralisé.
onboarding.tour-tor-network.description=Le Navigateur Tor vous connecte au réseau Tor exploité par des milliers de bénévoles dans le monde entier. Contrairement à un RPV, il n’y a pas de point de défaillance unique ou d’entité centralisée auxquels vous devez faire confiance pour profiter d’Internet en toute confidentialité.
-onboarding.tour-tor-network.description-para2=NOUVEAU : paramètres du réseau Tor, dont la possibilité de demander des ponts où Tor est bloqué, se trouvent maintenant dans Préférences.
+onboarding.tour-tor-network.description-para2=NOUVEAU : Paramètres du réseau Tor, dont la possibilité de demander des ponts où Tor est bloqué, se trouvent maintenant dans Préférences.
onboarding.tour-tor-network.action-button=Réglez vos paramètres du réseau Tor
onboarding.tour-tor-network.button=Poursuivre vers Affichage des circuits
@@ -49,10 +49,10 @@ onboarding.tour-tor-update.prefix-new=Nouveau
onboarding.tour-tor-update.prefix-updated=Mis à jour
onboarding.tour-tor-toolbar=Barre d’outils
-onboarding.tour-tor-toolbar-update-9.0.title=Au revoir le bouton oignon.
+onboarding.tour-tor-toolbar-update-9.0.title=Adieu au bouton oignon.
onboarding.tour-tor-toolbar-update-9.0.description=Nous voulons que votre expérience d’utilisation de Tor soit entièrement intégrée au Navigateur Tor.
-onboarding.tour-tor-toolbar-update-9.0.description-para2=That's why now, rather than using the onion button, you can see your Tor Circuit via the [i] in the URL bar and request a New Identity using the toolbar button or the [=] menu.
-onboarding.tour-tor-toolbar-update-9.0.button=How to Request a New Identity
+onboarding.tour-tor-toolbar-update-9.0.description-para2=C’est pourquoi désormais, au lieu d’utiliser le bouton oignon, vous pouvez voir votre circuit Tor par le [i] de la barre d’URL et demander une nouvelle identité en utilisant le bouton de la barre d’outils ou le menu [≡] .
+onboarding.tour-tor-toolbar-update-9.0.button=Comment demander une nouvelle identité
onboarding.tour-tor-toolbar-update-9.0.next-button=Poursuivre vers Réseau Tor
# Circuit Display onboarding.
diff --git a/chrome/locale/ga-IE/browserOnboarding.properties b/chrome/locale/ga-IE/browserOnboarding.properties
index 6ec36431..754e6467 100644
--- a/chrome/locale/ga-IE/browserOnboarding.properties
+++ b/chrome/locale/ga-IE/browserOnboarding.properties
@@ -51,7 +51,7 @@ onboarding.tour-tor-update.prefix-updated=Nuashonraithe
onboarding.tour-tor-toolbar=Barra Uirlisí
onboarding.tour-tor-toolbar-update-9.0.title=Goodbye Onion Button.
onboarding.tour-tor-toolbar-update-9.0.description=We want your experience using Tor to be fully integrated within Tor Browser.
-onboarding.tour-tor-toolbar-update-9.0.description-para2=That's why now, rather than using the onion button, you can see your Tor Circuit via the [i] in the URL bar and request a New Identity using the toolbar button or the [=] menu.
+onboarding.tour-tor-toolbar-update-9.0.description-para2=That's why now, rather than using the onion button, you can see your Tor Circuit via the [i] in the URL bar and request a New Identity using the toolbar button or the [≡] menu.
onboarding.tour-tor-toolbar-update-9.0.button=How to Request a New Identity
onboarding.tour-tor-toolbar-update-9.0.next-button=Téigh go Líonra Tor
diff --git a/chrome/locale/he/browserOnboarding.properties b/chrome/locale/he/browserOnboarding.properties
index 3da89d1a..d9a89e69 100644
--- a/chrome/locale/he/browserOnboarding.properties
+++ b/chrome/locale/he/browserOnboarding.properties
@@ -15,8 +15,8 @@ onboarding.tour-tor-privacy.button=לך אל רשת Tor
onboarding.tour-tor-network=רשת Tor
onboarding.tour-tor-network.title=טייל ברשת מבוזרת.
onboarding.tour-tor-network.description=דפדפן Tor מחבר אותך אל רשת Tor המופעלת ע"י אלפי מתנדבים ברחבי העולם. בשונה מאשר VPN, אין נקודת כשל בודדת או כניסה ממורכזת שאתה צריך לסמוך עליה על מנת ליהנות מהאינטרנט באופן פרטי.
-onboarding.tour-tor-network.description-para2=NEW: Tor Network Settings, including the ability to request bridges where Tor is blocked, can now be found in Preferences.
-onboarding.tour-tor-network.action-button=Adjust Your Tor Network Settings
+onboarding.tour-tor-network.description-para2=חדש: הגדרות רשת Tor, כולל היכולת לבקש גשרים במקום שבו Tor חסום, יכולות להימצא בהעדפות.
+onboarding.tour-tor-network.action-button=התאם את הגדרות רשת Tor שלך
onboarding.tour-tor-network.button=לך אל תצוגת מעגל
onboarding.tour-tor-circuit-display=תצוגת מעגל
@@ -49,10 +49,10 @@ onboarding.tour-tor-update.prefix-new=חדש
onboarding.tour-tor-update.prefix-updated=מעודכן
onboarding.tour-tor-toolbar=סרגל כלים
-onboarding.tour-tor-toolbar-update-9.0.title=Goodbye Onion Button.
-onboarding.tour-tor-toolbar-update-9.0.description=We want your experience using Tor to be fully integrated within Tor Browser.
-onboarding.tour-tor-toolbar-update-9.0.description-para2=That's why now, rather than using the onion button, you can see your Tor Circuit via the [i] in the URL bar and request a New Identity using the toolbar button or the [=] menu.
-onboarding.tour-tor-toolbar-update-9.0.button=How to Request a New Identity
+onboarding.tour-tor-toolbar-update-9.0.title=להתראות כפתור בצל.
+onboarding.tour-tor-toolbar-update-9.0.description=אנחנו רוצים את החוויה של שימוש ב־Tor שלך שתהיה משולבת במלואה בתוך דפדפן Tor.
+onboarding.tour-tor-toolbar-update-9.0.description-para2=זאת הסיבה מדוע כעת, ללא שימוש בכפתור הבצל, אתה יכול לראות את מעגל Tor שלך דרך [i] בשורת הכתובת ולבקש זהות חדשה ע"י שימוש בכפתור סרגל הכלים או בתפריט [≡].
+onboarding.tour-tor-toolbar-update-9.0.button=איך לבקש זהות חדשה
onboarding.tour-tor-toolbar-update-9.0.next-button=לך אל רשת Tor
# Circuit Display onboarding.
diff --git a/chrome/locale/hu/browserOnboarding.properties b/chrome/locale/hu/browserOnboarding.properties
index 3eafe389..cbb31d72 100644
--- a/chrome/locale/hu/browserOnboarding.properties
+++ b/chrome/locale/hu/browserOnboarding.properties
@@ -51,7 +51,7 @@ onboarding.tour-tor-update.prefix-updated=Frissített
onboarding.tour-tor-toolbar=Toolbar
onboarding.tour-tor-toolbar-update-9.0.title=Goodbye Onion Button.
onboarding.tour-tor-toolbar-update-9.0.description=We want your experience using Tor to be fully integrated within Tor Browser.
-onboarding.tour-tor-toolbar-update-9.0.description-para2=That's why now, rather than using the onion button, you can see your Tor Circuit via the [i] in the URL bar and request a New Identity using the toolbar button or the [=] menu.
+onboarding.tour-tor-toolbar-update-9.0.description-para2=That's why now, rather than using the onion button, you can see your Tor Circuit via the [i] in the URL bar and request a New Identity using the toolbar button or the [≡] menu.
onboarding.tour-tor-toolbar-update-9.0.button=How to Request a New Identity
onboarding.tour-tor-toolbar-update-9.0.next-button=Irány a Tor Hálózat
diff --git a/chrome/locale/id/browserOnboarding.properties b/chrome/locale/id/browserOnboarding.properties
index 217ad01c..958fba00 100644
--- a/chrome/locale/id/browserOnboarding.properties
+++ b/chrome/locale/id/browserOnboarding.properties
@@ -51,7 +51,7 @@ onboarding.tour-tor-update.prefix-updated=Telah terupdate
onboarding.tour-tor-toolbar=Toolbar
onboarding.tour-tor-toolbar-update-9.0.title=Goodbye Onion Button.
onboarding.tour-tor-toolbar-update-9.0.description=We want your experience using Tor to be fully integrated within Tor Browser.
-onboarding.tour-tor-toolbar-update-9.0.description-para2=That's why now, rather than using the onion button, you can see your Tor Circuit via the [i] in the URL bar and request a New Identity using the toolbar button or the [=] menu.
+onboarding.tour-tor-toolbar-update-9.0.description-para2=That's why now, rather than using the onion button, you can see your Tor Circuit via the [i] in the URL bar and request a New Identity using the toolbar button or the [≡] menu.
onboarding.tour-tor-toolbar-update-9.0.button=How to Request a New Identity
onboarding.tour-tor-toolbar-update-9.0.next-button=Pergi ke Jaringan Tor
diff --git a/chrome/locale/is/browserOnboarding.properties b/chrome/locale/is/browserOnboarding.properties
index 81980cb1..656b8ae5 100644
--- a/chrome/locale/is/browserOnboarding.properties
+++ b/chrome/locale/is/browserOnboarding.properties
@@ -51,7 +51,7 @@ onboarding.tour-tor-update.prefix-updated=Uppfært
onboarding.tour-tor-toolbar=Verkfærastika
onboarding.tour-tor-toolbar-update-9.0.title=Goodbye Onion Button.
onboarding.tour-tor-toolbar-update-9.0.description=We want your experience using Tor to be fully integrated within Tor Browser.
-onboarding.tour-tor-toolbar-update-9.0.description-para2=That's why now, rather than using the onion button, you can see your Tor Circuit via the [i] in the URL bar and request a New Identity using the toolbar button or the [=] menu.
+onboarding.tour-tor-toolbar-update-9.0.description-para2=That's why now, rather than using the onion button, you can see your Tor Circuit via the [i] in the URL bar and request a New Identity using the toolbar button or the [≡] menu.
onboarding.tour-tor-toolbar-update-9.0.button=How to Request a New Identity
onboarding.tour-tor-toolbar-update-9.0.next-button=Fara á Tor-netið
diff --git a/chrome/locale/it/browserOnboarding.properties b/chrome/locale/it/browserOnboarding.properties
index b24127ce..95633f21 100644
--- a/chrome/locale/it/browserOnboarding.properties
+++ b/chrome/locale/it/browserOnboarding.properties
@@ -51,7 +51,7 @@ onboarding.tour-tor-update.prefix-updated=Aggiornato
onboarding.tour-tor-toolbar=Barra degli strumenti
onboarding.tour-tor-toolbar-update-9.0.title=Goodbye Onion Button.
onboarding.tour-tor-toolbar-update-9.0.description=We want your experience using Tor to be fully integrated within Tor Browser.
-onboarding.tour-tor-toolbar-update-9.0.description-para2=That's why now, rather than using the onion button, you can see your Tor Circuit via the [i] in the URL bar and request a New Identity using the toolbar button or the [=] menu.
+onboarding.tour-tor-toolbar-update-9.0.description-para2=That's why now, rather than using the onion button, you can see your Tor Circuit via the [i] in the URL bar and request a New Identity using the toolbar button or the [≡] menu.
onboarding.tour-tor-toolbar-update-9.0.button=How to Request a New Identity
onboarding.tour-tor-toolbar-update-9.0.next-button=Vai alla rete Tor
diff --git a/chrome/locale/ja/browserOnboarding.properties b/chrome/locale/ja/browserOnboarding.properties
index 64f1baea..e1241ee5 100644
--- a/chrome/locale/ja/browserOnboarding.properties
+++ b/chrome/locale/ja/browserOnboarding.properties
@@ -44,14 +44,14 @@ onboarding.tour-tor-onion-services.description=Onion サービスは、検閲に
onboarding.tour-tor-onion-services.button=Onion サイトを訪問
onboarding.tour-tor-onion-services.next-button=完了
-onboarding.overlay-icon-tooltip-updated2=最新情報\n%S に
+onboarding.overlay-icon-tooltip-updated2=%S の\n変更点をご紹介します
onboarding.tour-tor-update.prefix-new=新機能
onboarding.tour-tor-update.prefix-updated=更新
onboarding.tour-tor-toolbar=ツールバー
onboarding.tour-tor-toolbar-update-9.0.title=Goodbye Onion Button.
onboarding.tour-tor-toolbar-update-9.0.description=We want your experience using Tor to be fully integrated within Tor Browser.
-onboarding.tour-tor-toolbar-update-9.0.description-para2=That's why now, rather than using the onion button, you can see your Tor Circuit via the [i] in the URL bar and request a New Identity using the toolbar button or the [=] menu.
+onboarding.tour-tor-toolbar-update-9.0.description-para2=That's why now, rather than using the onion button, you can see your Tor Circuit via the [i] in the URL bar and request a New Identity using the toolbar button or the [≡] menu.
onboarding.tour-tor-toolbar-update-9.0.button=How to Request a New Identity
onboarding.tour-tor-toolbar-update-9.0.next-button=Tor ネットワークへ
diff --git a/chrome/locale/ja/torbutton.properties b/chrome/locale/ja/torbutton.properties
index b30ecc3c..a03e2d7b 100644
--- a/chrome/locale/ja/torbutton.properties
+++ b/chrome/locale/ja/torbutton.properties
@@ -7,7 +7,7 @@ torbutton.circuit_display.tor_bridge = ブリッジ
torbutton.circuit_display.unknown_country = 不明な国
torbutton.circuit_display.guard = ガード
torbutton.circuit_display.guard_note = [ガード] ノードは変更されない場合があります。
-torbutton.circuit_display.learn_more = さらに知る
+torbutton.circuit_display.learn_more = 詳細情報
torbutton.content_sizer.margin_tooltip = Tor Browser はウィンドウのサイズを平凡にするためにこのマージンを追加します。これにより、あなたのことをオンラインで追跡しにくくします。
torbutton.panel.tooltip.disabled = クリックしてTorを有効にする
torbutton.panel.tooltip.enabled = クリックしてTorを無効にする
@@ -56,5 +56,5 @@ profileMigrationFailed=存在しているプロファイル %S へのマイグ
updateDownloadingPanelUILabel=%S 更新をダウンロードしています
# .Onion Page Info prompt. Strings are kept here for ease of translation.
-pageInfo_OnionEncryptionWithBitsAndProtocol=接続が暗号化されています (Onionサービス、%1$S、鍵長 %2$S bit、%3$S)
-pageInfo_OnionEncryption=接続が暗号化されています (Onionサービス)
+pageInfo_OnionEncryptionWithBitsAndProtocol=接続が暗号化されています (Onion サービス、%1$S、鍵長 %2$S bit、%3$S)
+pageInfo_OnionEncryption=接続が暗号化されています (Onion サービス)
diff --git a/chrome/locale/ka/browserOnboarding.properties b/chrome/locale/ka/browserOnboarding.properties
index 11c88645..11832796 100644
--- a/chrome/locale/ka/browserOnboarding.properties
+++ b/chrome/locale/ka/browserOnboarding.properties
@@ -51,7 +51,7 @@ onboarding.tour-tor-update.prefix-updated=განახლებული
onboarding.tour-tor-toolbar=ხელსაწყოთა ზოლი
onboarding.tour-tor-toolbar-update-9.0.title=Goodbye Onion Button.
onboarding.tour-tor-toolbar-update-9.0.description=We want your experience using Tor to be fully integrated within Tor Browser.
-onboarding.tour-tor-toolbar-update-9.0.description-para2=That's why now, rather than using the onion button, you can see your Tor Circuit via the [i] in the URL bar and request a New Identity using the toolbar button or the [=] menu.
+onboarding.tour-tor-toolbar-update-9.0.description-para2=That's why now, rather than using the onion button, you can see your Tor Circuit via the [i] in the URL bar and request a New Identity using the toolbar button or the [≡] menu.
onboarding.tour-tor-toolbar-update-9.0.button=How to Request a New Identity
onboarding.tour-tor-toolbar-update-9.0.next-button=იხილეთ Tor-ქსელი
diff --git a/chrome/locale/ko/browserOnboarding.properties b/chrome/locale/ko/browserOnboarding.properties
index 732ea8ab..ed818936 100644
--- a/chrome/locale/ko/browserOnboarding.properties
+++ b/chrome/locale/ko/browserOnboarding.properties
@@ -51,7 +51,7 @@ onboarding.tour-tor-update.prefix-updated=업데이트됨
onboarding.tour-tor-toolbar=툴바
onboarding.tour-tor-toolbar-update-9.0.title=Goodbye Onion Button.
onboarding.tour-tor-toolbar-update-9.0.description=We want your experience using Tor to be fully integrated within Tor Browser.
-onboarding.tour-tor-toolbar-update-9.0.description-para2=That's why now, rather than using the onion button, you can see your Tor Circuit via the [i] in the URL bar and request a New Identity using the toolbar button or the [=] menu.
+onboarding.tour-tor-toolbar-update-9.0.description-para2=That's why now, rather than using the onion button, you can see your Tor Circuit via the [i] in the URL bar and request a New Identity using the toolbar button or the [≡] menu.
onboarding.tour-tor-toolbar-update-9.0.button=How to Request a New Identity
onboarding.tour-tor-toolbar-update-9.0.next-button=Tor 네트워크 항목으로 가봅니다.
diff --git a/chrome/locale/mk/browserOnboarding.properties b/chrome/locale/mk/browserOnboarding.properties
index c0247407..08935029 100644
--- a/chrome/locale/mk/browserOnboarding.properties
+++ b/chrome/locale/mk/browserOnboarding.properties
@@ -15,8 +15,8 @@ onboarding.tour-tor-privacy.button=Оди на Tor Мрежа
onboarding.tour-tor-network=Tor Мрежа
onboarding.tour-tor-network.title=Патувајте низ децентрализираната мрежа.
onboarding.tour-tor-network.description=Tor Browser ве поврзува на Tor мрежата одржувана од илјадници волонтери низ целиот свет. За разлика од VPN, овде нема место за неуспех или централизиран ентитет на кого треба да му верувате со цел да уживате приватност на Интернет.
-onboarding.tour-tor-network.description-para2=NEW: Tor Network Settings, including the ability to request bridges where Tor is blocked, can now be found in Preferences.
-onboarding.tour-tor-network.action-button=Adjust Your Tor Network Settings
+onboarding.tour-tor-network.description-para2=НОВО: Tor Мрежните поставувања, вклучуваат можност да побараат мостови таму каде Tor е блокиран, сега можат да бидат пронајдени во Својства.
+onboarding.tour-tor-network.action-button=Прилагоди ги твоите Мрежни поставки
onboarding.tour-tor-network.button=Оди на Круг екранот
onboarding.tour-tor-circuit-display=Круг екран
@@ -49,10 +49,10 @@ onboarding.tour-tor-update.prefix-new=Ново
onboarding.tour-tor-update.prefix-updated=Ажурирано
onboarding.tour-tor-toolbar=Лента со алатки
-onboarding.tour-tor-toolbar-update-9.0.title=Goodbye Onion Button.
-onboarding.tour-tor-toolbar-update-9.0.description=We want your experience using Tor to be fully integrated within Tor Browser.
-onboarding.tour-tor-toolbar-update-9.0.description-para2=That's why now, rather than using the onion button, you can see your Tor Circuit via the [i] in the URL bar and request a New Identity using the toolbar button or the [=] menu.
-onboarding.tour-tor-toolbar-update-9.0.button=How to Request a New Identity
+onboarding.tour-tor-toolbar-update-9.0.title=Збогум Онион копче.
+onboarding.tour-tor-toolbar-update-9.0.description=Сакаме вашето искуство користејќи го Tor да биде целосно вградено во Tor Browser.
+onboarding.tour-tor-toolbar-update-9.0.description-para2=Затоа сега, наместо да го користите онион копчето, можете да го видите вашиот Tor Круг преку [i] во URL лентата и да побарате Нов Идентитет користејќи го копчето во алатникот или [≡] менито.
+onboarding.tour-tor-toolbar-update-9.0.button=Како да побарате Нов Идентитет
onboarding.tour-tor-toolbar-update-9.0.next-button=Оди на Tor Мрежа
# Circuit Display onboarding.
diff --git a/chrome/locale/nb-NO/browserOnboarding.properties b/chrome/locale/nb-NO/browserOnboarding.properties
index 89bfd8e9..a444b823 100644
--- a/chrome/locale/nb-NO/browserOnboarding.properties
+++ b/chrome/locale/nb-NO/browserOnboarding.properties
@@ -15,8 +15,8 @@ onboarding.tour-tor-privacy.button=Gå til Tor Nettverk
onboarding.tour-tor-network=Tor Nettverk
onboarding.tour-tor-network.title=Reis et decentralisert nettverk.
onboarding.tour-tor-network.description=Tor Nettleser forbinder deg med Tor-nettet som drives av tusenvis av frivillige rundt om i verden. I motsetning til en VPN er det ingen feilpunkt eller sentralisert enhet du må stole på for å kunne nyte Internettet privat.
-onboarding.tour-tor-network.description-para2=NEW: Tor Network Settings, including the ability to request bridges where Tor is blocked, can now be found in Preferences.
-onboarding.tour-tor-network.action-button=Adjust Your Tor Network Settings
+onboarding.tour-tor-network.description-para2=NYTT: Tor nettverksinnstillinger, inkluderer muligheten til å be om broer der Tor er blokkert, kan nå finnes i Innstillinger.
+onboarding.tour-tor-network.action-button=Juster din Tor-nettverksinnstillinger
onboarding.tour-tor-network.button=Gå til Kretsvisning
onboarding.tour-tor-circuit-display=Kretsvisning
@@ -51,8 +51,8 @@ onboarding.tour-tor-update.prefix-updated=Oppdatert
onboarding.tour-tor-toolbar=Verktøylinje
onboarding.tour-tor-toolbar-update-9.0.title=Goodbye Onion Button.
onboarding.tour-tor-toolbar-update-9.0.description=We want your experience using Tor to be fully integrated within Tor Browser.
-onboarding.tour-tor-toolbar-update-9.0.description-para2=That's why now, rather than using the onion button, you can see your Tor Circuit via the [i] in the URL bar and request a New Identity using the toolbar button or the [=] menu.
-onboarding.tour-tor-toolbar-update-9.0.button=How to Request a New Identity
+onboarding.tour-tor-toolbar-update-9.0.description-para2=That's why now, rather than using the onion button, you can see your Tor Circuit via the [i] in the URL bar and request a New Identity using the toolbar button or the [≡] menu.
+onboarding.tour-tor-toolbar-update-9.0.button=Hvordan be om en Ny identitet
onboarding.tour-tor-toolbar-update-9.0.next-button=Gå til Tor Nettverk
# Circuit Display onboarding.
diff --git a/chrome/locale/nl/browserOnboarding.properties b/chrome/locale/nl/browserOnboarding.properties
index 84ab0176..f109d951 100644
--- a/chrome/locale/nl/browserOnboarding.properties
+++ b/chrome/locale/nl/browserOnboarding.properties
@@ -15,8 +15,8 @@ onboarding.tour-tor-privacy.button=Naar Tor-netwerk
onboarding.tour-tor-network=Tor-netwerk
onboarding.tour-tor-network.title=Reis over een gedecentraliseerd netwerk.
onboarding.tour-tor-network.description=Tor Browser verbindt u met het Tor-netwerk, mogelijk gemaakt door duizenden vrijwilligers over de hele wereld. Anders dan bij een VPN is er geen sprake van één zwakke plek of centrale autoriteit die u moet vertrouwen om privé van het internet gebruik te maken.
-onboarding.tour-tor-network.description-para2=NEW: Tor Network Settings, including the ability to request bridges where Tor is blocked, can now be found in Preferences.
-onboarding.tour-tor-network.action-button=Adjust Your Tor Network Settings
+onboarding.tour-tor-network.description-para2=NIEUW: de Tor-netwerkinstellingen, waaronder de mogelijkheid om bridges aan te vragen waar Tor is geblokkeerd, zijn nu te vinden in Voorkeuren.
+onboarding.tour-tor-network.action-button=Uw Tor-netwerkinstellingen aanpassen
onboarding.tour-tor-network.button=Naar Circuit-venster
onboarding.tour-tor-circuit-display=Circuit-venster
@@ -49,10 +49,10 @@ onboarding.tour-tor-update.prefix-new=Nieuw
onboarding.tour-tor-update.prefix-updated=Bijgewerkt
onboarding.tour-tor-toolbar=Werkbalk
-onboarding.tour-tor-toolbar-update-9.0.title=Goodbye Onion Button.
-onboarding.tour-tor-toolbar-update-9.0.description=We want your experience using Tor to be fully integrated within Tor Browser.
-onboarding.tour-tor-toolbar-update-9.0.description-para2=That's why now, rather than using the onion button, you can see your Tor Circuit via the [i] in the URL bar and request a New Identity using the toolbar button or the [=] menu.
-onboarding.tour-tor-toolbar-update-9.0.button=How to Request a New Identity
+onboarding.tour-tor-toolbar-update-9.0.title=Vaarwel Onion-knop.
+onboarding.tour-tor-toolbar-update-9.0.description=We willen dat uw ervaring met Tor volledig is geïntegreerd binnen Tor Browser.
+onboarding.tour-tor-toolbar-update-9.0.description-para2=Dat is waarom u nu, in plaats van de onion-knop te gebruiken, uw Tor-circuit via de [i] in de URL-balk kunt zien en een nieuwe identiteit kunt aanvragen via de werkbalkknop of het menu [≡].
+onboarding.tour-tor-toolbar-update-9.0.button=Een nieuwe identiteit aanvragen
onboarding.tour-tor-toolbar-update-9.0.next-button=Naar Tor-netwerk
# Circuit Display onboarding.
diff --git a/chrome/locale/pl/browserOnboarding.properties b/chrome/locale/pl/browserOnboarding.properties
index e0591437..e9ae1d69 100644
--- a/chrome/locale/pl/browserOnboarding.properties
+++ b/chrome/locale/pl/browserOnboarding.properties
@@ -51,7 +51,7 @@ onboarding.tour-tor-update.prefix-updated=Zaktualizowano
onboarding.tour-tor-toolbar=Pasek narzędzi
onboarding.tour-tor-toolbar-update-9.0.title=Goodbye Onion Button.
onboarding.tour-tor-toolbar-update-9.0.description=We want your experience using Tor to be fully integrated within Tor Browser.
-onboarding.tour-tor-toolbar-update-9.0.description-para2=That's why now, rather than using the onion button, you can see your Tor Circuit via the [i] in the URL bar and request a New Identity using the toolbar button or the [=] menu.
+onboarding.tour-tor-toolbar-update-9.0.description-para2=That's why now, rather than using the onion button, you can see your Tor Circuit via the [i] in the URL bar and request a New Identity using the toolbar button or the [≡] menu.
onboarding.tour-tor-toolbar-update-9.0.button=How to Request a New Identity
onboarding.tour-tor-toolbar-update-9.0.next-button=Przejdź do Sieci Tor
diff --git a/chrome/locale/pt-BR/browserOnboarding.properties b/chrome/locale/pt-BR/browserOnboarding.properties
index 11f2240e..dfe66c08 100644
--- a/chrome/locale/pt-BR/browserOnboarding.properties
+++ b/chrome/locale/pt-BR/browserOnboarding.properties
@@ -15,8 +15,8 @@ onboarding.tour-tor-privacy.button=Vá para a Rede Tor.
onboarding.tour-tor-network=Rede Tor
onboarding.tour-tor-network.title=Viaje por uma rede descentralizada.
onboarding.tour-tor-network.description=O Tor Browser conecta você à rede Tor, composta por milhares de voluntários ao redor do mundo. Diferente de uma VPN, não há uma entidade ou ponto de falha central em que você precisa confiar para desfrutar da internet com privacidade.
-onboarding.tour-tor-network.description-para2=NEW: Tor Network Settings, including the ability to request bridges where Tor is blocked, can now be found in Preferences.
-onboarding.tour-tor-network.action-button=Adjust Your Tor Network Settings
+onboarding.tour-tor-network.description-para2=NOVO: As configurações de rede do Tor, incluindo a capacidade de solicitar pontes onde o Tor está bloqueado, agora podem ser encontradas em Preferências.
+onboarding.tour-tor-network.action-button=Ajuste suas configurações de rede do Tor
onboarding.tour-tor-network.button=Vá para a Exibição de Circuitos
onboarding.tour-tor-circuit-display=Exibição de Circuitos
@@ -49,10 +49,10 @@ onboarding.tour-tor-update.prefix-new=Novo
onboarding.tour-tor-update.prefix-updated=Atualizado
onboarding.tour-tor-toolbar=Barra de ferramentas
-onboarding.tour-tor-toolbar-update-9.0.title=Goodbye Onion Button.
-onboarding.tour-tor-toolbar-update-9.0.description=We want your experience using Tor to be fully integrated within Tor Browser.
-onboarding.tour-tor-toolbar-update-9.0.description-para2=That's why now, rather than using the onion button, you can see your Tor Circuit via the [i] in the URL bar and request a New Identity using the toolbar button or the [=] menu.
-onboarding.tour-tor-toolbar-update-9.0.button=How to Request a New Identity
+onboarding.tour-tor-toolbar-update-9.0.title=Adeus Onion Botão.
+onboarding.tour-tor-toolbar-update-9.0.description=Queremos que sua experiência com o Tor seja totalmente integrada ao Tor Browser.
+onboarding.tour-tor-toolbar-update-9.0.description-para2=É por isso que agora, em vez de usar o onion botão, você pode ver o seu Tor Circuit através do [i] na barra de URL e solicitar uma nova identidade usando o botão da barra de ferramentas ou o menu [≡].
+onboarding.tour-tor-toolbar-update-9.0.button=Como solicitar uma nova identidade
onboarding.tour-tor-toolbar-update-9.0.next-button=Vá para a Rede Tor.
# Circuit Display onboarding.
diff --git a/chrome/locale/ro/browserOnboarding.properties b/chrome/locale/ro/browserOnboarding.properties
index c76a29e0..27989597 100644
--- a/chrome/locale/ro/browserOnboarding.properties
+++ b/chrome/locale/ro/browserOnboarding.properties
@@ -51,7 +51,7 @@ onboarding.tour-tor-update.prefix-updated=Actualizat
onboarding.tour-tor-toolbar=Bara cu instrumente
onboarding.tour-tor-toolbar-update-9.0.title=Goodbye Onion Button.
onboarding.tour-tor-toolbar-update-9.0.description=We want your experience using Tor to be fully integrated within Tor Browser.
-onboarding.tour-tor-toolbar-update-9.0.description-para2=That's why now, rather than using the onion button, you can see your Tor Circuit via the [i] in the URL bar and request a New Identity using the toolbar button or the [=] menu.
+onboarding.tour-tor-toolbar-update-9.0.description-para2=That's why now, rather than using the onion button, you can see your Tor Circuit via the [i] in the URL bar and request a New Identity using the toolbar button or the [≡] menu.
onboarding.tour-tor-toolbar-update-9.0.button=How to Request a New Identity
onboarding.tour-tor-toolbar-update-9.0.next-button=Sari la Rețeaua Tor
diff --git a/chrome/locale/ru/browserOnboarding.properties b/chrome/locale/ru/browserOnboarding.properties
index 45cb0a8d..baba509f 100644
--- a/chrome/locale/ru/browserOnboarding.properties
+++ b/chrome/locale/ru/browserOnboarding.properties
@@ -51,7 +51,7 @@ onboarding.tour-tor-update.prefix-updated=Обновленный
onboarding.tour-tor-toolbar=Панель инструментов
onboarding.tour-tor-toolbar-update-9.0.title=Goodbye Onion Button.
onboarding.tour-tor-toolbar-update-9.0.description=We want your experience using Tor to be fully integrated within Tor Browser.
-onboarding.tour-tor-toolbar-update-9.0.description-para2=That's why now, rather than using the onion button, you can see your Tor Circuit via the [i] in the URL bar and request a New Identity using the toolbar button or the [=] menu.
+onboarding.tour-tor-toolbar-update-9.0.description-para2=That's why now, rather than using the onion button, you can see your Tor Circuit via the [i] in the URL bar and request a New Identity using the toolbar button or the [≡] menu.
onboarding.tour-tor-toolbar-update-9.0.button=How to Request a New Identity
onboarding.tour-tor-toolbar-update-9.0.next-button=Перейти в Сеть Tor
diff --git a/chrome/locale/sv-SE/browserOnboarding.properties b/chrome/locale/sv-SE/browserOnboarding.properties
index 06b41901..21001db9 100644
--- a/chrome/locale/sv-SE/browserOnboarding.properties
+++ b/chrome/locale/sv-SE/browserOnboarding.properties
@@ -51,7 +51,7 @@ onboarding.tour-tor-update.prefix-updated=Uppdaterad
onboarding.tour-tor-toolbar=Verktygsfält
onboarding.tour-tor-toolbar-update-9.0.title=Goodbye Onion Button.
onboarding.tour-tor-toolbar-update-9.0.description=We want your experience using Tor to be fully integrated within Tor Browser.
-onboarding.tour-tor-toolbar-update-9.0.description-para2=That's why now, rather than using the onion button, you can see your Tor Circuit via the [i] in the URL bar and request a New Identity using the toolbar button or the [=] menu.
+onboarding.tour-tor-toolbar-update-9.0.description-para2=That's why now, rather than using the onion button, you can see your Tor Circuit via the [i] in the URL bar and request a New Identity using the toolbar button or the [≡] menu.
onboarding.tour-tor-toolbar-update-9.0.button=How to Request a New Identity
onboarding.tour-tor-toolbar-update-9.0.next-button=Gå till Tor-nätverket
diff --git a/chrome/locale/tr/browserOnboarding.properties b/chrome/locale/tr/browserOnboarding.properties
index 0b50cf36..b5e9b49f 100644
--- a/chrome/locale/tr/browserOnboarding.properties
+++ b/chrome/locale/tr/browserOnboarding.properties
@@ -15,8 +15,8 @@ onboarding.tour-tor-privacy.button=Tor Ağına Geç
onboarding.tour-tor-network=Tor Ağı
onboarding.tour-tor-network.title=Tek merkezden yönetilmeyen bir ağda gezinin.
onboarding.tour-tor-network.description=Tor Browser sizi tüm dünyada binlerce gönüllü tarafından işletilen Tor Ağına bağlar. VPN bağlantısının aksine güvenlik açığı oluşturacak bir nokta ya da İnternet üzerinde kişisel gizliliğinizi koruyarak gezinmeniz için güvenmeniz gereken merkezi bir kuruluş yoktur.
-onboarding.tour-tor-network.description-para2=NEW: Tor Network Settings, including the ability to request bridges where Tor is blocked, can now be found in Preferences.
-onboarding.tour-tor-network.action-button=Adjust Your Tor Network Settings
+onboarding.tour-tor-network.description-para2=YENİ: Tor Ağı Ayarları, Tor ağına erişimin engellendiği yerlerde köprü isteğinde bulunma özelliği artı Ayarlar bölümü altında bulunabilir.
+onboarding.tour-tor-network.action-button=Tor Ağı Ayarlarınızı Yapın
onboarding.tour-tor-network.button=Devre Görünümüne Geç
onboarding.tour-tor-circuit-display=Devre Görünümü
@@ -49,10 +49,10 @@ onboarding.tour-tor-update.prefix-new=Yeni
onboarding.tour-tor-update.prefix-updated=Güncellendi
onboarding.tour-tor-toolbar=Araç Çubuğu
-onboarding.tour-tor-toolbar-update-9.0.title=Goodbye Onion Button.
-onboarding.tour-tor-toolbar-update-9.0.description=We want your experience using Tor to be fully integrated within Tor Browser.
-onboarding.tour-tor-toolbar-update-9.0.description-para2=That's why now, rather than using the onion button, you can see your Tor Circuit via the [i] in the URL bar and request a New Identity using the toolbar button or the [=] menu.
-onboarding.tour-tor-toolbar-update-9.0.button=How to Request a New Identity
+onboarding.tour-tor-toolbar-update-9.0.title=Soğan Düğmesine Veda Edin.
+onboarding.tour-tor-toolbar-update-9.0.description=Tor işlemlerini tamamen Tor Browser ile yapabilmenizi istiyoruz.
+onboarding.tour-tor-toolbar-update-9.0.description-para2=Bu nedenle, artık soğan düğmesini kullanmak yerine adres çubuğundaki [i] simgesine tıklayarak Tor Devresini görebilir, araç çubuğu düğmesini ya da [≡] menüsünü kullanarak Yeni Kimlik isteğinde bulunabilirsiniz.
+onboarding.tour-tor-toolbar-update-9.0.button=Nasıl Yeni Kimlik İsteğinde Bulunacaksınız
onboarding.tour-tor-toolbar-update-9.0.next-button=Tor Ağına Geç
# Circuit Display onboarding.
diff --git a/chrome/locale/tr/torbutton.properties b/chrome/locale/tr/torbutton.properties
index 6105c7b1..4523d729 100644
--- a/chrome/locale/tr/torbutton.properties
+++ b/chrome/locale/tr/torbutton.properties
@@ -1,6 +1,6 @@
torbutton.circuit_display.internet = İnternet
torbutton.circuit_display.ip_unknown = Bilinmeyen IP
-torbutton.circuit_display.onion_site = Soğan sitesi
+torbutton.circuit_display.onion_site = Onion sitesi
torbutton.circuit_display.this_browser = Bu tarayıcı
torbutton.circuit_display.relay = Aktarıcı
torbutton.circuit_display.tor_bridge = Köprü
diff --git a/chrome/locale/vi/browserOnboarding.properties b/chrome/locale/vi/browserOnboarding.properties
index e9508e20..0b14f935 100644
--- a/chrome/locale/vi/browserOnboarding.properties
+++ b/chrome/locale/vi/browserOnboarding.properties
@@ -51,7 +51,7 @@ onboarding.tour-tor-update.prefix-updated=Updated
onboarding.tour-tor-toolbar=Toolbar
onboarding.tour-tor-toolbar-update-9.0.title=Goodbye Onion Button.
onboarding.tour-tor-toolbar-update-9.0.description=We want your experience using Tor to be fully integrated within Tor Browser.
-onboarding.tour-tor-toolbar-update-9.0.description-para2=That's why now, rather than using the onion button, you can see your Tor Circuit via the [i] in the URL bar and request a New Identity using the toolbar button or the [=] menu.
+onboarding.tour-tor-toolbar-update-9.0.description-para2=That's why now, rather than using the onion button, you can see your Tor Circuit via the [i] in the URL bar and request a New Identity using the toolbar button or the [≡] menu.
onboarding.tour-tor-toolbar-update-9.0.button=How to Request a New Identity
onboarding.tour-tor-toolbar-update-9.0.next-button=Đi đến mạng Tor
diff --git a/chrome/locale/zh-CN/browserOnboarding.properties b/chrome/locale/zh-CN/browserOnboarding.properties
index 83aa1571..f188ac01 100644
--- a/chrome/locale/zh-CN/browserOnboarding.properties
+++ b/chrome/locale/zh-CN/browserOnboarding.properties
@@ -15,8 +15,8 @@ onboarding.tour-tor-privacy.button=前往“Tor 网络”
onboarding.tour-tor-network=Tor 网络
onboarding.tour-tor-network.title=通过非中心化的网络进行浏览。
onboarding.tour-tor-network.description=Tor 浏览器将你和世界数千名志愿者支持的 Tor 网络相连。和 VPN 不同的是,这里不会有单点故障,也不需要你为了私密浏览信任某一个中心化的实体。
-onboarding.tour-tor-network.description-para2=NEW: Tor Network Settings, including the ability to request bridges where Tor is blocked, can now be found in Preferences.
-onboarding.tour-tor-network.action-button=Adjust Your Tor Network Settings
+onboarding.tour-tor-network.description-para2=新内容:设置中的 Tor 网络设置,包括在 Tor 被屏蔽时获取网桥。
+onboarding.tour-tor-network.action-button=调整 Tor 网络设置
onboarding.tour-tor-network.button=前往 ’显示链路'
onboarding.tour-tor-circuit-display=显示链路
@@ -49,10 +49,10 @@ onboarding.tour-tor-update.prefix-new=新建
onboarding.tour-tor-update.prefix-updated=已更新
onboarding.tour-tor-toolbar=工具栏
-onboarding.tour-tor-toolbar-update-9.0.title=Goodbye Onion Button.
-onboarding.tour-tor-toolbar-update-9.0.description=We want your experience using Tor to be fully integrated within Tor Browser.
-onboarding.tour-tor-toolbar-update-9.0.description-para2=That's why now, rather than using the onion button, you can see your Tor Circuit via the [i] in the URL bar and request a New Identity using the toolbar button or the [=] menu.
-onboarding.tour-tor-toolbar-update-9.0.button=How to Request a New Identity
+onboarding.tour-tor-toolbar-update-9.0.title=拜拜,洋葱按钮。
+onboarding.tour-tor-toolbar-update-9.0.description=我们希望将你使用 Tor 全部操作搬到 Tor 浏览器内。
+onboarding.tour-tor-toolbar-update-9.0.description-para2=所以现在,你可以在地址栏中的[i]按钮中看到 Tor 链路,在工具栏按钮[≡]菜单中请求新的身份,而不是使用洋葱按钮。
+onboarding.tour-tor-toolbar-update-9.0.button=如何请求新身份
onboarding.tour-tor-toolbar-update-9.0.next-button=前往“Tor 网络”
# Circuit Display onboarding.
diff --git a/chrome/locale/zh-TW/browserOnboarding.properties b/chrome/locale/zh-TW/browserOnboarding.properties
index 5cd92164..0c96e284 100644
--- a/chrome/locale/zh-TW/browserOnboarding.properties
+++ b/chrome/locale/zh-TW/browserOnboarding.properties
@@ -51,7 +51,7 @@ onboarding.tour-tor-update.prefix-updated=已更新
onboarding.tour-tor-toolbar=工具列
onboarding.tour-tor-toolbar-update-9.0.title=Goodbye Onion Button.
onboarding.tour-tor-toolbar-update-9.0.description=We want your experience using Tor to be fully integrated within Tor Browser.
-onboarding.tour-tor-toolbar-update-9.0.description-para2=That's why now, rather than using the onion button, you can see your Tor Circuit via the [i] in the URL bar and request a New Identity using the toolbar button or the [=] menu.
+onboarding.tour-tor-toolbar-update-9.0.description-para2=That's why now, rather than using the onion button, you can see your Tor Circuit via the [i] in the URL bar and request a New Identity using the toolbar button or the [≡] menu.
onboarding.tour-tor-toolbar-update-9.0.button=How to Request a New Identity
onboarding.tour-tor-toolbar-update-9.0.next-button=前往 Tor 網路
1
0
commit 017ca3ee046af4b1afa641f772834d373ff750c7
Author: Georg Koppen <gk(a)torproject.org>
Date: Sat Oct 12 12:03:55 2019 +0000
Relese prep for 0.2.19.5
Version bump
---
src/install.rdf | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/src/install.rdf b/src/install.rdf
index 5676e6d..40d84da 100644
--- a/src/install.rdf
+++ b/src/install.rdf
@@ -7,7 +7,7 @@
<em:creator>The Tor Project, Inc.</em:creator>
<em:contributor>Pearl Crescent, LLC</em:contributor>
<em:id>tor-launcher(a)torproject.org</em:id>
- <em:version>0.2.19.4</em:version>
+ <em:version>0.2.19.5</em:version>
<em:multiprocessCompatible>true</em:multiprocessCompatible>
<em:homepageURL>https://www.torproject.org/projects/torbrowser.html</em:homepageURL>
<em:updateURL>data:text/plain,</em:updateURL>
1
0
commit 30726c5171ad3aa5e7c2e1e260f0dbb1b2f7b346
Author: Georg Koppen <gk(a)torproject.org>
Date: Sat Oct 12 12:02:42 2019 +0000
Translation updates
---
chrome.manifest | 8 ++++++
jar.mn | 16 ++++++++++++
src/chrome/locale/af/network-settings.dtd | 31 ++++++++++++++++++++++
src/chrome/locale/ar/network-settings.dtd | 31 ++++++++++++++++++++++
src/chrome/locale/az/network-settings.dtd | 31 ++++++++++++++++++++++
src/chrome/locale/be/network-settings.dtd | 31 ++++++++++++++++++++++
src/chrome/locale/bg/network-settings.dtd | 31 ++++++++++++++++++++++
src/chrome/locale/bn/network-settings.dtd | 31 ++++++++++++++++++++++
src/chrome/locale/br/network-settings.dtd | 31 ++++++++++++++++++++++
src/chrome/locale/bs/network-settings.dtd | 31 ++++++++++++++++++++++
src/chrome/locale/ca/network-settings.dtd | 31 ++++++++++++++++++++++
src/chrome/locale/cs/network-settings.dtd | 31 ++++++++++++++++++++++
src/chrome/locale/cy/network-settings.dtd | 31 ++++++++++++++++++++++
src/chrome/locale/da/network-settings.dtd | 31 ++++++++++++++++++++++
src/chrome/locale/de/network-settings.dtd | 31 ++++++++++++++++++++++
src/chrome/locale/el/network-settings.dtd | 31 ++++++++++++++++++++++
src/chrome/locale/eo/network-settings.dtd | 31 ++++++++++++++++++++++
src/chrome/locale/es-AR/network-settings.dtd | 31 ++++++++++++++++++++++
src/chrome/locale/es-MX/network-settings.dtd | 31 ++++++++++++++++++++++
src/chrome/locale/es/network-settings.dtd | 31 ++++++++++++++++++++++
src/chrome/locale/et/network-settings.dtd | 31 ++++++++++++++++++++++
src/chrome/locale/eu/network-settings.dtd | 31 ++++++++++++++++++++++
src/chrome/locale/fa/network-settings.dtd | 31 ++++++++++++++++++++++
src/chrome/locale/fi/network-settings.dtd | 31 ++++++++++++++++++++++
src/chrome/locale/fr/network-settings.dtd | 31 ++++++++++++++++++++++
src/chrome/locale/fy/network-settings.dtd | 31 ++++++++++++++++++++++
src/chrome/locale/ga/network-settings.dtd | 31 ++++++++++++++++++++++
src/chrome/locale/gl/network-settings.dtd | 31 ++++++++++++++++++++++
src/chrome/locale/gu/network-settings.dtd | 31 ++++++++++++++++++++++
src/chrome/locale/he/network-settings.dtd | 31 ++++++++++++++++++++++
src/chrome/locale/hi/network-settings.dtd | 31 ++++++++++++++++++++++
src/chrome/locale/hr/network-settings.dtd | 31 ++++++++++++++++++++++
src/chrome/locale/hu/network-settings.dtd | 31 ++++++++++++++++++++++
src/chrome/locale/hy/network-settings.dtd | 31 ++++++++++++++++++++++
src/chrome/locale/id/network-settings.dtd | 31 ++++++++++++++++++++++
src/chrome/locale/is/network-settings.dtd | 31 ++++++++++++++++++++++
src/chrome/locale/it/network-settings.dtd | 31 ++++++++++++++++++++++
src/chrome/locale/ja/network-settings.dtd | 39 +++++++++++++++++++++++++---
src/chrome/locale/ka/network-settings.dtd | 31 ++++++++++++++++++++++
src/chrome/locale/kk/network-settings.dtd | 31 ++++++++++++++++++++++
src/chrome/locale/km/network-settings.dtd | 31 ++++++++++++++++++++++
src/chrome/locale/kn/network-settings.dtd | 31 ++++++++++++++++++++++
src/chrome/locale/ko/network-settings.dtd | 31 ++++++++++++++++++++++
src/chrome/locale/lt/network-settings.dtd | 31 ++++++++++++++++++++++
src/chrome/locale/lv/network-settings.dtd | 31 ++++++++++++++++++++++
src/chrome/locale/mk/network-settings.dtd | 31 ++++++++++++++++++++++
src/chrome/locale/mk/torlauncher.properties | 4 +--
src/chrome/locale/ml/network-settings.dtd | 31 ++++++++++++++++++++++
src/chrome/locale/mr/network-settings.dtd | 31 ++++++++++++++++++++++
src/chrome/locale/ms-MY/network-settings.dtd | 31 ++++++++++++++++++++++
src/chrome/locale/my/network-settings.dtd | 31 ++++++++++++++++++++++
src/chrome/locale/nb/network-settings.dtd | 31 ++++++++++++++++++++++
src/chrome/locale/ne/network-settings.dtd | 31 ++++++++++++++++++++++
src/chrome/locale/nl-BE/network-settings.dtd | 31 ++++++++++++++++++++++
src/chrome/locale/nl/network-settings.dtd | 33 ++++++++++++++++++++++-
src/chrome/locale/nl/torlauncher.properties | 2 +-
src/chrome/locale/nn/network-settings.dtd | 31 ++++++++++++++++++++++
src/chrome/locale/pa/network-settings.dtd | 31 ++++++++++++++++++++++
src/chrome/locale/pl/network-settings.dtd | 31 ++++++++++++++++++++++
src/chrome/locale/pt-BR/network-settings.dtd | 31 ++++++++++++++++++++++
src/chrome/locale/pt-PT/network-settings.dtd | 31 ++++++++++++++++++++++
src/chrome/locale/ro/network-settings.dtd | 31 ++++++++++++++++++++++
src/chrome/locale/ru/network-settings.dtd | 31 ++++++++++++++++++++++
src/chrome/locale/si-LK/network-settings.dtd | 31 ++++++++++++++++++++++
src/chrome/locale/sk/network-settings.dtd | 31 ++++++++++++++++++++++
src/chrome/locale/sl/network-settings.dtd | 31 ++++++++++++++++++++++
src/chrome/locale/sq/network-settings.dtd | 31 ++++++++++++++++++++++
src/chrome/locale/sr/network-settings.dtd | 31 ++++++++++++++++++++++
src/chrome/locale/sv/network-settings.dtd | 31 ++++++++++++++++++++++
src/chrome/locale/sw/network-settings.dtd | 33 ++++++++++++++++++++++-
src/chrome/locale/ta/network-settings.dtd | 31 ++++++++++++++++++++++
src/chrome/locale/te/network-settings.dtd | 31 ++++++++++++++++++++++
src/chrome/locale/th/network-settings.dtd | 31 ++++++++++++++++++++++
src/chrome/locale/tr/network-settings.dtd | 31 ++++++++++++++++++++++
src/chrome/locale/uk/network-settings.dtd | 31 ++++++++++++++++++++++
src/chrome/locale/ur/network-settings.dtd | 31 ++++++++++++++++++++++
src/chrome/locale/ur/torlauncher.properties | 2 +-
src/chrome/locale/uz/network-settings.dtd | 31 ++++++++++++++++++++++
src/chrome/locale/vi/network-settings.dtd | 31 ++++++++++++++++++++++
src/chrome/locale/zh-CN/network-settings.dtd | 31 ++++++++++++++++++++++
src/chrome/locale/zh-HK/network-settings.dtd | 31 ++++++++++++++++++++++
src/chrome/locale/zh-TW/network-settings.dtd | 31 ++++++++++++++++++++++
82 files changed, 2421 insertions(+), 10 deletions(-)
diff --git a/chrome.manifest b/chrome.manifest
index 2f55271..5c22b8c 100644
--- a/chrome.manifest
+++ b/chrome.manifest
@@ -16,6 +16,7 @@ contract @torproject.org/torlauncher-process-service;1 {FE7B4CAF-BCF4-4848-8BFF-
category profile-after-change TorProcessService @torproject.org/torlauncher-process-service;1
locale torlauncher en-US chrome/locale/en-US/
+locale torlauncher ach chrome/locale/ach/
locale torlauncher ady chrome/locale/ady/
locale torlauncher af chrome/locale/af/
locale torlauncher af-ZA chrome/locale/af-ZA/
@@ -24,6 +25,7 @@ locale torlauncher am chrome/locale/am/
locale torlauncher am-ET chrome/locale/am-ET/
locale torlauncher ar chrome/locale/ar/
locale torlauncher arn chrome/locale/arn/
+locale torlauncher ast chrome/locale/ast/
locale torlauncher az chrome/locale/az/
locale torlauncher be chrome/locale/be/
locale torlauncher bg chrome/locale/bg/
@@ -46,6 +48,7 @@ locale torlauncher de chrome/locale/de/
locale torlauncher dz chrome/locale/dz/
locale torlauncher el chrome/locale/el/
locale torlauncher el-GR chrome/locale/el-GR/
+locale torlauncher en-GB chrome/locale/en-GB/
locale torlauncher eo chrome/locale/eo/
locale torlauncher es chrome/locale/es/
locale torlauncher es-AR chrome/locale/es-AR/
@@ -64,6 +67,7 @@ locale torlauncher fr-CA chrome/locale/fr-CA/
locale torlauncher fur chrome/locale/fur/
locale torlauncher fy chrome/locale/fy/
locale torlauncher ga chrome/locale/ga/
+locale torlauncher gd chrome/locale/gd/
locale torlauncher gl chrome/locale/gl/
locale torlauncher gu chrome/locale/gu/
locale torlauncher gu-IN chrome/locale/gu-IN/
@@ -84,6 +88,7 @@ locale torlauncher it chrome/locale/it/
locale torlauncher ja chrome/locale/ja/
locale torlauncher jv chrome/locale/jv/
locale torlauncher ka chrome/locale/ka/
+locale torlauncher kab chrome/locale/kab/
locale torlauncher kk chrome/locale/kk/
locale torlauncher km chrome/locale/km/
locale torlauncher kn chrome/locale/kn/
@@ -117,6 +122,8 @@ locale torlauncher nl chrome/locale/nl/
locale torlauncher nl-BE chrome/locale/nl-BE/
locale torlauncher nn chrome/locale/nn/
locale torlauncher nso chrome/locale/nso/
+locale torlauncher oc chrome/locale/oc/
+locale torlauncher or chrome/locale/or/
locale torlauncher pa chrome/locale/pa/
locale torlauncher pap chrome/locale/pap/
locale torlauncher pl chrome/locale/pl/
@@ -137,6 +144,7 @@ locale torlauncher sl chrome/locale/sl/
locale torlauncher sl-SI chrome/locale/sl-SI/
locale torlauncher sn chrome/locale/sn/
locale torlauncher so chrome/locale/so/
+locale torlauncher son chrome/locale/son/
locale torlauncher sq chrome/locale/sq/
locale torlauncher sq-AL chrome/locale/sq-AL/
locale torlauncher sr chrome/locale/sr/
diff --git a/jar.mn b/jar.mn
index b078202..011323a 100644
--- a/jar.mn
+++ b/jar.mn
@@ -25,6 +25,8 @@ torlauncher.jar:
% locale torlauncher en-US %locale/en-US/
locale/en-US/ (src/chrome/locale/en-US/*)
+% locale torlauncher ach %locale/ach/
+ locale/ach/ (src/chrome/locale/ach/*)
% locale torlauncher ady %locale/ady/
locale/ady/ (src/chrome/locale/ady/*)
% locale torlauncher af %locale/af/
@@ -41,6 +43,8 @@ torlauncher.jar:
locale/ar/ (src/chrome/locale/ar/*)
% locale torlauncher arn %locale/arn/
locale/arn/ (src/chrome/locale/arn/*)
+% locale torlauncher ast %locale/ast/
+ locale/ast/ (src/chrome/locale/ast/*)
% locale torlauncher az %locale/az/
locale/az/ (src/chrome/locale/az/*)
% locale torlauncher be %locale/be/
@@ -85,6 +89,8 @@ torlauncher.jar:
locale/el/ (src/chrome/locale/el/*)
% locale torlauncher el-GR %locale/el-GR/
locale/el-GR/ (src/chrome/locale/el-GR/*)
+% locale torlauncher en-GB %locale/en-GB/
+ locale/en-GB/ (src/chrome/locale/en-GB/*)
% locale torlauncher eo %locale/eo/
locale/eo/ (src/chrome/locale/eo/*)
% locale torlauncher es %locale/es/
@@ -121,6 +127,8 @@ torlauncher.jar:
locale/fy/ (src/chrome/locale/fy/*)
% locale torlauncher ga %locale/ga/
locale/ga/ (src/chrome/locale/ga/*)
+% locale torlauncher gd %locale/gd/
+ locale/gd/ (src/chrome/locale/gd/*)
% locale torlauncher gl %locale/gl/
locale/gl/ (src/chrome/locale/gl/*)
% locale torlauncher gu %locale/gu/
@@ -161,6 +169,8 @@ torlauncher.jar:
locale/jv/ (src/chrome/locale/jv/*)
% locale torlauncher ka %locale/ka/
locale/ka/ (src/chrome/locale/ka/*)
+% locale torlauncher kab %locale/kab/
+ locale/kab/ (src/chrome/locale/kab/*)
% locale torlauncher kk %locale/kk/
locale/kk/ (src/chrome/locale/kk/*)
% locale torlauncher km %locale/km/
@@ -227,6 +237,10 @@ torlauncher.jar:
locale/nn/ (src/chrome/locale/nn/*)
% locale torlauncher nso %locale/nso/
locale/nso/ (src/chrome/locale/nso/*)
+% locale torlauncher oc %locale/oc/
+ locale/oc/ (src/chrome/locale/oc/*)
+% locale torlauncher or %locale/or/
+ locale/or/ (src/chrome/locale/or/*)
% locale torlauncher pa %locale/pa/
locale/pa/ (src/chrome/locale/pa/*)
% locale torlauncher pap %locale/pap/
@@ -267,6 +281,8 @@ torlauncher.jar:
locale/sn/ (src/chrome/locale/sn/*)
% locale torlauncher so %locale/so/
locale/so/ (src/chrome/locale/so/*)
+% locale torlauncher son %locale/son/
+ locale/son/ (src/chrome/locale/son/*)
% locale torlauncher sq %locale/sq/
locale/sq/ (src/chrome/locale/sq/*)
% locale torlauncher sq-AL %locale/sq-AL/
diff --git a/src/chrome/locale/af/network-settings.dtd b/src/chrome/locale/af/network-settings.dtd
index 739c19c..ca04ccf 100644
--- a/src/chrome/locale/af/network-settings.dtd
+++ b/src/chrome/locale/af/network-settings.dtd
@@ -26,17 +26,23 @@
<!ENTITY torsettings.optional "Optional">
<!ENTITY torsettings.useProxy.checkbox "I use a proxy to connect to the Internet">
+<!-- TODO: remove colon-->
<!ENTITY torsettings.useProxy.type "Proxy Type:">
<!ENTITY torsettings.useProxy.type.placeholder "select a proxy type">
+<!-- TODO: remove colon-->
<!ENTITY torsettings.useProxy.address "Address:">
<!ENTITY torsettings.useProxy.address.placeholder "IP address or hostname">
+<!-- TODO: remove colon-->
<!ENTITY torsettings.useProxy.port "Poort:">
+<!-- TODO: remove colon-->
<!ENTITY torsettings.useProxy.username "Gebruikersnaam:">
+<!-- TODO: remove colon-->
<!ENTITY torsettings.useProxy.password "Wagwoord">
<!ENTITY torsettings.useProxy.type.socks4 "SOCKS 4">
<!ENTITY torsettings.useProxy.type.socks5 "SOCKS 5">
<!ENTITY torsettings.useProxy.type.http "HTTP / HTTPS">
<!ENTITY torsettings.firewall.checkbox "Hierdie rekenaar gaan deur 'n firewall wat slegs konneksies na sekere poorte toelaat">
+<!-- TODO: remove colon-->
<!ENTITY torsettings.firewall.allowedPorts "Toegelate Poorte:">
<!ENTITY torsettings.useBridges.checkbox "Tor is censored in my country">
<!ENTITY torsettings.useBridges.default "Select a built-in bridge">
@@ -60,3 +66,28 @@
<!-- Progress -->
<!ENTITY torprogress.pleaseWait "Please wait while we establish a connection to the Tor network.  This may take several minutes.">
+
+<!-- #31286 about:preferences strings -->
+<!ENTITY torPreferences.categoryTitle "Tor">
+<!ENTITY torPreferences.torSettings "Tor Settings">
+<!ENTITY torPreferences.torSettingsDescription "Tor Browser routes your traffic over the Tor Network, run by thousands of volunteers around the world." >
+<!ENTITY torPreferences.learnMore "Learn More">
+<!ENTITY torPreferences.bridges "Bridges">
+<!ENTITY torPreferences.bridgesDescription "Bridges help you access the Tor Network in places where Tor is blocked. Depending on where you are, one bridge may work better than another.">
+<!ENTITY torPreferences.useBridge "Use a bridge">
+<!-- torlauncher.request_a_new_bridge -->
+<!ENTITY torPreferences.requestNewBridge "Request a New Bridge&#x2026;">
+<!ENTITY torPreferences.provideBridge "Provide a bridge">
+<!ENTITY torPreferences.advanced "Advanced">
+<!ENTITY torPreferences.advancedDescription "Configure how Tor Browser connects to the internet.">
+<!ENTITY torPreferences.firewallPortsPlaceholder "Comma-separated values">
+<!ENTITY torPreferences.requestBridgeDialogTitle "Request Bridge">
+<!-- torlauncher.contacting_bridgedb=Contacting BridgeDB. Please wait. -->
+<!ENTITY torPreferences.requestBridgeDialogWaitPrompt "Contacting BridgeDB. Please Wait.">
+<!-- torlauncher.captcha_prompt=Solve the CAPTCHA to request a bridge. -->
+<!ENTITY torPreferences.requestBridgeDialogSolvePrompt "Solve the CAPTCHA to request a bridge.">
+<!--torlauncher.bad_captcha_solution=The solution is not correct. Please try again.-->
+<!ENTITY torPreferences.requestBridgeErrorBadSolution "The solution is not correct. Please try again.">
+<!ENTITY torPreferences.viewTorLogs "View the Tor logs.">
+<!ENTITY torPreferences.viewLogs "View Logs&#x2026;">
+<!ENTITY torPreferences.torLogsDialogTitle "Tor Logs">
diff --git a/src/chrome/locale/ar/network-settings.dtd b/src/chrome/locale/ar/network-settings.dtd
index 8055d0f..5e1673a 100644
--- a/src/chrome/locale/ar/network-settings.dtd
+++ b/src/chrome/locale/ar/network-settings.dtd
@@ -26,17 +26,23 @@
<!ENTITY torsettings.optional "اختياري">
<!ENTITY torsettings.useProxy.checkbox "أستخدم وسيطا للاتصال بالإنترنت">
+<!-- TODO: remove colon-->
<!ENTITY torsettings.useProxy.type "نوع البروكسي:">
<!ENTITY torsettings.useProxy.type.placeholder "اختر نوع الوسيط">
+<!-- TODO: remove colon-->
<!ENTITY torsettings.useProxy.address "العنوان:">
<!ENTITY torsettings.useProxy.address.placeholder "عنوان الإنترنت IP أو اسم المضيف">
+<!-- TODO: remove colon-->
<!ENTITY torsettings.useProxy.port "المنفذ:">
+<!-- TODO: remove colon-->
<!ENTITY torsettings.useProxy.username "اسم المستخدم:">
+<!-- TODO: remove colon-->
<!ENTITY torsettings.useProxy.password "كلمة السر:">
<!ENTITY torsettings.useProxy.type.socks4 "SOCKS 4">
<!ENTITY torsettings.useProxy.type.socks5 "SOCKS 5">
<!ENTITY torsettings.useProxy.type.http "HTTP / HTTPS">
<!ENTITY torsettings.firewall.checkbox "اتصال الإنترنت لهذا الكمبيوتر يمر بجدار حماية يسمح بالاتصال فقط من خلال منافذ معينة">
+<!-- TODO: remove colon-->
<!ENTITY torsettings.firewall.allowedPorts "المنافذ المسموح بها:">
<!ENTITY torsettings.useBridges.checkbox "تور محجوب في بلدي">
<!ENTITY torsettings.useBridges.default "اختر جسرا مُدمَجا في البرنامج">
@@ -60,3 +66,28 @@
<!-- Progress -->
<!ENTITY torprogress.pleaseWait "الرجاء الانتظار بينما ننشئ اتصالا لشبكة تور.  قد يستغرق هذا عدة دقائق.">
+
+<!-- #31286 about:preferences strings -->
+<!ENTITY torPreferences.categoryTitle "تور">
+<!ENTITY torPreferences.torSettings "Tor Settings">
+<!ENTITY torPreferences.torSettingsDescription "Tor Browser routes your traffic over the Tor Network, run by thousands of volunteers around the world." >
+<!ENTITY torPreferences.learnMore "إعرف/ي أكثر ">
+<!ENTITY torPreferences.bridges "الجسور">
+<!ENTITY torPreferences.bridgesDescription "Bridges help you access the Tor Network in places where Tor is blocked. Depending on where you are, one bridge may work better than another.">
+<!ENTITY torPreferences.useBridge "Use a bridge">
+<!-- torlauncher.request_a_new_bridge -->
+<!ENTITY torPreferences.requestNewBridge "Request a New Bridge&#x2026;">
+<!ENTITY torPreferences.provideBridge "Provide a bridge">
+<!ENTITY torPreferences.advanced "متقدم">
+<!ENTITY torPreferences.advancedDescription "Configure how Tor Browser connects to the internet.">
+<!ENTITY torPreferences.firewallPortsPlaceholder "Comma-separated values">
+<!ENTITY torPreferences.requestBridgeDialogTitle "Request Bridge">
+<!-- torlauncher.contacting_bridgedb=Contacting BridgeDB. Please wait. -->
+<!ENTITY torPreferences.requestBridgeDialogWaitPrompt "Contacting BridgeDB. Please Wait.">
+<!-- torlauncher.captcha_prompt=Solve the CAPTCHA to request a bridge. -->
+<!ENTITY torPreferences.requestBridgeDialogSolvePrompt "حل كاباتشا لطلب جسر.">
+<!--torlauncher.bad_captcha_solution=The solution is not correct. Please try again.-->
+<!ENTITY torPreferences.requestBridgeErrorBadSolution "الحل ليس سليمًا. يُرجى إعادة المحاولة.">
+<!ENTITY torPreferences.viewTorLogs "View the Tor logs.">
+<!ENTITY torPreferences.viewLogs "View Logs&#x2026;">
+<!ENTITY torPreferences.torLogsDialogTitle "Tor Logs">
diff --git a/src/chrome/locale/az/network-settings.dtd b/src/chrome/locale/az/network-settings.dtd
index b50b5bd..b3aeaae 100644
--- a/src/chrome/locale/az/network-settings.dtd
+++ b/src/chrome/locale/az/network-settings.dtd
@@ -26,17 +26,23 @@
<!ENTITY torsettings.optional "Əlavə">
<!ENTITY torsettings.useProxy.checkbox "I use a proxy to connect to the Internet">
+<!-- TODO: remove colon-->
<!ENTITY torsettings.useProxy.type "Proxy Tipi:">
<!ENTITY torsettings.useProxy.type.placeholder "select a proxy type">
+<!-- TODO: remove colon-->
<!ENTITY torsettings.useProxy.address "Ünvan:">
<!ENTITY torsettings.useProxy.address.placeholder "İP ünvanı və ya anakompüterin adı">
+<!-- TODO: remove colon-->
<!ENTITY torsettings.useProxy.port "Port:">
+<!-- TODO: remove colon-->
<!ENTITY torsettings.useProxy.username "İstifadəçi adı:">
+<!-- TODO: remove colon-->
<!ENTITY torsettings.useProxy.password "Şifrə:">
<!ENTITY torsettings.useProxy.type.socks4 "SOCKS 4">
<!ENTITY torsettings.useProxy.type.socks5 "SOCKS 5">
<!ENTITY torsettings.useProxy.type.http "HTTP / HTTPS">
<!ENTITY torsettings.firewall.checkbox "Bu kompüter yalnız müəyyən portlarla əlaqəyə icazə verən təhlükəsizlik divarindan keçir">
+<!-- TODO: remove colon-->
<!ENTITY torsettings.firewall.allowedPorts "İczaə verilən portlar:">
<!ENTITY torsettings.useBridges.checkbox "Tor is censored in my country">
<!ENTITY torsettings.useBridges.default "Select a built-in bridge">
@@ -60,3 +66,28 @@
<!-- Progress -->
<!ENTITY torprogress.pleaseWait "Please wait while we establish a connection to the Tor network.  This may take several minutes.">
+
+<!-- #31286 about:preferences strings -->
+<!ENTITY torPreferences.categoryTitle "Tor">
+<!ENTITY torPreferences.torSettings "Tor Settings">
+<!ENTITY torPreferences.torSettingsDescription "Tor Browser routes your traffic over the Tor Network, run by thousands of volunteers around the world." >
+<!ENTITY torPreferences.learnMore "Learn More">
+<!ENTITY torPreferences.bridges "Körpülər">
+<!ENTITY torPreferences.bridgesDescription "Bridges help you access the Tor Network in places where Tor is blocked. Depending on where you are, one bridge may work better than another.">
+<!ENTITY torPreferences.useBridge "Use a bridge">
+<!-- torlauncher.request_a_new_bridge -->
+<!ENTITY torPreferences.requestNewBridge "Request a New Bridge&#x2026;">
+<!ENTITY torPreferences.provideBridge "Provide a bridge">
+<!ENTITY torPreferences.advanced "Qabaqcıl">
+<!ENTITY torPreferences.advancedDescription "Configure how Tor Browser connects to the internet.">
+<!ENTITY torPreferences.firewallPortsPlaceholder "Comma-separated values">
+<!ENTITY torPreferences.requestBridgeDialogTitle "Request Bridge">
+<!-- torlauncher.contacting_bridgedb=Contacting BridgeDB. Please wait. -->
+<!ENTITY torPreferences.requestBridgeDialogWaitPrompt "Contacting BridgeDB. Please Wait.">
+<!-- torlauncher.captcha_prompt=Solve the CAPTCHA to request a bridge. -->
+<!ENTITY torPreferences.requestBridgeDialogSolvePrompt "Solve the CAPTCHA to request a bridge.">
+<!--torlauncher.bad_captcha_solution=The solution is not correct. Please try again.-->
+<!ENTITY torPreferences.requestBridgeErrorBadSolution "The solution is not correct. Please try again.">
+<!ENTITY torPreferences.viewTorLogs "View the Tor logs.">
+<!ENTITY torPreferences.viewLogs "View Logs&#x2026;">
+<!ENTITY torPreferences.torLogsDialogTitle "Tor Logs">
diff --git a/src/chrome/locale/be/network-settings.dtd b/src/chrome/locale/be/network-settings.dtd
index c4f9af4..38e2752 100644
--- a/src/chrome/locale/be/network-settings.dtd
+++ b/src/chrome/locale/be/network-settings.dtd
@@ -26,17 +26,23 @@
<!ENTITY torsettings.optional "Optional">
<!ENTITY torsettings.useProxy.checkbox "I use a proxy to connect to the Internet">
+<!-- TODO: remove colon-->
<!ENTITY torsettings.useProxy.type "Proxy Type:">
<!ENTITY torsettings.useProxy.type.placeholder "select a proxy type">
+<!-- TODO: remove colon-->
<!ENTITY torsettings.useProxy.address "Address:">
<!ENTITY torsettings.useProxy.address.placeholder "IP address or hostname">
+<!-- TODO: remove colon-->
<!ENTITY torsettings.useProxy.port "Port:">
+<!-- TODO: remove colon-->
<!ENTITY torsettings.useProxy.username "Username:">
+<!-- TODO: remove colon-->
<!ENTITY torsettings.useProxy.password "Пароль:">
<!ENTITY torsettings.useProxy.type.socks4 "SOCKS 4">
<!ENTITY torsettings.useProxy.type.socks5 "SOCKS 5">
<!ENTITY torsettings.useProxy.type.http "HTTP / HTTPS">
<!ENTITY torsettings.firewall.checkbox "This computer goes through a firewall that only allows connections to certain ports">
+<!-- TODO: remove colon-->
<!ENTITY torsettings.firewall.allowedPorts "Allowed Ports:">
<!ENTITY torsettings.useBridges.checkbox "Tor is censored in my country">
<!ENTITY torsettings.useBridges.default "Select a built-in bridge">
@@ -60,3 +66,28 @@
<!-- Progress -->
<!ENTITY torprogress.pleaseWait "Please wait while we establish a connection to the Tor network.  This may take several minutes.">
+
+<!-- #31286 about:preferences strings -->
+<!ENTITY torPreferences.categoryTitle "Tor">
+<!ENTITY torPreferences.torSettings "Tor Settings">
+<!ENTITY torPreferences.torSettingsDescription "Tor Browser routes your traffic over the Tor Network, run by thousands of volunteers around the world." >
+<!ENTITY torPreferences.learnMore "Даведацца больш">
+<!ENTITY torPreferences.bridges "Масты">
+<!ENTITY torPreferences.bridgesDescription "Bridges help you access the Tor Network in places where Tor is blocked. Depending on where you are, one bridge may work better than another.">
+<!ENTITY torPreferences.useBridge "Use a bridge">
+<!-- torlauncher.request_a_new_bridge -->
+<!ENTITY torPreferences.requestNewBridge "Request a New Bridge&#x2026;">
+<!ENTITY torPreferences.provideBridge "Provide a bridge">
+<!ENTITY torPreferences.advanced "Дадаткова">
+<!ENTITY torPreferences.advancedDescription "Configure how Tor Browser connects to the internet.">
+<!ENTITY torPreferences.firewallPortsPlaceholder "Comma-separated values">
+<!ENTITY torPreferences.requestBridgeDialogTitle "Request Bridge">
+<!-- torlauncher.contacting_bridgedb=Contacting BridgeDB. Please wait. -->
+<!ENTITY torPreferences.requestBridgeDialogWaitPrompt "Contacting BridgeDB. Please Wait.">
+<!-- torlauncher.captcha_prompt=Solve the CAPTCHA to request a bridge. -->
+<!ENTITY torPreferences.requestBridgeDialogSolvePrompt "Solve the CAPTCHA to request a bridge.">
+<!--torlauncher.bad_captcha_solution=The solution is not correct. Please try again.-->
+<!ENTITY torPreferences.requestBridgeErrorBadSolution "The solution is not correct. Please try again.">
+<!ENTITY torPreferences.viewTorLogs "View the Tor logs.">
+<!ENTITY torPreferences.viewLogs "View Logs&#x2026;">
+<!ENTITY torPreferences.torLogsDialogTitle "Tor Logs">
diff --git a/src/chrome/locale/bg/network-settings.dtd b/src/chrome/locale/bg/network-settings.dtd
index 3ce31b5..01223d7 100644
--- a/src/chrome/locale/bg/network-settings.dtd
+++ b/src/chrome/locale/bg/network-settings.dtd
@@ -26,17 +26,23 @@
<!ENTITY torsettings.optional "Допълнителен">
<!ENTITY torsettings.useProxy.checkbox "Аз използвам прокси за достъп до интернет">
+<!-- TODO: remove colon-->
<!ENTITY torsettings.useProxy.type "Прокси Тип:">
<!ENTITY torsettings.useProxy.type.placeholder "Изберете вида на проксито">
+<!-- TODO: remove colon-->
<!ENTITY torsettings.useProxy.address "Адрес:">
<!ENTITY torsettings.useProxy.address.placeholder "IP адрес или хост">
+<!-- TODO: remove colon-->
<!ENTITY torsettings.useProxy.port "Порт:">
+<!-- TODO: remove colon-->
<!ENTITY torsettings.useProxy.username "Потребителско име:">
+<!-- TODO: remove colon-->
<!ENTITY torsettings.useProxy.password "Парола:">
<!ENTITY torsettings.useProxy.type.socks4 "SOCKS 4">
<!ENTITY torsettings.useProxy.type.socks5 "SOCKS 5">
<!ENTITY torsettings.useProxy.type.http "HTTP / HTTPS">
<!ENTITY torsettings.firewall.checkbox "Този компютър се свързва през firewall,който позволява връзки само към определени портове.">
+<!-- TODO: remove colon-->
<!ENTITY torsettings.firewall.allowedPorts "Позволени портове:">
<!ENTITY torsettings.useBridges.checkbox "Tor е цензуриран в моята страна">
<!ENTITY torsettings.useBridges.default "Избор на вграден бридж">
@@ -60,3 +66,28 @@
<!-- Progress -->
<!ENTITY torprogress.pleaseWait "Моля изчакайте, докато установим връзка с Тор мрежата..  Toва може да отнеме няколко минути.">
+
+<!-- #31286 about:preferences strings -->
+<!ENTITY torPreferences.categoryTitle "Tor">
+<!ENTITY torPreferences.torSettings "Tor Settings">
+<!ENTITY torPreferences.torSettingsDescription "Tor Browser routes your traffic over the Tor Network, run by thousands of volunteers around the world." >
+<!ENTITY torPreferences.learnMore "Learn More">
+<!ENTITY torPreferences.bridges "Бриджове">
+<!ENTITY torPreferences.bridgesDescription "Bridges help you access the Tor Network in places where Tor is blocked. Depending on where you are, one bridge may work better than another.">
+<!ENTITY torPreferences.useBridge "Use a bridge">
+<!-- torlauncher.request_a_new_bridge -->
+<!ENTITY torPreferences.requestNewBridge "Request a New Bridge&#x2026;">
+<!ENTITY torPreferences.provideBridge "Provide a bridge">
+<!ENTITY torPreferences.advanced "Напреднали">
+<!ENTITY torPreferences.advancedDescription "Configure how Tor Browser connects to the internet.">
+<!ENTITY torPreferences.firewallPortsPlaceholder "Comma-separated values">
+<!ENTITY torPreferences.requestBridgeDialogTitle "Request Bridge">
+<!-- torlauncher.contacting_bridgedb=Contacting BridgeDB. Please wait. -->
+<!ENTITY torPreferences.requestBridgeDialogWaitPrompt "Contacting BridgeDB. Please Wait.">
+<!-- torlauncher.captcha_prompt=Solve the CAPTCHA to request a bridge. -->
+<!ENTITY torPreferences.requestBridgeDialogSolvePrompt "Решете CAPTCHA за заявка на bridge.">
+<!--torlauncher.bad_captcha_solution=The solution is not correct. Please try again.-->
+<!ENTITY torPreferences.requestBridgeErrorBadSolution "Решението не е правилно. Моля, опитайте пак.">
+<!ENTITY torPreferences.viewTorLogs "View the Tor logs.">
+<!ENTITY torPreferences.viewLogs "View Logs&#x2026;">
+<!ENTITY torPreferences.torLogsDialogTitle "Tor Logs">
diff --git a/src/chrome/locale/bn/network-settings.dtd b/src/chrome/locale/bn/network-settings.dtd
index 99ab804..67680f7 100644
--- a/src/chrome/locale/bn/network-settings.dtd
+++ b/src/chrome/locale/bn/network-settings.dtd
@@ -26,17 +26,23 @@
<!ENTITY torsettings.optional "ঐচ্ছিক">
<!ENTITY torsettings.useProxy.checkbox "আমি ইন্টারনেটে সংযোগ স্থাপন করতে প্রক্সি ব্যবহার করি">
+<!-- TODO: remove colon-->
<!ENTITY torsettings.useProxy.type "প্রক্সি প্রকার:">
<!ENTITY torsettings.useProxy.type.placeholder "একটি প্রক্সি টাইপ নির্বাচন করুন">
+<!-- TODO: remove colon-->
<!ENTITY torsettings.useProxy.address "ঠিকানা:">
<!ENTITY torsettings.useProxy.address.placeholder "আইপি ঠিকানা বা হোস্টনাম">
+<!-- TODO: remove colon-->
<!ENTITY torsettings.useProxy.port "পোর্টঃ">
+<!-- TODO: remove colon-->
<!ENTITY torsettings.useProxy.username "ব্যবহারকারী নাম:">
+<!-- TODO: remove colon-->
<!ENTITY torsettings.useProxy.password "পাসওয়ার্ড:">
<!ENTITY torsettings.useProxy.type.socks4 "SOCKS 4">
<!ENTITY torsettings.useProxy.type.socks5 "SOCKS 5">
<!ENTITY torsettings.useProxy.type.http "HTTP / HTTPS">
<!ENTITY torsettings.firewall.checkbox "এই কম্পিউটারটি একটি ফায়ারওয়ালের মাধ্যমে যায় যা কেবলমাত্র কিছু পোর্টের সংযোগের অনুমতি দেয়">
+<!-- TODO: remove colon-->
<!ENTITY torsettings.firewall.allowedPorts "অনুমোদিত পোর্টসমূহ:">
<!ENTITY torsettings.useBridges.checkbox "টর আমার দেশে সেন্সর করা হয়">
<!ENTITY torsettings.useBridges.default "একটি অন্তর্নির্মিত ব্রিজ নির্বাচন করুন">
@@ -60,3 +66,28 @@
<!-- Progress -->
<!ENTITY torprogress.pleaseWait "আমরা টর নেটওয়ার্কে একটি সংযোগ স্থাপন করার সময় অনুগ্রহ করে অপেক্ষা করুন।   এই কয়েক মিনিট সময় নিতে পারে.">
+
+<!-- #31286 about:preferences strings -->
+<!ENTITY torPreferences.categoryTitle "Tor">
+<!ENTITY torPreferences.torSettings "Tor Settings">
+<!ENTITY torPreferences.torSettingsDescription "Tor Browser routes your traffic over the Tor Network, run by thousands of volunteers around the world." >
+<!ENTITY torPreferences.learnMore "আরও জানুন">
+<!ENTITY torPreferences.bridges "ব্রিজ">
+<!ENTITY torPreferences.bridgesDescription "Bridges help you access the Tor Network in places where Tor is blocked. Depending on where you are, one bridge may work better than another.">
+<!ENTITY torPreferences.useBridge "Use a bridge">
+<!-- torlauncher.request_a_new_bridge -->
+<!ENTITY torPreferences.requestNewBridge "Request a New Bridge&#x2026;">
+<!ENTITY torPreferences.provideBridge "Provide a bridge">
+<!ENTITY torPreferences.advanced "অগ্রবর্তী">
+<!ENTITY torPreferences.advancedDescription "Configure how Tor Browser connects to the internet.">
+<!ENTITY torPreferences.firewallPortsPlaceholder "Comma-separated values">
+<!ENTITY torPreferences.requestBridgeDialogTitle "Request Bridge">
+<!-- torlauncher.contacting_bridgedb=Contacting BridgeDB. Please wait. -->
+<!ENTITY torPreferences.requestBridgeDialogWaitPrompt "Contacting BridgeDB. Please Wait.">
+<!-- torlauncher.captcha_prompt=Solve the CAPTCHA to request a bridge. -->
+<!ENTITY torPreferences.requestBridgeDialogSolvePrompt "একটি ব্রিজ অনুরোধ করার জন্য ক্যাপচা সমাধান করুন।...">
+<!--torlauncher.bad_captcha_solution=The solution is not correct. Please try again.-->
+<!ENTITY torPreferences.requestBridgeErrorBadSolution "সমাধান সঠিক নয়। অনুগ্রহপূর্বক আবার চেষ্টা করুন.">
+<!ENTITY torPreferences.viewTorLogs "View the Tor logs.">
+<!ENTITY torPreferences.viewLogs "View Logs&#x2026;">
+<!ENTITY torPreferences.torLogsDialogTitle "Tor Logs">
diff --git a/src/chrome/locale/br/network-settings.dtd b/src/chrome/locale/br/network-settings.dtd
index 4870d28..86eb33d 100644
--- a/src/chrome/locale/br/network-settings.dtd
+++ b/src/chrome/locale/br/network-settings.dtd
@@ -26,17 +26,23 @@
<!ENTITY torsettings.optional "Optional">
<!ENTITY torsettings.useProxy.checkbox "I use a proxy to connect to the Internet">
+<!-- TODO: remove colon-->
<!ENTITY torsettings.useProxy.type "Proxy Type:">
<!ENTITY torsettings.useProxy.type.placeholder "select a proxy type">
+<!-- TODO: remove colon-->
<!ENTITY torsettings.useProxy.address "Address:">
<!ENTITY torsettings.useProxy.address.placeholder "IP address or hostname">
+<!-- TODO: remove colon-->
<!ENTITY torsettings.useProxy.port "Port:">
+<!-- TODO: remove colon-->
<!ENTITY torsettings.useProxy.username "Username:">
+<!-- TODO: remove colon-->
<!ENTITY torsettings.useProxy.password "Password:">
<!ENTITY torsettings.useProxy.type.socks4 "SOCKS 4">
<!ENTITY torsettings.useProxy.type.socks5 "SOCKS 5">
<!ENTITY torsettings.useProxy.type.http "HTTP / HTTPS">
<!ENTITY torsettings.firewall.checkbox "This computer goes through a firewall that only allows connections to certain ports">
+<!-- TODO: remove colon-->
<!ENTITY torsettings.firewall.allowedPorts "Allowed Ports:">
<!ENTITY torsettings.useBridges.checkbox "Tor is censored in my country">
<!ENTITY torsettings.useBridges.default "Select a built-in bridge">
@@ -60,3 +66,28 @@
<!-- Progress -->
<!ENTITY torprogress.pleaseWait "Gortozit mar plij ma tiazefemp ur gevreadenn ouzh ar genrouedad Tor.   Gellout a rafe kemer meur a vunutenn.">
+
+<!-- #31286 about:preferences strings -->
+<!ENTITY torPreferences.categoryTitle "Tor">
+<!ENTITY torPreferences.torSettings "Tor Settings">
+<!ENTITY torPreferences.torSettingsDescription "Tor Browser routes your traffic over the Tor Network, run by thousands of volunteers around the world." >
+<!ENTITY torPreferences.learnMore "Gouzout hiroc'h">
+<!ENTITY torPreferences.bridges "Pontoù">
+<!ENTITY torPreferences.bridgesDescription "Bridges help you access the Tor Network in places where Tor is blocked. Depending on where you are, one bridge may work better than another.">
+<!ENTITY torPreferences.useBridge "Use a bridge">
+<!-- torlauncher.request_a_new_bridge -->
+<!ENTITY torPreferences.requestNewBridge "Request a New Bridge&#x2026;">
+<!ENTITY torPreferences.provideBridge "Provide a bridge">
+<!ENTITY torPreferences.advanced "Araokaet">
+<!ENTITY torPreferences.advancedDescription "Configure how Tor Browser connects to the internet.">
+<!ENTITY torPreferences.firewallPortsPlaceholder "Comma-separated values">
+<!ENTITY torPreferences.requestBridgeDialogTitle "Request Bridge">
+<!-- torlauncher.contacting_bridgedb=Contacting BridgeDB. Please wait. -->
+<!ENTITY torPreferences.requestBridgeDialogWaitPrompt "Contacting BridgeDB. Please Wait.">
+<!-- torlauncher.captcha_prompt=Solve the CAPTCHA to request a bridge. -->
+<!ENTITY torPreferences.requestBridgeDialogSolvePrompt "Solve the CAPTCHA to request a bridge.">
+<!--torlauncher.bad_captcha_solution=The solution is not correct. Please try again.-->
+<!ENTITY torPreferences.requestBridgeErrorBadSolution "The solution is not correct. Please try again.">
+<!ENTITY torPreferences.viewTorLogs "View the Tor logs.">
+<!ENTITY torPreferences.viewLogs "View Logs&#x2026;">
+<!ENTITY torPreferences.torLogsDialogTitle "Tor Logs">
diff --git a/src/chrome/locale/bs/network-settings.dtd b/src/chrome/locale/bs/network-settings.dtd
index 25ee444..ba458c3 100644
--- a/src/chrome/locale/bs/network-settings.dtd
+++ b/src/chrome/locale/bs/network-settings.dtd
@@ -26,17 +26,23 @@
<!ENTITY torsettings.optional "Optional">
<!ENTITY torsettings.useProxy.checkbox "I use a proxy to connect to the Internet">
+<!-- TODO: remove colon-->
<!ENTITY torsettings.useProxy.type "Proxy Type:">
<!ENTITY torsettings.useProxy.type.placeholder "select a proxy type">
+<!-- TODO: remove colon-->
<!ENTITY torsettings.useProxy.address "Address:">
<!ENTITY torsettings.useProxy.address.placeholder "IP address or hostname">
+<!-- TODO: remove colon-->
<!ENTITY torsettings.useProxy.port "Port:">
+<!-- TODO: remove colon-->
<!ENTITY torsettings.useProxy.username "Korisničko ime:">
+<!-- TODO: remove colon-->
<!ENTITY torsettings.useProxy.password "Šifra">
<!ENTITY torsettings.useProxy.type.socks4 "SOCKS 4">
<!ENTITY torsettings.useProxy.type.socks5 "SOCKS 5">
<!ENTITY torsettings.useProxy.type.http "HTTP / HTTPS">
<!ENTITY torsettings.firewall.checkbox "This computer goes through a firewall that only allows connections to certain ports">
+<!-- TODO: remove colon-->
<!ENTITY torsettings.firewall.allowedPorts "Allowed Ports:">
<!ENTITY torsettings.useBridges.checkbox "Tor is censored in my country">
<!ENTITY torsettings.useBridges.default "Select a built-in bridge">
@@ -60,3 +66,28 @@
<!-- Progress -->
<!ENTITY torprogress.pleaseWait "Please wait while we establish a connection to the Tor network.  This may take several minutes.">
+
+<!-- #31286 about:preferences strings -->
+<!ENTITY torPreferences.categoryTitle "Tor">
+<!ENTITY torPreferences.torSettings "Tor Settings">
+<!ENTITY torPreferences.torSettingsDescription "Tor Browser routes your traffic over the Tor Network, run by thousands of volunteers around the world." >
+<!ENTITY torPreferences.learnMore "Learn More">
+<!ENTITY torPreferences.bridges "Bridges">
+<!ENTITY torPreferences.bridgesDescription "Bridges help you access the Tor Network in places where Tor is blocked. Depending on where you are, one bridge may work better than another.">
+<!ENTITY torPreferences.useBridge "Use a bridge">
+<!-- torlauncher.request_a_new_bridge -->
+<!ENTITY torPreferences.requestNewBridge "Request a New Bridge&#x2026;">
+<!ENTITY torPreferences.provideBridge "Provide a bridge">
+<!ENTITY torPreferences.advanced "Advanced">
+<!ENTITY torPreferences.advancedDescription "Configure how Tor Browser connects to the internet.">
+<!ENTITY torPreferences.firewallPortsPlaceholder "Comma-separated values">
+<!ENTITY torPreferences.requestBridgeDialogTitle "Request Bridge">
+<!-- torlauncher.contacting_bridgedb=Contacting BridgeDB. Please wait. -->
+<!ENTITY torPreferences.requestBridgeDialogWaitPrompt "Contacting BridgeDB. Please Wait.">
+<!-- torlauncher.captcha_prompt=Solve the CAPTCHA to request a bridge. -->
+<!ENTITY torPreferences.requestBridgeDialogSolvePrompt "Solve the CAPTCHA to request a bridge.">
+<!--torlauncher.bad_captcha_solution=The solution is not correct. Please try again.-->
+<!ENTITY torPreferences.requestBridgeErrorBadSolution "The solution is not correct. Please try again.">
+<!ENTITY torPreferences.viewTorLogs "View the Tor logs.">
+<!ENTITY torPreferences.viewLogs "View Logs&#x2026;">
+<!ENTITY torPreferences.torLogsDialogTitle "Tor Logs">
diff --git a/src/chrome/locale/ca/network-settings.dtd b/src/chrome/locale/ca/network-settings.dtd
index 0d02c66..65d4f16 100644
--- a/src/chrome/locale/ca/network-settings.dtd
+++ b/src/chrome/locale/ca/network-settings.dtd
@@ -27,17 +27,23 @@
">
<!ENTITY torsettings.useProxy.checkbox "Utilitzo un servidor intermediari per a accedir a Internet">
+<!-- TODO: remove colon-->
<!ENTITY torsettings.useProxy.type "Tipus de servidor intermediari local:">
<!ENTITY torsettings.useProxy.type.placeholder "seleccioneu un tipus de servidor intermediari">
+<!-- TODO: remove colon-->
<!ENTITY torsettings.useProxy.address "Adreça:">
<!ENTITY torsettings.useProxy.address.placeholder "Adreça IP o nom del host">
+<!-- TODO: remove colon-->
<!ENTITY torsettings.useProxy.port "Port:">
+<!-- TODO: remove colon-->
<!ENTITY torsettings.useProxy.username "Nom d'usuari:">
+<!-- TODO: remove colon-->
<!ENTITY torsettings.useProxy.password "Contrasenya:">
<!ENTITY torsettings.useProxy.type.socks4 "SOCKS 4">
<!ENTITY torsettings.useProxy.type.socks5 "SOCKS 5">
<!ENTITY torsettings.useProxy.type.http "HTTP / HTTPS">
<!ENTITY torsettings.firewall.checkbox "Aquest ordinador va a través d'un tallafoc que només permet connexions a certs ports">
+<!-- TODO: remove colon-->
<!ENTITY torsettings.firewall.allowedPorts "Ports permesos:">
<!ENTITY torsettings.useBridges.checkbox "Tor està censurat al meu país">
<!ENTITY torsettings.useBridges.default "Seleccioneu un pont predefinit">
@@ -61,3 +67,28 @@
<!-- Progress -->
<!ENTITY torprogress.pleaseWait "Espereu mentre establim una connexió amb la xarxa Tor.  Això pot tardar uns minuts.">
+
+<!-- #31286 about:preferences strings -->
+<!ENTITY torPreferences.categoryTitle "Tor">
+<!ENTITY torPreferences.torSettings "Tor Settings">
+<!ENTITY torPreferences.torSettingsDescription "Tor Browser routes your traffic over the Tor Network, run by thousands of volunteers around the world." >
+<!ENTITY torPreferences.learnMore "Aprèn més">
+<!ENTITY torPreferences.bridges "Ponts">
+<!ENTITY torPreferences.bridgesDescription "Bridges help you access the Tor Network in places where Tor is blocked. Depending on where you are, one bridge may work better than another.">
+<!ENTITY torPreferences.useBridge "Use a bridge">
+<!-- torlauncher.request_a_new_bridge -->
+<!ENTITY torPreferences.requestNewBridge "Request a New Bridge&#x2026;">
+<!ENTITY torPreferences.provideBridge "Provide a bridge">
+<!ENTITY torPreferences.advanced "Avançat">
+<!ENTITY torPreferences.advancedDescription "Configure how Tor Browser connects to the internet.">
+<!ENTITY torPreferences.firewallPortsPlaceholder "Comma-separated values">
+<!ENTITY torPreferences.requestBridgeDialogTitle "Request Bridge">
+<!-- torlauncher.contacting_bridgedb=Contacting BridgeDB. Please wait. -->
+<!ENTITY torPreferences.requestBridgeDialogWaitPrompt "Contacting BridgeDB. Please Wait.">
+<!-- torlauncher.captcha_prompt=Solve the CAPTCHA to request a bridge. -->
+<!ENTITY torPreferences.requestBridgeDialogSolvePrompt "Resolgueu el CAPTCHA per a sol·licitar un pont.">
+<!--torlauncher.bad_captcha_solution=The solution is not correct. Please try again.-->
+<!ENTITY torPreferences.requestBridgeErrorBadSolution "La solució no és correcta. Torneu a provar-ho.">
+<!ENTITY torPreferences.viewTorLogs "View the Tor logs.">
+<!ENTITY torPreferences.viewLogs "View Logs&#x2026;">
+<!ENTITY torPreferences.torLogsDialogTitle "Tor Logs">
diff --git a/src/chrome/locale/cs/network-settings.dtd b/src/chrome/locale/cs/network-settings.dtd
index 1e76823..61c193f 100644
--- a/src/chrome/locale/cs/network-settings.dtd
+++ b/src/chrome/locale/cs/network-settings.dtd
@@ -26,17 +26,23 @@
<!ENTITY torsettings.optional "Volitelné">
<!ENTITY torsettings.useProxy.checkbox "Používám proxy pro připojení k Internetu">
+<!-- TODO: remove colon-->
<!ENTITY torsettings.useProxy.type "Typ proxy:">
<!ENTITY torsettings.useProxy.type.placeholder "vyberte typ proxy">
+<!-- TODO: remove colon-->
<!ENTITY torsettings.useProxy.address "Adresa:">
<!ENTITY torsettings.useProxy.address.placeholder "IP adresa nebo název serveru">
+<!-- TODO: remove colon-->
<!ENTITY torsettings.useProxy.port "Port:">
+<!-- TODO: remove colon-->
<!ENTITY torsettings.useProxy.username "Uživatel:">
+<!-- TODO: remove colon-->
<!ENTITY torsettings.useProxy.password "Heslo:">
<!ENTITY torsettings.useProxy.type.socks4 "SOCKS 4">
<!ENTITY torsettings.useProxy.type.socks5 "SOCKS 5">
<!ENTITY torsettings.useProxy.type.http "HTTP / HTTPS">
<!ENTITY torsettings.firewall.checkbox "Tento počítač používá firewall, který povoluje připojení pouze přes některé porty.">
+<!-- TODO: remove colon-->
<!ENTITY torsettings.firewall.allowedPorts "Povolené porty:">
<!ENTITY torsettings.useBridges.checkbox "Tor je v mé zemi cenzurován">
<!ENTITY torsettings.useBridges.default "Vyberte vestavěný most">
@@ -60,3 +66,28 @@
<!-- Progress -->
<!ENTITY torprogress.pleaseWait "Počkejte prosím na vytvoření spojení do sítě Tor.  Může to trvat několik minut.">
+
+<!-- #31286 about:preferences strings -->
+<!ENTITY torPreferences.categoryTitle "Tor">
+<!ENTITY torPreferences.torSettings "Tor Settings">
+<!ENTITY torPreferences.torSettingsDescription "Tor Browser routes your traffic over the Tor Network, run by thousands of volunteers around the world." >
+<!ENTITY torPreferences.learnMore "Zjistit více">
+<!ENTITY torPreferences.bridges "Bridge">
+<!ENTITY torPreferences.bridgesDescription "Bridges help you access the Tor Network in places where Tor is blocked. Depending on where you are, one bridge may work better than another.">
+<!ENTITY torPreferences.useBridge "Use a bridge">
+<!-- torlauncher.request_a_new_bridge -->
+<!ENTITY torPreferences.requestNewBridge "Request a New Bridge&#x2026;">
+<!ENTITY torPreferences.provideBridge "Provide a bridge">
+<!ENTITY torPreferences.advanced "Pokročilé">
+<!ENTITY torPreferences.advancedDescription "Configure how Tor Browser connects to the internet.">
+<!ENTITY torPreferences.firewallPortsPlaceholder "Comma-separated values">
+<!ENTITY torPreferences.requestBridgeDialogTitle "Request Bridge">
+<!-- torlauncher.contacting_bridgedb=Contacting BridgeDB. Please wait. -->
+<!ENTITY torPreferences.requestBridgeDialogWaitPrompt "Contacting BridgeDB. Please Wait.">
+<!-- torlauncher.captcha_prompt=Solve the CAPTCHA to request a bridge. -->
+<!ENTITY torPreferences.requestBridgeDialogSolvePrompt "Pro vyžádání mostu prosím opište kód CAPTCHA.">
+<!--torlauncher.bad_captcha_solution=The solution is not correct. Please try again.-->
+<!ENTITY torPreferences.requestBridgeErrorBadSolution "Neopsali jste kód správně. Zkuste to prosím znovu.">
+<!ENTITY torPreferences.viewTorLogs "View the Tor logs.">
+<!ENTITY torPreferences.viewLogs "View Logs&#x2026;">
+<!ENTITY torPreferences.torLogsDialogTitle "Tor Logs">
diff --git a/src/chrome/locale/cy/network-settings.dtd b/src/chrome/locale/cy/network-settings.dtd
index e721af4..55cb7db 100644
--- a/src/chrome/locale/cy/network-settings.dtd
+++ b/src/chrome/locale/cy/network-settings.dtd
@@ -26,17 +26,23 @@
<!ENTITY torsettings.optional "Dewisiol">
<!ENTITY torsettings.useProxy.checkbox "I use a proxy to connect to the Internet">
+<!-- TODO: remove colon-->
<!ENTITY torsettings.useProxy.type "Math Dirprwy:">
<!ENTITY torsettings.useProxy.type.placeholder "select a proxy type">
+<!-- TODO: remove colon-->
<!ENTITY torsettings.useProxy.address "Cyfeiriad:">
<!ENTITY torsettings.useProxy.address.placeholder "Cyfeiriad IP neu enw gwesteiwr">
+<!-- TODO: remove colon-->
<!ENTITY torsettings.useProxy.port "Porth:">
+<!-- TODO: remove colon-->
<!ENTITY torsettings.useProxy.username "Enw defnyddiwr:">
+<!-- TODO: remove colon-->
<!ENTITY torsettings.useProxy.password "Cyfrinair:">
<!ENTITY torsettings.useProxy.type.socks4 "SOCKS 4">
<!ENTITY torsettings.useProxy.type.socks5 "SOCKS 5">
<!ENTITY torsettings.useProxy.type.http "HTTP / HTTPS">
<!ENTITY torsettings.firewall.checkbox "This computer goes through a firewall that only allows connections to certain ports">
+<!-- TODO: remove colon-->
<!ENTITY torsettings.firewall.allowedPorts "Pyrth a ganiateir:">
<!ENTITY torsettings.useBridges.checkbox "Tor is censored in my country">
<!ENTITY torsettings.useBridges.default "Select a built-in bridge">
@@ -60,3 +66,28 @@
<!-- Progress -->
<!ENTITY torprogress.pleaseWait "Please wait while we establish a connection to the Tor network.  This may take several minutes.">
+
+<!-- #31286 about:preferences strings -->
+<!ENTITY torPreferences.categoryTitle "Tor">
+<!ENTITY torPreferences.torSettings "Tor Settings">
+<!ENTITY torPreferences.torSettingsDescription "Tor Browser routes your traffic over the Tor Network, run by thousands of volunteers around the world." >
+<!ENTITY torPreferences.learnMore "Learn More">
+<!ENTITY torPreferences.bridges "Bridges">
+<!ENTITY torPreferences.bridgesDescription "Bridges help you access the Tor Network in places where Tor is blocked. Depending on where you are, one bridge may work better than another.">
+<!ENTITY torPreferences.useBridge "Use a bridge">
+<!-- torlauncher.request_a_new_bridge -->
+<!ENTITY torPreferences.requestNewBridge "Request a New Bridge&#x2026;">
+<!ENTITY torPreferences.provideBridge "Provide a bridge">
+<!ENTITY torPreferences.advanced "Advanced">
+<!ENTITY torPreferences.advancedDescription "Configure how Tor Browser connects to the internet.">
+<!ENTITY torPreferences.firewallPortsPlaceholder "Comma-separated values">
+<!ENTITY torPreferences.requestBridgeDialogTitle "Request Bridge">
+<!-- torlauncher.contacting_bridgedb=Contacting BridgeDB. Please wait. -->
+<!ENTITY torPreferences.requestBridgeDialogWaitPrompt "Contacting BridgeDB. Please Wait.">
+<!-- torlauncher.captcha_prompt=Solve the CAPTCHA to request a bridge. -->
+<!ENTITY torPreferences.requestBridgeDialogSolvePrompt "Solve the CAPTCHA to request a bridge.">
+<!--torlauncher.bad_captcha_solution=The solution is not correct. Please try again.-->
+<!ENTITY torPreferences.requestBridgeErrorBadSolution "The solution is not correct. Please try again.">
+<!ENTITY torPreferences.viewTorLogs "View the Tor logs.">
+<!ENTITY torPreferences.viewLogs "View Logs&#x2026;">
+<!ENTITY torPreferences.torLogsDialogTitle "Tor Logs">
diff --git a/src/chrome/locale/da/network-settings.dtd b/src/chrome/locale/da/network-settings.dtd
index 52f89be..9cde33f 100644
--- a/src/chrome/locale/da/network-settings.dtd
+++ b/src/chrome/locale/da/network-settings.dtd
@@ -26,17 +26,23 @@
<!ENTITY torsettings.optional "Valgfri">
<!ENTITY torsettings.useProxy.checkbox "Jeg bruger en proxy til at oprette forbindelse til internettet">
+<!-- TODO: remove colon-->
<!ENTITY torsettings.useProxy.type "Proxytype:">
<!ENTITY torsettings.useProxy.type.placeholder "vælg en proxytype">
+<!-- TODO: remove colon-->
<!ENTITY torsettings.useProxy.address "Adresse:">
<!ENTITY torsettings.useProxy.address.placeholder "IP-adresse eller værtsnavn">
+<!-- TODO: remove colon-->
<!ENTITY torsettings.useProxy.port "Port:">
+<!-- TODO: remove colon-->
<!ENTITY torsettings.useProxy.username "Brugernavn:">
+<!-- TODO: remove colon-->
<!ENTITY torsettings.useProxy.password "Adgangskode:">
<!ENTITY torsettings.useProxy.type.socks4 "SOCKS 4">
<!ENTITY torsettings.useProxy.type.socks5 "SOCKS 5">
<!ENTITY torsettings.useProxy.type.http "HTTP/HTTPS">
<!ENTITY torsettings.firewall.checkbox "Computeren går gennem en firewall som kun tillader forbindelse til bestemte porte">
+<!-- TODO: remove colon-->
<!ENTITY torsettings.firewall.allowedPorts "Tilladte porte:">
<!ENTITY torsettings.useBridges.checkbox "Tor er censureret i mit land">
<!ENTITY torsettings.useBridges.default "Vælg en indbygget bro">
@@ -60,3 +66,28 @@
<!-- Progress -->
<!ENTITY torprogress.pleaseWait "Vent venligst mens der etableres forbindelse til Tor-netværket.  Det kan tage flere minutter.">
+
+<!-- #31286 about:preferences strings -->
+<!ENTITY torPreferences.categoryTitle "Tor">
+<!ENTITY torPreferences.torSettings "Tor Settings">
+<!ENTITY torPreferences.torSettingsDescription "Tor Browser routes your traffic over the Tor Network, run by thousands of volunteers around the world." >
+<!ENTITY torPreferences.learnMore "Læs mere">
+<!ENTITY torPreferences.bridges "Broer">
+<!ENTITY torPreferences.bridgesDescription "Bridges help you access the Tor Network in places where Tor is blocked. Depending on where you are, one bridge may work better than another.">
+<!ENTITY torPreferences.useBridge "Use a bridge">
+<!-- torlauncher.request_a_new_bridge -->
+<!ENTITY torPreferences.requestNewBridge "Request a New Bridge&#x2026;">
+<!ENTITY torPreferences.provideBridge "Provide a bridge">
+<!ENTITY torPreferences.advanced "Avanceret">
+<!ENTITY torPreferences.advancedDescription "Configure how Tor Browser connects to the internet.">
+<!ENTITY torPreferences.firewallPortsPlaceholder "Comma-separated values">
+<!ENTITY torPreferences.requestBridgeDialogTitle "Request Bridge">
+<!-- torlauncher.contacting_bridgedb=Contacting BridgeDB. Please wait. -->
+<!ENTITY torPreferences.requestBridgeDialogWaitPrompt "Contacting BridgeDB. Please Wait.">
+<!-- torlauncher.captcha_prompt=Solve the CAPTCHA to request a bridge. -->
+<!ENTITY torPreferences.requestBridgeDialogSolvePrompt "Løs CAPTCHA'en for at anmode om en bro.">
+<!--torlauncher.bad_captcha_solution=The solution is not correct. Please try again.-->
+<!ENTITY torPreferences.requestBridgeErrorBadSolution "Løsningen er ikke korrekt. Prøv venligst igen.">
+<!ENTITY torPreferences.viewTorLogs "View the Tor logs.">
+<!ENTITY torPreferences.viewLogs "View Logs&#x2026;">
+<!ENTITY torPreferences.torLogsDialogTitle "Tor Logs">
diff --git a/src/chrome/locale/de/network-settings.dtd b/src/chrome/locale/de/network-settings.dtd
index ae68303..33e1bf4 100644
--- a/src/chrome/locale/de/network-settings.dtd
+++ b/src/chrome/locale/de/network-settings.dtd
@@ -26,17 +26,23 @@
<!ENTITY torsettings.optional "Optional">
<!ENTITY torsettings.useProxy.checkbox "Ich benutze einen Proxy, um mich mit dem Internet zu verbinden">
+<!-- TODO: remove colon-->
<!ENTITY torsettings.useProxy.type "Proxy-Typ:">
<!ENTITY torsettings.useProxy.type.placeholder "Proxy-Typ auswählen">
+<!-- TODO: remove colon-->
<!ENTITY torsettings.useProxy.address "Adresse:">
<!ENTITY torsettings.useProxy.address.placeholder "IP-Adresse oder Rechnername">
+<!-- TODO: remove colon-->
<!ENTITY torsettings.useProxy.port "Anschluss:">
+<!-- TODO: remove colon-->
<!ENTITY torsettings.useProxy.username "Nutzername:">
+<!-- TODO: remove colon-->
<!ENTITY torsettings.useProxy.password "Passwort:">
<!ENTITY torsettings.useProxy.type.socks4 "SOCKS 4">
<!ENTITY torsettings.useProxy.type.socks5 "SOCKS 5">
<!ENTITY torsettings.useProxy.type.http "HTTP / HTTPS">
<!ENTITY torsettings.firewall.checkbox "Die Verbindung dieses Rechner geht durch eine Firewall, die nur bestimmte Anschlüsse zulässt">
+<!-- TODO: remove colon-->
<!ENTITY torsettings.firewall.allowedPorts "Erlaubte Anschlüsse:">
<!ENTITY torsettings.useBridges.checkbox "Tor wird in meinem Land blockiert.">
<!ENTITY torsettings.useBridges.default "Bereitgestellte Brücke auswählen">
@@ -60,3 +66,28 @@
<!-- Progress -->
<!ENTITY torprogress.pleaseWait "Bitte warten Sie, während eine Verbindung zum Tor-Netzwerk hergestellt wird.  Das kann einige Minuten dauern.">
+
+<!-- #31286 about:preferences strings -->
+<!ENTITY torPreferences.categoryTitle "Tor">
+<!ENTITY torPreferences.torSettings "Tor Settings">
+<!ENTITY torPreferences.torSettingsDescription "Tor Browser routes your traffic over the Tor Network, run by thousands of volunteers around the world." >
+<!ENTITY torPreferences.learnMore "Mehr erfahren">
+<!ENTITY torPreferences.bridges "Brücken">
+<!ENTITY torPreferences.bridgesDescription "Bridges help you access the Tor Network in places where Tor is blocked. Depending on where you are, one bridge may work better than another.">
+<!ENTITY torPreferences.useBridge "Use a bridge">
+<!-- torlauncher.request_a_new_bridge -->
+<!ENTITY torPreferences.requestNewBridge "Request a New Bridge&#x2026;">
+<!ENTITY torPreferences.provideBridge "Provide a bridge">
+<!ENTITY torPreferences.advanced "Fortgeschritten">
+<!ENTITY torPreferences.advancedDescription "Configure how Tor Browser connects to the internet.">
+<!ENTITY torPreferences.firewallPortsPlaceholder "Comma-separated values">
+<!ENTITY torPreferences.requestBridgeDialogTitle "Request Bridge">
+<!-- torlauncher.contacting_bridgedb=Contacting BridgeDB. Please wait. -->
+<!ENTITY torPreferences.requestBridgeDialogWaitPrompt "Contacting BridgeDB. Please Wait.">
+<!-- torlauncher.captcha_prompt=Solve the CAPTCHA to request a bridge. -->
+<!ENTITY torPreferences.requestBridgeDialogSolvePrompt "Löse das CAPTCHA, um eine Brücke anzufordern.">
+<!--torlauncher.bad_captcha_solution=The solution is not correct. Please try again.-->
+<!ENTITY torPreferences.requestBridgeErrorBadSolution "Die Lösung ist nicht korrekt. Bitte versuchen Sie es erneut.">
+<!ENTITY torPreferences.viewTorLogs "View the Tor logs.">
+<!ENTITY torPreferences.viewLogs "View Logs&#x2026;">
+<!ENTITY torPreferences.torLogsDialogTitle "Tor Logs">
diff --git a/src/chrome/locale/el/network-settings.dtd b/src/chrome/locale/el/network-settings.dtd
index a5b525b..740406b 100644
--- a/src/chrome/locale/el/network-settings.dtd
+++ b/src/chrome/locale/el/network-settings.dtd
@@ -26,17 +26,23 @@
<!ENTITY torsettings.optional "Προεραιτικα">
<!ENTITY torsettings.useProxy.checkbox "Χρησιμοποιώ διακομιστή μεσολάβησης για να συνδεθώ στο ίντερνετ.">
+<!-- TODO: remove colon-->
<!ENTITY torsettings.useProxy.type "Τύπος διακομιστή μεσολάβησης:">
<!ENTITY torsettings.useProxy.type.placeholder "Επιλέξτε τύπο διακομιστή μεσολάβησης.">
+<!-- TODO: remove colon-->
<!ENTITY torsettings.useProxy.address "Διεύθυνση:">
<!ENTITY torsettings.useProxy.address.placeholder "Διεύθυνση ΙΡ η όνομα υπολογιστή ">
+<!-- TODO: remove colon-->
<!ENTITY torsettings.useProxy.port "Θύρα συστήματος:">
+<!-- TODO: remove colon-->
<!ENTITY torsettings.useProxy.username "Όνομα Χρήστη:">
+<!-- TODO: remove colon-->
<!ENTITY torsettings.useProxy.password "Κωδικός:">
<!ENTITY torsettings.useProxy.type.socks4 "SOCKS 4">
<!ENTITY torsettings.useProxy.type.socks5 "SOCKS 5">
<!ENTITY torsettings.useProxy.type.http "HTTP / HTTPS">
<!ENTITY torsettings.firewall.checkbox "Το τείχος προστασίας μου με αφήνει να συνδέομαι μόνο σε συγκεκριμένες θύρες συστήματος">
+<!-- TODO: remove colon-->
<!ENTITY torsettings.firewall.allowedPorts "Επιτρεπόμενες Θύρες:">
<!ENTITY torsettings.useBridges.checkbox "Ο Tor είναι αποκλεισμένος στη χώρα μου">
<!ENTITY torsettings.useBridges.default "Επιλέξτε ένα ενταγμένο bridge">
@@ -60,3 +66,28 @@
<!-- Progress -->
<!ENTITY torprogress.pleaseWait "Παρακαλώ περιμένετε καθώς δημιουργούμε σύνδεση στο δίκτυο Tor.  Αυτό μπορεί να πάρει μερικά λεπτά.">
+
+<!-- #31286 about:preferences strings -->
+<!ENTITY torPreferences.categoryTitle "Tor">
+<!ENTITY torPreferences.torSettings "Tor Settings">
+<!ENTITY torPreferences.torSettingsDescription "Tor Browser routes your traffic over the Tor Network, run by thousands of volunteers around the world." >
+<!ENTITY torPreferences.learnMore "Μάθετε περισσότερα">
+<!ENTITY torPreferences.bridges "Γέφυρες">
+<!ENTITY torPreferences.bridgesDescription "Bridges help you access the Tor Network in places where Tor is blocked. Depending on where you are, one bridge may work better than another.">
+<!ENTITY torPreferences.useBridge "Use a bridge">
+<!-- torlauncher.request_a_new_bridge -->
+<!ENTITY torPreferences.requestNewBridge "Request a New Bridge&#x2026;">
+<!ENTITY torPreferences.provideBridge "Provide a bridge">
+<!ENTITY torPreferences.advanced "Ρυθμίσεις για προχωρημένους">
+<!ENTITY torPreferences.advancedDescription "Configure how Tor Browser connects to the internet.">
+<!ENTITY torPreferences.firewallPortsPlaceholder "Comma-separated values">
+<!ENTITY torPreferences.requestBridgeDialogTitle "Request Bridge">
+<!-- torlauncher.contacting_bridgedb=Contacting BridgeDB. Please wait. -->
+<!ENTITY torPreferences.requestBridgeDialogWaitPrompt "Contacting BridgeDB. Please Wait.">
+<!-- torlauncher.captcha_prompt=Solve the CAPTCHA to request a bridge. -->
+<!ENTITY torPreferences.requestBridgeDialogSolvePrompt "Λύστε το CAPTCHA για να ζητήσετε γέφυρα.">
+<!--torlauncher.bad_captcha_solution=The solution is not correct. Please try again.-->
+<!ENTITY torPreferences.requestBridgeErrorBadSolution "Η λύση δεν είναι σωστή. Παρακαλώ προσπαθήστε ξανά.">
+<!ENTITY torPreferences.viewTorLogs "View the Tor logs.">
+<!ENTITY torPreferences.viewLogs "View Logs&#x2026;">
+<!ENTITY torPreferences.torLogsDialogTitle "Tor Logs">
diff --git a/src/chrome/locale/eo/network-settings.dtd b/src/chrome/locale/eo/network-settings.dtd
index 5bca622..123b293 100644
--- a/src/chrome/locale/eo/network-settings.dtd
+++ b/src/chrome/locale/eo/network-settings.dtd
@@ -26,17 +26,23 @@
<!ENTITY torsettings.optional "Optional">
<!ENTITY torsettings.useProxy.checkbox "I use a proxy to connect to the Internet">
+<!-- TODO: remove colon-->
<!ENTITY torsettings.useProxy.type "Proxy Type:">
<!ENTITY torsettings.useProxy.type.placeholder "select a proxy type">
+<!-- TODO: remove colon-->
<!ENTITY torsettings.useProxy.address "Adreso:">
<!ENTITY torsettings.useProxy.address.placeholder "IP address or hostname">
+<!-- TODO: remove colon-->
<!ENTITY torsettings.useProxy.port "Pordo:">
+<!-- TODO: remove colon-->
<!ENTITY torsettings.useProxy.username "Username:">
+<!-- TODO: remove colon-->
<!ENTITY torsettings.useProxy.password "Pasvorto:">
<!ENTITY torsettings.useProxy.type.socks4 "SOCKS 4">
<!ENTITY torsettings.useProxy.type.socks5 "SOCKS 5">
<!ENTITY torsettings.useProxy.type.http "HTTP / HTTPS">
<!ENTITY torsettings.firewall.checkbox "This computer goes through a firewall that only allows connections to certain ports">
+<!-- TODO: remove colon-->
<!ENTITY torsettings.firewall.allowedPorts "Allowed Ports:">
<!ENTITY torsettings.useBridges.checkbox "Tor is censored in my country">
<!ENTITY torsettings.useBridges.default "Select a built-in bridge">
@@ -60,3 +66,28 @@
<!-- Progress -->
<!ENTITY torprogress.pleaseWait "Please wait while we establish a connection to the Tor network.  This may take several minutes.">
+
+<!-- #31286 about:preferences strings -->
+<!ENTITY torPreferences.categoryTitle "Toro">
+<!ENTITY torPreferences.torSettings "Tor Settings">
+<!ENTITY torPreferences.torSettingsDescription "Tor Browser routes your traffic over the Tor Network, run by thousands of volunteers around the world." >
+<!ENTITY torPreferences.learnMore "Learn More">
+<!ENTITY torPreferences.bridges "Pontoj">
+<!ENTITY torPreferences.bridgesDescription "Bridges help you access the Tor Network in places where Tor is blocked. Depending on where you are, one bridge may work better than another.">
+<!ENTITY torPreferences.useBridge "Use a bridge">
+<!-- torlauncher.request_a_new_bridge -->
+<!ENTITY torPreferences.requestNewBridge "Request a New Bridge&#x2026;">
+<!ENTITY torPreferences.provideBridge "Provide a bridge">
+<!ENTITY torPreferences.advanced "Altnivela">
+<!ENTITY torPreferences.advancedDescription "Configure how Tor Browser connects to the internet.">
+<!ENTITY torPreferences.firewallPortsPlaceholder "Comma-separated values">
+<!ENTITY torPreferences.requestBridgeDialogTitle "Request Bridge">
+<!-- torlauncher.contacting_bridgedb=Contacting BridgeDB. Please wait. -->
+<!ENTITY torPreferences.requestBridgeDialogWaitPrompt "Contacting BridgeDB. Please Wait.">
+<!-- torlauncher.captcha_prompt=Solve the CAPTCHA to request a bridge. -->
+<!ENTITY torPreferences.requestBridgeDialogSolvePrompt "Solve the CAPTCHA to request a bridge.">
+<!--torlauncher.bad_captcha_solution=The solution is not correct. Please try again.-->
+<!ENTITY torPreferences.requestBridgeErrorBadSolution "The solution is not correct. Please try again.">
+<!ENTITY torPreferences.viewTorLogs "View the Tor logs.">
+<!ENTITY torPreferences.viewLogs "View Logs&#x2026;">
+<!ENTITY torPreferences.torLogsDialogTitle "Tor Logs">
diff --git a/src/chrome/locale/es-AR/network-settings.dtd b/src/chrome/locale/es-AR/network-settings.dtd
index d9b8996..b5c9a4d 100644
--- a/src/chrome/locale/es-AR/network-settings.dtd
+++ b/src/chrome/locale/es-AR/network-settings.dtd
@@ -26,17 +26,23 @@
<!ENTITY torsettings.optional "Opcional">
<!ENTITY torsettings.useProxy.checkbox "Uso un proxy para conectar a Internet">
+<!-- TODO: remove colon-->
<!ENTITY torsettings.useProxy.type "Tipo de proxy:">
<!ENTITY torsettings.useProxy.type.placeholder "seleccioná un tipo de proxy">
+<!-- TODO: remove colon-->
<!ENTITY torsettings.useProxy.address "Dirección:">
<!ENTITY torsettings.useProxy.address.placeholder "Dirección IP o nombre de equipo">
+<!-- TODO: remove colon-->
<!ENTITY torsettings.useProxy.port "Puerto:">
+<!-- TODO: remove colon-->
<!ENTITY torsettings.useProxy.username "Usuario:">
+<!-- TODO: remove colon-->
<!ENTITY torsettings.useProxy.password "Contraseña:">
<!ENTITY torsettings.useProxy.type.socks4 "SOCKS 4">
<!ENTITY torsettings.useProxy.type.socks5 "SOCKS 5">
<!ENTITY torsettings.useProxy.type.http "HTTP / HTTPS">
<!ENTITY torsettings.firewall.checkbox "Esta computadora pasa a través de un cortafuegos que sólo permite conexiones a ciertos puertos">
+<!-- TODO: remove colon-->
<!ENTITY torsettings.firewall.allowedPorts "Puerto permitidos:">
<!ENTITY torsettings.useBridges.checkbox "Tor está censurado en mi país">
<!ENTITY torsettings.useBridges.default "Seleccioná un puente incorporado">
@@ -60,3 +66,28 @@
<!-- Progress -->
<!ENTITY torprogress.pleaseWait "Por favor, esperá mientras establecemos una conexión a la red de Tor.  Puede tardar varios minutos.">
+
+<!-- #31286 about:preferences strings -->
+<!ENTITY torPreferences.categoryTitle "Tor">
+<!ENTITY torPreferences.torSettings "Tor Settings">
+<!ENTITY torPreferences.torSettingsDescription "Tor Browser routes your traffic over the Tor Network, run by thousands of volunteers around the world." >
+<!ENTITY torPreferences.learnMore "Aprendé más">
+<!ENTITY torPreferences.bridges "Puentes">
+<!ENTITY torPreferences.bridgesDescription "Bridges help you access the Tor Network in places where Tor is blocked. Depending on where you are, one bridge may work better than another.">
+<!ENTITY torPreferences.useBridge "Use a bridge">
+<!-- torlauncher.request_a_new_bridge -->
+<!ENTITY torPreferences.requestNewBridge "Request a New Bridge&#x2026;">
+<!ENTITY torPreferences.provideBridge "Provide a bridge">
+<!ENTITY torPreferences.advanced "Advanced">
+<!ENTITY torPreferences.advancedDescription "Configure how Tor Browser connects to the internet.">
+<!ENTITY torPreferences.firewallPortsPlaceholder "Comma-separated values">
+<!ENTITY torPreferences.requestBridgeDialogTitle "Request Bridge">
+<!-- torlauncher.contacting_bridgedb=Contacting BridgeDB. Please wait. -->
+<!ENTITY torPreferences.requestBridgeDialogWaitPrompt "Contacting BridgeDB. Please Wait.">
+<!-- torlauncher.captcha_prompt=Solve the CAPTCHA to request a bridge. -->
+<!ENTITY torPreferences.requestBridgeDialogSolvePrompt "Solucioná el CAPTCHA para solicitar un puente.">
+<!--torlauncher.bad_captcha_solution=The solution is not correct. Please try again.-->
+<!ENTITY torPreferences.requestBridgeErrorBadSolution "La solución no es correcta. Por favor intentá de nuevo.">
+<!ENTITY torPreferences.viewTorLogs "View the Tor logs.">
+<!ENTITY torPreferences.viewLogs "View Logs&#x2026;">
+<!ENTITY torPreferences.torLogsDialogTitle "Tor Logs">
diff --git a/src/chrome/locale/es-MX/network-settings.dtd b/src/chrome/locale/es-MX/network-settings.dtd
index 55a4949..02fef62 100644
--- a/src/chrome/locale/es-MX/network-settings.dtd
+++ b/src/chrome/locale/es-MX/network-settings.dtd
@@ -26,17 +26,23 @@
<!ENTITY torsettings.optional "Opcional">
<!ENTITY torsettings.useProxy.checkbox "I use a proxy to connect to the Internet">
+<!-- TODO: remove colon-->
<!ENTITY torsettings.useProxy.type "Proxy Type:">
<!ENTITY torsettings.useProxy.type.placeholder "select a proxy type">
+<!-- TODO: remove colon-->
<!ENTITY torsettings.useProxy.address "Address:">
<!ENTITY torsettings.useProxy.address.placeholder "IP address or hostname">
+<!-- TODO: remove colon-->
<!ENTITY torsettings.useProxy.port "Puerto:">
+<!-- TODO: remove colon-->
<!ENTITY torsettings.useProxy.username "Username:">
+<!-- TODO: remove colon-->
<!ENTITY torsettings.useProxy.password "Contraseña:">
<!ENTITY torsettings.useProxy.type.socks4 "SOCKS 4">
<!ENTITY torsettings.useProxy.type.socks5 "SOCKS 5">
<!ENTITY torsettings.useProxy.type.http "HTTP / HTTPS">
<!ENTITY torsettings.firewall.checkbox "This computer goes through a firewall that only allows connections to certain ports">
+<!-- TODO: remove colon-->
<!ENTITY torsettings.firewall.allowedPorts "Allowed Ports:">
<!ENTITY torsettings.useBridges.checkbox "Tor is censored in my country">
<!ENTITY torsettings.useBridges.default "Select a built-in bridge">
@@ -60,3 +66,28 @@
<!-- Progress -->
<!ENTITY torprogress.pleaseWait "Por favor, espera mientras establecemos una conexión con Tor network.  Esto puede llevar varios minutos.">
+
+<!-- #31286 about:preferences strings -->
+<!ENTITY torPreferences.categoryTitle "Tor">
+<!ENTITY torPreferences.torSettings "Tor Settings">
+<!ENTITY torPreferences.torSettingsDescription "Tor Browser routes your traffic over the Tor Network, run by thousands of volunteers around the world." >
+<!ENTITY torPreferences.learnMore "Learn More">
+<!ENTITY torPreferences.bridges "Puentes">
+<!ENTITY torPreferences.bridgesDescription "Bridges help you access the Tor Network in places where Tor is blocked. Depending on where you are, one bridge may work better than another.">
+<!ENTITY torPreferences.useBridge "Use a bridge">
+<!-- torlauncher.request_a_new_bridge -->
+<!ENTITY torPreferences.requestNewBridge "Request a New Bridge&#x2026;">
+<!ENTITY torPreferences.provideBridge "Provide a bridge">
+<!ENTITY torPreferences.advanced "Advanced">
+<!ENTITY torPreferences.advancedDescription "Configure how Tor Browser connects to the internet.">
+<!ENTITY torPreferences.firewallPortsPlaceholder "Comma-separated values">
+<!ENTITY torPreferences.requestBridgeDialogTitle "Request Bridge">
+<!-- torlauncher.contacting_bridgedb=Contacting BridgeDB. Please wait. -->
+<!ENTITY torPreferences.requestBridgeDialogWaitPrompt "Contacting BridgeDB. Please Wait.">
+<!-- torlauncher.captcha_prompt=Solve the CAPTCHA to request a bridge. -->
+<!ENTITY torPreferences.requestBridgeDialogSolvePrompt "Solve the CAPTCHA to request a bridge.">
+<!--torlauncher.bad_captcha_solution=The solution is not correct. Please try again.-->
+<!ENTITY torPreferences.requestBridgeErrorBadSolution "The solution is not correct. Please try again.">
+<!ENTITY torPreferences.viewTorLogs "View the Tor logs.">
+<!ENTITY torPreferences.viewLogs "View Logs&#x2026;">
+<!ENTITY torPreferences.torLogsDialogTitle "Tor Logs">
diff --git a/src/chrome/locale/es/network-settings.dtd b/src/chrome/locale/es/network-settings.dtd
index 9949f21..e8c1793 100644
--- a/src/chrome/locale/es/network-settings.dtd
+++ b/src/chrome/locale/es/network-settings.dtd
@@ -26,17 +26,23 @@
<!ENTITY torsettings.optional "Opcional">
<!ENTITY torsettings.useProxy.checkbox "Utilizo un proxy para conectar a Internet.">
+<!-- TODO: remove colon-->
<!ENTITY torsettings.useProxy.type "Tipo de proxy:">
<!ENTITY torsettings.useProxy.type.placeholder "seleccionar un tipo de proxy">
+<!-- TODO: remove colon-->
<!ENTITY torsettings.useProxy.address "Dirección:">
<!ENTITY torsettings.useProxy.address.placeholder "Dirección IP o nombre de máquina (host)">
+<!-- TODO: remove colon-->
<!ENTITY torsettings.useProxy.port "Puerto:">
+<!-- TODO: remove colon-->
<!ENTITY torsettings.useProxy.username "Nombre de usuario:">
+<!-- TODO: remove colon-->
<!ENTITY torsettings.useProxy.password "Contraseña:">
<!ENTITY torsettings.useProxy.type.socks4 "SOCKS 4">
<!ENTITY torsettings.useProxy.type.socks5 "SOCKS 5">
<!ENTITY torsettings.useProxy.type.http "HTTP / HTTPS">
<!ENTITY torsettings.firewall.checkbox "Esta computadora va a través de un cortafuegos(firewall) que sólo permite conexiones a ciertos puertos">
+<!-- TODO: remove colon-->
<!ENTITY torsettings.firewall.allowedPorts "Puertos permitidos:">
<!ENTITY torsettings.useBridges.checkbox "En mi país se censura a Tor">
<!ENTITY torsettings.useBridges.default "Seleccionar un puente construido">
@@ -60,3 +66,28 @@
<!-- Progress -->
<!ENTITY torprogress.pleaseWait "Espera mientras establecemos una conexión a la red Tor.  Esto puede durar varios minutos.">
+
+<!-- #31286 about:preferences strings -->
+<!ENTITY torPreferences.categoryTitle "Tor">
+<!ENTITY torPreferences.torSettings "Configuración de Tor">
+<!ENTITY torPreferences.torSettingsDescription "El Navegador Tor enruta tu tráfico a través de la Red Tor, ejecutada por miles de voluntarios alrededor del mundo." >
+<!ENTITY torPreferences.learnMore "Más información">
+<!ENTITY torPreferences.bridges "Puentes">
+<!ENTITY torPreferences.bridgesDescription "Los puentes te ayudan a acceder a la Red Tor en lugares donde Tor está bloqueado. Dependiendo de dónde te encuentres, un puente puede funcionar mejor que otro.">
+<!ENTITY torPreferences.useBridge "Usa un puente">
+<!-- torlauncher.request_a_new_bridge -->
+<!ENTITY torPreferences.requestNewBridge "Solicite un Nuevo Puente&#x2026;">
+<!ENTITY torPreferences.provideBridge "Proporcionar un puente">
+<!ENTITY torPreferences.advanced "Avanzado">
+<!ENTITY torPreferences.advancedDescription "Configura cómo el Navegador Tor se conecta a Internet.">
+<!ENTITY torPreferences.firewallPortsPlaceholder "Valores separados por comas">
+<!ENTITY torPreferences.requestBridgeDialogTitle "Solicitar Puente">
+<!-- torlauncher.contacting_bridgedb=Contacting BridgeDB. Please wait. -->
+<!ENTITY torPreferences.requestBridgeDialogWaitPrompt "Contactando con BridgeDB. Espera por favor.">
+<!-- torlauncher.captcha_prompt=Solve the CAPTCHA to request a bridge. -->
+<!ENTITY torPreferences.requestBridgeDialogSolvePrompt "Resuelve el CAPTCHA para solicitar un puente.">
+<!--torlauncher.bad_captcha_solution=The solution is not correct. Please try again.-->
+<!ENTITY torPreferences.requestBridgeErrorBadSolution "La solución no es correcta. Por favor, inténtalo de nuevo.">
+<!ENTITY torPreferences.viewTorLogs "Ver los registros de Tor.">
+<!ENTITY torPreferences.viewLogs "Ver registros&#x2026;">
+<!ENTITY torPreferences.torLogsDialogTitle "Registros de Tor">
diff --git a/src/chrome/locale/et/network-settings.dtd b/src/chrome/locale/et/network-settings.dtd
index 8a23e11..e4f9b2e 100644
--- a/src/chrome/locale/et/network-settings.dtd
+++ b/src/chrome/locale/et/network-settings.dtd
@@ -26,17 +26,23 @@
<!ENTITY torsettings.optional "Valikuline">
<!ENTITY torsettings.useProxy.checkbox "Ma kasutan proksit et ühenduda internetti">
+<!-- TODO: remove colon-->
<!ENTITY torsettings.useProxy.type "Proksi tüüp:">
<!ENTITY torsettings.useProxy.type.placeholder "valige proksi tüüp">
+<!-- TODO: remove colon-->
<!ENTITY torsettings.useProxy.address "Aadress:">
<!ENTITY torsettings.useProxy.address.placeholder "IP aadress või haldaja nimi">
+<!-- TODO: remove colon-->
<!ENTITY torsettings.useProxy.port "Port:">
+<!-- TODO: remove colon-->
<!ENTITY torsettings.useProxy.username "Kasutajanimi:">
+<!-- TODO: remove colon-->
<!ENTITY torsettings.useProxy.password "Parool:">
<!ENTITY torsettings.useProxy.type.socks4 "SOCKS 4">
<!ENTITY torsettings.useProxy.type.socks5 "SOCKS 5">
<!ENTITY torsettings.useProxy.type.http "HTTP / HTTPS">
<!ENTITY torsettings.firewall.checkbox "See arvuti läheb läbi tulemüüri mis lubab ainult ühendusi kindlatesse portidesse.">
+<!-- TODO: remove colon-->
<!ENTITY torsettings.firewall.allowedPorts "Lubatud pordid:">
<!ENTITY torsettings.useBridges.checkbox "Tor on minu riigis tsensoreeritud">
<!ENTITY torsettings.useBridges.default "Valige sisseehitatud sild">
@@ -60,3 +66,28 @@
<!-- Progress -->
<!ENTITY torprogress.pleaseWait "Palun oodake kuni loome ühenduse Tor\'i võrguga.  See võib võtta mitu minutit.">
+
+<!-- #31286 about:preferences strings -->
+<!ENTITY torPreferences.categoryTitle "Tor">
+<!ENTITY torPreferences.torSettings "Tor Settings">
+<!ENTITY torPreferences.torSettingsDescription "Tor Browser routes your traffic over the Tor Network, run by thousands of volunteers around the world." >
+<!ENTITY torPreferences.learnMore "Loe lähemalt">
+<!ENTITY torPreferences.bridges "Sillad">
+<!ENTITY torPreferences.bridgesDescription "Bridges help you access the Tor Network in places where Tor is blocked. Depending on where you are, one bridge may work better than another.">
+<!ENTITY torPreferences.useBridge "Use a bridge">
+<!-- torlauncher.request_a_new_bridge -->
+<!ENTITY torPreferences.requestNewBridge "Request a New Bridge&#x2026;">
+<!ENTITY torPreferences.provideBridge "Provide a bridge">
+<!ENTITY torPreferences.advanced "Peenhäälestus">
+<!ENTITY torPreferences.advancedDescription "Configure how Tor Browser connects to the internet.">
+<!ENTITY torPreferences.firewallPortsPlaceholder "Comma-separated values">
+<!ENTITY torPreferences.requestBridgeDialogTitle "Request Bridge">
+<!-- torlauncher.contacting_bridgedb=Contacting BridgeDB. Please wait. -->
+<!ENTITY torPreferences.requestBridgeDialogWaitPrompt "Contacting BridgeDB. Please Wait.">
+<!-- torlauncher.captcha_prompt=Solve the CAPTCHA to request a bridge. -->
+<!ENTITY torPreferences.requestBridgeDialogSolvePrompt "Lahenda CAPTCHA, et taotleda silda.">
+<!--torlauncher.bad_captcha_solution=The solution is not correct. Please try again.-->
+<!ENTITY torPreferences.requestBridgeErrorBadSolution "The solution is not correct. Please try again.">
+<!ENTITY torPreferences.viewTorLogs "View the Tor logs.">
+<!ENTITY torPreferences.viewLogs "View Logs&#x2026;">
+<!ENTITY torPreferences.torLogsDialogTitle "Tor Logs">
diff --git a/src/chrome/locale/eu/network-settings.dtd b/src/chrome/locale/eu/network-settings.dtd
index fc45f6b..e04cc7e 100644
--- a/src/chrome/locale/eu/network-settings.dtd
+++ b/src/chrome/locale/eu/network-settings.dtd
@@ -26,17 +26,23 @@
<!ENTITY torsettings.optional "Hautazkoa">
<!ENTITY torsettings.useProxy.checkbox "Proxy bat erabiltzen dut Internetera sartzeko">
+<!-- TODO: remove colon-->
<!ENTITY torsettings.useProxy.type "Proxy mota:">
<!ENTITY torsettings.useProxy.type.placeholder "proxy mota aukeratu">
+<!-- TODO: remove colon-->
<!ENTITY torsettings.useProxy.address "Helbidea:">
<!ENTITY torsettings.useProxy.address.placeholder "IP helbide edo ostalari izena">
+<!-- TODO: remove colon-->
<!ENTITY torsettings.useProxy.port "Ataka:">
+<!-- TODO: remove colon-->
<!ENTITY torsettings.useProxy.username "Erabiltzaile izena:">
+<!-- TODO: remove colon-->
<!ENTITY torsettings.useProxy.password "Pasahitza:">
<!ENTITY torsettings.useProxy.type.socks4 "SOCKS 4">
<!ENTITY torsettings.useProxy.type.socks5 "SOCKS 5">
<!ENTITY torsettings.useProxy.type.http "HTTP / HTTPS">
<!ENTITY torsettings.firewall.checkbox "Ordenagailu honek ataka zehatz batzuetara bakarrik konektatzea baimentzen duen sueten baten zehar doa">
+<!-- TODO: remove colon-->
<!ENTITY torsettings.firewall.allowedPorts "Baimendutako atakak:">
<!ENTITY torsettings.useBridges.checkbox "Tor zentsuratuta dago nire herrialdean">
<!ENTITY torsettings.useBridges.default "Select a built-in bridge">
@@ -60,3 +66,28 @@
<!-- Progress -->
<!ENTITY torprogress.pleaseWait "Mesedez itxaron Tor sarera konexioa ezartzen dugun bitartean.  Honek minutu batzuk har litzake.">
+
+<!-- #31286 about:preferences strings -->
+<!ENTITY torPreferences.categoryTitle "Tor">
+<!ENTITY torPreferences.torSettings "Tor Settings">
+<!ENTITY torPreferences.torSettingsDescription "Tor Browser routes your traffic over the Tor Network, run by thousands of volunteers around the world." >
+<!ENTITY torPreferences.learnMore "Ikasi gehiago">
+<!ENTITY torPreferences.bridges "Zubiak">
+<!ENTITY torPreferences.bridgesDescription "Bridges help you access the Tor Network in places where Tor is blocked. Depending on where you are, one bridge may work better than another.">
+<!ENTITY torPreferences.useBridge "Use a bridge">
+<!-- torlauncher.request_a_new_bridge -->
+<!ENTITY torPreferences.requestNewBridge "Request a New Bridge&#x2026;">
+<!ENTITY torPreferences.provideBridge "Provide a bridge">
+<!ENTITY torPreferences.advanced "Aurreratua">
+<!ENTITY torPreferences.advancedDescription "Configure how Tor Browser connects to the internet.">
+<!ENTITY torPreferences.firewallPortsPlaceholder "Comma-separated values">
+<!ENTITY torPreferences.requestBridgeDialogTitle "Request Bridge">
+<!-- torlauncher.contacting_bridgedb=Contacting BridgeDB. Please wait. -->
+<!ENTITY torPreferences.requestBridgeDialogWaitPrompt "Contacting BridgeDB. Please Wait.">
+<!-- torlauncher.captcha_prompt=Solve the CAPTCHA to request a bridge. -->
+<!ENTITY torPreferences.requestBridgeDialogSolvePrompt "CAPTCHAa ebatzi ezazu zubi bat eskatzeko.">
+<!--torlauncher.bad_captcha_solution=The solution is not correct. Please try again.-->
+<!ENTITY torPreferences.requestBridgeErrorBadSolution "Ebazpena ez da zuzena. Mesedez saiatu berriro.">
+<!ENTITY torPreferences.viewTorLogs "View the Tor logs.">
+<!ENTITY torPreferences.viewLogs "View Logs&#x2026;">
+<!ENTITY torPreferences.torLogsDialogTitle "Tor Logs">
diff --git a/src/chrome/locale/fa/network-settings.dtd b/src/chrome/locale/fa/network-settings.dtd
index dc220d4..89dd4d4 100644
--- a/src/chrome/locale/fa/network-settings.dtd
+++ b/src/chrome/locale/fa/network-settings.dtd
@@ -26,17 +26,23 @@
<!ENTITY torsettings.optional "اختیاری">
<!ENTITY torsettings.useProxy.checkbox "من برای دسترسی به اینترنت از پروکسی استفاده میکنم.">
+<!-- TODO: remove colon-->
<!ENTITY torsettings.useProxy.type "نوع پراکسی:">
<!ENTITY torsettings.useProxy.type.placeholder "یک نوع پروکسی را انتخاب کنید">
+<!-- TODO: remove colon-->
<!ENTITY torsettings.useProxy.address "آدرس:">
<!ENTITY torsettings.useProxy.address.placeholder "آدرس آیپی یا نام میزبان">
+<!-- TODO: remove colon-->
<!ENTITY torsettings.useProxy.port "پورت:">
+<!-- TODO: remove colon-->
<!ENTITY torsettings.useProxy.username "نام کاربری:">
+<!-- TODO: remove colon-->
<!ENTITY torsettings.useProxy.password "رمز عبور">
<!ENTITY torsettings.useProxy.type.socks4 "ساکس ۴">
<!ENTITY torsettings.useProxy.type.socks5 "ساکس ۵">
<!ENTITY torsettings.useProxy.type.http "HTTP / HTTPS">
<!ENTITY torsettings.firewall.checkbox "به نظر می رسد شبکه ارتباطی شما به اینترنت، از یک فایروال استفاده می کند. یعنی فقط اجازه اتصال از یک سری درگاه های به خصوص را می دهد.">
+<!-- TODO: remove colon-->
<!ENTITY torsettings.firewall.allowedPorts "پورت های مجاز:">
<!ENTITY torsettings.useBridges.checkbox "تور در کشور من فیلتر یا سانسور شده است">
<!ENTITY torsettings.useBridges.default "پل ساخته شده را انتخاب کنید">
@@ -60,3 +66,28 @@
<!-- Progress -->
<!ENTITY torprogress.pleaseWait "لطفا صبر کنید. در حال برقراری ارتباط با شبکه تٌر.&160; این پروسه ممکن است چند دقیقه به طول بینجامد.">
+
+<!-- #31286 about:preferences strings -->
+<!ENTITY torPreferences.categoryTitle "Tor">
+<!ENTITY torPreferences.torSettings "Tor Settings">
+<!ENTITY torPreferences.torSettingsDescription "Tor Browser routes your traffic over the Tor Network, run by thousands of volunteers around the world." >
+<!ENTITY torPreferences.learnMore "بیشتر بدانید">
+<!ENTITY torPreferences.bridges "پل ها">
+<!ENTITY torPreferences.bridgesDescription "Bridges help you access the Tor Network in places where Tor is blocked. Depending on where you are, one bridge may work better than another.">
+<!ENTITY torPreferences.useBridge "Use a bridge">
+<!-- torlauncher.request_a_new_bridge -->
+<!ENTITY torPreferences.requestNewBridge "Request a New Bridge&#x2026;">
+<!ENTITY torPreferences.provideBridge "Provide a bridge">
+<!ENTITY torPreferences.advanced "پیشرفته ">
+<!ENTITY torPreferences.advancedDescription "Configure how Tor Browser connects to the internet.">
+<!ENTITY torPreferences.firewallPortsPlaceholder "Comma-separated values">
+<!ENTITY torPreferences.requestBridgeDialogTitle "Request Bridge">
+<!-- torlauncher.contacting_bridgedb=Contacting BridgeDB. Please wait. -->
+<!ENTITY torPreferences.requestBridgeDialogWaitPrompt "Contacting BridgeDB. Please Wait.">
+<!-- torlauncher.captcha_prompt=Solve the CAPTCHA to request a bridge. -->
+<!ENTITY torPreferences.requestBridgeDialogSolvePrompt "برای درخواست یک پل کپچا را حل کنید.">
+<!--torlauncher.bad_captcha_solution=The solution is not correct. Please try again.-->
+<!ENTITY torPreferences.requestBridgeErrorBadSolution "راه حل درست نیست. لطفا دوباره تلاش کنید.">
+<!ENTITY torPreferences.viewTorLogs "View the Tor logs.">
+<!ENTITY torPreferences.viewLogs "View Logs&#x2026;">
+<!ENTITY torPreferences.torLogsDialogTitle "Tor Logs">
diff --git a/src/chrome/locale/fi/network-settings.dtd b/src/chrome/locale/fi/network-settings.dtd
index 33de09f..75c4ad3 100644
--- a/src/chrome/locale/fi/network-settings.dtd
+++ b/src/chrome/locale/fi/network-settings.dtd
@@ -26,17 +26,23 @@
<!ENTITY torsettings.optional "Vaihtoehtoinen">
<!ENTITY torsettings.useProxy.checkbox "Käytän välityspalvelinta yhdistääkseni internetiin">
+<!-- TODO: remove colon-->
<!ENTITY torsettings.useProxy.type "Välityspalvelintyyppi:">
<!ENTITY torsettings.useProxy.type.placeholder "valitse välityspalvelintyyppi">
+<!-- TODO: remove colon-->
<!ENTITY torsettings.useProxy.address "Osoite:">
<!ENTITY torsettings.useProxy.address.placeholder "IP-osoite tai palvelinnimi">
+<!-- TODO: remove colon-->
<!ENTITY torsettings.useProxy.port "Portti:">
+<!-- TODO: remove colon-->
<!ENTITY torsettings.useProxy.username "Käyttäjätunnus:">
+<!-- TODO: remove colon-->
<!ENTITY torsettings.useProxy.password "Salasana:">
<!ENTITY torsettings.useProxy.type.socks4 "SOCKS 4">
<!ENTITY torsettings.useProxy.type.socks5 "SOCKS 5">
<!ENTITY torsettings.useProxy.type.http "HTTP / HTTPS">
<!ENTITY torsettings.firewall.checkbox "Tämän tietokoneen palomuuri sallii yhteydet vain tiettyjen porttien kautta">
+<!-- TODO: remove colon-->
<!ENTITY torsettings.firewall.allowedPorts "Sallitut portit:">
<!ENTITY torsettings.useBridges.checkbox "Maani sensuroi Tor'ia">
<!ENTITY torsettings.useBridges.default "Valitse sisäänrakennettu silta">
@@ -61,3 +67,28 @@
<!-- Progress -->
<!ENTITY torprogress.pleaseWait "Odota pieni hetki, kun yhteys TOR-verkostoon luodaan. 
Tässä saattaa kestää muutama minuutti.">
+
+<!-- #31286 about:preferences strings -->
+<!ENTITY torPreferences.categoryTitle "Tor">
+<!ENTITY torPreferences.torSettings "Tor Settings">
+<!ENTITY torPreferences.torSettingsDescription "Tor Browser routes your traffic over the Tor Network, run by thousands of volunteers around the world." >
+<!ENTITY torPreferences.learnMore "Opi lisää">
+<!ENTITY torPreferences.bridges "Sillat">
+<!ENTITY torPreferences.bridgesDescription "Bridges help you access the Tor Network in places where Tor is blocked. Depending on where you are, one bridge may work better than another.">
+<!ENTITY torPreferences.useBridge "Use a bridge">
+<!-- torlauncher.request_a_new_bridge -->
+<!ENTITY torPreferences.requestNewBridge "Request a New Bridge&#x2026;">
+<!ENTITY torPreferences.provideBridge "Provide a bridge">
+<!ENTITY torPreferences.advanced "Lisätietoja">
+<!ENTITY torPreferences.advancedDescription "Configure how Tor Browser connects to the internet.">
+<!ENTITY torPreferences.firewallPortsPlaceholder "Comma-separated values">
+<!ENTITY torPreferences.requestBridgeDialogTitle "Request Bridge">
+<!-- torlauncher.contacting_bridgedb=Contacting BridgeDB. Please wait. -->
+<!ENTITY torPreferences.requestBridgeDialogWaitPrompt "Contacting BridgeDB. Please Wait.">
+<!-- torlauncher.captcha_prompt=Solve the CAPTCHA to request a bridge. -->
+<!ENTITY torPreferences.requestBridgeDialogSolvePrompt "Ratkaise CAPTCHA jotta voit pyytää sillan.">
+<!--torlauncher.bad_captcha_solution=The solution is not correct. Please try again.-->
+<!ENTITY torPreferences.requestBridgeErrorBadSolution "Ratkaisu ei ollut oikein. Yritä uudelleen.">
+<!ENTITY torPreferences.viewTorLogs "View the Tor logs.">
+<!ENTITY torPreferences.viewLogs "View Logs&#x2026;">
+<!ENTITY torPreferences.torLogsDialogTitle "Tor Logs">
diff --git a/src/chrome/locale/fr/network-settings.dtd b/src/chrome/locale/fr/network-settings.dtd
index fd80e04..82a9353 100644
--- a/src/chrome/locale/fr/network-settings.dtd
+++ b/src/chrome/locale/fr/network-settings.dtd
@@ -26,17 +26,23 @@
<!ENTITY torsettings.optional "facultatif">
<!ENTITY torsettings.useProxy.checkbox "J’utilise un mandataire pour accéder à Internet">
+<!-- TODO: remove colon-->
<!ENTITY torsettings.useProxy.type "Type de mandataire :">
<!ENTITY torsettings.useProxy.type.placeholder "sélectionner un type de mandataire">
+<!-- TODO: remove colon-->
<!ENTITY torsettings.useProxy.address "Adresse :">
<!ENTITY torsettings.useProxy.address.placeholder "adresse IP ou nom d’hôte">
+<!-- TODO: remove colon-->
<!ENTITY torsettings.useProxy.port "Port :">
+<!-- TODO: remove colon-->
<!ENTITY torsettings.useProxy.username "Nom d’utilisateur :">
+<!-- TODO: remove colon-->
<!ENTITY torsettings.useProxy.password "Mot de passe :">
<!ENTITY torsettings.useProxy.type.socks4 "SOCKS 4">
<!ENTITY torsettings.useProxy.type.socks5 "SOCKS 5">
<!ENTITY torsettings.useProxy.type.http "HTTP / HTTPS">
<!ENTITY torsettings.firewall.checkbox "Cet ordinateur passe par un pare-feu qui n’autorise que les connexions à certains ports">
+<!-- TODO: remove colon-->
<!ENTITY torsettings.firewall.allowedPorts "Ports autorisés :">
<!ENTITY torsettings.useBridges.checkbox "Tor est censuré dans mon pays">
<!ENTITY torsettings.useBridges.default "Sélectionner un pont intégré">
@@ -60,3 +66,28 @@
<!-- Progress -->
<!ENTITY torprogress.pleaseWait "Veuillez patienter pendant que nous établissons une connexion vers le réseau Tor. Cela pourrait prendre plusieurs minutes.">
+
+<!-- #31286 about:preferences strings -->
+<!ENTITY torPreferences.categoryTitle "Tor">
+<!ENTITY torPreferences.torSettings "Tor Settings">
+<!ENTITY torPreferences.torSettingsDescription "Tor Browser routes your traffic over the Tor Network, run by thousands of volunteers around the world." >
+<!ENTITY torPreferences.learnMore "En apprendre davantage">
+<!ENTITY torPreferences.bridges "Ponts">
+<!ENTITY torPreferences.bridgesDescription "Bridges help you access the Tor Network in places where Tor is blocked. Depending on where you are, one bridge may work better than another.">
+<!ENTITY torPreferences.useBridge "Use a bridge">
+<!-- torlauncher.request_a_new_bridge -->
+<!ENTITY torPreferences.requestNewBridge "Request a New Bridge&#x2026;">
+<!ENTITY torPreferences.provideBridge "Provide a bridge">
+<!ENTITY torPreferences.advanced "Avancé">
+<!ENTITY torPreferences.advancedDescription "Configure how Tor Browser connects to the internet.">
+<!ENTITY torPreferences.firewallPortsPlaceholder "Comma-separated values">
+<!ENTITY torPreferences.requestBridgeDialogTitle "Request Bridge">
+<!-- torlauncher.contacting_bridgedb=Contacting BridgeDB. Please wait. -->
+<!ENTITY torPreferences.requestBridgeDialogWaitPrompt "Contacting BridgeDB. Please Wait.">
+<!-- torlauncher.captcha_prompt=Solve the CAPTCHA to request a bridge. -->
+<!ENTITY torPreferences.requestBridgeDialogSolvePrompt "Résoudre le captcha pour demander un pont.">
+<!--torlauncher.bad_captcha_solution=The solution is not correct. Please try again.-->
+<!ENTITY torPreferences.requestBridgeErrorBadSolution "La solution est erronée. Veuillez ressayer.">
+<!ENTITY torPreferences.viewTorLogs "View the Tor logs.">
+<!ENTITY torPreferences.viewLogs "View Logs&#x2026;">
+<!ENTITY torPreferences.torLogsDialogTitle "Tor Logs">
diff --git a/src/chrome/locale/fy/network-settings.dtd b/src/chrome/locale/fy/network-settings.dtd
index dee4e14..74c947e 100644
--- a/src/chrome/locale/fy/network-settings.dtd
+++ b/src/chrome/locale/fy/network-settings.dtd
@@ -26,17 +26,23 @@
<!ENTITY torsettings.optional "Optional">
<!ENTITY torsettings.useProxy.checkbox "I use a proxy to connect to the Internet">
+<!-- TODO: remove colon-->
<!ENTITY torsettings.useProxy.type "Proxy Type:">
<!ENTITY torsettings.useProxy.type.placeholder "select a proxy type">
+<!-- TODO: remove colon-->
<!ENTITY torsettings.useProxy.address "Address:">
<!ENTITY torsettings.useProxy.address.placeholder "IP address or hostname">
+<!-- TODO: remove colon-->
<!ENTITY torsettings.useProxy.port "Port:">
+<!-- TODO: remove colon-->
<!ENTITY torsettings.useProxy.username "Username:">
+<!-- TODO: remove colon-->
<!ENTITY torsettings.useProxy.password "Wachtwurd:">
<!ENTITY torsettings.useProxy.type.socks4 "SOCKS 4">
<!ENTITY torsettings.useProxy.type.socks5 "SOCKS 5">
<!ENTITY torsettings.useProxy.type.http "HTTP / HTTPS">
<!ENTITY torsettings.firewall.checkbox "This computer goes through a firewall that only allows connections to certain ports">
+<!-- TODO: remove colon-->
<!ENTITY torsettings.firewall.allowedPorts "Allowed Ports:">
<!ENTITY torsettings.useBridges.checkbox "Tor is censored in my country">
<!ENTITY torsettings.useBridges.default "Select a built-in bridge">
@@ -60,3 +66,28 @@
<!-- Progress -->
<!ENTITY torprogress.pleaseWait "Please wait while we establish a connection to the Tor network.  This may take several minutes.">
+
+<!-- #31286 about:preferences strings -->
+<!ENTITY torPreferences.categoryTitle "Tor">
+<!ENTITY torPreferences.torSettings "Tor Settings">
+<!ENTITY torPreferences.torSettingsDescription "Tor Browser routes your traffic over the Tor Network, run by thousands of volunteers around the world." >
+<!ENTITY torPreferences.learnMore "Learn More">
+<!ENTITY torPreferences.bridges "Bridges">
+<!ENTITY torPreferences.bridgesDescription "Bridges help you access the Tor Network in places where Tor is blocked. Depending on where you are, one bridge may work better than another.">
+<!ENTITY torPreferences.useBridge "Use a bridge">
+<!-- torlauncher.request_a_new_bridge -->
+<!ENTITY torPreferences.requestNewBridge "Request a New Bridge&#x2026;">
+<!ENTITY torPreferences.provideBridge "Provide a bridge">
+<!ENTITY torPreferences.advanced "Advanced">
+<!ENTITY torPreferences.advancedDescription "Configure how Tor Browser connects to the internet.">
+<!ENTITY torPreferences.firewallPortsPlaceholder "Comma-separated values">
+<!ENTITY torPreferences.requestBridgeDialogTitle "Request Bridge">
+<!-- torlauncher.contacting_bridgedb=Contacting BridgeDB. Please wait. -->
+<!ENTITY torPreferences.requestBridgeDialogWaitPrompt "Contacting BridgeDB. Please Wait.">
+<!-- torlauncher.captcha_prompt=Solve the CAPTCHA to request a bridge. -->
+<!ENTITY torPreferences.requestBridgeDialogSolvePrompt "Solve the CAPTCHA to request a bridge.">
+<!--torlauncher.bad_captcha_solution=The solution is not correct. Please try again.-->
+<!ENTITY torPreferences.requestBridgeErrorBadSolution "The solution is not correct. Please try again.">
+<!ENTITY torPreferences.viewTorLogs "View the Tor logs.">
+<!ENTITY torPreferences.viewLogs "View Logs&#x2026;">
+<!ENTITY torPreferences.torLogsDialogTitle "Tor Logs">
diff --git a/src/chrome/locale/ga/network-settings.dtd b/src/chrome/locale/ga/network-settings.dtd
index ec8c51c..e83332e 100644
--- a/src/chrome/locale/ga/network-settings.dtd
+++ b/src/chrome/locale/ga/network-settings.dtd
@@ -26,17 +26,23 @@
<!ENTITY torsettings.optional "Roghnach">
<!ENTITY torsettings.useProxy.checkbox "Úsáidim seachfhreastalaí chun ceangal leis an Idirlíon">
+<!-- TODO: remove colon-->
<!ENTITY torsettings.useProxy.type "Cineál an tSeachfhreastalaí:">
<!ENTITY torsettings.useProxy.type.placeholder "roghnaigh cineál an tseachfhreastalaí">
+<!-- TODO: remove colon-->
<!ENTITY torsettings.useProxy.address "Seoladh:">
<!ENTITY torsettings.useProxy.address.placeholder "Seoladh IP nó óstainm">
+<!-- TODO: remove colon-->
<!ENTITY torsettings.useProxy.port "Port:">
+<!-- TODO: remove colon-->
<!ENTITY torsettings.useProxy.username "Ainm úsáideora:">
+<!-- TODO: remove colon-->
<!ENTITY torsettings.useProxy.password "Focal faire:">
<!ENTITY torsettings.useProxy.type.socks4 "SOCKS 4">
<!ENTITY torsettings.useProxy.type.socks5 "SOCKS 5">
<!ENTITY torsettings.useProxy.type.http "HTTP / HTTPS">
<!ENTITY torsettings.firewall.checkbox "Téann an ríomhaire seo trí bhalla dóiteáin nach gceadaíonn ceangail ach le poirt áirithe">
+<!-- TODO: remove colon-->
<!ENTITY torsettings.firewall.allowedPorts "Poirt Cheadaithe:">
<!ENTITY torsettings.useBridges.checkbox "Déantar cinsireacht ar Tor sa tír seo">
<!ENTITY torsettings.useBridges.default "Roghnaigh droichead ionsuite">
@@ -60,3 +66,28 @@
<!-- Progress -->
<!ENTITY torprogress.pleaseWait "Fan tamall agus ceangal le líonra Tor á bhunú.  Seans go dtógfaidh seo cúpla nóiméad.">
+
+<!-- #31286 about:preferences strings -->
+<!ENTITY torPreferences.categoryTitle "Tor">
+<!ENTITY torPreferences.torSettings "Tor Settings">
+<!ENTITY torPreferences.torSettingsDescription "Tor Browser routes your traffic over the Tor Network, run by thousands of volunteers around the world." >
+<!ENTITY torPreferences.learnMore "Tuilleadh Eolais">
+<!ENTITY torPreferences.bridges "Droichid">
+<!ENTITY torPreferences.bridgesDescription "Bridges help you access the Tor Network in places where Tor is blocked. Depending on where you are, one bridge may work better than another.">
+<!ENTITY torPreferences.useBridge "Use a bridge">
+<!-- torlauncher.request_a_new_bridge -->
+<!ENTITY torPreferences.requestNewBridge "Request a New Bridge&#x2026;">
+<!ENTITY torPreferences.provideBridge "Provide a bridge">
+<!ENTITY torPreferences.advanced "Advanced">
+<!ENTITY torPreferences.advancedDescription "Configure how Tor Browser connects to the internet.">
+<!ENTITY torPreferences.firewallPortsPlaceholder "Comma-separated values">
+<!ENTITY torPreferences.requestBridgeDialogTitle "Request Bridge">
+<!-- torlauncher.contacting_bridgedb=Contacting BridgeDB. Please wait. -->
+<!ENTITY torPreferences.requestBridgeDialogWaitPrompt "Contacting BridgeDB. Please Wait.">
+<!-- torlauncher.captcha_prompt=Solve the CAPTCHA to request a bridge. -->
+<!ENTITY torPreferences.requestBridgeDialogSolvePrompt "Réitigh an CAPTCHA le droichead a iarraidh.">
+<!--torlauncher.bad_captcha_solution=The solution is not correct. Please try again.-->
+<!ENTITY torPreferences.requestBridgeErrorBadSolution "Níl an freagra sin ceart. Bain triail eile as.">
+<!ENTITY torPreferences.viewTorLogs "View the Tor logs.">
+<!ENTITY torPreferences.viewLogs "View Logs&#x2026;">
+<!ENTITY torPreferences.torLogsDialogTitle "Tor Logs">
diff --git a/src/chrome/locale/gl/network-settings.dtd b/src/chrome/locale/gl/network-settings.dtd
index bde5036..88b0780 100644
--- a/src/chrome/locale/gl/network-settings.dtd
+++ b/src/chrome/locale/gl/network-settings.dtd
@@ -26,17 +26,23 @@
<!ENTITY torsettings.optional "Opcional">
<!ENTITY torsettings.useProxy.checkbox "I use a proxy to connect to the Internet">
+<!-- TODO: remove colon-->
<!ENTITY torsettings.useProxy.type "Tipo de Proxy:">
<!ENTITY torsettings.useProxy.type.placeholder "select a proxy type">
+<!-- TODO: remove colon-->
<!ENTITY torsettings.useProxy.address "Enderezo:">
<!ENTITY torsettings.useProxy.address.placeholder "Enderezo IP ou nome da máquina">
+<!-- TODO: remove colon-->
<!ENTITY torsettings.useProxy.port "Porto:">
+<!-- TODO: remove colon-->
<!ENTITY torsettings.useProxy.username "Nome de usuario:">
+<!-- TODO: remove colon-->
<!ENTITY torsettings.useProxy.password "Contrasinal:">
<!ENTITY torsettings.useProxy.type.socks4 "SOCKS 4">
<!ENTITY torsettings.useProxy.type.socks5 "SOCKS 5">
<!ENTITY torsettings.useProxy.type.http "HTTP / HTTPS">
<!ENTITY torsettings.firewall.checkbox "Este computador pasa por un firewall que só permite conexións a certos portos">
+<!-- TODO: remove colon-->
<!ENTITY torsettings.firewall.allowedPorts "Portos permitidos:">
<!ENTITY torsettings.useBridges.checkbox "Tor is censored in my country">
<!ENTITY torsettings.useBridges.default "Select a built-in bridge">
@@ -60,3 +66,28 @@
<!-- Progress -->
<!ENTITY torprogress.pleaseWait "Please wait while we establish a connection to the Tor network.  This may take several minutes.">
+
+<!-- #31286 about:preferences strings -->
+<!ENTITY torPreferences.categoryTitle "Tor">
+<!ENTITY torPreferences.torSettings "Tor Settings">
+<!ENTITY torPreferences.torSettingsDescription "Tor Browser routes your traffic over the Tor Network, run by thousands of volunteers around the world." >
+<!ENTITY torPreferences.learnMore "Learn More">
+<!ENTITY torPreferences.bridges "Pontes">
+<!ENTITY torPreferences.bridgesDescription "Bridges help you access the Tor Network in places where Tor is blocked. Depending on where you are, one bridge may work better than another.">
+<!ENTITY torPreferences.useBridge "Use a bridge">
+<!-- torlauncher.request_a_new_bridge -->
+<!ENTITY torPreferences.requestNewBridge "Request a New Bridge&#x2026;">
+<!ENTITY torPreferences.provideBridge "Provide a bridge">
+<!ENTITY torPreferences.advanced "Avanzados">
+<!ENTITY torPreferences.advancedDescription "Configure how Tor Browser connects to the internet.">
+<!ENTITY torPreferences.firewallPortsPlaceholder "Comma-separated values">
+<!ENTITY torPreferences.requestBridgeDialogTitle "Request Bridge">
+<!-- torlauncher.contacting_bridgedb=Contacting BridgeDB. Please wait. -->
+<!ENTITY torPreferences.requestBridgeDialogWaitPrompt "Contacting BridgeDB. Please Wait.">
+<!-- torlauncher.captcha_prompt=Solve the CAPTCHA to request a bridge. -->
+<!ENTITY torPreferences.requestBridgeDialogSolvePrompt "Solve the CAPTCHA to request a bridge.">
+<!--torlauncher.bad_captcha_solution=The solution is not correct. Please try again.-->
+<!ENTITY torPreferences.requestBridgeErrorBadSolution "The solution is not correct. Please try again.">
+<!ENTITY torPreferences.viewTorLogs "View the Tor logs.">
+<!ENTITY torPreferences.viewLogs "View Logs&#x2026;">
+<!ENTITY torPreferences.torLogsDialogTitle "Tor Logs">
diff --git a/src/chrome/locale/gu/network-settings.dtd b/src/chrome/locale/gu/network-settings.dtd
index 806c9a6..9a46a2a 100644
--- a/src/chrome/locale/gu/network-settings.dtd
+++ b/src/chrome/locale/gu/network-settings.dtd
@@ -26,17 +26,23 @@
<!ENTITY torsettings.optional "Optional">
<!ENTITY torsettings.useProxy.checkbox "I use a proxy to connect to the Internet">
+<!-- TODO: remove colon-->
<!ENTITY torsettings.useProxy.type "Proxy Type:">
<!ENTITY torsettings.useProxy.type.placeholder "select a proxy type">
+<!-- TODO: remove colon-->
<!ENTITY torsettings.useProxy.address "Address:">
<!ENTITY torsettings.useProxy.address.placeholder "IP address or hostname">
+<!-- TODO: remove colon-->
<!ENTITY torsettings.useProxy.port "પોર્ટ:">
+<!-- TODO: remove colon-->
<!ENTITY torsettings.useProxy.username "Username:">
+<!-- TODO: remove colon-->
<!ENTITY torsettings.useProxy.password "Password:">
<!ENTITY torsettings.useProxy.type.socks4 "SOCKS 4">
<!ENTITY torsettings.useProxy.type.socks5 "SOCKS 5">
<!ENTITY torsettings.useProxy.type.http "HTTP / HTTPS">
<!ENTITY torsettings.firewall.checkbox "This computer goes through a firewall that only allows connections to certain ports">
+<!-- TODO: remove colon-->
<!ENTITY torsettings.firewall.allowedPorts "Allowed Ports:">
<!ENTITY torsettings.useBridges.checkbox "Tor is censored in my country">
<!ENTITY torsettings.useBridges.default "Select a built-in bridge">
@@ -60,3 +66,28 @@
<!-- Progress -->
<!ENTITY torprogress.pleaseWait "Please wait while we establish a connection to the Tor network.  This may take several minutes.">
+
+<!-- #31286 about:preferences strings -->
+<!ENTITY torPreferences.categoryTitle "ટોર">
+<!ENTITY torPreferences.torSettings "Tor Settings">
+<!ENTITY torPreferences.torSettingsDescription "Tor Browser routes your traffic over the Tor Network, run by thousands of volunteers around the world." >
+<!ENTITY torPreferences.learnMore "Learn More">
+<!ENTITY torPreferences.bridges "Bridges">
+<!ENTITY torPreferences.bridgesDescription "Bridges help you access the Tor Network in places where Tor is blocked. Depending on where you are, one bridge may work better than another.">
+<!ENTITY torPreferences.useBridge "Use a bridge">
+<!-- torlauncher.request_a_new_bridge -->
+<!ENTITY torPreferences.requestNewBridge "Request a New Bridge&#x2026;">
+<!ENTITY torPreferences.provideBridge "Provide a bridge">
+<!ENTITY torPreferences.advanced "અદ્યતન">
+<!ENTITY torPreferences.advancedDescription "Configure how Tor Browser connects to the internet.">
+<!ENTITY torPreferences.firewallPortsPlaceholder "Comma-separated values">
+<!ENTITY torPreferences.requestBridgeDialogTitle "Request Bridge">
+<!-- torlauncher.contacting_bridgedb=Contacting BridgeDB. Please wait. -->
+<!ENTITY torPreferences.requestBridgeDialogWaitPrompt "Contacting BridgeDB. Please Wait.">
+<!-- torlauncher.captcha_prompt=Solve the CAPTCHA to request a bridge. -->
+<!ENTITY torPreferences.requestBridgeDialogSolvePrompt "Solve the CAPTCHA to request a bridge.">
+<!--torlauncher.bad_captcha_solution=The solution is not correct. Please try again.-->
+<!ENTITY torPreferences.requestBridgeErrorBadSolution "The solution is not correct. Please try again.">
+<!ENTITY torPreferences.viewTorLogs "View the Tor logs.">
+<!ENTITY torPreferences.viewLogs "View Logs&#x2026;">
+<!ENTITY torPreferences.torLogsDialogTitle "Tor Logs">
diff --git a/src/chrome/locale/he/network-settings.dtd b/src/chrome/locale/he/network-settings.dtd
index 135530f..99f0f30 100644
--- a/src/chrome/locale/he/network-settings.dtd
+++ b/src/chrome/locale/he/network-settings.dtd
@@ -26,17 +26,23 @@
<!ENTITY torsettings.optional "רשותי">
<!ENTITY torsettings.useProxy.checkbox "אני משתמש בייפוי־כוח כדי להתחבר לאינטרנט">
+<!-- TODO: remove colon-->
<!ENTITY torsettings.useProxy.type "סוג ייפוי־כוח:">
<!ENTITY torsettings.useProxy.type.placeholder "בחר סוג ייפוי־כוח">
+<!-- TODO: remove colon-->
<!ENTITY torsettings.useProxy.address "כתובת:">
<!ENTITY torsettings.useProxy.address.placeholder "כתובת IP או שם מארח">
+<!-- TODO: remove colon-->
<!ENTITY torsettings.useProxy.port "פתחה:">
+<!-- TODO: remove colon-->
<!ENTITY torsettings.useProxy.username "שם משתמש:">
+<!-- TODO: remove colon-->
<!ENTITY torsettings.useProxy.password "סיסמה:">
<!ENTITY torsettings.useProxy.type.socks4 "SOCKS 4">
<!ENTITY torsettings.useProxy.type.socks5 "SOCKS 5">
<!ENTITY torsettings.useProxy.type.http "HTTP / HTTPS">
<!ENTITY torsettings.firewall.checkbox "מחשב זה עובר דרך חומת אש המתירה חיבורים רק אל פתחות מסוימות">
+<!-- TODO: remove colon-->
<!ENTITY torsettings.firewall.allowedPorts "פתחות מותרות:">
<!ENTITY torsettings.useBridges.checkbox "Tor מצונזר במדינה שלי">
<!ENTITY torsettings.useBridges.default "בחר גשר מובנה">
@@ -60,3 +66,28 @@
<!-- Progress -->
<!ENTITY torprogress.pleaseWait "אנא המתן בזמן שאנחנו מקימים חיבור אל רשת Tor.  זה עשוי לקחת מספר דקות.">
+
+<!-- #31286 about:preferences strings -->
+<!ENTITY torPreferences.categoryTitle "Tor">
+<!ENTITY torPreferences.torSettings "Tor Settings">
+<!ENTITY torPreferences.torSettingsDescription "Tor Browser routes your traffic over the Tor Network, run by thousands of volunteers around the world." >
+<!ENTITY torPreferences.learnMore "למד עוד">
+<!ENTITY torPreferences.bridges "גשרים">
+<!ENTITY torPreferences.bridgesDescription "Bridges help you access the Tor Network in places where Tor is blocked. Depending on where you are, one bridge may work better than another.">
+<!ENTITY torPreferences.useBridge "Use a bridge">
+<!-- torlauncher.request_a_new_bridge -->
+<!ENTITY torPreferences.requestNewBridge "Request a New Bridge&#x2026;">
+<!ENTITY torPreferences.provideBridge "Provide a bridge">
+<!ENTITY torPreferences.advanced "מתקדם">
+<!ENTITY torPreferences.advancedDescription "Configure how Tor Browser connects to the internet.">
+<!ENTITY torPreferences.firewallPortsPlaceholder "Comma-separated values">
+<!ENTITY torPreferences.requestBridgeDialogTitle "Request Bridge">
+<!-- torlauncher.contacting_bridgedb=Contacting BridgeDB. Please wait. -->
+<!ENTITY torPreferences.requestBridgeDialogWaitPrompt "Contacting BridgeDB. Please Wait.">
+<!-- torlauncher.captcha_prompt=Solve the CAPTCHA to request a bridge. -->
+<!ENTITY torPreferences.requestBridgeDialogSolvePrompt "פתור את ה־CAPTCHA כדי לבקש גשר.">
+<!--torlauncher.bad_captcha_solution=The solution is not correct. Please try again.-->
+<!ENTITY torPreferences.requestBridgeErrorBadSolution "הפתרון אינו נכון. אנא נסה שוב.">
+<!ENTITY torPreferences.viewTorLogs "View the Tor logs.">
+<!ENTITY torPreferences.viewLogs "View Logs&#x2026;">
+<!ENTITY torPreferences.torLogsDialogTitle "Tor Logs">
diff --git a/src/chrome/locale/hi/network-settings.dtd b/src/chrome/locale/hi/network-settings.dtd
index 35916b5..6ef9422 100644
--- a/src/chrome/locale/hi/network-settings.dtd
+++ b/src/chrome/locale/hi/network-settings.dtd
@@ -26,17 +26,23 @@
<!ENTITY torsettings.optional "ऐच्छिक">
<!ENTITY torsettings.useProxy.checkbox "मैं इंटरनेट से कनेक्ट करने के लिए प्रॉक्सी का उपयोग करता हूं">
+<!-- TODO: remove colon-->
<!ENTITY torsettings.useProxy.type "प्रॉक्सी प्रकार:">
<!ENTITY torsettings.useProxy.type.placeholder "प्रॉक्सी प्रकार का चयन करें">
+<!-- TODO: remove colon-->
<!ENTITY torsettings.useProxy.address "पता :">
<!ENTITY torsettings.useProxy.address.placeholder "IP पता या मेजबाननाम">
+<!-- TODO: remove colon-->
<!ENTITY torsettings.useProxy.port "पोर्ट/द्वार :">
+<!-- TODO: remove colon-->
<!ENTITY torsettings.useProxy.username "उपयोगकर्ता नाम">
+<!-- TODO: remove colon-->
<!ENTITY torsettings.useProxy.password "पासवर्ड">
<!ENTITY torsettings.useProxy.type.socks4 "SOCKS 4">
<!ENTITY torsettings.useProxy.type.socks5 "SOCKS 5">
<!ENTITY torsettings.useProxy.type.http "HTTP / HTTPS">
<!ENTITY torsettings.firewall.checkbox "यह कंप्यूटर फ़ायरवॉल के माध्यम से जाता है जो केवल कुछ पोर्ट्स के कनेक्शन की अनुमति देता है...">
+<!-- TODO: remove colon-->
<!ENTITY torsettings.firewall.allowedPorts "अनुमति प्राप्त पोर्ट्स ">
<!ENTITY torsettings.useBridges.checkbox "टोर मेरे देश में सेंसर किया गया है">
<!ENTITY torsettings.useBridges.default "एक अंतर्निर्मित पुल का चयन करें">
@@ -60,3 +66,28 @@
<!-- Progress -->
<!ENTITY torprogress.pleaseWait "कुछ देर रुकिए। हम टोर की संजाल से जुड़ रहे हैं। कुछ मिनट लग सकते हैं।">
+
+<!-- #31286 about:preferences strings -->
+<!ENTITY torPreferences.categoryTitle "टो">
+<!ENTITY torPreferences.torSettings "Tor Settings">
+<!ENTITY torPreferences.torSettingsDescription "Tor Browser routes your traffic over the Tor Network, run by thousands of volunteers around the world." >
+<!ENTITY torPreferences.learnMore "और अधिक जानें">
+<!ENTITY torPreferences.bridges "पुल">
+<!ENTITY torPreferences.bridgesDescription "Bridges help you access the Tor Network in places where Tor is blocked. Depending on where you are, one bridge may work better than another.">
+<!ENTITY torPreferences.useBridge "Use a bridge">
+<!-- torlauncher.request_a_new_bridge -->
+<!ENTITY torPreferences.requestNewBridge "Request a New Bridge&#x2026;">
+<!ENTITY torPreferences.provideBridge "Provide a bridge">
+<!ENTITY torPreferences.advanced "उन्नत">
+<!ENTITY torPreferences.advancedDescription "Configure how Tor Browser connects to the internet.">
+<!ENTITY torPreferences.firewallPortsPlaceholder "Comma-separated values">
+<!ENTITY torPreferences.requestBridgeDialogTitle "Request Bridge">
+<!-- torlauncher.contacting_bridgedb=Contacting BridgeDB. Please wait. -->
+<!ENTITY torPreferences.requestBridgeDialogWaitPrompt "Contacting BridgeDB. Please Wait.">
+<!-- torlauncher.captcha_prompt=Solve the CAPTCHA to request a bridge. -->
+<!ENTITY torPreferences.requestBridgeDialogSolvePrompt "पुल का अनुरोध करने के लिए कैप्चा को हल करें।">
+<!--torlauncher.bad_captcha_solution=The solution is not correct. Please try again.-->
+<!ENTITY torPreferences.requestBridgeErrorBadSolution "समाधान सही नहीं है। कृपया पुन: प्रयास करें।">
+<!ENTITY torPreferences.viewTorLogs "View the Tor logs.">
+<!ENTITY torPreferences.viewLogs "View Logs&#x2026;">
+<!ENTITY torPreferences.torLogsDialogTitle "Tor Logs">
diff --git a/src/chrome/locale/hr/network-settings.dtd b/src/chrome/locale/hr/network-settings.dtd
index 26ca1a3..5a5dcf9 100644
--- a/src/chrome/locale/hr/network-settings.dtd
+++ b/src/chrome/locale/hr/network-settings.dtd
@@ -26,17 +26,23 @@
<!ENTITY torsettings.optional "Neobavezno">
<!ENTITY torsettings.useProxy.checkbox "Koristim proxy za spajanje na internet">
+<!-- TODO: remove colon-->
<!ENTITY torsettings.useProxy.type "Tip proxy-a:">
<!ENTITY torsettings.useProxy.type.placeholder "odaberite tip proxy-a">
+<!-- TODO: remove colon-->
<!ENTITY torsettings.useProxy.address "Adresa:">
<!ENTITY torsettings.useProxy.address.placeholder "IP adresa ili poslužitelj">
+<!-- TODO: remove colon-->
<!ENTITY torsettings.useProxy.port "Port:">
+<!-- TODO: remove colon-->
<!ENTITY torsettings.useProxy.username "Korisničko ime:">
+<!-- TODO: remove colon-->
<!ENTITY torsettings.useProxy.password "Lozinka:">
<!ENTITY torsettings.useProxy.type.socks4 "SOCKS 4">
<!ENTITY torsettings.useProxy.type.socks5 "SOCKS 5">
<!ENTITY torsettings.useProxy.type.http "HTTP / HTTPS">
<!ENTITY torsettings.firewall.checkbox "Ovo raučunalo ide kroz vatrozid koji dozvoljava veze samo preko pojedinih portova.">
+<!-- TODO: remove colon-->
<!ENTITY torsettings.firewall.allowedPorts "Dopušteni portovi:">
<!ENTITY torsettings.useBridges.checkbox "Tor je cenzuriran u mojoj zemlji">
<!ENTITY torsettings.useBridges.default "Odaberite ugrađeni most">
@@ -60,3 +66,28 @@
<!-- Progress -->
<!ENTITY torprogress.pleaseWait "Molimo pričekajte dok uspostavljamo vezu sa Tor mrežom.   Ovo može potrajati nekoliko minuta.">
+
+<!-- #31286 about:preferences strings -->
+<!ENTITY torPreferences.categoryTitle "Tor">
+<!ENTITY torPreferences.torSettings "Tor Settings">
+<!ENTITY torPreferences.torSettingsDescription "Tor Browser routes your traffic over the Tor Network, run by thousands of volunteers around the world." >
+<!ENTITY torPreferences.learnMore "Saznajte više">
+<!ENTITY torPreferences.bridges "Mostovi">
+<!ENTITY torPreferences.bridgesDescription "Bridges help you access the Tor Network in places where Tor is blocked. Depending on where you are, one bridge may work better than another.">
+<!ENTITY torPreferences.useBridge "Use a bridge">
+<!-- torlauncher.request_a_new_bridge -->
+<!ENTITY torPreferences.requestNewBridge "Request a New Bridge&#x2026;">
+<!ENTITY torPreferences.provideBridge "Provide a bridge">
+<!ENTITY torPreferences.advanced "Napredno">
+<!ENTITY torPreferences.advancedDescription "Configure how Tor Browser connects to the internet.">
+<!ENTITY torPreferences.firewallPortsPlaceholder "Comma-separated values">
+<!ENTITY torPreferences.requestBridgeDialogTitle "Request Bridge">
+<!-- torlauncher.contacting_bridgedb=Contacting BridgeDB. Please wait. -->
+<!ENTITY torPreferences.requestBridgeDialogWaitPrompt "Contacting BridgeDB. Please Wait.">
+<!-- torlauncher.captcha_prompt=Solve the CAPTCHA to request a bridge. -->
+<!ENTITY torPreferences.requestBridgeDialogSolvePrompt "Solve the CAPTCHA to request a bridge.">
+<!--torlauncher.bad_captcha_solution=The solution is not correct. Please try again.-->
+<!ENTITY torPreferences.requestBridgeErrorBadSolution "The solution is not correct. Please try again.">
+<!ENTITY torPreferences.viewTorLogs "View the Tor logs.">
+<!ENTITY torPreferences.viewLogs "View Logs&#x2026;">
+<!ENTITY torPreferences.torLogsDialogTitle "Tor Logs">
diff --git a/src/chrome/locale/hu/network-settings.dtd b/src/chrome/locale/hu/network-settings.dtd
index c474df2..487fd65 100644
--- a/src/chrome/locale/hu/network-settings.dtd
+++ b/src/chrome/locale/hu/network-settings.dtd
@@ -26,17 +26,23 @@
<!ENTITY torsettings.optional "Opcionális">
<!ENTITY torsettings.useProxy.checkbox "Proxy-t használok az Internetre való kapcsolódáshoz">
+<!-- TODO: remove colon-->
<!ENTITY torsettings.useProxy.type "Proxy Típus:">
<!ENTITY torsettings.useProxy.type.placeholder " válaszon ki egy proxy típust">
+<!-- TODO: remove colon-->
<!ENTITY torsettings.useProxy.address "Cím:">
<!ENTITY torsettings.useProxy.address.placeholder "IP cím vagy gépnév">
+<!-- TODO: remove colon-->
<!ENTITY torsettings.useProxy.port "Port:">
+<!-- TODO: remove colon-->
<!ENTITY torsettings.useProxy.username "Felhasználónév:">
+<!-- TODO: remove colon-->
<!ENTITY torsettings.useProxy.password "Jelszó:">
<!ENTITY torsettings.useProxy.type.socks4 "SOCKS 4">
<!ENTITY torsettings.useProxy.type.socks5 "SOCKS 5">
<!ENTITY torsettings.useProxy.type.http "HTTP / HTTPS">
<!ENTITY torsettings.firewall.checkbox "A számítógép egy tűzfalon keresztül kommunikál, ami csak adott portokon keresztül engedélyezi a kapcsolatotokat.">
+<!-- TODO: remove colon-->
<!ENTITY torsettings.firewall.allowedPorts "Engedélyezett portok:">
<!ENTITY torsettings.useBridges.checkbox "A Tor cenzúrázva van az országomban">
<!ENTITY torsettings.useBridges.default "Válasszon ki egy beépített hidat">
@@ -60,3 +66,28 @@
<!-- Progress -->
<!ENTITY torprogress.pleaseWait "Kérlek várj, amíg létrehozunk egy kapcsolatot a Tor hálózathoz.  Ez eltarthat néhány percig.">
+
+<!-- #31286 about:preferences strings -->
+<!ENTITY torPreferences.categoryTitle "Tor">
+<!ENTITY torPreferences.torSettings "Tor Settings">
+<!ENTITY torPreferences.torSettingsDescription "Tor Browser routes your traffic over the Tor Network, run by thousands of volunteers around the world." >
+<!ENTITY torPreferences.learnMore "Tudjon meg többet">
+<!ENTITY torPreferences.bridges "Hidak">
+<!ENTITY torPreferences.bridgesDescription "Bridges help you access the Tor Network in places where Tor is blocked. Depending on where you are, one bridge may work better than another.">
+<!ENTITY torPreferences.useBridge "Use a bridge">
+<!-- torlauncher.request_a_new_bridge -->
+<!ENTITY torPreferences.requestNewBridge "Request a New Bridge&#x2026;">
+<!ENTITY torPreferences.provideBridge "Provide a bridge">
+<!ENTITY torPreferences.advanced "Speciális">
+<!ENTITY torPreferences.advancedDescription "Configure how Tor Browser connects to the internet.">
+<!ENTITY torPreferences.firewallPortsPlaceholder "Comma-separated values">
+<!ENTITY torPreferences.requestBridgeDialogTitle "Request Bridge">
+<!-- torlauncher.contacting_bridgedb=Contacting BridgeDB. Please wait. -->
+<!ENTITY torPreferences.requestBridgeDialogWaitPrompt "Contacting BridgeDB. Please Wait.">
+<!-- torlauncher.captcha_prompt=Solve the CAPTCHA to request a bridge. -->
+<!ENTITY torPreferences.requestBridgeDialogSolvePrompt "Oldjon meg egy CAPTCHA-t a híd kéréséhez.">
+<!--torlauncher.bad_captcha_solution=The solution is not correct. Please try again.-->
+<!ENTITY torPreferences.requestBridgeErrorBadSolution "A megoldás nem helyes. Kérjük próbálja újra.">
+<!ENTITY torPreferences.viewTorLogs "View the Tor logs.">
+<!ENTITY torPreferences.viewLogs "View Logs&#x2026;">
+<!ENTITY torPreferences.torLogsDialogTitle "Tor Logs">
diff --git a/src/chrome/locale/hy/network-settings.dtd b/src/chrome/locale/hy/network-settings.dtd
index 1f36ac3..958b4c4 100644
--- a/src/chrome/locale/hy/network-settings.dtd
+++ b/src/chrome/locale/hy/network-settings.dtd
@@ -26,17 +26,23 @@
<!ENTITY torsettings.optional "Optional">
<!ENTITY torsettings.useProxy.checkbox "I use a proxy to connect to the Internet">
+<!-- TODO: remove colon-->
<!ENTITY torsettings.useProxy.type "Proxy Type:">
<!ENTITY torsettings.useProxy.type.placeholder "select a proxy type">
+<!-- TODO: remove colon-->
<!ENTITY torsettings.useProxy.address "Address:">
<!ENTITY torsettings.useProxy.address.placeholder "IP address or hostname">
+<!-- TODO: remove colon-->
<!ENTITY torsettings.useProxy.port "Port:">
+<!-- TODO: remove colon-->
<!ENTITY torsettings.useProxy.username "Username:">
+<!-- TODO: remove colon-->
<!ENTITY torsettings.useProxy.password "Password:">
<!ENTITY torsettings.useProxy.type.socks4 "SOCKS 4">
<!ENTITY torsettings.useProxy.type.socks5 "SOCKS 5">
<!ENTITY torsettings.useProxy.type.http "HTTP / HTTPS">
<!ENTITY torsettings.firewall.checkbox "This computer goes through a firewall that only allows connections to certain ports">
+<!-- TODO: remove colon-->
<!ENTITY torsettings.firewall.allowedPorts "Allowed Ports:">
<!ENTITY torsettings.useBridges.checkbox "Tor is censored in my country">
<!ENTITY torsettings.useBridges.default "Select a built-in bridge">
@@ -60,3 +66,28 @@
<!-- Progress -->
<!ENTITY torprogress.pleaseWait "Please wait while we establish a connection to the Tor network.  This may take several minutes.">
+
+<!-- #31286 about:preferences strings -->
+<!ENTITY torPreferences.categoryTitle "Tor">
+<!ENTITY torPreferences.torSettings "Tor Settings">
+<!ENTITY torPreferences.torSettingsDescription "Tor Browser routes your traffic over the Tor Network, run by thousands of volunteers around the world." >
+<!ENTITY torPreferences.learnMore "Learn More">
+<!ENTITY torPreferences.bridges "Bridges">
+<!ENTITY torPreferences.bridgesDescription "Bridges help you access the Tor Network in places where Tor is blocked. Depending on where you are, one bridge may work better than another.">
+<!ENTITY torPreferences.useBridge "Use a bridge">
+<!-- torlauncher.request_a_new_bridge -->
+<!ENTITY torPreferences.requestNewBridge "Request a New Bridge&#x2026;">
+<!ENTITY torPreferences.provideBridge "Provide a bridge">
+<!ENTITY torPreferences.advanced "Advanced">
+<!ENTITY torPreferences.advancedDescription "Configure how Tor Browser connects to the internet.">
+<!ENTITY torPreferences.firewallPortsPlaceholder "Comma-separated values">
+<!ENTITY torPreferences.requestBridgeDialogTitle "Request Bridge">
+<!-- torlauncher.contacting_bridgedb=Contacting BridgeDB. Please wait. -->
+<!ENTITY torPreferences.requestBridgeDialogWaitPrompt "Contacting BridgeDB. Please Wait.">
+<!-- torlauncher.captcha_prompt=Solve the CAPTCHA to request a bridge. -->
+<!ENTITY torPreferences.requestBridgeDialogSolvePrompt "Solve the CAPTCHA to request a bridge.">
+<!--torlauncher.bad_captcha_solution=The solution is not correct. Please try again.-->
+<!ENTITY torPreferences.requestBridgeErrorBadSolution "The solution is not correct. Please try again.">
+<!ENTITY torPreferences.viewTorLogs "View the Tor logs.">
+<!ENTITY torPreferences.viewLogs "View Logs&#x2026;">
+<!ENTITY torPreferences.torLogsDialogTitle "Tor Logs">
diff --git a/src/chrome/locale/id/network-settings.dtd b/src/chrome/locale/id/network-settings.dtd
index d537d7b..5fefae6 100644
--- a/src/chrome/locale/id/network-settings.dtd
+++ b/src/chrome/locale/id/network-settings.dtd
@@ -26,17 +26,23 @@
<!ENTITY torsettings.optional "Opsional">
<!ENTITY torsettings.useProxy.checkbox "Saya menggunakan proxy untuk terhubung ke Internet">
+<!-- TODO: remove colon-->
<!ENTITY torsettings.useProxy.type "Tipe Proksi:">
<!ENTITY torsettings.useProxy.type.placeholder "pilih jenis proxy">
+<!-- TODO: remove colon-->
<!ENTITY torsettings.useProxy.address "Alamat:">
<!ENTITY torsettings.useProxy.address.placeholder "alamat IP atau nama host">
+<!-- TODO: remove colon-->
<!ENTITY torsettings.useProxy.port "Port:">
+<!-- TODO: remove colon-->
<!ENTITY torsettings.useProxy.username "Nama User:">
+<!-- TODO: remove colon-->
<!ENTITY torsettings.useProxy.password "Kata sandi:">
<!ENTITY torsettings.useProxy.type.socks4 "SOCKS 4">
<!ENTITY torsettings.useProxy.type.socks5 "SOCKS 5">
<!ENTITY torsettings.useProxy.type.http "HTTP / HTTPS">
<!ENTITY torsettings.firewall.checkbox "Komputer ini pergi melalui firewall yang hanya mengizinkan koneksi untuk beberapa port">
+<!-- TODO: remove colon-->
<!ENTITY torsettings.firewall.allowedPorts "Port yang diizinkan:">
<!ENTITY torsettings.useBridges.checkbox "Tor disensor di negara saya">
<!ENTITY torsettings.useBridges.default "Pilih satu built-in bridge">
@@ -60,3 +66,28 @@
<!-- Progress -->
<!ENTITY torprogress.pleaseWait "Mohon menunggu sambil kami membuat sambungan ke jaringan TorJaringan Tor.  Ini akan memakan waktu beberapa menit">
+
+<!-- #31286 about:preferences strings -->
+<!ENTITY torPreferences.categoryTitle "Tor">
+<!ENTITY torPreferences.torSettings "Tor Settings">
+<!ENTITY torPreferences.torSettingsDescription "Tor Browser routes your traffic over the Tor Network, run by thousands of volunteers around the world." >
+<!ENTITY torPreferences.learnMore "Pelajari lebih lanjut">
+<!ENTITY torPreferences.bridges "Jembatan-jembatan">
+<!ENTITY torPreferences.bridgesDescription "Bridges help you access the Tor Network in places where Tor is blocked. Depending on where you are, one bridge may work better than another.">
+<!ENTITY torPreferences.useBridge "Use a bridge">
+<!-- torlauncher.request_a_new_bridge -->
+<!ENTITY torPreferences.requestNewBridge "Request a New Bridge&#x2026;">
+<!ENTITY torPreferences.provideBridge "Provide a bridge">
+<!ENTITY torPreferences.advanced "Advanced ">
+<!ENTITY torPreferences.advancedDescription "Configure how Tor Browser connects to the internet.">
+<!ENTITY torPreferences.firewallPortsPlaceholder "Comma-separated values">
+<!ENTITY torPreferences.requestBridgeDialogTitle "Request Bridge">
+<!-- torlauncher.contacting_bridgedb=Contacting BridgeDB. Please wait. -->
+<!ENTITY torPreferences.requestBridgeDialogWaitPrompt "Contacting BridgeDB. Please Wait.">
+<!-- torlauncher.captcha_prompt=Solve the CAPTCHA to request a bridge. -->
+<!ENTITY torPreferences.requestBridgeDialogSolvePrompt "Selesaikan CAPTCHA untuk meminta sebuah bridge.">
+<!--torlauncher.bad_captcha_solution=The solution is not correct. Please try again.-->
+<!ENTITY torPreferences.requestBridgeErrorBadSolution "Solusinya tidak tepat. Silakan coba lagi.">
+<!ENTITY torPreferences.viewTorLogs "View the Tor logs.">
+<!ENTITY torPreferences.viewLogs "View Logs&#x2026;">
+<!ENTITY torPreferences.torLogsDialogTitle "Tor Logs">
diff --git a/src/chrome/locale/is/network-settings.dtd b/src/chrome/locale/is/network-settings.dtd
index 33e81fb..5556d16 100644
--- a/src/chrome/locale/is/network-settings.dtd
+++ b/src/chrome/locale/is/network-settings.dtd
@@ -26,17 +26,23 @@
<!ENTITY torsettings.optional "Valkvætt">
<!ENTITY torsettings.useProxy.checkbox "Ég nota milliþjón (proxy) til að tengjast við internetið">
+<!-- TODO: remove colon-->
<!ENTITY torsettings.useProxy.type "Gerð milliþjóns:">
<!ENTITY torsettings.useProxy.type.placeholder "veldu tegund milliþjóns">
+<!-- TODO: remove colon-->
<!ENTITY torsettings.useProxy.address "Vistfang:">
<!ENTITY torsettings.useProxy.address.placeholder "IP-vistfang eða vélarheiti">
+<!-- TODO: remove colon-->
<!ENTITY torsettings.useProxy.port "Gátt:">
+<!-- TODO: remove colon-->
<!ENTITY torsettings.useProxy.username "Notandanafn:">
+<!-- TODO: remove colon-->
<!ENTITY torsettings.useProxy.password "Lykilorð:">
<!ENTITY torsettings.useProxy.type.socks4 "SOCKS 4">
<!ENTITY torsettings.useProxy.type.socks5 "SOCKS 5">
<!ENTITY torsettings.useProxy.type.http "HTTP / HTTPS">
<!ENTITY torsettings.firewall.checkbox "Þessi tölva tengist í gegnum eldvegg sem leyfir einungis tengingar í gegnum tilteknar gáttir">
+<!-- TODO: remove colon-->
<!ENTITY torsettings.firewall.allowedPorts "Leyfðar gáttir:">
<!ENTITY torsettings.useBridges.checkbox "Tor er ritskoðað í landinu mínu">
<!ENTITY torsettings.useBridges.default "Veldu innbyggða brú">
@@ -60,3 +66,28 @@
<!-- Progress -->
<!ENTITY torprogress.pleaseWait "Bíddu aðeins á meðan tengingu er komið á við Tor-netið.  Það getur tekið nokkrar mínútur.">
+
+<!-- #31286 about:preferences strings -->
+<!ENTITY torPreferences.categoryTitle "tor">
+<!ENTITY torPreferences.torSettings "Tor Settings">
+<!ENTITY torPreferences.torSettingsDescription "Tor Browser routes your traffic over the Tor Network, run by thousands of volunteers around the world." >
+<!ENTITY torPreferences.learnMore "Fræðast frekar">
+<!ENTITY torPreferences.bridges "Brýr">
+<!ENTITY torPreferences.bridgesDescription "Bridges help you access the Tor Network in places where Tor is blocked. Depending on where you are, one bridge may work better than another.">
+<!ENTITY torPreferences.useBridge "Use a bridge">
+<!-- torlauncher.request_a_new_bridge -->
+<!ENTITY torPreferences.requestNewBridge "Request a New Bridge&#x2026;">
+<!ENTITY torPreferences.provideBridge "Provide a bridge">
+<!ENTITY torPreferences.advanced "Ítarlegra">
+<!ENTITY torPreferences.advancedDescription "Configure how Tor Browser connects to the internet.">
+<!ENTITY torPreferences.firewallPortsPlaceholder "Comma-separated values">
+<!ENTITY torPreferences.requestBridgeDialogTitle "Request Bridge">
+<!-- torlauncher.contacting_bridgedb=Contacting BridgeDB. Please wait. -->
+<!ENTITY torPreferences.requestBridgeDialogWaitPrompt "Contacting BridgeDB. Please Wait.">
+<!-- torlauncher.captcha_prompt=Solve the CAPTCHA to request a bridge. -->
+<!ENTITY torPreferences.requestBridgeDialogSolvePrompt "Leystu CAPTCHA-þrautina til að biðja um brú.">
+<!--torlauncher.bad_captcha_solution=The solution is not correct. Please try again.-->
+<!ENTITY torPreferences.requestBridgeErrorBadSolution "Þessi lausn er ekki rétt. Reyndu aftur.">
+<!ENTITY torPreferences.viewTorLogs "View the Tor logs.">
+<!ENTITY torPreferences.viewLogs "View Logs&#x2026;">
+<!ENTITY torPreferences.torLogsDialogTitle "Tor Logs">
diff --git a/src/chrome/locale/it/network-settings.dtd b/src/chrome/locale/it/network-settings.dtd
index 0bb0f66..eccf9b2 100644
--- a/src/chrome/locale/it/network-settings.dtd
+++ b/src/chrome/locale/it/network-settings.dtd
@@ -26,17 +26,23 @@
<!ENTITY torsettings.optional "Facoltativo">
<!ENTITY torsettings.useProxy.checkbox "Uso un proxy per connettermi a internet">
+<!-- TODO: remove colon-->
<!ENTITY torsettings.useProxy.type "Tipo di proxy:">
<!ENTITY torsettings.useProxy.type.placeholder "Seleziona un tipo di proxy">
+<!-- TODO: remove colon-->
<!ENTITY torsettings.useProxy.address "Indirizzo:">
<!ENTITY torsettings.useProxy.address.placeholder "Indirizzo IP oppure hostname">
+<!-- TODO: remove colon-->
<!ENTITY torsettings.useProxy.port "Porta:">
+<!-- TODO: remove colon-->
<!ENTITY torsettings.useProxy.username "Nome utente:">
+<!-- TODO: remove colon-->
<!ENTITY torsettings.useProxy.password "Password:">
<!ENTITY torsettings.useProxy.type.socks4 "SOCKS 4">
<!ENTITY torsettings.useProxy.type.socks5 "SOCKS 5">
<!ENTITY torsettings.useProxy.type.http "HTTP / HTTPS">
<!ENTITY torsettings.firewall.checkbox "Questo computer passa attraverso un firewall che permette le connessioni solo ad alcune porte">
+<!-- TODO: remove colon-->
<!ENTITY torsettings.firewall.allowedPorts "Porte consentite:">
<!ENTITY torsettings.useBridges.checkbox "Tor viene censurato nel mio Paese">
<!ENTITY torsettings.useBridges.default "Seleziona un bridge integrato">
@@ -60,3 +66,28 @@
<!-- Progress -->
<!ENTITY torprogress.pleaseWait "Attendi mentre stabiliamo una connessione alla rete Tor.  Potrebbe richiedere qualche minuto.">
+
+<!-- #31286 about:preferences strings -->
+<!ENTITY torPreferences.categoryTitle "Tor">
+<!ENTITY torPreferences.torSettings "Tor Settings">
+<!ENTITY torPreferences.torSettingsDescription "Tor Browser routes your traffic over the Tor Network, run by thousands of volunteers around the world." >
+<!ENTITY torPreferences.learnMore "Maggiori informazioni">
+<!ENTITY torPreferences.bridges "Ponti">
+<!ENTITY torPreferences.bridgesDescription "Bridges help you access the Tor Network in places where Tor is blocked. Depending on where you are, one bridge may work better than another.">
+<!ENTITY torPreferences.useBridge "Use a bridge">
+<!-- torlauncher.request_a_new_bridge -->
+<!ENTITY torPreferences.requestNewBridge "Request a New Bridge&#x2026;">
+<!ENTITY torPreferences.provideBridge "Provide a bridge">
+<!ENTITY torPreferences.advanced "Avanzate">
+<!ENTITY torPreferences.advancedDescription "Configure how Tor Browser connects to the internet.">
+<!ENTITY torPreferences.firewallPortsPlaceholder "Comma-separated values">
+<!ENTITY torPreferences.requestBridgeDialogTitle "Request Bridge">
+<!-- torlauncher.contacting_bridgedb=Contacting BridgeDB. Please wait. -->
+<!ENTITY torPreferences.requestBridgeDialogWaitPrompt "Contacting BridgeDB. Please Wait.">
+<!-- torlauncher.captcha_prompt=Solve the CAPTCHA to request a bridge. -->
+<!ENTITY torPreferences.requestBridgeDialogSolvePrompt "Risolvi il CAPTCHA per richiedere un bridge.">
+<!--torlauncher.bad_captcha_solution=The solution is not correct. Please try again.-->
+<!ENTITY torPreferences.requestBridgeErrorBadSolution "La soluzione è sbagliata. Riprova.">
+<!ENTITY torPreferences.viewTorLogs "View the Tor logs.">
+<!ENTITY torPreferences.viewLogs "View Logs&#x2026;">
+<!ENTITY torPreferences.torLogsDialogTitle "Tor Logs">
diff --git a/src/chrome/locale/ja/network-settings.dtd b/src/chrome/locale/ja/network-settings.dtd
index 40b8739..3eb98a7 100644
--- a/src/chrome/locale/ja/network-settings.dtd
+++ b/src/chrome/locale/ja/network-settings.dtd
@@ -26,28 +26,34 @@
<!ENTITY torsettings.optional "オプション">
<!ENTITY torsettings.useProxy.checkbox "インターネットに接続するのにプロキシを使用します">
+<!-- TODO: remove colon-->
<!ENTITY torsettings.useProxy.type "プロキシの種類:">
<!ENTITY torsettings.useProxy.type.placeholder "プロキシの種類を選択">
+<!-- TODO: remove colon-->
<!ENTITY torsettings.useProxy.address "アドレス:">
<!ENTITY torsettings.useProxy.address.placeholder "IP アドレスまたはホスト名">
-<!ENTITY torsettings.useProxy.port "ポート">
+<!-- TODO: remove colon-->
+<!ENTITY torsettings.useProxy.port "ポート:">
+<!-- TODO: remove colon-->
<!ENTITY torsettings.useProxy.username "ユーザー名:">
+<!-- TODO: remove colon-->
<!ENTITY torsettings.useProxy.password "パスワード:">
<!ENTITY torsettings.useProxy.type.socks4 "SOCKS 4">
<!ENTITY torsettings.useProxy.type.socks5 "SOCKS 5">
<!ENTITY torsettings.useProxy.type.http "HTTP / HTTPS">
<!ENTITY torsettings.firewall.checkbox "このコンピューターは特定のポートへの接続のみ許可するファイアーウォールを通します。">
+<!-- TODO: remove colon-->
<!ENTITY torsettings.firewall.allowedPorts "許可されたポート:">
<!ENTITY torsettings.useBridges.checkbox "Tor は私の国では検閲されています">
<!ENTITY torsettings.useBridges.default "内蔵ブリッジを選択する">
<!ENTITY torsettings.useBridges.default.placeholder "ブリッジを選択">
<!ENTITY torsettings.useBridges.bridgeDB "torproject.org からブリッジの要求をする">
-<!ENTITY torsettings.useBridges.captchaSolution.placeholder "画像から文字を入力してください...">
+<!ENTITY torsettings.useBridges.captchaSolution.placeholder "画像の文字を入力してください">
<!ENTITY torsettings.useBridges.reloadCaptcha.tooltip "チャレンジを更新する">
-<!ENTITY torsettings.useBridges.captchaSubmit "生成">
+<!ENTITY torsettings.useBridges.captchaSubmit "送信">
<!ENTITY torsettings.useBridges.custom "知っているブリッジを使う">
<!ENTITY torsettings.useBridges.label "信頼できる情報源からのブリッジ情報を入力してください。">
-<!ENTITY torsettings.useBridges.placeholder "アドレス:ポート を入力(1行につきひとつ)">
+<!ENTITY torsettings.useBridges.placeholder "アドレス:ポート の形式で入力 (1 行ずつ)">
<!ENTITY torsettings.copyLog "Torのログをクリップボードにコピー">
@@ -60,3 +66,28 @@
<!-- Progress -->
<!ENTITY torprogress.pleaseWait "Tor ネットワークへの接続が確立されるまでお待ちください。  これには数分間かかることがあります。">
+
+<!-- #31286 about:preferences strings -->
+<!ENTITY torPreferences.categoryTitle "Tor">
+<!ENTITY torPreferences.torSettings "Tor Settings">
+<!ENTITY torPreferences.torSettingsDescription "Tor Browser routes your traffic over the Tor Network, run by thousands of volunteers around the world." >
+<!ENTITY torPreferences.learnMore "さらに詳しく">
+<!ENTITY torPreferences.bridges "ブリッジ">
+<!ENTITY torPreferences.bridgesDescription "Bridges help you access the Tor Network in places where Tor is blocked. Depending on where you are, one bridge may work better than another.">
+<!ENTITY torPreferences.useBridge "Use a bridge">
+<!-- torlauncher.request_a_new_bridge -->
+<!ENTITY torPreferences.requestNewBridge "Request a New Bridge&#x2026;">
+<!ENTITY torPreferences.provideBridge "Provide a bridge">
+<!ENTITY torPreferences.advanced "詳細">
+<!ENTITY torPreferences.advancedDescription "Configure how Tor Browser connects to the internet.">
+<!ENTITY torPreferences.firewallPortsPlaceholder "Comma-separated values">
+<!ENTITY torPreferences.requestBridgeDialogTitle "Request Bridge">
+<!-- torlauncher.contacting_bridgedb=Contacting BridgeDB. Please wait. -->
+<!ENTITY torPreferences.requestBridgeDialogWaitPrompt "Contacting BridgeDB. Please Wait.">
+<!-- torlauncher.captcha_prompt=Solve the CAPTCHA to request a bridge. -->
+<!ENTITY torPreferences.requestBridgeDialogSolvePrompt " ブリッジをリクエストするにはCAPTCHAを解いて下さい。">
+<!--torlauncher.bad_captcha_solution=The solution is not correct. Please try again.-->
+<!ENTITY torPreferences.requestBridgeErrorBadSolution "その解答は正しくありません。再度実行してください。">
+<!ENTITY torPreferences.viewTorLogs "View the Tor logs.">
+<!ENTITY torPreferences.viewLogs "View Logs&#x2026;">
+<!ENTITY torPreferences.torLogsDialogTitle "Tor Logs">
diff --git a/src/chrome/locale/ka/network-settings.dtd b/src/chrome/locale/ka/network-settings.dtd
index 8f79930..b0612a4 100644
--- a/src/chrome/locale/ka/network-settings.dtd
+++ b/src/chrome/locale/ka/network-settings.dtd
@@ -26,17 +26,23 @@
<!ENTITY torsettings.optional "არასავალდებულო">
<!ENTITY torsettings.useProxy.checkbox "ინტერნეტთან დასაკავშირებლად პროქსის ვიყენებ">
+<!-- TODO: remove colon-->
<!ENTITY torsettings.useProxy.type "პროქსის სახეობა:">
<!ENTITY torsettings.useProxy.type.placeholder "მიუთითეთ პროქსის სახეობა">
+<!-- TODO: remove colon-->
<!ENTITY torsettings.useProxy.address "მისამართი">
<!ENTITY torsettings.useProxy.address.placeholder "IP-მისამართი ან დასახელება">
+<!-- TODO: remove colon-->
<!ENTITY torsettings.useProxy.port "პორტი:">
+<!-- TODO: remove colon-->
<!ENTITY torsettings.useProxy.username "მომხმარებლის სახელი:">
+<!-- TODO: remove colon-->
<!ENTITY torsettings.useProxy.password "პაროლი">
<!ENTITY torsettings.useProxy.type.socks4 "SOCKS 4">
<!ENTITY torsettings.useProxy.type.socks5 "SOCKS 5">
<!ENTITY torsettings.useProxy.type.http "HTTP / HTTPS">
<!ENTITY torsettings.firewall.checkbox "კომპიუტერი ინტერნეტს უკავშირდება ქსელის ფარის გავლით, რომელშიც მხოლოდ ცალკეული პორტებია დაშვებული">
+<!-- TODO: remove colon-->
<!ENTITY torsettings.firewall.allowedPorts "დაშვებული პორტები:">
<!ENTITY torsettings.useBridges.checkbox "Tor შეზღუდულია ჩემს ქვეყანაში">
<!ENTITY torsettings.useBridges.default "ჩაშენებული გადამცემი ხიდის მითითება">
@@ -60,3 +66,28 @@
<!-- Progress -->
<!ENTITY torprogress.pleaseWait "გთხოვთ, მოითმინოთ სანამ დაუკავშირდება Tor-ქსელს.  რამდენიმე წუთს შეიძლება გასტანოს.">
+
+<!-- #31286 about:preferences strings -->
+<!ENTITY torPreferences.categoryTitle "Tor">
+<!ENTITY torPreferences.torSettings "Tor Settings">
+<!ENTITY torPreferences.torSettingsDescription "Tor Browser routes your traffic over the Tor Network, run by thousands of volunteers around the world." >
+<!ENTITY torPreferences.learnMore "იხილეთ ვრცლად">
+<!ENTITY torPreferences.bridges "გადამცემი ხიდები">
+<!ENTITY torPreferences.bridgesDescription "Bridges help you access the Tor Network in places where Tor is blocked. Depending on where you are, one bridge may work better than another.">
+<!ENTITY torPreferences.useBridge "Use a bridge">
+<!-- torlauncher.request_a_new_bridge -->
+<!ENTITY torPreferences.requestNewBridge "Request a New Bridge&#x2026;">
+<!ENTITY torPreferences.provideBridge "Provide a bridge">
+<!ENTITY torPreferences.advanced "Advanced">
+<!ENTITY torPreferences.advancedDescription "Configure how Tor Browser connects to the internet.">
+<!ENTITY torPreferences.firewallPortsPlaceholder "Comma-separated values">
+<!ENTITY torPreferences.requestBridgeDialogTitle "Request Bridge">
+<!-- torlauncher.contacting_bridgedb=Contacting BridgeDB. Please wait. -->
+<!ENTITY torPreferences.requestBridgeDialogWaitPrompt "Contacting BridgeDB. Please Wait.">
+<!-- torlauncher.captcha_prompt=Solve the CAPTCHA to request a bridge. -->
+<!ENTITY torPreferences.requestBridgeDialogSolvePrompt "გაიარეთ CAPTCHA, გადამცემი ხიდის მოთხოვნისთვის.">
+<!--torlauncher.bad_captcha_solution=The solution is not correct. Please try again.-->
+<!ENTITY torPreferences.requestBridgeErrorBadSolution "გადაწყვეტა არასწორია. გთხოვთ სცადოთ ხელახლა.">
+<!ENTITY torPreferences.viewTorLogs "View the Tor logs.">
+<!ENTITY torPreferences.viewLogs "View Logs&#x2026;">
+<!ENTITY torPreferences.torLogsDialogTitle "Tor Logs">
diff --git a/src/chrome/locale/kk/network-settings.dtd b/src/chrome/locale/kk/network-settings.dtd
index e4bd16f..8323269 100644
--- a/src/chrome/locale/kk/network-settings.dtd
+++ b/src/chrome/locale/kk/network-settings.dtd
@@ -26,17 +26,23 @@
<!ENTITY torsettings.optional "Optional">
<!ENTITY torsettings.useProxy.checkbox "I use a proxy to connect to the Internet">
+<!-- TODO: remove colon-->
<!ENTITY torsettings.useProxy.type "Proxy Type:">
<!ENTITY torsettings.useProxy.type.placeholder "select a proxy type">
+<!-- TODO: remove colon-->
<!ENTITY torsettings.useProxy.address "Address:">
<!ENTITY torsettings.useProxy.address.placeholder "IP address or hostname">
+<!-- TODO: remove colon-->
<!ENTITY torsettings.useProxy.port "Port:">
+<!-- TODO: remove colon-->
<!ENTITY torsettings.useProxy.username "Username:">
+<!-- TODO: remove colon-->
<!ENTITY torsettings.useProxy.password "Password:">
<!ENTITY torsettings.useProxy.type.socks4 "SOCKS 4">
<!ENTITY torsettings.useProxy.type.socks5 "SOCKS 5">
<!ENTITY torsettings.useProxy.type.http "HTTP / HTTPS">
<!ENTITY torsettings.firewall.checkbox "This computer goes through a firewall that only allows connections to certain ports">
+<!-- TODO: remove colon-->
<!ENTITY torsettings.firewall.allowedPorts "Allowed Ports:">
<!ENTITY torsettings.useBridges.checkbox "Tor is censored in my country">
<!ENTITY torsettings.useBridges.default "Select a built-in bridge">
@@ -60,3 +66,28 @@
<!-- Progress -->
<!ENTITY torprogress.pleaseWait "Please wait while we establish a connection to the Tor network.  This may take several minutes.">
+
+<!-- #31286 about:preferences strings -->
+<!ENTITY torPreferences.categoryTitle "Tor">
+<!ENTITY torPreferences.torSettings "Tor Settings">
+<!ENTITY torPreferences.torSettingsDescription "Tor Browser routes your traffic over the Tor Network, run by thousands of volunteers around the world." >
+<!ENTITY torPreferences.learnMore "Learn More">
+<!ENTITY torPreferences.bridges "Bridges">
+<!ENTITY torPreferences.bridgesDescription "Bridges help you access the Tor Network in places where Tor is blocked. Depending on where you are, one bridge may work better than another.">
+<!ENTITY torPreferences.useBridge "Use a bridge">
+<!-- torlauncher.request_a_new_bridge -->
+<!ENTITY torPreferences.requestNewBridge "Request a New Bridge&#x2026;">
+<!ENTITY torPreferences.provideBridge "Provide a bridge">
+<!ENTITY torPreferences.advanced "Кеңейтілген">
+<!ENTITY torPreferences.advancedDescription "Configure how Tor Browser connects to the internet.">
+<!ENTITY torPreferences.firewallPortsPlaceholder "Comma-separated values">
+<!ENTITY torPreferences.requestBridgeDialogTitle "Request Bridge">
+<!-- torlauncher.contacting_bridgedb=Contacting BridgeDB. Please wait. -->
+<!ENTITY torPreferences.requestBridgeDialogWaitPrompt "Contacting BridgeDB. Please Wait.">
+<!-- torlauncher.captcha_prompt=Solve the CAPTCHA to request a bridge. -->
+<!ENTITY torPreferences.requestBridgeDialogSolvePrompt "Көпірді сұрату үшін CAPTCHA-ны дұрыс жазыңыз">
+<!--torlauncher.bad_captcha_solution=The solution is not correct. Please try again.-->
+<!ENTITY torPreferences.requestBridgeErrorBadSolution "Шешім дұрыс емес. Әрекетті қайталап көріңіз.">
+<!ENTITY torPreferences.viewTorLogs "View the Tor logs.">
+<!ENTITY torPreferences.viewLogs "View Logs&#x2026;">
+<!ENTITY torPreferences.torLogsDialogTitle "Tor Logs">
diff --git a/src/chrome/locale/km/network-settings.dtd b/src/chrome/locale/km/network-settings.dtd
index 765aa47..ff36028 100644
--- a/src/chrome/locale/km/network-settings.dtd
+++ b/src/chrome/locale/km/network-settings.dtd
@@ -26,17 +26,23 @@
<!ENTITY torsettings.optional "ជាជម្រើស">
<!ENTITY torsettings.useProxy.checkbox "I use a proxy to connect to the Internet">
+<!-- TODO: remove colon-->
<!ENTITY torsettings.useProxy.type "ប្រភេទប្រូកស៊ី៖">
<!ENTITY torsettings.useProxy.type.placeholder "select a proxy type">
+<!-- TODO: remove colon-->
<!ENTITY torsettings.useProxy.address "អាយដ្ឋាន៖">
<!ENTITY torsettings.useProxy.address.placeholder "អាសយដ្ឋាន IP ឬឈ្មោះម៉ាស៊ីន">
+<!-- TODO: remove colon-->
<!ENTITY torsettings.useProxy.port "ច្រក៖">
+<!-- TODO: remove colon-->
<!ENTITY torsettings.useProxy.username "ឈ្មោះអ្នកប្រើ៖">
+<!-- TODO: remove colon-->
<!ENTITY torsettings.useProxy.password "ពាក្យសម្ងាត់៖">
<!ENTITY torsettings.useProxy.type.socks4 "SOCKS 4">
<!ENTITY torsettings.useProxy.type.socks5 "SOCKS 5">
<!ENTITY torsettings.useProxy.type.http "HTTP / HTTPS">
<!ENTITY torsettings.firewall.checkbox "កុំព្យូទ័រនេះឆ្លងកាត់ជញ្ជាំងភ្លើងដែលអនុញ្ញាតតែការភ្ជាប់ទៅច្រកជាក់លាក់">
+<!-- TODO: remove colon-->
<!ENTITY torsettings.firewall.allowedPorts "ច្រកបានអនុញ្ញាត៖">
<!ENTITY torsettings.useBridges.checkbox "Tor is censored in my country">
<!ENTITY torsettings.useBridges.default "Select a built-in bridge">
@@ -60,3 +66,28 @@
<!-- Progress -->
<!ENTITY torprogress.pleaseWait "Please wait while we establish a connection to the Tor network.  This may take several minutes.">
+
+<!-- #31286 about:preferences strings -->
+<!ENTITY torPreferences.categoryTitle "Tor">
+<!ENTITY torPreferences.torSettings "Tor Settings">
+<!ENTITY torPreferences.torSettingsDescription "Tor Browser routes your traffic over the Tor Network, run by thousands of volunteers around the world." >
+<!ENTITY torPreferences.learnMore "ស្វែងយល់បន្ថែម">
+<!ENTITY torPreferences.bridges "Bridges">
+<!ENTITY torPreferences.bridgesDescription "Bridges help you access the Tor Network in places where Tor is blocked. Depending on where you are, one bridge may work better than another.">
+<!ENTITY torPreferences.useBridge "Use a bridge">
+<!-- torlauncher.request_a_new_bridge -->
+<!ENTITY torPreferences.requestNewBridge "Request a New Bridge&#x2026;">
+<!ENTITY torPreferences.provideBridge "Provide a bridge">
+<!ENTITY torPreferences.advanced "កម្រិតខ្ពស់">
+<!ENTITY torPreferences.advancedDescription "Configure how Tor Browser connects to the internet.">
+<!ENTITY torPreferences.firewallPortsPlaceholder "Comma-separated values">
+<!ENTITY torPreferences.requestBridgeDialogTitle "Request Bridge">
+<!-- torlauncher.contacting_bridgedb=Contacting BridgeDB. Please wait. -->
+<!ENTITY torPreferences.requestBridgeDialogWaitPrompt "Contacting BridgeDB. Please Wait.">
+<!-- torlauncher.captcha_prompt=Solve the CAPTCHA to request a bridge. -->
+<!ENTITY torPreferences.requestBridgeDialogSolvePrompt "Solve the CAPTCHA to request a bridge.">
+<!--torlauncher.bad_captcha_solution=The solution is not correct. Please try again.-->
+<!ENTITY torPreferences.requestBridgeErrorBadSolution "The solution is not correct. Please try again.">
+<!ENTITY torPreferences.viewTorLogs "View the Tor logs.">
+<!ENTITY torPreferences.viewLogs "View Logs&#x2026;">
+<!ENTITY torPreferences.torLogsDialogTitle "Tor Logs">
diff --git a/src/chrome/locale/kn/network-settings.dtd b/src/chrome/locale/kn/network-settings.dtd
index 3bcea0f..d31b5c1 100644
--- a/src/chrome/locale/kn/network-settings.dtd
+++ b/src/chrome/locale/kn/network-settings.dtd
@@ -26,17 +26,23 @@
<!ENTITY torsettings.optional "Optional">
<!ENTITY torsettings.useProxy.checkbox "I use a proxy to connect to the Internet">
+<!-- TODO: remove colon-->
<!ENTITY torsettings.useProxy.type "Proxy Type:">
<!ENTITY torsettings.useProxy.type.placeholder "select a proxy type">
+<!-- TODO: remove colon-->
<!ENTITY torsettings.useProxy.address "Address:">
<!ENTITY torsettings.useProxy.address.placeholder "IP address or hostname">
+<!-- TODO: remove colon-->
<!ENTITY torsettings.useProxy.port "Port:">
+<!-- TODO: remove colon-->
<!ENTITY torsettings.useProxy.username "Username:">
+<!-- TODO: remove colon-->
<!ENTITY torsettings.useProxy.password "ಗುಪ್ತಪದ:">
<!ENTITY torsettings.useProxy.type.socks4 "SOCKS 4">
<!ENTITY torsettings.useProxy.type.socks5 "SOCKS 5">
<!ENTITY torsettings.useProxy.type.http "HTTP / HTTPS">
<!ENTITY torsettings.firewall.checkbox "This computer goes through a firewall that only allows connections to certain ports">
+<!-- TODO: remove colon-->
<!ENTITY torsettings.firewall.allowedPorts "Allowed Ports:">
<!ENTITY torsettings.useBridges.checkbox "Tor is censored in my country">
<!ENTITY torsettings.useBridges.default "Select a built-in bridge">
@@ -60,3 +66,28 @@
<!-- Progress -->
<!ENTITY torprogress.pleaseWait "Please wait while we establish a connection to the Tor network.  This may take several minutes.">
+
+<!-- #31286 about:preferences strings -->
+<!ENTITY torPreferences.categoryTitle "Tor">
+<!ENTITY torPreferences.torSettings "Tor Settings">
+<!ENTITY torPreferences.torSettingsDescription "Tor Browser routes your traffic over the Tor Network, run by thousands of volunteers around the world." >
+<!ENTITY torPreferences.learnMore "Learn More">
+<!ENTITY torPreferences.bridges "Bridges">
+<!ENTITY torPreferences.bridgesDescription "Bridges help you access the Tor Network in places where Tor is blocked. Depending on where you are, one bridge may work better than another.">
+<!ENTITY torPreferences.useBridge "Use a bridge">
+<!-- torlauncher.request_a_new_bridge -->
+<!ENTITY torPreferences.requestNewBridge "Request a New Bridge&#x2026;">
+<!ENTITY torPreferences.provideBridge "Provide a bridge">
+<!ENTITY torPreferences.advanced "Advanced">
+<!ENTITY torPreferences.advancedDescription "Configure how Tor Browser connects to the internet.">
+<!ENTITY torPreferences.firewallPortsPlaceholder "Comma-separated values">
+<!ENTITY torPreferences.requestBridgeDialogTitle "Request Bridge">
+<!-- torlauncher.contacting_bridgedb=Contacting BridgeDB. Please wait. -->
+<!ENTITY torPreferences.requestBridgeDialogWaitPrompt "Contacting BridgeDB. Please Wait.">
+<!-- torlauncher.captcha_prompt=Solve the CAPTCHA to request a bridge. -->
+<!ENTITY torPreferences.requestBridgeDialogSolvePrompt "Solve the CAPTCHA to request a bridge.">
+<!--torlauncher.bad_captcha_solution=The solution is not correct. Please try again.-->
+<!ENTITY torPreferences.requestBridgeErrorBadSolution "The solution is not correct. Please try again.">
+<!ENTITY torPreferences.viewTorLogs "View the Tor logs.">
+<!ENTITY torPreferences.viewLogs "View Logs&#x2026;">
+<!ENTITY torPreferences.torLogsDialogTitle "Tor Logs">
diff --git a/src/chrome/locale/ko/network-settings.dtd b/src/chrome/locale/ko/network-settings.dtd
index ed1a18f..fbb93cf 100644
--- a/src/chrome/locale/ko/network-settings.dtd
+++ b/src/chrome/locale/ko/network-settings.dtd
@@ -26,17 +26,23 @@
<!ENTITY torsettings.optional "옵션">
<!ENTITY torsettings.useProxy.checkbox "인터넷에 연결할 때 프록시를 사용합니다">
+<!-- TODO: remove colon-->
<!ENTITY torsettings.useProxy.type "프록시 종류:">
<!ENTITY torsettings.useProxy.type.placeholder "프록시 유형을 선택해 주세요.">
+<!-- TODO: remove colon-->
<!ENTITY torsettings.useProxy.address "주소:">
<!ENTITY torsettings.useProxy.address.placeholder "IP 주소 또는 호스트 네임">
+<!-- TODO: remove colon-->
<!ENTITY torsettings.useProxy.port "포트:">
+<!-- TODO: remove colon-->
<!ENTITY torsettings.useProxy.username "사용자명:">
+<!-- TODO: remove colon-->
<!ENTITY torsettings.useProxy.password "비밀번호:">
<!ENTITY torsettings.useProxy.type.socks4 "SOCKS 4">
<!ENTITY torsettings.useProxy.type.socks5 "SOCKS 5">
<!ENTITY torsettings.useProxy.type.http "HTTP / HTTPS">
<!ENTITY torsettings.firewall.checkbox "이 컴퓨터는 특정 포트만 허용하는 방화벽을 통해서 연결됩니다.">
+<!-- TODO: remove colon-->
<!ENTITY torsettings.firewall.allowedPorts "허용된 포트:">
<!ENTITY torsettings.useBridges.checkbox "우리나라에서는 Tor를 검열합니다.">
<!ENTITY torsettings.useBridges.default "제공된 브릿지를 선택하세요.">
@@ -60,3 +66,28 @@
<!-- Progress -->
<!ENTITY torprogress.pleaseWait "Tor 네트워크에 연결할 때까지 기다려주십시오.  몇 분 정도 소요될 수 있습니다.">
+
+<!-- #31286 about:preferences strings -->
+<!ENTITY torPreferences.categoryTitle "바위 산">
+<!ENTITY torPreferences.torSettings "Tor Settings">
+<!ENTITY torPreferences.torSettingsDescription "Tor Browser routes your traffic over the Tor Network, run by thousands of volunteers around the world." >
+<!ENTITY torPreferences.learnMore "더 알아보기">
+<!ENTITY torPreferences.bridges "중계서버">
+<!ENTITY torPreferences.bridgesDescription "Bridges help you access the Tor Network in places where Tor is blocked. Depending on where you are, one bridge may work better than another.">
+<!ENTITY torPreferences.useBridge "Use a bridge">
+<!-- torlauncher.request_a_new_bridge -->
+<!ENTITY torPreferences.requestNewBridge "Request a New Bridge&#x2026;">
+<!ENTITY torPreferences.provideBridge "Provide a bridge">
+<!ENTITY torPreferences.advanced "고급">
+<!ENTITY torPreferences.advancedDescription "Configure how Tor Browser connects to the internet.">
+<!ENTITY torPreferences.firewallPortsPlaceholder "Comma-separated values">
+<!ENTITY torPreferences.requestBridgeDialogTitle "Request Bridge">
+<!-- torlauncher.contacting_bridgedb=Contacting BridgeDB. Please wait. -->
+<!ENTITY torPreferences.requestBridgeDialogWaitPrompt "Contacting BridgeDB. Please Wait.">
+<!-- torlauncher.captcha_prompt=Solve the CAPTCHA to request a bridge. -->
+<!ENTITY torPreferences.requestBridgeDialogSolvePrompt "브릿지를 요청하기 위해 CAPCHA를 풀어주세요.">
+<!--torlauncher.bad_captcha_solution=The solution is not correct. Please try again.-->
+<!ENTITY torPreferences.requestBridgeErrorBadSolution "풀이가 맞지 않습니다. 다시 시도해주세요.">
+<!ENTITY torPreferences.viewTorLogs "View the Tor logs.">
+<!ENTITY torPreferences.viewLogs "View Logs&#x2026;">
+<!ENTITY torPreferences.torLogsDialogTitle "Tor Logs">
diff --git a/src/chrome/locale/lt/network-settings.dtd b/src/chrome/locale/lt/network-settings.dtd
index 7dd3217..6aa3b5d 100644
--- a/src/chrome/locale/lt/network-settings.dtd
+++ b/src/chrome/locale/lt/network-settings.dtd
@@ -26,17 +26,23 @@
<!ENTITY torsettings.optional "Nebūtina">
<!ENTITY torsettings.useProxy.checkbox "Prisijungimui prie interneto aš naudoju įgaliotąjį serverį">
+<!-- TODO: remove colon-->
<!ENTITY torsettings.useProxy.type "Įgaliotojo serverio tipas:">
<!ENTITY torsettings.useProxy.type.placeholder "pasirinkite įgaliotojo serverio tipą">
+<!-- TODO: remove colon-->
<!ENTITY torsettings.useProxy.address "Adresas:">
<!ENTITY torsettings.useProxy.address.placeholder "IP adresas arba serverio vardas">
+<!-- TODO: remove colon-->
<!ENTITY torsettings.useProxy.port "Prievadas:">
+<!-- TODO: remove colon-->
<!ENTITY torsettings.useProxy.username "Naudotojo vardas:">
+<!-- TODO: remove colon-->
<!ENTITY torsettings.useProxy.password "Slaptažodis:">
<!ENTITY torsettings.useProxy.type.socks4 "SOCKS 4">
<!ENTITY torsettings.useProxy.type.socks5 "SOCKS 5">
<!ENTITY torsettings.useProxy.type.http "HTTP / HTTPS">
<!ENTITY torsettings.firewall.checkbox "Šis kompiuteris jungiasi per užkardą, kuri leidžia jungtis tik prie tam tikrų prievadų">
+<!-- TODO: remove colon-->
<!ENTITY torsettings.firewall.allowedPorts "Leidžiami prievadai:">
<!ENTITY torsettings.useBridges.checkbox "Mano šalyje Tor yra cenzūruojamas">
<!ENTITY torsettings.useBridges.default "Pasirinkite įtaisytąjį tinklų tiltą">
@@ -60,3 +66,28 @@
<!-- Progress -->
<!ENTITY torprogress.pleaseWait "Palaukite, kol mes užmegsime ryšį su Tor tinklu.  Tai gali užtrukti kelias minutes.">
+
+<!-- #31286 about:preferences strings -->
+<!ENTITY torPreferences.categoryTitle "Tor">
+<!ENTITY torPreferences.torSettings "Tor Settings">
+<!ENTITY torPreferences.torSettingsDescription "Tor Browser routes your traffic over the Tor Network, run by thousands of volunteers around the world." >
+<!ENTITY torPreferences.learnMore "Learn More">
+<!ENTITY torPreferences.bridges "Tinklų tiltai">
+<!ENTITY torPreferences.bridgesDescription "Bridges help you access the Tor Network in places where Tor is blocked. Depending on where you are, one bridge may work better than another.">
+<!ENTITY torPreferences.useBridge "Use a bridge">
+<!-- torlauncher.request_a_new_bridge -->
+<!ENTITY torPreferences.requestNewBridge "Request a New Bridge&#x2026;">
+<!ENTITY torPreferences.provideBridge "Provide a bridge">
+<!ENTITY torPreferences.advanced "Išplėstiniai">
+<!ENTITY torPreferences.advancedDescription "Configure how Tor Browser connects to the internet.">
+<!ENTITY torPreferences.firewallPortsPlaceholder "Comma-separated values">
+<!ENTITY torPreferences.requestBridgeDialogTitle "Request Bridge">
+<!-- torlauncher.contacting_bridgedb=Contacting BridgeDB. Please wait. -->
+<!ENTITY torPreferences.requestBridgeDialogWaitPrompt "Contacting BridgeDB. Please Wait.">
+<!-- torlauncher.captcha_prompt=Solve the CAPTCHA to request a bridge. -->
+<!ENTITY torPreferences.requestBridgeDialogSolvePrompt "Norėdami užklausti tinklų tiltą, išspręskite saugos kodą.">
+<!--torlauncher.bad_captcha_solution=The solution is not correct. Please try again.-->
+<!ENTITY torPreferences.requestBridgeErrorBadSolution "Sprendimas neteisingas. Bandykite dar kartą.">
+<!ENTITY torPreferences.viewTorLogs "View the Tor logs.">
+<!ENTITY torPreferences.viewLogs "View Logs&#x2026;">
+<!ENTITY torPreferences.torLogsDialogTitle "Tor Logs">
diff --git a/src/chrome/locale/lv/network-settings.dtd b/src/chrome/locale/lv/network-settings.dtd
index 138b4b3..c7feeb9 100644
--- a/src/chrome/locale/lv/network-settings.dtd
+++ b/src/chrome/locale/lv/network-settings.dtd
@@ -26,17 +26,23 @@
<!ENTITY torsettings.optional "Neobligāts">
<!ENTITY torsettings.useProxy.checkbox "Lai izveidotu savienojumu ar internetu, es lietoju starpniekseveri">
+<!-- TODO: remove colon-->
<!ENTITY torsettings.useProxy.type "Starpnieka tips:">
<!ENTITY torsettings.useProxy.type.placeholder "izvēlieties starpniekservera veidu">
+<!-- TODO: remove colon-->
<!ENTITY torsettings.useProxy.address "Adrese:">
<!ENTITY torsettings.useProxy.address.placeholder "IP adrese vai resursdatora nosaukums">
+<!-- TODO: remove colon-->
<!ENTITY torsettings.useProxy.port "Ports:">
+<!-- TODO: remove colon-->
<!ENTITY torsettings.useProxy.username "Lietotājvārds:">
+<!-- TODO: remove colon-->
<!ENTITY torsettings.useProxy.password "Parole:">
<!ENTITY torsettings.useProxy.type.socks4 "SOCKS 4">
<!ENTITY torsettings.useProxy.type.socks5 "SOCKS 5">
<!ENTITY torsettings.useProxy.type.http "HTTP / HTTPS">
<!ENTITY torsettings.firewall.checkbox "Šis dators iet caur ugunsmūri, kurš atļauj tikai savienojumus ar noteiktiem portiem.">
+<!-- TODO: remove colon-->
<!ENTITY torsettings.firewall.allowedPorts "Atļautie porti:">
<!ENTITY torsettings.useBridges.checkbox "Manā valstī Tor tiek cenzēts">
<!ENTITY torsettings.useBridges.default "Izvēlieties iebūvētu tiltu">
@@ -60,3 +66,28 @@
<!-- Progress -->
<!ENTITY torprogress.pleaseWait "Lūdzu pagaidiet kamēr mēs izveidojam savienojumu ar tīklu Tor. Tam var būt nepieciešamas vairākas minūtes.">
+
+<!-- #31286 about:preferences strings -->
+<!ENTITY torPreferences.categoryTitle "Tor">
+<!ENTITY torPreferences.torSettings "Tor Settings">
+<!ENTITY torPreferences.torSettingsDescription "Tor Browser routes your traffic over the Tor Network, run by thousands of volunteers around the world." >
+<!ENTITY torPreferences.learnMore "Learn More">
+<!ENTITY torPreferences.bridges "Tilti">
+<!ENTITY torPreferences.bridgesDescription "Bridges help you access the Tor Network in places where Tor is blocked. Depending on where you are, one bridge may work better than another.">
+<!ENTITY torPreferences.useBridge "Use a bridge">
+<!-- torlauncher.request_a_new_bridge -->
+<!ENTITY torPreferences.requestNewBridge "Request a New Bridge&#x2026;">
+<!ENTITY torPreferences.provideBridge "Provide a bridge">
+<!ENTITY torPreferences.advanced "Lietpratīgs">
+<!ENTITY torPreferences.advancedDescription "Configure how Tor Browser connects to the internet.">
+<!ENTITY torPreferences.firewallPortsPlaceholder "Comma-separated values">
+<!ENTITY torPreferences.requestBridgeDialogTitle "Request Bridge">
+<!-- torlauncher.contacting_bridgedb=Contacting BridgeDB. Please wait. -->
+<!ENTITY torPreferences.requestBridgeDialogWaitPrompt "Contacting BridgeDB. Please Wait.">
+<!-- torlauncher.captcha_prompt=Solve the CAPTCHA to request a bridge. -->
+<!ENTITY torPreferences.requestBridgeDialogSolvePrompt "Solve the CAPTCHA to request a bridge.">
+<!--torlauncher.bad_captcha_solution=The solution is not correct. Please try again.-->
+<!ENTITY torPreferences.requestBridgeErrorBadSolution "The solution is not correct. Please try again.">
+<!ENTITY torPreferences.viewTorLogs "View the Tor logs.">
+<!ENTITY torPreferences.viewLogs "View Logs&#x2026;">
+<!ENTITY torPreferences.torLogsDialogTitle "Tor Logs">
diff --git a/src/chrome/locale/mk/network-settings.dtd b/src/chrome/locale/mk/network-settings.dtd
index b6fcffc..a6ab9ec 100644
--- a/src/chrome/locale/mk/network-settings.dtd
+++ b/src/chrome/locale/mk/network-settings.dtd
@@ -26,17 +26,23 @@
<!ENTITY torsettings.optional "Опционално">
<!ENTITY torsettings.useProxy.checkbox "Користам прокси за поврзување на Интернет">
+<!-- TODO: remove colon-->
<!ENTITY torsettings.useProxy.type "Тип на прокси:">
<!ENTITY torsettings.useProxy.type.placeholder "одбери тип на прокси">
+<!-- TODO: remove colon-->
<!ENTITY torsettings.useProxy.address "Адреси:">
<!ENTITY torsettings.useProxy.address.placeholder "IP адреси или име на хост">
+<!-- TODO: remove colon-->
<!ENTITY torsettings.useProxy.port "Порта:">
+<!-- TODO: remove colon-->
<!ENTITY torsettings.useProxy.username "Корисничко име:">
+<!-- TODO: remove colon-->
<!ENTITY torsettings.useProxy.password "Лозинка:">
<!ENTITY torsettings.useProxy.type.socks4 "SOCKS 4">
<!ENTITY torsettings.useProxy.type.socks5 "SOCKS 5">
<!ENTITY torsettings.useProxy.type.http "HTTP / HTTPS">
<!ENTITY torsettings.firewall.checkbox "Овој компјутер оди преку заштитен ѕид кој дозволува поврзувања до одредени порти">
+<!-- TODO: remove colon-->
<!ENTITY torsettings.firewall.allowedPorts "Дозволени порти:">
<!ENTITY torsettings.useBridges.checkbox "Tor е цензуриран во мојата држава">
<!ENTITY torsettings.useBridges.default "Одбери вграден мост">
@@ -60,3 +66,28 @@
<!-- Progress -->
<!ENTITY torprogress.pleaseWait "Ве молиме почекајте додека се воспостави поврзувањето со Тор мрежата.  Ова може да потрае неколку минути.">
+
+<!-- #31286 about:preferences strings -->
+<!ENTITY torPreferences.categoryTitle "Тор">
+<!ENTITY torPreferences.torSettings "Tor Settings">
+<!ENTITY torPreferences.torSettingsDescription "Tor Browser routes your traffic over the Tor Network, run by thousands of volunteers around the world." >
+<!ENTITY torPreferences.learnMore "Научете повеќе">
+<!ENTITY torPreferences.bridges "Мостови">
+<!ENTITY torPreferences.bridgesDescription "Bridges help you access the Tor Network in places where Tor is blocked. Depending on where you are, one bridge may work better than another.">
+<!ENTITY torPreferences.useBridge "Use a bridge">
+<!-- torlauncher.request_a_new_bridge -->
+<!ENTITY torPreferences.requestNewBridge "Request a New Bridge&#x2026;">
+<!ENTITY torPreferences.provideBridge "Provide a bridge">
+<!ENTITY torPreferences.advanced "Advanced">
+<!ENTITY torPreferences.advancedDescription "Configure how Tor Browser connects to the internet.">
+<!ENTITY torPreferences.firewallPortsPlaceholder "Comma-separated values">
+<!ENTITY torPreferences.requestBridgeDialogTitle "Request Bridge">
+<!-- torlauncher.contacting_bridgedb=Contacting BridgeDB. Please wait. -->
+<!ENTITY torPreferences.requestBridgeDialogWaitPrompt "Contacting BridgeDB. Please Wait.">
+<!-- torlauncher.captcha_prompt=Solve the CAPTCHA to request a bridge. -->
+<!ENTITY torPreferences.requestBridgeDialogSolvePrompt "Решете ја ЗАДАЧАТА за да побарате мост.">
+<!--torlauncher.bad_captcha_solution=The solution is not correct. Please try again.-->
+<!ENTITY torPreferences.requestBridgeErrorBadSolution "Решението е погрешно. Ве молиме обидете се повторно.">
+<!ENTITY torPreferences.viewTorLogs "View the Tor logs.">
+<!ENTITY torPreferences.viewLogs "View Logs&#x2026;">
+<!ENTITY torPreferences.torLogsDialogTitle "Tor Logs">
diff --git a/src/chrome/locale/mk/torlauncher.properties b/src/chrome/locale/mk/torlauncher.properties
index b370ad7..806ac8d 100644
--- a/src/chrome/locale/mk/torlauncher.properties
+++ b/src/chrome/locale/mk/torlauncher.properties
@@ -52,7 +52,7 @@ torlauncher.forAssistance2=За помош, посетете ја %S
torlauncher.copiedNLogMessages=Копирањето е завршено. %S Tor лог пораките се подготвени да бидат залепени во уредувач на текст или во порака за е-пошта.
-torlauncher.bootstrapStatus.starting=Започнување
+torlauncher.bootstrapStatus.starting=Започнувањето
torlauncher.bootstrapStatus.conn_pt=Поврзување со мост
torlauncher.bootstrapStatus.conn_done_pt=Поврзан со мост
torlauncher.bootstrapStatus.conn_proxy=Поврзување со прокси
@@ -67,7 +67,7 @@ torlauncher.bootstrapStatus.loading_status=Вчитување на мрежен
torlauncher.bootstrapStatus.loading_keys=Вчитување на авторитетни сертификати
torlauncher.bootstrapStatus.requesting_descriptors=Барање на информации за реле
torlauncher.bootstrapStatus.loading_descriptors=Вчитување на информации за реле
-torlauncher.bootstrapStatus.enough_dirinfo=Завршено вчитувањето на информации за релето
+torlauncher.bootstrapStatus.enough_dirinfo=Завршено е вчитувањето на информациите за релето
torlauncher.bootstrapStatus.ap_conn_pt=Градење кругови: Поврзување со мост
torlauncher.bootstrapStatus.ap_conn_done_pt=Градење кругови: Поврзан со мост
torlauncher.bootstrapStatus.ap_conn_proxy=Градење кругови: Поврзување со прокси
diff --git a/src/chrome/locale/ml/network-settings.dtd b/src/chrome/locale/ml/network-settings.dtd
index 93f3e79..3c6b28a 100644
--- a/src/chrome/locale/ml/network-settings.dtd
+++ b/src/chrome/locale/ml/network-settings.dtd
@@ -26,17 +26,23 @@
<!ENTITY torsettings.optional "നിര്ബന്ധമില്ലാത്തത് ">
<!ENTITY torsettings.useProxy.checkbox "ഞാൻ ഇന്റർനൈറ്റിലെക് ബന്ധപ്പെടാൻ ഒരു പ്രോക്സി ഉപയോഗിക്കുന്നു ">
+<!-- TODO: remove colon-->
<!ENTITY torsettings.useProxy.type "പ്രോക്സി ഇനം :">
<!ENTITY torsettings.useProxy.type.placeholder "ഒരു പ്രോക്സി ഇനം തിരഞ്ഞെടുക്കുക :">
+<!-- TODO: remove colon-->
<!ENTITY torsettings.useProxy.address "മേൽവിലാസം :">
<!ENTITY torsettings.useProxy.address.placeholder "ഐ പി മേൽവിലാസം അല്ലെങ്കിൽ ഹോസ്റ്റ് നെയിം ">
+<!-- TODO: remove colon-->
<!ENTITY torsettings.useProxy.port "Port:">
+<!-- TODO: remove colon-->
<!ENTITY torsettings.useProxy.username "യൂസർ നെയിം :">
+<!-- TODO: remove colon-->
<!ENTITY torsettings.useProxy.password "പാസ്സ്വേർഡ് ">
<!ENTITY torsettings.useProxy.type.socks4 "SOCKS 4">
<!ENTITY torsettings.useProxy.type.socks5 "SOCKS 5">
<!ENTITY torsettings.useProxy.type.http "എച് ടി ടി പി /എച് ടി ടി പി എസ് ">
<!ENTITY torsettings.firewall.checkbox "ഈ കംപ്യൂട്ടർ ചില പ്രത്യേക പോർട്ടുകളിലൂടെ മാത്രം ബന്ധം അനുവദിക്കുന്ന ഫയർവാൾ വഴിയാണ് പോകുന്നത്">
+<!-- TODO: remove colon-->
<!ENTITY torsettings.firewall.allowedPorts "അനുവദിച്ചിട്ടുള്ള പോർട്ടുകൾ ">
<!ENTITY torsettings.useBridges.checkbox "എന്റെ രാജ്യത്തു ടോർ സെൻസർ ചെയ്തിട്ടുള്ളതാണ് ">
<!ENTITY torsettings.useBridges.default "ഇതിനകത്തു തന്നെയുള്ള ഒരു ബ്രിഡ്ജ് തിരഞ്ഞെടുക്കുക ">
@@ -60,3 +66,28 @@
<!-- Progress -->
<!ENTITY torprogress.pleaseWait "റ്റോറിലേക്കു ബന്ധപ്പെടുത്തുന്നത് വരെ ദയവായി ക്ഷെമിക്കുക &#160. ഇത് നിരവധി സമയം എടുക്കും ">
+
+<!-- #31286 about:preferences strings -->
+<!ENTITY torPreferences.categoryTitle "Tor">
+<!ENTITY torPreferences.torSettings "Tor Settings">
+<!ENTITY torPreferences.torSettingsDescription "Tor Browser routes your traffic over the Tor Network, run by thousands of volunteers around the world." >
+<!ENTITY torPreferences.learnMore "Learn More">
+<!ENTITY torPreferences.bridges "Bridges">
+<!ENTITY torPreferences.bridgesDescription "Bridges help you access the Tor Network in places where Tor is blocked. Depending on where you are, one bridge may work better than another.">
+<!ENTITY torPreferences.useBridge "Use a bridge">
+<!-- torlauncher.request_a_new_bridge -->
+<!ENTITY torPreferences.requestNewBridge "Request a New Bridge&#x2026;">
+<!ENTITY torPreferences.provideBridge "Provide a bridge">
+<!ENTITY torPreferences.advanced "Advanced">
+<!ENTITY torPreferences.advancedDescription "Configure how Tor Browser connects to the internet.">
+<!ENTITY torPreferences.firewallPortsPlaceholder "Comma-separated values">
+<!ENTITY torPreferences.requestBridgeDialogTitle "Request Bridge">
+<!-- torlauncher.contacting_bridgedb=Contacting BridgeDB. Please wait. -->
+<!ENTITY torPreferences.requestBridgeDialogWaitPrompt "Contacting BridgeDB. Please Wait.">
+<!-- torlauncher.captcha_prompt=Solve the CAPTCHA to request a bridge. -->
+<!ENTITY torPreferences.requestBridgeDialogSolvePrompt "ബ്രിഡ്ജിനെ കിട്ടാൻ തന്നിരിക്കുന്ന കാപ്ച പരിഹരിക്കുക ">
+<!--torlauncher.bad_captcha_solution=The solution is not correct. Please try again.-->
+<!ENTITY torPreferences.requestBridgeErrorBadSolution "പരിഹാരം ശെരിയല്ല . ദയവായി ഒന്നുകൂടെ ശ്രെമിക്കുക ">
+<!ENTITY torPreferences.viewTorLogs "View the Tor logs.">
+<!ENTITY torPreferences.viewLogs "View Logs&#x2026;">
+<!ENTITY torPreferences.torLogsDialogTitle "Tor Logs">
diff --git a/src/chrome/locale/mr/network-settings.dtd b/src/chrome/locale/mr/network-settings.dtd
index b0346da..e372640 100644
--- a/src/chrome/locale/mr/network-settings.dtd
+++ b/src/chrome/locale/mr/network-settings.dtd
@@ -26,17 +26,23 @@
<!ENTITY torsettings.optional "Optional">
<!ENTITY torsettings.useProxy.checkbox "I use a proxy to connect to the Internet">
+<!-- TODO: remove colon-->
<!ENTITY torsettings.useProxy.type "Proxy Type:">
<!ENTITY torsettings.useProxy.type.placeholder "select a proxy type">
+<!-- TODO: remove colon-->
<!ENTITY torsettings.useProxy.address "Address:">
<!ENTITY torsettings.useProxy.address.placeholder "IP address or hostname">
+<!-- TODO: remove colon-->
<!ENTITY torsettings.useProxy.port "Port:">
+<!-- TODO: remove colon-->
<!ENTITY torsettings.useProxy.username "Username:">
+<!-- TODO: remove colon-->
<!ENTITY torsettings.useProxy.password "Password:">
<!ENTITY torsettings.useProxy.type.socks4 "SOCKS 4">
<!ENTITY torsettings.useProxy.type.socks5 "SOCKS 5">
<!ENTITY torsettings.useProxy.type.http "HTTP / HTTPS">
<!ENTITY torsettings.firewall.checkbox "This computer goes through a firewall that only allows connections to certain ports">
+<!-- TODO: remove colon-->
<!ENTITY torsettings.firewall.allowedPorts "Allowed Ports:">
<!ENTITY torsettings.useBridges.checkbox "Tor is censored in my country">
<!ENTITY torsettings.useBridges.default "Select a built-in bridge">
@@ -60,3 +66,28 @@
<!-- Progress -->
<!ENTITY torprogress.pleaseWait "Please wait while we establish a connection to the Tor network.  This may take several minutes.">
+
+<!-- #31286 about:preferences strings -->
+<!ENTITY torPreferences.categoryTitle "Tor">
+<!ENTITY torPreferences.torSettings "Tor Settings">
+<!ENTITY torPreferences.torSettingsDescription "Tor Browser routes your traffic over the Tor Network, run by thousands of volunteers around the world." >
+<!ENTITY torPreferences.learnMore "Learn More">
+<!ENTITY torPreferences.bridges "Bridges">
+<!ENTITY torPreferences.bridgesDescription "Bridges help you access the Tor Network in places where Tor is blocked. Depending on where you are, one bridge may work better than another.">
+<!ENTITY torPreferences.useBridge "Use a bridge">
+<!-- torlauncher.request_a_new_bridge -->
+<!ENTITY torPreferences.requestNewBridge "Request a New Bridge&#x2026;">
+<!ENTITY torPreferences.provideBridge "Provide a bridge">
+<!ENTITY torPreferences.advanced "Advanced">
+<!ENTITY torPreferences.advancedDescription "Configure how Tor Browser connects to the internet.">
+<!ENTITY torPreferences.firewallPortsPlaceholder "Comma-separated values">
+<!ENTITY torPreferences.requestBridgeDialogTitle "Request Bridge">
+<!-- torlauncher.contacting_bridgedb=Contacting BridgeDB. Please wait. -->
+<!ENTITY torPreferences.requestBridgeDialogWaitPrompt "Contacting BridgeDB. Please Wait.">
+<!-- torlauncher.captcha_prompt=Solve the CAPTCHA to request a bridge. -->
+<!ENTITY torPreferences.requestBridgeDialogSolvePrompt "पुलाची विनंती करण्यासाठी कॅप्चाचे निरसन करा.">
+<!--torlauncher.bad_captcha_solution=The solution is not correct. Please try again.-->
+<!ENTITY torPreferences.requestBridgeErrorBadSolution "उपाय बरोबर नाही. कृपया पुन्हा प्रयत्न करा.">
+<!ENTITY torPreferences.viewTorLogs "View the Tor logs.">
+<!ENTITY torPreferences.viewLogs "View Logs&#x2026;">
+<!ENTITY torPreferences.torLogsDialogTitle "Tor Logs">
diff --git a/src/chrome/locale/ms-MY/network-settings.dtd b/src/chrome/locale/ms-MY/network-settings.dtd
index 61c974f..9c6299e 100644
--- a/src/chrome/locale/ms-MY/network-settings.dtd
+++ b/src/chrome/locale/ms-MY/network-settings.dtd
@@ -26,17 +26,23 @@
<!ENTITY torsettings.optional "Pilihan">
<!ENTITY torsettings.useProxy.checkbox "Saya guna proksi untuk bersambung dengan Internet">
+<!-- TODO: remove colon-->
<!ENTITY torsettings.useProxy.type "Jenis Proksi:">
<!ENTITY torsettings.useProxy.type.placeholder "pilih sejenis proksi">
+<!-- TODO: remove colon-->
<!ENTITY torsettings.useProxy.address "Alamat:">
<!ENTITY torsettings.useProxy.address.placeholder "Alamat IP atau nama hos">
+<!-- TODO: remove colon-->
<!ENTITY torsettings.useProxy.port "Port:">
+<!-- TODO: remove colon-->
<!ENTITY torsettings.useProxy.username "Nama Pengguna:">
+<!-- TODO: remove colon-->
<!ENTITY torsettings.useProxy.password "Kata Laluan:">
<!ENTITY torsettings.useProxy.type.socks4 "SOCKS 4">
<!ENTITY torsettings.useProxy.type.socks5 "SOCKS 5">
<!ENTITY torsettings.useProxy.type.http "HTTP / HTTPS">
<!ENTITY torsettings.firewall.checkbox "Komputer ini melalui tembok api yang hanya membolehkan sambungan ke port tertentu">
+<!-- TODO: remove colon-->
<!ENTITY torsettings.firewall.allowedPorts "Port Dibenarkan:">
<!ENTITY torsettings.useBridges.checkbox "Tor dilarang penggunaannya di negara saya">
<!ENTITY torsettings.useBridges.default "Pilih satu titi terbina-dalam">
@@ -60,3 +66,28 @@
<!-- Progress -->
<!ENTITY torprogress.pleaseWait "Tunggu sebentar sementara kami menjalinkan sambungan dengan rangkaian Tor.  Ia mengambil masa beberapa minit.">
+
+<!-- #31286 about:preferences strings -->
+<!ENTITY torPreferences.categoryTitle "Tor">
+<!ENTITY torPreferences.torSettings "Tor Settings">
+<!ENTITY torPreferences.torSettingsDescription "Tor Browser routes your traffic over the Tor Network, run by thousands of volunteers around the world." >
+<!ENTITY torPreferences.learnMore "Learn More">
+<!ENTITY torPreferences.bridges "Jambatan, ataupun Bridges">
+<!ENTITY torPreferences.bridgesDescription "Bridges help you access the Tor Network in places where Tor is blocked. Depending on where you are, one bridge may work better than another.">
+<!ENTITY torPreferences.useBridge "Use a bridge">
+<!-- torlauncher.request_a_new_bridge -->
+<!ENTITY torPreferences.requestNewBridge "Request a New Bridge&#x2026;">
+<!ENTITY torPreferences.provideBridge "Provide a bridge">
+<!ENTITY torPreferences.advanced "Advanced">
+<!ENTITY torPreferences.advancedDescription "Configure how Tor Browser connects to the internet.">
+<!ENTITY torPreferences.firewallPortsPlaceholder "Comma-separated values">
+<!ENTITY torPreferences.requestBridgeDialogTitle "Request Bridge">
+<!-- torlauncher.contacting_bridgedb=Contacting BridgeDB. Please wait. -->
+<!ENTITY torPreferences.requestBridgeDialogWaitPrompt "Contacting BridgeDB. Please Wait.">
+<!-- torlauncher.captcha_prompt=Solve the CAPTCHA to request a bridge. -->
+<!ENTITY torPreferences.requestBridgeDialogSolvePrompt "Selesaikan CAPTCHA untuk meminta satu titi.">
+<!--torlauncher.bad_captcha_solution=The solution is not correct. Please try again.-->
+<!ENTITY torPreferences.requestBridgeErrorBadSolution "Jawapan salah. Cuba sekali lagi.">
+<!ENTITY torPreferences.viewTorLogs "View the Tor logs.">
+<!ENTITY torPreferences.viewLogs "View Logs&#x2026;">
+<!ENTITY torPreferences.torLogsDialogTitle "Tor Logs">
diff --git a/src/chrome/locale/my/network-settings.dtd b/src/chrome/locale/my/network-settings.dtd
index 748d302..e461e30 100644
--- a/src/chrome/locale/my/network-settings.dtd
+++ b/src/chrome/locale/my/network-settings.dtd
@@ -26,17 +26,23 @@
<!ENTITY torsettings.optional "Optional">
<!ENTITY torsettings.useProxy.checkbox "I use a proxy to connect to the Internet">
+<!-- TODO: remove colon-->
<!ENTITY torsettings.useProxy.type "Proxy Type:">
<!ENTITY torsettings.useProxy.type.placeholder "select a proxy type">
+<!-- TODO: remove colon-->
<!ENTITY torsettings.useProxy.address "နေရပ်လိပ်စာ -">
<!ENTITY torsettings.useProxy.address.placeholder "IP address or hostname">
+<!-- TODO: remove colon-->
<!ENTITY torsettings.useProxy.port "Port:">
+<!-- TODO: remove colon-->
<!ENTITY torsettings.useProxy.username "သုံးစွဲသူအမည် -">
+<!-- TODO: remove colon-->
<!ENTITY torsettings.useProxy.password "စကားဝှက် - ">
<!ENTITY torsettings.useProxy.type.socks4 "SOCKS 4">
<!ENTITY torsettings.useProxy.type.socks5 "SOCKS 5">
<!ENTITY torsettings.useProxy.type.http "HTTP / HTTPS">
<!ENTITY torsettings.firewall.checkbox "This computer goes through a firewall that only allows connections to certain ports">
+<!-- TODO: remove colon-->
<!ENTITY torsettings.firewall.allowedPorts "ခွင့်ပြုထားသော Ports များ -">
<!ENTITY torsettings.useBridges.checkbox "Tor is censored in my country">
<!ENTITY torsettings.useBridges.default "Select a built-in bridge">
@@ -60,3 +66,28 @@
<!-- Progress -->
<!ENTITY torprogress.pleaseWait "Please wait while we establish a connection to the Tor network.  This may take several minutes.">
+
+<!-- #31286 about:preferences strings -->
+<!ENTITY torPreferences.categoryTitle "Tor">
+<!ENTITY torPreferences.torSettings "Tor Settings">
+<!ENTITY torPreferences.torSettingsDescription "Tor Browser routes your traffic over the Tor Network, run by thousands of volunteers around the world." >
+<!ENTITY torPreferences.learnMore "Learn More">
+<!ENTITY torPreferences.bridges "Bridges">
+<!ENTITY torPreferences.bridgesDescription "Bridges help you access the Tor Network in places where Tor is blocked. Depending on where you are, one bridge may work better than another.">
+<!ENTITY torPreferences.useBridge "Use a bridge">
+<!-- torlauncher.request_a_new_bridge -->
+<!ENTITY torPreferences.requestNewBridge "Request a New Bridge&#x2026;">
+<!ENTITY torPreferences.provideBridge "Provide a bridge">
+<!ENTITY torPreferences.advanced "အဆင့်မြင့်">
+<!ENTITY torPreferences.advancedDescription "Configure how Tor Browser connects to the internet.">
+<!ENTITY torPreferences.firewallPortsPlaceholder "Comma-separated values">
+<!ENTITY torPreferences.requestBridgeDialogTitle "Request Bridge">
+<!-- torlauncher.contacting_bridgedb=Contacting BridgeDB. Please wait. -->
+<!ENTITY torPreferences.requestBridgeDialogWaitPrompt "Contacting BridgeDB. Please Wait.">
+<!-- torlauncher.captcha_prompt=Solve the CAPTCHA to request a bridge. -->
+<!ENTITY torPreferences.requestBridgeDialogSolvePrompt "Solve the CAPTCHA to request a bridge.">
+<!--torlauncher.bad_captcha_solution=The solution is not correct. Please try again.-->
+<!ENTITY torPreferences.requestBridgeErrorBadSolution "The solution is not correct. Please try again.">
+<!ENTITY torPreferences.viewTorLogs "View the Tor logs.">
+<!ENTITY torPreferences.viewLogs "View Logs&#x2026;">
+<!ENTITY torPreferences.torLogsDialogTitle "Tor Logs">
diff --git a/src/chrome/locale/nb/network-settings.dtd b/src/chrome/locale/nb/network-settings.dtd
index 3d1ef4d..f4da5b7 100644
--- a/src/chrome/locale/nb/network-settings.dtd
+++ b/src/chrome/locale/nb/network-settings.dtd
@@ -26,17 +26,23 @@
<!ENTITY torsettings.optional "Valgfritt">
<!ENTITY torsettings.useProxy.checkbox "Jeg bruker en mellomtjener for å koble til Internett">
+<!-- TODO: remove colon-->
<!ENTITY torsettings.useProxy.type "Mellomtjeningstype:">
<!ENTITY torsettings.useProxy.type.placeholder "velg en mellomtjenertype">
+<!-- TODO: remove colon-->
<!ENTITY torsettings.useProxy.address "Adresse:">
<!ENTITY torsettings.useProxy.address.placeholder "IP-adresse, eller vertsnavn">
+<!-- TODO: remove colon-->
<!ENTITY torsettings.useProxy.port "Port:">
+<!-- TODO: remove colon-->
<!ENTITY torsettings.useProxy.username "Brukernavn:">
+<!-- TODO: remove colon-->
<!ENTITY torsettings.useProxy.password "Passord:">
<!ENTITY torsettings.useProxy.type.socks4 "SOCKS 4">
<!ENTITY torsettings.useProxy.type.socks5 "SOCKS 5">
<!ENTITY torsettings.useProxy.type.http "HTTP / HTTPS">
<!ENTITY torsettings.firewall.checkbox "Denne datamaskinen går gjennom en brannmur som kun tillater tilkoblinger til visse porter">
+<!-- TODO: remove colon-->
<!ENTITY torsettings.firewall.allowedPorts "Tillatte porter:">
<!ENTITY torsettings.useBridges.checkbox "Tor er sensurert i mitt land">
<!ENTITY torsettings.useBridges.default "Velg en bro med flere innfartsårer">
@@ -60,3 +66,28 @@
<!-- Progress -->
<!ENTITY torprogress.pleaseWait "Vent mens tilkobling til Tor-nettverket opprettes.  Dette kan ta flere minutter.">
+
+<!-- #31286 about:preferences strings -->
+<!ENTITY torPreferences.categoryTitle "Tor">
+<!ENTITY torPreferences.torSettings "Tor Settings">
+<!ENTITY torPreferences.torSettingsDescription "Tor Browser routes your traffic over the Tor Network, run by thousands of volunteers around the world." >
+<!ENTITY torPreferences.learnMore "Lær mer">
+<!ENTITY torPreferences.bridges "Broer">
+<!ENTITY torPreferences.bridgesDescription "Bridges help you access the Tor Network in places where Tor is blocked. Depending on where you are, one bridge may work better than another.">
+<!ENTITY torPreferences.useBridge "Use a bridge">
+<!-- torlauncher.request_a_new_bridge -->
+<!ENTITY torPreferences.requestNewBridge "Request a New Bridge&#x2026;">
+<!ENTITY torPreferences.provideBridge "Provide a bridge">
+<!ENTITY torPreferences.advanced "Avansert">
+<!ENTITY torPreferences.advancedDescription "Configure how Tor Browser connects to the internet.">
+<!ENTITY torPreferences.firewallPortsPlaceholder "Comma-separated values">
+<!ENTITY torPreferences.requestBridgeDialogTitle "Request Bridge">
+<!-- torlauncher.contacting_bridgedb=Contacting BridgeDB. Please wait. -->
+<!ENTITY torPreferences.requestBridgeDialogWaitPrompt "Contacting BridgeDB. Please Wait.">
+<!-- torlauncher.captcha_prompt=Solve the CAPTCHA to request a bridge. -->
+<!ENTITY torPreferences.requestBridgeDialogSolvePrompt "Løs CAPTCHA-en for å forespørre en bro.">
+<!--torlauncher.bad_captcha_solution=The solution is not correct. Please try again.-->
+<!ENTITY torPreferences.requestBridgeErrorBadSolution "Løsningen er ikke riktig. Vær så snill, prøv på nytt.">
+<!ENTITY torPreferences.viewTorLogs "View the Tor logs.">
+<!ENTITY torPreferences.viewLogs "View Logs&#x2026;">
+<!ENTITY torPreferences.torLogsDialogTitle "Tor Logs">
diff --git a/src/chrome/locale/ne/network-settings.dtd b/src/chrome/locale/ne/network-settings.dtd
index 24d381a..5704206 100644
--- a/src/chrome/locale/ne/network-settings.dtd
+++ b/src/chrome/locale/ne/network-settings.dtd
@@ -26,17 +26,23 @@
<!ENTITY torsettings.optional "Optional">
<!ENTITY torsettings.useProxy.checkbox "I use a proxy to connect to the Internet">
+<!-- TODO: remove colon-->
<!ENTITY torsettings.useProxy.type "Proxy Type:">
<!ENTITY torsettings.useProxy.type.placeholder "select a proxy type">
+<!-- TODO: remove colon-->
<!ENTITY torsettings.useProxy.address "Address:">
<!ENTITY torsettings.useProxy.address.placeholder "IP address or hostname">
+<!-- TODO: remove colon-->
<!ENTITY torsettings.useProxy.port "Port:">
+<!-- TODO: remove colon-->
<!ENTITY torsettings.useProxy.username "Username:">
+<!-- TODO: remove colon-->
<!ENTITY torsettings.useProxy.password "Password:">
<!ENTITY torsettings.useProxy.type.socks4 "SOCKS 4">
<!ENTITY torsettings.useProxy.type.socks5 "SOCKS 5">
<!ENTITY torsettings.useProxy.type.http "HTTP / HTTPS">
<!ENTITY torsettings.firewall.checkbox "This computer goes through a firewall that only allows connections to certain ports">
+<!-- TODO: remove colon-->
<!ENTITY torsettings.firewall.allowedPorts "Allowed Ports:">
<!ENTITY torsettings.useBridges.checkbox "Tor is censored in my country">
<!ENTITY torsettings.useBridges.default "Select a built-in bridge">
@@ -60,3 +66,28 @@
<!-- Progress -->
<!ENTITY torprogress.pleaseWait "Please wait while we establish a connection to the Tor network.  This may take several minutes.">
+
+<!-- #31286 about:preferences strings -->
+<!ENTITY torPreferences.categoryTitle "Tor">
+<!ENTITY torPreferences.torSettings "Tor Settings">
+<!ENTITY torPreferences.torSettingsDescription "Tor Browser routes your traffic over the Tor Network, run by thousands of volunteers around the world." >
+<!ENTITY torPreferences.learnMore "Learn More">
+<!ENTITY torPreferences.bridges "Bridges">
+<!ENTITY torPreferences.bridgesDescription "Bridges help you access the Tor Network in places where Tor is blocked. Depending on where you are, one bridge may work better than another.">
+<!ENTITY torPreferences.useBridge "Use a bridge">
+<!-- torlauncher.request_a_new_bridge -->
+<!ENTITY torPreferences.requestNewBridge "Request a New Bridge&#x2026;">
+<!ENTITY torPreferences.provideBridge "Provide a bridge">
+<!ENTITY torPreferences.advanced "Advanced">
+<!ENTITY torPreferences.advancedDescription "Configure how Tor Browser connects to the internet.">
+<!ENTITY torPreferences.firewallPortsPlaceholder "Comma-separated values">
+<!ENTITY torPreferences.requestBridgeDialogTitle "Request Bridge">
+<!-- torlauncher.contacting_bridgedb=Contacting BridgeDB. Please wait. -->
+<!ENTITY torPreferences.requestBridgeDialogWaitPrompt "Contacting BridgeDB. Please Wait.">
+<!-- torlauncher.captcha_prompt=Solve the CAPTCHA to request a bridge. -->
+<!ENTITY torPreferences.requestBridgeDialogSolvePrompt "Solve the CAPTCHA to request a bridge.">
+<!--torlauncher.bad_captcha_solution=The solution is not correct. Please try again.-->
+<!ENTITY torPreferences.requestBridgeErrorBadSolution "The solution is not correct. Please try again.">
+<!ENTITY torPreferences.viewTorLogs "View the Tor logs.">
+<!ENTITY torPreferences.viewLogs "View Logs&#x2026;">
+<!ENTITY torPreferences.torLogsDialogTitle "Tor Logs">
diff --git a/src/chrome/locale/nl-BE/network-settings.dtd b/src/chrome/locale/nl-BE/network-settings.dtd
index efd9402..d6ec3f7 100644
--- a/src/chrome/locale/nl-BE/network-settings.dtd
+++ b/src/chrome/locale/nl-BE/network-settings.dtd
@@ -26,17 +26,23 @@
<!ENTITY torsettings.optional "Optioneel">
<!ENTITY torsettings.useProxy.checkbox "I use a proxy to connect to the Internet">
+<!-- TODO: remove colon-->
<!ENTITY torsettings.useProxy.type "Proxy Type:">
<!ENTITY torsettings.useProxy.type.placeholder "select a proxy type">
+<!-- TODO: remove colon-->
<!ENTITY torsettings.useProxy.address "Adres:">
<!ENTITY torsettings.useProxy.address.placeholder "IP adres of hostnaam">
+<!-- TODO: remove colon-->
<!ENTITY torsettings.useProxy.port "Poort:">
+<!-- TODO: remove colon-->
<!ENTITY torsettings.useProxy.username "Gebruikersnaam:">
+<!-- TODO: remove colon-->
<!ENTITY torsettings.useProxy.password "Wachtwoord:">
<!ENTITY torsettings.useProxy.type.socks4 "SOCKS 4">
<!ENTITY torsettings.useProxy.type.socks5 "SOCKS 5">
<!ENTITY torsettings.useProxy.type.http "HTTP / HTTPS">
<!ENTITY torsettings.firewall.checkbox "This computer goes through a firewall that only allows connections to certain ports">
+<!-- TODO: remove colon-->
<!ENTITY torsettings.firewall.allowedPorts "Allowed Ports:">
<!ENTITY torsettings.useBridges.checkbox "Tor is censored in my country">
<!ENTITY torsettings.useBridges.default "Select a built-in bridge">
@@ -61,3 +67,28 @@
<!-- Progress -->
<!ENTITY torprogress.pleaseWait "Even geduld terwijl we verbinding maken met het Tor netwerk. 
Dit kan enkele minuten duren.">
+
+<!-- #31286 about:preferences strings -->
+<!ENTITY torPreferences.categoryTitle "Tor">
+<!ENTITY torPreferences.torSettings "Tor Settings">
+<!ENTITY torPreferences.torSettingsDescription "Tor Browser routes your traffic over the Tor Network, run by thousands of volunteers around the world." >
+<!ENTITY torPreferences.learnMore "Learn More">
+<!ENTITY torPreferences.bridges "Bridges">
+<!ENTITY torPreferences.bridgesDescription "Bridges help you access the Tor Network in places where Tor is blocked. Depending on where you are, one bridge may work better than another.">
+<!ENTITY torPreferences.useBridge "Use a bridge">
+<!-- torlauncher.request_a_new_bridge -->
+<!ENTITY torPreferences.requestNewBridge "Request a New Bridge&#x2026;">
+<!ENTITY torPreferences.provideBridge "Provide a bridge">
+<!ENTITY torPreferences.advanced "Geavanceerd">
+<!ENTITY torPreferences.advancedDescription "Configure how Tor Browser connects to the internet.">
+<!ENTITY torPreferences.firewallPortsPlaceholder "Comma-separated values">
+<!ENTITY torPreferences.requestBridgeDialogTitle "Request Bridge">
+<!-- torlauncher.contacting_bridgedb=Contacting BridgeDB. Please wait. -->
+<!ENTITY torPreferences.requestBridgeDialogWaitPrompt "Contacting BridgeDB. Please Wait.">
+<!-- torlauncher.captcha_prompt=Solve the CAPTCHA to request a bridge. -->
+<!ENTITY torPreferences.requestBridgeDialogSolvePrompt "Solve the CAPTCHA to request a bridge.">
+<!--torlauncher.bad_captcha_solution=The solution is not correct. Please try again.-->
+<!ENTITY torPreferences.requestBridgeErrorBadSolution "The solution is not correct. Please try again.">
+<!ENTITY torPreferences.viewTorLogs "View the Tor logs.">
+<!ENTITY torPreferences.viewLogs "View Logs&#x2026;">
+<!ENTITY torPreferences.torLogsDialogTitle "Tor Logs">
diff --git a/src/chrome/locale/nl/network-settings.dtd b/src/chrome/locale/nl/network-settings.dtd
index f39a8f9..7cbe12a 100644
--- a/src/chrome/locale/nl/network-settings.dtd
+++ b/src/chrome/locale/nl/network-settings.dtd
@@ -26,17 +26,23 @@
<!ENTITY torsettings.optional "Optioneel">
<!ENTITY torsettings.useProxy.checkbox "I gebruik een proxy om met het internet te verbinden.">
+<!-- TODO: remove colon-->
<!ENTITY torsettings.useProxy.type "Proxytype:">
<!ENTITY torsettings.useProxy.type.placeholder "selecteer een proxytype">
+<!-- TODO: remove colon-->
<!ENTITY torsettings.useProxy.address "Adres:">
<!ENTITY torsettings.useProxy.address.placeholder "IP-adres of hostnaam">
+<!-- TODO: remove colon-->
<!ENTITY torsettings.useProxy.port "Poort:">
+<!-- TODO: remove colon-->
<!ENTITY torsettings.useProxy.username "Gebruikersnaam:">
+<!-- TODO: remove colon-->
<!ENTITY torsettings.useProxy.password "Wachtwoord:">
<!ENTITY torsettings.useProxy.type.socks4 "SOCKS 4">
<!ENTITY torsettings.useProxy.type.socks5 "SOCKS 5">
<!ENTITY torsettings.useProxy.type.http "HTTP / HTTPS">
<!ENTITY torsettings.firewall.checkbox "Deze computer gebruikt een firewall die alleen verbindingen naar bepaalde poorten toestaat">
+<!-- TODO: remove colon-->
<!ENTITY torsettings.firewall.allowedPorts "Toegestane poorten:">
<!ENTITY torsettings.useBridges.checkbox "Tor is in mijn land gecensureerd.">
<!ENTITY torsettings.useBridges.default "Een ingebouwde bridge selecteren">
@@ -55,8 +61,33 @@
<!ENTITY torsettings.proxyHelp1 "Een lokale proxy kan nodig zijn als u verbinding maakt via het netwerk van een bedrijf, school of universiteit. Als u niet zeker weet of een proxy nodig is, bekijk dan de internetinstellingen in een andere browser, of bekijk de netwerkinstellingen van uw systeem.">
<!ENTITY torsettings.bridgeHelpTitle "Bridge relay-hulp">
-<!ENTITY torsettings.bridgeHelp1 "Bridges zijn niet-vermelde relays die het moeilijker maken om verbindingen met het Tor-netwerk te blokkeren.  Elk type bridge gebruikt een andere methode om censuur te vermijden.  Bridges die obfs gebruiken, laten uw verkeer eruitzien als willekeurige ruis, en bridges die meek gebruiken, laten uw netwerkverkeer eruitzien alsof u met een andere service dan Tor verbinding maakt.">
+<!ENTITY torsettings.bridgeHelp1 "Bridges zijn niet-vermelde relays die het moeilijker maken om verbindingen met het Tor-netwerk te blokkeren.  Elk type bridge gebruikt een andere methode om censuur te vermijden.  Bridges die obfs gebruiken, laten uw verkeer eruitzien als willekeurige ruis, en bridges die meek gebruiken, laten uw verkeer eruitzien alsof u met een andere service dan Tor verbinding maakt.">
<!ENTITY torsettings.bridgeHelp2 "Vanwege de manier waarop bepaalde landen Tor proberen te blokkeren, werken sommige bridges in bepaalde landen wel, maar niet in andere.  Als u niet zeker weet welke bridges in uw land werken, bezoek dan torproject.org/about/contact.html#support">
<!-- Progress -->
<!ENTITY torprogress.pleaseWait "Even geduld; er wordt verbinding gemaakt met het Tor-netwerk.  Dit kan enkele minuten duren.">
+
+<!-- #31286 about:preferences strings -->
+<!ENTITY torPreferences.categoryTitle "Tor">
+<!ENTITY torPreferences.torSettings "Tor Settings">
+<!ENTITY torPreferences.torSettingsDescription "Tor Browser routes your traffic over the Tor Network, run by thousands of volunteers around the world." >
+<!ENTITY torPreferences.learnMore "Meer info">
+<!ENTITY torPreferences.bridges "Bridges">
+<!ENTITY torPreferences.bridgesDescription "Bridges help you access the Tor Network in places where Tor is blocked. Depending on where you are, one bridge may work better than another.">
+<!ENTITY torPreferences.useBridge "Use a bridge">
+<!-- torlauncher.request_a_new_bridge -->
+<!ENTITY torPreferences.requestNewBridge "Request a New Bridge&#x2026;">
+<!ENTITY torPreferences.provideBridge "Provide a bridge">
+<!ENTITY torPreferences.advanced "Geavanceerd">
+<!ENTITY torPreferences.advancedDescription "Configure how Tor Browser connects to the internet.">
+<!ENTITY torPreferences.firewallPortsPlaceholder "Comma-separated values">
+<!ENTITY torPreferences.requestBridgeDialogTitle "Request Bridge">
+<!-- torlauncher.contacting_bridgedb=Contacting BridgeDB. Please wait. -->
+<!ENTITY torPreferences.requestBridgeDialogWaitPrompt "Contacting BridgeDB. Please Wait.">
+<!-- torlauncher.captcha_prompt=Solve the CAPTCHA to request a bridge. -->
+<!ENTITY torPreferences.requestBridgeDialogSolvePrompt "Los de CAPTCHA op om een bridge aan te vragen.">
+<!--torlauncher.bad_captcha_solution=The solution is not correct. Please try again.-->
+<!ENTITY torPreferences.requestBridgeErrorBadSolution "De oplossing is niet juist. Probeer het opnieuw.">
+<!ENTITY torPreferences.viewTorLogs "View the Tor logs.">
+<!ENTITY torPreferences.viewLogs "View Logs&#x2026;">
+<!ENTITY torPreferences.torLogsDialogTitle "Tor Logs">
diff --git a/src/chrome/locale/nl/torlauncher.properties b/src/chrome/locale/nl/torlauncher.properties
index 6edbe32..b5f8fb1 100644
--- a/src/chrome/locale/nl/torlauncher.properties
+++ b/src/chrome/locale/nl/torlauncher.properties
@@ -4,7 +4,7 @@
torlauncher.error_title=Tor Starter
torlauncher.tor_exited_during_startup=Tor is afgesloten tijdens het opstarten. Dit kan komen door een fout in uw torrc-bestand, een bug in Tor of ander programma op uw systeem, of defecte hardware. Totdat u het onderliggende probleem oplost en Tor opnieuw start, zal Tor Browser niet opstarten.
-torlauncher.tor_exited=Tor is onverwachts afgesloten. Dit kan komen door een fout in Tor zelf, een ander programma op uw systeem, of defecte hardware. Totdat u Tor opnieuw start, zal Tor Browser geen websites kunnen bereiken. Stuur een kopie van uw Tor-logboek naar het ondersteuningsteam als het probleem zich blijft voordoen.
+torlauncher.tor_exited=Tor is onverwachts afgesloten. Dit kan komen door een bug in Tor zelf, een ander programma op uw systeem, of defecte hardware. Totdat u Tor opnieuw start, zal Tor Browser geen websites kunnen bereiken. Stuur een kopie van uw Tor-logboek naar het ondersteuningsteam als het probleem zich blijft voordoen.
torlauncher.tor_exited2=Tor herstarten zal niet uw browsertabbladen sluiten.
torlauncher.tor_controlconn_failed=Kon geen verbinding maken met Tor-controlepoort.
torlauncher.tor_failed_to_start=Tor kon niet worden gestart.
diff --git a/src/chrome/locale/nn/network-settings.dtd b/src/chrome/locale/nn/network-settings.dtd
index 808cfe1..d94e449 100644
--- a/src/chrome/locale/nn/network-settings.dtd
+++ b/src/chrome/locale/nn/network-settings.dtd
@@ -26,17 +26,23 @@
<!ENTITY torsettings.optional "Valfritt">
<!ENTITY torsettings.useProxy.checkbox "I use a proxy to connect to the Internet">
+<!-- TODO: remove colon-->
<!ENTITY torsettings.useProxy.type "Mellomtenartype:">
<!ENTITY torsettings.useProxy.type.placeholder "select a proxy type">
+<!-- TODO: remove colon-->
<!ENTITY torsettings.useProxy.address "Addresse:">
<!ENTITY torsettings.useProxy.address.placeholder "IP-adresse eller vertsnamn">
+<!-- TODO: remove colon-->
<!ENTITY torsettings.useProxy.port "Port:">
+<!-- TODO: remove colon-->
<!ENTITY torsettings.useProxy.username "Brukarnamn:">
+<!-- TODO: remove colon-->
<!ENTITY torsettings.useProxy.password "Passord:">
<!ENTITY torsettings.useProxy.type.socks4 "SOCKS 4">
<!ENTITY torsettings.useProxy.type.socks5 "SOCKS 5">
<!ENTITY torsettings.useProxy.type.http "HTTP/HTTPS">
<!ENTITY torsettings.firewall.checkbox "This computer goes through a firewall that only allows connections to certain ports">
+<!-- TODO: remove colon-->
<!ENTITY torsettings.firewall.allowedPorts "Tillatne portar:">
<!ENTITY torsettings.useBridges.checkbox "Tor is censored in my country">
<!ENTITY torsettings.useBridges.default "Select a built-in bridge">
@@ -60,3 +66,28 @@
<!-- Progress -->
<!ENTITY torprogress.pleaseWait "Please wait while we establish a connection to the Tor network.  This may take several minutes.">
+
+<!-- #31286 about:preferences strings -->
+<!ENTITY torPreferences.categoryTitle "Tor">
+<!ENTITY torPreferences.torSettings "Tor Settings">
+<!ENTITY torPreferences.torSettingsDescription "Tor Browser routes your traffic over the Tor Network, run by thousands of volunteers around the world." >
+<!ENTITY torPreferences.learnMore "Learn More">
+<!ENTITY torPreferences.bridges "Bruer">
+<!ENTITY torPreferences.bridgesDescription "Bridges help you access the Tor Network in places where Tor is blocked. Depending on where you are, one bridge may work better than another.">
+<!ENTITY torPreferences.useBridge "Use a bridge">
+<!-- torlauncher.request_a_new_bridge -->
+<!ENTITY torPreferences.requestNewBridge "Request a New Bridge&#x2026;">
+<!ENTITY torPreferences.provideBridge "Provide a bridge">
+<!ENTITY torPreferences.advanced "Advanced">
+<!ENTITY torPreferences.advancedDescription "Configure how Tor Browser connects to the internet.">
+<!ENTITY torPreferences.firewallPortsPlaceholder "Comma-separated values">
+<!ENTITY torPreferences.requestBridgeDialogTitle "Request Bridge">
+<!-- torlauncher.contacting_bridgedb=Contacting BridgeDB. Please wait. -->
+<!ENTITY torPreferences.requestBridgeDialogWaitPrompt "Contacting BridgeDB. Please Wait.">
+<!-- torlauncher.captcha_prompt=Solve the CAPTCHA to request a bridge. -->
+<!ENTITY torPreferences.requestBridgeDialogSolvePrompt "Solve the CAPTCHA to request a bridge.">
+<!--torlauncher.bad_captcha_solution=The solution is not correct. Please try again.-->
+<!ENTITY torPreferences.requestBridgeErrorBadSolution "The solution is not correct. Please try again.">
+<!ENTITY torPreferences.viewTorLogs "View the Tor logs.">
+<!ENTITY torPreferences.viewLogs "View Logs&#x2026;">
+<!ENTITY torPreferences.torLogsDialogTitle "Tor Logs">
diff --git a/src/chrome/locale/pa/network-settings.dtd b/src/chrome/locale/pa/network-settings.dtd
index 87efa6c..17f12d8 100644
--- a/src/chrome/locale/pa/network-settings.dtd
+++ b/src/chrome/locale/pa/network-settings.dtd
@@ -26,17 +26,23 @@
<!ENTITY torsettings.optional "ਚੋਣਵਾਂ">
<!ENTITY torsettings.useProxy.checkbox "I use a proxy to connect to the Internet">
+<!-- TODO: remove colon-->
<!ENTITY torsettings.useProxy.type "ਪਰਾਕਸੀ ਕਿਸਮ:">
<!ENTITY torsettings.useProxy.type.placeholder "select a proxy type">
+<!-- TODO: remove colon-->
<!ENTITY torsettings.useProxy.address "ਪਤਾ:">
<!ENTITY torsettings.useProxy.address.placeholder "IP ਸਿਰਨਾਵਾਂ ਜਾਂ ਹੋਸਟ-ਨਾਂ">
+<!-- TODO: remove colon-->
<!ENTITY torsettings.useProxy.port "Port:">
+<!-- TODO: remove colon-->
<!ENTITY torsettings.useProxy.username "ਯੂਜ਼ਰ-ਨਾਂ:">
+<!-- TODO: remove colon-->
<!ENTITY torsettings.useProxy.password "ਪਾਸਵਰਡ:">
<!ENTITY torsettings.useProxy.type.socks4 "SOCKS 4">
<!ENTITY torsettings.useProxy.type.socks5 "SOCKS 5">
<!ENTITY torsettings.useProxy.type.http "HTTP / HTTPS">
<!ENTITY torsettings.firewall.checkbox "This computer goes through a firewall that only allows connections to certain ports">
+<!-- TODO: remove colon-->
<!ENTITY torsettings.firewall.allowedPorts "Allowed Ports:">
<!ENTITY torsettings.useBridges.checkbox "Tor is censored in my country">
<!ENTITY torsettings.useBridges.default "Select a built-in bridge">
@@ -60,3 +66,28 @@
<!-- Progress -->
<!ENTITY torprogress.pleaseWait "Please wait while we establish a connection to the Tor network.  This may take several minutes.">
+
+<!-- #31286 about:preferences strings -->
+<!ENTITY torPreferences.categoryTitle "ਟੌਰ">
+<!ENTITY torPreferences.torSettings "Tor Settings">
+<!ENTITY torPreferences.torSettingsDescription "Tor Browser routes your traffic over the Tor Network, run by thousands of volunteers around the world." >
+<!ENTITY torPreferences.learnMore "Learn More">
+<!ENTITY torPreferences.bridges "Bridges">
+<!ENTITY torPreferences.bridgesDescription "Bridges help you access the Tor Network in places where Tor is blocked. Depending on where you are, one bridge may work better than another.">
+<!ENTITY torPreferences.useBridge "Use a bridge">
+<!-- torlauncher.request_a_new_bridge -->
+<!ENTITY torPreferences.requestNewBridge "Request a New Bridge&#x2026;">
+<!ENTITY torPreferences.provideBridge "Provide a bridge">
+<!ENTITY torPreferences.advanced "ਉੱਨਤ">
+<!ENTITY torPreferences.advancedDescription "Configure how Tor Browser connects to the internet.">
+<!ENTITY torPreferences.firewallPortsPlaceholder "Comma-separated values">
+<!ENTITY torPreferences.requestBridgeDialogTitle "Request Bridge">
+<!-- torlauncher.contacting_bridgedb=Contacting BridgeDB. Please wait. -->
+<!ENTITY torPreferences.requestBridgeDialogWaitPrompt "Contacting BridgeDB. Please Wait.">
+<!-- torlauncher.captcha_prompt=Solve the CAPTCHA to request a bridge. -->
+<!ENTITY torPreferences.requestBridgeDialogSolvePrompt "Solve the CAPTCHA to request a bridge.">
+<!--torlauncher.bad_captcha_solution=The solution is not correct. Please try again.-->
+<!ENTITY torPreferences.requestBridgeErrorBadSolution "The solution is not correct. Please try again.">
+<!ENTITY torPreferences.viewTorLogs "View the Tor logs.">
+<!ENTITY torPreferences.viewLogs "View Logs&#x2026;">
+<!ENTITY torPreferences.torLogsDialogTitle "Tor Logs">
diff --git a/src/chrome/locale/pl/network-settings.dtd b/src/chrome/locale/pl/network-settings.dtd
index 76131f7..e8c508d 100644
--- a/src/chrome/locale/pl/network-settings.dtd
+++ b/src/chrome/locale/pl/network-settings.dtd
@@ -26,17 +26,23 @@
<!ENTITY torsettings.optional "(opcjonalnie)">
<!ENTITY torsettings.useProxy.checkbox "Używam proxy do łączenia się z Internetem">
+<!-- TODO: remove colon-->
<!ENTITY torsettings.useProxy.type "Typ Proxy:">
<!ENTITY torsettings.useProxy.type.placeholder "wybierz typ proxy">
+<!-- TODO: remove colon-->
<!ENTITY torsettings.useProxy.address "Adres:">
<!ENTITY torsettings.useProxy.address.placeholder "Nazwa hosta lub adres IP">
+<!-- TODO: remove colon-->
<!ENTITY torsettings.useProxy.port "Port:">
+<!-- TODO: remove colon-->
<!ENTITY torsettings.useProxy.username "Użytkownik:">
+<!-- TODO: remove colon-->
<!ENTITY torsettings.useProxy.password "Hasło:">
<!ENTITY torsettings.useProxy.type.socks4 "SOCKS 4">
<!ENTITY torsettings.useProxy.type.socks5 "SOCKS 5">
<!ENTITY torsettings.useProxy.type.http "HTTP / HTTPS">
<!ENTITY torsettings.firewall.checkbox "Ten komputer pozwala na połączenie z ustalonymi portami">
+<!-- TODO: remove colon-->
<!ENTITY torsettings.firewall.allowedPorts "Dozwolone porty:">
<!ENTITY torsettings.useBridges.checkbox "Tor jest ocenzurowany w moim kraju">
<!ENTITY torsettings.useBridges.default "Wybierz wbudowany most">
@@ -60,3 +66,28 @@
<!-- Progress -->
<!ENTITY torprogress.pleaseWait "Proszę zaczekać, aż ustanowimy połączenie do sieci Tor.  To może zająć kilka minut.">
+
+<!-- #31286 about:preferences strings -->
+<!ENTITY torPreferences.categoryTitle "Tor">
+<!ENTITY torPreferences.torSettings "Tor Settings">
+<!ENTITY torPreferences.torSettingsDescription "Tor Browser routes your traffic over the Tor Network, run by thousands of volunteers around the world." >
+<!ENTITY torPreferences.learnMore "Dowiedz się więcej">
+<!ENTITY torPreferences.bridges "Mostki">
+<!ENTITY torPreferences.bridgesDescription "Bridges help you access the Tor Network in places where Tor is blocked. Depending on where you are, one bridge may work better than another.">
+<!ENTITY torPreferences.useBridge "Use a bridge">
+<!-- torlauncher.request_a_new_bridge -->
+<!ENTITY torPreferences.requestNewBridge "Request a New Bridge&#x2026;">
+<!ENTITY torPreferences.provideBridge "Provide a bridge">
+<!ENTITY torPreferences.advanced "Zaawansowane">
+<!ENTITY torPreferences.advancedDescription "Configure how Tor Browser connects to the internet.">
+<!ENTITY torPreferences.firewallPortsPlaceholder "Comma-separated values">
+<!ENTITY torPreferences.requestBridgeDialogTitle "Request Bridge">
+<!-- torlauncher.contacting_bridgedb=Contacting BridgeDB. Please wait. -->
+<!ENTITY torPreferences.requestBridgeDialogWaitPrompt "Contacting BridgeDB. Please Wait.">
+<!-- torlauncher.captcha_prompt=Solve the CAPTCHA to request a bridge. -->
+<!ENTITY torPreferences.requestBridgeDialogSolvePrompt "Rozwiąż CAPTCHA, aby poprosić o most.">
+<!--torlauncher.bad_captcha_solution=The solution is not correct. Please try again.-->
+<!ENTITY torPreferences.requestBridgeErrorBadSolution "Rozwiązanie nie jest poprawne. Proszę spróbuj ponownie.">
+<!ENTITY torPreferences.viewTorLogs "View the Tor logs.">
+<!ENTITY torPreferences.viewLogs "View Logs&#x2026;">
+<!ENTITY torPreferences.torLogsDialogTitle "Tor Logs">
diff --git a/src/chrome/locale/pt-BR/network-settings.dtd b/src/chrome/locale/pt-BR/network-settings.dtd
index 98e152a..6fbdd57 100644
--- a/src/chrome/locale/pt-BR/network-settings.dtd
+++ b/src/chrome/locale/pt-BR/network-settings.dtd
@@ -26,17 +26,23 @@
<!ENTITY torsettings.optional "Opcional">
<!ENTITY torsettings.useProxy.checkbox "Eu uso proxy para me conectar à Internet">
+<!-- TODO: remove colon-->
<!ENTITY torsettings.useProxy.type "Tipo de Proxy:">
<!ENTITY torsettings.useProxy.type.placeholder "Selecione um tipo de proxy">
+<!-- TODO: remove colon-->
<!ENTITY torsettings.useProxy.address "Endereço:">
<!ENTITY torsettings.useProxy.address.placeholder "Endereço IP ou Servidor">
+<!-- TODO: remove colon-->
<!ENTITY torsettings.useProxy.port "Porta:">
+<!-- TODO: remove colon-->
<!ENTITY torsettings.useProxy.username "Usuário:">
+<!-- TODO: remove colon-->
<!ENTITY torsettings.useProxy.password "Senha:">
<!ENTITY torsettings.useProxy.type.socks4 "SOCKS 4">
<!ENTITY torsettings.useProxy.type.socks5 "SOCKS 5">
<!ENTITY torsettings.useProxy.type.http "HTTP / HTTPS">
<!ENTITY torsettings.firewall.checkbox "A conexão Internet deste computador é filtrada por uma firewall que autoriza conexões somente a determinadas portas.">
+<!-- TODO: remove colon-->
<!ENTITY torsettings.firewall.allowedPorts "Portas habilitadas:">
<!ENTITY torsettings.useBridges.checkbox "Tor é censurado no país onde estou">
<!ENTITY torsettings.useBridges.default "Selecione uma ponte embutida">
@@ -60,3 +66,28 @@
<!-- Progress -->
<!ENTITY torprogress.pleaseWait "Por favor, aguarde enquanto estabelecemos uma conexão com a rede Tor.  Isso pode demorar alguns minutos.">
+
+<!-- #31286 about:preferences strings -->
+<!ENTITY torPreferences.categoryTitle "Tor">
+<!ENTITY torPreferences.torSettings "Tor Settings">
+<!ENTITY torPreferences.torSettingsDescription "Tor Browser routes your traffic over the Tor Network, run by thousands of volunteers around the world." >
+<!ENTITY torPreferences.learnMore "Saiba Mais">
+<!ENTITY torPreferences.bridges "Pontes">
+<!ENTITY torPreferences.bridgesDescription "Bridges help you access the Tor Network in places where Tor is blocked. Depending on where you are, one bridge may work better than another.">
+<!ENTITY torPreferences.useBridge "Use a bridge">
+<!-- torlauncher.request_a_new_bridge -->
+<!ENTITY torPreferences.requestNewBridge "Request a New Bridge&#x2026;">
+<!ENTITY torPreferences.provideBridge "Provide a bridge">
+<!ENTITY torPreferences.advanced "Avançado">
+<!ENTITY torPreferences.advancedDescription "Configure how Tor Browser connects to the internet.">
+<!ENTITY torPreferences.firewallPortsPlaceholder "Comma-separated values">
+<!ENTITY torPreferences.requestBridgeDialogTitle "Request Bridge">
+<!-- torlauncher.contacting_bridgedb=Contacting BridgeDB. Please wait. -->
+<!ENTITY torPreferences.requestBridgeDialogWaitPrompt "Contacting BridgeDB. Please Wait.">
+<!-- torlauncher.captcha_prompt=Solve the CAPTCHA to request a bridge. -->
+<!ENTITY torPreferences.requestBridgeDialogSolvePrompt "Resolva o CAPTCHA para solicitar uma ponte.">
+<!--torlauncher.bad_captcha_solution=The solution is not correct. Please try again.-->
+<!ENTITY torPreferences.requestBridgeErrorBadSolution "A solução não está correta. Por favor, tente novamente.">
+<!ENTITY torPreferences.viewTorLogs "View the Tor logs.">
+<!ENTITY torPreferences.viewLogs "View Logs&#x2026;">
+<!ENTITY torPreferences.torLogsDialogTitle "Tor Logs">
diff --git a/src/chrome/locale/pt-PT/network-settings.dtd b/src/chrome/locale/pt-PT/network-settings.dtd
index f62d4c8..0c40404 100644
--- a/src/chrome/locale/pt-PT/network-settings.dtd
+++ b/src/chrome/locale/pt-PT/network-settings.dtd
@@ -26,17 +26,23 @@
<!ENTITY torsettings.optional "Opcional">
<!ENTITY torsettings.useProxy.checkbox "Eu utilizo um proxy para ligar à Internet">
+<!-- TODO: remove colon-->
<!ENTITY torsettings.useProxy.type "Tipo de proxy:">
<!ENTITY torsettings.useProxy.type.placeholder "selecionar um tipo de proxy">
+<!-- TODO: remove colon-->
<!ENTITY torsettings.useProxy.address "Endereço:">
<!ENTITY torsettings.useProxy.address.placeholder "Endereço de IP ou nome do hospedeiro">
+<!-- TODO: remove colon-->
<!ENTITY torsettings.useProxy.port "Porta:">
+<!-- TODO: remove colon-->
<!ENTITY torsettings.useProxy.username "Nome do utilizador:">
+<!-- TODO: remove colon-->
<!ENTITY torsettings.useProxy.password "Palavra-passe:">
<!ENTITY torsettings.useProxy.type.socks4 "SOCKS 4">
<!ENTITY torsettings.useProxy.type.socks5 "SOCKS 5">
<!ENTITY torsettings.useProxy.type.http "HTTP / HTTPS">
<!ENTITY torsettings.firewall.checkbox "Este computador liga através de uma firewall que só permite ligações para determinadas portas">
+<!-- TODO: remove colon-->
<!ENTITY torsettings.firewall.allowedPorts "Portas permitidas:">
<!ENTITY torsettings.useBridges.checkbox "O Tor é censurado no meu país">
<!ENTITY torsettings.useBridges.default "Selecionar uma ponte integrada">
@@ -60,3 +66,28 @@
<!-- Progress -->
<!ENTITY torprogress.pleaseWait "Por favor, aguarde, enquanto nós estabelecemos uma ligação à rede Tor.  Isto pode demorar alguns minutos.">
+
+<!-- #31286 about:preferences strings -->
+<!ENTITY torPreferences.categoryTitle "Tor">
+<!ENTITY torPreferences.torSettings "Tor Settings">
+<!ENTITY torPreferences.torSettingsDescription "Tor Browser routes your traffic over the Tor Network, run by thousands of volunteers around the world." >
+<!ENTITY torPreferences.learnMore "Saber Mais">
+<!ENTITY torPreferences.bridges "Pontes">
+<!ENTITY torPreferences.bridgesDescription "Bridges help you access the Tor Network in places where Tor is blocked. Depending on where you are, one bridge may work better than another.">
+<!ENTITY torPreferences.useBridge "Use a bridge">
+<!-- torlauncher.request_a_new_bridge -->
+<!ENTITY torPreferences.requestNewBridge "Request a New Bridge&#x2026;">
+<!ENTITY torPreferences.provideBridge "Provide a bridge">
+<!ENTITY torPreferences.advanced "Avançado">
+<!ENTITY torPreferences.advancedDescription "Configure how Tor Browser connects to the internet.">
+<!ENTITY torPreferences.firewallPortsPlaceholder "Comma-separated values">
+<!ENTITY torPreferences.requestBridgeDialogTitle "Request Bridge">
+<!-- torlauncher.contacting_bridgedb=Contacting BridgeDB. Please wait. -->
+<!ENTITY torPreferences.requestBridgeDialogWaitPrompt "Contacting BridgeDB. Please Wait.">
+<!-- torlauncher.captcha_prompt=Solve the CAPTCHA to request a bridge. -->
+<!ENTITY torPreferences.requestBridgeDialogSolvePrompt "Resolva o CAPTCHA para solicitar uma ponte.">
+<!--torlauncher.bad_captcha_solution=The solution is not correct. Please try again.-->
+<!ENTITY torPreferences.requestBridgeErrorBadSolution "A solução não está correta. Por favor, tente novamente.">
+<!ENTITY torPreferences.viewTorLogs "View the Tor logs.">
+<!ENTITY torPreferences.viewLogs "View Logs&#x2026;">
+<!ENTITY torPreferences.torLogsDialogTitle "Tor Logs">
diff --git a/src/chrome/locale/ro/network-settings.dtd b/src/chrome/locale/ro/network-settings.dtd
index cc428b8..602aa09 100644
--- a/src/chrome/locale/ro/network-settings.dtd
+++ b/src/chrome/locale/ro/network-settings.dtd
@@ -26,17 +26,23 @@
<!ENTITY torsettings.optional "Opțional">
<!ENTITY torsettings.useProxy.checkbox "Folosesc un proxy pentru a mă conecta la Internet">
+<!-- TODO: remove colon-->
<!ENTITY torsettings.useProxy.type "Tip proxy:">
<!ENTITY torsettings.useProxy.type.placeholder "alege un tip de proxy">
+<!-- TODO: remove colon-->
<!ENTITY torsettings.useProxy.address "Adresă:">
<!ENTITY torsettings.useProxy.address.placeholder "Adresă IP sau hostname">
+<!-- TODO: remove colon-->
<!ENTITY torsettings.useProxy.port "Port:">
+<!-- TODO: remove colon-->
<!ENTITY torsettings.useProxy.username "Nume utilizator:">
+<!-- TODO: remove colon-->
<!ENTITY torsettings.useProxy.password "Parola:">
<!ENTITY torsettings.useProxy.type.socks4 "SOCKS 4">
<!ENTITY torsettings.useProxy.type.socks5 "SOCKS 5">
<!ENTITY torsettings.useProxy.type.http "HTTP / HTTPS">
<!ENTITY torsettings.firewall.checkbox "Acest computer trece printr-un firewall care permite doar conexiuni către anumite porturi">
+<!-- TODO: remove colon-->
<!ENTITY torsettings.firewall.allowedPorts "Porturi permise:">
<!ENTITY torsettings.useBridges.checkbox "Tor este cenzurat în țara mea">
<!ENTITY torsettings.useBridges.default "Selectează o punte integrată">
@@ -60,3 +66,28 @@
<!-- Progress -->
<!ENTITY torprogress.pleaseWait "Te rugăm să aștepți până ce stabilim o conexiune cu rețeaua Tor.   Aceasta poate dura mai multe minute.">
+
+<!-- #31286 about:preferences strings -->
+<!ENTITY torPreferences.categoryTitle "Tor">
+<!ENTITY torPreferences.torSettings "Tor Settings">
+<!ENTITY torPreferences.torSettingsDescription "Tor Browser routes your traffic over the Tor Network, run by thousands of volunteers around the world." >
+<!ENTITY torPreferences.learnMore "Află mai multe">
+<!ENTITY torPreferences.bridges "Punți">
+<!ENTITY torPreferences.bridgesDescription "Bridges help you access the Tor Network in places where Tor is blocked. Depending on where you are, one bridge may work better than another.">
+<!ENTITY torPreferences.useBridge "Use a bridge">
+<!-- torlauncher.request_a_new_bridge -->
+<!ENTITY torPreferences.requestNewBridge "Request a New Bridge&#x2026;">
+<!ENTITY torPreferences.provideBridge "Provide a bridge">
+<!ENTITY torPreferences.advanced "Avansat">
+<!ENTITY torPreferences.advancedDescription "Configure how Tor Browser connects to the internet.">
+<!ENTITY torPreferences.firewallPortsPlaceholder "Comma-separated values">
+<!ENTITY torPreferences.requestBridgeDialogTitle "Request Bridge">
+<!-- torlauncher.contacting_bridgedb=Contacting BridgeDB. Please wait. -->
+<!ENTITY torPreferences.requestBridgeDialogWaitPrompt "Contacting BridgeDB. Please Wait.">
+<!-- torlauncher.captcha_prompt=Solve the CAPTCHA to request a bridge. -->
+<!ENTITY torPreferences.requestBridgeDialogSolvePrompt "Rezolvă acest CAPTCHA pentru a cere o punte.">
+<!--torlauncher.bad_captcha_solution=The solution is not correct. Please try again.-->
+<!ENTITY torPreferences.requestBridgeErrorBadSolution "Soluția nu este corectă. Încearcă din nou.">
+<!ENTITY torPreferences.viewTorLogs "View the Tor logs.">
+<!ENTITY torPreferences.viewLogs "View Logs&#x2026;">
+<!ENTITY torPreferences.torLogsDialogTitle "Tor Logs">
diff --git a/src/chrome/locale/ru/network-settings.dtd b/src/chrome/locale/ru/network-settings.dtd
index aa45c11..f4b0918 100644
--- a/src/chrome/locale/ru/network-settings.dtd
+++ b/src/chrome/locale/ru/network-settings.dtd
@@ -26,17 +26,23 @@
<!ENTITY torsettings.optional "Необязательно">
<!ENTITY torsettings.useProxy.checkbox "Я использую прокси для подключения к интернету">
+<!-- TODO: remove colon-->
<!ENTITY torsettings.useProxy.type "Тип прокси:">
<!ENTITY torsettings.useProxy.type.placeholder "выбор типа прокси">
+<!-- TODO: remove colon-->
<!ENTITY torsettings.useProxy.address "Адрес:">
<!ENTITY torsettings.useProxy.address.placeholder "IP-адрес или имя узла">
+<!-- TODO: remove colon-->
<!ENTITY torsettings.useProxy.port "Порт:">
+<!-- TODO: remove colon-->
<!ENTITY torsettings.useProxy.username "Имя пользователя:">
+<!-- TODO: remove colon-->
<!ENTITY torsettings.useProxy.password "Пароль:">
<!ENTITY torsettings.useProxy.type.socks4 "SOCKS 4">
<!ENTITY torsettings.useProxy.type.socks5 "SOCKS 5">
<!ENTITY torsettings.useProxy.type.http "HTTP / HTTPS">
<!ENTITY torsettings.firewall.checkbox "Мой сетевой экран позволяет мне подключиться только к определенным портам">
+<!-- TODO: remove colon-->
<!ENTITY torsettings.firewall.allowedPorts "Разрешенные порты:">
<!ENTITY torsettings.useBridges.checkbox "Tor запрещен в моей стране">
<!ENTITY torsettings.useBridges.default "Выбрать встроенный мост">
@@ -60,3 +66,28 @@
<!-- Progress -->
<!ENTITY torprogress.pleaseWait "Пожалуйста, подождите, пока мы установим подключение к сети Tor.  Это может занять несколько минут.">
+
+<!-- #31286 about:preferences strings -->
+<!ENTITY torPreferences.categoryTitle "Tor">
+<!ENTITY torPreferences.torSettings "Tor Settings">
+<!ENTITY torPreferences.torSettingsDescription "Tor Browser routes your traffic over the Tor Network, run by thousands of volunteers around the world." >
+<!ENTITY torPreferences.learnMore "Подробнее">
+<!ENTITY torPreferences.bridges "Мосты">
+<!ENTITY torPreferences.bridgesDescription "Bridges help you access the Tor Network in places where Tor is blocked. Depending on where you are, one bridge may work better than another.">
+<!ENTITY torPreferences.useBridge "Use a bridge">
+<!-- torlauncher.request_a_new_bridge -->
+<!ENTITY torPreferences.requestNewBridge "Request a New Bridge&#x2026;">
+<!ENTITY torPreferences.provideBridge "Provide a bridge">
+<!ENTITY torPreferences.advanced "Дополнительно">
+<!ENTITY torPreferences.advancedDescription "Configure how Tor Browser connects to the internet.">
+<!ENTITY torPreferences.firewallPortsPlaceholder "Comma-separated values">
+<!ENTITY torPreferences.requestBridgeDialogTitle "Request Bridge">
+<!-- torlauncher.contacting_bridgedb=Contacting BridgeDB. Please wait. -->
+<!ENTITY torPreferences.requestBridgeDialogWaitPrompt "Contacting BridgeDB. Please Wait.">
+<!-- torlauncher.captcha_prompt=Solve the CAPTCHA to request a bridge. -->
+<!ENTITY torPreferences.requestBridgeDialogSolvePrompt "Решите CAPTCHA для запроса моста.">
+<!--torlauncher.bad_captcha_solution=The solution is not correct. Please try again.-->
+<!ENTITY torPreferences.requestBridgeErrorBadSolution "Решение не является правильным. Попробуйте еще раз.">
+<!ENTITY torPreferences.viewTorLogs "View the Tor logs.">
+<!ENTITY torPreferences.viewLogs "View Logs&#x2026;">
+<!ENTITY torPreferences.torLogsDialogTitle "Tor Logs">
diff --git a/src/chrome/locale/si-LK/network-settings.dtd b/src/chrome/locale/si-LK/network-settings.dtd
index 28e41e3..bbc6322 100644
--- a/src/chrome/locale/si-LK/network-settings.dtd
+++ b/src/chrome/locale/si-LK/network-settings.dtd
@@ -26,17 +26,23 @@
<!ENTITY torsettings.optional "අමතර">
<!ENTITY torsettings.useProxy.checkbox "I use a proxy to connect to the Internet">
+<!-- TODO: remove colon-->
<!ENTITY torsettings.useProxy.type "නියුතු සේවාදායක වර්ගය:">
<!ENTITY torsettings.useProxy.type.placeholder "select a proxy type">
+<!-- TODO: remove colon-->
<!ENTITY torsettings.useProxy.address "ලිපිනය:">
<!ENTITY torsettings.useProxy.address.placeholder "IP ලිපිනය හෝ සත්කාරක නාමය">
+<!-- TODO: remove colon-->
<!ENTITY torsettings.useProxy.port "පොර්ටය:">
+<!-- TODO: remove colon-->
<!ENTITY torsettings.useProxy.username "පරිශීලක නාමය">
+<!-- TODO: remove colon-->
<!ENTITY torsettings.useProxy.password "මුරපදය">
<!ENTITY torsettings.useProxy.type.socks4 "4 වැනි සොකට්ටුව">
<!ENTITY torsettings.useProxy.type.socks5 "5 වැනි සොකට්ටුව">
<!ENTITY torsettings.useProxy.type.http "HTTP / HTTPS">
<!ENTITY torsettings.firewall.checkbox "මෙම පරිගණකය විශේෂිත ports සදහා සම්බන්ධ වීමට ඉඩදෙන පරිදි firewall එකක් හරහා ගමන් කරයි.">
+<!-- TODO: remove colon-->
<!ENTITY torsettings.firewall.allowedPorts "අනුමත Ports">
<!ENTITY torsettings.useBridges.checkbox "Tor is censored in my country">
<!ENTITY torsettings.useBridges.default "Select a built-in bridge">
@@ -60,3 +66,28 @@
<!-- Progress -->
<!ENTITY torprogress.pleaseWait "Please wait while we establish a connection to the Tor network.  This may take several minutes.">
+
+<!-- #31286 about:preferences strings -->
+<!ENTITY torPreferences.categoryTitle "Tor">
+<!ENTITY torPreferences.torSettings "Tor Settings">
+<!ENTITY torPreferences.torSettingsDescription "Tor Browser routes your traffic over the Tor Network, run by thousands of volunteers around the world." >
+<!ENTITY torPreferences.learnMore "Learn More">
+<!ENTITY torPreferences.bridges "සේතු">
+<!ENTITY torPreferences.bridgesDescription "Bridges help you access the Tor Network in places where Tor is blocked. Depending on where you are, one bridge may work better than another.">
+<!ENTITY torPreferences.useBridge "Use a bridge">
+<!-- torlauncher.request_a_new_bridge -->
+<!ENTITY torPreferences.requestNewBridge "Request a New Bridge&#x2026;">
+<!ENTITY torPreferences.provideBridge "Provide a bridge">
+<!ENTITY torPreferences.advanced "උසස් ">
+<!ENTITY torPreferences.advancedDescription "Configure how Tor Browser connects to the internet.">
+<!ENTITY torPreferences.firewallPortsPlaceholder "Comma-separated values">
+<!ENTITY torPreferences.requestBridgeDialogTitle "Request Bridge">
+<!-- torlauncher.contacting_bridgedb=Contacting BridgeDB. Please wait. -->
+<!ENTITY torPreferences.requestBridgeDialogWaitPrompt "Contacting BridgeDB. Please Wait.">
+<!-- torlauncher.captcha_prompt=Solve the CAPTCHA to request a bridge. -->
+<!ENTITY torPreferences.requestBridgeDialogSolvePrompt "Solve the CAPTCHA to request a bridge.">
+<!--torlauncher.bad_captcha_solution=The solution is not correct. Please try again.-->
+<!ENTITY torPreferences.requestBridgeErrorBadSolution "The solution is not correct. Please try again.">
+<!ENTITY torPreferences.viewTorLogs "View the Tor logs.">
+<!ENTITY torPreferences.viewLogs "View Logs&#x2026;">
+<!ENTITY torPreferences.torLogsDialogTitle "Tor Logs">
diff --git a/src/chrome/locale/sk/network-settings.dtd b/src/chrome/locale/sk/network-settings.dtd
index 5ab733a..f73bc29 100644
--- a/src/chrome/locale/sk/network-settings.dtd
+++ b/src/chrome/locale/sk/network-settings.dtd
@@ -26,17 +26,23 @@
<!ENTITY torsettings.optional "Voliteľné">
<!ENTITY torsettings.useProxy.checkbox "Na pripojenie k internetu používam proxy">
+<!-- TODO: remove colon-->
<!ENTITY torsettings.useProxy.type "Typ Proxy:">
<!ENTITY torsettings.useProxy.type.placeholder "vybrať typ proxy">
+<!-- TODO: remove colon-->
<!ENTITY torsettings.useProxy.address "Adresa:">
<!ENTITY torsettings.useProxy.address.placeholder "IP adresa alebo názov hostiteľa">
+<!-- TODO: remove colon-->
<!ENTITY torsettings.useProxy.port "Port:">
+<!-- TODO: remove colon-->
<!ENTITY torsettings.useProxy.username "Už.názov:">
+<!-- TODO: remove colon-->
<!ENTITY torsettings.useProxy.password "Heslo?">
<!ENTITY torsettings.useProxy.type.socks4 "SOCKS 4">
<!ENTITY torsettings.useProxy.type.socks5 "SOCKS 5">
<!ENTITY torsettings.useProxy.type.http "HTTP / HTTPS">
<!ENTITY torsettings.firewall.checkbox "Tento počítač ide cez firewall, ktorý povoľuje iba niektoré porty">
+<!-- TODO: remove colon-->
<!ENTITY torsettings.firewall.allowedPorts "Povolené porty:">
<!ENTITY torsettings.useBridges.checkbox "Tor je v mojej krajine cenzurovaný">
<!ENTITY torsettings.useBridges.default "Zvoľte zabudované premostenie">
@@ -60,3 +66,28 @@
<!-- Progress -->
<!ENTITY torprogress.pleaseWait "Prosím počkajte na vytvorenie pripojenia do siete Tor.  Môže to trvať niekoľko minút. ">
+
+<!-- #31286 about:preferences strings -->
+<!ENTITY torPreferences.categoryTitle "Tor">
+<!ENTITY torPreferences.torSettings "Tor Settings">
+<!ENTITY torPreferences.torSettingsDescription "Tor Browser routes your traffic over the Tor Network, run by thousands of volunteers around the world." >
+<!ENTITY torPreferences.learnMore "Learn More">
+<!ENTITY torPreferences.bridges "Mosty">
+<!ENTITY torPreferences.bridgesDescription "Bridges help you access the Tor Network in places where Tor is blocked. Depending on where you are, one bridge may work better than another.">
+<!ENTITY torPreferences.useBridge "Use a bridge">
+<!-- torlauncher.request_a_new_bridge -->
+<!ENTITY torPreferences.requestNewBridge "Request a New Bridge&#x2026;">
+<!ENTITY torPreferences.provideBridge "Provide a bridge">
+<!ENTITY torPreferences.advanced "Pokročilé">
+<!ENTITY torPreferences.advancedDescription "Configure how Tor Browser connects to the internet.">
+<!ENTITY torPreferences.firewallPortsPlaceholder "Comma-separated values">
+<!ENTITY torPreferences.requestBridgeDialogTitle "Request Bridge">
+<!-- torlauncher.contacting_bridgedb=Contacting BridgeDB. Please wait. -->
+<!ENTITY torPreferences.requestBridgeDialogWaitPrompt "Contacting BridgeDB. Please Wait.">
+<!-- torlauncher.captcha_prompt=Solve the CAPTCHA to request a bridge. -->
+<!ENTITY torPreferences.requestBridgeDialogSolvePrompt "Vyrieš CAPTCHA na vyžiadanie premostenia.">
+<!--torlauncher.bad_captcha_solution=The solution is not correct. Please try again.-->
+<!ENTITY torPreferences.requestBridgeErrorBadSolution "Riešenie nie je správne. Prosím skúste znova.">
+<!ENTITY torPreferences.viewTorLogs "View the Tor logs.">
+<!ENTITY torPreferences.viewLogs "View Logs&#x2026;">
+<!ENTITY torPreferences.torLogsDialogTitle "Tor Logs">
diff --git a/src/chrome/locale/sl/network-settings.dtd b/src/chrome/locale/sl/network-settings.dtd
index 806626a..d3119fd 100644
--- a/src/chrome/locale/sl/network-settings.dtd
+++ b/src/chrome/locale/sl/network-settings.dtd
@@ -26,17 +26,23 @@
<!ENTITY torsettings.optional "Po izbiri">
<!ENTITY torsettings.useProxy.checkbox "I use a proxy to connect to the Internet">
+<!-- TODO: remove colon-->
<!ENTITY torsettings.useProxy.type "Proxy tip:">
<!ENTITY torsettings.useProxy.type.placeholder "select a proxy type">
+<!-- TODO: remove colon-->
<!ENTITY torsettings.useProxy.address "Naslov:">
<!ENTITY torsettings.useProxy.address.placeholder "IP naslov ali ime domene">
+<!-- TODO: remove colon-->
<!ENTITY torsettings.useProxy.port "vrata:">
+<!-- TODO: remove colon-->
<!ENTITY torsettings.useProxy.username "Uporabniško ime:">
+<!-- TODO: remove colon-->
<!ENTITY torsettings.useProxy.password "Geslo:">
<!ENTITY torsettings.useProxy.type.socks4 "SOCKS 4">
<!ENTITY torsettings.useProxy.type.socks5 "SOCKS 5">
<!ENTITY torsettings.useProxy.type.http "HTTP / HTTPS">
<!ENTITY torsettings.firewall.checkbox "Računalnik uporablja požarni zid, ki dovoljuje povezavo le na določena vrata">
+<!-- TODO: remove colon-->
<!ENTITY torsettings.firewall.allowedPorts "Dovoljena vrata:">
<!ENTITY torsettings.useBridges.checkbox "Tor is censored in my country">
<!ENTITY torsettings.useBridges.default "Select a built-in bridge">
@@ -60,3 +66,28 @@
<!-- Progress -->
<!ENTITY torprogress.pleaseWait "Please wait while we establish a connection to the Tor network.  This may take several minutes.">
+
+<!-- #31286 about:preferences strings -->
+<!ENTITY torPreferences.categoryTitle "Tor">
+<!ENTITY torPreferences.torSettings "Tor Settings">
+<!ENTITY torPreferences.torSettingsDescription "Tor Browser routes your traffic over the Tor Network, run by thousands of volunteers around the world." >
+<!ENTITY torPreferences.learnMore "Learn More">
+<!ENTITY torPreferences.bridges "Mostovi">
+<!ENTITY torPreferences.bridgesDescription "Bridges help you access the Tor Network in places where Tor is blocked. Depending on where you are, one bridge may work better than another.">
+<!ENTITY torPreferences.useBridge "Use a bridge">
+<!-- torlauncher.request_a_new_bridge -->
+<!ENTITY torPreferences.requestNewBridge "Request a New Bridge&#x2026;">
+<!ENTITY torPreferences.provideBridge "Provide a bridge">
+<!ENTITY torPreferences.advanced "Napredno">
+<!ENTITY torPreferences.advancedDescription "Configure how Tor Browser connects to the internet.">
+<!ENTITY torPreferences.firewallPortsPlaceholder "Comma-separated values">
+<!ENTITY torPreferences.requestBridgeDialogTitle "Request Bridge">
+<!-- torlauncher.contacting_bridgedb=Contacting BridgeDB. Please wait. -->
+<!ENTITY torPreferences.requestBridgeDialogWaitPrompt "Contacting BridgeDB. Please Wait.">
+<!-- torlauncher.captcha_prompt=Solve the CAPTCHA to request a bridge. -->
+<!ENTITY torPreferences.requestBridgeDialogSolvePrompt "Solve the CAPTCHA to request a bridge.">
+<!--torlauncher.bad_captcha_solution=The solution is not correct. Please try again.-->
+<!ENTITY torPreferences.requestBridgeErrorBadSolution "The solution is not correct. Please try again.">
+<!ENTITY torPreferences.viewTorLogs "View the Tor logs.">
+<!ENTITY torPreferences.viewLogs "View Logs&#x2026;">
+<!ENTITY torPreferences.torLogsDialogTitle "Tor Logs">
diff --git a/src/chrome/locale/sq/network-settings.dtd b/src/chrome/locale/sq/network-settings.dtd
index c33a2dd..e5ca0fc 100644
--- a/src/chrome/locale/sq/network-settings.dtd
+++ b/src/chrome/locale/sq/network-settings.dtd
@@ -26,17 +26,23 @@
<!ENTITY torsettings.optional "Me zgjedhje">
<!ENTITY torsettings.useProxy.checkbox "Unë përdor një proxy për tu lidhur në Internet">
+<!-- TODO: remove colon-->
<!ENTITY torsettings.useProxy.type "Lloji i Proxy-t:">
<!ENTITY torsettings.useProxy.type.placeholder "select a proxy type">
+<!-- TODO: remove colon-->
<!ENTITY torsettings.useProxy.address "Adresa:">
<!ENTITY torsettings.useProxy.address.placeholder "Adresa IP ose emri i pritësit">
+<!-- TODO: remove colon-->
<!ENTITY torsettings.useProxy.port "Porta:">
+<!-- TODO: remove colon-->
<!ENTITY torsettings.useProxy.username "Emri i përdoruesit:">
+<!-- TODO: remove colon-->
<!ENTITY torsettings.useProxy.password "Fjalëkalimi:">
<!ENTITY torsettings.useProxy.type.socks4 "SOCKS 4">
<!ENTITY torsettings.useProxy.type.socks5 "SOCKS 5">
<!ENTITY torsettings.useProxy.type.http "HTTP / HTTPS">
<!ENTITY torsettings.firewall.checkbox "Ky kompjuter kalon përmes një muri mbrojtës, që i lejon lidhje vetëm me disa porta.">
+<!-- TODO: remove colon-->
<!ENTITY torsettings.firewall.allowedPorts "Portat e Lejuara:">
<!ENTITY torsettings.useBridges.checkbox "TOR është i çensuruar në vëndin tim">
<!ENTITY torsettings.useBridges.default "Zgjidh një urë të paracaktuar">
@@ -60,3 +66,28 @@
<!-- Progress -->
<!ENTITY torprogress.pleaseWait "Ju lutemi prisni derisa të vendosim një lidhje me rrjetin e Tor.  Kjo mund të kërkojë disa minuta.">
+
+<!-- #31286 about:preferences strings -->
+<!ENTITY torPreferences.categoryTitle "Tor">
+<!ENTITY torPreferences.torSettings "Tor Settings">
+<!ENTITY torPreferences.torSettingsDescription "Tor Browser routes your traffic over the Tor Network, run by thousands of volunteers around the world." >
+<!ENTITY torPreferences.learnMore "Learn More">
+<!ENTITY torPreferences.bridges "Urat">
+<!ENTITY torPreferences.bridgesDescription "Bridges help you access the Tor Network in places where Tor is blocked. Depending on where you are, one bridge may work better than another.">
+<!ENTITY torPreferences.useBridge "Use a bridge">
+<!-- torlauncher.request_a_new_bridge -->
+<!ENTITY torPreferences.requestNewBridge "Request a New Bridge&#x2026;">
+<!ENTITY torPreferences.provideBridge "Provide a bridge">
+<!ENTITY torPreferences.advanced "Të mëtejshme">
+<!ENTITY torPreferences.advancedDescription "Configure how Tor Browser connects to the internet.">
+<!ENTITY torPreferences.firewallPortsPlaceholder "Comma-separated values">
+<!ENTITY torPreferences.requestBridgeDialogTitle "Request Bridge">
+<!-- torlauncher.contacting_bridgedb=Contacting BridgeDB. Please wait. -->
+<!ENTITY torPreferences.requestBridgeDialogWaitPrompt "Contacting BridgeDB. Please Wait.">
+<!-- torlauncher.captcha_prompt=Solve the CAPTCHA to request a bridge. -->
+<!ENTITY torPreferences.requestBridgeDialogSolvePrompt "Solve the CAPTCHA to request a bridge.">
+<!--torlauncher.bad_captcha_solution=The solution is not correct. Please try again.-->
+<!ENTITY torPreferences.requestBridgeErrorBadSolution "The solution is not correct. Please try again.">
+<!ENTITY torPreferences.viewTorLogs "View the Tor logs.">
+<!ENTITY torPreferences.viewLogs "View Logs&#x2026;">
+<!ENTITY torPreferences.torLogsDialogTitle "Tor Logs">
diff --git a/src/chrome/locale/sr/network-settings.dtd b/src/chrome/locale/sr/network-settings.dtd
index 7dcd5e2..8c46da8 100644
--- a/src/chrome/locale/sr/network-settings.dtd
+++ b/src/chrome/locale/sr/network-settings.dtd
@@ -26,17 +26,23 @@
<!ENTITY torsettings.optional "Опционо">
<!ENTITY torsettings.useProxy.checkbox "Koristim proxy za povezivanje na internet">
+<!-- TODO: remove colon-->
<!ENTITY torsettings.useProxy.type "Врста proxyja:">
<!ENTITY torsettings.useProxy.type.placeholder "изаберите тип проксија">
+<!-- TODO: remove colon-->
<!ENTITY torsettings.useProxy.address "Adresa:">
<!ENTITY torsettings.useProxy.address.placeholder "IP адреса или hostname">
+<!-- TODO: remove colon-->
<!ENTITY torsettings.useProxy.port "Порт:">
+<!-- TODO: remove colon-->
<!ENTITY torsettings.useProxy.username "Корисничко име:">
+<!-- TODO: remove colon-->
<!ENTITY torsettings.useProxy.password "Lozinka:">
<!ENTITY torsettings.useProxy.type.socks4 "SOCKS 4">
<!ENTITY torsettings.useProxy.type.socks5 "SOCKS 5">
<!ENTITY torsettings.useProxy.type.http "HTTP / HTTPS">
<!ENTITY torsettings.firewall.checkbox "Овај рачунар пролази кроз firewall који дозвољава само конекције на одређене портове.">
+<!-- TODO: remove colon-->
<!ENTITY torsettings.firewall.allowedPorts "Дозвољени Портови:">
<!ENTITY torsettings.useBridges.checkbox "Тор је цензурисан у мојој земљи">
<!ENTITY torsettings.useBridges.default "Odaberi ugrađeni most">
@@ -60,3 +66,28 @@
<!-- Progress -->
<!ENTITY torprogress.pleaseWait "Molimo sačekajte dok uspostavljamo vezu sa Tor mrežom.  Ovo može potrajati nekoliko minuta.">
+
+<!-- #31286 about:preferences strings -->
+<!ENTITY torPreferences.categoryTitle "Tor">
+<!ENTITY torPreferences.torSettings "Tor Settings">
+<!ENTITY torPreferences.torSettingsDescription "Tor Browser routes your traffic over the Tor Network, run by thousands of volunteers around the world." >
+<!ENTITY torPreferences.learnMore "Learn More">
+<!ENTITY torPreferences.bridges "Mostovi">
+<!ENTITY torPreferences.bridgesDescription "Bridges help you access the Tor Network in places where Tor is blocked. Depending on where you are, one bridge may work better than another.">
+<!ENTITY torPreferences.useBridge "Use a bridge">
+<!-- torlauncher.request_a_new_bridge -->
+<!ENTITY torPreferences.requestNewBridge "Request a New Bridge&#x2026;">
+<!ENTITY torPreferences.provideBridge "Provide a bridge">
+<!ENTITY torPreferences.advanced "Напредно">
+<!ENTITY torPreferences.advancedDescription "Configure how Tor Browser connects to the internet.">
+<!ENTITY torPreferences.firewallPortsPlaceholder "Comma-separated values">
+<!ENTITY torPreferences.requestBridgeDialogTitle "Request Bridge">
+<!-- torlauncher.contacting_bridgedb=Contacting BridgeDB. Please wait. -->
+<!ENTITY torPreferences.requestBridgeDialogWaitPrompt "Contacting BridgeDB. Please Wait.">
+<!-- torlauncher.captcha_prompt=Solve the CAPTCHA to request a bridge. -->
+<!ENTITY torPreferences.requestBridgeDialogSolvePrompt "Rešite CAPTCHA da biste zahtevali most.">
+<!--torlauncher.bad_captcha_solution=The solution is not correct. Please try again.-->
+<!ENTITY torPreferences.requestBridgeErrorBadSolution "Rešenje nije ispravno. Molimo pokušajte ponovo.">
+<!ENTITY torPreferences.viewTorLogs "View the Tor logs.">
+<!ENTITY torPreferences.viewLogs "View Logs&#x2026;">
+<!ENTITY torPreferences.torLogsDialogTitle "Tor Logs">
diff --git a/src/chrome/locale/sv/network-settings.dtd b/src/chrome/locale/sv/network-settings.dtd
index 95a0720..09616d1 100644
--- a/src/chrome/locale/sv/network-settings.dtd
+++ b/src/chrome/locale/sv/network-settings.dtd
@@ -26,17 +26,23 @@
<!ENTITY torsettings.optional "Valfritt">
<!ENTITY torsettings.useProxy.checkbox "Jag använder en proxy för att ansluta till internet">
+<!-- TODO: remove colon-->
<!ENTITY torsettings.useProxy.type "Proxytyp:">
<!ENTITY torsettings.useProxy.type.placeholder "Välj en proxytyp">
+<!-- TODO: remove colon-->
<!ENTITY torsettings.useProxy.address "Adress:">
<!ENTITY torsettings.useProxy.address.placeholder "IP-adress eller värdnamn">
+<!-- TODO: remove colon-->
<!ENTITY torsettings.useProxy.port "Port:">
+<!-- TODO: remove colon-->
<!ENTITY torsettings.useProxy.username "Användarnamn:">
+<!-- TODO: remove colon-->
<!ENTITY torsettings.useProxy.password "Lösenord:">
<!ENTITY torsettings.useProxy.type.socks4 "SOCKS 4">
<!ENTITY torsettings.useProxy.type.socks5 "SOCKS 5">
<!ENTITY torsettings.useProxy.type.http "HTTP / HTTPS">
<!ENTITY torsettings.firewall.checkbox "Denna dator går genom en brandvägg som bara tillåter anslutningar på vissa specifika portar.">
+<!-- TODO: remove colon-->
<!ENTITY torsettings.firewall.allowedPorts "Tillåtna portar:">
<!ENTITY torsettings.useBridges.checkbox "Tor är censurerat i mitt land">
<!ENTITY torsettings.useBridges.default "Välj en inbyggd bro">
@@ -60,3 +66,28 @@
<!-- Progress -->
<!ENTITY torprogress.pleaseWait "Var god och vänta medan vi etablerar en anslutning till Tor-nätverket.   Detta kan ta upp till flera minuter.">
+
+<!-- #31286 about:preferences strings -->
+<!ENTITY torPreferences.categoryTitle "Tor">
+<!ENTITY torPreferences.torSettings "Tor Settings">
+<!ENTITY torPreferences.torSettingsDescription "Tor Browser routes your traffic over the Tor Network, run by thousands of volunteers around the world." >
+<!ENTITY torPreferences.learnMore "Läs mer">
+<!ENTITY torPreferences.bridges "Broar">
+<!ENTITY torPreferences.bridgesDescription "Bridges help you access the Tor Network in places where Tor is blocked. Depending on where you are, one bridge may work better than another.">
+<!ENTITY torPreferences.useBridge "Use a bridge">
+<!-- torlauncher.request_a_new_bridge -->
+<!ENTITY torPreferences.requestNewBridge "Request a New Bridge&#x2026;">
+<!ENTITY torPreferences.provideBridge "Provide a bridge">
+<!ENTITY torPreferences.advanced "Avancerat">
+<!ENTITY torPreferences.advancedDescription "Configure how Tor Browser connects to the internet.">
+<!ENTITY torPreferences.firewallPortsPlaceholder "Comma-separated values">
+<!ENTITY torPreferences.requestBridgeDialogTitle "Request Bridge">
+<!-- torlauncher.contacting_bridgedb=Contacting BridgeDB. Please wait. -->
+<!ENTITY torPreferences.requestBridgeDialogWaitPrompt "Contacting BridgeDB. Please Wait.">
+<!-- torlauncher.captcha_prompt=Solve the CAPTCHA to request a bridge. -->
+<!ENTITY torPreferences.requestBridgeDialogSolvePrompt "Lös CAPTCHA:n för att begära en bro.">
+<!--torlauncher.bad_captcha_solution=The solution is not correct. Please try again.-->
+<!ENTITY torPreferences.requestBridgeErrorBadSolution "Lösningen är inte korrekt. Vänligen försök igen.">
+<!ENTITY torPreferences.viewTorLogs "View the Tor logs.">
+<!ENTITY torPreferences.viewLogs "View Logs&#x2026;">
+<!ENTITY torPreferences.torLogsDialogTitle "Tor Logs">
diff --git a/src/chrome/locale/sw/network-settings.dtd b/src/chrome/locale/sw/network-settings.dtd
index c6c5687..879715c 100644
--- a/src/chrome/locale/sw/network-settings.dtd
+++ b/src/chrome/locale/sw/network-settings.dtd
@@ -26,17 +26,23 @@
<!ENTITY torsettings.optional "Optional">
<!ENTITY torsettings.useProxy.checkbox "I use a proxy to connect to the Internet">
+<!-- TODO: remove colon-->
<!ENTITY torsettings.useProxy.type "Proxy Type:">
<!ENTITY torsettings.useProxy.type.placeholder "select a proxy type">
+<!-- TODO: remove colon-->
<!ENTITY torsettings.useProxy.address "Address:">
<!ENTITY torsettings.useProxy.address.placeholder "IP address or hostname">
-<!ENTITY torsettings.useProxy.port "Port:">
+<!-- TODO: remove colon-->
+<!ENTITY torsettings.useProxy.port "Kituo:">
+<!-- TODO: remove colon-->
<!ENTITY torsettings.useProxy.username "Username:">
+<!-- TODO: remove colon-->
<!ENTITY torsettings.useProxy.password "Password:">
<!ENTITY torsettings.useProxy.type.socks4 "SOCKS 4">
<!ENTITY torsettings.useProxy.type.socks5 "SOCKS 5">
<!ENTITY torsettings.useProxy.type.http "HTTP / HTTPS">
<!ENTITY torsettings.firewall.checkbox "This computer goes through a firewall that only allows connections to certain ports">
+<!-- TODO: remove colon-->
<!ENTITY torsettings.firewall.allowedPorts "Allowed Ports:">
<!ENTITY torsettings.useBridges.checkbox "Tor is censored in my country">
<!ENTITY torsettings.useBridges.default "Select a built-in bridge">
@@ -60,3 +66,28 @@
<!-- Progress -->
<!ENTITY torprogress.pleaseWait "Please wait while we establish a connection to the Tor network.  This may take several minutes.">
+
+<!-- #31286 about:preferences strings -->
+<!ENTITY torPreferences.categoryTitle "Tor">
+<!ENTITY torPreferences.torSettings "Tor Settings">
+<!ENTITY torPreferences.torSettingsDescription "Tor Browser routes your traffic over the Tor Network, run by thousands of volunteers around the world." >
+<!ENTITY torPreferences.learnMore "Learn More">
+<!ENTITY torPreferences.bridges "Bridges">
+<!ENTITY torPreferences.bridgesDescription "Bridges help you access the Tor Network in places where Tor is blocked. Depending on where you are, one bridge may work better than another.">
+<!ENTITY torPreferences.useBridge "Use a bridge">
+<!-- torlauncher.request_a_new_bridge -->
+<!ENTITY torPreferences.requestNewBridge "Request a New Bridge&#x2026;">
+<!ENTITY torPreferences.provideBridge "Provide a bridge">
+<!ENTITY torPreferences.advanced "Advanced">
+<!ENTITY torPreferences.advancedDescription "Configure how Tor Browser connects to the internet.">
+<!ENTITY torPreferences.firewallPortsPlaceholder "Comma-separated values">
+<!ENTITY torPreferences.requestBridgeDialogTitle "Request Bridge">
+<!-- torlauncher.contacting_bridgedb=Contacting BridgeDB. Please wait. -->
+<!ENTITY torPreferences.requestBridgeDialogWaitPrompt "Contacting BridgeDB. Please Wait.">
+<!-- torlauncher.captcha_prompt=Solve the CAPTCHA to request a bridge. -->
+<!ENTITY torPreferences.requestBridgeDialogSolvePrompt "Solve the CAPTCHA to request a bridge.">
+<!--torlauncher.bad_captcha_solution=The solution is not correct. Please try again.-->
+<!ENTITY torPreferences.requestBridgeErrorBadSolution "The solution is not correct. Please try again.">
+<!ENTITY torPreferences.viewTorLogs "View the Tor logs.">
+<!ENTITY torPreferences.viewLogs "View Logs&#x2026;">
+<!ENTITY torPreferences.torLogsDialogTitle "Tor Logs">
diff --git a/src/chrome/locale/ta/network-settings.dtd b/src/chrome/locale/ta/network-settings.dtd
index dbb7a00..544797f 100644
--- a/src/chrome/locale/ta/network-settings.dtd
+++ b/src/chrome/locale/ta/network-settings.dtd
@@ -26,17 +26,23 @@
<!ENTITY torsettings.optional "விருப்பத்தேர்வு">
<!ENTITY torsettings.useProxy.checkbox "நான் இணையத்துடன் இணைய ஒரு பதிலாளைப் பயன்படுத்துகிறேன்">
+<!-- TODO: remove colon-->
<!ENTITY torsettings.useProxy.type "பதிலாள் வகை:">
<!ENTITY torsettings.useProxy.type.placeholder "ஒரு பதிலாள் வகையைத் தேர்ந்தெடுங்கள்">
+<!-- TODO: remove colon-->
<!ENTITY torsettings.useProxy.address "முகவரி:">
<!ENTITY torsettings.useProxy.address.placeholder "IP முகவரி அல்லது ஹோஸ்ட்பெயர்">
+<!-- TODO: remove colon-->
<!ENTITY torsettings.useProxy.port "Port:">
+<!-- TODO: remove colon-->
<!ENTITY torsettings.useProxy.username "பயனர்பெயர்:">
+<!-- TODO: remove colon-->
<!ENTITY torsettings.useProxy.password "கடவுச்சொல்:">
<!ENTITY torsettings.useProxy.type.socks4 "SOCKS 4">
<!ENTITY torsettings.useProxy.type.socks5 "SOCKS 5">
<!ENTITY torsettings.useProxy.type.http "HTTP / HTTPS">
<!ENTITY torsettings.firewall.checkbox "இந்த கணினி ஒரு தீயரண் வழியே செல்கிறது அது குறிப்பிட்ட முனைகளுக்கான இணைப்புகளை மட்டுமே அனுமதிக்கிறது">
+<!-- TODO: remove colon-->
<!ENTITY torsettings.firewall.allowedPorts "அனுமதிக்கப்பட்ட முனைகள்:">
<!ENTITY torsettings.useBridges.checkbox "Tor எனது நாட்டின் தணிக்கையிடப்படுகிறது">
<!ENTITY torsettings.useBridges.default "ஒரு உள்ளமை bridge தேர்ந்தெடுங்கள்">
@@ -61,3 +67,28 @@
<!-- Progress -->
<!ENTITY torprogress.pleaseWait "தயவுசெய்து நாங்கள் Tor வலையமைப்புடன் ஒரு இணைப்பு நிறுவும்வரை காத்திருங்கள். 
இதற்கு பல நிமிடங்கள் ஆகலாம்.">
+
+<!-- #31286 about:preferences strings -->
+<!ENTITY torPreferences.categoryTitle "Tor">
+<!ENTITY torPreferences.torSettings "Tor Settings">
+<!ENTITY torPreferences.torSettingsDescription "Tor Browser routes your traffic over the Tor Network, run by thousands of volunteers around the world." >
+<!ENTITY torPreferences.learnMore "மேலும் அறிய">
+<!ENTITY torPreferences.bridges "Bridgeகள்">
+<!ENTITY torPreferences.bridgesDescription "Bridges help you access the Tor Network in places where Tor is blocked. Depending on where you are, one bridge may work better than another.">
+<!ENTITY torPreferences.useBridge "Use a bridge">
+<!-- torlauncher.request_a_new_bridge -->
+<!ENTITY torPreferences.requestNewBridge "Request a New Bridge&#x2026;">
+<!ENTITY torPreferences.provideBridge "Provide a bridge">
+<!ENTITY torPreferences.advanced "Advanced">
+<!ENTITY torPreferences.advancedDescription "Configure how Tor Browser connects to the internet.">
+<!ENTITY torPreferences.firewallPortsPlaceholder "Comma-separated values">
+<!ENTITY torPreferences.requestBridgeDialogTitle "Request Bridge">
+<!-- torlauncher.contacting_bridgedb=Contacting BridgeDB. Please wait. -->
+<!ENTITY torPreferences.requestBridgeDialogWaitPrompt "Contacting BridgeDB. Please Wait.">
+<!-- torlauncher.captcha_prompt=Solve the CAPTCHA to request a bridge. -->
+<!ENTITY torPreferences.requestBridgeDialogSolvePrompt "Solve the CAPTCHA to request a bridge.">
+<!--torlauncher.bad_captcha_solution=The solution is not correct. Please try again.-->
+<!ENTITY torPreferences.requestBridgeErrorBadSolution "The solution is not correct. Please try again.">
+<!ENTITY torPreferences.viewTorLogs "View the Tor logs.">
+<!ENTITY torPreferences.viewLogs "View Logs&#x2026;">
+<!ENTITY torPreferences.torLogsDialogTitle "Tor Logs">
diff --git a/src/chrome/locale/te/network-settings.dtd b/src/chrome/locale/te/network-settings.dtd
index c6c5687..da2e5c8 100644
--- a/src/chrome/locale/te/network-settings.dtd
+++ b/src/chrome/locale/te/network-settings.dtd
@@ -26,17 +26,23 @@
<!ENTITY torsettings.optional "Optional">
<!ENTITY torsettings.useProxy.checkbox "I use a proxy to connect to the Internet">
+<!-- TODO: remove colon-->
<!ENTITY torsettings.useProxy.type "Proxy Type:">
<!ENTITY torsettings.useProxy.type.placeholder "select a proxy type">
+<!-- TODO: remove colon-->
<!ENTITY torsettings.useProxy.address "Address:">
<!ENTITY torsettings.useProxy.address.placeholder "IP address or hostname">
+<!-- TODO: remove colon-->
<!ENTITY torsettings.useProxy.port "Port:">
+<!-- TODO: remove colon-->
<!ENTITY torsettings.useProxy.username "Username:">
+<!-- TODO: remove colon-->
<!ENTITY torsettings.useProxy.password "Password:">
<!ENTITY torsettings.useProxy.type.socks4 "SOCKS 4">
<!ENTITY torsettings.useProxy.type.socks5 "SOCKS 5">
<!ENTITY torsettings.useProxy.type.http "HTTP / HTTPS">
<!ENTITY torsettings.firewall.checkbox "This computer goes through a firewall that only allows connections to certain ports">
+<!-- TODO: remove colon-->
<!ENTITY torsettings.firewall.allowedPorts "Allowed Ports:">
<!ENTITY torsettings.useBridges.checkbox "Tor is censored in my country">
<!ENTITY torsettings.useBridges.default "Select a built-in bridge">
@@ -60,3 +66,28 @@
<!-- Progress -->
<!ENTITY torprogress.pleaseWait "Please wait while we establish a connection to the Tor network.  This may take several minutes.">
+
+<!-- #31286 about:preferences strings -->
+<!ENTITY torPreferences.categoryTitle "Tor">
+<!ENTITY torPreferences.torSettings "Tor Settings">
+<!ENTITY torPreferences.torSettingsDescription "Tor Browser routes your traffic over the Tor Network, run by thousands of volunteers around the world." >
+<!ENTITY torPreferences.learnMore "Learn More">
+<!ENTITY torPreferences.bridges "Bridges">
+<!ENTITY torPreferences.bridgesDescription "Bridges help you access the Tor Network in places where Tor is blocked. Depending on where you are, one bridge may work better than another.">
+<!ENTITY torPreferences.useBridge "Use a bridge">
+<!-- torlauncher.request_a_new_bridge -->
+<!ENTITY torPreferences.requestNewBridge "Request a New Bridge&#x2026;">
+<!ENTITY torPreferences.provideBridge "Provide a bridge">
+<!ENTITY torPreferences.advanced "Advanced">
+<!ENTITY torPreferences.advancedDescription "Configure how Tor Browser connects to the internet.">
+<!ENTITY torPreferences.firewallPortsPlaceholder "Comma-separated values">
+<!ENTITY torPreferences.requestBridgeDialogTitle "Request Bridge">
+<!-- torlauncher.contacting_bridgedb=Contacting BridgeDB. Please wait. -->
+<!ENTITY torPreferences.requestBridgeDialogWaitPrompt "Contacting BridgeDB. Please Wait.">
+<!-- torlauncher.captcha_prompt=Solve the CAPTCHA to request a bridge. -->
+<!ENTITY torPreferences.requestBridgeDialogSolvePrompt "Solve the CAPTCHA to request a bridge.">
+<!--torlauncher.bad_captcha_solution=The solution is not correct. Please try again.-->
+<!ENTITY torPreferences.requestBridgeErrorBadSolution "The solution is not correct. Please try again.">
+<!ENTITY torPreferences.viewTorLogs "View the Tor logs.">
+<!ENTITY torPreferences.viewLogs "View Logs&#x2026;">
+<!ENTITY torPreferences.torLogsDialogTitle "Tor Logs">
diff --git a/src/chrome/locale/th/network-settings.dtd b/src/chrome/locale/th/network-settings.dtd
index cb88acc..e4fa0b1 100644
--- a/src/chrome/locale/th/network-settings.dtd
+++ b/src/chrome/locale/th/network-settings.dtd
@@ -26,17 +26,23 @@
<!ENTITY torsettings.optional "ไม่จำเป็น">
<!ENTITY torsettings.useProxy.checkbox "ฉันใช้พร็อกซีเพื่อเชื่อมต่อกับอินเทอร์เน็ต">
+<!-- TODO: remove colon-->
<!ENTITY torsettings.useProxy.type "ชนิดพร็อกซีคือ">
<!ENTITY torsettings.useProxy.type.placeholder "เลือกชนิดพร็อกซี">
+<!-- TODO: remove colon-->
<!ENTITY torsettings.useProxy.address "ที่อยู่คือ">
<!ENTITY torsettings.useProxy.address.placeholder "ที่อยู่ IP หรือชื่อโฮสต์">
+<!-- TODO: remove colon-->
<!ENTITY torsettings.useProxy.port "พอร์ตคือ">
+<!-- TODO: remove colon-->
<!ENTITY torsettings.useProxy.username "ชื่อผู้ใช้คือ">
+<!-- TODO: remove colon-->
<!ENTITY torsettings.useProxy.password "รหัสผ่านคือ">
<!ENTITY torsettings.useProxy.type.socks4 "SOCKS 4">
<!ENTITY torsettings.useProxy.type.socks5 "SOCKS 5">
<!ENTITY torsettings.useProxy.type.http "HTTP หรือ HTTPS">
<!ENTITY torsettings.firewall.checkbox "คอมพิวเตอร์เครื่องนี้ใช้งานผ่านไฟร์วอลล์ที่อนุญาตให้เชื่อมต่อกับเฉพาะบางพอร์ตเท่านั้น">
+<!-- TODO: remove colon-->
<!ENTITY torsettings.firewall.allowedPorts "พอร์ตที่อนุญาตคือ ">
<!ENTITY torsettings.useBridges.checkbox "Tor ถูกเซ็นเซอร์ในประเทศของฉัน">
<!ENTITY torsettings.useBridges.default "เลือกสะพานที่มีมาให้ในตัว">
@@ -60,3 +66,28 @@
<!-- Progress -->
<!ENTITY torprogress.pleaseWait "กรุณรอระหว่างที่เรากำลังสร้างการเชื่อมต่อไปยังเครือข่าย Tor   ซึ่งอาจจะใช้เวลาหลายนาที">
+
+<!-- #31286 about:preferences strings -->
+<!ENTITY torPreferences.categoryTitle "Tor">
+<!ENTITY torPreferences.torSettings "Tor Settings">
+<!ENTITY torPreferences.torSettingsDescription "Tor Browser routes your traffic over the Tor Network, run by thousands of volunteers around the world." >
+<!ENTITY torPreferences.learnMore "เรียนรู้เพิ่มเติม">
+<!ENTITY torPreferences.bridges "สะพาน">
+<!ENTITY torPreferences.bridgesDescription "Bridges help you access the Tor Network in places where Tor is blocked. Depending on where you are, one bridge may work better than another.">
+<!ENTITY torPreferences.useBridge "Use a bridge">
+<!-- torlauncher.request_a_new_bridge -->
+<!ENTITY torPreferences.requestNewBridge "Request a New Bridge&#x2026;">
+<!ENTITY torPreferences.provideBridge "Provide a bridge">
+<!ENTITY torPreferences.advanced "ขั้นสูง">
+<!ENTITY torPreferences.advancedDescription "Configure how Tor Browser connects to the internet.">
+<!ENTITY torPreferences.firewallPortsPlaceholder "Comma-separated values">
+<!ENTITY torPreferences.requestBridgeDialogTitle "Request Bridge">
+<!-- torlauncher.contacting_bridgedb=Contacting BridgeDB. Please wait. -->
+<!ENTITY torPreferences.requestBridgeDialogWaitPrompt "Contacting BridgeDB. Please Wait.">
+<!-- torlauncher.captcha_prompt=Solve the CAPTCHA to request a bridge. -->
+<!ENTITY torPreferences.requestBridgeDialogSolvePrompt "แก้ปัญหา CAPTCHA เพื่อขอสะพาน">
+<!--torlauncher.bad_captcha_solution=The solution is not correct. Please try again.-->
+<!ENTITY torPreferences.requestBridgeErrorBadSolution "วิธีแก้ไขไม่ถูกต้อง กรุณาลองอีกครั้ง">
+<!ENTITY torPreferences.viewTorLogs "View the Tor logs.">
+<!ENTITY torPreferences.viewLogs "View Logs&#x2026;">
+<!ENTITY torPreferences.torLogsDialogTitle "Tor Logs">
diff --git a/src/chrome/locale/tr/network-settings.dtd b/src/chrome/locale/tr/network-settings.dtd
index c463944..a0179c4 100644
--- a/src/chrome/locale/tr/network-settings.dtd
+++ b/src/chrome/locale/tr/network-settings.dtd
@@ -26,17 +26,23 @@
<!ENTITY torsettings.optional "İsteğe bağlı">
<!ENTITY torsettings.useProxy.checkbox "Internete erişmek için vekil sunucu kullanıyorum">
+<!-- TODO: remove colon-->
<!ENTITY torsettings.useProxy.type "Vekil Sunucu Türü:">
<!ENTITY torsettings.useProxy.type.placeholder "vekil sunucu türünü seçin">
+<!-- TODO: remove colon-->
<!ENTITY torsettings.useProxy.address "Adres:">
<!ENTITY torsettings.useProxy.address.placeholder "IP adresi ya da sunucu adı">
+<!-- TODO: remove colon-->
<!ENTITY torsettings.useProxy.port "Kapı Numarası:">
+<!-- TODO: remove colon-->
<!ENTITY torsettings.useProxy.username "Kullanıcı Adı:">
+<!-- TODO: remove colon-->
<!ENTITY torsettings.useProxy.password "Parola:">
<!ENTITY torsettings.useProxy.type.socks4 "SOCKS 4">
<!ENTITY torsettings.useProxy.type.socks5 "SOCKS 5">
<!ENTITY torsettings.useProxy.type.http "HTTP / HTTPS">
<!ENTITY torsettings.firewall.checkbox "Bu bilgisayarda yalnız belirli kapı numaralarından bağlanılmasına izin veren bir güvenlik duvarı kullanılıyor">
+<!-- TODO: remove colon-->
<!ENTITY torsettings.firewall.allowedPorts "Kullanılabilecek Kapı Numaraları:">
<!ENTITY torsettings.useBridges.checkbox "Bulunduğum ülkede Tor ağı engelleniyor">
<!ENTITY torsettings.useBridges.default "Hazır Köprülerden Seçin">
@@ -60,3 +66,28 @@
<!-- Progress -->
<!ENTITY torprogress.pleaseWait "Lütfen Tor ağı ile bağlantı kurulurken bekleyin. Bu işlem birkaç dakika sürebilir.">
+
+<!-- #31286 about:preferences strings -->
+<!ENTITY torPreferences.categoryTitle "Tor">
+<!ENTITY torPreferences.torSettings "Tor Ayarları">
+<!ENTITY torPreferences.torSettingsDescription "Tor Browser sizi tüm dünyada binlerce gönüllü tarafından işletilen Tor Ağına bağlar." >
+<!ENTITY torPreferences.learnMore "Ayrıntılı Bilgi Alın">
+<!ENTITY torPreferences.bridges "Köprüler">
+<!ENTITY torPreferences.bridgesDescription "Köprüler Tor bağlantısının engellendiği yerlerden Tor Ağına erişmek için kullanılır.. Bulunduğunuz konuma göre bir köprü türü diğerinden daha uygun olabilir.">
+<!ENTITY torPreferences.useBridge "Bir köprü kullanın">
+<!-- torlauncher.request_a_new_bridge -->
+<!ENTITY torPreferences.requestNewBridge "Yeni Köprü İsteğinde Bulunun&#x2026;">
+<!ENTITY torPreferences.provideBridge "Bir köprü adresi yazın">
+<!ENTITY torPreferences.advanced "Gelişmiş">
+<!ENTITY torPreferences.advancedDescription "Tor Browser uygulamasının İnternete nasıl bağlanacağını yapılandırın.">
+<!ENTITY torPreferences.firewallPortsPlaceholder "Virgül ile ayrılmış değerler">
+<!ENTITY torPreferences.requestBridgeDialogTitle "Köprü İsteğinde Bulunun">
+<!-- torlauncher.contacting_bridgedb=Contacting BridgeDB. Please wait. -->
+<!ENTITY torPreferences.requestBridgeDialogWaitPrompt "Köprü veritabanına bağlanılıyor. Lütfen bekleyin.">
+<!-- torlauncher.captcha_prompt=Solve the CAPTCHA to request a bridge. -->
+<!ENTITY torPreferences.requestBridgeDialogSolvePrompt "Köprü isteği yapmak için güvenlik kodunu çözün.">
+<!--torlauncher.bad_captcha_solution=The solution is not correct. Please try again.-->
+<!ENTITY torPreferences.requestBridgeErrorBadSolution "Çözüm doğru değil. Lütfen yeniden deneyin.">
+<!ENTITY torPreferences.viewTorLogs "Tor günlük kayıtlarına bakın.">
+<!ENTITY torPreferences.viewLogs "Günlüğü Görüntüle&#x2026;">
+<!ENTITY torPreferences.torLogsDialogTitle "Tor Günlük Kayıtları">
diff --git a/src/chrome/locale/uk/network-settings.dtd b/src/chrome/locale/uk/network-settings.dtd
index 1b90b5b..e7a9862 100644
--- a/src/chrome/locale/uk/network-settings.dtd
+++ b/src/chrome/locale/uk/network-settings.dtd
@@ -26,17 +26,23 @@
<!ENTITY torsettings.optional "Додатково">
<!ENTITY torsettings.useProxy.checkbox "Я використовую проксі для з'єднання з Інтернетом">
+<!-- TODO: remove colon-->
<!ENTITY torsettings.useProxy.type "Тип проксі:">
<!ENTITY torsettings.useProxy.type.placeholder "оберіть тип проксі">
+<!-- TODO: remove colon-->
<!ENTITY torsettings.useProxy.address "Адреса:">
<!ENTITY torsettings.useProxy.address.placeholder "ІР адреса або ім'я хосту">
+<!-- TODO: remove colon-->
<!ENTITY torsettings.useProxy.port "Порт:">
+<!-- TODO: remove colon-->
<!ENTITY torsettings.useProxy.username "Ім'я користувача:">
+<!-- TODO: remove colon-->
<!ENTITY torsettings.useProxy.password "Пароль:">
<!ENTITY torsettings.useProxy.type.socks4 "SOCKS 4">
<!ENTITY torsettings.useProxy.type.socks5 "SOCKS 5">
<!ENTITY torsettings.useProxy.type.http "HTTP / HTTPS">
<!ENTITY torsettings.firewall.checkbox "Мій брандмауер дозволяє підключення тільки до певних портів">
+<!-- TODO: remove colon-->
<!ENTITY torsettings.firewall.allowedPorts "Дозволенні порти:">
<!ENTITY torsettings.useBridges.checkbox "Тор цензується в моїй країні">
<!ENTITY torsettings.useBridges.default "Виберіть вбудований міст">
@@ -60,3 +66,28 @@
<!-- Progress -->
<!ENTITY torprogress.pleaseWait "Будь ласка, зачекайте, поки ми встановимо з'єднання з мережею Tor.  Це може зайняти кілька хвилин.">
+
+<!-- #31286 about:preferences strings -->
+<!ENTITY torPreferences.categoryTitle "Тор">
+<!ENTITY torPreferences.torSettings "Tor Settings">
+<!ENTITY torPreferences.torSettingsDescription "Tor Browser routes your traffic over the Tor Network, run by thousands of volunteers around the world." >
+<!ENTITY torPreferences.learnMore "Дізнатися більше">
+<!ENTITY torPreferences.bridges "Мости">
+<!ENTITY torPreferences.bridgesDescription "Bridges help you access the Tor Network in places where Tor is blocked. Depending on where you are, one bridge may work better than another.">
+<!ENTITY torPreferences.useBridge "Use a bridge">
+<!-- torlauncher.request_a_new_bridge -->
+<!ENTITY torPreferences.requestNewBridge "Request a New Bridge&#x2026;">
+<!ENTITY torPreferences.provideBridge "Provide a bridge">
+<!ENTITY torPreferences.advanced "Розширений">
+<!ENTITY torPreferences.advancedDescription "Configure how Tor Browser connects to the internet.">
+<!ENTITY torPreferences.firewallPortsPlaceholder "Comma-separated values">
+<!ENTITY torPreferences.requestBridgeDialogTitle "Request Bridge">
+<!-- torlauncher.contacting_bridgedb=Contacting BridgeDB. Please wait. -->
+<!ENTITY torPreferences.requestBridgeDialogWaitPrompt "Contacting BridgeDB. Please Wait.">
+<!-- torlauncher.captcha_prompt=Solve the CAPTCHA to request a bridge. -->
+<!ENTITY torPreferences.requestBridgeDialogSolvePrompt "Розв'яжіть CAPTCHA, щоб надіслати запит на отримання мосту.">
+<!--torlauncher.bad_captcha_solution=The solution is not correct. Please try again.-->
+<!ENTITY torPreferences.requestBridgeErrorBadSolution "Розв'язання невірне. Спробуйте знову.">
+<!ENTITY torPreferences.viewTorLogs "View the Tor logs.">
+<!ENTITY torPreferences.viewLogs "View Logs&#x2026;">
+<!ENTITY torPreferences.torLogsDialogTitle "Tor Logs">
diff --git a/src/chrome/locale/ur/network-settings.dtd b/src/chrome/locale/ur/network-settings.dtd
index 02b715d..7b76324 100644
--- a/src/chrome/locale/ur/network-settings.dtd
+++ b/src/chrome/locale/ur/network-settings.dtd
@@ -26,17 +26,23 @@
<!ENTITY torsettings.optional "اختیاری">
<!ENTITY torsettings.useProxy.checkbox "I use a proxy to connect to the Internet">
+<!-- TODO: remove colon-->
<!ENTITY torsettings.useProxy.type "Proxy Type:">
<!ENTITY torsettings.useProxy.type.placeholder "select a proxy type">
+<!-- TODO: remove colon-->
<!ENTITY torsettings.useProxy.address "Address:">
<!ENTITY torsettings.useProxy.address.placeholder "IP address or hostname">
+<!-- TODO: remove colon-->
<!ENTITY torsettings.useProxy.port "Port:">
+<!-- TODO: remove colon-->
<!ENTITY torsettings.useProxy.username "صارف کا نام:">
+<!-- TODO: remove colon-->
<!ENTITY torsettings.useProxy.password "پاس ورڈ :">
<!ENTITY torsettings.useProxy.type.socks4 "SOCKS 4">
<!ENTITY torsettings.useProxy.type.socks5 "SOCKS 5">
<!ENTITY torsettings.useProxy.type.http "HTTP / HTTPS">
<!ENTITY torsettings.firewall.checkbox "This computer goes through a firewall that only allows connections to certain ports">
+<!-- TODO: remove colon-->
<!ENTITY torsettings.firewall.allowedPorts "Allowed Ports:">
<!ENTITY torsettings.useBridges.checkbox "Tor is censored in my country">
<!ENTITY torsettings.useBridges.default "Select a built-in bridge">
@@ -60,3 +66,28 @@
<!-- Progress -->
<!ENTITY torprogress.pleaseWait "Please wait while we establish a connection to the Tor network.  This may take several minutes.">
+
+<!-- #31286 about:preferences strings -->
+<!ENTITY torPreferences.categoryTitle "تور">
+<!ENTITY torPreferences.torSettings "Tor Settings">
+<!ENTITY torPreferences.torSettingsDescription "Tor Browser routes your traffic over the Tor Network, run by thousands of volunteers around the world." >
+<!ENTITY torPreferences.learnMore "Learn More">
+<!ENTITY torPreferences.bridges "Bridges">
+<!ENTITY torPreferences.bridgesDescription "Bridges help you access the Tor Network in places where Tor is blocked. Depending on where you are, one bridge may work better than another.">
+<!ENTITY torPreferences.useBridge "Use a bridge">
+<!-- torlauncher.request_a_new_bridge -->
+<!ENTITY torPreferences.requestNewBridge "Request a New Bridge&#x2026;">
+<!ENTITY torPreferences.provideBridge "Provide a bridge">
+<!ENTITY torPreferences.advanced "ترقی یافتہ">
+<!ENTITY torPreferences.advancedDescription "Configure how Tor Browser connects to the internet.">
+<!ENTITY torPreferences.firewallPortsPlaceholder "Comma-separated values">
+<!ENTITY torPreferences.requestBridgeDialogTitle "Request Bridge">
+<!-- torlauncher.contacting_bridgedb=Contacting BridgeDB. Please wait. -->
+<!ENTITY torPreferences.requestBridgeDialogWaitPrompt "Contacting BridgeDB. Please Wait.">
+<!-- torlauncher.captcha_prompt=Solve the CAPTCHA to request a bridge. -->
+<!ENTITY torPreferences.requestBridgeDialogSolvePrompt "پل کی گزارش کرنے کیلئے کیپچا کو حل کریں۔">
+<!--torlauncher.bad_captcha_solution=The solution is not correct. Please try again.-->
+<!ENTITY torPreferences.requestBridgeErrorBadSolution "The solution is not correct. Please try again.">
+<!ENTITY torPreferences.viewTorLogs "View the Tor logs.">
+<!ENTITY torPreferences.viewLogs "View Logs&#x2026;">
+<!ENTITY torPreferences.torLogsDialogTitle "Tor Logs">
diff --git a/src/chrome/locale/ur/torlauncher.properties b/src/chrome/locale/ur/torlauncher.properties
index a66e6eb..836b6f7 100644
--- a/src/chrome/locale/ur/torlauncher.properties
+++ b/src/chrome/locale/ur/torlauncher.properties
@@ -42,7 +42,7 @@ torlauncher.no_meek=This browser is not configured for meek, which is needed to
torlauncher.no_bridges_available=No bridges are available at this time. Sorry.
torlauncher.connect=رابطہ کریں
-torlauncher.restart_tor=Restart Tor
+torlauncher.restart_tor=ٹور دوبارہ چلائیں
torlauncher.quit=چھوڑدیجیے (Quit)
torlauncher.quit_win=خارج کرنا
torlauncher.done=مکمل ہوگیا
diff --git a/src/chrome/locale/uz/network-settings.dtd b/src/chrome/locale/uz/network-settings.dtd
index aad954d..aaae5c1 100644
--- a/src/chrome/locale/uz/network-settings.dtd
+++ b/src/chrome/locale/uz/network-settings.dtd
@@ -26,17 +26,23 @@
<!ENTITY torsettings.optional "Qo'shimcha">
<!ENTITY torsettings.useProxy.checkbox "I use a proxy to connect to the Internet">
+<!-- TODO: remove colon-->
<!ENTITY torsettings.useProxy.type "Proksi turi:">
<!ENTITY torsettings.useProxy.type.placeholder "select a proxy type">
+<!-- TODO: remove colon-->
<!ENTITY torsettings.useProxy.address "Manzil:">
<!ENTITY torsettings.useProxy.address.placeholder "IP manzil yoki host nomi">
+<!-- TODO: remove colon-->
<!ENTITY torsettings.useProxy.port "Port:">
+<!-- TODO: remove colon-->
<!ENTITY torsettings.useProxy.username "Foydalanuvchi nomi:">
+<!-- TODO: remove colon-->
<!ENTITY torsettings.useProxy.password "Maxfiy so'z:">
<!ENTITY torsettings.useProxy.type.socks4 "SOCKS 4">
<!ENTITY torsettings.useProxy.type.socks5 "SOCKS 5">
<!ENTITY torsettings.useProxy.type.http "HTTP / HTTPS">
<!ENTITY torsettings.firewall.checkbox "This computer goes through a firewall that only allows connections to certain ports">
+<!-- TODO: remove colon-->
<!ENTITY torsettings.firewall.allowedPorts "Allowed Ports:">
<!ENTITY torsettings.useBridges.checkbox "Tor is censored in my country">
<!ENTITY torsettings.useBridges.default "Select a built-in bridge">
@@ -60,3 +66,28 @@
<!-- Progress -->
<!ENTITY torprogress.pleaseWait "Please wait while we establish a connection to the Tor network.  This may take several minutes.">
+
+<!-- #31286 about:preferences strings -->
+<!ENTITY torPreferences.categoryTitle "Tor">
+<!ENTITY torPreferences.torSettings "Tor Settings">
+<!ENTITY torPreferences.torSettingsDescription "Tor Browser routes your traffic over the Tor Network, run by thousands of volunteers around the world." >
+<!ENTITY torPreferences.learnMore "Learn More">
+<!ENTITY torPreferences.bridges "Bridges">
+<!ENTITY torPreferences.bridgesDescription "Bridges help you access the Tor Network in places where Tor is blocked. Depending on where you are, one bridge may work better than another.">
+<!ENTITY torPreferences.useBridge "Use a bridge">
+<!-- torlauncher.request_a_new_bridge -->
+<!ENTITY torPreferences.requestNewBridge "Request a New Bridge&#x2026;">
+<!ENTITY torPreferences.provideBridge "Provide a bridge">
+<!ENTITY torPreferences.advanced "Qo‘shimcha">
+<!ENTITY torPreferences.advancedDescription "Configure how Tor Browser connects to the internet.">
+<!ENTITY torPreferences.firewallPortsPlaceholder "Comma-separated values">
+<!ENTITY torPreferences.requestBridgeDialogTitle "Request Bridge">
+<!-- torlauncher.contacting_bridgedb=Contacting BridgeDB. Please wait. -->
+<!ENTITY torPreferences.requestBridgeDialogWaitPrompt "Contacting BridgeDB. Please Wait.">
+<!-- torlauncher.captcha_prompt=Solve the CAPTCHA to request a bridge. -->
+<!ENTITY torPreferences.requestBridgeDialogSolvePrompt "Solve the CAPTCHA to request a bridge.">
+<!--torlauncher.bad_captcha_solution=The solution is not correct. Please try again.-->
+<!ENTITY torPreferences.requestBridgeErrorBadSolution "The solution is not correct. Please try again.">
+<!ENTITY torPreferences.viewTorLogs "View the Tor logs.">
+<!ENTITY torPreferences.viewLogs "View Logs&#x2026;">
+<!ENTITY torPreferences.torLogsDialogTitle "Tor Logs">
diff --git a/src/chrome/locale/vi/network-settings.dtd b/src/chrome/locale/vi/network-settings.dtd
index 68d2383..1910e2a 100644
--- a/src/chrome/locale/vi/network-settings.dtd
+++ b/src/chrome/locale/vi/network-settings.dtd
@@ -26,17 +26,23 @@
<!ENTITY torsettings.optional "Tuỳ chọn">
<!ENTITY torsettings.useProxy.checkbox "Tôi sử dụng proxy để kết nối tới Internet">
+<!-- TODO: remove colon-->
<!ENTITY torsettings.useProxy.type "Dạng proxy:">
<!ENTITY torsettings.useProxy.type.placeholder "chọn loại proxy">
+<!-- TODO: remove colon-->
<!ENTITY torsettings.useProxy.address "Địa chỉ:">
<!ENTITY torsettings.useProxy.address.placeholder "Địa chỉ IP hoặc hostname">
+<!-- TODO: remove colon-->
<!ENTITY torsettings.useProxy.port "Cổng:">
+<!-- TODO: remove colon-->
<!ENTITY torsettings.useProxy.username "Tên đăng nhập:">
+<!-- TODO: remove colon-->
<!ENTITY torsettings.useProxy.password "Mật khẩu:">
<!ENTITY torsettings.useProxy.type.socks4 "SOCK 4">
<!ENTITY torsettings.useProxy.type.socks5 "SOCK 5">
<!ENTITY torsettings.useProxy.type.http "HTTP / HTTPS">
<!ENTITY torsettings.firewall.checkbox "Máy tính này đi qua một tường lửa mà chỉ cho phép tới một vài cổng">
+<!-- TODO: remove colon-->
<!ENTITY torsettings.firewall.allowedPorts "Những Cổng Được phép:">
<!ENTITY torsettings.useBridges.checkbox "Tor đã bị kiểm duyệt ở quốc gia của tôi">
<!ENTITY torsettings.useBridges.default "Sử dụng cầu nối có sẵn">
@@ -60,3 +66,28 @@
<!-- Progress -->
<!ENTITY torprogress.pleaseWait "Vui lòng chờ trong khi chúng tôi thiết lập kết nối tới mạng lưới Tor.  Việc này có thể mất một vài phút.">
+
+<!-- #31286 about:preferences strings -->
+<!ENTITY torPreferences.categoryTitle "Tor">
+<!ENTITY torPreferences.torSettings "Tor Settings">
+<!ENTITY torPreferences.torSettingsDescription "Tor Browser routes your traffic over the Tor Network, run by thousands of volunteers around the world." >
+<!ENTITY torPreferences.learnMore "Learn More">
+<!ENTITY torPreferences.bridges "Cầu Nối">
+<!ENTITY torPreferences.bridgesDescription "Bridges help you access the Tor Network in places where Tor is blocked. Depending on where you are, one bridge may work better than another.">
+<!ENTITY torPreferences.useBridge "Use a bridge">
+<!-- torlauncher.request_a_new_bridge -->
+<!ENTITY torPreferences.requestNewBridge "Request a New Bridge&#x2026;">
+<!ENTITY torPreferences.provideBridge "Provide a bridge">
+<!ENTITY torPreferences.advanced "Nâng cao">
+<!ENTITY torPreferences.advancedDescription "Configure how Tor Browser connects to the internet.">
+<!ENTITY torPreferences.firewallPortsPlaceholder "Comma-separated values">
+<!ENTITY torPreferences.requestBridgeDialogTitle "Request Bridge">
+<!-- torlauncher.contacting_bridgedb=Contacting BridgeDB. Please wait. -->
+<!ENTITY torPreferences.requestBridgeDialogWaitPrompt "Contacting BridgeDB. Please Wait.">
+<!-- torlauncher.captcha_prompt=Solve the CAPTCHA to request a bridge. -->
+<!ENTITY torPreferences.requestBridgeDialogSolvePrompt "Solve the CAPTCHA to request a bridge.">
+<!--torlauncher.bad_captcha_solution=The solution is not correct. Please try again.-->
+<!ENTITY torPreferences.requestBridgeErrorBadSolution "The solution is not correct. Please try again.">
+<!ENTITY torPreferences.viewTorLogs "View the Tor logs.">
+<!ENTITY torPreferences.viewLogs "View Logs&#x2026;">
+<!ENTITY torPreferences.torLogsDialogTitle "Tor Logs">
diff --git a/src/chrome/locale/zh-CN/network-settings.dtd b/src/chrome/locale/zh-CN/network-settings.dtd
index f0dc557..1baec73 100644
--- a/src/chrome/locale/zh-CN/network-settings.dtd
+++ b/src/chrome/locale/zh-CN/network-settings.dtd
@@ -26,17 +26,23 @@
<!ENTITY torsettings.optional "可选">
<!ENTITY torsettings.useProxy.checkbox "使用代理访问互联网">
+<!-- TODO: remove colon-->
<!ENTITY torsettings.useProxy.type "代理类型:">
<!ENTITY torsettings.useProxy.type.placeholder "选择代理类型">
+<!-- TODO: remove colon-->
<!ENTITY torsettings.useProxy.address "地址:">
<!ENTITY torsettings.useProxy.address.placeholder "IP 地址或主机名">
+<!-- TODO: remove colon-->
<!ENTITY torsettings.useProxy.port "端口:">
+<!-- TODO: remove colon-->
<!ENTITY torsettings.useProxy.username "用户名:">
+<!-- TODO: remove colon-->
<!ENTITY torsettings.useProxy.password "密码:">
<!ENTITY torsettings.useProxy.type.socks4 "SOCKS 4">
<!ENTITY torsettings.useProxy.type.socks5 "SOCKS 5">
<!ENTITY torsettings.useProxy.type.http "HTTP / HTTPS">
<!ENTITY torsettings.firewall.checkbox "该计算机的防火墙仅允许特定端口的互联网连接">
+<!-- TODO: remove colon-->
<!ENTITY torsettings.firewall.allowedPorts "允许的端口:">
<!ENTITY torsettings.useBridges.checkbox "我所在的国家对 Tor 进行了审查">
<!ENTITY torsettings.useBridges.default "选择内置网桥">
@@ -60,3 +66,28 @@
<!-- Progress -->
<!ENTITY torprogress.pleaseWait "正在连接 Tor 网络,可能需几分钟,请稍等。">
+
+<!-- #31286 about:preferences strings -->
+<!ENTITY torPreferences.categoryTitle "Tor">
+<!ENTITY torPreferences.torSettings "Tor Settings">
+<!ENTITY torPreferences.torSettingsDescription "Tor 浏览器将你和世界数千名志愿者支持的 Tor 网络相连" >
+<!ENTITY torPreferences.learnMore "了解更多">
+<!ENTITY torPreferences.bridges "网桥">
+<!ENTITY torPreferences.bridgesDescription "Bridges help you access the Tor Network in places where Tor is blocked. Depending on where you are, one bridge may work better than another.">
+<!ENTITY torPreferences.useBridge "Use a bridge">
+<!-- torlauncher.request_a_new_bridge -->
+<!ENTITY torPreferences.requestNewBridge "正在请求新网桥&#x2026;">
+<!ENTITY torPreferences.provideBridge "添加网桥">
+<!ENTITY torPreferences.advanced "高级">
+<!ENTITY torPreferences.advancedDescription "Configure how Tor Browser connects to the internet.">
+<!ENTITY torPreferences.firewallPortsPlaceholder "Comma-separated values">
+<!ENTITY torPreferences.requestBridgeDialogTitle "正在请求网桥">
+<!-- torlauncher.contacting_bridgedb=Contacting BridgeDB. Please wait. -->
+<!ENTITY torPreferences.requestBridgeDialogWaitPrompt "正在连接到BridgeDB,请等待。">
+<!-- torlauncher.captcha_prompt=Solve the CAPTCHA to request a bridge. -->
+<!ENTITY torPreferences.requestBridgeDialogSolvePrompt "请输入验证码以获取网桥。">
+<!--torlauncher.bad_captcha_solution=The solution is not correct. Please try again.-->
+<!ENTITY torPreferences.requestBridgeErrorBadSolution "结果并不正确,请重试。">
+<!ENTITY torPreferences.viewTorLogs "View the Tor logs.">
+<!ENTITY torPreferences.viewLogs "查看日志&#x2026;">
+<!ENTITY torPreferences.torLogsDialogTitle "Tor Logs">
diff --git a/src/chrome/locale/zh-HK/network-settings.dtd b/src/chrome/locale/zh-HK/network-settings.dtd
index 0e6d6af..4e4e359 100644
--- a/src/chrome/locale/zh-HK/network-settings.dtd
+++ b/src/chrome/locale/zh-HK/network-settings.dtd
@@ -26,17 +26,23 @@
<!ENTITY torsettings.optional "選用">
<!ENTITY torsettings.useProxy.checkbox "I use a proxy to connect to the Internet">
+<!-- TODO: remove colon-->
<!ENTITY torsettings.useProxy.type "代理伺服器類型:">
<!ENTITY torsettings.useProxy.type.placeholder "select a proxy type">
+<!-- TODO: remove colon-->
<!ENTITY torsettings.useProxy.address "位址:">
<!ENTITY torsettings.useProxy.address.placeholder "IP位址或主機名稱">
+<!-- TODO: remove colon-->
<!ENTITY torsettings.useProxy.port "連接埠:">
+<!-- TODO: remove colon-->
<!ENTITY torsettings.useProxy.username "用戶名:">
+<!-- TODO: remove colon-->
<!ENTITY torsettings.useProxy.password "密碼:">
<!ENTITY torsettings.useProxy.type.socks4 "SOCKS 4">
<!ENTITY torsettings.useProxy.type.socks5 "SOCKS 5">
<!ENTITY torsettings.useProxy.type.http "http╱https">
<!ENTITY torsettings.firewall.checkbox "呢部電腦通過某個只容許連接至特定連線埠嘅防火牆">
+<!-- TODO: remove colon-->
<!ENTITY torsettings.firewall.allowedPorts "容許嘅連接埠:">
<!ENTITY torsettings.useBridges.checkbox "Tor is censored in my country">
<!ENTITY torsettings.useBridges.default "Select a built-in bridge">
@@ -60,3 +66,28 @@
<!-- Progress -->
<!ENTITY torprogress.pleaseWait "我哋正在建立通往Tor洋蔥路由網絡嘅連線,請稍候, 呢樣可能會需要幾分鐘時間。">
+
+<!-- #31286 about:preferences strings -->
+<!ENTITY torPreferences.categoryTitle "Tor工具">
+<!ENTITY torPreferences.torSettings "Tor Settings">
+<!ENTITY torPreferences.torSettingsDescription "Tor Browser routes your traffic over the Tor Network, run by thousands of volunteers around the world." >
+<!ENTITY torPreferences.learnMore "Learn More">
+<!ENTITY torPreferences.bridges "Bridges">
+<!ENTITY torPreferences.bridgesDescription "Bridges help you access the Tor Network in places where Tor is blocked. Depending on where you are, one bridge may work better than another.">
+<!ENTITY torPreferences.useBridge "Use a bridge">
+<!-- torlauncher.request_a_new_bridge -->
+<!ENTITY torPreferences.requestNewBridge "Request a New Bridge&#x2026;">
+<!ENTITY torPreferences.provideBridge "Provide a bridge">
+<!ENTITY torPreferences.advanced "Advanced">
+<!ENTITY torPreferences.advancedDescription "Configure how Tor Browser connects to the internet.">
+<!ENTITY torPreferences.firewallPortsPlaceholder "Comma-separated values">
+<!ENTITY torPreferences.requestBridgeDialogTitle "Request Bridge">
+<!-- torlauncher.contacting_bridgedb=Contacting BridgeDB. Please wait. -->
+<!ENTITY torPreferences.requestBridgeDialogWaitPrompt "Contacting BridgeDB. Please Wait.">
+<!-- torlauncher.captcha_prompt=Solve the CAPTCHA to request a bridge. -->
+<!ENTITY torPreferences.requestBridgeDialogSolvePrompt "Solve the CAPTCHA to request a bridge.">
+<!--torlauncher.bad_captcha_solution=The solution is not correct. Please try again.-->
+<!ENTITY torPreferences.requestBridgeErrorBadSolution "The solution is not correct. Please try again.">
+<!ENTITY torPreferences.viewTorLogs "View the Tor logs.">
+<!ENTITY torPreferences.viewLogs "View Logs&#x2026;">
+<!ENTITY torPreferences.torLogsDialogTitle "Tor Logs">
diff --git a/src/chrome/locale/zh-TW/network-settings.dtd b/src/chrome/locale/zh-TW/network-settings.dtd
index 3fff34e..01f2e29 100644
--- a/src/chrome/locale/zh-TW/network-settings.dtd
+++ b/src/chrome/locale/zh-TW/network-settings.dtd
@@ -26,17 +26,23 @@
<!ENTITY torsettings.optional "選用">
<!ENTITY torsettings.useProxy.checkbox "使用代理服務連線到網際網路">
+<!-- TODO: remove colon-->
<!ENTITY torsettings.useProxy.type "代理伺服器類型:">
<!ENTITY torsettings.useProxy.type.placeholder "選擇代理伺服器類型">
+<!-- TODO: remove colon-->
<!ENTITY torsettings.useProxy.address "位址:">
<!ENTITY torsettings.useProxy.address.placeholder "IP 位址或主機名稱">
+<!-- TODO: remove colon-->
<!ENTITY torsettings.useProxy.port "連接埠:">
+<!-- TODO: remove colon-->
<!ENTITY torsettings.useProxy.username "使用者名稱:">
+<!-- TODO: remove colon-->
<!ENTITY torsettings.useProxy.password "密碼:">
<!ENTITY torsettings.useProxy.type.socks4 "SOCKS 4">
<!ENTITY torsettings.useProxy.type.socks5 "SOCKS 5">
<!ENTITY torsettings.useProxy.type.http "HTTP / HTTPS">
<!ENTITY torsettings.firewall.checkbox "這台電腦通過某個只允許連接至特定連接埠的防火牆">
+<!-- TODO: remove colon-->
<!ENTITY torsettings.firewall.allowedPorts "允許的連接埠:">
<!ENTITY torsettings.useBridges.checkbox "我的國家中 Tor 受到審查">
<!ENTITY torsettings.useBridges.default "選擇內建的橋接">
@@ -60,3 +66,28 @@
<!-- Progress -->
<!ENTITY torprogress.pleaseWait "請耐心等候,我們正在建立 Tor 網路連線。  這個過程可能需要幾分鐘的時間。">
+
+<!-- #31286 about:preferences strings -->
+<!ENTITY torPreferences.categoryTitle "Tor">
+<!ENTITY torPreferences.torSettings "Tor Settings">
+<!ENTITY torPreferences.torSettingsDescription "Tor Browser routes your traffic over the Tor Network, run by thousands of volunteers around the world." >
+<!ENTITY torPreferences.learnMore "了解更多">
+<!ENTITY torPreferences.bridges "橋接器">
+<!ENTITY torPreferences.bridgesDescription "Bridges help you access the Tor Network in places where Tor is blocked. Depending on where you are, one bridge may work better than another.">
+<!ENTITY torPreferences.useBridge "Use a bridge">
+<!-- torlauncher.request_a_new_bridge -->
+<!ENTITY torPreferences.requestNewBridge "Request a New Bridge&#x2026;">
+<!ENTITY torPreferences.provideBridge "Provide a bridge">
+<!ENTITY torPreferences.advanced "進階的">
+<!ENTITY torPreferences.advancedDescription "Configure how Tor Browser connects to the internet.">
+<!ENTITY torPreferences.firewallPortsPlaceholder "Comma-separated values">
+<!ENTITY torPreferences.requestBridgeDialogTitle "Request Bridge">
+<!-- torlauncher.contacting_bridgedb=Contacting BridgeDB. Please wait. -->
+<!ENTITY torPreferences.requestBridgeDialogWaitPrompt "Contacting BridgeDB. Please Wait.">
+<!-- torlauncher.captcha_prompt=Solve the CAPTCHA to request a bridge. -->
+<!ENTITY torPreferences.requestBridgeDialogSolvePrompt "解決驗證碼來請求橋接">
+<!--torlauncher.bad_captcha_solution=The solution is not correct. Please try again.-->
+<!ENTITY torPreferences.requestBridgeErrorBadSolution "解答不正確。請再試一次。">
+<!ENTITY torPreferences.viewTorLogs "View the Tor logs.">
+<!ENTITY torPreferences.viewLogs "View Logs&#x2026;">
+<!ENTITY torPreferences.torLogsDialogTitle "Tor Logs">
1
0