tor-commits
Threads by month
- ----- 2025 -----
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2024 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2023 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2022 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2021 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2020 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2019 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2018 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2017 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2016 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2015 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2014 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2013 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2012 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2011 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
July 2011
- 16 participants
- 868 discussions
commit 2de86992bd17a018a3d6efc80944259ffb2d1885
Author: Tomas Touceda <chiiph(a)torproject.org>
Date: Mon Jun 13 11:02:45 2011 -0300
First part of interfacing TorControl
---
.../plugin/prototypes/TorControlPrototype.cpp | 463 ++++++++++++++++++++
.../plugin/prototypes/TorControlPrototype.h | 350 +++++++++++++++
2 files changed, 813 insertions(+), 0 deletions(-)
diff --git a/src/vidalia/plugin/prototypes/TorControlPrototype.cpp b/src/vidalia/plugin/prototypes/TorControlPrototype.cpp
new file mode 100644
index 0000000..75e08d5
--- /dev/null
+++ b/src/vidalia/plugin/prototypes/TorControlPrototype.cpp
@@ -0,0 +1,463 @@
+#include "TorControlPrototype.h"
+
+TorControlPrototype::TorControlPrototype()
+ : QObject(), QScriptable() {}
+
+void
+TorControlPrototype::start(const QString &tor, const QStringList &args)
+{
+ TorControl *obj = qscriptvalue_cast<TorControl *>(thisObject());
+
+ if(obj)
+ obj->start(tor, args);
+}
+
+bool
+TorControlPrototype::stop(QString *errmsg = 0)
+{
+ TorControl *obj = qscriptvalue_cast<TorControl *>(thisObject());
+
+ if(obj)
+ return obj->stop(errmsg);
+}
+
+bool
+TorControlPrototype::isRunning()
+{
+ TorControl *obj = qscriptvalue_cast<TorControl *>(thisObject());
+
+ if(obj)
+ return obj->isRunning();
+}
+
+bool
+TorControlPrototype::isVidaliaRunningTor()
+{
+ TorControl *obj = qscriptvalue_cast<TorControl *>(thisObject());
+
+ if(obj)
+ return obj->isVidaliaRunningTor();
+}
+
+void
+TorControlPrototype::closeTorStdout()
+{
+ TorControl *obj = qscriptvalue_cast<TorControl *>(thisObject());
+
+ if(obj)
+ obj->closeTorStdout();
+}
+
+void
+TorControlPrototype::connect(const QHostAddress &address, quint16 port)
+{
+ TorControl *obj = qscriptvalue_cast<TorControl *>(thisObject());
+
+ if(obj)
+ obj->connect(address, port);
+}
+
+void
+TorControlPrototype::connect(const QString &path)
+{
+ TorControl *obj = qscriptvalue_cast<TorControl *>(thisObject());
+
+ if(obj)
+ obj->connect(path);
+}
+
+void
+TorControlPrototype::disconnect()
+{
+ TorControl *obj = qscriptvalue_cast<TorControl *>(thisObject());
+
+ if(obj)
+ obj->disconnect();
+}
+
+bool
+TorControlPrototype::isConnected()
+{
+ TorControl *obj = qscriptvalue_cast<TorControl *>(thisObject());
+
+ if(obj)
+ return obj->isConnected();
+}
+
+bool
+TorControlPrototype::authenticate(const QByteArray cookie, QString *errmsg = 0)
+{
+ TorControl *obj = qscriptvalue_cast<TorControl *>(thisObject());
+
+ if(obj)
+ return obj->authenticate(cookie, errmsg);
+}
+
+bool
+TorControlPrototype::authenticate(const QString &password = QString(), QString *errmsg = 0)
+{
+ TorControl *obj = qscriptvalue_cast<TorControl *>(thisObject());
+
+ if(obj)
+ return obj->authenticate(password, errmsg);
+}
+
+ProtocolInfo
+TorControlPrototype::protocolInfo(QString *errmsg = 0)
+{
+ TorControl *obj = qscriptvalue_cast<TorControl *>(thisObject());
+
+ if(obj)
+ return obj->protocolInfo(errmsg);
+}
+
+BootstrapStatus
+TorControlPrototype::bootstrapStatus(QString *errmsg = 0)
+{
+ TorControl *obj = qscriptvalue_cast<TorControl *>(thisObject());
+
+ if(obj)
+ return obj->bootstrapStatus(errmsg);
+}
+
+bool
+TorControlPrototype::isCircuitEstablished()
+{
+ TorControl *obj = qscriptvalue_cast<TorControl *>(thisObject());
+
+ if(obj)
+ return obj->isCircuitEstablished();
+}
+
+bool
+TorControlPrototype::getInfo(QHash<QString,QString> &map, QString *errmsg = 0)
+{
+ TorControl *obj = qscriptvalue_cast<TorControl *>(thisObject());
+
+ if(obj)
+ return obj->getInfo(map, errmsg);
+}
+
+bool
+TorControlPrototype::getInfo(QString key, QString &val, QString *errmsg = 0)
+{
+ TorControl *obj = qscriptvalue_cast<TorControl *>(thisObject());
+
+ if(obj)
+ return obj->getInfo(key, val, errmsg);
+}
+
+QVariantMap
+TorControlPrototype::getInfo(const QStringList &keys, QString *errmsg = 0)
+{
+ TorControl *obj = qscriptvalue_cast<TorControl *>(thisObject());
+
+ if(obj)
+ return obj->getInfo(keys, errmsg);
+}
+
+QVariant
+TorControlPrototype::getInfo(const QString &key, QString *errmsg = 0)
+{
+ TorControl *obj = qscriptvalue_cast<TorControl *>(thisObject());
+
+ if(obj)
+ return obj->getInfo(key, errmsg);
+}
+
+bool
+TorControlPrototype::signal(TorSignal::Signal sig, QString *errmsg = 0)
+{
+ TorControl *obj = qscriptvalue_cast<TorControl *>(thisObject());
+
+ if(obj)
+ return obj->signal(sig, errmsg);
+}
+
+QHostAddress
+TorControlPrototype::getSocksAddress(QString *errmsg = 0)
+{
+ TorControl *obj = qscriptvalue_cast<TorControl *>(thisObject());
+
+ if(obj)
+ return obj->getSocksAddress(errmsg);
+}
+
+QStringList
+TorControlPrototype::getSocksAddressList(QString *errmsg = 0)
+{
+ TorControl *obj = qscriptvalue_cast<TorControl *>(thisObject());
+
+ if(obj)
+ return obj->getSocksAddressList(errmsg);
+}
+
+quint16
+TorControlPrototype::getSocksPort(QString *errmsg = 0)
+{
+ TorControl *obj = qscriptvalue_cast<TorControl *>(thisObject());
+
+ if(obj)
+ return obj->getSocksPort(errmsg);
+}
+
+QList
+TorControlPrototype::<quint16> getSocksPortList(QString *errmsg = 0)
+{
+ TorControl *obj = qscriptvalue_cast<TorControl *>(thisObject());
+
+ if(obj)
+ return obj->quint16> getSocksPortList(errmsg);
+}
+
+QString
+TorControlPrototype::getTorVersionString()
+{
+ TorControl *obj = qscriptvalue_cast<TorControl *>(thisObject());
+
+ if(obj)
+ return obj->getTorVersionString();
+}
+
+quint32
+TorControlPrototype::getTorVersion()
+{
+ TorControl *obj = qscriptvalue_cast<TorControl *>(thisObject());
+
+ if(obj)
+ return obj->getTorVersion();
+}
+
+bool
+TorControlPrototype::setEvent(TorEvents::Event e, bool add = true, bool set = true, QString *errmsg = 0)
+{
+ TorControl *obj = qscriptvalue_cast<TorControl *>(thisObject());
+
+ if(obj)
+ return obj->setEvent(e, add, set, errmsg);
+}
+
+bool
+TorControlPrototype::setEvents(QString *errmsg = 0)
+{
+ TorControl *obj = qscriptvalue_cast<TorControl *>(thisObject());
+
+ if(obj)
+ return obj->setEvents(errmsg);
+}
+
+bool
+TorControlPrototype::setConf(QHash<QString,QString> map, QString *errmsg = 0)
+{
+ TorControl *obj = qscriptvalue_cast<TorControl *>(thisObject());
+
+ if(obj)
+ return obj->setConf(map, errmsg);
+}
+
+bool
+TorControlPrototype::setConf(QString key, QString value, QString *errmsg = 0)
+{
+ TorControl *obj = qscriptvalue_cast<TorControl *>(thisObject());
+
+ if(obj)
+ returb obj->setConf(key, value, errmsg);
+}
+
+bool
+TorControlPrototype::setConf(QString keyAndValue, QString *errmsg = 0)
+{
+ TorControl *obj = qscriptvalue_cast<TorControl *>(thisObject());
+
+ if(obj)
+ return obj->setConf(keyAndValue, errmsg);
+}
+
+bool
+TorControlPrototype::getConf(QHash<QString,QString> &map, QString *errmsg = 0)
+{
+ TorControl *obj = qscriptvalue_cast<TorControl *>(thisObject());
+
+ if(obj)
+ return obj->getConf(map, errmsg);
+}
+
+bool
+TorControlPrototype::getConf(QHash<QString,QStringList> &map, QString *errmsg = 0)
+{
+ TorControl *obj = qscriptvalue_cast<TorControl *>(thisObject());
+
+ if(obj)
+ return obj->getConf(map, errmsg);
+}
+
+bool
+TorControlPrototype::getConf(QString key, QString &value, QString *errmsg = 0)
+{
+ TorControl *obj = qscriptvalue_cast<TorControl *>(thisObject());
+
+ if(obj)
+ return obj->getConf(key, value, errmsg);
+}
+
+bool
+TorControlPrototype::getConf(QString key, QStringList &value, QString *errmsg = 0)
+{
+ TorControl *obj = qscriptvalue_cast<TorControl *>(thisObject());
+
+ if(obj)
+ return obj->getConf(key, value, errmsg);
+}
+
+QVariantMap
+TorControlPrototype::getConf(const QStringList &keys, QString *errmsg = 0)
+{
+ TorControl *obj = qscriptvalue_cast<TorControl *>(thisObject());
+
+ if(obj)
+ return obj->getConf(keys, errmsg);
+}
+
+QVariant
+TorControlPrototype::getConf(const QString &key, QString *errmsg = 0)
+{
+ TorControl *obj = qscriptvalue_cast<TorControl *>(thisObject());
+
+ if(obj)
+ return obj->getConf(key, errmsg);
+}
+
+QString
+TorControlPrototype::getHiddenServiceConf(const QString &key, QString *errmsg = 0)
+{
+ TorControl *obj = qscriptvalue_cast<TorControl *>(thisObject());
+
+ if(obj)
+ return obj->getHiddenServiceConf(key, errmsg);
+}
+
+bool
+TorControlPrototype::saveConf(QString *errmsg = 0)
+{
+ TorControl *obj = qscriptvalue_cast<TorControl *>(thisObject());
+
+ if(obj)
+ return obj->saveConf(errmsg);
+}
+
+bool
+TorControlPrototype::resetConf(QStringList keys, QString *errmsg = 0)
+{
+ TorControl *obj = qscriptvalue_cast<TorControl *>(thisObject());
+
+ if(obj)
+ return obj->resetConf(keys, errmsg);
+}
+
+bool
+TorControlPrototype::resetConf(QString key, QString *errmsg = 0)
+{
+ TorControl *obj = qscriptvalue_cast<TorControl *>(thisObject());
+
+ if(obj)
+ return obj->resetConf(key, errmsg);
+}
+
+QStringList
+TorControlPrototype::getRouterDescriptorText(const QString &id, QString *errmsg = 0)
+{
+ TorControl *obj = qscriptvalue_cast<TorControl *>(thisObject());
+
+ if(obj)
+ return obj->getRouterDescriptorText(id, errmsg);
+}
+
+RouterDescriptor
+TorControlPrototype::getRouterDescriptor(const QString &id, QString *errmsg = 0)
+{
+ TorControl *obj = qscriptvalue_cast<TorControl *>(thisObject());
+
+ if(obj)
+ return obj->getRouterDescriptor(id, errmsg);
+}
+
+RouterStatus
+TorControlPrototype::getRouterStatus(const QString &id, QString *errmsg = 0)
+{
+ TorControl *obj = qscriptvalue_cast<TorControl *>(thisObject());
+
+ if(obj)
+ return obj->getRouterStatus(id, errmsg);
+}
+
+NetworkStatus
+TorControlPrototype::getNetworkStatus(QString *errmsg = 0)
+{
+ TorControl *obj = qscriptvalue_cast<TorControl *>(thisObject());
+
+ if(obj)
+ return obj->getNetworkStatus(errmsg);
+}
+
+DescriptorAnnotations
+TorControlPrototype::getDescriptorAnnotations(const QString &id, QString *errmsg = 0)
+{
+ TorControl *obj = qscriptvalue_cast<TorControl *>(thisObject());
+
+ if(obj)
+ return obj->getDescriptorAnnotations(id, errmsg);
+}
+
+CircuitList
+TorControlPrototype::getCircuits(QString *errmsg = 0)
+{
+ TorControl *obj = qscriptvalue_cast<TorControl *>(thisObject());
+
+ if(obj)
+ return obj->getCircuits(errmsg);
+}
+
+StreamList
+TorControlPrototype::getStreams(QString *errmsg = 0)
+{
+ TorControl *obj = qscriptvalue_cast<TorControl *>(thisObject());
+
+ if(obj)
+ return obj->getStreams(errmsg);
+}
+
+AddressMap
+TorControlPrototype::getAddressMap(AddressMap::AddressMapType type = AddressMap::AddressMapAll, QString *errmsg = 0)
+{
+ TorControl *obj = qscriptvalue_cast<TorControl *>(thisObject());
+
+ if(obj)
+ return obj->getAddressMap(type, errmsg);
+}
+
+QString
+TorControlPrototype::ipToCountry(const QHostAddress &ip, QString *errmsg = 0)
+{
+ TorControl *obj = qscriptvalue_cast<TorControl *>(thisObject());
+
+ if(obj)
+ return obj->ipToCountry(ip, errmsg);
+}
+
+bool
+TorControlPrototype::closeCircuit(const CircuitId &circId, bool ifUnused = false, QString *errmsg = 0)
+{
+ TorControl *obj = qscriptvalue_cast<TorControl *>(thisObject());
+
+ if(obj)
+ return obj->closeCircuit(circId, ifUnused, errmsg);
+}
+
+bool
+TorControlPrototype::closeStream(const StreamId &streamId, QString *errmsg = 0)
+{
+ TorControl *obj = qscriptvalue_cast<TorControl *>(thisObject());
+
+ if(obj)
+ return obj->closeStream(streamId, errmsg);
+}
diff --git a/src/vidalia/plugin/prototypes/TorControlPrototype.h b/src/vidalia/plugin/prototypes/TorControlPrototype.h
new file mode 100644
index 0000000..0327b74
--- /dev/null
+++ b/src/vidalia/plugin/prototypes/TorControlPrototype.h
@@ -0,0 +1,350 @@
+/*
+** This file is part of Vidalia, and is subject to the license terms in the
+** LICENSE file, found in the top level directory of this distribution. If
+** you did not receive the LICENSE file with this file, you may obtain it
+** from the Vidalia source package distributed by the Vidalia Project at
+** http://www.torproject.org/projects/vidalia.html. No part of Vidalia,
+** including this file, may be copied, modified, propagated, or distributed
+** except according to the terms described in the LICENSE file.
+*/
+
+/*
+** \file TorControlPrototype.h
+** \brief Object for interacting with the Tor process and control interface
+*/
+
+#ifndef _TORCONTROLPROTO_H
+#define _TORCONTROLPROTO_H
+
+#include <QtScript>
+
+#include "TorControl.h"
+
+class TorControlPrototype : public QObject, QScriptable
+{
+ Q_OBJECT
+
+public:
+ TorControlPrototype();
+
+ /** Start the Tor process */
+ Q_INVOKABLE void start(const QString &tor, const QStringList &args);
+ /** Stop the Tor process */
+ Q_INVOKABLE bool stop(QString *errmsg = 0);
+ /** Detect if the Tor process is running */
+ Q_INVOKABLE bool isRunning();
+ /** Detects if the Tor process is running under Vidalia. */
+ Q_INVOKABLE bool isVidaliaRunningTor();
+ /** Stops reading log messages from the Tor process's stdout. This has no
+ * effect if isVidaliaRunningTor() is false. */
+ Q_INVOKABLE void closeTorStdout();
+
+ /** Connect to Tor's control socket */
+ Q_INVOKABLE void connect(const QHostAddress &address, quint16 port);
+ Q_INVOKABLE void connect(const QString &path);
+ /** Disconnect from Tor's control socket */
+ Q_INVOKABLE void disconnect();
+ /** Check if we're connected to Tor's control socket */
+ Q_INVOKABLE bool isConnected();
+ /** Sends an authentication cookie to Tor. */
+ Q_INVOKABLE bool authenticate(const QByteArray cookie, QString *errmsg = 0);
+ /** Sends an authentication password to Tor. */
+ Q_INVOKABLE bool authenticate(const QString &password = QString(), QString *errmsg = 0);
+
+ /** Sends a PROTOCOLINFO command to Tor and parses the response. */
+ Q_INVOKABLE ProtocolInfo protocolInfo(QString *errmsg = 0);
+
+ /** Returns the Tor software's current bootstrap phase and status. */
+ Q_INVOKABLE BootstrapStatus bootstrapStatus(QString *errmsg = 0);
+
+ /** Returns true if Tor either has an open circuit or (on Tor >=
+ * 0.2.0.1-alpha) has previously decided it's able to establish a circuit. */
+ Q_INVOKABLE bool isCircuitEstablished();
+
+ /** Sends a GETINFO message to Tor based on the given keys */
+ Q_INVOKABLE bool getInfo(QHash<QString,QString> &map, QString *errmsg = 0);
+ /** Sends a GETINFO message for a single info value to Tor */
+ Q_INVOKABLE bool getInfo(QString key, QString &val, QString *errmsg = 0);
+
+ /** Sends a GETINFO message to Tor using the given list of <b>keys</b> and
+ * returns a QVariantMap containing the specified keys and their values as
+ * returned by Tor. Returns a default constructed QVariantMap on failure. */
+ Q_INVOKABLE QVariantMap getInfo(const QStringList &keys, QString *errmsg = 0);
+ /** Sends a GETINFO message to Tor with a single <b>key</b> and returns a
+ * QVariant containing the value returned by Tor. Returns a default
+ * constructed QVariant on failure. */
+ Q_INVOKABLE QVariant getInfo(const QString &key, QString *errmsg = 0);
+
+ /** Sends a signal to Tor */
+ Q_INVOKABLE bool signal(TorSignal::Signal sig, QString *errmsg = 0);
+
+ /** Returns an address on which Tor is listening for application
+ * requests. If none are available, a null QHostAddress is returned. */
+ Q_INVOKABLE QHostAddress getSocksAddress(QString *errmsg = 0);
+ /** Returns a (possibly empty) list of all currently configured
+ * SocksListenAddress entries. */
+ Q_INVOKABLE QStringList getSocksAddressList(QString *errmsg = 0);
+ /** Returns a valid SOCKS port for Tor, or 0 if Tor is not accepting
+ * application requests. */
+ Q_INVOKABLE quint16 getSocksPort(QString *errmsg = 0);
+ /** Returns a list of all currently configured SOCKS ports. If Tor is not
+ * accepting any application connections, an empty list will be returned. */
+ Q_INVOKABLE QList<quint16> getSocksPortList(QString *errmsg = 0);
+
+ /** Returns Tor's version as a string. */
+ Q_INVOKABLE QString getTorVersionString();
+ /** Returns Tor's version as a numeric value. */
+ Q_INVOKABLE quint32 getTorVersion();
+
+ /** Sets an event and its handler. If add is true, then the event is added,
+ * otherwise it is removed. If set is true, then the given event will be
+ * registered with Tor. */
+ Q_INVOKABLE bool setEvent(TorEvents::Event e, bool add = true, bool set = true,
+ QString *errmsg = 0);
+ /** Register events of interest with Tor */
+ Q_INVOKABLE bool setEvents(QString *errmsg = 0);
+
+ /** Sets each configuration key in <b>map</b> to the value associated with its key. */
+ Q_INVOKABLE bool setConf(QHash<QString,QString> map, QString *errmsg = 0);
+ /** Sets a single configuration key to the given value. */
+ Q_INVOKABLE bool setConf(QString key, QString value, QString *errmsg = 0);
+ /** Sets a single configuration string that is formatted <key=escaped value>. */
+ Q_INVOKABLE bool setConf(QString keyAndValue, QString *errmsg = 0);
+ /** Gets values for a set of configuration keys, each of which has a single
+ * value. */
+ Q_INVOKABLE bool getConf(QHash<QString,QString> &map, QString *errmsg = 0);
+ /** Gets a set of configuration keyvalues and stores them in <b>map</b>. */
+ Q_INVOKABLE bool getConf(QHash<QString,QStringList> &map, QString *errmsg = 0);
+ /** Gets a single configuration value for <b>key</b>. */
+ Q_INVOKABLE bool getConf(QString key, QString &value, QString *errmsg = 0);
+ /** Gets a list of configuration values for <b>key</b>. */
+ Q_INVOKABLE bool getConf(QString key, QStringList &value, QString *errmsg = 0);
+
+ /** Sends a GETCONF message to Tor using the given list of <b>keys</b> and
+ * returns a QVariantMap containing the specified keys and their values as
+ * returned by Tor. Returns a default constructed QVariantMap on failure. */
+ Q_INVOKABLE QVariantMap getConf(const QStringList &keys, QString *errmsg = 0);
+ /** Sends a GETCONF message to Tor with a single <b>key</b> and returns a
+ * QVariant containing the value returned by Tor. Returns a default
+ * constructed QVariant on failure. */
+ Q_INVOKABLE QVariant getConf(const QString &key, QString *errmsg = 0);
+ /** Sends a GETCONF message to Tor with the single key and returns a QString
+ * containing the value returned by Tor */
+ Q_INVOKABLE QString getHiddenServiceConf(const QString &key, QString *errmsg = 0);
+
+ /** Asks Tor to save the current configuration to its torrc */
+ Q_INVOKABLE bool saveConf(QString *errmsg = 0);
+ /** Tells Tor to reset the given configuration keys back to defaults. */
+ Q_INVOKABLE bool resetConf(QStringList keys, QString *errmsg = 0);
+ /** Tells Tor to reset a configuration key back to its default value. */
+ Q_INVOKABLE bool resetConf(QString key, QString *errmsg = 0);
+
+ /** Returns an unparsed router descriptor for the router whose fingerprint
+ * matches <b>id</b>. The returned text can later be parsed by the
+ * RouterDescriptor class. If <b>id</b> is invalid, then an empty
+ * QStringList is returned. */
+ Q_INVOKABLE QStringList getRouterDescriptorText(const QString &id, QString *errmsg = 0);
+ /** Returns the descriptor for the router whose fingerprint matches
+ * <b>id</b>. If <b>id</b> is invalid or the router's descriptor cannot be
+ * parsed, then an invalid RouterDescriptor is returned. */
+ Q_INVOKABLE RouterDescriptor getRouterDescriptor(const QString &id, QString *errmsg = 0);
+ /** Returns the status of the router whose fingerprint matches <b>id</b>. If
+ * <b>id</b> is invalid or the router's status cannot be parsed, then an
+ * invalid RouterStatus is returned. */
+ Q_INVOKABLE RouterStatus getRouterStatus(const QString &id, QString *errmsg = 0);
+ /** Returns a RouterStatus object for every known router in the network. If
+ * the network status document cannot be parsed, then an empty NetworkStatus
+ * is returned. */
+ Q_INVOKABLE NetworkStatus getNetworkStatus(QString *errmsg = 0);
+ /** Returns the annotations for the router whose fingerprint matches
+ * <b>id</b>. If <b>id</b> is invalid or the router's descriptor cannot be
+ * parsed, then an empty DescriptorAnnotations is returned and
+ * <b>errmsg</b> is set if it's not NULL. (Tor >= 0.2.0.13-alpha only) */
+ Q_INVOKABLE DescriptorAnnotations getDescriptorAnnotations(const QString &id,
+ QString *errmsg = 0);
+
+ /** Gets a list of current circuits. */
+ Q_INVOKABLE CircuitList getCircuits(QString *errmsg = 0);
+ /** Gets a list of current streams. */
+ Q_INVOKABLE StreamList getStreams(QString *errmsg = 0);
+
+ /** Gets a list of address mappings of the type specified by <b>type</b>
+ * (defaults to <i>AddressMapAll</i>. */
+ Q_INVOKABLE AddressMap getAddressMap(
+ AddressMap::AddressMapType type = AddressMap::AddressMapAll,
+ QString *errmsg = 0);
+
+ /** Gets the ISO-3166 two-letter country code for <b>ip</b> from Tor.
+ * Returns a default-constructed QString on failure or if a country code
+ * is not known for <b>ip</b>. On failure, <b>errmsg</b> will be set if
+ * it's not NULL. */
+ Q_INVOKABLE QString ipToCountry(const QHostAddress &ip, QString *errmsg = 0);
+
+public slots:
+ /** Closes the circuit specified by <b>circId</b>. If <b>ifUnused</b> is
+ * true, then the circuit will not be closed unless it is unused. */
+ bool closeCircuit(const CircuitId &circId, bool ifUnused = false,
+ QString *errmsg = 0);
+ /** Closes the stream specified by <b>streamId</b>. */
+ bool closeStream(const StreamId &streamId, QString *errmsg = 0);
+
+signals:
+ /** Emitted when the Tor process has started */
+ void started();
+ /** Emitted when the Tor process fails to start. */
+ void startFailed(QString errmsg);
+ /** Emitted when the Tor process has stopped */
+ void stopped(int exitCode, QProcess::ExitStatus exitStatus);
+ /** Emitted when the Tor process has stopped. */
+ void stopped();
+ /** Emitted when the controller has connected to Tor */
+ void connected();
+ /** Emitted when the controller failed to connect to Tor. */
+ void connectFailed(QString errmsg);
+ /** Emitted when the controller has disconnected from Tor */
+ void disconnected();
+ /** Emitted when the control socket is connected and authenticated. */
+ void authenticated();
+ /** Emitted when Tor rejects our authentication attempt. */
+ void authenticationFailed(QString errmsg);
+
+ /** Emitted when Tor writes the message <b>msg</b> to the control port
+ * with message severity <b>level</b>.
+ */
+ void logMessage(tc::Severity level, const QString &msg);
+
+ /** Emitted when Tor sends a bandwidth usage update (roughly once every
+ * second). <b>bytesReceived</b> is the number of bytes read by Tor over
+ * the previous second and <b>bytesWritten</b> is the number of bytes
+ * sent over the same interval.
+ */
+ void bandwidthUpdate(quint64 bytesReceived, quint64 bytesSent);
+
+ /** Emitted when the stream status of <b>stream</b> has changed.
+ */
+ void streamStatusChanged(const Stream &stream);
+
+ /** Emitted when the circuit status of <b>circuit</b> has changed.
+ */
+ void circuitStatusChanged(const Circuit &circuit);
+
+ /** Emitted when Tor has mapped the address <b>from</b> to the address
+ * <b>to</b>. <b>expires</b> indicates the time at which when the address
+ * mapping will no longer be considered valid.
+ */
+ void addressMapped(const QString &from, const QString &to,
+ const QDateTime &expires);
+
+ /** Emitted when Tor has received one or more new router descriptors.
+ * <b>ids</b> contains a list of digests of the new descriptors.
+ */
+ void newDescriptors(const QStringList &ids);
+
+ /** Indicates Tor has been able to successfully establish one or more
+ * circuits.
+ */
+ void circuitEstablished();
+
+ /** Indicates that Tor has decided the user's Tor software <b>version</b>
+ * is no longer recommended for some <b>reason</b>. <b>recommended</b> is
+ * a list of Tor software versions that are considered current.
+ */
+ void dangerousTorVersion(tc::TorVersionStatus reason,
+ const QString &version,
+ const QStringList &recommended);
+
+ /** Emitted during Tor's startup process to indicate how far in its
+ * bootstrapping process it has progressed. <b>status</b> may indicate
+ * the current bootstrapping stage or an error during bootstrapping.
+ */
+ void bootstrapStatusChanged(const BootstrapStatus &status);
+
+ /** Emitted when the user attempts to establish a connection to some
+ * destination on port <b>port</b>, which is a port known to use
+ * plaintext connections (as determined by Tor's WarnPlaintextPorts and
+ * RejectPlaintextPorts torrc options). <b>rejected</b> indicates whether
+ * Tor rejected the connection or permitted it to connect anyway.
+ */
+ void dangerousPort(quint16 port, bool rejected);
+
+ /** Emitted when Tor detects a problem with a SOCKS connection from the
+ * user, such as a bad hostname, dangerous SOCKS protocol type, or a bad
+ * hostname. <b>type</b> indicates the type of error encountered and
+ * <b>destination</b> (if non-empty) specifies the attempted connection
+ * destination address or hostname.
+ */
+ void socksError(tc::SocksError type, const QString &destination);
+
+ /** Emitted when Tor decides the client's external IP address has changed
+ * to <b>ip</b>. If <b>hostname</b> is non-empty, Tor obtained the new
+ * value for <b>ip</b> by resolving <b>hostname</b>.
+ */
+ void externalAddressChanged(const QHostAddress &ip, const QString &hostname);
+
+ /** Indicates that Tor has determined the client's clock is potentially
+ * skewed by <b>skew</b> seconds relative to <b>source</b>.
+ */
+ void clockSkewed(int skew, const QString &source);
+
+ /** Emitted when Tor has encountered an internal bug. <b>reason</b> is
+ * Tor's description of the bug.
+ */
+ void bug(const QString &reason);
+
+ /** Emitted when Tor determines that the user's DNS provider is providing
+ * an address for non-existent domains when it should really be saying
+ * "NXDOMAIN".
+ */
+ void dnsHijacked();
+
+ /** Emitted when Tor determines that the user's DNS provider is providing
+ * a hijacked address even for well-known websites.
+ */
+ void dnsUseless();
+
+ /** Indicates Tor has started testing the reachability of its OR port
+ * using the IP address <b>ip</b> and port <b>port</b>.
+ */
+ void checkingOrPortReachability(const QHostAddress &ip, quint16 port);
+
+ /** Tor has completed testing the reachability of its OR port using
+ * the IP address <b>ip</b> and port <b>port</b>. If the user's OR port
+ * was reachable, <b>reachable</b> will be set to true.
+ */
+ void orPortReachabilityFinished(const QHostAddress &ip, quint16 port,
+ bool reachable);
+
+ /** Indicates Tor has started testing the reachability of its directory
+ * port using the IP address <b>ip</b> and port <b>port</b>.
+ */
+ void checkingDirPortReachability(const QHostAddress &ip, quint16 port);
+
+ /** Tor has completed testing the reachability of its directory port using
+ * the IP address <b>ip</b> and port <b>port</b>. If the user's directory
+ * port was reachable, <b>reachable</b> will be set to true.
+ */
+ void dirPortReachabilityFinished(const QHostAddress &ip, quint16 port,
+ bool reachable);
+
+ /** Emitted when the directory authority with IP address <b>ip</b> and
+ * port <b>port</b> rejected the user's server descriptor. <b>reason</b>
+ * describes why the descriptor was rejected (e.g., malformed, skewed
+ * clock, etc.).
+ */
+ void serverDescriptorRejected(const QHostAddress &ip, quint16 port,
+ const QString &reason);
+
+ /** Emitted when the directory authority with IP address <b>ip</b> and
+ * port <b>port</b> accepted the user's server descriptor.
+ */
+ void serverDescriptorAccepted(const QHostAddress &ip, quint16 port);
+
+ /** Emitted when at least one directory authority has accepted the user's
+ * server descriptor.
+ */
+ void serverDescriptorAccepted();
+};
+
+#endif
+
+
1
0
commit db3a4f43ed310b5e1e1fe778dfe8d6cf3c405ead
Author: Tomas Touceda <chiiph(a)gentoo.org>
Date: Thu Jun 2 14:02:26 2011 -0300
Provide more useful output
---
src/vidalia/plugin/DebugDialog.cpp | 41 +++++++++++++---
src/vidalia/plugin/DebugDialog.h | 11 ++++-
src/vidalia/plugin/DebugDialog.ui | 38 +++++++++++++++-
src/vidalia/plugin/PluginEngine.cpp | 24 ++++++----
src/vidalia/plugin/PluginWrapper.cpp | 83 ++++++++++++++++++++++++++-------
src/vidalia/plugin/PluginWrapper.h | 1 +
6 files changed, 159 insertions(+), 39 deletions(-)
diff --git a/src/vidalia/plugin/DebugDialog.cpp b/src/vidalia/plugin/DebugDialog.cpp
index b05fbe0..df2aa1e 100644
--- a/src/vidalia/plugin/DebugDialog.cpp
+++ b/src/vidalia/plugin/DebugDialog.cpp
@@ -1,28 +1,53 @@
#include "DebugDialog.h"
-QStringList DebugDialog::buffer;
+QStringList DebugDialog::outputBuffer;
+QStringList DebugDialog::syntaxBuffer;
+QStringList DebugDialog::exceptBuffer;
DebugDialog::DebugDialog(QWidget *parent)
: QDialog(parent)
{
ui.setupUi(this);
- foreach(QString line, buffer)
- ui.textEdit->setPlainText(QString("%1\n%2")
- .arg(ui.textEdit->toPlainText())
- .arg(line));
+ fillText(ui.tedOutput, outputBuffer);
+ fillText(ui.tedSyntax, syntaxBuffer);
+ fillText(ui.tedExceptions, exceptBuffer);
}
DebugDialog::~DebugDialog() {}
void
-DebugDialog::pDebug(const QString &msg)
+DebugDialog::fillText(QTextEdit *tedit, QStringList buffer)
+{
+ foreach(QString line, buffer) {
+ tedit->setPlainText(QString("%1\n%2")
+ .arg(tedit->toPlainText())
+ .arg(line));
+ }
+}
+
+void
+DebugDialog::outputDebug(const QString &msg)
+{
+ outputBuffer << msg;
+}
+
+void
+DebugDialog::syntaxDebug(const QString &msg)
+{
+ syntaxBuffer << msg;
+}
+
+void
+DebugDialog::exceptDebug(const QString &msg)
{
- buffer << msg;
+ exceptBuffer << msg;
}
void
DebugDialog::clear()
{
- buffer.clear();
+ outputBuffer.clear();
+ syntaxBuffer.clear();
+ exceptBuffer.clear();
}
diff --git a/src/vidalia/plugin/DebugDialog.h b/src/vidalia/plugin/DebugDialog.h
index ec69c3e..76b3bb6 100644
--- a/src/vidalia/plugin/DebugDialog.h
+++ b/src/vidalia/plugin/DebugDialog.h
@@ -13,11 +13,18 @@ class DebugDialog : public QDialog
DebugDialog(QWidget *parent = 0);
~DebugDialog();
- static void pDebug(const QString &msg);
+ void fillText(QTextEdit *tedit, QStringList buffer);
+
+ static void outputDebug(const QString &msg);
+ static void syntaxDebug(const QString &msg);
+ static void exceptDebug(const QString &msg);
+
static void clear();
private:
- static QStringList buffer;
+ static QStringList outputBuffer;
+ static QStringList syntaxBuffer;
+ static QStringList exceptBuffer;
Ui::DebugDialog ui;
};
diff --git a/src/vidalia/plugin/DebugDialog.ui b/src/vidalia/plugin/DebugDialog.ui
index 1ad0d2f..1107c3a 100644
--- a/src/vidalia/plugin/DebugDialog.ui
+++ b/src/vidalia/plugin/DebugDialog.ui
@@ -18,8 +18,42 @@
<normaloff>:/images/16x16/applications-system.png</normaloff>:/images/16x16/applications-system.png</iconset>
</property>
<layout class="QGridLayout" name="gridLayout">
- <item row="0" column="1" rowspan="2">
- <widget class="QTextEdit" name="textEdit"/>
+ <item row="0" column="0">
+ <widget class="QTabWidget" name="tabWidget">
+ <property name="currentIndex">
+ <number>0</number>
+ </property>
+ <widget class="QWidget" name="outputTab">
+ <attribute name="title">
+ <string>Plugin Output</string>
+ </attribute>
+ <layout class="QVBoxLayout" name="verticalLayout">
+ <item>
+ <widget class="QTextEdit" name="tedOutput"/>
+ </item>
+ </layout>
+ </widget>
+ <widget class="QWidget" name="syntaxTab">
+ <attribute name="title">
+ <string>Syntax Errors</string>
+ </attribute>
+ <layout class="QVBoxLayout" name="verticalLayout_2">
+ <item>
+ <widget class="QTextEdit" name="tedSyntax"/>
+ </item>
+ </layout>
+ </widget>
+ <widget class="QWidget" name="errorTab">
+ <attribute name="title">
+ <string>Exceptions</string>
+ </attribute>
+ <layout class="QVBoxLayout" name="verticalLayout_3">
+ <item>
+ <widget class="QTextEdit" name="tedExceptions"/>
+ </item>
+ </layout>
+ </widget>
+ </widget>
</item>
</layout>
</widget>
diff --git a/src/vidalia/plugin/PluginEngine.cpp b/src/vidalia/plugin/PluginEngine.cpp
index bad9c65..883dc24 100644
--- a/src/vidalia/plugin/PluginEngine.cpp
+++ b/src/vidalia/plugin/PluginEngine.cpp
@@ -21,16 +21,18 @@ PluginEngine::~PluginEngine()
void
PluginEngine::loadAllPlugins()
{
- DebugDialog::pDebug("loadAllPlugins()");
+ DebugDialog::outputDebug("Loading all plugins...");
VidaliaSettings settings;
QDir path = QDir(settings.pluginPath());
- qWarning() << "PluginPath" << path.absolutePath();
+ DebugDialog::outputDebug(QString("PluginPath=%1").arg(path.absolutePath()));
foreach(QString pdir, path.entryList(QDir::NoDotAndDotDot|QDir::AllDirs)) {
- qWarning() << "pdir" << pdir;
- QFileInfo finfo(QString("%1%2%3").arg(path.absolutePath()).arg(QDir::separator()).arg(pdir));
+ QFileInfo finfo(QString("%1%2%3")
+ .arg(path.absolutePath())
+ .arg(QDir::separator())
+ .arg(pdir));
if(finfo.isDir()) {
tryLoadPlugin(finfo.filePath());
@@ -41,18 +43,22 @@ PluginEngine::loadAllPlugins()
void
PluginEngine::tryLoadPlugin(QDir path)
{
- qWarning() << "tryLoadPlugin()" << path.absolutePath();
-
QStringList files = path.entryList();
- if(!files.contains("info.xml"))
+ if(!files.contains("info.xml")) {
+ DebugDialog::outputDebug(tr("WARNING: %1 doesn't have an info file.")
+ .arg(path.absolutePath()));
return;
+ }
- PluginWrapper *wrapper = new PluginWrapper(QString("%1%2info.xml").arg(path.absolutePath()).arg(QDir::separator()), this);
+ PluginWrapper *wrapper = new PluginWrapper(QString("%1%2info.xml")
+ .arg(path.absolutePath())
+ .arg(QDir::separator()), this);
// if it's persistent, start it right away
- if(wrapper->isPersistent())
+ if(wrapper->isPersistent()) {
wrapper->start();
+ }
wrappers << wrapper;
diff --git a/src/vidalia/plugin/PluginWrapper.cpp b/src/vidalia/plugin/PluginWrapper.cpp
index 8e839fa..2736dbc 100644
--- a/src/vidalia/plugin/PluginWrapper.cpp
+++ b/src/vidalia/plugin/PluginWrapper.cpp
@@ -1,5 +1,6 @@
#include "PluginWrapper.h"
#include "PluginEngine.h"
+#include "DebugDialog.h"
#include <QtXml>
@@ -12,13 +13,25 @@ PluginWrapper::PluginWrapper(const QString &info_path, PluginEngine *engine, QOb
processInfo(info_path);
foreach(QString path, _files) {
- qWarning() << path;
+ DebugDialog::outputDebug(tr("%1: Processing...").arg(name()));
+
QFile file(path);
if(file.open(QIODevice::ReadOnly)) {
- _engine->evaluate(file.readAll());
- qWarning() << "evaluated";
+ QString contents = file.readAll();
+ QScriptSyntaxCheckResult res = QScriptEngine::checkSyntax(contents);
+ if(res.state() == QScriptSyntaxCheckResult::Valid) {
+ DebugDialog::outputDebug("Everything's ok, evaluating...");
+ _engine->evaluate(contents);
+ } else {
+ DebugDialog::syntaxDebug(tr("%4: ERROR: Line: %1 - Column: %2\n%3")
+ .arg(res.errorLineNumber())
+ .arg(res.errorColumnNumber())
+ .arg(res.errorMessage())
+ .arg(name()));
+ }
} else
- qWarning() << "Error opening file";
+ DebugDialog::outputDebug(tr("%1: Error opening file %2")
+ .arg(name()).arg(path));
}
}
@@ -27,17 +40,23 @@ PluginWrapper::~PluginWrapper() {}
void
PluginWrapper::processInfo(const QString &path)
{
- qWarning() << "processInfo()";
-
QDomDocument info("Plugin Info");
QFile file(path);
if(!file.open(QIODevice::ReadOnly)) {
- qWarning() << "Problem opening xml file";
+ DebugDialog::outputDebug(tr("%2: ERROR: Cannot open %1")
+ .arg(path).arg(name()));
return;
}
- if(!info.setContent(&file)) {
- qWarning() << "Problem setting contents";
+ QString errMsg;
+ int errLine, errCol;
+
+ if(!info.setContent(&file, false, &errMsg, &errLine, &errCol)) {
+ DebugDialog::syntaxDebug(tr("%2: ERROR: Parsing %1")
+ .arg(file.fileName()).arg(name()));
+ DebugDialog::syntaxDebug(tr("Line: %1 - Column: %2\nMessage: %3")
+ .arg(errLine).arg(errCol).arg(errMsg));
+
file.close();
return;
}
@@ -82,29 +101,55 @@ PluginWrapper::processInfo(const QString &path)
void
PluginWrapper::start()
{
+ DebugDialog::outputDebug(tr("%1: Starting...").arg(name()));
_engine->evaluate(QString("%1.start()").arg(nspace()));
+ checkExceptions();
}
void
PluginWrapper::stop()
{
+ DebugDialog::outputDebug(tr("%1: Stoping...").arg(name()));
_engine->evaluate(QString("%1.stop()").arg(nspace()));
+ checkExceptions();
}
VidaliaTab *
PluginWrapper::buildGUI()
{
- if(!hasGUI())
+ if(!hasGUI()) {
+ DebugDialog::outputDebug(tr("%1: WARNING: doesn't have a GUI, and buildGUI() was called")
+ .arg(name()));
+ if(checkExceptions())
+ return NULL;
+ }
+
+ VidaliaTab *tab = qscriptvalue_cast<VidaliaTab *>(
+ _engine->evaluate(QString("%1.buildGUI()").arg(nspace())));
+
+ if(checkExceptions())
return NULL;
- VidaliaTab *tab = qscriptvalue_cast<VidaliaTab *>(_engine->evaluate(QString("%1.buildGUI()").arg(nspace())));
+
+ return tab;
+}
+
+bool
+PluginWrapper::checkExceptions()
+{
if(_engine->hasUncaughtException()) {
- qWarning() << "Exception:";
- qWarning() << _engine->uncaughtExceptionLineNumber();
+ DebugDialog::exceptDebug(tr("%2:\n*** Exception in line %1")
+ .arg(_engine->uncaughtExceptionLineNumber())
+ .arg(name()));
+ DebugDialog::exceptDebug(tr("*** Backtrace:"));
+ foreach(QString line, _engine->uncaughtExceptionBacktrace())
+ DebugDialog::exceptDebug(line);
- return NULL;
+ _engine->clearExceptions();
+
+ return true;
}
- qWarning() << "Casted tab:" << tab << nspace();
- return tab;
+
+ return false;
}
bool
@@ -122,6 +167,8 @@ PluginWrapper::isPersistent()
QString
PluginWrapper::name() const
{
+ if(_name.isEmpty())
+ return tr("(untitled)");
return _name;
}
@@ -173,6 +220,6 @@ PluginWrapper::emitPluginTab()
if(tab)
emit pluginTab(tab);
else
- // TODO: make this more than a console print
- qWarning() << "Error: buildGUI() failed for plugin" << name();
+ DebugDialog::exceptDebug(tr("Error: buildGUI() failed for plugin %1")
+ .arg(name()));
}
diff --git a/src/vidalia/plugin/PluginWrapper.h b/src/vidalia/plugin/PluginWrapper.h
index d99538c..15f7853 100644
--- a/src/vidalia/plugin/PluginWrapper.h
+++ b/src/vidalia/plugin/PluginWrapper.h
@@ -38,6 +38,7 @@ class PluginWrapper : public QObject {
protected:
void processInfo(const QString &path);
+ bool checkExceptions();
PluginEngine *_engine;
QString _name, _date, _author;
1
0
commit 1f6d58a5568782e79fdbb17a6c73a20f1ea91075
Author: Tomas Touceda <chiiph(a)gentoo.org>
Date: Thu Jun 2 00:23:20 2011 -0300
Creates a simple debug output dialog
Every problem, whether exception or syntax problem, will be displayed in here.
---
src/vidalia/CMakeLists.txt | 3 +++
src/vidalia/MainWindow.cpp | 13 +++++++++++++
src/vidalia/MainWindow.h | 4 ++++
src/vidalia/plugin/DebugDialog.cpp | 28 ++++++++++++++++++++++++++++
src/vidalia/plugin/DebugDialog.h | 26 ++++++++++++++++++++++++++
src/vidalia/plugin/DebugDialog.ui | 30 ++++++++++++++++++++++++++++++
src/vidalia/plugin/PluginEngine.cpp | 3 ++-
7 files changed, 106 insertions(+), 1 deletions(-)
diff --git a/src/vidalia/CMakeLists.txt b/src/vidalia/CMakeLists.txt
index 4cbe458..7dac60e 100644
--- a/src/vidalia/CMakeLists.txt
+++ b/src/vidalia/CMakeLists.txt
@@ -86,11 +86,13 @@ qt4_wrap_cpp(vidalia_SRCS
set(vidalia_SRCS ${vidalia_SRCS}
plugin/PluginEngine.cpp
plugin/PluginWrapper.cpp
+ plugin/DebugDialog.cpp
plugin/prototypes/VidaliaTabPrototype.cpp
)
qt4_wrap_cpp(vidalia_SRCS
plugin/PluginEngine.h
plugin/PluginWrapper.h
+ plugin/DebugDialog.h
plugin/prototypes/VidaliaTabPrototype.h
)
@@ -216,6 +218,7 @@ qt4_wrap_ui(vidalia_SRCS
help/browser/HelpBrowser.ui
network/NetViewer.ui
network/RouterInfoDialog.ui
+ plugin/DebugDialog.ui
)
## Add the resource files (icons, etc.)
diff --git a/src/vidalia/MainWindow.cpp b/src/vidalia/MainWindow.cpp
index bd72346..bcc3538 100644
--- a/src/vidalia/MainWindow.cpp
+++ b/src/vidalia/MainWindow.cpp
@@ -38,6 +38,7 @@
#include "procutil.h"
#include "PluginWrapper.h"
+#include "DebugDialog.h"
#include <QtGui>
@@ -153,6 +154,7 @@ MainWindow::createActions()
_actionAbout = new QAction(QIcon(IMG_ABOUT), tr("About"), this);
_actionStartStopTor = new QAction(QIcon(IMG_START_TOR_16), tr("Start Tor"), this);
_actionExit = new QAction(QIcon(IMG_EXIT), tr("Exit"), this);
+ _actionDebugDialog = new QAction(tr("Debug output"), this);
}
/** Creates the menu bar */
@@ -184,6 +186,8 @@ MainWindow::createMenuBar()
foreach(QAction *action, _engine->getAllActions()) {
pluginsMenu->addAction(action);
}
+ pluginsMenu->addSeparator();
+ pluginsMenu->addAction(_actionDebugDialog);
QMenu *helpMenu = menu->addMenu(tr("Help"));
helpMenu->addAction(_actionVidaliaHelp);
@@ -334,6 +338,8 @@ MainWindow::createConnections()
connect(_actionStatus, SIGNAL(triggered()), this, SLOT(showStatusTab()));
connect(_actionNetworkMap, SIGNAL(triggered()), this, SLOT(showNetViewerTab()));
+ connect(_actionDebugDialog, SIGNAL(triggered()), this, SLOT(showDebugDialog()));
+
/* Catch signals when the application is running or shutting down */
connect(vApp, SIGNAL(running()), this, SLOT(running()));
connect(vApp, SIGNAL(aboutToQuit()), this, SLOT(aboutToQuit()));
@@ -1644,6 +1650,13 @@ MainWindow::showNetViewerTab()
addTab(&_netViewer);
}
+void
+MainWindow::showDebugDialog()
+{
+ DebugDialog dlg;
+ dlg.exec();
+}
+
#if defined(USE_MINIUPNPC)
/** Called when a UPnP error occurs. */
void
diff --git a/src/vidalia/MainWindow.h b/src/vidalia/MainWindow.h
index 8172f71..21ab1a2 100644
--- a/src/vidalia/MainWindow.h
+++ b/src/vidalia/MainWindow.h
@@ -138,6 +138,9 @@ private slots:
void showHelpDialog();
/** Called when a child window requests the given help <b>topic</b>. */
void showHelpDialog(const QString &topic);
+
+ /** Displays the debug output dialog for plugins */
+ void showDebugDialog();
/** Adds a new tab to the MainWindow */
void addTab(VidaliaTab *tab);
@@ -301,6 +304,7 @@ private:
QAction *_actionVidaliaHelp;
QAction *_actionAbout;
QAction *_actionExit;
+ QAction *_actionDebugDialog;
Ui::MainWindow ui; /**< Qt Designer generated object. */
diff --git a/src/vidalia/plugin/DebugDialog.cpp b/src/vidalia/plugin/DebugDialog.cpp
new file mode 100644
index 0000000..b05fbe0
--- /dev/null
+++ b/src/vidalia/plugin/DebugDialog.cpp
@@ -0,0 +1,28 @@
+#include "DebugDialog.h"
+
+QStringList DebugDialog::buffer;
+
+DebugDialog::DebugDialog(QWidget *parent)
+ : QDialog(parent)
+{
+ ui.setupUi(this);
+
+ foreach(QString line, buffer)
+ ui.textEdit->setPlainText(QString("%1\n%2")
+ .arg(ui.textEdit->toPlainText())
+ .arg(line));
+}
+
+DebugDialog::~DebugDialog() {}
+
+void
+DebugDialog::pDebug(const QString &msg)
+{
+ buffer << msg;
+}
+
+void
+DebugDialog::clear()
+{
+ buffer.clear();
+}
diff --git a/src/vidalia/plugin/DebugDialog.h b/src/vidalia/plugin/DebugDialog.h
new file mode 100644
index 0000000..ec69c3e
--- /dev/null
+++ b/src/vidalia/plugin/DebugDialog.h
@@ -0,0 +1,26 @@
+#ifndef DEBUGDIALOG_H
+#define DEBUGDIALOG_H
+
+#include <QtGui>
+
+#include "ui_DebugDialog.h"
+
+class DebugDialog : public QDialog
+{
+ Q_OBJECT
+
+ public:
+ DebugDialog(QWidget *parent = 0);
+ ~DebugDialog();
+
+ static void pDebug(const QString &msg);
+ static void clear();
+
+ private:
+ static QStringList buffer;
+
+ Ui::DebugDialog ui;
+};
+
+#endif
+
diff --git a/src/vidalia/plugin/DebugDialog.ui b/src/vidalia/plugin/DebugDialog.ui
new file mode 100644
index 0000000..1ad0d2f
--- /dev/null
+++ b/src/vidalia/plugin/DebugDialog.ui
@@ -0,0 +1,30 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<ui version="4.0">
+ <class>DebugDialog</class>
+ <widget class="QDialog" name="DebugDialog">
+ <property name="geometry">
+ <rect>
+ <x>0</x>
+ <y>0</y>
+ <width>491</width>
+ <height>254</height>
+ </rect>
+ </property>
+ <property name="windowTitle">
+ <string>Plugin debug output</string>
+ </property>
+ <property name="windowIcon">
+ <iconset resource="../res/vidalia.qrc">
+ <normaloff>:/images/16x16/applications-system.png</normaloff>:/images/16x16/applications-system.png</iconset>
+ </property>
+ <layout class="QGridLayout" name="gridLayout">
+ <item row="0" column="1" rowspan="2">
+ <widget class="QTextEdit" name="textEdit"/>
+ </item>
+ </layout>
+ </widget>
+ <resources>
+ <include location="../res/vidalia.qrc"/>
+ </resources>
+ <connections/>
+</ui>
diff --git a/src/vidalia/plugin/PluginEngine.cpp b/src/vidalia/plugin/PluginEngine.cpp
index c7b74ea..bad9c65 100644
--- a/src/vidalia/plugin/PluginEngine.cpp
+++ b/src/vidalia/plugin/PluginEngine.cpp
@@ -1,6 +1,7 @@
#include "PluginEngine.h"
#include "VidaliaSettings.h"
#include "PluginWrapper.h"
+#include "DebugDialog.h"
PluginEngine::PluginEngine(QObject *parent)
: QScriptEngine(parent)
@@ -20,7 +21,7 @@ PluginEngine::~PluginEngine()
void
PluginEngine::loadAllPlugins()
{
- qWarning() << "loadAllPlugins()";
+ DebugDialog::pDebug("loadAllPlugins()");
VidaliaSettings settings;
QDir path = QDir(settings.pluginPath());
1
0

02 Jul '11
commit 38044c9518ef6335b9499043c3dca965d000e9e6
Author: Tomas Touceda <chiiph(a)gentoo.org>
Date: Wed Jun 1 23:44:10 2011 -0300
Improve communication between modules
Takes out the hacky casts and parent handling for a more Qt-ish way of
doing this.
---
src/vidalia/MainWindow.cpp | 12 +++---------
src/vidalia/MainWindow.h | 4 ++--
src/vidalia/plugin/PluginEngine.cpp | 23 ++++++++++++++---------
src/vidalia/plugin/PluginEngine.h | 10 ++++++++++
src/vidalia/plugin/PluginWrapper.cpp | 23 ++++++++++++++++++++++-
src/vidalia/plugin/PluginWrapper.h | 6 ++++++
6 files changed, 57 insertions(+), 21 deletions(-)
diff --git a/src/vidalia/MainWindow.cpp b/src/vidalia/MainWindow.cpp
index 931df1c..bd72346 100644
--- a/src/vidalia/MainWindow.cpp
+++ b/src/vidalia/MainWindow.cpp
@@ -183,7 +183,6 @@ MainWindow::createMenuBar()
QMenu *pluginsMenu = menu->addMenu(tr("Plugins"));
foreach(QAction *action, _engine->getAllActions()) {
pluginsMenu->addAction(action);
- connect(action, SIGNAL(triggered()), this, SLOT(showPluginTab()));
}
QMenu *helpMenu = menu->addMenu(tr("Help"));
@@ -414,6 +413,9 @@ MainWindow::createConnections()
_proxyProcess = new HelperProcess(this);
connect(_proxyProcess, SIGNAL(startFailed(QString)),
this, SLOT(onProxyFailed(QString)));
+
+ connect(_engine, SIGNAL(pluginTab(VidaliaTab *)),
+ this, SLOT(addTab(VidaliaTab *)));
}
/** Called when the application is closing, by selecting "Exit" from the tray
@@ -1593,14 +1595,6 @@ MainWindow::delTab(int index)
}
void
-MainWindow::showPluginTab()
-{
- QAction *act = qobject_cast<QAction *>(sender());
- PluginWrapper *wrapper = qobject_cast<PluginWrapper *>(act->parent());
- addTab(wrapper->buildGUI());
-}
-
-void
MainWindow::showStatusTab()
{
addTab(&_statusTab);
diff --git a/src/vidalia/MainWindow.h b/src/vidalia/MainWindow.h
index e5366b8..8172f71 100644
--- a/src/vidalia/MainWindow.h
+++ b/src/vidalia/MainWindow.h
@@ -144,8 +144,8 @@ private slots:
/** Deletes the tab at index if it exists and it isn't the Status tab */
void delTab(int index = -1);
- /** Handles adding a new tab corresponding to a plugin */
- void showPluginTab();
+// /** Handles adding a new tab corresponding to a plugin */
+// void showPluginTab();
/** Called when the web browser or IM client have stopped */
void onSubprocessFinished(int exitCode, QProcess::ExitStatus exitStatus);
diff --git a/src/vidalia/plugin/PluginEngine.cpp b/src/vidalia/plugin/PluginEngine.cpp
index fe85883..c7b74ea 100644
--- a/src/vidalia/plugin/PluginEngine.cpp
+++ b/src/vidalia/plugin/PluginEngine.cpp
@@ -5,19 +5,17 @@
PluginEngine::PluginEngine(QObject *parent)
: QScriptEngine(parent)
{
- // load prototypes
- VidaliaTabPrototype vtabproto;
- QScriptValue vtabscript = newQObject(&vtabproto, QScriptEngine::ScriptOwnership);
- setDefaultPrototype(qMetaTypeId<VidaliaTab *>(), vtabscript);
-
- // load constructors
- QScriptValue vtabctor = newFunction(VidaliaTabPrototype::constructor, vtabscript);
- globalObject().setProperty("VidaliaTab", vtabctor);
+ ADD_CLASS("VidaliaTab", VidaliaTabPrototype, VidaliaTab *,
+ VidaliaTabPrototype::constructor)
loadAllPlugins();
}
-PluginEngine::~PluginEngine() {}
+PluginEngine::~PluginEngine()
+{
+ foreach(PluginWrapper *wrapper, wrappers)
+ wrapper->stop();
+}
void
PluginEngine::loadAllPlugins()
@@ -50,7 +48,14 @@ PluginEngine::tryLoadPlugin(QDir path)
return;
PluginWrapper *wrapper = new PluginWrapper(QString("%1%2info.xml").arg(path.absolutePath()).arg(QDir::separator()), this);
+
+ // if it's persistent, start it right away
+ if(wrapper->isPersistent())
+ wrapper->start();
+
wrappers << wrapper;
+
+ connect(wrapper, SIGNAL(pluginTab(VidaliaTab *)), this, SIGNAL(pluginTab(VidaliaTab *)));
}
QList<QAction *>
diff --git a/src/vidalia/plugin/PluginEngine.h b/src/vidalia/plugin/PluginEngine.h
index 09bff23..7876803 100644
--- a/src/vidalia/plugin/PluginEngine.h
+++ b/src/vidalia/plugin/PluginEngine.h
@@ -8,6 +8,13 @@
class PluginWrapper;
+#define ADD_CLASS(name, protoType, absType, ctor) \
+ protoType __proto; \
+ QScriptValue __script = newQObject(&__proto, QScriptEngine::ScriptOwnership); \
+ setDefaultPrototype(qMetaTypeId<absType>(), __script); \
+ QScriptValue __ctor = newFunction(ctor, __script); \
+ globalObject().setProperty(name, __ctor);
+
class PluginEngine : public QScriptEngine {
Q_OBJECT
@@ -17,6 +24,9 @@ class PluginEngine : public QScriptEngine {
QList<QAction *> getAllActions();
+ signals:
+ void pluginTab(VidaliaTab *);
+
protected:
void loadAllPlugins();
void tryLoadPlugin(QDir path);
diff --git a/src/vidalia/plugin/PluginWrapper.cpp b/src/vidalia/plugin/PluginWrapper.cpp
index b06b863..8e839fa 100644
--- a/src/vidalia/plugin/PluginWrapper.cpp
+++ b/src/vidalia/plugin/PluginWrapper.cpp
@@ -100,6 +100,8 @@ PluginWrapper::buildGUI()
if(_engine->hasUncaughtException()) {
qWarning() << "Exception:";
qWarning() << _engine->uncaughtExceptionLineNumber();
+
+ return NULL;
}
qWarning() << "Casted tab:" << tab << nspace();
return tab;
@@ -150,8 +152,27 @@ PluginWrapper::files() const
QAction *
PluginWrapper::menuAction()
{
+ _action = new QAction(_name, this);
+
if(hasGUI()) {
- _action = new QAction(_name, this);
+ connect(_action, SIGNAL(triggered()), this, SLOT(emitPluginTab()));
+ }
+
+ // if it hasn't been started yet
+ if(!isPersistent()) {
+ connect(_action, SIGNAL(triggered()), this, SLOT(start()));
}
+
return _action;
}
+
+void
+PluginWrapper::emitPluginTab()
+{
+ VidaliaTab *tab = buildGUI();
+ if(tab)
+ emit pluginTab(tab);
+ else
+ // TODO: make this more than a console print
+ qWarning() << "Error: buildGUI() failed for plugin" << name();
+}
diff --git a/src/vidalia/plugin/PluginWrapper.h b/src/vidalia/plugin/PluginWrapper.h
index 1c7ad8f..d99538c 100644
--- a/src/vidalia/plugin/PluginWrapper.h
+++ b/src/vidalia/plugin/PluginWrapper.h
@@ -25,11 +25,17 @@ class PluginWrapper : public QObject {
QAction *menuAction();
+ signals:
+ void pluginTab(VidaliaTab *);
+
public slots:
void start();
void stop();
VidaliaTab *buildGUI();
+ private slots:
+ void emitPluginTab();
+
protected:
void processInfo(const QString &path);
1
0

[vidalia/alpha] Add first draft of the plugin framework documentation
by chiiph@torproject.org 02 Jul '11
by chiiph@torproject.org 02 Jul '11
02 Jul '11
commit 5bed9056139a2d33042995f1f0e7838fb43c9a3d
Author: Tomas Touceda <chiiph(a)gentoo.org>
Date: Tue May 17 13:50:31 2011 -0300
Add first draft of the plugin framework documentation
---
doc/plugin-framework.txt | 153 ++++++++++++++++++++++++++++++++++++++++++++++
1 files changed, 153 insertions(+), 0 deletions(-)
diff --git a/doc/plugin-framework.txt b/doc/plugin-framework.txt
new file mode 100644
index 0000000..e00ab8c
--- /dev/null
+++ b/doc/plugin-framework.txt
@@ -0,0 +1,153 @@
+Plugin Framework specification
+
+1. Directory structure:
+
+ Each plugin will live inside its own directory, separated from all the
+ other plugins.
+ The directory will contain the following:
+ info.xml *
+ <file>.js **
+ <subdir>/ ***
+
+ * The plugin description will live inside an XML file named info.xml,
+ its specification will be specified later.
+
+ ** Each source code file that the plugin uses will have a "js"
+ extension. The plugin may contain any other kind of files, along with
+ other source code files.
+
+ *** The plugin may contain any sort of directory dispositions. The
+ developer can reference files within subdirectories freely. The main
+ file can live anywhere within the plugin directory, as long as its
+ relative path is specified correctly in the info.xml file.
+
+2. Definition file:
+
+ The definition file for a plugin will be a XML file with the following DTD:
+
+ <!DOCTYPE VidaliaPlugin [
+ <!ENTITY name (#CDATA)>
+ <!ENTITY date (#CDATA)>
+ <!ENTITY author (#CDATA)>
+ <!ENTITY type (EMPTY)>
+ <!ATTLIST type persistent CDATA "false">
+ <!ATTLIST type gui CDATA "false">
+ <!ENTITY files (file+)>
+ <!ENTITY file (#CDATA)>
+ <!ENTITY namespace (#CDATA)>
+ ]>
+
+ Short description:
+ - Name, date and author are self explanatory.
+ - Type:
+ - Persistent: A plugin is persistent if it starts when Vidalia starts,
+ and it doesn't matter if the GUI (if it has one) is visible or not, the
+ plugin code is in execution.
+ - GUI: True if the plugin has a GUI.
+ - Files: Plugins may contain several source code files. The different
+ functions that must be implemented for it to work may be divided into
+ several files, or just one. Whatever the case may be, the files that the
+ plugin engine has to load must be specified in here. The plugin may use
+ other files, which don't need to be listed.
+ - Namespace: Each plugin will have its own namespace to avoid function
+ name collisions (the main functions will be named the same)
+
+3. Plugin functions:
+
+ Each plugin must implement the following functions:
+ start() : void
+ stop() : void
+ buildGUI() : VidaliaTab *
+
+ If the plugin isn't a GUI one, a default implementation will be added
+ that returns QScriptValue::NullValue.
+ Plugins may use several different files to implement its functionality.
+ To include files within other files use:
+
+ include("path/to/file.js")
+
+ This will be implemented by Vidalia's engine, it's not a native include
+ call. Another possibility would be to just list the file in the info.xml
+ file, and the engine will load it automatically and in order.
+
+4. Building an interface for a class to be used in a plugin:
+
+ To provide any class to be used in a plugin, there are two main parts to
+ implement: the constructor, and the prototype:
+ - Constructor: each constructable object in a plugin need to have
+ a static constructor function implemented with the following
+ signature:
+
+ QScriptValue f(QScriptContext *, QScriptEngine *)
+
+ - Prototype: A prototype is a wrapper for a metatype's methods. This
+ methods are what will be visible inside the plugin for a given
+ object.
+
+ The prototype class must inherit from QObject and QScriptable.
+ All types used in the plugin must be handled this way, and must be
+ declared as a Qt Metatype. Each interface must handle the metatype
+ declaration.
+
+5. Settings:
+
+ For specifying where the plugins live, there will be a new item in
+ Vidalia's configuration file: PluginPath. Which will contain the absolute
+ path of the plugins.
+
+6. Plugin engine:
+
+ All plugins will leave in the same environment (QScriptEngine). When
+ Vidalia starts, it starts the plugin engine.
+ Here's a bit of pseudo-code to get an idea of the loading process.
+
+ 6.1. Startup:
+
+ foreach provided_class: (1)
+ load_prototype (2)
+ load_constructor (3)
+
+ scan_plugin_directory (4)
+ foreach directory:
+ info = load_info_file (5)
+ wrapper = plugin_wrapper(info) (6)
+ if info.persistent:
+ wrapper.start() (7)
+ if info.gui:
+ plugin_menu.addAction(wrapper.menu_action()) (8)
+
+ (1) This loop will be probably hardcoded, since there isn't any way to
+ iterate through every class that we want to provide for the plugins.
+ (2) First we need to load the prototype for the given metatype.
+ (3) Then we can add a constructor for the metatype as a function of the
+ global script engine interpreter.
+ (4) Scan the PluginPath for directories that contain the info.xml
+ file.
+ (5) Interpret the info file to see what kind of plugin we are dealing
+ with.
+ (6) A plugin wrapper is an object that abstracts the actual calls to
+ the methods we know the plugin must implement with its corresponding
+ namespace.
+ (7) If it's a persistent plugin, then start it.
+ (8) If it's a gui plugin, add the entry to the plugin menu. If the
+ plugin is also persistent, then the menu action will be linked to
+ a show() function instead of the start(), since the plugin will be
+ already loaded.
+
+ 6.2. Quit:
+
+ foreach plugin:
+ wrapper.stop()
+
+7. Things to consider:
+
+ - Will the fact that all the plugins live in the same environment affect
+ in terms of security? or at least the workflow of each individual
+ plugin?
+ Possible solution: One instance of QScriptEngine for each plugin (kind
+ of a sandbox). But what will be the performance drawbacks to this?
+ - Is there the need to connect signals emitted from the plugin to
+ Vidalia? If so, this seems to be a nice implementation:
+ http://gitorious.org/qtscriptsignalhandler
+ - Do we want to have all files listed in the info.xml file too? May be we
+ can use that to have some kind of sanity check.
1
0
commit 92f39c6d275d07b9a49fc1a412c6482551190831
Author: Tomas Touceda <chiiph(a)torproject.org>
Date: Wed Jun 1 17:02:07 2011 -0300
Plugin framework: initial commit
It introduces the basic structure of the plugin management, not the actual
API. There's some refactoring to do, but the basic layout is working.
---
CMakeLists.txt | 2 +-
src/vidalia/CMakeLists.txt | 13 ++
src/vidalia/MainWindow.cpp | 24 +++-
src/vidalia/MainWindow.h | 7 +
src/vidalia/config/VidaliaSettings.cpp | 13 ++
src/vidalia/config/VidaliaSettings.h | 5 +
src/vidalia/plugin/PluginEngine.cpp | 64 ++++++++
src/vidalia/plugin/PluginEngine.h | 28 ++++
src/vidalia/plugin/PluginWrapper.cpp | 157 ++++++++++++++++++++
src/vidalia/plugin/PluginWrapper.h | 46 ++++++
.../plugin/prototypes/VidaliaTabPrototype.cpp | 10 ++
.../plugin/prototypes/VidaliaTabPrototype.h | 21 +++
12 files changed, 388 insertions(+), 2 deletions(-)
diff --git a/CMakeLists.txt b/CMakeLists.txt
index dfd8f3b..0c07d0d 100644
--- a/CMakeLists.txt
+++ b/CMakeLists.txt
@@ -37,10 +37,10 @@ include(FindQt4)
find_package(Qt4 REQUIRED)
set(QT_USE_QTNETWORK true)
set(QT_USE_QTXML true)
+set(QT_USE_QTSCRIPT true)
if (USE_MARBLE)
set(QT_USE_QTSVG true)
set(QT_USE_QTWEBKIT true)
- set(QT_USE_QTSCRIPT true)
set(QT_USE_QTDBUS true)
endif(USE_MARBLE)
include(${QT_USE_FILE})
diff --git a/src/vidalia/CMakeLists.txt b/src/vidalia/CMakeLists.txt
index 5811320..4cbe458 100644
--- a/src/vidalia/CMakeLists.txt
+++ b/src/vidalia/CMakeLists.txt
@@ -20,6 +20,8 @@ include_directories(
${CMAKE_CURRENT_SOURCE_DIR}/help/browser
${CMAKE_CURRENT_SOURCE_DIR}/log
${CMAKE_CURRENT_SOURCE_DIR}/network
+ ${CMAKE_CURRENT_SOURCE_DIR}/plugin
+ ${CMAKE_CURRENT_SOURCE_DIR}/plugin/prototypes
${MARBLE_INCLUDE_DIR}
)
@@ -80,6 +82,17 @@ qt4_wrap_cpp(vidalia_SRCS
bwgraph/BandwidthGraph.h
bwgraph/GraphFrame.h
)
+## Plugin framework sources
+set(vidalia_SRCS ${vidalia_SRCS}
+ plugin/PluginEngine.cpp
+ plugin/PluginWrapper.cpp
+ plugin/prototypes/VidaliaTabPrototype.cpp
+)
+qt4_wrap_cpp(vidalia_SRCS
+ plugin/PluginEngine.h
+ plugin/PluginWrapper.h
+ plugin/prototypes/VidaliaTabPrototype.h
+)
## Configuration dialog sources
set(vidalia_SRCS ${vidalia_SRCS}
diff --git a/src/vidalia/MainWindow.cpp b/src/vidalia/MainWindow.cpp
index 70e8044..931df1c 100644
--- a/src/vidalia/MainWindow.cpp
+++ b/src/vidalia/MainWindow.cpp
@@ -37,6 +37,8 @@
#include "stringutil.h"
#include "procutil.h"
+#include "PluginWrapper.h"
+
#include <QtGui>
#define IMG_BWGRAPH ":/images/16x16/utilities-system-monitor.png"
@@ -100,6 +102,8 @@ MainWindow::MainWindow()
/* Create a new TorControl object, used to communicate with Tor */
_torControl = Vidalia::torControl();
+ _engine = new PluginEngine();
+
createGUI();
createConnections();
@@ -176,7 +180,11 @@ MainWindow::createMenuBar()
viewMenu->addSeparator();
viewMenu->addAction(_actionConfigure);
-// QMenu *pluginsMenu = menu->addMenu(tr("Plugins"));
+ QMenu *pluginsMenu = menu->addMenu(tr("Plugins"));
+ foreach(QAction *action, _engine->getAllActions()) {
+ pluginsMenu->addAction(action);
+ connect(action, SIGNAL(triggered()), this, SLOT(showPluginTab()));
+ }
QMenu *helpMenu = menu->addMenu(tr("Help"));
helpMenu->addAction(_actionVidaliaHelp);
@@ -1539,6 +1547,12 @@ MainWindow::addTab(VidaliaTab *tab)
* instanse passed */
if(_tabMap.contains(tab->getTitle())) {
ui.tabWidget->setCurrentIndex(_tabMap.indexOf(tab->getTitle()));
+
+ /** If we are trying to open the exact same tab twice
+ * don't do anything */
+ if(tab == ui.tabWidget->widget(_tabMap.indexOf(tab->getTitle())))
+ return;
+
/** Exception for tabs that need to be always created */
if (tab != _messageLog &&
tab != &_statusTab &&
@@ -1579,6 +1593,14 @@ MainWindow::delTab(int index)
}
void
+MainWindow::showPluginTab()
+{
+ QAction *act = qobject_cast<QAction *>(sender());
+ PluginWrapper *wrapper = qobject_cast<PluginWrapper *>(act->parent());
+ addTab(wrapper->buildGUI());
+}
+
+void
MainWindow::showStatusTab()
{
addTab(&_statusTab);
diff --git a/src/vidalia/MainWindow.h b/src/vidalia/MainWindow.h
index 7d386d5..e5366b8 100644
--- a/src/vidalia/MainWindow.h
+++ b/src/vidalia/MainWindow.h
@@ -36,6 +36,8 @@
#include "TorControl.h"
+#include "PluginEngine.h"
+
#include <QMainWindow>
#include <QTimer>
#include <QSystemTrayIcon>
@@ -142,6 +144,9 @@ private slots:
/** Deletes the tab at index if it exists and it isn't the Status tab */
void delTab(int index = -1);
+ /** Handles adding a new tab corresponding to a plugin */
+ void showPluginTab();
+
/** Called when the web browser or IM client have stopped */
void onSubprocessFinished(int exitCode, QProcess::ExitStatus exitStatus);
/** Called periodically to check if the browser is running. If it is not,
@@ -304,6 +309,8 @@ private:
NetViewer _netViewer; /**< Network map that draws circuits */
QStringList _tabMap; /**< Map to handle opened tabs */
BandwidthGraph *_graph; /**< Graph that draws bandwidth usage */
+
+ PluginEngine *_engine;
};
#endif
diff --git a/src/vidalia/config/VidaliaSettings.cpp b/src/vidalia/config/VidaliaSettings.cpp
index 0812b03..aa4d18b 100644
--- a/src/vidalia/config/VidaliaSettings.cpp
+++ b/src/vidalia/config/VidaliaSettings.cpp
@@ -39,6 +39,7 @@
#define SETTING_LAST_UPDATE_CHECK "LastUpdateCheck"
#define SETTING_USE_LOCAL_GEOIP_DATABASE "UseLocalGeoIpDatabase"
#define SETTING_LOCAL_GEOIP_DATABASE "LocalGeoIpDatabase"
+#define SETTING_PLUGIN_PATH "PluginPath"
#if defined(Q_OS_WIN32)
#define STARTUP_REG_KEY "Software\\Microsoft\\Windows\\CurrentVersion\\Run"
@@ -82,6 +83,7 @@ VidaliaSettings::VidaliaSettings()
setDefault(SETTING_LAST_UPDATE_CHECK, QDateTime());
setDefault(SETTING_USE_LOCAL_GEOIP_DATABASE, false);
setDefault(SETTING_LOCAL_GEOIP_DATABASE, "");
+ setDefault(SETTING_PLUGIN_PATH, vApp->dataDirectory());
}
/** Gets the currently preferred language code for Vidalia. */
@@ -321,3 +323,14 @@ VidaliaSettings::setLocalGeoIpDatabase(const QString &databaseFile)
setValue(SETTING_LOCAL_GEOIP_DATABASE, databaseFile);
}
+QString
+VidaliaSettings::pluginPath() const
+{
+ return QDir::convertSeparators(value(SETTING_PLUGIN_PATH).toString());
+}
+
+void
+VidaliaSettings::setPluginPath(const QString &path)
+{
+ setValue(SETTING_PLUGIN_PATH, path);
+}
diff --git a/src/vidalia/config/VidaliaSettings.h b/src/vidalia/config/VidaliaSettings.h
index 2667b12..029657f 100644
--- a/src/vidalia/config/VidaliaSettings.h
+++ b/src/vidalia/config/VidaliaSettings.h
@@ -125,6 +125,11 @@ public:
QString localGeoIpDatabase() const;
/** Sets the file to use as a local GeoIP database. */
void setLocalGeoIpDatabase(const QString &databaseFile);
+
+ /** Returns the path where the plugins live */
+ QString pluginPath() const;
+ /** Sets the path where the plugins live */
+ void setPluginPath(const QString &path);
};
#endif
diff --git a/src/vidalia/plugin/PluginEngine.cpp b/src/vidalia/plugin/PluginEngine.cpp
new file mode 100644
index 0000000..fe85883
--- /dev/null
+++ b/src/vidalia/plugin/PluginEngine.cpp
@@ -0,0 +1,64 @@
+#include "PluginEngine.h"
+#include "VidaliaSettings.h"
+#include "PluginWrapper.h"
+
+PluginEngine::PluginEngine(QObject *parent)
+ : QScriptEngine(parent)
+{
+ // load prototypes
+ VidaliaTabPrototype vtabproto;
+ QScriptValue vtabscript = newQObject(&vtabproto, QScriptEngine::ScriptOwnership);
+ setDefaultPrototype(qMetaTypeId<VidaliaTab *>(), vtabscript);
+
+ // load constructors
+ QScriptValue vtabctor = newFunction(VidaliaTabPrototype::constructor, vtabscript);
+ globalObject().setProperty("VidaliaTab", vtabctor);
+
+ loadAllPlugins();
+}
+
+PluginEngine::~PluginEngine() {}
+
+void
+PluginEngine::loadAllPlugins()
+{
+ qWarning() << "loadAllPlugins()";
+
+ VidaliaSettings settings;
+ QDir path = QDir(settings.pluginPath());
+
+ qWarning() << "PluginPath" << path.absolutePath();
+
+ foreach(QString pdir, path.entryList(QDir::NoDotAndDotDot|QDir::AllDirs)) {
+ qWarning() << "pdir" << pdir;
+ QFileInfo finfo(QString("%1%2%3").arg(path.absolutePath()).arg(QDir::separator()).arg(pdir));
+
+ if(finfo.isDir()) {
+ tryLoadPlugin(finfo.filePath());
+ }
+ }
+}
+
+void
+PluginEngine::tryLoadPlugin(QDir path)
+{
+ qWarning() << "tryLoadPlugin()" << path.absolutePath();
+
+ QStringList files = path.entryList();
+
+ if(!files.contains("info.xml"))
+ return;
+
+ PluginWrapper *wrapper = new PluginWrapper(QString("%1%2info.xml").arg(path.absolutePath()).arg(QDir::separator()), this);
+ wrappers << wrapper;
+}
+
+QList<QAction *>
+PluginEngine::getAllActions()
+{
+ QList<QAction *> actions;
+ foreach(PluginWrapper *wrapper, wrappers)
+ actions << wrapper->menuAction();
+
+ return actions;
+}
diff --git a/src/vidalia/plugin/PluginEngine.h b/src/vidalia/plugin/PluginEngine.h
new file mode 100644
index 0000000..09bff23
--- /dev/null
+++ b/src/vidalia/plugin/PluginEngine.h
@@ -0,0 +1,28 @@
+#ifndef PLUGINENGINE_H
+#define PLUGINENGINE_H
+
+#include <QtGui>
+#include <QtScript>
+
+#include "VidaliaTabPrototype.h"
+
+class PluginWrapper;
+
+class PluginEngine : public QScriptEngine {
+ Q_OBJECT
+
+ public:
+ PluginEngine(QObject *parent = 0);
+ ~PluginEngine();
+
+ QList<QAction *> getAllActions();
+
+ protected:
+ void loadAllPlugins();
+ void tryLoadPlugin(QDir path);
+
+ QList<PluginWrapper *> wrappers;
+};
+
+#endif
+
diff --git a/src/vidalia/plugin/PluginWrapper.cpp b/src/vidalia/plugin/PluginWrapper.cpp
new file mode 100644
index 0000000..b06b863
--- /dev/null
+++ b/src/vidalia/plugin/PluginWrapper.cpp
@@ -0,0 +1,157 @@
+#include "PluginWrapper.h"
+#include "PluginEngine.h"
+
+#include <QtXml>
+
+PluginWrapper::PluginWrapper(const QString &info_path, PluginEngine *engine, QObject *parent)
+ : QObject(parent), _engine(engine)
+{
+ _action = 0;
+ _gui = false;
+ _persistent = false;
+ processInfo(info_path);
+
+ foreach(QString path, _files) {
+ qWarning() << path;
+ QFile file(path);
+ if(file.open(QIODevice::ReadOnly)) {
+ _engine->evaluate(file.readAll());
+ qWarning() << "evaluated";
+ } else
+ qWarning() << "Error opening file";
+ }
+}
+
+PluginWrapper::~PluginWrapper() {}
+
+void
+PluginWrapper::processInfo(const QString &path)
+{
+ qWarning() << "processInfo()";
+
+ QDomDocument info("Plugin Info");
+ QFile file(path);
+ if(!file.open(QIODevice::ReadOnly)) {
+ qWarning() << "Problem opening xml file";
+ return;
+ }
+
+ if(!info.setContent(&file)) {
+ qWarning() << "Problem setting contents";
+ file.close();
+ return;
+ }
+
+ QDomElement root = info.documentElement();
+
+ if(root.tagName() != "VidaliaPlugin") {
+ return;
+ }
+
+ QDomNode n = root.firstChild();
+ while(!n.isNull()) {
+ QDomElement e = n.toElement();
+ if(!e.isNull()) {
+ if(e.tagName() == "name")
+ _name = e.text();
+ else if(e.tagName() == "author")
+ _author = e.text();
+ else if(e.tagName() == "date")
+ _date = e.text();
+ else if(e.tagName() == "type") {
+ _persistent = (e.attribute("persistent", "false") == "true");
+ _gui = (e.attribute("gui", "false") == "true");
+ } else if(e.tagName() == "files") {
+ QDomNode froot = e.firstChild();
+ while(!froot.isNull()) {
+ QDomElement fe = froot.toElement();
+ if(fe.tagName() == "file")
+ _files << QString("%1%2%3").arg(QFileInfo(path).path()).arg(QDir::separator()).arg(fe.text());
+ froot = froot.nextSibling();
+ }
+ } else if(e.tagName() == "namespace") {
+ _nspace = e.text();
+ }
+ }
+ n = n.nextSibling();
+ }
+
+ file.close();
+}
+
+void
+PluginWrapper::start()
+{
+ _engine->evaluate(QString("%1.start()").arg(nspace()));
+}
+
+void
+PluginWrapper::stop()
+{
+ _engine->evaluate(QString("%1.stop()").arg(nspace()));
+}
+
+VidaliaTab *
+PluginWrapper::buildGUI()
+{
+ if(!hasGUI())
+ return NULL;
+ VidaliaTab *tab = qscriptvalue_cast<VidaliaTab *>(_engine->evaluate(QString("%1.buildGUI()").arg(nspace())));
+ if(_engine->hasUncaughtException()) {
+ qWarning() << "Exception:";
+ qWarning() << _engine->uncaughtExceptionLineNumber();
+ }
+ qWarning() << "Casted tab:" << tab << nspace();
+ return tab;
+}
+
+bool
+PluginWrapper::hasGUI()
+{
+ return _gui;
+}
+
+bool
+PluginWrapper::isPersistent()
+{
+ return _persistent;
+}
+
+QString
+PluginWrapper::name() const
+{
+ return _name;
+}
+
+QString
+PluginWrapper::date() const
+{
+ return _date;
+}
+
+QString
+PluginWrapper::author() const
+{
+ return _author;
+}
+
+QString
+PluginWrapper::nspace() const
+{
+ return _nspace;
+}
+
+QStringList
+PluginWrapper::files() const
+{
+ return _files;
+}
+
+QAction *
+PluginWrapper::menuAction()
+{
+ if(hasGUI()) {
+ _action = new QAction(_name, this);
+ }
+ return _action;
+}
diff --git a/src/vidalia/plugin/PluginWrapper.h b/src/vidalia/plugin/PluginWrapper.h
new file mode 100644
index 0000000..1c7ad8f
--- /dev/null
+++ b/src/vidalia/plugin/PluginWrapper.h
@@ -0,0 +1,46 @@
+#ifndef PLUGINWRAPPER_H
+#define PLUGINWRAPPER_H
+
+#include <QtCore>
+
+#include "VidaliaTab.h"
+
+class PluginEngine;
+
+class PluginWrapper : public QObject {
+ Q_OBJECT
+
+ public:
+ PluginWrapper(const QString &info_path, PluginEngine *engine, QObject *parent = 0);
+ ~PluginWrapper();
+
+ bool hasGUI();
+ bool isPersistent();
+
+ QString name() const;
+ QString date() const;
+ QString author() const;
+ QString nspace() const;
+ QStringList files() const;
+
+ QAction *menuAction();
+
+ public slots:
+ void start();
+ void stop();
+ VidaliaTab *buildGUI();
+
+ protected:
+ void processInfo(const QString &path);
+
+ PluginEngine *_engine;
+ QString _name, _date, _author;
+ bool _persistent, _gui;
+ QStringList _files;
+ QString _nspace;
+
+ QAction *_action;
+};
+
+#endif
+
diff --git a/src/vidalia/plugin/prototypes/VidaliaTabPrototype.cpp b/src/vidalia/plugin/prototypes/VidaliaTabPrototype.cpp
new file mode 100644
index 0000000..58170ef
--- /dev/null
+++ b/src/vidalia/plugin/prototypes/VidaliaTabPrototype.cpp
@@ -0,0 +1,10 @@
+#include "VidaliaTabPrototype.h"
+
+VidaliaTabPrototype::VidaliaTabPrototype(QObject *parent)
+ : QObject(parent)
+{}
+
+QScriptValue VidaliaTabPrototype::constructor(QScriptContext *context, QScriptEngine *engine)
+{
+ return engine->newQObject(new VidaliaTab(QString("titulooo"), QString("nombreee")), QScriptEngine::ScriptOwnership);
+}
diff --git a/src/vidalia/plugin/prototypes/VidaliaTabPrototype.h b/src/vidalia/plugin/prototypes/VidaliaTabPrototype.h
new file mode 100644
index 0000000..dbd89cd
--- /dev/null
+++ b/src/vidalia/plugin/prototypes/VidaliaTabPrototype.h
@@ -0,0 +1,21 @@
+#ifndef VIDALIATABPROT_H
+#define VIDALIATABPROT_H
+
+#include <QtGui>
+#include <QtScript>
+
+#include "VidaliaTab.h"
+
+class VidaliaTabPrototype : public QObject, public QScriptable
+{
+ Q_OBJECT
+
+ public:
+ VidaliaTabPrototype(QObject *parent = 0);
+ static QScriptValue constructor(QScriptContext *context, QScriptEngine *engine);
+};
+
+Q_DECLARE_METATYPE(VidaliaTab *);
+
+#endif
+
1
0

r24855: {website} Update website with new torbutton version. (in website/trunk: include torbutton)
by Mike Perry 02 Jul '11
by Mike Perry 02 Jul '11
02 Jul '11
Author: mikeperry
Date: 2011-07-02 01:09:57 +0000 (Sat, 02 Jul 2011)
New Revision: 24855
Modified:
website/trunk/include/versions.wmi
website/trunk/torbutton/update.rdf
Log:
Update website with new torbutton version.
Modified: website/trunk/include/versions.wmi
===================================================================
--- website/trunk/include/versions.wmi 2011-07-01 22:45:37 UTC (rev 24854)
+++ website/trunk/include/versions.wmi 2011-07-02 01:09:57 UTC (rev 24855)
@@ -84,8 +84,8 @@
<define-tag file-source-alpha whitespace=delete>tor-<version-alpha>.tar.gz</define-tag>
<define-tag package-source-alpha whitespace=delete>/dist/<file-source-alpha></define-tag>
-<define-tag version-torbutton whitespace=delete>1.2.5 (08 April 2010)</define-tag>
-<define-tag version-hash-torbutton whitespace=delete>sha1:e84592877593ad6119e829ac7199fd19333e101e</define-tag>
+<define-tag version-torbutton whitespace=delete>1.4.0 (30 June 2011)</define-tag>
+<define-tag version-hash-torbutton whitespace=delete>sha1:4df99e70b2991bb51ea70d0c217961174b24a98e</define-tag>
-<define-tag version-torbutton-alpha whitespace=delete>1.3.3-alpha (01 May 2011)</define-tag>
+<define-tag version-torbutton-alpha whitespace=delete>None</define-tag>
<define-tag version-hash-torbutton-alpha whitespace=delete>sha1:c7323cd408ebee28ee23b6a91fe056d59de668f5</define-tag>
Modified: website/trunk/torbutton/update.rdf
===================================================================
(Binary files differ)
1
0

02 Jul '11
commit c43d54eeedec37b980bdd8878d1e1852e7479f88
Author: Mike Perry <mikeperry-git(a)fscked.org>
Date: Fri Jul 1 17:31:13 2011 -0700
The tails patch had a bug number.
---
src/CHANGELOG | 2 +-
1 files changed, 1 insertions(+), 1 deletions(-)
diff --git a/src/CHANGELOG b/src/CHANGELOG
index 2e09080..464cade 100644
--- a/src/CHANGELOG
+++ b/src/CHANGELOG
@@ -13,11 +13,11 @@
* bug #1282: Set fixed window size for each new window.
* bug #3508: Apply Stanford SafeCache patch (thanks Edward, Collin et al).
* bug #2361: Make about window work again on FF4+.
+ * bug #3436: T(A)ILS was renamed to Tails.
* bugfix: Fix a transparent context menu issue on Linux FF4+.
* misc: Squelch exception from app launcher in error console.
* misc: Make DuckDuckGo the default Google Captcha redirect destination.
* misc: Make it harder to accidentally toggle torbutton.
- * misc: T(A)ILS was renamed to Tails.
1.3.3-alpha
01 May 2011
1
0

02 Jul '11
commit 626aa42be53464955b41c55535c489d2fe792162
Author: Mike Perry <mikeperry-git(a)fscked.org>
Date: Fri Jul 1 17:22:30 2011 -0700
These look like translations to me!
But what the hell do I know...
---
src/chrome/locale/af/torbutton.dtd | 7 ++
src/chrome/locale/ak/torbutton.dtd | 7 ++
src/chrome/locale/am/torbutton.dtd | 7 ++
src/chrome/locale/ar/torbutton.dtd | 57 +++++++-----
src/chrome/locale/arn/torbutton.dtd | 7 ++
src/chrome/locale/ast/torbutton.dtd | 7 ++
src/chrome/locale/az/torbutton.dtd | 7 ++
src/chrome/locale/be/torbutton.dtd | 7 ++
src/chrome/locale/bg/torbutton.dtd | 7 ++
src/chrome/locale/bn-IN/torbutton.dtd | 7 ++
src/chrome/locale/bn/torbutton.dtd | 7 ++
src/chrome/locale/bo/torbutton.dtd | 7 ++
src/chrome/locale/br/torbutton.dtd | 7 ++
src/chrome/locale/bs/torbutton.dtd | 7 ++
src/chrome/locale/ca/torbutton.dtd | 7 ++
src/chrome/locale/cs/torbutton.dtd | 7 ++
src/chrome/locale/csb/torbutton.dtd | 7 ++
src/chrome/locale/cy/torbutton.dtd | 7 ++
src/chrome/locale/cy/torbutton.properties | 18 ++--
src/chrome/locale/da/torbutton.dtd | 7 ++
src/chrome/locale/de/torbutton.dtd | 7 ++
src/chrome/locale/dz/torbutton.dtd | 7 ++
src/chrome/locale/el/torbutton.dtd | 7 ++
src/chrome/locale/eo/torbutton.dtd | 7 ++
src/chrome/locale/es/torbutton.dtd | 7 ++
src/chrome/locale/et/torbutton.dtd | 7 ++
src/chrome/locale/eu/torbutton.dtd | 7 ++
src/chrome/locale/fa/torbutton.dtd | 7 ++
src/chrome/locale/fa/torbutton.properties | 2 +-
src/chrome/locale/fi/torbutton.dtd | 7 ++
src/chrome/locale/fil/torbutton.dtd | 7 ++
src/chrome/locale/fo/torbutton.dtd | 7 ++
src/chrome/locale/fr/torbutton.dtd | 7 ++
src/chrome/locale/fur/torbutton.dtd | 7 ++
src/chrome/locale/fy/torbutton.dtd | 7 ++
src/chrome/locale/ga/torbutton.dtd | 7 ++
src/chrome/locale/gl/torbutton.dtd | 7 ++
src/chrome/locale/gu/torbutton.dtd | 7 ++
src/chrome/locale/gun/torbutton.dtd | 7 ++
src/chrome/locale/ha/torbutton.dtd | 7 ++
src/chrome/locale/he/torbutton.dtd | 7 ++
src/chrome/locale/hi/torbutton.dtd | 7 ++
src/chrome/locale/hr/torbutton.dtd | 7 ++
src/chrome/locale/ht/torbutton.dtd | 7 ++
src/chrome/locale/hu/torbutton.dtd | 7 ++
src/chrome/locale/hy/torbutton.dtd | 7 ++
src/chrome/locale/id/torbutton.dtd | 7 ++
src/chrome/locale/is/torbutton.dtd | 7 ++
src/chrome/locale/it/torbutton.dtd | 7 ++
src/chrome/locale/ja/torbutton.dtd | 7 ++
src/chrome/locale/jv/torbutton.dtd | 7 ++
src/chrome/locale/ka/torbutton.dtd | 7 ++
src/chrome/locale/km/torbutton.dtd | 7 ++
src/chrome/locale/kn/torbutton.dtd | 7 ++
src/chrome/locale/ko/torbutton.dtd | 7 ++
src/chrome/locale/ku/torbutton.dtd | 7 ++
src/chrome/locale/kw/torbutton.dtd | 7 ++
src/chrome/locale/ky/torbutton.dtd | 7 ++
src/chrome/locale/lb/torbutton.dtd | 7 ++
src/chrome/locale/ln/torbutton.dtd | 7 ++
src/chrome/locale/lo/torbutton.dtd | 7 ++
src/chrome/locale/lt/torbutton.dtd | 7 ++
src/chrome/locale/lv/torbutton.dtd | 7 ++
src/chrome/locale/mg/torbutton.dtd | 7 ++
src/chrome/locale/mi/torbutton.dtd | 7 ++
src/chrome/locale/mk/torbutton.dtd | 7 ++
src/chrome/locale/ml/torbutton.dtd | 7 ++
src/chrome/locale/mn/torbutton.dtd | 7 ++
src/chrome/locale/mr/torbutton.dtd | 7 ++
src/chrome/locale/ms/torbutton.dtd | 7 ++
src/chrome/locale/mt/torbutton.dtd | 7 ++
src/chrome/locale/my/torbutton.dtd | 7 ++
src/chrome/locale/nah/torbutton.dtd | 7 ++
src/chrome/locale/nap/torbutton.dtd | 7 ++
src/chrome/locale/nb/torbutton.dtd | 7 ++
src/chrome/locale/ne/torbutton.dtd | 7 ++
src/chrome/locale/nl/torbutton.dtd | 7 ++
src/chrome/locale/nn/torbutton.dtd | 7 ++
src/chrome/locale/nso/torbutton.dtd | 7 ++
src/chrome/locale/oc/torbutton.dtd | 7 ++
src/chrome/locale/or/torbutton.dtd | 7 ++
src/chrome/locale/pa/torbutton.dtd | 7 ++
src/chrome/locale/pap/torbutton.dtd | 7 ++
src/chrome/locale/pl/torbutton.dtd | 7 ++
src/chrome/locale/pl/torbutton.properties | 2 +-
src/chrome/locale/pms/torbutton.dtd | 7 ++
src/chrome/locale/ps/torbutton.dtd | 7 ++
src/chrome/locale/pt-BR/torbutton.dtd | 137 +++++++++++++++--------------
src/chrome/locale/pt/torbutton.dtd | 7 ++
src/chrome/locale/ro/torbutton.dtd | 7 ++
src/chrome/locale/ru/torbutton.dtd | 7 ++
src/chrome/locale/sco/torbutton.dtd | 7 ++
src/chrome/locale/sk/torbutton.dtd | 7 ++
src/chrome/locale/sl/torbutton.dtd | 7 ++
src/chrome/locale/so/torbutton.dtd | 7 ++
src/chrome/locale/son/torbutton.dtd | 7 ++
src/chrome/locale/sq/torbutton.dtd | 7 ++
src/chrome/locale/sr/torbutton.dtd | 7 ++
src/chrome/locale/st/torbutton.dtd | 7 ++
src/chrome/locale/su/torbutton.dtd | 7 ++
src/chrome/locale/sv/torbutton.dtd | 7 ++
src/chrome/locale/sw/torbutton.dtd | 7 ++
src/chrome/locale/ta/torbutton.dtd | 7 ++
src/chrome/locale/te/torbutton.dtd | 7 ++
src/chrome/locale/tg/torbutton.dtd | 7 ++
src/chrome/locale/th/torbutton.dtd | 7 ++
src/chrome/locale/ti/torbutton.dtd | 7 ++
src/chrome/locale/tk/torbutton.dtd | 7 ++
src/chrome/locale/tr/torbutton.dtd | 7 ++
src/chrome/locale/uk/torbutton.dtd | 37 +++++---
src/chrome/locale/ur/torbutton.dtd | 7 ++
src/chrome/locale/ve/torbutton.dtd | 7 ++
src/chrome/locale/vi/torbutton.dtd | 7 ++
src/chrome/locale/wa/torbutton.dtd | 7 ++
src/chrome/locale/wo/torbutton.dtd | 7 ++
src/chrome/locale/zh-CN/torbutton.dtd | 7 ++
src/chrome/locale/zh-HK/torbutton.dtd | 7 ++
src/chrome/locale/zh-TW/torbutton.dtd | 7 ++
src/chrome/locale/zu/torbutton.dtd | 7 ++
119 files changed, 928 insertions(+), 116 deletions(-)
diff --git a/src/chrome/locale/af/torbutton.dtd b/src/chrome/locale/af/torbutton.dtd
index 998eb76..0da56d5 100644
--- a/src/chrome/locale/af/torbutton.dtd
+++ b/src/chrome/locale/af/torbutton.dtd
@@ -16,6 +16,13 @@
<!ENTITY torbutton.prefs.proxy.host.socks "SOCKS Host:">
<!ENTITY torbutton.prefs.proxy.port "Port:">
<!ENTITY torbutton.about.title "About Torbutton">
+<!ENTITY torbutton.about.version "Version:">
+<!ENTITY torbutton.about.summary "Protects the privacy of your Tor browsing.">
+<!ENTITY torbutton.about.code "Code Contributors:">
+<!ENTITY torbutton.about.maintainer "Maintainer:">
+<!ENTITY torbutton.about.security_review "Security Review:">
+<!ENTITY torbutton.about.donate "If you like using Tor, you might consider">
+<!ENTITY torbutton.about.make_donation "making a donation.">
<!ENTITY torbutton.pref_connection.notice "Disable Torbutton to change these settings.">
<!ENTITY torbutton.pref_connection.more_info "More information">
<!ENTITY torbutton.pref_connection_more_info.title "Help">
diff --git a/src/chrome/locale/ak/torbutton.dtd b/src/chrome/locale/ak/torbutton.dtd
index 998eb76..0da56d5 100644
--- a/src/chrome/locale/ak/torbutton.dtd
+++ b/src/chrome/locale/ak/torbutton.dtd
@@ -16,6 +16,13 @@
<!ENTITY torbutton.prefs.proxy.host.socks "SOCKS Host:">
<!ENTITY torbutton.prefs.proxy.port "Port:">
<!ENTITY torbutton.about.title "About Torbutton">
+<!ENTITY torbutton.about.version "Version:">
+<!ENTITY torbutton.about.summary "Protects the privacy of your Tor browsing.">
+<!ENTITY torbutton.about.code "Code Contributors:">
+<!ENTITY torbutton.about.maintainer "Maintainer:">
+<!ENTITY torbutton.about.security_review "Security Review:">
+<!ENTITY torbutton.about.donate "If you like using Tor, you might consider">
+<!ENTITY torbutton.about.make_donation "making a donation.">
<!ENTITY torbutton.pref_connection.notice "Disable Torbutton to change these settings.">
<!ENTITY torbutton.pref_connection.more_info "More information">
<!ENTITY torbutton.pref_connection_more_info.title "Help">
diff --git a/src/chrome/locale/am/torbutton.dtd b/src/chrome/locale/am/torbutton.dtd
index 998eb76..0da56d5 100644
--- a/src/chrome/locale/am/torbutton.dtd
+++ b/src/chrome/locale/am/torbutton.dtd
@@ -16,6 +16,13 @@
<!ENTITY torbutton.prefs.proxy.host.socks "SOCKS Host:">
<!ENTITY torbutton.prefs.proxy.port "Port:">
<!ENTITY torbutton.about.title "About Torbutton">
+<!ENTITY torbutton.about.version "Version:">
+<!ENTITY torbutton.about.summary "Protects the privacy of your Tor browsing.">
+<!ENTITY torbutton.about.code "Code Contributors:">
+<!ENTITY torbutton.about.maintainer "Maintainer:">
+<!ENTITY torbutton.about.security_review "Security Review:">
+<!ENTITY torbutton.about.donate "If you like using Tor, you might consider">
+<!ENTITY torbutton.about.make_donation "making a donation.">
<!ENTITY torbutton.pref_connection.notice "Disable Torbutton to change these settings.">
<!ENTITY torbutton.pref_connection.more_info "More information">
<!ENTITY torbutton.pref_connection_more_info.title "Help">
diff --git a/src/chrome/locale/ar/torbutton.dtd b/src/chrome/locale/ar/torbutton.dtd
index 706bb0e..b9ad05a 100644
--- a/src/chrome/locale/ar/torbutton.dtd
+++ b/src/chrome/locale/ar/torbutton.dtd
@@ -16,6 +16,13 @@
<!ENTITY torbutton.prefs.proxy.host.socks "وسيط SOCKS:">
<!ENTITY torbutton.prefs.proxy.port "المنفذ:">
<!ENTITY torbutton.about.title "عن زر تور">
+<!ENTITY torbutton.about.version "Version:">
+<!ENTITY torbutton.about.summary "Protects the privacy of your Tor browsing.">
+<!ENTITY torbutton.about.code "Code Contributors:">
+<!ENTITY torbutton.about.maintainer "Maintainer:">
+<!ENTITY torbutton.about.security_review "Security Review:">
+<!ENTITY torbutton.about.donate "If you like using Tor, you might consider">
+<!ENTITY torbutton.about.make_donation "making a donation.">
<!ENTITY torbutton.pref_connection.notice "عطل زر تور لتغيير هذه الإعدادات.">
<!ENTITY torbutton.pref_connection.more_info "مزيد من المعلومات">
<!ENTITY torbutton.pref_connection_more_info.title "التعليمات">
@@ -26,13 +33,13 @@
<!ENTITY torbutton.context_menu.preferences.key "ف">
<!ENTITY torbutton.context_menu.about "عن زر تور...">
<!ENTITY torbutton.context_menu.about.key "ح">
-<!ENTITY torbutton.context_menu.cookieProtections "Cookie Protections">
+<!ENTITY torbutton.context_menu.cookieProtections "كعكة الحماية">
<!ENTITY torbutton.context_menu.cookieProtections.key "C">
-<!ENTITY torbutton.context_menu.copyTor "Copy Tor URL">
+<!ENTITY torbutton.context_menu.copyTor "نسخ رابط تور">
<!ENTITY torbutton.context_menu.copyTor.key "p">
-<!ENTITY torbutton.context_menu.openTorTab "Open Tor URL in new Tab">
+<!ENTITY torbutton.context_menu.openTorTab "فتح عنوان تور في علامة تبويب جديدة">
<!ENTITY torbutton.context_menu.openTorTab.key "r">
-<!ENTITY torbutton.context_menu.openTorWindow "Open Tor URL in new Window">
+<!ENTITY torbutton.context_menu.openTorWindow "فتح عنوان تور في نافذة جديدة">
<!ENTITY torbutton.context_menu.openTorWindow.key "d">
<!ENTITY torbutton.button.label "زر تور">
<!ENTITY torbutton.button.tooltip "انقر لبدء زر تور">
@@ -45,7 +52,7 @@
<!ENTITY torbutton.prefs.clear_cache "امنع الاختزان على القرص مع تور وامسح كل البيانات عند تبديل حالة تور">
<!ENTITY torbutton.prefs.block_cache "امنع الولوج إلى بيانات تور على القرص و الذاكرة أثناء عمل تور">
<!ENTITY torbutton.prefs.cookie_jars "احفظ كعكات سوى تور في وعاء آمن ">
-<!ENTITY torbutton.prefs.cookie_protection "Use the Cookie Protections Dialog to choose">
+<!ENTITY torbutton.prefs.cookie_protection "استخدام حوار كعكة الحماية للاختيار">
<!ENTITY torbutton.prefs.mmm_cookies "سأدير الكعكات يدويًا (حَرِج)">
<!ENTITY torbutton.prefs.clear_cookies "امسح الكعكات عند تبديل حالة تور">
<!ENTITY torbutton.prefs.disable_plugins "عطّل الملحقات أثناء عمل التور (حَرِج)">
@@ -65,9 +72,9 @@
<!ENTITY torbutton.prefs.disable_sessionstore "عطّل حفظ الجلسة (محبّذ)">
<!ENTITY torbutton.prefs.headers "الترويسات">
<!ENTITY torbutton.prefs.spoof_english "انتحل متصفحًا إنجليزيًا أمريكيًا">
-<!ENTITY torbutton.prefs.refererspoofing "Referer spoofing">
+<!ENTITY torbutton.prefs.refererspoofing "مرجعية خداعه">
<!ENTITY torbutton.prefs.spoofblank "Spoof blank referer during Tor usage (may break some sites)">
-<!ENTITY torbutton.prefs.smartspoof "Smart referer spoof during Tor usage (spoofs cross domain referers)">
+<!ENTITY torbutton.prefs.smartspoof "محاكاة ساخرة ذكية للتحويل أثناء عمل تور (سخرية المجال المرجعي المتقاطع)">
<!ENTITY torbutton.prefs.nospoof "No referer spoof during Tor usage (sends referers as normal)">
<!ENTITY torbutton.prefs.disable_domstorage "عطّل تخزين DOM أثناء عمل التور (حَرِج)">
<!ENTITY torbutton.prefs.forms "الإكمال التلقائي">
@@ -76,7 +83,7 @@
<!ENTITY torbutton.prefs.tor "التور">
<!ENTITY torbutton.prefs.non_tor "التور معطل">
<!ENTITY torbutton.prefs.restore_tor "خلال بدء استعادة الجلسة، اضبط حالة التور إلى:">
-<!ENTITY torbutton.prefs.startup_tor "On browser startup, set Tor state to:">
+<!ENTITY torbutton.prefs.startup_tor "عند بدء التشغيل المتصفح ، تعيين جالة تور إلى:">
<!ENTITY torbutton.prefs.reload_crashed_jar "أعد تحميل وعاء الكعكات/امسح الكعكات عند انهيار فيرفكس (محبّذ)">
<!ENTITY torbutton.prefs.dual_cookie_jars "احفظ الكعكات عن تفعيل تور وعند تعطيله في أوعية محمية (خطر)">
<!ENTITY torbutton.prefs.clear_http_auth "امسح جلسات المصادقة لـ HTTP (محبّذ)">
@@ -106,23 +113,23 @@
<!ENTITY torbutton.prefs.socks_vfive "SOCKS v5">
<!ENTITY torbutton.prefs.no_proxies_on "لا وسيط ل:">
<!ENTITY torbutton.prefs.no_proxy_warning "تحذير: تجنب استخدام أي من أسماء المضيف المذكورة أعلاه">
-<!ENTITY torbutton.prefs.spoofreresh "Spoof Refresh">
-<!ENTITY torbutton.prefs.refereroptions "Referer Spoofing Options">
-<!ENTITY torbutton.prefs.nospoof "Do not spoof referer">
-<!ENTITY torbutton.prefs.spoofroot "Spoof the containing folder of the page">
-<!ENTITY torbutton.prefs.spoofdomain "Spoof the domain as referer">
-<!ENTITY torbutton.prefs.spoofblank "Make referer blank">
-<!ENTITY torbutton.cookiedialog.title "Manage Cookie Protections">
-<!ENTITY torbutton.cookiedialog.lockCol "Protected">
-<!ENTITY torbutton.cookiedialog.domainCol "Host">
-<!ENTITY torbutton.cookiedialog.nameCol "Name">
-<!ENTITY torbutton.cookiedialog.pathCol "Path">
-<!ENTITY torbutton.cookiedialog.protectCookie "Protect Cookie">
-<!ENTITY torbutton.cookiedialog.removeCookie "Remove Cookie">
-<!ENTITY torbutton.cookiedialog.unprotectCookie "Unprotect Cookie">
-<!ENTITY torbutton.cookiedialog.removeAllBut "Remove All But Protected">
-<!ENTITY torbutton.cookiedialog.saveAllCookies "Protect New Cookies">
-<!ENTITY torbutton.cookiedialog.doNotSaveAllCookies "Do Not Protect New Cookies">
+<!ENTITY torbutton.prefs.spoofreresh "تحديث المحاكاة الساخرة">
+<!ENTITY torbutton.prefs.refereroptions "خيارات المرجعية الساخرة">
+<!ENTITY torbutton.prefs.nospoof "لا تستخدم محاكاة مرجعية ساخرة">
+<!ENTITY torbutton.prefs.spoofroot "محاكاة ساخرة المجلد الذي يحتوي على الصفحة">
+<!ENTITY torbutton.prefs.spoofdomain "محاكاة ساخرة المجال مثل المرجعية">
+<!ENTITY torbutton.prefs.spoofblank "إجعل المرجعية فارغة">
+<!ENTITY torbutton.cookiedialog.title "إدارة كعكات الحماية">
+<!ENTITY torbutton.cookiedialog.lockCol "محمية">
+<!ENTITY torbutton.cookiedialog.domainCol "استضافة">
+<!ENTITY torbutton.cookiedialog.nameCol "اسم">
+<!ENTITY torbutton.cookiedialog.pathCol "المسار">
+<!ENTITY torbutton.cookiedialog.protectCookie "كعكة الحماية">
+<!ENTITY torbutton.cookiedialog.removeCookie "إزالة الكعك">
+<!ENTITY torbutton.cookiedialog.unprotectCookie "إلغاء كعكة الحماية">
+<!ENTITY torbutton.cookiedialog.removeAllBut "إزالة الكل لكن استمر في الحماية">
+<!ENTITY torbutton.cookiedialog.saveAllCookies "كعكة حماية جديدة">
+<!ENTITY torbutton.cookiedialog.doNotSaveAllCookies "لا تحمي الكعكات الجديدة">
<!ENTITY torbutton.prefs.disable_livemarks "تعطيل العلامات الحية خلال إستعمال التور">
<!ENTITY torbutton.prefs.dtd_recommended "(محبّذ)">
<!ENTITY torbutton.prefs.dtd_optional "(اختياري)">
diff --git a/src/chrome/locale/arn/torbutton.dtd b/src/chrome/locale/arn/torbutton.dtd
index 998eb76..0da56d5 100644
--- a/src/chrome/locale/arn/torbutton.dtd
+++ b/src/chrome/locale/arn/torbutton.dtd
@@ -16,6 +16,13 @@
<!ENTITY torbutton.prefs.proxy.host.socks "SOCKS Host:">
<!ENTITY torbutton.prefs.proxy.port "Port:">
<!ENTITY torbutton.about.title "About Torbutton">
+<!ENTITY torbutton.about.version "Version:">
+<!ENTITY torbutton.about.summary "Protects the privacy of your Tor browsing.">
+<!ENTITY torbutton.about.code "Code Contributors:">
+<!ENTITY torbutton.about.maintainer "Maintainer:">
+<!ENTITY torbutton.about.security_review "Security Review:">
+<!ENTITY torbutton.about.donate "If you like using Tor, you might consider">
+<!ENTITY torbutton.about.make_donation "making a donation.">
<!ENTITY torbutton.pref_connection.notice "Disable Torbutton to change these settings.">
<!ENTITY torbutton.pref_connection.more_info "More information">
<!ENTITY torbutton.pref_connection_more_info.title "Help">
diff --git a/src/chrome/locale/ast/torbutton.dtd b/src/chrome/locale/ast/torbutton.dtd
index 998eb76..0da56d5 100644
--- a/src/chrome/locale/ast/torbutton.dtd
+++ b/src/chrome/locale/ast/torbutton.dtd
@@ -16,6 +16,13 @@
<!ENTITY torbutton.prefs.proxy.host.socks "SOCKS Host:">
<!ENTITY torbutton.prefs.proxy.port "Port:">
<!ENTITY torbutton.about.title "About Torbutton">
+<!ENTITY torbutton.about.version "Version:">
+<!ENTITY torbutton.about.summary "Protects the privacy of your Tor browsing.">
+<!ENTITY torbutton.about.code "Code Contributors:">
+<!ENTITY torbutton.about.maintainer "Maintainer:">
+<!ENTITY torbutton.about.security_review "Security Review:">
+<!ENTITY torbutton.about.donate "If you like using Tor, you might consider">
+<!ENTITY torbutton.about.make_donation "making a donation.">
<!ENTITY torbutton.pref_connection.notice "Disable Torbutton to change these settings.">
<!ENTITY torbutton.pref_connection.more_info "More information">
<!ENTITY torbutton.pref_connection_more_info.title "Help">
diff --git a/src/chrome/locale/az/torbutton.dtd b/src/chrome/locale/az/torbutton.dtd
index 998eb76..0da56d5 100644
--- a/src/chrome/locale/az/torbutton.dtd
+++ b/src/chrome/locale/az/torbutton.dtd
@@ -16,6 +16,13 @@
<!ENTITY torbutton.prefs.proxy.host.socks "SOCKS Host:">
<!ENTITY torbutton.prefs.proxy.port "Port:">
<!ENTITY torbutton.about.title "About Torbutton">
+<!ENTITY torbutton.about.version "Version:">
+<!ENTITY torbutton.about.summary "Protects the privacy of your Tor browsing.">
+<!ENTITY torbutton.about.code "Code Contributors:">
+<!ENTITY torbutton.about.maintainer "Maintainer:">
+<!ENTITY torbutton.about.security_review "Security Review:">
+<!ENTITY torbutton.about.donate "If you like using Tor, you might consider">
+<!ENTITY torbutton.about.make_donation "making a donation.">
<!ENTITY torbutton.pref_connection.notice "Disable Torbutton to change these settings.">
<!ENTITY torbutton.pref_connection.more_info "More information">
<!ENTITY torbutton.pref_connection_more_info.title "Help">
diff --git a/src/chrome/locale/be/torbutton.dtd b/src/chrome/locale/be/torbutton.dtd
index 998eb76..0da56d5 100644
--- a/src/chrome/locale/be/torbutton.dtd
+++ b/src/chrome/locale/be/torbutton.dtd
@@ -16,6 +16,13 @@
<!ENTITY torbutton.prefs.proxy.host.socks "SOCKS Host:">
<!ENTITY torbutton.prefs.proxy.port "Port:">
<!ENTITY torbutton.about.title "About Torbutton">
+<!ENTITY torbutton.about.version "Version:">
+<!ENTITY torbutton.about.summary "Protects the privacy of your Tor browsing.">
+<!ENTITY torbutton.about.code "Code Contributors:">
+<!ENTITY torbutton.about.maintainer "Maintainer:">
+<!ENTITY torbutton.about.security_review "Security Review:">
+<!ENTITY torbutton.about.donate "If you like using Tor, you might consider">
+<!ENTITY torbutton.about.make_donation "making a donation.">
<!ENTITY torbutton.pref_connection.notice "Disable Torbutton to change these settings.">
<!ENTITY torbutton.pref_connection.more_info "More information">
<!ENTITY torbutton.pref_connection_more_info.title "Help">
diff --git a/src/chrome/locale/bg/torbutton.dtd b/src/chrome/locale/bg/torbutton.dtd
index 998eb76..0da56d5 100644
--- a/src/chrome/locale/bg/torbutton.dtd
+++ b/src/chrome/locale/bg/torbutton.dtd
@@ -16,6 +16,13 @@
<!ENTITY torbutton.prefs.proxy.host.socks "SOCKS Host:">
<!ENTITY torbutton.prefs.proxy.port "Port:">
<!ENTITY torbutton.about.title "About Torbutton">
+<!ENTITY torbutton.about.version "Version:">
+<!ENTITY torbutton.about.summary "Protects the privacy of your Tor browsing.">
+<!ENTITY torbutton.about.code "Code Contributors:">
+<!ENTITY torbutton.about.maintainer "Maintainer:">
+<!ENTITY torbutton.about.security_review "Security Review:">
+<!ENTITY torbutton.about.donate "If you like using Tor, you might consider">
+<!ENTITY torbutton.about.make_donation "making a donation.">
<!ENTITY torbutton.pref_connection.notice "Disable Torbutton to change these settings.">
<!ENTITY torbutton.pref_connection.more_info "More information">
<!ENTITY torbutton.pref_connection_more_info.title "Help">
diff --git a/src/chrome/locale/bn-IN/torbutton.dtd b/src/chrome/locale/bn-IN/torbutton.dtd
index 998eb76..0da56d5 100644
--- a/src/chrome/locale/bn-IN/torbutton.dtd
+++ b/src/chrome/locale/bn-IN/torbutton.dtd
@@ -16,6 +16,13 @@
<!ENTITY torbutton.prefs.proxy.host.socks "SOCKS Host:">
<!ENTITY torbutton.prefs.proxy.port "Port:">
<!ENTITY torbutton.about.title "About Torbutton">
+<!ENTITY torbutton.about.version "Version:">
+<!ENTITY torbutton.about.summary "Protects the privacy of your Tor browsing.">
+<!ENTITY torbutton.about.code "Code Contributors:">
+<!ENTITY torbutton.about.maintainer "Maintainer:">
+<!ENTITY torbutton.about.security_review "Security Review:">
+<!ENTITY torbutton.about.donate "If you like using Tor, you might consider">
+<!ENTITY torbutton.about.make_donation "making a donation.">
<!ENTITY torbutton.pref_connection.notice "Disable Torbutton to change these settings.">
<!ENTITY torbutton.pref_connection.more_info "More information">
<!ENTITY torbutton.pref_connection_more_info.title "Help">
diff --git a/src/chrome/locale/bn/torbutton.dtd b/src/chrome/locale/bn/torbutton.dtd
index 998eb76..0da56d5 100644
--- a/src/chrome/locale/bn/torbutton.dtd
+++ b/src/chrome/locale/bn/torbutton.dtd
@@ -16,6 +16,13 @@
<!ENTITY torbutton.prefs.proxy.host.socks "SOCKS Host:">
<!ENTITY torbutton.prefs.proxy.port "Port:">
<!ENTITY torbutton.about.title "About Torbutton">
+<!ENTITY torbutton.about.version "Version:">
+<!ENTITY torbutton.about.summary "Protects the privacy of your Tor browsing.">
+<!ENTITY torbutton.about.code "Code Contributors:">
+<!ENTITY torbutton.about.maintainer "Maintainer:">
+<!ENTITY torbutton.about.security_review "Security Review:">
+<!ENTITY torbutton.about.donate "If you like using Tor, you might consider">
+<!ENTITY torbutton.about.make_donation "making a donation.">
<!ENTITY torbutton.pref_connection.notice "Disable Torbutton to change these settings.">
<!ENTITY torbutton.pref_connection.more_info "More information">
<!ENTITY torbutton.pref_connection_more_info.title "Help">
diff --git a/src/chrome/locale/bo/torbutton.dtd b/src/chrome/locale/bo/torbutton.dtd
index 998eb76..0da56d5 100644
--- a/src/chrome/locale/bo/torbutton.dtd
+++ b/src/chrome/locale/bo/torbutton.dtd
@@ -16,6 +16,13 @@
<!ENTITY torbutton.prefs.proxy.host.socks "SOCKS Host:">
<!ENTITY torbutton.prefs.proxy.port "Port:">
<!ENTITY torbutton.about.title "About Torbutton">
+<!ENTITY torbutton.about.version "Version:">
+<!ENTITY torbutton.about.summary "Protects the privacy of your Tor browsing.">
+<!ENTITY torbutton.about.code "Code Contributors:">
+<!ENTITY torbutton.about.maintainer "Maintainer:">
+<!ENTITY torbutton.about.security_review "Security Review:">
+<!ENTITY torbutton.about.donate "If you like using Tor, you might consider">
+<!ENTITY torbutton.about.make_donation "making a donation.">
<!ENTITY torbutton.pref_connection.notice "Disable Torbutton to change these settings.">
<!ENTITY torbutton.pref_connection.more_info "More information">
<!ENTITY torbutton.pref_connection_more_info.title "Help">
diff --git a/src/chrome/locale/br/torbutton.dtd b/src/chrome/locale/br/torbutton.dtd
index 998eb76..0da56d5 100644
--- a/src/chrome/locale/br/torbutton.dtd
+++ b/src/chrome/locale/br/torbutton.dtd
@@ -16,6 +16,13 @@
<!ENTITY torbutton.prefs.proxy.host.socks "SOCKS Host:">
<!ENTITY torbutton.prefs.proxy.port "Port:">
<!ENTITY torbutton.about.title "About Torbutton">
+<!ENTITY torbutton.about.version "Version:">
+<!ENTITY torbutton.about.summary "Protects the privacy of your Tor browsing.">
+<!ENTITY torbutton.about.code "Code Contributors:">
+<!ENTITY torbutton.about.maintainer "Maintainer:">
+<!ENTITY torbutton.about.security_review "Security Review:">
+<!ENTITY torbutton.about.donate "If you like using Tor, you might consider">
+<!ENTITY torbutton.about.make_donation "making a donation.">
<!ENTITY torbutton.pref_connection.notice "Disable Torbutton to change these settings.">
<!ENTITY torbutton.pref_connection.more_info "More information">
<!ENTITY torbutton.pref_connection_more_info.title "Help">
diff --git a/src/chrome/locale/bs/torbutton.dtd b/src/chrome/locale/bs/torbutton.dtd
index 998eb76..0da56d5 100644
--- a/src/chrome/locale/bs/torbutton.dtd
+++ b/src/chrome/locale/bs/torbutton.dtd
@@ -16,6 +16,13 @@
<!ENTITY torbutton.prefs.proxy.host.socks "SOCKS Host:">
<!ENTITY torbutton.prefs.proxy.port "Port:">
<!ENTITY torbutton.about.title "About Torbutton">
+<!ENTITY torbutton.about.version "Version:">
+<!ENTITY torbutton.about.summary "Protects the privacy of your Tor browsing.">
+<!ENTITY torbutton.about.code "Code Contributors:">
+<!ENTITY torbutton.about.maintainer "Maintainer:">
+<!ENTITY torbutton.about.security_review "Security Review:">
+<!ENTITY torbutton.about.donate "If you like using Tor, you might consider">
+<!ENTITY torbutton.about.make_donation "making a donation.">
<!ENTITY torbutton.pref_connection.notice "Disable Torbutton to change these settings.">
<!ENTITY torbutton.pref_connection.more_info "More information">
<!ENTITY torbutton.pref_connection_more_info.title "Help">
diff --git a/src/chrome/locale/ca/torbutton.dtd b/src/chrome/locale/ca/torbutton.dtd
index cf76234..dc0e66d 100644
--- a/src/chrome/locale/ca/torbutton.dtd
+++ b/src/chrome/locale/ca/torbutton.dtd
@@ -16,6 +16,13 @@
<!ENTITY torbutton.prefs.proxy.host.socks "Amfitrió SOCKS:">
<!ENTITY torbutton.prefs.proxy.port "Port:">
<!ENTITY torbutton.about.title "Quant a Torbutton">
+<!ENTITY torbutton.about.version "Version:">
+<!ENTITY torbutton.about.summary "Protects the privacy of your Tor browsing.">
+<!ENTITY torbutton.about.code "Code Contributors:">
+<!ENTITY torbutton.about.maintainer "Maintainer:">
+<!ENTITY torbutton.about.security_review "Security Review:">
+<!ENTITY torbutton.about.donate "If you like using Tor, you might consider">
+<!ENTITY torbutton.about.make_donation "making a donation.">
<!ENTITY torbutton.pref_connection.notice "No permetis que Torbutton canvii aquesta configuració.">
<!ENTITY torbutton.pref_connection.more_info "Més informació">
<!ENTITY torbutton.pref_connection_more_info.title "Ajuda">
diff --git a/src/chrome/locale/cs/torbutton.dtd b/src/chrome/locale/cs/torbutton.dtd
index cea6b26..67a3920 100644
--- a/src/chrome/locale/cs/torbutton.dtd
+++ b/src/chrome/locale/cs/torbutton.dtd
@@ -16,6 +16,13 @@
<!ENTITY torbutton.prefs.proxy.host.socks "SOCKS Host:">
<!ENTITY torbutton.prefs.proxy.port "Port:">
<!ENTITY torbutton.about.title "O Torbutton">
+<!ENTITY torbutton.about.version "Version:">
+<!ENTITY torbutton.about.summary "Protects the privacy of your Tor browsing.">
+<!ENTITY torbutton.about.code "Code Contributors:">
+<!ENTITY torbutton.about.maintainer "Maintainer:">
+<!ENTITY torbutton.about.security_review "Security Review:">
+<!ENTITY torbutton.about.donate "If you like using Tor, you might consider">
+<!ENTITY torbutton.about.make_donation "making a donation.">
<!ENTITY torbutton.pref_connection.notice "Zakázat aplikaci Torbutton toto nastavení měnit.">
<!ENTITY torbutton.pref_connection.more_info "Více informací">
<!ENTITY torbutton.pref_connection_more_info.title "Nápověda">
diff --git a/src/chrome/locale/csb/torbutton.dtd b/src/chrome/locale/csb/torbutton.dtd
index 998eb76..0da56d5 100644
--- a/src/chrome/locale/csb/torbutton.dtd
+++ b/src/chrome/locale/csb/torbutton.dtd
@@ -16,6 +16,13 @@
<!ENTITY torbutton.prefs.proxy.host.socks "SOCKS Host:">
<!ENTITY torbutton.prefs.proxy.port "Port:">
<!ENTITY torbutton.about.title "About Torbutton">
+<!ENTITY torbutton.about.version "Version:">
+<!ENTITY torbutton.about.summary "Protects the privacy of your Tor browsing.">
+<!ENTITY torbutton.about.code "Code Contributors:">
+<!ENTITY torbutton.about.maintainer "Maintainer:">
+<!ENTITY torbutton.about.security_review "Security Review:">
+<!ENTITY torbutton.about.donate "If you like using Tor, you might consider">
+<!ENTITY torbutton.about.make_donation "making a donation.">
<!ENTITY torbutton.pref_connection.notice "Disable Torbutton to change these settings.">
<!ENTITY torbutton.pref_connection.more_info "More information">
<!ENTITY torbutton.pref_connection_more_info.title "Help">
diff --git a/src/chrome/locale/cy/torbutton.dtd b/src/chrome/locale/cy/torbutton.dtd
index 998eb76..0da56d5 100644
--- a/src/chrome/locale/cy/torbutton.dtd
+++ b/src/chrome/locale/cy/torbutton.dtd
@@ -16,6 +16,13 @@
<!ENTITY torbutton.prefs.proxy.host.socks "SOCKS Host:">
<!ENTITY torbutton.prefs.proxy.port "Port:">
<!ENTITY torbutton.about.title "About Torbutton">
+<!ENTITY torbutton.about.version "Version:">
+<!ENTITY torbutton.about.summary "Protects the privacy of your Tor browsing.">
+<!ENTITY torbutton.about.code "Code Contributors:">
+<!ENTITY torbutton.about.maintainer "Maintainer:">
+<!ENTITY torbutton.about.security_review "Security Review:">
+<!ENTITY torbutton.about.donate "If you like using Tor, you might consider">
+<!ENTITY torbutton.about.make_donation "making a donation.">
<!ENTITY torbutton.pref_connection.notice "Disable Torbutton to change these settings.">
<!ENTITY torbutton.pref_connection.more_info "More information">
<!ENTITY torbutton.pref_connection_more_info.title "Help">
diff --git a/src/chrome/locale/cy/torbutton.properties b/src/chrome/locale/cy/torbutton.properties
index 2399f53..5b838c3 100644
--- a/src/chrome/locale/cy/torbutton.properties
+++ b/src/chrome/locale/cy/torbutton.properties
@@ -1,18 +1,18 @@
-torbutton.button.tooltip.disabled = Enable Tor
-torbutton.button.tooltip.enabled = Disable Tor
-torbutton.panel.tooltip.disabled = Click to enable Tor
-torbutton.panel.tooltip.enabled = Click to disable Tor
-torbutton.panel.plugins.disabled = Click to enable plugins
-torbutton.panel.plugins.enabled = Click to disable plugins
-torbutton.panel.label.disabled = Tor Disabled
-torbutton.panel.label.enabled = Tor Enabled
+torbutton.button.tooltip.disabled = Galluogi Tor
+torbutton.button.tooltip.enabled = Analluoga Tor
+torbutton.panel.tooltip.disabled = Cliciwch i alluogi Tor
+torbutton.panel.tooltip.enabled = Cliciwch i analluogu Tor
+torbutton.panel.plugins.disabled = Cliciwch i alluogi plugins
+torbutton.panel.plugins.enabled = Cliciwch i analluogi plugins
+torbutton.panel.label.disabled = Tor Anabl
+torbutton.panel.label.enabled = Tor Galluog
extensions.{e0204bd5-9d31-402b-a99d-a6aa8ffebdca}.description = Torbutton provides a button to easily enable or disable pointing Firefox to the Tor proxy
torbutton.popup.history.warning = Torbutton blocked activity from a tab loaded in a different Tor state.\n\nThis is to work around Firefox Bugs 409737 and 417869.\n\nIf this popup seemed to happen for no reason, one of your tabs is attempting to reload itself in the background, and this was blocked.\n\nTo reload the tab in this Tor state, hit 'enter' in the URL location box.\n\n
torbutton.popup.plugin.warning = Torbutton blocked direct Tor load of plugin content.\n\nUse Save-As instead.\n\n
torbutton.popup.confirm_ca_certs = Torbutton Note: It appears you have no custom Certificate Authorities. Examining the Certificate Authority list is a slow operation and slows down Tor toggle. Would you like to disable the isolation of Certificate Authority certificates? (If you don't understand this, it is safe to click OK)
torbutton.popup.ff3.warning = Warning!\n\nTorbutton on Firefox 3 is known to leak your timezone and livemarks via Tor.\n\nDo you wish to continue anyway?
torbutton.popup.toggle.warning = You need to toggle Tor or restart for your settings to take effect.
-torbutton.popup.test.success = Tor proxy test successful!
+torbutton.popup.test.success = Prawf procsi Tor llwyddiannus!
torbutton.popup.test.failure = Tor proxy test FAILED! Check your proxy and Polipo settings.
torbutton.popup.test.confirm_toggle = The most recent Tor proxy test failed to use Tor.\n\nAre you sure you want to enable anyway?\n\nNote: If you have fixed the problem, you can rerun the test in the Torbutton Proxy Preferences window to eliminate this warning.
torbutton.popup.test.ff3_notice = Click OK to test Tor proxy settings. This test will happen in the background. Please be patient.
diff --git a/src/chrome/locale/da/torbutton.dtd b/src/chrome/locale/da/torbutton.dtd
index 1508492..577d7b9 100644
--- a/src/chrome/locale/da/torbutton.dtd
+++ b/src/chrome/locale/da/torbutton.dtd
@@ -16,6 +16,13 @@
<!ENTITY torbutton.prefs.proxy.host.socks "SOCKS Host:">
<!ENTITY torbutton.prefs.proxy.port "Port:">
<!ENTITY torbutton.about.title "Om Torbutton">
+<!ENTITY torbutton.about.version "Version:">
+<!ENTITY torbutton.about.summary "Protects the privacy of your Tor browsing.">
+<!ENTITY torbutton.about.code "Code Contributors:">
+<!ENTITY torbutton.about.maintainer "Maintainer:">
+<!ENTITY torbutton.about.security_review "Security Review:">
+<!ENTITY torbutton.about.donate "If you like using Tor, you might consider">
+<!ENTITY torbutton.about.make_donation "making a donation.">
<!ENTITY torbutton.pref_connection.notice "Deaktiver Torbutton for at ændre disse indstillinger.">
<!ENTITY torbutton.pref_connection.more_info "Mere Information">
<!ENTITY torbutton.pref_connection_more_info.title "Hjælp">
diff --git a/src/chrome/locale/de/torbutton.dtd b/src/chrome/locale/de/torbutton.dtd
index 0a18258..7a0f195 100644
--- a/src/chrome/locale/de/torbutton.dtd
+++ b/src/chrome/locale/de/torbutton.dtd
@@ -16,6 +16,13 @@
<!ENTITY torbutton.prefs.proxy.host.socks "SOCKS-Host:">
<!ENTITY torbutton.prefs.proxy.port "Port:">
<!ENTITY torbutton.about.title "Über Torbutton">
+<!ENTITY torbutton.about.version "Version:">
+<!ENTITY torbutton.about.summary "Protects the privacy of your Tor browsing.">
+<!ENTITY torbutton.about.code "Code Contributors:">
+<!ENTITY torbutton.about.maintainer "Maintainer:">
+<!ENTITY torbutton.about.security_review "Security Review:">
+<!ENTITY torbutton.about.donate "If you like using Tor, you might consider">
+<!ENTITY torbutton.about.make_donation "making a donation.">
<!ENTITY torbutton.pref_connection.notice "Deaktivieren Sie Torbutton, um diese Einstellungen zu verändern.">
<!ENTITY torbutton.pref_connection.more_info "Mehr Informationen">
<!ENTITY torbutton.pref_connection_more_info.title "Hilfe">
diff --git a/src/chrome/locale/dz/torbutton.dtd b/src/chrome/locale/dz/torbutton.dtd
index 998eb76..0da56d5 100644
--- a/src/chrome/locale/dz/torbutton.dtd
+++ b/src/chrome/locale/dz/torbutton.dtd
@@ -16,6 +16,13 @@
<!ENTITY torbutton.prefs.proxy.host.socks "SOCKS Host:">
<!ENTITY torbutton.prefs.proxy.port "Port:">
<!ENTITY torbutton.about.title "About Torbutton">
+<!ENTITY torbutton.about.version "Version:">
+<!ENTITY torbutton.about.summary "Protects the privacy of your Tor browsing.">
+<!ENTITY torbutton.about.code "Code Contributors:">
+<!ENTITY torbutton.about.maintainer "Maintainer:">
+<!ENTITY torbutton.about.security_review "Security Review:">
+<!ENTITY torbutton.about.donate "If you like using Tor, you might consider">
+<!ENTITY torbutton.about.make_donation "making a donation.">
<!ENTITY torbutton.pref_connection.notice "Disable Torbutton to change these settings.">
<!ENTITY torbutton.pref_connection.more_info "More information">
<!ENTITY torbutton.pref_connection_more_info.title "Help">
diff --git a/src/chrome/locale/el/torbutton.dtd b/src/chrome/locale/el/torbutton.dtd
index 721a786..0b7bee3 100644
--- a/src/chrome/locale/el/torbutton.dtd
+++ b/src/chrome/locale/el/torbutton.dtd
@@ -16,6 +16,13 @@
<!ENTITY torbutton.prefs.proxy.host.socks "Κεντρικός υπολογιστής SOCKS :">
<!ENTITY torbutton.prefs.proxy.port "Θύρα :">
<!ENTITY torbutton.about.title "Περί Torbutton">
+<!ENTITY torbutton.about.version "Version:">
+<!ENTITY torbutton.about.summary "Protects the privacy of your Tor browsing.">
+<!ENTITY torbutton.about.code "Code Contributors:">
+<!ENTITY torbutton.about.maintainer "Maintainer:">
+<!ENTITY torbutton.about.security_review "Security Review:">
+<!ENTITY torbutton.about.donate "If you like using Tor, you might consider">
+<!ENTITY torbutton.about.make_donation "making a donation.">
<!ENTITY torbutton.pref_connection.notice "Απενεργοποιήστε το Torbutton για να αλλάξετε αυτές τις ρυθμίσεις.">
<!ENTITY torbutton.pref_connection.more_info "Περισσότερες πληροφορίες">
<!ENTITY torbutton.pref_connection_more_info.title "Βοήθεια">
diff --git a/src/chrome/locale/eo/torbutton.dtd b/src/chrome/locale/eo/torbutton.dtd
index 998eb76..0da56d5 100644
--- a/src/chrome/locale/eo/torbutton.dtd
+++ b/src/chrome/locale/eo/torbutton.dtd
@@ -16,6 +16,13 @@
<!ENTITY torbutton.prefs.proxy.host.socks "SOCKS Host:">
<!ENTITY torbutton.prefs.proxy.port "Port:">
<!ENTITY torbutton.about.title "About Torbutton">
+<!ENTITY torbutton.about.version "Version:">
+<!ENTITY torbutton.about.summary "Protects the privacy of your Tor browsing.">
+<!ENTITY torbutton.about.code "Code Contributors:">
+<!ENTITY torbutton.about.maintainer "Maintainer:">
+<!ENTITY torbutton.about.security_review "Security Review:">
+<!ENTITY torbutton.about.donate "If you like using Tor, you might consider">
+<!ENTITY torbutton.about.make_donation "making a donation.">
<!ENTITY torbutton.pref_connection.notice "Disable Torbutton to change these settings.">
<!ENTITY torbutton.pref_connection.more_info "More information">
<!ENTITY torbutton.pref_connection_more_info.title "Help">
diff --git a/src/chrome/locale/es/torbutton.dtd b/src/chrome/locale/es/torbutton.dtd
index 35c8ca0..0a4b8c1 100644
--- a/src/chrome/locale/es/torbutton.dtd
+++ b/src/chrome/locale/es/torbutton.dtd
@@ -16,6 +16,13 @@
<!ENTITY torbutton.prefs.proxy.host.socks "Host SOCKS:">
<!ENTITY torbutton.prefs.proxy.port "Puerto:">
<!ENTITY torbutton.about.title "Acerca de Torbutton">
+<!ENTITY torbutton.about.version "Version:">
+<!ENTITY torbutton.about.summary "Protects the privacy of your Tor browsing.">
+<!ENTITY torbutton.about.code "Code Contributors:">
+<!ENTITY torbutton.about.maintainer "Maintainer:">
+<!ENTITY torbutton.about.security_review "Security Review:">
+<!ENTITY torbutton.about.donate "If you like using Tor, you might consider">
+<!ENTITY torbutton.about.make_donation "making a donation.">
<!ENTITY torbutton.pref_connection.notice "Desactive Torbutton para cambiar esta configuración.">
<!ENTITY torbutton.pref_connection.more_info "Más información">
<!ENTITY torbutton.pref_connection_more_info.title "Ayuda">
diff --git a/src/chrome/locale/et/torbutton.dtd b/src/chrome/locale/et/torbutton.dtd
index cf24907..252d5d4 100644
--- a/src/chrome/locale/et/torbutton.dtd
+++ b/src/chrome/locale/et/torbutton.dtd
@@ -16,6 +16,13 @@
<!ENTITY torbutton.prefs.proxy.host.socks "SOCKS Host:">
<!ENTITY torbutton.prefs.proxy.port "Port:">
<!ENTITY torbutton.about.title "About Torbutton">
+<!ENTITY torbutton.about.version "Version:">
+<!ENTITY torbutton.about.summary "Protects the privacy of your Tor browsing.">
+<!ENTITY torbutton.about.code "Code Contributors:">
+<!ENTITY torbutton.about.maintainer "Maintainer:">
+<!ENTITY torbutton.about.security_review "Security Review:">
+<!ENTITY torbutton.about.donate "If you like using Tor, you might consider">
+<!ENTITY torbutton.about.make_donation "making a donation.">
<!ENTITY torbutton.pref_connection.notice "Disable Torbutton to change these settings.">
<!ENTITY torbutton.pref_connection.more_info "More information">
<!ENTITY torbutton.pref_connection_more_info.title "Help">
diff --git a/src/chrome/locale/eu/torbutton.dtd b/src/chrome/locale/eu/torbutton.dtd
index 998eb76..0da56d5 100644
--- a/src/chrome/locale/eu/torbutton.dtd
+++ b/src/chrome/locale/eu/torbutton.dtd
@@ -16,6 +16,13 @@
<!ENTITY torbutton.prefs.proxy.host.socks "SOCKS Host:">
<!ENTITY torbutton.prefs.proxy.port "Port:">
<!ENTITY torbutton.about.title "About Torbutton">
+<!ENTITY torbutton.about.version "Version:">
+<!ENTITY torbutton.about.summary "Protects the privacy of your Tor browsing.">
+<!ENTITY torbutton.about.code "Code Contributors:">
+<!ENTITY torbutton.about.maintainer "Maintainer:">
+<!ENTITY torbutton.about.security_review "Security Review:">
+<!ENTITY torbutton.about.donate "If you like using Tor, you might consider">
+<!ENTITY torbutton.about.make_donation "making a donation.">
<!ENTITY torbutton.pref_connection.notice "Disable Torbutton to change these settings.">
<!ENTITY torbutton.pref_connection.more_info "More information">
<!ENTITY torbutton.pref_connection_more_info.title "Help">
diff --git a/src/chrome/locale/fa/torbutton.dtd b/src/chrome/locale/fa/torbutton.dtd
index 818f074..20b890b 100644
--- a/src/chrome/locale/fa/torbutton.dtd
+++ b/src/chrome/locale/fa/torbutton.dtd
@@ -16,6 +16,13 @@
<!ENTITY torbutton.prefs.proxy.host.socks "ميزبان SOCKS:">
<!ENTITY torbutton.prefs.proxy.port "درگاهی (Port):">
<!ENTITY torbutton.about.title "دربارۀ دکمه تُر">
+<!ENTITY torbutton.about.version "Version:">
+<!ENTITY torbutton.about.summary "Protects the privacy of your Tor browsing.">
+<!ENTITY torbutton.about.code "Code Contributors:">
+<!ENTITY torbutton.about.maintainer "Maintainer:">
+<!ENTITY torbutton.about.security_review "Security Review:">
+<!ENTITY torbutton.about.donate "If you like using Tor, you might consider">
+<!ENTITY torbutton.about.make_donation "making a donation.">
<!ENTITY torbutton.pref_connection.notice "غيرفعال کردن دکمه تُر جهت تغيير دراين تنظيمات.">
<!ENTITY torbutton.pref_connection.more_info "اطلاعات بيشتر">
<!ENTITY torbutton.pref_connection_more_info.title "راهنما">
diff --git a/src/chrome/locale/fa/torbutton.properties b/src/chrome/locale/fa/torbutton.properties
index 7f3c630..6cae6d2 100644
--- a/src/chrome/locale/fa/torbutton.properties
+++ b/src/chrome/locale/fa/torbutton.properties
@@ -34,4 +34,4 @@ torbutton.popup.captcha.ask = Torbutton detected a Google Captcha. Would you lik
torbutton.popup.captcha.always = از حالا به بعد هر برنامه ای را اجرا کن
torbutton.popup.redirect = تغيير مسير....
torbutton.popup.no_redirect = تغيير مسير ممكن نيست
-torbutton.popup.prompted_language = To give you more privacy, Torbutton can request the English language version of web pages. This may cause web pages that you prefer to read in your native language to display in English instead.\n\nWould you like to request English language web pages for better privacy?
+torbutton.popup.prompted_language = برای حفاظت بيشتر از حريم خصوصی شما، دکمه تُر میتواند نسخه انگليسی صفحات وب را درخواست کند. اين موضوع ممکن است باعث شود صفحههایی که دوست داريد به زبان مادری خود بخوانيد به انگليسی نمايش داده شوند.\n\nآيا با اين وجود میخواهيد برای حفاظت بيشتر از حريم خصوصی درخواست نسخه انگليسی صفحات را بدهيد؟
diff --git a/src/chrome/locale/fi/torbutton.dtd b/src/chrome/locale/fi/torbutton.dtd
index 67cedef..5939e60 100644
--- a/src/chrome/locale/fi/torbutton.dtd
+++ b/src/chrome/locale/fi/torbutton.dtd
@@ -16,6 +16,13 @@
<!ENTITY torbutton.prefs.proxy.host.socks "SOCKS-palvelin:">
<!ENTITY torbutton.prefs.proxy.port "Portti:">
<!ENTITY torbutton.about.title "Tietoja Torbuttonista">
+<!ENTITY torbutton.about.version "Version:">
+<!ENTITY torbutton.about.summary "Protects the privacy of your Tor browsing.">
+<!ENTITY torbutton.about.code "Code Contributors:">
+<!ENTITY torbutton.about.maintainer "Maintainer:">
+<!ENTITY torbutton.about.security_review "Security Review:">
+<!ENTITY torbutton.about.donate "If you like using Tor, you might consider">
+<!ENTITY torbutton.about.make_donation "making a donation.">
<!ENTITY torbutton.pref_connection.notice "Poista Torbutton käytöstä muuttaaksesi asetuksia.">
<!ENTITY torbutton.pref_connection.more_info "Lisää tietoja">
<!ENTITY torbutton.pref_connection_more_info.title "Apua">
diff --git a/src/chrome/locale/fil/torbutton.dtd b/src/chrome/locale/fil/torbutton.dtd
index 998eb76..0da56d5 100644
--- a/src/chrome/locale/fil/torbutton.dtd
+++ b/src/chrome/locale/fil/torbutton.dtd
@@ -16,6 +16,13 @@
<!ENTITY torbutton.prefs.proxy.host.socks "SOCKS Host:">
<!ENTITY torbutton.prefs.proxy.port "Port:">
<!ENTITY torbutton.about.title "About Torbutton">
+<!ENTITY torbutton.about.version "Version:">
+<!ENTITY torbutton.about.summary "Protects the privacy of your Tor browsing.">
+<!ENTITY torbutton.about.code "Code Contributors:">
+<!ENTITY torbutton.about.maintainer "Maintainer:">
+<!ENTITY torbutton.about.security_review "Security Review:">
+<!ENTITY torbutton.about.donate "If you like using Tor, you might consider">
+<!ENTITY torbutton.about.make_donation "making a donation.">
<!ENTITY torbutton.pref_connection.notice "Disable Torbutton to change these settings.">
<!ENTITY torbutton.pref_connection.more_info "More information">
<!ENTITY torbutton.pref_connection_more_info.title "Help">
diff --git a/src/chrome/locale/fo/torbutton.dtd b/src/chrome/locale/fo/torbutton.dtd
index 998eb76..0da56d5 100644
--- a/src/chrome/locale/fo/torbutton.dtd
+++ b/src/chrome/locale/fo/torbutton.dtd
@@ -16,6 +16,13 @@
<!ENTITY torbutton.prefs.proxy.host.socks "SOCKS Host:">
<!ENTITY torbutton.prefs.proxy.port "Port:">
<!ENTITY torbutton.about.title "About Torbutton">
+<!ENTITY torbutton.about.version "Version:">
+<!ENTITY torbutton.about.summary "Protects the privacy of your Tor browsing.">
+<!ENTITY torbutton.about.code "Code Contributors:">
+<!ENTITY torbutton.about.maintainer "Maintainer:">
+<!ENTITY torbutton.about.security_review "Security Review:">
+<!ENTITY torbutton.about.donate "If you like using Tor, you might consider">
+<!ENTITY torbutton.about.make_donation "making a donation.">
<!ENTITY torbutton.pref_connection.notice "Disable Torbutton to change these settings.">
<!ENTITY torbutton.pref_connection.more_info "More information">
<!ENTITY torbutton.pref_connection_more_info.title "Help">
diff --git a/src/chrome/locale/fr/torbutton.dtd b/src/chrome/locale/fr/torbutton.dtd
index 95e72a7..164a0e2 100644
--- a/src/chrome/locale/fr/torbutton.dtd
+++ b/src/chrome/locale/fr/torbutton.dtd
@@ -16,6 +16,13 @@
<!ENTITY torbutton.prefs.proxy.host.socks "Hôte SOCKS:">
<!ENTITY torbutton.prefs.proxy.port "Port:">
<!ENTITY torbutton.about.title "À propos de Torbutton">
+<!ENTITY torbutton.about.version "Version:">
+<!ENTITY torbutton.about.summary "Protects the privacy of your Tor browsing.">
+<!ENTITY torbutton.about.code "Code Contributors:">
+<!ENTITY torbutton.about.maintainer "Maintainer:">
+<!ENTITY torbutton.about.security_review "Security Review:">
+<!ENTITY torbutton.about.donate "If you like using Tor, you might consider">
+<!ENTITY torbutton.about.make_donation "making a donation.">
<!ENTITY torbutton.pref_connection.notice "Désactiver Torbutton pour modifier ces paramètres.">
<!ENTITY torbutton.pref_connection.more_info "Plus d'informations">
<!ENTITY torbutton.pref_connection_more_info.title "Aide">
diff --git a/src/chrome/locale/fur/torbutton.dtd b/src/chrome/locale/fur/torbutton.dtd
index 998eb76..0da56d5 100644
--- a/src/chrome/locale/fur/torbutton.dtd
+++ b/src/chrome/locale/fur/torbutton.dtd
@@ -16,6 +16,13 @@
<!ENTITY torbutton.prefs.proxy.host.socks "SOCKS Host:">
<!ENTITY torbutton.prefs.proxy.port "Port:">
<!ENTITY torbutton.about.title "About Torbutton">
+<!ENTITY torbutton.about.version "Version:">
+<!ENTITY torbutton.about.summary "Protects the privacy of your Tor browsing.">
+<!ENTITY torbutton.about.code "Code Contributors:">
+<!ENTITY torbutton.about.maintainer "Maintainer:">
+<!ENTITY torbutton.about.security_review "Security Review:">
+<!ENTITY torbutton.about.donate "If you like using Tor, you might consider">
+<!ENTITY torbutton.about.make_donation "making a donation.">
<!ENTITY torbutton.pref_connection.notice "Disable Torbutton to change these settings.">
<!ENTITY torbutton.pref_connection.more_info "More information">
<!ENTITY torbutton.pref_connection_more_info.title "Help">
diff --git a/src/chrome/locale/fy/torbutton.dtd b/src/chrome/locale/fy/torbutton.dtd
index 998eb76..0da56d5 100644
--- a/src/chrome/locale/fy/torbutton.dtd
+++ b/src/chrome/locale/fy/torbutton.dtd
@@ -16,6 +16,13 @@
<!ENTITY torbutton.prefs.proxy.host.socks "SOCKS Host:">
<!ENTITY torbutton.prefs.proxy.port "Port:">
<!ENTITY torbutton.about.title "About Torbutton">
+<!ENTITY torbutton.about.version "Version:">
+<!ENTITY torbutton.about.summary "Protects the privacy of your Tor browsing.">
+<!ENTITY torbutton.about.code "Code Contributors:">
+<!ENTITY torbutton.about.maintainer "Maintainer:">
+<!ENTITY torbutton.about.security_review "Security Review:">
+<!ENTITY torbutton.about.donate "If you like using Tor, you might consider">
+<!ENTITY torbutton.about.make_donation "making a donation.">
<!ENTITY torbutton.pref_connection.notice "Disable Torbutton to change these settings.">
<!ENTITY torbutton.pref_connection.more_info "More information">
<!ENTITY torbutton.pref_connection_more_info.title "Help">
diff --git a/src/chrome/locale/ga/torbutton.dtd b/src/chrome/locale/ga/torbutton.dtd
index 998eb76..0da56d5 100644
--- a/src/chrome/locale/ga/torbutton.dtd
+++ b/src/chrome/locale/ga/torbutton.dtd
@@ -16,6 +16,13 @@
<!ENTITY torbutton.prefs.proxy.host.socks "SOCKS Host:">
<!ENTITY torbutton.prefs.proxy.port "Port:">
<!ENTITY torbutton.about.title "About Torbutton">
+<!ENTITY torbutton.about.version "Version:">
+<!ENTITY torbutton.about.summary "Protects the privacy of your Tor browsing.">
+<!ENTITY torbutton.about.code "Code Contributors:">
+<!ENTITY torbutton.about.maintainer "Maintainer:">
+<!ENTITY torbutton.about.security_review "Security Review:">
+<!ENTITY torbutton.about.donate "If you like using Tor, you might consider">
+<!ENTITY torbutton.about.make_donation "making a donation.">
<!ENTITY torbutton.pref_connection.notice "Disable Torbutton to change these settings.">
<!ENTITY torbutton.pref_connection.more_info "More information">
<!ENTITY torbutton.pref_connection_more_info.title "Help">
diff --git a/src/chrome/locale/gl/torbutton.dtd b/src/chrome/locale/gl/torbutton.dtd
index 998eb76..0da56d5 100644
--- a/src/chrome/locale/gl/torbutton.dtd
+++ b/src/chrome/locale/gl/torbutton.dtd
@@ -16,6 +16,13 @@
<!ENTITY torbutton.prefs.proxy.host.socks "SOCKS Host:">
<!ENTITY torbutton.prefs.proxy.port "Port:">
<!ENTITY torbutton.about.title "About Torbutton">
+<!ENTITY torbutton.about.version "Version:">
+<!ENTITY torbutton.about.summary "Protects the privacy of your Tor browsing.">
+<!ENTITY torbutton.about.code "Code Contributors:">
+<!ENTITY torbutton.about.maintainer "Maintainer:">
+<!ENTITY torbutton.about.security_review "Security Review:">
+<!ENTITY torbutton.about.donate "If you like using Tor, you might consider">
+<!ENTITY torbutton.about.make_donation "making a donation.">
<!ENTITY torbutton.pref_connection.notice "Disable Torbutton to change these settings.">
<!ENTITY torbutton.pref_connection.more_info "More information">
<!ENTITY torbutton.pref_connection_more_info.title "Help">
diff --git a/src/chrome/locale/gu/torbutton.dtd b/src/chrome/locale/gu/torbutton.dtd
index 8ecadcf..c7012bd 100644
--- a/src/chrome/locale/gu/torbutton.dtd
+++ b/src/chrome/locale/gu/torbutton.dtd
@@ -16,6 +16,13 @@
<!ENTITY torbutton.prefs.proxy.host.socks "SOCKS યજમાન:">
<!ENTITY torbutton.prefs.proxy.port "પોર્ટ:">
<!ENTITY torbutton.about.title "ટોરબટન વિશે">
+<!ENTITY torbutton.about.version "Version:">
+<!ENTITY torbutton.about.summary "Protects the privacy of your Tor browsing.">
+<!ENTITY torbutton.about.code "Code Contributors:">
+<!ENTITY torbutton.about.maintainer "Maintainer:">
+<!ENTITY torbutton.about.security_review "Security Review:">
+<!ENTITY torbutton.about.donate "If you like using Tor, you might consider">
+<!ENTITY torbutton.about.make_donation "making a donation.">
<!ENTITY torbutton.pref_connection.notice "આ ગોઠવણીઓ બદલવા માટે ટોરબટન નિષ્ક્રિય કરો.">
<!ENTITY torbutton.pref_connection.more_info "વધુ માહિતી">
<!ENTITY torbutton.pref_connection_more_info.title "મદદ">
diff --git a/src/chrome/locale/gun/torbutton.dtd b/src/chrome/locale/gun/torbutton.dtd
index 998eb76..0da56d5 100644
--- a/src/chrome/locale/gun/torbutton.dtd
+++ b/src/chrome/locale/gun/torbutton.dtd
@@ -16,6 +16,13 @@
<!ENTITY torbutton.prefs.proxy.host.socks "SOCKS Host:">
<!ENTITY torbutton.prefs.proxy.port "Port:">
<!ENTITY torbutton.about.title "About Torbutton">
+<!ENTITY torbutton.about.version "Version:">
+<!ENTITY torbutton.about.summary "Protects the privacy of your Tor browsing.">
+<!ENTITY torbutton.about.code "Code Contributors:">
+<!ENTITY torbutton.about.maintainer "Maintainer:">
+<!ENTITY torbutton.about.security_review "Security Review:">
+<!ENTITY torbutton.about.donate "If you like using Tor, you might consider">
+<!ENTITY torbutton.about.make_donation "making a donation.">
<!ENTITY torbutton.pref_connection.notice "Disable Torbutton to change these settings.">
<!ENTITY torbutton.pref_connection.more_info "More information">
<!ENTITY torbutton.pref_connection_more_info.title "Help">
diff --git a/src/chrome/locale/ha/torbutton.dtd b/src/chrome/locale/ha/torbutton.dtd
index 998eb76..0da56d5 100644
--- a/src/chrome/locale/ha/torbutton.dtd
+++ b/src/chrome/locale/ha/torbutton.dtd
@@ -16,6 +16,13 @@
<!ENTITY torbutton.prefs.proxy.host.socks "SOCKS Host:">
<!ENTITY torbutton.prefs.proxy.port "Port:">
<!ENTITY torbutton.about.title "About Torbutton">
+<!ENTITY torbutton.about.version "Version:">
+<!ENTITY torbutton.about.summary "Protects the privacy of your Tor browsing.">
+<!ENTITY torbutton.about.code "Code Contributors:">
+<!ENTITY torbutton.about.maintainer "Maintainer:">
+<!ENTITY torbutton.about.security_review "Security Review:">
+<!ENTITY torbutton.about.donate "If you like using Tor, you might consider">
+<!ENTITY torbutton.about.make_donation "making a donation.">
<!ENTITY torbutton.pref_connection.notice "Disable Torbutton to change these settings.">
<!ENTITY torbutton.pref_connection.more_info "More information">
<!ENTITY torbutton.pref_connection_more_info.title "Help">
diff --git a/src/chrome/locale/he/torbutton.dtd b/src/chrome/locale/he/torbutton.dtd
index 998eb76..0da56d5 100644
--- a/src/chrome/locale/he/torbutton.dtd
+++ b/src/chrome/locale/he/torbutton.dtd
@@ -16,6 +16,13 @@
<!ENTITY torbutton.prefs.proxy.host.socks "SOCKS Host:">
<!ENTITY torbutton.prefs.proxy.port "Port:">
<!ENTITY torbutton.about.title "About Torbutton">
+<!ENTITY torbutton.about.version "Version:">
+<!ENTITY torbutton.about.summary "Protects the privacy of your Tor browsing.">
+<!ENTITY torbutton.about.code "Code Contributors:">
+<!ENTITY torbutton.about.maintainer "Maintainer:">
+<!ENTITY torbutton.about.security_review "Security Review:">
+<!ENTITY torbutton.about.donate "If you like using Tor, you might consider">
+<!ENTITY torbutton.about.make_donation "making a donation.">
<!ENTITY torbutton.pref_connection.notice "Disable Torbutton to change these settings.">
<!ENTITY torbutton.pref_connection.more_info "More information">
<!ENTITY torbutton.pref_connection_more_info.title "Help">
diff --git a/src/chrome/locale/hi/torbutton.dtd b/src/chrome/locale/hi/torbutton.dtd
index a70f4fb..9fd7f08 100644
--- a/src/chrome/locale/hi/torbutton.dtd
+++ b/src/chrome/locale/hi/torbutton.dtd
@@ -16,6 +16,13 @@
<!ENTITY torbutton.prefs.proxy.host.socks "SOCKS आतिथेय :">
<!ENTITY torbutton.prefs.proxy.port "पोर्ट/द्वार :">
<!ENTITY torbutton.about.title "टोर बटन के बारे मे">
+<!ENTITY torbutton.about.version "Version:">
+<!ENTITY torbutton.about.summary "Protects the privacy of your Tor browsing.">
+<!ENTITY torbutton.about.code "Code Contributors:">
+<!ENTITY torbutton.about.maintainer "Maintainer:">
+<!ENTITY torbutton.about.security_review "Security Review:">
+<!ENTITY torbutton.about.donate "If you like using Tor, you might consider">
+<!ENTITY torbutton.about.make_donation "making a donation.">
<!ENTITY torbutton.pref_connection.notice "इन सेटिंग को बदलने के लिये टोर बटन को असमर्थ करे ">
<!ENTITY torbutton.pref_connection.more_info "अधिक जानकारी के लिए ">
<!ENTITY torbutton.pref_connection_more_info.title "सहायता">
diff --git a/src/chrome/locale/hr/torbutton.dtd b/src/chrome/locale/hr/torbutton.dtd
index 43453a2..46ea7a7 100644
--- a/src/chrome/locale/hr/torbutton.dtd
+++ b/src/chrome/locale/hr/torbutton.dtd
@@ -16,6 +16,13 @@
<!ENTITY torbutton.prefs.proxy.host.socks "SOCKS domaćin:">
<!ENTITY torbutton.prefs.proxy.port "Priključak:">
<!ENTITY torbutton.about.title "O Torbutton">
+<!ENTITY torbutton.about.version "Version:">
+<!ENTITY torbutton.about.summary "Protects the privacy of your Tor browsing.">
+<!ENTITY torbutton.about.code "Code Contributors:">
+<!ENTITY torbutton.about.maintainer "Maintainer:">
+<!ENTITY torbutton.about.security_review "Security Review:">
+<!ENTITY torbutton.about.donate "If you like using Tor, you might consider">
+<!ENTITY torbutton.about.make_donation "making a donation.">
<!ENTITY torbutton.pref_connection.notice "Onemogućite Torbutton da biste promijenili ove postavke">
<!ENTITY torbutton.pref_connection.more_info "Više informacija">
<!ENTITY torbutton.pref_connection_more_info.title "Pomoć">
diff --git a/src/chrome/locale/ht/torbutton.dtd b/src/chrome/locale/ht/torbutton.dtd
index 998eb76..0da56d5 100644
--- a/src/chrome/locale/ht/torbutton.dtd
+++ b/src/chrome/locale/ht/torbutton.dtd
@@ -16,6 +16,13 @@
<!ENTITY torbutton.prefs.proxy.host.socks "SOCKS Host:">
<!ENTITY torbutton.prefs.proxy.port "Port:">
<!ENTITY torbutton.about.title "About Torbutton">
+<!ENTITY torbutton.about.version "Version:">
+<!ENTITY torbutton.about.summary "Protects the privacy of your Tor browsing.">
+<!ENTITY torbutton.about.code "Code Contributors:">
+<!ENTITY torbutton.about.maintainer "Maintainer:">
+<!ENTITY torbutton.about.security_review "Security Review:">
+<!ENTITY torbutton.about.donate "If you like using Tor, you might consider">
+<!ENTITY torbutton.about.make_donation "making a donation.">
<!ENTITY torbutton.pref_connection.notice "Disable Torbutton to change these settings.">
<!ENTITY torbutton.pref_connection.more_info "More information">
<!ENTITY torbutton.pref_connection_more_info.title "Help">
diff --git a/src/chrome/locale/hu/torbutton.dtd b/src/chrome/locale/hu/torbutton.dtd
index 998eb76..0da56d5 100644
--- a/src/chrome/locale/hu/torbutton.dtd
+++ b/src/chrome/locale/hu/torbutton.dtd
@@ -16,6 +16,13 @@
<!ENTITY torbutton.prefs.proxy.host.socks "SOCKS Host:">
<!ENTITY torbutton.prefs.proxy.port "Port:">
<!ENTITY torbutton.about.title "About Torbutton">
+<!ENTITY torbutton.about.version "Version:">
+<!ENTITY torbutton.about.summary "Protects the privacy of your Tor browsing.">
+<!ENTITY torbutton.about.code "Code Contributors:">
+<!ENTITY torbutton.about.maintainer "Maintainer:">
+<!ENTITY torbutton.about.security_review "Security Review:">
+<!ENTITY torbutton.about.donate "If you like using Tor, you might consider">
+<!ENTITY torbutton.about.make_donation "making a donation.">
<!ENTITY torbutton.pref_connection.notice "Disable Torbutton to change these settings.">
<!ENTITY torbutton.pref_connection.more_info "More information">
<!ENTITY torbutton.pref_connection_more_info.title "Help">
diff --git a/src/chrome/locale/hy/torbutton.dtd b/src/chrome/locale/hy/torbutton.dtd
index 998eb76..0da56d5 100644
--- a/src/chrome/locale/hy/torbutton.dtd
+++ b/src/chrome/locale/hy/torbutton.dtd
@@ -16,6 +16,13 @@
<!ENTITY torbutton.prefs.proxy.host.socks "SOCKS Host:">
<!ENTITY torbutton.prefs.proxy.port "Port:">
<!ENTITY torbutton.about.title "About Torbutton">
+<!ENTITY torbutton.about.version "Version:">
+<!ENTITY torbutton.about.summary "Protects the privacy of your Tor browsing.">
+<!ENTITY torbutton.about.code "Code Contributors:">
+<!ENTITY torbutton.about.maintainer "Maintainer:">
+<!ENTITY torbutton.about.security_review "Security Review:">
+<!ENTITY torbutton.about.donate "If you like using Tor, you might consider">
+<!ENTITY torbutton.about.make_donation "making a donation.">
<!ENTITY torbutton.pref_connection.notice "Disable Torbutton to change these settings.">
<!ENTITY torbutton.pref_connection.more_info "More information">
<!ENTITY torbutton.pref_connection_more_info.title "Help">
diff --git a/src/chrome/locale/id/torbutton.dtd b/src/chrome/locale/id/torbutton.dtd
index 9a92bd2..f8786b8 100644
--- a/src/chrome/locale/id/torbutton.dtd
+++ b/src/chrome/locale/id/torbutton.dtd
@@ -16,6 +16,13 @@
<!ENTITY torbutton.prefs.proxy.host.socks "SOCKS Host:">
<!ENTITY torbutton.prefs.proxy.port "Port:">
<!ENTITY torbutton.about.title "Tentang Torbutton">
+<!ENTITY torbutton.about.version "Version:">
+<!ENTITY torbutton.about.summary "Protects the privacy of your Tor browsing.">
+<!ENTITY torbutton.about.code "Code Contributors:">
+<!ENTITY torbutton.about.maintainer "Maintainer:">
+<!ENTITY torbutton.about.security_review "Security Review:">
+<!ENTITY torbutton.about.donate "If you like using Tor, you might consider">
+<!ENTITY torbutton.about.make_donation "making a donation.">
<!ENTITY torbutton.pref_connection.notice "Nonaktifkan Torbutton mengubah pengaturan ini.">
<!ENTITY torbutton.pref_connection.more_info "Informasi lebih lanjut">
<!ENTITY torbutton.pref_connection_more_info.title "Bantuan">
diff --git a/src/chrome/locale/is/torbutton.dtd b/src/chrome/locale/is/torbutton.dtd
index 998eb76..0da56d5 100644
--- a/src/chrome/locale/is/torbutton.dtd
+++ b/src/chrome/locale/is/torbutton.dtd
@@ -16,6 +16,13 @@
<!ENTITY torbutton.prefs.proxy.host.socks "SOCKS Host:">
<!ENTITY torbutton.prefs.proxy.port "Port:">
<!ENTITY torbutton.about.title "About Torbutton">
+<!ENTITY torbutton.about.version "Version:">
+<!ENTITY torbutton.about.summary "Protects the privacy of your Tor browsing.">
+<!ENTITY torbutton.about.code "Code Contributors:">
+<!ENTITY torbutton.about.maintainer "Maintainer:">
+<!ENTITY torbutton.about.security_review "Security Review:">
+<!ENTITY torbutton.about.donate "If you like using Tor, you might consider">
+<!ENTITY torbutton.about.make_donation "making a donation.">
<!ENTITY torbutton.pref_connection.notice "Disable Torbutton to change these settings.">
<!ENTITY torbutton.pref_connection.more_info "More information">
<!ENTITY torbutton.pref_connection_more_info.title "Help">
diff --git a/src/chrome/locale/it/torbutton.dtd b/src/chrome/locale/it/torbutton.dtd
index 2d64d16..9d00a6a 100644
--- a/src/chrome/locale/it/torbutton.dtd
+++ b/src/chrome/locale/it/torbutton.dtd
@@ -16,6 +16,13 @@
<!ENTITY torbutton.prefs.proxy.host.socks "Host SOCKS:">
<!ENTITY torbutton.prefs.proxy.port "Porta:">
<!ENTITY torbutton.about.title "Informazioni su Torbutton">
+<!ENTITY torbutton.about.version "Version:">
+<!ENTITY torbutton.about.summary "Protects the privacy of your Tor browsing.">
+<!ENTITY torbutton.about.code "Code Contributors:">
+<!ENTITY torbutton.about.maintainer "Maintainer:">
+<!ENTITY torbutton.about.security_review "Security Review:">
+<!ENTITY torbutton.about.donate "If you like using Tor, you might consider">
+<!ENTITY torbutton.about.make_donation "making a donation.">
<!ENTITY torbutton.pref_connection.notice "Disattiva Torbutton per modificare queste impostazioni">
<!ENTITY torbutton.pref_connection.more_info "Ulteriori informazioni">
<!ENTITY torbutton.pref_connection_more_info.title "Aiuto">
diff --git a/src/chrome/locale/ja/torbutton.dtd b/src/chrome/locale/ja/torbutton.dtd
index fc95178..cae640f 100644
--- a/src/chrome/locale/ja/torbutton.dtd
+++ b/src/chrome/locale/ja/torbutton.dtd
@@ -16,6 +16,13 @@
<!ENTITY torbutton.prefs.proxy.host.socks "SOCKSホスト">
<!ENTITY torbutton.prefs.proxy.port "ポート">
<!ENTITY torbutton.about.title "Torbuttonについて">
+<!ENTITY torbutton.about.version "Version:">
+<!ENTITY torbutton.about.summary "Protects the privacy of your Tor browsing.">
+<!ENTITY torbutton.about.code "Code Contributors:">
+<!ENTITY torbutton.about.maintainer "Maintainer:">
+<!ENTITY torbutton.about.security_review "Security Review:">
+<!ENTITY torbutton.about.donate "If you like using Tor, you might consider">
+<!ENTITY torbutton.about.make_donation "making a donation.">
<!ENTITY torbutton.pref_connection.notice "これらの設定を変更するにはTorbuttonをオフにしてください">
<!ENTITY torbutton.pref_connection.more_info "詳細情報">
<!ENTITY torbutton.pref_connection_more_info.title "ヘルプ">
diff --git a/src/chrome/locale/jv/torbutton.dtd b/src/chrome/locale/jv/torbutton.dtd
index 998eb76..0da56d5 100644
--- a/src/chrome/locale/jv/torbutton.dtd
+++ b/src/chrome/locale/jv/torbutton.dtd
@@ -16,6 +16,13 @@
<!ENTITY torbutton.prefs.proxy.host.socks "SOCKS Host:">
<!ENTITY torbutton.prefs.proxy.port "Port:">
<!ENTITY torbutton.about.title "About Torbutton">
+<!ENTITY torbutton.about.version "Version:">
+<!ENTITY torbutton.about.summary "Protects the privacy of your Tor browsing.">
+<!ENTITY torbutton.about.code "Code Contributors:">
+<!ENTITY torbutton.about.maintainer "Maintainer:">
+<!ENTITY torbutton.about.security_review "Security Review:">
+<!ENTITY torbutton.about.donate "If you like using Tor, you might consider">
+<!ENTITY torbutton.about.make_donation "making a donation.">
<!ENTITY torbutton.pref_connection.notice "Disable Torbutton to change these settings.">
<!ENTITY torbutton.pref_connection.more_info "More information">
<!ENTITY torbutton.pref_connection_more_info.title "Help">
diff --git a/src/chrome/locale/ka/torbutton.dtd b/src/chrome/locale/ka/torbutton.dtd
index 998eb76..0da56d5 100644
--- a/src/chrome/locale/ka/torbutton.dtd
+++ b/src/chrome/locale/ka/torbutton.dtd
@@ -16,6 +16,13 @@
<!ENTITY torbutton.prefs.proxy.host.socks "SOCKS Host:">
<!ENTITY torbutton.prefs.proxy.port "Port:">
<!ENTITY torbutton.about.title "About Torbutton">
+<!ENTITY torbutton.about.version "Version:">
+<!ENTITY torbutton.about.summary "Protects the privacy of your Tor browsing.">
+<!ENTITY torbutton.about.code "Code Contributors:">
+<!ENTITY torbutton.about.maintainer "Maintainer:">
+<!ENTITY torbutton.about.security_review "Security Review:">
+<!ENTITY torbutton.about.donate "If you like using Tor, you might consider">
+<!ENTITY torbutton.about.make_donation "making a donation.">
<!ENTITY torbutton.pref_connection.notice "Disable Torbutton to change these settings.">
<!ENTITY torbutton.pref_connection.more_info "More information">
<!ENTITY torbutton.pref_connection_more_info.title "Help">
diff --git a/src/chrome/locale/km/torbutton.dtd b/src/chrome/locale/km/torbutton.dtd
index 998eb76..0da56d5 100644
--- a/src/chrome/locale/km/torbutton.dtd
+++ b/src/chrome/locale/km/torbutton.dtd
@@ -16,6 +16,13 @@
<!ENTITY torbutton.prefs.proxy.host.socks "SOCKS Host:">
<!ENTITY torbutton.prefs.proxy.port "Port:">
<!ENTITY torbutton.about.title "About Torbutton">
+<!ENTITY torbutton.about.version "Version:">
+<!ENTITY torbutton.about.summary "Protects the privacy of your Tor browsing.">
+<!ENTITY torbutton.about.code "Code Contributors:">
+<!ENTITY torbutton.about.maintainer "Maintainer:">
+<!ENTITY torbutton.about.security_review "Security Review:">
+<!ENTITY torbutton.about.donate "If you like using Tor, you might consider">
+<!ENTITY torbutton.about.make_donation "making a donation.">
<!ENTITY torbutton.pref_connection.notice "Disable Torbutton to change these settings.">
<!ENTITY torbutton.pref_connection.more_info "More information">
<!ENTITY torbutton.pref_connection_more_info.title "Help">
diff --git a/src/chrome/locale/kn/torbutton.dtd b/src/chrome/locale/kn/torbutton.dtd
index 998eb76..0da56d5 100644
--- a/src/chrome/locale/kn/torbutton.dtd
+++ b/src/chrome/locale/kn/torbutton.dtd
@@ -16,6 +16,13 @@
<!ENTITY torbutton.prefs.proxy.host.socks "SOCKS Host:">
<!ENTITY torbutton.prefs.proxy.port "Port:">
<!ENTITY torbutton.about.title "About Torbutton">
+<!ENTITY torbutton.about.version "Version:">
+<!ENTITY torbutton.about.summary "Protects the privacy of your Tor browsing.">
+<!ENTITY torbutton.about.code "Code Contributors:">
+<!ENTITY torbutton.about.maintainer "Maintainer:">
+<!ENTITY torbutton.about.security_review "Security Review:">
+<!ENTITY torbutton.about.donate "If you like using Tor, you might consider">
+<!ENTITY torbutton.about.make_donation "making a donation.">
<!ENTITY torbutton.pref_connection.notice "Disable Torbutton to change these settings.">
<!ENTITY torbutton.pref_connection.more_info "More information">
<!ENTITY torbutton.pref_connection_more_info.title "Help">
diff --git a/src/chrome/locale/ko/torbutton.dtd b/src/chrome/locale/ko/torbutton.dtd
index 998eb76..0da56d5 100644
--- a/src/chrome/locale/ko/torbutton.dtd
+++ b/src/chrome/locale/ko/torbutton.dtd
@@ -16,6 +16,13 @@
<!ENTITY torbutton.prefs.proxy.host.socks "SOCKS Host:">
<!ENTITY torbutton.prefs.proxy.port "Port:">
<!ENTITY torbutton.about.title "About Torbutton">
+<!ENTITY torbutton.about.version "Version:">
+<!ENTITY torbutton.about.summary "Protects the privacy of your Tor browsing.">
+<!ENTITY torbutton.about.code "Code Contributors:">
+<!ENTITY torbutton.about.maintainer "Maintainer:">
+<!ENTITY torbutton.about.security_review "Security Review:">
+<!ENTITY torbutton.about.donate "If you like using Tor, you might consider">
+<!ENTITY torbutton.about.make_donation "making a donation.">
<!ENTITY torbutton.pref_connection.notice "Disable Torbutton to change these settings.">
<!ENTITY torbutton.pref_connection.more_info "More information">
<!ENTITY torbutton.pref_connection_more_info.title "Help">
diff --git a/src/chrome/locale/ku/torbutton.dtd b/src/chrome/locale/ku/torbutton.dtd
index 998eb76..0da56d5 100644
--- a/src/chrome/locale/ku/torbutton.dtd
+++ b/src/chrome/locale/ku/torbutton.dtd
@@ -16,6 +16,13 @@
<!ENTITY torbutton.prefs.proxy.host.socks "SOCKS Host:">
<!ENTITY torbutton.prefs.proxy.port "Port:">
<!ENTITY torbutton.about.title "About Torbutton">
+<!ENTITY torbutton.about.version "Version:">
+<!ENTITY torbutton.about.summary "Protects the privacy of your Tor browsing.">
+<!ENTITY torbutton.about.code "Code Contributors:">
+<!ENTITY torbutton.about.maintainer "Maintainer:">
+<!ENTITY torbutton.about.security_review "Security Review:">
+<!ENTITY torbutton.about.donate "If you like using Tor, you might consider">
+<!ENTITY torbutton.about.make_donation "making a donation.">
<!ENTITY torbutton.pref_connection.notice "Disable Torbutton to change these settings.">
<!ENTITY torbutton.pref_connection.more_info "More information">
<!ENTITY torbutton.pref_connection_more_info.title "Help">
diff --git a/src/chrome/locale/kw/torbutton.dtd b/src/chrome/locale/kw/torbutton.dtd
index 998eb76..0da56d5 100644
--- a/src/chrome/locale/kw/torbutton.dtd
+++ b/src/chrome/locale/kw/torbutton.dtd
@@ -16,6 +16,13 @@
<!ENTITY torbutton.prefs.proxy.host.socks "SOCKS Host:">
<!ENTITY torbutton.prefs.proxy.port "Port:">
<!ENTITY torbutton.about.title "About Torbutton">
+<!ENTITY torbutton.about.version "Version:">
+<!ENTITY torbutton.about.summary "Protects the privacy of your Tor browsing.">
+<!ENTITY torbutton.about.code "Code Contributors:">
+<!ENTITY torbutton.about.maintainer "Maintainer:">
+<!ENTITY torbutton.about.security_review "Security Review:">
+<!ENTITY torbutton.about.donate "If you like using Tor, you might consider">
+<!ENTITY torbutton.about.make_donation "making a donation.">
<!ENTITY torbutton.pref_connection.notice "Disable Torbutton to change these settings.">
<!ENTITY torbutton.pref_connection.more_info "More information">
<!ENTITY torbutton.pref_connection_more_info.title "Help">
diff --git a/src/chrome/locale/ky/torbutton.dtd b/src/chrome/locale/ky/torbutton.dtd
index 998eb76..0da56d5 100644
--- a/src/chrome/locale/ky/torbutton.dtd
+++ b/src/chrome/locale/ky/torbutton.dtd
@@ -16,6 +16,13 @@
<!ENTITY torbutton.prefs.proxy.host.socks "SOCKS Host:">
<!ENTITY torbutton.prefs.proxy.port "Port:">
<!ENTITY torbutton.about.title "About Torbutton">
+<!ENTITY torbutton.about.version "Version:">
+<!ENTITY torbutton.about.summary "Protects the privacy of your Tor browsing.">
+<!ENTITY torbutton.about.code "Code Contributors:">
+<!ENTITY torbutton.about.maintainer "Maintainer:">
+<!ENTITY torbutton.about.security_review "Security Review:">
+<!ENTITY torbutton.about.donate "If you like using Tor, you might consider">
+<!ENTITY torbutton.about.make_donation "making a donation.">
<!ENTITY torbutton.pref_connection.notice "Disable Torbutton to change these settings.">
<!ENTITY torbutton.pref_connection.more_info "More information">
<!ENTITY torbutton.pref_connection_more_info.title "Help">
diff --git a/src/chrome/locale/lb/torbutton.dtd b/src/chrome/locale/lb/torbutton.dtd
index 998eb76..0da56d5 100644
--- a/src/chrome/locale/lb/torbutton.dtd
+++ b/src/chrome/locale/lb/torbutton.dtd
@@ -16,6 +16,13 @@
<!ENTITY torbutton.prefs.proxy.host.socks "SOCKS Host:">
<!ENTITY torbutton.prefs.proxy.port "Port:">
<!ENTITY torbutton.about.title "About Torbutton">
+<!ENTITY torbutton.about.version "Version:">
+<!ENTITY torbutton.about.summary "Protects the privacy of your Tor browsing.">
+<!ENTITY torbutton.about.code "Code Contributors:">
+<!ENTITY torbutton.about.maintainer "Maintainer:">
+<!ENTITY torbutton.about.security_review "Security Review:">
+<!ENTITY torbutton.about.donate "If you like using Tor, you might consider">
+<!ENTITY torbutton.about.make_donation "making a donation.">
<!ENTITY torbutton.pref_connection.notice "Disable Torbutton to change these settings.">
<!ENTITY torbutton.pref_connection.more_info "More information">
<!ENTITY torbutton.pref_connection_more_info.title "Help">
diff --git a/src/chrome/locale/ln/torbutton.dtd b/src/chrome/locale/ln/torbutton.dtd
index 998eb76..0da56d5 100644
--- a/src/chrome/locale/ln/torbutton.dtd
+++ b/src/chrome/locale/ln/torbutton.dtd
@@ -16,6 +16,13 @@
<!ENTITY torbutton.prefs.proxy.host.socks "SOCKS Host:">
<!ENTITY torbutton.prefs.proxy.port "Port:">
<!ENTITY torbutton.about.title "About Torbutton">
+<!ENTITY torbutton.about.version "Version:">
+<!ENTITY torbutton.about.summary "Protects the privacy of your Tor browsing.">
+<!ENTITY torbutton.about.code "Code Contributors:">
+<!ENTITY torbutton.about.maintainer "Maintainer:">
+<!ENTITY torbutton.about.security_review "Security Review:">
+<!ENTITY torbutton.about.donate "If you like using Tor, you might consider">
+<!ENTITY torbutton.about.make_donation "making a donation.">
<!ENTITY torbutton.pref_connection.notice "Disable Torbutton to change these settings.">
<!ENTITY torbutton.pref_connection.more_info "More information">
<!ENTITY torbutton.pref_connection_more_info.title "Help">
diff --git a/src/chrome/locale/lo/torbutton.dtd b/src/chrome/locale/lo/torbutton.dtd
index 998eb76..0da56d5 100644
--- a/src/chrome/locale/lo/torbutton.dtd
+++ b/src/chrome/locale/lo/torbutton.dtd
@@ -16,6 +16,13 @@
<!ENTITY torbutton.prefs.proxy.host.socks "SOCKS Host:">
<!ENTITY torbutton.prefs.proxy.port "Port:">
<!ENTITY torbutton.about.title "About Torbutton">
+<!ENTITY torbutton.about.version "Version:">
+<!ENTITY torbutton.about.summary "Protects the privacy of your Tor browsing.">
+<!ENTITY torbutton.about.code "Code Contributors:">
+<!ENTITY torbutton.about.maintainer "Maintainer:">
+<!ENTITY torbutton.about.security_review "Security Review:">
+<!ENTITY torbutton.about.donate "If you like using Tor, you might consider">
+<!ENTITY torbutton.about.make_donation "making a donation.">
<!ENTITY torbutton.pref_connection.notice "Disable Torbutton to change these settings.">
<!ENTITY torbutton.pref_connection.more_info "More information">
<!ENTITY torbutton.pref_connection_more_info.title "Help">
diff --git a/src/chrome/locale/lt/torbutton.dtd b/src/chrome/locale/lt/torbutton.dtd
index 998eb76..0da56d5 100644
--- a/src/chrome/locale/lt/torbutton.dtd
+++ b/src/chrome/locale/lt/torbutton.dtd
@@ -16,6 +16,13 @@
<!ENTITY torbutton.prefs.proxy.host.socks "SOCKS Host:">
<!ENTITY torbutton.prefs.proxy.port "Port:">
<!ENTITY torbutton.about.title "About Torbutton">
+<!ENTITY torbutton.about.version "Version:">
+<!ENTITY torbutton.about.summary "Protects the privacy of your Tor browsing.">
+<!ENTITY torbutton.about.code "Code Contributors:">
+<!ENTITY torbutton.about.maintainer "Maintainer:">
+<!ENTITY torbutton.about.security_review "Security Review:">
+<!ENTITY torbutton.about.donate "If you like using Tor, you might consider">
+<!ENTITY torbutton.about.make_donation "making a donation.">
<!ENTITY torbutton.pref_connection.notice "Disable Torbutton to change these settings.">
<!ENTITY torbutton.pref_connection.more_info "More information">
<!ENTITY torbutton.pref_connection_more_info.title "Help">
diff --git a/src/chrome/locale/lv/torbutton.dtd b/src/chrome/locale/lv/torbutton.dtd
index 998eb76..0da56d5 100644
--- a/src/chrome/locale/lv/torbutton.dtd
+++ b/src/chrome/locale/lv/torbutton.dtd
@@ -16,6 +16,13 @@
<!ENTITY torbutton.prefs.proxy.host.socks "SOCKS Host:">
<!ENTITY torbutton.prefs.proxy.port "Port:">
<!ENTITY torbutton.about.title "About Torbutton">
+<!ENTITY torbutton.about.version "Version:">
+<!ENTITY torbutton.about.summary "Protects the privacy of your Tor browsing.">
+<!ENTITY torbutton.about.code "Code Contributors:">
+<!ENTITY torbutton.about.maintainer "Maintainer:">
+<!ENTITY torbutton.about.security_review "Security Review:">
+<!ENTITY torbutton.about.donate "If you like using Tor, you might consider">
+<!ENTITY torbutton.about.make_donation "making a donation.">
<!ENTITY torbutton.pref_connection.notice "Disable Torbutton to change these settings.">
<!ENTITY torbutton.pref_connection.more_info "More information">
<!ENTITY torbutton.pref_connection_more_info.title "Help">
diff --git a/src/chrome/locale/mg/torbutton.dtd b/src/chrome/locale/mg/torbutton.dtd
index 998eb76..0da56d5 100644
--- a/src/chrome/locale/mg/torbutton.dtd
+++ b/src/chrome/locale/mg/torbutton.dtd
@@ -16,6 +16,13 @@
<!ENTITY torbutton.prefs.proxy.host.socks "SOCKS Host:">
<!ENTITY torbutton.prefs.proxy.port "Port:">
<!ENTITY torbutton.about.title "About Torbutton">
+<!ENTITY torbutton.about.version "Version:">
+<!ENTITY torbutton.about.summary "Protects the privacy of your Tor browsing.">
+<!ENTITY torbutton.about.code "Code Contributors:">
+<!ENTITY torbutton.about.maintainer "Maintainer:">
+<!ENTITY torbutton.about.security_review "Security Review:">
+<!ENTITY torbutton.about.donate "If you like using Tor, you might consider">
+<!ENTITY torbutton.about.make_donation "making a donation.">
<!ENTITY torbutton.pref_connection.notice "Disable Torbutton to change these settings.">
<!ENTITY torbutton.pref_connection.more_info "More information">
<!ENTITY torbutton.pref_connection_more_info.title "Help">
diff --git a/src/chrome/locale/mi/torbutton.dtd b/src/chrome/locale/mi/torbutton.dtd
index 998eb76..0da56d5 100644
--- a/src/chrome/locale/mi/torbutton.dtd
+++ b/src/chrome/locale/mi/torbutton.dtd
@@ -16,6 +16,13 @@
<!ENTITY torbutton.prefs.proxy.host.socks "SOCKS Host:">
<!ENTITY torbutton.prefs.proxy.port "Port:">
<!ENTITY torbutton.about.title "About Torbutton">
+<!ENTITY torbutton.about.version "Version:">
+<!ENTITY torbutton.about.summary "Protects the privacy of your Tor browsing.">
+<!ENTITY torbutton.about.code "Code Contributors:">
+<!ENTITY torbutton.about.maintainer "Maintainer:">
+<!ENTITY torbutton.about.security_review "Security Review:">
+<!ENTITY torbutton.about.donate "If you like using Tor, you might consider">
+<!ENTITY torbutton.about.make_donation "making a donation.">
<!ENTITY torbutton.pref_connection.notice "Disable Torbutton to change these settings.">
<!ENTITY torbutton.pref_connection.more_info "More information">
<!ENTITY torbutton.pref_connection_more_info.title "Help">
diff --git a/src/chrome/locale/mk/torbutton.dtd b/src/chrome/locale/mk/torbutton.dtd
index 998eb76..0da56d5 100644
--- a/src/chrome/locale/mk/torbutton.dtd
+++ b/src/chrome/locale/mk/torbutton.dtd
@@ -16,6 +16,13 @@
<!ENTITY torbutton.prefs.proxy.host.socks "SOCKS Host:">
<!ENTITY torbutton.prefs.proxy.port "Port:">
<!ENTITY torbutton.about.title "About Torbutton">
+<!ENTITY torbutton.about.version "Version:">
+<!ENTITY torbutton.about.summary "Protects the privacy of your Tor browsing.">
+<!ENTITY torbutton.about.code "Code Contributors:">
+<!ENTITY torbutton.about.maintainer "Maintainer:">
+<!ENTITY torbutton.about.security_review "Security Review:">
+<!ENTITY torbutton.about.donate "If you like using Tor, you might consider">
+<!ENTITY torbutton.about.make_donation "making a donation.">
<!ENTITY torbutton.pref_connection.notice "Disable Torbutton to change these settings.">
<!ENTITY torbutton.pref_connection.more_info "More information">
<!ENTITY torbutton.pref_connection_more_info.title "Help">
diff --git a/src/chrome/locale/ml/torbutton.dtd b/src/chrome/locale/ml/torbutton.dtd
index 998eb76..0da56d5 100644
--- a/src/chrome/locale/ml/torbutton.dtd
+++ b/src/chrome/locale/ml/torbutton.dtd
@@ -16,6 +16,13 @@
<!ENTITY torbutton.prefs.proxy.host.socks "SOCKS Host:">
<!ENTITY torbutton.prefs.proxy.port "Port:">
<!ENTITY torbutton.about.title "About Torbutton">
+<!ENTITY torbutton.about.version "Version:">
+<!ENTITY torbutton.about.summary "Protects the privacy of your Tor browsing.">
+<!ENTITY torbutton.about.code "Code Contributors:">
+<!ENTITY torbutton.about.maintainer "Maintainer:">
+<!ENTITY torbutton.about.security_review "Security Review:">
+<!ENTITY torbutton.about.donate "If you like using Tor, you might consider">
+<!ENTITY torbutton.about.make_donation "making a donation.">
<!ENTITY torbutton.pref_connection.notice "Disable Torbutton to change these settings.">
<!ENTITY torbutton.pref_connection.more_info "More information">
<!ENTITY torbutton.pref_connection_more_info.title "Help">
diff --git a/src/chrome/locale/mn/torbutton.dtd b/src/chrome/locale/mn/torbutton.dtd
index 998eb76..0da56d5 100644
--- a/src/chrome/locale/mn/torbutton.dtd
+++ b/src/chrome/locale/mn/torbutton.dtd
@@ -16,6 +16,13 @@
<!ENTITY torbutton.prefs.proxy.host.socks "SOCKS Host:">
<!ENTITY torbutton.prefs.proxy.port "Port:">
<!ENTITY torbutton.about.title "About Torbutton">
+<!ENTITY torbutton.about.version "Version:">
+<!ENTITY torbutton.about.summary "Protects the privacy of your Tor browsing.">
+<!ENTITY torbutton.about.code "Code Contributors:">
+<!ENTITY torbutton.about.maintainer "Maintainer:">
+<!ENTITY torbutton.about.security_review "Security Review:">
+<!ENTITY torbutton.about.donate "If you like using Tor, you might consider">
+<!ENTITY torbutton.about.make_donation "making a donation.">
<!ENTITY torbutton.pref_connection.notice "Disable Torbutton to change these settings.">
<!ENTITY torbutton.pref_connection.more_info "More information">
<!ENTITY torbutton.pref_connection_more_info.title "Help">
diff --git a/src/chrome/locale/mr/torbutton.dtd b/src/chrome/locale/mr/torbutton.dtd
index 998eb76..0da56d5 100644
--- a/src/chrome/locale/mr/torbutton.dtd
+++ b/src/chrome/locale/mr/torbutton.dtd
@@ -16,6 +16,13 @@
<!ENTITY torbutton.prefs.proxy.host.socks "SOCKS Host:">
<!ENTITY torbutton.prefs.proxy.port "Port:">
<!ENTITY torbutton.about.title "About Torbutton">
+<!ENTITY torbutton.about.version "Version:">
+<!ENTITY torbutton.about.summary "Protects the privacy of your Tor browsing.">
+<!ENTITY torbutton.about.code "Code Contributors:">
+<!ENTITY torbutton.about.maintainer "Maintainer:">
+<!ENTITY torbutton.about.security_review "Security Review:">
+<!ENTITY torbutton.about.donate "If you like using Tor, you might consider">
+<!ENTITY torbutton.about.make_donation "making a donation.">
<!ENTITY torbutton.pref_connection.notice "Disable Torbutton to change these settings.">
<!ENTITY torbutton.pref_connection.more_info "More information">
<!ENTITY torbutton.pref_connection_more_info.title "Help">
diff --git a/src/chrome/locale/ms/torbutton.dtd b/src/chrome/locale/ms/torbutton.dtd
index 998eb76..0da56d5 100644
--- a/src/chrome/locale/ms/torbutton.dtd
+++ b/src/chrome/locale/ms/torbutton.dtd
@@ -16,6 +16,13 @@
<!ENTITY torbutton.prefs.proxy.host.socks "SOCKS Host:">
<!ENTITY torbutton.prefs.proxy.port "Port:">
<!ENTITY torbutton.about.title "About Torbutton">
+<!ENTITY torbutton.about.version "Version:">
+<!ENTITY torbutton.about.summary "Protects the privacy of your Tor browsing.">
+<!ENTITY torbutton.about.code "Code Contributors:">
+<!ENTITY torbutton.about.maintainer "Maintainer:">
+<!ENTITY torbutton.about.security_review "Security Review:">
+<!ENTITY torbutton.about.donate "If you like using Tor, you might consider">
+<!ENTITY torbutton.about.make_donation "making a donation.">
<!ENTITY torbutton.pref_connection.notice "Disable Torbutton to change these settings.">
<!ENTITY torbutton.pref_connection.more_info "More information">
<!ENTITY torbutton.pref_connection_more_info.title "Help">
diff --git a/src/chrome/locale/mt/torbutton.dtd b/src/chrome/locale/mt/torbutton.dtd
index 998eb76..0da56d5 100644
--- a/src/chrome/locale/mt/torbutton.dtd
+++ b/src/chrome/locale/mt/torbutton.dtd
@@ -16,6 +16,13 @@
<!ENTITY torbutton.prefs.proxy.host.socks "SOCKS Host:">
<!ENTITY torbutton.prefs.proxy.port "Port:">
<!ENTITY torbutton.about.title "About Torbutton">
+<!ENTITY torbutton.about.version "Version:">
+<!ENTITY torbutton.about.summary "Protects the privacy of your Tor browsing.">
+<!ENTITY torbutton.about.code "Code Contributors:">
+<!ENTITY torbutton.about.maintainer "Maintainer:">
+<!ENTITY torbutton.about.security_review "Security Review:">
+<!ENTITY torbutton.about.donate "If you like using Tor, you might consider">
+<!ENTITY torbutton.about.make_donation "making a donation.">
<!ENTITY torbutton.pref_connection.notice "Disable Torbutton to change these settings.">
<!ENTITY torbutton.pref_connection.more_info "More information">
<!ENTITY torbutton.pref_connection_more_info.title "Help">
diff --git a/src/chrome/locale/my/torbutton.dtd b/src/chrome/locale/my/torbutton.dtd
index 8184994..3384653 100644
--- a/src/chrome/locale/my/torbutton.dtd
+++ b/src/chrome/locale/my/torbutton.dtd
@@ -16,6 +16,13 @@
<!ENTITY torbutton.prefs.proxy.host.socks "SOCKS Host :">
<!ENTITY torbutton.prefs.proxy.port "Port :">
<!ENTITY torbutton.about.title "Torbutton အေၾကာင္း">
+<!ENTITY torbutton.about.version "Version:">
+<!ENTITY torbutton.about.summary "Protects the privacy of your Tor browsing.">
+<!ENTITY torbutton.about.code "Code Contributors:">
+<!ENTITY torbutton.about.maintainer "Maintainer:">
+<!ENTITY torbutton.about.security_review "Security Review:">
+<!ENTITY torbutton.about.donate "If you like using Tor, you might consider">
+<!ENTITY torbutton.about.make_donation "making a donation.">
<!ENTITY torbutton.pref_connection.notice "၄င္းခ်ိန္ညႇိခ်က္မ်ားကို ေျပာင္းလဲရန္အတြက္ Torbutton ကုိ ပိတ္ထားရန္">
<!ENTITY torbutton.pref_connection.more_info "ပိုမုိျပည့္စံုေသာ သတင္းအခ်က္အလက္မ်ားသို႕">
<!ENTITY torbutton.pref_connection_more_info.title "ကူညီမႈရယူရန္">
diff --git a/src/chrome/locale/nah/torbutton.dtd b/src/chrome/locale/nah/torbutton.dtd
index 998eb76..0da56d5 100644
--- a/src/chrome/locale/nah/torbutton.dtd
+++ b/src/chrome/locale/nah/torbutton.dtd
@@ -16,6 +16,13 @@
<!ENTITY torbutton.prefs.proxy.host.socks "SOCKS Host:">
<!ENTITY torbutton.prefs.proxy.port "Port:">
<!ENTITY torbutton.about.title "About Torbutton">
+<!ENTITY torbutton.about.version "Version:">
+<!ENTITY torbutton.about.summary "Protects the privacy of your Tor browsing.">
+<!ENTITY torbutton.about.code "Code Contributors:">
+<!ENTITY torbutton.about.maintainer "Maintainer:">
+<!ENTITY torbutton.about.security_review "Security Review:">
+<!ENTITY torbutton.about.donate "If you like using Tor, you might consider">
+<!ENTITY torbutton.about.make_donation "making a donation.">
<!ENTITY torbutton.pref_connection.notice "Disable Torbutton to change these settings.">
<!ENTITY torbutton.pref_connection.more_info "More information">
<!ENTITY torbutton.pref_connection_more_info.title "Help">
diff --git a/src/chrome/locale/nap/torbutton.dtd b/src/chrome/locale/nap/torbutton.dtd
index 998eb76..0da56d5 100644
--- a/src/chrome/locale/nap/torbutton.dtd
+++ b/src/chrome/locale/nap/torbutton.dtd
@@ -16,6 +16,13 @@
<!ENTITY torbutton.prefs.proxy.host.socks "SOCKS Host:">
<!ENTITY torbutton.prefs.proxy.port "Port:">
<!ENTITY torbutton.about.title "About Torbutton">
+<!ENTITY torbutton.about.version "Version:">
+<!ENTITY torbutton.about.summary "Protects the privacy of your Tor browsing.">
+<!ENTITY torbutton.about.code "Code Contributors:">
+<!ENTITY torbutton.about.maintainer "Maintainer:">
+<!ENTITY torbutton.about.security_review "Security Review:">
+<!ENTITY torbutton.about.donate "If you like using Tor, you might consider">
+<!ENTITY torbutton.about.make_donation "making a donation.">
<!ENTITY torbutton.pref_connection.notice "Disable Torbutton to change these settings.">
<!ENTITY torbutton.pref_connection.more_info "More information">
<!ENTITY torbutton.pref_connection_more_info.title "Help">
diff --git a/src/chrome/locale/nb/torbutton.dtd b/src/chrome/locale/nb/torbutton.dtd
index ba5b125..49afd12 100644
--- a/src/chrome/locale/nb/torbutton.dtd
+++ b/src/chrome/locale/nb/torbutton.dtd
@@ -16,6 +16,13 @@
<!ENTITY torbutton.prefs.proxy.host.socks "SOCKS-vert:">
<!ENTITY torbutton.prefs.proxy.port "Port:">
<!ENTITY torbutton.about.title "Om Torbutton">
+<!ENTITY torbutton.about.version "Version:">
+<!ENTITY torbutton.about.summary "Protects the privacy of your Tor browsing.">
+<!ENTITY torbutton.about.code "Code Contributors:">
+<!ENTITY torbutton.about.maintainer "Maintainer:">
+<!ENTITY torbutton.about.security_review "Security Review:">
+<!ENTITY torbutton.about.donate "If you like using Tor, you might consider">
+<!ENTITY torbutton.about.make_donation "making a donation.">
<!ENTITY torbutton.pref_connection.notice "Deaktiver Torbutton for å endre på disse innstillingene.">
<!ENTITY torbutton.pref_connection.more_info "Mer informasjon">
<!ENTITY torbutton.pref_connection_more_info.title "Hjelp">
diff --git a/src/chrome/locale/ne/torbutton.dtd b/src/chrome/locale/ne/torbutton.dtd
index 998eb76..0da56d5 100644
--- a/src/chrome/locale/ne/torbutton.dtd
+++ b/src/chrome/locale/ne/torbutton.dtd
@@ -16,6 +16,13 @@
<!ENTITY torbutton.prefs.proxy.host.socks "SOCKS Host:">
<!ENTITY torbutton.prefs.proxy.port "Port:">
<!ENTITY torbutton.about.title "About Torbutton">
+<!ENTITY torbutton.about.version "Version:">
+<!ENTITY torbutton.about.summary "Protects the privacy of your Tor browsing.">
+<!ENTITY torbutton.about.code "Code Contributors:">
+<!ENTITY torbutton.about.maintainer "Maintainer:">
+<!ENTITY torbutton.about.security_review "Security Review:">
+<!ENTITY torbutton.about.donate "If you like using Tor, you might consider">
+<!ENTITY torbutton.about.make_donation "making a donation.">
<!ENTITY torbutton.pref_connection.notice "Disable Torbutton to change these settings.">
<!ENTITY torbutton.pref_connection.more_info "More information">
<!ENTITY torbutton.pref_connection_more_info.title "Help">
diff --git a/src/chrome/locale/nl/torbutton.dtd b/src/chrome/locale/nl/torbutton.dtd
index 7c2772c..383a212 100644
--- a/src/chrome/locale/nl/torbutton.dtd
+++ b/src/chrome/locale/nl/torbutton.dtd
@@ -16,6 +16,13 @@
<!ENTITY torbutton.prefs.proxy.host.socks "SOCKS host:">
<!ENTITY torbutton.prefs.proxy.port "Poort:">
<!ENTITY torbutton.about.title "Over Torbutton">
+<!ENTITY torbutton.about.version "Version:">
+<!ENTITY torbutton.about.summary "Protects the privacy of your Tor browsing.">
+<!ENTITY torbutton.about.code "Code Contributors:">
+<!ENTITY torbutton.about.maintainer "Maintainer:">
+<!ENTITY torbutton.about.security_review "Security Review:">
+<!ENTITY torbutton.about.donate "If you like using Tor, you might consider">
+<!ENTITY torbutton.about.make_donation "making a donation.">
<!ENTITY torbutton.pref_connection.notice "Torbutton dient uitgeschakeld te worden om deze instellingen te kunnen wijzigen.">
<!ENTITY torbutton.pref_connection.more_info "Meer informatie">
<!ENTITY torbutton.pref_connection_more_info.title "Help">
diff --git a/src/chrome/locale/nn/torbutton.dtd b/src/chrome/locale/nn/torbutton.dtd
index 998eb76..0da56d5 100644
--- a/src/chrome/locale/nn/torbutton.dtd
+++ b/src/chrome/locale/nn/torbutton.dtd
@@ -16,6 +16,13 @@
<!ENTITY torbutton.prefs.proxy.host.socks "SOCKS Host:">
<!ENTITY torbutton.prefs.proxy.port "Port:">
<!ENTITY torbutton.about.title "About Torbutton">
+<!ENTITY torbutton.about.version "Version:">
+<!ENTITY torbutton.about.summary "Protects the privacy of your Tor browsing.">
+<!ENTITY torbutton.about.code "Code Contributors:">
+<!ENTITY torbutton.about.maintainer "Maintainer:">
+<!ENTITY torbutton.about.security_review "Security Review:">
+<!ENTITY torbutton.about.donate "If you like using Tor, you might consider">
+<!ENTITY torbutton.about.make_donation "making a donation.">
<!ENTITY torbutton.pref_connection.notice "Disable Torbutton to change these settings.">
<!ENTITY torbutton.pref_connection.more_info "More information">
<!ENTITY torbutton.pref_connection_more_info.title "Help">
diff --git a/src/chrome/locale/nso/torbutton.dtd b/src/chrome/locale/nso/torbutton.dtd
index 998eb76..0da56d5 100644
--- a/src/chrome/locale/nso/torbutton.dtd
+++ b/src/chrome/locale/nso/torbutton.dtd
@@ -16,6 +16,13 @@
<!ENTITY torbutton.prefs.proxy.host.socks "SOCKS Host:">
<!ENTITY torbutton.prefs.proxy.port "Port:">
<!ENTITY torbutton.about.title "About Torbutton">
+<!ENTITY torbutton.about.version "Version:">
+<!ENTITY torbutton.about.summary "Protects the privacy of your Tor browsing.">
+<!ENTITY torbutton.about.code "Code Contributors:">
+<!ENTITY torbutton.about.maintainer "Maintainer:">
+<!ENTITY torbutton.about.security_review "Security Review:">
+<!ENTITY torbutton.about.donate "If you like using Tor, you might consider">
+<!ENTITY torbutton.about.make_donation "making a donation.">
<!ENTITY torbutton.pref_connection.notice "Disable Torbutton to change these settings.">
<!ENTITY torbutton.pref_connection.more_info "More information">
<!ENTITY torbutton.pref_connection_more_info.title "Help">
diff --git a/src/chrome/locale/oc/torbutton.dtd b/src/chrome/locale/oc/torbutton.dtd
index 998eb76..0da56d5 100644
--- a/src/chrome/locale/oc/torbutton.dtd
+++ b/src/chrome/locale/oc/torbutton.dtd
@@ -16,6 +16,13 @@
<!ENTITY torbutton.prefs.proxy.host.socks "SOCKS Host:">
<!ENTITY torbutton.prefs.proxy.port "Port:">
<!ENTITY torbutton.about.title "About Torbutton">
+<!ENTITY torbutton.about.version "Version:">
+<!ENTITY torbutton.about.summary "Protects the privacy of your Tor browsing.">
+<!ENTITY torbutton.about.code "Code Contributors:">
+<!ENTITY torbutton.about.maintainer "Maintainer:">
+<!ENTITY torbutton.about.security_review "Security Review:">
+<!ENTITY torbutton.about.donate "If you like using Tor, you might consider">
+<!ENTITY torbutton.about.make_donation "making a donation.">
<!ENTITY torbutton.pref_connection.notice "Disable Torbutton to change these settings.">
<!ENTITY torbutton.pref_connection.more_info "More information">
<!ENTITY torbutton.pref_connection_more_info.title "Help">
diff --git a/src/chrome/locale/or/torbutton.dtd b/src/chrome/locale/or/torbutton.dtd
index 998eb76..0da56d5 100644
--- a/src/chrome/locale/or/torbutton.dtd
+++ b/src/chrome/locale/or/torbutton.dtd
@@ -16,6 +16,13 @@
<!ENTITY torbutton.prefs.proxy.host.socks "SOCKS Host:">
<!ENTITY torbutton.prefs.proxy.port "Port:">
<!ENTITY torbutton.about.title "About Torbutton">
+<!ENTITY torbutton.about.version "Version:">
+<!ENTITY torbutton.about.summary "Protects the privacy of your Tor browsing.">
+<!ENTITY torbutton.about.code "Code Contributors:">
+<!ENTITY torbutton.about.maintainer "Maintainer:">
+<!ENTITY torbutton.about.security_review "Security Review:">
+<!ENTITY torbutton.about.donate "If you like using Tor, you might consider">
+<!ENTITY torbutton.about.make_donation "making a donation.">
<!ENTITY torbutton.pref_connection.notice "Disable Torbutton to change these settings.">
<!ENTITY torbutton.pref_connection.more_info "More information">
<!ENTITY torbutton.pref_connection_more_info.title "Help">
diff --git a/src/chrome/locale/pa/torbutton.dtd b/src/chrome/locale/pa/torbutton.dtd
index 998eb76..0da56d5 100644
--- a/src/chrome/locale/pa/torbutton.dtd
+++ b/src/chrome/locale/pa/torbutton.dtd
@@ -16,6 +16,13 @@
<!ENTITY torbutton.prefs.proxy.host.socks "SOCKS Host:">
<!ENTITY torbutton.prefs.proxy.port "Port:">
<!ENTITY torbutton.about.title "About Torbutton">
+<!ENTITY torbutton.about.version "Version:">
+<!ENTITY torbutton.about.summary "Protects the privacy of your Tor browsing.">
+<!ENTITY torbutton.about.code "Code Contributors:">
+<!ENTITY torbutton.about.maintainer "Maintainer:">
+<!ENTITY torbutton.about.security_review "Security Review:">
+<!ENTITY torbutton.about.donate "If you like using Tor, you might consider">
+<!ENTITY torbutton.about.make_donation "making a donation.">
<!ENTITY torbutton.pref_connection.notice "Disable Torbutton to change these settings.">
<!ENTITY torbutton.pref_connection.more_info "More information">
<!ENTITY torbutton.pref_connection_more_info.title "Help">
diff --git a/src/chrome/locale/pap/torbutton.dtd b/src/chrome/locale/pap/torbutton.dtd
index 998eb76..0da56d5 100644
--- a/src/chrome/locale/pap/torbutton.dtd
+++ b/src/chrome/locale/pap/torbutton.dtd
@@ -16,6 +16,13 @@
<!ENTITY torbutton.prefs.proxy.host.socks "SOCKS Host:">
<!ENTITY torbutton.prefs.proxy.port "Port:">
<!ENTITY torbutton.about.title "About Torbutton">
+<!ENTITY torbutton.about.version "Version:">
+<!ENTITY torbutton.about.summary "Protects the privacy of your Tor browsing.">
+<!ENTITY torbutton.about.code "Code Contributors:">
+<!ENTITY torbutton.about.maintainer "Maintainer:">
+<!ENTITY torbutton.about.security_review "Security Review:">
+<!ENTITY torbutton.about.donate "If you like using Tor, you might consider">
+<!ENTITY torbutton.about.make_donation "making a donation.">
<!ENTITY torbutton.pref_connection.notice "Disable Torbutton to change these settings.">
<!ENTITY torbutton.pref_connection.more_info "More information">
<!ENTITY torbutton.pref_connection_more_info.title "Help">
diff --git a/src/chrome/locale/pl/torbutton.dtd b/src/chrome/locale/pl/torbutton.dtd
index 4b6e219..b947be3 100644
--- a/src/chrome/locale/pl/torbutton.dtd
+++ b/src/chrome/locale/pl/torbutton.dtd
@@ -16,6 +16,13 @@
<!ENTITY torbutton.prefs.proxy.host.socks "Host SOCKS:">
<!ENTITY torbutton.prefs.proxy.port "Port:">
<!ENTITY torbutton.about.title "O Torbutton">
+<!ENTITY torbutton.about.version "Version:">
+<!ENTITY torbutton.about.summary "Protects the privacy of your Tor browsing.">
+<!ENTITY torbutton.about.code "Code Contributors:">
+<!ENTITY torbutton.about.maintainer "Maintainer:">
+<!ENTITY torbutton.about.security_review "Security Review:">
+<!ENTITY torbutton.about.donate "If you like using Tor, you might consider">
+<!ENTITY torbutton.about.make_donation "making a donation.">
<!ENTITY torbutton.pref_connection.notice "Aby zmienić te ustawienia wyłącz Torbutton.">
<!ENTITY torbutton.pref_connection.more_info "Więcej informacji">
<!ENTITY torbutton.pref_connection_more_info.title "Pomoc">
diff --git a/src/chrome/locale/pl/torbutton.properties b/src/chrome/locale/pl/torbutton.properties
index a950dfd..ceb7214 100644
--- a/src/chrome/locale/pl/torbutton.properties
+++ b/src/chrome/locale/pl/torbutton.properties
@@ -34,4 +34,4 @@ torbutton.popup.captcha.ask = Torbutton wykrył Google Captcha. Czy chcesz, aby
torbutton.popup.captcha.always = Od teraz zawsze wykonuj tę akcję
torbutton.popup.redirect = Przekieruj
torbutton.popup.no_redirect = Nie przekierowywuj
-torbutton.popup.prompted_language = To give you more privacy, Torbutton can request the English language version of web pages. This may cause web pages that you prefer to read in your native language to display in English instead.\n\nWould you like to request English language web pages for better privacy?
+torbutton.popup.prompted_language = Aby dać Ci więcej prywatności, Torbutton może żądać angielskich wersji stron internetowych. To może spowodować, że strony, które wolisz czytać we własnym języku będą się zamiast tego wyświetlać po angielsku.\n\nCzy chcesz żądać stron w języku angielskim dla lepszej prywatności?
diff --git a/src/chrome/locale/pms/torbutton.dtd b/src/chrome/locale/pms/torbutton.dtd
index 998eb76..0da56d5 100644
--- a/src/chrome/locale/pms/torbutton.dtd
+++ b/src/chrome/locale/pms/torbutton.dtd
@@ -16,6 +16,13 @@
<!ENTITY torbutton.prefs.proxy.host.socks "SOCKS Host:">
<!ENTITY torbutton.prefs.proxy.port "Port:">
<!ENTITY torbutton.about.title "About Torbutton">
+<!ENTITY torbutton.about.version "Version:">
+<!ENTITY torbutton.about.summary "Protects the privacy of your Tor browsing.">
+<!ENTITY torbutton.about.code "Code Contributors:">
+<!ENTITY torbutton.about.maintainer "Maintainer:">
+<!ENTITY torbutton.about.security_review "Security Review:">
+<!ENTITY torbutton.about.donate "If you like using Tor, you might consider">
+<!ENTITY torbutton.about.make_donation "making a donation.">
<!ENTITY torbutton.pref_connection.notice "Disable Torbutton to change these settings.">
<!ENTITY torbutton.pref_connection.more_info "More information">
<!ENTITY torbutton.pref_connection_more_info.title "Help">
diff --git a/src/chrome/locale/ps/torbutton.dtd b/src/chrome/locale/ps/torbutton.dtd
index 998eb76..0da56d5 100644
--- a/src/chrome/locale/ps/torbutton.dtd
+++ b/src/chrome/locale/ps/torbutton.dtd
@@ -16,6 +16,13 @@
<!ENTITY torbutton.prefs.proxy.host.socks "SOCKS Host:">
<!ENTITY torbutton.prefs.proxy.port "Port:">
<!ENTITY torbutton.about.title "About Torbutton">
+<!ENTITY torbutton.about.version "Version:">
+<!ENTITY torbutton.about.summary "Protects the privacy of your Tor browsing.">
+<!ENTITY torbutton.about.code "Code Contributors:">
+<!ENTITY torbutton.about.maintainer "Maintainer:">
+<!ENTITY torbutton.about.security_review "Security Review:">
+<!ENTITY torbutton.about.donate "If you like using Tor, you might consider">
+<!ENTITY torbutton.about.make_donation "making a donation.">
<!ENTITY torbutton.pref_connection.notice "Disable Torbutton to change these settings.">
<!ENTITY torbutton.pref_connection.more_info "More information">
<!ENTITY torbutton.pref_connection_more_info.title "Help">
diff --git a/src/chrome/locale/pt-BR/torbutton.dtd b/src/chrome/locale/pt-BR/torbutton.dtd
index 99dfd4c..0fe5977 100644
--- a/src/chrome/locale/pt-BR/torbutton.dtd
+++ b/src/chrome/locale/pt-BR/torbutton.dtd
@@ -1,92 +1,99 @@
-<!ENTITY torbutton.prefs.title "Preferências Torbutton">
-<!ENTITY torbutton.prefs.display_settings "Mostrar configurações">
-<!ENTITY torbutton.prefs.display_panel "Mostrar configurações do proxy Tor na barra de status">
-<!ENTITY torbutton.prefs.panel_format "Formato de amostra da barra de status">
+<!ENTITY torbutton.prefs.title "Configurações do Botão do Tor">
+<!ENTITY torbutton.prefs.display_settings "Exibir Configurações">
+<!ENTITY torbutton.prefs.display_panel "Exibir as configurações de proxy do Tor na barra de status">
+<!ENTITY torbutton.prefs.panel_format "Formato de exibição da barra de status:">
<!ENTITY torbutton.prefs.panel_text_format "Texto">
<!ENTITY torbutton.prefs.panel_icon_format "Ícone">
-<!ENTITY torbutton.prefs.tor_settings "Configurações Proxy">
-<!ENTITY torbutton.prefs.recommended_settings "Usar as cinfigurações recomendadas de proxy para minha versão de Firefox">
-<!ENTITY torbutton.prefs.use_privoxy "Usar Privoxy">
-<!ENTITY torbutton.prefs.use_polipo "Usar Polipo">
-<!ENTITY torbutton.prefs.custom_settings "Usar configurações padrão de proxy">
-<!ENTITY torbutton.prefs.proxy.host.http "Proxy HTTP:">
-<!ENTITY torbutton.prefs.proxy.host.https "Proxy SSL:">
-<!ENTITY torbutton.prefs.proxy.host.ftp "Proxy FTP:">
-<!ENTITY torbutton.prefs.proxy.host.gopher "Proxy Gopher:">
-<!ENTITY torbutton.prefs.proxy.host.socks "Host SOCKS:">
+<!ENTITY torbutton.prefs.tor_settings "Configurações de Proxy">
+<!ENTITY torbutton.prefs.recommended_settings "Usar as configurações de proxy recomendadas para a minha versão de Firefox">
+<!ENTITY torbutton.prefs.use_privoxy "Usar o Privoxy">
+<!ENTITY torbutton.prefs.use_polipo "Usar o Polipo">
+<!ENTITY torbutton.prefs.custom_settings "Usar configurações de proxy personalizadas">
+<!ENTITY torbutton.prefs.proxy.host.http "Proxy para HTTP:">
+<!ENTITY torbutton.prefs.proxy.host.https "Proxy para SSL:">
+<!ENTITY torbutton.prefs.proxy.host.ftp "Proxy para FTP:">
+<!ENTITY torbutton.prefs.proxy.host.gopher "Proxy para Gopher:">
+<!ENTITY torbutton.prefs.proxy.host.socks "Host para SOCKS:">
<!ENTITY torbutton.prefs.proxy.port "Porta:">
-<!ENTITY torbutton.about.title "Sobre Torbutton">
-<!ENTITY torbutton.pref_connection.notice "Desabilitar Torbutton para mudar essas configurações.">
+<!ENTITY torbutton.about.title "Sobre o Botão do Tor">
+<!ENTITY torbutton.about.version "Version:">
+<!ENTITY torbutton.about.summary "Protects the privacy of your Tor browsing.">
+<!ENTITY torbutton.about.code "Code Contributors:">
+<!ENTITY torbutton.about.maintainer "Maintainer:">
+<!ENTITY torbutton.about.security_review "Security Review:">
+<!ENTITY torbutton.about.donate "If you like using Tor, you might consider">
+<!ENTITY torbutton.about.make_donation "making a donation.">
+<!ENTITY torbutton.pref_connection.notice "Desabilitar o Botão do Tor para alterar essas configurações.">
<!ENTITY torbutton.pref_connection.more_info "Mais informações">
<!ENTITY torbutton.pref_connection_more_info.title "Ajuda">
-<!ENTITY torbutton.pref_connection_more_info.text "Torbutton está habilitado. Se você deseja mudar as configurações de Proxy que não sejam do Tor, por favor desabilite Torbutton e retorne aqui. Se você deseja mudar as configurações do Tor, por favor, use a janela de preferência do Torbutton.">
-<!ENTITY torbutton.context_menu.toggle "Alterar Status Tor">
+<!ENTITY torbutton.pref_connection_more_info.text "O Botão do Tor está habilitado. Se deseja alterar as configurações de proxy não relacionadas ao Tor, por favor desabilite o Botão do Tor e retorne aqui. Se você deseja alterar as configurações do Tor, por favor use a janela de configurações do Botão do Tor.">
+<!ENTITY torbutton.context_menu.toggle "Alternar o Status do Tor">
<!ENTITY torbutton.context_menu.toggle.key "T">
-<!ENTITY torbutton.context_menu.preferences "Preferências...">
+<!ENTITY torbutton.context_menu.preferences "Configurações...">
<!ENTITY torbutton.context_menu.preferences.key "P">
-<!ENTITY torbutton.context_menu.about "Sobre Torbutton...">
+<!ENTITY torbutton.context_menu.about "Sobre o Botão do Tor...">
<!ENTITY torbutton.context_menu.about.key "A">
-<!ENTITY torbutton.context_menu.cookieProtections "Proteções de Cookies">
+<!ENTITY torbutton.context_menu.cookieProtections "Proteções para Cookies">
<!ENTITY torbutton.context_menu.cookieProtections.key "C">
-<!ENTITY torbutton.context_menu.copyTor "Copiar URL do Tor">
+<!ENTITY torbutton.context_menu.copyTor "Copiar a URL do Tor">
<!ENTITY torbutton.context_menu.copyTor.key "p">
-<!ENTITY torbutton.context_menu.openTorTab "Abrir URL do Tor em uma nova Aba">
+<!ENTITY torbutton.context_menu.openTorTab "Abrir a URL do Tor em uma nova Aba">
<!ENTITY torbutton.context_menu.openTorTab.key "r">
-<!ENTITY torbutton.context_menu.openTorWindow "Abrir URL do Tor em uma nova Janela">
+<!ENTITY torbutton.context_menu.openTorWindow "Abrir a URL do Tor em uma nova Janela">
<!ENTITY torbutton.context_menu.openTorWindow.key "d">
-<!ENTITY torbutton.button.label "Torbutton">
-<!ENTITY torbutton.button.tooltip "Clique para iniciar Torbutton">
+<!ENTITY torbutton.button.label "Botão do Tor">
+<!ENTITY torbutton.button.tooltip "Clique para iniciar o Botão do Tor">
<!ENTITY torbutton.prefs.sec_settings "Configurações de Segurança">
-<!ENTITY torbutton.prefs.block_thread "Bloquear leitura do histórico durante a utilização do TOR (importante)">
-<!ENTITY torbutton.prefs.block_thwrite "Bloquear escrita no histórico durante a utilização do TOR (recomendado)">
-<!ENTITY torbutton.prefs.block_nthread "Bloquear leitura do histórico durante a não utilização do TOR (opcional)">
-<!ENTITY torbutton.prefs.block_nthwrite "Bloquear escrita no histórico durante a não utilização do TOR (opcional)">
-<!ENTITY torbutton.prefs.clear_history "Limpar histórico ao alternar o uso do TOR (opcional)">
-<!ENTITY torbutton.prefs.clear_cache "Bloquear o cache de disco e limpar todos os caches ao alterar o uso do TOR">
-<!ENTITY torbutton.prefs.block_cache "Bloquear cache de memória e disco durante o uso do TOR">
-<!ENTITY torbutton.prefs.cookie_jars "Armazenar todos os cookies não-Tor num contêiner protegido">
-<!ENTITY torbutton.prefs.cookie_protection "Usar a Caixa de Diálogo de Proteções de Cookies para selecionar">
-<!ENTITY torbutton.prefs.mmm_cookies "I manualmente gerenciarei meus cookies (atenção)">
-<!ENTITY torbutton.prefs.clear_cookies "Limpar cookies quando alternar TOR">
-<!ENTITY torbutton.prefs.disable_plugins "Desabilitar plugins durante o uso do TOR (importante)">
-<!ENTITY torbutton.prefs.kill_bad_js "Deter os scripts perigosos de java (crucial)">
-<!ENTITY torbutton.prefs.isolate_content "Isolar os conteúdos dinâmicos no arquivo de estado de Tor (crucial)">
+<!ENTITY torbutton.prefs.block_thread "Bloquear leituras do histórico durante a utilização do Tor (importante)">
+<!ENTITY torbutton.prefs.block_thwrite "Bloquear escritas no histórico durante a utilização do Tor (recomendado)">
+<!ENTITY torbutton.prefs.block_nthread "Bloquear leituras do histórico quando não estiver utilizando o Tor (opcional)">
+<!ENTITY torbutton.prefs.block_nthwrite "Bloquear escritas no histórico quando não estiver utilizando o Tor (opcional)">
+<!ENTITY torbutton.prefs.clear_history "Limpar histórico ao alternar o status do Tor (opcional)">
+<!ENTITY torbutton.prefs.clear_cache "Bloquear o cache de disco do Tor e limpar todos os caches ao alternar o status do Tor">
+<!ENTITY torbutton.prefs.block_cache "Bloquear o acesso ao cache de memória e de disco durante o uso do Tor">
+<!ENTITY torbutton.prefs.cookie_jars "Armazenar todos os cookies não relacionados ao Tor num jar protegido">
+<!ENTITY torbutton.prefs.cookie_protection "Usar a caixa de diálogo Proteções para Cookies para selecionar">
+<!ENTITY torbutton.prefs.mmm_cookies "Desejo gerenciar meus cookies manualmente (perigoso)">
+<!ENTITY torbutton.prefs.clear_cookies "Limpar cookies ao alternar o status do Tor">
+<!ENTITY torbutton.prefs.disable_plugins "Desabilitar complementos durante o uso do Tor (importante)">
+<!ENTITY torbutton.prefs.kill_bad_js "Bloquear os códigos javascript perigosos (importante)">
+<!ENTITY torbutton.prefs.isolate_content "Isolar os conteúdos dinâmicos ao status atual do Tor (importante)">
<!ENTITY torbutton.prefs.no_updates "Desabilitar atualizações durante o uso do Tor">
-<!ENTITY torbutton.prefs.set_uagent "Mascarar user agent durante utilização de TOR (importante)">
+<!ENTITY torbutton.prefs.set_uagent "Definir o user agent para o uso do Tor (importante)">
<!ENTITY torbutton.prefs.dynamic "Conteúdo Dinâmico">
<!ENTITY torbutton.prefs.cookies "Cookies">
<!ENTITY torbutton.prefs.cache "Cache">
<!ENTITY torbutton.prefs.history "Histórico">
-<!ENTITY torbutton.prefs.no_search "Desabilitar sugestões de pesquisa durante o uso do TOR (recomendado)">
-<!ENTITY torbutton.prefs.shutdown "Desligar">
-<!ENTITY torbutton.prefs.tor_shutdown "Limpar cookies quando o TOR estiver habilitado e o navegador for fechado">
-<!ENTITY torbutton.prefs.all_shutdown "Limpar cookies quando qualquer navegador for fechado">
-<!ENTITY torbutton.prefs.no_shutdown "Não limpar meus cookies ao desligar">
-<!ENTITY torbutton.prefs.disable_sessionstore "Desabilitar função de salvar sessão (recomendado)">
-<!ENTITY torbutton.prefs.headers "Cabeçalho">
-<!ENTITY torbutton.prefs.spoof_english "Mimetizar o navegador para Inglês US">
-<!ENTITY torbutton.prefs.refererspoofing "Engano de referenciador">
+<!ENTITY torbutton.prefs.no_search "Desabilitar as sugestões de pesquisa durante o uso do Tor (recomendado)">
+<!ENTITY torbutton.prefs.shutdown "Encerrar">
+<!ENTITY torbutton.prefs.tor_shutdown "Limpar os cookies do Tor quando um navegador com Tor for encerrado">
+<!ENTITY torbutton.prefs.all_shutdown "Limpar cookies quando qualquer navegador for encerrado">
+<!ENTITY torbutton.prefs.no_shutdown "Não limpar meus cookies ao encerrar">
+<!ENTITY torbutton.prefs.disable_sessionstore "Desabilitar o salvamento de sessão (recomendado)">
+<!ENTITY torbutton.prefs.headers "Cabeçalhos">
+<!ENTITY torbutton.prefs.spoof_english "Aparentar um Navegador em Inglês Americano">
+<!ENTITY torbutton.prefs.refererspoofing "Falsificar origem">
<!ENTITY torbutton.prefs.spoofblank "Spoof blank referer during Tor usage (may break some sites)">
-<!ENTITY torbutton.prefs.smartspoof "Enganar de forma inteligente o referenciador durante o uso do Tor (engana referenciadores em domínios cruzados)">
+<!ENTITY torbutton.prefs.smartspoof "Falsificar de forma inteligente a origem durante o uso do Tor (falsifica a origem em domínios cruzados)">
<!ENTITY torbutton.prefs.nospoof "No referer spoof during Tor usage (sends referers as normal)">
-<!ENTITY torbutton.prefs.disable_domstorage "Desabilitar armazenamento DOM durante o uso do TOR (importante)">
+<!ENTITY torbutton.prefs.disable_domstorage "Desabilitar o armazenamento do DOM durante o uso do Tor (importante)">
<!ENTITY torbutton.prefs.forms "Formulários">
-<!ENTITY torbutton.prefs.block_tforms "Bloquear senhas + informações de formulários durante o uso do TOR (recomendado)">
-<!ENTITY torbutton.prefs.block_ntforms "Bloquear senhas + informações de formulários quando não usar o TOR (opcional)">
+<!ENTITY torbutton.prefs.block_tforms "Bloquear senhas e informações de formulários durante o uso do Tor (recomendado)">
+<!ENTITY torbutton.prefs.block_ntforms "Bloquear senhas e informações de formulários quando não estiver usando o Tor (opcional)">
<!ENTITY torbutton.prefs.tor "Tor">
-<!ENTITY torbutton.prefs.non_tor "Não-Tor">
-<!ENTITY torbutton.prefs.restore_tor "Quando restaurar sessão, definir estado do Tor para:">
+<!ENTITY torbutton.prefs.non_tor "Não relacionado ao Tor">
+<!ENTITY torbutton.prefs.restore_tor "Quando restaurar uma sessão, definir o status do Tor para:">
<!ENTITY torbutton.prefs.startup_tor "Durante inicialização do navegador, definir o estado do Tor como:">
-<!ENTITY torbutton.prefs.reload_crashed_jar "Recarregar cookie/limpar cookies em uma falha do Firefox (recomendado)">
-<!ENTITY torbutton.prefs.dual_cookie_jars "Armazene os cookies, sejam ou não de Tor, em recipientes protegidos (Perigoso)">
+<!ENTITY torbutton.prefs.reload_crashed_jar "Recarregar o jar de cookies/limpar cookies em caso de falha do Firefox (recomendado)">
+<!ENTITY torbutton.prefs.dual_cookie_jars "Armazenar os cookies, do Tor ou não, em jars protegidos (perigoso)">
<!ENTITY torbutton.prefs.clear_http_auth "Limpar as sessões HTTP autenticadas (recomendado)">
-<!ENTITY torbutton.prefs.block_js_history "Isolar o acesso ao histórico de navegação ao arquivo de estado de Tor (crucial)">
-<!ENTITY torbutton.prefs.resize_on_toggle "Alterar o tamanho das páginas em múltiplos de 50px durante o uso de Tor (recomendado)">
-<!ENTITY torbutton.prefs.close_tor "Fechar todas as páginas e abas abertas com Tor ao comutar (opcional)">
-<!ENTITY torbutton.prefs.close_nontor "Fechar todas as páginas e abas não-Tor ao comutar (opcional)">
-<!ENTITY torbutton.prefs.block_links "Bloquear os link clicks e as recarga de páginas desde diferentes arquivos de estado de Tor (opcional)">
-<!ENTITY torbutton.prefs.jar_certs "Armazene certificados SSL em arquivos de estado de Tor separados para páginas Tor e não-Tor (recomendado)">
-<!ENTITY torbutton.prefs.jar_ca_certs "Armazene certificados CA em arquivos de estado separados para páginas Tor e não-Tor (recomendado)">
+<!ENTITY torbutton.prefs.block_js_history "Isolar o acesso ao histórico de navegação ao status atual do Tor (importante)">
+<!ENTITY torbutton.prefs.resize_on_toggle "Redimensionar janelas em múltiplos de 50 px durante o uso do Tor (recomendado)">
+<!ENTITY torbutton.prefs.close_tor "Fechar todas as janelas e abas do Tor ao alternar o status (opcional)">
+<!ENTITY torbutton.prefs.close_nontor "Fechar todas as janelas e abas não relacionadas ao Tor ao alternar o status (opcional)">
+<!ENTITY torbutton.prefs.block_links "Bloquear cliques aos links e atualizações de páginas de status do Tor diferente do atual (opcional)">
+<!ENTITY torbutton.prefs.jar_certs "Armazenar certificados SSL, em jars separados, um para o que for do Tor e um para o que não for (recomendado)">
+<!ENTITY torbutton.prefs.jar_ca_certs "Armazenar certificados da AC, em jars separados, um para o for do Tor e um para o que não for (recomendado)">
<!ENTITY torbutton.prefs.locked_mode "Desabilitar botões e atalhos para prevenir mudanças acidentais">
<!ENTITY torbutton.prefs.startup_state "Durante inicio normal, definir estado do Tor para:">
<!ENTITY torbutton.prefs.shutdown_state "Modo de desligamento">
diff --git a/src/chrome/locale/pt/torbutton.dtd b/src/chrome/locale/pt/torbutton.dtd
index 2829bed..974b09c 100644
--- a/src/chrome/locale/pt/torbutton.dtd
+++ b/src/chrome/locale/pt/torbutton.dtd
@@ -16,6 +16,13 @@
<!ENTITY torbutton.prefs.proxy.host.socks "Host SOCKS:">
<!ENTITY torbutton.prefs.proxy.port "Porto:">
<!ENTITY torbutton.about.title "Sobre o Torbutton">
+<!ENTITY torbutton.about.version "Version:">
+<!ENTITY torbutton.about.summary "Protects the privacy of your Tor browsing.">
+<!ENTITY torbutton.about.code "Code Contributors:">
+<!ENTITY torbutton.about.maintainer "Maintainer:">
+<!ENTITY torbutton.about.security_review "Security Review:">
+<!ENTITY torbutton.about.donate "If you like using Tor, you might consider">
+<!ENTITY torbutton.about.make_donation "making a donation.">
<!ENTITY torbutton.pref_connection.notice "Desactivar o Torbutton para mudar estas configurações.">
<!ENTITY torbutton.pref_connection.more_info "Mais informações">
<!ENTITY torbutton.pref_connection_more_info.title "Ajuda">
diff --git a/src/chrome/locale/ro/torbutton.dtd b/src/chrome/locale/ro/torbutton.dtd
index 9cee850..100fbc6 100644
--- a/src/chrome/locale/ro/torbutton.dtd
+++ b/src/chrome/locale/ro/torbutton.dtd
@@ -16,6 +16,13 @@
<!ENTITY torbutton.prefs.proxy.host.socks "Host SOCKS:">
<!ENTITY torbutton.prefs.proxy.port "Portul:">
<!ENTITY torbutton.about.title "Despre Torbutton">
+<!ENTITY torbutton.about.version "Version:">
+<!ENTITY torbutton.about.summary "Protects the privacy of your Tor browsing.">
+<!ENTITY torbutton.about.code "Code Contributors:">
+<!ENTITY torbutton.about.maintainer "Maintainer:">
+<!ENTITY torbutton.about.security_review "Security Review:">
+<!ENTITY torbutton.about.donate "If you like using Tor, you might consider">
+<!ENTITY torbutton.about.make_donation "making a donation.">
<!ENTITY torbutton.pref_connection.notice "Dezactivaţi Torbutton pentru a schimba aceste setări.">
<!ENTITY torbutton.pref_connection.more_info "Informatii suplimentare">
<!ENTITY torbutton.pref_connection_more_info.title "Ajutor">
diff --git a/src/chrome/locale/ru/torbutton.dtd b/src/chrome/locale/ru/torbutton.dtd
index 311ad78..3939e7d 100644
--- a/src/chrome/locale/ru/torbutton.dtd
+++ b/src/chrome/locale/ru/torbutton.dtd
@@ -16,6 +16,13 @@
<!ENTITY torbutton.prefs.proxy.host.socks "SOCKS хост:">
<!ENTITY torbutton.prefs.proxy.port "Порт:">
<!ENTITY torbutton.about.title "Справка">
+<!ENTITY torbutton.about.version "Version:">
+<!ENTITY torbutton.about.summary "Protects the privacy of your Tor browsing.">
+<!ENTITY torbutton.about.code "Code Contributors:">
+<!ENTITY torbutton.about.maintainer "Maintainer:">
+<!ENTITY torbutton.about.security_review "Security Review:">
+<!ENTITY torbutton.about.donate "If you like using Tor, you might consider">
+<!ENTITY torbutton.about.make_donation "making a donation.">
<!ENTITY torbutton.pref_connection.notice "Для изменения настроек необходимо отключить Torbutton.">
<!ENTITY torbutton.pref_connection.more_info "Подробности">
<!ENTITY torbutton.pref_connection_more_info.title "Подсказка">
diff --git a/src/chrome/locale/sco/torbutton.dtd b/src/chrome/locale/sco/torbutton.dtd
index 998eb76..0da56d5 100644
--- a/src/chrome/locale/sco/torbutton.dtd
+++ b/src/chrome/locale/sco/torbutton.dtd
@@ -16,6 +16,13 @@
<!ENTITY torbutton.prefs.proxy.host.socks "SOCKS Host:">
<!ENTITY torbutton.prefs.proxy.port "Port:">
<!ENTITY torbutton.about.title "About Torbutton">
+<!ENTITY torbutton.about.version "Version:">
+<!ENTITY torbutton.about.summary "Protects the privacy of your Tor browsing.">
+<!ENTITY torbutton.about.code "Code Contributors:">
+<!ENTITY torbutton.about.maintainer "Maintainer:">
+<!ENTITY torbutton.about.security_review "Security Review:">
+<!ENTITY torbutton.about.donate "If you like using Tor, you might consider">
+<!ENTITY torbutton.about.make_donation "making a donation.">
<!ENTITY torbutton.pref_connection.notice "Disable Torbutton to change these settings.">
<!ENTITY torbutton.pref_connection.more_info "More information">
<!ENTITY torbutton.pref_connection_more_info.title "Help">
diff --git a/src/chrome/locale/sk/torbutton.dtd b/src/chrome/locale/sk/torbutton.dtd
index 998eb76..0da56d5 100644
--- a/src/chrome/locale/sk/torbutton.dtd
+++ b/src/chrome/locale/sk/torbutton.dtd
@@ -16,6 +16,13 @@
<!ENTITY torbutton.prefs.proxy.host.socks "SOCKS Host:">
<!ENTITY torbutton.prefs.proxy.port "Port:">
<!ENTITY torbutton.about.title "About Torbutton">
+<!ENTITY torbutton.about.version "Version:">
+<!ENTITY torbutton.about.summary "Protects the privacy of your Tor browsing.">
+<!ENTITY torbutton.about.code "Code Contributors:">
+<!ENTITY torbutton.about.maintainer "Maintainer:">
+<!ENTITY torbutton.about.security_review "Security Review:">
+<!ENTITY torbutton.about.donate "If you like using Tor, you might consider">
+<!ENTITY torbutton.about.make_donation "making a donation.">
<!ENTITY torbutton.pref_connection.notice "Disable Torbutton to change these settings.">
<!ENTITY torbutton.pref_connection.more_info "More information">
<!ENTITY torbutton.pref_connection_more_info.title "Help">
diff --git a/src/chrome/locale/sl/torbutton.dtd b/src/chrome/locale/sl/torbutton.dtd
index a73de8d..4ed907b 100644
--- a/src/chrome/locale/sl/torbutton.dtd
+++ b/src/chrome/locale/sl/torbutton.dtd
@@ -16,6 +16,13 @@
<!ENTITY torbutton.prefs.proxy.host.socks "SOCKS gostitelj:">
<!ENTITY torbutton.prefs.proxy.port "vrata:">
<!ENTITY torbutton.about.title "O razširitvi Torbutton">
+<!ENTITY torbutton.about.version "Version:">
+<!ENTITY torbutton.about.summary "Protects the privacy of your Tor browsing.">
+<!ENTITY torbutton.about.code "Code Contributors:">
+<!ENTITY torbutton.about.maintainer "Maintainer:">
+<!ENTITY torbutton.about.security_review "Security Review:">
+<!ENTITY torbutton.about.donate "If you like using Tor, you might consider">
+<!ENTITY torbutton.about.make_donation "making a donation.">
<!ENTITY torbutton.pref_connection.notice "Če želite spremeniti te nastavitve onemogočite razširitev Torbutton.">
<!ENTITY torbutton.pref_connection.more_info "Več informacij">
<!ENTITY torbutton.pref_connection_more_info.title "Pomoč">
diff --git a/src/chrome/locale/so/torbutton.dtd b/src/chrome/locale/so/torbutton.dtd
index 998eb76..0da56d5 100644
--- a/src/chrome/locale/so/torbutton.dtd
+++ b/src/chrome/locale/so/torbutton.dtd
@@ -16,6 +16,13 @@
<!ENTITY torbutton.prefs.proxy.host.socks "SOCKS Host:">
<!ENTITY torbutton.prefs.proxy.port "Port:">
<!ENTITY torbutton.about.title "About Torbutton">
+<!ENTITY torbutton.about.version "Version:">
+<!ENTITY torbutton.about.summary "Protects the privacy of your Tor browsing.">
+<!ENTITY torbutton.about.code "Code Contributors:">
+<!ENTITY torbutton.about.maintainer "Maintainer:">
+<!ENTITY torbutton.about.security_review "Security Review:">
+<!ENTITY torbutton.about.donate "If you like using Tor, you might consider">
+<!ENTITY torbutton.about.make_donation "making a donation.">
<!ENTITY torbutton.pref_connection.notice "Disable Torbutton to change these settings.">
<!ENTITY torbutton.pref_connection.more_info "More information">
<!ENTITY torbutton.pref_connection_more_info.title "Help">
diff --git a/src/chrome/locale/son/torbutton.dtd b/src/chrome/locale/son/torbutton.dtd
index 998eb76..0da56d5 100644
--- a/src/chrome/locale/son/torbutton.dtd
+++ b/src/chrome/locale/son/torbutton.dtd
@@ -16,6 +16,13 @@
<!ENTITY torbutton.prefs.proxy.host.socks "SOCKS Host:">
<!ENTITY torbutton.prefs.proxy.port "Port:">
<!ENTITY torbutton.about.title "About Torbutton">
+<!ENTITY torbutton.about.version "Version:">
+<!ENTITY torbutton.about.summary "Protects the privacy of your Tor browsing.">
+<!ENTITY torbutton.about.code "Code Contributors:">
+<!ENTITY torbutton.about.maintainer "Maintainer:">
+<!ENTITY torbutton.about.security_review "Security Review:">
+<!ENTITY torbutton.about.donate "If you like using Tor, you might consider">
+<!ENTITY torbutton.about.make_donation "making a donation.">
<!ENTITY torbutton.pref_connection.notice "Disable Torbutton to change these settings.">
<!ENTITY torbutton.pref_connection.more_info "More information">
<!ENTITY torbutton.pref_connection_more_info.title "Help">
diff --git a/src/chrome/locale/sq/torbutton.dtd b/src/chrome/locale/sq/torbutton.dtd
index 998eb76..0da56d5 100644
--- a/src/chrome/locale/sq/torbutton.dtd
+++ b/src/chrome/locale/sq/torbutton.dtd
@@ -16,6 +16,13 @@
<!ENTITY torbutton.prefs.proxy.host.socks "SOCKS Host:">
<!ENTITY torbutton.prefs.proxy.port "Port:">
<!ENTITY torbutton.about.title "About Torbutton">
+<!ENTITY torbutton.about.version "Version:">
+<!ENTITY torbutton.about.summary "Protects the privacy of your Tor browsing.">
+<!ENTITY torbutton.about.code "Code Contributors:">
+<!ENTITY torbutton.about.maintainer "Maintainer:">
+<!ENTITY torbutton.about.security_review "Security Review:">
+<!ENTITY torbutton.about.donate "If you like using Tor, you might consider">
+<!ENTITY torbutton.about.make_donation "making a donation.">
<!ENTITY torbutton.pref_connection.notice "Disable Torbutton to change these settings.">
<!ENTITY torbutton.pref_connection.more_info "More information">
<!ENTITY torbutton.pref_connection_more_info.title "Help">
diff --git a/src/chrome/locale/sr/torbutton.dtd b/src/chrome/locale/sr/torbutton.dtd
index cacc4d5..30427a5 100644
--- a/src/chrome/locale/sr/torbutton.dtd
+++ b/src/chrome/locale/sr/torbutton.dtd
@@ -16,6 +16,13 @@
<!ENTITY torbutton.prefs.proxy.host.socks "SOCKS домаћин:">
<!ENTITY torbutton.prefs.proxy.port "Порт:">
<!ENTITY torbutton.about.title "О додатку">
+<!ENTITY torbutton.about.version "Version:">
+<!ENTITY torbutton.about.summary "Protects the privacy of your Tor browsing.">
+<!ENTITY torbutton.about.code "Code Contributors:">
+<!ENTITY torbutton.about.maintainer "Maintainer:">
+<!ENTITY torbutton.about.security_review "Security Review:">
+<!ENTITY torbutton.about.donate "If you like using Tor, you might consider">
+<!ENTITY torbutton.about.make_donation "making a donation.">
<!ENTITY torbutton.pref_connection.notice "Забрани промену ових поставки.">
<!ENTITY torbutton.pref_connection.more_info "Више информација">
<!ENTITY torbutton.pref_connection_more_info.title "Помоћ">
diff --git a/src/chrome/locale/st/torbutton.dtd b/src/chrome/locale/st/torbutton.dtd
index 998eb76..0da56d5 100644
--- a/src/chrome/locale/st/torbutton.dtd
+++ b/src/chrome/locale/st/torbutton.dtd
@@ -16,6 +16,13 @@
<!ENTITY torbutton.prefs.proxy.host.socks "SOCKS Host:">
<!ENTITY torbutton.prefs.proxy.port "Port:">
<!ENTITY torbutton.about.title "About Torbutton">
+<!ENTITY torbutton.about.version "Version:">
+<!ENTITY torbutton.about.summary "Protects the privacy of your Tor browsing.">
+<!ENTITY torbutton.about.code "Code Contributors:">
+<!ENTITY torbutton.about.maintainer "Maintainer:">
+<!ENTITY torbutton.about.security_review "Security Review:">
+<!ENTITY torbutton.about.donate "If you like using Tor, you might consider">
+<!ENTITY torbutton.about.make_donation "making a donation.">
<!ENTITY torbutton.pref_connection.notice "Disable Torbutton to change these settings.">
<!ENTITY torbutton.pref_connection.more_info "More information">
<!ENTITY torbutton.pref_connection_more_info.title "Help">
diff --git a/src/chrome/locale/su/torbutton.dtd b/src/chrome/locale/su/torbutton.dtd
index 998eb76..0da56d5 100644
--- a/src/chrome/locale/su/torbutton.dtd
+++ b/src/chrome/locale/su/torbutton.dtd
@@ -16,6 +16,13 @@
<!ENTITY torbutton.prefs.proxy.host.socks "SOCKS Host:">
<!ENTITY torbutton.prefs.proxy.port "Port:">
<!ENTITY torbutton.about.title "About Torbutton">
+<!ENTITY torbutton.about.version "Version:">
+<!ENTITY torbutton.about.summary "Protects the privacy of your Tor browsing.">
+<!ENTITY torbutton.about.code "Code Contributors:">
+<!ENTITY torbutton.about.maintainer "Maintainer:">
+<!ENTITY torbutton.about.security_review "Security Review:">
+<!ENTITY torbutton.about.donate "If you like using Tor, you might consider">
+<!ENTITY torbutton.about.make_donation "making a donation.">
<!ENTITY torbutton.pref_connection.notice "Disable Torbutton to change these settings.">
<!ENTITY torbutton.pref_connection.more_info "More information">
<!ENTITY torbutton.pref_connection_more_info.title "Help">
diff --git a/src/chrome/locale/sv/torbutton.dtd b/src/chrome/locale/sv/torbutton.dtd
index bdfe455..debba95 100644
--- a/src/chrome/locale/sv/torbutton.dtd
+++ b/src/chrome/locale/sv/torbutton.dtd
@@ -16,6 +16,13 @@
<!ENTITY torbutton.prefs.proxy.host.socks "SOCKS-host:">
<!ENTITY torbutton.prefs.proxy.port "Port:">
<!ENTITY torbutton.about.title "Om Torbutton">
+<!ENTITY torbutton.about.version "Version:">
+<!ENTITY torbutton.about.summary "Protects the privacy of your Tor browsing.">
+<!ENTITY torbutton.about.code "Code Contributors:">
+<!ENTITY torbutton.about.maintainer "Maintainer:">
+<!ENTITY torbutton.about.security_review "Security Review:">
+<!ENTITY torbutton.about.donate "If you like using Tor, you might consider">
+<!ENTITY torbutton.about.make_donation "making a donation.">
<!ENTITY torbutton.pref_connection.notice "Avaktivera Torbutton för att ändra dessa inställningar.">
<!ENTITY torbutton.pref_connection.more_info "Mer information">
<!ENTITY torbutton.pref_connection_more_info.title "Hjälp">
diff --git a/src/chrome/locale/sw/torbutton.dtd b/src/chrome/locale/sw/torbutton.dtd
index 998eb76..0da56d5 100644
--- a/src/chrome/locale/sw/torbutton.dtd
+++ b/src/chrome/locale/sw/torbutton.dtd
@@ -16,6 +16,13 @@
<!ENTITY torbutton.prefs.proxy.host.socks "SOCKS Host:">
<!ENTITY torbutton.prefs.proxy.port "Port:">
<!ENTITY torbutton.about.title "About Torbutton">
+<!ENTITY torbutton.about.version "Version:">
+<!ENTITY torbutton.about.summary "Protects the privacy of your Tor browsing.">
+<!ENTITY torbutton.about.code "Code Contributors:">
+<!ENTITY torbutton.about.maintainer "Maintainer:">
+<!ENTITY torbutton.about.security_review "Security Review:">
+<!ENTITY torbutton.about.donate "If you like using Tor, you might consider">
+<!ENTITY torbutton.about.make_donation "making a donation.">
<!ENTITY torbutton.pref_connection.notice "Disable Torbutton to change these settings.">
<!ENTITY torbutton.pref_connection.more_info "More information">
<!ENTITY torbutton.pref_connection_more_info.title "Help">
diff --git a/src/chrome/locale/ta/torbutton.dtd b/src/chrome/locale/ta/torbutton.dtd
index 998eb76..0da56d5 100644
--- a/src/chrome/locale/ta/torbutton.dtd
+++ b/src/chrome/locale/ta/torbutton.dtd
@@ -16,6 +16,13 @@
<!ENTITY torbutton.prefs.proxy.host.socks "SOCKS Host:">
<!ENTITY torbutton.prefs.proxy.port "Port:">
<!ENTITY torbutton.about.title "About Torbutton">
+<!ENTITY torbutton.about.version "Version:">
+<!ENTITY torbutton.about.summary "Protects the privacy of your Tor browsing.">
+<!ENTITY torbutton.about.code "Code Contributors:">
+<!ENTITY torbutton.about.maintainer "Maintainer:">
+<!ENTITY torbutton.about.security_review "Security Review:">
+<!ENTITY torbutton.about.donate "If you like using Tor, you might consider">
+<!ENTITY torbutton.about.make_donation "making a donation.">
<!ENTITY torbutton.pref_connection.notice "Disable Torbutton to change these settings.">
<!ENTITY torbutton.pref_connection.more_info "More information">
<!ENTITY torbutton.pref_connection_more_info.title "Help">
diff --git a/src/chrome/locale/te/torbutton.dtd b/src/chrome/locale/te/torbutton.dtd
index 998eb76..0da56d5 100644
--- a/src/chrome/locale/te/torbutton.dtd
+++ b/src/chrome/locale/te/torbutton.dtd
@@ -16,6 +16,13 @@
<!ENTITY torbutton.prefs.proxy.host.socks "SOCKS Host:">
<!ENTITY torbutton.prefs.proxy.port "Port:">
<!ENTITY torbutton.about.title "About Torbutton">
+<!ENTITY torbutton.about.version "Version:">
+<!ENTITY torbutton.about.summary "Protects the privacy of your Tor browsing.">
+<!ENTITY torbutton.about.code "Code Contributors:">
+<!ENTITY torbutton.about.maintainer "Maintainer:">
+<!ENTITY torbutton.about.security_review "Security Review:">
+<!ENTITY torbutton.about.donate "If you like using Tor, you might consider">
+<!ENTITY torbutton.about.make_donation "making a donation.">
<!ENTITY torbutton.pref_connection.notice "Disable Torbutton to change these settings.">
<!ENTITY torbutton.pref_connection.more_info "More information">
<!ENTITY torbutton.pref_connection_more_info.title "Help">
diff --git a/src/chrome/locale/tg/torbutton.dtd b/src/chrome/locale/tg/torbutton.dtd
index 998eb76..0da56d5 100644
--- a/src/chrome/locale/tg/torbutton.dtd
+++ b/src/chrome/locale/tg/torbutton.dtd
@@ -16,6 +16,13 @@
<!ENTITY torbutton.prefs.proxy.host.socks "SOCKS Host:">
<!ENTITY torbutton.prefs.proxy.port "Port:">
<!ENTITY torbutton.about.title "About Torbutton">
+<!ENTITY torbutton.about.version "Version:">
+<!ENTITY torbutton.about.summary "Protects the privacy of your Tor browsing.">
+<!ENTITY torbutton.about.code "Code Contributors:">
+<!ENTITY torbutton.about.maintainer "Maintainer:">
+<!ENTITY torbutton.about.security_review "Security Review:">
+<!ENTITY torbutton.about.donate "If you like using Tor, you might consider">
+<!ENTITY torbutton.about.make_donation "making a donation.">
<!ENTITY torbutton.pref_connection.notice "Disable Torbutton to change these settings.">
<!ENTITY torbutton.pref_connection.more_info "More information">
<!ENTITY torbutton.pref_connection_more_info.title "Help">
diff --git a/src/chrome/locale/th/torbutton.dtd b/src/chrome/locale/th/torbutton.dtd
index 5b63dfb..bc15ba8 100644
--- a/src/chrome/locale/th/torbutton.dtd
+++ b/src/chrome/locale/th/torbutton.dtd
@@ -16,6 +16,13 @@
<!ENTITY torbutton.prefs.proxy.host.socks "ค่า SOCKS Host :">
<!ENTITY torbutton.prefs.proxy.port "ค่า Port :">
<!ENTITY torbutton.about.title "เกี่ยวกับ Torbutton">
+<!ENTITY torbutton.about.version "Version:">
+<!ENTITY torbutton.about.summary "Protects the privacy of your Tor browsing.">
+<!ENTITY torbutton.about.code "Code Contributors:">
+<!ENTITY torbutton.about.maintainer "Maintainer:">
+<!ENTITY torbutton.about.security_review "Security Review:">
+<!ENTITY torbutton.about.donate "If you like using Tor, you might consider">
+<!ENTITY torbutton.about.make_donation "making a donation.">
<!ENTITY torbutton.pref_connection.notice "Disable Torbutton to change these settings.">
<!ENTITY torbutton.pref_connection.more_info "ข้อมูลเพิ่มเติม">
<!ENTITY torbutton.pref_connection_more_info.title "ความช่วยเหลือ">
diff --git a/src/chrome/locale/ti/torbutton.dtd b/src/chrome/locale/ti/torbutton.dtd
index 998eb76..0da56d5 100644
--- a/src/chrome/locale/ti/torbutton.dtd
+++ b/src/chrome/locale/ti/torbutton.dtd
@@ -16,6 +16,13 @@
<!ENTITY torbutton.prefs.proxy.host.socks "SOCKS Host:">
<!ENTITY torbutton.prefs.proxy.port "Port:">
<!ENTITY torbutton.about.title "About Torbutton">
+<!ENTITY torbutton.about.version "Version:">
+<!ENTITY torbutton.about.summary "Protects the privacy of your Tor browsing.">
+<!ENTITY torbutton.about.code "Code Contributors:">
+<!ENTITY torbutton.about.maintainer "Maintainer:">
+<!ENTITY torbutton.about.security_review "Security Review:">
+<!ENTITY torbutton.about.donate "If you like using Tor, you might consider">
+<!ENTITY torbutton.about.make_donation "making a donation.">
<!ENTITY torbutton.pref_connection.notice "Disable Torbutton to change these settings.">
<!ENTITY torbutton.pref_connection.more_info "More information">
<!ENTITY torbutton.pref_connection_more_info.title "Help">
diff --git a/src/chrome/locale/tk/torbutton.dtd b/src/chrome/locale/tk/torbutton.dtd
index 998eb76..0da56d5 100644
--- a/src/chrome/locale/tk/torbutton.dtd
+++ b/src/chrome/locale/tk/torbutton.dtd
@@ -16,6 +16,13 @@
<!ENTITY torbutton.prefs.proxy.host.socks "SOCKS Host:">
<!ENTITY torbutton.prefs.proxy.port "Port:">
<!ENTITY torbutton.about.title "About Torbutton">
+<!ENTITY torbutton.about.version "Version:">
+<!ENTITY torbutton.about.summary "Protects the privacy of your Tor browsing.">
+<!ENTITY torbutton.about.code "Code Contributors:">
+<!ENTITY torbutton.about.maintainer "Maintainer:">
+<!ENTITY torbutton.about.security_review "Security Review:">
+<!ENTITY torbutton.about.donate "If you like using Tor, you might consider">
+<!ENTITY torbutton.about.make_donation "making a donation.">
<!ENTITY torbutton.pref_connection.notice "Disable Torbutton to change these settings.">
<!ENTITY torbutton.pref_connection.more_info "More information">
<!ENTITY torbutton.pref_connection_more_info.title "Help">
diff --git a/src/chrome/locale/tr/torbutton.dtd b/src/chrome/locale/tr/torbutton.dtd
index 757b95c..9eec75e 100644
--- a/src/chrome/locale/tr/torbutton.dtd
+++ b/src/chrome/locale/tr/torbutton.dtd
@@ -16,6 +16,13 @@
<!ENTITY torbutton.prefs.proxy.host.socks "SOCKS Host:">
<!ENTITY torbutton.prefs.proxy.port "Port:">
<!ENTITY torbutton.about.title "Torbutton Hakkında">
+<!ENTITY torbutton.about.version "Version:">
+<!ENTITY torbutton.about.summary "Protects the privacy of your Tor browsing.">
+<!ENTITY torbutton.about.code "Code Contributors:">
+<!ENTITY torbutton.about.maintainer "Maintainer:">
+<!ENTITY torbutton.about.security_review "Security Review:">
+<!ENTITY torbutton.about.donate "If you like using Tor, you might consider">
+<!ENTITY torbutton.about.make_donation "making a donation.">
<!ENTITY torbutton.pref_connection.notice "Ayarları uygulumak için Torbutonu devredışı bırak.">
<!ENTITY torbutton.pref_connection.more_info "Daha fazla bilgi">
<!ENTITY torbutton.pref_connection_more_info.title "Yardım">
diff --git a/src/chrome/locale/uk/torbutton.dtd b/src/chrome/locale/uk/torbutton.dtd
index 28325e8..4b4126a 100644
--- a/src/chrome/locale/uk/torbutton.dtd
+++ b/src/chrome/locale/uk/torbutton.dtd
@@ -1,24 +1,31 @@
<!ENTITY torbutton.prefs.title "Налаштування Torbutton">
-<!ENTITY torbutton.prefs.display_settings "Показати опції">
+<!ENTITY torbutton.prefs.display_settings "Показати параметри">
<!ENTITY torbutton.prefs.display_panel "Показувати стан проксі Tor у рядку стану">
<!ENTITY torbutton.prefs.panel_format "Формат поля у рядку стану">
<!ENTITY torbutton.prefs.panel_text_format "Текст">
-<!ENTITY torbutton.prefs.panel_icon_format "Іконка">
-<!ENTITY torbutton.prefs.tor_settings "Властивості проксі">
-<!ENTITY torbutton.prefs.recommended_settings "Використовувати рекомендовані значення для моєї версії Фірефоху">
+<!ENTITY torbutton.prefs.panel_icon_format "Значок">
+<!ENTITY torbutton.prefs.tor_settings "Параметри проксі">
+<!ENTITY torbutton.prefs.recommended_settings "Використовувати рекомендовані параметри для моєї версії Firefox">
<!ENTITY torbutton.prefs.use_privoxy "Використовувати Privoxy">
-<!ENTITY torbutton.prefs.use_polipo "Use Polipo">
+<!ENTITY torbutton.prefs.use_polipo "Використовувати Polipo">
<!ENTITY torbutton.prefs.custom_settings "Використовувати звичайні налаштування проксі">
<!ENTITY torbutton.prefs.proxy.host.http "HTTP проксі:">
<!ENTITY torbutton.prefs.proxy.host.https "SSL проксі:">
<!ENTITY torbutton.prefs.proxy.host.ftp "FTP проксі:">
<!ENTITY torbutton.prefs.proxy.host.gopher "Gopher проксі:">
-<!ENTITY torbutton.prefs.proxy.host.socks "SOCKS хост:">
+<!ENTITY torbutton.prefs.proxy.host.socks "Вузол SOCKS:">
<!ENTITY torbutton.prefs.proxy.port "Порт:">
<!ENTITY torbutton.about.title "Про Torbutton">
+<!ENTITY torbutton.about.version "Version:">
+<!ENTITY torbutton.about.summary "Protects the privacy of your Tor browsing.">
+<!ENTITY torbutton.about.code "Code Contributors:">
+<!ENTITY torbutton.about.maintainer "Maintainer:">
+<!ENTITY torbutton.about.security_review "Security Review:">
+<!ENTITY torbutton.about.donate "If you like using Tor, you might consider">
+<!ENTITY torbutton.about.make_donation "making a donation.">
<!ENTITY torbutton.pref_connection.notice "Вимкніть Torbutton, щоб змінити ці налаштування">
<!ENTITY torbutton.pref_connection.more_info "Більше інформації">
-<!ENTITY torbutton.pref_connection_more_info.title "Допомога">
+<!ENTITY torbutton.pref_connection_more_info.title "Довідка">
<!ENTITY torbutton.pref_connection_more_info.text "Torbutton зараз увімкнено. Якщо Ви бажаєте змінити налаштування проксі (не Tor-проксі), прошу вимкнути Torbutton та повернутися сюди. Якщо ж бажана зміна торкатиметься Tor-проксі, прошу це робити через вікно налаштування Torbutton.">
<!ENTITY torbutton.context_menu.toggle "Змінити стан Tor">
<!ENTITY torbutton.context_menu.toggle.key "T">
@@ -26,17 +33,17 @@
<!ENTITY torbutton.context_menu.preferences.key "P">
<!ENTITY torbutton.context_menu.about "Про Torbutton...">
<!ENTITY torbutton.context_menu.about.key "A">
-<!ENTITY torbutton.context_menu.cookieProtections "Cookie Protections">
+<!ENTITY torbutton.context_menu.cookieProtections "Захист куки">
<!ENTITY torbutton.context_menu.cookieProtections.key "C">
-<!ENTITY torbutton.context_menu.copyTor "Copy Tor URL">
+<!ENTITY torbutton.context_menu.copyTor "Копіювати адресу Tor">
<!ENTITY torbutton.context_menu.copyTor.key "p">
-<!ENTITY torbutton.context_menu.openTorTab "Open Tor URL in new Tab">
+<!ENTITY torbutton.context_menu.openTorTab "Відкрити адресу Tor у новій вкладці">
<!ENTITY torbutton.context_menu.openTorTab.key "r">
-<!ENTITY torbutton.context_menu.openTorWindow "Open Tor URL in new Window">
+<!ENTITY torbutton.context_menu.openTorWindow "Відкрити адресу Tor у новому вікні">
<!ENTITY torbutton.context_menu.openTorWindow.key "d">
<!ENTITY torbutton.button.label "Torbutton">
<!ENTITY torbutton.button.tooltip "Клацніть для запуску Torbutton">
-<!ENTITY torbutton.prefs.sec_settings "Налаштування безпеки">
+<!ENTITY torbutton.prefs.sec_settings "Параметри безпеки">
<!ENTITY torbutton.prefs.block_thread "Блокувати читання історії під час використання Tor (критично)">
<!ENTITY torbutton.prefs.block_thwrite "Блокувати запис історії під час використання Tor (рекомендовано)">
<!ENTITY torbutton.prefs.block_nthread "Блокувати читання історії без використання Tor (на Ваш вибір)">
@@ -45,13 +52,13 @@
<!ENTITY torbutton.prefs.clear_cache "Блокувати дисковий кеш та чистити кеш при зміні стану Tor">
<!ENTITY torbutton.prefs.block_cache "Блокувати доступ до дискового та кешу у пам’яті при використанні Tor">
<!ENTITY torbutton.prefs.cookie_jars "Зберігати не-Tor куки у захищеному стані">
-<!ENTITY torbutton.prefs.cookie_protection "Use the Cookie Protections Dialog to choose">
+<!ENTITY torbutton.prefs.cookie_protection "Використовувати для вибору діалог захисту куків">
<!ENTITY torbutton.prefs.mmm_cookies "Я хочу сам керувати своїми куками (небезпечно)">
<!ENTITY torbutton.prefs.clear_cookies "Чистити куки при зміні стану Tor">
-<!ENTITY torbutton.prefs.disable_plugins "Вимикати плагіни при використанні Tor (критично)">
+<!ENTITY torbutton.prefs.disable_plugins "Вимикати модулі протягом використання Tor (критично)">
<!ENTITY torbutton.prefs.kill_bad_js "Захоплювати небезпеки у javascript (критично)">
<!ENTITY torbutton.prefs.isolate_content "Ізолювати динамічний вміст до одного стану Tor (критично)">
-<!ENTITY torbutton.prefs.no_updates "Не дозволяти оновлень при використанні Tor">
+<!ENTITY torbutton.prefs.no_updates "Вимкнути оновлення протягом використання Tor">
<!ENTITY torbutton.prefs.set_uagent "Встановити юзер агент для використання Tor (критично)">
<!ENTITY torbutton.prefs.dynamic "Динамічний вміст">
<!ENTITY torbutton.prefs.cookies "Куки">
diff --git a/src/chrome/locale/ur/torbutton.dtd b/src/chrome/locale/ur/torbutton.dtd
index 998eb76..0da56d5 100644
--- a/src/chrome/locale/ur/torbutton.dtd
+++ b/src/chrome/locale/ur/torbutton.dtd
@@ -16,6 +16,13 @@
<!ENTITY torbutton.prefs.proxy.host.socks "SOCKS Host:">
<!ENTITY torbutton.prefs.proxy.port "Port:">
<!ENTITY torbutton.about.title "About Torbutton">
+<!ENTITY torbutton.about.version "Version:">
+<!ENTITY torbutton.about.summary "Protects the privacy of your Tor browsing.">
+<!ENTITY torbutton.about.code "Code Contributors:">
+<!ENTITY torbutton.about.maintainer "Maintainer:">
+<!ENTITY torbutton.about.security_review "Security Review:">
+<!ENTITY torbutton.about.donate "If you like using Tor, you might consider">
+<!ENTITY torbutton.about.make_donation "making a donation.">
<!ENTITY torbutton.pref_connection.notice "Disable Torbutton to change these settings.">
<!ENTITY torbutton.pref_connection.more_info "More information">
<!ENTITY torbutton.pref_connection_more_info.title "Help">
diff --git a/src/chrome/locale/ve/torbutton.dtd b/src/chrome/locale/ve/torbutton.dtd
index 998eb76..0da56d5 100644
--- a/src/chrome/locale/ve/torbutton.dtd
+++ b/src/chrome/locale/ve/torbutton.dtd
@@ -16,6 +16,13 @@
<!ENTITY torbutton.prefs.proxy.host.socks "SOCKS Host:">
<!ENTITY torbutton.prefs.proxy.port "Port:">
<!ENTITY torbutton.about.title "About Torbutton">
+<!ENTITY torbutton.about.version "Version:">
+<!ENTITY torbutton.about.summary "Protects the privacy of your Tor browsing.">
+<!ENTITY torbutton.about.code "Code Contributors:">
+<!ENTITY torbutton.about.maintainer "Maintainer:">
+<!ENTITY torbutton.about.security_review "Security Review:">
+<!ENTITY torbutton.about.donate "If you like using Tor, you might consider">
+<!ENTITY torbutton.about.make_donation "making a donation.">
<!ENTITY torbutton.pref_connection.notice "Disable Torbutton to change these settings.">
<!ENTITY torbutton.pref_connection.more_info "More information">
<!ENTITY torbutton.pref_connection_more_info.title "Help">
diff --git a/src/chrome/locale/vi/torbutton.dtd b/src/chrome/locale/vi/torbutton.dtd
index 36b720f..a775075 100644
--- a/src/chrome/locale/vi/torbutton.dtd
+++ b/src/chrome/locale/vi/torbutton.dtd
@@ -16,6 +16,13 @@
<!ENTITY torbutton.prefs.proxy.host.socks "SOCKS Host:">
<!ENTITY torbutton.prefs.proxy.port "Cổng:">
<!ENTITY torbutton.about.title "Thông tin về Torbutton">
+<!ENTITY torbutton.about.version "Version:">
+<!ENTITY torbutton.about.summary "Protects the privacy of your Tor browsing.">
+<!ENTITY torbutton.about.code "Code Contributors:">
+<!ENTITY torbutton.about.maintainer "Maintainer:">
+<!ENTITY torbutton.about.security_review "Security Review:">
+<!ENTITY torbutton.about.donate "If you like using Tor, you might consider">
+<!ENTITY torbutton.about.make_donation "making a donation.">
<!ENTITY torbutton.pref_connection.notice "Tắt Torbutton để thay đổi các thiết lập này.">
<!ENTITY torbutton.pref_connection.more_info "Thông tin thêm">
<!ENTITY torbutton.pref_connection_more_info.title "Trợ giúp">
diff --git a/src/chrome/locale/wa/torbutton.dtd b/src/chrome/locale/wa/torbutton.dtd
index 998eb76..0da56d5 100644
--- a/src/chrome/locale/wa/torbutton.dtd
+++ b/src/chrome/locale/wa/torbutton.dtd
@@ -16,6 +16,13 @@
<!ENTITY torbutton.prefs.proxy.host.socks "SOCKS Host:">
<!ENTITY torbutton.prefs.proxy.port "Port:">
<!ENTITY torbutton.about.title "About Torbutton">
+<!ENTITY torbutton.about.version "Version:">
+<!ENTITY torbutton.about.summary "Protects the privacy of your Tor browsing.">
+<!ENTITY torbutton.about.code "Code Contributors:">
+<!ENTITY torbutton.about.maintainer "Maintainer:">
+<!ENTITY torbutton.about.security_review "Security Review:">
+<!ENTITY torbutton.about.donate "If you like using Tor, you might consider">
+<!ENTITY torbutton.about.make_donation "making a donation.">
<!ENTITY torbutton.pref_connection.notice "Disable Torbutton to change these settings.">
<!ENTITY torbutton.pref_connection.more_info "More information">
<!ENTITY torbutton.pref_connection_more_info.title "Help">
diff --git a/src/chrome/locale/wo/torbutton.dtd b/src/chrome/locale/wo/torbutton.dtd
index 998eb76..0da56d5 100644
--- a/src/chrome/locale/wo/torbutton.dtd
+++ b/src/chrome/locale/wo/torbutton.dtd
@@ -16,6 +16,13 @@
<!ENTITY torbutton.prefs.proxy.host.socks "SOCKS Host:">
<!ENTITY torbutton.prefs.proxy.port "Port:">
<!ENTITY torbutton.about.title "About Torbutton">
+<!ENTITY torbutton.about.version "Version:">
+<!ENTITY torbutton.about.summary "Protects the privacy of your Tor browsing.">
+<!ENTITY torbutton.about.code "Code Contributors:">
+<!ENTITY torbutton.about.maintainer "Maintainer:">
+<!ENTITY torbutton.about.security_review "Security Review:">
+<!ENTITY torbutton.about.donate "If you like using Tor, you might consider">
+<!ENTITY torbutton.about.make_donation "making a donation.">
<!ENTITY torbutton.pref_connection.notice "Disable Torbutton to change these settings.">
<!ENTITY torbutton.pref_connection.more_info "More information">
<!ENTITY torbutton.pref_connection_more_info.title "Help">
diff --git a/src/chrome/locale/zh-CN/torbutton.dtd b/src/chrome/locale/zh-CN/torbutton.dtd
index 9333c1c..1d186b3 100644
--- a/src/chrome/locale/zh-CN/torbutton.dtd
+++ b/src/chrome/locale/zh-CN/torbutton.dtd
@@ -16,6 +16,13 @@
<!ENTITY torbutton.prefs.proxy.host.socks "SOCKS 代理:">
<!ENTITY torbutton.prefs.proxy.port "端口:">
<!ENTITY torbutton.about.title "关于 Torbutton">
+<!ENTITY torbutton.about.version "Version:">
+<!ENTITY torbutton.about.summary "Protects the privacy of your Tor browsing.">
+<!ENTITY torbutton.about.code "Code Contributors:">
+<!ENTITY torbutton.about.maintainer "Maintainer:">
+<!ENTITY torbutton.about.security_review "Security Review:">
+<!ENTITY torbutton.about.donate "If you like using Tor, you might consider">
+<!ENTITY torbutton.about.make_donation "making a donation.">
<!ENTITY torbutton.pref_connection.notice "禁用 Torbutton 来改变这些设置。">
<!ENTITY torbutton.pref_connection.more_info "更多信息">
<!ENTITY torbutton.pref_connection_more_info.title "帮助">
diff --git a/src/chrome/locale/zh-HK/torbutton.dtd b/src/chrome/locale/zh-HK/torbutton.dtd
index 998eb76..0da56d5 100644
--- a/src/chrome/locale/zh-HK/torbutton.dtd
+++ b/src/chrome/locale/zh-HK/torbutton.dtd
@@ -16,6 +16,13 @@
<!ENTITY torbutton.prefs.proxy.host.socks "SOCKS Host:">
<!ENTITY torbutton.prefs.proxy.port "Port:">
<!ENTITY torbutton.about.title "About Torbutton">
+<!ENTITY torbutton.about.version "Version:">
+<!ENTITY torbutton.about.summary "Protects the privacy of your Tor browsing.">
+<!ENTITY torbutton.about.code "Code Contributors:">
+<!ENTITY torbutton.about.maintainer "Maintainer:">
+<!ENTITY torbutton.about.security_review "Security Review:">
+<!ENTITY torbutton.about.donate "If you like using Tor, you might consider">
+<!ENTITY torbutton.about.make_donation "making a donation.">
<!ENTITY torbutton.pref_connection.notice "Disable Torbutton to change these settings.">
<!ENTITY torbutton.pref_connection.more_info "More information">
<!ENTITY torbutton.pref_connection_more_info.title "Help">
diff --git a/src/chrome/locale/zh-TW/torbutton.dtd b/src/chrome/locale/zh-TW/torbutton.dtd
index 269ead7..8787af3 100644
--- a/src/chrome/locale/zh-TW/torbutton.dtd
+++ b/src/chrome/locale/zh-TW/torbutton.dtd
@@ -16,6 +16,13 @@
<!ENTITY torbutton.prefs.proxy.host.socks "SOCKS Host:">
<!ENTITY torbutton.prefs.proxy.port "Port:">
<!ENTITY torbutton.about.title "關於 Torbutton">
+<!ENTITY torbutton.about.version "Version:">
+<!ENTITY torbutton.about.summary "Protects the privacy of your Tor browsing.">
+<!ENTITY torbutton.about.code "Code Contributors:">
+<!ENTITY torbutton.about.maintainer "Maintainer:">
+<!ENTITY torbutton.about.security_review "Security Review:">
+<!ENTITY torbutton.about.donate "If you like using Tor, you might consider">
+<!ENTITY torbutton.about.make_donation "making a donation.">
<!ENTITY torbutton.pref_connection.notice "停用Torbutton來改變設定">
<!ENTITY torbutton.pref_connection.more_info "更多資訊">
<!ENTITY torbutton.pref_connection_more_info.title "幫助">
diff --git a/src/chrome/locale/zu/torbutton.dtd b/src/chrome/locale/zu/torbutton.dtd
index 998eb76..0da56d5 100644
--- a/src/chrome/locale/zu/torbutton.dtd
+++ b/src/chrome/locale/zu/torbutton.dtd
@@ -16,6 +16,13 @@
<!ENTITY torbutton.prefs.proxy.host.socks "SOCKS Host:">
<!ENTITY torbutton.prefs.proxy.port "Port:">
<!ENTITY torbutton.about.title "About Torbutton">
+<!ENTITY torbutton.about.version "Version:">
+<!ENTITY torbutton.about.summary "Protects the privacy of your Tor browsing.">
+<!ENTITY torbutton.about.code "Code Contributors:">
+<!ENTITY torbutton.about.maintainer "Maintainer:">
+<!ENTITY torbutton.about.security_review "Security Review:">
+<!ENTITY torbutton.about.donate "If you like using Tor, you might consider">
+<!ENTITY torbutton.about.make_donation "making a donation.">
<!ENTITY torbutton.pref_connection.notice "Disable Torbutton to change these settings.">
<!ENTITY torbutton.pref_connection.more_info "More information">
<!ENTITY torbutton.pref_connection_more_info.title "Help">
1
0
commit e34e4818a9665987cc95ab39ff92ec11de4940dc
Author: Mike Perry <mikeperry-git(a)fscked.org>
Date: Fri Jul 1 17:29:37 2011 -0700
Bump version.
---
src/install.rdf | 2 +-
1 files changed, 1 insertions(+), 1 deletions(-)
diff --git a/src/install.rdf b/src/install.rdf
index 0d4c9f7..f3451b6 100644
--- a/src/install.rdf
+++ b/src/install.rdf
@@ -6,7 +6,7 @@
<em:name>Torbutton</em:name>
<em:creator>Mike Perry & Kory Kirk</em:creator>
<em:id>{e0204bd5-9d31-402b-a99d-a6aa8ffebdca}</em:id>
- <em:version>1.4.0rc1-pre1</em:version>
+ <em:version>1.4.0</em:version>
<em:homepageURL>https://www.torproject.org/torbutton/</em:homepageURL>
<em:optionsURL>chrome://torbutton/content/preferences.xul</em:optionsURL>
<em:iconURL>chrome://torbutton/skin/tor.png</em:iconURL>
1
0