tbb-commits
Threads by month
- ----- 2025 -----
- 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
- 1 participants
- 18494 discussions

07 Mar '18
commit 10b6ffd8b1168797a24934ae28944faf60d327c9
Author: Georg Koppen <gk(a)torproject.org>
Date: Wed Mar 7 07:34:06 2018 +0000
Bump rbm (picking up fix for #25435)
---
rbm | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/rbm b/rbm
index b4c8c38..db41d8e 160000
--- a/rbm
+++ b/rbm
@@ -1 +1 @@
-Subproject commit b4c8c38e12d11eb232305949c5d42d5df5e8f5c8
+Subproject commit db41d8e754ed8cd6cee7bca18d76d59f8f7f369b
1
0

07 Mar '18
commit 058b6520125e57161753d3357fcab6ecd67496bf
Author: Georg Koppen <gk(a)torproject.org>
Date: Wed Mar 7 07:34:06 2018 +0000
Bump rbm (picking up fix for #25435)
---
rbm | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/rbm b/rbm
index b4c8c38..db41d8e 160000
--- a/rbm
+++ b/rbm
@@ -1 +1 @@
-Subproject commit b4c8c38e12d11eb232305949c5d42d5df5e8f5c8
+Subproject commit db41d8e754ed8cd6cee7bca18d76d59f8f7f369b
1
0

[rbm/master] Bug 25435: use --no-auto-check-trustdb to avoid modifying gpg keyring files
by gk@torproject.org 07 Mar '18
by gk@torproject.org 07 Mar '18
07 Mar '18
commit db41d8e754ed8cd6cee7bca18d76d59f8f7f369b
Author: Nicolas Vigier <boklm(a)torproject.org>
Date: Tue Mar 6 21:27:39 2018 +0100
Bug 25435: use --no-auto-check-trustdb to avoid modifying gpg keyring files
By default gpg will from time to time update its trust database. When
this happens it will also modify the keyring files to add some trust
information. To avoid this we add the --no-auto-check-trustdb option.
As we don't use the Web of Trust when we use a keyring file, we also
disable it using `--trust-model always`.
---
lib/RBM/DefaultConfig.pm | 3 ++-
1 file changed, 2 insertions(+), 1 deletion(-)
diff --git a/lib/RBM/DefaultConfig.pm b/lib/RBM/DefaultConfig.pm
index 4121264..d758b8e 100644
--- a/lib/RBM/DefaultConfig.pm
+++ b/lib/RBM/DefaultConfig.pm
@@ -216,7 +216,8 @@ OPT_END
export LC_ALL=C
[%
IF c('gpg_keyring');
- SET gpg_kr = '--keyring ' _ path(c('gpg_keyring'), path(c('gpg_keyring_dir'))) _ ' --no-default-keyring';
+ SET gpg_kr = '--keyring ' _ path(c('gpg_keyring'), path(c('gpg_keyring_dir')))
+ _ ' --no-default-keyring --no-auto-check-trustdb --trust-model always';
END;
-%]
exec [% c('gpg_bin') %] [% c('gpg_args') %] --with-fingerprint [% gpg_kr %] "\$@"
1
0

06 Mar '18
commit 5ab5b08179208d0fc4f38dd76686bf1df65a7389
Author: Georg Koppen <gk(a)torproject.org>
Date: Tue Mar 6 12:27:21 2018 +0000
Bump rbm (picking up fix for #25422)
---
rbm | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/rbm b/rbm
index 7494edc..b4c8c38 160000
--- a/rbm
+++ b/rbm
@@ -1 +1 @@
-Subproject commit 7494edc6d2556c511c213823a6549410ba75f73b
+Subproject commit b4c8c38e12d11eb232305949c5d42d5df5e8f5c8
1
0

[rbm/master] Bug 25422: Give more details in "Cannot checkout" errors
by gk@torproject.org 06 Mar '18
by gk@torproject.org 06 Mar '18
06 Mar '18
commit b4c8c38e12d11eb232305949c5d42d5df5e8f5c8
Author: Nicolas Vigier <boklm(a)torproject.org>
Date: Mon Mar 5 14:47:03 2018 +0100
Bug 25422: Give more details in "Cannot checkout" errors
Print stderr from the git/hg command if the checkout failed.
---
lib/RBM.pm | 4 ++--
1 file changed, 2 insertions(+), 2 deletions(-)
diff --git a/lib/RBM.pm b/lib/RBM.pm
index 3b19ca9..f987130 100644
--- a/lib/RBM.pm
+++ b/lib/RBM.pm
@@ -472,7 +472,7 @@ sub execute {
git_clone_fetch_chdir($project, $options);
my ($stdout, $stderr, $success, $exit_code)
= capture_exec('git', 'checkout', $git_hash);
- exit_error "Cannot checkout $git_hash" unless $success;
+ exit_error "Cannot checkout $git_hash:\n$stderr" unless $success;
if (project_config($project, 'git_submodule', $options)) {
($stdout, $stderr, $success, $exit_code)
= capture_exec('git', 'submodule', 'update', '--init');
@@ -485,7 +485,7 @@ sub execute {
hg_clone_fetch_chdir($project, $options);
my ($stdout, $stderr, $success, $exit_code)
= capture_exec('hg', 'update', '-C', $hg_hash);
- exit_error "Cannot checkout $hg_hash" unless $success;
+ exit_error "Cannot checkout $hg_hash:\n$stderr" unless $success;
}
my ($stdout, $stderr, $success, $exit_code)
= run_script($project, $cmd, \&capture_exec);
1
0

[tor-browser-build/master] Bug 25394: remove support for unused distributions
by gk@torproject.org 02 Mar '18
by gk@torproject.org 02 Mar '18
02 Mar '18
commit ee58c17648e4c71d799096467ae6b9a617af9f9f
Author: Nicolas Vigier <boklm(a)torproject.org>
Date: Fri Mar 2 13:14:26 2018 +0100
Bug 25394: remove support for unused distributions
Remove support for precise and utopic.
---
projects/container-image/config | 23 -----------------------
projects/debootstrap-image/config | 24 ------------------------
2 files changed, 47 deletions(-)
diff --git a/projects/container-image/config b/projects/container-image/config
index c9f377f..95d7557 100644
--- a/projects/container-image/config
+++ b/projects/container-image/config
@@ -20,29 +20,6 @@ pre: |
[% IF pc(c('origin_project'), 'var/pre_pkginst') -%]
[% pc(c('origin_project'), 'var/pre_pkginst') %]
[% END -%]
- [% IF c("var/container/suite") == "precise" -%]
- export INITRD=no
- mkdir -p /etc/container_environment
- echo -n no > /etc/container_environment/INITRD
- dpkg-divert --local --rename --add /sbin/initctl
- ln -s /bin/true /sbin/initctl
- dpkg-divert --local --rename --add /usr/bin/ischroot
- ln -sf /bin/true /usr/bin/ischroot
- cat >> /etc/apt/sources.list << EOF
- deb http://archive.ubuntu.com/ubuntu/ precise-updates main
- deb-src http://archive.ubuntu.com/ubuntu/ precise-updates main
-
- deb http://archive.ubuntu.com/ubuntu/ precise universe
- deb-src http://archive.ubuntu.com/ubuntu/ precise universe
- deb http://archive.ubuntu.com/ubuntu/ precise-updates universe
- deb-src http://archive.ubuntu.com/ubuntu/ precise-updates universe
-
- deb http://archive.ubuntu.com/ubuntu/ precise-security main
- deb-src http://archive.ubuntu.com/ubuntu/ precise-security main
- deb http://archive.ubuntu.com/ubuntu/ precise-security universe
- deb-src http://archive.ubuntu.com/ubuntu/ precise-security universe
- EOF
- [% END -%]
apt-get update -y
apt-get upgrade -y
[%
diff --git a/projects/debootstrap-image/config b/projects/debootstrap-image/config
index 0b40142..10e2afe 100644
--- a/projects/debootstrap-image/config
+++ b/projects/debootstrap-image/config
@@ -44,30 +44,6 @@ targets:
container:
suite: buster
arch: amd64
- precise-amd64:
- var:
- container:
- suite: precise
- arch: amd64
- debootstrap_opt: --keyring=/usr/share/keyrings/ubuntu-archive-removed-keys.gpg
- precise-i386:
- var:
- container:
- suite: precise
- arch: i386
- debootstrap_opt: --keyring=/usr/share/keyrings/ubuntu-archive-removed-keys.gpg
- utopic-amd64:
- var:
- container:
- suite: utopic
- arch: amd64
- debootstrap_mirror: http://old-releases.ubuntu.com/ubuntu/
- utopic-i386:
- var:
- container:
- suite: utopic
- arch: i386
- debootstrap_mirror: http://old-releases.ubuntu.com/ubuntu/
input_files:
- URL: 'http://cdimage.ubuntu.com/ubuntu-base/releases/[% c("var/ubuntu_version") %]/release/ubuntu-base-[% c("var/ubuntu_version") %]-base-amd64.tar.gz'
1
0

[tor-browser-build/master] Bug 25339: update https-everywhere to 2018.2.26
by gk@torproject.org 02 Mar '18
by gk@torproject.org 02 Mar '18
02 Mar '18
commit 7f6cb4caa95b7818e4482f41fd333f5a2a8d60f1
Author: Nicolas Vigier <boklm(a)torproject.org>
Date: Tue Feb 27 13:03:25 2018 +0100
Bug 25339: update https-everywhere to 2018.2.26
This new https-everywhere version requires python 3.6, so we are now
building it in a buster container instead of wheezy.
---
projects/debootstrap-image/config | 5 +++++
projects/https-everywhere/config | 8 ++++----
2 files changed, 9 insertions(+), 4 deletions(-)
diff --git a/projects/debootstrap-image/config b/projects/debootstrap-image/config
index a06cc53..0b40142 100644
--- a/projects/debootstrap-image/config
+++ b/projects/debootstrap-image/config
@@ -39,6 +39,11 @@ targets:
container:
suite: jessie
arch: i386
+ buster-amd64:
+ var:
+ container:
+ suite: buster
+ arch: amd64
precise-amd64:
var:
container:
diff --git a/projects/https-everywhere/config b/projects/https-everywhere/config
index 907e8e1..43be728 100644
--- a/projects/https-everywhere/config
+++ b/projects/https-everywhere/config
@@ -1,5 +1,5 @@
# vim: filetype=yaml sw=2
-version: 2018.1.29
+version: 2018.2.26
git_url: https://git.torproject.org/https-everywhere.git
git_hash: '[% c("version") %]'
git_submodule: 1
@@ -17,12 +17,12 @@ var:
# inputs. This allows us to save a little time and disk space.
container:
use_container: 1
- suite: wheezy
+ suite: buster
arch: amd64
deps:
- git
- - python
- - python-lxml
+ - python3
+ - python3-lxml
- libxslt1.1
- libxml2-utils
- sqlite3
1
0

[tor-launcher/master] Bug 23136: Moat integration (fetch bridges for the user)
by gk@torproject.org 02 Mar '18
by gk@torproject.org 02 Mar '18
02 Mar '18
commit e921bb15681ac54c9e937b564d31a2a6ec2ceb33
Author: Kathy Brade <brade(a)pearlcrescent.com>
Date: Wed Feb 14 10:07:45 2018 -0500
Bug 23136: Moat integration (fetch bridges for the user)
Modify the setup wizard and Network Settings window to allow automated
retrieval of bridges using Moat, a BridgeDB service which works
over a meek transport and requires the user to solve a CAPTCHA to
obtain bridges.
The new tl-bridgedb.jsm JavaScript module handles all communication
with BridgeDB, and it functions by starting a copy of
meek-client-torbrowser and operating as a PT client parent process
(see https://gitweb.torproject.org/torspec.git/tree/pt-spec.txt)
This feature can be disabled (and the Moat-related Tor Launcher UI
hidden) by setting the pref extensions.torlauncher.moat_service to
an empty string.
---
src/chrome/content/network-settings-overlay.xul | 60 +-
src/chrome/content/network-settings-wizard.xul | 9 +-
src/chrome/content/network-settings.js | 630 +++++++++++++++++++-
src/chrome/content/network-settings.xul | 7 +-
src/chrome/locale/en/network-settings.dtd | 4 +
src/chrome/locale/en/torlauncher.properties | 14 +
src/chrome/skin/activity.svg | 17 +
src/chrome/skin/network-settings.css | 84 ++-
src/chrome/skin/reload.svg | 6 +
src/defaults/preferences/prefs.js | 6 +
src/modules/tl-bridgedb.jsm | 746 ++++++++++++++++++++++++
src/modules/tl-util.jsm | 57 +-
12 files changed, 1583 insertions(+), 57 deletions(-)
diff --git a/src/chrome/content/network-settings-overlay.xul b/src/chrome/content/network-settings-overlay.xul
index b49dbab..3d42c15 100644
--- a/src/chrome/content/network-settings-overlay.xul
+++ b/src/chrome/content/network-settings-overlay.xul
@@ -1,6 +1,6 @@
<?xml version="1.0"?>
<!--
- - Copyright (c) 2017, The Tor Project, Inc.
+ - Copyright (c) 2018, The Tor Project, Inc.
- See LICENSE for licensing information.
- vim: set sw=2 sts=2 ts=8 et syntax=xml:
-->
@@ -93,11 +93,11 @@
oncommand="toggleElemUI(this);"/>
<groupbox id="bridgeSpecificSettings">
<hbox align="end" pack="end">
- <radiogroup id="bridgeTypeRadioGroup" flex="1" style="margin: 0px"
- oncommand="onBridgeTypeRadioChange()">
- <hbox align="center">
+ <radiogroup id="bridgeTypeRadioGroup" flex="1" style="margin: 0px">
+ <hbox class="bridgeRadioContainer">
<radio id="bridgeRadioDefault"
- label="&torsettings.useBridges.default;" selected="true"/>
+ label="&torsettings.useBridges.default;" selected="true"
+ oncommand="onBridgeTypeRadioChange()"/>
<button class="helpButton"
oncommand="onOpenHelp('bridgeHelpContent')"/>
<spacer style="width: 3em"/>
@@ -108,8 +108,24 @@
<spring/>
</hbox>
- <radio align="start" id="bridgeRadioCustom"
- label="&torsettings.useBridges.custom;"/>
+ <vbox id="bridgeDBSettings">
+ <hbox class="bridgeRadioContainer">
+ <radio id="bridgeRadioBridgeDB"
+ label="&torsettings.useBridges.bridgeDB;"
+ oncommand="onBridgeTypeRadioChange()"/>
+ </hbox>
+ <vbox id="bridgeDBContainer" align="start">
+ <description id="bridgeDBResult"/>
+ <button id="bridgeDBRequestButton"
+ oncommand="onOpenBridgeDBRequestPrompt()"/>
+ </vbox>
+ </vbox>
+
+ <hbox class="bridgeRadioContainer">
+ <radio align="start" id="bridgeRadioCustom"
+ label="&torsettings.useBridges.custom;"
+ oncommand="onBridgeTypeRadioChange()"/>
+ </hbox>
</radiogroup>
</hbox>
<vbox id="bridgeCustomEntry">
@@ -153,6 +169,36 @@
</hbox>
</vbox>
+ <vbox id="bridgeDBRequestOverlayContent" align="center">
+ <vbox>
+ <label id="bridgeDBPrompt"/>
+ <image id="bridgeDBCaptchaImage"/>
+ <hbox>
+ <spacer id="bridgeDBReloadSpacer"/>
+ <spacer flex="1"/>
+ <textbox id="bridgeDBCaptchaSolution" size="35"
+ placeholder="&torsettings.useBridges.captchaSolution.placeholder;"
+ oninput="onCaptchaSolutionChange()"/>
+ <spacer flex="1"/>
+ <deck id="bridgeDBReloadDeck">
+ <button id="bridgeDBReloadCaptchaButton"
+ tooltiptext="&torsettings.useBridges.reloadCaptcha.tooltip;"
+ oncommand="onReloadCaptcha()"/>
+ <image id="bridgeDBNetworkActivity"/>
+ </deck>
+ </hbox>
+ <label id="bridgeDBCaptchaError"/>
+ <separator/>
+ <hbox pack="center">
+ <button id="bridgeDBCancelButton"
+ oncommand="onCancelBridgeDBRequestPrompt()"/>
+ <button id="bridgeDBSubmitButton" disabled="true"
+ label="&torsettings.useBridges.captchaSubmit;"
+ oncommand="onCaptchaSolutionSubmit()"/>
+ </hbox>
+ </vbox>
+ </vbox>
+
<vbox id="errorOverlayContent">
<hbox pack="center">
<description errorElemId="message" flex="1"/>
diff --git a/src/chrome/content/network-settings-wizard.xul b/src/chrome/content/network-settings-wizard.xul
index 86c2e01..00145a8 100644
--- a/src/chrome/content/network-settings-wizard.xul
+++ b/src/chrome/content/network-settings-wizard.xul
@@ -1,6 +1,6 @@
<?xml version="1.0"?>
<!--
- - Copyright (c) 2017, The Tor Project, Inc.
+ - Copyright (c) 2018, The Tor Project, Inc.
- See LICENSE for licensing information.
- vim: set sw=2 sts=2 ts=8 et syntax=xml:
-->
@@ -33,7 +33,6 @@
<image class="tbb-logo"/>
</hbox>
- <separator class="tall"/>
<vbox class="firstResponses" align="center">
<label>&torSettings.connectPrompt;</label>
<label>&torSettings.configurePrompt;</label>
@@ -52,11 +51,13 @@
torShowNavButtons="true">
<stack flex="1">
<vbox>
- <separator class="tall"/>
<vbox id="bridgeSettings"/>
- <separator/>
<vbox id="proxySettings"/>
</vbox>
+ <vbox id="bridgeDBRequestOverlay" class="messagePanel" pack="center"
+ hidden="true">
+ <vbox id="bridgeDBRequestOverlayContent"/>
+ </vbox>
<vbox id="configErrorOverlay" class="messagePanel" pack="center"
hidden="true">
<vbox id="errorOverlayContent"/>
diff --git a/src/chrome/content/network-settings.js b/src/chrome/content/network-settings.js
index 773a647..dc3c9ab 100644
--- a/src/chrome/content/network-settings.js
+++ b/src/chrome/content/network-settings.js
@@ -1,4 +1,4 @@
-// Copyright (c) 2017, The Tor Project, Inc.
+// Copyright (c) 2018, The Tor Project, Inc.
// See LICENSE for licensing information.
//
// vim: set sw=2 sts=2 ts=8 et syntax=javascript:
@@ -8,12 +8,15 @@
const Cc = Components.classes;
const Ci = Components.interfaces;
const Cu = Components.utils;
+const Cr = Components.results;
Cu.import("resource://gre/modules/XPCOMUtils.jsm");
XPCOMUtils.defineLazyModuleGetter(this, "TorLauncherUtil",
"resource://torlauncher/modules/tl-util.jsm");
XPCOMUtils.defineLazyModuleGetter(this, "TorLauncherLogger",
"resource://torlauncher/modules/tl-logger.jsm");
+XPCOMUtils.defineLazyModuleGetter(this, "TorLauncherBridgeDB",
+ "resource://torlauncher/modules/tl-bridgedb.jsm");
const kPrefPromptForLocale = "extensions.torlauncher.prompt_for_locale";
const kPrefLocale = "general.useragent.locale";
@@ -24,6 +27,14 @@ const kPrefDefaultBridgeRecommendedType =
"extensions.torlauncher.default_bridge_recommended_type";
const kPrefDefaultBridgeType = "extensions.torlauncher.default_bridge_type";
+// The type of bridges to request from BridgeDB via Moat.
+const kPrefBridgeDBType = "extensions.torlauncher.bridgedb_bridge_type";
+
+// The bridges that we receive from BridgeDB via Moat are stored as
+// extensions.torlauncher.bridgedb_bridge.0,
+// extensions.torlauncher.bridgedb_bridge.1, and so on.
+const kPrefBranchBridgeDBBridge = "extensions.torlauncher.bridgedb_bridge.";
+
// As of April 2016, no one is responding to help desk email. Hopefully this will change soon.
//const kSupportAddr = "help(a)rt.torproject.org";
const kSupportURL = "torproject.org/about/contact.html#support";
@@ -51,10 +62,34 @@ const kProxyPassword = "proxyPassword";
const kUseFirewallPortsCheckbox = "useFirewallPorts";
const kFirewallAllowedPorts = "firewallAllowedPorts";
const kUseBridgesCheckbox = "useBridges";
+const kDefaultBridgesRadio = "bridgeRadioDefault";
const kDefaultBridgeTypeMenuList = "defaultBridgeType";
+const kBridgeDBBridgesRadio = "bridgeRadioBridgeDB";
+const kBridgeDBContainer = "bridgeDBContainer";
+const kBridgeDBRequestButton = "bridgeDBRequestButton";
+const kBridgeDBResult = "bridgeDBResult";
const kCustomBridgesRadio = "bridgeRadioCustom";
const kBridgeList = "bridgeList";
-
+const kCopyLogFeedbackPanel = "copyLogFeedbackPanel";
+
+// BridgeDB Moat request overlay (for interaction with a CAPTCHA challenge).
+const kBridgeDBRequestOverlay = "bridgeDBRequestOverlay";
+const kBridgeDBPrompt = "bridgeDBPrompt";
+const kBridgeDBCaptchaImage = "bridgeDBCaptchaImage";
+const kCaptchaImageTransition = "height 250ms ease-in-out";
+const kBridgeDBCaptchaSolution = "bridgeDBCaptchaSolution";
+const kBridgeDBCaptchaError = "bridgeDBCaptchaError";
+const kBridgeDBSubmitButton = "bridgeDBSubmitButton";
+const kBridgeDBCancelButton = "bridgeDBCancelButton";
+const kBridgeDBReloadCaptchaButton = "bridgeDBReloadCaptchaButton";
+const kBridgeDBNetworkActivity = "bridgeDBNetworkActivity";
+
+// Custom event types.
+const kCaptchaSubmitEventType = "TorLauncherCaptchaSubmitEvent";
+const kCaptchaCancelEventType = "TorLauncherCaptchaCancelEvent";
+const kCaptchaReloadEventType = "TorLauncherCaptchaReloadEvent";
+
+// Tor SETCONF keywords.
const kTorConfKeyDisableNetwork = "DisableNetwork";
const kTorConfKeySocks4Proxy = "Socks4Proxy";
const kTorConfKeySocks5Proxy = "Socks5Proxy";
@@ -77,6 +112,8 @@ var gRestoreAfterHelpPanelID = null;
var gIsPostRestartBootstrapNeeded = false;
var gIsWindowScheduledToClose = false;
var gActiveTopics = []; // Topics for which an observer is currently installed.
+var gBridgeDBBridges = undefined; // Array of bridge lines.
+var gBridgeDBRequestEventListeners = [];
function initDialogCommon()
@@ -461,16 +498,218 @@ function onCustomBridgesTextInput()
function onBridgeTypeRadioChange()
{
- var useCustom = getElemValue(kCustomBridgesRadio, false);
- setBoolAttrForElemWithLabel(kDefaultBridgeTypeMenuList, "hidden", useCustom);
+ let useBridgeDB = getElemValue(kBridgeDBBridgesRadio, false);
+ let useCustom = getElemValue(kCustomBridgesRadio, false);
+ let useDefault = !useBridgeDB && !useCustom;
+ setBoolAttrForElemWithLabel(kDefaultBridgeTypeMenuList, "hidden",
+ !useDefault);
+ setBoolAttrForElemWithLabel(kBridgeDBContainer, "hidden", !useBridgeDB);
setBoolAttrForElemWithLabel(kBridgeList, "hidden", !useCustom);
- var focusElemID = (useCustom) ? kBridgeList : kDefaultBridgeTypeMenuList;
- var elem = document.getElementById(focusElemID);
+
+ let focusElemID;
+ if (useBridgeDB)
+ focusElemID = kBridgeDBRequestButton;
+ else if (useCustom)
+ focusElemID = kBridgeList;
+ else
+ focusElemID = kDefaultBridgeTypeMenuList;
+
+ let elem = document.getElementById(focusElemID);
if (elem)
elem.focus();
}
+function onOpenBridgeDBRequestPrompt()
+{
+ // Obtain the meek client path and args from the tor configuration.
+ let reply = gProtocolSvc.TorGetConf("ClientTransportPlugin");
+ if (!gProtocolSvc.TorCommandSucceeded(reply))
+ return;
+
+ let meekClientPath;
+ let meekClientArgs;
+ reply.lineArray.forEach(aLine =>
+ {
+ let tokens = aLine.split(' ');
+ if ((tokens.length > 2) && (tokens[0] == "meek") && (tokens[1] == "exec"))
+ {
+ meekClientPath = tokens[2];
+ meekClientArgs = tokens.slice(3);
+ }
+ });
+
+ if (!meekClientPath)
+ {
+ reportMoatError(TorLauncherUtil.getLocalizedString("no_meek"));
+ return;
+ }
+
+ let proxySettings;
+ if (isProxyConfigured())
+ {
+ proxySettings = getAndValidateProxySettings(true);
+ if (!proxySettings)
+ return;
+ }
+
+ let overlay = document.getElementById(kBridgeDBRequestOverlay);
+ if (overlay)
+ {
+ let cancelBtn = document.getElementById(kBridgeDBCancelButton);
+ if (cancelBtn)
+ cancelBtn.setAttribute("label", gCancelLabelStr);
+
+ showOrHideDialogButtons(false);
+ resetBridgeDBRequestPrompt();
+ setBridgeDBRequestState("fetchingCaptcha");
+ overlay.hidden = false;
+ requestMoatCaptcha(proxySettings, meekClientPath, meekClientArgs);
+ }
+}
+
+
+// When aState is anything other than undefined, a network request is
+// in progress.
+function setBridgeDBRequestState(aState)
+{
+ let overlay = document.getElementById(kBridgeDBRequestOverlay);
+ if (overlay)
+ {
+ if (aState)
+ overlay.setAttribute("state", aState);
+ else
+ overlay.removeAttribute("state");
+ }
+
+ let key = (aState) ? "contacting_bridgedb" : "captcha_prompt";
+ setElemValue(kBridgeDBPrompt, TorLauncherUtil.getLocalizedString(key));
+
+ let textBox = document.getElementById(kBridgeDBCaptchaSolution);
+ if (textBox)
+ {
+ if (aState)
+ textBox.setAttribute("disabled", "true");
+ else
+ textBox.removeAttribute("disabled");
+ }
+
+ // Show the network activity spinner or the reload button, as appropriate.
+ let deckElem = document.getElementById("bridgeDBReloadDeck");
+ if (deckElem)
+ {
+ let panelID = aState ? kBridgeDBNetworkActivity
+ : kBridgeDBReloadCaptchaButton;
+ deckElem.selectedPanel = document.getElementById(panelID);
+ }
+}
+
+
+function onDismissBridgeDBRequestPrompt()
+{
+ let overlay = document.getElementById(kBridgeDBRequestOverlay);
+ if (overlay)
+ {
+ overlay.hidden = true;
+ showOrHideDialogButtons(true);
+ }
+
+ setBridgeDBRequestState(undefined);
+}
+
+
+function onCancelBridgeDBRequestPrompt()
+{
+ // If an event listener is installed, the cancel of pending Moat requests
+ // and other necessary cleanup is handled in a cancel event listener.
+ if (gBridgeDBRequestEventListeners.length > 0)
+ document.dispatchEvent(new CustomEvent(kCaptchaCancelEventType, {}));
+ else
+ onDismissBridgeDBRequestPrompt();
+}
+
+
+function resetBridgeDBRequestPrompt()
+{
+ let textBox = document.getElementById(kBridgeDBCaptchaSolution);
+ if (textBox)
+ textBox.value = "";
+
+ let image = document.getElementById(kBridgeDBCaptchaImage);
+ if (image)
+ {
+ image.removeAttribute("src");
+ image.style.transition = "";
+ image.style.height = "0px";
+ }
+
+ onCaptchaSolutionChange();
+}
+
+
+function onCaptchaSolutionChange()
+{
+ let val = getElemValue(kBridgeDBCaptchaSolution, undefined);
+ enableButton(kBridgeDBSubmitButton, val && (val.length > 0));
+ setElemValue(kBridgeDBCaptchaError, undefined); // clear error
+}
+
+
+function onReloadCaptcha()
+{
+ document.dispatchEvent(new CustomEvent(kCaptchaReloadEventType, {}));
+}
+
+
+function onCaptchaSolutionSubmit()
+{
+ let val = getElemValue(kBridgeDBCaptchaSolution, undefined);
+ if (val)
+ document.dispatchEvent(new CustomEvent(kCaptchaSubmitEventType, {}));
+}
+
+
+function isShowingBridgeDBRequestPrompt()
+{
+ let overlay = document.getElementById(kBridgeDBRequestOverlay);
+ return overlay && !overlay.hasAttribute("hidden");
+}
+
+
+function showBridgeDBBridges()
+{
+ // Truncate the bridge info for display.
+ const kMaxLen = 65;
+ let val;
+ if (gBridgeDBBridges)
+ {
+ gBridgeDBBridges.forEach(aBridgeLine =>
+ {
+ let line;
+ if (aBridgeLine.length <= kMaxLen)
+ line = aBridgeLine;
+ else
+ line = aBridgeLine.substring(0, kMaxLen) + "\u2026"; // ellipsis;
+ if (val)
+ val += "\n" + line;
+ else
+ val = line;
+ });
+ }
+
+ setElemValue(kBridgeDBResult, val);
+
+ // Update the "Get a Bridge" button label.
+ let btn = document.getElementById(kBridgeDBRequestButton);
+ if (btn)
+ {
+ let btnLabelKey = val ? "request_a_new_bridge"
+ : "request_a_bridge";
+ btn.label = TorLauncherUtil.getLocalizedString(btnLabelKey);
+ }
+}
+
+
function onDeckSelect()
{
let deckElem = document.getElementById("deck");
@@ -960,7 +1199,9 @@ function setButtonAttr(aID, aAttr, aValue)
if (!aID || !aAttr)
return null;
- var btn = document.documentElement.getButton(aID);
+ let btn = document.documentElement.getButton(aID); // dialog buttons
+ if (!btn)
+ btn = document.getElementById(aID); // other buttons
if (btn)
{
if (aValue)
@@ -1159,6 +1400,12 @@ function onCancel()
return false;
}
+ if (isShowingBridgeDBRequestPrompt())
+ {
+ onCancelBridgeDBRequestPrompt();
+ return false;
+ }
+
let wizard = getWizard();
if (!wizard && isShowingProgress())
{
@@ -1193,15 +1440,19 @@ function onWizardFinish()
return false;
}
- if (isShowingProgress())
+ if (isShowingBridgeDBRequestPrompt())
{
- onProgressCancelOrReconfigure(getWizard());
+ onCaptchaSolutionSubmit();
return false;
}
- else
+
+ if (isShowingProgress())
{
- return applySettings(false);
+ onProgressCancelOrReconfigure(getWizard());
+ return false;
}
+
+ return applySettings(false);
}
@@ -1219,6 +1470,12 @@ function onNetworkSettingsFinish()
return false;
}
+ if (isShowingBridgeDBRequestPrompt())
+ {
+ onCaptchaSolutionSubmit();
+ return false;
+ }
+
return applySettings(false);
}
@@ -1256,7 +1513,7 @@ function onCopyLog()
// Display a feedback popup that fades away after a few seconds.
let copyLogBtn = document.documentElement.getButton("extra2");
- let panel = document.getElementById("copyLogFeedbackPanel");
+ let panel = document.getElementById(kCopyLogFeedbackPanel);
if (copyLogBtn && panel)
{
panel.firstChild.textContent = TorLauncherUtil.getFormattedLocalizedString(
@@ -1268,7 +1525,7 @@ function onCopyLog()
function closeCopyLogFeedbackPanel()
{
- let panel = document.getElementById("copyLogFeedbackPanel");
+ let panel = document.getElementById(kCopyLogFeedbackPanel);
if (panel && (panel.state =="open"))
panel.hidePopup();
}
@@ -1463,6 +1720,9 @@ function initBridgeSettings()
let canUseDefaultBridges = (typeList && (typeList.length > 0));
let defaultType = TorLauncherUtil.getCharPref(kPrefDefaultBridgeType);
let useDefault = canUseDefaultBridges && !!defaultType;
+ let isMoatConfigured = TorLauncherBridgeDB.isMoatConfigured;
+
+ showOrHideElemById("bridgeDBSettings", isMoatConfigured);
// If not configured to use a default set of bridges, get UseBridges setting
// from tor.
@@ -1477,25 +1737,72 @@ function initBridgeSettings()
useBridges = reply.retVal;
- // Get bridge list from tor.
+ // Get the list of configured bridges from tor.
let bridgeReply = gProtocolSvc.TorGetConf(kTorConfKeyBridgeList);
if (!gProtocolSvc.TorCommandSucceeded(bridgeReply))
return false;
- if (!setBridgeListElemValue(bridgeReply.lineArray))
+ let configuredBridges = [];
+ if (bridgeReply.lineArray)
{
- if (canUseDefaultBridges)
- useDefault = true; // We have no custom values... back to default.
- else
- useBridges = false; // No custom or default bridges are available.
+ bridgeReply.lineArray.forEach(aLine =>
+ {
+ let val = aLine.trim();
+ if (val.length > 0)
+ configuredBridges.push(val);
+ });
+ }
+
+ gBridgeDBBridges = undefined;
+
+ let prefBranch = TorLauncherUtil.getPrefBranch(kPrefBranchBridgeDBBridge);
+ if (isMoatConfigured)
+ {
+ // Determine if we are using a set of bridges that was obtained via Moat.
+ // This is done by checking each of the configured bridge lines against
+ // the values stored under the extensions.torlauncher.bridgedb_bridge.
+ // pref branch. The algorithm used here assumes there are no duplicate
+ // values.
+ let childPrefs = prefBranch.getChildList("", []);
+
+ let bridgeCount = configuredBridges.length;
+ if ((bridgeCount > 0) && (bridgeCount == childPrefs.length))
+ {
+ let foundCount = 0;
+ childPrefs.forEach(aChild =>
+ {
+ if (configuredBridges.indexOf(prefBranch.getCharPref(aChild)) >= 0)
+ ++foundCount;
+ });
+
+ if (foundCount == bridgeCount)
+ gBridgeDBBridges = configuredBridges;
+ }
+ }
+
+ if (!gBridgeDBBridges)
+ {
+ // The stored bridges do not match what is now in torrc. Clear
+ // the stored info and treat the configured bridges as a set of
+ // custom bridges.
+ prefBranch.deleteBranch("");
+ if (!setBridgeListElemValue(configuredBridges))
+ {
+ if (canUseDefaultBridges)
+ useDefault = true; // We have no custom values... back to default.
+ else
+ useBridges = false; // No custom or default bridges are available.
+ }
}
}
setElemValue(kUseBridgesCheckbox, useBridges);
+ showBridgeDBBridges();
showOrHideElemById("bridgeTypeRadioGroup", canUseDefaultBridges);
- let radioID = (useDefault) ? "bridgeRadioDefault" : "bridgeRadioCustom";
+ let radioID = (useDefault) ? kDefaultBridgesRadio
+ : (gBridgeDBBridges) ? kBridgeDBBridgesRadio : kCustomBridgesRadio;
let radio = document.getElementById(radioID);
if (radio)
radio.control.selectedItem = radio;
@@ -1536,6 +1843,18 @@ function useSettings()
if (!didApply)
return;
+ // Record the new BridgeDB bridge values in preferences so later we
+ // can detect that the bridges were received from BridgeDB via Moat.
+ TorLauncherUtil.getPrefBranch(kPrefBranchBridgeDBBridge).deleteBranch("");
+ if (isUsingBridgeDBBridges())
+ {
+ for (let i = 0; i < gBridgeDBBridges.length; ++i)
+ {
+ TorLauncherUtil.setCharPref(kPrefBranchBridgeDBBridge + i,
+ gBridgeDBBridges[i].trim());
+ }
+ }
+
gIsPostRestartBootstrapNeeded = false;
gProtocolSvc.TorSendCommand("SAVECONF");
@@ -1633,7 +1952,7 @@ function showProgressMeterIfNoError()
function applyProxySettings(aUseDefaults)
{
let settings = aUseDefaults ? getDefaultProxySettings()
- : getAndValidateProxySettings();
+ : getAndValidateProxySettings(false);
if (!settings)
return false;
@@ -1655,7 +1974,7 @@ function getDefaultProxySettings()
// Return a settings object if successful and null if not.
-function getAndValidateProxySettings()
+function getAndValidateProxySettings(aIsForMoat)
{
var settings = getDefaultProxySettings();
@@ -1666,7 +1985,11 @@ function getAndValidateProxySettings()
proxyType = getElemValue(kProxyTypeMenulist, null);
if (!proxyType)
{
- reportValidationError("error_proxy_type_missing");
+ let key = "error_proxy_type_missing";
+ if (aIsForMoat)
+ reportMoatError(TorLauncherUtil.getLocalizedString(key));
+ else
+ reportValidationError(key);
return null;
}
@@ -1674,7 +1997,11 @@ function getAndValidateProxySettings()
getElemValue(kProxyPort, null));
if (!proxyAddrPort)
{
- reportValidationError("error_proxy_addr_missing");
+ let key = "error_proxy_addr_missing";
+ if (aIsForMoat)
+ reportMoatError(TorLauncherUtil.getLocalizedString(key));
+ else
+ reportValidationError(key);
return null;
}
@@ -1886,16 +2213,27 @@ function getDefaultBridgeSettings()
// Return a settings object if successful and null if not.
function getAndValidateBridgeSettings()
{
- var settings = getDefaultBridgeSettings();
- var useBridges = isBridgeConfigured();
- var defaultBridgeType;
- var bridgeList;
+ let settings = getDefaultBridgeSettings();
+ let useBridges = isBridgeConfigured();
+ let defaultBridgeType;
+ let bridgeList;
if (useBridges)
{
- var useCustom = getElemValue(kCustomBridgesRadio, false);
- if (useCustom)
+ if (getElemValue(kBridgeDBBridgesRadio, false))
{
- var bridgeStr = getElemValue(kBridgeList, null);
+ if (gBridgeDBBridges)
+ {
+ bridgeList = gBridgeDBBridges;
+ }
+ else
+ {
+ reportValidationError("error_bridgedb_bridges_missing");
+ return null;
+ }
+ }
+ else if (getElemValue(kCustomBridgesRadio, false))
+ {
+ let bridgeStr = getElemValue(kBridgeList, null);
bridgeList = parseAndValidateBridges(bridgeStr);
if (!bridgeList)
{
@@ -1939,6 +2277,13 @@ function isBridgeConfigured()
}
+function isUsingBridgeDBBridges()
+{
+ return isBridgeConfigured() && getElemValue(kBridgeDBBridgesRadio, false) &&
+ gBridgeDBBridges;
+}
+
+
// Returns an array or null.
function parseAndValidateBridges(aStr)
{
@@ -2028,8 +2373,15 @@ function setElemValue(aID, aValue)
// fallthru
case "menulist":
case "listbox":
+ case "label":
elem.value = (val) ? val : "";
break;
+ case "description":
+ while (elem.firstChild)
+ elem.removeChild(elem.firstChild);
+ if (val)
+ elem.appendChild(document.createTextNode(val));
+ break;
}
}
}
@@ -2140,3 +2492,219 @@ function createColonStr(aStr1, aStr2)
return rv;
}
+
+
+function requestMoatCaptcha(aProxySettings, aMeekClientPath, aMeekClientArgs)
+{
+ function cleanup(aMoatRequestor, aErr)
+ {
+ if (aMoatRequestor)
+ aMoatRequestor.close();
+ removeAllBridgeDBRequestEventListeners();
+ onDismissBridgeDBRequestPrompt();
+ if (aErr && (aErr != Cr.NS_ERROR_ABORT))
+ {
+ let details;
+ if (aErr.message)
+ {
+ details = aErr.message;
+ }
+ else if (aErr.code)
+ {
+ if (aErr.code < 1000)
+ details = aErr.code; // HTTP status code
+ else
+ details = "0x" + aErr.code.toString(16); // nsresult
+ }
+
+ reportMoatError(details);
+ }
+ }
+
+ let moatRequestor = TorLauncherBridgeDB.createMoatRequestor();
+
+ let cancelListener = function(aEvent) {
+ if (!moatRequestor.cancel())
+ cleanup(moatRequestor, undefined); // There was no network request to cancel.
+ };
+ addBridgeDBRequestEventListener(kCaptchaCancelEventType, cancelListener);
+
+ moatRequestor.init(proxyURLFromSettings(aProxySettings),
+ aMeekClientPath, aMeekClientArgs)
+ .then(()=>
+ {
+ let bridgeType = TorLauncherUtil.getCharPref(kPrefBridgeDBType);
+ moatRequestor.fetchBridges([bridgeType])
+ .then(aCaptchaInfo =>
+ {
+ return waitForCaptchaResponse(moatRequestor, aCaptchaInfo);
+ })
+ .then(aBridgeInfo =>
+ {
+ // Success! Keep and display the received bridge information.
+ cleanup(moatRequestor, undefined);
+ gBridgeDBBridges = aBridgeInfo.bridges;
+ showBridgeDBBridges();
+ })
+ .catch(aErr =>
+ {
+ cleanup(moatRequestor, aErr);
+ });
+ })
+ .catch(aErr =>
+ {
+ cleanup(moatRequestor, aErr);
+ });
+} // requestMoatCaptcha
+
+
+function reportMoatError(aDetails)
+{
+ if (!aDetails)
+ aDetails = "";
+
+ let msg = TorLauncherUtil.getFormattedLocalizedString("unable_to_get_bridge",
+ [aDetails], 1);
+ showErrorMessage({ message: msg }, false);
+}
+
+
+function proxyURLFromSettings(aProxySettings)
+{
+ if (!aProxySettings)
+ return undefined;
+
+ let proxyURL;
+ if (aProxySettings[kTorConfKeySocks4Proxy])
+ {
+ proxyURL = "socks4a://" + aProxySettings[kTorConfKeySocks4Proxy];
+ }
+ else if (aProxySettings[kTorConfKeySocks5Proxy])
+ {
+ proxyURL = "socks5://";
+ if (aProxySettings[kTorConfKeySocks5ProxyUsername])
+ {
+ proxyURL += createColonStr(
+ aProxySettings[kTorConfKeySocks5ProxyUsername],
+ aProxySettings[kTorConfKeySocks5ProxyPassword]);
+ proxyURL += "@";
+ }
+ proxyURL += aProxySettings[kTorConfKeySocks5Proxy];
+ }
+ else if (aProxySettings[kTorConfKeyHTTPSProxy])
+ {
+ proxyURL = "http://";
+ if (aProxySettings[kTorConfKeyHTTPSProxyAuthenticator])
+ {
+ proxyURL += aProxySettings[kTorConfKeyHTTPSProxyAuthenticator];
+ proxyURL += "@";
+ }
+ proxyURL += aProxySettings[kTorConfKeyHTTPSProxy];
+ }
+
+ return proxyURL;
+} // proxyURLFromSettings
+
+
+// Returns a promise that is resolved with a bridge info object that includes
+// a bridges property, which is an array of bridge configuration lines.
+function waitForCaptchaResponse(aMoatRequestor, aCaptchaInfo)
+{
+ let mCaptchaInfo;
+
+ function displayCaptcha(aCaptchaInfoArg)
+ {
+ mCaptchaInfo = aCaptchaInfoArg;
+ let image = document.getElementById(kBridgeDBCaptchaImage);
+ if (image)
+ {
+ image.setAttribute("src", mCaptchaInfo.captchaImage);
+ image.style.transition = kCaptchaImageTransition;
+ image.style.height = "125px";
+ }
+
+ setBridgeDBRequestState(undefined);
+ focusCaptchaSolutionTextbox();
+ }
+
+ displayCaptcha(aCaptchaInfo);
+
+ return new Promise((aResolve, aReject) =>
+ {
+ let reloadListener = function(aEvent) {
+ // Reset the UI and request a new CAPTCHA.
+ resetBridgeDBRequestPrompt();
+ setBridgeDBRequestState("fetchingCaptcha");
+ aMoatRequestor.fetchBridges([mCaptchaInfo.transport])
+ .then(aCaptchaInfoArg =>
+ {
+ displayCaptcha(aCaptchaInfoArg);
+ })
+ .catch(aErr =>
+ {
+ aReject(aErr);
+ });
+ };
+
+ let submitListener = function(aEvent) {
+ mCaptchaInfo.solution = getElemValue(kBridgeDBCaptchaSolution);
+ setBridgeDBRequestState("checkingSolution");
+ aMoatRequestor.finishFetch(mCaptchaInfo.transport,
+ mCaptchaInfo.challenge, mCaptchaInfo.solution)
+ .then(aBridgeInfo =>
+ {
+ setBridgeDBRequestState(undefined);
+ aResolve(aBridgeInfo);
+ })
+ .catch(aErr =>
+ {
+ setBridgeDBRequestState(undefined);
+ if ((aErr instanceof TorLauncherBridgeDB.error) &&
+ (aErr.code == TorLauncherBridgeDB.errorCodeBadCaptcha))
+ {
+ // Incorrect solution was entered. Allow the user to try again.
+ let s = TorLauncherUtil.getLocalizedString("bad_captcha_solution");
+ setElemValue(kBridgeDBCaptchaError, s);
+ focusCaptchaSolutionTextbox();
+ }
+ else
+ {
+ aReject(aErr);
+ }
+ });
+ };
+
+ addBridgeDBRequestEventListener(kCaptchaReloadEventType, reloadListener);
+ addBridgeDBRequestEventListener(kCaptchaSubmitEventType, submitListener);
+ });
+} // waitForCaptchaResponse
+
+
+function addBridgeDBRequestEventListener(aEventType, aListener)
+{
+ document.addEventListener(aEventType, aListener, false);
+ gBridgeDBRequestEventListeners.push({type: aEventType, listener: aListener});
+}
+
+
+function removeAllBridgeDBRequestEventListeners()
+{
+ for (let i = gBridgeDBRequestEventListeners.length - 1; i >= 0; --i)
+ {
+ document.removeEventListener(gBridgeDBRequestEventListeners[i].type,
+ gBridgeDBRequestEventListeners[i].listener, false);
+ }
+
+ gBridgeDBRequestEventListeners = [];
+}
+
+
+function focusCaptchaSolutionTextbox()
+{
+ let textBox = document.getElementById(kBridgeDBCaptchaSolution);
+ if (textBox)
+ {
+ textBox.focus();
+ textBox.select();
+ }
+}
diff --git a/src/chrome/content/network-settings.xul b/src/chrome/content/network-settings.xul
index 707990a..6f95183 100644
--- a/src/chrome/content/network-settings.xul
+++ b/src/chrome/content/network-settings.xul
@@ -1,6 +1,6 @@
<?xml version="1.0"?>
<!--
- - Copyright (c) 2017, The Tor Project, Inc.
+ - Copyright (c) 2018, The Tor Project, Inc.
- See LICENSE for licensing information.
- vim: set sw=2 sts=2 ts=8 et syntax=xml:
-->
@@ -74,6 +74,11 @@
<panel id="copyLogFeedbackPanel"/>
</vbox>
+ <vbox id="bridgeDBRequestOverlay" class="messagePanel" pack="center"
+ hidden="true">
+ <vbox id="bridgeDBRequestOverlayContent"/>
+ </vbox>
+
<vbox id="errorOverlay" class="messagePanel" pack="center" hidden="true">
<vbox id="errorOverlayContent"/>
</vbox>
diff --git a/src/chrome/locale/en/network-settings.dtd b/src/chrome/locale/en/network-settings.dtd
index 85645d7..4615146 100644
--- a/src/chrome/locale/en/network-settings.dtd
+++ b/src/chrome/locale/en/network-settings.dtd
@@ -41,6 +41,10 @@
<!ENTITY torsettings.useBridges.checkbox "Tor is censored in my country">
<!ENTITY torsettings.useBridges.default "Select a built-in bridge">
<!ENTITY torsettings.useBridges.default.placeholder "select a bridge">
+<!ENTITY torsettings.useBridges.bridgeDB "Request a bridge from torproject.org">
+<!ENTITY torsettings.useBridges.captchaSolution.placeholder "Enter the characters from the image">
+<!ENTITY torsettings.useBridges.reloadCaptcha.tooltip "Get a new challenge">
+<!ENTITY torsettings.useBridges.captchaSubmit "Submit">
<!ENTITY torsettings.useBridges.custom "Provide a bridge I know">
<!ENTITY torsettings.useBridges.label "Enter bridge information from a trusted source.">
<!ENTITY torsettings.useBridges.placeholder "type address:port (one per line)">
diff --git a/src/chrome/locale/en/torlauncher.properties b/src/chrome/locale/en/torlauncher.properties
index b09753e..a4d097a 100644
--- a/src/chrome/locale/en/torlauncher.properties
+++ b/src/chrome/locale/en/torlauncher.properties
@@ -26,11 +26,21 @@ torlauncher.error_proxy_addr_missing=You must specify both an IP address or host
torlauncher.error_proxy_type_missing=You must select the proxy type.
torlauncher.error_bridges_missing=You must specify one or more bridges.
torlauncher.error_default_bridges_type_missing=You must select a transport type for the provided bridges.
+torlauncher.error_bridgedb_bridges_missing=Please request a bridge.
torlauncher.error_bridge_bad_default_type=No provided bridges that have the transport type %S are available. Please adjust your settings.
torlauncher.bridge_suffix.meek-amazon=(works in China)
torlauncher.bridge_suffix.meek-azure=(works in China)
+torlauncher.request_a_bridge=Request a Bridge…
+torlauncher.request_a_new_bridge=Request a New Bridge…
+torlauncher.contacting_bridgedb=Contacting BridgeDB. Please wait.
+torlauncher.captcha_prompt=Solve the CAPTCHA to request a bridge.
+torlauncher.bad_captcha_solution=The solution is not correct. Please try again.
+torlauncher.unable_to_get_bridge=Unable to obtain a bridge from BridgeDB.\n\n%S
+torlauncher.no_meek=This browser is not configured for meek, which is needed to obtain bridges.
+torlauncher.no_bridges_available=No bridges are available at this time. Sorry.
+
torlauncher.connect=Connect
torlauncher.restart_tor=Restart Tor
torlauncher.quit=Quit
@@ -62,3 +72,7 @@ torlauncher.bootstrapWarning.timeout=connection timeout
torlauncher.bootstrapWarning.noroute=no route to host
torlauncher.bootstrapWarning.ioerror=read/write error
torlauncher.bootstrapWarning.pt_missing=missing pluggable transport
+
+torlauncher.nsresult.NS_ERROR_NET_RESET=The connection to the server was lost.
+torlauncher.nsresult.NS_ERROR_CONNECTION_REFUSED=Could not connect to the server.
+torlauncher.nsresult.NS_ERROR_PROXY_CONNECTION_REFUSED=Could not connect to the proxy.
diff --git a/src/chrome/skin/activity.svg b/src/chrome/skin/activity.svg
new file mode 100644
index 0000000..3aae4aa
--- /dev/null
+++ b/src/chrome/skin/activity.svg
@@ -0,0 +1,17 @@
+<!-- Based on http://goo.gl/7AJzbL By Sam Herbert -->
+<svg width="40" height="40" viewBox="0 0 40 40" xmlns="http://www.w3.org/2000/svg" stroke="#000">
+ <g fill="none" fill-rule="evenodd">
+ <g transform="translate(1 1)" stroke-width="6">
+ <circle stroke-opacity=".4" cx="18" cy="18" r="16"/>
+ <path d="M34 18c0-9.94-8.06-18-18-16">
+ <animateTransform
+ attributeName="transform"
+ type="rotate"
+ from="0 18 18"
+ to="360 18 18"
+ dur="1s"
+ repeatCount="indefinite"/>
+ </path>
+ </g>
+ </g>
+</svg>
\ No newline at end of file
diff --git a/src/chrome/skin/network-settings.css b/src/chrome/skin/network-settings.css
index 259e38d..9a02493 100644
--- a/src/chrome/skin/network-settings.css
+++ b/src/chrome/skin/network-settings.css
@@ -1,5 +1,5 @@
/*
- * Copyright (c) 2017, The Tor Project, Inc.
+ * Copyright (c) 2018, The Tor Project, Inc.
* See LICENSE for licensing information.
*
* vim: set sw=2 sts=2 ts=8 et syntax=css:
@@ -18,14 +18,14 @@ dialog.os-windows {
wizard {
width: 45em;
- height: 36em;
+ height: 38em;
font: -moz-dialog;
padding-top: 0px;
}
wizard.os-windows {
width: 49em;
- height: 42em;
+ height: 44em;
}
.wizard-page-box {
@@ -67,8 +67,15 @@ wizard radiogroup {
margin: 9px 40px;
}
-separator.tall {
- height: 2.1em;
+.firstResponses,
+wizard #bridgeSettings,
+wizard #proxySettings {
+ margin-top: 15px;
+}
+
+.bridgeRadioContainer {
+ min-height: 30px; /* ensure no height change when dropdown menu is hidden */
+ vertical-align: middle;
}
.help .heading,
@@ -105,6 +112,7 @@ wizard#TorLauncherLocalePicker button[dlgtype="next"] {
#bridgeNote,
#bridgeDefaultEntry,
+#bridgeDBContainer,
#bridgeCustomEntry {
margin-left: 1.8em;
}
@@ -114,6 +122,15 @@ wizard.os-mac #bridgeList {
font-size: 90%;
}
+#bridgeDBResult {
+ font-size: 90%;
+ white-space: pre;
+}
+
+#bridgeDBResult[value=""] {
+ display: none;
+}
+
/* reuse Mozilla's help button from the Firefox hamburger menu */
.helpButton {
list-style-image: url(chrome://browser/skin/menuPanel-help.png);
@@ -171,6 +188,7 @@ wizardpage[pageid="restartPanel"] description,
text-align: start;
}
+#bridgeDBRequestOverlayContent,
#errorOverlayContent {
margin: 50px;
min-height: 12em;
@@ -178,6 +196,62 @@ wizardpage[pageid="restartPanel"] description,
box-shadow: 0px 0px 50px rgba(0,0,0,0.9);
}
+#bridgeDBRequestOverlayContent > vbox {
+ margin: 20px;
+}
+
+#bridgeDBPrompt {
+ text-align: center;
+}
+
+#bridgeDBCaptchaImage {
+ margin: 16px 0px;
+ width: 400px;
+ /* height is set via code so it can be animated. */
+}
+
+#bridgeDBReloadSpacer {
+ width: 20px; /* matches the width of #bridgeDBReloadCaptchaButton */
+}
+
+#bridgeDBReloadCaptchaButton {
+ list-style-image: url("chrome://torlauncher/skin/reload.svg");
+ -moz-appearance: none;
+ width: 20px; /* matches the width of #bridgeDBReloadSpacer */
+ height: 20px;
+ min-height: 20px;
+ min-width: 20px;
+ margin: 0;
+ background: none;
+ border: none;
+ box-shadow: none;
+}
+
+#bridgeDBNetworkActivity {
+ list-style-image: url("chrome://torlauncher/skin/activity.svg");
+ width: 20px;
+ height: 20px;
+}
+
+#bridgeDBCaptchaError {
+ color: red;
+ font-weight: bold;
+ text-align: center;
+}
+
+/* Hide BridgeDB overlay elements based on the state attribute. */
+#bridgeDBRequestOverlay[state="fetchingCaptcha"] #bridgeDBReloadCaptchaButton,
+#bridgeDBRequestOverlay[state="checkingSolution"] #bridgeDBReloadCaptchaButton,
+#bridgeDBRequestOverlay[state="fetchingCaptcha"] #bridgeDBCaptchaSolution {
+ visibility: hidden;
+}
+
+#bridgeDBRequestOverlay[state="fetchingCaptcha"] #bridgeDBCaptchaError,
+#bridgeDBRequestOverlay[state="fetchingCaptcha"] #bridgeDBSubmitButton,
+#bridgeDBRequestOverlay[state="checkingSolution"] #bridgeDBSubmitButton {
+ display: none;
+}
+
#errorOverlayContent button[errorElemId="dismissButton"] {
margin-bottom: 20px;
}
diff --git a/src/chrome/skin/reload.svg b/src/chrome/skin/reload.svg
new file mode 100644
index 0000000..d218991
--- /dev/null
+++ b/src/chrome/skin/reload.svg
@@ -0,0 +1,6 @@
+<!-- This Source Code Form is subject to the terms of the Mozilla Public
+ - License, v. 2.0. If a copy of the MPL was not distributed with this
+ - file, You can obtain one at http://mozilla.org/MPL/2.0/. -->
+<svg xmlns="http://www.w3.org/2000/svg" width="16" height="16" viewBox="0 0 16 16">
+ <path fill="#000000" d="M15 8H8l2.8-2.8a3.691 3.691 0 0 0-2.3-.7 4 4 0 0 0 0 8 3.9 3.9 0 0 0 3.4-1.9l2.3 1A6.5 6.5 0 1 1 8.5 2a6.773 6.773 0 0 1 4.1 1.4L15 1z"/>
+</svg>
diff --git a/src/defaults/preferences/prefs.js b/src/defaults/preferences/prefs.js
index 752514a..cab235a 100644
--- a/src/defaults/preferences/prefs.js
+++ b/src/defaults/preferences/prefs.js
@@ -45,6 +45,12 @@ pref("extensions.torlauncher.tor_path", "");
pref("extensions.torlauncher.torrc_path", "");
pref("extensions.torlauncher.tordatadir_path", "");
+// BridgeDB-related preferences (used for Moat).
+pref("extensions.torlauncher.bridgedb_front", "www.google.com");
+pref("extensions.torlauncher.bridgedb_reflector", "https://tor-bridges-hyphae-channel.appspot.com");
+pref("extensions.torlauncher.moat_service", "https://bridges.torproject.org/moat");
+pref("extensions.torlauncher.bridgedb_bridge_type", "obfs4");
+
// Recommended default bridge type (can be set per localized bundle).
// pref("extensions.torlauncher.default_bridge_recommended_type", "obfs3");
diff --git a/src/modules/tl-bridgedb.jsm b/src/modules/tl-bridgedb.jsm
new file mode 100644
index 0000000..339cb39
--- /dev/null
+++ b/src/modules/tl-bridgedb.jsm
@@ -0,0 +1,746 @@
+// Copyright (c) 2018, The Tor Project, Inc.
+// See LICENSE for licensing information.
+//
+// vim: set sw=2 sts=2 ts=8 et syntax=javascript:
+
+/*************************************************************************
+ * Tor Launcher BridgeDB Communication Module
+ * https://github.com/isislovecruft/bridgedb/#accessing-the-moat-interface
+ *************************************************************************/
+
+let EXPORTED_SYMBOLS = [ "TorLauncherBridgeDB" ];
+
+const Cc = Components.classes;
+const Ci = Components.interfaces;
+const Cr = Components.results;
+const Cu = Components.utils;
+
+Cu.import("resource://gre/modules/Services.jsm");
+Cu.import("resource://gre/modules/Subprocess.jsm");
+Cu.import("resource://gre/modules/XPCOMUtils.jsm");
+
+XPCOMUtils.defineLazyModuleGetter(this, "TorLauncherUtil",
+ "resource://torlauncher/modules/tl-util.jsm");
+XPCOMUtils.defineLazyModuleGetter(this, "TorLauncherLogger",
+ "resource://torlauncher/modules/tl-logger.jsm");
+
+let TorLauncherBridgeDB = // Public
+{
+ get isMoatConfigured()
+ {
+ let pref = _MoatRequestor.prototype.kPrefMoatService;
+ return !!TorLauncherUtil.getCharPref(pref);
+ },
+
+ // Returns an _MoatRequestor object.
+ createMoatRequestor: function()
+ {
+ return new _MoatRequestor();
+ },
+
+ // Extended Error object which is used when we have a numeric code and
+ // a text error message.
+ error: function(aCode, aMessage)
+ {
+ this.code = aCode;
+ this.message = aMessage;
+ },
+
+ errorCodeBadCaptcha: 419
+};
+
+TorLauncherBridgeDB.error.prototype = Error.prototype; // subclass Error
+
+Object.freeze(TorLauncherBridgeDB);
+
+
+function _MoatRequestor()
+{
+}
+
+_MoatRequestor.prototype =
+{
+ kMaxResponseLength: 1024 * 400,
+ kTransport: "meek",
+ kMoatContentType: "application/vnd.api+json",
+ kMoatVersion: "0.1.0",
+ kPrefBridgeDBFront: "extensions.torlauncher.bridgedb_front",
+ kPrefBridgeDBReflector: "extensions.torlauncher.bridgedb_reflector",
+ kPrefMoatService: "extensions.torlauncher.moat_service",
+ kMoatFetchURLPath: "/fetch",
+ kMoatFetchRequestType: "client-transports",
+ kMoatFetchResponseType: "moat-challenge",
+ kMoatCheckURLPath: "/check",
+ kMoatCheckRequestType: "moat-solution",
+ kMoatCheckResponseType: "moat-bridges",
+
+ kStateIdle: 0,
+ kStateWaitingForVersion: 1,
+ kStateWaitingForProxyDone: 2,
+ kStateWaitingForCMethod: 3,
+ kStateWaitingForCMethodsDone: 4,
+ kStateInitialized: 5,
+
+ mState: this.kStateIdle,
+
+ mLocalProxyURL: undefined,
+ mMeekFront: undefined, // Frontend server, if we are using one.
+ mMeekClientProcess: undefined,
+ mMeekClientStdoutBuffer: undefined,
+ mMeekClientProxyType: undefined, // contains Mozilla names such as socks4
+ mMeekClientIP: undefined,
+ mMeekClientPort: undefined,
+ mMoatResponseListener: undefined,
+ mUserCanceled: false,
+
+ // Returns a promise.
+ init: function(aProxyURL, aMeekClientPath, aMeekClientArgs)
+ {
+ this.mLocalProxyURL = aProxyURL;
+ return this._startMeekClient(aMeekClientPath, aMeekClientArgs);
+ },
+
+ close: function()
+ {
+ if (this.mMeekClientProcess)
+ {
+ this.mMeekClientProcess.kill();
+ this.mMeekClientProcess = undefined;
+ }
+ },
+
+ // Public function: request bridges via Moat.
+ // Returns a promise that is fulfilled with an object that contains:
+ // transport
+ // captchaImage
+ // challenge
+ //
+ // aTransports is an array of transport strings. Supported values:
+ // "vanilla"
+ // "fte"
+ // "obfs3"
+ // "obfs4"
+ // "scramblesuit"
+ fetchBridges: function(aTransports)
+ {
+ this.mUserCanceled = false;
+ if (!this.mMeekClientProcess)
+ return this._meekClientNotRunningError();
+
+ let requestObj = {
+ data: [{
+ version: this.kMoatVersion,
+ type: this.kMoatFetchRequestType,
+ supported: aTransports
+ }]
+ };
+ return this._sendMoatRequest(requestObj, false);
+ },
+
+ // Public function: check CAPTCHA and retrieve bridges via Moat.
+ // Returns a promise that is fulfilled with an object that contains:
+ // bridges // an array of strings (bridge lines)
+ finishFetch: function(aTransport, aChallenge, aSolution)
+ {
+ this.mUserCanceled = false;
+ if (!this.mMeekClientProcess)
+ return this._meekClientNotRunningError();
+
+ let requestObj = {
+ data: [{
+ id: "2",
+ type: this.kMoatCheckRequestType,
+ version: this.kMoatVersion,
+ transport: aTransport,
+ challenge: aChallenge,
+ solution: aSolution,
+ qrcode: "false"
+ }]
+ };
+ return this._sendMoatRequest(requestObj, true);
+ },
+
+ // Returns true if a promise is pending (which will be rejected), e.g.,
+ // if a network request is active or we are inside init().
+ cancel: function()
+ {
+ this.mUserCanceled = true;
+ if (this.mMoatResponseListener)
+ return this.mMoatResponseListener.cancelMoatRequest();
+
+ if (this.mState != this.kStateInitialized)
+ {
+ // close() will kill the meek client process, which will cause
+ // initialization to fail.
+ this.close();
+ return true;
+ }
+
+ return false;
+ },
+
+ // Returns a rejected promise.
+ _meekClientNotRunningError()
+ {
+ return Promise.reject(new Error("The meek client exited unexpectedly."));
+ },
+
+ // Returns a promise.
+ _startMeekClient: function(aMeekClientPath, aMeekClientArgs)
+ {
+ let workDir = TorLauncherUtil.getTorFile("pt-startup-dir", false);
+ if (!workDir)
+ return Promise.reject(new Error("Missing pt-startup-dir."));
+
+ // Ensure that we have an absolute path for the meek client program.
+ // This is necessary because Subprocess.call() checks for the existence
+ // of the file before it changes to the startup (working) directory.
+ let meekClientPath;
+ let re = (TorLauncherUtil.isWindows) ? /^[A-Za-z]:\\/ : /^\//;
+ if (re.test(aMeekClientPath))
+ {
+ meekClientPath = aMeekClientPath; // We already have an absolute path.
+ }
+ else
+ {
+ let f = workDir.clone();
+ f.appendRelativePath(aMeekClientPath);
+ meekClientPath = f.path;
+ }
+
+ // Construct the args array.
+ let args = aMeekClientArgs.slice(); // make a copy
+ let meekReflector = TorLauncherUtil.getCharPref(this.kPrefBridgeDBReflector);
+ if (meekReflector)
+ {
+ args.push("-url");
+ args.push(meekReflector);
+ }
+ this.mMeekFront = TorLauncherUtil.getCharPref(this.kPrefBridgeDBFront);
+ if (this.mMeekFront)
+ {
+ args.push("-front");
+ args.push(this.mMeekFront);
+ }
+
+ let ptStateDir = TorLauncherUtil.getTorFile("tordatadir", false);
+ if (!ptStateDir)
+ {
+ let msg = TorLauncherUtil.getLocalizedString("datadir_missing");
+ return Promise.reject(new Error(msg));
+ }
+ ptStateDir.append("pt_state"); // Match what tor uses.
+
+ let envAdditions = { TOR_PT_MANAGED_TRANSPORT_VER: "1",
+ TOR_PT_STATE_LOCATION: ptStateDir.path,
+ TOR_PT_EXIT_ON_STDIN_CLOSE: "1",
+ TOR_PT_CLIENT_TRANSPORTS: this.kTransport };
+ if (this.mLocalProxyURL)
+ envAdditions.TOR_PT_PROXY = this.mLocalProxyURL;
+
+ TorLauncherLogger.log(3, "starting " + meekClientPath + " in "
+ + workDir.path);
+ TorLauncherLogger.log(3, "args " + JSON.stringify(args));
+ TorLauncherLogger.log(3, "env additions " + JSON.stringify(envAdditions));
+ let opts = { command: meekClientPath,
+ arguments: args,
+ workdir: workDir.path,
+ environmentAppend: true,
+ environment: envAdditions,
+ stderr: "pipe" };
+ return Subprocess.call(opts)
+ .then(aProc =>
+ {
+ this.mMeekClientProcess = aProc;
+ aProc.wait()
+ .then(aExitObj =>
+ {
+ this.mMeekClientProcess = undefined;
+ TorLauncherLogger.log(3, "The meek client exited");
+ });
+
+ this.mState = this.kStateWaitingForVersion;
+ TorLauncherLogger.log(3, "The meek client process has been started");
+ this._startStderrLogger();
+ return this._meekClientHandshake(aProc);
+ });
+ }, // _startMeekClient
+
+ // Returns a promise that is resolved when the PT handshake finishes.
+ _meekClientHandshake: function(aMeekClientProc)
+ {
+ return new Promise((aResolve, aReject) =>
+ {
+ this._startStdoutRead(aResolve, aReject);
+ });
+ },
+
+ _startStdoutRead: function(aResolve, aReject)
+ {
+ if (!this.mMeekClientProcess)
+ throw new Error("No meek client process.");
+
+ let readPromise = this.mMeekClientProcess.stdout.readString();
+ readPromise
+ .then(aStr =>
+ {
+ if (!aStr || (aStr.length == 0))
+ {
+ let err = "The meek client exited unexpectedly during the pluggable transport handshake.";
+ TorLauncherLogger.log(3, err);
+ throw new Error(err);
+ }
+
+ TorLauncherLogger.log(2, "meek client stdout: " + aStr);
+ if (!this.mMeekClientStdoutBuffer)
+ this.mMeekClientStdoutBuffer = aStr;
+ else
+ this.mMeekClientStdoutBuffer += aStr;
+
+ if (this._processStdoutLines())
+ {
+ aResolve();
+ }
+ else
+ {
+ // The PT handshake has not finished yet. Read more data.
+ this._startStdoutRead(aResolve, aReject);
+ }
+ })
+ .catch(aErr =>
+ {
+ aReject(this.mUserCanceled ? Cr.NS_ERROR_ABORT : aErr);
+ });
+ }, // _startStdoutRead
+
+ _startStderrLogger: function()
+ {
+ if (!this.mMeekClientProcess)
+ return;
+
+ let readPromise = this.mMeekClientProcess.stderr.readString();
+ readPromise
+ .then(aStr =>
+ {
+ if (aStr)
+ {
+ TorLauncherLogger.log(5, "meek client stderr: " + aStr);
+ this._startStderrLogger();
+ }
+ });
+ }, // _startStderrLogger
+
+ // May throw. Returns true when the PT handshake is complete.
+ // Conforms to the parent process role of the PT protocol.
+ // See: https://gitweb.torproject.org/torspec.git/tree/pt-spec.txt
+ _processStdoutLines: function()
+ {
+ if (!this.mMeekClientStdoutBuffer)
+ throw new Error("The stdout buffer is missing.");
+
+ let idx = this.mMeekClientStdoutBuffer.indexOf('\n');
+ while (idx >= 0)
+ {
+ let line = this.mMeekClientStdoutBuffer.substring(0, idx);
+ let tokens = line.split(' ');
+ this.mMeekClientStdoutBuffer =
+ this.mMeekClientStdoutBuffer.substring(idx + 1);
+ idx = this.mMeekClientStdoutBuffer.indexOf('\n');
+
+ // Per the PT specification, unknown keywords are ignored.
+ let keyword = tokens[0];
+ let errMsg;
+ switch (this.mState) {
+ case this.kStateWaitingForVersion:
+ if (keyword == "VERSION")
+ {
+ if (this.mLocalProxyURL)
+ this.mState = this.kStateWaitingForProxyDone;
+ else
+ this.mState = this.kStateWaitingForCMethod;
+ }
+ else if (keyword == "VERSION-ERROR")
+ {
+ throw new Error("Unsupported pluggable transport version.");
+ }
+ break;
+ case this.kStateWaitingForProxyDone:
+ if ((keyword == "ENV-ERROR") || (keyword == "PROXY-ERROR"))
+ throw new Error(line);
+
+ if ((keyword == "PROXY") &&
+ (tokens.length > 1) && (tokens[1] == "DONE"))
+ {
+ this.mState = this.kStateWaitingForCMethod;
+ }
+ break;
+ case this.kStateWaitingForCMethod:
+ if (keyword == "ENV-ERROR")
+ throw new Error(line);
+
+ if (keyword == "CMETHOD")
+ {
+ if (tokens.length != 4)
+ {
+ errMsg = "Invalid CMETHOD response (too few parameters).";
+ }
+ else if (tokens[1] != this.kTransport)
+ {
+ errMsg = "Unexpected transport " + tokens[1]
+ + " in CMETHOD response.";
+ }
+ else
+ {
+ let proxyType = tokens[2];
+ if (proxyType == "socks5")
+ {
+ this.mMeekClientProxyType = "socks";
+ }
+ else if ((proxyType == "socks4a") || (proxyType == "socks4"))
+ {
+ this.mMeekClientProxyType = "socks4";
+ }
+ else
+ {
+ errMsg = "Unexpected proxy type " + proxyType +
+ " in CMETHOD response.";
+ break;
+ }
+ let addrPort = tokens[3];
+ let colonIdx = addrPort.indexOf(':');
+ if (colonIdx < 1)
+ {
+ errMsg = "Missing port in CMETHOD response.";
+ }
+ else
+ {
+ this.mMeekClientIP = addrPort.substring(0, colonIdx);
+ this.mMeekClientPort =
+ parseInt(addrPort.substring(colonIdx + 1));
+ }
+ }
+ }
+ else if (keyword == "CMETHOD-ERROR")
+ {
+ if (tokens.length < 3)
+ {
+ errMsg = "Invalid CMETHOD-ERROR response (too few parameters).";
+ }
+ else
+ {
+ errMsg = tokens[1] + " not available: "
+ + tokens.slice(2).join(' ');
+ }
+ }
+ else if ((keyword == "CMETHODS") && (tokens.length > 1) &&
+ (tokens[1] == "DONE"))
+ {
+ this.mState = this.kStateInitialized;
+ }
+ break;
+ }
+
+ if (errMsg)
+ throw new Error(errMsg);
+ }
+
+ if (this.mState == this.kStateInitialized)
+ {
+ TorLauncherLogger.log(2, "meek client proxy type: "
+ + this.mMeekClientProxyType);
+ TorLauncherLogger.log(2, "meek client proxy IP: "
+ + this.mMeekClientIP);
+ TorLauncherLogger.log(2, "meek client proxy port: "
+ + this.mMeekClientPort);
+ }
+
+ return (this.mState == this.kStateInitialized);
+ }, // _processStdoutLines
+
+ // Returns a promise.
+ // Based on meek/firefox/components/main.js
+ _sendMoatRequest: function(aRequestObj, aIsCheck)
+ {
+ let proxyPS = Cc["@mozilla.org/network/protocol-proxy-service;1"]
+ .getService(Ci.nsIProtocolProxyService);
+ let flags = Ci.nsIProxyInfo.TRANSPARENT_PROXY_RESOLVES_HOST;
+ let noTimeout = 0xFFFFFFFF; // UINT32_MAX
+ let proxyInfo = proxyPS.newProxyInfo(this.mMeekClientProxyType,
+ this.mMeekClientIP, this.mMeekClientPort,
+ flags, noTimeout, undefined);
+ let uriStr = TorLauncherUtil.getCharPref(this.kPrefMoatService);
+ if (!uriStr)
+ {
+ return Promise.reject(
+ new Error("Missing value for " + this.kPrefMoatService));
+ }
+
+ uriStr += (aIsCheck) ? this.kMoatCheckURLPath : this.kMoatFetchURLPath;
+ let uri = Services.io.newURI(uriStr);
+
+ // There does not seem to be a way to directly create an nsILoadInfo from
+ // JavaScript, so we create a throw away non-proxied channel to get one.
+ let loadInfo = Services.io.newChannelFromURI2(uri, undefined,
+ Services.scriptSecurityManager.getSystemPrincipal(),
+ undefined,
+ Ci.nsILoadInfo.SEC_ALLOW_CROSS_ORIGIN_DATA_IS_NULL,
+ Ci.nsIContentPolicy.TYPE_OTHER).loadInfo;
+ let httpHandler = Services.io.getProtocolHandler("http")
+ .QueryInterface(Ci.nsIHttpProtocolHandler);
+ let ch = httpHandler.newProxiedChannel2(uri, proxyInfo, 0, undefined,
+ loadInfo).QueryInterface(Ci.nsIHttpChannel);
+
+ // Remove unwanted HTTP headers and set request parameters.
+ let headers = [];
+ ch.visitRequestHeaders({visitHeader: function(aKey, aValue) {
+ headers.push(aKey); }});
+ headers.forEach(aKey =>
+ {
+ if (aKey !== "Host")
+ ch.setRequestHeader(aKey, "", false);
+ });
+
+ // BridgeDB expects to receive an X-Forwarded-For header. If we are
+ // not using domain fronting (e.g., in a test setup), include a fake
+ // header value.
+ if (!this.mMeekFront)
+ ch.setRequestHeader("X-Forwarded-For", "1.2.3.4", false);
+
+ // Arrange for the POST data to be sent.
+ let requestData = JSON.stringify(aRequestObj);
+ let inStream = Cc["@mozilla.org/io/string-input-stream;1"]
+ .createInstance(Ci.nsIStringInputStream);
+ inStream.setData(requestData, requestData.length);
+ let upChannel = ch.QueryInterface(Ci.nsIUploadChannel);
+ upChannel.setUploadStream(inStream, this.kMoatContentType,
+ requestData.length);
+ ch.requestMethod = "POST";
+
+ return new Promise((aResolve, aReject) =>
+ {
+ this.mMoatResponseListener =
+ new _MoatResponseListener(this, ch, aIsCheck, aResolve, aReject);
+ TorLauncherLogger.log(1, "Moat JSON request: " + requestData);
+ ch.asyncOpen(this.mMoatResponseListener, ch);
+ });
+ } // _sendMoatRequest
+};
+
+
+// _MoatResponseListener is an HTTP stream listener that knows how to
+// process Moat /fetch and /check responses.
+function _MoatResponseListener(aRequestor, aChannel, aIsCheck,
+ aResolve, aReject)
+{
+ this.mRequestor = aRequestor;
+ this.mChannel = aChannel;
+ this.mIsCheck = aIsCheck;
+ this.mResolveCallback = aResolve;
+ this.mRejectCallback = aReject;
+}
+
+
+_MoatResponseListener.prototype =
+{
+ mRequestor: undefined,
+ mChannel: undefined,
+ mIsCheck: false,
+ mResolveCallback: undefined,
+ mRejectCallback: undefined,
+ mResponseLength: 0,
+ mResponseBody: undefined,
+
+ onStartRequest: function(aRequest, aContext)
+ {
+ this.mResponseLength = 0;
+ this.mResponseBody = "";
+ },
+
+ onStopRequest: function(aRequest, aContext, aStatus)
+ {
+ this.mChannel = undefined;
+
+ if (!Components.isSuccessCode(aStatus))
+ {
+ this.mRejectCallback(new TorLauncherBridgeDB.error(aStatus,
+ TorLauncherUtil.getLocalizedStringForError(aStatus)));
+ return;
+ }
+
+ let statusCode, msg;
+ try
+ {
+ statusCode = aContext.responseStatus;
+ if (aContext.responseStatusText)
+ msg = statusCode + " " + aContext.responseStatusText;
+ }
+ catch (e) {}
+
+ TorLauncherLogger.log(3, "Moat response HTTP status: " + statusCode);
+ if (statusCode != 200)
+ {
+ this.mRejectCallback(new TorLauncherBridgeDB.error(statusCode, msg));
+ return;
+ }
+
+ TorLauncherLogger.log(1, "Moat JSON response: " + this.mResponseBody);
+
+ try
+ {
+ // Parse the response. We allow response.data to be an array or object.
+ let response = JSON.parse(this.mResponseBody);
+ if (response.data && Array.isArray(response.data))
+ response.data = response.data[0];
+
+ let errCode = 400;
+ let errStr;
+ if (!response.data)
+ {
+ if (response.errors && Array.isArray(response.errors))
+ {
+ errCode = response.errors[0].code;
+ errStr = response.errors[0].detail;
+ if (this.mIsCheck && (errCode == 404))
+ errStr = TorLauncherUtil.getLocalizedString("no_bridges_available");
+ }
+ else
+ {
+ errStr = "missing data in Moat response";
+ }
+ }
+ else if (response.data.version !== this.mRequestor.kMoatVersion)
+ {
+ errStr = "unexpected version";
+ }
+
+ if (errStr)
+ this.mRejectCallback(new TorLauncherBridgeDB.error(errCode, errStr));
+ else if (!this.mIsCheck)
+ this._parseFetchResponse(response);
+ else
+ this._parseCheckResponse(response);
+ }
+ catch(e)
+ {
+ TorLauncherLogger.log(3, "received invalid JSON: " + e);
+ this.mRejectCallback(e);
+ }
+ }, // onStopRequest
+
+ onDataAvailable: function(aRequest, aContext, aStream, aSrcOffset, aLength)
+ {
+ TorLauncherLogger.log(2, "Moat onDataAvailable: " + aLength + " bytes");
+ if ((this.mResponseLength + aLength) > this.mRequestor.kMaxResponseLength)
+ {
+ aRequest.cancel(Cr.NS_ERROR_FAILURE);
+ this.mChannel = undefined;
+ this.mRejectCallback(new TorLauncherBridgeDB.error(500,
+ "Moat response too large"));
+ return;
+ }
+
+ this.mResponseLength += aLength;
+ let scriptableStream = Cc["@mozilla.org/scriptableinputstream;1"]
+ .createInstance(Ci.nsIScriptableInputStream);
+ scriptableStream.init(aStream);
+ this.mResponseBody += scriptableStream.read(aLength);
+ },
+
+ cancelMoatRequest: function()
+ {
+ let didCancel = false;
+ let rv = Cr.NS_ERROR_ABORT;
+ if (this.mChannel)
+ {
+ this.mChannel.cancel(rv);
+ this.mChannel = undefined;
+ didCancel = true;
+ }
+
+ this.mRejectCallback(rv);
+ return didCancel;
+ },
+
+ _parseFetchResponse: function(aResponse)
+ {
+ /*
+ * Expected response if successful:
+ * {
+ * "data": {
+ * "id": "1",
+ * "type": "moat-challenge",
+ * "version": "0.1.0",
+ * "transport": TRANSPORT,
+ * "image": CAPTCHA,
+ * "challenge": CHALLENGE
+ * }
+ * }
+ *
+ * If there is no overlap between the type of bridge we requested and
+ * the transports which BridgeDB supports, the response is the same except
+ * the transport property will contain an array of supported transports:
+ * ...
+ * "transport": [ "TRANSPORT", "TRANSPORT", ... ],
+ * ...
+ */
+
+ // We do not check aResponse.id because it may vary.
+ let errStr;
+ if (aResponse.data.type !== this.mRequestor.kMoatFetchResponseType)
+ errStr = "unexpected response type";
+ else if (!aResponse.data.transport)
+ errStr = "missing transport";
+ else if (!aResponse.data.challenge)
+ errStr = "missing challenge";
+ else if (!aResponse.data.image)
+ errStr = "missing CAPTCHA image";
+
+ if (errStr)
+ {
+ this.mRejectCallback(new TorLauncherBridgeDB.error(500, errStr));
+ }
+ else
+ {
+ let imageURI = "data:image/jpeg;base64,"
+ + encodeURIComponent(aResponse.data.image);
+ // If there was no overlap between the bridge type we requested and what
+ // BridgeDB has, we use the first type that BridgeDB can provide.
+ let t = aResponse.data.transport;
+ if (Array.isArray(t))
+ t = t[0];
+ this.mResolveCallback({ captchaImage: imageURI,
+ transport: t,
+ challenge: aResponse.data.challenge });
+ }
+ }, // _parseFetchResponse
+
+ _parseCheckResponse: function(aResponse)
+ {
+ /*
+ * Expected response if successful:
+ * {
+ * "data": {
+ * "id": "3",
+ * "type": "moat-bridges",
+ * "version": "0.1.0",
+ * "bridges": [ "BRIDGE_LINE", ... ],
+ * "qrcode": "QRCODE"
+ * }
+ * }
+ */
+
+ // We do not check aResponse.id because it may vary.
+ // To be robust, we treat a zero-length bridge array the same as the 404
+ // error (no bridges available), which is handled inside onStopRequest().
+ let errStr;
+ if (aResponse.data.type !== this.mRequestor.kMoatCheckResponseType)
+ errStr = "unexpected response type";
+ else if (!aResponse.data.bridges || (aResponse.data.bridges.length == 0))
+ errStr = TorLauncherUtil.getLocalizedString("no_bridges_available");
+
+ if (errStr)
+ this.mRejectCallback(new TorLauncherBridgeDB.error(500, errStr));
+ else
+ this.mResolveCallback({ bridges: aResponse.data.bridges });
+ } // _parseCheckResponse
+};
diff --git a/src/modules/tl-util.jsm b/src/modules/tl-util.jsm
index bb84bdf..a79e2bd 100644
--- a/src/modules/tl-util.jsm
+++ b/src/modules/tl-util.jsm
@@ -1,4 +1,4 @@
-// Copyright (c) 2017, The Tor Project, Inc.
+// Copyright (c) 2018, The Tor Project, Inc.
// See LICENSE for licensing information.
//
// vim: set sw=2 sts=2 ts=8 et syntax=javascript:
@@ -12,8 +12,10 @@ let EXPORTED_SYMBOLS = [ "TorLauncherUtil" ];
const Cc = Components.classes;
const Ci = Components.interfaces;
const Cu = Components.utils;
+const Cr = Components.results;
const kPropBundleURI = "chrome://torlauncher/locale/torlauncher.properties";
const kPropNamePrefix = "torlauncher.";
+const kPrefBranchDefaultBridge = "extensions.torlauncher.default_bridge.";
Cu.import("resource://gre/modules/XPCOMUtils.jsm");
XPCOMUtils.defineLazyModuleGetter(this, "TorLauncherLogger",
@@ -161,6 +163,24 @@ let TorLauncherUtil = // Public
return aStringName;
},
+ getLocalizedStringForError: function(aNSResult)
+ {
+ for (let prop in Cr)
+ {
+ if (Cr[prop] == aNSResult)
+ {
+ let key = "nsresult." + prop;
+ let rv = this.getLocalizedString(key);
+ if (rv !== key)
+ return rv;
+
+ return prop; // As a fallback, return the NS_ERROR... name.
+ }
+ }
+
+ return undefined;
+ },
+
getLocalizedBootstrapStatus: function(aStatusObj, aKeyword)
{
if (!aStatusObj || !aKeyword)
@@ -276,6 +296,13 @@ let TorLauncherUtil = // Public
} catch (e) {}
},
+ getPrefBranch: function(aBranchName)
+ {
+ return Cc["@mozilla.org/preferences-service;1"]
+ .getService(Ci.nsIPrefService)
+ .getBranch(aBranchName);
+ },
+
// Currently, this returns a random permutation of an array, bridgeArray.
// Later, we might want to change this function to weight based on the
// bridges' bandwidths.
@@ -361,9 +388,7 @@ let TorLauncherUtil = // Public
{
try
{
- var prefBranch = Cc["@mozilla.org/preferences-service;1"]
- .getService(Ci.nsIPrefService)
- .getBranch("extensions.torlauncher.default_bridge.");
+ var prefBranch = this.getPrefBranch(kPrefBranchDefaultBridge);
var childPrefs = prefBranch.getChildList("", []);
var typeArray = [];
for (var i = 0; i < childPrefs.length; ++i)
@@ -390,9 +415,7 @@ let TorLauncherUtil = // Public
try
{
- var prefBranch = Cc["@mozilla.org/preferences-service;1"]
- .getService(Ci.nsIPrefService)
- .getBranch("extensions.torlauncher.default_bridge.");
+ var prefBranch = this.getPrefBranch(kPrefBranchDefaultBridge);
var childPrefs = prefBranch.getChildList("", []);
var bridgeArray = [];
// The pref service seems to return the values in reverse order, so
@@ -430,11 +453,13 @@ let TorLauncherUtil = // Public
let isRelativePath = false;
let isUserData = (aTorFileType != "tor") &&
+ (aTorFileType != "pt-startup-dir") &&
(aTorFileType != "torrc-defaults");
let isControlIPC = ("control_ipc" == aTorFileType);
let isSOCKSIPC = ("socks_ipc" == aTorFileType);
let isIPC = isControlIPC || isSOCKSIPC;
let checkIPCPathLen = true;
+ let useAppDir = false;
const kControlIPCFileName = "control.socket";
const kSOCKSIPCFileName = "socks.socket";
@@ -523,6 +548,8 @@ let TorLauncherUtil = // Public
{
if ("tor" == aTorFileType)
path = "TorBrowser\\Tor\\tor.exe";
+ else if ("pt-startup-dir" == aTorFileType)
+ useAppDir = true;
else if ("torrc-defaults" == aTorFileType)
path = "TorBrowser\\Tor\\torrc-defaults";
else if ("torrc" == aTorFileType)
@@ -534,6 +561,8 @@ let TorLauncherUtil = // Public
{
if ("tor" == aTorFileType)
path = "Contents/Resources/TorBrowser/Tor/tor";
+ else if ("pt-startup-dir" == aTorFileType)
+ path = "Contents/MacOS/Tor";
else if ("torrc-defaults" == aTorFileType)
path = "Contents/Resources/TorBrowser/Tor/torrc-defaults";
else if ("torrc" == aTorFileType)
@@ -547,6 +576,8 @@ let TorLauncherUtil = // Public
{
if ("tor" == aTorFileType)
path = "TorBrowser/Tor/tor";
+ else if ("pt-startup-dir" == aTorFileType)
+ useAppDir = true;
else if ("torrc-defaults" == aTorFileType)
path = "TorBrowser/Tor/torrc-defaults";
else if ("torrc" == aTorFileType)
@@ -562,6 +593,8 @@ let TorLauncherUtil = // Public
// This block is used for the non-TorBrowser-Data/ case.
if ("tor" == aTorFileType)
path = "Tor\\tor.exe";
+ else if ("pt-startup-dir" == aTorFileType)
+ useAppDir = true;
else if ("torrc-defaults" == aTorFileType)
path = "Data\\Tor\\torrc-defaults";
else if ("torrc" == aTorFileType)
@@ -574,6 +607,8 @@ let TorLauncherUtil = // Public
// This block is also used for the non-TorBrowser-Data/ case.
if ("tor" == aTorFileType)
path = "Tor/tor";
+ else if ("pt-startup-dir" == aTorFileType)
+ useAppDir = true;
else if ("torrc-defaults" == aTorFileType)
path = "Data/Tor/torrc-defaults";
else if ("torrc" == aTorFileType)
@@ -584,13 +619,17 @@ let TorLauncherUtil = // Public
path = "Data/Tor/" + ipcFileName;
}
- if (!path)
+ if (!path && !useAppDir)
return null;
}
try
{
- if (path)
+ if (useAppDir)
+ {
+ torFile = TLUtilInternal._appDir.clone();
+ }
+ else if (path)
{
if (isRelativePath)
{
1
0

[tor-browser/tor-browser-52.6.0esr-8.0-2] Bug 1370027: Part 1 - Cleanly handle a subprocess child being reaped by NSPR. r=aswan
by gk@torproject.org 01 Mar '18
by gk@torproject.org 01 Mar '18
01 Mar '18
commit f7e0d580f4159357cfa3dc69cb9ed4d9027e9b9f
Author: Kris Maglione <maglione.k(a)gmail.com>
Date: Tue Jun 6 16:00:53 2017 -0700
Bug 1370027: Part 1 - Cleanly handle a subprocess child being reaped by NSPR. r=aswan
The first time any other code in the parent process uses NSPR (usually via
nsIProcess) to spawn a new process, it spawns a thread to contuously wait for
any child process to exit. This thread winds up reaping our child processes
before we get the chance to wait for them, which leads us to continuously poll
for them to exit.
We don't have a good way to handle this, but checking the error status of
waitpid at least prevents us from failing catastrophically.
MozReview-Commit-ID: 75Z1yUHUmjy
--HG--
extra : rebase_source : db45f781190b6fc84873c32c611134326736a1ba
This closes our bug 25389.
---
dom/system/OSFileConstants.cpp | 1 +
.../modules/subprocess/subprocess_worker_unix.js | 28 +++++++++++++---------
2 files changed, 18 insertions(+), 11 deletions(-)
diff --git a/dom/system/OSFileConstants.cpp b/dom/system/OSFileConstants.cpp
index 945233f4c879..7d6aafff61cb 100644
--- a/dom/system/OSFileConstants.cpp
+++ b/dom/system/OSFileConstants.cpp
@@ -549,6 +549,7 @@ static const dom::ConstantSpec gLibcProperties[] =
INT_CONSTANT(EFAULT),
INT_CONSTANT(EFBIG),
INT_CONSTANT(EINVAL),
+ INT_CONSTANT(EINTR),
INT_CONSTANT(EIO),
INT_CONSTANT(EISDIR),
#if defined(ELOOP) // not defined with VC9
diff --git a/toolkit/modules/subprocess/subprocess_worker_unix.js b/toolkit/modules/subprocess/subprocess_worker_unix.js
index 839402deb189..1584a9df508b 100644
--- a/toolkit/modules/subprocess/subprocess_worker_unix.js
+++ b/toolkit/modules/subprocess/subprocess_worker_unix.js
@@ -463,19 +463,25 @@ class Process extends BaseProcess {
let status = ctypes.int();
let res = libc.waitpid(this.pid, status.address(), LIBC.WNOHANG);
- if (res == this.pid) {
- let sig = unix.WTERMSIG(status.value);
- if (sig) {
- this.exitCode = -sig;
- } else {
- this.exitCode = unix.WEXITSTATUS(status.value);
- }
+ // If there's a failure here and we get any errno other than EINTR, it
+ // means that the process has been reaped by another thread (most likely
+ // the nspr process wait thread), and its actual exit status is not
+ // available to us. In that case, we have to assume success.
+ if (res == 0 || (res == -1 && ctypes.errno == LIBC.EINTR)) {
+ return null;
+ }
- this.fd.dispose();
- io.updatePollFds();
- this.resolveExit(this.exitCode);
- return this.exitCode;
+ let sig = unix.WTERMSIG(status.value);
+ if (sig) {
+ this.exitCode = -sig;
+ } else {
+ this.exitCode = unix.WEXITSTATUS(status.value);
}
+
+ this.fd.dispose();
+ io.updatePollFds();
+ this.resolveExit(this.exitCode);
+ return this.exitCode;
}
}
1
0

26 Feb '18
commit 4bed9a85478b6fb16e0d654589d8cb8ed3865027
Author: Georg Koppen <gk(a)torproject.org>
Date: Mon Feb 26 08:26:20 2018 +0000
Bug 25336: Bump obfs4proxy to 0.0.7
0.0.7 has long been out and OnionShare needs its meek_lite feature
for macOS. Let's update to this latest stable obfs4 version then.
---
projects/obfs4/config | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/projects/obfs4/config b/projects/obfs4/config
index 44db79d..916887f 100644
--- a/projects/obfs4/config
+++ b/projects/obfs4/config
@@ -1,5 +1,5 @@
# vim: filetype=yaml sw=2
-version: 0.0.5
+version: 0.0.7
git_url: https://git.torproject.org/pluggable-transports/obfs4.git
git_hash: 'obfs4proxy-[% c("version") %]'
tag_gpg_id: 1
1
0

[tor-browser-build/master] Bug 25020: fix a typo in tbb_version.json filename
by boklm@torproject.org 24 Feb '18
by boklm@torproject.org 24 Feb '18
24 Feb '18
commit e7e4cbd526d767d46fe6f728c99492e7e3d6e76c
Author: Nicolas Vigier <boklm(a)torproject.org>
Date: Sat Feb 24 21:54:29 2018 +0100
Bug 25020: fix a typo in tbb_version.json filename
---
projects/tor-browser/build | 4 ++--
1 file changed, 2 insertions(+), 2 deletions(-)
diff --git a/projects/tor-browser/build b/projects/tor-browser/build
index 978d988..c542818 100644
--- a/projects/tor-browser/build
+++ b/projects/tor-browser/build
@@ -199,7 +199,7 @@ echo "pref(\"general.useragent.locale\", \"en-US\");" >> defaults/preferences/00
zip -Xm omni.ja defaults/preferences/000-tor-browser.js
rm -rf defaults
# create tbb_version.json file for #25020
-echo '{"version":"[% c("var/torbrowser_version") %]","architecture":"[% c("var/mar_osname") %]","channel":"[% c("var/channel") %]","locale":"en-US"}' > ../tbb_verson.json
+echo '{"version":"[% c("var/torbrowser_version") %]","architecture":"[% c("var/mar_osname") %]","channel":"[% c("var/channel") %]","locale":"en-US"}' > ../tbb_version.json
popd
# Prepare our language packs for using the proper search engines and embed
@@ -330,7 +330,7 @@ cp $rootdir/[% c('input_files_by_name/firefox') %]/mar-tools-*.zip "$OUTDIR"/
zip -Xm omni.ja defaults/preferences/000-tor-browser.js
rm -rf defaults
# create tbb_version.json file for #25020
- echo '{"version":"[% c("var/torbrowser_version") %]","architecture":"[% c("var/mar_osname") %]","channel":"[% c("var/channel") %]","locale":"[% lang %]"}' > ../tbb_verson.json
+ echo '{"version":"[% c("var/torbrowser_version") %]","architecture":"[% c("var/mar_osname") %]","channel":"[% c("var/channel") %]","locale":"[% lang %]"}' > ../tbb_version.json
popd
# Set the update.locale (it is used to replace %LOCALE% within
1
0
commit f7c8e84c93792e006b4357343313c6989499f2ec
Author: Georg Koppen <gk(a)torproject.org>
Date: Thu Feb 22 07:31:33 2018 +0000
s/developement/development/
Thanks to arma for catching this.
---
rbm.local.conf.example | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/rbm.local.conf.example b/rbm.local.conf.example
index 916cb5e..dc3f038 100644
--- a/rbm.local.conf.example
+++ b/rbm.local.conf.example
@@ -100,7 +100,7 @@ targets:
### By default 'fetch' is set to 1 for nightly builds, meaning that new
### commits will be fetched automatically during each build. You can
- ### disable this during developement if you want to do rebuilds to test
+ ### disable this during development if you want to do rebuilds to test
### a specific change, but don't want rebuilds caused by unrelated
### changes, or if you want to decide at which point new commits are
### fetched. When 'fetch' is set to 'if_needed', new commits will only
1
0

[tor-browser-build/master] It's "its" and not "it's" (for all "it's")
by gk@torproject.org 22 Feb '18
by gk@torproject.org 22 Feb '18
22 Feb '18
commit fa29c1922c1e27ff94663ef1380b81b8f9c46206
Author: Georg Koppen <gk(a)torproject.org>
Date: Thu Feb 22 07:27:30 2018 +0000
It's "its" and not "it's" (for all "it's")
Thanks to arma for catching this.
---
.../Data/Browser/profile.default/preferences/extension-overrides.js | 3 ++-
.../Data/Browser/profile.default/preferences/extension-overrides.js | 3 ++-
.../Data/Browser/profile.default/preferences/extension-overrides.js | 3 ++-
3 files changed, 6 insertions(+), 3 deletions(-)
diff --git a/projects/tor-browser/Bundle-Data/linux/Data/Browser/profile.default/preferences/extension-overrides.js b/projects/tor-browser/Bundle-Data/linux/Data/Browser/profile.default/preferences/extension-overrides.js
index 9476edc..c81a7bf 100644
--- a/projects/tor-browser/Bundle-Data/linux/Data/Browser/profile.default/preferences/extension-overrides.js
+++ b/projects/tor-browser/Bundle-Data/linux/Data/Browser/profile.default/preferences/extension-overrides.js
@@ -58,5 +58,6 @@ pref("noscript.volatilePrivatePermissions", true);
pref("noscript.clearClick", 0);
# PDF.js
-// needs to be a user_pref because pdf.js blows away non-user prefs with it's own defaults each time
+// needs to be a user_pref because pdf.js blows away non-user prefs with its own
+// defaults each time
user_pref("pdfjs.disableRange", true);
diff --git a/projects/tor-browser/Bundle-Data/mac/TorBrowser/Data/Browser/profile.default/preferences/extension-overrides.js b/projects/tor-browser/Bundle-Data/mac/TorBrowser/Data/Browser/profile.default/preferences/extension-overrides.js
index 9476edc..c81a7bf 100644
--- a/projects/tor-browser/Bundle-Data/mac/TorBrowser/Data/Browser/profile.default/preferences/extension-overrides.js
+++ b/projects/tor-browser/Bundle-Data/mac/TorBrowser/Data/Browser/profile.default/preferences/extension-overrides.js
@@ -58,5 +58,6 @@ pref("noscript.volatilePrivatePermissions", true);
pref("noscript.clearClick", 0);
# PDF.js
-// needs to be a user_pref because pdf.js blows away non-user prefs with it's own defaults each time
+// needs to be a user_pref because pdf.js blows away non-user prefs with its own
+// defaults each time
user_pref("pdfjs.disableRange", true);
diff --git a/projects/tor-browser/Bundle-Data/windows/Data/Browser/profile.default/preferences/extension-overrides.js b/projects/tor-browser/Bundle-Data/windows/Data/Browser/profile.default/preferences/extension-overrides.js
index 9476edc..c81a7bf 100644
--- a/projects/tor-browser/Bundle-Data/windows/Data/Browser/profile.default/preferences/extension-overrides.js
+++ b/projects/tor-browser/Bundle-Data/windows/Data/Browser/profile.default/preferences/extension-overrides.js
@@ -58,5 +58,6 @@ pref("noscript.volatilePrivatePermissions", true);
pref("noscript.clearClick", 0);
# PDF.js
-// needs to be a user_pref because pdf.js blows away non-user prefs with it's own defaults each time
+// needs to be a user_pref because pdf.js blows away non-user prefs with its own
+// defaults each time
user_pref("pdfjs.disableRange", true);
1
0
commit 84c9b9ff0fb7f85ac776835f2ab930ef222d7f06
Author: Georg Koppen <gk(a)torproject.org>
Date: Wed Feb 21 18:56:08 2018 +0000
Bump build version
---
rbm.conf | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/rbm.conf b/rbm.conf
index 83f35f6..f6a9212 100644
--- a/rbm.conf
+++ b/rbm.conf
@@ -16,7 +16,7 @@ buildconf:
var:
torbrowser_version: '8.0a2'
- torbrowser_build: 'build2'
+ torbrowser_build: 'build3'
torbrowser_incremental_from:
- 8.0a1
project_name: tor-browser
1
0

[tor-browser-build/master] Bug 25327: create *-debug.tar.xz files instead of *-debug.tar.gz files
by gk@torproject.org 21 Feb '18
by gk@torproject.org 21 Feb '18
21 Feb '18
commit 3699792995ef75ff516fba20b1534e9722ab2f50
Author: Nicolas Vigier <boklm(a)torproject.org>
Date: Wed Feb 21 18:13:58 2018 +0100
Bug 25327: create *-debug.tar.xz files instead of *-debug.tar.gz files
---
projects/firefox/build | 2 +-
projects/tor-browser/build | 4 ++--
projects/tor/build | 2 +-
3 files changed, 4 insertions(+), 4 deletions(-)
diff --git a/projects/firefox/build b/projects/firefox/build
index 051d573..a7441bd 100644
--- a/projects/firefox/build
+++ b/projects/firefox/build
@@ -199,7 +199,7 @@ END;
[% IF c("var/linux") %]
[% c('tar', {
tar_src => [ 'Debug' ],
- tar_args => '-czf ' _ dest_dir _ '/' _ c('filename') _ '/tor-browser-debug.tar.gz',
+ tar_args => '-cJf ' _ dest_dir _ '/' _ c('filename') _ '/tor-browser-debug.tar.xz',
}) %]
[% END %]
diff --git a/projects/tor-browser/build b/projects/tor-browser/build
index 655e157..978d988 100644
--- a/projects/tor-browser/build
+++ b/projects/tor-browser/build
@@ -299,8 +299,8 @@ rm -rf $distdir/${PKG_DIR}
cp $rootdir/[% c('input_files_by_name/firefox') %]/mar-tools-*.zip "$OUTDIR"/
[% IF c("var/linux") -%]
- cp $rootdir/[% c('input_files_by_name/firefox') %]/tor-browser-debug.tar.gz "$OUTDIR"/tor-browser-[% c("var/mar_osname") %]-debug.tar.gz
- cp $rootdir/[% c('input_files_by_name/tor') %]/tor-debug.tar.gz "$OUTDIR"/tor-[% c("var/mar_osname") %]-debug.tar.gz
+ cp $rootdir/[% c('input_files_by_name/firefox') %]/tor-browser-debug.tar.xz "$OUTDIR"/tor-browser-[% c("var/mar_osname") %]-debug.tar.xz
+ cp $rootdir/[% c('input_files_by_name/tor') %]/tor-debug.tar.xz "$OUTDIR"/tor-[% c("var/mar_osname") %]-debug.tar.xz
[% END -%]
# If we did not create a multi-lingual package above, create a package for
diff --git a/projects/tor/build b/projects/tor/build
index f6b507f..eeeaa5c 100644
--- a/projects/tor/build
+++ b/projects/tor/build
@@ -133,6 +133,6 @@ mkdir -p [% dest_dir _ '/' _ c('filename') %]
[% IF c("var/linux") %]
[% c('tar', {
tar_src => [ 'Debug' ],
- tar_args => '-czf ' _ dest_dir _ '/' _ c('filename') _ '/tor-debug.tar.gz',
+ tar_args => '-cJf ' _ dest_dir _ '/' _ c('filename') _ '/tor-debug.tar.xz',
}) %]
[% END %]
1
0
commit 8bf3bb215393f78df81cf6a1ed3eeae6432f9f9b
Author: Georg Koppen <gk(a)torproject.org>
Date: Wed Feb 21 10:18:34 2018 +0000
Bump build version
---
rbm.conf | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/rbm.conf b/rbm.conf
index b1ad4c4..83f35f6 100644
--- a/rbm.conf
+++ b/rbm.conf
@@ -16,7 +16,7 @@ buildconf:
var:
torbrowser_version: '8.0a2'
- torbrowser_build: 'build1'
+ torbrowser_build: 'build2'
torbrowser_incremental_from:
- 8.0a1
project_name: tor-browser
1
0

[tor-browser-build/master] Bug 22612: Add script to hash signed bundles
by gk@torproject.org 21 Feb '18
by gk@torproject.org 21 Feb '18
21 Feb '18
commit 011e0d3d3da5263efa29b9a5963caa083f4c3ff5
Author: Georg Koppen <gk(a)torproject.org>
Date: Wed Feb 21 10:15:54 2018 +0000
Bug 22612: Add script to hash signed bundles
---
tools/hash_signed_bundles.sh | 50 ++++++++++++++++++++++++++++++++++++++++++++
1 file changed, 50 insertions(+)
diff --git a/tools/hash_signed_bundles.sh b/tools/hash_signed_bundles.sh
new file mode 100755
index 0000000..4354d47
--- /dev/null
+++ b/tools/hash_signed_bundles.sh
@@ -0,0 +1,50 @@
+#!/bin/sh
+
+# Copyright (c) 2018, The Tor Project, Inc.
+#
+# Redistribution and use in source and binary forms, with or without
+# modification, are permitted provided that the following conditions are
+# met:
+
+# * Redistributions of source code must retain the above copyright
+# notice, this list of conditions and the following disclaimer.
+#
+# * Redistributions in binary form must reproduce the above
+# copyright notice, this list of conditions and the following disclaimer
+# in the documentation and/or other materials provided with the
+# distribution.
+#
+# * Neither the names of the copyright owners nor the names of its
+# contributors may be used to endorse or promote products derived from
+# this software without specific prior written permission.
+#
+# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
+# "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
+# LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
+# A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
+# OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
+# SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
+# LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+# DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
+# THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+# (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+# OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+
+# Usage:
+# 1) Change into the directory containing the files to be hashed
+# 2) Run /path/to/hash_signed_bundles.sh
+
+export LC_ALL=C
+
+rm -f sha256sums-signed-build.txt sha256sums-signed-build.incrementals.txt
+sha256sum `ls -1 | grep -v '\.incremental\.mar$' | grep -v '^sha256sums*' | \
+ sort` > sha256sums-signed-build.txt
+
+if ls -1 | grep -q '\.incremental\.mar$'
+then
+ sha256sum `ls -1 | grep '\.incremental\.mar$' | \
+ sort` > sha256sums-signed-build.incrementals.txt
+fi
+
+echo "Hashing the signed bundles done."
+exit 0
1
0

[tor-browser-build/master] Bug 24879: enable fetching of new commits by default for nightly builds
by gk@torproject.org 21 Feb '18
by gk@torproject.org 21 Feb '18
21 Feb '18
commit 95b5c738d8e1a11596e652363e801e500c5733de
Author: Nicolas Vigier <boklm(a)torproject.org>
Date: Mon Jan 15 19:26:28 2018 +0100
Bug 24879: enable fetching of new commits by default for nightly builds
---
README | 3 ++-
rbm.conf | 1 +
rbm.local.conf.example | 13 +++++++++++++
3 files changed, 16 insertions(+), 1 deletion(-)
diff --git a/README b/README
index a449f9d..d498c05 100644
--- a/README
+++ b/README
@@ -89,7 +89,8 @@ Updating git sources
You can run "make fetch" to fetch the latest sources from git for all
components included in Tor Browser. You should run this if you want to
-make a nightly build with the latest commits.
+make a nightly build with the latest commits, and you disabled automatic
+fetching of new commits for nightly builds in rbm.local.conf.
Number of make processes
diff --git a/rbm.conf b/rbm.conf
index 76b7627..b1ad4c4 100644
--- a/rbm.conf
+++ b/rbm.conf
@@ -112,6 +112,7 @@ targets:
alpha: 1
channel: alpha
nightly:
+ fetch: 1
var:
nightly: 1
channel: nightly
diff --git a/rbm.local.conf.example b/rbm.local.conf.example
index a6401a9..916cb5e 100644
--- a/rbm.local.conf.example
+++ b/rbm.local.conf.example
@@ -96,4 +96,17 @@ targets:
### Uncomment this if you want to create mar files in your test build.
#build_mar: 1
+ nightly:
+
+ ### By default 'fetch' is set to 1 for nightly builds, meaning that new
+ ### commits will be fetched automatically during each build. You can
+ ### disable this during developement if you want to do rebuilds to test
+ ### a specific change, but don't want rebuilds caused by unrelated
+ ### changes, or if you want to decide at which point new commits are
+ ### fetched. When 'fetch' is set to 'if_needed', new commits will only
+ ### be fetched if the selected commit (or branch, or tag) is not present,
+ ### which means that existing branches won't be updated. In that case
+ ### you can fetch new commits by running 'make fetch'.
+ #fetch: 'if_needed'
+
# vim: filetype=yaml sw=2
1
0

21 Feb '18
commit b3fa8c1cf7c9e72c5f647c254a232f38b35b760d
Author: Georg Koppen <gk(a)torproject.org>
Date: Wed Feb 21 08:55:35 2018 +0000
Release preparations for 8.0a2
Changelog update and versions bump
---
projects/firefox/config | 2 +-
projects/https-everywhere/config | 2 +-
.../tor-browser/Bundle-Data/Docs/ChangeLog.txt | 32 ++++++++++++++++++++++
projects/tor-browser/config | 4 +--
projects/tor-launcher/config | 2 +-
projects/tor/config | 2 +-
projects/torbutton/config | 2 +-
rbm.conf | 6 ++--
8 files changed, 42 insertions(+), 10 deletions(-)
diff --git a/projects/firefox/config b/projects/firefox/config
index f19b8ac..b62fce3 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-build1'
+git_hash: 'tor-browser-[% c("var/firefox_version") %]-[% c("var/torbrowser_branch") %]-2-build2'
tag_gpg_id: 1
git_url: https://git.torproject.org/tor-browser.git
gpg_keyring: torbutton.gpg
diff --git a/projects/https-everywhere/config b/projects/https-everywhere/config
index ba3f3ca..907e8e1 100644
--- a/projects/https-everywhere/config
+++ b/projects/https-everywhere/config
@@ -1,5 +1,5 @@
# vim: filetype=yaml sw=2
-version: 2018.1.11
+version: 2018.1.29
git_url: https://git.torproject.org/https-everywhere.git
git_hash: '[% c("version") %]'
git_submodule: 1
diff --git a/projects/tor-browser/Bundle-Data/Docs/ChangeLog.txt b/projects/tor-browser/Bundle-Data/Docs/ChangeLog.txt
index d591af5..3cd0e63 100644
--- a/projects/tor-browser/Bundle-Data/Docs/ChangeLog.txt
+++ b/projects/tor-browser/Bundle-Data/Docs/ChangeLog.txt
@@ -1,3 +1,35 @@
+Tor Browser 8.0a2 -- February 23 2018
+ * All Platforms
+ * Update Tor to 0.3.3.2-alpha
+ * Update Torbutton to 1.9.9
+ * Bug 24159: Version check does not deal with platform specific checks
+ * Bug 25016: Remove 2017 donation banner
+ * Translations update
+ * Update Tor Launcher to 0.2.15
+ * Bug 25089: Special characters are not escaped in proxy password
+ * Translations update
+ * Update HTTPS Everywhere to 2018.1.29
+ * Update NoScript to 5.1.8.4
+ * Update meek to 0.29
+ * Bug 25215: Revert bug 18619 (we are not disabling IndexedDB any longer)
+ * Bug 19910: Rip out optimistic data socks handshake variant (#3875)
+ * Bug 22659: Changes to `intl.accept.languages` get overwritten after restart
+ * Bug 25000: Add [System+Principal] to the NoScript whitelist
+ * Bug 15599: Disable Range requests used by pdfjs as they are not isolated
+ * Bug 22614: Make e10s/non-e10s Tor Browsers indistinguishable
+ * Bug 13575: Disable randomised Firefox HTTP cache decay user tests
+ * Bug 25020: Add a tbb_version.json file
+ * Bug 24995: Include git hash in tor --version
+ * OS X
+ * Bug 22794: Don't open AF_INET/AF_INET6 sockets when AF_LOCAL is configured
+ * Linux
+ * Bug 22794: Don't open AF_INET/AF_INET6 sockets when AF_LOCAL is configured
+ * Windows:
+ * Bug 25266: PT config should include full names of executable files
+ * Build System
+ * Windows
+ * Bug 25111: Don't compile Yasm on our own anymore for Windows Tor Browser
+
Tor Browser 8.0a1 -- January 23 2018
* All Platforms
* Update Firefox to 52.6.0esr
diff --git a/projects/tor-browser/config b/projects/tor-browser/config
index 7fded62..661b8e2 100644
--- a/projects/tor-browser/config
+++ b/projects/tor-browser/config
@@ -66,9 +66,9 @@ input_files:
name: snowflake
enable: '[% c("var/snowflake") %]'
- filename: Bundle-Data
- - URL: https://addons.cdn.mozilla.net/user-media/addons/722/noscript_security_suit…
+ - URL: https://addons.cdn.mozilla.net/user-media/addons/722/noscript_security_suit…
name: noscript
- sha256sum: 9a81de6e26f639e5f82cabddcd361177815c59af2bca6363ba755255feffd2ec
+ sha256sum: 1c85a72cd0d7d210f8dd463f9700214703a5f28319c2b1679db00f861a5289f7
- filename: 'RelativeLink/start-tor-browser.desktop'
enable: '[% c("var/linux") %]'
- filename: 'RelativeLink/execdesktop'
diff --git a/projects/tor-launcher/config b/projects/tor-launcher/config
index 5f04027..0406800 100644
--- a/projects/tor-launcher/config
+++ b/projects/tor-launcher/config
@@ -1,5 +1,5 @@
# vim: filetype=yaml sw=2
-version: 0.2.14.3
+version: 0.2.15
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 df721e1..3b805ad 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.3.2.9
+version: 0.3.3.2-alpha
git_hash: 'tor-[% c("version") %]'
git_url: https://git.torproject.org/tor.git
gpg_keyring: tor.gpg
diff --git a/projects/torbutton/config b/projects/torbutton/config
index 53d9a38..de7691a 100644
--- a/projects/torbutton/config
+++ b/projects/torbutton/config
@@ -1,5 +1,5 @@
# vim: filetype=yaml sw=2
-version: 1.9.8.5
+version: 1.9.9
git_url: https://git.torproject.org/torbutton.git
git_hash: '[% c("version") %]'
gpg_keyring: torbutton.gpg
diff --git a/rbm.conf b/rbm.conf
index 12b1fd0..76b7627 100644
--- a/rbm.conf
+++ b/rbm.conf
@@ -15,10 +15,10 @@ buildconf:
git_signtag_opt: '-s'
var:
- torbrowser_version: '8.0a1'
- torbrowser_build: 'build3'
+ torbrowser_version: '8.0a2'
+ torbrowser_build: 'build1'
torbrowser_incremental_from:
- - 7.5a10
+ - 8.0a1
project_name: tor-browser
multi_lingual: 0
build_mar: 1
1
0
commit e61d052217552ab799be49011e9eb076039120de
Author: Georg Koppen <gk(a)torproject.org>
Date: Wed Feb 21 08:25:36 2018 +0000
Version bump
---
src/install.rdf | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/src/install.rdf b/src/install.rdf
index 382966c..7e760f8 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.14.3</em:version>
+ <em:version>0.2.15</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 aba8f603837926ab94be2a08b1b9953c5dc3fdac
Author: Georg Koppen <gk(a)torproject.org>
Date: Wed Feb 21 08:23:43 2018 +0000
Translations update
---
src/chrome/locale/ar/network-settings.dtd | 22 +++++++-------
src/chrome/locale/az/network-settings.dtd | 2 +-
src/chrome/locale/be/network-settings.dtd | 2 +-
src/chrome/locale/bg/torlauncher.properties | 6 ++--
src/chrome/locale/bn-BD/network-settings.dtd | 2 +-
src/chrome/locale/bn/network-settings.dtd | 2 +-
src/chrome/locale/bo/network-settings.dtd | 2 +-
src/chrome/locale/bo/torlauncher.properties | 8 +++---
src/chrome/locale/br/network-settings.dtd | 2 +-
src/chrome/locale/br/torlauncher.properties | 2 +-
src/chrome/locale/bs/network-settings.dtd | 2 +-
src/chrome/locale/cy/network-settings.dtd | 2 +-
src/chrome/locale/da/network-settings.dtd | 12 ++++----
src/chrome/locale/da/torlauncher.properties | 4 +--
src/chrome/locale/el/network-settings.dtd | 2 +-
src/chrome/locale/es-AR/network-settings.dtd | 4 +--
src/chrome/locale/es-CL/network-settings.dtd | 2 +-
src/chrome/locale/es-CO/network-settings.dtd | 2 +-
src/chrome/locale/es-MX/network-settings.dtd | 4 +--
src/chrome/locale/es/network-settings.dtd | 4 +--
src/chrome/locale/eu/network-settings.dtd | 4 +--
src/chrome/locale/fa/network-settings.dtd | 2 +-
src/chrome/locale/fi/network-settings.dtd | 5 ++--
src/chrome/locale/fil/network-settings.dtd | 2 +-
src/chrome/locale/fr/network-settings.dtd | 20 ++++++-------
src/chrome/locale/fr/torlauncher.properties | 6 ++--
src/chrome/locale/gl/network-settings.dtd | 2 +-
src/chrome/locale/hi/network-settings.dtd | 4 +--
src/chrome/locale/hr-HR/network-settings.dtd | 4 +--
src/chrome/locale/hr/network-settings.dtd | 6 ++--
src/chrome/locale/hr/torlauncher.properties | 8 +++---
src/chrome/locale/hy/network-settings.dtd | 2 +-
src/chrome/locale/hy/torlauncher.properties | 4 +--
src/chrome/locale/id/network-settings.dtd | 36 +++++++++++------------
src/chrome/locale/id/torlauncher.properties | 4 +--
src/chrome/locale/is/network-settings.dtd | 24 ++++++++--------
src/chrome/locale/is/torlauncher.properties | 14 ++++-----
src/chrome/locale/ja/network-settings.dtd | 14 ++++-----
src/chrome/locale/ja/torlauncher.properties | 4 +--
src/chrome/locale/ka/network-settings.dtd | 2 +-
src/chrome/locale/kk/network-settings.dtd | 2 +-
src/chrome/locale/kk/torlauncher.properties | 6 ++--
src/chrome/locale/km/network-settings.dtd | 2 +-
src/chrome/locale/ko-KR/network-settings.dtd | 2 +-
src/chrome/locale/ko/network-settings.dtd | 4 +--
src/chrome/locale/ky/torlauncher.properties | 2 +-
src/chrome/locale/lo/network-settings.dtd | 4 +--
src/chrome/locale/lt/network-settings.dtd | 2 +-
src/chrome/locale/lv/network-settings.dtd | 38 ++++++++++++-------------
src/chrome/locale/lv/torlauncher.properties | 4 +--
src/chrome/locale/mk/network-settings.dtd | 20 ++++++-------
src/chrome/locale/mk/torlauncher.properties | 38 ++++++++++++-------------
src/chrome/locale/ms-MY/torlauncher.properties | 10 +++----
src/chrome/locale/nb/network-settings.dtd | 2 +-
src/chrome/locale/nl-BE/network-settings.dtd | 5 ++--
src/chrome/locale/nn/network-settings.dtd | 2 +-
src/chrome/locale/pa/network-settings.dtd | 2 +-
src/chrome/locale/pl/network-settings.dtd | 6 ++--
src/chrome/locale/pt/network-settings.dtd | 12 ++++----
src/chrome/locale/pt/torlauncher.properties | 12 ++++----
src/chrome/locale/si-LK/network-settings.dtd | 2 +-
src/chrome/locale/sk-SK/network-settings.dtd | 4 +--
src/chrome/locale/sk/network-settings.dtd | 2 +-
src/chrome/locale/sl-SI/network-settings.dtd | 2 +-
src/chrome/locale/sl/network-settings.dtd | 2 +-
src/chrome/locale/sn/torlauncher.properties | 2 +-
src/chrome/locale/sq/network-settings.dtd | 4 +--
src/chrome/locale/sr/network-settings.dtd | 2 +-
src/chrome/locale/sr(a)latin/network-settings.dtd | 2 +-
src/chrome/locale/ta/network-settings.dtd | 5 ++--
src/chrome/locale/tg/network-settings.dtd | 2 +-
src/chrome/locale/tg/torlauncher.properties | 6 ++--
src/chrome/locale/th/network-settings.dtd | 2 +-
src/chrome/locale/ti/torlauncher.properties | 6 ++--
src/chrome/locale/tk/network-settings.dtd | 2 +-
src/chrome/locale/tk/torlauncher.properties | 6 ++--
src/chrome/locale/uk/network-settings.dtd | 34 +++++++++++-----------
src/chrome/locale/uk/torlauncher.properties | 4 +--
src/chrome/locale/ur-PK/network-settings.dtd | 2 +-
src/chrome/locale/ur/network-settings.dtd | 6 ++--
src/chrome/locale/uz/network-settings.dtd | 2 +-
src/chrome/locale/vi/network-settings.dtd | 4 +--
src/chrome/locale/zh-HK/network-settings.dtd | 4 +--
83 files changed, 270 insertions(+), 267 deletions(-)
diff --git a/src/chrome/locale/ar/network-settings.dtd b/src/chrome/locale/ar/network-settings.dtd
index ecc7e71..ecd5ecc 100644
--- a/src/chrome/locale/ar/network-settings.dtd
+++ b/src/chrome/locale/ar/network-settings.dtd
@@ -1,16 +1,16 @@
<!ENTITY torsettings.dialog.title "إعدادات شبكة تور">
<!ENTITY torsettings.wizard.title.default "إتصل بشبكة تور">
<!ENTITY torsettings.wizard.title.configure "إعدادات شبكة تور">
-<!ENTITY torsettings.wizard.title.connecting "عملية الربط جارية">
+<!ENTITY torsettings.wizard.title.connecting "يتم إنشاء اتصال">
<!-- For locale picker: -->
<!ENTITY torlauncher.localePicker.title "لغة متصفح تور">
-<!ENTITY torlauncher.localePicker.prompt "الرجاء اختيار لغة">
+<!ENTITY torlauncher.localePicker.prompt "الرجاء اختيار لغة.">
<!-- For "first run" wizard: -->
-<!ENTITY torSettings.connectPrompt "Click “Connect” to connect to Tor.">
-<!ENTITY torSettings.configurePrompt "Click “Configure” to adjust network settings if you are in a country that censors Tor (such as Egypt, China, Turkey) or if you are connecting from a private network that requires a proxy.">
+<!ENTITY torSettings.connectPrompt "إنقر "اتصل" للإتصال بتور.">
+<!ENTITY torSettings.configurePrompt "إنقر "اضبط" لتعديل إعدادات الشبكة إن كنت في بلد يحجب تور (كمصر, الصين, تركيا) أو إن كنت تتصل من شبكة خاصة تتطلب بروكسي.">
<!ENTITY torSettings.configure "تكوين">
<!ENTITY torSettings.connect "اتصل">
@@ -42,17 +42,17 @@
<!ENTITY torsettings.useBridges.default "إختر جسرا مُدمَجا في البرنامج">
<!ENTITY torsettings.useBridges.default.placeholder "إختر جسرا">
<!ENTITY torsettings.useBridges.custom "إدخال عنوان جسرٍ أعرفه">
-<!ENTITY torsettings.useBridges.label "Enter bridge information from a trusted source.">
-<!ENTITY torsettings.useBridges.placeholder "type address:port (one per line)">
+<!ENTITY torsettings.useBridges.label "أدخل معلومات جسر (بريدج) من مصدر موثوق.">
+<!ENTITY torsettings.useBridges.placeholder "اكتب العنوان:المنفذ (واحد لكل سطر)">
<!ENTITY torsettings.copyLog "نسخ سجل تور إلي الحافظة">
-<!ENTITY torsettings.proxyHelpTitle "Proxy Help">
-<!ENTITY torsettings.proxyHelp1 "A local proxy is needed when connecting through a company, school, or university network. If you are not sure how to answer this question, look at the Internet settings in another browser or check your system's network settings to see whether a proxy is needed.">
+<!ENTITY torsettings.proxyHelpTitle "مساعدة بروكسي">
+<!ENTITY torsettings.proxyHelp1 "تحتاج لبروكسي محلي عند الاتصال عبر شركة, مدرسة, أو شبكة جامعية. إذا لم تكن متأكدا من كيفية الإجابة على هذا السؤال, إلقي نظرة على إعدادات الإنترنت في متصفح آخر أو تحقق من إعدادات شبكة نظامك لتتأكد إن كان هناك حاجة لبروكسي.">
<!ENTITY torsettings.bridgeHelpTitle "المساعدة الخاصة بالجسور المُرحلة">
-<!ENTITY torsettings.bridgeHelp1 "Bridges are unlisted relays that make it more difficult to block connections to the Tor Network.  Each type of bridge uses a different method to avoid censorship.  The obfs ones make your traffic look like random noise, and the meek ones make your traffic look like it's connecting to that service instead of Tor.">
-<!ENTITY torsettings.bridgeHelp2 "Because of how certain countries try to block Tor, certain bridges work in certain countries but not others.  If you are unsure about which bridges work in your country, visit torproject.org/about/contact.html#support">
+<!ENTITY torsettings.bridgeHelp1 "الجسور هي تبديلات (ريلاي) غير مدرجة تجعل حجب الاتصالات إلى شبكة تور اصعب. كل نوع من الجسور يستخدم طريقة مختلفة لتجنب الرقابة. ذوات ال (obfs) تجعل حركة معلوماتك تبدوا كضجة عشوائية, وذوات ال (meek) تجعل حركة معلوماتك تبدوا كأنها تتصل لتلك الخدمة بدلا من تور.">
+<!ENTITY torsettings.bridgeHelp2 "بسبب طريقة حظر بعض البلدان لتور, بعض الجسور تعمل في بلدان معينة لكنها لا تعمل ببعضها الآخر. إن لم تكن متأكدا بشأن أي جسور تعمل في بلدك, زر الموقع torproject.org/about/contact.html">
<!-- Progress -->
-<!ENTITY torprogress.pleaseWait "Please wait while we establish a connection to the Tor network.  This may take several minutes.">
+<!ENTITY torprogress.pleaseWait "الرجاء الإنتظار في حين نقوم بإنشاء اتصال لشبكة تور. هذا قد يستغرق عدة دقائق.">
diff --git a/src/chrome/locale/az/network-settings.dtd b/src/chrome/locale/az/network-settings.dtd
index dc4ce8c..4db6543 100644
--- a/src/chrome/locale/az/network-settings.dtd
+++ b/src/chrome/locale/az/network-settings.dtd
@@ -1,6 +1,6 @@
<!ENTITY torsettings.dialog.title "Tor şəbəkə paramertləri">
<!ENTITY torsettings.wizard.title.default "Connect to Tor">
-<!ENTITY torsettings.wizard.title.configure "Tor Network Settings">
+<!ENTITY torsettings.wizard.title.configure "Tor şəbəkə paramertləri">
<!ENTITY torsettings.wizard.title.connecting "Establishing a Connection">
<!-- For locale picker: -->
diff --git a/src/chrome/locale/be/network-settings.dtd b/src/chrome/locale/be/network-settings.dtd
index a691503..5bbefe5 100644
--- a/src/chrome/locale/be/network-settings.dtd
+++ b/src/chrome/locale/be/network-settings.dtd
@@ -1,6 +1,6 @@
<!ENTITY torsettings.dialog.title "Налады сеткі Тор">
<!ENTITY torsettings.wizard.title.default "Connect to Tor">
-<!ENTITY torsettings.wizard.title.configure "Tor Network Settings">
+<!ENTITY torsettings.wizard.title.configure "Налады сеткі Тор">
<!ENTITY torsettings.wizard.title.connecting "Establishing a Connection">
<!-- For locale picker: -->
diff --git a/src/chrome/locale/bg/torlauncher.properties b/src/chrome/locale/bg/torlauncher.properties
index a2ab92b..cbae531 100644
--- a/src/chrome/locale/bg/torlauncher.properties
+++ b/src/chrome/locale/bg/torlauncher.properties
@@ -4,7 +4,7 @@
torlauncher.error_title=Тор лънчер
torlauncher.tor_exited_during_startup=Tor спря неочаквано по време на стартиране. Това може да е поради грешка в torrc файла, бъг в самият Tor или друга програма от вашата система или повреден хардуер. Докато не разрешите основният проблем и не рестартирате Tor, Tor браузърът няма да може да се стартира.
-torlauncher.tor_exited=Тор се изключи неочаквано.Това може да е поради бъг в самият Тор,друга програма в системата ви или повреден хардуер.Докато не рестартирате Тор браузърът няма да може да отваря никакви сайтове.Ако проблемът продължава моля изпратете вашият Тор Log към нашия екип по поддръжката.
+torlauncher.tor_exited=Тор се изключи неочаквано. Това може да е поради бъг в самия Тор, друга програма в системата ви или повреден хардуер. Докато не рестартирате Тор, браузърът няма да може да отваря никакви сайтове. Ако проблемът продължи, моля, изпратете копие на вашия Тор Log на нашия екип по поддръжката.
torlauncher.tor_exited2=Рестартирането на Тор няма да затвори вашите прозорци в браузъра.
torlauncher.tor_controlconn_failed=Тор няма връзка с контролния порт
torlauncher.tor_failed_to_start=Тор не стартира успешно
@@ -28,8 +28,8 @@ torlauncher.error_bridges_missing=Трябва да зададете един и
torlauncher.error_default_bridges_type_missing=Трябва да избереш вид транспорт за избраните мостове.
torlauncher.error_bridge_bad_default_type=Никой от избраните мостове няма траспорт от типса %S в наличност. Моля, нагласи настройките си.
-torlauncher.bridge_suffix.meek-amazon=(works in China)
-torlauncher.bridge_suffix.meek-azure=(works in China)
+torlauncher.bridge_suffix.meek-amazon=(работи в Китай)
+torlauncher.bridge_suffix.meek-azure=(работи в Китай)
torlauncher.connect=Свържи се
torlauncher.restart_tor=Рестартирайте Тор
diff --git a/src/chrome/locale/bn-BD/network-settings.dtd b/src/chrome/locale/bn-BD/network-settings.dtd
index e9b06bc..145ceb6 100644
--- a/src/chrome/locale/bn-BD/network-settings.dtd
+++ b/src/chrome/locale/bn-BD/network-settings.dtd
@@ -10,7 +10,7 @@
<!-- For "first run" wizard: -->
<!ENTITY torSettings.connectPrompt "টর সাথে সংযোগ করতে "সংযোগ করুন" ক্লিক করুন">
-<!ENTITY torSettings.configurePrompt "Click “Configure” to adjust network settings if you are in a country that censors Tor (such as Egypt, China, Turkey) or if you are connecting from a private network that requires a proxy.">
+<!ENTITY torSettings.configurePrompt "আপনি এমন একটি দেশে থাকলে নেটওয়ার্ক সেটিংস সংশোধন করতে "কনফিগার করুন" ক্লিক করুন যা টরকে সেন্সর করে (যেমনঃ মিশর, চীন, তুরস্ক) অথবা যদি আপনি একটি প্রাইভেট নেটওয়ার্ক থেকে সংযোগ করেন যা প্রক্সি প্রয়োজন।">
<!ENTITY torSettings.configure "কনফিগার করুন">
<!ENTITY torSettings.connect "সংযোগ করা">
diff --git a/src/chrome/locale/bn/network-settings.dtd b/src/chrome/locale/bn/network-settings.dtd
index da2abde..a80748e 100644
--- a/src/chrome/locale/bn/network-settings.dtd
+++ b/src/chrome/locale/bn/network-settings.dtd
@@ -1,6 +1,6 @@
<!ENTITY torsettings.dialog.title "টর নেটওয়ার্ক সেটিংস">
<!ENTITY torsettings.wizard.title.default "Connect to Tor">
-<!ENTITY torsettings.wizard.title.configure "Tor Network Settings">
+<!ENTITY torsettings.wizard.title.configure "টর নেটওয়ার্ক সেটিংস">
<!ENTITY torsettings.wizard.title.connecting "Establishing a Connection">
<!-- For locale picker: -->
diff --git a/src/chrome/locale/bo/network-settings.dtd b/src/chrome/locale/bo/network-settings.dtd
index 85645d7..a187743 100644
--- a/src/chrome/locale/bo/network-settings.dtd
+++ b/src/chrome/locale/bo/network-settings.dtd
@@ -12,7 +12,7 @@
<!ENTITY torSettings.connectPrompt "Click “Connect” to connect to Tor.">
<!ENTITY torSettings.configurePrompt "Click “Configure” to adjust network settings if you are in a country that censors Tor (such as Egypt, China, Turkey) or if you are connecting from a private network that requires a proxy.">
<!ENTITY torSettings.configure "Configure">
-<!ENTITY torSettings.connect "Connect">
+<!ENTITY torSettings.connect "མཐུད།">
<!-- Other: -->
diff --git a/src/chrome/locale/bo/torlauncher.properties b/src/chrome/locale/bo/torlauncher.properties
index b09753e..8b25066 100644
--- a/src/chrome/locale/bo/torlauncher.properties
+++ b/src/chrome/locale/bo/torlauncher.properties
@@ -31,11 +31,11 @@ torlauncher.error_bridge_bad_default_type=No provided bridges that have the tran
torlauncher.bridge_suffix.meek-amazon=(works in China)
torlauncher.bridge_suffix.meek-azure=(works in China)
-torlauncher.connect=Connect
+torlauncher.connect=མཐུད།
torlauncher.restart_tor=Restart Tor
-torlauncher.quit=Quit
-torlauncher.quit_win=Exit
-torlauncher.done=Done
+torlauncher.quit=དོར་བྱེད།
+torlauncher.quit_win=ཕྱིར་ཐོན།
+torlauncher.done=ཚར་སོང་།
torlauncher.forAssistance=For assistance, contact %S
torlauncher.forAssistance2=For assistance, visit %S
diff --git a/src/chrome/locale/br/network-settings.dtd b/src/chrome/locale/br/network-settings.dtd
index 7406124..bffe154 100644
--- a/src/chrome/locale/br/network-settings.dtd
+++ b/src/chrome/locale/br/network-settings.dtd
@@ -11,7 +11,7 @@
<!ENTITY torSettings.connectPrompt "Click “Connect” to connect to Tor.">
<!ENTITY torSettings.configurePrompt "Click “Configure” to adjust network settings if you are in a country that censors Tor (such as Egypt, China, Turkey) or if you are connecting from a private network that requires a proxy.">
-<!ENTITY torSettings.configure "Configure">
+<!ENTITY torSettings.configure "Kefluniañ">
<!ENTITY torSettings.connect "Connect">
<!-- Other: -->
diff --git a/src/chrome/locale/br/torlauncher.properties b/src/chrome/locale/br/torlauncher.properties
index 8b87e76..eeaf0b5 100644
--- a/src/chrome/locale/br/torlauncher.properties
+++ b/src/chrome/locale/br/torlauncher.properties
@@ -34,7 +34,7 @@ torlauncher.bridge_suffix.meek-azure=(works in China)
torlauncher.connect=Connect
torlauncher.restart_tor=Restart Tor
torlauncher.quit=Quit
-torlauncher.quit_win=Exit
+torlauncher.quit_win=Kuitaat
torlauncher.done=Done
torlauncher.forAssistance=For assistance, contact %S
diff --git a/src/chrome/locale/bs/network-settings.dtd b/src/chrome/locale/bs/network-settings.dtd
index ac6e347..020f31c 100644
--- a/src/chrome/locale/bs/network-settings.dtd
+++ b/src/chrome/locale/bs/network-settings.dtd
@@ -31,7 +31,7 @@
<!ENTITY torsettings.useProxy.address "Address:">
<!ENTITY torsettings.useProxy.address.placeholder "IP address or hostname">
<!ENTITY torsettings.useProxy.port "Port:">
-<!ENTITY torsettings.useProxy.username "Username:">
+<!ENTITY torsettings.useProxy.username "Korisničko ime:">
<!ENTITY torsettings.useProxy.password "Šifra">
<!ENTITY torsettings.useProxy.type.socks4 "SOCKS 4">
<!ENTITY torsettings.useProxy.type.socks5 "SOCKS 5">
diff --git a/src/chrome/locale/cy/network-settings.dtd b/src/chrome/locale/cy/network-settings.dtd
index a3ef262..7f46303 100644
--- a/src/chrome/locale/cy/network-settings.dtd
+++ b/src/chrome/locale/cy/network-settings.dtd
@@ -1,6 +1,6 @@
<!ENTITY torsettings.dialog.title "Gosodiadau Rhwydwaith Tor">
<!ENTITY torsettings.wizard.title.default "Connect to Tor">
-<!ENTITY torsettings.wizard.title.configure "Tor Network Settings">
+<!ENTITY torsettings.wizard.title.configure "Gosodiadau Rhwydwaith Tor">
<!ENTITY torsettings.wizard.title.connecting "Establishing a Connection">
<!-- For locale picker: -->
diff --git a/src/chrome/locale/da/network-settings.dtd b/src/chrome/locale/da/network-settings.dtd
index e803d6d..16d651c 100644
--- a/src/chrome/locale/da/network-settings.dtd
+++ b/src/chrome/locale/da/network-settings.dtd
@@ -1,10 +1,10 @@
-<!ENTITY torsettings.dialog.title "Tor netværksindstillinger">
+<!ENTITY torsettings.dialog.title "Tor-netværksindstillinger">
<!ENTITY torsettings.wizard.title.default "Opret forbindelse til Tor">
-<!ENTITY torsettings.wizard.title.configure "Tor netværksindstillinger">
+<!ENTITY torsettings.wizard.title.configure "Tor-netværksindstillinger">
<!ENTITY torsettings.wizard.title.connecting "Etablerer en forbindelse">
<!-- For locale picker: -->
-<!ENTITY torlauncher.localePicker.title "Tor Browser sprog">
+<!ENTITY torlauncher.localePicker.title "Tor Browser-sprog">
<!ENTITY torlauncher.localePicker.prompt "Vælg venligst et sprog.">
<!-- For "first run" wizard: -->
@@ -26,7 +26,7 @@
<!ENTITY torsettings.optional "Valgfri">
<!ENTITY torsettings.useProxy.checkbox "Jeg bruger en proxy til at oprette forbindelse til internettet">
-<!ENTITY torsettings.useProxy.type "Proxy type:">
+<!ENTITY torsettings.useProxy.type "Proxytype:">
<!ENTITY torsettings.useProxy.type.placeholder "vælg en proxytype">
<!ENTITY torsettings.useProxy.address "Adresse:">
<!ENTITY torsettings.useProxy.address.placeholder "IP adresse eller værtsnavn">
@@ -36,7 +36,7 @@
<!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 computer går gennem en firewall som kun tillader forbindelse til specifikke porte">
+<!ENTITY torsettings.firewall.checkbox "Computeren går gennem en firewall som kun tillader forbindelse til specifikke porte">
<!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">
@@ -45,7 +45,7 @@
<!ENTITY torsettings.useBridges.label "Indtast broinformation fra en betroet kilde.">
<!ENTITY torsettings.useBridges.placeholder "skriv adresse:port (én pr. linje)">
-<!ENTITY torsettings.copyLog "Kopier Tor loggen til udklipsholderen">
+<!ENTITY torsettings.copyLog "Kopiér Tor-loggen til udklipsholderen">
<!ENTITY torsettings.proxyHelpTitle "Hjælp til proxy">
<!ENTITY torsettings.proxyHelp1 "Det er nødvendigt med en lokal proxy når der oprettes forbindelse gennem et firma-, skole- eller universitetsnetværk. Hvis du i tvivl om hvordan du skal svarer på sprøgsmålet, så kig i internetindstillingerne i en anden browser eller tjek dit systems netværksindstillinger, for at se om det er nødvendigt med en proxy.">
diff --git a/src/chrome/locale/da/torlauncher.properties b/src/chrome/locale/da/torlauncher.properties
index b839fc1..abdc6a5 100644
--- a/src/chrome/locale/da/torlauncher.properties
+++ b/src/chrome/locale/da/torlauncher.properties
@@ -4,7 +4,7 @@
torlauncher.error_title=Tor starter
torlauncher.tor_exited_during_startup=Tor lukkede under opstart. Det kan skyldes en fejl i din torrc-fil, en fejl i Tor eller et andet program på dit system, eller hardwarefejl. Tor Browser vil ikke starte, før du løser det underliggende problem og genstarter Tor.
-torlauncher.tor_exited=Tor lukkede uventet. Dette kan skyldes en fejl i selve Tor, et andet program i dit system eller en hardware-fejl. Tor-browseren vil ikke være i stand til at forbinde til noget som helst websted før du genstarter Tor. Send en kopi af din Tor-log til support-teamet hvis problemet fortsætter.
+torlauncher.tor_exited=Tor lukkede uventet. Dette kan skyldes en fejl i selve Tor, et andet program i dit system eller en hardware-fejl. Tor Browser vil ikke være i stand til at forbinde til noget som helst websted før du genstarter Tor. Send en kopi af din Tor-log til support-teamet hvis problemet fortsætter.
torlauncher.tor_exited2=Fanebladene i din browser vil ikke blive lukket ved af at du genstarter Tor.
torlauncher.tor_controlconn_failed=Kunne ikke forbinde til Tor kontrol-porten.
torlauncher.tor_failed_to_start=Tor kunne ikke starte.
@@ -23,7 +23,7 @@ torlauncher.failed_to_save_settings=Kunne ikke gemme Tor indstillingerne.⏎\n
torlauncher.ensure_tor_is_running=Kontroller venligst at Tor kører.
torlauncher.error_proxy_addr_missing=Du skal angive både IP adresse eller værts navn og en port, for at indstille Tor til at bruge en proxy som forbindelse til internettet.
-torlauncher.error_proxy_type_missing=Du skal vælge proxy-typen:
+torlauncher.error_proxy_type_missing=Du skal vælge proxytypen:
torlauncher.error_bridges_missing=Du skal angive en eller flere broer.
torlauncher.error_default_bridges_type_missing=Du skal vælge en transporttype for de tildelte broer.
torlauncher.error_bridge_bad_default_type=Ingen tildelte broer med transporttypen %S er tilgængelige. Justér venligst dine indstillinger.
diff --git a/src/chrome/locale/el/network-settings.dtd b/src/chrome/locale/el/network-settings.dtd
index 5cf7654..e04dbae 100644
--- a/src/chrome/locale/el/network-settings.dtd
+++ b/src/chrome/locale/el/network-settings.dtd
@@ -55,4 +55,4 @@
<!ENTITY torsettings.bridgeHelp2 "Because of how certain countries try to block Tor, certain bridges work in certain countries but not others.  If you are unsure about which bridges work in your country, visit torproject.org/about/contact.html#support">
<!-- Progress -->
-<!ENTITY torprogress.pleaseWait "Please wait while we establish a connection to the Tor network.  This may take several minutes.">
+<!ENTITY torprogress.pleaseWait "Παρακαλώ περιμένετε καθώς δημιουργήστε σύνδεση στο δίκτυο Tor.  Αυτό μπορεί να πάρει μερικά λεπτά.">
diff --git a/src/chrome/locale/es-AR/network-settings.dtd b/src/chrome/locale/es-AR/network-settings.dtd
index d1138d1..ad57d9c 100644
--- a/src/chrome/locale/es-AR/network-settings.dtd
+++ b/src/chrome/locale/es-AR/network-settings.dtd
@@ -1,6 +1,6 @@
<!ENTITY torsettings.dialog.title "Configuraciones de la red Tor">
<!ENTITY torsettings.wizard.title.default "Connect to Tor">
-<!ENTITY torsettings.wizard.title.configure "Tor Network Settings">
+<!ENTITY torsettings.wizard.title.configure "Configuraciones de la red Tor">
<!ENTITY torsettings.wizard.title.connecting "Establishing a Connection">
<!-- For locale picker: -->
@@ -55,4 +55,4 @@
<!ENTITY torsettings.bridgeHelp2 "Because of how certain countries try to block Tor, certain bridges work in certain countries but not others.  If you are unsure about which bridges work in your country, visit torproject.org/about/contact.html#support">
<!-- Progress -->
-<!ENTITY torprogress.pleaseWait "Please wait while we establish a connection to the Tor network.  This may take several minutes.">
+<!ENTITY torprogress.pleaseWait "Por favor, espere mientras establecemos una conexión a la red Tor.  Puede tardar varios minutos.">
diff --git a/src/chrome/locale/es-CL/network-settings.dtd b/src/chrome/locale/es-CL/network-settings.dtd
index f97ab3b..815c7b0 100644
--- a/src/chrome/locale/es-CL/network-settings.dtd
+++ b/src/chrome/locale/es-CL/network-settings.dtd
@@ -1,6 +1,6 @@
<!ENTITY torsettings.dialog.title "Configuracion De Internet Tor">
<!ENTITY torsettings.wizard.title.default "Connect to Tor">
-<!ENTITY torsettings.wizard.title.configure "Tor Network Settings">
+<!ENTITY torsettings.wizard.title.configure "Configuracion De Internet Tor">
<!ENTITY torsettings.wizard.title.connecting "Establishing a Connection">
<!-- For locale picker: -->
diff --git a/src/chrome/locale/es-CO/network-settings.dtd b/src/chrome/locale/es-CO/network-settings.dtd
index 4b69b66..4a35b79 100644
--- a/src/chrome/locale/es-CO/network-settings.dtd
+++ b/src/chrome/locale/es-CO/network-settings.dtd
@@ -1,6 +1,6 @@
<!ENTITY torsettings.dialog.title "Configuraciones de red de Tor">
<!ENTITY torsettings.wizard.title.default "Connect to Tor">
-<!ENTITY torsettings.wizard.title.configure "Tor Network Settings">
+<!ENTITY torsettings.wizard.title.configure "Configuraciones de red de Tor">
<!ENTITY torsettings.wizard.title.connecting "Establishing a Connection">
<!-- For locale picker: -->
diff --git a/src/chrome/locale/es-MX/network-settings.dtd b/src/chrome/locale/es-MX/network-settings.dtd
index fabb6b3..fe2b879 100644
--- a/src/chrome/locale/es-MX/network-settings.dtd
+++ b/src/chrome/locale/es-MX/network-settings.dtd
@@ -1,6 +1,6 @@
<!ENTITY torsettings.dialog.title "Configuración de red Tor">
<!ENTITY torsettings.wizard.title.default "Connect to Tor">
-<!ENTITY torsettings.wizard.title.configure "Tor Network Settings">
+<!ENTITY torsettings.wizard.title.configure "Configuración de red Tor">
<!ENTITY torsettings.wizard.title.connecting "Establishing a Connection">
<!-- For locale picker: -->
@@ -55,4 +55,4 @@
<!ENTITY torsettings.bridgeHelp2 "Because of how certain countries try to block Tor, certain bridges work in certain countries but not others.  If you are unsure about which bridges work in your country, visit torproject.org/about/contact.html#support">
<!-- Progress -->
-<!ENTITY torprogress.pleaseWait "Please wait while we establish a connection to the Tor network.  This may take several minutes.">
+<!ENTITY torprogress.pleaseWait "Por favor, espera mientras establecemos una conexión con Tor network.  Esto puede llevar varios minutos.">
diff --git a/src/chrome/locale/es/network-settings.dtd b/src/chrome/locale/es/network-settings.dtd
index 101ff12..9f87481 100644
--- a/src/chrome/locale/es/network-settings.dtd
+++ b/src/chrome/locale/es/network-settings.dtd
@@ -51,8 +51,8 @@
<!ENTITY torsettings.proxyHelp1 "Se necesita un proxy local cuando se conecta a través de una red de empresa, escuela o universidad. Si no estás seguro de cómo responder a esta pregunta, consulta la configuración de Internet en otro navegador o consulta la configuración de red de tu sistema para ver si se necesita un proxy.">
<!ENTITY torsettings.bridgeHelpTitle "Ayuda de repetidores puente ('bridge relays')">
-<!ENTITY torsettings.bridgeHelp1 "Los puentes son transmisores no listados que dificultan el bloqueo de las conexiones a la red Tor&#160. Cada tipo de puente utiliza un método diferente para evitar la censura&#160. Los obfs hacen que tu tráfico parezca ruido aleatorio, y los modestos hacen que tu tráfico parezca que se está conectando a ese servicio en lugar de a Tor.">
+<!ENTITY torsettings.bridgeHelp1 "Los puentes son transmisores no listados que dificultan el bloqueo de las conexiones a la red Tor.  Cada tipo de puente utiliza un método diferente para evitar la censura.  Los obfs hacen que tu tráfico parezca ruido aleatorio, y los modestos hacen que tu tráfico parezca que se está conectando a ese servicio en lugar de a Tor.">
<!ENTITY torsettings.bridgeHelp2 "Debido a la forma en que ciertos países intentan bloquear a Tor, ciertos puentes funcionan en algunos países pero no en otros. Si no estás segura de qué puentes funcionan en tu país, visita torproject.org/about/contact.html#support">
<!-- Progress -->
-<!ENTITY torprogress.pleaseWait "Espera mientras establecemos una conexión a la red To.&#160r. Esto puede durar varios minutos.">
+<!ENTITY torprogress.pleaseWait "Espera mientras establecemos una conexión a la red Tor.  Esto puede durar varios minutos.">
diff --git a/src/chrome/locale/eu/network-settings.dtd b/src/chrome/locale/eu/network-settings.dtd
index 8af929e..fc73e32 100644
--- a/src/chrome/locale/eu/network-settings.dtd
+++ b/src/chrome/locale/eu/network-settings.dtd
@@ -1,6 +1,6 @@
<!ENTITY torsettings.dialog.title "Tor sare ezarpenak">
<!ENTITY torsettings.wizard.title.default "Connect to Tor">
-<!ENTITY torsettings.wizard.title.configure "Tor Network Settings">
+<!ENTITY torsettings.wizard.title.configure "Tor sare ezarpenak">
<!ENTITY torsettings.wizard.title.connecting "Establishing a Connection">
<!-- For locale picker: -->
@@ -55,4 +55,4 @@
<!ENTITY torsettings.bridgeHelp2 "Because of how certain countries try to block Tor, certain bridges work in certain countries but not others.  If you are unsure about which bridges work in your country, visit torproject.org/about/contact.html#support">
<!-- Progress -->
-<!ENTITY torprogress.pleaseWait "Please wait while we establish a connection to the Tor network.  This may take several minutes.">
+<!ENTITY torprogress.pleaseWait "Mesedez itxaron Tor sarera konexioa ezartzen dugun bitartean.  Honek minutu batzuk har litzake.">
diff --git a/src/chrome/locale/fa/network-settings.dtd b/src/chrome/locale/fa/network-settings.dtd
index 728bf00..638776b 100644
--- a/src/chrome/locale/fa/network-settings.dtd
+++ b/src/chrome/locale/fa/network-settings.dtd
@@ -55,4 +55,4 @@
<!ENTITY torsettings.bridgeHelp2 "Because of how certain countries try to block Tor, certain bridges work in certain countries but not others.  If you are unsure about which bridges work in your country, visit torproject.org/about/contact.html#support">
<!-- Progress -->
-<!ENTITY torprogress.pleaseWait "Please wait while we establish a connection to the Tor network.  This may take several minutes.">
+<!ENTITY torprogress.pleaseWait "لطفا صبر کنید. در حال برقراری ارتباط با شبکه تٌر.&160; این پروسه ممکن است چند دقیقه به طول بینجامد.">
diff --git a/src/chrome/locale/fi/network-settings.dtd b/src/chrome/locale/fi/network-settings.dtd
index 617e245..084cdc0 100644
--- a/src/chrome/locale/fi/network-settings.dtd
+++ b/src/chrome/locale/fi/network-settings.dtd
@@ -1,6 +1,6 @@
<!ENTITY torsettings.dialog.title "Tor-verkkoasetukset">
<!ENTITY torsettings.wizard.title.default "Connect to Tor">
-<!ENTITY torsettings.wizard.title.configure "Tor Network Settings">
+<!ENTITY torsettings.wizard.title.configure "Tor-verkkoasetukset">
<!ENTITY torsettings.wizard.title.connecting "Establishing a Connection">
<!-- For locale picker: -->
@@ -55,4 +55,5 @@
<!ENTITY torsettings.bridgeHelp2 "Because of how certain countries try to block Tor, certain bridges work in certain countries but not others.  If you are unsure about which bridges work in your country, visit torproject.org/about/contact.html#support">
<!-- Progress -->
-<!ENTITY torprogress.pleaseWait "Please wait while we establish a connection to the Tor network.  This may take several minutes.">
+<!ENTITY torprogress.pleaseWait "Odota pieni hetki, kun yhteys TOR-verkostoon luodaan. 
+Tässä saattaa kestää muutama minuutti.">
diff --git a/src/chrome/locale/fil/network-settings.dtd b/src/chrome/locale/fil/network-settings.dtd
index d40c98b..eece283 100644
--- a/src/chrome/locale/fil/network-settings.dtd
+++ b/src/chrome/locale/fil/network-settings.dtd
@@ -55,4 +55,4 @@
<!ENTITY torsettings.bridgeHelp2 "Because of how certain countries try to block Tor, certain bridges work in certain countries but not others.  If you are unsure about which bridges work in your country, visit torproject.org/about/contact.html#support">
<!-- Progress -->
-<!ENTITY torprogress.pleaseWait "Please wait while we establish a connection to the Tor network.  This may take several minutes.">
+<!ENTITY torprogress.pleaseWait "Mag-hintay habang ginagawa ang pag-establish ng connection sa Tor network.  Maari itong tumagal ng ilang minuto.">
diff --git a/src/chrome/locale/fr/network-settings.dtd b/src/chrome/locale/fr/network-settings.dtd
index f8347d0..a45bc01 100644
--- a/src/chrome/locale/fr/network-settings.dtd
+++ b/src/chrome/locale/fr/network-settings.dtd
@@ -10,26 +10,26 @@
<!-- For "first run" wizard: -->
<!ENTITY torSettings.connectPrompt "Cliquez sur « Se connecter » pour vous connecter à Tor.">
-<!ENTITY torSettings.configurePrompt "Cliquez sur « Configurer » pour ajuster les paramètres du réseau si vous êtes dans un pays qui censure Tor (tel que la Chine, l’Iran, la Turquie) ou si vous vous connectez d’un réseau privé qui exige un mandataire.">
+<!ENTITY torSettings.configurePrompt "Cliquez sur « Configurer » pour régler les paramètres du réseau si vous êtes situé dans un pays qui censure Tor (tel que l’Égypte, la Chine, la Turquie) ou si vous vous connectez à partir d’un réseau privé qui exige un mandataire.">
<!ENTITY torSettings.configure "Configurer">
<!ENTITY torSettings.connect "Se connecter">
<!-- Other: -->
-<!ENTITY torsettings.startingTor "En attente du démarrage de Tor...">
+<!ENTITY torsettings.startingTor "En attente du démarrage de Tor…">
<!ENTITY torsettings.restartTor "Redémarrer Tor">
<!ENTITY torsettings.reconfigTor "Reconfigurer">
-<!ENTITY torsettings.discardSettings.prompt "Vous avez configuré des ponts Tor ou vous avez saisi des paramètres de mandataire local.  Pour établir une connexion directe vers le réseau Tor, ces paramètres doivent être supprimés.">
+<!ENTITY torsettings.discardSettings.prompt "Vous avez configuré des ponts Tor ou vous avez saisi des paramètres de mandataire local. Pour établir une connexion directe vers le réseau Tor, ces paramètres doivent être supprimés.">
<!ENTITY torsettings.discardSettings.proceed "Supprimer les paramètres et se connecter">
-<!ENTITY torsettings.optional "Facultatif">
+<!ENTITY torsettings.optional "facultatif">
<!ENTITY torsettings.useProxy.checkbox "J’utilise un mandataire pour accéder à Internet">
<!ENTITY torsettings.useProxy.type "Type de mandataire :">
<!ENTITY torsettings.useProxy.type.placeholder "sélectionner un type de mandataire">
<!ENTITY torsettings.useProxy.address "Adresse :">
-<!ENTITY torsettings.useProxy.address.placeholder "Adresse IP ou nom d’hôte">
+<!ENTITY torsettings.useProxy.address.placeholder "adresse IP ou nom d’hôte">
<!ENTITY torsettings.useProxy.port "Port :">
<!ENTITY torsettings.useProxy.username "Nom d’utilisateur :">
<!ENTITY torsettings.useProxy.password "Mot de passe :">
@@ -40,7 +40,7 @@
<!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é">
-<!ENTITY torsettings.useBridges.default.placeholder "sélectionner un pont">
+<!ENTITY torsettings.useBridges.default.placeholder "Sélectionner un pont">
<!ENTITY torsettings.useBridges.custom "Fournir un pont que je connais">
<!ENTITY torsettings.useBridges.label "Saisir des informations de pont provenant d’une source fiable">
<!ENTITY torsettings.useBridges.placeholder "type adresse:port (un par ligne)">
@@ -48,11 +48,11 @@
<!ENTITY torsettings.copyLog "Copier le journal de Tor dans le presse-papiers">
<!ENTITY torsettings.proxyHelpTitle "Aide sur les mandataires">
-<!ENTITY torsettings.proxyHelp1 "Un mandataire local est requis lors d’une connexion par un réseau d’entreprise, d’école ou d’université. Si vous n’êtes pas certain de savoir comment répondre à cette question, vérifiez les paramètres Internet d’un autre navigateur ou les paramètres réseau de votre système pour voir si un mandataire est requis.">
+<!ENTITY torsettings.proxyHelp1 "Un mandataire local est nécessaire lors d’une connexion par un réseau d’entreprise, d’école ou d’université. Si vous n’êtes pas certain de la réponse à cette question, vérifiez les paramètres Internet d’un autre navigateur ou les paramètres réseau de votre système pour savoir si un mandataire est nécessaire.">
<!ENTITY torsettings.bridgeHelpTitle "Aide sur les relais-ponts">
-<!ENTITY torsettings.bridgeHelp1 "Les ponts sont des relais non référencés qui rendent les connexions au Tor réseau plus difficile à bloquer.  Chaque type de pont utilise un moyen différent pour éviter la censure.  Avec les ponts obfs, votre trafic ressemble à du bruit aléatoire et avec les ponts meek, il semble que votre trafic se connecte à ce service plutôt qu’à Tor.">
-<!ENTITY torsettings.bridgeHelp2 "Dans la mesure où certains pays essaient de bloquer Tor, certains ponts fonctionnent dans certains pays, mais pas dans d’autres.  Si vous ne savez pas quels ponts fonctionnent dans votre pays, visitez torproject.org/about/contact.html#support">
+<!ENTITY torsettings.bridgeHelp1 "Les ponts sont des relais non référencés qui rendent les connexions au Tor réseau plus difficiles à bloquer. Chaque type de pont utilise un moyen différent pour éviter la censure. Avec les ponts obfs, votre trafic ressemble à du bruit aléatoire et avec les ponts meek, votre trafic semble se connecter à ce service plutôt qu’à Tor.">
+<!ENTITY torsettings.bridgeHelp2 "Dans la mesure où certains pays tentent de bloquer Tor, certains ponts fonctionnent dans certains pays, mais pas dans d’autres. Si vous ne savez pas quels ponts fonctionnent dans votre pays, visitez torproject.org/about/contact.html#support">
<!-- Progress -->
-<!ENTITY torprogress.pleaseWait "Veuillez patienter pendant que nous établissons une connexion vers le réseau Tor.  Cela pourrait prendre plusieurs minutes.">
+<!ENTITY torprogress.pleaseWait "Veuillez patienter pendant que nous établissons une connexion vers le réseau Tor. Cela pourrait prendre plusieurs minutes.">
diff --git a/src/chrome/locale/fr/torlauncher.properties b/src/chrome/locale/fr/torlauncher.properties
index 066dd15..a30ac76 100644
--- a/src/chrome/locale/fr/torlauncher.properties
+++ b/src/chrome/locale/fr/torlauncher.properties
@@ -10,7 +10,7 @@ torlauncher.tor_controlconn_failed=Impossible de se connecter au port de contrô
torlauncher.tor_failed_to_start=Tor n’a pas pu démarrer.
torlauncher.tor_control_failed=La prise de contrôle de Tor a échoué.
torlauncher.tor_bootstrap_failed=Échec lors de la connexion de Tor au réseau Tor.
-torlauncher.tor_bootstrap_failed_details=%1$S a échoué (%2$S).
+torlauncher.tor_bootstrap_failed_details=L’étape %1$S a échoué (%2$S).
torlauncher.unable_to_start_tor=Impossible de démarrer Tor.\n\n%S
torlauncher.tor_missing=Il manque l’exécutable Tor.
@@ -40,7 +40,7 @@ torlauncher.done=Terminé
torlauncher.forAssistance=Pour de l’assistance, contacter %S
torlauncher.forAssistance2=Pour de l’assistance, visiter %S
-torlauncher.copiedNLogMessages=La copie est terminée. %S messages de journalisation de Tor sont prêts à être coller dans un éditeur de texte ou un courriel.
+torlauncher.copiedNLogMessages=La copie est terminée. %S messages de journalisation de Tor sont prêts à être collés dans un éditeur de texte ou un courriel.
torlauncher.bootstrapStatus.conn_dir=Connexion à un annuaire de relais
torlauncher.bootstrapStatus.handshake_dir=Mise en place d’une connexion chiffrée à l’annuaire
@@ -53,7 +53,7 @@ torlauncher.bootstrapStatus.conn_or=Connexion au réseau Tor
torlauncher.bootstrapStatus.handshake_or=Mise en place d’un circuit Tor
torlauncher.bootstrapStatus.done=Vous êtes connecté au réseau Tor !
-torlauncher.bootstrapWarning.done=effectué
+torlauncher.bootstrapWarning.done=terminé
torlauncher.bootstrapWarning.connectrefused=connexion refusée
torlauncher.bootstrapWarning.misc=divers
torlauncher.bootstrapWarning.resourcelimit=ressources insuffisantes
diff --git a/src/chrome/locale/gl/network-settings.dtd b/src/chrome/locale/gl/network-settings.dtd
index d8e8ba8..90e812a 100644
--- a/src/chrome/locale/gl/network-settings.dtd
+++ b/src/chrome/locale/gl/network-settings.dtd
@@ -1,6 +1,6 @@
<!ENTITY torsettings.dialog.title "Axustes da rede Tor">
<!ENTITY torsettings.wizard.title.default "Connect to Tor">
-<!ENTITY torsettings.wizard.title.configure "Tor Network Settings">
+<!ENTITY torsettings.wizard.title.configure "Axustes da rede Tor">
<!ENTITY torsettings.wizard.title.connecting "Establishing a Connection">
<!-- For locale picker: -->
diff --git a/src/chrome/locale/hi/network-settings.dtd b/src/chrome/locale/hi/network-settings.dtd
index 837edf6..c35365b 100644
--- a/src/chrome/locale/hi/network-settings.dtd
+++ b/src/chrome/locale/hi/network-settings.dtd
@@ -1,6 +1,6 @@
<!ENTITY torsettings.dialog.title "टोर संजाल व्यवस्था">
<!ENTITY torsettings.wizard.title.default "Connect to Tor">
-<!ENTITY torsettings.wizard.title.configure "Tor Network Settings">
+<!ENTITY torsettings.wizard.title.configure "टोर संजाल व्यवस्था">
<!ENTITY torsettings.wizard.title.connecting "Establishing a Connection">
<!-- For locale picker: -->
@@ -55,4 +55,4 @@
<!ENTITY torsettings.bridgeHelp2 "Because of how certain countries try to block Tor, certain bridges work in certain countries but not others.  If you are unsure about which bridges work in your country, visit torproject.org/about/contact.html#support">
<!-- Progress -->
-<!ENTITY torprogress.pleaseWait "Please wait while we establish a connection to the Tor network.  This may take several minutes.">
+<!ENTITY torprogress.pleaseWait "कुछ देर रुकिए। हम टोर की संजाल से जुड़ रहे हैं। कुछ मिनट लग सकते हैं।">
diff --git a/src/chrome/locale/hr-HR/network-settings.dtd b/src/chrome/locale/hr-HR/network-settings.dtd
index fcb2daf..872065d 100644
--- a/src/chrome/locale/hr-HR/network-settings.dtd
+++ b/src/chrome/locale/hr-HR/network-settings.dtd
@@ -1,6 +1,6 @@
<!ENTITY torsettings.dialog.title "Postavke Tor mreže">
<!ENTITY torsettings.wizard.title.default "Connect to Tor">
-<!ENTITY torsettings.wizard.title.configure "Tor Network Settings">
+<!ENTITY torsettings.wizard.title.configure "Postavke Tor mreže">
<!ENTITY torsettings.wizard.title.connecting "Establishing a Connection">
<!-- For locale picker: -->
@@ -55,4 +55,4 @@
<!ENTITY torsettings.bridgeHelp2 "Because of how certain countries try to block Tor, certain bridges work in certain countries but not others.  If you are unsure about which bridges work in your country, visit torproject.org/about/contact.html#support">
<!-- Progress -->
-<!ENTITY torprogress.pleaseWait "Please wait while we establish a connection to the Tor network.  This may take several minutes.">
+<!ENTITY torprogress.pleaseWait "Molimo pričekajte dok ne uspostavimo vezu s Tor mrežom.  To bi moglo potrajati nekoliko minuta.">
diff --git a/src/chrome/locale/hr/network-settings.dtd b/src/chrome/locale/hr/network-settings.dtd
index 1fd8f67..5d4b263 100644
--- a/src/chrome/locale/hr/network-settings.dtd
+++ b/src/chrome/locale/hr/network-settings.dtd
@@ -1,6 +1,6 @@
<!ENTITY torsettings.dialog.title "Postavke Tor Mreže">
-<!ENTITY torsettings.wizard.title.default "Connect to Tor">
-<!ENTITY torsettings.wizard.title.configure "Tor Network Settings">
+<!ENTITY torsettings.wizard.title.default "Spoji se na Tor">
+<!ENTITY torsettings.wizard.title.configure "Postavke Tor Mreže">
<!ENTITY torsettings.wizard.title.connecting "Establishing a Connection">
<!-- For locale picker: -->
@@ -55,4 +55,4 @@
<!ENTITY torsettings.bridgeHelp2 "Because of how certain countries try to block Tor, certain bridges work in certain countries but not others.  If you are unsure about which bridges work in your country, visit torproject.org/about/contact.html#support">
<!-- Progress -->
-<!ENTITY torprogress.pleaseWait "Please wait while we establish a connection to the Tor network.  This may take several minutes.">
+<!ENTITY torprogress.pleaseWait "Molimo pričekajte dok uspostavljamo vezu sa Tor mrežom.   Ovo može potrajati nekoliko minuta.">
diff --git a/src/chrome/locale/hr/torlauncher.properties b/src/chrome/locale/hr/torlauncher.properties
index 7c11518..5ad76b8 100644
--- a/src/chrome/locale/hr/torlauncher.properties
+++ b/src/chrome/locale/hr/torlauncher.properties
@@ -33,9 +33,9 @@ torlauncher.bridge_suffix.meek-azure=(works in China)
torlauncher.connect=Poveži se
torlauncher.restart_tor=Restart Tor
-torlauncher.quit=Quit
-torlauncher.quit_win=Exit
-torlauncher.done=Done
+torlauncher.quit=Izlaz
+torlauncher.quit_win=Izlaz
+torlauncher.done=Gotovo
torlauncher.forAssistance=For assistance, contact %S
torlauncher.forAssistance2=For assistance, visit %S
@@ -54,7 +54,7 @@ torlauncher.bootstrapStatus.handshake_or=Establishing a Tor circuit
torlauncher.bootstrapStatus.done=Connected to the Tor network!
torlauncher.bootstrapWarning.done=done
-torlauncher.bootstrapWarning.connectrefused=connection refused
+torlauncher.bootstrapWarning.connectrefused=veza odbijena
torlauncher.bootstrapWarning.misc=miscellaneous
torlauncher.bootstrapWarning.resourcelimit=insufficient resources
torlauncher.bootstrapWarning.identity=identity mismatch
diff --git a/src/chrome/locale/hy/network-settings.dtd b/src/chrome/locale/hy/network-settings.dtd
index 85645d7..81bcc8c 100644
--- a/src/chrome/locale/hy/network-settings.dtd
+++ b/src/chrome/locale/hy/network-settings.dtd
@@ -12,7 +12,7 @@
<!ENTITY torSettings.connectPrompt "Click “Connect” to connect to Tor.">
<!ENTITY torSettings.configurePrompt "Click “Configure” to adjust network settings if you are in a country that censors Tor (such as Egypt, China, Turkey) or if you are connecting from a private network that requires a proxy.">
<!ENTITY torSettings.configure "Configure">
-<!ENTITY torSettings.connect "Connect">
+<!ENTITY torSettings.connect "Միացնել">
<!-- Other: -->
diff --git a/src/chrome/locale/hy/torlauncher.properties b/src/chrome/locale/hy/torlauncher.properties
index b09753e..390193a 100644
--- a/src/chrome/locale/hy/torlauncher.properties
+++ b/src/chrome/locale/hy/torlauncher.properties
@@ -31,10 +31,10 @@ torlauncher.error_bridge_bad_default_type=No provided bridges that have the tran
torlauncher.bridge_suffix.meek-amazon=(works in China)
torlauncher.bridge_suffix.meek-azure=(works in China)
-torlauncher.connect=Connect
+torlauncher.connect=Միացնել
torlauncher.restart_tor=Restart Tor
torlauncher.quit=Quit
-torlauncher.quit_win=Exit
+torlauncher.quit_win=Դուրս գալ
torlauncher.done=Done
torlauncher.forAssistance=For assistance, contact %S
diff --git a/src/chrome/locale/id/network-settings.dtd b/src/chrome/locale/id/network-settings.dtd
index c52833f..2c74ade 100644
--- a/src/chrome/locale/id/network-settings.dtd
+++ b/src/chrome/locale/id/network-settings.dtd
@@ -1,7 +1,7 @@
<!ENTITY torsettings.dialog.title "Pengaturan Jaringan Tor">
-<!ENTITY torsettings.wizard.title.default "Connect to Tor">
-<!ENTITY torsettings.wizard.title.configure "Tor Network Settings">
-<!ENTITY torsettings.wizard.title.connecting "Establishing a Connection">
+<!ENTITY torsettings.wizard.title.default "Hubungkan ke Tor">
+<!ENTITY torsettings.wizard.title.configure "Pengaturan Jaringan Tor">
+<!ENTITY torsettings.wizard.title.connecting "Membuat sambungan">
<!-- For locale picker: -->
<!ENTITY torlauncher.localePicker.title "Bahasa Peramban Tor">
@@ -9,8 +9,8 @@
<!-- For "first run" wizard: -->
-<!ENTITY torSettings.connectPrompt "Click “Connect” to connect to Tor.">
-<!ENTITY torSettings.configurePrompt "Click “Configure” to adjust network settings if you are in a country that censors Tor (such as Egypt, China, Turkey) or if you are connecting from a private network that requires a proxy.">
+<!ENTITY torSettings.connectPrompt "Klik "Connect" untuk tersambung ke Tor.">
+<!ENTITY torSettings.configurePrompt "Klik "Configure" untuk mengubah pengaturan jaringan jika Anda berada di negara yang menyensor Tor (seperti Mesir, Tiongkok, Turki) atau anda ingin terhubung dari jaringan pribadi yang menggunakan proxy.">
<!ENTITY torSettings.configure "Konfigur">
<!ENTITY torSettings.connect "Sambung">
@@ -25,9 +25,9 @@
<!ENTITY torsettings.optional "Opsional">
-<!ENTITY torsettings.useProxy.checkbox "I use a proxy to connect to the Internet">
+<!ENTITY torsettings.useProxy.checkbox "Saya menggunakan proxy untuk terhubung ke Internet">
<!ENTITY torsettings.useProxy.type "Tipe Proksi:">
-<!ENTITY torsettings.useProxy.type.placeholder "select a proxy type">
+<!ENTITY torsettings.useProxy.type.placeholder "pilih jenis proxy">
<!ENTITY torsettings.useProxy.address "Alamat:">
<!ENTITY torsettings.useProxy.address.placeholder "alamat IP atau nama host">
<!ENTITY torsettings.useProxy.port "Port:">
@@ -38,21 +38,21 @@
<!ENTITY torsettings.useProxy.type.http "HTTP / HTTPS">
<!ENTITY torsettings.firewall.checkbox "Komputer ini pergi melalui firewall yang hanya mengizinkan koneksi untuk beberapa port">
<!ENTITY torsettings.firewall.allowedPorts "Port yang diizinkan:">
-<!ENTITY torsettings.useBridges.checkbox "Tor is censored in my country">
-<!ENTITY torsettings.useBridges.default "Select a built-in bridge">
-<!ENTITY torsettings.useBridges.default.placeholder "select a bridge">
-<!ENTITY torsettings.useBridges.custom "Provide a bridge I know">
-<!ENTITY torsettings.useBridges.label "Enter bridge information from a trusted source.">
-<!ENTITY torsettings.useBridges.placeholder "type address:port (one per line)">
+<!ENTITY torsettings.useBridges.checkbox "Tor disensor di negara saya">
+<!ENTITY torsettings.useBridges.default "Pilih satu built-in bridge">
+<!ENTITY torsettings.useBridges.default.placeholder "pilih satu bridge">
+<!ENTITY torsettings.useBridges.custom "Sediakan sebuah bridge yang saya tahu">
+<!ENTITY torsettings.useBridges.label "Masukkan informasi bridge dari sumber terpercaya">
+<!ENTITY torsettings.useBridges.placeholder "masukkan address:port (satu entri per baris)">
<!ENTITY torsettings.copyLog "Salin Log Tor Ke Clipboard">
-<!ENTITY torsettings.proxyHelpTitle "Proxy Help">
-<!ENTITY torsettings.proxyHelp1 "A local proxy is needed when connecting through a company, school, or university network. If you are not sure how to answer this question, look at the Internet settings in another browser or check your system's network settings to see whether a proxy is needed.">
+<!ENTITY torsettings.proxyHelpTitle "Bantuan untuk Proxy">
+<!ENTITY torsettings.proxyHelp1 "Proxy lokal diperlukan ketika mencoba terhubung dari jaringan perusahaan, sekolah, atau universitas.  Jika anda tidak yakin bagaimana untuk menjawab pertanyaan ini, lihat pengaturan Internet di peramban lainnya atau periksa pengaturan sistem jaringan Anda untuk melihat apakah proksi lokal dibutuhkan.">
<!ENTITY torsettings.bridgeHelpTitle "Bantuan Bridge Relay">
-<!ENTITY torsettings.bridgeHelp1 "Bridges are unlisted relays that make it more difficult to block connections to the Tor Network.  Each type of bridge uses a different method to avoid censorship.  The obfs ones make your traffic look like random noise, and the meek ones make your traffic look like it's connecting to that service instead of Tor.">
-<!ENTITY torsettings.bridgeHelp2 "Because of how certain countries try to block Tor, certain bridges work in certain countries but not others.  If you are unsure about which bridges work in your country, visit torproject.org/about/contact.html#support">
+<!ENTITY torsettings.bridgeHelp1 "Bridges adalah relays yang tidak terdaftar, yang membuat pemblokiran sambungan di Jaringan Tor lebih sulit dilakukan.  Setiap jenis bridge menggunakan metode yang berbeda untuk menghindari sensor.  Jenis obfs membuat sambungan Anda terlihat seperti kegiatan acak dan jenis meek membuat sambungan Anda terlihat tersambung ke layanan tersebut, bukan ke Tor.">
+<!ENTITY torsettings.bridgeHelp2 "Karena beberapa negara mencoba untuk memblokir Tor, beberapa jenis bridge berfungsi di beberapa negara tapi tidak di negara lain.  Jika Anda tidak yakin tentang jenis bridge yang berfungsi negara Anda, kunjungi torproject.org/about/contact.html#support">
<!-- Progress -->
-<!ENTITY torprogress.pleaseWait "Please wait while we establish a connection to the Tor network.  This may take several minutes.">
+<!ENTITY torprogress.pleaseWait "Mohon menunggu sambil kami membuat sambungan ke jaringan TorJaringan Tor.  Ini akan memakan waktu beberapa menit">
diff --git a/src/chrome/locale/id/torlauncher.properties b/src/chrome/locale/id/torlauncher.properties
index 2e51710..a3956f0 100644
--- a/src/chrome/locale/id/torlauncher.properties
+++ b/src/chrome/locale/id/torlauncher.properties
@@ -28,8 +28,8 @@ torlauncher.error_bridges_missing=Anda harus menspesifikan satu bridge atau lebi
torlauncher.error_default_bridges_type_missing=Anda harus memilih satu tipe transportasi untuk bridges yang tersedia.
torlauncher.error_bridge_bad_default_type=Tidak ada bridges tersedia yang memiliki tipe transportasi %S tersedia. Mohon sesuaikan pengaturan Anda.
-torlauncher.bridge_suffix.meek-amazon=(works in China)
-torlauncher.bridge_suffix.meek-azure=(works in China)
+torlauncher.bridge_suffix.meek-amazon=(berfungsi di Tiongkok)
+torlauncher.bridge_suffix.meek-azure=(berfungsi di Tiongkok)
torlauncher.connect=Hubungi
torlauncher.restart_tor=Muat ulang Tor
diff --git a/src/chrome/locale/is/network-settings.dtd b/src/chrome/locale/is/network-settings.dtd
index a61e72a..bbc3d66 100644
--- a/src/chrome/locale/is/network-settings.dtd
+++ b/src/chrome/locale/is/network-settings.dtd
@@ -1,7 +1,7 @@
<!ENTITY torsettings.dialog.title "Netkerfisstillingar Tor">
-<!ENTITY torsettings.wizard.title.default "Connect to Tor">
-<!ENTITY torsettings.wizard.title.configure "Tor Network Settings">
-<!ENTITY torsettings.wizard.title.connecting "Establishing a Connection">
+<!ENTITY torsettings.wizard.title.default "Tengjast við Tor-netið">
+<!ENTITY torsettings.wizard.title.configure "Netkerfisstillingar Tor">
+<!ENTITY torsettings.wizard.title.connecting "Kem á tengingu">
<!-- For locale picker: -->
<!ENTITY torlauncher.localePicker.title "Tungumál Tor-vafra">
@@ -9,7 +9,7 @@
<!-- For "first run" wizard: -->
-<!ENTITY torSettings.connectPrompt "Click “Connect” to connect to Tor.">
+<!ENTITY torSettings.connectPrompt "Smelltu á "Tengjast" til að tengjast við Tor.">
<!ENTITY torSettings.configurePrompt "Click “Configure” to adjust network settings if you are in a country that censors Tor (such as Egypt, China, Turkey) or if you are connecting from a private network that requires a proxy.">
<!ENTITY torSettings.configure "Stilla">
<!ENTITY torSettings.connect "Tengjast">
@@ -25,9 +25,9 @@
<!ENTITY torsettings.optional "Valkvætt">
-<!ENTITY torsettings.useProxy.checkbox "I use a proxy to connect to the Internet">
+<!ENTITY torsettings.useProxy.checkbox "Ég nota milliþjón (proxy) til að tengjast við internetið">
<!ENTITY torsettings.useProxy.type "Gerð milliþjóns:">
-<!ENTITY torsettings.useProxy.type.placeholder "select a proxy type">
+<!ENTITY torsettings.useProxy.type.placeholder "veldu tegund milliþjóns">
<!ENTITY torsettings.useProxy.address "Vistfang:">
<!ENTITY torsettings.useProxy.address.placeholder "IP-vistfang eða vélarheiti">
<!ENTITY torsettings.useProxy.port "Gátt:">
@@ -38,16 +38,16 @@
<!ENTITY torsettings.useProxy.type.http "HTTP / HTTPS">
<!ENTITY torsettings.firewall.checkbox "This computer goes through a firewall that only allows connections to certain ports">
<!ENTITY torsettings.firewall.allowedPorts "Leyfðar gáttir:">
-<!ENTITY torsettings.useBridges.checkbox "Tor is censored in my country">
-<!ENTITY torsettings.useBridges.default "Select a built-in bridge">
-<!ENTITY torsettings.useBridges.default.placeholder "select a bridge">
+<!ENTITY torsettings.useBridges.checkbox "Tor er ritskoðað í landinu mínu">
+<!ENTITY torsettings.useBridges.default "Veldu innbyggða brú">
+<!ENTITY torsettings.useBridges.default.placeholder "veldu brú">
<!ENTITY torsettings.useBridges.custom "Provide a bridge I know">
<!ENTITY torsettings.useBridges.label "Enter bridge information from a trusted source.">
-<!ENTITY torsettings.useBridges.placeholder "type address:port (one per line)">
+<!ENTITY torsettings.useBridges.placeholder "settu inn vistfang:gátt (eitt á hverja línu)">
<!ENTITY torsettings.copyLog "Afrita atvikaskrá Tor á klippispjald">
-<!ENTITY torsettings.proxyHelpTitle "Proxy Help">
+<!ENTITY torsettings.proxyHelpTitle "Hjálp fyrir milliþjóna">
<!ENTITY torsettings.proxyHelp1 "A local proxy is needed when connecting through a company, school, or university network. If you are not sure how to answer this question, look at the Internet settings in another browser or check your system's network settings to see whether a proxy is needed.">
<!ENTITY torsettings.bridgeHelpTitle "Hjálp fyrir brúaendurvarpa">
@@ -55,4 +55,4 @@
<!ENTITY torsettings.bridgeHelp2 "Because of how certain countries try to block Tor, certain bridges work in certain countries but not others.  If you are unsure about which bridges work in your country, visit torproject.org/about/contact.html#support">
<!-- Progress -->
-<!ENTITY torprogress.pleaseWait "Please wait while we establish a connection to the Tor network.  This may take several minutes.">
+<!ENTITY torprogress.pleaseWait "Bíddu aðeins á meðan tengingu er komið á við Tor-netið.  Það getur tekið nokkrar mínútur.">
diff --git a/src/chrome/locale/is/torlauncher.properties b/src/chrome/locale/is/torlauncher.properties
index cfa135b..ace645e 100644
--- a/src/chrome/locale/is/torlauncher.properties
+++ b/src/chrome/locale/is/torlauncher.properties
@@ -6,16 +6,16 @@ torlauncher.error_title=Tor-ræsir
torlauncher.tor_exited_during_startup=Tor exited during startup. This might be due to an error in your torrc file, a bug in Tor or another program on your system, or faulty hardware. Until you fix the underlying problem and restart Tor, Tor Browser will not start.
torlauncher.tor_exited=Tor unexpectedly exited. This might be due to a bug in Tor itself, another program on your system, or faulty hardware. Until you restart Tor, the Tor Browser will not able to reach any websites. If the problem persists, please send a copy of your Tor Log to the support team.
torlauncher.tor_exited2=Endurræsing Tor mun ekki loka flipum vafrans.
-torlauncher.tor_controlconn_failed=Could not connect to Tor control port.
+torlauncher.tor_controlconn_failed=Gat ekki tengst stýrigátt Tor.
torlauncher.tor_failed_to_start=Tor ræstist ekki.
torlauncher.tor_control_failed=Mistókst að ná stjórn yfir Tor.
-torlauncher.tor_bootstrap_failed=Tor failed to establish a Tor network connection.
+torlauncher.tor_bootstrap_failed=Tor mistókst að koma á Tor-nettengingu.
torlauncher.tor_bootstrap_failed_details=%1$S mistókst (%2$S).
torlauncher.unable_to_start_tor=Tókst ekki að ræsa Tor.\n\n%S
torlauncher.tor_missing=Vantar Tor-keyrsluskrána.
-torlauncher.torrc_missing=The torrc file is missing and could not be created.
-torlauncher.datadir_missing=The Tor data directory does not exist and could not be created.
+torlauncher.torrc_missing=Skrána torrc vantar og var ekki hægt að útbúa hana.
+torlauncher.datadir_missing=Tor-gagnamappan er ekki til og var ekki hægt að útbúa hana.
torlauncher.password_hash_missing=Mistókst að fá hakkað lykilorð.
torlauncher.failed_to_get_settings=Tókst ekki að nálgast stillingar fyrir Tor.\n\n%S
@@ -28,8 +28,8 @@ torlauncher.error_bridges_missing=Þú verður að tilgreina eina eða fleiri br
torlauncher.error_default_bridges_type_missing=You must select a transport type for the provided bridges.
torlauncher.error_bridge_bad_default_type=No provided bridges that have the transport type %S are available. Please adjust your settings.
-torlauncher.bridge_suffix.meek-amazon=(works in China)
-torlauncher.bridge_suffix.meek-azure=(works in China)
+torlauncher.bridge_suffix.meek-amazon=(virkar í Kína)
+torlauncher.bridge_suffix.meek-azure=(virkar í Kína)
torlauncher.connect=Tengjast
torlauncher.restart_tor=Endurræsa Tor
@@ -61,4 +61,4 @@ torlauncher.bootstrapWarning.identity=auðkenni samsvara ekki
torlauncher.bootstrapWarning.timeout=tenging féll á tíma
torlauncher.bootstrapWarning.noroute=no route to host
torlauncher.bootstrapWarning.ioerror=les/skrifvilla
-torlauncher.bootstrapWarning.pt_missing=missing pluggable transport
+torlauncher.bootstrapWarning.pt_missing=vantar 'pluggable transport' tengileiðir
diff --git a/src/chrome/locale/ja/network-settings.dtd b/src/chrome/locale/ja/network-settings.dtd
index f14590e..49b2014 100644
--- a/src/chrome/locale/ja/network-settings.dtd
+++ b/src/chrome/locale/ja/network-settings.dtd
@@ -39,10 +39,10 @@
<!ENTITY torsettings.firewall.checkbox "このコンピューターは特定のポートへの接続のみ許可するファイアーウォールを通します。">
<!ENTITY torsettings.firewall.allowedPorts "許可されたポート:">
<!ENTITY torsettings.useBridges.checkbox "Tor は私の国では検閲されています">
-<!ENTITY torsettings.useBridges.default "Select a built-in bridge">
-<!ENTITY torsettings.useBridges.default.placeholder "select a bridge">
-<!ENTITY torsettings.useBridges.custom "Provide a bridge I know">
-<!ENTITY torsettings.useBridges.label "Enter bridge information from a trusted source.">
+<!ENTITY torsettings.useBridges.default "内蔵ブリッジを選択する">
+<!ENTITY torsettings.useBridges.default.placeholder "ブリッジを選択">
+<!ENTITY torsettings.useBridges.custom "知っているブリッジを使う">
+<!ENTITY torsettings.useBridges.label "信頼できる情報源からのブリッジ情報を入力してください。">
<!ENTITY torsettings.useBridges.placeholder "アドレス:ポート を入力(1行につきひとつ)">
<!ENTITY torsettings.copyLog "Torのログをクリップボードにコピー">
@@ -51,8 +51,8 @@
<!ENTITY torsettings.proxyHelp1 "会社、学校、大学等のネットワークを通して接続する場合、ローカルプロクシが必要になります。 もしこの質問にどう答えればよいかわからない場合は、他のブラウザのインターネット設定を見るか、システムのネットワーク設定を確認するかして、プロクシが必要であるかを調べてください。">
<!ENTITY torsettings.bridgeHelpTitle "ブリッジリレーのヘルプ">
-<!ENTITY torsettings.bridgeHelp1 "Bridges are unlisted relays that make it more difficult to block connections to the Tor Network.  Each type of bridge uses a different method to avoid censorship.  The obfs ones make your traffic look like random noise, and the meek ones make your traffic look like it's connecting to that service instead of Tor.">
-<!ENTITY torsettings.bridgeHelp2 "Because of how certain countries try to block Tor, certain bridges work in certain countries but not others.  If you are unsure about which bridges work in your country, visit torproject.org/about/contact.html#support">
+<!ENTITY torsettings.bridgeHelp1 "ブリッジとはTorネットワークへの接続をブロックすることを難しくするためのリストされていないリレーです。  それぞれの種類のブリッジは検閲を避けるための異なる手法を利用しています。  obfsのものはあなたのトラフィックをランダムなノイズのように見せかけ,meekのものはあなたのトラフィックをTorではなくそのサービスへの接続であるように見せかけます。">
+<!ENTITY torsettings.bridgeHelp2 "その国がどのようにしてTorをブロックしようと試みているかによって、あるブリッジがある国では機能しても他の国では動かない場合があります。  もしどのブリッジがあなたの国で機能するかわからない場合は torproject.org/about/contact.html#support にアクセスしてください。">
<!-- Progress -->
-<!ENTITY torprogress.pleaseWait "Please wait while we establish a connection to the Tor network.  This may take several minutes.">
+<!ENTITY torprogress.pleaseWait "Torネットワークへの接続が確立されるまでお待ちください。  これには数分間かかることがあります。">
diff --git a/src/chrome/locale/ja/torlauncher.properties b/src/chrome/locale/ja/torlauncher.properties
index d60927e..1a2a9f6 100644
--- a/src/chrome/locale/ja/torlauncher.properties
+++ b/src/chrome/locale/ja/torlauncher.properties
@@ -28,8 +28,8 @@ torlauncher.error_bridges_missing=一つ以上のブリッジを記述する必
torlauncher.error_default_bridges_type_missing=提供されたブリッジ用のトランスポートタイプを選択する必要があります。
torlauncher.error_bridge_bad_default_type=トランスポートタイプ %S がある提供されたブリッジに利用できるものがありません。設定を調整してください。
-torlauncher.bridge_suffix.meek-amazon=(works in China)
-torlauncher.bridge_suffix.meek-azure=(works in China)
+torlauncher.bridge_suffix.meek-amazon=(中国で動作)
+torlauncher.bridge_suffix.meek-azure=(中国で動作)
torlauncher.connect=接続
torlauncher.restart_tor=Torを再起動する
diff --git a/src/chrome/locale/ka/network-settings.dtd b/src/chrome/locale/ka/network-settings.dtd
index f9a3bb2..3dddc23 100644
--- a/src/chrome/locale/ka/network-settings.dtd
+++ b/src/chrome/locale/ka/network-settings.dtd
@@ -1,6 +1,6 @@
<!ENTITY torsettings.dialog.title "Tor-ის ქსელის პარამეტრები">
<!ENTITY torsettings.wizard.title.default "Connect to Tor">
-<!ENTITY torsettings.wizard.title.configure "Tor Network Settings">
+<!ENTITY torsettings.wizard.title.configure "Tor-ის ქსელის პარამეტრები">
<!ENTITY torsettings.wizard.title.connecting "Establishing a Connection">
<!-- For locale picker: -->
diff --git a/src/chrome/locale/kk/network-settings.dtd b/src/chrome/locale/kk/network-settings.dtd
index 85645d7..5c14016 100644
--- a/src/chrome/locale/kk/network-settings.dtd
+++ b/src/chrome/locale/kk/network-settings.dtd
@@ -12,7 +12,7 @@
<!ENTITY torSettings.connectPrompt "Click “Connect” to connect to Tor.">
<!ENTITY torSettings.configurePrompt "Click “Configure” to adjust network settings if you are in a country that censors Tor (such as Egypt, China, Turkey) or if you are connecting from a private network that requires a proxy.">
<!ENTITY torSettings.configure "Configure">
-<!ENTITY torSettings.connect "Connect">
+<!ENTITY torSettings.connect "Қосылу ">
<!-- Other: -->
diff --git a/src/chrome/locale/kk/torlauncher.properties b/src/chrome/locale/kk/torlauncher.properties
index f582351..696a902 100644
--- a/src/chrome/locale/kk/torlauncher.properties
+++ b/src/chrome/locale/kk/torlauncher.properties
@@ -31,11 +31,11 @@ torlauncher.error_bridge_bad_default_type=No provided bridges that have the tran
torlauncher.bridge_suffix.meek-amazon=(works in China)
torlauncher.bridge_suffix.meek-azure=(works in China)
-torlauncher.connect=Connect
+torlauncher.connect=Қосылу
torlauncher.restart_tor=Restart Tor
torlauncher.quit=Жұмысын аяқтау
-torlauncher.quit_win=Exit
-torlauncher.done=Done
+torlauncher.quit_win=Шығу
+torlauncher.done=Дайын
torlauncher.forAssistance=For assistance, contact %S
torlauncher.forAssistance2=For assistance, visit %S
diff --git a/src/chrome/locale/km/network-settings.dtd b/src/chrome/locale/km/network-settings.dtd
index 5da268e..00b3057 100644
--- a/src/chrome/locale/km/network-settings.dtd
+++ b/src/chrome/locale/km/network-settings.dtd
@@ -1,6 +1,6 @@
<!ENTITY torsettings.dialog.title "ការកំណត់បណ្ដាញ Tor">
<!ENTITY torsettings.wizard.title.default "Connect to Tor">
-<!ENTITY torsettings.wizard.title.configure "Tor Network Settings">
+<!ENTITY torsettings.wizard.title.configure "ការកំណត់បណ្ដាញ Tor">
<!ENTITY torsettings.wizard.title.connecting "Establishing a Connection">
<!-- For locale picker: -->
diff --git a/src/chrome/locale/ko-KR/network-settings.dtd b/src/chrome/locale/ko-KR/network-settings.dtd
index 8e4b8df..e42f3de 100644
--- a/src/chrome/locale/ko-KR/network-settings.dtd
+++ b/src/chrome/locale/ko-KR/network-settings.dtd
@@ -1,6 +1,6 @@
<!ENTITY torsettings.dialog.title "Tor 네트워크 설정">
<!ENTITY torsettings.wizard.title.default "Connect to Tor">
-<!ENTITY torsettings.wizard.title.configure "Tor Network Settings">
+<!ENTITY torsettings.wizard.title.configure "Tor 네트워크 설정">
<!ENTITY torsettings.wizard.title.connecting "Establishing a Connection">
<!-- For locale picker: -->
diff --git a/src/chrome/locale/ko/network-settings.dtd b/src/chrome/locale/ko/network-settings.dtd
index 9310734..27181dc 100644
--- a/src/chrome/locale/ko/network-settings.dtd
+++ b/src/chrome/locale/ko/network-settings.dtd
@@ -1,6 +1,6 @@
<!ENTITY torsettings.dialog.title "Tor 네트워크 설정">
<!ENTITY torsettings.wizard.title.default "Connect to Tor">
-<!ENTITY torsettings.wizard.title.configure "Tor Network Settings">
+<!ENTITY torsettings.wizard.title.configure "Tor 네트워크 설정">
<!ENTITY torsettings.wizard.title.connecting "Establishing a Connection">
<!-- For locale picker: -->
@@ -55,4 +55,4 @@
<!ENTITY torsettings.bridgeHelp2 "Because of how certain countries try to block Tor, certain bridges work in certain countries but not others.  If you are unsure about which bridges work in your country, visit torproject.org/about/contact.html#support">
<!-- Progress -->
-<!ENTITY torprogress.pleaseWait "Please wait while we establish a connection to the Tor network.  This may take several minutes.">
+<!ENTITY torprogress.pleaseWait "Tor 네트워크에 연결할 때까지 기다려주십시오.  몇 분 정도 소요될 수 있습니다.">
diff --git a/src/chrome/locale/ky/torlauncher.properties b/src/chrome/locale/ky/torlauncher.properties
index 788283f..fd28cb8 100644
--- a/src/chrome/locale/ky/torlauncher.properties
+++ b/src/chrome/locale/ky/torlauncher.properties
@@ -33,7 +33,7 @@ torlauncher.bridge_suffix.meek-azure=(works in China)
torlauncher.connect=Байланышуу
torlauncher.restart_tor=Restart Tor
-torlauncher.quit=Quit
+torlauncher.quit=Чыгуу
torlauncher.quit_win=Чыгуу
torlauncher.done=Даяр
diff --git a/src/chrome/locale/lo/network-settings.dtd b/src/chrome/locale/lo/network-settings.dtd
index a882f4e..63c8453 100644
--- a/src/chrome/locale/lo/network-settings.dtd
+++ b/src/chrome/locale/lo/network-settings.dtd
@@ -1,6 +1,6 @@
<!ENTITY torsettings.dialog.title "ການຕັ້ງຄ່າເຄືອຂ່າຍ Tor">
<!ENTITY torsettings.wizard.title.default "Connect to Tor">
-<!ENTITY torsettings.wizard.title.configure "Tor Network Settings">
+<!ENTITY torsettings.wizard.title.configure "ການຕັ້ງຄ່າເຄືອຂ່າຍ Tor">
<!ENTITY torsettings.wizard.title.connecting "Establishing a Connection">
<!-- For locale picker: -->
@@ -55,4 +55,4 @@
<!ENTITY torsettings.bridgeHelp2 "Because of how certain countries try to block Tor, certain bridges work in certain countries but not others.  If you are unsure about which bridges work in your country, visit torproject.org/about/contact.html#support">
<!-- Progress -->
-<!ENTITY torprogress.pleaseWait "Please wait while we establish a connection to the Tor network.  This may take several minutes.">
+<!ENTITY torprogress.pleaseWait "ກະລຸນາລໍຖ້າໃນຂະນະທີ່ພວກເຮົາຈັດແຈງການເຊື່ອມຕໍ່ເຂົ້າເຄືອຂ່າຍ Tor.  ອາດຈະໃຊ້ເວລາຫລາຍນາທີ.">
diff --git a/src/chrome/locale/lt/network-settings.dtd b/src/chrome/locale/lt/network-settings.dtd
index b38f443..e34d7b0 100644
--- a/src/chrome/locale/lt/network-settings.dtd
+++ b/src/chrome/locale/lt/network-settings.dtd
@@ -55,4 +55,4 @@
<!ENTITY torsettings.bridgeHelp2 "Because of how certain countries try to block Tor, certain bridges work in certain countries but not others.  If you are unsure about which bridges work in your country, visit torproject.org/about/contact.html#support">
<!-- Progress -->
-<!ENTITY torprogress.pleaseWait "Please wait while we establish a connection to the Tor network.  This may take several minutes.">
+<!ENTITY torprogress.pleaseWait "Prašome palaukti, kol mes užmegsime ryšį su Tor tinklu.  Tai gali užtrukti kelias minutes.">
diff --git a/src/chrome/locale/lv/network-settings.dtd b/src/chrome/locale/lv/network-settings.dtd
index 970c645..5c2de67 100644
--- a/src/chrome/locale/lv/network-settings.dtd
+++ b/src/chrome/locale/lv/network-settings.dtd
@@ -1,7 +1,7 @@
<!ENTITY torsettings.dialog.title "Tor tīkla iestatījumi">
-<!ENTITY torsettings.wizard.title.default "Connect to Tor">
-<!ENTITY torsettings.wizard.title.configure "Tor Network Settings">
-<!ENTITY torsettings.wizard.title.connecting "Establishing a Connection">
+<!ENTITY torsettings.wizard.title.default "Veidot savienojumu ar Tor">
+<!ENTITY torsettings.wizard.title.configure "Tor tīkla iestatījumi">
+<!ENTITY torsettings.wizard.title.connecting "Veido savienojumu">
<!-- For locale picker: -->
<!ENTITY torlauncher.localePicker.title "Pārlūka Tor valoda">
@@ -9,8 +9,8 @@
<!-- For "first run" wizard: -->
-<!ENTITY torSettings.connectPrompt "Click “Connect” to connect to Tor.">
-<!ENTITY torSettings.configurePrompt "Click “Configure” to adjust network settings if you are in a country that censors Tor (such as Egypt, China, Turkey) or if you are connecting from a private network that requires a proxy.">
+<!ENTITY torSettings.connectPrompt "Klikšķināt „Savienot”, lai izveidotu savienojumu ar Tor.">
+<!ENTITY torSettings.configurePrompt "Klikšķināt „Konfigurēt”, lai pielāgotu tīkla iestatījumus, ja esat valstīs, kas cenzē Tor (tādās, kā Ēģipte, Ķīna, Turcija), vai veidojat savienojumu no privāta tīkla, kam nepeciešams starpniekserveris.">
<!ENTITY torSettings.configure "Konfigurēt">
<!ENTITY torSettings.connect "Veidot savienojumu">
@@ -20,14 +20,14 @@
<!ENTITY torsettings.restartTor "Restartēt Tor">
<!ENTITY torsettings.reconfigTor "Pārkonfigurēt">
-<!ENTITY torsettings.discardSettings.prompt "Jūs nokonfigurējāt Tor tiltus vai ievadījāt vietējā starpniekservera iestatījumus.  lai izveidot tiešu savienojumu ar tīklu Tor, šie iestatījumi ir jānoņem.">
+<!ENTITY torsettings.discardSettings.prompt "Jūs nokonfigurējāt Tor tiltus vai ievadījāt vietējā starpniekservera iestatījumus. Lai izveidot tiešu savienojumu ar tīklu Tor, šie iestatījumi ir jānoņem.">
<!ENTITY torsettings.discardSettings.proceed "Noņemt Iestatījumus un Izveidot savienojumu ">
<!ENTITY torsettings.optional "Neobligāts">
-<!ENTITY torsettings.useProxy.checkbox "I use a proxy to connect to the Internet">
+<!ENTITY torsettings.useProxy.checkbox "Lai izveidotu savienojumu ar internetu, es lietoju starpniekseveri">
<!ENTITY torsettings.useProxy.type "Starpnieka tips:">
-<!ENTITY torsettings.useProxy.type.placeholder "select a proxy type">
+<!ENTITY torsettings.useProxy.type.placeholder "izvēlieties starpniekservera veidu">
<!ENTITY torsettings.useProxy.address "Adrese:">
<!ENTITY torsettings.useProxy.address.placeholder "IP adrese vai resursdatora nosaukums">
<!ENTITY torsettings.useProxy.port "Ports:">
@@ -38,21 +38,21 @@
<!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.">
<!ENTITY torsettings.firewall.allowedPorts "Atļautie porti:">
-<!ENTITY torsettings.useBridges.checkbox "Tor is censored in my country">
-<!ENTITY torsettings.useBridges.default "Select a built-in bridge">
-<!ENTITY torsettings.useBridges.default.placeholder "select a bridge">
-<!ENTITY torsettings.useBridges.custom "Provide a bridge I know">
-<!ENTITY torsettings.useBridges.label "Enter bridge information from a trusted source.">
-<!ENTITY torsettings.useBridges.placeholder "type address:port (one per line)">
+<!ENTITY torsettings.useBridges.checkbox "Manā valstī Tor tiek cenzēts">
+<!ENTITY torsettings.useBridges.default "Izvēlieties iebūvētu tiltu">
+<!ENTITY torsettings.useBridges.default.placeholder "izvēlieties tiltu">
+<!ENTITY torsettings.useBridges.custom "Piedāvāt tiltu, kuru es zinu">
+<!ENTITY torsettings.useBridges.label "Ievadiet uzticama avota sniegtu tilta informāciju.">
+<!ENTITY torsettings.useBridges.placeholder "rakstiet address:port (vienu rindā)">
<!ENTITY torsettings.copyLog "Kopēt Tor žurnālu starpliktuvē">
-<!ENTITY torsettings.proxyHelpTitle "Proxy Help">
-<!ENTITY torsettings.proxyHelp1 "A local proxy is needed when connecting through a company, school, or university network. If you are not sure how to answer this question, look at the Internet settings in another browser or check your system's network settings to see whether a proxy is needed.">
+<!ENTITY torsettings.proxyHelpTitle "Starpniekservera palīdzība">
+<!ENTITY torsettings.proxyHelp1 "Ja veidojat savienojumu caur uzņēmuma, skolas vai universitātes tīklu, ir nepieciešams vietējais starpniekserveris. Ja neesat pārliecināts, kā atbildēt uz šo jautājumu, apskatiet interneta iestatījumus citā pārlūkā vai pārbaudiet savas sistēmas tīkla iestatījumus, lai noskaidrotu vai starpniekserveris ir nepieciešams.">
<!ENTITY torsettings.bridgeHelpTitle "Palīdzība par tiltu retranslatoriem">
-<!ENTITY torsettings.bridgeHelp1 "Bridges are unlisted relays that make it more difficult to block connections to the Tor Network.  Each type of bridge uses a different method to avoid censorship.  The obfs ones make your traffic look like random noise, and the meek ones make your traffic look like it's connecting to that service instead of Tor.">
-<!ENTITY torsettings.bridgeHelp2 "Because of how certain countries try to block Tor, certain bridges work in certain countries but not others.  If you are unsure about which bridges work in your country, visit torproject.org/about/contact.html#support">
+<!ENTITY torsettings.bridgeHelp1 "Tilti ir neuzskaitīti pārraidītāji, kas padara sareģītāku savienojumu bloķēšanu ar tīklu Tor. Katrs tiltu veids lieto citu cenzūras apiešanas metodi. obfs jeb maskējošie padara Jūsu datu plūsmu līdzīgu nejaušam troksnim, bet meek jeb pielaidīgie padara Jūsu datu plūsmu līdzīgu tādai, kas pievienojas attiecīgajam pkalpojumam nevis Tor.">
+<!ENTITY torsettings.bridgeHelp2 "Tā kā dažās valstīs cenšas atšķirīgi bloķēt tīklu Tor, daži tilti strādā vienās valstīs, bet nestrādā citās. Ja neesat pārliecināts, par to, kuri tilti strādā Jūsu valstī, skatiet torproject.org/about/contact.html#support">
<!-- Progress -->
-<!ENTITY torprogress.pleaseWait "Please wait while we establish a connection to the Tor network.  This may take several minutes.">
+<!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.">
diff --git a/src/chrome/locale/lv/torlauncher.properties b/src/chrome/locale/lv/torlauncher.properties
index 1842243..92bd1ef 100644
--- a/src/chrome/locale/lv/torlauncher.properties
+++ b/src/chrome/locale/lv/torlauncher.properties
@@ -28,8 +28,8 @@ torlauncher.error_bridges_missing=Jums jānorāda viens vai vairāki tilti.
torlauncher.error_default_bridges_type_missing=Jums piedāvātajiem tiltiem jāizvēlas transporta veids.
torlauncher.error_bridge_bad_default_type=Nav piedāvātu tiltu ar transporta veidu %S . Lūdzu, koriģējiet uzstadījumus.
-torlauncher.bridge_suffix.meek-amazon=(works in China)
-torlauncher.bridge_suffix.meek-azure=(works in China)
+torlauncher.bridge_suffix.meek-amazon=(strādā Ķīnā)
+torlauncher.bridge_suffix.meek-azure=(strādā Ķīnā)
torlauncher.connect=Veidot savienojumu
torlauncher.restart_tor=Restartēt Tor
diff --git a/src/chrome/locale/mk/network-settings.dtd b/src/chrome/locale/mk/network-settings.dtd
index 469c62a..be1db8c 100644
--- a/src/chrome/locale/mk/network-settings.dtd
+++ b/src/chrome/locale/mk/network-settings.dtd
@@ -1,18 +1,18 @@
<!ENTITY torsettings.dialog.title "Tor мрежни поставки">
<!ENTITY torsettings.wizard.title.default "Поврзи се на Tor">
<!ENTITY torsettings.wizard.title.configure "Tor мрежни поставки">
-<!ENTITY torsettings.wizard.title.connecting "Воспоставување на врска">
+<!ENTITY torsettings.wizard.title.connecting "Воспоставување на конекција">
<!-- For locale picker: -->
-<!ENTITY torlauncher.localePicker.title "Tor Прелистувач јазик">
+<!ENTITY torlauncher.localePicker.title "Tor Browser јазик">
<!ENTITY torlauncher.localePicker.prompt "Одберете јазик.">
<!-- For "first run" wizard: -->
-<!ENTITY torSettings.connectPrompt "Кликнете "Поврзи" да се поврзете на Tor.">
+<!ENTITY torSettings.connectPrompt "Кликнете "Конектирај" да се конектирате на Tor.">
<!ENTITY torSettings.configurePrompt "Кликни на "Постави" да ги поставите мрежните поставки ако сте во земја која го цензурира Tor (како Египет, Кина, Турција) или ако се поврзувате од приватна мрежа која бара прокси.">
<!ENTITY torSettings.configure "Постави">
-<!ENTITY torSettings.connect "Поврзи">
+<!ENTITY torSettings.connect "Конектирај">
<!-- Other: -->
@@ -21,7 +21,7 @@
<!ENTITY torsettings.reconfigTor "Промени поставки">
<!ENTITY torsettings.discardSettings.prompt "Имате поставено Tor мостови или имате внесено локални прокси поставки.  Директно да се поврзете на Tor мрежата, овие поставки мораат да бидат избришани.">
-<!ENTITY torsettings.discardSettings.proceed "Избриши ги поставките и Поврзи се">
+<!ENTITY torsettings.discardSettings.proceed "Избриши ги поставките и конектирај се">
<!ENTITY torsettings.optional "Опционално">
@@ -36,22 +36,22 @@
<!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 "Овој компјутер оди преку огнен ѕид кој дозволува конекции до одредени порти">
+<!ENTITY torsettings.firewall.checkbox "Овој компјутер оди преку заштитен ѕид кој дозволува конекции до одредени порти">
<!ENTITY torsettings.firewall.allowedPorts "Дозволени порти:">
<!ENTITY torsettings.useBridges.checkbox "Tor е цензуриран во мојата држава">
<!ENTITY torsettings.useBridges.default "Одбери вграден мост">
-<!ENTITY torsettings.useBridges.default.placeholder "селектирај мост">
+<!ENTITY torsettings.useBridges.default.placeholder "одбери мост">
<!ENTITY torsettings.useBridges.custom "Обезбеди мост кој го знам">
<!ENTITY torsettings.useBridges.label "Внесете информации за мост од доверлив извор.">
<!ENTITY torsettings.useBridges.placeholder "внеси адреса:порта (по една во секој ред)">
-<!ENTITY torsettings.copyLog "Внеси го Tor логот за залепување">
+<!ENTITY torsettings.copyLog "Копирај го Tor логот за залепување">
<!ENTITY torsettings.proxyHelpTitle "Прокси помош">
-<!ENTITY torsettings.proxyHelp1 "Локален прокси е потребен кога се приклучувате преку компанија, училиште, или универзитетска морежа.  Ако не сте сигурни како да одговорите на ова прашање, погледнете во Интернет поставките во друг Интернет прелистувач или проверете ги вашите системски мрежни поставки да видите дали е потребен прокси.">
+<!ENTITY torsettings.proxyHelp1 "Локален прокси е потребен кога се приклучувате преку компанија, училиште, или универзитетска мрежа.  Ако не сте сигурни како да одговорите на ова прашање, погледнете во Интернет поставките во друг Интернет прелистувач или проверете ги вашите системски мрежни поставки да видите дали е потребен прокси.">
<!ENTITY torsettings.bridgeHelpTitle "Мост јазол помош">
-<!ENTITY torsettings.bridgeHelp1 "Мостовите се инеизлистани јазли кои го прават потешко блокирањето на врските кон Tor мрежата.  Секој тип на мост користи различен метод за избегнување на цензурирањето.  obfs мостот го прави протокот на информации да изгледа нормален, како од е од некој стандарден прелистувач наместо од Tor.">
+<!ENTITY torsettings.bridgeHelp1 "Мостовите се неизлистани јазли кои го прават потешко блокирањето на врските кон Tor мрежата.  Секој тип на мост користи различен метод за избегнување на цензурирањето.  obfs мостот го прави протокот на информации да изгледа нормален, како да е од некој стандарден прелистувач наместо од Tor.">
<!ENTITY torsettings.bridgeHelp2 "Поради колку конкретно државите се обидуваат да го блокираат Tor, конкретни мостови работат во едни конкретни држави но не и во други.  Ако не си сигурен кои мостови работат во твојата држава, посети torproject.org/about/contact.html#support">
<!-- Progress -->
diff --git a/src/chrome/locale/mk/torlauncher.properties b/src/chrome/locale/mk/torlauncher.properties
index 14b0309..e38b570 100644
--- a/src/chrome/locale/mk/torlauncher.properties
+++ b/src/chrome/locale/mk/torlauncher.properties
@@ -3,62 +3,62 @@
torlauncher.error_title=Tor стартувач
-torlauncher.tor_exited_during_startup=Tor се исклучи за време на вклучувањето. Ова може да е поради грашка во вашата torrc датотека, грешка во Tor или друга програма во вашиот систем, или проблем со хардеверот. Додека не го поправите проблемот кој го предизвикува ова, и повторно не го вклучите Tor, Tor прелистувачот нема да се стартува.
-torlauncher.tor_exited=Tor неочекувано се исклучи. Ова може да е до грешка во самиот Tor, друга програма во системот, или проблем со харверот. Додека повторно го стартувате Tor, Tor прелистувачот нема да може да ја отвори било која веб страна. Ако проблемот остане, ве молиме испратете копија од вашиот Tor лог на тимот за поддршка.
+torlauncher.tor_exited_during_startup=Tor се исклучи за време на вклучувањето. Ова може да е поради грашка во вашата torrc датотека, грешка во Tor или друга програма во вашиот систем, или проблем со хардеверот. Додека не го поправите проблемот кој го предизвикува ова, и повторно не го вклучите Tor, Tor Browser нема да се стартува.
+torlauncher.tor_exited=Tor неочекувано се исклучи. Ова може да е до грешка во самиот Tor, друга програма во системот, или проблем со хардверот. Додека повторно го стартувате Tor, Tor Browser нема да може да ја отвори било која веб страна. Ако проблемот остане, ве молиме испратете копија од вашиот Tor лог на тимот за поддршка.
torlauncher.tor_exited2=Повротното старување на Tor нема да ви ги затвори табовите во вашиот прелистувач.
-torlauncher.tor_controlconn_failed=Не може да се поврзе на Tor контролната порта.
+torlauncher.tor_controlconn_failed=Не може да се конектира на Tor контролната порта.
torlauncher.tor_failed_to_start=Tor не успеа да се стартува.
torlauncher.tor_control_failed=Не успеа да преземе контрола врз Tor.
-torlauncher.tor_bootstrap_failed=Tor не успеа да воспостави врска со Tor мрежата.
+torlauncher.tor_bootstrap_failed=Tor не успеа да воспостави конекција со Tor мрежата.
torlauncher.tor_bootstrap_failed_details=%1$S не успеаа (%2$S).
-torlauncher.unable_to_start_tor=Невозможно да се стартува Tor.\n\n%S
+torlauncher.unable_to_start_tor=Не може да се стартува Tor.\n\n%S
torlauncher.tor_missing=Извршната датотека на Tor недостасува.
torlauncher.torrc_missing=torrc датотеката недостасува и не може да биде создадена.
torlauncher.datadir_missing=Tor податочниот директориум не постои и не може да биде создаден.
-torlauncher.password_hash_missing=Не успеа да добие хаш-лозинка.
+torlauncher.password_hash_missing=Неуспешно добивање на хаш-лозинка.
torlauncher.failed_to_get_settings=Невозможно е да се добијат Tor поставки.\n\n%S
torlauncher.failed_to_save_settings=Невозможно е да се зачуваат Tor поставките.\n\n%S
-torlauncher.ensure_tor_is_running=Проверете дека Tor не е вклучен.
+torlauncher.ensure_tor_is_running=Проверете дали Tor е вклучен.
torlauncher.error_proxy_addr_missing=Мора да ги посочите и IP адресите или хостовите и бројот на портата за да го поставите Tor да користи прокси за пристап на Интернет.
torlauncher.error_proxy_type_missing=Морате да одберете тип на прокси.
torlauncher.error_bridges_missing=Морате да одберете еден или повеќе мостови.
torlauncher.error_default_bridges_type_missing=Мора да одберете тип на транспорт за обезбедените мостови.
-torlauncher.error_bridge_bad_default_type=Нема обезбедени мостови кои го имаат типот на транспорт %S достапни. Нагодете ги вашите поставки.
+torlauncher.error_bridge_bad_default_type=Нема обезбедени мостови кои го имаат типот на транспорт %S а се достапни. Прилагодете ги вашите поставки.
torlauncher.bridge_suffix.meek-amazon=(работи во Кина)
torlauncher.bridge_suffix.meek-azure=(работи во Кина)
-torlauncher.connect=Поврзи
+torlauncher.connect=Конектирај
torlauncher.restart_tor=Повторно стартување на Tor
-torlauncher.quit=Откажи
+torlauncher.quit=Прекини
torlauncher.quit_win=Излез
torlauncher.done=Завршено
torlauncher.forAssistance=За асистенција, контактирајте %S
torlauncher.forAssistance2=За помош, посетете %S
-torlauncher.copiedNLogMessages=Копирај комплетно. %S Tor лог пораките се подготвени да бидат залепени во уредувач на текст или во порака за е-пошта.
+torlauncher.copiedNLogMessages=Копирањето е завршено. %S Tor лог пораките се подготвени да бидат залепени во уредувач на текст или во порака за е-пошта.
-torlauncher.bootstrapStatus.conn_dir=Поврзи се на јазол директориум
-torlauncher.bootstrapStatus.handshake_dir=Воспостави енкриптирана врска со директориумот
+torlauncher.bootstrapStatus.conn_dir=Конектирање на јазол директориум
+torlauncher.bootstrapStatus.handshake_dir=Воспоставување енкриптирана конекција со директориумот
torlauncher.bootstrapStatus.requesting_status=Добивање на мрежен статус
torlauncher.bootstrapStatus.loading_status=Вчитување на мрежен статус
torlauncher.bootstrapStatus.loading_keys=Вчитување на авторитетски сертификати
torlauncher.bootstrapStatus.requesting_descriptors=Барање на информации за јазол
torlauncher.bootstrapStatus.loading_descriptors=Вчитување на информации за јазол
-torlauncher.bootstrapStatus.conn_or=Поврзување на Тор мрежата
+torlauncher.bootstrapStatus.conn_or=Конектирање на Tor мрежата
torlauncher.bootstrapStatus.handshake_or=Воспоставување на Tor круг
-torlauncher.bootstrapStatus.done=Поврзан на Tor мрежата.
+torlauncher.bootstrapStatus.done=Конектирани сте на Tor мрежата!
torlauncher.bootstrapWarning.done=завршено
-torlauncher.bootstrapWarning.connectrefused=врската е одбиена
+torlauncher.bootstrapWarning.connectrefused=конекцијата е одбиена
torlauncher.bootstrapWarning.misc=разно
torlauncher.bootstrapWarning.resourcelimit=недоволни ресурси
torlauncher.bootstrapWarning.identity=идентитетско несогласување
-torlauncher.bootstrapWarning.timeout=времето за врска истече
+torlauncher.bootstrapWarning.timeout=времето за конекција истече
torlauncher.bootstrapWarning.noroute=нема рута до хост
-torlauncher.bootstrapWarning.ioerror=грешка при читајње/запишување
-torlauncher.bootstrapWarning.pt_missing=недостасува вклучувакчи транспорт
+torlauncher.bootstrapWarning.ioerror=грешка при читање/запишување
+torlauncher.bootstrapWarning.pt_missing=недостасува pluggable transport
diff --git a/src/chrome/locale/ms-MY/torlauncher.properties b/src/chrome/locale/ms-MY/torlauncher.properties
index 786a165..735c135 100644
--- a/src/chrome/locale/ms-MY/torlauncher.properties
+++ b/src/chrome/locale/ms-MY/torlauncher.properties
@@ -3,9 +3,9 @@
torlauncher.error_title=Pelancar Tor
-torlauncher.tor_exited_during_startup=Tor exited during startup. This might be due to an error in your torrc file, a bug in Tor or another program on your system, or faulty hardware. Until you fix the underlying problem and restart Tor, Tor Browser will not start.
-torlauncher.tor_exited=Tor unexpectedly exited. This might be due to a bug in Tor itself, another program on your system, or faulty hardware. Until you restart Tor, the Tor Browser will not able to reach any websites. If the problem persists, please send a copy of your Tor Log to the support team.
-torlauncher.tor_exited2=Restarting Tor will not close your browser tabs.
+torlauncher.tor_exited_during_startup=Tor tertutup ketika permulaan. Ia berkemungkinan dari ralat dalam fail torrc, pepijat dalam Tor atau berpunca dari lain-lain program dalam sistem anda, atau perkakasan bermasalah. Sehinggalah anda membaiki masalah tersebut dan mulakan semula Tor, Pelayar Tor tidak dapat dimulakan.
+torlauncher.tor_exited=Tor keluar secara tidak dijangka. Ia berkemungkinan dari pepijat yang wujud di dalam Tor, berpunca dari lain-lain program dalam sistem anda, atau perkakasan bermasalah. Sehinggalah anda mulakan semula Tor, Pelayar Tor tidak dapat mencapai mana-mana laman sesawang. Jika masalah masih berlanjutan, sila hantar satu salinan Log Tor kepada pasukan sokongan.
+torlauncher.tor_exited2=Memulakan semula Tor tidak akan menutup tab pelayar anda.
torlauncher.tor_controlconn_failed=Tidak dapat menyambung ke port kawalan Tor.
torlauncher.tor_failed_to_start=Tor gagal untuk bermula.
torlauncher.tor_control_failed=Gagal mengambil alih Tor.
@@ -26,7 +26,7 @@ torlauncher.error_proxy_addr_missing=Anda mesti nyatakan kedua-dua alamat IP ata
torlauncher.error_proxy_type_missing=Anda mesti pilih jenis proksi.
torlauncher.error_bridges_missing=Anda mesti nyatakan satu atau lebih titi.
torlauncher.error_default_bridges_type_missing=Anda mesti pilih jenis angkutan untuk titi yang disediakan.
-torlauncher.error_bridge_bad_default_type=No provided bridges that have the transport type %S are available. Please adjust your settings.
+torlauncher.error_bridge_bad_default_type=Tiada titi disediakan yang mempunyai jenis angkutan %S tersedia. Sila laras tetapan anda.
torlauncher.bridge_suffix.meek-amazon=(berfungsi di China)
torlauncher.bridge_suffix.meek-azure=(berfungsi di China)
@@ -40,7 +40,7 @@ torlauncher.done=Selesai
torlauncher.forAssistance=Untuk bantuan, hubungi %S
torlauncher.forAssistance2=Untuk dapatkan bantuan, lawati %S
-torlauncher.copiedNLogMessages=Copy complete. %S Tor log messages are ready to be pasted into a text editor or an email message.
+torlauncher.copiedNLogMessages=Salin selesai. %S mesej log Tor sedia ditampal ke dalam penyunting teks atau mesej emel.
torlauncher.bootstrapStatus.conn_dir=Menyambung dengan direktori geganti
torlauncher.bootstrapStatus.handshake_dir=Menjalinkan sambungan direktori tersulit
diff --git a/src/chrome/locale/nb/network-settings.dtd b/src/chrome/locale/nb/network-settings.dtd
index 24649f9..b59c660 100644
--- a/src/chrome/locale/nb/network-settings.dtd
+++ b/src/chrome/locale/nb/network-settings.dtd
@@ -45,7 +45,7 @@
<!ENTITY torsettings.useBridges.label "Skriv inn broinformasjon fra en betrodd kilde.">
<!ENTITY torsettings.useBridges.placeholder "type addresse:port (én per linje)">
-<!ENTITY torsettings.copyLog "Kopier Torloggen til Utklippstavlen">
+<!ENTITY torsettings.copyLog "Kopier Tor-loggen til utklippstavlen">
<!ENTITY torsettings.proxyHelpTitle "Mellomtjenerhjelp">
<!ENTITY torsettings.proxyHelp1 "En lokal mellomtjener trengs når du kobler til fra et bedrifts-, skole-, eller universitets-nettverk. Hvis du ikke er sikker på hvordan du besvarer dette spørsmålet, sjekk internettinnstillingene i en annen nettleser, eller sjekk nettverksinnstillingene på systemet ditt for å se hvorvidt en mellomtjener behøves.">
diff --git a/src/chrome/locale/nl-BE/network-settings.dtd b/src/chrome/locale/nl-BE/network-settings.dtd
index 131f73a..64e470c 100644
--- a/src/chrome/locale/nl-BE/network-settings.dtd
+++ b/src/chrome/locale/nl-BE/network-settings.dtd
@@ -1,6 +1,6 @@
<!ENTITY torsettings.dialog.title "Tor Netwerk Instellingen">
<!ENTITY torsettings.wizard.title.default "Connect to Tor">
-<!ENTITY torsettings.wizard.title.configure "Tor Network Settings">
+<!ENTITY torsettings.wizard.title.configure "Tor Netwerk Instellingen">
<!ENTITY torsettings.wizard.title.connecting "Establishing a Connection">
<!-- For locale picker: -->
@@ -55,4 +55,5 @@
<!ENTITY torsettings.bridgeHelp2 "Because of how certain countries try to block Tor, certain bridges work in certain countries but not others.  If you are unsure about which bridges work in your country, visit torproject.org/about/contact.html#support">
<!-- Progress -->
-<!ENTITY torprogress.pleaseWait "Please wait while we establish a connection to the Tor network.  This may take several minutes.">
+<!ENTITY torprogress.pleaseWait "Even geduld terwijl we verbinding maken met het Tor netwerk. 
+Dit kan enkele minuten duren.">
diff --git a/src/chrome/locale/nn/network-settings.dtd b/src/chrome/locale/nn/network-settings.dtd
index 27bf639..3b705be 100644
--- a/src/chrome/locale/nn/network-settings.dtd
+++ b/src/chrome/locale/nn/network-settings.dtd
@@ -1,6 +1,6 @@
<!ENTITY torsettings.dialog.title "Tor nettverksinnstillingar">
<!ENTITY torsettings.wizard.title.default "Connect to Tor">
-<!ENTITY torsettings.wizard.title.configure "Tor Network Settings">
+<!ENTITY torsettings.wizard.title.configure "Tor nettverksinnstillingar">
<!ENTITY torsettings.wizard.title.connecting "Establishing a Connection">
<!-- For locale picker: -->
diff --git a/src/chrome/locale/pa/network-settings.dtd b/src/chrome/locale/pa/network-settings.dtd
index 013a7e4..7773e7b 100644
--- a/src/chrome/locale/pa/network-settings.dtd
+++ b/src/chrome/locale/pa/network-settings.dtd
@@ -1,6 +1,6 @@
<!ENTITY torsettings.dialog.title "ਟੋਰ ਨੈੱਟਵਰਕ ਸੈਟਿੰਗ">
<!ENTITY torsettings.wizard.title.default "Connect to Tor">
-<!ENTITY torsettings.wizard.title.configure "Tor Network Settings">
+<!ENTITY torsettings.wizard.title.configure "ਟੋਰ ਨੈੱਟਵਰਕ ਸੈਟਿੰਗ">
<!ENTITY torsettings.wizard.title.connecting "Establishing a Connection">
<!-- For locale picker: -->
diff --git a/src/chrome/locale/pl/network-settings.dtd b/src/chrome/locale/pl/network-settings.dtd
index 90525cc..fd9b9d2 100644
--- a/src/chrome/locale/pl/network-settings.dtd
+++ b/src/chrome/locale/pl/network-settings.dtd
@@ -1,6 +1,6 @@
<!ENTITY torsettings.dialog.title "Ustawienia Sieci">
-<!ENTITY torsettings.wizard.title.default "Connect to Tor">
-<!ENTITY torsettings.wizard.title.configure "Tor Network Settings">
+<!ENTITY torsettings.wizard.title.default "Połącz z siecią Tor">
+<!ENTITY torsettings.wizard.title.configure "Ustawienia Sieci">
<!ENTITY torsettings.wizard.title.connecting "Establishing a Connection">
<!-- For locale picker: -->
@@ -55,4 +55,4 @@
<!ENTITY torsettings.bridgeHelp2 "Because of how certain countries try to block Tor, certain bridges work in certain countries but not others.  If you are unsure about which bridges work in your country, visit torproject.org/about/contact.html#support">
<!-- Progress -->
-<!ENTITY torprogress.pleaseWait "Please wait while we establish a connection to the Tor network.  This may take several minutes.">
+<!ENTITY torprogress.pleaseWait "Proszę zaczekać, aż ustanowimy połączenie do sieci Tor.  To może zająć kilka minut.">
diff --git a/src/chrome/locale/pt/network-settings.dtd b/src/chrome/locale/pt/network-settings.dtd
index 1dcd596..d878041 100644
--- a/src/chrome/locale/pt/network-settings.dtd
+++ b/src/chrome/locale/pt/network-settings.dtd
@@ -9,7 +9,7 @@
<!-- For "first run" wizard: -->
-<!ENTITY torSettings.connectPrompt "Clique em 'Ligar' para se ligar ao Tor.">
+<!ENTITY torSettings.connectPrompt "Clique em 'Ligar' para ligar ao Tor.">
<!ENTITY torSettings.configurePrompt "Click “Configure” to adjust network settings if you are in a country that censors Tor (such as Egypt, China, Turkey) or if you are connecting from a private network that requires a proxy.">
<!ENTITY torSettings.configure "Configurar">
<!ENTITY torSettings.connect "Ligar">
@@ -40,10 +40,10 @@
<!ENTITY torsettings.firewall.allowedPorts "Portas permitidas:">
<!ENTITY torsettings.useBridges.checkbox "Tor é censurado no meu país">
<!ENTITY torsettings.useBridges.default "Select a built-in bridge">
-<!ENTITY torsettings.useBridges.default.placeholder "select a bridge">
-<!ENTITY torsettings.useBridges.custom "Provide a bridge I know">
-<!ENTITY torsettings.useBridges.label "Enter bridge information from a trusted source.">
-<!ENTITY torsettings.useBridges.placeholder "type address:port (one per line)">
+<!ENTITY torsettings.useBridges.default.placeholder "selecionar uma ponte">
+<!ENTITY torsettings.useBridges.custom "Fornecer uma ponte que eu conheça">
+<!ENTITY torsettings.useBridges.label "Inserir a informação de ponte de uma fonte confiável">
+<!ENTITY torsettings.useBridges.placeholder "digite address:port (uma por linha)">
<!ENTITY torsettings.copyLog "Copiar o Registo do Tor para a Área de Transferência">
@@ -55,4 +55,4 @@
<!ENTITY torsettings.bridgeHelp2 "Because of how certain countries try to block Tor, certain bridges work in certain countries but not others.  If you are unsure about which bridges work in your country, visit torproject.org/about/contact.html#support">
<!-- Progress -->
-<!ENTITY torprogress.pleaseWait "Please wait while we establish a connection to the Tor network.  This may take several minutes.">
+<!ENTITY torprogress.pleaseWait "Por favor, aguarde, enquanto nós estabelecemos uma ligação à rede Tor.  Isto pode demorar alguns minutos.">
diff --git a/src/chrome/locale/pt/torlauncher.properties b/src/chrome/locale/pt/torlauncher.properties
index e03a55a..ce9f985 100644
--- a/src/chrome/locale/pt/torlauncher.properties
+++ b/src/chrome/locale/pt/torlauncher.properties
@@ -14,9 +14,9 @@ torlauncher.tor_bootstrap_failed_details=%1$S falhou (%2$S).
torlauncher.unable_to_start_tor=Não é possível iniciar o Tor.\n\n %S
torlauncher.tor_missing=O executável do Tor está em falta.
-torlauncher.torrc_missing=O ficheiro torc não existe e não pode ser criado.
-torlauncher.datadir_missing=O diretório de dados Tor não existe e não pode ser criado.
-torlauncher.password_hash_missing=Não foi possível obter a senha "hashed".
+torlauncher.torrc_missing=O ficheiro torc está em falta e não foi possível criá-lo.
+torlauncher.datadir_missing=A diretoria de dados Tor não existe e não foi possível criá-la.
+torlauncher.password_hash_missing=Não foi possível obter a palavra-passe "hashed".
torlauncher.failed_to_get_settings=Não é possível obter as configurações do Tor\n\n %S
torlauncher.failed_to_save_settings=Não é possível guardar as configurações do Tor\n\n %S
@@ -28,8 +28,8 @@ torlauncher.error_bridges_missing=Deve especificar uma ou mais pontes.
torlauncher.error_default_bridges_type_missing=Deve selecionar o tipo de transporte para as pontes fornecidas
torlauncher.error_bridge_bad_default_type=Não estão disponíveis as pontes fornecidas que têm o tipo de transporte %S. Por favor, ajuste as suas configurações.
-torlauncher.bridge_suffix.meek-amazon=(works in China)
-torlauncher.bridge_suffix.meek-azure=(works in China)
+torlauncher.bridge_suffix.meek-amazon=(funciona na China)
+torlauncher.bridge_suffix.meek-azure=(funciona na China)
torlauncher.connect=Ligar
torlauncher.restart_tor=Reiniciar o Tor
@@ -42,7 +42,7 @@ torlauncher.forAssistance2=Para assistência, visite %S
torlauncher.copiedNLogMessages=Cópia completa. Estão prontas %S mensagens do registo de eventos do Tor para serem coladas num editor de texto ou numa mensagem de correio eletrónico.
-torlauncher.bootstrapStatus.conn_dir=A ligar ao diretório do retransmissor
+torlauncher.bootstrapStatus.conn_dir=A ligar à diretoria do retransmissor
torlauncher.bootstrapStatus.handshake_dir=A estabelecer uma ligação de diretoria encriptada
torlauncher.bootstrapStatus.requesting_status=A obter o estado da rede
torlauncher.bootstrapStatus.loading_status=A carregar o estado da rede
diff --git a/src/chrome/locale/si-LK/network-settings.dtd b/src/chrome/locale/si-LK/network-settings.dtd
index de53883..845e336 100644
--- a/src/chrome/locale/si-LK/network-settings.dtd
+++ b/src/chrome/locale/si-LK/network-settings.dtd
@@ -1,6 +1,6 @@
<!ENTITY torsettings.dialog.title "TOR ජාල සිටුවම්">
<!ENTITY torsettings.wizard.title.default "Connect to Tor">
-<!ENTITY torsettings.wizard.title.configure "Tor Network Settings">
+<!ENTITY torsettings.wizard.title.configure "TOR ජාල සිටුවම්">
<!ENTITY torsettings.wizard.title.connecting "Establishing a Connection">
<!-- For locale picker: -->
diff --git a/src/chrome/locale/sk-SK/network-settings.dtd b/src/chrome/locale/sk-SK/network-settings.dtd
index c30729a..e78222d 100644
--- a/src/chrome/locale/sk-SK/network-settings.dtd
+++ b/src/chrome/locale/sk-SK/network-settings.dtd
@@ -1,6 +1,6 @@
<!ENTITY torsettings.dialog.title "Nastavenia Tor Network">
<!ENTITY torsettings.wizard.title.default "Connect to Tor">
-<!ENTITY torsettings.wizard.title.configure "Tor Network Settings">
+<!ENTITY torsettings.wizard.title.configure "Nastavenia Tor Network">
<!ENTITY torsettings.wizard.title.connecting "Establishing a Connection">
<!-- For locale picker: -->
@@ -55,4 +55,4 @@
<!ENTITY torsettings.bridgeHelp2 "Because of how certain countries try to block Tor, certain bridges work in certain countries but not others.  If you are unsure about which bridges work in your country, visit torproject.org/about/contact.html#support">
<!-- Progress -->
-<!ENTITY torprogress.pleaseWait "Please wait while we establish a connection to the Tor network.  This may take several minutes.">
+<!ENTITY torprogress.pleaseWait "Prosím počkajte na vytvorenie pripojenia do siete Tor.  Môže to trvať niekoľko minút. ">
diff --git a/src/chrome/locale/sk/network-settings.dtd b/src/chrome/locale/sk/network-settings.dtd
index 9b8915e..bfb37bd 100644
--- a/src/chrome/locale/sk/network-settings.dtd
+++ b/src/chrome/locale/sk/network-settings.dtd
@@ -1,6 +1,6 @@
<!ENTITY torsettings.dialog.title "Sieťové Nastavenia Tor">
<!ENTITY torsettings.wizard.title.default "Connect to Tor">
-<!ENTITY torsettings.wizard.title.configure "Tor Network Settings">
+<!ENTITY torsettings.wizard.title.configure "Sieťové Nastavenia Tor">
<!ENTITY torsettings.wizard.title.connecting "Establishing a Connection">
<!-- For locale picker: -->
diff --git a/src/chrome/locale/sl-SI/network-settings.dtd b/src/chrome/locale/sl-SI/network-settings.dtd
index 46f1692..c6d17f7 100644
--- a/src/chrome/locale/sl-SI/network-settings.dtd
+++ b/src/chrome/locale/sl-SI/network-settings.dtd
@@ -1,6 +1,6 @@
<!ENTITY torsettings.dialog.title "Tor mrežne nastavitve">
<!ENTITY torsettings.wizard.title.default "Connect to Tor">
-<!ENTITY torsettings.wizard.title.configure "Tor Network Settings">
+<!ENTITY torsettings.wizard.title.configure "Tor mrežne nastavitve">
<!ENTITY torsettings.wizard.title.connecting "Establishing a Connection">
<!-- For locale picker: -->
diff --git a/src/chrome/locale/sl/network-settings.dtd b/src/chrome/locale/sl/network-settings.dtd
index 6882de9..cee7974 100644
--- a/src/chrome/locale/sl/network-settings.dtd
+++ b/src/chrome/locale/sl/network-settings.dtd
@@ -11,7 +11,7 @@
<!ENTITY torSettings.connectPrompt "Click “Connect” to connect to Tor.">
<!ENTITY torSettings.configurePrompt "Click “Configure” to adjust network settings if you are in a country that censors Tor (such as Egypt, China, Turkey) or if you are connecting from a private network that requires a proxy.">
-<!ENTITY torSettings.configure "Configure">
+<!ENTITY torSettings.configure "Nastavi">
<!ENTITY torSettings.connect "Poveži">
<!-- Other: -->
diff --git a/src/chrome/locale/sn/torlauncher.properties b/src/chrome/locale/sn/torlauncher.properties
index 7eac413..1c78ab8 100644
--- a/src/chrome/locale/sn/torlauncher.properties
+++ b/src/chrome/locale/sn/torlauncher.properties
@@ -33,7 +33,7 @@ torlauncher.bridge_suffix.meek-azure=(works in China)
torlauncher.connect=Connect
torlauncher.restart_tor=Restart Tor
-torlauncher.quit=Quit
+torlauncher.quit=Regedza
torlauncher.quit_win=Buda
torlauncher.done=Done
diff --git a/src/chrome/locale/sq/network-settings.dtd b/src/chrome/locale/sq/network-settings.dtd
index 94161ad..fe5a5e5 100644
--- a/src/chrome/locale/sq/network-settings.dtd
+++ b/src/chrome/locale/sq/network-settings.dtd
@@ -1,6 +1,6 @@
<!ENTITY torsettings.dialog.title "Konfigurimi i Rrjetit të Tor">
<!ENTITY torsettings.wizard.title.default "Connect to Tor">
-<!ENTITY torsettings.wizard.title.configure "Tor Network Settings">
+<!ENTITY torsettings.wizard.title.configure "Konfigurimi i Rrjetit të Tor">
<!ENTITY torsettings.wizard.title.connecting "Establishing a Connection">
<!-- For locale picker: -->
@@ -55,4 +55,4 @@
<!ENTITY torsettings.bridgeHelp2 "Because of how certain countries try to block Tor, certain bridges work in certain countries but not others.  If you are unsure about which bridges work in your country, visit torproject.org/about/contact.html#support">
<!-- Progress -->
-<!ENTITY torprogress.pleaseWait "Please wait while we establish a connection to the Tor network.  This may take several minutes.">
+<!ENTITY torprogress.pleaseWait "Ju lutemi prisni derisa të vendosim një lidhje me rrjetin e Tor.  Kjo mund të kërkojë disa minuta.">
diff --git a/src/chrome/locale/sr/network-settings.dtd b/src/chrome/locale/sr/network-settings.dtd
index c3dc007..2f1389e 100644
--- a/src/chrome/locale/sr/network-settings.dtd
+++ b/src/chrome/locale/sr/network-settings.dtd
@@ -1,6 +1,6 @@
<!ENTITY torsettings.dialog.title "Подешавања Тор мреже">
<!ENTITY torsettings.wizard.title.default "Connect to Tor">
-<!ENTITY torsettings.wizard.title.configure "Tor Network Settings">
+<!ENTITY torsettings.wizard.title.configure "Подешавања Тор мреже">
<!ENTITY torsettings.wizard.title.connecting "Establishing a Connection">
<!-- For locale picker: -->
diff --git a/src/chrome/locale/sr(a)latin/network-settings.dtd b/src/chrome/locale/sr(a)latin/network-settings.dtd
index 54ebf72..b3a6ce4 100644
--- a/src/chrome/locale/sr(a)latin/network-settings.dtd
+++ b/src/chrome/locale/sr(a)latin/network-settings.dtd
@@ -1,6 +1,6 @@
<!ENTITY torsettings.dialog.title "Podešavanja Tor mreže">
<!ENTITY torsettings.wizard.title.default "Connect to Tor">
-<!ENTITY torsettings.wizard.title.configure "Tor Network Settings">
+<!ENTITY torsettings.wizard.title.configure "Podešavanja Tor mreže">
<!ENTITY torsettings.wizard.title.connecting "Establishing a Connection">
<!-- For locale picker: -->
diff --git a/src/chrome/locale/ta/network-settings.dtd b/src/chrome/locale/ta/network-settings.dtd
index 32ac0ab..59429c6 100644
--- a/src/chrome/locale/ta/network-settings.dtd
+++ b/src/chrome/locale/ta/network-settings.dtd
@@ -1,6 +1,6 @@
<!ENTITY torsettings.dialog.title "Tor நெட்வொர்க் அமைப்புகள்">
<!ENTITY torsettings.wizard.title.default "Connect to Tor">
-<!ENTITY torsettings.wizard.title.configure "Tor Network Settings">
+<!ENTITY torsettings.wizard.title.configure "Tor நெட்வொர்க் அமைப்புகள்">
<!ENTITY torsettings.wizard.title.connecting "Establishing a Connection">
<!-- For locale picker: -->
@@ -55,4 +55,5 @@
<!ENTITY torsettings.bridgeHelp2 "Because of how certain countries try to block Tor, certain bridges work in certain countries but not others.  If you are unsure about which bridges work in your country, visit torproject.org/about/contact.html#support">
<!-- Progress -->
-<!ENTITY torprogress.pleaseWait "Please wait while we establish a connection to the Tor network.  This may take several minutes.">
+<!ENTITY torprogress.pleaseWait "தயவுசெய்து நாங்கள் Tor வலையமைப்புடன் ஒரு இணைப்பு நிறுவும்வரை காத்திருங்கள். 
+இதற்கு பல நிமிடங்கள் ஆகலாம்.">
diff --git a/src/chrome/locale/tg/network-settings.dtd b/src/chrome/locale/tg/network-settings.dtd
index 85645d7..5932fa3 100644
--- a/src/chrome/locale/tg/network-settings.dtd
+++ b/src/chrome/locale/tg/network-settings.dtd
@@ -12,7 +12,7 @@
<!ENTITY torSettings.connectPrompt "Click “Connect” to connect to Tor.">
<!ENTITY torSettings.configurePrompt "Click “Configure” to adjust network settings if you are in a country that censors Tor (such as Egypt, China, Turkey) or if you are connecting from a private network that requires a proxy.">
<!ENTITY torSettings.configure "Configure">
-<!ENTITY torSettings.connect "Connect">
+<!ENTITY torSettings.connect "Пайваст шудан">
<!-- Other: -->
diff --git a/src/chrome/locale/tg/torlauncher.properties b/src/chrome/locale/tg/torlauncher.properties
index 04654b8..a338094 100644
--- a/src/chrome/locale/tg/torlauncher.properties
+++ b/src/chrome/locale/tg/torlauncher.properties
@@ -31,10 +31,10 @@ torlauncher.error_bridge_bad_default_type=No provided bridges that have the tran
torlauncher.bridge_suffix.meek-amazon=(works in China)
torlauncher.bridge_suffix.meek-azure=(works in China)
-torlauncher.connect=Connect
+torlauncher.connect=Пайваст шудан
torlauncher.restart_tor=Restart Tor
-torlauncher.quit=Quit
-torlauncher.quit_win=Exit
+torlauncher.quit=Баромадан
+torlauncher.quit_win=Баромад
torlauncher.done=Иҷро шуд
torlauncher.forAssistance=For assistance, contact %S
diff --git a/src/chrome/locale/th/network-settings.dtd b/src/chrome/locale/th/network-settings.dtd
index 1ad7ebc..2577718 100644
--- a/src/chrome/locale/th/network-settings.dtd
+++ b/src/chrome/locale/th/network-settings.dtd
@@ -1,6 +1,6 @@
<!ENTITY torsettings.dialog.title "ตั้งค่าเครือข่าย Tor">
<!ENTITY torsettings.wizard.title.default "Connect to Tor">
-<!ENTITY torsettings.wizard.title.configure "Tor Network Settings">
+<!ENTITY torsettings.wizard.title.configure "ตั้งค่าเครือข่าย Tor">
<!ENTITY torsettings.wizard.title.connecting "Establishing a Connection">
<!-- For locale picker: -->
diff --git a/src/chrome/locale/ti/torlauncher.properties b/src/chrome/locale/ti/torlauncher.properties
index b09753e..2151003 100644
--- a/src/chrome/locale/ti/torlauncher.properties
+++ b/src/chrome/locale/ti/torlauncher.properties
@@ -33,9 +33,9 @@ torlauncher.bridge_suffix.meek-azure=(works in China)
torlauncher.connect=Connect
torlauncher.restart_tor=Restart Tor
-torlauncher.quit=Quit
-torlauncher.quit_win=Exit
-torlauncher.done=Done
+torlauncher.quit=ኣቋርጽ
+torlauncher.quit_win=ውጻእ
+torlauncher.done=ተዓሚሙ
torlauncher.forAssistance=For assistance, contact %S
torlauncher.forAssistance2=For assistance, visit %S
diff --git a/src/chrome/locale/tk/network-settings.dtd b/src/chrome/locale/tk/network-settings.dtd
index 85645d7..435d022 100644
--- a/src/chrome/locale/tk/network-settings.dtd
+++ b/src/chrome/locale/tk/network-settings.dtd
@@ -12,7 +12,7 @@
<!ENTITY torSettings.connectPrompt "Click “Connect” to connect to Tor.">
<!ENTITY torSettings.configurePrompt "Click “Configure” to adjust network settings if you are in a country that censors Tor (such as Egypt, China, Turkey) or if you are connecting from a private network that requires a proxy.">
<!ENTITY torSettings.configure "Configure">
-<!ENTITY torSettings.connect "Connect">
+<!ENTITY torSettings.connect "Birikdirildi">
<!-- Other: -->
diff --git a/src/chrome/locale/tk/torlauncher.properties b/src/chrome/locale/tk/torlauncher.properties
index b09753e..ee06312 100644
--- a/src/chrome/locale/tk/torlauncher.properties
+++ b/src/chrome/locale/tk/torlauncher.properties
@@ -31,11 +31,11 @@ torlauncher.error_bridge_bad_default_type=No provided bridges that have the tran
torlauncher.bridge_suffix.meek-amazon=(works in China)
torlauncher.bridge_suffix.meek-azure=(works in China)
-torlauncher.connect=Connect
+torlauncher.connect=Birikdirildi
torlauncher.restart_tor=Restart Tor
torlauncher.quit=Quit
-torlauncher.quit_win=Exit
-torlauncher.done=Done
+torlauncher.quit_win=Çykyş
+torlauncher.done=Boldy
torlauncher.forAssistance=For assistance, contact %S
torlauncher.forAssistance2=For assistance, visit %S
diff --git a/src/chrome/locale/uk/network-settings.dtd b/src/chrome/locale/uk/network-settings.dtd
index e282a55..16940b3 100644
--- a/src/chrome/locale/uk/network-settings.dtd
+++ b/src/chrome/locale/uk/network-settings.dtd
@@ -1,7 +1,7 @@
<!ENTITY torsettings.dialog.title "Налаштування мережі Tor">
-<!ENTITY torsettings.wizard.title.default "Connect to Tor">
-<!ENTITY torsettings.wizard.title.configure "Tor Network Settings">
-<!ENTITY torsettings.wizard.title.connecting "Establishing a Connection">
+<!ENTITY torsettings.wizard.title.default "З'єднатися з Tor ">
+<!ENTITY torsettings.wizard.title.configure "Параметри мережі Tor">
+<!ENTITY torsettings.wizard.title.connecting "Встановлення З'єднання">
<!-- For locale picker: -->
<!ENTITY torlauncher.localePicker.title "Мова Tor Browser">
@@ -9,8 +9,8 @@
<!-- For "first run" wizard: -->
-<!ENTITY torSettings.connectPrompt "Click “Connect” to connect to Tor.">
-<!ENTITY torSettings.configurePrompt "Click “Configure” to adjust network settings if you are in a country that censors Tor (such as Egypt, China, Turkey) or if you are connecting from a private network that requires a proxy.">
+<!ENTITY torSettings.connectPrompt "Натисніть кнопку "З'єднати", щоб з'єднатися з Tor.">
+<!ENTITY torSettings.configurePrompt "Натисніть "Налаштувати", щоб налаштувати параметри мережі, якщо ви перебуваєте в країні, яка цензує Tor (наприклад, Єгипет, Китай, Туреччина) або якщо ви з'єднуєтесь з приватної мережі, для якої потрібен проксі-сервер.">
<!ENTITY torSettings.configure "Налаштування">
<!ENTITY torSettings.connect "З'єднатися">
@@ -25,9 +25,9 @@
<!ENTITY torsettings.optional "Додатково">
-<!ENTITY torsettings.useProxy.checkbox "I use a proxy to connect to the Internet">
+<!ENTITY torsettings.useProxy.checkbox "Я використовую проксі для з'єднання з Інтернетом">
<!ENTITY torsettings.useProxy.type "Тип проксі:">
-<!ENTITY torsettings.useProxy.type.placeholder "select a proxy type">
+<!ENTITY torsettings.useProxy.type.placeholder "оберіть тип проксі">
<!ENTITY torsettings.useProxy.address "Адреса:">
<!ENTITY torsettings.useProxy.address.placeholder "ІР адреса або ім'я хосту">
<!ENTITY torsettings.useProxy.port "Порт:">
@@ -38,21 +38,21 @@
<!ENTITY torsettings.useProxy.type.http "HTTP / HTTPS">
<!ENTITY torsettings.firewall.checkbox "Мій брандмауер дозволяє підключення тільки до певних портів">
<!ENTITY torsettings.firewall.allowedPorts "Дозволенні порти:">
-<!ENTITY torsettings.useBridges.checkbox "Tor is censored in my country">
-<!ENTITY torsettings.useBridges.default "Select a built-in bridge">
-<!ENTITY torsettings.useBridges.default.placeholder "select a bridge">
-<!ENTITY torsettings.useBridges.custom "Provide a bridge I know">
-<!ENTITY torsettings.useBridges.label "Enter bridge information from a trusted source.">
-<!ENTITY torsettings.useBridges.placeholder "type address:port (one per line)">
+<!ENTITY torsettings.useBridges.checkbox "Тор цензується в моїй країні">
+<!ENTITY torsettings.useBridges.default "Виберіть вбудований міст">
+<!ENTITY torsettings.useBridges.default.placeholder "Виберіть міст">
+<!ENTITY torsettings.useBridges.custom "Надайте міст, який я знаю">
+<!ENTITY torsettings.useBridges.label "Уведіть інформацію про міст із надійного джерела.">
+<!ENTITY torsettings.useBridges.placeholder "тип адреси: порт (по одному на рядок)">
<!ENTITY torsettings.copyLog "Скопіювати журнал Tor до буферу обміну">
-<!ENTITY torsettings.proxyHelpTitle "Proxy Help">
-<!ENTITY torsettings.proxyHelp1 "A local proxy is needed when connecting through a company, school, or university network. If you are not sure how to answer this question, look at the Internet settings in another browser or check your system's network settings to see whether a proxy is needed.">
+<!ENTITY torsettings.proxyHelpTitle "Довідка Проксі">
+<!ENTITY torsettings.proxyHelp1 "Локальний проксі-сервер потрібен під час підключення через мережу компанії, школи або університету. Якщо ви не знаєте, як відповісти на це запитання, перегляньте налаштування Інтернету в іншому веб-переглядачі або перевірте ваші мережеві налаштування системи, щоб дізнатися, чи потрібен проксі-сервер.">
<!ENTITY torsettings.bridgeHelpTitle "Допомога по ретрансляторам типу міст">
<!ENTITY torsettings.bridgeHelp1 "Bridges are unlisted relays that make it more difficult to block connections to the Tor Network.  Each type of bridge uses a different method to avoid censorship.  The obfs ones make your traffic look like random noise, and the meek ones make your traffic look like it's connecting to that service instead of Tor.">
-<!ENTITY torsettings.bridgeHelp2 "Because of how certain countries try to block Tor, certain bridges work in certain countries but not others.  If you are unsure about which bridges work in your country, visit torproject.org/about/contact.html#support">
+<!ENTITY torsettings.bridgeHelp2 "Через те, як певні країни намагаються заблокувати Tor, деякі мости працюють в деяких країнах, а в інших ні.  Якщо ви не впевнені в тому, які мости працюють у вашій країні, відвідайте torproject.org/about/contact.html#support">
<!-- Progress -->
-<!ENTITY torprogress.pleaseWait "Please wait while we establish a connection to the Tor network.  This may take several minutes.">
+<!ENTITY torprogress.pleaseWait "Будь ласка, зачекайте, поки ми встановимо з'єднання з мережею Tor.  Це може зайняти кілька хвилин.">
diff --git a/src/chrome/locale/uk/torlauncher.properties b/src/chrome/locale/uk/torlauncher.properties
index 9dd9ca9..967f4f4 100644
--- a/src/chrome/locale/uk/torlauncher.properties
+++ b/src/chrome/locale/uk/torlauncher.properties
@@ -28,8 +28,8 @@ torlauncher.error_bridges_missing=Ви повинні вказати один а
torlauncher.error_default_bridges_type_missing=Ви повинні вибрати тип транспорту для наданих мережевих мостів.
torlauncher.error_bridge_bad_default_type=Немає мережевих мостів які мають тип транспорту %S. Будь ласка перевірте ваші налаштування.
-torlauncher.bridge_suffix.meek-amazon=(works in China)
-torlauncher.bridge_suffix.meek-azure=(works in China)
+torlauncher.bridge_suffix.meek-amazon=(працює в Китаї)
+torlauncher.bridge_suffix.meek-azure=(працює в Китаї)
torlauncher.connect=З'єднатися
torlauncher.restart_tor=Перезапустити Tor
diff --git a/src/chrome/locale/ur-PK/network-settings.dtd b/src/chrome/locale/ur-PK/network-settings.dtd
index cb5a403..2ac78de 100644
--- a/src/chrome/locale/ur-PK/network-settings.dtd
+++ b/src/chrome/locale/ur-PK/network-settings.dtd
@@ -1,6 +1,6 @@
<!ENTITY torsettings.dialog.title "ٹور نیٹ ورک سیٹنگز">
<!ENTITY torsettings.wizard.title.default "Connect to Tor">
-<!ENTITY torsettings.wizard.title.configure "Tor Network Settings">
+<!ENTITY torsettings.wizard.title.configure "ٹور نیٹ ورک سیٹنگز">
<!ENTITY torsettings.wizard.title.connecting "Establishing a Connection">
<!-- For locale picker: -->
diff --git a/src/chrome/locale/ur/network-settings.dtd b/src/chrome/locale/ur/network-settings.dtd
index 4cf7dfe..41e4ec2 100644
--- a/src/chrome/locale/ur/network-settings.dtd
+++ b/src/chrome/locale/ur/network-settings.dtd
@@ -1,6 +1,6 @@
<!ENTITY torsettings.dialog.title "طور نیٹ ورک کے سیٹنگز">
<!ENTITY torsettings.wizard.title.default "Connect to Tor">
-<!ENTITY torsettings.wizard.title.configure "Tor Network Settings">
+<!ENTITY torsettings.wizard.title.configure "طور نیٹ ورک کے سیٹنگز">
<!ENTITY torsettings.wizard.title.connecting "Establishing a Connection">
<!-- For locale picker: -->
@@ -31,8 +31,8 @@
<!ENTITY torsettings.useProxy.address "Address:">
<!ENTITY torsettings.useProxy.address.placeholder "IP address or hostname">
<!ENTITY torsettings.useProxy.port "Port:">
-<!ENTITY torsettings.useProxy.username "Username:">
-<!ENTITY torsettings.useProxy.password "Password:">
+<!ENTITY torsettings.useProxy.username "صارف کا نام">
+<!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">
diff --git a/src/chrome/locale/uz/network-settings.dtd b/src/chrome/locale/uz/network-settings.dtd
index 48ee1dc..78328e3 100644
--- a/src/chrome/locale/uz/network-settings.dtd
+++ b/src/chrome/locale/uz/network-settings.dtd
@@ -1,6 +1,6 @@
<!ENTITY torsettings.dialog.title "Tor tarmoq moslamalari">
<!ENTITY torsettings.wizard.title.default "Connect to Tor">
-<!ENTITY torsettings.wizard.title.configure "Tor Network Settings">
+<!ENTITY torsettings.wizard.title.configure "Tor tarmoq moslamalari">
<!ENTITY torsettings.wizard.title.connecting "Establishing a Connection">
<!-- For locale picker: -->
diff --git a/src/chrome/locale/vi/network-settings.dtd b/src/chrome/locale/vi/network-settings.dtd
index ca9a560..2cb4869 100644
--- a/src/chrome/locale/vi/network-settings.dtd
+++ b/src/chrome/locale/vi/network-settings.dtd
@@ -1,6 +1,6 @@
<!ENTITY torsettings.dialog.title "Những cài đặt của mạng Tor">
<!ENTITY torsettings.wizard.title.default "Connect to Tor">
-<!ENTITY torsettings.wizard.title.configure "Tor Network Settings">
+<!ENTITY torsettings.wizard.title.configure "Những cài đặt của mạng Tor">
<!ENTITY torsettings.wizard.title.connecting "Establishing a Connection">
<!-- For locale picker: -->
@@ -55,4 +55,4 @@
<!ENTITY torsettings.bridgeHelp2 "Because of how certain countries try to block Tor, certain bridges work in certain countries but not others.  If you are unsure about which bridges work in your country, visit torproject.org/about/contact.html#support">
<!-- Progress -->
-<!ENTITY torprogress.pleaseWait "Please wait while we establish a connection to the Tor network.  This may take several minutes.">
+<!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.">
diff --git a/src/chrome/locale/zh-HK/network-settings.dtd b/src/chrome/locale/zh-HK/network-settings.dtd
index db92556..fd0e248 100644
--- a/src/chrome/locale/zh-HK/network-settings.dtd
+++ b/src/chrome/locale/zh-HK/network-settings.dtd
@@ -1,6 +1,6 @@
<!ENTITY torsettings.dialog.title "設定Tor洋蔥路由網絡">
<!ENTITY torsettings.wizard.title.default "Connect to Tor">
-<!ENTITY torsettings.wizard.title.configure "Tor Network Settings">
+<!ENTITY torsettings.wizard.title.configure "設定Tor洋蔥路由網絡">
<!ENTITY torsettings.wizard.title.connecting "Establishing a Connection">
<!-- For locale picker: -->
@@ -55,4 +55,4 @@
<!ENTITY torsettings.bridgeHelp2 "Because of how certain countries try to block Tor, certain bridges work in certain countries but not others.  If you are unsure about which bridges work in your country, visit torproject.org/about/contact.html#support">
<!-- Progress -->
-<!ENTITY torprogress.pleaseWait "Please wait while we establish a connection to the Tor network.  This may take several minutes.">
+<!ENTITY torprogress.pleaseWait "我哋正在建立通往Tor洋蔥路由網絡嘅連線,請稍候, 呢樣可能會需要幾分鐘時間。">
1
0
commit d12fc5e19b896830dd08a26fd2883b7c0e81a627
Author: Georg Koppen <gk(a)torproject.org>
Date: Wed Feb 21 08:15:56 2018 +0000
Release preparations for 1.9.9
CHANGELOG update and version bump
---
src/CHANGELOG | 5 +++++
src/install.rdf | 2 +-
2 files changed, 6 insertions(+), 1 deletion(-)
diff --git a/src/CHANGELOG b/src/CHANGELOG
index 79ce7a0..1ad2400 100644
--- a/src/CHANGELOG
+++ b/src/CHANGELOG
@@ -1,3 +1,8 @@
+1.9.9
+ * Bug 24159: Version check does not deal with platform specific checks
+ * Bug 25016: Remove 2017 donation banner
+ * Translations update
+
1.9.8.5
* Bug 21245: Add da translation to Torbutton and keep track of it
* Bug 24702: Remove Mozilla text from banner
diff --git a/src/install.rdf b/src/install.rdf
index 73e9055..5ecdb6d 100644
--- a/src/install.rdf
+++ b/src/install.rdf
@@ -6,7 +6,7 @@
<em:name>Torbutton</em:name>
<em:creator>Mike Perry</em:creator>
<em:id>torbutton(a)torproject.org</em:id>
- <em:version>1.9.8.5</em:version>
+ <em:version>1.9.9</em:version>
<em:multiprocessCompatible>true</em:multiprocessCompatible>
<em:homepageURL>https://www.torproject.org/projects/torbrowser.html.en</em:homepageURL>
<em:optionsURL>chrome://torbutton/content/preferences.xul</em:optionsURL>
1
0
commit 7c55581f80ab138a3cd0f4720d469e8ffddc7959
Author: Georg Koppen <gk(a)torproject.org>
Date: Wed Feb 21 08:11:57 2018 +0000
Update translations
---
src/chrome/locale/ar/aboutTor.properties | 8 ++++----
src/chrome/locale/ar/torbutton.dtd | 4 ++--
src/chrome/locale/da/aboutDialog.dtd | 4 ++--
src/chrome/locale/da/aboutTBUpdate.dtd | 4 ++--
src/chrome/locale/da/aboutTor.dtd | 12 ++++++------
src/chrome/locale/da/torbutton.dtd | 8 ++++----
src/chrome/locale/da/torbutton.properties | 20 ++++++++++----------
src/chrome/locale/de/torbutton.dtd | 4 ++--
src/chrome/locale/eu/aboutTor.properties | 2 +-
src/chrome/locale/eu/torbutton.dtd | 2 +-
src/chrome/locale/fa/torbutton.dtd | 2 +-
src/chrome/locale/fr/aboutTor.dtd | 24 ++++++++++++------------
src/chrome/locale/fr/aboutTor.properties | 2 +-
src/chrome/locale/fr/torbutton.dtd | 24 ++++++++++++------------
src/chrome/locale/fr/torbutton.properties | 12 ++++++------
src/chrome/locale/ja/torbutton.dtd | 30 +++++++++++++++---------------
src/chrome/locale/ko/torbutton.dtd | 6 +++---
src/chrome/locale/pl/torbutton.dtd | 2 +-
src/chrome/locale/vi/aboutTor.properties | 2 +-
src/chrome/locale/vi/torbutton.dtd | 6 +++---
src/chrome/locale/zh-CN/torbutton.dtd | 2 +-
21 files changed, 90 insertions(+), 90 deletions(-)
diff --git a/src/chrome/locale/ar/aboutTor.properties b/src/chrome/locale/ar/aboutTor.properties
index 8b3d02e..369c257 100644
--- a/src/chrome/locale/ar/aboutTor.properties
+++ b/src/chrome/locale/ar/aboutTor.properties
@@ -11,10 +11,10 @@ aboutTor.searchDDG.search.link=https://duckduckgo.com/
aboutTor.donationBanner.donate=تبرع الآن !
aboutTor.donationBanner.slogan=تور : دعم الصمود الرقمي
-aboutTor.donationBanner.mozilla=Give today and Mozilla will match your gift!
+aboutTor.donationBanner.mozilla=اعطِ اليوم ومودزيلا سترُد لك الهدية
-aboutTor.donationBanner.tagline1=Protecting Journalists, Whistleblowers, & Activists Since 2006
-aboutTor.donationBanner.tagline2=Networking Freedom Worldwide
+aboutTor.donationBanner.tagline1=حماية الصحافيين ، المُخبرين والنُشطاء منذ عام 2006
+aboutTor.donationBanner.tagline2=حرية التواصل الشبكي العالمية
aboutTor.donationBanner.tagline3=Freedom Online
-aboutTor.donationBanner.tagline4=Fostering Free Expression Worldwide
+aboutTor.donationBanner.tagline4=تعزيز حرية التعبير عالمياً
aboutTor.donationBanner.tagline5=تحمي خصوصية الملايين من الأشخاص كل يوم
diff --git a/src/chrome/locale/ar/torbutton.dtd b/src/chrome/locale/ar/torbutton.dtd
index 9e85fcf..6e45989 100644
--- a/src/chrome/locale/ar/torbutton.dtd
+++ b/src/chrome/locale/ar/torbutton.dtd
@@ -33,7 +33,7 @@
<!ENTITY torbutton.prefs.resist_fingerprinting_tooltip "Keep this box checked to hide things from websites that could be unique about you, including your computer performance, keyboard layout, locale, the location of installed plugins, the list of installed plugins, your network status, screen orientation, screen size, site-specific zoom levels, supported file types, system colors, and WebGL capabilities.">
<!ENTITY torbutton.prefs.sec_caption "مستوى الأمان">
<!ENTITY torbutton.prefs.sec_caption_tooltip "The Security Slider lets you disable certain browser features that may make your browser more vulnerable to hacking attempts.">
-<!ENTITY torbutton.prefs.sec_standard_label "Standard">
+<!ENTITY torbutton.prefs.sec_standard_label "عادي">
<!ENTITY torbutton.prefs.sec_standard_description "All Tor Browser and website features are enabled.">
<!ENTITY torbutton.prefs.sec_safer_label "Safer">
<!ENTITY torbutton.prefs.sec_safer_description "Disables website features that are often dangerous, causing some sites to lose functionality.">
@@ -43,7 +43,7 @@
<!ENTITY torbutton.prefs.sec_safest_list_label "At the safest setting:">
<!ENTITY torbutton.prefs.sec_learn_more_label "تعرّف على المزيد">
<!ENTITY torbutton.prefs.sec_js_on_https_sites_only "JavaScript is disabled on non-HTTPS sites.">
-<!ENTITY torbutton.prefs.sec_js_disabled "JavaScript is disabled by default on all sites.">
+<!ENTITY torbutton.prefs.sec_js_disabled "جافا سكريبت معطل بشكل افتراضي على جميع المواقع.">
<!ENTITY torbutton.prefs.sec_limit_typography "Some fonts and math symbols are disabled.">
<!ENTITY torbutton.prefs.sec_limit_graphics_and_typography "Some fonts, icons, math symbols, and images are disabled.">
<!ENTITY torbutton.prefs.sec_click_to_play_media "Audio and video (HTML5 media) are click-to-play.">
diff --git a/src/chrome/locale/da/aboutDialog.dtd b/src/chrome/locale/da/aboutDialog.dtd
index ae4278e..eb7a179 100644
--- a/src/chrome/locale/da/aboutDialog.dtd
+++ b/src/chrome/locale/da/aboutDialog.dtd
@@ -5,7 +5,7 @@
<!ENTITY help.start "Vil du hjælpe? ">
<!-- LOCALIZATION NOTE (help.donate): This is a link title that links to https://www.torproject.org/donate/donate.html.en -->
-<!ENTITY help.donateLink "Doner">
+<!ENTITY help.donateLink "Donér">
<!ENTITY help.or " eller ">
<!-- LOCALIZATION NOTE (help.getInvolvedLink): This is a link title that links to https://www.torproject.org/getinvolved/volunteer.html.en -->
<!ENTITY help.getInvolvedLink "vær med">
@@ -16,4 +16,4 @@
<!ENTITY bottomLinks.grow "Hjælp Tor Network med at vokse!">
<!-- LOCALIZATION NOTE (bottom.questions): This is a link title that links to about:license -->
<!ENTITY bottomLinks.license "Licens Information">
-<!ENTITY tor.TrademarkStatement ""Tor" og "løg-logoet" er registrerede varemærker tilhørende The Tor Project, Inc.">
+<!ENTITY tor.TrademarkStatement ""Tor" og "løg-logoet" er registrerede varemærker tilhørende Tor Project, Inc.">
diff --git a/src/chrome/locale/da/aboutTBUpdate.dtd b/src/chrome/locale/da/aboutTBUpdate.dtd
index f0c6c5a..d0167c7 100644
--- a/src/chrome/locale/da/aboutTBUpdate.dtd
+++ b/src/chrome/locale/da/aboutTBUpdate.dtd
@@ -1,5 +1,5 @@
-<!ENTITY aboutTBUpdate.title "Tor Browser opdatering">
-<!ENTITY aboutTBUpdate.updated "Tor Browseren er blevet opdateret.">
+<!ENTITY aboutTBUpdate.title "Tor Browser-opdatering">
+<!ENTITY aboutTBUpdate.updated "Tor Browser er blevet opdateret.">
<!ENTITY aboutTBUpdate.linkPrefix "For den mest aktuelle information om denne udgivelse,">
<!ENTITY aboutTBUpdate.linkLabel "Besøg vores webside">
<!ENTITY aboutTBUpdate.linkSuffix ".">
diff --git a/src/chrome/locale/da/aboutTor.dtd b/src/chrome/locale/da/aboutTor.dtd
index 23f3f23..6e2679a 100644
--- a/src/chrome/locale/da/aboutTor.dtd
+++ b/src/chrome/locale/da/aboutTor.dtd
@@ -8,9 +8,9 @@
<!ENTITY aboutTor.outOfDateTorOn.label "ADVARSEL: denne browser er forældet.">
<!ENTITY aboutTor.outOfDateTorOff.label "Denne browser er desuden forældet.">
-<!ENTITY aboutTor.outOfDate2.label "Klik på løget og vælg så Søg efter Tor Browser opdateringer.">
+<!ENTITY aboutTor.outOfDate2.label "Klik på løget og vælg så Søg efter Tor Browser-opdateringer.">
-<!ENTITY aboutTor.check.label "Test Tor netværksindstillinger.">
+<!ENTITY aboutTor.check.label "Test Tor-netværksindstillinger">
<!ENTITY aboutTor.success.label "Velkommen til Tor Browser">
<!ENTITY aboutTor.success2.label "Forbundet til Tor-netværket.">
@@ -26,13 +26,13 @@
<!ENTITY aboutTor.torInfo3.label "Udgangsknudepunkt:">
<!ENTITY aboutTor.torInfo4.label "Denne server logger ikke nogle informationer om besøgende.">
<!ENTITY aboutTor.whatnextQuestion.label "Hvad er næste skridt?">
-<!ENTITY aboutTor.whatnextAnswer.label "Tor er IKKE al den sikkerhed du har brug for for at browse anonymt. Du bliver muligvis også nødt til at ændre browsing vaner for at sikre, at din identitet forbliver sikker">
-<!ENTITY aboutTor.whatnext.label "Tips for at forblive anonym">
+<!ENTITY aboutTor.whatnextAnswer.label "Tor er IKKE al den sikkerhed du har brug for for at browse anonymt. Du bliver muligvis også nødt til at ændre nogle af dine browsingvaner for at sikre, at din identitet er sikker.">
+<!ENTITY aboutTor.whatnext.label "Tips til at være anonym »">
<!ENTITY aboutTor.whatnext.link "https://www.torproject.org/download/download.html.en#warning">
<!ENTITY aboutTor.torbrowser_user_manual.accesskey "M">
-<!ENTITY aboutTor.torbrowser_user_manual.label "Tor Browser brugermanual">
+<!ENTITY aboutTor.torbrowser_user_manual.label "Tor Browser-brugermanual">
<!ENTITY aboutTor.helpInfo1.label "Du kan hjælpe!">
-<!ENTITY aboutTor.helpInfo2.label "Der er mange måder hvorpå du kan hjælpe for at gøre Tor-netværket hurtigere og stærkere:">
+<!ENTITY aboutTor.helpInfo2.label "Der er mange måder du kan hjælpe med at gøre Tor-netværket hurtigere og stærkere:">
<!ENTITY aboutTor.helpInfo3.label "Kør et Tor-relæknudepunkt »">
<!ENTITY aboutTor.helpInfo3.link "https://www.torproject.org/docs/tor-doc-relay.html.en">
<!ENTITY aboutTor.helpInfo4.label "Tilbyd din hjælp »">
diff --git a/src/chrome/locale/da/torbutton.dtd b/src/chrome/locale/da/torbutton.dtd
index ac93e67..5a82f18 100644
--- a/src/chrome/locale/da/torbutton.dtd
+++ b/src/chrome/locale/da/torbutton.dtd
@@ -4,14 +4,14 @@
<!ENTITY torbutton.context_menu.new_circuit_key "C">
<!ENTITY torbutton.context_menu.preferences "Sikkerhedsindstillinger…">
<!ENTITY torbutton.context_menu.preferences.key "S">
-<!ENTITY torbutton.context_menu.networksettings "Tor netværksindstillinger...">
+<!ENTITY torbutton.context_menu.networksettings "Tor-netværksindstillinger...">
<!ENTITY torbutton.context_menu.networksettings.key "N">
-<!ENTITY torbutton.context_menu.downloadUpdate "Søg efter Tor Browser opdateringer...">
+<!ENTITY torbutton.context_menu.downloadUpdate "Søg efter Tor Browser-opdatering...">
<!ENTITY torbutton.context_menu.downloadUpdate.key "O">
<!ENTITY torbutton.context_menu.cookieProtections "Cookie-beskyttelser...">
<!ENTITY torbutton.context_menu.cookieProtections.key "C">
<!ENTITY torbutton.button.tooltip "Klik for at starte Torbutton">
-<!ENTITY torbutton.prefs.security_settings "Tor Browser sikkerhedsindstillinger">
+<!ENTITY torbutton.prefs.security_settings "Tor Browser-sikkerhedsindstillinger">
<!ENTITY torbutton.prefs.restore_defaults "Gendan Standarder">
<!ENTITY torbutton.prefs.custom_warning "Dine tilpassede browserpræferencer har resulterede i usædvanlige sikkerhedsindstillinger. Pga. sikkerheds- og privatlivsårsagen, anbefaler vi at du vælger en af standardsikkerhedsniveauerne.">
<!ENTITY torbutton.cookiedialog.title "Håndtér Cookie-beskyttelser">
@@ -30,7 +30,7 @@
<!ENTITY torbutton.prefs.restrict_thirdparty_tooltip "Lad denne boks være tilvalgt for at forhindre diverse browserfunktionalitet i at blive misbrugt til at spore dig efterhånden som du søger på webbet.. Modificerede funktionaliteter inkluderer blob-URL'er, broadcast-kanaler, browserens mellemlager, cookies, favicon'er, HTTP Auth-headere, link preconnects, localStorage, mediaSource-URL'er, OCSP-anmodninger, SharedWorkers og TLS session tickets.">
<!ENTITY torbutton.prefs.resist_fingerprinting "Tilpas detaljer som adskiller dig fra andre Tor Browser-brugere">
<!ENTITY torbutton.prefs.resist_fingerprinting.accesskey "F">
-<!ENTITY torbutton.prefs.resist_fingerprinting_tooltip "Lad denne boks være valgt til for at skjule ting fra websteder som er unikke for dig, inklusiv din computerydelse, tastaturlayout, sprog, placeringen af installerede plugins, listen af installerede plugins, din netværksstatus, skærmorientering, skærmstørrelse, stedspecifikke zoom-niveauer, understøttede filtyper, systemfarver og WebGL-formåenheder.">
+<!ENTITY torbutton.prefs.resist_fingerprinting_tooltip "Lad denne boks være valgt til for at skjule ting fra websteder som er unikke for dig, inklusiv din computerydelse, tastaturlayout, sprog, placeringen af installerede plugins, listen af installerede plugins, din netværksstatus, skærmorientering, skærmstørrelse, stedspecifikke zoomniveauer, understøttede filtyper, systemfarver og WebGL-formåenheder.">
<!ENTITY torbutton.prefs.sec_caption "Sikkerheds Niveau">
<!ENTITY torbutton.prefs.sec_caption_tooltip "Sikkerhedsskyderen giver dig mulighed for at deaktivere bestemte browserfunktionaliteter som kan gøre din browser sårbar overfor forsøg på hacking.">
<!ENTITY torbutton.prefs.sec_standard_label "Standard">
diff --git a/src/chrome/locale/da/torbutton.properties b/src/chrome/locale/da/torbutton.properties
index d7de66f..54df12c 100644
--- a/src/chrome/locale/da/torbutton.properties
+++ b/src/chrome/locale/da/torbutton.properties
@@ -8,33 +8,33 @@ torbutton.circuit_display.unknown_country = Ukendt land
torbutton.content_sizer.margin_tooltip = Tor Browser tilføjer denne margin for at gøre dit vindues højde og bredde mindre genkendeligt, hvilket reducerer muligheden for at andre spore dig online.
torbutton.panel.tooltip.disabled = Klik for at aktivere Tor
torbutton.panel.tooltip.enabled = Klik for at deaktivere Tor
-torbutton.panel.label.disabled = Tor Deaktiveret
-torbutton.panel.label.enabled = Tor Aktiveret
+torbutton.panel.label.disabled = Tor deaktiveret
+torbutton.panel.label.enabled = Tor aktiveret
extensions.torbutton(a)torproject.org.description = Torbutton tilbyder en knap, der konfigurerer Tor-indstillinger, samt hurtigt og nemt fjerner private data browsing-data.
torbutton.popup.external.title = Download en ekstern filtype?
-torbutton.popup.external.app = Tor Browseren kan ikke vis denne file. Du skal derfor åbne den med et andet program.\n\n
+torbutton.popup.external.app = Tor Browser kan ikke vis denne file. Du skal derfor åbne den med et andet program.\n\n
torbutton.popup.external.note = Nogle filtyper kan lede programmer til at forbinde til internettet uden at bruge Tor.\n\n
torbutton.popup.external.suggest = For at være sikker bør du kun åbne downloade filer mens du er offline, eller bruge en Tor Live CD såsom Tails.\n
torbutton.popup.launch = Download fil
torbutton.popup.cancel = Annuller
torbutton.popup.dontask = Download automatisk filer fremover
-torbutton.popup.prompted_language = For at yde større privatliv, så kan Torbutton forespørge den engelsk sprogversion af websiderne. Dette kan betyde at websider som du foretrækker at læse på dit modersmål vises på engelsk i stedet for.\n\nVil du gerne forespørge engelske websider for øget privatliv?
+torbutton.popup.prompted_language = For at yde større privatliv, kan Torbutton forespørge den engelsk sprogversion af websiderne. Det kan gøre at websider som du foretrækker at læse på dit modersmål vises på engelsk i stedet for.\n\nVil du gerne forespørge engelske websider for øget privatliv?
torbutton.popup.no_newnym = Torbutton kan ikke med sikkerhed give dig en ny identitet. Den har ikke adgang til kontrolporten for Tor.\n\nKører du Tor Browser-bundet?
torbutton.title.prompt_torbrowser = Vigtig Torbutton-information
-torbutton.popup.prompt_torbrowser = Torbutton fungerer anderledes end før: du kan ikke længere slå den fra.\n\nDu foretog denne ændring, da det ikke er sikkert at anvende Torbutton i en browser, der også anvendes til non-Tor-browsing. Der var for mange fejl deri, som vi ikke kunne rette på andre måder.\n\nHvis du ønsker at anvende Firefox på normal vis, så bør du afinstallere Torbutton og downloade Tor Browser Bundle. Indstillingerne for privatliv i Tor Browser overgår også de normale i Firefox, selv når Firefox anvende med Torbutton.\n\nFor at fjerne Torbutton, så gå til Funktioner->Tilføjelser->Udvidelser og klik dernæst Fjern-knappen ved siden af Torbutton.
+torbutton.popup.prompt_torbrowser = Torbutton fungerer anderledes end før: du kan ikke længere slå den fra.\n\nDu foretog denne ændring, da det ikke er sikkert at anvende Torbutton i en browser, der også anvendes til non-Tor-browsing. Der var for mange fejl deri, som vi ikke kunne rette på andre måder.\n\nHvis du ønsker at anvende Firefox på normal vis, så bør du afinstallere Torbutton og downloade Tor Browser-bundet. Indstillingerne for privatliv i Tor Browser overgår også de normale i Firefox, selv når Firefox anvende med Torbutton.\n\nFor at fjerne Torbutton, så gå til Funktioner->Tilføjelser->Udvidelser og klik dernæst Fjern-knappen ved siden af Torbutton.
torbutton.popup.short_torbrowser = Vigtig Torbutton-information!\n\nTorbutton er nu altid slået til.\n\nKlik på Torbutton for mere information.
torbutton.popup.confirm_plugins = Udvidelsesmoduler såsom Flash kan skade sikkerheden for dit privatliv og din anonymitet.\n\nDe kan også omgå Tor, så din nuværende placering og IP-adresse afsløres.\n\nEr du sikker på at du vil aktivere udvidelsesmoduler?\n\n
torbutton.popup.never_ask_again = Spørg mig aldrig igen
-torbutton.popup.confirm_newnym = Tor Browseren vil lukke alle vinduer og tabs. Alle webside-sessions vil gå tabs.\nGenstart Tor Browseren nu for at nulstille din identitet?\n
+torbutton.popup.confirm_newnym = Tor Browser vil lukke alle vinduer og faneblade. Alle webside-sessioner vil gå tabt.\nGenstart Tor Browser nu for at nulstille din identitet?\n
torbutton.slider_notification = Nu har det grønne løg menuen en sikkerheds skyder som lader dig tilpasse dit sikkerhedsniveau. Tjek det ud!
torbutton.slider_notification_button = Åben sikkerhedsindstillinger
-torbutton.maximize_warning = Hvis du maksimere Tor Browseren tillader du andre at fastslå din skærmstørrelse, hvilket kan blive brugt til at spore dig. Vi anbefaler at du anvender Tor Browserens standard skærmstørrelse.
+torbutton.maximize_warning = Hvis du maksimere Tor Browser kan websteder fastslå din skærmstørrelse, hvilket kan blive brugt til at spore dig. Vi anbefaler at du lader Tor Browser-vinduet være i sin originale standardstørrelse.
# Canvas permission prompt. Strings are kept here for ease of translation.
-canvas.siteprompt=Dette websted (%S) forsøgte at uddrage HTML5 canvas-billeddata, hvilket kan bruges til unikt at identificere din computer.\n\nSkal Tor Browseren tillade dette websted at uddrage HTML5 canvas-billeddata?
+canvas.siteprompt=Dette websted (%S) forsøgte at uddrage HTML5 canvas-billeddata, hvilket kan bruges til unikt at identificere din computer.\n\nSkal Tor Browser tillade dette websted at uddrage HTML5 canvas-billeddata?
canvas.notNow=Ikke nu
canvas.notNowAccessKey=N
canvas.allow=Tillad i fremtiden
@@ -45,7 +45,7 @@ canvas.neverAccessKey=L
# Profile/startup error messages. Strings are kept here for ease of translation.
# LOCALIZATION NOTE: %S is the application name.
profileProblemTitle=%S Profil Problem
-profileReadOnly=Du kan ikke køre %S fra et skrivebeskyttet filsystem. Kopier venligst %S til et andet sted før du prøver at bruge det.
-profileReadOnlyMac=Du kan ikke køre %S fra et skrivebeskyttet filsystem. Kopier venligst %S til skrivebordet eller en programmappe før du prøver at bruge det.
+profileReadOnly=Du kan ikke køre %S fra et skrivebeskyttet filsystem. Kopiér venligst %S til et andet sted før du prøver at bruge det.
+profileReadOnlyMac=Du kan ikke køre %S fra et skrivebeskyttet filsystem. Kopiér venligst %S til skrivebordet eller en programmappe før du prøver at bruge det.
profileAccessDenied= %S har ikke rettigheder til at bruge profilen. Skift venligst rettigheder og prøv igen.
profileMigrationFailed=Overførsel af din eksisterende %S profil fejlede.\nNye indstillinger vil blive brugt.
diff --git a/src/chrome/locale/de/torbutton.dtd b/src/chrome/locale/de/torbutton.dtd
index a9e3850..b4fb858 100644
--- a/src/chrome/locale/de/torbutton.dtd
+++ b/src/chrome/locale/de/torbutton.dtd
@@ -33,11 +33,11 @@
<!ENTITY torbutton.prefs.resist_fingerprinting_tooltip "Lassen Sie dieses Feld ausgewählt um bestimmte einzigartige Informationen Ihres Systems vor Webportalen zu verbergen, wie die Rechnerleistung, Tastaturbelegung, das Sprachprofil, den Installationsort von Erweiterungen, die Liste der installierten Erweiterungen, Ihren Netzwerkstatus, die Bildschirmausrichtung, Bildschirmgröße, seitenspezifische Vergrößerungseinstellungen, unterstützte Dateitypen, Farbschemata und WebGL-Fähigkeiten.">
<!ENTITY torbutton.prefs.sec_caption "Sicherheitsstufe">
<!ENTITY torbutton.prefs.sec_caption_tooltip "Mit dem Sicherheitsschieberegler können Sie bestimmte Browserfunktionen, die Ihren Browser für mögliche Attacken anfälliger machen, deaktivieren.">
-<!ENTITY torbutton.prefs.sec_standard_label "Standart
+<!ENTITY torbutton.prefs.sec_standard_label "Standard
">
<!ENTITY torbutton.prefs.sec_standard_description "Alle Tor Browser und Webseiten Funktionen sind aktiviert.">
<!ENTITY torbutton.prefs.sec_safer_label "Sicherer">
-<!ENTITY torbutton.prefs.sec_safer_description " Deaktiviert Webseiten Funktionen, die oft gefährlich sind. Sorgt dafür, dass manche Seiten nicht mehr so gut funktionieren">
+<!ENTITY torbutton.prefs.sec_safer_description "Deaktiviert Webseiten-Funktionen, die oft gefährlich sind. Sorgt dafür, dass manche Seiten nicht mehr so gut funktionieren">
<!ENTITY torbutton.prefs.sec_safer_list_label "In der sicheren Einstellung:">
<!ENTITY torbutton.prefs.sec_safest_label "Am sichersten">
<!ENTITY torbutton.prefs.sec_safest_description "Erlaubt nur Webseiten-Funktionen, die für statische Seiten und Basisdienste benötigt werden. Diese Änderungen betreffen Bilder, Medien und Skripte.">
diff --git a/src/chrome/locale/eu/aboutTor.properties b/src/chrome/locale/eu/aboutTor.properties
index 54adb53..0403039 100644
--- a/src/chrome/locale/eu/aboutTor.properties
+++ b/src/chrome/locale/eu/aboutTor.properties
@@ -8,7 +8,7 @@ aboutTor.searchDDG.privacy.link=https://duckduckgo.com/privacy.html
# The following string is a link which replaces %2$S above.
aboutTor.searchDDG.search.link=https://duckduckgo.com/
-aboutTor.donationBanner.donate=Donate Now!
+aboutTor.donationBanner.donate=Eman dohaintza orain!
aboutTor.donationBanner.slogan=Tor: Powering Digital Resistance
aboutTor.donationBanner.mozilla=Give today and Mozilla will match your gift!
diff --git a/src/chrome/locale/eu/torbutton.dtd b/src/chrome/locale/eu/torbutton.dtd
index 823cf58..94062c1 100644
--- a/src/chrome/locale/eu/torbutton.dtd
+++ b/src/chrome/locale/eu/torbutton.dtd
@@ -12,7 +12,7 @@
<!ENTITY torbutton.context_menu.cookieProtections.key "C">
<!ENTITY torbutton.button.tooltip "Sakatu Torbutton abiarazteko">
<!ENTITY torbutton.prefs.security_settings "Tor Browser Security Settings">
-<!ENTITY torbutton.prefs.restore_defaults "Restore Defaults">
+<!ENTITY torbutton.prefs.restore_defaults "Lehenetsiak berrezarri">
<!ENTITY torbutton.prefs.custom_warning "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.">
<!ENTITY torbutton.cookiedialog.title "Cookie Babesak kudeatu">
<!ENTITY torbutton.cookiedialog.lockCol "Babestuta">
diff --git a/src/chrome/locale/fa/torbutton.dtd b/src/chrome/locale/fa/torbutton.dtd
index 3ce8df6..9972010 100644
--- a/src/chrome/locale/fa/torbutton.dtd
+++ b/src/chrome/locale/fa/torbutton.dtd
@@ -43,7 +43,7 @@
<!ENTITY torbutton.prefs.sec_safest_list_label "At the safest setting:">
<!ENTITY torbutton.prefs.sec_learn_more_label "اطلاعات بیشتر">
<!ENTITY torbutton.prefs.sec_js_on_https_sites_only "JavaScript is disabled on non-HTTPS sites.">
-<!ENTITY torbutton.prefs.sec_js_disabled "JavaScript is disabled by default on all sites.">
+<!ENTITY torbutton.prefs.sec_js_disabled "جاوا اسکریپت به طور پیش فرض در تمامی سایت ها غیر فعال است.">
<!ENTITY torbutton.prefs.sec_limit_typography "Some fonts and math symbols are disabled.">
<!ENTITY torbutton.prefs.sec_limit_graphics_and_typography "Some fonts, icons, math symbols, and images are disabled.">
<!ENTITY torbutton.prefs.sec_click_to_play_media "Audio and video (HTML5 media) are click-to-play.">
diff --git a/src/chrome/locale/fr/aboutTor.dtd b/src/chrome/locale/fr/aboutTor.dtd
index a325239..fee49c8 100644
--- a/src/chrome/locale/fr/aboutTor.dtd
+++ b/src/chrome/locale/fr/aboutTor.dtd
@@ -8,17 +8,17 @@
<!ENTITY aboutTor.outOfDateTorOn.label "AVERTISSEMENT : ce navigateur n’est pas à jour.">
<!ENTITY aboutTor.outOfDateTorOff.label "DE PLUS, ce navigateur n’est pas à jour.">
-<!ENTITY aboutTor.outOfDate2.label "Cliquez sur l’oignon, puis choisissez Vérifier les màj. du navigateur Tor.">
+<!ENTITY aboutTor.outOfDate2.label "Cliquez sur l’oignon, puis choisissez Vérifier les mises à jour du navigateur Tor.">
<!ENTITY aboutTor.check.label "Tester les paramètres du réseau Tor">
<!ENTITY aboutTor.success.label "Bienvenue dans le navigateur Tor">
<!ENTITY aboutTor.success2.label "Connecté au réseau Tor.">
-<!ENTITY aboutTor.success3.label "Vous êtes maintenant libre de naviguer sur Internet anonymement.">
+<!ENTITY aboutTor.success3.label "Vous êtes maintenant libre de naviguer anonymement sur Internet.">
<!ENTITY aboutTor.failure.label "Une erreur s’est produite !">
<!ENTITY aboutTor.failure2.label "Tor ne fonctionne pas dans ce navigateur.">
-<!ENTITY aboutTor.search.label "Rechercher">
+<!ENTITY aboutTor.search.label "Chercher">
<!ENTITY aboutTor.searchDDGPost.link "https://duckduckgo.com">
<!ENTITY aboutTor.torInfo1.label "Informations supplémentaires :">
@@ -26,20 +26,20 @@
<!ENTITY aboutTor.torInfo3.label "Nœud de sortie :">
<!ENTITY aboutTor.torInfo4.label "Ce serveur ne journalise aucune information sur les visteurs.">
<!ENTITY aboutTor.whatnextQuestion.label "Que faire ensuite ?">
-<!ENTITY aboutTor.whatnextAnswer.label "Tor n’est PAS tout ce dont vous avez besoin pour naviguer anonymement ! Vous aurez peut-être à changer certaines de vos habitudes de navigation pour garder votre identité en sécurité.">
-<!ENTITY aboutTor.whatnext.label "Conseils pour rester anonyme »">
+<!ENTITY aboutTor.whatnextAnswer.label "Tor n’est PAS le seul outil dont vous avez besoin pour naviguer anonymement ! Vous aurez peut-être à changer certaines de vos habitudes de navigation pour garantir la sécurité de votre identité.">
+<!ENTITY aboutTor.whatnext.label "Conseils pour rester anonyme »">
<!ENTITY aboutTor.whatnext.link "https://www.torproject.org/download/download.html#warning">
<!ENTITY aboutTor.torbrowser_user_manual.accesskey "G">
-<!ENTITY aboutTor.torbrowser_user_manual.label "Le guide d’utilisation du navigateur Tor">
+<!ENTITY aboutTor.torbrowser_user_manual.label "Guide d’utilisation du navigateur Tor">
<!ENTITY aboutTor.helpInfo1.label "Vous pouvez aider !">
-<!ENTITY aboutTor.helpInfo2.label "Vous pouvez aider à rendre le réseau Tor plus rapide et plus puissant de plusieurs façons :">
-<!ENTITY aboutTor.helpInfo3.label "Faire tourner un nœud relais Tor »">
+<!ENTITY aboutTor.helpInfo2.label "Vous pouvez aider à rendre le réseau Tor plus rapide et plus puissant de plusieurs façons :">
+<!ENTITY aboutTor.helpInfo3.label "Exploiter un nœud-relais Tor »">
<!ENTITY aboutTor.helpInfo3.link "https://www.torproject.org/docs/tor-doc-relay.html">
-<!ENTITY aboutTor.helpInfo4.label "Devenir bénévole »">
+<!ENTITY aboutTor.helpInfo4.label "Devenir bénévole »">
<!ENTITY aboutTor.helpInfo4.link "https://www.torproject.org/getinvolved/volunteer.html">
-<!ENTITY aboutTor.helpInfo5.label "Faire un don »">
+<!ENTITY aboutTor.helpInfo5.label "Faire un don »">
<!ENTITY aboutTor.helpInfo5.link "https://www.torproject.org/donate/donate.html">
-<!ENTITY aboutTor.footer.label "Le projet Tor est une organisation sans but lucratif US 501(c)(3) dédiée à la recherche, le développement et l’éducation sur l’anonymat et la vie privée en ligne.">
-<!ENTITY aboutTor.learnMore.label "En savoir plus sur le projet Tor »">
+<!ENTITY aboutTor.footer.label "Le Projet Tor est une organisation sans but lucratif US 501(c)(3) dédiée à la recherche, au développement et à l’éducation sur l’anonymat et à la vie privée en ligne.">
+<!ENTITY aboutTor.learnMore.label "En savoir plus sur le Projet Tor »">
<!ENTITY aboutTor.learnMore.link "https://www.torproject.org/about/overview.html">
diff --git a/src/chrome/locale/fr/aboutTor.properties b/src/chrome/locale/fr/aboutTor.properties
index f29050a..952d3ae 100644
--- a/src/chrome/locale/fr/aboutTor.properties
+++ b/src/chrome/locale/fr/aboutTor.properties
@@ -2,7 +2,7 @@
# See LICENSE for licensing information.
# vim: set sw=2 sts=2 ts=8 et:
-aboutTor.searchDDG.privacy=Rechercher <a href="%1$S">en toute sécurité</a> avec <a href="%2$S">DuckDuckGo</a>.
+aboutTor.searchDDG.privacy=Chercher <a href="%1$S">en toute sécurité</a> avec <a href="%2$S">DuckDuckGo</a>.
# The following string is a link which replaces %1$S above.
aboutTor.searchDDG.privacy.link=https://duckduckgo.com/privacy.html
# The following string is a link which replaces %2$S above.
diff --git a/src/chrome/locale/fr/torbutton.dtd b/src/chrome/locale/fr/torbutton.dtd
index 76d1bfe..ac44ef5 100644
--- a/src/chrome/locale/fr/torbutton.dtd
+++ b/src/chrome/locale/fr/torbutton.dtd
@@ -2,13 +2,13 @@
<!ENTITY torbutton.context_menu.new_identity_key "I">
<!ENTITY torbutton.context_menu.new_circuit "Nouveau circuit Tor pour ce site">
<!ENTITY torbutton.context_menu.new_circuit_key "C">
-<!ENTITY torbutton.context_menu.preferences "Paramètres de sécurité...">
+<!ENTITY torbutton.context_menu.preferences "Paramètres de sécurité">
<!ENTITY torbutton.context_menu.preferences.key "S">
-<!ENTITY torbutton.context_menu.networksettings "Paramètres du réseau Tor...">
+<!ENTITY torbutton.context_menu.networksettings "Paramètres du réseau Tor">
<!ENTITY torbutton.context_menu.networksettings.key "R">
-<!ENTITY torbutton.context_menu.downloadUpdate "Vérifier les màj. du navigateur Tor">
+<!ENTITY torbutton.context_menu.downloadUpdate "Vérifier les mises à jour du navigateur Tor">
<!ENTITY torbutton.context_menu.downloadUpdate.key "M">
-<!ENTITY torbutton.context_menu.cookieProtections "Protections des fichiers témoins...">
+<!ENTITY torbutton.context_menu.cookieProtections "Protections des fichiers témoins…">
<!ENTITY torbutton.context_menu.cookieProtections.key "T">
<!ENTITY torbutton.button.tooltip "Cliquer pour lancer BoutonTor">
<!ENTITY torbutton.prefs.security_settings "Paramètres de sécurité du navigateur Tor">
@@ -32,18 +32,18 @@
<!ENTITY torbutton.prefs.resist_fingerprinting.accesskey "F">
<!ENTITY torbutton.prefs.resist_fingerprinting_tooltip "Gardez cette case cochée pour cacher aux sites Web certaines choses qui pourraient être uniques à votre sujet, incluant les performances de votre ordinateur, l’agencement du clavier, les paramètres de langue, l’emplacement des greffons installés, la liste des greffons installés, l’état de votre réseau, l’orientation de l’écran, la taille de l’écran, les niveaux de zoom particuliers aux sites, les types de fichiers pris en charge, les couleurs système et les capacités WebGL.">
<!ENTITY torbutton.prefs.sec_caption "Niveau de sécurité">
-<!ENTITY torbutton.prefs.sec_caption_tooltip "Le bouton de sécurité coulissant vous permet de désactiver certaines fonctions du navigateur qui le rendent plus vulnérable aux tentatives de piratage.">
+<!ENTITY torbutton.prefs.sec_caption_tooltip "Le curseur de sécurité vous permet de désactiver certaines fonctions du navigateur qui pourraient le rendre plus vulnérable aux tentatives de piratage.">
<!ENTITY torbutton.prefs.sec_standard_label "Normal">
-<!ENTITY torbutton.prefs.sec_standard_description "Tous les fonctions du navigateur Tor et de site Web sont activées.">
+<!ENTITY torbutton.prefs.sec_standard_description "Toutes les fonctions du navigateur Tor et des sites Web sont activées.">
<!ENTITY torbutton.prefs.sec_safer_label "Plus sûr">
-<!ENTITY torbutton.prefs.sec_safer_description "Désactive les fonctions de site Web qui sont souvent dangereuses, ce qui pourrait causer le non-fonctionnement de certains sites Web.">
-<!ENTITY torbutton.prefs.sec_safer_list_label "Au paramètre plus sûr :">
+<!ENTITY torbutton.prefs.sec_safer_description "Désactive les fonctions souvent dangereuses des sites Web, ce qui pourrait entraîner une perte de fonctionnalité de certains sites Web.">
+<!ENTITY torbutton.prefs.sec_safer_list_label "Au réglage Plus sûr :">
<!ENTITY torbutton.prefs.sec_safest_label "Le plus sûr">
-<!ENTITY torbutton.prefs.sec_safest_description "Ne permettre que les fonctions de site Web qui sont exigées pour les sites fixes et les services de base. Ces changements affectent les images, les médias et les scripts.">
-<!ENTITY torbutton.prefs.sec_safest_list_label "Au paramètre le plus sûr :">
+<!ENTITY torbutton.prefs.sec_safest_description "Ne permettre que les fonctions de sites Web qui sont exigées pour les sites fixes et les services de base. Ces changements affectent les images, les médias et les scripts.">
+<!ENTITY torbutton.prefs.sec_safest_list_label "Au réglage Le plus sûr :">
<!ENTITY torbutton.prefs.sec_learn_more_label "En apprendre davantage">
-<!ENTITY torbutton.prefs.sec_js_on_https_sites_only "JavaScript est désactivé sur les sites non HTTPS.">
-<!ENTITY torbutton.prefs.sec_js_disabled "JavaScript est désactivé par défaut sur tous les sites.">
+<!ENTITY torbutton.prefs.sec_js_on_https_sites_only "JavaScript est désactivé pour les sites non HTTPS.">
+<!ENTITY torbutton.prefs.sec_js_disabled "JavaScript est désactivé par défaut pour tous les sites.">
<!ENTITY torbutton.prefs.sec_limit_typography "Certaines polices et certains symboles mathématiques sont désactivés.">
<!ENTITY torbutton.prefs.sec_limit_graphics_and_typography "Certaines polices, icônes, images et certains symboles mathématiques sont désactivés.">
<!ENTITY torbutton.prefs.sec_click_to_play_media "Le son et la vidéo (médias HTML5) sont « cliquer pour lire ».">
diff --git a/src/chrome/locale/fr/torbutton.properties b/src/chrome/locale/fr/torbutton.properties
index 1ac1cfd..8df885b 100644
--- a/src/chrome/locale/fr/torbutton.properties
+++ b/src/chrome/locale/fr/torbutton.properties
@@ -8,8 +8,8 @@ torbutton.circuit_display.unknown_country = Pays inconnu
torbutton.content_sizer.margin_tooltip = Le navigateur Tor ajoute cette marge pour rendre la largeur et la hauteur de votre fenêtre moins distinctives, et pour réduire par conséquent la possibilité que l’on vous suive à la trace en ligne.
torbutton.panel.tooltip.disabled = Cliquer pour activer Tor
torbutton.panel.tooltip.enabled = Cliquer pour désactiver Tor
-torbutton.panel.label.disabled = Tor Inactif
-torbutton.panel.label.enabled = Tor Actif
+torbutton.panel.label.disabled = Tor est désactivé
+torbutton.panel.label.enabled = Tor est activé
extensions.torbutton(a)torproject.org.description = BoutonTor fournit un bouton pour configurer les paramètres de Tor et vider facilement les données de navigation privée.
torbutton.popup.external.title = Télécharger un type de fichier externe ?
torbutton.popup.external.app = Le Navigateur Tor ne peut pas afficher ce fichier. Il est necessaire de l’ouvrir avec une autre application.
@@ -18,7 +18,7 @@ torbutton.popup.external.suggest = Par sécurité, vous ne devriez ouvrir les fi
torbutton.popup.launch = Télécharger le fichier
torbutton.popup.cancel = Annuler
torbutton.popup.dontask = Télécharger automatiquement à partir de maintenant
-torbutton.popup.prompted_language = Pour renforcer votre anonymat, BoutonTor peut demander la version anglaise des pages Web. Les pages que vous préférez lire dans votre langue préférée pourraient alors s’afficher en anglais.\n\nVoulez-vous demander des pages Web en anglais pour améliorer votre anonymat ?
+torbutton.popup.prompted_language = Pour renforcer votre anonymat, BoutonTor peut demander la version anglaise des pages Web. Les pages que vous préférez lire dans votre langue maternelle pourraient alors s’afficher en anglais.\n\nVoulez-vous demander des pages Web en anglais pour améliorer votre anonymat ?
torbutton.popup.no_newnym = BoutonTor ne peut pas vous attribuer une nouvelle identité de façon sûre. Il n’a pas accès au port de contrôle de Tor.\n\nUtilisez-vous l’offre groupée de navigation Tor ?
torbutton.title.prompt_torbrowser = Informations importantes concernant BoutonTor
torbutton.popup.prompt_torbrowser = BoutonTor fonctionne différemment maintenant : vous ne pouvez plus le désactiver.\n\nNous avons effectué ce changement car il n’est pas sécuritaire d’utiliser BoutonTor dans un navigateur qui est également utiliser pour une navigation sans Tor. Trop de bogues ne pouvaient être réglés autrement.\n\nSi vous voulez continuer à utiliser Firefox normalement, vous devriez désinstaller BoutonTor et télécharger l’offre groupée de navigation Tor. Les propriétés de confidentialité du navigateur Tor sont aussi supérieures à celles de Firefox, même s’il est utilisé avec BoutonTor.\n\nPour enlever BoutonTor, allez dans Outils->Modules complémentaires->Extensions et cliquer sur Supprimer à coté de BoutonTor.
@@ -26,12 +26,12 @@ torbutton.popup.short_torbrowser = Informations importantes concernant BoutonTor
torbutton.popup.confirm_plugins = Les greffons tels que Flash peuvent nuire à vos anonymat et vie privée.\n\nIls peuvent également contourner Tor afin de révéler votre position actuelle ainsi que votre adresse IP.\n\nÊtes-vous certain de vouloir activer les greffons ?\n\n
torbutton.popup.never_ask_again = Ne plus me poser la question.
-torbutton.popup.confirm_newnym = Le navigateur Tor fermera tous les fenêtres et onglets. Toutes les sessions des sites Web seront perdues.\n\nRedémarrer le navigateur Tor maintenant pour réinitialiser votre identité ?\n\n
+torbutton.popup.confirm_newnym = Le navigateur Tor fermera tous les fenêtres et onglets. Les sessions des sites Web seront toutes perdues.\n\nRedémarrer le navigateur Tor maintenant pour réinitialiser votre identité ?\n\n
-torbutton.slider_notification = Le menu de l’oignon vert propose maintenant un curseur de sécurité qui vous laisse ajuster votre niveau de sécurité. Découvrez-le !
+torbutton.slider_notification = Le menu de l’oignon vert propose maintenant un curseur de sécurité qui vous permet de régler votre niveau de sécurité. Découvrez-le !
torbutton.slider_notification_button = Ouvrir préférences de sécurité
-torbutton.maximize_warning = Maximiser le navigateur Tor à l’écran peut permettre aux sites Web de déterminer votre taille de moniteur, laquelle peut être utilisée pour vous suivre à la trace. Nous recommandons que vous laissiez les fenêtres du navigateur Tor dans leur taille d’origine.
+torbutton.maximize_warning = Maximiser le navigateur Tor peut permettre aux sites Web de déterminer la taille de votre moniteur, ce qui peut être utilisé pour vous suivre à la trace. Nous vous recommandons de garder la taille d’origine des fenêtres du navigateur Tor.
# Canvas permission prompt. Strings are kept here for ease of translation.
canvas.siteprompt=Ce site Web (%S) a essayé d’extraire des données d’image de canevas HTML5, qui pourraient être utilisées pour identifier votre ordinateur de façon unique.\n\nLe navigateur Tor devrait-il permettre à ce site Web d’extraire des données d’image de canevas HTML5 ?
diff --git a/src/chrome/locale/ja/torbutton.dtd b/src/chrome/locale/ja/torbutton.dtd
index b238ecf..04549c0 100644
--- a/src/chrome/locale/ja/torbutton.dtd
+++ b/src/chrome/locale/ja/torbutton.dtd
@@ -30,21 +30,21 @@
<!ENTITY torbutton.prefs.restrict_thirdparty_tooltip "このボックスをチェックしたままにすることで、様々なブラウザーの機能が悪用されウェブの閲覧中に追跡されることを防ぐ。影響を受ける機能:blob URL、ブロードキャスト・チャンネル、ブラウザー・キャッシュ、クッキー、favicon、HTTP認証ヘッダー、link preconnects、ローカルストレージ、mediaSource URL、OCSPリクエスト、共有ワーカー、TLSセッション・チケットなど。">
<!ENTITY torbutton.prefs.resist_fingerprinting "あなたとほかのTorブラウザのユーザーを区別する詳細を変更">
<!ENTITY torbutton.prefs.resist_fingerprinting.accesskey "F">
-<!ENTITY torbutton.prefs.resist_fingerprinting_tooltip "Keep this box checked to hide things from websites that could be unique about you, including your computer performance, keyboard layout, locale, the location of installed plugins, the list of installed plugins, your network status, screen orientation, screen size, site-specific zoom levels, supported file types, system colors, and WebGL capabilities.">
+<!ENTITY torbutton.prefs.resist_fingerprinting_tooltip "このボックスをチェックしたままにすると、あなたを識別できうる情報をウェブサイトから隠します。これには、コンピュータの性能、キーボードの配列、ロケール、インストールされたプラグインの位置、インストールされたプラグインのリスト、あなたのネットワークの状態、画面の向き、画面の解像度、サイトごとのズーム設定、対応しているファイル形式、システムの色設定、WebGL機能が含まれます。">
<!ENTITY torbutton.prefs.sec_caption "セキュリティレベル">
<!ENTITY torbutton.prefs.sec_caption_tooltip "セキュリティ・スライダーを使って、あなたのブラウザーをハッキングの試みに対してより脆弱にする可能性のあるブラウザーの機能を無効にできます。">
-<!ENTITY torbutton.prefs.sec_standard_label "Standard">
-<!ENTITY torbutton.prefs.sec_standard_description "All Tor Browser and website features are enabled.">
-<!ENTITY torbutton.prefs.sec_safer_label "Safer">
-<!ENTITY torbutton.prefs.sec_safer_description "Disables website features that are often dangerous, causing some sites to lose functionality.">
-<!ENTITY torbutton.prefs.sec_safer_list_label "At the safer setting:">
-<!ENTITY torbutton.prefs.sec_safest_label "Safest">
-<!ENTITY torbutton.prefs.sec_safest_description "Only allows website features required for static sites and basic services. These changes affect images, media, and scripts.">
-<!ENTITY torbutton.prefs.sec_safest_list_label "At the safest setting:">
-<!ENTITY torbutton.prefs.sec_learn_more_label "Learn more">
-<!ENTITY torbutton.prefs.sec_js_on_https_sites_only "JavaScript is disabled on non-HTTPS sites.">
-<!ENTITY torbutton.prefs.sec_js_disabled "JavaScript is disabled by default on all sites.">
-<!ENTITY torbutton.prefs.sec_limit_typography "Some fonts and math symbols are disabled.">
-<!ENTITY torbutton.prefs.sec_limit_graphics_and_typography "Some fonts, icons, math symbols, and images are disabled.">
-<!ENTITY torbutton.prefs.sec_click_to_play_media "Audio and video (HTML5 media) are click-to-play.">
+<!ENTITY torbutton.prefs.sec_standard_label "標準">
+<!ENTITY torbutton.prefs.sec_standard_description "Tor Browserとウェブサイトのすべての機能が有効化されます。">
+<!ENTITY torbutton.prefs.sec_safer_label "より安全">
+<!ENTITY torbutton.prefs.sec_safer_description "ウェブサイトのしばしば危険である機能を無効化します。サイトによっては正常に動作しなくなります。">
+<!ENTITY torbutton.prefs.sec_safer_list_label "「より安全」設定では:">
+<!ENTITY torbutton.prefs.sec_safest_label "最も安全">
+<!ENTITY torbutton.prefs.sec_safest_description "静的なサイトと基本的なサービスに必要な機能だけを許可します。この変更は画像、メディア、スクリプトに影響します。">
+<!ENTITY torbutton.prefs.sec_safest_list_label "「最も安全」設定では:">
+<!ENTITY torbutton.prefs.sec_learn_more_label "さらに知る">
+<!ENTITY torbutton.prefs.sec_js_on_https_sites_only "HTTPS非対応のサイトでJavaScript が無効化されます。">
+<!ENTITY torbutton.prefs.sec_js_disabled "すべてのサイトでJavaScriptが無効化されます。">
+<!ENTITY torbutton.prefs.sec_limit_typography "いくつかのフォントと数学記号が無効化されます。">
+<!ENTITY torbutton.prefs.sec_limit_graphics_and_typography "いくつかのアイコン、数学記号および画像が無効化されます。">
+<!ENTITY torbutton.prefs.sec_click_to_play_media "オーディオとビデオ(HTML5メディア)はクリックすると再生されます。">
<!ENTITY torbutton.circuit_display.title "このサイト用の Tor サーキット">
diff --git a/src/chrome/locale/ko/torbutton.dtd b/src/chrome/locale/ko/torbutton.dtd
index 14a24aa..f3f2093 100644
--- a/src/chrome/locale/ko/torbutton.dtd
+++ b/src/chrome/locale/ko/torbutton.dtd
@@ -33,7 +33,7 @@
<!ENTITY torbutton.prefs.resist_fingerprinting_tooltip "이 상자를 체크 해둠으로써 웹사이트가 당신의 식별 할 수 있는 요소를 숨길 수 있습니다. 그것에는 컴퓨터 성능, 키보드 레이아웃, 로케일, 플러그인이 설치된 장소, 설치된 플러그인의 목록, 네트워크 상태, 화면 방향, 화면 크기, 사이트 별 확대 / 축소 수준, 지원되는 파일 형식, 시스템 색, WebGL 기능 등이 있습니다.">
<!ENTITY torbutton.prefs.sec_caption "보안 등급">
<!ENTITY torbutton.prefs.sec_caption_tooltip "보안 슬라이더를 사용하면 특정 브라우저 기능이 비활성화 되어 브라우저가 해킹 시도에 취약해질 수 있습니다.">
-<!ENTITY torbutton.prefs.sec_standard_label "Standard">
+<!ENTITY torbutton.prefs.sec_standard_label "표준">
<!ENTITY torbutton.prefs.sec_standard_description "All Tor Browser and website features are enabled.">
<!ENTITY torbutton.prefs.sec_safer_label "Safer">
<!ENTITY torbutton.prefs.sec_safer_description "Disables website features that are often dangerous, causing some sites to lose functionality.">
@@ -41,9 +41,9 @@
<!ENTITY torbutton.prefs.sec_safest_label "Safest">
<!ENTITY torbutton.prefs.sec_safest_description "Only allows website features required for static sites and basic services. These changes affect images, media, and scripts.">
<!ENTITY torbutton.prefs.sec_safest_list_label "At the safest setting:">
-<!ENTITY torbutton.prefs.sec_learn_more_label "Learn more">
+<!ENTITY torbutton.prefs.sec_learn_more_label "더 알아보기">
<!ENTITY torbutton.prefs.sec_js_on_https_sites_only "JavaScript is disabled on non-HTTPS sites.">
-<!ENTITY torbutton.prefs.sec_js_disabled "JavaScript is disabled by default on all sites.">
+<!ENTITY torbutton.prefs.sec_js_disabled "자바 스크립트는 기본 설정으로 모든 사이트에서 비활성화 되어 있습니다.">
<!ENTITY torbutton.prefs.sec_limit_typography "Some fonts and math symbols are disabled.">
<!ENTITY torbutton.prefs.sec_limit_graphics_and_typography "Some fonts, icons, math symbols, and images are disabled.">
<!ENTITY torbutton.prefs.sec_click_to_play_media "Audio and video (HTML5 media) are click-to-play.">
diff --git a/src/chrome/locale/pl/torbutton.dtd b/src/chrome/locale/pl/torbutton.dtd
index b1af8a5..47e21ca 100644
--- a/src/chrome/locale/pl/torbutton.dtd
+++ b/src/chrome/locale/pl/torbutton.dtd
@@ -33,7 +33,7 @@
<!ENTITY torbutton.prefs.resist_fingerprinting_tooltip "Zachowaj to pole zaznaczone, aby ukryć przed stronami internetowymi elementy, które mogą być u ciebie unikalne, wliczając w to wydajność komputera, układ klawiatury, lokalizację, położenie zainstalowanych wtyczek, listę zainstalowanych wtyczek, stan sieci, orientację ekranu, rozmiar ekranu, określone poziomy powiększenia, obsługiwane typy plików, kolory systemu oraz możliwości WebGL.">
<!ENTITY torbutton.prefs.sec_caption "Poziom bezpieczeństwa">
<!ENTITY torbutton.prefs.sec_caption_tooltip "Suwak poziomu bezpieczeństwa pozwala na wyłączenie pewnych funkcji przeglądarki, które mogą uczynić ten program bardziej narażonym na próby ataku hakerskiego.">
-<!ENTITY torbutton.prefs.sec_standard_label "Standard">
+<!ENTITY torbutton.prefs.sec_standard_label "Standardowy">
<!ENTITY torbutton.prefs.sec_standard_description "Wszystkie funkcje Przeglądarki Tor i strony zostały włączone.">
<!ENTITY torbutton.prefs.sec_safer_label "Safer">
<!ENTITY torbutton.prefs.sec_safer_description "Disables website features that are often dangerous, causing some sites to lose functionality.">
diff --git a/src/chrome/locale/vi/aboutTor.properties b/src/chrome/locale/vi/aboutTor.properties
index ca9fa4e..5542fac 100644
--- a/src/chrome/locale/vi/aboutTor.properties
+++ b/src/chrome/locale/vi/aboutTor.properties
@@ -8,7 +8,7 @@ aboutTor.searchDDG.privacy.link=https://duckduckgo.com/privacy.html
# The following string is a link which replaces %2$S above.
aboutTor.searchDDG.search.link=https://duckduckgo.com/
-aboutTor.donationBanner.donate=Donate Now!
+aboutTor.donationBanner.donate=Tài trợ ngay bây giờ!
aboutTor.donationBanner.slogan=Tor: Powering Digital Resistance
aboutTor.donationBanner.mozilla=Give today and Mozilla will match your gift!
diff --git a/src/chrome/locale/vi/torbutton.dtd b/src/chrome/locale/vi/torbutton.dtd
index b5606a0..d86b90c 100644
--- a/src/chrome/locale/vi/torbutton.dtd
+++ b/src/chrome/locale/vi/torbutton.dtd
@@ -33,7 +33,7 @@
<!ENTITY torbutton.prefs.resist_fingerprinting_tooltip "Luôn đánh dấu hộp này để ẩn các dấu hiệu có thể là đặc trưng duy nhất về bạn, bao gồm khả năng làm việc của máy tính của bạn, cách sắp xếp của bàn phím, nơi ở, vị trí của các trình thêm vào (plugins) được cài đặt, danh sách của các trình thêm vào được cài đặt, trạng thái mạng của bạn, định hướng màn hình, kích thước màn hình, các mức độ phóng to-thu nhỏ đối với các trang cụ thể, các dạng tệp tin được hỗ trợ, các màu hệ thống, và các năng lực WebGL.">
<!ENTITY torbutton.prefs.sec_caption "Mức độ Bảo mật">
<!ENTITY torbutton.prefs.sec_caption_tooltip "Những Người điều chỉnh an ninh để cho bạn vô hiệu một vài tính năng của trình duyệt mà có thể làm trình duyệt của bạn dễ bị tổn thương đổi với những cố gắng tấn công.">
-<!ENTITY torbutton.prefs.sec_standard_label "Standard">
+<!ENTITY torbutton.prefs.sec_standard_label "Chuẩn">
<!ENTITY torbutton.prefs.sec_standard_description "All Tor Browser and website features are enabled.">
<!ENTITY torbutton.prefs.sec_safer_label "Safer">
<!ENTITY torbutton.prefs.sec_safer_description "Disables website features that are often dangerous, causing some sites to lose functionality.">
@@ -41,9 +41,9 @@
<!ENTITY torbutton.prefs.sec_safest_label "Safest">
<!ENTITY torbutton.prefs.sec_safest_description "Only allows website features required for static sites and basic services. These changes affect images, media, and scripts.">
<!ENTITY torbutton.prefs.sec_safest_list_label "At the safest setting:">
-<!ENTITY torbutton.prefs.sec_learn_more_label "Learn more">
+<!ENTITY torbutton.prefs.sec_learn_more_label "Biết thêm">
<!ENTITY torbutton.prefs.sec_js_on_https_sites_only "JavaScript is disabled on non-HTTPS sites.">
-<!ENTITY torbutton.prefs.sec_js_disabled "JavaScript is disabled by default on all sites.">
+<!ENTITY torbutton.prefs.sec_js_disabled "JavaScript mặc định bị vô hiệu trên tất cả các trang.">
<!ENTITY torbutton.prefs.sec_limit_typography "Some fonts and math symbols are disabled.">
<!ENTITY torbutton.prefs.sec_limit_graphics_and_typography "Some fonts, icons, math symbols, and images are disabled.">
<!ENTITY torbutton.prefs.sec_click_to_play_media "Audio and video (HTML5 media) are click-to-play.">
diff --git a/src/chrome/locale/zh-CN/torbutton.dtd b/src/chrome/locale/zh-CN/torbutton.dtd
index 95cb470..a43d991 100644
--- a/src/chrome/locale/zh-CN/torbutton.dtd
+++ b/src/chrome/locale/zh-CN/torbutton.dtd
@@ -33,7 +33,7 @@
<!ENTITY torbutton.prefs.resist_fingerprinting_tooltip "勾选此选项以避免网站获取您的浏览器指纹信息,包括您的计算机性能、键盘布局、系统语言、安装插件的位置、已安装插件列表、您的网络状态、屏幕方向、屏幕尺寸、特定网站缩放级别、支持的文件类型、系统颜色、WebGL 功能。">
<!ENTITY torbutton.prefs.sec_caption "安全等级">
<!ENTITY torbutton.prefs.sec_caption_tooltip "安全滑块可禁用某些浏览器功能,避免因这些功能导致的漏洞而受到攻击。">
-<!ENTITY torbutton.prefs.sec_standard_label "正式的">
+<!ENTITY torbutton.prefs.sec_standard_label "标准安全性">
<!ENTITY torbutton.prefs.sec_standard_description "将启用所有Tor浏览器与网站功能。">
<!ENTITY torbutton.prefs.sec_safer_label "中等安全性">
<!ENTITY torbutton.prefs.sec_safer_description "禁用网站功能通常是危险的,这会导致一些站不能正常运作。">
1
0

[tor-browser-build/master] Bug 15599: Range requests used by pdfjs are not isolated to URL bar domain
by gk@torproject.org 21 Feb '18
by gk@torproject.org 21 Feb '18
21 Feb '18
commit 7db15759a31a7381d0a43b1a40373cd9f970210a
Author: Richard Pospesel <richard(a)torproject.org>
Date: Thu Jan 18 19:15:55 2018 -0800
Bug 15599: Range requests used by pdfjs are not isolated to URL bar domain
After much debugging and investigation, it seems that the required
information needed to drive the first-party domain cannot be accessed in
the XmlHttpRequest creation path. The JS context the part of pdf.js making
the range requests runs with does not have a reference to parent window and
associated LoadInfo information (which includes the requesting first-party
domain).
To fix the issue, we can easily disable support for range-based requests
via the pdfjs.disableRange property. However, the side-effect here is
that pages can not be read as they load; the entire pdf must be
downloaded before it can be read and interacted with.
This patch updates each platforms extension-overrides.js to change this
pref.
---
.../Data/Browser/profile.default/preferences/extension-overrides.js | 4 ++++
.../Data/Browser/profile.default/preferences/extension-overrides.js | 4 ++++
.../Data/Browser/profile.default/preferences/extension-overrides.js | 4 ++++
3 files changed, 12 insertions(+)
diff --git a/projects/tor-browser/Bundle-Data/linux/Data/Browser/profile.default/preferences/extension-overrides.js b/projects/tor-browser/Bundle-Data/linux/Data/Browser/profile.default/preferences/extension-overrides.js
index 54dcf91..9476edc 100644
--- a/projects/tor-browser/Bundle-Data/linux/Data/Browser/profile.default/preferences/extension-overrides.js
+++ b/projects/tor-browser/Bundle-Data/linux/Data/Browser/profile.default/preferences/extension-overrides.js
@@ -56,3 +56,7 @@ pref("noscript.restrictSubdocScripting", true);
pref("noscript.showVolatilePrivatePermissionsToggle", false);
pref("noscript.volatilePrivatePermissions", true);
pref("noscript.clearClick", 0);
+
+# PDF.js
+// needs to be a user_pref because pdf.js blows away non-user prefs with it's own defaults each time
+user_pref("pdfjs.disableRange", true);
diff --git a/projects/tor-browser/Bundle-Data/mac/TorBrowser/Data/Browser/profile.default/preferences/extension-overrides.js b/projects/tor-browser/Bundle-Data/mac/TorBrowser/Data/Browser/profile.default/preferences/extension-overrides.js
index 54dcf91..9476edc 100644
--- a/projects/tor-browser/Bundle-Data/mac/TorBrowser/Data/Browser/profile.default/preferences/extension-overrides.js
+++ b/projects/tor-browser/Bundle-Data/mac/TorBrowser/Data/Browser/profile.default/preferences/extension-overrides.js
@@ -56,3 +56,7 @@ pref("noscript.restrictSubdocScripting", true);
pref("noscript.showVolatilePrivatePermissionsToggle", false);
pref("noscript.volatilePrivatePermissions", true);
pref("noscript.clearClick", 0);
+
+# PDF.js
+// needs to be a user_pref because pdf.js blows away non-user prefs with it's own defaults each time
+user_pref("pdfjs.disableRange", true);
diff --git a/projects/tor-browser/Bundle-Data/windows/Data/Browser/profile.default/preferences/extension-overrides.js b/projects/tor-browser/Bundle-Data/windows/Data/Browser/profile.default/preferences/extension-overrides.js
index 54dcf91..9476edc 100644
--- a/projects/tor-browser/Bundle-Data/windows/Data/Browser/profile.default/preferences/extension-overrides.js
+++ b/projects/tor-browser/Bundle-Data/windows/Data/Browser/profile.default/preferences/extension-overrides.js
@@ -56,3 +56,7 @@ pref("noscript.restrictSubdocScripting", true);
pref("noscript.showVolatilePrivatePermissionsToggle", false);
pref("noscript.volatilePrivatePermissions", true);
pref("noscript.clearClick", 0);
+
+# PDF.js
+// needs to be a user_pref because pdf.js blows away non-user prefs with it's own defaults each time
+user_pref("pdfjs.disableRange", true);
1
0

[tor-browser-build/master] Merge remote-tracking branch 'boklm/bug_20892_v2'
by gk@torproject.org 21 Feb '18
by gk@torproject.org 21 Feb '18
21 Feb '18
commit 79538fbfc42b467f7badce8eb5d024d74392f8a1
Merge: 448a263 66da4f6
Author: Georg Koppen <gk(a)torproject.org>
Date: Wed Feb 21 07:25:40 2018 +0000
Merge remote-tracking branch 'boklm/bug_20892_v2'
tools/update-responses/update_responses | 22 ++++++++--------------
1 file changed, 8 insertions(+), 14 deletions(-)
1
0