From ba7143acb9ff2d8a922af9c91a0cd4871996c658 Mon Sep 17 00:00:00 2001 From: Marcos Pinto Date: Sun, 28 Oct 2007 07:47:54 +0000 Subject: [PATCH] prepping for fix release --- ChangeLog | 6 +- TODO | 7 +- .../include/libtorrent/aux_/session_impl.hpp | 14 +- .../include/libtorrent/connection_queue.hpp | 1 + .../libtorrent/http_tracker_connection.hpp | 2 + .../include/libtorrent/piece_picker.hpp | 1 + .../include/libtorrent/session_settings.hpp | 6 + .../include/libtorrent/torrent_info.hpp | 4 +- .../include/libtorrent/tracker_manager.hpp | 2 +- .../libtorrent/udp_tracker_connection.hpp | 2 + libtorrent/include/libtorrent/upnp.hpp | 15 + .../include/libtorrent/variant_stream.hpp | 10 +- libtorrent/src/connection_queue.cpp | 5 + libtorrent/src/disk_io_thread.cpp | 4 + libtorrent/src/http_tracker_connection.cpp | 17 +- libtorrent/src/lsd.cpp | 1 + libtorrent/src/natpmp.cpp | 4 + libtorrent/src/peer_connection.cpp | 9 +- libtorrent/src/session_impl.cpp | 47 +- libtorrent/src/torrent.cpp | 4 +- libtorrent/src/tracker_manager.cpp | 29 +- libtorrent/src/udp_tracker_connection.cpp | 18 +- libtorrent/src/upnp.cpp | 99 +- plugins/TorrentCreator/__init__.py | 2 +- plugins/TorrentCreator/torrentcreator.glade | 14 +- plugins/WebUi/__init__.py | 63 +- plugins/WebUi/dbus_interface.py | 58 +- plugins/WebUi/deluge_webserver.py | 151 +- plugins/WebUi/revno | 2 +- plugins/WebUi/run_webserver | 4 +- .../WebUi/scripts/add_torrent_to_deluge_webui | 10 + .../static/images/tango/system-log-out.png | Bin 0 -> 799 bytes plugins/WebUi/static_handler.py | 136 ++ plugins/WebUi/templates/deluge/about.html | 5 +- plugins/WebUi/templates/deluge/config.html | 10 + plugins/WebUi/templates/deluge/index.html | 4 +- .../WebUi/templates/deluge/part_button.html | 10 +- .../WebUi/templates/deluge/part_stats.html | 30 + .../WebUi/templates/deluge/torrent_info.html | 5 +- plugins/WebUi/templates/example/footer.html | 3 + plugins/WebUi/templates/example/header.html | 12 + plugins/WebUi/templates/example/index.html | 42 + plugins/WebUi/version | 2 +- plugins/WebUi/webserver_common.py | 109 +- plugins/WebUi/webserver_framework.py | 247 +- po/POTFILES.in | 4 + po/deluge.pot | 254 +- po/eo.po | 2107 ++++++++++++++++ po/ka.po | 2146 +++++++++++++++++ po/si.po | 2105 ++++++++++++++++ po/vi.po | 2111 ++++++++++++++++ setup.py | 2 +- src/common.py | 2 +- src/deluge_core.cpp | 11 +- src/dgtk.py | 3 +- src/dialogs.py | 2 + src/interface.py | 12 +- 57 files changed, 9535 insertions(+), 450 deletions(-) create mode 100755 plugins/WebUi/scripts/add_torrent_to_deluge_webui create mode 100644 plugins/WebUi/static/images/tango/system-log-out.png create mode 100644 plugins/WebUi/static_handler.py create mode 100644 plugins/WebUi/templates/deluge/config.html create mode 100644 plugins/WebUi/templates/deluge/part_stats.html create mode 100644 plugins/WebUi/templates/example/footer.html create mode 100644 plugins/WebUi/templates/example/header.html create mode 100644 plugins/WebUi/templates/example/index.html create mode 100644 po/eo.po create mode 100644 po/ka.po create mode 100644 po/si.po create mode 100644 po/vi.po diff --git a/ChangeLog b/ChangeLog index 28174b62e..850ac6014 100644 --- a/ChangeLog +++ b/ChangeLog @@ -1,4 +1,8 @@ -Deluge 0.5.6 (xx October 2007) +Deluge 0.5.7 (xx November 2007) + * Set default piece size to 256-KiB in TorrentCreator plugin and add 2048KiB + as a size option. + +Deluge 0.5.6 (24 October 2007) * Web Interface Plugin * Hopefully fix "losing data" and having to re-download parts (for real this time :p) * Use new full allocation method which does not create files until one of its diff --git a/TODO b/TODO index 45f7850ef..4ac9f0bb9 100644 --- a/TODO +++ b/TODO @@ -1,2 +1,5 @@ -for 0.5.6 - 1. fix ratio saving +for 0.5.7 + 1. manual recheck + 2. preference for .torrent location + 3. have blocklist detect 7zip files and popup a warning instead of crashing + 4. add auto-pickup folder diff --git a/libtorrent/include/libtorrent/aux_/session_impl.hpp b/libtorrent/include/libtorrent/aux_/session_impl.hpp index bff8e3387..3f3607191 100644 --- a/libtorrent/include/libtorrent/aux_/session_impl.hpp +++ b/libtorrent/include/libtorrent/aux_/session_impl.hpp @@ -375,12 +375,6 @@ namespace libtorrent // buffers from. boost::pool<> m_send_buffers; - // this is where all active sockets are stored. - // the selector can sleep while there's no activity on - // them - io_service m_io_service; - asio::strand m_strand; - // the file pool that all storages in this session's // torrents uses. It sets a limit on the number of // open files by this session. @@ -395,6 +389,12 @@ namespace libtorrent // object. disk_io_thread m_disk_thread; + // this is where all active sockets are stored. + // the selector can sleep while there's no activity on + // them + io_service m_io_service; + asio::strand m_strand; + // this is a list of half-open tcp connections // (only outgoing connections) // this has to be one of the last @@ -646,7 +646,7 @@ namespace libtorrent void debug_log(const std::string& line) { - (*m_ses.m_logger) << line << "\n"; + (*m_ses.m_logger) << time_now_string() << " " << line << "\n"; } session_impl& m_ses; }; diff --git a/libtorrent/include/libtorrent/connection_queue.hpp b/libtorrent/include/libtorrent/connection_queue.hpp index b3b7cde86..c229ec217 100644 --- a/libtorrent/include/libtorrent/connection_queue.hpp +++ b/libtorrent/include/libtorrent/connection_queue.hpp @@ -56,6 +56,7 @@ public: void done(int ticket); void limit(int limit); int limit() const; + void close(); #ifndef NDEBUG diff --git a/libtorrent/include/libtorrent/http_tracker_connection.hpp b/libtorrent/include/libtorrent/http_tracker_connection.hpp index 5b618c876..c0057dfa1 100755 --- a/libtorrent/include/libtorrent/http_tracker_connection.hpp +++ b/libtorrent/include/libtorrent/http_tracker_connection.hpp @@ -130,6 +130,8 @@ namespace libtorrent , proxy_settings const& ps , std::string const& password = ""); + void close(); + private: boost::intrusive_ptr self() diff --git a/libtorrent/include/libtorrent/piece_picker.hpp b/libtorrent/include/libtorrent/piece_picker.hpp index 2c62e5d8b..ef69c3334 100755 --- a/libtorrent/include/libtorrent/piece_picker.hpp +++ b/libtorrent/include/libtorrent/piece_picker.hpp @@ -357,6 +357,7 @@ namespace libtorrent // the different priority levels switch (piece_priority) { + case 1: return prio; case 2: return prio - 1; case 3: return (std::max)(prio / 2, 1); case 4: return (std::max)(prio / 2 - 1, 1); diff --git a/libtorrent/include/libtorrent/session_settings.hpp b/libtorrent/include/libtorrent/session_settings.hpp index 8d57b27ec..7b08ec11e 100644 --- a/libtorrent/include/libtorrent/session_settings.hpp +++ b/libtorrent/include/libtorrent/session_settings.hpp @@ -111,6 +111,7 @@ namespace libtorrent , initial_picker_threshold(4) , allowed_fast_set_size(10) , max_outstanding_disk_bytes_per_connection(64 * 1024) + , handshake_timeout(10) #ifndef TORRENT_DISABLE_DHT , use_dht_as_fallback(true) #endif @@ -270,6 +271,11 @@ namespace libtorrent // to not completely disrupt normal downloads. int max_outstanding_disk_bytes_per_connection; + // the number of seconds to wait for a handshake + // response from a peer. If no response is received + // within this time, the peer is disconnected. + int handshake_timeout; + #ifndef TORRENT_DISABLE_DHT // while this is true, the dht will note be used unless the // tracker is online diff --git a/libtorrent/include/libtorrent/torrent_info.hpp b/libtorrent/include/libtorrent/torrent_info.hpp index 89744d0af..16eebf234 100755 --- a/libtorrent/include/libtorrent/torrent_info.hpp +++ b/libtorrent/include/libtorrent/torrent_info.hpp @@ -240,8 +240,8 @@ namespace libtorrent void parse_info_section(entry const& e); - entry extra(char const* key) const - { return m_extra_info[key]; } + entry const* extra(char const* key) const + { return m_extra_info.find_key(key); } // frees parts of the metadata that isn't // used by seeds diff --git a/libtorrent/include/libtorrent/tracker_manager.hpp b/libtorrent/include/libtorrent/tracker_manager.hpp index 07c377a0f..2c9ceeaef 100755 --- a/libtorrent/include/libtorrent/tracker_manager.hpp +++ b/libtorrent/include/libtorrent/tracker_manager.hpp @@ -202,7 +202,7 @@ namespace libtorrent void fail(int code, char const* msg); void fail_timeout(); - void close(); + virtual void close(); address const& bind_interface() const { return m_bind_interface; } protected: diff --git a/libtorrent/include/libtorrent/udp_tracker_connection.hpp b/libtorrent/include/libtorrent/udp_tracker_connection.hpp index e5eadc144..4fba505a4 100755 --- a/libtorrent/include/libtorrent/udp_tracker_connection.hpp +++ b/libtorrent/include/libtorrent/udp_tracker_connection.hpp @@ -74,6 +74,8 @@ namespace libtorrent , boost::weak_ptr c , session_settings const& stn); + void close(); + private: enum action_t diff --git a/libtorrent/include/libtorrent/upnp.hpp b/libtorrent/include/libtorrent/upnp.hpp index 2c819df5f..0b799d1e9 100644 --- a/libtorrent/include/libtorrent/upnp.hpp +++ b/libtorrent/include/libtorrent/upnp.hpp @@ -148,7 +148,18 @@ private: { mapping[0].protocol = 0; mapping[1].protocol = 1; +#ifndef NDEBUG + magic = 1337; +#endif } + +#ifndef NDEBUG + ~rootdevice() + { + TORRENT_ASSERT(magic == 1337); + magic = 0; + } +#endif // the interface url, through which the list of // supported interfaces are fetched @@ -174,8 +185,12 @@ private: mutable boost::shared_ptr upnp_connection; +#ifndef NDEBUG + int magic; +#endif void close() const { + TORRENT_ASSERT(magic == 1337); if (!upnp_connection) return; upnp_connection->close(); upnp_connection.reset(); diff --git a/libtorrent/include/libtorrent/variant_stream.hpp b/libtorrent/include/libtorrent/variant_stream.hpp index ea8373d4b..bbe3d964d 100644 --- a/libtorrent/include/libtorrent/variant_stream.hpp +++ b/libtorrent/include/libtorrent/variant_stream.hpp @@ -48,8 +48,8 @@ namespace aux template struct io_control_visitor_ec: boost::static_visitor<> { - io_control_visitor_ec(IO_Control_Command& ioc, asio::error_code& ec) - : ioc(ioc), ec(ec) {} + io_control_visitor_ec(IO_Control_Command& ioc, asio::error_code& ec_) + : ioc(ioc), ec(ec_) {} template void operator()(T* p) const @@ -188,7 +188,7 @@ namespace aux : boost::static_visitor<> { close_visitor_ec(asio::error_code& ec_) - : ec(ec) + : ec(ec_) {} template @@ -329,9 +329,9 @@ namespace aux struct read_some_visitor_ec : boost::static_visitor { - read_some_visitor_ec(Mutable_Buffers const& buffers, asio::error_code& ec) + read_some_visitor_ec(Mutable_Buffers const& buffers, asio::error_code& ec_) : buffers(buffers) - , ec(ec) + , ec(ec_) {} template diff --git a/libtorrent/src/connection_queue.cpp b/libtorrent/src/connection_queue.cpp index 1caeb99fc..c204b5a34 100644 --- a/libtorrent/src/connection_queue.cpp +++ b/libtorrent/src/connection_queue.cpp @@ -86,6 +86,11 @@ namespace libtorrent try_connect(); } + void connection_queue::close() + { + m_timer.cancel(); + } + void connection_queue::limit(int limit) { m_half_open_limit = limit; } diff --git a/libtorrent/src/disk_io_thread.cpp b/libtorrent/src/disk_io_thread.cpp index 1bec3b76b..ec5b8d8da 100644 --- a/libtorrent/src/disk_io_thread.cpp +++ b/libtorrent/src/disk_io_thread.cpp @@ -341,6 +341,10 @@ namespace libtorrent // else std::cerr << "DISK THREAD: invoking callback" << std::endl; try { if (handler) handler(ret, j); } catch (std::exception&) {} + +#ifndef NDEBUG + m_current.storage = 0; +#endif if (j.buffer && free_buffer) { diff --git a/libtorrent/src/http_tracker_connection.cpp b/libtorrent/src/http_tracker_connection.cpp index ccca58226..a5c542b44 100755 --- a/libtorrent/src/http_tracker_connection.cpp +++ b/libtorrent/src/http_tracker_connection.cpp @@ -489,7 +489,9 @@ namespace libtorrent , boost::lexical_cast(m_port)); m_name_lookup.async_resolve(q, m_strand.wrap( boost::bind(&http_tracker_connection::name_lookup, self(), _1, _2))); - set_timeout(m_settings.tracker_completion_timeout + set_timeout(req.event == tracker_request::stopped + ? m_settings.stop_tracker_timeout + : m_settings.tracker_completion_timeout , m_settings.tracker_receive_timeout); } @@ -503,6 +505,17 @@ namespace libtorrent fail_timeout(); } + void http_tracker_connection::close() + { + asio::error_code ec; + m_socket.close(ec); + m_name_lookup.cancel(); + if (m_connection_ticket > -1) m_cc.done(m_connection_ticket); + m_connection_ticket = -1; + m_timed_out = true; + tracker_connection::close(); + } + void http_tracker_connection::name_lookup(asio::error_code const& error , tcp::resolver::iterator i) try { @@ -759,7 +772,6 @@ namespace libtorrent if (m_parser.status_code() != 200) { fail(m_parser.status_code(), m_parser.message().c_str()); - close(); return; } @@ -821,6 +833,7 @@ namespace libtorrent TORRENT_ASSERT(false); } #endif + close(); } peer_entry http_tracker_connection::extract_peer_info(const entry& info) diff --git a/libtorrent/src/lsd.cpp b/libtorrent/src/lsd.cpp index 44d7b19d4..6e1dcb7b3 100644 --- a/libtorrent/src/lsd.cpp +++ b/libtorrent/src/lsd.cpp @@ -184,5 +184,6 @@ void lsd::on_announce(udp::endpoint const& from, char* buffer void lsd::close() { m_socket.close(); + m_broadcast_timer.cancel(); } diff --git a/libtorrent/src/natpmp.cpp b/libtorrent/src/natpmp.cpp index 42cf89e37..38319d18f 100644 --- a/libtorrent/src/natpmp.cpp +++ b/libtorrent/src/natpmp.cpp @@ -382,6 +382,8 @@ void natpmp::try_next_mapping(int i) void natpmp::close() { + asio::error_code ec; + m_socket.close(ec); if (m_disabled) return; for (int i = 0; i < num_mappings; ++i) { @@ -390,5 +392,7 @@ void natpmp::close() m_mappings[i].external_port = 0; refresh_mapping(i); } + m_refresh_timer.cancel(); + m_send_timer.cancel(); } diff --git a/libtorrent/src/peer_connection.cpp b/libtorrent/src/peer_connection.cpp index 2032b54c5..5def3438d 100755 --- a/libtorrent/src/peer_connection.cpp +++ b/libtorrent/src/peer_connection.cpp @@ -3000,13 +3000,12 @@ namespace libtorrent return true; } - // if it takes more than 5 seconds to receive - // handshake, disconnect - if (in_handshake() && d > seconds(5)) + // do not stall waiting for a handshake + if (in_handshake() && d > seconds(m_ses.settings().handshake_timeout)) { #ifdef TORRENT_VERBOSE_LOGGING - (*m_logger) << time_now_string() << " *** NO HANDSHAKE [ " - << total_seconds(d) << " seconds ago ] ***\n"; + (*m_logger) << time_now_string() << " *** NO HANDSHAKE [ waited " + << total_seconds(d) << " seconds ] ***\n"; #endif return true; } diff --git a/libtorrent/src/session_impl.cpp b/libtorrent/src/session_impl.cpp index 299ba96a7..12b95562b 100755 --- a/libtorrent/src/session_impl.cpp +++ b/libtorrent/src/session_impl.cpp @@ -547,8 +547,8 @@ namespace detail , fingerprint const& cl_fprint , char const* listen_interface) : m_send_buffers(send_buffer_size) - , m_strand(m_io_service) , m_files(40) + , m_strand(m_io_service) , m_half_open(m_io_service) , m_download_channel(m_io_service, peer_connection::download_channel) , m_upload_channel(m_io_service, peer_connection::upload_channel) @@ -675,6 +675,14 @@ namespace detail if (m_dht) m_dht->stop(); #endif m_timer.cancel(); + + // close the listen sockets + for (std::list::iterator i = m_listen_sockets.begin() + , end(m_listen_sockets.end()); i != end; ++i) + { + i->sock->close(); + } + // abort all torrents for (torrent_map::iterator i = m_torrents.begin() , end(m_torrents.end()); i != end; ++i) @@ -682,7 +690,15 @@ namespace detail i->second->abort(); } - m_io_service.stop(); +#if defined(TORRENT_VERBOSE_LOGGING) || defined(TORRENT_LOGGING) + (*m_logger) << time_now_string() << " aborting all tracker requests\n"; +#endif + m_tracker_manager.abort_all_requests(); + +#if defined(TORRENT_VERBOSE_LOGGING) || defined(TORRENT_LOGGING) + (*m_logger) << time_now_string() << " shutting down connection queue\n"; +#endif + m_half_open.close(); mutex::scoped_lock l2(m_checker_impl.m_mutex); // abort the checker thread @@ -977,6 +993,17 @@ namespace detail return; } + // don't allow more connections than the max setting + if (m_connections.size() > max_connections()) + { +#if defined(TORRENT_VERBOSE_LOGGING) || defined(TORRENT_LOGGING) + (*m_logger) << "number of connections limit exceeded (conns: " + << num_connections() << ", limit: " << max_connections() + << "), connection rejected\n"; +#endif + return; + } + // check if we have any active torrents // if we don't reject the connection if (m_torrents.empty()) return; @@ -1474,20 +1501,12 @@ namespace detail while (!m_abort); deadline_timer tracker_timer(m_io_service); - // this will remove the port mappings - if (m_natpmp.get()) - m_natpmp->close(); - if (m_upnp.get()) - m_upnp->close(); #if defined(TORRENT_VERBOSE_LOGGING) || defined(TORRENT_LOGGING) (*m_logger) << time_now_string() << " locking mutex\n"; #endif session_impl::mutex_t::scoped_lock l(m_mutex); -#if defined(TORRENT_VERBOSE_LOGGING) || defined(TORRENT_LOGGING) - (*m_logger) << time_now_string() << " aborting all tracker requests\n"; -#endif m_tracker_manager.abort_all_requests(); #if defined(TORRENT_VERBOSE_LOGGING) || defined(TORRENT_LOGGING) (*m_logger) << time_now_string() << " sending stopped to all torrent's trackers\n"; @@ -2127,16 +2146,10 @@ namespace detail session_impl::~session_impl() { - abort(); - #if defined(TORRENT_VERBOSE_LOGGING) || defined(TORRENT_LOGGING) (*m_logger) << time_now_string() << "\n\n *** shutting down session *** \n\n"; #endif - // lock the main thread and abort it - mutex_t::scoped_lock l(m_mutex); - m_abort = true; - m_io_service.stop(); - l.unlock(); + abort(); #if defined(TORRENT_VERBOSE_LOGGING) || defined(TORRENT_LOGGING) (*m_logger) << time_now_string() << " waiting for main thread\n"; diff --git a/libtorrent/src/torrent.cpp b/libtorrent/src/torrent.cpp index d14b3075d..6f764ed64 100755 --- a/libtorrent/src/torrent.cpp +++ b/libtorrent/src/torrent.cpp @@ -1526,7 +1526,7 @@ namespace libtorrent INVARIANT_CHECK; #if defined(TORRENT_VERBOSE_LOGGING) || defined(TORRENT_LOGGING) - (*m_ses.m_logger) << time_now_string() << " resolving: " << url << "\n"; + (*m_ses.m_logger) << time_now_string() << " resolving web seed: " << url << "\n"; #endif m_resolving_web_seeds.insert(url); @@ -3055,7 +3055,7 @@ namespace libtorrent #if defined(TORRENT_VERBOSE_LOGGING) || defined(TORRENT_LOGGING) void torrent::debug_log(const std::string& line) { - (*m_ses.m_logger) << line << "\n"; + (*m_ses.m_logger) << time_now_string() << " " << line << "\n"; } #endif diff --git a/libtorrent/src/tracker_manager.cpp b/libtorrent/src/tracker_manager.cpp index 0118e5802..5ce539d9e 100755 --- a/libtorrent/src/tracker_manager.cpp +++ b/libtorrent/src/tracker_manager.cpp @@ -302,12 +302,12 @@ namespace libtorrent { m_completion_timeout = completion_timeout; m_read_timeout = read_timeout; - m_start_time = time_now(); - m_read_time = time_now(); + m_start_time = m_read_time = time_now(); m_timeout.expires_at((std::min)( m_read_time + seconds(m_read_timeout) - , m_start_time + seconds(m_completion_timeout))); + , m_start_time + seconds((std::min)(m_completion_timeout + , m_read_timeout)))); m_timeout.async_wait(m_strand.wrap(bind( &timeout_handler::timeout_callback, self(), _1))); } @@ -343,7 +343,8 @@ namespace libtorrent m_timeout.expires_at((std::min)( m_read_time + seconds(m_read_timeout) - , m_start_time + seconds(m_completion_timeout))); + , m_start_time + seconds((std::min)(m_completion_timeout + , m_read_timeout)))); m_timeout.async_wait(m_strand.wrap( bind(&timeout_handler::timeout_callback, self(), _1))); } @@ -567,12 +568,24 @@ namespace libtorrent m_abort = true; tracker_connections_t keep_connections; - for (tracker_connections_t::const_iterator i = - m_connections.begin(); i != m_connections.end(); ++i) + while (!m_connections.empty()) { - tracker_request const& req = (*i)->tracker_req(); + boost::intrusive_ptr& c = m_connections.back(); + if (!c) + { + m_connections.pop_back(); + continue; + } + tracker_request const& req = c->tracker_req(); if (req.event == tracker_request::stopped) - keep_connections.push_back(*i); + { + keep_connections.push_back(c); + m_connections.pop_back(); + continue; + } + // close will remove the entry from m_connections + // so no need to pop + c->close(); } std::swap(m_connections, keep_connections); diff --git a/libtorrent/src/udp_tracker_connection.cpp b/libtorrent/src/udp_tracker_connection.cpp index dd2ff10a1..6d76988d3 100755 --- a/libtorrent/src/udp_tracker_connection.cpp +++ b/libtorrent/src/udp_tracker_connection.cpp @@ -96,7 +96,9 @@ namespace libtorrent m_name_lookup.async_resolve(q , m_strand.wrap(boost::bind( &udp_tracker_connection::name_lookup, self(), _1, _2))); - set_timeout(m_settings.tracker_completion_timeout + set_timeout(req.event == tracker_request::stopped + ? m_settings.stop_tracker_timeout + : m_settings.tracker_completion_timeout , m_settings.tracker_receive_timeout); } @@ -156,11 +158,20 @@ namespace libtorrent void udp_tracker_connection::on_timeout() { - m_socket.close(); + asio::error_code ec; + m_socket.close(ec); m_name_lookup.cancel(); fail_timeout(); } + void udp_tracker_connection::close() + { + asio::error_code ec; + m_socket.close(ec); + m_name_lookup.cancel(); + tracker_connection::close(); + } + void udp_tracker_connection::send_udp_connect() { #if defined(TORRENT_VERBOSE_LOGGING) || defined(TORRENT_LOGGING) @@ -468,6 +479,7 @@ namespace libtorrent , complete, incomplete); m_man.remove_request(this); + close(); return; } catch (std::exception& e) @@ -543,6 +555,7 @@ namespace libtorrent if (!cb) { m_man.remove_request(this); + close(); return; } @@ -551,6 +564,7 @@ namespace libtorrent , complete, incomplete); m_man.remove_request(this); + close(); } catch (std::exception& e) { diff --git a/libtorrent/src/upnp.cpp b/libtorrent/src/upnp.cpp index 4bdc20987..116eb1dfe 100644 --- a/libtorrent/src/upnp.cpp +++ b/libtorrent/src/upnp.cpp @@ -148,6 +148,7 @@ void upnp::set_mappings(int tcp, int udp) , end(m_devices.end()); i != end; ++i) { rootdevice& d = const_cast(*i); + TORRENT_ASSERT(d.magic == 1337); if (d.mapping[0].local_port != m_tcp_local_port) { if (d.mapping[0].external_port == 0) @@ -200,8 +201,13 @@ try // we don't have a WANIP or WANPPP url for this device, // ask for it rootdevice& d = const_cast(*i); + TORRENT_ASSERT(d.magic == 1337); try { +#ifdef TORRENT_UPNP_LOGGING + m_log << time_now_string() + << " ==> connecting to " << d.url << std::endl; +#endif d.upnp_connection.reset(new http_connection(m_io_service , m_cc, m_strand.wrap(bind(&upnp::on_upnp_xml, self(), _1, _2 , boost::ref(d))))); @@ -270,7 +276,7 @@ try { #ifdef TORRENT_UPNP_LOGGING m_log << time_now_string() - << " <== Rootdevice responded with incorrect HTTP packet. Ignoring device (" << e.what() << ")" << std::endl; + << " <== (" << from << ") Rootdevice responded with incorrect HTTP packet. Ignoring device (" << e.what() << ")" << std::endl; #endif return; } @@ -280,11 +286,11 @@ try #ifdef TORRENT_UPNP_LOGGING if (p.method().empty()) m_log << time_now_string() - << " <== Device responded with HTTP status: " << p.status_code() + << " <== (" << from << ") Device responded with HTTP status: " << p.status_code() << ". Ignoring device" << std::endl; else m_log << time_now_string() - << " <== Device with HTTP method: " << p.method() + << " <== (" << from << ") Device with HTTP method: " << p.method() << ". Ignoring device" << std::endl; #endif return; @@ -294,7 +300,7 @@ try { #ifdef TORRENT_UPNP_LOGGING m_log << time_now_string() - << " <== Rootdevice responded with incomplete HTTP " + << " <== (" << from << ") Rootdevice responded with incomplete HTTP " "packet. Ignoring device" << std::endl; #endif return; @@ -305,7 +311,7 @@ try { #ifdef TORRENT_UPNP_LOGGING m_log << time_now_string() - << " <== Rootdevice response is missing a location header. " + << " <== (" << from << ") Rootdevice response is missing a location header. " "Ignoring device" << std::endl; #endif return; @@ -332,7 +338,7 @@ try { #ifdef TORRENT_UPNP_LOGGING m_log << time_now_string() - << " <== Rootdevice uses unsupported protocol: '" << protocol + << " <== (" << from << ") Rootdevice uses unsupported protocol: '" << protocol << "'. Ignoring device" << std::endl; #endif return; @@ -342,16 +348,27 @@ try { #ifdef TORRENT_UPNP_LOGGING m_log << time_now_string() - << " <== Rootdevice responded with a url with port 0. " + << " <== (" << from << ") Rootdevice responded with a url with port 0. " "Ignoring device" << std::endl; #endif return; } #ifdef TORRENT_UPNP_LOGGING m_log << time_now_string() - << " <== Found rootdevice: " << d.url << std::endl; + << " <== (" << from << ") Found rootdevice: " << d.url + << " total: " << m_devices.size() << std::endl; #endif + if (m_devices.size() >= 50) + { +#ifdef TORRENT_UPNP_LOGGING + m_log << time_now_string() + << " <== (" << from << ") Too many devices (" << m_devices.size() << "), " + "ignoring: " << d.url << std::endl; +#endif + return; + } + if (m_tcp_local_port != 0) { d.mapping[0].need_update = true; @@ -390,8 +407,13 @@ try // we don't have a WANIP or WANPPP url for this device, // ask for it rootdevice& d = const_cast(*i); + TORRENT_ASSERT(d.magic == 1337); try { +#ifdef TORRENT_UPNP_LOGGING + m_log << time_now_string() + << " ==> connecting to " << d.url << std::endl; +#endif d.upnp_connection.reset(new http_connection(m_io_service , m_cc, m_strand.wrap(bind(&upnp::on_upnp_xml, self(), _1, _2 , boost::ref(d))))); @@ -420,6 +442,7 @@ catch (std::exception&) void upnp::post(upnp::rootdevice const& d, std::string const& soap , std::string const& soap_action) { + TORRENT_ASSERT(d.magic == 1337); std::stringstream header; header << "POST " << d.control_url << " HTTP/1.1\r\n" @@ -439,6 +462,7 @@ void upnp::post(upnp::rootdevice const& d, std::string const& soap void upnp::create_port_mapping(http_connection& c, rootdevice& d, int i) { + TORRENT_ASSERT(d.magic == 1337); std::string soap_action = "AddPortMapping"; std::stringstream soap; @@ -463,6 +487,7 @@ void upnp::create_port_mapping(http_connection& c, rootdevice& d, int i) void upnp::map_port(rootdevice& d, int i) { + TORRENT_ASSERT(d.magic == 1337); if (d.upnp_connection) return; if (!d.mapping[i].need_update) @@ -479,6 +504,10 @@ void upnp::map_port(rootdevice& d, int i) TORRENT_ASSERT(!d.upnp_connection); TORRENT_ASSERT(d.service_namespace); +#ifdef TORRENT_UPNP_LOGGING + m_log << time_now_string() + << " ==> connecting to " << d.hostname << std::endl; +#endif d.upnp_connection.reset(new http_connection(m_io_service , m_cc, m_strand.wrap(bind(&upnp::on_upnp_map_response, self(), _1, _2 , boost::ref(d), i)), true @@ -490,6 +519,7 @@ void upnp::map_port(rootdevice& d, int i) void upnp::delete_port_mapping(rootdevice& d, int i) { + TORRENT_ASSERT(d.magic == 1337); std::stringstream soap; std::string soap_action = "DeletePortMapping"; @@ -510,23 +540,24 @@ void upnp::delete_port_mapping(rootdevice& d, int i) // requires the mutex to be locked void upnp::unmap_port(rootdevice& d, int i) { - if (d.mapping[i].external_port == 0) + TORRENT_ASSERT(d.magic == 1337); + if (d.mapping[i].external_port == 0 + || d.disabled) { if (i < num_mappings - 1) { unmap_port(d, i + 1); } - else - { - m_devices.erase(d); - } return; } +#ifdef TORRENT_UPNP_LOGGING + m_log << time_now_string() + << " ==> connecting to " << d.hostname << std::endl; +#endif d.upnp_connection.reset(new http_connection(m_io_service , m_cc, m_strand.wrap(bind(&upnp::on_upnp_unmap_response, self(), _1, _2 , boost::ref(d), i)), true , bind(&upnp::delete_port_mapping, self(), boost::ref(d), i))); - d.upnp_connection->start(d.hostname, boost::lexical_cast(d.port) , seconds(10)); } @@ -591,6 +622,7 @@ namespace void upnp::on_upnp_xml(asio::error_code const& e , libtorrent::http_parser const& p, rootdevice& d) try { + TORRENT_ASSERT(d.magic == 1337); if (d.upnp_connection) { d.upnp_connection->close(); @@ -601,8 +633,10 @@ void upnp::on_upnp_xml(asio::error_code const& e { #ifdef TORRENT_UPNP_LOGGING m_log << time_now_string() - << " <== error while fetching control url: " << e.message() << std::endl; + << " <== (" << d.url << ") error while fetching control url: " + << e.message() << std::endl; #endif + d.disabled = true; return; } @@ -610,8 +644,9 @@ void upnp::on_upnp_xml(asio::error_code const& e { #ifdef TORRENT_UPNP_LOGGING m_log << time_now_string() - << " <== error while fetching control url: incomplete http message" << std::endl; + << " <== (" << d.url << ") error while fetching control url: incomplete http message" << std::endl; #endif + d.disabled = true; return; } @@ -619,8 +654,9 @@ void upnp::on_upnp_xml(asio::error_code const& e { #ifdef TORRENT_UPNP_LOGGING m_log << time_now_string() - << " <== error while fetching control url: " << p.message() << std::endl; + << " <== (" << d.url << ") error while fetching control url: " << p.message() << std::endl; #endif + d.disabled = true; return; } @@ -647,15 +683,17 @@ void upnp::on_upnp_xml(asio::error_code const& e { #ifdef TORRENT_UPNP_LOGGING m_log << time_now_string() - << " <== Rootdevice response, did not find a port mapping interface" << std::endl; + << " <== (" << d.url << ") Rootdevice response, did not find " + "a port mapping interface" << std::endl; #endif + d.disabled = true; return; } } #ifdef TORRENT_UPNP_LOGGING m_log << time_now_string() - << " <== Rootdevice response, found control URL: " << s.control_url + << " <== (" << d.url << ") Rootdevice response, found control URL: " << s.control_url << " namespace: " << d.service_namespace << std::endl; #endif @@ -732,6 +770,7 @@ namespace void upnp::on_upnp_map_response(asio::error_code const& e , libtorrent::http_parser const& p, rootdevice& d, int mapping) try { + TORRENT_ASSERT(d.magic == 1337); if (d.upnp_connection) { d.upnp_connection->close(); @@ -744,7 +783,7 @@ void upnp::on_upnp_map_response(asio::error_code const& e m_log << time_now_string() << " <== error while adding portmap: " << e.message() << std::endl; #endif - m_devices.erase(d); + d.disabled = true; return; } @@ -773,7 +812,7 @@ void upnp::on_upnp_map_response(asio::error_code const& e m_log << time_now_string() << " <== error while adding portmap: incomplete http message" << std::endl; #endif - m_devices.erase(d); + d.disabled = true; return; } @@ -877,6 +916,7 @@ catch (std::exception&) void upnp::on_upnp_unmap_response(asio::error_code const& e , libtorrent::http_parser const& p, rootdevice& d, int mapping) try { + TORRENT_ASSERT(d.magic == 1337); if (d.upnp_connection) { d.upnp_connection->close(); @@ -906,7 +946,7 @@ void upnp::on_upnp_unmap_response(asio::error_code const& e m_log << time_now_string() << " <== error while deleting portmap: " << p.message() << std::endl; #endif - m_devices.erase(d); + d.disabled = true; return; } @@ -922,10 +962,6 @@ void upnp::on_upnp_unmap_response(asio::error_code const& e unmap_port(d, mapping + 1); return; } - - // the main thread is likely to be waiting for - // all the unmap operations to complete - m_devices.erase(d); } catch (std::exception&) { @@ -943,6 +979,7 @@ void upnp::on_expire(asio::error_code const& e) try , end(m_devices.end()); i != end; ++i) { rootdevice& d = const_cast(*i); + TORRENT_ASSERT(d.magic == 1337); for (int m = 0; m < num_mappings; ++m) { if (d.mapping[m].expires != max_time()) @@ -984,15 +1021,11 @@ void upnp::close() } for (std::set::iterator i = m_devices.begin() - , end(m_devices.end()); i != end;) + , end(m_devices.end()); i != end; ++i) { rootdevice& d = const_cast(*i); - if (d.control_url.empty()) - { - m_devices.erase(i++); - continue; - } - ++i; + TORRENT_ASSERT(d.magic == 1337); + if (d.control_url.empty()) continue; unmap_port(d, 0); } } diff --git a/plugins/TorrentCreator/__init__.py b/plugins/TorrentCreator/__init__.py index 30703b952..9783f05b8 100644 --- a/plugins/TorrentCreator/__init__.py +++ b/plugins/TorrentCreator/__init__.py @@ -82,7 +82,7 @@ class TorrentCreator: self.glade = gtk.glade.XML(self.path + "/torrentcreator.glade") self.dialog = self.glade.get_widget("torrentcreator") - self.glade.get_widget("piece_size_combobox").set_active(0) + self.glade.get_widget("piece_size_combobox").set_active(3) self.glade.get_widget("torrent_chooserbutton").connect("clicked", self.torrent_chooserbutton_clicked) self.glade.get_widget("ok_button").connect("clicked", self.create_torrent) self.glade.get_widget("close_button").connect("clicked", self.destroy) diff --git a/plugins/TorrentCreator/torrentcreator.glade b/plugins/TorrentCreator/torrentcreator.glade index 37afcbd3d..b329a8186 100644 --- a/plugins/TorrentCreator/torrentcreator.glade +++ b/plugins/TorrentCreator/torrentcreator.glade @@ -1,6 +1,6 @@ - + GDK_POINTER_MOTION_MASK | GDK_POINTER_MOTION_HINT_MASK | GDK_BUTTON_PRESS_MASK | GDK_BUTTON_RELEASE_MASK @@ -54,7 +54,6 @@ True GDK_POINTER_MOTION_MASK | GDK_POINTER_MOTION_HINT_MASK | GDK_BUTTON_PRESS_MASK | GDK_BUTTON_RELEASE_MASK - 0 GTK_SHADOW_NONE @@ -151,7 +150,6 @@ True GDK_POINTER_MOTION_MASK | GDK_POINTER_MOTION_HINT_MASK | GDK_BUTTON_PRESS_MASK | GDK_BUTTON_RELEASE_MASK - 0 GTK_SHADOW_NONE @@ -271,7 +269,6 @@ True GDK_POINTER_MOTION_MASK | GDK_POINTER_MOTION_HINT_MASK | GDK_BUTTON_PRESS_MASK | GDK_BUTTON_RELEASE_MASK - 0 GTK_SHADOW_NONE @@ -318,7 +315,6 @@ True GDK_POINTER_MOTION_MASK | GDK_POINTER_MOTION_HINT_MASK | GDK_BUTTON_PRESS_MASK | GDK_BUTTON_RELEASE_MASK - 0 GTK_SHADOW_NONE @@ -365,7 +361,6 @@ True GDK_POINTER_MOTION_MASK | GDK_POINTER_MOTION_HINT_MASK | GDK_BUTTON_PRESS_MASK | GDK_BUTTON_RELEASE_MASK - 0 GTK_SHADOW_NONE @@ -417,6 +412,9 @@ 2 2 10 + + + True @@ -431,9 +429,6 @@ 2 - - - True @@ -445,6 +440,7 @@ 256 KiB 512 KiB 1024 KiB +2048 KiB diff --git a/plugins/WebUi/__init__.py b/plugins/WebUi/__init__.py index a4b3aa69e..497fe5f0b 100644 --- a/plugins/WebUi/__init__.py +++ b/plugins/WebUi/__init__.py @@ -28,10 +28,10 @@ # but you are not obligated to do so. If you do not wish to do so, delete # this exception statement from your version. If you delete this exception -plugin_name = "Web User Interface" +plugin_name = _("Web User Interface") plugin_author = "Martijn Voncken" plugin_version = "rev." -plugin_description = """A Web based User Interface +plugin_description = _("""A Web based User Interface Firefox greasemonkey script: http://userscripts.org/scripts/show/12639 @@ -41,8 +41,8 @@ There is support for multiple templates, but just one is included. Other contributors: *somedude : template enhancements. - -""" +*markybob : stability : synced with his changes in deluge-svn. +""") import deluge.common import deluge.pref @@ -80,9 +80,10 @@ class plugin_WebUi(object): self.web_server = None if not deluge.common.windows_check(): import commands - status = commands.getstatusoutput('ps x |grep -v grep |grep run_webserver') + status = commands.getstatusoutput( + 'ps x |grep -v grep |grep run_webserver') if status[0] == 0: - os.kill(status[1].split()[0], 9) + os.kill(int(status[1].split()[0]), 9) time.sleep(1) #safe time to wait for kill to finish. self.config_file = deluge.common.CONFIG_DIR + "/webui.conf" self.config = deluge.pref.Preferences(self.config_file, False) @@ -95,9 +96,6 @@ class plugin_WebUi(object): if not self.config.get('port'): #ugly way to detect new config file. #set default values: self.config.set("port", 8112) - #future->use deluge-core setting for download_dir (if it is set) - self.config.set("download_dir", os.path.expanduser("~")) - self.config.set("torrent_dir", os.path.expanduser("~")) self.config.set("button_style", 2) self.config.set("auto_refresh", False) self.config.set("auto_refresh_secs", 4) @@ -112,11 +110,9 @@ class plugin_WebUi(object): self.config.set("cache_templates", True) if deluge.common.windows_check(): - if self.config.get("run_in_thread") == None: - self.config.set("run_in_thread", True) + self.config.set("run_in_thread", True) else: - if self.config.get("run_in_thread") == None: - self.config.set("run_in_thread", False) + self.config.set("run_in_thread", False) self.dbus_manager = get_dbus_manager(deluge_core, deluge_interface, self.config, self.config_file) @@ -141,8 +137,8 @@ class plugin_WebUi(object): self.kill_server() if self.config.get("run_in_thread"): - print 'start Webui(inside gtk)..' - webserver_common.init() #reload changed config. + print 'Start Webui(inside gtk)..' + webserver_common.init_gtk_05() #reload changed config. from deluge_webserver import WebServer #only import in threaded mode @@ -150,11 +146,9 @@ class plugin_WebUi(object): self.web_server.start_gtk() else: - print 'start Webui(in process)..' - path = os.path.dirname(__file__) - server_bin = path + '/run_webserver' - port = str(self.config.get('port')) - self.proc = Popen((server_bin, port),cwd=path) + print 'Start Webui(in process)..' + server_bin = os.path.dirname(__file__) + '/run_webserver' + self.proc = Popen((server_bin,'env=0.5')) def kill_server(self): if self.web_server: @@ -187,7 +181,8 @@ class ConfigDialog(gtk.Dialog): template_path = os.path.join(os.path.dirname(__file__), 'templates') self.templates = [dirname for dirname in os.listdir(template_path) - if os.path.isdir(os.path.join(template_path, dirname))] + if os.path.isdir(os.path.join(template_path, dirname)) + and not dirname.startswith('.')] self.port = self.add_widget(_('Port Number'), gtk.SpinButton()) self.pwd1 = self.add_widget(_('New Password'), gtk.Entry()) @@ -195,16 +190,11 @@ class ConfigDialog(gtk.Dialog): self.template = self.add_widget(_('Template'), gtk.combo_box_new_text()) self.button_style = self.add_widget(_('Button Style'), gtk.combo_box_new_text()) - self.download_dir = self.add_widget(_('Download Directory'), - gtk.FileChooserButton(_('Download Directory'))) - self.torrent_dir = self.add_widget(_('Torrent Directory'), - gtk.FileChooserButton(_('Torrent Directory'))) self.cache_templates = self.add_widget(_('Cache Templates'), gtk.CheckButton()) - self.run_in_thread = self.add_widget(_('Run inside GTK'), gtk.CheckButton()) + #self.share_downloads = self.add_widget(_('Share Download Directory'), + # gtk.CheckButton()) - self.download_dir.set_action(gtk.FILE_CHOOSER_ACTION_SELECT_FOLDER) - self.torrent_dir.set_action(gtk.FILE_CHOOSER_ACTION_SELECT_FOLDER) self.port.set_range(80, 65536) self.port.set_increments(1, 10) self.pwd1.set_visibility(False) @@ -218,23 +208,16 @@ class ConfigDialog(gtk.Dialog): for item in [_('Text and image'), _('Image Only'), _('Text Only')]: self.button_style.append_text(item) - if not self.config.get("button_style"): + if self.config.get("button_style") == None: self.config.set("button_style", 2) self.port.set_value(int(self.config.get("port"))) self.template.set_active( self.templates.index(self.config.get("template"))) self.button_style.set_active(self.config.get("button_style")) + #self.share_downloads.set_active( + # bool(self.config.get("share_downloads"))) - self.torrent_dir.set_filename(self.config.get("torrent_dir")) - self.download_dir.set_filename(self.config.get("download_dir")) - - if deluge.common.windows_check(): - self.run_in_thread.set_active(True) - self.run_in_thread.set_sensitive(False) - else: - self.run_in_thread.set_active(False) - self.run_in_thread.set_sensitive(False) self.cache_templates.set_active(self.config.get("cache_templates")) self.vbox.pack_start(self.vb, True, True, 0) @@ -270,9 +253,7 @@ class ConfigDialog(gtk.Dialog): self.config.set("port", int(self.port.get_value())) self.config.set("template", self.template.get_active_text()) self.config.set("button_style", self.button_style.get_active()) - self.config.set("torrent_dir", self.torrent_dir.get_filename()) - self.config.set("download_dir",self.download_dir.get_filename()) self.config.set("cache_templates", self.cache_templates.get_active()) - self.config.set("run_in_thread", self.run_in_thread.get_active()) + #self.config.set("share_downloads", self.share_downloads.get_active()) self.config.save(self.plugin.config_file) self.plugin.start_server() #restarts server diff --git a/plugins/WebUi/dbus_interface.py b/plugins/WebUi/dbus_interface.py index 67fe2fa68..b253b821e 100644 --- a/plugins/WebUi/dbus_interface.py +++ b/plugins/WebUi/dbus_interface.py @@ -68,7 +68,7 @@ class DbusManager(dbus.service.Object): @dbus.service.method(dbus_interface=dbus_interface, in_signature="",out_signature="as") - def get_torrent_state(self): + def get_session_state(self): """Returns a list of torrent_ids in the session. same as 0.6, but returns type "as" instead of a pickle """ @@ -129,18 +129,20 @@ class DbusManager(dbus.service.Object): return status_subset @dbus.service.method(dbus_interface=dbus_interface, - in_signature="s",out_signature="") - def pause_torrent(self, torrent_id): + in_signature="as",out_signature="") + def pause_torrent(self, torrents): """same as 0.6 interface""" - torrent_id = int(torrent_id) - self.core.set_user_pause(torrent_id,True) + for torrent_id in torrents: + torrent_id = int(torrent_id) + self.core.set_user_pause(torrent_id,True) @dbus.service.method(dbus_interface=dbus_interface, - in_signature="s", out_signature="") - def resume_torrent(self, torrent_id): + in_signature="as", out_signature="") + def resume_torrent(self, torrents): """same as 0.6 interface""" - torrent_id = int(torrent_id) - self.core.set_user_pause(torrent_id,False) + for torrent_id in torrents: + torrent_id = int(torrent_id) + self.core.set_user_pause(torrent_id,False) @dbus.service.method(dbus_interface=dbus_interface, in_signature="sbb", out_signature="") @@ -157,7 +159,6 @@ class DbusManager(dbus.service.Object): @dbus.service.method(dbus_interface=dbus_interface, in_signature="s", out_signature="b") def add_torrent_url(self, url): - """not available in deluge 0.6 interface""" filename = fetch_url(url) self._add_torrent(filename) return True @@ -182,8 +183,8 @@ class DbusManager(dbus.service.Object): #name = fillename without directory name = name.replace('\\','/') name = 'deluge_' + str(random.random()) + '_' + name.split('/')[-1] + filename = os.path.join(self.core.config.get("default_download_path"), name) - filename = os.path.join(self.config.get("torrent_dir"),name) filecontent = base64.b64decode(filecontent_b64) f = open(filename,"wb") #no with statement, that's py 2.5+ f.write(filecontent) @@ -192,11 +193,42 @@ class DbusManager(dbus.service.Object): self._add_torrent(filename) return True + + @dbus.service.method(dbus_interface=dbus_interface, + in_signature="", out_signature="a{sv}") + def get_config(self): + return self.core.config.mapping + + @dbus.service.method(dbus_interface=dbus_interface, + in_signature="s", out_signature="v") + def get_config_value(self,key): + return self.core.config.mapping[pythonize(key)] #ugly! + + @dbus.service.method(dbus_interface=dbus_interface, + in_signature="a{sv}", out_signature="") + def set_config(self, config): + """Set the config with values from dictionary""" + config = deluge.common.pythonize(config) + # Load all the values into the configuration + for key in self.core.config.keys(): + self.core.config[key] = config[key] + self.core.apply_prefs() + + @dbus.service.method(dbus_interface=dbus_interface, + in_signature="", out_signature="v") + def get_download_rate(self): + return self.core.get_state()['download_rate'] + + @dbus.service.method(dbus_interface=dbus_interface, + in_signature="", out_signature="v") + def get_upload_rate(self): + return self.core.get_state()['upload_rate'] + + #internal def _add_torrent(self, filename): - #dbus types break pickle, again..... filename = unicode(filename) - target = self.config.get("download_dir") + target = self.core.config.get("default_download_path") torrent_id = self.core.add_torrent(filename, target, self.interface.config.get("use_compact_storage")) diff --git a/plugins/WebUi/deluge_webserver.py b/plugins/WebUi/deluge_webserver.py index a39200683..4c989dccb 100644 --- a/plugins/WebUi/deluge_webserver.py +++ b/plugins/WebUi/deluge_webserver.py @@ -31,67 +31,15 @@ # this exception statement from your version. If you delete this exception # statement from all source files in the program, then also delete it here. - -from webserver_common import TORRENT_KEYS, STATE_MESSAGES import webserver_common as ws from webserver_framework import * - import webpy022 as web from webpy022.http import seeother, url -from webpy022.utils import Storage -from md5 import md5 import base64 -from deluge.common import fsize from operator import attrgetter - -#utils: -def check_pwd(pwd): - m = md5() - m.update(ws.config.get('pwd_salt')) - m.update(pwd) - return (m.digest() == ws.config.get('pwd_md5')) - -def get_torrent_status(torrent_id): - """ - helper method. - enhance ws.proxy.get_torrent_status with some extra data - """ - status = ws.proxy.get_torrent_status(torrent_id,TORRENT_KEYS) - status["id"] = torrent_id - - #for naming the status-images - status["calc_state_str"] = "downloading" - if status["paused"]: - status["calc_state_str"] = "inactive" - elif status["is_seed"]: - status["calc_state_str"] = "seeding" - - #action for torrent_pause - if status["calc_state_str"] == "inactive": - status["action"] = "start" - else: - status["action"] = "stop" - - if status["paused"]: - status["message"] = _("Paused %s%%") % status['progress'] - else: - status["message"] = "%s %i%%" % (STATE_MESSAGES[status["state"]] - , status['progress']) - - #add some pre-calculated values - status.update({ - "calc_total_downloaded" : (fsize(status["total_done"]) - + " (" + fsize(status["total_download"]) + ")"), - "calc_total_uploaded": (fsize(status['uploaded_memory'] - + status["total_payload_upload"]) + " (" - + fsize(status["total_upload"]) + ")"), - }) - - return Storage(status) #Storage for easy templating. - -#/utils +import os #routing: urls = ( @@ -107,15 +55,21 @@ urls = ( "/resume_all(.*)", "resume_all", "/refresh/set(.*)", "refresh_set", "/refresh/(.*)", "refresh", + "/config(.*)","config", "/home(.*)", "home", "/about(.*)", "about", + "/logout(.*)", "logout", #default-pages - "/", "login", - "", "login", + "/", "home", + "", "home", #remote-api: - "/remote/torrent/add(.*)", "remote_torrent_add" -) + "/remote/torrent/add(.*)", "remote_torrent_add", + #static: + "/static/(.*)","static", + "/template/static/(.*)","template_static", + #"/downloads/(.*)","downloads" disabled until it can handle large downloads. +) #/routing #pages: @@ -133,15 +87,10 @@ class login: start_session() do_redirect() elif vars.redir: - seeother(url('/login',error=1,redir=vars.redir)) + seeother(url('/login',error=1, redir=vars.redir)) else: seeother('/login?error=1') -class home: - @check_session - def GET(self, name): - do_redirect() - class index: "page containing the torrent list." @auto_refreshed @@ -150,7 +99,7 @@ class index: vars = web.input(sort=None, order=None) status_rows = [get_torrent_status(torrent_id) - for torrent_id in ws.proxy.get_torrent_state()] + for torrent_id in ws.proxy.get_session_state()] #sorting: if vars.sort: @@ -164,21 +113,19 @@ class index: return ws.render.index(status_rows) class torrent_info: - "torrent details" @auto_refreshed @deluge_page def GET(self, torrent_id): return ws.render.torrent_info(get_torrent_status(torrent_id)) class torrent_pause: - "start/stop a torrent" @check_session def POST(self, name): vars = web.input(stop = None, start = None, redir = None) if vars.stop: - ws.proxy.pause_torrent(vars.stop) + ws.proxy.pause_torrent([vars.stop]) elif vars.start: - ws.proxy.resume_torrent(vars.start) + ws.proxy.resume_torrent([vars.start]) do_redirect() @@ -194,7 +141,7 @@ class torrent_add: if vars.url and vars.torrent.filename: error_page(_("Choose an url or a torrent, not both.")) if vars.url: - ws.proxy.add_torrent_url(vars.url) + ws.proxy.add_torrent_url(vars.url ) do_redirect() elif vars.torrent.filename: data = vars.torrent.file.read() @@ -227,8 +174,7 @@ class torrent_delete: return ws.render.torrent_delete(get_torrent_status(torrent_id)) @check_session - def POST(self, name): - torrent_id = name + def POST(self, torrent_id): vars = web.input(data_also = None, torrent_also = None) data_also = bool(vars.data_also) torrent_also = bool(vars.torrent_also) @@ -238,30 +184,26 @@ class torrent_delete: class torrent_queue_up: @check_session - def POST(self, name): - torrent_id = name + def POST(self, torrent_id): ws.proxy.queue_up(torrent_id) do_redirect() class torrent_queue_down: @check_session - def POST(self, name): - torrent_id = name + def POST(self, torrent_id): ws.proxy.queue_down(torrent_id) do_redirect() class pause_all: @check_session def POST(self, name): - for torrent_id in ws.proxy.get_torrent_state(): - ws.proxy.pause_torrent(torrent_id) + ws.proxy.pause_torrent(ws.proxy.get_session_state()) do_redirect() class resume_all: @check_session def POST(self, name): - for torrent_id in ws.proxy.get_torrent_state(): - ws.proxy.resume_torrent(torrent_id) + ws.proxy.resume_torrent(ws.proxy.get_session_state()) do_redirect() class refresh: @@ -287,13 +229,61 @@ class refresh_set: else: error_page(_('refresh must be > 0')) +class config: + """core config + TODO:good validation. + """ + cfg_form = web.form.Form( + web.form.Dropdown('max_download', ws.SPEED_VALUES, + description=_('Download Speed Limit'), + post='%s Kib/sec' % ws.proxy.get_config_value('max_download_speed') + ) + ,web.form.Dropdown('max_upload', ws.SPEED_VALUES, + description=_('Upload Speed Limit'), + post='%s Kib/sec' % ws.proxy.get_config_value('max_upload_speed') + ) + ) + + @deluge_page + def GET(self, name): + return ws.render.config(self.cfg_form()) + + def POST(self, name): + vars = web.input(max_download=None, max_upload=None) + + #self.config.set("max_download_speed", float(str_bwdown)) + raise NotImplementedError('todo') + +class home: + @check_session + def GET(self, name): + do_redirect() + class about: @deluge_page_noauth def GET(self, name): return ws.render.about() -#/pages +class logout: + def POST(self, name): + end_session() + seeother('/login') +class static(static_handler): + base_dir = os.path.join(os.path.dirname(__file__),'static') + +class template_static(static_handler): + def get_base_dir(self): + return os.path.join(os.path.dirname(__file__), + 'templates/%s/static' % ws.config.get('template')) + +class downloads(static_handler): + def GET(self, name): + self.base_dir = ws.proxy.get_config_value('default_download_path') + if not ws.config.get('share_downloads'): + raise Exception('Access to downloads is forbidden.') + return static_handler.GET(self, name) +#/pages def WebServer(): return create_webserver(urls, globals()) @@ -307,4 +297,3 @@ def run(): if __name__ == "__main__": run() - diff --git a/plugins/WebUi/revno b/plugins/WebUi/revno index 84df3526d..194b81caa 100644 --- a/plugins/WebUi/revno +++ b/plugins/WebUi/revno @@ -1 +1 @@ -87 +112 diff --git a/plugins/WebUi/run_webserver b/plugins/WebUi/run_webserver index 9ac32c4ff..b8e9b47f5 100755 --- a/plugins/WebUi/run_webserver +++ b/plugins/WebUi/run_webserver @@ -1,3 +1,3 @@ #!/usr/bin/env python -from deluge_webserver import * -web.run(urls, globals()) \ No newline at end of file +import deluge_webserver +deluge_webserver.run() diff --git a/plugins/WebUi/scripts/add_torrent_to_deluge_webui b/plugins/WebUi/scripts/add_torrent_to_deluge_webui new file mode 100755 index 000000000..740857ccb --- /dev/null +++ b/plugins/WebUi/scripts/add_torrent_to_deluge_webui @@ -0,0 +1,10 @@ +#!/bin/bash + +pwd=deluge +url=http://localhost:8112 + +for arg in "$@" +do + curl -F torrent=@"$arg" -F pwd=$pwd $url/remote/torrent/add +done + diff --git a/plugins/WebUi/static/images/tango/system-log-out.png b/plugins/WebUi/static/images/tango/system-log-out.png new file mode 100644 index 0000000000000000000000000000000000000000..0010931e2c2c35eda774f972dad5f305ff7b6766 GIT binary patch literal 799 zcmV+)1K|9LP)#yLz&Ndx##4AnMLxFXBZ(g%HuJ zXi&qdfM(p}?71_;z-a>z1OY)1kR%Cdn$l{uaL%E% z20$r|G3H}0Xl>|O*#nSQ0Qr2LFbv7%a)e>nxm#-iK?Fn;rO}H#*uEVR!P*eOn08KU zEzY@4ZV^E#g$TGTkl0Q5yTko z96r1hp-s`2)|%YZ6svCDq_A@*KN&-G|2`-NL;2>{ay<)mpM1>)Xl?vJ194<}C>UEMz1(#)? z2-^S9HcD2kVCu*bayPCMH=C^7umK&0EG{h2Qi}O%6`Yd}!S|+-h9S4NY{31bkNg24I=4Iksz%a>Tzznj;k653ieJ|1K8_%QpT zsQ-%yp65||Q^JNmza1DLpU)yz5Kkbm-p{$%*@Oz8Th_`>gu&CBehx;5n=4n*f;C^bvfq< dg5VDz{U1L){aup)rDXsB002ovPDHLkV1hluXGs76 literal 0 HcmV?d00001 diff --git a/plugins/WebUi/static_handler.py b/plugins/WebUi/static_handler.py new file mode 100644 index 000000000..d5b706cca --- /dev/null +++ b/plugins/WebUi/static_handler.py @@ -0,0 +1,136 @@ +#!/usr/bin/env python +#(c) Martijn Voncken, mvoncken@gmail.com +#Same Licence as web.py 0.22 ->Public Domain +# +""" +static fileserving for web.py +without the need for wsgi wrapper magic. +""" +import webpy022 as web +from webpy022.http import seeother, url + +import posixpath +import urlparse +import urllib +import mimetypes +import os +import datetime +import cgi +from StringIO import StringIO +mimetypes.init() # try to read system mime.types + +class static_handler: + """ + mostly c&p from SimpleHttpServer + serves relative from start location + """ + base_dir = './' + extensions_map = mimetypes.types_map + + def get_base_dir(self): + #override this if you have a config that changes the base dir at runtime + #deluge on windows :( + return self.base_dir + + def GET(self, path): + path = self.translate_path(path) + if os.path.isdir(path): + if not path.endswith('/'): + path += "/" + return self.list_directory(path) + + ctype = self.guess_type(path) + + try: + f = open(path, 'rb') + except IOError: + raise Exception('file not found:%s' % path) + #web.header("404", "File not found") + #return + web.header("Content-type", ctype) + fs = os.fstat(f.fileno()) + web.header("Content-Length", str(fs[6])) + web.lastmodified(datetime.datetime.fromtimestamp(fs.st_mtime)) + print f.read() + + def translate_path(self, path): + """Translate a /-separated PATH to the local filename syntax. + + Components that mean special things to the local file system + (e.g. drive or directory names) are ignored. (XXX They should + probably be diagnosed.) + + """ + # abandon query parameters + path = urlparse.urlparse(path)[2] + path = posixpath.normpath(urllib.unquote(path)) + words = path.split('/') + words = filter(None, words) + path = self.get_base_dir() + for word in words: + drive, word = os.path.splitdrive(word) + head, word = os.path.split(word) + if word in (os.curdir, os.pardir): continue + path = os.path.join(path, word) + return path + + def guess_type(self, path): + base, ext = posixpath.splitext(path) + if ext in self.extensions_map: + return self.extensions_map[ext] + ext = ext.lower() + if ext in self.extensions_map: + return self.extensions_map[ext] + else: + return 'application/octet-stream' + + + def list_directory(self, path): + """Helper to produce a directory listing (absent index.html). + + Return value is either a file object, or None (indicating an + error). In either case, the headers are sent, making the + interface the same as for send_head(). + #TODO ->use web.py +template! + """ + try: + list = os.listdir(path) + except os.error: + web.header('404', "No permission to list directory") + return None + list.sort(key=lambda a: a.lower()) + f = StringIO() + displaypath = cgi.escape(urllib.unquote(path)) + f.write("Directory listing for %s\n" % displaypath) + f.write("

Directory listing for %s

\n" % displaypath) + f.write("
\n
    \n") + for name in list: + fullname = os.path.join(path, name) + displayname = linkname = name + # Append / for directories or @ for symbolic links + if os.path.isdir(fullname): + displayname = name + "/" + linkname = name + "/" + if os.path.islink(fullname): + displayname = name + "@" + # Note: a link to a directory displays with @ and links with / + f.write('
  • %s\n' + % (urllib.quote(linkname), cgi.escape(displayname))) + f.write("
\n
\n") + length = f.tell() + f.seek(0) + + web.header("Content-type", "text/html") + web.header("Content-Length", str(length)) + print f.read() + + +if __name__ == '__main__': + #example: + class usr_static(static_handler): + base_dir = os.path.expanduser('~') + + urls = ('/relative/(.*)','static_handler', + '/(.*)','usr_static') + + web.run(urls,globals()) diff --git a/plugins/WebUi/templates/deluge/about.html b/plugins/WebUi/templates/deluge/about.html index 66430a8b8..c882c8fad 100644 --- a/plugins/WebUi/templates/deluge/about.html +++ b/plugins/WebUi/templates/deluge/about.html @@ -7,6 +7,7 @@ $:render.header(_('About'))
  • Deluge
  • WebUi forum Thread +
  • GPL v2
  • @@ -18,6 +19,7 @@ $:render.header(_('About'))
    • Martijn Voncken
    +

    Template

    • Martijn Voncken
    • @@ -27,6 +29,7 @@ $:render.header(_('About'))
      • Zach Tibbitts
      • Alon Zakai
      • +
      • Alon Zakai
      • Marcos Pinto
      • Andrew Resch
      • @@ -36,4 +39,4 @@ $:render.header(_('About')) *and all other authors/helpers/contributors I forgot to mention. -$:render.footer() \ No newline at end of file +$:render.footer() diff --git a/plugins/WebUi/templates/deluge/config.html b/plugins/WebUi/templates/deluge/config.html new file mode 100644 index 000000000..e2670d0ae --- /dev/null +++ b/plugins/WebUi/templates/deluge/config.html @@ -0,0 +1,10 @@ +$def with (form) +$:render.header(_('Config')) + +
        Not Implemented!
        +
        +$:form.render() + +
        + +$:render.footer() diff --git a/plugins/WebUi/templates/deluge/index.html b/plugins/WebUi/templates/deluge/index.html index 249c83b3a..fb502868b 100644 --- a/plugins/WebUi/templates/deluge/index.html +++ b/plugins/WebUi/templates/deluge/index.html @@ -51,8 +51,10 @@ $for torrent in torrent_list: $:render.part_button('GET', '/torrent/add', _('Add torrent'), 'tango/list-add.png') $:render.part_button('POST', '/pause_all', _('Pause all'), 'tango/media-playback-pause.png') $:render.part_button('POST', '/resume_all', _('Resume all'), 'tango/media-playback-start.png') +$:render.part_button('POST', '/logout', _('Logout'), 'tango/system-log-out.png') -$:render.part_refresh() +$:part_stats() $:render.footer() + diff --git a/plugins/WebUi/templates/deluge/part_button.html b/plugins/WebUi/templates/deluge/part_button.html index b2d15d541..8c420560f 100644 --- a/plugins/WebUi/templates/deluge/part_button.html +++ b/plugins/WebUi/templates/deluge/part_button.html @@ -2,21 +2,25 @@ $def with (method, url, title, image='')
        - $if (get_config('button_style') == 1): $if image: - $title + $else: + $if (get_config('button_style') == 2): + -
        diff --git a/plugins/WebUi/templates/deluge/part_stats.html b/plugins/WebUi/templates/deluge/part_stats.html new file mode 100644 index 000000000..4150a0f36 --- /dev/null +++ b/plugins/WebUi/templates/deluge/part_stats.html @@ -0,0 +1,30 @@ +$def with (stats) + + +
        + +$_('Auto refresh:') +$if getcookie('auto_refresh') == '1': + ($getcookie('auto_refresh_secs')) $_('seconds')   + $:render.part_button('GET', '/refresh/set', _('Set'), 'tango/preferences-system.png') + $:render.part_button('POST', '/refresh/off', _('Disable'), 'tango/process-stop.png') +$else: + $_('Off')   + $:render.part_button('POST', '/refresh/on', _('Enable'), 'tango/view-refresh.png') +$#end +
        + + + + diff --git a/plugins/WebUi/templates/deluge/torrent_info.html b/plugins/WebUi/templates/deluge/torrent_info.html index 39e25a51c..663d26c87 100644 --- a/plugins/WebUi/templates/deluge/torrent_info.html +++ b/plugins/WebUi/templates/deluge/torrent_info.html @@ -84,6 +84,7 @@ $:render.part_button('GET', '/torrent/delete/' + str(torrent.id), _('Remove'), '
        + + @@ -114,6 +117,6 @@ $:render.part_button('POST', '/torrent/queue/up/' + str(torrent.id), _('Queue Up $:render.part_button('POST', '/torrent/queue/down/' + str(torrent.id), _('Queue Down'), 'tango/down.png') -$:render.part_refresh() +$:part_stats() $:render.footer() diff --git a/plugins/WebUi/templates/example/footer.html b/plugins/WebUi/templates/example/footer.html new file mode 100644 index 000000000..11a09caf8 --- /dev/null +++ b/plugins/WebUi/templates/example/footer.html @@ -0,0 +1,3 @@ + + + diff --git a/plugins/WebUi/templates/example/header.html b/plugins/WebUi/templates/example/header.html new file mode 100644 index 000000000..6b0702f4a --- /dev/null +++ b/plugins/WebUi/templates/example/header.html @@ -0,0 +1,12 @@ +$def with (title) + + + Deluge(example) : $title + + + + + +[HOME] + +

        $title

        diff --git a/plugins/WebUi/templates/example/index.html b/plugins/WebUi/templates/example/index.html new file mode 100644 index 000000000..7c3ca4aab --- /dev/null +++ b/plugins/WebUi/templates/example/index.html @@ -0,0 +1,42 @@ +$def with (torrent_list) +$:render.header(_('Torrent list')) + +
        + + + $:(sort_head('calc_state_str', 'S')) + $:(sort_head('queue_pos', '#')) + $:(sort_head('name', _('Name'))) + $:(sort_head('progress', _('Progress'))) + +$#4-space indentation is mandatory for for-loops in templetor! +$for torrent in torrent_list: + + + + + + +
        + $torrent.queue_pos + $(crop(torrent.name, 40)) +
        +
        + $torrent.message +
        +
        +
        + +
        + +
        +$:render.part_button('GET', '/torrent/add', _('Add torrent'), 'tango/list-add.png') +$:render.part_button('POST', '/pause_all', _('Pause all'), 'tango/media-playback-pause.png') +$:render.part_button('POST', '/resume_all', _('Resume all'), 'tango/media-playback-start.png') +$:render.part_button('POST', '/logout', _('Logout'), 'tango/system-log-out.png') +
        + +$:render.footer() + diff --git a/plugins/WebUi/version b/plugins/WebUi/version index 448878e1e..004ed9c81 100644 --- a/plugins/WebUi/version +++ b/plugins/WebUi/version @@ -1,5 +1,5 @@ revision-id: mvoncken@gmail.com-20070930083408-sv8mo0mi1rbjnfvk date: 2007-10-23 15:10:08 +0200 build-date: 2007-10-23 15:34:50 +0200 -revno: 87 +revno: 112 branch-nick: WebUi diff --git a/plugins/WebUi/webserver_common.py b/plugins/WebUi/webserver_common.py index 2173f7712..dd932c681 100644 --- a/plugins/WebUi/webserver_common.py +++ b/plugins/WebUi/webserver_common.py @@ -29,40 +29,96 @@ # this exception statement from your version. If you delete this exception # statement from all source files in the program, then also delete it here. +""" +initializes config,render and proxy. +contains all hacks to support running in process0.5 ,run inside-gtk0.5 and + run in process0.6 +""" + import os import deluge -from deluge.common import INSTALL_PREFIX import random import pickle +import sys from webpy022 import template - random.seed() +path = os.path.dirname(__file__) -config_file = deluge.common.CONFIG_DIR + "/webui.conf" +try: + _('translate something') +except: + import gettext + gettext.install('~/') #no translations :( -#a bit hacky way of detecting i'm in the deluge gui or in a process :( -if not hasattr(deluge,'pref'): +try: + config_dir = deluge.common.CONFIG_DIR +except: + config_dir = os.path.expanduser("~/.config/deluge") + +config_file = os.path.join(config_dir,'webui.conf') +session_file = os.path.join(config_dir,'webui.sessions') + + +class subclassed_render(object): + """ + try to use the html template in configured dir. + not available : use template in /deluge/ + """ + def __init__(self, template_dirname, cache=False): + self.base_template = template.render( + os.path.join(path, 'templates/deluge/'), + cache=cache) + + self.sub_template = template.render( + os.path.join(path, 'templates/%s/' % template_dirname), + cache=cache) + + def __getattr__(self, attr): + if hasattr(self.sub_template, attr): + return getattr(self.sub_template, attr) + else: + return getattr(self.base_template, attr) + +def init_process(): + globals()['config'] = pickle.load(open(config_file)) + globals()['render'] = subclassed_render(config.get('template'), + config.get('cache_templates')) + +def init_06(): + import deluge.ui.client as proxy + proxy.set_core_uri('http://localhost:58846') #How to configure this? + + init_process() + globals()['proxy'] = proxy + +def init_05(): import dbus + init_process() bus = dbus.SessionBus() proxy = bus.get_object("org.deluge_torrent.dbusplugin" , "/org/deluge_torrent/DelugeDbusPlugin") - config = pickle.load(open(config_file)) - render = template.render('templates/%s/' % config.get('template'), - cache=config.get('cache_templates')) + globals()['proxy'] = proxy -def init(): +def init_gtk_05(): #appy possibly changed config-vars, only called in when runing inside gtk. - path = os.path.dirname(__file__) from dbus_interface import get_dbus_manager globals()['proxy'] = get_dbus_manager() globals()['config'] = deluge.pref.Preferences(config_file, False) - globals()['render'] = template.render(os.path.join(path, 'templates/%s/' % - config.get('template')), cache=config.get('cache_templates')) + globals()['render'] = subclassed_render(config.get('template'), + config.get('cache_templates')) +#hacks to determine environment, TODO: clean up. +if 'env=0.5' in sys.argv: + init_05() +elif not hasattr(deluge, 'common'): + init_06() +elif not hasattr(deluge,'pref'): + init_05() -REVNO = '0.56.stable.' + open(os.path.join(os.path.dirname(__file__),'revno')).read() +#constants +REVNO = open(os.path.join(os.path.dirname(__file__),'revno')).read() VERSION = open(os.path.join(os.path.dirname(__file__),'version')).read() TORRENT_KEYS = ['distributed_copies', 'download_payload_rate', @@ -82,3 +138,30 @@ STATE_MESSAGES = (_("Queued"), _("Finished"), _("Seeding"), _("Allocating")) + +SPEED_VALUES = [ + (-1, 'Unlimited'), + (5, '5.0 Kib/sec'), + (10, '10.0 Kib/sec'), + (15, '15.0 Kib/sec'), + (25, '25.0 Kib/sec'), + (30, '30.0 Kib/sec'), + (50, '50.0 Kib/sec'), + (80, '80.0 Kib/sec'), + (300, '300.0 Kib/sec'), + (500, '500.0 Kib/sec') + ] + +COOKIE_DEFAULTS = { + 'auto_refresh_secs':'10' +} + +try: + SESSIONS = pickle.load(open(session_file)) +except: + SESSIONS = [] + + + + + diff --git a/plugins/WebUi/webserver_framework.py b/plugins/WebUi/webserver_framework.py index b7254886b..37b8497b0 100644 --- a/plugins/WebUi/webserver_framework.py +++ b/plugins/WebUi/webserver_framework.py @@ -45,15 +45,21 @@ import webpy022 as web from webpy022.webapi import cookies, setcookie as w_setcookie from webpy022.http import seeother, url from webpy022 import template,changequery as self_url +from webpy022.utils import Storage +from static_handler import static_handler + +from deluge.common import fsize,fspeed import traceback import random from operator import attrgetter +import datetime +import pickle +from md5 import md5 from deluge import common -from webserver_common import REVNO, VERSION +from webserver_common import REVNO, VERSION, COOKIE_DEFAULTS import webserver_common as ws - from debugerror import deluge_debugerror #init: @@ -65,14 +71,22 @@ def setcookie(key, val): """add 30 days expires header for persistent cookies""" return w_setcookie(key, val , expires=2592000) -SESSIONS = [] #dumb sessions. +#really simple sessions, to bad i had to implement them myself. def start_session(): session_id = str(random.random()) - SESSIONS.append(session_id) + ws.SESSIONS.append(session_id) + if len(ws.SESSIONS) > 20: #save max 20 sessions? + ws.SESSIONS = ws.SESSIONS[-20:] + #not thread safe! , but a verry rare bug. + pickle.dump(ws.SESSIONS, open(ws.session_file,'wb')) setcookie("session_id", session_id) - if getcookie('auto_refresh_secs') == None: - setcookie('auto_refresh_secs','10') +def end_session(): + session_id = getcookie("session_id") + if session_id in ws.SESSIONS: + ws.SESSIONS.remove(session_id) + #not thread safe! , but a verry rare bug. + pickle.dump(ws.SESSIONS, open(ws.session_file,'wb')) def do_redirect(): """for redirects after a POST""" @@ -92,7 +106,6 @@ def error_page(error): print ws.render.error(error) def getcookie(key, default=None): - COOKIE_DEFAULTS = {'auto_refresh_secs':'10'} key = str(key).strip() ck = cookies() val = ck.get(key, default) @@ -120,9 +133,8 @@ def check_session(func): """ def deco(self, name): vars = web.input(redir_after_login=None) - ck = cookies() - if ck.has_key("session_id") and ck["session_id"] in SESSIONS: + if ck.has_key("session_id") and ck["session_id"] in ws.SESSIONS: return func(self, name) #ok, continue.. elif vars.redir_after_login: seeother(url("/login",redir=self_url())) @@ -154,6 +166,77 @@ def remote(func): print traceback.format_exc() return deco +#utils: +def check_pwd(pwd): + m = md5() + m.update(ws.config.get('pwd_salt')) + m.update(pwd) + return (m.digest() == ws.config.get('pwd_md5')) + +def get_stats(): + stats = Storage({ + 'download_rate':fspeed(ws.proxy.get_download_rate()), + 'upload_rate':fspeed(ws.proxy.get_upload_rate()), + 'max_download':ws.proxy.get_config_value('max_download_speed_bps'), + 'max_upload':ws.proxy.get_config_value('max_upload_speed_bps'), + }) + if stats.max_upload < 0: + stats.max_upload = _("Unlimited") + else: + stats.max_upload = fspeed(stats.max_upload) + + if stats.max_download < 0: + stats.max_download = _("Unlimited") + else: + stats.max_download = fspeed(stats.max_download) + + return stats + + +def get_torrent_status(torrent_id): + """ + helper method. + enhance ws.proxy.get_torrent_status with some extra data + """ + status = Storage(ws.proxy.get_torrent_status(torrent_id,ws.TORRENT_KEYS)) + + #add missing values for deluge 0.6: + for key in ws.TORRENT_KEYS: + if not key in status: + status[key] = 0 + + status["id"] = torrent_id + + #for naming the status-images + status["calc_state_str"] = "downloading" + if status["paused"]: + status["calc_state_str"] = "inactive" + elif status["is_seed"]: + status["calc_state_str"] = "seeding" + + #action for torrent_pause + if status["calc_state_str"] == "inactive": + status["action"] = "start" + else: + status["action"] = "stop" + + if status["paused"]: + status["message"] = _("Paused %s%%") % status['progress'] + else: + status["message"] = "%s %i%%" % (ws.STATE_MESSAGES[status["state"]] + , status['progress']) + + #add some pre-calculated values + status.update({ + "calc_total_downloaded" : (fsize(status["total_done"]) + + " (" + fsize(status["total_download"]) + ")"), + "calc_total_uploaded": (fsize(status['uploaded_memory'] + + status["total_payload_upload"]) + " (" + + fsize(status["total_upload"]) + ")"), + }) + return status +#/utils + #template-defs: def template_crop(text, end): if len(text) > end: @@ -176,12 +259,15 @@ def template_sort_head(id,name): return ws.render.sort_column_head(id, name, order, active_up, active_down) +def template_part_stats(): + return ws.render.part_stats(get_stats()) def get_config(var): return ws.config.get(var) template.Template.globals.update({ 'sort_head': template_sort_head, + 'part_stats':template_part_stats, 'crop': template_crop, '_': _ , #gettext/translations 'str': str, #because % in templetor is broken. @@ -198,145 +284,20 @@ template.Template.globals.update({ }) #/template-defs +def create_webserver(urls, methods): + from webpy022.request import webpyfunc + from webpy022 import webapi + from gtk_cherrypy_wsgiserver import CherryPyWSGIServer - -#------------------------------------------------------------------------------ -#Some copy and paste from web.py -#mostly caused by /static -#TODO : FIX THIS. -#static-files serving should be moved to the normal webserver! -from SimpleHTTPServer import SimpleHTTPRequestHandler -from BaseHTTPServer import BaseHTTPRequestHandler -from gtk_cherrypy_wsgiserver import CherryPyWSGIServer -from BaseHTTPServer import BaseHTTPRequestHandler - -from webpy022.request import webpyfunc -from webpy022 import webapi -import os - -import posixpath -import urllib -import urlparse - -class RelativeHandler(SimpleHTTPRequestHandler): - def translate_path(self, path): - """Translate a /-separated PATH to the local filename syntax. - - Components that mean special things to the local file system - (e.g. drive or directory names) are ignored. (XXX They should - probably be diagnosed.) - - """ - # abandon query parameters - path = urlparse.urlparse(path)[2] - path = posixpath.normpath(urllib.unquote(path)) - words = path.split('/') - words = filter(None, words) - path = os.path.dirname(__file__) - for word in words: - drive, word = os.path.splitdrive(word) - head, word = os.path.split(word) - if word in (os.curdir, os.pardir): continue - path = os.path.join(path, word) - return path - -class StaticApp(RelativeHandler): - """WSGI application for serving static files.""" - def __init__(self, environ, start_response): - self.headers = [] - self.environ = environ - self.start_response = start_response - - def send_response(self, status, msg=""): - self.status = str(status) + " " + msg - - def send_header(self, name, value): - self.headers.append((name, value)) - - def end_headers(self): - pass - - def log_message(*a): pass - - def __iter__(self): - environ = self.environ - - self.path = environ.get('PATH_INFO', '') - self.client_address = environ.get('REMOTE_ADDR','-'), \ - environ.get('REMOTE_PORT','-') - self.command = environ.get('REQUEST_METHOD', '-') - - from cStringIO import StringIO - self.wfile = StringIO() # for capturing error - - f = self.send_head() - self.start_response(self.status, self.headers) - - if f: - block_size = 16 * 1024 - while True: - buf = f.read(block_size) - if not buf: - break - yield buf - f.close() - else: - value = self.wfile.getvalue() - yield value - -class WSGIWrapper(BaseHTTPRequestHandler): - """WSGI wrapper for logging the status and serving static files.""" - def __init__(self, app): - self.app = app - self.format = '%s - - [%s] "%s %s %s" - %s' - - def __call__(self, environ, start_response): - def xstart_response(status, response_headers, *args): - write = start_response(status, response_headers, *args) - self.log(status, environ) - return write - - path = environ.get('PATH_INFO', '') - if path.startswith('/static/'): - return StaticApp(environ, xstart_response) - else: - return self.app(environ, xstart_response) - - def log(self, status, environ): - #mvoncken,no logging.. - return - - outfile = environ.get('wsgi.errors', web.debug) - req = environ.get('PATH_INFO', '_') - protocol = environ.get('ACTUAL_SERVER_PROTOCOL', '-') - method = environ.get('REQUEST_METHOD', '-') - host = "%s:%s" % (environ.get('REMOTE_ADDR','-'), - environ.get('REMOTE_PORT','-')) - - #@@ It is really bad to extend from - #@@ BaseHTTPRequestHandler just for this method - time = self.log_date_time_string() - - print >> outfile, self.format % (host, time, protocol, - method, req, status) - -def create_webserver(urls,methods): - func = webapi.wsgifunc(webpyfunc(urls,methods, False)) - server_address=("0.0.0.0",ws.config.get('port')) - - func = WSGIWrapper(func) + func = webapi.wsgifunc(webpyfunc(urls, methods, False)) + server_address=("0.0.0.0", int(ws.config.get('port'))) server = CherryPyWSGIServer(server_address, func, server_name="localhost") - - - print "(created) http://%s:%d/" % server_address - + print "http://%s:%d/" % server_address return server #------ __all__ = ['deluge_page_noauth', 'deluge_page', 'remote', 'auto_refreshed', 'check_session', 'do_redirect', 'error_page','start_session','getcookie' - ,'create_webserver','setcookie'] - - - + ,'setcookie','create_webserver','end_session', + 'get_torrent_status', 'check_pwd','static_handler'] diff --git a/po/POTFILES.in b/po/POTFILES.in index 1828a9adb..514678dba 100644 --- a/po/POTFILES.in +++ b/po/POTFILES.in @@ -54,3 +54,7 @@ plugins/WebSeed/__init__.py plugins/WebSeed/webseed.glade plugins/Scheduler/__init__.py plugins/Scheduler/plugin.py +plugins/WebUi/__init__.py +plugins/WebUi/webserver_common.py +plugins/WebUi/deluge_webserver.py +plugins/WebUi/scripts/template_strings.py diff --git a/po/deluge.pot b/po/deluge.pot index e037583c1..c8c03f45d 100644 --- a/po/deluge.pot +++ b/po/deluge.pot @@ -8,7 +8,7 @@ msgid "" msgstr "" "Project-Id-Version: PACKAGE VERSION\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2007-10-22 22:35-0500\n" +"POT-Creation-Date: 2007-10-27 20:34-0500\n" "PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" "Last-Translator: FULL NAME \n" "Language-Team: LANGUAGE \n" @@ -88,7 +88,7 @@ msgstr "" msgid "Torrent Info" msgstr "" -#: glade/delugegtk.glade:750 +#: glade/delugegtk.glade:750 plugins/WebUi/scripts/template_strings.py:8 msgid "Details" msgstr "" @@ -140,7 +140,7 @@ msgstr "" msgid "_Columns" msgstr "" -#: glade/delugegtk.glade:947 src/interface.py:596 src/files.py:79 +#: glade/delugegtk.glade:947 src/interface.py:596 src/files.py:80 msgid "Size" msgstr "" @@ -149,11 +149,13 @@ msgid "Status" msgstr "" #: glade/delugegtk.glade:965 src/interface.py:602 +#: plugins/WebUi/scripts/template_strings.py:19 msgid "Seeders" msgstr "" #: glade/delugegtk.glade:974 src/interface.py:605 #: plugins/TorrentPeers/__init__.py:72 +#: plugins/WebUi/scripts/template_strings.py:15 msgid "Peers" msgstr "" @@ -171,11 +173,11 @@ msgstr "" msgid "Time Remaining" msgstr "" -#: glade/delugegtk.glade:1010 +#: glade/delugegtk.glade:1010 plugins/WebUi/scripts/template_strings.py:4 msgid "Availability" msgstr "" -#: glade/delugegtk.glade:1019 +#: glade/delugegtk.glade:1019 plugins/WebUi/scripts/template_strings.py:21 msgid "Share Ratio" msgstr "" @@ -211,7 +213,7 @@ msgstr "" msgid "Remove Torrent" msgstr "" -#: glade/delugegtk.glade:1157 +#: glade/delugegtk.glade:1157 plugins/WebUi/scripts/template_strings.py:18 msgid "Remove" msgstr "" @@ -278,7 +280,7 @@ msgstr "" msgid "Delete downloaded files" msgstr "" -#: glade/dgtkpopups.glade:88 +#: glade/dgtkpopups.glade:88 plugins/WebUi/scripts/template_strings.py:6 msgid "Delete .torrent file" msgstr "" @@ -294,7 +296,7 @@ msgstr "" msgid "Clear Finished" msgstr "" -#: glade/dgtkpopups.glade:241 +#: glade/dgtkpopups.glade:241 plugins/WebUi/scripts/template_strings.py:22 msgid "Speed" msgstr "" @@ -542,6 +544,7 @@ msgid "Seeding" msgstr "" #: glade/preferences_dialog.glade:964 src/core.py:91 +#: plugins/WebUi/webserver_common.py:139 msgid "Seeding" msgstr "" @@ -646,6 +649,7 @@ msgstr "" #: glade/preferences_dialog.glade:1478 glade/preferences_dialog.glade:1672 #: glade/preferences_dialog.glade:1866 glade/preferences_dialog.glade:2060 +#: plugins/WebUi/scripts/template_strings.py:13 msgid "Password" msgstr "" @@ -1004,7 +1008,7 @@ msgstr "" msgid "Name" msgstr "" -#: src/interface.py:614 +#: src/interface.py:614 plugins/WebUi/scripts/template_strings.py:10 msgid "ETA" msgstr "" @@ -1088,31 +1092,32 @@ msgstr "" msgid "Are you sure that you want to remove all seeding torrents?" msgstr "" -#: src/core.py:85 +#: src/core.py:85 plugins/WebUi/webserver_common.py:133 msgid "Queued" msgstr "" -#: src/core.py:86 +#: src/core.py:86 plugins/WebUi/webserver_common.py:134 msgid "Checking" msgstr "" -#: src/core.py:87 +#: src/core.py:87 plugins/WebUi/webserver_common.py:135 msgid "Connecting" msgstr "" -#: src/core.py:88 +#: src/core.py:88 plugins/WebUi/webserver_common.py:136 msgid "Downloading Metadata" msgstr "" #: src/core.py:89 plugins/BlocklistImport/ui.py:117 +#: plugins/WebUi/webserver_common.py:137 msgid "Downloading" msgstr "" -#: src/core.py:90 +#: src/core.py:90 plugins/WebUi/webserver_common.py:138 msgid "Finished" msgstr "" -#: src/core.py:92 +#: src/core.py:92 plugins/WebUi/webserver_common.py:140 msgid "Allocating" msgstr "" @@ -1156,11 +1161,11 @@ msgstr "" msgid "Filename" msgstr "" -#: src/files.py:81 +#: src/files.py:82 msgid "Priority" msgstr "" -#: src/files.py:103 +#: src/files.py:104 msgid "" "File priority can only be set when using full allocation.\n" "Please change your preference to disable compact allocation, then remove and " @@ -1175,11 +1180,11 @@ msgstr "" msgid "Enabled" msgstr "" -#: src/dialogs.py:433 +#: src/dialogs.py:435 msgid "translator-credits" msgstr "" -#: src/dialogs.py:434 +#: src/dialogs.py:436 msgid "" "Deluge is free software, you can redistribute it and/or\n" "modify it under the terms of the GNU General Public\n" @@ -1196,15 +1201,15 @@ msgid "" "1301 USA" msgstr "" -#: src/dialogs.py:474 +#: src/dialogs.py:476 msgid "Choose a .torrent file" msgstr "" -#: src/dialogs.py:479 +#: src/dialogs.py:481 msgid "Torrent files" msgstr "" -#: src/dialogs.py:483 +#: src/dialogs.py:485 msgid "All files" msgstr "" @@ -1390,66 +1395,66 @@ msgstr "" msgid "Torrent Creator" msgstr "" -#: plugins/TorrentCreator/torrentcreator.glade:103 +#: plugins/TorrentCreator/torrentcreator.glade:102 msgid "This torrent will be made from a single file" msgstr "" -#: plugins/TorrentCreator/torrentcreator.glade:104 +#: plugins/TorrentCreator/torrentcreator.glade:103 msgid "File:" msgstr "" -#: plugins/TorrentCreator/torrentcreator.glade:120 +#: plugins/TorrentCreator/torrentcreator.glade:119 msgid "This torrent will be made from a directory" msgstr "" -#: plugins/TorrentCreator/torrentcreator.glade:121 +#: plugins/TorrentCreator/torrentcreator.glade:120 msgid "Folder:" msgstr "" -#: plugins/TorrentCreator/torrentcreator.glade:138 +#: plugins/TorrentCreator/torrentcreator.glade:137 msgid "Source" msgstr "" -#: plugins/TorrentCreator/torrentcreator.glade:184 +#: plugins/TorrentCreator/torrentcreator.glade:182 msgid "Save Torrent File As:" msgstr "" -#: plugins/TorrentCreator/torrentcreator.glade:237 +#: plugins/TorrentCreator/torrentcreator.glade:235 msgid "Load this torrent into Deluge for seeding" msgstr "" -#: plugins/TorrentCreator/torrentcreator.glade:238 +#: plugins/TorrentCreator/torrentcreator.glade:236 msgid "Add new torrent to queue" msgstr "" -#: plugins/TorrentCreator/torrentcreator.glade:257 +#: plugins/TorrentCreator/torrentcreator.glade:255 msgid "Torrent File" msgstr "" -#: plugins/TorrentCreator/torrentcreator.glade:305 +#: plugins/TorrentCreator/torrentcreator.glade:302 msgid "Trackers" msgstr "" -#: plugins/TorrentCreator/torrentcreator.glade:352 +#: plugins/TorrentCreator/torrentcreator.glade:348 msgid "Comments" msgstr "" -#: plugins/TorrentCreator/torrentcreator.glade:389 +#: plugins/TorrentCreator/torrentcreator.glade:384 msgid "Author" msgstr "" -#: plugins/TorrentCreator/torrentcreator.glade:425 +#: plugins/TorrentCreator/torrentcreator.glade:423 msgid "Set Private Flag" msgstr "" -#: plugins/TorrentCreator/torrentcreator.glade:441 -#: plugins/TorrentCreator/torrentcreator.glade:461 +#: plugins/TorrentCreator/torrentcreator.glade:436 +#: plugins/TorrentCreator/torrentcreator.glade:457 msgid "" "The smaller the piece sizes, the more efficient the transfers will be, but " "the actual \".torrent\" file will be larger" msgstr "" -#: plugins/TorrentCreator/torrentcreator.glade:442 +#: plugins/TorrentCreator/torrentcreator.glade:437 msgid "" "32 KiB\n" "64 KiB\n" @@ -1457,13 +1462,14 @@ msgid "" "256 KiB\n" "512 KiB\n" "1024 KiB\n" +"2048 KiB\n" msgstr "" -#: plugins/TorrentCreator/torrentcreator.glade:463 +#: plugins/TorrentCreator/torrentcreator.glade:459 msgid "Piece Size:" msgstr "" -#: plugins/TorrentCreator/torrentcreator.glade:477 +#: plugins/TorrentCreator/torrentcreator.glade:473 msgid "Advanced" msgstr "" @@ -2102,3 +2108,171 @@ msgid "" "When set to -1 (unlimited), the global limits in Deluge's preferences will " "be obeyed." msgstr "" + +#: plugins/WebUi/__init__.py:31 +msgid "Web User Interface" +msgstr "" + +#: plugins/WebUi/__init__.py:34 +msgid "" +"A Web based User Interface\n" +"\n" +"Firefox greasemonkey script: http://userscripts.org/scripts/show/12639\n" +"\n" +"Remotely add a file: \"curl -F torrent=@./test1.torrent -F pwd=deluge http://" +"localhost:8112/remote/torrent/add\"\n" +"\n" +"There is support for multiple templates, but just one is included.\n" +"\n" +"Other contributors:\n" +"*somedude : template enhancements.\n" +"*markybob : stability : synced with his changes in deluge-svn.\n" +msgstr "" + +#: plugins/WebUi/__init__.py:179 +msgid "WebUi Config" +msgstr "" + +#: plugins/WebUi/__init__.py:187 +msgid "Port Number" +msgstr "" + +#: plugins/WebUi/__init__.py:188 +msgid "New Password" +msgstr "" + +#: plugins/WebUi/__init__.py:189 +msgid "New Password(confirm)" +msgstr "" + +#: plugins/WebUi/__init__.py:190 +msgid "Template" +msgstr "" + +#: plugins/WebUi/__init__.py:191 +msgid "Button Style" +msgstr "" + +#: plugins/WebUi/__init__.py:193 +msgid "Cache Templates" +msgstr "" + +#: plugins/WebUi/__init__.py:209 +msgid "Text and image" +msgstr "" + +#: plugins/WebUi/__init__.py:209 +msgid "Image Only" +msgstr "" + +#: plugins/WebUi/__init__.py:209 +msgid "Text Only" +msgstr "" + +#: plugins/WebUi/__init__.py:243 +msgid "Confirmed Password <> New Password\n" +msgstr "" + +#: plugins/WebUi/webserver_common.py:48 +msgid "translate something" +msgstr "" + +#: plugins/WebUi/deluge_webserver.py:142 +msgid "Choose an url or a torrent, not both." +msgstr "" + +#: plugins/WebUi/deluge_webserver.py:153 +msgid "no data." +msgstr "" + +#: plugins/WebUi/deluge_webserver.py:230 +msgid "refresh must be > 0" +msgstr "" + +#: plugins/WebUi/deluge_webserver.py:238 +msgid "Download Speed Limit" +msgstr "" + +#: plugins/WebUi/deluge_webserver.py:242 +msgid "Upload Speed Limit" +msgstr "" + +#: plugins/WebUi/scripts/template_strings.py:1 +msgid "# Of Files" +msgstr "" + +#: plugins/WebUi/scripts/template_strings.py:2 +msgid "About" +msgstr "" + +#: plugins/WebUi/scripts/template_strings.py:3 +msgid "Auto refresh:" +msgstr "" + +#: plugins/WebUi/scripts/template_strings.py:5 +msgid "Debug:Data Dump" +msgstr "" + +#: plugins/WebUi/scripts/template_strings.py:7 +msgid "Delete downloaded files." +msgstr "" + +#: plugins/WebUi/scripts/template_strings.py:9 +msgid "Downloaded" +msgstr "" + +#: plugins/WebUi/scripts/template_strings.py:11 +msgid "Next Announce" +msgstr "" + +#: plugins/WebUi/scripts/template_strings.py:12 +msgid "Off" +msgstr "" + +#: plugins/WebUi/scripts/template_strings.py:14 +msgid "Password is invalid,try again" +msgstr "" + +#: plugins/WebUi/scripts/template_strings.py:16 +msgid "Pieces" +msgstr "" + +#: plugins/WebUi/scripts/template_strings.py:17 +msgid "Refresh page every:" +msgstr "" + +#: plugins/WebUi/scripts/template_strings.py:20 +msgid "Set" +msgstr "" + +#: plugins/WebUi/scripts/template_strings.py:23 +msgid "Submit" +msgstr "" + +#: plugins/WebUi/scripts/template_strings.py:24 +msgid "Total Size" +msgstr "" + +#: plugins/WebUi/scripts/template_strings.py:25 +msgid "Tracker" +msgstr "" + +#: plugins/WebUi/scripts/template_strings.py:26 +msgid "Tracker Status" +msgstr "" + +#: plugins/WebUi/scripts/template_strings.py:27 +msgid "Upload torrent" +msgstr "" + +#: plugins/WebUi/scripts/template_strings.py:28 +msgid "Uploaded" +msgstr "" + +#: plugins/WebUi/scripts/template_strings.py:29 +msgid "Url" +msgstr "" + +#: plugins/WebUi/scripts/template_strings.py:30 +msgid "seconds" +msgstr "" diff --git a/po/eo.po b/po/eo.po new file mode 100644 index 000000000..5bcba1826 --- /dev/null +++ b/po/eo.po @@ -0,0 +1,2107 @@ +# Esperanto translation for deluge +# Copyright (c) 2007 Rosetta Contributors and Canonical Ltd 2007 +# This file is distributed under the same license as the deluge package. +# FIRST AUTHOR , 2007. +# +msgid "" +msgstr "" +"Project-Id-Version: deluge\n" +"Report-Msgid-Bugs-To: FULL NAME \n" +"POT-Creation-Date: 2007-10-15 10:51-0500\n" +"PO-Revision-Date: 2007-10-22 13:54+0000\n" +"Last-Translator: FULL NAME \n" +"Language-Team: Esperanto \n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"X-Launchpad-Export-Date: 2007-10-23 03:22+0000\n" +"X-Generator: Launchpad (build Unknown)\n" + +#: glade/delugegtk.glade:204 +msgid "Downloaded:" +msgstr "Elŝutita :" + +#: glade/delugegtk.glade:218 +msgid "Uploaded:" +msgstr "Alŝutita :" + +#: glade/delugegtk.glade:236 +msgid "Seeders:" +msgstr "" + +#: glade/delugegtk.glade:254 +msgid "Share Ratio:" +msgstr "" + +#: glade/delugegtk.glade:273 glade/delugegtk.glade:292 +msgid "Speed:" +msgstr "" + +#: glade/delugegtk.glade:313 +msgid "Peers:" +msgstr "" + +#: glade/delugegtk.glade:334 +msgid "ETA:" +msgstr "" + +#: glade/delugegtk.glade:351 +msgid "Pieces:" +msgstr "" + +#: glade/delugegtk.glade:389 +msgid "Availability:" +msgstr "" + +#: glade/delugegtk.glade:430 +msgid "Statistics" +msgstr "" + +#: glade/delugegtk.glade:486 +msgid "Path:" +msgstr "" + +#: glade/delugegtk.glade:520 +msgid "Total Size:" +msgstr "" + +#: glade/delugegtk.glade:582 +msgid "Tracker Status:" +msgstr "" + +#: glade/delugegtk.glade:615 +msgid "Next Announce:" +msgstr "" + +#: glade/delugegtk.glade:654 +msgid "# of files:" +msgstr "" + +#: glade/delugegtk.glade:682 +msgid "Tracker:" +msgstr "" + +#: glade/delugegtk.glade:706 +msgid "Name:" +msgstr "" + +#: glade/delugegtk.glade:723 +msgid "Torrent Info" +msgstr "" + +#: glade/delugegtk.glade:750 +msgid "Details" +msgstr "" + +#: glade/delugegtk.glade:790 +msgid "_File" +msgstr "" + +#: glade/delugegtk.glade:797 glade/tray_menu.glade:61 +msgid "_Add Torrent" +msgstr "" + +#: glade/delugegtk.glade:812 +msgid "Add _URL" +msgstr "" + +#: glade/delugegtk.glade:820 +msgid "_Clear Completed" +msgstr "" + +#: glade/delugegtk.glade:853 +msgid "_Edit" +msgstr "" + +#: glade/delugegtk.glade:862 +msgid "gtk-select-all" +msgstr "" + +#: glade/delugegtk.glade:878 +msgid "Plu_gins" +msgstr "" + +#: glade/delugegtk.glade:906 +msgid "_Torrent" +msgstr "" + +#: glade/delugegtk.glade:913 +msgid "_View" +msgstr "" + +#: glade/delugegtk.glade:921 +msgid "_Toolbar" +msgstr "" + +#: glade/delugegtk.glade:930 +msgid "_Details" +msgstr "" + +#: glade/delugegtk.glade:939 +msgid "_Columns" +msgstr "" + +#: glade/delugegtk.glade:947 src/interface.py:595 src/files.py:79 +msgid "Size" +msgstr "" + +#: glade/delugegtk.glade:956 src/interface.py:599 +msgid "Status" +msgstr "" + +#: glade/delugegtk.glade:965 src/interface.py:601 +msgid "Seeders" +msgstr "" + +#: glade/delugegtk.glade:974 src/interface.py:604 +#: plugins/TorrentPeers/__init__.py:72 +msgid "Peers" +msgstr "" + +#: glade/delugegtk.glade:983 src/interface.py:607 src/interface.py:1105 +#: src/interface.py:1136 plugins/TorrentPeers/tab_peers.py:89 +msgid "Down Speed" +msgstr "" + +#: glade/delugegtk.glade:992 src/interface.py:610 src/interface.py:1106 +#: src/interface.py:1137 plugins/TorrentPeers/tab_peers.py:91 +msgid "Up Speed" +msgstr "" + +#: glade/delugegtk.glade:1001 +msgid "Time Remaining" +msgstr "" + +#: glade/delugegtk.glade:1010 +msgid "Availability" +msgstr "" + +#: glade/delugegtk.glade:1019 +msgid "Share Ratio" +msgstr "" + +#: glade/delugegtk.glade:1036 +msgid "_Help" +msgstr "" + +#: glade/delugegtk.glade:1044 +msgid "Help translate this application" +msgstr "" + +#: glade/delugegtk.glade:1045 +msgid "_Translate This Application..." +msgstr "" + +#: glade/delugegtk.glade:1068 +msgid "Runs the first-time configuration wizard" +msgstr "" + +#: glade/delugegtk.glade:1069 +msgid "_Run Configuration Wizard" +msgstr "" + +#: glade/delugegtk.glade:1142 +msgid "Add Torrent" +msgstr "" + +#: glade/delugegtk.glade:1143 +msgid "Add" +msgstr "" + +#: glade/delugegtk.glade:1156 glade/dgtkpopups.glade:6 +msgid "Remove Torrent" +msgstr "" + +#: glade/delugegtk.glade:1157 +msgid "Remove" +msgstr "" + +#: glade/delugegtk.glade:1169 +msgid "Clear Seeding Torrents" +msgstr "" + +#: glade/delugegtk.glade:1170 +msgid "Clear" +msgstr "" + +#: glade/delugegtk.glade:1192 +msgid "Start or Resume Torrent" +msgstr "" + +#: glade/delugegtk.glade:1193 +msgid "Resume" +msgstr "" + +#: glade/delugegtk.glade:1206 +msgid "Pause Torrent" +msgstr "" + +#: glade/delugegtk.glade:1207 +msgid "Pause" +msgstr "" + +#: glade/delugegtk.glade:1219 +msgid "Queue Torrent Up" +msgstr "" + +#: glade/delugegtk.glade:1220 +msgid "Up" +msgstr "" + +#: glade/delugegtk.glade:1233 +msgid "Queue Torrent Down" +msgstr "" + +#: glade/delugegtk.glade:1234 +msgid "Down" +msgstr "" + +#: glade/delugegtk.glade:1255 +msgid "Change Deluge preferences" +msgstr "" + +#: glade/delugegtk.glade:1256 +msgid "Preferences" +msgstr "" + +#: glade/delugegtk.glade:1269 glade/dgtkpopups.glade:209 +#: glade/preferences_dialog.glade:2709 +msgid "Plugins" +msgstr "" + +#: glade/dgtkpopups.glade:41 +msgid "" +"Are you sure you want to remove the selected " +"torrent(s) from Deluge?" +msgstr "" + +#: glade/dgtkpopups.glade:65 +msgid "Delete downloaded files" +msgstr "" + +#: glade/dgtkpopups.glade:88 +msgid "Delete .torrent file" +msgstr "" + +#: glade/dgtkpopups.glade:155 +msgid "Show/Hide" +msgstr "" + +#: glade/dgtkpopups.glade:163 +msgid "Add a Torrent..." +msgstr "" + +#: glade/dgtkpopups.glade:179 +msgid "Clear Finished" +msgstr "" + +#: glade/dgtkpopups.glade:241 +msgid "Speed" +msgstr "" + +#: glade/file_tab_menu.glade:11 +msgid "_Open File" +msgstr "" + +#: glade/file_tab_menu.glade:33 +msgid "Select All" +msgstr "" + +#: glade/file_tab_menu.glade:48 +msgid "Unselect All" +msgstr "" + +#: glade/file_tab_menu.glade:68 src/core.py:100 +msgid "Don't download" +msgstr "" + +#: glade/file_tab_menu.glade:83 src/core.py:101 +msgid "Normal" +msgstr "" + +#: glade/file_tab_menu.glade:98 src/core.py:102 +msgid "High" +msgstr "" + +#: glade/file_tab_menu.glade:113 src/core.py:103 +msgid "Highest" +msgstr "" + +#: glade/merge_dialog.glade:7 +msgid "Deluge Merge Tracker Lists" +msgstr "" + +#: glade/merge_dialog.glade:23 +msgid "" +"Torrent already detected in Deluge, would you like to merge the tracker " +"lists?" +msgstr "" + +#: glade/preferences_dialog.glade:9 +msgid "Deluge Preferences" +msgstr "" + +#: glade/preferences_dialog.glade:57 +msgid "Ask where to save each download" +msgstr "" + +#: glade/preferences_dialog.glade:75 glade/wizard.glade:187 +#: plugins/MoveTorrent/movetorrent.glade:35 +msgid "Select A Folder" +msgstr "" + +#: glade/preferences_dialog.glade:87 glade/preferences_dialog.glade:88 +msgid "Store all downloads in:" +msgstr "" + +#: glade/preferences_dialog.glade:108 +msgid "Download Location" +msgstr "" + +#: glade/preferences_dialog.glade:142 glade/preferences_dialog.glade:155 +#: glade/wizard.glade:237 glade/wizard.glade:478 +msgid "" +"The number of active torrents that Deluge will run. Set to -1 for unlimited." +msgstr "" + +#: glade/preferences_dialog.glade:144 +msgid "Maximum simultaneous active torrents:" +msgstr "" + +#: glade/preferences_dialog.glade:175 glade/preferences_dialog.glade:176 +msgid "Enable selecting files for torrents before loading" +msgstr "" + +#: glade/preferences_dialog.glade:190 glade/preferences_dialog.glade:191 +msgid "Prioritize first and last pieces of files in torrent" +msgstr "" + +#: glade/preferences_dialog.glade:207 +msgid "Torrents" +msgstr "" + +#: glade/preferences_dialog.glade:245 +msgid "" +"Full allocation preallocates all of the space that is needed for the torrent " +"and prevents disk fragmentation" +msgstr "" + +#: glade/preferences_dialog.glade:246 +msgid "Use Full Allocation" +msgstr "" + +#: glade/preferences_dialog.glade:268 +msgid "Compact allocation only allocates space as needed" +msgstr "" + +#: glade/preferences_dialog.glade:269 +msgid "Use Compact Allocation" +msgstr "" + +#: glade/preferences_dialog.glade:289 +msgid "Allocation" +msgstr "" + +#: glade/preferences_dialog.glade:313 +msgid "Downloads" +msgstr "" + +#: glade/preferences_dialog.glade:357 +msgid "" +"Please Note - Changes to these settings will only be applied the next " +"time Deluge is restarted." +msgstr "" + +#: glade/preferences_dialog.glade:399 glade/wizard.glade:48 +msgid "From:" +msgstr "" + +#: glade/preferences_dialog.glade:422 glade/wizard.glade:66 +msgid "To:" +msgstr "" + +#: glade/preferences_dialog.glade:448 +msgid "Deluge will automatically choose a different port to use every time." +msgstr "" + +#: glade/preferences_dialog.glade:449 +msgid "Random Ports" +msgstr "" + +#: glade/preferences_dialog.glade:466 +msgid "Test Active Port" +msgstr "" + +#: glade/preferences_dialog.glade:492 +msgid "TCP" +msgstr "" + +#: glade/preferences_dialog.glade:504 +msgid "Active Port:" +msgstr "" + +#: glade/preferences_dialog.glade:517 +msgid "0000" +msgstr "" + +#: glade/preferences_dialog.glade:555 +msgid "Distributed hash table may improve the amount of active connections." +msgstr "" + +#: glade/preferences_dialog.glade:556 +msgid "Enable Mainline DHT" +msgstr "" + +#: glade/preferences_dialog.glade:569 +msgid "DHT" +msgstr "" + +#: glade/preferences_dialog.glade:603 +msgid "Universal Plug and Play" +msgstr "" + +#: glade/preferences_dialog.glade:604 +msgid "UPnP" +msgstr "" + +#: glade/preferences_dialog.glade:618 +msgid "NAT Port Mapping Protocol" +msgstr "" + +#: glade/preferences_dialog.glade:619 +msgid "NAT-PMP" +msgstr "" + +#: glade/preferences_dialog.glade:634 +msgid "µTorrent Peer-Exchange" +msgstr "" + +#: glade/preferences_dialog.glade:635 +msgid "µTorrent-PeX" +msgstr "" + +#: glade/preferences_dialog.glade:653 +msgid "Network Extras" +msgstr "" + +#: glade/preferences_dialog.glade:693 +msgid "Inbound:" +msgstr "" + +#: glade/preferences_dialog.glade:702 glade/preferences_dialog.glade:724 +msgid "" +"Disabled\n" +"Enabled\n" +"Forced" +msgstr "" + +#: glade/preferences_dialog.glade:715 +msgid "Outbound:" +msgstr "" + +#: glade/preferences_dialog.glade:742 +msgid "Prefer to encrypt the entire stream" +msgstr "" + +#: glade/preferences_dialog.glade:755 +msgid "Level:" +msgstr "" + +#: glade/preferences_dialog.glade:764 +msgid "" +"Handshake\n" +"Full Stream\n" +"Either" +msgstr "" + +#: glade/preferences_dialog.glade:785 +msgid "Encryption" +msgstr "" + +#: glade/preferences_dialog.glade:815 +msgid "Network" +msgstr "" + +#: glade/preferences_dialog.glade:855 +msgid "Queue torrents to bottom when they begin seeding" +msgstr "" + +#: glade/preferences_dialog.glade:867 +msgid "Queue new torrents above completed ones" +msgstr "" + +#: glade/preferences_dialog.glade:883 +msgid "Stop seeding torrents when their share ratio reaches:" +msgstr "" + +#: glade/preferences_dialog.glade:919 +msgid "Automatically clear torrents that reach the max share ratio" +msgstr "" + +#: glade/preferences_dialog.glade:935 +msgid "Seeding" +msgstr "" + +#: glade/preferences_dialog.glade:964 src/core.py:91 +msgid "Seeding" +msgstr "" + +#: glade/preferences_dialog.glade:1009 glade/wizard.glade:257 +#: glade/wizard.glade:318 +msgid "The maximum upload slots for all torrents. Set -1 for unlimited." +msgstr "" + +#: glade/preferences_dialog.glade:1026 glade/preferences_dialog.glade:1110 +#: glade/preferences_dialog.glade:1130 glade/wizard.glade:277 +#: glade/wizard.glade:341 +msgid "The maximum upload speed for all torrents. Set -1 for unlimited." +msgstr "" + +#: glade/preferences_dialog.glade:1044 glade/preferences_dialog.glade:1060 +msgid "The maximum download speed for all torrents. Set -1 for unlimited." +msgstr "" + +#: glade/preferences_dialog.glade:1062 +msgid "Maximum Download Speed (KiB/s):" +msgstr "" + +#: glade/preferences_dialog.glade:1073 glade/preferences_dialog.glade:1092 +#: glade/wizard.glade:297 glade/wizard.glade:364 +msgid "The maximum number of connections allowed. Set -1 for unlimited." +msgstr "" + +#: glade/preferences_dialog.glade:1094 glade/preferences_dialog.glade:1278 +#: glade/wizard.glade:298 +msgid "Maximum Connections:" +msgstr "" + +#: glade/preferences_dialog.glade:1112 glade/wizard.glade:278 +msgid "Maximum Upload Speed (KiB/s):" +msgstr "" + +#: glade/preferences_dialog.glade:1132 glade/preferences_dialog.glade:1259 +#: glade/wizard.glade:258 +msgid "Maximum Upload Slots:" +msgstr "" + +#: glade/preferences_dialog.glade:1150 glade/preferences_dialog.glade:1166 +#: glade/wizard.glade:434 glade/wizard.glade:455 +msgid "" +"The maximum half-open connections. A high value may crash some cheap " +"routers. Set -1 for unlimited." +msgstr "" + +#: glade/preferences_dialog.glade:1152 glade/wizard.glade:435 +msgid "Maximum Half-Open Connections:" +msgstr "" + +#: glade/preferences_dialog.glade:1186 +msgid "Global Bandwidth Usage" +msgstr "" + +#: glade/preferences_dialog.glade:1222 glade/preferences_dialog.glade:1257 +msgid "The maximum upload slots per torrent. Set -1 for unlimited." +msgstr "" + +#: glade/preferences_dialog.glade:1239 glade/preferences_dialog.glade:1276 +msgid "The maximum number of connections per torrent. Set -1 for unlimited." +msgstr "" + +#: glade/preferences_dialog.glade:1291 +msgid "Per Torrent Bandwidth Usage" +msgstr "" + +#: glade/preferences_dialog.glade:1317 +msgid "Bandwidth" +msgstr "" + +#: glade/preferences_dialog.glade:1362 glade/preferences_dialog.glade:1556 +#: glade/preferences_dialog.glade:1750 glade/preferences_dialog.glade:1944 +msgid "Affects regular bittorrent peers" +msgstr "" + +#: glade/preferences_dialog.glade:1363 +msgid "Peer Proxy" +msgstr "" + +#: glade/preferences_dialog.glade:1408 glade/preferences_dialog.glade:1602 +#: glade/preferences_dialog.glade:1796 glade/preferences_dialog.glade:1990 +msgid "Port" +msgstr "" + +#: glade/preferences_dialog.glade:1421 glade/preferences_dialog.glade:1615 +#: glade/preferences_dialog.glade:1809 glade/preferences_dialog.glade:2003 +msgid "Server" +msgstr "" + +#: glade/preferences_dialog.glade:1462 glade/preferences_dialog.glade:1656 +#: glade/preferences_dialog.glade:1850 glade/preferences_dialog.glade:2044 +msgid "" +"None\n" +"Socksv4\n" +"Socksv5\n" +"Socksv5 W/ Auth\n" +"HTTP\n" +"HTTP W/ Auth" +msgstr "" + +#: glade/preferences_dialog.glade:1478 glade/preferences_dialog.glade:1672 +#: glade/preferences_dialog.glade:1866 glade/preferences_dialog.glade:2060 +msgid "Password" +msgstr "" + +#: glade/preferences_dialog.glade:1489 glade/preferences_dialog.glade:1683 +#: glade/preferences_dialog.glade:1877 glade/preferences_dialog.glade:2071 +msgid "Username" +msgstr "" + +#: glade/preferences_dialog.glade:1500 glade/preferences_dialog.glade:1694 +#: glade/preferences_dialog.glade:1888 glade/preferences_dialog.glade:2082 +msgid "Proxy type" +msgstr "" + +#: glade/preferences_dialog.glade:1525 +msgid "Peer Proxy" +msgstr "" + +#: glade/preferences_dialog.glade:1557 +msgid "Tracker Proxy" +msgstr "" + +#: glade/preferences_dialog.glade:1719 +msgid "Tracker Proxy" +msgstr "" + +#: glade/preferences_dialog.glade:1751 +msgid "DHT Proxy" +msgstr "" + +#: glade/preferences_dialog.glade:1913 +msgid "DHT Proxy" +msgstr "" + +#: glade/preferences_dialog.glade:1945 +msgid "Web Seed Proxy" +msgstr "" + +#: glade/preferences_dialog.glade:2107 +msgid "Web Seed Proxy" +msgstr "" + +#: glade/preferences_dialog.glade:2134 +msgid "Proxies" +msgstr "" + +#: glade/preferences_dialog.glade:2162 +msgid "Enable system tray icon" +msgstr "" + +#: glade/preferences_dialog.glade:2178 +msgid "Minimize to tray on close" +msgstr "" + +#: glade/preferences_dialog.glade:2197 +msgid "Start in tray" +msgstr "" + +#: glade/preferences_dialog.glade:2221 +msgid "Password protect system tray" +msgstr "" + +#: glade/preferences_dialog.glade:2239 +msgid "Password:" +msgstr "" + +#: glade/preferences_dialog.glade:2281 +msgid "System Tray" +msgstr "" + +#: glade/preferences_dialog.glade:2323 +msgid "Open folder with:" +msgstr "" + +#: glade/preferences_dialog.glade:2340 +msgid "Custom:" +msgstr "" + +#: glade/preferences_dialog.glade:2363 +msgid "" +"Auto-detect (xdg-open)\n" +"Konqueror\n" +"Nautilus\n" +"Thunar" +msgstr "" + +#: glade/preferences_dialog.glade:2410 +msgid "Desktop File Manager - only for non-Windows platforms" +msgstr "" + +#: glade/preferences_dialog.glade:2442 +msgid "GUI update interval (seconds)" +msgstr "" + +#: glade/preferences_dialog.glade:2470 +msgid "Performance" +msgstr "" + +#: glade/preferences_dialog.glade:2504 +msgid "" +"Deluge will check our servers and will tell you if a newer version has been " +"released" +msgstr "" + +#: glade/preferences_dialog.glade:2505 +msgid "Be alerted about new releases" +msgstr "" + +#: glade/preferences_dialog.glade:2522 +msgid "Updates" +msgstr "" + +#: glade/preferences_dialog.glade:2551 +msgid "" +"Help us improve Deluge by sending us your Python and PyGTK\n" +"versions, OS and processor types. Absolutely no other\n" +"information is sent." +msgstr "" + +#: glade/preferences_dialog.glade:2564 +msgid "System Information" +msgstr "" + +#: glade/preferences_dialog.glade:2587 +#: plugins/EventLogging/event_logging_preferences.glade:52 +#: plugins/EventLogging/tab_log.py:218 +msgid "Other" +msgstr "" + +#: glade/preferences_dialog.glade:2681 +msgid "gtk-preferences" +msgstr "" + +#: glade/torrent_menu.glade:11 +msgid "Re_sume" +msgstr "" + +#: glade/torrent_menu.glade:28 +msgid "_Pause" +msgstr "" + +#: glade/torrent_menu.glade:49 +msgid "_Update Tracker" +msgstr "" + +#: glade/torrent_menu.glade:66 +msgid "_Edit Trackers" +msgstr "" + +#: glade/torrent_menu.glade:88 +msgid "_Remove Torrent" +msgstr "" + +#: glade/torrent_menu.glade:111 +msgid "_Queue" +msgstr "" + +#: glade/torrent_menu.glade:121 +msgid "_Top" +msgstr "" + +#: glade/torrent_menu.glade:137 +msgid "_Up" +msgstr "" + +#: glade/torrent_menu.glade:153 +msgid "_Down" +msgstr "" + +#: glade/torrent_menu.glade:169 +msgid "_Bottom" +msgstr "" + +#: glade/torrent_menu.glade:198 +msgid "_Open Containing Folder" +msgstr "" + +#: glade/tray_menu.glade:12 +msgid "_Show Deluge" +msgstr "" + +#: glade/tray_menu.glade:21 +msgid "_Resume All" +msgstr "" + +#: glade/tray_menu.glade:38 +msgid "_Pause All" +msgstr "" + +#: glade/tray_menu.glade:84 +msgid "_Download Speed Limit" +msgstr "" + +#: glade/tray_menu.glade:100 +msgid "_Upload Speed Limit" +msgstr "" + +#: glade/tray_menu.glade:122 +msgid "_Quit" +msgstr "" + +#: glade/edit_trackers.glade:9 +msgid "Edit Trackers" +msgstr "" + +#: glade/edit_trackers.glade:19 +msgid "Tracker Editing" +msgstr "" + +#: glade/files_dialog.glade:8 +msgid "Deluge File Selection" +msgstr "" + +#: glade/files_dialog.glade:42 +msgid "Torrent will not be distributed on the trackerless (DHT) network" +msgstr "" + +#: glade/files_dialog.glade:43 +msgid "Set the private flag" +msgstr "" + +#: glade/wizard.glade:10 +msgid "First Launch Configuration" +msgstr "" + +#: glade/wizard.glade:20 +msgid "" +"This wizard will help you set up Deluge to your liking. If you are new to " +"Deluge, please note that most of Deluge's functionality and features come in " +"the form of plugins, which can be accessed by clicking on Plugins in the " +"Edit menu or the toolbar." +msgstr "" + +#: glade/wizard.glade:36 +msgid "" +"Deluge needs a range of ports that it will try to listen to for incoming " +"connections. The default ports for bittorrent are 6881-6889, however, most " +"ISPs block those ports, so you're encouraged to pick others, between 49152 " +"and 65535. Alternatively, you can have Deluge automatically pick random " +"ports for you." +msgstr "" + +#: glade/wizard.glade:88 +msgid "Use _Random Ports" +msgstr "" + +#: glade/wizard.glade:116 +msgid "" +"Would you like Deluge to automatically download to a predefined location, or " +"would you like to specify the download location every time?" +msgstr "" + +#: glade/wizard.glade:141 +msgid "Ask where to save each file" +msgstr "" + +#: glade/wizard.glade:165 +msgid "Store all downloads in: " +msgstr "" + +#: glade/wizard.glade:215 +msgid "" +"Please select the upload speed of your connection, which we will then use to " +"automatically make suggestions for the settings below" +msgstr "" + +#: glade/wizard.glade:238 +msgid "Maximum Active Torrents:" +msgstr "" + +#: glade/wizard.glade:386 +msgid "" +"28.8k\n" +"56k\n" +"64k\n" +"96k\n" +"128k\n" +"192k\n" +"256k\n" +"384k\n" +"512k\n" +"640k\n" +"768k\n" +"1Mbit\n" +"2Mbit\n" +"10Mbit\n" +"20Mbit\n" +"40Mbit\n" +"50Mbit\n" +"100Mbit" +msgstr "" + +#: glade/wizard.glade:419 +msgid "Your Upload Line Speed:" +msgstr "" + +#: glade/wizard.glade:506 +msgid "" +"_Help us improve Deluge by sending us your Python and PyGTK\n" +"versions, OS and processor types. Absolutely no other\n" +"information is sent." +msgstr "" + +#: src/interface.py:261 src/interface.py:267 src/interface.py:348 +#: src/interface.py:374 plugins/SpeedLimiter/__init__.py:82 +#: plugins/SpeedLimiter/__init__.py:92 plugins/SpeedLimiter/__init__.py:136 +#: plugins/SpeedLimiter/__init__.py:168 +msgid "KiB/s" +msgstr "" + +#: src/interface.py:288 src/interface.py:349 src/interface.py:375 +#: src/interface.py:1087 src/interface.py:1094 src/interface.py:1099 +#: src/interface.py:1127 src/interface.py:1129 +#: plugins/SpeedLimiter/__init__.py:137 plugins/SpeedLimiter/__init__.py:169 +msgid "Unlimited" +msgstr "" + +#: src/interface.py:291 +msgid "Activated" +msgstr "" + +#: src/interface.py:340 src/interface.py:352 src/interface.py:378 +#: plugins/DesiredRatio/__init__.py:114 plugins/SpeedLimiter/__init__.py:140 +#: plugins/SpeedLimiter/__init__.py:172 +msgid "Other..." +msgstr "" + +#: src/interface.py:357 +msgid "Download Speed (KiB/s):" +msgstr "" + +#: src/interface.py:383 +msgid "Upload Speed (KiB/s):" +msgstr "" + +#: src/interface.py:412 +msgid "Deluge is locked" +msgstr "" + +#: src/interface.py:415 +msgid "" +"Deluge is password protected.\n" +"To show the Deluge window, please enter your password" +msgstr "" + +#: src/interface.py:563 src/common.py:76 +msgid "Infinity" +msgstr "" + +#: src/interface.py:575 +msgid "Unknown" +msgstr "" + +#: src/interface.py:592 plugins/SimpleRSS/plugin.py:68 +#: plugins/SimpleRSS/plugin.py:76 plugins/SimpleRSS/plugin.py:83 +#: plugins/TorrentSearch/plugin.py:51 +msgid "Name" +msgstr "" + +#: src/interface.py:613 +msgid "ETA" +msgstr "" + +#: src/interface.py:616 +msgid "Avail." +msgstr "" + +#: src/interface.py:618 +msgid "Ratio" +msgstr "" + +#: src/interface.py:863 +#, python-format +msgid "Paused %s" +msgstr "" + +#: src/interface.py:1105 +msgid "Connections" +msgstr "" + +#: src/interface.py:1123 +msgid "DHT" +msgstr "" + +#: src/interface.py:1132 plugins/TorrentCreator/__init__.py:148 +msgid "Deluge" +msgstr "" + +#: src/interface.py:1132 +msgid "Download" +msgstr "" + +#: src/interface.py:1133 +msgid "Upload" +msgstr "" + +#: src/interface.py:1136 +msgid "Deluge Bittorrent Client" +msgstr "" + +#: src/interface.py:1213 +msgid "Choose a download directory" +msgstr "" + +#: src/interface.py:1240 +msgid "" +"An error occured while trying to add the torrent. It's possible your " +".torrent file is corrupted." +msgstr "" + +#: src/interface.py:1265 +msgid "Unknown duplicate torrent error." +msgstr "" + +#: src/interface.py:1270 +msgid "" +"There is not enough free disk space to complete your download." +msgstr "" + +#: src/interface.py:1272 +msgid "Space Needed:" +msgstr "" + +#: src/interface.py:1273 +msgid "Available Space:" +msgstr "" + +#: src/interface.py:1290 +msgid "Add torrent from URL" +msgstr "" + +#: src/interface.py:1294 +msgid "Enter the URL of the .torrent to download" +msgstr "" + +#: src/interface.py:1355 +msgid "Warning - all downloaded files for this torrent will be deleted!" +msgstr "" + +#: src/interface.py:1366 +msgid "Are you sure that you want to remove all seeding torrents?" +msgstr "" + +#: src/core.py:85 +msgid "Queued" +msgstr "" + +#: src/core.py:86 +msgid "Checking" +msgstr "" + +#: src/core.py:87 +msgid "Connecting" +msgstr "" + +#: src/core.py:88 +msgid "Downloading Metadata" +msgstr "" + +#: src/core.py:89 plugins/BlocklistImport/ui.py:117 +msgid "Downloading" +msgstr "" + +#: src/core.py:90 +msgid "Finished" +msgstr "" + +#: src/core.py:92 +msgid "Allocating" +msgstr "" + +#: src/core.py:135 +msgid "bytes needed" +msgstr "" + +#: src/core.py:374 +msgid "File was not found" +msgstr "" + +#: src/core.py:430 +msgid "Asked for a torrent that doesn't exist" +msgstr "" + +#: src/core.py:636 +msgid "Announce sent" +msgstr "" + +#: src/core.py:643 +msgid "Announce OK" +msgstr "" + +#: src/core.py:649 +msgid "Alert" +msgstr "" + +#: src/core.py:650 +msgid "HTTP code" +msgstr "" + +#: src/core.py:651 +msgid "times in a row" +msgstr "" + +#: src/core.py:658 +msgid "Warning" +msgstr "" + +#: src/files.py:77 +msgid "Filename" +msgstr "" + +#: src/files.py:81 +msgid "Priority" +msgstr "" + +#: src/files.py:103 +msgid "" +"File priority can only be set when using full allocation.\n" +"Please change your preference to disable compact allocation, then remove and " +"re-add this torrent." +msgstr "" + +#: src/dialogs.py:68 +msgid "Plugin" +msgstr "" + +#: src/dialogs.py:70 +msgid "Enabled" +msgstr "" + +#: src/dialogs.py:428 +msgid "translator-credits" +msgstr "" +"Launchpad Contributions:\n" +" Olivier FAURAX https://launchpad.net/~olivier-faurax" + +#: src/dialogs.py:429 +msgid "" +"Deluge is free software, you can redistribute it and/or\n" +"modify it under the terms of the GNU General Public\n" +" License as published by the Free Software Foundation,\n" +"either version 2 of the License, or (at your option) any\n" +"later version. Deluge is distributed in the hope that it\n" +"will be useful, but WITHOUT ANY WARRANTY, without even \n" +"the implied warranty of MERCHANTABILITY or FITNESS\n" +"FOR A PARTICULAR PURPOSE. See the GNU General\n" +"Public License for more details. You should have received\n" +"a copy of the GNU General Public License along with\n" +"Deluge, but if not, write to the Free Software Foundation,\n" +" Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-\n" +"1301 USA" +msgstr "" + +#: src/dialogs.py:469 +msgid "Choose a .torrent file" +msgstr "" + +#: src/dialogs.py:474 +msgid "Torrent files" +msgstr "" + +#: src/dialogs.py:478 +msgid "All files" +msgstr "" + +#: src/common.py:90 +msgid "KiB" +msgstr "" + +#: src/common.py:93 +msgid "MiB" +msgstr "" + +#: src/common.py:96 +msgid "GiB" +msgstr "" + +#: src/common.py:99 +msgid "TiB" +msgstr "" + +#: src/common.py:101 +msgid "PiB" +msgstr "" + +#: src/common.py:203 +msgid "External command" +msgstr "" + +#: src/common.py:204 +msgid "not found" +msgstr "" + +#: src/common.py:240 +msgid "" +"There is a newer version of Deluge. Would you like to be taken to our " +"download site?" +msgstr "" + +#: plugins/BlocklistImport/__init__.py:6 +msgid "Blocklist Importer" +msgstr "" + +#: plugins/BlocklistImport/__init__.py:9 +msgid "" +"\n" +"Download and import various IP blocklists.\n" +"\n" +"Currently this plugin can handle PeerGuardian (binary and text),\n" +"SafePeer and Emule lists. PeerGuardian 7zip format files are not\n" +"supported. Files may be specified as URLs or locations on the local\n" +"filesystem.\n" +"\n" +"A page with pointer to blocklist download sites is available on the\n" +"wiki:\n" +"\n" +"http://dev.deluge-torrent.org/wiki/BlocklistPlugin\n" +msgstr "" + +#: plugins/BlocklistImport/__init__.py:40 +msgid "PeerGuardian P2B (GZip)" +msgstr "" + +#: plugins/BlocklistImport/__init__.py:41 +msgid "PeerGuardian Text (Uncompressed)" +msgstr "" + +#: plugins/BlocklistImport/__init__.py:42 +msgid "Emule IP list (GZip)" +msgstr "" + +#: plugins/BlocklistImport/__init__.py:43 +msgid "SafePeer Text (Zipped)" +msgstr "" + +#: plugins/BlocklistImport/__init__.py:92 +msgid "Couldn't download URL" +msgstr "" + +#: plugins/BlocklistImport/__init__.py:105 +msgid "Couldn't open blocklist file" +msgstr "" + +#: plugins/BlocklistImport/__init__.py:118 +msgid "Imported" +msgstr "" + +#: plugins/BlocklistImport/__init__.py:118 +msgid "IPs" +msgstr "" + +#: plugins/BlocklistImport/__init__.py:123 +msgid "Format error in blocklist" +msgstr "" + +#: plugins/BlocklistImport/__init__.py:162 +msgid "Blocklist" +msgstr "" + +#: plugins/BlocklistImport/__init__.py:162 +msgid "entries" +msgstr "" + +#: plugins/BlocklistImport/ui.py:25 +msgid "Blocklist URL" +msgstr "" + +#: plugins/BlocklistImport/ui.py:50 +msgid "Download on start" +msgstr "" + +#: plugins/BlocklistImport/ui.py:105 +msgid "Loading and installing blocklist" +msgstr "" + +#: plugins/BlocklistImport/ui.py:128 +msgid "Importing" +msgstr "" + +#: plugins/BlocklistImport/ui.py:139 +msgid "Complete" +msgstr "" + +#: plugins/BlocklistImport/text.py:37 +msgid "Couldn't match on line" +msgstr "" + +#: plugins/BlocklistImport/peerguardian.py:28 +msgid "Invalid leader" +msgstr "" + +#: plugins/BlocklistImport/peerguardian.py:32 +msgid "Invalid magic code" +msgstr "" + +#: plugins/BlocklistImport/peerguardian.py:37 +msgid "Invalid version" +msgstr "" + +#: plugins/DesiredRatio/__init__.py:19 plugins/DesiredRatio/__init__.py:118 +msgid "Desired Ratio" +msgstr "" + +#: plugins/DesiredRatio/__init__.py:22 +msgid "Set the desired ratio for a torrent." +msgstr "" + +#: plugins/DesiredRatio/__init__.py:75 +msgid "_Desired Ratio" +msgstr "" + +#: plugins/DesiredRatio/__init__.py:79 +msgid "_Not Set" +msgstr "" + +#: plugins/DesiredRatio/__init__.py:111 +msgid "Not Set" +msgstr "" + +#: plugins/TorrentPeers/__init__.py:19 +msgid "Torrent Peers" +msgstr "" + +#: plugins/TorrentPeers/__init__.py:22 +msgid "" +"\n" +"This shows you the peers associated with each torrent and shows you their " +"ip, country, client, percent complete and upload and download speeds.\n" +msgstr "" + +#: plugins/TorrentPeers/tab_peers.py:84 +msgid "IP Address" +msgstr "" + +#: plugins/TorrentPeers/tab_peers.py:86 +msgid "Client" +msgstr "" + +#: plugins/TorrentPeers/tab_peers.py:87 +msgid "Percent Complete" +msgstr "" + +#: plugins/TorrentCreator/torrentcreator.glade:8 +#: plugins/TorrentCreator/__init__.py:19 +msgid "Torrent Creator" +msgstr "" + +#: plugins/TorrentCreator/torrentcreator.glade:103 +msgid "This torrent will be made from a single file" +msgstr "" + +#: plugins/TorrentCreator/torrentcreator.glade:104 +msgid "File:" +msgstr "" + +#: plugins/TorrentCreator/torrentcreator.glade:120 +msgid "This torrent will be made from a directory" +msgstr "" + +#: plugins/TorrentCreator/torrentcreator.glade:121 +msgid "Folder:" +msgstr "" + +#: plugins/TorrentCreator/torrentcreator.glade:138 +msgid "Source" +msgstr "" + +#: plugins/TorrentCreator/torrentcreator.glade:184 +msgid "Save Torrent File As:" +msgstr "" + +#: plugins/TorrentCreator/torrentcreator.glade:237 +msgid "Load this torrent into Deluge for seeding" +msgstr "" + +#: plugins/TorrentCreator/torrentcreator.glade:238 +msgid "Add new torrent to queue" +msgstr "" + +#: plugins/TorrentCreator/torrentcreator.glade:257 +msgid "Torrent File" +msgstr "" + +#: plugins/TorrentCreator/torrentcreator.glade:305 +msgid "Trackers" +msgstr "" + +#: plugins/TorrentCreator/torrentcreator.glade:352 +msgid "Comments" +msgstr "" + +#: plugins/TorrentCreator/torrentcreator.glade:389 +msgid "Author" +msgstr "" + +#: plugins/TorrentCreator/torrentcreator.glade:425 +msgid "Set Private Flag" +msgstr "" + +#: plugins/TorrentCreator/torrentcreator.glade:441 +#: plugins/TorrentCreator/torrentcreator.glade:461 +msgid "" +"The smaller the piece sizes, the more efficient the transfers will be, but " +"the actual \".torrent\" file will be larger" +msgstr "" + +#: plugins/TorrentCreator/torrentcreator.glade:442 +msgid "" +"32 KiB\n" +"64 KiB\n" +"128 KiB\n" +"256 KiB\n" +"512 KiB\n" +"1024 KiB\n" +msgstr "" + +#: plugins/TorrentCreator/torrentcreator.glade:463 +msgid "Piece Size:" +msgstr "" + +#: plugins/TorrentCreator/torrentcreator.glade:477 +msgid "Advanced" +msgstr "" + +#: plugins/TorrentCreator/__init__.py:22 +msgid "A torrent creator plugin" +msgstr "" + +#: plugins/TorrentCreator/__init__.py:50 +msgid "_New Torrent" +msgstr "" + +#: plugins/TorrentCreator/__init__.py:60 +msgid "New Torrent" +msgstr "" + +#: plugins/TorrentCreator/__init__.py:62 +msgid "Create New Torrent" +msgstr "" + +#: plugins/TorrentCreator/__init__.py:98 +msgid "Save file as..." +msgstr "" + +#: plugins/TorrentCreator/__init__.py:120 +msgid "You must select a source for the torrent." +msgstr "" + +#: plugins/TorrentCreator/__init__.py:127 +msgid "You must select a file to save the torrent as." +msgstr "" + +#: plugins/TorrentCreator/__init__.py:138 +msgid "You must specify at least one tracker." +msgstr "" + +#: plugins/SimpleRSS/rss.glade:7 +msgid "RSS Broadcatcher Settings" +msgstr "" + +#: plugins/SimpleRSS/rss.glade:87 +msgid "Feed Name:" +msgstr "" + +#: plugins/SimpleRSS/rss.glade:151 +msgid "Feed URL:" +msgstr "" + +#: plugins/SimpleRSS/rss.glade:283 +msgid "Feeds" +msgstr "" + +#: plugins/SimpleRSS/rss.glade:385 plugins/SimpleRSS/plugin.py:75 +msgid "Feed" +msgstr "" + +#: plugins/SimpleRSS/rss.glade:413 +msgid "Filter Exp:" +msgstr "" + +#: plugins/SimpleRSS/rss.glade:442 +msgid "Filter Name:" +msgstr "" + +#: plugins/SimpleRSS/rss.glade:543 +msgid "Filters" +msgstr "" + +#: plugins/SimpleRSS/rss.glade:564 +msgid " Feed: " +msgstr "" + +#: plugins/SimpleRSS/rss.glade:617 +msgid "Torrents" +msgstr "" + +#: plugins/SimpleRSS/rss.glade:660 +msgid "Update Interval (seconds): " +msgstr "" + +#: plugins/SimpleRSS/rss.glade:729 +msgid "Check feeds on Deluge start" +msgstr "" + +#: plugins/SimpleRSS/rss.glade:781 +msgid "Check Feeds Now" +msgstr "" + +#: plugins/SimpleRSS/rss.glade:836 +msgid "Options" +msgstr "" + +#: plugins/SimpleRSS/__init__.py:33 +msgid "Simple RSS" +msgstr "" + +#: plugins/SimpleRSS/__init__.py:36 +msgid "" +"\n" +"Download Torrents automatically from SimpleRSS Feeds\n" +"\n" +"Add RSS feeds on the 'Feeds' tab, then add filters for TV shows (or " +"whatever) on the 'Filters' tab. Double-click entries on the 'Torrents' tab " +"to download extra torrents from the feeds. The Options are pretty self-" +"explanatary.\n" +"\n" +"Please message me (SatNav) on the forums and let me know how you get on..\n" +"\n" +"Enjoy!" +msgstr "" + +#: plugins/SimpleRSS/plugin.py:69 plugins/SimpleRSS/plugin.py:77 +msgid "URL" +msgstr "" + +#: plugins/SimpleRSS/plugin.py:70 +msgid "Last Entry Date" +msgstr "" + +#: plugins/SimpleRSS/plugin.py:78 +msgid "Date" +msgstr "" + +#: plugins/SimpleRSS/plugin.py:135 +msgid "RSS" +msgstr "" + +#: plugins/SimpleRSS/plugin.py:137 +msgid "SimpleRSS Broadcatcher" +msgstr "" + +#: plugins/SimpleRSS/plugin.py:220 plugins/SimpleRSS/plugin.py:224 +#: plugins/SimpleRSS/plugin.py:225 plugins/SimpleRSS/plugin.py:226 +#: plugins/SimpleRSS/plugin.py:228 plugins/SimpleRSS/plugin.py:229 +#: plugins/SimpleRSS/plugin.py:230 +msgid "New Filter" +msgstr "" + +#: plugins/SimpleRSS/plugin.py:299 plugins/SimpleRSS/plugin.py:434 +#: plugins/SimpleRSS/plugin.py:435 +msgid "All" +msgstr "" + +#: plugins/TorrentNotification/notification_preferences.glade:7 +msgid "Torrent Notification Preferences" +msgstr "" + +#: plugins/TorrentNotification/notification_preferences.glade:32 +msgid "Enable event sound (requires pygame, not available on Win32)" +msgstr "" + +#: plugins/TorrentNotification/notification_preferences.glade:59 +msgid "Enable blinking tray icon" +msgstr "" + +#: plugins/TorrentNotification/notification_preferences.glade:69 +msgid "" +"Enable popup notification (requires python-notify, not available on Win32)" +msgstr "" + +#: plugins/TorrentNotification/__init__.py:19 +msgid "Torrent Notification" +msgstr "" + +#: plugins/TorrentNotification/__init__.py:22 +msgid "" +"Make tray icon blink when torrent finishes downloading and/or popup a " +"notification" +msgstr "" + +#: plugins/TorrentNotification/__init__.py:103 +msgid "Torrent complete" +msgstr "" + +#: plugins/TorrentNotification/__init__.py:104 +#: plugins/TorrentFiles/__init__.py:71 +msgid "Files" +msgstr "" + +#: plugins/NetworkHealth/__init__.py:33 +msgid "Network Health Monitor" +msgstr "" + +#: plugins/NetworkHealth/__init__.py:36 +msgid "" +"Network Health Monitor plugin\n" +"\n" +"Written by Kripkenstein" +msgstr "" + +#: plugins/NetworkHealth/plugin.py:53 +msgid "[Health: OK]" +msgstr "" + +#: plugins/EventLogging/event_logging_preferences.glade:7 +msgid "Event Logging Preferences" +msgstr "" + +#: plugins/EventLogging/event_logging_preferences.glade:28 +msgid "Enable log files" +msgstr "" + +#: plugins/EventLogging/event_logging_preferences.glade:41 +msgid "Log files" +msgstr "" + +#: plugins/EventLogging/event_logging_preferences.glade:66 +#: plugins/EventLogging/tab_log.py:210 +msgid "Peer blocked" +msgstr "" + +#: plugins/EventLogging/event_logging_preferences.glade:80 +#: plugins/EventLogging/tab_log.py:200 +msgid "Block finished" +msgstr "" + +#: plugins/EventLogging/event_logging_preferences.glade:94 +#: plugins/EventLogging/tab_log.py:189 +msgid "Block downloading" +msgstr "" + +#: plugins/EventLogging/event_logging_preferences.glade:108 +#: plugins/EventLogging/tab_log.py:179 +msgid "Piece finished" +msgstr "" + +#: plugins/EventLogging/event_logging_preferences.glade:122 +#: plugins/EventLogging/tab_log.py:170 +msgid "Storage moved" +msgstr "" + +#: plugins/EventLogging/event_logging_preferences.glade:136 +#: plugins/EventLogging/tab_log.py:161 +msgid "Tracker warning" +msgstr "" + +#: plugins/EventLogging/event_logging_preferences.glade:150 +#: plugins/EventLogging/tab_log.py:150 +msgid "Tracker alert" +msgstr "" + +#: plugins/EventLogging/event_logging_preferences.glade:164 +#: plugins/EventLogging/tab_log.py:141 +msgid "Tracker reply" +msgstr "" + +#: plugins/EventLogging/event_logging_preferences.glade:178 +#: plugins/EventLogging/tab_log.py:132 +msgid "Tracker announce" +msgstr "" + +#: plugins/EventLogging/event_logging_preferences.glade:192 +#: plugins/EventLogging/tab_log.py:123 +msgid "Fastresume rejected error" +msgstr "" + +#: plugins/EventLogging/event_logging_preferences.glade:206 +#: plugins/EventLogging/tab_log.py:114 +msgid "Peer ban error" +msgstr "" + +#: plugins/EventLogging/event_logging_preferences.glade:220 +#: plugins/EventLogging/tab_log.py:104 +msgid "Hash failed error" +msgstr "" + +#: plugins/EventLogging/event_logging_preferences.glade:234 +#: plugins/EventLogging/tab_log.py:95 +msgid "File error" +msgstr "" + +#: plugins/EventLogging/event_logging_preferences.glade:248 +#: plugins/EventLogging/tab_log.py:86 +msgid "Invalid request" +msgstr "" + +#: plugins/EventLogging/event_logging_preferences.glade:262 +msgid "Peer messages" +msgstr "" + +#: plugins/EventLogging/event_logging_preferences.glade:276 +#: plugins/EventLogging/tab_log.py:70 +msgid "Torrent finished" +msgstr "" + +#: plugins/EventLogging/event_logging_preferences.glade:289 +msgid "Select events to log" +msgstr "" + +#: plugins/EventLogging/__init__.py:19 +msgid "Event Logging" +msgstr "" + +#: plugins/EventLogging/__init__.py:22 +msgid "" +"\n" +"Adds a tab with log of selected events.\n" +"\n" +"Event messages come from libtorrent alerts.\n" +"If you want those strings translated to your locale,\n" +"you'll have to report the issue with libtorrent, not deluge.\n" +"\n" +"Regarding the log files, the logs are saved in a log\n" +"directory within the deluge config directory. Event\n" +"messages for specific torrents are saved to individual\n" +"log files named the same as the associated .torrent\n" +"file. Event messages not specific to any torrent are\n" +"saved to logs named after the events\n" +"(eg peer_messages.log).\n" +"Event messages in the log files also include a timestamp.\n" +"The user is responsible to cleanout the logs.\n" +"\n" +"As of v0.2\n" +"Events are now truncated in display. Log files are not.\n" +"New events are now displayed at the top.\n" +msgstr "" + +#: plugins/EventLogging/__init__.py:88 +msgid "Event Log" +msgstr "" + +#: plugins/EventLogging/tab_log.py:70 plugins/EventLogging/tab_log.py:78 +#: plugins/EventLogging/tab_log.py:86 plugins/EventLogging/tab_log.py:95 +#: plugins/EventLogging/tab_log.py:104 plugins/EventLogging/tab_log.py:114 +#: plugins/EventLogging/tab_log.py:132 plugins/EventLogging/tab_log.py:141 +#: plugins/EventLogging/tab_log.py:150 plugins/EventLogging/tab_log.py:161 +#: plugins/EventLogging/tab_log.py:170 plugins/EventLogging/tab_log.py:179 +#: plugins/EventLogging/tab_log.py:189 plugins/EventLogging/tab_log.py:200 +#: plugins/EventLogging/tab_log.py:210 plugins/EventLogging/tab_log.py:218 +msgid "event message: " +msgstr "" + +#: plugins/EventLogging/tab_log.py:71 plugins/EventLogging/tab_log.py:95 +#: plugins/EventLogging/tab_log.py:105 plugins/EventLogging/tab_log.py:115 +#: plugins/EventLogging/tab_log.py:124 plugins/EventLogging/tab_log.py:133 +#: plugins/EventLogging/tab_log.py:142 plugins/EventLogging/tab_log.py:151 +#: plugins/EventLogging/tab_log.py:162 plugins/EventLogging/tab_log.py:171 +#: plugins/EventLogging/tab_log.py:180 plugins/EventLogging/tab_log.py:190 +#: plugins/EventLogging/tab_log.py:201 +msgid "torrent: " +msgstr "" + +#: plugins/EventLogging/tab_log.py:78 +msgid "Peer message" +msgstr "" + +#: plugins/EventLogging/tab_log.py:78 plugins/EventLogging/tab_log.py:114 +#: plugins/EventLogging/tab_log.py:211 +msgid "ip address: " +msgstr "" + +#: plugins/EventLogging/tab_log.py:79 plugins/EventLogging/tab_log.py:86 +msgid "client: " +msgstr "" + +#: plugins/EventLogging/tab_log.py:106 plugins/EventLogging/tab_log.py:181 +#: plugins/EventLogging/tab_log.py:191 plugins/EventLogging/tab_log.py:202 +msgid "piece index: " +msgstr "" + +#: plugins/EventLogging/tab_log.py:152 +msgid "status code: " +msgstr "" + +#: plugins/EventLogging/tab_log.py:152 +msgid "Times in a row: " +msgstr "" + +#: plugins/EventLogging/tab_log.py:191 plugins/EventLogging/tab_log.py:202 +msgid "block index: " +msgstr "" + +#: plugins/EventLogging/tab_log.py:192 +msgid "peer speed: " +msgstr "" + +#: plugins/SpeedLimiter/__init__.py:17 +msgid "Speed Limiter" +msgstr "" + +#: plugins/SpeedLimiter/__init__.py:20 +msgid "Set the desired speed limit per torrent." +msgstr "" + +#: plugins/SpeedLimiter/__init__.py:80 +msgid "Torrent _Download Speed" +msgstr "" + +#: plugins/SpeedLimiter/__init__.py:90 +msgid "Torrent Upload _Speed" +msgstr "" + +#: plugins/SpeedLimiter/__init__.py:144 +msgid "Torrent Upload Speed (KiB/s):" +msgstr "" + +#: plugins/SpeedLimiter/__init__.py:176 +msgid "Torrent Download Speed (KiB/s):" +msgstr "" + +#: plugins/TorrentSearch/__init__.py:33 +msgid "Torrent Search" +msgstr "" + +#: plugins/TorrentSearch/__init__.py:36 +msgid "A searchbar for torrent search engines" +msgstr "" + +#: plugins/TorrentSearch/plugin.py:52 +msgid "Search String" +msgstr "" + +#: plugins/TorrentSearch/plugin.py:74 plugins/TorrentSearch/plugin.py:164 +msgid "Choose an Engine" +msgstr "" + +#: plugins/TorrentSearch/plugin.py:78 +msgid "Manage Engines" +msgstr "" + +#: plugins/TorrentSearch/plugin.py:185 +msgid "Search " +msgstr "" + +#: plugins/TorrentSearch/searchdlg.glade:7 +msgid "Manage Search Plugins" +msgstr "" + +#: plugins/TorrentSearch/searchdlg.glade:79 +msgid "Name:" +msgstr "" + +#: plugins/TorrentSearch/searchdlg.glade:91 plugins/WebSeed/webseed.glade:28 +msgid "URL:" +msgstr "" + +#: plugins/TorrentSearch/searchdlg.glade:123 +msgid "" +"Add a new search engine by entering a Name and a URL. For Name, enter the " +"name of the search engine to be used. For URL, enter the url of the seach " +"page. The user's search query will replace any instance of ${query} in the " +"URL.\n" +"For example, a Google search would be:\n" +"Name: Google\n" +"URL: http://www.google.com/search?q=${query}" +msgstr "" + +#: plugins/TorrentSearch/searchdlg.glade:133 +msgid "Help" +msgstr "" + +#: plugins/NetworkGraph/__init__.py:33 +msgid "Network Activity Graph" +msgstr "" + +#: plugins/NetworkGraph/__init__.py:36 +msgid "" +"Network Activity Graph plugin\n" +"\n" +"Written by Kripkenstein" +msgstr "" + +#: plugins/NetworkGraph/__init__.py:89 +msgid "Graph" +msgstr "" + +#: plugins/Locations/__init__.py:18 +msgid "Locations" +msgstr "" + +#: plugins/Locations/__init__.py:21 +msgid "" +"Automagically remembers relevant settings for different locations.\n" +"\n" +"When this plugin is active, it will remember a lot of useful network-" +"specific preferences, such as up- or download limits, open ports and proxy " +"information. Just change preferences to suit each location while connected, " +"and Deluge will automagically use those settings the next time you connect " +"at that location. There is no other configuration needed.\n" +"\n" +"The plugin determines location by identifying the unique MAC address of the " +"Gateway used for the connection. It is therefore possible to have different " +"settings for home and work, or for broadband, 3G and dial-up on the fly.\n" +msgstr "" + +#: plugins/TorrentFiles/tab_files.py:59 +msgid "Progress" +msgstr "" + +#: plugins/TorrentFiles/tab_files.py:100 +msgid "There was an error trying to launch the file." +msgstr "" + +#: plugins/TorrentFiles/__init__.py:19 +msgid "Torrent Files" +msgstr "" + +#: plugins/TorrentFiles/__init__.py:22 +msgid "" +"\n" +"This plugin shows you the files inside a torrent and allows you to set " +"priorities for them and choose which ones you want or don't want to " +"download.\n" +msgstr "" + +#: plugins/ExtraStats/__init__.py:19 +msgid "Extra Stats" +msgstr "" + +#: plugins/ExtraStats/__init__.py:22 +msgid "" +"\n" +"Adds info to tray tooltip.\n" +"Adds these stats.\n" +"total bytes downloaded\n" +"total bytes uploaded\n" +"overall ratio\n" +"torrents completed\n" +"\n" +"All of these stats come in pairs:\n" +"across sessions stat and within session stat.\n" +"By default, all pairs enabled, but can be disabled in plugin preferences.\n" +"\n" +"session data always shows up within parenthesis\n" +"eg. Total Downloaded: 5 GiB (4 MiB)\n" +"would be 5 GiB across sessions and 4 MiB within session\n" +msgstr "" + +#: plugins/ExtraStats/__init__.py:175 +#: plugins/ExtraStats/stats_preferences.glade:28 +msgid "Total Downloaded" +msgstr "" + +#: plugins/ExtraStats/__init__.py:181 +#: plugins/ExtraStats/stats_preferences.glade:38 +msgid "Total Uploaded" +msgstr "" + +#: plugins/ExtraStats/__init__.py:187 plugins/ExtraStats/__init__.py:191 +msgid "Undefined" +msgstr "" + +#: plugins/ExtraStats/__init__.py:195 +#: plugins/ExtraStats/stats_preferences.glade:52 +msgid "Overall Ratio" +msgstr "" + +#: plugins/ExtraStats/__init__.py:200 +#: plugins/ExtraStats/stats_preferences.glade:66 +msgid "Torrents Completed" +msgstr "" + +#: plugins/ExtraStats/__init__.py:206 +#: plugins/ExtraStats/stats_preferences.glade:80 +msgid "Running Time" +msgstr "" + +#: plugins/ExtraStats/stats_preferences.glade:7 +msgid "Extra Stats Preferences" +msgstr "" + +#: plugins/MoveTorrent/__init__.py:19 +msgid "Move Torrent" +msgstr "" + +#: plugins/MoveTorrent/__init__.py:22 +msgid "" +"This plugin allows users to move the torrent to a different directory " +"without having to remove and re-add the torrent. This feature can be found " +"by right-clicking on a torrent.\n" +"Furthermore, it allows the user to automatically have finished torrents " +"moved to a different folder." +msgstr "" + +#: plugins/MoveTorrent/__init__.py:76 +msgid "_Move Torrent" +msgstr "" + +#: plugins/MoveTorrent/__init__.py:95 +msgid "Choose a directory to move files to" +msgstr "" + +#: plugins/MoveTorrent/__init__.py:129 +msgid "" +"You cannot move torrent to a different partition. Please check your " +"preferences. Also, you cannot move a torrent's files to the same directory " +"that they are already stored or move a torrent's files before any of its " +"files have actually been created." +msgstr "" + +#: plugins/MoveTorrent/movetorrent.glade:25 +msgid "Move completed downloads to:" +msgstr "" + +#: plugins/MoveTorrent/movetorrent.glade:59 plugins/WebSeed/webseed.glade:64 +msgid "gtk-cancel" +msgstr "" + +#: plugins/MoveTorrent/movetorrent.glade:71 plugins/WebSeed/webseed.glade:72 +msgid "gtk-ok" +msgstr "" + +#: plugins/WebSeed/__init__.py:19 +msgid "Web Seed" +msgstr "" + +#: plugins/WebSeed/__init__.py:22 +msgid "This plugin allows users to add web seeds to their torrents" +msgstr "" + +#: plugins/WebSeed/__init__.py:51 +msgid "_Add Web Seed" +msgstr "" + +#: plugins/WebSeed/webseed.glade:7 +msgid "Open Containing Folder Preferences" +msgstr "" + +#: plugins/Scheduler/plugin.py:76 +msgid "Scheduler Settings" +msgstr "" + +#: plugins/Scheduler/plugin.py:86 +msgid "Limit download to:" +msgstr "" + +#: plugins/Scheduler/plugin.py:87 +msgid "Limit upload to:" +msgstr "" + +#: plugins/Scheduler/plugin.py:135 +msgid "Yellow is limited, red is stopped and green is unlimited." +msgstr "" + +#: plugins/Scheduler/plugin.py:137 +msgid "" +"When set to -1 (unlimited), the global limits in Deluge's preferences will " +"be obeyed." +msgstr "" diff --git a/po/ka.po b/po/ka.po new file mode 100644 index 000000000..0cf932548 --- /dev/null +++ b/po/ka.po @@ -0,0 +1,2146 @@ +# Georgian translation for deluge +# Copyright (c) 2007 Rosetta Contributors and Canonical Ltd 2007 +# This file is distributed under the same license as the deluge package. +# FIRST AUTHOR , 2007. +# +msgid "" +msgstr "" +"Project-Id-Version: deluge\n" +"Report-Msgid-Bugs-To: FULL NAME \n" +"POT-Creation-Date: 2007-10-15 10:51-0500\n" +"PO-Revision-Date: 2007-10-18 18:46+0000\n" +"Last-Translator: FULL NAME \n" +"Language-Team: Georgian \n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"X-Launchpad-Export-Date: 2007-10-23 03:22+0000\n" +"X-Generator: Launchpad (build Unknown)\n" + +#: glade/delugegtk.glade:204 +msgid "Downloaded:" +msgstr "ჩამოტვირთულია:" + +#: glade/delugegtk.glade:218 +msgid "Uploaded:" +msgstr "ატვირთულია:" + +#: glade/delugegtk.glade:236 +msgid "Seeders:" +msgstr "მთესველები:" + +#: glade/delugegtk.glade:254 +msgid "Share Ratio:" +msgstr "საზიარო რეიტინგი:" + +#: glade/delugegtk.glade:273 glade/delugegtk.glade:292 +msgid "Speed:" +msgstr "სიჩქარე:" + +#: glade/delugegtk.glade:313 +msgid "Peers:" +msgstr "პირები:" + +#: glade/delugegtk.glade:334 +msgid "ETA:" +msgstr "ETA:" + +#: glade/delugegtk.glade:351 +msgid "Pieces:" +msgstr "ნაჭერი:" + +#: glade/delugegtk.glade:389 +msgid "Availability:" +msgstr "ხელმისაწვდომობა:" + +#: glade/delugegtk.glade:430 +msgid "Statistics" +msgstr "სტატისტიკა" + +#: glade/delugegtk.glade:486 +msgid "Path:" +msgstr "გეზი:" + +#: glade/delugegtk.glade:520 +msgid "Total Size:" +msgstr "სრული ზომა:" + +#: glade/delugegtk.glade:582 +msgid "Tracker Status:" +msgstr "მეთვალყურის სტატუსი:" + +#: glade/delugegtk.glade:615 +msgid "Next Announce:" +msgstr "შემდეგი ანონსი:" + +#: glade/delugegtk.glade:654 +msgid "# of files:" +msgstr "# ფაილებიდან:" + +#: glade/delugegtk.glade:682 +msgid "Tracker:" +msgstr "მეთვალყურე:" + +#: glade/delugegtk.glade:706 +msgid "Name:" +msgstr "სახელი:" + +#: glade/delugegtk.glade:723 +msgid "Torrent Info" +msgstr "ინფორმაცია ტორენტზე" + +#: glade/delugegtk.glade:750 +msgid "Details" +msgstr "დეტალები" + +#: glade/delugegtk.glade:790 +msgid "_File" +msgstr "" + +#: glade/delugegtk.glade:797 glade/tray_menu.glade:61 +msgid "_Add Torrent" +msgstr "" + +#: glade/delugegtk.glade:812 +msgid "Add _URL" +msgstr "" + +#: glade/delugegtk.glade:820 +msgid "_Clear Completed" +msgstr "" + +#: glade/delugegtk.glade:853 +msgid "_Edit" +msgstr "" + +#: glade/delugegtk.glade:862 +msgid "gtk-select-all" +msgstr "" + +#: glade/delugegtk.glade:878 +msgid "Plu_gins" +msgstr "" + +#: glade/delugegtk.glade:906 +msgid "_Torrent" +msgstr "" + +#: glade/delugegtk.glade:913 +msgid "_View" +msgstr "" + +#: glade/delugegtk.glade:921 +msgid "_Toolbar" +msgstr "" + +#: glade/delugegtk.glade:930 +msgid "_Details" +msgstr "_დეტალები" + +#: glade/delugegtk.glade:939 +msgid "_Columns" +msgstr "_კოლონები" + +#: glade/delugegtk.glade:947 src/interface.py:595 src/files.py:79 +msgid "Size" +msgstr "ზომა" + +#: glade/delugegtk.glade:956 src/interface.py:599 +msgid "Status" +msgstr "სტატუსი" + +#: glade/delugegtk.glade:965 src/interface.py:601 +msgid "Seeders" +msgstr "მთესველები" + +#: glade/delugegtk.glade:974 src/interface.py:604 +#: plugins/TorrentPeers/__init__.py:72 +msgid "Peers" +msgstr "პირები" + +#: glade/delugegtk.glade:983 src/interface.py:607 src/interface.py:1105 +#: src/interface.py:1136 plugins/TorrentPeers/tab_peers.py:89 +msgid "Down Speed" +msgstr "ჩამოტვირთვის სიჩქარე" + +#: glade/delugegtk.glade:992 src/interface.py:610 src/interface.py:1106 +#: src/interface.py:1137 plugins/TorrentPeers/tab_peers.py:91 +msgid "Up Speed" +msgstr "ატვირთვის სიჩქარე" + +#: glade/delugegtk.glade:1001 +msgid "Time Remaining" +msgstr "დარჩენილი დრო" + +#: glade/delugegtk.glade:1010 +msgid "Availability" +msgstr "ხელმისაწვდომობა" + +#: glade/delugegtk.glade:1019 +msgid "Share Ratio" +msgstr "" + +#: glade/delugegtk.glade:1036 +msgid "_Help" +msgstr "" + +#: glade/delugegtk.glade:1044 +msgid "Help translate this application" +msgstr "" + +#: glade/delugegtk.glade:1045 +msgid "_Translate This Application..." +msgstr "" + +#: glade/delugegtk.glade:1068 +msgid "Runs the first-time configuration wizard" +msgstr "" + +#: glade/delugegtk.glade:1069 +msgid "_Run Configuration Wizard" +msgstr "" + +#: glade/delugegtk.glade:1142 +msgid "Add Torrent" +msgstr "" + +#: glade/delugegtk.glade:1143 +msgid "Add" +msgstr "" + +#: glade/delugegtk.glade:1156 glade/dgtkpopups.glade:6 +msgid "Remove Torrent" +msgstr "" + +#: glade/delugegtk.glade:1157 +msgid "Remove" +msgstr "" + +#: glade/delugegtk.glade:1169 +msgid "Clear Seeding Torrents" +msgstr "თესვადი ტორენტების გაწმენდა" + +#: glade/delugegtk.glade:1170 +msgid "Clear" +msgstr "გაწმენდა" + +#: glade/delugegtk.glade:1192 +msgid "Start or Resume Torrent" +msgstr "ტორენტის გაშვება ან გაგრძელება" + +#: glade/delugegtk.glade:1193 +msgid "Resume" +msgstr "გაგრძელება" + +#: glade/delugegtk.glade:1206 +msgid "Pause Torrent" +msgstr "ტორენტის პაუზა" + +#: glade/delugegtk.glade:1207 +msgid "Pause" +msgstr "პაუზა" + +#: glade/delugegtk.glade:1219 +msgid "Queue Torrent Up" +msgstr "ტორენტის რიგში მაღლა ატანა" + +#: glade/delugegtk.glade:1220 +msgid "Up" +msgstr "ზევით" + +#: glade/delugegtk.glade:1233 +msgid "Queue Torrent Down" +msgstr "ტორენტის რიგში დაბლა ჩამოტანა" + +#: glade/delugegtk.glade:1234 +msgid "Down" +msgstr "დაბლა" + +#: glade/delugegtk.glade:1255 +msgid "Change Deluge preferences" +msgstr "" + +#: glade/delugegtk.glade:1256 +msgid "Preferences" +msgstr "" + +#: glade/delugegtk.glade:1269 glade/dgtkpopups.glade:209 +#: glade/preferences_dialog.glade:2709 +msgid "Plugins" +msgstr "" + +#: glade/dgtkpopups.glade:41 +msgid "" +"Are you sure you want to remove the selected " +"torrent(s) from Deluge?" +msgstr "" + +#: glade/dgtkpopups.glade:65 +msgid "Delete downloaded files" +msgstr "" + +#: glade/dgtkpopups.glade:88 +msgid "Delete .torrent file" +msgstr "" + +#: glade/dgtkpopups.glade:155 +msgid "Show/Hide" +msgstr "" + +#: glade/dgtkpopups.glade:163 +msgid "Add a Torrent..." +msgstr "" + +#: glade/dgtkpopups.glade:179 +msgid "Clear Finished" +msgstr "" + +#: glade/dgtkpopups.glade:241 +msgid "Speed" +msgstr "" + +#: glade/file_tab_menu.glade:11 +msgid "_Open File" +msgstr "_ფაილის გახსნა" + +#: glade/file_tab_menu.glade:33 +msgid "Select All" +msgstr "ყველას მონიშვნა" + +#: glade/file_tab_menu.glade:48 +msgid "Unselect All" +msgstr "მონიშვნის გაუქმება" + +#: glade/file_tab_menu.glade:68 src/core.py:100 +msgid "Don't download" +msgstr "არ ჩამოტვირთო" + +#: glade/file_tab_menu.glade:83 src/core.py:101 +msgid "Normal" +msgstr "ნორმალური" + +#: glade/file_tab_menu.glade:98 src/core.py:102 +msgid "High" +msgstr "მაღალი" + +#: glade/file_tab_menu.glade:113 src/core.py:103 +msgid "Highest" +msgstr "უმაღლესი" + +#: glade/merge_dialog.glade:7 +msgid "Deluge Merge Tracker Lists" +msgstr "დელუჯის მეთვალყურეთა სიის გაერთიანება" + +#: glade/merge_dialog.glade:23 +msgid "" +"Torrent already detected in Deluge, would you like to merge the tracker " +"lists?" +msgstr "ტორენტი უკვე არის დელუჯში, გსურთ მეთვალყრეთა სიის გაერთიანება?" + +#: glade/preferences_dialog.glade:9 +msgid "Deluge Preferences" +msgstr "დელუჯის პარამეტრები" + +#: glade/preferences_dialog.glade:57 +msgid "Ask where to save each download" +msgstr "" + +#: glade/preferences_dialog.glade:75 glade/wizard.glade:187 +#: plugins/MoveTorrent/movetorrent.glade:35 +msgid "Select A Folder" +msgstr "" + +#: glade/preferences_dialog.glade:87 glade/preferences_dialog.glade:88 +msgid "Store all downloads in:" +msgstr "" + +#: glade/preferences_dialog.glade:108 +msgid "Download Location" +msgstr "" + +#: glade/preferences_dialog.glade:142 glade/preferences_dialog.glade:155 +#: glade/wizard.glade:237 glade/wizard.glade:478 +msgid "" +"The number of active torrents that Deluge will run. Set to -1 for unlimited." +msgstr "" + +#: glade/preferences_dialog.glade:144 +msgid "Maximum simultaneous active torrents:" +msgstr "" + +#: glade/preferences_dialog.glade:175 glade/preferences_dialog.glade:176 +msgid "Enable selecting files for torrents before loading" +msgstr "" + +#: glade/preferences_dialog.glade:190 glade/preferences_dialog.glade:191 +msgid "Prioritize first and last pieces of files in torrent" +msgstr "" + +#: glade/preferences_dialog.glade:207 +msgid "Torrents" +msgstr "" + +#: glade/preferences_dialog.glade:245 +msgid "" +"Full allocation preallocates all of the space that is needed for the torrent " +"and prevents disk fragmentation" +msgstr "" + +#: glade/preferences_dialog.glade:246 +msgid "Use Full Allocation" +msgstr "სრული განთავსების ათვისება" + +#: glade/preferences_dialog.glade:268 +msgid "Compact allocation only allocates space as needed" +msgstr "სივრცის კომპაქტური თვისება მხოლოდ საჭიროების მიხედვით" + +#: glade/preferences_dialog.glade:269 +msgid "Use Compact Allocation" +msgstr "კომპაქტური განთავსების გამოყენება" + +#: glade/preferences_dialog.glade:289 +msgid "Allocation" +msgstr "განთავსება" + +#: glade/preferences_dialog.glade:313 +msgid "Downloads" +msgstr "ჩამოტვირთვები" + +#: glade/preferences_dialog.glade:357 +msgid "" +"Please Note - Changes to these settings will only be applied the next " +"time Deluge is restarted." +msgstr "" +"გაითვალისწინეთ რომ - პარამეტრების აღნიშნული ცვლილებები ძალაში შევა მხოლოდ " +"დელუჯის გადატვირთვის შემდეგ." + +#: glade/preferences_dialog.glade:399 glade/wizard.glade:48 +msgid "From:" +msgstr "საიდან:" + +#: glade/preferences_dialog.glade:422 glade/wizard.glade:66 +msgid "To:" +msgstr "სად:" + +#: glade/preferences_dialog.glade:448 +msgid "Deluge will automatically choose a different port to use every time." +msgstr "დელუჯი ავტომატურად შეარჩევს განსხვავებულ პორტს ყოველ ჯერზე." + +#: glade/preferences_dialog.glade:449 +msgid "Random Ports" +msgstr "შემთხვევითი პორტები" + +#: glade/preferences_dialog.glade:466 +msgid "Test Active Port" +msgstr "" + +#: glade/preferences_dialog.glade:492 +msgid "TCP" +msgstr "" + +#: glade/preferences_dialog.glade:504 +msgid "Active Port:" +msgstr "" + +#: glade/preferences_dialog.glade:517 +msgid "0000" +msgstr "" + +#: glade/preferences_dialog.glade:555 +msgid "Distributed hash table may improve the amount of active connections." +msgstr "" + +#: glade/preferences_dialog.glade:556 +msgid "Enable Mainline DHT" +msgstr "" + +#: glade/preferences_dialog.glade:569 +msgid "DHT" +msgstr "" + +#: glade/preferences_dialog.glade:603 +msgid "Universal Plug and Play" +msgstr "" + +#: glade/preferences_dialog.glade:604 +msgid "UPnP" +msgstr "" + +#: glade/preferences_dialog.glade:618 +msgid "NAT Port Mapping Protocol" +msgstr "" + +#: glade/preferences_dialog.glade:619 +msgid "NAT-PMP" +msgstr "NAT-PMP" + +#: glade/preferences_dialog.glade:634 +msgid "µTorrent Peer-Exchange" +msgstr "µTorrent პირთა–გაცვლა" + +#: glade/preferences_dialog.glade:635 +msgid "µTorrent-PeX" +msgstr "µTorrent-PeX" + +#: glade/preferences_dialog.glade:653 +msgid "Network Extras" +msgstr "ქსელური დანამატები" + +#: glade/preferences_dialog.glade:693 +msgid "Inbound:" +msgstr "შემომავალი:" + +#: glade/preferences_dialog.glade:702 glade/preferences_dialog.glade:724 +msgid "" +"Disabled\n" +"Enabled\n" +"Forced" +msgstr "" +"გამორთული\n" +"ჩართული\n" +"ფორსირებული" + +#: glade/preferences_dialog.glade:715 +msgid "Outbound:" +msgstr "გამავალი:" + +#: glade/preferences_dialog.glade:742 +msgid "Prefer to encrypt the entire stream" +msgstr "არჩიე დინების სრულად დაშიფრვა" + +#: glade/preferences_dialog.glade:755 +msgid "Level:" +msgstr "დონე:" + +#: glade/preferences_dialog.glade:764 +msgid "" +"Handshake\n" +"Full Stream\n" +"Either" +msgstr "" +"ხელის ჩამორთმევა\n" +"სრული დინება\n" +"სხვა" + +#: glade/preferences_dialog.glade:785 +msgid "Encryption" +msgstr "" + +#: glade/preferences_dialog.glade:815 +msgid "Network" +msgstr "" + +#: glade/preferences_dialog.glade:855 +msgid "Queue torrents to bottom when they begin seeding" +msgstr "" + +#: glade/preferences_dialog.glade:867 +msgid "Queue new torrents above completed ones" +msgstr "" + +#: glade/preferences_dialog.glade:883 +msgid "Stop seeding torrents when their share ratio reaches:" +msgstr "" + +#: glade/preferences_dialog.glade:919 +msgid "Automatically clear torrents that reach the max share ratio" +msgstr "" + +#: glade/preferences_dialog.glade:935 +msgid "Seeding" +msgstr "" + +#: glade/preferences_dialog.glade:964 src/core.py:91 +msgid "Seeding" +msgstr "" + +#: glade/preferences_dialog.glade:1009 glade/wizard.glade:257 +#: glade/wizard.glade:318 +msgid "The maximum upload slots for all torrents. Set -1 for unlimited." +msgstr "" + +#: glade/preferences_dialog.glade:1026 glade/preferences_dialog.glade:1110 +#: glade/preferences_dialog.glade:1130 glade/wizard.glade:277 +#: glade/wizard.glade:341 +msgid "The maximum upload speed for all torrents. Set -1 for unlimited." +msgstr "" + +#: glade/preferences_dialog.glade:1044 glade/preferences_dialog.glade:1060 +msgid "The maximum download speed for all torrents. Set -1 for unlimited." +msgstr "" +"ყველა ტორენტის ჩამოტვირთვის მაქსიმალური სიჩქარე. დააყენეთ–1 ლიმიტის " +"მოსახსნელად." + +#: glade/preferences_dialog.glade:1062 +msgid "Maximum Download Speed (KiB/s):" +msgstr "ჩამოტვირთვის მაქსიმალური სიჩქარე(KiB/s):" + +#: glade/preferences_dialog.glade:1073 glade/preferences_dialog.glade:1092 +#: glade/wizard.glade:297 glade/wizard.glade:364 +msgid "The maximum number of connections allowed. Set -1 for unlimited." +msgstr "შეერთებათა მაქსიმალური რაოდენობა. დააყენეთ–1 ლიმიტის მოსახსნელად." + +#: glade/preferences_dialog.glade:1094 glade/preferences_dialog.glade:1278 +#: glade/wizard.glade:298 +msgid "Maximum Connections:" +msgstr "მაქსიმალური შეერთებები:" + +#: glade/preferences_dialog.glade:1112 glade/wizard.glade:278 +msgid "Maximum Upload Speed (KiB/s):" +msgstr "ატვირთვის მაქსიმალური სიჩქარე(KiB/s):" + +#: glade/preferences_dialog.glade:1132 glade/preferences_dialog.glade:1259 +#: glade/wizard.glade:258 +msgid "Maximum Upload Slots:" +msgstr "ატვირთვის მაქსიმალური სლოტები" + +#: glade/preferences_dialog.glade:1150 glade/preferences_dialog.glade:1166 +#: glade/wizard.glade:434 glade/wizard.glade:455 +msgid "" +"The maximum half-open connections. A high value may crash some cheap " +"routers. Set -1 for unlimited." +msgstr "" +"მაქსიმალური ნახევრად ღია შეერთებები. მაღალ მნიშვნელობას შეუძლია გაჭედოს " +"ზოგიეთი იაფფასიანი როუტერი. დააყენეთ – 1 ლიმიტის მოსახსნელად." + +#: glade/preferences_dialog.glade:1152 glade/wizard.glade:435 +msgid "Maximum Half-Open Connections:" +msgstr "მაქსიმალური ნახევრად ღია შეერთებები:" + +#: glade/preferences_dialog.glade:1186 +msgid "Global Bandwidth Usage" +msgstr "გამტარუანრიანობის გლობალური გამოყენება" + +#: glade/preferences_dialog.glade:1222 glade/preferences_dialog.glade:1257 +msgid "The maximum upload slots per torrent. Set -1 for unlimited." +msgstr "" +"მაქსიმალური ატვირთვის სლოტები ტორენტზე. დააყენეთ – 1 ლიმიტის მოსახსნელად." + +#: glade/preferences_dialog.glade:1239 glade/preferences_dialog.glade:1276 +msgid "The maximum number of connections per torrent. Set -1 for unlimited." +msgstr "" + +#: glade/preferences_dialog.glade:1291 +msgid "Per Torrent Bandwidth Usage" +msgstr "" + +#: glade/preferences_dialog.glade:1317 +msgid "Bandwidth" +msgstr "" + +#: glade/preferences_dialog.glade:1362 glade/preferences_dialog.glade:1556 +#: glade/preferences_dialog.glade:1750 glade/preferences_dialog.glade:1944 +msgid "Affects regular bittorrent peers" +msgstr "" + +#: glade/preferences_dialog.glade:1363 +msgid "Peer Proxy" +msgstr "" + +#: glade/preferences_dialog.glade:1408 glade/preferences_dialog.glade:1602 +#: glade/preferences_dialog.glade:1796 glade/preferences_dialog.glade:1990 +msgid "Port" +msgstr "" + +#: glade/preferences_dialog.glade:1421 glade/preferences_dialog.glade:1615 +#: glade/preferences_dialog.glade:1809 glade/preferences_dialog.glade:2003 +msgid "Server" +msgstr "" + +#: glade/preferences_dialog.glade:1462 glade/preferences_dialog.glade:1656 +#: glade/preferences_dialog.glade:1850 glade/preferences_dialog.glade:2044 +msgid "" +"None\n" +"Socksv4\n" +"Socksv5\n" +"Socksv5 W/ Auth\n" +"HTTP\n" +"HTTP W/ Auth" +msgstr "" + +#: glade/preferences_dialog.glade:1478 glade/preferences_dialog.glade:1672 +#: glade/preferences_dialog.glade:1866 glade/preferences_dialog.glade:2060 +msgid "Password" +msgstr "" + +#: glade/preferences_dialog.glade:1489 glade/preferences_dialog.glade:1683 +#: glade/preferences_dialog.glade:1877 glade/preferences_dialog.glade:2071 +msgid "Username" +msgstr "" + +#: glade/preferences_dialog.glade:1500 glade/preferences_dialog.glade:1694 +#: glade/preferences_dialog.glade:1888 glade/preferences_dialog.glade:2082 +msgid "Proxy type" +msgstr "პროქსის ტიპი" + +#: glade/preferences_dialog.glade:1525 +msgid "Peer Proxy" +msgstr "პრირის პროქსი" + +#: glade/preferences_dialog.glade:1557 +msgid "Tracker Proxy" +msgstr "მეთვალყურის პროქსი" + +#: glade/preferences_dialog.glade:1719 +msgid "Tracker Proxy" +msgstr "მეთვალყურის პროქსი" + +#: glade/preferences_dialog.glade:1751 +msgid "DHT Proxy" +msgstr "DHT პროქსი" + +#: glade/preferences_dialog.glade:1913 +msgid "DHT Proxy" +msgstr "DHT პროქსი" + +#: glade/preferences_dialog.glade:1945 +msgid "Web Seed Proxy" +msgstr "ვებ მთესველის პროქსი" + +#: glade/preferences_dialog.glade:2107 +msgid "Web Seed Proxy" +msgstr "" + +#: glade/preferences_dialog.glade:2134 +msgid "Proxies" +msgstr "პროქსი სერვერები" + +#: glade/preferences_dialog.glade:2162 +msgid "Enable system tray icon" +msgstr "სისტემური პანელის ხატულა" + +#: glade/preferences_dialog.glade:2178 +msgid "Minimize to tray on close" +msgstr "" + +#: glade/preferences_dialog.glade:2197 +msgid "Start in tray" +msgstr "" + +#: glade/preferences_dialog.glade:2221 +msgid "Password protect system tray" +msgstr "" + +#: glade/preferences_dialog.glade:2239 +msgid "Password:" +msgstr "" + +#: glade/preferences_dialog.glade:2281 +msgid "System Tray" +msgstr "" + +#: glade/preferences_dialog.glade:2323 +msgid "Open folder with:" +msgstr "" + +#: glade/preferences_dialog.glade:2340 +msgid "Custom:" +msgstr "" + +#: glade/preferences_dialog.glade:2363 +msgid "" +"Auto-detect (xdg-open)\n" +"Konqueror\n" +"Nautilus\n" +"Thunar" +msgstr "" + +#: glade/preferences_dialog.glade:2410 +msgid "Desktop File Manager - only for non-Windows platforms" +msgstr "" + +#: glade/preferences_dialog.glade:2442 +msgid "GUI update interval (seconds)" +msgstr "გრაფიკული ინტერფეისის განახელბის ინტერვალი (წამები)" + +#: glade/preferences_dialog.glade:2470 +msgid "Performance" +msgstr "წარმადობა" + +#: glade/preferences_dialog.glade:2504 +msgid "" +"Deluge will check our servers and will tell you if a newer version has been " +"released" +msgstr "" +"დელუჯი შეამოწმებს ჩვენს სერვერებს და შეგატყობინებთ ახალი ვერსიის გამოსვლის " +"შესახებ" + +#: glade/preferences_dialog.glade:2505 +msgid "Be alerted about new releases" +msgstr "შეტყობინება ახალი ვერსის გამოსვლისას" + +#: glade/preferences_dialog.glade:2522 +msgid "Updates" +msgstr "განახლებები" + +#: glade/preferences_dialog.glade:2551 +msgid "" +"Help us improve Deluge by sending us your Python and PyGTK\n" +"versions, OS and processor types. Absolutely no other\n" +"information is sent." +msgstr "" +"დაგვეხმარეთ დელუჯის განვითარებაში თქვენი Python და PyGTK\n" +"ვერსიების შესახებ ინფორმირებით, ასევე ოპერაციული სისტემისა და პროცესორის " +"შესახებაც.\n" +"არანაირი სხვა სახის ინფორმაცია არ გაიგზავნება." + +#: glade/preferences_dialog.glade:2564 +msgid "System Information" +msgstr "ინფორმაცია სისტემის შესახებ" + +#: glade/preferences_dialog.glade:2587 +#: plugins/EventLogging/event_logging_preferences.glade:52 +#: plugins/EventLogging/tab_log.py:218 +msgid "Other" +msgstr "სხვა" + +#: glade/preferences_dialog.glade:2681 +msgid "gtk-preferences" +msgstr "gtk-პარამეტრები" + +#: glade/torrent_menu.glade:11 +msgid "Re_sume" +msgstr "გაგრძელება" + +#: glade/torrent_menu.glade:28 +msgid "_Pause" +msgstr "" + +#: glade/torrent_menu.glade:49 +msgid "_Update Tracker" +msgstr "" + +#: glade/torrent_menu.glade:66 +msgid "_Edit Trackers" +msgstr "" + +#: glade/torrent_menu.glade:88 +msgid "_Remove Torrent" +msgstr "" + +#: glade/torrent_menu.glade:111 +msgid "_Queue" +msgstr "" + +#: glade/torrent_menu.glade:121 +msgid "_Top" +msgstr "" + +#: glade/torrent_menu.glade:137 +msgid "_Up" +msgstr "" + +#: glade/torrent_menu.glade:153 +msgid "_Down" +msgstr "" + +#: glade/torrent_menu.glade:169 +msgid "_Bottom" +msgstr "" + +#: glade/torrent_menu.glade:198 +msgid "_Open Containing Folder" +msgstr "" + +#: glade/tray_menu.glade:12 +msgid "_Show Deluge" +msgstr "აჩვენე დელუჯი" + +#: glade/tray_menu.glade:21 +msgid "_Resume All" +msgstr "განაგრძე ყველა" + +#: glade/tray_menu.glade:38 +msgid "_Pause All" +msgstr "სრული პაუზა" + +#: glade/tray_menu.glade:84 +msgid "_Download Speed Limit" +msgstr "ჩამოტვირთვის სიჩქარის ლიმიტი" + +#: glade/tray_menu.glade:100 +msgid "_Upload Speed Limit" +msgstr "ატვირთვის სიჩქარის ლიმიტი" + +#: glade/tray_menu.glade:122 +msgid "_Quit" +msgstr "გასვლა" + +#: glade/edit_trackers.glade:9 +msgid "Edit Trackers" +msgstr "მათვალყრეთა რედაქტირება" + +#: glade/edit_trackers.glade:19 +msgid "Tracker Editing" +msgstr "მეთვალყურეთა რედაქტორი" + +#: glade/files_dialog.glade:8 +msgid "Deluge File Selection" +msgstr "დელუჯის ფაილის შერჩევა" + +#: glade/files_dialog.glade:42 +msgid "Torrent will not be distributed on the trackerless (DHT) network" +msgstr "ტორენტის დისტრიბუცია მოხდება მეთვალყურის გარეშე DHT ქსელში" + +#: glade/files_dialog.glade:43 +msgid "Set the private flag" +msgstr "" + +#: glade/wizard.glade:10 +msgid "First Launch Configuration" +msgstr "" + +#: glade/wizard.glade:20 +msgid "" +"This wizard will help you set up Deluge to your liking. If you are new to " +"Deluge, please note that most of Deluge's functionality and features come in " +"the form of plugins, which can be accessed by clicking on Plugins in the " +"Edit menu or the toolbar." +msgstr "" + +#: glade/wizard.glade:36 +msgid "" +"Deluge needs a range of ports that it will try to listen to for incoming " +"connections. The default ports for bittorrent are 6881-6889, however, most " +"ISPs block those ports, so you're encouraged to pick others, between 49152 " +"and 65535. Alternatively, you can have Deluge automatically pick random " +"ports for you." +msgstr "" + +#: glade/wizard.glade:88 +msgid "Use _Random Ports" +msgstr "" + +#: glade/wizard.glade:116 +msgid "" +"Would you like Deluge to automatically download to a predefined location, or " +"would you like to specify the download location every time?" +msgstr "" + +#: glade/wizard.glade:141 +msgid "Ask where to save each file" +msgstr "" + +#: glade/wizard.glade:165 +msgid "Store all downloads in: " +msgstr "" + +#: glade/wizard.glade:215 +msgid "" +"Please select the upload speed of your connection, which we will then use to " +"automatically make suggestions for the settings below" +msgstr "" + +#: glade/wizard.glade:238 +msgid "Maximum Active Torrents:" +msgstr "" + +#: glade/wizard.glade:386 +msgid "" +"28.8k\n" +"56k\n" +"64k\n" +"96k\n" +"128k\n" +"192k\n" +"256k\n" +"384k\n" +"512k\n" +"640k\n" +"768k\n" +"1Mbit\n" +"2Mbit\n" +"10Mbit\n" +"20Mbit\n" +"40Mbit\n" +"50Mbit\n" +"100Mbit" +msgstr "" +"28.8კ\n" +"56კ\n" +"64კ\n" +"96კ\n" +"128კ\n" +"192კ\n" +"256კ\n" +"384კ\n" +"512კ\n" +"640კ\n" +"768კ\n" +"1მბიტი\n" +"2მბიტი\n" +"10მბიტი\n" +"20მბიტი\n" +"40მბიტი\n" +"50მბიტი\n" +"100მბიტი" + +#: glade/wizard.glade:419 +msgid "Your Upload Line Speed:" +msgstr "ატვირთვის ხაზის სიჩქარე:" + +#: glade/wizard.glade:506 +msgid "" +"_Help us improve Deluge by sending us your Python and PyGTK\n" +"versions, OS and processor types. Absolutely no other\n" +"information is sent." +msgstr "" + +#: src/interface.py:261 src/interface.py:267 src/interface.py:348 +#: src/interface.py:374 plugins/SpeedLimiter/__init__.py:82 +#: plugins/SpeedLimiter/__init__.py:92 plugins/SpeedLimiter/__init__.py:136 +#: plugins/SpeedLimiter/__init__.py:168 +msgid "KiB/s" +msgstr "KiB/s" + +#: src/interface.py:288 src/interface.py:349 src/interface.py:375 +#: src/interface.py:1087 src/interface.py:1094 src/interface.py:1099 +#: src/interface.py:1127 src/interface.py:1129 +#: plugins/SpeedLimiter/__init__.py:137 plugins/SpeedLimiter/__init__.py:169 +msgid "Unlimited" +msgstr "ლიმიტის გარეშე" + +#: src/interface.py:291 +msgid "Activated" +msgstr "აქტიურია" + +#: src/interface.py:340 src/interface.py:352 src/interface.py:378 +#: plugins/DesiredRatio/__init__.py:114 plugins/SpeedLimiter/__init__.py:140 +#: plugins/SpeedLimiter/__init__.py:172 +msgid "Other..." +msgstr "სხვა..." + +#: src/interface.py:357 +msgid "Download Speed (KiB/s):" +msgstr "ჩამოტვირთვის შესახებ" + +#: src/interface.py:383 +msgid "Upload Speed (KiB/s):" +msgstr "ატვირთვის სიჩქარე (KiB/s):" + +#: src/interface.py:412 +msgid "Deluge is locked" +msgstr "დელუჯი ბლოკირებულია" + +#: src/interface.py:415 +msgid "" +"Deluge is password protected.\n" +"To show the Deluge window, please enter your password" +msgstr "" + +#: src/interface.py:563 src/common.py:76 +msgid "Infinity" +msgstr "" + +#: src/interface.py:575 +msgid "Unknown" +msgstr "" + +#: src/interface.py:592 plugins/SimpleRSS/plugin.py:68 +#: plugins/SimpleRSS/plugin.py:76 plugins/SimpleRSS/plugin.py:83 +#: plugins/TorrentSearch/plugin.py:51 +msgid "Name" +msgstr "" + +#: src/interface.py:613 +msgid "ETA" +msgstr "" + +#: src/interface.py:616 +msgid "Avail." +msgstr "" + +#: src/interface.py:618 +msgid "Ratio" +msgstr "" + +#: src/interface.py:863 +#, python-format +msgid "Paused %s" +msgstr "" + +#: src/interface.py:1105 +msgid "Connections" +msgstr "" + +#: src/interface.py:1123 +msgid "DHT" +msgstr "DHT" + +#: src/interface.py:1132 plugins/TorrentCreator/__init__.py:148 +msgid "Deluge" +msgstr "დელუჯი" + +#: src/interface.py:1132 +msgid "Download" +msgstr "ჩამოტვირთვა" + +#: src/interface.py:1133 +msgid "Upload" +msgstr "ატვირთვა" + +#: src/interface.py:1136 +msgid "Deluge Bittorrent Client" +msgstr "დელუჯი ბიტტირენტ კლიენტი" + +#: src/interface.py:1213 +msgid "Choose a download directory" +msgstr "შეარჩიეთ ჩამოსატვირთი დასტა" + +#: src/interface.py:1240 +msgid "" +"An error occured while trying to add the torrent. It's possible your " +".torrent file is corrupted." +msgstr "" +"შეცდომა ტორენტის დამატებისას. შესაძლოა თქვენი .torrent ფაილი დაზიანებულია." + +#: src/interface.py:1265 +msgid "Unknown duplicate torrent error." +msgstr "უცნობი დუბლიკატი ტორენტის შეცდომა" + +#: src/interface.py:1270 +msgid "" +"There is not enough free disk space to complete your download." +msgstr "არ არის საკმარისი სივრცე დისკზე ჩამოტვირთვის დასასრულებლად." + +#: src/interface.py:1272 +msgid "Space Needed:" +msgstr "საჭირო სივრცე:" + +#: src/interface.py:1273 +msgid "Available Space:" +msgstr "" + +#: src/interface.py:1290 +msgid "Add torrent from URL" +msgstr "" + +#: src/interface.py:1294 +msgid "Enter the URL of the .torrent to download" +msgstr "" + +#: src/interface.py:1355 +msgid "Warning - all downloaded files for this torrent will be deleted!" +msgstr "" + +#: src/interface.py:1366 +msgid "Are you sure that you want to remove all seeding torrents?" +msgstr "" + +#: src/core.py:85 +msgid "Queued" +msgstr "" + +#: src/core.py:86 +msgid "Checking" +msgstr "" + +#: src/core.py:87 +msgid "Connecting" +msgstr "" + +#: src/core.py:88 +msgid "Downloading Metadata" +msgstr "" + +#: src/core.py:89 plugins/BlocklistImport/ui.py:117 +msgid "Downloading" +msgstr "" + +#: src/core.py:90 +msgid "Finished" +msgstr "დასრულდა" + +#: src/core.py:92 +msgid "Allocating" +msgstr "განთავსება" + +#: src/core.py:135 +msgid "bytes needed" +msgstr "საჭირო ბაიტები" + +#: src/core.py:374 +msgid "File was not found" +msgstr "ფაილი ვერ ვიპოვე" + +#: src/core.py:430 +msgid "Asked for a torrent that doesn't exist" +msgstr "მოთხოვნილია არ–არსებული ტორენტი" + +#: src/core.py:636 +msgid "Announce sent" +msgstr "ანონსი გაიგზავნა" + +#: src/core.py:643 +msgid "Announce OK" +msgstr "ანონსი OK" + +#: src/core.py:649 +msgid "Alert" +msgstr "გაფრთხილება" + +#: src/core.py:650 +msgid "HTTP code" +msgstr "HTTP კოდი" + +#: src/core.py:651 +msgid "times in a row" +msgstr "დროები სრტრიქონებში" + +#: src/core.py:658 +msgid "Warning" +msgstr "" + +#: src/files.py:77 +msgid "Filename" +msgstr "" + +#: src/files.py:81 +msgid "Priority" +msgstr "" + +#: src/files.py:103 +msgid "" +"File priority can only be set when using full allocation.\n" +"Please change your preference to disable compact allocation, then remove and " +"re-add this torrent." +msgstr "" + +#: src/dialogs.py:68 +msgid "Plugin" +msgstr "" + +#: src/dialogs.py:70 +msgid "Enabled" +msgstr "" + +#: src/dialogs.py:428 +msgid "translator-credits" +msgstr "" +"Launchpad Contributions:\n" +" David Machakhelidze https://launchpad.net/~david-mac" + +#: src/dialogs.py:429 +msgid "" +"Deluge is free software, you can redistribute it and/or\n" +"modify it under the terms of the GNU General Public\n" +" License as published by the Free Software Foundation,\n" +"either version 2 of the License, or (at your option) any\n" +"later version. Deluge is distributed in the hope that it\n" +"will be useful, but WITHOUT ANY WARRANTY, without even \n" +"the implied warranty of MERCHANTABILITY or FITNESS\n" +"FOR A PARTICULAR PURPOSE. See the GNU General\n" +"Public License for more details. You should have received\n" +"a copy of the GNU General Public License along with\n" +"Deluge, but if not, write to the Free Software Foundation,\n" +" Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-\n" +"1301 USA" +msgstr "" + +#: src/dialogs.py:469 +msgid "Choose a .torrent file" +msgstr "" + +#: src/dialogs.py:474 +msgid "Torrent files" +msgstr "" + +#: src/dialogs.py:478 +msgid "All files" +msgstr "ყველა ფაილი" + +#: src/common.py:90 +msgid "KiB" +msgstr "KiB" + +#: src/common.py:93 +msgid "MiB" +msgstr "MiB" + +#: src/common.py:96 +msgid "GiB" +msgstr "GiB" + +#: src/common.py:99 +msgid "TiB" +msgstr "TiB" + +#: src/common.py:101 +msgid "PiB" +msgstr "PiB" + +#: src/common.py:203 +msgid "External command" +msgstr "გარე ბრძანება" + +#: src/common.py:204 +msgid "not found" +msgstr "ვერ ვიპოვე" + +#: src/common.py:240 +msgid "" +"There is a newer version of Deluge. Would you like to be taken to our " +"download site?" +msgstr "" +"გამოსულია დელუჯის ახალი ვერსია. გსურთ გადახვიდეთ ჩამოტვირთვის საიტზე?" + +#: plugins/BlocklistImport/__init__.py:6 +msgid "Blocklist Importer" +msgstr "ბლოკირების სიის იმპორტი" + +#: plugins/BlocklistImport/__init__.py:9 +msgid "" +"\n" +"Download and import various IP blocklists.\n" +"\n" +"Currently this plugin can handle PeerGuardian (binary and text),\n" +"SafePeer and Emule lists. PeerGuardian 7zip format files are not\n" +"supported. Files may be specified as URLs or locations on the local\n" +"filesystem.\n" +"\n" +"A page with pointer to blocklist download sites is available on the\n" +"wiki:\n" +"\n" +"http://dev.deluge-torrent.org/wiki/BlocklistPlugin\n" +msgstr "" + +#: plugins/BlocklistImport/__init__.py:40 +msgid "PeerGuardian P2B (GZip)" +msgstr "" + +#: plugins/BlocklistImport/__init__.py:41 +msgid "PeerGuardian Text (Uncompressed)" +msgstr "" + +#: plugins/BlocklistImport/__init__.py:42 +msgid "Emule IP list (GZip)" +msgstr "" + +#: plugins/BlocklistImport/__init__.py:43 +msgid "SafePeer Text (Zipped)" +msgstr "" + +#: plugins/BlocklistImport/__init__.py:92 +msgid "Couldn't download URL" +msgstr "" + +#: plugins/BlocklistImport/__init__.py:105 +msgid "Couldn't open blocklist file" +msgstr "" + +#: plugins/BlocklistImport/__init__.py:118 +msgid "Imported" +msgstr "" + +#: plugins/BlocklistImport/__init__.py:118 +msgid "IPs" +msgstr "" + +#: plugins/BlocklistImport/__init__.py:123 +msgid "Format error in blocklist" +msgstr "" + +#: plugins/BlocklistImport/__init__.py:162 +msgid "Blocklist" +msgstr "ბლოკირების სია" + +#: plugins/BlocklistImport/__init__.py:162 +msgid "entries" +msgstr "ელემენტები" + +#: plugins/BlocklistImport/ui.py:25 +msgid "Blocklist URL" +msgstr "ბლოკირების სიის URL" + +#: plugins/BlocklistImport/ui.py:50 +msgid "Download on start" +msgstr "ჩამოტვირთვა გაშვებისას" + +#: plugins/BlocklistImport/ui.py:105 +msgid "Loading and installing blocklist" +msgstr "ბლოკირების სიის ჩამოტვირთვა და ინსტალაცია" + +#: plugins/BlocklistImport/ui.py:128 +msgid "Importing" +msgstr "იმპორიტება" + +#: plugins/BlocklistImport/ui.py:139 +msgid "Complete" +msgstr "შესრულებულია" + +#: plugins/BlocklistImport/text.py:37 +msgid "Couldn't match on line" +msgstr "" + +#: plugins/BlocklistImport/peerguardian.py:28 +msgid "Invalid leader" +msgstr "არასწორი ლიდერი" + +#: plugins/BlocklistImport/peerguardian.py:32 +msgid "Invalid magic code" +msgstr "არასწორი მაგიური კოდი" + +#: plugins/BlocklistImport/peerguardian.py:37 +msgid "Invalid version" +msgstr "" + +#: plugins/DesiredRatio/__init__.py:19 plugins/DesiredRatio/__init__.py:118 +msgid "Desired Ratio" +msgstr "" + +#: plugins/DesiredRatio/__init__.py:22 +msgid "Set the desired ratio for a torrent." +msgstr "" + +#: plugins/DesiredRatio/__init__.py:75 +msgid "_Desired Ratio" +msgstr "" + +#: plugins/DesiredRatio/__init__.py:79 +msgid "_Not Set" +msgstr "" + +#: plugins/DesiredRatio/__init__.py:111 +msgid "Not Set" +msgstr "" + +#: plugins/TorrentPeers/__init__.py:19 +msgid "Torrent Peers" +msgstr "" + +#: plugins/TorrentPeers/__init__.py:22 +msgid "" +"\n" +"This shows you the peers associated with each torrent and shows you their " +"ip, country, client, percent complete and upload and download speeds.\n" +msgstr "" + +#: plugins/TorrentPeers/tab_peers.py:84 +msgid "IP Address" +msgstr "" + +#: plugins/TorrentPeers/tab_peers.py:86 +msgid "Client" +msgstr "კლიენტი" + +#: plugins/TorrentPeers/tab_peers.py:87 +msgid "Percent Complete" +msgstr "პროცენტი დასრულდა" + +#: plugins/TorrentCreator/torrentcreator.glade:8 +#: plugins/TorrentCreator/__init__.py:19 +msgid "Torrent Creator" +msgstr "ტორენტის შემქმნელი" + +#: plugins/TorrentCreator/torrentcreator.glade:103 +msgid "This torrent will be made from a single file" +msgstr "ეს ტორენტი შეიქმნება ერთი ფაილისაგან" + +#: plugins/TorrentCreator/torrentcreator.glade:104 +msgid "File:" +msgstr "ფაილი:" + +#: plugins/TorrentCreator/torrentcreator.glade:120 +msgid "This torrent will be made from a directory" +msgstr "ეს ტორენტი შეიქმნება დასტისაგან" + +#: plugins/TorrentCreator/torrentcreator.glade:121 +msgid "Folder:" +msgstr "დასტა:" + +#: plugins/TorrentCreator/torrentcreator.glade:138 +msgid "Source" +msgstr "წყარო" + +#: plugins/TorrentCreator/torrentcreator.glade:184 +msgid "Save Torrent File As:" +msgstr "შეინახე ტორენტ ფაილი როგორც:" + +#: plugins/TorrentCreator/torrentcreator.glade:237 +msgid "Load this torrent into Deluge for seeding" +msgstr "ჩატვირთე ეს ტორენტი დელუჯში თესვისათვის" + +#: plugins/TorrentCreator/torrentcreator.glade:238 +msgid "Add new torrent to queue" +msgstr "" + +#: plugins/TorrentCreator/torrentcreator.glade:257 +msgid "Torrent File" +msgstr "" + +#: plugins/TorrentCreator/torrentcreator.glade:305 +msgid "Trackers" +msgstr "" + +#: plugins/TorrentCreator/torrentcreator.glade:352 +msgid "Comments" +msgstr "" + +#: plugins/TorrentCreator/torrentcreator.glade:389 +msgid "Author" +msgstr "" + +#: plugins/TorrentCreator/torrentcreator.glade:425 +msgid "Set Private Flag" +msgstr "" + +#: plugins/TorrentCreator/torrentcreator.glade:441 +#: plugins/TorrentCreator/torrentcreator.glade:461 +msgid "" +"The smaller the piece sizes, the more efficient the transfers will be, but " +"the actual \".torrent\" file will be larger" +msgstr "" + +#: plugins/TorrentCreator/torrentcreator.glade:442 +msgid "" +"32 KiB\n" +"64 KiB\n" +"128 KiB\n" +"256 KiB\n" +"512 KiB\n" +"1024 KiB\n" +msgstr "" + +#: plugins/TorrentCreator/torrentcreator.glade:463 +msgid "Piece Size:" +msgstr "" + +#: plugins/TorrentCreator/torrentcreator.glade:477 +msgid "Advanced" +msgstr "" + +#: plugins/TorrentCreator/__init__.py:22 +msgid "A torrent creator plugin" +msgstr "ტორენტის შემქმნელი მოდული" + +#: plugins/TorrentCreator/__init__.py:50 +msgid "_New Torrent" +msgstr "ახლი ტორენტი" + +#: plugins/TorrentCreator/__init__.py:60 +msgid "New Torrent" +msgstr "ახალი ტორენტი" + +#: plugins/TorrentCreator/__init__.py:62 +msgid "Create New Torrent" +msgstr "ახალი ტორენტის შექმნა" + +#: plugins/TorrentCreator/__init__.py:98 +msgid "Save file as..." +msgstr "ფაილის შენახვა როგორც..." + +#: plugins/TorrentCreator/__init__.py:120 +msgid "You must select a source for the torrent." +msgstr "თქვენ უნდა შეარჩიოთ წყარო ტორენტისათვის" + +#: plugins/TorrentCreator/__init__.py:127 +msgid "You must select a file to save the torrent as." +msgstr "თქვენ უნდა შეარჩიოთ ფაილი ტორენტის შესანახად." + +#: plugins/TorrentCreator/__init__.py:138 +msgid "You must specify at least one tracker." +msgstr "უნდა მიუთითოთ ერთი მეთვალყურე მაინც." + +#: plugins/SimpleRSS/rss.glade:7 +msgid "RSS Broadcatcher Settings" +msgstr "RSS მაუწყებლობის პარამეტრები" + +#: plugins/SimpleRSS/rss.glade:87 +msgid "Feed Name:" +msgstr "არხის სახელი:" + +#: plugins/SimpleRSS/rss.glade:151 +msgid "Feed URL:" +msgstr "" + +#: plugins/SimpleRSS/rss.glade:283 +msgid "Feeds" +msgstr "" + +#: plugins/SimpleRSS/rss.glade:385 plugins/SimpleRSS/plugin.py:75 +msgid "Feed" +msgstr "" + +#: plugins/SimpleRSS/rss.glade:413 +msgid "Filter Exp:" +msgstr "" + +#: plugins/SimpleRSS/rss.glade:442 +msgid "Filter Name:" +msgstr "" + +#: plugins/SimpleRSS/rss.glade:543 +msgid "Filters" +msgstr "" + +#: plugins/SimpleRSS/rss.glade:564 +msgid " Feed: " +msgstr "" + +#: plugins/SimpleRSS/rss.glade:617 +msgid "Torrents" +msgstr "" + +#: plugins/SimpleRSS/rss.glade:660 +msgid "Update Interval (seconds): " +msgstr "" + +#: plugins/SimpleRSS/rss.glade:729 +msgid "Check feeds on Deluge start" +msgstr "" + +#: plugins/SimpleRSS/rss.glade:781 +msgid "Check Feeds Now" +msgstr "" + +#: plugins/SimpleRSS/rss.glade:836 +msgid "Options" +msgstr "" + +#: plugins/SimpleRSS/__init__.py:33 +msgid "Simple RSS" +msgstr "" + +#: plugins/SimpleRSS/__init__.py:36 +msgid "" +"\n" +"Download Torrents automatically from SimpleRSS Feeds\n" +"\n" +"Add RSS feeds on the 'Feeds' tab, then add filters for TV shows (or " +"whatever) on the 'Filters' tab. Double-click entries on the 'Torrents' tab " +"to download extra torrents from the feeds. The Options are pretty self-" +"explanatary.\n" +"\n" +"Please message me (SatNav) on the forums and let me know how you get on..\n" +"\n" +"Enjoy!" +msgstr "" + +#: plugins/SimpleRSS/plugin.py:69 plugins/SimpleRSS/plugin.py:77 +msgid "URL" +msgstr "" + +#: plugins/SimpleRSS/plugin.py:70 +msgid "Last Entry Date" +msgstr "" + +#: plugins/SimpleRSS/plugin.py:78 +msgid "Date" +msgstr "" + +#: plugins/SimpleRSS/plugin.py:135 +msgid "RSS" +msgstr "" + +#: plugins/SimpleRSS/plugin.py:137 +msgid "SimpleRSS Broadcatcher" +msgstr "" + +#: plugins/SimpleRSS/plugin.py:220 plugins/SimpleRSS/plugin.py:224 +#: plugins/SimpleRSS/plugin.py:225 plugins/SimpleRSS/plugin.py:226 +#: plugins/SimpleRSS/plugin.py:228 plugins/SimpleRSS/plugin.py:229 +#: plugins/SimpleRSS/plugin.py:230 +msgid "New Filter" +msgstr "" + +#: plugins/SimpleRSS/plugin.py:299 plugins/SimpleRSS/plugin.py:434 +#: plugins/SimpleRSS/plugin.py:435 +msgid "All" +msgstr "" + +#: plugins/TorrentNotification/notification_preferences.glade:7 +msgid "Torrent Notification Preferences" +msgstr "" + +#: plugins/TorrentNotification/notification_preferences.glade:32 +msgid "Enable event sound (requires pygame, not available on Win32)" +msgstr "" + +#: plugins/TorrentNotification/notification_preferences.glade:59 +msgid "Enable blinking tray icon" +msgstr "" + +#: plugins/TorrentNotification/notification_preferences.glade:69 +msgid "" +"Enable popup notification (requires python-notify, not available on Win32)" +msgstr "" + +#: plugins/TorrentNotification/__init__.py:19 +msgid "Torrent Notification" +msgstr "" + +#: plugins/TorrentNotification/__init__.py:22 +msgid "" +"Make tray icon blink when torrent finishes downloading and/or popup a " +"notification" +msgstr "" + +#: plugins/TorrentNotification/__init__.py:103 +msgid "Torrent complete" +msgstr "" + +#: plugins/TorrentNotification/__init__.py:104 +#: plugins/TorrentFiles/__init__.py:71 +msgid "Files" +msgstr "" + +#: plugins/NetworkHealth/__init__.py:33 +msgid "Network Health Monitor" +msgstr "" + +#: plugins/NetworkHealth/__init__.py:36 +msgid "" +"Network Health Monitor plugin\n" +"\n" +"Written by Kripkenstein" +msgstr "" + +#: plugins/NetworkHealth/plugin.py:53 +msgid "[Health: OK]" +msgstr "" + +#: plugins/EventLogging/event_logging_preferences.glade:7 +msgid "Event Logging Preferences" +msgstr "" + +#: plugins/EventLogging/event_logging_preferences.glade:28 +msgid "Enable log files" +msgstr "" + +#: plugins/EventLogging/event_logging_preferences.glade:41 +msgid "Log files" +msgstr "" + +#: plugins/EventLogging/event_logging_preferences.glade:66 +#: plugins/EventLogging/tab_log.py:210 +msgid "Peer blocked" +msgstr "" + +#: plugins/EventLogging/event_logging_preferences.glade:80 +#: plugins/EventLogging/tab_log.py:200 +msgid "Block finished" +msgstr "" + +#: plugins/EventLogging/event_logging_preferences.glade:94 +#: plugins/EventLogging/tab_log.py:189 +msgid "Block downloading" +msgstr "" + +#: plugins/EventLogging/event_logging_preferences.glade:108 +#: plugins/EventLogging/tab_log.py:179 +msgid "Piece finished" +msgstr "" + +#: plugins/EventLogging/event_logging_preferences.glade:122 +#: plugins/EventLogging/tab_log.py:170 +msgid "Storage moved" +msgstr "" + +#: plugins/EventLogging/event_logging_preferences.glade:136 +#: plugins/EventLogging/tab_log.py:161 +msgid "Tracker warning" +msgstr "" + +#: plugins/EventLogging/event_logging_preferences.glade:150 +#: plugins/EventLogging/tab_log.py:150 +msgid "Tracker alert" +msgstr "" + +#: plugins/EventLogging/event_logging_preferences.glade:164 +#: plugins/EventLogging/tab_log.py:141 +msgid "Tracker reply" +msgstr "" + +#: plugins/EventLogging/event_logging_preferences.glade:178 +#: plugins/EventLogging/tab_log.py:132 +msgid "Tracker announce" +msgstr "" + +#: plugins/EventLogging/event_logging_preferences.glade:192 +#: plugins/EventLogging/tab_log.py:123 +msgid "Fastresume rejected error" +msgstr "" + +#: plugins/EventLogging/event_logging_preferences.glade:206 +#: plugins/EventLogging/tab_log.py:114 +msgid "Peer ban error" +msgstr "" + +#: plugins/EventLogging/event_logging_preferences.glade:220 +#: plugins/EventLogging/tab_log.py:104 +msgid "Hash failed error" +msgstr "" + +#: plugins/EventLogging/event_logging_preferences.glade:234 +#: plugins/EventLogging/tab_log.py:95 +msgid "File error" +msgstr "" + +#: plugins/EventLogging/event_logging_preferences.glade:248 +#: plugins/EventLogging/tab_log.py:86 +msgid "Invalid request" +msgstr "" + +#: plugins/EventLogging/event_logging_preferences.glade:262 +msgid "Peer messages" +msgstr "" + +#: plugins/EventLogging/event_logging_preferences.glade:276 +#: plugins/EventLogging/tab_log.py:70 +msgid "Torrent finished" +msgstr "" + +#: plugins/EventLogging/event_logging_preferences.glade:289 +msgid "Select events to log" +msgstr "" + +#: plugins/EventLogging/__init__.py:19 +msgid "Event Logging" +msgstr "" + +#: plugins/EventLogging/__init__.py:22 +msgid "" +"\n" +"Adds a tab with log of selected events.\n" +"\n" +"Event messages come from libtorrent alerts.\n" +"If you want those strings translated to your locale,\n" +"you'll have to report the issue with libtorrent, not deluge.\n" +"\n" +"Regarding the log files, the logs are saved in a log\n" +"directory within the deluge config directory. Event\n" +"messages for specific torrents are saved to individual\n" +"log files named the same as the associated .torrent\n" +"file. Event messages not specific to any torrent are\n" +"saved to logs named after the events\n" +"(eg peer_messages.log).\n" +"Event messages in the log files also include a timestamp.\n" +"The user is responsible to cleanout the logs.\n" +"\n" +"As of v0.2\n" +"Events are now truncated in display. Log files are not.\n" +"New events are now displayed at the top.\n" +msgstr "" + +#: plugins/EventLogging/__init__.py:88 +msgid "Event Log" +msgstr "" + +#: plugins/EventLogging/tab_log.py:70 plugins/EventLogging/tab_log.py:78 +#: plugins/EventLogging/tab_log.py:86 plugins/EventLogging/tab_log.py:95 +#: plugins/EventLogging/tab_log.py:104 plugins/EventLogging/tab_log.py:114 +#: plugins/EventLogging/tab_log.py:132 plugins/EventLogging/tab_log.py:141 +#: plugins/EventLogging/tab_log.py:150 plugins/EventLogging/tab_log.py:161 +#: plugins/EventLogging/tab_log.py:170 plugins/EventLogging/tab_log.py:179 +#: plugins/EventLogging/tab_log.py:189 plugins/EventLogging/tab_log.py:200 +#: plugins/EventLogging/tab_log.py:210 plugins/EventLogging/tab_log.py:218 +msgid "event message: " +msgstr "" + +#: plugins/EventLogging/tab_log.py:71 plugins/EventLogging/tab_log.py:95 +#: plugins/EventLogging/tab_log.py:105 plugins/EventLogging/tab_log.py:115 +#: plugins/EventLogging/tab_log.py:124 plugins/EventLogging/tab_log.py:133 +#: plugins/EventLogging/tab_log.py:142 plugins/EventLogging/tab_log.py:151 +#: plugins/EventLogging/tab_log.py:162 plugins/EventLogging/tab_log.py:171 +#: plugins/EventLogging/tab_log.py:180 plugins/EventLogging/tab_log.py:190 +#: plugins/EventLogging/tab_log.py:201 +msgid "torrent: " +msgstr "" + +#: plugins/EventLogging/tab_log.py:78 +msgid "Peer message" +msgstr "" + +#: plugins/EventLogging/tab_log.py:78 plugins/EventLogging/tab_log.py:114 +#: plugins/EventLogging/tab_log.py:211 +msgid "ip address: " +msgstr "" + +#: plugins/EventLogging/tab_log.py:79 plugins/EventLogging/tab_log.py:86 +msgid "client: " +msgstr "" + +#: plugins/EventLogging/tab_log.py:106 plugins/EventLogging/tab_log.py:181 +#: plugins/EventLogging/tab_log.py:191 plugins/EventLogging/tab_log.py:202 +msgid "piece index: " +msgstr "" + +#: plugins/EventLogging/tab_log.py:152 +msgid "status code: " +msgstr "" + +#: plugins/EventLogging/tab_log.py:152 +msgid "Times in a row: " +msgstr "" + +#: plugins/EventLogging/tab_log.py:191 plugins/EventLogging/tab_log.py:202 +msgid "block index: " +msgstr "" + +#: plugins/EventLogging/tab_log.py:192 +msgid "peer speed: " +msgstr "" + +#: plugins/SpeedLimiter/__init__.py:17 +msgid "Speed Limiter" +msgstr "" + +#: plugins/SpeedLimiter/__init__.py:20 +msgid "Set the desired speed limit per torrent." +msgstr "" + +#: plugins/SpeedLimiter/__init__.py:80 +msgid "Torrent _Download Speed" +msgstr "" + +#: plugins/SpeedLimiter/__init__.py:90 +msgid "Torrent Upload _Speed" +msgstr "" + +#: plugins/SpeedLimiter/__init__.py:144 +msgid "Torrent Upload Speed (KiB/s):" +msgstr "" + +#: plugins/SpeedLimiter/__init__.py:176 +msgid "Torrent Download Speed (KiB/s):" +msgstr "" + +#: plugins/TorrentSearch/__init__.py:33 +msgid "Torrent Search" +msgstr "" + +#: plugins/TorrentSearch/__init__.py:36 +msgid "A searchbar for torrent search engines" +msgstr "" + +#: plugins/TorrentSearch/plugin.py:52 +msgid "Search String" +msgstr "" + +#: plugins/TorrentSearch/plugin.py:74 plugins/TorrentSearch/plugin.py:164 +msgid "Choose an Engine" +msgstr "" + +#: plugins/TorrentSearch/plugin.py:78 +msgid "Manage Engines" +msgstr "" + +#: plugins/TorrentSearch/plugin.py:185 +msgid "Search " +msgstr "" + +#: plugins/TorrentSearch/searchdlg.glade:7 +msgid "Manage Search Plugins" +msgstr "" + +#: plugins/TorrentSearch/searchdlg.glade:79 +msgid "Name:" +msgstr "" + +#: plugins/TorrentSearch/searchdlg.glade:91 plugins/WebSeed/webseed.glade:28 +msgid "URL:" +msgstr "" + +#: plugins/TorrentSearch/searchdlg.glade:123 +msgid "" +"Add a new search engine by entering a Name and a URL. For Name, enter the " +"name of the search engine to be used. For URL, enter the url of the seach " +"page. The user's search query will replace any instance of ${query} in the " +"URL.\n" +"For example, a Google search would be:\n" +"Name: Google\n" +"URL: http://www.google.com/search?q=${query}" +msgstr "" + +#: plugins/TorrentSearch/searchdlg.glade:133 +msgid "Help" +msgstr "" + +#: plugins/NetworkGraph/__init__.py:33 +msgid "Network Activity Graph" +msgstr "" + +#: plugins/NetworkGraph/__init__.py:36 +msgid "" +"Network Activity Graph plugin\n" +"\n" +"Written by Kripkenstein" +msgstr "" + +#: plugins/NetworkGraph/__init__.py:89 +msgid "Graph" +msgstr "" + +#: plugins/Locations/__init__.py:18 +msgid "Locations" +msgstr "" + +#: plugins/Locations/__init__.py:21 +msgid "" +"Automagically remembers relevant settings for different locations.\n" +"\n" +"When this plugin is active, it will remember a lot of useful network-" +"specific preferences, such as up- or download limits, open ports and proxy " +"information. Just change preferences to suit each location while connected, " +"and Deluge will automagically use those settings the next time you connect " +"at that location. There is no other configuration needed.\n" +"\n" +"The plugin determines location by identifying the unique MAC address of the " +"Gateway used for the connection. It is therefore possible to have different " +"settings for home and work, or for broadband, 3G and dial-up on the fly.\n" +msgstr "" + +#: plugins/TorrentFiles/tab_files.py:59 +msgid "Progress" +msgstr "" + +#: plugins/TorrentFiles/tab_files.py:100 +msgid "There was an error trying to launch the file." +msgstr "" + +#: plugins/TorrentFiles/__init__.py:19 +msgid "Torrent Files" +msgstr "" + +#: plugins/TorrentFiles/__init__.py:22 +msgid "" +"\n" +"This plugin shows you the files inside a torrent and allows you to set " +"priorities for them and choose which ones you want or don't want to " +"download.\n" +msgstr "" + +#: plugins/ExtraStats/__init__.py:19 +msgid "Extra Stats" +msgstr "" + +#: plugins/ExtraStats/__init__.py:22 +msgid "" +"\n" +"Adds info to tray tooltip.\n" +"Adds these stats.\n" +"total bytes downloaded\n" +"total bytes uploaded\n" +"overall ratio\n" +"torrents completed\n" +"\n" +"All of these stats come in pairs:\n" +"across sessions stat and within session stat.\n" +"By default, all pairs enabled, but can be disabled in plugin preferences.\n" +"\n" +"session data always shows up within parenthesis\n" +"eg. Total Downloaded: 5 GiB (4 MiB)\n" +"would be 5 GiB across sessions and 4 MiB within session\n" +msgstr "" + +#: plugins/ExtraStats/__init__.py:175 +#: plugins/ExtraStats/stats_preferences.glade:28 +msgid "Total Downloaded" +msgstr "" + +#: plugins/ExtraStats/__init__.py:181 +#: plugins/ExtraStats/stats_preferences.glade:38 +msgid "Total Uploaded" +msgstr "" + +#: plugins/ExtraStats/__init__.py:187 plugins/ExtraStats/__init__.py:191 +msgid "Undefined" +msgstr "" + +#: plugins/ExtraStats/__init__.py:195 +#: plugins/ExtraStats/stats_preferences.glade:52 +msgid "Overall Ratio" +msgstr "" + +#: plugins/ExtraStats/__init__.py:200 +#: plugins/ExtraStats/stats_preferences.glade:66 +msgid "Torrents Completed" +msgstr "" + +#: plugins/ExtraStats/__init__.py:206 +#: plugins/ExtraStats/stats_preferences.glade:80 +msgid "Running Time" +msgstr "" + +#: plugins/ExtraStats/stats_preferences.glade:7 +msgid "Extra Stats Preferences" +msgstr "" + +#: plugins/MoveTorrent/__init__.py:19 +msgid "Move Torrent" +msgstr "" + +#: plugins/MoveTorrent/__init__.py:22 +msgid "" +"This plugin allows users to move the torrent to a different directory " +"without having to remove and re-add the torrent. This feature can be found " +"by right-clicking on a torrent.\n" +"Furthermore, it allows the user to automatically have finished torrents " +"moved to a different folder." +msgstr "" + +#: plugins/MoveTorrent/__init__.py:76 +msgid "_Move Torrent" +msgstr "" + +#: plugins/MoveTorrent/__init__.py:95 +msgid "Choose a directory to move files to" +msgstr "" + +#: plugins/MoveTorrent/__init__.py:129 +msgid "" +"You cannot move torrent to a different partition. Please check your " +"preferences. Also, you cannot move a torrent's files to the same directory " +"that they are already stored or move a torrent's files before any of its " +"files have actually been created." +msgstr "" + +#: plugins/MoveTorrent/movetorrent.glade:25 +msgid "Move completed downloads to:" +msgstr "" + +#: plugins/MoveTorrent/movetorrent.glade:59 plugins/WebSeed/webseed.glade:64 +msgid "gtk-cancel" +msgstr "" + +#: plugins/MoveTorrent/movetorrent.glade:71 plugins/WebSeed/webseed.glade:72 +msgid "gtk-ok" +msgstr "" + +#: plugins/WebSeed/__init__.py:19 +msgid "Web Seed" +msgstr "" + +#: plugins/WebSeed/__init__.py:22 +msgid "This plugin allows users to add web seeds to their torrents" +msgstr "" + +#: plugins/WebSeed/__init__.py:51 +msgid "_Add Web Seed" +msgstr "" + +#: plugins/WebSeed/webseed.glade:7 +msgid "Open Containing Folder Preferences" +msgstr "" + +#: plugins/Scheduler/plugin.py:76 +msgid "Scheduler Settings" +msgstr "" + +#: plugins/Scheduler/plugin.py:86 +msgid "Limit download to:" +msgstr "" + +#: plugins/Scheduler/plugin.py:87 +msgid "Limit upload to:" +msgstr "" + +#: plugins/Scheduler/plugin.py:135 +msgid "Yellow is limited, red is stopped and green is unlimited." +msgstr "" + +#: plugins/Scheduler/plugin.py:137 +msgid "" +"When set to -1 (unlimited), the global limits in Deluge's preferences will " +"be obeyed." +msgstr "" diff --git a/po/si.po b/po/si.po new file mode 100644 index 000000000..395ad19b3 --- /dev/null +++ b/po/si.po @@ -0,0 +1,2105 @@ +# Sinhalese translation for deluge +# Copyright (c) 2007 Rosetta Contributors and Canonical Ltd 2007 +# This file is distributed under the same license as the deluge package. +# FIRST AUTHOR , 2007. +# +msgid "" +msgstr "" +"Project-Id-Version: deluge\n" +"Report-Msgid-Bugs-To: FULL NAME \n" +"POT-Creation-Date: 2007-10-15 10:51-0500\n" +"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" +"Last-Translator: FULL NAME \n" +"Language-Team: Sinhalese \n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"X-Launchpad-Export-Date: 2007-10-23 03:22+0000\n" +"X-Generator: Launchpad (build Unknown)\n" + +#: glade/delugegtk.glade:204 +msgid "Downloaded:" +msgstr "" + +#: glade/delugegtk.glade:218 +msgid "Uploaded:" +msgstr "" + +#: glade/delugegtk.glade:236 +msgid "Seeders:" +msgstr "" + +#: glade/delugegtk.glade:254 +msgid "Share Ratio:" +msgstr "" + +#: glade/delugegtk.glade:273 glade/delugegtk.glade:292 +msgid "Speed:" +msgstr "" + +#: glade/delugegtk.glade:313 +msgid "Peers:" +msgstr "" + +#: glade/delugegtk.glade:334 +msgid "ETA:" +msgstr "" + +#: glade/delugegtk.glade:351 +msgid "Pieces:" +msgstr "" + +#: glade/delugegtk.glade:389 +msgid "Availability:" +msgstr "" + +#: glade/delugegtk.glade:430 +msgid "Statistics" +msgstr "" + +#: glade/delugegtk.glade:486 +msgid "Path:" +msgstr "" + +#: glade/delugegtk.glade:520 +msgid "Total Size:" +msgstr "" + +#: glade/delugegtk.glade:582 +msgid "Tracker Status:" +msgstr "" + +#: glade/delugegtk.glade:615 +msgid "Next Announce:" +msgstr "" + +#: glade/delugegtk.glade:654 +msgid "# of files:" +msgstr "" + +#: glade/delugegtk.glade:682 +msgid "Tracker:" +msgstr "" + +#: glade/delugegtk.glade:706 +msgid "Name:" +msgstr "" + +#: glade/delugegtk.glade:723 +msgid "Torrent Info" +msgstr "" + +#: glade/delugegtk.glade:750 +msgid "Details" +msgstr "" + +#: glade/delugegtk.glade:790 +msgid "_File" +msgstr "" + +#: glade/delugegtk.glade:797 glade/tray_menu.glade:61 +msgid "_Add Torrent" +msgstr "" + +#: glade/delugegtk.glade:812 +msgid "Add _URL" +msgstr "" + +#: glade/delugegtk.glade:820 +msgid "_Clear Completed" +msgstr "" + +#: glade/delugegtk.glade:853 +msgid "_Edit" +msgstr "" + +#: glade/delugegtk.glade:862 +msgid "gtk-select-all" +msgstr "" + +#: glade/delugegtk.glade:878 +msgid "Plu_gins" +msgstr "" + +#: glade/delugegtk.glade:906 +msgid "_Torrent" +msgstr "" + +#: glade/delugegtk.glade:913 +msgid "_View" +msgstr "" + +#: glade/delugegtk.glade:921 +msgid "_Toolbar" +msgstr "" + +#: glade/delugegtk.glade:930 +msgid "_Details" +msgstr "" + +#: glade/delugegtk.glade:939 +msgid "_Columns" +msgstr "" + +#: glade/delugegtk.glade:947 src/interface.py:595 src/files.py:79 +msgid "Size" +msgstr "" + +#: glade/delugegtk.glade:956 src/interface.py:599 +msgid "Status" +msgstr "" + +#: glade/delugegtk.glade:965 src/interface.py:601 +msgid "Seeders" +msgstr "" + +#: glade/delugegtk.glade:974 src/interface.py:604 +#: plugins/TorrentPeers/__init__.py:72 +msgid "Peers" +msgstr "" + +#: glade/delugegtk.glade:983 src/interface.py:607 src/interface.py:1105 +#: src/interface.py:1136 plugins/TorrentPeers/tab_peers.py:89 +msgid "Down Speed" +msgstr "" + +#: glade/delugegtk.glade:992 src/interface.py:610 src/interface.py:1106 +#: src/interface.py:1137 plugins/TorrentPeers/tab_peers.py:91 +msgid "Up Speed" +msgstr "" + +#: glade/delugegtk.glade:1001 +msgid "Time Remaining" +msgstr "" + +#: glade/delugegtk.glade:1010 +msgid "Availability" +msgstr "" + +#: glade/delugegtk.glade:1019 +msgid "Share Ratio" +msgstr "" + +#: glade/delugegtk.glade:1036 +msgid "_Help" +msgstr "" + +#: glade/delugegtk.glade:1044 +msgid "Help translate this application" +msgstr "" + +#: glade/delugegtk.glade:1045 +msgid "_Translate This Application..." +msgstr "" + +#: glade/delugegtk.glade:1068 +msgid "Runs the first-time configuration wizard" +msgstr "" + +#: glade/delugegtk.glade:1069 +msgid "_Run Configuration Wizard" +msgstr "" + +#: glade/delugegtk.glade:1142 +msgid "Add Torrent" +msgstr "" + +#: glade/delugegtk.glade:1143 +msgid "Add" +msgstr "" + +#: glade/delugegtk.glade:1156 glade/dgtkpopups.glade:6 +msgid "Remove Torrent" +msgstr "" + +#: glade/delugegtk.glade:1157 +msgid "Remove" +msgstr "" + +#: glade/delugegtk.glade:1169 +msgid "Clear Seeding Torrents" +msgstr "" + +#: glade/delugegtk.glade:1170 +msgid "Clear" +msgstr "" + +#: glade/delugegtk.glade:1192 +msgid "Start or Resume Torrent" +msgstr "" + +#: glade/delugegtk.glade:1193 +msgid "Resume" +msgstr "" + +#: glade/delugegtk.glade:1206 +msgid "Pause Torrent" +msgstr "" + +#: glade/delugegtk.glade:1207 +msgid "Pause" +msgstr "" + +#: glade/delugegtk.glade:1219 +msgid "Queue Torrent Up" +msgstr "" + +#: glade/delugegtk.glade:1220 +msgid "Up" +msgstr "" + +#: glade/delugegtk.glade:1233 +msgid "Queue Torrent Down" +msgstr "" + +#: glade/delugegtk.glade:1234 +msgid "Down" +msgstr "" + +#: glade/delugegtk.glade:1255 +msgid "Change Deluge preferences" +msgstr "" + +#: glade/delugegtk.glade:1256 +msgid "Preferences" +msgstr "" + +#: glade/delugegtk.glade:1269 glade/dgtkpopups.glade:209 +#: glade/preferences_dialog.glade:2709 +msgid "Plugins" +msgstr "" + +#: glade/dgtkpopups.glade:41 +msgid "" +"Are you sure you want to remove the selected " +"torrent(s) from Deluge?" +msgstr "" + +#: glade/dgtkpopups.glade:65 +msgid "Delete downloaded files" +msgstr "" + +#: glade/dgtkpopups.glade:88 +msgid "Delete .torrent file" +msgstr "" + +#: glade/dgtkpopups.glade:155 +msgid "Show/Hide" +msgstr "" + +#: glade/dgtkpopups.glade:163 +msgid "Add a Torrent..." +msgstr "" + +#: glade/dgtkpopups.glade:179 +msgid "Clear Finished" +msgstr "" + +#: glade/dgtkpopups.glade:241 +msgid "Speed" +msgstr "" + +#: glade/file_tab_menu.glade:11 +msgid "_Open File" +msgstr "" + +#: glade/file_tab_menu.glade:33 +msgid "Select All" +msgstr "" + +#: glade/file_tab_menu.glade:48 +msgid "Unselect All" +msgstr "" + +#: glade/file_tab_menu.glade:68 src/core.py:100 +msgid "Don't download" +msgstr "" + +#: glade/file_tab_menu.glade:83 src/core.py:101 +msgid "Normal" +msgstr "" + +#: glade/file_tab_menu.glade:98 src/core.py:102 +msgid "High" +msgstr "" + +#: glade/file_tab_menu.glade:113 src/core.py:103 +msgid "Highest" +msgstr "" + +#: glade/merge_dialog.glade:7 +msgid "Deluge Merge Tracker Lists" +msgstr "" + +#: glade/merge_dialog.glade:23 +msgid "" +"Torrent already detected in Deluge, would you like to merge the tracker " +"lists?" +msgstr "" + +#: glade/preferences_dialog.glade:9 +msgid "Deluge Preferences" +msgstr "" + +#: glade/preferences_dialog.glade:57 +msgid "Ask where to save each download" +msgstr "" + +#: glade/preferences_dialog.glade:75 glade/wizard.glade:187 +#: plugins/MoveTorrent/movetorrent.glade:35 +msgid "Select A Folder" +msgstr "" + +#: glade/preferences_dialog.glade:87 glade/preferences_dialog.glade:88 +msgid "Store all downloads in:" +msgstr "" + +#: glade/preferences_dialog.glade:108 +msgid "Download Location" +msgstr "" + +#: glade/preferences_dialog.glade:142 glade/preferences_dialog.glade:155 +#: glade/wizard.glade:237 glade/wizard.glade:478 +msgid "" +"The number of active torrents that Deluge will run. Set to -1 for unlimited." +msgstr "" + +#: glade/preferences_dialog.glade:144 +msgid "Maximum simultaneous active torrents:" +msgstr "" + +#: glade/preferences_dialog.glade:175 glade/preferences_dialog.glade:176 +msgid "Enable selecting files for torrents before loading" +msgstr "" + +#: glade/preferences_dialog.glade:190 glade/preferences_dialog.glade:191 +msgid "Prioritize first and last pieces of files in torrent" +msgstr "" + +#: glade/preferences_dialog.glade:207 +msgid "Torrents" +msgstr "" + +#: glade/preferences_dialog.glade:245 +msgid "" +"Full allocation preallocates all of the space that is needed for the torrent " +"and prevents disk fragmentation" +msgstr "" + +#: glade/preferences_dialog.glade:246 +msgid "Use Full Allocation" +msgstr "" + +#: glade/preferences_dialog.glade:268 +msgid "Compact allocation only allocates space as needed" +msgstr "" + +#: glade/preferences_dialog.glade:269 +msgid "Use Compact Allocation" +msgstr "" + +#: glade/preferences_dialog.glade:289 +msgid "Allocation" +msgstr "" + +#: glade/preferences_dialog.glade:313 +msgid "Downloads" +msgstr "" + +#: glade/preferences_dialog.glade:357 +msgid "" +"Please Note - Changes to these settings will only be applied the next " +"time Deluge is restarted." +msgstr "" + +#: glade/preferences_dialog.glade:399 glade/wizard.glade:48 +msgid "From:" +msgstr "" + +#: glade/preferences_dialog.glade:422 glade/wizard.glade:66 +msgid "To:" +msgstr "" + +#: glade/preferences_dialog.glade:448 +msgid "Deluge will automatically choose a different port to use every time." +msgstr "" + +#: glade/preferences_dialog.glade:449 +msgid "Random Ports" +msgstr "" + +#: glade/preferences_dialog.glade:466 +msgid "Test Active Port" +msgstr "" + +#: glade/preferences_dialog.glade:492 +msgid "TCP" +msgstr "" + +#: glade/preferences_dialog.glade:504 +msgid "Active Port:" +msgstr "" + +#: glade/preferences_dialog.glade:517 +msgid "0000" +msgstr "" + +#: glade/preferences_dialog.glade:555 +msgid "Distributed hash table may improve the amount of active connections." +msgstr "" + +#: glade/preferences_dialog.glade:556 +msgid "Enable Mainline DHT" +msgstr "" + +#: glade/preferences_dialog.glade:569 +msgid "DHT" +msgstr "" + +#: glade/preferences_dialog.glade:603 +msgid "Universal Plug and Play" +msgstr "" + +#: glade/preferences_dialog.glade:604 +msgid "UPnP" +msgstr "" + +#: glade/preferences_dialog.glade:618 +msgid "NAT Port Mapping Protocol" +msgstr "" + +#: glade/preferences_dialog.glade:619 +msgid "NAT-PMP" +msgstr "" + +#: glade/preferences_dialog.glade:634 +msgid "µTorrent Peer-Exchange" +msgstr "" + +#: glade/preferences_dialog.glade:635 +msgid "µTorrent-PeX" +msgstr "" + +#: glade/preferences_dialog.glade:653 +msgid "Network Extras" +msgstr "" + +#: glade/preferences_dialog.glade:693 +msgid "Inbound:" +msgstr "" + +#: glade/preferences_dialog.glade:702 glade/preferences_dialog.glade:724 +msgid "" +"Disabled\n" +"Enabled\n" +"Forced" +msgstr "" + +#: glade/preferences_dialog.glade:715 +msgid "Outbound:" +msgstr "" + +#: glade/preferences_dialog.glade:742 +msgid "Prefer to encrypt the entire stream" +msgstr "" + +#: glade/preferences_dialog.glade:755 +msgid "Level:" +msgstr "" + +#: glade/preferences_dialog.glade:764 +msgid "" +"Handshake\n" +"Full Stream\n" +"Either" +msgstr "" + +#: glade/preferences_dialog.glade:785 +msgid "Encryption" +msgstr "" + +#: glade/preferences_dialog.glade:815 +msgid "Network" +msgstr "" + +#: glade/preferences_dialog.glade:855 +msgid "Queue torrents to bottom when they begin seeding" +msgstr "" + +#: glade/preferences_dialog.glade:867 +msgid "Queue new torrents above completed ones" +msgstr "" + +#: glade/preferences_dialog.glade:883 +msgid "Stop seeding torrents when their share ratio reaches:" +msgstr "" + +#: glade/preferences_dialog.glade:919 +msgid "Automatically clear torrents that reach the max share ratio" +msgstr "" + +#: glade/preferences_dialog.glade:935 +msgid "Seeding" +msgstr "" + +#: glade/preferences_dialog.glade:964 src/core.py:91 +msgid "Seeding" +msgstr "" + +#: glade/preferences_dialog.glade:1009 glade/wizard.glade:257 +#: glade/wizard.glade:318 +msgid "The maximum upload slots for all torrents. Set -1 for unlimited." +msgstr "" + +#: glade/preferences_dialog.glade:1026 glade/preferences_dialog.glade:1110 +#: glade/preferences_dialog.glade:1130 glade/wizard.glade:277 +#: glade/wizard.glade:341 +msgid "The maximum upload speed for all torrents. Set -1 for unlimited." +msgstr "" + +#: glade/preferences_dialog.glade:1044 glade/preferences_dialog.glade:1060 +msgid "The maximum download speed for all torrents. Set -1 for unlimited." +msgstr "" + +#: glade/preferences_dialog.glade:1062 +msgid "Maximum Download Speed (KiB/s):" +msgstr "" + +#: glade/preferences_dialog.glade:1073 glade/preferences_dialog.glade:1092 +#: glade/wizard.glade:297 glade/wizard.glade:364 +msgid "The maximum number of connections allowed. Set -1 for unlimited." +msgstr "" + +#: glade/preferences_dialog.glade:1094 glade/preferences_dialog.glade:1278 +#: glade/wizard.glade:298 +msgid "Maximum Connections:" +msgstr "" + +#: glade/preferences_dialog.glade:1112 glade/wizard.glade:278 +msgid "Maximum Upload Speed (KiB/s):" +msgstr "" + +#: glade/preferences_dialog.glade:1132 glade/preferences_dialog.glade:1259 +#: glade/wizard.glade:258 +msgid "Maximum Upload Slots:" +msgstr "" + +#: glade/preferences_dialog.glade:1150 glade/preferences_dialog.glade:1166 +#: glade/wizard.glade:434 glade/wizard.glade:455 +msgid "" +"The maximum half-open connections. A high value may crash some cheap " +"routers. Set -1 for unlimited." +msgstr "" + +#: glade/preferences_dialog.glade:1152 glade/wizard.glade:435 +msgid "Maximum Half-Open Connections:" +msgstr "" + +#: glade/preferences_dialog.glade:1186 +msgid "Global Bandwidth Usage" +msgstr "" + +#: glade/preferences_dialog.glade:1222 glade/preferences_dialog.glade:1257 +msgid "The maximum upload slots per torrent. Set -1 for unlimited." +msgstr "" + +#: glade/preferences_dialog.glade:1239 glade/preferences_dialog.glade:1276 +msgid "The maximum number of connections per torrent. Set -1 for unlimited." +msgstr "" + +#: glade/preferences_dialog.glade:1291 +msgid "Per Torrent Bandwidth Usage" +msgstr "" + +#: glade/preferences_dialog.glade:1317 +msgid "Bandwidth" +msgstr "" + +#: glade/preferences_dialog.glade:1362 glade/preferences_dialog.glade:1556 +#: glade/preferences_dialog.glade:1750 glade/preferences_dialog.glade:1944 +msgid "Affects regular bittorrent peers" +msgstr "" + +#: glade/preferences_dialog.glade:1363 +msgid "Peer Proxy" +msgstr "" + +#: glade/preferences_dialog.glade:1408 glade/preferences_dialog.glade:1602 +#: glade/preferences_dialog.glade:1796 glade/preferences_dialog.glade:1990 +msgid "Port" +msgstr "" + +#: glade/preferences_dialog.glade:1421 glade/preferences_dialog.glade:1615 +#: glade/preferences_dialog.glade:1809 glade/preferences_dialog.glade:2003 +msgid "Server" +msgstr "" + +#: glade/preferences_dialog.glade:1462 glade/preferences_dialog.glade:1656 +#: glade/preferences_dialog.glade:1850 glade/preferences_dialog.glade:2044 +msgid "" +"None\n" +"Socksv4\n" +"Socksv5\n" +"Socksv5 W/ Auth\n" +"HTTP\n" +"HTTP W/ Auth" +msgstr "" + +#: glade/preferences_dialog.glade:1478 glade/preferences_dialog.glade:1672 +#: glade/preferences_dialog.glade:1866 glade/preferences_dialog.glade:2060 +msgid "Password" +msgstr "" + +#: glade/preferences_dialog.glade:1489 glade/preferences_dialog.glade:1683 +#: glade/preferences_dialog.glade:1877 glade/preferences_dialog.glade:2071 +msgid "Username" +msgstr "" + +#: glade/preferences_dialog.glade:1500 glade/preferences_dialog.glade:1694 +#: glade/preferences_dialog.glade:1888 glade/preferences_dialog.glade:2082 +msgid "Proxy type" +msgstr "" + +#: glade/preferences_dialog.glade:1525 +msgid "Peer Proxy" +msgstr "" + +#: glade/preferences_dialog.glade:1557 +msgid "Tracker Proxy" +msgstr "" + +#: glade/preferences_dialog.glade:1719 +msgid "Tracker Proxy" +msgstr "" + +#: glade/preferences_dialog.glade:1751 +msgid "DHT Proxy" +msgstr "" + +#: glade/preferences_dialog.glade:1913 +msgid "DHT Proxy" +msgstr "" + +#: glade/preferences_dialog.glade:1945 +msgid "Web Seed Proxy" +msgstr "" + +#: glade/preferences_dialog.glade:2107 +msgid "Web Seed Proxy" +msgstr "" + +#: glade/preferences_dialog.glade:2134 +msgid "Proxies" +msgstr "" + +#: glade/preferences_dialog.glade:2162 +msgid "Enable system tray icon" +msgstr "" + +#: glade/preferences_dialog.glade:2178 +msgid "Minimize to tray on close" +msgstr "" + +#: glade/preferences_dialog.glade:2197 +msgid "Start in tray" +msgstr "" + +#: glade/preferences_dialog.glade:2221 +msgid "Password protect system tray" +msgstr "" + +#: glade/preferences_dialog.glade:2239 +msgid "Password:" +msgstr "" + +#: glade/preferences_dialog.glade:2281 +msgid "System Tray" +msgstr "" + +#: glade/preferences_dialog.glade:2323 +msgid "Open folder with:" +msgstr "" + +#: glade/preferences_dialog.glade:2340 +msgid "Custom:" +msgstr "" + +#: glade/preferences_dialog.glade:2363 +msgid "" +"Auto-detect (xdg-open)\n" +"Konqueror\n" +"Nautilus\n" +"Thunar" +msgstr "" + +#: glade/preferences_dialog.glade:2410 +msgid "Desktop File Manager - only for non-Windows platforms" +msgstr "" + +#: glade/preferences_dialog.glade:2442 +msgid "GUI update interval (seconds)" +msgstr "" + +#: glade/preferences_dialog.glade:2470 +msgid "Performance" +msgstr "" + +#: glade/preferences_dialog.glade:2504 +msgid "" +"Deluge will check our servers and will tell you if a newer version has been " +"released" +msgstr "" + +#: glade/preferences_dialog.glade:2505 +msgid "Be alerted about new releases" +msgstr "" + +#: glade/preferences_dialog.glade:2522 +msgid "Updates" +msgstr "" + +#: glade/preferences_dialog.glade:2551 +msgid "" +"Help us improve Deluge by sending us your Python and PyGTK\n" +"versions, OS and processor types. Absolutely no other\n" +"information is sent." +msgstr "" + +#: glade/preferences_dialog.glade:2564 +msgid "System Information" +msgstr "" + +#: glade/preferences_dialog.glade:2587 +#: plugins/EventLogging/event_logging_preferences.glade:52 +#: plugins/EventLogging/tab_log.py:218 +msgid "Other" +msgstr "" + +#: glade/preferences_dialog.glade:2681 +msgid "gtk-preferences" +msgstr "" + +#: glade/torrent_menu.glade:11 +msgid "Re_sume" +msgstr "" + +#: glade/torrent_menu.glade:28 +msgid "_Pause" +msgstr "" + +#: glade/torrent_menu.glade:49 +msgid "_Update Tracker" +msgstr "" + +#: glade/torrent_menu.glade:66 +msgid "_Edit Trackers" +msgstr "" + +#: glade/torrent_menu.glade:88 +msgid "_Remove Torrent" +msgstr "" + +#: glade/torrent_menu.glade:111 +msgid "_Queue" +msgstr "" + +#: glade/torrent_menu.glade:121 +msgid "_Top" +msgstr "" + +#: glade/torrent_menu.glade:137 +msgid "_Up" +msgstr "" + +#: glade/torrent_menu.glade:153 +msgid "_Down" +msgstr "" + +#: glade/torrent_menu.glade:169 +msgid "_Bottom" +msgstr "" + +#: glade/torrent_menu.glade:198 +msgid "_Open Containing Folder" +msgstr "" + +#: glade/tray_menu.glade:12 +msgid "_Show Deluge" +msgstr "" + +#: glade/tray_menu.glade:21 +msgid "_Resume All" +msgstr "" + +#: glade/tray_menu.glade:38 +msgid "_Pause All" +msgstr "" + +#: glade/tray_menu.glade:84 +msgid "_Download Speed Limit" +msgstr "" + +#: glade/tray_menu.glade:100 +msgid "_Upload Speed Limit" +msgstr "" + +#: glade/tray_menu.glade:122 +msgid "_Quit" +msgstr "" + +#: glade/edit_trackers.glade:9 +msgid "Edit Trackers" +msgstr "" + +#: glade/edit_trackers.glade:19 +msgid "Tracker Editing" +msgstr "" + +#: glade/files_dialog.glade:8 +msgid "Deluge File Selection" +msgstr "" + +#: glade/files_dialog.glade:42 +msgid "Torrent will not be distributed on the trackerless (DHT) network" +msgstr "" + +#: glade/files_dialog.glade:43 +msgid "Set the private flag" +msgstr "" + +#: glade/wizard.glade:10 +msgid "First Launch Configuration" +msgstr "" + +#: glade/wizard.glade:20 +msgid "" +"This wizard will help you set up Deluge to your liking. If you are new to " +"Deluge, please note that most of Deluge's functionality and features come in " +"the form of plugins, which can be accessed by clicking on Plugins in the " +"Edit menu or the toolbar." +msgstr "" + +#: glade/wizard.glade:36 +msgid "" +"Deluge needs a range of ports that it will try to listen to for incoming " +"connections. The default ports for bittorrent are 6881-6889, however, most " +"ISPs block those ports, so you're encouraged to pick others, between 49152 " +"and 65535. Alternatively, you can have Deluge automatically pick random " +"ports for you." +msgstr "" + +#: glade/wizard.glade:88 +msgid "Use _Random Ports" +msgstr "" + +#: glade/wizard.glade:116 +msgid "" +"Would you like Deluge to automatically download to a predefined location, or " +"would you like to specify the download location every time?" +msgstr "" + +#: glade/wizard.glade:141 +msgid "Ask where to save each file" +msgstr "" + +#: glade/wizard.glade:165 +msgid "Store all downloads in: " +msgstr "" + +#: glade/wizard.glade:215 +msgid "" +"Please select the upload speed of your connection, which we will then use to " +"automatically make suggestions for the settings below" +msgstr "" + +#: glade/wizard.glade:238 +msgid "Maximum Active Torrents:" +msgstr "" + +#: glade/wizard.glade:386 +msgid "" +"28.8k\n" +"56k\n" +"64k\n" +"96k\n" +"128k\n" +"192k\n" +"256k\n" +"384k\n" +"512k\n" +"640k\n" +"768k\n" +"1Mbit\n" +"2Mbit\n" +"10Mbit\n" +"20Mbit\n" +"40Mbit\n" +"50Mbit\n" +"100Mbit" +msgstr "" + +#: glade/wizard.glade:419 +msgid "Your Upload Line Speed:" +msgstr "" + +#: glade/wizard.glade:506 +msgid "" +"_Help us improve Deluge by sending us your Python and PyGTK\n" +"versions, OS and processor types. Absolutely no other\n" +"information is sent." +msgstr "" + +#: src/interface.py:261 src/interface.py:267 src/interface.py:348 +#: src/interface.py:374 plugins/SpeedLimiter/__init__.py:82 +#: plugins/SpeedLimiter/__init__.py:92 plugins/SpeedLimiter/__init__.py:136 +#: plugins/SpeedLimiter/__init__.py:168 +msgid "KiB/s" +msgstr "" + +#: src/interface.py:288 src/interface.py:349 src/interface.py:375 +#: src/interface.py:1087 src/interface.py:1094 src/interface.py:1099 +#: src/interface.py:1127 src/interface.py:1129 +#: plugins/SpeedLimiter/__init__.py:137 plugins/SpeedLimiter/__init__.py:169 +msgid "Unlimited" +msgstr "" + +#: src/interface.py:291 +msgid "Activated" +msgstr "" + +#: src/interface.py:340 src/interface.py:352 src/interface.py:378 +#: plugins/DesiredRatio/__init__.py:114 plugins/SpeedLimiter/__init__.py:140 +#: plugins/SpeedLimiter/__init__.py:172 +msgid "Other..." +msgstr "" + +#: src/interface.py:357 +msgid "Download Speed (KiB/s):" +msgstr "" + +#: src/interface.py:383 +msgid "Upload Speed (KiB/s):" +msgstr "" + +#: src/interface.py:412 +msgid "Deluge is locked" +msgstr "" + +#: src/interface.py:415 +msgid "" +"Deluge is password protected.\n" +"To show the Deluge window, please enter your password" +msgstr "" + +#: src/interface.py:563 src/common.py:76 +msgid "Infinity" +msgstr "" + +#: src/interface.py:575 +msgid "Unknown" +msgstr "" + +#: src/interface.py:592 plugins/SimpleRSS/plugin.py:68 +#: plugins/SimpleRSS/plugin.py:76 plugins/SimpleRSS/plugin.py:83 +#: plugins/TorrentSearch/plugin.py:51 +msgid "Name" +msgstr "" + +#: src/interface.py:613 +msgid "ETA" +msgstr "" + +#: src/interface.py:616 +msgid "Avail." +msgstr "" + +#: src/interface.py:618 +msgid "Ratio" +msgstr "" + +#: src/interface.py:863 +#, python-format +msgid "Paused %s" +msgstr "" + +#: src/interface.py:1105 +msgid "Connections" +msgstr "" + +#: src/interface.py:1123 +msgid "DHT" +msgstr "" + +#: src/interface.py:1132 plugins/TorrentCreator/__init__.py:148 +msgid "Deluge" +msgstr "" + +#: src/interface.py:1132 +msgid "Download" +msgstr "" + +#: src/interface.py:1133 +msgid "Upload" +msgstr "" + +#: src/interface.py:1136 +msgid "Deluge Bittorrent Client" +msgstr "" + +#: src/interface.py:1213 +msgid "Choose a download directory" +msgstr "" + +#: src/interface.py:1240 +msgid "" +"An error occured while trying to add the torrent. It's possible your " +".torrent file is corrupted." +msgstr "" + +#: src/interface.py:1265 +msgid "Unknown duplicate torrent error." +msgstr "" + +#: src/interface.py:1270 +msgid "" +"There is not enough free disk space to complete your download." +msgstr "" + +#: src/interface.py:1272 +msgid "Space Needed:" +msgstr "" + +#: src/interface.py:1273 +msgid "Available Space:" +msgstr "" + +#: src/interface.py:1290 +msgid "Add torrent from URL" +msgstr "" + +#: src/interface.py:1294 +msgid "Enter the URL of the .torrent to download" +msgstr "" + +#: src/interface.py:1355 +msgid "Warning - all downloaded files for this torrent will be deleted!" +msgstr "" + +#: src/interface.py:1366 +msgid "Are you sure that you want to remove all seeding torrents?" +msgstr "" + +#: src/core.py:85 +msgid "Queued" +msgstr "" + +#: src/core.py:86 +msgid "Checking" +msgstr "" + +#: src/core.py:87 +msgid "Connecting" +msgstr "" + +#: src/core.py:88 +msgid "Downloading Metadata" +msgstr "" + +#: src/core.py:89 plugins/BlocklistImport/ui.py:117 +msgid "Downloading" +msgstr "" + +#: src/core.py:90 +msgid "Finished" +msgstr "" + +#: src/core.py:92 +msgid "Allocating" +msgstr "" + +#: src/core.py:135 +msgid "bytes needed" +msgstr "" + +#: src/core.py:374 +msgid "File was not found" +msgstr "" + +#: src/core.py:430 +msgid "Asked for a torrent that doesn't exist" +msgstr "" + +#: src/core.py:636 +msgid "Announce sent" +msgstr "" + +#: src/core.py:643 +msgid "Announce OK" +msgstr "" + +#: src/core.py:649 +msgid "Alert" +msgstr "" + +#: src/core.py:650 +msgid "HTTP code" +msgstr "" + +#: src/core.py:651 +msgid "times in a row" +msgstr "" + +#: src/core.py:658 +msgid "Warning" +msgstr "" + +#: src/files.py:77 +msgid "Filename" +msgstr "" + +#: src/files.py:81 +msgid "Priority" +msgstr "" + +#: src/files.py:103 +msgid "" +"File priority can only be set when using full allocation.\n" +"Please change your preference to disable compact allocation, then remove and " +"re-add this torrent." +msgstr "" + +#: src/dialogs.py:68 +msgid "Plugin" +msgstr "" + +#: src/dialogs.py:70 +msgid "Enabled" +msgstr "" + +#: src/dialogs.py:428 +msgid "translator-credits" +msgstr "" + +#: src/dialogs.py:429 +msgid "" +"Deluge is free software, you can redistribute it and/or\n" +"modify it under the terms of the GNU General Public\n" +" License as published by the Free Software Foundation,\n" +"either version 2 of the License, or (at your option) any\n" +"later version. Deluge is distributed in the hope that it\n" +"will be useful, but WITHOUT ANY WARRANTY, without even \n" +"the implied warranty of MERCHANTABILITY or FITNESS\n" +"FOR A PARTICULAR PURPOSE. See the GNU General\n" +"Public License for more details. You should have received\n" +"a copy of the GNU General Public License along with\n" +"Deluge, but if not, write to the Free Software Foundation,\n" +" Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-\n" +"1301 USA" +msgstr "" + +#: src/dialogs.py:469 +msgid "Choose a .torrent file" +msgstr "" + +#: src/dialogs.py:474 +msgid "Torrent files" +msgstr "" + +#: src/dialogs.py:478 +msgid "All files" +msgstr "" + +#: src/common.py:90 +msgid "KiB" +msgstr "" + +#: src/common.py:93 +msgid "MiB" +msgstr "" + +#: src/common.py:96 +msgid "GiB" +msgstr "" + +#: src/common.py:99 +msgid "TiB" +msgstr "" + +#: src/common.py:101 +msgid "PiB" +msgstr "" + +#: src/common.py:203 +msgid "External command" +msgstr "" + +#: src/common.py:204 +msgid "not found" +msgstr "" + +#: src/common.py:240 +msgid "" +"There is a newer version of Deluge. Would you like to be taken to our " +"download site?" +msgstr "" + +#: plugins/BlocklistImport/__init__.py:6 +msgid "Blocklist Importer" +msgstr "" + +#: plugins/BlocklistImport/__init__.py:9 +msgid "" +"\n" +"Download and import various IP blocklists.\n" +"\n" +"Currently this plugin can handle PeerGuardian (binary and text),\n" +"SafePeer and Emule lists. PeerGuardian 7zip format files are not\n" +"supported. Files may be specified as URLs or locations on the local\n" +"filesystem.\n" +"\n" +"A page with pointer to blocklist download sites is available on the\n" +"wiki:\n" +"\n" +"http://dev.deluge-torrent.org/wiki/BlocklistPlugin\n" +msgstr "" + +#: plugins/BlocklistImport/__init__.py:40 +msgid "PeerGuardian P2B (GZip)" +msgstr "" + +#: plugins/BlocklistImport/__init__.py:41 +msgid "PeerGuardian Text (Uncompressed)" +msgstr "" + +#: plugins/BlocklistImport/__init__.py:42 +msgid "Emule IP list (GZip)" +msgstr "" + +#: plugins/BlocklistImport/__init__.py:43 +msgid "SafePeer Text (Zipped)" +msgstr "" + +#: plugins/BlocklistImport/__init__.py:92 +msgid "Couldn't download URL" +msgstr "" + +#: plugins/BlocklistImport/__init__.py:105 +msgid "Couldn't open blocklist file" +msgstr "" + +#: plugins/BlocklistImport/__init__.py:118 +msgid "Imported" +msgstr "" + +#: plugins/BlocklistImport/__init__.py:118 +msgid "IPs" +msgstr "" + +#: plugins/BlocklistImport/__init__.py:123 +msgid "Format error in blocklist" +msgstr "" + +#: plugins/BlocklistImport/__init__.py:162 +msgid "Blocklist" +msgstr "" + +#: plugins/BlocklistImport/__init__.py:162 +msgid "entries" +msgstr "" + +#: plugins/BlocklistImport/ui.py:25 +msgid "Blocklist URL" +msgstr "" + +#: plugins/BlocklistImport/ui.py:50 +msgid "Download on start" +msgstr "" + +#: plugins/BlocklistImport/ui.py:105 +msgid "Loading and installing blocklist" +msgstr "" + +#: plugins/BlocklistImport/ui.py:128 +msgid "Importing" +msgstr "" + +#: plugins/BlocklistImport/ui.py:139 +msgid "Complete" +msgstr "" + +#: plugins/BlocklistImport/text.py:37 +msgid "Couldn't match on line" +msgstr "" + +#: plugins/BlocklistImport/peerguardian.py:28 +msgid "Invalid leader" +msgstr "" + +#: plugins/BlocklistImport/peerguardian.py:32 +msgid "Invalid magic code" +msgstr "" + +#: plugins/BlocklistImport/peerguardian.py:37 +msgid "Invalid version" +msgstr "" + +#: plugins/DesiredRatio/__init__.py:19 plugins/DesiredRatio/__init__.py:118 +msgid "Desired Ratio" +msgstr "" + +#: plugins/DesiredRatio/__init__.py:22 +msgid "Set the desired ratio for a torrent." +msgstr "" + +#: plugins/DesiredRatio/__init__.py:75 +msgid "_Desired Ratio" +msgstr "" + +#: plugins/DesiredRatio/__init__.py:79 +msgid "_Not Set" +msgstr "" + +#: plugins/DesiredRatio/__init__.py:111 +msgid "Not Set" +msgstr "" + +#: plugins/TorrentPeers/__init__.py:19 +msgid "Torrent Peers" +msgstr "" + +#: plugins/TorrentPeers/__init__.py:22 +msgid "" +"\n" +"This shows you the peers associated with each torrent and shows you their " +"ip, country, client, percent complete and upload and download speeds.\n" +msgstr "" + +#: plugins/TorrentPeers/tab_peers.py:84 +msgid "IP Address" +msgstr "" + +#: plugins/TorrentPeers/tab_peers.py:86 +msgid "Client" +msgstr "" + +#: plugins/TorrentPeers/tab_peers.py:87 +msgid "Percent Complete" +msgstr "" + +#: plugins/TorrentCreator/torrentcreator.glade:8 +#: plugins/TorrentCreator/__init__.py:19 +msgid "Torrent Creator" +msgstr "" + +#: plugins/TorrentCreator/torrentcreator.glade:103 +msgid "This torrent will be made from a single file" +msgstr "" + +#: plugins/TorrentCreator/torrentcreator.glade:104 +msgid "File:" +msgstr "" + +#: plugins/TorrentCreator/torrentcreator.glade:120 +msgid "This torrent will be made from a directory" +msgstr "" + +#: plugins/TorrentCreator/torrentcreator.glade:121 +msgid "Folder:" +msgstr "" + +#: plugins/TorrentCreator/torrentcreator.glade:138 +msgid "Source" +msgstr "" + +#: plugins/TorrentCreator/torrentcreator.glade:184 +msgid "Save Torrent File As:" +msgstr "" + +#: plugins/TorrentCreator/torrentcreator.glade:237 +msgid "Load this torrent into Deluge for seeding" +msgstr "" + +#: plugins/TorrentCreator/torrentcreator.glade:238 +msgid "Add new torrent to queue" +msgstr "" + +#: plugins/TorrentCreator/torrentcreator.glade:257 +msgid "Torrent File" +msgstr "" + +#: plugins/TorrentCreator/torrentcreator.glade:305 +msgid "Trackers" +msgstr "" + +#: plugins/TorrentCreator/torrentcreator.glade:352 +msgid "Comments" +msgstr "" + +#: plugins/TorrentCreator/torrentcreator.glade:389 +msgid "Author" +msgstr "" + +#: plugins/TorrentCreator/torrentcreator.glade:425 +msgid "Set Private Flag" +msgstr "" + +#: plugins/TorrentCreator/torrentcreator.glade:441 +#: plugins/TorrentCreator/torrentcreator.glade:461 +msgid "" +"The smaller the piece sizes, the more efficient the transfers will be, but " +"the actual \".torrent\" file will be larger" +msgstr "" + +#: plugins/TorrentCreator/torrentcreator.glade:442 +msgid "" +"32 KiB\n" +"64 KiB\n" +"128 KiB\n" +"256 KiB\n" +"512 KiB\n" +"1024 KiB\n" +msgstr "" + +#: plugins/TorrentCreator/torrentcreator.glade:463 +msgid "Piece Size:" +msgstr "" + +#: plugins/TorrentCreator/torrentcreator.glade:477 +msgid "Advanced" +msgstr "" + +#: plugins/TorrentCreator/__init__.py:22 +msgid "A torrent creator plugin" +msgstr "" + +#: plugins/TorrentCreator/__init__.py:50 +msgid "_New Torrent" +msgstr "" + +#: plugins/TorrentCreator/__init__.py:60 +msgid "New Torrent" +msgstr "" + +#: plugins/TorrentCreator/__init__.py:62 +msgid "Create New Torrent" +msgstr "" + +#: plugins/TorrentCreator/__init__.py:98 +msgid "Save file as..." +msgstr "" + +#: plugins/TorrentCreator/__init__.py:120 +msgid "You must select a source for the torrent." +msgstr "" + +#: plugins/TorrentCreator/__init__.py:127 +msgid "You must select a file to save the torrent as." +msgstr "" + +#: plugins/TorrentCreator/__init__.py:138 +msgid "You must specify at least one tracker." +msgstr "" + +#: plugins/SimpleRSS/rss.glade:7 +msgid "RSS Broadcatcher Settings" +msgstr "" + +#: plugins/SimpleRSS/rss.glade:87 +msgid "Feed Name:" +msgstr "" + +#: plugins/SimpleRSS/rss.glade:151 +msgid "Feed URL:" +msgstr "" + +#: plugins/SimpleRSS/rss.glade:283 +msgid "Feeds" +msgstr "" + +#: plugins/SimpleRSS/rss.glade:385 plugins/SimpleRSS/plugin.py:75 +msgid "Feed" +msgstr "" + +#: plugins/SimpleRSS/rss.glade:413 +msgid "Filter Exp:" +msgstr "" + +#: plugins/SimpleRSS/rss.glade:442 +msgid "Filter Name:" +msgstr "" + +#: plugins/SimpleRSS/rss.glade:543 +msgid "Filters" +msgstr "" + +#: plugins/SimpleRSS/rss.glade:564 +msgid " Feed: " +msgstr "" + +#: plugins/SimpleRSS/rss.glade:617 +msgid "Torrents" +msgstr "" + +#: plugins/SimpleRSS/rss.glade:660 +msgid "Update Interval (seconds): " +msgstr "" + +#: plugins/SimpleRSS/rss.glade:729 +msgid "Check feeds on Deluge start" +msgstr "" + +#: plugins/SimpleRSS/rss.glade:781 +msgid "Check Feeds Now" +msgstr "" + +#: plugins/SimpleRSS/rss.glade:836 +msgid "Options" +msgstr "" + +#: plugins/SimpleRSS/__init__.py:33 +msgid "Simple RSS" +msgstr "" + +#: plugins/SimpleRSS/__init__.py:36 +msgid "" +"\n" +"Download Torrents automatically from SimpleRSS Feeds\n" +"\n" +"Add RSS feeds on the 'Feeds' tab, then add filters for TV shows (or " +"whatever) on the 'Filters' tab. Double-click entries on the 'Torrents' tab " +"to download extra torrents from the feeds. The Options are pretty self-" +"explanatary.\n" +"\n" +"Please message me (SatNav) on the forums and let me know how you get on..\n" +"\n" +"Enjoy!" +msgstr "" + +#: plugins/SimpleRSS/plugin.py:69 plugins/SimpleRSS/plugin.py:77 +msgid "URL" +msgstr "" + +#: plugins/SimpleRSS/plugin.py:70 +msgid "Last Entry Date" +msgstr "" + +#: plugins/SimpleRSS/plugin.py:78 +msgid "Date" +msgstr "" + +#: plugins/SimpleRSS/plugin.py:135 +msgid "RSS" +msgstr "" + +#: plugins/SimpleRSS/plugin.py:137 +msgid "SimpleRSS Broadcatcher" +msgstr "" + +#: plugins/SimpleRSS/plugin.py:220 plugins/SimpleRSS/plugin.py:224 +#: plugins/SimpleRSS/plugin.py:225 plugins/SimpleRSS/plugin.py:226 +#: plugins/SimpleRSS/plugin.py:228 plugins/SimpleRSS/plugin.py:229 +#: plugins/SimpleRSS/plugin.py:230 +msgid "New Filter" +msgstr "" + +#: plugins/SimpleRSS/plugin.py:299 plugins/SimpleRSS/plugin.py:434 +#: plugins/SimpleRSS/plugin.py:435 +msgid "All" +msgstr "" + +#: plugins/TorrentNotification/notification_preferences.glade:7 +msgid "Torrent Notification Preferences" +msgstr "" + +#: plugins/TorrentNotification/notification_preferences.glade:32 +msgid "Enable event sound (requires pygame, not available on Win32)" +msgstr "" + +#: plugins/TorrentNotification/notification_preferences.glade:59 +msgid "Enable blinking tray icon" +msgstr "" + +#: plugins/TorrentNotification/notification_preferences.glade:69 +msgid "" +"Enable popup notification (requires python-notify, not available on Win32)" +msgstr "" + +#: plugins/TorrentNotification/__init__.py:19 +msgid "Torrent Notification" +msgstr "" + +#: plugins/TorrentNotification/__init__.py:22 +msgid "" +"Make tray icon blink when torrent finishes downloading and/or popup a " +"notification" +msgstr "" + +#: plugins/TorrentNotification/__init__.py:103 +msgid "Torrent complete" +msgstr "" + +#: plugins/TorrentNotification/__init__.py:104 +#: plugins/TorrentFiles/__init__.py:71 +msgid "Files" +msgstr "" + +#: plugins/NetworkHealth/__init__.py:33 +msgid "Network Health Monitor" +msgstr "" + +#: plugins/NetworkHealth/__init__.py:36 +msgid "" +"Network Health Monitor plugin\n" +"\n" +"Written by Kripkenstein" +msgstr "" + +#: plugins/NetworkHealth/plugin.py:53 +msgid "[Health: OK]" +msgstr "" + +#: plugins/EventLogging/event_logging_preferences.glade:7 +msgid "Event Logging Preferences" +msgstr "" + +#: plugins/EventLogging/event_logging_preferences.glade:28 +msgid "Enable log files" +msgstr "" + +#: plugins/EventLogging/event_logging_preferences.glade:41 +msgid "Log files" +msgstr "" + +#: plugins/EventLogging/event_logging_preferences.glade:66 +#: plugins/EventLogging/tab_log.py:210 +msgid "Peer blocked" +msgstr "" + +#: plugins/EventLogging/event_logging_preferences.glade:80 +#: plugins/EventLogging/tab_log.py:200 +msgid "Block finished" +msgstr "" + +#: plugins/EventLogging/event_logging_preferences.glade:94 +#: plugins/EventLogging/tab_log.py:189 +msgid "Block downloading" +msgstr "" + +#: plugins/EventLogging/event_logging_preferences.glade:108 +#: plugins/EventLogging/tab_log.py:179 +msgid "Piece finished" +msgstr "" + +#: plugins/EventLogging/event_logging_preferences.glade:122 +#: plugins/EventLogging/tab_log.py:170 +msgid "Storage moved" +msgstr "" + +#: plugins/EventLogging/event_logging_preferences.glade:136 +#: plugins/EventLogging/tab_log.py:161 +msgid "Tracker warning" +msgstr "" + +#: plugins/EventLogging/event_logging_preferences.glade:150 +#: plugins/EventLogging/tab_log.py:150 +msgid "Tracker alert" +msgstr "" + +#: plugins/EventLogging/event_logging_preferences.glade:164 +#: plugins/EventLogging/tab_log.py:141 +msgid "Tracker reply" +msgstr "" + +#: plugins/EventLogging/event_logging_preferences.glade:178 +#: plugins/EventLogging/tab_log.py:132 +msgid "Tracker announce" +msgstr "" + +#: plugins/EventLogging/event_logging_preferences.glade:192 +#: plugins/EventLogging/tab_log.py:123 +msgid "Fastresume rejected error" +msgstr "" + +#: plugins/EventLogging/event_logging_preferences.glade:206 +#: plugins/EventLogging/tab_log.py:114 +msgid "Peer ban error" +msgstr "" + +#: plugins/EventLogging/event_logging_preferences.glade:220 +#: plugins/EventLogging/tab_log.py:104 +msgid "Hash failed error" +msgstr "" + +#: plugins/EventLogging/event_logging_preferences.glade:234 +#: plugins/EventLogging/tab_log.py:95 +msgid "File error" +msgstr "" + +#: plugins/EventLogging/event_logging_preferences.glade:248 +#: plugins/EventLogging/tab_log.py:86 +msgid "Invalid request" +msgstr "" + +#: plugins/EventLogging/event_logging_preferences.glade:262 +msgid "Peer messages" +msgstr "" + +#: plugins/EventLogging/event_logging_preferences.glade:276 +#: plugins/EventLogging/tab_log.py:70 +msgid "Torrent finished" +msgstr "" + +#: plugins/EventLogging/event_logging_preferences.glade:289 +msgid "Select events to log" +msgstr "" + +#: plugins/EventLogging/__init__.py:19 +msgid "Event Logging" +msgstr "" + +#: plugins/EventLogging/__init__.py:22 +msgid "" +"\n" +"Adds a tab with log of selected events.\n" +"\n" +"Event messages come from libtorrent alerts.\n" +"If you want those strings translated to your locale,\n" +"you'll have to report the issue with libtorrent, not deluge.\n" +"\n" +"Regarding the log files, the logs are saved in a log\n" +"directory within the deluge config directory. Event\n" +"messages for specific torrents are saved to individual\n" +"log files named the same as the associated .torrent\n" +"file. Event messages not specific to any torrent are\n" +"saved to logs named after the events\n" +"(eg peer_messages.log).\n" +"Event messages in the log files also include a timestamp.\n" +"The user is responsible to cleanout the logs.\n" +"\n" +"As of v0.2\n" +"Events are now truncated in display. Log files are not.\n" +"New events are now displayed at the top.\n" +msgstr "" + +#: plugins/EventLogging/__init__.py:88 +msgid "Event Log" +msgstr "" + +#: plugins/EventLogging/tab_log.py:70 plugins/EventLogging/tab_log.py:78 +#: plugins/EventLogging/tab_log.py:86 plugins/EventLogging/tab_log.py:95 +#: plugins/EventLogging/tab_log.py:104 plugins/EventLogging/tab_log.py:114 +#: plugins/EventLogging/tab_log.py:132 plugins/EventLogging/tab_log.py:141 +#: plugins/EventLogging/tab_log.py:150 plugins/EventLogging/tab_log.py:161 +#: plugins/EventLogging/tab_log.py:170 plugins/EventLogging/tab_log.py:179 +#: plugins/EventLogging/tab_log.py:189 plugins/EventLogging/tab_log.py:200 +#: plugins/EventLogging/tab_log.py:210 plugins/EventLogging/tab_log.py:218 +msgid "event message: " +msgstr "" + +#: plugins/EventLogging/tab_log.py:71 plugins/EventLogging/tab_log.py:95 +#: plugins/EventLogging/tab_log.py:105 plugins/EventLogging/tab_log.py:115 +#: plugins/EventLogging/tab_log.py:124 plugins/EventLogging/tab_log.py:133 +#: plugins/EventLogging/tab_log.py:142 plugins/EventLogging/tab_log.py:151 +#: plugins/EventLogging/tab_log.py:162 plugins/EventLogging/tab_log.py:171 +#: plugins/EventLogging/tab_log.py:180 plugins/EventLogging/tab_log.py:190 +#: plugins/EventLogging/tab_log.py:201 +msgid "torrent: " +msgstr "" + +#: plugins/EventLogging/tab_log.py:78 +msgid "Peer message" +msgstr "" + +#: plugins/EventLogging/tab_log.py:78 plugins/EventLogging/tab_log.py:114 +#: plugins/EventLogging/tab_log.py:211 +msgid "ip address: " +msgstr "" + +#: plugins/EventLogging/tab_log.py:79 plugins/EventLogging/tab_log.py:86 +msgid "client: " +msgstr "" + +#: plugins/EventLogging/tab_log.py:106 plugins/EventLogging/tab_log.py:181 +#: plugins/EventLogging/tab_log.py:191 plugins/EventLogging/tab_log.py:202 +msgid "piece index: " +msgstr "" + +#: plugins/EventLogging/tab_log.py:152 +msgid "status code: " +msgstr "" + +#: plugins/EventLogging/tab_log.py:152 +msgid "Times in a row: " +msgstr "" + +#: plugins/EventLogging/tab_log.py:191 plugins/EventLogging/tab_log.py:202 +msgid "block index: " +msgstr "" + +#: plugins/EventLogging/tab_log.py:192 +msgid "peer speed: " +msgstr "" + +#: plugins/SpeedLimiter/__init__.py:17 +msgid "Speed Limiter" +msgstr "" + +#: plugins/SpeedLimiter/__init__.py:20 +msgid "Set the desired speed limit per torrent." +msgstr "" + +#: plugins/SpeedLimiter/__init__.py:80 +msgid "Torrent _Download Speed" +msgstr "" + +#: plugins/SpeedLimiter/__init__.py:90 +msgid "Torrent Upload _Speed" +msgstr "" + +#: plugins/SpeedLimiter/__init__.py:144 +msgid "Torrent Upload Speed (KiB/s):" +msgstr "" + +#: plugins/SpeedLimiter/__init__.py:176 +msgid "Torrent Download Speed (KiB/s):" +msgstr "" + +#: plugins/TorrentSearch/__init__.py:33 +msgid "Torrent Search" +msgstr "" + +#: plugins/TorrentSearch/__init__.py:36 +msgid "A searchbar for torrent search engines" +msgstr "" + +#: plugins/TorrentSearch/plugin.py:52 +msgid "Search String" +msgstr "" + +#: plugins/TorrentSearch/plugin.py:74 plugins/TorrentSearch/plugin.py:164 +msgid "Choose an Engine" +msgstr "" + +#: plugins/TorrentSearch/plugin.py:78 +msgid "Manage Engines" +msgstr "" + +#: plugins/TorrentSearch/plugin.py:185 +msgid "Search " +msgstr "" + +#: plugins/TorrentSearch/searchdlg.glade:7 +msgid "Manage Search Plugins" +msgstr "" + +#: plugins/TorrentSearch/searchdlg.glade:79 +msgid "Name:" +msgstr "" + +#: plugins/TorrentSearch/searchdlg.glade:91 plugins/WebSeed/webseed.glade:28 +msgid "URL:" +msgstr "" + +#: plugins/TorrentSearch/searchdlg.glade:123 +msgid "" +"Add a new search engine by entering a Name and a URL. For Name, enter the " +"name of the search engine to be used. For URL, enter the url of the seach " +"page. The user's search query will replace any instance of ${query} in the " +"URL.\n" +"For example, a Google search would be:\n" +"Name: Google\n" +"URL: http://www.google.com/search?q=${query}" +msgstr "" + +#: plugins/TorrentSearch/searchdlg.glade:133 +msgid "Help" +msgstr "" + +#: plugins/NetworkGraph/__init__.py:33 +msgid "Network Activity Graph" +msgstr "" + +#: plugins/NetworkGraph/__init__.py:36 +msgid "" +"Network Activity Graph plugin\n" +"\n" +"Written by Kripkenstein" +msgstr "" + +#: plugins/NetworkGraph/__init__.py:89 +msgid "Graph" +msgstr "" + +#: plugins/Locations/__init__.py:18 +msgid "Locations" +msgstr "" + +#: plugins/Locations/__init__.py:21 +msgid "" +"Automagically remembers relevant settings for different locations.\n" +"\n" +"When this plugin is active, it will remember a lot of useful network-" +"specific preferences, such as up- or download limits, open ports and proxy " +"information. Just change preferences to suit each location while connected, " +"and Deluge will automagically use those settings the next time you connect " +"at that location. There is no other configuration needed.\n" +"\n" +"The plugin determines location by identifying the unique MAC address of the " +"Gateway used for the connection. It is therefore possible to have different " +"settings for home and work, or for broadband, 3G and dial-up on the fly.\n" +msgstr "" + +#: plugins/TorrentFiles/tab_files.py:59 +msgid "Progress" +msgstr "" + +#: plugins/TorrentFiles/tab_files.py:100 +msgid "There was an error trying to launch the file." +msgstr "" + +#: plugins/TorrentFiles/__init__.py:19 +msgid "Torrent Files" +msgstr "" + +#: plugins/TorrentFiles/__init__.py:22 +msgid "" +"\n" +"This plugin shows you the files inside a torrent and allows you to set " +"priorities for them and choose which ones you want or don't want to " +"download.\n" +msgstr "" + +#: plugins/ExtraStats/__init__.py:19 +msgid "Extra Stats" +msgstr "" + +#: plugins/ExtraStats/__init__.py:22 +msgid "" +"\n" +"Adds info to tray tooltip.\n" +"Adds these stats.\n" +"total bytes downloaded\n" +"total bytes uploaded\n" +"overall ratio\n" +"torrents completed\n" +"\n" +"All of these stats come in pairs:\n" +"across sessions stat and within session stat.\n" +"By default, all pairs enabled, but can be disabled in plugin preferences.\n" +"\n" +"session data always shows up within parenthesis\n" +"eg. Total Downloaded: 5 GiB (4 MiB)\n" +"would be 5 GiB across sessions and 4 MiB within session\n" +msgstr "" + +#: plugins/ExtraStats/__init__.py:175 +#: plugins/ExtraStats/stats_preferences.glade:28 +msgid "Total Downloaded" +msgstr "" + +#: plugins/ExtraStats/__init__.py:181 +#: plugins/ExtraStats/stats_preferences.glade:38 +msgid "Total Uploaded" +msgstr "" + +#: plugins/ExtraStats/__init__.py:187 plugins/ExtraStats/__init__.py:191 +msgid "Undefined" +msgstr "" + +#: plugins/ExtraStats/__init__.py:195 +#: plugins/ExtraStats/stats_preferences.glade:52 +msgid "Overall Ratio" +msgstr "" + +#: plugins/ExtraStats/__init__.py:200 +#: plugins/ExtraStats/stats_preferences.glade:66 +msgid "Torrents Completed" +msgstr "" + +#: plugins/ExtraStats/__init__.py:206 +#: plugins/ExtraStats/stats_preferences.glade:80 +msgid "Running Time" +msgstr "" + +#: plugins/ExtraStats/stats_preferences.glade:7 +msgid "Extra Stats Preferences" +msgstr "" + +#: plugins/MoveTorrent/__init__.py:19 +msgid "Move Torrent" +msgstr "" + +#: plugins/MoveTorrent/__init__.py:22 +msgid "" +"This plugin allows users to move the torrent to a different directory " +"without having to remove and re-add the torrent. This feature can be found " +"by right-clicking on a torrent.\n" +"Furthermore, it allows the user to automatically have finished torrents " +"moved to a different folder." +msgstr "" + +#: plugins/MoveTorrent/__init__.py:76 +msgid "_Move Torrent" +msgstr "" + +#: plugins/MoveTorrent/__init__.py:95 +msgid "Choose a directory to move files to" +msgstr "" + +#: plugins/MoveTorrent/__init__.py:129 +msgid "" +"You cannot move torrent to a different partition. Please check your " +"preferences. Also, you cannot move a torrent's files to the same directory " +"that they are already stored or move a torrent's files before any of its " +"files have actually been created." +msgstr "" + +#: plugins/MoveTorrent/movetorrent.glade:25 +msgid "Move completed downloads to:" +msgstr "" + +#: plugins/MoveTorrent/movetorrent.glade:59 plugins/WebSeed/webseed.glade:64 +msgid "gtk-cancel" +msgstr "" + +#: plugins/MoveTorrent/movetorrent.glade:71 plugins/WebSeed/webseed.glade:72 +msgid "gtk-ok" +msgstr "" + +#: plugins/WebSeed/__init__.py:19 +msgid "Web Seed" +msgstr "" + +#: plugins/WebSeed/__init__.py:22 +msgid "This plugin allows users to add web seeds to their torrents" +msgstr "" + +#: plugins/WebSeed/__init__.py:51 +msgid "_Add Web Seed" +msgstr "" + +#: plugins/WebSeed/webseed.glade:7 +msgid "Open Containing Folder Preferences" +msgstr "" + +#: plugins/Scheduler/plugin.py:76 +msgid "Scheduler Settings" +msgstr "" + +#: plugins/Scheduler/plugin.py:86 +msgid "Limit download to:" +msgstr "" + +#: plugins/Scheduler/plugin.py:87 +msgid "Limit upload to:" +msgstr "" + +#: plugins/Scheduler/plugin.py:135 +msgid "Yellow is limited, red is stopped and green is unlimited." +msgstr "" + +#: plugins/Scheduler/plugin.py:137 +msgid "" +"When set to -1 (unlimited), the global limits in Deluge's preferences will " +"be obeyed." +msgstr "" diff --git a/po/vi.po b/po/vi.po new file mode 100644 index 000000000..865a3acbf --- /dev/null +++ b/po/vi.po @@ -0,0 +1,2111 @@ +# Vietnamese translation for deluge +# Copyright (c) 2007 Rosetta Contributors and Canonical Ltd 2007 +# This file is distributed under the same license as the deluge package. +# FIRST AUTHOR , 2007. +# +msgid "" +msgstr "" +"Project-Id-Version: deluge\n" +"Report-Msgid-Bugs-To: FULL NAME \n" +"POT-Creation-Date: 2007-10-15 10:51-0500\n" +"PO-Revision-Date: 2007-10-17 16:51+0000\n" +"Last-Translator: FULL NAME \n" +"Language-Team: Vietnamese \n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"X-Launchpad-Export-Date: 2007-10-23 03:22+0000\n" +"X-Generator: Launchpad (build Unknown)\n" + +#: glade/delugegtk.glade:204 +msgid "Downloaded:" +msgstr "Tải xuống" + +#: glade/delugegtk.glade:218 +msgid "Uploaded:" +msgstr "Tải lên" + +#: glade/delugegtk.glade:236 +#, fuzzy +msgid "Seeders:" +msgstr "Người cung cấp" + +#: glade/delugegtk.glade:254 +msgid "Share Ratio:" +msgstr "Mức độ chia sẻ" + +#: glade/delugegtk.glade:273 glade/delugegtk.glade:292 +msgid "Speed:" +msgstr "Tốc độ" + +#: glade/delugegtk.glade:313 +#, fuzzy +msgid "Peers:" +msgstr "Đối tác" + +#: glade/delugegtk.glade:334 +#, fuzzy +msgid "ETA:" +msgstr "Ước lượng" + +#: glade/delugegtk.glade:351 +msgid "Pieces:" +msgstr "Số phân mảnh" + +#: glade/delugegtk.glade:389 +#, fuzzy +msgid "Availability:" +msgstr "Mức khả dụng" + +#: glade/delugegtk.glade:430 +msgid "Statistics" +msgstr "Thống kê" + +#: glade/delugegtk.glade:486 +msgid "Path:" +msgstr "Đường dẫn" + +#: glade/delugegtk.glade:520 +msgid "Total Size:" +msgstr "Kích thước" + +#: glade/delugegtk.glade:582 +msgid "Tracker Status:" +msgstr "Trạng thái người theo dõi" + +#: glade/delugegtk.glade:615 +msgid "Next Announce:" +msgstr "Thông báo kế" + +#: glade/delugegtk.glade:654 +msgid "# of files:" +msgstr "Số tệp" + +#: glade/delugegtk.glade:682 +msgid "Tracker:" +msgstr "Người theo dõi" + +#: glade/delugegtk.glade:706 +msgid "Name:" +msgstr "Tên" + +#: glade/delugegtk.glade:723 +msgid "Torrent Info" +msgstr "Thông tin torrent" + +#: glade/delugegtk.glade:750 +msgid "Details" +msgstr "Chi tiết" + +#: glade/delugegtk.glade:790 +msgid "_File" +msgstr "_Tập tin" + +#: glade/delugegtk.glade:797 glade/tray_menu.glade:61 +msgid "_Add Torrent" +msgstr "_Thêm torrent" + +#: glade/delugegtk.glade:812 +msgid "Add _URL" +msgstr "Thêm _URL" + +#: glade/delugegtk.glade:820 +msgid "_Clear Completed" +msgstr "_Xoá cái đã hoàn tất" + +#: glade/delugegtk.glade:853 +msgid "_Edit" +msgstr "_Hiệu chỉnh" + +#: glade/delugegtk.glade:862 +msgid "gtk-select-all" +msgstr "" + +#: glade/delugegtk.glade:878 +msgid "Plu_gins" +msgstr "_Phụ kiện" + +#: glade/delugegtk.glade:906 +msgid "_Torrent" +msgstr "_Torrent" + +#: glade/delugegtk.glade:913 +msgid "_View" +msgstr "_Xem" + +#: glade/delugegtk.glade:921 +msgid "_Toolbar" +msgstr "Thanh _Công cụ" + +#: glade/delugegtk.glade:930 +msgid "_Details" +msgstr "_Chi tiết" + +#: glade/delugegtk.glade:939 +msgid "_Columns" +msgstr "" + +#: glade/delugegtk.glade:947 src/interface.py:595 src/files.py:79 +msgid "Size" +msgstr "" + +#: glade/delugegtk.glade:956 src/interface.py:599 +msgid "Status" +msgstr "" + +#: glade/delugegtk.glade:965 src/interface.py:601 +msgid "Seeders" +msgstr "" + +#: glade/delugegtk.glade:974 src/interface.py:604 +#: plugins/TorrentPeers/__init__.py:72 +msgid "Peers" +msgstr "" + +#: glade/delugegtk.glade:983 src/interface.py:607 src/interface.py:1105 +#: src/interface.py:1136 plugins/TorrentPeers/tab_peers.py:89 +msgid "Down Speed" +msgstr "" + +#: glade/delugegtk.glade:992 src/interface.py:610 src/interface.py:1106 +#: src/interface.py:1137 plugins/TorrentPeers/tab_peers.py:91 +msgid "Up Speed" +msgstr "" + +#: glade/delugegtk.glade:1001 +msgid "Time Remaining" +msgstr "" + +#: glade/delugegtk.glade:1010 +msgid "Availability" +msgstr "" + +#: glade/delugegtk.glade:1019 +msgid "Share Ratio" +msgstr "" + +#: glade/delugegtk.glade:1036 +msgid "_Help" +msgstr "" + +#: glade/delugegtk.glade:1044 +msgid "Help translate this application" +msgstr "" + +#: glade/delugegtk.glade:1045 +msgid "_Translate This Application..." +msgstr "" + +#: glade/delugegtk.glade:1068 +msgid "Runs the first-time configuration wizard" +msgstr "" + +#: glade/delugegtk.glade:1069 +msgid "_Run Configuration Wizard" +msgstr "" + +#: glade/delugegtk.glade:1142 +msgid "Add Torrent" +msgstr "" + +#: glade/delugegtk.glade:1143 +msgid "Add" +msgstr "" + +#: glade/delugegtk.glade:1156 glade/dgtkpopups.glade:6 +msgid "Remove Torrent" +msgstr "" + +#: glade/delugegtk.glade:1157 +msgid "Remove" +msgstr "" + +#: glade/delugegtk.glade:1169 +msgid "Clear Seeding Torrents" +msgstr "" + +#: glade/delugegtk.glade:1170 +msgid "Clear" +msgstr "" + +#: glade/delugegtk.glade:1192 +msgid "Start or Resume Torrent" +msgstr "" + +#: glade/delugegtk.glade:1193 +msgid "Resume" +msgstr "" + +#: glade/delugegtk.glade:1206 +msgid "Pause Torrent" +msgstr "" + +#: glade/delugegtk.glade:1207 +msgid "Pause" +msgstr "" + +#: glade/delugegtk.glade:1219 +msgid "Queue Torrent Up" +msgstr "" + +#: glade/delugegtk.glade:1220 +msgid "Up" +msgstr "" + +#: glade/delugegtk.glade:1233 +msgid "Queue Torrent Down" +msgstr "" + +#: glade/delugegtk.glade:1234 +msgid "Down" +msgstr "" + +#: glade/delugegtk.glade:1255 +msgid "Change Deluge preferences" +msgstr "" + +#: glade/delugegtk.glade:1256 +msgid "Preferences" +msgstr "" + +#: glade/delugegtk.glade:1269 glade/dgtkpopups.glade:209 +#: glade/preferences_dialog.glade:2709 +msgid "Plugins" +msgstr "" + +#: glade/dgtkpopups.glade:41 +msgid "" +"Are you sure you want to remove the selected " +"torrent(s) from Deluge?" +msgstr "" + +#: glade/dgtkpopups.glade:65 +msgid "Delete downloaded files" +msgstr "" + +#: glade/dgtkpopups.glade:88 +msgid "Delete .torrent file" +msgstr "" + +#: glade/dgtkpopups.glade:155 +msgid "Show/Hide" +msgstr "" + +#: glade/dgtkpopups.glade:163 +msgid "Add a Torrent..." +msgstr "" + +#: glade/dgtkpopups.glade:179 +msgid "Clear Finished" +msgstr "" + +#: glade/dgtkpopups.glade:241 +msgid "Speed" +msgstr "" + +#: glade/file_tab_menu.glade:11 +msgid "_Open File" +msgstr "" + +#: glade/file_tab_menu.glade:33 +msgid "Select All" +msgstr "" + +#: glade/file_tab_menu.glade:48 +msgid "Unselect All" +msgstr "" + +#: glade/file_tab_menu.glade:68 src/core.py:100 +msgid "Don't download" +msgstr "" + +#: glade/file_tab_menu.glade:83 src/core.py:101 +msgid "Normal" +msgstr "" + +#: glade/file_tab_menu.glade:98 src/core.py:102 +msgid "High" +msgstr "" + +#: glade/file_tab_menu.glade:113 src/core.py:103 +msgid "Highest" +msgstr "" + +#: glade/merge_dialog.glade:7 +msgid "Deluge Merge Tracker Lists" +msgstr "" + +#: glade/merge_dialog.glade:23 +msgid "" +"Torrent already detected in Deluge, would you like to merge the tracker " +"lists?" +msgstr "" + +#: glade/preferences_dialog.glade:9 +msgid "Deluge Preferences" +msgstr "" + +#: glade/preferences_dialog.glade:57 +msgid "Ask where to save each download" +msgstr "" + +#: glade/preferences_dialog.glade:75 glade/wizard.glade:187 +#: plugins/MoveTorrent/movetorrent.glade:35 +msgid "Select A Folder" +msgstr "" + +#: glade/preferences_dialog.glade:87 glade/preferences_dialog.glade:88 +msgid "Store all downloads in:" +msgstr "" + +#: glade/preferences_dialog.glade:108 +msgid "Download Location" +msgstr "" + +#: glade/preferences_dialog.glade:142 glade/preferences_dialog.glade:155 +#: glade/wizard.glade:237 glade/wizard.glade:478 +msgid "" +"The number of active torrents that Deluge will run. Set to -1 for unlimited." +msgstr "" + +#: glade/preferences_dialog.glade:144 +msgid "Maximum simultaneous active torrents:" +msgstr "" + +#: glade/preferences_dialog.glade:175 glade/preferences_dialog.glade:176 +msgid "Enable selecting files for torrents before loading" +msgstr "" + +#: glade/preferences_dialog.glade:190 glade/preferences_dialog.glade:191 +msgid "Prioritize first and last pieces of files in torrent" +msgstr "" + +#: glade/preferences_dialog.glade:207 +msgid "Torrents" +msgstr "" + +#: glade/preferences_dialog.glade:245 +msgid "" +"Full allocation preallocates all of the space that is needed for the torrent " +"and prevents disk fragmentation" +msgstr "" + +#: glade/preferences_dialog.glade:246 +msgid "Use Full Allocation" +msgstr "" + +#: glade/preferences_dialog.glade:268 +msgid "Compact allocation only allocates space as needed" +msgstr "" + +#: glade/preferences_dialog.glade:269 +msgid "Use Compact Allocation" +msgstr "" + +#: glade/preferences_dialog.glade:289 +msgid "Allocation" +msgstr "" + +#: glade/preferences_dialog.glade:313 +msgid "Downloads" +msgstr "" + +#: glade/preferences_dialog.glade:357 +msgid "" +"Please Note - Changes to these settings will only be applied the next " +"time Deluge is restarted." +msgstr "" + +#: glade/preferences_dialog.glade:399 glade/wizard.glade:48 +msgid "From:" +msgstr "" + +#: glade/preferences_dialog.glade:422 glade/wizard.glade:66 +msgid "To:" +msgstr "" + +#: glade/preferences_dialog.glade:448 +msgid "Deluge will automatically choose a different port to use every time." +msgstr "" + +#: glade/preferences_dialog.glade:449 +msgid "Random Ports" +msgstr "" + +#: glade/preferences_dialog.glade:466 +msgid "Test Active Port" +msgstr "" + +#: glade/preferences_dialog.glade:492 +msgid "TCP" +msgstr "" + +#: glade/preferences_dialog.glade:504 +msgid "Active Port:" +msgstr "" + +#: glade/preferences_dialog.glade:517 +msgid "0000" +msgstr "" + +#: glade/preferences_dialog.glade:555 +msgid "Distributed hash table may improve the amount of active connections." +msgstr "" + +#: glade/preferences_dialog.glade:556 +msgid "Enable Mainline DHT" +msgstr "" + +#: glade/preferences_dialog.glade:569 +msgid "DHT" +msgstr "" + +#: glade/preferences_dialog.glade:603 +msgid "Universal Plug and Play" +msgstr "" + +#: glade/preferences_dialog.glade:604 +msgid "UPnP" +msgstr "" + +#: glade/preferences_dialog.glade:618 +msgid "NAT Port Mapping Protocol" +msgstr "" + +#: glade/preferences_dialog.glade:619 +msgid "NAT-PMP" +msgstr "" + +#: glade/preferences_dialog.glade:634 +msgid "µTorrent Peer-Exchange" +msgstr "" + +#: glade/preferences_dialog.glade:635 +msgid "µTorrent-PeX" +msgstr "" + +#: glade/preferences_dialog.glade:653 +msgid "Network Extras" +msgstr "" + +#: glade/preferences_dialog.glade:693 +msgid "Inbound:" +msgstr "" + +#: glade/preferences_dialog.glade:702 glade/preferences_dialog.glade:724 +msgid "" +"Disabled\n" +"Enabled\n" +"Forced" +msgstr "" + +#: glade/preferences_dialog.glade:715 +msgid "Outbound:" +msgstr "" + +#: glade/preferences_dialog.glade:742 +msgid "Prefer to encrypt the entire stream" +msgstr "" + +#: glade/preferences_dialog.glade:755 +msgid "Level:" +msgstr "" + +#: glade/preferences_dialog.glade:764 +msgid "" +"Handshake\n" +"Full Stream\n" +"Either" +msgstr "" + +#: glade/preferences_dialog.glade:785 +msgid "Encryption" +msgstr "" + +#: glade/preferences_dialog.glade:815 +msgid "Network" +msgstr "" + +#: glade/preferences_dialog.glade:855 +msgid "Queue torrents to bottom when they begin seeding" +msgstr "" + +#: glade/preferences_dialog.glade:867 +msgid "Queue new torrents above completed ones" +msgstr "" + +#: glade/preferences_dialog.glade:883 +msgid "Stop seeding torrents when their share ratio reaches:" +msgstr "" + +#: glade/preferences_dialog.glade:919 +msgid "Automatically clear torrents that reach the max share ratio" +msgstr "" + +#: glade/preferences_dialog.glade:935 +msgid "Seeding" +msgstr "" + +#: glade/preferences_dialog.glade:964 src/core.py:91 +msgid "Seeding" +msgstr "" + +#: glade/preferences_dialog.glade:1009 glade/wizard.glade:257 +#: glade/wizard.glade:318 +msgid "The maximum upload slots for all torrents. Set -1 for unlimited." +msgstr "" + +#: glade/preferences_dialog.glade:1026 glade/preferences_dialog.glade:1110 +#: glade/preferences_dialog.glade:1130 glade/wizard.glade:277 +#: glade/wizard.glade:341 +msgid "The maximum upload speed for all torrents. Set -1 for unlimited." +msgstr "" + +#: glade/preferences_dialog.glade:1044 glade/preferences_dialog.glade:1060 +msgid "The maximum download speed for all torrents. Set -1 for unlimited." +msgstr "" + +#: glade/preferences_dialog.glade:1062 +msgid "Maximum Download Speed (KiB/s):" +msgstr "" + +#: glade/preferences_dialog.glade:1073 glade/preferences_dialog.glade:1092 +#: glade/wizard.glade:297 glade/wizard.glade:364 +msgid "The maximum number of connections allowed. Set -1 for unlimited." +msgstr "" + +#: glade/preferences_dialog.glade:1094 glade/preferences_dialog.glade:1278 +#: glade/wizard.glade:298 +msgid "Maximum Connections:" +msgstr "" + +#: glade/preferences_dialog.glade:1112 glade/wizard.glade:278 +msgid "Maximum Upload Speed (KiB/s):" +msgstr "" + +#: glade/preferences_dialog.glade:1132 glade/preferences_dialog.glade:1259 +#: glade/wizard.glade:258 +msgid "Maximum Upload Slots:" +msgstr "" + +#: glade/preferences_dialog.glade:1150 glade/preferences_dialog.glade:1166 +#: glade/wizard.glade:434 glade/wizard.glade:455 +msgid "" +"The maximum half-open connections. A high value may crash some cheap " +"routers. Set -1 for unlimited." +msgstr "" + +#: glade/preferences_dialog.glade:1152 glade/wizard.glade:435 +msgid "Maximum Half-Open Connections:" +msgstr "" + +#: glade/preferences_dialog.glade:1186 +msgid "Global Bandwidth Usage" +msgstr "" + +#: glade/preferences_dialog.glade:1222 glade/preferences_dialog.glade:1257 +msgid "The maximum upload slots per torrent. Set -1 for unlimited." +msgstr "" + +#: glade/preferences_dialog.glade:1239 glade/preferences_dialog.glade:1276 +msgid "The maximum number of connections per torrent. Set -1 for unlimited." +msgstr "" + +#: glade/preferences_dialog.glade:1291 +msgid "Per Torrent Bandwidth Usage" +msgstr "" + +#: glade/preferences_dialog.glade:1317 +msgid "Bandwidth" +msgstr "" + +#: glade/preferences_dialog.glade:1362 glade/preferences_dialog.glade:1556 +#: glade/preferences_dialog.glade:1750 glade/preferences_dialog.glade:1944 +msgid "Affects regular bittorrent peers" +msgstr "" + +#: glade/preferences_dialog.glade:1363 +msgid "Peer Proxy" +msgstr "" + +#: glade/preferences_dialog.glade:1408 glade/preferences_dialog.glade:1602 +#: glade/preferences_dialog.glade:1796 glade/preferences_dialog.glade:1990 +msgid "Port" +msgstr "" + +#: glade/preferences_dialog.glade:1421 glade/preferences_dialog.glade:1615 +#: glade/preferences_dialog.glade:1809 glade/preferences_dialog.glade:2003 +msgid "Server" +msgstr "" + +#: glade/preferences_dialog.glade:1462 glade/preferences_dialog.glade:1656 +#: glade/preferences_dialog.glade:1850 glade/preferences_dialog.glade:2044 +msgid "" +"None\n" +"Socksv4\n" +"Socksv5\n" +"Socksv5 W/ Auth\n" +"HTTP\n" +"HTTP W/ Auth" +msgstr "" + +#: glade/preferences_dialog.glade:1478 glade/preferences_dialog.glade:1672 +#: glade/preferences_dialog.glade:1866 glade/preferences_dialog.glade:2060 +msgid "Password" +msgstr "" + +#: glade/preferences_dialog.glade:1489 glade/preferences_dialog.glade:1683 +#: glade/preferences_dialog.glade:1877 glade/preferences_dialog.glade:2071 +msgid "Username" +msgstr "" + +#: glade/preferences_dialog.glade:1500 glade/preferences_dialog.glade:1694 +#: glade/preferences_dialog.glade:1888 glade/preferences_dialog.glade:2082 +msgid "Proxy type" +msgstr "" + +#: glade/preferences_dialog.glade:1525 +msgid "Peer Proxy" +msgstr "" + +#: glade/preferences_dialog.glade:1557 +msgid "Tracker Proxy" +msgstr "" + +#: glade/preferences_dialog.glade:1719 +msgid "Tracker Proxy" +msgstr "" + +#: glade/preferences_dialog.glade:1751 +msgid "DHT Proxy" +msgstr "" + +#: glade/preferences_dialog.glade:1913 +msgid "DHT Proxy" +msgstr "" + +#: glade/preferences_dialog.glade:1945 +msgid "Web Seed Proxy" +msgstr "" + +#: glade/preferences_dialog.glade:2107 +msgid "Web Seed Proxy" +msgstr "" + +#: glade/preferences_dialog.glade:2134 +msgid "Proxies" +msgstr "" + +#: glade/preferences_dialog.glade:2162 +msgid "Enable system tray icon" +msgstr "" + +#: glade/preferences_dialog.glade:2178 +msgid "Minimize to tray on close" +msgstr "" + +#: glade/preferences_dialog.glade:2197 +msgid "Start in tray" +msgstr "" + +#: glade/preferences_dialog.glade:2221 +msgid "Password protect system tray" +msgstr "" + +#: glade/preferences_dialog.glade:2239 +msgid "Password:" +msgstr "" + +#: glade/preferences_dialog.glade:2281 +msgid "System Tray" +msgstr "" + +#: glade/preferences_dialog.glade:2323 +msgid "Open folder with:" +msgstr "" + +#: glade/preferences_dialog.glade:2340 +msgid "Custom:" +msgstr "" + +#: glade/preferences_dialog.glade:2363 +msgid "" +"Auto-detect (xdg-open)\n" +"Konqueror\n" +"Nautilus\n" +"Thunar" +msgstr "" + +#: glade/preferences_dialog.glade:2410 +msgid "Desktop File Manager - only for non-Windows platforms" +msgstr "" + +#: glade/preferences_dialog.glade:2442 +msgid "GUI update interval (seconds)" +msgstr "" + +#: glade/preferences_dialog.glade:2470 +msgid "Performance" +msgstr "" + +#: glade/preferences_dialog.glade:2504 +msgid "" +"Deluge will check our servers and will tell you if a newer version has been " +"released" +msgstr "" + +#: glade/preferences_dialog.glade:2505 +msgid "Be alerted about new releases" +msgstr "" + +#: glade/preferences_dialog.glade:2522 +msgid "Updates" +msgstr "" + +#: glade/preferences_dialog.glade:2551 +msgid "" +"Help us improve Deluge by sending us your Python and PyGTK\n" +"versions, OS and processor types. Absolutely no other\n" +"information is sent." +msgstr "" + +#: glade/preferences_dialog.glade:2564 +msgid "System Information" +msgstr "" + +#: glade/preferences_dialog.glade:2587 +#: plugins/EventLogging/event_logging_preferences.glade:52 +#: plugins/EventLogging/tab_log.py:218 +msgid "Other" +msgstr "" + +#: glade/preferences_dialog.glade:2681 +msgid "gtk-preferences" +msgstr "" + +#: glade/torrent_menu.glade:11 +msgid "Re_sume" +msgstr "" + +#: glade/torrent_menu.glade:28 +msgid "_Pause" +msgstr "" + +#: glade/torrent_menu.glade:49 +msgid "_Update Tracker" +msgstr "" + +#: glade/torrent_menu.glade:66 +msgid "_Edit Trackers" +msgstr "" + +#: glade/torrent_menu.glade:88 +msgid "_Remove Torrent" +msgstr "" + +#: glade/torrent_menu.glade:111 +msgid "_Queue" +msgstr "" + +#: glade/torrent_menu.glade:121 +msgid "_Top" +msgstr "" + +#: glade/torrent_menu.glade:137 +msgid "_Up" +msgstr "" + +#: glade/torrent_menu.glade:153 +msgid "_Down" +msgstr "" + +#: glade/torrent_menu.glade:169 +msgid "_Bottom" +msgstr "" + +#: glade/torrent_menu.glade:198 +msgid "_Open Containing Folder" +msgstr "" + +#: glade/tray_menu.glade:12 +msgid "_Show Deluge" +msgstr "" + +#: glade/tray_menu.glade:21 +msgid "_Resume All" +msgstr "" + +#: glade/tray_menu.glade:38 +msgid "_Pause All" +msgstr "" + +#: glade/tray_menu.glade:84 +msgid "_Download Speed Limit" +msgstr "" + +#: glade/tray_menu.glade:100 +msgid "_Upload Speed Limit" +msgstr "" + +#: glade/tray_menu.glade:122 +msgid "_Quit" +msgstr "" + +#: glade/edit_trackers.glade:9 +msgid "Edit Trackers" +msgstr "" + +#: glade/edit_trackers.glade:19 +msgid "Tracker Editing" +msgstr "" + +#: glade/files_dialog.glade:8 +msgid "Deluge File Selection" +msgstr "" + +#: glade/files_dialog.glade:42 +msgid "Torrent will not be distributed on the trackerless (DHT) network" +msgstr "" + +#: glade/files_dialog.glade:43 +msgid "Set the private flag" +msgstr "" + +#: glade/wizard.glade:10 +msgid "First Launch Configuration" +msgstr "" + +#: glade/wizard.glade:20 +msgid "" +"This wizard will help you set up Deluge to your liking. If you are new to " +"Deluge, please note that most of Deluge's functionality and features come in " +"the form of plugins, which can be accessed by clicking on Plugins in the " +"Edit menu or the toolbar." +msgstr "" + +#: glade/wizard.glade:36 +msgid "" +"Deluge needs a range of ports that it will try to listen to for incoming " +"connections. The default ports for bittorrent are 6881-6889, however, most " +"ISPs block those ports, so you're encouraged to pick others, between 49152 " +"and 65535. Alternatively, you can have Deluge automatically pick random " +"ports for you." +msgstr "" + +#: glade/wizard.glade:88 +msgid "Use _Random Ports" +msgstr "" + +#: glade/wizard.glade:116 +msgid "" +"Would you like Deluge to automatically download to a predefined location, or " +"would you like to specify the download location every time?" +msgstr "" + +#: glade/wizard.glade:141 +msgid "Ask where to save each file" +msgstr "" + +#: glade/wizard.glade:165 +msgid "Store all downloads in: " +msgstr "" + +#: glade/wizard.glade:215 +msgid "" +"Please select the upload speed of your connection, which we will then use to " +"automatically make suggestions for the settings below" +msgstr "" + +#: glade/wizard.glade:238 +msgid "Maximum Active Torrents:" +msgstr "" + +#: glade/wizard.glade:386 +msgid "" +"28.8k\n" +"56k\n" +"64k\n" +"96k\n" +"128k\n" +"192k\n" +"256k\n" +"384k\n" +"512k\n" +"640k\n" +"768k\n" +"1Mbit\n" +"2Mbit\n" +"10Mbit\n" +"20Mbit\n" +"40Mbit\n" +"50Mbit\n" +"100Mbit" +msgstr "" + +#: glade/wizard.glade:419 +msgid "Your Upload Line Speed:" +msgstr "" + +#: glade/wizard.glade:506 +msgid "" +"_Help us improve Deluge by sending us your Python and PyGTK\n" +"versions, OS and processor types. Absolutely no other\n" +"information is sent." +msgstr "" + +#: src/interface.py:261 src/interface.py:267 src/interface.py:348 +#: src/interface.py:374 plugins/SpeedLimiter/__init__.py:82 +#: plugins/SpeedLimiter/__init__.py:92 plugins/SpeedLimiter/__init__.py:136 +#: plugins/SpeedLimiter/__init__.py:168 +msgid "KiB/s" +msgstr "" + +#: src/interface.py:288 src/interface.py:349 src/interface.py:375 +#: src/interface.py:1087 src/interface.py:1094 src/interface.py:1099 +#: src/interface.py:1127 src/interface.py:1129 +#: plugins/SpeedLimiter/__init__.py:137 plugins/SpeedLimiter/__init__.py:169 +msgid "Unlimited" +msgstr "" + +#: src/interface.py:291 +msgid "Activated" +msgstr "" + +#: src/interface.py:340 src/interface.py:352 src/interface.py:378 +#: plugins/DesiredRatio/__init__.py:114 plugins/SpeedLimiter/__init__.py:140 +#: plugins/SpeedLimiter/__init__.py:172 +msgid "Other..." +msgstr "" + +#: src/interface.py:357 +msgid "Download Speed (KiB/s):" +msgstr "" + +#: src/interface.py:383 +msgid "Upload Speed (KiB/s):" +msgstr "" + +#: src/interface.py:412 +msgid "Deluge is locked" +msgstr "" + +#: src/interface.py:415 +msgid "" +"Deluge is password protected.\n" +"To show the Deluge window, please enter your password" +msgstr "" + +#: src/interface.py:563 src/common.py:76 +msgid "Infinity" +msgstr "" + +#: src/interface.py:575 +msgid "Unknown" +msgstr "" + +#: src/interface.py:592 plugins/SimpleRSS/plugin.py:68 +#: plugins/SimpleRSS/plugin.py:76 plugins/SimpleRSS/plugin.py:83 +#: plugins/TorrentSearch/plugin.py:51 +msgid "Name" +msgstr "" + +#: src/interface.py:613 +msgid "ETA" +msgstr "" + +#: src/interface.py:616 +msgid "Avail." +msgstr "" + +#: src/interface.py:618 +msgid "Ratio" +msgstr "" + +#: src/interface.py:863 +#, python-format +msgid "Paused %s" +msgstr "" + +#: src/interface.py:1105 +msgid "Connections" +msgstr "" + +#: src/interface.py:1123 +msgid "DHT" +msgstr "" + +#: src/interface.py:1132 plugins/TorrentCreator/__init__.py:148 +msgid "Deluge" +msgstr "" + +#: src/interface.py:1132 +msgid "Download" +msgstr "" + +#: src/interface.py:1133 +msgid "Upload" +msgstr "" + +#: src/interface.py:1136 +msgid "Deluge Bittorrent Client" +msgstr "" + +#: src/interface.py:1213 +msgid "Choose a download directory" +msgstr "" + +#: src/interface.py:1240 +msgid "" +"An error occured while trying to add the torrent. It's possible your " +".torrent file is corrupted." +msgstr "" + +#: src/interface.py:1265 +msgid "Unknown duplicate torrent error." +msgstr "" + +#: src/interface.py:1270 +msgid "" +"There is not enough free disk space to complete your download." +msgstr "" + +#: src/interface.py:1272 +msgid "Space Needed:" +msgstr "" + +#: src/interface.py:1273 +msgid "Available Space:" +msgstr "" + +#: src/interface.py:1290 +msgid "Add torrent from URL" +msgstr "" + +#: src/interface.py:1294 +msgid "Enter the URL of the .torrent to download" +msgstr "" + +#: src/interface.py:1355 +msgid "Warning - all downloaded files for this torrent will be deleted!" +msgstr "" + +#: src/interface.py:1366 +msgid "Are you sure that you want to remove all seeding torrents?" +msgstr "" + +#: src/core.py:85 +msgid "Queued" +msgstr "" + +#: src/core.py:86 +msgid "Checking" +msgstr "" + +#: src/core.py:87 +msgid "Connecting" +msgstr "" + +#: src/core.py:88 +msgid "Downloading Metadata" +msgstr "" + +#: src/core.py:89 plugins/BlocklistImport/ui.py:117 +msgid "Downloading" +msgstr "" + +#: src/core.py:90 +msgid "Finished" +msgstr "" + +#: src/core.py:92 +msgid "Allocating" +msgstr "" + +#: src/core.py:135 +msgid "bytes needed" +msgstr "" + +#: src/core.py:374 +msgid "File was not found" +msgstr "" + +#: src/core.py:430 +msgid "Asked for a torrent that doesn't exist" +msgstr "" + +#: src/core.py:636 +msgid "Announce sent" +msgstr "" + +#: src/core.py:643 +msgid "Announce OK" +msgstr "" + +#: src/core.py:649 +msgid "Alert" +msgstr "" + +#: src/core.py:650 +msgid "HTTP code" +msgstr "" + +#: src/core.py:651 +msgid "times in a row" +msgstr "" + +#: src/core.py:658 +msgid "Warning" +msgstr "" + +#: src/files.py:77 +msgid "Filename" +msgstr "" + +#: src/files.py:81 +msgid "Priority" +msgstr "" + +#: src/files.py:103 +msgid "" +"File priority can only be set when using full allocation.\n" +"Please change your preference to disable compact allocation, then remove and " +"re-add this torrent." +msgstr "" + +#: src/dialogs.py:68 +msgid "Plugin" +msgstr "" + +#: src/dialogs.py:70 +msgid "Enabled" +msgstr "" + +#: src/dialogs.py:428 +msgid "translator-credits" +msgstr "" +"Launchpad Contributions:\n" +" Duong Thanh An https://launchpad.net/~dgthanhan" + +#: src/dialogs.py:429 +msgid "" +"Deluge is free software, you can redistribute it and/or\n" +"modify it under the terms of the GNU General Public\n" +" License as published by the Free Software Foundation,\n" +"either version 2 of the License, or (at your option) any\n" +"later version. Deluge is distributed in the hope that it\n" +"will be useful, but WITHOUT ANY WARRANTY, without even \n" +"the implied warranty of MERCHANTABILITY or FITNESS\n" +"FOR A PARTICULAR PURPOSE. See the GNU General\n" +"Public License for more details. You should have received\n" +"a copy of the GNU General Public License along with\n" +"Deluge, but if not, write to the Free Software Foundation,\n" +" Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-\n" +"1301 USA" +msgstr "" + +#: src/dialogs.py:469 +msgid "Choose a .torrent file" +msgstr "" + +#: src/dialogs.py:474 +msgid "Torrent files" +msgstr "" + +#: src/dialogs.py:478 +msgid "All files" +msgstr "" + +#: src/common.py:90 +msgid "KiB" +msgstr "" + +#: src/common.py:93 +msgid "MiB" +msgstr "" + +#: src/common.py:96 +msgid "GiB" +msgstr "" + +#: src/common.py:99 +msgid "TiB" +msgstr "" + +#: src/common.py:101 +msgid "PiB" +msgstr "" + +#: src/common.py:203 +msgid "External command" +msgstr "" + +#: src/common.py:204 +msgid "not found" +msgstr "" + +#: src/common.py:240 +msgid "" +"There is a newer version of Deluge. Would you like to be taken to our " +"download site?" +msgstr "" + +#: plugins/BlocklistImport/__init__.py:6 +msgid "Blocklist Importer" +msgstr "" + +#: plugins/BlocklistImport/__init__.py:9 +msgid "" +"\n" +"Download and import various IP blocklists.\n" +"\n" +"Currently this plugin can handle PeerGuardian (binary and text),\n" +"SafePeer and Emule lists. PeerGuardian 7zip format files are not\n" +"supported. Files may be specified as URLs or locations on the local\n" +"filesystem.\n" +"\n" +"A page with pointer to blocklist download sites is available on the\n" +"wiki:\n" +"\n" +"http://dev.deluge-torrent.org/wiki/BlocklistPlugin\n" +msgstr "" + +#: plugins/BlocklistImport/__init__.py:40 +msgid "PeerGuardian P2B (GZip)" +msgstr "" + +#: plugins/BlocklistImport/__init__.py:41 +msgid "PeerGuardian Text (Uncompressed)" +msgstr "" + +#: plugins/BlocklistImport/__init__.py:42 +msgid "Emule IP list (GZip)" +msgstr "" + +#: plugins/BlocklistImport/__init__.py:43 +msgid "SafePeer Text (Zipped)" +msgstr "" + +#: plugins/BlocklistImport/__init__.py:92 +msgid "Couldn't download URL" +msgstr "" + +#: plugins/BlocklistImport/__init__.py:105 +msgid "Couldn't open blocklist file" +msgstr "" + +#: plugins/BlocklistImport/__init__.py:118 +msgid "Imported" +msgstr "" + +#: plugins/BlocklistImport/__init__.py:118 +msgid "IPs" +msgstr "" + +#: plugins/BlocklistImport/__init__.py:123 +msgid "Format error in blocklist" +msgstr "" + +#: plugins/BlocklistImport/__init__.py:162 +msgid "Blocklist" +msgstr "" + +#: plugins/BlocklistImport/__init__.py:162 +msgid "entries" +msgstr "" + +#: plugins/BlocklistImport/ui.py:25 +msgid "Blocklist URL" +msgstr "" + +#: plugins/BlocklistImport/ui.py:50 +msgid "Download on start" +msgstr "" + +#: plugins/BlocklistImport/ui.py:105 +msgid "Loading and installing blocklist" +msgstr "" + +#: plugins/BlocklistImport/ui.py:128 +msgid "Importing" +msgstr "" + +#: plugins/BlocklistImport/ui.py:139 +msgid "Complete" +msgstr "" + +#: plugins/BlocklistImport/text.py:37 +msgid "Couldn't match on line" +msgstr "" + +#: plugins/BlocklistImport/peerguardian.py:28 +msgid "Invalid leader" +msgstr "" + +#: plugins/BlocklistImport/peerguardian.py:32 +msgid "Invalid magic code" +msgstr "" + +#: plugins/BlocklistImport/peerguardian.py:37 +msgid "Invalid version" +msgstr "" + +#: plugins/DesiredRatio/__init__.py:19 plugins/DesiredRatio/__init__.py:118 +msgid "Desired Ratio" +msgstr "" + +#: plugins/DesiredRatio/__init__.py:22 +msgid "Set the desired ratio for a torrent." +msgstr "" + +#: plugins/DesiredRatio/__init__.py:75 +msgid "_Desired Ratio" +msgstr "" + +#: plugins/DesiredRatio/__init__.py:79 +msgid "_Not Set" +msgstr "" + +#: plugins/DesiredRatio/__init__.py:111 +msgid "Not Set" +msgstr "" + +#: plugins/TorrentPeers/__init__.py:19 +msgid "Torrent Peers" +msgstr "" + +#: plugins/TorrentPeers/__init__.py:22 +msgid "" +"\n" +"This shows you the peers associated with each torrent and shows you their " +"ip, country, client, percent complete and upload and download speeds.\n" +msgstr "" + +#: plugins/TorrentPeers/tab_peers.py:84 +msgid "IP Address" +msgstr "" + +#: plugins/TorrentPeers/tab_peers.py:86 +msgid "Client" +msgstr "" + +#: plugins/TorrentPeers/tab_peers.py:87 +msgid "Percent Complete" +msgstr "" + +#: plugins/TorrentCreator/torrentcreator.glade:8 +#: plugins/TorrentCreator/__init__.py:19 +msgid "Torrent Creator" +msgstr "" + +#: plugins/TorrentCreator/torrentcreator.glade:103 +msgid "This torrent will be made from a single file" +msgstr "" + +#: plugins/TorrentCreator/torrentcreator.glade:104 +msgid "File:" +msgstr "" + +#: plugins/TorrentCreator/torrentcreator.glade:120 +msgid "This torrent will be made from a directory" +msgstr "" + +#: plugins/TorrentCreator/torrentcreator.glade:121 +msgid "Folder:" +msgstr "" + +#: plugins/TorrentCreator/torrentcreator.glade:138 +msgid "Source" +msgstr "" + +#: plugins/TorrentCreator/torrentcreator.glade:184 +msgid "Save Torrent File As:" +msgstr "" + +#: plugins/TorrentCreator/torrentcreator.glade:237 +msgid "Load this torrent into Deluge for seeding" +msgstr "" + +#: plugins/TorrentCreator/torrentcreator.glade:238 +msgid "Add new torrent to queue" +msgstr "" + +#: plugins/TorrentCreator/torrentcreator.glade:257 +msgid "Torrent File" +msgstr "" + +#: plugins/TorrentCreator/torrentcreator.glade:305 +msgid "Trackers" +msgstr "" + +#: plugins/TorrentCreator/torrentcreator.glade:352 +msgid "Comments" +msgstr "" + +#: plugins/TorrentCreator/torrentcreator.glade:389 +msgid "Author" +msgstr "" + +#: plugins/TorrentCreator/torrentcreator.glade:425 +msgid "Set Private Flag" +msgstr "" + +#: plugins/TorrentCreator/torrentcreator.glade:441 +#: plugins/TorrentCreator/torrentcreator.glade:461 +msgid "" +"The smaller the piece sizes, the more efficient the transfers will be, but " +"the actual \".torrent\" file will be larger" +msgstr "" + +#: plugins/TorrentCreator/torrentcreator.glade:442 +msgid "" +"32 KiB\n" +"64 KiB\n" +"128 KiB\n" +"256 KiB\n" +"512 KiB\n" +"1024 KiB\n" +msgstr "" + +#: plugins/TorrentCreator/torrentcreator.glade:463 +msgid "Piece Size:" +msgstr "" + +#: plugins/TorrentCreator/torrentcreator.glade:477 +msgid "Advanced" +msgstr "" + +#: plugins/TorrentCreator/__init__.py:22 +msgid "A torrent creator plugin" +msgstr "" + +#: plugins/TorrentCreator/__init__.py:50 +msgid "_New Torrent" +msgstr "" + +#: plugins/TorrentCreator/__init__.py:60 +msgid "New Torrent" +msgstr "" + +#: plugins/TorrentCreator/__init__.py:62 +msgid "Create New Torrent" +msgstr "" + +#: plugins/TorrentCreator/__init__.py:98 +msgid "Save file as..." +msgstr "" + +#: plugins/TorrentCreator/__init__.py:120 +msgid "You must select a source for the torrent." +msgstr "" + +#: plugins/TorrentCreator/__init__.py:127 +msgid "You must select a file to save the torrent as." +msgstr "" + +#: plugins/TorrentCreator/__init__.py:138 +msgid "You must specify at least one tracker." +msgstr "" + +#: plugins/SimpleRSS/rss.glade:7 +msgid "RSS Broadcatcher Settings" +msgstr "" + +#: plugins/SimpleRSS/rss.glade:87 +msgid "Feed Name:" +msgstr "" + +#: plugins/SimpleRSS/rss.glade:151 +msgid "Feed URL:" +msgstr "" + +#: plugins/SimpleRSS/rss.glade:283 +msgid "Feeds" +msgstr "" + +#: plugins/SimpleRSS/rss.glade:385 plugins/SimpleRSS/plugin.py:75 +msgid "Feed" +msgstr "" + +#: plugins/SimpleRSS/rss.glade:413 +msgid "Filter Exp:" +msgstr "" + +#: plugins/SimpleRSS/rss.glade:442 +msgid "Filter Name:" +msgstr "" + +#: plugins/SimpleRSS/rss.glade:543 +msgid "Filters" +msgstr "" + +#: plugins/SimpleRSS/rss.glade:564 +msgid " Feed: " +msgstr "" + +#: plugins/SimpleRSS/rss.glade:617 +msgid "Torrents" +msgstr "" + +#: plugins/SimpleRSS/rss.glade:660 +msgid "Update Interval (seconds): " +msgstr "" + +#: plugins/SimpleRSS/rss.glade:729 +msgid "Check feeds on Deluge start" +msgstr "" + +#: plugins/SimpleRSS/rss.glade:781 +msgid "Check Feeds Now" +msgstr "" + +#: plugins/SimpleRSS/rss.glade:836 +msgid "Options" +msgstr "" + +#: plugins/SimpleRSS/__init__.py:33 +msgid "Simple RSS" +msgstr "" + +#: plugins/SimpleRSS/__init__.py:36 +msgid "" +"\n" +"Download Torrents automatically from SimpleRSS Feeds\n" +"\n" +"Add RSS feeds on the 'Feeds' tab, then add filters for TV shows (or " +"whatever) on the 'Filters' tab. Double-click entries on the 'Torrents' tab " +"to download extra torrents from the feeds. The Options are pretty self-" +"explanatary.\n" +"\n" +"Please message me (SatNav) on the forums and let me know how you get on..\n" +"\n" +"Enjoy!" +msgstr "" + +#: plugins/SimpleRSS/plugin.py:69 plugins/SimpleRSS/plugin.py:77 +msgid "URL" +msgstr "" + +#: plugins/SimpleRSS/plugin.py:70 +msgid "Last Entry Date" +msgstr "" + +#: plugins/SimpleRSS/plugin.py:78 +msgid "Date" +msgstr "" + +#: plugins/SimpleRSS/plugin.py:135 +msgid "RSS" +msgstr "" + +#: plugins/SimpleRSS/plugin.py:137 +msgid "SimpleRSS Broadcatcher" +msgstr "" + +#: plugins/SimpleRSS/plugin.py:220 plugins/SimpleRSS/plugin.py:224 +#: plugins/SimpleRSS/plugin.py:225 plugins/SimpleRSS/plugin.py:226 +#: plugins/SimpleRSS/plugin.py:228 plugins/SimpleRSS/plugin.py:229 +#: plugins/SimpleRSS/plugin.py:230 +msgid "New Filter" +msgstr "" + +#: plugins/SimpleRSS/plugin.py:299 plugins/SimpleRSS/plugin.py:434 +#: plugins/SimpleRSS/plugin.py:435 +msgid "All" +msgstr "" + +#: plugins/TorrentNotification/notification_preferences.glade:7 +msgid "Torrent Notification Preferences" +msgstr "" + +#: plugins/TorrentNotification/notification_preferences.glade:32 +msgid "Enable event sound (requires pygame, not available on Win32)" +msgstr "" + +#: plugins/TorrentNotification/notification_preferences.glade:59 +msgid "Enable blinking tray icon" +msgstr "" + +#: plugins/TorrentNotification/notification_preferences.glade:69 +msgid "" +"Enable popup notification (requires python-notify, not available on Win32)" +msgstr "" + +#: plugins/TorrentNotification/__init__.py:19 +msgid "Torrent Notification" +msgstr "" + +#: plugins/TorrentNotification/__init__.py:22 +msgid "" +"Make tray icon blink when torrent finishes downloading and/or popup a " +"notification" +msgstr "" + +#: plugins/TorrentNotification/__init__.py:103 +msgid "Torrent complete" +msgstr "" + +#: plugins/TorrentNotification/__init__.py:104 +#: plugins/TorrentFiles/__init__.py:71 +msgid "Files" +msgstr "" + +#: plugins/NetworkHealth/__init__.py:33 +msgid "Network Health Monitor" +msgstr "" + +#: plugins/NetworkHealth/__init__.py:36 +msgid "" +"Network Health Monitor plugin\n" +"\n" +"Written by Kripkenstein" +msgstr "" + +#: plugins/NetworkHealth/plugin.py:53 +msgid "[Health: OK]" +msgstr "" + +#: plugins/EventLogging/event_logging_preferences.glade:7 +msgid "Event Logging Preferences" +msgstr "" + +#: plugins/EventLogging/event_logging_preferences.glade:28 +msgid "Enable log files" +msgstr "" + +#: plugins/EventLogging/event_logging_preferences.glade:41 +msgid "Log files" +msgstr "" + +#: plugins/EventLogging/event_logging_preferences.glade:66 +#: plugins/EventLogging/tab_log.py:210 +msgid "Peer blocked" +msgstr "" + +#: plugins/EventLogging/event_logging_preferences.glade:80 +#: plugins/EventLogging/tab_log.py:200 +msgid "Block finished" +msgstr "" + +#: plugins/EventLogging/event_logging_preferences.glade:94 +#: plugins/EventLogging/tab_log.py:189 +msgid "Block downloading" +msgstr "" + +#: plugins/EventLogging/event_logging_preferences.glade:108 +#: plugins/EventLogging/tab_log.py:179 +msgid "Piece finished" +msgstr "" + +#: plugins/EventLogging/event_logging_preferences.glade:122 +#: plugins/EventLogging/tab_log.py:170 +msgid "Storage moved" +msgstr "" + +#: plugins/EventLogging/event_logging_preferences.glade:136 +#: plugins/EventLogging/tab_log.py:161 +msgid "Tracker warning" +msgstr "" + +#: plugins/EventLogging/event_logging_preferences.glade:150 +#: plugins/EventLogging/tab_log.py:150 +msgid "Tracker alert" +msgstr "" + +#: plugins/EventLogging/event_logging_preferences.glade:164 +#: plugins/EventLogging/tab_log.py:141 +msgid "Tracker reply" +msgstr "" + +#: plugins/EventLogging/event_logging_preferences.glade:178 +#: plugins/EventLogging/tab_log.py:132 +msgid "Tracker announce" +msgstr "" + +#: plugins/EventLogging/event_logging_preferences.glade:192 +#: plugins/EventLogging/tab_log.py:123 +msgid "Fastresume rejected error" +msgstr "" + +#: plugins/EventLogging/event_logging_preferences.glade:206 +#: plugins/EventLogging/tab_log.py:114 +msgid "Peer ban error" +msgstr "" + +#: plugins/EventLogging/event_logging_preferences.glade:220 +#: plugins/EventLogging/tab_log.py:104 +msgid "Hash failed error" +msgstr "" + +#: plugins/EventLogging/event_logging_preferences.glade:234 +#: plugins/EventLogging/tab_log.py:95 +msgid "File error" +msgstr "" + +#: plugins/EventLogging/event_logging_preferences.glade:248 +#: plugins/EventLogging/tab_log.py:86 +msgid "Invalid request" +msgstr "" + +#: plugins/EventLogging/event_logging_preferences.glade:262 +msgid "Peer messages" +msgstr "" + +#: plugins/EventLogging/event_logging_preferences.glade:276 +#: plugins/EventLogging/tab_log.py:70 +msgid "Torrent finished" +msgstr "" + +#: plugins/EventLogging/event_logging_preferences.glade:289 +msgid "Select events to log" +msgstr "" + +#: plugins/EventLogging/__init__.py:19 +msgid "Event Logging" +msgstr "" + +#: plugins/EventLogging/__init__.py:22 +msgid "" +"\n" +"Adds a tab with log of selected events.\n" +"\n" +"Event messages come from libtorrent alerts.\n" +"If you want those strings translated to your locale,\n" +"you'll have to report the issue with libtorrent, not deluge.\n" +"\n" +"Regarding the log files, the logs are saved in a log\n" +"directory within the deluge config directory. Event\n" +"messages for specific torrents are saved to individual\n" +"log files named the same as the associated .torrent\n" +"file. Event messages not specific to any torrent are\n" +"saved to logs named after the events\n" +"(eg peer_messages.log).\n" +"Event messages in the log files also include a timestamp.\n" +"The user is responsible to cleanout the logs.\n" +"\n" +"As of v0.2\n" +"Events are now truncated in display. Log files are not.\n" +"New events are now displayed at the top.\n" +msgstr "" + +#: plugins/EventLogging/__init__.py:88 +msgid "Event Log" +msgstr "" + +#: plugins/EventLogging/tab_log.py:70 plugins/EventLogging/tab_log.py:78 +#: plugins/EventLogging/tab_log.py:86 plugins/EventLogging/tab_log.py:95 +#: plugins/EventLogging/tab_log.py:104 plugins/EventLogging/tab_log.py:114 +#: plugins/EventLogging/tab_log.py:132 plugins/EventLogging/tab_log.py:141 +#: plugins/EventLogging/tab_log.py:150 plugins/EventLogging/tab_log.py:161 +#: plugins/EventLogging/tab_log.py:170 plugins/EventLogging/tab_log.py:179 +#: plugins/EventLogging/tab_log.py:189 plugins/EventLogging/tab_log.py:200 +#: plugins/EventLogging/tab_log.py:210 plugins/EventLogging/tab_log.py:218 +msgid "event message: " +msgstr "" + +#: plugins/EventLogging/tab_log.py:71 plugins/EventLogging/tab_log.py:95 +#: plugins/EventLogging/tab_log.py:105 plugins/EventLogging/tab_log.py:115 +#: plugins/EventLogging/tab_log.py:124 plugins/EventLogging/tab_log.py:133 +#: plugins/EventLogging/tab_log.py:142 plugins/EventLogging/tab_log.py:151 +#: plugins/EventLogging/tab_log.py:162 plugins/EventLogging/tab_log.py:171 +#: plugins/EventLogging/tab_log.py:180 plugins/EventLogging/tab_log.py:190 +#: plugins/EventLogging/tab_log.py:201 +msgid "torrent: " +msgstr "" + +#: plugins/EventLogging/tab_log.py:78 +msgid "Peer message" +msgstr "" + +#: plugins/EventLogging/tab_log.py:78 plugins/EventLogging/tab_log.py:114 +#: plugins/EventLogging/tab_log.py:211 +msgid "ip address: " +msgstr "" + +#: plugins/EventLogging/tab_log.py:79 plugins/EventLogging/tab_log.py:86 +msgid "client: " +msgstr "" + +#: plugins/EventLogging/tab_log.py:106 plugins/EventLogging/tab_log.py:181 +#: plugins/EventLogging/tab_log.py:191 plugins/EventLogging/tab_log.py:202 +msgid "piece index: " +msgstr "" + +#: plugins/EventLogging/tab_log.py:152 +msgid "status code: " +msgstr "" + +#: plugins/EventLogging/tab_log.py:152 +msgid "Times in a row: " +msgstr "" + +#: plugins/EventLogging/tab_log.py:191 plugins/EventLogging/tab_log.py:202 +msgid "block index: " +msgstr "" + +#: plugins/EventLogging/tab_log.py:192 +msgid "peer speed: " +msgstr "" + +#: plugins/SpeedLimiter/__init__.py:17 +msgid "Speed Limiter" +msgstr "" + +#: plugins/SpeedLimiter/__init__.py:20 +msgid "Set the desired speed limit per torrent." +msgstr "" + +#: plugins/SpeedLimiter/__init__.py:80 +msgid "Torrent _Download Speed" +msgstr "" + +#: plugins/SpeedLimiter/__init__.py:90 +msgid "Torrent Upload _Speed" +msgstr "" + +#: plugins/SpeedLimiter/__init__.py:144 +msgid "Torrent Upload Speed (KiB/s):" +msgstr "" + +#: plugins/SpeedLimiter/__init__.py:176 +msgid "Torrent Download Speed (KiB/s):" +msgstr "" + +#: plugins/TorrentSearch/__init__.py:33 +msgid "Torrent Search" +msgstr "" + +#: plugins/TorrentSearch/__init__.py:36 +msgid "A searchbar for torrent search engines" +msgstr "" + +#: plugins/TorrentSearch/plugin.py:52 +msgid "Search String" +msgstr "" + +#: plugins/TorrentSearch/plugin.py:74 plugins/TorrentSearch/plugin.py:164 +msgid "Choose an Engine" +msgstr "" + +#: plugins/TorrentSearch/plugin.py:78 +msgid "Manage Engines" +msgstr "" + +#: plugins/TorrentSearch/plugin.py:185 +msgid "Search " +msgstr "" + +#: plugins/TorrentSearch/searchdlg.glade:7 +msgid "Manage Search Plugins" +msgstr "" + +#: plugins/TorrentSearch/searchdlg.glade:79 +msgid "Name:" +msgstr "" + +#: plugins/TorrentSearch/searchdlg.glade:91 plugins/WebSeed/webseed.glade:28 +msgid "URL:" +msgstr "" + +#: plugins/TorrentSearch/searchdlg.glade:123 +msgid "" +"Add a new search engine by entering a Name and a URL. For Name, enter the " +"name of the search engine to be used. For URL, enter the url of the seach " +"page. The user's search query will replace any instance of ${query} in the " +"URL.\n" +"For example, a Google search would be:\n" +"Name: Google\n" +"URL: http://www.google.com/search?q=${query}" +msgstr "" + +#: plugins/TorrentSearch/searchdlg.glade:133 +msgid "Help" +msgstr "" + +#: plugins/NetworkGraph/__init__.py:33 +msgid "Network Activity Graph" +msgstr "" + +#: plugins/NetworkGraph/__init__.py:36 +msgid "" +"Network Activity Graph plugin\n" +"\n" +"Written by Kripkenstein" +msgstr "" + +#: plugins/NetworkGraph/__init__.py:89 +msgid "Graph" +msgstr "" + +#: plugins/Locations/__init__.py:18 +msgid "Locations" +msgstr "" + +#: plugins/Locations/__init__.py:21 +msgid "" +"Automagically remembers relevant settings for different locations.\n" +"\n" +"When this plugin is active, it will remember a lot of useful network-" +"specific preferences, such as up- or download limits, open ports and proxy " +"information. Just change preferences to suit each location while connected, " +"and Deluge will automagically use those settings the next time you connect " +"at that location. There is no other configuration needed.\n" +"\n" +"The plugin determines location by identifying the unique MAC address of the " +"Gateway used for the connection. It is therefore possible to have different " +"settings for home and work, or for broadband, 3G and dial-up on the fly.\n" +msgstr "" + +#: plugins/TorrentFiles/tab_files.py:59 +msgid "Progress" +msgstr "" + +#: plugins/TorrentFiles/tab_files.py:100 +msgid "There was an error trying to launch the file." +msgstr "" + +#: plugins/TorrentFiles/__init__.py:19 +msgid "Torrent Files" +msgstr "" + +#: plugins/TorrentFiles/__init__.py:22 +msgid "" +"\n" +"This plugin shows you the files inside a torrent and allows you to set " +"priorities for them and choose which ones you want or don't want to " +"download.\n" +msgstr "" + +#: plugins/ExtraStats/__init__.py:19 +msgid "Extra Stats" +msgstr "" + +#: plugins/ExtraStats/__init__.py:22 +msgid "" +"\n" +"Adds info to tray tooltip.\n" +"Adds these stats.\n" +"total bytes downloaded\n" +"total bytes uploaded\n" +"overall ratio\n" +"torrents completed\n" +"\n" +"All of these stats come in pairs:\n" +"across sessions stat and within session stat.\n" +"By default, all pairs enabled, but can be disabled in plugin preferences.\n" +"\n" +"session data always shows up within parenthesis\n" +"eg. Total Downloaded: 5 GiB (4 MiB)\n" +"would be 5 GiB across sessions and 4 MiB within session\n" +msgstr "" + +#: plugins/ExtraStats/__init__.py:175 +#: plugins/ExtraStats/stats_preferences.glade:28 +msgid "Total Downloaded" +msgstr "" + +#: plugins/ExtraStats/__init__.py:181 +#: plugins/ExtraStats/stats_preferences.glade:38 +msgid "Total Uploaded" +msgstr "" + +#: plugins/ExtraStats/__init__.py:187 plugins/ExtraStats/__init__.py:191 +msgid "Undefined" +msgstr "" + +#: plugins/ExtraStats/__init__.py:195 +#: plugins/ExtraStats/stats_preferences.glade:52 +msgid "Overall Ratio" +msgstr "" + +#: plugins/ExtraStats/__init__.py:200 +#: plugins/ExtraStats/stats_preferences.glade:66 +msgid "Torrents Completed" +msgstr "" + +#: plugins/ExtraStats/__init__.py:206 +#: plugins/ExtraStats/stats_preferences.glade:80 +msgid "Running Time" +msgstr "" + +#: plugins/ExtraStats/stats_preferences.glade:7 +msgid "Extra Stats Preferences" +msgstr "" + +#: plugins/MoveTorrent/__init__.py:19 +msgid "Move Torrent" +msgstr "" + +#: plugins/MoveTorrent/__init__.py:22 +msgid "" +"This plugin allows users to move the torrent to a different directory " +"without having to remove and re-add the torrent. This feature can be found " +"by right-clicking on a torrent.\n" +"Furthermore, it allows the user to automatically have finished torrents " +"moved to a different folder." +msgstr "" + +#: plugins/MoveTorrent/__init__.py:76 +msgid "_Move Torrent" +msgstr "" + +#: plugins/MoveTorrent/__init__.py:95 +msgid "Choose a directory to move files to" +msgstr "" + +#: plugins/MoveTorrent/__init__.py:129 +msgid "" +"You cannot move torrent to a different partition. Please check your " +"preferences. Also, you cannot move a torrent's files to the same directory " +"that they are already stored or move a torrent's files before any of its " +"files have actually been created." +msgstr "" + +#: plugins/MoveTorrent/movetorrent.glade:25 +msgid "Move completed downloads to:" +msgstr "" + +#: plugins/MoveTorrent/movetorrent.glade:59 plugins/WebSeed/webseed.glade:64 +msgid "gtk-cancel" +msgstr "" + +#: plugins/MoveTorrent/movetorrent.glade:71 plugins/WebSeed/webseed.glade:72 +msgid "gtk-ok" +msgstr "" + +#: plugins/WebSeed/__init__.py:19 +msgid "Web Seed" +msgstr "" + +#: plugins/WebSeed/__init__.py:22 +msgid "This plugin allows users to add web seeds to their torrents" +msgstr "" + +#: plugins/WebSeed/__init__.py:51 +msgid "_Add Web Seed" +msgstr "" + +#: plugins/WebSeed/webseed.glade:7 +msgid "Open Containing Folder Preferences" +msgstr "" + +#: plugins/Scheduler/plugin.py:76 +msgid "Scheduler Settings" +msgstr "" + +#: plugins/Scheduler/plugin.py:86 +msgid "Limit download to:" +msgstr "" + +#: plugins/Scheduler/plugin.py:87 +msgid "Limit upload to:" +msgstr "" + +#: plugins/Scheduler/plugin.py:135 +msgid "Yellow is limited, red is stopped and green is unlimited." +msgstr "" + +#: plugins/Scheduler/plugin.py:137 +msgid "" +"When set to -1 (unlimited), the global limits in Deluge's preferences will " +"be obeyed." +msgstr "" diff --git a/setup.py b/setup.py index 9e875f4f0..582bfe8bb 100644 --- a/setup.py +++ b/setup.py @@ -28,7 +28,7 @@ NAME = "deluge" FULLNAME = "Deluge BitTorrent Client" -VERSION = "0.5.5.95" +VERSION = "0.5.6.1" AUTHOR = "Zach Tibbitts, Alon Zakai, Marcos Pinto, Andrew Resch, Alex Dedul" EMAIL = "zach@collegegeek.org, kripkensteiner@gmail.com, marcospinto@dipconsultants.com, alonzakai@gmail.com, rotmer@gmail.com" DESCRIPTION = "A bittorrent client written in PyGTK" diff --git a/src/common.py b/src/common.py index 3e4f15ffd..e1cbdb0ee 100644 --- a/src/common.py +++ b/src/common.py @@ -32,7 +32,7 @@ import os import xdg.BaseDirectory PROGRAM_NAME = "Deluge" -PROGRAM_VERSION = "0.5.5.95" +PROGRAM_VERSION = "0.5.6.1" CLIENT_CODE = "DE" CLIENT_VERSION = "".join(PROGRAM_VERSION.split('.'))+"0"*(4 - len(PROGRAM_VERSION.split('.'))) diff --git a/src/deluge_core.cpp b/src/deluge_core.cpp index 3c9d1b174..9377b3524 100644 --- a/src/deluge_core.cpp +++ b/src/deluge_core.cpp @@ -646,7 +646,6 @@ static PyObject *torrent_set_max_connections_global(PyObject *self, PyObject *ar // printf("Setting max connections: %d\r\n", max_conn); M_ses->set_max_connections(max_conn); - Py_INCREF(Py_None); return Py_None; } @@ -1217,11 +1216,12 @@ static PyObject *torrent_get_session_info(PyObject *self, PyObject *args) { session_status s = M_ses->status(); - return Py_BuildValue("{s:l,s:f,s:f,s:l,s:f,s:f}", + return Py_BuildValue("{s:l,s:f,s:f,s:ls:l,s:f,s:f}", "has_incoming_connections", long(s.has_incoming_connections), "upload_rate", float(s.payload_upload_rate), "download_rate", float(s.payload_download_rate), "num_peers", long(s.num_peers), + "num_connections", long(M_ses->num_connections()), "total_downloaded", float(s.total_payload_download), "total_uploaded", float(s.total_payload_upload)); } @@ -1778,8 +1778,7 @@ static PyObject *torrent_replace_trackers(PyObject *self, PyObject *args) if (PyErr_Occurred()) return NULL; - torrent_handle& h = M_torrents->at(index).handle; - if (h.is_valid()){ + if (M_torrents->at(index).handle.is_valid()){ std::vector trackerlist; std::istringstream trackers(tracker); std::string line; @@ -1787,8 +1786,8 @@ static PyObject *torrent_replace_trackers(PyObject *self, PyObject *args) libtorrent::announce_entry a_entry(line); trackerlist.push_back(a_entry); } - h.replace_trackers(trackerlist); - h.force_reannounce(); + M_torrents->at(index).handle.replace_trackers(trackerlist); + M_torrents->at(index).handle.force_reannounce(); } Py_INCREF(Py_None); return Py_None; } diff --git a/src/dgtk.py b/src/dgtk.py index 6706ca7db..e97b0935f 100644 --- a/src/dgtk.py +++ b/src/dgtk.py @@ -43,7 +43,8 @@ import gtk def cell_data_speed(column, cell, model, iter, data): speed = int(model.get_value(iter, data)) - speed_str = common.fspeed(speed) + if speed<100: speed_str = "" + else: speed_str = common.fspeed(speed) cell.set_property('text', speed_str) def cell_data_size(column, cell, model, iter, data): diff --git a/src/dialogs.py b/src/dialogs.py index fc0cd1172..d9710438b 100644 --- a/src/dialogs.py +++ b/src/dialogs.py @@ -428,6 +428,8 @@ def show_about_dialog(window): abt.set_transient_for(window) abt.set_name(common.PROGRAM_NAME) abt.set_version(common.PROGRAM_VERSION) + abt.set_comments("Deluge is a full-featured BitTorrent\nclient for Linux, Mac OS X and Windows") + abt.set_documenters(["Marcos Pinto"]) abt.set_authors(["Zach Tibbitts", "Alon Zakai", "Marcos Pinto", "Andrew Resch", "Alex Dedul"]) abt.set_artists(["Andrew Wedderburn"]) abt.set_translator_credits(_("translator-credits")) diff --git a/src/interface.py b/src/interface.py index 6e304cc43..ed644c1ca 100644 --- a/src/interface.py +++ b/src/interface.py @@ -947,11 +947,17 @@ window, please enter your password")) unique_id = self.manager.get_torrent_unique_id(torrent) try: if self.manager.unique_IDs[unique_id].trackers: - self.manager.replace_trackers(unique_id, \ + try: + self.manager.replace_trackers(unique_id, \ self.manager.unique_IDs[unique_id].trackers) + except: + pass if self.manager.unique_IDs[unique_id].uploaded_memory: - self.manager.unique_IDs[unique_id].initial_uploaded_memory \ + try: + self.manager.unique_IDs[unique_id].initial_uploaded_memory \ = self.manager.unique_IDs[unique_id].uploaded_memory + except: + pass except AttributeError: pass @@ -1091,7 +1097,7 @@ window, please enter your password")) def update_statusbar_and_tray(self): plugin_messages = self.plugins.get_plugin_tray_messages() core_state = self.manager.get_state() - connections = core_state['num_peers'] + connections = core_state['num_connections'] if self.config.get("max_connections_global") < 0 : max_connections = _("Unlimited") else: