[SCM] Azureus/Vuze packaging for Debian branch, upstream, updated. upstream/4.3.0.0-1-g2a572fe
Adrian Perez
adrianperez-guest at alioth.debian.org
Thu Dec 17 21:34:48 UTC 2009
This is an automated email from the git hooks/post-receive script. It was
generated because a ref change was pushed to the repository containing
the project "Azureus/Vuze packaging for Debian".
The branch, upstream has been updated
via 2a572fea0a045c7346346de077250b74f371d71a (commit)
from 7f589b99ccb4db616a78d45152378a580a4abf08 (commit)
Those revisions listed above that are new to this repository have
not appeared on any other notification email; so we list those
revisions in full, below.
- Log -----------------------------------------------------------------
-----------------------------------------------------------------------
Summary of changes:
ChangeLog.txt | 47 +
.../azureus/activities/VuzeActivitiesManager.java | 68 +
.../azureus/core/cnetwork/ContentNetwork.java | 3 +-
.../cnetwork/impl/ContentNetworkVuzeGeneric.java | 1 +
.../core/content/RelatedContentManager.java | 63 +-
.../core/devices/DeviceOfflineDownloader.java | 3 +-
.../devices/impl/DeviceOfflineDownloaderImpl.java | 5 +-
.../transport/udp/impl/DHTTransportUDPImpl.java | 2 +-
.../diskmanager/file/impl/FMFileAccessCompact.java | 19 +-
.../core/download/EnhancedDownloadManager.java | 6 +-
com/aelitis/azureus/core/impl/AzureusCoreImpl.java | 5 +-
.../azureus/core/lws/LWSDiskManagerState.java | 7 +-
.../azureus/core/lws/LightWeightSeedManager.java | 5 +-
.../core/messenger/browser/BrowserMessage.java | 162 +---
.../browser/BrowserMessageDispatcher.java | 27 -
.../config/PlatformMetaDataMessenger.java | 336 +++++
.../config/PlatformMetaSearchMessenger.java | 35 +-
com/aelitis/azureus/core/metasearch/Engine.java | 26 +-
.../azureus/core/metasearch/MetaSearch.java | 4 +
com/aelitis/azureus/core/metasearch/Result.java | 24 +-
.../azureus/core/metasearch/impl/EngineImpl.java | 81 ++-
.../core/metasearch/impl/MetaSearchImpl.java | 201 +++-
.../metasearch/impl/MetaSearchManagerImpl.java | 73 +-
.../core/metasearch/impl/plugin/PluginResult.java | 4 +-
.../core/metasearch/impl/web/WebResult.java | 3 +-
.../core/metasearch/impl/web/json/JSONEngine.java | 3 +
.../metasearch/impl/web/regex/RegexEngine.java | 3 +
.../core/networkmanager/admin/NetworkAdmin.java | 2 +
.../admin/impl/NetworkAdminImpl.java | 280 +++--
.../impl/tcp/VirtualChannelSelectorImpl.java | 9 +-
.../messaging/bittorrent/BTMessageDecoder.java | 2 +-
.../bittorrent/ltep/LTMessageDecoder.java | 26 +-
.../azureus/core/rssgen/RSSGeneratorPlugin.java | 10 +-
.../core/speedmanager/impl/SpeedManagerImpl.java | 20 +-
.../impl/v1/SpeedManagerAlgorithmProviderV1.java | 6 +-
.../impl/v3/SpeedManagerAlgorithmProviderV3.java | 8 +-
.../core/subs/impl/SubscriptionManagerImpl.java | 14 +-
.../azureus/core/torrent/PlatformTorrentUtils.java | 74 +-
.../thread => util}/AEThreadMonitor.java | 2 +-
com/aelitis/azureus/core/util/CopyOnWriteList.java | 10 +
com/aelitis/azureus/core/util/DNSUtils.java | 70 +-
.../azureus/core/util/FeatureAvailability.java | 9 +
com/aelitis/azureus/core/util/Java15Utils.java | 90 +-
.../core/versioncheck/VersionCheckClient.java | 174 ++-
com/aelitis/azureus/jdk15/Java15Initialiser.java | 62 -
com/aelitis/azureus/jdk15/Java15UtilsImpl.java | 88 --
com/aelitis/azureus/plugins/dht/DHTPlugin.java | 4 +-
.../extseed/impl/ExternalSeedReaderImpl.java | 68 +-
.../ExternalSeedReaderFactoryGetRight.java | 51 +-
.../impl/getright/ExternalSeedReaderGetRight.java | 12 +-
.../webseed/ExternalSeedReaderFactoryWebSeed.java | 11 +
.../impl/webseed/ExternalSeedReaderWebSeed.java | 12 +-
.../azureus/plugins/magnet/MagnetPlugin.java | 282 ++++-
.../magnet/MagnetPluginProgressListener.java | 3 +
.../azureus/plugins/net/buddy/BuddyPlugin.java | 13 +-
.../plugins/tracker/dht/DHTTrackerPlugin.java | 7 +-
.../azureus/ui/skin/skin3_constants.properties | 14 -
.../azureus/ui/swt/browser/BrowserContext.java | 40 +-
.../swt/browser/listener/MetaSearchListener.java | 48 +-
.../ui/swt/browser/msg/MessageDispatcherSWT.java | 202 +--
.../ui/swt/columns/torrent/ColumnThumbAndName.java | 203 ++--
.../ui/swt/columns/utils/TableColumnCreatorV3.java | 16 -
.../azureus/ui/swt/content/SBC_RCMView.java | 2 +-
.../azureus/ui/swt/devices/DeviceManagerUI.java | 14 +-
.../azureus/ui/swt/devices/DevicesODFTUX.java | 77 +-
.../azureus/ui/swt/extlistener/StimulusRPC.java | 31 +-
.../azureus/ui/swt/shells/main/MainWindow.java | 196 +---
.../ui/swt/shells/main/UIFunctionsImpl.java | 166 +--
.../azureus/ui/swt/utils/TorrentUIUtilsV3.java | 8 +-
.../ui/swt/views/skin/MyTorrentsView_Big.java | 2 +-
.../ui/swt/views/skin/SBC_AdvancedView.java | 151 ---
.../azureus/ui/swt/views/skin/SBC_LibraryView.java | 10 +-
.../azureus/ui/swt/views/skin/sidebar/SideBar.java | 104 +-
.../ui/swt/views/skin/sidebar/SideBarEntrySWT.java | 14 +-
com/aelitis/azureus/util/ImportExportUtils.java | 29 +
.../azureus/util/InitialisationFunctions.java | 2 -
.../azureus/vivaldi/ver2/DeserializedPosition.java | 59 -
com/aelitis/azureus/vivaldi/ver2/IDWrapper.java | 62 -
.../azureus/vivaldi/ver2/InitialPosition.java | 45 -
.../azureus/vivaldi/ver2/LocalPosition.java | 42 -
.../azureus/vivaldi/ver2/RemotePosition.java | 54 -
.../azureus/vivaldi/ver2/StableLocalPosition.java | 15 -
.../azureus/vivaldi/ver2/SyrahPosition.java | 56 -
.../azureus/vivaldi/ver2/TransientTuple.java | 18 -
.../vivaldi/ver2/VivaldiV2PositionProvider.java | 465 -------
.../ver2/stats/SerializationController.java | 98 --
.../vivaldi/ver2/stats/StatsSerializer.java | 28 -
.../azureus/vivaldi/ver2/stats/V1Serializer.java | 33 -
.../azureus/vivaldi/ver2/stats/V1Statistics.java | 296 -----
.../vivaldi/ver2/stats/VivaldiStatistics.java | 16 -
com/aelitis/net/magneturi/MagnetURIHandler.java | 11 +
.../net/magneturi/MagnetURIHandlerListener.java | 1 +
.../MagnetURIHandlerProgressListener.java | 3 +
.../net/magneturi/impl/MagnetURIHandlerImpl.java | 103 ++-
edu/harvard/syrah/nc/ApplicationObserver.java | 33 -
edu/harvard/syrah/nc/Coordinate.java | 369 ------
edu/harvard/syrah/nc/EWMAStatistic.java | 49 -
edu/harvard/syrah/nc/License.txt | 125 --
edu/harvard/syrah/nc/ObserverList.java | 114 --
edu/harvard/syrah/nc/RemoteState.java | 199 ---
edu/harvard/syrah/nc/Vec.java | 219 ---
edu/harvard/syrah/nc/VivaldiClient.java | 1387 --------------------
edu/harvard/syrah/nc/WindowStatistic.java | 150 ---
.../core3/config/COConfigurationManager.java | 4 +-
.../core3/config/impl/ConfigurationDefaults.java | 4 +
.../core3/config/impl/TransferSpeedValidator.java | 70 +-
.../azureus2/core3/disk/DiskManagerFactory.java | 5 +-
.../azureus2/core3/disk/impl/DiskManagerImpl.java | 34 +-
.../core3/disk/impl/access/impl/DMReaderImpl.java | 13 +-
.../core3/download/impl/DownloadManagerImpl.java | 29 +-
.../impl/TorrentDownloaderImpl.java | 80 +-
.../core3/tracker/client/TRTrackerAnnouncer.java | 8 +-
.../client/impl/TRTrackerAnnouncerFactoryImpl.java | 17 +-
.../client/impl/TRTrackerAnnouncerImpl.java | 236 +++-
.../client/impl/TRTrackerAnnouncerMuxer.java | 238 ++++
.../client/impl/bt/TRTrackerBTAnnouncerImpl.java | 138 ++-
.../tracker/client/impl/bt/TrackerChecker.java | 2 +-
.../client/impl/dht/TRTrackerDHTAnnouncerImpl.java | 77 +-
.../impl/tcp/nonblocking/TRNonBlockingServer.java | 2 +-
.../core3/tracker/util/TRTrackerUtils.java | 3 +-
org/gudy/azureus2/core3/util/AEDiagnostics.java | 64 +-
org/gudy/azureus2/core3/util/Constants.java | 4 +-
org/gudy/azureus2/core3/util/FileUtil.java | 92 +-
org/gudy/azureus2/core3/util/TorrentUtils.java | 72 +-
org/gudy/azureus2/core3/util/UrlUtils.java | 141 +-
.../core3/util/protocol/magnet/Handler.java | 8 +-
.../util/protocol/magnet/MagnetConnection.java | 8 +-
...agnetConnection.java => MagnetConnection2.java} | 85 +-
.../azureus2/internat/MessagesBundle.properties | 52 +-
.../internat/MessagesBundle_ar_SA.properties | 38 +-
.../internat/MessagesBundle_bg_BG.properties | 104 --
.../internat/MessagesBundle_bs_BA.properties | 38 +-
.../internat/MessagesBundle_ca_AD.properties | 67 -
.../internat/MessagesBundle_cs_CZ.properties | 57 +-
.../internat/MessagesBundle_da_DK.properties | 75 +-
.../internat/MessagesBundle_de_DE.properties | 3 -
.../internat/MessagesBundle_el_GR.properties | 54 +-
.../internat/MessagesBundle_en_GB.properties | 50 +-
.../internat/MessagesBundle_es_ES.properties | 79 --
.../azureus2/internat/MessagesBundle_eu.properties | 58 +-
.../internat/MessagesBundle_fi_FI.properties | 35 +-
.../internat/MessagesBundle_fr_FR.properties | 55 -
.../internat/MessagesBundle_fy_NL.properties | 54 +-
.../internat/MessagesBundle_gl_ES.properties | 46 +-
.../internat/MessagesBundle_hu_HU.properties | 82 +--
.../internat/MessagesBundle_hy_AM.properties | 20 +
.../internat/MessagesBundle_in_ID.properties | 18 -
.../internat/MessagesBundle_it_IT.properties | 143 +--
.../internat/MessagesBundle_iw_IL.properties | 38 +-
.../internat/MessagesBundle_ja_JP.properties | 123 +--
.../internat/MessagesBundle_ka_GE.properties | 36 +-
.../internat/MessagesBundle_km_KH.properties | 19 +-
.../internat/MessagesBundle_ko_KR.properties | 71 -
.../internat/MessagesBundle_li_NL.properties | 135 +--
.../internat/MessagesBundle_lt_LT.properties | 29 +-
.../internat/MessagesBundle_mk_MK.properties | 30 +-
.../internat/MessagesBundle_ms_SG.properties | 40 +-
.../internat/MessagesBundle_nl_NL.properties | 98 +--
.../internat/MessagesBundle_pl_PL.properties | 97 --
.../internat/MessagesBundle_pt_BR.properties | 108 --
.../internat/MessagesBundle_pt_PT.properties | 59 +-
.../internat/MessagesBundle_ro_RO.properties | 351 ++----
.../internat/MessagesBundle_ru_RU.properties | 185 ---
.../internat/MessagesBundle_sk_SK.properties | 56 +-
.../internat/MessagesBundle_sl_SI.properties | 40 +-
.../azureus2/internat/MessagesBundle_sr.properties | 29 -
.../internat/MessagesBundle_sv_SE.properties | 47 -
.../internat/MessagesBundle_th_TH.properties | 40 +-
.../internat/MessagesBundle_tr_TR.properties | 70 +-
.../internat/MessagesBundle_uk_UA.properties | 115 --
.../internat/MessagesBundle_zh_CN.properties | 150 ---
.../internat/MessagesBundle_zh_TW.properties | 44 +-
.../platform/unix/PlatformManagerUnixPlugin.java | 21 +-
.../platform/win32/access/impl/Release/aereg64.dll | Bin 85504 -> 0 bytes
org/gudy/azureus2/plugins/peers/PeerStats.java | 7 +
.../plugins/ui/sidebar/SideBarDropListener.java | 7 +-
.../local/peers/PeerForeignNetworkConnection.java | 9 +-
.../pluginsimpl/local/peers/PeerStatsImpl.java | 13 +
.../pluginsimpl/local/utils/xml/rss/RSSUtils.java | 19 +-
org/gudy/azureus2/ui/console/commands/Hack.java | 10 +-
org/gudy/azureus2/ui/console/commands/Show.java | 2 +-
org/gudy/azureus2/ui/swt/OpenTorrentWindow.java | 69 +-
org/gudy/azureus2/ui/swt/PasswordWindow.java | 16 +-
org/gudy/azureus2/ui/swt/StartServer.java | 55 +-
org/gudy/azureus2/ui/swt/TorrentUtil.java | 51 +-
org/gudy/azureus2/ui/swt/Utils.java | 5 +-
.../azureus2/ui/swt/mainwindow/MainStatusBar.java | 55 +-
.../azureus2/ui/swt/mainwindow/MenuFactory.java | 18 +-
org/gudy/azureus2/ui/swt/mainwindow/SWTThread.java | 3 +
.../ui/swt/mainwindow/SelectableSpeedMenu.java | 2 +-
.../ui/swt/maketorrent/MultiTrackerEditor.java | 2 +-
org/gudy/azureus2/ui/swt/osx/CocoaUIEnhancer.java | 24 +-
.../azureus2/ui/swt/progress/ProgressReporter.java | 8 +-
.../ui/swt/progress/ProgressReporterPanel.java | 1 +
org/gudy/azureus2/ui/swt/views/GeneralView.java | 2 +-
org/gudy/azureus2/ui/swt/views/ManagerView.java | 62 +-
.../azureus2/ui/swt/views/TorrentInfoView.java | 2 +-
.../ui/swt/views/clientstats/ClientStatsView.java | 89 ++-
...olumnCS_Sent.java => ColumnCS_ReceivedPer.java} | 8 +-
.../ConfigSectionConnectionAdvanced.java | 3 +-
.../azureus2/ui/swt/views/stats/StatsView.java | 2 +-
.../ui/swt/views/stats/TrackerStatsView.java | 2 +-
.../ui/swt/views/table/impl/TableViewSWTImpl.java | 46 +-
.../swt/views/table/utils/TableColumnManager.java | 34 +-
.../azureus2/ui/swt/win32/Win32UIEnhancer.java | 6 +-
org/gudy/azureus2/ui/webplugin/WebPlugin.java | 187 ++-
206 files changed, 4828 insertions(+), 8598 deletions(-)
diff --git a/ChangeLog.txt b/ChangeLog.txt
index 9e71e84..0273f61 100644
--- a/ChangeLog.txt
+++ b/ChangeLog.txt
@@ -1,6 +1,53 @@
VUZE CHANGELOG
-----------------
+2009.12.10 | Vuze 4.3.0.6
+
+BUGFIX: Core | Fixed bug where compact file types could lead to spurious 'file length too large' errors [Parg]
+
+
+
+2009.11.20 | Vuze 4.3.0.4
+
+BUGFIX: UI | Prevent main window from popping up when adding a torrent and "Add Torrent Silently" set [TuxPaper]
+BUGFIX: UI | Ensure that the correct progress reports are passed to listeners [Parg]
+BUGFIX: UI | Fixed bug whereby the destruction of the torrent-open window was cancelling torrent download dialogs [Parg]
+BUGFIX: UI | (OSX) Fixed bug where scrollers on some mice would cause table to blank [TuxPaper]
+BUGFIX: UIvz | Handle magnet links within internal browser [TuxPaper]
+BUGFIX: Plug | Improved the fallback lookup service by passing the all params [Parg]
+BUGFIX: Plug | Verify that downloaded torrents are valid before passing to caller [Parg]
+
+
+
+2009.11.19 | Vuze 4.3.0.2
+
+FEATURE: Core | Support per-url config for http seeds and max_speed setting [Parg]
+FEATURE: Plug | Start of a fallback magnet lookup service [Parg]
+FEATURE: UI | Clicking on dock icon always opens main window [TuxPaper]
+
+CHANGE: Core | Parse hex-encoded magnet URIs too [The 8472]
+CHANGE: Core | Immediate-close option for tracker socket connections [Parg]
+CHANGE: Core | Return IP address instead of DNS names for external seeds [Parg]
+CHANGE: Core | Support more non-conformant RSS feed dates [Parg]
+CHANGE: Core | Auto-speed bias towards min ping times rather than pure average [Parg]
+
+BUGFIX: Core | Reverted socket handling to initial 1.6 fix status to fix with network binding/stall problems [Parg]
+BUGFIX: Core | Added option to disable all IPv6 support and defaulted to 'disable' on OSX as some users experiencing crash when enabled [Parg]
+BUGFIX: Plug | Don't cause all dht torrents to perform an 'announce' when 'pause-all' selected [Parg]
+BUGFIX: Plug | Webplugin config section override was using the wrong variable prefix [Parg]
+BUGFIX: UI | Fixed name column sort [TuxPaper]
+BUGFIX: UI | (OSX) Fixed opening .vuze files when client isn't running [TuxPaper]
+BUGFIX: UI | Fixed table view not loading (showing gray area) sometimes [TuxPaper]
+BUGFIX: UI | (Windows) "Open Containing Folder" in default "folder association" app [TuxPaper]
+BUGFIX: UI | (*nix) Fixed name column blanking [TuxPaper]
+BUGFIX: UI | (OSX) Fixed Password option hanging UI [TuxPaper]
+BUGFIX: UI | Fixed sidebar font sizes (mostly for *nix) [TuxPaper]
+BUGFIX: UI | (OSX) Opening .torrent file when "Add Silently" is enable should no longer activate the main window [TuxPaper]
+BUGFIX: UI | Fix losing cursor indication on Sashes (and other widgets) [TuxPaper]
+BUGFIX: UI | Sidebar now accepts dropping torrents [TuxPaper]
+
+
+
2009.11.11 | Vuze 4.3.0.0
FEATURE: Core | Added support for UPnP based offline-downloader services [Parg]
diff --git a/com/aelitis/azureus/activities/VuzeActivitiesManager.java b/com/aelitis/azureus/activities/VuzeActivitiesManager.java
index 1a0f2ec..a215d06 100644
--- a/com/aelitis/azureus/activities/VuzeActivitiesManager.java
+++ b/com/aelitis/azureus/activities/VuzeActivitiesManager.java
@@ -18,8 +18,11 @@
package com.aelitis.azureus.activities;
+import java.net.HttpURLConnection;
+import java.net.URL;
import java.util.*;
+import org.gudy.azureus2.core3.config.COConfigurationManager;
import org.gudy.azureus2.core3.util.*;
import com.aelitis.azureus.core.AzureusCore;
@@ -167,6 +170,71 @@ public class VuzeActivitiesManager
}
}
});
+
+ final String id_str = cn.getServiceURL( ContentNetwork.SERVICE_IDENTIFY );
+
+ if ( id_str != null && id_str.length() > 0 ){
+
+ try{
+ SimpleTimer.addPeriodicEvent(
+ "act:id",
+ 23*60*60*1000,
+ new TimerEventPerformer()
+ {
+ public void
+ perform(
+ TimerEvent event )
+ {
+ identify( cn, id_str );
+ }
+ });
+
+ identify( cn, id_str );
+
+ }catch( Throwable e ){
+
+ Debug.out( e );
+ }
+ }
+ }
+
+ private static void
+ identify(
+ ContentNetwork cn,
+ String str )
+ {
+ try{
+ URL url = new URL( str );
+
+ HttpURLConnection con = (HttpURLConnection)url.openConnection();
+
+ String key = "cn." + cn.getID() + ".identify.cookie";
+
+ String cookie = COConfigurationManager.getStringParameter( key, null );
+
+ if ( cookie != null ){
+
+ con.setRequestProperty( "Cookie", cookie + ";" );
+ }
+
+ con.setRequestProperty( "Connection", "close" );
+
+ con.getResponseCode();
+
+ cookie = con.getHeaderField( "Set-Cookie" );
+
+ if ( cookie != null ){
+
+ String[] bits = cookie.split( ";" );
+
+ if ( bits.length > 0 && bits[0].length() > 0 ){
+
+ COConfigurationManager.setParameter( key, bits[0] );
+ }
+ }
+ }catch( Throwable e ){
+
+ }
}
/**
diff --git a/com/aelitis/azureus/core/cnetwork/ContentNetwork.java b/com/aelitis/azureus/core/cnetwork/ContentNetwork.java
index f830c46..fac30af 100644
--- a/com/aelitis/azureus/core/cnetwork/ContentNetwork.java
+++ b/com/aelitis/azureus/core/cnetwork/ContentNetwork.java
@@ -82,7 +82,8 @@ ContentNetwork
public static final int SERVICE_POSTPLAYBACK = 33;
public static final int SERVICE_SIDEBAR_CLOSE = 34;
public static final int SERVICE_ABOUT = 35;
-
+ public static final int SERVICE_IDENTIFY = 36;
+
// content network properties
public static final int PROPERTY_SITE_HOST = 1; // String
diff --git a/com/aelitis/azureus/core/cnetwork/impl/ContentNetworkVuzeGeneric.java b/com/aelitis/azureus/core/cnetwork/impl/ContentNetworkVuzeGeneric.java
index 89d104d..35d7aa2 100644
--- a/com/aelitis/azureus/core/cnetwork/impl/ContentNetworkVuzeGeneric.java
+++ b/com/aelitis/azureus/core/cnetwork/impl/ContentNetworkVuzeGeneric.java
@@ -224,6 +224,7 @@ ContentNetworkVuzeGeneric
addService( SERVICE_PREPLAYBACK, URL_PREFIX + "emp/load/" );
addService( SERVICE_POSTPLAYBACK, URL_PREFIX + "emp/recommend/" );
addService( SERVICE_SIDEBAR_CLOSE, URL_PREFIX + "sidebar.close" );
+ addService( SERVICE_IDENTIFY, "http://pixel.quantserve.com/pixel/p-64Ix1G_SXwOa-.gif" );
if ( URL_RELAY_RPC != null ){
diff --git a/com/aelitis/azureus/core/content/RelatedContentManager.java b/com/aelitis/azureus/core/content/RelatedContentManager.java
index 841b9d5..2889283 100644
--- a/com/aelitis/azureus/core/content/RelatedContentManager.java
+++ b/com/aelitis/azureus/core/content/RelatedContentManager.java
@@ -55,6 +55,7 @@ import org.gudy.azureus2.core3.util.SystemTime;
import org.gudy.azureus2.core3.util.TimerEvent;
import org.gudy.azureus2.core3.util.TimerEventPerformer;
import org.gudy.azureus2.core3.util.TorrentUtils;
+import org.gudy.azureus2.core3.util.UrlUtils;
import org.gudy.azureus2.plugins.PluginInterface;
import org.gudy.azureus2.plugins.PluginListener;
import org.gudy.azureus2.plugins.ddb.DistributedDatabase;
@@ -105,6 +106,8 @@ RelatedContentManager
private static final int MAX_TITLE_LENGTH = 80;
private static final int MAX_CONCURRENT_PUBLISH = 2;
private static final int MAX_REMOTE_SEARCH_RESULTS = 30;
+ private static final int MAX_REMOTE_SEARCH_CONTACTS = 50;
+ private static final int MAX_REMOTE_SEARCH_MILLIS = 25*1000;
private static final int TEMPORARY_SPACE_DELTA = 50;
@@ -2253,14 +2256,21 @@ RelatedContentManager
public void
run()
{
- final Set<String> titles_or_hashes = new HashSet<String>();
+ final Set<String> hashes = new HashSet<String>();
try{
List<RelatedContent> matches = matchContent( term );
for ( final RelatedContent c: matches ){
- titles_or_hashes.add( c.getHash()==null?c.getTitle():Base32.encode(c.getHash()));
+ final byte[] hash = c.getHash();
+
+ if ( hash == null ){
+
+ continue;
+ }
+
+ hashes.add( Base32.encode( hash ));
SearchResult result =
new SearchResult()
@@ -2277,6 +2287,10 @@ RelatedContentManager
return( c.getSize());
+ }else if ( property_name == SearchResult.PR_HASH ){
+
+ return( hash );
+
}else if ( property_name == SearchResult.PR_RANK ){
// this rank isn't that accurate, scale down
@@ -2319,7 +2333,7 @@ RelatedContentManager
if ( hash != null ){
- return( TorrentUtils.getMagnetURI( hash ));
+ return( UrlUtils.getMagnetURI( hash ));
}
}
@@ -2332,8 +2346,6 @@ RelatedContentManager
}finally{
try{
- int max_contacts = 20;
-
DHT[] dhts = dht_plugin.getDHTs();
Set<InetSocketAddress> addresses = new HashSet<InetSocketAddress>();
@@ -2351,7 +2363,7 @@ RelatedContentManager
}
}
- if ( addresses.size() < max_contacts ){
+ if ( addresses.size() < MAX_REMOTE_SEARCH_CONTACTS ){
for ( DHT dht: dhts ){
@@ -2363,14 +2375,14 @@ RelatedContentManager
addresses.add( c.getAddress());
- if ( addresses.size() >= max_contacts ){
+ if ( addresses.size() >= MAX_REMOTE_SEARCH_CONTACTS ){
break;
}
}
}
- if ( addresses.size() >= max_contacts ){
+ if ( addresses.size() >= MAX_REMOTE_SEARCH_CONTACTS ){
break;
}
@@ -2383,7 +2395,7 @@ RelatedContentManager
List<DistributedDatabaseContact> ddb_contacts = new ArrayList<DistributedDatabaseContact>();
- for (int i=0;i<Math.min( list.size(), max_contacts );i++){
+ for (int i=0;i<Math.min( list.size(), MAX_REMOTE_SEARCH_CONTACTS );i++){
try{
ddb_contacts.add( ddb.importContact( list.get(i), DHTTransportUDP.PROTOCOL_VERSION_REPLICATION_CONTROL ));
@@ -2393,7 +2405,7 @@ RelatedContentManager
}
long start = SystemTime.getMonotonousTime();
- long max = 25*1000;
+ long max = MAX_REMOTE_SEARCH_MILLIS;
final AESemaphore sem = new AESemaphore( "RCM:rems" );
@@ -2411,7 +2423,7 @@ RelatedContentManager
run()
{
try{
- sendRemoteSearch( si, titles_or_hashes, c, term, observer );
+ sendRemoteSearch( si, hashes, c, term, observer );
}finally{
@@ -2438,10 +2450,10 @@ RelatedContentManager
}
}
- if ( i > 5 ){
+ if ( i > 10 ){
try{
- Thread.sleep( 500 );
+ Thread.sleep( 250 );
}catch( Throwable e ){
}
@@ -2450,7 +2462,7 @@ RelatedContentManager
for (int i=0;i<sent;i++){
- if ( done[0] > sent*2/3 ){
+ if ( done[0] > sent*4/5 ){
break;
}
@@ -2467,7 +2479,7 @@ RelatedContentManager
}
}
}finally{
-
+
observer.complete();
}
}
@@ -2481,7 +2493,7 @@ RelatedContentManager
protected void
sendRemoteSearch(
SearchInstance si,
- Set<String> titles_or_hashes,
+ Set<String> hashes,
DistributedDatabaseContact contact,
String term,
SearchObserver observer )
@@ -2534,16 +2546,21 @@ RelatedContentManager
final String title = ImportExportUtils.importString( map, "n" );
- byte[] hash = (byte[])map.get( "h" );
+ final byte[] hash = (byte[])map.get( "h" );
+
+ if ( hash == null ){
+
+ continue;
+ }
- String title_or_hash = hash==null?title:Base32.encode( hash );
+ String hash_str = Base32.encode( hash );
- if ( titles_or_hashes.contains( title_or_hash )){
+ if ( hashes.contains( hash_str )){
continue;
}
- titles_or_hashes.add( title_or_hash );
+ hashes.add( hash_str );
SearchResult result =
new SearchResult()
@@ -2561,6 +2578,10 @@ RelatedContentManager
return( ImportExportUtils.importLong( map, "s" ));
+ }else if ( property_name == SearchResult.PR_HASH ){
+
+ return( hash );
+
}else if ( property_name == SearchResult.PR_RANK ){
return( ImportExportUtils.importLong( map, "r" ) / 4 );
@@ -2603,7 +2624,7 @@ RelatedContentManager
if ( hash != null ){
- return( TorrentUtils.getMagnetURI( hash ));
+ return( UrlUtils.getMagnetURI( hash ));
}
}
}catch( Throwable e ){
diff --git a/com/aelitis/azureus/core/devices/DeviceOfflineDownloader.java b/com/aelitis/azureus/core/devices/DeviceOfflineDownloader.java
index f1c1a0f..ae64da0 100644
--- a/com/aelitis/azureus/core/devices/DeviceOfflineDownloader.java
+++ b/com/aelitis/azureus/core/devices/DeviceOfflineDownloader.java
@@ -42,7 +42,8 @@ DeviceOfflineDownloader
getManufacturer();
public long
- getSpaceAvailable()
+ getSpaceAvailable(
+ boolean force )
throws DeviceManagerException;
diff --git a/com/aelitis/azureus/core/devices/impl/DeviceOfflineDownloaderImpl.java b/com/aelitis/azureus/core/devices/impl/DeviceOfflineDownloaderImpl.java
index da569e9..fd0451d 100644
--- a/com/aelitis/azureus/core/devices/impl/DeviceOfflineDownloaderImpl.java
+++ b/com/aelitis/azureus/core/devices/impl/DeviceOfflineDownloaderImpl.java
@@ -1299,11 +1299,12 @@ DeviceOfflineDownloaderImpl
}
public long
- getSpaceAvailable()
+ getSpaceAvailable(
+ boolean force )
throws DeviceManagerException
{
- if ( space_on_device >= 0 ){
+ if ( space_on_device >= 0 && !force ){
return( space_on_device );
}
diff --git a/com/aelitis/azureus/core/dht/transport/udp/impl/DHTTransportUDPImpl.java b/com/aelitis/azureus/core/dht/transport/udp/impl/DHTTransportUDPImpl.java
index 46c3e61..a013b8e 100644
--- a/com/aelitis/azureus/core/dht/transport/udp/impl/DHTTransportUDPImpl.java
+++ b/com/aelitis/azureus/core/dht/transport/udp/impl/DHTTransportUDPImpl.java
@@ -162,7 +162,7 @@ DHTTransportUDPImpl
}
};
- private static final int ROUTABLE_CONTACT_HISTORY_MAX = 64;
+ private static final int ROUTABLE_CONTACT_HISTORY_MAX = 128;
private Map<InetSocketAddress,DHTTransportContact> routable_contact_history =
new LinkedHashMap<InetSocketAddress,DHTTransportContact>(ROUTABLE_CONTACT_HISTORY_MAX,0.75f,true)
diff --git a/com/aelitis/azureus/core/diskmanager/file/impl/FMFileAccessCompact.java b/com/aelitis/azureus/core/diskmanager/file/impl/FMFileAccessCompact.java
index fcfdacf..d2bde8c 100644
--- a/com/aelitis/azureus/core/diskmanager/file/impl/FMFileAccessCompact.java
+++ b/com/aelitis/azureus/core/diskmanager/file/impl/FMFileAccessCompact.java
@@ -29,6 +29,7 @@ import java.util.Map;
import org.gudy.azureus2.core3.torrent.TOTorrent;
import org.gudy.azureus2.core3.torrent.TOTorrentFile;
+import org.gudy.azureus2.core3.util.Debug;
import org.gudy.azureus2.core3.util.DirectByteBuffer;
import org.gudy.azureus2.core3.util.FileUtil;
@@ -194,11 +195,12 @@ FMFileAccessCompact
throws FMFileManagerException
{
- if(length != current_length)
+ if ( length != current_length ){
+
+ current_length = length;
+
write_required = true;
-
- current_length = length;
-
+ }
}
protected void
@@ -317,7 +319,14 @@ FMFileAccessCompact
read( raf, buffer, position );
- position += len;
+ int rem = buffers[i].remaining( SS );
+
+ position += len - rem;
+
+ if ( rem > 0 ){
+
+ break;
+ }
}
if ( position > current_length ){
diff --git a/com/aelitis/azureus/core/download/EnhancedDownloadManager.java b/com/aelitis/azureus/core/download/EnhancedDownloadManager.java
index b044f68..dc4955c 100644
--- a/com/aelitis/azureus/core/download/EnhancedDownloadManager.java
+++ b/com/aelitis/azureus/core/download/EnhancedDownloadManager.java
@@ -257,7 +257,11 @@ EnhancedDownloadManager
Map meta_data = PlatformTorrentUtils.getFileMetaData( torrent );
- Map files_info = meta_data==null?null:(Map)meta_data.get( "files" );
+ // dunno why but I have a user with an ArrayList being returned here...
+
+ Object o_files_info = meta_data==null?null:meta_data.get( "files" );
+
+ Map files_info = o_files_info instanceof Map?(Map)o_files_info:null;
long offset = 0;
diff --git a/com/aelitis/azureus/core/impl/AzureusCoreImpl.java b/com/aelitis/azureus/core/impl/AzureusCoreImpl.java
index 151940a..e0b4622 100644
--- a/com/aelitis/azureus/core/impl/AzureusCoreImpl.java
+++ b/com/aelitis/azureus/core/impl/AzureusCoreImpl.java
@@ -901,9 +901,8 @@ AzureusCoreImpl
protected void
checkConfig()
{
- String key = TransferSpeedValidator.getActiveAutoUploadParameter( global_manager );
-
- speed_manager.setEnabled( COConfigurationManager.getBooleanParameter( key ));
+
+ speed_manager.setEnabled( TransferSpeedValidator.isAutoSpeedActive(global_manager) );
}
});
diff --git a/com/aelitis/azureus/core/lws/LWSDiskManagerState.java b/com/aelitis/azureus/core/lws/LWSDiskManagerState.java
index b0964ec..dc69a7e 100644
--- a/com/aelitis/azureus/core/lws/LWSDiskManagerState.java
+++ b/com/aelitis/azureus/core/lws/LWSDiskManagerState.java
@@ -40,6 +40,8 @@ public class
LWSDiskManagerState
implements DownloadManagerState
{
+ private long flags = FLAG_LOW_NOISE | FLAG_DISABLE_AUTO_FILE_MOVE;
+
protected
LWSDiskManagerState()
{
@@ -115,19 +117,20 @@ LWSDiskManagerState
long flag,
boolean set )
{
+ flags |= flag;
}
public boolean
getFlag(
long flag )
{
- return( false );
+ return(( flags & flag ) != 0 );
}
public long
getFlags()
{
- return 0;
+ return( flags );
}
public boolean
diff --git a/com/aelitis/azureus/core/lws/LightWeightSeedManager.java b/com/aelitis/azureus/core/lws/LightWeightSeedManager.java
index 278b63c..58c6fe0 100644
--- a/com/aelitis/azureus/core/lws/LightWeightSeedManager.java
+++ b/com/aelitis/azureus/core/lws/LightWeightSeedManager.java
@@ -38,6 +38,7 @@ import org.gudy.azureus2.core3.util.TimerEvent;
import org.gudy.azureus2.core3.util.TimerEventPerformer;
import org.gudy.azureus2.core3.util.TimerEventPeriodic;
import org.gudy.azureus2.core3.util.TorrentUtils;
+import org.gudy.azureus2.core3.util.UrlUtils;
import org.gudy.azureus2.plugins.PluginInterface;
import org.gudy.azureus2.plugins.download.Download;
import org.gudy.azureus2.pluginsimpl.local.ddb.DDBaseImpl;
@@ -209,7 +210,7 @@ LightWeightSeedManager
});
}
- log( "Added LWS: " + name + ", " + TorrentUtils.getMagnetURI( hash.getBytes()));
+ log( "Added LWS: " + name + ", " + UrlUtils.getMagnetURI( hash.getBytes()));
}
lws.start();
@@ -270,7 +271,7 @@ LightWeightSeedManager
}
}
- log( "Added LWS: " + lws.getName() + ", " + TorrentUtils.getMagnetURI( lws.getHash().getBytes()));
+ log( "Added LWS: " + lws.getName() + ", " + UrlUtils.getMagnetURI( lws.getHash().getBytes()));
}
protected void
diff --git a/com/aelitis/azureus/core/messenger/browser/BrowserMessage.java b/com/aelitis/azureus/core/messenger/browser/BrowserMessage.java
index c02d987..93e81c8 100644
--- a/com/aelitis/azureus/core/messenger/browser/BrowserMessage.java
+++ b/com/aelitis/azureus/core/messenger/browser/BrowserMessage.java
@@ -30,7 +30,6 @@ import org.gudy.azureus2.core3.util.Debug;
import com.aelitis.azureus.core.messenger.browser.listeners.BrowserMessageListener;
import com.aelitis.azureus.core.messenger.browser.listeners.MessageCompletionListener;
import com.aelitis.azureus.util.ConstantsVuze;
-import com.aelitis.azureus.util.JSONUtils;
/**
* Holds a message being dispatched to a {@link BrowserMessageListener}.
@@ -65,21 +64,13 @@ public class BrowserMessage
}
}
- static int seqFake = 1;
-
- private int sequence;
-
private String listenerId;
private String operationId;
private String params;
- private int paramType;
-
- private Object decodedParams;
-
- private String sFullMessage;
+ private Map decodedParams;
private ArrayList completionListeners = new ArrayList();
@@ -89,13 +80,11 @@ public class BrowserMessage
private String referer;
- public BrowserMessage(String sMsg) {
- if (sMsg == null) {
- throw new IllegalArgumentException("event must be non-null");
- }
-
- this.sFullMessage = sMsg;
- parse();
+
+ public BrowserMessage(String listenerId, String operationId, Map<?, ?> params) {
+ this.listenerId = listenerId;
+ this.operationId = operationId;
+ decodedParams = params;
}
public void addCompletionListener(MessageCompletionListener l) {
@@ -144,22 +133,8 @@ public class BrowserMessage
}
}
- public List getDecodedArray() {
- if (!isParamArray()) {
- throw new IllegalStateException("Decoded parameter is not a List");
- }
- return (List) decodedParams;
- }
-
public Map getDecodedMap() {
- if (!isParamObject()) {
- throw new IllegalStateException("Decoded parameter is not a Map");
- }
- return (Map) decodedParams;
- }
-
- public String getFullMessage() {
- return sFullMessage;
+ return decodedParams == null ? Collections.EMPTY_MAP : decodedParams;
}
public String getListenerId() {
@@ -170,129 +145,10 @@ public class BrowserMessage
return operationId;
}
- public String getParams() {
- return params;
- }
-
public String getReferer() {
return referer;
}
- /*
- public StatusTextEvent getMessage( ) {
- return event;
- }
-
-
- public Browser getBrowser ( ) {
- return (Browser) event.widget;
- }
-
- public Object getBrowserData ( String key ) {
- return getBrowser().getData(key);
- }
-
- public void setBrowserData ( String key , Object value ) {
- getBrowser().setData(key, value);
- }
-
- public void executeInBrowser ( String javascript ) {
- getBrowser().execute(javascript);
- }
- */
- public int getSequence() {
- return sequence;
- }
-
- public boolean isParamArray() {
- return paramType == ARRAY_PARAM;
- }
-
- public boolean isParamObject() {
- return paramType == OBJECT_PARAM;
- }
-
- /**
- * Parses the full message into its component parts.
- *
- * @throws IllegalArgumentException
- * if the message cannot be parsed
- */
- protected void parse() {
- String text = sFullMessage;
-
- // DJH: StringTokenizer was not used so that listeners
- // could define their message format
- int delimSeqNum = text.indexOf(MESSAGE_DELIM);
- if (delimSeqNum == -1) {
- throw new IllegalArgumentException("Message has no delimeters: " + text);
- }
- if (delimSeqNum == text.length() - 1) {
- throw new IllegalArgumentException("Message has no sequence number: "
- + text);
- }
-
- int delimListener = text.indexOf(MESSAGE_DELIM, delimSeqNum + 1);
- if (delimListener == -1 || delimListener == text.length() - 1) {
- throw new IllegalArgumentException("Message has no listener ID: " + text);
- }
- try {
- sequence = Integer.parseInt(text.substring(delimSeqNum + 1, delimListener));
- } catch (NumberFormatException e) {
- System.err.println("Plese put the throw back in once souk fixes the seq # bug");
- sequence = seqFake++;
- //throw new IllegalArgumentException("Message has no sequence number: " + text);
- }
-
- int delimOperation = text.indexOf(MESSAGE_DELIM, delimListener + 1);
- if (delimOperation == -1 || delimOperation == text.length() - 1) {
- // listener ID without operation
- throw new IllegalArgumentException("Message has no operation ID: " + text);
- }
-
- listenerId = text.substring(delimListener + 1, delimOperation);
-
- int delimParams = text.indexOf(MESSAGE_DELIM, delimOperation + 1);
- if (delimParams == -1) {
- // operation without parameters
- operationId = text.substring(delimOperation + 1);
- } else if (delimParams == text.length() - 1) {
- // operation without parameters
- operationId = text.substring(delimOperation + 1, delimParams);
- params = null;
- paramType = NO_PARAM;
- decodedParams = null;
- } else {
- // operation with parameters
- operationId = text.substring(delimOperation + 1, delimParams);
- params = text.substring(delimParams + 1);
- char leading = params.charAt(0);
- try {
- switch (leading) {
- case '{':
- paramType = OBJECT_PARAM;
- decodedParams = JSONUtils.decodeJSON(params);
- break;
-
- case '[':
- paramType = ARRAY_PARAM;
- Map decodeJSON = JSONUtils.decodeJSON(params);
- if (decodeJSON != null) {
- decodedParams = decodeJSON.get("value");
- } else {
- decodedParams = null;
- }
- break;
- }
- } catch (Exception e) {
- decodedParams = null;
- }
- if (decodedParams == null) {
- paramType = NO_PARAM;
- }
- }
- }
-
public void removeCompletionListener(MessageCompletionListener l) {
completionListeners.remove(l);
}
@@ -306,8 +162,8 @@ public class BrowserMessage
}
public String toString() {
- return "[" + sequence + "] " + listenerId + "." + operationId + "("
- + params + ")";
+ return listenerId + "." + operationId + "("
+ + (params == null ? decodedParams : params) + ")";
}
private void triggerCompletionListeners(boolean success, Object data) {
diff --git a/com/aelitis/azureus/core/messenger/browser/BrowserMessageDispatcher.java b/com/aelitis/azureus/core/messenger/browser/BrowserMessageDispatcher.java
index 4ece5b3..5937268 100644
--- a/com/aelitis/azureus/core/messenger/browser/BrowserMessageDispatcher.java
+++ b/com/aelitis/azureus/core/messenger/browser/BrowserMessageDispatcher.java
@@ -58,26 +58,6 @@ public interface BrowserMessageDispatcher
public abstract BrowserMessageListener getListener(String id);
/**
- * Handles operations intended for the dispatcher.
- *
- * @param message holds all message information
- */
- public abstract void handleMessage(BrowserMessage message);
-
- /**
- * Determines whether or not the given sequence number is still valid
- * for the given {@link org.eclipse.swt.browser.Browser}. If the number is valid, it is stored
- * as the last seen sequence number.
- *
- * @param browser {@link org.eclipse.swt.browser.Browser} to test
- * @param sequence the sequence number from an incoming message
- *
- * @return <code>true</code> if the sequence number is valid
- * (greater than the last seen sequence number); <code>false</code> otherwise
- */
- public abstract boolean isValidSequence(BrowserMessage message);
-
- /**
* Deregisters the listener with the given ID.
*
* @param id unique identifier of the listener to be removed
@@ -90,11 +70,4 @@ public interface BrowserMessageDispatcher
* @param id unique identifier of the listener to be removed
*/
void removeListener(String id);
-
- /**
- * Resets the sequence number for the given {@link org.eclipse.swt.browser.Browser} to 0.
- *
- * @param browser {@link org.eclipse.swt.browser.Browser} to reset
- */
- public void resetSequence();
}
\ No newline at end of file
diff --git a/com/aelitis/azureus/core/messenger/config/PlatformMetaDataMessenger.java b/com/aelitis/azureus/core/messenger/config/PlatformMetaDataMessenger.java
new file mode 100644
index 0000000..7f9d81c
--- /dev/null
+++ b/com/aelitis/azureus/core/messenger/config/PlatformMetaDataMessenger.java
@@ -0,0 +1,336 @@
+/*
+ * Created on December 4, 2009
+ * Created by Olivier Chalouhi
+ *
+ * Copyright 2008 Vuze, Inc. All rights reserved.
+ *
+ * This program is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation; version 2 of the License only.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307, USA.
+ */
+
+
+package com.aelitis.azureus.core.messenger.config;
+
+import java.util.*;
+
+import com.aelitis.azureus.core.messenger.PlatformMessengerException;
+
+public class
+PlatformMetaDataMessenger
+{
+
+ private static final PlatformMessengerConfig dispatcher =
+ new PlatformMessengerConfig( "metadata", false );
+
+ private static final String OP_LOOKUP = "lookup";
+ private static final String OP_SEARCH = "search";
+ private static final String OP_SUBMIT = "submit";
+
+
+ public static Association
+ getAssociation(
+ String hash)
+
+ throws PlatformMessengerException
+ {
+ Map reply = dispatcher.syncInvoke( OP_LOOKUP, getParameter( hash ) );
+
+ Association assoc = getAssociation( reply );
+
+ if ( assoc == null ){
+
+ throw( new PlatformMessengerException( "Invalid reply: " + reply ));
+ }
+
+ return assoc;
+ }
+
+ private static Association getAssociation(Map reply) {
+ try {
+ Map result = (Map) reply.get("result");
+ return getAssociationFromMap(result);
+ } catch (Exception e) {
+ e.printStackTrace();
+ return null;
+ }
+ }
+
+ private static Association getAssociationFromMap(Map assoc) {
+ try {
+ String title = (String) assoc.get("title");
+ String db = (String) assoc.get("db");
+ String db_id = (String) assoc.get("db_id");
+ String hash = (String) assoc.get("hash");
+ String type = (String) assoc.get("type");
+
+ if(type == null) {
+ EmptyAssociation result = new EmptyAssociation();
+ result.hash = hash;
+ return result;
+ }
+
+ if("movie".equals(type)) {
+ String quality = (String) assoc.get("quality");
+ String language = (String) assoc.get("language");
+ MovieAssociation association = new MovieAssociation();
+ association.db = db;
+ association.db_id = db_id;
+ association.title = title;
+ association.quality = VideoQuality.fromString(quality);
+ association.language = new Locale(language);
+ association.hash = hash;
+ return association;
+ }
+ if("tv".equals(type)) {
+ String quality = (String) assoc.get("quality");
+ String language = (String) assoc.get("language");
+ TvShowAssociation association = new TvShowAssociation();
+ association.db = db;
+ association.db_id = db_id;
+ association.title = title;
+ association.quality = VideoQuality.fromString(quality);
+ association.language = new Locale(language);
+ association.hash = hash;
+ return association;
+ }
+ if("music".equals(type)) {
+ String quality = (String) assoc.get("quality");
+ MusicAssociation association = new MusicAssociation();
+ association.db = db;
+ association.db_id = db_id;
+ association.title = title;
+ association.quality = AudioQuality.fromString(quality);
+ association.hash = hash;
+ return association;
+ }
+
+
+ return null;
+
+ } catch (Exception e) {
+ e.printStackTrace();
+ return null;
+ }
+ }
+
+ private static Map<String,Association> getAssociations(Map reply) {
+ try {
+ Map<String,Map> result = (Map<String,Map>) reply.get("results");
+ Map<String,Association> results = new HashMap<String, Association>();
+ for(String key : result.keySet()) {
+ results.put(key, getAssociationFromMap(result.get(key)));
+ }
+ return results;
+ } catch (Exception e) {
+ e.printStackTrace();
+ return new HashMap<String,Association>();
+ }
+ }
+
+ public static Map<String,Association>
+ getAssociations(
+ String[] hashes )
+
+ throws PlatformMessengerException
+ {
+ Map<String,Association> result = new HashMap<String, Association>();
+ if( hashes.length == 0 ){
+
+ return result;
+ }
+
+
+ Map reply = dispatcher.syncInvoke( OP_LOOKUP, getParameters(hashes) );
+
+ return( getAssociations( reply ));
+ }
+
+ public static void
+ addSubmission(Association assoc)
+
+ throws PlatformMessengerException
+ {
+ Map<String,Object> parameters = new HashMap<String,Object>();
+
+ Map<String,Object> submission = new HashMap<String,Object>();
+ submission.put("hash",assoc.hash);
+ submission.put("db", assoc.db);
+ submission.put("db_id",assoc.db_id);
+ if(assoc instanceof MovieAssociation) {
+ submission.put("type", "movie");
+ submission.put("quality", ((MovieAssociation)assoc).quality.quality);
+ submission.put("language", ((MovieAssociation)assoc).language.getLanguage());
+ }
+ if(assoc instanceof TvShowAssociation) {
+ submission.put("type", "tv");
+ submission.put("quality", ((MovieAssociation)assoc).quality.quality);
+ submission.put("language", ((MovieAssociation)assoc).language.getLanguage());
+ }
+ if(assoc instanceof MusicAssociation) {
+ submission.put("type", "music");
+ submission.put("quality", ((MovieAssociation)assoc).quality.quality);
+ }
+
+ parameters.put("submission", submission);
+
+ dispatcher.syncInvoke( OP_SUBMIT, parameters );
+
+ }
+
+ public static SearchResult[]
+ search(String title) throws PlatformMessengerException {
+ Map<String,String> parameters = new HashMap<String, String>();
+ parameters.put("title", title);
+ Map reply = dispatcher.syncInvoke( OP_SEARCH, parameters );
+ List<Map> results = (List<Map>)reply.get("results");
+ SearchResult[] searchResults = new SearchResult[results.size()];
+ int i = 0;
+ for(Map result : results) {
+ SearchResult searchResult = new SearchResult();
+ searchResult.title = (String)result.get("title");
+ searchResult.db = (String)result.get("db");
+ searchResult.db_id = (String)result.get("db_id");
+ searchResults[i++] = searchResult;
+ }
+
+ return searchResults;
+
+ }
+
+ public static class SearchResult {
+ String title;
+ String db;
+ String db_id;
+
+ @Override
+ public String toString() {
+ return db + "." + db_id + " : " + title;
+ }
+
+ }
+
+ protected static Map
+ getParameter(
+ String hash )
+ {
+ Map parameters = new HashMap();
+
+ parameters.put( "hash", hash );
+
+ return( parameters );
+ }
+
+ protected static Map
+ getParameters(
+ String[] hashes )
+ {
+ Map parameters = new HashMap();
+
+ parameters.put( "hashes", hashes);
+
+ return( parameters );
+ }
+
+ public static abstract class Association {
+ public String hash;
+ public String db;
+ public String db_id;
+
+ //Cached but not stored
+ public String title;
+
+ @Override
+ public String toString() {
+ return hash + " > " + db + "." + db_id + " : " + title;
+ }
+ }
+
+ public static class EmptyAssociation extends Association {
+
+ }
+
+ public static abstract class VideoAssociation extends Association {
+ public VideoQuality quality;
+ public Locale language;
+ }
+
+ public static class MovieAssociation extends VideoAssociation {
+
+ }
+
+ public static class TvShowAssociation extends VideoAssociation {
+
+ }
+
+ public static class MusicAssociation extends Association {
+ public AudioQuality quality;
+ }
+
+ public static enum VideoQuality {
+ LOW("low"),DVD("dvd"),HD_720p("720p"),HD_1080p("1080p");
+
+ String quality;
+
+ private VideoQuality(String quality) {
+ this.quality = quality;
+ }
+
+ public static VideoQuality fromString(String quality) {
+ quality = quality.toLowerCase();
+ if(LOW.quality.equals(quality)) return LOW;
+ if(DVD.quality.equals(quality)) return DVD;
+ if(HD_720p.quality.equals(quality)) return HD_720p;
+ if(HD_1080p.quality.equals(quality)) return HD_1080p;
+ return null;
+ }
+ }
+
+ public static enum AudioQuality {
+ LOW("low"),HIGH("high"),LOSSLESS("lossless");
+
+ String quality;
+
+ private AudioQuality(String quality) {
+ this.quality = quality;
+ }
+
+ public static AudioQuality fromString(String quality) {
+ quality = quality.toLowerCase();
+ if(LOW.quality.equals(quality)) return LOW;
+ if(HIGH.quality.equals(quality)) return HIGH;
+ if(LOSSLESS.quality.equals(quality)) return LOSSLESS;
+ return null;
+ }
+
+ }
+
+ public static void main(String[] args) throws Exception {
+ SearchResult[] results = search("Dark Knight");
+ for(SearchResult result : results) {
+ System.out.println(result);
+ }
+
+ MovieAssociation assoc = new MovieAssociation();
+ assoc.db = "tmdb";
+ assoc.db_id = "155";
+ assoc.hash = "test";
+ assoc.quality = VideoQuality.DVD;
+ assoc.language = new Locale("en");
+ addSubmission(assoc);
+
+ Association assocL = getAssociation("test");
+ System.out.println(assocL);
+
+ }
+
+}
diff --git a/com/aelitis/azureus/core/messenger/config/PlatformMetaSearchMessenger.java b/com/aelitis/azureus/core/messenger/config/PlatformMetaSearchMessenger.java
index 24b6ff9..39f6ec9 100644
--- a/com/aelitis/azureus/core/messenger/config/PlatformMetaSearchMessenger.java
+++ b/com/aelitis/azureus/core/messenger/config/PlatformMetaSearchMessenger.java
@@ -23,6 +23,8 @@ package com.aelitis.azureus.core.messenger.config;
import java.util.*;
+import org.gudy.azureus2.core3.util.Debug;
+
import com.aelitis.azureus.core.messenger.PlatformMessenger;
import com.aelitis.azureus.core.messenger.PlatformMessengerException;
@@ -188,6 +190,20 @@ PlatformMetaSearchMessenger
Boolean show = (Boolean)m.get( "show" );
Long date = (Long)m.get( "modified_dt" );
+ float rank_bias = 1;
+
+ try{
+ String str = (String)m.get( "rank_bias" );
+
+ if ( str != null ){
+
+ rank_bias = Float.parseFloat( str );
+ }
+ }catch( Throwable e ){
+
+ Debug.out( e );
+ }
+
if ( show == null ){
show = new Boolean( true );
@@ -199,7 +215,7 @@ PlatformMetaSearchMessenger
}else{
- return( new templateInfo( id.longValue(), date.longValue(), show.booleanValue()));
+ return( new templateInfo( id.longValue(), date.longValue(), show.booleanValue(), rank_bias ));
/*
SimpleDateFormat format = new SimpleDateFormat( "yyyy-MM-dd HH:mm:ss.S");
@@ -255,16 +271,19 @@ PlatformMetaSearchMessenger
private long id;
private long date;
private boolean visible;
+ private float rank_bias;
protected
templateInfo(
long _id,
long _date,
- boolean _visible )
+ boolean _visible,
+ float _rank_bias )
{
id = _id;
date = _date;
visible = _visible;
+ rank_bias = _rank_bias;
}
public long
@@ -284,6 +303,12 @@ PlatformMetaSearchMessenger
{
return( visible );
}
+
+ public float
+ getRankBias()
+ {
+ return( rank_bias );
+ }
}
public static class
@@ -329,6 +354,12 @@ PlatformMetaSearchMessenger
return( info.getModifiedDate());
}
+ public float
+ getRankBias()
+ {
+ return( info.getRankBias());
+ }
+
public boolean
isVisible()
{
diff --git a/com/aelitis/azureus/core/metasearch/Engine.java b/com/aelitis/azureus/core/metasearch/Engine.java
index d075cc6..ef80ed9 100644
--- a/com/aelitis/azureus/core/metasearch/Engine.java
+++ b/com/aelitis/azureus/core/metasearch/Engine.java
@@ -54,18 +54,20 @@ Engine
public static final int FIELD_PLAYLINK = 104;
public static final int FIELD_DOWNLOADBTNLINK = 105;
+ public static final int FIELD_HASH = 200;
+
public static final int[] FIELD_IDS = {
FIELD_NAME, FIELD_DATE, FIELD_SIZE, FIELD_PEERS, FIELD_SEEDS, FIELD_CATEGORY,
FIELD_COMMENTS, FIELD_CONTENT_TYPE, FIELD_DISCARD,
FIELD_TORRENTLINK, FIELD_CDPLINK, FIELD_PLAYLINK,FIELD_DOWNLOADBTNLINK, FIELD_VOTES, FIELD_SUPERSEEDS,
- FIELD_PRIVATE, FIELD_DRMKEY, FIELD_VOTES_DOWN
+ FIELD_PRIVATE, FIELD_DRMKEY, FIELD_VOTES_DOWN, FIELD_HASH
};
public static final String[] FIELD_NAMES = {
"TITLE", "DATE", "SIZE", "PEERS", "SEEDS", "CAT",
"COMMENTS", "CONTENT_TYPE", "DISCARD",
"TORRENT", "CDP", "PLAY","DLBTN", "VOTES", "XSEEDS",
- "PRIVATE", "DRMKEY", "VOTESDOWN"
+ "PRIVATE", "DRMKEY", "VOTESDOWN", "HASH"
};
public static final int ENGINE_TYPE_REGEX = 1;
@@ -98,6 +100,8 @@ Engine
public static final String SC_AZID = "azid";
public static final String SC_FORCE_FULL = "force_full"; // ignore if-modified stuff and force a full search
public static final String SC_BATCH_PERIOD = "batch_millis";
+ public static final String SC_REMOVE_DUP_HASH = "remove_dup_hash";
+
public static final String CT_VIDEO = "video";
public static final String CT_AUDIO = "audio";
@@ -176,6 +180,24 @@ Engine
public String
getReferer();
+ public float
+ getRankBias();
+
+ public void
+ setRankBias(
+ float bias );
+
+ public void
+ setPreferredDelta(
+ float delta );
+
+ public float
+ getPreferredWeighting();
+
+ public float
+ applyRankBias(
+ float rank );
+
public boolean
supportsField(
int field_id );
diff --git a/com/aelitis/azureus/core/metasearch/MetaSearch.java b/com/aelitis/azureus/core/metasearch/MetaSearch.java
index dfcb246..a8fd593 100644
--- a/com/aelitis/azureus/core/metasearch/MetaSearch.java
+++ b/com/aelitis/azureus/core/metasearch/MetaSearch.java
@@ -103,6 +103,10 @@ MetaSearch
getEngineCount();
public void
+ enginePreferred(
+ Engine engine );
+
+ public void
addListener(
MetaSearchListener listener );
diff --git a/com/aelitis/azureus/core/metasearch/Result.java b/com/aelitis/azureus/core/metasearch/Result.java
index 8d23db0..8700b21 100644
--- a/com/aelitis/azureus/core/metasearch/Result.java
+++ b/com/aelitis/azureus/core/metasearch/Result.java
@@ -26,7 +26,6 @@ import java.util.List;
import java.util.Locale;
import java.util.Map;
import java.util.Random;
-import java.util.StringTokenizer;
import org.gudy.azureus2.core3.util.DisplayFormatters;
import org.json.simple.JSONObject;
@@ -133,7 +132,10 @@ public abstract class Result {
int votes = getVotes();
if(votes > 0) {
- totalVirtualPeers += 10 * votes;
+ if(votes > 50) {
+ votes = 50;
+ }
+ totalVirtualPeers += 5 * votes;
}
int votesDown = getVotesDown();
@@ -191,11 +193,27 @@ public abstract class Result {
}
}
- if(rank > 1f) rank = 1f;
+ rank = applyRankBias( rank );
return rank;
}
+ protected float
+ applyRankBias(
+ float _rank )
+ {
+ float rank = engine.applyRankBias( _rank );
+
+ /*
+ if ( rank != _rank ){
+
+ System.out.println( "bias applied for " + engine.getName() + ": " + _rank + "-> " + rank );
+ }
+ */
+
+ return( rank );
+ }
+
public Map toJSONMap() {
Map object = new JSONObject();
try {
diff --git a/com/aelitis/azureus/core/metasearch/impl/EngineImpl.java b/com/aelitis/azureus/core/metasearch/impl/EngineImpl.java
index 9659a61..0ebb0a7 100644
--- a/com/aelitis/azureus/core/metasearch/impl/EngineImpl.java
+++ b/com/aelitis/azureus/core/metasearch/impl/EngineImpl.java
@@ -180,6 +180,10 @@ EngineImpl
private int source = ENGINE_SOURCE_UNKNOWN;
+ private float rank_bias = 1;
+ private float preferred_count = 0;
+
+
// first mappings used to canonicalise names and map field to same field
// typically used for categories (musak->music)
@@ -241,6 +245,9 @@ EngineImpl
source = (int)ImportExportUtils.importLong( map, "source", ENGINE_SOURCE_UNKNOWN );
+ rank_bias = ImportExportUtils.importFloat( map, "rank_bias", 1.0f );
+ preferred_count = ImportExportUtils.importFloat( map, "pref_count", 0.0f );
+
first_level_mapping = importBEncodedMappings( map, "l1_map" );
second_level_mapping = importBEncodedMappings( map, "l2_map" );
@@ -284,6 +291,9 @@ EngineImpl
map.put( "source", new Long( source ));
+ ImportExportUtils.exportFloat( map, "rank_bias", rank_bias );
+ ImportExportUtils.exportFloat( map, "pref_count", preferred_count );
+
exportBEncodedMappings( map, "l1_map", first_level_mapping );
exportBEncodedMappings( map, "l2_map", second_level_mapping );
@@ -644,7 +654,18 @@ EngineImpl
Map m1 = exportToBencodedMap();
Map m2 = other.exportToBencodedMap();
- String[] to_remove = {"type","id","last_updated","selected","select_rec","source", "version", "az_version", "uid" };
+ String[] to_remove =
+ { "type",
+ "id",
+ "last_updated",
+ "selected",
+ "select_rec",
+ "source",
+ "rank_bias",
+ "pref_count",
+ "version",
+ "az_version",
+ "uid" };
for (int i=0;i<to_remove.length;i++){
@@ -1112,6 +1133,62 @@ EngineImpl
}
}
+ public float
+ getRankBias()
+ {
+ return( rank_bias );
+ }
+
+ public void
+ setRankBias(
+ float _rank_bias )
+ {
+ if ( rank_bias != _rank_bias ){
+
+ rank_bias = _rank_bias;
+
+ configDirty();
+ }
+ }
+
+ public void
+ setPreferredDelta(
+ float delta )
+ {
+ float new_pref = preferred_count + delta;
+
+ new_pref = Math.max( 0, new_pref );
+ new_pref = Math.min( 10, new_pref );
+
+ if ( new_pref != preferred_count ){
+
+ preferred_count = new_pref;
+
+ configDirty();
+ }
+ }
+
+ public float
+ getPreferredWeighting()
+ {
+ return( preferred_count );
+ }
+
+ public float
+ applyRankBias(
+ float rank )
+ {
+ rank *= rank_bias;
+
+ rank *= (1 + 0.025 * preferred_count );
+
+ rank = Math.min( rank, 1.0f );
+
+ rank = Math.max( rank, 0.0f );
+
+ return( rank );
+ }
+
public boolean
isMine()
{
@@ -1471,7 +1548,7 @@ EngineImpl
public String
getString()
{
- return( "id=" + getId() + ", name=" + getName() + ", source=" + ENGINE_SOURCE_STRS[getSource()] + ", selected=" + SEL_STATE_STRINGS[getSelectionState()]);
+ return( "id=" + getId() + ", name=" + getName() + ", source=" + ENGINE_SOURCE_STRS[getSource()] + ", selected=" + SEL_STATE_STRINGS[getSelectionState()] + ", rb=" + rank_bias + ", pref=" + preferred_count );
}
public String
diff --git a/com/aelitis/azureus/core/metasearch/impl/MetaSearchImpl.java b/com/aelitis/azureus/core/metasearch/impl/MetaSearchImpl.java
index fc7136a..f8c50d4 100644
--- a/com/aelitis/azureus/core/metasearch/impl/MetaSearchImpl.java
+++ b/com/aelitis/azureus/core/metasearch/impl/MetaSearchImpl.java
@@ -36,6 +36,7 @@ import org.gudy.azureus2.core3.util.Constants;
import org.gudy.azureus2.core3.util.Debug;
import org.gudy.azureus2.core3.util.DelayedEvent;
import org.gudy.azureus2.core3.util.FileUtil;
+import org.gudy.azureus2.core3.util.HashWrapper;
import org.gudy.azureus2.core3.util.IndentWriter;
import org.gudy.azureus2.core3.util.SimpleTimer;
import org.gudy.azureus2.core3.util.SystemTime;
@@ -108,6 +109,7 @@ MetaSearchImpl
int type,
long id,
long last_updated,
+ float rank_bias,
String name,
String content )
@@ -458,6 +460,7 @@ MetaSearchImpl
details.getType()==PlatformMetaSearchMessenger.templateDetails.ENGINE_TYPE_JSON?Engine.ENGINE_TYPE_JSON:Engine.ENGINE_TYPE_REGEX,
details.getId(),
details.getModifiedDate(),
+ details.getRankBias(),
details.getName(),
details.getValue());
@@ -700,6 +703,43 @@ MetaSearchImpl
return( search( engines, listener, search_parameters, headers, new HashMap<String,String>(), max_results_per_engine ));
}
+ public void
+ enginePreferred(
+ Engine engine )
+ {
+ Engine[] engines = getEngines( true, false );
+
+ int num_other_preferred = 0;
+
+ for ( Engine e: engines ){
+
+ if ( e.getId() == engine.getId()){
+
+ e.setPreferredDelta( +1 );
+
+ }else{
+
+ if ( e.getPreferredWeighting() > 0 ){
+
+ num_other_preferred++;
+ }
+ }
+ }
+
+ if ( num_other_preferred > 0 ){
+
+ float negative_weighting = -1 / num_other_preferred;
+
+ for ( Engine e: engines ){
+
+ if ( e.getId() != engine.getId() && e.getPreferredWeighting() > 0 ){
+
+ e.setPreferredDelta( negative_weighting );
+ }
+ }
+ }
+ }
+
public Engine[]
search(
Engine[] engines,
@@ -722,6 +762,10 @@ MetaSearchImpl
final long batch_millis = batch_millis_str==null?0:Long.parseLong( batch_millis_str );
+ String rem_dups_str = context.get( Engine.SC_REMOVE_DUP_HASH );
+
+ final boolean rem_dups = rem_dups_str==null?false:rem_dups_str.equalsIgnoreCase( "true" );
+
ResultListener listener =
new ResultListener()
{
@@ -731,7 +775,9 @@ MetaSearchImpl
final private Map<Engine,List<Result[]>> pending_results = new HashMap<Engine,List<Result[]>>();
- public void
+ final private Map<Engine,Set<String>> result_hashes = new HashMap<Engine, Set<String>>();
+
+ public void
contentReceived(
final Engine engine,
final String content )
@@ -867,6 +913,108 @@ MetaSearchImpl
}
}
+ protected Result[]
+ truncateResults(
+ Engine engine,
+ Result[] a_results,
+ int max )
+ {
+ Set<String> hash_set = result_hashes.get( engine );
+
+ if ( hash_set == null ){
+
+ hash_set = new HashSet<String>();
+
+ result_hashes.put( engine, hash_set );
+ }
+
+ List<Result> results = new ArrayList<Result>( a_results.length );
+
+ for ( Result r: a_results ){
+
+ String name = r.getName();
+
+ if ( name == null || name.trim().length() == 0 ){
+
+ continue;
+ }
+
+ if ( rem_dups ){
+
+ String hash = r.getHash();
+
+ if ( hash == null ||
+ hash.length() == 0 ){
+
+ results.add( r );
+
+ }else{
+
+ if ( !hash_set.contains( hash )){
+
+ results.add( r );
+
+ hash_set.add( hash );
+ }
+ }
+ }else{
+
+ results.add( r );
+ }
+ }
+
+ if ( max < results.size() ){
+
+ log( "Truncating search results for " + engine.getName() + " from " + results.size() + " to " + max );
+
+ Collections.sort(
+ results,
+ new Comparator<Result>()
+ {
+ Map<Result,Float> ranks = new HashMap<Result, Float>();
+
+ public int
+ compare(
+ Result r1,
+ Result r2)
+ {
+ Float rank1 = (Float)ranks.get(r1);
+
+ if ( rank1 == null ){
+ rank1 = new Float(r1.getRank());
+ ranks.put( r1, rank1 );
+ }
+
+ Float rank2 = (Float)ranks.get(r2);
+
+ if ( rank2 == null ){
+ rank2 = new Float(r2.getRank());
+ ranks.put( r2, rank2 );
+ }
+
+ return( -rank1.compareTo( rank2 ));
+ }
+ });
+
+ Result[] x = new Result[max];
+
+ int pos = 0;
+
+ while( pos < max ){
+
+ x[pos] = results.get( pos );
+
+ pos++;
+ }
+
+ return( x );
+
+ }else{
+
+ return( results.toArray( new Result[ results.size()] ));
+ }
+ }
+
public void
engineFailed(
final Engine engine,
@@ -924,57 +1072,6 @@ MetaSearchImpl
return( engines );
}
- protected Result[]
- truncateResults(
- Engine engine,
- Result[] results,
- int max )
- {
- if ( max < results.length ){
-
- log( "Truncating search results for " + engine.getName() + " from " + results.length + " to " + max );
-
- Arrays.sort(
- results,
- new Comparator<Result>()
- {
- Map<Result,Float> ranks = new HashMap<Result, Float>();
-
- public int
- compare(
- Result r1,
- Result r2)
- {
- Float rank1 = (Float)ranks.get(r1);
-
- if ( rank1 == null ){
- rank1 = new Float(r1.getRank());
- ranks.put( r1, rank1 );
- }
-
- Float rank2 = (Float)ranks.get(r2);
-
- if ( rank2 == null ){
- rank2 = new Float(r2.getRank());
- ranks.put( r2, rank2 );
- }
-
- return( -rank1.compareTo( rank2 ));
- }
- });
-
- Result[] x = new Result[max];
-
- System.arraycopy( results, 0, x, 0, max );
-
- return( x );
-
- }else{
-
- return( results );
- }
- }
-
public void
addListener(
MetaSearchListener listener )
diff --git a/com/aelitis/azureus/core/metasearch/impl/MetaSearchManagerImpl.java b/com/aelitis/azureus/core/metasearch/impl/MetaSearchManagerImpl.java
index 0fa3fae..06f8486 100644
--- a/com/aelitis/azureus/core/metasearch/impl/MetaSearchManagerImpl.java
+++ b/com/aelitis/azureus/core/metasearch/impl/MetaSearchManagerImpl.java
@@ -53,7 +53,6 @@ import com.aelitis.azureus.core.metasearch.Engine;
import com.aelitis.azureus.core.metasearch.MetaSearch;
import com.aelitis.azureus.core.metasearch.MetaSearchException;
import com.aelitis.azureus.core.metasearch.MetaSearchManager;
-import com.aelitis.azureus.core.metasearch.MetaSearchManagerFactory;
import com.aelitis.azureus.core.metasearch.Result;
import com.aelitis.azureus.core.metasearch.ResultListener;
import com.aelitis.azureus.core.metasearch.SearchParameter;
@@ -478,12 +477,12 @@ MetaSearchManagerImpl
// popular ones are selected if in 'auto' mode
// manually selected ones are, well, manually selected
- Map vuze_selected_ids = new HashMap();
- Map vuze_preload_ids = new HashMap();
+ Map<Long,PlatformMetaSearchMessenger.templateInfo> vuze_selected_ids = new HashMap<Long, PlatformMetaSearchMessenger.templateInfo>();
+ Map<Long,PlatformMetaSearchMessenger.templateInfo> vuze_preload_ids = new HashMap<Long,PlatformMetaSearchMessenger.templateInfo>();
- Set featured_ids = new HashSet();
- Set popular_ids = new HashSet();
- Set manual_vuze_ids = new HashSet();
+ Set<Long> featured_ids = new HashSet<Long>();
+ Set<Long> popular_ids = new HashSet<Long>();
+ Set<Long> manual_vuze_ids = new HashSet<Long>();
boolean auto_mode = isAutoMode();
@@ -505,9 +504,7 @@ MetaSearchManagerImpl
Long key = new Long( template.getId());
- vuze_selected_ids.put(
- key,
- new Long( template.getModifiedDate()));
+ vuze_selected_ids.put( key, template );
featured_ids.add( key );
@@ -538,9 +535,7 @@ MetaSearchManagerImpl
if ( !vuze_selected_ids.containsKey( key )){
- vuze_selected_ids.put(
- key,
- new Long( template.getModifiedDate()));
+ vuze_selected_ids.put( key, template );
popular_ids.add( key );
@@ -550,9 +545,7 @@ MetaSearchManagerImpl
if ( !vuze_preload_ids.containsKey( key )){
- vuze_preload_ids.put(
- key,
- new Long( template.getModifiedDate()));
+ vuze_preload_ids.put( key, template );
preload_str += (preload_str.length()==0?"":",") + key;
}
@@ -589,13 +582,13 @@ MetaSearchManagerImpl
long[] manual_ids = new long[manual_vuze_ids.size()];
- Iterator it = manual_vuze_ids.iterator();
+ Iterator<Long> it = manual_vuze_ids.iterator();
int pos = 0;
while( it.hasNext()){
- manual_ids[pos++] = ((Long)it.next()).longValue();
+ manual_ids[pos++] = it.next().longValue();
}
PlatformMetaSearchMessenger.templateInfo[] manual = PlatformMetaSearchMessenger.getTemplateDetails( manual_ids );
@@ -611,9 +604,7 @@ MetaSearchManagerImpl
Long key = new Long( template.getId());
- vuze_selected_ids.put(
- key,
- new Long( template.getModifiedDate()));
+ vuze_selected_ids.put( key, template );
manual_str += (manual_str.length()==0?"":",") + key;
}
@@ -621,7 +612,7 @@ MetaSearchManagerImpl
log( "Manual templates: " + manual_str );
- Map existing_engine_map = new HashMap();
+ Map<Long,Engine> existing_engine_map = new HashMap<Long,Engine>();
String existing_str = "";
@@ -645,16 +636,19 @@ MetaSearchManagerImpl
// update any that are out of date
- Iterator it = vuze_selected_ids.entrySet().iterator();
+ Iterator<Map.Entry<Long,PlatformMetaSearchMessenger.templateInfo>> it = vuze_selected_ids.entrySet().iterator();
while( it.hasNext()){
- Map.Entry entry = (Map.Entry)it.next();
+ Map.Entry<Long,PlatformMetaSearchMessenger.templateInfo> entry = it.next();
vuze_preload_ids.remove( entry.getKey());
- long id = ((Long)entry.getKey()).longValue();
- long modified = ((Long)entry.getValue()).longValue();
+ long id = entry.getKey().longValue();
+
+ PlatformMetaSearchMessenger.templateInfo template = entry.getValue();
+
+ long modified = template.getModifiedDate();
Engine this_engine = (Engine)existing_engine_map.get( new Long(id));
@@ -675,18 +669,25 @@ MetaSearchManagerImpl
details.getType()==PlatformMetaSearchMessenger.templateDetails.ENGINE_TYPE_JSON?Engine.ENGINE_TYPE_JSON:Engine.ENGINE_TYPE_REGEX,
details.getId(),
details.getModifiedDate(),
+ details.getRankBias(),
details.getName(),
details.getValue());
this_engine.setSource( Engine.ENGINE_SOURCE_VUZE );
-
+
meta_search.addEngine( this_engine );
}catch( Throwable e ){
log( "Failed to import engine '" + details.getValue() + "'", e );
}
- }
+ }
+ }else if ( this_engine.getRankBias() != template.getRankBias()){
+
+ this_engine.setRankBias( template.getRankBias());
+
+ log( "Updating rank bias for " + this_engine.getString() + " to " + template.getRankBias());
+
}else{
log( "Not updating " + this_engine.getString() + " as unchanged" );
@@ -709,7 +710,7 @@ MetaSearchManagerImpl
while( it.hasNext()){
- Map.Entry entry = (Map.Entry)it.next();
+ Map.Entry<Long,PlatformMetaSearchMessenger.templateInfo> entry = it.next();
long id = ((Long)entry.getKey()).longValue();
@@ -730,13 +731,14 @@ MetaSearchManagerImpl
details.getType()==PlatformMetaSearchMessenger.templateDetails.ENGINE_TYPE_JSON?Engine.ENGINE_TYPE_JSON:Engine.ENGINE_TYPE_REGEX,
details.getId(),
details.getModifiedDate(),
+ details.getRankBias(),
details.getName(),
details.getValue());
this_engine.setSource( Engine.ENGINE_SOURCE_VUZE );
this_engine.setSelectionState( Engine.SEL_STATE_DESELECTED );
-
+
meta_search.addEngine( this_engine );
}catch( Throwable e ){
@@ -843,14 +845,14 @@ MetaSearchManagerImpl
Engine[] engines = meta_search.getEngines( false, false );
- Map engine_map = new HashMap();
+ Map<Long,Engine> engine_map = new HashMap<Long,Engine>();
for( int i=0;i<engines.length;i++){
engine_map.put( new Long( engines[i].getId()), engines[i] );
}
- Set selected_engine_set = new HashSet();
+ Set<Engine> selected_engine_set = new HashSet<Engine>();
for (int i=0;i<ids.length;i++){
@@ -892,6 +894,7 @@ MetaSearchManagerImpl
details.getType()==PlatformMetaSearchMessenger.templateDetails.ENGINE_TYPE_JSON?Engine.ENGINE_TYPE_JSON:Engine.ENGINE_TYPE_REGEX,
details.getId(),
details.getModifiedDate(),
+ details.getRankBias(),
details.getName(),
details.getValue());
@@ -947,7 +950,9 @@ MetaSearchManagerImpl
}
try{
- Engine engine = meta_search.importFromJSONString( type, id, SystemTime.getCurrentTime(),name, json_value );
+ Engine engine =
+ meta_search.importFromJSONString(
+ type, id, SystemTime.getCurrentTime(), 1, name, json_value );
engine.setSource( Engine.ENGINE_SOURCE_LOCAL );
@@ -1087,7 +1092,7 @@ MetaSearchManagerImpl
loadFromVuzeFile(
VuzeFile vf )
{
- List result = new ArrayList();
+ List<Engine> result = new ArrayList<Engine>();
VuzeFileComponent[] comps = vf.getComponents();
@@ -1107,7 +1112,7 @@ MetaSearchManagerImpl
}
}
- return((Engine[])result.toArray(new Engine[result.size()]));
+ return(result.toArray(new Engine[result.size()]));
}
public long
diff --git a/com/aelitis/azureus/core/metasearch/impl/plugin/PluginResult.java b/com/aelitis/azureus/core/metasearch/impl/plugin/PluginResult.java
index 72c9def..73f00d8 100644
--- a/com/aelitis/azureus/core/metasearch/impl/plugin/PluginResult.java
+++ b/com/aelitis/azureus/core/metasearch/impl/plugin/PluginResult.java
@@ -195,7 +195,7 @@ PluginResult
{
if (((PluginEngine)getEngine()).useAccuracyForRank()){
- return( getAccuracy());
+ return( applyRankBias( getAccuracy()));
}
long l_rank = getLongProperty( SearchResult.PR_RANK );
@@ -223,7 +223,7 @@ PluginResult
rank = 0;
}
- return( rank / 100 );
+ return( applyRankBias( rank / 100 ));
}
public float
diff --git a/com/aelitis/azureus/core/metasearch/impl/web/WebResult.java b/com/aelitis/azureus/core/metasearch/impl/web/WebResult.java
index 9c2b29a..4b26eb0 100644
--- a/com/aelitis/azureus/core/metasearch/impl/web/WebResult.java
+++ b/com/aelitis/azureus/core/metasearch/impl/web/WebResult.java
@@ -211,7 +211,8 @@ public class WebResult extends Result {
getRank()
{
if ( rank != -1 ){
- return( rank );
+
+ return( applyRankBias( rank ));
}
return( super.getRank());
diff --git a/com/aelitis/azureus/core/metasearch/impl/web/json/JSONEngine.java b/com/aelitis/azureus/core/metasearch/impl/web/json/JSONEngine.java
index 28d6ecb..b7c3a7f 100644
--- a/com/aelitis/azureus/core/metasearch/impl/web/json/JSONEngine.java
+++ b/com/aelitis/azureus/core/metasearch/impl/web/json/JSONEngine.java
@@ -343,6 +343,9 @@ JSONEngine
case FIELD_VOTES_DOWN :
result.setVotesDownFromHTML(fieldContent);
break;
+ case FIELD_HASH :
+ result.setHash(fieldContent);
+ break;
default:
break;
}
diff --git a/com/aelitis/azureus/core/metasearch/impl/web/regex/RegexEngine.java b/com/aelitis/azureus/core/metasearch/impl/web/regex/RegexEngine.java
index 3660a2f..f46fb62 100644
--- a/com/aelitis/azureus/core/metasearch/impl/web/regex/RegexEngine.java
+++ b/com/aelitis/azureus/core/metasearch/impl/web/regex/RegexEngine.java
@@ -375,6 +375,9 @@ RegexEngine
case FIELD_VOTES_DOWN :
result.setVotesDownFromHTML(groupContent);
break;
+ case FIELD_HASH :
+ result.setHash(groupContent);
+ break;
default:
fields_matched--;
break;
diff --git a/com/aelitis/azureus/core/networkmanager/admin/NetworkAdmin.java b/com/aelitis/azureus/core/networkmanager/admin/NetworkAdmin.java
index 420a7cd..0a9b162 100644
--- a/com/aelitis/azureus/core/networkmanager/admin/NetworkAdmin.java
+++ b/com/aelitis/azureus/core/networkmanager/admin/NetworkAdmin.java
@@ -198,6 +198,8 @@ NetworkAdmin
public abstract InetAddress getDefaultPublicAddressV6();
+ public abstract boolean hasDHTIPV6();
+
public abstract void
addPropertyChangeListener(
NetworkAdminPropertyChangeListener listener );
diff --git a/com/aelitis/azureus/core/networkmanager/admin/impl/NetworkAdminImpl.java b/com/aelitis/azureus/core/networkmanager/admin/impl/NetworkAdminImpl.java
index 99acc9e..dede097 100644
--- a/com/aelitis/azureus/core/networkmanager/admin/impl/NetworkAdminImpl.java
+++ b/com/aelitis/azureus/core/networkmanager/admin/impl/NetworkAdminImpl.java
@@ -72,14 +72,59 @@ NetworkAdminImpl
private static final boolean FULL_INTF_PROBE = false;
- private Set<NetworkInterface> old_network_interfaces;
+ private static InetAddress anyLocalAddress;
+ private static InetAddress anyLocalAddressIPv4;
+ private static InetAddress anyLocalAddressIPv6;
+ private static InetAddress localhostV4;
+ private static InetAddress localhostV6;
+
+ static
+ {
+ try
+ {
+ anyLocalAddressIPv4 = InetAddress.getByAddress(new byte[] { 0,0,0,0 });
+ anyLocalAddressIPv6 = InetAddress.getByAddress(new byte[] {0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0});
+ anyLocalAddress = new InetSocketAddress(0).getAddress();
+ localhostV4 = InetAddress.getByAddress(new byte[] {127,0,0,1});
+ localhostV6 = InetAddress.getByAddress(new byte[] {0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,1});
+ } catch (UnknownHostException e)
+ {
+ e.printStackTrace();
+ }
+ }
+
+
+
+
+ private Set<NetworkInterface> old_network_interfaces;
private InetAddress[] currentBindIPs = new InetAddress[] { null };
private boolean supportsIPv6withNIO = true;
private boolean supportsIPv6 = true;
private boolean supportsIPv4 = true;
+ private boolean IPv6_enabled;
+
+ {
+ COConfigurationManager.addAndFireParameterListener(
+ "IPV6 Enable Support",
+ new ParameterListener()
+ {
+ public void
+ parameterChanged(
+ String parameterName )
+ {
+ setIPv6Enabled( COConfigurationManager.getBooleanParameter("IPV6 Enable Support"));
+ }
+ });
+ }
+
+ private int roundRobinCounterV4 = 0;
+ private int roundRobinCounterV6 = 0;
+
+
private CopyOnWriteList listeners = new CopyOnWriteList();
-
+
+
private NetworkAdminRouteListener
trace_route_listener = new NetworkAdminRouteListener()
{
@@ -131,6 +176,8 @@ NetworkAdminImpl
}
};
+ private boolean initialised;
+
public
NetworkAdminImpl()
{
@@ -155,22 +202,42 @@ NetworkAdminImpl
perform(
TimerEvent event )
{
- checkNetworkInterfaces( false );
+ checkNetworkInterfaces( false, false );
}
});
// populate initial values
- checkNetworkInterfaces(true);
+ checkNetworkInterfaces( true, true );
- checkDefaultBindAddress(true);
+ checkDefaultBindAddress( true );
AEDiagnostics.addEvidenceGenerator( this );
+
+ initialised = true;
+ }
+
+ protected void
+ setIPv6Enabled(
+ boolean enabled )
+ {
+ IPv6_enabled = enabled;
+
+ supportsIPv6withNIO = enabled;
+ supportsIPv6 = enabled;
+
+ if ( initialised ){
+
+ checkNetworkInterfaces( false, true );
+
+ checkDefaultBindAddress( false );
+ }
}
protected void
checkNetworkInterfaces(
- boolean first_time )
+ boolean first_time,
+ boolean force )
{
try{
Enumeration nis = NetworkInterface.getNetworkInterfaces();
@@ -224,9 +291,8 @@ NetworkAdminImpl
old_network_interfaces = new_network_interfaces;
}
- if ( changed ){
-
-
+ if ( changed || force ){
+
boolean newV6 = false;
boolean newV4 = false;
@@ -242,12 +308,16 @@ NetworkAdminImpl
{
InetAddress ia = (InetAddress) addresses.nextElement();
- if (ia.isLoopbackAddress())
+ if (ia.isLoopbackAddress()){
continue;
- if (ia instanceof Inet6Address && !ia.isLinkLocalAddress())
- newV6 = true;
- else if (ia instanceof Inet4Address)
+ }
+ if (ia instanceof Inet6Address && !ia.isLinkLocalAddress()){
+ if ( IPv6_enabled ){
+ newV6 = true;
+ }
+ }else if (ia instanceof Inet4Address){
newV4 = true;
+ }
}
}
}
@@ -293,9 +363,6 @@ NetworkAdminImpl
}
}
- private int roundRobinCounterV4 = 0;
- private int roundRobinCounterV6 = 0;
-
public InetAddress getMultiHomedOutgoingRoundRobinBindAddress(InetAddress target)
{
InetAddress[] addresses = currentBindIPs;
@@ -325,26 +392,7 @@ NetworkAdminImpl
roundRobinCounterV4 = i;
return toReturn != null ? toReturn : (v6 ? localhostV6 : localhostV4);
}
-
- private static InetAddress anyLocalAddressIPv4;
- private static InetAddress anyLocalAddressIPv6;
- private static InetAddress localhostV4;
- private static InetAddress localhostV6;
-
- static
- {
- try
- {
- anyLocalAddressIPv4 = InetAddress.getByAddress(new byte[] { 0,0,0,0 });
- anyLocalAddressIPv6 = InetAddress.getByAddress(new byte[] {0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0});
- localhostV4 = InetAddress.getByAddress(new byte[] {127,0,0,1});
- localhostV6 = InetAddress.getByAddress(new byte[] {0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,1});
- } catch (UnknownHostException e)
- {
- e.printStackTrace();
- }
- }
-
+
public InetAddress[] getMultiHomedServiceBindAddresses(boolean nio)
{
InetAddress[] bindIPs = currentBindIPs;
@@ -416,77 +464,101 @@ NetworkAdminImpl
private InetAddress[] calcBindAddresses(final String addressString, boolean enforceBind)
{
- ArrayList addrs = new ArrayList();
+ ArrayList<InetAddress> addrs = new ArrayList<InetAddress>();
Pattern addressSplitter = Pattern.compile(";");
Pattern interfaceSplitter = Pattern.compile("[\\]\\[]");
String[] tokens = addressSplitter.split(addressString);
- addressLoop: for(int i=0;i<tokens.length;i++)
+addressLoop:
+ for(int i=0;i<tokens.length;i++)
+ {
+ String currentAddress = tokens[i];
+
+ currentAddress = currentAddress.trim();
+
+ if ( currentAddress.length() == 0 ){
+ continue;
+ }
+
+ InetAddress parsedAddress = null;
+
+ try
+ { // literal ipv4 or ipv6 address
+ if(currentAddress.indexOf('.') != -1 || currentAddress.indexOf(':') != -1)
+ parsedAddress = InetAddress.getByName(currentAddress);
+ } catch (Exception e)
+ { // ignore, could be an interface name containing a ':'
+ }
+
+ if(parsedAddress != null)
{
- String currentAddress = tokens[i];
- InetAddress parsedAddress = null;
-
try
- { // literal ipv4 or ipv6 address
- if(currentAddress.indexOf('.') != -1 || currentAddress.indexOf(':') != -1)
- parsedAddress = InetAddress.getByName(currentAddress);
- } catch (Exception e)
- { // ignore, could be an interface name containing a ':'
- }
-
- if(parsedAddress != null)
{
- try
- {
- // allow wildcard address as 1st address, otherwise only interface addresses
- if((!parsedAddress.isAnyLocalAddress() || addrs.size() > 0) && NetworkInterface.getByInetAddress(parsedAddress) == null)
- continue;
- } catch (SocketException e)
- {
- Debug.printStackTrace(e);
+ // allow wildcard address as 1st address, otherwise only interface addresses
+ if((!parsedAddress.isAnyLocalAddress() || addrs.size() > 0) && NetworkInterface.getByInetAddress(parsedAddress) == null)
continue;
- }
- addrs.add(parsedAddress);
- continue;
- }
-
- // interface name
- String[] ifaces = interfaceSplitter.split(currentAddress);
-
- NetworkInterface netInterface = null;
- try
- {
- netInterface = NetworkInterface.getByName(ifaces[0]);
} catch (SocketException e)
{
- e.printStackTrace(); // should not happen
- }
- if(netInterface == null)
+ Debug.printStackTrace(e);
continue;
+ }
+ addrs.add(parsedAddress);
+ continue;
+ }
+
+ // interface name
+ String[] ifaces = interfaceSplitter.split(currentAddress);
- Enumeration interfaceAddresses = netInterface.getInetAddresses();
- if(ifaces.length != 2)
- while(interfaceAddresses.hasMoreElements())
- addrs.add(interfaceAddresses.nextElement());
- else
- {
- int selectedAddress = 0;
- try { selectedAddress = Integer.parseInt(ifaces[1]); }
- catch (NumberFormatException e) {} // ignore, user could by typing atm
- for(int j=0;interfaceAddresses.hasMoreElements();j++,interfaceAddresses.nextElement())
- if(j==selectedAddress)
- {
- addrs.add(interfaceAddresses.nextElement());
- continue addressLoop;
- }
+ NetworkInterface netInterface = null;
+ try
+ {
+ netInterface = NetworkInterface.getByName(ifaces[0]);
+ } catch (SocketException e)
+ {
+ e.printStackTrace(); // should not happen
+ }
+ if(netInterface == null)
+ continue;
+
+ Enumeration interfaceAddresses = netInterface.getInetAddresses();
+ if(ifaces.length != 2)
+ while(interfaceAddresses.hasMoreElements())
+ addrs.add((InetAddress)interfaceAddresses.nextElement());
+ else
+ {
+ int selectedAddress = 0;
+ try { selectedAddress = Integer.parseInt(ifaces[1]); }
+ catch (NumberFormatException e) {} // ignore, user could by typing atm
+ for(int j=0;interfaceAddresses.hasMoreElements();j++,interfaceAddresses.nextElement())
+ if(j==selectedAddress)
+ {
+ addrs.add((InetAddress)interfaceAddresses.nextElement());
+ continue addressLoop;
+ }
+ }
+ }
+
+ if ( !IPv6_enabled ){
+
+ Iterator<InetAddress> it = addrs.iterator();
+
+ while( it.hasNext()){
+
+ if ( it.next() instanceof Inet6Address ){
+
+ it.remove();
}
}
+ }
- if(addrs.size() < 1)
+ if(addrs.size() < 1){
return new InetAddress[] {enforceBind ? localhostV4 : (hasIPV6Potential() ? anyLocalAddressIPv6 : anyLocalAddressIPv4)};
- return (InetAddress[])addrs.toArray(new InetAddress[0]);
+ }
+
+ return( addrs.toArray(new InetAddress[addrs.size()]));
+
}
@@ -526,8 +598,10 @@ NetworkAdminImpl
Enumeration addresses = ni.getInetAddresses();
str+=ni.getName()+"\t("+ni.getDisplayName()+")\n";
int i = 0;
- while(addresses.hasMoreElements())
- str+="\t"+ni.getName()+"["+(i++)+"]\t"+((InetAddress)addresses.nextElement()).getHostAddress()+"\n";
+ while(addresses.hasMoreElements()){
+ InetAddress address = (InetAddress)addresses.nextElement();
+ str+="\t"+ni.getName()+"["+(i++)+"]\t"+(address).getHostAddress()+"\n";
+ }
}
return (str);
}
@@ -1007,6 +1081,19 @@ NetworkAdminImpl
return null;
}
+ public boolean
+ hasDHTIPV6()
+ {
+ if ( hasIPV6Potential(false)){
+
+ InetAddress v6 = getDefaultPublicAddressV6();
+
+ return( v6 != null && !AddressUtils.isTeredo( v6 ));
+ }
+
+ return( false );
+ }
+
protected void
firePropertyChange(
String property )
@@ -2063,6 +2150,8 @@ NetworkAdminImpl
writer.println( "bindable: " + getString( getBindableAddresses()));
+ writer.println( "ipv6_enabled=" + IPv6_enabled );
+
writer.println( "ipv4_potential=" + hasIPV4Potential());
writer.println( "ipv6_potential=" + hasIPV6Potential(false) + "/" + hasIPV6Potential(true));
@@ -2468,7 +2557,14 @@ NetworkAdminImpl
while( e.hasMoreElements()){
- addresses.add( new networkAddress((InetAddress)e.nextElement()));
+ InetAddress address = (InetAddress)e.nextElement();
+
+ if ((address instanceof Inet6Address) && !IPv6_enabled ){
+
+ continue;
+ }
+
+ addresses.add( new networkAddress(address));
}
return((NetworkAdminNetworkInterfaceAddress[])addresses.toArray( new NetworkAdminNetworkInterfaceAddress[addresses.size()]));
diff --git a/com/aelitis/azureus/core/networkmanager/impl/tcp/VirtualChannelSelectorImpl.java b/com/aelitis/azureus/core/networkmanager/impl/tcp/VirtualChannelSelectorImpl.java
index 4fa969f..7b79062 100644
--- a/com/aelitis/azureus/core/networkmanager/impl/tcp/VirtualChannelSelectorImpl.java
+++ b/com/aelitis/azureus/core/networkmanager/impl/tcp/VirtualChannelSelectorImpl.java
@@ -57,7 +57,7 @@ public class VirtualChannelSelectorImpl {
// hack for 10.6 - will switch to not doing System.setProperty( "java.nio.preferSelect", "true" ); later
- //boolean is_osx_16 = false;
+ boolean is_osx_16 = false;
try{
// unfortunately the package maintainer has set os.name to Linux for FreeBSD...
@@ -91,7 +91,6 @@ public class VirtualChannelSelectorImpl {
is_freebsd_7_or_higher = Integer.parseInt(digits) >= 7;
}
}
- /*
}else if ( Constants.isOSX ){
String os_version = System.getProperty( "os.version", "" );
@@ -100,19 +99,17 @@ public class VirtualChannelSelectorImpl {
is_osx_16 = true;
}
- */
}
}catch( Throwable e ){
e.printStackTrace();
}
- MAYBE_BROKEN_SELECT = is_freebsd_7_or_higher || is_diablo; // || is_osx_16;
+ MAYBE_BROKEN_SELECT = is_freebsd_7_or_higher || is_diablo || is_osx_16;
if ( MAYBE_BROKEN_SELECT ){
- System.out.println( "Enabling broken select detection: diablo=" + is_diablo + ", freebsd 7+=" + is_freebsd_7_or_higher ); // + ", osx 10.6=" + is_osx_16 );
-
+ System.out.println( "Enabling broken select detection: diablo=" + is_diablo + ", freebsd 7+=" + is_freebsd_7_or_higher + ", osx 10.6=" + is_osx_16 );
}
}
diff --git a/com/aelitis/azureus/core/peermanager/messaging/bittorrent/BTMessageDecoder.java b/com/aelitis/azureus/core/peermanager/messaging/bittorrent/BTMessageDecoder.java
index 0334bd5..eb71a95 100644
--- a/com/aelitis/azureus/core/peermanager/messaging/bittorrent/BTMessageDecoder.java
+++ b/com/aelitis/azureus/core/peermanager/messaging/bittorrent/BTMessageDecoder.java
@@ -37,7 +37,7 @@ import com.aelitis.azureus.core.peermanager.messaging.*;
*/
public class BTMessageDecoder implements MessageStreamDecoder {
private static final int MIN_MESSAGE_LENGTH = 1; //for type id
- private static final int MAX_MESSAGE_LENGTH = 16393; //should never be > 16KB+9B, as we never request chunks > 16KB
+ private static final int MAX_MESSAGE_LENGTH = 16*1024+128; //should never be > 16KB+9B, as we never request chunks > 16KB - update, some LT extensions can be bigger
private static final int HANDSHAKE_FAKE_LENGTH = 323119476; //(byte)19 + "Bit" readInt() value of header
private static final byte SS = DirectByteBuffer.SS_MSG;
diff --git a/com/aelitis/azureus/core/peermanager/messaging/bittorrent/ltep/LTMessageDecoder.java b/com/aelitis/azureus/core/peermanager/messaging/bittorrent/ltep/LTMessageDecoder.java
index 9b8418b..0ba6c17 100644
--- a/com/aelitis/azureus/core/peermanager/messaging/bittorrent/ltep/LTMessageDecoder.java
+++ b/com/aelitis/azureus/core/peermanager/messaging/bittorrent/ltep/LTMessageDecoder.java
@@ -20,6 +20,9 @@
*/
package com.aelitis.azureus.core.peermanager.messaging.bittorrent.ltep;
+import java.util.HashMap;
+import java.util.Map;
+
import org.gudy.azureus2.core3.util.DirectByteBuffer;
import com.aelitis.azureus.core.peermanager.messaging.Message;
@@ -33,6 +36,8 @@ import com.aelitis.azureus.core.peermanager.messaging.bittorrent.BTMessageDecode
*/
public class LTMessageDecoder extends BTMessageDecoder {
+ private Map<Byte,byte[]> entension_handlers = new HashMap<Byte, byte[]>();
+
public LTMessageDecoder() {}
protected Message createMessage(DirectByteBuffer ref_buff) throws MessageException {
@@ -52,10 +57,29 @@ public class LTMessageDecoder extends BTMessageDecoder {
case 1:
return MessageManager.getSingleton().createMessage(LTMessage.ID_UT_PEX_BYTES, ref_buff, (byte)1);
default: {
+ byte[] message_id;
+ synchronized( entension_handlers ){
+
+ message_id = entension_handlers.get( id );
+ }
+
+ if ( message_id != null ){
+ return MessageManager.getSingleton().createMessage( message_id, ref_buff, (byte)1);
+ }
System.out.println( "Unknown LTEP message id [" +id+ "]" );
throw new MessageException( "Unknown LTEP message id [" +id+ "]" );
}
}
}
-
+
+ public void
+ addExtensionHandler(
+ byte id,
+ byte[] message_id )
+ {
+ synchronized( entension_handlers ){
+
+ entension_handlers.put( id, message_id );
+ }
+ }
}
diff --git a/com/aelitis/azureus/core/rssgen/RSSGeneratorPlugin.java b/com/aelitis/azureus/core/rssgen/RSSGeneratorPlugin.java
index cedd134..bb3ae83 100644
--- a/com/aelitis/azureus/core/rssgen/RSSGeneratorPlugin.java
+++ b/com/aelitis/azureus/core/rssgen/RSSGeneratorPlugin.java
@@ -36,7 +36,6 @@ import org.gudy.azureus2.plugins.tracker.web.TrackerWebPageGenerator;
import org.gudy.azureus2.plugins.tracker.web.TrackerWebPageRequest;
import org.gudy.azureus2.plugins.tracker.web.TrackerWebPageResponse;
import org.gudy.azureus2.plugins.ui.config.ConfigSection;
-import org.gudy.azureus2.plugins.ui.model.BasicPluginConfigModel;
import org.gudy.azureus2.ui.webplugin.WebPlugin;
@@ -44,7 +43,7 @@ public class
RSSGeneratorPlugin
extends WebPlugin
{
- public static final String PLUGIN_NAME = "Internal RSS";
+ public static final String PLUGIN_NAME = "Local RSS etc.";
public static final int DEFAULT_PORT = 6905;
public static final String DEFAULT_ACCESS = "all";
@@ -112,6 +111,7 @@ RSSGeneratorPlugin
COConfigurationManager.setParameter( "rss.internal.migrated", true );
}
+ defaults.put( WebPlugin.PR_ENABLE, new Boolean( COConfigurationManager.getBooleanParameter( "Plugin.default.device.rss.enable", false )));
defaults.put( WebPlugin.PR_DISABLABLE, new Boolean( true ));
defaults.put( WebPlugin.PR_PORT, rss_port );
defaults.put( WebPlugin.PR_ACCESS, rss_access );
@@ -119,12 +119,8 @@ RSSGeneratorPlugin
defaults.put( WebPlugin.PR_ENABLE_KEEP_ALIVE, new Boolean(true));
defaults.put( WebPlugin.PR_HIDE_RESOURCE_CONFIG, new Boolean(true));
defaults.put( WebPlugin.PR_PAIRING_SID, "rss" );
-
- BasicPluginConfigModel config =
- plugin_interface.getUIManager().createBasicPluginConfigModel(
- ConfigSection.SECTION_ROOT, "rss" );
- defaults.put( WebPlugin.PR_CONFIG_MODEL, config );
+ defaults.put( WebPlugin.PR_CONFIG_MODEL_PARAMS, new String[]{ ConfigSection.SECTION_ROOT, "rss" });
}
public static RSSGeneratorPlugin
diff --git a/com/aelitis/azureus/core/speedmanager/impl/SpeedManagerImpl.java b/com/aelitis/azureus/core/speedmanager/impl/SpeedManagerImpl.java
index f73aefa..b25e3e9 100644
--- a/com/aelitis/azureus/core/speedmanager/impl/SpeedManagerImpl.java
+++ b/com/aelitis/azureus/core/speedmanager/impl/SpeedManagerImpl.java
@@ -569,7 +569,8 @@ SpeedManagerImpl
boolean miss = false;
int worst_value = -1;
-
+ int min_value = Integer.MAX_VALUE;
+
int num_values = 0;
int total = 0;
@@ -583,13 +584,18 @@ SpeedManagerImpl
int rtt = round_trip_times[i];
- if ( rtt > 0 ){
+ if ( rtt >= 0 ){
if ( rtt > worst_value ){
worst_value = rtt;
}
+ if ( rtt < min_value ){
+
+ min_value = rtt;
+ }
+
num_values++;
total += rtt;
@@ -620,9 +626,15 @@ SpeedManagerImpl
num_values--;
}
- if ( num_values> 0 ){
+ if ( num_values > 0 ){
+
+ int average = total/num_values;
- addPingHistory( total/num_values, sources_changed );
+ // bias towards min
+
+ average = ( average + min_value ) / 2;
+
+ addPingHistory( average, sources_changed );
}
}
}
diff --git a/com/aelitis/azureus/core/speedmanager/impl/v1/SpeedManagerAlgorithmProviderV1.java b/com/aelitis/azureus/core/speedmanager/impl/v1/SpeedManagerAlgorithmProviderV1.java
index f880eb8..d6c9656 100644
--- a/com/aelitis/azureus/core/speedmanager/impl/v1/SpeedManagerAlgorithmProviderV1.java
+++ b/com/aelitis/azureus/core/speedmanager/impl/v1/SpeedManagerAlgorithmProviderV1.java
@@ -243,7 +243,7 @@ SpeedManagerAlgorithmProviderV1
int rtt = sources[i].getPingTime();
- if ( rtt > 0 && rtt < min_rtt ){
+ if ( rtt >= 0 && rtt < min_rtt ){
min_rtt = rtt;
}
@@ -299,6 +299,10 @@ SpeedManagerAlgorithmProviderV1
int ping_average = ping_total/ping_count;
+ // bias towards min
+
+ ping_average = ( ping_average + min_rtt ) / 2;
+
int running_average = (int)ping_average_history.update( ping_average );
if ( ping_average > max_ping ){
diff --git a/com/aelitis/azureus/core/speedmanager/impl/v3/SpeedManagerAlgorithmProviderV3.java b/com/aelitis/azureus/core/speedmanager/impl/v3/SpeedManagerAlgorithmProviderV3.java
index 143cd3e..b21cc0b 100644
--- a/com/aelitis/azureus/core/speedmanager/impl/v3/SpeedManagerAlgorithmProviderV3.java
+++ b/com/aelitis/azureus/core/speedmanager/impl/v3/SpeedManagerAlgorithmProviderV3.java
@@ -246,7 +246,7 @@ SpeedManagerAlgorithmProviderV3
int rtt = sources[i].getPingTime();
- if ( rtt > 0 && rtt < min_rtt ){
+ if ( rtt >= 0 && rtt < min_rtt ){
min_rtt = rtt;
}
@@ -301,7 +301,11 @@ SpeedManagerAlgorithmProviderV3
}
int ping_average = ping_total/ping_count;
-
+
+ // bias towards min
+
+ ping_average = ( ping_average + min_rtt ) / 2;
+
int running_average = (int)ping_average_history.update( ping_average );
if ( ping_average > max_ping ){
diff --git a/com/aelitis/azureus/core/subs/impl/SubscriptionManagerImpl.java b/com/aelitis/azureus/core/subs/impl/SubscriptionManagerImpl.java
index f8056ab..107ee4a 100644
--- a/com/aelitis/azureus/core/subs/impl/SubscriptionManagerImpl.java
+++ b/com/aelitis/azureus/core/subs/impl/SubscriptionManagerImpl.java
@@ -4217,12 +4217,7 @@ SubscriptionManagerImpl
reportActivity(
String str )
{
- if ( str.indexOf( "found " ) == -1 &&
- str.indexOf( " is dead" ) == -1 &&
- str.indexOf( " is alive" ) == -1){
-
- log( " MagnetDownload: " + str );
- }
+ log( " MagnetDownload: " + str );
}
public void
@@ -4240,8 +4235,15 @@ SubscriptionManagerImpl
sender[0] = address;
}
}
+
+ public boolean
+ verbose()
+ {
+ return( false );
+ }
},
hash,
+ "",
new InetSocketAddress[0],
300*1000 );
diff --git a/com/aelitis/azureus/core/torrent/PlatformTorrentUtils.java b/com/aelitis/azureus/core/torrent/PlatformTorrentUtils.java
index 915a0b6..95e448e 100644
--- a/com/aelitis/azureus/core/torrent/PlatformTorrentUtils.java
+++ b/com/aelitis/azureus/core/torrent/PlatformTorrentUtils.java
@@ -26,6 +26,7 @@ import java.net.URL;
import java.util.*;
import org.gudy.azureus2.core3.download.DownloadManager;
+import org.gudy.azureus2.core3.download.DownloadManagerState;
import org.gudy.azureus2.core3.global.GlobalManager;
import org.gudy.azureus2.core3.torrent.TOTorrent;
import org.gudy.azureus2.core3.torrent.TOTorrentAnnounceURLSet;
@@ -534,49 +535,54 @@ public class PlatformTorrentUtils
return false;
}
- public static boolean isUpdateDM(DownloadManager dm) {
- Boolean oisUpdate = (Boolean) dm.getUserData("isUpdate");
+ public static boolean isAdvancedViewOnly(DownloadManager dm) {
+ Boolean oisUpdate = (Boolean) dm.getUserData("isAdvancedViewOnly");
if (oisUpdate != null) {
return oisUpdate.booleanValue();
}
- boolean isUpdate = true;
- TOTorrent torrent = dm.getTorrent();
- if (torrent == null) {
- isUpdate = false;
- } else {
- URL announceURL = torrent.getAnnounceURL();
-
- if (announceURL != null) {
- String host = announceURL.getHost();
-
- if (!( host.endsWith(AELITIS_HOST_CORE)|| host.endsWith( VUZE_HOST_CORE ))){
- isUpdate = false;
- }
- }
+ boolean advanced_view = true;
+
+ if ( !dm.getDownloadState().getFlag( DownloadManagerState.FLAG_LOW_NOISE )){
- if (isUpdate) {
- TOTorrentAnnounceURLSet[] sets = torrent.getAnnounceURLGroup().getAnnounceURLSets();
-
- for (int i = 0; i < sets.length; i++) {
-
- URL[] urls = sets[i].getAnnounceURLs();
-
- for (int j = 0; j < urls.length; j++) {
-
- String host = urls[j].getHost();
-
- if (!( host.endsWith(AELITIS_HOST_CORE)|| host.endsWith( VUZE_HOST_CORE ))){
- isUpdate = false;
- break;
+ TOTorrent torrent = dm.getTorrent();
+ if (torrent == null) {
+ advanced_view = false;
+ } else {
+ URL announceURL = torrent.getAnnounceURL();
+
+ if (announceURL != null) {
+ String host = announceURL.getHost();
+
+ if (!( host.endsWith(AELITIS_HOST_CORE)|| host.endsWith( VUZE_HOST_CORE ))){
+ advanced_view = false;
+ }
+ }
+
+ if (advanced_view) {
+ TOTorrentAnnounceURLSet[] sets = torrent.getAnnounceURLGroup().getAnnounceURLSets();
+
+ for (int i = 0; i < sets.length; i++) {
+
+ URL[] urls = sets[i].getAnnounceURLs();
+
+ for (int j = 0; j < urls.length; j++) {
+
+ String host = urls[j].getHost();
+
+ if (!( host.endsWith(AELITIS_HOST_CORE)|| host.endsWith( VUZE_HOST_CORE ))){
+ advanced_view = false;
+ break;
+ }
}
}
}
}
}
-
- dm.setUserData("isUpdate", new Boolean(isUpdate));
- return isUpdate;
+
+ dm.setUserData("isAdvancedViewOnly", new Boolean(advanced_view));
+
+ return advanced_view;
}
public static boolean isContentProgressive(TOTorrent torrent) {
@@ -743,7 +749,7 @@ public class PlatformTorrentUtils
return true;
}
boolean opened = getContentMapLong(torrent, TOR_AZ_PROP_OPENED, -1) > 0;
- if (opened || isUpdateDM(dm)) {
+ if (opened || isAdvancedViewOnly(dm)) {
return true;
}
diff --git a/com/aelitis/azureus/core/monitoring/thread/AEThreadMonitor.java b/com/aelitis/azureus/core/util/AEThreadMonitor.java
similarity index 99%
rename from com/aelitis/azureus/core/monitoring/thread/AEThreadMonitor.java
rename to com/aelitis/azureus/core/util/AEThreadMonitor.java
index c1fc3cf..4afb036 100644
--- a/com/aelitis/azureus/core/monitoring/thread/AEThreadMonitor.java
+++ b/com/aelitis/azureus/core/util/AEThreadMonitor.java
@@ -20,7 +20,7 @@
*
*/
-package com.aelitis.azureus.core.monitoring.thread;
+package com.aelitis.azureus.core.util;
import java.io.PrintWriter;
import java.io.StringWriter;
diff --git a/com/aelitis/azureus/core/util/CopyOnWriteList.java b/com/aelitis/azureus/core/util/CopyOnWriteList.java
index 74e8eb2..300c770 100644
--- a/com/aelitis/azureus/core/util/CopyOnWriteList.java
+++ b/com/aelitis/azureus/core/util/CopyOnWriteList.java
@@ -127,6 +127,16 @@ implements Iterable<T>
}
}
+ public T
+ get(
+ int index )
+ {
+ synchronized( this ){
+
+ return( list.get(index));
+ }
+ }
+
public boolean
remove(
T obj )
diff --git a/com/aelitis/azureus/core/util/DNSUtils.java b/com/aelitis/azureus/core/util/DNSUtils.java
index 932b230..fbeee55 100644
--- a/com/aelitis/azureus/core/util/DNSUtils.java
+++ b/com/aelitis/azureus/core/util/DNSUtils.java
@@ -21,9 +21,17 @@
package com.aelitis.azureus.core.util;
+import java.net.Inet6Address;
+import java.net.InetAddress;
+import java.net.UnknownHostException;
+import java.util.ArrayList;
import java.util.Hashtable;
+import java.util.List;
+import javax.naming.NamingEnumeration;
import javax.naming.NamingException;
+import javax.naming.directory.Attribute;
+import javax.naming.directory.Attributes;
import javax.naming.directory.DirContext;
import javax.naming.directory.InitialDirContext;
@@ -43,9 +51,67 @@ DNSUtils
{
Hashtable env = new Hashtable();
- env.put("java.naming.factory.initial", getFactory());
+ env.put ("java.naming.factory.initial", getFactory());
- return( new InitialDirContext(env));
+ return( new InitialDirContext( env ));
}
+
+ public static Inet6Address
+ getIPV6ByName(
+ String host )
+
+ throws UnknownHostException
+ {
+ List<Inet6Address> all = getAllIPV6ByName( host );
+
+ return( all.get(0));
+ }
+
+ public static List<Inet6Address>
+ getAllIPV6ByName(
+ String host )
+
+ throws UnknownHostException
+ {
+ List<Inet6Address> result = new ArrayList<Inet6Address>();
+
+ try{
+ DirContext context = getInitialDirContext();
+
+ Attributes attrs = context.getAttributes( host, new String[]{ "AAAA" });
+
+ if ( attrs != null ){
+
+ Attribute attr = attrs.get( "aaaa" );
+
+ if ( attr != null ){
+
+ NamingEnumeration values = attr.getAll();
+
+ while( values.hasMore()){
+
+ Object value = values.next();
+
+ if ( value instanceof String ){
+
+ try{
+ result.add( (Inet6Address)InetAddress.getByName((String)value));
+
+ }catch( Throwable e ){
+ }
+ }
+ }
+ }
+ }
+ }catch( Throwable e ){
+ }
+
+ if ( result.size() > 0 ){
+
+ return( result );
+ }
+
+ throw( new UnknownHostException( host ));
+ }
}
diff --git a/com/aelitis/azureus/core/util/FeatureAvailability.java b/com/aelitis/azureus/core/util/FeatureAvailability.java
index 569c3c5..5375c27 100644
--- a/com/aelitis/azureus/core/util/FeatureAvailability.java
+++ b/com/aelitis/azureus/core/util/FeatureAvailability.java
@@ -34,6 +34,7 @@ FeatureAvailability
private static final long FT_AUTO_SPEED_DEFAULT_CLASSIC = 0x0000000000000008;
private static final long FT_DISABLE_RCM = 0x0000000000000010;
private static final long FT_DISABLE_DHT_REP_V2 = 0x0000000000000020;
+ private static final long FT_DISABLE_MAGNET_SL = 0x0000000000000040;
private static VersionCheckClient vcc = VersionCheckClient.getSingleton();
@@ -84,4 +85,12 @@ FeatureAvailability
return( result );
}
+
+ public static boolean
+ isMagnetSLEnabled()
+ {
+ final boolean result = ( vcc.getFeatureFlags() & FT_DISABLE_MAGNET_SL ) == 0;
+
+ return( result );
+ }
}
diff --git a/com/aelitis/azureus/core/util/Java15Utils.java b/com/aelitis/azureus/core/util/Java15Utils.java
index 299ebc0..15bf705 100644
--- a/com/aelitis/azureus/core/util/Java15Utils.java
+++ b/com/aelitis/azureus/core/util/Java15Utils.java
@@ -22,97 +22,67 @@
package com.aelitis.azureus.core.util;
import java.io.IOException;
+import java.lang.management.ManagementFactory;
+import java.lang.management.ThreadMXBean;
+import java.net.Proxy;
import java.net.URL;
import java.net.URLConnection;
-public class
+
+public class
Java15Utils
{
- private static volatile Java15UtilsProvider provider;
-
- public static boolean
- isAvailable()
- {
- return( provider != null );
- }
+ private static ThreadMXBean thread_bean;
- public static void
- setProvider(
- Java15UtilsProvider _provider )
- {
- provider = _provider;
+ static{
+ try{
+ thread_bean = ManagementFactory.getThreadMXBean();
+
+ }catch( Throwable e ){
+
+ e.printStackTrace();
+ }
}
-
+
public static void
setConnectTimeout(
- URLConnection con,
- int timeout )
+ URLConnection con,
+ int timeout )
{
- if ( provider != null ){
-
- provider.setConnectTimeout( con, timeout );
- }
+ con.setConnectTimeout( timeout );
}
public static void
setReadTimeout(
- URLConnection con,
- int timeout )
+ URLConnection con,
+ int timeout )
{
- if ( provider != null ){
-
- provider.setReadTimeout( con, timeout );
- }
+ con.setReadTimeout( timeout );
}
public static long
getThreadCPUTime()
{
- if ( provider != null ){
+ if ( thread_bean == null ){
- return( provider.getThreadCPUTime());
+ return( 0 );
}
- return( 0 );
+ return( thread_bean.getCurrentThreadCpuTime());
}
public static void
dumpThreads()
{
- if ( provider != null ){
-
- provider.dumpThreads();
- }
+ AEThreadMonitor.dumpThreads();
}
- public static URLConnection openConnectionForceNoProxy(URL url) throws IOException {
- if (provider != null) {
- return provider.openConnectionForceNoProxy(url);
- }
- else {
- return url.openConnection();
- }
- }
+ public static URLConnection
+ openConnectionForceNoProxy(
+ URL url)
- public interface
- Java15UtilsProvider
+ throws IOException
{
- public void
- setConnectTimeout(
- URLConnection con,
- int timeout );
-
- public void
- setReadTimeout(
- URLConnection con,
- int timeout );
-
- public long
- getThreadCPUTime();
-
- public void
- dumpThreads();
-
- public URLConnection openConnectionForceNoProxy(URL url) throws IOException;
+ return url.openConnection(Proxy.NO_PROXY);
}
}
diff --git a/com/aelitis/azureus/core/versioncheck/VersionCheckClient.java b/com/aelitis/azureus/core/versioncheck/VersionCheckClient.java
index 0ff3592..e1ee6fd 100644
--- a/com/aelitis/azureus/core/versioncheck/VersionCheckClient.java
+++ b/com/aelitis/azureus/core/versioncheck/VersionCheckClient.java
@@ -51,6 +51,8 @@ import com.aelitis.azureus.core.impl.AzureusCoreImpl;
import com.aelitis.azureus.core.clientmessageservice.*;
import com.aelitis.azureus.core.networkmanager.admin.NetworkAdmin;
import com.aelitis.azureus.core.networkmanager.admin.NetworkAdminASN;
+import com.aelitis.azureus.core.security.CryptoManagerFactory;
+import com.aelitis.azureus.core.util.DNSUtils;
import com.aelitis.net.udp.uc.PRUDPPacketHandler;
import com.aelitis.net.udp.uc.PRUDPPacketHandlerFactory;
import com.aelitis.net.udp.uc.PRUDPReleasablePacketHandler;
@@ -122,6 +124,7 @@ public class VersionCheckClient {
return( instance );
}
+ private boolean enable_v6;
private boolean prefer_v6;
private Map last_check_data_v4 = null;
@@ -139,15 +142,16 @@ public class VersionCheckClient {
private
VersionCheckClient()
{
- COConfigurationManager.addAndFireParameterListener(
- "IPV6 Prefer Addresses",
+ COConfigurationManager.addAndFireParameterListeners(
+ new String[]{ "IPV6 Prefer Addresses", "IPV6 Enable Support" },
new ParameterListener()
{
public void
parameterChanged(
String name )
{
- prefer_v6 = COConfigurationManager.getBooleanParameter( name );
+ enable_v6 = COConfigurationManager.getBooleanParameter( "IPV6 Enable Support" );
+ prefer_v6 = COConfigurationManager.getBooleanParameter( "IPV6 Prefer Addresses" );
}
});
}
@@ -243,47 +247,50 @@ public class VersionCheckClient {
{
if ( v6 ){
- try { check_mon.enter();
-
- long time_diff = SystemTime.getCurrentTime() - last_check_time_v6;
-
- force = force || time_diff > CACHE_PERIOD || time_diff < 0;
-
- if( last_check_data_v6 == null || last_check_data_v6.size() == 0 || force ) {
- // if we've never checked before then we go ahead even if the "only_if_cached"
- // flag is set as its had not chance of being cached yet!
- if ( only_if_cached && last_check_data_v6 != null ){
- return( new HashMap() );
- }
- try {
- last_check_data_v6 = performVersionCheck( constructVersionCheckMessage( reason ), true, true, true );
-
- if ( last_check_data_v6 != null && last_check_data_v6.size() > 0 ){
-
- COConfigurationManager.setParameter( "versioncheck.cache.v6", last_check_data_v6 );
- }
- }
- catch(SocketException t) {
- // internet is broken
- // Debug.out(t.getClass().getName() + ": " + t.getMessage());
- }
- catch(UnknownHostException t) {
- // dns is broken
- // Debug.out(t.getClass().getName() + ": " + t.getMessage());
- }
- catch( Throwable t ) {
- Debug.out(t);
- last_check_data_v6 = new HashMap();
- }
- }
- else {
- Logger.log(new LogEvent(LOGID, "VersionCheckClient is using "
- + "cached version check info. Using " + last_check_data_v6.size()
- + " reply keys."));
- }
- }
- finally { check_mon.exit(); }
-
+ if ( enable_v6 ){
+
+ try { check_mon.enter();
+
+ long time_diff = SystemTime.getCurrentTime() - last_check_time_v6;
+
+ force = force || time_diff > CACHE_PERIOD || time_diff < 0;
+
+ if( last_check_data_v6 == null || last_check_data_v6.size() == 0 || force ) {
+ // if we've never checked before then we go ahead even if the "only_if_cached"
+ // flag is set as its had not chance of being cached yet!
+ if ( only_if_cached && last_check_data_v6 != null ){
+ return( new HashMap() );
+ }
+ try {
+ last_check_data_v6 = performVersionCheck( constructVersionCheckMessage( reason ), true, true, true );
+
+ if ( last_check_data_v6 != null && last_check_data_v6.size() > 0 ){
+
+ COConfigurationManager.setParameter( "versioncheck.cache.v6", last_check_data_v6 );
+ }
+ }
+ catch(SocketException t) {
+ // internet is broken
+ // Debug.out(t.getClass().getName() + ": " + t.getMessage());
+ }
+ catch(UnknownHostException t) {
+ // dns is broken
+ // Debug.out(t.getClass().getName() + ": " + t.getMessage());
+ }
+ catch( Throwable t ) {
+ Debug.out(t);
+ last_check_data_v6 = new HashMap();
+ }
+ }
+ else {
+ Logger.log(new LogEvent(LOGID, "VersionCheckClient is using "
+ + "cached version check info. Using " + last_check_data_v6.size()
+ + " reply keys."));
+ }
+ }
+ finally { check_mon.exit(); }
+ }
+
if( last_check_data_v6 == null ) last_check_data_v6 = new HashMap();
return last_check_data_v6;
@@ -638,7 +645,12 @@ public class VersionCheckClient {
throws Exception
{
- String host = v6?AZ_MSG_SERVER_ADDRESS_V6:AZ_MSG_SERVER_ADDRESS_V4;
+ if ( v6 && !enable_v6 ){
+
+ throw( new Exception( "IPv6 is disabled" ));
+ }
+
+ String host = getHost( v6, AZ_MSG_SERVER_ADDRESS_V6, AZ_MSG_SERVER_ADDRESS_V4 );
if (Logger.isEnabled())
Logger.log(new LogEvent(LOGID, "VersionCheckClient retrieving "
@@ -674,13 +686,18 @@ public class VersionCheckClient {
throws Exception
{
- String host = v6?HTTP_SERVER_ADDRESS_V6:HTTP_SERVER_ADDRESS_V4;
+ if ( v6 && !enable_v6 ){
+
+ throw( new Exception( "IPv6 is disabled" ));
+ }
+
+ String host = getHost(v6, HTTP_SERVER_ADDRESS_V6, HTTP_SERVER_ADDRESS_V4 );
if (Logger.isEnabled())
Logger.log(new LogEvent(LOGID, "VersionCheckClient retrieving "
+ "version information from " + host + ":" + HTTP_SERVER_PORT + " via HTTP" ));
- String url_str = "http://" + host + (HTTP_SERVER_PORT==80?"":(":" + HTTP_SERVER_PORT)) + "/version?";
+ String url_str = "http://" + (v6?UrlUtils.convertIPV6Host(host):host) + (HTTP_SERVER_PORT==80?"":(":" + HTTP_SERVER_PORT)) + "/version?";
url_str += URLEncoder.encode( new String( BEncoder.encode( data_to_send ), "ISO-8859-1" ), "ISO-8859-1" );
@@ -719,9 +736,9 @@ public class VersionCheckClient {
boolean for_proxy,
boolean v6 )
{
- String host = v6?HTTP_SERVER_ADDRESS_V6:HTTP_SERVER_ADDRESS_V4;
+ String host = getHost( v6, HTTP_SERVER_ADDRESS_V6, HTTP_SERVER_ADDRESS_V4 );
- String get_str = "GET " + (for_proxy?("http://" + host + ":" + HTTP_SERVER_PORT ):"") +"/version?";
+ String get_str = "GET " + (for_proxy?("http://" + (v6?UrlUtils.convertIPV6Host( host ):host ) + ":" + HTTP_SERVER_PORT ):"") +"/version?";
try{
get_str += URLEncoder.encode( new String( BEncoder.encode( content ), "ISO-8859-1" ), "ISO-8859-1" );
@@ -743,7 +760,12 @@ public class VersionCheckClient {
throws Exception
{
- String host = v6?TCP_SERVER_ADDRESS_V6:TCP_SERVER_ADDRESS_V4;
+ if ( v6 && !enable_v6 ){
+
+ throw( new Exception( "IPv6 is disabled" ));
+ }
+
+ String host = getHost(v6, TCP_SERVER_ADDRESS_V6, TCP_SERVER_ADDRESS_V4 );
if (Logger.isEnabled())
Logger.log(new LogEvent(LOGID, "VersionCheckClient retrieving "
@@ -881,7 +903,12 @@ public class VersionCheckClient {
throws Exception
{
- String host = v6?UDP_SERVER_ADDRESS_V6:UDP_SERVER_ADDRESS_V4;
+ if ( v6 && !enable_v6 ){
+
+ throw( new Exception( "IPv6 is disabled" ));
+ }
+
+ String host = getHost( v6, UDP_SERVER_ADDRESS_V6, UDP_SERVER_ADDRESS_V4 );
PRUDPReleasablePacketHandler handler = PRUDPPacketHandlerFactory.getReleasableHandler( bind_port );
@@ -1080,6 +1107,33 @@ public class VersionCheckClient {
return( InetAddress.getByName( new String( address )));
}
+ protected String
+ getHost(
+ boolean v6,
+ String v6_address,
+ String v4_address )
+ {
+ if ( v6 ){
+
+ try{
+ return( InetAddress.getByName( v6_address ).getHostAddress());
+
+ }catch( UnknownHostException e ){
+
+ try{
+ return( DNSUtils.getIPV6ByName(v6_address ).getHostAddress());
+
+ }catch( UnknownHostException f ){
+
+ return( v6_address );
+ }
+ }
+ }else{
+
+ return( v4_address );
+ }
+ }
+
/**
* Construct the default version check message.
* @return message to send
@@ -1135,8 +1189,16 @@ public class VersionCheckClient {
String id = COConfigurationManager.getStringParameter( "ID", null );
if( id != null && send_info ) {
- message.put( "id", id );
+ message.put( "id", id );
+
+ try{
+ byte[] id2 = CryptoManagerFactory.getSingleton().getSecureID();
+ message.put( "id2", id2 );
+
+ }catch( Throwable e ){
+ }
+
if ( last_send_time != -1 && last_send_time < current_send_time ){
// time since last
message.put( "tsl", new Long(current_send_time-last_send_time));
@@ -1303,13 +1365,13 @@ public class VersionCheckClient {
try{
COConfigurationManager.initialise();
- boolean v6= false;
+ boolean v6= true;
// Test connectivity.
if (true) {
- // System.out.println( "UDP: " + getSingleton().getExternalIpAddressUDP(null,0,v6));
- System.out.println( "TCP: " + getSingleton().getExternalIpAddressTCP(null,0,v6));
- // System.out.println( "HTTP: " + getSingleton().getExternalIpAddressHTTP(v6));
+ // System.out.println( "UDP: " + getSingleton().getExternalIpAddressUDP(null,0,v6));
+ // System.out.println( "TCP: " + getSingleton().getExternalIpAddressTCP(null,0,v6));
+ System.out.println( "HTTP: " + getSingleton().getExternalIpAddressHTTP(v6));
}
Map data = constructVersionCheckMessage(VersionCheckClient.REASON_UPDATE_CHECK_START);
diff --git a/com/aelitis/azureus/jdk15/Java15Initialiser.java b/com/aelitis/azureus/jdk15/Java15Initialiser.java
deleted file mode 100644
index aa40905..0000000
--- a/com/aelitis/azureus/jdk15/Java15Initialiser.java
+++ /dev/null
@@ -1,62 +0,0 @@
-/*
- * Created on 24-Apr-2006
- * Created by Paul Gardner
- * Copyright (C) 2006 Aelitis, All Rights Reserved.
- *
- * This program is free software; you can redistribute it and/or
- * modify it under the terms of the GNU General Public License
- * as published by the Free Software Foundation; either version 2
- * of the License, or (at your option) any later version.
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
- * GNU General Public License for more details.
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
- *
- * AELITIS, SAS au capital de 46,603.30 euros
- * 8 Allee Lenotre, La Grille Royale, 78600 Le Mesnil le Roi, France.
- *
- */
-
-package com.aelitis.azureus.jdk15;
-
-import com.aelitis.azureus.core.monitoring.thread.AEThreadMonitor;
-import com.aelitis.azureus.core.util.Java15Utils.Java15UtilsProvider;
-import com.aelitis.azureus.vivaldi.ver2.VivaldiV2PositionProvider;
-
-public class
-Java15Initialiser
-{
- private static Java15UtilsProvider utils_provider;
-
- static{
-
- try{
- // try and pull in a 1.5 class
-
- Class.forName( "java.lang.management.ManagementFactory" );
-
- try{
- utils_provider = new Java15UtilsImpl();
-
- AEThreadMonitor.initialise();
-
- // VivaldiV2PositionProvider.initialise();
-
- }catch( Throwable e ){
-
- e.printStackTrace();
- }
-
- }catch( Throwable e ){
- }
- }
-
- public static Java15UtilsProvider
- getUtilsProvider()
- {
- return( utils_provider );
- }
-}
diff --git a/com/aelitis/azureus/jdk15/Java15UtilsImpl.java b/com/aelitis/azureus/jdk15/Java15UtilsImpl.java
deleted file mode 100644
index 7766c17..0000000
--- a/com/aelitis/azureus/jdk15/Java15UtilsImpl.java
+++ /dev/null
@@ -1,88 +0,0 @@
-/*
- * Created on Feb 11, 2008
- * Created by Paul Gardner
- *
- * Copyright 2008 Vuze, Inc. All rights reserved.
- *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License as published by
- * the Free Software Foundation; version 2 of the License only.
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307, USA.
- */
-
-
-package com.aelitis.azureus.jdk15;
-
-import java.io.IOException;
-import java.lang.management.ManagementFactory;
-import java.lang.management.ThreadMXBean;
-import java.net.Proxy;
-import java.net.URL;
-import java.net.URLConnection;
-
-import com.aelitis.azureus.core.monitoring.thread.AEThreadMonitor;
-import com.aelitis.azureus.core.util.Java15Utils.Java15UtilsProvider;
-
-public class
-Java15UtilsImpl
- implements Java15UtilsProvider
-{
- private ThreadMXBean thread_bean;
-
- public
- Java15UtilsImpl()
- {
- try{
- thread_bean = ManagementFactory.getThreadMXBean();
-
- }catch( Throwable e ){
-
- e.printStackTrace();
- }
- }
-
- public void
- setConnectTimeout(
- URLConnection con,
- int timeout )
- {
- con.setConnectTimeout( timeout );
- }
-
- public void
- setReadTimeout(
- URLConnection con,
- int timeout )
- {
- con.setReadTimeout( timeout );
- }
-
- public long
- getThreadCPUTime()
- {
- if ( thread_bean == null ){
-
- return( 0 );
- }
-
- return( thread_bean.getCurrentThreadCpuTime());
- }
-
- public void
- dumpThreads()
- {
- AEThreadMonitor.dumpThreads();
- }
-
- public URLConnection openConnectionForceNoProxy(URL url) throws IOException {
- return url.openConnection(Proxy.NO_PROXY);
- }
-}
diff --git a/com/aelitis/azureus/plugins/dht/DHTPlugin.java b/com/aelitis/azureus/plugins/dht/DHTPlugin.java
index e8953a2..7ea77bf 100644
--- a/com/aelitis/azureus/plugins/dht/DHTPlugin.java
+++ b/com/aelitis/azureus/plugins/dht/DHTPlugin.java
@@ -871,8 +871,8 @@ DHTPlugin
if ( MAIN_DHT_V6_ENABLE ){
- if ( NetworkAdmin.getSingleton().hasIPV6Potential(false)){
-
+ if ( NetworkAdmin.getSingleton().hasDHTIPV6()){
+
main_v6_dht =
new DHTPluginImpl(
plugin_interface,
diff --git a/com/aelitis/azureus/plugins/extseed/impl/ExternalSeedReaderImpl.java b/com/aelitis/azureus/plugins/extseed/impl/ExternalSeedReaderImpl.java
index 0d063e1..f092f8b 100644
--- a/com/aelitis/azureus/plugins/extseed/impl/ExternalSeedReaderImpl.java
+++ b/com/aelitis/azureus/plugins/extseed/impl/ExternalSeedReaderImpl.java
@@ -27,6 +27,7 @@ import java.util.*;
import org.gudy.azureus2.core3.config.impl.TransferSpeedValidator;
import org.gudy.azureus2.core3.util.AESemaphore;
import org.gudy.azureus2.core3.util.Debug;
+import org.gudy.azureus2.core3.util.HostNameToIPResolver;
import org.gudy.azureus2.core3.util.SystemTime;
import org.gudy.azureus2.plugins.PluginInterface;
import org.gudy.azureus2.plugins.clientid.ClientIDGenerator;
@@ -65,6 +66,9 @@ ExternalSeedReaderImpl
private ExternalSeedPlugin plugin;
private Torrent torrent;
+ private String host;
+ private String ip_use_accessor;
+
private String status;
private boolean active;
@@ -92,7 +96,8 @@ ExternalSeedReaderImpl
private boolean fast_activate;
private int min_availability;
- private int min_speed;
+ private int min_download_speed;
+ private int max_peer_speed;
private long valid_until;
private boolean transient_seed;
@@ -112,14 +117,17 @@ ExternalSeedReaderImpl
ExternalSeedReaderImpl(
ExternalSeedPlugin _plugin,
Torrent _torrent,
+ String _host,
Map _params )
{
plugin = _plugin;
torrent = _torrent;
-
+ host = _host;
+
fast_activate = getBooleanParam( _params, "fast_start", false );
min_availability = getIntParam( _params, "min_avail", 1 ); // default is avail based
- min_speed = getIntParam( _params, "min_speed", 0 );
+ min_download_speed = getIntParam( _params, "min_speed", 0 );
+ max_peer_speed = getIntParam( _params, "max_speed", 0 );
valid_until = getIntParam( _params, "valid_ms", 0 );
if ( valid_until > 0 ){
@@ -153,6 +161,28 @@ ExternalSeedReaderImpl
setActive( null, false );
}
+ public String
+ getIP()
+ {
+ synchronized( host ){
+
+ if ( ip_use_accessor == null ){
+
+ try{
+ ip_use_accessor = HostNameToIPResolver.syncResolve( host ).getHostAddress();
+
+ }catch( Throwable e ){
+
+ ip_use_accessor = host;
+
+ Debug.out( e );
+ }
+ }
+
+ return( ip_use_accessor );
+ }
+ }
+
public Torrent
getTorrent()
{
@@ -385,9 +415,9 @@ ExternalSeedReaderImpl
}
}
- if ( min_speed > 0 ){
+ if ( min_download_speed > 0 ){
- if ( peer_manager.getStats().getDownloadAverage() < min_speed ){
+ if ( peer_manager.getStats().getDownloadAverage() < min_download_speed ){
log( getName() + ": activating as speed is slow" );
@@ -443,13 +473,13 @@ ExternalSeedReaderImpl
}
}
- if ( min_speed > 0 ){
+ if ( min_download_speed > 0 ){
long my_speed = peer.getStats().getDownloadAverage();
long overall_speed = peer_manager.getStats().getDownloadAverage();
- if ( overall_speed - my_speed > 2 * min_speed ){
+ if ( overall_speed - my_speed > 2 * min_download_speed ){
reason += (reason.length()==0?"":", ") + "speed is good";
@@ -498,7 +528,19 @@ ExternalSeedReaderImpl
if ( now - peer_manager_change_time > INITIAL_DELAY && readyToDeactivate( peer_manager, peer )){
- setActive( peer_manager, false );
+ setActive( peer_manager, false );
+
+ }else{
+
+ if ( max_peer_speed > 0 ){
+
+ PeerStats ps = peer.getStats();
+
+ if ( ps != null && ps.getDownloadRateLimit() != max_peer_speed ){
+
+ ps.setDownloadRateLimit( max_peer_speed );
+ }
+ }
}
}else{
@@ -506,6 +548,16 @@ ExternalSeedReaderImpl
if ( readyToActivate( peer_manager, peer, time_since_started )){
+ if ( max_peer_speed > 0 ){
+
+ PeerStats ps = peer.getStats();
+
+ if ( ps != null ){
+
+ ps.setDownloadRateLimit( max_peer_speed );
+ }
+ }
+
setActive( peer_manager, true );
}
}
diff --git a/com/aelitis/azureus/plugins/extseed/impl/getright/ExternalSeedReaderFactoryGetRight.java b/com/aelitis/azureus/plugins/extseed/impl/getright/ExternalSeedReaderFactoryGetRight.java
index 8d2412f..70d8d57 100644
--- a/com/aelitis/azureus/plugins/extseed/impl/getright/ExternalSeedReaderFactoryGetRight.java
+++ b/com/aelitis/azureus/plugins/extseed/impl/getright/ExternalSeedReaderFactoryGetRight.java
@@ -69,6 +69,13 @@ ExternalSeedReaderFactoryGetRight
config.put( "url-list-params", obj );
}
+ obj = torrent.getAdditionalProperty( "url-list-params2" );
+
+ if ( obj != null ){
+
+ config.put( "url-list-params2", obj );
+ }
+
return( getSeedReaders( plugin, download, config ));
}catch( Throwable e ){
@@ -103,12 +110,26 @@ ExternalSeedReaderFactoryGetRight
List readers = new ArrayList();
- Object _params = config.get( "url-list-params" );
+ Object _global_params = config.get( "url-list-params" );
+ Object _specific_params = config.get( "url-list-params2" );
- Map params = _params instanceof Map?(Map)_params:new HashMap();
+ Map global_params = _global_params instanceof Map?(Map)_global_params:new HashMap();
+ List specific_params = _specific_params instanceof List?(List)_specific_params:new ArrayList();
for (int i=0;i<urls.size();i++){
+ Map my_params = global_params;
+
+ if ( i < specific_params.size()){
+
+ Object o = specific_params.get(i);
+
+ if ( o instanceof Map ){
+
+ my_params = (Map)o;
+ }
+ }
+
try{
String url_str = new String((byte[])urls.get(i));
@@ -122,7 +143,7 @@ ExternalSeedReaderFactoryGetRight
if ( protocol.equals( "http" )){
- readers.add( new ExternalSeedReaderGetRight(plugin, download.getTorrent(), url, params ));
+ readers.add( new ExternalSeedReaderGetRight(plugin, download.getTorrent(), url, my_params ));
}else{
@@ -161,15 +182,35 @@ ExternalSeedReaderFactoryGetRight
Map map = torrent.serialiseToMap();
- List urls = new ArrayList();
-
+ /*
+ List urls = (List)map.get( "url-list" );
+
+ if ( urls == null ){
+
+ urls = new ArrayList();
+ }
+
urls.add( "http://127.0.0.1:888/files/%DF%26%5B7w%C9%13I%88%8D%EC%E5b%2C9%0F%8D%0Co%BC/" );
map.put( "url-list", urls);
+ */
+ /*
Map params = new HashMap();
map.put( "url-list-params", params );
+ */
+
+ List params2 = new ArrayList();
+
+ map.put( "url-list-params2", params2 );
+
+ Map x_map = new HashMap();
+
+ x_map.put( "max_speed", new Long(5*1024));
+
+ params2.add( new Long(0));
+ params2.add( x_map );
torrent = TOTorrentFactory.deserialiseFromMap( map );
diff --git a/com/aelitis/azureus/plugins/extseed/impl/getright/ExternalSeedReaderGetRight.java b/com/aelitis/azureus/plugins/extseed/impl/getright/ExternalSeedReaderGetRight.java
index fafc7b4..6e4ca1d 100644
--- a/com/aelitis/azureus/plugins/extseed/impl/getright/ExternalSeedReaderGetRight.java
+++ b/com/aelitis/azureus/plugins/extseed/impl/getright/ExternalSeedReaderGetRight.java
@@ -53,7 +53,6 @@ ExternalSeedReaderGetRight
private static final int TARGET_REQUEST_SIZE_DEFAULT = 256*1024;
private URL url;
- private String ip;
private int port;
private ExternalSeedHTTPDownloader[] http_downloaders;
@@ -76,7 +75,7 @@ ExternalSeedReaderGetRight
throws Exception
{
- super( _plugin, _torrent, _params );
+ super( _plugin, _torrent, _url.getHost(), _params );
int target_request_size = getIntParam( _params, "req_size", TARGET_REQUEST_SIZE_DEFAULT );
@@ -84,7 +83,6 @@ ExternalSeedReaderGetRight
url = _url;
- ip = url.getHost();
port = url.getPort();
if ( port == -1 ){
@@ -178,13 +176,7 @@ ExternalSeedReaderGetRight
{
return( "GR: " + url );
}
-
- public String
- getIP()
- {
- return( ip );
- }
-
+
public int
getPort()
{
diff --git a/com/aelitis/azureus/plugins/extseed/impl/webseed/ExternalSeedReaderFactoryWebSeed.java b/com/aelitis/azureus/plugins/extseed/impl/webseed/ExternalSeedReaderFactoryWebSeed.java
index 1d2d462..8b0fb81 100644
--- a/com/aelitis/azureus/plugins/extseed/impl/webseed/ExternalSeedReaderFactoryWebSeed.java
+++ b/com/aelitis/azureus/plugins/extseed/impl/webseed/ExternalSeedReaderFactoryWebSeed.java
@@ -82,6 +82,17 @@ ExternalSeedReaderFactoryWebSeed
try{
Object obj = config.get( "httpseeds" );
+ // might as well handle case where there's a single entry rather than a list
+
+ if ( obj instanceof byte[] ){
+
+ List l = new ArrayList();
+
+ l.add(obj);
+
+ obj = l;
+ }
+
if ( obj instanceof List ){
List urls = (List)obj;
diff --git a/com/aelitis/azureus/plugins/extseed/impl/webseed/ExternalSeedReaderWebSeed.java b/com/aelitis/azureus/plugins/extseed/impl/webseed/ExternalSeedReaderWebSeed.java
index 4c39c35..48e4b6b 100644
--- a/com/aelitis/azureus/plugins/extseed/impl/webseed/ExternalSeedReaderWebSeed.java
+++ b/com/aelitis/azureus/plugins/extseed/impl/webseed/ExternalSeedReaderWebSeed.java
@@ -43,7 +43,6 @@ ExternalSeedReaderWebSeed
extends ExternalSeedReaderImpl
{
private URL url;
- private String ip;
private int port;
private String url_prefix;
@@ -56,13 +55,12 @@ ExternalSeedReaderWebSeed
URL _url,
Map _params )
{
- super( _plugin, _torrent, _params );
+ super( _plugin, _torrent, _url.getHost(), _params );
supports_503 = getBooleanParam( _params, "supports_503", true );
url = _url;
- ip = url.getHost();
port = url.getPort();
if ( port == -1 ){
@@ -98,13 +96,7 @@ ExternalSeedReaderWebSeed
{
return( "WS: " + url );
}
-
- public String
- getIP()
- {
- return( ip );
- }
-
+
public int
getPort()
{
diff --git a/com/aelitis/azureus/plugins/magnet/MagnetPlugin.java b/com/aelitis/azureus/plugins/magnet/MagnetPlugin.java
index 9c48f51..26d47fa 100644
--- a/com/aelitis/azureus/plugins/magnet/MagnetPlugin.java
+++ b/com/aelitis/azureus/plugins/magnet/MagnetPlugin.java
@@ -26,21 +26,27 @@ import java.io.ByteArrayOutputStream;
import java.io.InputStream;
import java.net.URL;
import java.util.ArrayList;
+import java.util.Arrays;
import java.util.HashSet;
import java.util.List;
import java.util.Map;
import java.util.Set;
import java.net.InetSocketAddress;
import org.eclipse.swt.graphics.Image;
+import org.gudy.azureus2.core3.torrent.TOTorrent;
+import org.gudy.azureus2.core3.torrent.TOTorrentFactory;
import org.gudy.azureus2.core3.util.AEMonitor;
import org.gudy.azureus2.core3.util.AERunnable;
import org.gudy.azureus2.core3.util.AESemaphore;
import org.gudy.azureus2.core3.util.AEThread2;
+import org.gudy.azureus2.core3.util.BEncoder;
import org.gudy.azureus2.core3.util.Base32;
import org.gudy.azureus2.core3.util.ByteFormatter;
import org.gudy.azureus2.core3.util.Debug;
import org.gudy.azureus2.core3.util.DelayedEvent;
import org.gudy.azureus2.core3.util.SystemTime;
+import org.gudy.azureus2.core3.util.TorrentUtils;
+import org.gudy.azureus2.core3.util.UrlUtils;
import org.gudy.azureus2.plugins.*;
import org.gudy.azureus2.plugins.ddb.DistributedDatabase;
import org.gudy.azureus2.plugins.ddb.DistributedDatabaseContact;
@@ -54,14 +60,22 @@ import org.gudy.azureus2.plugins.download.DownloadException;
import org.gudy.azureus2.plugins.torrent.Torrent;
import org.gudy.azureus2.plugins.ui.UIInstance;
import org.gudy.azureus2.plugins.ui.UIManagerListener;
+import org.gudy.azureus2.plugins.ui.config.BooleanParameter;
+import org.gudy.azureus2.plugins.ui.config.ConfigSection;
import org.gudy.azureus2.plugins.ui.menus.MenuItem;
import org.gudy.azureus2.plugins.ui.menus.MenuItemListener;
+import org.gudy.azureus2.plugins.ui.model.BasicPluginConfigModel;
import org.gudy.azureus2.plugins.ui.tables.TableContextMenuItem;
import org.gudy.azureus2.plugins.ui.tables.TableManager;
import org.gudy.azureus2.plugins.ui.tables.TableRow;
+import org.gudy.azureus2.plugins.utils.resourcedownloader.ResourceDownloader;
+import org.gudy.azureus2.plugins.utils.resourcedownloader.ResourceDownloaderAdapter;
+import org.gudy.azureus2.plugins.utils.resourcedownloader.ResourceDownloaderException;
+import org.gudy.azureus2.plugins.utils.resourcedownloader.ResourceDownloaderFactory;
import org.gudy.azureus2.ui.swt.plugins.UISWTInstance;
import com.aelitis.azureus.core.util.CopyOnWriteList;
+import com.aelitis.azureus.core.util.FeatureAvailability;
import com.aelitis.net.magneturi.*;
/**
@@ -72,17 +86,28 @@ import com.aelitis.net.magneturi.*;
public class
MagnetPlugin
implements Plugin
-{
+{
+ private static final String SECONDARY_LOOKUP = "http://magnet.vuze.com/";
+ private static final int SECONDARY_LOOKUP_DELAY = 20*1000;
+ private static final int SECONDARY_LOOKUP_MAX_TIME = 2*60*1000;
+
+ private static final String PLUGIN_NAME = "Magnet URI Handler";
+ private static final String PLUGIN_CONFIGSECTION_ID = "plugins.magnetplugin";
+
private PluginInterface plugin_interface;
private CopyOnWriteList listeners = new CopyOnWriteList();
+ private boolean first_download = true;
+
+ private BooleanParameter secondary_lookup;
+
public static void
load(
PluginInterface plugin_interface )
{
plugin_interface.getPluginProperties().setProperty( "plugin.version", "1.0" );
- plugin_interface.getPluginProperties().setProperty( "plugin.name", "Magnet URI Handler" );
+ plugin_interface.getPluginProperties().setProperty( "plugin.name", PLUGIN_NAME );
}
public void
@@ -91,6 +116,12 @@ MagnetPlugin
{
plugin_interface = _plugin_interface;
+ BasicPluginConfigModel config =
+ plugin_interface.getUIManager().createBasicPluginConfigModel( ConfigSection.SECTION_PLUGINS,
+ PLUGIN_CONFIGSECTION_ID);
+
+ secondary_lookup = config.addBooleanParameter2( "MagnetPlugin.use.lookup.service", "MagnetPlugin.use.lookup.service", true );
+
MenuItemListener listener =
new MenuItemListener()
{
@@ -221,6 +252,7 @@ MagnetPlugin
download(
final MagnetURIHandlerProgressListener muh_listener,
final byte[] hash,
+ final String args,
final InetSocketAddress[] sources,
final long timeout )
@@ -274,8 +306,15 @@ MagnetPlugin
InetSocketAddress address )
{
}
+
+ public boolean
+ verbose()
+ {
+ return( muh_listener.verbose());
+ }
},
hash,
+ args,
sources,
timeout ));
}
@@ -432,14 +471,20 @@ MagnetPlugin
download(
final MagnetPluginProgressListener listener,
final byte[] hash,
+ final String args,
final InetSocketAddress[] sources,
final long timeout )
throws MagnetURIHandlerException
{
try{
- listener.reportActivity( getMessageText( "report.waiting_ddb" ));
-
+ if ( first_download ){
+
+ listener.reportActivity( getMessageText( "report.waiting_ddb" ));
+
+ first_download = false;
+ }
+
final DistributedDatabase db = plugin_interface.getDistributedDatabase();
final List potential_contacts = new ArrayList();
@@ -488,6 +533,8 @@ MagnetPlugin
}else if ( type == DistributedDatabaseEvent.ET_OPERATION_COMPLETE ||
type == DistributedDatabaseEvent.ET_OPERATION_TIMEOUT ){
+ listener.reportActivity( getMessageText( "report.found", String.valueOf( found_set.size())));
+
// now inject any explicit sources
addExplicitSources();
@@ -537,8 +584,11 @@ MagnetPlugin
found_set.add( key );
}
- listener.reportActivity( getMessageText( "report.found", contact.getName()));
-
+ if ( listener.verbose()){
+
+ listener.reportActivity( getMessageText( "report.found", contact.getName()));
+ }
+
try{
potential_contacts_mon.enter();
@@ -559,9 +609,12 @@ MagnetPlugin
{
try{
boolean alive = event.getType() == DistributedDatabaseEvent.ET_OPERATION_COMPLETE;
-
- listener.reportActivity(
+
+ if ( listener.verbose()){
+
+ listener.reportActivity(
getMessageText( alive?"report.alive":"report.dead", contact.getName()));
+ }
try{
potential_contacts_mon.enter();
@@ -623,6 +676,15 @@ MagnetPlugin
long remaining = timeout;
+ long overall_start = SystemTime.getMonotonousTime();
+ boolean sl_enabled = secondary_lookup.getValue() && FeatureAvailability.isMagnetSLEnabled();
+
+ long secondary_lookup_time = -1;
+
+ long last_found = -1;
+
+ final Object[] secondary_result = { null };
+
while( remaining > 0 ){
try{
@@ -638,12 +700,68 @@ MagnetPlugin
potential_contacts_mon.exit();
}
+
- long start = SystemTime.getCurrentTime();
+ while( remaining > 0 ){
- potential_contacts_sem.reserve( remaining );
+ long wait_start = SystemTime.getMonotonousTime();
+
+ boolean got_sem = potential_contacts_sem.reserve( 1000 );
+
+ long now = SystemTime.getMonotonousTime();
+
+ remaining -= ( now - wait_start );
- remaining -= ( SystemTime.getCurrentTime() - start );
+ if ( got_sem ){
+
+ last_found = now;
+
+ break;
+
+ }else{
+
+ if ( sl_enabled ){
+
+ if ( secondary_lookup_time == -1 ){
+
+ long base_time;
+
+ if ( last_found == -1 || now - overall_start > 60*1000 ){
+
+ base_time = overall_start;
+
+ }else{
+
+ base_time = last_found;
+ }
+
+ long time_so_far = now - base_time;
+
+ if ( time_so_far > SECONDARY_LOOKUP_DELAY ){
+
+ secondary_lookup_time = SystemTime.getMonotonousTime();
+
+ doSecondaryLookup( listener, secondary_result, hash, args );
+ }
+ }else{
+
+ try{
+ byte[] torrent = getSecondaryLookupResult( secondary_result );
+
+ if ( torrent != null ){
+
+ return( torrent );
+ }
+ }catch( ResourceDownloaderException e ){
+
+ // ignore, we just continue processing
+ }
+ }
+ }
+
+ continue;
+ }
+ }
DistributedDatabaseContact contact;
boolean live_contact;
@@ -718,9 +836,27 @@ MagnetPlugin
if ( value != null ){
- listener.reportContributor( contact.getAddress());
+ // let's verify the torrent
- return( (byte[])value.getValue(byte[].class));
+ byte[] data = (byte[])value.getValue(byte[].class);
+
+ try{
+ TOTorrent torrent = TOTorrentFactory.deserialiseFromBEncodedByteArray( data );
+
+ if ( Arrays.equals( hash, torrent.getHash())){
+
+ listener.reportContributor( contact.getAddress());
+
+ return( data );
+
+ }else{
+
+ listener.reportActivity( getMessageText( "report.error", "torrent invalid (hash mismatch)" ));
+ }
+ }catch( Throwable e ){
+
+ listener.reportActivity( getMessageText( "report.error", "torrent invalid (decode failed)" ));
+ }
}
}catch( Throwable e ){
@@ -730,6 +866,34 @@ MagnetPlugin
}
}
+ if ( sl_enabled ){
+
+ if ( secondary_lookup_time == -1 ){
+
+ secondary_lookup_time = SystemTime.getMonotonousTime();
+
+ doSecondaryLookup(listener, secondary_result, hash, args );
+ }
+
+ while( SystemTime.getMonotonousTime() - secondary_lookup_time < SECONDARY_LOOKUP_MAX_TIME ){
+
+ try{
+ byte[] torrent = getSecondaryLookupResult( secondary_result );
+
+ if ( torrent != null ){
+
+ return( torrent );
+ }
+
+ Thread.sleep( 500 );
+
+ }catch( ResourceDownloaderException e ){
+
+ break;
+ }
+ }
+ }
+
return( null ); // nothing found
}catch( Throwable e ){
@@ -742,6 +906,98 @@ MagnetPlugin
}
}
+ protected void
+ doSecondaryLookup(
+ final MagnetPluginProgressListener listener,
+ final Object[] result,
+ byte[] hash,
+ String args )
+ {
+ listener.reportActivity( getMessageText( "report.secondarylookup", null ));
+
+ try{
+ ResourceDownloaderFactory rdf = plugin_interface.getUtilities().getResourceDownloaderFactory();
+
+ URL sl_url = new URL( SECONDARY_LOOKUP + "magnetLookup?hash=" + Base32.encode( hash ) + (args.length()==0?"":("&args=" + UrlUtils.encode( args ))));
+
+ ResourceDownloader rd = rdf.create( sl_url );
+
+ rd.addListener(
+ new ResourceDownloaderAdapter()
+ {
+ public boolean
+ completed(
+ ResourceDownloader downloader,
+ InputStream data )
+ {
+ listener.reportActivity( getMessageText( "report.secondarylookup.ok", null ));
+
+ synchronized( result ){
+
+ result[0] = data;
+ }
+
+ return( true );
+ }
+
+ public void
+ failed(
+ ResourceDownloader downloader,
+ ResourceDownloaderException e )
+ {
+ synchronized( result ){
+
+ result[0] = e;
+ }
+
+ listener.reportActivity( getMessageText( "report.secondarylookup.fail" ));
+ }
+ });
+
+ rd.asyncDownload();
+
+ }catch( Throwable e ){
+
+ listener.reportActivity( getMessageText( "report.secondarylookup.fail", Debug.getNestedExceptionMessage( e ) ));
+ }
+ }
+
+ protected byte[]
+ getSecondaryLookupResult(
+ final Object[] result )
+
+ throws ResourceDownloaderException
+ {
+ Object x;
+
+ synchronized( result ){
+
+ x = result[0];
+
+ result[0] = null;
+ }
+
+ if ( x instanceof InputStream ){
+
+ InputStream is = (InputStream)x;
+
+ try{
+ TOTorrent t = TOTorrentFactory.deserialiseFromBEncodedInputStream( is );
+
+ TorrentUtils.setPeerCacheValid( t );
+
+ return( BEncoder.encode( t.serialiseToMap()));
+
+ }catch( Throwable e ){
+ }
+ }else if ( x instanceof ResourceDownloaderException ){
+
+ throw((ResourceDownloaderException)x);
+ }
+
+ return( null );
+ }
+
protected String
getMessageText(
String resource )
diff --git a/com/aelitis/azureus/plugins/magnet/MagnetPluginProgressListener.java b/com/aelitis/azureus/plugins/magnet/MagnetPluginProgressListener.java
index f98042b..64763b1 100644
--- a/com/aelitis/azureus/plugins/magnet/MagnetPluginProgressListener.java
+++ b/com/aelitis/azureus/plugins/magnet/MagnetPluginProgressListener.java
@@ -47,4 +47,7 @@ MagnetPluginProgressListener
public void
reportContributor(
InetSocketAddress address );
+
+ public boolean
+ verbose();
}
diff --git a/com/aelitis/azureus/plugins/net/buddy/BuddyPlugin.java b/com/aelitis/azureus/plugins/net/buddy/BuddyPlugin.java
index 98c80ce..34c6f95 100644
--- a/com/aelitis/azureus/plugins/net/buddy/BuddyPlugin.java
+++ b/com/aelitis/azureus/plugins/net/buddy/BuddyPlugin.java
@@ -3709,11 +3709,7 @@ BuddyPlugin
reportActivity(
String str )
{
- if ( str.indexOf( " found " ) == -1 &&
- str.indexOf( " is dead " ) == -1 ){
-
- log( " MagnetDownload: " + str );
- }
+ log( " MagnetDownload: " + str );
}
public void
@@ -3727,8 +3723,15 @@ BuddyPlugin
InetSocketAddress address )
{
}
+
+ public boolean
+ verbose()
+ {
+ return( false );
+ }
},
hash,
+ "",
new InetSocketAddress[0],
timeout );
diff --git a/com/aelitis/azureus/plugins/tracker/dht/DHTTrackerPlugin.java b/com/aelitis/azureus/plugins/tracker/dht/DHTTrackerPlugin.java
index 52d297c..ff2e418 100644
--- a/com/aelitis/azureus/plugins/tracker/dht/DHTTrackerPlugin.java
+++ b/com/aelitis/azureus/plugins/tracker/dht/DHTTrackerPlugin.java
@@ -2719,7 +2719,12 @@ DHTTrackerPlugin
this_mon.exit();
}
- checkDownloadForRegistration( download, false );
+ // don't do anything if paused as we want things to just continue as they are (we would force an announce here otherwise)
+
+ if ( !download.isPaused()){
+
+ checkDownloadForRegistration( download, false );
+ }
}
public void
diff --git a/com/aelitis/azureus/ui/skin/skin3_constants.properties b/com/aelitis/azureus/ui/skin/skin3_constants.properties
index 2b623bd..da2b05c 100644
--- a/com/aelitis/azureus/ui/skin/skin3_constants.properties
+++ b/com/aelitis/azureus/ui/skin/skin3_constants.properties
@@ -127,20 +127,6 @@ color.search.text.bg=#ffffff
color.search.text.fg=#333333
color.search.text.fg.default=#999999
-#===============================================================================
-#main.area.advancedtab
-#===============================================================================
-
-main.area.advancedtab.type=container
-main.area.advancedtab.onshow.skinviewclass=com.aelitis.azureus.ui.swt.views.skin.SBC_AdvancedView
-main.area.advancedtab.view=advanced
-main.area.advancedtab.attach.left=0,0
-main.area.advancedtab.attach.right=100,0
-main.area.advancedtab.attach.top=0,0
-main.area.advancedtab.attach.bottom=100,0
-#main.area.advancedtab.attach.template=template.tabcontentarea
-#main.area.advancedtab.widgets=main.advancedtab
-
#===============================================================================
#main.area.statusbar
diff --git a/com/aelitis/azureus/ui/swt/browser/BrowserContext.java b/com/aelitis/azureus/ui/swt/browser/BrowserContext.java
index c3dbf55..3829c30 100644
--- a/com/aelitis/azureus/ui/swt/browser/BrowserContext.java
+++ b/com/aelitis/azureus/ui/swt/browser/BrowserContext.java
@@ -41,6 +41,7 @@ import org.gudy.azureus2.plugins.utils.resourcedownloader.ResourceDownloader;
import org.gudy.azureus2.pluginsimpl.local.PluginInitializer;
import org.gudy.azureus2.ui.swt.Utils;
import org.gudy.azureus2.ui.swt.components.shell.ShellFactory;
+import org.gudy.azureus2.ui.swt.mainwindow.TorrentOpener;
import org.gudy.azureus2.ui.swt.shells.MessageBoxShell;
import com.aelitis.azureus.core.messenger.ClientMessageContextImpl;
@@ -118,25 +119,7 @@ public class BrowserContext
browser = _browser;
forceVisibleAfterLoad = _forceVisibleAfterLoad;
widgetWaitIndicator = _widgetWaitingIndicator;
-/*
- BrowserFunction browserFunction = new BrowserFunction(browser, "sendMessageToClient") {
- // @see org.eclipse.swt.browser.BrowserFunction#function(java.lang.Object[])
- public Object function(Object[] arguments) {
- if (arguments == null) {
- debug("sendMessageToClient: arguments null on " + browser.getUrl());
- return null;
- }
- if (arguments.length != 3) {
- debug("sendMessageToClient: # arguments not 3 (" + arguments.length + ") on " + browser.getUrl());
- return null;
- }
- BrowserMessage message = new BrowserMessage((String) arguments[0], (String) arguments[1], (Map<?, ?>) arguments[2]);
- messageDispatcherSWT.dispatch(message);
- return null;
- }
- };
-*/
// System.out.println( "Registered browser context: id=" + getID());
messageDispatcherSWT = new MessageDispatcherSWT(this);
@@ -342,8 +325,9 @@ public class BrowserContext
if (!event.top) {
return;
}
- boolean isWebURL = event.location.startsWith("http://")
- || event.location.startsWith("https://");
+ String location = event.location.toLowerCase();
+ boolean isWebURL = location.startsWith("http://")
+ || location.startsWith("https://");
if (!isWebURL) {
if (event.location.startsWith("res://")) {
fillWithRetry(event.location, "top changed");
@@ -382,8 +366,20 @@ public class BrowserContext
return;
}
- boolean isWebURL = event_location.startsWith("http://")
- || event_location.startsWith("https://");
+
+ String lowerLocation = event_location.toLowerCase();
+ boolean isOurURI = lowerLocation.startsWith("magnet:")
+ || lowerLocation.startsWith("vuze:")
+ || lowerLocation.startsWith("dht:");
+
+ if (isOurURI) {
+ event.doit = false;
+ TorrentOpener.openTorrent(event_location);
+ return;
+ }
+
+ boolean isWebURL = lowerLocation.startsWith("http://")
+ || lowerLocation.startsWith("https://");
if (!isWebURL) {
// we don't get a changed state on non URLs (mailto, javascript, etc)
return;
diff --git a/com/aelitis/azureus/ui/swt/browser/listener/MetaSearchListener.java b/com/aelitis/azureus/ui/swt/browser/listener/MetaSearchListener.java
index 876c6c1..cfe091c 100644
--- a/com/aelitis/azureus/ui/swt/browser/listener/MetaSearchListener.java
+++ b/com/aelitis/azureus/ui/swt/browser/listener/MetaSearchListener.java
@@ -46,7 +46,6 @@ import com.aelitis.azureus.core.AzureusCoreFactory;
import com.aelitis.azureus.core.cnetwork.ContentNetwork;
import com.aelitis.azureus.core.cnetwork.ContentNetworkManagerFactory;
import com.aelitis.azureus.core.custom.CustomizationManagerFactory;
-import com.aelitis.azureus.core.impl.AzureusCoreImpl;
import com.aelitis.azureus.core.messenger.browser.BrowserMessage;
import com.aelitis.azureus.core.messenger.browser.listeners.AbstractBrowserMessageListener;
import com.aelitis.azureus.core.metasearch.*;
@@ -77,6 +76,7 @@ public class MetaSearchListener extends AbstractBrowserMessageListener {
public static final String OP_GET_ENGINES = "get-engines";
public static final String OP_GET_ALL_ENGINES = "get-all-engines";
+ public static final String OP_ENGINE_PREFERRED = "engine-preferred";
public static final String OP_CHANGE_ENGINE_SELECTION = "change-engine-selection";
@@ -253,6 +253,19 @@ public class MetaSearchListener extends AbstractBrowserMessageListener {
search( decodedMap, null );
+ }else if ( OP_ENGINE_PREFERRED.equals( opid )){
+
+ final Map decodedMap = message.getDecodedMap();
+
+ long engine_id = ((Long)decodedMap.get("engine_id")).longValue();
+
+ Engine engine = getEngineFromId( engine_id );
+
+ if ( engine != null ){
+
+ metaSearchManager.getMetaSearch().enginePreferred( engine );
+ }
+
} else if(OP_ENGINE_LOGIN.equals(opid)) {
final Map decodedMap = message.getDecodedMap();
@@ -434,11 +447,9 @@ public class MetaSearchListener extends AbstractBrowserMessageListener {
String subscriptionId = null;
try {
- if(message.isParamObject()) {
- final Map decodedMap = message.getDecodedMap();
+ final Map decodedMap = message.getDecodedMap();
- subscriptionId = ((String)decodedMap.get("subs_id"));
- }
+ subscriptionId = ((String)decodedMap.get("subs_id"));
} catch(Exception e) {
//No parameters
}
@@ -1059,17 +1070,14 @@ public class MetaSearchListener extends AbstractBrowserMessageListener {
});
}else if ( OP_OPEN_SEARCH_RESULTS.equals(opid)){
- Map decodedMap = message.isParamObject() ? message.getDecodedMap()
- : new HashMap();
+ Map decodedMap = message.getDecodedMap();
openCloseSearchDetailsListener.openSearchResults(decodedMap);
}else if ( OP_CLOSE_SEARCH_RESULTS.equals(opid)){
- Map decodedMap = message.isParamObject() ? message.getDecodedMap()
- : new HashMap();
+ Map decodedMap = message.getDecodedMap();
openCloseSearchDetailsListener.closeSearchResults(decodedMap);
}else if(OP_LOAD_TORRENT.equals(opid)) {
- Map decodedMap = message.isParamObject() ? message.getDecodedMap()
- : new HashMap();
+ Map decodedMap = message.getDecodedMap();
String torrentUrl = (String) decodedMap.get( "torrent_url" );
String referer_str = (String) decodedMap.get( "referer_url" );
@@ -1177,7 +1185,7 @@ public class MetaSearchListener extends AbstractBrowserMessageListener {
}else if(OP_CREATE_SUBSCRIPTION.equals(opid)) {
- Map decodedMap = message.isParamObject() ? message.getDecodedMap():new HashMap();
+ Map decodedMap = message.getDecodedMap();
Long tid = (Long) decodedMap.get("tid");
@@ -1221,7 +1229,7 @@ public class MetaSearchListener extends AbstractBrowserMessageListener {
}
}else if( OP_READ_SUBSCRIPTION.equals(opid)){
- Map decodedMap = message.isParamObject() ? message.getDecodedMap():new HashMap();
+ Map decodedMap = message.getDecodedMap();
final Long tid = (Long) decodedMap.get("tid");
@@ -1290,7 +1298,7 @@ public class MetaSearchListener extends AbstractBrowserMessageListener {
}
}else if (OP_UPDATE_SUBSCRIPTION.equals(opid)) {
- Map decodedMap = message.isParamObject() ? message.getDecodedMap():new HashMap();
+ Map decodedMap = message.getDecodedMap();
final Long tid = (Long) decodedMap.get("tid");
@@ -1360,7 +1368,7 @@ public class MetaSearchListener extends AbstractBrowserMessageListener {
}else if (OP_SUBSCRIPTION_SET_AUTODL.equals(opid)){
- Map decodedMap = message.isParamObject() ? message.getDecodedMap():new HashMap();
+ Map decodedMap = message.getDecodedMap();
String sid = (String)decodedMap.get("id");
@@ -1396,7 +1404,7 @@ public class MetaSearchListener extends AbstractBrowserMessageListener {
}else if(OP_READ_SUBSCRIPTION_RESULTS.equals(opid)) {
- Map decodedMap = message.isParamObject() ? message.getDecodedMap():new HashMap();
+ Map decodedMap = message.getDecodedMap();
final Long tid = (Long) decodedMap.get("tid");
@@ -1472,7 +1480,7 @@ public class MetaSearchListener extends AbstractBrowserMessageListener {
}
}else if( OP_DELETE_SUBSCRIPTION_RESULTS.equals(opid)){
- Map decodedMap = message.isParamObject() ? message.getDecodedMap():new HashMap();
+ Map decodedMap = message.getDecodedMap();
String sid = (String)decodedMap.get("id");
@@ -1511,7 +1519,7 @@ public class MetaSearchListener extends AbstractBrowserMessageListener {
}
}else if( OP_MARK_SUBSCRIPTION_RESULTS.equals(opid)){
- Map decodedMap = message.isParamObject() ? message.getDecodedMap():new HashMap();
+ Map decodedMap = message.getDecodedMap();
String sid = (String)decodedMap.get("id");
@@ -1555,7 +1563,7 @@ public class MetaSearchListener extends AbstractBrowserMessageListener {
}
}else if( OP_DOWNLOAD_SUBSCRIPTION.equals(opid)) {
- Map decodedMap = message.isParamObject() ? message.getDecodedMap():new HashMap();
+ Map decodedMap = message.getDecodedMap();
final Long tid = (Long) decodedMap.get("tid");
@@ -1943,6 +1951,8 @@ public class MetaSearchListener extends AbstractBrowserMessageListener {
context.put( Engine.SC_BATCH_PERIOD, "1000" );
+ context.put( Engine.SC_REMOVE_DUP_HASH, "true" );
+
if ( target == null ){
metaSearchManager.getMetaSearch().search( listener, parameters, headers, context, max_per_engine );
diff --git a/com/aelitis/azureus/ui/swt/browser/msg/MessageDispatcherSWT.java b/com/aelitis/azureus/ui/swt/browser/msg/MessageDispatcherSWT.java
index ca1c647..f975fa4 100644
--- a/com/aelitis/azureus/ui/swt/browser/msg/MessageDispatcherSWT.java
+++ b/com/aelitis/azureus/ui/swt/browser/msg/MessageDispatcherSWT.java
@@ -19,62 +19,36 @@
*/
package com.aelitis.azureus.ui.swt.browser.msg;
+import java.util.Collections;
import java.util.HashMap;
import java.util.Map;
import org.eclipse.swt.browser.*;
-import org.gudy.azureus2.core3.util.AEMonitor;
import org.gudy.azureus2.core3.util.AEThread2;
-import org.gudy.azureus2.core3.util.Debug;
import org.gudy.azureus2.ui.swt.Utils;
import com.aelitis.azureus.core.messenger.ClientMessageContext;
import com.aelitis.azureus.core.messenger.browser.BrowserMessage;
import com.aelitis.azureus.core.messenger.browser.BrowserMessageDispatcher;
import com.aelitis.azureus.core.messenger.browser.listeners.BrowserMessageListener;
+import com.aelitis.azureus.util.JSONUtils;
import com.aelitis.azureus.util.UrlFilter;
/**
- * Dispatches messages to listeners registered with unique IDs. Each message sent
- * from the browser must be given a message sequence number that is different
- * from that of the previous message to detect duplicate events.
- * <p/>
- * Messages are in the form
- * <pre> PREFIX DELIM <em><seq-no></em> DELIM <em><listener-id></em> DELIM <em><operation-id></em> DELIM <em><params></em> . . .</pre>
- *
- * For example,
- * <pre> "AZMSG;37;publish;choose-files"</pre>
- *
- * Sequence numbers are unique to each {@link Browser} instance in the UI,
- * and they start at 1, being reset each time an HTML page loads.
- *
- * @author dharkness
- * @created Jul 18, 2006
+ * Dispatches messages to listeners registered with unique IDs.
*/
public class MessageDispatcherSWT
- implements StatusTextListener, TitleListener, BrowserMessageDispatcher
+ implements BrowserMessageDispatcher
{
- public static final String LISTENER_ID = "dispatcher";
-
- public static final String OP_RESET_SEQUENCE = "reset-sequence";
-
- public static final String CONTEXT_LISTENER_ID = "context";
-
- private static final int INITIAL_LAST_SEQUENCE = -1;
-
private ClientMessageContext context;
- private Map listeners = new HashMap();
-
- private int lastSequence = INITIAL_LAST_SEQUENCE;
-
- private String sLastEventText;
-
- private AEMonitor class_mon = new AEMonitor("MessageDispatcher");
+ private Map<String, BrowserMessageListener> listeners = new HashMap<String, BrowserMessageListener>();
private Browser browser;
+ private BrowserFunction browserFunction;
+
/**
* Registers itself as a listener to receive sequence number reset message.
*/
@@ -82,10 +56,44 @@ public class MessageDispatcherSWT
this.context = context;
}
- public void registerBrowser(Browser browser) {
+ public void registerBrowser(final Browser browser) {
this.browser = browser;
- browser.addStatusTextListener(this);
- browser.addTitleListener(this);
+
+ browserFunction = new BrowserFunction(browser, "sendMessageToAZ") {
+ public Object function(Object[] args) {
+ if (args == null) {
+ context.debug("sendMessageToAZ: arguments null on " + browser.getUrl());
+ return null;
+ }
+ if (args.length != 3 && args.length != 2) {
+ context.debug("sendMessageToAZ: # arguments not 2 or 3 (" + args.length + ") on " + browser.getUrl());
+ return null;
+ }
+
+ if (!(args[0] instanceof String)) {
+ context.debug("sendMessageToAZ: Param 1 not String");
+ return null;
+ }
+ if (!(args[1] instanceof String)) {
+ context.debug("sendMessageToAZ: Param 2 not String");
+ return null;
+ }
+ Map params = Collections.EMPTY_MAP;
+ if (args.length == 3) {
+ if (!(args[2] instanceof String)) {
+ context.debug("sendMessageToAZ: Param 3 not String");
+ return null;
+ }
+
+ params = JSONUtils.decodeJSON((String)args[2]);
+ }
+
+
+ BrowserMessage message = new BrowserMessage((String) args[0], (String) args[1], params);
+ dispatch(message);
+ return null;
+ }
+ };
}
/**
@@ -96,8 +104,9 @@ public class MessageDispatcherSWT
* @param browser {@link Browser} which will no longer send messages
*/
public void deregisterBrowser(Browser browser) {
- browser.removeStatusTextListener(this);
- browser.removeTitleListener(this);
+ if (browserFunction != null && !browserFunction.isDisposed()) {
+ browserFunction.dispose();
+ }
}
/**
@@ -111,7 +120,7 @@ public class MessageDispatcherSWT
*/
public synchronized void addListener(BrowserMessageListener listener) {
String id = listener.getId();
- BrowserMessageListener registered = (BrowserMessageListener) listeners.get(id);
+ BrowserMessageListener registered = listeners.get(id);
if (registered != null) {
if (registered != listener) {
throw new IllegalStateException("Listener "
@@ -139,7 +148,7 @@ public class MessageDispatcherSWT
* @param id unique identifier of the listener to be removed
*/
public synchronized void removeListener(String id) {
- BrowserMessageListener removed = (BrowserMessageListener) listeners.remove(id);
+ BrowserMessageListener removed = listeners.remove(id);
if (removed == null) {
// throw new IllegalStateException("No listener is registered for ID " + id);
} else {
@@ -149,56 +158,7 @@ public class MessageDispatcherSWT
// @see com.aelitis.azureus.ui.swt.browser.msg.MessageDispatcher#getListener(java.lang.String)
public BrowserMessageListener getListener(String id) {
- return (BrowserMessageListener) listeners.get(id);
- }
-
- /**
- * Parses the event to see if it's a valid message and dispatches it.
- *
- * @param event contains the message
- *
- * @see org.eclipse.swt.browser.StatusTextListener#changed(org.eclipse.swt.browser.StatusTextEvent)
- */
- public void changed(StatusTextEvent event) {
- if (event.widget.isDisposed() || ((Browser) event.widget).getShell().isDisposed()) {
- return;
- }
- processIncomingMessage(event.text, ((Browser) event.widget).getUrl());
- }
-
- // @see org.eclipse.swt.browser.TitleListener#changed(org.eclipse.swt.browser.TitleEvent)
- public void changed(TitleEvent event) {
- if (event.widget.isDisposed() || ((Browser) event.widget).getShell().isDisposed()) {
- return;
- }
- processIncomingMessage(event.title, ((Browser) event.widget).getUrl());
- }
-
- private void processIncomingMessage(String msg, String referer) {
- if (msg == null) {
- return;
- }
-
- try {
- class_mon.enter();
- if (sLastEventText != null && msg.equals(sLastEventText)) {
- return;
- }
-
- sLastEventText = msg;
- } finally {
- class_mon.exit();
- }
-
- if (msg.startsWith(BrowserMessage.MESSAGE_PREFIX)) {
- try {
- BrowserMessage browserMessage = new BrowserMessage(msg);
- browserMessage.setReferer(referer);
- dispatch(browserMessage);
- } catch (Exception e) {
- Debug.out(e);
- }
- }
+ return listeners.get(id);
}
// @see com.aelitis.azureus.ui.swt.browser.msg.MessageDispatcher#dispatch(com.aelitis.azureus.core.messenger.browser.BrowserMessage)
@@ -223,61 +183,17 @@ public class MessageDispatcherSWT
if ("lightbox-browser".equals(listenerId)) {
listenerId = "display";
}
- if (LISTENER_ID.equals(listenerId)) {
- handleMessage(message);
- } else {
- if (!isValidSequence(message)) {
- context.debug("Ignoring duplicate: " + message);
- } else {
- final BrowserMessageListener listener = getListener(listenerId);
- if (listener == null) {
- context.debug("No listener registered with ID " + listenerId);
- } else {
- new AEThread2("dispatch for " + listenerId, true) {
- public void run() {
- listener.handleMessage(message);
- message.complete(true, true, null);
- }
- }.start();
- }
- }
- }
- }
- // @see com.aelitis.azureus.ui.swt.browser.msg.MessageDispatcher#handleMessage(com.aelitis.azureus.core.messenger.browser.BrowserMessage)
- public void handleMessage(BrowserMessage message) {
- String operationId = message.getOperationId();
- if (OP_RESET_SEQUENCE.equals(operationId)) {
- resetSequence();
+ final BrowserMessageListener listener = getListener(listenerId);
+ if (listener == null) {
+ context.debug("No listener registered with ID " + listenerId);
} else {
- throw new IllegalArgumentException("Unknown operation: " + operationId);
- }
- }
-
- // @see com.aelitis.azureus.ui.swt.browser.msg.MessageDispatcher#isValidSequence(com.aelitis.azureus.core.messenger.browser.BrowserMessage)
- public boolean isValidSequence(BrowserMessage message) {
- int sequence = message.getSequence();
- if (sequence < 0) {
- return true;
- }
-
- if (sequence <= lastSequence) {
- context.debug("Duplicate sequence number: " + sequence + ", last: "
- + lastSequence);
- return false;
+ new AEThread2("dispatch for " + listenerId, true) {
+ public void run() {
+ listener.handleMessage(message);
+ message.complete(true, true, null);
+ }
+ }.start();
}
-
- lastSequence = sequence;
- return true;
- }
-
- /**
- * Resets the sequence number for the given {@link Browser} to 0.
- *
- * @param browser {@link Browser} to reset
- */
- public void resetSequence() {
- context.debug("Reseting sequence number");
- lastSequence = INITIAL_LAST_SEQUENCE;
}
}
diff --git a/com/aelitis/azureus/ui/swt/columns/torrent/ColumnThumbAndName.java b/com/aelitis/azureus/ui/swt/columns/torrent/ColumnThumbAndName.java
index 38c3632..25956c5 100644
--- a/com/aelitis/azureus/ui/swt/columns/torrent/ColumnThumbAndName.java
+++ b/com/aelitis/azureus/ui/swt/columns/torrent/ColumnThumbAndName.java
@@ -46,6 +46,7 @@ import org.gudy.azureus2.ui.swt.views.table.TableCellSWT;
import org.gudy.azureus2.ui.swt.views.table.TableCellSWTPaintListener;
import org.gudy.azureus2.ui.swt.views.table.utils.CoreTableColumn;
+import com.aelitis.azureus.ui.swt.imageloader.ImageLoader;
import com.aelitis.azureus.ui.swt.utils.TorrentUIUtilsV3;
import com.aelitis.azureus.ui.swt.utils.TorrentUIUtilsV3.ContentImageLoadedListener;
@@ -127,24 +128,29 @@ public class ColumnThumbAndName
}
public void refresh(TableCell cell, boolean sortOnlyRefresh) {
- if (sortOnlyRefresh) {
- String name = null;
- DownloadManager dm = (DownloadManager) cell.getDataSource();
- if (dm != null) {
- name = dm.getDisplayName();
- }
- if (name == null) {
- name = "";
- }
-
- cell.setSortValue(name);
+ String name = null;
+ DownloadManager dm = (DownloadManager) cell.getDataSource();
+ if (dm != null) {
+ name = dm.getDisplayName();
}
+ if (name == null) {
+ name = "";
+ }
+
+ cell.setSortValue(name);
}
public void cellPaint(GC gc, final TableCellSWT cell) {
Object ds = cell.getDataSource();
Rectangle cellBounds = cell.getBounds();
+
+ int textX = cellBounds.x;
+
+ if (!showIcon) {
+ cellPaintName(cell, gc, cellBounds, textX);
+ return;
+ }
Image[] imgThumbnail = TorrentUIUtilsV3.getContentImage(ds,
cellBounds.height >= 20,
@@ -158,98 +164,105 @@ public class ColumnThumbAndName
}
});
- if (imgThumbnail == null) {
- // don't need to release a null image
- return;
- }
+ if (imgThumbnail != null && ImageLoader.isRealImage(imgThumbnail[0])) {
+ try {
-
- if (cellBounds.height > 30) {
- cellBounds.y += 1;
- cellBounds.height -= 3;
- }
- Rectangle imgBounds = imgThumbnail[0].getBounds();
-
- int dstWidth;
- int dstHeight;
- if (imgBounds.height > cellBounds.height) {
- dstHeight = cellBounds.height;
- dstWidth = imgBounds.width * cellBounds.height / imgBounds.height;
- } else if (imgBounds.width > cellBounds.width) {
- dstWidth = cellBounds.width - 4;
- dstHeight = imgBounds.height * cellBounds.width / imgBounds.width;
- } else {
- dstWidth = imgBounds.width;
- dstHeight = imgBounds.height;
- }
-
- if (cellBounds.height <= 18) {
- dstWidth = Math.min(dstWidth, cellBounds.height);
- dstHeight = Math.min(dstHeight, cellBounds.height);
- if (imgBounds.width > 16) {
- cellBounds.y++;
- dstHeight -= 2;
- }
- }
+ if (cellBounds.height > 30) {
+ cellBounds.y += 1;
+ cellBounds.height -= 3;
+ }
+ Rectangle imgBounds = imgThumbnail[0].getBounds();
- try {
- gc.setAdvanced(true);
- gc.setInterpolation(SWT.HIGH);
- } catch (Exception e) {
- }
- int x = cellBounds.x;
- int textX = x + dstWidth + 3;
- int minWidth = dstHeight * 7 / 4;
- int imgPad = 0;
- if (dstHeight > 25) {
- if (dstWidth < minWidth) {
- imgPad = ((minWidth - dstWidth + 1) / 2);
- x = cellBounds.x + imgPad;
- textX = cellBounds.x + minWidth + 3;
- }
- }
- if (cellBounds.width - dstWidth - (imgPad * 2) < 100 && dstHeight > 18) {
- dstWidth = Math.min(32, dstHeight);
- x = cellBounds.x + ((32 - dstWidth + 1) / 2);
- dstHeight = imgBounds.height * dstWidth / imgBounds.width;
- textX = cellBounds.x + dstWidth + 3;
- }
- int y = cellBounds.y + ((cellBounds.height - dstHeight + 1) / 2);
- if (dstWidth > 0 && dstHeight > 0 && !imgBounds.isEmpty()) {
- Rectangle dst = new Rectangle(x, y, dstWidth, dstHeight);
- Rectangle lastClipping = gc.getClipping();
- try {
- gc.setClipping(cellBounds);
-
- for (int i = 0; i < imgThumbnail.length; i++) {
- Image image = imgThumbnail[i];
- if (image == null || image.isDisposed()) {
- continue;
+ int dstWidth;
+ int dstHeight;
+ if (imgBounds.height > cellBounds.height) {
+ dstHeight = cellBounds.height;
+ dstWidth = imgBounds.width * cellBounds.height / imgBounds.height;
+ } else if (imgBounds.width > cellBounds.width) {
+ dstWidth = cellBounds.width - 4;
+ dstHeight = imgBounds.height * cellBounds.width / imgBounds.width;
+ } else {
+ dstWidth = imgBounds.width;
+ dstHeight = imgBounds.height;
+ }
+
+ if (cellBounds.height <= 18) {
+ dstWidth = Math.min(dstWidth, cellBounds.height);
+ dstHeight = Math.min(dstHeight, cellBounds.height);
+ if (imgBounds.width > 16) {
+ cellBounds.y++;
+ dstHeight -= 2;
}
- Rectangle srcBounds = image.getBounds();
- if (i == 0) {
- int w = dstWidth;
- int h = dstHeight;
- if (imgThumbnail.length > 1) {
- w = w * 9 / 10;
- h = h * 9 / 10;
+ }
+
+ try {
+ gc.setAdvanced(true);
+ gc.setInterpolation(SWT.HIGH);
+ } catch (Exception e) {
+ }
+ int x = cellBounds.x;
+ textX = x + dstWidth + 3;
+ int minWidth = dstHeight * 7 / 4;
+ int imgPad = 0;
+ if (dstHeight > 25) {
+ if (dstWidth < minWidth) {
+ imgPad = ((minWidth - dstWidth + 1) / 2);
+ x = cellBounds.x + imgPad;
+ textX = cellBounds.x + minWidth + 3;
+ }
+ }
+ if (cellBounds.width - dstWidth - (imgPad * 2) < 100 && dstHeight > 18) {
+ dstWidth = Math.min(32, dstHeight);
+ x = cellBounds.x + ((32 - dstWidth + 1) / 2);
+ dstHeight = imgBounds.height * dstWidth / imgBounds.width;
+ textX = cellBounds.x + dstWidth + 3;
+ }
+ int y = cellBounds.y + ((cellBounds.height - dstHeight + 1) / 2);
+ if (dstWidth > 0 && dstHeight > 0 && !imgBounds.isEmpty()) {
+ Rectangle dst = new Rectangle(x, y, dstWidth, dstHeight);
+ Rectangle lastClipping = gc.getClipping();
+ try {
+ gc.setClipping(cellBounds);
+
+ for (int i = 0; i < imgThumbnail.length; i++) {
+ Image image = imgThumbnail[i];
+ if (image == null || image.isDisposed()) {
+ continue;
+ }
+ Rectangle srcBounds = image.getBounds();
+ if (i == 0) {
+ int w = dstWidth;
+ int h = dstHeight;
+ if (imgThumbnail.length > 1) {
+ w = w * 9 / 10;
+ h = h * 9 / 10;
+ }
+ gc.drawImage(image, srcBounds.x, srcBounds.y, srcBounds.width,
+ srcBounds.height, x, y, w, h);
+ } else {
+ int w = dstWidth * 3 / 8;
+ int h = dstHeight * 3 / 8;
+ gc.drawImage(image, srcBounds.x, srcBounds.y, srcBounds.width,
+ srcBounds.height, x + dstWidth - w, y + dstHeight - h, w, h);
+ }
}
- gc.drawImage(image, srcBounds.x, srcBounds.y, srcBounds.width,
- srcBounds.height, x, y, w, h);
- } else {
- int w = dstWidth * 3 / 8;
- int h = dstHeight * 3 / 8;
- gc.drawImage(image, srcBounds.x, srcBounds.y, srcBounds.width,
- srcBounds.height, x + dstWidth - w, y + dstHeight - h, w, h);
+ } catch (Exception e) {
+ Debug.out(e);
+ } finally {
+ gc.setClipping(lastClipping);
}
}
- } catch (Exception e) {
- Debug.out(e);
- } finally {
- gc.setClipping(lastClipping);
+
+ TorrentUIUtilsV3.releaseContentImage(ds);
+ } catch (Throwable t) {
+ Debug.out(t);
}
}
+
+ cellPaintName(cell, gc, cellBounds, textX);
+ }
+ private void cellPaintName(TableCell cell, GC gc, Rectangle cellBounds, int textX) {
String name = null;
DownloadManager dm = (DownloadManager) cell.getDataSource();
if (dm != null)
@@ -260,8 +273,6 @@ public class ColumnThumbAndName
GCStringPrinter.printString(gc, name, new Rectangle(textX,
cellBounds.y, cellBounds.x + cellBounds.width - textX, cellBounds.height),
true, true, SWT.WRAP);
-
- TorrentUIUtilsV3.releaseContentImage(ds);
}
public String getObfusticatedText(TableCell cell) {
diff --git a/com/aelitis/azureus/ui/swt/columns/utils/TableColumnCreatorV3.java b/com/aelitis/azureus/ui/swt/columns/utils/TableColumnCreatorV3.java
index d04d022..bd044b2 100644
--- a/com/aelitis/azureus/ui/swt/columns/utils/TableColumnCreatorV3.java
+++ b/com/aelitis/azureus/ui/swt/columns/utils/TableColumnCreatorV3.java
@@ -74,10 +74,6 @@ public class TableColumnCreatorV3
tcStatusItem.setShowTrackerErrors( true );
}
}
- ColumnThumbAndName tcColumnNameIcon = (ColumnThumbAndName) mapTCs.get(ColumnThumbAndName.COLUMN_ID);
- if (tcColumnNameIcon != null) {
- tcColumnNameIcon.setShowIcon(false);
- }
if (big) {
ShareRatioItem tcShareRatioItem = (ShareRatioItem) mapTCs.get(ShareRatioItem.COLUMN_ID);
if (tcShareRatioItem != null) {
@@ -124,10 +120,6 @@ public class TableColumnCreatorV3
tcStatusItem.setChangeCellFG(false);
}
}
- ColumnThumbAndName tcColumnNameIcon = (ColumnThumbAndName) mapTCs.get(ColumnThumbAndName.COLUMN_ID);
- if (tcColumnNameIcon != null) {
- tcColumnNameIcon.setShowIcon(false);
- }
if (big) {
ShareRatioItem tcShareRatioItem = (ShareRatioItem) mapTCs.get(ShareRatioItem.COLUMN_ID);
@@ -196,10 +188,6 @@ public class TableColumnCreatorV3
tcStatusItem.setChangeCellFG(false);
}
}
- ColumnThumbAndName tcColumnNameIcon = (ColumnThumbAndName) mapTCs.get(ColumnThumbAndName.COLUMN_ID);
- if (tcColumnNameIcon != null) {
- tcColumnNameIcon.setShowIcon(false);
- }
if (big) {
ShareRatioItem tcShareRatioItem = (ShareRatioItem) mapTCs.get(ShareRatioItem.COLUMN_ID);
if (tcShareRatioItem != null) {
@@ -246,10 +234,6 @@ public class TableColumnCreatorV3
tcStatusItem.setChangeCellFG(false);
}
}
- ColumnThumbAndName tcColumnNameIcon = (ColumnThumbAndName) mapTCs.get(ColumnThumbAndName.COLUMN_ID);
- if (tcColumnNameIcon != null) {
- tcColumnNameIcon.setShowIcon(false);
- }
if (big) {
ShareRatioItem tcShareRatioItem = (ShareRatioItem) mapTCs.get(ShareRatioItem.COLUMN_ID);
if (tcShareRatioItem != null) {
diff --git a/com/aelitis/azureus/ui/swt/content/SBC_RCMView.java b/com/aelitis/azureus/ui/swt/content/SBC_RCMView.java
index 051c5d3..cd76cbc 100644
--- a/com/aelitis/azureus/ui/swt/content/SBC_RCMView.java
+++ b/com/aelitis/azureus/ui/swt/content/SBC_RCMView.java
@@ -405,7 +405,7 @@ SBC_RCMView
public DownloadUrlInfo
getDownloadInfo()
{
- return( new DownloadUrlInfo( TorrentUtils.getMagnetURI( rc.getHash())));
+ return( new DownloadUrlInfo( UrlUtils.getMagnetURI( rc.getHash())));
}
});
}
diff --git a/com/aelitis/azureus/ui/swt/devices/DeviceManagerUI.java b/com/aelitis/azureus/ui/swt/devices/DeviceManagerUI.java
index 477c0bf..1dab65b 100644
--- a/com/aelitis/azureus/ui/swt/devices/DeviceManagerUI.java
+++ b/com/aelitis/azureus/ui/swt/devices/DeviceManagerUI.java
@@ -2082,12 +2082,12 @@ DeviceManagerUI
entry.addListener(
new SideBarDropListener()
{
- public void
+ public boolean
sideBarEntryDrop(
SideBarEntry entry,
Object payload )
{
- handleDrop((TranscodeTarget)device, payload );
+ return handleDrop((TranscodeTarget)device, payload );
}
});
}
@@ -2589,11 +2589,14 @@ DeviceManagerUI
}
}
- public static void
+ public static boolean
handleDrop(
TranscodeTarget target,
final Object payload )
{
+ if (!(payload instanceof String[]) && !(payload instanceof String)) {
+ return false;
+ }
TranscodeChooser deviceChooser = new TranscodeChooser(target) {
public void
@@ -2611,6 +2614,7 @@ DeviceManagerUI
};
deviceChooser.show();
+ return true;
}
protected static void
@@ -2960,12 +2964,12 @@ DeviceManagerUI
entry.addListener(
new SideBarDropListener()
{
- public void
+ public boolean
sideBarEntryDrop(
SideBarEntry entry,
Object payload )
{
- handleDrop(null, payload);
+ return handleDrop(null, payload);
}
});
}
diff --git a/com/aelitis/azureus/ui/swt/devices/DevicesODFTUX.java b/com/aelitis/azureus/ui/swt/devices/DevicesODFTUX.java
index 52dd7d0..9b7b9e9 100644
--- a/com/aelitis/azureus/ui/swt/devices/DevicesODFTUX.java
+++ b/com/aelitis/azureus/ui/swt/devices/DevicesODFTUX.java
@@ -32,6 +32,7 @@ import org.eclipse.swt.widgets.*;
import org.gudy.azureus2.core3.internat.MessageText;
import org.gudy.azureus2.core3.util.AERunnable;
+import org.gudy.azureus2.core3.util.AEThread2;
import org.gudy.azureus2.core3.util.Debug;
import org.gudy.azureus2.ui.swt.Utils;
@@ -64,7 +65,8 @@ DevicesODFTUX
private Font subTitleFont;
private Font textInputFont;
- private Button turnOnButton;
+ private Button turnOnButton;
+ private Label noSpaceWarning;
private String dev_image_key;
private ImageLoader imageLoader;
@@ -77,7 +79,7 @@ DevicesODFTUX
{
device = _device;
- final long avail = device.getSpaceAvailable();
+ final long avail = device.getSpaceAvailable( false );
Utils.execSWTThread(
new AERunnable()
@@ -196,7 +198,7 @@ DevicesODFTUX
populateMain( main, no_space_available );
- populateFooter(footer);
+ populateFooter( footer, no_space_available );
shell.setDefaultButton(turnOnButton);
@@ -268,12 +270,12 @@ DevicesODFTUX
text2.setFont( textInputFont );
text2.setText( MessageText.getString("devices.od.turnon.text2", new String[]{ router_text }));
- Label text3 = new Label(main, SWT.WRAP);
- text3.setBackground( Colors.white );
- text3.setFont( textInputFont );
- text3.setText( MessageText.getString("devices.od.turnon.text3", new String[]{ router_text }));
- text3.setForeground( Colors.red );
- text3.setVisible( no_space_available );
+ noSpaceWarning = new Label(main, SWT.WRAP);
+ noSpaceWarning.setBackground( Colors.white );
+ noSpaceWarning.setFont( textInputFont );
+ noSpaceWarning.setText( MessageText.getString("devices.od.turnon.text3", new String[]{ router_text }));
+ noSpaceWarning.setForeground( Colors.red );
+ noSpaceWarning.setVisible( no_space_available );
Label link = new Label(main, SWT.WRAP);
link.setBackground( Colors.white );
@@ -322,10 +324,10 @@ DevicesODFTUX
data.top = new FormAttachment(text2, 10 );
data.left = new FormAttachment(0);
data.right = new FormAttachment(100);
- text3.setLayoutData(data);
+ noSpaceWarning.setLayoutData(data);
data = new FormData();
- data.top = new FormAttachment(text3, 10 );
+ data.top = new FormAttachment(noSpaceWarning, 10 );
data.left = new FormAttachment(0);
link.setLayoutData(data);
}
@@ -375,7 +377,8 @@ DevicesODFTUX
private void
populateFooter(
- Composite footer)
+ Composite footer,
+ final boolean no_space_available )
{
final Button dont_ask_again = new Button( footer, SWT.CHECK );
dont_ask_again.setText(MessageText.getString("general.dont.ask.again"));
@@ -397,8 +400,8 @@ DevicesODFTUX
FormData data;
data = new FormData();
- data.left = new FormAttachment(0,50);
- data.width = 100;
+ data.left = new FormAttachment(0,45);
+ data.right = new FormAttachment(turnOnButton);
dont_ask_again.setLayoutData(data);
data = new FormData();
@@ -429,7 +432,51 @@ DevicesODFTUX
shell.close();
}
});
-
+
+ turnOnButton.setEnabled( !no_space_available );
+
+ new AEThread2( "scanner", true )
+ {
+ private long last_avail = no_space_available?0:Long.MAX_VALUE;
+
+ public void
+ run()
+ {
+ while( !shell.isDisposed()){
+
+ try{
+ Thread.sleep(10*1000);
+
+ final long avail = device.getSpaceAvailable( true );
+
+ if ( avail != last_avail ){
+
+ last_avail = avail;
+
+ Utils.execSWTThread(
+ new AERunnable()
+ {
+ public void
+ runSupport()
+ {
+ if ( !turnOnButton.isDisposed()){
+
+ turnOnButton.setEnabled( avail > 0 );
+ }
+
+ if ( !noSpaceWarning.isDisposed()){
+
+ noSpaceWarning.setVisible( avail <= 0 );
+ }
+ }
+ });
+ }
+ }catch( Throwable e ){
+ }
+ }
+ }
+ }.start();
+
cancelButton.addListener(
SWT.Selection,
new Listener()
diff --git a/com/aelitis/azureus/ui/swt/extlistener/StimulusRPC.java b/com/aelitis/azureus/ui/swt/extlistener/StimulusRPC.java
index 4879036..a9f2e62 100644
--- a/com/aelitis/azureus/ui/swt/extlistener/StimulusRPC.java
+++ b/com/aelitis/azureus/ui/swt/extlistener/StimulusRPC.java
@@ -20,6 +20,7 @@
package com.aelitis.azureus.ui.swt.extlistener;
+import java.util.Collections;
import java.util.Map;
import org.gudy.azureus2.core3.config.COConfigurationManager;
@@ -85,13 +86,20 @@ public class StimulusRPC
if (context == null) {
return false;
}
- BrowserMessage browserMsg = new BrowserMessage(value);
- context.debug("Received External message: " + browserMsg);
- String opId = browserMsg.getOperationId();
- String lId = browserMsg.getListenerId();
+
+ // AZMSG;x;listener-id;op-id;params
+ String[] splitVal = value.split(";", 5);
+ if (splitVal.length != 5) {
+ return false;
+ }
+ String lId = splitVal[2];
+ String opId = splitVal[3];
+ Map decodedMap = JSONUtils.decodeJSON(splitVal[4]);
+ if (decodedMap == null) {
+ decodedMap = Collections.EMPTY_MAP;
+ }
if (opId.equals(DisplayListener.OP_OPEN_URL)) {
- Map decodedMap = browserMsg.getDecodedMap();
String url = MapUtils.getMapString(decodedMap, "url", null);
if (!decodedMap.containsKey("target")) {
context.debug("no target for url: " + url);
@@ -110,8 +118,7 @@ public class StimulusRPC
// and return the boolean result if we wanted/needed
BrowserMessageDispatcher dispatcher = context.getDispatcher();
if (dispatcher != null) {
- dispatcher.dispatch(browserMsg);
- dispatcher.resetSequence();
+ dispatcher.dispatch(new BrowserMessage(lId, opId, decodedMap));
} else {
context.debug("No dispatcher for StimulusRPC" + opId);
}
@@ -120,7 +127,6 @@ public class StimulusRPC
}
} else if (opId.equals(TorrentListener.OP_LOAD_TORRENT)) {
- Map decodedMap = browserMsg.getDecodedMap();
if (decodedMap.containsKey("b64")) {
String b64 = MapUtils.getMapString(decodedMap, "b64", null);
return TorrentListener.loadTorrentByB64(core, b64);
@@ -165,7 +171,6 @@ public class StimulusRPC
// determines this by the is-ready function
return mainWindow.isReady();
} else if (opId.equals("is-version-ge")) {
- Map decodedMap = browserMsg.getDecodedMap();
if (decodedMap.containsKey("version")) {
String id = MapUtils.getMapString(decodedMap, "id", "client");
String version = MapUtils.getMapString(decodedMap, "version", "");
@@ -178,7 +183,6 @@ public class StimulusRPC
return false;
} else if (opId.equals("is-active-tab")) {
- Map decodedMap = browserMsg.getDecodedMap();
if (decodedMap.containsKey("tab")) {
String tabID = MapUtils.getMapString(decodedMap, "tab", "");
if (tabID.length() > 0) {
@@ -205,17 +209,14 @@ public class StimulusRPC
}
} else if (DisplayListener.DEFAULT_LISTENER_ID.equals(lId)) {
if (DisplayListener.OP_REFRESH_TAB.equals(opId)) {
- Map decodedMap = browserMsg.getDecodedMap();
DisplayListener.refreshTab(MapUtils.getMapString(decodedMap, "browser-id", ""));
} else if (DisplayListener.OP_SWITCH_TO_TAB.equals(opId)) {
- Map decodedMap = browserMsg.getDecodedMap();
DisplayListener.switchToTab(MapUtils.getMapString(decodedMap,
"target", ""), MapUtils.getMapString(decodedMap,
"source-ref", null));
}
} else if (DisplayListener.OP_SHOW_DONATION_WINDOW.equals(lId)) {
- Map decodedMap = browserMsg.getDecodedMap();
DonationWindow.open(true, MapUtils.getMapString(decodedMap,
"source-ref", "SRPC"));
}
@@ -227,11 +228,11 @@ public class StimulusRPC
BrowserMessageDispatcher dispatcher = context.getDispatcher();
if (dispatcher != null) {
- dispatcher.dispatch(browserMsg);
+ dispatcher.dispatch(new BrowserMessage(lId, opId, decodedMap));
}
} else {
- System.err.println("Unhandled external stimulus: " + browserMsg);
+ System.err.println("Unhandled external stimulus: " + value);
}
} catch (Exception e) {
Debug.out(e);
diff --git a/com/aelitis/azureus/ui/swt/shells/main/MainWindow.java b/com/aelitis/azureus/ui/swt/shells/main/MainWindow.java
index fe287f0..aba389e 100644
--- a/com/aelitis/azureus/ui/swt/shells/main/MainWindow.java
+++ b/com/aelitis/azureus/ui/swt/shells/main/MainWindow.java
@@ -20,6 +20,7 @@
package com.aelitis.azureus.ui.swt.shells.main;
import java.io.*;
+import java.lang.reflect.Constructor;
import java.lang.reflect.Method;
import java.net.URLDecoder;
import java.util.*;
@@ -113,12 +114,6 @@ public class MainWindow
private SWTSkin skin;
- private org.gudy.azureus2.ui.swt.mainwindow.MainWindow oldMW_tab;
-
- private org.gudy.azureus2.ui.swt.mainwindow.MainWindow oldMW_SB;
-
- private org.gudy.azureus2.ui.swt.mainwindow.MainWindow oldMainWindow;
-
private MainMenu menu;
private UISWTInstanceImpl uiSWTInstanceImpl;
@@ -1054,24 +1049,14 @@ public class MainWindow
isReady = false;
disposedOrDisposing = true;
- if (oldMainWindow != null) {
- boolean res = oldMainWindow.dispose(bForRestart, bCloseAlreadyInProgress);
- oldMainWindow = null;
-
- if (res == false) {
- disposedOrDisposing = false;
- return false;
- }
- } else {
- if (core != null
- && !UIExitUtilsSWT.canClose(core.getGlobalManager(), bForRestart)) {
- disposedOrDisposing = false;
- return false;
- }
-
- UIExitUtilsSWT.uiShutdown();
+ if (core != null
+ && !UIExitUtilsSWT.canClose(core.getGlobalManager(), bForRestart)) {
+ disposedOrDisposing = false;
+ return false;
}
+ UIExitUtilsSWT.uiShutdown();
+
if (systemTraySWT != null) {
systemTraySWT.dispose();
}
@@ -1255,10 +1240,6 @@ public class MainWindow
}
private void showMainWindow() {
- if (oldMainWindow != null) {
- //oldMainWindow.postPluginSetup(-1, 0);
- }
-
boolean isOSX = org.gudy.azureus2.core3.util.Constants.isOSX;
boolean bEnableTray = COConfigurationManager.getBooleanParameter("Enable System Tray");
boolean bPassworded = COConfigurationManager.getBooleanParameter("Password enabled");
@@ -1283,9 +1264,9 @@ public class MainWindow
if (!isOSX) {
shell.forceActive();
}
- } else if (isOSX) {
- shell.setMinimized(true);
+ } else if (Utils.isCarbon) {
shell.setVisible(true);
+ shell.setMinimized(true);
}
@@ -2038,46 +2019,6 @@ public class MainWindow
}
}
- /**
- *
- */
- private org.gudy.azureus2.ui.swt.mainwindow.MainWindow createOldMainWindow() {
- if (oldMainWindow != null || disposedOrDisposing) {
- return oldMainWindow;
- }
-
- SideBar sideBar = (SideBar) SkinViewManager.getByClass(SideBar.class);
- if (sideBar != null) {
- sideBar.showEntryByID(SideBar.SIDEBAR_SECTION_ADVANCED);
- }
-
- SkinView skinView = SkinViewManager.getByClass(SBC_AdvancedView.class);
- if (skinView instanceof SBC_AdvancedView) {
- oldMainWindow = ((SBC_AdvancedView) skinView).getOldMainWindow();
- }
- return oldMainWindow;
- }
-
- public org.gudy.azureus2.ui.swt.mainwindow.MainWindow getOldMainWindow(
- boolean bForceCreate) {
- if (oldMW_SB == null && bForceCreate) {
- oldMainWindow = createOldMainWindow();
- }
- oldMainWindow = oldMW_SB;
-
- return oldMainWindow;
- }
-
- public UIFunctionsSWT getOldUIFunctions(boolean bCreateOld) {
- if (oldMainWindow == null && bCreateOld) {
- createOldMainWindow();
- }
- if (oldMainWindow != null) {
- return oldMainWindow.getUIFunctions();
- }
- return null;
- }
-
public UISWTInstance getUISWTInstanceImpl() {
return uiSWTInstanceImpl;
}
@@ -2088,23 +2029,6 @@ public class MainWindow
*/
public void showURL(final String url, String target) {
- if (url.startsWith("AZMSG%3B") && false) {
- try {
- BrowserMessage browserMsg;
- browserMsg = new BrowserMessage(URLDecoder.decode(url, "utf-8"));
- ClientMessageContext context = PlatformMessenger.getClientMessageContext();
- BrowserMessageDispatcher dispatcher = context.getDispatcher();
- if (dispatcher != null) {
- dispatcher.dispatch(browserMsg);
- dispatcher.resetSequence();
- } else {
- browserMsg.debug("no dispatcher for showURL action");
- }
- } catch (UnsupportedEncodingException e) {
- }
- return;
- }
-
if ("_blank".equalsIgnoreCase(target)) {
Utils.launch(url);
return;
@@ -2166,12 +2090,6 @@ public class MainWindow
public boolean isVisible(int windowElement) {
if (windowElement == IMainWindow.WINDOW_ELEMENT_TOOLBAR) {
- /*
- * Only the (embedded) old main window has a toolbar which is available only in Vuze Advanced
- */
- if (null != oldMainWindow) {
- return oldMainWindow.isVisible(windowElement);
- }
} else if (windowElement == IMainWindow.WINDOW_ELEMENT_TOPBAR) {
SWTSkinObject skinObject = skin.getSkinObject(SkinConstants.VIEWID_PLUGINBAR);
if (skinObject != null) {
@@ -2193,12 +2111,6 @@ public class MainWindow
public void setVisible(int windowElement, boolean value) {
if (windowElement == IMainWindow.WINDOW_ELEMENT_TOOLBAR) {
- if (null != oldMainWindow) {
- /*
- * Only the (embedded) old main window has a toolbar which is available only in Vuze Advanced
- */
- oldMainWindow.setVisible(windowElement, value);
- }
} else if (windowElement == IMainWindow.WINDOW_ELEMENT_TOPBAR) {
SWTSkinUtils.setVisibility(skin, SkinConstants.VIEWID_PLUGINBAR
@@ -2217,12 +2129,6 @@ public class MainWindow
public Rectangle getMetrics(int windowElement) {
if (windowElement == IMainWindow.WINDOW_ELEMENT_TOOLBAR) {
- if (null != oldMainWindow) {
- /*
- * Only the (embedded) old main window has a toolbar which is available only in Vuze Advanced
- */
- return oldMainWindow.getMetrics(windowElement);
- }
} else if (windowElement == IMainWindow.WINDOW_ELEMENT_TOPBAR) {
SWTSkinObject skinObject = skin.getSkinObject(SkinConstants.VIEWID_PLUGINBAR);
@@ -2305,6 +2211,9 @@ public class MainWindow
public void openView(final String parentID, final Class cla, String id,
final Object data, final boolean closeable) {
final SideBar sideBar = (SideBar) SkinViewManager.getByClass(SideBar.class);
+ if (sideBar == null) {
+ return;
+ }
if (id == null) {
id = cla.getName();
@@ -2323,56 +2232,39 @@ public class MainWindow
Utils.execSWTThreadLater(0, new AERunnable() {
public void runSupport() {
- if (sideBar != null) {
- if (isOnAdvancedView()) {
- try {
- final IView view = (IView) cla.newInstance();
-
- Tab mainTabSet = oldMainWindow.getMainTabSet();
- mainTabSet.createTabItem(view, true);
- } catch (Exception e) {
- Debug.out(e);
- }
- } else {
- if (sideBar.showEntryByID(_id)) {
- return;
- }
- if (UISWTViewEventListener.class.isAssignableFrom(cla)) {
- try {
- UISWTViewEventListener l = (UISWTViewEventListener) cla.newInstance();
- sideBar.createTreeItemFromEventListener(parentID, null, l, _id,
- closeable, data);
- } catch (Exception e) {
- Debug.out(e);
- }
- } else {
- sideBar.createTreeItemFromIViewClass(parentID, _id, null, cla,
- null, null, data, null, true);
+ if (sideBar.showEntryByID(_id)) {
+ return;
+ }
+ if (UISWTViewEventListener.class.isAssignableFrom(cla)) {
+ UISWTViewEventListener l = null;
+ try {
+ Constructor<?> constructor = cla.getConstructor(new Class[] {
+ data.getClass()
+ });
+ l = (UISWTViewEventListener) constructor.newInstance(new Object[] {
+ data
+ });
+ } catch (Exception e) {
+ }
+ try {
+ if (l == null) {
+ l = (UISWTViewEventListener) cla.newInstance();
}
- sideBar.showEntryByID(_id);
+ sideBar.createTreeItemFromEventListener(parentID, null, l, _id,
+ closeable, data);
+ } catch (Exception e) {
+ Debug.out(e);
}
+ } else {
+ sideBar.createTreeItemFromIViewClass(parentID, _id, null, cla,
+ null, null, data, null, true);
}
+ sideBar.showEntryByID(_id);
}
});
}
- public boolean isOnAdvancedView() {
- SideBar sideBar = (SideBar) SkinViewManager.getByClass(SideBar.class);
- if (sideBar == null) {
- return false;
- }
- SideBarEntrySWT currentSB = sideBar.getCurrentEntry();
- if (currentSB == null) {
- return false;
- }
- if (oldMainWindow != null && currentSB.id != null
- && currentSB.id.equals(SideBar.SIDEBAR_SECTION_ADVANCED)) {
- return true;
- }
- return false;
- }
-
// @see com.aelitis.azureus.ui.swt.views.skin.sidebar.SideBarListener#sidebarItemSelected(com.aelitis.azureus.ui.swt.views.skin.sidebar.SideBarInfoSWT, com.aelitis.azureus.ui.swt.views.skin.sidebar.SideBarInfoSWT)
public void sidebarItemSelected(SideBarEntrySWT newSideBarEntry,
SideBarEntrySWT oldSideBarEntry) {
@@ -2395,20 +2287,6 @@ public class MainWindow
updateMapTrackUsage(id2);
}
- if (newSideBarEntry.id.equals(SideBar.SIDEBAR_SECTION_ADVANCED)
- && oldMW_SB == null) {
- SkinView[] advViews = SkinViewManager.getMultiByClass(SBC_AdvancedView.class);
- if (advViews != null) {
- for (int i = 0; i < advViews.length; i++) {
- SBC_AdvancedView advView = (SBC_AdvancedView) advViews[i];
- if (oldMW_tab == null || advView.getOldMainWindow() != oldMW_tab) {
- oldMW_SB = advView.getOldMainWindow();
- }
- }
- }
- oldMainWindow = oldMW_SB;
- }
-
if (mapTrackUsage != null) {
newSideBarEntry.addListener((SideBarLogIdListener) this);
}
diff --git a/com/aelitis/azureus/ui/swt/shells/main/UIFunctionsImpl.java b/com/aelitis/azureus/ui/swt/shells/main/UIFunctionsImpl.java
index a4401bb..03ce018 100644
--- a/com/aelitis/azureus/ui/swt/shells/main/UIFunctionsImpl.java
+++ b/com/aelitis/azureus/ui/swt/shells/main/UIFunctionsImpl.java
@@ -29,6 +29,8 @@ import org.eclipse.swt.events.PaintListener;
import org.eclipse.swt.graphics.Point;
import org.eclipse.swt.widgets.*;
+import org.gudy.azureus2.core3.config.COConfigurationManager;
+import org.gudy.azureus2.core3.config.ParameterListener;
import org.gudy.azureus2.core3.download.DownloadManager;
import org.gudy.azureus2.core3.internat.MessageText;
import org.gudy.azureus2.core3.logging.LogEvent;
@@ -45,6 +47,7 @@ import org.gudy.azureus2.ui.swt.Utils;
import org.gudy.azureus2.ui.swt.mainwindow.*;
import org.gudy.azureus2.ui.swt.mainwindow.MainWindow;
import org.gudy.azureus2.ui.swt.minibar.AllTransfersBar;
+import org.gudy.azureus2.ui.swt.minibar.MiniBarManager;
import org.gudy.azureus2.ui.swt.plugins.*;
import org.gudy.azureus2.ui.swt.pluginsimpl.UISWTInstanceImpl;
import org.gudy.azureus2.ui.swt.pluginsimpl.UISWTViewImpl;
@@ -104,30 +107,32 @@ public class UIFunctionsImpl
*/
private SWTSkin skin = null;
+ protected boolean isTorrentMenuVisible;
+
/**
* @param window
*/
public UIFunctionsImpl(
com.aelitis.azureus.ui.swt.shells.main.MainWindow window) {
this.mainWindow = window;
+
+ COConfigurationManager.addAndFireParameterListener(
+ "Menu.show.torrent.menu", new ParameterListener() {
+ public void parameterChanged(String parameterName) {
+ isTorrentMenuVisible = COConfigurationManager.getBooleanParameter("Menu.show.torrent.menu");
+ }
+ });
}
// @see com.aelitis.azureus.ui.swt.UIFunctionsSWT#addPluginView(org.gudy.azureus2.plugins.PluginView)
public void addPluginView(PluginView view) {
try {
- UIFunctionsSWT uiFunctions = mainWindow.getOldUIFunctions(false);
- if (uiFunctions == null) {
- pluginViews_mon.enter();
- try {
- mapPluginViews.put(view, null);
- } finally {
- pluginViews_mon.exit();
- }
- return;
+ pluginViews_mon.enter();
+ try {
+ mapPluginViews.put(view, null);
+ } finally {
+ pluginViews_mon.exit();
}
-
- uiFunctions.addPluginView(view);
-
} catch (Exception e) {
Logger.log(new LogEvent(LOGID, "addPluginView", e));
}
@@ -153,19 +158,12 @@ public class UIFunctionsImpl
// @see com.aelitis.azureus.ui.swt.UIFunctionsSWT#addPluginView(org.gudy.azureus2.ui.swt.plugins.UISWTPluginView)
public void addPluginView(UISWTPluginView view) {
try {
- UIFunctionsSWT uiFunctions = mainWindow.getOldUIFunctions(false);
- if (uiFunctions == null) {
- pluginViews_mon.enter();
- try {
- mapPluginViews.put(view, null);
- } finally {
- pluginViews_mon.exit();
- }
- return;
+ pluginViews_mon.enter();
+ try {
+ mapPluginViews.put(view, null);
+ } finally {
+ pluginViews_mon.exit();
}
-
- uiFunctions.addPluginView(view);
-
} catch (Exception e) {
Logger.log(new LogEvent(LOGID, "addPluginView", e));
}
@@ -196,12 +194,11 @@ public class UIFunctionsImpl
// @see com.aelitis.azureus.ui.swt.UIFunctionsSWT#closeDownloadBars()
public void closeDownloadBars() {
try {
- UIFunctionsSWT uiFunctions = mainWindow.getOldUIFunctions(false);
- if (uiFunctions == null) {
- return;
- }
-
- uiFunctions.closeDownloadBars();
+ Utils.execSWTThreadLater(0, new AERunnable() {
+ public void runSupport() {
+ MiniBarManager.getManager().closeAll();
+ }
+ });
} catch (Exception e) {
Logger.log(new LogEvent(LOGID, "closeDownloadBars", e));
@@ -212,11 +209,6 @@ public class UIFunctionsImpl
// @see com.aelitis.azureus.ui.swt.UIFunctionsSWT#closePluginView(org.gudy.azureus2.ui.swt.views.IView)
public void closePluginView(IView view) {
try {
- UIFunctionsSWT uiFunctions = mainWindow.getOldUIFunctions(false);
- if (uiFunctions != null) {
- uiFunctions.closePluginView(view);
- }
-
SkinView sideBarView = SkinViewManager.getByClass(SideBar.class);
if (sideBarView instanceof SideBar) {
SideBar sideBar = (SideBar) sideBarView;
@@ -242,11 +234,6 @@ public class UIFunctionsImpl
// @see com.aelitis.azureus.ui.swt.UIFunctionsSWT#closePluginViews(java.lang.String)
public void closePluginViews(String sViewID) {
try {
- UIFunctionsSWT uiFunctions = mainWindow.getOldUIFunctions(false);
- if (uiFunctions != null) {
- uiFunctions.closePluginViews(sViewID);
- }
-
SkinView sideBarView = SkinViewManager.getByClass(SideBar.class);
if (sideBarView instanceof SideBar) {
SideBar sideBar = (SideBar) sideBarView;
@@ -285,13 +272,7 @@ public class UIFunctionsImpl
// @see com.aelitis.azureus.ui.swt.UIFunctionsSWT#getPluginViews()
public UISWTView[] getPluginViews() {
try {
- UIFunctionsSWT uiFunctions = mainWindow.getOldUIFunctions(true);
- if (uiFunctions == null) {
- return new UISWTView[0];
- }
-
- return uiFunctions.getPluginViews();
-
+ return new UISWTView[0];
} catch (Exception e) {
Logger.log(new LogEvent(LOGID, "getPluginViews", e));
}
@@ -369,11 +350,6 @@ public class UIFunctionsImpl
// @see com.aelitis.azureus.ui.UIFunctions#refreshIconBar()
public void refreshIconBar() {
try {
- UIFunctionsSWT uiFunctions = mainWindow.getOldUIFunctions(false);
- if (uiFunctions != null) {
- uiFunctions.refreshIconBar();
- }
-
ToolBarView tb = (ToolBarView) SkinViewManager.getByClass(ToolBarView.class);
if (tb != null) {
tb.refreshCoreToolBarItems();
@@ -390,13 +366,6 @@ public class UIFunctionsImpl
try {
mainWindow.setSelectedLanguageItem();
- UIFunctionsSWT uiFunctions = mainWindow.getOldUIFunctions(false);
- if (uiFunctions == null) {
- return;
- }
-
- uiFunctions.refreshLanguage();
-
} catch (Exception e) {
Logger.log(new LogEvent(LOGID, "refreshLanguage", e));
}
@@ -406,13 +375,8 @@ public class UIFunctionsImpl
// @see com.aelitis.azureus.ui.UIFunctions#removeManagerView(org.gudy.azureus2.core3.download.DownloadManager)
public void removeManagerView(DownloadManager dm) {
try {
- UIFunctionsSWT uiFunctions = mainWindow.getOldUIFunctions(false);
- if (uiFunctions == null) {
- return;
- }
-
- uiFunctions.removeManagerView(dm);
-
+ // TODO: ????!
+
} catch (Exception e) {
Logger.log(new LogEvent(LOGID, "removeManagerView", e));
}
@@ -422,19 +386,14 @@ public class UIFunctionsImpl
// @see com.aelitis.azureus.ui.swt.UIFunctionsSWT#removePluginView(java.lang.String)
public void removePluginView(String viewID) {
try {
- UIFunctionsSWT uiFunctions = mainWindow.getOldUIFunctions(false);
- if (uiFunctions == null) {
- pluginViews_mon.enter();
- try {
- mapPluginViews.remove(viewID);
- } finally {
- pluginViews_mon.exit();
- }
- PluginsMenuHelper.getInstance().removePluginViews(viewID);
- return;
- }
- uiFunctions.removePluginView(viewID);
+ pluginViews_mon.enter();
+ try {
+ mapPluginViews.remove(viewID);
+ } finally {
+ pluginViews_mon.exit();
+ }
+ PluginsMenuHelper.getInstance().removePluginViews(viewID);
} catch (Exception e) {
Logger.log(new LogEvent(LOGID, "removePluginView", e));
@@ -445,19 +404,14 @@ public class UIFunctionsImpl
// @see com.aelitis.azureus.ui.swt.UIFunctionsSWT#removePluginView(org.gudy.azureus2.ui.swt.plugins.UISWTPluginView)
public void removePluginView(UISWTPluginView view) {
try {
- UIFunctionsSWT uiFunctions = mainWindow.getOldUIFunctions(false);
- if (uiFunctions == null) {
- pluginViews_mon.enter();
- try {
- mapPluginViews.remove(view);
- } finally {
- pluginViews_mon.exit();
- }
- PluginsMenuHelper.getInstance().removePluginView(view, view.getPluginViewName());
- return;
- }
- uiFunctions.removePluginView(view);
+ pluginViews_mon.enter();
+ try {
+ mapPluginViews.remove(view);
+ } finally {
+ pluginViews_mon.exit();
+ }
+ PluginsMenuHelper.getInstance().removePluginView(view, view.getPluginViewName());
} catch (Exception e) {
Logger.log(new LogEvent(LOGID, "removePluginView", e));
@@ -510,14 +464,6 @@ public class UIFunctionsImpl
}
private void _openView(int viewID, Object data) {
- if (mainWindow.isOnAdvancedView()) {
- UIFunctionsSWT uiFunctions = mainWindow.getOldUIFunctions(false);
- if (uiFunctions != null) {
- uiFunctions.openView(viewID, data);
- return;
- }
- }
-
switch (viewID) {
case VIEW_CONSOLE:
mainWindow.openView(SideBar.SIDEBAR_SECTION_TOOLS, LoggerView.class,
@@ -724,21 +670,15 @@ public class UIFunctionsImpl
}
public void refreshTorrentMenu() {
+ if (!isTorrentMenuVisible) {
+ return;
+ }
try {
- if (mainWindow.isOnAdvancedView()) {
- UIFunctionsSWT uiFunctions = mainWindow.getOldUIFunctions(false);
-
- if (uiFunctions != null) {
- uiFunctions.refreshTorrentMenu();
- }
- return;
- }
-
Utils.execSWTThread(new AERunnable() {
public void runSupport() {
final MenuItem torrentItem = MenuFactory.findMenuItem(
mainWindow.getMainMenu().getMenu(IMenuConstants.MENU_ID_MENU_BAR),
- MenuFactory.MENU_ID_TORRENT);
+ MenuFactory.MENU_ID_TORRENT, false);
if (null != torrentItem) {
@@ -788,12 +728,6 @@ public class UIFunctionsImpl
// @see com.aelitis.azureus.ui.swt.UIFunctionsSWT#closeAllDetails()
public void closeAllDetails() {
- UIFunctionsSWT uiFunctions = mainWindow.getOldUIFunctions(false);
- if (uiFunctions != null) {
- uiFunctions.closeAllDetails();
- return;
- }
-
SkinView sideBarView = SkinViewManager.getByClass(SideBar.class);
if (sideBarView instanceof SideBar) {
SideBar sideBar = (SideBar) sideBarView;
@@ -811,10 +745,6 @@ public class UIFunctionsImpl
// @see com.aelitis.azureus.ui.swt.UIFunctionsSWT#hasDetailViews()
public boolean hasDetailViews() {
- UIFunctionsSWT uiFunctions = mainWindow.getOldUIFunctions(false);
- if (uiFunctions != null) {
- return uiFunctions.hasDetailViews();
- }
SkinView sideBarView = SkinViewManager.getByClass(SideBar.class);
if (sideBarView instanceof SideBar) {
SideBar sideBar = (SideBar) sideBarView;
diff --git a/com/aelitis/azureus/ui/swt/utils/TorrentUIUtilsV3.java b/com/aelitis/azureus/ui/swt/utils/TorrentUIUtilsV3.java
index 480c8f1..ceadecd 100644
--- a/com/aelitis/azureus/ui/swt/utils/TorrentUIUtilsV3.java
+++ b/com/aelitis/azureus/ui/swt/utils/TorrentUIUtilsV3.java
@@ -393,6 +393,7 @@ public class TorrentUIUtilsV3
}
}, 500);
}
+/**
if ((image == null || image.isDisposed()) && thumbnailUrl != null) {
//System.out.println("get image from " + thumbnailUrl);
image = imageLoader.getUrlImage(thumbnailUrl,
@@ -403,8 +404,9 @@ public class TorrentUIUtilsV3
}
});
//System.out.println("returning " + image + " (url loading)");
- return new Image[] { image };
+ return image == null ? null : new Image[] { image };
}
+**/
if (image == null || image.isDisposed()) {
//System.out.println("build image from files");
DownloadManager dm = DataSourceUtils.getDM(datasource);
@@ -436,9 +438,9 @@ public class TorrentUIUtilsV3
}
if (image == null) {
- imageLoader.addImage(id, ImageLoader.noImage);
+ imageLoader.addImageNoDipose(id, ImageLoader.noImage);
} else {
- imageLoader.addImage(id, image);
+ imageLoader.addImageNoDipose(id, image);
}
} else {
//System.out.println("has mystery image");
diff --git a/com/aelitis/azureus/ui/swt/views/skin/MyTorrentsView_Big.java b/com/aelitis/azureus/ui/swt/views/skin/MyTorrentsView_Big.java
index dda89a7..8d0edf4 100644
--- a/com/aelitis/azureus/ui/swt/views/skin/MyTorrentsView_Big.java
+++ b/com/aelitis/azureus/ui/swt/views/skin/MyTorrentsView_Big.java
@@ -39,7 +39,7 @@ public class MyTorrentsView_Big
public boolean isOurDownloadManager(DownloadManager dm) {
- if (PlatformTorrentUtils.isUpdateDM(dm)) {
+ if (PlatformTorrentUtils.isAdvancedViewOnly(dm)) {
return false;
}
diff --git a/com/aelitis/azureus/ui/swt/views/skin/SBC_AdvancedView.java b/com/aelitis/azureus/ui/swt/views/skin/SBC_AdvancedView.java
deleted file mode 100644
index 8eb3e79..0000000
--- a/com/aelitis/azureus/ui/swt/views/skin/SBC_AdvancedView.java
+++ /dev/null
@@ -1,151 +0,0 @@
-/**
- * Created on Jul 8, 2008
- *
- * Copyright 2008 Vuze, Inc. All rights reserved.
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License as published by
- * the Free Software Foundation; version 2 of the License only.
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
- */
-
-package com.aelitis.azureus.ui.swt.views.skin;
-
-import org.eclipse.swt.SWT;
-import org.eclipse.swt.graphics.Color;
-import org.eclipse.swt.layout.FormAttachment;
-import org.eclipse.swt.layout.FormData;
-import org.eclipse.swt.widgets.Composite;
-import org.eclipse.swt.widgets.Display;
-import org.eclipse.swt.widgets.Label;
-
-import org.gudy.azureus2.core3.util.*;
-import org.gudy.azureus2.ui.swt.Messages;
-import org.gudy.azureus2.ui.swt.Utils;
-import org.gudy.azureus2.ui.swt.mainwindow.IMainMenu;
-import org.gudy.azureus2.ui.swt.mainwindow.MainWindow;
-import org.gudy.azureus2.ui.swt.plugins.UISWTInstance;
-import org.gudy.azureus2.ui.swt.pluginsimpl.UISWTInstanceImpl;
-
-import com.aelitis.azureus.core.AzureusCoreFactory;
-import com.aelitis.azureus.ui.common.updater.UIUpdatable;
-import com.aelitis.azureus.ui.swt.UIFunctionsManagerSWT;
-import com.aelitis.azureus.ui.swt.UIFunctionsSWT;
-import com.aelitis.azureus.ui.swt.shells.main.UIFunctionsImpl;
-import com.aelitis.azureus.ui.swt.skin.SWTSkinObject;
-import com.aelitis.azureus.ui.swt.utils.ColorCache;
-
-/**
- * @author TuxPaper
- * @created Jul 8, 2008
- *
- */
-public class SBC_AdvancedView
- extends SkinView
- implements UIUpdatable
-{
- private MainWindow oldMainWindow;
-
-
- // @see com.aelitis.azureus.ui.swt.views.skin.SkinView#skinObjectInitialShow(com.aelitis.azureus.ui.swt.skin.SWTSkinObject, java.lang.Object)
- public Object skinObjectInitialShow(SWTSkinObject skinObject, Object params) {
- createOldMainWindow();
- return null;
- }
-
- // @see com.aelitis.azureus.ui.swt.utils.UIUpdatable#getUpdateUIName()
- public String getUpdateUIName() {
- return "SB_AdvancedView";
- }
-
- // @see com.aelitis.azureus.ui.swt.utils.UIUpdatable#updateUI()
- public void updateUI() {
- }
-
- private org.gudy.azureus2.ui.swt.mainwindow.MainWindow createOldMainWindow() {
- final UIFunctionsSWT uiFunctions = UIFunctionsManagerSWT.getUIFunctionsSWT();
- final UISWTInstance uiSWTInstance = uiFunctions.getUISWTInstance();
- if (uiSWTInstance == null) {
- System.out.println("This will end only in disaster! "
- + Debug.getCompressedStackTrace());
- }
-
- return (org.gudy.azureus2.ui.swt.mainwindow.MainWindow) Utils.execSWTThreadWithObject(
- "createOldMainWindow", new AERunnableObject() {
-
- public Object runSupport() {
-
- oldMainWindow = null;
- final Composite cArea = (Composite) soMain.getControl();
- Display display = cArea.getDisplay();
-
- final Label lblWait = new Label(cArea, SWT.CENTER);
- FormData formData = new FormData();
- formData.left = new FormAttachment(0, 0);
- formData.right = new FormAttachment(100, 0);
- formData.top = new FormAttachment(0, 0);
- formData.bottom = new FormAttachment(100, 0);
- lblWait.setLayoutData(formData);
- lblWait.setForeground(soMain.getProperties().getColor(
- "color.row.fg"));
- Messages.setLanguageText(lblWait, "v3.MainWindow.view.wait");
- cArea.layout(true);
- lblWait.update();
-
- Color c = display.getSystemColor(SWT.COLOR_WIDGET_BACKGROUND);
- if (Constants.isUnix) {
- // Hack: For some reason, if we set the color of a Composite
- // to the widget background color, it will use the color
- // of the parent composite, even when backgroundmode is
- // INHERIT_NONE
- // The hack fix is to not use the exact color :(
- if (c.getRed() > 0) {
- c = ColorCache.getColor(display, c.getRed() - 1, c.getGreen(),
- c.getBlue());
- } else {
- c = ColorCache.getColor(display, c.getRed() + 1, c.getGreen(),
- c.getBlue());
- }
- }
- cArea.setBackground(c);
-
- oldMainWindow = new org.gudy.azureus2.ui.swt.mainwindow.MainWindow(
- AzureusCoreFactory.getSingleton(), null, cArea.getShell(),
- cArea, (UISWTInstanceImpl) uiSWTInstance);
- oldMainWindow.setShowMainWindow(false);
- oldMainWindow.runSupport();
-
- Utils.execSWTThreadLater(10, new AERunnable() {
- public void runSupport() {
- oldMainWindow.postPluginSetup(-1, 0);
-
-
- Object menu = cArea.getShell().getData("MainMenu");
- if (menu instanceof IMainMenu) {
- oldMainWindow.setMainMenu((IMainMenu) menu);
- }
-
- ((UIFunctionsImpl) uiFunctions).oldMainWindowInitialized(oldMainWindow);
-
- lblWait.dispose();
- cArea.layout(true);
- }
- });
-
- return oldMainWindow;
- }
-
- }, 0);
- }
-
- public MainWindow getOldMainWindow() {
- return oldMainWindow;
- }
-}
diff --git a/com/aelitis/azureus/ui/swt/views/skin/SBC_LibraryView.java b/com/aelitis/azureus/ui/swt/views/skin/SBC_LibraryView.java
index 863983a..86fcafb 100644
--- a/com/aelitis/azureus/ui/swt/views/skin/SBC_LibraryView.java
+++ b/com/aelitis/azureus/ui/swt/views/skin/SBC_LibraryView.java
@@ -485,7 +485,7 @@ public class SBC_LibraryView
final GlobalManager gm = core.getGlobalManager();
final DownloadManagerListener dmListener = new DownloadManagerAdapter() {
public void stateChanged(DownloadManager dm, int state) {
- if (PlatformTorrentUtils.isUpdateDM(dm)) {
+ if (PlatformTorrentUtils.isAdvancedViewOnly(dm)) {
return;
}
if (dm.getAssumedComplete()) {
@@ -535,7 +535,7 @@ public class SBC_LibraryView
}
public void completionChanged(DownloadManager dm, boolean completed) {
- if (PlatformTorrentUtils.isUpdateDM(dm)) {
+ if (PlatformTorrentUtils.isAdvancedViewOnly(dm)) {
return;
}
if (completed) {
@@ -610,7 +610,7 @@ public class SBC_LibraryView
gm.addListener(new GlobalManagerAdapter() {
public void downloadManagerRemoved(DownloadManager dm) {
- if (PlatformTorrentUtils.isUpdateDM(dm)) {
+ if (PlatformTorrentUtils.isAdvancedViewOnly(dm)) {
return;
}
recountUnopened();
@@ -632,7 +632,7 @@ public class SBC_LibraryView
}
public void downloadManagerAdded(DownloadManager dm) {
- if (PlatformTorrentUtils.isUpdateDM(dm)) {
+ if (PlatformTorrentUtils.isAdvancedViewOnly(dm)) {
return;
}
dm.addListener(dmListener, false);
@@ -658,7 +658,7 @@ public class SBC_LibraryView
List downloadManagers = gm.getDownloadManagers();
for (Iterator iter = downloadManagers.iterator(); iter.hasNext();) {
DownloadManager dm = (DownloadManager) iter.next();
- if (PlatformTorrentUtils.isUpdateDM(dm)) {
+ if (PlatformTorrentUtils.isAdvancedViewOnly(dm)) {
continue;
}
dm.addListener(dmListener, false);
diff --git a/com/aelitis/azureus/ui/swt/views/skin/sidebar/SideBar.java b/com/aelitis/azureus/ui/swt/views/skin/sidebar/SideBar.java
index 4054c61..65a7a21 100644
--- a/com/aelitis/azureus/ui/swt/views/skin/sidebar/SideBar.java
+++ b/com/aelitis/azureus/ui/swt/views/skin/sidebar/SideBar.java
@@ -50,9 +50,7 @@ import org.gudy.azureus2.ui.common.util.MenuItemManager;
import org.gudy.azureus2.ui.swt.MenuBuildUtils;
import org.gudy.azureus2.ui.swt.URLTransfer;
import org.gudy.azureus2.ui.swt.Utils;
-import org.gudy.azureus2.ui.swt.mainwindow.Colors;
-import org.gudy.azureus2.ui.swt.mainwindow.MenuFactory;
-import org.gudy.azureus2.ui.swt.mainwindow.PluginsMenuHelper;
+import org.gudy.azureus2.ui.swt.mainwindow.*;
import org.gudy.azureus2.ui.swt.mainwindow.PluginsMenuHelper.IViewInfo;
import org.gudy.azureus2.ui.swt.mainwindow.PluginsMenuHelper.PluginAddedViewListener;
import org.gudy.azureus2.ui.swt.plugins.UISWTViewEvent;
@@ -114,11 +112,11 @@ public class SideBar
{
private static final boolean END_INDENT = Constants.isLinux || Constants.isWindows2000 || Constants.isWindows9598ME;
- private static final boolean USE_PAINTITEM = Utils.isCocoa;
+ private static final boolean USE_PAINTITEM = Utils.isCocoa || Constants.isWindows;
// Need to use paint even on Cocoa, because there's cases where an area
// will become invalidated and we don't get a paintitem :(
- private static final boolean USE_PAINT = true;
+ private static final boolean USE_PAINT = !Constants.isWindows;
private static final boolean HIDE_NATIVE_EXPANDER = false;
@@ -146,8 +144,6 @@ public class SideBar
public static final String SIDEBAR_SECTION_RELATED_CONTENT = "RelatedContent";
- public static final String SIDEBAR_SECTION_ADVANCED = "Advanced";
-
public static final boolean SHOW_ALL_PLUGINS = false;
public static final boolean SHOW_TOOLS = false;
@@ -169,7 +165,7 @@ public class SideBar
"#1c2056"
};
- private static final boolean DO_OUR_OWN_TREE_INDENT = Utils.isCocoa;
+ private static final boolean DO_OUR_OWN_TREE_INDENT = false;
private SWTSkin skin;
@@ -181,6 +177,8 @@ public class SideBar
private Font fontHeader;
+ private Font font;
+
private SideBarEntrySWT currentSideBarEntry;
private static Map mapTitleInfoToEntry = new LightHashMap();
@@ -559,12 +557,17 @@ public class SideBar
tree.setBackground(bg);
tree.setForeground(fg);
+
+ int fontHeight = 13 + (tree.getItemHeight() > 18 ? tree.getItemHeight() - 18 : 0);
FontData[] fontData = tree.getFont().getFontData();
+ Utils.getFontHeightFromPX(tree.getDisplay(), fontData, null, fontHeight - 1);
+ font = new Font(tree.getDisplay(), fontData);
+ tree.setFont(font);
//fontData[0].setHeight(fontData[0].getHeight() + 1);
fontData[0].setStyle(SWT.BOLD);
//fontData[0].setName("Helvetica");
- Utils.getFontHeightFromPX(tree.getDisplay(), fontData, null, 13);
+ Utils.getFontHeightFromPX(tree.getDisplay(), fontData, null, fontHeight);
fontHeader = new Font(tree.getDisplay(), fontData);
Listener treeListener = new Listener() {
@@ -584,6 +587,10 @@ public class SideBar
event.width = size.x + event.x; // tree.getClientArea().width;
event.x = 0;
}
+
+ if (Constants.isWindows) {
+ event.width = clientWidth - event.x;
+ }
int padding = 4;
//String id = (String) treeItem.getData("Plugin.viewID");
//SideBarEntrySWT entry = getSideBarInfo(id);
@@ -598,7 +605,7 @@ public class SideBar
case SWT.PaintItem: {
if (USE_PAINTITEM) {
String id = (String) ((TreeItem) event.item).getData("Plugin.viewID");
- //System.out.println(event.item + ";" + event.index + ";" + event.detail + ";" + id);
+ //System.out.println("PaintItem: " + event.item + ";" + event.index + ";" + event.detail + ";" + id + ";" + event.getBounds() + ";" + event.gc.getClipping());
SideBarEntrySWT entry = getEntry(id);
paintSideBar(event, entry);
}
@@ -755,6 +762,7 @@ public class SideBar
case SWT.Dispose: {
fontHeader.dispose();
+ font.dispose();
if (dropTarget != null && !dropTarget.isDisposed()) {
dropTarget.dispose();
}
@@ -816,29 +824,26 @@ public class SideBar
// @see org.eclipse.swt.dnd.DropTargetAdapter#dragOver(org.eclipse.swt.dnd.DropTargetEvent)
public void dragOver(DropTargetEvent event) {
- if (!(event.item instanceof TreeItem)) {
- event.detail = DND.DROP_NONE;
- return;
- }
- TreeItem treeItem = (TreeItem) event.item;
-
- String id = (String) treeItem.getData("Plugin.viewID");
- SideBarEntrySWT entry = getEntry(id);
+ TreeItem treeItem = (event.item instanceof TreeItem)
+ ? (TreeItem) event.item : null;
- if (entry.hasDropListeners()) {
- draggingOver = entry;
- if (Constants.isOSX) {
- tree.redraw();
- }
- if ((event.operations & DND.DROP_LINK) > 0)
- event.detail = DND.DROP_LINK;
- else if ((event.operations & DND.DROP_DEFAULT) > 0)
- event.detail = DND.DROP_DEFAULT;
- else if ((event.operations & DND.DROP_COPY) > 0)
- event.detail = DND.DROP_COPY;
+ if (treeItem != null) {
+ String id = (String) treeItem.getData("Plugin.viewID");
+ SideBarEntrySWT entry = getEntry(id);
+
+ draggingOver = entry;
} else {
- event.detail = DND.DROP_NONE;
+ draggingOver = null;
+ }
+ if (Constants.isOSX) {
+ tree.redraw();
}
+ if ((event.operations & DND.DROP_LINK) > 0)
+ event.detail = DND.DROP_LINK;
+ else if ((event.operations & DND.DROP_DEFAULT) > 0)
+ event.detail = DND.DROP_DEFAULT;
+ else if ((event.operations & DND.DROP_COPY) > 0)
+ event.detail = DND.DROP_COPY;
}
// @see org.eclipse.swt.dnd.DropTargetAdapter#dragLeave(org.eclipse.swt.dnd.DropTargetEvent)
@@ -851,6 +856,7 @@ public class SideBar
draggingOver = null;
tree.redraw();
if (!(event.item instanceof TreeItem)) {
+ defaultDrop(event);
return;
}
TreeItem treeItem = (TreeItem) event.item;
@@ -858,7 +864,10 @@ public class SideBar
String id = (String) treeItem.getData("Plugin.viewID");
SideBarEntrySWT entry = getEntry(id);
- entry.triggerDropListeners(event.data);
+ boolean handled = entry.triggerDropListeners(event.data);
+ if (!handled) {
+ defaultDrop(event);
+ }
}
});
@@ -988,6 +997,13 @@ public class SideBar
}
/**
+ * @param event
+ */
+ protected void defaultDrop(DropTargetEvent event) {
+ TorrentOpener.openDroppedTorrents(event, false);
+ }
+
+ /**
* @param menuDropDown
*
* @since 3.1.1.1
@@ -1125,7 +1141,10 @@ public class SideBar
protected void paintSideBar(Event event, SideBarEntrySWT sideBarEntry) {
TreeItem treeItem = (TreeItem) event.item;
Rectangle itemBounds = treeItem.getBounds();
- Rectangle drawBounds = Utils.isCocoa ? event.gc.getClipping() : event.getBounds();
+ Rectangle drawBounds = Utils.isCocoa || Constants.isWindows ? event.gc.getClipping() : event.getBounds();
+ if (drawBounds.isEmpty()) {
+ return;
+ }
String text = (String) treeItem.getData("text");
if (text == null)
@@ -1162,7 +1181,7 @@ public class SideBar
int x1IndicatorOfs = SIDEBAR_SPACING;
int x0IndicatorOfs = itemBounds.x;
- //System.out.println(System.currentTimeMillis() + "] refhres " + sideBarInfo.getId());
+ //System.out.println(System.currentTimeMillis() + "] refresh " + sideBarEntry.getId() + "; " + itemBounds + ";clip=" + event.gc.getClipping() + ";eb=" + event.getBounds());
if (sideBarEntry.titleInfo != null) {
String textIndicator = (String) sideBarEntry.titleInfo.getTitleInfoProperty(ViewTitleInfo.TITLE_INDICATOR_TEXT);
if (textIndicator != null) {
@@ -1509,8 +1528,6 @@ public class SideBar
entry.setImageLeftID("image.sidebar.library");
entry.disableCollapse = true;
- addDropTest(entry);
-
createEntryFromSkinRef(SIDEBAR_SECTION_LIBRARY, SIDEBAR_SECTION_LIBRARY_DL,
"library", MessageText.getString("sidebar.LibraryDL"), null, null,
false, -1);
@@ -1628,11 +1645,6 @@ public class SideBar
loadCloseables();
- if (System.getProperty("v3.sidebar.advanced", "0").equals("1")) {
- createEntryFromSkinRef(null, SIDEBAR_SECTION_ADVANCED,
- "main.area.advancedtab", "Advanced", null, null, false, -1);
- }
-
Composite parent = tree.getParent();
if (parent.isVisible()) {
@@ -1692,7 +1704,7 @@ public class SideBar
return;
}
entry.addListener(new SideBarDropListener() {
- public void sideBarEntryDrop(SideBarEntry entry, Object droppedObject) {
+ public boolean sideBarEntryDrop(SideBarEntry entry, Object droppedObject) {
String s = "You just dropped " + droppedObject.getClass() + "\n"
+ droppedObject + "\n\n";
if (droppedObject.getClass().isArray()) {
@@ -1709,6 +1721,7 @@ public class SideBar
}
}
new MessageBoxShell(SWT.OK, "test", s).open(null);
+ return true;
}
});
@@ -1726,6 +1739,7 @@ public class SideBar
"v3.MainWindow.menu.getting_started").replaceAll("&", ""), null,
null, true, 0);
entry.setImageLeftID("image.sidebar.welcome");
+ addDropTest(entry);
return entry;
}
@@ -2884,13 +2898,7 @@ public class SideBar
itemSelected(entry.treeItem);
return true;
}
- if (id.equals(SIDEBAR_SECTION_ADVANCED)) {
- SideBarEntrySWT entryAdv = createEntryFromSkinRef(null,
- SIDEBAR_SECTION_ADVANCED, "main.area.advancedtab", "Advanced", null,
- null, false, -1);
- itemSelected(entryAdv.treeItem);
- return true;
- } else if (id.equals(SIDEBAR_SECTION_WELCOME)) {
+ if (id.equals(SIDEBAR_SECTION_WELCOME)) {
SideBarEntrySWT entryWelcome = createWelcomeSection();
itemSelected(entryWelcome.treeItem);
return true;
diff --git a/com/aelitis/azureus/ui/swt/views/skin/sidebar/SideBarEntrySWT.java b/com/aelitis/azureus/ui/swt/views/skin/sidebar/SideBarEntrySWT.java
index 0a06210..73c7c6c 100644
--- a/com/aelitis/azureus/ui/swt/views/skin/sidebar/SideBarEntrySWT.java
+++ b/com/aelitis/azureus/ui/swt/views/skin/sidebar/SideBarEntrySWT.java
@@ -412,12 +412,22 @@ public class SideBarEntrySWT implements SideBarEntry
return listDropListeners != null && listDropListeners.size() > 0;
}
- protected void triggerDropListeners(Object o) {
+ /**
+ *
+ * @param o
+ * @return true: handled; false: not handled
+ */
+ protected boolean triggerDropListeners(Object o) {
+ boolean handled = false;
Object[] list = listDropListeners.toArray();
for (int i = 0; i < list.length; i++) {
SideBarDropListener l = (SideBarDropListener) list[i];
- l.sideBarEntryDrop(this, o);
+ handled = l.sideBarEntryDrop(this, o);
+ if (handled) {
+ break;
+ }
}
+ return handled;
}
public String getLogID() {
diff --git a/com/aelitis/azureus/util/ImportExportUtils.java b/com/aelitis/azureus/util/ImportExportUtils.java
index cf494db..7a45058 100644
--- a/com/aelitis/azureus/util/ImportExportUtils.java
+++ b/com/aelitis/azureus/util/ImportExportUtils.java
@@ -160,6 +160,35 @@ public final class ImportExportUtils {
}
public final static void
+ exportFloat(
+ Map map,
+ String key,
+ float value )
+
+ throws IOException
+ {
+ exportString( map, key, String.valueOf( value ));
+ }
+
+ public final static float
+ importFloat(
+ Map map,
+ String key,
+ float def )
+
+ throws IOException
+ {
+ String str = importString( map, key );
+
+ if ( str == null ){
+
+ return( def );
+ }
+
+ return( Float.parseFloat( str ));
+ }
+
+ public final static void
exportBoolean(
Map map,
String key,
diff --git a/com/aelitis/azureus/util/InitialisationFunctions.java b/com/aelitis/azureus/util/InitialisationFunctions.java
index a45fc11..849a122 100644
--- a/com/aelitis/azureus/util/InitialisationFunctions.java
+++ b/com/aelitis/azureus/util/InitialisationFunctions.java
@@ -27,9 +27,7 @@ import java.net.URL;
import com.aelitis.azureus.core.AzureusCore;
import com.aelitis.azureus.core.cnetwork.ContentNetworkManagerFactory;
import com.aelitis.azureus.core.content.AzureusPlatformContentDirectory;
-import com.aelitis.azureus.core.content.RelatedContent;
import com.aelitis.azureus.core.content.RelatedContentManager;
-import com.aelitis.azureus.core.content.RelatedContentManagerListener;
import com.aelitis.azureus.core.devices.DeviceManagerFactory;
import com.aelitis.azureus.core.download.DownloadManagerEnhancer;
import com.aelitis.azureus.core.metasearch.MetaSearchManagerFactory;
diff --git a/com/aelitis/azureus/vivaldi/ver2/DeserializedPosition.java b/com/aelitis/azureus/vivaldi/ver2/DeserializedPosition.java
deleted file mode 100644
index cbdd0b9..0000000
--- a/com/aelitis/azureus/vivaldi/ver2/DeserializedPosition.java
+++ /dev/null
@@ -1,59 +0,0 @@
-package com.aelitis.azureus.vivaldi.ver2;
-
-import java.io.DataInputStream;
-import java.io.DataOutputStream;
-import java.io.IOException;
-
-import com.aelitis.azureus.core.dht.netcoords.DHTNetworkPosition;
-
-import edu.harvard.syrah.nc.Coordinate;
-
-/*
- * The DHTNetworkPosition implementation for deserialized coordinates.
- */
-class DeserializedPosition extends SyrahPosition {
- private Coordinate coords;
- private float error;
- private long age;
-
- protected DeserializedPosition(DataInputStream dis) throws IOException {
- coords = new Coordinate(VivaldiV2PositionProvider.NUM_DIMS, dis);
- error = dis.readFloat();
- age = dis.readLong();
- }
-
- public Coordinate getCoords() {
- return coords;
- }
-
- public Coordinate getStableCoords() {
- return coords;
- }
-
- public float getError() {
- return error;
- }
-
- public long getAge() {
- return age;
- }
-
- public float estimateRTT(DHTNetworkPosition other) {
- SyrahPosition sp = (SyrahPosition) other;
- if (Float.isNaN(getError()) || Float.isNaN(sp.getError())) return Float.NaN;
- return (float) coords.distanceToNonOriginCoord(sp.getCoords());
- }
-
- public void update(byte[] other_id, DHTNetworkPosition other, float rtt) {
- SyrahPosition sp = (SyrahPosition) other;
- coords = sp.getCoords();
- error = sp.getError();
- age = sp.getAge();
- }
-
- public void serialise(DataOutputStream dos) throws IOException {
- coords.toSerialized(dos);
- dos.writeFloat(error);
- dos.writeLong(age);
- }
-}
diff --git a/com/aelitis/azureus/vivaldi/ver2/IDWrapper.java b/com/aelitis/azureus/vivaldi/ver2/IDWrapper.java
deleted file mode 100644
index 56faef6..0000000
--- a/com/aelitis/azureus/vivaldi/ver2/IDWrapper.java
+++ /dev/null
@@ -1,62 +0,0 @@
-package com.aelitis.azureus.vivaldi.ver2;
-
-import java.util.Arrays;
-
-/*
- * Wrapper for node identifiers so they implement equals, hashCode, and compareTo.
- */
-public class IDWrapper implements Comparable<IDWrapper> {
- /**
- * Translation from a number in the interval [0, 16) to its hexadecimal
- * representation.
- */
- public static final char[] hex_char = { '0', '1', '2', '3', '4', '5', '6',
- '7', '8', '9', 'A', 'B', 'C', 'D', 'E', 'F' };
-
- private final byte[] raw_id;
-
- public IDWrapper(byte[] _raw_id) {
- raw_id = _raw_id;
- }
-
- public byte[] getRawId () {
- return raw_id;
- }
-
- public boolean equals(Object obj) {
- if (obj instanceof IDWrapper) {
- IDWrapper other = (IDWrapper) obj;
- return Arrays.equals(raw_id, other.raw_id);
- }
- return false;
- }
-
- public int hashCode() {
- return Arrays.hashCode(raw_id);
- }
-
- public int compareTo(IDWrapper other) {
- if (this == other) {
- return 0;
- }
-
- // assume all identifiers are of the same length
- for (int i = 0; i < raw_id.length; ++i) {
- if (raw_id[i] != other.raw_id[i]) {
- return ((raw_id[i] & 0xFF) < (other.raw_id[i] & 0xFF)) ? -1 : 1;
- }
- }
- return 0;
- }
-
- public String toString() {
- StringBuffer sbuf = new StringBuffer(64);
-
- sbuf.append("0x");
- for (int i = 0; i < raw_id.length; ++i) {
- sbuf.append(hex_char[(raw_id[i] >> 4) & 0xF]);
- sbuf.append(hex_char[raw_id[i] & 0xF]);
- }
- return sbuf.toString();
- }
-}
diff --git a/com/aelitis/azureus/vivaldi/ver2/InitialPosition.java b/com/aelitis/azureus/vivaldi/ver2/InitialPosition.java
deleted file mode 100644
index 467a299..0000000
--- a/com/aelitis/azureus/vivaldi/ver2/InitialPosition.java
+++ /dev/null
@@ -1,45 +0,0 @@
-package com.aelitis.azureus.vivaldi.ver2;
-
-import com.aelitis.azureus.core.dht.netcoords.DHTNetworkPosition;
-
-import edu.harvard.syrah.nc.Coordinate;
-
-/*
- * The initial Vivaldi position of a remote peer.
- */
-class InitialPosition extends SyrahPosition {
- final static Coordinate zero_coords = new Coordinate(VivaldiV2PositionProvider.NUM_DIMS);
- final static float error = 1.0f;
-
- public InitialPosition() {
- }
-
- public Coordinate getCoords() {
- return zero_coords;
- }
-
- public Coordinate getStableCoords() {
- return zero_coords;
- }
-
- public float getError() {
- return 1.0f;
- }
-
- public long getAge () {
- return 0L;
- }
-
- public float estimateRTT(DHTNetworkPosition other) {
- // log error
- VivaldiV2PositionProvider.doLog("method estimateRTT invoked on initial position");
-
- SyrahPosition sp = (SyrahPosition) other;
- return (float) zero_coords.distanceTo(sp.getCoords());
- }
-
- public void update(byte[] other_id, DHTNetworkPosition other, float rtt) {
- // log error
- VivaldiV2PositionProvider.doLog("method update invoked on initial position");
- }
-}
diff --git a/com/aelitis/azureus/vivaldi/ver2/LocalPosition.java b/com/aelitis/azureus/vivaldi/ver2/LocalPosition.java
deleted file mode 100644
index caf11d2..0000000
--- a/com/aelitis/azureus/vivaldi/ver2/LocalPosition.java
+++ /dev/null
@@ -1,42 +0,0 @@
-package com.aelitis.azureus.vivaldi.ver2;
-
-import com.aelitis.azureus.core.dht.netcoords.DHTNetworkPosition;
-
-import edu.harvard.syrah.nc.Coordinate;
-
-/*
- * The DHTNetworkPosition implementation for the local node.
- */
-class LocalPosition extends SyrahPosition {
- private final VivaldiV2PositionProvider v2_provider;
-
- protected LocalPosition(VivaldiV2PositionProvider _v2_provider) {
- v2_provider = _v2_provider;
- }
-
- public Coordinate getCoords() {
- return v2_provider.getCoords();
- }
-
- public Coordinate getStableCoords() {
- return v2_provider.getStableCoords();
- }
-
- public float getError() {
- return (float) v2_provider.getError();
- }
-
- public long getAge () {
- return v2_provider.getAge();
- }
-
- public float estimateRTT(DHTNetworkPosition other) {
- SyrahPosition sp = (SyrahPosition) other;
- if (Float.isNaN(getError()) || Float.isNaN(sp.getError())) return Float.NaN;
- return (float)getCoords().distanceToNonOriginCoord(sp.getCoords());
- }
-
- public void update(byte[] other_id, DHTNetworkPosition other, float rtt) {
- v2_provider.update(this, new IDWrapper(other_id), (SyrahPosition) other, rtt);
- }
-}
diff --git a/com/aelitis/azureus/vivaldi/ver2/RemotePosition.java b/com/aelitis/azureus/vivaldi/ver2/RemotePosition.java
deleted file mode 100644
index a9a41bb..0000000
--- a/com/aelitis/azureus/vivaldi/ver2/RemotePosition.java
+++ /dev/null
@@ -1,54 +0,0 @@
-package com.aelitis.azureus.vivaldi.ver2;
-
-import java.io.DataInputStream;
-import java.io.IOException;
-
-import com.aelitis.azureus.core.dht.netcoords.DHTNetworkPosition;
-
-import edu.harvard.syrah.nc.Coordinate;
-
-/*
- * The DHTNetworkPosition implementation for a remote node.
- */
-class RemotePosition extends SyrahPosition {
- private Coordinate coords;
- private float error;
- private long age;
-
- protected RemotePosition(DataInputStream dis) throws IOException {
- coords = new Coordinate(VivaldiV2PositionProvider.NUM_DIMS, dis);
- error = dis.readFloat();
- age = dis.readLong();
- }
-
- public Coordinate getCoords() {
- return coords;
- }
-
- // Because we are currently sending only one coordinate over the wire,
- // only got one to reply with.
- // In future might want to send both and use stable coord for routing table
- public Coordinate getStableCoords() {
- return coords;
- }
-
-
- public float getError() {
- return error;
- }
-
- public long getAge () {
- return age;
- }
-
- public float estimateRTT(DHTNetworkPosition other) {
- SyrahPosition sp = (SyrahPosition) other;
- if (Float.isNaN(error) || Float.isNaN(sp.getError())) return Float.NaN;
- return (float) coords.distanceToNonOriginCoord(sp.getCoords());
- }
-
- public void update(byte[] other_id, DHTNetworkPosition other, float rtt) {
- // log error
- VivaldiV2PositionProvider.doLog("method update invoked on a remote position");
- }
-}
diff --git a/com/aelitis/azureus/vivaldi/ver2/StableLocalPosition.java b/com/aelitis/azureus/vivaldi/ver2/StableLocalPosition.java
deleted file mode 100644
index 3355b7d..0000000
--- a/com/aelitis/azureus/vivaldi/ver2/StableLocalPosition.java
+++ /dev/null
@@ -1,15 +0,0 @@
-package com.aelitis.azureus.vivaldi.ver2;
-
-
-import edu.harvard.syrah.nc.Coordinate;
-
-class StableLocalPosition extends LocalPosition {
-
- protected StableLocalPosition(VivaldiV2PositionProvider _v2_provider) {
- super( _v2_provider );
- }
-
- public Coordinate getCoords() {
- return( getStableCoords());
- }
-}
diff --git a/com/aelitis/azureus/vivaldi/ver2/SyrahPosition.java b/com/aelitis/azureus/vivaldi/ver2/SyrahPosition.java
deleted file mode 100644
index 7559c5d..0000000
--- a/com/aelitis/azureus/vivaldi/ver2/SyrahPosition.java
+++ /dev/null
@@ -1,56 +0,0 @@
-package com.aelitis.azureus.vivaldi.ver2;
-
-import java.io.DataOutputStream;
-import java.io.IOException;
-
-import com.aelitis.azureus.core.dht.netcoords.DHTNetworkPosition;
-
-import edu.harvard.syrah.nc.Coordinate;
-
-/*
- * Abstract DHTNetworkPosition implementation for local and remote nodes.
- */
-abstract class SyrahPosition implements DHTNetworkPosition {
- protected SyrahPosition() {
- }
-
- public abstract Coordinate getStableCoords();
-
- public abstract Coordinate getCoords();
-
- public abstract float getError();
-
- public abstract long getAge();
-
- public byte getPositionType() {
- return DHTNetworkPosition.POSITION_TYPE_VIVALDI_V2;
- }
-
- public int getSerialisedSize() {
- // 1 byte version + count dimensions and error, each as a float + age (which is a long)
- return 1 + ( 4 * (VivaldiV2PositionProvider.NUM_DIMS + 1)) + (1 * 8);
- }
-
- public void serialise(DataOutputStream dos) throws IOException {
- getCoords().toSerialized(dos);
- dos.writeFloat(getError());
- dos.writeLong(getAge());
- }
-
- public boolean
- isValid()
- {
- return( (!Float.isNaN( getError())) && getCoords().isValid());
- }
-
- public double[] getLocation() {
- Coordinate coords = getStableCoords();
-
- return( coords.getCoordinates());
- }
-
- public String toString () {
- return new String (getCoords()+",er="+getError()+",age="+getAge());
- }
-
-}
diff --git a/com/aelitis/azureus/vivaldi/ver2/TransientTuple.java b/com/aelitis/azureus/vivaldi/ver2/TransientTuple.java
deleted file mode 100644
index 889c91d..0000000
--- a/com/aelitis/azureus/vivaldi/ver2/TransientTuple.java
+++ /dev/null
@@ -1,18 +0,0 @@
-package com.aelitis.azureus.vivaldi.ver2;
-
-class TransientTuple {
- protected long remove_time;
- protected final IDWrapper id;
- protected SyrahPosition last_pos;
- protected float last_rtt;
- protected long create_time;
-
- public TransientTuple(long _remove_time, IDWrapper _id, SyrahPosition _last_pos,
- float _last_rtt, long _create_time) {
- remove_time = _remove_time;
- id = _id;
- last_pos = _last_pos;
- last_rtt = _last_rtt;
- create_time = _create_time;
- }
-}
diff --git a/com/aelitis/azureus/vivaldi/ver2/VivaldiV2PositionProvider.java b/com/aelitis/azureus/vivaldi/ver2/VivaldiV2PositionProvider.java
deleted file mode 100644
index c7eb331..0000000
--- a/com/aelitis/azureus/vivaldi/ver2/VivaldiV2PositionProvider.java
+++ /dev/null
@@ -1,465 +0,0 @@
-/*
- * Created on 24-Apr-2006 Created by Paul Gardner Copyright (C) 2006 Aelitis,
- * All Rights Reserved.
- *
- * This program is free software; you can redistribute it and/or modify it under
- * the terms of the GNU General Public License as published by the Free Software
- * Foundation; either version 2 of the License, or (at your option) any later
- * version. This program is distributed in the hope that it will be useful, but
- * WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
- * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more
- * details. You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software Foundation, Inc.,
- * 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
- *
- * AELITIS, SAS au capital de 46,603.30 euros 8 Allee Lenotre, La Grille Royale,
- * 78600 Le Mesnil le Roi, France.
- *
- */
-
-package com.aelitis.azureus.vivaldi.ver2;
-
-import java.io.DataInputStream;
-import java.io.DataOutputStream;
-import java.io.IOException;
-import java.util.Iterator;
-import java.util.LinkedList;
-import java.util.SortedSet;
-import java.util.TreeSet;
-
-import org.gudy.azureus2.core3.util.Timer;
-import org.gudy.azureus2.core3.util.TimerEvent;
-import org.gudy.azureus2.core3.util.TimerEventPerformer;
-
-import com.aelitis.azureus.core.dht.netcoords.DHTNetworkPosition;
-import com.aelitis.azureus.core.dht.netcoords.DHTNetworkPositionManager;
-import com.aelitis.azureus.core.dht.netcoords.DHTNetworkPositionProvider;
-import com.aelitis.azureus.core.dht.netcoords.DHTNetworkPositionProviderInstance;
-import com.aelitis.azureus.core.dht.router.DHTRouter;
-import com.aelitis.azureus.core.dht.router.DHTRouterContact;
-import com.aelitis.azureus.core.dht.router.DHTRouterFactory;
-import com.aelitis.azureus.core.dht.router.DHTRouterFactoryObserver;
-import com.aelitis.azureus.core.dht.router.DHTRouterObserver;
-import com.aelitis.azureus.vivaldi.ver2.stats.SerializationController;
-import com.aelitis.azureus.vivaldi.ver2.stats.V1Serializer;
-
-import edu.harvard.syrah.nc.Coordinate;
-import edu.harvard.syrah.nc.VivaldiClient;
-
-public class VivaldiV2PositionProvider implements DHTNetworkPositionProvider,
- DHTRouterFactoryObserver, DHTRouterObserver {
- public static final int NUM_DIMS = 5;
- public static final int TRANSIENT_TIME = 45 * 1000; // in milliseconds
- public static final long MIN_NC_UPDATE_INTERVAL = 10*1000;
-
- private static final boolean LOGGING_ENABLED = false;
-
- private static boolean initialised = false;
- private static volatile DHTNetworkPositionProviderInstance provider = null;
-
- private final VivaldiClient<IDWrapper> vc;
- private final InitialPosition ip;
-
- protected final SortedSet<IDWrapper> transient_ids;
- protected final LinkedList<TransientTuple> transient_list;
-
- protected final SerializationController serializer;
- protected final SortedSet<IDWrapper> router_entries;
- protected DHTRouter router = null;
- protected long last_nc_update = 0;
-
- private boolean started_up = false;
-
- public static synchronized void initialise() {
- if (!initialised) {
-
- initialised = true;
-
- provider = DHTNetworkPositionManager
- .registerProvider(new VivaldiV2PositionProvider());
-
- doLog("Vivaldi V2 position provider created");
- }
- }
-
- protected VivaldiV2PositionProvider() {
- DHTRouterFactory.addObserver(this);
-
- vc = new VivaldiClient<IDWrapper>(NUM_DIMS);
- ip = new InitialPosition();
-
- transient_ids = new TreeSet<IDWrapper>();
- transient_list = new LinkedList<TransientTuple>();
-
- serializer = new SerializationController();
- router_entries = new TreeSet<IDWrapper>();
-
-
- Timer timer = new Timer("VivaldiV2PositionProvider:ping");
-
- timer.addPeriodicEvent(
- MIN_NC_UPDATE_INTERVAL,
- new TimerEventPerformer()
- {
- public void
- perform(
- TimerEvent event )
- {
- ping();
-
- }
- });
-
- }
-
- protected void resetPingClock (long curr_time) {
- last_nc_update = curr_time;
- }
-
- protected void ping () {
- long curr_time = System.currentTimeMillis();
- if (curr_time > last_nc_update + MIN_NC_UPDATE_INTERVAL) {
- //System.out.println ("starting v2position ping");
- if (router != null) {
- IDWrapper id = vc.getNeighborToPing(curr_time);
- if (id != null) {
- byte[] raw_id = id.getRawId();
- router.requestPing(raw_id);
- //System.out.println ("pinging "+id);
- } else {
- //System.out.println ("vc neighbor to ping is null");
- }
- } else {
- //System.out.println ("router is null");
- }
- } else {
- //System.out.println ("supressing v2position ping");
- }
- }
-
- public byte getPositionType() {
- return (DHTNetworkPosition.POSITION_TYPE_VIVALDI_V2 );
- }
-
- public DHTNetworkPosition create(byte[] ID, boolean is_local) {
- if (is_local) {
- doLog("Returning position for local peer");
-
- return new LocalPosition(this);
- }
-
- purgeTransient(System.currentTimeMillis());
-
- // return the shared initial position of a remote peer
- return ip;
- }
-
- public DHTNetworkPosition deserialisePosition(DataInputStream is)
- throws IOException {
- return new RemotePosition(is);
- }
-
- public void
- serialiseStats(
- DataOutputStream os )
-
- throws IOException
- {
- if (!serializer.contains(V1Serializer.VER_01)) {
- serializer.addSerializer(V1Serializer.getInstance());
- }
- serializer.toSerialized(V1Serializer.VER_01, os, vc);
- }
-
- public void routerCreated(DHTRouter _router) {
- doLog("Vivaldi notified of created router");
-
- _router.addObserver(this);
- router = _router;
- }
-
- public synchronized void added(DHTRouterContact contact) {
- purgeTransient(System.currentTimeMillis());
-
- // add to set of router entries
- IDWrapper id = new IDWrapper(contact.getID());
- if (!router_entries.contains(id)) {
- router_entries.add(id);
- if ( LOGGING_ENABLED ){
- doLog("added router entry " + id + " " + getStats());
- }
- }
-
- if (transient_ids.remove(id)) {
- // was a transient entry, get its latest position and sample
- TransientTuple tt = null;
- for (Iterator<TransientTuple> i = transient_list.iterator(); i.hasNext(); ) {
- tt = i.next();
- if (tt.id.equals(id)) {
- i.remove();
- break;
- }
- }
-
- // add state to the vivaldi client
- long curr_time = System.currentTimeMillis();
- // add the time this guy has been sitting as a TransientTuple to its age
- long tt_age = curr_time - tt.create_time + tt.last_pos.getAge();
- if (vc.processSample(id, tt.last_pos.getCoords(), tt.last_pos.getError(), tt.last_rtt, tt_age,
- curr_time, true)) {
- resetPingClock(curr_time);
- }
-
- if ( LOGGING_ENABLED ){
- doLog(id + "added to router, promoting transient to host " + getStats());
- }
- }
- else if (vc.getHosts().contains(id)) {
- if ( LOGGING_ENABLED ){
- doLog(id + " added to router, but was already found as a host");
- }
- }
- else {
- if ( LOGGING_ENABLED ){
- doLog(id + " added to router, but was not found as a host or transient");
- }
- }
- }
-
- public synchronized void removed(DHTRouterContact contact) {
- purgeTransient(System.currentTimeMillis());
-
- // remove from router entries
- IDWrapper id = new IDWrapper(contact.getID());
- if (router_entries.remove(id)) {
- if ( LOGGING_ENABLED ){
- doLog("removed router entry " + id + " " + getStats());
- }
- }
-
- if (vc.removeHost(id)) {
- if ( LOGGING_ENABLED ){
- doLog(id + " removed from router, removed as host " + getStats());
- }
- }
- else if (transient_ids.remove(id)) {
- // contact identifier is present in list, so find and remove it
- for (Iterator<TransientTuple> i = transient_list.iterator(); i.hasNext(); ) {
- TransientTuple tt = i.next();
- if (tt.id.equals(id)) {
- i.remove();
- break;
- }
- }
-
- if ( LOGGING_ENABLED ){
- doLog(id + " removed from router, removed as transient " + getStats());
- }
- }
- else {
- if ( LOGGING_ENABLED ){
- doLog(id + " removed from router, but was not found as a host or transient");
- }
- }
- }
-
- public void locationChanged(DHTRouterContact contact) {
- purgeTransient(System.currentTimeMillis());
-
- // only remove from VivaldiClient when removed from routing table
- }
-
- public void nowAlive(DHTRouterContact contact) {
- purgeTransient(System.currentTimeMillis());
-
- // only add to VivaldiClient when coordinates are updated
- }
-
- public void nowFailing(DHTRouterContact contact) {
- purgeTransient(System.currentTimeMillis());
-
- // only remove from VivaldiClient when removed from routing table
- }
-
- public void destroyed(DHTRouter router) {
- doLog("Vivaldi notified of destroyed router");
-
- router.removeObserver(this);
-
- vc.reset();
- router_entries.clear();
-
- transient_ids.clear();
- transient_list.clear();
- }
-
- public DHTNetworkPosition
- getLocalPosition()
- {
- if ( started_up ){
-
- return( new StableLocalPosition( this ));
- }
-
- // we only have a stable local position if we've been started up - i.e things are running
-
- return( null );
- }
-
- /*
- * Pass-thru methods.
- */
-
- protected Coordinate getCoords() {
- return vc.getSystemCoords();
- }
-
- protected Coordinate getStableCoords() {
- return vc.getApplicationCoords();
- }
-
- protected float getError() {
- return (float) vc.getSystemError();
- }
-
- protected long getAge() {
- long age = vc.getAge(System.currentTimeMillis());
- //System.out.println("age "+age);
- return age;
- }
-
- protected InitialPosition getInitialPosition() {
- return ip;
- }
-
- protected VivaldiClient<IDWrapper> getVivaldiClient() {
- return vc;
- }
-
- /*
- * Methods for maintaining the potential adds to the VivaldiClient.
- */
-
- protected synchronized void update(LocalPosition local_pos, IDWrapper id, SyrahPosition sp, float sample_rtt) {
- if (sp == local_pos) {
- doLog("update invoked on LocalPosition with itself, ID = " + id);
- return;
- }
- else if (sp == ip) {
- doLog("update invoked with the InitialPosition singleton, ID = " + id);
- return;
- }
-
- long curr_time = System.currentTimeMillis();
- if (vc.getHosts().contains(id)) {
- // already maintain state for this peer, so process sample now
- if (vc.processSample(id, sp.getCoords(), sp.getError(), sample_rtt, sp.getAge(), curr_time, false)) {
- resetPingClock(curr_time);
- }
-
- doLog("update called on host, ID = " + id);
- return;
- }
- else if (router_entries.contains(id)) {
- if (transient_ids.remove(id)) {
- // contact identifier is present in list, so find and remove it
- for (Iterator<TransientTuple> i = transient_list.iterator(); i.hasNext(); ) {
- TransientTuple tt = i.next();
- if (tt.id.equals(id)) {
- i.remove();
- break;
- }
- }
- }
-
- // peer is already in the router, so add and process sample now
- if (vc.processSample(id, sp.getCoords(), sp.getError(), sample_rtt, sp.getAge(), curr_time, true)) {
- resetPingClock (curr_time);
- }
-
- doLog("update called on host already in router, ID = " + id);
- return;
- }
-
- final long new_remove_time = curr_time + TRANSIENT_TIME;
- if (!transient_ids.contains(id)) {
- // identifier is not in list yet, so add it and return
- transient_ids.add(id);
- transient_list.addLast(new TransientTuple(new_remove_time, id, sp, sample_rtt, curr_time));
- doLog("added transient " + id + " " + getStats());
- return;
- }
-
- doLog("updating transient " + id + " " + getStats());
-
- // find the entry belonging to the identifier in the list
- TransientTuple tt = null;
- for (Iterator<TransientTuple> i = transient_list.iterator(); i.hasNext(); ) {
- tt = i.next();
- if (tt.id.equals(id)) {
- // once found, remove it
- i.remove();
- break;
- }
- }
-
- // update the entry and add it to the end
- tt.remove_time = new_remove_time;
- tt.last_pos = sp;
- tt.last_rtt = sample_rtt;
- transient_list.addLast(tt);
- }
-
- protected synchronized void purgeTransient(long curr_time) {
- for (Iterator<TransientTuple> i = transient_list.iterator(); i.hasNext(); ) {
- TransientTuple tt = i.next();
- if (tt.remove_time > curr_time) {
- // entry expires in the future, so end now
- return;
- }
-
- i.remove();
- transient_ids.remove(tt.id);
- doLog("removed transient " + tt.id + " " + getStats());
- }
- }
-
- protected String getStats() {
- return "[h:" + vc.getHosts().size() + ", t:" + transient_list.size() + " re:" + router_entries.size() + "]";
- }
-
- protected static void doLog(String str) {
- //System.out.println (str);
- if (LOGGING_ENABLED && (provider != null)) {
- provider.log(str);
- }
- }
-
- public void
- startUp(
- DataInputStream is ) //throws IOException
- {
- started_up = true;
-
- try{
- vc.startUp (is);
-
- }catch( IOException e ){
-
- doLog("startUp failed:" + e.toString());
- }
- }
-
- public void
- shutDown(
- DataOutputStream os )// throws IOException
- {
- try{
- vc.shutDown (os);
-
- }catch( IOException e ){
-
- doLog("shutDown failed:" + e.toString());
- }
- }
-}
diff --git a/com/aelitis/azureus/vivaldi/ver2/stats/SerializationController.java b/com/aelitis/azureus/vivaldi/ver2/stats/SerializationController.java
deleted file mode 100644
index e968fe4..0000000
--- a/com/aelitis/azureus/vivaldi/ver2/stats/SerializationController.java
+++ /dev/null
@@ -1,98 +0,0 @@
-package com.aelitis.azureus.vivaldi.ver2.stats;
-
-import java.io.DataInputStream;
-import java.io.DataOutputStream;
-import java.io.IOException;
-import java.util.Collections;
-import java.util.Set;
-import java.util.TreeMap;
-
-import edu.harvard.syrah.nc.VivaldiClient;
-
-public class SerializationController {
- protected final TreeMap<Byte, StatsSerializer> serializers;
- protected final Set<Byte> versions_ro;
-
- public SerializationController() {
- serializers = new TreeMap<Byte, StatsSerializer>();
- versions_ro = Collections.unmodifiableSet(serializers.keySet());
-
- // add version 1
- StatsSerializer v1_serializer = V1Serializer.getInstance();
- serializers.put(v1_serializer.getSerializedVersion(), v1_serializer);
- }
-
- public boolean addSerializer(StatsSerializer new_serializer) {
- final byte new_version = new_serializer.getSerializedVersion();
- if (serializers.containsKey(new_version)) {
- return false;
- }
-
- serializers.put(new_version, new_serializer);
- return true;
- }
-
- public StatsSerializer removeSerializer(byte version) {
- return serializers.remove(version);
- }
-
- public boolean contains(byte version) {
- return serializers.containsKey(version);
- }
-
- public Set<Byte> getVersions() {
- return versions_ro;
- }
-
- /**
- * Instructs the controller to serialize the given statistics to the output
- * stream using the provided versioning.
- *
- * @param version
- * the version of serialization to use
- * @param os
- * the stream to write the serialized form to
- * @param vc
- * the client containing the statistics to serialize
- * @return <code>true</code> if the statistics were serialized, or
- * <code>false</code> if a serializer for the version could not be found
- * @throws IOException
- * if a serializer was found but an error occured during serialization
- */
- public boolean toSerialized(byte version, DataOutputStream os,
- VivaldiClient vc) throws IOException {
- StatsSerializer serializer = serializers.get(version);
- if (serializer == null) {
- return false;
- }
-
- // write version
- os.writeByte(version);
- // then write stats
- serializer.toSerialized(os, vc);
- return true;
- }
-
- /**
- * Instructs the controller to deserialize from the input stream.
- *
- * @param is
- * the stream to read the serialized form from
- * @return the deserialized statistics, or <code>null</code> if no
- * deserializer for the read version could not be found
- * @throws IOException
- * if a deserializer was found but an error occured during deserialization
- */
- public VivaldiStatistics fromSerialized(DataInputStream is)
- throws IOException {
- // read version
- byte version = is.readByte();
- StatsSerializer serializer = serializers.get(version);
- if (serializer == null) {
- return null;
- }
-
- // then read stats
- return serializer.fromSerialized(is);
- }
-}
diff --git a/com/aelitis/azureus/vivaldi/ver2/stats/StatsSerializer.java b/com/aelitis/azureus/vivaldi/ver2/stats/StatsSerializer.java
deleted file mode 100644
index 423d8d8..0000000
--- a/com/aelitis/azureus/vivaldi/ver2/stats/StatsSerializer.java
+++ /dev/null
@@ -1,28 +0,0 @@
-package com.aelitis.azureus.vivaldi.ver2.stats;
-
-import java.io.DataInputStream;
-import java.io.DataOutputStream;
-import java.io.IOException;
-
-import edu.harvard.syrah.nc.VivaldiClient;
-
-public interface StatsSerializer {
- public static final byte VER_01 = 0x01;
-
- /*
- * Returns the version that the underlying implemnetation serializes and
- * deserializes.
- */
- public byte getSerializedVersion();
-
- /*
- * Writes the statistics to the given stream. Returns true if written
- * successfully.
- */
- public void toSerialized(DataOutputStream os, VivaldiClient vc) throws IOException;
-
- /*
- * Reads the statistics from the given stream.
- */
- public VivaldiStatistics fromSerialized(DataInputStream is) throws IOException;
-}
diff --git a/com/aelitis/azureus/vivaldi/ver2/stats/V1Serializer.java b/com/aelitis/azureus/vivaldi/ver2/stats/V1Serializer.java
deleted file mode 100644
index 1bcac04..0000000
--- a/com/aelitis/azureus/vivaldi/ver2/stats/V1Serializer.java
+++ /dev/null
@@ -1,33 +0,0 @@
-package com.aelitis.azureus.vivaldi.ver2.stats;
-
-import java.io.DataInputStream;
-import java.io.DataOutputStream;
-import java.io.IOException;
-
-import edu.harvard.syrah.nc.VivaldiClient;
-
-public class V1Serializer implements StatsSerializer {
- private static V1Serializer instance;
-
- public static synchronized V1Serializer getInstance() {
- if (instance == null) {
- instance = new V1Serializer();
- }
- return instance;
- }
-
- private V1Serializer() {
- }
-
- public byte getSerializedVersion() {
- return StatsSerializer.VER_01;
- }
-
- public void toSerialized(DataOutputStream os, VivaldiClient vc) throws IOException {
- V1Statistics.toSerialized(os, vc);
- }
-
- public VivaldiStatistics fromSerialized(DataInputStream is) throws IOException {
- return new V1Statistics(is);
- }
-}
diff --git a/com/aelitis/azureus/vivaldi/ver2/stats/V1Statistics.java b/com/aelitis/azureus/vivaldi/ver2/stats/V1Statistics.java
deleted file mode 100644
index 3beef68..0000000
--- a/com/aelitis/azureus/vivaldi/ver2/stats/V1Statistics.java
+++ /dev/null
@@ -1,296 +0,0 @@
-package com.aelitis.azureus.vivaldi.ver2.stats;
-
-import java.io.DataInputStream;
-import java.io.DataOutputStream;
-import java.io.IOException;
-import java.util.Hashtable;
-import java.text.NumberFormat;
-
-import edu.harvard.syrah.nc.Coordinate;
-import edu.harvard.syrah.nc.VivaldiClient;
-
-public class V1Statistics implements VivaldiStatistics {
- public Coordinate sys_coord;
- public Coordinate app_coord;
- public float error, dist_to_nearest_neighbor, age_difference,
- valid_link_count, gravity;
- public float relative_rank_loss, norm_app_latency_penalty,
- relative_app_latency_penalty;
- public float sys_re50, sys_re95, app_re50, app_re95, sys_dd, app_dd;
- public float neighbors_used_per_update, running_relative_diff,
- running_sys_update_frequency, running_app_update_frequency;
- public boolean keepStatistics;
-
- final static protected NumberFormat nf = NumberFormat.getInstance();
- final static protected int NFDigits = 3;
- static boolean haveSetFormat = false;
-
- // semantic and other validity checks
- public boolean isValid () {
- if ((sys_coord == null) ||
- (app_coord == null) ||
- (error < 0) ||
- (dist_to_nearest_neighbor < 0))
- return false;
-
- if (keepStatistics &&
- ((sys_re50 > sys_re95) ||
- (app_re50 > app_re95) ||
- (running_sys_update_frequency > running_app_update_frequency) ||
- (age_difference < 0) ||
- (valid_link_count < 0)))
- return false;
- return true;
- }
-
- void checkFormat () {
- if (!haveSetFormat) {
- if (nf.getMaximumFractionDigits() > NFDigits) {
- nf.setMaximumFractionDigits(NFDigits);
- }
- if (nf.getMinimumFractionDigits() > NFDigits) {
- nf.setMinimumFractionDigits(NFDigits);
- }
- nf.setGroupingUsed(false);
- }
- haveSetFormat = true;
- }
-
- public String toString () {
- checkFormat();
- String basic = new String
- ("sc "+sys_coord+
- " ac "+app_coord+
- " er "+nf.format(error)+
- " nn "+nf.format(dist_to_nearest_neighbor));
-
- if (keepStatistics) {
- String complete = new String
- (" rrl "+nf.format(relative_rank_loss)+
- " narl "+nf.format(norm_app_latency_penalty)+
- " ralp "+nf.format(relative_app_latency_penalty)+
- " age "+nf.format(age_difference)+
- " gr "+nf.format(gravity)+
- " vl "+nf.format(valid_link_count)+
- " sys_re50 "+nf.format(sys_re50)+
- " sys_re95 "+nf.format(sys_re95)+
- " app_re50 "+nf.format(app_re50)+
- " app_re95 "+nf.format(app_re95)+
- " sys_dd "+nf.format(sys_dd)+
- " app_dd "+nf.format(app_dd)+
- " ne "+nf.format(neighbors_used_per_update)+
- " rd "+nf.format(running_relative_diff)+
- " sf "+nf.format(running_sys_update_frequency)+
- " af "+nf.format(running_app_update_frequency));
-
- return new String (basic+complete);
- }
- return basic;
- }
-
- //public V1Statistics(DataInputStream is) throws IOException {
- public V1Statistics(DataInputStream is) {
- try {
- if (StatsSerializer.VER_01 == is.readByte()) {
- int num_dimensions = is.readInt();
- sys_coord = new Coordinate(num_dimensions, is);
- app_coord = new Coordinate(num_dimensions, is);
- error = is.readFloat();
- dist_to_nearest_neighbor = is.readFloat();
-
- keepStatistics = is.readBoolean();
-
- if (keepStatistics) {
- relative_rank_loss = is.readFloat();
- norm_app_latency_penalty = is.readFloat();
- relative_app_latency_penalty = is.readFloat();
-
- age_difference = is.readFloat();
- valid_link_count = is.readFloat();
- gravity = is.readFloat();
- sys_re50 = is.readFloat();
- sys_re95 = is.readFloat();
- app_re50 = is.readFloat();
- app_re95 = is.readFloat();
- sys_dd = is.readFloat();
- app_dd = is.readFloat();
-
- neighbors_used_per_update = is.readFloat();
- running_relative_diff = is.readFloat();
- running_sys_update_frequency = is.readFloat();
- running_app_update_frequency = is.readFloat();
-
- }
- }
- } catch (IOException ex) {
- // flag that stats did not deserialize and should be ignored
- error = (float)-1.;
- }
- }
-
- public static void toSerialized(DataOutputStream os, VivaldiClient<?> vc)
- throws IOException {
- os.writeByte (StatsSerializer.VER_01);
- os.writeInt (vc.getSystemCoords().getNumDimensions());
- vc.getSystemCoords().toSerialized (os);
- vc.getApplicationCoords().toSerialized (os);
- Hashtable<String, Double> stats = vc.getStatistics();
- os.writeFloat(new Float(stats.get("er")));
- os.writeFloat(new Float(stats.get("nn")));
-
- if (VivaldiClient.keepStatistics) {
- os.writeBoolean(true);
- os.writeFloat(new Float(stats.get("rrl")));
- os.writeFloat(new Float(stats.get("narl")));
- os.writeFloat(new Float(stats.get("ralp")));
- os.writeFloat(new Float(stats.get("age")));
- os.writeFloat(new Float(stats.get("vl")));
- os.writeFloat(new Float(stats.get("gr")));
-
- os.writeFloat(new Float(stats.get("sys_re50")));
- os.writeFloat(new Float(stats.get("sys_re95")));
- os.writeFloat(new Float(stats.get("app_re50")));
- os.writeFloat(new Float(stats.get("app_re95")));
-
- os.writeFloat(new Float(stats.get("sys_dd")));
- os.writeFloat(new Float(stats.get("app_dd")));
-
- os.writeFloat(new Float(stats.get("ne")));
- os.writeFloat(new Float(stats.get("rd")));
- os.writeFloat(new Float(stats.get("sf")));
- os.writeFloat(new Float(stats.get("af")));
- }
- else {
- os.writeBoolean(false);
- }
- }
-
- public byte getSerializedVersion() {
- return StatsSerializer.VER_01;
- }
-
- public long
- getDBValuesStored() {
- return 0;
- }
-
- public long
- getDBKeysBlocked() {
- return 0;
- }
-
- // Router
-
- public long
- getRouterNodes() {
- return 0;
- }
-
- public long
- getRouterLeaves() {
- return 0;
- }
-
- public long
- getRouterContacts() {
- return 0;
- }
-
- public long
- getRouterUptime() {
- return 0;
- }
-
- public int
- getRouterCount() {
- return 0;
- }
-
- // Transport
-
- // totals
-
- public long
- getTotalBytesReceived() {
- return 0;
- }
-
- public long
- getTotalBytesSent() {
- return 0;
- }
-
- public long
- getTotalPacketsReceived() {
- return 0;
- }
-
- public long
- getTotalPacketsSent() {
- return 0;
- }
-
- public long
- getTotalPingsReceived() {
- return 0;
- }
-
- public long
- getTotalFindNodesReceived() {
- return 0;
- }
-
- public long
- getTotalFindValuesReceived() {
- return 0;
- }
-
- public long
- getTotalStoresReceived() {
- return 0;
- }
-
- public long
- getTotalKeyBlocksReceived() {
- return 0;
- }
-
- public long
- getIncomingRequests() {
- return 0;
- }
-
- // averages
-
- public long
- getAverageBytesReceived() {
- return 0;
- }
-
- public long
- getAverageBytesSent() {
- return 0;
- }
-
- public long
- getAveragePacketsReceived() {
- return 0;
- }
-
- public long
- getAveragePacketsSent() {
- return 0;
- }
-
- public String
- getVersion() {
- return new String("");
- }
-
- public String
- getString() {
- return new String ("foo");
- }
-
-
-}
diff --git a/com/aelitis/azureus/vivaldi/ver2/stats/VivaldiStatistics.java b/com/aelitis/azureus/vivaldi/ver2/stats/VivaldiStatistics.java
deleted file mode 100644
index 9a9afff..0000000
--- a/com/aelitis/azureus/vivaldi/ver2/stats/VivaldiStatistics.java
+++ /dev/null
@@ -1,16 +0,0 @@
-package com.aelitis.azureus.vivaldi.ver2.stats;
-
-import com.aelitis.azureus.core.dht.transport.DHTTransportFullStats;
-
-/*
- * A marker interface for any Vivaldi statistics.
- */
-public interface VivaldiStatistics {
- /*
- * Returns the version that the underlying implemnetation serializes and deserializes.
- */
- public byte getSerializedVersion();
-
- public boolean isValid();
-
-}
diff --git a/com/aelitis/net/magneturi/MagnetURIHandler.java b/com/aelitis/net/magneturi/MagnetURIHandler.java
index c17e0bb..2dbed77 100644
--- a/com/aelitis/net/magneturi/MagnetURIHandler.java
+++ b/com/aelitis/net/magneturi/MagnetURIHandler.java
@@ -22,6 +22,9 @@
package com.aelitis.net.magneturi;
+import java.io.IOException;
+import java.io.InputStream;
+import java.io.OutputStream;
import java.net.URL;
import com.aelitis.net.magneturi.impl.MagnetURIHandlerImpl;
@@ -44,6 +47,14 @@ MagnetURIHandler
getPort();
public abstract void
+ process(
+ String get,
+ InputStream is,
+ OutputStream os )
+
+ throws IOException;
+
+ public abstract void
addListener(
MagnetURIHandlerListener l );
diff --git a/com/aelitis/net/magneturi/MagnetURIHandlerListener.java b/com/aelitis/net/magneturi/MagnetURIHandlerListener.java
index 054d15d..9e96aec 100644
--- a/com/aelitis/net/magneturi/MagnetURIHandlerListener.java
+++ b/com/aelitis/net/magneturi/MagnetURIHandlerListener.java
@@ -41,6 +41,7 @@ MagnetURIHandlerListener
download(
MagnetURIHandlerProgressListener progress,
byte[] hash,
+ String args,
InetSocketAddress[] sources,
long timeout )
diff --git a/com/aelitis/net/magneturi/MagnetURIHandlerProgressListener.java b/com/aelitis/net/magneturi/MagnetURIHandlerProgressListener.java
index 688f7a9..d99985f 100644
--- a/com/aelitis/net/magneturi/MagnetURIHandlerProgressListener.java
+++ b/com/aelitis/net/magneturi/MagnetURIHandlerProgressListener.java
@@ -41,4 +41,7 @@ MagnetURIHandlerProgressListener
public void
reportCompleteness(
int percent );
+
+ public boolean
+ verbose();
}
diff --git a/com/aelitis/net/magneturi/impl/MagnetURIHandlerImpl.java b/com/aelitis/net/magneturi/impl/MagnetURIHandlerImpl.java
index dfd0bdd..cc86818 100644
--- a/com/aelitis/net/magneturi/impl/MagnetURIHandlerImpl.java
+++ b/com/aelitis/net/magneturi/impl/MagnetURIHandlerImpl.java
@@ -258,6 +258,64 @@ MagnetURIHandlerImpl
}
}
+ public void
+ process(
+ final String get,
+ final InputStream is,
+ final OutputStream os )
+
+ throws IOException
+ {
+ new AEThread2( "MagnetProcessor", true )
+ {
+ public void
+ run()
+ {
+ boolean close = false;
+
+ try{
+ close = process( get, new BufferedReader( new InputStreamReader( is )), os );
+
+ }catch( Throwable e ){
+
+ Debug.out( "Magnet processing failed", e );
+
+ }finally{
+
+ if ( close ){
+
+ try{
+ is.close();
+
+ }catch( Throwable e ){
+
+ Debug.out( e );
+ }
+ }
+
+ try{
+ os.flush();
+
+ }catch( Throwable e ){
+
+ Debug.out( e );
+ }
+
+ if ( close ){
+
+ try{
+ os.close();
+
+ }catch( Throwable e ){
+
+ Debug.out( e );
+ }
+ }
+ }
+ }
+ }.start();
+ }
+
protected boolean
process(
String get,
@@ -277,9 +335,17 @@ MagnetURIHandlerImpl
int pos = get.indexOf( '?' );
- if ( pos != -1 ){
-
- StringTokenizer tok = new StringTokenizer( get.substring( pos+1 ), "&" );
+ String arg_str;
+
+ if ( pos == -1 ){
+
+ arg_str = "";
+
+ }else{
+
+ arg_str = get.substring( pos+1 );
+
+ StringTokenizer tok = new StringTokenizer( arg_str, "&" );
if (DEBUG) {
System.out.println("params:" + get.substring( pos+1 ));
}
@@ -496,9 +562,9 @@ MagnetURIHandlerImpl
pw.flush();
- String base_32 = urn.substring(9);
+ String encoded = urn.substring(9);
- List sources = new ArrayList();
+ List<InetSocketAddress> sources = new ArrayList<InetSocketAddress>();
for (int i=0;i<source_params.size();i++){
@@ -520,18 +586,24 @@ MagnetURIHandlerImpl
}
}
- InetSocketAddress[] s = new InetSocketAddress[ sources.size()];
-
- sources.toArray( s );
+ InetSocketAddress[] s = sources.toArray( new InetSocketAddress[ sources.size()] );
if (Logger.isEnabled())
Logger.log(new LogEvent(LOGID, "MagnetURIHandler: download of '"
- + base_32 + "' starts (initial sources=" + s.length + ")"));
+ + encoded + "' starts (initial sources=" + s.length + ")"));
- byte[] sha1 = Base32.decode( base_32 );
+ byte[] sha1 = UrlUtils.decodeSHA1Hash( encoded );
+
+ if ( sha1 == null ){
+
+ throw( new Exception( "Invalid info hash '" + encoded + "'" ));
+ }
+
+ byte[] data = null;
- byte[] data = null;
+ String verbose_str = lc_params.get( "verbose" );
+ final boolean verbose = verbose_str != null && verbose_str.equalsIgnoreCase( "true" );
for (int i=0;i<listeners.size();i++){
@@ -564,8 +636,15 @@ MagnetURIHandlerImpl
pw.flush();
}
+
+ public boolean
+ verbose()
+ {
+ return( verbose );
+ }
},
sha1,
+ arg_str,
s,
DOWNLOAD_TIMEOUT );
@@ -577,7 +656,7 @@ MagnetURIHandlerImpl
if (Logger.isEnabled())
Logger.log(new LogEvent(LOGID, "MagnetURIHandler: download of '"
- + base_32
+ + encoded
+ "' completes, data "
+ (data == null ? "not found"
: ("found, length = " + data.length))));
diff --git a/edu/harvard/syrah/nc/ApplicationObserver.java b/edu/harvard/syrah/nc/ApplicationObserver.java
deleted file mode 100644
index 8316c0c..0000000
--- a/edu/harvard/syrah/nc/ApplicationObserver.java
+++ /dev/null
@@ -1,33 +0,0 @@
-package edu.harvard.syrah.nc;
-
-/*
- * NCLib - a network coordinate library
- *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License as published by
- * the Free Software Foundation; either version 2 of the License.
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
- * GNU General Public License for more details ( see the LICENSE file ).
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
- */
-
-/**
- * An observer to be notified when the application coordinates change.
- *
- * @author Michael Parker, Jonathan Ledlie
- */
-public interface ApplicationObserver {
- /**
- * This method is invoked when the application-level coordinates are
- * updated.
- *
- * @param new_coords the new application-level coordinates
- */
- public void coordinatesUpdated(Coordinate new_coords);
-}
diff --git a/edu/harvard/syrah/nc/Coordinate.java b/edu/harvard/syrah/nc/Coordinate.java
deleted file mode 100644
index 68f386b..0000000
--- a/edu/harvard/syrah/nc/Coordinate.java
+++ /dev/null
@@ -1,369 +0,0 @@
-package edu.harvard.syrah.nc;
-
-import java.io.DataInputStream;
-import java.io.DataOutputStream;
-import java.io.IOException;
-import java.nio.ByteBuffer;
-
-import java.util.Vector;
-
-/*
- * NCLib - a network coordinate library
- *
- * This program is free software; you can redistribute it and/or modify it under
- * the terms of the GNU General Public License as published by the Free Software
- * Foundation; either version 2 of the License.
- *
- * This program is distributed in the hope that it will be useful, but WITHOUT
- * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS
- * FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details (
- * see the LICENSE file ).
- *
- * You should have received a copy of the GNU General Public License along with
- * this program; if not, write to the Free Software Foundation, Inc., 59 Temple
- * Place, Suite 330, Boston, MA 02111-1307 USA
- */
-
-/**
- * A coordinate in the Euclidian space.
- *
- * @author Michael Parker, Jonathan Ledlie
- */
-public class Coordinate {
-
- final static protected int CLASS_HASH = Coordinate.class.hashCode();
-
- final protected double[] coords;
- final protected byte version;
- final protected int num_dims;
-
- public static double MIN_COORD = 0.1;
-
- public byte getVersion () {
- return version;
- }
-
- /**
- * Creates a copy of this <code>Coordinate</code> object, such that
- * updates in this coordinate are not reflected in the returned object.
- *
- * @return a copy of these coordinates
- */
- public Coordinate makeCopy() {
- return new Coordinate(coords, true);
- }
-
- /**
- * Creates a new coordinate having a position at the origin.
- *
- * @param num_dimensions
- * the number of coordinate dimensions
- */
- public Coordinate(int num_dimensions) {
- coords = new double[num_dimensions];
- version = VivaldiClient.CURRENT_VERSION;
- if (VivaldiClient.USE_HEIGHT) num_dimensions--;
- num_dims = num_dimensions;
- }
-
- /**
- *
- * @param num_dimensions
- * @param dis
- * @throws IOException
- */
-
-
- public Coordinate(int num_dimensions, DataInputStream dis) throws IOException {
- coords = new double[num_dimensions];
- version = dis.readByte();
- for (int i = 0; i < num_dimensions; i++) {
- coords[i] = ((double) dis.readFloat());
- }
- if (VivaldiClient.USE_HEIGHT) num_dimensions--;
- num_dims = num_dimensions;
-
- }
-
- public void toSerialized(DataOutputStream dos) throws IOException {
- final int num_dims = coords.length;
- dos.writeByte (version);
- for (int i = 0; i < num_dims; ++i) {
- // when writing, cast to float
- dos.writeFloat((float) coords[i]);
- }
- //if (VivaldiClient.USE_HEIGHT) dos.writeFloat((float) coords[num_dims]);
- }
-
- protected Coordinate(Coordinate c) {
- this(c.coords, true);
- }
-
- /**
- * Creates a new coordinate having a position specified by the array
- * <code>init_coords</code>. The number of dimensions is this equal to
- * the array length.
- *
- * @param init_pos
- * the position for this coordinate
- * @param make_copy
- * whether a copy of the array should be made
- */
- protected Coordinate(double[] init_pos, boolean make_copy) {
- int _num_dims = init_pos.length;
- if (make_copy) {
- coords = new double[_num_dims];
- System.arraycopy(init_pos, 0, coords, 0, _num_dims);
- }
- else {
- coords = init_pos;
- }
- version = VivaldiClient.CURRENT_VERSION;
- if (VivaldiClient.USE_HEIGHT) _num_dims--;
- num_dims = _num_dims;
- }
-
- /**
- * Creates a new coordinate having a position specified by the array
- * <code>init_coords</code>. The number of dimensions is this equal to
- * the array length.
- *
- * @param init_pos
- * the position for this coordinate
- */
- public Coordinate(float[] init_pos) {
- int _num_dims = init_pos.length;
- coords = new double[_num_dims];
- for (int i = 0; i < _num_dims; ++i) {
- coords[i] = init_pos[i];
- }
- version = VivaldiClient.CURRENT_VERSION;
- if (VivaldiClient.USE_HEIGHT) _num_dims--;
- num_dims = _num_dims;
- }
-
- public boolean isCompatible (Coordinate _other) {
- return _other != null && version == _other.version && num_dims == _other.num_dims;
- }
-
- public void bump () {
- for (int i = 0; i < coords.length; ++i) {
- if (Math.abs(coords[i]) < MIN_COORD) {
- double length = VivaldiClient.random.nextDouble()+MIN_COORD;
- // don't set height to be negative, if we are using it
- if ( (!VivaldiClient.USE_HEIGHT || i < coords.length-1) &&
- (VivaldiClient.random.nextBoolean())) {
- length *= -1.;
- }
- coords[i] += length;
- }
- }
- }
-
-
-
-
- /**
- * Returns the number of dimensions this coordinate has.
- *
- * @return the number of coordinate dimensions.
- */
- public int getNumDimensions() {
- return coords.length;
- }
-
- /**
- * Returns the Euclidian distance to the given coordinate parameter.
- *
- * @param c
- * the coordinate to find the Euclidian distance to
- * @return the distance to parameter <code>c</code>
- */
- public double distanceToNonOriginCoord(Coordinate c) {
- if (atOrigin() || c.atOrigin()) return Double.NaN;
- return distanceTo(c);
- }
-
- double uncheckedDistanceTo(Coordinate c) {
- if (!isCompatible(c))
- return Double.NaN;
- // used for debugging so we can call distanceTo on something null
- assert ((VivaldiClient.USE_HEIGHT && num_dims == coords.length - 1) || (!VivaldiClient.USE_HEIGHT && num_dims == coords.length));
- if (c == null)
- {
- assert (!VivaldiClient.SIMULATION);
- return -1.;
- }
- double sum = 0.0;
- for (int i = 0; i < num_dims; ++i)
- {
- final double abs_dist = coords[i] - c.coords[i];
- sum += (abs_dist * abs_dist);
- }
- sum = Math.sqrt(sum);
- if (VivaldiClient.USE_HEIGHT && sum > 0)
- {
- sum = sum + coords[coords.length - 1] + c.coords[coords.length - 1];
- }
- return sum;
- }
-
- public double distanceTo(Coordinate c) {
- //System.err.println("us="+this.toString()+" them="+c.toString());
- if (c == null || !isValid() || !c.isValid())
- return Double.NaN;
- return uncheckedDistanceTo(c);
- }
-
- // Same regardless of using height
- public void add(Vec v) {
- final int num_dims = coords.length;
- for (int i = 0; i < num_dims; ++i) {
- coords[i] += v.direction[i];
- }
- }
-
- public double[]
- getCoordinates()
- {
- if ( num_dims < coords.length ){
-
- double[] res = new double[ num_dims ];
-
- System.arraycopy( coords, 0, res, 0, num_dims );
-
- return( res );
- }
-
- return( coords );
- }
-
- /*
- * protected method, do not expose to client
- */
- protected Vec getDirection(Coordinate c) {
- double length = uncheckedDistanceTo(c);
- if (length == 0) return null;
- final Vec new_vec = new Vec(coords.length);
- for (int i = 0; i < num_dims; ++i) {
- new_vec.direction[i] = (c.coords[i] - coords[i])/length;
- }
- if (VivaldiClient.USE_HEIGHT) {
- new_vec.direction[coords.length-1] =
- (c.coords[coords.length-1] + coords[coords.length-1])/length;
- }
- return new_vec;
- }
-
- protected boolean assign (Coordinate c) {
- if (coords.length != c.coords.length) return false;
- for (int i = 0; i < coords.length; ++i) {
- coords[i] = c.coords[i];
- }
- return true;
- }
-
- public void checkHeight () {
- if (!VivaldiClient.USE_HEIGHT) return;
- if (coords[coords.length-1] <= MIN_COORD) {
- coords[coords.length-1] = VivaldiClient.random.nextDouble()+MIN_COORD;
- }
- }
-
- public boolean atOrigin () {
- for (int i = 0; i < coords.length; i++) {
- if (coords[i] != 0)
- return false;
- }
- return true;
- }
-
- public Vec asVectorFromZero(boolean make_copy) {
- return new Vec(coords, make_copy);
- }
-
- public boolean isValid() {
- for (int i = 0; i < coords.length; ++i)
- {
- if (Double.isNaN(coords[i]))
- {
- if (VivaldiClient.SIMULATION)
- System.err.println("coord isNaN i=" + i);
- return false;
- }
- if (coords[i] > VivaldiClient.MAX_DIST_FROM_ORIGIN || coords[i] < VivaldiClient.NEG_MAX_DIST_FROM_ORIGIN)
- {
- if (VivaldiClient.SIMULATION)
- System.err.println("coord too far from origin i=" + i + " coord=" + coords[i]);
- return false;
- }
- }
- if (VivaldiClient.USE_HEIGHT && coords[coords.length - 1] < 0)
- return false;
- return true;
- }
-
- protected void reset() {
- for (int i = 0; i < coords.length; ++i) {
- coords[i] = 0.;
- }
- }
-
- public boolean equals(Object obj) {
- if (obj instanceof Coordinate) {
- Coordinate c = (Coordinate) obj;
- final int num_dims = coords.length;
- for (int i = 0; i < num_dims; ++i) {
- if (coords[i] != c.coords[i]) {
- return false;
- }
- }
- return true;
- }
- return false;
- }
-
- public int hashCode() {
- final int num_dims = coords.length;
- int hc = CLASS_HASH;
- for (int i = 0; i < num_dims; ++i) {
- hc ^= new Double(coords[i]).hashCode();
- }
- return hc;
- }
-
- public String toString() {
- final StringBuffer sbuf = new StringBuffer(1024);
- sbuf.append("[");
-
- final int num_dims = coords.length;
- for (int i = 0; true;) {
- if (i == num_dims-1 && VivaldiClient.USE_HEIGHT) {
- sbuf.append('h');
- }
- sbuf.append(VivaldiClient.nf.format(coords[i]));
- if (++i < num_dims) {
- sbuf.append(",");
- }
- else {
- break;
- }
- }
- sbuf.append("]");
- return sbuf.toString();
- }
-
- public String toStringAsVector() {
- final StringBuffer sbuf = new StringBuffer(1024);
-
- for (int i = 0; i < coords.length; i++) {
- if (i == coords.length - 1 && VivaldiClient.USE_HEIGHT)
- sbuf.append('h');
- sbuf.append(VivaldiClient.nf.format(coords[i]));
- if (i != coords.length - 1)
- sbuf.append(" ");
- }
- return sbuf.toString();
- }
-
-}
diff --git a/edu/harvard/syrah/nc/EWMAStatistic.java b/edu/harvard/syrah/nc/EWMAStatistic.java
deleted file mode 100644
index 64c7361..0000000
--- a/edu/harvard/syrah/nc/EWMAStatistic.java
+++ /dev/null
@@ -1,49 +0,0 @@
-/*
- * @author Last modified by $Author: ledlie $
- * @version $Revision: 1.3 $ on $Date: 2006/05/19 20:02:33 $
- * @since Mar 7, 2006
- */
-package edu.harvard.syrah.nc;
-
-/*
- * NCLib - a network coordinate library
- *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License as published by
- * the Free Software Foundation; either version 2 of the License.
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
- * GNU General Public License for more details ( see the LICENSE file ).
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
- */
-
-public class EWMAStatistic {
-
- public static final double GAIN = 0.01;
- protected final double gain;
- protected double value;
-
- public EWMAStatistic (double g) {
- gain = g;
- value = 0;
- }
-
- public EWMAStatistic () {
- gain = GAIN;
- value = 0;
- }
-
- synchronized public void add (double item) {
- value = (GAIN*item)+((1.-GAIN)*value);
- }
-
- synchronized public double get () {
- return value;
- }
-
-}
diff --git a/edu/harvard/syrah/nc/License.txt b/edu/harvard/syrah/nc/License.txt
deleted file mode 100644
index 66f35b9..0000000
--- a/edu/harvard/syrah/nc/License.txt
+++ /dev/null
@@ -1,125 +0,0 @@
-The GNU General Public License (GPL)
-Version 2, June 1991
-Copyright (C) 1989, 1991 Free Software Foundation, Inc.
-59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
-
-Everyone is permitted to copy and distribute verbatim copies
-of this license document, but changing it is not allowed.
-
-Preamble
-
-The licenses for most software are designed to take away your freedom to share and change it. By contrast, the GNU General Public License is intended to guarantee your freedom to share and change free software--to make sure the software is free for all its users. This General Public License applies to most of the Free Software Foundation's software and to any other program whose authors commit to using it. (Some other Free Software Foundation software is covered by the GNU Library General Public License instead.) You can apply it to your programs, too.
-
-When we speak of free software, we are referring to freedom, not price. Our General Public Licenses are designed to make sure that you have the freedom to distribute copies of free software (and charge for this service if you wish), that you receive source code or can get it if you want it, that you can change the software or use pieces of it in new free programs; and that you know you can do these things.
-
-To protect your rights, we need to make restrictions that forbid anyone to deny you these rights or to ask you to surrender the rights. These restrictions translate to certain responsibilities for you if you distribute copies of the software, or if you modify it.
-
-For example, if you distribute copies of such a program, whether gratis or for a fee, you must give the recipients all the rights that you have. You must make sure that they, too, receive or can get the source code. And you must show them these terms so they know their rights.
-
-We protect your rights with two steps: (1) copyright the software, and (2) offer you this license which gives you legal permission to copy, distribute and/or modify the software.
-
-Also, for each author's protection and ours, we want to make certain that everyone understands that there is no warranty for this free software. If the software is modified by someone else and passed on, we want its recipients to know that what they have is not the original, so that any problems introduced by others will not reflect on the original authors' reputations.
-
-Finally, any free program is threatened constantly by software patents. We wish to avoid the danger that redistributors of a free program will individually obtain patent licenses, in effect making the program proprietary. To prevent this, we have made it clear that any patent must be licensed for everyone's free use or not licensed at all.
-
-The precise terms and conditions for copying, distribution and modification follow.
-
-TERMS AND CONDITIONS FOR COPYING, DISTRIBUTION AND MODIFICATION
-
-0. This License applies to any program or other work which contains a notice placed by the copyright holder saying it may be distributed under the terms of this General Public License. The "Program", below, refers to any such program or work, and a "work based on the Program" means either the Program or any derivative work under copyright law: that is to say, a work containing the Program or a portion of it, either verbatim or with modifications and/or translated into another language. (Hereinafter, translation is included without limitation in the term "modification".) Each licensee is addressed as "you".
-
-Activities other than copying, distribution and modification are not covered by this License; they are outside its scope. The act of running the Program is not restricted, and the output from the Program is covered only if its contents constitute a work based on the Program (independent of having been made by running the Program). Whether that is true depends on what the Program does.
-
-1. You may copy and distribute verbatim copies of the Program's source code as you receive it, in any medium, provided that you conspicuously and appropriately publish on each copy an appropriate copyright notice and disclaimer of warranty; keep intact all the notices that refer to this License and to the absence of any warranty; and give any other recipients of the Program a copy of this License along with the Program.
-
-You may charge a fee for the physical act of transferring a copy, and you may at your option offer warranty protection in exchange for a fee.
-
-2. You may modify your copy or copies of the Program or any portion of it, thus forming a work based on the Program, and copy and distribute such modifications or work under the terms of Section 1 above, provided that you also meet all of these conditions:
-
-a) You must cause the modified files to carry prominent notices stating that you changed the files and the date of any change.
-
-b) You must cause any work that you distribute or publish, that in whole or in part contains or is derived from the Program or any part thereof, to be licensed as a whole at no charge to all third parties under the terms of this License.
-
-c) If the modified program normally reads commands interactively when run, you must cause it, when started running for such interactive use in the most ordinary way, to print or display an announcement including an appropriate copyright notice and a notice that there is no warranty (or else, saying that you provide a warranty) and that users may redistribute the program under these conditions, and telling the user how to view a copy of this License. (Exception: if the Program itself is interactive but does not normally print such an announcement, your work based on the Program is not required to print an announcement.)
-
-These requirements apply to the modified work as a whole. If identifiable sections of that work are not derived from the Program, and can be reasonably considered independent and separate works in themselves, then this License, and its terms, do not apply to those sections when you distribute them as separate works. But when you distribute the same sections as part of a whole which is a work based on the Program, the distribution of the whole must be on the terms of this License, whose permissions for other licensees extend to the entire whole, and thus to each and every part regardless of who wrote it.
-
-Thus, it is not the intent of this section to claim rights or contest your rights to work written entirely by you; rather, the intent is to exercise the right to control the distribution of derivative or collective works based on the Program.
-
-In addition, mere aggregation of another work not based on the Program with the Program (or with a work based on the Program) on a volume of a storage or distribution medium does not bring the other work under the scope of this License.
-
-3. You may copy and distribute the Program (or a work based on it, under Section 2) in object code or executable form under the terms of Sections 1 and 2 above provided that you also do one of the following:
-
-a) Accompany it with the complete corresponding machine-readable source code, which must be distributed under the terms of Sections 1 and 2 above on a medium customarily used for software interchange; or,
-
-b) Accompany it with a written offer, valid for at least three years, to give any third party, for a charge no more than your cost of physically performing source distribution, a complete machine-readable copy of the corresponding source code, to be distributed under the terms of Sections 1 and 2 above on a medium customarily used for software interchange; or,
-
-c) Accompany it with the information you received as to the offer to distribute corresponding source code. (This alternative is allowed only for noncommercial distribution and only if you received the program in object code or executable form with such an offer, in accord with Subsection b above.)
-
-The source code for a work means the preferred form of the work for making modifications to it. For an executable work, complete source code means all the source code for all modules it contains, plus any associated interface definition files, plus the scripts used to control compilation and installation of the executable. However, as a special exception, the source code distributed need not include anything that is normally distributed (in either source or binary form) with the major components (compiler, kernel, and so on) of the operating system on which the executable runs, unless that component itself accompanies the executable.
-
-If distribution of executable or object code is made by offering access to copy from a designated place, then offering equivalent access to copy the source code from the same place counts as distribution of the source code, even though third parties are not compelled to copy the source along with the object code.
-
-4. You may not copy, modify, sublicense, or distribute the Program except as expressly provided under this License. Any attempt otherwise to copy, modify, sublicense or distribute the Program is void, and will automatically terminate your rights under this License. However, parties who have received copies, or rights, from you under this License will not have their licenses terminated so long as such parties remain in full compliance.
-
-5. You are not required to accept this License, since you have not signed it. However, nothing else grants you permission to modify or distribute the Program or its derivative works. These actions are prohibited by law if you do not accept this License. Therefore, by modifying or distributing the Program (or any work based on the Program), you indicate your acceptance of this License to do so, and all its terms and conditions for copying, distributing or modifying the Program or works based on it.
-
-6. Each time you redistribute the Program (or any work based on the Program), the recipient automatically receives a license from the original licensor to copy, distribute or modify the Program subject to these terms and conditions. You may not impose any further restrictions on the recipients' exercise of the rights granted herein. You are not responsible for enforcing compliance by third parties to this License.
-
-7. If, as a consequence of a court judgment or allegation of patent infringement or for any other reason (not limited to patent issues), conditions are imposed on you (whether by court order, agreement or otherwise) that contradict the conditions of this License, they do not excuse you from the conditions of this License. If you cannot distribute so as to satisfy simultaneously your obligations under this License and any other pertinent obligations, then as a consequence you may not distribute the Program at all. For example, if a patent license would not permit royalty-free redistribution of the Program by all those who receive copies directly or indirectly through you, then the only way you could satisfy both it and this License would be to refrain entirely from distribution of the Program.
-
-If any portion of this section is held invalid or unenforceable under any particular circumstance, the balance of the section is intended to apply and the section as a whole is intended to apply in other circumstances.
-
-It is not the purpose of this section to induce you to infringe any patents or other property right claims or to contest validity of any such claims; this section has the sole purpose of protecting the integrity of the free software distribution system, which is implemented by public license practices. Many people have made generous contributions to the wide range of software distributed through that system in reliance on consistent application of that system; it is up to the author/donor to decide if he or she is willing to distribute software through any other system and a licensee cannot impose that choice.
-
-This section is intended to make thoroughly clear what is believed to be a consequence of the rest of this License.
-
-8. If the distribution and/or use of the Program is restricted in certain countries either by patents or by copyrighted interfaces, the original copyright holder who places the Program under this License may add an explicit geographical distribution limitation excluding those countries, so that distribution is permitted only in or among countries not thus excluded. In such case, this License incorporates the limitation as if written in the body of this License.
-
-9. The Free Software Foundation may publish revised and/or new versions of the General Public License from time to time. Such new versions will be similar in spirit to the present version, but may differ in detail to address new problems or concerns.
-
-Each version is given a distinguishing version number. If the Program specifies a version number of this License which applies to it and "any later version", you have the option of following the terms and conditions either of that version or of any later version published by the Free Software Foundation. If the Program does not specify a version number of this License, you may choose any version ever published by the Free Software Foundation.
-
-10. If you wish to incorporate parts of the Program into other free programs whose distribution conditions are different, write to the author to ask for permission. For software which is copyrighted by the Free Software Foundation, write to the Free Software Foundation; we sometimes make exceptions for this. Our decision will be guided by the two goals of preserving the free status of all derivatives of our free software and of promoting the sharing and reuse of software generally.
-
-NO WARRANTY
-
-11. BECAUSE THE PROGRAM IS LICENSED FREE OF CHARGE, THERE IS NO WARRANTY FOR THE PROGRAM, TO THE EXTENT PERMITTED BY APPLICABLE LAW. EXCEPT WHEN OTHERWISE STATED IN WRITING THE COPYRIGHT HOLDERS AND/OR OTHER PARTIES PROVIDE THE PROGRAM "AS IS" WITHOUT WARRANTY OF ANY KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. THE ENTIRE RISK AS TO THE QUALITY AND PERFORMANCE OF THE PROGRAM IS WITH YOU. SHOULD THE PROGRAM PROVE DEFECTIVE, YOU ASSUME THE COST OF ALL NECESSARY SERVICING, REPAIR OR CORRECTION.
-
-12. IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN WRITING WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MAY MODIFY AND/OR REDISTRIBUTE THE PROGRAM AS PERMITTED ABOVE, BE LIABLE TO YOU FOR DAMAGES, INCLUDING ANY GENERAL, SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGES ARISING OUT OF THE USE OR INABILITY TO USE THE PROGRAM (INCLUDING BUT NOT LIMITED TO LOSS OF DATA OR DATA BEING RENDERED INACCURATE OR LOSSES SUSTAINED BY YOU OR THIRD PARTIES OR A FAILURE OF THE PROGRAM TO OPERATE WITH ANY OTHER PROGRAMS), EVEN IF SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH DAMAGES.
-
-END OF TERMS AND CONDITIONS
-
-How to Apply These Terms to Your New Programs
-
-If you develop a new program, and you want it to be of the greatest possible use to the public, the best way to achieve this is to make it free software which everyone can redistribute and change under these terms.
-
-To do so, attach the following notices to the program. It is safest to attach them to the start of each source file to most effectively convey the exclusion of warranty; and each file should have at least the "copyright" line and a pointer to where the full notice is found.
-
-one line to give the program's name and a brief idea of what it does.
-Copyright (C)
-
-This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 2 of the License, or (at your option) any later version.
-
-This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details.
-
-You should have received a copy of the GNU General Public License along with this program; if not, write to the Free Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
-
-Also add information on how to contact you by electronic and paper mail.
-
-If the program is interactive, make it output a short notice like this when it starts in an interactive mode:
-
-Gnomovision version 69, Copyright (C) year name of author Gnomovision comes with ABSOLUTELY NO WARRANTY; for details type `show w'. This is free software, and you are welcome to redistribute it under certain conditions; type `show c' for details.
-
-The hypothetical commands `show w' and `show c' should show the appropriate parts of the General Public License. Of course, the commands you use may be called something other than `show w' and `show c'; they could even be mouse-clicks or menu items--whatever suits your program.
-
-You should also get your employer (if you work as a programmer) or your school, if any, to sign a "copyright disclaimer" for the program, if necessary. Here is a sample; alter the names:
-
-Yoyodyne, Inc., hereby disclaims all copyright interest
-in the program `Gnomovision' (which makes passes at compilers)
-written by James Hacker.
-
-signature of Ty Coon, 1 April 1989
-Ty Coon, President of Vice
-
-This General Public License does not permit incorporating your program into proprietary programs. If your program is a subroutine library, you may consider it more useful to permit linking proprietary applications with the library. If this is what you want to do, use the GNU Library General Public License instead of this License.
diff --git a/edu/harvard/syrah/nc/ObserverList.java b/edu/harvard/syrah/nc/ObserverList.java
deleted file mode 100644
index cc00547..0000000
--- a/edu/harvard/syrah/nc/ObserverList.java
+++ /dev/null
@@ -1,114 +0,0 @@
-package edu.harvard.syrah.nc;
-
-/*
- * NCLib - a network coordinate library
- *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License as published by
- * the Free Software Foundation; either version 2 of the License.
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
- * GNU General Public License for more details ( see the LICENSE file ).
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
- */
-
-import java.util.Iterator;
-import java.util.LinkedList;
-import java.util.List;
-
-/**
- * A list of observers for the application-level coordinate.
- *
- * @author Michael Parker, Jonathan Ledlie
- */
-public class ObserverList {
- final protected List<ApplicationObserver> obs_list;
-
- protected ObserverList() {
- obs_list = new LinkedList<ApplicationObserver>();
- }
-
- /**
- * Returns the number of observers in the list.
- *
- * @return the size of the observer list
- */
- public int size() {
- return obs_list.size();
- }
-
- /**
- * Returns whether the observer list is empty, meaning its size equals
- * <code>0</code>.
- *
- * @return <code>true</code> if the observer list is empty,
- * <code>false</code> otherwise
- */
- public boolean isEmpty() {
- return obs_list.isEmpty();
- }
-
- /**
- * Returns whether the list contains the given observer. If the parameter
- * <code>obj</code> is <code>null</code>, this method returns
- * <code>false</code>.
- *
- * @param obj
- * the observer to query for membership in the list
- * @return <code>true</code> if the list contains the observer,
- * <code>false</code> otherwise
- */
- public boolean contains(ApplicationObserver obj) {
- return (obj != null) ? obs_list.contains(obj) : false;
- }
-
- /**
- * Returns an iterator over the list of observers.
- *
- * @return an iterator over the observer list
- */
- public Iterator<ApplicationObserver> iterator() {
- return obs_list.iterator();
- }
-
- /**
- * Adds the given observer to the list of observers. If the parameter
- * <code>obj</code> is <code>null</code>, this method returns
- * <code>false</code> and the underlying list remains unchanged.
- *
- * @param obj
- * the observer to add to the list
- * @return <code>true</code> if the observer is added to the list,
- * <code>false</code> otherwise
- */
- public boolean add(ApplicationObserver obj) {
- return (obj != null) ? obs_list.add(obj) : false;
- }
-
- /**
- * Removes the given observer from the list of observers. If the parameter
- * <code>obj</code> is <code>null</code> or the list does not contain
- * the observer, this method returns <code>false</code> and the underlying
- * list remains unchanged.
- *
- * @param obj
- * the observer to remove from the list
- * @return <code>true</code> if the observer is removed from the list,
- * <code>false</code> otherwise
- */
- public boolean remove(ApplicationObserver obj) {
- return (obj != null) ? obs_list.remove(obj) : true;
- }
-
- /**
- * Removes all the observers from the list.
- */
- public void clear() {
- obs_list.clear();
- }
-}
diff --git a/edu/harvard/syrah/nc/RemoteState.java b/edu/harvard/syrah/nc/RemoteState.java
deleted file mode 100644
index 4258cc9..0000000
--- a/edu/harvard/syrah/nc/RemoteState.java
+++ /dev/null
@@ -1,199 +0,0 @@
-package edu.harvard.syrah.nc;
-
-import java.io.BufferedReader;
-import java.io.DataInputStream;
-import java.io.DataOutputStream;
-import java.io.File;
-import java.io.FileNotFoundException;
-import java.io.FileReader;
-import java.io.IOException;
-import java.util.StringTokenizer;
-
-import com.aelitis.azureus.vivaldi.ver2.IDWrapper;
-
-/*
- * NCLib - a network coordinate library
- *
- * This program is free software; you can redistribute it and/or modify it under
- * the terms of the GNU General Public License as published by the Free Software
- * Foundation; either version 2 of the License.
- *
- * This program is distributed in the hope that it will be useful, but WITHOUT
- * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS
- * FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details (
- * see the LICENSE file ).
- *
- * You should have received a copy of the GNU General Public License along with
- * this program; if not, write to the Free Software Foundation, Inc., 59 Temple
- * Place, Suite 330, Boston, MA 02111-1307 USA
- */
-
-/**
- * The state kept of a remote node between samples.
- *
- * @author Michael Parker, Jonathan Ledlie
- *
- * @param <T>
- * the type of the unique identifier of a host
- */
-public class RemoteState<T> {
- // made not final so they can be changed by simulator
- protected static double SAMPLE_PERCENTILE = 0.5;
- // Don't keep more than this many samples
- public static int MAX_SAMPLE_SIZE = 16;
- // Don't use a guy unless we have this many samples
- public static int MIN_SAMPLE_SIZE = 4;
-
- protected final T addr;
- protected final WindowStatistic ping_samples;
-
- protected Coordinate last_coords;
- protected double last_error;
- protected long last_update_time;
-
- public RemoteState(T _addr) {
- addr = _addr;
- ping_samples = new WindowStatistic(MAX_SAMPLE_SIZE);
-
- last_coords = null;
- last_error = 0.0;
- last_update_time = -1L;
- }
-
- public void toSerialized(DataOutputStream dos) throws IOException {
- // casting addr even though its generic :(
- dos.write(((IDWrapper)addr).getRawId());
- last_coords.toSerialized(dos);
- dos.writeFloat((float) last_error);
- dos.writeFloat((float) getSample());
- }
-
- public RemoteState(int num_dims, int id_length, long curr_time, DataInputStream is) throws IOException {
- byte[] remote_id = new byte[id_length];
- is.read(remote_id);
- addr = (T) (new IDWrapper(remote_id));
-
- last_coords = new Coordinate (num_dims, is);
- last_error = ((double) is.readFloat());
- double rtt = ((double) is.readFloat());
- ping_samples = new WindowStatistic(MAX_SAMPLE_SIZE);
-
- last_update_time = curr_time;
- if (!last_coords.isValid() ||
- Double.isNaN(last_error) || last_error <= 0 || last_error > VivaldiClient.MAX_ERROR ||
- Double.isNaN(rtt) || rtt <= 0 || rtt >= VivaldiClient.OUTRAGEOUSLY_LARGE_RTT) {
- ping_samples.clear();
- last_error = VivaldiClient.MAX_ERROR;
- last_coords = new Coordinate (num_dims);
- return;
- }
-
- for (int i = 0; i < MIN_SAMPLE_SIZE; i++) {
- ping_samples.add(rtt);
- }
-
- }
-
- public T getAddress () {
- return addr;
- }
-
- public void assign(Coordinate _last_coords, double _last_error,
- long _curr_time) {
- last_coords = _last_coords;
- last_error = _last_error;
- last_update_time = _curr_time;
- }
-
- public void addSample(double sample_rtt, long sample_age, Coordinate r_coord,
- double r_error, long curr_time) {
- ping_samples.add(sample_rtt);
- last_coords = r_coord;
- last_error = r_error;
- if (sample_age > 0)
- last_update_time = curr_time-sample_age;
- else
- last_update_time = curr_time;
- }
-
- public boolean isValid (long curr_time) {
- if (getLastError() <= 0. || last_update_time <= 0 ||
- last_coords.atOrigin()) {
- return false;
- }
-
- if (getSampleSize() >= MIN_SAMPLE_SIZE && getSample() > 0) {
- return true;
- }
-
- if (getSampleSize() >= 2 && ping_samples.withinVariance(.1)) {
- return true;
- }
-
- return false;
- }
-
- public double getSample() {
- return ping_samples.getPercentile(SAMPLE_PERCENTILE);
- }
-
- public int getSampleSize() {
- return ping_samples.getSize();
- }
- /*
- public boolean isLowVariance () {
- return ping_samples.isLowVariance();
- }
- */
-
- public Coordinate getLastCoordinate() {
- return last_coords;
- }
-
- public double getLastError() {
- return last_error;
- }
-/*
- public boolean beenSampled() {
- return (last_update_time >= 0L);
- }
-*/
- public long getLastUpdateTime() {
- return last_update_time;
- }
-
- public static void main (String args[]) {
- System.out.println("Testing Remote State Object");
- String sampleFile = args[0];
- RemoteState<String> rs = new RemoteState<String>(sampleFile);
- BufferedReader sampleReader = null;
- try {
- sampleReader = new BufferedReader (new FileReader (new File (sampleFile)));
- }catch (FileNotFoundException ex) {
- System.err.println("Cannot open file "+sampleFile+": "+ex);
- System.exit(-1);
- }
-
- long sample_age = 0;
- Coordinate r_coord = null;
- double r_error = 0;
-
- try {
- String sampleLine = sampleReader.readLine();
- while (sampleLine != null) {
- // reads in timestamp in ms and raw rtt
- StringTokenizer sampleTokenizer = new StringTokenizer (sampleLine);
- long curr_time = Long.parseLong((String)(sampleTokenizer.nextElement()));
- int rawRTT = Integer.parseInt((String)(sampleTokenizer.nextElement()));
- sampleLine = sampleReader.readLine();
- rs.addSample (rawRTT, sample_age, r_coord, r_error, curr_time);
- double smoothedRTT = rs.getSample();
- System.out.println(curr_time+" raw "+rawRTT+" smooth "+smoothedRTT);
- }
- } catch (Exception ex) {
- System.err.println("Problem parsing "+sampleFile+": "+ex);
- System.exit(-1);
- }
- }
-
-}
diff --git a/edu/harvard/syrah/nc/Vec.java b/edu/harvard/syrah/nc/Vec.java
deleted file mode 100644
index d24d5dd..0000000
--- a/edu/harvard/syrah/nc/Vec.java
+++ /dev/null
@@ -1,219 +0,0 @@
-package edu.harvard.syrah.nc;
-
-/*
- * NCLib - a network coordinate library
- *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License as published by
- * the Free Software Foundation; either version 2 of the License.
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
- * GNU General Public License for more details ( see the LICENSE file ).
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
- */
-
-/*
- * A vector in the Euclidian space.
- */
-public class Vec {
-
- final protected static int CLASS_HASH = Vec.class.hashCode();
-
- final protected double[] direction;
- final protected int num_dims;
-
- /*
- public static Vec add(Vec lhs, Vec rhs) {
- Vec sum = new Vec(lhs);
- sum.add(rhs);
- return sum;
- }
-
- public static Vec subtract(Vec lhs, Vec rhs) {
- Vec diff = new Vec(lhs);
- diff.subtract(rhs);
- return diff;
- }
- */
-
- public static Vec scale(Vec lhs, double k) {
- Vec scaled = new Vec(lhs);
- scaled.scale(k);
- return scaled;
- }
-
- /*
- public static Vec makeUnit(Vec v) {
- Vec unit = new Vec(v);
- unit.makeUnit();
- return unit;
- }
- */
-
- /*
- public static Vec makeRandomUnit(int num_dims) {
- final Vec v = makeRandom (num_dims, 1.);
- v.makeUnit();
- return v;
- }
- */
-
- public static Vec makeRandom(int num_dims, double axisLength) {
- final Vec v = new Vec(num_dims);
- for (int i = 0; i < num_dims; ++i) {
- double length = VivaldiClient.random.nextDouble() * axisLength;
- if ( (!VivaldiClient.USE_HEIGHT || i < num_dims-1) &&
- (VivaldiClient.random.nextBoolean())) {
- length *= -1.;
- }
- v.direction[i] = length;
- }
- return v;
- }
-
-
- public Vec(int _num_dims) {
- direction = new double[_num_dims];
- if (VivaldiClient.USE_HEIGHT) _num_dims--;
- num_dims = _num_dims;
- }
-
- public Vec(Vec v) {
- this(v.direction, true);
- }
-
- // TODO isn't this missing the height coordinate?
- public Vec(double[] init_dir, boolean make_copy) {
- if (make_copy) {
- final int num_dims = init_dir.length;
- direction = new double[num_dims];
- System.arraycopy(init_dir, 0, direction, 0, num_dims);
- }
- else {
- direction = init_dir;
- }
- int _num_dims = init_dir.length;
- if (VivaldiClient.USE_HEIGHT) _num_dims--;
- num_dims = _num_dims;
- }
-
- public int getNumDimensions() {
- // keep num_dimensions internal
- return direction.length;
- }
-
- public double[] getComponents() {
- final double[] dir_copy = new double[direction.length];
- System.arraycopy(direction, 0, dir_copy, 0, direction.length);
- return dir_copy;
- }
-
- //Same regardless of using height
- public void add(Vec v) {
- for (int i = 0; i < direction.length; ++i) {
- direction[i] += v.direction[i];
- }
- }
-
- // only done with gravity, ignores height
- public void subtract(Vec v) {
- for (int i = 0; i < direction.length; ++i) {
- direction[i] -= v.direction[i];
- }
- }
-
- /*
- public void subtract(Vec v) {
- for (int i = 0; i < num_dims; ++i) {
- direction[i] -= v.direction[i];
- }
- if (VivaldiClient.USE_HEIGHT) {
- direction[direction.length-1] += v.direction[direction.length-1];
- }
- }
- */
-
- public void scale(double k) {
- for (int i = 0; i < direction.length; ++i) {
- direction[i] *= k;
- }
- }
-
- public boolean isUnit() {
- return (getLength() == 1.0);
- }
-
- public double getLength() {
- double sum = getPlanarLength();
- if (VivaldiClient.USE_HEIGHT)
- sum += direction[direction.length-1];
- return sum;
- }
-
- double getPlanarLength() {
- double sum = 0;
- for (int i = 0; i < num_dims; ++i) {
- sum += (direction[i] * direction[i]);
- }
- return Math.sqrt(sum);
- }
-
- public void makeUnit() {
- final double length = getLength();
- if (length != 1.0) {
- scale (1./length);
- }
- }
-
- public Coordinate asCoordinateFromZero(boolean make_copy) {
- return new Coordinate(direction, make_copy);
- }
-
- public boolean equals(Object obj) {
- if (obj instanceof Vec) {
- Vec v = (Vec) obj;
- final int num_dims = direction.length;
- for (int i = 0; i < num_dims; ++i) {
- if (direction[i] != v.direction[i]) {
- return false;
- }
- }
- return true;
- }
- return false;
- }
-
- public int hashCode() {
- final int num_dims = direction.length;
- int hc = CLASS_HASH;
- for (int i = 0; i < num_dims; ++i) {
- hc ^= new Double(direction[i]).hashCode();
- }
- return hc;
- }
-
- public String toString() {
- final StringBuffer sbuf = new StringBuffer(1024);
- sbuf.append("[");
- final int num_dims = direction.length;
- for (int i = 0; true; ) {
- if (i == num_dims-1 && VivaldiClient.USE_HEIGHT) {
- sbuf.append('h');
- }
- sbuf.append(VivaldiClient.nf.format(direction[i]));
- if (++i < num_dims) {
- sbuf.append(",");
- }
- else {
- break;
- }
- }
- sbuf.append("]");
- return sbuf.toString();
- }
-}
diff --git a/edu/harvard/syrah/nc/VivaldiClient.java b/edu/harvard/syrah/nc/VivaldiClient.java
deleted file mode 100644
index 0bd0cb3..0000000
--- a/edu/harvard/syrah/nc/VivaldiClient.java
+++ /dev/null
@@ -1,1387 +0,0 @@
-package edu.harvard.syrah.nc;
-
-/*
- * NCLib - a network coordinate library
- *
- * This program is free software; you can redistribute it and/or modify it under
- * the terms of the GNU General Public License as published by the Free Software
- * Foundation; either version 2 of the License.
- *
- * This program is distributed in the hope that it will be useful, but WITHOUT
- * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS
- * FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details (
- * see the LICENSE file ).
- *
- * You should have received a copy of the GNU General Public License along with
- * this program; if not, write to the Free Software Foundation, Inc., 59 Temple
- * Place, Suite 330, Boston, MA 02111-1307 USA
- */
-
-import java.io.DataInputStream;
-import java.io.DataOutputStream;
-import java.io.IOException;
-import java.text.NumberFormat;
-import java.util.ArrayList;
-import java.util.Collections;
-import java.util.HashMap;
-import java.util.Hashtable;
-import java.util.Iterator;
-import java.util.LinkedList;
-import java.util.List;
-import java.util.Map;
-import java.util.Random;
-import java.util.Set;
-import java.util.concurrent.locks.ReentrantLock;
-import java.util.logging.Logger;
-
-import org.gudy.azureus2.core3.util.AEMonitor2;
-
-import com.aelitis.azureus.vivaldi.ver2.IDWrapper;
-
-/**
- * A class that is responsible for updating the local Vivaldi coordinates, both
- * at the system and application level, and also maintaining the state of remote
- * hosts that support Vivaldi.
- *
- * @author Michael Parker, Jonathan Ledlie
- *
- * @param <T>
- * the type of the unique identifier of a host
- */
-public final class VivaldiClient<T> {
-
- //protected static edu.harvard.syrah.prp.Log slog = new edu.harvard.syrah.prp.Log(VivaldiClient.class);
- protected static Logger slog = Logger.getLogger(VivaldiClient.class.getName());
-
- public static final boolean SIMULATION = false;
- public static boolean debug = false;
- public static boolean debugCrawler = false;
- // include even good events in output, not just problems
- public static boolean debugGood = false;
-
- // Old version
- public static final byte VERSION_02 = 0x02;
- // Height added
- public static final byte VERSION_03 = 0x03;
- // Changed filter percentile from 0.125 to 0.5
- // and added ping timer at 10sec
- // c_error = 0.10, c_control = 0.25
- public static final byte VERSION_04 = 0x04;
- public static final byte CURRENT_VERSION = VERSION_04;
-
-
- public static double COORD_ERROR = 0.10; // c_e parameter
- public static double COORD_CONTROL = 0.25; // c_c parameter
-
- // The last element of the coordinate is a "height" away from the Euclidean space
- public static boolean USE_HEIGHT = true;
-
- // Try to minimize our error between up to MAX_NEIGHBORS guys at once
-
- final public static int MAX_NEIGHBORS = 512;
- final protected static int WINDOW_SIZE = 64;
-
- // Toss remote state of nodes if we haven't heard from them for three days
- // This allows us to keep around a list of RTTs for the node even if
- // we currently aren't using its coordinate for update
- public static long RS_EXPIRATION = 1 * 24 * 60 * 60 * 1000;
- final public static long MAINTENANCE_PERIOD = 10 * 60 * 1000; // ten minutes
- // target max number of remote states kept
- // set to be larger than MAX_NEIGHBORS
- public final static int MAX_RS_MAP_SIZE = 2 * 1024;
- // do not update our coordinate faster than this
- // hopefully this will reduce cpu load
- public final static int MIN_SYS_UPDATE_PERIOD = 30*1000;
- private long lastMaintenanceStamp = 0;
-
-
- public static Random random = new Random();
-
- // Do an update if we've moved a third of the way to our nearest known
- // neighbor
- // Lowering this value leads to more frequent updates
- // Should be less than 0.5
- public static final double APP_UPDATE_THRESHOLD = 0.1;
-
- // completely ignore any RTT larger than twenty seconds
- public static final double OUTRAGEOUSLY_LARGE_RTT = 20000.0;
-
- // range from origin where pull of gravity is 1
- public static double GRAVITY_DIAMETER = 512.;
-
- // We reject remote coords with any component larger than this value
- // This is to prevent serialization problems from leaking into coords
- // we're actually going to use
- // Gravity should keep everybody within this ball
- public final static double MAX_DIST_FROM_ORIGIN = 60000.;
- public final static double NEG_MAX_DIST_FROM_ORIGIN = -1 * MAX_DIST_FROM_ORIGIN;
-
-
- final static protected NumberFormat nf = NumberFormat.getInstance();
- final static protected int NFDigits = 3;
- static boolean haveSetFormat = false;
-
- protected final int num_dims;
-
- protected Coordinate app_coord;
-
- protected Coordinate sys_coord;
-
- // error should always be less than or equal to MAX_ERROR
- // and greater than 0
- protected double error;
- public static final double MAX_ERROR = 1.;
-
- public static boolean keepStatistics = false;
- // keeping an EWMA of some of these things gives skewed results
- // so we use a filter
- final public static int RUNNING_STAT_HISTORY = 1024;
- // 30 minutes
- //final public static long STAT_EXPIRE_TIME = 30 * 60 * 1000;
- protected WindowStatistic running_sys_error;
- protected WindowStatistic running_app_error;
- protected EWMAStatistic running_sys_dd;
- protected EWMAStatistic running_app_dd;
- protected EWMAStatistic running_neighbors_used;
- protected EWMAStatistic running_neighbor_error;
- protected EWMAStatistic running_relative_diff;
- protected EWMAStatistic running_sys_update_frequency;
- protected EWMAStatistic running_app_update_frequency;
- protected EWMAStatistic running_age;
- protected EWMAStatistic running_gravity;
- protected EWMAStatistic running_remote_error;
- protected EWMAStatistic running_neighbor_latency;
-
- protected long time_of_last_app_update = -1;
- protected long update_counter = 0;
- protected long bump_error_counter = 0;
- protected boolean bump_error_flag = false;
-
- // keep the list of neighbors around for computing statistics
- protected final List<RemoteState<T>> neighbors;
-
- // note: not just part of statistics
- // this is returned to querier of our coords so he knows how stale they are
- protected long time_of_last_sys_update = -1;
-
- protected final ObserverList obs_list;
-
- protected final HashMap<T, RemoteState<T>> rs_map;
-
- protected final Set<T> hosts;
-
- protected Coordinate start_centroid;
-
- protected boolean updated_app_coord_at_least_once = false;
-
- protected final List<Coordinate> start_coords;
-
- protected final List<Coordinate> current_coords;
-
- protected Coordinate nearest_neighbor;
- protected T local_addr;
-
- private AEMonitor2 lock = new AEMonitor2( "VivaldiClient" );
-
- /**
- * Creates a new instance. Typically an application should only have one
- * instance of this class, as it only needs one set of Vivaldi coordinates.
- *
- * @param _num_dims
- * the number of Euclidian dimensions coordinates should have
- */
- public VivaldiClient(int _num_dims) {
- num_dims = _num_dims;
-
- app_coord = new Coordinate(num_dims);
- sys_coord = new Coordinate(num_dims);
-
- error = MAX_ERROR;
- neighbors = new ArrayList<RemoteState<T>>();
-
- obs_list = new ObserverList();
- rs_map = new HashMap<T, RemoteState<T>>();
- hosts = Collections.unmodifiableSet(rs_map.keySet());
- start_coords = new LinkedList<Coordinate>();
- current_coords = new LinkedList<Coordinate>();
- nearest_neighbor = null;
-
- //bootstrapCoordinates ();
-
- running_neighbors_used = new EWMAStatistic();
- running_neighbor_error = new EWMAStatistic();
- running_remote_error = new EWMAStatistic();
- running_neighbor_latency = new EWMAStatistic();
-
- if (keepStatistics) {
- running_sys_update_frequency = new EWMAStatistic();
- running_app_update_frequency = new EWMAStatistic();
- running_sys_error = new WindowStatistic(RUNNING_STAT_HISTORY);
- running_app_error = new WindowStatistic(RUNNING_STAT_HISTORY);
- running_sys_dd = new EWMAStatistic();
- running_app_dd = new EWMAStatistic();
- running_relative_diff = new EWMAStatistic();
- running_age = new EWMAStatistic();
- running_gravity = new EWMAStatistic();
- }
-
- if (!haveSetFormat) {
- if (nf.getMaximumFractionDigits() > NFDigits) {
- nf.setMaximumFractionDigits(NFDigits);
- }
- if (nf.getMinimumFractionDigits() > NFDigits) {
- nf.setMinimumFractionDigits(NFDigits);
- }
- nf.setGroupingUsed(false);
- haveSetFormat = true;
- }
- }
-
- // for debugging simulations
- public void setLocalID (T _local_addr) {
- local_addr = _local_addr;
- }
-
- // See Lua IMC 2005, Pietzuch WORLDS 2005, Ledlie ICDCS 2006
- // for description of these statistics
- protected ApplicationStatistics computeApplicationStatistics() {
-
- ApplicationStatistics appStats = new ApplicationStatistics();
-
- if (sys_coord.atOrigin() || neighbors == null ||
- neighbors.size() == 0) return appStats;
-
- int rrl_wrong = 0;
- int rrl_count = 0;
- double narl_loss = 0;
- double narl_sum = 0;
- double ralp_loss = 0;
- double ralp_sum = 0;
-
- // TODO might want to use the app coord here so as to get the average location
-
- for (Iterator<RemoteState<T>> i = neighbors.iterator(); i.hasNext();) {
- RemoteState<T> A_rs = i.next();
-
- double A_rtt = A_rs.getSample();
- double A_metric = sys_coord.distanceTo(A_rs.getLastCoordinate());
- if (A_rtt > 0 && A_metric > 0) {
-
- for (Iterator<RemoteState<T>> j = neighbors.iterator(); j
- .hasNext();) {
- RemoteState<T> B_rs = j.next();
-
- if (!A_rs.addr.equals(B_rs.addr)) {
-
- double B_rtt = B_rs.getSample();
- double B_metric = sys_coord.distanceTo(B_rs
- .getLastCoordinate());
- if (B_rtt > 0 && B_metric > 0) {
-
- double rtt_diff = Math.abs(A_rtt - B_rtt);
- rrl_count++;
- narl_sum += rtt_diff;
-
- if ((A_rtt > B_rtt && A_metric < B_metric)
- || (B_rtt > A_rtt && B_metric < A_metric)) {
- // oops coordinates have incorrectly ranked
- // these two guys
- rrl_wrong++;
- narl_loss += rtt_diff;
- }
-
- // relative latency penalty for using A,
- // which the metric says is closer,
- // when A is actually further away
- if (A_rtt > B_rtt && A_metric < B_metric) {
- ralp_loss += rtt_diff;
- ralp_sum += A_rtt;
- }
- if (B_rtt > A_rtt && B_metric < A_metric) {
- ralp_loss += rtt_diff;
- ralp_sum += B_rtt;
- }
- }
- }
- }
- }
- }
-
- appStats.validLinkCount = rrl_count;
- if (rrl_count > 0)
- appStats.rrl = rrl_wrong / (double) rrl_count;
- if (narl_sum > 0)
- appStats.narl = narl_loss / narl_sum;
- if (ralp_sum > 0)
- appStats.ralp = ralp_loss / ralp_sum;
- return appStats;
- }
-
- // poor man's public struct
- class ApplicationStatistics {
- double rrl = 0;
- double narl = 0;
- double ralp = 0;
- int validLinkCount = 0;
-
- public ApplicationStatistics() {
- };
- }
-
- public String toString() {
- try{
- lock.enter();
-
- long update_counter_output = update_counter;
- update_counter = 0;
- if (keepStatistics) {
- ApplicationStatistics appStats = computeApplicationStatistics();
-
- return new String("[sc=" + sys_coord + ",ac=" + app_coord + ",er="
- + nf.format(error) + ",sys_re50="
- + nf.format(running_sys_error.getPercentile(.5))
- + ",sys_re95="
- + nf.format(running_sys_error.getPercentile(.95))
- + ",app_re50="
- + nf.format(running_app_error.getPercentile(.5))
- + ",app_re95="
- + nf.format(running_app_error.getPercentile(.95))
- + ",sys_dd=" + nf.format(running_sys_dd.get()) + ",app_dd="
- + nf.format(running_app_dd.get()) + ",ns="
- + nf.format(running_neighbors_used.get()) + ",rd="
- + nf.format(running_relative_diff.get()) + ",sf="
- + nf.format(running_sys_update_frequency.get()) + ",af="
- + nf.format(running_app_update_frequency.get()) + ",rrl="
- + nf.format(appStats.rrl) + ",narl="
- + nf.format(appStats.narl) + ",ralp="
- + nf.format(appStats.ralp) + ",age="
- + getAge(System.currentTimeMillis()) + ",vl="
- + nf.format(appStats.validLinkCount) +",gr="
- + nf.format(running_gravity.get())+",nn="
- + nf.format(sys_coord.distanceTo(nearest_neighbor))
- + ",uc="+update_counter_output+"]");
- }
- else {
- return new String("[sc=" + sys_coord + ",ac=" + app_coord + ",er="
- + nf.format(error) + ",nn="
- + nf.format(sys_coord.distanceTo(nearest_neighbor))
- + ",uc="+update_counter_output
- + ",ns="+ nf.format(running_neighbors_used.get())
- + ",ne="+ nf.format(running_neighbor_error.get())
- + ",rEr="+nf.format(running_remote_error.get())
- + ",rLat="+nf.format(running_neighbor_latency.get())
- +"]");
- }
- }finally{
-
- lock.exit();
- }
- }
-
- public Hashtable<String, Double> getStatistics() {
- try{
- lock.enter();
-
- Hashtable<String, Double> stats = new Hashtable<String, Double>();
- for (int i = 0; i < num_dims; i++) {
- stats.put("sys_coord_" + i, sys_coord.coords[i]);
- stats.put("app_coord_" + i, sys_coord.coords[i]);
- }
- stats.put("er", error);
- stats.put("nn", sys_coord.distanceTo(nearest_neighbor));
-
- if (keepStatistics) {
- ApplicationStatistics appStats = computeApplicationStatistics();
-
- stats.put("rrl", appStats.rrl);
- stats.put("narl", appStats.narl);
- stats.put("ralp", appStats.ralp);
- stats.put("age", new Double (getAge(System.currentTimeMillis())));
- stats.put("vl", new Double(appStats.validLinkCount));
- stats.put("gr", running_gravity.get());
-
- stats.put("sys_re50", running_sys_error.getPercentile(.5));
- stats.put("sys_re95", running_sys_error.getPercentile(.95));
- stats.put("app_re50", running_app_error.getPercentile(.5));
- stats.put("app_re95", running_app_error.getPercentile(.95));
-
- stats.put("sys_dd", running_sys_dd.get());
- stats.put("app_dd", running_app_dd.get());
-
- stats.put("ne", running_neighbors_used.get());
- stats.put("rd", running_relative_diff.get());
- stats.put("sf", running_sys_update_frequency.get());
- stats.put("af", running_app_update_frequency.get());
- }
- return stats;
- }finally{
-
- lock.exit();
- }
- }
-
- public void reset() {
- try{
- lock.enter();
-
- sys_coord.reset();
- app_coord.reset();
- error = MAX_ERROR;
- rs_map.clear();
- start_coords.clear();
- current_coords.clear();
- nearest_neighbor = null;
- }finally{
-
- lock.exit();
- }
- }
-
- /**
- * Returns whether the application level coordinates have been updated at
- * least once.
- *
- * @return <code>true</code> if updated, <code>false</code> otherwise
- */
- public boolean updatedYet() {
- try{
- lock.enter();
-
- return updated_app_coord_at_least_once;
-
- }finally{
-
- lock.exit();
- }
- }
-
- /**
- * Returns the dimension of the Euclidian space coordinates are embedded in.
- *
- * @return the coordinate space dimension
- */
- public int getNumDimensions() {
- try{
- lock.enter();
-
- return num_dims;
-
- }finally{
-
- lock.exit();
- }
- }
-
- /**
- * Returns the application-level Vivaldi coordinates.
- *
- * @return the application-level coordinates
- */
- public Coordinate getApplicationCoords() {
- try{
- lock.enter();
-
- return new Coordinate(app_coord);
-
- }finally{
-
- lock.exit();
- }
- }
-
- /**
- * Returns the system-level Vivaldi coordinates. These coordinates change
- * more frequently than the application-level coordinates.
- *
- * @return the system-level coordinates
- */
- public Coordinate getSystemCoords() {
- try{
- lock.enter();
-
- return new Coordinate(sys_coord);
-
- }finally{
-
- lock.exit();
- }
- }
-
- /**
- * Returns the system-level error, which denotes the accuracy of the
- * system-level coordinates.
- *
- * @return the system-level error
- */
- public double getSystemError() {
- try{
- lock.enter();
-
- return error;
-
- }finally{
-
- lock.exit();
- }
- }
-
- /**
- * Returns the age of our coordinate
- * Note that this does not require clock-synchronization
- * because it is relative to our coordinate
- *
- * @return relative age of our coordinate since we last updated it
- */
- public long getAge(long curr_time) {
- try{
- lock.enter();
-
- if (curr_time < time_of_last_sys_update) return 0;
- return curr_time - time_of_last_sys_update;
-
- }finally{
-
- lock.exit();
- }
- }
-
-
- /**
- * Returns the list of observers, to which observers for the
- * application-level coordinate can be added, removed, and so forth.
- *
- * @return the list of observers for the application-level coordinate
- */
- public ObserverList getObserverList() {
- try{
- lock.enter();
-
- return obs_list;
-
- }finally{
-
- lock.exit();
- }
- }
-
- /**
- * Notifies this <code>VivaldiClient</code> object that a host that
- * supports Vivaldi has joined the system. State associated with the new
- * host is created. This method succeeds and returns <code>true</code>
- * only if the host is not already registered with this
- * <code>VivaldiClient</code> object.
- *
- * @param addr
- * the address of the joining host
- * @return <code>true</code> if <code>addr</code> is registered and its
- * associated state created, <code>false</code> otherwise
- */
- public boolean addHost(T addr) {
- try{
- lock.enter();
-
- if (rs_map.containsKey(addr)) {
- return false;
- }
-
- RemoteState<T> rs = new RemoteState<T>(addr);
- rs_map.put(addr, rs);
- return true;
- }finally{
-
- lock.exit();
- }
- }
-
- /**
- * Notifies this <code>VivaldiClient</code> object that a host that
- * supports Vivaldi and has the provided coordinates and error has joined
- * the system. State associated with the new host is created. This method
- * succeeds and returns <code>true</code> only if the host is not already
- * registered with this <code>VivaldiClient</code> object.
- *
- * @param addr
- * the address of the joining host
- * @param _r_coord
- * the app-level coordinates of the remote host
- * @param r_error
- * the system-level error of the remote host
- * @param sample_rtt
- * the RTT sample to the remote host
- * @param curr_time
- * the current time, in milliseconds
- * @param can_update
- * <code>true</code> if this method can update a host already present
- * @return <code>true</code> if <code>addr</code> is registered and its
- * associated state created, <code>false</code> otherwise
- */
-
- public boolean addHost(T addr, Coordinate _r_coord, double r_error,
- long curr_time, boolean can_update) {
- try{
- lock.enter();
-
- RemoteState<T> rs = null;
- if (rs_map.containsKey(addr)) {
- if (!can_update) {
- return false;
- }
- rs = rs_map.get(addr);
- }
- else {
- rs = new RemoteState<T>(addr);
- rs_map.put(addr, rs);
- }
-
- Coordinate r_coord = _r_coord.makeCopy();
- rs.assign(r_coord, r_error, curr_time);
- return true;
-
- }finally{
-
- lock.exit();
- }
- }
-
- /**
- * Notifies this <code>VivaldiClient</code> object that a host that
- * supports Vivaldi has left the system.
- * However, the state (i.e. short list of RTT values) is kept because
- * it will be useful if and when the node returns into the system
- * @param addr
- * the address of the departing host
- * @return <code>true</code> if <code>addr</code> was a known node
- */
-
- public boolean removeHost(T addr) {
- try{
- lock.enter();
-
- if (rs_map.containsKey(addr)) {
- return true;
- }
- return false;
-
- }finally{
-
- lock.exit();
- }
- }
-
- /**
- * Returns whether the given host has been registered with this
- * <code>VivaldiClient</code> object.
- *
- * @param addr
- * the address to query as registered
- * @return <code>true</code> if registered, <code>false</code> otherwise
- */
- public boolean containsHost(T addr) {
- try{
- lock.enter();
-
- return rs_map.containsKey(addr);
-
- }finally{
-
- lock.exit();
- }
- }
-
- /**
- * Returns all hosts that support Vivaldi and have been registered with this
- * <code>VivaldiClient</code> object. The returned set is backed by the
- * true set of registered hosts, but cannot be modified.
- *
- * @return the set of registered Vivaldi-supporting hosts
- */
- public Set<T> getHosts() {
- try{
- lock.enter();
-
- return hosts;
- }finally{
-
- lock.exit();
- }
- }
-
- /**
- * This method is invoked when a new RTT sample is made to a host that
- * supports Vivaldi. This method succeeds and returns <code>true</code>
- * only if the host is already registered with this
- * <code>VivaldiClient</code> object, and the RTT sample is valid.
- *
- * @param addr
- * the address of the host
- * @param _r_coord
- * the system-level coordinates of the remote host
- * @param r_error
- * the system-level error of the remote host
- * @param sample_rtt
- * the RTT sample to the remote host
- * @param curr_time
- * the current time, in milliseconds
- * @param can_add
- * <code>true</code> if this method can add a host not already present
- * @return <code>true</code> if <code>addr</code> is registered and the
- * sample is processed, <code>false</code> otherwise
- */
-
- public boolean processSample(T addr, Coordinate _r_coord, double r_error,
- double sample_rtt, long sample_age, long curr_time, boolean can_add) {
- try{
- lock.enter();
-
-
- //if (debugCrawler) slog.info("sample addr="+addr+" rtt="+sample_rtt);
- int id = getIdFromAddr (addr);
- if (debugCrawler && debugGood) slog.info(id+" START");
-
- assert (_r_coord != sys_coord);
- assert (_r_coord != null);
- assert (sys_coord != null);
-
- if (!sys_coord.isCompatible(_r_coord)) {
- if (debugCrawler && debug) slog.info("INVALID "+id+" s "+sample_rtt+" NOT_COMPAT "+_r_coord.getVersion());
- return false;
- }
-
- // There is a major problem with the coord.
- // However, if this is happening, it will probably
- // happen again and again.
- // Note that error is checked and fixed in updateError()
- if (!sys_coord.isValid() || Double.isNaN(error)) {
- //System.err.println("Warning: resetting Vivaldi coordinate");
- if (debugCrawler || SIMULATION) slog.info(id + " RESET, USE_HEIGHT="+USE_HEIGHT);
- reset();
- }
-
- if (r_error <= 0. || r_error > MAX_ERROR || Double.isNaN(r_error) || !_r_coord.isValid()) {
- if (debugCrawler) slog.info(id+" BUSTED his coord is busted: r_error "+r_error+" r_coord "+_r_coord);
- return false;
- }
-
- if (sample_rtt > OUTRAGEOUSLY_LARGE_RTT) {
- if (debug)
- System.err.println("Warning: skipping huge RTT of "
- + nf.format(sample_rtt) + " from " + addr);
- if (debugCrawler) slog.info(id+ " HUGE "+sample_rtt);
- return false;
- }
-
- RemoteState<T> addr_rs = rs_map.get(addr);
- if (addr_rs == null) {
- if (!can_add) {
- if (debugCrawler) slog.info(id+ " NO_ADD");
- return false;
- }
- addHost(addr);
- addr_rs = rs_map.get(addr);
- }
- Coordinate r_coord = _r_coord.makeCopy();
-
- // add sample to history, then get smoothed rtt based on percentile
- addr_rs.addSample(sample_rtt, sample_age, r_coord, r_error, curr_time);
-
- // even if we aren't going to use him this time around, we remember this RTT
-
- if (sys_coord.atOrigin()) {
- sys_coord.bump();
- }
-
- boolean didUpdate = false;
- int sample_size = addr_rs.getSampleSize();
- double smoothed_rtt = addr_rs.getSample();
-
- if (addr_rs.isValid(curr_time)) {
- addNeighbor(addr_rs);
- // first update our error
- updateError(addr, r_coord, r_error, smoothed_rtt, sample_rtt, sample_age, sample_size, curr_time);
- // next, update our system-level coordinate
-
- long time_since_last_sys_update = curr_time-time_of_last_sys_update;
- if (time_since_last_sys_update > MIN_SYS_UPDATE_PERIOD) {
- if (debugCrawler) slog.info ("time_since_last_sys_update="+time_since_last_sys_update);
-
- updateSystemCoordinate(curr_time);
-
- // last, try to update our application-level coordinate
- tryUpdateAppCoordinate(curr_time);
- }
-
- // return that we did do the update regardless of
-
- didUpdate = true;
- update_counter++;
-
-
- } else {
- if (debugCrawler) {
- String reason;
- if (addr_rs.getSampleSize() < RemoteState.MIN_SAMPLE_SIZE) {
- reason = "TOO_FEW";
- } else if (addr_rs.getSample() <= 0) {
- reason = "sample is "+addr_rs.getSample();
- } else if (addr_rs.getLastError() <= 0.) {
- reason = "error is "+addr_rs.getLastError();
- } else if (addr_rs.getLastUpdateTime() <= 0) {
- reason = "last update "+addr_rs.getLastUpdateTime();
- } else if (addr_rs.getLastCoordinate().atOrigin()) {
- reason = "AT_ORIGIN";
- } else {
- reason = "UNKNOWN";
- }
- slog.info("INVALID "+id+" s "+sample_rtt+" ss "+smoothed_rtt+" c "+sample_size+
- " "+reason);
-
- }
- }
-
- //System.out.println ("maint?");
- if (lastMaintenanceStamp < curr_time - MAINTENANCE_PERIOD) {
- performMaintenance (curr_time);
- lastMaintenanceStamp = curr_time;
- }
-
- return didUpdate;
- }finally{
-
- lock.exit();
- }
- }
-
- private Map<T,Integer> addr2id = new HashMap<T,Integer>();
- private int idCounter = 0;
-
- // If remote nodes are already represented by ints, just use them
- // otherwise, translate into more easily read-able ID
- private int getIdFromAddr (T addr) {
- if ( debugCrawler || SIMULATION ){
-
- if (addr instanceof Integer) {
- return ((Integer)addr).intValue();
- }
-
- if (!addr2id.containsKey(addr)) {
- addr2id.put(addr,idCounter);
- idCounter++;
- }
- return addr2id.get(addr);
- }
-
- return(0);
- }
-
- protected void updateError(T addr, Coordinate r_coord, double r_error,
- double smoothed_rtt, double sample_rtt, long sample_age, int sample_size, long curr_time) {
- // get the coordinate distance
- double sys_distance = sys_coord.distanceTo(r_coord);
- double app_distance = 0;
-
- if (app_coord != null)
- app_distance = app_coord.distanceTo(r_coord);
- if (app_distance == 0. || sys_distance == 0.) {
- if (debugCrawler) slog.info("bad distance sys "+sys_distance+" app "+app_distance);
- return;
- }
-
-
- // get sample error in terms of coordinate distance and sample rtt
- // Note that smoothed_rtt must be greater than zero
- // or we wouldn't have entered this function
-
- // Note that app_sample_error is only giving us a limited amount of info
- // because his app coord is not going over the wire
-
- assert (smoothed_rtt > 0.);
- double sys_sample_error = Math.abs(sys_distance - smoothed_rtt) / smoothed_rtt;
- double app_sample_error = Math.abs(app_distance - smoothed_rtt) / smoothed_rtt;
- running_remote_error.add(r_error);
- running_neighbor_latency.add(smoothed_rtt);
-
- if (debugCrawler) {
- int remote_id = getIdFromAddr (addr);
- String info =
- //"lID "+local_addr+" rID "+
- "UPDATE "+remote_id+
- " re "+nf.format(sys_sample_error)+
- " rtt "+nf.format(smoothed_rtt)+
- " raw "+nf.format(sample_rtt)+
- " age "+sample_age+
- " dist "+nf.format(sys_distance)+
- " ssize "+sample_size+
- " lE "+nf.format(error)+
- " rE "+nf.format(r_error)+
- " rV "+r_coord.getVersion()+
- " lc "+sys_coord+
- " rc "+r_coord;
-
- slog.info(info);
- }
-
- if (sys_sample_error < 0) {
- sys_sample_error = 0;
- }
- if (sys_sample_error > MAX_ERROR) {
- sys_sample_error = MAX_ERROR;
- }
-
- // EWMA on error
- double alpha = error / (error + r_error) * COORD_ERROR;
- error = (sys_sample_error*alpha)+((1-alpha)*error);
-
-
- if (keepStatistics) {
- running_sys_error.add(sys_sample_error);
- running_app_error.add(app_sample_error);
- }
- }
-
-
-
- protected boolean addNeighbor (RemoteState<T> guy) {
- boolean added = false;
- if (!neighbors.contains(guy)) {
- neighbors.add(guy);
- //slog.info("addNeighbor: "+guy.addr)
- added = true;
- }
- if (neighbors.size() > MAX_NEIGHBORS) {
- neighbors.remove(0);
- }
- return added;
- }
-
- protected boolean removeNeighbor (RemoteState<T> guy) {
- if (neighbors.contains(guy)) {
- neighbors.remove(guy);
- return true;
- }
- return false;
- }
-
- public T getNeighborToPing (long curr_time) {
- try{
- lock.enter();
-
- // pick a relatively recent, relatively low error, relatively high latency node
- // make the set big enough that we will tend not to pick the same node frequently
- final long NEIGHBOR_PING_EXPIRE_TIME = 10 * 60 * 1000; // 10 minutes
- final double max_neighbor_error = running_remote_error.get();
- final double min_neighbor_latency = running_neighbor_latency.get();
- long expire_time = curr_time - NEIGHBOR_PING_EXPIRE_TIME;
- List<RemoteState<T>> recentNeighbors = new ArrayList<RemoteState<T>>();
- for (RemoteState<T> neighbor : neighbors) {
- if (neighbor.getLastUpdateTime() > expire_time &&
- neighbor.getSample() > min_neighbor_latency &&
- neighbor.getLastError() < max_neighbor_error) {
-
- recentNeighbors.add(neighbor);
- //if (debugCrawler) {
- //int id = getIdFromAddr (neighbor.getAddress());
- //slog.info ("considering "+id);
- //}
- }
- }
- if (recentNeighbors.size() > 0) {
-
- RemoteState<T> random_neighbor = recentNeighbors.get(random.nextInt( recentNeighbors.size()));
- if (debugCrawler && debugGood) {
- slog.info("pinging neighbor: error="+random_neighbor.getLastError()+
- " rtt="+random_neighbor.getSample()+
- " coord="+random_neighbor.getLastCoordinate()+
- " addr="+random_neighbor.getAddress());
- }
- return random_neighbor.getAddress();
- }
- return null;
-
- }finally{
-
- lock.exit();
- }
- }
-
-
- protected void updateSystemCoordinate(long curr_time) {
-
- // figure out the oldest sample we are going to use
- // and recalculate the nearest neighbor
- // as a side effect
- long oldestSample = curr_time;
- double nearest_neighbor_distance = Double.MAX_VALUE;
-
- Collections.shuffle(neighbors);
-
- if (debugCrawler) {
- slog.info (curr_time+" updateSysCoord, nSize="+neighbors.size()+
- " bump_error_counter="+bump_error_counter);
- }
-
- for (RemoteState<T> neighbor : neighbors) {
- // we can used unchecked here since RemoteState already checks for isValid when the coordinate is inserted
- double distance = sys_coord.uncheckedDistanceTo(neighbor.getLastCoordinate());
- if (distance < nearest_neighbor_distance && distance > 0) {
- nearest_neighbor_distance = distance;
- nearest_neighbor = neighbor.getLastCoordinate();
- }
- if (oldestSample > neighbor.getLastUpdateTime()) {
- oldestSample = neighbor.getLastUpdateTime();
- }
- }
-
- double sampleWeightSum = 0.;
- for (RemoteState<T> neighbor : neighbors) {
- //double distance = sys_coord.distanceTo(neighbor.getLastCoordinate());
- sampleWeightSum += neighbor.getLastUpdateTime()-oldestSample;
- }
- assert (sampleWeightSum >= 0.);
-
- Vec force = new Vec (sys_coord.getNumDimensions());
-
- for (RemoteState<T> neighbor : neighbors) {
- // we can used unchecked here since RemoteState already checks for isValid when the coordinate is inserted
- double distance = sys_coord.uncheckedDistanceTo(neighbor.getLastCoordinate());
-
- // make certain we cannot get stuck in this loop
- for (int bLimit = 0; distance == 0. && bLimit < 3; bLimit++) {
- sys_coord.bump();
- distance = sys_coord.distanceTo(neighbor.getLastCoordinate());
- }
-
- if (distance == 0.) {
- bump_error_counter++;
- bump_error_flag = true;
- } else {
-
- // cannot return null b/c distance is not 0
- Vec unitVector = sys_coord.getDirection(neighbor.getLastCoordinate());
- double latency = neighbor.getSample();
- double weight = error / (neighbor.getLastError()+error);
- if (weight == 0.) continue;
-
- // error of sample
- double sampleError = distance - latency;
-
- double relativeError = Math.abs(sampleError) / latency;
- running_neighbor_error.add(relativeError);
-
- double sampleWeight = 1.;
- if (sampleWeightSum > 0) {
- sampleWeight = (neighbor.getLastUpdateTime()-oldestSample)/sampleWeightSum;
- }
-
- if (debugCrawler && debugGood) {
- int id = getIdFromAddr (neighbor.getAddress());
- slog.info ("f "+id+ " age "+Math.round((curr_time-neighbor.getLastUpdateTime())/1000.)+
- " er "+sampleError+" sw "+sampleWeight+" comb " +
- (sampleError*sampleWeight));
- }
-
- unitVector.scale(sampleError*sampleWeight);
- force.add(unitVector);
- }
- }
-
- if (USE_HEIGHT) {
- force.direction[force.direction.length-1] = -1.*force.direction[force.direction.length-1];
- }
- force.scale(COORD_CONTROL);
-
- if (debugCrawler && debugGood) {
- slog.info ("t "+force.getLength()+" "+force);
- }
-
-
-
- if (GRAVITY_DIAMETER > 0) {
- // include "gravity" to keep coordinates centered on the origin
- Vec gravity = sys_coord.asVectorFromZero(true);
- if (gravity.getLength() > 0) {
-
- // scale gravity s.t. it increases polynomially with distance
- double force_of_gravity = Math.pow(gravity.getLength()
- / GRAVITY_DIAMETER, 2.);
- gravity.makeUnit();
- gravity.scale(force_of_gravity);
-
- // add to total force
- force.subtract(gravity);
-
- if (keepStatistics) {
- running_gravity.add(force_of_gravity);
- }
- }
- }
-
- sys_coord.add(force);
- sys_coord.checkHeight ();
- double distance_delta = force.getLength();
-
- if (keepStatistics) {
- running_sys_dd.add(distance_delta);
-
- if (time_of_last_sys_update > 0) {
- long since_last_sys_update = curr_time - time_of_last_sys_update;
- running_sys_update_frequency.add(since_last_sys_update);
- }
- }
-
- if (neighbors != null) {
- running_neighbors_used.add(neighbors.size());
- }
-
- time_of_last_sys_update = curr_time;
-
- }
-
- /*
- * Periodically walk the entire rs_map and toss anybody who has expired.
- * If the map has grown beyond the preferred size (MAX_RS_MAP_SIZE),
- * shrink the max age that a guy can be before he gets kicked out.
- */
-
- protected void performMaintenance (long curr_time) {
- if (debugCrawler && debugGood) slog.info ("performing maintenance");
-
- if (rs_map.size() > MAX_RS_MAP_SIZE) {
- RS_EXPIRATION = (long)(.9 * RS_EXPIRATION);
- if (debugCrawler && debugGood) slog.info ("lowered RS_EXPIRATION to "+RS_EXPIRATION+ " size "+rs_map.size());
- }
-
- final long expirationStamp = curr_time - RS_EXPIRATION;
- Set<Map.Entry<T,RemoteState<T>>> states = rs_map.entrySet();
-
- for (Iterator<Map.Entry<T,RemoteState<T>>> stateIter = states.iterator(); stateIter.hasNext(); ) {
- Map.Entry<T,RemoteState<T>> entry = stateIter.next();
- if (entry.getValue().getLastUpdateTime() < expirationStamp) {
- if (debugCrawler && debugGood) slog.info ("tossing "+entry.getValue().getAddress());
- removeNeighbor(entry.getValue());
- stateIter.remove();
- }
- }
- }
-
- protected void tryUpdateAppCoordinate(long curr_time) {
- final double scale_factor = 1.0 / ((double) WINDOW_SIZE);
-
- // Make sure app coord always has a value.
-
- // calculate centroid of starting coordinates by averaging vectors
-
- if (start_coords.size() < WINDOW_SIZE) {
- Vec start_vec = new Vec(num_dims);
- start_coords.add(sys_coord);
- for (Iterator<Coordinate> i = start_coords.iterator(); i.hasNext();) {
- Coordinate next_coord = i.next();
- start_vec.add(next_coord.asVectorFromZero(false));
- }
- start_vec.scale(scale_factor);
- start_centroid = start_vec.asCoordinateFromZero(false);
- }
-
- current_coords.add(sys_coord);
- if (current_coords.size() > WINDOW_SIZE) {
- current_coords.remove(0);
- }
-
- // calculate centroid of current coordinates by averaging vectors
- Vec curr_vec = new Vec(num_dims);
- for (Iterator<Coordinate> i = current_coords.iterator(); i.hasNext();) {
- Coordinate next_coord = i.next();
- curr_vec.add(next_coord.asVectorFromZero(false));
- }
- curr_vec.scale(scale_factor);
-
- // create centroids
- Coordinate curr_centroid = curr_vec.asCoordinateFromZero(false);
-
- // get distances of centroids from nearest neighbor
- double start_dist = start_centroid.distanceTo(nearest_neighbor);
- double curr_dist = curr_centroid.distanceTo(nearest_neighbor);
-
- // fraction of space moved through, relative to distance to our NN
- double relative_diff = Math.abs((start_dist - curr_dist) / start_dist);
-
- if (keepStatistics) {
- running_relative_diff.add(relative_diff);
- }
-
- if (relative_diff > APP_UPDATE_THRESHOLD) {
- // exceed threshold, update application-level coordinate
- updated_app_coord_at_least_once = true;
- // clear coordinate windows
- start_coords.clear();
- current_coords.clear();
- }
-
- // This will keep updating the observers as we get rolling
- // until we've had one time when the coord windows differ
-
- boolean did_update = false;
- if (relative_diff > APP_UPDATE_THRESHOLD
- || !updated_app_coord_at_least_once) {
- if (keepStatistics) {
- double app_dd = app_coord.distanceTo(curr_centroid);
- running_app_dd.add(app_dd);
- }
- app_coord = curr_centroid;
- did_update = true;
-
- // If we've gotten ourselves into a situation where the coord
- // very accurate, stop always updating the app.
- // Currently can only use this if keep track of statistics
-
- if (keepStatistics) {
- final double MIN_SYS_ERROR_SIZE = (RUNNING_STAT_HISTORY / 8.);
- if (!updated_app_coord_at_least_once
- && running_sys_error.getSize() > MIN_SYS_ERROR_SIZE
- && running_sys_error.getPercentile(.5) < 0.20) {
- updated_app_coord_at_least_once = true;
- }
- }
-
- // notify observers of new application-level coordinate
- for (Iterator<ApplicationObserver> i = obs_list.iterator(); i
- .hasNext();) {
- ApplicationObserver obs = i.next();
- obs.coordinatesUpdated(app_coord);
- }
-
- if (keepStatistics) {
- if (time_of_last_app_update > 0) {
- long since_last_app_update = curr_time
- - time_of_last_app_update;
- running_app_update_frequency.add(since_last_app_update);
- }
- time_of_last_app_update = curr_time;
- }
- }
-
- if (debug && debugCrawler) {
- slog.info("app_coord update: done " + did_update
- + " rolling " + updated_app_coord_at_least_once + " start "
- + start_coords.size() + " current " + current_coords.size()
- + " diff " + nf.format(relative_diff));
- }
- }
-
- public static void setRandomSeed (long seed) {
- random = new Random (seed);
- }
-
- public void startUp(DataInputStream is) throws IOException {
-
- if (debugCrawler) slog.info("startUp");
-
- boolean valid = false;
-
- // when starting up with no previously stored coord we get zero length input stream
-
- if ( is.available() > 0 ){
-
- int version = 1;
-
- // migration 2501 when version added...
-
- if ( is.available() != 25 ){
-
- version = is.readInt();
- if (debugCrawler) slog.info("Read version= "+version);
- }
-
- try {
- sys_coord = new Coordinate (num_dims, is);
- app_coord.assign(sys_coord);
- error = ((double) is.readFloat());
- // better to not be overconfident and mess up other nodes if our coord sucks on restart
- // if our coord is still good, this will quickly drop
- error = MAX_ERROR;
- if (sys_coord.isValid() && !(Double.isNaN(error))) {
- valid = true;
- }else{
- if (debugCrawler) slog.info("Invalid coordinate or error");
- }
- } catch (IOException ex) {
- }
-
- if (version >= 2) {
- // seed neighbors
- int neighbor_count = is.readInt();
- int id_length = is.readInt();
- long curr_time = System.currentTimeMillis();
-
- for (int i = 0; i < neighbor_count; i++) {
- RemoteState<T> rs = new RemoteState(num_dims, id_length, curr_time, is);
- neighbors.add(rs);
- rs_map.put(rs.getAddress(), rs);
- }
-
- }
-
- }
-
- if (!valid) {
- if (debugCrawler) slog.info("Error deserializing coordinate during startup. Starting afresh.");
- sys_coord = new Coordinate (num_dims);
- app_coord = new Coordinate (num_dims);
- error = MAX_ERROR;
- } else {
- updated_app_coord_at_least_once = true;
- if (debugCrawler) slog.info("Deserialized coordinate OK during startup "+sys_coord+ " er "+error+
- " rs_map "+rs_map.size());
- }
-
- }
-
- public void shutDown(DataOutputStream os) throws IOException {
- try{
- lock.enter();
-
- if (debugCrawler) slog.info("shutDown");
-
- os.writeInt( 2 ); // version
-
- // could also save a number of neighbors
- // but then when we come back into the system,
- // it would be tricky to know how to treat them (they'd be old
- // so they would get much weight either).
-
- if (debugCrawler) slog.info("Saving coordinates during shutdown "+sys_coord+" er="+error+
- " bump_error_flag="+bump_error_flag+" neighbors_size="+neighbors.size());
-
- sys_coord.toSerialized(os);
- os.writeFloat((float) error);
-
- // save neighbors
- int neighbors_size = neighbors.size();
-
- // if we have noticed a corruption with a neighbor, clear our neighbor state for next time around
- if (bump_error_flag) {
- neighbors_size = 0;
- }
-
- os.writeInt(neighbors_size);
-
- if (neighbors_size > 0) {
-
- int id_length = ((IDWrapper)(neighbors.get(0).getAddress())).getRawId().length;
- os.writeInt(id_length);
-
-
- for (RemoteState<T> neighbor : neighbors) {
- neighbor.toSerialized(os);
- }
- } else {
- // for id_length
- os.writeInt(0);
-
- }
-
- }finally{
-
- lock.exit();
- }
- }
-}
diff --git a/edu/harvard/syrah/nc/WindowStatistic.java b/edu/harvard/syrah/nc/WindowStatistic.java
deleted file mode 100644
index b827b33..0000000
--- a/edu/harvard/syrah/nc/WindowStatistic.java
+++ /dev/null
@@ -1,150 +0,0 @@
-package edu.harvard.syrah.nc;
-
-/*
- * NCLib - a network coordinate library
- *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License as published by
- * the Free Software Foundation; either version 2 of the License.
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
- * GNU General Public License for more details ( see the LICENSE file ).
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
- */
-
-import java.util.Arrays;
-import java.util.LinkedList;
-import java.util.List;
-
-/*
- * @version $Revision: 1.9 $ on $Date: 2007/01/30 19:47:39 $
- * @since Mar 7, 2006
- */
-
-/**
- *
- */
-public class WindowStatistic {
-
- // Could be re-written as a circular buffer to avoid
- // memory (re-)alloc
-
- public static boolean debug = false;
-
- protected final int max_history;
- //protected final long expiration;
- protected final List<Statistic> samples;
- protected boolean dirty = true;
-
- // short-cut code (getPercentile was taking a significant percentage of time in simulation)
- protected double previousPercentile = -1;
- protected double previousValue = -1;
-
- class Statistic {
- public final double sample;
- public Statistic (double _sample) {
- sample = _sample;
- }
- /*
- public int compareTo (Object _s) {
- Statistic s = (Statistic)_s;
- if (stamp < s.stamp)
- return -1;
- else if (stamp > s.stamp)
- return 1;
- else
- return 0;
- }
- */
- public String toString () {
- //return new String ("[i="+sample+",s="+stamp+"]");
- return new String ("v="+sample);
- }
- }
-
- public WindowStatistic (int _max_history) {
- assert (_max_history >= 0);
- max_history = _max_history;
- samples = new LinkedList<Statistic>();
- }
-
- synchronized public void clear () {
- samples.clear();
- dirty = true;
- }
-
- synchronized public void add (double sample) {
- samples.add(new Statistic(sample));
- dirty = true;
- while (samples.size() > max_history) {
- samples.remove(0);
- if (debug) {
- System.out.println ("tossing sample "+samples.get(0)+", size="+samples.size());
- }
- }
- }
-
- synchronized public int getSize () {
- return samples.size();
- }
-
- synchronized public boolean withinVariance (double pct) {
- if (samples.size() < 2) return true;
- double mean = getMean();
- for (int i = 0; i < samples.size(); i++) {
- double pctDiff = Math.abs(samples.get(i).sample-mean)/mean;
- if (pctDiff > pct) {
- return false;
- }
- }
- return true;
- }
-
- synchronized public double getPercentile (double p) {
- if (!dirty && p == previousPercentile)
- return previousValue;
- double val = calcPercentile (p);
- previousPercentile = p;
- previousValue = val;
- dirty = false;
- return val;
- }
-
- protected double calcPercentile (double p) {
- if (samples.size() == 0) return 0;
- Double[] samples_copy = new Double[samples.size()];
- for (int i = 0; i < samples.size(); i++) {
- samples_copy[i] = samples.get(i).sample;
- if (debug)
- System.out.println (i+" "+samples_copy[i]);
- }
- Arrays.sort(samples_copy);
- int percentile = (int)(samples_copy.length*p);
- if (percentile < 0) percentile = 0;
- double val = samples_copy[percentile].doubleValue();
- if (debug)
- System.out.println ("p= "+p+" per="+percentile+" val="+val);
- return val;
- }
-
- protected double getSum () {
- double sampleSum = 0.;
- if (samples.size() > 0) {
- for (int i = 0; i < samples.size(); i++) {
- sampleSum += samples.get(i).sample;
- }
- }
- return sampleSum;
- }
-
- // can be undefined
- public double getMean () {
- return getSum()/getSize();
- }
-
-}
diff --git a/org/gudy/azureus2/core3/config/COConfigurationManager.java b/org/gudy/azureus2/core3/config/COConfigurationManager.java
index 229b59b..2d06ce0 100644
--- a/org/gudy/azureus2/core3/config/COConfigurationManager.java
+++ b/org/gudy/azureus2/core3/config/COConfigurationManager.java
@@ -105,10 +105,10 @@ COConfigurationManager
// things seem good in 10.6
- if ( !Constants.isOSX_10_6_OrHigher ){
+ //if ( !Constants.isOSX_10_6_OrHigher ){
System.setProperty( "java.nio.preferSelect", "true" );
- }
+ //}
}
SystemProperties.determineApplicationName();
diff --git a/org/gudy/azureus2/core3/config/impl/ConfigurationDefaults.java b/org/gudy/azureus2/core3/config/impl/ConfigurationDefaults.java
index abff61f..952071f 100644
--- a/org/gudy/azureus2/core3/config/impl/ConfigurationDefaults.java
+++ b/org/gudy/azureus2/core3/config/impl/ConfigurationDefaults.java
@@ -141,6 +141,7 @@ public class ConfigurationDefaults {
def.put("HTTP.Data.Listen.Port.Override", ZERO);
def.put("HTTP.Data.Listen.Port.Enable", FALSE );
+ def.put("IPV6 Enable Support", Constants.isOSX?FALSE:TRUE );
def.put("IPV6 Prefer Addresses",FALSE);
def.put("max active torrents", new Long(4));
@@ -248,6 +249,7 @@ public class ConfigurationDefaults {
for (int j = 0; j <= 3; j++)
def.put("bLog" + logComponents[i] + "-" + j, TRUE);
def.put("Logger.DebugFiles.Enabled", TRUE);
+ def.put("Logger.DebugFiles.Enabled.Force", FALSE );
def.put("Logging Enable UDP Transport", FALSE);
@@ -375,6 +377,8 @@ public class ConfigurationDefaults {
def.put( "Tracker TCP NonBlocking", FALSE);
def.put( "Tracker TCP NonBlocking Restrict Request Types", TRUE);
def.put( "Tracker TCP NonBlocking Conc Max", new Long(2048));
+ def.put( "Tracker TCP NonBlocking Immediate Close", FALSE );
+
def.put( "Tracker Client Scrape Enable", TRUE);
def.put( "Tracker Client Scrape Total Disable", FALSE );
def.put( "Tracker Client Scrape Stopped Enable", TRUE);
diff --git a/org/gudy/azureus2/core3/config/impl/TransferSpeedValidator.java b/org/gudy/azureus2/core3/config/impl/TransferSpeedValidator.java
index 121ad01..aed7ce2 100644
--- a/org/gudy/azureus2/core3/config/impl/TransferSpeedValidator.java
+++ b/org/gudy/azureus2/core3/config/impl/TransferSpeedValidator.java
@@ -57,19 +57,34 @@ public final class TransferSpeedValidator
private final String configKey;
private final Number configValue;
+ private static boolean auto_upload_enabled;
+ private static boolean auto_upload_seeding_enabled;
+
private static boolean seeding_upload_enabled;
static{
- COConfigurationManager.addAndFireParameterListener(
- UPLOAD_SEEDING_ENABLED_CONFIGKEY,
+ COConfigurationManager.addAndFireParameterListeners(
+ new String[] {
+ UPLOAD_SEEDING_ENABLED_CONFIGKEY,
+ AUTO_UPLOAD_ENABLED_CONFIGKEY,
+ AUTO_UPLOAD_SEEDING_ENABLED_CONFIGKEY
+ },
new ParameterListener()
{
public void
parameterChanged(
String parameterName)
{
- seeding_upload_enabled = COConfigurationManager.getBooleanParameter( parameterName );
+ if (parameterName == null || parameterName.equals(UPLOAD_SEEDING_ENABLED_CONFIGKEY)) {
+ seeding_upload_enabled = COConfigurationManager.getBooleanParameter( parameterName );
+ }
+ if (parameterName == null || parameterName.equals(AUTO_UPLOAD_ENABLED_CONFIGKEY)) {
+ auto_upload_enabled = COConfigurationManager.getBooleanParameter(parameterName);
+ }
+ if (parameterName == null || parameterName.equals(AUTO_UPLOAD_SEEDING_ENABLED_CONFIGKEY)) {
+ auto_upload_seeding_enabled = COConfigurationManager.getBooleanParameter(parameterName);
+ }
}
});
}
@@ -196,32 +211,35 @@ public final class TransferSpeedValidator
return speedManager == null ? false : speedManager.isAvailable();
}
- public static String
- getActiveAutoUploadParameter(
- GlobalManager gm )
+ public static boolean
+ isAutoSpeedActive(
+ GlobalManager gm )
{
- // if downloading+seeding is set then we always use this regardless of
- // only seeding status
-
- if ( COConfigurationManager.getBooleanParameter(TransferSpeedValidator.AUTO_UPLOAD_ENABLED_CONFIGKEY)){
-
- return( TransferSpeedValidator.AUTO_UPLOAD_ENABLED_CONFIGKEY );
+ // if downloading+seeding is set then we always use this regardless of
+ // only seeding status
+
+ if (auto_upload_enabled) {
+ return auto_upload_enabled;
}
-
+
if ( gm.isSeedingOnly()){
-
- return( TransferSpeedValidator.AUTO_UPLOAD_SEEDING_ENABLED_CONFIGKEY );
-
- }else{
-
- return( TransferSpeedValidator.AUTO_UPLOAD_ENABLED_CONFIGKEY );
- }
+
+ return auto_upload_seeding_enabled;
+
+ }else{
+
+ return auto_upload_enabled;
+ }
}
+
+ public static String
+ getActiveAutoUploadParameter(
+ GlobalManager gm)
+ {
+ if (!auto_upload_enabled && gm.isSeedingOnly()) {
+ return AUTO_UPLOAD_SEEDING_ENABLED_CONFIGKEY;
+ }
+ return AUTO_UPLOAD_ENABLED_CONFIGKEY;
+ }
- public static boolean
- isAutoSpeedActive(
- GlobalManager gm )
- {
- return( COConfigurationManager.getBooleanParameter( getActiveAutoUploadParameter( gm )));
- }
}
diff --git a/org/gudy/azureus2/core3/disk/DiskManagerFactory.java b/org/gudy/azureus2/core3/disk/DiskManagerFactory.java
index 1b93680..beb02a3 100644
--- a/org/gudy/azureus2/core3/disk/DiskManagerFactory.java
+++ b/org/gudy/azureus2/core3/disk/DiskManagerFactory.java
@@ -103,9 +103,10 @@ DiskManagerFactory
deleteDataFiles(
TOTorrent torrent,
String torrent_save_dir,
- String torrent_save_file )
+ String torrent_save_file,
+ boolean force_no_recycle )
{
- DiskManagerImpl.deleteDataFiles(torrent, torrent_save_dir, torrent_save_file );
+ DiskManagerImpl.deleteDataFiles(torrent, torrent_save_dir, torrent_save_file, force_no_recycle );
}
public static DiskManagerFileInfoSet
diff --git a/org/gudy/azureus2/core3/disk/impl/DiskManagerImpl.java b/org/gudy/azureus2/core3/disk/impl/DiskManagerImpl.java
index f3171eb..a2c46ae 100644
--- a/org/gudy/azureus2/core3/disk/impl/DiskManagerImpl.java
+++ b/org/gudy/azureus2/core3/disk/impl/DiskManagerImpl.java
@@ -2287,7 +2287,8 @@ DiskManagerImpl
deleteDataFiles(
TOTorrent torrent,
String torrent_save_dir, // enclosing dir, not for deletion
- String torrent_save_file ) // file or dir for torrent
+ String torrent_save_file, // file or dir for torrent
+ boolean force_no_recycle )
{
if (torrent == null || torrent_save_file == null ){
@@ -2301,15 +2302,17 @@ DiskManagerImpl
target = FMFileManagerFactory.getSingleton().getFileLink( torrent, target.getCanonicalFile());
- FileUtil.deleteWithRecycle( target );
+ FileUtil.deleteWithRecycle( target, force_no_recycle );
}else{
PlatformManager mgr = PlatformManagerFactory.getPlatformManager();
- if( Constants.isOSX &&
- torrent_save_file.length() > 0 &&
- COConfigurationManager.getBooleanParameter("Move Deleted Data To Recycle Bin" ) &&
- mgr.hasCapability(PlatformManagerCapabilities.RecoverableFileDelete) ) {
+
+ if( Constants.isOSX &&
+ torrent_save_file.length() > 0 &&
+ COConfigurationManager.getBooleanParameter("Move Deleted Data To Recycle Bin" ) &&
+ (! force_no_recycle ) &&
+ mgr.hasCapability(PlatformManagerCapabilities.RecoverableFileDelete) ) {
try
{
@@ -2323,16 +2326,16 @@ DiskManagerImpl
}else{
- deleteDataFileContents( torrent, torrent_save_dir, torrent_save_file );
+ deleteDataFileContents( torrent, torrent_save_dir, torrent_save_file, force_no_recycle );
}
}
catch(PlatformManagerException ex)
{
- deleteDataFileContents( torrent, torrent_save_dir, torrent_save_file );
+ deleteDataFileContents( torrent, torrent_save_dir, torrent_save_file, force_no_recycle );
}
}
else{
- deleteDataFileContents(torrent, torrent_save_dir, torrent_save_file);
+ deleteDataFileContents(torrent, torrent_save_dir, torrent_save_file, force_no_recycle);
}
}
@@ -2427,9 +2430,10 @@ DiskManagerImpl
private static void
deleteDataFileContents(
- TOTorrent torrent,
- String torrent_save_dir,
- String torrent_save_file )
+ TOTorrent torrent,
+ String torrent_save_dir,
+ String torrent_save_file,
+ boolean force_no_recycle )
throws TOTorrentException, UnsupportedEncodingException, LocaleUtilEncodingException
{
@@ -2503,7 +2507,7 @@ DiskManagerImpl
if ( delete && file.exists() && !file.isDirectory()){
try{
- FileUtil.deleteWithRecycle( file );
+ FileUtil.deleteWithRecycle( file, force_no_recycle );
}catch (Exception e){
@@ -2784,7 +2788,9 @@ DiskManagerImpl
}else{
- if ( FileUtil.deleteWithRecycle( existing_file )){
+ if ( FileUtil.deleteWithRecycle(
+ existing_file,
+ download_manager.getDownloadState().getFlag( DownloadManagerState.FLAG_LOW_NOISE ))){
// new file, recheck
diff --git a/org/gudy/azureus2/core3/disk/impl/access/impl/DMReaderImpl.java b/org/gudy/azureus2/core3/disk/impl/access/impl/DMReaderImpl.java
index bc125f8..74316ca 100644
--- a/org/gudy/azureus2/core3/disk/impl/access/impl/DMReaderImpl.java
+++ b/org/gudy/azureus2/core3/disk/impl/access/impl/DMReaderImpl.java
@@ -339,7 +339,7 @@ DMReaderImpl
List chunks = new ArrayList();
int buffer_position = 0;
-
+
while ( buffer_position < length && currentFile < pieceList.size()) {
DMPieceMapEntry map_entry = pieceList.get( currentFile );
@@ -493,6 +493,7 @@ DMReaderImpl
private int buffer_length;
private int chunk_index;
+ private int chunk_limit;
protected
requestDispatcher(
@@ -624,10 +625,16 @@ DMReaderImpl
doRequest(
DiskAccessRequestListener l )
{
-
Object[] stuff = (Object[])chunks.get( chunk_index++ );
- buffer.limit( DirectByteBuffer.SS_DR, ((Integer)stuff[2]).intValue());
+ if ( chunk_index > 0 ){
+
+ buffer.position( DirectByteBuffer.SS_DR, chunk_limit );
+ }
+
+ chunk_limit = ((Integer)stuff[2]).intValue();
+
+ buffer.limit( DirectByteBuffer.SS_DR, chunk_limit );
short cache_policy = dm_request.getUseCache()?CacheFile.CP_READ_CACHE:CacheFile.CP_NONE;
diff --git a/org/gudy/azureus2/core3/download/impl/DownloadManagerImpl.java b/org/gudy/azureus2/core3/download/impl/DownloadManagerImpl.java
index b8e58cb..1010d0b 100644
--- a/org/gudy/azureus2/core3/download/impl/DownloadManagerImpl.java
+++ b/org/gudy/azureus2/core3/download/impl/DownloadManagerImpl.java
@@ -414,7 +414,7 @@ DownloadManagerImpl
an.cloneFrom( announcer );
- an.setTrackerUrl( old_url );
+ an.setTrackerURL( old_url );
an.stop( false );
@@ -782,7 +782,23 @@ DownloadManagerImpl
download_manager_state.setFlag( DownloadManagerState.FLAG_LOW_NOISE, true );
}
- download_manager_state.setTrackerResponseCache( new HashMap());
+ Map peer_cache = TorrentUtils.getPeerCache( torrent );
+
+ if ( peer_cache != null ){
+
+ try{
+ download_manager_state.setTrackerResponseCache( peer_cache );
+
+ }catch( Throwable e ){
+
+ Debug.out( e );
+
+ download_manager_state.setTrackerResponseCache( new HashMap());
+ }
+ }else{
+
+ download_manager_state.setTrackerResponseCache( new HashMap());
+ }
// also remove resume data incase someone's published a torrent with resume
// data in it
@@ -2982,11 +2998,16 @@ DownloadManagerImpl
protected void
deleteDataFiles()
{
- DiskManagerFactory.deleteDataFiles(torrent, torrent_save_location.getParent(), torrent_save_location.getName());
+ DiskManagerFactory.deleteDataFiles(
+ torrent,
+ torrent_save_location.getParent(),
+ torrent_save_location.getName(),
+ getDownloadState().getFlag( DownloadManagerState.FLAG_LOW_NOISE ));
// Attempted fix for bug 1572356 - apparently sometimes when we perform removal of a download's data files,
// it still somehow gets processed by the move-on-removal rules. I'm making the assumption that this method
// is only called when a download is about to be removed.
+
this.getDownloadState().setFlag(DownloadManagerState.FLAG_DISABLE_AUTO_FILE_MOVE, true);
}
@@ -2995,7 +3016,7 @@ DownloadManagerImpl
{
if ( torrentFileName != null ){
- TorrentUtils.delete( new File(torrentFileName));
+ TorrentUtils.delete( new File(torrentFileName),getDownloadState().getFlag( DownloadManagerState.FLAG_LOW_NOISE ));
}
}
diff --git a/org/gudy/azureus2/core3/torrentdownloader/impl/TorrentDownloaderImpl.java b/org/gudy/azureus2/core3/torrentdownloader/impl/TorrentDownloaderImpl.java
index 13974b1..e8693a4 100644
--- a/org/gudy/azureus2/core3/torrentdownloader/impl/TorrentDownloaderImpl.java
+++ b/org/gudy/azureus2/core3/torrentdownloader/impl/TorrentDownloaderImpl.java
@@ -27,8 +27,6 @@ package org.gudy.azureus2.core3.torrentdownloader.impl;
import java.io.*;
import java.net.HttpURLConnection;
-import java.net.Inet4Address;
-import java.net.InetAddress;
import java.net.URL;
import java.net.URLDecoder;
import java.util.Iterator;
@@ -44,6 +42,7 @@ import org.gudy.azureus2.core3.torrentdownloader.TorrentDownloaderCallBackInterf
import org.gudy.azureus2.core3.torrentdownloader.TorrentDownloader;
import org.gudy.azureus2.core3.util.*;
import org.gudy.azureus2.core3.util.protocol.magnet.MagnetConnection;
+import org.gudy.azureus2.core3.util.protocol.magnet.MagnetConnection2;
import org.gudy.azureus2.core3.torrent.*;
@@ -132,6 +131,8 @@ public class TorrentDownloaderImpl extends AEThread implements TorrentDownloader
}finally{
this_mon.exit();
+
+ closeConnection();
}
}
@@ -142,14 +143,14 @@ public class TorrentDownloaderImpl extends AEThread implements TorrentDownloader
new URL( url_str ); //determine if this is already a proper URL
}
catch( Throwable t ) { //it's not
- //check if the string is just a hex-encoded torrent infohash
- if( url_str.length() == 40 ) {
- try{
- //if so, convert to magnet:?xt=urn:btih:ZFQ7PUPQ2QMPFSD6AP4JASDDACA5MZU7 format
- byte[] infohash = ByteFormatter.decodeString( url_str.toUpperCase() ); //convert from HEX to raw bytes
- url_str = "magnet:?xt=urn:btih:" +Base32.encode( infohash ); //convert to BASE32
- }
- catch( Throwable e ) { /*e.printStackTrace();*/ }
+
+ //check if the string is just a base32/hex-encoded torrent infohash
+
+ String magnet_uri = UrlUtils.normaliseMagnetURI( url_str );
+
+ if ( magnet_uri != null ){
+
+ url_str = magnet_uri;
}
}
@@ -325,18 +326,32 @@ public class TorrentDownloaderImpl extends AEThread implements TorrentDownloader
filename += ".tmp";
}else{
- if (tmp.lastIndexOf('/') != -1)
- tmp = tmp.substring(tmp.lastIndexOf('/') + 1);
+ // might be /sdsdssd/ffgfgffgfg/ so remove trailing /
+
+ while( tmp.endsWith( "/" )){
+
+ tmp = tmp.substring(0,tmp.length()-1);
+ }
+
+ if (tmp.lastIndexOf('/') != -1){
+
+ tmp = tmp.substring(tmp.lastIndexOf('/') + 1);
+ }
- // remove any params in the url
+ // remove any params in the url
int param_pos = tmp.indexOf('?');
if ( param_pos != -1 ){
- tmp = tmp.substring(0,param_pos);
+ tmp = tmp.substring(0,param_pos);
}
filename = URLDecoder.decode(tmp, Constants.DEFAULT_ENCODING );
+
+ if ( filename.length() == 0 ){
+
+ filename = "Torrent" + (long)(Math.random()*Long.MAX_VALUE);
+ }
}
} else {
filename = filename.substring(filename.indexOf('=') + 1);
@@ -417,11 +432,19 @@ public class TorrentDownloaderImpl extends AEThread implements TorrentDownloader
runSupport()
{
boolean changed_status = false;
+ String last_status = "";
+
+ boolean sleep = false;
while( true ){
try{
- Thread.sleep(100);
+ if ( sleep ){
+
+ Thread.sleep(50);
+
+ sleep = false;
+ }
try{
this_mon.enter();
@@ -437,7 +460,13 @@ public class TorrentDownloaderImpl extends AEThread implements TorrentDownloader
String s = con.getResponseMessage();
- if ( !s.equals( getStatus())){
+ if ( s.equals( last_status )){
+
+ sleep = true;
+
+ }else{
+
+ last_status = s;
if ( !s.toLowerCase().startsWith("error:")){
@@ -483,10 +512,7 @@ public class TorrentDownloaderImpl extends AEThread implements TorrentDownloader
}
changed_status = true;
- }
-
-
-
+ }
}catch( Throwable e ){
break;
@@ -583,7 +609,7 @@ public class TorrentDownloaderImpl extends AEThread implements TorrentDownloader
this.readTotal += bufBytes;
- if (size != 0){
+ if (size > 0){
this.percentDone = (100 * this.readTotal) / size;
}
@@ -749,11 +775,17 @@ public class TorrentDownloaderImpl extends AEThread implements TorrentDownloader
public void cancel() {
this.cancel = true;
- if ( con instanceof MagnetConnection ){
- con.disconnect();
- }
+ closeConnection();
}
+ protected void
+ closeConnection()
+ {
+ if ( con instanceof MagnetConnection || con instanceof MagnetConnection2 ){
+ con.disconnect();
+ }
+ }
+
public void setDownloadPath(String path, String file) {
if (!this.isAlive()) {
if (path != null)
diff --git a/org/gudy/azureus2/core3/tracker/client/TRTrackerAnnouncer.java b/org/gudy/azureus2/core3/tracker/client/TRTrackerAnnouncer.java
index fdbd29f..94b7699 100644
--- a/org/gudy/azureus2/core3/tracker/client/TRTrackerAnnouncer.java
+++ b/org/gudy/azureus2/core3/tracker/client/TRTrackerAnnouncer.java
@@ -57,13 +57,17 @@ TRTrackerAnnouncer
getTorrent();
public URL
- getTrackerUrl();
+ getTrackerURL();
public void
- setTrackerUrl(
+ setTrackerURL(
URL url );
public void
+ setTrackerURLs(
+ TOTorrentAnnounceURLSet[] sets );
+
+ public void
resetTrackerUrl(
boolean shuffle );
diff --git a/org/gudy/azureus2/core3/tracker/client/impl/TRTrackerAnnouncerFactoryImpl.java b/org/gudy/azureus2/core3/tracker/client/impl/TRTrackerAnnouncerFactoryImpl.java
index dbe1b82..dfd9a3a 100644
--- a/org/gudy/azureus2/core3/tracker/client/impl/TRTrackerAnnouncerFactoryImpl.java
+++ b/org/gudy/azureus2/core3/tracker/client/impl/TRTrackerAnnouncerFactoryImpl.java
@@ -31,15 +31,13 @@ import java.util.*;
import org.gudy.azureus2.core3.torrent.*;
import org.gudy.azureus2.core3.tracker.client.*;
-import org.gudy.azureus2.core3.tracker.client.impl.bt.TRTrackerBTAnnouncerImpl;
-import org.gudy.azureus2.core3.tracker.client.impl.dht.TRTrackerDHTAnnouncerImpl;
import org.gudy.azureus2.core3.util.*;
public class
TRTrackerAnnouncerFactoryImpl
{
- protected static List listeners = new ArrayList();
- protected static List clients = new ArrayList();
+ protected static List<TRTrackerAnnouncerFactoryListener> listeners = new ArrayList<TRTrackerAnnouncerFactoryListener>();
+ protected static List<TRTrackerAnnouncerImpl> clients = new ArrayList<TRTrackerAnnouncerImpl>();
protected static AEMonitor class_mon = new AEMonitor( "TRTrackerClientFactory" );
@@ -51,16 +49,7 @@ TRTrackerAnnouncerFactoryImpl
throws TRTrackerAnnouncerException
{
- TRTrackerAnnouncer client;
-
- if ( TorrentUtils.isDecentralised( torrent )){
-
- client = new TRTrackerDHTAnnouncerImpl( torrent, networks, manual );
-
- }else{
-
- client = new TRTrackerBTAnnouncerImpl( torrent, networks, manual );
- }
+ TRTrackerAnnouncerImpl client = new TRTrackerAnnouncerMuxer( torrent, networks, manual );
if ( !manual ){
diff --git a/org/gudy/azureus2/core3/tracker/client/impl/TRTrackerAnnouncerImpl.java b/org/gudy/azureus2/core3/tracker/client/impl/TRTrackerAnnouncerImpl.java
index c0a57f3..2035f32 100644
--- a/org/gudy/azureus2/core3/tracker/client/impl/TRTrackerAnnouncerImpl.java
+++ b/org/gudy/azureus2/core3/tracker/client/impl/TRTrackerAnnouncerImpl.java
@@ -65,18 +65,16 @@ TRTrackerAnnouncerImpl
protected static final int LDT_URL_CHANGED = 2;
protected static final int LDT_URL_REFRESH = 3;
- protected ListenerManager listeners = ListenerManager.createManager(
+ protected ListenerManager<TRTrackerAnnouncerListener> listeners = ListenerManager.createManager(
"TrackerClient:ListenDispatcher",
- new ListenerManagerDispatcher()
+ new ListenerManagerDispatcher<TRTrackerAnnouncerListener>()
{
public void
dispatch(
- Object _listener,
- int type,
- Object value )
+ TRTrackerAnnouncerListener listener,
+ int type,
+ Object value )
{
- TRTrackerAnnouncerListener listener = (TRTrackerAnnouncerListener)_listener;
-
if ( type == LDT_TRACKER_RESPONSE ){
listener.receivedTrackerResponse((TRTrackerAnnouncerResponse)value);
@@ -109,10 +107,128 @@ TRTrackerAnnouncerImpl
{
torrent = _torrent;
}
-
+
+ public Helper
+ getHelper()
+ {
+ return(
+ new Helper()
+ {
+ public void
+ addToTrackerCache(
+ TRTrackerAnnouncerResponsePeerImpl[] peers )
+ {
+ TRTrackerAnnouncerImpl.this.addToTrackerCache( peers );
+ }
+
+ public TRTrackerAnnouncerResponsePeer[]
+ getPeersFromCache(
+ int num_want )
+ {
+ return( TRTrackerAnnouncerImpl.this.getPeersFromCache(num_want));
+ }
+
+ public void
+ setTrackerResponseCache(
+ Map map )
+ {
+ TRTrackerAnnouncerImpl.this.setTrackerResponseCache( map );
+ }
+
+ public void
+ removeFromTrackerResponseCache(
+ String ip, int tcpPort )
+ {
+ TRTrackerAnnouncerImpl.this.removeFromTrackerResponseCache( ip,tcpPort );
+ }
+
+ public Map
+ getTrackerResponseCache()
+ {
+ return( TRTrackerAnnouncerImpl.this.getTrackerResponseCache());
+ }
+
+ public void
+ informResponse(
+ TRTrackerAnnouncerResponse response )
+ {
+ listeners.dispatch( LDT_TRACKER_RESPONSE, response );
+ }
+
+ public void
+ informURLChange(
+ URL old_url,
+ URL new_url,
+ boolean explicit )
+ {
+ listeners.dispatch( LDT_URL_CHANGED,
+ new Object[]{old_url, new_url, new Boolean(explicit)});
+ }
+
+ public void
+ informURLRefresh()
+ {
+ listeners.dispatch( LDT_URL_REFRESH, null );
+ }
+
+ public void
+ addListener(
+ TRTrackerAnnouncerListener l )
+ {
+ TRTrackerAnnouncerImpl.this.addListener( l );
+ }
+
+ public void
+ removeListener(
+ TRTrackerAnnouncerListener l )
+ {
+ TRTrackerAnnouncerImpl.this.removeListener( l );
+ }
+ });
+ }
+
+ public static byte[]
+ getAnonymousPeerId(
+ String my_ip,
+ int my_port )
+ {
+ byte[] anon_peer_id = new byte[20];
+
+ // unique initial two bytes to identify this as fake
+
+ anon_peer_id[0] = (byte)'[';
+ anon_peer_id[1] = (byte)']';
+
+ try{
+ byte[] ip_bytes = my_ip.getBytes( Constants.DEFAULT_ENCODING );
+ int ip_len = ip_bytes.length;
+
+ if ( ip_len > 18 ){
+
+ ip_len = 18;
+ }
+
+ System.arraycopy( ip_bytes, 0, anon_peer_id, 2, ip_len );
+
+ int port_copy = my_port;
+
+ for (int j=2+ip_len;j<20;j++){
+
+ anon_peer_id[j] = (byte)(port_copy&0xff);
+
+ port_copy >>= 8;
+ }
+ }catch( UnsupportedEncodingException e ){
+
+ Debug.printStackTrace( e );
+ }
+
+ return( anon_peer_id );
+ }
+
// NOTE: tracker_cache is cleared out in DownloadManager when opening a torrent for the
// first time as a DOS prevention measure
-
+
public Map
getTrackerResponseCache()
{
@@ -130,7 +246,7 @@ TRTrackerAnnouncerImpl
Logger.log(new LogEvent(getTorrent(), LOGID, "TRTrackerClient: imported "
+ num + " cached peers"));
}
-
+
protected Map
exportTrackerCache()
{
@@ -188,46 +304,7 @@ TRTrackerAnnouncerImpl
return( res );
}
-
- protected byte[]
- getAnonymousPeerId(
- String my_ip,
- int my_port )
- {
- byte[] anon_peer_id = new byte[20];
-
- // unique initial two bytes to identify this as fake
-
- anon_peer_id[0] = (byte)'[';
- anon_peer_id[1] = (byte)']';
-
- try{
- byte[] ip_bytes = my_ip.getBytes( Constants.DEFAULT_ENCODING );
- int ip_len = ip_bytes.length;
-
- if ( ip_len > 18 ){
-
- ip_len = 18;
- }
- System.arraycopy( ip_bytes, 0, anon_peer_id, 2, ip_len );
-
- int port_copy = my_port;
-
- for (int j=2+ip_len;j<20;j++){
-
- anon_peer_id[j] = (byte)(port_copy&0xff);
-
- port_copy >>= 8;
- }
- }catch( UnsupportedEncodingException e ){
-
- Debug.printStackTrace( e );
- }
-
- return( anon_peer_id );
- }
-
protected int
importTrackerCache(
Map map )
@@ -272,7 +349,7 @@ TRTrackerAnnouncerImpl
byte az_ver = l_az_ver==null?TRTrackerAnnouncer.AZ_TRACKER_VERSION_1:l_az_ver.byteValue();
//System.out.println( "recovered " + ip_address + ":" + port );
-
+
TRTrackerAnnouncerResponsePeerImpl entry =
new TRTrackerAnnouncerResponsePeerImpl(
peer_source,
@@ -301,7 +378,7 @@ TRTrackerAnnouncerImpl
return( tracker_peer_cache.size());
}
}
-
+
protected void
addToTrackerCache(
TRTrackerAnnouncerResponsePeerImpl[] peers )
@@ -345,7 +422,7 @@ TRTrackerAnnouncerImpl
tracker_peer_cache_mon.exit();
}
}
-
+
public void
removeFromTrackerResponseCache(
String ip,
@@ -452,16 +529,16 @@ TRTrackerAnnouncerImpl
}
}
- if (Logger.isEnabled()){
-
- for (int i=0;i<res.length;i++){
+ if (Logger.isEnabled()){
+
+ for (int i=0;i<res.length;i++){
Logger.log(new LogEvent(getTorrent(), LOGID, "CACHED PEER: " + res[i].getString()));
- }
+ }
Logger.log(new LogEvent(getTorrent(), LOGID,
"TRTrackerClient: returned " + res.length + " cached peers"));
- }
+ }
return( res );
@@ -470,7 +547,7 @@ TRTrackerAnnouncerImpl
tracker_peer_cache_mon.exit();
}
}
-
+
public void
addListener(
TRTrackerAnnouncerListener l )
@@ -485,4 +562,47 @@ TRTrackerAnnouncerImpl
listeners.removeListener(l);
}
+ public interface
+ Helper
+ {
+ public void
+ addToTrackerCache(
+ TRTrackerAnnouncerResponsePeerImpl[] peers );
+
+ public TRTrackerAnnouncerResponsePeer[]
+ getPeersFromCache(
+ int num_want );
+
+ public void
+ setTrackerResponseCache(
+ Map map );
+
+ public void
+ removeFromTrackerResponseCache(
+ String ip, int tcpPort );
+
+ public Map
+ getTrackerResponseCache();
+
+ public void
+ informResponse(
+ TRTrackerAnnouncerResponse response );
+
+ public void
+ informURLChange(
+ URL old_url,
+ URL new_url,
+ boolean explicit );
+
+ public void
+ informURLRefresh();
+
+ public void
+ addListener(
+ TRTrackerAnnouncerListener l );
+
+ public void
+ removeListener(
+ TRTrackerAnnouncerListener l );
+ }
}
diff --git a/org/gudy/azureus2/core3/tracker/client/impl/TRTrackerAnnouncerMuxer.java b/org/gudy/azureus2/core3/tracker/client/impl/TRTrackerAnnouncerMuxer.java
new file mode 100644
index 0000000..c00e506
--- /dev/null
+++ b/org/gudy/azureus2/core3/tracker/client/impl/TRTrackerAnnouncerMuxer.java
@@ -0,0 +1,238 @@
+/*
+ * Created on Dec 4, 2009
+ * Created by Paul Gardner
+ *
+ * Copyright 2009 Vuze, Inc. All rights reserved.
+ *
+ * This program is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation; version 2 of the License only.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307, USA.
+ */
+
+
+package org.gudy.azureus2.core3.tracker.client.impl;
+
+import java.net.URL;
+
+import org.gudy.azureus2.core3.torrent.TOTorrent;
+import org.gudy.azureus2.core3.torrent.TOTorrentAnnounceURLSet;
+import org.gudy.azureus2.core3.tracker.client.TRTrackerAnnouncer;
+import org.gudy.azureus2.core3.tracker.client.TRTrackerAnnouncerDataProvider;
+import org.gudy.azureus2.core3.tracker.client.TRTrackerAnnouncerException;
+import org.gudy.azureus2.core3.tracker.client.TRTrackerAnnouncerResponse;
+import org.gudy.azureus2.core3.tracker.client.impl.bt.TRTrackerBTAnnouncerImpl;
+import org.gudy.azureus2.core3.tracker.client.impl.dht.TRTrackerDHTAnnouncerImpl;
+import org.gudy.azureus2.core3.util.Debug;
+import org.gudy.azureus2.core3.util.IndentWriter;
+import org.gudy.azureus2.core3.util.TorrentUtils;
+import org.gudy.azureus2.plugins.download.DownloadAnnounceResult;
+
+public class
+TRTrackerAnnouncerMuxer
+ extends TRTrackerAnnouncerImpl
+{
+ private TRTrackerAnnouncer main_announcer;
+
+ protected
+ TRTrackerAnnouncerMuxer(
+ TOTorrent torrent,
+ String[] networks,
+ boolean manual )
+
+ throws TRTrackerAnnouncerException
+ {
+ super( torrent );
+
+ TOTorrentAnnounceURLSet[] sets = torrent.getAnnounceURLGroup().getAnnounceURLSets();
+
+ if ( TorrentUtils.isDecentralised( torrent )){
+
+ main_announcer = new TRTrackerDHTAnnouncerImpl( torrent, networks, manual, getHelper());
+
+ }else{
+
+
+ main_announcer = new TRTrackerBTAnnouncerImpl( torrent, sets, networks, manual, getHelper());
+ }
+ }
+
+ public void
+ setAnnounceDataProvider(
+ TRTrackerAnnouncerDataProvider provider )
+ {
+ main_announcer.setAnnounceDataProvider( provider );
+
+ //System.out.println( "announcer set" );
+ }
+
+ public TOTorrent
+ getTorrent()
+ {
+ return( main_announcer.getTorrent());
+ }
+
+ public URL
+ getTrackerURL()
+ {
+ return( main_announcer.getTrackerURL());
+ }
+
+ public void
+ setTrackerURL(
+ URL url )
+ {
+ main_announcer.setTrackerURL( url );
+ }
+
+ public void
+ setTrackerURLs(
+ TOTorrentAnnounceURLSet[] sets )
+ {
+ Debug.out( "Not implemented" );
+ }
+
+ public void
+ resetTrackerUrl(
+ boolean shuffle )
+ {
+ main_announcer.setTrackerURLs( getTorrent().getAnnounceURLGroup().getAnnounceURLSets());
+
+ main_announcer.resetTrackerUrl( shuffle );
+ }
+
+ public void
+ setIPOverride(
+ String override )
+ {
+ main_announcer.setIPOverride( override );
+ }
+
+ public void
+ cloneFrom(
+ TRTrackerAnnouncer other )
+ {
+ main_announcer.cloneFrom( other );
+ }
+
+ public void
+ clearIPOverride()
+ {
+ main_announcer.clearIPOverride();
+ }
+
+ public byte[]
+ getPeerId()
+ {
+ return( main_announcer.getPeerId());
+ }
+
+ public void
+ setRefreshDelayOverrides(
+ int percentage )
+ {
+ main_announcer.setRefreshDelayOverrides( percentage );
+ }
+
+ public int
+ getTimeUntilNextUpdate()
+ {
+ return( main_announcer.getTimeUntilNextUpdate());
+ }
+
+ public int
+ getLastUpdateTime()
+ {
+ return( main_announcer.getLastUpdateTime());
+ }
+
+ public void
+ update(
+ boolean force )
+ {
+ main_announcer.update(force);
+
+ //System.out.println( "update" );
+ }
+
+ public void
+ complete(
+ boolean already_reported )
+ {
+ main_announcer.complete(already_reported);
+
+ //System.out.println( "complete" );
+ }
+
+ public void
+ stop(
+ boolean for_queue )
+ {
+ main_announcer.stop( for_queue );
+
+ //System.out.println( "stop" );
+ }
+
+ public void
+ destroy()
+ {
+ TRTrackerAnnouncerFactoryImpl.destroy( this );
+
+ main_announcer.destroy();
+
+ //System.out.println( "destroy" );
+ }
+
+ public int
+ getStatus()
+ {
+ return( main_announcer.getStatus());
+ }
+
+ public boolean
+ isManual()
+ {
+ return( main_announcer.isManual());
+ }
+
+ public String
+ getStatusString()
+ {
+ return( main_announcer.getStatusString());
+ }
+
+ public TRTrackerAnnouncerResponse
+ getLastResponse()
+ {
+ return( main_announcer.getLastResponse());
+ }
+
+
+ public void
+ refreshListeners()
+ {
+ main_announcer.refreshListeners();
+ }
+
+ public void
+ setAnnounceResult(
+ DownloadAnnounceResult result )
+ {
+ main_announcer.setAnnounceResult(result);
+ }
+
+ public void
+ generateEvidence(
+ IndentWriter writer )
+ {
+ main_announcer.generateEvidence(writer);
+ }
+}
diff --git a/org/gudy/azureus2/core3/tracker/client/impl/bt/TRTrackerBTAnnouncerImpl.java b/org/gudy/azureus2/core3/tracker/client/impl/bt/TRTrackerBTAnnouncerImpl.java
index 25326ba..f69a504 100644
--- a/org/gudy/azureus2/core3/tracker/client/impl/bt/TRTrackerBTAnnouncerImpl.java
+++ b/org/gudy/azureus2/core3/tracker/client/impl/bt/TRTrackerBTAnnouncerImpl.java
@@ -39,6 +39,7 @@ import org.gudy.azureus2.core3.config.ParameterListener;
import org.gudy.azureus2.core3.internat.MessageText;
import org.gudy.azureus2.core3.logging.LogAlert;
import org.gudy.azureus2.core3.logging.LogEvent;
+import org.gudy.azureus2.core3.logging.LogIDs;
import org.gudy.azureus2.core3.logging.Logger;
import org.gudy.azureus2.core3.peer.PEPeerSource;
import org.gudy.azureus2.core3.security.SESecurityManager;
@@ -76,9 +77,9 @@ import com.aelitis.net.udp.uc.*;
*/
public class
TRTrackerBTAnnouncerImpl
- extends TRTrackerAnnouncerImpl
+ implements TRTrackerAnnouncer
{
-
+ public final static LogIDs LOGID = LogIDs.TRACKER;
private static final int OVERRIDE_PERIOD = 10*1000;
@@ -113,12 +114,15 @@ TRTrackerBTAnnouncerImpl
private static Map tracker_report_map = new HashMap();
- private TOTorrent torrent;
+ private TOTorrent torrent;
+ private TOTorrentAnnounceURLSet[] announce_urls;
+
+ private TRTrackerAnnouncerImpl.Helper helper;
private TimerEvent current_timer_event;
private TimerEventPerformer timer_event_action;
- protected int tracker_state = TS_INITIALISED;
+ protected int tracker_state = TRTrackerAnnouncer.TS_INITIALISED;
private String tracker_status_str = "";
private TRTrackerAnnouncerResponseImpl last_response = null;
private long last_update_time_secs;
@@ -202,17 +206,19 @@ TRTrackerBTAnnouncerImpl
public
TRTrackerBTAnnouncerImpl(
- TOTorrent _torrent,
- String[] _peer_networks,
- boolean _manual )
+ TOTorrent _torrent,
+ TOTorrentAnnounceURLSet[] _announce_urls,
+ String[] _peer_networks,
+ boolean _manual,
+ TRTrackerAnnouncerImpl.Helper _helper )
throws TRTrackerAnnouncerException
{
- super( _torrent );
-
torrent = _torrent;
+ announce_urls = _announce_urls;
peer_networks = _peer_networks;
manual_control = _manual;
+ helper = _helper;
//Get the Tracker url
@@ -290,7 +296,7 @@ TRTrackerBTAnnouncerImpl
current_time_to_wait_secs = secs_to_wait;
- if ( tracker_state == TS_STOPPED ){
+ if ( tracker_state == TRTrackerAnnouncer.TS_STOPPED ){
// System.out.println( "\tperform: stopped so no more events");
@@ -415,7 +421,7 @@ TRTrackerBTAnnouncerImpl
if (Logger.isEnabled())
Logger.log(new LogEvent(torrent, LOGID,
"MIN INTERVAL CALC: override, perc = 0"));
- return REFRESH_MINIMUM_SECS;
+ return TRTrackerAnnouncer.REFRESH_MINIMUM_SECS;
}
if (rd_override_percentage != 100) {
@@ -426,9 +432,9 @@ TRTrackerBTAnnouncerImpl
}
}
- if ( secs_to_wait < REFRESH_MINIMUM_SECS ){
+ if ( secs_to_wait < TRTrackerAnnouncer.REFRESH_MINIMUM_SECS ){
- secs_to_wait = REFRESH_MINIMUM_SECS;
+ secs_to_wait = TRTrackerAnnouncer.REFRESH_MINIMUM_SECS;
}
//use 'min interval' for calculation
@@ -564,7 +570,7 @@ TRTrackerBTAnnouncerImpl
if ( now < last_update_time_secs ) force = true; //time went backwards
- long effective_min = min_interval_override>0?min_interval_override:REFRESH_MINIMUM_SECS;
+ long effective_min = min_interval_override>0?min_interval_override:TRTrackerAnnouncer.REFRESH_MINIMUM_SECS;
if ( manual_control || force || ( now - last_update_time_secs >= effective_min )){
@@ -662,29 +668,29 @@ TRTrackerBTAnnouncerImpl
// if manual control then we assume that a stop request is required, even if we
// are in an init state. needed for explicit stop based on URL
- if ( tracker_state == TS_INITIALISED && !manual_control ){
+ if ( tracker_state == TRTrackerAnnouncer.TS_INITIALISED && !manual_control ){
// never started
- tracker_state = TS_STOPPED;
+ tracker_state = TRTrackerAnnouncer.TS_STOPPED;
- }else if ( tracker_state != TS_STOPPED ){
+ }else if ( tracker_state != TRTrackerAnnouncer.TS_STOPPED ){
response = stopSupport();
if ( response.getStatus() == TRTrackerAnnouncerResponse.ST_ONLINE ){
- tracker_state = TS_STOPPED;
+ tracker_state = TRTrackerAnnouncer.TS_STOPPED;
}else{
// just have one go at sending a stop event as we don't want to sit here
// forever trying to send stop to a stuffed tracker
- tracker_state = TS_STOPPED;
+ tracker_state = TRTrackerAnnouncer.TS_STOPPED;
}
}
- }else if ( tracker_state == TS_INITIALISED ){
+ }else if ( tracker_state == TRTrackerAnnouncer.TS_INITIALISED ){
// always go through the "start" phase, even if we're already complete
// as some trackers insist on the initial "start"
@@ -693,7 +699,7 @@ TRTrackerBTAnnouncerImpl
if ( response.getStatus() == TRTrackerAnnouncerResponse.ST_ONLINE ){
- tracker_state = TS_DOWNLOADING;
+ tracker_state = TRTrackerAnnouncer.TS_DOWNLOADING;
}
}else if ( completed ){
@@ -710,10 +716,10 @@ TRTrackerBTAnnouncerImpl
complete_reported = true;
- tracker_state = TS_COMPLETED;
+ tracker_state = TRTrackerAnnouncer.TS_COMPLETED;
}
}else{
- tracker_state = TS_COMPLETED;
+ tracker_state = TRTrackerAnnouncer.TS_COMPLETED;
response = updateSupport();
}
@@ -740,7 +746,7 @@ TRTrackerBTAnnouncerImpl
// will fail peers that don't start with a "started" event after a
// tracker restart
- tracker_state = TS_INITIALISED;
+ tracker_state = TRTrackerAnnouncer.TS_INITIALISED;
}else{
@@ -764,7 +770,7 @@ TRTrackerBTAnnouncerImpl
last_response = response;
- listeners.dispatch( LDT_TRACKER_RESPONSE, response );
+ helper.informResponse( response );
return( response.getTimeToWait());
}
@@ -1052,7 +1058,7 @@ TRTrackerBTAnnouncerImpl
int num_want = calculateNumWant() * 4;
- TRTrackerAnnouncerResponsePeer[] cached_peers = getPeersFromCache(num_want);
+ TRTrackerAnnouncerResponsePeer[] cached_peers = helper.getPeersFromCache(num_want);
if ( cached_peers.length > 0 ){
@@ -2087,13 +2093,13 @@ TRTrackerBTAnnouncerImpl
}
public URL
- getTrackerUrl()
+ getTrackerURL()
{
return( lastUsedUrl );
}
public void
- setTrackerUrl(
+ setTrackerURL(
URL new_url )
{
try{
@@ -2116,6 +2122,13 @@ TRTrackerBTAnnouncerImpl
}
public void
+ setTrackerURLs(
+ TOTorrentAnnounceURLSet[] _set )
+ {
+ announce_urls = _set;
+ }
+
+ public void
resetTrackerUrl(
boolean shuffle )
{
@@ -2163,10 +2176,8 @@ TRTrackerBTAnnouncerImpl
trackerUrlLists = new ArrayList(1);
//This entry is present on multi-tracker torrents
-
- TOTorrentAnnounceURLSet[] announce_sets = torrent.getAnnounceURLGroup().getAnnounceURLSets();
-
- if ( announce_sets.length == 0 ){
+
+ if ( announce_urls.length == 0 ){
//If not present, we use the default specification
@@ -2184,11 +2195,11 @@ TRTrackerBTAnnouncerImpl
//Ok we have a multi-tracker torrent
- for(int i = 0 ; i < announce_sets.length ; i++){
+ for(int i = 0 ; i < announce_urls.length ; i++){
//Each list contains a list of urls
- URL[] urls = announce_sets[i].getAnnounceURLs();
+ URL[] urls = announce_urls[i].getAnnounceURLs();
List random_urls = new ArrayList();
@@ -2685,7 +2696,7 @@ TRTrackerBTAnnouncerImpl
int tcp_port = ((tcp_bytes[0]&0xff) << 8 ) + (tcp_bytes[1]&0xff );
- byte[] peer_peer_id = getAnonymousPeerId( ip, tcp_port );
+ byte[] peer_peer_id = TRTrackerAnnouncerImpl.getAnonymousPeerId( ip, tcp_port );
int udp_port = 0;
@@ -2845,7 +2856,7 @@ TRTrackerBTAnnouncerImpl
// Debug.out(ip + ": tracker did not give peerID in reply");
- peer_peer_id = getAnonymousPeerId( ip, peer_port );
+ peer_peer_id = TRTrackerAnnouncerImpl.getAnonymousPeerId( ip, peer_port );
// System.out.println("generated peer id" + new String(peerId) + "/" + ByteFormatter.nicePrint( peerId, true ));
}else{
@@ -2936,7 +2947,7 @@ TRTrackerBTAnnouncerImpl
continue;
}
- byte[] peer_peer_id = getAnonymousPeerId( ip, tcp_port );
+ byte[] peer_peer_id = TRTrackerAnnouncerImpl.getAnonymousPeerId( ip, tcp_port );
short protocol;
int udp_port;
@@ -3033,7 +3044,7 @@ TRTrackerBTAnnouncerImpl
continue;
}
- byte[] peer_peer_id = getAnonymousPeerId( ip, tcp_port );
+ byte[] peer_peer_id = TRTrackerAnnouncerImpl.getAnonymousPeerId( ip, tcp_port );
short protocol = DownloadAnnounceResultPeer.PROTOCOL_NORMAL;
@@ -3053,7 +3064,7 @@ TRTrackerBTAnnouncerImpl
valid_meta_peers.toArray(peers);
- addToTrackerCache( peers);
+ helper.addToTrackerCache( peers);
TRTrackerAnnouncerResponseImpl resp = new TRTrackerAnnouncerResponseImpl( url, torrent_hash, TRTrackerAnnouncerResponse.ST_ONLINE, time_to_wait, peers );
@@ -3113,7 +3124,7 @@ TRTrackerBTAnnouncerImpl
TRTrackerScraper scraper = TRTrackerScraperFactory.getSingleton();
if (scraper != null) {
- TRTrackerScraperResponse scrapeResponse = scraper.scrape(this);
+ TRTrackerScraperResponse scrapeResponse = scraper.scrape( torrent, getTrackerURL());
if (scrapeResponse != null) {
long lNextScrapeTime = scrapeResponse.getNextScrapeStartTime();
long lNewNextScrapeTime = TRTrackerScraperResponseImpl.calcScrapeIntervalSecs(
@@ -3175,14 +3186,13 @@ TRTrackerBTAnnouncerImpl
URL new_url,
boolean explicit )
{
- listeners.dispatch( LDT_URL_CHANGED,
- new Object[]{old_url, new_url, new Boolean(explicit)});
+ helper.informURLChange( old_url, new_url, explicit );
}
protected void
informURLRefresh()
{
- listeners.dispatch( LDT_URL_REFRESH, null );
+ helper.informURLRefresh();
}
public TRTrackerAnnouncerResponse
@@ -3206,9 +3216,7 @@ TRTrackerBTAnnouncerImpl
destroy()
{
destroyed = true;
-
- TRTrackerAnnouncerFactoryImpl.destroy( this );
-
+
try{
this_mon.enter();
@@ -3367,7 +3375,7 @@ TRTrackerBTAnnouncerImpl
l_peers.toArray( peers );
- addToTrackerCache( peers);
+ helper.addToTrackerCache( peers);
if ( ps_enabled || peers.length > 0 || ext_peers.length == 0 ){
@@ -3398,7 +3406,41 @@ TRTrackerBTAnnouncerImpl
tracker_status_str = status + " (" + result.getURL() + ")";
}
- listeners.dispatch( LDT_TRACKER_RESPONSE, response );
+ helper.informResponse( response );
+ }
+
+ public void
+ addListener(
+ TRTrackerAnnouncerListener l )
+ {
+ helper.addListener( l );
+ }
+
+ public void
+ removeListener(
+ TRTrackerAnnouncerListener l )
+ {
+ helper.removeListener( l );
+ }
+
+ public void
+ setTrackerResponseCache(
+ Map map )
+ {
+ helper.setTrackerResponseCache( map );
+ }
+
+ public void
+ removeFromTrackerResponseCache(
+ String ip, int tcpPort)
+ {
+ helper.removeFromTrackerResponseCache( ip, tcpPort );
+ }
+
+ public Map
+ getTrackerResponseCache()
+ {
+ return( helper.getTrackerResponseCache());
}
public void
diff --git a/org/gudy/azureus2/core3/tracker/client/impl/bt/TrackerChecker.java b/org/gudy/azureus2/core3/tracker/client/impl/bt/TrackerChecker.java
index 367ab96..4d5589c 100644
--- a/org/gudy/azureus2/core3/tracker/client/impl/bt/TrackerChecker.java
+++ b/org/gudy/azureus2/core3/tracker/client/impl/bt/TrackerChecker.java
@@ -93,7 +93,7 @@ public class TrackerChecker implements AEDiagnosticsEvidenceGenerator, SystemTim
TRTrackerAnnouncer tracker_client)
{
try {
- return getHashData(tracker_client.getTrackerUrl(),
+ return getHashData(tracker_client.getTrackerURL(),
tracker_client.getTorrent().getHashWrapper());
} catch (TOTorrentException e) {
diff --git a/org/gudy/azureus2/core3/tracker/client/impl/dht/TRTrackerDHTAnnouncerImpl.java b/org/gudy/azureus2/core3/tracker/client/impl/dht/TRTrackerDHTAnnouncerImpl.java
index 45033de..7ddba49 100644
--- a/org/gudy/azureus2/core3/tracker/client/impl/dht/TRTrackerDHTAnnouncerImpl.java
+++ b/org/gudy/azureus2/core3/tracker/client/impl/dht/TRTrackerDHTAnnouncerImpl.java
@@ -23,15 +23,18 @@
package org.gudy.azureus2.core3.tracker.client.impl.dht;
import java.net.URL;
+import java.util.Map;
import org.gudy.azureus2.core3.internat.MessageText;
import org.gudy.azureus2.core3.logging.*;
import org.gudy.azureus2.core3.torrent.TOTorrent;
+import org.gudy.azureus2.core3.torrent.TOTorrentAnnounceURLSet;
import org.gudy.azureus2.core3.torrent.TOTorrentException;
import org.gudy.azureus2.core3.tracker.client.TRTrackerAnnouncer;
import org.gudy.azureus2.core3.tracker.client.TRTrackerAnnouncerDataProvider;
import org.gudy.azureus2.core3.tracker.client.TRTrackerAnnouncerException;
+import org.gudy.azureus2.core3.tracker.client.TRTrackerAnnouncerListener;
import org.gudy.azureus2.core3.tracker.client.TRTrackerAnnouncerResponse;
import org.gudy.azureus2.core3.tracker.client.TRTrackerAnnouncerResponsePeer;
import org.gudy.azureus2.core3.tracker.client.impl.TRTrackerAnnouncerImpl;
@@ -53,10 +56,15 @@ import org.gudy.azureus2.pluginsimpl.local.clientid.ClientIDManagerImpl;
public class
TRTrackerDHTAnnouncerImpl
- extends TRTrackerAnnouncerImpl
+ implements TRTrackerAnnouncer
{
+ public final static LogIDs LOGID = LogIDs.TRACKER;
+
private TOTorrent torrent;
private HashWrapper torrent_hash;
+
+ private TRTrackerAnnouncerImpl.Helper helper;
+
private byte[] data_peer_id;
private String tracker_status_str;
@@ -70,16 +78,16 @@ TRTrackerDHTAnnouncerImpl
public
TRTrackerDHTAnnouncerImpl(
- TOTorrent _torrent,
- String[] _networks,
- boolean _manual )
+ TOTorrent _torrent,
+ String[] _networks,
+ boolean _manual,
+ TRTrackerAnnouncerImpl.Helper _helper )
throws TRTrackerAnnouncerException
- {
- super( _torrent );
-
+ {
torrent = _torrent;
manual = _manual;
+ helper = _helper;
try{
torrent_hash = torrent.getHashWrapper();
@@ -125,18 +133,25 @@ TRTrackerDHTAnnouncerImpl
}
public URL
- getTrackerUrl()
+ getTrackerURL()
{
return( torrent.getAnnounceURL());
}
public void
- setTrackerUrl(
+ setTrackerURL(
URL url )
{
- Debug.out( "setTrackerURL not supported for DHT" );
+ Debug.out( "Not implemented" );
}
+ public void
+ setTrackerURLs(
+ TOTorrentAnnounceURLSet[] sets )
+ {
+ Debug.out( "Not implemented" );
+ }
+
public void
resetTrackerUrl(
boolean shuffle )
@@ -297,7 +312,7 @@ TRTrackerDHTAnnouncerImpl
(short)0 );
}
- addToTrackerCache( peers);
+ helper.addToTrackerCache( peers);
tracker_status_str = MessageText.getString("PeerManager.status.ok");
@@ -306,7 +321,7 @@ TRTrackerDHTAnnouncerImpl
last_response = response;
- listeners.dispatch( LDT_TRACKER_RESPONSE, response );
+ helper.informResponse( response );
}
protected void
@@ -314,18 +329,52 @@ TRTrackerDHTAnnouncerImpl
{
if ( last_response.getStatus() != TRTrackerAnnouncerResponse.ST_ONLINE ){
- TRTrackerAnnouncerResponsePeer[] cached_peers = getPeersFromCache(100);
+ TRTrackerAnnouncerResponsePeer[] cached_peers = helper.getPeersFromCache(100);
if ( cached_peers.length > 0 ){
last_response.setPeers( cached_peers );
- listeners.dispatch( LDT_TRACKER_RESPONSE, last_response );
+ helper.informResponse( last_response );
}
}
}
public void
+ addListener(
+ TRTrackerAnnouncerListener l )
+ {
+ helper.addListener( l );
+ }
+
+ public void
+ removeListener(
+ TRTrackerAnnouncerListener l )
+ {
+ helper.removeListener( l );
+ }
+
+ public void
+ setTrackerResponseCache(
+ Map map )
+ {
+ helper.setTrackerResponseCache( map );
+ }
+
+ public void
+ removeFromTrackerResponseCache(
+ String ip, int tcpPort)
+ {
+ helper.removeFromTrackerResponseCache( ip, tcpPort );
+ }
+
+ public Map
+ getTrackerResponseCache()
+ {
+ return( helper.getTrackerResponseCache());
+ }
+
+ public void
generateEvidence(
IndentWriter writer )
{
diff --git a/org/gudy/azureus2/core3/tracker/server/impl/tcp/nonblocking/TRNonBlockingServer.java b/org/gudy/azureus2/core3/tracker/server/impl/tcp/nonblocking/TRNonBlockingServer.java
index 0782442..0141b2b 100644
--- a/org/gudy/azureus2/core3/tracker/server/impl/tcp/nonblocking/TRNonBlockingServer.java
+++ b/org/gudy/azureus2/core3/tracker/server/impl/tcp/nonblocking/TRNonBlockingServer.java
@@ -82,7 +82,7 @@ TRNonBlockingServer
private VirtualServerChannelSelector accept_server;
- private boolean immediate_close;
+ private boolean immediate_close = COConfigurationManager.getBooleanParameter( "Tracker TCP NonBlocking Immediate Close" );
private volatile boolean closed;
diff --git a/org/gudy/azureus2/core3/tracker/util/TRTrackerUtils.java b/org/gudy/azureus2/core3/tracker/util/TRTrackerUtils.java
index e95dd2b..98a4485 100644
--- a/org/gudy/azureus2/core3/tracker/util/TRTrackerUtils.java
+++ b/org/gudy/azureus2/core3/tracker/util/TRTrackerUtils.java
@@ -31,6 +31,7 @@ import java.net.*;
import java.io.*;
import org.gudy.azureus2.core3.config.*;
+import org.gudy.azureus2.core3.tracker.client.impl.TRTrackerAnnouncerImpl;
import org.gudy.azureus2.core3.tracker.client.impl.bt.TRTrackerBTAnnouncerImpl;
import org.gudy.azureus2.core3.tracker.host.TRHost;
import org.gudy.azureus2.core3.util.AENetworkClassifier;
@@ -631,7 +632,7 @@ TRTrackerUtils
Map map1,
Map map2 )
{
- return( TRTrackerBTAnnouncerImpl.mergeResponseCache( map1, map2 ));
+ return( TRTrackerAnnouncerImpl.mergeResponseCache( map1, map2 ));
}
public static String
diff --git a/org/gudy/azureus2/core3/util/AEDiagnostics.java b/org/gudy/azureus2/core3/util/AEDiagnostics.java
index b398dd0..770cafc 100644
--- a/org/gudy/azureus2/core3/util/AEDiagnostics.java
+++ b/org/gudy/azureus2/core3/util/AEDiagnostics.java
@@ -30,8 +30,10 @@ import org.gudy.azureus2.platform.PlatformManager;
import org.gudy.azureus2.platform.PlatformManagerCapabilities;
import org.gudy.azureus2.platform.PlatformManagerFactory;
+import com.aelitis.azureus.core.util.AEThreadMonitor;
import com.aelitis.azureus.core.util.Java15Utils;
+
/**
* @author parg
*
@@ -121,9 +123,7 @@ AEDiagnostics
protected static boolean loggers_enabled;
private static List evidence_generators = new ArrayList();
-
- private static boolean load_15_tried;
-
+
public static synchronized void
startup(
boolean _enable_pending )
@@ -138,14 +138,18 @@ AEDiagnostics
enable_pending_writes = _enable_pending;
try{
- // Minimize risk of loading to much when in transitory startup mode
+ // Minimize risk of loading to much when in transitory startup mode
+
boolean transitoryStartup = System.getProperty("transitory.startup", "0").equals("1");
- if (transitoryStartup) {
- // no vivaldi and Thread monitor for you!
- load_15_tried = true;
- // no xxx_?.log logging for you!
+
+ if ( transitoryStartup ){
+
+ // no xxx_?.log logging for you!
+
loggers_enabled = false;
- // skip tidy check and more!
+
+ // skip tidy check and more!
+
return;
}
@@ -167,6 +171,11 @@ AEDiagnostics
logging_enabled = COConfigurationManager.getBooleanParameter( "Logger.Enabled" );
loggers_enabled = logging_enabled && COConfigurationManager.getBooleanParameter( "Logger.DebugFiles.Enabled");
+
+ if ( !loggers_enabled ){
+
+ loggers_enabled = Constants.IS_CVS_VERSION || COConfigurationManager.getBooleanParameter( "Logger.DebugFiles.Enabled.Force" );
+ }
}
});
@@ -229,6 +238,9 @@ AEDiagnostics
debug_dir.mkdir();
}
+
+ AEThreadMonitor.initialise();
+
}catch( Throwable e ){
// with webui we don't have the file stuff so this fails with class not found
@@ -240,43 +252,9 @@ AEDiagnostics
}finally{
startup_complete = true;
-
- load15Stuff();
}
}
-
- protected static void
- load15Stuff()
- {
- if ( load_15_tried ){
-
- return;
- }
- load_15_tried = true;
-
- // pull in the JDK1.5 monitoring stuff if present
-
- try{
- Class c = Class.forName( "com.aelitis.azureus.jdk15.Java15Initialiser" );
-
- if ( c != null ){
-
- Method m = c.getDeclaredMethod( "getUtilsProvider", new Class[0] );
-
- Java15Utils.Java15UtilsProvider provider = (Java15Utils.Java15UtilsProvider)m.invoke( null, new Object[0] );
-
- if ( provider != null ){
-
- Java15Utils.setProvider( provider );
- }
- }
- // System.out.println( "**** AEThread debug on ****" );
-
- }catch( Throwable e ){
- }
- }
-
public static void
dumpThreads()
{
diff --git a/org/gudy/azureus2/core3/util/Constants.java b/org/gudy/azureus2/core3/util/Constants.java
index 4ba8552..55c5267 100644
--- a/org/gudy/azureus2/core3/util/Constants.java
+++ b/org/gudy/azureus2/core3/util/Constants.java
@@ -85,8 +85,8 @@ Constants
public static String APP_NAME = "Vuze";
public static final String AZUREUS_NAME = "Azureus";
- public static final String AZUREUS_VERSION = "4.3.0.0"; //4.3.0.1_CVS
- public static final byte[] VERSION_ID = ("-" + "AZ" + "4300" + "-").getBytes(); //MUST be 8 chars long!
+ public static final String AZUREUS_VERSION = "4.3.0.6"; //4.3.0.7_CVS
+ public static final byte[] VERSION_ID = ("-" + "AZ" + "4306" + "-").getBytes(); //MUST be 8 chars long!
private static final boolean FORCE_NON_CVS = System.getProperty( "az.force.noncvs", "0" ).equals( "1" );
diff --git a/org/gudy/azureus2/core3/util/FileUtil.java b/org/gudy/azureus2/core3/util/FileUtil.java
index 902701f..bdbe10d 100644
--- a/org/gudy/azureus2/core3/util/FileUtil.java
+++ b/org/gudy/azureus2/core3/util/FileUtil.java
@@ -32,7 +32,6 @@ import java.util.regex.Matcher;
import java.util.regex.Pattern;
import org.gudy.azureus2.core3.config.COConfigurationManager;
-import org.gudy.azureus2.core3.logging.LogAlert;
import org.gudy.azureus2.core3.logging.LogEvent;
import org.gudy.azureus2.core3.logging.LogIDs;
import org.gudy.azureus2.core3.logging.Logger;
@@ -508,12 +507,7 @@ public class FileUtil {
if ( !file.delete()){
- Logger.log(
- new LogAlert(
- LogAlert.UNREPEATABLE,
- LogAlert.AT_ERROR,
- "Save of '" + file_name + "' fails - couldn't delete " + file.getAbsolutePath()));
-
+ Debug.out( "Save of '" + file_name + "' fails - couldn't delete " + file.getAbsolutePath());
}
}
@@ -523,11 +517,7 @@ public class FileUtil {
}else{
- Logger.log(
- new LogAlert(
- LogAlert.UNREPEATABLE,
- LogAlert.AT_ERROR,
- "Save of '" + file_name + "' fails - couldn't rename " + temp.getAbsolutePath() + " to " + file.getAbsolutePath()));
+ Debug.out( "Save of '" + file_name + "' fails - couldn't rename " + temp.getAbsolutePath() + " to " + file.getAbsolutePath());
}
}
@@ -536,8 +526,7 @@ public class FileUtil {
}catch( Throwable e ){
- Logger.log(new LogAlert(LogAlert.UNREPEATABLE, "Save of '"
- + file_name + "' fails", e));
+ Debug.out( "Save of '" + file_name + "' fails", e );
return( false );
@@ -549,8 +538,8 @@ public class FileUtil {
baos.close();
}
}catch( Exception e){
- Logger.log(new LogAlert(LogAlert.UNREPEATABLE, "Save of '"
- + file_name + "' fails", e));
+
+ Debug.out( "Save of '" + file_name + "' fails", e );
return( false );
}
@@ -653,9 +642,7 @@ public class FileUtil {
if ( res != null ){
- Logger.log(new LogAlert(LogAlert.UNREPEATABLE, LogAlert.AT_WARNING,
- "Backup file '" + backup_file
- + "' has been used for recovery purposes"));
+ Debug.out( "Backup file '" + backup_file + "' has been used for recovery purposes" );
// rewrite the good data, don't use backups here as we want to
// leave the original backup in place for the moment
@@ -708,9 +695,8 @@ public class FileUtil {
res = readResilientFile( file_name, parent_dir, file_name, 0, true, intern_keys );
if ( res != null ){
- Logger.log(new LogAlert(LogAlert.UNREPEATABLE, LogAlert.AT_WARNING,
- "File '" + file_name + "' has been partially recovered, "
- + "information may have been lost!"));
+
+ Debug.out( "File '" + file_name + "' has been partially recovered, information may have been lost!" );
}
}
@@ -759,10 +745,8 @@ public class FileUtil {
if ( fail_count == 1 ){
- // we only alert the user if at least one file was found and failed
- // otherwise it could be start of day when neither file exists yet
- Logger.log(new LogAlert(LogAlert.UNREPEATABLE, LogAlert.AT_ERROR,
- "Load of '" + original_file_name + "' fails, no usable file or backup"));
+ Debug.out( "Load of '" + original_file_name + "' fails, no usable file or backup" );
+
}else{
// drop this log, it doesn't really help to inform about the failure to
// find a .saving file
@@ -826,9 +810,7 @@ public class FileUtil {
if ( using_backup && !recovery_mode ){
- Logger.log(
- new LogAlert(LogAlert.UNREPEATABLE, LogAlert.AT_WARNING,
- "Load of '" + original_file_name + "' had to revert to backup file"));
+ Debug.out( "Load of '" + original_file_name + "' had to revert to backup file" );
}
return( res );
@@ -887,8 +869,8 @@ public class FileUtil {
if ( using_backup ){
if ( !recovery_mode ){
- Logger.log(new LogAlert(LogAlert.UNREPEATABLE, LogAlert.AT_ERROR,
- "Load of '" + original_file_name + "' fails, no usable file or backup"));
+
+ Debug.out( "Load of '" + original_file_name + "' fails, no usable file or backup" );
}
return( null );
@@ -1396,10 +1378,8 @@ public class FileUtil {
) {
if ( !from_file.exists()){
- Logger
- .log(new LogAlert(LogAlert.REPEATABLE, LogAlert.AT_ERROR,
- "renameFile: source file '" + from_file
- + "' doesn't exist, failing"));
+
+ Debug.out( "renameFile: source file '" + from_file + "' doesn't exist, failing" );
return( false );
}
@@ -1408,8 +1388,8 @@ public class FileUtil {
* If the destination exists, we only fail if requested.
*/
if (to_file.exists() && (fail_on_existing_directory || from_file.isFile() || to_file.isFile())) {
- Logger.log(new LogAlert(LogAlert.REPEATABLE, LogAlert.AT_ERROR,
- "renameFile: target file '" + to_file + "' already exists, failing"));
+
+ Debug.out( "renameFile: target file '" + to_file + "' already exists, failing" );
return( false );
}
@@ -1449,9 +1429,8 @@ public class FileUtil {
}
}catch( Throwable e ){
- Logger.log(new LogAlert(LogAlert.REPEATABLE,
- "renameFile: failed to rename file '" + ff.toString() + "' to '"
- + tf.toString() + "'", e));
+ Debug.out( "renameFile: failed to rename file '" + ff.toString() + "' to '"
+ + tf.toString() + "'", e );
break;
}
@@ -1465,9 +1444,8 @@ public class FileUtil {
// This might be important or not. We'll make it a debug message if we had a filter,
// or log it normally otherwise.
if (file_filter == null) {
- Logger.log(new LogAlert(LogAlert.REPEATABLE, LogAlert.AT_ERROR,
- "renameFile: files remain in '" + from_file.toString()
- + "', not deleting"));
+ Debug.out( "renameFile: files remain in '" + from_file.toString()
+ + "', not deleting");
}
else {
/* Should we log this? How should we log this? */
@@ -1477,8 +1455,7 @@ public class FileUtil {
}else{
if ( !from_file.delete()){
- Logger.log(new LogAlert(LogAlert.REPEATABLE, LogAlert.AT_ERROR,
- "renameFile: failed to delete '" + from_file.toString() + "'"));
+ Debug.out( "renameFile: failed to delete '" + from_file.toString() + "'" );
}
}
@@ -1495,14 +1472,12 @@ public class FileUtil {
try{
// null - We don't want to use the file filter, it only refers to source paths.
if ( !renameFile( tf, ff, false, null )){
- Logger.log(new LogAlert(LogAlert.REPEATABLE, LogAlert.AT_ERROR,
- "renameFile: recovery - failed to move file '" + tf.toString()
- + "' to '" + ff.toString() + "'"));
+ Debug.out( "renameFile: recovery - failed to move file '" + tf.toString()
+ + "' to '" + ff.toString() + "'" );
}
}catch( Throwable e ){
- Logger.log(new LogAlert(LogAlert.REPEATABLE,
- "renameFile: recovery - failed to move file '" + tf.toString()
- + "' to '" + ff.toString() + "'", e));
+ Debug.out("renameFile: recovery - failed to move file '" + tf.toString()
+ + "' to '" + ff.toString() + "'", e);
}
}
@@ -1552,9 +1527,8 @@ public class FileUtil {
fis = null;
if ( !from_file.delete()){
- Logger.log(new LogAlert(LogAlert.REPEATABLE,
- LogAlert.AT_ERROR, "renameFile: failed to delete '"
- + from_file.toString() + "'"));
+ Debug.out( "renameFile: failed to delete '"
+ + from_file.toString() + "'" );
throw( new Exception( "Failed to delete '" + from_file.toString() + "'"));
}
@@ -1565,9 +1539,8 @@ public class FileUtil {
}catch( Throwable e ){
- Logger.log(new LogAlert(LogAlert.REPEATABLE,
- "renameFile: failed to rename '" + from_file.toString()
- + "' to '" + to_file.toString() + "'", e));
+ Debug.out( "renameFile: failed to rename '" + from_file.toString()
+ + "' to '" + to_file.toString() + "'", e );
return( false );
@@ -1648,9 +1621,10 @@ public class FileUtil {
public static boolean
deleteWithRecycle(
- File file )
+ File file,
+ boolean force_no_recycle )
{
- if ( COConfigurationManager.getBooleanParameter("Move Deleted Data To Recycle Bin" )){
+ if ( COConfigurationManager.getBooleanParameter("Move Deleted Data To Recycle Bin" ) && !force_no_recycle ){
try{
final PlatformManager platform = PlatformManagerFactory.getPlatformManager();
diff --git a/org/gudy/azureus2/core3/util/TorrentUtils.java b/org/gudy/azureus2/core3/util/TorrentUtils.java
index 7847d6f..4168087 100644
--- a/org/gudy/azureus2/core3/util/TorrentUtils.java
+++ b/org/gudy/azureus2/core3/util/TorrentUtils.java
@@ -53,9 +53,12 @@ TorrentUtils
private static final String TORRENT_AZ_PROP_PLUGINS = "plugins";
public static final String TORRENT_AZ_PROP_OBTAINED_FROM = "obtained_from";
+ public static final String TORRENT_AZ_PROP_PEER_CACHE = "peer_cache";
+ public static final String TORRENT_AZ_PROP_PEER_CACHE_VALID = "peer_cache_valid";
private static final String MEM_ONLY_TORRENT_PATH = "?/\\!:mem_only:!\\/?";
+ private static final long PC_MARKER = RandomUtils.nextLong();
private static final List created_torrents;
private static final Set created_torrents_set;
@@ -399,9 +402,10 @@ TorrentUtils
public static void
delete(
- File torrent_file )
+ File torrent_file,
+ boolean force_no_recycle )
{
- if ( !FileUtil.deleteWithRecycle( torrent_file )){
+ if ( !FileUtil.deleteWithRecycle( torrent_file, force_no_recycle )){
Debug.out( "TorrentUtils::delete: failed to delete '" + torrent_file + "'" );
}
@@ -1106,6 +1110,61 @@ TorrentUtils
}
public static void
+ setPeerCache(
+ TOTorrent torrent,
+ Map pc )
+ {
+ Map m = getAzureusPrivateProperties( torrent );
+
+ try{
+ m.put( TORRENT_AZ_PROP_PEER_CACHE, pc );
+
+ }catch( Throwable e ){
+
+ Debug.printStackTrace(e);
+ }
+ }
+
+ public static void
+ setPeerCacheValid(
+ TOTorrent torrent )
+ {
+ Map m = getAzureusPrivateProperties( torrent );
+
+ try{
+ m.put( TORRENT_AZ_PROP_PEER_CACHE_VALID, new Long( PC_MARKER ));
+
+ }catch( Throwable e ){
+
+ Debug.printStackTrace(e);
+ }
+ }
+
+ public static Map
+ getPeerCache(
+ TOTorrent torrent )
+ {
+ try{
+ Map m = getAzureusPrivateProperties( torrent );
+
+ Long value = (Long)m.get( TORRENT_AZ_PROP_PEER_CACHE_VALID );
+
+ if ( value != null && value == PC_MARKER ){
+
+ Map pc = (Map)m.get( TORRENT_AZ_PROP_PEER_CACHE );
+
+ return( pc );
+ }
+
+ }catch( Throwable e ){
+
+ Debug.out( e );
+ }
+
+ return( null );
+ }
+
+ public static void
setFlag(
TOTorrent torrent,
int flag,
@@ -2472,14 +2531,7 @@ TorrentUtils
}
}
}
-
- public static String
- getMagnetURI(
- byte[] hash )
- {
- return( "magnet:?xt=urn:btih:" + Base32.encode( hash ));
- }
-
+
private static void
fireAttributeListener(
TOTorrent torrent,
diff --git a/org/gudy/azureus2/core3/util/UrlUtils.java b/org/gudy/azureus2/core3/util/UrlUtils.java
index 3482848..1ae646e 100644
--- a/org/gudy/azureus2/core3/util/UrlUtils.java
+++ b/org/gudy/azureus2/core3/util/UrlUtils.java
@@ -68,6 +68,69 @@ public class UrlUtils
new String[] { "'", "'" },
};
+ public static String
+ getMagnetURI(
+ byte[] hash )
+ {
+ return( "magnet:?xt=urn:btih:" + Base32.encode( hash ));
+ }
+
+ /**
+ * returns magnet uri if input is base 32 or base 16 encoded sha1 hash, null otherwise
+ * @param base_hash
+ * @return
+ */
+
+ public static String
+ normaliseMagnetURI(
+ String base_hash )
+ {
+ byte[] hash = decodeSHA1Hash( base_hash );
+
+ if ( hash != null ){
+
+ return( getMagnetURI( hash ));
+ }
+
+ return( null );
+ }
+
+ public static byte[]
+ decodeSHA1Hash(
+ String str )
+ {
+ if ( str == null ){
+
+ return( null );
+ }
+
+ str = str.trim();
+
+ byte[] hash = null;
+
+ try{
+ if ( str.length() == 40 ){
+
+ hash = ByteFormatter.decodeString( str );
+
+ }else if ( str.length() == 32 ){
+
+ hash = Base32.decode( str );
+ }
+ }catch( Throwable e ){
+ }
+
+ if ( hash != null ){
+
+ if ( hash.length != 20 ){
+
+ hash = null;
+ }
+ }
+
+ return( hash );
+ }
+
/**
* test string for possibility that it's an URL. Considers 40 byte hex
* strings as URLs
@@ -335,81 +398,17 @@ public class UrlUtils
throws IOException
{
- if ( Java15Utils.isAvailable()){
-
- if ( connect_timeout != -1 ){
-
- Java15Utils.setConnectTimeout( connection, (int)connect_timeout );
- }
-
- if ( read_timeout != -1 ){
-
- Java15Utils.setReadTimeout( connection, (int)read_timeout );
- }
-
- connection.connect();
-
- }else{
-
- // TODO: No read timeout support here yet...
-
- final AESemaphore sem = new AESemaphore( "URLUtils:cwt" );
-
- final Throwable[] res = { null };
-
- //long start = SystemTime.getMonotonousTime();
-
- if ( connect_pool.isFull()){
-
- Debug.out( "Connect pool is full, forcing timeout" );
+ if ( connect_timeout != -1 ){
- throw( new IOException( "Timeout" ));
- }
-
- connect_pool.run(
- new AERunnable()
- {
- public void
- runSupport()
- {
- try{
- connection.connect();
-
- }catch( Throwable e ){
-
- res[0] = e;
-
- }finally{
-
- sem.release();
- }
- }
- });
-
- boolean ok = sem.reserve( connect_timeout );
-
- //long duration = SystemTime.getMonotonousTime() - start;
-
- //System.out.println( connection.getURL() + ": time=" + duration + ", ok=" + ok );
+ Java15Utils.setConnectTimeout( connection, (int)connect_timeout );
+ }
- if ( ok ){
-
- Throwable error = res[0];
+ if ( read_timeout != -1 ){
- if ( error != null ){
-
- if ( error instanceof IOException ){
-
- throw((IOException)error);
- }
-
- throw( new IOException( Debug.getNestedExceptionMessage( error )));
- }
- }else{
-
- throw( new IOException( "Timeout" ));
- }
+ Java15Utils.setReadTimeout( connection, (int)read_timeout );
}
+
+ connection.connect();
}
private static String last_headers = COConfigurationManager.getStringParameter( "metasearch.web.last.headers", null );
diff --git a/org/gudy/azureus2/core3/util/protocol/magnet/Handler.java b/org/gudy/azureus2/core3/util/protocol/magnet/Handler.java
index b9d61a4..0945d0f 100644
--- a/org/gudy/azureus2/core3/util/protocol/magnet/Handler.java
+++ b/org/gudy/azureus2/core3/util/protocol/magnet/Handler.java
@@ -35,7 +35,11 @@ Handler
{
public URLConnection
openConnection(URL u)
- {
- return( new MagnetConnection( u ));
+ {
+ // some anti-virus apps blocking loopback connection we initially used
+ // in MagnetConnection so created variant based on direct communication to
+ // the magnet handler
+
+ return( new MagnetConnection2( u ));
}
}
diff --git a/org/gudy/azureus2/core3/util/protocol/magnet/MagnetConnection.java b/org/gudy/azureus2/core3/util/protocol/magnet/MagnetConnection.java
index f4f64dd..7dfec27 100644
--- a/org/gudy/azureus2/core3/util/protocol/magnet/MagnetConnection.java
+++ b/org/gudy/azureus2/core3/util/protocol/magnet/MagnetConnection.java
@@ -42,11 +42,11 @@ public class
MagnetConnection
extends HttpURLConnection
{
- protected Socket socket;
+ private Socket socket;
- protected static final String NL = "\015\012";
+ private static final String NL = "\r\n";
- protected String status = "";
+ private String status = "";
protected
MagnetConnection(
@@ -62,7 +62,7 @@ MagnetConnection
{
socket = new Socket( "127.0.0.1", MagnetURIHandler.getSingleton().getPort());
- String get = "GET " + "/download/" + getURL().toString().substring( 7 ) + " HTTP/1.0\r\n";
+ String get = "GET " + "/download/" + getURL().toString().substring( 7 ) + " HTTP/1.0" + NL + NL;
socket.getOutputStream().write( get.getBytes());
diff --git a/org/gudy/azureus2/core3/util/protocol/magnet/MagnetConnection.java b/org/gudy/azureus2/core3/util/protocol/magnet/MagnetConnection2.java
similarity index 61%
copy from org/gudy/azureus2/core3/util/protocol/magnet/MagnetConnection.java
copy to org/gudy/azureus2/core3/util/protocol/magnet/MagnetConnection2.java
index f4f64dd..c7287ba 100644
--- a/org/gudy/azureus2/core3/util/protocol/magnet/MagnetConnection.java
+++ b/org/gudy/azureus2/core3/util/protocol/magnet/MagnetConnection2.java
@@ -22,11 +22,15 @@
package org.gudy.azureus2.core3.util.protocol.magnet;
+import java.io.ByteArrayInputStream;
import java.io.IOException;
import java.io.InputStream;
+import java.io.OutputStream;
+import java.io.PipedInputStream;
+import java.io.PipedOutputStream;
import java.net.HttpURLConnection;
-import java.net.Socket;
import java.net.URL;
+import java.util.*;
import org.gudy.azureus2.core3.util.Debug;
@@ -39,17 +43,18 @@ import com.aelitis.net.magneturi.MagnetURIHandler;
*/
public class
-MagnetConnection
+MagnetConnection2
extends HttpURLConnection
{
- protected Socket socket;
+ private static final String NL = "\r\n";
- protected static final String NL = "\015\012";
-
- protected String status = "";
+ private OutputStream output_stream;
+ private InputStream input_stream;
+
+ private LinkedList<String> status_list = new LinkedList<String>();
protected
- MagnetConnection(
+ MagnetConnection2(
URL _url )
{
super( _url );
@@ -59,23 +64,25 @@ MagnetConnection
connect()
throws IOException
- {
- socket = new Socket( "127.0.0.1", MagnetURIHandler.getSingleton().getPort());
-
- String get = "GET " + "/download/" + getURL().toString().substring( 7 ) + " HTTP/1.0\r\n";
+ {
+ String get = "/download/" + getURL().toString().substring( 7 ) + " HTTP/1.0" + NL + NL;
- socket.getOutputStream().write( get.getBytes());
+ PipedOutputStream pos = new PipedOutputStream();
+ PipedInputStream pis = new PipedInputStream();
- socket.getOutputStream().flush();
+ pis.connect( pos );
+
+ input_stream = pis;
+ output_stream = pos;
+
+ MagnetURIHandler.getSingleton().process( get, new ByteArrayInputStream(new byte[0]), pos );
}
public InputStream
getInputStream()
throws IOException
- {
- InputStream is = socket.getInputStream();
-
+ {
String line = "";
byte[] buffer = new byte[1];
@@ -85,7 +92,7 @@ MagnetConnection
while(true){
- int len = is.read( buffer );
+ int len = input_stream.read( buffer );
if ( len == -1 ){
@@ -112,8 +119,20 @@ MagnetConnection
line = line.substring( 9 );
line = line.trim();
-
- status = Character.toUpperCase( line.charAt(0)) + line.substring(1);
+
+ synchronized( status_list ){
+
+ String str = Character.toUpperCase( line.charAt(0)) + line.substring(1);
+
+ if ( status_list.size() == 0 ){
+
+ status_list.addLast( str );
+
+ }else if ( !status_list.getLast().equals( str )){
+
+ status_list.addLast( str );
+ }
+ }
}
line = "";
@@ -121,7 +140,7 @@ MagnetConnection
}
}
- return( is );
+ return( input_stream );
}
public int
@@ -133,7 +152,21 @@ MagnetConnection
public String
getResponseMessage()
{
- return( status );
+ synchronized( status_list ){
+
+ if ( status_list.size() == 0 ){
+
+ return( "" );
+
+ }else if ( status_list.size() == 1 ){
+
+ return( status_list.get( 0 ));
+
+ }else{
+
+ return( status_list.removeFirst());
+ }
+ }
}
public boolean
@@ -146,7 +179,15 @@ MagnetConnection
disconnect()
{
try{
- socket.close();
+ output_stream.close();
+
+ }catch( Throwable e ){
+
+ Debug.printStackTrace(e);
+ }
+
+ try{
+ input_stream.close();
}catch( Throwable e ){
diff --git a/org/gudy/azureus2/internat/MessagesBundle.properties b/org/gudy/azureus2/internat/MessagesBundle.properties
index 84327e7..28c236d 100644
--- a/org/gudy/azureus2/internat/MessagesBundle.properties
+++ b/org/gudy/azureus2/internat/MessagesBundle.properties
@@ -122,6 +122,7 @@ PeersView.pieces=Pieces
PeersView.%=%
PeersView.downloadspeed=Down Speed
PeersView.download=Down
+PeersView.download.info=Your overall download from the peer.
PeersView.I2=I (Interesting for the peer)
PeersView.I2.info=Is the peer interested in what you have?
PeersView.C2=C (Choking the peer)
@@ -760,7 +761,7 @@ health.explain.blue=when seeding, it means that you're not yet connected to any
health.explain.yellow=means that the tracker is ok, you're connected to peers, but you don't have any remote connection.\nYou may have a NAT problem if your torrents stay on yellow status all the time
health.explain.green=means that everything is going fine.
ConfigView.section.style.alwaysRefreshMyTorrents=Always refresh My Torrents
-ConfigView.section.style.alwaysRefreshMyTorrents.tooltip=This option will refresh the My Torrents view even if not displayed (usefull for some mirc plugins)
+ConfigView.section.style.alwaysRefreshMyTorrents.tooltip=This option will refresh the My Torrents view even if not displayed (useful for some mirc plugins)
#
#2.0.7.0
#
@@ -835,7 +836,7 @@ ConfigView.label.disconnetseed.tooltip=When seeding a torrent, disconnect any cl
ConfigView.label.ignoreCase=Ignore Case
ConfigView.label.ignoreSeeds=Ignore torrents with at least
ConfigView.label.importdirectory=Import Directory
-ConfigView.label.minPeersToBoostNoSeeds.tooltip=Any torrents with no seeds and having less peers than you specify\nwill be towards the bottom of the queue.
+ConfigView.label.minPeersToBoostNoSeeds.tooltip=Any torrents with no seeds and having less peers than you specify\nwill be moved towards the bottom of the queue.
ConfigView.label.minPeersToBoostNoSeeds=Lower Seeding Rank for torrents with no seeds and less than
ConfigView.label.minSeedingTime.tooltip=Seeding Ranks can fluctuate often in a short period time, sometimes causing the torrent to automatically start, only to be stopped & queued immediately afterwards.\nThis alleviates the problem by forcing the torrent to stay seeding for a given period of time. You can still stop it manually if you want.
ConfigView.label.minSeedingTime=Minimum seeding time in seconds
@@ -868,13 +869,13 @@ ConfigView.label.seeding.firstPriority.seedingMinutes=An elapsed time since chan
ConfigView.label.seeding.firstPriority.DLMinutes=An elapsed time since the start of downloading
ConfigView.label.seeding.numPeersAsFullCopy.tooltip=By pretending there is 1 full copy per X peers, you reduce the rank of torrents with high peer counts.\nMost likely, torrents with high peer counts also have high traffic.\nThis does not change any '# of seeds' displays.
ConfigView.label.seeding.numPeersAsFullCopy=Pretend there's 1 full copy for every\n(0 : No Pretending)
-ConfigView.label.seeding.preferLargerSwarms.tooltip=If you are mainly seeding torrents with peers that are "stuck", prefering larger swarms makes sense\nWhen you are mainly seeding torrents with high availability, prefering smaller swarms makes sense.
+ConfigView.label.seeding.preferLargerSwarms.tooltip=If you are mainly seeding torrents with peers that are "stuck", preferring larger swarms makes sense\nWhen you are mainly seeding torrents with high availability, preferring smaller swarms makes sense.
ConfigView.label.seeding.preferLargerSwarms=When torrents have the same rank, prefer larger swarms
ConfigView.label.seeding.rankType.none.tooltip=Order based on # column
ConfigView.label.seeding.rankType.none=None
ConfigView.label.seeding.rankType.peer.tooltip=more peers and fewer seeds = higher rank\nThis ranking minimizes the number of torrents that need to be kept active to maximize the upload
ConfigView.label.seeding.rankType.peer=Weighted Peer Count
-ConfigView.label.seeding.rankType.peerSeed.options=Seeds:Peers Ratio Options
+ConfigView.label.seeding.rankType.peerSeed.options=Peers:Seeds Ratio Options
ConfigView.label.seeding.rankType.peerSeed.tooltip=Higher Ratio = Higher Rank
ConfigView.label.seeding.rankType.peerSeed=Peers:Seed Ratio
ConfigView.label.seeding.rankType.seed.fallback=Fallback to Peers:Seed Ratio after\n(0 : Never Fallback)
@@ -963,7 +964,7 @@ GeneralView.label.in_swarm=in swarm
ManagerItem.initializing=Initializing
AlertMessageBox.error=Error
AlertMessageBox.warning=Warning
-AlertMessageBox.comment=Information
+AlertMessageBox.comment=Comment
AlertMessageBox.information=Information
AlertMessageBox.unread=You have unread alert messages - click here to display them.
SharedPortServer.alert.selectorfailed=Failed to establish listener for incoming data.\nCheck firewall settings are permitting java(w).exe to act as a 'server'
@@ -1234,8 +1235,6 @@ MyTrackerView.badnat.info=Seeds/Peers that have failed a NAT check, if enabled
ConfigView.section.tracker.natchecktimeout=Check timeout (secs)
ConfigView.section.file.perf.cache.enable=Enable disk cache
ConfigView.section.file.perf.cache.size=Size of cache in %1
-#Removed
-#MyTorrentsView.menu.setSpeed=Set Upload Speed
MainWindow.menu.transfers=T&ransfers
MainWindow.menu.transfers.startalltransfers=St&art All
MainWindow.menu.transfers.stopalltransfers=St&op All
@@ -1841,9 +1840,9 @@ azinstancehandler.alert.portclash=Port clash detected on LAN: %1 already in use
ConfigView.section.transfer.lan=LAN
ConfigView.section.transfer.lan.tooltip=LAN-specific Settings
ConfigView.section.transfer.lan.uploadrate=KB/s LAN max upload speed [0: unlimited]
-ConfigView.section.transfer.lan.uploadrate.tooltip=Peers connections within the same internal LAN have a separete upload rate limit.
+ConfigView.section.transfer.lan.uploadrate.tooltip=Peers connections within the same internal LAN have a separate upload rate limit.
ConfigView.section.transfer.lan.downloadrate=KB/s LAN max download speed [0: unlimited]
-ConfigView.section.transfer.lan.downloadrate.tooltip=Peers connections within the same internal LAN have a separete download rate limit.
+ConfigView.section.transfer.lan.downloadrate.tooltip=Peers connections within the same internal LAN have a separate download rate limit.
TorrentOptionsView.title.short=Options
TorrentOptionsView.title.full=Options
@@ -1991,7 +1990,7 @@ TableColumn.header.date_added.info=Date the torrent was added
ConfigView.section.file.hashchecking.smallestfirst=Recheck smallest downloads first
-platform.win32.baddll.info=Vuze has detected the presence of '%1'. This is part of '%2' and has been known to cause severe problems such as application crashes and high CPU usage. If you encounter these then please uninstall the software or configure it to not affect Azureus.
+platform.win32.baddll.info=Vuze has detected the presence of '%1'. This is part of '%2' and has been known to cause severe problems such as application crashes and high CPU usage. If you encounter these then please uninstall the software or configure it to not affect Vuze.
platform.win32.baddll.niphk=Norman Anti-Virus
platform.win32.baddll.nvappfilter=NVidia Firewall
platform.win32.baddll.netdog=Armor2net Personal Firewall
@@ -2159,13 +2158,13 @@ ConfigView.label.openmytorrents=Open 'My Torrents' on startup
ConfigView.label.open_transfer_bar_on_start=Open Transfer Bar on startup
ConfigView.section.style.DNDalwaysInIncomplete=Always show torrents with 'Do Not Download' files in Incomplete section of My Torrents
-OpenTorrentWindow.mb.noGlobalDestDir.title=Destination Directory
+OpenTorrentWindow.mb.noGlobalDestDir.title=Destination Directory not found
OpenTorrentWindow.mb.noGlobalDestDir.text=The destination directory '%1' is invalid.
OpenTorrentWindow.mb.noDestDir.title=Destination Directory not found
OpenTorrentWindow.mb.noDestDir.text=The destination directory '%1' for torrent '%2' does not exist or is invalid.
-OpenTorrentWindow.mb.notValid.title=Open Torrent
+OpenTorrentWindow.mb.notValid.title=Open Torrent Failed
OpenTorrentWindow.mb.notValid.text=Could not open torrent '%1'. If you are opening in seeding mode, please make sure the torrent data files exist.
-OpenTorrentWindow.mb.notTorrent.title=Open Torrent
+OpenTorrentWindow.mb.notTorrent.title=Open Torrent Failed
OpenTorrentWindow.mb.notTorrent.text=Could not open '%1'. It doesn't appear to be a .torrent file.\n\nSome of the data received:\n%2
ConfigView.label.pause.downloads.on.exit=Pause downloads on exit
@@ -2296,7 +2295,7 @@ SpeedTestWizard.finish.panel.max.download=Max download :
SpeedTestWizard.finish.panel.enabled=enabled
SpeedTestWizard.finish.panel.disabled=disabled
-SpeedTestWizard.abort.message.scheduled.in=test scheduled in ... %1 seconds"
+SpeedTestWizard.abort.message.scheduled.in=test scheduled in ... %1 seconds
SpeedTestWizard.abort.message.unsupported.type=Unsupported test type!!!!
SpeedTestWizard.abort.message.manual.abort=Manually aborted
SpeedTestWizard.abort.message.scheduling.failed=Scheduling of the test failed
@@ -2357,12 +2356,7 @@ TableColumn.header.AzProduct=From
TableColumn.header.MediaThumb=Media
TableColumn.header.ProgressETA=Progress
-#TableColumn.header.size={MyTorrentsView.size}
-#TableColumn.header.up={MyTorrentsView.up}
-#TableColumn.header.date_added={MyTorrentsView.date_added}
-#TableColumn.header.name={MyTorrentsView.name}
TableColumn.header.name.ext=File Type: %1
-#TableColumn.header.shareRatio={MyTorrentsView.shareRatio}
TableColumn.header.DateCompleted={TableColumn.header.date_completed}
v3.MainWindow.tab.home=Dashboard
@@ -2453,7 +2447,6 @@ splash.initializeUIElements=Initializing UI Elements
ConfigView.section.transfer.autospeedbeta=Auto-Speed-Beta
-#
ConfigView.section.ipfilter.peerblocking.group=Peer Blocking
ConfigView.section.ipfilter.autoload.group=Auto Loading
ConfigView.section.ipfilter.autoload.file=IP filter file to autoload
@@ -2687,20 +2680,12 @@ button.columnsetup.tooltip=Column Setup
v3.activity.remove.title=Delete Notification
v3.activity.remove.text=Are you sure you want to delete this Notification?\n%1
-#v3.MainWindow.menu.view.configuration=Preferences
-#v3.MainWindow.menu.view.configuration.keybinding=Meta+,
-
v3.MainWindow.menu.file.closewindow=Close
v3.MainWindow.menu.file.closewindow.keybinding=Meta+W
Menu.show.torrent.menu=Show the Torrents menu
Menu.show.torrent.menu.tooltip=Shows the Torrents menu on the top application menu bar
-#v3.TorrentOptionsView.title.short=Preferences
-#v3.TorrentOptionsView.title.full=Preferences
-#v3.ConfigView.title.short=Preferences
-#v3.ConfigView.title.full=Preferences
-
Views.plugins.aznetstatus.title=Network Status
plugin.aznetstatus.pingtarget=Ping/trace route target
@@ -3032,7 +3017,6 @@ Search.menu.engines=Templates
Wizard.Subscription.title=Subscribe
Wizard.Subscription.optin.title=Enable Subscriptions
-#what you've watched? Discover more with a single click...
Wizard.Subscription.subscribe.title=Available Subscriptions
Wizard.Subscription.create.title=Create New Subscription
Button.search=Search
@@ -3146,7 +3130,7 @@ v3.MainWindow.menu.view.statusbar=Status Bar
Subscription.menu.dirtyall=Mark All Results As Unread
-configureWizard.file.message3=Vuze will downloaded files in a specific folder, you can choose this folder here:
+configureWizard.file.message3=Vuze will download files in a specific folder, you can choose this folder here:
v3.deleteContent.applyToAll=Apply action to all %1 selected entries
@@ -3217,7 +3201,7 @@ Pieces.column.#.info=Piece Number
Peers.column.%=%
Peers.column.%.info=Percentage of the torrent the peer has downloaded so far
TableColumn.header.download.info=Amount of data received from the peer
-TableColumn.header.upload.info=Amount of data we have sent to the epeer
+TableColumn.header.upload.info=Amount of data we have sent to the peer
TableColumn.header.downloadspeed.info=Rate at which we are are getting from the peer
TableColumn.header.uploadspeed.info=Rate at which we are sending data to the peer
TableColumn.header.lan.info=Flag indicating if the peer is on your LAN
@@ -3546,5 +3530,11 @@ ClientStats.column.name={TableColumn.header.name}
MainWindow.menu.view.clientstats={ClientStats.title.full}
Scrape.status.cached=Cached scrape
+network.ipv6.enable.support=Enable IPv6 support
+ConfigView.section.plugins.magnetplugin=Magnet URI Handler
+MagnetPlugin.use.lookup.service=Use the Vuze secondary lookup service if magnet lookup via DHT fails
+MagnetPlugin.report.secondarylookup=Trying secondary lookup service
+MagnetPlugin.report.secondarylookup.ok=Secondary lookup succeeded
+MagnetPlugin.report.secondarylookup.fail=Secondary lookup failed: no sources found
#PLEASE LEAVE ME AT VERY BOTTOM!
diff --git a/org/gudy/azureus2/internat/MessagesBundle_ar_SA.properties b/org/gudy/azureus2/internat/MessagesBundle_ar_SA.properties
index 8c006a4..c8dcbb3 100644
--- a/org/gudy/azureus2/internat/MessagesBundle_ar_SA.properties
+++ b/org/gudy/azureus2/internat/MessagesBundle_ar_SA.properties
@@ -1,3 +1,4 @@
+#There is a plugin to help with internationalizing these bundles at http://azureus.sourceforge.net/plugin_list.php
MainWindow.menu.file.open.torrent=\u0645\u0644\u0641 .torrent
Main.parameter.usage=Usage : java org.gudy.azureus2.cl.Main [parameters] "file.torrent" "save path"
Main.parameter.maxUploads=\u0627\u0644\u062d\u062f \u0627\u0644\u0623\u0642\u0635\u0649 \u0644\u0644\u0625\u0631\u0633\u0627\u0644 \u0627\u0644\u0645\u062a\u0648\u0627\u0641\u0642
@@ -325,7 +326,6 @@ MyTorrentsView.menu.removeand.deletedata=Delete Data
MyTorrentsView.menu.removeand.deleteboth=Delete Both
deletedata.title=!!! Warning !!!
deletedata.message1=You are about to delete the DATA from :\n
-deletedata.message2=\nAre you sure you want to proceed?
MainWindow.menu.file.configure=Configuration Wizard
configureWizard.title=Configuration Wizard
configureWizard.welcome.title=Welcome to the Vuze Configuration Wizard
@@ -446,7 +446,6 @@ ConfigView.section.tracker=Tracker
ConfigView.section.tracker.pollinterval=Tracker client poll interval (secs)
ConfigView.section.tracker.publishenable=Publish torrent details to ""
ConfigView.section.tracker.ip=External tracker IP address
-MainWindow.menu.help.faq=FAQ
ConfigView.section.style.enableXPStyle=Enable XP style (needs restart)
IPChecker.external.service.dyndns.name=DynDNS
IPChecker.external.service.dyndns.url=http://www.dyndns.org/
@@ -482,11 +481,16 @@ splash.loadingImages=Loading Images
splash.initializeGui=Initializing Main Window
splash.openViews=Opening Views
configureWizard.nat.tooManyPorts=Too many ports to test (9 max)
-PeerSocket.unknown=Unknown
MyTorrentsView.menu.publish=Publish...
MyTrackerView.status.published=Published
MainWindow.menu.file.open.torrentnodefault=.torrent File (No default Save)
ConfigView.section.file.decoder.label=Default torrent encoding when\nselection required
+#
+# Tooltips
+#
+#
+# 2.0.4.4
+#
ConfigView.section.style.reOrderDelay=Re Order tables every N GUI update(s)
GeneralView.label.updatein.querying=querying...
MyTorrentsView.menu.editTableColumns=Choose the columns to display
@@ -504,22 +508,18 @@ MyTorrentsView.menu.moveEnd=Bottom
ConfigView.label.moveonlyusingdefaultsave=if in default data dir
ConfigView.label.moveonlyusingdefaultsave.tooltip=Move only if the .torrent is in the default data dir
MainWindow.menu.view.stats=Statistics
+#
+#2.0.7.0
+#
+#
+# 2.0.7.x
+#
TableColumn.header.availability=\u0627\u0644\u062a\u0648\u0641\u0651\u0631
+#
+# > 2.0.8.0
+#
ConfigView.section.tracker.publishenabledetails=Publish torrent file and peer details
ConfigView.label.overrideip=\u062a\u062c\u0627\u0648\u0632 \u0625\u0631\u0633\u0627\u0644 \u0627\u0644\u0622\u064a \u0628\u064a \u0644\u0644\u0645\u062a\u0642\u0641\u0651\u064a\n - NAT \u0642\u062f \u062a\u062d\u062a\u0627\u062c\u0647 \u0625\u0630\u0627 \u0643\u0646\u062a \u062a\u0633\u062a\u062e\u062f\u0645
-# The remaining keys were not in MessagesBundle.properties
-configureWizard.nat.serverhigh=High Port
-configureWizard.nat.serverlow=Low Port
-SystemTray.menu.stopalldownloads=Stop All Downloads
-ConfigView.label.defaultTorrentPath=Torrent files directory
-MyTorrentsView.menu.lockstartstop=Disable Seeding Start / Stop Rules
-ConfigView.label.moveCompletedPath=Completed files directory
-ConfigView.label.serverportshared=Use a single shared incoming port for all torrents
-ConfigView.label.stopRatio=Stop seeding when share ratio reaches
-ConfigView.label.serverportrange=Incoming port range
-MainWindow.about.internet.featurerequests=\u0637\u0644\u0628 \u0645\u0645\u064a\u0632\u0627\u062a
-ConfigView.label.serverportlow=\u0627\u0644\u0645\u0646\u0641\u0630 \u0627\u0644\u0623\u062f\u0646\u0649 \u0644\u0644\u062e\u0627\u062f\u0645
-MyTorrentsView.menu.lockpriority=Disable Auto-Priority
-ConfigView.label.maxclients=\u0627\u0644\u0631\u0642\u0645 \u0627\u0644\u0623\u0642\u0635\u0649 \u0644\u0644\u0627\u062a\u0635\u0627\u0644\u0627\u062a \u0644\u0643\u0644 torrent (0 : \u063a\u064a\u0631 \u0645\u062c\u062f\u0648\u062f)
-ConfigView.label.serverporthigh=\u0627\u0644\u0645\u0646\u0641\u0630 \u0627\u0644\u0623\u0642\u0635\u0649 \u0644\u0644\u062e\u0627\u062f\u0645
-ConfigView.label.slowconnect=\u0627\u0644\u0627\u062a\u0635\u0627\u0644 \u0628\u0628\u0637\u0621 \u0644\u0644\u0627\u062a\u0635\u0627\u0644\u0627\u062a \u0628\u0627\u0644\u0646\u0638\u064a\u0631\n - \u0644\u0644\u0630\u064a\u0646 \u064a\u0639\u0627\u0646\u0648\u0646 \u0645\u0646 \u0645\u0634\u0627\u0643\u0644 \u0641\u064a \u0641\u0635\u0644 \u0627\u0644\u0627\u062a\u0635\u0627\u0644
+# Used for peers which we can't determine.
+PeerSocket.unknown=Unknown
+MainWindow.menu.help.faq=FAQ
diff --git a/org/gudy/azureus2/internat/MessagesBundle_bg_BG.properties b/org/gudy/azureus2/internat/MessagesBundle_bg_BG.properties
index ac87d3c..a921c9e 100644
--- a/org/gudy/azureus2/internat/MessagesBundle_bg_BG.properties
+++ b/org/gudy/azureus2/internat/MessagesBundle_bg_BG.properties
@@ -736,7 +736,6 @@ ConfigView.section.style.alwaysRefreshMyTorrents.tooltip=\u0422\u043e\u0432\u043
#
#2.0.7.0
#
-ConfigView.section.style.verticaloffset=Graphics Vertical Offset (GTK \u043f\u043e\u043f\u0440\u0430\u0432\u043a\u0430)
security.certtruster.title=\u041f\u0440\u0435\u0434\u0443\u043f\u0440\u0435\u0436\u0434\u0435\u043d\u0438\u0435 \u0437\u0430 \u0441\u0438\u0433\u0443\u0440\u043d\u043e\u0441\u0442\u0442\u0430 \u0437\u0430 \u0441\u0435\u0440\u0442\u0438\u0444\u0438\u043a\u0430\u0442
security.certtruster.intro=\u0421\u0435\u0440\u0442\u0438\u0444\u0438\u043a\u0430\u0442\u044a\u0442 \u0435 \u0438\u0437\u0434\u0430\u0434\u0435\u043d \u043e\u0442 \u043e\u0440\u0433\u0430\u043d\u0438\u0437\u0430\u0446\u0438\u044f, \u043d\u0430 \u043a\u043e\u044f\u0442\u043e \u0441\u0435 \u043d\u044f\u043c\u0430 \u0434\u043e\u0432\u0435\u0440\u0438\u0435
security.certtruster.resource=\u0420\u0435\u0441\u0443\u0440\u0441:
@@ -1962,13 +1961,8 @@ MainWindow.menu.view.iconbar=\u041b\u0435\u043d\u0442\u0430 \u0441 \u0438\u043d\
MyTorrentsView.menu.rename=\u041f\u0440\u0435\u0438\u043c\u0435\u043d\u0443\u0432\u0430\u043d\u0435
MyTorrentsView.menu.rename.displayed=\u041f\u0440\u0435\u0438\u043c\u0435\u043d\u0443\u0432\u0430\u043d\u0435 \u043d\u0430 \u043f\u043e\u043a\u0430\u0437\u0430\u043d\u043e\u0442\u043e \u0438\u043c\u0435
MyTorrentsView.menu.rename.save_path=\u041f\u0440\u0435\u0438\u043c\u0435\u043d\u0443\u0432\u0430\u043d\u0435 \u043d\u0430 \u043f\u044a\u0442\u044f \u0437\u0430 \u0437\u0430\u043f\u0430\u0437\u0432\u0430\u043d\u0435
-MyTorrentsView.menu.rename.displayed_and_save_path=\u041f\u0440\u0435\u0438\u043c\u0435\u043d\u0443\u0432\u0430\u043d\u0435 \u043d\u0430 \u0434\u0432\u0435\u0442\u0435
MyTorrentsView.menu.rename.displayed.enter.title=\u041f\u0440\u0435\u0438\u043c\u0435\u043d\u0443\u0432\u0430\u043d\u0435 \u043d\u0430 \u043f\u043e\u043a\u0430\u0437\u0430\u043d\u043e\u0442\u043e \u0438\u043c\u0435
MyTorrentsView.menu.rename.displayed.enter.message=\u0412\u044a\u0432\u0435\u0436\u0434\u0430\u043d\u0435 \u043d\u0430 \u043d\u043e\u0432\u043e \u0438\u043c\u0435 \u0437\u0430 \u043f\u043e\u043a\u0430\u0437\u0432\u0430\u043d\u0435 \u0437\u0430 \u0442\u043e\u0432\u0430 \u0441\u0432\u0430\u043b\u044f\u043d\u0435.\n\u041f\u0440\u0438 \u043d\u0435\u0432\u044a\u0432\u0435\u0434\u0435\u043d \u0442\u0435\u043a\u0441\u0442 \u0441\u0435 \u0438\u0437\u043f\u043e\u043b\u0437\u0432\u0430 \u043e\u0440\u0438\u0433\u0438\u043d\u0430\u043b\u043d\u043e\u0442\u043e \u0438\u043c\u0435.
-MyTorrentsView.menu.rename.save_path.enter.title=\u041f\u0440\u0435\u0438\u043c\u0435\u043d\u0443\u0432\u0430\u043d\u0435 \u043d\u0430 \u043f\u044a\u0442\u044f \u0437\u0430 \u0437\u0430\u043f\u0430\u0437\u0432\u0430\u043d\u0435
-MyTorrentsView.menu.rename.save_path.enter.message=\u0412\u044a\u0432\u0435\u0436\u0434\u0430\u043d\u0435 \u043d\u0430 \u043d\u043e\u0432\u043e \u0438\u043c\u0435 \u043d\u0430 \u043f\u044a\u0442\u044f \u0437\u0430 \u0437\u0430\u043f\u0430\u0437\u0432\u0430\u043d\u0435 \u0437\u0430 \u0442\u043e\u0432\u0430 \u0441\u0432\u0430\u043b\u044f\u043d\u0435.\n\u041f\u0440\u0438 \u043d\u0435\u0432\u044a\u0432\u0435\u0434\u0435\u043d \u0442\u0435\u043a\u0441\u0442 \u0441\u0435 \u0438\u0437\u043f\u043e\u043b\u0437\u0432\u0430 \u043f\u043e\u043a\u0430\u0437\u0430\u043d\u043e\u0442\u043e \u0438\u043c\u0435 \u043d\u0430 \u0441\u0432\u0430\u043b\u044f\u043d\u0435\u0442\u043e.
-MyTorrentsView.menu.rename.displayed_and_save_path.enter.title=\u041f\u0440\u0435\u0438\u043c\u0435\u043d\u0443\u0432\u0430\u043d\u0435 \u043d\u0430 \u0441\u0432\u0430\u043b\u044f\u043d\u0435\u0442\u043e
-MyTorrentsView.menu.rename.displayed_and_save_path.enter.message=\u0412\u044a\u0432\u0435\u0436\u0434\u0430\u043d\u0435 \u043d\u0430 \u043d\u043e\u0432\u043e \u0438\u043c\u0435 \u0437\u0430 \u0442\u043e\u0432\u0430 \u0441\u0432\u0430\u043b\u044f\u043d\u0435.\n\u041f\u0440\u0438 \u043d\u0435\u0432\u044a\u0432\u0435\u0434\u0435\u043d \u0442\u0435\u043a\u0441\u0442 \u0441\u0435 \u0438\u0437\u043f\u043e\u043b\u0437\u0432\u0430\u0442 \u043e\u0440\u0438\u0433\u0438\u043d\u0430\u043b\u043d\u0438\u0442\u0435 \u0441\u0442\u043e\u0439\u043d\u043e\u0441\u0442\u0438.
MyTorrentsView.menu.edit_comment=\u0420\u0435\u0434\u0430\u043a\u0446\u0438\u044f \u043d\u0430 \u043a\u043e\u043c\u0435\u043d\u0442\u0430\u0440
MyTorrentsView.menu.edit_comment.enter.title=\u0420\u0435\u0434\u0430\u043a\u0446\u0438\u044f \u043d\u0430 \u043a\u043e\u043c\u0435\u043d\u0442\u0430\u0440
MyTorrentsView.menu.edit_comment.enter.message=\u0412\u044a\u0432\u0435\u0436\u0434\u0430\u043d\u0435 \u043d\u0430 \u043a\u043e\u043c\u0435\u043d\u0442\u0430\u0440 \u0437\u0430 \u0442\u043e\u0432\u0430 \u0441\u0432\u0430\u043b\u044f\u043d\u0435.
@@ -2173,9 +2167,6 @@ v3.MainWindow.menu.advanced=\u0420&\u0430\u0437\u0448\u0438\u0440\u0435\u043d\u0
v3.MainWindow.menu.view.searchbar=\u041b\u0435\u043d\u0442\u0430 \u0437\u0430 \u0442\u044a\u0440\u0441\u0435\u043d\u0435
v3.MainWindow.menu.view.tabbar=\u041b\u0435\u043d\u0442\u0430 \u0437\u0430 \u0440\u0430\u0437\u0434\u0435\u0300\u043b\u0438
v3.MainWindow.currentDL=\u0422\u0435\u043a\u0443\u0449\u043e \u0441\u0432\u0430\u043b\u044f\u043d\u0435
-v3.MainWindow.recentDL=\u041f\u043e\u0441\u043b\u0435\u0434\u043d\u0438 %1 \u0441\u0432\u0430\u043b\u044f\u043d\u0438\u044f
-v3.MainWindow.recentDL.library=\u041c\u0435\u0441\u0442\u043d\u0430 \u0431\u0438\u0431\u043b\u0438\u043e\u0442\u0435\u043a\u0430 >>
-v3.MainWindow.myMedia.noneSelected=\u041c\u0435\u0441\u0442\u043d\u043e \u0438\u043c\u0430 %1 \u043f\u0430\u0440\u0447\u0435\u0442\u0430 \u0441\u044a\u0434\u044a\u0440\u0436\u0430\u043d\u0438\u0435.\n%2 \u043e\u0442 \u0442\u044f\u0445 \u0441\u0430 \u0437\u0430\u0432\u044a\u0440\u0448\u0435\u043d\u0438.\n\n\u0417\u0430 \u0438\u043d\u0444\u043e\u0440\u043c\u0430\u0446\u0438\u044f \u0437\u0430 \u0441\u044a\u0434\u044a\u0440\u0436\u0430\u043d\u0438\u0435\u0442\u043e \u0434\u0430 \u0441\u0435 \u043d\u0430\u0442\u0438\u0441\u043d\u0435 \u0440\u0435\u0434
v3.MainWindow.button.stream=\u041f\u043e\u0442\u043e\u043a
v3.MainWindow.button.stop=\u0421\u043f\u0438\u0440\u0430\u043d\u0435
v3.MainWindow.button.start=\u0417\u0430\u043f\u043e\u0447\u0432\u0430\u043d\u0435
@@ -2186,7 +2177,6 @@ v3.MainWindow.button.comment=\u041a\u043e\u043c\u0435\u043d\u0442\u0430\u0440
v3.MainWindow.button.viewdetails=\u041f\u043e\u0434\u0440\u043e\u0431\u043d\u043e\u0441\u0442\u0438
v3.MainWindow.button.play=\u0418\u0437\u043f\u044a\u043b\u043d\u0435\u043d\u0438\u0435
v3.MainWindow.button.cancel=\u041e\u0442\u043a\u0430\u0437
-v3.MainWindow.button.sendtofriend=\u0421\u043f\u043e\u0434\u0435\u043b\u044f\u043d\u0435
v3.MainWindow.button.preview=\u041e\u043d\u0430\u0433\u043b\u0435\u0434\u044f\u0432\u0430\u043d\u0435
v3.MainWindow.view.wait=\u0418\u0437\u0447\u0430\u043a\u0432\u0430\u043d\u0435 \u0437\u0430 \u0438\u043d\u0438\u0446\u0438\u0430\u043b\u0438\u0437\u0438\u0440\u0430\u043d\u0435 \u043d\u0430 \u0438\u0437\u0433\u043b\u0435\u0434.
v3.MainWindow.xofx=%1 \u043e\u0442 %2
@@ -2492,53 +2482,17 @@ Button.bar.share=\u0421\u043f\u043e\u0434\u0435\u043b\u044f\u043d\u0435
Button.bar.add=\u0414\u043e\u0431\u0430\u0432\u044f\u043d\u0435
Button.bar.edit=\u0420\u0435\u0434\u0430\u043a\u0446\u0438\u044f
Button.bar.edit.cancel=\u0420\u0435\u0434\u0430\u043a\u0442\u0438\u0440\u0430\u043d\u043e
-v3.Share.menu=\u0421\u043f\u043e\u0434\u0435\u043b\u044f\u043d\u0435 \u043d\u0430 \u0441\u044a\u0434\u044a\u0440\u0436\u0430\u043d\u0438\u0435
-v3.Share.header=\u0421\u043f\u043e\u0434\u0435\u043b\u044f\u043d\u0435
-v3.Share.header.message=\u0421\u043f\u043e\u0434\u0435\u043b\u044f\u043d\u0435 \u0441 \u0434\u0440\u0443\u0436\u043a\u0438 \u0438\u043b\u0438 \u0434\u043e\u0431\u0430\u0432\u044f\u043d\u0435 \u043d\u0430 \u043d\u043e\u0432\u0438 \u0434\u0440\u0443\u0436\u043a\u0438
-v3.Share.add.buddy=\u0414\u043e\u0431\u0430\u0432\u044f\u043d\u0435 \u043d\u0430 \u0434\u0440\u0443\u0436\u043a\u0438
-v3.Share.add.edit.buddy=\u0414\u043e\u0431\u0430\u0432\u044f\u043d\u0435/\u0440\u0435\u0434\u0430\u043a\u0446\u0438\u044f \u043d\u0430 \u0434\u0440\u0443\u0436\u043a\u0438
-v3.Share.add.buddy.all=\u0421\u043f\u043e\u0434\u0435\u043b\u044f\u043d\u0435 \u0441 \u0432\u0441\u0438\u0447\u043a\u0438
-v3.Share.add.buddy.existing=\u0414\u0440\u0443\u0436\u043a\u0438, \u0441 \u043a\u043e\u0438\u0442\u043e \u0434\u0430 \u0441\u0435 \u0441\u043f\u043e\u0434\u0435\u043b\u0438:
-v3.Share.add.buddy.new=\u041d\u043e\u0432\u0438 \u0434\u0440\u0443\u0436\u043a\u0438, \u043a\u043e\u0438\u0442\u043e \u0434\u0430 \u0441\u0435 \u043f\u043e\u043a\u0430\u043d\u044f\u0442 \u0438 \u0434\u0430 \u0438\u043c \u0441\u0435 \u0441\u043f\u043e\u0434\u0435\u043b\u0438:
-v3.Share.buddies=\u0414\u0440\u0443\u0436\u043a\u0438
-v3.Share.invitees=\u041f\u043e\u043a\u0430\u043d\u0435\u043d\u0438
-v3.Share.invite.buddies.prompt=\u0414\u043e\u0431\u0430\u0432\u044f\u043d\u0435 \u043d\u0430 \u043e\u0449\u0435 \u0434\u0440\u0443\u0436\u043a\u0438, \u0441 \u043a\u043e\u0438\u0442\u043e \u0434\u0430 \u0441\u0435 \u0441\u043f\u043e\u0434\u0435\u043b\u0438
-v3.Share.send.now=\u0418\u0437\u043f\u0440\u0430\u0449\u0430\u043d\u0435
-v3.Share.optional.message=\u041d\u0435\u0437\u0430\u0434\u044a\u043b\u0436\u0438\u0442\u0435\u043b\u043d\u043e \u0441\u044a\u043e\u0431\u0449\u0435\u043d\u0438\u0435 \u0437\u0430 \u0434\u043e\u0441\u0442\u0430\u0432\u043a\u0430 \u0432 \u0435\u043c\u0438\u0441\u0438\u044f\u0442\u0430 \u0437\u0430 \u0430\u043a\u0442\u0438\u0432\u043d\u043e\u0441\u0442 \u043d\u0430 \u0434\u0440\u0443\u0436\u043a\u0430\u0442\u0430 (\u043c\u0430\u043a\u0441. 140 \u0441\u0438\u043c\u0432\u043e\u043b\u0430):
-v3.Share.disclaimer=\u0412\u043d\u0438\u043c\u0430\u043d\u0438\u0435: \u0418 \u0441\u044a\u0434\u044a\u0440\u0436\u0430\u043d\u0438\u0435\u0442\u043e, \u043a\u043e\u0435\u0442\u043e \u0441\u0435 \u0441\u043f\u043e\u0434\u0435\u043b\u044f, \u0438 \u0442\u043e\u0432\u0430 \u043d\u0435\u0437\u0430\u0434\u044a\u043b\u0436\u0438\u0442\u0435\u043b\u043d\u043e \u0441\u044a\u043e\u0431\u0449\u0435\u043d\u0438\u0435 \u0449\u0435 \u0441\u0430 \u0448\u0438\u0444\u0440\u043e\u0432\u0430\u043d\u0438.
-v3.Share.disclaimer.link=\u041f\u043e-\u043f\u043e\u0434\u0440\u043e\u0431\u043d\u043e\u2026
-ConfigView.section.security.vuze.login=\u041d\u0435\u043e\u0431\u0445\u043e\u0434\u0438\u043c\u043e \u0435 \u0432\u043f\u0438\u0441\u0432\u0430\u043d\u0435 \u0432\u044a\u0432 Vuze \u0437\u0430 \u0438\u0437\u043f\u044a\u043b\u043d\u0435\u043d\u0438\u0435 \u043d\u0430 \u043e\u043f\u0435\u0440\u0430\u0446\u0438\u044f\u0442\u0430
-v3.buddy.menu.viewprofile=\u041f\u0440\u0435\u0433\u043b\u0435\u0434 \u043d\u0430 \u043f\u0440\u043e\u0444\u0438\u043b
-v3.buddy.menu.remove=\u041f\u0440\u0435\u043c\u0430\u0445\u0432\u0430\u043d\u0435 \u043d\u0430 \u0434\u0440\u0443\u0436\u043a\u0430
v3.MainWindow.menu.view.pluginbar=\u041b\u0435\u043d\u0442\u0430 \u043d\u0430 \u043f\u0440\u0438\u0441\u0442\u0430\u0432\u043a\u0438
-v3.MainWindow.menu.view.buddies-viewer=\u041b\u0435\u043d\u0442\u0430 \u043d\u0430 \u0434\u0440\u0443\u0436\u043a\u0438\u0442\u0435
-v3.activity.buddy-request=\u0418\u043c\u0430 \u0438\u0441\u043a\u0430\u043d\u0435 \u043e\u0442 \u0434\u0440\u0443\u0436\u043a\u0430 %1\n\n<A HREF="%2">\u041f\u0420\u0418\u0415\u041c\u0410\u041d\u0415</A>
-v3.activity.buddy-request.accept=\u041f\u0440\u0438\u0435\u043c\u0430\u043d\u0435
-v3.activity.buddy-request.multi=\u0418\u043c\u0430 \u0438\u0441\u043a\u0430\u043d\u0435 \u043e\u0442 \u0434\u0440\u0443\u0436\u043a\u0430 \u0437\u0430 [#%3] \u043e\u0442 %1\n\n<A HREF="%2">\u041f\u0420\u0418\u0415\u041c\u0410\u041d\u0415</A>
-v3.activity.buddy-linkup=%1 \u0435 \u0432\u0435\u0447\u0435 \u0434\u0440\u0443\u0436\u043a\u0430
-v3.activity.share-content=%1 \u0438\u0441\u043a\u0430 \u0434\u0430 \u0441\u043f\u043e\u0434\u0435\u043b\u0438 %2\n\n\u0421\u044a\u043e\u0431\u0449\u0435\u043d\u0438\u0435 \u043e\u0442 %3:\n%4
-v3.activity.share-content.no-msg=%1 \u0438\u0441\u043a\u0430 \u0434\u0430 \u0441\u043f\u043e\u0434\u0435\u043b\u0438 %2
-v3.buddies.friends=\u0414\u0440\u0443\u0436\u043a\u0438
-v3.buddies.online=\u041d\u0430 \u043b\u0438\u043d\u0438\u044f (%1)
-v3.buddies.remove=\u041f\u0440\u0435\u043c\u0430\u0445\u0432\u0430\u043d\u0435 \u043d\u0430 \u0434\u0440\u0443\u0436\u043a\u0430
-v3.buddies.add.to.share=\u0414\u043e\u0431\u0430\u0432\u044f\u043d\u0435 \u043d\u0430 \u0434\u0440\u0443\u0436\u043a\u0430 \u0437\u0430 \u0441\u043f\u043e\u0434\u0435\u043b\u0430\u043d\u0435
MainWindow.dialog.select.vuze.file=\u0418\u0437\u0431\u043e\u0440 \u043d\u0430 Vuze \u0444\u0430\u0439\u043b
MainWindow.menu.file.open.vuze=Vuze \u0444\u0430\u0439\u043b\u2026
-azbuddy.ui.dialog.disable.title=\u0411\u0435\u0437 \u043f\u0440\u0438\u0441\u0442\u0430\u0432\u043a\u0430 \u0437\u0430 \u0434\u0440\u0443\u0436\u043a\u0438
-azbuddy.ui.dialog.disable.text=\u0411\u0435\u0437 \u043f\u0440\u0438\u0441\u0442\u0430\u0432\u043a\u0430\u0442\u0430 \u0437\u0430 \u0434\u0440\u0443\u0436\u043a\u0438 \u043d\u044f\u043c\u0430 \u0434\u0430 \u043c\u043e\u0433\u0430\u0442 \u0434\u0430 \u0441\u0435 \u0441\u043f\u043e\u0434\u0435\u043b\u044f\u0442 \u0442\u043e\u0440\u0435\u043d\u0442\u0438 \u0447\u0440\u0435\u0437 \u043b\u0435\u043d\u0442\u0430\u0442\u0430 \u0437\u0430 \u0434\u0440\u0443\u0436\u043a\u0438 \u0432 \u0434\u043e\u043b\u043d\u0430\u0442\u0430 \u0447\u0430\u0441\u0442 \u043d\u0430 \u043f\u0440\u0438\u043b\u043e\u0436\u0435\u043d\u0438\u0435\u0442\u043e \u0438 \u0434\u0430 \u0441\u0435 \u0440\u0435\u0434\u0430\u043a\u0442\u0438\u0440\u0430 \u0441\u043f\u0438\u0441\u044a\u043a\u044a\u0442 \u0441 \u0434\u0440\u0443\u0436\u043a\u0438\n\n\u0414\u0430 \u0441\u0435 \u0441\u043f\u0440\u0435 \u043b\u0438 \u043f\u0440\u0438\u0441\u0442\u0430\u0432\u043a\u0430\u0442\u0430 \u0437\u0430 \u0434\u0440\u0443\u0436\u043a\u0438?
metasearch.addtemplate.title=\u0418\u043d\u0441\u0442\u0430\u043b\u0438\u0440\u0430\u043d\u0435 \u043d\u0430 \u0448\u0430\u0431\u043b\u043e\u043d \u0437\u0430 \u0442\u044a\u0440\u0441\u0435\u043d\u0435?
metasearch.addtemplate.desc=\u041d\u0430\u0438\u0441\u0442\u0438\u043d\u0430 \u043b\u0438 \u0434\u0430 \u0441\u0435 \u0438\u043d\u0441\u0442\u0430\u043b\u0438\u0440\u0430 \u0448\u0430\u0431\u043b\u043e\u043d \u0437\u0430 \u0442\u044a\u0440\u0441\u0435\u043d\u0435 \u0441 \u0438\u043c\u0435 '%1'?
v3.share.private.title=\u0421\u043f\u043e\u0434\u0435\u043b\u044f\u043d\u0435 \u043d\u0430 \u0442\u043e\u0440\u0435\u043d\u0442
v3.share.private.text=\u0418\u0437\u0431\u0440\u0430\u043d\u0438\u044f\u0442 \u0442\u043e\u0440\u0435\u043d\u0442 \u0435 \u043c\u0430\u0440\u043a\u0438\u0440\u0430\u043d \u043a\u0430\u0442\u043e \u0447\u0430\u0441\u0442\u0435\u043d \u0442\u043e\u0440\u0435\u043d\u0442.\n\n\u041d\u0435 \u043c\u043e\u0436\u0435 \u0434\u0430 \u0441\u0435 \u0441\u043f\u043e\u0434\u0435\u043b\u044f\u0442 \u0447\u0430\u0441\u0442\u043d\u0438 \u0442\u043e\u0440\u0435\u043d\u0442\u0438.
-v3.buddies.disabled.title=\u041f\u0440\u0438\u0441\u0442\u0430\u0432\u043a\u0430\u0442\u0430 \u0437\u0430 \u0434\u0440\u0443\u0436\u043a\u0438 \u043d\u0435 \u0435 \u043f\u0443\u0441\u043d\u0430\u0442\u0430
-v3.buddies.disabled.text._windows=\u041f\u0440\u0438\u0441\u0442\u0430\u0432\u043a\u0430\u0442\u0430 \u0437\u0430 \u0434\u0440\u0443\u0436\u043a\u0438 \u043d\u0435 \u0435 \u043f\u0443\u0441\u043d\u0430\u0442\u0430, \u0437\u0430\u0442\u043e\u0432\u0430 \u043d\u0435 \u043c\u043e\u0436\u0435 \u0434\u0430 \u0441\u0435 \u0441\u043f\u043e\u0434\u0435\u043b\u044f\u0442 \u0438\u043b\u0438 \u043f\u0440\u0438\u0435\u043c\u0430\u0442 \u0442\u043e\u0440\u0435\u043d\u0442\u0438 \u0438\u043b\u0438 \u0438\u0441\u043a\u0430\u043d\u0438\u044f \u043d\u0430 \u0434\u0440\u0443\u0436\u043a\u0438. \u0414\u0430 \u0441\u0435 \u0441\u043c\u0435\u043d\u044f\u0442 \u043d\u0430\u0441\u0442\u0440\u043e\u0439\u043a\u0438\u0442\u0435 \u0432 \u0440\u0430\u0437\u0434\u0435\u043b '\u041a\u043e\u043d\u0444\u0438\u0433\u0443\u0440\u0430\u0446\u0438\u044f'.
-v3.buddies.disabled.text._mac=\u041f\u0440\u0438\u0441\u0442\u0430\u0432\u043a\u0430\u0442\u0430 \u0437\u0430 \u0434\u0440\u0443\u0436\u043a\u0438 \u043d\u0435 \u0435 \u043f\u0443\u0441\u043d\u0430\u0442\u0430, \u0437\u0430\u0442\u043e\u0432\u0430 \u043d\u0435 \u043c\u043e\u0436\u0435 \u0434\u0430 \u0441\u0435 \u0441\u043f\u043e\u0434\u0435\u043b\u044f\u0442 \u0438\u043b\u0438 \u043f\u0440\u0438\u0435\u043c\u0430\u0442 \u0442\u043e\u0440\u0435\u043d\u0442\u0438 \u0438\u043b\u0438 \u0438\u0441\u043a\u0430\u043d\u0438\u044f \u043d\u0430 \u0434\u0440\u0443\u0436\u043a\u0438. \u0414\u0430 \u0441\u0435 \u0441\u043c\u0435\u043d\u044f\u0442 \u043d\u0430\u0441\u0442\u0440\u043e\u0439\u043a\u0438\u0442\u0435 \u0432 \u0440\u0430\u0437\u0434\u0435\u043b '\u041a\u043e\u043d\u0444\u0438\u0433\u0443\u0440\u0430\u0446\u0438\u044f'.
metasearch.addtemplate.dup.title=\u0414\u0443\u0431\u043b\u0438\u0440\u0430\u043d \u0448\u0430\u0431\u043b\u043e\u043d
metasearch.addtemplate.dup.desc=\u0428\u0430\u0431\u043b\u043e\u043d \u0437\u0430 \u0442\u044a\u0440\u0441\u0435\u043d\u0435 %1 \u0432\u0435\u0447\u0435 \u0435 \u0438\u043d\u0441\u0442\u0430\u043b\u0438\u0440\u0430\u043d
metasearch.export.select.template.file=\u0417\u0430\u043f\u0438\u0441 \u043d\u0430 \u0448\u0430\u0431\u043b\u043e\u043d
metasearch.import.select.template.file=\u041e\u0442\u0432\u0430\u0440\u044f\u043d\u0435 \u043d\u0430 \u0448\u0430\u0431\u043b\u043e\u043d
-v3.MainWindow.button.newtag.share=\u041d\u043e\u0432\u043e! \u0421\u043f\u043e\u0434\u0435\u043b\u044f\u043d\u0435 \u043d\u0430 \u0442\u043e\u0440\u0435\u043d\u0442
-v3.buddies.faq=\u041f\u043e-\u043f\u043e\u0434\u0440\u043e\u0431\u043d\u043e\u2026
dialog.uiswitch.title=\u041f\u0440\u0435\u0432\u043a\u043b\u044e\u0447\u0432\u0430\u043d\u0435 \u043a\u044a\u043c Vuze \u0413\u041f\u0418
dialog.uiswitch.text=\u0422\u0440\u044f\u0431\u0432\u0430 \u0434\u0430 \u0435 \u0430\u043a\u0442\u0438\u0432\u0435\u043d Vuze \u0413\u041f\u0418 \u0437\u0430 \u0438\u0437\u043f\u043e\u043b\u0437\u0432\u0430\u043d\u0435\u0442\u043e \u043d\u0430 \u0442\u0430\u0437\u0438 \u0444\u0443\u043d\u043a\u0446\u0438\u044f.\n\nVuze \u0449\u0435 \u0442\u0440\u044f\u0431\u0432\u0430 \u0434\u0430 \u0441\u0435 \u0440\u0435\u0441\u0442\u0430\u0440\u0442\u0438\u0440\u0430.
dialog.uiswitch.button=\u041f\u0440\u0435\u0432\u043a\u043b\u044e\u0447\u0432\u0430\u043d\u0435 \u043a\u044a\u043c Vuze \u0413\u041f\u0418
@@ -2546,25 +2500,10 @@ azbuddy.tracker.enabled=\u0421 '\u041b\u0430\u043d\u0441\u0438\u0440\u0430\u043d
azbuddy.protocolspeed=KB/s \u043c\u0430\u043a\u0441. \u0431\u0430\u043b\u0430\u0441\u0442 \u043f\u043e \u043f\u0440\u043e\u0442\u043e\u043a\u043e\u043b \u0437\u0430 \u0434\u0440\u0443\u0436\u043a\u0430
v3.MainWindow.button.download=\u0421\u0432\u0430\u043b\u044f\u043d\u0435
v3.MainWindow.button.run=\u0421\u0442\u0430\u0440\u0442 \u043d\u0430 \u0441\u0432\u0430\u043b\u0435\u043d\u0438\u044f \u0444\u0430\u0439\u043b
-v3.activity.header.friend.requests.foryou=\u0418\u0441\u043a\u0430\u043d\u0438\u044f \u043d\u0430 \u0434\u0440\u0443\u0436\u043a\u0438 - \u0437\u0430 \u0442\u0443\u043a
-v3.activity.header.friend.requests.fromyou=\u0418\u0441\u043a\u0430\u043d\u0438\u044f \u043d\u0430 \u0434\u0440\u0443\u0436\u043a\u0438 - \u043e\u0442\u0442\u0443\u043a
-v3.activity.header.friend.requests.accepted=\u0418\u0441\u043a\u0430\u043d\u0438\u044f \u043d\u0430 \u0434\u0440\u0443\u0436\u043a\u0438 - \u043f\u0440\u0438\u0435\u0442\u0438
-v3.activity.header.share.requests=\u0418\u0441\u043a\u0430\u043d\u0438\u044f \u0437\u0430 \u0441\u043f\u043e\u0434\u0435\u043b\u044f\u043d\u0435 \u043d\u0430 \u0442\u043e\u0440\u0435\u043d\u0442\u0438
v3.activity.header.downloads=\u0421\u0432\u0430\u043b\u044f\u043d\u0438\u044f
-v3.activity.header.rating.reminders=\u0411\u0435\u043b\u0435\u0436\u043a\u0438 \u0437\u0430 \u043e\u0442\u043d\u043e\u0448\u0435\u043d\u0438\u044f
v3.activity.header.vuze.news=Vuze \u043d\u043e\u0432\u0438\u043d\u0438
-login.optional.message=\u0418\u0437\u0438\u0441\u043a\u0432\u0430 \u0441\u0435 \u0432\u043f\u0438\u0441\u0432\u0430\u043d\u0435 \u0437\u0430 \u0442\u0430\u0437\u0438 \u0432\u044a\u0437\u043c\u043e\u0436\u043d\u043e\u0441\u0442
-message.confirm.share.singular=\u0411\u0440\u0430\u0432\u043e! \u0418\u0441\u043a\u0430\u043d\u0438\u0435\u0442\u043e \u0437\u0430 \u0441\u043f\u043e\u0434\u0435\u043b\u044f\u043d\u0435 \u0435 \u0438\u0437\u043f\u0440\u0430\u0442\u0435\u043d\u043e.
-message.confirm.share.plural=\u0411\u0440\u0430\u0432\u043e! \u0418\u0441\u043a\u0430\u043d\u0438\u044f\u0442\u0430 \u0437\u0430 \u0441\u043f\u043e\u0434\u0435\u043b\u044f\u043d\u0435 \u0441\u0430 \u0438\u0437\u043f\u0440\u0430\u0442\u0435\u043d\u0438.
-message.confirm.share.invite.singular=\u0411\u0440\u0430\u0432\u043e! \u0418\u0441\u043a\u0430\u043d\u0438\u0435\u0442\u043e \u0437\u0430 \u0441\u0432\u044a\u0440\u0437\u0432\u0430\u043d\u0435 \u0438 \u0441\u043f\u043e\u0434\u0435\u043b\u044f\u043d\u0435 \u0435 \u0438\u0437\u043f\u0440\u0430\u0442\u0435\u043d\u043e.
-message.confirm.share.invite.plural=\u0411\u0440\u0430\u0432\u043e! \u0418\u0441\u043a\u0430\u043d\u0438\u044f\u0442\u0430 \u0437\u0430 \u0441\u0432\u044a\u0440\u0437\u0432\u0430\u043d\u0435 \u0438 \u0441\u043f\u043e\u0434\u0435\u043b\u044f\u043d\u0435 \u0441\u0430 \u0438\u0437\u043f\u0440\u0430\u0442\u0435\u043d\u0438.
-message.confirm.invite.singular=\u0411\u0440\u0430\u0432\u043e! \u0418\u0441\u043a\u0430\u043d\u0435\u0442\u043e \u043d\u0430 \u0434\u0440\u0443\u0436\u043a\u0430\u0442\u0430 \u0435 \u0438\u0437\u043f\u0440\u0430\u0442\u0435\u043d\u043e.
-message.confirm.invite.plural=\u0411\u0440\u0430\u0432\u043e! \u0418\u0441\u043a\u0430\u043d\u0438\u044f\u0442\u0430 \u043d\u0430 \u0434\u0440\u0443\u0436\u043a\u0430\u0442\u0430 \u0441\u0430 \u0438\u0437\u043f\u0440\u0430\u0442\u0435\u043d\u0438.
-message.confirm.invite.error=\u041a\u043e\u0444\u0442\u0438! \u0417\u0430\u043f\u043b\u0435\u0442\u043e\u0445\u0430 \u0441\u0435 \u0436\u0438\u0446\u0438\u0442\u0435 \u043f\u043e \u0442\u043e\u0432\u0430 \u0438\u0441\u043a\u0430\u043d\u0435. \u041d\u044f\u043a\u043e\u0439 \u0438\u043b\u0438 \u043f\u043e\u0432\u0435\u0447\u0435 \u043e\u0442 \u043f\u043e\u043a\u0430\u043d\u0435\u043d\u0438\u0442\u0435 \u0438\u043c\u0430\u0442 \u0433\u0440\u0435\u0448\u043a\u0438.
-message.prompt.add.friends=\u041f\u043e\u0441\u043e\u0447\u0432\u0430\u043d\u0435 \u043f\u043e \u0438\u043a\u043e\u043d\u0438\u0442\u0435 \u043d\u0430 \u0434\u0440\u0443\u0436\u043a\u0438\u0442\u0435 \u0437\u0430 \u0441\u043f\u043e\u0434\u0435\u043b\u044f\u043d\u0435 \u043f\u043e-\u0434\u043e\u043b\u0443 \u0432 \u0441\u0442\u0440\u0430\u043d\u0438\u0446\u0430\u0442\u0430
message.taking.too.long=\u041e\u043f\u0435\u0440\u0430\u0446\u0438\u044f\u0442\u0430 \u0441\u0435 \u0431\u0430\u0432\u0438 \u043f\u043e\u0432\u0435\u0447\u0435 \u043e\u0442 \u043e\u0447\u0430\u043a\u0432\u0430\u043d\u043e\u0442\u043e\n\u041f\u0440\u0438 \u0436\u0435\u043b\u0430\u0436\u0438\u0435 \u0434\u0430 \u0441\u0435 \u043d\u0430\u0442\u0438\u0441\u043d\u0435 'ESC' \u0437\u0430 \u043f\u0440\u0435\u043a\u0440\u0430\u0442\u044f\u0432\u0430\u043d\u0435
message.status.success=\u0423\u0441\u043f\u0435\u0448\u043d\u043e
-message.intro.friends=\u0414\u043e\u0431\u0430\u0432\u044f\u043d\u0435 \u043d\u0430 \u0434\u0440\u0443\u0436\u043a\u0438 - \u0441\u043f\u043e\u0434\u0435\u043b\u044f\u043d\u0435 \u043d\u0430 \u0442\u043e\u0440\u0435\u043d\u0442\u0438 - \u043f\u043e-\u0431\u044a\u0440\u0437\u043e \u0441\u0432\u0430\u043b\u044f\u043d\u0435.
azbuddy.tracker.bbb.status.title=\u041b\u0430\u043d\u0441\u0438\u0440\u0430\u043d\u0435 \u043d\u0430 \u0434\u0440\u0443\u0436\u043a\u0430
azbuddy.tracker.bbb.status.title.tooltip=\u0418\u0437\u0431\u043e\u0440 \u0437\u0430 \u043f\u043e\u0434\u0440\u043e\u0431\u043d\u043e\u0441\u0442\u0438
azbuddy.tracker.bbb.status.idle=\u0411\u0435\u0437 \u043b\u0430\u043d\u0441\u0438\u0440\u0430\u043d\u0435
@@ -2573,13 +2512,8 @@ azbuddy.tracker.bbb.status.in=\u041c\u0435\u0441\u0442\u043d\u043e \u043b\u0430\
azbuddy.tracker.bbb.status.out=\u041b\u0430\u043d\u0441\u0438\u0440\u0430\u043d\u0435 \u043d\u0430 \u0434\u0440\u0443\u0436\u043a\u0438
v3.MainWindow.search.go.tooltip=\u0418\u0437\u043f\u044a\u043b\u043d\u0435\u043d\u0438\u0435 \u043d\u0430 \u0442\u044a\u0440\u0441\u0435\u043d\u0435\u0442\u043e
v3.MainWindow.search.last.tooltip=\u041f\u043e\u0441\u043b\u0435\u0434\u043d\u043e \u0442\u044a\u0440\u0441\u0435\u043d\u0435
-v3.activity.buddy-invited=\u0418\u0437\u043f\u0440\u0430\u0442\u0435\u043d\u043e \u0435 \u0438\u0441\u043a\u0430\u043d\u0435 \u043a\u044a\u043c \u0434\u0440\u0443\u0436\u043a\u0430 \u0437\u0430 %1.
-v3.activity.buddy-invited.multi=\u0418\u0437\u043f\u0440\u0430\u0442\u0435\u043d\u043e \u0435 \u0438\u0441\u043a\u0430\u043d\u0435 \u043a\u044a\u043c \u0434\u0440\u0443\u0436\u043a\u0430 \u043d\u0430 \u0441\u043b\u0435\u0434\u043d\u0438\u0442\u0435 \u0445\u043e\u0440\u0430:\n%1
metasearch.addtemplate.done.title=\u0414\u043e\u0431\u0430\u0432\u0435\u043d \u0448\u0430\u0431\u043b\u043e\u043d
metasearch.addtemplate.done.desc=\u0428\u0430\u0431\u043b\u043e\u043d '%1' \u0435 \u0434\u043e\u0431\u0430\u0432\u0435\u043d \u0443\u0441\u043f\u0435\u0448\u043d\u043e.\n\u0429\u0435 \u0431\u044a\u0434\u0435 \u0438\u0437\u043f\u043e\u043b\u0437\u0432\u0430\u043d \u043f\u0440\u0438 \u0441\u043b\u0435\u0434\u0432\u0430\u0449\u043e \u0442\u044a\u0440\u0441\u0435\u043d\u0435.
-v3.MainWindow.button.share=\u0421\u043f\u043e\u0434\u0435\u043b\u044f\u043d\u0435 \u043d\u0430 \u0441\u044a\u0434\u044a\u0440\u0436\u0430\u043d\u0438\u0435
-v3.buddies.remove.buddy.dialog.title=\u041f\u043e\u0442\u0432\u044a\u0440\u0436\u0434\u0435\u043d\u0438\u0435 \u0442\u0440\u0438\u0435\u043d\u0435\u0442\u043e \u043d\u0430 \u0434\u0440\u0443\u0436\u043a\u0430
-v3.buddies.remove.buddy.dialog.text=\u041d\u0430\u0438\u0441\u0442\u0438\u043d\u0430 \u043b\u0438 \u0434\u0430 \u0441\u0435 \u0438\u0437\u0442\u0440\u0438\u0435 %1 \u043a\u0430\u0442\u043e \u0434\u0440\u0443\u0436\u043a\u0430?
ConfigView.section.security.nopw=\u041d\u0435 \u0435 \u043f\u043e\u0434\u0430\u0434\u0435\u043d\u0430 \u043f\u0430\u0440\u043e\u043b\u0430
ConfigView.section.security.nopw_v=\u041d\u044f\u043c\u0430 \u043f\u0430\u0440\u043e\u043b\u0430, \u0442\u0440\u044f\u0431\u0432\u0430 \u0432\u043f\u0438\u0441\u0432\u0430\u043d\u0435 \u0432\u044a\u0432 Vuze
fileplugininstall.install.title=\u0418\u043d\u0441\u0442\u0430\u043b\u0438\u0440\u0430\u043d\u0435 \u043d\u0430 \u043f\u0440\u0438\u0441\u0442\u0430\u0432\u043a\u0430?
@@ -2593,14 +2527,7 @@ azbuddy.os_not_avail=\u041d\u0435\u0434\u043e\u0441\u0442\u044a\u043f\u0435\u043
azbuddy.os_busy=\u0417\u0430\u0435\u0442
azbuddy.os_offline=\u041d\u0435 \u043d\u0430 \u043b\u0438\u043d\u0438\u044f
azbuddy.ui.menu.disconnect=\u041f\u0440\u0435\u043a\u044a\u0441\u0432\u0430\u043d\u0435
-v3.buddy.menu.chat=\u041b\u0430\u0444\u0447\u0435
-v3.chat.offline=%1 \u043d\u0435 \u0435 \u043d\u0430 \u043b\u0438\u043d\u0438\u044f \u0438 \u0449\u0435 \u043f\u043e\u043b\u0443\u0447\u0438 \u0441\u044a\u043e\u0431\u0449\u0435\u043d\u0438\u0435\u0442\u043e, \u043a\u043e\u0433\u0430\u0442\u043e \u0435 \u043e\u0442\u043d\u043e\u0432\u043e \u043d\u0430 \u043b\u0438\u043d\u0438\u044f.
-v3.chat.wrongversion=%1 \u0435 \u0441 \u0432\u0435\u0440\u0441\u0438\u044f \u043d\u0430 Vuze, \u043a\u043e\u044f\u0442\u043e \u043d\u0435 \u043f\u043e\u0434\u0434\u044a\u0440\u0436\u0430 \u043b\u0430\u0444\u0447\u0435.
azbuddy.enable_chat_notif=\u0421 \u0438\u0437\u0432\u0435\u0441\u0442\u044f\u0432\u0430\u043d\u0438\u044f \u0432 \u043b\u0430\u0444\u0447\u0435\u0442\u043e
-v3.buddies.dnd.info.dialog.title=\u0426\u0435\u043b\u0435\u0432\u043e \u0441\u043f\u043e\u0434\u0435\u043b\u044f\u043d\u0435
-v3.buddies.dnd.info.dialog.text=\u0417\u0430\u043f\u043e\u0447\u0432\u0430 \u0446\u0435\u043b\u0435\u0432\u043e \u0441\u043f\u043e\u0434\u0435\u043b\u044f\u043d\u0435. \u041c\u0435\u0441\u0442\u043d\u043e\u0442\u043e \u0441\u044a\u0434\u044a\u0440\u0436\u0430\u043d\u0438\u0435 \u0441\u0435 \u043f\u0440\u0438\u0433\u043e\u0442\u0432\u044f \u0437\u0430 \u0441\u043f\u043e\u0434\u0435\u043b\u044f\u043d\u0435. \u0429\u0435 \u0441\u0435 \u043e\u0442\u0432\u043e\u0440\u0438 \u0435\u043a\u0440\u0430\u043d\u044a\u0442 \u0437\u0430 \u0441\u043f\u043e\u0434\u0435\u043b\u044f\u043d\u0435 \u0441\u043b\u0435\u0434 \u0437\u0430\u0432\u044a\u0440\u0448\u0432\u0430\u043d\u0435 \u043d\u0430 \u043e\u0431\u0440\u0430\u0431\u043e\u0442\u043a\u0430\u0442\u0430.\n\nVuze \u0442\u0440\u044f\u0431\u0432\u0430 \u0434\u0430 \u0440\u0430\u0431\u043e\u0442\u0438, \u0437\u0430 \u0434\u0430 \u043c\u043e\u0436\u0435 \u0434\u0440\u0443\u0436\u043a\u0430\u0442\u0430 \u0434\u0430 \u043f\u043e\u043b\u0443\u0447\u0438 \u0441\u044a\u0434\u044a\u0440\u0436\u0430\u043d\u0438\u0435\u0442\u043e.\n<A HREF="http://faq.vuze.com/?View=entry&EntryID=267">\u0414\u0430 \u0441\u0435 \u043f\u043e\u0441\u043e\u0447\u0438 \u0442\u0443\u043a</A> \u0437\u0430 \u043f\u043e\u0434\u0440\u043e\u0431\u043d\u043e\u0441\u0442\u0438.
-v3.buddies.dnd.info.dialog.ok=\u0414\u0430
-v3.buddies.dnd.info.dialog.remember=\u0411\u0435\u0437 \u043f\u043e\u043a\u0430\u0437\u0432\u0430\u043d\u0435 \u043d\u0430 \u0441\u044a\u043e\u0431\u0449\u0435\u043d\u0438\u0435\u0442\u043e \u043e\u0442\u043d\u043e\u0432\u043e
progress.window.msg.progress=\u0414\u0430 \u0441\u0435 \u0438\u0437\u0447\u0430\u043a\u0430 \u0437\u0430\u0432\u044a\u0440\u0448\u0432\u0430\u043d\u0435 \u043d\u0430 \u043e\u043f\u0435\u0440\u0430\u0446\u0438\u044f\u0442\u0430
ConfigView.section.connection.advanced.read_select=\u0418\u0437\u0431\u043e\u0440 \u043d\u0430 \u0437\u0430\u043a\u044a\u0441\u043d\u0435\u043d\u0438\u0435 \u0437\u0430 \u0447\u0435\u0442\u0435\u043d\u0435 (m, \u043f\u043e \u043f\u043e\u0434\u0440\u0430\u0437\u0431\u0438\u0440\u0430\u043d\u0435 %1)
ConfigView.section.connection.advanced.read_select_min=\u0418\u0437\u0431\u043e\u0440 \u043d\u0430 \u043c\u0438\u043d. \u0447\u0430\u043a\u0430\u043d\u0435 \u0437\u0430 \u0447\u0435\u0442\u0435\u043d\u0435 (m, \u043f\u043e \u043f\u043e\u0434\u0440\u0430\u0437\u0431\u0438\u0440\u0430\u043d\u0435 %1)
@@ -2655,25 +2582,18 @@ PluginDeprecation.view=\u041d\u0435\u0438\u0437\u043f\u0440\u0430\u0432\u043d\u0
PluginDeprecation.alert=\u041f\u0440\u0438\u0441\u0442\u0430\u0432\u043a\u0430 \u0441\u0435 \u0435 \u043e\u043f\u0438\u0442\u0430\u043b\u0430 \u0434\u0430 \u0438\u0437\u043f\u043e\u043b\u0437\u0432\u0430 \u0444\u0443\u043d\u043a\u0446\u0438\u043e\u043d\u0430\u043b\u043d\u043e\u0441\u0442, \u043a\u043e\u044f\u0442\u043e \u0449\u0435 \u043e\u0442\u043f\u0430\u0434\u043d\u0435 \u043f\u0440\u0438 \u0441\u043b\u0435\u0434\u0432\u0430\u0449\u0438 \u0432\u0435\u0440\u0441\u0438\u0438. \u0414\u0430 \u0441\u0435 \u043e\u0442\u0432\u043e\u0440\u0438 \u0438\u0437\u0433\u043b\u0435\u0434\u0430 \u0441 \u0434\u043d\u0435\u0432\u043d\u0438\u043a\u0430 \u043d\u0430 \u043d\u0435\u0438\u0437\u043f\u0440\u0430\u0432\u043d\u043e\u0441\u0442\u0438 \u043d\u0430 \u043f\u0440\u0438\u0441\u0442\u0430\u0432\u043a\u0438 \u0437\u0430 \u0438\u043d\u0444\u043e\u0440\u043c\u0430\u0446\u0438\u044f.
TableColumn.header.Thumbnail=\u0418\u043a\u043e\u043d\u0430
TableColumn.header.Thumbnail.info=\u041d\u0430\u043c\u0430\u043b\u0435\u043d \u0438\u0437\u0433\u043b\u0435\u0434 \u043d\u0430 Vuze \u0441\u044a\u0434\u044a\u0440\u0436\u0430\u043d\u0438\u0435. \u0417\u0430 \u0432\u0441\u0438\u0447\u043a\u0438 \u0434\u0440\u0443\u0433\u0438 \u043d\u0430\u043c\u0430\u043b\u0435\u043d\u0438\u0442\u0435 \u0438\u0437\u0433\u043b\u0435\u0434\u0438 \u0441\u0435 \u0434\u0430\u0432\u0430\u0442 \u043e\u0442 \u041e\u0421-\u0430.
-TableColumn.header.Rating_global=\u041f\u043e\u043f\u0443\u043b\u044f\u0440\u043d\u043e\u0441\u0442
-TableColumn.header.Rating_global.info=\u0413\u043b\u043e\u0431\u0430\u043b\u043d\u043e \u043e\u0442\u043d\u043e\u0448\u0435\u043d\u0438\u0435 \u0437\u0430 \u0441\u044a\u0434\u044a\u0440\u0436\u0430\u043d\u0438\u0435\u0442\u043e
v3.MainWindow.menu.getting_started=&\u0417\u0430\u043f\u043e\u0447\u0432\u0430\u043d\u0435 \u043d\u0430 \u0440\u0430\u0431\u043e\u0442\u0430
MainWindow.menu.community=&\u0414\u0440\u0443\u0436\u0435\u0441\u0442\u0432\u043e
MainWindow.menu.help.faq=&\u0427\u0417\u0412
MainWindow.menu.community.wiki=\u0414\u0440\u0443\u0436\u0435\u0441\u0442\u0432\u0435\u043d &\u0423\u0438\u043a\u0438
MainWindow.menu.community.forums=\u0414\u0440\u0443\u0436\u0435\u0441\u0442\u0432\u0435\u043d &\u0444\u043e\u0440\u0443\u043c
MainWindow.menu.community.blog=Vuze &\u0415\u043c\u0438\u0441\u0438\u044f
-MainWindow.menu.community.add_friends=&\u0414\u043e\u0431\u0430\u0432\u044f\u043d\u0435 \u043d\u0430 \u0434\u0440\u0443\u0436\u043a\u0438
MainWindow.menu.help.support=&\u041f\u043e\u043c\u043e\u0449 \u0438 \u043f\u043e\u0434\u0434\u0440\u044a\u0436\u043a\u0430
externalLogin.title=\u0418\u0437\u0438\u0441\u043a\u0432\u0430 \u0441\u0435 \u0432\u043f\u0438\u0441\u0432\u0430\u043d\u0435
externalLogin.explanation=\u0428\u0430\u0431\u043b\u043e\u043d "%1" \u0438\u0437\u0438\u0441\u043a\u0432\u0430 \u0432\u043f\u0438\u0441\u0432\u0430\u043d\u0435. \u0421\u043b\u0435\u0434 \u0432\u043f\u0438\u0441\u0432\u0430\u043d\u0435 \u043f\u0440\u043e\u0437\u043e\u0440\u0435\u0446\u044a\u0442 \u0449\u0435 \u0441\u0435 \u0437\u0430\u0442\u0432\u043e\u0440\u0438. \u0410\u043a\u043e \u043d\u0435 \u0441\u0435 \u0437\u0430\u0442\u0432\u043e\u0442, \u0434\u0430 \u0441\u0435 \u043d\u0430\u0442\u0438\u0441\u043d\u0435 "\u0413\u043e\u0442\u043e\u0432\u043e".
externalLogin.explanation.capture=\u041d\u0435\u043e\u0431\u0445\u043e\u0434\u0438\u043c\u043e \u0435 \u0432\u043f\u0438\u0441\u0432\u0430\u043d\u0435 \u0437\u0430 \u0441\u044a\u0437\u0434\u0430\u0432\u0430\u043d\u0435\u0442\u043e \u043d\u0430 \u0442\u043e\u0437\u0438 \u0448\u0430\u0431\u043b\u043e\u043d. \u0421\u043b\u0435\u0434 \u0432\u043f\u0438\u0441\u0432\u0430\u043d\u0435 \u0434\u0430 \u0441\u0435 \u043d\u0430\u0442\u0438\u0441\u043d\u0435 "\u0413\u043e\u0442\u043e\u0432\u043e".
Button.done=\u0413\u043e\u0442\u043e\u0432\u043e
GeneralView.torrent_created_on_and_by=%1 \u043e\u0442 %2
-v3.Share.wizard.title=\u041f\u043e\u043c\u043e\u0449\u043d\u0438\u043a \u0437\u0430 \u0441\u043f\u043e\u0434\u0435\u043b\u044f\u043d\u0435
-v3.AddFriends.header.message=\u041c\u043e\u0436\u0435 \u0434\u0430 \u0441\u0435 \u0434\u043e\u0431\u0430\u0432\u044f\u0442 \u0434\u0440\u0443\u0436\u043a\u0438 \u0437\u0430 \u0441\u043f\u043e\u0434\u0435\u043b\u044f\u043d\u0435 \u0441 \u0442\u044f\u0445 \u043d\u0430 \u043b\u044e\u0431\u0438\u043c\u0438 \u0442\u043e\u0440\u0435\u043d\u0442\u0438
-v3.AddFriends.header=\u0414\u043e\u0431\u0430\u0432\u044f\u043d\u0435 \u043d\u0430 \u0434\u0440\u0443\u0436\u043a\u0438
-v3.AddFriends.wizard.title=\u041f\u043e\u043c\u043e\u0449\u043d\u0438\u043a \u0437\u0430 \u0434\u043e\u0431\u0430\u0432\u044f\u043d\u0435 \u043d\u0430 \u0434\u0440\u0443\u0436\u043a\u0438
Button.continue=\u041d\u0430\u043f\u0440\u0435\u0434
Button.preview=\u041f\u0440\u0435\u0433\u043b\u0435\u0434
Subscription.menu.forcecheck=\u0410\u043a\u0442\u0443\u0430\u043b\u0438\u0437\u0430\u0446\u0438\u044f
@@ -2684,9 +2604,6 @@ sidebar.LibraryDL=\u0421\u0432\u0430\u043b\u044f\u0449\u0438 \u0441\u0435
sidebar.LibraryCD=\u0417\u0430\u0432\u044a\u0440\u0448\u0435\u043d\u0438
authenticator.location=\u041c\u044f\u0441\u0442\u043e
authenticator.details=\u041f\u043e\u0434\u0440\u043e\u0431\u043d\u043e\u0441\u0442\u0438
-v3.MainWindow.menu.publish.new=\u041f\u0443\u0431\u043b\u0438\u043a\u0443\u0432\u0430\u043d\u0435 \u043d\u0430 \u043d\u043e\u0432\u043e \u0441\u044a\u0434\u044a\u0440\u0436\u0430\u043d\u0438\u0435
-v3.MainWindow.menu.publish.mine=\u041c\u0435\u0441\u0442\u043d\u043e \u043f\u0443\u0431\u043b\u0438\u043a\u0443\u0432\u0430\u043d\u043e \u0441\u044a\u0434\u044a\u0440\u0436\u0430\u043d\u0438\u0435
-v3.MainWindow.menu.publish.about=\u0417\u0430 \u043f\u0443\u0431\u043b\u0438\u043a\u0443\u0432\u0430\u043d\u0435\u0442\u043e\u2026
v3.MainWindow.menu.showActionBarText=\u041f\u043e\u043a\u0430\u0437\u0432\u0430\u043d\u0435 \u043d\u0430 \u0442\u0435\u043a\u0441\u0442
subscript.import.fail.title=\u041f\u0440\u043e\u0432\u0430\u043b \u043d\u0430 \u0438\u043c\u043f\u043e\u0440\u0442
subscript.import.fail.desc=\u041f\u043e\u0434\u0440\u043e\u0431\u043d\u043e\u0441\u0442\u0438: %1
@@ -2703,13 +2620,11 @@ Subscription.menu.reset=\u0423\u0441\u0442\u0430\u043d\u043e\u0432\u044f\u0432\u
ConfigView.section.Subscriptions=\u0410\u0431\u043e\u043d\u0430\u043c\u0435\u043d\u0442\u0438
subscriptions.config.maxresults=\u041c\u0430\u043a\u0441. \u0431\u0440\u043e\u0439 \u0440\u0435\u0437\u0443\u043b\u0442\u0430\u0442\u0438 \u0437\u0430 \u0437\u0430\u0434\u044a\u0440\u0436\u0430\u043d\u0435 \u0437\u0430 \u0430\u0431\u043e\u043d\u0430\u043c\u0435\u043d\u0442 [0: \u043d\u0435\u043e\u0433\u0440\u0430\u043d\u0438\u0447\u0435\u043d\u043e]
v3.activity.button.readall=\u041c\u0430\u0440\u043a\u0438\u0440\u0430\u043d\u0435 \u043d\u0430 \u0432\u0441\u0438\u0447\u043a\u043e \u043a\u0430\u0442\u043e \u043f\u0440\u043e\u0447\u0435\u0442\u0435\u043d\u043e
-ConfigView.interface.start.library=\u0421\u0442\u0430\u0440\u0442\u0438\u0440\u0430\u043d\u0435 \u0432 \u0431\u0438\u0431\u043b\u0438\u043e\u0442\u0435\u043a\u0430\u0442\u0430
TableColumn.header.activityNew=\u041d\u043e\u0432\u043e
TableColumn.header.activityType=\u0422\u0438\u043f
TableColumn.header.activityText=\u0421\u044a\u043e\u0431\u0449\u0435\u043d\u0438\u0435
TableColumn.header.activityDate=\u0414\u0430\u0442\u0430 \u043d\u0430 \u0434\u043e\u0431\u0430\u0432\u044f\u043d\u0435
TableColumn.header.activityActions=\u0414\u0435\u0439\u0441\u0442\u0432\u0438\u044f
-TableColumn.header.activityAvatar=\u0410\u0432\u0430\u0442\u0430\u0440
Subscription.menu.resetauth=\u041d\u0430\u043d\u043e\u0432\u043e \u043f\u043e\u0434\u0440\u043e\u0431\u043d\u043e\u0441\u0442\u0438 \u0437\u0430 \u0443\u0434\u043e\u0441\u0442\u043e\u0432\u0435\u0440\u044f\u0432\u0430\u043d\u0435
Search.menu.engines=\u0428\u0430\u0431\u043b\u043e\u043d\u0438
Wizard.Subscription.title=\u0410\u0431\u043e\u043d\u0438\u0440\u0430\u043d\u0435
@@ -2736,8 +2651,6 @@ Wizard.Subscription.rss.subtitle3=\u0421\u043b\u0435\u0434 \u0437\u0430\u043f\u0
Wizard.Subscription.subscribe.library=\u0421\u044a\u0434\u044a\u0440\u0436\u0430\u043d\u0438\u0435 \u0432 \u043c\u0435\u0441\u0442\u043d\u0430 \u0431\u0438\u0431\u043b\u0438\u043e\u0442\u0435\u043a\u0430
Wizard.Subscription.subscribe.subscriptions=\u0421\u0432\u044a\u0440\u0437\u0430\u043d\u0438 \u0430\u0431\u043e\u043d\u0430\u043c\u0435\u043d\u0442\u0438
Wizard.Subscription.subscribe.library.empty=\u041d\u044f\u043c\u0430 \u0430\u0431\u043e\u043d\u0430\u043c\u0435\u043d\u0442\u0438?\n \n\u0414\u0430 \u0441\u0435 \u0441\u043b\u0435\u0434\u0438 \u044f\u0440\u043a\u043e \u043e\u0440\u0430\u043d\u0436\u0435\u0432\u0438\u044f \u0431\u0443\u0442\u043e\u043d \u0437\u0430 \u0430\u0431\u043e\u043d\u0430\u043c\u0435\u043d\u0442\u0432\u044a\u0432 Vuze HD \u043c\u0440\u0435\u0436\u0430\u0442\u0430.\n \n<A HREF="http://faq.vuze.com/?View=entry&EntryID=288">\u041f\u043e-\u043f\u043e\u0434\u0440\u043e\u0431\u043d\u043e\u2026</A>
-TableColumn.header.Info=\u0418\u043d\u0444\u043e\u0440\u043c\u0430\u0446\u0438\u044f
-TableColumn.header.videoLength=\u0414\u044a\u043b\u0436\u0438\u043d\u0430 \u043d\u0430 \u0432\u0438\u0434\u0435\u043e
message.confirm.delete.title=\u041f\u043e\u0442\u0432\u044a\u0440\u0436\u0434\u0435\u043d\u0438\u0435 \u043d\u0430 \u0438\u0437\u0442\u0440\u0438\u0432\u0430\u043d\u0435
message.confirm.delete.text=\u0414\u0430 \u0441\u0435 \u0438\u0437\u0442\u0440\u0438\u0435 \u043b\u0438 \u043d\u0430\u0438\u0441\u0442\u0438\u043d\u0430 '%1'?
Subscription.menu.properties=\u0425\u0430\u0440\u0430\u043a\u0442\u0435\u0440\u0438\u0441\u0442\u0438\u043a\u0438
@@ -2790,8 +2703,6 @@ TableColumn.header.azsubs.ui.column.subs_link.info=\u0410\u0441\u043e\u0446\u043
Button.deleteContent.fromLibrary=\u041f\u0440\u0435\u043c\u0430\u0445\u0432\u0430\u043d\u0435 \u043e\u0442 \u0431\u0438\u0431\u043b\u0438\u043e\u0442\u0435\u043a\u0430\u0442\u0430
Button.deleteContent.fromComputer=\u0418\u0437\u0442\u0440\u0438\u0432\u0430\u043d\u0435 \u043e\u0442 \u043a\u043e\u043c\u043f\u044e\u0442\u044a\u0440\u0430
v3.deleteContent.message=\n\u0414\u0430 \u0441\u0435 \u0438\u0437\u0442\u0440\u0438\u0435 \u043b\u0438 '%1' \u043e\u0442 \u043a\u043e\u043c\u043f\u044e\u0442\u044a\u0440\u0430 \u0438\u043b\u0438 \u0441\u0430\u043c\u043e \u0434\u0430 \u0441\u0435 \u043f\u0440\u0435\u043c\u0430\u0445\u043d\u0435 \u043e\u0442 \u043c\u0435\u0441\u0442\u043d\u0430\u0442\u0430 Vuze \u0431\u0438\u0431\u043b\u0438\u043e\u0442\u0435\u043a\u0430?
-v3.library.infobar.text1=\u0420\u0430\u0437\u0448\u0438\u0440\u0435\u043d \u0438\u0437\u0433\u043b\u0435\u0434?
-v3.library.infobar.text2=\u0414\u0430 \u0441\u0435 \u0438\u0437\u043f\u043e\u043b\u0437\u0432\u0430 \u043f\u0440\u0435\u0432\u043a\u043b\u044e\u0447\u0432\u0430\u043d\u0435\u0442\u043e \u043d\u0430 \u0438\u0437\u0433\u043b\u0435\u0434 \u043e\u0442 \u0433\u043e\u0440\u043d\u0430\u0442\u0430 \u043b\u0435\u043d\u0442\u0430 \u0441 \u0438\u043d\u0441\u0442\u0440\u0443\u043c\u0435\u043d\u0442\u0438.
v3.MainWindow.menu.view.toolbartext=\u0422\u0435\u043a\u0441\u0442 \u043d\u0430 \u043b\u0435\u043d\u0442\u0438\u0442\u0435 \u0441 \u0438\u043d\u0441\u0442\u0440\u0443\u043c\u0435\u043d\u0442\u0438
v3.MainWindow.menu.view.asSimpleList=\u041e\u043f\u0440\u043e\u0441\u0442\u0435\u043d \u0441\u043f\u0438\u0441\u044a\u043a
v3.MainWindow.menu.view.asAdvancedList=\u0420\u0430\u0437\u0448\u0438\u0440\u0435\u043d \u0441\u043f\u0438\u0441\u044a\u043a
@@ -2818,16 +2729,6 @@ azbuddy.ui.menu.cat.share=\u0412\u043a\u043b\u044e\u0447\u0432\u0430\u043d\u0435
azbuddy.ui.menu.cat.set=\u0412\u044a\u0432\u0435\u0436\u0434\u0430\u043d\u0435 \u043d\u0430 \u043a\u0430\u0442\u0435\u0433\u043e\u0440\u0438\u0438
azbuddy.ui.menu.cat.set_msg=\u041a\u0430\u0442\u0435\u0433\u043e\u0440\u0438\u0438 \u0440\u0430\u0437\u0434\u0435\u043b\u0435\u043d\u0438 \u0441\u044a\u0441 \u0437\u0430\u043f\u0435\u0442\u0430\u0438, \u0438\u043b\u0438 '\u0432\u0441\u0438\u0447\u043a\u0438'
azbuddy.ui.menu.cat_subs=\u0410\u0431\u043e\u043d\u0430\u043c\u0435\u043d\u0442
-v3.buddy.prop.dn=\u041f\u043e\u043a\u0430\u0437\u0432\u0430\u043d\u043e \u0438\u043c\u0435
-v3.buddy.prop.un=\u0418\u043c\u0435 \u043d\u0430 \u043f\u043e\u0442\u0440\u0435\u0431\u0438\u0442\u0435\u043b
-v3.buddy.prop.on=\u041d\u0430 \u043b\u0438\u043d\u0438\u044f
-v3.buddy.prop.lupd=\u041f\u043e\u0441\u043b\u0435\u0434\u043d\u0430 \u0430\u043a\u0442\u0443\u0430\u043b\u0438\u0437\u0430\u0446\u0438\u044f
-v3.buddy.prop.pks=\u0411\u0440\u043e\u0439 \u043f\u0443\u0431\u043b\u0438\u0447\u043d\u0438 \u043a\u043b\u044e\u0447\u043e\u0432\u0435
-v3.buddy.prop.pc=\u0427\u0430\u043a\u0430\u0449\u0438 \u0441\u044a\u043e\u0431\u0449\u0435\u043d\u0438\u044f \u043e\u0442 \u043b\u0430\u0444\u0447\u0435\u0442\u043e
-v3.buddy.prop.catout=\u041c\u0435\u0441\u0442\u043d\u0438 \u043a\u0430\u0442\u0435\u0433\u043e\u0440\u0438\u0438, \u0437\u0430 \u043a\u043e\u0438\u0442\u043e \u0434\u0440\u0443\u0436\u043a\u0438\u0442\u0435 \u043c\u043e\u0436\u0435 \u0434\u0430 \u0441\u0435 \u0430\u0431\u043e\u043d\u0438\u0440\u0430\u0442
-v3.buddy.prop.catin=\u041a\u0430\u0442\u0435\u0433\u043e\u0440\u0438\u0438, \u043a\u043e\u0438\u0442\u043e \u0434\u0440\u0443\u0436\u043a\u0438\u0442\u0435 \u043f\u0440\u0435\u0434\u043b\u0430\u0433\u0430\u0442
-v3.buddy.set.catout=\u041f\u043e\u0437\u0432\u043e\u043b\u044f\u0432\u0430\u043d\u0435 \u043d\u0430 \u0434\u0440\u0443\u0436\u043a\u0430 \u0434\u0430 \u0441\u0435 \u0430\u0431\u043e\u043d\u0438\u0440\u0430 \u0437\u0430 \u043a\u0430\u0442\u0435\u0433\u043e\u0440\u0438\u044f\u0442\u0430
-v3.buddy.set.catin=\u0410\u0431\u043e\u043d\u0438\u0440\u0430\u043d\u0435 \u0437\u0430 \u043a\u0430\u0442\u0435\u0433\u043e\u0440\u0438\u044f \u043d\u0430 \u0434\u0440\u0443\u0436\u043a\u0430
subs.prop.update_period=\u041f\u0435\u0440\u0438\u043e\u0434 \u043d\u0430 \u0430\u043a\u0442\u0443\u0430\u043b\u0438\u0437\u0430\u0446\u0438\u044f
azbuddy.enable_cat_pub=\u041e\u0431\u0449\u043e\u0434\u043e\u0441\u0442\u044a\u043f\u043d\u0438 \u043a\u0430\u0442\u0435\u0433\u043e\u0440\u0438\u0438 \u0437\u0430 \u043a\u043e\u0438\u0442\u043e \u043c\u043e\u0433\u0430\u0442 \u0434\u0430 \u0441\u0435 \u0430\u0431\u043e\u043d\u0438\u0440\u0430\u0442 \u0432\u0441\u0438\u0447\u043a\u0438 \u0434\u0440\u0443\u0436\u043a\u0438 (',' \u0440\u0430\u0437\u0434\u0435\u043b\u0435\u043d\u0438)
v3.dialog.cnclose.title=%1 \u0435 \u0437\u0430\u0442\u0432\u043e\u0440\u0435\u043d\u0430
@@ -2844,12 +2745,9 @@ TableColumn.header.category.info=\u0418\u043c\u0430 \u043d\u0430 \u043a\u0430\u0
TableColumn.header.DateCompleted.info=\u0414\u0430\u0442\u0430 \u043d\u0430 \u0437\u0430\u0432\u044a\u0440\u0448\u0432\u0430\u043d\u0435 \u0441\u0432\u0430\u043b\u044f\u043d\u0435\u0442\u043e \u043d\u0430 \u0442\u043e\u0440\u0435\u043d\u0442
TableColumn.header.AzProduct.info=\u0421\u044a\u0434\u044a\u0440\u0436\u0430\u0442\u0435\u043b\u043d\u0430 \u043c\u0440\u0435\u0436\u0430, \u043e\u0442 \u043a\u043e\u044f\u0442\u043e \u043f\u0440\u043e\u0438\u0437\u0445\u043e\u0436\u0434\u0430 \u0442\u043e\u0440\u0435\u043d\u0442\u044a\u0442
TableColumn.header.health.info=\u041a\u043e\u043b\u043a\u043e \u0437\u0434\u0440\u0430\u0432\u0430 \u0435 \u0432\u0440\u044a\u0437\u043a\u0430\u0442\u0430 \u0434\u043e \u0440\u043e\u044f\u043a\u0430 \u043d\u0430 \u0442\u043e\u0440\u0435\u043d\u0442\u0430
-TableColumn.header.Info.info=\u0411\u0443\u0442\u043e\u043d, \u0441\u0442\u0430\u0440\u0442\u0438\u0440\u0430\u0449 \u0441\u0442\u0440\u0430\u043d\u0438\u0446\u0430\u0442\u0430 \u0441 \u043f\u043e\u0434\u0440\u043e\u0431\u043d\u043e\u0441\u0442\u0438 \u043d\u0430 Vuze \u0441\u044a\u0434\u044a\u0440\u0436\u0430\u043d\u0438\u0435\u0442\u043e
TableColumn.header.maxuploads.info=\u041c\u0430\u043a\u0441\u0438\u043c\u0430\u043b\u0435\u043d \u0431\u0440\u043e\u0439 \u0440\u0430\u0432\u043d\u043e\u043f\u043e\u0441\u0442\u0430\u0432\u0435\u043d\u0438, \u043a\u044a\u043c \u043a\u043e\u0438\u0442\u043e \u0435\u0434\u043d\u043e\u0432\u0440\u0435\u043c\u0435\u043d\u043d\u043e \u0441\u0435 \u043a\u0430\u0447\u0432\u0430
TableColumn.header.name.info=\u0418\u043c\u0435 \u043d\u0430 \u0442\u043e\u0440\u0435\u043d\u0442
TableColumn.header.unopened.info=\u0424\u043b\u0430\u0433 \u0437\u0430 \u0438\u043d\u0434\u0438\u043a\u0430\u0446\u0438\u044f \u0434\u0430\u043b\u0438 \u0442\u043e\u0440\u0435\u043d\u0442\u044a\u0442 \u0435 \u0438\u0437\u043f\u044a\u043b\u043d\u044f\u0432\u0430\u043d (\u043e\u0442\u0432\u0430\u0440\u044f\u043d)
-TableColumn.header.Quality.info=\u041a\u0430\u0447\u0435\u0441\u0442\u0432\u043e \u043d\u0430 Vuze \u0441\u044a\u0434\u044a\u0440\u0436\u0430\u043d\u0438\u0435\u0442\u043e \u043a\u0430\u0442\u043e HD, SD
-TableColumn.header.RateIt.info=\u0412\u044a\u0437\u043c\u043e\u0436\u043d\u043e\u0441\u0442 \u0437\u0430 \u0433\u043b\u0430\u0441\u0443\u0432\u0430\u043d\u0435 \u043d\u0430 Vuze \u0441\u044a\u0434\u044a\u0440\u0436\u0430\u043d\u0438\u0435
TableColumn.header.savepath.info=\u0426\u0435\u043b\u0435\u0432\u0430\u0442\u0430 \u043f\u0430\u043f\u043a\u0430 \u0438\u043b\u0438 \u0444\u0430\u0439\u043b \u0437\u0430 \u0434\u0430\u043d\u043d\u0438\u0442\u0435 \u043d\u0430 \u0442\u043e\u0440\u0435\u043d\u0442\u0430
TableColumn.header.SeedingRank.info=\u0420\u0430\u043d\u0433, \u043f\u043e\u043a\u0430\u0437\u0432\u0430\u0449 \u043a\u043e\u043b\u043a\u043e \u043c\u043d\u043e\u0433\u043e \u0442\u043e\u0440\u0435\u043d\u0442\u044a\u0442 \u0438\u0437\u0438\u0441\u043a\u0432\u0430 \u0441\u0435\u0435\u043d\u0435. \u041f\u043e-\u0432\u0438\u0441\u043e\u043a\u0430 \u0441\u0442\u043e\u0439\u043d\u043e\u0441\u0442 \u0437\u043d\u0430\u0447\u0438 \u043f\u043e-\u0433\u043e\u043b\u044f\u043c\u0430 \u043d\u0443\u0436\u0434\u0430.
TableColumn.header.shareRatio.info=\u041a\u043e\u043b\u043a\u043e \u0435 \u043a\u0430\u0447\u0435\u043d\u043e (\u0441\u043f\u043e\u0434\u0435\u043b\u0435\u043d\u043e) \u0441\u043f\u0440\u044f\u043c\u043e \u0441\u0432\u0430\u043b\u0435\u043d\u043e\u0442\u043e.
@@ -2859,7 +2757,6 @@ TableColumn.header.upspeed.info=\u0422\u0435\u043a\u0443\u0449\u0430 \u0441\u043
TableColumn.header.downspeed.info=\u0422\u0435\u043a\u0443\u0449\u0430 \u0441\u043a\u043e\u0440\u043e\u0441\u0442 \u043d\u0430 \u0441\u0432\u0430\u043b\u044f\u043d\u0435
TableColumn.header.up.info=\u0422\u0435\u043a\u0443\u0449\u043e \u043a\u043e\u043b\u0438\u0447\u0435\u0441\u0442\u0432\u043e \u0434\u0430\u043d\u043d\u0438 \u0438\u0437\u043f\u0440\u0430\u0442\u0435\u043d\u0438 \u043d\u0430 \u0434\u0440\u0443\u0433\u0438 \u043f\u043e\u0442\u0440\u0435\u0431\u0438\u0442\u0435\u043b\u0438
TableColumn.header.down.info=\u0422\u0435\u043a\u0443\u0449\u043e \u043a\u043e\u043b\u0438\u0447\u0435\u0441\u0442\u0432\u043e \u0434\u0430\u043d\u043d\u0438 \u043f\u043e\u043b\u0443\u0447\u0435\u043d\u0438 \u043e\u0442 \u0434\u0440\u0443\u0433\u0438 \u043f\u043e\u0442\u0440\u0435\u0431\u0438\u0442\u0435\u043b\u0438
-TableColumn.header.videoLength.info=\u0412\u0440\u0435\u043c\u0435 \u0437\u0430 \u0438\u0437\u043f\u044a\u043b\u043d\u0435\u043d\u0438\u0435 \u043d\u0430 Vuze \u0432\u0438\u0434\u0435\u043e \u0441\u044a\u0434\u044a\u0440\u0436\u0430\u043d\u0438\u0435
TableColumn.header.ProgressETA.info=\u041a\u043e\u043c\u0431\u0438\u043d\u0438\u0440\u0430 \u043a\u043e\u043b\u043e\u043d\u0438 \u0437\u0430 \u0441\u044a\u0441\u0442\u043e\u044f\u043d\u0438\u0435, \u0437\u0430\u0432\u044a\u0440\u0448\u0435\u043d\u043e\u0441\u0442, \u041e\u0412\u0417 \u0438 \u0441\u043a\u043e\u0440\u043e\u0441\u0442 \u043d\u0430 \u0441\u0432\u0430\u043b\u044f\u043d\u0435 \u0432 \u0435\u0434\u043d\u0430 \u043c\u043d\u043e\u0433\u043e\u0440\u0435\u0434\u043e\u0432\u0430 \u043a\u043e\u043b\u043e\u043d\u0430.
TableColumn.header.eta.info=\u041e\u0447\u0430\u043a\u0432\u0430\u043d\u043e \u0432\u0440\u0435\u043c\u0435 \u043f\u0440\u0435\u0434\u0438 \u043f\u0440\u0438\u043a\u043b\u044e\u0447\u0432\u0430\u043d\u0435 \u0441\u0432\u0430\u043b\u044f\u043d\u0435\u0442\u043e \u043d\u0430 \u0442\u043e\u0440\u0435\u043d\u0442
Pieces.column.#=\u2116
@@ -2919,5 +2816,4 @@ General.percent=%
devices.installed=\u0418\u043d\u0441\u0442\u0430\u043b\u0438\u0440\u0430\u043d\u043e
devices.comp.missing=\u041d\u0435 \u0435 \u0438\u043d\u0441\u0442\u0430\u043b\u0438\u0440\u0430\u043d\u0430 Vuze \u043f\u043e\u0434\u0434\u0440\u044a\u0436\u043a\u0430
devices.state=\u041a\u0430\u043a \u0435
-# The remaining keys were not in MessagesBundle.properties
i18n.bg_BG.Contact=Andrey Marinov andreshko at hotmail.bg
diff --git a/org/gudy/azureus2/internat/MessagesBundle_bs_BA.properties b/org/gudy/azureus2/internat/MessagesBundle_bs_BA.properties
index 136073e..c85f421 100644
--- a/org/gudy/azureus2/internat/MessagesBundle_bs_BA.properties
+++ b/org/gudy/azureus2/internat/MessagesBundle_bs_BA.properties
@@ -1,3 +1,4 @@
+#There is a plugin to help with internationalizing these bundles at http://azureus.sourceforge.net/plugin_list.php
MainWindow.menu.file.open.torrent=Fajl .torrent
Main.parameter.usage=Upotreba : java org.gudy.azureus2.cl.Main [parametri] "file.torrent" "put snimanja"
Main.parameter.maxUploads=Max broj slanja
@@ -351,7 +352,6 @@ MyTorrentsView.menu.removeand.deletedata=Izbrisi podatke
MyTorrentsView.menu.removeand.deleteboth=Sve izbrisi
deletedata.title=!!! Paznja !!!
deletedata.message1=Brisete PODATKE od :\n
-deletedata.message2=\nJeste sigurni da zelite nastavi?
MainWindow.menu.file.configure=Pomocnik konfiguracije
configureWizard.title=Pomocnik Konfiguracije
configureWizard.welcome.title=Dobrodosli na Pomocnicku Konfiguraciju Azureus-a
@@ -477,7 +477,6 @@ MyTorrentsView.menu.host.error.message=Sljedeca grijeska se desila prije Hosta o
ConfigView.section.tracker.pollinterval=Interval veze trackera (sek)
ConfigView.section.tracker.publishenable=Posalji detalje o torrent-u na "<tracker_url>"
ConfigView.section.tracker.ip=Eksterna IP trackera
-MainWindow.menu.help.faq=FAQ
ConfigView.section.style.enableXPStyle=Aktiviraj XP stil (potrebno restart)
ConfigView.section.tracker.checkip=Provera adrese...
ipCheckerWizard.title=Pomocnik provere IP
@@ -508,7 +507,6 @@ splash.openViews=Otvaranje Izgleda
splash.plugin=Otvaranje dodatka :
configureWizard.nat.tooManyPorts=Previse portova za probu (max 9)
ConfigView.section.color=Boja Tema
-PeerSocket.unknown=Nepoznat
MyTorrentsView.menu.publish=&Publish...
MyTrackerView.status.published=Postavljeno
MyTrackerView.completed=Zavrseno
@@ -519,9 +517,15 @@ ConfigView.section.file.decoder.label=Standardno kodiranje kada treba odabranje
ConfigView.section.file.decoder.nodecoder=Nijedan
IPChecker.external.service.no-ip.description=Provajder DNS dinamicnih i staticnih\n(ni jedan besplatan servise provere IP)
ConfigView.section.tracker.publicenable=Omoguci eksterni Torrent
+#
+# Tooltips
+#
GeneralView.label.status.pieces_available.tooltip=Pokazuje broj dostupnih kopija.\nAko je desni broj manji od 1, ne vidite celu kopiju.
GeneralView.label.trackerurl.tooltip=Kliknuti za kopiju url u clipboard
GeneralView.label.trackerurlopen.tooltip=Kliknuti za otvaranje glavnog lista trackera
+#
+# 2.0.4.4
+#
ConfigView.section.style.guiUpdate=Obnovi GUI svakih
ConfigView.section.style.graphicsUpdate=Obnovi graficke trake svaki N GUI obnove
ConfigView.section.style.reOrderDelay=Uredi kolone svake N GUI obnove [0: nikada]
@@ -653,6 +657,9 @@ health.explain.yellow=Tracker ok, klijenti su prikljuceni, ali ni jedna ulazna v
health.explain.green=Sve funkcionise kako treba.
ConfigView.section.style.alwaysRefreshMyTorrents=Uvijek obnovi 'Moji .torrent'
ConfigView.section.style.alwaysRefreshMyTorrents.tooltip=Opcija obnavlja 'Moji .torrent' i ako prozor nije pokaza (korisno za neki mirc dodatci)
+#
+#2.0.7.0
+#
security.certtruster.title=Upozorenje certifikata sigurnosti
security.certtruster.intro=Certifikat je od firme kojoj ne vijerujete
security.certtruster.resource=Resurs:
@@ -705,6 +712,9 @@ ConfigView.section.style.dropdiraction=Klizaj-pomeri za direktorijume
ConfigView.section.style.dropdiraction.opentorrents=Otvori Torrent
ConfigView.section.style.dropdiraction.sharefolder=Folder dijeljenja
ConfigView.section.style.dropdiraction.sharefoldercontents=Dijeljen sadrzaj
+#
+# 2.0.7.x
+#
Categories.all=Sve
Categories.uncategorized=Bez kategorije
CategoryAddWindow.message=Unesi ime nove kategorije
@@ -783,7 +793,6 @@ ConfigView.text.minutes=minuta
ConfigView.text.neverIgnore=Nikada Ignorisati
ConfigView.text.any=nijedan
DownloadManager.error.datamissing=Fali podatke
-iconBar.queue.tooltip=Red
MainWindow.menu.file.open.torrentforseeding=Fajl .torrent (za izvor)
MainWindow.menu.language.refresh=Obnovi
ManagerItem.forced=Natijerano
@@ -850,6 +859,9 @@ SpeedView.stats.downloaded=Skinuto
SpeedView.stats.uploaded=Poslano
SpeedView.stats.uptime=Radi vec (sati)
AutoMigration.useralert=Rezultat automatske promijene fajlova i foldera od Vuze \n\n%1\n%2POGRIJESNE PROMIJENE TREBAJU DA SE URADE RUCNO U KONFIGURACIJI.
+#
+# > 2.0.8.0
+#
OpenTorrentWindow.title=Otvori .torrent
OpenTorrentWindow.message=Eksperimentalno
OpenTorrentWindow.addFiles=Dodaj fajl
@@ -920,7 +932,6 @@ Scrape.status.error=Scrape Greska:
Scrape.status.error.nohash=Nedostaje Hash odgovora.
Scrape.status.error.invalid=Pogresan Odgovor.
Scrape.status.nextScrapeAt=Sledeci scrape u %1
-Scrape.status.scraping=Scraping...
Scrape.status.initializing=Cekanje 'Scrape'
ConfigView.label.minSpeedForActiveSeeding=Ne broj zavrseni .torrent kao da koristi slot ako je brzina ispod
MainWindow.menu.view.irc.moved=Irc nije dodatak, videti http://azureus.sourceforge.net/plugin_list.php
@@ -1081,6 +1092,8 @@ MyTrackerView.badnat.info=Deljenja/Izvora pogresno proverili NAT, ako omoguceno
ConfigView.section.tracker.natchecktimeout=Provijeri Tajmout (sek)
ConfigView.section.file.perf.cache.enable=Omoguci Kes Diska
ConfigView.section.file.perf.cache.size=Velicina Kesa u %1
+#Removed
+#MyTorrentsView.menu.setSpeed=Set Upload Speed
ConfigView.label.experimental.osx.kernel.panic.fix=Probni lepak za paniku procesora na 2 cpu OSX [potrebno pokretanje]
ConfigView.section.file.truncate.too.large=Iseci postojeci fajlovi koji su preveliki
ConfigView.section.file.perf.cache.trace=Prati operacije kesa za dijagnostik
@@ -1127,7 +1140,6 @@ ConfigView.section.connection.network.max.simultaneous.connect.attempts=Max simu
ConfigView.section.connection.network.max.simultaneous.connect.attempts.tooltip=Max number of new outbound connection establishments Vuze should attempt any given time.\nNOTE: WindowsXP Service Pack 2 (SP2) imposes a system-wide limit of 10 simultaneous connect attempts.\nDefault value is 8. Value of 0 disables outbound connects entirely.
ConfigView.section.file.perf.cache.size.explain=The cache is used to reduce reads from/writes to disk. Unless you are using the java option '-XX:MaxDirectMemorySize' to explicitly set the memory available for cache and network IO use, you should keep this value at least %1 below your maximum VM size. The current maximum VM size is %2. For instructions on how to change this, see MemoryUsage in the wiki on %3. Failure to use sensible settings will result on 'out of memory' errors. More than 32MB of cache is probably overkill.
ConfigView.section.tracker.client=Klijent
-ConfigView.label.announceport=Prebrisati tracker obznaniti port
ConfigView.group.override=Prebrisati Opcije
ConfigView.section.connection.advanced=Napredno Postavljanje Mreze
ConfigView.label.openstatsonstart=Otvori Statistiku pri startu
@@ -1153,7 +1165,6 @@ Button.apply=Primeniti
Button.close=zatvori
window.welcome.title=Dobrodosao kod Vuze %1
#file can be a URL or a path in the jar
-window.welcome.file=/changelog.txt
dht.reseed.label=Normally reseeding of the Distributed Database is not necessary. However, if the number of contacts is low this can be used for re-integratation.\nLeave blank to bootrap off connected peers or enter IP and port to explicitly bootstrap from a known peer.
MainWindow.dht.status.disabled=Disabled
MainWindow.dht.status.failed=Failed
@@ -1175,13 +1186,14 @@ diagnostics.log_found=Vuze se nije zatvorio kako treba. Proveri %1 zurnal fajl i
ConfigView.section.connection.serverport.wiki=Dobro odabrane ports
Views.plugins.UPnP.title=UPnP
ConfigView.section.logging.log0type=Informacije
+# %1 = "in kbps" or ""; %2 = "upload" or "download"
OpenTorrentWindow.torrentLocation=Torrent fajl:
Button.moveUp=Premijesti gore
Button.moveDown=Premijesti dole
-# The remaining keys were not in MessagesBundle.properties
-ConfigView.section.file.check_piece_limit.explain=Ako je vas racun spor i provera hash-a je sporija nego snimanje dela na disku (vise zavrsene dela u pregled delova), moze se smanjiti dela istovremenih preuzimanja delova da se smanji upotreba memorije
-ConfigView.section.file.write_block_limit.explain=Ako imate slabu performansu pisanja na disku (pisanje je sporije nego brzina preuzimanja),\nograniciti velicinu pisanja moze spustiti upotrebu memorije
-MainWindow.dht.status.running=Running
-ConfigView.section.file.check_piece_limit=Maks provera delova\n[0: neograniceno]. Velicina delova zavisi od Torrent
-ConfigView.section.file.write_block_limit=Maks blok pisanja\n[0: neograniceno]. Velicina bloka %1
+# > 2402
+# Used for peers which we can't determine.
+PeerSocket.unknown=Nepoznat
+ConfigView.label.announceport=Prebrisati tracker obznaniti port
+iconBar.queue.tooltip=Red
+MainWindow.menu.help.faq=FAQ
MainWindow.menu.help.donate=Dati donaciju ($2,$5,...)
diff --git a/org/gudy/azureus2/internat/MessagesBundle_ca_AD.properties b/org/gudy/azureus2/internat/MessagesBundle_ca_AD.properties
index 6a64d11..5773cee 100644
--- a/org/gudy/azureus2/internat/MessagesBundle_ca_AD.properties
+++ b/org/gudy/azureus2/internat/MessagesBundle_ca_AD.properties
@@ -698,7 +698,6 @@ ConfigView.section.style.alwaysRefreshMyTorrents.tooltip=Aquesta opci\u00f3 refr
#
#2.0.7.0
#
-ConfigView.section.style.verticaloffset=Desplacament Vertical dels Gr\u00e0fics (GTK fix)
security.certtruster.title=Av\u00e9s del Certificat de Seguretat
security.certtruster.intro=Una empresa de qui no us refieu ha em\u00e8s el certificat de seguretat
security.certtruster.resource=Recurs:
@@ -1597,7 +1596,6 @@ OpenTorrentWindow.mb.badSize.text='%1' no \u00e9s '%2' i no es pot fer servir pe
OpenTorrentWindow.mb.alreadyExists.title=Ja existeix
OpenTorrentWindow.mb.openError.title=Error en obrir
OpenTorrentWindow.mb.openError.text='%1' no es pot obrir:
-\n%2
OpenTorrentWindow.torrent.remove=Elimina el torrent de la llista
OpenTorrentWindow.torrent.options=Les caracter\u00edsitques seg\u00fcents s'aplicaran als torrents que seleccioneu a continuaci\u00f3:
OpenTorrentWindow.xOfTotal=(%1 de %2)
@@ -1663,7 +1661,6 @@ PeerColumn.activationCount=Iguals intentant connectar: %1
MainWindow.menu.view.iconbar=Barra d'eines
MyTorrentsView.menu.rename=Reanomena
MyTorrentsView.menu.rename.displayed=Canvia el nom que es mostra
-MyTorrentsView.menu.rename.displayed_and_save_path=Reanomena'ls tots dos
MyTorrentsView.menu.rename.displayed.enter.title=Canvia el nom que es mostra
MyTorrentsView.menu.rename.displayed.enter.message=Introdu\u00efu un nom nou per mostrar per aquesta desc\u00e0rrega.
MyTorrentsView.menu.edit_comment=Edita el comentari
@@ -1827,46 +1824,20 @@ Button.bar.share=Comparteix
Button.bar.add=Afegeix
Button.bar.edit=Edita
Button.bar.edit.cancel=Edici\u00f3 feta
-v3.Share.optional.message=Missatge opcional lliurat per notificacions (m\u00e0xim 140 car\u00e0cters):
-v3.activity.buddy-request=Teniu una sol\u00b7licitud d'amistat de %1
-v3.activity.buddy-request.accept=Accepta
-v3.activity.buddy-request.multi=Teniu una sol\u00b7licitud d'amistat [#%3] de %1
-v3.activity.buddy-linkup=Ara, tu i %1 sou amics
-v3.activity.share-content=%1 ha compartit %2 amb vosaltres. %3 <A HREF="%4" TITLE="%5">diu...</A>
-v3.activity.share-content.no-msg=%1 ha compartit %2 amb vosaltres
-v3.buddies.add.to.share=Afegiu amics per compartir
MainWindow.dialog.select.vuze.file=Selecciona un fitxer del Vuze
MainWindow.menu.file.open.vuze=Fitxer del Vuze...
metasearch.addtemplate.title=Voleu instal\u00b7lar la plantilla de cerca?
metasearch.addtemplate.desc=Segur que voleu instal\u00b7lar una plantilla de cerca anomenada '%1'?
-v3.buddies.disabled.title=Complement d'amics deshabilitat
-v3.buddies.disabled.text._windows=Heu deshabilitat el complement d'amics, fet que impedeix que compartiu o accepteu torrents o sol\u00b7licitud d'amistat. Ho podeu habilitar des de la pestanya d'opcions.
-v3.buddies.disabled.text._mac=Heu deshabilitat el complement d'amics, fet que impedeix que compartiu o accepteu torrents o sol\u00b7licitud d'amistat. Ho podeu habilitar des de la pestanya d'opcions.
metasearch.addtemplate.dup.title=Duplica la plantilla
metasearch.addtemplate.dup.desc=La plantilla de cerca %1 ja est\u00e0 instal\u00b7lada
metasearch.export.select.template.file=Desa la plantilla
metasearch.import.select.template.file=Obre la plantilla
azbuddy.protocolspeed=KB/s m\u00e0x friend protocol overhead
-v3.activity.header.friend.requests.foryou=Sol\u00b7licituds d'amistat - Per a vosaltres
-v3.activity.header.friend.requests.fromyou=Sol\u00b7licituds d'amistats - Vostres
-v3.activity.header.friend.requests.accepted=Sol\u00b7licituds d'amistat - Acceptades
-v3.activity.header.share.requests=Compartiu sol\u00b7licituds de torrent
v3.activity.header.downloads=Desc\u00e0rregues
v3.activity.header.vuze.news=Not\u00edcies del Vuze
-login.optional.message=Heu d'entrar per fer servir aquesta caracter\u00edsitca
-message.confirm.share.singular=Perfecte! La vostra sol\u00b7licitud per compartir un torrent s'ha enviat.
-message.confirm.share.plural=Perfecte! Les vostres sol\u00b7licituds per compartir un torrent s'han enviat.
-message.confirm.share.invite.singular=Perfecte! La vostra sol\u00b7licitud de connectar i compratir s'ha enviat. Feel free to gently coax your friend to accept.
-message.confirm.share.invite.plural=Perfecte! La vostra sol\u00b7licitud de connectar i compartir s'ha enviat. Feel free to gently coax your friend to accept.
-message.confirm.invite.singular=Perfecte! La vostra sol\u00b7licitud s'ha enviat. Feel free to gently coax your friend to accept.
-message.confirm.invite.plural=Perfecte! La vostres sol\u00b7licituds d'amistat s'han enviat. Feel free to gently coax your friends to accept.
-message.prompt.add.friends=Seleccioneu amics de la barra lateral (extrem inferior esquerre)
message.taking.too.long=Sembla que tarda m\u00e9s del que caldria\nPremeu 'ESC' si voleu cancel\u00b7lar l'operaci\u00f3
message.status.success=\u00c8xit
-message.intro.friends=Afegiu amics.\nCompartiu torrents.\nDescarregueu m\u00e9s r\u00e0pid.
azbuddy.tracker.bbb.status.nli=Cal que us registreu
-v3.activity.buddy-invited=Heu enviat una sol\u00b7licitud d'amistat a %1.
-v3.activity.buddy-invited.multi=Heu enviat una sol\u00b7litud d'amistat a les persones seg\u00fcents:\n%1
metasearch.addtemplate.done.title=Pantilla afegida
metasearch.addtemplate.done.desc=La plantilla '%1' s'ha afegit correctament.\nEs far\u00e0 servir en la propera cerca!
ConfigView.section.security.nopw=No heu indicat cap contrasenya
@@ -1881,10 +1852,7 @@ azbuddy.os_away=No hi s\u00f3c
azbuddy.os_not_avail=No disponible
azbuddy.os_busy=Ocupat
azbuddy.os_offline=Desconnectat
-v3.chat.offline=%1 ara est\u00e0 desconnectat. Rebr\u00e0 el misstage quan es torni a connectar.
azbuddy.enable_chat_notif=Habilita les nostificacions de xat
-v3.buddies.dnd.info.dialog.ok=Fet
-v3.buddies.dnd.info.dialog.remember=No tornis a mostrar aquest missatge
DetailedListView.title=Llista detallada
azsubs.contextmenu.addassoc=Afegeix una associaci\u00f3 de subscripci\u00f3
azsubs.contextmenu.lookupassoc=Cerca associacions de subscripci\u00f3
@@ -1899,16 +1867,12 @@ MainWindow.menu.help.faq=&FAQ
MainWindow.menu.community.wiki=&Wiki de la comunitat
MainWindow.menu.community.forums=F\u00f2&rums de la comunitat
MainWindow.menu.community.blog=&Blog del Vuze
-MainWindow.menu.community.add_friends=&Afegeix amics
MainWindow.menu.help.support=&Ajuda i suport
externalLogin.title=Cal que us registreu
externalLogin.explanation=La caracter\u00edsitca "%1" requereix que us registreu. Un cop registrats aquesta finestra es tancar\u00e0 autom\u00e0ticament. Si no ho fa, cliqueu a "Fet".
externalLogin.explanation.capture=Cal que us registreu per crear aquest plantilla. Quan ho hagueu fet, feu clic a "Fet".
Button.done=Fet
GeneralView.torrent_created_on_and_by=%1 per %2
-v3.AddFriends.header.message=Afegiu amics per comen\u00e7ar a compartir els vostres torrents preferits
-v3.AddFriends.header=Afegiu amics
-v3.AddFriends.wizard.title=Afegiu amics -- Auxiliar
Button.continue=Continua
Button.preview=Previsualitzaci\u00f3
Subscription.menu.forcecheck=Actualitza-ho ara
@@ -1919,9 +1883,6 @@ sidebar.LibraryDL=Descarregant
sidebar.LibraryCD=Complet
authenticator.location=Localitzaci\u00f3
authenticator.details=Detalls
-v3.MainWindow.menu.publish.new=Publica contingut nou
-v3.MainWindow.menu.publish.mine=El contingut publicat
-v3.MainWindow.menu.publish.about=Sobre puublicar...
Subscription.menu.export=Exporta
Button.remove=Esborra
Button.send=Envia
@@ -1933,7 +1894,6 @@ Subscription.menu.reset=Recupera l'estat incial
ConfigView.section.Subscriptions=Subscripcions
subscriptions.config.maxresults=Nombre m\u00e0xim de resultats per subscripci\u00f3 [0: il\u00b7limitat]
v3.activity.button.readall=Marca'ls tots com a llegits
-ConfigView.interface.start.library=Comen\u00e7a a la biblioteca
Subscription.menu.resetauth=Esborraels detalls d'identificaci\u00f3
#what you've watched? Discover more with a single click...
Wizard.Subscription.create.title=Crea una subscrpci\u00f3 nova
@@ -2049,30 +2009,3 @@ devices.copy_url=Copia el flux URL al porta-retalls
devices.converting=Convertint
Button.reload=Torna a carregar
devices.auto.start=Obertura autom\u00e0tica
-# The remaining keys were not in MessagesBundle.properties
-Main.download.state.downloading=Descarregant
-ConfigView.section.logging.log1component=Enregistrar el protocol de transport d'iguals
-Main.download.state.waiting=Esperant
-ConfigView.section.file.check_piece_limit.explain=Si teniu una CPU lenta de manera que els c\u00e0lculs de hash alenteixen l'escriptura al disc (a la vista de peces hi ha numeroses peces completes), limitant la longitut de la cua de comprovaci\u00f3 pot disminuir el consum de mem\u00f2ria
-MainWindow.dht.status.running=Execuci\u00f3
-Main.download.state.allocating=Establint
-ConfigView.section.file.write_block_limit.explain=Si teniu poc rendiment de disc tal que l'escriptura a disc \u00e9s m\u00e9s lenta que la velocitat de desc\u00e0rrega (a la vista de peces hi han numbrosos blocs vermells), limitant la longitud de la cua d'escriptura pot disminuir el consum de mem\u00f2ria
-Main.download.state.ready=Preparat
-Cal=Llegiu la descripci\u00f3 del m\u00f2duls abans de decidir si s'instal\u00b7len.\nuualment el m\u00f2duls s\u00f3n segurs i es poden provar, per\u00f2 tingueu cura a no sobrecarregar el Vuze amb m\u00f2duls que no us fan cap servei.
-ConfigView.section.logging.log4component=Desa el registre d'iguals
-ConfigView.connection.group.proxy=Opcions de l'intermediari
-LocaleUtil.column.filename=Fitxer
-Main.download.state.error=Error
-ConfigView.section.connection.advanced.IPTOS=Tipus-de-servei (TOS) per paquet sortint [ex. 0x02, 0x10]
-ConfigView.section.logging.log3type=Error
-ConfigView.connection.group.advanced=Configuraci\u00f3 avan\u00e7ada de la xarxa
-Main.download.state.checking=Comprovant
-Main.download.state.seeding=Compartint
-ConfigView.section.file.write_block_limit=M\u00e0xim pendent d'escriptures de blocs a disc\n[0: il\u00b7limitat]. Mida de bloc %1
-ConfigView.label.announceport.tooltip=Informa el rastrejador d'un port diferent d'aquell en qu\u00e8 esteu escoltant. Deixeu-ho en blanc per no fer servir aquesta opci\u00f3.
-ConfigView.connection.group.advanced.tooltip=http://www.azureuswiki.com/index.php/AdvancedNetworkSettings
-ConfigView.section.logging.log0component=Anotaci\u00f3 general
-ConfigView.section.file.check_piece_limit=Peces pendents m\u00e0xim per comprovar\n[0: il\u00b7limitat]. La mida de la pe\u00e7a dep\u00e8n del torrent
-ConfigView.section.logging.log2component=Log rastrejador client
-deletedata.message2=\nSegur que voleu continuar?
-Main.download.state.stopped=Desocupat
diff --git a/org/gudy/azureus2/internat/MessagesBundle_cs_CZ.properties b/org/gudy/azureus2/internat/MessagesBundle_cs_CZ.properties
index 159d1d0..1e39170 100644
--- a/org/gudy/azureus2/internat/MessagesBundle_cs_CZ.properties
+++ b/org/gudy/azureus2/internat/MessagesBundle_cs_CZ.properties
@@ -1,3 +1,4 @@
+#There is a plugin to help with internationalizing these bundles at http://azureus.sourceforge.net/plugin_list.php
MainWindow.menu.file.open.torrent=.torrent soubor
Main.parameter.usage=Pou\u017eit\u00ed : java org.gudy.azureus2.cl.Main [parametry] "soubor.torrent" "c\u00edlov\u00e1 slo\u017eka"
Main.parameter.maxUploads=Maxim\u00e1ln\u00ed po\u010det simult\u00e1ln\u00edch upload\u016f
@@ -370,7 +371,6 @@ MyTorrentsView.menu.removeand.deletedata=Smazat &data
MyTorrentsView.menu.removeand.deleteboth=Smazat .torrent &i data
deletedata.title=!!! Upozorn\u011bn\u00ed !!!
deletedata.message1=Chyst\u00e1te se smazat data z :\n
-deletedata.message2=\nOpravdu si p\u0159ejete pokra\u010dovat?
MainWindow.menu.file.configure=Spustit Pr\u016fvodce nastaven\u00ed
configureWizard.title=Pr\u016fvodce nastaven\u00ed
configureWizard.welcome.title=V\u00edtejte v Pr\u016fvodci nastaven\u00ed
@@ -502,7 +502,6 @@ ConfigView.section.tracker=Server
ConfigView.section.tracker.pollinterval=Interval mezi dotazy klienta trackeru (sec)
ConfigView.section.tracker.publishenable=Publikovat detaily o Torrentech do "<tracker_url>"
ConfigView.section.tracker.ip=Ve\u0159ejn\u00e1 IP adresa trackeru
-MainWindow.menu.help.faq=&Wiki \u010cast\u00e9 dotazy
ConfigView.section.style.enableXPStyle=Povolit XP styl (vy\u017eaduje restart programu)
IPChecker.external.service.dyndns.description=Dynamick\u00fd DNS S\u00ed\u0165 srvis, LLC
ConfigView.section.tracker.checkip=Zjistit ve\u0159ejnou IP adresu...
@@ -536,7 +535,6 @@ splash.openViews=Otev\u00edr\u00e1n\u00ed z\u00e1lo\u017eek
splash.plugin=Na\u010d\u00edt\u00e1n\u00ed dopl\u0148ku :
configureWizard.nat.tooManyPorts=P\u0159\u00edli\u0161 mnoho port\u016f na testov\u00e1n\u00ed (maxim\u00e1ln\u011b 9)
ConfigView.section.color=Barevn\u00e9 sch\u00e9ma
-PeerSocket.unknown=Nezn\u00e1m\u00fd
MyTorrentsView.menu.publish=Publikovat...
MyTrackerView.status.published=Publikov\u00e1n
MyTrackerView.completed=Dokon\u010den\u00ed
@@ -552,9 +550,15 @@ IPChecker.external.service.no-ip.description=Poskytovatel dynamick\u00e9ho a sta
ConfigView.section.tracker.publicenable=Povolit ve\u0159ejn\u00e9 torrenty
ConfigView.label.playdownloadspeech=Ozn\u00e1mit, kdy je download (stahov\u00e1n\u00ed) ukon\u010den
ConfigView.label.playdownloadspeech.info=Hovorov\u00e9 slu\u017eby pracuji jen v anglick\u00e9m jazyce
+#
+# Tooltips
+#
GeneralView.label.status.pieces_available.tooltip=Zobrazuje po\u010det dostupn\u00fdch kopi\u00ed ka\u017ed\u00e9ho d\u00edlu.\nPokud je \u010d\u00edslo vpravo men\u0161\u00ed ne\u017e 1, nejsou dostupn\u00e9 v\u0161echny d\u00edly souboru (a m\u016f\u017eete m\u00edt probl\u00e9m dokon\u010dit stahov\u00e1n\u00ed)
GeneralView.label.trackerurl.tooltip=Kliknut\u00edm zkop\u00edrujete Oznamovac\u00ed URL do schr\u00e1nky
GeneralView.label.trackerurlopen.tooltip=Kliknut\u00edm otev\u0159ete hlavn\u00ed str\u00e1nku serveru
+#
+# 2.0.4.4
+#
ConfigView.section.style.guiUpdate=Aktualizovat UI (u\u017eivatelsk\u00e9 rozhran\u00ed) ka\u017ed\u00fdch
ConfigView.section.style.graphicsUpdate=Aktualizovat grafy ka\u017ed\u00fdch N aktualizac\u00ed UI
ConfigView.section.style.reOrderDelay=Se\u0159azovat tabulky ka\u017ed\u00fdch N aktualizac\u00ed UI [0: zak\u00e1zano]
@@ -691,7 +695,9 @@ health.explain.yellow=znamen\u00e1, \u017ee Tracker je v po\u0159\u00e1dku, jste
health.explain.green=znamen\u00e1, \u017ee v\u0161e je v po\u0159\u00e1dku
ConfigView.section.style.alwaysRefreshMyTorrents=Neust\u00e1le obnovovat Moje Torrenty
ConfigView.section.style.alwaysRefreshMyTorrents.tooltip=Obnovovat okno Moje Torrenty, i kdy\u017e nen\u00ed zobrazeno (pro n\u011bkter\u00e9 dopl\u0148ky mIrc)
-ConfigView.section.style.verticaloffset=Vyrovn\u00e1n\u00ed vertik\u00e1ln\u00ed grafiky (oprava GTK)
+#
+#2.0.7.0
+#
security.certtruster.title=Varov\u00e1n\u00ed bezpe\u010dnostn\u00edho certifik\u00e1tu
security.certtruster.intro=Certifik\u00e1t byl vyd\u00e1n spole\u010dnost\u00ed, kter\u00e9 jste se rozhodli ned\u016fv\u011b\u0159ovat
security.certtruster.resource=Zdroj:
@@ -747,6 +753,9 @@ ConfigView.section.style.dropdiraction=P\u0159eta\u017een\u00ed (T\u00e1hni a sp
ConfigView.section.style.dropdiraction.opentorrents=Otev\u0159e torrenty
ConfigView.section.style.dropdiraction.sharefolder=Nasd\u00edl\u00ed slo\u017eku
ConfigView.section.style.dropdiraction.sharefoldercontents=Nasd\u00edl\u00ed obsah slo\u017eky
+#
+# 2.0.7.x
+#
Categories.all=V\u0161e
Categories.uncategorized=Neza\u0159azen\u00e9
CategoryAddWindow.message=Jm\u00e9no nov\u00e9 kategorie
@@ -825,7 +834,6 @@ ConfigView.text.minutes=minut
ConfigView.text.neverIgnore=Nikdy neignorovat
ConfigView.text.any=jak\u00fdmkoliv
DownloadManager.error.datamissing=Chyb\u011bj\u00edc\u00ed data
-iconBar.queue.tooltip=Fronta
MainWindow.menu.file.open.torrentforseeding=.torrent soubor (pro distribuci)
MainWindow.menu.language.refresh=&Obnovit
ManagerItem.forced=Vynucen\u00e9
@@ -901,6 +909,9 @@ SpeedView.stats.uptime=Spu\u0161t\u011bno (hod)
SpeedView.stats.now=Nyn\u00ed
SpeedView.stats.now.tooltip=Celkov\u00fd (protokol)
AutoMigration.useralert=V\u00fdsledky automatick\u00e9 migrace konfigura\u010dn\u00edch soubor\u016f:\n\n%1\n%2NEP\u0158ESUNUT\u00c9 SOUBORY MUS\u00cd P\u0158ESUNUTY RU\u010cN\u011a.
+#
+# > 2.0.8.0
+#
OpenTorrentWindow.title=Otev\u0159\u00edt Torrent(y)
OpenTorrentWindow.message=Experiment\u00e1ln\u00ed
OpenTorrentWindow.addFiles=&P\u0159idat soubory
@@ -1134,6 +1145,8 @@ MyTrackerView.badnat.info=Distrubuj\u00edc\u00ed/klienti, kter\u00fdm selhala ko
ConfigView.section.tracker.natchecktimeout=Kontrola p\u0159ekro\u010den\u00ed \u010das. limitu (sec)
ConfigView.section.file.perf.cache.enable=Spustit diskovou pam\u011b\u0165
ConfigView.section.file.perf.cache.size=Velikost vyrovn\u00e1vac\u00ed pam\u011bti v %1
+#Removed
+#MyTorrentsView.menu.setSpeed=Set Upload Speed
MainWindow.menu.transfers=P&\u0159enos
MainWindow.menu.transfers.startalltransfers=Sp&ustit v\u0161e
MainWindow.menu.transfers.stopalltransfers=St&op v\u0161e
@@ -1217,8 +1230,6 @@ FilesView.fullpath=Zobrazit celou cestu
FilesView.remaining=Zb\u00fdvaj\u00edc\u00ed d\u00edly
TableColumn.header.trackername=N\u00e1zev trackeru
TableColumn.header.trackername.info=N\u00e1zev serveru zalo\u017een\u00fd na ozn\u00e1men\u00ed URL
-ConfigView.label.announceport=P\u0159epsat oznamovac\u00ed port trackeru
-ConfigView.label.announceport.tooltip=Informuje tracker o tom, \u017ee naslouch\u00e1te na jin\u00e9m portu.\nVolba je ignorov\u00e1na pokud je pol\u00ed\u010dko pr\u00e1zdn\u00e9.
ConfigView.group.override=P\u0159epsat mo\u017enosti
ConfigView.section.file.perf.cache.notsmallerthan=Do vyrovn\u00e1vac\u00ed pam\u011bti nejdou men\u0161\u00ed soubory ne\u017e (v %1)
PeersView.menu.blockupload=Blokov\u00e1n\u00ed odes\u00edl\u00e1n\u00ed
@@ -1249,8 +1260,6 @@ ConfigView.section.connection.advanced.SO_RCVBUF=Velikost socketu SO_RCVBUF [0:
ConfigView.section.connection.advanced.SO_RCVBUF.tooltip=Nastav\u00ed standartn\u00ed hodnotu socketu SO_RCVBUF (v bytech), co\u017e znamen\u00e1, \u017ee TCP p\u0159ijme velikost a pom\u011br okna.\nVuze toto nech\u00e1v\u00e1 na v\u00fdchoz\u00edch hodnot\u00e1ch (pro z\u00e1kladn\u00ed opera\u010dn\u00ed syst\u00e9m).\nPozn\u00e1mka : V Linuxu jsou hodnoty dvakr\u00e1t vy\u0161\u0161\u00ed.
ConfigView.section.connection.advanced.SO_SNDBUF=Socket SO_SNDBUF velikost [0: pou\u017e\u00edt OS standart]
ConfigView.section.connection.advanced.SO_SNDBUF.tooltip=Nastav\u00ed standartn\u00ed hodnotu socketu SO_SNDBUF (v bytech), co\u017e znamen\u00e1, \u017ee TCP po\u0161le velikost okna.\nVuze toto nastaven\u00ed nech\u00e1v\u00e1 na v\u00fdchoz\u00edch hodnot\u00e1ch (pro z\u00e1kladn\u00ed opera\u010dn\u00ed syst\u00e9m).\nPozn\u00e1mka : Pozn\u00e1mka : V Linuxu jsou hodnoty dvakr\u00e1t vy\u0161\u0161\u00ed.
-ConfigView.section.connection.advanced.IPTOS=Odchoz\u00ed packet typ slu\u017eby (TOS)
-ConfigView.section.connection.advanced.IPTOS.tooltip=Nastavit provozn\u00ed t\u0159\u00eddu /typ slu\u017eby (TOS) pole v IP hlavi\u010dce pro odchoz\u00ed packety.\nVuze nech\u00e1v\u00e1 odchoz\u00ed nastaven\u00ed na v\u00fdchoz\u00edm nastaven\u00ed pro OS.\nP\u0159\u00edkladov\u00e9 hodnoty jsou:\n0x02 pro IPTOS_LOWCOST\n0x04 pro IPTOS_RELIABILITY\n0x08 pro IPTOS_THROUGHPUT\n0x10 pro IPTOS_LOWDELAY\nPozn\u00e1mka: Z\u00e1kladn\u00ed s\u00ed\u0165 ignoruje hodnoty, tato volba je z\u00e1visl\u00e1 na verzi OS a JRE.
ConfigView.section.interface.confirm_torrent_removal=Zobrazit potvrzovac\u00ed dialog odstran\u011bn\u00ed torrentu
ConfigView.section.interface.confirm_torrent_removal.tooltip=Potvr\u010fte p\u0159i odstran\u011bn\u00ed torrentu z Moje Torrenty.
MyTorrentsView.confirm_torrent_removal=Jste si jist\u00ed, \u017ee to chceta odstranit?\n
@@ -1397,7 +1406,6 @@ Button.apply=Pou\u017e\u00edt
Button.close=Zav\u0159\u00edt
window.welcome.title=V\u00edtejte v Azureu %1
#file can be a URL or a path in the jar
-window.welcome.file=/changelog.txt
MainWindow.menu.help.releasenotes=Pozn\u00e1mky o vyd\u00e1n\u00ed
dht.reseed.label=Norm\u00e1ln\u00ed znovudistribuce datab\u00e1ze nen\u00ed nutn\u00e9. Nicm\u00e9n\u011b je-li po\u010det p\u0159ipojen\u00ed n\u00edzk\u00fd, m\u016f\u017eete pou\u017e\u00edt znovuintegraci.\nPonechte pole pr\u00e1zdn\u00e9 pro samozaveden\u00ed p\u0159ipojen\u00fdch klient\u016f nebo vpi\u0161te IP adresu a port pro vylou\u010den\u00ed samozaveden\u00ed od zn\u00e1m\u00e9ho klienta.
dht.reseed.group=Znovudistribuovat
@@ -1496,8 +1504,8 @@ Views.plugins.IRC.title=IRC - Online Technick\u00e1 popora
Formats.units.persec=za s
Formats.units.alot=Hodn\u011b !!!
ConfigView.section.ipfilter.persistblocking=Ulo\u017eit blokovan\u00e9 detaily IP adres po restartu
-FilesView.rename.choose.path=Vyberte nov\u00fd nebo existuj\u00edc\u00ed soubor
FilesView.menu.rename=P\u0159ejmenovat nebo zm\u011bnit c\u00edl
+FilesView.rename.choose.path=Vyberte nov\u00fd nebo existuj\u00edc\u00ed soubor
FilesView.rename.confirm.delete.title=Potvr\u010fte smaz\u00e1n\u00ed
FilesView.rename.confirm.delete.text=Potvr\u010fte smaz\u00e1n\u00ed origin\u00e1ln\u00edho souboru '%1'
ConfigView.section.mode=M\u00f3d
@@ -1575,6 +1583,7 @@ MyTorrentsView.dialog.NumberError.title=\u0160patn\u00e9 nebo nezn\u00e1m\u00e9
MyTorrentsView.dialog.NumberError.text=\u010c\u00edslo, kter\u00e9 jste vlo\u017eili je \u0161patn\u00e9 nebo nezn\u00e1m\u00e9.
MyTorrentsView.menu.manual=&Manu\u00e1l
MyTorrentsView.dialog.setSpeed.title=Set %1 rychlost
+# %1 = "in kbps" or ""; %2 = "upload" or "download"
MyTorrentsView.dialog.setNumber.text=Pro vstup zadejte \u010d\u00edslo %1 ke zm\u011bn\u011b %2 to:
MyTorrentsView.dialog.setNumber.upload=odes\u00edl\u00e1n\u00ed
MyTorrentsView.dialog.setNumber.download=stahov\u00e1n\u00ed
@@ -1694,6 +1703,7 @@ MyTorrentsView.menu.filter=Filtr list...
ConfigureWizard.language.choose=Choose a language from the list below (Vyberte si jazyk z n\u00e1sleduj\u00edc\u00edch):
popup.closing.in=Okno se samo zav\u0159e za %1 sekund.
popup.more.waiting=%1 zb\u00fdvaj\u00edc\u00ed zpr\u00e1vy.
+# > 2402
popup.download.finished="%1" dokon\u010dil stahov\u00e1n\u00ed.
popup.file.finished="%1" dokon\u010dil stahov\u00e1n\u00ed.
Plugin.localtracker.autoadd.info=Automaticky p\u0159id\u00e1vat tyto klienty (adresy odd\u011blte st\u0159edn\u00edkem ";"):
@@ -1796,13 +1806,8 @@ ConfigView.section.style.showiconbar=Zobrazit n\u00e1strojovou li\u0161tu
MyTorrentsView.menu.rename=P\u0159ejmenovat
MyTorrentsView.menu.rename.displayed=P\u0159ejmenovat zobrazen\u00e9 jm\u00e9no
MyTorrentsView.menu.rename.save_path=P\u0159ejmenovat slo\u017eku, do kter\u00e9 se stahovan\u00e9 soubory ukl\u00e1daj\u00ed
-MyTorrentsView.menu.rename.displayed_and_save_path=P\u0159ejmenovat oboje
MyTorrentsView.menu.rename.displayed.enter.title=P\u0159ejmenovat zobrazen\u00e9 jm\u00e9no
MyTorrentsView.menu.rename.displayed.enter.message=Vpi\u0161te nov\u00e9 jm\u00e9no, kter\u00e9 se bude zobrazovat p\u0159i tomto stahov\u00e1n\u00ed.\nPokud nebude veps\u00e1t \u017e\u00e1dn\u00fd text, Vuze pou\u017eije p\u016fvodn\u00ed jm\u00e9no.
-MyTorrentsView.menu.rename.save_path.enter.title=P\u0159ejmenovat slo\u017eku, do kter\u00e9 se stahovan\u00e9 soubory ukl\u00e1daj\u00ed
-MyTorrentsView.menu.rename.save_path.enter.message=Vpi\u0161te nov\u00e9 jm\u00e9no pro toto stahov\u00e1n\u00ed\nPokud nebude veps\u00e1t \u017e\u00e1dn\u00fd text, Vuze pou\u017eije p\u016fvodn\u00ed jm\u00e9no.
-MyTorrentsView.menu.rename.displayed_and_save_path.enter.title=P\u0159ejmenovat stahov\u00e1n\u00ed
-MyTorrentsView.menu.rename.displayed_and_save_path.enter.message=Vpi\u0161te nov\u00e9 jm\u00e9no pro toto stahov\u00e1n\u00ed.\nPokud nebude veps\u00e1t \u017e\u00e1dn\u00fd text, Vuze pou\u017eije p\u016fvodn\u00ed hodnoty.
UIDebugGenerator.messageask.text=Pros\u00edm zadejte popis chyby, kterou nahla\u0161ujete
UIDebugGenerator.complete.title=Generace odstran\u011bn\u00ed chyb hotova
UIDebugGenerator.complete.text=Pros\u00edm po\u0161lete soubor '%1'.\n\nKlikn\u011bte na OK pro otev\u0159en\u00ed okna k tomuto souboru.
@@ -1825,6 +1830,22 @@ progress.window.msg.filemove=Pros\u00edm \u010dekejte, dokud se soubor nep\u0159
ConfigView.label.popup.timestamp=P\u0159idat \u010dasom\u00edru k vyskakovac\u00edm varov\u00e1n\u00edm
ConfigView.label.popup.autohide=Automaticky skr\u00fdvat vyskakuj\u00edc\u00ed (nechybov\u00e9) hl\u00e1\u0161en\u00ed po x sekund\u00e1ch (vpi\u0161te 0 pro zak\u00e1z\u00e1n\u00ed automatick\u00e9ho skr\u00fdv\u00e1n\u00ed)
ConfigView.label.please.visit.here=Pros\u00edm pod\u00edvejte se sem na detaily
-# The remaining keys were not in MessagesBundle.properties
-TorrentOptionsView.param.max.uploads.when.seeding.enable=N\u00e1hradn\u00ed upload slot pro seeding
+#TableColumn.header.size={MyTorrentsView.size}
+#TableColumn.header.up={MyTorrentsView.up}
+#TableColumn.header.date_added={MyTorrentsView.date_added}
+#TableColumn.header.name={MyTorrentsView.name}
+#TableColumn.header.shareRatio={MyTorrentsView.shareRatio}
+#
+# Used for peers which we can't determine.
+PeerSocket.unknown=Nezn\u00e1m\u00fd
+ConfigView.label.announceport=P\u0159epsat oznamovac\u00ed port trackeru
+#v3.MainWindow.menu.view.configuration=Preferences
+#v3.MainWindow.menu.view.configuration.keybinding=Meta+,
+#v3.TorrentOptionsView.title.short=Preferences
+#v3.TorrentOptionsView.title.full=Preferences
+#v3.ConfigView.title.short=Preferences
+#v3.ConfigView.title.full=Preferences
+iconBar.queue.tooltip=Fronta
+MainWindow.menu.help.faq=&Wiki \u010cast\u00e9 dotazy
+#what you've watched? Discover more with a single click...
MainWindow.menu.help.donate=&Podpo\u0159it dotac\u00ed !!!
diff --git a/org/gudy/azureus2/internat/MessagesBundle_da_DK.properties b/org/gudy/azureus2/internat/MessagesBundle_da_DK.properties
index a56d626..767ce6b 100644
--- a/org/gudy/azureus2/internat/MessagesBundle_da_DK.properties
+++ b/org/gudy/azureus2/internat/MessagesBundle_da_DK.properties
@@ -1,3 +1,4 @@
+#There is a plugin to help with internationalizing these bundles at http://azureus.sourceforge.net/plugin_list.php
MainWindow.menu.file.open.torrent=Torrent Fil...
MainWindow.menu.file.open.torrent.keybinding=Meta+o
Main.parameter.usage=Brug : java org.gudy.azureus2.cl.Main (parametre) "fil.torrent" "lagringssti"
@@ -394,7 +395,6 @@ MyTorrentsView.menu.removeand.deletedata=Slet &Dataen
MyTorrentsView.menu.removeand.deleteboth=Slet &Begge Dele
deletedata.title=!!! Advarsel !!!
deletedata.message1=Du er ved at slette data fra :\n
-deletedata.message2=\nEr du sikker p\u00e5 at du vil forts\u00e6tte?
MainWindow.menu.file.configure=Guiden &Konfiguration
configureWizard.title=Guiden til konfiguration
configureWizard.welcome.title=Velkommen til Guiden Vuze Konfiguration
@@ -534,8 +534,6 @@ ConfigView.section.tracker=Tracker
ConfigView.section.tracker.pollinterval=Klient opdateringsinterval (sekunder)
ConfigView.section.tracker.publishenable=Udgiv Torrent detaljer p\u00e5 "<tracker_url>"
ConfigView.section.tracker.ip=Trackerens eksterne IP adresse :
-MainWindow.menu.help.faq=&Ofte stillede sp\u00f8rgsm\u00e5l (FAQ)
-MainWindow.menu.help.faq.keybinding.mac=Meta+?
ConfigView.section.style.enableXPStyle=Aktiver Windows XP udseende (kr\u00e6ver genstart)
IPChecker.external.service.dyndns.name=Dyn-DNS
IPChecker.external.service.dyndns.url=http://www.dyndns.org
@@ -574,7 +572,6 @@ splash.openViews=\u00c5bner faneblade
splash.plugin=Indl\u00e6ser tilf\u00f8jelse :
configureWizard.nat.tooManyPorts=For mange porte at teste (9 max)
ConfigView.section.color=Farvevalg
-PeerSocket.unknown=Ukendt
MyTorrentsView.menu.publish=&Udgiv...
MyTrackerView.status.published=Udgivet
MyTrackerView.completed=Fuldf\u00f8rte
@@ -592,9 +589,15 @@ IPChecker.external.service.no-ip.description=Dynamisk og statisk DNS service udb
ConfigView.section.tracker.publicenable=Tillad eksterne Torrents
ConfigView.label.playdownloadspeech="Tal" n\u00e5r en dowmload er f\u00e6rdig
ConfigView.label.playdownloadspeech.info=Tale servisen virker i \u00f8jeblikket bedst med engelsk
+#
+# Tooltips
+#
GeneralView.label.status.pieces_available.tooltip=Viser antal tilg\u00e6ngelige kopier af hvert stykke.\nHvis antallet til h\u00f8jre er lavere end 1, er der ikke en komplet kopi af filen tilg\u00e6ngelig\n(og der vil muligvis v\u00e6re problemer med at f\u00e6rdigg\u00f8re downloaden).
GeneralView.label.trackerurl.tooltip=Klik for at kopiere annoncerings URL'en til udklipsholderen
GeneralView.label.trackerurlopen.tooltip=Klik for at \u00e5bne trackerens hovedside
+#
+# 2.0.4.4
+#
ConfigView.section.style.guiUpdate=Opdater brugergr\u00e6nsefladen (GUI) hver
ConfigView.section.style.graphicsUpdate=Opdater de grafiske bj\u00e6lker for hver N GUI opdatering(er)
ConfigView.section.style.reOrderDelay=Opdater tabeller for hver N GUI opdatering(er) (0 = aldrig)
@@ -732,7 +735,9 @@ health.explain.yellow=Betyder at trackeren er OK, du er forbundet til peers, men
health.explain.green=Betyder at alt fungerer fint.
ConfigView.section.style.alwaysRefreshMyTorrents=Opdater altid Mine Torrents
ConfigView.section.style.alwaysRefreshMyTorrents.tooltip=Denne indstilling vil opdatere Mine Torrents fanebladet, selv n\u00e5r det ikke er synligt (kan v\u00e6re n\u00f8dvendigt ved brug af visse mirc tilf\u00f8jelser)
-ConfigView.section.style.verticaloffset=Lodret forskydning af grafik (GTK fix)
+#
+#2.0.7.0
+#
security.certtruster.title=Certifikat Sikkerheds advarsel
security.certtruster.intro=Sikkerhedscertifikatet er udstedt af et firma, som du ikke har tillid til
security.certtruster.resource=Ressource :
@@ -790,6 +795,9 @@ ConfigView.section.style.dropdiraction=Tr\u00e6k og slip handling for mapper
ConfigView.section.style.dropdiraction.opentorrents=\u00c5ben Torrents
ConfigView.section.style.dropdiraction.sharefolder=Dele mappe
ConfigView.section.style.dropdiraction.sharefoldercontents=Del indholdet
+#
+# 2.0.7.x
+#
Categories.all=Alle
Categories.uncategorized=Ingen kategori
CategoryAddWindow.message=Navnet p\u00e5 den nye kategori :
@@ -868,7 +876,6 @@ ConfigView.text.minutes=minutter
ConfigView.text.neverIgnore=Ignorer aldrig
ConfigView.text.any=hvilken som helst
DownloadManager.error.datamissing=Data mangler
-iconBar.queue.tooltip=S\u00e6t i k\u00f8
MainWindow.menu.file.open.torrentforseeding=Torrent Fil... (Til seeding)
MainWindow.menu.language.refresh=&Opdater
ManagerItem.forced=Tvunget
@@ -947,6 +954,9 @@ SpeedView.stats.uptime=Uploadet i :
SpeedView.stats.now=Nu :
SpeedView.stats.now.tooltip=Total (Protokol)
AutoMigration.useralert=Resultatet efter Automatisk migrering af Vuze brugers config filer/mapper :\n\n%1\nAlle auto-migreringer som mislykkedes SKAL migreres manuelt.\nHUSK AT OPDATERE LAGRINGS MAPPER OG STIER I KONFIGURATIONEN HVIS DE ER MIGRERET!
+#
+# > 2.0.8.0
+#
OpenTorrentWindow.title=\u00c5ben Torrent(s)
OpenTorrentWindow.message=Eksperimentel
OpenTorrentWindow.addFiles=&Tilf\u00f8j filer
@@ -1190,6 +1200,8 @@ MyTrackerView.badnat.info=Seedere/Peers som ikke bestod en NAT kontrol
ConfigView.section.tracker.natchecktimeout=Tjek "timeout" (sekunder)
ConfigView.section.file.perf.cache.enable=Aktiver disk cache
ConfigView.section.file.perf.cache.size=St\u00f8rrelse af cache i %1
+#Removed
+#MyTorrentsView.menu.setSpeed=Set Upload Speed
MainWindow.menu.transfers=O&verf\u00f8rsler
MainWindow.menu.transfers.startalltransfers=St&art Alle
MainWindow.menu.transfers.stopalltransfers=St&op Alle
@@ -1275,8 +1287,6 @@ FilesView.fullpath=Vis den fuldst\u00e6ndige sti
FilesView.remaining=Resterende stykker :
TableColumn.header.trackername=Tracker Navn
TableColumn.header.trackername.info=Trackerens navn baseret p\u00e5 annoncerings URL'en
-ConfigView.label.announceport=Underkend tracker annoncerings port
-ConfigView.label.announceport.tooltip=Informer trackeren hvis det er en anden port end den du "lytter" p\u00e5. Lad feltet st\u00e5 blankt hvis du ikke vil bruge denne valgmulighed.
ConfigView.group.override=Underkende indstillinger
ConfigView.section.file.perf.cache.notsmallerthan=Filer mindre end (i %1) skal ikke cashes
PeersView.menu.blockupload=Bloker Upload
@@ -1306,8 +1316,6 @@ ConfigView.section.connection.advanced.SO_RCVBUF=Socket SO_RCVBUF st\u00f8rrelse
ConfigView.section.connection.advanced.SO_RCVBUF.tooltip=S\u00e6tter standart socket SO_RCVBUF v\u00e6rdien (i bytes), i.e. TCP modtager vindus st\u00f8rrelse og skala.\nSom Vuze standart er feltet tomt, hvilket betyder at det er standarten for det underliggende operativsystem (OS) som bruges.\nOBS Linux fordobler den angivne v\u00e6rdi.
ConfigView.section.connection.advanced.SO_SNDBUF=Socket SO_SNDBUF st\u00f8rrelse (0 = brug operativsystemets (OS) standart)
ConfigView.section.connection.advanced.SO_SNDBUF.tooltip=S\u00e6tter standart socket SO_SNDBUF v\u00e6rdien (i bytes), i.e. TCP sendte vindues st\u00f8rrelse.\nSom Vuze standart er feltet tomt, hvilket betyder at det er standarten for det underliggende operativsystem (OS) som bruges.\nOBS Linux fordobler den angivne v\u00e6rdi.
-ConfigView.section.connection.advanced.IPTOS=Udg\u00e5ende pakkers service type (TOS)
-ConfigView.section.connection.advanced.IPTOS.tooltip=Bestemmer trafik klassen / "type-of-service" (TOS) omr\u00e5det i IP headeren for udg\u00e5ende pakker.\nVuze standart er blankt, hvilket betyder at standarten i det underliggende styresystem (OS) bliver brugt.\nV\u00e6rdi eksempler er :\n0x02 for IPTOS_LOWCOST\n0x04 for IPTOS_RELIABILITY\n0x08 for IPTOS_THROUGHPUT\n0x10 for IPTOS_LOWDELAY\nOBS : Underliggende netv\u00e6rksbestemmelser vil muligvis ignorere denne v\u00e6rdi, s\u00e5 valget er yderst afh\u00e6ngig af styresystem (OS) og Java (JRE) versionerne.
ConfigView.section.interface.confirm_torrent_removal=Vis bekr\u00e6ftigelses dialogen inden en Torrent fjernes
ConfigView.section.interface.confirm_torrent_removal.tooltip=Bekr\u00e6ft handlingen n\u00e5r der fjernes en Torrent fra Mine Torrents.
MyTorrentsView.confirm_torrent_removal=Er du sikker p\u00e5 du vil fjerne?\n
@@ -1456,7 +1464,6 @@ Button.apply=Tilf\u00f8j
Button.close=Luk
window.welcome.title=Velkommen til Vuze %1
#file can be a URL or a path in the jar
-window.welcome.file=/changelog.txt
MainWindow.menu.help.releasenotes=Udgivelsesnotater
dht.reseed.group=Seed igen
dht.reseed.ip=IP adrasse
@@ -1672,6 +1679,7 @@ MyTorrentsView.dialog.NumberError.title=Ugyldigt eller ikke genkendt nummer
MyTorrentsView.dialog.NumberError.text=Nummeret du intastede er ugyldigt eller ikke genkendt
MyTorrentsView.menu.manual=&Brugerdefineret...
MyTorrentsView.dialog.setSpeed.title=V\u00e6lg %1 hastighed
+# %1 = "in kbps" or ""; %2 = "upload" or "download"
MyTorrentsView.dialog.setNumber.text=Skriv et nummer %1 for at \u00e6ndre %2 til :
MyTorrentsView.dialog.setNumber.upload=Upload
MyTorrentsView.dialog.setNumber.download=Download
@@ -1779,7 +1787,6 @@ ConfigView.section.proxy.group.peer=Peer kommunikation
Pieces.column.Requested=Anmodet :
Pieces.column.Requested.info=Hvis der kan eller ikke kan foretages flere foresp\u00f8rgelser p\u00e5 stykket s\u00e5 vis det (*)
ConfigView.label.maxuploadsseeding=Alternativ standart n\u00e5r der seedes
-MyTorrentsView.filter=Filter
popup.error.hideall=Skjul Alle
ConfigView.section.style.dataStatsOnly=Vis kun data statistikker (skjul protokol statistikker)
ConfigView.section.style.separateProtDataStats=Vis adskilte data og protokol statistikker som "data (protokol)"
@@ -1792,6 +1799,7 @@ ConfigView.section.file.resume.recheck.all=Ved crash-genstart tjekkes hele filen
ConfigureWizard.language.choose=V\u00e6lg sprog fra nedenst\u00e5ende liste :
popup.closing.in=Vinduet lukkes automatisk om %1 sekunder
popup.more.waiting=%1 flere besked(er)...
+# > 2402
popup.next=>
popup.previous=< (%1)
popup.download.finished="%1" er f\u00e6rdig Downloadet.
@@ -1929,13 +1937,8 @@ MainWindow.menu.view.iconbar=V\u00e6rkt\u00f8jslinjen
MyTorrentsView.menu.rename=Omd\u00f8b
MyTorrentsView.menu.rename.displayed=Omd\u00f8b viste Torrent navn
MyTorrentsView.menu.rename.save_path=Omd\u00f8b stien der gemmes til
-MyTorrentsView.menu.rename.displayed_and_save_path=Omd\u00f8b begge
MyTorrentsView.menu.rename.displayed.enter.title=Omd\u00f8b viste Torrent navn
MyTorrentsView.menu.rename.displayed.enter.message=Skriv et nyt navn som skal vises for denne download.\nHvis der ikke skrives en ny tekst, anvendes det originale navn.
-MyTorrentsView.menu.rename.save_path.enter.title=Omd\u00f8b stien der gemmes til
-MyTorrentsView.menu.rename.save_path.enter.message=Skriv et nyt navn p\u00e5 stien denne download gemmes til.\nHvis der ikke skrives en tekst, anvendes downloadens viste navn.
-MyTorrentsView.menu.rename.displayed_and_save_path.enter.title=Omd\u00f8b Download
-MyTorrentsView.menu.rename.displayed_and_save_path.enter.message=Skriv et nyt navn til denne download\nHvis der ikke skrives en ny tekst, anvendes de originale v\u00e6rdier.
MyTorrentsView.menu.edit_comment=Rediger/Tilf\u00f8j en kommentar
MyTorrentsView.menu.edit_comment.enter.title=Rediger/Tilf\u00f8j en kommentar
MyTorrentsView.menu.edit_comment.enter.message=Skriv en kommentar til denne download.
@@ -1988,7 +1991,6 @@ ConfigView.section.connection.http.port=Indg\u00e5ende port nummer
ConfigView.section.connection.http.portoverride=Underkendelse af tracker HTTP Port (0 = ingen)
window.update.noupdates.title=kontroller opdaterings resultaterne
window.update.noupdates.text=Tillykke din Vuze er optimal!\n\nDer er ingen nye opdateringer tilg\u00e6ngelige.
-ConfigView.label.bindip.info=F.eks, "192.168.1.2" eller "eth0" (aktuelle : %1)
ConfigView.label.mindownloads=Minimum antal samtidige downloads
UI.cannot_submit_blank_text=Du skal skrive en v\u00e6rdi.
crypto.alert.as.warning=Netv\u00e6rket "%1" er kendt for at p\u00e5tvinge trafikregulering for at reducere download hastigheden. Kryptering af overf\u00f8rslen er automatisk blevet sl\u00e5et til - dette kan sl\u00e5s fra eller modificeres via konfigurations instillingerne.
@@ -1998,7 +2000,6 @@ popup.download.added="%1" er blevet tilf\u00f8jet til din Download liste.
MessageBoxWindow.nomoreprompting=Sp\u00f8rg mig ikke igen
TorrentOptionsView.param.max.seeds=Det maximale antal seed forbindelser (0 = forbindelses begr\u00e6nsning)
TorrentOptionsView.param.alternative.value.enable=Alternativ v\u00e6rdi n\u00e5r der seedes
-ConfigView.section.style.SeparateFilesViewRenameRetarget=Vis seperate menuer til "Omd\u00f8b" og "V\u00e6lg ny mappe" i fanen Filer
ConfigView.section.proxy.check.on.start=Tjek proxy status ved start
TransferStatsView.legend.pingaverage=Gennemsnit
TransferStatsView.legend.ping1=Ping m\u00e5l 1
@@ -2034,34 +2035,10 @@ Peers.column.peer_byte_id=Peers ID
Peers.column.peer_byte_id.info=Peers ID in byte form
ConfigView.label.openbar.incomplete=Download bj\u00e6lke: auto \u00e5ben downloads
ConfigView.label.openbar.complete=auto \u00e5ben seeds
-# The remaining keys were not in MessagesBundle.properties
-RatingPlugin.tooltip.avgRating=%1 (baseret p\u00e5 %2 Vurderinger)
-RatingPlugin.tooltip.yourRating=Din Vurdering er %1
-MySeeders.column.RatingColumn=Vurdering
-RatingPlugin.RatingWindow.personalRating=Persolig Vurdering :
-RatingPlugin.RatingWindow.rateBeforeComment=Du skal f\u00f8rst afgive din vurdering f\u00f8r du kan skrive en kommentar.
-RatingPlugin.RatingWindow.comments=Kommentar :
-RatingPlugin.RatingWindow.Button.clear=Ryd
-i2pnet.upnp_group=UPnP
-i2pnet.i2p_options.info=Hvis du \u00e6ndrer Konfigurations instillingerne til router forbindelsen, skal du v\u00e6re forsigtig
-RatingPlugin.tooltip.noRating=%1 (Kigger efter Vurderinger)
-rating.config.nick=Bruger eller kaldenavn
-i2pnet.enable=Aktiver
-i2pnet.i2p_router_options=Router valgmuligheder
-MyTorrents.column.RatingColumn.info=En grafisk pr\u00e6sentation af den globale vurdering for torrenten som vises her.
-rating.config.title=Vurdering & Kommentar(er)
-i2pnet.upnp_port=I2P data port
-RatingPlugin.RatingWindow.Button.ok=&OK
-plugin.name=Grafisk 3D Visning
-i2pnet.name=I2P Netv\u00e6rk tilf\u00f8jelse
-i2pnet.i2p_router_group=I2P Router
-RatingPlugin.RatingWindow.yourComment=Din Kommentar (H\u00f8jst 150 tegn) :
-RatingPlugin.tooltip.numComments=%1 Kommentar(er)
-RatingPlugin.RatingWindow.title=Vurdering & Kommentar(er) for %1
-MyTorrents.column.RatingColumn=Vurdering
-MySeeders.column.RatingColumn.info=En grafisk pr\u00e6sentation af den globale vurdering for torrenten som vises her.
-i2pnet.i2p_router_port=Router port
-RatingPlugin.contextmenu.manageRating=Vurdering && Kommentar(er)
-RatingPlugin.RatingWindow.globalRating=Global Vurdering :
-i2pnet.i2p_router_host=Router v\u00e6rt
+# Used for peers which we can't determine.
+PeerSocket.unknown=Ukendt
+ConfigView.label.announceport=Underkend tracker annoncerings port
+iconBar.queue.tooltip=S\u00e6t i k\u00f8
+MainWindow.menu.help.faq=&Ofte stillede sp\u00f8rgsm\u00e5l (FAQ)
+MainWindow.menu.help.faq.keybinding.mac=Meta+?
MainWindow.menu.help.donate=&Giv et bidrag!!!
diff --git a/org/gudy/azureus2/internat/MessagesBundle_de_DE.properties b/org/gudy/azureus2/internat/MessagesBundle_de_DE.properties
index 0eac092..dd577a0 100644
--- a/org/gudy/azureus2/internat/MessagesBundle_de_DE.properties
+++ b/org/gudy/azureus2/internat/MessagesBundle_de_DE.properties
@@ -2482,7 +2482,6 @@ Subscription.menu.reset=Zur\u00fccksetzen in Ausgangszustand
ConfigView.section.Subscriptions=Abonnements
subscriptions.config.maxresults=Maximale Anzahl gespeicherter Ergebnissen pro Abonnement [0: unbegrenzt]
v3.activity.button.readall=Alle als gelesen markieren
-ConfigView.interface.start.library=Starte in Bibliothek
TableColumn.header.activityNew=Neu
TableColumn.header.activityType=Typ
TableColumn.header.activityText=Nachricht
@@ -2562,8 +2561,6 @@ TableColumn.header.azsubs.ui.column.subs_link.info=Verbindung mit Abonnements
Button.deleteContent.fromLibrary=Entferne aus Bibliothek
Button.deleteContent.fromComputer=L\u00f6sche von Computer
v3.deleteContent.message=\nSoll '%1' vom Computer gel\u00f6scht, oder nur aus der Vuze-Bibliothek entfernt werden?
-v3.library.infobar.text1=Auf der Suche nach der Erweiterten Ansicht?
-v3.library.infobar.text2=Nutze den Schalter oben in der Werkzeugleiste.
v3.MainWindow.menu.view.toolbartext=Werkzeugleistentext
v3.MainWindow.menu.view.asSimpleList=Einfache Liste
v3.MainWindow.menu.view.asAdvancedList=Erweiterte Liste
diff --git a/org/gudy/azureus2/internat/MessagesBundle_el_GR.properties b/org/gudy/azureus2/internat/MessagesBundle_el_GR.properties
index 02782e3..06ae13f 100644
--- a/org/gudy/azureus2/internat/MessagesBundle_el_GR.properties
+++ b/org/gudy/azureus2/internat/MessagesBundle_el_GR.properties
@@ -1,3 +1,4 @@
+#There is a plugin to help with internationalizing these bundles at http://azureus.sourceforge.net/plugin_list.php
MainWindow.menu.file.open.torrent=\u0391\u03c1\u03c7\u03b5\u03af\u03bf .torrent
Main.parameter.usage=\u03a7\u03c1\u03ae\u03c3\u03b7 : java org.gudy.azureus2.cl.Main [\u03bf\u03c1\u03af\u03c3\u03bc\u03b1\u03c4\u03b1] "\u03b1\u03c1\u03c7\u03b5\u03af\u03bf.torrent" "\u03c6\u03ac\u03ba\u03b5\u03bb\u03bf\u03c2 \u03b1\u03c0\u03bf\u03b8\u03ae\u03ba\u03b5\u03c5\u03c3\u03b7\u03c2"
Main.parameter.maxUploads=\u039c\u03ad\u03b3\u03b9\u03c3\u03c4\u03bf\u03c2 \u03b1\u03c1\u03b9\u03b8\u03bc\u03cc\u03c2 \u03c4\u03b1\u03c5\u03c4\u03cc\u03c7\u03c1\u03bf\u03bd\u03c9\u03bd \u03b1\u03c0\u03bf\u03c3\u03c4\u03bf\u03bb\u03ce\u03bd \u03b1\u03c1\u03c7\u03b5\u03af\u03c9\u03bd
@@ -342,7 +343,6 @@ MyTorrentsView.menu.removeand.deletedata=\u0394\u03b9\u03b1\u03b3\u03c1\u03b1\u0
MyTorrentsView.menu.removeand.deleteboth=\u0394\u03b9\u03b1\u03b3\u03c1\u03b1\u03c6\u03ae &\u03ba\u03b1\u03b9 \u03c4\u03c9\u03bd \u03b4\u03cd\u03bf
deletedata.title=!!! \u03a0\u03c1\u03bf\u03c3\u03bf\u03c7\u03ae !!!
deletedata.message1=\u03a0\u03c1\u03cc\u03ba\u03b5\u03b9\u03c4\u03b1\u03b9 \u03bd\u03b1 \u03b4\u03b9\u03b1\u03b3\u03c1\u03ac\u03c8\u03b5\u03c4\u03b5 \u03c4\u03b1 \u0394\u0395\u0394\u039f\u039c\u0395\u039d\u0391 \u03b1\u03c0\u03cc \u03c4\u03bf :\n
-deletedata.message2=\n\u0398\u03ad\u03bb\u03b5\u03c4\u03b5 \u03c3\u03af\u03b3\u03bf\u03c5\u03c1\u03b1 \u03bd\u03b1 \u03c3\u03c5\u03bd\u03b5\u03c7\u03af\u03c3\u03b5\u03c4\u03b5;
MainWindow.menu.file.configure=&\u039f\u03b4\u03b7\u03b3\u03cc\u03c2 \u03a1\u03c5\u03b8\u03bc\u03af\u03c3\u03b5\u03c9\u03bd
configureWizard.title=\u039f\u03b4\u03b7\u03b3\u03cc\u03c2 \u03a1\u03c5\u03b8\u03bc\u03af\u03c3\u03b5\u03c9\u03bd
configureWizard.welcome.title=\u039a\u03b1\u03bb\u03c9\u03c3\u03ae\u03c1\u03b8\u03b1\u03c4\u03b5 \u03c3\u03c4\u03bf\u03bd \u039f\u03b4\u03b7\u03b3\u03cc \u03a1\u03c5\u03b8\u03bc\u03af\u03c3\u03b5\u03c9\u03bd \u03c4\u03bf\u03c5 Vuze
@@ -472,7 +472,6 @@ ConfigView.section.tracker=\u03a0\u03b1\u03c1\u03b1\u03ba\u03bf\u03bb\u03bf\u03c
ConfigView.section.tracker.pollinterval=\u03a7\u03c1\u03cc\u03bd\u03bf\u03c2 \u03b1\u03bd\u03b1\u03bd\u03ad\u03c9\u03c3\u03b7\u03c2 \u03c0\u03b5\u03bb\u03ac\u03c4\u03b7 \u03c0\u03b1\u03c1\u03b1\u03ba\u03bf\u03bb\u03bf\u03cd\u03b8\u03b7\u03c3\u03b7\u03c2 \u03b1\u03bb\u03bb\u03b1\u03b3\u03ce\u03bd (\u03b4\u03b5\u03c5\u03c4\u03b5\u03c1\u03cc\u03bb\u03b5\u03c0\u03c4\u03b1)
ConfigView.section.tracker.publishenable=\u0394\u03b7\u03bc\u03bf\u03c3\u03af\u03b5\u03c5\u03c3\u03b7 \u03bb\u03b5\u03c0\u03c4\u03bf\u03bc\u03b5\u03c1\u03b9\u03ce\u03bd torrent \u03c3\u03c4\u03bf ""
ConfigView.section.tracker.ip=\u03a0\u03b1\u03c1\u03b1\u03ba\u03bf\u03bb\u03bf\u03cd\u03b8\u03b7\u03c3\u03b7 \u0391\u03bb\u03bb\u03b1\u03b3\u03ce\u03bd: \u0391\u03c0\u03bf\u03bc\u03b1\u03ba\u03c1\u03c5\u03c3\u03bc\u03ad\u03bd\u03b7 \u03b4\u03b9\u03b5\u03cd\u03b8\u03c5\u03bd\u03c3\u03b7 IP
-MainWindow.menu.help.faq=&\u03a3\u03c5\u03c7\u03bd\u03ad\u03c2 \u0395\u03c1\u03c9\u03c4\u03ae\u03c3\u03b5\u03b9\u03c2
ConfigView.section.style.enableXPStyle=\u0395\u03bd\u03b5\u03c1\u03b3\u03bf\u03c0\u03bf\u03af\u03b7\u03c3\u03b7 \u03c3\u03c4\u03c5\u03bb XP (\u03c7\u03c1\u03b5\u03b9\u03ac\u03b6\u03b5\u03c4\u03b1\u03b9 \u03b5\u03c0\u03b1\u03bd\u03b5\u03ba\u03ba\u03af\u03bd\u03b7\u03c3\u03b7)
IPChecker.external.service.dyndns.name=DynDNS
IPChecker.external.service.dyndns.url=http://www.dyndns.org/
@@ -510,7 +509,6 @@ splash.initializeGui=\u0391\u03c1\u03c7\u03b9\u03ba\u03bf\u03c0\u03bf\u03af\u03b
splash.openViews=\u0386\u03bd\u03bf\u03b9\u03b3\u03bc\u03b1 \u03a0\u03c1\u03bf\u03b2\u03bf\u03bb\u03ce\u03bd
splash.plugin=\u03a6\u03cc\u03c1\u03c4\u03c9\u03c3\u03b7 \u03a0\u03c1\u03cc\u03c3\u03b8\u03b5\u03c4\u03bf\u03c5 :
configureWizard.nat.tooManyPorts=\u03a5\u03c0\u03b5\u03c1\u03b2\u03bf\u03bb\u03b9\u03ba\u03ad\u03c2 \u03b8\u03cd\u03c1\u03b5\u03c2 \u03c0\u03c1\u03bf\u03c2 \u03b4\u03bf\u03ba\u03b9\u03bc\u03ae (\u03bc\u03ad\u03b3\u03b9\u03c3\u03c4\u03bf 9)
-PeerSocket.unknown=\u0386\u03b3\u03bd\u03c9\u03c3\u03c4\u03bf
MyTorrentsView.menu.publish=&\u0394\u03b7\u03bc\u03bf\u03c3\u03af\u03b5\u03c5\u03c3\u03b7...
MyTrackerView.status.published=\u0394\u03b7\u03bc\u03bf\u03c3\u03b9\u03b5\u03cd\u03c4\u03b7\u03ba\u03b5
MyTrackerView.completed=\u039f\u03bb\u03bf\u03ba\u03bb\u03b7\u03c1\u03ce\u03b8\u03b7\u03ba\u03b5
@@ -523,9 +521,15 @@ IPChecker.external.service.no-ip.name=No-IP
IPChecker.external.service.no-ip.url=http://www.no-ip.com/
IPChecker.external.service.no-ip.description=\u03a5\u03c0\u03b7\u03c1\u03b5\u03c3\u03af\u03b1 \u0394\u03c5\u03bd\u03b1\u03bc\u03b9\u03ba\u03bf\u03cd \u03ba\u03b1\u03b9 \u03a3\u03c4\u03b1\u03c4\u03b9\u03ba\u03bf\u03cd DNS\n(\u03b4\u03b5\u03bd \u03c0\u03c1\u03bf\u03c3\u03c6\u03ad\u03c1\u03b5\u03c4\u03b1\u03b9 \u03b4\u03c9\u03c1\u03b5\u03ac\u03bd \u03c5\u03c0\u03b7\u03c1\u03b5\u03c3\u03af\u03b1 '\u03b5\u03bb\u03ad\u03b3\u03c7\u03bf\u03c5 \u03b4\u03b9\u03ad\u03c5\u03b8\u03c5\u03bd\u03c3\u03b7\u03c2')
ConfigView.section.tracker.publicenable=\u0395\u03bd\u03b5\u03c1\u03b3\u03bf\u03c0\u03bf\u03af\u03b7\u03c3\u03b7 \u03b5\u03be\u03c9\u03c4\u03b5\u03c1\u03b9\u03ba\u03ce\u03bd torrents
+#
+# Tooltips
+#
GeneralView.label.status.pieces_available.tooltip=\u0395\u03bc\u03c6\u03b1\u03bd\u03af\u03b6\u03b5\u03b9 \u03c4\u03bf\u03bd \u03b1\u03c1\u03b9\u03b8\u03bc\u03cc \u03c5\u03c0\u03ac\u03c1\u03c7\u03bf\u03bd\u03c4\u03c9\u03bd \u03b1\u03bd\u03c4\u03b9\u03b3\u03c1\u03ac\u03c6\u03c9\u03bd \u03ba\u03ac\u03b8\u03b5 \u03ba\u03bf\u03bc\u03bc\u03b1\u03c4\u03b9\u03bf\u03cd.\n\u0391\u03bd \u03c4\u03c5\u03c7\u03cc\u03bd \u03bf \u03b1\u03c1\u03b9\u03b8\u03bc\u03cc\u03c2 \u03c3\u03c4\u03b1 \u03b1\u03c1\u03b9\u03c3\u03c4\u03b5\u03c1\u03ac \u03b5\u03af\u03bd\u03b1\u03b9 \u03bc\u03b9\u03ba\u03c1\u03cc\u03c4\u03b5\u03c1\u03bf\u03c2 \u03c4\u03bf\u03c5 1, \u03b4\u03b5\u03bd \u03ad\u03c7\u03b5\u03c4\u03b5 \u03c0\u03c1\u03cc\u03c3\u03b2\u03b1\u03c3\u03b7 \u03c3\u03b5 \u03ad\u03bd\u03b1 \u03bf\u03bb\u03cc\u03ba\u03bb\u03b7\u03c1\u03c9\u03bc\u03ad\u03bd\u03bf \u03b1\u03bd\u03c4\u03af\u03b3\u03c1\u03b1\u03c6\u03bf \u03c4\u03bf\u03c5 \u03b1\u03c1\u03c7\u03b5\u03af\u03bf\u03c5 (\u03ba\u03b1\u03b9 \u03af\u03c3\u03c9\u03c2 \u03ad\u03c7\u03b5\u03c4\u03b5 \u03c0\u03c1\u03bf\u03b2\u03bb\u03ae\u03bc\u03b1\u03c4\u03b1 \u03bd\u03b1 \u03bf\u03bb\u03bf\u03ba\u03bb\u03b7\u03c1\u03ce\u03c3\u03b5\u03c4\u03b1\u03b9 \u03c4\u03b7 \u03bb\u03ae\u03c8\u03b7).
GeneralView.label.trackerurl.tooltip=\u039a\u03ac\u03bd\u03c4\u03b5 \u03ba\u03bb\u03b9\u03ba \u03b3\u03b9\u03b1 \u03bd\u03b1 \u03b1\u03bd\u03c4\u03b9\u03b3\u03c1\u03ac\u03c8\u03b5\u03c4\u03b5 \u03c4\u03bf URL \u03b1\u03bd\u03b1\u03ba\u03bf\u03b9\u03bd\u03ce\u03c3\u03b5\u03c9\u03bd \u03c3\u03c4\u03bf \u03c0\u03c1\u03cc\u03c7\u03b5\u03b9\u03c1\u03bf
GeneralView.label.trackerurlopen.tooltip=\u039a\u03ac\u03bd\u03c4\u03b5 \u03ba\u03bb\u03b9\u03ba \u03b3\u03b9\u03b1 \u03bd\u03b1 \u03b1\u03bd\u03bf\u03af\u03be\u03b5\u03c4\u03b5 \u03c4\u03b7\u03bd \u03ba\u03b5\u03bd\u03c4\u03c1\u03b9\u03ba\u03ae \u03c3\u03b5\u03bb\u03af\u03b4\u03b1 \u03a0\u03b1\u03c1\u03b1\u03ba\u03bf\u03bb\u03bf\u03cd\u03b8\u03b7\u03c3\u03b7\u03c2 \u0391\u03bb\u03bb\u03b1\u03b3\u03ce\u03bd
+#
+# 2.0.4.4
+#
ConfigView.section.style.guiUpdate=\u0391\u03bd\u03b1\u03bd\u03ad\u03c9\u03c3\u03b7 \u03c4\u03bf\u03c5 GUI \u03ba\u03b1\u03b8\u03b5
ConfigView.section.style.graphicsUpdate=\u0391\u03bd\u03b1\u03bd\u03ad\u03c9\u03c3\u03b7 \u0393\u03c1\u03b1\u03c6\u03b9\u03ba\u03ce\u03bd \u03c1\u03ac\u03b2\u03b4\u03c9\u03bd \u03ba\u03ac\u03b8\u03b5 N \u03b1\u03bd\u03b1\u03bd\u03b5\u03ce\u03c3\u03b5\u03b9\u03c2 GUI
ConfigView.section.style.reOrderDelay=\u0391\u03bd\u03b1\u03ba\u03b1\u03c4\u03ac\u03c4\u03b1\u03be\u03b7 \u03c0\u03b9\u03bd\u03ac\u03ba\u03c9\u03bd \u03ba\u03ac\u03b8\u03b5 N \u03b1\u03bd\u03b1\u03bd\u03b5\u03ce\u03c3\u03b5\u03b9\u03c2 GUI
@@ -659,7 +663,9 @@ health.explain.yellow=\u03a3\u03b7\u03bc\u03b1\u03af\u03bd\u03b5\u03b9 \u03c0\u0
health.explain.green=\u03a3\u03b7\u03bc\u03b1\u03af\u03bd\u03b5\u03b9 \u03c0\u03c9\u03c2 \u03cc\u03bb\u03b1 \u03c0\u03ac\u03bd\u03b5 \u03ba\u03b1\u03bb\u03ac.
ConfigView.section.style.alwaysRefreshMyTorrents=\u03a0\u03ac\u03bd\u03c4\u03b1 \u03bd\u03b1 \u03b5\u03bd\u03b7\u03bc\u03b5\u03c1\u03ce\u03bd\u03bf\u03bd\u03c4\u03b1\u03b9 \u03a4\u03b1 Torrent \u03bc\u03bf\u03c5
ConfigView.section.style.alwaysRefreshMyTorrents.tooltip=\u0391\u03c5\u03c4\u03ae \u03b7 \u03b5\u03c0\u03b9\u03bb\u03bf\u03b3\u03ae \u03b5\u03bd\u03b7\u03bc\u03b5\u03c1\u03ce\u03bd\u03b5\u03b9 \u03c4\u03b7\u03bd \u03c0\u03c1\u03bf\u03b2\u03bf\u03bb\u03ae \u03c4\u03c9\u03bd Torrent \u03bc\u03bf\u03c5 \u03b1\u03ba\u03cc\u03bc\u03b7 \u03ba\u03b1\u03b9 \u03b1\u03bd \u03b4\u03b5\u03bd \u03b5\u03bc\u03c6\u03b1\u03bd\u03af\u03b6\u03b5\u03c4\u03b1\u03b9 (\u03c7\u03c1\u03ae\u03c3\u03b9\u03bc\u03bf \u03b3\u03b9\u03b1 \u03ba\u03ac\u03c0\u03bf\u03b9\u03b1 \u03c0\u03c1\u03cc\u03c3\u03b8\u03b5\u03c4\u03b1 mIRC)
-ConfigView.section.style.verticaloffset=\u039a\u03b1\u03c4\u03b1\u03ba\u03cc\u03c1\u03c5\u03c3\u03b7 \u0391\u03c0\u03cc\u03ba\u03bb\u03b9\u03c3\u03b7 \u0393\u03c1\u03b1\u03c6\u03b9\u03ba\u03ce\u03bd (\u0394\u03b9\u03cc\u03c1\u03b8\u03c9\u03c3\u03b7 GTK)
+#
+#2.0.7.0
+#
security.certtruster.title=\u03a0\u03c1\u03bf\u03b5\u03b9\u03b4\u03bf\u03c0\u03bf\u03af\u03b7\u03c3\u03b7 \u03a0\u03b9\u03c3\u03c4\u03bf\u03c0\u03bf\u03b9\u03b7\u03c4\u03b9\u03ba\u03bf\u03cd \u0391\u03c3\u03c6\u03b1\u03bb\u03b5\u03af\u03b1\u03c2
security.certtruster.intro=\u03a4\u03bf \u03c0\u03b9\u03c3\u03c4\u03bf\u03c0\u03bf\u03b9\u03b7\u03c4\u03b9\u03ba\u03cc \u03b1\u03c3\u03c6\u03b1\u03bb\u03b5\u03af\u03b1\u03c2 \u03ad\u03c7\u03b5\u03b9 \u03b5\u03ba\u03b4\u03bf\u03b8\u03b5\u03af \u03b1\u03c0\u03cc \u03bc\u03af\u03b1 \u03b5\u03c4\u03b1\u03b9\u03c1\u03af\u03b1 \u03c0\u03bf\u03c5 \u03b4\u03b5\u03bd \u03b5\u03bc\u03c0\u03b9\u03c3\u03c4\u03b5\u03cd\u03b5\u03c3\u03c4\u03b5
security.certtruster.resource=\u03a0\u03cc\u03c1\u03bf\u03c2:
@@ -715,6 +721,9 @@ ConfigView.section.style.dropdiraction=\u0394\u03c5\u03bd\u03b1\u03c4\u03cc\u03c
ConfigView.section.style.dropdiraction.opentorrents=\u0386\u03bd\u03bf\u03b9\u03b3\u03bc\u03b1 Torrents
ConfigView.section.style.dropdiraction.sharefolder=\u039a\u03bf\u03b9\u03bd\u03bf\u03c0\u03bf\u03af\u03b7\u03c3\u03b7 \u03a6\u03b1\u03ba\u03ad\u03bb\u03bf\u03c5
ConfigView.section.style.dropdiraction.sharefoldercontents=\u039a\u03bf\u03b9\u03bd\u03bf\u03c0\u03bf\u03af\u03b7\u03c3\u03b7 \u03a0\u03b5\u03c1\u03b9\u03b5\u03c7\u03bf\u03bc\u03ad\u03bd\u03c9\u03bd
+#
+# 2.0.7.x
+#
Categories.all=\u038c\u03bb\u03b5\u03c2
Categories.uncategorized=\u03a7\u03c9\u03c1\u03af\u03c2 \u039a\u03b1\u03c4\u03b7\u03b3\u03bf\u03c1\u03af\u03b1
CategoryAddWindow.message=\u0394\u03c9\u03c3\u03c4\u03b5 \u03b5\u03bd\u03b1 \u03bd\u03b5\u03bf \u03bf\u03bd\u03bf\u03bc\u03b1 \u03ba\u03b1\u03c4\u03b7\u03b3\u03bf\u03c1\u03b9\u03b1\u03c2
@@ -746,7 +755,6 @@ ConfigView.text.ignoreRule=\u039a\u03b1\u03bd\u03cc\u03bd\u03b1\u03c2 \u0391\u03
ConfigView.text.minutes=\u03bb\u03b5\u03c0\u03c4\u03ac
ConfigView.text.neverIgnore=\u039d\u03b1 \u03bc\u03b7 \u03b3\u03af\u03bd\u03b5\u03c4\u03b1\u03b9 \u03c0\u03bf\u03c4\u03ad \u03b1\u03b3\u03bd\u03cc\u03b7\u03c3\u03b7
DownloadManager.error.datamissing=\u0391\u03bd\u03cd\u03c0\u03b1\u03c1\u03ba\u03c4\u03b1 \u0394\u03b5\u03b4\u03bf\u03bc\u03ad\u03bd\u03b1
-iconBar.queue.tooltip=\u039b\u03af\u03c3\u03c4\u03b1
MainWindow.menu.file.open.torrentforseeding=\u0391\u03c1\u03c7\u03b5\u03af\u03bf .torrent (\u0393\u03b9\u03b1 \u03b4\u03b9\u03b1\u03bc\u03bf\u03b9\u03c1\u03b1\u03c3\u03bc\u03bf)
MainWindow.menu.language.refresh=&\u0391\u03bd\u03b1\u03bd\u03b5\u03c9\u03c3\u03b7
ManagerItem.forced=\u0395\u03be\u03b1\u03bd\u03b1\u03b3\u03ba\u03b1\u03c3\u03bc\u03cc\u03c2
@@ -795,6 +803,9 @@ SpeedView.stats.session=\u03a4\u03c9\u03c1\u03b9\u03bd\u03b7 \u03a3\u03c5\u03bd\
SpeedView.stats.downloaded=\u0395\u03c7\u03bf\u03c5\u03bd \u03c0\u03b1\u03c1\u03b1\u03bb\u03b7\u03c6\u03b8\u03b5\u03b9
SpeedView.stats.uploaded=\u0395\u03c7\u03bf\u03c5\u03bd \u03b1\u03c0\u03bf\u03c3\u03c4\u03b1\u03bb\u03b5\u03b9
SpeedView.stats.uptime=\u03a7\u03c1\u03bf\u03bd\u03bf\u03c2 \u03bb\u03b5\u03b9\u03c4\u03bf\u03c5\u03c1\u03b3\u03b9\u03b1\u03c2
+#
+# > 2.0.8.0
+#
OpenTorrentWindow.title=\u0395\u03bd\u03b5\u03c1\u03b3\u03b1 Torrent(s)
OpenTorrentWindow.message=\u03a0\u03b5\u03b9\u03c1\u03b1\u03bc\u03b1\u03c4\u03b9\u03ba\u03bf
OpenTorrentWindow.addFiles=&\u03a0\u03c1\u03bf\u03c3\u03b8\u03b7\u03ba\u03b7 \u03b1\u03c1\u03c7\u03b5\u03b9\u03c9\u03bd
@@ -910,6 +921,8 @@ upnp.mapping.dataportudp=UDP \u0398\u03c5\u03c1\u03b1 \u03a0\u03b5\u03bb\u03b1\u
MainWindow.status.updowndetails.tooltip=\u039b\u03b5\u03c0\u03c4\u03bf\u03bc\u03b5\u03c1\u03b5\u03b9\u03b5\u03c2 \u03c4\u03b1\u03c7\u03c5\u03c4\u03b7\u03c4\u03b1\u03c2 \u039b\u03b7\u03c8\u03b7\u03c2/\u0391\u03c0\u03bf\u03c3\u03c4\u03bf\u03bb\u03b7\u03c2 - \u0391\u03bb\u03bb\u03b1\u03be\u03c4\u03b5 \u03c4\u03b9\u03c2 \u03bc\u03b5 \u03b4\u03b5\u03be\u03b9 \u03ba\u03bb\u03b9\u03ba
TrackerClient.announce.warningmessage=\u039f \u0399\u03c7\u03bd\u03b7\u03bb\u03b1\u03c4\u03b7\u03c2 \u03c4\u03bf\u03c5 '%1' \u03b5\u03c0\u03b5\u03c3\u03c4\u03c1\u03b5\u03c8\u03b5 \u03c0\u03c1\u03bf\u03b5\u03b9\u03b4\u03bf\u03c0\u03bf\u03b9\u03b7\u03c3\u03b7 '%2'
ConfigView.section.tracker.publishenabledetails=\u0394\u03b7\u03bc\u03bf\u03c3\u03af\u03b5\u03c5\u03c3\u03b7 \u03b1\u03c1\u03c7\u03b5\u03af\u03bf\u03c5 torrent \u03ba\u03b1\u03b9 \u03bb\u03b5\u03c0\u03c4\u03bf\u03bc\u03b5\u03c1\u03b9\u03ce\u03bd \u03c3\u03c5\u03bd\u03b4\u03ad\u03c3\u03b5\u03c9\u03bd
+#Removed
+#MyTorrentsView.menu.setSpeed=Set Upload Speed
MainWindow.menu.transfers=&\u039c\u03b5\u03c4\u03b1\u03c6\u03bf\u03c1\u03ad\u03c2
MainWindow.menu.transfers.startalltransfers=&\u0395\u03c0\u03b1\u03bd\u03b5\u03ba\u03ba\u03b9\u03bd\u03b7\u03c3\u03b7 \u03bf\u03bb\u03c9\u03bd
MainWindow.menu.transfers.stopalltransfers=&\u0394\u03b9\u03b1\u03ba\u03bf\u03c0\u03b7 \u03bf\u03bb\u03c9\u03bd
@@ -962,21 +975,32 @@ FilesView.fullpath=\u0395\u03bc\u03c6\u03ac\u03bd\u03b9\u03c3\u03b7 \u03c0\u03bb
FilesView.remaining=\u0391\u03c0\u03bf\u03bc\u03ad\u03bd\u03bf\u03bd\u03c4\u03b1 \u03ba\u03bf\u03bc\u03bc\u03ac\u03c4\u03b9\u03b1
TableColumn.header.trackername=\u038c\u03bd\u03bf\u03bc\u03b1 \u03b9\u03c7\u03bd\u03b7\u03bb\u03ac\u03c4\u03b7
TableColumn.header.trackername.info=\u039f\u03bd\u03bf\u03bc\u03b1 \u0399\u03c7\u03bd\u03b7\u03bb\u03b1\u03c4\u03b7 \u03bc\u03b5 \u03b2\u03b1\u03c3\u03b7 \u03c4\u03b7 \u03b4\u03b9\u03b5\u03c5\u03b8\u03c5\u03bd\u03c3\u03b7 \u03b1\u03bd\u03b1\u03ba\u03bf\u03b9\u03bd\u03c9\u03c3\u03b7\u03c2
-ConfigView.label.announceport=\u0391\u03bb\u03bb\u03b1\u03b3\u03b7 \u03b8\u03c5\u03c1\u03b1\u03c2 \u03b1\u03bd\u03b1\u03ba\u03bf\u03b9\u03bd\u03c9\u03c3\u03b5\u03c9\u03bd \u03b9\u03c7\u03bd\u03b7\u03bb\u03b1\u03c4\u03b7
ConfigView.group.override=\u0391\u03b3\u03bd\u03bf\u03b7\u03c3\u03b7 \u03c1\u03c5\u03b8\u03bc\u03b9\u03c3\u03b5\u03c9\u03bd
ConfigView.label.overrideip=\u0391\u03b3\u03bd\u03cc\u03b7\u03c3\u03b7 \u03b4\u03b9\u03b5\u03cd\u03b8\u03c5\u03bd\u03c3\u03b7\u03c2 IP \u03c0\u03bf\u03c5 \u03b1\u03c0\u03bf\u03c3\u03c4\u03ac\u03bb\u03b8\u03b7\u03ba\u03b5 \u03ba\u03b1\u03c4\u03ac \u03c4\u03b7\u03bd \u03c0\u03b1\u03c1\u03b1\u03ba\u03bf\u03bb\u03bf\u03cd\u03b8\u03b7\u03c3\u03b7 \u03b1\u03bb\u03bb\u03b1\u03b3\u03ce\u03bd\n - \u03a7\u03c1\u03b7\u03c3\u03b9\u03bc\u03bf\u03c0\u03bf\u03b9\u03ae\u03c3\u03c4\u03b5 \u03c4\u03bf \u03bc\u03cc\u03bd\u03bf \u03b1\u03bd \u03c0\u03c1\u03b1\u03b3\u03bc\u03b1\u03c4\u03b9\u03ba\u03ac \u03be\u03ad\u03c1\u03b5\u03c4\u03b5 \u03b3\u03b9\u03b1 \u03c0\u03b9\u03bf \u03bb\u03cc\u03b3\u03bf \u03c4\u03bf \u03c7\u03c1\u03b5\u03b9\u03ac\u03b6\u03b5\u03c3\u03c4\u03b5!
ConfigView.label.overrideip.tooltip=Inform the tracker of a different IP address than the one outgoing packets come from. Leave blank not to use the option.
+#file can be a URL or a path in the jar
diagnostics.log_found=Vuze did not shutdown tidily. Please check %1 for diagnostic log files and consider reporting them to the Vuze team if this is the result of an application error.
+# %1 = "in kbps" or ""; %2 = "upload" or "download"
OpenTorrentWindow.torrentLocation=\u0391\u03c1\u03c7\u03b5\u03b9\u03b1 Torrent:
Button.moveUp=\u039c\u03b5\u03c4\u03b1\u03ba\u03af\u03bd\u03b7\u03c3\u03b7 \u03a0\u03ac\u03bd\u03c9
Button.moveDown=\u039c\u03b5\u03c4\u03b1\u03ba\u03af\u03bd\u03b7\u03c3\u03b7 \u039a\u03ac\u03c4\u03c9
-# The remaining keys were not in MessagesBundle.properties
-ConfigView.section.file.check_piece_limit.explain=If you have a slow CPU such that hash calculations lag behind disk writing (numerous complete pieces in pieces view), limiting check queue length may decrease memory usage
-ConfigView.section.file.write_block_limit.explain=If you have slow disk write performance such that disk writing is slower than download speed (numerous red blocks in pieces view), limiting write queue length may decrease memory usage
-ConfigView.section.file.check_piece_limit=Maximum outstanding check pieces\n[0: unlimited]. Piece size depends on torrent
-ConfigView.section.file.write_block_limit=Maximum outstanding disk block writes\n[0: unlimited]. Block size %1
-configureWizard.nat.already_listening=\u0394\u03b5\u03bd \u03ae\u03c4\u03b1\u03bd \u03b4\u03c5\u03bd\u03b1\u03c4\u03ae \u03b7 \u03b4\u03bf\u03ba\u03b9\u03bc\u03ae \u03b5\u03c0\u03b5\u03b9\u03b4\u03ae \u03b7 \u03b8\u03cd\u03c1\u03b1 \u03b5\u03af\u03bd\u03b1\u03b9 \n\u03c3\u03b5 \u03c7\u03c1\u03ae\u03c3\u03b7. \u03a0\u03b1\u03c1\u03b1\u03ba\u03b1\u03bb\u03bf\u03cd\u03bc\u03b5 \u03b4\u03b9\u03b1\u03ba\u03cc\u03c8\u03c4\u03b5 \u03cc\u03bb\u03b1 \u03c4\u03b1 \u03b5\u03bd\u03b5\u03c1\u03b3\u03ac torrents \u03ba\u03b1\u03b9 \u03b5\u03c0\u03b1\u03bd\u03b5\u03ba\u03ba\u03b9\u03bd\u03ae\u03c3\u03c4\u03b5 \u03c4\u03bf Azureus.\n\u0388\u03c0\u03b5\u03b9\u03c4\u03b1 \u03c4\u03c1\u03ad\u03be\u03c4\u03b5 \u03b1\u03c5\u03c4\u03cc \u03c4\u03bf \u03b4\u03bf\u03ba\u03b9\u03bc\u03b1\u03c3\u03c4\u03b9\u03ba\u03cc \u03be\u03b1\u03bd\u03ac.
-SelectorGuard.repairmessage=\u0395\u03b1\u03bd \u03bb\u03b1\u03bc\u03b2\u03b1\u03bd\u03b5\u03c4\u03b5 \u03b1\u03c5\u03c4\u03bf \u03c4\u03bf \u03bc\u03b7\u03bd\u03c5\u03bc\u03b1 \u03c3\u03c5\u03bd\u03b5\u03c7\u03c9\u03c2 \u03ba\u03b1\u03b9 \u03b5\u03b9\u03c3\u03c4\u03b5 \u03c3\u03b9\u03b3\u03bf\u03c5\u03c1\u03bf\u03b9 \u03bf\u03c4\u03b9 \u03c4\u03bf \u03b4\u03b9\u03ba\u03c4\u03c5\u03bf \u03c3\u03b1\u03c2 \u03b5\u03b9\u03bd\u03b1\u03b9 \u03b5\u03bd\u03c4\u03b1\u03be\u03b5\u03b9, \u03ba\u03b1\u03b9 \u03b5\u03c7\u03b5\u03c4\u03b5 \u03c4\u03b7\u03bd \u03b5\u03ba\u03b4\u03bf\u03c3\u03b7 1.4 \u03c4\u03b7\u03c2 Java, \u03c4\u03bf\u03c4\u03b5 \u03bc\u03b1\u03bb\u03bb\u03bf\u03bd \u03b2\u03c1\u03b7\u03ba\u03b1\u03c4\u03b5 \u03c0\u03c1\u03bf\u03b2\u03bb\u03b7\u03bc\u03b1 \u03c3\u03c4\u03bf JRE (\u03a3.\u03c4.\u03bc.: \u03a4\u03b9 \u03bb\u03b5\u03c2 \u03c4\u03c9\u03c1\u03b1!!) \u03ba\u03b1\u03b9 \u03b8\u03b1 \u03c0\u03c1\u03b5\u03c0\u03b5\u03b9 \u03bd\u03b1 \u03c4\u03bf \u03b1\u03bd\u03b1\u03b2\u03b1\u03b8\u03bc\u03b9\u03c3\u03b5\u03c4\u03b5 \u03c3\u03c4\u03b7\u03bd \u03bd\u03b5\u03c9\u03c4\u03b5\u03c1\u03b7 \u03b5\u03ba\u03b4\u03bf\u03c3\u03b7 1.5 (5.0) \u03b1\u03c0\u03bf \u03c4\u03bf http://java.sun.com
-MyTorrentsView.menu.setSpeed=\u039f\u03c1\u03b9\u03c3\u03bc\u03bf\u03c2 \u03a4\u03b1\u03c7\u03c5\u03c4\u03b7\u03c4\u03b1\u03c2
-ConfigView.label.oldpollingstyle=Use alternative socket polling - Increases CPU usage, but may help with network disconnects
+# > 2402
+#TableColumn.header.size={MyTorrentsView.size}
+#TableColumn.header.up={MyTorrentsView.up}
+#TableColumn.header.date_added={MyTorrentsView.date_added}
+#TableColumn.header.name={MyTorrentsView.name}
+#TableColumn.header.shareRatio={MyTorrentsView.shareRatio}
+#
+# Used for peers which we can't determine.
+PeerSocket.unknown=\u0386\u03b3\u03bd\u03c9\u03c3\u03c4\u03bf
+ConfigView.label.announceport=\u0391\u03bb\u03bb\u03b1\u03b3\u03b7 \u03b8\u03c5\u03c1\u03b1\u03c2 \u03b1\u03bd\u03b1\u03ba\u03bf\u03b9\u03bd\u03c9\u03c3\u03b5\u03c9\u03bd \u03b9\u03c7\u03bd\u03b7\u03bb\u03b1\u03c4\u03b7
+#v3.MainWindow.menu.view.configuration=Preferences
+#v3.MainWindow.menu.view.configuration.keybinding=Meta+,
+#v3.TorrentOptionsView.title.short=Preferences
+#v3.TorrentOptionsView.title.full=Preferences
+#v3.ConfigView.title.short=Preferences
+#v3.ConfigView.title.full=Preferences
+iconBar.queue.tooltip=\u039b\u03af\u03c3\u03c4\u03b1
+MainWindow.menu.help.faq=&\u03a3\u03c5\u03c7\u03bd\u03ad\u03c2 \u0395\u03c1\u03c9\u03c4\u03ae\u03c3\u03b5\u03b9\u03c2
+#what you've watched? Discover more with a single click...
MainWindow.menu.help.donate=&\u039a\u03ac\u03bd\u03c4\u03b5 \u03bc\u03af\u03b1 \u0394\u03c9\u03c1\u03b5\u03b1(2\u20ac,5\u20ac,...)
diff --git a/org/gudy/azureus2/internat/MessagesBundle_en_GB.properties b/org/gudy/azureus2/internat/MessagesBundle_en_GB.properties
index a6a3232..0b85ec0 100644
--- a/org/gudy/azureus2/internat/MessagesBundle_en_GB.properties
+++ b/org/gudy/azureus2/internat/MessagesBundle_en_GB.properties
@@ -1,27 +1,49 @@
+#There is a plugin to help with internationalizing these bundles at http://azureus.sourceforge.net/plugin_list.php
+MainWindow.menu.window.minimize=Minimise
+ConfigView.label.priorityExtensions=Auto-prioritise files with \n - eg: .txt;.nfo;.jpg
+ConfigView.label.closetotray=Close minimises to System Tray
+ConfigView.label.minimizetotray=Minimise minimises to System Tray
+ConfigView.label.startminimized=Start minimised
+ConfigView.label.zeronewfiles.tooltip=Minimises fragmentation
+splash.initializeGui=Initialising Main Window
+ConfigView.section.color=Colour Scheme
+#
+# Tooltips
+#
+#
+# 2.0.4.4
+#
+#
+#2.0.7.0
+#
+ConfigView.label.prioritizefirstpiece=Prioritise first and last piece of file(s)
+#
+# 2.0.7.x
+#
+Categories.uncategorized=Uncategorised
+ConfigView.label.seeding.rankType.peer.tooltip=more peers and fewer seeds = higher rank\nThis ranking minimises the number of torrents that need to be kept active to maximise the upload
+#
+# > 2.0.8.0
+#
ConfigView.section.style.colorOverrides=Colour Overrides
ConfigView.section.style.colorOverrides.reset=Reset Colour
+splash.initializeGM=Initialising Global Torrent Manager
download.removerules.unauthorised.info=Unauthorised torrents are those where the announce response contains either "not authoris(z)ed" or "unauthoris(z)ed" in the "failure response"
download.removerules.unauthorised=Automatically remove unauthorised torrents
-ConfigView.section.color=Colour Scheme
-Categories.uncategorized=Uncategorised
+#Removed
+#MyTorrentsView.menu.setSpeed=Set Upload Speed
+splash.plugin.init=Initialising Plugin:
+splash.plugin.UIinit=Initialising Plugin GUI: %1
ConfigView.section.connection.peersource.DHT=Decentralised tracking
wizard.tracker.dht=Decentralised (Vuze clients only)
ConfigView.section.sharing.permitdht=Allow decentralised tracking when tracker is unavailable
dht.info=This plugin supports decentralised tracking, amongst other things, - disabling it will reduce your ability to download
+#file can be a URL or a path in the jar
+# %1 = "in kbps" or ""; %2 = "upload" or "download"
+# > 2402
UIDebugGenerator.message.cancel.title=Generate Debug Info Cancelled
+# Used for peers which we can't determine.
FileDownload.canceled=A torrent file download has been successfully cancelled by a user action: %1
Progress.reporting.status.canceled=Cancelled
Progress.reporting.window.remove.auto.tooltip=Automatically remove all completed, failed, or cancelled processes from the view
Progress.reporting.window.remove.now.tooltip=Remove all completed, failed, or cancelled processes from the view
-splash.plugin.init=Initialising Plugin:
-splash.plugin.UIinit=Initialising Plugin GUI: %1
-splash.initializeGui=Initialising Main Window
-MainWindow.menu.window.minimize=Minimise
-ConfigView.label.priorityExtensions=Auto-prioritise files with \n - eg: .txt;.nfo;.jpg
-ConfigView.label.closetotray=Close minimises to System Tray
-ConfigView.label.minimizetotray=Minimise minimises to System Tray
-ConfigView.label.startminimized=Start minimised
-ConfigView.label.zeronewfiles.tooltip=Minimises fragmentation
-ConfigView.label.prioritizefirstpiece=Prioritise first and last piece of file(s)
-ConfigView.label.seeding.rankType.peer.tooltip=more peers and fewer seeds = higher rank\nThis ranking minimises the number of torrents that need to be kept active to maximise the upload
-splash.initializeGM=Initialising Global Torrent Manager
\ No newline at end of file
diff --git a/org/gudy/azureus2/internat/MessagesBundle_es_ES.properties b/org/gudy/azureus2/internat/MessagesBundle_es_ES.properties
index 644512d..c3b981c 100644
--- a/org/gudy/azureus2/internat/MessagesBundle_es_ES.properties
+++ b/org/gudy/azureus2/internat/MessagesBundle_es_ES.properties
@@ -708,7 +708,6 @@ ConfigView.section.style.alwaysRefreshMyTorrents.tooltip=Esta opci\u00f3n refres
#
#2.0.7.0
#
-ConfigView.section.style.verticaloffset=Desplazamiento vertical de los gr\u00e1ficos (parche GTK)
security.certtruster.title=Advertencia sobre el Certificado de Seguridad
security.certtruster.intro=El certificado de seguridad fue emitido por una compa\u00f1\u00eda en la que no conf\u00edas
security.certtruster.resource=Recurso:
@@ -1885,13 +1884,8 @@ MainWindow.menu.view.iconbar=Barra de Herramientas
MyTorrentsView.menu.rename=Renombrar
MyTorrentsView.menu.rename.displayed=Renombrar el Nombre mostrado
MyTorrentsView.menu.rename.save_path=Renombrar la Ruta donde Guardar
-MyTorrentsView.menu.rename.displayed_and_save_path=Renombrar Ambos
MyTorrentsView.menu.rename.displayed.enter.title=Renombrar el Nombre mostrado
MyTorrentsView.menu.rename.displayed.enter.message=Escriba el nuevo nombre a mostrar para esta descarga.\nSi no escribe nada, se usar\u00e1 el nombre original.
-MyTorrentsView.menu.rename.save_path.enter.title=Renombrar la Ruta donde Guardar
-MyTorrentsView.menu.rename.save_path.enter.message=Escriba un nombre nuevo a la ruta donde guardar esta descarga.\nSi no se escribiera nada, se usar\u00e1 el nombre mostrado en la descarga.
-MyTorrentsView.menu.rename.displayed_and_save_path.enter.title=Renombrar la Descarga
-MyTorrentsView.menu.rename.displayed_and_save_path.enter.message=Escriba el nuevo nombre de esta descarga.\nSi no se escribe nada, se usar\u00e1n los valores originales.
MyTorrentsView.menu.edit_comment=Editar Comentario
MyTorrentsView.menu.edit_comment.enter.title=Editar Comentario
MyTorrentsView.menu.edit_comment.enter.message=Introduzca un comentario para esta descarga
@@ -2101,7 +2095,6 @@ v3.MainWindow.button.comment=Comentario
v3.MainWindow.button.viewdetails=Ver Detalles
v3.MainWindow.button.play=Reproducir
v3.MainWindow.button.cancel=Cancelar
-v3.MainWindow.button.sendtofriend=Compartir Torrent
v3.MainWindow.button.preview=Vista previa
v3.MainWindow.view.wait=Inicializando la vista, espere por favor.
v3.MainWindow.xofx=%1 de %2
@@ -2400,49 +2393,17 @@ Button.bar.share=Compartir
Button.bar.add=Invitar a Amigos
Button.bar.edit=Editar
Button.bar.edit.cancel=Terminado de Editar
-v3.Share.menu=Compartir contenido
-v3.Share.header=Compartir
-v3.Share.header.message=Compartir con los amigos actuales o a\u00f1adir otros amigos nuevos.
-v3.Share.add.buddy=A\u00f1adir Amigos
-v3.Share.add.edit.buddy=A\u00f1adir/Editar Amigos
-v3.Share.add.buddy.all=Compartir con todos
-v3.Share.add.buddy.existing=Amigos existentes:
-v3.Share.add.buddy.new=Nuevos Amigos:
-v3.Share.buddies=Amigos
-v3.Share.invitees=Invitados
-v3.Share.invite.buddies.prompt=Invitar m\u00e1s amigos con los que compartir
-v3.Share.send.now=Enviar
-v3.Share.optional.message=Mensaje opcional entregado mediante la Lista de Actividad (m\u00e1ximo 140 caracteres):
-v3.Share.disclaimer=Nota: Se encriptar\u00e1 el contenido que compartes as\u00ed como este mensaje opcional.
-v3.Share.disclaimer.link=Saber m\u00e1s
-ConfigView.section.security.vuze.login=Debes estar registrado en Vuze para poder realizar esta operaci\u00f3n
-v3.buddy.menu.viewprofile=Ver Perfil
-v3.buddy.menu.remove=Quitar Amigo
v3.MainWindow.menu.view.pluginbar=Barra de Complementos
-v3.activity.buddy-request=Tienes una solicitud de amigo procedente de %1
-v3.activity.buddy-request.accept=Aceptar
-v3.activity.buddy-request.multi=Tienes una solicitud del amigo [#%3] procedente de %1
-v3.activity.buddy-linkup=Desde ahora %1 y usted son amigos
-v3.activity.share-content.no-msg=%1 ha compartido %2 contigo
-v3.buddies.remove=Quitar amigo
-v3.buddies.add.to.share=A\u00f1adir amigo para Compartir
MainWindow.dialog.select.vuze.file=Seleccione archivo Vuze
MainWindow.menu.file.open.vuze=Archivo Vuze ...
-azbuddy.ui.dialog.disable.title=Desactivar el complemento Amigos
-azbuddy.ui.dialog.disable.text=Con el complemento amigos desactivado, no podr\u00e1 ni compartir torrents mediante la Barra de Amigos de la parte inferior de la aplicaci\u00f3n, ni modificar su lista de amigos\n\n\u00bfSeguro que quiere desactivarlo?
metasearch.addtemplate.title=\u00bfInstalar la Plantilla de B\u00fasqueda?
metasearch.addtemplate.desc=\u00bfEst\u00e1 seguro de querer instalar una plantilla de b\u00fasqueda de nombre '%1'?
v3.share.private.title=Compartiendo Torrent
v3.share.private.text=El torrent elegido viene marcado como Torrent Privado.\n\nNo puedes compartir torrents privados.
-v3.buddies.disabled.title=Complemento Amigos Desactivado
-v3.buddies.disabled.text._windows=Has desactivado el complemento amigos, lo que te impedir\u00e1 compartir con los amigos, aceptar sus torrents o sus solicitudes. Puedes cambiar tus preferencias en la pesta\u00f1a Opciones.
-v3.buddies.disabled.text._mac=Has desactivado el complemento amigos, lo que te impedir\u00e1 compartir con los amigos, aceptar sus torrents o sus solicitudes. Puedes cambiar tus preferencias en la pesta\u00f1a Opciones.
metasearch.addtemplate.dup.title=Duplicar Plantilla
metasearch.addtemplate.dup.desc=La plantilla de b\u00fasqueda %1 ya estaba instalada
metasearch.export.select.template.file=Guardar Plantilla
metasearch.import.select.template.file=Abrir Plantilla
-v3.MainWindow.button.newtag.share=Nuevo! Compartir Torrent
-v3.buddies.faq=Saber m\u00e1s
dialog.uiswitch.title=Pasar al GUI de Vuze
dialog.uiswitch.text=Para poder usar esto, necesitas estar usando el GUI de Vuze.\n\nVuze necesitar\u00e1 reiniciarse.
dialog.uiswitch.button=Pasar al GUI de Vuze
@@ -2450,24 +2411,10 @@ azbuddy.tracker.enabled=Active 'Impulsar Amigos' para priorizar la descarga con
azbuddy.protocolspeed=Carga m\u00e1x del protocolo de amigo en KB/s
v3.MainWindow.button.download=Descarga
v3.MainWindow.button.run=Ejecutar el archivo descargado
-v3.activity.header.friend.requests.foryou=Petici\u00f3n de Amigo - Para T\u00ed
-v3.activity.header.friend.requests.fromyou=Petici\u00f3n de Amigo - Desde T\u00ed
-v3.activity.header.friend.requests.accepted=Petici\u00f3n de Amigo - Aceptada
-v3.activity.header.share.requests=Compartir Peticiones de Torrent
v3.activity.header.downloads=Descargas
v3.activity.header.vuze.news=Noticias sobre Vuze
-login.optional.message=Debes estar identificado para poder usar esta caracter\u00edstica
-message.confirm.share.singular=\u00a1Excelente! Se ha enviado su petici\u00f3n para compartir un torrent.
-message.confirm.share.plural=\u00a1Excelente! Se han enviado sus peticiones para compartir un torrent.
-message.confirm.share.invite.singular=\u00a1Excelente! Se ha enviado su petici\u00f3n para conectarse y compartir. Tambi\u00e9n puede intentar convencer amablemente a su amigo para que acepte.
-message.confirm.share.invite.plural=\u00a1Excelente! Se han enviado sus peticiones para conectarse y compartir. Tambi\u00e9n puede intentar convencerlos amablemente para que acepten.
-message.confirm.invite.singular=\u00a1Excelente! Se ha enviado su petici\u00f3n de amistad. Tambi\u00e9n puede intentar convencer amablemente a su amigo para que acepte.
-message.confirm.invite.plural=\u00a1Excelente! Se han enviado sus peticiones de amistad. Tambi\u00e9n puede intentar convencerlos amablemente para que acepten.
-message.confirm.invite.error=\u00a1Mosquis! A esta petici\u00f3n se le ha cruzado alg\u00fan cable. Una o varias de tus invitaciones ten\u00eda errores.
-message.prompt.add.friends=Para compartir haga clic en los iconos de cada amigo situados en la parte inferior de la p\u00e1gina
message.taking.too.long=Parece que esto se est\u00e1 tomando m\u00e1s tiempo del esperado\nPulse 'ESC' si quiere cancelar esta operaci\u00f3n
message.status.success=Con \u00e9xito
-message.intro.friends=A\u00f1ada Amigos. Comparta Torrents. Descargue m\u00e1s r\u00e1pido
azbuddy.tracker.bbb.status.title=Impulsar Amigos
azbuddy.tracker.bbb.status.title.tooltip=Doble clic para ampliar detalles
azbuddy.tracker.bbb.status.idle=Sin Impulsar
@@ -2476,13 +2423,8 @@ azbuddy.tracker.bbb.status.in=Estoy siendo Impulsado
azbuddy.tracker.bbb.status.out=Impulsando a Amigos en este momento
v3.MainWindow.search.go.tooltip=Ejecutar B\u00fasqueda
v3.MainWindow.search.last.tooltip=Volver a los resultados de la b\u00fasqueda
-v3.activity.buddy-invited=Has enviado una petici\u00f3n de Amigo a %1.
-v3.activity.buddy-invited.multi=Has enviado una petici\u00f3n de Amigo a las siguientes personas:\n%1
metasearch.addtemplate.done.title=Plantilla A\u00f1adida
metasearch.addtemplate.done.desc=La plantilla '%1' se a\u00f1adi\u00f3 con \u00e9xito.\n\u00a1Se utilizar\u00e1 a partir de la pr\u00f3xima b\u00fasqueda!
-v3.MainWindow.button.share=Compartir contenido
-v3.buddies.remove.buddy.dialog.title=Confirmaci\u00f3n para Quitar amigo
-v3.buddies.remove.buddy.dialog.text=\u00bfSeguro que quieres borrar a %1 como amigo?
ConfigView.section.security.nopw=Falta la contrase\u00f1a
ConfigView.section.security.nopw_v=No se dispone de contrase\u00f1a, por favor ap\u00fantese en Vuze
fileplugininstall.install.title=\u00bfInstalar el Complemento?
@@ -2496,12 +2438,7 @@ azbuddy.os_not_avail=No Disponible
azbuddy.os_busy=Ocupado
azbuddy.os_offline=Desconectado
azbuddy.ui.menu.disconnect=Desconectar
-v3.chat.offline=%1 ahora est\u00e1 desconectado y recibir\u00e1 tu mensaje cuando vuelva a conectarse.
-v3.chat.wrongversion=%1 est\u00e1 utilizando una versi\u00f3n de Vuze que no tiene soporte de Chat.
azbuddy.enable_chat_notif=Permitir las notificaciones de chat
-v3.buddies.dnd.info.dialog.title=Soltar Compartici\u00f3n
-v3.buddies.dnd.info.dialog.text=Has iniciado "Soltar Compartici\u00f3n". Tu contenido se est\u00e1 preparando para poder compartirlo; la pantalla de compartici\u00f3n se mostrar\u00e1 en cuanto est\u00e9 listo.\n\nTienes que mantener Vuze en funcionamiento para que tu Amigo reciba el contenido.\n<A HREF="http://faq.vuze.com/?View=entry&EntryID=267">Clic aqu\u00ed</A> para obtener m\u00e1s informaci\u00f3n sobre esta caracter\u00edstica.
-v3.buddies.dnd.info.dialog.remember=No volver a mostrar este mensaje
DetailedListView.title=Lista Detallada
ConfigView.section.connection.network.max.outstanding.connect.attempts=N\u00ba m\u00e1x de conexiones salientes pendientes
plugins.init.force_enabled=Vuze ha detectado que el complemento "%1" estaba desactivado - Ha sido reactivado para permitir a Vuze funcionar correctamente.
@@ -2552,14 +2489,11 @@ PluginDeprecation.view=Depuraci\u00f3n de Complementos
PluginDeprecation.alert=Un complemento ha intentado usar una funcionalidad que ser\u00e1 eliminada en el futuro -para ampliar informaci\u00f3n abra por favor la vista del registro de Depuraci\u00f3n de Complementos.
TableColumn.header.Thumbnail=Icono
TableColumn.header.Thumbnail.info=El tama\u00f1o de la miniatura del contenido Vuze; para todos los dem\u00e1s contenidos, el sistema operativo proporcionar\u00e1 esos iconos.
-TableColumn.header.Rating_global=Valoraci\u00f3n
-TableColumn.header.Rating_global.info=La valoraci\u00f3n global de este contenido
v3.MainWindow.menu.getting_started=&Primeros pasos
MainWindow.menu.community=&Comunidad
MainWindow.menu.help.faq=&Preguntas Frecuentes
MainWindow.menu.community.forums=&Foros Comunitarios
MainWindow.menu.community.blog=Blog de &Vuze
-MainWindow.menu.community.add_friends=&A\u00f1adir Amigos
MainWindow.menu.help.support=&Ayuda and Soporte
Button.done=Hecho
GeneralView.torrent_created_on_and_by=%1 por %2
@@ -2571,7 +2505,6 @@ Button.remove=Eliminar
Button.send=Enviar
Button.back=Atr\u00e1s
ConfigView.section.Subscriptions=Suscripciones
-ConfigView.interface.start.library=Iniciar en Biblioteca
Wizard.Subscription.title=Subscribirse
Wizard.Subscription.optin.title=Activar Suscripciones
#what you've watched? Discover more with a single click...
@@ -2646,15 +2579,3 @@ xcode.deletedata.message.2=\n(todav\u00eda debe existir una copia en '%1')
devices.converting=Convirtiendo
Button.reload=Recargar
devices.auto.start=Auto-iniciar
-# The remaining keys were not in MessagesBundle.properties
-v3.activity.header.xdaysago=Hace %1 D\u00edas
-%2=
-v3.Share.add.or.remove.buddy=Editar invitaciones
-v3.activity.header.today=Hoy
-v3.buddies.count=%1 Amigos
-v3.MainWindow.menu.view.buttonbar=Barra de Botones
-v3.activity.header.yesterday=Ayer
-v3.activity.header.xweeksago=Hace %1 Semanas
-v3.Share.selected.buddies=Amigos seleccionados
-v3.activity.header.1weekago=Hace 1 Semana
-deletedata.message2=\n\u00bfSeguro que quiere continuar?
diff --git a/org/gudy/azureus2/internat/MessagesBundle_eu.properties b/org/gudy/azureus2/internat/MessagesBundle_eu.properties
index 7d4f77c..6859e5d 100644
--- a/org/gudy/azureus2/internat/MessagesBundle_eu.properties
+++ b/org/gudy/azureus2/internat/MessagesBundle_eu.properties
@@ -1,41 +1,28 @@
#There is a plugin to help with internationalizing these bundles at http://azureus.sourceforge.net/plugin_list.php
MainWindow.menu.file.open.torrent=Torrent fitxategia...
-MainWindow.menu.file.open.torrent.keybinding=Meta+O
Main.parameter.usage=Erabilera: java org.gudy.azureus2.cl.Main [parameters] "file.torrent" "save path"
Main.parameter.maxUploads=Aldibereko karga-kopuru maximoa
Main.parameter.maxSpeed=Karga-abiadura maximoa byte/seg-tan
MainWindow.menu.file=&Fitxategia
MainWindow.menu.file.open=&Ireki
MainWindow.menu.file.create=&Torrent berria...
-MainWindow.menu.file.create.keybinding=Meta+N
MainWindow.menu.file.create.fromfile=&Fitxategi batetik
MainWindow.menu.file.create.fromdir=&Direktorio batetik
MainWindow.menu.file.export=&Esportatu XML torrent-a...
-MainWindow.menu.file.export.keybinding=Meta+E
MainWindow.menu.file.export.keybinding.mac=Meta+Shit+E
MainWindow.menu.file.import=&Inportatu XML torrent-a...
-MainWindow.menu.file.import.keybinding=Meta+I
-MainWindow.menu.file.import.keybinding.mac=Meta+Shift+I
MainWindow.menu.file.closetab=Itxi &fitxa
-MainWindow.menu.file.closetab.keybinding=Meta+W
MainWindow.menu.file.closewindow=Itxi &leihoa
-MainWindow.menu.file.closewindow.keybinding=Meta+Shift+W
MainWindow.menu.file.exit=I&rten
-MainWindow.menu.file.exit.keybinding=Alt+F4
MainWindow.dialog.choose.file=Hautatu torrent fitxategia
MainWindow.menu.file.folder=&Karpeta...
-MainWindow.menu.file.folder.keybinding=Meta+Shift+O
MainWindow.dialog.choose.folder=Hautatu torrent fitxategien direktorioa
MainWindow.menu.view=&Ikusi
MainWindow.menu.view.show=Erakutsi
MainWindow.menu.view.mytorrents=&Nire torrent-ak
-MainWindow.menu.view.mytorrents.keybinding=Meta+1
MainWindow.menu.view.open_global_transfer_bar=Transferentzien barra
MainWindow.menu.view.configuration=&Aukerak...
-MainWindow.menu.view.configuration.keybinding=Meta+,
MainWindow.menu.view.console=K&ontsola
-MainWindow.menu.view.console.keybinding=Meta+4
-MainWindow.menu.view.irc=&IRC
MainWindow.menu.view.allpeers=Pare guztiak
MainWindow.menu.view.detailedlist=Zerrenda &xehea
MainWindow.menu.closealldetails=Itxi xehetasun &guztiak
@@ -44,8 +31,6 @@ MainWindow.menu.language=&Hizkuntza
ConfigView.section.language=Hizkuntza
MainWindow.menu.window=&Leihoa
MainWindow.menu.window.minimize=&Ikonotu
-MainWindow.menu.window.minimize.keybinding=Meta+M
-MainWindow.menu.window.zoom=&Zoom
MainWindow.menu.window.alltofront=Mugitu denak &aurrera
MainWindow.menu.help=La&guntza
MainWindow.menu.help.about=Vuze-ri buruz
@@ -54,7 +39,6 @@ MainWindow.about.title=Honi buruz
MainWindow.about.section.developers=Garatzaileak
MainWindow.about.section.translators=Itzultzaileak
MainWindow.about.section.system=Sistema
-MainWindow.about.section.internet=Internet
MainWindow.about.internet.homepage=Vuze-ren webgunea
MainWindow.about.internet.sourceforge=Proiektuaren webgunea Sourceforge-n
MainWindow.about.internet.sourceforgedownloads=Sourceforge-ko deskargak
@@ -89,7 +73,7 @@ TableColumn.header.trackernextaccess=Hurrengo aztarnariaren atzipena
TableColumn.header.trackernextaccess.info=Hurrengo aztarnariaren atzipena noiz gertatuko den
TableColumn.header.priority=Lehentasuna
TableColumn.header.priority.info=Torrent-ari ematen zaion banda-zabalera finkatzen du
-TableColumn.header.seeds.fullcopycalc=\ %1 parek onartutako %2 kopia oso
+TableColumn.header.seeds.fullcopycalc= %1 parek onartutako %2 kopia oso
MyTorrentsView.menu.showdetails=Erakutsi &xehetasunak
MyTorrentsView.menu.showdownloadbar=Erakutsi deskarga-&barra
MyTorrentsView.menu.open=&Ireki fitxategia
@@ -110,7 +94,6 @@ PeersView.ip=IPa
PeersView.ip.info=Parearen IPa
PeersView.port=Ataka
PeersView.port.info=Erabiltzen ari den ataka
-PeersView.T=T
PeersView.T.info=L (lokala): zuk ezarri duzu konexioa, R (urrunekoa): pareak ezarri du konexioa.
PeersView.T.L.tooltip=Zuk ezarri duzu konexioa
PeersView.T.R.tooltip=Pareak ezarri du konexioa
@@ -119,7 +102,6 @@ PeersView.I1.info=Beste pareak duena interesatzen zaizu?
PeersView.C1=C (Pareak buxatua)
PeersView.C1.info=Pareak deskarga galarazten badizu
PeersView.pieces=Atalak
-PeersView.%=%
PeersView.downloadspeed=Deskarga-abiadura
PeersView.download=Deskarga
PeersView.I2=I (parearentzat interesgarria)
@@ -132,7 +114,6 @@ PeersView.upload=Kargatu
PeersView.upload.info=Zure karga-abiadura osoa parearekiko
PeersView.statup=Batez besteko karga
PeersView.statup.info=Parearen karga-abiaduraren balio estimatua
-PeersView.S=S
PeersView.S.info=Errefusatua: Pare bat eskuz "errefusa" daiteke, edo automatikoki (datuak abiadura motelegian bidaltzeagatik)
PeersView.downloadspeedoverall=Deskarga-abiadura guztira
PeersView.optunchoke=Auk. Ezabatu buxadura
@@ -174,7 +155,6 @@ ConfigView.label.autoupdate=Ireki berritze-leihoa bertsio berri bat eskuragarri
ConfigView.label.openconsole=Ireki kontsola abioan
ConfigView.label.openconfig=Ireki aukeren leihoa abioan
ConfigView.label.startminimized=Abiatu ikonotuta
-ConfigView.section.irc=IRC
ConfigView.label.ircwiki=Irakurri http://azureuswiki.com/index.php/Rules_for_IRC
ConfigView.label.ircserver=Zerbitzaria
ConfigView.label.ircchannel=Kanala
@@ -205,7 +185,6 @@ FilesView.name=Izena
FilesView.name.fastRename=Berrizendatze azkarra
FilesView.size=Tamaina
FilesView.done=Egina
-FilesView.%=%
FilesView.firstpiece=Lehen atala #
FilesView.numberofpieces=# atal
FilesView.pieces=Atalak
@@ -248,9 +227,9 @@ GeneralView.label.hash=Hash-a:
GeneralView.label.numberofpieces=# atal
GeneralView.label.size=Tamaina:
GeneralView.label.tracker=Aztarnariaren egoera:
-GeneralView.label.updatein= Eguneratu hemen:
+GeneralView.label.updatein=Eguneratu hemen:
GeneralView.label.trackerurl=Aztarnariaren URLa:
-GeneralView.label.trackerurlupdate= Eguneratu aztarnaria
+GeneralView.label.trackerurlupdate=Eguneratu aztarnaria
GeneralView.label.comment=Torrent-aren iruzkina:
GeneralView.label.user_comment=Erabiltzailearen iruzkina:
GeneralView.label.status=Egoera:
@@ -266,7 +245,6 @@ ManagerItem.high=altua
ManagerItem.low=baxua
MinimizedWindow.name=Izena:
MinimizedWindow.all_transfers=Vuze-ren transferentziak
-PiecesView.#=#
PiecesView.size=Tamaina
PiecesView.numberofblocks=Blokeen #
PiecesView.blocks=Blokeak
@@ -286,7 +264,6 @@ DownloadManager.error.unsupportedencoding=Onartzen ez den kodeketa
DownloadManager.error.ioerror=IO errorea
DownloadManager.error.sha1=(SHA1) errorea, ez dago algoritmo hori
PeerManager.status.offline=Konexio-errorea
-PeerManager.status.ok=OK
PeerManager.status.checking=Egiaztatzen
PeerManager.status.finished=Amaitua
PeerManager.status.finishedin=Amaitze-denbora
@@ -336,13 +313,11 @@ IrcView.errormsg=Sintaxi akastuna /msg : /msg erabiltzaile-testuan
IrcView.help=Baliozko aginduak hauek dira:\n . /help: mezu hau erakusten du\n . /nick | /name: zure izena aldatzen du \n . /me action: ekintza bat bidaltzen du \n . /msg nick message: mezu pribatua bidaltzen dio <nick>-(e)ri\n . /r message: azken mezu pribatuari erantzuten dio\n . /join #channelB (ez egin klik hemen, adibide bat da): uneko kanaletik channelB-ra aldatzen du
PasswordWindow.title=Vuze blokeatuta dago
PasswordWindow.passwordprotected=Vuze pasahitzez babestuta dago.\nVuze-ren leihoa erakusteko, mesedez sartu zure pasahitza hemen:
-Button.ok=&OK
TrackerChangerWindow.title=Gehitu aztarnaria
TrackerChangerWindow.newtracker=Sartu aztarnari berriaren URLa
PeersView.discarded=Baztertua
PeersView.discarded.info=Nola edo hala jaso duzun datua, nahiz eta beharrezkoa ez izan, eta baztertu duzuna.
discarded=baztertua
-MyTorrentsView.#=#
MyTorrentsView.menu.move=&Mugitu
MyTorrentsView.menu.moveUp=&Gora
MyTorrentsView.menu.moveDown=&Behera
@@ -436,7 +411,6 @@ configureWizard.nat.title=NAT / Zerbitzari-ataka
configureWizard.nat.message=Vuze-k eman dezakeen onena eskuratzeko, biziki aholkatzen da Internetetik erabat atzigarria izatea. Tresna honek sarrerako pare-konexioak onartzeko erabilitako ataka probatzen eta/edo aldatzen laguntzen du.\n\nOHARRA: Tresna honek TCP konexioak probatzen ditu soilik. DB banatuak sarrerako UDP konexioak ere behar ditu, baina automatikoki jakinaraziko dizu suebaki blokeatzailea aurkitzen badu.\n\nOHARRA: 6880 TCP ataka barne-funtzioetarako erreserbatuta dago eta, beraz, ezin da erabili.
configureWizard.nat.test=Probatu
configureWizard.nat.testing=Ataka probatzen:
-configureWizard.nat.ok=OK !
configureWizard.nat.ko=NAT errorea
configureWizard.nat.unable=Ezin izan da proba egin: Okerreko ataka eman da, edo probarako zerbitzuak huts egin du.\nAgian beste aplikazio bat ataka hau erabiltzen ari da.
configureWizard.file.title=Torrent-ak / Fitxategiak
@@ -501,9 +475,9 @@ ConfigView.section.stats.enable=Gaitu
ConfigView.section.stats.defaultsavepath=Estatistikak gordetzeko direktorioa
ConfigView.section.stats.choosedefaultsavepath=Hautatu estatistikak gordetzeko direktorioa
ConfigView.section.stats.savefreq=Gordetze-maiztasuna
-ConfigView.section.stats.minutes=\ minutu
-ConfigView.section.stats.hours=\ ordu
-ConfigView.section.stats.seconds=\ segundo
+ConfigView.section.stats.minutes= minutu
+ConfigView.section.stats.hours= ordu
+ConfigView.section.stats.seconds= segundo
ConfigView.section.stats.savefile=Estatistiken fitxategi-izena
ConfigView.section.stats.graph_update_dividers=Erakutsi linea bertikala 60 eguneraketen multzoetarako
MyTorrentsView.menu.export=&XML torrent-a...
@@ -515,7 +489,6 @@ ConfigView.label.movecompleted=Mugitu osatutako fitxategiak (deskargatu ondoren)
ConfigView.label.moveremoved=Mugitu osatutako fitxategiak (ezabatzerakoan)
ConfigView.label.savetorrents=Gorde .torrent fitxategiak
MainWindow.menu.view.mytracker=Nire a&ztarnaria
-MainWindow.menu.view.mytracker.keybinding=Meta+2
MyTrackerView.title.full=Nire aztarnaria
MyTrackerView.name=Izena
MyTrackerView.tracker=Aztarnaria
@@ -543,7 +516,6 @@ fileDownloadWindow.state_initializing=Hasieratzen
fileDownloadWindow.state_downloading=Deskargatzen
fileDownloadWindow.state_error=Errorea:
MainWindow.menu.file.open.url=&Kokalekua...
-MainWindow.menu.file.open.url.keybinding=Meta+L
openUrl.title=Ireki kokalekua
openUrl.url=URLa:
MyTorrentsView.menu.host.error.title=Torrent-aren ostatatzeak huts egin du
@@ -552,10 +524,7 @@ ConfigView.section.tracker=Aztarnaria
ConfigView.section.tracker.pollinterval=Aztarnariaren bezeroa zenbatero zundatuko den (segundoak)
ConfigView.section.tracker.publishenable=Argitaratu torrent-aren xehetasunak "<tracker_url>"-era
ConfigView.section.tracker.ip=Aztarnariaren kanpoko IP helbidea
-
ConfigView.section.style.enableXPStyle=Gaitu XP estiloa (beharrezkoa da berrabiaraztea)
-IPChecker.external.service.dyndns.name=DynDNS
-IPChecker.external.service.dyndns.url=http://www.dyndns.org/
IPChecker.external.service.dyndns.description=DNS Dinamikoko Sare Zerbitzuak, LLC
ConfigView.section.tracker.checkip=Automatikoki aurkitu kanpoko IP helbidea...
ipCheckerWizard.title=IPa egiaztatzeko morroia
@@ -569,13 +538,11 @@ ipCheckerWizard.checkComplete=IP osatua:
ipCheckerWizard.checkFailed=Huts egin du, arrazoia:
wizard.tracker.local=Erabili Vuze-k kapsulatuta daraman aztarnaria
wizard.tracker.external=Erabili kanpoko aztarnaria
-wizard.tracker.howToLocal= Joan 'Tresnak->Aukerak->Aztarnaria' aukerara aztarnaria gaitzeko
+wizard.tracker.howToLocal=Joan 'Tresnak->Aukerak->Aztarnaria' aukerara aztarnaria gaitzeko
wizard.announceUrl=Iragarpen URLa:
-IPChecker.external.service.discoveryvip.name=Discoveryvip
-IPChecker.external.service.discoveryvip.url=http://ip.discoveryvip.com/
IPChecker.external.service.discoveryvip.description=Discoveryvip - IP helbidearen egiaztatzea soilik
IPChecker.external.httpinvalidresponse=HTTP erantzun baliogabea
-IPChecker.external.loadingwebpage= Web orria kargatzen
+IPChecker.external.loadingwebpage=Web orria kargatzen
IPChecker.external.analysingresponse=Erantzuna aztertzen
IPChecker.external.addressextracted=Erauzitako IP helbidea
IPChecker.external.httploadfail=Orria kargatzeak huts egin du
@@ -595,15 +562,12 @@ MyTorrentsView.menu.publish=Ar&gitaratu...
MyTrackerView.status.published=Argitaratua
MyTrackerView.completed=Osatua
MainWindow.menu.file.open.torrentnodefault=Torrent fitxategia... (ez gorde lehenetsi gisa)
-MainWindow.menu.file.open.torrentnodefault.keybinding.mac=Meta+Opt+O
wizard.comment=Iruzkina
ConfigView.label.movetorrent=Mugitu .torrent-a
ConfigView.label.movepartialdownloads=Mugitu fitxategi batzuk "Ez deskargatu" bandera eduki arren
ConfigView.label.subdir_is_in_default=Deskargak direktorio lehenetsi batean existitzen ote diren aztertzean, aztertu azpidirektorioak ere.
ConfigView.section.file.decoder.label=Torrent kodifikazio lehenetsia hautaketak hala eskatzen duenean
ConfigView.section.file.decoder.nodecoder=Bat ere ez
-IPChecker.external.service.no-ip.name=No-IP
-IPChecker.external.service.no-ip.url=http://www.no-ip.com/
IPChecker.external.service.no-ip.description=DNS zerbitzu dinamiko eta estatikoen hornitzailea (ez dauka 'egiaztatu helbidea' zerbitzu librerik)
ConfigView.section.tracker.publicenable=Gaitu kanpoko torrent-ak
ConfigView.label.playdownloadspeech=Hitz egin deskarga amaitutakoan
@@ -614,7 +578,6 @@ ConfigView.label.playdownloadspeech.info=Hizketa-zerbitzuak hobeto dabiltza inge
GeneralView.label.status.pieces_available.tooltip=Bistaratu atal bakoitzaren kopia eskuragarrien kopurua.\nEskuineko zenbakia 1 baino txikiagoa bada, ez zaude ikusten fitxategiaren kopia oso bat (eta arazoak egon daitezke deskarga burutzeko).
GeneralView.label.trackerurl.tooltip=Egin klik iragarpen URLa arbelera kopiatzeko
GeneralView.label.trackerurlopen.tooltip=Egin klik aztarnariaren orri nagusia irekitzeko
-
#
# 2.0.4.4
#
@@ -740,9 +703,7 @@ ConfigView.section.plugins=Plugin-ak
wizard.maketorrent.filesize=Fitxategien tamaina
wizard.maketorrent.piececount=Atal-kopurua
wizard.maketorrent.piecesize=Atalen tamaina
-wizard.maketorrent.auto=Auto
MainWindow.menu.view.stats=&Estatistikak
-MainWindow.menu.view.stats.keybinding=Meta+5
SpeedView.title.full=Jarduera
SpeedView.downloadSpeed.title=Deskarga-abiadura
SpeedView.uploadSpeed.title=Karga-abiadura
@@ -761,10 +722,9 @@ ConfigView.section.style.alwaysRefreshMyTorrents.tooltip=Aukera honek 'Nire torr
#
#2.0.7.0
#
-ConfigView.section.style.verticaloffset=Grafikoen desplazamendu bertikala (GTK konponketa)
security.certtruster.title=Segurtasun-ziurtagirien abisua
security.certtruster.intro=Segurtasun-ziurtagiria fidagarritasunik onartu ez diozun konpainia batek jaulki du
security.certtruster.resource=Baliabidea:
security.certtruster.issuedto=Nori jaulkia:
security.certtruster.issuedby=Nork jaulkia:
-security.certtruster.prompt=Fidagarritasuna onartu nah
\ No newline at end of file
+security.certtruster.prompt=Fidagarritasuna onartu nah
diff --git a/org/gudy/azureus2/internat/MessagesBundle_fi_FI.properties b/org/gudy/azureus2/internat/MessagesBundle_fi_FI.properties
index ad3034b..af75d57 100644
--- a/org/gudy/azureus2/internat/MessagesBundle_fi_FI.properties
+++ b/org/gudy/azureus2/internat/MessagesBundle_fi_FI.properties
@@ -46,7 +46,7 @@ MainWindow.about.internet.sourceforge=SourceForge.netin projektisivu
MainWindow.about.internet.sourceforgedownloads=SourceForge.netin lataussivu
MainWindow.about.internet.bugreports=Ohjelmavirheilmoitukset
MainWindow.about.internet.forumdiscussion=Keskustelualueet
-MainWindow.about.internet.wiki=Wiki (UKK)
+MainWindow.about.internet.wiki=Vuze Wiki (UKK)
MainWindow.dialog.choose.savepath=Valitse tallennushakemisto
MainWindow.dialog.choose.savepath_forallfiles=Valitse tallennushakemisto kaikille tiedostoille
MainWindow.status.latestversion=Uusin virallinen versio:
@@ -649,7 +649,7 @@ wizard.multitracker=M\u00e4\u00e4rit\u00e4 useita seurantapalvelimia
wizard.multitracker.title=Seurantapalvelimien valitseminen
wizard.multitracker.configuration=Valmiit p\u00e4\u00e4ryhm\u00e4t:
wizard.multitracker.new=Uusi...
-wizard.multitracker.edit=Muokkaa..
+wizard.multitracker.edit=Muokkaa...
wizard.multitracker.delete=Poista
wizard.multitracker.group=Seurantapalvelinryhm\u00e4
wizard.multitracker.edit.title=Seurantapalvelimien muokkaus
@@ -995,7 +995,7 @@ GenericText.column=-sarake
MyTorrentsView.menu.thisColumn.remove=Poista sarake n\u00e4kyvist\u00e4
MyTorrentsView.menu.thisColumn.toClipboard=Kopioi teksti leikep\u00f6yd\u00e4lle
MyTorrentsView.menu.thisColumn.autoTooltip=N\u00e4yt\u00e4 aina ty\u00f6kaluvihje
-MyTorrentsView.menu.tracker=Seurantapalvelin
+MyTorrentsView.menu.tracker=Seurantapalvelin/Torrent
ConfigView.download.abbreviated=Lad:
ConfigView.upload.abbreviated=L\u00e4h:
ConfigView.complete.abbreviated=Valm:
@@ -2233,8 +2233,8 @@ PeerSocket.unknown=Tuntematon
PeerSocket.fake_client=V\u00e4\u00e4renne
PeerSocket.bad_peer_id=Kelpaamaton tunniste
PeerSocket.mismatch_id=Poikkeama
-PeerSocket.unknown_az_style=Tuntematon %1/%2
-PeerSocket.unknown_shadow_style=Tuntematon %1/%2
+PeerSocket.unknown_az_style=Tuntematon %1 %2
+PeerSocket.unknown_shadow_style=Tuntematon %1 %2
OpenTorrentWindow.mb.askCreateDir.title=Tallennushakemistoa ei ole olemassa
OpenTorrentWindow.mb.askCreateDir.text=Tallennushakemistoa '%1' ei ole olemassa.\n\nLuodaanko se nyt?
SpeedView.stats.estimatechoke=arvio, esto
@@ -2427,8 +2427,8 @@ Button.bar.show=N\u00e4yt\u00e4
Button.bar.hide=Piilota
Button.bar.share=Jaa
Button.bar.add=Lis\u00e4\u00e4
-Button.bar.edit=Editoi
-Button.bar.edit.cancel=Editointi valmis
+Button.bar.edit=Muokkaa
+Button.bar.edit.cancel=Muokkaus valmis
v3.MainWindow.menu.view.pluginbar=Lis\u00e4osat-palkki
MainWindow.dialog.select.vuze.file=Valitse Vuze-tiedosto
MainWindow.menu.file.open.vuze=Vuze-tiedosto...
@@ -2513,7 +2513,6 @@ TableColumn.header.unopened=Uusi
Unopened.bigView.header=Uusi
ConfigView.section.Subscriptions=Tilaukset
v3.activity.button.readall=Merkitse kaikki luetuiksi
-ConfigView.interface.start.library=K\u00e4ynnist\u00e4 Kirjastossa
TableColumn.header.activityNew=Uusi
TableColumn.header.activityType=Tyyppi
TableColumn.header.activityText=Viesti
@@ -2545,8 +2544,6 @@ v3.iconBar.down.tooltip=Siirr\u00e4 alas\nPid\u00e4 hiirt\u00e4 painettuna siirt
Button.deleteContent.fromLibrary=Poista Vuzen kirjastosta
Button.deleteContent.fromComputer=Poista tietokoneelta
v3.deleteContent.message=\nHaluatko poistaa '%1' my\u00f6s tietokoneeltasi, vai poistaa sen vain Vuzen kirjastosta?
-v3.library.infobar.text1=Etsitk\u00f6 yksityiskohtaista luetteloa?
-v3.library.infobar.text2=K\u00e4yt\u00e4 yll\u00e4olevaa N\u00e4kym\u00e4-valintaa.
v3.MainWindow.menu.view.toolbartext=Ty\u00f6kalupalkin tekstit
v3.MainWindow.menu.view.asSimpleList=Yksinkertainen luettelo
v3.MainWindow.menu.view.asAdvancedList=Kehittynyt luettelo
@@ -2688,3 +2685,21 @@ webui.pairing.info.y=Paritus on mahdollista. Katso lis\u00e4tietoja Yhteys->Pari
webui.enable=Toiminto k\u00e4yt\u00f6ss\u00e4 (*)
ConfigView.section.rss=Paikallinen RSS jne.
Button.removeAll=Poista kaikki
+label.rename=Uudelleennime\u00e4 %1
+RCM.column.rc_rank=Sija
+RCM.column.rc_created=Luotu
+RCM.column.rc_hash=Tiiviste
+RCM.column.rc_lastseen=Viimeksi n\u00e4hty
+RCM.column.rc_level=Taso
+RCM.column.rc_tracker=Seurantapalvelin
+rcm.view.heading=Naapuritorrentit
+rcm.config.enabled=K\u00e4yt\u00f6ss\u00e4
+rcm.config.max_results=Tuloksia enint\u00e4\u00e4n
+rcm.config.max_level=Maksimitaso
+rcm.search.provider=Parvi
+wizard.webseedseditor.edit.title=HTTP-l\u00e4hteiden muokkaus
+wizard.webseedseditor.edit.newseed=Uusi l\u00e4hde
+MyTorrentsView.menu.editWebSeeds=Muokkaa HTTP-l\u00e4hteit\u00e4
+ClientStats.title.full=Asiakasohjelma-tilastot
+ClientStats.column.count=M\u00e4\u00e4r\u00e4
+Scrape.status.cached=Pikap\u00e4ivitys v\u00e4limuistista
diff --git a/org/gudy/azureus2/internat/MessagesBundle_fr_FR.properties b/org/gudy/azureus2/internat/MessagesBundle_fr_FR.properties
index c8d6423..c49efbd 100644
--- a/org/gudy/azureus2/internat/MessagesBundle_fr_FR.properties
+++ b/org/gudy/azureus2/internat/MessagesBundle_fr_FR.properties
@@ -679,7 +679,6 @@ ConfigView.section.style.alwaysRefreshMyTorrents.tooltip=Cette option force la m
#
#2.0.7.0
#
-ConfigView.section.style.verticaloffset=D\u00e9calage graphique vertical (corrige le bogue avec GTK)
security.certtruster.title=Avertissement du certificat de s\u00e9curit\u00e9
security.certtruster.intro=Le certificat de s\u00e9curit\u00e9 provient d'une compagnie \u00e0 laquelle vous ne faites pas confiance
security.certtruster.resource=Ressource:
@@ -1481,7 +1480,6 @@ FilesView.rename.choose.path=Choisir un fichier nouveau ou existant
FilesView.rename.confirm.delete.title=Confirmer la suppression
FilesView.rename.confirm.delete.text=Confirmer la suppression du fichier original %1
ConfigView.higher.mode.available=\t
-\nD'autres options sont disponibles dans le mode utilisateur avanc\u00e9
ConfigView.section.mode.title=Niveau utilisateur
ConfigView.section.mode.beginner=D\u00e9butant
ConfigView.section.mode.beginner.wiki.definitions=Vocabulaire BitTorrent
@@ -1659,7 +1657,6 @@ DownloadManager.error.badsize=Taille incorrecte
authenticator.savepassword=Retenir mon mot de passe
Content.alert.notuploaded.text=Le partage de "% 1" n'est pas termin\u00e9. Si vous avez 2% aujourd'hui, les gens ne seront pas en mesure de t\u00e9l\u00e9charger compl\u00e8tement vos fichiers publi\u00e9s. \n\nVoulez-vous vraiment 2%?
Content.alert.notuploaded.multi.text=\t
-\n1% de votre contenu publi\u00e9 n'est pas compl\u00e8tement partag\u00e9. Si vous avez 2% aujourd'hui, les gens ne seront pas en mesure de t\u00e9l\u00e9charger compl\u00e8tement vos fichiers publi\u00e9s. \u00cates-vous s\u00fbr de ne pas vouloir% 2?\n\nContinuer \u00e0 partager?\n%3
Content.alert.notuploaded.stop=arr\u00eater
Content.alert.notuploaded.quit=Quitter Vuze
ConfigView.label.popup.show=Voir tous les popups d'alerte enregistr\u00e9s \u00e0 ce jour (le cas \u00e9ch\u00e9ant)
@@ -1716,7 +1713,6 @@ v3.MainWindow.button.comment=Commenter
v3.MainWindow.button.viewdetails=D\u00e9tails
v3.MainWindow.button.play=Ouvrir
v3.MainWindow.button.cancel=Annuler
-v3.MainWindow.button.sendtofriend=Partager
v3.MainWindow.button.preview=Pr\u00e9visualiser
v3.MainWindow.view.wait=En cours d'initialisation. Veuillez patienter
v3.MainWindow.xofx=%1 sur %2
@@ -1786,51 +1782,14 @@ azbuddy.chat.says=%1 dit:
Button.bar.add=Ajouter des Amis
Button.bar.edit=Modifier
Button.bar.edit.cancel=Fini de Modifier
-v3.Share.menu=Partager un fichier
-v3.Share.header=Partager
-v3.Share.header.message=Partager avec vos Amis actuels, ou ajoutez des Amis
-v3.Share.add.buddy=Ajouter des Amis
-v3.Share.add.edit.buddy=Ajouter/Modifier mes Amis
-v3.Share.add.buddy.all=Partager avec tous mes amis
-v3.Share.add.buddy.existing=Mes Amis actuels:
-v3.Share.add.buddy.new=Nouveaux Amis :
-v3.Share.buddies=Amis
-v3.Share.invitees=Invit\u00e9es
-v3.Share.invite.buddies.prompt=Inivitez plus d'amis pour partager
-v3.Share.send.now=Envoyer
-v3.Share.optional.message=Message optionnel envoy\u00e9 dans la liste d'Activit\u00e9 de vos amis (maximum 140 charact\u00e8res) :
-v3.Share.disclaimer=Note: Le contenu que vous partagez ainsi que ce message optionel seront crypt\u00e9s
-v3.Share.disclaimer.link=Plus d'Infos
-v3.buddy.menu.viewprofile=Voir le Profil
-v3.buddy.menu.remove=Supprimer de mes amis
v3.MainWindow.menu.view.pluginbar=Barre de Plugin
-v3.activity.buddy-request=Vous avec une demande d'ajout d'amis de %1
-v3.activity.buddy-request.accept=Accepter
-v3.activity.buddy-request.multi=Vous avez re\u00e7u [#%3] demandes d'ajout de %1
-v3.activity.buddy-linkup=Vous \u00eates maintenant amis avec %1
-v3.activity.share-content.no-msg=%1 d\u00e9sire partager %2 avec vous
-v3.buddies.remove=Supprimer de mes amis
-v3.buddies.add.to.share=Partager avec cet ami
-azbuddy.ui.dialog.disable.title=D\u00e9sactiver le plugin Amis
-azbuddy.ui.dialog.disable.text=La d\u00e9sactivation du plugin Amis pourrait vous emp\u00eacher de partager des torrents via la Barre Amis au bas du programme, et vous emp\u00eacher de modifier votre liste d'amis \u005c n \u005c n\u00cates-vous s\u00fbr de vouloir d\u00e9sactiver Amis?
v3.share.private.title=Partage de Torrents
v3.share.private.text=Le torrent s\u00e9lectionn\u00e9 est marqu\u00e9 comme "priv\u00e9".\n\nVous ne pouvez pas partager des torrents priv\u00e9s
-v3.buddies.disabled.title=Plugin d'Amis d\u00e9sactiv\u00e9
-v3.buddies.disabled.text._windows=Vous avez d\u00e9sactiv\u00e9 le plugin d'Amis, ce qui vous emp\u00eache de partager et de recevoir des fichiers torrentsou des invitations. Vous pouvez changer vos r\u00e9glages dans l'onglet Options.
-v3.buddies.disabled.text._mac=Vous avez d\u00e9sactiv\u00e9 le plugin d'Amis, ce qui vous emp\u00eache de partager et de recevoir des fichiers torrentsou des invitations. Vous pouvez changer vos r\u00e9glages dans l'onglet Options.
-v3.MainWindow.button.newtag.share=Nouveau! Partager un Torrent
-v3.buddies.faq=Plus d'Infos
azbuddy.tracker.enabled=Activer le 'Boost d'Amis' pour t\u00e9l\u00e9charger plus vite avec vos Amis
v3.MainWindow.button.download=T\u00e9l\u00e9charger
v3.MainWindow.button.run=Ouvrir le fichier t\u00e9l\u00e9charg\u00e9
-v3.activity.header.friend.requests.foryou=Requ\u00eates d'Amis - Pour Vous
-v3.activity.header.friend.requests.fromyou=Requ\u00eates d'Amis - De Vous
-v3.activity.header.friend.requests.accepted=Requ\u00eates d'Amis - Accept\u00e9es
-v3.activity.header.share.requests=Partages de Fichiers
v3.activity.header.downloads=T\u00e9l\u00e9chargements
-v3.activity.header.rating.reminders=Rappels de Critique
v3.activity.header.vuze.news=Nouvelles de Vuze
-message.prompt.add.friends=Ajoutez des amis depuis la barre d'Amis
message.status.success=Succ\u00e8s
azbuddy.tracker.bbb.status.title=Boost d'Amis
azbuddy.tracker.bbb.status.title.tooltip=Double cliquez pour obtenir des d\u00e9tails
@@ -1840,8 +1799,6 @@ azbuddy.tracker.bbb.status.in=Je suis Boost\u00e9
azbuddy.tracker.bbb.status.out=En train de Booster des Amis
v3.MainWindow.search.go.tooltip=Lancer la Recherche
v3.MainWindow.search.last.tooltip=Afficher la derni\u00e8re Recherche
-v3.activity.buddy-invited=Vous avez envoy\u00e9 une invitation \u00e0 %1.
-v3.activity.buddy-invited.multi=Vous avez envoy\u00e9 une invitation \u00e0 :\n%1
azbuddy.online_status=Statut de connection
azbuddy.os_online=Connect\u00e9
azbuddy.os_away=Absent
@@ -1884,15 +1841,3 @@ device.itunes.start=Vous devez d\u00e9marrer iTunes ou activer le d\u00e9marrage
device.itunes.install_problem=Il semble y avoir un probl\u00e8me avec l'int\u00e9gration d'iTunes
option.askeverytime=Demander \u00e0 chaque fois
option.rememberthis=Se souvenir de ce r\u00e9glage
-# The remaining keys were not in MessagesBundle.properties
-v3.activity.header.xdaysago=il y a %1 Jours
-ConfigView.section.connection.advanced.IPTOS.tooltip=D\u00e9finit le champ classe de trafic/type de service (TOS) dans l'en-t\u00eate IP pour les paquets sortants.\nVuze laisse ce champ vide par d\u00e9faut, donc les r\u00e9glages du syst\u00e8me d'exploitation sont utilis\u00e9s.\nExemples de valeurs:\n0x02 pour IPTOS_LOWCOST\n0x04 pour IPTOS_RELIABILITY\n0x08 pour IPTOS_THROUGHPUT\n0x10 pour IPTOS_LOWDELAY\nNOTE: Les impl\u00e9mentations r\u00e9seaux sous-jacentes peuvent ignorer ces valeurs, cette option est donc d\u00e9pendante du syst\u00e8me d'exploitation et du JRE.
-TorrentOptionsView.param.max.uploads.when.seeding.enable=quand en source uniquement
-v3.activity.header.today=Aujourd'hui
-ConfigView.section.connection.advanced.IPTOS=Type de service (TOS) des paquets sortants
-v3.buddies.count=%1 Amis
-v3.activity.header.yesterday=Hier
-v3.activity.header.xweeksago=il y a %1 Semaines
-v3.activity.header.1weekago=il y a une semaine
-ConfigView.label.announceport.tooltip=Informe le tracker d'un port different de celui sur lequel vous \u00e9coutez. Laisser vide pour ne pas utiliser cette option.
-deletedata.message2=\n\u00cates-vous certain de vouloir continuer\u00a0?
diff --git a/org/gudy/azureus2/internat/MessagesBundle_fy_NL.properties b/org/gudy/azureus2/internat/MessagesBundle_fy_NL.properties
index 59b8137..8812f75 100644
--- a/org/gudy/azureus2/internat/MessagesBundle_fy_NL.properties
+++ b/org/gudy/azureus2/internat/MessagesBundle_fy_NL.properties
@@ -1,3 +1,4 @@
+#There is a plugin to help with internationalizing these bundles at http://azureus.sourceforge.net/plugin_list.php
MainWindow.menu.file.open.torrent=.torrent-triem
Main.parameter.usage=Gebruik : java org.gudy.azureus2.cl.Main [parameters] "bestand.torrent" "Bewaar pad"
Main.parameter.maxUploads=Max aantal gelijktijdige uploads
@@ -356,7 +357,6 @@ MyTorrentsView.menu.removeand.deletedata=Verwijder &gegevens
MyTorrentsView.menu.removeand.deleteboth=Verwijder &beide
deletedata.title=Warsk\u00f4ging!
deletedata.message1=Je staat op het punt de GEGEVENS te verwijderen van:\n
-deletedata.message2=\nWeet je zeker dat je wilt doorgaan?
MainWindow.menu.file.configure=Konfiguraasjewizard...
configureWizard.title=Configuratiewizard
configureWizard.welcome.title=Wolkom by de konfiguraasjewizard fan Vuze
@@ -481,7 +481,6 @@ ConfigView.section.tracker=Tracker
ConfigView.section.tracker.pollinterval=Tracker cli\u00ebn afstemmings tussen pauze (sec)
ConfigView.section.tracker.publishenable=Publiseer torrent details naar "<tracker_url>"
ConfigView.section.tracker.ip=IP-adres van externe tracker
-MainWindow.menu.help.faq=Veelgestelde vragen
ConfigView.section.style.enableXPStyle=Activeer XP stijl (herstart nodig)
ConfigView.section.tracker.checkip=Automatisch extern IP adress opzoeken...
ipCheckerWizard.title=Wizard IP-controle
@@ -514,7 +513,6 @@ splash.openViews=Openen van Schermen
splash.plugin=Plugin wordt geladen :
configureWizard.nat.tooManyPorts=Te veel poorten om te testen (9 max)
ConfigView.section.color=Kleurschema
-PeerSocket.unknown=\u00dbnbekend
MyTorrentsView.menu.publish=&Publiceren...
MyTrackerView.status.published=Gepubliceerd
MyTrackerView.completed=Dien
@@ -526,9 +524,15 @@ ConfigView.section.file.decoder.nodecoder=Gjin
ConfigView.section.tracker.publicenable=Externe torrents toestaan
ConfigView.label.playdownloadspeech=Geef met spraak aan wanneer een download voltooid is
ConfigView.label.playdownloadspeech.info=De spraakservice werkt momenteel het beste met Engels
+#
+# Tooltips
+#
GeneralView.label.status.pieces_available.tooltip=Laat het aantal beschikbare kopie\u00ebn zien van ieder deel.\nAls het nummer rechts kleiner dan 1 is, dan zie je geen volledige kopie van het bestand (en kan je problemen hebben bij het voltooien van de download).
GeneralView.label.trackerurl.tooltip=Klik om de URL naar het klembord te kopieren
GeneralView.label.trackerurlopen.tooltip=Klik om de hoofdpagina van de tracker te openen
+#
+# 2.0.4.4
+#
ConfigView.section.style.guiUpdate=Update GUI iedere
ConfigView.section.style.graphicsUpdate=Update Grafische balken iedere N GUI update(s)
ConfigView.section.style.reOrderDelay=Deel tabellen iedere N GUI update(s) opnieuw in [0: nooit]
@@ -659,7 +663,9 @@ health.explain.yellow=betekent dat de tracker goed is, je met peers verbonden be
health.explain.green=betekent dat alles goed is.
ConfigView.section.style.alwaysRefreshMyTorrents=Mijn Torrents altijd opnieuw laden
ConfigView.section.style.alwaysRefreshMyTorrents.tooltip=Deze optie ververst Mijn Torrent scherm, ook als het venster niet weergegeven wordt (handig voor enkele mIRC-plugins)
-ConfigView.section.style.verticaloffset=Grafisch Verticaal Beginpunt (GTK fix)
+#
+#2.0.7.0
+#
security.certtruster.title=Beveiligings Certificaat Waarschuwing
security.certtruster.intro=Het beveiligings certificaat is vrijgegeven door een bedrijf dat je niet vertrouwd
security.certtruster.resource=Bron:
@@ -715,6 +721,9 @@ ConfigView.section.style.dropdiraction='Sleep-en-plaats' actie voor mappen
ConfigView.section.style.dropdiraction.opentorrents=Open Torrents
ConfigView.section.style.dropdiraction.sharefolder=Deel map
ConfigView.section.style.dropdiraction.sharefoldercontents=Deel inhoud
+#
+# 2.0.7.x
+#
Categories.all=Alle
Categories.uncategorized=Ongecategoriseerd
CategoryAddWindow.message=Nije kategorynamme
@@ -791,7 +800,6 @@ ConfigView.text.minutes=minuten op
ConfigView.text.neverIgnore=Nea negearje
ConfigView.text.any=ien
DownloadManager.error.datamissing=\u00dbntbrekkende data
-iconBar.queue.tooltip=Wachtrige
MainWindow.menu.file.open.torrentforseeding=.torrent-triem (Foar seeding)
MainWindow.menu.language.refresh=F&ernije
ManagerItem.forced=Geforceerd
@@ -862,6 +870,9 @@ SpeedView.stats.downloaded=Gedownload
SpeedView.stats.uploaded=Ge\u00fcpload
SpeedView.stats.uptime=Online Tijd (uren)
AutoMigration.useralert=Vuze configuratiebestanden en -mappen auto-migratieresultaat:\n\n%1\nAlle gefaalde bestanden moeten handmatig worden gemigreerd.\nVERGEET NIET JE OPSLAGPAD BIJ TE WERKEN IN JE CONFIGURATIE NA DE MIGRATIE!
+#
+# > 2.0.8.0
+#
OpenTorrentWindow.title=Torrent(s) iepene
OpenTorrentWindow.message=Experimenteel
OpenTorrentWindow.addFiles=Voeg Best&anden toe:
@@ -1083,6 +1094,8 @@ MyTrackerView.badnat.info=Uploaders/Ontvangers die de NAT controlle hebben gefaa
ConfigView.section.tracker.natchecktimeout=Controle timeout (secs)
ConfigView.section.file.perf.cache.enable=Schakel schijfcaching in
ConfigView.section.file.perf.cache.size=Grutte fan cache yn %1
+#Removed
+#MyTorrentsView.menu.setSpeed=Set Upload Speed
MainWindow.menu.transfers=Oerdrachten
MainWindow.menu.transfers.startalltransfers=St&art Alle
MainWindow.menu.transfers.stopalltransfers=St&op Alle
@@ -1162,8 +1175,6 @@ FilesView.fullpath=Hiel paad sjin litte
FilesView.remaining=Stukjes te gaan
TableColumn.header.trackername=Trackernaam
TableColumn.header.trackername.info=Naam van de tracker gebaseerd op de meegedeelde URL
-ConfigView.label.announceport=Negeer door tracker meegedeelde poort
-ConfigView.label.announceport.tooltip=Informeer de tracker van een andere poort dan de poort waarnaar je luisterd. Laat de optie leeg als je deze niet wil gebruiken.
ConfigView.group.override=Overbrugopties
ConfigView.section.file.perf.cache.notsmallerthan=Triemen lytser as dit (yn %1) net yn cache bewarje
PeersView.menu.blockupload=Blokupload
@@ -1186,8 +1197,6 @@ wizard.maketorrents.autoopen=De torrent voor uploaden gebruiken indien voltooid
ConfigView.section.connection.advanced.mtu=Maximale overdrachtseenheid van de lijn (MTU)
ConfigView.section.connection.advanced.SO_RCVBUF=Grootte van Socket SO_RCVBUF[0: gebruik standaard besturingssysteem]
ConfigView.section.connection.advanced.SO_SNDBUF=Grotte Socket SO_SNDBUF [0: gebruik standaard besturingssysteem]
-ConfigView.section.connection.advanced.IPTOS=Uitgaand type type-of-service (TOS) [ga naar http://www.azureuswiki.com/index.php/AdvancedNetworkSettings voor informatie]
-ConfigView.section.connection.advanced.IPTOS.tooltip=Stelt het veld overdrachtklasse/type-of-service (TOS) in op de IP-header voor uitgaande pakketten.\nVuze laat deze optie standaard uit waardoor de standaarden van het besturingssysteem gebruikt worden.\nVoorbeeldwaarden zijn:\n0x02 for IPTOS_LOWCOST\n0x04 for IPTOS_RELIABILITY\n0x08 for IPTOS_THROUGHPUT\n0x10 for IPTOS_LOWDELAY\nOnderliggende netwerkimplementaties kunnen deze waarde negeren, deze optie is zeer afhankelijk van het besturingssysteem en de versie van JRE (Java).
ConfigView.section.interface.confirm_torrent_removal=Om befestiching freegje as in torrent fuortsmite wurdt
ConfigView.section.interface.confirm_torrent_removal.tooltip=Om befestiching freegje as in torrent fuortsmite wurdt \u00fat it skerm MyTorrents
MyTorrentsView.confirm_torrent_removal=Weet je zeker dat je deze torrent wilt verplaatsen?\n
@@ -1282,6 +1291,7 @@ ConfigView.section.logging.generatediagnostics=Genereren
ConfigView.section.logging.generatediagnostics.info=Diagnostische informatie aanmaken en naar het klembord en logbestand kopi\u00ebren (indien ingesteld)
MainWindow.menu.tools.nattest=&NAT/Firewalltest
window.welcome.title=Wolkom by Vuze %1
+#file can be a URL or a path in the jar
MainWindow.menu.help.releasenotes=\u00datjefte-opmerkingen
dht.reseed.label=Het opnieuw uploaden van de verspreide database is normaal gesproken niet nodig. Indien het aantal contacten laag is, kan dit voor herintegratie handig zijn.\nLaat leeg om de database van verbonden peers te gebruiken of geef een IP-adres en poort op om de database van een bekende peer te gebruiken
dht.reseed.group=Opnieuw uploaden
@@ -1336,13 +1346,27 @@ MyTorrentsView.menu.setUpSpeed=Uploadsnelheid instellen
MyTorrentsView.menu.setDownSpeed=Downloadsnelheid instellen
diagnostics.log_found=Vuze is niet correct afgesloten. Controleer %1 voor diagnostische logbestanden en overweeg deze aan het Vuze team te rapporteren als dit het resultaat van een applicatiefout is.
ConfigView.section.logging.log0type=Ynformaasje
+# %1 = "in kbps" or ""; %2 = "upload" or "download"
OpenTorrentWindow.torrentLocation=Torrentbestanden:
Button.moveUp=Omheech
Button.moveDown=Omleach
-# The remaining keys were not in MessagesBundle.properties
-ConfigView.section.file.check_piece_limit.explain=Als je en langzame processor hebt waardoor hashberekeningen achter het wegschrijven naar de harde schijf liggen (aantal complete delen in deeltjesscherm), kan er minder geheugen worden gebruikt door de wachtrijlengte te limiteren
-ConfigView.section.file.write_block_limit.explain=Als je langzame schijfprestaties hebt waardoor schrijfbewerkingen langzamer zijn dan de downloadsnelheid (rode blokken in deeltjesscherm), zal het limiteren van de wachtrijlengte tot minder geheugengebruik leiden
-MainWindow.dht.status.running=Wurd \u00fatfierd
-ConfigView.section.file.check_piece_limit=Maximum uitstaande controle deeltjes\n[0: ongelimiteerd]. Deeltjes grootte hangt af van de torrent
-ConfigView.section.file.write_block_limit=Maximaal aantal uitstaande schrijfbewerkingsblokken\n[0: ongelimiteerd]. Blokgrootte %1
+# > 2402
+#TableColumn.header.size={MyTorrentsView.size}
+#TableColumn.header.up={MyTorrentsView.up}
+#TableColumn.header.date_added={MyTorrentsView.date_added}
+#TableColumn.header.name={MyTorrentsView.name}
+#TableColumn.header.shareRatio={MyTorrentsView.shareRatio}
+#
+# Used for peers which we can't determine.
+PeerSocket.unknown=\u00dbnbekend
+ConfigView.label.announceport=Negeer door tracker meegedeelde poort
+#v3.MainWindow.menu.view.configuration=Preferences
+#v3.MainWindow.menu.view.configuration.keybinding=Meta+,
+#v3.TorrentOptionsView.title.short=Preferences
+#v3.TorrentOptionsView.title.full=Preferences
+#v3.ConfigView.title.short=Preferences
+#v3.ConfigView.title.full=Preferences
+iconBar.queue.tooltip=Wachtrige
+MainWindow.menu.help.faq=Veelgestelde vragen
+#what you've watched? Discover more with a single click...
MainWindow.menu.help.donate=Geef een donatie !!!
diff --git a/org/gudy/azureus2/internat/MessagesBundle_gl_ES.properties b/org/gudy/azureus2/internat/MessagesBundle_gl_ES.properties
index 7075f49..32ba8b9 100644
--- a/org/gudy/azureus2/internat/MessagesBundle_gl_ES.properties
+++ b/org/gudy/azureus2/internat/MessagesBundle_gl_ES.properties
@@ -1,3 +1,4 @@
+#There is a plugin to help with internationalizing these bundles at http://azureus.sourceforge.net/plugin_list.php
MainWindow.menu.file.open.torrent=Arquivo .torrent
Main.parameter.usage=Uso : java org.gudy.azureus2.cl.Main [par\u00e1metros] "arquivo.torrent" "ruta descarga"
Main.parameter.maxUploads=N\u00famero m\u00e1ximo de env\u00edos simult\u00e1neos
@@ -334,7 +335,6 @@ MyTorrentsView.menu.removeand.deletedata=Borrar datos
MyTorrentsView.menu.removeand.deleteboth=Borrar ambos
deletedata.title=Precauci\u00f3n!!!
deletedata.message1=Vostede est\u00e1 a piques de borra-los datos contidos en :\n
-deletedata.message2=\nDesexa proceder?
MainWindow.menu.file.configure=Asistente de configuraci\u00f3n
configureWizard.title=Asistente de configuraci\u00f3n
configureWizard.welcome.title=Benvido ao asistente de configuraci\u00f3n do Vuze
@@ -459,7 +459,6 @@ ConfigView.section.tracker=Tracker
ConfigView.section.tracker.pollinterval=Tracker client poll interval (secs)
ConfigView.section.tracker.publishenable=Publica-los detalles do torrent en "/"
ConfigView.section.tracker.ip=Direcci\u00f3n IP do tracker externo
-MainWindow.menu.help.faq=FAQ
IPChecker.external.service.dyndns.name=DynDNS
IPChecker.external.service.dyndns.url=http://www.dyndns.org/
IPChecker.external.service.dyndns.description=Dynamic DNS Network Services, LLC
@@ -496,7 +495,6 @@ splash.initializeGui=Iniciando fiestra principal
splash.openViews=Abrindo vistas
splash.plugin=Cargando plugin :
configureWizard.nat.tooManyPorts=Demasiados portos para probar (9 m\u00e1x)
-PeerSocket.unknown=Desco\u00f1ecido
MyTorrentsView.menu.publish=Publicar...
MyTrackerView.status.published=Publicado
MyTrackerView.completed=Completado
@@ -509,6 +507,12 @@ IPChecker.external.service.no-ip.name=No-IP
IPChecker.external.service.no-ip.url=http://www.no-ip.com/
IPChecker.external.service.no-ip.description=Dynamic and Static DNS service provider\n(no freely available 'check address' service)
ConfigView.section.tracker.publicenable=Activar .torrents externos
+#
+# Tooltips
+#
+#
+# 2.0.4.4
+#
ConfigView.section.style.guiUpdate=Update GUI every
ConfigView.section.style.graphicsUpdate=Update Graphical bars every N GUI update(s)
ConfigView.section.style.reOrderDelay=Re Order tables every N GUI update(s)
@@ -636,26 +640,24 @@ health.explain.blue=when seeding, it means that you're not yet connected to any
health.explain.yellow=means that the tracker is ok, you're connected to peers, but you don't have any remote connection.\nYou may have a NAT problem if your torrents stay on yellow status all the time
health.explain.green=means that everything is going fine.
ConfigView.section.style.alwaysRefreshMyTorrents=Always refresh My Torrents
+#
+#2.0.7.0
+#
+#
+# 2.0.7.x
+#
TableColumn.header.availability=Dispo\u00f1ibilidade
+#
+# > 2.0.8.0
+#
ConfigView.section.tracker.publishenabledetails=Publish torrent file and peer details
+#Removed
+#MyTorrentsView.menu.setSpeed=Set Upload Speed
ConfigView.label.overrideip=Establecer IP enviada ao rastreador (NAT)
-# The remaining keys were not in MessagesBundle.properties
-configureWizard.nat.serverhigh=Portos altos
-configureWizard.nat.serverlow=Portos baixos
-SystemTray.menu.stopalldownloads=Stop All Downloads
-ConfigView.label.defaultTorrentPath=Carpeta dos arquivos .torrent
-MyTorrentsView.menu.lockstartstop=Desactivar regras de inicio de sementes
-ConfigView.label.moveCompletedPath=Carpeta dos arquivos completados
-ConfigView.label.serverportshared=Use a single shared incoming port for all torrents
-ConfigView.label.stopRatio=Deixar de compartir cando o promedio compartido alcance
-ConfigView.label.serverportrange=Incoming port range
-MainWindow.about.internet.featurerequests=Petici\u00f3n de novas caracter\u00edsticas
-ConfigView.label.serverportlow=Porto de entrada baixo
-MyTorrentsView.menu.lockpriority=Desactivar prioridade autom\u00e1tica
-ConfigView.label.maxclients=N\u00famero m\u00e1ximo de conexi\u00f3ns por torrent (0 : sen l\u00edmite)
-ConfigView.label.override=(Sobreescribe t\u00f3dalas outras regras)
-ConfigView.label.allocatenewfiles=Establecer novos arquivos
-ConfigView.label.serverporthigh=Porto de entrada alto
-ConfigView.label.slowconnect=Conectar lentamente cos novos pares\nPara persoas con problemas de desconexi\u00f3n de Internet
-ConfigView.label.onlyafter50=(S\u00f3 se aplica se o promedio compartido \u00e9 maior de 0.5)
+#file can be a URL or a path in the jar
+# %1 = "in kbps" or ""; %2 = "upload" or "download"
+# > 2402
+# Used for peers which we can't determine.
+PeerSocket.unknown=Desco\u00f1ecido
+MainWindow.menu.help.faq=FAQ
MainWindow.menu.help.donate=Fai unha doaz\u00f3n ($2,$5,...)
diff --git a/org/gudy/azureus2/internat/MessagesBundle_hu_HU.properties b/org/gudy/azureus2/internat/MessagesBundle_hu_HU.properties
index 5497f08..8424e66 100644
--- a/org/gudy/azureus2/internat/MessagesBundle_hu_HU.properties
+++ b/org/gudy/azureus2/internat/MessagesBundle_hu_HU.properties
@@ -379,7 +379,6 @@ MyTorrentsView.menu.removeand.deletedata=A&dat t\u00f6rl\u00e9se
MyTorrentsView.menu.removeand.deleteboth=Mind t\u00f6rl\u00e9se
deletedata.title=Figyelem
deletedata.message1=Az al\u00e1bbi helyen l\u00e9v\u0151 ADATOT t\u00f6rl\u00e9se :\n
-deletedata.message2=\nBiztosan t\u00f6rl\u00f6d?
MainWindow.menu.file.configure=Be\u00e1ll\u00edt\u00e1s &Var\u00e1zsl\u00f3...
configureWizard.title=Be\u00e1ll\u00edt\u00e1s Var\u00e1zsl\u00f3
configureWizard.welcome.title=\u00dcdv\u00f6zli az Vuze Be\u00e1ll\u00edt\u00e1s Var\u00e1zsl\u00f3ja
@@ -706,7 +705,6 @@ ConfigView.section.style.alwaysRefreshMyTorrents.tooltip=Ha enged\u00e9lyezed a
#
#2.0.7.0
#
-ConfigView.section.style.verticaloffset=Megjelen\u00edt\u00e9s f\u00fcgg\u0151leges eltol\u00e1sa (GTK jav\u00edt\u00e1s)
security.certtruster.title=Biztons\u00e1gi figyelmeztet\u00e9s
security.certtruster.intro=A biztons\u00e1gi tan\u00fas\u00edtv\u00e1nyt olyan t\u00e1rsas\u00e1g \u00e1ll\u00edtotta ki, mely nem kapott bizalmat
security.certtruster.resource=Forr\u00e1s:
@@ -846,7 +844,6 @@ ConfigView.text.minutes=percenk\u00e9nt
ConfigView.text.neverIgnore=Nincs Kihagy\u00e1s
ConfigView.text.any=b\u00e1rmely
DownloadManager.error.datamissing=Hi\u00e1nyz\u00f3 adat
-iconBar.queue.tooltip=V\u00e1r\u00f3list\u00e1ra v\u00e9tel
MainWindow.menu.file.open.torrentforseeding=Torrent F\u00e1jl... (Seedel\u00e9shez)
MainWindow.menu.language.refresh=F&riss\u00edt
ManagerItem.forced=Fel\u00fclb\u00edr\u00e1lt
@@ -1890,13 +1887,8 @@ MainWindow.menu.view.iconbar=Eszk\u00f6zt\u00e1r
MyTorrentsView.menu.rename=\u00c1tnevez
MyTorrentsView.menu.rename.displayed=Megjelen\u0151 N\u00e9v \u00c1tnevez\u00e9se
MyTorrentsView.menu.rename.save_path=Ment\u00e9si \u00dat \u00c1tnevez\u00e9se
-MyTorrentsView.menu.rename.displayed_and_save_path=Mind \u00c1tnevez\u00e9se
MyTorrentsView.menu.rename.displayed.enter.title=Megjelen\u0151 N\u00e9v \u00c1tnevez\u00e9se
MyTorrentsView.menu.rename.displayed.enter.message=Add meg a let\u00f6lt\u00e9s \u00faj nev\u00e9t\nHa nem adsz be semmit, akkor az eredeti fog megjelenni.
-MyTorrentsView.menu.rename.save_path.enter.title=Ment\u00e9si \u00dat M\u00f3dos\u00edt\u00e1sa
-MyTorrentsView.menu.rename.save_path.enter.message=Add meg a let\u00f6lt\u00e9s \u00faj hely\u00e9t\nHa nem adsz be semmit, akkor a let\u00f6lt\u00e9s megjelen\u0151 neve lesz haszn\u00e1lva.
-MyTorrentsView.menu.rename.displayed_and_save_path.enter.title=Let\u00f6lt\u00e9s \u00c1tnevez\u00e9se
-MyTorrentsView.menu.rename.displayed_and_save_path.enter.message=Add meg a let\u00f6lt\u00e9s \u00faj nev\u00e9t\nHa nem adsz be semmit, akkor az eredeti fog megjelenni.
MyTorrentsView.menu.edit_comment=Megjegyz\u00e9s szerkeszt\u00e9se
MyTorrentsView.menu.edit_comment.enter.title=Megjegyz\u00e9s szerkezt\u00e9se
MyTorrentsView.menu.edit_comment.enter.message=\u00cdrj be egy megjegyz\u00e9st a let\u00f6lt\u00e9shez
@@ -2104,7 +2096,6 @@ v3.MainWindow.button.comment=Megjegyz\u00e9s
v3.MainWindow.button.viewdetails=R\u00e9szletek
v3.MainWindow.button.play=Lej\u00e1tsz\u00e1s
v3.MainWindow.button.cancel=M\u00e9gsem
-v3.MainWindow.button.sendtofriend=Megoszt
v3.MainWindow.button.preview=El\u0151n\u00e9zet
v3.MainWindow.view.wait=Bet\u00f6lt\u00e9s, k\u00e9rem v\u00e1rjon.
v3.MainWindow.xofx=%1 a %2-b\u00f3l
@@ -2352,11 +2343,6 @@ ConfigView.section.security.unlockkey.error=Kulcsok kinyit\u00e1sa sikertelen -
ConfigView.copy.to.clipboard.tooltip=M\u00e1sol\u00e1s a v\u00e1g\u00f3lapra
Views.plugins.azbuddy.title=Bar\u00e1tok
Browser.popup.error.no.access=Hiba l\u00e9pet fel a t\u00e1voli er\u0151forr\u00e1s el\u00e9r\u00e9se k\u00f6zbene.\nK\u00e9rlek pr\u00f3b\u00e1ld meg k\u00e9s\u0151bb.\n
-v3.activity.header.today=Ma
-v3.activity.header.yesterday=Tegnap
-v3.activity.header.xdaysago=%1 Nappal ezel\u0151tt
-v3.activity.header.1weekago=1 hete
-v3.activity.header.xweeksago=%1 H\u00e9ttel ezel\u0151tt
ConfigView.label.queue.stoponcebandwidthmet=Ne ind\u00edtson \u00faj torrentet, ha a fel-/let\u00f6lt\u00e9si sebess\u00e9g el\u00e9rte a limitet
ConfigView.section.style.forceMozilla=Vuze k\u00e9nyszer\u00edt\u00e9se a Mozilla haszn\u00e1lat\u00e1ras [xulrunner vagy firefox 3 sz\u00fcks\u00e9ges; \u00fajraind\u00edt\u00e1s sz\u00fcks\u00e9ges]
ConfigView.section.style.xulRunnerPath=Add meg a XulRunner / Firefox el\u00e9r\u00e9i \u00fatj\u00e1t [min FF3; \u00fajraind\u00edt\u00e1s sz\u00fcks\u00e9ges]
@@ -2407,50 +2393,17 @@ Button.bar.share=Megoszt
Button.bar.add=Bar\u00e1t hozz\u00e1ad\u00e1sa
Button.bar.edit=Szerkeszt
Button.bar.edit.cancel=Szerkeszt\u00e9s k\u00e9sz
-v3.Share.menu=Tartalom megoszt\u00e1sa
-v3.Share.header=Megoszt
-v3.Share.header.message=Megoszt\u00e1s az aktu\u00e1lis Bar\u00e1tokkal, vagy \u00faj bar\u00e1t hozz\u00e1ad\u00e1sa.
-v3.Share.add.buddy=Bar\u00e1t hozz\u00e1ad\u00e1sa
-v3.Share.add.edit.buddy=Bar\u00e1t hozz\u00e1ad\u00e1sa/szerkeszt\u00e9se
-v3.Share.add.buddy.all=Minden megoszt\u00e1sa
-v3.Share.add.buddy.existing=L\u00e9tez\u0151 bar\u00e1t:
-v3.Share.add.buddy.new=\u00daj bar\u00e1t:
-v3.Share.buddies=Bar\u00e1tok
-v3.Share.invitees=Megh\u00edv\u00f3k
-v3.Share.invite.buddies.prompt=\u00daj bar\u00e1t megh\u00edv\u00e1sa megoszt\u00e1sra
-v3.Share.send.now=K\u00fcld\u00e9s
-v3.Share.optional.message=\u00dczenet Activity Feeden kereszt\u00fcl (maximum 140 karakter):
-v3.Share.disclaimer=Megj.: A megosztott tartalom \u00e9s az \u00fczenet is titkos\u00edtva lesz.
-v3.Share.disclaimer.link=B\u0151vebben
-ConfigView.section.security.vuze.login=Jeletkezz be a Vuze-ra a m\u0171velet v\u00e9grehajt\u00e1s\u00e1hoz
-v3.buddy.menu.viewprofile=Profil megtekint\u00e9se
-v3.buddy.menu.remove=Bar\u00e1t T\u00f6rl\u00e9se
v3.MainWindow.menu.view.pluginbar=B\u0151v\u00edtm\u00e9nyek eszk\u00f6zt\u00e1r
-v3.MainWindow.menu.view.buddies-viewer=Bar\u00e1t S\u00e1v
-v3.activity.buddy-request=Bar\u00e1ti k\u00e9r\u00e9s \u00e9rkezett %1
-v3.activity.buddy-request.multi=Bar\u00e1ti k\u00e9r\u00e9sed van [#%3] felad\u00f3ja %1
-v3.activity.buddy-linkup=%1 mostant\u00f3l a bar\u00e1tod
-v3.activity.share-content.no-msg=%1 megosztotta a %2 veled
-v3.buddies.count=%1 Bar\u00e1t
-v3.buddies.remove=Bar\u00e1t t\u00f6rl\u00e9se
-v3.buddies.add.to.share=Bar\u00e1t hozz\u00e1ad\u00e1sa Megoszt\u00e1shoz
MainWindow.dialog.select.vuze.file=Vuze f\u00e1jl kiv\u00e1laszt\u00e1sa
MainWindow.menu.file.open.vuze=Vuze \u00e1jl...
-azbuddy.ui.dialog.disable.title=Bar\u00e1tok b\u0151v\u00edtm\u00e9ny letilt\u00e1sa
-azbuddy.ui.dialog.disable.text=Ha letiltod a Bar\u00e1t b\u0151v\u00edtm\u00e9nyt, akkor nem oszthatsz meg torrentet a Bar\u00e1t Eszk\u00f6zt\u00e1r seg\u00edts\u00e9g\u00e9vel, \u00e9s nem m\u00f3dos\u00edthatod a bar\u00e1tok list\u00e1j\u00e1t sem\n\nBiztosan le akarod tiltani a Bar\u00e1tokat?
metasearch.addtemplate.title=Telep\u00edted a Keres\u00e9si Sablont?
metasearch.addtemplate.desc=Biztosan telep\u00edteni szeretn\u00e9d a '%1' keres\u00e9si sablont?
v3.share.private.title=Torrent megoszt\u00e1sa
v3.share.private.text=A kiv\u00e1lasztott torrent priv\u00e1t torrent.\n\nNem oszthatsz meg priv\u00e1t torrentet.
-v3.buddies.disabled.title=Bar\u00e1t B\u0151v\u00edtm\u00e9ny Letiltva
-v3.buddies.disabled.text._windows=Letiltottad a bar\u00e1t b\u0151v\u00edtm\u00e9nyt, \u00edgy nem oszthatsz meg vagy fogadhatsz torrentet bar\u00e1tt\u00f3l. A be\u00e1ll\u00edt\u00e1s b\u00e1rmikor m\u00f3dos\u00edthat\u00f3.
-v3.buddies.disabled.text._mac=Letiltottad a bar\u00e1t b\u0151v\u00edtm\u00e9nyt, \u00edgy nem oszthatsz meg vagy fogadhatsz torrentet bar\u00e1tt\u00f3l. A be\u00e1ll\u00edt\u00e1s b\u00e1rmikor m\u00f3dos\u00edthat\u00f3.
metasearch.addtemplate.dup.title=Sablon m\u00e1sol\u00e1sa
metasearch.addtemplate.dup.desc=A %1 keres\u00e9si sablon m\u00e1r telep\u00edtve van
metasearch.export.select.template.file=Sablon Ment\u00e9se
metasearch.import.select.template.file=Sablon Megnyit\u00e1sa
-v3.MainWindow.button.newtag.share=\u00daj! Torrent Megoszt\u00e1sa
-v3.buddies.faq=B\u0151vebb
dialog.uiswitch.title=V\u00e1lt\u00e1s Vuze UI-ra
dialog.uiswitch.text=A funkci\u00f3hoz Vuze fel\u00fclet sz\u00fcks\u00e9ge.\n\n\u00dajraind\u00edt\u00e1s sz\u00fcks\u00e9ges.
dialog.uiswitch.button=V\u00e1lt\u00e1s Vuze UI-ra
@@ -2458,25 +2411,10 @@ azbuddy.tracker.enabled='Bar\u00e1t gyors\u00edt\u00e1sa' nagyobb priorit\u00e1s
azbuddy.protocolspeed=KB/s a bar\u00e1tod max protokoll fejr\u00e9sz
v3.MainWindow.button.download=Let\u00f6lt\u00e9s
v3.MainWindow.button.run=Let\u00f6lt\u00e9si F\u00e1jl Ind\u00edt\u00e1sa
-v3.activity.header.friend.requests.foryou=Bar\u00e1ti k\u00e9r\u00e9s - Neked
-v3.activity.header.friend.requests.fromyou=Bar\u00e1ti k\u00e9r\u00e9s - T\u0151led
-v3.activity.header.friend.requests.accepted=Bar\u00e1ti k\u00e9r\u00e9s - Elfogadva
-v3.activity.header.share.requests=Torrent megoszt\u00e1sa k\u00e9r\u00e9s
v3.activity.header.downloads=Let\u00f6lt\u00e9s
-v3.activity.header.rating.reminders=Min\u0151s\u00e9g Figyelmeztet\u0151
v3.activity.header.vuze.news=Vuze H\u00edrek
-login.optional.message=Be kell jeletkezned a funkci\u00f3 haszn\u00e1lat\u00e1hoz
-message.confirm.share.singular=Kiv\u00e1l\u00f3! K\u00e9r\u00e9s egy torrent megoszt\u00e1s\u00e1ra elk\u00fcldve.
-message.confirm.share.plural=Kiv\u00e1l\u00f3! K\u00e9r\u00e9s a torrentek megoszt\u00e1s\u00e1ra elk\u00fcldve.
-message.confirm.share.invite.singular=Kiv\u00e1l\u00f3! K\u00e9r\u00e9s kapcsol\u00f3d\u00e1sra \u00e9s megoszt\u00e1sra elk\u00fcldve. Sz\u00f3lj a bar\u00e1todnak, hogy fogadja el.
-message.confirm.share.invite.plural=Kiv\u00e1l\u00f3! K\u00e9r\u00e9s kapcsol\u00f3d\u00e1sra \u00e9s megoszt\u00e1sra elk\u00fcldve. Sz\u00f3lj a bar\u00e1todnak, hogy fogadja el.
-message.confirm.invite.singular=Kiv\u00e1l\u00f3! K\u00e9r\u00e9s a Bar\u00e1tod fel\u00e9 elk\u00fcldve. Sz\u00f3lj neki, hogy fogadja el.
-message.confirm.invite.plural=Kiv\u00e1l\u00f3! Felk\u00e9r\u00e9s a Bar\u00e1taidnak elk\u00fcldve. Noszogasd a bar\u00e1taidah, hogy fogadj\u00e1k el.
-message.confirm.invite.error=Hopp\u00e1! Van egy kis gubanc. Egy vagy t\u00f6vv megh\u00edv\u00f3d hib\u00e1s.
-message.prompt.add.friends=Megoszt\u00e1shoz kattints a bar\u00e1t ikonra alul
message.taking.too.long=Ez el fog tartani egy ideig\nNyomd meg az 'ESC' gombot, ha meg akarod szak\u00edtani a m\u0171veletet
message.status.success=Sikeres
-message.intro.friends=Bar\u00e1t hozz\u00e1ad\u00e1sa. Torrent Megoszt\u00e1sa. T\u00f6lt\u00e9s Gyorsabban.
azbuddy.tracker.bbb.status.title=Bar\u00e1t gyors\u00edt\u00e1sa
azbuddy.tracker.bbb.status.title.tooltip=Dupla katt a r\u00e9szletek\u00e9rt
azbuddy.tracker.bbb.status.idle=Nincs gyors\u00edt\u00e1s
@@ -2485,13 +2423,8 @@ azbuddy.tracker.bbb.status.in=Gyors\u00edtva
azbuddy.tracker.bbb.status.out=Gyors\u00edtott Bar\u00e1tok
v3.MainWindow.search.go.tooltip=Elv\u00e9gzett Keres\u00e9s
v3.MainWindow.search.last.tooltip=Vissza az eredm\u00e9nyekhez
-v3.activity.buddy-invited=K\u00e9r\u00e9s elk\u00fcldve a k\u00f6vetkez\u0151r\u0151l %1.
-v3.activity.buddy-invited.multi=Bar\u00e1ti k\u00e9r\u00e9s elk\u00fcldve a k\u00f6vetkez\u0151 embereknek:\n%1
metasearch.addtemplate.done.title=Sablon Hozz\u00e1adva
metasearch.addtemplate.done.desc='%1' sablon sikeresen hozz\u00e1adva.\nA k\u00f6vetkez\u0151 keres\u00e9sn\u00e9l haszn\u00e1lhat\u00f3!
-v3.MainWindow.button.share=Tartalom megoszt\u00e1sa
-v3.buddies.remove.buddy.dialog.title=Bar\u00e1t T\u00f6rl\u00e9se Meger\u0151s\u00edt\u00e9s
-v3.buddies.remove.buddy.dialog.text=Val\u00f3ban t\u00f6rl\u00f6d %1 a Bar\u00e1taid k\u00f6z\u00fcl?
ConfigView.section.security.nopw=Nincs jelsz\u00f3 be\u00e1ll\u00edtva
ConfigView.section.security.nopw_v=A jelsz\u00f3 nem el\u00e9rhet\u0151, l\u00e9pj be a Vuze-ba
fileplugininstall.install.title=B\u0151v\u00edtm\u00e9ny telep\u00edt\u00e9se?
@@ -2503,12 +2436,7 @@ azbuddy.os_away=Nincs a g\u00e9pn\u00e9l
azbuddy.os_not_avail=Nem el\u00e9rhet\u0151
azbuddy.os_busy=Elfoglalt
azbuddy.ui.menu.disconnect=Sz\u00e9tkapcsol
-v3.chat.offline=%1 most offline,de amint bejelentkezik megkapja az \u00fczenetet.
-v3.chat.wrongversion=%1 olyan Vuze verzi\u00f3t hazsn\u00e1l, mely nem t\u00e1mogatja a Chat-t.
azbuddy.enable_chat_notif=Chat figyelmeztet\u00e9sek enged\u00e9lyez\u00e9se
-v3.buddies.dnd.info.dialog.title=Dobd Megoszt\u00e1s
-v3.buddies.dnd.info.dialog.text=Megoszt\u00e1st k\u00e9rt\u00e9l. A f\u00e9jlok megoszt\u00e1sa elkezd\u0151d\u00f6tt, a megoszt\u00e1s ablak megjelenik, ha minden befejez\u0151d\u00f6tt.\n\nNe kapcsold ki Vuze-t, hogy a bar\u00e1taid el\u00e9rhess\u00e9k amegoszt\u00e1sod.\n<A HREF="http://faq.vuze.com/?View=entry&EntryID=267">Katt ide</A> b\u0151vebb inform\u00e1ci\u00f3k\u00e9rt.
-v3.buddies.dnd.info.dialog.remember=Nem mutassa \u00fajb\u00f3l ezt az \u00fczenetet
progress.window.msg.progress=V\u00e1rj am\u00edg a m\u0171velet be nem fejez\u0151dik
DetailedListView.title=R\u00e9szletes Lista
ConfigView.section.connection.network.max.outstanding.connect.attempts=Max sorban\u00e1ll\u00f3 kimen\u0151 kapcsolat
@@ -2534,6 +2462,7 @@ iconBar.share=megoszt
iconBar.details=R\u00e9szletek
iconBar.comment=Megjegyz\u00e9s
iconBar.play=Lej\u00e1tsz\u00e1s
+iconBar.queue.tooltip=V\u00e1r\u00f3list\u00e1ra v\u00e9tel
v3.MainWindow.menu.view.sidebar=Oldals\u00e1v
v3.MainWindow.menu.view.actionbar=Tev\u00e9kenys\u00e9g s\u00e1v
v3.MainWindow.menu.view.toolbars=Eszk\u00f6zt\u00e1r
@@ -2554,8 +2483,6 @@ PluginDeprecation.view=Plugin Hbakeres\u00e9s
PluginDeprecation.alert=A plugin egy megsz\u00fcn\u0151 funkci\u00f3t akar haszn\u00e1lni -n\u00e9zd meg a Plugin Debug napl\u00f3t a r\u00e9szletek\u00e9rt.
TableColumn.header.Thumbnail=Ikon
TableColumn.header.Thumbnail.info=Mozaik k\u00e9p Vuze tartalomn\u00e1l; minden egy\u00e9bhez az oper\u00e1ci\u00f3s rendszerben be\u00e1ll\u00edtott ikonok jelennek meg.
-TableColumn.header.Rating_global=Min\u0151s\u00edt\u00e9s
-TableColumn.header.Rating_global.info=A tartalom min\u0151s\u00edt\u00e9se
v3.MainWindow.menu.getting_started=&Bemutat\u00f3
MainWindow.menu.help.faq=&Gyakran Ism\u00e9telt K\u00e9rd\u00e9sek
MainWindow.menu.help.support=&Seg\u00edts\u00e9g \u00e9s T\u00e1mogat\u00e1s
@@ -2564,10 +2491,6 @@ externalLogin.explanation="%1" sablonhoz be kell jeletkeznek. Ha bejelentkezt\u0
externalLogin.explanation.capture=Be kell jeletkezned a sablon elk\u00e9sz\u00edt\u00e9s\u00e9hez. Ha k\u00e9szen vagy, kattints a "K\u00e9sz" gombra.
Button.done=K\u00e9sz
GeneralView.torrent_created_on_and_by=%1 %2-b\u00f3l/b\u0151l
-v3.Share.wizard.title=Megoszt\u00e1s -- Var\u00e1zsl\u00f3
-v3.AddFriends.header.message=Bar\u00e1t hozz\u00e1ad\u00e1sa a kedvenc torrentek megoszt\u00e1s\u00e1hoz
-v3.AddFriends.header=Bar\u00e1t Hozz\u00e1ad\u00e1sa
-v3.AddFriends.wizard.title=Bar\u00e1t Hozz\u00e1ad\u00e1sa -- Var\u00e1zsl\u00f3
Button.continue=Folytat
Button.preview=El\u0151n\u00e9zet
Subscription.menu.forcecheck=Friss\u00edt "%1"
@@ -2578,9 +2501,6 @@ sidebar.LibraryDL=Let\u00f6tl\u00e9s
sidebar.LibraryCD=Befejezve
authenticator.location=Hely
authenticator.details=R\u00e9szletek
-v3.MainWindow.menu.publish.new=\u00daj tartalom megoszt\u00e1sa
-v3.MainWindow.menu.publish.mine=K\u00f6zz\u00e9tett Tartalmaid
-v3.MainWindow.menu.publish.about=Kiad\u00e1sr\u00f3l..
subscript.import.fail.title=Import\u00e1l\u00e1s Sikertelen
subscript.import.fail.desc=R\u00e9szletek: %1
Subscription.menu.export=Export\u00e1l
diff --git a/org/gudy/azureus2/internat/MessagesBundle_hy_AM.properties b/org/gudy/azureus2/internat/MessagesBundle_hy_AM.properties
index 2550b73..c2ee8ab 100644
--- a/org/gudy/azureus2/internat/MessagesBundle_hy_AM.properties
+++ b/org/gudy/azureus2/internat/MessagesBundle_hy_AM.properties
@@ -1,3 +1,4 @@
+#There is a plugin to help with internationalizing these bundles at http://azureus.sourceforge.net/plugin_list.php
MainWindow.menu.file=&\u0556\u0561\u0575\u056c
MainWindow.menu.file.open=&\u0532\u0561\u0581\u0565\u056c
MainWindow.menu.file.create.fromfile=&\u0556\u0561\u0575\u056c\u056b\u0581
@@ -108,6 +109,12 @@ fileDownloadWindow.status=\u054e\u056b\u0573\u0561\u056f :
fileDownloadWindow.state_error=\u054d\u056d\u0561\u056c :
wizard.comment=\u0544\u0565\u056f\u0576\u0561\u0562\u0561\u0576\u0578\u0582\u0569\u0575\u0578\u0582\u0576
ConfigView.section.file.decoder.nodecoder=\u0548\u0579 \u0574\u0565\u056f\u0568
+#
+# Tooltips
+#
+#
+# 2.0.4.4
+#
ConfigView.section.tracker.passwordenabletorrent=\u0531\u056f\u057f\u056b\u057e\u0561\u0581\u0576\u0565\u056c \u0563\u0561\u0572\u057f\u0576\u0561\u0562\u0561\u057c\u0568 \u057f\u0578\u0580\u0580\u0565\u0576\u057f\u0576\u0565\u0580\u056b \u057e\u0580\u0561
ConfigView.section.tracker.username=\u0533\u0578\u0580\u056e\u0561\u056e\u0578\u0572\u056b \u0561\u0576\u0578\u0582\u0576\u0568
ConfigView.section.tracker.password=\u0533\u0561\u0572\u057f\u0576\u0561\u0562\u0561\u057c
@@ -136,10 +143,16 @@ wizard.maketorrent.piecesize=\u053f\u057f\u0578\u0580\u056b \u0579\u0561\u0583
wizard.maketorrent.auto=\u0531\u057e\u057f\u0578\u0574\u0561\u057f
TableColumn.header.health=\u054e\u056b\u0573\u0561\u056f\u0568
MyTorrentsView.menu.health=\u054e\u056b\u0573\u0561\u056f\u056b \u0576\u0577\u0561\u0576\u0576\u0565\u0580\u056b \u0574\u0561\u057d\u056b\u0576
+#
+#2.0.7.0
+#
security.certtruster.yes=\u0531\u0575\u0578
MySharesView.name=\u0531\u0576\u0578\u0582\u0576
MySharesView.type=\u054f\u0565\u057d\u0561\u056f
MySharesView.type.file=\u0556\u0561\u0575\u056c
+#
+# 2.0.7.x
+#
Categories.all=\u0532\u0578\u056c\u0578\u0580\u0568
ConfigView.label.seeding.rankType.none=\u0548\u0579 \u0574\u0565\u056f\u0568
ConfigView.section.pluginslist=\u0551\u0578\u0582\u0581\u0561\u056f
@@ -152,6 +165,9 @@ AlertMessageBox.comment=\u053b\u0576\u0586\u0578\u0580\u0574\u0561\u0581\u056b\u
AlertMessageBox.information=\u053b\u0576\u0586\u0578\u0580\u0574\u0561\u0581\u056b\u0561
SpeedView.stats.total=\u0538\u0576\u0564\u0570\u0561\u0576\u0578\u0582\u0580
SpeedView.stats.now=\u0540\u056b\u0574\u0561
+#
+# > 2.0.8.0
+#
ConfigView.section.style.colorOverride.error=\u054d\u056d\u0561\u056c
Button.revert=\u0565\u057f
ConfigView.complete.abbreviated=\u054a\u0538\u0550\u053e:
@@ -175,6 +191,8 @@ GeneralView.label.maxdownloadspeed=\u0531\u057c\u0561\u057e\u0565\u056c\u0561\u0
blank.resource=\u054c\u0565\u057d\u0578\u0582\u0580\u057d
Button.clear=\u0544\u0561\u0584\u0580\u0565\u056c
Button.reset=\u054e\u0565\u0580\u0561\u056f\u0561\u0576\u0563\u0576\u0565\u056c
+#Removed
+#MyTorrentsView.menu.setSpeed=Set Upload Speed
CacheView.title.full=\u053f\u0565\u0577
CacheView.general.size=\u053c\u0580\u056b\u057e \u0579\u0561\u0583\u0568
CacheView.general.inUse=\u0555\u0563\u057f\u0561\u0563\u0578\u0580\u056e\u057e\u0578\u0582\u0574 \u0567
@@ -214,6 +232,7 @@ window.networkselection.description=\u054f\u0578\u0580\u0580\u0565\u0576\u057f :
MyTorrentsView.menu.networks=\u0551\u0561\u0576\u0581\u0565\u0580
Button.apply=\u053f\u056b\u0580\u0561\u057c\u0565\u056c
Button.close=\u0553\u0561\u056f\u0565\u056c
+#file can be a URL or a path in the jar
DHTView.operations.ok=\u0540\u0561\u057d\u057f\u0561\u057f\u0565\u056c
DHTView.activity.type=\u054f\u0565\u057d\u0561\u056f
MyTorrentsView.menu.setDownSpeed=\u054d\u0561\u0570\u0574\u0561\u0576\u0565\u056c \u0562\u0565\u057c\u0576\u0574\u0561\u0576 \u0561\u0580\u0561\u0563\u0578\u0582\u0569\u0575\u0578\u0582\u0576\u0568
@@ -227,6 +246,7 @@ ConfigView.section.logging.log1type=\u0536\u0563\u0578\u0582\u0577\u0561\u0581\u
ConfigView.section.logging.log2type=\u054d\u056d\u0561\u056c
ConfigView.pluginlist.column.type=\u054f\u0565\u057d\u0561\u056f
ConfigView.pluginlist.column.name=\u0531\u0576\u0578\u0582\u0576
+# %1 = "in kbps" or ""; %2 = "upload" or "download"
OpenTorrentWindow.addFiles.Folder=\u0531\u057e\u0565\u056c\u0561\u0581\u0576\u0565\u056c &\u0539\u0572\u0569\u0561\u057a\u0561\u0576\u0561\u056f
OpenTorrentWindow.torrentTable.name=\u0531\u0576\u0578\u0582\u0576
OpenTorrentWindow.fileTable.fileName=\u0556\u0561\u0575\u056c\u056b \u0561\u0576\u0578\u0582\u0576\u0568
diff --git a/org/gudy/azureus2/internat/MessagesBundle_in_ID.properties b/org/gudy/azureus2/internat/MessagesBundle_in_ID.properties
index dbd7297..82f70a0 100644
--- a/org/gudy/azureus2/internat/MessagesBundle_in_ID.properties
+++ b/org/gudy/azureus2/internat/MessagesBundle_in_ID.properties
@@ -873,13 +873,8 @@ ConfigView.section.style.showiconbar=Tampilkan Toolbar
MyTorrentsView.menu.rename=Ubah Nama
MyTorrentsView.menu.rename.displayed=Ubah nama yang ditampilkan
MyTorrentsView.menu.rename.save_path=Ubah Nama Tempat Penyimpanan
-MyTorrentsView.menu.rename.displayed_and_save_path=Ubah Keduanya
MyTorrentsView.menu.rename.displayed.enter.title=Ubah nama yang ditampilkan
MyTorrentsView.menu.rename.displayed.enter.message=Masukkan nama baru untuk ditampilkan.\nJika dikosongkan, akan digunakan nama yang asli.
-MyTorrentsView.menu.rename.save_path.enter.title=Ubah Nama Tempat Penyimpanan
-MyTorrentsView.menu.rename.save_path.enter.message=Masukkan nama baru untuk tempat penyimpanan.\nJika dikosongkan, akan tampilan nama akan digunakan sebagai nama penyimpanan.
-MyTorrentsView.menu.rename.displayed_and_save_path.enter.title=Ubah Nama
-MyTorrentsView.menu.rename.displayed_and_save_path.enter.message=Masukkan nama baru\nJika dikosongkan, akan digunakan nilai yang asli.
MyTorrentsView.menu.edit_comment=Ubah Komentar
MyTorrentsView.menu.edit_comment.enter.title=Mengubah Komentar
MyTorrentsView.menu.edit_comment.enter.message=Masukkan komentar
@@ -1076,14 +1071,11 @@ Button.bar.share=Berbagi
Button.bar.add=Tambah
Button.bar.edit=Ubah
Button.bar.edit.cancel=Selesai Mengubah
-v3.Share.buddies=Teman
-v3.buddies.friends=Teman
MainWindow.dialog.select.vuze.file=Pilih Berkas Vuze
v3.share.private.title=Berbagi Torrent
v3.share.private.text=Torrent yang dipilih merupakan Torrent Privat.\n\nAnda tidak bisa berbagi torrent privat.
v3.MainWindow.button.download=Unduh
v3.activity.header.vuze.news=Berita Vuze
-message.intro.friends=Tambah Teman.\nBerbagi Torrent.\nUnduh Lebih Cepat.
azbuddy.online_status=Status koneksi
azbuddy.os_online=Terkoneksi
azbuddy.os_away=Tidak ditempat
@@ -1110,11 +1102,8 @@ TableColumn.header.azsubs.ui.column.subs=Langganan
MainWindow.menu.community=&Komunitas
MainWindow.menu.community.wiki=&Wiki Komunitas
MainWindow.menu.community.forums=Forums Komunitas
-MainWindow.menu.community.add_friends=Tambah Teman
Button.done=Selesai
GeneralView.torrent_created_on_and_by=%1 oleh %2
-v3.AddFriends.header.message=Tambah teman untuk berbagi torrent favorit Anda
-v3.AddFriends.header=Tambah Teman
Button.continue=Lanjutkan
Button.preview=Pratayang
Subscription.menu.forcecheck=Perbarui
@@ -1133,7 +1122,6 @@ TableColumn.header.unopened=Baru
Unopened.bigView.header=Baru
Subscription.menu.deleteall=Hapus Semua
Subscription.menu.reset=Kembali Ke Kondisi Awal
-ConfigView.interface.start.library=Mulai di Pustaka
TableColumn.header.activityNew=Baru
TableColumn.header.activityType=Jenis
TableColumn.header.activityText=Pesan
@@ -1143,7 +1131,6 @@ TableColumn.header.activityActions=Aksi
Button.search=Cari
Button.save=Simpan
Button.add=Tambah
-TableColumn.header.videoLength=Panjang Video
Subscription.menu.properties=Properti
props.window.title=Properti untuk '%1'
sidebar.VuzeHDNetwork=Jaringan Vuze HD
@@ -1158,8 +1145,6 @@ sidebar.expand.tooltip=Tampilkan Sidebar
sidebar.dropdown.tooltip=Tampilkan sidebar dalam bentuk menu
Button.deleteContent.fromLibrary=Hilangkan dari pustaka
Button.deleteContent.fromComputer=Hapus dari komputer
-v3.library.infobar.text1=Mencari tampilan yang lebih lanjut?
-v3.library.infobar.text2=Gunakan tombol Tampilan pada toolbar diatas.
Subscription.menu.dirtyall=Tandai Semua Sebagai Belum Dibaca
configureWizard.file.message3=Vuze akan menyimpan berkas data dalam folder tertentu, Anda bisa menentukan folder tersebut disini:
v3.deleteContent.applyToAll=Terapkan pada %1 entri yang dipilih
@@ -1175,10 +1160,8 @@ v3.dialog.cnclose.subtitle=Pemberitahuan
TableColumn.header.#.info=Posisi/Nomor Urut
TableColumn.header.category.info=Nama kategori dari torrent
TableColumn.header.health.info=Seberapa sehat koneksi Anda ke swarm
-TableColumn.header.Info.info=Tombol untuk melihat halaman detil pada Vuze Content
TableColumn.header.maxuploads.info=Jumlah maksimum peer yang diunjuk dalam satu waktu
TableColumn.header.name.info=Nama dari torrent
-TableColumn.header.Quality.info=Kualitas dari vuze content, seperti HD, SD
TableColumn.header.SeedingRank.info=Tingkat nilai yang menunjukkan seberapa kebutuhan seed sebuah torrent. Lebih tinggi berarti lebih dibutuhkan.
TableColumn.header.shareRatio.info=Berapa banyak yang diunjuk dibandingkan dengan yang diunduh.
TableColumn.header.size.info=Ukuran data torrent dalam cakram
@@ -1186,7 +1169,6 @@ TableColumn.header.azsubs.ui.column.subs.info=Tombol yang memungkinkan Anda untu
TableColumn.header.upspeed.info=Kecepatan unjuk saat ini
TableColumn.header.downspeed.info=Kecepatan unduh saat ini
TableColumn.header.up.info=Jumlah data yang terkirim ke pengguna lain
-TableColumn.header.videoLength.info=Panjang waktu tayang vuze video content
TableColumn.header.eta.info=Perkiraan waktu yang dibutuhkan sampai torrent terunduh
Pieces.column.#.info=Nomor Potongan
Peers.column.%.info=Persentasi yang sudah diunduh oleh peer
diff --git a/org/gudy/azureus2/internat/MessagesBundle_it_IT.properties b/org/gudy/azureus2/internat/MessagesBundle_it_IT.properties
index 55bb969..d6f85f4 100644
--- a/org/gudy/azureus2/internat/MessagesBundle_it_IT.properties
+++ b/org/gudy/azureus2/internat/MessagesBundle_it_IT.properties
@@ -1158,8 +1158,6 @@ MyTrackerView.badnat.info=Seed/Peer che hanno fallito un controllo sul NAT, se a
ConfigView.section.tracker.natchecktimeout=Timeout del controllo (sec)
ConfigView.section.file.perf.cache.enable=Abilita cache del disco
ConfigView.section.file.perf.cache.size=Dimensione della cache (%1)
-#Removed
-#MyTorrentsView.menu.setSpeed=Set Upload Speed
MainWindow.menu.transfers=T&rasferimenti
MainWindow.menu.transfers.startalltransfers=Av&via tutti
MainWindow.menu.transfers.stopalltransfers=Fer&ma tutti
@@ -1426,8 +1424,10 @@ window.welcome.title=Benvenuto in Vuze %1
#file can be a URL or a path in the jar
MainWindow.menu.help.releasenotes=Note di rilascio
dht.reseed.label=Normalmente, il reseed del database distribuito non \u00e8 necessario. Tuttavia, se il numero di contatti \u00e8 basso, puo essere usato per una reintegrazione.\nLasciare vuoto per ricevere automaticamente la lista dei peer connessi, oppure inserire un indirizzo IP ed una porta per ricevere la lista da un peer conosciuto.
+dht.reseed.group=Ripetizione del seed
dht.reseed.ip=Indirizzo IP
dht.reseed.port=Porta
+dht.reseed=Ripeti il seed
dht.reseed.info=Esegue il reseed del database
dht.diagnostics.group=Diagnostica
DHTView.title.full=Database distribuito
@@ -1880,6 +1880,8 @@ MyTorrentsView.menu.rename.save_path=Cambia il percorso di salvataggio
AdvRenameWindow.title=Rinominazione del torrent
AdvRenameWindow.message=Inserire un nuovo nome per questo download.
AdvRenameWindow.rename.torrent=Rinomina torrent
+MyTorrentsView.menu.rename.displayed.enter.title=Rinomina nome visualizzato
+MyTorrentsView.menu.rename.displayed.enter.message=Inserisci un nuovo nome da visualizzare per questo download.
MyTorrentsView.menu.edit_comment=Modifica commento
MyTorrentsView.menu.edit_comment.enter.title=Modifica del commento
MyTorrentsView.menu.edit_comment.enter.message=Inserire un commento per questo download.
@@ -2007,7 +2009,9 @@ SpeedTestWizard.set.upload.bytes.per.sec=KB/s
SpeedTestWizard.set.upload.bits.per.sec=bit/s
SpeedTestWizard.finish.panel.title=Test della velocit\u00e0 terminato!
SpeedTestWizard.finish.panel.click.close=Test della velocit\u00e0 completato. Fare clic su Chiudi per uscire.
+SpeedTestWizard.finish.panel.max.upload=Upload max :
SpeedTestWizard.finish.panel.max.seeding.upload=Max upload durante il seed :
+SpeedTestWizard.finish.panel.max.download=Download max :
SpeedTestWizard.finish.panel.enabled=abilitato
SpeedTestWizard.finish.panel.disabled=disabilitato
SpeedTestWizard.abort.message.scheduled.in=test pianificato fra... %1 secondi
@@ -2058,12 +2062,7 @@ TableColumn.header.SpeedGraphic=Velocit\u00e0
TableColumn.header.AzProduct=Da
TableColumn.header.MediaThumb=Materiale
TableColumn.header.ProgressETA=Progresso
-#TableColumn.header.size={MyTorrentsView.size}
-#TableColumn.header.up={MyTorrentsView.up}
-#TableColumn.header.date_added={MyTorrentsView.date_added}
-#TableColumn.header.name={MyTorrentsView.name}
TableColumn.header.name.ext=Tipo di file: %1
-#TableColumn.header.shareRatio={MyTorrentsView.shareRatio}
v3.MainWindow.tab.browse=Su Vuze
v3.MainWindow.tab.library=Libreria
v3.MainWindow.tab.publish=Pubblica
@@ -2116,7 +2115,6 @@ v3.topbar.menu.show.search=Cerca
splash.initializeCore=Inizializzazione del core
splash.initializeUIElements=Inizializzazione degli elementi dell'interfaccia
ConfigView.section.transfer.autospeedbeta=Auto-speed - beta
-#
ConfigView.section.ipfilter.peerblocking.group=Blocco dei peer
ConfigView.section.ipfilter.autoload.group=Caricamento automatico
ConfigView.section.ipfilter.autoload.file=Filtro IP da caricare automaticamente
@@ -2154,6 +2152,7 @@ dialog.uiswitcher.restart.text=Per cambiare l'interfaccia utente \u00e8 nesessar
TrayWindow.menu.close=Chiudi il cesto dei download
# Used for peers which we can't determine.
PeerSocket.unknown=Sconosciuto
+PeerSocket.fake_client=FALSO
PeerSocket.bad_peer_id=peer ID non valido
PeerSocket.mismatch_id=non corrispondente
PeerSocket.unknown_az_style=Sconosciuto %1/%2
@@ -2275,15 +2274,9 @@ v3.MainWindow.tab.events=Attivit\u00e0
button.columnsetup.tooltip=Configuazione delle colonne
v3.activity.remove.title=Rimozione dell'avviso
v3.activity.remove.text=Cancellare questo avviso?
-#v3.MainWindow.menu.view.configuration=Preferences
-#v3.MainWindow.menu.view.configuration.keybinding=Meta+,
v3.MainWindow.menu.file.closewindow=Chiudi
Menu.show.torrent.menu=Mostra il menu Torrent
Menu.show.torrent.menu.tooltip=Mostra il menu Torrent sulla barra superiore dell'applicazione
-#v3.TorrentOptionsView.title.short=Preferences
-#v3.TorrentOptionsView.title.full=Preferences
-#v3.ConfigView.title.short=Preferences
-#v3.ConfigView.title.full=Preferences
Views.plugins.aznetstatus.title=Stato della rete
plugin.aznetstatus.pingtarget=Obbiettivo di ping/traceroute
ConfigView.section.style.usePathFinder=Usa \u00abCerca percorso\u00bb invece di \u00abCerca\u00bb
@@ -2517,7 +2510,6 @@ Subscription.menu.reset=Ripristina lo stato iniziale
ConfigView.section.Subscriptions=Iscrizioni
subscriptions.config.maxresults=Numero massimo di risultati mantenuti per ogni iscrizione [0: illimitati]
v3.activity.button.readall=Segna tutti come letti
-ConfigView.interface.start.library=Avvia nella Libreria
TableColumn.header.activityNew=Nuovo
TableColumn.header.activityType=Tipo
TableColumn.header.activityText=Messaggio
@@ -2527,7 +2519,6 @@ Subscription.menu.resetauth=Ripristina i dettagli di autenticazione
Search.menu.engines=Template
Wizard.Subscription.title=Iscriviti
Wizard.Subscription.optin.title=Abilita le iscrizioni
-#what you've watched? Discover more with a single click...
Wizard.Subscription.subscribe.title=Iscrizioni disponibili
Wizard.Subscription.create.title=Crea una nuova iscrizione
Button.search=Cerca
@@ -2598,8 +2589,6 @@ TableColumn.header.azsubs.ui.column.subs_link.info=Associato alle iscrizioni
Button.deleteContent.fromLibrary=Rimuovi dalla libreria
Button.deleteContent.fromComputer=Elimina dal computer
v3.deleteContent.message=\nSi vuole eliminare \u00ab%1\u00bb dal computer o solo rimuoverlo dalla libreria di Vuze?
-v3.library.infobar.text1=Si sta cercando l'interfaccia avanzata?
-v3.library.infobar.text2=Usare il pulsante per il cambio dell'interfaccia nella barra degli strumenti in alto.
v3.MainWindow.menu.view.toolbartext=Descrizioni nella barra degli strumenti
v3.MainWindow.menu.view.asSimpleList=Lista semplice
v3.MainWindow.menu.view.asAdvancedList=Lista avanzata
@@ -2628,6 +2617,7 @@ azbuddy.ui.menu.cat.set=Inserisci le categorie
azbuddy.ui.menu.cat.set_msg=Lista di categorie separata da spazio, o \u00abAll\u00bb
azbuddy.ui.menu.cat_subs=Iscriviti
subs.prop.update_period=Periodo di aggiornamento
+azbuddy.enable_cat_pub=Categorie pubbliche a cui TUTTI gli amici possono iscriversi (separate da \u00ab,\u00bb)
v3.dialog.cnclose.title=%1 chiuso
v3.dialog.cnclose.subtitle=Notifica
v3.dialog.cnclose.info1=\u00c8 stata chiusa una rete in HD.
@@ -2878,6 +2868,7 @@ devices.od.turnon.learn=Maggiori informazioni >
devices.od=Programma per il download non in linea
webui.pairingenable=Abilita l'associazione
webui.group.access=Controllo dell'accesso
+ConfigView.section.Pairing=Accoppiamento
pairing.accesscode=Codice di accesso
pairing.ac.getnew=Assegna un nuovo codice di accesso
pairing.ac.getnew.create=Crea
@@ -2898,94 +2889,30 @@ pairing.status.disabled=Disabilitato
pairing.view.registered=Fare clic per vedere i dettagli della registrazione attuale
webui.pairing.info.n=L'associazione \u00e8 disabilitata, vedere le opzioni in Connessione->Associazione per maggiori informazioni su questa funzione.
webui.pairing.info.y=L'associazione \u00e8 abilitata, vedere le opzioni in Connessione->Associazione per maggiori informazioni.
+webui.enable=Abilita (*)
+ConfigView.section.rss=RSS locali, ecc.
subscriptions.rss.enable=Crea feed RSS dalle sottoscrizioni
-# The remaining keys were not in MessagesBundle.properties
-v3.activity.share-content.no-msg=%1 ha condiviso %2 con te
-v3.Share.add.buddy.existing=Amici esistenti:
-v3.buddy.prop.pks=Conteggio della chiave pubblica
-v3.activity.buddy-request.accept=Accetta
-v3.buddies.faq=Maggiori informazioni
-v3.MainWindow.button.sendtofriend=Condividi torrent
-login.optional.message=\u00c8 necessario aver eseguito l'accesso per usare questa funzione
-TableColumn.header.videoLength=Lunghezza del video
-v3.Share.wizard.title=Assistente alla condivisione
-v3.MainWindow.button.newtag.share=Nuovo! Condividi il torrent
-azbuddy.ui.dialog.disable.title=Disabilitazione del plugin Amici
-TableColumn.header.Info.info=Pulsante che visualizza la pagina dei dettagli del contenuto multimediale di Vuze
-v3.activity.share-content=%1 ha condiviso %2 con te. %3 <A HREF="%4" TITLE="%5">dice...</A>
-v3.Share.header.message=Condividi con gli amici attuali, o aggiungi nuovi amici.
-MainWindow.menu.community.add_friends=&Aggiungi amici
-v3.Share.header=Condividi
-message.confirm.invite.error=Ahi! C'\u00e8 stato un errore in questa richiesta. Sono presenti errori in uno o pi\u00f9 inviti.
-v3.activity.header.friend.requests.fromyou=Richieste di amicizia - inviate
-v3.MainWindow.menu.view.buddies-viewer=Barra degli amici
-v3.activity.header.rating.reminders=Promemoria per le votazioni
-message.intro.friends=Aggiungi amici.\nCondividi torrent.\nScarica pi\u00f9 velocemente.
-v3.AddFriends.header.message=Aggiungere amici per condividere i torrent preferiti
-v3.Share.add.edit.buddy=Aggiungi/Modifica gli amici
-v3.buddies.disabled.title=Plugin degli amici disabilitato
-ConfigView.section.security.vuze.login=\u00c8 necessario effettuare l'accesso a Vuze per usare questa funzione
-v3.chat.wrongversion=%1 usa una versione di Vuze che non supporta la chat.
-v3.AddFriends.header=Aggiungi amici
-message.prompt.add.friends=Selezionare degli amici dalla barra laterale (in basso a sinistra)
-v3.Share.send.now=Invia
-v3.Share.add.buddy.all=Condividi con tutti
-v3.Share.buddies=Amici
-v3.AddFriends.wizard.title=Assistente all'aggiunta di amici
-message.confirm.share.singular=Ottimo! La tua richiesta di condivisione di un torrent \u00e8 stata inviata.
-v3.activity.buddy-request=\u00c8 presente una richiesta di amicizia da %1.
-v3.Share.invite.buddies.prompt=Invita altri amici con cui condividere
-TableColumn.header.RateIt.info=Per votare il contenuto multimediale di Vuze
-v3.buddies.remove.buddy.dialog.title=Rimuovi
-v3.buddy.prop.catin=Categorie dell'amico disponibili
-v3.buddies.online=In linea (%1)
-message.confirm.share.invite.singular=Ottimo! La richiesta di connessione e condivisione \u00e8 stata inviata. Puoi dire all'amico di accettarla.
-TableColumn.header.Quality.info=Qualit\u00e0 del contenuto multimediale di Vuze, ad esempio HD o SD
-v3.MainWindow.menu.publish.about=Informazioni sulla pubblicazione...
-v3.Share.add.buddy.new=Nuovi amici:
-v3.buddies.remove=Rimuovi amico
-v3.MainWindow.menu.publish.mine=Contenuti multimediali pubblicati
-v3.Share.add.buddy=Aggiungi amici
-azbuddy.enable_cat_pub=Categorie pubbliche a cui TUTTI gli amici possono iscriversi (separate da \u00ab,\u00bb)
-v3.buddies.dnd.info.dialog.title=Condivisione attraverso il trascinamento
-v3.buddies.dnd.info.dialog.remember=Non visualizzare ancora questo messaggio
-v3.Share.disclaimer.link=Maggiori informazioni
-message.confirm.invite.singular=Ottimo! La richiesta di amicizia \u00e8 stata inviata. Puoi dire all'amico di accettarla.
-v3.buddy.prop.catout=Le tue categorie disponibili per i tuoi amici
-v3.activity.buddy-linkup=Si \u00e8 ora amici di %1.
-v3.activity.header.friend.requests.accepted=Richieste di amicizia - accettate
-v3.buddy.menu.viewprofile=Visualizza profilo
-TableColumn.header.Info=Informazioni
-v3.activity.buddy-invited.multi=La richiesta di amicizia \u00e8 stata inviata a:\n%1
-TableColumn.header.Rating_global.info=La valutazione globale per questo contenuto multimediale
-v3.buddy.prop.un=Nome utente
-v3.buddy.prop.dn=Nome visualizzato
-v3.buddies.dnd.info.dialog.text=\u00c8 stata inziata una condivisione attraverso il trascinamento. Si stanno preparando i contenuti multimediali per la condivisione, e la schermata di condivisione verr\u00e0 aperta quando saranno pronti.\n\n\u00c8 necessario tenere aperto Vuze affinch\u00e9 l'amico riceva i contenuti.\n<A HREF="http://faq.vuze.com/?View=entry&EntryID=267">Ulteriori informazioni</A> (in inglese).
-v3.Share.optional.message=Messaggio opzionale inviato come notifica (massimo 140 caratteri):
-message.confirm.share.invite.plural=Ottimo! Le richieste di connessione e condivisione sono state inviate. Puoi dire ai tuoi amici di accettarle.
-v3.activity.buddy-invited=La richiesta di amicizia \u00e8 stata inviata a %1.
-v3.buddies.disabled.text._mac=Il plugin degli amici \u00e8 stato disabilitato, impedendo di poter condividere o accettare torrent o richieste di amicizia. Si possono cambiare le impostazoni nella finestra Configurazione.
-v3.buddy.set.catin=Iscriviti alla categoria dell'amico
-message.confirm.invite.plural=Ottimo! Le richieste di amicizia sono state inviate. Puoi dire ai tuoi amici di accettarle.
-azbuddy.ui.dialog.disable.text=La disabilitazione del plugin Amici impedir\u00e0 di condividere torrent usando la barra degli amici nella parte bassa della finestra e di modificare la lista degli amici.\n\nDisabilitare gli amici?
-v3.buddy.prop.on=In linea
-v3.buddy.prop.pc=Messaggi della chat in attesa
-v3.Share.invitees=Invitati
-v3.buddies.remove.buddy.dialog.text=Rimuovere l'amico %1?
-v3.activity.header.share.requests=Richieste di condivisione di torrent
-TableColumn.header.videoLength.info=Durata del contenuto video di Vuze
-v3.Share.menu=Condividi contenuti multimediali
-v3.buddies.disabled.text._windows=Il plugin degli amici \u00e8 stato disabilitato, impedendo di poter condividere o accettare torrent o richieste di amicizia. Si possono cambiare le impostazoni nella finestra Opzioni.
-v3.buddy.set.catout=Permetti all'amico di iscriversi alla categoria
-v3.MainWindow.menu.publish.new=Pubblica contenuti multimediali
-v3.activity.header.friend.requests.foryou=Richieste di amicizia - ricevute
-v3.buddy.prop.lupd=Ultimo aggiornamento
-v3.buddy.menu.remove=Rimuovi amico
-v3.chat.offline=%1 non \u00e8 in linea, ricever\u00e0 il messaggio quando torner\u00e0 disponibile.
-message.confirm.share.plural=Ottimo! Le tue richieste di condivisione di un torrent sono state inviate.
-v3.buddies.add.to.share=Aggiungi amico alla condivisione
-TableColumn.header.Rating_global=Valutazione
-v3.activity.buddy-request.multi=\u00c8 presente una richiesta di amicizia (n\u00b0%3) da %1.
-v3.MainWindow.button.share=Condividi contenuti multimediali
-v3.buddies.friends=Amici
-v3.Share.disclaimer=Nota: sia il contenuto multimediale condiviso sia questo messaggio opzionale saranno criptati.
+device.tivo.enable=Abilita il supporto a TiVo
+Button.removeAll=Rimuovi tutto
+label.rename=Rinomina %1
+RCM.column.rc_rank=Punteggio
+RCM.column.rc_created=Creato
+RCM.column.rc_lastseen=Visto per l'ultima volta
+RCM.column.rc_level=Livello
+rcm.view.heading=Discovery nello swarm
+rcm.config.enabled=Abilita
+rcm.config.max_results=Risultati massimi
+rcm.config.max_level=Livello massimo
+pairing.server.warning.title=Messaggio del server sull'accoppiamento
+wizard.webseedseditor.edit.title=Editor dei seed HTTP
+wizard.webseedseditor.edit.newseed=Nuovo seed
+MyTorrentsView.menu.editWebSeeds=Modifica seed HTTP
+ClientStats.title.full=Statistiche del client
+ClientStats.column.count=Numero
+Scrape.status.cached=Scrape in cache
+network.ipv6.enable.support=Abilita supporto IPv6
+ConfigView.section.plugins.magnetplugin=Gestore delle Magnet URI
+MagnetPlugin.use.lookup.service=Usa il servizio di lookup secondario di Vuze se il lookup dei magnet attraverso il DHT non ha successo
+MagnetPlugin.report.secondarylookup=Provo il servizio di lookup secondario
+MagnetPlugin.report.secondarylookup.ok=Lookup secondario riuscito
+MagnetPlugin.report.secondarylookup.fail=Lookup secondario non riuscito: nessuna sorgente trovata
diff --git a/org/gudy/azureus2/internat/MessagesBundle_iw_IL.properties b/org/gudy/azureus2/internat/MessagesBundle_iw_IL.properties
index f006d23..06eb5eb 100644
--- a/org/gudy/azureus2/internat/MessagesBundle_iw_IL.properties
+++ b/org/gudy/azureus2/internat/MessagesBundle_iw_IL.properties
@@ -1,3 +1,4 @@
+#There is a plugin to help with internationalizing these bundles at http://azureus.sourceforge.net/plugin_list.php
MainWindow.menu.file.open.torrent=\u05e7\u05d5\u05d1\u05e5 \u05d8\u05d5\u05e8\u05e0\u05d8
Main.parameter.maxUploads=\u05de\u05e1\u05e4\u05e8 \u05d4\u05e2\u05dc\u05d0\u05d5\u05ea \u05de\u05d9\u05e8\u05d1\u05d9
Main.parameter.maxSpeed=\u05de\u05d4\u05d9\u05e8\u05d5\u05ea \u05d4\u05d5\u05e8\u05d3\u05d4 \u05de\u05d9\u05e8\u05d1\u05d9\u05ea - \u05d1\u05d9\u05d9\u05d8\u05d9\u05dd \u05dc\u05e9\u05e0\u05d9\u05d4
@@ -354,7 +355,6 @@ MyTorrentsView.menu.removeand.deletedata=\u05de\u05d7\u05e7 \u05de\u05d9\u05d3\u
MyTorrentsView.menu.removeand.deleteboth=\u05de\u05d7\u05e7 \u05d4\u05db\u05dc
deletedata.title=!!! \u05d6\u05d4\u05d9\u05e8\u05d5\u05ea !!!
deletedata.message1=:\u05d0\u05ea\u05d4 \u05e2\u05d5\u05de\u05d3 \u05dc\u05de\u05d7\u05d5\u05e7 \u05d0\u05ea \u05d4\u05de\u05d9\u05d3\u05e2 \u05de
-deletedata.message2=\n?\u05d4\u05d0\u05dd \u05d1\u05e8\u05e6\u05d5\u05e0\u05da \u05dc\u05d4\u05de\u05e9\u05d9\u05da
MainWindow.menu.file.configure=\u05d0\u05e9\u05e3 \u05d4\u05d4\u05d2\u05d3\u05e8\u05d5\u05ea
configureWizard.title=\u05d0\u05e9\u05e3 \u05d4\u05d4\u05d2\u05d3\u05e8\u05d5\u05ea
configureWizard.welcome.title=\u05d1\u05e8\u05d5\u05db\u05d9\u05dd \u05d4\u05d1\u05d0\u05d9\u05dd \u05dc\u05d0\u05e9\u05e3 \u05d4\u05d4\u05d2\u05d3\u05e8\u05d5\u05ea \u05e9\u05dc \u05d0\u05d6\u05d5\u05e8\u05d0\u05d5\u05e1
@@ -481,7 +481,6 @@ MyTorrentsView.menu.host.error.title=\u05d0\u05d9\u05e8\u05d5\u05d7 \u05d8\u05d5
MyTorrentsView.menu.host.error.message=\u05d4\u05d8\u05e2\u05d5\u05ea \u05d4\u05d1\u05d0\u05d4 \u05d4\u05ea\u05e8\u05d7\u05e9\u05d4 \u05d1\u05de\u05d4\u05dc\u05da \u05d0\u05d9\u05e8\u05d5\u05d7 \u05d4\u05d8\u05d5\u05e8\u05d8\u05e0
ConfigView.section.tracker=\u05d8\u05e8\u05e7\u05e8
ConfigView.section.tracker.ip=\u05db\u05ea\u05d5\u05d1\u05ea \u05d7\u05d9\u05e6\u05d5\u05e0\u05d9\u05ea \u05e9\u05dc \u05d8\u05e8\u05e7\u05e8
-MainWindow.menu.help.faq=\u05e9\u05d0\u05dc\u05d5\u05ea \u05d5\u05ea\u05e9\u05d5\u05d1\u05d5\u05ea
ConfigView.section.style.enableXPStyle=(\u05e0\u05d3\u05e8\u05e9 \u05d0\u05d9\u05ea\u05d7\u05d5\u05dc) XP \u05d0\u05e4\u05e9\u05e8 \u05de\u05e8\u05d0\u05d4
ConfigView.section.tracker.checkip=\u05d1\u05d3\u05d5\u05e7 \u05db\u05ea\u05d5\u05d1\u05ea..
ipCheckerWizard.title=\u05d0\u05e9\u05e3 \u05d1\u05d3\u05d9\u05e7\u05ea \u05d0\u05d9\u05d9.\u05e4\u05d9.
@@ -512,7 +511,6 @@ splash.initializeGui=\u05de\u05d0\u05ea\u05d7\u05dc \u05d7\u05dc\u05d5\u05df \u0
splash.openViews=\u05d8\u05d5\u05e2\u05df \u05ea\u05e6\u05d5\u05d2\u05d5\u05ea
splash.plugin=\u05d8\u05d5\u05e2\u05df \u05ea\u05d5\u05e1\u05e4\u05ea :
configureWizard.nat.tooManyPorts=(\u05e4\u05d5\u05e8\u05d8\u05d9\u05dd \u05e8\u05d1\u05d9\u05dd \u05de\u05d3\u05d9 \u05dc\u05d1\u05d7\u05d9\u05e0\u05d4 (\u05de\u05e7\u05e1\u05d9\u05de\u05d5\u05dd 9
-PeerSocket.unknown=\u05dc\u05d0 \u05d9\u05d3\u05d5\u05e2
MyTorrentsView.menu.publish=\u05e4\u05e8\u05e1\u05dd..
MyTrackerView.status.published=\u05e4\u05d5\u05e8\u05e1\u05dd
MyTrackerView.completed=\u05d4\u05e1\u05ea\u05d9\u05d9\u05dd
@@ -522,9 +520,15 @@ ConfigView.label.movetorrent=\u05d4\u05e2\u05d1\u05e8 \u05e7\u05d1\u05e6\u05d9 \
ConfigView.section.file.decoder.label=\u05e7\u05d9\u05d3\u05d5\u05d3 \u05d1\u05e8\u05d9\u05e8\u05ea \u05de\u05d7\u05d3\u05dc \u05e2\u05d1\u05d5\u05e8 \u05d8\u05d5\u05e8\u05e0\u05d8\u05d9\u05dd \u05db\u05d0\u05e9\u05e8 \u05e0\u05d3\u05e8\u05e9\u05ea \u05d1\u05d7\u05d9\u05e8\u05d4
ConfigView.section.file.decoder.nodecoder=\u05db\u05dc\u05d5\u05dd
ConfigView.section.tracker.publicenable=\u05d0\u05e4\u05e9\u05e8 \u05d8\u05d5\u05e8\u05e0\u05d8\u05d9\u05dd \u05d7\u05d9\u05e6\u05d5\u05e0\u05d9\u05d9\u05dd
+#
+# Tooltips
+#
GeneralView.label.status.pieces_available.tooltip=\u05de\u05e6\u05d9\u05d2 \u05d0\u05ea \u05de\u05e1\u05e4\u05e8 \u05d4\u05d7\u05dc\u05e7\u05d9\u05dd \u05d4\u05d6\u05de\u05d9\u05e0\u05d9\u05dd \u05e9\u05dc \u05db\u05dc \u05d7\u05dc\u05e7\n\u05d0\u05dd \u05d4\u05de\u05e1\u05e4\u05e8 \u05de\u05d9\u05de\u05d9\u05df \u05e7\u05d8\u05df \u05de-1, \u05d0\u05d6\u05d5\u05e8\u05d0\u05d5\u05e1 \u05dc\u05d0 (\u05de\u05e6\u05d0\u05d4 \u05e2\u05d5\u05ea\u05e7 \u05e9\u05dc\u05dd \u05e9\u05dc \u05d4\u05e7\u05d5\u05d1\u05e5 (\u05d5\u05d9\u05d9\u05ea\u05db\u05df \u05e9\u05d4\u05d4\u05d5\u05e8\u05d3\u05d4 \u05dc\u05d0 \u05ea\u05d5\u05db\u05dc \u05dc\u05d4\u05e1\u05ea\u05d9\u05d9\u05dd
GeneralView.label.trackerurl.tooltip=\u05dc\u05d7\u05e5 \u05db\u05d3\u05d9 \u05dc\u05d4\u05e2\u05ea\u05d9\u05e7 \u05d0\u05ea \u05d4\u05db\u05ea\u05d5\u05d1\u05ea \u05e9\u05dc \u05d4\u05d4\u05db\u05e8\u05d6\u05d4 \u05dc\u05dc\u05d5\u05d7
GeneralView.label.trackerurlopen.tooltip=\u05dc\u05d7\u05e5 \u05dc\u05de\u05e2\u05d1\u05e8 \u05dc\u05d3\u05e3 \u05d4\u05d1\u05d9\u05ea \u05e9\u05dc \u05d4\u05d8\u05e8\u05e7\u05e8
+#
+# 2.0.4.4
+#
ConfigView.section.style.guiUpdate=\u05e2\u05d3\u05db\u05df \u05d0\u05ea \u05d4\u05de\u05de\u05e9\u05e7 \u05d4\u05d2\u05e8\u05e4\u05d9 \u05db\u05dc
ConfigView.section.style.graphicsUpdate=?\u05e2\u05d3\u05db\u05df \u05ea\u05e6\u05d5\u05d2\u05d4 \u05d2\u05e8\u05e4\u05d9\u05ea \u05db\u05dc \u05db\u05de\u05d4 \u05e2\u05d3\u05db\u05d5\u05e0\u05d9\u05dd
ConfigView.section.style.reOrderDelay=\u05e1\u05d3\u05e8 \u05de\u05d7\u05d3\u05e9 \u05d8\u05d1\u05dc\u05d0\u05d5\u05ea \u05db\u05dc \u05db\u05de\u05d4 \u05e2\u05d3\u05db\u05d5\u05e0\u05d9\u05dd \u05e9\u05dc \u05de\u05de\u05e9\u05e7 \u05d2\u05e8\u05e4\u05d9?
@@ -658,6 +662,9 @@ health.explain.yellow=\u05d4\u05d8\u05e8\u05e7\u05e8 \u05e4\u05d5\u05e2\u05dc, \
health.explain.green=\u05d4\u05db\u05dc \u05e4\u05d5\u05e2\u05dc \u05d1\u05e1\u05d3\u05e8
ConfigView.section.style.alwaysRefreshMyTorrents=\u05ea\u05de\u05d9\u05d3 \u05e8\u05e2\u05e0\u05df \u05d0\u05ea \u05d4\u05d8\u05d5\u05e8\u05e0\u05d8\u05d9\u05dd \u05e9\u05dc\u05d9
ConfigView.section.style.alwaysRefreshMyTorrents.tooltip=(\u05d0\u05e4\u05e9\u05e8\u05d5\u05ea \u05d6\u05d5 \u05ea\u05e8\u05e2\u05e0\u05df \u05d0\u05ea \u05ea\u05e6\u05d5\u05d2\u05ea \u05d4\u05d8\u05d5\u05e8\u05e0\u05d8\u05d9\u05dd \u05d0\u05e4\u05d9\u05dc\u05d5 \u05db\u05d0\u05e9\u05e8 \u05dc\u05d0 \u05de\u05d5\u05e6\u05d2\u05ea (\u05e9\u05d9\u05de\u05d5\u05e9\u05d9 \u05dc\u05ea\u05d5\u05e4\u05e1\u05d5\u05ea \u05de\u05e1\u05d5\u05d9\u05de\u05d5\u05ea \u05e9\u05dc mirc
+#
+#2.0.7.0
+#
security.certtruster.title=\u05d0\u05d6\u05d4\u05e8\u05ea \u05d0\u05d9\u05e9\u05d5\u05e8 \u05d0\u05d1\u05d8\u05d7\u05d4
security.certtruster.intro=\u05d0\u05d9\u05e9\u05d5\u05e8 \u05d4\u05d1\u05d8\u05d9\u05d7\u05d5\u05ea \u05d4\u05d5\u05e0\u05e4\u05e7 \u05e2"\u05d9 \u05d7\u05d1\u05e8\u05d4 \u05e9\u05e2\u05dc\u05d9\u05d4 \u05d0\u05ea\u05d4 \u05dc\u05d0 \u05e1\u05d5\u05de\u05da
security.certtruster.resource=\u05de\u05e9\u05d0\u05d1 :
@@ -710,6 +717,9 @@ ConfigView.section.style.dropdiraction=\u05d0\u05e4\u05e9\u05e8\u05d5\u05ea \u05
ConfigView.section.style.dropdiraction.opentorrents=\u05e4\u05ea\u05d7 \u05d8\u05d5\u05e8\u05e0\u05d8\u05d9\u05dd
ConfigView.section.style.dropdiraction.sharefolder=\u05e9\u05ea\u05e3 \u05ea\u05d9\u05e7\u05d9\u05d9\u05d4
ConfigView.section.style.dropdiraction.sharefoldercontents=\u05e9\u05ea\u05e3 \u05ea\u05d5\u05db\u05df
+#
+# 2.0.7.x
+#
Categories.all=\u05d4\u05db\u05dc
Categories.uncategorized=\u05dc\u05d0 \u05de\u05e7\u05d5\u05d8\u05dc\u05d2
CategoryAddWindow.message=\u05d4\u05db\u05e0\u05e1 \u05e9\u05dd \u05e7\u05d8\u05d2\u05d5\u05e8\u05d9\u05d4 \u05d7\u05d3\u05e9\u05d4
@@ -780,7 +790,6 @@ ConfigView.text.minutes=\u05d3\u05e7\u05d5\u05ea
ConfigView.text.neverIgnore=\u05d0\u05e3 \u05e4\u05e2\u05dd \u05d0\u05dc \u05ea\u05ea\u05e2\u05dc\u05dd
ConfigView.text.any=\u05db\u05dc\u05e9\u05d4\u05d5
DownloadManager.error.datamissing=\u05de\u05d9\u05d3\u05e2 \u05d7\u05e1\u05e8
-iconBar.queue.tooltip=\u05ea\u05d5\u05e8
MainWindow.menu.file.open.torrentforseeding=(\u05e7\u05d5\u05d1\u05e5 \u05d8\u05d5\u05e8\u05e0\u05d8 (\u05dc\u05d4\u05e4\u05e6\u05d4
MainWindow.menu.language.refresh=\u05e8\u05e2\u05e0\u05df
ManagerItem.forced=\u05de\u05d0\u05d5\u05dc\u05e5
@@ -847,6 +856,9 @@ SpeedView.stats.downloaded=\u05d9\u05e8\u05d3
SpeedView.stats.uploaded=\u05e2\u05dc\u05d4
SpeedView.stats.uptime=(\u05d6\u05de\u05df \u05e4\u05e2\u05d5\u05dc\u05d4 (\u05e9\u05e2\u05d5\u05ea
AutoMigration.useralert=\u05ea\u05d5\u05e6\u05d0\u05d5\u05ea \u05d4\u05e2\u05d1\u05e8\u05d4 \u05d0\u05d5\u05d8\u05d5\u05de\u05d8\u05d9\u05ea \u05e9\u05dc \u05e7\u05d1\u05e6\u05d9\u05dd/\u05ea\u05d9\u05e7\u05d9\u05d5\u05ea :\n\n%1\n%2 \u05db\u05dc \u05ea\u05e7\u05dc\u05d4 \u05d9\u05e9 \u05dc\u05d4\u05e2\u05d1\u05d9\u05e8 \u05d1\u05e6\u05d5\u05e8\u05d4 \u05d9\u05d3\u05e0\u05d9\u05ea
+#
+# > 2.0.8.0
+#
OpenTorrentWindow.title=(\u05e4\u05ea\u05d7 \u05d8\u05d5\u05e8\u05e0\u05d8(\u05d9\u05dd
OpenTorrentWindow.message=\u05e0\u05d9\u05e1\u05d9\u05d5\u05e0\u05d9
OpenTorrentWindow.addFiles=\u05d4\u05d5\u05e1\u05e3 \u05e7\u05d1\u05e6\u05d9\u05dd
@@ -927,6 +939,8 @@ download.removerules.unauthorised=Automatically remove unauthorised torrents
ConfigView.section.server.enableudp=Enable UDP tracker client protocol.
ConfigView.section.tracker.publishenabledetails=Publish torrent file and peer details
MyTrackerView.badnat=\u05d1\u05e2\u05d9\u05d9\u05ea \u05ea\u05e7\u05e9\u05d5\u05e8\u05ea
+#Removed
+#MyTorrentsView.menu.setSpeed=Set Upload Speed
MainWindow.menu.transfers=\u05d4\u05e2\u05d1\u05e8\u05d5\u05ea
MainWindow.menu.transfers.startalltransfers=\u05d4\u05ea\u05d7\u05dc \u05d4\u05db\u05dc
MainWindow.menu.transfers.stopalltransfers=\u05e2\u05e6\u05d5\u05e8 \u05d4\u05db\u05dc
@@ -981,18 +995,16 @@ updater.progress.window.title=\u05d1\u05d8\u05dc \u05e4\u05e2\u05d5\u05dc\u05d5\
Button.abort=\u05d1\u05d8\u05dc
ConfigView.label.overrideip=\u05e2\u05e7\u05d5\u05e3 \u05db\u05ea\u05d5\u05d1\u05ea \u05d0\u05d9\u05d9.\u05e4\u05d9. \u05e9\u05e0\u05e9\u05dc\u05d7\u05ea \u05dc\u05d8\u05e8\u05e7\u05e8\n - \u05ea\u05e9\u05ea\u05de\u05e9 \u05e8\u05e7 \u05d0\u05dd \u05d0\u05ea\u05d4 \u05d9\u05d5\u05d3\u05e2 \u05dc\u05de\u05d4 \u05d1\u05d0\u05de\u05ea \u05d0\u05ea\u05d4 \u05e6\u05e8\u05d9\u05da \u05d6\u05d0\u05ea
ConfigView.label.overrideip.tooltip=Inform the tracker of a different IP address than the one outgoing packets come from. Leave blank not to use the option.
+#file can be a URL or a path in the jar
diagnostics.log_found=Vuze did not shutdown tidily. Please check %1 for diagnostic log files and consider reporting them to the Vuze team if this is the result of an application error.
ConfigView.section.logging.log0type=\u05de\u05d9\u05d3\u05e2
+# %1 = "in kbps" or ""; %2 = "upload" or "download"
OpenTorrentWindow.torrentLocation=Torrent Files:
Button.moveUp=\u05d4\u05d6\u05d6 \u05de\u05e2\u05dc\u05d4
Button.moveDown=\u05d4\u05d6\u05d6 \u05dc\u05de\u05d8\u05d4
-# The remaining keys were not in MessagesBundle.properties
-ConfigView.section.file.check_piece_limit.explain=If you have a slow CPU such that hash calculations lag behind disk writing (numerous complete pieces in pieces view), limiting check queue length may decrease memory usage
-ConfigView.section.file.write_block_limit.explain=If you have slow disk write performance such that disk writing is slower than download speed (numerous red blocks in pieces view), limiting write queue length may decrease memory usage
-ConfigView.section.file.check_piece_limit=Maximum outstanding check pieces\n[0: unlimited]. Piece size depends on torrent
-ConfigView.section.file.write_block_limit=Maximum outstanding disk block writes\n[0: unlimited]. Block size %1
-configureWizard.nat.already_listening=\u05dc\u05d0 \u05de\u05e1\u05d5\u05d2\u05dc \u05dc\u05d1\u05d7\u05d5\u05df \u05d0\u05ea \u05d4\u05e4\u05d5\u05e8\u05d8 \u05de\u05e9\u05d5\u05dd \u05e9\u05d4\u05d5\u05d0\n\u05e0\u05de\u05e6\u05d0 \u05d1\u05e9\u05d9\u05de\u05d5\u05e9. \u05d0\u05e0\u05d0 \u05e2\u05e6\u05d5\u05e8 \u05d0\u05ea \u05db\u05dc \u05d4\u05d8\u05d5\u05e8\u05e0\u05d8\u05d9\u05dd \u05d4\u05e4\u05e2\u05d9\u05dc\u05d9\u05dd \u05d5\u05d4\u05e4\u05e2\u05dc \u05de\u05d7\u05d3\u05e9 \u05d0\u05ea \u05d0\u05d6\u05d5\u05e8\u05d0\u05d5\u05e1.\n\u05d5\u05d0\u05d6 \u05d4\u05e4\u05e2\u05dc \u05d1\u05d3\u05d9\u05e7\u05d4 \u05d6\u05d5 \u05e9\u05d5\u05d1.
-SelectorGuard.repairmessage=If you get this message repeatedly, and you are sure there is nothing wrong with your\nnetwork setup, and you are running java 1.4 series, then you have likely encountered\na JRE bug, and should upgrade to the newer java 1.5 (5.0) series.
-MyTorrentsView.menu.setSpeed=\u05e7\u05d1\u05e2 \u05de\u05d4\u05d9\u05e8\u05d5\u05ea
-ConfigView.label.oldpollingstyle=Use alternative socket polling - Increases CPU usage, but may help with network disconnects
+# > 2402
+# Used for peers which we can't determine.
+PeerSocket.unknown=\u05dc\u05d0 \u05d9\u05d3\u05d5\u05e2
+iconBar.queue.tooltip=\u05ea\u05d5\u05e8
+MainWindow.menu.help.faq=\u05e9\u05d0\u05dc\u05d5\u05ea \u05d5\u05ea\u05e9\u05d5\u05d1\u05d5\u05ea
MainWindow.menu.help.donate=\u05ea\u05e8\u05d5\u05dd
diff --git a/org/gudy/azureus2/internat/MessagesBundle_ja_JP.properties b/org/gudy/azureus2/internat/MessagesBundle_ja_JP.properties
index c8cb0df..a8ce490 100644
--- a/org/gudy/azureus2/internat/MessagesBundle_ja_JP.properties
+++ b/org/gudy/azureus2/internat/MessagesBundle_ja_JP.properties
@@ -50,7 +50,6 @@ MainWindow.status.latestversion=\u6700\u65b0
MainWindow.status.latestversion.clickupdate=\u30a2\u30c3\u30d7\u30c7\u30fc\u30c8
MainWindow.status.unknown=\u4e0d\u660e
MainWindow.status.checking=\u78ba\u8a8d\u4e2d
-TableColumn.header.mytorrents=Torrent
TableColumn.header.name=\u540d\u524d
TableColumn.header.size=\u30b5\u30a4\u30ba
TableColumn.header.done=\u72b6\u6cc1 (%)
@@ -304,7 +303,6 @@ IrcView.actionnotsupported=\u30a2\u30af\u30b7\u30e7\u30f3\u306f\u30b5\u30dd\u30f
IrcView.clientsconnected=\u30e6\u30fc\u30b6
IrcView.noticefrom=\u6ce8\u610f:
IrcView.errormsg=Wrong Syntax on /msg\uff1a/msg user text
-IrcView.help=Valid commands are :\n . /help : displays this message\n . /nick | /name : changes your name \n . /me action : sends an action \n . /msg nick message : sends a private message to <nick>\n . /r message : reply to last private message\n . /join #channelB (do not click here, it's an example) : changes current channel to channelB
PasswordWindow.title=Vuze \u306f\u30ed\u30c3\u30af\u3055\u308c\u3066\u3044\u307e\u3059
PasswordWindow.passwordprotected=Vuze \u306f\u30d1\u30b9\u30ef\u30fc\u30c9\u306b\u3088\u3063\u3066\u4fdd\u8b77\u3055\u308c\u3066\u3044\u307e\u3059\u3002\nVuze \u306e\u30a6\u30a4\u30f3\u30c9\u30a6\u3092\u8868\u793a\u3059\u308b\u306b\u306f\u3001\u30d1\u30b9\u30ef\u30fc\u30c9\u3092\u5165\u529b\u3057\u3066\u304f\u3060\u3055\u3044\uff1a
Button.ok=OK
@@ -313,7 +311,6 @@ TrackerChangerWindow.newtracker=\u65b0\u3057\u3044\u30c8\u30e9\u30c3\u30ab\u30fc
PeersView.discarded=\u7834\u68c4
PeersView.discarded.info=\uff08\u4f55\u3089\u304b\u306e\u7406\u7531\u3067\uff09\u5fc5\u8981\u3068\u3057\u306a\u3044\u306e\u306b\u53d7\u4fe1\u3057\u3001\u7834\u68c4\u3055\u308c\u305f\u30c7\u30fc\u30bf
discarded=\u3092\u7834\u68c4
-TableColumn.header.#=No.
MyTorrentsView.menu.move=\u79fb\u52d5
MyTorrentsView.menu.moveUp=\u4e0a\u3078
MyTorrentsView.menu.moveDown=\u4e0b\u3078
@@ -382,7 +379,6 @@ MyTorrentsView.menu.removeand.deletedata=\u30c7\u30fc\u30bf\u30d5\u30a1\u30a4\u3
MyTorrentsView.menu.removeand.deleteboth=\u4e21\u65b9\u3068\u3082
deletedata.title=\u8b66\u544a
deletedata.message1=\u6b21\u306e\u30c7\u30fc\u30bf\u3092\u524a\u9664\u3057\u3088\u3046\u3068\u3057\u3066\u3044\u307e\u3059:\n
-deletedata.message2=\n\u524a\u9664\u3057\u3066\u3082\u3088\u308d\u3057\u3044\u3067\u3059\u304b\uff1f
MainWindow.menu.file.configure=\u8a2d\u5b9a\u30a6\u30a3\u30b6\u30fc\u30c9...
configureWizard.title=\u8a2d\u5b9a\u30a6\u30a3\u30b6\u30fc\u30c9
configureWizard.welcome.title=Vuze \u8a2d\u5b9a\u30a6\u30a3\u30b6\u30fc\u30c9\u3078\u3088\u3046\u3053\u305d
@@ -521,7 +517,6 @@ ConfigView.section.tracker=\u30c8\u30e9\u30c3\u30ab\u30fc
ConfigView.section.tracker.pollinterval=\u30c8\u30e9\u30c3\u30ab\u30fc\u3078\u306e\u554f\u3044\u5408\u308f\u305b\u9593\u9694\uff08\u79d2\uff09
ConfigView.section.tracker.publishenable=\u30c8\u30e9\u30c3\u30ab\u30fc\u306e\u8a73\u7d30\u3092 "<tracker_url>" \u306b\u516c\u958b
ConfigView.section.tracker.ip=\u30c8\u30e9\u30c3\u30ab\u30fc\u306e\u30b0\u30ed\u30fc\u30d0\u30eb IP \u30a2\u30c9\u30ec\u30b9
-MainWindow.menu.help.faq=FAQ
ConfigView.section.style.enableXPStyle=XP \u30b9\u30bf\u30a4\u30eb\u3092\u4f7f\u7528\uff08\u518d\u8d77\u52d5\u304c\u5fc5\u8981\uff09
ConfigView.section.tracker.checkip=\u81ea\u52d5\u691c\u51fa...
ipCheckerWizard.title=IP \u30c1\u30a7\u30c3\u30ab\u30fc\u30a6\u30a3\u30b6\u30fc\u30c9
@@ -856,7 +851,6 @@ ConfigView.text.minutes=\u5206
ConfigView.text.neverIgnore=\u7121\u8996\u3057\u306a\u3044
ConfigView.text.any=\u3044\u305a\u308c\u304b
DownloadManager.error.datamissing=\u30c7\u30fc\u30bf\u7121\u3057
-iconBar.queue.tooltip=\u30ad\u30e5\u30fc
MainWindow.menu.file.open.torrentforseeding=Torrent \u30d5\u30a1\u30a4\u30eb\uff08\u30b7\u30fc\u30c9\u7528\uff09...
MainWindow.menu.language.refresh=\u518d\u8aad\u307f\u8fbc\u307f
ManagerItem.forced=\u5f37\u5236
@@ -1124,10 +1118,6 @@ upnp.trace_to_log=\u30c7\u30d0\u30c3\u30b0\u60c5\u5831\u3092\u30ed\u30b0\u306b\u
ConfigView.pluginlist.coreplugins=\u6b21\u306e\u30d7\u30e9\u30b0\u30a4\u30f3\u304c\u7d44\u307f\u8fbc\u307e\u308c\u3066\u3044\u307e\u3059\uff1a
Peers.column.DLedFromOthers=\u30c0\u30a6\u30f3\u30ed\u30fc\u30c9(\u4ed6)
Peers.column.DLedFromOthers.info=\u3053\u306e\u30af\u30e9\u30a4\u30a2\u30f3\u30c8\u3068\u63a5\u7d9a\u3057\u305f\u6642\u70b9\u304b\u3089\u306e\u3001\u307b\u304b\u306e\u30af\u30e9\u30a4\u30a2\u30f3\u30c8\u304b\u3089\u30c0\u30a6\u30f3\u30ed\u30fc\u30c9\u3057\u305f\u7dcf\u91cf
-Peers.column.UpDownRatio=Up:Down
-Peers.column.UpDownRatio.info=Peer's "Uploaded : Downloaded" Ratio
-Peers.column.UpRatio=Up Ratio
-Peers.column.UpRatio.info=Peer's "Upload from you : Uploaded from other" ratio
upnp.releasemappings=\u5272\u308a\u5f53\u3066\u305f\u30dd\u30fc\u30c8\u3092\u7d42\u4e86\u6642\u306b\u89e3\u653e
webui.upnpenable=\u3053\u306e\u30dd\u30fc\u30c8\u306b\u5bfe\u3057\u3066 UPnP \u3092\u4f7f\u7528 (*)
ConfigView.section.file.friendly.hashchecking=\u30d4\u30fc\u30b9\u30c1\u30a7\u30c3\u30af\u306e\u983b\u5ea6\u3092\u4e0b\u3052\u308b
@@ -1278,15 +1268,11 @@ ConfigView.section.sharing.rescanperiod=\u518d\u30b9\u30ad\u30e3\u30f3\u9593\u96
ConfigView.section.connection.advanced=\u30cd\u30c3\u30c8\u30ef\u30fc\u30af\u306e\u8a73\u7d30
ConfigView.section.connection.advanced.url=http://wiki.vuze.com/index.php/AdvancedNetworkSettings
ConfigView.section.connection.advanced.mtu=MTU
-ConfigView.section.connection.advanced.mtu.tooltip=Maximum size of a packet that can be transferred in one frame over a network.\nVuze uses MTU-40 (MSS) for upload packet-payload optimizations.\nRecommended values:\n 576 - Dial-up connections\n1492 - PPPoE broadband connections\n1500 - Ethernet, DSL and Cable broadband connections
ConfigView.section.connection.advanced.SO_RCVBUF=SO_RCVBUF \u30b5\u30a4\u30ba [0: OS \u306e\u30c7\u30d5\u30a9\u30eb\u30c8\u5024]
ConfigView.section.connection.advanced.SO_SNDBUF=SO_SNDBUF \u30b5\u30a4\u30ba [0: OS \u306e\u30c7\u30d5\u30a9\u30eb\u30c8\u5024]
ConfigView.section.connection.advanced.IPDiffServ=\u9001\u4fe1\u30d1\u30b1\u30c3\u30c8 DiffServ\uff08TOS \u30d5\u30a3\u30fc\u30eb\u30c9\uff09
-ConfigView.section.connection.advanced.IPDiffServ.tooltip=Sets the DiffServ part of the type-of-service (TOS) field in the IP header for outgoing packets.\nHexadecimal values can be specified by prefixing them with '0x', e.g. 0x10.\nVuze leaves this unset by default, meaning the defaults for the underlying OS are used.\nNOTE: Underlying network implementations may ignore this value, so this option is highly dependent on OS and JRE versions.
ConfigView.section.interface.confirm_torrent_removal=Torrent \u3092\u524a\u9664\u3059\u308b\u3068\u304d\u3001\u78ba\u8a8d\u30c0\u30a4\u30a2\u30ed\u30b0\u3092\u8868\u793a
ConfigView.section.interface.confirm_torrent_removal.tooltip=Torrent \u30ea\u30b9\u30c8\u304b\u3089 Torrent \u3092\u524a\u9664\u3059\u308b\u969b\u306b\u78ba\u8a8d\u3057\u307e\u3059
-TableColumn.header.confirm_torrent_removal=\u524a\u9664\u3057\u3066\u3082\u3088\u308d\u3057\u3044\u3067\u3059\u304b\uff1f\n
-TableColumn.header.seed_to_peer_ratio=Seed2PeerRatio
TableColumn.header.seed_to_peer_ratio.info=\u30b7\u30fc\u30c0\u30fc\u306b\u5bfe\u3059\u308b\u30d4\u30a2\u306e\u6bd4\u7387
PeersView.connected_time=\u63a5\u7d9a\u6642\u9593
PeersView.connected_time.info=\u30d4\u30a2\u3068\u306e\u5408\u8a08\u63a5\u7d9a\u6642\u9593
@@ -1436,7 +1422,6 @@ Button.close=\u9589\u3058\u308b
window.welcome.title=Vuze %1 \u30ea\u30ea\u30fc\u30b9\u30ce\u30fc\u30c8
#file can be a URL or a path in the jar
MainWindow.menu.help.releasenotes=\u30ea\u30ea\u30fc\u30b9\u30ce\u30fc\u30c8
-dht.reseed.label=Normally reseeding of the Distributed Database is not necessary. However, if the number of contacts is low this can be used for re-integration.\nLeave blank to bootstrap off connected peers or enter IP and port to explicitly bootstrap from a known peer.
dht.reseed.group=\u518d\u30b7\u30fc\u30c9
dht.reseed.ip=IP \u30a2\u30c9\u30ec\u30b9
dht.reseed.port=\u30dd\u30fc\u30c8
@@ -1466,7 +1451,6 @@ DHTView.operations.sent=\u9001\u4fe1\u6e08
DHTView.operations.ok=OK
DHTView.operations.failed=\u5931\u6557
DHTView.operations.received=\u53d7\u4fe1\u6e08
-DHTView.operations.ping=Ping
DHTView.operations.findNode=\u30ce\u30fc\u30c9\u3092\u691c\u7d22
DHTView.operations.findValue=\u5024\u3092\u691c\u7d22
DHTView.operations.store=\u30b9\u30c8\u30a2
@@ -1520,7 +1504,6 @@ ConfigView.label.playfilefinished=\u30d5\u30a1\u30a4\u30eb\u5b8c\u6210\u6642\u30
ConfigView.label.backupconfigfiles=\u8a2d\u5b9a\u30d5\u30a1\u30a4\u30eb\u3092\u30d0\u30c3\u30af\u30a2\u30c3\u30d7
ConfigView.section.tracker.client.scrapesingleonly=\u30c8\u30e9\u30c3\u30ab\u30fc\u3054\u3068\u306e\u30b9\u30af\u30ec\u30a4\u30d7\u3092\u7121\u52b9\u306b\u3059\u308b\uff08'URL too long' (414) \u30a8\u30e9\u30fc\u3092\u8fd4\u3059\u5834\u5408\u306b\u6709\u52b9\u3067\u3059\uff09
dht.ipfilter.log=IP \u30d5\u30a3\u30eb\u30bf\u306b\u5408\u81f4\u3057\u305f\u5834\u5408\u306b\u30ed\u30b0\u306b\u8a18\u9332
-ConfigView.label.seeding.addForSeedingDLCopyCount=Consider 'add for seeding' downloads to have downloaded this number of copies
MyTorrentsView.menu.movemenu=\u30d5\u30a1\u30a4\u30eb\u3092\u79fb\u52d5
MyTorrentsView.menu.movedata=\u30c7\u30fc\u30bf\u30d5\u30a1\u30a4\u30eb\u3092\u79fb\u52d5...
MyTorrentsView.menu.movetorrent=Torrent \u30d5\u30a1\u30a4\u30eb\u3092\u79fb\u52d5...
@@ -1620,17 +1603,10 @@ PeersView.BlockView.Transfer=\u8ee2\u9001\u4e2d
PeersView.BlockView.NextRequest=\u6b21\u306e\u8981\u6c42
PeersView.BlockView.title=\u30d4\u30fc\u30b9\u30de\u30c3\u30d7
PeersView.BlockView.AvailCount=\u6709\u52b9\u6570
-TableColumn.header.dialog.NumberError.title=\u7121\u52b9\u307e\u305f\u306f\u8a8d\u8b58\u3067\u304d\u306a\u3044\u6570\u5024
-TableColumn.header.dialog.NumberError.text=\u5165\u529b\u3055\u308c\u305f\u6570\u5024\u306f\u7121\u52b9\u304b\u8a8d\u8b58\u3067\u304d\u307e\u305b\u3093\u3002
MyTorrentsView.menu.manual=\u624b\u52d5...
MyTorrentsView.menu.manual.per_torrent=\u624b\u52d5\uff08Torrent \u3054\u3068\uff09
MyTorrentsView.menu.manual.shared_torrents=\u624b\u52d5\uff08Torrent \u5171\u6709\uff09
-TableColumn.header.dialog.setSpeed.title=%1 \u306e\u901f\u5ea6\u3092\u8a2d\u5b9a
# %1 = "in kbps" or ""; %2 = "upload" or "download"
-TableColumn.header.dialog.setNumber.text=%1 \u3092 %2 \u306b\u5909\u66f4\uff1a
-TableColumn.header.dialog.setNumber.upload=\u30a2\u30c3\u30d7\u30ed\u30fc\u30c9
-TableColumn.header.dialog.setNumber.download=\u30c0\u30a6\u30f3\u30ed\u30fc\u30c9
-TableColumn.header.dialog.setNumber.inKbps=in kb/s
OpenTorrentWindow.torrentLocation=Torrent \u30d5\u30a1\u30a4\u30eb\uff1a
OpenTorrentWindow.addFiles.URL=URL \u3092\u8ffd\u52a0
OpenTorrentWindow.addFiles.Folder=\u30d5\u30a9\u30eb\u30c0\u3092\u8ffd\u52a0
@@ -1725,8 +1701,6 @@ Button.markSelected=\u9078\u629e\u3055\u308c\u305f\u3082\u306e\u3092\u30de\u30fc
Button.unmarkSelected=\u30de\u30fc\u30af\u3092\u5916\u3059
plugins.basicview.config=\u8a2d\u5b9a
TorrentOptionsView.param.max.uploads=\u6700\u5927\u30a2\u30c3\u30d7\u30ed\u30fc\u30c9\u6570 [\u6700\u5c0f: 2]
-TableColumn.header.dialog.setPosition.title=\u4f4d\u7f6e\u8a2d\u5b9a
-TableColumn.header.dialog.setPosition.text=\u9078\u629e\u3055\u308c\u305f Torrent \u3092\u914d\u7f6e\u3059\u308b\u4f4d\u7f6e\u3092\u5165\u529b\u3057\u3066\u304f\u3060\u3055\u3044\uff1a
MyTorrentsView.menu.reposition.manual=\u518d\u914d\u7f6e...
ConfigView.section.connection.advanced.info.link=\u8a73\u3057\u304f\u306f\u3053\u3061\u3089\u3092\u3054\u89a7\u304f\u3060\u3055\u3044
ConfigView.section.connection.advanced.socket.group=Socket
@@ -1736,14 +1710,9 @@ ConfigView.section.proxy.group.tracker=\u30c8\u30e9\u30c3\u30ab\u30fc\u3068\u306
ConfigView.section.proxy.group.peer=\u30d4\u30a2\u3068\u306e\u901a\u4fe1
Pieces.column.Requested=\u8981\u6c42\u3055\u308c\u305f
ConfigView.label.maxuploadsseeding=\u30b7\u30fc\u30c9\u6642\u306e\u30a2\u30c3\u30d7\u30ed\u30fc\u30c9\u6570\u306e\u30c7\u30d5\u30a9\u30eb\u30c8
-TableColumn.header.filter=\u30d5\u30a3\u30eb\u30bf\uff1a
popup.error.hideall=\u3059\u3079\u3066\u3092\u96a0\u3059
ConfigView.section.style.dataStatsOnly=\u30c7\u30fc\u30bf\u7d71\u8a08\u60c5\u5831\u306e\u307f\u8868\u793a
ConfigView.section.style.separateProtDataStats=\u30c7\u30fc\u30bf\u3068\u30d7\u30ed\u30c8\u30b3\u30eb\u7d71\u8a08\u3092\u5225\u3005\u306b\u8868\u793a
-TableColumn.header.dialog.setFilter.title=\u30d5\u30a3\u30eb\u30bf\u3092\u5909\u66f4
-TableColumn.header.dialog.setFilter.text=\u30bb\u30af\u30b7\u30e7\u30f3 %1 \u306f\u4e0b\u306b\u5165\u529b\u3057\u305f\u6587\u5b57\u5217\u306b\u3088\u308a\u30d5\u30a3\u30eb\u30bf\u30fc\u3055\u308c\u307e\u3059\u3002\u8907\u6570\u306e\u30d5\u30ec\u30fc\u30ba\u3092\u5217\u6319\u3059\u308b\u306b\u306f |\uff08\u30d1\u30a4\u30d7\uff09\u3092\u4f7f\u7528\u3057\u3066\u304f\u3060\u3055\u3044\u3002
-TableColumn.header.filter.tooltip=Ctrl+X \u3067\u6b63\u898f\u8868\u73fe\u30e2\u30fc\u30c9\u3068\u901a\u5e38\u30e2\u30fc\u30c9\u3092\u5207\u308a\u66ff\u3048\u307e\u3059\u3002\n\u8907\u6570\u306e\u30d5\u30ec\u30fc\u30ba\u3092\u6307\u5b9a\u3059\u308b\u306b\u306f |\uff08\u30d1\u30a4\u30d7\uff09\u3092\u4f7f\u7528\u3057\u3066\u304f\u3060\u3055\u3044\u3002
-TableColumn.header.clearFilter.tooltip=\u30d5\u30a3\u30eb\u30bf\u3092\u6d88\u53bb\u3057\u307e\u3059
MyTorrentsView.menu.filter=\u30d5\u30a3\u30eb\u30bf\u4e00\u89a7...
ConfigView.section.file.resume.recheck.all=\u30af\u30e9\u30c3\u30b7\u30e5\u3057\u305f\u5f8c\u306e\u8d77\u52d5\u6642\u306b\u5b8c\u6210\u3057\u305f\u30d4\u30fc\u30b9\u3092\u3059\u3079\u3066\u30c1\u30a7\u30c3\u30af\uff08\u30aa\u30d5\u306e\u5834\u5408\u306f\u6700\u5f8c\u306b\u4fdd\u5b58\u3057\u305f\u30d4\u30fc\u30b9\u306e\u307f\u3092\u30c1\u30a7\u30c3\u30af\uff09
ConfigureWizard.language.choose=\u8a00\u8a9e\u3092\u9078\u629e\u3057\u3066\u304f\u3060\u3055\u3044\uff1a
@@ -1756,7 +1725,7 @@ popup.download.finished=%1 \u306e\u30c0\u30a6\u30f3\u30ed\u30fc\u30c9\u304c\u5b8
popup.file.finished=%1 \u306e\u30c0\u30a6\u30f3\u30ed\u30fc\u30c9\u5b8c\u4e86
ConfigView.auto=\u81ea\u52d5
Plugin.localtracker.autoadd.info=\u81ea\u52d5\u7684\u306b\u30ed\u30fc\u30ab\u30eb\u306e\u30d4\u30a2\u306b\u8ffd\u52a0 [';' \u533a\u5207\u308a\u3067 IP \u30a2\u30c9\u30ec\u30b9\u3092\u5217\u6319 \uff08\u4f8b\uff09 1.2.3.4]
-Plugin.localtracker.autoadd= \u30d4\u30a2\u3092\u660e\u793a
+Plugin.localtracker.autoadd=\u30d4\u30a2\u3092\u660e\u793a
Plugin.localtracker.networks.info=\u30ed\u30fc\u30ab\u30eb\u306e\u30cd\u30c3\u30c8\u30ef\u30fc\u30af\u3068\u307f\u306a\u3059 [';' \u533a\u5207\u308a\u3067\u30cd\u30c3\u30c8\u30ef\u30fc\u30af\u3092\u5217\u6319 \uff08\u4f8b\uff09 145.227.*.*]
Plugin.localtracker.networks=\u30ed\u30fc\u30ab\u30eb\u30cd\u30c3\u30c8\u30ef\u30fc\u30af
MainWindow.menu.view.plugins.logViews=\u30ed\u30b0
@@ -1878,13 +1847,8 @@ MainWindow.menu.view.iconbar=\u30c4\u30fc\u30eb\u30d0\u30fc
MyTorrentsView.menu.rename=\u540d\u524d\u3092\u5909\u66f4
MyTorrentsView.menu.rename.displayed=\u8868\u793a\u540d\u3092\u5909\u66f4
MyTorrentsView.menu.rename.save_path=\u4fdd\u5b58\u5148\u3092\u5909\u66f4
-MyTorrentsView.menu.rename.displayed_and_save_path=\u4e21\u65b9\u3068\u3082\u5909\u66f4
MyTorrentsView.menu.rename.displayed.enter.title=\u8868\u793a\u540d\u3092\u5909\u66f4
MyTorrentsView.menu.rename.displayed.enter.message=\u8868\u793a\u540d\u3092\u5165\u529b\u3057\u3066\u304f\u3060\u3055\u3044\u3002\n\u4f55\u3082\u5165\u529b\u3057\u306a\u3044\u5834\u5408\u306f\u30aa\u30ea\u30b8\u30ca\u30eb\u306e\u540d\u524d\u304c\u4f7f\u308f\u308c\u307e\u3059\u3002
-MyTorrentsView.menu.rename.save_path.enter.title=\u4fdd\u5b58\u5148\u3092\u5909\u66f4
-MyTorrentsView.menu.rename.save_path.enter.message=\u4fdd\u5b58\u5148\u3092\u5165\u529b\u3057\u3066\u304f\u3060\u3055\u3044\u3002\n\u4f55\u3082\u5165\u529b\u3057\u306a\u3044\u5834\u5408\u306f\u30c0\u30a6\u30f3\u30ed\u30fc\u30c9\u306e\u540d\u524d\u304c\u4f7f\u308f\u308c\u307e\u3059\u3002
-MyTorrentsView.menu.rename.displayed_and_save_path.enter.title=\u30c0\u30a6\u30f3\u30ed\u30fc\u30c9\u306e\u540d\u524d\u3092\u5909\u66f4
-MyTorrentsView.menu.rename.displayed_and_save_path.enter.message=\u540d\u524d\u3092\u5165\u529b\u3057\u3066\u304f\u3060\u3055\u3044\u3002\n\u4f55\u3082\u5165\u529b\u3057\u306a\u3044\u5834\u5408\u306f\u30aa\u30ea\u30b8\u30ca\u30eb\u306e\u540d\u524d\u304c\u4f7f\u308f\u308c\u307e\u3059\u3002
MyTorrentsView.menu.edit_comment=\u30b3\u30e1\u30f3\u30c8\u3092\u7de8\u96c6
MyTorrentsView.menu.edit_comment.enter.title=\u30b3\u30e1\u30f3\u30c8\u3092\u7de8\u96c6
MyTorrentsView.menu.edit_comment.enter.message=\u30b3\u30e1\u30f3\u30c8\u3092\u5165\u529b\u3057\u3066\u304f\u3060\u3055\u3044
@@ -1980,16 +1944,8 @@ ConfigView.label.openbar.complete=\u81ea\u52d5\u3067\u30b7\u30fc\u30c9\u3092\u95
ConfigView.label.transferbar.remember_location=\u8ee2\u9001\u30d0\u30fc\u306e\u6700\u5f8c\u306b\u958b\u3044\u305f\u4f4d\u7f6e\u3092\u8a18\u61b6
ConfigView.section.transfer.autospeed.forcemin=\u30a2\u30c3\u30d7\u30ed\u30fc\u30c9\u901f\u5ea6\u3092\u5f37\u5236\u7684\u306b\u5909\u66f4 (%1)
MainWindow.menu.tools.speedtest=\u30b9\u30d4\u30fc\u30c9\u30c6\u30b9\u30c8...
-speedtest.wizard.title=Speed Test
-speedtest.wizard.run=Run a speed test
-speedtest.wizard.test.mode.updown=upload and download
-speedtest.wizard.test.mode.up=upload
-speedtest.wizard.test.mode.down=download
-SpeedTestWizard.abort.message.download.added=Download %1 added during test
window.uiswitcher.text=\u6b21\u304b\u3089\u304a\u597d\u307f\u306e\u30e6\u30fc\u30b6\u30fc\u30a4\u30f3\u30bf\u30fc\u30d5\u30a7\u30a4\u30b9\u3092\u9078\u629e\u3057\u3066\u304f\u3060\u3055\u3044\u3002
window.uiswitcher.NewUI.text=* \u521d\u5fc3\u8005\u3084\u65b0\u898f\u30e6\u30fc\u30b6\u306b\u304a\u52e7\u3081\n\n* \u4f7f\u3044\u3084\u3059\u3044\u30b0\u30e9\u30d5\u30a3\u30ab\u30eb\u30a4\u30f3\u30bf\u30fc\u30d5\u30a7\u30a4\u30b9\n\n* Vuze \u30d7\u30e9\u30c3\u30c8\u30d5\u30a9\u30fc\u30e0\u3067\u516c\u958b\u3059\u308b\u306b\u306f\u5fc5\u9808
-window.uiswitcher.AdvancedUI.title=\u30a2\u30c9\u30d0\u30f3\u30b9\u30c8 Vuze
-window.uiswitcher.AdvancedUI.text=* \u65e7\u30d0\u30fc\u30b8\u30e7\u30f3\u306e\u30a4\u30f3\u30bf\u30fc\u30d5\u30a7\u30a4\u30b9\u3092\u4f7f\u7528\u3057\u305f\u3044\u304c\u3001Vuze \u30d7\u30e9\u30c3\u30c8\u30d5\u30a9\u30fc\u30e0\u4e0a\u3067\u691c\u7d22\u30fb\u30d6\u30e9\u30a6\u30ba\u30fb\u30b3\u30f3\u30c6\u30f3\u30c4\u306e\u516c\u958b\u3092\u884c\u3044\u305f\u3044\u30e6\u30fc\u30b6\u306b\u304a\u52e7\u3081\u3002\n\n* \u7c21\u5358\u3067\u4f7f\u3044\u3084\u3059\u3044\u30b0\u30e9\u30d5\u30a3\u30ab\u30eb\u30a4\u30f3\u30bf\u30fc\u30d5\u30a7\u30a4\u30b9\u3068\u3088\u308a\u9ad8\u5ea6\u306a\u6a5f\u80fd\u3068\u3092\u4e21\u7acb\u3002
window.uiswitcher.ClassicUI.title=\u30af\u30e9\u30b7\u30c3\u30af\u30a4\u30f3\u30bf\u30fc\u30d5\u30a7\u30a4\u30b9
window.uiswitcher.ClassicUI.text=* 2.x \u306e\u6a5f\u80fd\u3092\u4fdd\u6301\u3002\n\n* Vuze \u30b3\u30f3\u30c6\u30f3\u30c4\u30ec\u30a4\u30e4\u30fc\u306f\u30ed\u30fc\u30c9\u3055\u308c\u307e\u305b\u3093
window.uiswitcher.bottom.text=Vuze UI Chooser \u3067\u3044\u3064\u3067\u3082\u5909\u66f4\u3059\u308b\u3053\u3068\u304c\u3067\u304d\u307e\u3059\u3002
@@ -2018,7 +1974,12 @@ TableColumn.header.SpeedGraphic=\u901f\u5ea6
TableColumn.header.AzProduct=\u63d0\u4f9b\u5143
TableColumn.header.MediaThumb=\u30e1\u30c7\u30a3\u30a2
TableColumn.header.ProgressETA=\u72b6\u6cc1
+#TableColumn.header.size={MyTorrentsView.size}
+#TableColumn.header.up={MyTorrentsView.up}
+#TableColumn.header.date_added={MyTorrentsView.date_added}
+#TableColumn.header.name={MyTorrentsView.name}
TableColumn.header.name.ext=\u30d5\u30a1\u30a4\u30eb\u5f62\u5f0f: %1
+#TableColumn.header.shareRatio={MyTorrentsView.shareRatio}
v3.MainWindow.tab.home=\u30c0\u30c3\u30b7\u30e5\u30dc\u30fc\u30c9
v3.MainWindow.tab.browse=Vuze
v3.MainWindow.tab.library=\u30e9\u30a4\u30d6\u30e9\u30ea
@@ -2042,7 +2003,6 @@ v3.MainWindow.button.comment=\u30b3\u30e1\u30f3\u30c8
v3.MainWindow.button.viewdetails=\u8a73\u7d30\u3092\u8868\u793a
v3.MainWindow.button.play=\u518d\u751f
v3.MainWindow.button.cancel=\u30ad\u30e3\u30f3\u30bb\u30eb
-v3.MainWindow.button.sendtofriend=Torrent \u3092\u5171\u6709
v3.MainWindow.button.preview=\u30d7\u30ec\u30d3\u30e5\u30fc
v3.MainWindow.view.wait=\u521d\u671f\u5316\u4e2d\u3067\u3059\u3002\u304a\u5f85\u3061\u304f\u3060\u3055\u3044\u3002
v3.MainWindow.xofx=%1 / %2
@@ -2090,7 +2050,6 @@ dialog.uiswitcher.restart.title=UI Switcher: Vuze \u306e\u518d\u8d77\u52d5\u304c
dialog.uiswitcher.restart.text=\u65b0\u3057\u3044 UI \u30e2\u30fc\u30c9\u306b\u5207\u308a\u66ff\u3048\u308b\u305f\u3081 Vuze \u3092\u518d\u8d77\u52d5\u3057\u3066\u304f\u3060\u3055\u3044\u3002
TrayWindow.menu.close=\u30c0\u30a6\u30f3\u30ed\u30fc\u30c9\u30d0\u30b9\u30b1\u30c3\u30c8\u3092\u9589\u3058\u308b
# Used for peers which we can't determine.
-PeerSocket.unknown=Unknown
OpenTorrentWindow.mb.askCreateDir.title=\u4fdd\u5b58\u5148\u306e\u30d5\u30a9\u30eb\u30c0\u304c\u898b\u3064\u304b\u308a\u307e\u305b\u3093
OpenTorrentWindow.mb.askCreateDir.text=\u4fdd\u5b58\u5148\u306e\u30d5\u30a9\u30eb\u30c0 '%1' \u304c\u898b\u3064\u304b\u308a\u307e\u305b\u3093\u3002\n\n\u4f5c\u6210\u3057\u307e\u3059\u304b\uff1f
ConfigTransferAutoSpeed.upload.capacity.usage=\u30a2\u30c3\u30d7\u30ed\u30fc\u30c9\u5bb9\u91cf\u306e\u4f7f\u7528\u7387
@@ -2167,7 +2126,6 @@ Progress.reporting.window.remove.auto=\u975e\u30a2\u30af\u30c6\u30a3\u30d6\u306a
Progress.reporting.window.remove.auto.tooltip=\u5b8c\u4e86\u30fb\u5931\u6557\u30fb\u30ad\u30e3\u30f3\u30bb\u30eb\u3057\u305f\u9805\u76ee\u3092\u81ea\u52d5\u7684\u306b\u524a\u9664\u3057\u307e\u3059
Progress.reporting.window.remove.now=\u975e\u30a2\u30af\u30c6\u30a3\u30d6\u306a\u9805\u76ee\u3092\u524a\u9664
Progress.reporting.window.remove.now.tooltip=\u5b8c\u4e86\u30fb\u5931\u6557\u30fb\u30ad\u30e3\u30f3\u30bb\u30eb\u3057\u305f\u9805\u76ee\u3092\u524a\u9664\u3057\u307e\u3059
-xmlhttp.legacy.error=\u3053\u306e\u30d0\u30fc\u30b8\u30e7\u30f3\u306e XML/HTTP \u30d7\u30e9\u30b0\u30a4\u30f3\u306f Vuze \u3067\u306f\u52d5\u4f5c\u3057\u307e\u305b\u3093\u3002\u6700\u65b0\u30d0\u30fc\u30b8\u30e7\u30f3\u306b\u30a2\u30c3\u30d7\u30b0\u30ec\u30fc\u30c9\u3059\u308b\u5fc5\u8981\u304c\u3042\u308a\u307e\u3059\u3002
TorrentOptionsView.multi.title.short=\u74b0\u5883\u8a2d\u5b9a
TorrentOptionsView.multi.title.full=\u74b0\u5883\u8a2d\u5b9a
MyTorrentsView.menu.open_parent_folder=\u5305\u6709\u3059\u308b\u30d5\u30a9\u30eb\u30c0\u3092\u958b\u304f
@@ -2237,11 +2195,6 @@ ConfigView.section.security.unlockkey.error=\u9375\u306e\u89e3\u9664\u306b\u5931
ConfigView.copy.to.clipboard.tooltip=\u30af\u30ea\u30c3\u30d7\u30dc\u30fc\u30c9\u306b\u30b3\u30d4\u30fc
Views.plugins.azbuddy.title=Friend
Browser.popup.error.no.access=\u30ea\u30e2\u30fc\u30c8\u30ea\u30bd\u30fc\u30b9\u3078\u306e\u30a2\u30af\u30bb\u30b9\u4e2d\u306b\u30a8\u30e9\u30fc\u304c\u7f6e\u304d\u307e\u3057\u305f\u3002\n\u3057\u3070\u3089\u304f\u3057\u305f\u5f8c\u306b\u30a2\u30af\u30bb\u30b9\u3057\u3066\u307f\u3066\u304f\u3060\u3055\u3044\u3002\n
-v3.activity.header.today=\u4eca\u65e5
-v3.activity.header.yesterday=\u6628\u65e5
-v3.activity.header.xdaysago=%1 \u65e5\u524d
-v3.activity.header.1weekago=1 \u9031\u9593\u524d
-v3.activity.header.xweeksago=%1 \u9031\u9593\u524d
ConfigView.label.queue.stoponcebandwidthmet=\u30a2\u30c3\u30d7\u30ed\u30fc\u30c9/\u30c0\u30a6\u30f3\u30ed\u30fc\u30c9\u901f\u5ea6\u304c\u4e0a\u9650\u306b\u9054\u3057\u305f\u5834\u5408\u3001\u307b\u304b\u306e Torrent \u3092\u958b\u59cb\u3057\u306a\u3044
ConfigView.section.style.forceMozilla=Vuze \u306e\u30d6\u30e9\u30a6\u30b6\u30a6\u30a3\u30b8\u30a7\u30c3\u30c8\u306b Mozilla \u3092\u4f7f\u7528 [XulRunner \u307e\u305f\u306f Firefox 3 \u304c\u5fc5\u8981; \u8981\u518d\u8d77\u52d5]
ConfigView.section.style.xulRunnerPath=XulRunner/Firefox \u306e\u30d1\u30b9\u3092\u6307\u5b9a [FF3 \u306e\u5834\u5408\u306b\u5fc5\u8981; \u8981\u518d\u8d77\u52d5]
@@ -2285,86 +2238,32 @@ Button.bar.share=\u5171\u6709
Button.bar.add=Friends \u3092\u8ffd\u52a0
Button.bar.edit=\u7de8\u96c6
Button.bar.edit.cancel=\u7d42\u4e86
-v3.Share.menu=\u30b3\u30f3\u30c6\u30f3\u30c4\u3092\u5171\u6709
-v3.Share.header=\u5171\u6709
-v3.Share.header.message=Friend \u3068\u5171\u6709\u3057\u307e\u3059\u3002
-v3.Share.add.buddy=Friend \u3092\u8ffd\u52a0
-v3.Share.add.edit.buddy=Friend \u3092\u8ffd\u52a0\uff0f\u7de8\u96c6
-v3.Share.add.buddy.all=\u3059\u3079\u3066\u306e Friend \u3068\u5171\u6709
-v3.Share.add.buddy.existing=\u73fe\u5728\u306e Friend:
-v3.Share.add.buddy.new=\u65b0\u3057\u3044 Friend:
-v3.Share.buddies=Friend
-v3.Share.invitees=\u62db\u5f85\u8005
-v3.Share.invite.buddies.prompt=\u5171\u6709\u3059\u308b Friend \u3092\u62db\u5f85
-v3.Share.send.now=\u9001\u4fe1
-v3.Share.optional.message=\u30a2\u30af\u30c6\u30a3\u30d3\u30c6\u30a3\u30d5\u30a3\u30fc\u30c9\u3092\u901a\u3058\u3066\u9001\u308b\u30aa\u30d7\u30b7\u30e7\u30f3\u30e1\u30c3\u30bb\u30fc\u30b8\uff08\u6700\u5927 140 \u6587\u5b57\uff09\uff1a
-v3.Share.disclaimer=\u6ce8\u610f\uff1a\u5171\u6709\u3059\u308b\u30b3\u30f3\u30c6\u30f3\u30c4\u3068\u30aa\u30d7\u30b7\u30e7\u30f3\u306e\u30e1\u30c3\u30bb\u30fc\u30b8\u306e\u4e21\u65b9\u3068\u3082\u6697\u53f7\u5316\u3055\u308c\u307e\u3059\u3002
-v3.Share.disclaimer.link=\u3082\u3063\u3068\u8aad\u3080
-ConfigView.section.security.vuze.login=\u64cd\u4f5c\u306e\u524d\u306b Vuze \u306b\u30ed\u30b0\u30a4\u30f3\u3057\u3066\u304f\u3060\u3055\u3044
-v3.buddy.menu.viewprofile=\u30d7\u30ed\u30d5\u30a1\u30a4\u30eb\u3092\u8868\u793a
-v3.buddy.menu.remove=Friend \u3092\u524a\u9664
v3.MainWindow.menu.view.pluginbar=\u30d7\u30e9\u30b0\u30a4\u30f3\u30d0\u30fc
-v3.MainWindow.menu.view.buttonbar=\u30dc\u30bf\u30f3\u30d0\u30fc
-v3.activity.buddy-request=Friend \u30ea\u30af\u30a8\u30b9\u30c8\u304c %1 \u304b\u3089\u5c4a\u3044\u3066\u3044\u307e\u3059\u3002
-v3.activity.buddy-request.accept=\u53d7\u3051\u5165\u308c\u308b
-v3.activity.buddy-request.multi=Friend \u30ea\u30af\u30a8\u30b9\u30c8 [#%3] \u304c %1 \u304b\u3089\u5c4a\u3044\u3066\u3044\u307e\u3059\u3002
-v3.activity.buddy-linkup=\u3042\u306a\u305f\u3068 %1 \u306f Friend \u3067\u3059\u3002
-v3.activity.share-content.no-msg=%1 \u306f\u3042\u306a\u305f\u3068 %2 \u3092\u5171\u6709\u3057\u307e\u3057\u305f
-v3.buddies.count=%1 \u4eba
-v3.buddies.remove=Friend \u3092\u524a\u9664
-v3.buddies.add.to.share=\u5171\u6709\u3059\u308b Friend \u3092\u8ffd\u52a0
MainWindow.dialog.select.vuze.file=Vuze \u30d5\u30a1\u30a4\u30eb\u3092\u9078\u629e\u3057\u3066\u304f\u3060\u3055\u3044
MainWindow.menu.file.open.vuze=Vuze \u30d5\u30a1\u30a4\u30eb...
-azbuddy.ui.dialog.disable.title=Friends \u30d7\u30e9\u30b0\u30a4\u30f3\u3092\u7121\u52b9\u306b\u3059\u308b
-azbuddy.ui.dialog.disable.text=Friends \u30d7\u30e9\u30b0\u30a4\u30f3\u3092\u7121\u52b9\u306b\u3059\u308b\u3068\u30a2\u30d7\u30ea\u30b1\u30fc\u30b7\u30e7\u30f3\u4e0b\u90e8\u306e Friends \u30d0\u30fc\u3092\u901a\u3058\u305f Torrent \u306e\u5171\u6709\u304c\u3067\u304d\u306a\u304f\u306a\u308a\u3001Friends \u306e\u5909\u66f4\u3082\u3067\u304d\u306a\u304f\u306a\u308a\u307e\u3059\u3002\n\nFriends \u30d7\u30e9\u30b0\u30a4\u30f3\u3092\u7121\u52b9\u306b\u3057\u307e\u3059\u304b\uff1f
metasearch.addtemplate.title=\u691c\u7d22\u30c6\u30f3\u30d7\u30ec\u30fc\u30c8\u3092\u30a4\u30f3\u30b9\u30c8\u30fc\u30eb
metasearch.addtemplate.desc=\u691c\u7d22\u30c6\u30f3\u30d7\u30ec\u30fc\u30c8 '%1' \u3092\u30a4\u30f3\u30b9\u30c8\u30fc\u30eb\u3057\u307e\u3059\u304b\uff1f
v3.share.private.title=Torrent \u3092\u5171\u6709
v3.share.private.text=\u9078\u629e\u3055\u308c\u305f Torrent \u306f Private Torrent \u3067\u3059\u3002\n\nPrivate Torrent \u306f\u5171\u6709\u3067\u304d\u307e\u305b\u3093\u3002
-v3.buddies.disabled.title=Friend \u30d7\u30e9\u30b0\u30a4\u30f3\u3092\u7121\u52b9\u306b\u3057\u307e\u3057\u305f
-v3.buddies.disabled.text._windows=Friend \u30d7\u30e9\u30b0\u30a4\u30f3\u3092\u7121\u52b9\u306b\u3057\u307e\u3057\u305f\u3002Friend \u3068\u306e Torrent \u5171\u6709\u304c\u3067\u304d\u306a\u304f\u306a\u308a\u307e\u3059\u3002\u74b0\u5883\u8a2d\u5b9a\u304b\u3089\u8a2d\u5b9a\u3092\u5909\u66f4\u3059\u308b\u3053\u3068\u304c\u3067\u304d\u307e\u3059\u3002
-v3.buddies.disabled.text._mac=Friend \u30d7\u30e9\u30b0\u30a4\u30f3\u3092\u7121\u52b9\u306b\u3057\u307e\u3057\u305f\u3002Friend \u3068\u306e Torrent \u5171\u6709\u304c\u3067\u304d\u306a\u304f\u306a\u308a\u307e\u3059\u3002\u74b0\u5883\u8a2d\u5b9a\u304b\u3089\u8a2d\u5b9a\u3092\u5909\u66f4\u3059\u308b\u3053\u3068\u304c\u3067\u304d\u307e\u3059\u3002
metasearch.addtemplate.dup.title=\u30c6\u30f3\u30d7\u30ec\u30fc\u30c8\u306e\u91cd\u8907
metasearch.addtemplate.dup.desc=\u691c\u7d22\u30c6\u30f3\u30d7\u30ec\u30fc\u30c8 %1 \u306f\u65e2\u306b\u30a4\u30f3\u30b9\u30c8\u30fc\u30eb\u3055\u308c\u3066\u3044\u307e\u3059\u3002
metasearch.export.select.template.file=\u30c6\u30f3\u30d7\u30ec\u30fc\u30c8\u3092\u4fdd\u5b58
metasearch.import.select.template.file=\u30c6\u30f3\u30d7\u30ec\u30fc\u30c8\u3092\u958b\u304f
-v3.MainWindow.button.newtag.share=\u65b0\u7740
-v3.buddies.faq=\u3082\u3063\u3068\u8aad\u3080
dialog.uiswitch.title=Vuze UI \u306e\u5207\u308a\u66ff\u3048
dialog.uiswitch.text=\u3053\u306e\u6a5f\u80fd\u3092\u5229\u7528\u3059\u308b\u306b\u306f Vuze UI \u306b\u5207\u308a\u66ff\u3048\u308b\u5fc5\u8981\u304c\u3042\u308a\u307e\u3059\u3002\n\nVuze \u3092\u518d\u8d77\u52d5\u3057\u3066\u304f\u3060\u3055\u3044\u3002
dialog.uiswitch.button=Vuze UI \u306b\u5207\u308a\u66ff\u3048\u308b
azbuddy.tracker.enabled=Friend \u3068\u306e\u30d5\u30a1\u30a4\u30eb\u8ee2\u9001\u3092\u9ad8\u901f\u306b\u3059\u308b 'Friends Boost' \u3092\u4f7f\u7528
v3.MainWindow.button.download=\u30c0\u30a6\u30f3\u30ed\u30fc\u30c9
v3.MainWindow.button.run=\u30c0\u30a6\u30f3\u30ed\u30fc\u30c9\u3057\u305f\u30d5\u30a1\u30a4\u30eb\u3092\u958b\u304f
-v3.activity.header.friend.requests.foryou=Friend \u30ea\u30af\u30a8\u30b9\u30c8 - \u3042\u306a\u305f\u5b9b\u3066
-v3.activity.header.friend.requests.fromyou=Friend \u30ea\u30af\u30a8\u30b9\u30c8 - \u3042\u306a\u305f\u304b\u3089
-v3.activity.header.friend.requests.accepted=Friend \u30ea\u30af\u30a8\u30b9\u30c8 - \u53d7\u7406\u6e08\u307f
-v3.activity.header.share.requests=Torrent \u5171\u6709\u30ea\u30af\u30a8\u30b9\u30c8
v3.activity.header.downloads=\u30c0\u30a6\u30f3\u30ed\u30fc\u30c9
-v3.activity.header.rating.reminders=\u30ec\u30a4\u30c6\u30a3\u30f3\u30b0\u306e\u304a\u77e5\u3089\u305b
v3.activity.header.vuze.news=Vuze \u30cb\u30e5\u30fc\u30b9
-login.optional.message=\u3053\u306e\u6a5f\u80fd\u3092\u5229\u7528\u3059\u308b\u306b\u306f\u30b5\u30a4\u30f3\u30a4\u30f3\u3059\u308b\u5fc5\u8981\u304c\u3042\u308a\u307e\u3059\u3002
-message.confirm.share.singular=Torrent \u306e\u5171\u6709\u30ea\u30af\u30a8\u30b9\u30c8\u304c\u9001\u4fe1\u3055\u308c\u307e\u3057\u305f\u3002\u53d7\u7406\u3055\u308c\u308b\u307e\u3067\u3057\u3070\u3089\u304f\u304a\u5f85\u3061\u304f\u3060\u3055\u3044\u3002
-message.confirm.share.plural=Torrent \u306e\u5171\u6709\u30ea\u30af\u30a8\u30b9\u30c8\u304c\u9001\u4fe1\u3055\u308c\u307e\u3057\u305f\u3002\u53d7\u7406\u3055\u308c\u308b\u307e\u3067\u3057\u3070\u3089\u304f\u304a\u5f85\u3061\u304f\u3060\u3055\u3044\u3002
-message.confirm.share.invite.singular=\u63a5\u7d9a\u3068\u5171\u6709\u30ea\u30af\u30a8\u30b9\u30c8\u304c\u9001\u4fe1\u3055\u308c\u307e\u3057\u305f\u3002\u53d7\u7406\u3055\u308c\u308b\u307e\u3067\u3057\u3070\u3089\u304f\u304a\u5f85\u3061\u304f\u3060\u3055\u3044\u3002
-message.confirm.share.invite.plural=\u63a5\u7d9a\u3068\u5171\u6709\u30ea\u30af\u30a8\u30b9\u30c8\u304c\u9001\u4fe1\u3055\u308c\u307e\u3057\u305f\u3002\u53d7\u7406\u3055\u308c\u308b\u307e\u3067\u3057\u3070\u3089\u304f\u304a\u5f85\u3061\u304f\u3060\u3055\u3044\u3002
-message.confirm.invite.singular=Friend \u30ea\u30af\u30a8\u30b9\u30c8\u304c\u9001\u4fe1\u3055\u308c\u307e\u3057\u305f\u3002\u53d7\u7406\u3055\u308c\u308b\u307e\u3067\u3057\u3070\u3089\u304f\u304a\u5f85\u3061\u304f\u3060\u3055\u3044\u3002
-message.confirm.invite.plural=Friend \u30ea\u30af\u30a8\u30b9\u30c8\u304c\u9001\u4fe1\u3055\u308c\u307e\u3057\u305f\u3002\u53d7\u7406\u3055\u308c\u308b\u307e\u3067\u3057\u3070\u3089\u304f\u304a\u5f85\u3061\u304f\u3060\u3055\u3044\u3002
-message.confirm.invite.error=\u6b8b\u5ff5\u306a\u304c\u3089\u3042\u306a\u305f\u306e\u30ea\u30af\u30a8\u30b9\u30c8\u306f\u53d7\u7406\u3055\u308c\u307e\u305b\u3093\u3067\u3057\u305f\u3002
-message.prompt.add.friends=\u5171\u6709\u3059\u308b\u306b\u306f\u30da\u30fc\u30b8\u4e0b\u90e8\u306e Friend \u30a2\u30a4\u30b3\u30f3\u3092\u30af\u30ea\u30c3\u30af\u3057\u307e\u3059\u3002
message.taking.too.long=\u9577\u3044\u6642\u9593\u304b\u304b\u3063\u3066\u3044\u308b\u5834\u5408\u306f\u3001\n'ESC' \u3092\u62bc\u3059\u3068\u64cd\u4f5c\u3092\u30ad\u30e3\u30f3\u30bb\u30eb\u3059\u308b\u3053\u3068\u304c\u3067\u304d\u307e\u3059\u3002
message.status.success=\u6210\u529f
-message.intro.friends=Frend \u3092\u8ffd\u52a0\u3059\u308b\u3002Torrent \u3092\u5171\u6709\u3059\u308b\u3002\u30c0\u30a6\u30f3\u30ed\u30fc\u30c9\u304c\u3088\u308a\u901f\u304f\u3002
azbuddy.tracker.bbb.status.title.tooltip=\u8a73\u7d30\u3092\u898b\u308b\u306b\u306f\u30c0\u30d6\u30eb\u30af\u30ea\u30c3\u30af\u3057\u3066\u304f\u3060\u3055\u3044\u3002
v3.MainWindow.search.go.tooltip=\u691c\u7d22\u3092\u5b9f\u884c\u3057\u307e\u3059
v3.MainWindow.search.last.tooltip=\u691c\u7d22\u7d50\u679c\u306b\u623b\u308a\u307e\u3059
-v3.activity.buddy-invited=Friend \u30ea\u30af\u30a8\u30b9\u30c8\u3092 %1 \u306b\u9001\u4fe1\u3057\u307e\u3057\u305f\u3002
-v3.activity.buddy-invited.multi=\u6b21\u306e\u65b9\u306b Friend \u30ea\u30af\u30a8\u30b9\u30c8\u3092\u9001\u4fe1\u3057\u307e\u3057\u305f\uff1a\n%1
metasearch.addtemplate.done.title=\u30c6\u30f3\u30d7\u30ec\u30fc\u30c8\u304c\u8ffd\u52a0\u3055\u308c\u307e\u3057\u305f
metasearch.addtemplate.done.desc=\u30c6\u30f3\u30d7\u30ec\u30fc\u30c8 '%1' \u304c\u8ffd\u52a0\u3055\u308c\u307e\u3057\u305f\u3002\n\u6b21\u56de\u306e\u691c\u7d22\u304b\u3089\u3054\u5229\u7528\u306b\u306a\u308c\u307e\u3059\u3002
-v3.MainWindow.button.share=\u30b3\u30f3\u30c6\u30f3\u30c4\u3092\u5171\u6709
-v3.buddies.remove.buddy.dialog.title=Friend \u306e\u524a\u9664
-v3.buddies.remove.buddy.dialog.text=Friend %1 \u3092\u524a\u9664\u3057\u307e\u3059\u304b\uff1f
ConfigView.section.security.nopw=\u30d1\u30b9\u30ef\u30fc\u30c9\u304c\u8a2d\u5b9a\u3055\u308c\u3066\u3044\u307e\u305b\u3093\u3002
ConfigView.section.security.nopw_v=\u30d1\u30b9\u30ef\u30fc\u30c9\u304c\u8a2d\u5b9a\u3055\u308c\u3066\u3044\u307e\u305b\u3093\u3002Vuze \u306b\u7f72\u540d\u3057\u3066\u304f\u3060\u3055\u3044\u3002
fileplugininstall.install.title=\u30d7\u30e9\u30b0\u30a4\u30f3\u3092\u30a4\u30f3\u30b9\u30c8\u30fc\u30eb
@@ -2372,13 +2271,9 @@ fileplugininstall.install.desc=\u30d7\u30e9\u30b0\u30a4\u30f3 '%1' %2 \u3092\u30
fileplugininstall.duplicate.title=\u30d7\u30e9\u30b0\u30a4\u30f3\u306e\u91cd\u8907
fileplugininstall.duplicate.desc=\u30d7\u30e9\u30b0\u30a4\u30f3 '%1' %2 \u306f\u65e2\u306b\u30a4\u30f3\u30b9\u30c8\u30fc\u30eb\u3055\u308c\u3066\u3044\u307e\u3059\u3002
azbuddy.online_status=\u30b9\u30c6\u30fc\u30bf\u30b9\uff1a
-azbuddy.os_away=Away
azbuddy.ui.menu.disconnect=\u5207\u65ad
-v3.buddy.menu.chat=\u30c1\u30e3\u30c3\u30c8
-v3.chat.offline=%1 \u306f\u73fe\u5728\u30aa\u30d5\u30e9\u30a4\u30f3\u3067\u3059\u3002\u3042\u306a\u305f\u306e\u30e1\u30c3\u30bb\u30fc\u30b8\u306f\u30aa\u30f3\u30e9\u30a4\u30f3\u306b\u306a\u3063\u305f\u5f8c\u306b\u5c4a\u304d\u307e\u3059\u3002
-v3.chat.wrongversion=%1 \u30c1\u30e3\u30c3\u30c8\u3092\u30b5\u30dd\u30fc\u30c8\u3057\u3066\u3044\u306a\u3044 Vuze \u3092\u4f7f\u7528\u3057\u3066\u3044\u307e\u3059\u3002
azbuddy.enable_chat_notif=\u30c1\u30e3\u30c3\u30c8\u306e\u7740\u4fe1\u3092\u901a\u77e5
-v3.buddies.dnd.info.dialog.text=Drop Share \u3092\u521d\u671f\u5316\u3057\u307e\u3057\u305f\u3002\u3042\u306a\u305f\u306e\u30b3\u30f3\u30c6\u30f3\u30c4\u306f\u5171\u6709\u306e\u6e96\u5099\u304c\u3067\u304d\u3066\u3044\u307e\u3059\u3002\u307e\u305f\u3001\u30b3\u30f3\u30c6\u30f3\u30c4\u306e\u6e96\u5099\u304c\u6574\u3046\u3068\u5171\u6709\u306e\u753b\u9762\u304c\u958b\u304d\u307e\u3059\u3002\n\n\u3042\u306a\u305f\u306f Friend \u304c\u30b3\u30f3\u30c6\u30f3\u30c4\u3092\u53d7\u4fe1\u3059\u308b\u307e\u3067 Vuze \u3092\u8d77\u52d5\u3057\u3066\u304a\u304f\u5fc5\u8981\u304c\u3042\u308a\u307e\u3059\u3002\n\u3053\u306e\u6a5f\u80fd\u306b\u3064\u3044\u3066\u8a73\u3057\u304f\u306f <A HREF="http://faq.vuze.com/?View=entry&EntryID=267">Click here</A> \u3092\u53c2\u7167\u3057\u3066\u304f\u3060\u3055\u3044\u3002
-v3.buddies.dnd.info.dialog.ok=OK
-v3.buddies.dnd.info.dialog.remember=\u4eca\u5f8c\u3053\u306e\u30e1\u30c3\u30bb\u30fc\u30b8\u3092\u8868\u793a\u3057\u306a\u3044
+iconBar.queue.tooltip=\u30ad\u30e5\u30fc
+MainWindow.menu.help.faq=FAQ
+TableColumn.header.#=No.
MainWindow.menu.help.donate=\u5bc4\u4ed8\u3092\u9001\u4ed8
diff --git a/org/gudy/azureus2/internat/MessagesBundle_ka_GE.properties b/org/gudy/azureus2/internat/MessagesBundle_ka_GE.properties
index f99166b..602009c 100644
--- a/org/gudy/azureus2/internat/MessagesBundle_ka_GE.properties
+++ b/org/gudy/azureus2/internat/MessagesBundle_ka_GE.properties
@@ -1,3 +1,4 @@
+#There is a plugin to help with internationalizing these bundles at http://azureus.sourceforge.net/plugin_list.php
MainWindow.menu.file.open.torrent=.torrent \u10e4\u10d0\u10d8\u10da\u10d8
Main.parameter.maxUploads=\u10d4\u10e0\u10d7\u10d3\u10e0\u10dd\u10e3\u10da\u10d8 \u10d0\u10e2\u10d5\u10d8\u10e0\u10d7\u10d5\u10d4\u10d1\u10e1\u10d8 \u10db\u10d0\u10e5\u10e1. \u10e0\u10d0\u10dd\u10d3\u10d4\u10dc\u10dd\u10d1\u10d0
Main.parameter.maxSpeed=\u10db\u10d0\u10e5\u10e1. \u10d0\u10e2\u10d5\u10d8\u10e0\u10d7\u10d5\u10d8\u10e1 \u10e1\u10d8\u10e9\u10e5\u10d0\u10e0\u10d4 \u10d1\u10d0\u10d8\u10e2\u10d8/\u10ec\u10db
@@ -462,7 +463,6 @@ openUrl.url=\u10d1\u10db\u10e3\u10da\u10d8 :
MyTorrentsView.menu.host.error.title=\u10e2\u10dd\u10e0\u10d4\u10dc\u10e2\u10d8\u10e1 \u10f0\u10dd\u10e1\u10e2\u10d8\u10dc\u10d2\u10d8 \u10e9\u10d0\u10d8\u10e8\u10d0\u10da\u10d0
MyTorrentsView.menu.host.error.message=\u10e2\u10dd\u10e0\u10d4\u10dc\u10e2\u10d8\u10e1 \u10f0\u10dd\u10e1\u10e2\u10d8\u10dc\u10d2\u10d8\u10e1\u10d0\u10e1 \u10e8\u10d4\u10d8\u10e5\u10db\u10dc\u10d0 \u10e8\u10d4\u10db\u10d3\u10d4\u10d2\u10d8 \u10de\u10e0\u10dd\u10d1\u10da\u10d4\u10db\u10d0
ConfigView.section.tracker=\u10db\u10d4\u10d7\u10d5\u10d0\u10da\u10e7\u10e3\u10e0\u10d4
-MainWindow.menu.help.faq=\u10d5\u10d8\u10d9\u10d8 \u10ee.\u10d3.\u10d9.
ConfigView.section.style.enableXPStyle=XP \u10e1\u10e2\u10d8\u10da\u10d8\u10e1 \u10e9\u10d0\u10e0\u10d7\u10d5\u10d0 (\u10e1\u10d0\u10ed\u10d8\u10e0\u10dd\u10d0 \u10d2\u10d0\u10d3\u10d0\u10e2\u10d5\u10d8\u10e0\u10d7\u10d5\u10d0)
ipCheckerWizard.explanations=\u10e8\u10d4\u10d2\u10d8\u10eb\u10da\u10d8\u10d0\u10d7 \u10d2\u10d0\u10db\u10dd\u10d8\u10e7\u10d4\u10dc\u10d7\u10dd\u10d7 \u10d4\u10e1 \u10dd\u10e1\u10e2\u10d0\u10e2\u10d8 \u10e0\u10d0\u10d7\u10d0 \u10d3\u10d0\u10d0\u10d3\u10d2\u10d8\u10dc\u10dd\u10d7 \u10d7\u10e5\u10d5\u10d4\u10dc\u10d8 \u10d2\u10d0\u10e0\u10d4 IP \u10db\u10d8\u10e1\u10d0\u10db\u10d0\u10e0\u10d7\u10d8. \u10d7\u10e3 \u10d7\u10e5\u10d5\u10d4\u10dc\u10d8 IP \u10d3\u10d8\u10dc\u10d0\u10db\u10d8\u10e3\u10e0\u10d8\u10d0 \u10d2\u10d8\u10e0\u10e9\u10d4\u10d5\u10d7 \u10d3\u10d0\u10e0\u10d4\u10d2\u10d8\u10e1\u10e2\u10e0\u10d8\u10e0\u10d3\u10d4\u10d7 Dynamic DNS \u10e1\u10d4\u10e0\u10d5\u10d8\u10e1\u10d6\u10d4. \u10e5\u10d5\u10d4\u10d5\u10d8\u10d7 \u10db\u10dd\u10e7\u10d5\u10d0\u10dc\u10d8\u10da\u10d8\u10d0 \u10e0\u10d0\u10db\u10dd\u10d3\u10d4\u10dc\u10d8\u10db\u10d4 \u10d0\u10e1\u10d4\u10d7\u10d8 \u10e1\u10d4\u10e0\u10d5\u10d8\u10e1\u10d8\u10e1 \u10db\u10d8\u10e1\u10d0\u10db\u10d0\u10e0\u10d7\u10d8. \u10e8\u10d4\u10db\u10d3\u10d4\u10d2 \u10e8\u10d8\u10e7\u10d5\u10d0\u10dc\u10d4\u10d7 IP \u10db\u10d8\u10e1\u10d0\u10db\u10d0\u10e0\u10d7\u10d8\u10e1 \u10dc\u10d0\u10ea\u10d5\u10da\u10d0\u10d3 \u10d7\u10e5\u10d5\u10d4\u10dc\u10d8 \u10d3\u10d8\u10dc\u10d0\u10db\u10d8\u10e3\u10e0\u10d8 \u10f0\u10dd\u10e1\u10e2\u10d8\u10e1 \u10e1\u10d0\u10ee\u10d4\u10da\u10d8 (\u10db\u10d0\u10d2. chemihostissaxeli.dyndns.org). \u10d8\u10db\u10d8\u10e1\u10d0\u10d7\u10d5\u10d8\u10e1 \u10e0\u10dd\u10db IP \u10db\u10d8\u10e1\u10d0\u10db\u10d0\u10e0\u10d7\u10d8\u10e1 \u10d3\u10d8\u10dc\u10d0\u10db\u10d8\u10e3\u10e0\u10db\u10d0 \u10ea\u10d5\u10da\u10d8\u10da\u10d4\u10d1\u10d0\u10db \u10d0\u10e0 \u10e8\u10d4\u10e5\u10dc\u10d0\u10e1 \u10de\u10e0\u10dd\u10d1\u10da\u10d4\u10db\u10d4\u10d1\u10d8 \u10d3\u10d0\u10d2\u10ed\u10d8\u10e0\u10d3\u10d4\u10d1\u10d0\u10d7 \u10de\u10e0\u10dd\u10d2\u10e0\u10d0\u10db\u10d0 \u10e0\u10dd\u10db\u10d4\u10da\u10d8\u10ea \u10d0\u10d5\u10e2\u10dd\u10db\u10d0\u10e2\u10e3\u10e0\u10d0\u10d3 \u10d2\u10d0\u10dc\u10d0\u10d0\u10ee\u10da\u10d4\u10d1\u10e1 \u10d7\u10e5\u10d5\u10d4\u10dc\u10e1 \u10d3\u10d8\u10dc\u10d0\u10db\u10d8\u10e3\u10e0 DNS \u10e1\u10d4\u10e0\u10d5\u10d8\u10e1\u10e1.
wizard.tracker.local=\u10d2\u10d0\u10db\u10dd\u10d8\u10e7\u10d4\u10dc\u10d4 \u10d0\u10d6\u10e3\u10e0\u10d4\u10e3\u10e1\u10e8\u10d8 \u10e9\u10d0\u10db\u10dd\u10dc\u10e2\u10d0\u10df\u10d4\u10d1\u10e3\u10da\u10d8 \u10db\u10d4\u10d7\u10d5\u10d0\u10da\u10e7\u10e3\u10e0\u10d4
@@ -483,7 +483,6 @@ splash.openViews=\u10ee\u10d4\u10d3\u10d8\u10e1 \u10d2\u10d0\u10ee\u10e1\u10dc\u
splash.plugin=\u10d8\u10e2\u10d5\u10d8\u10e0\u10d7\u10d4\u10d1\u10d0 \u10e9\u10d0\u10e1\u10db\u10e3\u10da\u10d8 \u10db\u10dd\u10d3\u10e3\u10da\u10d8 :
configureWizard.nat.tooManyPorts=\u10e2\u10d4\u10e1\u10e2\u10d8\u10e0\u10d4\u10d1\u10d8\u10e1\u10d7\u10d5\u10d8\u10e1 \u10e8\u10d4\u10e0\u10e9\u10d4\u10e3\u10da\u10d8\u10d0 \u10eb\u10d0\u10da\u10d8\u10d0\u10dc \u10d1\u10d4\u10d5\u10e0\u10d8 \u10de\u10dd\u10e0\u10e2\u10d8 (\u10db\u10d0\u10e5\u10e1\u10d8\u10db\u10e3\u10db\u10d8\u10d0 9)
ConfigView.section.color=\u10e4\u10d4\u10e0\u10d7\u10d0 \u10e1\u10e5\u10d4\u10db\u10d0
-PeerSocket.unknown=\u10e3\u10ea\u10dc\u10dd\u10d1\u10d8
MyTorrentsView.menu.publish=\u10d2\u10d0\u10db\u10dd\u10d0\u10e5\u10d5\u10d4\u10e7\u10dc\u10d4...
MyTrackerView.status.published=\u10d2\u10d0\u10db\u10dd\u10e5\u10d5\u10d4\u10e7\u10dc\u10d3\u10d0
MyTrackerView.completed=\u10d3\u10d0\u10e1\u10e0\u10e3\u10da\u10d4\u10d1\u10e3\u10da\u10d8\u10d0
@@ -494,9 +493,15 @@ ConfigView.section.file.decoder.nodecoder=\u10d0\u10e0\u10ea\u10d4\u10e0\u10d7\u
ConfigView.section.tracker.publicenable=\u10e9\u10d0\u10e0\u10d7\u10d4 \u10d2\u10d0\u10e0\u10d4\u10e8\u10d4 \u10e2\u10dd\u10e0\u10d4\u10dc\u10e2\u10d4\u10d1\u10d8
ConfigView.label.playdownloadspeech=\u10e9\u10d0\u10db\u10dd\u10e2\u10d5\u10d8\u10e0\u10d7\u10d5\u10d8\u10e1 \u10d3\u10d0\u10e1\u10e0\u10e3\u10da\u10d4\u10d1\u10d8\u10e1\u10d0\u10e1 \u10e8\u10d4\u10db\u10d0\u10e2\u10e7\u10dd\u10d1\u10d8\u10dc\u10d4 \u10e1\u10d8\u10e2\u10e7\u10d5\u10d8\u10d4\u10e0\u10d0\u10d3
ConfigView.label.playdownloadspeech.info=\u10db\u10d4\u10e2\u10e7\u10d5\u10d4\u10da\u10d4\u10d1\u10d8\u10e1 \u10e1\u10d4\u10e0\u10d5\u10d8\u10e1\u10d4\u10d1\u10d8 \u10e1\u10d0\u10e3\u10d9\u10d4\u10d7\u10d4\u10e1\u10dd\u10d3 \u10db\u10ee\u10dd\u10da\u10dd\u10d3 \u10d8\u10dc\u10d2\u10da\u10d8\u10e1\u10e3\u10e0\u10d0\u10d3 \u10db\u10e3\u10e8\u10d0\u10dd\u10d1\u10e1
+#
+# Tooltips
+#
GeneralView.label.status.pieces_available.tooltip=\u10d0\u10e9\u10d5\u10d4\u10dc\u10d4\u10d1\u10e1 \u10ee\u10d4\u10da\u10db\u10d8\u10e1\u10d0\u10ec\u10d5\u10d3\u10dd\u10db\u10d8 \u10dc\u10d0\u10ed\u10e0\u10d4\u10d1\u10d8\u10e1 \u10d0\u10e1\u10da\u10d4\u10d1\u10d8\u10e1 \u10e0\u10d0\u10dd\u10d3\u10d4\u10dc\u10dd\u10d1\u10d0\u10e1.\n\u10db\u10d0\u10e0\u10ef\u10d5\u10dc\u10d8\u10d5 \u10d2\u10d0\u10db\u10dd\u10e1\u10d0\u10ee\u10e3\u10da\u10d8 \u10e0\u10ea\u10ee\u10d5\u10d8 \u10d7\u10e3 1\u2013\u10d6\u10d4 \u10dc\u10d0\u10d9\u10da\u10d4\u10d1\u10d8\u10d0, \u10e8\u10d4\u10e1\u10d0\u10eb\u10da\u10dd\u10d0 \u10e8\u10d4\u10d2\u10d4\u10e5\u10db\u10dc\u10d0\u10d7 \u10e4\u10d0\u10d8\u10da\u10d8\u10e1 \u10e1\u10e0\u10e3\u10da\u10d0\u10d3 \u10e9\u10d0\u10db\u10dd\u10e5\u10d0\u10e9\u10d5\u10d8\u10e1 \u10de\u10e0\u10dd\u10d1\u10da\u10d4\u10db\u10d0.
GeneralView.label.trackerurl.tooltip=\u10d3\u10d0\u10ec\u10d9\u10d0\u10de\u10d4\u10d7 \u10d0\u10dc\u10dd\u10dc\u10e1\u10d8\u10e1 URL-\u10d8\u10e1 \u10d1\u10e3\u10e4\u10d4\u10e0\u10e8\u10d8 \u10d9\u10dd\u10de\u10d8\u10e0\u10d4\u10d1\u10d8\u10e1\u10d0\u10d7\u10d5\u10d8\u10e1
GeneralView.label.trackerurlopen.tooltip=\u10d3\u10d0\u10ec\u10d9\u10d0\u10de\u10d4\u10d7 \u10db\u10d4\u10d7\u10d5\u10da\u10e7\u10e3\u10e0\u10d8\u10e1 \u10db\u10d7\u10d0\u10d5\u10d0\u10e0 \u10d2\u10d5\u10d4\u10e0\u10d3\u10d6\u10d4 \u10d2\u10d0\u10e1\u10d0\u10e1\u10d5\u10da\u10d4\u10da\u10d0\u10d3
+#
+# 2.0.4.4
+#
ConfigView.section.style.guiUpdate=\u10d2\u10e0\u10d0\u10e4\u10d8\u10d9\u10e3\u10da\u10d8 \u10d8\u10dc\u10e2\u10d4\u10e0\u10e4\u10d4\u10d8\u10e1\u10d8\u10e1 \u10d2\u10d0\u10dc\u10d0\u10ee\u10da\u10d4\u10d1\u10d0 \u10e7\u10dd\u10d5\u10d4\u10da
ConfigView.section.style.reOrderDelay.never=\u10d0\u10e0\u10d0\u10e1\u10dd\u10d3\u10d4\u10e1
ConfigView.section.logging=\u10df\u10e3\u10e0\u10dc\u10d0\u10da\u10d8
@@ -606,6 +611,9 @@ iconBar.top.tooltip=\u10d3\u10d0\u10d3\u10d0\u10d8\u10e2\u10d0\u10dc\u10d4 \u10d
iconBar.bottom.tooltip=\u10d2\u10d3\u10d0\u10d8\u10e2\u10d0\u10dc\u10d4 \u10d1\u10dd\u10da\u10dd\u10e8\u10d8
TableColumn.header.health=\u10ef\u10d0\u10dc\u10db\u10e0\u10d7\u10d4\u10da\u10dd\u10d1\u10d0
MyTorrentsView.menu.health=\u10da\u10d4\u10d2\u10d4\u10dc\u10d3\u10d0
+#
+#2.0.7.0
+#
security.certtruster.title=\u10e3\u10e1\u10d0\u10e4\u10e0\u10d7\u10ee\u10dd\u10d4\u10d1\u10d8\u10e1 \u10e1\u10d4\u10e0\u10d7\u10d8\u10e4\u10d8\u10d9\u10d0\u10e2\u10d8\u10e1 \u10d2\u10d0\u10e4\u10e0\u10d7\u10ee\u10d8\u10da\u10d4\u10d1\u10d0
security.certtruster.intro=\u10e3\u10e1\u10e4\u10e0\u10d7\u10ee\u10dd\u10d4\u10d1\u10d8\u10e1 \u10e1\u10d4\u10e0\u10d7\u10d8\u10e4\u10d8\u10d9\u10d0\u10e2\u10d8 \u10d2\u10d0\u10ea\u10d4\u10db\u10e3\u10da\u10d8\u10d0 \u10d9\u10dd\u10db\u10de\u10d0\u10dc\u10d8\u10d8\u10e1 \u10db\u10d8\u10d4\u10e0, \u10e0\u10dd\u10db\u10d4\u10da\u10e1\u10d0\u10ea \u10d7\u10e5\u10d5\u10d4\u10dc \u10d0\u10e0 \u10d4\u10dc\u10d3\u10dd\u10d1\u10d8\u10d7
security.certtruster.resource=\u10e0\u10d4\u10e1\u10e3\u10e0\u10e1\u10d8:
@@ -649,6 +657,9 @@ configureWizard.nat.server.tcp_listen_port=\u10e8\u10d4\u10db\u10dd\u10db\u10d0\
ConfigView.section.sharing=\u10d2\u10d0\u10d6\u10d8\u10d0\u10e0\u10d4\u10d1\u10d0
ConfigView.section.style.dropdiraction.sharefolder=\u10d9\u10d0\u10e2\u10d0\u10da\u10dd\u10d2\u10d8\u10e1 \u10d2\u10d0\u10d6\u10d8\u10d0\u10e0\u10d4\u10d1\u10d0
ConfigView.section.style.dropdiraction.sharefoldercontents=\u10e8\u10d4\u10db\u10ea\u10d5\u10d4\u10da\u10dd\u10d1\u10d8\u10e1 \u10d2\u10d0\u10d6\u10d8\u10d0\u10e0\u10d4\u10d1\u10d0
+#
+# 2.0.7.x
+#
Categories.all=\u10e7\u10d5\u10d4\u10da\u10d0
Categories.uncategorized=\u10d9\u10d0\u10e2\u10d4\u10d2\u10dd\u10e0\u10d8\u10d8\u10e1 \u10d2\u10d0\u10e0\u10d4\u10e8\u10d4
CategoryAddWindow.message=\u10e8\u10d4\u10d8\u10e7\u10d5\u10d0\u10dc\u10d4 \u10d9\u10d0\u10e2\u10d4\u10d2\u10dd\u10e0\u10d8\u10d8\u10e1 \u10d3\u10d0\u10e1\u10d0\u10ee\u10d4\u10da\u10d4\u10d1\u10d0
@@ -697,7 +708,6 @@ ConfigView.text.ignore=\u10d8\u10d2\u10dc\u10dd\u10e0\u10d8\u10e0\u10d4\u10d1\u1
ConfigView.text.minutes=\u10ec\u10e3\u10d7\u10d4\u10d1\u10d8
ConfigView.text.any=\u10dc\u10d4\u10d1\u10d8\u10e1\u10db\u10d8\u10d4\u10e0\u10d8
DownloadManager.error.datamissing=\u10d3\u10d0\u10d9\u10d0\u10e0\u10d2\u10e3\u10da\u10d8\u10d0 \u10d8\u10dc\u10e4\u10dd\u10e0\u10db\u10d0\u10ea\u10d8\u10d0
-iconBar.queue.tooltip=\u10db\u10dd\u10da\u10dd\u10d3\u10d8\u10dc\u10d8\u10e1 \u10e1\u10d8\u10d0
MainWindow.menu.file.open.torrentforseeding=.torrent \u10e4\u10d0\u10d8\u10da\u10d8 (\u10d3\u10d0\u10e1\u10d0\u10d7\u10d4\u10e1\u10d0\u10d3)
MainWindow.menu.language.refresh=\u10d2\u10d0\u10dc\u10ee\u10da\u10d4\u10d1\u10d0
ManagerItem.forced=\u10e4\u10dd\u10e0\u10e1\u10d8\u10e0\u10d4\u10d1\u10e3\u10da\u10d8\u10d0
@@ -764,6 +774,9 @@ SpeedView.stats.uptime=\u10e1\u10d0\u10db\u10e3\u10e8\u10d0\u10dd \u10d3\u10e0\u
SpeedView.stats.now=\u10d0\u10ee\u10da\u10d0
SpeedView.stats.now.tooltip=\u10ef\u10d0\u10db\u10e3\u10e0\u10d8 (\u10de\u10e0\u10dd\u10e2\u10dd\u10d9\u10dd\u10da\u10d8)
AutoMigration.useralert=\u10d0\u10d6\u10e3\u10e0\u10d4\u10e3\u10e1\u10d8\u10e1 \u10db\u10dd\u10db\u10ee\u10db\u10d0\u10e0\u10d4\u10d1\u10da\u10d8\u10e1 \u10d9\u10dd\u10dc\u10e4\u10d8\u10d2\u10e3\u10e0\u10d0\u10ea\u10d8\u10d8\u10e1 \u10e4\u10d0\u10d8\u10da\u10d4\u10d1\u10d8\u10e1/\u10d9\u10d0\u10e2\u10d0\u10da\u10dd\u10d2\u10d4\u10d1\u10d8\u10e1 \u10d0\u10d5\u10e2\u10dd\u2013\u10db\u10d8\u10d2\u10e0\u10d0\u10ea\u10d8\u10d8\u10e1 \u10e8\u10d4\u10d3\u10d4\u10d2\u10d4\u10d1\u10d8s:\n\n%1\n\u10e7\u10d5\u10d4\u10da\u10d0\u10dc\u10d0\u10d8\u10e0\u10d8 \u10e8\u10ea\u10d3\u10dd\u10db\u10d0 \u10d0\u10d5\u10e2\u10dd\u10db\u10d0\u10e2\u10e3\u10e0\u10d0\u10d3 \u10db\u10d8\u10d2\u10e0\u10d8\u10e0\u10d3\u10d4\u10d1\u10d0.\n\u10dc\u10e3 \u10d3\u10d0\u10d2\u10d0\u10d5\u10d8\u10ec\u10e7\u10d3\u10d4\u10d1\u10d0\u10d7 \u10e4\u10d0\u10d8\u10da\u10d4\u10d1\u10d8 \u10e8\u10d4\u10dc\u10d0\u10ee\u10d5\u10d8\u10e1 \u10d2\u10d6\u10d4\u10d1\u10d8\u10e1 \u10d2\u10d0\u10dc\u10d0\u10ee\u10da\u10d4\u10d1\u10d0 \u10d7\u10e3 \u10db\u10d0\u10d7\u10d8 \u10db\u10d8\u10d2\u10e0\u10d0\u10ea\u10d8\u10d0 \u10d2\u10e1\u10e3\u10e0\u10d7!
+#
+# > 2.0.8.0
+#
OpenTorrentWindow.title=\u10d2\u10d0\u10ee\u10e1\u10d4\u10dc\u10d8 \u10e2\u10dd\u10e0\u10d4\u10dc\u10e2\u10d8(\u10d4\u10d1\u10d8)
OpenTorrentWindow.message=\u10d4\u10e5\u10e1\u10de\u10d4\u10e0\u10d8\u10db\u10d4\u10dc\u10e2\u10d8
OpenTorrentWindow.addFiles=\u10d3\u10d0\u10d0\u10db\u10d0\u10e2\u10d4 \u10e4\u10d0\u10d8\u10da\u10d4\u10d1\u10d8
@@ -953,6 +966,8 @@ ConfigView.section.tracker.publishenablepeerdetails=\u10de\u10d8\u10e0\u10d8\u10
MyTrackerView.badnat=\u10ea\u10e3\u10d3\u10d8 NAT
MyTrackerView.badnat.info=\u10db\u10d7\u10d4\u10e1\u10d5\u10d4\u10da\u10d4\u10d1\u10d8/\u10de\u10d8\u10e0\u10d4\u10d1\u10d8 \u10e0\u10dd\u10db\u10da\u10d4\u10d1\u10db\u10d0\u10ea \u10d5\u10d4\u10e0 \u10d2\u10d0\u10d8\u10d0\u10e0\u10d4\u10e1 NAT \u10e8\u10d4\u10db\u10dd\u10ec\u10db\u10d4\u10d1\u10d0, \u10d7\u10e3 \u10e9\u10d0\u10e0\u10d7\u10e3\u10da\u10d8\u10d0
ConfigView.section.file.perf.cache.enable=\u10e9\u10d0\u10e0\u10d7\u10d4 \u10e5\u10d4\u10e8\u10d8 \u10d3\u10d8\u10e1\u10d9\u10d6\u10d4
+#Removed
+#MyTorrentsView.menu.setSpeed=Set Upload Speed
MainWindow.menu.transfers=\u10e2\u10e0\u10d0\u10dc\u10e1\u10e4\u10d4\u10e0\u10d4\u10d1\u10d8
MainWindow.menu.transfers.startalltransfers=\u10e7\u10d5\u10d4\u10da\u10d0 \u10d3\u10d0\u10d8\u10ec\u10e7\u10d4
MainWindow.menu.transfers.stopalltransfers=\u10e7\u10d5\u10d4\u10da\u10d0 \u10e8\u10d4\u10d0\u10e9\u10d4\u10e0\u10d4
@@ -1027,8 +1042,6 @@ FilesView.path=\u10d2\u10d6\u10d0
FilesView.fullpath=\u10d0\u10e9\u10d5\u10d4\u10dc\u10d4 \u10e1\u10e0\u10e3\u10da\u10d8 \u10d2\u10d6\u10d0
FilesView.remaining=\u10d3\u10d0\u10e0\u10e9\u10d4\u10dc\u10d8\u10da\u10d8 \u10dc\u10d0\u10ed\u10e0\u10d4\u10d1\u10d8
TableColumn.header.trackername=\u10db\u10d4\u10d7\u10d5\u10d0\u10da\u10e7\u10e3\u10e0\u10d8\u10e1 \u10e1\u10d0\u10ee\u10d4\u10da\u10d8
-ConfigView.label.announceport=\u10db\u10d4\u10d7\u10d5\u10d0\u10da\u10e7\u10e3\u10e0\u10d8\u10e1 \u10d0\u10dc\u10dd\u10dc\u10e1\u10d8\u10e0\u10d4\u10d1\u10d0\u10d3\u10d8 \u10de\u10dd\u10e0\u10e2\u10d8\u10e1 \u10d8\u10d2\u10dc\u10dd\u10e0\u10d8\u10e0\u10d4\u10d1\u10d0
-ConfigView.label.announceport.tooltip=\u10e8\u10d4\u10d0\u10e2\u10e7\u10dd\u10d1\u10d8\u10dc\u10d4 \u10db\u10d4\u10d7\u10d5\u10d0\u10da\u10e7\u10e3\u10e0\u10d4\u10e1 \u10d2\u10d0\u10dc\u10e1\u10ee\u10d5\u10d0\u10d5\u10d4\u10d1\u10e3\u10da\u10d8 \u10de\u10dd\u10e0\u10e2\u10d8\u10e1 \u10e8\u10d4\u10e1\u10d0\u10ee\u10d4\u10d1 \u10e0\u10dd\u10db\u10d4\u10da\u10e1\u10d0\u10ea \u10e3\u10e1\u10db\u10d4\u10dc. \u10d3\u10d0\u10e2\u10dd\u10d5\u10d4 \u10ea\u10d0\u10e0\u10d8\u10d4\u10da\u10d8 \u10d7\u10e3 \u10d0\u10e0 \u10d2\u10d0\u10db\u10dd\u10d8\u10e7\u10d4\u10dc\u10d4\u10d1 \u10d0\u10db \u10dd\u10e4\u10ea\u10d8\u10d0\u10e1.
ConfigView.group.override=\u10de\u10d0\u10e0\u10d0\u10db\u10d4\u10e2\u10e0\u10d4\u10d1\u10d8\u10e1 \u10d8\u10d2\u10dc\u10dd\u10e0\u10d8\u10e0\u10d4\u10d1\u10d0
PeersView.menu.blockupload=\u10d1\u10da\u10dd\u10d9\u10d8\u10e1 \u10d0\u10e2\u10d5\u10d8\u10e0\u10d7\u10d5\u10d0
PeersView.state=\u10db\u10d3\u10d2\u10dd\u10db\u10d0\u10e0\u10d4\u10dd\u10d1\u10d0
@@ -1043,8 +1056,6 @@ ConfigView.section.connection.advanced=\u10e5\u10e1\u10d4\u10da\u10d8\u10e1 \u10
ConfigView.section.connection.advanced.mtu=\u10db\u10d0\u10e5\u10e1\u10d8\u10d0\u10db\u10da\u10e3\u10e0\u10d8 \u10d2\u10d0\u10d3\u10d0\u10e1\u10d0\u10ea\u10d4\u10db\u10d8 \u10d4\u10e0\u10d7\u10d4\u10e3\u10da\u10d8 (MTU)
ConfigView.section.connection.advanced.SO_RCVBUF=\u10e1\u10dd\u10d9\u10d4\u10e2\u10d8\u10e1 SO_RCVBUF \u10d6\u10dd\u10db\u10d0 [0: use OS default]
ConfigView.section.connection.advanced.SO_SNDBUF=\u10e1\u10dd\u10d9\u10d4\u10e2\u10d8\u10e1 SO_SNDBUF \u10d6\u10dd\u10db\u10d0 [0: use OS default]
-ConfigView.section.connection.advanced.IPTOS=\u10d2\u10d0\u10db\u10d0\u10d5\u10d0\u10da\u10d8 \u10de\u10d0\u10d9\u10d4\u10e2\u10d4\u10d1\u10d8\u10e1 \u10e1\u10d4\u10e0\u10d5\u10d8\u10e1\u10d8\u10e1 \u10e2\u10d8\u10de\u10d8 type-of-service (TOS) [ex. 0x02, 0x10]
-ConfigView.section.connection.advanced.IPTOS.tooltip=\u10e9\u10d0\u10d0\u10db\u10d0\u10e2\u10d4 \u10e2\u10e0\u10d0\u10e4\u10d8\u10d9\u10d8\u10e1 \u10d9\u10da\u10d0\u10e1\u10d8 / \u10e1\u10d4\u10e0\u10d5\u10d8\u10e1\u10d8\u10e1 \u10e2\u10d8\u10de\u10d8 (TOS) IP \u10e1\u10d0\u10d7\u10d0\u10e3\u10e0\u10e8\u10d8 \u10d2\u10d0\u10db\u10d0\u10d5\u10d0\u10da\u10d8 \u10de\u10d0\u10d9\u10d4\u10e2\u10d4\u10d1\u10d8\u10e1\u10d0\u10d7\u10d5\u10d8\u10e1.\n\u10d0\u10d6\u10e3\u10e0\u10d4\u10e3\u10e1\u10d8 \u10e1\u10e2\u10d0\u10dc\u10d3\u10d0\u10e0\u10e2\u10e3\u10da\u10d0\u10d3 \u10d0\u10e0 \u10d0\u10d5\u10e1\u10d4\u10d1\u10e1 \u10db\u10d0\u10e1, \u10d8\u10d2\u10e3\u10da\u10d8\u10e1\u10ee\u10db\u10d4\u10d1\u10d0 \u10e0\u10d0 \u10dd\u10de. \u10e1\u10d8\u10e1\u10e2\u10d4\u10db\u10d0 \u10d8\u10e6\u10d4\u10d1\u10e1 \u10d0\u10db \u10e4\u10e3\u10e5\u10ea\u10d8\u10d0\u10e1 \u10d7\u10d0\u10d5\u10d8\u10e1 \u10d7\u10d0\u10d5\u10d6\u10d4.\n\u10db\u10d0\u10d2: \u10db\u10dc\u10d8\u10e8\u10d5\u10dc\u10d4\u10da\u10dd\u10d1\u10d4\u10d1\u10d8 \u10d0\u10e0\u10d8\u10e1:\n0x02 for IPTOS_LOWCOST\n0x04 for IPTOS_RELIABILITY\n0x08 for IPTOS_THROUGHPUT\n0x10 for IPTOS_LOWDELAY\nNOTE: Underlying network implementations may ignore this value, \u10d4\u10e1 \u10dd\u10e4\u10ea\u10d8\u10d0 \u10d3\u10d0\u10db\u10dd\u10d9\u10d8\u10d3\u10d4\u10d1\u10e3\u10da\u10d8\u10d0 \u10dd\u10de. \u10e1\u10d8\u10e1\u10e2\u10d4\u10db\u10d8\u10e1 \u10d3\u10d0 JRE \u2013\u10e1 \u10d5\u10d4\u10e0\u10e1\u10d8\u10d0\u10d6\u10d4.
ConfigView.section.interface.confirm_torrent_removal=\u10d0\u10e9\u10d5\u10d4\u10dc\u10d4 \u10d3\u10d0\u10d3\u10d0\u10e1\u10e2\u10e3\u10e0\u10d4\u10d1\u10d8\u10e1 \u10d3\u10d8\u10d0\u10da\u10dd\u10d2\u10d8 torrent\u2013\u10d8\u10e1 \u10ec\u10d0\u10e8\u10da\u10d8\u10e1\u10d0\u10e1
ConfigView.section.interface.confirm_torrent_removal.tooltip=\u10d3\u10d0\u10d0\u10d3\u10d0\u10e1\u10e2\u10e3\u10e0\u10d4 \u10e0\u10dd\u10ea\u10d0 \u10e8\u10da\u10d8 \u10e2\u10dd\u10e0\u10d4\u10dc\u10e2\u10e1 \u10e9\u10d4\u10db\u10d8 \u10e2\u10dd\u10e0\u10d4\u10dc\u10e2\u10d4\u10d1\u10d8\u10e1 \u10e4\u10d0\u10dc\u10ef\u10e0\u10d8\u10d3\u10d0\u10dc.
MyTorrentsView.confirm_torrent_removal=\u10d3\u10d0\u10ec\u10e0\u10db\u10e3\u10dc\u10d4\u10d1\u10e3\u10da\u10d8 \u10ee\u10d0\u10e0 \u10ec\u10d0\u10e8\u10d0\u10da\u10dd?\n
@@ -1162,6 +1173,7 @@ MainWindow.menu.tools.nattest=NAT / \u10e5\u10e1\u10d4\u10da\u10e3\u10e0\u10d8 \
Button.apply=\u10d2\u10d0\u10db\u10dd\u10e7\u10d4\u10dc\u10d4\u10d1\u10d0
Button.close=\u10d3\u10d0\u10ee\u10e3\u10e0\u10d5\u10d0
window.welcome.title=\u10db\u10dd\u10d2\u10d4\u10e1\u10d0\u10da\u10db\u10d4\u10d1\u10d0\u10d7 \u10d0\u10d6\u10e3\u10e0\u10d4\u10e3\u10e1\u10d8 %1
+#file can be a URL or a path in the jar
MainWindow.menu.help.releasenotes=\u10e0\u10d4\u10da\u10d8\u10d6\u10d8\u10e1 \u10d3\u10d4\u10e2\u10d0\u10da\u10d4\u10d1\u10d8
DHTView.transport.title=\u10e2\u10e0\u10d0\u10dc\u10e1\u10de\u10dd\u10e0\u10e2\u10d8\u10e1 \u10d3\u10d4\u10e2\u10d0\u10da\u10d4\u10d1\u10d8
DHTView.operations.title=\u10dd\u10de\u10d4\u10e0\u10d0\u10ea\u10d8\u10d8\u10e1 \u10d3\u10d4\u10e2\u10d0\u10da\u10d4\u10d1\u10d8
@@ -1191,8 +1203,8 @@ MyTorrentsView.menu.movetorrent=\u10d2\u10d0\u10d3\u10d0\u10d8\u10e2\u10d0\u10dc
ConfigView.label.queue.maxactivetorrentswhenseeding=\u10db\u10d0\u10e5\u10e1\u10d8\u10db\u10e3\u10db\u10d8 \u10db\u10ee\u10dd\u10da\u10dd\u10d3 \u10d7\u10d4\u10e1\u10d5\u10d8\u10e1\u10d0\u10e1 [0:\u10e8\u10d4\u10e3\u10d6\u10e6\u10e3\u10d3\u10d0\u10d5\u10d0\u10d3]
Views.plugins.IRC.title=IRC - \u10dd\u10dc\u10da\u10d0\u10d8\u10dc \u10e2\u10d4\u10d0\u10dc\u10d8\u10d9\u10e3\u10e0\u10d8 \u10db\u10dd\u10db\u10e1\u10d0\u10ee\u10e3\u10e0\u10d4\u10dd\u10d1\u10d0
ConfigView.section.ipfilter.persistblocking=\u10d3\u10d0\u10d1\u10da\u10dd\u10d9\u10d8\u10da\u10d8 IP \u10d3\u10d4\u10e2\u10d0\u10da\u10d4\u10d1\u10d8\u10e1 \u10e8\u10d4\u10dc\u10d0\u10ee\u10d5\u10d0 \u10d2\u10d0\u10d3\u10d0\u10e2\u10d5\u10d8\u10e0\u10d7\u10d5\u10d4\u10d1\u10d8\u10e1\u10d0\u10e1
-FilesView.rename.choose.path=\u10e8\u10d4\u10d0\u10e0\u10e9\u10d8\u10d4 \u10d0\u10ee\u10d0\u10da\u10d8 \u10d0\u10dc \u10d0\u10e0\u10e1\u10d4\u10d1\u10e3\u10da\u10d8 \u10e4\u10d0\u10d8\u10da\u10d8
FilesView.menu.rename=\u10e1\u10d0\u10ee\u10d4\u10da\u10d8\u10e1 \u10d0\u10dc \u10db\u10d3\u10d4\u10d1\u10d0\u10e0\u10d4\u10dd\u10d1\u10d8\u10e1 \u10e8\u10d4\u10ea\u10d5\u10da\u10d0
+FilesView.rename.choose.path=\u10e8\u10d4\u10d0\u10e0\u10e9\u10d8\u10d4 \u10d0\u10ee\u10d0\u10da\u10d8 \u10d0\u10dc \u10d0\u10e0\u10e1\u10d4\u10d1\u10e3\u10da\u10d8 \u10e4\u10d0\u10d8\u10da\u10d8
FilesView.rename.confirm.delete.title=\u10d3\u10d0\u10d3\u10d0\u10e1\u10e2\u10e3\u10e0\u10d4\u10d7 \u10ec\u10d0\u10e8\u10da\u10d0
FilesView.rename.confirm.delete.text=\u10d3\u10d0\u10d0\u10d3\u10d0\u10e1\u10e2\u10e3\u10e0\u10d4\u10d7 \u10dd\u10e0\u10d8\u10d2\u10d8\u10dc\u10d0\u10da\u10d8 \u10e4\u10d0\u10d8\u10da\u10d8\u10e1 '%1' \u10ec\u10d0\u10e8\u10da\u10d0
ConfigView.section.mode=\u10e0\u10d4\u10df\u10d8\u10db\u10d8
@@ -1246,6 +1258,7 @@ PeersView.BlockView.Transfer=\u10e2\u10e0\u10d0\u10dc\u10e1\u10e4\u10d4\u10e0\u1
PeersView.BlockView.NextRequest=\u10e8\u10d4\u10db\u10d3\u10d4\u10d2\u10d8 \u10db\u10dd\u10d7\u10ee\u10dd\u10d5\u10dc\u10d0
PeersView.BlockView.title=\u10dc\u10d0\u10ed\u10e0\u10d4\u10d1\u10d8\u10e1 \u10e0\u10e3\u10e5\u10d0
PeersView.BlockView.AvailCount=\u10ee\u10d4\u10da\u10db\u10d8\u10e1\u10d0\u10ec\u10d5\u10d3\u10dd\u10db\u10d8 \u10e0\u10d0\u10dd\u10d3\u10d4\u10dc\u10dd\u10d1\u10d0
+# %1 = "in kbps" or ""; %2 = "upload" or "download"
MyTorrentsView.dialog.setNumber.download=\u10e9\u10d0\u10db\u10dd\u10e2\u10d5\u10d8\u10e0\u10d7\u10d5\u10d0
OpenTorrentWindow.torrentLocation=\u10e2\u10dd\u10e0\u10d4\u10dc\u10e2 \u10e4\u10d0\u10d8\u10da\u10d4\u10d1\u10d8:
OpenTorrentWindow.addFiles.URL=\u10d3\u10d0\u10d0\u10db\u10d0\u10e2\u10d0 &URL
@@ -1311,6 +1324,7 @@ MyTorrentsView.dialog.setFilter.title=\u10e4\u10d8\u10da\u10e2\u10e0\u10d8\u10e1
MyTorrentsView.clearFilter.tooltip=\u10e4\u10d8\u10da\u10e2\u10e0\u10d8\u10e1 \u10d2\u10d0\u10e1\u10e3\u10e4\u10d7\u10d0\u10d5\u10d4\u10d1\u10d0
ConfigureWizard.language.choose=\u10e8\u10d4\u10d0\u10e0\u10e9\u10d8\u10d4 \u10d4\u10dc\u10d0 \u10e5\u10d5\u10d4\u10db\u10dd\u10d7 \u10db\u10dd\u10ea\u10d4\u10db\u10e3\u10da\u10d8 \u10e1\u10d8\u10d8\u10d3\u10d0\u10dc:
popup.closing.in=\u10e4\u10d0\u10dc\u10ef\u10e0\u10d8\u10e1 \u10d0\u10d5\u10e2\u10dd\u10db\u10d0\u10e2\u10e3\u10e0\u10d8 \u10d3\u10d0\u10ee\u10e3\u10e0\u10d5\u10d0 %1 \u10ec\u10d0\u10db\u10e8\u10d8
+# > 2402
ConfigView.auto=\u10d0\u10d5\u10e2\u10dd\u10db\u10d0\u10e2\u10e3\u10e0\u10d8
Plugin.localtracker.autoadd.info=\u10d0\u10db \u10da\u10dd\u10d9\u10d0\u10da\u10e3\u10e0\u10d8 \u10de\u10d8\u10e0\u10d4\u10d1\u10d8\u10e1 \u10d0\u10d5\u10e2\u10dd\u10db\u10d0\u10e2\u10e3\u10e0\u10d8 \u10d3\u10d0\u10db\u10d0\u10e2\u10d4\u10d1\u10d0 [';' \u10d2\u10d0\u10db\u10dd\u10e7\u10dd\u10e4\u10d8\u10da\u10d8 \u10db\u10d8\u10e1\u10d0\u10db\u10d0\u10e0\u10d7\u10d4\u10d1\u10d8, \u10db\u10d0\u10d2. 1.2.3.4]
Plugin.localtracker.networks=\u10da\u10dd\u10d9\u10d0\u10da\u10e3\u10e0\u10d8 \u10e5\u10e1\u10d4\u10da\u10d4\u10d1\u10d8
@@ -1343,5 +1357,9 @@ Content.alert.notuploaded.quit=\u10d3\u10d0\u10ee\u10e3\u10e0\u10d4 \u10d0\u10d6
TorrentInfoView.torrent.encoding=\u10e2\u10dd\u10e0\u10d4\u10dc\u10e2\u10d8\u10e1 \u10d9\u10dd\u10d3\u10d8\u10e0\u10d4\u10d1\u10d0
progress.window.title=\u10db\u10d8\u10db\u10d3\u10d8\u10dc\u10d0\u10e0\u10d4\u10dd\u10d1\u10e1 \u10dd\u10de\u10d4\u10e0\u10d0\u10ea\u10d8\u10d0
ConfigView.label.please.visit.here=\u10d3\u10d4\u10e2\u10d0\u10da\u10d4\u10d1\u10d8\u10e1\u10d7\u10d5\u10d8\u10e1 \u10d8\u10ee\u10d8\u10da\u10d4\u10d7
+# Used for peers which we can't determine.
+PeerSocket.unknown=\u10e3\u10ea\u10dc\u10dd\u10d1\u10d8
+ConfigView.label.announceport=\u10db\u10d4\u10d7\u10d5\u10d0\u10da\u10e7\u10e3\u10e0\u10d8\u10e1 \u10d0\u10dc\u10dd\u10dc\u10e1\u10d8\u10e0\u10d4\u10d1\u10d0\u10d3\u10d8 \u10de\u10dd\u10e0\u10e2\u10d8\u10e1 \u10d8\u10d2\u10dc\u10dd\u10e0\u10d8\u10e0\u10d4\u10d1\u10d0
+iconBar.queue.tooltip=\u10db\u10dd\u10da\u10dd\u10d3\u10d8\u10dc\u10d8\u10e1 \u10e1\u10d8\u10d0
+MainWindow.menu.help.faq=\u10d5\u10d8\u10d9\u10d8 \u10ee.\u10d3.\u10d9.
MainWindow.menu.help.donate=\u10d2\u10d0\u10d0\u10d9\u10d4\u10d7\u10d4 \u10e4\u10e3\u10da\u10d0\u10d3\u10d8 \u10e8\u10d4\u10db\u10dd\u10ec\u10d8\u10e0\u10e3\u10da\u10dd\u10d1\u10d0 !!!
-# The remaining keys were not in MessagesBundle.properties
diff --git a/org/gudy/azureus2/internat/MessagesBundle_km_KH.properties b/org/gudy/azureus2/internat/MessagesBundle_km_KH.properties
index 36e4d0a..9ccecbe 100644
--- a/org/gudy/azureus2/internat/MessagesBundle_km_KH.properties
+++ b/org/gudy/azureus2/internat/MessagesBundle_km_KH.properties
@@ -1,3 +1,4 @@
+#There is a plugin to help with internationalizing these bundles at http://azureus.sourceforge.net/plugin_list.php
ConfigView.section.files=\u17af\u1780\u179f\u17b6\u179a
FileItem.write=\u179f\u179a\u179f\u17c1\u179a
FileItem.read=\u1791\u17b6\u1794
@@ -37,6 +38,12 @@ importTorrentWizard.importfile.path=\u1795\u17d2\u179b\u17bc\u179c
importTorrentWizard.importfile.browse=\u179a\u1780\u1798\u17be\u179b
fileDownloadWindow.status=\u179f\u17d2\u1790\u17b6\u1793\u1797\u17b6\u1796 :
fileDownloadWindow.state_error=\u1780\u17c6\u17a0\u17bb\u179f :
+#
+# Tooltips
+#
+#
+# 2.0.4.4
+#
columnChooser.title=\u1787\u17d2\u179a\u17be\u179f\u1787\u17bd\u179a\u1788\u179a\u178a\u17be\u1798\u17d2\u1794\u17b8\u1794\u1784\u17d2\u17a0\u17b6\u1789
columnChooser.move=\u1791\u17b6\u1789\u1787\u17bd\u179a\u178a\u17c1\u1780\u178a\u17be\u1798\u17d2\u1794\u17b8\u1785\u17b6\u178f\u17cb\u179b\u17c6\u178a\u17b6\u1794\u17cb
columnChooser.apply=\u17a2\u1793\u17bb\u179c\u178f\u17d2\u178f\u17b7
@@ -46,6 +53,12 @@ authenticator.title=\u178f\u17d2\u179a\u17bc\u179c\u1780\u17b6\u179a\u1780\u17b6
authenticator.realm=\u1796\u17d2\u179a\u17c6\u178a\u17c2\u1793
authenticator.user=\u1788\u17d2\u1798\u17c4\u17c7\u17a2\u17d2\u1793\u1780\u1794\u17d2\u179a\u17be
authenticator.password=\u1796\u17b6\u1780\u17d2\u1799\u179f\u1798\u17d2\u1784\u17b6\u178f\u17cb
+#
+#2.0.7.0
+#
+#
+# 2.0.7.x
+#
Categories.all=\u1791\u17b6\u17c6\u1784\u17a2\u179f\u17cb
Categories.uncategorized=\u1798\u17b7\u1793\u1794\u17c2\u1784\u1785\u17c2\u1780\u1794\u17d2\u179a\u1797\u17c1\u1791
CategoryAddWindow.message=\u178a\u17b6\u1780\u17cb\u1788\u17d2\u1798\u17c4\u17c7\u1794\u17d2\u179a\u1797\u17c1\u1791 \u1790\u17d2\u1798\u17b8
@@ -55,6 +68,9 @@ AlertMessageBox.warning=\u1780\u17b6\u179a\u1796\u17d2\u179a\u1798\u17b6\u1793
AlertMessageBox.comment=\u1796\u178f\u17cc\u1798\u17b6\u1793
AlertMessageBox.information=\u1796\u178f\u17cc\u1798\u17b6\u1793
AutoMigration.useralert=\u1796\u178f\u17cc\u1798\u17b6\u1793\u1780\u17c2\u179f\u1798\u17d2\u179a\u17bd\u179b\u179a\u1794\u179f\u17cb\u17a2\u17d2\u1793\u1780\u1794\u17d2\u179a\u17be Vuze /dirs \u1795\u179b\u179a\u1794\u179f\u17cb\u1780\u17b6\u179a\u1795\u17d2\u179b\u17b6\u179f\u17cb\u1791\u17b8\u178a\u17c4\u1799\u179f\u17d2\u179c\u17d0\u1799\u1794\u17d2\u179a\u179c\u178f\u17d2\u178f\u17b7:\n\n%1\n\u1780\u17d2\u1793\u17bb\u1784\u1780\u17c6\u17a0\u17bb\u179f\u1793\u17b7\u1798\u17bd\u1799\u17d7 \u178f\u17d2\u179a\u17bc\u179c\u1792\u17d2\u179c\u17be\u1780\u17b6\u179a\u1795\u17d2\u179b\u17b6\u179f\u17cb\u1791\u17b8\u178a\u17c4\u1799\u1781\u17d2\u179b\u17bd\u1793\u17af\u1784\n\u1780\u17bb\u17c6\u1797\u17d2\u179b\u17c1\u1785\u1780\u17c2\u179f\u1798\u17d2\u179a\u17bd\u179b\u1790\u178f\u179f\u1798\u17d2\u179a\u17b6\u1794\u17cb\u1795\u17d2\u1791\u17bb\u1780\u1780\u17b6\u179a\u1780\u17c2\u1794\u17d2\u179a\u17c2 \u1794\u17be\u179f\u17b7\u1793\u1787\u17b6\u179c\u17b6\u178f\u17d2\u179a\u17bc\u179c\u1794\u17b6\u1793\u1795\u17d2\u179b\u17b6\u179f\u17cb\u1791\u17b8
+#
+# > 2.0.8.0
+#
Button.revert=\u178f\u17d2\u179a\u17a1\u1794\u17cb\u1791\u17c5\u178a\u17be\u1798
Button.yes=\u1794\u17b6\u1791
Button.no=\u1791\u17c1
@@ -82,8 +98,9 @@ FilesView.path=\u1795\u17d2\u179b\u17bc\u179c
Button.abort=\u1794\u17c4\u17c7\u1794\u1784\u17cb
Button.apply=\u17a2\u1793\u17bb\u179c\u178f\u17d2\u178f
Button.close=\u1794\u17b7\u1791
+#file can be a URL or a path in the jar
ActivityView.legend.limit=\u1780\u17c6\u178e\u178f\u17cb\u17a2\u178f\u17d2\u179a\u17b6
ActivityView.legend.peeraverage=\u1798\u1792\u17d2\u1799\u1798
+# %1 = "in kbps" or ""; %2 = "upload" or "download"
Button.moveUp=\u1795\u17d2\u179b\u17b6\u179f\u17cb\u1791\u17b8\u17a1\u17be\u1784
Button.moveDown=\u1795\u17d2\u179b\u17b6\u179f\u17cb\u1791\u17b8\u1785\u17bb\u17c7
-# The remaining keys were not in MessagesBundle.properties
diff --git a/org/gudy/azureus2/internat/MessagesBundle_ko_KR.properties b/org/gudy/azureus2/internat/MessagesBundle_ko_KR.properties
index fe544d6..4116b44 100644
--- a/org/gudy/azureus2/internat/MessagesBundle_ko_KR.properties
+++ b/org/gudy/azureus2/internat/MessagesBundle_ko_KR.properties
@@ -717,7 +717,6 @@ ConfigView.section.style.alwaysRefreshMyTorrents.tooltip=\uc774 \uc120\ud0dd\uc0
#
#2.0.7.0
#
-ConfigView.section.style.verticaloffset=\uadf8\ub798\ud53d \uc138\ub85c \ub2e8 (GTK \uace0\uc815)
security.certtruster.title=\ubcf4\uc548 \uc778\uc99d\uc11c \uacbd\uace0
security.certtruster.intro=\ubcf4\uc548 \uc778\uc99d\uc11c\uac00 \uc2e0\ub8b0\ub418\uc9c0 \uc54a\uc740 \uae30\uad00\uc5d0\uc11c \ubc1c\uae09\ub418\uc5c8\uc2b5\ub2c8\ub2e4.
security.certtruster.resource=\uc790\uc6d0:
@@ -1735,9 +1734,7 @@ ConfigView.section.style.showiconbar=\ub3c4\uad6c \ud45c\uc2dc\uc904 \ubcf4\uae3
MainWindow.menu.view.iconbar=\ub3c4\uad6c \ud45c\uc2dc\uc904
MyTorrentsView.menu.rename=\uc774\ub984\ubc14\uafb8\uae30
MyTorrentsView.menu.rename.displayed=\ubcf4\uc774\ub294 \uc774\ub984\ubc14\uafb8\uae30
-MyTorrentsView.menu.rename.displayed_and_save_path=\ub458\ub2e4 \uc774\ub984\ubc14\uafb8\uae30
MyTorrentsView.menu.rename.displayed.enter.title=\ubcf4\uc774\ub294 \uc774\ub984\ubc14\uafb8\uae30
-MyTorrentsView.menu.rename.displayed_and_save_path.enter.title=\ub0b4\ub824\ubc1b\uae30 \uc774\ub984\ubc14\uafb8\uae30
MyTorrentsView.menu.edit_comment=\ub367\ub9d0 \uc218\uc815
MyTorrentsView.menu.edit_comment.enter.title=\ub367\ub9d0 \uc218\uc815
MyTorrentsView.menu.edit_comment.enter.message=\ub0b4\ub824\ubc1b\uae30 \uc790\ub8cc\uc5d0 \ub367\ub9d0\uc744 \uc785\ub825 \ud569\ub2c8\ub2e4.
@@ -1869,7 +1866,6 @@ v3.MainWindow.button.comment=\ub367\ub9d0
v3.MainWindow.button.viewdetails=\uc18d\uc131
v3.MainWindow.button.play=\uc7ac\uc0dd
v3.MainWindow.button.cancel=\ucde8\uc18c
-v3.MainWindow.button.sendtofriend=\uacf5\uc720 \ud1a0\ub7f0\ud2b8
v3.MainWindow.button.preview=\ud504\ub9ac\ubdf0
v3.MainWindow.view.wait=\uc678\ud615\uc744 \ucd08\uae30\ud654\uc911\uc785\ub2c8\ub2e4. \uc7a0\uc2dc\ub9cc \uae30\ub2e4\ub824 \uc8fc\uc138\uc694.
v3.MainWindow.xofx=%1 \uc758 %2
@@ -2087,48 +2083,16 @@ Button.bar.share=\uacf5\uc720
Button.bar.add=\ucd94\uac00
Button.bar.edit=\ud3b8\uc9d1
Button.bar.edit.cancel=\ud3b8\uc9d1 \uc644\ub8cc
-v3.Share.menu=\uacf5\uc720 \uc790\ub8cc
-v3.Share.header=\uacf5\uc720
-v3.Share.header.message=\uce5c\uad6c\ub4e4\uacfc \uacf5\uc720\ud558\uac70\ub098, \uc0c8\ub85c\uc6b4 \uce5c\uad6c\ub97c \ucd94\uac00\ud560 \uc218 \uc788\uc2b5\ub2c8\ub2e4.
-v3.Share.add.buddy=\uce5c\uad6c \ucd94\uac00
-v3.Share.add.edit.buddy=\uce5c\uad6c \ucd94\uac00/\ubcc0\uacbd
-v3.Share.add.buddy.all=\ubaa8\ub4e0 \uce5c\uad6c\uc640 \uacf5\uc720
-v3.Share.add.buddy.existing=\ubaa8\ub4e0 \uce5c\uad6c :
-v3.Share.add.buddy.new=\uc0c8\ub85c\uc6b4 \uce5c\uad6c :
-v3.Share.buddies=\uce5c\uad6c
-v3.Share.invitees=\ucd08\ub300\ud560 \uce5c\uad6c
-v3.Share.invite.buddies.prompt=\ub354\ub9ce\uc740 \uce5c\uad6c\uc640 \uc790\ub8cc\ub97c \uacf5\uc720\ud558\uc138\uc694.
-v3.Share.send.now=\ubcf4\ub0b4\uae30
-v3.Share.optional.message=\uc54c\ub9bc\uc744 \ud1b5\ud574 \ucd94\uac00 \ub0b4\uc6a9 \uc804\ub2ec. (\ucd5c\ub300 140 \uae00\uc790, \uc601\ubb38\uae30\uc900):
-v3.Share.disclaimer=\uadc0\ub754: \uacf5\uc720\ud55c \uc790\ub8cc \ubaa8\ub450\ub294 \uc774 \ucd94\uac00 \uba54\uc138\uc9c0\uc640 \ud568\uaed8 \uc554\ud638\ud654 \ub429\ub2c8\ub2e4.
-v3.Share.disclaimer.link=\ub354 \uc54c\uc544\ubcf4\uae30
-v3.buddy.menu.viewprofile=\ud504\ub85c\ud544 \ubcf4\uae30
-v3.buddy.menu.remove=\uce5c\uad6c \uc0ad\uc81c
v3.MainWindow.menu.view.pluginbar=\ucd94\uac00\uae30\ub2a5 \ud45c\uc2dc\uc904
-v3.MainWindow.menu.view.buddies-viewer=\uce5c\uad6c \ud45c\uc2dc\uc904
-v3.activity.buddy-request=%1\uac00 \uce5c\uad6c\uc218\ub77d\uc744 \ud558\uc600\uc2b5\ub2c8\ub2e4
-v3.activity.buddy-request.accept=\uc218\ub77d
-v3.activity.buddy-request.multi=%1\ub85c\ubd80\ud130 \uce5c\uad6c\uc218\ub77d[#%3]\uc744 \ubc1b\uc558\uc2b5\ub2c8\ub2e4
-v3.activity.buddy-linkup=%1\uc640 \uce5c\uad6c\uac00 \ub418\uc5c8\uc2b5\ub2c8\ub2e4
-v3.activity.share-content=%1\uac00 %2\ub97c \uacf5\uc720\ud569\ub2c8\ub2e4. %3 <A HREF="%4" TITLE="%5">%1...</A>
-v3.buddies.friends=\uce5c\uad6c
-v3.buddies.online=\uc628\ub77c\uc778 (%1)
-v3.buddies.remove=\uce5c\uad6c \uc0ad\uc81c
-v3.buddies.add.to.share=\uce5c\uad6c \uacf5\uc720 \ucd94\uac00
MainWindow.dialog.select.vuze.file=Vuze \ud30c\uc77c \uc120\ud0dd
MainWindow.menu.file.open.vuze=Vuze \ud30c\uc77c...
-azbuddy.ui.dialog.disable.title=\uce5c\uad6c \ucd94\uac00\uae30\ub2a5 \uc791\ub3d9\uc911\uc9c0
-azbuddy.ui.dialog.disable.text=\uce5c\uad6c \ucd94\uac00\uae30\ub2a5\uc758 \uc791\ub3d9\uc744 \uc911\ub2e8\ud569\ub2c8\ub2e4. \uce5c\uad6c \ud45c\uc2dc\uc904\uc5d0\uc11c \uce5c\uad6c\uc640 \uacf5\uc720, \uce5c\uad6c\ubaa9\ub85d \uc815\ub9ac\ub4f1\uc758 \uae30\ub2a5\uc744 \uc0ac\uc6a9\ud560 \uc218 \uc5c6\uc2b5\ub2c8\ub2e4.\n\n\uce5c\uad6c\uae30\ub2a5\uc758 \uc791\ub3d9\uc744 \uc911\ub2e8\ud558\uc2dc\uaca0\uc2b5\ub2c8\uae4c?
metasearch.addtemplate.title=\uac80\uc0c9\ud55c \uc591\uc2dd\uc744 \uc124\uce58\ud560\uae4c\uc694?
v3.share.private.title=\ud1a0\ub7f0\ud2b8 \uacf5\uc720
v3.share.private.text=\uc120\ud0dd\ub41c \ud1a0\ub7f0\ud2b8\ub294 \ube44\uacf5\uac1c \ud1a0\ub7f0\ud2b8 \uc785\ub2c8\ub2e4.\n\n\ube44\uacf5\uac1c \ud1a0\ub7f0\ud2b8\ub294 \uacf5\uc720\ud560 \uc218 \uc5c6\uc2b5\ub2c8\ub2e4.
-v3.buddies.disabled.title=\uce5c\uad6c \ucd94\uac00\uae30\ub2a5 \uc791\ub3d9\uc911\uc9c0
metasearch.addtemplate.dup.title=\uc591\uc2dd \ubcf5\uc0ac
metasearch.addtemplate.dup.desc=\uac80\uc0c9\ud55c \uc591\uc2dd %1\uc740 \uc774\ubbf8 \uc124\uce58\ub418\uc5b4 \uc788\uc2b5\ub2c8\ub2e4.
metasearch.export.select.template.file=\uc591\uc2dd \uc800\uc7a5
metasearch.import.select.template.file=\uc591\uc2dd \uc5f4\uae30
-v3.MainWindow.button.newtag.share=\uc2e0\uaddc! \uacf5\uc720 \ud1a0\ub7f0\ud2b8
-v3.buddies.faq=\ub354 \uc54c\uc544\ubcf4\uae30
dialog.uiswitch.title=Vuze UI \ubcc0\uacbd
dialog.uiswitch.text=\uc774 \uae30\ub2a5\uc744 \uc0ac\uc6a9\ud558\ub824\uba74 Vuze UI\ub97c \uc791\ub3d9\uc2dc\ucf1c\uc57c \ud569\ub2c8\ub2e4.\n\nVuze\ub97c \ub2e4\uc2dc\uc2dc\uc791 \ud569\ub2c8\ub2e4.
dialog.uiswitch.button=Vuze UI\ub85c \ubcc0\uacbd
@@ -2136,16 +2100,9 @@ azbuddy.tracker.enabled=\uce5c\uad6c\uc640 \ub0b4\ub824\ubc1b\uae30\uc2dc '\uce5
azbuddy.protocolspeed=\uce5c\uad6c\ub85c\ubd80\ud130 \uc624\ubc84\ud5e4\ub4dc \ud504\ub85c\ud1a0\ucf5c \ucd5c\ub300\uac12 KB/s
v3.MainWindow.button.download=\ub0b4\ub824\ubc1b\uae30
v3.MainWindow.button.run=\ub0b4\ub824\ubc1b\uc740 \ud30c\uc77c \uc2e4\ud589
-v3.activity.header.friend.requests.foryou=\uce5c\uad6c\uc694\uccad - \ub098\uc5d0\uac8c
-v3.activity.header.friend.requests.fromyou=\uce5c\uad6c\uc694\uccad - \ub098\ub85c\ubd80\ud130
-v3.activity.header.friend.requests.accepted=\uce5c\uad6c\uc694\uccad - \uc218\ub77d
-v3.activity.header.share.requests=\ud1a0\ub7f0\ud2b8 \uacf5\uc720 \uc694\uccad
v3.activity.header.downloads=\ub0b4\ub824\ubc1b\uae30
-v3.activity.header.rating.reminders=\ube44\uc728 \ub3c5\ucd09\uc7a5
v3.activity.header.vuze.news=Vuze \uc0c8\uc18c\uc2dd
-login.optional.message=\uc774\uae30\ub2a5\uc744 \uc0ac\uc6a9\ud558\ub824\uba74 \ub85c\uadf8\uc778 \ud574\uc57c \ud569\ub2c8\ub2e4
message.status.success=\uc131\uacf5
-message.intro.friends=\uce5c\uad6c\ub97c \ucd94\uac00\ud558\uc138\uc694.\n\ud1a0\ub80c\ud2b8\ub97c \uacf5\uc720\ud558\uc138\uc694.\n\uadf8\ub9ac\uace0 \ub354\ube68\ub9ac \ub0b4\ub824\ubc1b\uc73c\uc138\uc694.
azbuddy.tracker.bbb.status.title=\uce5c\uad6c \uac00\uc18d
azbuddy.tracker.bbb.status.title.tooltip=\uc138\ubd80\ub0b4\uc6a9\uc744 \ubcf4\uc2dc\ub824\uba74 \ub354\ube14\ud074\ub9ad \ud558\uc138\uc694
azbuddy.tracker.bbb.status.idle=\uac00\uc18d \uc5c6\uc74c
@@ -2154,10 +2111,7 @@ azbuddy.tracker.bbb.status.in=\uac00\uc18d \uc2dc\uc791
azbuddy.tracker.bbb.status.out=\uc774\ubbf8 \uac00\uc18d\ub41c \uce5c\uad6c
v3.MainWindow.search.go.tooltip=\uac80\uc0c9 \uc2e4\ud589
v3.MainWindow.search.last.tooltip=\uac80\uc0c9\uacb0\uacfc\ub85c \uc774\ub3d9
-v3.activity.buddy-invited=%1\uc5d0\uac8c \uce5c\uad6c \uc694\uccad\uc744 \ubcf4\ub0c8\uc2b5\ub2c8\ub2e4.
metasearch.addtemplate.done.title=\ud15c\ud50c\ub9bf \ucd94\uac00
-v3.MainWindow.button.share=\uacf5\uc720 \uc790\ub8cc
-v3.buddies.remove.buddy.dialog.title=\uc0ad\uc81c
fileplugininstall.install.title=\ucd94\uac00\uae30\ub2a5\uc744 \uc124\uce58 \ud560\uae4c\uc694?
fileplugininstall.duplicate.title=\ucd94\uac00\uae30\ub2a5 \ubcf5\uc0ac
azbuddy.online_status=\uc811\uc18d \uc0c1\ud0dc
@@ -2167,9 +2121,7 @@ azbuddy.os_not_avail=\ube44\ud65c\uc131
azbuddy.os_busy=\ubc14\uc068
azbuddy.os_offline=\uc624\ud504\ub77c\uc778
azbuddy.ui.menu.disconnect=\uc5f0\uacb0\ub04a\uae30
-v3.buddy.menu.chat=\ub300\ud654
azbuddy.enable_chat_notif=\ub300\ud654 \uc54c\ub9bc \uc791\ub3d9
-v3.buddies.dnd.info.dialog.remember=\uc774 \uc54c\ub9bc\uc744 \ub2e4\uc2dc \ubcf4\uc5ec\uc8fc\uc9c0 \uc54a\uae30
DetailedListView.title=\uc138\ubd80 \ubaa9\ub85d
subscript.add.title=\uad6c\ub3c5\uc744 \uc124\uce58\ud558\uc2dc\uaca0\uc2b5\ub2c8\uae4c?
subscript.add.desc='%1'\ub97c \uad6c\ub3c5\ud558\uc5ec \uc124\uce58\ud558\uc2dc\uae38 \uc6d0\ud558\uc2ed\ub2c8\uae4c?
@@ -2212,20 +2164,14 @@ TableColumn.header.azsubs.ui.column.subs=\uad6c\ub3c5
subscriptions.listwindow.popularity.reading=\uc77d\ub294\uc911...
PluginDeprecation.view=\uc624\ub958\ucd94\uc801 \ucd94\uac00\uae30\ub2a5
TableColumn.header.Thumbnail=\uc544\uc774\ucf58
-TableColumn.header.Rating_global=\uc21c\uc704
v3.MainWindow.menu.getting_started=&\uc2dc\uc791\ud558\uae30
MainWindow.menu.community=&\ucee4\ubba4\ub2c8\ud2f0
MainWindow.menu.help.faq=\uc790\uc8fc \ubb3b\ub294 \ubb3c\uc74c(&F)
MainWindow.menu.community.wiki=\ucee4\ubba4\ub2c8\ud2f0 &\uc704\ud0a4
MainWindow.menu.community.forums=\ucee4\ubba4\ub2c8\ud2f0 Fo&rums
MainWindow.menu.community.blog=Vuze &\ube14\ub85c\uadf8
-MainWindow.menu.community.add_friends=&\uce5c\uad6c \ucd94\uac00
externalLogin.title=\ub85c\uadf8\uc778 \ud544\uc694
Button.done=\uc644\ub8cc
-v3.Share.wizard.title=\uacf5\uc720 -- \ub9c8\ubc95\uc0ac
-v3.AddFriends.header.message=\uce5c\uad6c\ub97c \ucd94\uac00\ud574\uc11c \ud1a0\ub7f0\ud2b8\ub97c \uacf5\uc720\ud558\uc138\uc694
-v3.AddFriends.header=\uce5c\uad6c\ucd94\uac00
-v3.AddFriends.wizard.title=\uce5c\uad6c\ucd94\uac00 -- \ub9c8\ubc95\uc0ac
Button.continue=\uacc4\uc18d
Button.preview=\ubbf8\ub9ac\ubcf4\uae30
Subscription.menu.forcecheck=\uc9c0\uae08 \uc5c5\ub370\uc774\ud2b8
@@ -2236,9 +2182,6 @@ sidebar.LibraryDL=\ub0b4\ub824\ubc1b\ub294 \uc911
sidebar.LibraryCD=\uc644\ub8cc
authenticator.location=\uc704\uce58
authenticator.details=\uc138\ubd80\uc815\ubcf4
-v3.MainWindow.menu.publish.new=\uc0c8 \uc790\ub8cc \ubc30\ud3ec
-v3.MainWindow.menu.publish.mine=\ubc30\ud3ec\ub41c \uc790\ub8cc
-v3.MainWindow.menu.publish.about=\uc790\ub8cc \ubc30\ud3ec\ud558\uae30\ub294...
v3.MainWindow.menu.showActionBarText=\ubb38\uc790\ubcf4\uae30
Subscription.menu.export=\ub0b4\ubcf4\ub0b4\uae30
subscript.export.select.template.file=\uad6c\ub3c5 \uc800\uc7a5
@@ -2253,13 +2196,11 @@ Subscription.menu.reset=\ucc98\uc74c \uc0c1\ud0dc\ub85c \ucd08\uae30\ud654
ConfigView.section.Subscriptions=\uad6c\ub3c5
subscriptions.config.maxresults=\uad6c\ub3c5\ubcc4 \uc720\uc9c0\ud558\uace0 \uc788\ub294 \uc790\ub8cc\uc758 \ucd5c\ub300\uac12 [0: \ubb34\uc81c\ud55c]
v3.activity.button.readall=\ubaa8\ub450 \uc77d\uc5c8\uc74c\uc73c\ub85c \ud45c\uc2dc
-ConfigView.interface.start.library=\ub77c\uc774\ube0c\ub7ec\ub9ac\uc5d0\uc11c \uc2dc\uc791
TableColumn.header.activityNew=\uc2e0\uaddc
TableColumn.header.activityType=\uc885\ub958
TableColumn.header.activityText=\ub0b4\uc6a9
TableColumn.header.activityDate=\ucd94\uac00 \ub0a0\uc9dc
TableColumn.header.activityActions=\ud3c9\uac00
-TableColumn.header.activityAvatar=\uc544\ubc14\ud0c0
Subscription.menu.resetauth=\uc778\uc99d \uc815\ubcf4 \ucd08\uae30\ud654
Search.menu.engines=\uc591\uc2dd
Wizard.Subscription.title=\uad6c\ub3c5
@@ -2285,8 +2226,6 @@ Wizard.Subscription.rss.subtitle3=\uc790\ub8cc \ubc30\ud3ec\uc790\uac00 RSS \ud5
Wizard.Subscription.subscribe.library=\ub77c\uc774\ube0c\ub7ec\ub9ac\uc758 \uc790\ub8cc
Wizard.Subscription.subscribe.subscriptions=\uc5f0\uad00\ub41c \uad6c\ub3c5
Wizard.Subscription.subscribe.library.empty=\uc544\uc9c1 \uad6c\ub3c5\ud558\ub294 \uc790\ub8cc\uac00 \uc5c6\uc73c\uc138\uc694?\n \nVuze HD \ub124\ud2b8\uc6cc\ud06c\uc5d0\uc11c \ub178\ub780\uc0c9\uc73c\ub85c \ub41c RSS \uad6c\ub3c5 \ub2e8\ucd94\ub97c \ub20c\ub7ec\ubcf4\uc138\uc694.\n \n<A HREF="http://faq.vuze.com/?View=entry&EntryID=288">\uad00\ub828\ub0b4\uc6a9</A>
-TableColumn.header.Info=\uc815\ubcf4
-TableColumn.header.videoLength=\uc601\uc0c1 \uae38\uc774
message.confirm.delete.title=\uc0ad\uc81c \ud655\uc778
message.confirm.delete.text='%1'\ub97c \uc815\ub9d0\ub85c \uc9c0\uc6b0\uc2dc\uaca0\uc2b5\ub2c8\uae4c?
Subscription.menu.properties=\uc6b0\uc120\uc21c\uc704
@@ -2330,8 +2269,6 @@ TableColumn.header.azsubs.ui.column.subs_link.info=\uad6c\ub3c5\uacfc \ud568\uae
Button.deleteContent.fromLibrary=\ub77c\uc774\ube0c\ub7ec\ub9ac\uc5d0\uc11c \uc81c\uac70
Button.deleteContent.fromComputer=\ub514\uc2a4\ud06c\uc5d0\uc11c \uc9c0\uc6b0\uae30
v3.deleteContent.message=\n'%1'\ub97c \ub514\uc2a4\ud06c\uc5d0\uc11c \uc9c0\uc6b0\uc2dc\uaca0\uc2b5\ub2c8\uae4c? \uc544\ub2c8\uba74 Vuze \ub77c\uc774\ube0c\ub7ec\ub9ac\uc5d0\uc11c \ud45c\uc2dc\uac00 \uc548\ub418\uac8c \uc81c\uac70\ub9cc \ud560 \uc218\ub3c4 \uc788\uc2b5\ub2c8\ub2e4.
-v3.library.infobar.text1=\uc790\uc138\ud55c\ub0b4\uc6a9(\uace0\uae09)\uc744 \ud45c\uc2dc\ud558\uc2dc\uaca0\uc2b5\ub2c8\uae4c?
-v3.library.infobar.text2=\uc704\uc758 \ub3c4\uad6c \ud45c\uc2dc\uc904\uc5d0\uc11c '\ubcf4\uae30'\ub97c \uc791\ub3d9\uc2dc\ud0a4\uc138\uc694.
v3.MainWindow.menu.view.toolbartext=\ub3c4\uad6c \ud45c\uc2dc\uc904 \ubb38\uc790
v3.MainWindow.menu.view.asSimpleList=\uac04\ub2e8\ubaa9\ub85d
v3.MainWindow.menu.view.asAdvancedList=\uace0\uae09\ubaa9\ub85d
@@ -2351,13 +2288,6 @@ azbuddy.ui.menu.cat.share=\uce5c\uad6c\uc640 \ud568\uaed8 \uad6c\ub3c5 \uc791\ub
azbuddy.ui.menu.cat.set=\ubaa9\ub85d \uc785\ub825
azbuddy.ui.menu.cat.set_msg=\uc27c\ud45c\ub85c \ubaa9\ub85d\uc744 \ub098\ub20c \uc218 \uc788\uc73c\uba70 '\uc804\ubd80' \uc0ac\uc6a9\ud560 \uc218 \ub3c4 \uc788\uc2b5\ub2c8\ub2e4
azbuddy.ui.menu.cat_subs=\uad6c\ub3c5
-v3.buddy.prop.dn=\uc774\ub984 \ud45c\uc2dc
-v3.buddy.prop.un=\uc0ac\uc6a9\uc790 \uc774\ub984
-v3.buddy.prop.on=\uc628\ub77c\uc778
-v3.buddy.prop.lupd=\ub9c8\uc9c0\ub9c9 \uc5c5\ub370\uc774\ud2b8
-v3.buddy.prop.catout=\uc774 \ubd84\ub958\ub294 \uce5c\uad6c\uac00 \uad6c\ub3c5\ud560 \uc218 \uc788\uc2b5\ub2c8\ub2e4
-v3.buddy.set.catout=\uce5c\uad6c\uc758 \uad6c\ub3c5\uc744 \ubd84\ub958\uc5d0 \ucd94\uac00
-v3.buddy.set.catin=\uce5c\uad6c\uc758 \ubd84\ub958\ub97c \uad6c\ub3c5
subs.prop.update_period=\uc5c5\ub370\uc774\ud2b8 \uac04\uaca9
azbuddy.enable_cat_pub=\ubaa8\ub4e0 \uce5c\uad6c\uac00 \uacf5\uac1c\ub41c \ubd84\ub958\ub97c \uad6c\ub3c5\ud560 \uc218 \uc788\uc2b5\ub2c8\ub2e4 (','\ub85c \uad6c\ubd84\ud568)
v3.dialog.cnclose.title=%1 \ub2eb\ud798
@@ -2368,7 +2298,6 @@ v3.dialog.cnclose.noshow=\ub2e4\uc2dc \ubcf4\uc5ec\uc8fc\uc9c0 \uc54a\uc74c
v3.dialog.cnmanage.title=HD \ub124\ud2b8\uc6cc\ud06c \uad00\ub9ac \uba54\ub274
v3.dialog.cnmanage.intro="HD \ub124\ud2b8\uc6cc\ud06c" \uba54\ub274\uc5d0\uc11c \ubcf4\uc774\uace0 \uc2f6\uc740 \uc790\ub8cc\ub97c \uc544\ub798\uc5d0\uc11c \uc120\ud0dd\ud558\uc138\uc694
TableColumn.header.name.info=\ud1a0\ub7f0\ud2b8 \uc774\ub984
-TableColumn.header.Quality.info=HD, SD\uc640 \uac19\uc740 Vuze\uc790\ub8cc\uc758 \ud488\uc9c8
TableColumn.header.size.info=\ub514\uc2a4\ud06c\uc5d0\uc11c \ud1a0\ub7f0\ud2b8 \uc790\ub8cc\uc758 \ud06c\uae30
TableColumn.header.azsubs.ui.column.subs.info=\uc774 \ub2e8\ucd94\ub85c \uc5f0\uad00\ub41c \ud1a0\ub7f0\ud2b8\ub97c \uad6c\ub3c5\ubc1b\uc744 \uc218 \uc788\uc74c
TableColumn.header.upspeed.info=\ud604\uc7ac\uae4c\uc9c0 \uc62c\ub9ac\uae30 \uc18d\ub3c4
diff --git a/org/gudy/azureus2/internat/MessagesBundle_li_NL.properties b/org/gudy/azureus2/internat/MessagesBundle_li_NL.properties
index 1c86bd0..8fdc769 100644
--- a/org/gudy/azureus2/internat/MessagesBundle_li_NL.properties
+++ b/org/gudy/azureus2/internat/MessagesBundle_li_NL.properties
@@ -48,7 +48,6 @@ MainWindow.status.latestversion=L\u00e8ste versie
MainWindow.status.latestversion.clickupdate=Klik \u00f3m bie te wirke
MainWindow.status.unknown=\u00f3nbek\u00e8nd
MainWindow.status.checking=k\u00f3nterlere
-TableColumn.header.mytorrents=Mien Torrents
TableColumn.header.name=Naam
TableColumn.header.size=Gruutde
TableColumn.header.done=Vaerdig
@@ -310,7 +309,6 @@ TrackerChangerWindow.newtracker=V\u00f6l 'n nuuj trackeradres in
PeersView.discarded=Verworpe
PeersView.discarded.info=Data die se waal h\u00f6bs \u00f3ntvange, meh neet nudig hads, dus h\u00f6bs weggedaon.
discarded=aafgedank
-TableColumn.header.#=Nr:
MyTorrentsView.menu.move=Verplaatse
MyTorrentsView.menu.moveUp=\u00d3mhoeg
MyTorrentsView.menu.moveDown=\u00d3mlieg
@@ -377,7 +375,6 @@ MyTorrentsView.menu.removeand.deletedata=&Data weghaole
MyTorrentsView.menu.removeand.deleteboth=Alle&bei weghaole
deletedata.title=Waarsjuwing
deletedata.message1=Doe sjteis op 't puntj de DATA weg te haole van :\n
-deletedata.message2=\nW\u00e8ts se zeker des se door wils gaon?
MainWindow.menu.file.configure=K\u00f3ngfiggerasie-&wizard...
configureWizard.title=K\u00f3ngfiggerasiewizard
configureWizard.welcome.title=Welk\u00f3m biej de Vuze-k\u00f3ngfiggerasiewizard
@@ -508,7 +505,6 @@ ConfigView.section.tracker=Tracker
ConfigView.section.tracker.pollinterval=Tracker-cli\u00ebnt-aafsjt\u00f6mmingsinterval (sek\u00f3nd)
ConfigView.section.tracker.publishenable=Publiceer torrentdetails nao "<tracker_url>"
ConfigView.section.tracker.ip=IP-adres van externe tracker
-MainWindow.menu.help.faq=D\u00e8k gesjt\u00e8lde vraoge (FAQ)
ConfigView.section.style.enableXPStyle=XP- of Vista-stiel activere (hersjtart vereis)
ConfigView.section.tracker.checkip=Autematis extern IP adres opzeuke...
ipCheckerWizard.title=Wizard IP-k\u00f3ntrol
@@ -705,7 +701,6 @@ ConfigView.section.style.alwaysRefreshMyTorrents.tooltip=Dees optie ververs 't M
#
#2.0.7.0
#
-ConfigView.section.style.verticaloffset=Grafisch verticaal beginpuntj (GTK fix)
security.certtruster.title=Beveiligingscertificaat-waarsjuwing
security.certtruster.intro='t Beveiligingscertificaat is vriegegaeve door 'n bedrief det-s te neet vertroets
security.certtruster.resource=Br\u00f3n:
@@ -845,7 +840,6 @@ ConfigView.text.minutes=menuut
ConfigView.text.neverIgnore=Noets negere
ConfigView.text.any=ein
DownloadManager.error.datamissing=Gegaeves \u00f3ntbraeke
-iconBar.queue.tooltip=In de wach z\u00e8tte
MainWindow.menu.file.open.torrentforseeding=Torrent-besjtandj... (veur uploade)
MainWindow.menu.language.refresh=Ve&rnuje
ManagerItem.forced=Geforceerd
@@ -1030,7 +1024,6 @@ UpdateWindow.columns.size=Gruutde
UpdateWindow.cancel=Aafbraeke
UpdateWindow.quit=Aafsjloete
UpdateWindow.close=Sjloete
-UpdateWindow.ok=Update
UpdateWindow.restart=Noe hersjtarte
UpdateWindow.status.downloading=Downloade
UpdateWindow.status.done=Vaerdig
@@ -1275,7 +1268,6 @@ ConfigView.section.connection.advanced.IPDiffServ=Oetg\u00e4\u00f6ndj pakket Dif
ConfigView.section.connection.advanced.IPDiffServ.tooltip=Sjt\u00e8lt 't DiffServ-deil in van 't type-of-service(TOS)-veldj in de IP header veur oetgaonde pakkette.\nHexadecimaal waerdes kinne gespecificeerd waere door deze te veuraaf te laote gaon mit '0x', bv. 0x10.\nVuze leut dit sjtanderd ongebroek, dit beteikent det de sjtanderd van 't \u00f3ngerlikgend OS weurt gebroek.\nOpmirking: \u00d3ngerligkende netwerkimplmentaties kinne dees waerdes negere, dus dees optie is afhankelik van 't OS en JRE-versie.
ConfigView.section.interface.confirm_torrent_removal=Bevestigingsv\u00e8nster laote zeen es torrent d'r vanaaf weurt gehaold
ConfigView.section.interface.confirm_torrent_removal.tooltip=Bevestig wen 'n torrent oet Mien Torrents weurt weggehaold.
-TableColumn.header.confirm_torrent_removal=Wits te zeker det-s te dit weg wils doon?\n
TableColumn.header.seed_to_peer_ratio=Seed2Peer-verh.
TableColumn.header.seed_to_peer_ratio.info=Totale zjwerm-seeders-nao-leechers-verhaajing
PeersView.connected_time=Verb\u00f3nje tied
@@ -1613,14 +1605,10 @@ PeersView.BlockView.Transfer=Versjikke
PeersView.BlockView.NextRequest=Volgend verzeuk
PeersView.BlockView.title=Sjt\u00f6kskesmap
PeersView.BlockView.AvailCount=Besjikbaarheidst\u00e8ller
-TableColumn.header.dialog.NumberError.title=\u00d3ngeljige of \u00f3nbek\u00e8nde n\u00f3mmer
-TableColumn.header.dialog.NumberError.text=De opgegaeve n\u00f3mmer is fout of neet herk\u00e8nbaar.
MyTorrentsView.menu.manual=&Handjmaotig...
MyTorrentsView.menu.manual.per_torrent=Handjmaotig (per torrent)
MyTorrentsView.menu.manual.shared_torrents=Handjmaotig (door de torrents)
-TableColumn.header.dialog.setSpeed.title=%1 sjnelheid insjt\u00e8lle
# %1 = "in kbps" or ""; %2 = "upload" or "download"
-TableColumn.header.dialog.setNumber.text=Gaef 'ne n\u00f3mmer %1 \u00f3m %2 te verangeren in:
OpenTorrentWindow.torrentLocation=Te downloade torrent(s):
OpenTorrentWindow.addFiles.URL=Nuje &URL
OpenTorrentWindow.addFiles.Folder=Nuje map
@@ -1714,8 +1702,6 @@ Button.markSelected=Geselecteerde markere
Button.unmarkSelected=Geselecteerde demarkere
plugins.basicview.config=K\u00f3ngfiggerasie
TorrentOptionsView.param.max.uploads=Maximumaantal uploadsjlots [minimum: 2]
-TableColumn.header.dialog.setPosition.title=Positie insjt\u00e8lle
-TableColumn.header.dialog.setPosition.text=Gaef de map op, \u00f3m de torrents in te z\u00e8tte:
MyTorrentsView.menu.reposition.manual=Herpositionere..
ConfigView.section.connection.advanced.info.link=Bezeuk estebleef deze link veur details
ConfigView.section.connection.advanced.socket.group=Socket-opties
@@ -1726,14 +1712,9 @@ ConfigView.section.proxy.group.peer=Peer-communicaties
Pieces.column.Requested=Gevraog
Pieces.column.Requested.info=Geuf aan of mie verzeuke gedaon k\u00f3nne waere op 't sjt\u00f6kske of neet (*)
ConfigView.label.maxuploadsseeding=Alternatieve sjtanderd bie seede
-TableColumn.header.filter=Filter: [%1]
popup.error.hideall=Alles verberge
ConfigView.section.style.dataStatsOnly=Alleen datasjtatistieke laote zeen (gein protocolsjtatistieke)
ConfigView.section.style.separateProtDataStats=Data- en protocolsjtatistieken sjeije es 'data (protocol)'
-TableColumn.header.dialog.setFilter.title=Filter verangere
-TableColumn.header.dialog.setFilter.text=De %1 sectie z\u00f3l gefilterd waere op de teks die se hie-\u00f3nger specificeers. Gebroek 't | (pipe)-symbool \u00f3m te filtere op v\u00e4\u00f6lvoudige oetdr\u00f6kkinge.
-TableColumn.header.filter.tooltip=Ctrl+X \u00f3m te sjakele t\u00f6sje RegEx en normale zoekmodes.\nGebroek 't | (pipe)-symbool \u00f3m te filtere op versjillende oetdr\u00f6kkinge.
-TableColumn.header.clearFilter.tooltip=Filter laegmake
MyTorrentsView.menu.filter=Lies filtere...
ConfigView.section.file.resume.recheck.all=Nao crash-hersjtart k\u00f3nterleer totale besjtandj veur complete sjt\u00f6kskes (Anges allein sjt\u00f6kskes die actief wore nao l\u00e8ste gek\u00f3nterleerde opsjlaag)
ConfigureWizard.language.choose=Kees 'n taal oet de \u00f3ngersjtaonde lies:
@@ -1871,13 +1852,8 @@ MainWindow.menu.view.iconbar=Wirkbalk
MyTorrentsView.menu.rename=Herneume
MyTorrentsView.menu.rename.displayed=De zichbare naam verangere
MyTorrentsView.menu.rename.save_path=Opsjlaagpaad verangere
-MyTorrentsView.menu.rename.displayed_and_save_path=Allebei verangere
MyTorrentsView.menu.rename.displayed.enter.title=De zichbare naam verangere
MyTorrentsView.menu.rename.displayed.enter.message=Gaef 'ne nuje zichbare naam veur deze download.\nEs gein teks geplaats is, weurt de originele naam gebroek.
-MyTorrentsView.menu.rename.save_path.enter.title=Opsjlaagpaad herneume
-MyTorrentsView.menu.rename.save_path.enter.message=Gaef 'ne nuje opsjlaagmap veur deze download.\nEs gein tekst gegaeve weurt, weurt de zichbare naam gebroek.
-MyTorrentsView.menu.rename.displayed_and_save_path.enter.title=Download herneume
-MyTorrentsView.menu.rename.displayed_and_save_path.enter.message=Gaef 'ne nuje naam veur deze download.\nEs geen teks gegaeve weurt, waere de auw waerd gebroek.
MyTorrentsView.menu.edit_comment=K\u00f3mmentaar bewirke
MyTorrentsView.menu.edit_comment.enter.title=Sjrief k\u00f3mmentaar
MyTorrentsView.menu.edit_comment.enter.message=Plaats 'n k\u00f3mmentaar veur deze download
@@ -2027,8 +2003,6 @@ SpeedTestWizard.stage.message.connect.stats=Verb\u00e8njingssjtatus: peers=%1, d
window.uiswitcher.title=Vuze-interfacekezer
window.uiswitcher.text=Selecteer de gew\u00e8nste gebruikersinterface (UI).
window.uiswitcher.NewUI.text=* Aanbevaole veur beginners en nuje gebroekers.\n\n* 'n Mekkelikm, intu\u00eftief grafisch oeterlik.\n\n* Vereiste oeterlik veur 't publicere op 't Vuze-platform.
-window.uiswitcher.AdvancedUI.title=Geavanceerde Vuze
-window.uiswitcher.AdvancedUI.text=* Aanbevaole veur gebroeker die gebroek wille make van 't klassieke oeterlik mer ouch inhaud wille zeuke, blajere en plaatse op 't Vuze-platform.\n\n* 'n Mekkelik, intu\u00eftief grafisch oeterlik gepaard mit geavanceerde meugelikhede en functionaliteit.
window.uiswitcher.ClassicUI.title=Klassiek oeterlik
window.uiswitcher.ClassicUI.text=* Behauwt de functionaliteit van de 2.x versies.\n\n* Vuze skin weurt neet gelaje.
window.uiswitcher.bottom.text=Dien selectie kan mekkelik waere aangepas door op de Vuze-interfacekezerkn\u00f3p te duje
@@ -2056,7 +2030,12 @@ TableColumn.header.Rating=Waardering
TableColumn.header.SpeedGraphic=Sjnelheid
TableColumn.header.AzProduct=Van
TableColumn.header.ProgressETA=Veurtgank
+#TableColumn.header.size={MyTorrentsView.size}
+#TableColumn.header.up={MyTorrentsView.up}
+#TableColumn.header.date_added={MyTorrentsView.date_added}
+#TableColumn.header.name={MyTorrentsView.name}
TableColumn.header.name.ext=Besjtanjstype: %1
+#TableColumn.header.shareRatio={MyTorrentsView.shareRatio}
v3.MainWindow.tab.home=Sjtart-tab
v3.MainWindow.tab.browse=Blajere
v3.MainWindow.tab.library=Mien Bibliotheek
@@ -2080,7 +2059,6 @@ v3.MainWindow.button.comment=K\u00f3mmentaar
v3.MainWindow.button.viewdetails=Details bekieke
v3.MainWindow.button.play=Aafsjpele
v3.MainWindow.button.cancel=Aafbraeke
-v3.MainWindow.button.sendtofriend=Torrent deile
v3.MainWindow.button.preview=Veurbild
v3.MainWindow.view.wait='n Ougeblik ged\u00f6ldj estebleef...
v3.MainWindow.xofx=%1 van %2
@@ -2250,7 +2228,6 @@ Progress.reporting.window.remove.auto=Autematis inactieve \u00f3ngerdeile weghao
Progress.reporting.window.remove.auto.tooltip=Autematis alle complete, misl\u00f6kde of aafgebraoke processe van de weergaaf aafhaole
Progress.reporting.window.remove.now=Inactive \u00f3ngerdeile weghaole
Progress.reporting.window.remove.now.tooltip=Alle complete, misl\u00f6kde of aafgebraoke processe van de weergaaf aafhaole
-xmlhttp.legacy.error=Dees versie van de XML/HTTP-plug-in z\u00f3l neet langer wirke in dees versie van Vuze - doe m\u00f3s upgrade nao 'n nujer versie van deze plug-in.
dhttracker.tracklimitedwhenonline=Allewaal, veur lieg gebroek van br\u00f3ntracering oet, bie 'n online zjwerm kruuts-populatie.
TorrentOptionsView.multi.title.short=Torrent-opties
TorrentOptionsView.multi.title.full=Torrent-opties
@@ -2320,11 +2297,6 @@ ConfigView.section.security.unlockkey.error=\u00d3ntgrendele van sjleutel is mis
ConfigView.copy.to.clipboard.tooltip=Nao klembord kopi\u00ebre
Views.plugins.azbuddy.title=Vrunj
Browser.popup.error.no.access=D'r is 'n fout opgetraeje tiedens 't contac make mit 'n br\u00f3n op aafsjtandj.\nPerbeer 't later nog \u00e8ns !
-v3.activity.header.today=Vandaag
-v3.activity.header.yesterday=Gister
-v3.activity.header.xdaysago=%1 daag geleje
-v3.activity.header.1weekago=1 waek geleje
-v3.activity.header.xweeksago=%1 waek geleje
ConfigView.label.queue.stoponcebandwidthmet=Sjtart gein torrents wen de upload-/downloadsjnelheidslimiet is bereik
ConfigView.section.style.forceMozilla=Dwing Vuze Mozilla te broeke veur browserwidgets [xulrunner of firefox 3 en Vuze hersjtarte vereis]
ConfigView.section.style.xulRunnerPath=Specificeer de XulRunner- / Firefox-map handjmaotig [vereis veur FF3; Vuze hersjtart vereis]
@@ -2373,49 +2345,15 @@ Button.bar.share=Deil
Button.bar.add=Vrunj toevoege
Button.bar.edit=Bew\u00e8rke
Button.bar.edit.cancel=Vaerdig mit bew\u00e8rke
-v3.Share.menu=Inhaud deile
-v3.Share.header=Deile
-v3.Share.header.message=Deil mit de hujige vrunj, of voeg nuuj vrunj toe.
-v3.Share.add.buddy=Vrunj toevoege
-v3.Share.add.edit.buddy=Vrunj toevoege/bewirke
-v3.Share.add.buddy.all=Mit jederein deile
-v3.Share.add.buddy.existing=Besjtaonde vrunj:
-v3.Share.add.buddy.new=Nuuj vrunj:
-v3.Share.buddies=Vrunj
-v3.Share.invitees=Oetgenudigde
-v3.Share.invite.buddies.prompt=Nudig mie vrunj \u00f3m mit te deile
-v3.Share.send.now=Sjikke
-v3.Share.optional.message=Optioneel berich:
-v3.Share.disclaimer=Opmirking: Zoewaal de inhaud dae se deils es dit optioneel berich weurt versjleuteld.
-v3.Share.disclaimer.link=Laes mie...
-ConfigView.section.security.vuze.login=G'r m\u00f3t ingelog zeen bie Vuze veur dees bewirking
-v3.buddy.menu.viewprofile=Profiel bekieke
-v3.buddy.menu.remove=Vrundj weghaole
v3.MainWindow.menu.view.pluginbar=Plug-in-balk
-v3.MainWindow.menu.view.buttonbar=Kn\u00f3ppebalk
-v3.activity.buddy-request=Doe h\u00f6bs 'n vrundjverzeuk van %1
-v3.activity.buddy-request.accept=Acceptere
-v3.activity.buddy-request.multi=Doe h\u00f6bs 'n vrundjverzeuk [#%3] van %1
-v3.activity.buddy-linkup=Doe en %1 zeen noe vrunj
-v3.activity.share-content.no-msg=%1 haet %2 mit dich gedeild
-v3.buddies.count=%1 vrunj
-v3.buddies.remove=Vrundj weghaole
-v3.buddies.add.to.share=Vrundj toevoege veur deile
MainWindow.dialog.select.vuze.file=Selecteer Vuze-besjtandj
-azbuddy.ui.dialog.disable.title=Vrunj-Plugin oetsjakele
-azbuddy.ui.dialog.disable.text=Oetsjakele van de vrunj-plugin veurkump det d'r torrents gedeild waere via de vrunjbalk aan de \u00f3ngerkantj van 't program, en veurkump det dien vrunjlies verangert.\n\nW\u00e8ts te zeker det-s te dit oet wils sjakele?
metasearch.addtemplate.title=Zeuktemplate installere?
metasearch.addtemplate.desc=Wits te zeker des se de zeuktemplate mit de naam '%1' wils insjtallere?
v3.share.private.title=Torrent aan 't deile
v3.share.private.text=De geselecteerde torrent is gemarkeerd es 'ne priv\u00e9torrent.\n\nDoe k\u00f3ns gein priv\u00e9torrents deile.
-v3.buddies.disabled.title=Vrunj-plug-in oetgezat
-v3.buddies.disabled.text._windows=Doe h\u00f6bs de vrunj-plug-in oetgesjakeld, waat dich weerh\u00e8lt van 't deile of acceptere van torrents of vrundjverzeuke. Doe k\u00f3ns de insjt\u00e8llinge verangere via de K\u00f3ngfiggeratietab.
-v3.buddies.disabled.text._mac=Doe h\u00f6bs de vrunj-plug-in oetgesjakeld, waat dich weerh\u00e8lt van 't deile of acceptere van torrents of vrundjverzeuke. Doe k\u00f3ns de insjt\u00e8llinge verangere via de K\u00f3ngfiggeratietab.
metasearch.addtemplate.dup.desc=Zeuktemplate %1 is al ge\u00efnstalleerd
metasearch.export.select.template.file=Template beware
metasearch.import.select.template.file=Template \u00e4\u00f6pene
-v3.MainWindow.button.newtag.share=Nuuj! Torrent deile
-v3.buddies.faq=Laes mie...
dialog.uiswitch.title=Nao de Vuze-interface \u00f3msjakele
dialog.uiswitch.text=Doe m\u00f3s de Vuze-interface gebroeke \u00f3m gebroek te kinne make van dees meugelikheid.
dialog.uiswitch.button=Nao de Vuze-interface \u00f3msjakele
@@ -2423,20 +2361,9 @@ azbuddy.tracker.enabled=Gaef prioriteit aan vrunj mit 't downloade van dezelfde
azbuddy.protocolspeed=KB/s max vrundj protocol overhead
v3.MainWindow.button.download=Downloade
v3.MainWindow.button.run=Gedownload besjtandj sjtarte
-v3.activity.header.friend.requests.foryou=Vrundjverzeuke - veur dich
-v3.activity.header.friend.requests.fromyou=Vrundjverzeuke - van dich
-v3.activity.header.friend.requests.accepted=Vrundjverzeuke - geaccepteerd
-v3.activity.header.share.requests=Torrentverzeuke deile
-v3.activity.header.rating.reminders=Waarderingsherinneringe
v3.activity.header.vuze.news=Vuze-nuuts
-login.optional.message=Doe m\u00f3s ingelog zeen \u00f3m dees functie te broeke
v3.MainWindow.search.go.tooltip=Zeuke oetveure
v3.MainWindow.search.last.tooltip=Tr\u00f6kgaon nao zeukresultate
-v3.activity.buddy-invited=Doe h\u00f6bs 'n vrundjverzeuk gesjik nao %1.
-v3.activity.buddy-invited.multi=Doe h\u00f6bs 'n vrundjverzeuk gesjik nao de volgende luuj:\n%1
-v3.MainWindow.button.share=Inhaud deile
-v3.buddies.remove.buddy.dialog.title=Vrundj weghaole bevestige
-v3.buddies.remove.buddy.dialog.text=Wils te %1 ech weghaole oet dien vrunjlies?
ConfigView.section.security.nopw=Gei wachwaord opgegaeve
ConfigView.section.security.nopw_v=Gei wachwaord besjikbaar, log dich esteblief in bie Vuze
fileplugininstall.install.title=Plugin installere?
@@ -2448,51 +2375,7 @@ azbuddy.os_away=Eweg
azbuddy.os_not_avail=Neet besjikbaar
azbuddy.os_busy=Bezig
azbuddy.ui.menu.disconnect=Verb\u00e8njing verbraeke
-v3.buddy.menu.chat=Kwake
-v3.chat.offline=%1 is op 't mem\u00e8nt offline en z\u00f3l dien berich kriege wen weer online.
-v3.chat.wrongversion=%1 gebroek 'n versie van Vuze dae gein kwaken \u00f3ngersteunt.
-v3.buddies.dnd.info.dialog.ok=OK
-v3.buddies.dnd.info.dialog.remember=Dit berich neet mie laote zeen
-# The remaining keys were not in MessagesBundle.properties
-Progress.reporting.prompt.label.retry=Opnuuj
-Progress.reporting.prompt.label.cancel=Aafbraeke
-v3.TorrentOptionsView.title.short=Voorkeuren
-v3.mb.notTrusted.button.cancel=Annuleer
-v3.mb.UnknownContent.title=Inhoud Onbekent
-v3.mb.notTrusted.text=De inhoud '%1' is herkent als mogelijk gevaarlijk, jou systeem raporteert de inhoud het als een '%2' type.
-v3.mb.notTrusted.title=Inhoud is niet vertouwt
-xmlhttp.config.option.debug.deserialisation=Input XML handeling/behandeling
-ConfigView.section.connection.advanced.IPTOS.tooltip=Stel de traffic klasse / type-of-service (TOS) in de IP header in voor uitgaande pakketjes.\nAzureus laat dit standaard niet ingesteld, dit betekend dat de standaard OS instellingen worden gebruikt.\nVoorbeeld waardes zijn:\n0x02 voor IPTOS_LOWCOST\n0x04 voor IPTOS_REALIABILITY\n0x08 voor IPTOX_TRHOUGHPUT\n0x10 voor IPTOS_LOWDELAY\nOpmerking: Onderliggende netwerk implementaties kunnen deze waardes negeren, deze optie is dus zeer afhankelijk van de OS en JRE versies.
-v3.mb.stopSeeding.text=WAARSCHUWING: Deze actie zal niet de gepubliceerde inhoud '%1' verwijderen van <A HREF="%2">%3</A> \n\nKlik "Verwijderen" alleen als de gepubliceerde inhoud beschikbaar moet blijven voor downloaden, maar wel bandbreedte vrij wil maken. Zorg wel dat de uploads goed afgesloten zijn voordat je deze verwerking doorvoerd. (<A HREF="%4">how</A>?).\n\nKlik "Annuleer" als je de complete gepubliceerde inhoud wil verwijderen van www.GetAzureus, en gebruik de (X) knop op het Gepubliceerde Inhoud Paneel in de publiceer tab.\n\n<A HREF="%4">More help</A>.\n\n
-Progress.reporting.prompt.label.cancel.tooltip=De bewirking aafbraeke
-v3.mb.stopSeeding.delete=&Verwijder
-xmlhttp.config.group.debug=Debug instellingen
-ConfigView.section.style.SeparateFilesViewRenameRetarget=Gesjeije "Herneume"en "Nuje doelsjt\u00e8lling"-menu's laote zeen in de besjtenjstab.
-v3.mb.notTrusted.noapp.text=De inhoud '%1' is herkent als waarschijnlijk gevaarlijk, het is voor het systeem een onbekend formaat (%2).
-v3.mb.stopSeeding.title=Stop Seeding Inhoud
-v3.ConfigView.title.full=Voorkeuren
-xmlhttp.config.option.log_to_plugin=Plugin scherm (*)
-v3.mb.UnknownContent.noapp.text=De inhoud '%1' is niet herkent als een bekent formaat. Jou systeem heeft geen programma voor dit file type (%2).
-v3.mb.stopSeeding.cancel=&Annuleer
-Progress.reporting.prompt.label.remove=Weghaole
-v3.TorrentOptionsView.title.full=Voorkeuren
-Progress.reporting.prompt.label.remove.tooltip=Verwijder dit Voortgang Raport uit de historie
-v3.mb.UnknownContent.button.cancel=Annuleer
-ConfigView.label.bindip.info=Es veurbild, '192.168.1.2' of 'eth0' (huidige: %1)
-Progress.reporting.prompt.label.detail.tooltip=Toon deze voortgang Raportage in het detail scherm
-ConfigView.section.connection.advanced.IPTOS=Uitgaande packet type-of-service (TOS) [zie http://wiki.vuze.com/index.php/AdvancedNetworkSettings]
-network.ltep.enabled=Gebruik maken van het experimentelen extensie protocol handshake ondersteuning (herstart vereist)
-xmlhttp.config.option.debug.serialisation=Output XML handeling/behandeling
-v3.mb.notTrusted.button.run=Weg gaan
-xmlhttp.config.group.logging=Logging
-v3.mb.UnknownContent.button.run=Weg Gaan.
-xmlhttp.config.option.log_to_console=Console (*)
-xmlhttp.config.group.logging.description=Selecteer waar je de logging output naartoe wil hebben:
-v3.MainWindow.menu.view.configuration=Veurkeure
-v3.mb.UnknownContent.text=De inhoud '%1' is niet herkent als een bekent formaat. Jou syteem raporteert de inhoud als een type '%2'. De inhoud file extensie is '%3'.
-Progress.reporting.prompt.label.retry.tooltip=Opnieuw bewerking uitvoeren
-xmlhttp.config.option.debug.method_lookup=Methode resolutie/beslissing
-xmlhttp.config.option.debug.method_invocation=Methode invocatie/aanroeping
-ConfigView.label.announceport.tooltip=Informeer de tracker van 'n anger paort es de paort waohaer se loesters. Laot de optie laeg es se dees neet wils broeke.
-v3.ConfigView.title.short=Voorkeuren
-xmlhttp.config.group.debug.description=Dit onderdeel word gebruikt om meer nuttigen informatie naar de console te plaatsen.
+iconBar.queue.tooltip=In de wach z\u00e8tte
+MainWindow.menu.help.faq=D\u00e8k gesjt\u00e8lde vraoge (FAQ)
+#what you've watched? Discover more with a single click...
+TableColumn.header.#=Nr:
diff --git a/org/gudy/azureus2/internat/MessagesBundle_lt_LT.properties b/org/gudy/azureus2/internat/MessagesBundle_lt_LT.properties
index a65d16c..36194ef 100644
--- a/org/gudy/azureus2/internat/MessagesBundle_lt_LT.properties
+++ b/org/gudy/azureus2/internat/MessagesBundle_lt_LT.properties
@@ -382,7 +382,6 @@ MyTorrentsView.menu.removeand.deletedata=I\u0161trinti &duomenis
MyTorrentsView.menu.removeand.deleteboth=I\u0161trinti &visk\u0105
deletedata.title=\u012esp\u0117jimas
deletedata.message1=J\u016bs tuoj i\u0161trinsite DUOMENIS i\u0161:\n
-deletedata.message2=\nAr tikrai norite t\u0119sti?
MainWindow.menu.file.configure=Nustatym\u0173 &vedlys...
configureWizard.title=Nustatym\u0173 vedlys
configureWizard.welcome.title=Sveiki \u012fsijung\u0119 Vuze Nustatym\u0173 vedl\u012f
@@ -521,7 +520,6 @@ ConfigView.section.tracker=Trackeris
ConfigView.section.tracker.pollinterval=Trackerio klient\u0173 apklausos intervalas (sek.)
ConfigView.section.tracker.publishenable=Skelbti Torrento informacij\u0105 \u012f "<tracker_url>"
ConfigView.section.tracker.ip=I\u0161orinis Trackerio IP adresas
-MainWindow.menu.help.faq=&Da\u017eniausiai u\u017eduodami klausimai
ConfigView.section.style.enableXPStyle=\u012ejungti XP stili\u0173 [reikia perkrauti]
ConfigView.section.tracker.checkip=Automati\u0161kai rasti i\u0161orin\u012f IP adres\u0105...
ipCheckerWizard.title=IP tikrinimo vedlys
@@ -718,7 +716,6 @@ ConfigView.section.style.alwaysRefreshMyTorrents.tooltip=\u0160is nustatymas atn
#
#2.0.7.0
#
-ConfigView.section.style.verticaloffset=Grafikos vertikali atsvara (GTK pataisa)
security.certtruster.title=Saugumo sertifikato persp\u0117jimas
security.certtruster.intro=\u0160is saugumo sertifikatas buvo i\u0161duotas kompanijos, kuria J\u016bs nepasitikite
security.certtruster.resource=I\u0161teklius:
@@ -856,7 +853,6 @@ ConfigView.text.minutes=min
ConfigView.text.neverIgnore=Niekada neignoruok
ConfigView.text.any=bet kuriuo
DownloadManager.error.datamissing=Tr\u016bksta duomen\u0173
-iconBar.queue.tooltip=\u012e eil\u0119
MainWindow.menu.file.open.torrentforseeding=Torrent fail\u0105... (Skleidimui)
MainWindow.menu.language.refresh=&At\u0161vie\u017einti
ManagerItem.forced=Priverstinai
@@ -1270,8 +1266,6 @@ FilesView.fullpath=Rodyti vis\u0105 keli\u0105
FilesView.remaining=Liko dali\u0173
TableColumn.header.trackername=Trackerio vardas
TableColumn.header.trackername.info=Trackerio vardas pagal prane\u0161imo URL
-ConfigView.label.announceport=Keisti Trackerio prane\u0161im\u0173 prievad\u0105
-ConfigView.label.announceport.tooltip=Informuoti Tracker\u012f apie kit\u0105 prievad\u0105 nei tas kurio klausomasi. Nor\u0117dami nenaudoti palikite nenustatyt\u0105
ConfigView.group.override=Rankiniai nustatymai
ConfigView.section.file.perf.cache.notsmallerthan=Nekelti \u012f spartinan\u010di\u0105j\u0105 atmintin\u0119 fail\u0173, ma\u017eesni\u0173 nei (%1)
PeersView.menu.blockupload=Blokuoti i\u0161siuntim\u0105
@@ -1302,8 +1296,6 @@ ConfigView.section.connection.advanced.SO_RCVBUF=Jungties SO_RCVBUF dydis [0: na
ConfigView.section.connection.advanced.SO_RCVBUF.tooltip=Nustato standartin\u0119 jungties SO_RCVBUF reik\u0161m\u0119 (baitais), tai yra TCP pri\u0117mino lango dyd\u012f ir mast\u0105.\nVuze pagal numatym\u0105 jos nenustato, tai rei\u0161kia, kad yra panaudojami OS numatymai.\nPASTABA: Linux dvigubina duot\u0105 reik\u0161m\u0119.
ConfigView.section.connection.advanced.SO_SNDBUF=Jungties SO_SNDBUF dydis [0: naudoti OS numatyt\u0105]
ConfigView.section.connection.advanced.SO_SNDBUF.tooltip=Nustato standartin\u0119 jungties SO_SNDBUF reik\u0161m\u0119 (baitais), tai yra TCP siuntimo lango dyd\u012f.\nVuze pagal numatym\u0105 jos nenustato, tai rei\u0161kia, kad yra panaudojami OS numatymai.\nPASTABA: Linux dvigubina duot\u0105 reik\u0161m\u0119.
-ConfigView.section.connection.advanced.IPTOS=I\u0161einan\u010di\u0173 paket\u0173 serviso tipas (TOS)
-ConfigView.section.connection.advanced.IPTOS.tooltip=Nustatyti srauto klas\u0119 / serviso tipo (TOS) lauk\u0105 IP antra\u0161t\u0117je i\u0161einantiems paketams.\nVuze pagal numatym\u0105 jo nenustato, tai rei\u0161kia, kad yra panaudojami OS numatymai.\nPavyzdyn\u0117s reik\u0161m\u0117s yra:\n0x02 - IPTOS_LOWCOST\n0x04 - IPTOS_RELIABILITY\n0x08 - IPTOS_THROUGHPUT\n0x10 - IPTOS_LOWDELAY\nPASTABA: Esamas ry\u0161io \u012fgyvendinimas gali ignoruoti \u0161i\u0105 reik\u0161m\u0119, taigi, \u0161i reik\u0161m\u0117 smarkiai priklauso nuo OS ir JRE versij\u0173.
ConfigView.section.interface.confirm_torrent_removal=Rodyti patvirtinimo dialog\u0105 \u0161alinant Torrent\u0105
ConfigView.section.interface.confirm_torrent_removal.tooltip=Patvirtinti, kai \u0161alinamas Torrentas i\u0161 Mano Torrent\u0173 lango.
MyTorrentsView.confirm_torrent_removal=Ar tikrai norite \u0161alinti?\n
@@ -1453,6 +1445,7 @@ MainWindow.menu.tools.nattest=&NAT / ugniasien\u0117s testas
Button.apply=Vykdyti
Button.close=U\u017edaryti
window.welcome.title=Sveiki \u012fsijung\u0119 Vuze %1
+#file can be a URL or a path in the jar
MainWindow.menu.help.releasenotes=Leidimo pastabos (ang.)
dht.reseed.label=Paprastai n\u0117ra b\u016btina i\u0161 naujo paskleisti paskirstytos duomen\u0173 baz\u0117s. Jeigu kontakt\u0173 skai\u010dius yra ma\u017eas, tai gali b\u016bti panaudota vientisumui atkurti.\nPalikite tu\u0161\u010di\u0105, nor\u0117dami atlikti \u012fk\u0117l\u0105 i\u0161 prisijungusi\u0173 Siunt\u0117j\u0173 arba \u012fveskite IP ir prievad\u0105, nor\u0117dami atlikti \u012fk\u0117l\u0105 i\u0161 \u017einomo Siunt\u0117jo.
dht.reseed.group=I\u0161 naujo skleisti
@@ -1899,13 +1892,8 @@ MainWindow.menu.view.iconbar=\u012erankin\u0117
MyTorrentsView.menu.rename=Pervadinti
MyTorrentsView.menu.rename.displayed=Pakeisti rodom\u0105 vard\u0105
MyTorrentsView.menu.rename.save_path=Pervadinti i\u0161saugojimo keli\u0105
-MyTorrentsView.menu.rename.displayed_and_save_path=Pervadinti abu
MyTorrentsView.menu.rename.displayed.enter.title=Pakeisti rodom\u0105 vard\u0105
MyTorrentsView.menu.rename.displayed.enter.message=\u012era\u0161ykite nauj\u0105 vard\u0105, kuris bus rodomas \u0161iam atsiuntimui.\nJei joks tekstas ne\u012fvestas, bus panaudotas originalus vardas.
-MyTorrentsView.menu.rename.save_path.enter.title=Pervadinti i\u0161saugojimo keli\u0105
-MyTorrentsView.menu.rename.save_path.enter.message=\u012era\u0161ykite nauj\u0105 i\u0161saugojimo keli\u0105 \u0161iam atsiuntimui.\nJei joks tekstas ne\u012fvestas, bus panaudotas atsiuntimo rodomas vardas.
-MyTorrentsView.menu.rename.displayed_and_save_path.enter.title=Pervadinti atsiuntim\u0105
-MyTorrentsView.menu.rename.displayed_and_save_path.enter.message=\u012era\u0161ykite nauj\u0105 vard\u0105 \u0161iam atsiuntimui.\nJei joks tekstas ne\u012fvestas, bus panaudotas originalus vardas.
MyTorrentsView.menu.edit_comment=Redaguoti komentar\u0105
MyTorrentsView.menu.edit_comment.enter.title=Redaguoti komentar\u0105
MyTorrentsView.menu.edit_comment.enter.message=\u012eveskite komentar\u0105 \u0161iam atsiuntimui
@@ -1959,7 +1947,6 @@ ConfigView.section.connection.http.port=\u012eeinan\u010dio prievado numeris
ConfigView.section.connection.http.portoverride=Keisti trackerio HTTP prievad\u0105 [0: nekeisti]
window.update.noupdates.title=Atnaujinim\u0173 tikrinimo rezultatai
window.update.noupdates.text=\u0160iuo metu n\u0117ra joki\u0173 nauj\u0173 atnaujinim\u0173.\n\nSveikiname!
-ConfigView.label.bindip.info=Pavyzd\u017eiui, '192.168.1.2' arba 'eth0' (dabar: %1)
ConfigView.label.mindownloads=Ma\u017eiausiai vienalaiki\u0173 atsiuntim\u0173
UI.cannot_submit_blank_text=J\u016bs turite \u012fvesti reik\u0161m\u0119.
crypto.alert.as.warning=Yra \u017einoma, kad tinklas '%1' primeta duomen\u0173 srauto ribojimus atsiuntimo grei\u010diui suma\u017einti. Ry\u0161io \u0161ifravimas buvo automati\u0161kai \u012fjungtas - j\u012f galima i\u0161jungti/pakeisti nustatymuose.
@@ -1969,7 +1956,6 @@ popup.download.added="%1" buvo prid\u0117tas \u012f atsiuntim\u0173 s\u0105ra\u0
MessageBoxWindow.nomoreprompting=Daugiau nebeklausti
TorrentOptionsView.param.max.seeds=Did\u017eiausiais susijungim\u0173 skai\u010dius su Skleid\u0117jais [0: susijungim\u0173 skai\u010dius]
TorrentOptionsView.param.alternative.value.enable=Alternatyvi reik\u0161m\u0117 skleid\u017eiant
-ConfigView.section.style.SeparateFilesViewRenameRetarget=Rodyti atskiras "Pervadinti" ir "I\u0161 naujo nukreipti" meniu parinktis Fail\u0173 kortel\u0117je
ConfigView.section.proxy.check.on.start=Paleid\u017eiant tikrinti tarpinio serverio b\u016bsen\u0105
TransferStatsView.legend.pingaverage=Vidurkis
TransferStatsView.legend.ping1=Tikslas 1
@@ -2054,8 +2040,6 @@ SpeedTestWizard.stage.message.connect.stats=Ry\u0161io statistika: siunt\u0117ja
window.uiswitcher.title=Vuze naudotojo s\u0105sajos parinkimas
window.uiswitcher.text=Pra\u0161ome \u017eemiau i\u0161sirinkti labiausiai tinkan\u010di\u0105 naudotojo s\u0105saj\u0105.
window.uiswitcher.NewUI.text=Suteikia labiausiai nu\u0161lifuot\u0105 s\u0105saj\u0105.\n\nRekomenduojama naujiems ir pradedantiems naudotojams.
-window.uiswitcher.AdvancedUI.title=I\u0161pl\u0117stin\u0117 Vuze
-window.uiswitcher.AdvancedUI.text=Nauja Vuze s\u0105saja su i\u0161pl\u0117stine kortele.\n\nPuikus pasirinkimas naudotojams, kurie yra priprat\u0119 prie klasikin\u0117s s\u0105sajos, bet vistiek nori matyti kaip sekasi Vuze s\u0105sajai.
window.uiswitcher.ClassicUI.title=Klasikin\u0117 s\u0105saja
window.uiswitcher.ClassicUI.text=Skirta tiems, kurie nenori naujos s\u0105sajos. Vuze elgsis lygiai taip pat, kaip elg\u0117si 2.x versijose.
VivaldiView.notAvailable=Vivaldi vaizdas neprieinamas
@@ -2070,6 +2054,11 @@ TableColumn.menu.date_added.reset=Atstatyti dat\u0105
MyTorrents.column.ColumnProgressETA.2ndLine=NBL: %1
TableColumn.header.Speed=Greitis
TableColumn.header.SpeedGraphic=Greitis
+#TableColumn.header.size={MyTorrentsView.size}
+#TableColumn.header.up={MyTorrentsView.up}
+#TableColumn.header.date_added={MyTorrentsView.date_added}
+#TableColumn.header.name={MyTorrentsView.name}
+#TableColumn.header.shareRatio={MyTorrentsView.shareRatio}
v3.MainWindow.tab.home=Pagrindinis
v3.MainWindow.tab.library=Mano biblioteka
v3.MainWindow.tab.publish=Skelbti
@@ -2087,15 +2076,12 @@ v3.MainWindow.button.comment=Komentuoti
v3.MainWindow.button.viewdetails=Rodyti informacij\u0105
v3.MainWindow.button.play=Paleisti
v3.MainWindow.button.cancel=Atsisakyti
-v3.MainWindow.button.sendtofriend=Vie\u0161inti
v3.MainWindow.xofx=%1 i\u0161 %2
v3.MainWindow.Loading=\u012ekeliama.. Pra\u0161ome palaukti
v3.filter-bar=Pavadinimo filtras:
v3.mb.delPublished.title=Stabdyti turinio skleidim\u0105
v3.mb.delPublished.delete=&Trinti
v3.mb.delPublished.cancel=&Atsisakyti
-v3.mb.notTrusted.button.cancel=Atsisakyti
-v3.mb.UnknownContent.button.cancel=Atsisakyti
v3.mb.PlayFileNotFound.title=Failas nerastas
v3.mb.PlayFileNotFound.button.remove=\u0160alinti i\u0161 Vuze
v3.mb.deletePurchased.title=\u0160alinti nupirkt\u0105 turin\u012f
@@ -2128,4 +2114,7 @@ SpeedTestWizard.set.upload.panel.explain=\u010cia nustatyti limitai yra naudojam
SpeedTestWizard.set.limit.conf.level=Pasitik\u0117jimo lygis
SpeedTestWizard.finish.panel.auto.speed=Automatinis greitis yra :
SpeedTestWizard.finish.panel.auto.speed.seeding=Automatinis greitis skleid\u017eiant yra :
+ConfigView.label.announceport=Keisti Trackerio prane\u0161im\u0173 prievad\u0105
+iconBar.queue.tooltip=\u012e eil\u0119
+MainWindow.menu.help.faq=&Da\u017eniausiai u\u017eduodami klausimai
MainWindow.menu.help.donate=&Aukoti
diff --git a/org/gudy/azureus2/internat/MessagesBundle_mk_MK.properties b/org/gudy/azureus2/internat/MessagesBundle_mk_MK.properties
index 41aa3c3..b40cb42 100644
--- a/org/gudy/azureus2/internat/MessagesBundle_mk_MK.properties
+++ b/org/gudy/azureus2/internat/MessagesBundle_mk_MK.properties
@@ -1,3 +1,4 @@
+#There is a plugin to help with internationalizing these bundles at http://azureus.sourceforge.net/plugin_list.php
MainWindow.menu.file=\u0414\u0430\u0442\u043e\u0442\u0435\u043a\u0430
MainWindow.menu.file.open=\u041e\u0442\u0432\u043e\u0440\u0438
MainWindow.menu.file.create=\u041d\u043e\u0432 \u0442\u043e\u0440\u0435\u043d\u0442
@@ -128,7 +129,6 @@ MyTorrentsView.menu.removeand.deletedata=\u0438\u0437\u0431\u0440\u0438\u0448\u0
MyTorrentsView.menu.removeand.deleteboth=\u0438\u0437\u0431\u0440\u0438\u0448\u0438 \u0441\u0450
deletedata.title=\u041f\u0440\u0435\u0434\u0443\u043f\u0440\u0435\u0434\u0443\u0432\u0430\u045a\u0435
deletedata.message1=\u040c\u0435 \u0433\u0438 \u0438\u0437\u0431\u0440\u0438\u0448\u0435\u0442\u0435 \u043f\u043e\u0434\u0430\u0442\u043e\u0446\u0438\u0442\u0435 \u0437\u0430 :\n
-deletedata.message2=\n\u0414\u0430\u043b\u0438 \u0441\u0442\u0435 \u0441\u0438\u0433\u0443\u0440\u043d\u0438?
configureWizard.title=\u0412\u043e\u043b\u0448\u0435\u0431\u043d\u0438\u043a \u0437\u0430 \u043f\u043e\u0434\u0435\u0441\u0443\u0432\u0430\u045a\u0430
configureWizard.transfer.hint=\u0421\u043e\u0432\u0435\u0442: \u041d\u0430\u043c\u0435\u0441\u0442\u0435\u0442\u0435 \u043d\u0435\u0448\u0442\u043e \u043f\u043e\u043c\u0430\u043b\u043a\u0443 \u043e\u0434 \u043d\u0430\u0458\u0433\u043e\u043b\u0435\u043c\u0430\u0442\u0430 \u0432\u0440\u0435\u0434\u043d\u043e\u0441\u0442
configureWizard.transfer.connection=\u0418\u043d\u0442\u0435\u0440\u043d\u0435\u0442 \u0432\u0440\u0441\u043a\u0430
@@ -165,13 +165,18 @@ fileDownloadWindow.state_downloading=\u0421\u0438\u043c\u043d\u0443\u0432\u0430\
fileDownloadWindow.state_error=\u0413\u0440\u0435\u0448\u043a\u0430 :
MainWindow.menu.file.open.url=\u041b\u043e\u043a\u0430\u0446\u0438\u0458\u0430
openUrl.title=\u041e\u0442\u0432\u043e\u0440\u0438 \u043b\u043e\u043a\u0430\u0446\u0438\u0458\u0430
-MainWindow.menu.help.faq=\u0427\u0435\u0441\u0442\u043e \u043f\u043e\u0441\u0442\u0430\u0432\u0443\u0432\u0430\u043d\u0438 \u043f\u0440\u0430\u0448\u0430\u045a\u0430
splash.loadingImages=\u0412\u0447\u0438\u0442\u0443\u0432\u0430\u043c \u0441\u043b\u0438\u043a\u0438
splash.initializeGui=\u0413\u043e \u0438\u043d\u0446\u0438\u0458\u0430\u043b\u0438\u0437\u0438\u0440\u0430\u043c \u0433\u043b\u0430\u0432\u043d\u0438\u043e\u0442 \u043f\u0440\u043e\u0437\u043e\u0440\u0435\u0446
splash.openViews=\u041e\u0442\u0432\u043e\u0440\u0430\u043c \u043f\u043e\u0433\u043b\u0435\u0434\u0438
splash.plugin=\u0413\u043e \u0432\u0447\u0438\u0442\u0443\u0432\u0430\u043c \u043f\u043b\u0430\u0433\u0438\u043d\u043e\u0442
configureWizard.nat.tooManyPorts=\u041f\u0440\u0435\u043c\u043d\u043e\u0433\u0443 \u043f\u043e\u0440\u0442\u0438 \u0437\u0430 \u0442\u0435\u0441\u0442\u0438\u0440\u0430\u045a\u0435 (\u0441\u043c\u0435\u0435 \u0434\u043e 9)
MyTorrentsView.menu.publish=\u041e\u0431\u0458\u0430\u0432\u0438
+#
+# Tooltips
+#
+#
+# 2.0.4.4
+#
configureWizard.nat.sharePort=\u0423\u043f\u043e\u0442\u0440\u0435\u0431\u0443\u0432\u0430\u0458 \u0435\u0434\u0438\u043d\u0441\u0442\u0432\u0435\u043d\u0430 \u0432\u043b\u0435\u0437\u043d\u0430 \u043f\u043e\u0440\u0442\u0430 \u0437\u0430 \u0441\u0438\u0442\u0435 \u0442\u043e\u0440\u0435\u043d\u0442\u0438
columnChooser.title=\u0418\u0437\u0431\u0435\u0440\u0438 \u043a\u043e\u043b\u043e\u043d\u0438 \u0437\u0430 \u043f\u0440\u0438\u043a\u0430\u0437
columnChooser.move=\u041f\u0440\u0435\u0440\u0435\u0434\u0435\u0442\u0435 \u0433\u0438 \u0440\u0435\u0434\u043e\u0432\u0438\u0442\u0435 \u0441\u043e \u0432\u043b\u0435\u0447\u0435\u045a\u0435
@@ -201,6 +206,9 @@ MyTorrentsView.menu.moveEnd=\u041d\u0430\u0458\u0434\u043e\u043b\u0443
MainWindow.menu.view.stats=\u0421\u0442\u0430\u0442\u0438\u0441\u0442\u0438\u043a\u0430
TableColumn.header.health=\u0417\u0434\u0440\u0430\u0432\u0458\u0435
MyTorrentsView.menu.health=\u0417\u0430 \u0437\u0434\u0440\u0430\u0432\u0458\u0435\u0442\u043e
+#
+#2.0.7.0
+#
security.certtruster.yes=\u0414\u0430
security.certtruster.no=\u041d\u0435
MainWindow.menu.file.share=\u0421\u043f\u043e\u0434\u0435\u043b\u0438
@@ -214,6 +222,9 @@ MainWindow.menu.view.myshares=\u0441\u043f\u043e\u0434\u0435\u043b\u0435\u043d\u
GeneralView.label.hash.tooltip=\u0418\u0441\u043a\u043e\u043f\u0438\u0440\u0430\u0458 \u0433\u043e \u0445\u0435\u0448\u043e\u0442 \u0441\u043e \u043a\u043b\u0438\u043a\u0430\u045a\u0435
ConfigView.label.serverport=Incoming TCP listen port
configureWizard.nat.server.tcp_listen_port=\u0412\u043b\u0435\u0437\u043d\u0430 \u201eTCP\u201c \u043f\u043e\u0440\u0442\u0430
+#
+# 2.0.7.x
+#
Categories.all=\u0421\u0438\u0442\u0435
Categories.uncategorized=\u041d\u0435\u043a\u0430\u0442\u0435\u0433\u043e\u0440\u0438\u0437\u0438\u0440\u0430\u043d\u0438
CategoryAddWindow.message=\u0414\u043e\u0434\u0430\u0434\u0438 \u043d\u043e\u0432\u043e \u0438\u043c\u0435 \u0437\u0430 \u043a\u0430\u0442\u0435\u0433\u043e\u0440\u0438\u0458\u0430
@@ -241,6 +252,9 @@ AlertMessageBox.error=\u0413\u0440\u0435\u0448\u043a\u0430
AlertMessageBox.warning=\u041f\u0440\u0435\u0434\u0443\u043f\u0440\u0435\u0434\u0443\u0432\u0430\u045a\u0435
AlertMessageBox.comment=\u041a\u043e\u043c\u0435\u043d\u0442\u0430\u0440
AlertMessageBox.information=\u0418\u043d\u0444\u043e\u0440\u043c\u0430\u0446\u0438\u0458\u0430
+#
+# > 2.0.8.0
+#
TableColumn.header.remaining=\u041f\u0440\u0435\u043e\u0441\u0442\u0430\u043d\u0430\u0442\u043e
popup.error.hide=\u0422\u0440\u0433\u043d\u0438 \u0433\u043e
popup.error.details=\u041f\u043e\u0434\u0440\u043e\u0431\u043d\u043e\u0441\u0442\u0438
@@ -268,6 +282,8 @@ GeneralView.label.maxdownloadspeed.tooltip=\u041d\u0430\u0458\u0433\u043e\u043b\
Button.clear=\u0418\u0441\u0447\u0438\u0441\u0442\u0438
Button.reset=\u0420\u0435\u0441\u0442\u0430\u0440\u0442
ConfigView.section.server.enableudp=Enable UDP tracker client protocol.
+#Removed
+#MyTorrentsView.menu.setSpeed=Set Upload Speed
MainWindow.menu.transfers=\u0422\u0440\u0430\u043d\u0441\u0444\u0435\u0440\u0438
MainWindow.menu.transfers.startalltransfers=\u0417\u0430\u043f\u043e\u0447\u043d\u0438 \u0433\u0438 \u0441\u0438\u0442\u0435
MainWindow.menu.transfers.stopalltransfers=\u0417\u0430\u043f\u0440\u0438 \u0433\u0438 \u0441\u0438\u0442\u0435
@@ -316,6 +332,7 @@ MyTorrentsView.menu.advancedmenu=\u041d\u0430\u043f\u0440\u0435\u0434\u043d\u043
MyTorrentsView.menu.networks=\u041c\u0440\u0435\u0436\u0438
Button.apply=\u041f\u0440\u0438\u043c\u0435\u043d\u0438
Button.close=\u0417\u0430\u0442\u0432\u043e\u0440\u0438
+#file can be a URL or a path in the jar
MainWindow.menu.help.releasenotes=\u041a\u043e\u043c\u0435\u043d\u0442\u0430\u0440 \u0437\u0430 \u043d\u043e\u0432\u0430\u0442\u0430 \u0432\u0435\u0440\u0437\u0438\u0458\u0430
dht.reseed.label=Normally reseeding of the Distributed Database is not necessary. However, if the number of contacts is low this can be used for re-integratation.\nLeave blank to bootrap off connected peers or enter IP and port to explicitly bootstrap from a known peer.
MainWindow.dht.status.disabled=Disabled
@@ -325,11 +342,8 @@ MainWindow.dht.status.users=%1 Users
MyTorrentsView.menu.setUpSpeed=\u041f\u043e\u0441\u0442\u0430\u0432\u0438 \u0431\u0440\u0437\u0438\u043d\u0430 \u043d\u0430\u0433\u043e\u0440\u0435
MyTorrentsView.menu.setDownSpeed=\u041f\u043e\u0441\u0442\u0430\u0432\u0438 \u0431\u0440\u0437\u0438\u043d\u0430 \u043d\u0430\u0434\u043e\u043b\u0443
diagnostics.log_found=Vuze did not shutdown tidily. Please check %1 for diagnostic log files and consider reporting them to the Vuze team if this is the result of an application error.
+# %1 = "in kbps" or ""; %2 = "upload" or "download"
OpenTorrentWindow.torrentLocation=\u0414\u0430\u0442\u043e\u0442\u0435\u043a\u0438:
+# > 2402
+MainWindow.menu.help.faq=\u0427\u0435\u0441\u0442\u043e \u043f\u043e\u0441\u0442\u0430\u0432\u0443\u0432\u0430\u043d\u0438 \u043f\u0440\u0430\u0448\u0430\u045a\u0430
MainWindow.menu.help.donate=\u0414\u043e\u043d\u0438\u0440\u0430\u0458
-# The remaining keys were not in MessagesBundle.properties
-ConfigView.section.file.check_piece_limit.explain=If you have a slow CPU such that hash calculations lag behind disk writing (numerous complete pieces in pieces view), limiting check queue length may decrease memory usage
-ConfigView.section.file.write_block_limit.explain=If you have slow disk write performance such that disk writing is slower than download speed (numerous red blocks in pieces view), limiting write queue length may decrease memory usage
-MainWindow.dht.status.running=Running
-ConfigView.section.file.check_piece_limit=Maximum outstanding check pieces\n[0: unlimited]. Piece size depends on torrent
-ConfigView.section.file.write_block_limit=Maximum outstanding disk block writes\n[0: unlimited]. Block size %1
diff --git a/org/gudy/azureus2/internat/MessagesBundle_ms_SG.properties b/org/gudy/azureus2/internat/MessagesBundle_ms_SG.properties
index 6e5cc84..e43243a 100644
--- a/org/gudy/azureus2/internat/MessagesBundle_ms_SG.properties
+++ b/org/gudy/azureus2/internat/MessagesBundle_ms_SG.properties
@@ -1,3 +1,4 @@
+#There is a plugin to help with internationalizing these bundles at http://azureus.sourceforge.net/plugin_list.php
MainWindow.menu.file.open.torrent=Fail .torrent
MainWindow.menu.file=&Fail
MainWindow.menu.file.open=&Buka
@@ -284,7 +285,6 @@ MyTorrentsView.menu.removeand.deletedata=Padam &Data
MyTorrentsView.menu.removeand.deleteboth=Padam Kedua-duanya
deletedata.title=!!! Awas !!!
deletedata.message1=Kamu akan memadam DATA dari :\n
-deletedata.message2=\nPastikah anda?
MainWindow.menu.file.configure=Configuration &Wizard
configureWizard.welcome.message=This wizard will help you configure Vuze for most common use. You can modify in depth the configuration using the View>Configuration menu.
configureWizard.nat.message=In order to get the best out of BitTorrent, it's highly recommended to be fully accessible from the internet. Default bittorrent port is 6881. This tool lets you test and / or change the port.
@@ -362,7 +362,6 @@ MainWindow.menu.file.open.url=&URL
openUrl.title=Vuze - Buka Url
MyTorrentsView.menu.host.error.message=The following error occurred when
ConfigView.section.tracker=Pengesan
-MainWindow.menu.help.faq=&FAQ
ConfigView.section.tracker.checkip=Check Address...
ipCheckerWizard.explanations=You can use this wizard to find out what your external IP address is. If your IP address is dynamic, we recommend that you open an account with a Dynamic DNS Service. Some such services are listed below, use the link provided to create an account (where supported). Then fill the IP address field with your dynamic hostname (e.g. myhostname.dyndns.org). You'll need a program to automatically update your Dynamic DNS Service with your IP address. That way, you'll be able to host torrents, even if your IP changes.
wizard.tracker.local=Gunakan Pengesan Dalam Vuze
@@ -374,9 +373,15 @@ MyTorrentsView.menu.publish=&Publish...
MyTrackerView.completed=Selesai
MainWindow.menu.file.open.torrentnodefault=Fail .torrent (Tiada tempat simpan ditetapkan)
wizard.comment=Komen
+#
+# Tooltips
+#
GeneralView.label.status.pieces_available.tooltip=Menggambarkan jumlah setiap ketulan yang ada.\nJika nombor di sebelah kanan kurang dari 1, anda tidak melihat fail yang selesai (dan mungkin menghadapi masalah menyelesaikan memuat turun).
GeneralView.label.trackerurl.tooltip=Klik untuk menyalin URL makluman ke klipbod
GeneralView.label.trackerurlopen.tooltip=Klik untuk membuka lelaman pengesan utama.
+#
+# 2.0.4.4
+#
ConfigView.section.logging=Catatan
ConfigView.section.logging.enable=Gunakan catatan ke fail
ConfigView.section.logging.logdir=Catatkan direktori fail
@@ -447,6 +452,9 @@ health.explain.blue=Apabila menyemai, ia bermakna bahawa anda belum lagi disambu
health.explain.yellow=Bermakna pengesan berfungsi dan anda telah bersambung dengan rakan-rakankongsi, tetapi anda tidak mempunyai sambungan dari luar.\nAnda mungkin menghadapi masalah NAT jika Torrent kamu tetap berwarna kuning.
health.explain.green=Semua berjalan lancar.
ConfigView.section.style.alwaysRefreshMyTorrents=Selalu lancarsemula TorrentKu
+#
+#2.0.7.0
+#
MainWindow.menu.file.share=&Kongsi
MainWindow.menu.file.share.file=&Fail...
MainWindow.menu.file.share.dir=D&irektori...
@@ -471,6 +479,9 @@ GeneralView.label.hash.tooltip=Kilk untuk menyalin hash ke klipbod
ConfigView.label.serverport=Incoming TCP listen port
ConfigView.section.sharing=Pengongsian
ConfigView.section.sharing.usessl=Gunakan SSL untuk shared resources (memerlukan konfigurasi pengesan)
+#
+# 2.0.7.x
+#
Categories.all=Semua
Categories.uncategorized=Tidak dikategorikan
CategoryAddWindow.message=Masukkan nama kategori baru
@@ -547,6 +558,9 @@ SpeedView.stats.session=Sesi ini
SpeedView.stats.downloaded=Telah dimuat turun
SpeedView.stats.uploaded=Telah dimuat naik
SpeedView.stats.uptime=Masa berfungsi (jam)
+#
+# > 2.0.8.0
+#
OpenTorrentWindow.title=Buka Torrent
OpenTorrentWindow.addFiles=&Tambah Fail
OpenTorrentWindow.dataLocation=Tempat simpan data:
@@ -556,25 +570,15 @@ OpenTorrentWindow.addPosition.last=Terakhir
popup.error.hide=Sembunyikan
popup.error.details=Maklumat terperinci
ConfigView.section.tracker.publishenabledetails=Publish torrent file and peer details
+#Removed
+#MyTorrentsView.menu.setSpeed=Set Upload Speed
ConfigView.label.overrideip=Override IP address sent to tracker\n - Only use if you really know why you'd need it!
+#file can be a URL or a path in the jar
ConfigView.section.logging.log0type=Maklumat
+# %1 = "in kbps" or ""; %2 = "upload" or "download"
OpenTorrentWindow.torrentLocation=Fail Torrent:
Button.moveUp=Pindah ke atas
Button.moveDown=Pindah ke bawah
+# > 2402
+MainWindow.menu.help.faq=&FAQ
MainWindow.menu.help.donate=&Derma !!!
-# The remaining keys were not in MessagesBundle.properties
-ConfigView.section.file.check_piece_limit.explain=If you have a slow CPU such that hash calculations lag behind disk writing (numerous complete pieces in pieces view), limiting check queue length may decrease memory usage
-ConfigView.section.file.write_block_limit.explain=If you have slow disk write performance such that disk writing is slower than download speed (numerous red blocks in pieces view), limiting write queue length may decrease memory usage
-ConfigView.section.file.check_piece_limit=Maximum outstanding check pieces\n[0: unlimited]. Piece size depends on torrent
-ConfigView.section.file.write_block_limit=Maximum outstanding disk block writes\n[0: unlimited]. Block size %1
-configureWizard.nat.already_listening=Unable to test because listening port is already\nin use. Please stop all active torrents and restart Azureus.\nThen run this test again.
-SystemTray.menu.stopalldownloads=Hentikan &kesemua memuat turun
-MainWindow.about.internet.featurerequests=Permintaan ciri-ciri
-ConfigView.label.maxclients=Maximum number of connections per torrent [0: unlimited]
-ConfigView.label.slowconnect=Slowly connect new peer connections\n - For people with internet disconnection issues
-didalam=fail tersebut
-incoming=port configuration / firewall permissions for application to act as server
-ConfigView.section.proxy.description=Enable proxying of tracker and peer communications.\nPeer proxying requires a SOCKS-compatible proxy.\nVuze must be restarted before changes take effect.
-hosting=the torrent
-SystemTray.menu.startalldownloads=Mulakan kesemua memuat turun
-ConfigView.label.maxuploadspeed.kbs=KB/s
diff --git a/org/gudy/azureus2/internat/MessagesBundle_nl_NL.properties b/org/gudy/azureus2/internat/MessagesBundle_nl_NL.properties
index e0efed8..e82d118 100644
--- a/org/gudy/azureus2/internat/MessagesBundle_nl_NL.properties
+++ b/org/gudy/azureus2/internat/MessagesBundle_nl_NL.properties
@@ -376,7 +376,6 @@ MyTorrentsView.menu.removeand.deletedata=Verwijder &Data
MyTorrentsView.menu.removeand.deleteboth=Verwijder &Beide
deletedata.title=!!! Waarschuwing !!!
deletedata.message1=Je staat op het punt de DATA te verwijderen van :
-deletedata.message2=\nWeet je zeker dat je wilt doorgaan?
MainWindow.menu.file.configure=Configuratie &Wizard...
configureWizard.title=Configuratie wizard
configureWizard.welcome.title=Welkom bij de Vuze Configuratie wizard
@@ -508,7 +507,6 @@ ConfigView.section.tracker=Tracker
ConfigView.section.tracker.pollinterval=Tracker cli\u00ebnt afstemming interval (sec)
ConfigView.section.tracker.publishenable="Publiceer torrent details naar "<tracker_url>""
ConfigView.section.tracker.ip=IP-adres van externe tracker
-MainWindow.menu.help.faq=Vaak gestelde vragen
ConfigView.section.style.enableXPStyle=Activeer XP stijl (herstart nodig)
ConfigView.section.tracker.checkip=Automatisch extern IP adres opzoeken...
ipCheckerWizard.title=Wizard IP Controle
@@ -703,7 +701,6 @@ ConfigView.section.style.alwaysRefreshMyTorrents.tooltip=Deze optie ververst Mij
#
#2.0.7.0
#
-ConfigView.section.style.verticaloffset=Grafisch Verticaal Beginpunt (GTK fix)
security.certtruster.title=Beveiliging Certificaat Waarschuwing
security.certtruster.intro=Het beveiliging certificaat is vrijgegeven door een bedrijf dat je niet vertrouwt
security.certtruster.resource=Bron:
@@ -841,7 +838,6 @@ ConfigView.text.minutes=minuten op
ConfigView.text.neverIgnore=Nooit Negeren
ConfigView.text.any=een
DownloadManager.error.datamissing=Gegevens ontbreken
-iconBar.queue.tooltip=Wachtrij
MainWindow.menu.file.open.torrentforseeding=Torrent bestand (Voor Uploaden)
MainWindow.menu.language.refresh=Ve&rnieuwen
ManagerItem.forced=Geforceerd
@@ -1869,13 +1865,8 @@ MainWindow.menu.view.iconbar=Gereedschap balk
MyTorrentsView.menu.rename=Hernoem
MyTorrentsView.menu.rename.displayed=Hernoem de getoonde naam
MyTorrentsView.menu.rename.save_path=Hernoem opslag map
-MyTorrentsView.menu.rename.displayed_and_save_path=Hernoem bijde
MyTorrentsView.menu.rename.displayed.enter.title=Hernoem de getoonde naam
MyTorrentsView.menu.rename.displayed.enter.message=Geef een nieuwen naam om deze download te tonen.\nAls er geen tekst geplaatst is, wordt de originelen naam gebruikt.
-MyTorrentsView.menu.rename.save_path.enter.title=Hernoem opslag map
-MyTorrentsView.menu.rename.save_path.enter.message=Geef een nieuwen opslag map voor deze download.\nAls er geen tekst wordt gegeven, word de getoonde download naam gebruikt.
-MyTorrentsView.menu.rename.displayed_and_save_path.enter.title=Hernoem de download
-MyTorrentsView.menu.rename.displayed_and_save_path.enter.message=Geef een nieuwen naam voor deze download.\nAls er geen tekst wordt gegeven , worden de oud waardes gebruikt.
MyTorrentsView.menu.edit_comment=Schrijf commentaar
MyTorrentsView.menu.edit_comment.enter.title=Schrijf commentaar
MyTorrentsView.menu.edit_comment.enter.message=Plaats een commentaar voor deze download
@@ -2019,8 +2010,6 @@ SpeedTestWizard.stage.message.connect.stats=Connectie status: peers=%1, down_ok=
window.uiswitcher.title=Vuze UI Kiezer
window.uiswitcher.text=Selecteer de gewenste gebruikersinterface (UI).
window.uiswitcher.NewUI.text=* Aanbevolen voor beginners en nieuwen gebruikers.\n\n* Een makelijk, intiutief grafisch uiterlijk.\n\n* Vereiste uiterlijk voor het publiceren op het Vuze platform.
-window.uiswitcher.AdvancedUI.title=Geavanceerde Vuze
-window.uiswitcher.AdvancedUI.text=* Aanbevolen voor gebruikers die gebruik willen maken van het klassieke uiterlijk maar ook willen zoeken, browsen en plaatsen op het Vuze platform.\n\n* Een makelijk, intu\u00eftief grafische uiterlijk gepaard met geavanceerde mogelijkheden en functionaliteit.
window.uiswitcher.ClassicUI.title=Klassiek uiterlijk
window.uiswitcher.ClassicUI.text=* Behoud de functionaliteit van de 2.x versies.\n\n* Vuze skin word niet geladen.
window.uiswitcher.bottom.text=U kunt later opnieuw met de UI Kiezer eenvoudig uw keuze wijzigen.
@@ -2048,6 +2037,11 @@ TableColumn.header.Rating=Waarderen
TableColumn.header.SpeedGraphic=Snelheid
TableColumn.header.AzProduct=Van
TableColumn.header.ProgressETA=Voortgang
+#TableColumn.header.size={MyTorrentsView.size}
+#TableColumn.header.up={MyTorrentsView.up}
+#TableColumn.header.date_added={MyTorrentsView.date_added}
+#TableColumn.header.name={MyTorrentsView.name}
+#TableColumn.header.shareRatio={MyTorrentsView.shareRatio}
v3.MainWindow.tab.browse=Browse Inhoud
v3.MainWindow.tab.library=Mijn Bibliotheek
v3.MainWindow.tab.publish=Publiceer
@@ -2066,7 +2060,6 @@ v3.MainWindow.button.comment=Commentaar
v3.MainWindow.button.viewdetails=Bekijk Details
v3.MainWindow.button.play=Speel
v3.MainWindow.button.cancel=Afbreken
-v3.MainWindow.button.sendtofriend=Deel
v3.MainWindow.view.wait=Initialicering voor tonen, momentje.
v3.MainWindow.xofx=%1 van %2
v3.MainWindow.Loading=Laden. Momentje graag.
@@ -2076,16 +2069,6 @@ v3.mb.delPublished.title=Stop met uploaden van de inhoud
v3.mb.delPublished.text=WAARSCHUWING: Deze actie zal niet de gepubliceerde inhoud '%1' verwijderen van <A HREF="%2">%3</A> \n\nKlik "Verwijderen" alleen als de gepubliceerde inhoud beschikbaar moet blijven voor downloaden, maar wel bandbreedte vrij wil maken. Zorg wel dat de uploads goed afgesloten zijn voordat je deze verwerking doorvoerd. (<A HREF="%4">how</A>?).\n\nKlik "Annuleer" als je de complete gepubliceerde inhoud wil verwijderen van www.GetVuze, en gebruik de (X) knop op het Gepubliceerde Inhoud Paneel in de publiceer tab.\n\n<A HREF="%4">Meer hulp</A>.\n\n
v3.mb.delPublished.delete=&Verwijder
v3.mb.delPublished.cancel=&Annuleer
-v3.mb.notTrusted.title=Inhoud is niet vertouwt
-v3.mb.notTrusted.text=De inhoud '%1' is herkent als mogelijk gevaarlijk, jou systeem raporteert de inhoud het als een '%2' type.
-v3.mb.notTrusted.noapp.text=De inhoud '%1' is herkent als waarschijnlijk gevaarlijk, het is voor het systeem een onbekend formaat (%2).
-v3.mb.notTrusted.button.run=Weg gaan
-v3.mb.notTrusted.button.cancel=Annuleer
-v3.mb.UnknownContent.title=Inhoud Onbekent
-v3.mb.UnknownContent.text=De inhoud '%1' is niet herkent als een bekent formaat. Jou syteem raporteert de inhoud als een type '%2'. De inhoud file extensie is '%3'.
-v3.mb.UnknownContent.noapp.text=De inhoud '%1' is niet herkent als een bekent formaat. Jou systeem heeft geen programma voor dit file type (%2).
-v3.mb.UnknownContent.button.run=Weg Gaan.
-v3.mb.UnknownContent.button.cancel=Annuleer
v3.mb.PlayFileNotFound.title=Bestand Niet Gevonden
v3.mb.PlayFileNotFound.text=De files voor '%1' zijn verwijder of vermist.
v3.mb.PlayFileNotFound.button.remove=Verwijder uit Vuze
@@ -2307,11 +2290,6 @@ ConfigView.section.security.unlockkey.error=Unlock key is mislukt - wachtwoord i
ConfigView.copy.to.clipboard.tooltip=kopi\u00ebr naar het clipboard
Views.plugins.azbuddy.title=Vrienden
Browser.popup.error.no.access=Er is een fout opgetreden tijden het contact maken met een anderen bron.\nProbeer het later nog eens !
-v3.activity.header.today=Vandaag
-v3.activity.header.yesterday=Gisteren
-v3.activity.header.xdaysago=%1 Dagen Geleden
-v3.activity.header.1weekago=1 Week Geleden
-v3.activity.header.xweeksago=%1 Weken Geleden
ConfigView.label.queue.stoponcebandwidthmet=Start geen torrents wanneer de upload/download snelheids limit is berijkt
ConfigView.section.style.forceMozilla=Dwing Vuze voor het gebruiken van Mozilla voor Browser inschakeling [xulrunner of firefox 3 nodig; Vuze herstarten vereist]
ConfigView.section.style.xulRunnerPath=Specificeer de XulRunner / Firefox map handmatig [vereist voor FF3; Vuze herstart vereist]
@@ -2356,82 +2334,20 @@ Button.bar.share=Deel
Button.bar.add=Plaats Vrienden
Button.bar.edit=Bewerk
Button.bar.edit.cancel=Klaar met bewerken
-v3.Share.menu=Deel de inhoud
-v3.Share.header=Deel
-v3.Share.header.message=Deel met de huidigen vrienden, of plaats nieuwen vrienden.
-v3.Share.add.buddy=Plaats Nieuwen Vrienden
-v3.Share.add.buddy.all=Deel met alle
-v3.Share.add.buddy.existing=Bestaande vrienden waar ik mee wil delen:
-v3.Share.add.buddy.new=Nieuwen vrienden die ik wil uitnodigen en mee wil delen:
-v3.Share.buddies=Vrienden
-v3.Share.invite.buddies.prompt=Inviteer meer vrienden om mee te delen.
-v3.Share.send.now=Zend
-v3.Share.optional.message=Optioneel bericht:
-v3.Share.disclaimer=Note: Bijde die je deelt, als ook het optionelen bericht zal gebruik maken van encryptie.
-v3.Share.disclaimer.link=Leer meer...
-ConfigView.section.security.vuze.login=U moet ingelogt zijn bij Vuze voor deze bewerking
-v3.buddy.menu.viewprofile=Bekijk profiel
-v3.buddy.menu.remove=Verwijder vriend
v3.MainWindow.menu.view.pluginbar=Plugin balk
-v3.activity.buddy-request=Je hebt een vriend vezoek van %1
-v3.activity.buddy-request.accept=Accepteer
-v3.activity.buddy-request.multi=Je hebt een vriend verzoek [#%3] van %1
-v3.activity.buddy-linkup=Jij en %1 zijn nu vrienden
-v3.activity.share-content.no-msg=%1 wil met jou delen %2
-v3.buddies.count=%1 Vrienden
-v3.buddies.remove=Verwijder vriend
-v3.buddies.add.to.share=Plaats vriend voor delen
MainWindow.dialog.select.vuze.file=Selecteer Vuze File
-azbuddy.ui.dialog.disable.title=Uitzetten vrienden Plugin
-azbuddy.ui.dialog.disable.text=Uitzetten van de vrienden plugin voorkomt dat er torrents gedeelt worden via de vrienden balk aan de onderzijde van de applicatie, en voorkomt dat je vriende lijst veranderd\n\nWeet je zeker dat je dit wilt uit zetten?
metasearch.addtemplate.title=Installeer Zoek Template?
metasearch.addtemplate.desc=Weet je zeker dat je de zoek template met de naam '%1' wil installeren?
v3.share.private.title=Delen Torrent
v3.share.private.text=De geselecteerde torrent is gemarkeerd als een prive torrent.\n\nJe kunt geen prive torrents delen.
-v3.buddies.disabled.title=Vrienden Plugin Uitgezet
-v3.buddies.disabled.text._windows=Je heb de vrienden plugin uitgeschakeld, wat inhoud dat je geen files deelt of kunt ontvangen, ook aan verzoeken van vrienden kan niet voldaan worden. Je kunt de instellingen veranderen via de optie tab.
-v3.buddies.disabled.text._mac=Je heb de vrienden plugin uitgeschakeld, wat inhoud dat je geen files deelt of kunt ontvangen, ook aan verzoeken van vrienden kan niet voldaan worden. Je kunt de instellingen veranderen via de optie tab.
metasearch.addtemplate.dup.desc=Zoek template %1 is al geinstalleerd
metasearch.export.select.template.file=Opslaan Template
-v3.MainWindow.button.newtag.share=Nieuw! Deel Torrent
-v3.buddies.faq=Leer meer...
dialog.uiswitch.title=Schakel naar de Vuze UI
dialog.uiswitch.text=Je moet de Vuze UI gebruiker om gebruik te kunnen maken van deze mogelijkheid.
dialog.uiswitch.button=Schakel naar de Vuze UI
azbuddy.tracker.enabled=Geef prioriteit aan vrienden met het downloaden van de zelfde inhoud
azbuddy.protocolspeed=KB/s max vriend protocol overhead
v3.MainWindow.button.run=Start gedownloaden file
+iconBar.queue.tooltip=Wachtrij
+MainWindow.menu.help.faq=Vaak gestelde vragen
MainWindow.menu.help.donate=Geef een donatie !!!
-# The remaining keys were not in MessagesBundle.properties
-Progress.reporting.prompt.label.retry=Opnieuw
-Progress.reporting.prompt.label.cancel=Annuleer
-v3.TorrentOptionsView.title.short=Voorkeuren
-xmlhttp.config.option.debug.deserialisation=Input XML handeling/behandeling
-ConfigView.section.connection.advanced.IPTOS.tooltip=Stel de traffic klasse / type-of-service (TOS) in de IP header in voor uitgaande pakketjes.\nAzureus laat dit standaard niet ingesteld, dit betekend dat de standaard OS instellingen worden gebruikt.\nVoorbeeld waardes zijn:\n0x02 voor IPTOS_LOWCOST\n0x04 voor IPTOS_REALIABILITY\n0x08 voor IPTOX_TRHOUGHPUT\n0x10 voor IPTOS_LOWDELAY\nOpmerking: Onderliggende netwerk implementaties kunnen deze waardes negeren, deze optie is dus zeer afhankelijk van de OS en JRE versies.
-v3.mb.stopSeeding.text=WAARSCHUWING: Deze actie zal niet de gepubliceerde inhoud '%1' verwijderen van <A HREF="%2">%3</A> \n\nKlik "Verwijderen" alleen als de gepubliceerde inhoud beschikbaar moet blijven voor downloaden, maar wel bandbreedte vrij wil maken. Zorg wel dat de uploads goed afgesloten zijn voordat je deze verwerking doorvoerd. (<A HREF="%4">how</A>?).\n\nKlik "Annuleer" als je de complete gepubliceerde inhoud wil verwijderen van www.GetAzureus, en gebruik de (X) knop op het Gepubliceerde Inhoud Paneel in de publiceer tab.\n\n<A HREF="%4">More help</A>.\n\n
-Progress.reporting.prompt.label.cancel.tooltip=Annuleer de bewerking
-v3.mb.stopSeeding.delete=&Verwijder
-xmlhttp.config.group.debug=Debug instellingen
-ConfigView.section.style.SeparateFilesViewRenameRetarget=Toon gescheide "Hernoem"en "Nieuw doelstelling" menu in de files tab.
-v3.mb.stopSeeding.title=Stop Seeding Inhoud
-v3.ConfigView.title.full=Voorkeuren
-xmlhttp.config.option.log_to_plugin=Plugin scherm (*)
-v3.mb.stopSeeding.cancel=&Annuleer
-Progress.reporting.prompt.label.remove=Verwijder
-v3.TorrentOptionsView.title.full=Voorkeuren
-Progress.reporting.prompt.label.remove.tooltip=Verwijder dit Voortgang Raport uit de historie
-ConfigView.label.bindip.info=Als voorbeeld, '192.168.1.2' of 'eth0' (huidige: %1)
-Progress.reporting.prompt.label.detail.tooltip=Toon deze voortgang Raportage in het detail scherm
-ConfigView.section.connection.advanced.IPTOS=Uitgaande packet type-of-service (TOS) [zie http://www.azureuswiki.com/index.php/AdvancedNetworkSettings]
-network.ltep.enabled=Gebruik maken van het experimentelen extensie protocol handshake ondersteuning (herstart vereist)
-xmlhttp.config.option.debug.serialisation=Output XML handeling/behandeling
-xmlhttp.config.group.logging=Logging
-xmlhttp.config.option.log_to_console=Console (*)
-xmlhttp.config.group.logging.description=Selecteer waar je de logging output naartoe wil hebben:
-v3.MainWindow.menu.view.configuration=Voorkeuren
-Progress.reporting.prompt.label.retry.tooltip=Opnieuw bewerking uitvoeren
-xmlhttp.config.option.debug.method_lookup=Methode resolutie/beslissing
-xmlhttp.config.option.debug.method_invocation=Methode invocatie/aanroeping
-ConfigView.label.announceport.tooltip=Informeer de tracker van een andere poort dan de poort waarnaar je luistert. Laat de optie leeg als je deze niet wil gebruiken.
-v3.ConfigView.title.short=Voorkeuren
-xmlhttp.config.group.debug.description=Dit onderdeel word gebruikt om meer nuttigen informatie naar de console te plaatsen.
diff --git a/org/gudy/azureus2/internat/MessagesBundle_pl_PL.properties b/org/gudy/azureus2/internat/MessagesBundle_pl_PL.properties
index aaa6f1a..a6a0826 100644
--- a/org/gudy/azureus2/internat/MessagesBundle_pl_PL.properties
+++ b/org/gudy/azureus2/internat/MessagesBundle_pl_PL.properties
@@ -706,7 +706,6 @@ ConfigView.section.style.alwaysRefreshMyTorrents.tooltip=Opcja ta b\u0119dzie od
#
#2.0.7.0
#
-ConfigView.section.style.verticaloffset=Offset pionowy grafiki (poprawka do GTK)
security.certtruster.title=Ostrze\u017cenie certyfikatu zabezpiecze\u0144
security.certtruster.intro=Certyfikat bezpiecze\u0144stwa zosta\u0142 wyemitowany przez firm\u0119 nie nale\u017c\u0105c\u0105 do zaufanych
security.certtruster.resource=Zas\u00f3b:
@@ -1877,13 +1876,8 @@ MainWindow.menu.view.iconbar=Pasek narz\u0119dzi
MyTorrentsView.menu.rename=Zmiana nazwy
MyTorrentsView.menu.rename.displayed=Zmie\u0144 wy\u015bwietlan\u0105 nazw\u0119
MyTorrentsView.menu.rename.save_path=Zmie\u0144 \u015bcie\u017ck\u0119 zapisu
-MyTorrentsView.menu.rename.displayed_and_save_path=Zmie\u0144 obie
MyTorrentsView.menu.rename.displayed.enter.title=Zmie\u0144 wy\u015bwietlan\u0105 nazw\u0119
MyTorrentsView.menu.rename.displayed.enter.message=Wprowad\u017a now\u0105 nazw\u0119 do wy\u015bwietlenia dla tego pobierania.\nJe\u015bli nie wprowadzisz \u017cadnego tekstu, u\u017cyta zostanie oryginalna nazwa.
-MyTorrentsView.menu.rename.save_path.enter.title=Zmie\u0144 \u015bcie\u017ck\u0119 zapisu
-MyTorrentsView.menu.rename.save_path.enter.message=Wprowad\u017a now\u0105 \u015bcie\u017ck\u0119 zapisu dla tego pobierania.\nJe\u017celi nie wprowadzisz \u017cadnego tekstu, u\u017cyta zostanie wy\u015bwietlana nazwa pobrania.
-MyTorrentsView.menu.rename.displayed_and_save_path.enter.title=Zmie\u0144 nazw\u0119 pobierania
-MyTorrentsView.menu.rename.displayed_and_save_path.enter.message=Wprowad\u017a now\u0105 nazw\u0119 dla tego pobierania.\nJe\u017celi nie wprowadzisz \u017cadnego tekstu, u\u017cyte zostan\u0105 oryginalne warto\u015bci.
MyTorrentsView.menu.edit_comment=Edytuj komentarz
MyTorrentsView.menu.edit_comment.enter.title=Edytuj komentarz
MyTorrentsView.menu.edit_comment.enter.message=Wprowad\u017a komentarz dla tego pobierania.
@@ -2092,7 +2086,6 @@ v3.MainWindow.button.comment=Komentarz
v3.MainWindow.button.viewdetails=Zobacz szczeg\u00f3\u0142y
v3.MainWindow.button.play=Odtw\u00f3rz
v3.MainWindow.button.cancel=Anuluj
-v3.MainWindow.button.sendtofriend=Udost\u0119pnij torrent
v3.MainWindow.button.preview=Podgl\u0105d
v3.MainWindow.view.wait=Uruchamianie widoku, prosz\u0119 czeka\u0107.
v3.MainWindow.xofx=%1 z %2
@@ -2376,88 +2369,33 @@ Button.bar.hide=Ukryj
Button.bar.share=Udost\u0119pnij
Button.bar.add=Dodaj
Button.bar.edit=Edytuj
-v3.Share.menu=Zawarto\u015b\u0107 udost\u0119pniana
-v3.Share.header=Udost\u0119pnij
-v3.Share.header.message=Udost\u0119pnij znajomym albo dodaj nowych znajomych.
-v3.Share.add.buddy=Dodaj znajomych
-v3.Share.add.edit.buddy=Dodaj/Edytuj znajomych
-v3.Share.add.buddy.all=Udost\u0119pnij wszystkim
-v3.Share.add.buddy.existing=Istniej\u0105cy znajomi:
-v3.Share.add.buddy.new=Nowi znajomi:
-v3.Share.buddies=Znajomi
-v3.Share.invitees=Zaproszeni
-v3.Share.invite.buddies.prompt=Zapro\u015b\u0107 wi\u0119cej znajomych do udost\u0119pniania z
-v3.Share.send.now=Wy\u015blij
-v3.Share.optional.message=Opcjonalna wiadomo\u015b\u0107 dostarczona przez powiadomienia (maksymalnie 140 znak\u00f3w):
-v3.Share.disclaimer=Uwaga: Zar\u00f3wno udost\u0119pniana zawarto\u015b\u0107 jak i opcjonalna wiadomo\u015b\u0107 b\u0119dzie szyfrowana.
-v3.Share.disclaimer.link=Wi\u0119cej
-ConfigView.section.security.vuze.login=Musisz by\u0107 zalogowany w Vuze, aby przeprowadzi\u0107 t\u0119 operacj\u0119
-v3.buddy.menu.viewprofile=Zobacz profil
-v3.buddy.menu.remove=Usu\u0144 znajomego
v3.MainWindow.menu.view.pluginbar=Pasek wtyczki
-v3.MainWindow.menu.view.buddies-viewer=Pasek znajomych
-v3.activity.buddy-request=Dosta\u0142e\u015b \u017c\u0105danie od %1
-v3.activity.buddy-request.accept=Akceptuj
-v3.activity.buddy-request.multi=Dosta\u0142e\u015b \u017c\u0105danie [#%3] od %1
-v3.activity.buddy-linkup=Ty i %1 zostali\u015bcie znajomymi
-v3.activity.share-content=%1 udost\u0119pni\u0142 %2 Tobie. %3 <A HREF="%4" TITLE="%5">m\u00f3wi...</A>
-v3.activity.share-content.no-msg=%1 udost\u0119pni\u0142 %2 Tobie
-v3.buddies.friends=Znajomi
-v3.buddies.remove=Usu\u0144 znajomego
-v3.buddies.add.to.share=Dodaj znajomych do udost\u0119pniania
MainWindow.dialog.select.vuze.file=Wybierz plik Vuze
MainWindow.menu.file.open.vuze=Plik Vuze...
-azbuddy.ui.dialog.disable.title=Wy\u0142\u0105cz wtyczk\u0119 Znajomi
-azbuddy.ui.dialog.disable.text=Wy\u0142\u0105czenie wtyczki Znajomi zapobiegnie udost\u0119pnianiu torrent\u00f3w przez Pasek znajomych na dole aplikacji oraz modyfikowaniu listy Twoich znajomych\n\nCzy chcesz wy\u0142\u0105czy\u0107 Znajomych?
metasearch.addtemplate.title=Zainstalowa\u0107 szablon wyszukiwania?
metasearch.addtemplate.desc=Czy jeste\u015b pewien, \u017ce chcesz zainstalowa\u0107 szablon wyszukiwania nazwany '%1'?
v3.share.private.title=Udost\u0119pnianie torrenty
v3.share.private.text=Wybrany torrent jest zaznaczony jako prywatny torrent.\n\nNie mo\u017cesz udost\u0119pnia\u0107 prywatnych torrent\u00f3w.
-v3.buddies.disabled.title=Wy\u0142\u0105czona wtyczka znajomych
-v3.buddies.disabled.text._windows=Wy\u0142\u0105czy\u0142e\u015b wtyczk\u0119 znajomych, kt\u00f3ra zapobiega udost\u0119pnianiu lub akceptacji torrent\u00f3w albo \u017c\u0105da\u0144 znajomych. Mo\u017cesz zmieni\u0107 ustawienia w zak\u0142adce Opcje.
-v3.buddies.disabled.text._mac=Wy\u0142\u0105czy\u0142e\u015b wtyczk\u0119 znajomych, kt\u00f3ra zapobiega udost\u0119pnianiu lub akceptacji torrent\u00f3w albo \u017c\u0105da\u0144 znajomych. Mo\u017cesz zmieni\u0107 ustawienia w zak\u0142adce Opcje.
metasearch.addtemplate.dup.title=Duplikat szablonu
metasearch.addtemplate.dup.desc=Szablon wyszukiwania %1 jest ju\u017c zainstalowany
metasearch.export.select.template.file=Zapisz szablon
metasearch.import.select.template.file=Otw\u00f3rz szablon
-v3.MainWindow.button.newtag.share=Nowo\u015b\u0107! Udost\u0119pnij torrent
-v3.buddies.faq=Wi\u0119cej
dialog.uiswitch.title=Prze\u0142\u0105cz do interfejsu u\u017cytkownika Vuze
dialog.uiswitch.text=Musisz mie\u0107 uruchomiony interfejs u\u017cytkownika Vuze, aby u\u017cy\u0107 tej opcji.\n\nVuze musi by\u0107 ponownie uruchomiony.
dialog.uiswitch.button=Prze\u0142\u0105cz do interfejsu u\u017cytkownika Vuze
azbuddy.tracker.enabled=W\u0142\u0105cz 'Friends Boost', aby uszeregowa\u0107 pobieranie ze znajomymi
v3.MainWindow.button.download=Pobierz
v3.MainWindow.button.run=Uruchom pobrany plik
-v3.activity.header.friend.requests.foryou=\u017b\u0105danie od znajomego - Dla Ciebie
-v3.activity.header.friend.requests.fromyou=\u017b\u0105danie od znajomego - Od Ciebie
-v3.activity.header.friend.requests.accepted=\u017b\u0105danie od znajomego - Zaakceptowane
-v3.activity.header.share.requests=\u017b\u0105danie udost\u0119pnienia torrentu
v3.activity.header.downloads=Pobierania
-v3.activity.header.rating.reminders=Przypomnienia o ocenie
v3.activity.header.vuze.news=Wiadomo\u015bci Vuze
-login.optional.message=Musisz by\u0107 zarejestrowany, aby u\u017cy\u0107 tej funkcji
-message.confirm.share.singular=Wspaniale! Twoja pro\u015bba o udost\u0119pnienie torrentu zosta\u0142a wys\u0142ana.
-message.confirm.share.plural=Wspaniale! Twoje pro\u015bby o udost\u0119pnienie torrentu zosta\u0142y wys\u0142ane.
-message.confirm.share.invite.singular=Wspaniale! Twoja pro\u015bba o po\u0142\u0105czenie i udost\u0119pnienie zosta\u0142a wys\u0142ana. Przekonaj go do akceptacji.
-message.confirm.share.invite.plural=Wspaniale! Twoje pro\u015bby o po\u0142\u0105czenie i udost\u0119pnienie zosta\u0142y wys\u0142ane. Przekonaj go do akceptacji.
-message.confirm.invite.singular=Wspaniale! Twoja pro\u015bba do znajomego zosta\u0142a wys\u0142ana. Przekonaj go do akceptacji.
-message.confirm.invite.plural=Wspaniale! Twoja pro\u015bba do znajomego zosta\u0142a wys\u0142ana. Przekonaj go do akceptacji.
-message.confirm.invite.error=Jedno lub wi\u0119cej zaprosze\u0144 zawiera\u0142o b\u0142\u0119dy.
-message.prompt.add.friends=Wybierz znajomych z paska bocznego (na dole po lewej).
message.taking.too.long=Zajmuje to wi\u0119cej czasu ni\u017c zwykle\nNaci\u015bnij 'ESC' je\u015bli chcesz anulowa\u0107 operacj\u0119
message.status.success=Sukces
-message.intro.friends=Dodaj znajomych.\nUdost\u0119pniaj torrenty.\nPobieraj szybciej.
azbuddy.tracker.bbb.status.title.tooltip=Kliknij podw\u00f3jnie, aby uzyska\u0107 szczeg\u00f3\u0142y
azbuddy.tracker.bbb.status.nli=Wymagany login
v3.MainWindow.search.go.tooltip=Wykonaj wyszukiwanie
v3.MainWindow.search.last.tooltip=Powr\u00f3\u0107 do wynik\u00f3w wyszukiwania
-v3.activity.buddy-invited=Wys\u0142a\u0142e\u015b \u017c\u0105danie do %1.
-v3.activity.buddy-invited.multi=Wys\u0142a\u0142e\u015b \u017c\u0105danie do nast\u0119puj\u0105cych ludzi:\n%1
metasearch.addtemplate.done.title=Szablon dodany
metasearch.addtemplate.done.desc=Szablon '%1' dodany prawid\u0142owo.\nB\u0119dzie u\u017cyty przy nast\u0119pnym wyszukiwaniu!
-v3.MainWindow.button.share=Udost\u0119pnij zawarto\u015b\u0107
-v3.buddies.remove.buddy.dialog.title=Usu\u0144
-v3.buddies.remove.buddy.dialog.text=Czy na pewno chcesz usun\u0105\u0107 %1 jako znajomego?
ConfigView.section.security.nopw=Nie podano has\u0142a
ConfigView.section.security.nopw_v=Has\u0142o niedost\u0119pne, prosz\u0119 si\u0119 zalogowa\u0107 do Vuze
fileplugininstall.install.title=Zainstalowa\u0107 wtyczk\u0119?
@@ -2469,13 +2407,7 @@ azbuddy.os_away=Oddalony
azbuddy.os_not_avail=Niedost\u0119pny
azbuddy.os_busy=Zaj\u0119ty
azbuddy.ui.menu.disconnect=Roz\u0142\u0105cz
-v3.buddy.menu.chat=Czat
-v3.chat.offline=%1 jest obecnie offline i dostanie wiadomo\u015b\u0107, kiedy b\u0119dzie online.
-v3.chat.wrongversion=%1 u\u017cywa wersji Vuze, kt\u00f3ra nie obs\u0142uguje czata.
azbuddy.enable_chat_notif=W\u0142\u0105cz powiadomienia z czata
-v3.buddies.dnd.info.dialog.title=Udost\u0119pnij
-v3.buddies.dnd.info.dialog.text=Zainicjowa\u0142e\u015b udost\u0119pnianie. Twoja zawarto\u015b\u0107 zostaje przygotowana do udost\u0119pniania, a okno udost\u0119pniania zostanie otwarte, gdy zawarto\u015b\u0107 b\u0119dzie gotowa.\n\nMusisz mie\u0107 ca\u0142y czas uruchomiony Vuze, \u017ceby Tw\u00f3j znajomy m\u00f3g\u0142 odebra\u0107 zawarto\u015b\u0107.\n<A HREF="http://faq.vuze.com/?View=entry&EntryID=267">Kliknij tutaj</A> ,aby dowiedzi\u0119c si\u0119 wi\u0119cej o tej funkcji.
-v3.buddies.dnd.info.dialog.remember=Nie pokazuj wi\u0119cej tej wiadomo\u015bci
progress.window.msg.progress=Prosz\u0119 czeka\u0107 na uko\u0144czenie operacji
ConfigView.section.connection.advanced.read_select=Odczyt wybranego czasu oczekiwania (milisekundy, domy\u015blnie %1)
ConfigView.section.connection.advanced.read_select_min=Odczyt wybraneego minimalnego oczekiwania (milisekundy, domy\u015blnie %1)
@@ -2528,24 +2460,17 @@ PluginDeprecation.view=Debugowanie wtyczki
PluginDeprecation.alert=Wtyczka pr\u00f3buje u\u017cywa\u0107 funkcjonalno\u015bci, kt\u00f3ra b\u0119dzie usuni\u0119ta w przysz\u0142o\u015bci - otw\u00f3rz widok logu debugowania wtyczki po wi\u0119cej informacji.
TableColumn.header.Thumbnail=Ikona
TableColumn.header.Thumbnail.info=Obrazek dla zawarto\u015bci Vuze; dla innych system operacyjny wprowadzi te ikony.
-TableColumn.header.Rating_global=Wska\u017anik
-TableColumn.header.Rating_global.info=Ca\u0142kowity wska\u017anik dla tej zawarto\u015bci
v3.MainWindow.menu.getting_started=&Rozpocznij
MainWindow.menu.community=&Spo\u0142eczno\u015b\u0107
MainWindow.menu.help.faq=FAQ
MainWindow.menu.community.wiki=Spo\u0142eczno\u015b\u0107 &Wiki
MainWindow.menu.community.forums=Fo&rum spo\u0142eczno\u015bciowe
-MainWindow.menu.community.add_friends=&Dodaj znajomych
MainWindow.menu.help.support=&Pomoc i wsparcie
externalLogin.title=Wymagany login
externalLogin.explanation=Szablon "%1" wymaga zalogowania. Gdy si\u0119 zalogujesz, to okno automatycznie si\u0119 zamknie. Je\u015bli nie to zamknij je klikaj\u0105c w "wykonano".
externalLogin.explanation.capture=Musisz si\u0119 zalogowa\u0107, \u017ceby utworzy\u0107 ten szablon. Je\u015bli ju\u017c b\u0119dziesz, kliknij w "Wykonano".
Button.done=Wykonano
GeneralView.torrent_created_on_and_by=%1 przez %2
-v3.Share.wizard.title=Udost\u0119pnij -- Kreator
-v3.AddFriends.header.message=Dodaj znajomych, \u017ceby uruchomi\u0107 udost\u0119pnianie swoich ulubionych torrent\u00f3w
-v3.AddFriends.header=Dodaj znajomych
-v3.AddFriends.wizard.title=Dodaj znajomych -- Kreator
Button.continue=Kontynuuj
Button.preview=Podgl\u0105d
Subscription.menu.forcecheck=Uaktualnij teraz
@@ -2556,9 +2481,6 @@ sidebar.LibraryDL=Pobierane
sidebar.LibraryCD=Uko\u0144czono
authenticator.location=Lokalizacja
authenticator.details=Szczeg\u00f3\u0142y
-v3.MainWindow.menu.publish.new=Publikuj now\u0105 zawarto\u015b\u0107
-v3.MainWindow.menu.publish.mine=Twoja opublikowana zawarto\u015b\u0107
-v3.MainWindow.menu.publish.about=O publikowaniu...
v3.MainWindow.menu.showActionBarText=Poka\u017c Tekst
subscript.import.fail.title=Nieudany import
subscript.import.fail.desc=Szczeg\u00f3\u0142y: %1
@@ -2575,13 +2497,11 @@ Subscription.menu.reset=Resetuj do stanu pocz\u0105tkowego
ConfigView.section.Subscriptions=Subskrypcje
subscriptions.config.maxresults=Maksymalna ilo\u015b\u0107 wynik\u00f3w przypisanych do subskrypcji [0: nieograniczona]
v3.activity.button.readall=Zaznacz wszystkie przeczytanie
-ConfigView.interface.start.library=Uruchom z biblioteki
TableColumn.header.activityNew=Nowy
TableColumn.header.activityType=Typ
TableColumn.header.activityText=Wiadomo\u015b\u0107
TableColumn.header.activityDate=Data dodania
TableColumn.header.activityActions=Akcje
-TableColumn.header.activityAvatar=Awatar
Subscription.menu.resetauth=Resetuj szczeg\u00f3\u0142y uwierzytelnienia
Search.menu.engines=Szablony
Wizard.Subscription.title=Subskrybuj
@@ -2607,8 +2527,6 @@ Wizard.Subscription.rss.subtitle3=Po zapisaniu, b\u0119dziesz otrzymywa\u0142 ak
Wizard.Subscription.subscribe.library=Zawarto\u015b\u0107 Twojej biblioteki
Wizard.Subscription.subscribe.subscriptions=Powi\u0105zane subskrypcje
Wizard.Subscription.subscribe.library.empty=Brak dost\u0119pnych subskrypcji?\n \nSp\u00f3jrz na jasno pomara\u0144czony przycisk subskrypcji w Sie\u0107 Vuze HD.\n \n<A HREF="http://faq.vuze.com/?View=entry&EntryID=288">Wi\u0119cej</A>
-TableColumn.header.Info=Informacja
-TableColumn.header.videoLength=D\u0142ugo\u015b\u0107 wideo
message.confirm.delete.title=Potwierd\u017a usuni\u0119cie
message.confirm.delete.text=Czy na pewno chcesz usun\u0105\u0107 '%1'?
Subscription.menu.properties=W\u0142a\u015bciwo\u015bci
@@ -2659,8 +2577,6 @@ TableColumn.header.azsubs.ui.column.subs_link.info=Zwi\u0105zej z subskrybcjami
Button.deleteContent.fromLibrary=Usu\u0144 z biblioteki
Button.deleteContent.fromComputer=Usu\u0144 z komputera
v3.deleteContent.message=\nCzy chcia\u0142by\u015b usun\u0105\u0107 '%1' z komputera czy tylko z biblioteki Vuze?
-v3.library.infobar.text1=Szukasz widoku zaawansowanego?
-v3.library.infobar.text2=U\u017cyj prze\u0142\u0105cznika Widok w pasku narz\u0119dziowym powy\u017cej.
v3.MainWindow.menu.view.toolbartext=Tekst pod paskiem narz\u0119dziowym
v3.MainWindow.menu.view.asSimpleList=Prosta lista
v3.MainWindow.menu.view.asAdvancedList=Zaawansowana lista
@@ -2683,15 +2599,6 @@ azbuddy.ui.menu.cat=Kategorie
azbuddy.ui.menu.cat.share=W\u0142\u0105cz subskrypcje ze znajomym(i)
azbuddy.ui.menu.cat.set_msg=Lista kategorii oddzielona przecinkami lub 'Wszyscy'
azbuddy.ui.menu.cat_subs=Subskrybuj
-v3.buddy.prop.dn=Nazwa wy\u015bwietlana
-v3.buddy.prop.un=Nazwa u\u017cytkownika
-v3.buddy.prop.lupd=Ostanio zaktualizowane
-v3.buddy.prop.pks=Liczba publicznego klucza
-v3.buddy.prop.pc=Oczekuj\u0105ce wiadomo\u015bci z czata
-v3.buddy.prop.catout=Twoje kategorie, kt\u00f3re znajomy mo\u017ce subskrybowa\u0107
-v3.buddy.prop.catin=Kategorie znajomego zosta\u0142y Tobie przedstawione
-v3.buddy.set.catout=Pozw\u00f3l znajomemu na subskcrypcj\u0119 kategorii
-v3.buddy.set.catin=Subskrybuj kategori\u0119 znajomego
subs.prop.update_period=Cykl aktualizacji
azbuddy.enable_cat_pub=Publiczne kategorie, kt\u00f3re WSZYSCY Twoi znajomi mog\u0105 subskrybowa\u0107 (',' separated)
v3.dialog.cnclose.title=%1 zamkni\u0119tych
@@ -2706,12 +2613,9 @@ TableColumn.header.category.info=Nazwa kategorii, do kt\u00f3rej nale\u017cy tor
TableColumn.header.DateCompleted.info=Data, kiedy pobranie torrenta zosta\u0142a uko\u0144czona
TableColumn.header.AzProduct.info=Zawarto\u015b\u0107 sieci, z kt\u00f3rej torrent zosta\u0142 zapocz\u0105tkowany
TableColumn.header.health.info=Kondycja Twojego po\u0142\u0105czenia swarm torrent\u00f3w jest
-TableColumn.header.Info.info=Przycisk, kt\u00f3ry uruchamia szczeg\u00f3\u0142y strony zawarto\u015bci Vuze
TableColumn.header.maxuploads.info=Maksimum # peer\u00f3w jednocze\u015bnie wysy\u0142aj\u0105cych do
TableColumn.header.name.info=Nazwa torrentu
TableColumn.header.unopened.info=Flaga dotycz\u0105ca, kiedy torrent by\u0142 odtwarzany (otworzony)
-TableColumn.header.Quality.info=Jako\u015b\u0107 zawarto\u015bci vuze, takie jak HD, SD
-TableColumn.header.RateIt.info=Zdolno\u015b\u0107 do oceny zawarto\u015bci vuze
TableColumn.header.savepath.info=Folder docelowy lub plik dla danych torrentowych
TableColumn.header.SeedingRank.info=Warto\u015b\u0107 rankingu, w kt\u00f3rym wida\u0107 jak bardzo torrent potrzebuje seedowania. Wy\u017csza warto\u015b\u0107 oznacza wy\u017csz\u0105 potrzeb\u0119.
TableColumn.header.shareRatio.info=Jak du\u017co wysy\u0142a\u0142e\u015b (udost\u0119pnia\u0142es) w por\u00f3wnaniu do pobierania.
@@ -2721,7 +2625,6 @@ TableColumn.header.upspeed.info=Obecna pr\u0119dko\u015b\u0107 wysy\u0142ania
TableColumn.header.downspeed.info=Obecna pr\u0119dko\u015b\u0107 pobierania
TableColumn.header.up.info=Obecna ilo\u015b\u0107 danych wys\u0142anych do innych u\u017cytkownik\u00f3w
TableColumn.header.down.info=Obecna ilo\u015b\u0107 danych otrzymanych od innych u\u017cytkownik\u00f3w
-TableColumn.header.videoLength.info=Odtw\u00f3rz czas zawarto\u015bci vuze wideo
TableColumn.header.ProgressETA.info=Powi\u0105zany Status, uko\u0144czonych, szacunkowy czas i kolumny pr\u0119dko\u015bci pobierania w jednej kolumnie.
TableColumn.header.eta.info=Szacowany czas w kt\u00f3rym torrent b\u0119dzie pobrany
Pieces.column.#.info=Numer cz\u0119\u015bci
diff --git a/org/gudy/azureus2/internat/MessagesBundle_pt_BR.properties b/org/gudy/azureus2/internat/MessagesBundle_pt_BR.properties
index 9e51006..60c59a8 100644
--- a/org/gudy/azureus2/internat/MessagesBundle_pt_BR.properties
+++ b/org/gudy/azureus2/internat/MessagesBundle_pt_BR.properties
@@ -326,7 +326,6 @@ ConfigView.section.downloadManagement=Gerenciamento de Download
ConfigView.label.startRatioPeers=Come\u00e7ar a ficar de seed quando houver menos de 1 seed para
ConfigView.text.neverStop=Nunca Parar
ConfigView.text.neverStart=Nunca Iniciar
-ConfigView.text.peers=Peers
ConfigView.label.checkOncompletion=Verificar novamente os peda\u00e7os quando o download for conclu\u00eddo
wizard.title=Criar um torrent
wizard.previous=< Voltar
@@ -377,7 +376,6 @@ seedmore.shareratio=Sua propor\u00e7\u00e3o de compartilhamento neste torrent \u
seedmore.uploadmore=Ter uma propor\u00e7\u00e3o de compartilhamento inferior a 100% n\u00e3o \u00e9 uma boa coisa para a rede BitTorrent.\nVoc\u00ea deveria deixar este torrente ficar de seed um pouco mais.\nVoc\u00ea tem certeza que voc\u00ea quer prosseguir?
ConfigView.label.showpopuponclose=Mostrar janela de confirma\u00e7\u00e3o quando parar de ficar de seed com uma propor\u00e7\u00e3o de compartilhamento menor que 1
ConfigView.label.startNumSeeds=\nCome\u00e7ar a ficar de seed se houver menos de\n - N\u00e3o leva em conta todas as outras regras
-ConfigView.label.seeds=seeds
ConfigView.section.seeding=Ficar de seed
MyTorrentsView.menu.removeand=Remo&ver e
MyTorrentsView.menu.removeand.deletetorrent=Apagar &Arquivo Torrent
@@ -719,7 +717,6 @@ ConfigView.section.style.alwaysRefreshMyTorrents.tooltip=Esta op\u00e7\u00e3o at
#
#2.0.7.0
#
-ConfigView.section.style.verticaloffset=Deslocamento Gr\u00e1fico Vertical (reparar GTK)
security.certtruster.title=Alerta do Certificado de Seguran\u00e7a
security.certtruster.intro=O certificado de seguran\u00e7a foi emitido por uma empresa na qual voc\u00ea n\u00e3o confia
security.certtruster.resource=Recurso:
@@ -850,7 +847,6 @@ ConfigView.section.queue.seeding.ignore=Ignorar Regras
ConfigView.section.queue.seeding.firstPriority=Primeira Prioridade
ConfigView.section.queue.main=Principal
ConfigView.section.queue=Filas
-ConfigView.section.torrents=Torrents
ConfigView.text.all=todos
ConfigView.text.hours=horas
ConfigView.text.ignoreRule=Ignorar Regra
@@ -975,7 +971,6 @@ GenericText.column=coluna
MyTorrentsView.menu.thisColumn.remove=Remover Coluna
MyTorrentsView.menu.thisColumn.toClipboard=Copiar o Texto para a \u00c1rea de Transfer\u00eancia
MyTorrentsView.menu.thisColumn.autoTooltip=Sempre exibir dicas
-ConfigView.upload.abbreviated=U:
TableColumn.header.secondsseeding=Fazendo Seed Por
TableColumn.header.secondsseeding.info=Quantia total de tempo que voc\u00ea esteve fazendo see.
TableColumn.header.secondsdownloading=Baixando Para
@@ -1031,7 +1026,6 @@ plugins.basicview.log=Registro:
ConfigView.label.maxdownloadspeed=Velocidade m\u00e1xima global de download em KB/s [0: ilimitada]
splash.loadingTorrent=Carregando Torrent
splash.of=de
-ConfigView.section.plugins.irc=IRC
UpdateWindow.title=Atualizador do Vuze
UpdateWindow.header=Os seguintes componentes precisam de uma atualiza\u00e7\u00e3o :
UpdateWindow.columns.install=Instalar
@@ -1108,7 +1102,6 @@ Security.keystore.corrupt=Keystore '%1' falhou ao carregar, por favor apague-a e
Security.keystore.empty=O keystore est\u00e1 vazio. Por favor, crie um certificado auto-assinado (veja Ferramentas->Op\u00e7\u00f5es->Seguran\u00e7a) ou importe um certificado existente para '%1'
webui.restart.info=Altera\u00e7\u00f5es nos par\u00e2metros marcados com um (*) requerem reiniciar para terem efeito
GeneralView.label.maxdownloadspeed.tooltip=Velocidade M\u00e1xima de Download [0: ilimitada]
-ConfigView.section.UPnP=UPnP
upnp.enable=Ativar UPnP
upnp.info=Universal Plug and Play (UPnP) permite o mapeamento autom\u00e1tico de portas nos roteadores com UPnP ativado.
upnp.mapping.dataport=Porta de Entrada dos Dados do Peer
@@ -1473,7 +1466,6 @@ DHTView.operations.findNode=Achar Node
DHTView.operations.findValue=Achar Valor
DHTView.operations.store=Armazenar
DHTView.activity.title=Atividade
-DHTView.activity.status=Status
DHTView.activity.status.true=Requisitado
DHTView.activity.status.false=Rodando
DHTView.activity.type=Tipo
@@ -1488,7 +1480,6 @@ DHTView.db.keys=Teclas
DHTView.db.values=Valores
DHTView.db.direct=Direto
DHTView.db.indirect=Indireto
-DHTView.db.divfreq=Freq. Div.
DHTView.db.divsize=Tamanho Div
MainWindow.dht.status.tooltip=Quando a Base de Dados Distribu\u00edda est\u00e1 rodando isto mostra o n\u00ba estimado de usu\u00e1rios atualmente online
MainWindow.dht.status.disabled=DHT Desativado
@@ -1692,7 +1683,6 @@ Plugin.localtracker.name=Descobridor de Peers em LAN
Plugin.localtracker.info=O descobridor de peers na LAN permite m\u00faltiplas c\u00f3pias do Vuze atr\u00e1s de um firewall e em uma rede comum para baixar com efici\u00eancia torrents ativando a conex\u00e3o direta entre eles
Plugin.localtracker.enable=Ativar o descobridor de peers na LAN
azinstancehandler.alert.portclash=Conflito de portas detectado na LAN: %1 j\u00e1 em uso por outro usu\u00e1rio do Vuze, selecione nova(s) porta(s) aleat\u00f3ria(s) para a escuta TCP / UDP de entrada [entre %2 e %3].
-ConfigView.section.transfer.lan=LAN
ConfigView.section.transfer.lan.tooltip=Configura\u00e7\u00f5es espec\u00edficias-pra-LAN
ConfigView.section.transfer.lan.uploadrate=Velocidade m\u00e1xima de upload na LAN em KB/s [0: ilimitada]
ConfigView.section.transfer.lan.uploadrate.tooltip=Conex\u00f5es com os peers dentro da mesma LAN interna tem um limite de taxa de upload separado.
@@ -1842,7 +1832,6 @@ ConfigView.section.proxy.username.info=Se o servidor proxy exige autentica\u00e7
ConfigView.label.maxuploadswhenbusymin=Velocidade m\u00e1xima de upload por torrent quando o timer est\u00e1 ocupado [seg]
MainWindow.menu.help.debug=Gerar Info de Debug (Crash Log)
DownloadManager.error.badsize=Tamanho incorreto
-ConfigView.section.NATPMP=NAT-PMP
natpmp.info=NAT-PMP \u00e9 a alternativa da Apple para o UPnP e \u00e9 suportada por recentes esta\u00e7\u00f5es de aeroportos\n\nNote que o UPnP tem que estar ativado para ativar o NAT-PMP ja que o dispositivo NAT-PMP \u00e9 tratado como um tipo de dispositivo UPnP especial
natpmp.enable=Ativar (note que deve tamb\u00e9m estar ativado na configura\u00e7\u00e3o do aeroporto para funcionar)
ConfigView.section.tracker.host.addurls=Garante que as URLs do tracker est\u00e3o presentes nos torrents hospedados
@@ -1889,13 +1878,8 @@ MainWindow.menu.view.iconbar=Barra de Ferramentas
MyTorrentsView.menu.rename=Renomear
MyTorrentsView.menu.rename.displayed=Renomear o Nome Exibido
MyTorrentsView.menu.rename.save_path=Renomearo Caminho para Salvar
-MyTorrentsView.menu.rename.displayed_and_save_path=Renomear Ambos
MyTorrentsView.menu.rename.displayed.enter.title=Renomear o Nome Exibido
MyTorrentsView.menu.rename.displayed.enter.message=Inserir um novo nome para exibir para este download.\nSe nenhum texto \u00e9 inserido, o nome original ser\u00e1 usado.
-MyTorrentsView.menu.rename.save_path.enter.title=Renomear o Caminho para Salvar
-MyTorrentsView.menu.rename.save_path.enter.message=Inserir um novo nome do caminho para salvar para este download.\nSe nenhum texto \u00e9 inseriod, o nome do download exibido ser\u00e1 usado.
-MyTorrentsView.menu.rename.displayed_and_save_path.enter.title=Renomear Download
-MyTorrentsView.menu.rename.displayed_and_save_path.enter.message=Insira um novo nome para este download.\nSe nenhum texto \u00e9 inserido, os valores originais ser\u00e3o usados.
MyTorrentsView.menu.edit_comment=Editar Coment\u00e1rio
MyTorrentsView.menu.edit_comment.enter.title=Editar Coment\u00e1rio
MyTorrentsView.menu.edit_comment.enter.message=Inserir um coment\u00e1rio para este download.
@@ -1945,7 +1929,6 @@ ConfigView.label.pause.downloads.on.exit=Pausar downloads ao sair
ConfigView.label.resume.downloads.on.start=Resumir downloads pausados ao iniciar ap\u00f3s a inicializa\u00e7\u00e3o completar
UIDebugGenerator.message.cancel.title=Gerar Info de Debug Info Cancelado
UIDebugGenerator.message.cancel.text=Voc\u00ea n\u00e3o inseriu uma descri\u00e7\u00e3o do bug que voc\u00ea est\u00e1 tentando reportar. O seu bug pode ser \u00f3bvio pra voc\u00ea, mas sem uma descri\u00e7\u00e3o, n\u00f3s s\u00f3 estar\u00edamos tentando advinhar o seu problema.\n\nA Gera\u00e7\u00e3o de Informa\u00e7\u00e3o sobre o Debug foi cancelada.
-ConfigView.section.connection.group.http=HTTP
ConfigView.section.connection.group.http.info=Suporte para seeding HTTP.
ConfigView.section.connection.http.enable=Ativar
ConfigView.section.connection.http.port=N\u00famero da porta de entrada
@@ -2084,7 +2067,6 @@ TableColumn.header.ProgressETA=Progresso
#TableColumn.header.name={MyTorrentsView.name}
TableColumn.header.name.ext=Tipo de Arquivo: %1
#TableColumn.header.shareRatio={MyTorrentsView.shareRatio}
-TableColumn.header.DateCompleted={TableColumn.header.date_completed}
v3.MainWindow.tab.browse=No Vuze
v3.MainWindow.tab.library=Biblioteca
v3.MainWindow.tab.publish=Publicar
@@ -2105,7 +2087,6 @@ v3.MainWindow.button.comment=Comentar
v3.MainWindow.button.viewdetails=Ver Detalhes
v3.MainWindow.button.play=Tocar
v3.MainWindow.button.cancel=Cancelar
-v3.MainWindow.button.sendtofriend=Compartilhar
v3.MainWindow.button.preview=Pr\u00e9-visualiza\u00e7\u00e3o
v3.MainWindow.view.wait=Inicializando a visualiza\u00e7\u00e3o, por favor espere.
v3.MainWindow.xofx=%1 de %2
@@ -2388,7 +2369,6 @@ v3.MainWindow.menu.view.footer=Barra dos Amigos
azbuddy.downspeed=M\u00e1x da velocidade de download em KB/s do amigo [0: ilimitada]
security.crypto.badpw=A senha suprima estava incorreta
ConfigView.section.security.backupkeys=Fazer backup das chave em um arquivo
-ConfigView.section.security.backupkeys.button=Backup
ConfigView.section.security.restorekeys=Restaurar as chaves de um arquivo
ConfigView.section.security.restorekeys.button=Restaurar
ConfigView.section.security.op.error.title=A Opera\u00e7\u00e3o Falhou
@@ -2405,76 +2385,26 @@ Button.bar.share=Compartilhar
Button.bar.add=Adicionar Amigos
Button.bar.edit=Editar
Button.bar.edit.cancel=Edi\u00e7\u00e3o Feita
-v3.Share.menu=Compartilhar o conte\u00fado
-v3.Share.header=Compartilhar
-v3.Share.header.message=Compartilhar com os Amigos atuais, ou adicionar novos Amigos.
-v3.Share.add.buddy=Adicionar Amigos
-v3.Share.add.edit.buddy=Adicionar/Editar Amigos
-v3.Share.add.buddy.all=Compartilhar com todos
-v3.Share.add.buddy.existing=Amigos Existentes
-v3.Share.add.buddy.new=Novos Amigos:
-v3.Share.buddies=Amigos
-v3.Share.invitees=Convidados
-v3.Share.invite.buddies.prompt=Convidar mais amigos para compartilhar
-v3.Share.send.now=Enviar
-v3.Share.optional.message=Mensagem opcional entregue via Feed da Atividade (m\u00e1ximo de 140 caracteres):
-v3.Share.disclaimer=Nota: Ambos o conte\u00fado que voc\u00ea compartilha assim como esta mensagem opcional ser\u00e3o encriptados.
-v3.Share.disclaimer.link=Leia mais
-ConfigView.section.security.vuze.login=Voc\u00ea deve estar logado no Vuze para realizar esta opera\u00e7\u00e3o
-v3.buddy.menu.viewprofile=Visualizar o Perfil
-v3.buddy.menu.remove=Remover o Amigo
v3.MainWindow.menu.view.pluginbar=Barra dos Plugins
-v3.MainWindow.menu.view.buddies-viewer=Barra dos Amigos
-v3.activity.buddy-request=Voc\u00ea tem um pedido de um amigo de %1\n\n<A HREF="%2" TARGET="minibrowse">ACEITAR</A>
-v3.activity.buddy-request.accept=Aceitar
-v3.activity.buddy-request.multi=Voc\u00ea tem um pedido de um amigo [#%3] de %1\n\n<A HREF="%2" TARGET="minibrowse">ACEITAR</A>
-v3.activity.buddy-linkup=Voc\u00ea e %1 agora s\u00e3o amigos
-v3.activity.share-content=%1 compartilhou %2 com voc\u00ea\n\nMensagem de %3:\n%4
-v3.activity.share-content.no-msg=%1 compartilhou %2 com voc\u00ea
-v3.buddies.friends=Amigos
-v3.buddies.remove=Remover o amigo
-v3.buddies.add.to.share=Adicionar amigo para Compartilhar
MainWindow.dialog.select.vuze.file=Selecionar o Arquivo do Vuze
MainWindow.menu.file.open.vuze=Arquivo do Vuze...
-azbuddy.ui.dialog.disable.title=Desativar o Plugin dos Amigos
-azbuddy.ui.dialog.disable.text=Desativar o plugin dos Amigos impedir\u00e1 voc\u00ea de compartilhar os torrents via a Barra dos Amigos no fundo do aplicativo, e impede voc\u00ea de modificar a sua lista de amigos\n\nVoc\u00ea tem certeza que voc\u00ea quer desativar os Amigos?
metasearch.addtemplate.title=Instalar o Modelo de Busca?
metasearch.addtemplate.desc=Voc\u00ea tem certeza que voc\u00ea quer instalar um modelo de busca chamdo '%1'?
v3.share.private.title=Compartilhando o Torrent
v3.share.private.text=O torrent selecionado est\u00e1 marcado como Torrent Privado.\n\nVoc\u00ea n\u00e3o pode compartilhar torrents privados.
-v3.buddies.disabled.title=Plugin dos Amigos Desativado
-v3.buddies.disabled.text._windows=Voc\u00ea desativou o plugin dos amigos, o que impedir\u00e1 voc\u00ea de compartilhar ou aceitar torrents ou pedidos de amigos. Voc\u00ea pode mudar suas configura\u00e7\u00f5es na aba das Op\u00e7\u00f5es.
-v3.buddies.disabled.text._mac=Voc\u00ea desativou o plugin dos amigos, o que impedir\u00e1 voc\u00ea de compartilhar ou aceitar torrents ou pedidos de amigos. Voc\u00ea pode mudar suas configura\u00e7\u00f5es na aba das Op\u00e7\u00f5es.
metasearch.addtemplate.dup.title=Modelo Duplicado
metasearch.addtemplate.dup.desc=O modelo de busca %1 j\u00e1 est\u00e1 instalado
metasearch.export.select.template.file=Salvar o Modelo
metasearch.import.select.template.file=Abrir o Modelo
-v3.MainWindow.button.newtag.share=Novo! Compartilhar o Torrent
-v3.buddies.faq=Leia mais
dialog.uiswitch.title=Trocar para a IU do Vuze
dialog.uiswitch.text=Voc\u00ea precisa estar executando a IU do Vuze para usar esta fun\u00e7\u00e3o.\n\nO Vuze precisar\u00e1 reiniciar.
dialog.uiswitch.button=Trocar para a IU do Vuze
azbuddy.tracker.enabled=Ativar a 'Acelera\u00e7\u00e3o do Amigo' para priorizar o download com seus amigos
azbuddy.protocolspeed=Eleva\u00e7\u00e3o m\u00e1xima do protocolo em KB/s do amigo
v3.MainWindow.button.run=Executar o Arquivo Baixado
-v3.activity.header.friend.requests.foryou=Pedidos do Amigo - Para Voc\u00ea
-v3.activity.header.friend.requests.fromyou=Pedidos do Amigo - De Voc\u00ea
-v3.activity.header.friend.requests.accepted=Pedidos do Amigo - Aceito
-v3.activity.header.share.requests=Compartilhar os Pedidos dos Torrents
-v3.activity.header.rating.reminders=Classificando os Lembretes
v3.activity.header.vuze.news=Not\u00edcias do Vuze
-login.optional.message=Voc\u00ea deve estar logado para usar esta fun\u00e7\u00e3o
-message.confirm.share.singular=Excelente! Seu pedido para compartilhar um torrent foi enviado.
-message.confirm.share.plural=Excelente! Seu pedidos para compartilhar um torrent foram enviados.
-message.confirm.share.invite.singular=Excelente! Seu pedido para conectar e compartilhar foi enviado. Sinta-se livre para gentilmente conversar com seu amigo para aceitar.
-message.confirm.share.invite.plural=Excelente! Seu pedidos para conectar e compartilhar foram enviados. Sinta-se livre para gentilmente conversar com seu amigo para aceitar.
-message.confirm.invite.singular=Excelente! Seu pedido para seu amigo foi enviado. Sinta-se livre para gentilmente conversar com seu amigo para aceitar.
-message.confirm.invite.plural=Excelente! Your Friend requests have been sent. Feel free to gently coax your friends to accept.
-message.confirm.invite.error=Doh! Alguns arames se cruzaram neste pedido. Um ou mais dos seus convites tiveram erros.
-message.prompt.add.friends=Clique nos \u00edcones dos amigos no fundo da p\u00e1gina para compartilhar
message.taking.too.long=Aparenta que isto est\u00e1 tomando mais tempo do que o esperado\nPressione 'ESC' se voc\u00ea deseja cancelar esta opera\u00e7\u00e3o
message.status.success=Sucesso
-message.intro.friends=Adicionar Amigos. Compartilhar Torrents. Baixar Mais R\u00e1pido.
azbuddy.tracker.bbb.status.title=Acelera\u00e7\u00e3o do Amigo
azbuddy.tracker.bbb.status.title.tooltip=Clique duplo para detalhes
azbuddy.tracker.bbb.status.idle=Sem acelera\u00e7\u00e3o
@@ -2483,13 +2413,8 @@ azbuddy.tracker.bbb.status.in=Eu Estou Sendo Acelerado
azbuddy.tracker.bbb.status.out=Atualmente Acelerando os Amigos
v3.MainWindow.search.go.tooltip=Executar a Busca
v3.MainWindow.search.last.tooltip=Retornar para os resultados da busca
-v3.activity.buddy-invited=Voc\u00ea enviou um pedido de Amigo para %1.
-v3.activity.buddy-invited.multi=Voc\u00ea enviou um pedido de Amigo para as seguintes pessoas:\n%1
metasearch.addtemplate.done.title=Modelo Adicionado
metasearch.addtemplate.done.desc=Modelo '%1' adicionado com sucesso.\nEle ser\u00e1 usado quando voc\u00ea fizer a pr\u00f3xima busca!
-v3.MainWindow.button.share=Compartilhar o Conte\u00fado
-v3.buddies.remove.buddy.dialog.title=Apagar a Confirma\u00e7\u00e3o do Amigo
-v3.buddies.remove.buddy.dialog.text=Voc\u00ea quer realmente apagar %1 como um Amigo?
ConfigView.section.security.nopw=Nenhuma senha foi fornecida
ConfigView.section.security.nopw_v=Nenhuma senha dispon\u00edvel, por favor logue no Vuze
fileplugininstall.install.title=Instalar o Plugin?
@@ -2501,12 +2426,7 @@ azbuddy.os_away=Distante
azbuddy.os_not_avail=N\u00e3o Dispon\u00edvel
azbuddy.os_busy=Ocupado
azbuddy.ui.menu.disconnect=Desconectar
-v3.chat.offline=%1 est\u00e1 atualmente offline e receber\u00e1 sua mensagem uma vez de volta online.
-v3.chat.wrongversion=%1 est\u00e1 usando uma vers\u00e3o do Vuze a qual n\u00e3o suporta o Chat.
azbuddy.enable_chat_notif=Ativar as notifica\u00e7\u00f5es do chat
-v3.buddies.dnd.info.dialog.title=Queda no Compartilhamento
-v3.buddies.dnd.info.dialog.text=Voc\u00ea iniciou um Drop Share.Seu conte\u00fado est\u00e1 sendo preparado para compartilhar, e a tela do compartilhamento abrir\u00e1 uma vez que seu conte\u00fado est\u00e1 pronto.\n\nVoc\u00ea tem que manter o Vuze rodando para seu Amigo receber o conte\u00fado.\n<A HREF="http://faq.vuze.com/?View=entry&EntryID=267">Click here</A> para obter mais informa\u00e7\u00e3o sobre esta fun\u00e7\u00e3o.
-v3.buddies.dnd.info.dialog.remember=N\u00e3o mostrar esta mensagem de novo
progress.window.msg.progress=Por favor espere enquanto a opera\u00e7\u00e3o completa
ConfigView.section.connection.advanced.read_select=Ler o tempo pra encerrar selecionado (milis, padr\u00e3o %1)
ConfigView.section.connection.advanced.read_select_min=Ler a espera m\u00ednima selecionada (milis, padr\u00e3o %1)
@@ -2562,25 +2482,18 @@ PluginDeprecation.view=Debug do Plugin
PluginDeprecation.alert=Um plugin tentou usar uma funcionalidade a qual ser\u00e1 removida no futuro - por favor abra a visualiza\u00e7\u00e3o do Log do Debug do Plugin para mais informa\u00e7\u00e3o.
TableColumn.header.Thumbnail=\u00cdcone
TableColumn.header.Thumbnail.info=A imagem do thumbnail para o conte\u00fado do Vuze; para todos os outros conte\u00fados o sistema operacional est\u00e1 fornecendo estes \u00edcones.
-TableColumn.header.Rating_global=Classifica\u00e7\u00e3o
-TableColumn.header.Rating_global.info=A classifica\u00e7\u00e3o global para este conte\u00fado
v3.MainWindow.menu.getting_started=&Sendo Iniciado
MainWindow.menu.community=&Comunidade
MainWindow.menu.help.faq=&Perguntas Feitas Frequentemente
MainWindow.menu.community.wiki=Wiki da &Comunidade
MainWindow.menu.community.forums=F\u00f3runs da Co&munidade
MainWindow.menu.community.blog=Blog do &Vuze
-MainWindow.menu.community.add_friends=&Adicionar Amigos
MainWindow.menu.help.support=&Ajuda e Suporte
externalLogin.title=Login Requerido
externalLogin.explanation=O modelo "%1" requer que voc\u00ea logue. Uma vez logado esta janela automaticamente fechar\u00e1. Se ela n\u00e3o fechar por favor clique em "feito".
externalLogin.explanation.capture=Voc\u00ea precisa logar para criar este modelo. Uma vez que voc\u00ea est\u00e1, por favor clique em "Feito".
Button.done=Feito
GeneralView.torrent_created_on_and_by=%1 por %2
-v3.Share.wizard.title=Compartilhar -- Assistente
-v3.AddFriends.header.message=Adicionar amigos pra come\u00e7ar a compartilhar seus torrents favoritos
-v3.AddFriends.header=Adicionar Amigos
-v3.AddFriends.wizard.title=Adicionar Amigos -- Assistente
Button.continue=Continuar
Button.preview=Pr\u00e9-visualizar
Subscription.menu.forcecheck=Atualizar Agora
@@ -2591,9 +2504,6 @@ sidebar.LibraryDL=Baixando
sidebar.LibraryCD=Completados
authenticator.location=Local
authenticator.details=Detalhes
-v3.MainWindow.menu.publish.new=Publicar Novo Conte\u00fado
-v3.MainWindow.menu.publish.mine=Seu Conte\u00fado Publicado
-v3.MainWindow.menu.publish.about=Sobre a Edi\u00e7\u00e3o...
v3.MainWindow.menu.showActionBarText=Mostrar o Texto
subscript.import.fail.title=Falhou em Importar
subscript.import.fail.desc=Detalhes: %1
@@ -2610,7 +2520,6 @@ Subscription.menu.reset=Resetar Ao Estado Inicial
ConfigView.section.Subscriptions=Subscri\u00e7\u00f5es
subscriptions.config.maxresults=N\u00famero m\u00e1ximo de resultados retidos por subscri\u00e7\u00e3o [0: ilimitados]
v3.activity.button.readall=Marcar Todos os Lidos
-ConfigView.interface.start.library=Iniciar na Biblioteca
TableColumn.header.activityNew=Novo
TableColumn.header.activityType=Tipo
TableColumn.header.activityText=Mensagem
@@ -2641,7 +2550,6 @@ Wizard.Subscription.rss.subtitle3=Uma vez salvo, voc\u00ea receber\u00e1 atualiz
Wizard.Subscription.subscribe.library=Conte\u00fado na sua Biblioteca
Wizard.Subscription.subscribe.subscriptions=Subscri\u00e7\u00f5es Relacionadas
Wizard.Subscription.subscribe.library.empty=Sem subscri\u00e7\u00f5es dispon\u00edveis?\n \nProcure pelo bot\u00e3o para subscrever laranja brilhante na Rede HD do Vuze.\n \n<A HREF="http://faq.vuze.com/?View=entry&EntryID=288">Leia mais</A>
-TableColumn.header.videoLength=Tamanho do V\u00eddeo
message.confirm.delete.title=Confirmar a Exclus\u00e3o
message.confirm.delete.text=Voc\u00ea tem certeza que voc\u00ea quer apagar o '%1'?
Subscription.menu.properties=Propriedades
@@ -2693,8 +2601,6 @@ TableColumn.header.azsubs.ui.column.subs_link.info=Associados com as subscri\u00
Button.deleteContent.fromLibrary=Remover da Biblioteca
Button.deleteContent.fromComputer=Apagar do Computador
v3.deleteContent.message=\nVoc\u00ea gostaria de apagar o '%1' do seu computador ou apenas remov\u00ea-lo da sua Biblioteca do Vuze?
-v3.library.infobar.text1=Procurando pela Visualiza\u00e7\u00e3o Avan\u00e7ada?
-v3.library.infobar.text2=Use o trocar Visualiza\u00e7\u00e3o na barra de ferramentas acima.
v3.MainWindow.menu.view.toolbartext=Texto da Barra de Ferramentas
v3.MainWindow.menu.view.asSimpleList=Lista Simples
v3.MainWindow.menu.view.asAdvancedList=Lista Avan\u00e7ada
@@ -2711,7 +2617,6 @@ ConfigView.label.autoopen=Auto-Abrir
ConfigView.label.autoopen.detailstab=Auto-abrir a Aba de Detalhes quando
ConfigView.label.systray=Tray do Sistema
ConfigView.label.systray._mac=\u00cdcone da Barra de Status
-ConfigView.section.interface.legacy=Legacy
v3.MainWindow.menu.contentnetworks.manage=&Gerenciar as Redes HD
azbuddy.ui.table.rem_cat=Gatos dentro
azbuddy.ui.menu.cat=Categorias
@@ -2719,15 +2624,6 @@ azbuddy.ui.menu.cat.share=Ativar as subscri\u00e7\u00f5es com amigo(s)
azbuddy.ui.menu.cat.set=Inserir categorias
azbuddy.ui.menu.cat.set_msg=Lista das categorias separadas por v\u00edrgula, ou 'Todas'
azbuddy.ui.menu.cat_subs=Subscrever
-v3.buddy.prop.dn=Exibir o nome
-v3.buddy.prop.un=Nome de usu\u00e1rio
-v3.buddy.prop.lupd=Atualizado pela \u00faltima vez
-v3.buddy.prop.pks=Contagem das chaves p\u00fablicas
-v3.buddy.prop.pc=Mensagens de chat pendentes
-v3.buddy.prop.catout=Suas categorias as quais um amigo pode subscrever
-v3.buddy.prop.catin=Categorias de amigos oferecidas a voc\u00ea
-v3.buddy.set.catout=Permitir ao amigo subscrever na categoria
-v3.buddy.set.catin=Subscrever na categoria do amigo
subs.prop.update_period=Per\u00eddo de atualiza\u00e7\u00f5es
azbuddy.enable_cat_pub=Categorias p\u00fablicas nas quais todos os seus amigos podem subscrever (separadas por ',' )
v3.dialog.cnclose.title=%1 Fechado
@@ -2743,12 +2639,9 @@ TableColumn.header.category.info=Nome da categoria a qual o torrent pertence
TableColumn.header.DateCompleted.info=Data em que o download do torrent foi completado
TableColumn.header.AzProduct.info=Rede de Conte\u00fado da qual o torrent se originou
TableColumn.header.health.info=Qu\u00e3o saud\u00e1vel sua conex\u00e3o com a multid\u00e3o do torrent \u00e9
-TableColumn.header.Info.info=Bot\u00e3o que executa a p\u00e1gina de detalhes do Conte\u00fado do Vuze
TableColumn.header.maxuploads.info=# m\u00e1ximo de peers aos quais faz upload simult\u00e2neamente
TableColumn.header.name.info=Nome do torrent
TableColumn.header.unopened.info=Bandeira para indicar se o torrent foi reproduzido (aberto)
-TableColumn.header.Quality.info=Qualidade do conte\u00fado vuze, tais como HD, SD
-TableColumn.header.RateIt.info=Habilidade de classificar o conte\u00fado do vuze
TableColumn.header.savepath.info=A pasta ou arquivo destino para os dados do torrent
TableColumn.header.SeedingRank.info=Valor do ranking de qu\u00e3o terrivelmente o torrent precisa de seeding. Valor mais alto quer dizer maior necessidade.
TableColumn.header.shareRatio.info=Quanto voc\u00ea fez de upload (compartilhou) em compara\u00e7\u00e3o a quanto voc\u00ea baixou.
@@ -2758,7 +2651,6 @@ TableColumn.header.upspeed.info=Velocidade de upload atual
TableColumn.header.downspeed.info=Velocidade de download atual
TableColumn.header.up.info=Quantia de dados atuais enviada para outros usu\u00e1rios
TableColumn.header.down.info=Quantia de dados atuais recebida dos outros usu\u00e1rios
-TableColumn.header.videoLength.info=Tempo de reprodu\u00e7\u00e3o do conte\u00fado de v\u00eddeo do vuze
TableColumn.header.ProgressETA.info=Combina as colunas de Status, Completamento, TEC e Velocidade de Download em uma coluna multi-alinhada.
TableColumn.header.eta.info=Tempo estimado antes que seja feito o download do torrent
Pieces.column.#.info=N\u00famero de Peda\u00e7os
diff --git a/org/gudy/azureus2/internat/MessagesBundle_pt_PT.properties b/org/gudy/azureus2/internat/MessagesBundle_pt_PT.properties
index ebde77c..d4e0938 100644
--- a/org/gudy/azureus2/internat/MessagesBundle_pt_PT.properties
+++ b/org/gudy/azureus2/internat/MessagesBundle_pt_PT.properties
@@ -1,3 +1,4 @@
+#There is a plugin to help with internationalizing these bundles at http://azureus.sourceforge.net/plugin_list.php
MainWindow.menu.file.open.torrent=Ficheiro .torrent
Main.parameter.usage=Utiliza\u00e7\u00e3o : java org.gudy.azureus2.cl.Main [par\u00e2metros] "file.torrent" "guardar pasta"
Main.parameter.maxUploads=N\u00famero m\u00e1ximo de envios
@@ -368,7 +369,6 @@ MyTorrentsView.menu.removeand.deletedata=Apaga os &Dados
MyTorrentsView.menu.removeand.deleteboth=Apaga &Ambos
deletedata.title=!!! Aviso !!!
deletedata.message1=Est\u00e1 prestes a apagar os DADOS de :\n
-deletedata.message2=\nTem a certeza que deseja continuar?
MainWindow.menu.file.configure=A&ssistente de Configura\u00e7\u00e3o
configureWizard.title=Assistente de Configura\u00e7\u00e3o
configureWizard.welcome.title=Bem-vindo ao Assistente de Configura\u00e7\u00e3o
@@ -503,7 +503,6 @@ MyTorrentsView.menu.host.error.message=O seguinte erro ocurreu a servir o torren
ConfigView.section.tracker.pollinterval=Intervalo de pedidos (seg), Servidor / Clientes
ConfigView.section.tracker.publishenable=Publicar detalhes do torrent para "<tracker_url>"
ConfigView.section.tracker.ip=Endere\u00e7o IP do Servidor externo
-MainWindow.menu.help.faq=&FAQ
ConfigView.section.style.enableXPStyle=Permitir estilo XP (necess\u00e1rio reiniciar)
ConfigView.section.tracker.checkip=Auto-descobrir o Endere\u00e7o IP externo...
ipCheckerWizard.title=Assistente de Verifica\u00e7\u00e3o de IP
@@ -537,7 +536,6 @@ splash.openViews=A Abrir Vistas
splash.plugin=A Carregar a Extensao :
configureWizard.nat.tooManyPorts=Demasiados portos a testar (9 max)
ConfigView.section.color=Esquema de Cores
-PeerSocket.unknown=Desconhecido
MyTorrentsView.menu.publish=&Publicar...
MyTrackerView.status.published=Publicado
MyTrackerView.completed=Completos
@@ -552,9 +550,15 @@ IPChecker.external.service.no-ip.description=provedor de servi\u00e7os de DNS Es
ConfigView.section.tracker.publicenable=Permitir torrents externos
ConfigView.label.playdownloadspeech=Fala quando a transfer\u00eancia termina.
ConfigView.label.playdownloadspeech.info=Os Servi\u00e7os de Fala actualmente funcionam melhor em Ingl\u00eas
+#
+# Tooltips
+#
GeneralView.label.status.pieces_available.tooltip=Mostra o n\u00famero de c\u00f3pias dispon\u00edveis de cada peda\u00e7o.\nSe o n\u00famero da direita for inferior a 1, voc\u00ea n\u00e3o est\u00e1 a ver uma c\u00f3pia inteira dos ficheiros (e pode ter problemas a completar o download).
GeneralView.label.trackerurl.tooltip=Clique para copiar endere\u00e7o de an\u00fancio para a \u00e1rea de transfer\u00eancia
GeneralView.label.trackerurlopen.tooltip=Clique para abrir a p\u00e1gina principal do tracker
+#
+# 2.0.4.4
+#
ConfigView.section.style.guiUpdate=Actualizar GUI a cada
ConfigView.section.style.graphicsUpdate=Actualizar barras dos Graficos a cada N actualiza\u00e7\u00f5es da GUI
ConfigView.section.style.reOrderDelay=Re-Ordenar tabelas a cada N actualiza\u00e7\u00f5es GUI [0: nunca]
@@ -689,7 +693,9 @@ health.explain.yellow=significa que o tracker est\u00e1 bom, voc\u00ea est\u00e1
health.explain.green=significa que est\u00e1 tudo a decorrer normalmente.
ConfigView.section.style.alwaysRefreshMyTorrents=Actualizar sempre os Meus Torrents
ConfigView.section.style.alwaysRefreshMyTorrents.tooltip=Esta op\u00e7\u00e3o actualizar sempre os Meus Torrents mesmo que n\u00e3o mostrados (\u00fatil para algumas extens\u00f5es do mirc)
-ConfigView.section.style.verticaloffset=Deslocamento Vertical de Gr\u00e1ficos (correc\u00e7\u00e3o do GTK)
+#
+#2.0.7.0
+#
security.certtruster.title=Aviso, Certificado de Seguran\u00e7a
security.certtruster.intro=O certificado de seguran\u00e7a foi emitido por uma companhia em que n\u00e3o confia
security.certtruster.resource=Recurso:
@@ -746,6 +752,9 @@ ConfigView.section.style.dropdiraction=Ac\u00e7\u00f5es de Arrastar/Largar para
ConfigView.section.style.dropdiraction.opentorrents=Abrir Torrents
ConfigView.section.style.dropdiraction.sharefolder=Partilhar Direct\u00f3rio
ConfigView.section.style.dropdiraction.sharefoldercontents=Partilhar Conteudo
+#
+# 2.0.7.x
+#
Categories.all=Todas
Categories.uncategorized=N\u00e3o Categorizado
CategoryAddWindow.message=Indique a nova Categoria
@@ -823,7 +832,6 @@ ConfigView.text.minutes=minutos
ConfigView.text.neverIgnore=Nunca Ignorar
ConfigView.text.any=qualquer
DownloadManager.error.datamissing=Dados em Falta
-iconBar.queue.tooltip=Por Em Fila
MainWindow.menu.file.open.torrentforseeding=Ficheiro .torrent (Para Semear)
MainWindow.menu.language.refresh=&Actualizar
ManagerItem.forced=For\u00e7ado
@@ -899,6 +907,9 @@ SpeedView.stats.uptime=Tempo Execu\u00e7\u00e3o (horas)
SpeedView.stats.now=Agora
SpeedView.stats.now.tooltip=Total (Protocolo)
AutoMigration.useralert=Resultado da migra\u00e7\u00e3o autom\u00e1tica dos ficheiros/configura\u00e7\u00f5es/directorios:\n\n%1\n%2QUAISQUER FALHAS DEVEM SER RESOLVIDAS MANUALMENTE.
+#
+# > 2.0.8.0
+#
OpenTorrentWindow.title=Abrir Torrent(s)
OpenTorrentWindow.message=Em teste
OpenTorrentWindow.addFiles=&Adicionar Ficheiros
@@ -997,28 +1008,12 @@ plugins.basicview.log=Registo:
ConfigView.label.maxdownloadspeed=Velocidade m\u00e1xima de transfer\u00eancia - KB/s (Global) [0: ilimitado]
splash.loadingTorrent=Carregando Torrent
splash.of=de
-swt.update.window.title=Assistente de Actualiza\u00e7\u00e3o do Vuze
-swt.update.window.header=Os seguintes componentes necessitam actualiza\u00e7\u00e3o :
-swt.update.window.columns.install=Installar
-swt.update.window.columns.name=Nome
-swt.update.window.columns.version=Vers\u00e3o
-swt.update.window.columns.size=Tamanho
-swt.update.window.cancel=Cancelar
-swt.update.window.quit=Desistir
-swt.update.window.close=Fechar
-swt.update.window.ok=Actualizar
-swt.update.window.restart=Reiniciar
-swt.update.window.status.downloading=Recebendo
-swt.update.window.status.done=Feito
-swt.update.window.status.failed=Falhou
-swt.update.window.status.restartNeeded=Vai ser necess\u00e1rio reiniciar!
ConfigView.pluginlist.broken=Partido
ConfigView.pluginlist.whereToPut=Coloque qualquer extens\u00e3o especifica de utilizador num direct\u00f3rio individual, dentro de:
ConfigView.pluginlist.whereToPutOr=Para extens\u00f5es partilhadas entre utilizadores, use:
MainWindow.statusText.checking=Verificando por Actualiza\u00e7\u00f5es
TableColumn.header.OnlyCDing4.info=Quantidade de tempo que o torrent esteve apenas a semear. Exclui o tempo que o torrent esteve a receber (e a semear)
ConfigView.section.style.alternateTablePainting=Usar m\u00e9todo alternativo para pintar colunas das tabelas com gr\u00e1ficos (pode requerer reinicio)
-swt.update.window.status.restartMaybeNeeded=Pode ser necess\u00e1rio reiniciar
ConfigView.pluginlist.shared=partilhado
PeersView.host=Nome do PC
PeersView.host.info=O nome da m\u00e1quina em que se encontra o par, quando disponivel (pode afectar a performance)
@@ -1132,6 +1127,8 @@ MyTrackerView.badnat.info=Seeds/Pares que falharam uma verifica\u00e7\u00e3o de
ConfigView.section.tracker.natchecktimeout=Verificar quando expira (seg.)
ConfigView.section.file.perf.cache.enable=Ligar cache de disco
ConfigView.section.file.perf.cache.size=Tamanho da cache em %1
+#Removed
+#MyTorrentsView.menu.setSpeed=Set Upload Speed
MainWindow.menu.transfers=T&ransfer\u00eancias
MainWindow.menu.transfers.startalltransfers=Ini&ciar Todos
MainWindow.menu.transfers.stopalltransfers=Pa&rar Todos
@@ -1214,8 +1211,6 @@ FilesView.fullpath=Mostrar Caminho Completo
FilesView.remaining=Peda\u00e7os restantes
TableColumn.header.trackername=Nome do Tracker
TableColumn.header.trackername.info=Nome do tracker baseado no URL de an\u00fancio
-ConfigView.label.announceport=Sobrepor porta de an\u00fancio do tracker
-ConfigView.label.announceport.tooltip=Informa o Tracker que usa uma porta diferente daquele que est\u00e1 \u00e0 escuta. Deixe em branco para n\u00e3o usar.
ConfigView.group.override=Sobrepor Op\u00e7\u00f5es
ConfigView.section.file.perf.cache.notsmallerthan=N\u00e3o fazer cache de ficheiros mais pequenos que isto (em %1)
PeersView.menu.blockupload=Bloquear Upload
@@ -1246,8 +1241,6 @@ ConfigView.section.connection.advanced.SO_RCVBUF=Tamanho do buffer de entrada -
ConfigView.section.connection.advanced.SO_RCVBUF.tooltip=Define o valor (em bytes) do socket SO_RCVBUF, isto \u00e9 o tamanho e escala da janela de recep\u00e7\u00e3o TCP.\nO Vuze n\u00e3o define isto por omiss\u00e3o, isto significa que as defini\u00e7\u00f5es do Sistema Operativo s\u00e3o usadas.\nNOTE: Em Linux os valores dados s\u00e3o duplicados.
ConfigView.section.connection.advanced.SO_SNDBUF=Tamanho do buffer de sa\u00edda - SO_SNDBUF [0: definido pelo SO]
ConfigView.section.connection.advanced.SO_SNDBUF.tooltip=Define o valor (em bytes) do socket SO_SNDBUF, isto \u00e9 o tamanho e escala da janela de envio TCP.\nO Vuze n\u00e3o define isto por omiss\u00e3o, isto significa que as defini\u00e7\u00f5es do Sistema Operativo s\u00e3o usadas.\nNOTE: Em Linux os valores dados s\u00e3o duplicados.\n
-ConfigView.section.connection.advanced.IPTOS=Tipo de Servi\u00e7o dos pacotes enviados (TOS)
-ConfigView.section.connection.advanced.IPTOS.tooltip=Define o campo classe-de-tr\u00e1fego / tipo-de-servi\u00e7o (TOS) no cabe\u00e7alho de IP para os pacotes de sa\u00edda.\nO Vuze n\u00e3o define isto por omiss\u00e3o, isto significa que as defini\u00e7\u00f5es do Sistema Operativo s\u00e3o usadas.\nValores de exemplo s\u00e3o:\n0x02 para IPTOS_LOWCOST\n0x04 para IPTOS_RELIABILITY\n0x08 para IPTOS_THROUGHPUT\n0x10 para IPTOS_LOWDELAY\nNOTA: As implementa\u00e7\u00f5es de rede subjacentes podem ignorar este valor, por isso esta op\u00e7\u00e3o est\u00e1 altamente dependente do SO e da vers\u00e3o do JRE.
ConfigView.section.interface.confirm_torrent_removal=Mostrar di\u00e1logo de confirma\u00e7\u00e3o ao remover torrents
ConfigView.section.interface.confirm_torrent_removal.tooltip=Confirmar quando Remover um Torrent da vista \u201cMeus Torrents\u201d
MyTorrentsView.confirm_torrent_removal=Tem a certeza que deseja remover?\n
@@ -1310,7 +1303,6 @@ Button.abort=Abortar
ConfigView.section.ipfilter.enablebanning=Bloquear pares que consistentemente enviam dados errados
Network.alert.acceptfail=Ocorreram demasiadas falhas sucessivas na porta %1, %2 -o processamento foi abandonado. Por favor verifique as configura\u00e7\u00f5es da firewall para esta porta assegurando que esta activada para receber liga\u00e7\u00f5es.
MyShares.column.category=Categoria
-swt.update.window.restartLater=Re-iniciar mais tarde
MainWindow.menu.file.restart=Reiniciar Vuze
MainWindow.dialog.restartconfirmation.title=Reiniciar Vuze
MainWindow.dialog.restartconfirmation.text=Deseja mesmo reiniciar o Vuze
@@ -1392,6 +1384,7 @@ MainWindow.menu.tools.nattest=&NAT / Teste de Firewall
Button.apply=Aplicar
Button.close=Fechar
window.welcome.title=Bem-vindo ao Vuze %1
+#file can be a URL or a path in the jar
MainWindow.menu.help.releasenotes=Notas da Vers\u00e3o
dht.reseed.label=Normalmente Reseedar a base de dados Distribu\u00edda n\u00e3o \u00e9 necess\u00e1rio.No entanto, se o n\u00famero de contactos for baixo isto pode ser utilizado para reintegra\u00e7\u00e3o.\nDeixar em branco para o bootstrap de pares ligados ou introduza o IP e a porta para explicitamente fazer bootstrap de um par conhecido.
dht.reseed.group=Reseedar
@@ -1576,6 +1569,7 @@ PeersView.BlockView.AvailCount=Contador de Disponibilidade
MyTorrentsView.dialog.NumberError.title=N\u00famero Inv\u00e1lido ou N\u00e3o reconhecido
MyTorrentsView.dialog.NumberError.text=O n\u00famero que introduziu \u00e9 inv\u00e1lido ou n\u00e3o \u00e9 reconhecido
MyTorrentsView.dialog.setSpeed.title=Configurar %1 velocidade
+# %1 = "in kbps" or ""; %2 = "upload" or "download"
MyTorrentsView.dialog.setNumber.text=introduza um n\u00famero %1 para modificar %2 para:
MyTorrentsView.dialog.setNumber.upload=Enviar
MyTorrentsView.dialog.setNumber.download=transferir
@@ -1697,6 +1691,7 @@ ConfigView.section.file.resume.recheck.all=Num re\u00ednicio ap\u00f3s um crash
ConfigureWizard.language.choose=Escolha um idioma da lista em baixo:
popup.closing.in=A Fechar a janela em %1 segundos
popup.more.waiting=%1 maisnmensagen(s)..
+# > 2402
popup.download.finished="%1"terminou a transfer\u00eancia.
popup.file.finished="%1" terminou a transf\u00earencia.
ConfigView.auto=Autom\u00e1tico
@@ -1832,13 +1827,8 @@ MainWindow.menu.view.iconbar=Barra de Ferramentas
MyTorrentsView.menu.rename=Mudar Nome
MyTorrentsView.menu.rename.displayed=Mudar o Nome a Mostrar
MyTorrentsView.menu.rename.save_path=Mudar o Caminho Guardado
-MyTorrentsView.menu.rename.displayed_and_save_path=Mudar Ambos
MyTorrentsView.menu.rename.displayed.enter.title=Mudar o Nome Mostrado
MyTorrentsView.menu.rename.displayed.enter.message=Introduza um novo nome a mostrar para esta transfer\u00eancia\nSe nenhum texto for introduzido,o nome original ser\u00e1 usado
-MyTorrentsView.menu.rename.save_path.enter.title=Mudar o Caminho Guardado
-MyTorrentsView.menu.rename.save_path.enter.message=Introduza um novo nome do caminho para guardar esta transfer\u00eancia.\nSe nenhum texto for introduzido,o nome da transfer\u00eancia ser\u00e1 usado.
-MyTorrentsView.menu.rename.displayed_and_save_path.enter.title=Renomear Transfer\u00eancia
-MyTorrentsView.menu.rename.displayed_and_save_path.enter.message=Introduza um novo nome para esta transfer\u00eancia.\nSe nenhum texto for introduzido,os valores originais ser\u00e3o usados.
MyTorrentsView.menu.edit_comment=Editar Coment\u00e1rio
MyTorrentsView.menu.edit_comment.enter.title=Editar Coment\u00e1rio
MyTorrentsView.menu.edit_comment.enter.message=Escreva um coment\u00e1rio para esta transfer\u00eancia.
@@ -1888,7 +1878,6 @@ ConfigView.section.connection.http.port=N\u00famero da porta a chegar
ConfigView.section.connection.http.portoverride=Porta do Tracker HTTP [0: nenhum]
window.update.noupdates.title=Verificar resultados da actualiza\u00e7\u00e3o
window.update.noupdates.text=N\u00e3o existem novas actualiza\u00e7\u00f5es dispon\u00edveis para si.\n\nParab\u00e9ns!
-ConfigView.label.bindip.info=Por exampo, '192.168.1.2' or 'eth0' (actual: %1)
ConfigView.label.mindownloads=Min de Transfer\u00eancias simult\u00e2neas
UI.cannot_submit_blank_text=Tem de introduzir um valor
crypto.alert.as.warning=A rede '%1' \u00e9 conhecida por impor traffic shaping para reduzir a performance de transfer\u00eancia. O Transportecifrado foi ligado autom\u00e1ticamente -pode ser desligado/modificado via par\u00e2metros de configura\u00e7\u00e3o.
@@ -1898,7 +1887,6 @@ popup.download.added="%1" foi adicionado \u00e1 sua lista de transfer\u00eancias
MessageBoxWindow.nomoreprompting=N\u00e3o me avisar de novo
TorrentOptionsView.param.max.seeds=N\u00famero de liga\u00e7\u00f5es m\u00e1ximas so seedar [0: limite da liga\u00e7\u00e3o]
TorrentOptionsView.param.alternative.value.enable=Alternar valor quando est\u00e1 a seedar
-ConfigView.section.style.SeparateFilesViewRenameRetarget=Mostrar separadamente as op\u00e7\u00f5es " Mudar Nome" e "Mudar destino"no separador Ficheiro
ConfigView.section.proxy.check.on.start=Verificar o estado do Proxy ao in\u00edcio
TransferStatsView.legend.pingaverage=M\u00e9dia
TransferStatsView.legend.ping1=Destino 1
@@ -1914,4 +1902,9 @@ splash.unloadingTorrent=A descarregar Torrent
ConfigView.section.file.defaultdir.autorename=Mudar o nome ao torrent se os dados do ficheiro parecerem diferentes
ConfigView.section.file.defaultdir.autorename.tooltip=Isto previne que um torrent escreva por cima dos ficheiros de outro torrent quando os nomes dos ficheiros s\u00e3o iguais
alert.raised.at.close=(Mensagem sobre o encerramento anterior do Vuze)
+# Used for peers which we can't determine.
+PeerSocket.unknown=Desconhecido
+ConfigView.label.announceport=Sobrepor porta de an\u00fancio do tracker
+iconBar.queue.tooltip=Por Em Fila
+MainWindow.menu.help.faq=&FAQ
MainWindow.menu.help.donate=Fazer um Donativo (2\u20ac,5\u20ac,...)
diff --git a/org/gudy/azureus2/internat/MessagesBundle_ro_RO.properties b/org/gudy/azureus2/internat/MessagesBundle_ro_RO.properties
index 799e7c5..ca81535 100644
--- a/org/gudy/azureus2/internat/MessagesBundle_ro_RO.properties
+++ b/org/gudy/azureus2/internat/MessagesBundle_ro_RO.properties
@@ -674,11 +674,11 @@ ConfigView.section.ipfilter.list.notinrange=nu era \u00een nici un interval
ConfigView.section.ipfilter.list.title=Adrese IP blocate
ConfigView.label.allowsameip=Permite conexiuni multiple de la aceea\u0219i adres\u0103 IP
ConfigView.label.allowsameip.tooltip=Bifa\u021bi numai dac\u0103 e NEVOIE.\nC\u00eend e dezactivat\u0103 e o protec\u021bie anti-lipitori (utilizatori care nu \u00eencarc\u0103 date).
-ManagerItem.superseeding=Super-Donare
-ConfigView.label.userSuperSeeding=Folose\u0219te Super-Donarea
-PeersView.uniquepiece=Parte (Mod Super-Donare)
+ManagerItem.superseeding=Superdonare
+ConfigView.label.userSuperSeeding=Folose\u0219te Superdonarea
+PeersView.uniquepiece=Parte (Mod de Superdonare)
PeersView.uniquepiece.none=Nimic
-PeersView.timetosend=Timp p\u00een\u0103 la retrimiterea p\u0103r\u021bii (Mod de Super-Donare)
+PeersView.timetosend=Timp p\u00een\u0103 la retrimiterea p\u0103r\u021bii (Mod de Superdonare)
ConfigView.section.style.addurlsilently=Adaug\u0103 adresele (URL) \u00een mod silen\u021bios
ConfigView.section.style.addurlsilently.tooltip=Descarc\u0103 automat (f\u0103r\u0103 a deschide o caset\u0103 de dialog) torentele ale c\u0103ror adrese s\u00eent trase \u0219i depuse \u00een program
ConfigView.section.file.decoder.prompt=Aten\u021bioneaz\u0103 mereu c\u00eend e disponibil\u0103 o alegere pt. codare
@@ -717,7 +717,6 @@ ConfigView.section.style.alwaysRefreshMyTorrents.tooltip=Aceast\u0103 op\u021biu
#
#2.0.7.0
#
-ConfigView.section.style.verticaloffset=Decalarea vertical\u0103 a graficelor (repara\u021bie GTK)
security.certtruster.title=Avertisment privitor la certificat
security.certtruster.intro=Certificatul de securitate a fost eliberat de o companie \u00een care nu ave\u021bi \u00eencredere
security.certtruster.resource=Resurs\u0103:
@@ -932,7 +931,7 @@ SpeedView.stats.ratio=Raport
SpeedView.stats.uptime=Durata \u00cenc\u0103rc\u0103rii
SpeedView.stats.now=Acum
SpeedView.stats.now.tooltip=Total (pe protocol)
-AutoMigration.useralert=Rezultatele auto-migr\u0103rii fi\u0219./dos. de config. ale utilizatorului:\n\n%1\nE\u0219u\u0103rile trebuie migrate manual.\nNU UITA\u021aI S\u0102 ACTUALIZA\u021aI DESTINA\u021aIILE DE SALVARE \u00ceN CONFIGURA\u021aIE DAC\u0102 AU FOST MUTATE!
+AutoMigration.useralert=Rezultatele automigr\u0103rii fi\u0219./dos. de config. ale utilizatorului:\n\n%1\nE\u0219u\u0103rile trebuie migrate manual.\nNU UITA\u021aI S\u0102 ACTUALIZA\u021aI DESTINA\u021aIILE DE SALVARE \u00ceN CONFIGURA\u021aIE DAC\u0102 AU FOST MUTATE!
#
# > 2.0.8.0
#
@@ -977,6 +976,7 @@ GenericText.column=Coloan\u0103
MyTorrentsView.menu.thisColumn.remove=\u0218terge Coloana
MyTorrentsView.menu.thisColumn.toClipboard=Copiaz\u0103 Textul \u00een Cliplan\u0219et\u0103
MyTorrentsView.menu.thisColumn.autoTooltip=Arat\u0103 Mereu Ponturile Flotante
+MyTorrentsView.menu.tracker=Tracker/Torent
ConfigView.upload.abbreviated=\u00ce:
TableColumn.header.secondsseeding=Donez de
TableColumn.header.secondsseeding.info=Timpul total al don\u0103rii pe care a\u021bi f\u0103cut-o.
@@ -1075,10 +1075,10 @@ MainWindow.menu.help.plugins=Pagina cu Extensii
ConfigView.section.plugins.TrackerWeb=Adresa Trackerului
ConfigView.section.tracker.enablecategories=Separ\u0103 torentele dup\u0103 categorii
health.explain.share=\u00eenseamn\u0103 c\u0103 torentul e g\u0103zduit sau publicat
-ConfigView.section.tracker.createcert=Creeaz\u0103 Certificat Auto-Semnat
+ConfigView.section.tracker.createcert=Creeaz\u0103 Certificat Autosemnat
ConfigView.section.tracker.createbutton=Creeaz\u0103
-security.certcreate.title=Creeaz\u0103 Certificat Auto-Semnat
-security.certcreate.intro=Acest dialog v\u0103 permite s\u0103 crea\u021bi un certificat auto-semnat
+security.certcreate.title=Creeaz\u0103 Certificat Autosemnat
+security.certcreate.intro=Acest dialog v\u0103 permite s\u0103 crea\u021bi un certificat autosemnat
security.certcreate.strength=Putere
security.certcreate.firstlastname=Prenume \u0219i Nume
security.certcreate.orgunit=Unitate de Organizare
@@ -1106,7 +1106,7 @@ webui.access=Acces (*)
webui.access.info=Accesul poate fi \n\t"local"\t= doar calculatorul local se poate conecta \n\t"all"\t= acces nerestric\u021bionat (predefinit)\n\tIP\t= ex. 192.168.0.2\t\t\tun singur IP\n\tIP1-IP2\t= ex. 192.168.0.1-192.168.0.255\t interval de IP-uri
GeneralView.label.maxdownloadspeed=Viteza Maxim\u0103 de Desc\u0103rcare
Security.keystore.corrupt=E\u0219ec la \u00eenc\u0103rcarea stocului de parole '%1' , \u0219tergeti-l \u0219i recrea\u021bi sau reimporta\u021bi certificatele
-Security.keystore.empty=Stocul de parole e gol. Crea\u021bi un certificat auto-semnat (vezi Unelte>Op\u021biuni>Securitate) sau importa\u021bi unul existent in %1'
+Security.keystore.empty=Stocul de parole e gol. Crea\u021bi un certificat autosemnat (vezi Unelte>Op\u021biuni>Securitate) sau importa\u021bi unul existent in %1'
webui.restart.info=Modific\u0103rile parametrilor marca\u021bi cu (*) au nevoie de repornirea softului pentru a fi activate
GeneralView.label.maxdownloadspeed.tooltip=viteza max desc\u0103rcare [0: nelimitat\u0103]
upnp.enable=Activeaz\u0103 UPnP
@@ -1572,6 +1572,7 @@ ConfigView.section.mode.advanced.text=Set\u0103rile Re\u021belei.\nFolosi\u021bi
Files.column.storagetype=Tip de Stocare
Files.column.fileext=Tip
FileItem.storage.linear=Liniar
+FileItem.storage.compact=Compacteaz\u0103
MessageBoxWindow.rememberdecision=Memoreaz\u0103 decizia mea
ConfigView.section.interface.cleardecisions=Cur\u0103\u021b\u0103 deciziile memorate din dialoguri
ConfigView.section.interface.cleardecisionsbutton=Cur\u0103\u021b\u0103
@@ -1735,7 +1736,7 @@ ConfigView.section.style.defaultSortOrder=Ordinea de Sortare Implicit\u0103
ConfigView.section.style.defaultSortOrder.desc=Descresc\u0103tor
ConfigView.section.style.defaultSortOrder.asc=Cresc\u0103tor
ConfigView.section.style.defaultSortOrder.flip=Inversul ordon\u0103rii precedente
-LoggerView.autoscroll=Auto-derulare
+LoggerView.autoscroll=Autoderulare
Button.selectAll=Selecteaz\u0103 Tot
Button.markSelected=Marcheaz\u0103 Selec\u021bia
Button.unmarkSelected=Deselecteaz\u0103 Itemurile
@@ -1783,8 +1784,8 @@ SpeedView.stats.maxUp=Viteza Max \u00cenc:
ConfigView.pluginlist.unloadSelected=Opre\u0219te Selectatele
ConfigView.pluginlist.scan=Scaneaz\u0103 dup\u0103 Extensii noi
ConfigView.section.transfer.autospeed=Vitez\u0103 Automat\u0103 (clasic)
-ConfigView.section.transfer.autospeed.tooltip=Set\u0103ri specifice pt. Auto-Vitez\u0103
-ConfigView.section.transfer.autospeed.info=Auto-viteza ajusteaz\u0103 automat limita superioar\u0103 a vitezei de \u00eenc\u0103rcare pentru a evita saturarea conexiunii la re\u021bea.\n\nAceast\u0103 limitare va fi aplicat\u0103 doar dac\u0103 este activat\u0103 op\u021biunea "vitez\u0103 de \u00eenc\u0103rcare automat\u0103" \u0219i de asemenea necesit\u0103 activarea bazei de date distribuit\u0103 [DHT].\n
+ConfigView.section.transfer.autospeed.tooltip=Set\u0103ri specifice pt. Autovitez\u0103
+ConfigView.section.transfer.autospeed.info=Autoviteza ajusteaz\u0103 automat limita superioar\u0103 a vitezei de \u00eenc\u0103rcare pentru a evita saturarea conexiunii la re\u021bea.\n\nAceast\u0103 limitare va fi aplicat\u0103 doar dac\u0103 este activat\u0103 op\u021biunea "vitez\u0103 de \u00eenc\u0103rcare automat\u0103" \u0219i de asemenea necesit\u0103 activarea bazei de date distribuit\u0103 [DHT].\n
ConfigView.section.transfer.autospeed.minupload=%1 vitez\u0103 minim\u0103 de \u00eenc\u0103rcare
ConfigView.section.transfer.autospeed.minupload.tooltip=Viteza de \u00eenc\u0103rcare nu va fi sc\u0103zut\u0103 automat sub aceast\u0103 limit\u0103
ConfigView.section.transfer.autospeed.maxupload=%1 vitez\u0103 maxim\u0103 de \u00eenc\u0103rcare [0: nelimitat\u0103]
@@ -1824,7 +1825,7 @@ DHTTransport.report.sending=trimit datele
DHTTransport.report.resending=retrimit datele
DHTTransport.report.send_complete=trimitere complet\u0103
DHTTransport.report.send_timeout=expirarea trimiterii
-ConfigView.section.transfer.autospeed.enabledebug=F\u0103 un log cu informa\u021biile de debugare
+ConfigView.section.transfer.autospeed.enabledebug=F\u0103 un jurnal cu informa\u021biile de debugare
TableColumn.header.date_added=Data Ad\u0103ug\u0103rii
TableColumn.header.date_added.info=Data la care a fost ad\u0103ugat torentul
ConfigView.section.file.hashchecking.smallestfirst=Reverific\u0103 mai \u00eent\u00eei desc\u0103rc\u0103rile mici
@@ -1899,13 +1900,11 @@ MainWindow.menu.view.iconbar=Bara de Unelte
MyTorrentsView.menu.rename=Redenume\u0219te
MyTorrentsView.menu.rename.displayed=Modific\u0103 Numele Afi\u0219at
MyTorrentsView.menu.rename.save_path=Redenume\u0219te Calea de Salvare
-MyTorrentsView.menu.rename.displayed_and_save_path=Redenume\u0219te Ambele
+AdvRenameWindow.title=Redenume\u0219te Desc\u0103rcarea
+AdvRenameWindow.message=Introduce\u021bi un nume nou pentru aceast\u0103 desc\u0103rcare.
+AdvRenameWindow.rename.torrent=Redenume\u0219te Torentul
MyTorrentsView.menu.rename.displayed.enter.title=Modific\u0103 Numele Afi\u0219at
MyTorrentsView.menu.rename.displayed.enter.message=Introduce\u021bi un nume nou ce va fi afi\u0219at pentru aceast\u0103 desc\u0103rcare.
-MyTorrentsView.menu.rename.save_path.enter.title=Redenume\u0219te Calea de Salvare
-MyTorrentsView.menu.rename.save_path.enter.message=Introduce\u021bi o cale nou\u0103 de salvare pentru aceast\u0103 desc\u0103rcare.
-MyTorrentsView.menu.rename.displayed_and_save_path.enter.title=Redenume\u0219te Desc\u0103rcarea
-MyTorrentsView.menu.rename.displayed_and_save_path.enter.message=Introduce\u021bi un nume nou pentru aceast\u0103 desc\u0103rcare.
MyTorrentsView.menu.edit_comment=Editeaz\u0103 Comentariul
MyTorrentsView.menu.edit_comment.enter.title=Editeaz\u0103 Comentariul
MyTorrentsView.menu.edit_comment.enter.message=Ad\u0103uga\u021bi un comentariu pt. aceast\u0103 desc\u0103rcare.
@@ -1929,7 +1928,7 @@ TorrentInfoView.columns=Coloane pentru vederea 'Torentele Mele'
progress.window.title=Opera\u021biune \u00een Desf\u0103\u0219urare
progress.window.msg.filemove=A\u0219tepta\u021bi p\u00een\u0103 se termin\u0103 mutarea/redenumirea fi\u0219ierului
ConfigView.label.popup.timestamp=Adaug\u0103 marcaje de timp la alertele popup
-ConfigView.label.popup.autohide=Ascunde automat alertele popup dup\u0103 x secunde (seteaz\u0103 la 0 pt. a dezactiva auto-ascunderea)
+ConfigView.label.popup.autohide=Ascunde automat alertele popup dup\u0103 x secunde (seteaz\u0103 la 0 pt. a dezactiva autoascunderea)
ConfigView.label.popup.suppress_alerts=Suprim\u0103 alertele
ConfigView.label.popup.use_message_boxes=Folose\u0219te casete cu mesaje popup mai degrab\u0103 dec\u00eet casete de alertare obi\u0219nuite.
ConfigView.label.popup.show=Arat\u0103 toate alertele popup \u00eenregistrate p\u00een\u0103 acum (dac\u0103 exist\u0103)
@@ -2007,8 +2006,8 @@ Peers.column.handshake_reserved.info=Indic\u0103 care bi\u021bi rezerva\u021bi a
Peers.column.client_identification=Identificarea Clientului
Peers.column.client_identification.info=Indic\u0103 numele brute de clien\u021bi primite de Vuze - util pentru debugare
dht.warn.user=Aten\u021bioneaz\u0103 dac\u0103 pot apare probleme cu NAT/maparea porturilor
-ConfigView.label.openbar.incomplete=Barele de Desc\u0103rcare: auto-deschide desc\u0103rc\u0103rile
-ConfigView.label.openbar.complete=auto-deschide donatorii
+ConfigView.label.openbar.incomplete=Barele de Desc\u0103rcare: autodeschide desc\u0103rc\u0103rile
+ConfigView.label.openbar.complete=autodeschide donatorii
ConfigView.label.transferbar.remember_location=Memoreaz\u0103 ultima pozi\u021bie a Barei de Transfer
ConfigView.section.transfer.autospeed.forcemin=%1 vitez\u0103 de \u00eenc\u0103rcare impus\u0103 for\u021bat la evaluarea func\u021bion\u0103rii conexiunii
MainWindow.menu.tools.speedtest=Test de Vitez\u0103...
@@ -2115,7 +2114,6 @@ v3.MainWindow.button.comment=Comenteaz\u0103
v3.MainWindow.button.viewdetails=Vezi Detaliile
v3.MainWindow.button.play=Red\u0103
v3.MainWindow.button.cancel=Anuleaz\u0103
-v3.MainWindow.button.sendtofriend=Partajeaz\u0103
v3.MainWindow.button.preview=Previzioneaz\u0103
v3.MainWindow.view.wait=Ini\u021bializez vederea, a\u0219tepta\u021bi.
v3.MainWindow.xofx=%1 din %2
@@ -2147,11 +2145,11 @@ v3.topbar.menu.show.search=Caut\u0103
v3.topbar.menu.show.frog=Brotacul Albastru
splash.initializeCore=Ini\u021bializez Nucleul
splash.initializeUIElements=Ini\u021bializez Elementele Interfe\u021bei
-ConfigView.section.transfer.autospeedbeta=Auto-Vitez\u0103-Beta
+ConfigView.section.transfer.autospeedbeta=Autovitez\u0103-Beta
#
ConfigView.section.ipfilter.peerblocking.group=Blocarea Partenerilor
-ConfigView.section.ipfilter.autoload.group=Auto-\u00cenc\u0103rcare
-ConfigView.section.ipfilter.autoload.file=Fi\u0219ierul cu filtre IP de auto-\u00eenc\u0103rcat
+ConfigView.section.ipfilter.autoload.group=Auto\u00eenc\u0103rcare
+ConfigView.section.ipfilter.autoload.file=Fi\u0219ierul cu filtre IP de auto\u00eenc\u0103rcat
ConfigView.section.ipfilter.autoload.info=Suport\u0103 formatele DAT (eMule), P2P (PeerGuardian, splist) \u0219i P2B v1,2,3 (PeerGuardian 2). Fi\u0219ierul poate fi stocat local sau pe internet (URL), \u00een format arhivat (zip, gzip) sau \u00een format text simplu. Adresele (URL-urile) vor fi redesc\u0103rcate automat dup\u0103 7 zile, \u00een timp ce fi\u0219ierele locale vor fi re\u00eenc\u0103rcate la trecerea a un minut de c\u00eend au fost \u00eenlocuite/modificate.
ConfigView.section.ipfilter.autoload.loadnow=\u00cencarc\u0103 Acum
splash.loadIpFilters=\u00cencarc Filtrele IP..
@@ -2163,8 +2161,8 @@ SpeedTestWizard.name.conf.level.high=Ridicat
SpeedTestWizard.name.conf.level.med=Mediu
SpeedTestWizard.name.conf.level.low=Sc\u0103zut
SpeedTestWizard.name.conf.level.none=Nimic
-ConfigView.section.transfer.select=Auto-Vitez\u0103
-ConfigView.section.transfer.select.v2=Auto-Vitez\u0103 (beta)
+ConfigView.section.transfer.select=Autovitez\u0103
+ConfigView.section.transfer.select.v2=Autovitez\u0103 (beta)
mb.azmustclose.title=Eroare de Pornire
mb.azmustclose.text=Azureus trebuie s\u0103 se \u00eenchid\u0103 din cauza unei probleme de (re)pornire care a f\u0103cut ca programul s\u0103 fie rulat \u00een mod Adminstrator.\n\nDup\u0103 \u00eenchiderea programului Azureus, redeschide\u021bi-l manual.
network.ipv6.prefer.addresses=Prefer\u0103 adresele IPv6 c\u00eend s\u00eent disponibile at\u00eet IPv6 c\u00eet \u0219i IPv4
@@ -2232,18 +2230,18 @@ ConfigView.label.checkOnSeeding=Efectueaz\u0103 \u00een fundal reverificarea p\u
ConfigView.label.ui_switcher=Arat\u0103 Selectorul de Interfe\u021be Vuze
ConfigView.label.ui_switcher_button=Arat\u0103
SpeedTestWizard.test.panel.explain=M\u0103sura\u021bi viteza protocolului Vuze. Selecta\u021bi tipul testului de vitez\u0103 \u0219i modul de criptare. Vizita\u021bi pagina wiki Vuze pentru a afla detalii despre test. Testul se va opri automat dac\u0103 dureaz\u0103 mai mult de minute. De obicei durata unui test nu dep\u0103\u0219e\u0219te un minut.
-SpeedTestWizard.set.upload.hint=Seteaz\u0103 valorile limit\u0103 pentru desc\u0103rcare \u0219i \u00eenc\u0103rcare folosite la algoritmul de Auto-Vitez\u0103.
-SpeedTestWizard.set.upload.panel.explain=Limitele setate aici s\u00eent folosite de algoritmul de Auto-Vitez\u0103. Seta\u021bi limitele de transfer \u0219i cele de \u00eencredere.\n\nVitezele conexiunii s\u00eent de multe ori exprimate \u00een "bi\u021bi pe secund\u0103" - totu\u0219i valoarea de mai jos e exprimat\u0103 \u00een "kilobai\u021bi pe secund\u0103".
+SpeedTestWizard.set.upload.hint=Seteaz\u0103 valorile limit\u0103 pentru desc\u0103rcare \u0219i \u00eenc\u0103rcare folosite la algoritmul de Autovitez\u0103.
+SpeedTestWizard.set.upload.panel.explain=Limitele setate aici s\u00eent folosite de algoritmul de Autovitez\u0103. Seta\u021bi limitele de transfer \u0219i cele de \u00eencredere.\n\nVitezele conexiunii s\u00eent de multe ori exprimate \u00een "bi\u021bi pe secund\u0103" - totu\u0219i valoarea de mai jos e exprimat\u0103 \u00een "kilobai\u021bi pe secund\u0103".
SpeedTestWizard.set.limit.conf.level=\u00cencredere
-SpeedTestWizard.finish.panel.auto.speed=AutoViteza e :
-SpeedTestWizard.finish.panel.auto.speed.seeding=AutoViteza \u00een timpul don\u0103rii e :
+SpeedTestWizard.finish.panel.auto.speed=Autoviteza e :
+SpeedTestWizard.finish.panel.auto.speed.seeding=Autoviteza \u00een timpul don\u0103rii e :
ConfigTransferAutoSpeed.add.comment.to.log.group=Adaug\u0103 comentariu la jurnalul de debugare
ConfigTransferAutoSpeed.add.comment.to.log=Adaug\u0103 comentariu:
ConfigTransferAutoSpeed.log.button=Jurnal
-ConfigTransferAutoSpeed.algorithm.selector=Selector al Auto-Vitezei
+ConfigTransferAutoSpeed.algorithm.selector=Selector al Autovitezei
ConfigTransferAutoSpeed.algorithm=Algoritm:
-ConfigTransferAutoSpeed.auto.speed.classic=Auto-Vitez\u0103(clasic)
-ConfigTransferAutoSpeed.auto.speed.beta=Auto-Vitez\u0103(beta)
+ConfigTransferAutoSpeed.auto.speed.classic=Autovitez\u0103(clasic)
+ConfigTransferAutoSpeed.auto.speed.beta=Autovitez\u0103(beta)
ConfigTransferAutoSpeed.data.update.frequency=Frecven\u021ba de Actualizare
Alert.failed.update=Instalarea a cel pu\u021bin o component\u0103 a e\u0219uat. Vezi <A HREF="{Alert.failed.update.url}">AzureusWiki: Failed Update</A>
OpenTorrentWindow.mb.existingFiles.partialList=(List\u0103 par\u021bial\u0103. Mai multe fi\u0219iere exist\u0103 deja)
@@ -2419,53 +2417,17 @@ Button.bar.share=Partajeaz\u0103
Button.bar.add=Adaug\u0103 Prieteni
Button.bar.edit=Editeaz\u0103
Button.bar.edit.cancel=Editare Terminat\u0103
-v3.Share.menu=Partajeaz\u0103 Con\u021binutul
-v3.Share.header=Partajeaz\u0103
-v3.Share.header.message=Partajeaz\u0103 cu prietenii existen\u021bi sau adaug\u0103 prieteni noi
-v3.Share.add.buddy=Adaug\u0103 Prieteni
-v3.Share.add.edit.buddy=Adaug\u0103/Editeaz\u0103 Prieteni
-v3.Share.add.buddy.all=Partajeaz\u0103 cu to\u021bi
-v3.Share.add.buddy.existing=Prieteni Existen\u021bi:
-v3.Share.add.buddy.new=Prieteni Noi:
-v3.Share.buddies=Prieteni
-v3.Share.invitees=Invita\u021bi
-v3.Share.invite.buddies.prompt=Invit\u0103 mai mul\u021bi prieteni pentru partajare
-v3.Share.send.now=Trimite
-v3.Share.optional.message=Mesaj op\u021bional trimis prin Fluxul de Activitate (maximum 140 de caractere):
-v3.Share.disclaimer=Not\u0103: At\u00eet con\u021binutul pe care \u00eel partaja\u021bi, c\u00eet \u0219i acest mesaj op\u021bional vor fi criptate.
-v3.Share.disclaimer.link=Informa\u021bii Suplimentare
-ConfigView.section.security.vuze.login=Trebuie s\u0103 fi\u021bi autentificat la Vuze pentru a realiza aceeast\u0103 opera\u021biune
-v3.buddy.menu.viewprofile=Vezi Profilul
-v3.buddy.menu.remove=\u0218terge Prietenul
v3.MainWindow.menu.view.pluginbar=Bara de Extensii
-v3.MainWindow.menu.view.buddies-viewer=Bara Prietenilor
-v3.activity.buddy-request=Ave\u021bi o cerere de \u00eemprietenire de la %1\n\n<A HREF="%2" TARGET="minibrowse">ACCEPT\u0102</A>
-v3.activity.buddy-request.accept=Accept\u0103
-v3.activity.buddy-request.multi=Ave\u021bi o cerere de \u00eemprietenire [#%3] de la %1\n\n<A HREF="%2" TARGET="minibrowse">ACCEPT\u0102</A>
-v3.activity.buddy-linkup=Dv. \u0219i %1 s\u00eente\u021bi acum prieteni
-v3.activity.share-content=%1 a partajat %2 cu dv.\n\nMesaj de la %3:\n%4
-v3.activity.share-content.no-msg=%1 a partajat %2 cu dv.
-v3.buddies.friends=Prieteni
-v3.buddies.online=Conecta\u021bi (%1)
-v3.buddies.remove=\u0218terge Prietenul
-v3.buddies.add.to.share=Adaug\u0103 prietenul la partaj
MainWindow.dialog.select.vuze.file=Selecteaz\u0103 Fi\u0219ierul Vuze
MainWindow.menu.file.open.vuze=Fi\u0219ier Vuze...
-azbuddy.ui.dialog.disable.title=Dezactiveaz\u0103 Extensia Prieteni
-azbuddy.ui.dialog.disable.text=Dezactivarea extensiei Prieteni v\u0103 va \u00eempiedica s\u0103 partaja\u021bi torente cu ajutorul Barei de Prieteni de la partea de jos a aplica\u021biei \u0219i v\u0103 va \u00eempiedica s\u0103 modifica\u021bi lista de prieteni.\n\nSigur dori\u021bi s\u0103 dezactiva\u021bi extensia Prieteni?
metasearch.addtemplate.title=Instalez \u0218ablonul de C\u0103utare?
metasearch.addtemplate.desc=S\u00eente\u021bi sigur c\u0103 dori\u021bi s\u0103 instala\u021bi \u0219ablonul de c\u0103utare numit '%1'?
v3.share.private.title=Partajeaz\u0103 Torentul
v3.share.private.text=Torentul selectat e marcat ca privat.\n\nNu pute\u021bi partaja torentele private.
-v3.buddies.disabled.title=Extensia pt. Prieteni e Dezactivat\u0103
-v3.buddies.disabled.text._windows=A\u021bi dezactivat extensia pt. prieteni, ceea ce v\u0103 va \u00eempiedica s\u0103 partaja\u021bi sau s\u0103 accepta\u021bi torente ori cereri de a deveni prieten. Pute\u021bi schimba setarea \u00een tabul op\u021biunilor.
-v3.buddies.disabled.text._mac=A\u021bi dezactivat extensia pt. prieteni, ceea ce v\u0103 va \u00eempiedica s\u0103 partaja\u021bi sau s\u0103 accepta\u021bi torente ori cereri de a deveni prieten. Pute\u021bi schimba setarea \u00een tabul op\u021biunilor.
metasearch.addtemplate.dup.title=Duplicheaz\u0103 \u0218ablonul
metasearch.addtemplate.dup.desc=\u0218ablonul de c\u0103utare %1 e deja instalat
metasearch.export.select.template.file=Salveaz\u0103 \u0218ablonul
metasearch.import.select.template.file=Deschide \u0218ablonul
-v3.MainWindow.button.newtag.share=Nou! Partajeaz\u0103 Torentul
-v3.buddies.faq=Informa\u021bii Suplimentare
dialog.uiswitch.title=Comut\u0103 la Interfa\u021ba Vuze
dialog.uiswitch.text=Trebuie s\u0103 rula\u021bi interfa\u021ba Vuze pentru a folosi aceast\u0103 facilitate.\n\nVuze trebuie repornit.
dialog.uiswitch.button=Comut\u0103 la Interfa\u021ba Vuze
@@ -2473,25 +2435,10 @@ azbuddy.tracker.enabled=Activeaz\u0103 'Accelerarea Prietenilor' pentru a priori
azbuddy.protocolspeed=KB/s max dep\u0103\u0219irea protocolului de c\u0103tre prieten
v3.MainWindow.button.download=Descarc\u0103
v3.MainWindow.button.run=Deschide Fi\u0219ierul Desc\u0103rcat
-v3.activity.header.friend.requests.foryou=Cereri de \u00cemprietenire - Pentru Dv.
-v3.activity.header.friend.requests.fromyou=Cereri de \u00cemprietenire - De la Dv.
-v3.activity.header.friend.requests.accepted=Cereri de \u00cemprietenire - Acceptate
-v3.activity.header.share.requests=Partajeaz\u0103 Solicit\u0103rile de Torente
v3.activity.header.downloads=Desc\u0103rc\u0103ri
-v3.activity.header.rating.reminders=Memento al Not\u0103rii
v3.activity.header.vuze.news=\u0218tiri Vuze
-login.optional.message=Trebuie sa fiti autentificat pentru a utiliza aceasta facilitate
-message.confirm.share.singular=Excelent! Cererea dv. de partajare a unui torent a fost trimis\u0103.
-message.confirm.share.plural=Excelent! Solicit\u0103rile dv. de partajare a unui torent au fost trimise.
-message.confirm.share.invite.singular=Excelent! Cererea dv. de conectare \u0219i partajare a fost trimis\u0103. Sim\u021bi\u021bi-v\u0103 liber s\u0103 v\u0103 constr\u00eenge\u021bi delicat prietenul s\u0103 o accepte.
-message.confirm.share.invite.plural=Excelent! Solicit\u0103rile dv. de conectare \u0219i partajare au fost trimise. Sim\u021bi\u021bi-v\u0103 liber s\u0103 v\u0103 constr\u00eenge\u021bi delicat prietenul s\u0103 le accepte.
-message.confirm.invite.singular=Excelent! Cererea de \u00eemprietenire a fost trimis\u0103. Sim\u021bi\u021bi-v\u0103 liber s\u0103 v\u0103 constr\u00eenge\u021bi cu ging\u0103\u0219ie prietenul s\u0103 o accepte.
-message.confirm.invite.plural=Excelent! Solicit\u0103rile de \u00eemprietenire au fost trimise. Sim\u021bi\u021bi-v\u0103 liber s\u0103 v\u0103 constr\u00eenge\u021bi cu ging\u0103\u0219ie prietenii s\u0103 le accepte.
-message.confirm.invite.error=Oof! Ni\u0219te s\u00eerme s-au \u00eencurcat la cererea asta. Una sau mai multe dintre invita\u021bii au erori.
-message.prompt.add.friends=Pentru a partaja clica\u021bi iconi\u021bele prietenilor de la partea de jos a paginii
message.taking.too.long=Se pare c\u0103 opera\u021biunea dureaz\u0103 mai mult dec\u00eet era a\u0219teptat. \nAp\u0103sa\u021bi 'ESC' dac\u0103 dori\u021bi s\u0103 o anula\u021bi.
message.status.success=Succes
-message.intro.friends=Adaug\u0103 Prieteni.\nPartajeaz\u0103 Torente.\nDescarc\u0103 mai Rapid.
azbuddy.tracker.bbb.status.title=Accelereaz\u0103 Prietenii
azbuddy.tracker.bbb.status.title.tooltip=Dublu-clic pentru detalii
azbuddy.tracker.bbb.status.idle=F\u0103r\u0103 Accelerare
@@ -2500,13 +2447,8 @@ azbuddy.tracker.bbb.status.in=S\u00eent Accelerat
azbuddy.tracker.bbb.status.out=Prieteni Accelera\u021bi Acum
v3.MainWindow.search.go.tooltip=Execut\u0103 C\u0103utarea
v3.MainWindow.search.last.tooltip=\u00centoarce-te la Rezultatele C\u0103ut\u0103rii
-v3.activity.buddy-invited=A\u021bi trimis o cerere de \u00eemprietenire c\u0103tre %1.
-v3.activity.buddy-invited.multi=A\u021bi trimis o cerere de \u00eemprietenire urm\u0103toarelor persoane:\n%1
metasearch.addtemplate.done.title=\u0218ablon Ad\u0103ugat
metasearch.addtemplate.done.desc=\u0218ablonul '%1' a fost ad\u0103ugat cu succes.\nVa fi utilizat la urm\u0103toarea c\u0103utare!
-v3.MainWindow.button.share=Partajeaz\u0103 Con\u021binutul
-v3.buddies.remove.buddy.dialog.title=\u0218terge Confirmarea Prietenului
-v3.buddies.remove.buddy.dialog.text=Sigur dori\u021bi s\u0103 \u0219terge\u021bi prietenul %1 ?
ConfigView.section.security.nopw=Nu a fost introdus\u0103 nici o parol\u0103
ConfigView.section.security.nopw_v=Nu este disponibil\u0103 nici o parol\u0103, autentifica\u021bi-v\u0103 la Vuze
fileplugininstall.install.title=Instalez Extensia?
@@ -2520,14 +2462,7 @@ azbuddy.os_not_avail=Indisponibil
azbuddy.os_busy=Ocupat
azbuddy.os_offline=Neconectat
azbuddy.ui.menu.disconnect=Deconecteaz\u0103
-v3.buddy.menu.chat=Discut\u0103
-v3.chat.offline=%1 e momentan neconectat \u0219i va primi mesajul dv. c\u00eend se va reconecta.
-v3.chat.wrongversion=%1 folose\u0219te o versiune de Vuze care nu suport\u0103 Taifasul [Chat].
azbuddy.enable_chat_notif=Activeaz\u0103 notific\u0103rile \u00een taifas [chat]
-v3.buddies.dnd.info.dialog.title=Partajare Direct\u0103
-v3.buddies.dnd.info.dialog.text=A\u021bi ini\u021biat o Partajare Direct\u0103 [Drop Share]. Con\u021binutul este preparat pentru partajare, \u0219i ecranul de partajare va fi afi\u0219at \u00een momentul \u00een care con\u021binutul va fi gata.\n\nTrebuie s\u0103 men\u021bine\u021bi Vuze deschis pentru ca Prietenul s\u0103 primeasc\u0103 con\u021binutul.\n<A HREF="http://faq.vuze.com/?View=entry&EntryID=267">Clica\u021bi aici</A> pentru informa\u021bii suplimentare despre aceast\u0103 facilitate.
-v3.buddies.dnd.info.dialog.ok=OK
-v3.buddies.dnd.info.dialog.remember=Nu ar\u0103ta din nou acest mesaj
progress.window.msg.progress=A\u0219tepta\u021bi ca opera\u021biunea s\u0103 se termine
ConfigView.section.connection.advanced.read_select=Expirarea citirii select\u0103rii (msec, implicit %1)
ConfigView.section.connection.advanced.read_select_min=A\u0219teptarea minim\u0103 a citirii select\u0103rii (msec, implicit %1)
@@ -2583,25 +2518,18 @@ PluginDeprecation.view=Debugheaz\u0103 Extensia
PluginDeprecation.alert=O extensie a \u00eencercat s\u0103 foloseasc\u0103 o facilitate ce va fi \u00eenl\u0103turat\u0103 pe viitor - deschide\u021bi jurnalul de Debugare a Extensiilor pentru mai multe informa\u021bii.
TableColumn.header.Thumbnail=Iconi\u021b\u0103
TableColumn.header.Thumbnail.info=Imagine miniaturizat\u0103 pentru con\u021binut din re\u021beaua Vuze; Pentru con\u021binutul de alt\u0103 provenien\u021b\u0103 s\u00eent folosite iconi\u021bele sistemului de operare.
-TableColumn.header.Rating_global=Apreciere
-TableColumn.header.Rating_global.info=Aprecierea global\u0103 pentru acest con\u021binut
v3.MainWindow.menu.getting_started=&Prezentare Vuze
MainWindow.menu.community=&Comunitate
MainWindow.menu.help.faq=\u00centreb\u0103ri Puse &Frecvent
MainWindow.menu.community.wiki=&Wikiul Vuze
MainWindow.menu.community.forums=Fo&rumul Vuze
MainWindow.menu.community.blog=&Blogul Vuze
-MainWindow.menu.community.add_friends=&Adaug\u0103 Prieteni
MainWindow.menu.help.support=A&jutor \u0219i Suport
externalLogin.title=Logare Necesar\u0103
externalLogin.explanation=\u0218ablonul "%1" necesit\u0103 logare. Dup\u0103 logare, aceast\u0103 fereastr\u0103 se va \u00eenchide automat. Dac\u0103 nu se \u00eent\u00eempl\u0103 asta ap\u0103sa\u021bi pe "gata".
externalLogin.explanation.capture=Trebuie s\u0103 v\u0103 loga\u021bi pentru a crea acest \u0219ablon. Dup\u0103 logare, clica\u021bi pe "Gata".
Button.done=Gata
GeneralView.torrent_created_on_and_by=%1 de %2
-v3.Share.wizard.title=Partajare -- Vr\u0103jitor
-v3.AddFriends.header.message=Ad\u0103uga\u021bi prieteni pentru a \u00eencepe s\u0103 partaja\u021bi torentele favorite
-v3.AddFriends.header=Adaug\u0103 Prieteni
-v3.AddFriends.wizard.title=Adaug\u0103 Prieteni -- Vr\u0103jitor
Button.continue=Continu\u0103
Button.preview=Previzioneaz\u0103
Subscription.menu.forcecheck=Actualizeaz\u0103 Acum
@@ -2612,9 +2540,6 @@ sidebar.LibraryDL=Neterminate
sidebar.LibraryCD=Terminate
authenticator.location=Loca\u021bie
authenticator.details=Detalii
-v3.MainWindow.menu.publish.new=Public\u0103 Con\u021binut Nou
-v3.MainWindow.menu.publish.mine=Con\u021binutul Publicat Deja
-v3.MainWindow.menu.publish.about=Despre Publicare...
v3.MainWindow.menu.showActionBarText=Arat\u0103 Etichetele
subscript.import.fail.title=Importare E\u0219uat\u0103
subscript.import.fail.desc=Detalii: %1
@@ -2631,7 +2556,6 @@ Subscription.menu.reset=Reseteaz\u0103 la Starea Ini\u021bial\u0103
ConfigView.section.Subscriptions=Abonamente
subscriptions.config.maxresults=Num\u0103rul maxim de rezultate p\u0103strate per abonament [0: nelimitat]
v3.activity.button.readall=Marcheaz\u0103 Tot ca Citit
-ConfigView.interface.start.library=Porne\u0219te \u00een Arhiva Torentelor
TableColumn.header.activityNew=Nou
TableColumn.header.activityType=Tip
TableColumn.header.activityText=Mesaj
@@ -2662,12 +2586,11 @@ Wizard.Subscription.rss.subtitle3=Odat\u0103 salvat, ve\u021bi primi \u00een pan
Wizard.Subscription.subscribe.library=Con\u021binut \u00een Arhiv\u0103
Wizard.Subscription.subscribe.subscriptions=Abonamente Similare
Wizard.Subscription.subscribe.library.empty=Nu s\u00eent disponibile abonamente?\n \nUita\u021bi-v\u0103 \u00een Re\u021beaua Vuze HD dup\u0103 butonul portocaliu de abonare.\n \n<A HREF="http://faq.vuze.com/?View=entry&EntryID=288">Read more</A>
-TableColumn.header.videoLength=Lungimea Videoului
message.confirm.delete.title=Confirma\u021bi \u0218tergerea
message.confirm.delete.text=Sigur dori\u021bi s\u0103 \u0219terge\u021bi '%1'?
Subscription.menu.properties=Propriet\u0103\u021bi
props.window.title=Propriet\u0103\u021bi pentru '%1'
-subs.prop.is_auto=Auto-descarc\u0103 rezultatele noi
+subs.prop.is_auto=Autodescarc\u0103 rezultatele noi
subs.prop.last_scan=Ultima actualizare reu\u0219it\u0103
subs.prop.last_result=Ultimul rezultat g\u0103sit
subs.prop.last_error=Ultima eroare
@@ -2713,8 +2636,6 @@ TableColumn.header.azsubs.ui.column.subs_link.info=Asociat cu abonamentele
Button.deleteContent.fromLibrary=\u0218terge din Arhiva Torentelor
Button.deleteContent.fromComputer=\u0218terge de pe Calculator
v3.deleteContent.message=\nDori\u021bi s\u0103 \u0219terge\u021bi '%1' de pe calculator sau doar s\u0103-l \u00eenl\u0103tura\u021bi din Arhiva Vuze?
-v3.library.infobar.text1=C\u0103uta\u021bi Vederea Avansat\u0103?
-v3.library.infobar.text2=Folosi\u021bi butonul "Vezi" din bara de unelte pentru a comuta \u00eentre cele dou\u0103 tipuri de interfa\u021b\u0103.
v3.MainWindow.menu.view.toolbartext=Text pe Bara de Unelte
v3.MainWindow.menu.view.asSimpleList=List\u0103 Simpl\u0103
v3.MainWindow.menu.view.asAdvancedList=List\u0103 Avansat\u0103
@@ -2727,7 +2648,7 @@ v3.MainWindow.menu.contentnetworks=&Re\u021bele HD
v3.MainWindow.menu.contentnetworks.about=Despre Re\u021belele HD
Peers.column.as.info=Detalii despre SA-ul partenerului (Sistemul Autonom)
ConfigView.label.autoopen.downloadbars=Deschide automat Barele de Desc\u0103rcare c\u00eend
-ConfigView.label.autoopen=Auto-Deschide
+ConfigView.label.autoopen=Autodeschide
ConfigView.label.autoopen.detailstab=Deschide automat tabul Detalii c\u00eend
ConfigView.label.systray=Sistaler
ConfigView.label.systray._mac=Iconi\u021ba din Bara de Stare
@@ -2738,16 +2659,6 @@ azbuddy.ui.menu.cat.share=Activeaz\u0103 abonamentele pentru prieteni
azbuddy.ui.menu.cat.set=Introduce\u021bi categoriile
azbuddy.ui.menu.cat.set_msg=List\u0103 de categorii separate prin virgul\u0103, sau 'Tot'
azbuddy.ui.menu.cat_subs=Aboneaz\u0103
-v3.buddy.prop.dn=Nume Afi\u0219at
-v3.buddy.prop.un=Utilizator
-v3.buddy.prop.on=Conectat
-v3.buddy.prop.lupd=Ultima Actualizare
-v3.buddy.prop.pks=Num\u0103r de chei publice
-v3.buddy.prop.pc=Mesaje de taifas [chat] \u00een a\u0219teptare
-v3.buddy.prop.catout=Categoriile la care se poate abona prietenul dv.
-v3.buddy.prop.catin=Categoriile prietenului la care v\u0103 pute\u021bi abona
-v3.buddy.set.catout=Permite prietenului s\u0103 se aboneze la categorie
-v3.buddy.set.catin=Aboneaz\u0103 la categoria prietenului
subs.prop.update_period=Perioada de actualizare
azbuddy.enable_cat_pub=Categorii publice la care se pot abona TO\u021aI prietenii dv. (separate prin ',' )
v3.dialog.cnclose.title=%1 \u00cenchis
@@ -2763,12 +2674,9 @@ TableColumn.header.category.info=Numele categoriei c\u0103reia \u00eei apar\u021
TableColumn.header.DateCompleted.info=Data la care a fost terminat\u0103 desc\u0103rcarea torentului
TableColumn.header.AzProduct.info=Re\u021beaua de con\u021binut de unde provine torentul
TableColumn.header.health.info=C\u00eet de s\u0103n\u0103toas\u0103/viabil\u0103 este conexiunea dv. la roiul torentului
-TableColumn.header.Info.info=Buton care lanseaz\u0103 pagina detaliat\u0103 a Con\u021binutului Vuze
TableColumn.header.maxuploads.info=Nr. maxim de parteneri c\u0103tre care se poate \u00eenc\u0103rca simultan
TableColumn.header.name.info=Numele Torentului
TableColumn.header.unopened.info=Fanion care indic\u0103 dac\u0103 torentul a fost redat (deschis)
-TableColumn.header.Quality.info=Calitatea con\u021binutului Vuze, cum ar fi HD, SD
-TableColumn.header.RateIt.info=Capacitatea de a nota con\u021binutul Vuze
TableColumn.header.savepath.info=Dosarul sau fi\u0219ierul de destina\u021bie pentru datele din torent
TableColumn.header.SeedingRank.info=Valoarea rangului sau c\u00eet de mult are nevoie un torent de donare.. O valoare mai mare \u00eenseamn\u0103 o necesitate mai mare.
TableColumn.header.shareRatio.info=C\u00eet de mult a\u021bi \u00eenc\u0103rcat (partajat) comparativ cu c\u00eet de mult a\u021bi desc\u0103rcat.
@@ -2778,7 +2686,6 @@ TableColumn.header.upspeed.info=Viteza curent\u0103 de \u00eenc\u0103rcare
TableColumn.header.downspeed.info=Viteza curent\u0103 de desc\u0103rcare
TableColumn.header.up.info=Cantitatea curent\u0103 de date trimise altor utilizatori
TableColumn.header.down.info=Cantitatea de date curent\u0103 primit\u0103 de la ceilal\u021bi utilizatori
-TableColumn.header.videoLength.info=Durata de redare a con\u021binutului video Vuze
TableColumn.header.ProgressETA.info=Combin\u0103 coloanele Stare, Progres, Timp Estimat de Terminare, \u0219i Vitez\u0103 \u00eentr-o coloan\u0103 multi-r\u00eend.
TableColumn.header.eta.info=Timpul estimat de terminare a desc\u0103rc\u0103rii torentului
Pieces.column.#=Nr.
@@ -2795,7 +2702,7 @@ TableColumn.header.TableColumnNameInfo=Numele \u0219i Descrierea Coloanei
TableColumn.header.TableColumnSample=E\u0219antion
TableColumn.header.TableColumnInfo=Descrierea Coloanei
TableColumn.header.TableColumnChosenColumn=Coloana Aleas\u0103
-subs.prop.is_auto_ok=Auto-desc\u0103rcare permis\u0103
+subs.prop.is_auto_ok=Autodesc\u0103rcare permis\u0103
label.learnmore=Afla\u021bi mai multe
ColumnSetup.title=Configurarea Coloanelor pt. '%1'
ColumnSetup.explain=Explora\u021bi coloanele disponibile din st\u00eenga \u0219i ad\u0103uga\u021bi-le la lista de coloane vizibile \u00een dreapta. M\u0103ri\u021bi sau diminua\u021bi lista de coloane disponibile folosind sec\u021biunea de Filtrare din partea st\u00eeng\u0103-jos. Tragerea-\u0219i-depunerea [drag-and-drop], ca \u0219i scurt\u0103turile de tastatur\u0103 pot fi de asemenea folosite.
@@ -2957,6 +2864,7 @@ devices.xcode.setcopyto=Seteaz\u0103 Dosarul de Copiere...
devices.xcode.setcopyto.title=Alege locul unde s\u0103 se copieze
devices.copy.folder.auto=Copiaz\u0103 automat fi\u0219ierele \u00een dosar
devices.copy.folder.dest=Copiaz\u0103 \u00een Dosar
+TableColumn.menu.maxuploads=Nr. Max \u00cenc\u0103rc\u0103ri
devices.xcode.mancopy=Copiaz\u0103 Manual Fi\u0219ierele
devices.xcode.show.cat=Separat dup\u0103 Categorie
ConfigView.label.alwaysShowLibraryHeader=Arat\u0103 mereu antetul \u00een Arhiva Torentelor (Torentele Mele)
@@ -2973,113 +2881,78 @@ v3.deviceview.infobar.line2.tivo=Fluxa\u021bi [stream] videouri select\u00eend V
v3.deviceview.infobar.line2.psp=Videourile vor fi copiate pe PSP c\u00eend va fi conectat.
devices.info.copypending2=%1 File(s) fi\u0219iere a\u0219teapt\u0103 s\u0103 fie copiate, conecta\u021bi dispozitivul
subscriptions.column.nb-subscribers=Abona\u021bi
-# The remaining keys were not in MessagesBundle.properties
-MyTorrentsView.availability.info=Nr. copii complete descoperite
-MyTorrentsView.upspeed=\u00cenc\u0103rcare
-window.uiswitcher.AdvancedUI.title=Vuze Avansat
-window.uiswitcher.AdvancedUI.text=* Recomandat pentru utilizatorii care doresc s\u0103 p\u0103streze aspectul interfe\u021bei clasice dar doresc s\u0103 caute, s\u0103 exploreze \u0219i s\u0103 publice con\u021binut pe platforma Vuze\n\n* Interfa\u021b\u0103 grafic\u0103 u\u0219oar\u0103 \u0219i intuitiv\u0103, asociat\u0103 cu facilit\u0103\u021bi \u0219i func\u021bionalitate mai avansat\u0103
-MyTorrentsView.torrentpath=Locul Torentului
-MyTorrentsView.seeds.fullcopycalc=%2 copii complete presupuse pentru %1 parteneri
-MyTorrentsView.trackername.info=Numele trackerului bazat pe adresa de anun\u021bare
-MyTorrentsView.maxuploads=Nr. Max de \u00cenc\u0103rc\u0103ri
-MyTorrentsView.peersources=Sursele Partenerilor
-MyTorrentsView.totalspeed.info=Viteza total\u0103 a tuturor partenerilor cu care s\u00eente\u021bi conectat
-MyTorrentsView.OnlyCDing4=Doar CDing4
-MyTorrentsView.done.info=Procentajul realizat din sarcina curent\u0103
-MyTorrentsView.SeedingRank=Rang de Donare
-MyTorrentsView.OnlyCDing4.info=Timpul c\u00eet torentul a fost exclusiv donat. Se exclude timpul c\u00eet torentul a fost at\u00eet desc\u0103rcat c\u00eet \u0219i donat.
-Wizard.Subscription.optin.help=Activeaz\u0103 Abonamentele :
-MyTorrentsView.menu.rename.displayed_and_save_path.enter.message.2=Dac\u0103 nu e introdus nici un text, vor fi utilizate valorile originale.
-v3.MainWindow.recentDL=Ultimele %1 Desc\u0103rc\u0103ri
-MyTorrentsView.swarm_average_speed=Viteza Medie a Roiului
-MyTorrentsView.tracker=Tracker
-v3.activity.header.xdaysago=Acum %1 Zile
-MyTorrentsView.torrentpath.info=Locul torentului pe disc
-v3.MainWindow.myMedia.noneSelected=Ave\u021bi %1 p\u0103r\u021bi din con\u021binut.\n%2 din ele s\u00eent complete.\n\nClica\u021bi pe un r\u00eend pentru a vedea informa\u021bii despre con\u021binut
-MyTorrentsView.commenticon=Comentarii
-MyTorrentsView.status.info=Ce face torentul
-MyTorrentsView.peers=Parteneri
-MyTorrentsView.maxdownspeed=Viteza Maxim\u0103 de Desc\u0103rcare
-MyTorrentsView.date_added=Dat\u0103 ad\u0103ugat\u0103
-MyTorrentsView.priority=Prioritate
-ConfigView.section.style.useNewStyleMessageBox=Folose\u0219te stilul nou de caset\u0103 cu mesaje
-MyTorrentsView.bad_avail_time.info=Ultima dat\u0103 c\u00eend a fost disponibil\u0103 o copie complet\u0103 a desc\u0103rc\u0103rii
-MyTorrentsView.completion=Progres
-MyTorrentsView.status=Stare
-MyTorrentsView.category=Categorie
-MyTorrentsView.completed.info=nr. de parteneri care au terminat de desc\u0103rcat torentul, a\u0219a cum e raportat de tracker
-MyTorrentsView.timesinceupload=\u00cenc\u0103rcare Inactiv\u0103 de
-MyTorrentsView.shareRatio=Raport de Partajare
-MyTorrentsView.menu.rename.save_path.enter.message.2=Dac\u0103 nu e introdus nici un text, va fi utilizat numele afi\u0219at al desc\u0103rc\u0103rii.
-MyTorrentsView.seed_to_peer_ratio=Raport Donatori/Parteneri
-MyTorrentsView.comment=Comentariu
-MyTorrentsView.menu.rename.displayed.enter.message.2=Dac\u0103 nu e introdus nici un text, va fi utilizat numele original.
-MyTorrentsView.trackernextaccess.info=C\u00eend are loc din nou accesarea trackerului
-MyTorrentsView.health=S\u0103n\u0103tate
-MyTorrentsView.AvgAvail.info=Suma p\u0103r\u021bilor disponibile divizat\u0103 prin nr. de p\u0103r\u021bi, divizat\u0103 prin nr. de conexiuni
-v3.HomeReminder.title=Desc\u0103rcare Ad\u0103ugat\u0103
-MyTorrentsView.maxdownspeed.info=Vit Max Desc per torent
-MyTorrentsView.filesdone=Fi\u0219iere Terminate
-MyTorrentsView.seeds.info=# donatori conecta\u021bi la (# total donatori)
-MyTorrentsView.seed_to_peer_ratio.info=Raportul donatori/parteneri pe tot roiul
-MyTorrentsView.pieces.info=Bar\u0103 grafic\u0103 reprezent\u00eend p\u0103r\u021bile pe care le-a\u021bi desc\u0103rcat
-MyTorrentsView.maxupspeed=Viteza Maxim\u0103 de \u00cenc\u0103rcare
-v3.activity.header.today=Azi
-MyTorrentsView.availability=Disponibilitate
-MyTorrentsView.pieces=P\u0103r\u021bi
-MyTorrentsView.tracker.info=Starea Trackerului
-MyTorrentsView.maxupspeed.info=Vit Max \u00cenc per torent
-MyTorrentsView.comment.info=Comentariu f\u0103cut de utilizator pt. desc\u0103rcare
-MyTorrentsView.totalspeed=Viteza Total\u0103
-v3.buddies.count=%1 Prieteni
-MyTorrentsView.bad_avail_time=Copie Complet\u0103 V\u0103zut\u0103
-MyTorrentsView.date_added.menu.reset=Reseteaz\u0103 Data
-MyTorrentsView.peersources.info=Sursele partenerilor s\u00eent permise pentru stabilirea leg\u0103turilor cu ace\u0219tia
-v3.MainWindow.menu.view.buttonbar=Bara cu Butoane
-MyTorrentsView.remaining=R\u0103mas
-Wizard.Subscription.optin.description.sidebar=Abonamente \u00een Bara Lateral\u0103.
-MyTorrentsView.completion.info=Reprezentarea grafic\u0103 a procentajului desc\u0103rcat
-MyTorrentsView.timesinceupload.info=Timpul scurs de c\u00eend au fost \u00eenc\u0103rcate date din torent
-MyTorrentsView.date_completed=Terminat \u00cen
-MyTorrentsView.size=M\u0103rime
-v3.HomeReminder.gohome=Comut\u0103 la Tabloul de Bord
-MyTorrentsView.done=Progres
-MyTorrentsView.secondsseeding=Donez de
-v3.HomeReminder.text='%1' a fost ad\u0103ugat la lista de desc\u0103rcare.\n\nDac\u0103 dori\u021bi s\u0103 vede\u021bi progresul desc\u0103rc\u0103rii, sau s\u0103 reda\u021bi fi\u0219ierul dup\u0103 terminarea ei, clica\u021bi pe tabul Tablou de Bord.
-MyTorrentsView.AvgAvail=Medie/portiune
-MyTorrentsView.networks=Re\u021bele
-MyTorrentsView.trackername=Numele Trackerului
-MyTorrentsView.timesincedownload.info=Timpul scurs de c\u00eend au fost desc\u0103rcate date din torent
-MyTorrentsView.down=Desc\u0103rcat
-v3.activity.header.yesterday=Ieri
-MyTorrentsView.swarm_average_completion=Realizarea medie a partenerilor
-TableColumn.header.date_added.menu.reset=Reseteaz\u0103 Data
-MyTorrentsView.trackernextaccess=Urm\u0103toarea Accesare a Trackerului
-Tab.closeHint=(ap\u0103sa\u021bi "Esc" pentru \u00eenchidere)
-externalLogin.alt_method=Folose\u0219te metod\u0103 alternativ\u0103 de captur\u0103 a fursecului [cookie] => alfa! de \u00eencercat doar dac\u0103 metoda obi\u0219nuit\u0103 nu func\u021bioneaz\u0103
-MyTorrentsView.peers.info=nr. de parteneri la care s\u00eente\u021bi conectat (nr. total de parteneri)
-MyTorrentsView.secondsdownloading=Descarc de
-v3.activity.header.xweeksago=Acum %1 S\u0103pt\u0103m\u00eeni
-MyTorrentsView.name=Nume
-MyTorrentsView.eta=Timp Estimat
-MyTorrentsView.seeds=Donatori
-MyTorrentsView.swarm_average_speed.info=Viteza medie a partenerilor din roi
-MyTorrentsView.filesdone.info=Fi\u0219iere Terminate/Fi\u0219iere Totale *sau* Fi\u0219iere Nes\u0103rite Terminate (Fi\u0219iere Terminate)/Fi\u0219iere Nes\u0103rite Totale (Fi\u0219iere Totale)
-MyTorrentsView.completed=Terminat
-MyTorrentsView.up=\u00cenc\u0103rcat
-Wizard.Subscription.optin.description.library=\u00cen Arhiva Torentelor, sau
-MyTorrentsView.secondsseeding.info=Durata de timp total\u0103 de la \u00eenceperea don\u0103rii.
-v3.activity.header.1weekago=Acum 1 S\u0103pt\u0103m\u00een\u0103
-MyTorrentsView.secondsdownloading.info=Durata de timp de la \u00eenceperea desc\u0103rc\u0103rii.
-MyTorrentsView.savepath=Calea de Salvare
-xmlhttp.legacy.error=Aceast\u0103 versiune a extensiei XML/HTTP nu mai func\u021bioneaz\u0103 cu Vuze - trebuie s-o actualiza\u021bi la o versiune mai nou\u0103.
-MyTorrentsView.networks.info=Re\u021bele permise pentru comunicarea de date cu partenerii
-v3.MainWindow.recentDL.library=Arhiva Torentelor >>
-MyTorrentsView.date_added.info=Data ad\u0103ug\u0103rii torentului
-MyTorrentsView.priority.info=Determin\u0103 banda ascendent\u0103 (de \u00eenc\u0103rcare) oferit\u0103 torentului
-MyTorrentsView.downspeed=Desc\u0103rcare
-MyTorrentsView.remaining.info=R\u0103mas de desc\u0103rcat
-MyTorrentsView.commenticon.info=Arat\u0103 iconi\u021ba dac\u0103 desc\u0103rcarea are comentarii f\u0103cute de utilizatori
-MyTorrentsView.timesincedownload=Desc\u0103rcare Inactiv\u0103 de
-MyTorrentsView.swarm_average_completion.info=Media progresului la partenerii din roi
-deletedata.message2=\nSigur dori\u021bi s\u0103 continua\u021bi?
+device.offlinedownloader.view.title=Desc\u0103rc\u0103toare Neconectate
+device.od.enable=Activeaz\u0103 dispozitivele cu desc\u0103rcare neconectat\u0103 [offline]
+device.odauto.enable=Administreaz\u0103 automat desc\u0103rc\u0103rile
+device.odpt.enable=Include torentele private
+devices.contextmenu.od=Desc\u0103rcare Neconectat\u0103
+devices.contextmenu.od.auto=<Automat>
+devices.contextmenu.od.enable=Activeaz\u0103
+devices.contextmenu.od.enabled=Activat
+devices.od.view.heading=Desc\u0103rc\u0103ri programate pt. desc\u0103rcare neconectat\u0103 [offline]
+DevicesOD.column.od_completion=Progresul Transferului
+devices.od.idle=Inactiv
+device.od.turnon.title=Activeaz\u0103 Suportul pt. Desc\u0103rc\u0103toare Neconectate
+device.is.disabled=Dispozitivul este dezactivat
+device.configure=Configureaz\u0103...
+device.od.error.notfound=Dispozitivul pare a fi neconectat [offline]
+device.od.error.opfailstatus=Dispozitivul a e\u0219uat s\u0103 proceseze comanda %1: stare %2
+device.od.error.opfailexcep=Dispozitivul a e\u0219uat s\u0103 proceseze comanda %1: excep\u021bie %2
+device.od.error.nospace=Nu mai exist\u0103 spa\u021biu pe dispozitiv sau nu este conectat nici un dispozitiv extern
+device.od.space=Spa\u021biu Disponibil
+ConfigView.section.style.forceSIValues=For\u021beaz\u0103 ar\u0103tarea valorilor ca valori IEC indiferent de afi\u0219area unit\u0103\u021bilor, pentru compatibilitate m\u0103rit\u0103 (e.g. 1MB = 1MiB = 1048576B)
+ConfigView.label.enableSystrayToolTip=Arat\u0103 statisticile de desc\u0103rcare la planarea cu mausul
+devices.activation=Activarea Dispozitivului
+button.nothanks=Nu, Mul\u021bumesc
+devices.od.turnon.text1=Am observat c\u0103 s\u00eente\u021bi conectat la %1.
+devices.od.turnon.text2=Dori\u021bi ca %1 s\u0103 continue desc\u0103rcarea fi\u0219ierelor atunci c\u00eend calculatorul este neconectat [offline]?
+devices.od.turnon.text3=Conecta\u021bi un Hardisc la %1 pentru a activa aceast\u0103 facilitate.
+devices.od.turnon.learn=Afla\u021bi mai multe >
+devices.router=ruter
+devices.od=desc\u0103rc\u0103tor neconectat
+webui.pairingenable=Activeaz\u0103 cuplarea [pairing]
+webui.group.access=Controlul Accesului
+ConfigView.section.Pairing=Cuplare
+pairing.accesscode=Cod de Acces
+pairing.ac.getnew=Aloc\u0103 un cod nou de acces
+pairing.ac.getnew.create=Creeaz\u0103
+pairing.ipv4=Adres\u0103 IPv4
+pairing.ipv6=Adres\u0103 IPv6
+pairing.host=Adresa gazdei (Nume DNS)
+pairing.group.explicit=Atribute Explicite
+pairing.explicit.enable=Activeaz\u0103
+pairing.explicit.info=Atributele explicite IP nu trebuie specificate \u00een mod obi\u0219nuit, pentru c\u0103 pot fi deduse automat.\nAtributul 'host' poate fi utilizat de exemplu dac\u0103 ave\u021bi un cont DynDNS \u0219i soft client potrivit pentru a p\u0103stra adresa IP dinamic\u0103 \u00eenregistrat\u0103 corect.
+pairing.op.fail=Opera\u021bia de cuplare a e\u0219uat
+pairing.alloc.fail=Alocarea unui cod nou de acces a e\u0219uat\n%1
+pairing.enable=Activeaz\u0103 cuplarea [pairing] softului Vuze cu aplica\u021bii/interfe\u021be distante
+pairing.status.info=Stare
+pairing.status.registered=Actualizare reu\u0219it\u0103 (%1)
+pairing.status.pending=Actualizarea va fi realizat\u0103 la %1
+pairing.status.initialising=Ini\u021bializare
+pairing.status.disabled=Dezactivat\u0103
+pairing.view.registered=Clica\u021bi pentru a vedea detaliile \u00eenregistr\u0103rii curente
+webui.pairing.info.n=Cuplarea este dezactivat\u0103, vede\u021bi op\u021biunile de la Conexiune->Cuplare pentru informa\u021bii despre aceast\u0103 facilitate.
+webui.pairing.info.y=Cuplarea este activat\u0103, vede\u021bi op\u021biunile de la Conexiune->Cuplare pentru detalii suplimentare.
+webui.enable=Activeaz\u0103 (*)
+ConfigView.section.rss=RSS Local etc.
+subscriptions.rss.enable=Creeaz\u0103 Flux RSS din abonamente
+device.tivo.enable=Activeaz\u0103 suportul pentru TiVo
+Button.removeAll=\u00cenl\u0103tur\u0103 Tot
+label.rename=Redenume\u0219te %1
+RCM.column.rc_rank=Rang
+RCM.column.rc_created=Creat
+RCM.column.rc_hash=Ha\u0219
+RCM.column.rc_lastseen=Ultima Apari\u021bie
+RCM.column.rc_level=Nivel
+rcm.view.heading=Descoperiri ale Roiului
+rcm.config.enabled=Activeaz\u0103
+rcm.config.max_results=Nr. Maxim de Rezultate
+rcm.config.max_level=Nivel Maxim
+rcm.search.provider=Roi
+pairing.server.warning.title=Mesajul Serverului de Cuplare
+wizard.webseedseditor.edit.title=Editorul Donatorilor HTTP
+wizard.webseedseditor.edit.newseed=Donator Nou
+MyTorrentsView.menu.editWebSeeds=Editeaz\u0103 Donatorii HTTP
+ClientStats.title.full=Statisticile Softului
+ClientStats.column.count=Num\u0103r
+Scrape.status.cached=R\u0103zuire [scrape] ca\u0219at\u0103
diff --git a/org/gudy/azureus2/internat/MessagesBundle_ru_RU.properties b/org/gudy/azureus2/internat/MessagesBundle_ru_RU.properties
index 9d7550b..aeb5fd0 100644
--- a/org/gudy/azureus2/internat/MessagesBundle_ru_RU.properties
+++ b/org/gudy/azureus2/internat/MessagesBundle_ru_RU.properties
@@ -725,7 +725,6 @@ ConfigView.section.style.alwaysRefreshMyTorrents.tooltip=\u042d\u0442\u0430 \u04
#
#2.0.7.0
#
-ConfigView.section.style.verticaloffset=\u0412\u0435\u0440\u0442\u0438\u043a\u0430\u043b\u044c\u043d\u043e\u0435 \u0441\u043c\u0435\u0449\u0435\u043d\u0438\u0435 \u0433\u0440\u0430\u0444\u0438\u043a\u0438 (\u0438\u0441\u043f\u0440\u0430\u0432\u043b\u0435\u043d\u0438\u0435 \u0434\u043b\u044f \u0431\u0438\u0431\u043b\u0438\u043e\u0442\u0435\u043a\u0438 GTK)
security.certtruster.title=\u041f\u0440\u0435\u0434\u0443\u043f\u0440\u0435\u0436\u0434\u0435\u043d\u0438\u0435 \u043e \u0441\u0435\u0440\u0442\u0438\u0444\u0438\u043a\u0430\u0442\u0435 \u0431\u0435\u0437\u043e\u043f\u0430\u0441\u043d\u043e\u0441\u0442\u0438
security.certtruster.intro=\u042d\u0442\u043e\u0442 \u0441\u0435\u0440\u0442\u0438\u0444\u0438\u043a\u0430\u0442 \u0431\u0435\u0437\u043e\u043f\u0430\u0441\u043d\u043e\u0441\u0442\u0438 \u0431\u044b\u043b \u0441\u043e\u0437\u0434\u0430\u043d \u0444\u0438\u0440\u043c\u043e\u0439, \u043a\u043e\u0442\u043e\u0440\u043e\u0439 \u0432\u044b \u043d\u0435 \u0434\u043e\u0432\u0435\u0440\u044f\u0435\u0442\u0435
security.certtruster.resource=\u0418\u0441\u0442\u043e\u0447\u043d\u0438\u043a:
@@ -1947,13 +1946,8 @@ MainWindow.menu.view.iconbar=\u041f\u0430\u043d\u0435\u043b\u044c \u0438\u0441\u
MyTorrentsView.menu.rename=\u0418\u0437\u043c\u0435\u043d\u0438\u0442\u044c \u0438\u043c\u044f/\u043f\u0443\u0442\u044c
MyTorrentsView.menu.rename.displayed=\u0418\u0437\u043c\u0435\u043d\u0438\u0442\u044c \u043e\u0442\u043e\u0431\u0440\u0430\u0436\u0430\u0435\u043c\u043e\u0435 \u0438\u043c\u044f
MyTorrentsView.menu.rename.save_path=\u0418\u0437\u043c\u0435\u043d\u0438\u0442\u044c \u043f\u0443\u0442\u044c \u0441\u043e\u0445\u0440\u0430\u043d\u0435\u043d\u0438\u044f
-MyTorrentsView.menu.rename.displayed_and_save_path=\u0418\u0437\u043c\u0435\u043d\u0438\u0442\u044c \u0432\u0441\u0451
MyTorrentsView.menu.rename.displayed.enter.title=\u0418\u0437\u043c\u0435\u043d\u0435\u043d\u0438\u0435 \u043e\u0442\u043e\u0431\u0440\u0430\u0436\u0430\u0435\u043c\u043e\u0433\u043e \u0438\u043c\u0435\u043d\u0438
MyTorrentsView.menu.rename.displayed.enter.message=\u0412\u0432\u0435\u0434\u0438\u0442\u0435 \u043d\u043e\u0432\u043e\u0435 \u043e\u0442\u043e\u0431\u0440\u0430\u0436\u0430\u0435\u043c\u043e\u0435 \u0438\u043c\u044f \u0434\u043b\u044f \u044d\u0442\u043e\u0439 \u0437\u0430\u0433\u0440\u0443\u0437\u043a\u0438.\n\u0415\u0441\u043b\u0438 \u0442\u0435\u043a\u0441\u0442 \u043d\u0435 \u0432\u0432\u0435\u0434\u0435\u043d, \u043e\u0440\u0438\u0433\u0438\u043d\u0430\u043b\u043d\u043e\u0435 \u0438\u043c\u044f \u0431\u0443\u0434\u0443\u0442 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u043d\u044b.
-MyTorrentsView.menu.rename.save_path.enter.title=\u0418\u0437\u043c\u0435\u043d\u0435\u043d\u0438\u0435 \u043f\u0443\u0442\u0438 \u0441\u043e\u0445\u0440\u0430\u043d\u0435\u043d\u0438\u044f
-MyTorrentsView.menu.rename.save_path.enter.message=\u0412\u044b\u0431\u0435\u0440\u0438 \u043d\u043e\u0432\u043e\u0435 \u043c\u0435\u0441\u0442\u043e \u0441\u043e\u0445\u0440\u0430\u043d\u0435\u043d\u0438\u044f \u0434\u043b\u044f \u044d\u0442\u043e\u0439 \u0437\u0430\u0433\u0440\u0443\u0437\u043a\u0438.\n\u0415\u0441\u043b\u0438 \u043e\u0441\u0442\u0430\u0432\u0438\u0442\u044c \u043f\u043e\u043b\u0435 \u043f\u0443\u0441\u0442\u044b\u043c, \u0431\u0443\u0434\u0435\u0442 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u043d\u043e \u043e\u0442\u043e\u0431\u0440\u0430\u0436\u0430\u0435\u043c\u043e\u0435 \u0438\u043c\u044f \u0437\u0430\u0433\u0440\u0443\u0437\u043a\u0438.
-MyTorrentsView.menu.rename.displayed_and_save_path.enter.title=\u0418\u0437\u043c\u0435\u043d\u0435\u043d\u0438\u0435 \u043f\u0443\u0442\u0438 \u0438 \u0438\u043c\u0435\u043d\u0438
-MyTorrentsView.menu.rename.displayed_and_save_path.enter.message=\u0412\u0432\u0435\u0434\u0438\u0442\u0435 \u043d\u043e\u0432\u043e\u0435 \u0438\u043c\u044f \u0434\u043b\u044f \u044d\u0442\u043e\u0439 \u0437\u0430\u0433\u0440\u0443\u0437\u043a\u0438.\n\u0415\u0441\u043b\u0438 \u0442\u0435\u043a\u0441\u0442 \u043d\u0435 \u0432\u0432\u0435\u0434\u0435\u043d, \u043e\u0440\u0438\u0433\u0438\u043d\u0430\u043b\u043d\u044b\u0435 \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u044f \u0431\u0443\u0434\u0443\u0442 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u043d\u044b.
MyTorrentsView.menu.edit_comment=\u0418\u0437\u043c\u0435\u043d\u0438\u0442\u044c \u043a\u043e\u043c\u043c\u0435\u043d\u0442\u0430\u0440\u0438\u0439
MyTorrentsView.menu.edit_comment.enter.title=\u0418\u0437\u043c\u0435\u043d\u0435\u043d\u0438\u0435 \u043a\u043e\u043c\u043c\u0435\u043d\u0442\u0430\u0440\u0438\u044f
MyTorrentsView.menu.edit_comment.enter.message=\u0412\u0432\u0435\u0434\u0438\u0442\u0435 \u043a\u043e\u043c\u043c\u0435\u043d\u0442\u0430\u0440\u0438\u0439 \u043a \u044d\u0442\u043e\u0439 \u0437\u0430\u0433\u0440\u0443\u0437\u043a\u0435.
@@ -2154,9 +2148,6 @@ v3.MainWindow.menu.advanced=&\u0420\u0430\u0441\u0448\u0438\u0440\u0435\u043d\u0
v3.MainWindow.menu.view.searchbar=\u041f\u0430\u043d\u0435\u043b\u044c \u043f\u043e\u0438\u0441\u043a\u0430
v3.MainWindow.menu.view.tabbar=\u041f\u0430\u043d\u0435\u043b\u044c \u0432\u043a\u043b\u0430\u0434\u043e\u043a
v3.MainWindow.currentDL=\u0421\u0435\u0439\u0447\u0430\u0441 \u0437\u0430\u0433\u0440\u0443\u0436\u0430\u0435\u0442\u0441\u044f
-v3.MainWindow.recentDL=\u041f\u043e\u0441\u043b\u0435\u0434\u043d\u0438\u0435 %1 \u0437\u0430\u0433\u0440\u0443\u0437\u043e\u043a
-v3.MainWindow.recentDL.library=\u041c\u0435\u0434\u0438\u0430\u0442\u0435\u043a\u0430 >>
-v3.MainWindow.myMedia.noneSelected=\u0418\u043c\u0435\u0435\u0442\u0441\u044f %1 \u0447\u0430\u0441\u0442\u0435\u0439 \u043a\u043e\u043d\u0442\u0435\u043d\u0442\u0430.\n%2 \u0438\u0437 \u043d\u0438\u0445 \u0437\u0430\u0432\u0435\u0440\u0448\u0435\u043d\u044b.\n\n\u0414\u043b\u044f \u043f\u043e\u043b\u0443\u0447\u0435\u043d\u0438\u044f \u0438\u043d\u0444\u043e\u0440\u043c\u0430\u0446\u0438\u0438 \u043e \u043a\u043e\u043d\u0442\u0435\u043d\u0442\u0435 \u0449\u0451\u043b\u043a\u043d\u0438\u0442\u0435 \u043d\u0430 \u0441\u043e\u043e\u0442\u0432\u0435\u0442\u0441\u0442\u0432\u0443\u044e\u0449\u0435\u0439 \u0441\u0442\u0440\u043e\u043a\u0435
v3.MainWindow.button.stream=\u041f\u043e\u0442\u043e\u043a
v3.MainWindow.button.stop=\u041e\u0441\u0442\u0430\u043d\u043e\u0432\u0438\u0442\u044c
v3.MainWindow.button.start=\u0417\u0430\u043f\u0443\u0441\u0442\u0438\u0442\u044c
@@ -2167,7 +2158,6 @@ v3.MainWindow.button.comment=\u041a\u043e\u043c\u043c\u0435\u043d\u0442\u0438\u0
v3.MainWindow.button.viewdetails=\u041f\u043e\u0434\u0440\u043e\u0431\u043d\u043e\u0441\u0442\u0438
v3.MainWindow.button.play=\u0412\u043e\u0441\u043f\u0440\u043e\u0438\u0437\u0432\u0435\u0441\u0442\u0438
v3.MainWindow.button.cancel=\u041e\u0442\u043c\u0435\u043d\u0438\u0442\u044c
-v3.MainWindow.button.sendtofriend=\u041f\u043e\u0434\u0435\u043b\u0438\u0442\u044c\u0441\u044f \u0442\u043e\u0440\u0440\u0435\u043d\u0442\u043e\u043c
v3.MainWindow.button.preview=\u041f\u0440\u0435\u0434\u043f\u0440\u043e\u0441\u043c\u043e\u0442\u0440
v3.MainWindow.view.wait=\u0418\u043d\u0438\u0446\u0438\u0430\u043b\u0438\u0437\u0430\u0446\u0438\u044f \u043f\u0440\u043e\u0441\u043c\u043e\u0442\u0440\u0430, \u043f\u043e\u0434\u043e\u0436\u0434\u0438\u0442\u0435.
v3.MainWindow.xofx=%1 \u0438\u0437 %2
@@ -2470,52 +2460,17 @@ Button.bar.share=\u041f\u043e\u0434\u0435\u043b\u0438\u0442\u044c\u0441\u044f
Button.bar.add=\u0414\u043e\u0431\u0430\u0432\u0438\u0442\u044c
Button.bar.edit=\u0418\u0437\u043c\u0435\u043d\u0438\u0442\u044c
Button.bar.edit.cancel=\u0413\u043e\u0442\u043e\u0432\u043e
-v3.Share.menu=\u041f\u043e\u0434\u0435\u043b\u0438\u0442\u044c\u0441\u044f \u043a\u043e\u043d\u0442\u0435\u043d\u0442\u043e\u043c
-v3.Share.header.message=\u041f\u043e\u0434\u0435\u043b\u0438\u0442\u0435\u0441\u044c \u0441 \u0434\u0440\u0443\u0437\u044c\u044f\u043c\u0438, \u043a\u043e\u0442\u043e\u0440\u044b\u0435 \u0443 \u0432\u0430\u0441 \u0443\u0436\u0435 \u0435\u0441\u0442\u044c, \u0438\u043b\u0438 \u0434\u043e\u0431\u0430\u0432\u044c\u0442\u0435 \u043d\u043e\u0432\u044b\u0445.
-v3.Share.add.buddy=\u0414\u043e\u0431\u0430\u0432\u0438\u0442\u044c \u0434\u0440\u0443\u0437\u0435\u0439
-v3.Share.add.edit.buddy=\u0414\u043e\u0431\u0430\u0432\u0438\u0442\u044c/\u0438\u0437\u043c\u0435\u043d\u0438\u0442\u044c \u0434\u0440\u0443\u0437\u0435\u0439
-v3.Share.add.buddy.all=\u041f\u043e\u0434\u0435\u043b\u0438\u0442\u044c\u0441\u044f \u0441\u043e \u0432\u0441\u0435\u043c\u0438
-v3.Share.add.buddy.existing=\u041c\u043e\u0438 \u0434\u0440\u0443\u0437\u044c\u044f:
-v3.Share.add.buddy.new=\u041d\u043e\u0432\u044b\u0435 \u0434\u0440\u0443\u0437\u044c\u044f:
-v3.Share.buddies=\u0414\u0440\u0443\u0437\u044c\u044f
-v3.Share.invitees=\u041f\u0440\u0438\u0433\u043b\u0430\u0448\u0451\u043d\u043d\u044b\u0435
-v3.Share.invite.buddies.prompt=\u041f\u0440\u0438\u0433\u043b\u0430\u0441\u0438\u0442\u0435 \u0435\u0449\u0451 \u0434\u0440\u0443\u0437\u0435\u0439 \u0434\u043b\u044f \u043e\u0431\u043c\u0435\u043d\u0430
-v3.Share.send.now=\u041e\u0442\u043f\u0440\u0430\u0432\u0438\u0442\u044c
-v3.Share.optional.message=\u041d\u0435\u043e\u0431\u044f\u0437\u0430\u0442\u0435\u043b\u044c\u043d\u043e\u0435 \u0441\u043e\u043e\u0431\u0449\u0435\u043d\u0438\u0435 \u0434\u043b\u044f \u0443\u0432\u0435\u0434\u043e\u043c\u043b\u0435\u043d\u0438\u044f (\u043d\u0435 \u0431\u043e\u043b\u0435\u0435 140 \u0441\u0438\u043c\u0432\u043e\u043b\u043e\u0432):
-v3.Share.disclaimer=\u0417\u0430\u043c\u0435\u0447\u0430\u043d\u0438\u0435: \u0418 \u043a\u043e\u043d\u0442\u0435\u043d\u0442, \u043a\u043e\u0442\u043e\u0440\u044b\u043c \u0432\u044b \u043f\u043e\u0434\u0435\u043b\u0438\u0442\u0435\u0441\u044c, \u0438 \u0441\u043e\u043e\u0431\u0449\u0435\u043d\u0438\u0435 (\u0435\u0441\u043b\u0438 \u0435\u0441\u0442\u044c), \u0431\u0443\u0434\u0443\u0442 \u0437\u0430\u0448\u0438\u0444\u0440\u043e\u0432\u0430\u043d\u044b.
-v3.Share.disclaimer.link=\u041f\u043e\u0434\u0440\u043e\u0431\u043d\u0435\u0435...
-ConfigView.section.security.vuze.login=\u0427\u0442\u043e\u0431\u044b \u0432\u043e\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u044c\u0441\u044f \u044d\u0442\u043e\u0439 \u0432\u043e\u0437\u043c\u043e\u0436\u043d\u043e\u0441\u0442\u044c\u044e, \u043d\u0435\u043e\u0431\u0445\u043e\u0434\u0438\u043c\u043e \u0432\u043e\u0439\u0442\u0438 \u0432 Vuze
-v3.buddy.menu.viewprofile=\u041f\u0440\u043e\u0444\u0438\u043b\u044c
-v3.buddy.menu.remove=\u0423\u0434\u0430\u043b\u0438\u0442\u044c \u0434\u0440\u0443\u0433\u0430
v3.MainWindow.menu.view.pluginbar=\u041f\u0430\u043d\u0435\u043b\u044c \u043c\u043e\u0434\u0443\u043b\u0435\u0439
-v3.MainWindow.menu.view.buddies-viewer=\u041f\u0430\u043d\u0435\u043b\u044c \u0434\u0440\u0443\u0437\u0435\u0439
-v3.activity.buddy-request=\u0421 \u0432\u0430\u043c\u0438 \u0445\u043e\u0447\u0435\u0442 \u043f\u043e\u0434\u0440\u0443\u0436\u0438\u0442\u044c\u0441\u044f %1
-v3.activity.buddy-request.accept=\u041f\u0440\u0438\u043d\u044f\u0442\u044c
-v3.activity.buddy-request.multi=\u0421 \u0432\u0430\u043c\u0438 \u0445\u043e\u0447\u0435\u0442 \u043f\u043e\u0434\u0440\u0443\u0436\u0438\u0442\u044c\u0441\u044f %1 [#%3]
-v3.activity.buddy-linkup=\u0412\u044b \u0438 %1 \u043f\u043e\u0434\u0440\u0443\u0436\u0438\u043b\u0438\u0441\u044c
-v3.activity.share-content=%1 \u043f\u043e\u0434\u0435\u043b\u0438\u043b\u0441\u044f \u0441 \u0432\u0430\u043c\u0438 %2. %3 <A HREF="%4" TITLE="%5">\u0433\u043e\u0432\u043e\u0440\u0438\u0442...</A>
-v3.activity.share-content.no-msg=%1 \u043f\u043e\u0434\u0435\u043b\u0438\u043b\u0441\u044f \u0441 \u0432\u0430\u043c\u0438 %2
-v3.buddies.friends=\u0414\u0440\u0443\u0437\u044c\u044f
-v3.buddies.online=\u0414\u043e\u0441\u0442\u0443\u043f\u043d\u043e (%1)
-v3.buddies.remove=\u0423\u0434\u0430\u043b\u0438\u0442\u044c \u0434\u0440\u0443\u0433\u0430
-v3.buddies.add.to.share=\u0414\u043e\u0431\u0430\u0432\u0438\u0442\u044c \u0434\u0440\u0443\u0433\u0430 \u0434\u043b\u044f \u043e\u0431\u043c\u0435\u043d\u0430
MainWindow.dialog.select.vuze.file=\u0412\u044b\u0431\u043e\u0440 \u0444\u0430\u0439\u043b\u0430 Vuze
MainWindow.menu.file.open.vuze=\u0424\u0430\u0439\u043b Vuze...
-azbuddy.ui.dialog.disable.title=\u041e\u0442\u043a\u043b\u044e\u0447\u0438\u0442\u044c \u043c\u043e\u0434\u0443\u043b\u044c \u00ab\u0414\u0440\u0443\u0437\u044c\u044f\u00bb
-azbuddy.ui.dialog.disable.text=\u041e\u0442\u043a\u043b\u044e\u0447\u0435\u043d\u0438\u0435 \u043c\u043e\u0434\u0443\u043b\u044f \u00ab\u0414\u0440\u0443\u0437\u044c\u044f\u00bb \u043d\u0435 \u043f\u043e\u0437\u0432\u043e\u043b\u0438\u0442 \u043e\u0431\u043c\u0435\u043d\u0438\u0432\u0430\u0442\u044c\u0441\u044f \u0442\u043e\u0440\u0440\u0435\u043d\u0442\u0430\u043c\u0438 \u0447\u0435\u0440\u0435\u0437 \u043f\u0430\u043d\u0435\u043b\u044c \u0434\u0440\u0443\u0437\u0435\u0439 \u0438 \u0438\u0437\u043c\u0435\u043d\u044f\u0442\u044c \u0441\u043f\u0438\u0441\u043e\u043a \u0434\u0440\u0443\u0437\u0435\u0439\n\n\u041e\u0442\u043a\u043b\u044e\u0447\u0438\u0442\u044c \u043c\u043e\u0434\u0443\u043b\u044c \u00ab\u0414\u0440\u0443\u0437\u044c\u044f\u00bb?
metasearch.addtemplate.title=\u0423\u0441\u0442\u0430\u043d\u043e\u0432\u0438\u0442\u044c \u043f\u043e\u0438\u0441\u043a\u043e\u0432\u044b\u0439 \u0448\u0430\u0431\u043b\u043e\u043d?
metasearch.addtemplate.desc=\u0423\u0441\u0442\u0430\u043d\u043e\u0432\u0438\u0442\u044c \u043f\u043e\u0438\u0441\u043a\u043e\u0432\u044b\u0439 \u0448\u0430\u0431\u043b\u043e\u043d \u0441 \u0438\u043c\u0435\u043d\u0435\u043c \u00ab%1\u00bb?
v3.share.private.title=\u041f\u043e\u0434\u0435\u043b\u0438\u0442\u044c\u0441\u044f \u0442\u043e\u0440\u0440\u0435\u043d\u0442\u043e\u043c
v3.share.private.text=\u0412\u044b\u0431\u0440\u0430\u043d\u043d\u044b\u0439 \u0442\u043e\u0440\u0440\u0435\u043d\u0442 \u044f\u0432\u043b\u044f\u0435\u0442\u0441\u044f \u0437\u0430\u043a\u0440\u044b\u0442\u044b\u043c.\n\n\u041d\u0435\u043b\u044c\u0437\u044f \u0434\u0435\u043b\u0438\u0442\u044c\u0441\u044f \u0437\u0430\u043a\u0440\u044b\u0442\u044b\u043c\u0438 \u0442\u043e\u0440\u0440\u0435\u043d\u0442\u0430\u043c\u0438.
-v3.buddies.disabled.title=\u041c\u043e\u0434\u0443\u043b\u044c \u00ab\u0414\u0440\u0443\u0437\u044c\u044f\u00bb \u043e\u0442\u043a\u043b\u044e\u0447\u0451\u043d
-v3.buddies.disabled.text._windows=\u0412\u044b \u043e\u0442\u043a\u043b\u044e\u0447\u0438\u043b\u0438 \u043c\u043e\u0434\u0443\u043b\u044c \u00ab\u0414\u0440\u0443\u0437\u044c\u044f\u00bb, \u0438 \u0442\u0435\u043f\u0435\u0440\u044c \u043d\u0435 \u0441\u043c\u043e\u0436\u0435\u0442\u0435 \u0434\u0435\u043b\u0438\u0442\u044c\u0441\u044f \u0442\u043e\u0440\u0440\u0435\u043d\u0442\u0430\u043c\u0438 \u0438 \u043f\u0440\u0438\u0433\u043b\u0430\u0448\u0430\u0442\u044c \u0434\u0440\u0443\u0437\u0435\u0439. \u0412\u043a\u043b\u044e\u0447\u0438\u0442\u044c \u043c\u043e\u0434\u0443\u043b\u044c \u043c\u043e\u0436\u043d\u043e \u0432 \u041d\u0430\u0441\u0442\u0440\u043e\u0439\u043a\u0430\u0445.
-v3.buddies.disabled.text._mac=\u0412\u044b \u043e\u0442\u043a\u043b\u044e\u0447\u0438\u043b\u0438 \u043c\u043e\u0434\u0443\u043b\u044c \u00ab\u0414\u0440\u0443\u0437\u044c\u044f\u00bb, \u0438 \u0442\u0435\u043f\u0435\u0440\u044c \u043d\u0435 \u0441\u043c\u043e\u0436\u0435\u0442\u0435 \u0434\u0435\u043b\u0438\u0442\u044c\u0441\u044f \u0442\u043e\u0440\u0440\u0435\u043d\u0442\u0430\u043c\u0438 \u0438 \u043f\u0440\u0438\u0433\u043b\u0430\u0448\u0430\u0442\u044c \u0434\u0440\u0443\u0437\u0435\u0439. \u0412\u043a\u043b\u044e\u0447\u0438\u0442\u044c \u043c\u043e\u0434\u0443\u043b\u044c \u043c\u043e\u0436\u043d\u043e \u0432 \u041d\u0430\u0441\u0442\u0440\u043e\u0439\u043a\u0430\u0445.
metasearch.addtemplate.dup.title=\u041f\u043e\u0432\u0442\u043e\u0440\u043d\u044b\u0439 \u0448\u0430\u0431\u043b\u043e\u043d
metasearch.addtemplate.dup.desc=\u041f\u043e\u0438\u0441\u043a\u043e\u0432\u044b\u0439 \u0448\u0430\u0431\u043b\u043e\u043d \u00ab%1\u00bb \u0443\u0436\u0435 \u0443\u0441\u0442\u0430\u043d\u043e\u0432\u043b\u0435\u043d
metasearch.export.select.template.file=\u0421\u043e\u0445\u0440\u0430\u043d\u0438\u0442\u044c \u0448\u0430\u0431\u043b\u043e\u043d
metasearch.import.select.template.file=\u041e\u0442\u043a\u0440\u044b\u0442\u044c \u0448\u0430\u0431\u043b\u043e\u043d
-v3.MainWindow.button.newtag.share=\u041d\u043e\u0432\u043e\u0435! \u041f\u043e\u0434\u0435\u043b\u0438\u0442\u044c\u0441\u044f \u0442\u043e\u0440\u0440\u0435\u043d\u0442\u043e\u043c
-v3.buddies.faq=\u041f\u043e\u0434\u0440\u043e\u0431\u043d\u0435\u0435...
dialog.uiswitch.title=\u041f\u0435\u0440\u0435\u043a\u043b\u044e\u0447\u0438\u0442\u044c\u0441\u044f \u043d\u0430 \u0438\u043d\u0442\u0435\u0440\u0444\u0435\u0439\u0441 Vuze UI
dialog.uiswitch.text=\u0414\u043b\u044f \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u043d\u0438\u044f \u044d\u0442\u043e\u0439 \u0432\u043e\u0437\u043c\u043e\u0436\u043d\u043e\u0441\u0442\u0438 \u0442\u0440\u0435\u0431\u0443\u0435\u0442\u0441\u044f \u0438\u043d\u0442\u0435\u0440\u0444\u0435\u0439\u0441 Vuze UI.\n\n\u041f\u043e\u0442\u0440\u0435\u0431\u0443\u0435\u0442\u0441\u044f \u043f\u0435\u0440\u0435\u0437\u0430\u043f\u0443\u0441\u043a Vuze.
dialog.uiswitch.button=\u041f\u0435\u0440\u0435\u043a\u043b\u044e\u0447\u0438\u0442\u044c\u0441\u044f \u043d\u0430 \u0438\u043d\u0442\u0435\u0440\u0444\u0435\u0439\u0441 Vuze UI
@@ -2523,25 +2478,10 @@ azbuddy.tracker.enabled=\u0420\u0430\u0437\u0440\u0435\u0448\u0438\u0442\u044c \
azbuddy.protocolspeed=\u041a\u0411/\u0441 \u043c\u0430\u043a\u0441. \u0442\u0440\u0430\u0444\u0438\u043a \u0434\u043b\u044f \u043f\u0440\u043e\u0442\u043e\u043a\u043e\u043b\u0430 \u0434\u0440\u0443\u0437\u0435\u0439
v3.MainWindow.button.download=\u0417\u0430\u0433\u0440\u0443\u0437\u0438\u0442\u044c
v3.MainWindow.button.run=\u0417\u0430\u043f\u0443\u0441\u0442\u0438\u0442\u044c \u0437\u0430\u0433\u0440\u0443\u0436\u0435\u043d\u043d\u044b\u0439 \u0444\u0430\u0439\u043b
-v3.activity.header.friend.requests.foryou=\u041f\u0440\u0435\u0434\u043b\u043e\u0436\u0435\u043d\u0438\u0435 \u0434\u0440\u0443\u0436\u0431\u044b \u2014 \u0434\u043b\u044f \u0432\u0430\u0441
-v3.activity.header.friend.requests.fromyou=\u041f\u0440\u0435\u0434\u043b\u043e\u0436\u0435\u043d\u0438\u0435 \u0434\u0440\u0443\u0436\u0431\u044b \u2014 \u043e\u0442 \u0432\u0430\u0441
-v3.activity.header.friend.requests.accepted=\u041f\u0440\u0435\u0434\u043b\u043e\u0436\u0435\u043d\u0438\u0435 \u0434\u0440\u0443\u0436\u0431\u044b \u2014 \u043f\u0440\u0438\u043d\u044f\u0442\u043e
-v3.activity.header.share.requests=\u041f\u0440\u0435\u0434\u043b\u043e\u0436\u0435\u043d\u0438\u044f \u043e\u0431\u043c\u0435\u043d\u0430 \u0442\u043e\u0440\u0440\u0435\u043d\u0442\u0430\u043c\u0438
v3.activity.header.downloads=\u0417\u0430\u0433\u0440\u0443\u0437\u043a\u0438
-v3.activity.header.rating.reminders=
v3.activity.header.vuze.news=\u041d\u043e\u0432\u043e\u0441\u0442\u0438 Vuze
-login.optional.message=\u0427\u0442\u043e\u0431\u044b \u0432\u043e\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u044c\u0441\u044f \u044d\u0442\u043e\u0439 \u0432\u043e\u0437\u043c\u043e\u0436\u043d\u043e\u0441\u0442\u044c\u044e, \u043d\u0435\u043e\u0431\u0445\u043e\u0434\u0438\u043c\u043e \u0432\u044b\u043f\u043e\u043b\u043d\u0438\u0442\u044c \u0432\u0445\u043e\u0434
-message.confirm.share.singular=\u041f\u0440\u0435\u0432\u043e\u0441\u0445\u043e\u0434\u043d\u043e! \u0417\u0430\u043f\u0440\u043e\u0441 \u043d\u0430 \u043e\u0431\u043c\u0435\u043d \u0442\u043e\u0440\u0440\u0435\u043d\u0442\u0430\u043c\u0438 \u0431\u044b\u043b \u043e\u0442\u043f\u0440\u0430\u0432\u043b\u0435\u043d.
-message.confirm.share.plural=\u041f\u0440\u0435\u0432\u043e\u0441\u0445\u043e\u0434\u043d\u043e! \u0417\u0430\u043f\u0440\u043e\u0441\u044b \u043d\u0430 \u043e\u0431\u043c\u0435\u043d \u0442\u043e\u0440\u0440\u0435\u043d\u0442\u0430\u043c\u0438 \u0431\u044b\u043b\u0438 \u043e\u0442\u043f\u0440\u0430\u0432\u043b\u0435\u043d\u044b.
-message.confirm.share.invite.singular=\u041f\u0440\u0435\u0432\u043e\u0441\u0445\u043e\u0434\u043d\u043e! \u0417\u0430\u043f\u0440\u043e\u0441 \u043d\u0430 \u043f\u043e\u0434\u043a\u043b\u044e\u0447\u0435\u043d\u0438\u0435 \u0438 \u043e\u0431\u043c\u0435\u043d \u0434\u0430\u043d\u043d\u044b\u043c\u0438 \u0431\u044b\u043b \u043e\u0442\u043f\u0440\u0430\u0432\u043b\u0435\u043d. \u0422\u0435\u043f\u0435\u0440\u044c \u0432\u044b \u043c\u043e\u0436\u0435\u0442\u0435 \u043d\u0435\u043d\u0430\u0432\u044f\u0437\u0447\u0438\u0432\u043e \u043f\u0440\u0435\u0434\u043b\u043e\u0436\u0438\u0442\u044c \u0434\u0440\u0443\u0433\u0443 \u043f\u0440\u0438\u043d\u044f\u0442\u044c \u0435\u0433\u043e.
-message.confirm.share.invite.plural=\u041f\u0440\u0435\u0432\u043e\u0441\u0445\u043e\u0434\u043d\u043e! \u0417\u0430\u043f\u0440\u043e\u0441 \u043d\u0430 \u043f\u043e\u0434\u043a\u043b\u044e\u0447\u0435\u043d\u0438\u0435 \u0438 \u043e\u0431\u043c\u0435\u043d \u0434\u0430\u043d\u043d\u044b\u043c\u0438 \u0431\u044b\u043b \u043e\u0442\u043f\u0440\u0430\u0432\u043b\u0435\u043d. \u0422\u0435\u043f\u0435\u0440\u044c \u0432\u044b \u043c\u043e\u0436\u0435\u0442\u0435 \u043d\u0435\u043d\u0430\u0432\u044f\u0437\u0447\u0438\u0432\u043e \u043f\u0440\u0435\u0434\u043b\u043e\u0436\u0438\u0442\u044c \u0434\u0440\u0443\u0437\u044c\u044f\u043c \u043f\u0440\u0438\u043d\u044f\u0442\u044c \u0435\u0433\u043e.
-message.confirm.invite.singular=\u041f\u0440\u0435\u0432\u043e\u0441\u0445\u043e\u0434\u043d\u043e! \u0417\u0430\u043f\u0440\u043e\u0441 \u0434\u0440\u0443\u0436\u0431\u044b \u0431\u044b\u043b \u043e\u0442\u043f\u0440\u0430\u0432\u043b\u0435\u043d. \u0422\u0435\u043f\u0435\u0440\u044c \u0432\u044b \u043c\u043e\u0436\u0435\u0442\u0435 \u043d\u0435\u043d\u0430\u0432\u044f\u0437\u0447\u0438\u0432\u043e \u043f\u0440\u0435\u0434\u043b\u043e\u0436\u0438\u0442\u044c \u0434\u0440\u0443\u0433\u0443 \u043f\u0440\u0438\u043d\u044f\u0442\u044c \u0435\u0433\u043e.
-message.confirm.invite.plural=\u041f\u0440\u0435\u0432\u043e\u0441\u0445\u043e\u0434\u043d\u043e! \u0417\u0430\u043f\u0440\u043e\u0441 \u0434\u0440\u0443\u0436\u0431\u044b \u0431\u044b\u043b \u043e\u0442\u043f\u0440\u0430\u0432\u043b\u0435\u043d. \u0422\u0435\u043f\u0435\u0440\u044c \u0432\u044b \u043c\u043e\u0436\u0435\u0442\u0435 \u043d\u0435\u043d\u0430\u0432\u044f\u0437\u0447\u0438\u0432\u043e \u043f\u0440\u0435\u0434\u043b\u043e\u0436\u0438\u0442\u044c \u0434\u0440\u0443\u0437\u044c\u044f\u043c \u043f\u0440\u0438\u043d\u044f\u0442\u044c \u0435\u0433\u043e.
-message.confirm.invite.error=\u041d\u0435 \u0443\u0434\u0430\u043b\u043e\u0441\u044c \u0432\u044b\u043f\u043e\u043b\u043d\u0438\u0442\u044c \u0437\u0430\u043f\u0440\u043e\u0441. \u041a\u0430\u043a \u043c\u0438\u043d\u0438\u043c\u0443\u043c \u043e\u0434\u043d\u043e \u0432\u0430\u0448\u0435 \u043f\u0440\u0438\u0433\u043b\u0430\u0448\u0435\u043d\u0438\u0435 \u0438\u043c\u0435\u0435\u0442 \u043e\u0448\u0438\u0431\u043a\u0438.
-message.prompt.add.friends=\u0412\u044b\u0431\u0435\u0440\u0438\u0442\u0435 \u0434\u0440\u0443\u0437\u0435\u0439 \u0432 \u043b\u0435\u0432\u043e\u0439 \u043d\u0438\u0436\u043d\u0435\u0439 \u043f\u0430\u043d\u0435\u043b\u0438.
message.taking.too.long=\u041e\u043f\u0435\u0440\u0430\u0446\u0438\u044f \u0437\u0430\u043d\u0438\u043c\u0430\u0435\u0442 \u0431\u043e\u043b\u044c\u0448\u0435 \u0432\u0440\u0435\u043c\u0435\u043d\u0438, \u0447\u0435\u043c \u043f\u043b\u0430\u043d\u0438\u0440\u043e\u0432\u0430\u043b\u043e\u0441\u044c\n\u0427\u0442\u043e\u0431\u044b \u043f\u0440\u0435\u043a\u0440\u0430\u0442\u0438\u0442\u044c \u0435\u0451, \u043c\u043e\u0436\u043d\u043e \u043d\u0430\u0436\u0430\u0442\u044c \u00abESC\u00bb
message.status.success=\u0423\u0441\u043f\u0435\u0448\u043d\u043e
-message.intro.friends=\u0414\u043e\u0431\u0430\u0432\u043b\u044f\u0439\u0442\u0435 \u0434\u0440\u0443\u0437\u0435\u0439.\n\u0414\u0435\u043b\u0438\u0442\u0435\u0441\u044c \u0442\u043e\u0440\u0440\u0435\u043d\u0442\u0430\u043c\u0438.\n\u0417\u0430\u0433\u0440\u0443\u0436\u0430\u0439\u0442\u0435 \u0431\u044b\u0441\u0442\u0440\u0435\u0435.
azbuddy.tracker.bbb.status.title=\u041f\u043e\u0434\u0434\u0435\u0440\u0436\u043a\u0430 \u0434\u0440\u0443\u0437\u0435\u0439
azbuddy.tracker.bbb.status.title.tooltip=\u0414\u0432\u043e\u0439\u043d\u043e\u0439 \u0449\u0435\u043b\u0447\u043e\u043a \u043e\u0442\u043a\u0440\u043e\u0435\u0442 \u0441\u0442\u0440\u0430\u043d\u0438\u0446\u0443 \u0441\u043f\u0440\u0430\u0432\u043a\u0438 \u0432 \u0431\u0440\u0430\u0443\u0437\u0435\u0440\u0435
azbuddy.tracker.bbb.status.idle=\u041f\u043e\u0434\u0434\u0435\u0440\u0436\u043a\u0430 \u043d\u0435\u0434\u043e\u0441\u0442\u0443\u043f\u043d\u0430
@@ -2550,13 +2490,8 @@ azbuddy.tracker.bbb.status.in=\u041c\u0435\u043d\u044f \u043f\u043e\u0434\u0434\
azbuddy.tracker.bbb.status.out=\u0412 \u0434\u0430\u043d\u043d\u044b\u0439 \u043c\u043e\u043c\u0435\u043d\u0442 \u043f\u043e\u0434\u0434\u0435\u0440\u0436\u0438\u0432\u0430\u044e\u0442\u0441\u044f \u0434\u0440\u0443\u0437\u044c\u044f
v3.MainWindow.search.go.tooltip=\u0412\u044b\u043f\u043e\u043b\u043d\u0438\u0442\u044c \u043f\u043e\u0438\u0441\u043a
v3.MainWindow.search.last.tooltip=\u041d\u0430\u0437\u0430\u0434 \u043a \u0440\u0435\u0437\u0443\u043b\u044c\u0442\u0430\u0442\u0430\u043c \u043f\u043e\u0438\u0441\u043a\u0430
-v3.activity.buddy-invited=\u0412\u044b \u043f\u0440\u0435\u0434\u043b\u043e\u0436\u0438\u043b\u0438 \u0434\u0440\u0443\u0436\u0431\u0443 %1.
-v3.activity.buddy-invited.multi=\u0412\u044b \u043f\u0440\u0435\u0434\u043b\u043e\u0436\u0438\u043b\u0438 \u0434\u0440\u0443\u0436\u0431\u0443 \u0441\u043b\u0435\u0434\u0443\u044e\u0449\u0438\u043c \u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u0435\u043b\u044f\u043c:\n%1
metasearch.addtemplate.done.title=\u0428\u0430\u0431\u043b\u043e\u043d \u0434\u043e\u0431\u0430\u0432\u043b\u0435\u043d
metasearch.addtemplate.done.desc=\u0428\u0430\u0431\u043b\u043e\u043d \u00ab%1\u00bb \u0443\u0441\u043f\u0435\u0448\u043d\u043e \u0434\u043e\u0431\u0430\u0432\u043b\u0435\u043d.\n\u041e\u043d \u0431\u0443\u0434\u0435\u0442 \u0437\u0430\u0434\u0435\u0439\u0441\u0442\u0432\u043e\u0432\u0430\u043d \u043f\u0440\u0438 \u0441\u043b\u0435\u0434\u0443\u044e\u0449\u0435\u043c \u043f\u043e\u0438\u0441\u043a\u043e\u0432\u043e\u043c \u0437\u0430\u043f\u0440\u043e\u0441\u0435.
-v3.MainWindow.button.share=\u041f\u043e\u0434\u0435\u043b\u0438\u0442\u044c\u0441\u044f \u043a\u043e\u043d\u0442\u0435\u043d\u0442\u043e\u043c
-v3.buddies.remove.buddy.dialog.title=\u0423\u0434\u0430\u043b\u0438\u0442\u044c
-v3.buddies.remove.buddy.dialog.text=\u0423\u0434\u0430\u043b\u0438\u0442\u044c %1 \u0438\u0437 \u0441\u043f\u0438\u0441\u043a\u0430 \u0434\u0440\u0443\u0437\u0435\u0439?
ConfigView.section.security.nopw=\u041f\u0430\u0440\u043e\u043b\u044c \u043d\u0435 \u0431\u044b\u043b \u0443\u043a\u0430\u0437\u0430\u043d
ConfigView.section.security.nopw_v=\u041f\u0430\u0440\u043e\u043b\u044c \u043d\u0435\u0434\u043e\u0441\u0442\u0443\u043f\u0435\u043d, \u0432\u043e\u0439\u0434\u0438\u0442\u0435 \u0432 \u0441\u0438\u0441\u0442\u0435\u043c\u0443 Vuze
fileplugininstall.install.title=\u0423\u0441\u0442\u0430\u043d\u043e\u0432\u0438\u0442\u044c \u043c\u043e\u0434\u0443\u043b\u044c?
@@ -2570,12 +2505,7 @@ azbuddy.os_not_avail=\u041d\u0435\u0434\u043e\u0441\u0442\u0443\u043f\u0435\u043
azbuddy.os_busy=\u0417\u0430\u043d\u044f\u0442
azbuddy.os_offline=\u041d\u0435 \u0432 \u0441\u0435\u0442\u0438
azbuddy.ui.menu.disconnect=\u041e\u0442\u043a\u043b\u044e\u0447\u0438\u0442\u044c\u0441\u044f
-v3.buddy.menu.chat=\u0411\u0435\u0441\u0435\u0434\u0430
-v3.chat.offline=%1 \u0441\u0435\u0439\u0447\u0430\u0441 \u043d\u0435 \u0432 \u0441\u0435\u0442\u0438 \u0438 \u043f\u043e\u043b\u0443\u0447\u0438\u0442 \u0441\u043e\u043e\u0431\u0449\u0435\u043d\u0438\u044f \u043f\u043e\u0437\u0436\u0435, \u043a\u043e\u0433\u0434\u0430 \u0437\u0430\u0439\u0434\u0451\u0442 \u0432 \u0441\u0435\u0442\u044c.
-v3.chat.wrongversion=%1 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u0435\u0442 \u0432\u0435\u0440\u0441\u0438\u044e Vuze, \u043d\u0435 \u043f\u043e\u0434\u0434\u0435\u0440\u0436\u0438\u0432\u0430\u044e\u0449\u0443\u044e \u0431\u0435\u0441\u0435\u0434\u044b.
azbuddy.enable_chat_notif=\u041f\u043e\u043a\u0430\u0437\u044b\u0432\u0430\u0442\u044c \u0443\u0432\u0435\u0434\u043e\u043c\u043b\u0435\u043d\u0438\u044f \u0432 \u0431\u0435\u0441\u0435\u0434\u0430\u0445
-v3.buddies.dnd.info.dialog.ok=OK
-v3.buddies.dnd.info.dialog.remember=\u0411\u043e\u043b\u044c\u0448\u0435 \u043d\u0435 \u043f\u043e\u043a\u0430\u0437\u044b\u0432\u0430\u0442\u044c \u044d\u0442\u043e \u0441\u043e\u043e\u0431\u0449\u0435\u043d\u0438\u0435
progress.window.msg.progress=\u041f\u043e\u0434\u043e\u0436\u0434\u0438\u0442\u0435, \u043f\u043e\u043a\u0430 \u043e\u043f\u0435\u0440\u0430\u0446\u0438\u044f \u0437\u0430\u0432\u0435\u0440\u0448\u0438\u0442\u0441\u044f
ConfigView.section.connection.advanced.read_select=\u041c\u0430\u043a\u0441. \u0432\u0440\u0435\u043c\u044f \u043e\u0436\u0438\u0434\u0430\u043d\u0438\u044f \u0447\u0442\u0435\u043d\u0438\u044f \u0432\u044b\u0431\u043e\u0440\u0430 (\u043c\u0441, \u043f\u043e \u0443\u043c\u043e\u043b\u0447\u0430\u043d\u0438\u044e %1)
ConfigView.section.connection.advanced.read_select_min=\u041c\u0438\u043d. \u0432\u0440\u0435\u043c\u044f \u043e\u0436\u0438\u0434\u0430\u043d\u0438\u044f \u0447\u0442\u0435\u043d\u0438\u044f \u0432\u044b\u0431\u043e\u0440\u0430 (\u043c\u0441, \u043f\u043e \u0443\u043c\u043e\u043b\u0447\u0430\u043d\u0438\u044e %1)
@@ -2631,24 +2561,18 @@ PluginDeprecation.view=\u041e\u0442\u043b\u0430\u0434\u043a\u0430 \u043c\u043e\u
PluginDeprecation.alert=\u041c\u043e\u0434\u0443\u043b\u044c \u043f\u043e\u043f\u044b\u0442\u0430\u043b\u0441\u044f \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u044c \u0444\u0443\u043d\u043a\u0446\u0438\u043e\u043d\u0430\u043b, \u043a\u043e\u0442\u043e\u0440\u044b\u0439 \u0431\u0443\u0434\u0435\u0442 \u0443\u0431\u0440\u0430\u043d \u0432 \u0441\u043b\u0435\u0434\u0443\u044e\u0449\u0438\u0445 \u0432\u0435\u0440\u0441\u0438\u044f\u0445 \u2014 \u043f\u043e\u0434\u0440\u043e\u0431\u043d\u0430\u044f \u0438\u043d\u0444\u043e\u0440\u043c\u0430\u0446\u0438\u044f \u0434\u043e\u0441\u0442\u0443\u043f\u043d\u0430 \u0432 \u043e\u043a\u043d\u0435 \u043e\u0442\u043b\u0430\u0434\u043a\u0438 \u043c\u043e\u0434\u0443\u043b\u044f
TableColumn.header.Thumbnail=\u0417\u043d\u0430\u0447\u043e\u043a
TableColumn.header.Thumbnail.info=\u0417\u043d\u0430\u0447\u043e\u043a \u0441 \u043f\u0440\u0435\u0434\u043f\u0440\u043e\u0441\u043c\u043e\u0442\u0440\u043e\u043c \u043a\u043e\u043d\u0442\u0435\u043d\u0442\u0430 (\u0434\u043b\u044f \u0444\u0430\u0439\u043b\u043e\u0432 Vuze) \u0438\u043b\u0438 \u0437\u043d\u0430\u0447\u043e\u043a \u0444\u0430\u0439\u043b\u0430 (\u0434\u043b\u044f \u0432\u0441\u0435\u0433\u043e \u043e\u0441\u0442\u0430\u043b\u044c\u043d\u043e\u0433\u043e)
-TableColumn.header.Rating_global=\u041e\u0446\u0435\u043d\u043a\u0430
-TableColumn.header.Rating_global.info=\u041e\u0431\u0449\u0430\u044f \u043e\u0446\u0435\u043d\u043a\u0430 \u043a\u043e\u043d\u0442\u0435\u043d\u0442\u0430
v3.MainWindow.menu.getting_started=&\u0411\u044b\u0441\u0442\u0440\u044b\u0439 \u0441\u0442\u0430\u0440\u0442
MainWindow.menu.community=\u0421\u043e\u043e&\u0431\u0449\u0435\u0441\u0442\u0432\u043e
MainWindow.menu.help.faq=&\u0427\u0430\u0441\u0442\u043e \u0437\u0430\u0434\u0430\u0432\u0430\u0435\u043c\u044b\u0435 \u0432\u043e\u043f\u0440\u043e\u0441\u044b (FAQ)
MainWindow.menu.community.wiki=&\u0412\u0438\u043a\u0438 \u0441\u043e\u043e\u0431\u0449\u0435\u0441\u0442\u0432\u0430
MainWindow.menu.community.forums=&\u0424\u043e\u0440\u0443\u043c \u0441\u043e\u043e\u0431\u0449\u0435\u0441\u0442\u0432\u0430
MainWindow.menu.community.blog=&\u0411\u043b\u043e\u0433 Vuze
-MainWindow.menu.community.add_friends=&\u0414\u043e\u0431\u0430\u0432\u0438\u0442\u044c \u0434\u0440\u0443\u0437\u0435\u0439
MainWindow.menu.help.support=&\u0421\u043f\u0440\u0430\u0432\u043a\u0430 \u0438 \u043f\u043e\u0434\u0434\u0435\u0440\u0436\u043a\u0430
externalLogin.title=\u0422\u0440\u0435\u0431\u0443\u0435\u0442\u0441\u044f \u0430\u0432\u0442\u043e\u0440\u0438\u0437\u0430\u0446\u0438\u044f
externalLogin.explanation=\u0428\u0430\u0431\u043b\u043e\u043d \u00ab%1\u00bb \u0442\u0440\u0435\u0431\u0443\u0435\u0442 \u0430\u0432\u0442\u043e\u0440\u0438\u0437\u0430\u0446\u0438\u0438. \u041f\u043e \u0437\u0430\u0432\u0435\u0440\u0448\u0435\u043d\u0438\u0438 \u0430\u0432\u0442\u043e\u0440\u0438\u0437\u0430\u0446\u0438\u0438 \u044d\u0442\u043e \u043e\u043a\u043d\u043e \u0434\u043e\u043b\u0436\u043d\u043e \u0430\u0432\u0442\u043e\u043c\u0430\u0442\u0438\u0447\u0435\u0441\u043a\u0438 \u0437\u0430\u043a\u0440\u044b\u0442\u044c\u0441\u044f. \u0415\u0441\u043b\u0438 \u044d\u0442\u043e\u0433\u043e \u043d\u0435 \u043f\u0440\u043e\u0438\u0437\u043e\u0448\u043b\u043e, \u043d\u0430\u0436\u043c\u0438\u0442\u0435 \u00ab\u0413\u043e\u0442\u043e\u0432\u043e\u00bb
externalLogin.explanation.capture=\u0421\u043e\u0437\u0434\u0430\u043d\u0438\u0435 \u0448\u0430\u0431\u043b\u043e\u043d\u0430 \u00ab%1\u00bb \u0442\u0440\u0435\u0431\u0443\u0435\u0442 \u0430\u0432\u0442\u043e\u0440\u0438\u0437\u0430\u0446\u0438\u0438. \u041f\u043e \u0437\u0430\u0432\u0435\u0440\u0448\u0435\u043d\u0438\u0438 \u0430\u0432\u0442\u043e\u0440\u0438\u0437\u0430\u0446\u0438\u0438 \u043d\u0430\u0436\u043c\u0438\u0442\u0435 \u00ab\u0413\u043e\u0442\u043e\u0432\u043e\u00bb.
Button.done=\u0413\u043e\u0442\u043e\u0432\u043e
GeneralView.torrent_created_on_and_by=%1 ( %2 )
-v3.AddFriends.header.message=\u0414\u043e\u0431\u0430\u0432\u0438\u0442\u044c \u0434\u0440\u0443\u0437\u0435\u0439, \u0447\u0442\u043e\u0431\u044b \u043d\u0430\u0447\u0430\u0442\u044c \u0434\u0435\u043b\u0438\u0442\u044c\u0441\u044f \u043b\u044e\u0431\u0438\u043c\u044b\u043c\u0438 \u0442\u043e\u0440\u0440\u0435\u043d\u0442\u0430\u043c\u0438
-v3.AddFriends.header=\u0414\u043e\u0431\u0430\u0432\u0438\u0442\u044c \u0434\u0440\u0443\u0437\u0435\u0439
-v3.AddFriends.wizard.title=\u0414\u043e\u0431\u0430\u0432\u043b\u0435\u043d\u0438\u0435 \u0434\u0440\u0443\u0437\u0435\u0439 \u2014 \u043f\u043e\u043c\u043e\u0449\u043d\u0438\u043a
Button.continue=\u041f\u0440\u043e\u0434\u043e\u043b\u0436\u0438\u0442\u044c
Button.preview=\u041f\u0440\u0435\u0434\u043f\u0440\u043e\u0441\u043c\u043e\u0442\u0440
Subscription.menu.forcecheck=\u041e\u0431\u043d\u043e\u0432\u0438\u0442\u044c
@@ -2659,9 +2583,6 @@ sidebar.LibraryDL=\u0417\u0430\u0433\u0440\u0443\u0437\u043a\u0438
sidebar.LibraryCD=\u0413\u043e\u0442\u043e\u0432\u043e
authenticator.location=\u0420\u0430\u0441\u043f\u043e\u043b\u043e\u0436\u0435\u043d\u0438\u0435
authenticator.details=\u041f\u043e\u0434\u0440\u043e\u0431\u043d\u043e\u0441\u0442\u0438
-v3.MainWindow.menu.publish.new=\u041e\u043f\u0443\u0431\u043b\u0438\u043a\u043e\u0432\u0430\u0442\u044c \u043d\u043e\u0432\u044b\u0439 \u043a\u043e\u043d\u0442\u0435\u043d\u0442
-v3.MainWindow.menu.publish.mine=\u041e\u043f\u0443\u0431\u043b\u0438\u043a\u043e\u0432\u0430\u043d\u043d\u044b\u0439 \u043a\u043e\u043d\u0442\u0435\u043d\u0442
-v3.MainWindow.menu.publish.about=\u041e \u043f\u0443\u0431\u043b\u0438\u043a\u0430\u0446\u0438\u0438...
v3.MainWindow.menu.showActionBarText=\u041f\u043e\u043a\u0430\u0437\u044b\u0432\u0430\u0442\u044c \u043f\u043e\u0434\u043f\u0438\u0441\u0438
subscript.import.fail.title=\u041d\u0435 \u0443\u0434\u0430\u043b\u043e\u0441\u044c \u0438\u043c\u043f\u043e\u0440\u0442\u0438\u0440\u043e\u0432\u0430\u0442\u044c
subscript.import.fail.desc=\u041f\u043e\u0434\u0440\u043e\u0431\u043d\u043e\u0441\u0442\u0438: %1
@@ -2678,13 +2599,11 @@ Subscription.menu.reset=\u0421\u0431\u0440\u043e\u0441\u0438\u0442\u044c \u0432
ConfigView.section.Subscriptions=\u041f\u043e\u0434\u043f\u0438\u0441\u043a\u0438
subscriptions.config.maxresults=\u041c\u0430\u043a\u0441\u0438\u043c\u0430\u043b\u044c\u043d\u043e\u0435 \u0447\u0438\u0441\u043b\u043e \u0437\u0430\u043f\u043e\u043c\u0438\u043d\u0430\u0435\u043c\u044b\u0445 \u0440\u0435\u0437\u0443\u043b\u044c\u0442\u0430\u0442\u043e\u0432 \u0434\u043b\u044f \u043f\u043e\u0434\u043f\u0438\u0441\u043a\u0438 [0: \u043d\u0435 \u043e\u0433\u0440\u0430\u043d\u0438\u0447\u0435\u043d\u043e]
v3.activity.button.readall=\u041e\u0442\u043c\u0435\u0442\u0438\u0442\u044c \u0432\u0441\u0451 \u043f\u0440\u043e\u0447\u0442\u0451\u043d\u043d\u044b\u043c
-ConfigView.interface.start.library=\u041d\u0430\u0447\u0438\u043d\u0430\u0442\u044c \u0441 \u043c\u0435\u0434\u0438\u0430\u0442\u0435\u043a\u0438
TableColumn.header.activityNew=\u041d\u043e\u0432\u044b\u0439
TableColumn.header.activityType=\u0422\u0438\u043f
TableColumn.header.activityText=\u0421\u043e\u043e\u0431\u0449\u0435\u043d\u0438\u0435
TableColumn.header.activityDate=\u0414\u0430\u0442\u0430 \u0434\u043e\u0431\u0430\u0432\u043b\u0435\u043d\u0438\u044f
TableColumn.header.activityActions=\u0414\u0435\u0439\u0441\u0442\u0432\u0438\u044f
-TableColumn.header.activityAvatar=\u0410\u0432\u0430\u0442\u0430\u0440
Subscription.menu.resetauth=\u0421\u0431\u0440\u043e\u0441\u0438\u0442\u044c \u0434\u0430\u043d\u043d\u044b\u0435 \u0430\u0432\u0442\u043e\u0440\u0438\u0437\u0430\u0446\u0438\u0438
Search.menu.engines=\u0428\u0430\u0431\u043b\u043e\u043d\u044b
Wizard.Subscription.title=\u041f\u043e\u0434\u043f\u0438\u0441\u0430\u0442\u044c\u0441\u044f
@@ -2710,8 +2629,6 @@ Wizard.Subscription.rss.subtitle3=\u041f\u0440\u0438 \u043d\u0430\u043b\u0438\u0
Wizard.Subscription.subscribe.library=\u041a\u043e\u043d\u0442\u0435\u043d\u0442 \u0432 \u043c\u0435\u0434\u0438\u0430\u0442\u0435\u043a\u0435
Wizard.Subscription.subscribe.subscriptions=\u041f\u043e\u0445\u043e\u0436\u0438\u0435 \u043f\u043e\u0434\u043f\u0438\u0441\u043a\u0438
Wizard.Subscription.subscribe.library.empty=\u041d\u0435 \u043d\u0430\u0448\u043b\u043e\u0441\u044c \u043f\u043e\u0434\u043f\u0438\u0441\u043e\u043a?\n \n\u0418\u0449\u0438\u0442\u0435 \u044f\u0440\u043a\u043e-\u043e\u0440\u0430\u043d\u0436\u0435\u0432\u0443\u044e \u043a\u043d\u043e\u043f\u043a\u0443 \u043d\u0430 \u043f\u043e\u0440\u0442\u0430\u043b\u0435 Vuze HD.\n \n<A HREF="http://faq.vuze.com/?View=entry&EntryID=288">\u041f\u043e\u0434\u0440\u043e\u0431\u043d\u0435\u0435...</A>
-TableColumn.header.Info=\u0418\u043d\u0444\u043e\u0440\u043c\u0430\u0446\u0438\u044f
-TableColumn.header.videoLength=\u041f\u0440\u043e\u0434\u043e\u043b\u0436\u0438\u0442\u0435\u043b\u044c\u043d\u043e\u0441\u0442\u044c
message.confirm.delete.title=\u041f\u043e\u0434\u0442\u0432\u0435\u0440\u0434\u0438\u0442\u0435 \u0443\u0434\u0430\u043b\u0435\u043d\u0438\u0435
message.confirm.delete.text=\u0423\u0434\u0430\u043b\u0438\u0442\u044c \u00ab%1\u00bb?
Subscription.menu.properties=\u0421\u0432\u043e\u0439\u0441\u0442\u0432\u0430
@@ -2763,8 +2680,6 @@ TableColumn.header.azsubs.ui.column.subs_link.info=\u0421\u0432\u044f\u0437\u043
Button.deleteContent.fromLibrary=\u0423\u0434\u0430\u043b\u0438\u0442\u044c \u0438\u0437 \u043c\u0435\u0434\u0438\u0430\u0442\u0435\u043a\u0438
Button.deleteContent.fromComputer=\u0423\u0434\u0430\u043b\u0438\u0442\u044c \u0441 \u043a\u043e\u043c\u043f\u044c\u044e\u0442\u0435\u0440\u0430
v3.deleteContent.message=\n\u0423\u0434\u0430\u043b\u0438\u0442\u044c \u00ab%1\u00bb \u0441 \u043a\u043e\u043c\u043f\u044c\u044e\u0442\u0435\u0440\u0430 \u0438\u043b\u0438 \u0443\u0431\u0440\u0430\u0442\u044c \u0438\u0437 \u043c\u0435\u0434\u0438\u0430\u0442\u0435\u043a\u0438 Vuze?
-v3.library.infobar.text1=\u041d\u0435 \u043c\u043e\u0436\u0435\u0442\u0435 \u043d\u0430\u0439\u0442\u0438 \u0440\u0430\u0441\u0448\u0438\u0440\u0435\u043d\u043d\u044b\u0439 \u0440\u0435\u0436\u0438\u043c?
-v3.library.infobar.text2=\u0412\u043e\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u0439\u0442\u0435\u0441\u044c \u043f\u0435\u0440\u0435\u043a\u043b\u044e\u0447\u0430\u0442\u0435\u043b\u0435\u043c \u00ab\u0412\u0438\u0434\u00bb \u043d\u0430 \u0432\u0435\u0440\u0445\u043d\u0435\u0439 \u043f\u0430\u043d\u0435\u043b\u0438.
v3.MainWindow.menu.view.toolbartext=\u041f\u043e\u0434\u043f\u0438\u0441\u0438 \u043d\u0430 \u043f\u0430\u043d\u0435\u043b\u0438 \u0438\u043d\u0441\u0442\u0440\u0443\u043c\u0435\u043d\u0442\u043e\u0432
v3.MainWindow.menu.view.asSimpleList=\u041f\u0440\u043e\u0441\u0442\u043e\u0439 \u0441\u043f\u0438\u0441\u043e\u043a
v3.MainWindow.menu.view.asAdvancedList=\u0420\u0430\u0441\u0448\u0438\u0440\u0435\u043d\u043d\u044b\u0439 \u0441\u043f\u0438\u0441\u043e\u043a
@@ -2790,16 +2705,6 @@ azbuddy.ui.menu.cat.share=\u0412\u043a\u043b\u044e\u0447\u0438\u0442\u044c \u043
azbuddy.ui.menu.cat.set=\u0412\u0432\u0435\u0434\u0438\u0442\u0435 \u043a\u0430\u0442\u0435\u0433\u043e\u0440\u0438\u0438
azbuddy.ui.menu.cat.set_msg=\u0421\u043f\u0438\u0441\u043e\u043a \u043a\u0430\u0442\u0435\u0433\u043e\u0440\u0438\u0439 \u0447\u0435\u0440\u0435\u0437 \u0437\u0430\u043f\u044f\u0442\u0443\u044e \u0438\u043b\u0438 \u00abAll\u00bb
azbuddy.ui.menu.cat_subs=\u041f\u043e\u0434\u043f\u0438\u0441\u0430\u0442\u044c\u0441\u044f
-v3.buddy.prop.dn=\u041f\u0441\u0435\u0432\u0434\u043e\u043d\u0438\u043c
-v3.buddy.prop.un=\u0418\u043c\u044f \u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u0435\u043b\u044f
-v3.buddy.prop.on=\u0414\u043e\u0441\u0442\u0443\u043f\u0435\u043d
-v3.buddy.prop.lupd=\u041f\u043e\u0441\u043b\u0435\u0434\u043d\u0435\u0435 \u043e\u0431\u043d\u043e\u0432\u043b\u0435\u043d\u0438\u0435
-v3.buddy.prop.pks=\u041a\u043e\u043b\u0438\u0447\u0435\u0441\u0442\u0432\u043e \u043e\u0442\u043a\u0440\u044b\u0442\u044b\u0445 \u043a\u043b\u044e\u0447\u0435\u0439
-v3.buddy.prop.pc=\u041d\u0435\u043f\u0440\u043e\u0447\u0438\u0442\u0430\u043d\u043d\u044b\u0435 \u0441\u043e\u043e\u0431\u0449\u0435\u043d\u0438\u044f
-v3.buddy.prop.catout=\u041a\u0430\u0442\u0435\u0433\u043e\u0440\u0438\u0438, \u043d\u0430 \u043a\u043e\u0442\u043e\u0440\u044b\u0435 \u043c\u043e\u0433\u0443\u0442 \u043f\u043e\u0434\u043f\u0438\u0441\u0430\u0442\u044c\u0441\u044f \u0432\u0430\u0448\u0438 \u0434\u0440\u0443\u0437\u044c\u044f
-v3.buddy.prop.catin=\u041a\u0430\u0442\u0435\u0433\u043e\u0440\u0438\u0438, \u043f\u0440\u0435\u0434\u043b\u043e\u0436\u0435\u043d\u043d\u044b\u0435 \u0434\u0440\u0443\u0433\u043e\u043c
-v3.buddy.set.catout=\u0420\u0430\u0437\u0440\u0435\u0448\u0438\u0442\u044c \u0434\u0440\u0443\u0433\u0443 \u043f\u043e\u0434\u043f\u0438\u0441\u0430\u0442\u044c\u0441\u044f \u043d\u0430 \u043a\u0430\u0442\u0435\u0433\u043e\u0440\u0438\u044e
-v3.buddy.set.catin=\u041f\u043e\u0434\u043f\u0438\u0441\u0430\u0442\u044c\u0441\u044f \u043d\u0430 \u043a\u0430\u0442\u0435\u0433\u043e\u0440\u0438\u044e \u0434\u0440\u0443\u0433\u0430
subs.prop.update_period=\u0418\u043d\u0442\u0435\u0440\u0432\u0430\u043b \u043e\u0431\u043d\u043e\u0432\u043b\u0435\u043d\u0438\u044f
azbuddy.enable_cat_pub=\u041a\u0430\u0442\u0435\u0433\u043e\u0440\u0438\u0438, \u043d\u0430 \u043a\u043e\u0442\u043e\u0440\u044b\u0435 \u0441\u043c\u043e\u0433\u0443\u0442 \u043f\u043e\u0434\u043f\u0438\u0441\u0430\u0442\u044c\u0441\u044f \u0412\u0421\u0415 \u0432\u0430\u0448\u0438 \u0434\u0440\u0443\u0437\u044c\u044f (\u0440\u0430\u0437\u0434\u0435\u043b\u0438\u0442\u0435\u043b\u044c: \u00ab,\u00bb)
v3.dialog.cnclose.title=\u0417\u0430\u043a\u0440\u044b\u0442\u043e %1
@@ -2815,12 +2720,9 @@ TableColumn.header.category.info=\u041d\u0430\u0437\u0432\u0430\u043d\u0438\u043
TableColumn.header.DateCompleted.info=\u0414\u0430\u0442\u0430 \u0437\u0430\u0432\u0435\u0440\u0448\u0435\u043d\u0438\u044f \u0442\u043e\u0440\u0440\u0435\u043d\u0442\u0430
TableColumn.header.AzProduct.info=\u0421\u0435\u0442\u044c-\u0438\u0441\u0442\u043e\u0447\u043d\u0438\u043a \u0442\u043e\u0440\u0440\u0435\u043d\u0442\u0430
TableColumn.header.health.info=\u041f\u043e\u043a\u0430\u0437\u044b\u0432\u0430\u0435\u0442 \u0441\u043e\u0441\u0442\u043e\u044f\u043d\u0438\u0435 \u0441\u043e\u0435\u0434\u0438\u043d\u0435\u043d\u0438\u0439 \u0441 \u0443\u0437\u043b\u0430\u043c\u0438 \u043e\u043a\u0440\u0443\u0436\u0435\u043d\u0438\u044f
-TableColumn.header.Info.info=\u041a\u043d\u043e\u043f\u043a\u0430 \u0434\u043b\u044f \u043f\u043e\u043a\u0430\u0437\u0430 \u0441\u0442\u0440\u0430\u043d\u0438\u0446\u044b \u043f\u043e\u0434\u0440\u043e\u0431\u043d\u043e\u0441\u0442\u0435\u0439 \u043a\u043e\u043d\u0442\u0435\u043d\u0442\u0430 Vuze
TableColumn.header.maxuploads.info=\u041d\u0430\u0438\u0431\u043e\u043b\u044c\u0448\u0435\u0435 \u043a\u043e\u043b\u0438\u0447\u0435\u0441\u0442\u0432\u043e \u0443\u0437\u043b\u043e\u0432, \u043a\u043e\u0442\u043e\u0440\u044b\u043c \u0432\u043e\u0437\u043c\u043e\u0436\u043d\u0430 \u043e\u0434\u043d\u043e\u0432\u0440\u0435\u043c\u0435\u043d\u043d\u0430\u044f \u0440\u0430\u0437\u0434\u0430\u0447\u0430
TableColumn.header.name.info=\u0418\u043c\u044f \u0442\u043e\u0440\u0440\u0435\u043d\u0442\u0430
TableColumn.header.unopened.info=\u0418\u043d\u0434\u0438\u043a\u0430\u0442\u043e\u0440, \u043f\u043e\u043a\u0430\u0437\u044b\u0432\u0430\u044e\u0449\u0438\u0439, \u0431\u044b\u043b \u043b\u0438 \u0442\u043e\u0440\u0440\u0435\u043d\u0442 \u043e\u0442\u043a\u0440\u044b\u0442 (\u0432\u043e\u0441\u043f\u0440\u043e\u0438\u0437\u0432\u0435\u0434\u0451\u043d)
-TableColumn.header.Quality.info=\u041a\u0430\u0447\u0435\u0441\u0442\u0432\u043e \u043a\u043e\u043d\u0442\u0435\u043d\u0442\u0430 (HD, SD)
-TableColumn.header.RateIt.info=\u0412\u043e\u0437\u043c\u043e\u0436\u043d\u043e\u0441\u0442\u044c \u043e\u0446\u0435\u043d\u0438\u0442\u044c \u043a\u043e\u043d\u0442\u0435\u043d\u0442
TableColumn.header.savepath.info=\u0426\u0435\u043b\u0435\u0432\u0430\u044f \u043f\u0430\u043f\u043a\u0430 \u0434\u043b\u044f \u0434\u0430\u043d\u043d\u044b\u0445 \u0442\u043e\u0440\u0440\u0435\u043d\u0442\u0430
TableColumn.header.SeedingRank.info=\u041e\u0446\u0435\u043d\u043e\u0447\u043d\u043e\u0435 \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u0435 \u0432\u0430\u0436\u043d\u043e\u0441\u0442\u0438 \u0442\u043e\u0440\u0440\u0435\u043d\u0442\u0430 \u0432 \u043f\u043b\u0430\u043d\u0435 \u0440\u0430\u0437\u0434\u0430\u0447\u0438. \u0427\u0435\u043c \u0432\u044b\u0448\u0435 \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u0435, \u0442\u0435\u043c \u0431\u043e\u043b\u0435\u0435 \u0442\u043e\u0440\u0440\u0435\u043d\u0442 \u043d\u0443\u0436\u0434\u0430\u0435\u0442\u0441\u044f \u0432 \u0440\u0430\u0437\u0434\u0430\u0447\u0435.
TableColumn.header.shareRatio.info=\u041e\u0442\u043d\u043e\u0448\u0435\u043d\u0438\u0435 \u0440\u043e\u0437\u0434\u0430\u043d\u043d\u044b\u0445 \u0434\u0430\u043d\u043d\u044b\u0445 \u043a \u043f\u0440\u0438\u043d\u044f\u0442\u044b\u043c \u0434\u0430\u043d\u043d\u044b\u043c.
@@ -2830,7 +2732,6 @@ TableColumn.header.upspeed.info=\u0422\u0435\u043a\u0443\u0449\u0430\u044f \u044
TableColumn.header.downspeed.info=\u0422\u0435\u043a\u0443\u0449\u0430\u044f \u0441\u043a\u043e\u0440\u043e\u0441\u0442\u044c \u043f\u0440\u0438\u0451\u043c\u0430
TableColumn.header.up.info=\u0422\u0435\u043a\u0443\u0449\u0438\u0439 \u043e\u0431\u044a\u0451\u043c \u0434\u0430\u043d\u043d\u044b\u0445, \u0440\u043e\u0437\u0434\u0430\u043d\u043d\u044b\u0445 \u0443\u0437\u043b\u0430\u043c
TableColumn.header.down.info=\u0422\u0435\u043a\u0443\u0449\u0438\u0439 \u043e\u0431\u044a\u0451\u043c \u0434\u0430\u043d\u043d\u044b\u0445, \u043f\u0440\u0438\u043d\u044f\u0442\u044b\u0445 \u043e\u0442 \u0434\u0440\u0443\u0433\u0438\u0445 \u0443\u0437\u043b\u043e\u0432
-TableColumn.header.videoLength.info=\u041f\u0440\u043e\u0434\u043e\u043b\u0436\u0438\u0442\u0435\u043b\u044c\u043d\u043e\u0441\u0442\u044c \u0432\u0438\u0434\u0435\u043e
TableColumn.header.ProgressETA.info=\u0421\u043e\u0441\u0442\u043e\u044f\u043d\u0438\u0435, \u0433\u043e\u0442\u043e\u0432\u043d\u043e\u0441\u0442\u044c, \u043e\u0441\u0442\u0430\u0432\u0448\u0435\u0435\u0441\u044f \u0432\u0440\u0435\u043c\u044f \u0438 \u0441\u043a\u043e\u0440\u043e\u0441\u0442\u044c \u043f\u0440\u0438\u0451\u043c\u0430 \u0432 \u043e\u0434\u043d\u043e\u043c \u0441\u0442\u043e\u043b\u0431\u0446\u0435.
TableColumn.header.eta.info=\u041f\u0440\u0438\u0431\u043b\u0438\u0437\u0438\u0442\u0435\u043b\u044c\u043d\u043e\u0435 \u0432\u0440\u0435\u043c\u044f \u0437\u0430\u0432\u0435\u0440\u0448\u0435\u043d\u0438\u044f \u0437\u0430\u0433\u0440\u0443\u0437\u043a\u0438
Pieces.column.#.info=\u041d\u043e\u043c\u0435\u0440 \u0447\u0430\u0441\u0442\u0438
@@ -2857,89 +2758,3 @@ ColumnSetup.filters=\u0424\u0438\u043b\u044c\u0442\u0440\u044b
ColumnSetup.availcolumns=\u0414\u043e\u0441\u0442\u0443\u043f\u043d\u044b\u0435 \u0441\u0442\u043e\u043b\u0431\u0446\u044b (%1)
ColumnSetup.availcolumns.filteredby=\u0414\u043e\u0441\u0442\u0443\u043f\u043d\u044b\u0435 \u0441\u0442\u043e\u043b\u0431\u0446\u044b (%1, \u0444\u0438\u043b\u044c\u0442\u0440 \u043f\u043e %2)
ConfigView.label.maxStalledSeeding=\u041c\u0430\u043a\u0441. \u00ab\u0437\u0430\u0433\u043b\u043e\u0445\u0448\u0438\u0445\u00bb [0: \u043d\u0435 \u043e\u0433\u0440\u0430\u043d\u0438\u0447\u0435\u043d\u043e]
-# The remaining keys were not in MessagesBundle.properties
-=
-Main.download.state.downloading=\u0437\u0430\u0433\u0440\u0443\u0437\u043a\u0430
-MyTorrentsView.sendto=\u041e\u0442\u043f\u0440\u0430\u0432\u0438\u0442\u044c
-ConfigView.section.logging.log1component=\u041f\u0440\u043e\u0442\u043e\u043a\u043e\u043b\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u0435 \u043e\u0431\u0449\u0435\u043d\u0438\u044f \u0441 \u0440\u0430\u0437\u0434\u0430\u044e\u0449\u0438\u043c\u0438
-ConfigView.label.onlyafter50=(\u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u044c, \u0435\u0441\u043b\u0438 \u0441\u043e\u043e\u0442\u043d\u043e\u0448\u0435\u043d\u0438\u0435 \u0440\u0430\u0437\u0434\u0430\u0447\u0438 \u043c\u0435\u043d\u0435\u0435 0.5)
-swt.update.window.restartLater=\u041f\u0435\u0440\u0435\u0437\u0430\u043f\u0443\u0441\u0442\u0438\u0442\u044c \u043f\u043e\u0437\u0436\u0435
-swt.update.window.title=\u041e\u0431\u043d\u043e\u0432\u043b\u0435\u043d\u0438\u0435 Vuze
-sendTorrent.one.email.body=\u0414\u043b\u044f \u0441\u043a\u0430\u0447\u0438\u0432\u0430\u043d\u0438\u044f "%1", \u043f\u0440\u043e\u0441\u0442\u043e \u043a\u043b\u0438\u043a\u043d\u0438 \u043d\u0430 \u0441\u0441\u044b\u043b\u043a\u0443 \u043d\u0438\u0436\u0435:\n\n%2\n\n"%1" \u043d\u0430\u0447\u043d\u0451\u0442 \u043a\u0430\u0447\u0430\u0442\u044c, \u0435\u0441\u043b\u0438 \u0443 \u0442\u0435\u0431\u044f \u0443\u0436\u0435 \u0435\u0441\u0442\u044c Azureus. \u0415\u0441\u043b\u0438 \u043d\u0435\u0442 \u0435\u0449\u0435, \u0432\u0435\u0431-\u0441\u0442\u0440\u0430\u043d\u0438\u0446\u0430 \u043e\u0431\u044a\u044f\u0441\u043d\u0438\u0442 \u043a\u0430\u043a \u0443\u0441\u0442\u0430\u043d\u043e\u0432\u0438\u0442\u044c \u0435\u0433\u043e.
-sendTorrent.finish.title=\u0417\u0430\u0432\u0435\u0440\u0448\u0435\u043d\u043e
-Main.download.state.waiting=\u0432 \u043e\u0436\u0438\u0434\u0430\u043d\u0438\u0438
-ConfigView.section.file.check_piece_limit.explain=\u0415\u0441\u043b\u0438 \u0441\u043a\u043e\u0440\u043e\u0441\u0442\u0438 \u043f\u0440\u043e\u0446\u0435\u0441\u0441\u043e\u0440\u0430 \u0434\u043b\u044f \u043f\u043e\u0434\u0441\u0447\u0451\u0442\u0430 \u043f\u0440\u043e\u0432\u0435\u0440\u043e\u0447\u043d\u043e\u0439 \u0441\u0443\u043c\u043c\u044b "\u043d\u0430 \u043b\u0435\u0442\u0443" \u043d\u0435 \u0445\u0432\u0430\u0442\u0430\u0435\u0442 (\u043f\u0440\u0438 \u043c\u043d\u043e\u0433\u043e\u043a\u0440\u0430\u0442\u043d\u043e\u043c \u043f\u043e\u043a\u0430\u0437\u0430\u0442\u0435\u043b\u0435 \u0447\u0430\u0441\u0442\u0435\u0439), \u043e\u0433\u0440\u0430\u043d\u0438\u0447\u0435\u043d\u0438\u0435 \u0434\u043b\u0438\u043d\u043d\u044b \u043e\u0447\u0435\u0440\u0435\u0434\u0438 \u043f\u0440\u043e\u0432\u0435\u0440\u043a\u0438 \u043c\u043e\u0436\u0435\u0442 \u043f\u043e\u043d\u0438\u0437\u0438\u0442\u044c \u043e\u0431\u044a\u0435\u043c \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u0435\u043c\u043e\u0439 \u043f\u0430\u043c\u044f\u0442\u0438
-MainWindow.dht.status.running=\u0412\u044b\u043f\u043e\u043b\u043d\u044f\u0435\u0442\u0441\u044f
-ConfigView.label.serverportrange=\u0414\u0438\u0430\u043f\u0430\u0437\u043e\u043d \u0432\u0445\u043e\u0434\u043d\u044b\u0445 \u043f\u043e\u0440\u0442\u043e\u0432
-ConfigView.label.oldpollingstyle=\u0410\u043b\u044c\u0442\u0435\u0440\u043d\u0430\u0442\u0438\u0432\u043d\u044b\u0439 \u0440\u0435\u0436\u0438\u043c \u0441\u0435\u0442\u0438 - \u043f\u043e\u0432\u044b\u0448\u0435\u043d\u043d\u0430\u044f \u043d\u0430\u0433\u0440\u0443\u0437\u043a\u0430 \u0426\u041f\u0423, \u043d\u043e \u043c\u043e\u0436\u0435\u0442 \u043f\u043e\u043c\u043e\u0447\u044c \u043f\u0440\u0438 \u0447\u0430\u0441\u0442\u043e\u043c \u0440\u0430\u0437\u0441\u043e\u0435\u0434\u0438\u043d\u0435\u043d\u0438\u0438
-swt.update.window.header=\u041d\u0435\u043e\u0431\u0445\u043e\u0434\u0438\u043c\u043e \u043e\u0431\u043d\u043e\u0432\u0438\u0442\u044c \u0441\u043b\u0435\u0434\u0443\u044e\u0449\u0438\u0435 \u043a\u043e\u043c\u043f\u043e\u043d\u0435\u043d\u0442\u044b :
-Main.download.state.allocating=\u0440\u0435\u0437\u0435\u0440\u0432\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u0435
-sendTorrent.destination.byEmail=E-mail'\u043e\u043c
-swt.update.window.close=\u0417\u0430\u043a\u0440\u044b\u0442\u044c
-swt.update.window.columns.size=\u0420\u0430\u0437\u043c\u0435\u0440
-ConfigView.section.connection.advanced.IPTOS.tooltip=\u041d\u0430\u0441\u0442\u0440\u043e\u0438\u0442\u044c \u043a\u043b\u0430\u0441\u0441 \u0442\u0440\u0430\u0444\u0444\u0438\u043a\u0430 / \u0442\u0438\u043f \u0441\u0435\u0440\u0432\u0438\u0441\u0430 (TOS) \u0432 \u0437\u0430\u0433\u043e\u043b\u043e\u0432\u043a\u0435 IP \u0434\u043b\u044f \u0438\u0441\u0445\u043e\u0434\u044f\u0449\u0438\u0445 \u043f\u0430\u043a\u0435\u0442\u043e\u0432.\nVuze \u043e\u0441\u0442\u0430\u0432\u043b\u044f\u0435\u0442 \u044d\u0442\u043e\u0442 \u043f\u0430\u0440\u0430\u043c\u0435\u0442\u0440 \u043f\u043e \u0443\u043c\u043e\u043b\u0447\u0430\u043d\u0438\u044e \u043d\u0435\u043d\u0430\u0441\u0442\u0440\u043e\u0435\u043d\u043d\u044b\u043c, \u0447\u0442\u043e \u043e\u0437\u043d\u0430\u0447\u0430\u0435\u0442 \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u044f \u043f\u043e \u0443\u043c\u043e\u043b\u0447\u0430\u043d\u0438\u044e \u0442\u043e\u0439 \u043e\u043f\u0435\u0440\u0430\u0446\u0438\u043e\u043d\u043d\u043e\u0439 \u0441\u0438\u0441\u0442\u0435\u043c\u044b, \u0432 \u043a\u043e\u0442\u043e\u0440\u043e\u0439 \u0432\u044b \u0440\u0430\u0431\u043e\u0442\u0430\u0435\u0442\u0435.\n\u041d\u0430\u043f\u0440\u0438\u043c\u0435\u0440:\n0x02 \u0434\u043b\u044f IPTOS_LOWCOST\n0x04 \u0434\u043b\u044f IPTOS_RELIABILITY\n0x08 \u0434\u043b\u044f IPTOS_THROUGHPUT\n0x10 \u0434\u043b\u044f IPTOS_LOWDELAY\n\u041f\u0440\u0438\u043c\u0435\u0447\u0430\u043d\u0438\u0435: \u0421\u0435\u0442\u0435\u0432\u0430\u044f \u0440\u0435\u0430\u043b\u0438\u0437\u0430\u0446\u0438\u044f \u043c\u043e\u0436\u0435\u0442 \u0438\u0433\u043d\u043e\u0440\u0438\u0440\u043e\u0432\u0430\u0442\u044c \u044d\u0442\u043e \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u0435, \u0442\u0430\u043a\u0438\u043c \u043e\u0431\u0440\u0430\u0437\u043e\u043c, \u044d\u0442\u043e\u0442 \u043f\u0430\u0440\u0430\u043c\u0435\u0442\u0440 \u0441\u0438\u043b\u044c\u043d\u043e \u0437\u0430\u0432\u0438\u0441\u0438\u0442 \u043e\u0442 \u041e\u0421 \u0438 \u0432\u0435\u0440\u0441\u0438\u0439 JRE.
-IrcView.title.full=\u043f\u043e\u043b\u043d\u043e\u0441\u0442\u044c\u044e
-ConfigView.section.file.write_block_limit.explain=\u0415\u0441\u043b\u0438 \u0441\u043a\u043e\u0440\u043e\u0441\u0442\u044c \u0437\u0430\u043f\u0438\u0441\u0438 \u043d\u0430 \u0434\u0438\u0441\u043a \u043c\u0435\u0434\u043b\u0435\u043d\u043d\u0435\u0439 \u0441\u043a\u043e\u0440\u043e\u0441\u0442\u0438 \u0437\u0430\u0433\u0440\u0443\u0437\u043a\u0438 (\u043c\u043d\u043e\u0433\u043e \u043a\u0440\u0430\u0441\u043d\u044b\u0445 \u0431\u043b\u043e\u043a\u043e\u0432 \u0432 \u043f\u043e\u043a\u0430\u0437\u0430\u0442\u0435\u043b\u0435), \u043e\u0433\u0440\u0430\u043d\u0438\u0447\u0435\u043d\u0438\u0435 \u0434\u043b\u0438\u043d\u043d\u044b \u043e\u0447\u0435\u0440\u0435\u0434\u0438 \u043c\u043e\u0436\u0435\u0442 \u043f\u043e\u043d\u0438\u0437\u0438\u0442\u044c \u043e\u0431\u044a\u0435\u043c \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u0435\u043c\u043e\u0439 \u043f\u0430\u043c\u044f\u0442\u0438
-ConfigView.section.proxy.description=\u0420\u0430\u0437\u0440\u0435\u0448\u0438\u0442\u044c \u043f\u0440\u043e\u043a\u0441\u0438\u043c\u0430\u0446\u0438\u044e \u0442\u0440\u0435\u043a\u0435\u0440\u0430 \u0438 \u043a\u043e\u043c\u043c\u0443\u043d\u0438\u043a\u0430\u0446\u0438\u0438 \u043f\u0440\u0438\u0451\u043c\u0430.\n\u042d\u0442\u043e \u0442\u0440\u0435\u0431\u0443\u0435\u0442 SOCKS-\u0441\u043e\u0432\u043c\u0435\u0441\u0442\u0438\u043c\u043e\u0433\u043e \u043f\u0440\u043e\u043a\u0441\u0438-\u0441\u0435\u0440\u0432\u0435\u0440\u0430. \n\u0414\u043b\u044f \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u043d\u0438\u044f \u0441\u043b\u0435\u0434\u0443\u0435\u0442 \u043f\u0435\u0440\u0435\u0437\u0430\u043f\u0443\u0441\u0442\u0438\u0442\u044c Azureus.
-swt.update.window.columns.version=\u0412\u0435\u0440\u0441\u0438\u044f
-swt.update.window.cancel=\u041e\u0442\u043c\u0435\u043d\u0438\u0442\u044c
-ConfigView.section.style.SeparateFilesViewRenameRetarget=\u041f\u043e\u043a\u0430\u0437\u044b\u0432\u0430\u0442\u044c \u0440\u0430\u0437\u0434\u0435\u043b\u0438\u0442\u0435\u043b\u044c \u043c\u0435\u0436\u0434\u0443 "\u041f\u0435\u0440\u0435\u0438\u043c\u0435\u043d\u043e\u0432\u0430\u0442\u044c" \u0438 "\u041f\u0435\u0440\u0435\u043d\u0430\u043f\u0440\u0430\u0432\u0438\u0442\u044c" \u0432 \u043c\u0435\u043d\u044e \u043e\u043f\u0446\u0438\u0439m \u0432 \u0444\u0430\u0439\u043b\u0430\u0445 \u0442\u0430\u0431\u0443\u043b\u044f\u0446\u0438\u0438
-%2=
-MyTorrentsView.menu.sendTorrent=\u041e\u0442\u043f\u0440\u0430\u0432\u0438\u0442\u044c \u0414\u0440\u0443\u0433\u0443/\u0421\u0430\u0439\u0442\u0443..
-SystemTray.menu.startalldownloads=\u0417\u0430\u043f\u0443\u0441\u0442\u0438\u0442\u044c \u0432\u0441\u0435 \u0437\u0430\u0433\u0440\u0443\u0437\u043a\u0438
-sendTorrent.destination.title=\u041a\u0430\u043a \u0442\u044b \u0445\u043e\u0447\u0435\u0448\u044c \u043e\u0442\u043f\u0440\u0430\u0432\u0438\u0442\u044c %1 \u0432\u044b\u0431\u0440\u0430\u043d\u043d\u044b\u0439 \u044d\u043b\u0435\u043c\u0435\u043d\u0442(\u044b)?
-sendTorrent.multi.email.body.eachTorrent=\u0414\u043b\u044f \u0441\u043a\u0430\u0447\u0438\u0432\u0430\u043d\u0438\u044f "%1", \u043f\u0440\u043e\u0441\u0442\u043e \u043a\u043b\u0438\u043a\u043d\u0438 \u043d\u0430 \u0441\u0441\u044b\u043b\u043a\u0443 \u043d\u0438\u0436\u0435:\n\n%2\n\n
-ConfigView.label.serverporthigh=\u0421\u0430\u043c\u044b\u0439 \u0432\u044b\u0441\u043e\u043a\u0438\u0439 \u043f\u043e\u0440\u0442
-TorrentOptionsView.param.max.uploads.when.seeding.enable=\u0410\u043b\u044c\u0442\u0435\u0440\u043d\u0430\u0442\u0438\u0432\u0430 \u0441\u043b\u043e\u0442\u043e\u0432 \u043e\u0442\u0434\u0430\u0447\u0438 \u043a\u043e\u0433\u0434\u0430 \u0440\u0430\u0437\u0434\u0430\u0451\u0442\u0435
-sendTorrent.finish.button.toClipboard=\u041a\u043e\u043f\u0438\u0440\u043e\u0432\u0430\u0442\u044c \u0432 \u0431\u0443\u0444\u0435\u0440 \u043e\u0431\u043c\u0435\u043d\u0430
-swt.update.window.status.restartNeeded=\u0422\u0440\u0435\u0431\u0443\u0435\u0442\u0441\u044f \u043f\u0435\u0440\u0435\u0437\u0430\u043f\u0443\u0441\u043a!
-ConfigView.label.serverportlow=\u0421\u0430\u043c\u044b\u0439 \u043d\u0438\u0436\u043d\u0438\u0439 \u043f\u043e\u0440\u0442
-swt.update.window.status.done=Ok
-configureWizard.nat.serverhigh=\u0412\u044b\u0441\u0448\u0438\u0439 \u043f\u043e\u0440\u0442
-sendTorrent.title=\u041e\u0442\u043f\u0440\u0430\u0432\u0438\u0442\u044c \u0414\u0440\u0443\u0433\u0443/\u0421\u0442\u0440\u0430\u043d\u0438\u0446\u0435
-ConfigView.section.proxy.description2=\u0420\u0430\u0437\u0440\u0435\u0448\u0438\u0442\u044c \u043f\u0440\u043e\u043a\u0441\u0438\u043c\u0430\u0446\u044e \u043a\u043e\u043c\u043c\u0443\u043d\u0438\u043a\u0430\u0446\u0438\u0438 \u0442\u0440\u0435\u043a\u0435\u0440\u0430.\n\u0414\u043b\u044f \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u043d\u0438\u044f \u0441\u043b\u0435\u0434\u0443\u0435\u0442 \u043f\u0435\u0440\u0435\u0437\u0430\u043f\u0443\u0441\u0442\u0438\u0442\u044c Azureus.
-sendTorrent.finish.byEmail=\u041a\u043e\u043f\u0438\u0440\u043e\u0432\u0430\u0442\u044c \u0442\u0435\u043a\u0441\u0442 \u0440\u0430\u0441\u043f\u043e\u043b\u043e\u0436\u0435\u043d\u043d\u044b\u0439 \u043d\u0438\u0436\u0435 \u0432 e-mail:
-ConfigView.section.logging.log4component=\u041f\u0440\u043e\u0442\u043e\u043a\u043e\u043b\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u0435 \u0441\u0435\u0440\u0432\u0435\u0440\u0430 \u043f\u0440\u0438\u0451\u043c\u0430
-ConfigView.connection.group.proxy=\u041d\u0430\u0441\u0442\u0440\u043e\u0439\u043a\u0438 \u043f\u0440\u043e\u043a\u0441\u0438
-LocaleUtil.column.filename=\u0418\u043c\u044f \u0424\u0430\u0439\u043b\u0430
-ConfigView.label.allocatenewfiles=\u0420\u0430\u0441\u043f\u0440\u0435\u0434\u0435\u043b\u0438\u0442\u044c \u043d\u043e\u0432\u044b\u0439 \u0444\u0430\u0439\u043b
-sendTorrent.multi.email.body.bottom=\u041e\u043d\u0438 \u043d\u0430\u0447\u043d\u0443\u0442 \u043a\u0430\u0447\u0430\u0442\u044c \u0435\u0441\u043b\u0438 \u0443 \u0442\u0435\u0431\u044f \u0443\u0436\u0435 \u0435\u0441\u0442\u044c Azureus. \u0415\u0441\u043b\u0438 \u043d\u0435\u0442 \u0435\u0449\u0435, \u0432\u0435\u0431-\u0441\u0442\u0440\u0430\u043d\u0438\u0446\u0430 \u043e\u0431\u044a\u044f\u0441\u043d\u0438\u0442 \u043a\u0430\u043a \u0443\u0441\u0442\u0430\u043d\u043e\u0432\u0438\u0442\u044c \u0435\u0433\u043e.
-configureWizard.nat.serverlow=\u041d\u0438\u0437\u0448\u0438\u0439 \u043f\u043e\u0440\u0442
-swt.update.window.quit=\u0412\u044b\u0445\u043e\u0434
-SystemTray.menu.stopalldownloads=\u041e\u0441\u0442\u0430\u043d\u043e\u0432\u0438\u0442\u044c \u0432\u0441\u0435 \u0437\u0430\u0433\u0440\u0443\u0437\u043a\u0438
-Main.download.state.error=o\u0448\u0438\u0431\u043a\u0430
-ConfigView.label.bindip.info=\u041d\u0430 \u043f\u0440\u0438\u043c\u0435\u0440, '192.168.1.2' or 'eth0' (\u0442\u0435\u043a\u0443\u0449\u0435\u0435: %1)
-sendTorrent.finish.byHTML=\u041a\u043e\u043f\u0438\u0440\u043e\u0432\u0430\u0442\u044c \u0442\u0435\u043a\u0441\u0442 \u0440\u0430\u0441\u043f\u043e\u043b\u043e\u0436\u0435\u043d\u043d\u044b\u0439 \u043d\u0438\u0436\u0435 \u0432 \u0442\u0432\u043e\u044e \u0441\u0442\u0440\u0430\u043d\u0438\u0446\u0443:
-ConfigView.label.maxclients=\u041c\u0430\u043a\u0441\u0438\u043c\u0430\u043b\u044c\u043d\u043e\u0435 \u043a\u043e\u043b\u0438\u0447\u0435\u0441\u0442\u0432\u043e \u0441\u043e\u0435\u0434\u0438\u043d\u0435\u043d\u0438\u0439 \u043a \u043a\u0430\u0436\u0434\u043e\u043c\u0443 torrent (0 : \u0431\u0435\u0441\u043a\u043e\u043d\u0435\u0447\u043d\u043e)
-ConfigView.section.connection.advanced.IPTOS=\u0442\u0438\u043f \u0441\u0435\u0440\u0432\u0438\u0441\u0430 (TOS) \u0438\u0441\u0445\u043e\u0434\u044f\u0449\u0438\u0445 \u043f\u0430\u043a\u0435\u0442\u043e\u0432 [see http://www.azureuswiki.com/index.php/AdvancedNetworkSettings]
-window.welcome.title.2304=\u0414\u043e\u0431\u0440\u043e \u043f\u043e\u0436\u0430\u043b\u043e\u0432\u0430\u0442\u044c \u0432 Vuze 2.3.0.4
-ConfigView.section.logging.log3type=\u041e\u0448\u0438\u0431\u043a\u0438
-window.welcome.version=2.5.0.0
-ConfigView.label.stopRatio=\u041e\u0441\u0442\u0430\u043d\u043e\u0432\u043a\u0430 \u0440\u0430\u0437\u0434\u0430\u0447\u0438 \u043f\u0440\u0438 \u0434\u043e\u0441\u0442\u0438\u0433\u043d\u0443\u0442\u043e\u043c \u0444\u0430\u043a\u0442\u043e\u0440\u0435 \u0440\u0430\u0437\u0434\u0430\u0447
-sendTorrent.finish.button.startEMail=\u0421\u043e\u0437\u0434\u0430\u0442\u044c E-Mail
-ConfigView.section.style.sortDefaultAscending=\u041f\u043e \u0443\u043c\u043e\u043b\u0447\u0430\u043d\u0438\u044e, \u0441\u0442\u043e\u043b\u0431\u0446\u044b \u0442\u0430\u0431\u043b\u0438\u0446\u044b \u0441\u043e\u0440\u0442\u0438\u0440\u0443\u044e\u0442\u0441\u044f \u043f\u043e \u0432\u043e\u0437\u0440\u0430\u0441\u0442\u0430\u043d\u0438\u044e
-swt.update.window.ok=\u041e\u0431\u043d\u043e\u0432\u0438\u0442\u044c
-swt.update.window.restart=\u041f\u0435\u0440\u0435\u0437\u0430\u043f\u0443\u0441\u0442\u0438\u0442\u044c
-ConfigView.connection.group.advanced=\u0414\u043e\u043f\u043e\u043b\u043d\u0438\u0442\u0435\u043b\u044c\u043d\u044b\u0435 \u043d\u0430\u0441\u0442\u0440\u043e\u0439\u043a\u0438 \u0441\u0435\u0442\u0438
-MainWindow.about.internet.featurerequests=\u0437\u0430\u043f\u0440\u043e\u0441\u0438\u0442\u044c \u0434\u043e\u043f\u043e\u043b\u043d\u0435\u043d\u0438\u0435 \u043a \u043f\u0440\u043e\u0433\u0440\u0430\u043c\u043c\u0435
-sendTorrent.one.email.subject=\u042f \u0440\u0435\u043a\u043e\u043c\u043d\u0435\u0434\u0443\u044e \u0442\u0435\u0431\u0435 \u0441\u043a\u0430\u0447\u0430\u0442\u044c %1
-ConfigView.section.style.colorScheme=\u0421\u0445\u0435\u043c\u0430 \u0446\u0432\u0435\u0442\u043e\u0432\n - \u041a\u043e\u043d\u0441\u043e\u043b\u044c \u0434\u043e\u043b\u0436\u043d\u0430 \u0431\u044b\u0442\u044c \u0437\u0430\u043a\u0440\u044b\u0442\u0430
-sendTorrent.multi.email.subject=\u042f \u0440\u0435\u043a\u043e\u043c\u043d\u0435\u0434\u0443\u044e \u0442\u0435\u0431\u0435 \u0441\u043a\u0430\u0447\u0430\u0442\u044c %1
-Main.download.state.checking=\u043f\u0440\u043e\u0432\u0435\u0440\u043a\u0430
-ConfigView.label.slowconnect=
-swt.update.window.status.failed=\u041d\u0435 \u0443\u0434\u0430\u0435\u0442\u0441\u044f
-ConfigView.section.file.write_block_limit=\u041c\u0430\u043a\u0441. \u0434\u043b\u0438\u043d\u0430 \u043e\u0447\u0435\u0440\u0435\u0434\u0438 \u0431\u043b\u043e\u043a\u043e\u0432 \u0434\u043b\u044f \u0437\u0430\u043f\u0438\u0441\u0438\n[0: \u0431\u0435\u0437 \u043e\u0433\u0440\u0430\u043d\u0438\u0447\u0435\u043d\u0438\u044f. \u0420\u0430\u0437\u043c\u0435\u0440 \u0431\u043b\u043e\u043a\u0430 \u0432 %1
-ConfigView.label.override=(\u041f\u0435\u0440\u0435\u043a\u0440\u044b\u0432\u0430\u0435\u0442 \u0432\u0441\u0435 \u0434\u0440\u0443\u0433\u0438\u0435 \u043f\u0440\u0430\u0432\u0438\u043b\u0430)
-MyTorrentsView.sendto.info=\u041e\u0442\u043f\u0440\u0430\u0432\u0438\u0442\u044c \u0434\u0440\u0443\u0433\u0443 \u0438\u043d\u0444\u043e \u043e \u0444\u0430\u0439\u043b\u0435
-ConfigView.label.announceport.tooltip=\u0418\u043d\u0444\u043e\u0440\u043c\u0438\u0440\u043e\u0432\u0430\u0442\u044c \u0442\u0440\u0435\u043a\u0435\u0440 \u043e \u0434\u0440\u0443\u0433\u043e\u043c \u043f\u043e\u0440\u0442\u0435, \u043a\u043e\u0442\u043e\u0440\u044b\u0439 \u0432\u044b \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u0435\u0442\u0435. \u041e\u0441\u0442\u0430\u0432\u044c\u0442\u0435 \u043f\u0443\u0441\u0442\u044b\u043c, \u0447\u0442\u043e\u0431\u044b \u043d\u0435 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u044c \u044d\u0442\u0443 \u0432\u043e\u0437\u043c\u043e\u0436\u043d\u043e\u0441\u0442\u044c.
-swt.update.window.status.downloading=\u0421\u043a\u0430\u0447\u0438\u0432\u0430\u0435\u0442\u0441\u044f
-ConfigView.connection.group.advanced.tooltip=http://www.azureuswiki.com/index.php/AdvancedNetworkSettings
-ConfigView.section.logging.log0component=\u041e\u0431\u0449\u0435\u0435 \u043f\u0440\u043e\u0442\u043e\u043a\u043e\u043b\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u0435
-swt.update.window.columns.install=\u0423\u0441\u0442\u0430\u043d\u043e\u0432\u0438\u0442\u044c
-sendTorrent.destination.byHTML=blog'\u043e\u043c, \u0438\u043b\u0438 \u0432\u0435\u0431 \u0441\u0442\u0440\u0430\u043d\u0438\u0446\u043e\u0439
-iconBar.sendTorrent.tooltip=\u041e\u0442\u043f\u0440\u0430\u0432\u043a\u0430 \u0432\u044b\u0431\u0440\u0430\u043d\u043d\u044b\u0445 \u0447\u0435\u0440\u0435\u0437 E-Mail/\u0421\u0430\u0439\u0442
-ConfigView.section.logging.log2component=\u041f\u0440\u043e\u0442\u043e\u043a\u043e\u043b\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u0435 \u043a\u043b\u0438\u0435\u043d\u0442\u043e\u0432 \u0442\u0440\u0435\u043a\u0435\u0440\u0430
-swt.update.window.columns.name=\u041d\u0430\u0437\u0432\u0430\u043d\u0438\u0435
-swt.update.window.status.restartMaybeNeeded=\u041c\u043e\u0436\u0435\u0442 \u043f\u043e\u0442\u0440\u0435\u0431\u043e\u0432\u0430\u0442\u044c\u0441\u044f \u043f\u0435\u0440\u0435\u0437\u0430\u043f\u0443\u0441\u043a
-deletedata.message2=\n\u0412\u044b \u0443\u0432\u0435\u0440\u0435\u043d\u043d\u044b \u0432 \u0441\u0432\u043e\u0451\u043c \u043d\u0430\u043c\u0435\u0440\u0435\u043d\u0438\u0438?
-Main.download.state.stopped=\u043e\u0441\u0442\u0430\u043d\u043e\u0432\u043b\u0435\u043d\u043e
diff --git a/org/gudy/azureus2/internat/MessagesBundle_sk_SK.properties b/org/gudy/azureus2/internat/MessagesBundle_sk_SK.properties
index 7632a38..209a04d 100644
--- a/org/gudy/azureus2/internat/MessagesBundle_sk_SK.properties
+++ b/org/gudy/azureus2/internat/MessagesBundle_sk_SK.properties
@@ -1,3 +1,4 @@
+#There is a plugin to help with internationalizing these bundles at http://azureus.sourceforge.net/plugin_list.php
MainWindow.menu.file.open.torrent=.torrent s\u00fabor
Main.parameter.usage=Pou\u017eitie : java org.gudy.azureus2.cl.Main [parametre] "s\u00fabor.torrent" "cie\u013eov\u00e1 zlo\u017eka"
Main.parameter.maxUploads=Max. po\u010det simult\u00e1lnnych uploadov
@@ -360,7 +361,6 @@ MyTorrentsView.menu.removeand.deletedata=Zmaza\u0165 &d\u00e1ta
MyTorrentsView.menu.removeand.deleteboth=Zmaza\u0165 .torrent &aj d\u00e1ta
deletedata.title=!!! Upozornenie !!!
deletedata.message1=Chyst\u00e1te sa zmaza\u0165 D\u00c1TA z :\n
-deletedata.message2=\nNaozaj chcete pokra\u010dova\u0165?
MainWindow.menu.file.configure=Sprievodca &nastaven\u00edm
configureWizard.title=Sprievodca nastaven\u00edm
configureWizard.welcome.title=Vitajte v Sprievodcovi nastaven\u00edm
@@ -490,7 +490,6 @@ ConfigView.section.tracker=Tracker
ConfigView.section.tracker.pollinterval=Interval medzi po\u017eiadavkami klienta Trackeru (sek)
ConfigView.section.tracker.publishenable=Publikova\u0165 detaily o Torrentoch v "<tracker_url>"
ConfigView.section.tracker.ip=Verejn\u00e1 IP adresa Trackera
-MainWindow.menu.help.faq=&Wiki FAQ
ConfigView.section.style.enableXPStyle=Povoli\u0165 XP \u0161t\u00fdl [nutn\u00fd re\u0161tart]
ConfigView.section.tracker.checkip=Zisti\u0165 verejn\u00fa IP adresu...
ipCheckerWizard.title=Sprievodca kontrolou IP adresy
@@ -522,7 +521,6 @@ splash.openViews=Otv\u00e1ranie z\u00e1lo\u017eiek
splash.plugin=Na\u010d\u00edtanie pluginu :
configureWizard.nat.tooManyPorts=Prive\u013ea portov na testovanie (maxim\u00e1lne 9)
ConfigView.section.color=Farebn\u00e1 Sch\u00e9ma
-PeerSocket.unknown=Nezn\u00e1my
MyTorrentsView.menu.publish=Publikova\u0165...
MyTrackerView.status.published=Publikovan\u00fd
MyTrackerView.completed=Dokon\u010den\u00fdch
@@ -537,9 +535,15 @@ IPChecker.external.service.no-ip.description=Poskytovate\u013e dynamick\u00e9ho
ConfigView.section.tracker.publicenable=Povoli\u0165 extern\u00e9 Torrenty
ConfigView.label.playdownloadspeech=Hovori\u0165 po dokon\u010den\u00ed s\u0165ahovania
ConfigView.label.playdownloadspeech.info=Re\u010dov\u00e9 slu\u017eby moment\u00e1lne najlep\u0161ie funguj\u00fa v angli\u010dtine
+#
+# Tooltips
+#
GeneralView.label.status.pieces_available.tooltip=Zobrazuje po\u010det dostupn\u00fdch k\u00f3pi\u00ed ka\u017ed\u00e9ho dielu.\nAk je \u010d\u00edslo vpravo men\u0161ie ne\u017e 1, nie s\u00fa dostupn\u00e9 v\u0161etky diely s\u00faboru (a m\u00f4\u017eete ma\u0165 probl\u00e9m dokon\u010di\u0165 s\u0165ahovanie)
GeneralView.label.trackerurl.tooltip=Kliknut\u00edm skop\u00edrujete oznamovaciu URL do schr\u00e1nky
GeneralView.label.trackerurlopen.tooltip=Kliknut\u00edm otvor\u00edte hlavn\u00fa str\u00e1nku Trackera
+#
+# 2.0.4.4
+#
ConfigView.section.style.guiUpdate=Aktualizova\u0165 UI (pou\u017e\u00edvate\u013esk\u00e9 rozhranie) ka\u017ed\u00fdch
ConfigView.section.style.graphicsUpdate=Aktualizova\u0165 grafy ka\u017ed\u00fdch N aktualiz\u00e1ci\u00ed UI
ConfigView.section.style.reOrderDelay=Zora\u010fova\u0165 tabu\u013eky ka\u017ed\u00fdch N aktualiz\u00e1ci\u00ed UI [0: nikdy]
@@ -672,7 +676,9 @@ health.explain.yellow=znamen\u00e1, \u017ee Tracker je v poriadku, ste pripojen\
health.explain.green=znamen\u00e1, \u017ee v\u0161etko je v poriadku
ConfigView.section.style.alwaysRefreshMyTorrents=Neust\u00e1le obnovova\u0165 Moje Torrenty
ConfigView.section.style.alwaysRefreshMyTorrents.tooltip=Obnovova\u0165 okno Moje Torrenty, aj ke\u010f nie je zobrazen\u00e9 [pre niektor\u00e9 pluginy mIrc]
-ConfigView.section.style.verticaloffset=Graphics Vertical Offset (oprava GTK)
+#
+#2.0.7.0
+#
security.certtruster.title=Varovanie bezpe\u010dnostn\u00e9ho certifik\u00e1tu
security.certtruster.intro=Certifik\u00e1t bol vydan\u00fd spolo\u010dnos\u0165ou, ktorej ned\u00f4verujete
security.certtruster.resource=Zdroj:
@@ -728,6 +734,9 @@ ConfigView.section.style.dropdiraction=Pretiahnutie (Drag && Drop) zlo\u017eky
ConfigView.section.style.dropdiraction.opentorrents=Otv\u00e1ra Torrenty
ConfigView.section.style.dropdiraction.sharefolder=Zdie\u013ea zlo\u017eku
ConfigView.section.style.dropdiraction.sharefoldercontents=Zdie\u013ea obsah zlo\u017eky
+#
+# 2.0.7.x
+#
Categories.all=V\u0161etko
Categories.uncategorized=Nezaraden\u00e9
CategoryAddWindow.message=Meno novej kateg\u00f3rie
@@ -806,7 +815,6 @@ ConfigView.text.minutes=min\u00fat
ConfigView.text.neverIgnore=Nikdy neignorova\u0165
ConfigView.text.any=ak\u00fdko\u013evek
DownloadManager.error.datamissing=Chybaj\u00face d\u00e1ta
-iconBar.queue.tooltip=Fronta
MainWindow.menu.file.open.torrentforseeding=.torrent s\u00fabor (pre distrib\u00faciu)
MainWindow.menu.language.refresh=&Obnovi\u0165
ManagerItem.forced=Vyn\u00faten\u00e9
@@ -883,6 +891,9 @@ SpeedView.stats.uptime=Spusten\u00e9 (hod)
SpeedView.stats.now=Pr\u00e1ve teraz
SpeedView.stats.now.tooltip=Celkovo (Protokol)
AutoMigration.useralert=V\u00fdsledky automatickej migr\u00e1cie konfigura\u010dn\u00fdch s\u00faborov:\n\n%1\nNEPRESUNUT\u00c9 S\u00daBORY MUSIA BY\u0164 PRESUNUT\u00c9 RU\u010cNE.
+#
+# > 2.0.8.0
+#
OpenTorrentWindow.title=Otvori\u0165 Torrent(y)
OpenTorrentWindow.message=Experiment\u00e1lny
OpenTorrentWindow.addFiles=&Prida\u0165 s\u00fabory
@@ -1110,6 +1121,8 @@ MyTrackerView.badnat.info=Zdroje/Klienti, ktor\u00fdm sa nepodarilo otestova\u01
ConfigView.section.tracker.natchecktimeout=\u010casov\u00fd limit testovania (sek)
ConfigView.section.file.perf.cache.enable=Povoli\u0165 diskov\u00fa cache
ConfigView.section.file.perf.cache.size=Ve\u013ekos\u0165 cache v %1
+#Removed
+#MyTorrentsView.menu.setSpeed=Set Upload Speed
MainWindow.menu.transfers=&Prenosy
MainWindow.menu.transfers.startalltransfers=&Spusti\u0165 v\u0161etky
MainWindow.menu.transfers.stopalltransfers=&Zastavi\u0165 v\u0161etky
@@ -1193,8 +1206,6 @@ FilesView.fullpath=Pln\u00e1 cesta
FilesView.remaining=Zost\u00e1va dielov
TableColumn.header.trackername=Meno Trackera
TableColumn.header.trackername.info=Meno Trackera zalo\u017een\u00e9 na oznamovacej URL
-ConfigView.label.announceport=Nastavi\u0165 port pre Tracker
-ConfigView.label.announceport.tooltip=Informuje Tracker o rozdielnom porte namiesto toho, na ktorom po\u010d\u00fava.
ConfigView.group.override=Nastavenia
ConfigView.section.file.perf.cache.notsmallerthan=Necacheova\u0165 s\u00fabory men\u0161ie ako (v %1)
PeersView.menu.blockupload=Blokova\u0165 upload
@@ -1225,8 +1236,6 @@ ConfigView.section.connection.advanced.SO_RCVBUF=Ve\u013ekos\u0165 SO_RCVBUF [0:
ConfigView.section.connection.advanced.SO_RCVBUF.tooltip=Nastav\u00ed \u0161tandardn\u00fa hodnotu SO_RCVBUF socketu (v bajtoch), tozn. ve\u013ekos\u0165 prij\u00edmacieho okna TCP.\nVuze toto \u0161tandardne nenastavuje, pou\u017e\u00edva sa teda hodnota, ktor\u00fa nastav\u00ed OS.\nPozn.: Linux zdvojn\u00e1sob\u00ed zadan\u00fa hodnotu.
ConfigView.section.connection.advanced.SO_SNDBUF=Ve\u013ekos\u0165 SO_SNDBUF [0: pou\u017ei \u0161tandardn\u00fa hodnotu OS]
ConfigView.section.connection.advanced.SO_SNDBUF.tooltip=Nastav\u00ed \u0161tandardn\u00fa hodnotu SO_RCVBUF socketu (v bajtoch), tozn. ve\u013ekos\u0165 vysielacieho okna TCP.\nVuze toto \u0161tandardne nenastavuje, pou\u017e\u00edva sa teda hodnota, ktor\u00fa nastav\u00ed OS.\nPozn.: Linux zdvojn\u00e1sob\u00ed zadan\u00fa hodnotu.
-ConfigView.section.connection.advanced.IPTOS=Typ slu\u017eby odch\u00e1dzaj\u00faceho paketu (TOS)
-ConfigView.section.connection.advanced.IPTOS.tooltip=Nastav\u00ed pole TOS (type-of-service) v IP hlavi\u010dke odch\u00e1dzaj\u00facich paketov.\nVuze toto pole \u0161tandardne nenastavuje, pou\u017e\u00edva sa teda hodnota, ktor\u00fa nastav\u00ed OS.\nPr\u00edklady hodn\u00f4t s\u00fa:\n0x02 pre IPTOS_LOWCOST\n0x04 pre IPTOS_RELIABILITY\n0x08 pre IPTOS_THROUGHPUT\n0x10 pre IPTOS_LOWDELAY\nPozn.: Niektor\u00e9 sie\u0165ov\u00e9 implement\u00e1cie m\u00f4\u017eu ignorova\u0165 t\u00fato hodnotu, teda nastavenie je ve\u013emi z\u00e1visl\u00e9 od verzie OS a JRE.
ConfigView.section.interface.confirm_torrent_removal=Zobrazi\u0165 potvrdzuj\u00faci dial\u00f3g pri odoberan\u00ed Torrentu
ConfigView.section.interface.confirm_torrent_removal.tooltip=Potvrdenie pri odoberan\u00ed Torrentu zo zobrazenia 'Moje Torrenty'.
MyTorrentsView.confirm_torrent_removal=Naozaj chcete odstr\u00e1ni\u0165?\n
@@ -1372,6 +1381,7 @@ ConfigView.section.sharing.privatetorrent=S\u00fakromn\u00fd torrent - akceptuje
MainWindow.menu.tools.nattest=Test &NAT / Firewallu
Button.apply=Pou\u017ei\u0165
Button.close=Zavrie\u0165
+#file can be a URL or a path in the jar
MainWindow.menu.help.releasenotes=Pozn\u00e1mky k verzii
dht.reseed.label=Za norm\u00e1lnych okolnost\u00ed nie je nutn\u00e9 op\u00e4tovne rozdistribuova\u0165 datab\u00e1zu. Av\u0161ak ak je po\u010det kontaktov mal\u00fd, m\u00f4\u017ee to pom\u00f4c\u0165 jej re-integr\u00e1cii.\nNevyplnen\u00e9 pol\u00ed\u010dko znamen\u00e1 zavedenie datab\u00e1zy z pripojen\u00fdch klientov, vyplnen\u00edm IP adresy zavediete datab\u00e1zu zo zn\u00e1meho klienta.
dht.reseed.group=Op\u00e4tovn\u00e1 distib\u00facia
@@ -1464,8 +1474,8 @@ DHTView.operations.data=D\u00e1ta
DHTView.general.reachable=Dosiahnute\u013en\u00e9:
ConfigView.label.queue.maxactivetorrentswhenseeding=Max. po\u010det ak sa iba distribuuje [0:neobmedzen\u00fd]
ConfigView.section.ipfilter.persistblocking=Uchova\u0165 detaily blokovan\u00fdch IP medzi re\u0161tartami
-FilesView.rename.choose.path=Vybra\u0165 nov\u00fd alebo existuj\u00faci s\u00fabor
FilesView.menu.rename=Premenova\u0165 alebo zmeni\u0165 cie\u013e
+FilesView.rename.choose.path=Vybra\u0165 nov\u00fd alebo existuj\u00faci s\u00fabor
FilesView.rename.confirm.delete.title=Potvrdi\u0165 odobratie
FilesView.rename.confirm.delete.text=Potvrdi\u0165 odobratie origin\u00e1lneho s\u00faboru %1
ConfigView.section.mode=M\u00f3d
@@ -1485,26 +1495,14 @@ ConfigView.section.interface.cleardecisionsbutton=Vy\u010disti\u0165
configureWizard.welcome.usermodes=Nastavenie \u00darovne pou\u017e\u00edvate\u013ea ovplyvn\u00ed mno\u017estvo volieb zobrazen\u00fdch v menu N\u00e1stroje -> Nastavenie. Je v tvojom najlep\u0161om z\u00e1ujme spr\u00e1vne nastavi\u0165.
diagnostics.log_found=Vuze nebol spr\u00e1vne ukon\u010den\u00fd. Pros\u00edm pozrite sa do diagnostick\u00fdch s\u00faborov v %1 a zv\u00e1\u017ete ich poslanie t\u00edmu Vuze ak to bolo zapr\u00ed\u010dinen\u00e9 chybou aplik\u00e1cie.
ConfigView.section.logging.log0type=Inform\u00e1cie
+# %1 = "in kbps" or ""; %2 = "upload" or "download"
OpenTorrentWindow.torrentLocation=Torrent s\u00fabory:
Button.moveUp=Posun\u00fa\u0165 nahor
Button.moveDown=Posun\u00fa\u0165 nadol
-# The remaining keys were not in MessagesBundle.properties
-ConfigView.section.file.check_piece_limit.explain=Ak m\u00e1te pomal\u00fd procesor, kde v\u00fdpo\u010dty hash hodn\u00f4t zaost\u00e1vaj\u00fa za z\u00e1pismi na disk (mnoho dokon\u010den\u00fdch dielov v zozname s\u0165ahovan\u00fdch dielov), m\u00f4\u017eete t\u00fdmto obmedzi\u0165 d\u013a\u017eku fronty kontrol a zn\u00ed\u017ei\u0165 tak vyu\u017eitie pam\u00e4ti.
-ConfigView.section.file.write_block_limit.explain=Ak m\u00e1te pomal\u00e9 z\u00e1pisy na disk, kedy je r\u00fdchlos\u0165 s\u0165ahovania v\u00e4\u010d\u0161ia ne\u017e r\u00fdchlos\u0165 z\u00e1pisu (mnoho \u010derven\u00fdch blokov v zozname s\u0165ahovan\u00fdch dielov), m\u00f4\u017eete t\u00fdmto obmedzi\u0165 d\u013a\u017eku fronty z\u00e1pisu a zn\u00ed\u017ei\u0165 tak vyu\u017eitie pam\u00e4ti.
-MainWindow.dht.status.running=Be\u017e\u00ed
-ConfigView.section.file.check_piece_limit=Max. nevybaven\u00fdch kontrol dielov\n[0: neobmedzene]. Ve\u013ekos\u0165 dielu z\u00e1vis\u00ed od Torrentu
-ConfigView.section.file.write_block_limit=Max. nevybaven\u00fdch z\u00e1pisov blokov na disk\n[0: neobmedzene]. Ve\u013ekos\u0165 bloku je %1
-configureWizard.nat.already_listening=Nie je mo\u017en\u00e9 otestova\u0165, port sa u\u017e pou\u017e\u00edva.\nNajsk\u00f4r zastavte v\u0161etky akt\u00edvne Torrenty a re\u0161tartujte Azureus.\nPotom znovu spustite tento test.
-SelectorGuard.repairmessage=Ak vid\u00edte t\u00fato spr\u00e1vu opakovane, a ste si ist\u00ed, \u017ee va\u0161e sie\u0165ov\u00e9 nastavenie je v poriadku,\na pou\u017e\u00edvate javu zo s\u00e9rie 1.4, tak ste pravdepodobne narazili\nna chybu JRE, a mali by ste upgradova\u0165 na nov\u0161iu s\u00e9riu javy 1.5 (5.0).
-PeersView.state.bitfield=\u010cakanie na bitov\u00e9 pole
-MyTorrentsView.menu.setSpeed=Nastavi\u0165 r\u00fdchlos\u0165 uploadu
-ConfigView.label.oldpollingstyle=Pou\u017ei\u0165 alternat\u00edvny socket polling - Zv\u00fd\u0161i sa z\u00e1\u0165a\u017e procesora, ale m\u00f4\u017ee pom\u00f4c\u0165 s odpojovan\u00edm zo siete
-ConfigView.section.connection.faulty_selector_mode=Enable faulty network selector compatibility mode [restart required]
-window.welcome.title.2300=Vitajte v programe Vuze 2.3.0.0
-ConfigView.section.file.win32movetorecyclebin=Pres\u00fava\u0165 zmazan\u00e9 s\u00fabory do Ko\u0161a
-window.welcome.title.2302=Vitajte v programe Vuze
-IrcView.title.full=IRC - Online Technick\u00e1 Podpora
-window.welcome.title.2304=Welcome to Vuze 2.3.0.4
-window.welcome.version=2304
-ConfigView.section.connection.faulty_selector_mode.tooltip=For those experiencing 100% cpu usage when connected to >60 total peer connections.
+# > 2402
+# Used for peers which we can't determine.
+PeerSocket.unknown=Nezn\u00e1my
+ConfigView.label.announceport=Nastavi\u0165 port pre Tracker
+iconBar.queue.tooltip=Fronta
+MainWindow.menu.help.faq=&Wiki FAQ
MainWindow.menu.help.donate=&Podpori\u0165 dot\u00e1ciou !!!
diff --git a/org/gudy/azureus2/internat/MessagesBundle_sl_SI.properties b/org/gudy/azureus2/internat/MessagesBundle_sl_SI.properties
index 69ac73b..3520697 100644
--- a/org/gudy/azureus2/internat/MessagesBundle_sl_SI.properties
+++ b/org/gudy/azureus2/internat/MessagesBundle_sl_SI.properties
@@ -1,3 +1,4 @@
+#There is a plugin to help with internationalizing these bundles at http://azureus.sourceforge.net/plugin_list.php
MainWindow.menu.file.open.torrent=.torrent Datoteka
Main.parameter.usage=Uporaba : java org.gudy.azureus2.cl.Main [oparametri] "Datoteka.torrent" "ciljna pot"
Main.parameter.maxUploads=Max \u0161tevilo isto\u010dasnih Oddajanj
@@ -355,7 +356,6 @@ MyTorrentsView.menu.removeand.deletedata=Izbri\u0161i Datoteke
MyTorrentsView.menu.removeand.deleteboth=Izbri\u0161i Oboje
deletedata.title=!!! Opozorilo !!!
deletedata.message1=Izbrisali boste vse PODATKE iz :\n
-deletedata.message2=\nAli \u017eelite nadaljevati?
MainWindow.menu.file.configure=Nastavitveni \u010carovnik
configureWizard.title=Nastavitveni \u010carovnik
configureWizard.welcome.title=Dobrodo\u0161li v Azureusov Nastavitveni \u010carovnik
@@ -482,7 +482,6 @@ ConfigView.section.tracker=Sledilnik
ConfigView.section.tracker.pollinterval=Povpra\u0161evalni interval Sledilnega klienta (sek)
ConfigView.section.tracker.publishenable=Objavi torrent podrobnosti "<tracker_url>"
ConfigView.section.tracker.ip=Sledilnikov zunanji IP naslov
-MainWindow.menu.help.faq=Wiki FAQ
ConfigView.section.style.enableXPStyle=Omogo\u010di XP stil (potreben ponovni zagon)
ConfigView.section.tracker.checkip=Preveri Naslov...
ipCheckerWizard.title=Preveri IP - \u010carovnik
@@ -515,7 +514,6 @@ splash.openViews=Odpiram Poglede
splash.plugin=Nalagam Vklju\u010dke :
configureWizard.nat.tooManyPorts=Preve\u010d portov za test (9 max)
ConfigView.section.color=Barvna Shema
-PeerSocket.unknown=Neznano
MyTorrentsView.menu.publish=&Objavi...
MyTrackerView.status.published=Objavljeno
MyTrackerView.completed=Kon\u010dano
@@ -527,9 +525,15 @@ ConfigView.section.file.decoder.nodecoder=Nobeden
IPChecker.external.service.no-ip.name=Ni-IPja
IPChecker.external.service.no-ip.description=Dinami\u010dni in stati\u010dni DNS ponudnik\n(ni zastonj dostopne 'preveri naslov' storitve)
ConfigView.section.tracker.publicenable=Omogo\u010di zunanje torrente
+#
+# Tooltips
+#
GeneralView.label.status.pieces_available.tooltip=Prika\u017ee \u0161tevilo dostopnih kopij vsakega kosa.\n\u010de je to \u0161tevilo manj kot 1, ne vidi\u0161 ene cele kopije datoteke (in bo\u0161 morda imel te\u017eave pri odjemanju)
GeneralView.label.trackerurl.tooltip=Klikni, da kopira\u0161 objavitveni url v odlo\u017ei\u0161\u010de
GeneralView.label.trackerurlopen.tooltip=Klikni, da odpre\u0161 glavno stran sledilnika
+#
+# 2.0.4.4
+#
ConfigView.section.style.guiUpdate=Posodobi GUI vsakih
ConfigView.section.style.graphicsUpdate=Posodobi Grafi\u010dne vrstice vsakih N GUI posodobitev
ConfigView.section.style.reOrderDelay=Preuredi tabele vsakih N GUI posodobitev [0: nikoli]
@@ -660,6 +664,9 @@ health.explain.yellow=pomeni, da je sledilnik vredu, da si povezan s sole\u017en
health.explain.green=pomeni, da je vse vredu.
ConfigView.section.style.alwaysRefreshMyTorrents=Vedno osve\u017ei Moje Torrente
ConfigView.section.style.alwaysRefreshMyTorrents.tooltip=Ta mo\u017enost bo osve\u017eila pogled Moji Torrenti tudi, \u010de niso prikazani (uporabno za dolo\u010dene mIRC vklju\u010dke)
+#
+#2.0.7.0
+#
security.certtruster.title=Opozorilo varnostnega certifikata
security.certtruster.intro=Varnostni certifikat je bil izdan v dru\u017ebi, ki ji ne zaupa\u0161
security.certtruster.resource=Surovina:
@@ -714,6 +721,9 @@ ConfigView.section.style.dropdiraction=Povleci in Spusti akcija za mape
ConfigView.section.style.dropdiraction.opentorrents=Odpri Torrente
ConfigView.section.style.dropdiraction.sharefolder=Delitvena mapa
ConfigView.section.style.dropdiraction.sharefoldercontents=Delitvena vsebina
+#
+# 2.0.7.x
+#
Categories.all=Vse
Categories.uncategorized=Nekategorizirano
CategoryAddWindow.message=Napi\u0161i ime nove kategorije
@@ -790,7 +800,6 @@ ConfigView.text.minutes=minute
ConfigView.text.neverIgnore=Nikoli ne ignoriraj
ConfigView.text.any=katerikoli
DownloadManager.error.datamissing=Manjkajo podatki
-iconBar.queue.tooltip=Daj na \u010dakalno vrsto
MainWindow.menu.file.open.torrentforseeding=.torrent datoteka (za sejanje)
MainWindow.menu.language.refresh=&Osve\u017ei
ManagerItem.forced=Prisiljen
@@ -858,6 +867,9 @@ SpeedView.stats.downloaded=Odjeto
SpeedView.stats.uploaded=Oddano
SpeedView.stats.uptime=Gor \u010das (ure)
AutoMigration.useralert=Avto-migracijski razultati Azureusovih uporabni\u0161kih konfiguracijskih datotek/map:\n\n%1\nKakr\u0161ikoli neuspehi morajo biti prestavljeni ro\u010dno.\nNE POZABI POSODOBITI SHRANITVENIH POTI V NASTAVITVAH, \u010cE SO BILE PRESTAVLJENE!
+#
+# > 2.0.8.0
+#
OpenTorrentWindow.title=Odpri Torrent(e)
OpenTorrentWindow.message=Eksperimentalno
OpenTorrentWindow.addFiles=&Dodaj datoteke
@@ -1083,21 +1095,15 @@ ConfigView.section.server.enableudp=Omogo\u010di UDP sledilni klientov protokol.
upnp.mapping.dataportudp=UDP sledilnikov klientov port
ConfigView.section.tracker.publishenabledetails=Objavi podrobnosti torrent datoteke in peera
ConfigView.label.overrideip=Razveljavi IP naslov poslan sledilniku\n - V\u010dasih potrebno za NAT
+#file can be a URL or a path in the jar
ConfigView.section.logging.log0type=Informacije
+# %1 = "in kbps" or ""; %2 = "upload" or "download"
OpenTorrentWindow.torrentLocation=Torrent datoteke:
Button.moveUp=Prestavi gor
Button.moveDown=Prestavi dol
-# The remaining keys were not in MessagesBundle.properties
-ConfigView.section.file.check_piece_limit.explain=\u010ce ima\u0161 tako po\u010dasen procesor, da so hash kalkulacije po\u010dasnej\u0161e kot pisanje na disk (veliko kon\u010danih kosov v pogledu kosov), lahko omejevanje preverjevalne vrste zmanj\u0161a uporabo spomina.
-ConfigView.section.file.write_block_limit.explain=\u010ce ima\u0161 po\u010dasen disk, tako da je pisanje na disk po\u010dasnej\u0161e od hitrosti odjemanja (veliko rde\u010dih blokov v pogledu kosov), lahko pomaga omejevanje dol\u017eine vrste pisanja (lahko zmanj\u0161a uporabo spomina).
-ConfigView.section.file.check_piece_limit=Maksimum nedosegljivih preverjevalnih kosov\n[0: neomejeno]. Velikost kosa je odvisna od torrenta
-ConfigView.section.file.write_block_limit=Maksimum nedosegljivih disk blok zapisov\n[0: neomejeno]. Velikost bloka %1
-configureWizard.nat.already_listening=Ne morem testirati, ker je poslu\u0161alni port \u017ee\nv uporabi. Prosim ustavi vse aktivne torrente in ponovno za\u017eeni Azureus.\npotem ponovno za\u017eeni ta test.
-ConfigView.label.oldpollingstyle=Uporabi alternativni socket polling - Pove\u010da uporabo procesorja vendar lahko pomaga pri padanju omre\u017eja.
-SystemTray.menu.stopalldownloads=Ustavi vse odjemke
-ConfigView.label.slowconnect=Po\u010dasi priklju\u010duj nove sole\u017enike\n - Za uporabnike s slabo spletno povezavo
-ConfigView.section.proxy.description=omogo\u010di proxyiranje sledilnika in sole\u017enikovih komunikacij.\nProxyiranje sole\u017enikov potrebuje SOCKS-kompatitabilen proxy.\nPotreben je ponovni zagon.
-SystemTray.menu.startalldownloads=Za\u010dni vse odjemke
-ConfigView.section.proxy.description2=omogo\u010di proxyiranje sledilnikovih komunikacij.\nPotreben je ponovni zagon.
-Scrape.status.NoMultiSupport=Ve\u010d hash scrapes na zahtevo ni podprto.
+# > 2402
+# Used for peers which we can't determine.
+PeerSocket.unknown=Neznano
+iconBar.queue.tooltip=Daj na \u010dakalno vrsto
+MainWindow.menu.help.faq=Wiki FAQ
MainWindow.menu.help.donate=Prispevaj ($2,$5,...)
diff --git a/org/gudy/azureus2/internat/MessagesBundle_sr.properties b/org/gudy/azureus2/internat/MessagesBundle_sr.properties
index a5ce52e..9bee999 100644
--- a/org/gudy/azureus2/internat/MessagesBundle_sr.properties
+++ b/org/gudy/azureus2/internat/MessagesBundle_sr.properties
@@ -489,7 +489,6 @@ ConfigView.label.moveremoved=\u041f\u043e\u043c\u0435\u0440\u0438 \u0437\u0430\u
ConfigView.label.savetorrents=\u0421\u0430\u0447\u0443\u0432\u0430\u0458 \u0442\u043e\u0440\u0435\u043d\u0442 \u0434\u0430\u0442\u043e\u0442\u0435\u043a\u0435
MainWindow.menu.view.mytracker=\u041c\u043e\u0458 &\u043f\u0440\u0430\u0442\u0438\u043b\u0430\u0446
MyTrackerView.title.full=\u041c\u043e\u0458 \u043f\u0440\u0430\u0442\u0438\u043b\u0430\u0446
-Tab.closeHint=(\u041f\u0440\u0438\u0442\u0438\u0441\u043d\u0438\u0442\u0435 'Esc' \u0437\u0430 \u0437\u0430\u0442\u0432\u0430\u0440\u0430\u045a\u0435)
MyTrackerView.name=\u0418\u043c\u0435
MyTrackerView.tracker=\u041f\u0440\u0430\u0442\u0438\u043b\u0430\u0446
MyTrackerView.status=\u0421\u0442\u0430\u0442\u0443\u0441
@@ -720,7 +719,6 @@ ConfigView.section.style.alwaysRefreshMyTorrents.tooltip=\u041e\u0432\u0430 \u04
#
#2.0.7.0
#
-ConfigView.section.style.verticaloffset=\u0412\u0435\u0440\u0442\u0438\u043a\u0430\u043b\u043d\u0438 \u0433\u0440\u0430\u0444\u0438\u0447\u043a\u0438 \u043f\u043e\u043c\u0430\u043a (\u0437\u0430\u043a\u0440\u043f\u0430 \u0437\u0430 \u0413\u0422\u041a)
security.certtruster.title=\u0423\u043f\u043e\u0437\u043e\u0440\u0435\u045a\u0435 \u043e \u0441\u0438\u0433\u0443\u0440\u043d\u043e\u0441\u043d\u043e\u043c \u0441\u0435\u0440\u0438\u0444\u0438\u043a\u0430\u0442\u0443
security.certtruster.intro=\u0421\u0438\u0433\u0443\u0440\u043d\u043e\u0441\u043d\u0438 \u0441\u0435\u0440\u0442\u0438\u0444\u0438\u043a\u0430\u0442 \u0458\u0435 \u0438\u0437\u0434\u0430\u043b\u0430 \u043a\u043e\u043c\u043f\u0430\u043d\u0438\u0458\u0430 \u0443 \u043a\u043e\u0458\u0443 \u043d\u0435\u043c\u0430\u0442\u0435 \u043f\u043e\u0432\u0435\u0440\u0435\u045a\u0430
security.certtruster.resource=\u0420\u0435\u0441\u0443\u0440\u0441:
@@ -1932,13 +1930,8 @@ MainWindow.menu.view.iconbar=\u0410\u043b\u0430\u0442\u043d\u0430 \u0442\u0440\u
MyTorrentsView.menu.rename=\u041f\u0440\u0435\u0438\u043c\u0435\u043d\u0443\u0458
MyTorrentsView.menu.rename.displayed=\u041f\u0440\u043e\u043c\u0435\u043d\u0438 \u043f\u0440\u0438\u043a\u0430\u0437\u0430\u043d\u043e \u0438\u043c\u0435
MyTorrentsView.menu.rename.save_path=\u041f\u0440\u0435\u0438\u043c\u0435\u043d\u0443\u0458 \u0441\u0442\u0430\u0437\u0443 \u0437\u0430 \u0447\u0443\u0432\u0430\u045a\u0435
-MyTorrentsView.menu.rename.displayed_and_save_path=\u041f\u0440\u0435\u0438\u043c\u0435\u043d\u0443\u0458 \u043e\u0431\u0430
MyTorrentsView.menu.rename.displayed.enter.title=\u041f\u0440\u043e\u043c\u0435\u043d\u0438 \u043f\u0440\u0438\u043a\u0430\u0437\u0430\u043d\u043e \u0438\u043c\u0435
MyTorrentsView.menu.rename.displayed.enter.message=\u0423\u043d\u0435\u0441\u0438\u0442\u0435 \u043d\u043e\u0432\u043e \u0438\u043c\u0435 \u0437\u0430 \u043e\u0432\u0430\u0458 \u043f\u0440\u0438\u0458\u0435\u043c.\n\u0410\u043a\u043e \u0441\u0435 \u043d\u0435 \u0443\u043d\u0435\u0441\u0435 \u043d\u0438\u043a\u0430\u043a\u0430\u0432 \u0442\u0435\u043a\u0441\u0442, \u043a\u043e\u0440\u0438\u0441\u0442\u0438 \u0441\u0435 \u0438\u0437\u0432\u043e\u0440\u043d\u043e \u0438\u043c\u0435.
-MyTorrentsView.menu.rename.save_path.enter.title=\u041f\u0440\u0435\u0438\u043c\u0435\u043d\u0443\u0458 \u0441\u0442\u0430\u0437\u0443 \u0437\u0430 \u0447\u0443\u0432\u0430\u045a\u0435
-MyTorrentsView.menu.rename.save_path.enter.message=\u0423\u043d\u0435\u0441\u0438\u0442\u0435 \u043d\u043e\u0432\u043e \u0438\u043c\u0435 \u0441\u0442\u0430\u0437\u0435 \u0437\u0430 \u0447\u0443\u0432\u0430\u045a\u0435 \u043e\u0432\u043e\u0433 \u043f\u0440\u0438\u0458\u0435\u043c\u0430.\n\u0410\u043a\u043e \u0441\u0435 \u043d\u0435 \u0443\u043d\u0435\u0441\u0435 \u043d\u0438\u043a\u0430\u043a\u0430\u0432 \u0442\u0435\u043a\u0441\u0442, \u043a\u043e\u0440\u0438\u0441\u0442\u0438 \u0441\u0435 \u043f\u0440\u0438\u043a\u0430\u0437\u0430\u043d\u043e \u0438\u043c\u0435.
-MyTorrentsView.menu.rename.displayed_and_save_path.enter.title=\u041f\u0440\u0435\u0438\u043c\u0435\u043d\u0443\u0458 \u043f\u0440\u0438\u0458\u0435\u043c
-MyTorrentsView.menu.rename.displayed_and_save_path.enter.message=\u0423\u043d\u0435\u0441\u0438\u0442\u0435 \u043d\u043e\u0432\u043e \u0438\u043c\u0435 \u0437\u0430 \u043e\u0432\u0430\u0458 \u043f\u0440\u0438\u0458\u0435\u043c.\n\u0410\u043a\u043e \u0441\u0435 \u043d\u0435 \u0443\u043d\u0435\u0441\u0435 \u043d\u0438\u043a\u0430\u043a\u0430\u0432 \u0442\u0435\u043a\u0441\u0442, \u043a\u043e\u0440\u0438\u0441\u0442\u0435 \u0441\u0435 \u0438\u0437\u0432\u043e\u0440\u043d\u0435 \u0432\u0440\u0435\u0434\u043d\u043e\u0441\u0442\u0438.
MyTorrentsView.menu.edit_comment=\u0423\u0440\u0435\u0434\u0438 \u043a\u043e\u043c\u0435\u043d\u0442\u0430\u0440
MyTorrentsView.menu.edit_comment.enter.title=\u0423\u0440\u0435\u0434\u0438 \u043a\u043e\u043c\u0435\u043d\u0442\u0430\u0440
MyTorrentsView.menu.edit_comment.enter.message=\u0423\u043d\u0435\u0441\u0438\u0442\u0435 \u043d\u043e\u0432\u0438 \u043a\u043e\u043c\u0435\u043d\u0442\u0430\u0440 \u0437\u0430 \u043e\u0432\u0430\u0458 \u043f\u0440\u0438\u0458\u0435\u043c.
@@ -2155,7 +2148,6 @@ v3.MainWindow.button.comment=\u041a\u043e\u043c\u0435\u043d\u0442\u0430\u0440
v3.MainWindow.button.viewdetails=\u0414\u0435\u0442\u0430\u0459\u0438
v3.MainWindow.button.play=\u041f\u0443\u0441\u0442\u0438
v3.MainWindow.button.cancel=\u041e\u0442\u043a\u0430\u0436\u0438
-v3.MainWindow.button.sendtofriend=\u0414\u0435\u043b\u0438
v3.MainWindow.view.wait=\u041f\u043e\u0433\u043b\u0435\u0434 \u0441\u0435 \u0443\u0447\u0438\u0442\u0430\u0432\u0430, \u043c\u043e\u043b\u0438\u043c\u043e \u0434\u0430 \u0441\u0430\u0447\u0435\u043a\u0430\u0442\u0435...
v3.MainWindow.xofx=%1 \u043e\u0434 %2
v3.MainWindow.Loading=\u0423\u0447\u0438\u0442\u0430\u0432\u0430\u045a\u0435, \u043c\u043e\u043b\u0438\u043c\u043e \u0434\u0430 \u0441\u0430\u0447\u0435\u043a\u0430\u0442\u0435...
@@ -2165,9 +2157,6 @@ v3.mb.delPublished.title=\u041f\u0440\u0435\u043a\u0438\u043d\u0438 \u0437\u0430
v3.mb.delPublished.text=\u0423\u041f\u041e\u0417\u041e\u0420\u0415\u040a\u0415: \u041e\u0432\u043e \u0434\u0435\u0458\u0441\u0442\u0432\u043e \u041d\u0415\u040b\u0415 \u0443\u043a\u043b\u043e\u043d\u0438\u0442\u0438 \u043e\u0431\u0458\u0430\u0432\u0459\u0435\u043d \u0441\u0430\u0434\u0440\u0436\u0430\u0458 \u201e%1\u201f \u0441\u0430 <A HREF="%2">%3</A> .\n\n\u041f\u0440\u0438\u0442\u0438\u0441\u043d\u0438\u0442\u0435 \u201e\u0423\u043a\u043b\u043e\u043d\u0438\u201f \u0441\u0430\u043c\u043e \u0430\u043a\u043e \u0436\u0435\u043b\u0438\u0442\u0435 \u0434\u0430 \u0432\u0430\u0448 \u0441\u0430\u0434\u0440\u0436\u0430\u0458 \u043e\u0441\u0442\u0430\u043d\u0435 \u043e\u0431\u0458\u0430\u0432\u0459\u0435\u043d \u0438 \u0441\u043f\u0440\u0435\u043c\u0430\u043d \u0437\u0430 \u043f\u0440\u0438\u0458\u0435\u043c, \u0430\u043b\u0438 \u0436\u0435\u043b\u0438\u0442\u0435 \u0434\u0430 \u043e\u0441\u043b\u043e\u0431\u043e\u0434\u0438\u0442\u0435 \u0441\u0432\u043e\u0458 \u043f\u0440\u043e\u043f\u0443\u0441\u043d\u0438 \u043e\u043f\u0441\u0435\u0433. \u041f\u0440\u043e\u0432\u0435\u0440\u0438\u0442\u0435 \u0434\u0430 \u0458\u0435 \u043f\u0440\u0435\u043d\u043e\u0441 \u0433\u043e\u0442\u043e\u0432 \u043f\u0440\u0435 \u043d\u0435\u0433\u043e \u0448\u0442\u043e \u0442\u043e \u0443\u0440\u0430\u0434\u0438\u0442\u0435 (<A HREF="%4">\u043a\u0430\u043a\u043e</A>?).\n\n\u041f\u0440\u0438\u0442\u0438\u0441\u043d\u0438\u0442\u0435 \u201e\u041e\u0442\u043a\u0430\u0436\u0438\u201f \u0430\u043a\u043e \u0436\u0435\u043b\u0438\u0442\u0435 \u0434\u0430 \u043f\u043e\u0442\u043f\u0443\u043d\u043e \u0443\u043a\u043b\u043e\u043d\u0438\u0442\u0435 \u043e\u0431\u0458\u0430\u0432\u0459\u0435\u043d \u0441\u0430\u0434\u0440\u0436\u0430\u0458 \u0441\u0430 %3, \u0438 \u043a\u043e\u0440\u0438\u0441\u0442\u0438\u0442\u0435 \u0434\u0443\u0433\u043c\u0435 (X) \u043d\u0430 \u043f\u0430\u043d\u0435\u043b\u0443 \u201e\u041e\u0431\u0458\u0430\u0432\u0459\u0435\u043d \u0441\u0430\u0434\u0440\u0436\u0430\u0458\u201f \u043d\u0430 \u0458\u0435\u0437\u0438\u0447\u043a\u0443 \u0441\u0430 \u043e\u0431\u0458\u0430\u0432\u0459\u0435\u043d\u0438\u043c \u0441\u0430\u0434\u0440\u0436\u0430\u0458\u0438\u043c\u0430.\n\n<A HREF="%4">\u0412\u0438\u0448\u0435 \u043f\u043e\u043c\u043e\u045b\u0438</A>.\n\n
v3.mb.delPublished.delete=&\u0423\u043a\u043b\u043e\u043d\u0438
v3.mb.delPublished.cancel=\u041e\u0442\u043a\u0430&\u0436\u0438
-v3.HomeReminder.title=\u0414\u043e\u0434\u0430\u0442 \u043f\u0440\u0438\u0458\u0435\u043c
-v3.HomeReminder.text=\u0414\u043e\u0434\u0430\u0442\u043e \u043d\u0430 \u0441\u043f\u0438\u0441\u0430\u043a \u0437\u0430 \u043f\u0440\u0438\u0458\u0435\u043c: \u201e%1\u201f.\n\n\u005cu0410\u043a\u043e \u0436\u0435\u043b\u0438\u0442\u0435 \u0434\u0430 \u043f\u0440\u0435\u0433\u043b\u0435\u0434\u0430\u0442\u0435 \u043d\u0430\u043f\u0440\u0435\u0434\u0430\u043a \u043f\u0440\u0438\u0458\u0435\u043c\u0430, \u0438\u043b\u0438 \u0434\u0430 \u043f\u0443\u0441\u0442\u0438\u0442\u0435 \u043f\u043e \u043e\u043a\u043e\u043d\u0447\u0430\u045a\u0443, \u043f\u0440\u0438\u0442\u0438\u0441\u043d\u0438\u0442\u0435 \u043d\u0435\u0433\u0434\u0435 \u043d\u0430 \u0433\u043b\u0430\u0432\u043d\u0438 \u043f\u0430\u043d\u0435\u043b.
-v3.HomeReminder.gohome=\u041f\u0440\u0435\u0431\u0430\u0446\u0438 \u0441\u0435 \u043d\u0430 \u0433\u043b\u0430\u0432\u043d\u0438 \u043f\u0430\u043d\u0435\u043b
v3.mb.openFile.button.play=\u041f\u0443\u0441\u0442\u0438
v3.mb.PlayFileNotFound.title=\u0414\u0430\u0442\u043e\u0442\u0435\u043a\u0430 \u043d\u0438\u0458\u0435 \u043d\u0430\u0452\u0435\u043d\u0430
v3.mb.PlayFileNotFound.text=\u0414\u0430\u0442\u043e\u0442\u0435\u043a\u0435 \u0437\u0430 \u201e%1\u201f \u0441\u0443 \u0438\u043b\u0438 \u0443\u043a\u043b\u043e\u045a\u0435\u043d\u0435 \u0438\u043b\u0438 \u043d\u0435\u0434\u043e\u0441\u0442\u0430\u0458\u0443.
@@ -2325,23 +2314,10 @@ v3.MainWindow.text.get.started=\u0423\u0432\u043e\u0434
v3.MainWindow.text.my.account=\u041c\u043e\u0458 \u043d\u0430\u043b\u043e\u0433
v3.MainWindow.text.my.profile=\u041f\u0440\u043e\u0444\u0438\u043b
OpenTorrentWindow.simple.open=\u041c\u0435\u0441\u0442\u043e \u0442\u043e\u0440\u0435\u043d\u0442\u0430 (\u0434\u0430\u0442\u043e\u0442\u0435\u043a\u0430, \u0423\u0420\u041b, \u0445\u0435\u0448)
-#v3.MainWindow.menu.view.configuration=Preferences
-#v3.MainWindow.menu.view.configuration.keybinding=Meta+,
-#v3.TorrentOptionsView.title.short=Preferences
-#v3.TorrentOptionsView.title.full=Preferences
-#v3.ConfigView.title.short=Preferences
-#v3.ConfigView.title.full=Preferences
MainWindow.menu.window.zoom.maximize=\u0423\u0432\u0435\u045b\u0430\u0458
-v3.buddy.menu.viewprofile=\u041f\u0440\u0435\u0433\u043b\u0435\u0434 \u043f\u0440\u043e\u0444\u0438\u043b\u0430
-v3.activity.buddy-request=\u0418\u043c\u0430\u0442\u0435 \u043f\u0440\u0438\u0458\u0430\u0442\u0435\u0459\u0441\u043a\u0438 \u043f\u043e\u0437\u0438\u0432 \u043e\u0434 %1
-v3.activity.buddy-request.accept=\u041f\u0440\u0438\u0445\u0432\u0430\u0442\u0438
-v3.activity.buddy-request.multi=\u0418\u043c\u0430\u0442\u0435 \u043f\u0440\u0438\u0458\u0430\u0442\u0435\u0459\u0441\u043a\u0438 \u043f\u043e\u0437\u0438\u0432 [#%3] \u043e\u0434 %1
-v3.activity.buddy-linkup=\u0412\u0438 \u0438 %1 \u0441\u0442\u0435 \u0441\u0430\u0434\u0430 \u043f\u0440\u0438\u0458\u0430\u0442\u0435\u0459\u0438
MainWindow.dialog.select.vuze.file=\u041e\u0434\u0430\u0431\u0435\u0440\u0438 \u0412\u0458\u0443\u0437 \u0434\u0430\u0442\u043e\u0442\u0435\u043a\u0443
MainWindow.menu.file.open.vuze=\u0412\u0458\u0443\u0437 \u0434\u0430\u0442\u043e\u0442\u0435\u043a\u0430...
v3.activity.header.downloads=\u041f\u0440\u0435\u0443\u0437\u0438\u043c\u0430\u045a\u0430
-v3.activity.buddy-invited=\u041f\u043e\u0441\u043b\u0430\u043b\u0438 \u0441\u0442\u0435 \u043f\u043e\u0437\u0438\u0432 \u043a\u0430 %1.
-v3.activity.buddy-invited.multi=\u041f\u043e\u0441\u043b\u0430\u043b\u0438 \u0441\u0442\u0435 \u043f\u043e\u0437\u0438\u0432 \u0441\u043b\u0435\u0434\u0435\u045b\u0438\u043c \u043e\u0441\u043e\u0431\u0430\u043c\u0430:\n%1
iconBar.play=\u041f\u0443\u0441\u0442\u0438
iconBar.queue.tooltip=\u0420\u0435\u0434
v3.MainWindow.menu.getting_started=&\u041f\u043e\u0447\u0435\u0442\u0430\u043a
@@ -2350,12 +2326,7 @@ MainWindow.menu.help.faq=&\u0427\u0435\u0441\u0442\u043e \u043f\u043e\u0441\u044
MainWindow.menu.community.wiki=&\u0412\u0438\u043a\u0438
MainWindow.menu.community.forums=&\u0424\u043e\u0440\u0443\u043c
MainWindow.menu.community.blog=\u0412\u0458\u0443\u0437 &\u0411\u043b\u043e\u0433
-MainWindow.menu.community.add_friends=&\u0414\u043e\u0434\u0430\u0458 \u043f\u0440\u0438\u0458\u0430\u0442\u0435\u0459\u0435
MainWindow.menu.help.support=&\u041f\u043e\u043c\u043e\u045b \u0438 \u043f\u043e\u0434\u0440\u0448\u043a\u0430
-v3.MainWindow.menu.publish.new=\u041e\u0431\u0458\u0430\u0432\u0438 \u043d\u043e\u0432\u0438 \u0441\u0430\u0434\u0440\u0436\u0430\u0458
-v3.MainWindow.menu.publish.mine=\u0412\u0430\u0448 \u043e\u0431\u0458\u0430\u0432\u0459\u0435\u043d\u0438 \u0441\u0430\u0434\u0440\u0436\u0430\u0458
-v3.MainWindow.menu.publish.about=\u041e \u043e\u0431\u0458\u0430\u0432\u0459\u0438\u0432\u0430\u045a\u0443...
v3.activity.button.readall=\u0421\u0432\u0435 \u043a\u0430\u043e \u043f\u0440\u043e\u0447\u0438\u0442\u0430\u043d\u043e
-#what you've watched? Discover more with a single click...
v3.activity.button.watchall=
MainWindow.menu.help.donate=&\u0414\u0430\u0458\u0442\u0435 \u043f\u0440\u0438\u043b\u043e\u0433
diff --git a/org/gudy/azureus2/internat/MessagesBundle_sv_SE.properties b/org/gudy/azureus2/internat/MessagesBundle_sv_SE.properties
index 666bce3..39397c2 100644
--- a/org/gudy/azureus2/internat/MessagesBundle_sv_SE.properties
+++ b/org/gudy/azureus2/internat/MessagesBundle_sv_SE.properties
@@ -730,7 +730,6 @@ ConfigView.section.style.alwaysRefreshMyTorrents.tooltip=Denna inst\u00e4llning
#
#2.0.7.0
#
-ConfigView.section.style.verticaloffset=Bugfix f\u00f6r GTK
security.certtruster.title=S\u00e4kerhetsvarning
security.certtruster.intro=Certifikatet \u00e4r utgivet av ett f\u00f6retag som du inte litar p\u00e5
security.certtruster.resource=Resurs:
@@ -1926,13 +1925,8 @@ MainWindow.menu.view.iconbar=Verktygsf\u00e4lt
MyTorrentsView.menu.rename=Byt namn
MyTorrentsView.menu.rename.displayed=Byt Visningsnamn
MyTorrentsView.menu.rename.save_path=Byt namn p\u00e5 m\u00e5lkatalog
-MyTorrentsView.menu.rename.displayed_and_save_path=Byt namn p\u00e5 b\u00e5da
MyTorrentsView.menu.rename.displayed.enter.title=Byt Visningsnamn
MyTorrentsView.menu.rename.displayed.enter.message=Skriv nytt namn f\u00f6r denna nedladdning\nOm inget skrivs anv\u00e4nds det ursprungliga namnet
-MyTorrentsView.menu.rename.save_path.enter.title=Byt namn p\u00e5 m\u00e5lkatalog
-MyTorrentsView.menu.rename.save_path.enter.message=Skriv i ett nytt namn p\u00e5 katalogen d\u00e4r du vill spara.\nOm ingen text anges anv\u00e4nds nedladdningens namn.
-MyTorrentsView.menu.rename.displayed_and_save_path.enter.title=Byt namn p\u00e5 nedladdning
-MyTorrentsView.menu.rename.displayed_and_save_path.enter.message=Skriv nytt namn f\u00f6r denna nedladdning\nOm inget skrivs anv\u00e4nds det ursprungliga v\u00e4rdet
MyTorrentsView.menu.edit_comment=Ange kommentar
MyTorrentsView.menu.edit_comment.enter.title=Ange kommentar
MyTorrentsView.menu.edit_comment.enter.message=Skriv en kommentar f\u00f6r nedladdningen/nedladdningarna h\u00e4r.
@@ -2138,7 +2132,6 @@ v3.MainWindow.button.comment=Kommentar
v3.MainWindow.button.viewdetails=Visa Detaljer
v3.MainWindow.button.play=Spela Upp
v3.MainWindow.button.cancel=Avbryt
-v3.MainWindow.button.sendtofriend=Dela ut Torrent
v3.MainWindow.button.preview=F\u00f6rhandsvisning
v3.MainWindow.view.wait=Initialiserar vy, v\u00e4nligen v\u00e4nta...
v3.MainWindow.xofx=%1 av %2
@@ -2372,27 +2365,9 @@ Button.bar.share=Dela
Button.bar.add=L\u00e4gg till
Button.bar.edit=Redigera
Button.bar.edit.cancel=St\u00e4ng redigering
-v3.Share.menu=Dela inneh\u00e5ll
-v3.Share.header=Dela
-v3.Share.add.buddy=L\u00e4gg till V\u00e4nner
-v3.Share.add.edit.buddy=L\u00e4gg till/Redigera V\u00e4nner
-v3.Share.add.buddy.all=Dela med alla
-v3.Share.add.buddy.existing=Nuvarande V\u00e4nner
-v3.Share.add.buddy.new=Nya V\u00e4nner:
-v3.Share.buddies=V\u00e4nner
-v3.Share.invite.buddies.prompt=Bjud in fler v\u00e4nner att dela med
-v3.Share.send.now=Skicka
-v3.Share.disclaimer.link=L\u00e4s mer
-v3.buddy.menu.viewprofile=Visa Profil
-v3.buddy.menu.remove=Ta bort V\u00e4n
v3.MainWindow.menu.view.pluginbar=Pluginpanelen
-v3.MainWindow.menu.view.buddies-viewer=V\u00e4npanelen
-v3.activity.buddy-request.accept=Acceptera
-v3.buddies.friends=V\u00e4nner
-v3.buddies.remove=Ta bort v\u00e4n
MainWindow.dialog.select.vuze.file=V\u00e4lj Vuze Fil
MainWindow.menu.file.open.vuze=Vuze Fil...
-azbuddy.ui.dialog.disable.title=Inaktivera plugin f\u00f6r V\u00e4nner
metasearch.addtemplate.title=Installera S\u00f6kmall?
metasearch.addtemplate.desc=\u00c4r du s\u00e4ker att du vill installera s\u00f6kmallen som heter '%1'?
v3.share.private.title=Dela Ut Torrent
@@ -2401,8 +2376,6 @@ metasearch.addtemplate.dup.title=Kopiera Mall
metasearch.addtemplate.dup.desc=S\u00f6kmallen %1 \u00e4r redan installerad
metasearch.export.select.template.file=Spara Mall
metasearch.import.select.template.file=\u00d6ppna Mall
-v3.MainWindow.button.newtag.share=Ny! Dela Torrent
-v3.buddies.faq=L\u00e4s mer
dialog.uiswitch.title=V\u00e4xla till Vuze UI
dialog.uiswitch.text=Du m\u00e5ste k\u00f6ra Vuze gr\u00e4nssnittet f\u00f6r att anv\u00e4nda den h\u00e4r funktionen\n\nVuze m\u00e5ste startas om.
dialog.uiswitch.button=V\u00e4xla till Vuze UI
@@ -2410,15 +2383,12 @@ v3.MainWindow.button.download=Ladda ned
v3.MainWindow.button.run=\u00d6ppna det h\u00e4mtade objektet.
v3.activity.header.downloads=Nedladdningar
v3.activity.header.vuze.news=Vuze Nyheter
-message.intro.friends=L\u00e4gg till V\u00e4nner.\nDela Torrents.\nLadda ned snabbare.
azbuddy.tracker.bbb.status.title.tooltip=Dubbelklicka f\u00f6r detaljer
azbuddy.tracker.bbb.status.nli=Inloggning kr\u00e4vs
v3.MainWindow.search.go.tooltip=Utf\u00f6r s\u00f6kningen
v3.MainWindow.search.last.tooltip=G\u00e5 tillbaka till s\u00f6kresultaten
metasearch.addtemplate.done.title=Mall Tillagd
metasearch.addtemplate.done.desc=Mallen '%1' las till.\nDen kommer att anv\u00e4ndas n\u00e4sta g\u00e5ng du s\u00f6ker!
-v3.MainWindow.button.share=Dela ut inneh\u00e5ll
-v3.buddies.remove.buddy.dialog.title=Ta bort
ConfigView.section.security.nopw=Inget l\u00f6senord angavs
fileplugininstall.install.title=Installera Plugin?
fileplugininstall.install.desc=\u00c4r du s\u00e4ker att du vill installera plugin '%1', version %2?
@@ -2426,10 +2396,7 @@ fileplugininstall.duplicate.title=Duplicera Plugin
fileplugininstall.duplicate.desc=Plugin '%1', version %2 \u00e4r redan installerad
azbuddy.os_not_avail=Inte Tillg\u00e4nglig
azbuddy.os_busy=Upptagen
-v3.buddy.menu.chat=Chatt
-v3.chat.wrongversion=%1 anv\u00e4nder en version av Vuze som inte st\u00f6djer Chatt.
azbuddy.enable_chat_notif=Aktivera Chatt notifieringar
-v3.buddies.dnd.info.dialog.remember=Visa inte det h\u00e4r meddelandet igen
progress.window.msg.progress=Var v\u00e4nlig och v\u00e4nta medans \u00e5tg\u00e4rden utf\u00f6rs
DetailedListView.title=Detaljerad Lista
plugins.init.force_enabled=Vuze har uppt\u00e4ckt att plugin "%1" var inaktiverat - det har aktiverats s\u00e5 att Vuze kan fungera korrekt.
@@ -2470,15 +2437,10 @@ TableColumn.header.Thumbnail=Ikon
v3.MainWindow.menu.getting_started=Komma ig\u00e5n&g
MainWindow.menu.help.faq=&FAQ
MainWindow.menu.community.blog=Vuze &Blogg
-MainWindow.menu.community.add_friends=L\u00e4gg till V\u00e4nner
MainWindow.menu.help.support=&Hj\u00e4lp och Support
externalLogin.title=Inloggning kr\u00e4vs
Button.done=F\u00e4rdig
GeneralView.torrent_created_on_and_by=%1 av %2
-v3.Share.wizard.title=Guide -- Utdelningsguide
-v3.AddFriends.header.message=L\u00e4gg till v\u00e4nner och b\u00f6rja dela med dig av dina torrent favoriter.
-v3.AddFriends.header=L\u00e4gg till v\u00e4nner
-v3.AddFriends.wizard.title=Guide -- L\u00e4gg till V\u00e4nner
Button.continue=Forts\u00e4tt
Button.preview=F\u00f6rhandsgranska
Subscription.menu.forcecheck=Uppdatera Nu
@@ -2487,9 +2449,6 @@ Subscription.menu.remove=Radera
sidebar.Library=Mitt Bibliotek
sidebar.LibraryDL=Laddar ner
authenticator.details=Detaljer
-v3.MainWindow.menu.publish.new=Publicera Nytt Inneh\u00e5ll
-v3.MainWindow.menu.publish.mine=Ditt Publicerade Inneh\u00e5ll
-v3.MainWindow.menu.publish.about=Om Publicering...
v3.MainWindow.menu.showActionBarText=Visa text i verktygsf\u00e4ltet
subscript.import.fail.title=Import Misslyckades
subscript.import.fail.desc=Detaljer: %1
@@ -2506,7 +2465,6 @@ Subscription.menu.reset=\u00c5terst\u00e4ll till Utg\u00e5ngsl\u00e4get
ConfigView.section.Subscriptions=Prenumerationer
subscriptions.config.maxresults=Max antal resultat som sparas per prenumeration [0: obegr\u00e4nsat]
v3.activity.button.readall=Markera Alla som L\u00e4sta
-ConfigView.interface.start.library=Starta i Biblioteket
TableColumn.header.activityNew=Ny
TableColumn.header.activityType=Typ
TableColumn.header.activityText=Meddelande
@@ -2534,7 +2492,6 @@ Wizard.Subscription.rss.subtitle3=N\u00e4r du har sparat f\u00e5r du uppdatering
Wizard.Subscription.subscribe.library=Inneh\u00e5ll i ditt bibliotek
Wizard.Subscription.subscribe.subscriptions=Tillh\u00f6rande prenumerationer
Wizard.Subscription.subscribe.library.empty=\u00c4r inga prenumerationer tillg\u00e5ngliga?\n \nTitta efter den oranga prenumerationsknappen p\u00e5 Vuze HD N\u00e4tverket.\n \n<A HREF="http://faq.vuze.com/?View=entry&EntryID=288">L\u00e4s mer</A>
-TableColumn.header.videoLength=Videons L\u00e4ngd
message.confirm.delete.title=Bekr\u00e4fta Radering
message.confirm.delete.text=Vill du verkligen radera '%1'?
Subscription.menu.properties=Egenskaper
@@ -2574,8 +2531,6 @@ v3.iconBar.down.tooltip=Flytta ned\nH\u00e5ll ned musknappen f\u00f6r att flytta
Button.deleteContent.fromLibrary=Ta bort fr\u00e5n Biblioteket
Button.deleteContent.fromComputer=Radera fr\u00e5n Datorn
v3.deleteContent.message=\nVill du radera '%1' fr\u00e5n din dator eller bara ta bort den fr\u00e5n ditt Vuze Bibliotek?
-v3.library.infobar.text1=Letar du efter den Avancerade vyn?
-v3.library.infobar.text2=Anv\u00e4nd Vy knappen i verktygsf\u00e4ltet ovanf\u00f6r.
v3.MainWindow.menu.view.toolbartext=Text i Verktygsf\u00e4ltet
v3.MainWindow.menu.view.asSimpleList=Enkel Lista
v3.MainWindow.menu.view.asAdvancedList=Avancerad Lista
@@ -2593,8 +2548,6 @@ v3.MainWindow.menu.contentnetworks.manage=Hantera HD N\u00e4tverk
azbuddy.ui.menu.cat=Kategorier
azbuddy.ui.menu.cat.set_msg=Kommaseparerad lista av kategorier eller 'Alla'
azbuddy.ui.menu.cat_subs=Prenumerera
-v3.buddy.prop.dn=Visningsnamn
-v3.buddy.prop.un=Anv\u00e4ndarnamn
v3.dialog.cnmanage.title=Hantera menyn f\u00f6r HD N\u00e4tverk
TableColumn.header.TableColumnChosenColumn=Vald Kolumn
ColumnSetup.chosencolumns=Valda Kolumner
diff --git a/org/gudy/azureus2/internat/MessagesBundle_th_TH.properties b/org/gudy/azureus2/internat/MessagesBundle_th_TH.properties
index f81796d..df4c18a 100644
--- a/org/gudy/azureus2/internat/MessagesBundle_th_TH.properties
+++ b/org/gudy/azureus2/internat/MessagesBundle_th_TH.properties
@@ -1,3 +1,4 @@
+#There is a plugin to help with internationalizing these bundles at http://azureus.sourceforge.net/plugin_list.php
MainWindow.menu.file.open.torrent=\u0e02\u0e49\u0e2d\u0e21\u0e39\u0e25 .torrent
Main.parameter.usage=\u0e43\u0e0a\u0e49 : java org.gudy.azureus2.cl.Main [parameters] "file.torrent" "save path"
Main.parameter.maxUploads=\u0e08\u0e33\u0e19\u0e27\u0e19\u0e2a\u0e39\u0e07\u0e2a\u0e38\u0e14\u0e43\u0e19\u0e01\u0e32\u0e23\u0e2d\u0e31\u0e1e\u0e42\u0e2b\u0e25\u0e14
@@ -354,7 +355,6 @@ MyTorrentsView.menu.removeand.deletedata=\u0e25\u0e1a &\u0e02\u0e49\u0e2d\u0e21\
MyTorrentsView.menu.removeand.deleteboth=\u0e25\u0e1a &\u0e17\u0e31\u0e49\u0e07\u0e04\u0e39\u0e48
deletedata.title=!!! \u0e04\u0e33\u0e40\u0e15\u0e37\u0e2d\u0e19 !!!
deletedata.message1=\u0e04\u0e38\u0e13\u0e01\u0e33\u0e25\u0e31\u0e07\u0e08\u0e30\u0e25\u0e1a\u0e02\u0e49\u0e2d\u0e21\u0e39\u0e25\u0e08\u0e32\u0e01 :\n
-deletedata.message2=\n\u0e04\u0e38\u0e13\u0e41\u0e19\u0e48\u0e43\u0e08\u0e2b\u0e23\u0e37\u0e2d\u0e27\u0e48\u0e32\u0e08\u0e30\u0e14\u0e33\u0e40\u0e19\u0e34\u0e19\u0e01\u0e32\u0e23\u0e15\u0e48\u0e2d?
MainWindow.menu.file.configure=\u0e1b\u0e23\u0e31\u0e1a\u0e41\u0e15\u0e48\u0e07 &\u0e2d\u0e31\u0e15\u0e42\u0e19\u0e21\u0e31\u0e15\u0e34
configureWizard.title=\u0e01\u0e32\u0e23\u0e1b\u0e23\u0e31\u0e1a\u0e41\u0e15\u0e48\u0e07\u0e2d\u0e31\u0e15\u0e42\u0e19\u0e21\u0e31\u0e15\u0e34
configureWizard.welcome.title=\u0e22\u0e34\u0e19\u0e14\u0e35\u0e15\u0e49\u0e2d\u0e19\u0e23\u0e31\u0e1a\u0e2a\u0e39\u0e48\u0e23\u0e30\u0e1a\u0e1a\u0e1b\u0e23\u0e31\u0e1a\u0e41\u0e15\u0e48\u0e07\u0e2d\u0e31\u0e15\u0e42\u0e19\u0e21\u0e31\u0e15\u0e34\u0e02\u0e2d\u0e07 Vuze
@@ -471,7 +471,6 @@ MyTorrentsView.menu.host.error.message=\u0e04\u0e27\u0e32\u0e21\u0e1c\u0e34\u0e1
ConfigView.section.tracker.pollinterval=Tracker client poll interval (\u0e27\u0e34\u0e19\u0e32\u0e17\u0e35)
ConfigView.section.tracker.publishenable=\u0e2d\u0e2d\u0e01\u0e23\u0e32\u0e22\u0e25\u0e30\u0e40\u0e2d\u0e35\u0e22\u0e14 torrent \u0e17\u0e35\u0e48 "<tracker_url>"
ConfigView.section.tracker.ip=Tracker \u0e2b\u0e21\u0e32\u0e22\u0e40\u0e25\u0e02 IP \u0e20\u0e32\u0e22\u0e19\u0e2d\u0e01
-MainWindow.menu.help.faq=&Wiki \u0e04\u0e33\u0e16\u0e32\u0e21\u0e17\u0e35\u0e48\u0e16\u0e39\u0e01\u0e16\u0e32\u0e21\u0e1a\u0e48\u0e2d\u0e22
ConfigView.section.style.enableXPStyle=\u0e43\u0e0a\u0e49\u0e23\u0e39\u0e1b\u0e41\u0e1a\u0e1a XP (\u0e15\u0e49\u0e2d\u0e07\u0e40\u0e23\u0e34\u0e48\u0e21\u0e17\u0e33\u0e07\u0e32\u0e19\u0e43\u0e2b\u0e21\u0e48)
ConfigView.section.tracker.checkip=\u0e04\u0e49\u0e19\u0e1e\u0e1a\u0e2b\u0e21\u0e32\u0e22\u0e40\u0e25\u0e02 IP \u0e20\u0e32\u0e22\u0e19\u0e2d\u0e01\u0e42\u0e14\u0e22\u0e2d\u0e31\u0e15\u0e42\u0e19\u0e21\u0e31\u0e15\u0e34...
ipCheckerWizard.title=\u0e15\u0e23\u0e27\u0e08\u0e2a\u0e2d\u0e1a IP \u0e2d\u0e31\u0e15\u0e42\u0e19\u0e21\u0e31\u0e15\u0e34
@@ -504,7 +503,6 @@ splash.openViews=\u0e40\u0e1b\u0e34\u0e14\u0e41\u0e2a\u0e14\u0e07\u0e1c\u0e25
splash.plugin=\u0e42\u0e2b\u0e25\u0e14\u0e42\u0e1b\u0e23\u0e41\u0e01\u0e23\u0e21\u0e40\u0e2a\u0e23\u0e34\u0e21 :
configureWizard.nat.tooManyPorts=\u0e1b\u0e23\u0e34\u0e21\u0e32\u0e13\u0e1e\u0e2d\u0e23\u0e4c\u0e15\u0e21\u0e32\u0e01\u0e40\u0e01\u0e34\u0e19\u0e01\u0e27\u0e48\u0e32\u0e17\u0e35\u0e48\u0e08\u0e30\u0e17\u0e14\u0e2a\u0e2d\u0e1a (\u0e2a\u0e39\u0e07\u0e2a\u0e38\u0e14 9)
ConfigView.section.color=\u0e23\u0e39\u0e1b\u0e41\u0e1a\u0e1a\u0e2a\u0e35
-PeerSocket.unknown=\u0e44\u0e21\u0e48\u0e23\u0e39\u0e49
MyTorrentsView.menu.publish=&\u0e2d\u0e2d\u0e01...
MyTrackerView.status.published=\u0e2d\u0e2d\u0e01
MyTrackerView.completed=\u0e40\u0e2a\u0e23\u0e47\u0e08\u0e2a\u0e34\u0e49\u0e19
@@ -518,9 +516,15 @@ IPChecker.external.service.no-ip.description=Dynamic and Static DNS service prov
ConfigView.section.tracker.publicenable=\u0e40\u0e1b\u0e34\u0e14\u0e01\u0e32\u0e23\u0e43\u0e0a\u0e49\u0e07\u0e32\u0e19 torrents \u0e20\u0e32\u0e22\u0e19\u0e2d\u0e01
ConfigView.label.playdownloadspeech=\u0e1e\u0e39\u0e14\u0e40\u0e21\u0e37\u0e48\u0e2d\u0e01\u0e32\u0e23\u0e14\u0e32\u0e27\u0e42\u0e2b\u0e25\u0e14\u0e40\u0e2a\u0e23\u0e47\u0e08\u0e2a\u0e34\u0e49\u0e19
ConfigView.label.playdownloadspeech.info=\u0e01\u0e32\u0e23\u0e1a\u0e23\u0e34\u0e01\u0e32\u0e23\u0e40\u0e2a\u0e35\u0e22\u0e07\u0e43\u0e0a\u0e49\u0e14\u0e35\u0e17\u0e35\u0e48\u0e2a\u0e38\u0e14\u0e01\u0e31\u0e1a\u0e20\u0e32\u0e29\u0e32\u0e2d\u0e31\u0e07\u0e01\u0e24\u0e29
+#
+# Tooltips
+#
GeneralView.label.status.pieces_available.tooltip=\u0e41\u0e2a\u0e14\u0e07\u0e08\u0e33\u0e19\u0e27\u0e19\u0e2a\u0e33\u0e40\u0e19\u0e32\u0e17\u0e35\u0e48\u0e21\u0e35\u0e2d\u0e22\u0e39\u0e48\n\u0e16\u0e49\u0e32\u0e08\u0e33\u0e19\u0e27\u0e19\u0e14\u0e49\u0e32\u0e19\u0e02\u0e27\u0e32\u0e19\u0e49\u0e2d\u0e22\u0e01\u0e27\u0e48\u0e32 1, \u0e04\u0e38\u0e13\u0e44\u0e21\u0e48\u0e40\u0e2b\u0e47\u0e19\u0e2a\u0e33\u0e40\u0e19\u0e32\u0e2b\u0e21\u0e14\u0e43\u0e19\u0e02\u0e49\u0e2d\u0e21\u0e39\u0e25 (\u0e41\u0e25\u0e30\u0e2d\u0e32\u0e08\u0e21\u0e35\u0e1b\u0e31\u0e0d\u0e2b\u0e32\u0e43\u0e19\u0e01\u0e32\u0e23\u0e14\u0e32\u0e27\u0e42\u0e2b\u0e25\u0e14\u0e43\u0e2b\u0e49\u0e2a\u0e21\u0e1a\u0e39\u0e23\u0e13\u0e4c)
GeneralView.label.trackerurl.tooltip=\u0e04\u0e25\u0e34\u0e01\u0e40\u0e1e\u0e37\u0e48\u0e2d\u0e2a\u0e33\u0e40\u0e19\u0e32 url \u0e17\u0e35\u0e48\u0e41\u0e08\u0e49\u0e07\u0e44\u0e1b\u0e17\u0e35\u0e48 clipboard
GeneralView.label.trackerurlopen.tooltip=\u0e04\u0e25\u0e34\u0e01\u0e40\u0e1e\u0e37\u0e48\u0e2d\u0e40\u0e1b\u0e34\u0e14\u0e2b\u0e19\u0e49\u0e32\u0e2b\u0e25\u0e31\u0e01\u0e02\u0e2d\u0e07 tracker
+#
+# 2.0.4.4
+#
ConfigView.section.style.guiUpdate=\u0e2d\u0e31\u0e1e\u0e40\u0e14\u0e17 GUI \u0e17\u0e38\u0e01\u0e46
ConfigView.section.style.graphicsUpdate=\u0e2d\u0e31\u0e1e\u0e40\u0e14\u0e17\u0e41\u0e16\u0e1a\u0e01\u0e23\u0e32\u0e1f\u0e1f\u0e34\u0e01\u0e17\u0e38\u0e01\u0e46 N GUI \u0e2d\u0e31\u0e1e\u0e40\u0e14\u0e17
ConfigView.section.style.reOrderDelay=\u0e08\u0e31\u0e14\u0e2d\u0e31\u0e19\u0e14\u0e31\u0e1a\u0e15\u0e32\u0e23\u0e32\u0e07\u0e43\u0e2b\u0e21\u0e48\u0e17\u0e38\u0e01\u0e46 N GUI \u0e2d\u0e31\u0e15\u0e40\u0e14\u0e17 [0: \u0e44\u0e21\u0e48\u0e15\u0e49\u0e2d\u0e07]
@@ -651,7 +655,9 @@ health.explain.yellow=\u0e2b\u0e21\u0e32\u0e22\u0e04\u0e27\u0e32\u0e21\u0e27\u0e
health.explain.green=\u0e2b\u0e21\u0e32\u0e22\u0e04\u0e27\u0e32\u0e21\u0e27\u0e48\u0e32\u0e17\u0e38\u0e01\u0e2d\u0e22\u0e48\u0e32\u0e07\u0e40\u0e1b\u0e47\u0e19\u0e44\u0e1b\u0e14\u0e49\u0e27\u0e22\u0e14\u0e35
ConfigView.section.style.alwaysRefreshMyTorrents=\u0e41\u0e2a\u0e14\u0e07\u0e1c\u0e25\u0e43\u0e2b\u0e21\u0e48 Torrents \u0e02\u0e2d\u0e07\u0e09\u0e31\u0e19\u0e40\u0e2a\u0e21\u0e2d
ConfigView.section.style.alwaysRefreshMyTorrents.tooltip=\u0e15\u0e31\u0e27\u0e40\u0e25\u0e37\u0e2d\u0e01\u0e19\u0e35\u0e49\u0e08\u0e30\u0e17\u0e33\u0e43\u0e2b\u0e49 Torrents \u0e02\u0e2d\u0e07\u0e09\u0e31\u0e19\u0e41\u0e2a\u0e14\u0e07\u0e1c\u0e25\u0e43\u0e2b\u0e21\u0e48\u0e17\u0e38\u0e01\u0e04\u0e23\u0e31\u0e49\u0e07\u0e41\u0e21\u0e49\u0e27\u0e48\u0e32\u0e08\u0e30\u0e44\u0e21\u0e48\u0e1b\u0e23\u0e32\u0e01\u0e0e (\u0e21\u0e35\u0e1b\u0e23\u0e30\u0e42\u0e22\u0e0a\u0e2a\u0e33\u0e2b\u0e23\u0e31\u0e1a\u0e42\u0e1b\u0e23\u0e41\u0e01\u0e23\u0e21\u0e40\u0e2a\u0e23\u0e34\u0e21 mirc)
-ConfigView.section.style.verticaloffset=\u0e1b\u0e23\u0e31\u0e1a\u0e41\u0e15\u0e48\u0e07\u0e01\u0e23\u0e32\u0e1f\u0e1f\u0e34\u0e01\u0e41\u0e19\u0e27\u0e15\u0e31\u0e49\u0e07 (\u0e41\u0e01\u0e49 GTK)
+#
+#2.0.7.0
+#
security.certtruster.title=\u0e40\u0e15\u0e37\u0e2d\u0e19\u0e01\u0e32\u0e23\u0e23\u0e31\u0e1a\u0e23\u0e2d\u0e07\u0e04\u0e27\u0e32\u0e21\u0e1b\u0e25\u0e2d\u0e14\u0e20\u0e31\u0e22
security.certtruster.intro=\u0e01\u0e32\u0e23\u0e23\u0e31\u0e1a\u0e23\u0e2d\u0e07\u0e2d\u0e2d\u0e01\u0e42\u0e14\u0e22\u0e1a\u0e23\u0e34\u0e29\u0e31\u0e17\u0e17\u0e35\u0e48\u0e04\u0e38\u0e13\u0e44\u0e21\u0e48\u0e40\u0e0a\u0e37\u0e48\u0e2d
security.certtruster.resource=\u0e17\u0e23\u0e31\u0e1e\u0e22\u0e32\u0e01\u0e23:
@@ -707,6 +713,9 @@ ConfigView.section.style.dropdiraction=\u0e01\u0e32\u0e23\u0e01\u0e23\u0e30\u0e1
ConfigView.section.style.dropdiraction.opentorrents=\u0e40\u0e1b\u0e34\u0e14 Torrents
ConfigView.section.style.dropdiraction.sharefolder=\u0e15\u0e33\u0e41\u0e2b\u0e19\u0e48\u0e07\u0e41\u0e1a\u0e48\u0e07\u0e1b\u0e31\u0e19
ConfigView.section.style.dropdiraction.sharefoldercontents=\u0e2a\u0e34\u0e48\u0e07\u0e17\u0e35\u0e48\u0e41\u0e1a\u0e48\u0e07\u0e1b\u0e31\u0e19
+#
+# 2.0.7.x
+#
Categories.all=\u0e17\u0e31\u0e49\u0e07\u0e2b\u0e21\u0e14
Categories.uncategorized=\u0e44\u0e21\u0e48\u0e41\u0e1a\u0e48\u0e07\u0e2b\u0e21\u0e27\u0e14\u0e2b\u0e21\u0e39\u0e48
CategoryAddWindow.message=\u0e43\u0e2a\u0e48\u0e0a\u0e37\u0e48\u0e2d\u0e2b\u0e21\u0e27\u0e14\u0e2b\u0e21\u0e39\u0e48\u0e43\u0e2b\u0e21\u0e48
@@ -781,7 +790,6 @@ ConfigView.text.minutes=\u0e19\u0e32\u0e17\u0e35
ConfigView.text.neverIgnore=\u0e44\u0e21\u0e48\u0e25\u0e30\u0e40\u0e25\u0e22
ConfigView.text.any=\u0e2d\u0e31\u0e19\u0e44\u0e2b\u0e19\u0e01\u0e47\u0e44\u0e14\u0e49
DownloadManager.error.datamissing=\u0e02\u0e49\u0e2d\u0e21\u0e39\u0e25\u0e2a\u0e39\u0e0d\u0e2b\u0e32\u0e22
-iconBar.queue.tooltip=\u0e25\u0e33\u0e14\u0e31\u0e1a
MainWindow.menu.file.open.torrentforseeding=\u0e02\u0e49\u0e2d\u0e21\u0e39\u0e25 .torrent(\u0e40\u0e1e\u0e37\u0e48\u0e2d Seeding)
MainWindow.menu.language.refresh=&\u0e41\u0e2a\u0e14\u0e07\u0e1c\u0e25\u0e43\u0e2b\u0e21\u0e48
ManagerItem.forced=\u0e1a\u0e31\u0e07\u0e04\u0e31\u0e1a
@@ -854,6 +862,9 @@ SpeedView.stats.uptime=\u0e40\u0e27\u0e25\u0e32\u0e2d\u0e31\u0e1e (\u0e0a\u0e31\
SpeedView.stats.now=\u0e17\u0e31\u0e19\u0e17\u0e35
SpeedView.stats.now.tooltip=\u0e17\u0e31\u0e49\u0e07\u0e2b\u0e21\u0e14 (Protocol)
AutoMigration.useralert=\u0e02\u0e49\u0e2d\u0e21\u0e39\u0e25\u0e01\u0e32\u0e23\u0e1b\u0e23\u0e31\u0e1a\u0e41\u0e15\u0e48\u0e07\u0e02\u0e2d\u0e07\u0e1c\u0e39\u0e43\u0e0a\u0e49 Vuze /dirs \u0e1c\u0e25\u0e02\u0e2d\u0e07\u0e01\u0e32\u0e23\u0e40\u0e04\u0e25\u0e37\u0e48\u0e2d\u0e19\u0e22\u0e49\u0e32\u0e22\u0e2d\u0e31\u0e15\u0e42\u0e19\u0e21\u0e31\u0e15\u0e34:\n\n%1\n\u0e41\u0e15\u0e48\u0e25\u0e30\u0e04\u0e27\u0e32\u0e21\u0e1c\u0e34\u0e14\u0e1e\u0e25\u0e32\u0e14 \u0e15\u0e49\u0e2d\u0e07\u0e17\u0e33\u0e01\u0e32\u0e23\u0e40\u0e04\u0e25\u0e37\u0e48\u0e2d\u0e19\u0e22\u0e49\u0e32\u0e22\u0e14\u0e49\u0e27\u0e22\u0e15\u0e19\u0e40\u0e2d\u0e07\n\u0e2d\u0e22\u0e48\u0e32\u0e25\u0e37\u0e21\u0e17\u0e35\u0e48\u0e08\u0e30\u0e1b\u0e23\u0e31\u0e1a\u0e1b\u0e23\u0e38\u0e07\u0e15\u0e33\u0e41\u0e2b\u0e19\u0e48\u0e07\u0e01\u0e32\u0e23\u0e1a\u0e31\u0e19\u0e17\u0e36\u0e01\u0e43\u0e19\u0e01\u0e32\u0e23\u0e1b\u0e23\u0e31\u0e1a\u0e41\u0e15\u0e48\u0e07 \u0e16\u0e49\u0e32\u0e21\u0e31\u0e19\u0e16\u0e39\u0e01\u0e40\u0e04\u0e25\u0e35\u0e48\u0e22\u0e19\u0e22\u0e49\u0e32\u0e22 !
+#
+# > 2.0.8.0
+#
OpenTorrentWindow.title=\u0e40\u0e1b\u0e34\u0e14 Torrent(s)
OpenTorrentWindow.message=\u0e17\u0e14\u0e25\u0e2d\u0e07
OpenTorrentWindow.addFiles=&\u0e40\u0e1e\u0e34\u0e48\u0e21\u0e02\u0e49\u0e2d\u0e21\u0e39\u0e25
@@ -1086,6 +1097,8 @@ MyTrackerView.badnat.info=Seeds/Peers \u0e17\u0e35\u0e48\u0e44\u0e21\u0e48\u0e1c
ConfigView.section.tracker.natchecktimeout=\u0e01\u0e32\u0e23\u0e15\u0e23\u0e27\u0e08\u0e2a\u0e2d\u0e1a\u0e02\u0e32\u0e14\u0e2b\u0e32\u0e22 (\u0e27\u0e34\u0e19\u0e32\u0e17\u0e35)
ConfigView.section.file.perf.cache.enable=\u0e43\u0e0a\u0e49\u0e07\u0e32\u0e19 disk cache
ConfigView.section.file.perf.cache.size=\u0e02\u0e19\u0e32\u0e14\u0e02\u0e2d\u0e07 cache \u0e43\u0e19 %1
+#Removed
+#MyTorrentsView.menu.setSpeed=Set Upload Speed
MainWindow.menu.transfers=\u0e2a\u0e48\u0e07&
MainWindow.menu.transfers.startalltransfers=\u0e40\u0e23\u0e34\u0e48&\u0e21\u0e17\u0e31\u0e49\u0e07\u0e2b\u0e21\u0e14
MainWindow.menu.transfers.stopalltransfers=\u0e2b\u0e22\u0e38&\u0e14\u0e17\u0e31\u0e49\u0e07\u0e2b\u0e21\u0e14
@@ -1167,8 +1180,6 @@ FilesView.fullpath=\u0e41\u0e2a\u0e14\u0e07\u0e15\u0e33\u0e41\u0e2b\u0e19\u0e48\
FilesView.remaining=\u0e2a\u0e48\u0e27\u0e19\u0e17\u0e35\u0e48\u0e40\u0e2b\u0e25\u0e37\u0e2d
TableColumn.header.trackername=\u0e0a\u0e37\u0e48\u0e2d Tracker
TableColumn.header.trackername.info=\u0e0a\u0e37\u0e48\u0e2d\u0e02\u0e2d\u0e07 tracker \u0e15\u0e32\u0e21 URL \u0e17\u0e35\u0e48\u0e41\u0e08\u0e49\u0e07
-ConfigView.label.announceport=\u0e40\u0e02\u0e35\u0e22\u0e19\u0e17\u0e31\u0e1a tracker \u0e43\u0e19 port \u0e17\u0e35\u0e48\u0e41\u0e08\u0e49\u0e07
-ConfigView.label.announceport.tooltip=\u0e1a\u0e2d\u0e01 tracker \u0e02\u0e2d\u0e07 port \u0e2d\u0e37\u0e48\u0e19\u0e21\u0e32\u0e01\u0e01\u0e27\u0e48\u0e32\u0e17\u0e35\u0e48\u0e04\u0e38\u0e13\u0e15\u0e34\u0e14\u0e15\u0e48\u0e2d\u0e2d\u0e22\u0e39\u0e48. \u0e1b\u0e25\u0e48\u0e2d\u0e22\u0e27\u0e48\u0e32\u0e07\u0e44\u0e27\u0e49\u0e40\u0e1e\u0e37\u0e48\u0e2d\u0e40\u0e1b\u0e47\u0e19\u0e01\u0e32\u0e23\u0e1b\u0e34\u0e14\u0e15\u0e31\u0e27\u0e01\u0e32\u0e23\u0e43\u0e0a\u0e49\u0e07\u0e32\u0e19\u0e19\u0e35\u0e49.
ConfigView.group.override=\u0e15\u0e31\u0e27\u0e40\u0e25\u0e37\u0e2d\u0e01\u0e01\u0e32\u0e23\u0e40\u0e02\u0e35\u0e22\u0e19\u0e17\u0e31\u0e1a
ConfigView.section.file.perf.cache.notsmallerthan=\u0e44\u0e21\u0e48 cache \u0e02\u0e49\u0e2d\u0e21\u0e39\u0e25\u0e17\u0e35\u0e48\u0e02\u0e19\u0e32\u0e14\u0e40\u0e25\u0e47\u0e01\u0e01\u0e27\u0e48\u0e32 (in %1)
PeersView.menu.blockupload=\u0e01\u0e31\u0e19 Upload
@@ -1197,7 +1208,6 @@ ConfigView.section.connection.advanced.SO_RCVBUF=Socket SO_RCVBUF size [0: \u0e4
ConfigView.section.connection.advanced.SO_RCVBUF.tooltip=\u0e15\u0e31\u0e49\u0e07\u0e04\u0e48\u0e32 standard socket SO_RCVBUF (\u0e2b\u0e19\u0e48\u0e27\u0e22 bytes), \u0e15\u0e31\u0e27\u0e2d\u0e22\u0e48\u0e32\u0e07. TCP \u0e23\u0e31\u0e1a\u0e02\u0e19\u0e32\u0e14 window \u0e41\u0e25\u0e30 \u0e2a\u0e31\u0e14\u0e2a\u0e48\u0e27\u0e19\nVuze \u0e40\u0e27\u0e49\u0e19\u0e0a\u0e48\u0e2d\u0e07\u0e19\u0e35\u0e49\u0e44\u0e27\u0e49\u0e40\u0e1b\u0e47\u0e19\u0e04\u0e48\u0e32\u0e21\u0e32\u0e15\u0e23\u0e32\u0e10\u0e32\u0e19, \u0e2b\u0e21\u0e32\u0e22\u0e04\u0e27\u0e32\u0e21\u0e27\u0e48\u0e32\u0e43\u0e0a\u0e49\u0e04\u0e48\u0e32\u0e21\u0e32\u0e15\u0e23\u0e32\u0e10\u0e32\u0e19\u0e02\u0e2d\u0e07 underlying OS .\n\u0e2b\u0e21\u0e32\u0e22\u0e40\u0e2b\u0e15\u0e38: Linux \u0e22\u0e01\u0e01\u0e33\u0e25\u0e31\u0e07\u0e2a\u0e2d\u0e07\u0e04\u0e48\u0e32\u0e17\u0e35\u0e48\u0e43\u0e2b\u0e49.
ConfigView.section.connection.advanced.SO_SNDBUF=\u0e02\u0e19\u0e32\u0e14 Socket SO_SNDBUF [0: \u0e43\u0e0a\u0e49\u0e04\u0e48\u0e32\u0e21\u0e32\u0e15\u0e23\u0e32\u0e10\u0e32\u0e19\u0e02\u0e2d\u0e07 OS]
ConfigView.section.connection.advanced.SO_SNDBUF.tooltip=\u0e15\u0e31\u0e49\u0e07\u0e04\u0e48\u0e32 the standard socket SO_SNDBUF (\u0e43\u0e19 bytes), \u0e15.\u0e22.. TCP \u0e2a\u0e48\u0e07\u0e02\u0e19\u0e32\u0e14 window\nVuze \u0e40\u0e27\u0e49\u0e19\u0e04\u0e48\u0e32\u0e19\u0e35\u0e49\u0e44\u0e27\u0e49\u0e40\u0e1b\u0e47\u0e19\u0e21\u0e32\u0e15\u0e23\u0e32\u0e10\u0e32\u0e19,\u0e2b\u0e21\u0e32\u0e22\u0e04\u0e27\u0e32\u0e21\u0e27\u0e48\u0e32\u0e43\u0e0a\u0e49\u0e04\u0e48\u0e32 underlying OS\n\u0e2b\u0e21\u0e32\u0e02\u0e40\u0e2b\u0e15\u0e38: Linux \u0e01\u0e33\u0e25\u0e31\u0e07\u0e2a\u0e2d\u0e07\u0e04\u0e48\u0e32\u0e17\u0e35\u0e48\u0e43\u0e2b\u0e49
-ConfigView.section.connection.advanced.IPTOS.tooltip=\u0e15\u0e31\u0e49\u0e07\u0e04\u0e48\u0e32 traffic class / type-of-service (TOS) \u0e1a\u0e19 IP header\u0e2a\u0e33\u0e2b\u0e23\u0e31\u0e1a\u0e02\u0e49\u0e2d\u0e21\u0e39\u0e25\u0e2a\u0e48\u0e07\u0e2d\u0e2d\u0e01\nVuze \u0e08\u0e30\u0e40\u0e27\u0e49\u0e19\u0e04\u0e48\u0e32\u0e19\u0e35\u0e49\u0e44\u0e27\u0e49\u0e40\u0e1b\u0e47\u0e19\u0e04\u0e48\u0e32\u0e21\u0e32\u0e15\u0e23\u0e32\u0e10\u0e32\u0e19,\u0e2b\u0e21\u0e32\u0e22\u0e04\u0e27\u0e32\u0e21\u0e27\u0e48\u0e32\u0e43\u0e0a\u0e49\u0e07\u0e32\u0e19\u0e04\u0e48\u0e32 underlying \u0e02\u0e2d\u0e07 OS.\n\u0e22\u0e01\u0e15\u0e31\u0e27\u0e2d\u0e22\u0e48\u0e32\u0e07\u0e04\u0e48\u0e32 :\n0x02 \u0e40\u0e1e\u0e37\u0e48\u0e2d IPTOS_LOWCOST\n0x04 \u0e40\u0e1e\u0e37\u0e48\u0e2d IPTOS_RELIABILITY\n0x08 \u0e40\u0e1e\u0e37\u0e48\u0e2d IPTOS_THROUGHPUT\n0x10\u0e40\u0e1e\u0e37\u0e48\u0e2d IPTOS_LOWDELAY\n\u0e2b\u0e21\u0e32\u0e22\u0e40\u0e2b\u0e15\u0e38: \u0e40\u0e04\u0e23\u0e37\u0e2d\u0e02\u0e48\u0e32\u0e22 Underlying\u0e40\u0e2a\u0e23\u0e34\u0e21 \u0e2d\u0e32\u0e08\u0e25\u0e30\u0e40\u0e27\u0e49\u0e19\u0e01\u0e0f\u0e19\u0e35\u0e49, \u0e14\u0e31\u0e07\u0e19\u0e31\u0e49\u0e19\u0e15\u0e31\u0e27\u0e40\u0e25\u0e37\u0e2d\u0e01\u0e19\u0e35\u0e49\u0e02\u0e36\u0e49\u0e19\u0e01\u0e31\u0e1a OS \u0e41\u0e25\u0e30\u0e23\u0e38\u0e48\u0e19\u0e02\u0e2d\u0e07 JRE
ConfigView.section.interface.confirm_torrent_removal=\u0e41\u0e2a\u0e14\u0e07\u0e02\u0e49\u0e2d\u0e04\u0e27\u0e32\u0e21\u0e22\u0e37\u0e19\u0e22\u0e31\u0e19\u0e43\u0e19\u0e01\u0e32\u0e23\u0e40\u0e2d\u0e32 torrent \u0e2d\u0e2d\u0e01
ConfigView.section.interface.confirm_torrent_removal.tooltip=\u0e22\u0e37\u0e19\u0e22\u0e31\u0e19\u0e40\u0e21\u0e37\u0e48\u0e2d\u0e40\u0e2d\u0e32 torrent \u0e2d\u0e2d\u0e01\u0e08\u0e32\u0e01 Torrents \u0e02\u0e2d\u0e07\u0e09\u0e31\u0e19
MyTorrentsView.confirm_torrent_removal=\u0e04\u0e38\u0e13\u0e41\u0e19\u0e48\u0e43\u0e08\u0e40\u0e2b\u0e23\u0e2d\u0e17\u0e35\u0e48\u0e08\u0e30\u0e40\u0e2d\u0e32\u0e2d\u0e2d\u0e01?\n
@@ -1340,6 +1350,7 @@ MainWindow.menu.tools.nattest=&\u0e17\u0e14\u0e2a\u0e2d\u0e1a NAT / Firewall
Button.apply=\u0e15\u0e01\u0e25\u0e07\u0e43\u0e0a\u0e49
Button.close=\u0e1b\u0e34\u0e14
window.welcome.title=\u0e22\u0e34\u0e19\u0e14\u0e35\u0e15\u0e49\u0e2d\u0e19\u0e23\u0e31\u0e1a\u0e2a\u0e39\u0e48 Vuze %1
+#file can be a URL or a path in the jar
MainWindow.menu.help.releasenotes=\u0e2b\u0e21\u0e32\u0e22\u0e40\u0e2b\u0e15\u0e38\u0e23\u0e38\u0e48\u0e19
dht.reseed.label=\u0e42\u0e14\u0e22\u0e1b\u0e01\u0e15\u0e34 reseeding \u0e2a\u0e33\u0e2b\u0e23\u0e31\u0e1a\u0e01\u0e32\u0e23\u0e01\u0e23\u0e30\u0e08\u0e32\u0e22\u0e10\u0e32\u0e19\u0e02\u0e49\u0e2d\u0e21\u0e39\u0e25\u0e19\u0e31\u0e49\u0e19\u0e44\u0e21\u0e48\u0e08\u0e33\u0e40\u0e1b\u0e47\u0e19\u0e2d\u0e22\u0e48\u0e32\u0e07\u0e44\u0e23\u0e01\u0e47\u0e15\u0e32\u0e21\u0e16\u0e49\u0e32\u0e08\u0e33\u0e19\u0e27\u0e19\u0e17\u0e35\u0e48\u0e15\u0e34\u0e14\u0e15\u0e48\u0e2d\u0e15\u0e33\u0e19\u0e35\u0e48\u0e2a\u0e32\u0e21\u0e32\u0e23\u0e16\u0e43\u0e0a\u0e49\u0e40\u0e1e\u0e37\u0e48\u0e2d\u0e40\u0e1e\u0e34\u0e48\u0e21\u0e44\u0e14\u0e49.\n\u0e1b\u0e25\u0e48\u0e2d\u0e22\u0e0a\u0e48\u0e2d\u0e07\u0e19\u0e35\u0e49\u0e27\u0e48\u0e32\u0e07\u0e40\u0e1e\u0e37\u0e48\u0e2d\u0e15\u0e34\u0e14\u0e15\u0e48\u0e2d\u0e43\u0e2b\u0e21\u0e48\u0e01\u0e31\u0e1a peers \u0e2b\u0e23\u0e37\u0e2d\u0e43\u0e2a\u0e48 IP \u0e41\u0e25\u0e30 port \u0e40\u0e1e\u0e37\u0e48\u0e2d\u0e15\u0e34\u0e14\u0e15\u0e48\u0e2d\u0e43\u0e2b\u0e21\u0e48\u0e01\u0e31\u0e1a peer \u0e17\u0e35\u0e48\u0e23\u0e39\u0e49\u0e08\u0e31\u0e01\u0e41\u0e25\u0e49\u0e27.
dht.reseed.ip=\u0e2b\u0e21\u0e32\u0e22\u0e40\u0e25\u0e02 IP
@@ -1406,10 +1417,11 @@ ConfigView.section.logging.log0type=\u0e02\u0e48\u0e32\u0e27\u0e2a\u0e32\u0e23
OpenTorrentWindow.torrentLocation=\u0e02\u0e49\u0e2d\u0e21\u0e39\u0e25 Torrent:
Button.moveUp=\u0e22\u0e49\u0e32\u0e22\u0e02\u0e36\u0e49\u0e19
Button.moveDown=\u0e22\u0e49\u0e32\u0e22\u0e44\u0e1b\u0e25\u0e07
-# The remaining keys were not in MessagesBundle.properties
-ConfigView.section.file.check_piece_limit.explain=\u0e16\u0e49\u0e32\u0e04\u0e38\u0e13\u0e21\u0e35 CPU \u0e17\u0e35\u0e48\u0e0a\u0e49\u0e32 \u0e01\u0e32\u0e23\u0e04\u0e33\u0e19\u0e27\u0e13\u0e08\u0e30\u0e17\u0e33\u0e43\u0e2b\u0e49\u0e40\u0e01\u0e34\u0e14\u0e01\u0e32\u0e23\u0e17\u0e33\u0e07\u0e32\u0e19\u0e0a\u0e49\u0e32\u0e2b\u0e25\u0e31\u0e07\u0e01\u0e32\u0e23\u0e40\u0e02\u0e35\u0e22\u0e19\u0e02\u0e49\u0e2d\u0e21\u0e39\u0e25 (\u0e0a\u0e34\u0e49\u0e19\u0e2a\u0e48\u0e27\u0e19\u0e17\u0e35\u0e48\u0e2a\u0e21\u0e1a\u0e39\u0e23\u0e13\u0e4c\u0e2b\u0e25\u0e32\u0e22\u0e0a\u0e34\u0e49\u0e19\u0e43\u0e19\u0e41\u0e2a\u0e14\u0e07\u0e1c\u0e25\u0e2a\u0e48\u0e27\u0e19), \u0e08\u0e33\u0e01\u0e31\u0e14\u0e25\u0e33\u0e14\u0e31\u0e1a\u0e04\u0e27\u0e32\u0e21\u0e22\u0e32\u0e27\u0e43\u0e19\u0e01\u0e32\u0e23\u0e15\u0e23\u0e27\u0e08 \u0e08\u0e30\u0e25\u0e14\u0e01\u0e32\u0e23\u0e43\u0e0a\u0e49\u0e07\u0e32\u0e19\u0e2b\u0e19\u0e48\u0e27\u0e22\u0e04\u0e27\u0e32\u0e21\u0e08\u0e33
-ConfigView.section.file.write_block_limit.explain=\u0e16\u0e49\u0e32\u0e04\u0e38\u0e13\u0e21\u0e35\u0e1b\u0e31\u0e0d\u0e2b\u0e32\u0e1b\u0e23\u0e30\u0e2a\u0e34\u0e17\u0e18\u0e34\u0e20\u0e32\u0e1e\u0e01\u0e32\u0e23\u0e40\u0e02\u0e35\u0e22\u0e19\u0e02\u0e49\u0e2d\u0e21\u0e39\u0e25\u0e17\u0e35\u0e48\u0e0a\u0e49\u0e32 \u0e40\u0e0a\u0e48\u0e19 \u0e01\u0e32\u0e23\u0e40\u0e02\u0e35\u0e22\u0e19\u0e0a\u0e49\u0e32\u0e01\u0e27\u0e48\u0e32\u0e04\u0e27\u0e32\u0e21\u0e40\u0e23\u0e47\u0e27\u0e02\u0e2d\u0e07\u0e01\u0e32\u0e23\u0e14\u0e32\u0e27\u0e42\u0e2b\u0e25\u0e14 (\u0e0a\u0e48\u0e27\u0e07\u0e2a\u0e35\u0e41\u0e14\u0e07\u0e21\u0e32\u0e01\u0e43\u0e19\u0e21\u0e38\u0e21\u0e21\u0e2d\u0e07\u0e2a\u0e48\u0e27\u0e19), \u0e01\u0e32\u0e23\u0e08\u0e33\u0e01\u0e31\u0e14\u0e25\u0e33\u0e14\u0e31\u0e1a\u0e01\u0e32\u0e23\u0e40\u0e02\u0e35\u0e22\u0e19\u0e2d\u0e48\u0e32\u0e19\u0e0a\u0e48\u0e27\u0e22\u0e25\u0e14\u0e01\u0e32\u0e23\u0e43\u0e0a\u0e49\u0e2b\u0e19\u0e48\u0e27\u0e22\u0e04\u0e27\u0e32\u0e21\u0e08\u0e33
-MainWindow.dht.status.running=\u0e14\u0e33\u0e40\u0e19\u0e34\u0e19
-ConfigView.section.file.check_piece_limit=\u0e15\u0e23\u0e27\u0e08\u0e2a\u0e48\u0e27\u0e19\u0e17\u0e35\u0e48\u0e40\u0e2b\u0e47\u0e19\u0e44\u0e14\u0e49\u0e0a\u0e31\u0e14\u0e2d\u0e22\u0e48\u0e32\u0e07\u0e21\u0e32\u0e01\n[0: \u0e44\u0e21\u0e48\u0e08\u0e33\u0e01\u0e31\u0e14]. \u0e02\u0e19\u0e32\u0e14\u0e02\u0e2d\u0e07\u0e2a\u0e48\u0e27\u0e19\u0e02\u0e36\u0e49\u0e19\u0e01\u0e31\u0e1a torrent
-ConfigView.section.file.write_block_limit=\u0e0a\u0e48\u0e27\u0e07\u0e01\u0e32\u0e23\u0e40\u0e02\u0e35\u0e22\u0e19\u0e17\u0e35\u0e48\u0e40\u0e2b\u0e47\u0e19\u0e44\u0e14\u0e49\u0e0a\u0e31\u0e14\u0e2a\u0e39\u0e07\u0e2a\u0e38\u0e14 \n[0: \u0e44\u0e21\u0e48\u0e08\u0e33\u0e01\u0e31\u0e14] \u0e02\u0e19\u0e32\u0e14\u0e0a\u0e48\u0e27\u0e07 %1
+# > 2402
+# Used for peers which we can't determine.
+PeerSocket.unknown=\u0e44\u0e21\u0e48\u0e23\u0e39\u0e49
+ConfigView.label.announceport=\u0e40\u0e02\u0e35\u0e22\u0e19\u0e17\u0e31\u0e1a tracker \u0e43\u0e19 port \u0e17\u0e35\u0e48\u0e41\u0e08\u0e49\u0e07
+iconBar.queue.tooltip=\u0e25\u0e33\u0e14\u0e31\u0e1a
+MainWindow.menu.help.faq=&Wiki \u0e04\u0e33\u0e16\u0e32\u0e21\u0e17\u0e35\u0e48\u0e16\u0e39\u0e01\u0e16\u0e32\u0e21\u0e1a\u0e48\u0e2d\u0e22
+#what you've watched? Discover more with a single click...
MainWindow.menu.help.donate=&\u0e1a\u0e23\u0e34\u0e08\u0e32\u0e04 !!!
diff --git a/org/gudy/azureus2/internat/MessagesBundle_tr_TR.properties b/org/gudy/azureus2/internat/MessagesBundle_tr_TR.properties
index cc7dbfc..b7318ed 100644
--- a/org/gudy/azureus2/internat/MessagesBundle_tr_TR.properties
+++ b/org/gudy/azureus2/internat/MessagesBundle_tr_TR.properties
@@ -1,10 +1,4 @@
-#===========================08-08-2006==========================#
-# Revised and updated by unal ==> unal[at]users.sourceforge.net #
-# Use the email above for suggestion or criticize. #
-#====================oooooooooooooooooooooooo===================#
-# Ceviri, unal tarafindan guncellenmi\u015f ve gozden gecirilmistir #
-# Elestiri ve onerileriniz icin: unal[at]users.sourceforge.net #
-#===============================================================#
+#There is a plugin to help with internationalizing these bundles at http://azureus.sourceforge.net/plugin_list.php
MainWindow.menu.file.open.torrent=Torrent Dosyas\u0131...
Main.parameter.usage=Kullan\u0131m : java org.gudy.azureus2.cl.Main [de\u011fi\u015ftirgeler] "file.torrent" "kay\u0131t yolu"
Main.parameter.maxUploads=En Fazla E\u015fanl\u0131 G\u00f6nderme say\u0131s\u0131
@@ -378,7 +372,6 @@ MyTorrentsView.menu.removeand.deletedata=Veriyi Sil
MyTorrentsView.menu.removeand.deleteboth=Her \u0130kisini de Sil
deletedata.title=Uyar\u0131
deletedata.message1=Buradaki VER\u0130'yi silmek \u00fczeresiniz :\n
-deletedata.message2=\nDevam etmek istedi\u011finizden emin misiniz?
MainWindow.menu.file.configure=Yap\u0131land\u0131rma Sihirbaz\u0131
configureWizard.title=Yap\u0131land\u0131rma Sihirbaz\u0131
configureWizard.welcome.title=Vuze Yap\u0131land\u0131rma Sihirbaz\u0131na Ho\u015f Geldiniz
@@ -512,7 +505,6 @@ ConfigView.section.tracker=\u0130zleyici
ConfigView.section.tracker.pollinterval=\u0130zleyici \u0130stemcisi Yoklama Aral\u0131\u011f\u0131 (sn)
ConfigView.section.tracker.publishenable=Torrent ayr\u0131nt\u0131lar\u0131n\u0131 "<tracker_url>" adresine yay\u0131mla
ConfigView.section.tracker.ip=\u0130zleyicinin d\u0131\u015f IP adresi
-MainWindow.menu.help.faq=S\u0131k\u00e7a Sorulan Sorular
ConfigView.section.style.enableXPStyle=XP bi\u00e7emini etkinle\u015ftir (Yeniden ba\u015flatma gerektirir)
IPChecker.external.service.dyndns.name=DynDNS
IPChecker.external.service.dyndns.url=http://www.dyndns.org/
@@ -551,7 +543,6 @@ splash.openViews=G\u00f6r\u00fcn\u00fcmler A\u00e7\u0131l\u0131yor
splash.plugin=Eklenti y\u00fckleniyor :
configureWizard.nat.tooManyPorts=S\u0131nanamayacak kadar \u00e7ok say\u0131da ba\u011flant\u0131 nokas\u0131 (en fazla 9)
ConfigView.section.color=Renk \u015eemas\u0131
-PeerSocket.unknown=Bilinmiyor
MyTorrentsView.menu.publish=Yay\u0131mla...
MyTrackerView.status.published=Yay\u0131mland\u0131
MyTrackerView.completed=Tamamland\u0131
@@ -567,8 +558,14 @@ IPChecker.external.service.no-ip.description=Devingen ve dura\u011fan DNS hizmet
ConfigView.section.tracker.publicenable=D\u0131\u015f torrentleri etkinle\u015ftir
ConfigView.label.playdownloadspeech=\u0130ndirme i\u015flemi itti\u011finde konu\u015f
ConfigView.label.playdownloadspeech.info=Konu\u015fma hizmeti \u015fu an i\u00e7in en iyi \u0130ngilizce olarak \u00e7al\u0131\u015f\u0131yor
+#
+# Tooltips
+#
GeneralView.label.trackerurl.tooltip=Duyuru adresini panoya kopyalamak i\u00e7in t\u0131klay\u0131n
GeneralView.label.trackerurlopen.tooltip=\u0130zleyici anasayfas\u0131n\u0131 a\u00e7mak i\u00e7in t\u0131klay\u0131n
+#
+# 2.0.4.4
+#
ConfigView.section.style.guiUpdate=Grafik aray\u00fcz\u00fc g\u00fcncelleme s\u0131kl\u0131\u011f\u0131
ConfigView.section.style.graphicsUpdate=Grafik aray\u00fczle birlikte grafiksel \u00e7ubuklar\u0131n g\u00fcncellenme s\u0131kl\u0131\u011f\u0131
ConfigView.section.style.reOrderDelay=Grafik aray\u00fczle birlikte tablolar\u0131n yeniden d\u00fczenlenme s\u0131kl\u0131\u011f\u0131 [0: asla]
@@ -705,7 +702,9 @@ health.explain.yellow=\u0130zleyicinin sa\u011fl\u0131kl\u0131 oldu\u011fu ve e\
health.explain.green=Her\u015fey yolunda yani sa\u011fl\u0131kl\u0131s\u0131n\u0131z demektir.
ConfigView.section.style.alwaysRefreshMyTorrents=Torrentlerimi her zaman yenile
ConfigView.section.style.alwaysRefreshMyTorrents.tooltip=Bu se\u00e7enek, g\u00f6sterilmese bile Torrentlerimin g\u00f6r\u00fcn\u00fcm\u00fcn\u00fc yeniler (baz\u0131 mirc eklentileri i\u00e7in faydal\u0131d\u0131r)
-ConfigView.section.style.verticaloffset=Grafik Yatay Ofseti (GTK onar\u0131m\u0131)
+#
+#2.0.7.0
+#
security.certtruster.title=G\u00fcvenlik Sertifika Uyar\u0131s\u0131
security.certtruster.intro=G\u00fcvenlik sertifikas\u0131 g\u00fcvenmedi\u011finiz bir \u015firket taraf\u0131ndan yay\u0131nlanm\u0131\u015f
security.certtruster.resource=Kaynak:
@@ -756,6 +755,9 @@ ConfigView.section.style.dropdiraction=Dizinler i\u00e7in s\u00fcr\u00fckle ve b
ConfigView.section.style.dropdiraction.opentorrents=A\u00e7\u0131k Torrentler
ConfigView.section.style.dropdiraction.sharefolder=Payla\u015f\u0131m Dizini
ConfigView.section.style.dropdiraction.sharefoldercontents=Payla\u015f\u0131m \u0130\u00e7eri\u011fi
+#
+# 2.0.7.x
+#
Categories.all=T\u00fcm\u00fc
Categories.uncategorized=Ulams\u0131z
CategoryAddWindow.message=Yeni ulam i\u00e7in bir ad girin
@@ -820,7 +822,6 @@ ConfigView.text.minutes=dakika
ConfigView.text.neverIgnore=Asla Yoksayma
ConfigView.text.any=herhangi biri
DownloadManager.error.datamissing=Kay\u0131p Veri
-iconBar.queue.tooltip=S\u0131ra
MainWindow.menu.file.open.torrentforseeding=Torrent Dosyas\u0131... (Yay\u0131mlamak \u0130\u00e7in)
MainWindow.menu.language.refresh=Yenile
ManagerItem.forced=Zorlayarak
@@ -889,6 +890,9 @@ SpeedView.stats.ratio=Oran
SpeedView.stats.uptime=\u00c7al\u0131\u015fma S\u00fcresi
SpeedView.stats.now=\u015eimdi
SpeedView.stats.now.tooltip=Toplam (\u0130leti\u015fim Kural\u0131)
+#
+# > 2.0.8.0
+#
OpenTorrentWindow.title=Torrent(ler)i A\u00e7
OpenTorrentWindow.message=Deneysel
OpenTorrentWindow.addFiles=Dosyalar\u0131 Ekle
@@ -1093,6 +1097,8 @@ MyTrackerView.badnat=Ge\u00e7ersiz NAT
ConfigView.section.tracker.natchecktimeout=Zaman a\u015f\u0131m\u0131n\u0131 kontrol et (sn)
ConfigView.section.file.perf.cache.enable=Disk \u00f6nbelle\u011fini etkinle\u015ftir
ConfigView.section.file.perf.cache.size=%1 olarak \u00f6nbellek boyutu
+#Removed
+#MyTorrentsView.menu.setSpeed=Set Upload Speed
MainWindow.menu.transfers=Aktar\u0131mlar
MainWindow.menu.transfers.startalltransfers=T\u00fcm\u00fcn\u00fc Ba\u015flat
MainWindow.menu.transfers.stopalltransfers=T\u00fcm\u00fcn\u00fc Durdur
@@ -1171,7 +1177,6 @@ FilesView.fullpath=Tam Yolu G\u00f6ster
FilesView.remaining=Kalan Par\u00e7alar
TableColumn.header.trackername=\u0130zleyici Ad\u0131
TableColumn.header.trackername.info=Duyuru adresinden elde edilen izleyici ad\u0131
-ConfigView.label.announceport=\u0130zleyici duyuru ba\u011flant\u0131 noktas\u0131n\u0131 ge\u00e7ersiz k\u0131l
ConfigView.group.override=Ge\u00e7ersiz K\u0131lma Se\u00e7enekleri
ConfigView.section.file.perf.cache.notsmallerthan=\u00d6nbelle\u011fe al\u0131nacak en k\u00fc\u00e7\u00fck dosya b\u00fcy\u00fckl\u00fc\u011f\u00fc (%1 olarak)
PeersView.menu.blockupload=G\u00f6ndermeyi Engelle
@@ -1199,7 +1204,6 @@ ConfigView.section.connection.advanced=Geli\u015fmi\u015f A\u011f Ayarlar\u0131
ConfigView.section.connection.advanced.mtu=Hat en y\u00fcksek iletim birimi (MTU)
ConfigView.section.connection.advanced.SO_RCVBUF=SO_RCVBUF yuva b\u00fcy\u00fckl\u00fc\u011f\u00fc [0: \u0130\u015f. Sis. varsay\u0131lan\u0131n\u0131 kullan]
ConfigView.section.connection.advanced.SO_SNDBUF=SO_SNDBUF yuva b\u00fcy\u00fckl\u00fc\u011f\u00fc [0: \u0130\u015f. Sis. varsay\u0131lan\u0131n\u0131 kullan]
-ConfigView.section.connection.advanced.IPTOS=Giden paket hizmet t\u00fcr\u00fc (TOS)
ConfigView.section.interface.confirm_torrent_removal=Torrenti kald\u0131r\u0131rken onay ileti\u015fim kutusunu g\u00f6ster
MyTorrentsView.confirm_torrent_removal=Kald\u0131rmak istedi\u011finizden emin misiniz?\n
TableColumn.header.seed_to_peer_ratio=OrtaktanE\u015fe Oran
@@ -1344,6 +1348,7 @@ MainWindow.menu.tools.nattest=NAT / G\u00fcvenlik Duvar\u0131 S\u0131namas\u0131
Button.apply=Uygula
Button.close=Kapat
window.welcome.title=Vuze %1'e Ho\u015f Geldiniz
+#file can be a URL or a path in the jar
MainWindow.menu.help.releasenotes=S\u00fcr\u00fcm Notlar\u0131
dht.reseed.group=Tekrar Yay\u0131mla
dht.reseed.ip=IP adresi
@@ -1435,8 +1440,8 @@ DHTView.general.rendezvous=Bulu\u015fma:
ConfigView.label.queue.maxactivetorrentswhenseeding=Sadece yay\u0131mlarken en fazla [0:s\u0131n\u0131rs\u0131z]
Views.plugins.IRC.title=IRC - \u00c7evrimi\u00e7i Teknik Destek
ConfigView.section.ipfilter.persistblocking=Engellenen IP ayr\u0131nt\u0131lar\u0131n\u0131 yeniden ba\u015flat\u0131rken kaydet
-FilesView.rename.choose.path=Yeni veya varolan dosyay\u0131 se\u00e7in
FilesView.menu.rename=Yeniden adland\u0131r veya hedefle
+FilesView.rename.choose.path=Yeni veya varolan dosyay\u0131 se\u00e7in
FilesView.rename.confirm.delete.title=Silme Onay\u0131
FilesView.rename.confirm.delete.text='%1' \u00f6zg\u00fcn dosyas\u0131n\u0131 silmeyi onaylay\u0131n
ConfigView.section.mode=Kip
@@ -1513,6 +1518,7 @@ PeersView.BlockView.AvailCount=Kullan\u0131l\u0131rl\u0131k kapsam\u0131
MyTorrentsView.dialog.NumberError.title=Ge\u00e7ersiz ya da bilinmeyen say\u0131
MyTorrentsView.dialog.NumberError.text=Ge\u00e7ersiz ya da bilinmeyen bir say\u0131 girdiniz.
MyTorrentsView.menu.manual=&El ile...
+# %1 = "in kbps" or ""; %2 = "upload" or "download"
MyTorrentsView.dialog.setNumber.upload=g\u00f6nderme
MyTorrentsView.dialog.setNumber.download=indirme
MyTorrentsView.dialog.setNumber.inKbps=in kb/s
@@ -1535,7 +1541,6 @@ OpenTorrentWindow.mb.alreadyExists.text=%1' torrenti '%2' olarak zaten eklenmi\u
OpenTorrentWindow.mb.alreadyExists.title=Torrent zaten mevcut
OpenTorrentWindow.mb.openError.title=A\u00e7ma Hatas\u0131
OpenTorrentWindow.mb.openError.text='%1' a\u00e7\u0131lamad\u0131:
-\n%2
OpenTorrentWindow.torrent.remove=Torrenti listeden kald\u0131r
OpenTorrentWindow.torrent.options=A\u015fa\u011f\u0131daki ayarlar yukar\u0131da se\u00e7ilmi\u015f olan torrentlere uygulanacak:
OpenTorrentWindow.xOfTotal=(%2'de %1)
@@ -1598,7 +1603,6 @@ TorrentOptionsView.param.max.uploads=En fazla g\u00f6nderme yuva say\u0131s\u013
MyTorrentsView.dialog.setPosition.title=Konumu Ayarla
MyTorrentsView.dialog.setPosition.text=Se\u00e7ilen torrent i\u00e7in yeni bir konum girin
MyTorrentsView.menu.reposition.manual=Tekrar Konumland\u0131r..
-TorrentOptionsView.param.max.uploads.when.seeding.enable=Yay\u0131mlama s\u0131ras\u0131ndaki g\u00f6nderme yuvas\u0131 say\u0131s\u0131
ConfigView.section.connection.advanced.info.link=Ayr\u0131nt\u0131lar i\u00e7in l\u00fctfen buray\u0131 t\u0131klay\u0131p a\u00e7\u0131lan siteyi ziyaret edin
ConfigView.section.connection.advanced.socket.group=Yuva Se\u00e7enekleri
ConfigView.section.connection.advanced.bind_port=Yerel ba\u011flant\u0131 noktas\u0131na ba\u011fla [0: Etkisiz]
@@ -1617,13 +1621,14 @@ ConfigView.section.file.resume.recheck.all=\u00c7\u00f6k\u00fc\u015f sonras\u013
ConfigureWizard.language.choose=A\u015fa\u011f\u0131daki listeden bir dil se\u00e7in:
popup.closing.in=Pencere %1 saniye i\u00e7inde kapanacak
popup.more.waiting=%1 ileti daha..
+# > 2402
popup.download.finished="%1" i\u015flemi tamamland\u0131.
popup.file.finished="%1" dosyas\u0131 indirildi.
ConfigView.auto=Otomatik
Plugin.localtracker.autoadd.info=Bu yerel e\u015fleri otomatik ekle [';' ile ayr\u0131lm\u0131\u015f adresler, \u00f6rne\u011fin 1.2.3.4]
-Plugin.localtracker.autoadd= Belirgin e\u015fler
+Plugin.localtracker.autoadd=Belirgin e\u015fler
Plugin.localtracker.networks.info=A\u015fa\u011f\u0131daki a\u011flar\u0131n yerel oldu\u011funu varsay [';' ile ayr\u0131lm\u0131\u015f a\u011flar, \u00f6rne\u011fin 145.227.*.*]
-Plugin.localtracker.networks= Yerel a\u011flar
+Plugin.localtracker.networks=Yerel a\u011flar
MainWindow.menu.view.plugins.logViews=G\u00fcnl\u00fcklere G\u00f6z At
SpeedView.stats.autospeed=Otomatik G\u00f6nderme H\u0131z\u0131
SpeedView.stats.autospeed.disabled=Bu \u00f6zellik etkin de\u011fil (DHT'ye ihtiyac\u0131n\u0131z var) veya kullan\u0131mda de\u011fil (g\u00f6nderme h\u0131z\u0131 elle ayarlanm\u0131\u015f)
@@ -1713,7 +1718,6 @@ MainWindow.menu.view.iconbar=Ara\u00e7 \u00c7ubu\u011fu
MyTorrentsView.menu.rename=Ad De\u011fi\u015ftir
MyTorrentsView.menu.rename.displayed=G\u00f6r\u00fcnen Ad\u0131 De\u011fi\u015ftir
MyTorrentsView.menu.rename.save_path=Kay\u0131t Yolunu De\u011fi\u015ftir
-MyTorrentsView.menu.rename.displayed_and_save_path=Her \u0130kisini De\u011fi\u015ftir
UIDebugGenerator.messageask.title=Hata Ay\u0131klama Bilgisi Olu\u015fturucu
UIDebugGenerator.messageask.text=Rapor etmek istedi\u011finiz hata i\u00e7in bir tan\u0131mlama girin
UIDebugGenerator.complete.title=Hata Ay\u0131klama Bilgisi Olu\u015fturma Tamamland\u0131
@@ -1737,24 +1741,10 @@ ConfigView.label.popup.autohide=Hata bildirmeyen uyar\u0131lar\u0131 \u015fu s\u
ConfigView.label.please.visit.here=L\u00fctfen ayr\u0131nt\u0131lar i\u00e7in buray\u0131 ziyaret edin
ConfigView.section.ipfilter.enable.descriptionCache=IP tan\u0131mlar\u0131n\u0131 ge\u00e7ici k\u00fct\u00fckte sakla
ConfigView.section.ipfilter.enable.descriptionCache.tooltip=Devre d\u0131\u015f\u0131 oldu\u011funda tan\u0131mlar hat\u0131rlanmaz
-# The remaining keys were not in MessagesBundle.properties
-ConfigView.section.file.check_piece_limit.explain=If you have a slow CPU such that hash calculations lag behind disk writing (numerous complete pieces in pieces view), limiting check queue length may decrease memory usage
-ConfigView.section.file.write_block_limit.explain=If you have slow disk write performance such that disk writing is slower than download speed (numerous red blocks in pieces view), limiting write queue length may decrease memory usage
-MainWindow.dht.status.running=\u00c7al\u0131\u015f\u0131yor
-ConfigView.section.file.check_piece_limit=Maximum outstanding check pieces\n[0: unlimited]. Piece size depends on torrent
-ConfigView.section.file.write_block_limit=Maximum outstanding disk block writes\n[0: unlimited]. Block size %1
-MyTorrentsView.menu.rename.enter.message=Yeni bir ad girin.
-ConfigView.section.tracker.forceport.tooltip=Bulundurulan d\u0131\u015fsal torrentleri, varsay\u0131lan ba\u011flant\u0131 noktas\u0131n\u0131 kullanmalar\u0131 i\u00e7in zorlar
-This=tool lets you test and / or change the port used to accept incoming peer connections.\n\nNOTE: This tool only tests for TCP connections. The Distributed DB requires incoming UDP connections as well, but will automatically notify you if it discovers a blocking firewall.\n\nNOTE: TCP port 6880 is reserved internally, so it cannot be used.
-ConfigView.section.tracker.client.scrapesingleonly.tooltip=['URL too long' (414) hata raporunu g\u00f6nderen izleyiciler sorununa yard\u0131mc\u0131 olur]
-ConfigView.section.transfer.autospeed.downadjratio.tooltip=\u00d6rne\u011fin 2.0 -> indirme h\u0131z\u0131 g\u00f6nderme h\u0131z\u0131n\u0131n iki kat\u0131 olacakt\u0131r
-ConfigView.section.tracker.tcpnonblocking.tooltip=Selecting this option requires the tracker web to be run on an alternative port. Experimental!
-MyTorrentsView.menu.rename.enter.title=\u0130ndirilenin Ad\u0131n\u0131 De\u011fi\u015ftir
-ConfigView.label.popup.autohide.tooltip=Otomatik gizlemeyi devre d\u0131\u015f\u0131 b\u0131rakmak i\u00e7in 0 olarak ayarlay\u0131n
-ConfigView.section.tracker.host.addurls.tooltip=Bu izleyicide bulundurulan torrentlerin i\u00e7erdikleri adreslerin, bu izleyicinin adresi olup olmad\u0131\u011f\u0131n\u0131n denetimini yapar
-MyTorrentsView.menu.rename.enter.message.2=E\u011fer hi\u00e7bir metin girilmezse, \u00f6zg\u00fcn ad kullan\u0131lacak.
-ConfigView.section.file.resume.recheck.all.tooltip=E\u011fer i\u015faretlenmemi\u015fse, sadece etkin olan son par\u00e7alar denetlenir. B\u00f6ylece veri do\u011frulama s\u00fcresi \u00e7ok daha k\u0131sa olur.
-ConfigView.section.transfer.autospeed.latencyfactor.tooltip=Say\u0131 b\u00fcy\u00fcd\u00fck\u00e7e, duyarl\u0131l\u0131k azal\u0131r
-ConfigView.section.tracker.separatepeerids.tooltip=Anonim olmayan bir izleyici kullan\u0131l\u0131rken indirilen/yay\u0131mlanan torrentin anonimli\u011fini artt\u0131r\u0131r.
-ConfigView.label.lazybitfield.tooltip=\u0130kil alan temelli engelleme y\u00f6ntemi kullanan a\u011flarda yay\u0131mlamaya yard\u0131mc\u0131 olur
+# Used for peers which we can't determine.
+PeerSocket.unknown=Bilinmiyor
+ConfigView.label.announceport=\u0130zleyici duyuru ba\u011flant\u0131 noktas\u0131n\u0131 ge\u00e7ersiz k\u0131l
+iconBar.queue.tooltip=S\u0131ra
+MainWindow.menu.help.faq=S\u0131k\u00e7a Sorulan Sorular
+#what you've watched? Discover more with a single click...
MainWindow.menu.help.donate=Ba\u011f\u0131\u015f Yap
diff --git a/org/gudy/azureus2/internat/MessagesBundle_uk_UA.properties b/org/gudy/azureus2/internat/MessagesBundle_uk_UA.properties
index 6d6612d..f47bad3 100644
--- a/org/gudy/azureus2/internat/MessagesBundle_uk_UA.properties
+++ b/org/gudy/azureus2/internat/MessagesBundle_uk_UA.properties
@@ -730,7 +730,6 @@ ConfigView.section.style.alwaysRefreshMyTorrents.tooltip=\u0426\u044f \u0444\u04
#
#2.0.7.0
#
-ConfigView.section.style.verticaloffset=\u0412\u0435\u0440\u0442\u0438\u043a\u0430\u043b\u044c\u043d\u0438\u0439 \u0437\u0441\u0443\u0432 \u0433\u0440\u0430\u0444\u0456\u043a\u0438 (\u0432\u0438\u043f\u0440\u0430\u0432\u043b\u0435\u043d\u043d\u044f \u0434\u043b\u044f \u0431\u0456\u0431\u043b\u0456\u043e\u0442\u0435\u043a\u0438 GTK)
security.certtruster.title=\u041f\u043e\u043f\u0435\u0440\u0435\u0434\u0436\u0435\u043d\u043d\u044f \u043f\u0440\u043e \u0441\u0435\u0440\u0442\u0438\u0444\u0456\u043a\u0430\u0442 \u0431\u0435\u0437\u043f\u0435\u043a\u0438
security.certtruster.intro=\u0426\u0435\u0439 \u0441\u0435\u0440\u0442\u0438\u0444\u0456\u043a\u0430\u0442 \u0431\u0435\u0437\u043f\u0435\u043a\u0438 \u0431\u0443\u0432 \u0441\u0442\u0432\u043e\u0440\u0435\u043d\u0438\u0439 \u0444\u0456\u0440\u043c\u043e\u044e, \u044f\u043a\u0456\u0439 \u0412\u0438 \u043d\u0435 \u0434\u043e\u0432\u0456\u0440\u044f\u0454\u0442\u0435
security.certtruster.resource=\u0414\u0436\u0435\u0440\u0435\u043b\u043e:
@@ -1953,13 +1952,8 @@ MainWindow.menu.view.iconbar=\u041f\u0430\u043d\u0435\u043b\u044c \u0456\u043d\u
MyTorrentsView.menu.rename=\u041f\u0435\u0440\u0435\u0439\u043c\u0435\u043d\u0443\u0432\u0430\u0442\u0438
MyTorrentsView.menu.rename.displayed=\u041f\u0435\u0440\u0435\u0439\u043c\u0435\u043d\u0443\u0432\u0430\u0442\u0438 \u0432\u043a\u0430\u0437\u0430\u043d\u0435 \u0456\u043c'\u044f
MyTorrentsView.menu.rename.save_path=\u041f\u0435\u0440\u0435\u0439\u043c\u0435\u043d\u0443\u0432\u0430\u0442\u0438 \u0448\u043b\u044f\u0445 \u0437\u0431\u0435\u0440\u0435\u0436\u0435\u043d\u043d\u044f
-MyTorrentsView.menu.rename.displayed_and_save_path=\u041f\u0435\u0440\u0435\u0439\u043c\u0435\u043d\u0443\u0432\u0430\u0442\u0438 \u043e\u0431\u0438\u0434\u0432\u0430
MyTorrentsView.menu.rename.displayed.enter.title=\u041f\u0435\u0440\u0435\u0439\u043c\u0435\u043d\u0443\u0432\u0430\u0442\u0438 \u0432\u043a\u0430\u0437\u0430\u043d\u0435 \u0456\u043c'\u044f
MyTorrentsView.menu.rename.displayed.enter.message=\u0412\u043a\u0430\u0436\u0456\u0442\u044c \u043d\u043e\u0432\u0435 \u0456\u043c'\u044f, \u044f\u043a\u0435 \u0434\u0456\u044f\u0442\u0438\u043c\u0435 \u0434\u043b\u044f \u0446\u044c\u043e\u0433\u043e \u0437\u0430\u0432\u0430\u043d\u0442\u0430\u0436\u0435\u043d\u043d\u044f.
-MyTorrentsView.menu.rename.save_path.enter.title=\u041f\u0435\u0440\u0435\u0439\u043c\u0435\u043d\u0443\u0432\u0430\u0442\u0438 \u0448\u043b\u044f\u0445 \u0437\u0431\u0435\u0440\u0435\u0436\u0435\u043d\u043d\u044f
-MyTorrentsView.menu.rename.save_path.enter.message=\u0412\u043a\u0430\u0436\u0456\u0442\u044c \u043d\u043e\u0432\u0435 \u0440\u043e\u0437\u0442\u0430\u0448\u0443\u0432\u0430\u043d\u043d\u044f \u0437\u0431\u0435\u0440\u0435\u0436\u0435\u043d\u043d\u044f \u0434\u043b\u044f \u0446\u044c\u043e\u0433\u043e \u0437\u0430\u0432\u0430\u043d\u0442\u0430\u0436\u0435\u043d\u043d\u044f .
-MyTorrentsView.menu.rename.displayed_and_save_path.enter.title=\u041f\u0435\u0440\u0435\u0439\u043c\u0435\u043d\u0443\u0432\u0430\u0442\u0438 \u0437\u0430\u0432\u0430\u043d\u0442\u0430\u0436\u0435\u043d\u043d\u044f
-MyTorrentsView.menu.rename.displayed_and_save_path.enter.message=\u0412\u043a\u0430\u0436\u0456\u0442\u044c \u043d\u043e\u0432\u0435 \u0456\u043c'\u044f \u0434\u043b\u044f \u0446\u044c\u043e\u0433\u043e \u0437\u0430\u0432\u0430\u043d\u0442\u0430\u0436\u0435\u043d\u043d\u044f
MyTorrentsView.menu.edit_comment=\u0420\u0435\u0434\u0430\u0433\u0443\u0432\u0430\u0442\u0438 \u043a\u043e\u043c\u0435\u043d\u0442\u0430\u0440
MyTorrentsView.menu.edit_comment.enter.title=\u0420\u0435\u0434\u0430\u0433\u0443\u0432\u0430\u0442\u0438 \u043a\u043e\u043c\u0435\u043d\u0442\u0430\u0440
MyTorrentsView.menu.edit_comment.enter.message=\u041d\u0430\u043f\u0438\u0441\u0430\u0442\u0438 \u043a\u043e\u043c\u0435\u043d\u0442\u0430\u0440 \u0434\u043b\u044f \u0446\u044c\u043e\u0433\u043e \u0437\u0430\u0432\u0430\u043d\u0442\u0430\u0436\u0435\u043d\u043d\u044f.
@@ -2172,7 +2166,6 @@ v3.MainWindow.button.comment=\u0414\u043e\u0434\u0430\u0442\u0438 \u043a\u043e\u
v3.MainWindow.button.viewdetails=\u0414\u0438\u0432\u0438\u0442\u0438\u0441\u044f \u043f\u043e\u0434\u0440\u043e\u0431\u0438\u0446\u0456
v3.MainWindow.button.play=\u0412\u0456\u0434\u0442\u0432\u043e\u0440\u0438\u0442\u0438
v3.MainWindow.button.cancel=\u0421\u043a\u0430\u0441\u0443\u0432\u0430\u0442\u0438
-v3.MainWindow.button.sendtofriend=\u0420\u043e\u0437\u0434\u0430\u0442\u0438 \u0442\u043e\u0440\u0435\u043d\u0442
v3.MainWindow.button.preview=\u041f\u043e\u043f\u0435\u0440\u0435\u0434\u043d\u0456\u0439 \u043f\u0435\u0440\u0435\u0433\u043b\u044f\u0434
v3.MainWindow.view.wait=\u0406\u043d\u0456\u0446\u0456\u0430\u043b\u0456\u0437\u0443\u0454\u0442\u044c\u0441\u044f \u0432\u0438\u0433\u043b\u044f\u0434, \u0431\u0443\u0434\u044c \u043b\u0430\u0441\u043a\u0430, \u0437\u0430\u0447\u0435\u043a\u0430\u0439\u0442\u0435.
v3.MainWindow.xofx=%1 \u0437 %2
@@ -2477,53 +2470,17 @@ Button.bar.share=\u0420\u043e\u0437\u0434\u0430\u0442\u0438
Button.bar.add=\u0414\u043e\u0434\u0430\u0442\u0438
Button.bar.edit=\u0420\u0435\u0434\u0430\u0433\u0443\u0432\u0430\u0442\u0438
Button.bar.edit.cancel=\u0417\u0430\u043a\u0456\u043d\u0447\u0438\u0442\u0438 \u0440\u0435\u0434\u0430\u0433\u0443\u0432\u0430\u043d\u043d\u044f
-v3.Share.menu=\u0412\u043c\u0456\u0441\u0442 \u0440\u043e\u0437\u0434\u0430\u0447\u0456
-v3.Share.header=\u0420\u043e\u0437\u0434\u0430\u0447\u0430
-v3.Share.header.message=\u0420\u043e\u0437\u0434\u0430\u0442\u0438 \u0437 \u043f\u043e\u0442\u043e\u0447\u043d\u0438\u043c\u0438 \u043f\u0440\u0438\u044f\u0442\u0435\u043b\u044f\u043c\u0438, \u0430\u0431\u043e \u0434\u043e\u0434\u0430\u0442\u0438 \u043d\u043e\u0432\u0438\u0445 \u043f\u0440\u0438\u044f\u0442\u0435\u043b\u0456\u0432.
-v3.Share.add.buddy=\u0414\u043e\u0434\u0430\u0442\u0438 \u043f\u0440\u0438\u044f\u0442\u0435\u043b\u0456\u0432
-v3.Share.add.edit.buddy=\u0414\u043e\u0434\u0430\u0442\u0438 \u0430\u0431\u043e \u0440\u0435\u0434\u0430\u0433\u0443\u0432\u0430\u0442\u0438 \u0441\u043f\u0438\u0441\u043e\u043a \u043f\u0440\u0438\u044f\u0442\u0435\u043b\u0456\u0432
-v3.Share.add.buddy.all=\u0420\u043e\u0437\u0434\u0430\u0442\u0438 \u0437 \u0443\u0441\u0456\u043c\u0430
-v3.Share.add.buddy.existing=\u041d\u0430\u044f\u0432\u043d\u0456 \u043f\u0440\u0438\u044f\u0442\u0435\u043b\u0456:
-v3.Share.add.buddy.new=\u041d\u043e\u0432\u0456 \u043f\u0440\u0438\u044f\u0442\u0435\u043b\u0456:
-v3.Share.buddies=\u041f\u0440\u0438\u044f\u0442\u0435\u043b\u0456
-v3.Share.invitees=\u0417\u0430\u043f\u0440\u043e\u0448\u0435\u043d\u0456
-v3.Share.invite.buddies.prompt=\u0417\u0430\u043f\u0440\u043e\u0441\u0456\u0442\u044c \u0431\u0456\u043b\u044c\u0448\u0435 \u043f\u0440\u0438\u044f\u0442\u0435\u043b\u0456\u0432 \u0434\u043e \u0440\u043e\u0437\u0434\u0430\u0447\u0456
-v3.Share.send.now=\u041d\u0430\u0434\u0456\u0441\u043b\u0430\u0442\u0438
-v3.Share.optional.message=\u041d\u0435\u043e\u0431\u043e\u0432'\u044f\u0437\u043a\u043e\u0432\u0435 \u043f\u043e\u0432\u0456\u0434\u043e\u043c\u043b\u0435\u043d\u043d\u044f, \u0434\u043e\u0441\u0442\u0430\u0432\u043b\u0435\u043d\u0435 \u0447\u0435\u0440\u0435\u0437 \u0440\u043e\u0437\u0441\u0438\u043b\u043a\u0443 \u0430\u043a\u0442\u0438\u0432\u043d\u043e\u0441\u0442\u0456 (\u043c\u0430\u043a\u0441\u0438\u043c\u0443\u043c 140 \u0441\u0438\u043c\u0432\u043e\u043b\u0456\u0432):
-v3.Share.disclaimer=\u041f\u0440\u0438\u043c\u0456\u0442\u043a\u0430: \u0412\u043c\u0456\u0441\u0442 \u0412\u0430\u0448\u043e\u0457 \u0440\u043e\u0437\u0434\u0430\u0447\u0456, \u044f\u043a \u0456 \u0446\u0435 \u043d\u0435\u043e\u0431\u043e\u0432'\u044f\u0437\u043a\u043e\u0432\u0435 \u043f\u043e\u0432\u0456\u0434\u043e\u043c\u043b\u0435\u043d\u043d\u044f \u043a\u043e\u0434\u0443\u0432\u0430\u0442\u0438\u043c\u0443\u0442\u044c\u0441\u044f.
-v3.Share.disclaimer.link=\u041f\u0440\u043e\u0447\u0438\u0442\u0430\u0442\u0438 \u0431\u0456\u043b\u044c\u0448\u0435
-ConfigView.section.security.vuze.login=\u0412\u0438 \u043f\u043e\u0432\u0438\u043d\u043d\u0456 \u0431\u0443\u0442\u0438 \u0437\u0430\u0440\u0435\u0454\u0441\u0442\u0440\u043e\u0432\u0430\u043d\u0456 \u0432 Vuze, \u0449\u043e\u0431 \u0432\u0438\u043a\u043e\u043d\u0443\u0432\u0430\u0442\u0438 \u0446\u044e \u0434\u0456\u044e
-v3.buddy.menu.viewprofile=\u041f\u0435\u0440\u0435\u0433\u043b\u044f\u043d\u0443\u0442\u0438 \u043f\u0440\u043e\u0444\u0456\u043b\u044c
-v3.buddy.menu.remove=\u0412\u0438\u043b\u0443\u0447\u0438\u0442\u0438 \u043f\u0440\u0438\u044f\u0442\u0435\u043b\u044f
v3.MainWindow.menu.view.pluginbar=\u041f\u0430\u043d\u0435\u043b\u044c \u0456\u043d\u0441\u0442\u0440\u0443\u043c\u0435\u043d\u0442\u0456\u0432 \u0434\u043e\u043f\u043e\u0432\u043d\u0435\u043d\u043d\u044f
-v3.MainWindow.menu.view.buddies-viewer=\u041f\u0430\u043d\u0435\u043b\u044c \u043f\u0440\u0438\u044f\u0442\u0435\u043b\u0456\u0432
-v3.activity.buddy-request=\u0412\u0430\u043c \u043d\u0430\u0434\u0456\u0441\u043b\u0430\u043d\u043e \u0437\u0430\u043f\u0438\u0442 \u0441\u0442\u0430\u0442\u0438 \u043f\u0440\u0438\u044f\u0442\u0435\u043b\u0435\u043c \u0432\u0456\u0434 %1\n\n<A HREF="%2" TARGET="minibrowse">\u0417\u0413\u041e\u0414\u0410</A>
-v3.activity.buddy-request.accept=\u0417\u0430\u0441\u0442\u043e\u0441\u0443\u0432\u0430\u0442\u0438
-v3.activity.buddy-request.multi=\u0412\u0430\u0445 \u043d\u0430\u0434\u0456\u0441\u043b\u0430\u043d\u043e \u0437\u0430\u043f\u0438\u0442 \u0441\u0442\u0430\u0442\u0438 \u043f\u0440\u0438\u044f\u0442\u0435\u043b\u0435\u043c [#%3] \u0432\u0456\u0434 %1\n\n<A HREF="%2" TARGET="minibrowse">\u0417\u0413\u041e\u0414\u0410</A>
-v3.activity.buddy-linkup=\u0412\u0438 \u0437 %1 \u0432\u0456\u0434\u0442\u0435\u043f\u0435\u0440 \u0441\u0442\u0430\u043b\u0438 \u043f\u0440\u0438\u044f\u0442\u0435\u043b\u044f\u043c\u0438
-v3.activity.share-content=%1 \u0440\u043e\u0437\u0434\u0430\u0432 %2 \u0437 \u0412\u0430\u043c\u0438\n\n\u041f\u043e\u0432\u0456\u0434\u043e\u043c\u043b\u0435\u043d\u043d\u044f \u0432\u0456\u0434 %3:\n%4
-v3.activity.share-content.no-msg=%1 \u0440\u043e\u0437\u0434\u0430\u0432 %2 \u0437 \u0432\u0430\u043c\u0438
-v3.buddies.friends=\u041f\u0440\u0438\u044f\u0442\u0435\u043b\u0456
-v3.buddies.online=\u0412 \u043c\u0435\u0440\u0435\u0436\u0456 (%1)
-v3.buddies.remove=\u0412\u0438\u043b\u0443\u0447\u0438\u0442\u0438 \u043f\u0440\u0438\u044f\u0442\u0435\u043b\u044f
-v3.buddies.add.to.share=\u0414\u043e\u0434\u0430\u0442\u0438 \u043f\u0440\u0438\u044f\u0442\u0435\u043b\u044f \u0434\u043e \u0440\u043e\u0437\u0434\u0430\u0447\u0456
MainWindow.dialog.select.vuze.file=\u0412\u0438\u0431\u0435\u0440\u0456\u0442\u044c \u0444\u0430\u0439\u043b Vuze
MainWindow.menu.file.open.vuze=\u0424\u0430\u0439\u043b Vuze...
-azbuddy.ui.dialog.disable.title=\u0412\u0438\u043c\u043a\u043d\u0443\u0442\u0438 \u0434\u043e\u043f\u043e\u0432\u043d\u0435\u043d\u043d\u044f "\u041f\u0440\u0438\u044f\u0442\u0435\u043b\u0456"
-azbuddy.ui.dialog.disable.text=\u0412\u0438\u043c\u043a\u043d\u0435\u043d\u043d\u044f \u0434\u043e\u043f\u043e\u0432\u043d\u0435\u043d\u043d\u044f "\u041f\u0440\u0438\u044f\u0442\u0435\u043b\u0456" \u043f\u0435\u0440\u0435\u0441\u0442\u0430\u043d\u0435 \u043d\u0430\u0434\u0430\u0432\u0430\u0442\u0438 \u0412\u0430\u0445 \u043f\u0435\u0440\u0435\u0432\u0430\u0433\u0438 \u043f\u0440\u0438 \u0432\u0438\u043a\u043e\u0440\u0438\u0441\u0442\u0430\u043d\u043d\u0456 \u0442\u043e\u0440\u0435\u043d\u0442\u0456\u0432 \u0437 \u041f\u0430\u043d\u0435\u043b\u0456 \u043f\u0440\u0438\u044f\u0442\u0435\u043b\u0456\u0432, \u044f\u043a\u0430 \u0437\u043d\u0430\u0445\u043e\u0434\u0438\u0442\u044c\u0441\u044f \u0437\u043d\u0438\u0437\u0443 \u0456\u043d\u0442\u0435\u0440\u0444\u0435\u0439\u0441\u0443 \u0437\u0430\u0441\u0442\u043e\u0441\u0443\u043d\u043a\u0443, \u0456 \u043d\u0435 \u0434\u0430\u0432\u0430\u0442\u0438\u043c\u0435 \u0412\u0430\u0445 \u0437\u043c\u0456\u043d\u044e\u0432\u0430\u0442\u0438 \u0441\u043f\u0438\u0441\u043e\u043a \u0434\u0440\u0443\u0437\u0456\u0432.\n\n\u0412\u0438 \u0441\u043f\u0440\u0430\u0432\u0434\u0456 \u0445\u043e\u0447\u0435\u0442\u0435 \u0432\u0438\u043c\u043a\u043d\u0443\u0442\u0438 \u0434\u043e\u043f\u043e\u0432\u043d\u0435\u043d\u043d\u044f?
metasearch.addtemplate.title=\u0412\u0441\u0442\u0430\u043d\u043e\u0432\u0438\u0442\u0438 \u043f\u043e\u0448\u0443\u043a\u043e\u0432\u0438\u0439 \u0448\u0430\u0431\u043b\u043e\u043d?
metasearch.addtemplate.desc=\u0412\u0438 \u0441\u043f\u0440\u0430\u0432\u0434\u0456 \u0445\u043e\u0447\u0435\u0442\u0435 \u0432\u0441\u0442\u0430\u043d\u043e\u0432\u0438\u0442\u0438 \u043f\u043e\u0448\u0443\u043a\u043e\u0432\u0438\u0439 \u0448\u0430\u0431\u043b\u043e\u043d '%1'?
v3.share.private.title=\u0420\u043e\u0437\u0434\u0430\u0447\u0430 \u0442\u043e\u0440\u0435\u043d\u0442\u0443
v3.share.private.text=\u0412\u0438\u0431\u0440\u0430\u043d\u0438\u0439 \u0442\u043e\u0440\u0435\u043d\u0442 \u043f\u043e\u0437\u043d\u0430\u0447\u0435\u043d\u0438\u0439 \u044f\u043a "\u041e\u0441\u043e\u0431\u0438\u0441\u0442\u0438\u0439 \u0442\u043e\u0440\u0435\u043d\u0442".\n\n\u0412\u0438 \u043d\u0435 \u043c\u043e\u0436\u0435\u0442\u0435 \u043a\u0435\u0440\u0443\u0432\u0430\u0442\u0438 \u043e\u0441\u043e\u0431\u0438\u0441\u0442\u0438\u043c\u0438 \u0442\u043e\u0440\u0435\u043d\u0442\u0430\u043c\u0438.
-v3.buddies.disabled.title=\u0412\u0438\u043c\u043a\u043d\u0443\u0442\u0435 \u0434\u043e\u043f\u043e\u0432\u043d\u0435\u043d\u043d\u044f "\u041f\u0440\u0438\u044f\u0442\u0435\u043b\u0456"
-v3.buddies.disabled.text._windows=\u0412\u0438 \u0432\u0438\u043c\u043a\u043d\u0443\u043b\u0438 \u0434\u043e\u043f\u043e\u0432\u043d\u0435\u043d\u043d\u044f "\u041f\u0440\u0438\u044f\u0442\u0435\u043b\u0456", \u0449\u043e \u043d\u0435 \u0434\u0430\u0432\u0430\u0442\u0438\u043c\u0435 \u0412\u0430\u043c \u0440\u043e\u0437\u0434\u0430\u0432\u0430\u0442\u0438 \u0430\u0431\u043e \u043f\u0440\u0438\u0439\u043c\u0430\u0442\u0438 \u0442\u043e\u0440\u0435\u043d\u0442\u0438 \u0447\u0438 \u0437\u0430\u043f\u0438\u0442\u0438 \u0434\u0440\u0443\u0437\u0456\u0432. \u0412\u0438 \u043c\u043e\u0436\u0435\u0442\u0435 \u0437\u043c\u0456\u043d\u0438\u0442\u0438 \u0441\u0432\u043e\u0457 \u043d\u0430\u043b\u0430\u0448\u0442\u0443\u0432\u0430\u043d\u043d\u044f \u043d\u0430 \u043f\u0430\u043d\u0435\u043b\u0456 "\u041e\u043f\u0446\u0456\u0457".
-v3.buddies.disabled.text._mac=\u0412\u0438 \u0432\u0438\u043c\u043a\u043d\u0443\u043b\u0438 \u0434\u043e\u043f\u043e\u0432\u043d\u0435\u043d\u043d\u044f "\u041f\u0440\u0438\u044f\u0442\u0435\u043b\u0456", \u0449\u043e \u043d\u0435 \u0434\u0430\u0432\u0430\u0442\u0438\u043c\u0435 \u0412\u0430\u043c \u0440\u043e\u0437\u0434\u0430\u0432\u0430\u0442\u0438 \u0430\u0431\u043e \u043f\u0440\u0438\u0439\u043c\u0430\u0442\u0438 \u0442\u043e\u0440\u0435\u043d\u0442\u0438 \u0447\u0438 \u0437\u0430\u043f\u0438\u0442\u0438 \u0434\u0440\u0443\u0437\u0456\u0432. \u0412\u0438 \u043c\u043e\u0436\u0435\u0442\u0435 \u0437\u043c\u0456\u043d\u0438\u0442\u0438 \u0441\u0432\u043e\u0457 \u043d\u0430\u043b\u0430\u0448\u0442\u0443\u0432\u0430\u043d\u043d\u044f \u043d\u0430 \u043f\u0430\u043d\u0435\u043b\u0456 "\u041e\u043f\u0446\u0456\u0457".
metasearch.addtemplate.dup.title=\u0414\u0443\u0431\u043b\u044e\u0432\u0430\u0442\u0438 \u0448\u0430\u0431\u043b\u043e\u043d
metasearch.addtemplate.dup.desc=\u041f\u043e\u0448\u0443\u043a\u043e\u0432\u0438\u0439 \u0448\u0430\u0431\u043b\u043e\u043d %1 \u0432\u0436\u0435 \u0432\u0441\u0442\u0430\u043d\u043e\u0432\u043b\u0435\u043d\u0438\u0439
metasearch.export.select.template.file=\u0417\u0431\u0435\u0440\u0435\u0433\u0442\u0438 \u0448\u0430\u0431\u043b\u043e\u043d
metasearch.import.select.template.file=\u0412\u0456\u0434\u043a\u0440\u0438\u0442\u0438 \u0448\u0430\u0431\u043b\u043e\u043d
-v3.MainWindow.button.newtag.share=\u041d\u043e\u0432\u0438\u0439 \u0442\u043e\u0440\u0435\u043d\u0442!
-v3.buddies.faq=\u041f\u0440\u043e\u0447\u0438\u0442\u0430\u0442\u0438 \u0431\u0456\u043b\u044c\u0448\u0435
dialog.uiswitch.title=\u041f\u0435\u0440\u0435\u043c\u0438\u043a\u0430\u043d\u043d\u044f \u0432 \u043e\u0444\u043e\u0440\u043c\u043b\u0435\u043d\u043d\u044f Vuze
dialog.uiswitch.text=\u0414\u043b\u044f \u0432\u0438\u043a\u043e\u0440\u0438\u0441\u0442\u0430\u043d\u043d\u044f \u0446\u0456\u0454\u0457 \u043c\u043e\u0436\u043b\u0438\u0432\u043e\u0441\u0442\u0456 \u0432\u0438\u0431\u0435\u0440\u0456\u0442\u044c \u0456\u043d\u0442\u0435\u0440\u0444\u0435\u0439\u0441 Vuze.\n\nVuze \u043f\u0435\u0440\u0435\u0437\u0430\u043f\u0443\u0441\u0442\u0438\u0442\u044c\u0441\u044f.
dialog.uiswitch.button=\u041f\u0435\u0440\u0435\u043c\u043a\u043d\u0443\u0442\u0438 \u043e\u0444\u043e\u0440\u043c\u043b\u0435\u043d\u043d\u044f Vuze
@@ -2531,25 +2488,10 @@ azbuddy.tracker.enabled=\u0412\u0432\u0456\u043c\u043a\u043d\u0443\u0442\u0438 '
azbuddy.protocolspeed=\u0412\u0435\u0440\u0445\u043d\u044f \u043c\u0435\u0436\u0430 \u043f\u0440\u043e\u0442\u043e\u043a\u043e\u043b\u0443 \u043f\u0440\u0438\u044f\u0442\u0435\u043b\u044f, \u041a\u0431\u0456\u0442/\u0441
v3.MainWindow.button.download=\u0417\u0430\u0431\u0440\u0430\u0442\u0438
v3.MainWindow.button.run=\u0417\u0430\u043f\u0443\u0441\u0442\u0438\u0442\u0438 \u0437\u0430\u0432\u0430\u043d\u0442\u0430\u0436\u0435\u043d\u0438\u0439 \u0444\u0430\u0439\u043b
-v3.activity.header.friend.requests.foryou=\u0417\u0430\u043f\u0438\u0442 \u0441\u0442\u0430\u0442\u0438 \u043f\u0440\u0438\u044f\u0442\u0435\u043b\u0435\u043c - \u0414\u043b\u044f \u0412\u0430\u0441
-v3.activity.header.friend.requests.fromyou=\u0417\u0430\u043f\u0438\u0442 \u0441\u0442\u0430\u0442\u0438 \u043f\u0440\u0438\u044f\u0442\u0435\u043b\u0435\u043c - \u0412\u0456\u0434 \u0412\u0430\u0441
-v3.activity.header.friend.requests.accepted=\u0417\u0430\u043f\u0438\u0442 \u0441\u0442\u0430\u0442\u0438 \u043f\u0440\u0438\u044f\u0442\u0435\u043b\u0435\u043c - \u0417\u0433\u043e\u0434\u0430
-v3.activity.header.share.requests=\u0417\u0430\u043f\u0438\u0442\u0438 \u0440\u043e\u0437\u0434\u0430\u0447\u0456 \u0442\u043e\u0440\u0435\u043d\u0442\u0443
v3.activity.header.downloads=\u0417\u0430\u0432\u0430\u043d\u0442\u0430\u0436\u0435\u043d\u044c
-v3.activity.header.rating.reminders=\u041d\u0430\u0433\u0430\u0434\u0443\u0432\u0430\u043d\u043d\u044f \u0440\u0435\u0439\u0442\u0438\u043d\u0433\u0443
v3.activity.header.vuze.news=\u041d\u043e\u0432\u0438\u043d\u0438 Vuze
-login.optional.message=\u0412\u0438 \u043c\u0443\u0441\u0438\u0442\u0435 \u0437\u0430\u0440\u0435\u0454\u0441\u0442\u0440\u0443\u0432\u0430\u0442\u0438\u0441\u044f, \u0449\u043e\u0431 \u0432\u0438\u043a\u043e\u0440\u0438\u0441\u0442\u043e\u0432\u0443\u0432\u0430\u0442\u0438 \u0446\u044e \u043c\u043e\u0436\u043b\u0438\u0432\u0456\u0441\u0442\u044c
-message.confirm.share.singular=\u0427\u0443\u0434\u043e\u0432\u043e! \u0412\u0430\u0448 \u0437\u0430\u043f\u0438\u0442 \u0440\u043e\u0437\u0434\u0430\u0432\u0430\u0442\u0438 \u0442\u043e\u0440\u0435\u043d\u0442 \u043d\u0430\u0434\u0456\u0441\u043b\u0430\u043d\u0438\u0439.
-message.confirm.share.plural=\u0427\u0443\u0434\u043e\u0432\u043e! \u0412\u0430\u0448 \u0437\u0430\u043f\u0438\u0442 \u0440\u043e\u0437\u0434\u0430\u0432\u0430\u0442\u0438 \u0442\u043e\u0440\u0435\u043d\u0442 \u043d\u0430\u0434\u0456\u0441\u043b\u0430\u043d\u0438\u0439.
-message.confirm.share.invite.singular=\u0427\u0443\u0434\u043e\u0432\u043e! \u0412\u0430\u0448 \u0437\u0430\u043f\u0438\u0442 \u0449\u043e\u0434\u043e \u0437'\u0454\u0434\u043d\u0430\u043d\u043d\u044f \u0456 \u0440\u043e\u0437\u0434\u0430\u0447\u0456 \u043d\u0430\u0434\u0456\u0441\u043b\u0430\u043d\u0438\u0439. \u0420\u043e\u0437\u0441\u043b\u0430\u0431\u0442\u0435\u0441\u044f \u0456 \u043e\u0447\u0456\u043a\u0443\u0439\u0442\u0435 \u0437\u0433\u043e\u0434\u0438 \u043f\u0440\u0438\u044f\u0442\u0435\u043b\u044f.
-message.confirm.share.invite.plural=\u0427\u0443\u0434\u043e\u0432\u043e! \u0412\u0430\u0448 \u0437\u0430\u043f\u0438\u0442 \u0449\u043e\u0434\u043e \u0437'\u0454\u0434\u043d\u0430\u043d\u043d\u044f \u0456 \u0440\u043e\u0437\u0434\u0430\u0447\u0456 \u043d\u0430\u0434\u0456\u0441\u043b\u0430\u043d\u0438\u0439. \u0420\u043e\u0437\u0441\u043b\u0430\u0431\u0442\u0435\u0441\u044f \u0456 \u043e\u0447\u0456\u043a\u0443\u0439\u0442\u0435 \u0437\u0433\u043e\u0434\u0438 \u043f\u0440\u0438\u044f\u0442\u0435\u043b\u044f.
-message.confirm.invite.singular=\u0427\u0443\u0434\u043e\u0432\u043e! \u0412\u0430\u0448 \u0437\u0430\u043f\u0438\u0442 \u043f\u0440\u0438\u044f\u0442\u0435\u043b\u044e \u043d\u0430\u0434\u0456\u0441\u043b\u0430\u043d\u0438\u0439. \u0420\u043e\u0437\u0441\u043b\u0430\u0431\u0442\u0435\u0441\u044f \u0456 \u043e\u0447\u0456\u043a\u0443\u0439\u0442\u0435 \u0437\u0433\u043e\u0434\u0438 \u043f\u0440\u0438\u044f\u0442\u0435\u043b\u044f.
-message.confirm.invite.plural=\u0427\u0443\u0434\u043e\u0432\u043e! \u0412\u0430\u0448 \u0437\u0430\u043f\u0438\u0442 \u043f\u0440\u0438\u044f\u0442\u0435\u043b\u044e \u043d\u0430\u0434\u0456\u0441\u043b\u0430\u043d\u0438\u0439. \u0420\u043e\u0437\u0441\u043b\u0430\u0431\u0442\u0435\u0441\u044f \u0456 \u043e\u0447\u0456\u043a\u0443\u0439\u0442\u0435 \u0437\u0433\u043e\u0434\u0438 \u043f\u0440\u0438\u044f\u0442\u0435\u043b\u044f.
-message.confirm.invite.error=\u041e, \u043d\u0456! \u041d\u0430\u0441 \u0437\u0430\u043c\u043a\u043d\u0443\u043b\u043e. \u041e\u0434\u043d\u0435 \u0430\u0431\u043e \u043a\u0456\u043b\u044c\u043a\u0430 \u0412\u0430\u0448\u0438\u0445 \u0437\u0430\u043f\u0438\u0442\u0456\u0432 \u043c\u0430\u044e\u0442\u044c \u043f\u043e\u043c\u0438\u043b\u043a\u0438.
-message.prompt.add.friends=\u041a\u043b\u0430\u0446\u043d\u0456\u0442\u044c \u043f\u0456\u043a\u0442\u043e\u0433\u0440\u0430\u043c\u0438 \u043f\u0440\u0438\u044f\u0442\u0435\u043b\u0456\u0432 \u0437\u043d\u0438\u0437\u0443 \u0441\u0442\u043e\u0440\u0456\u043d\u043a\u0438 \u0434\u043b\u044f \u0440\u043e\u0437\u0434\u0430\u0447\u0456
message.taking.too.long=\u041e\u0447\u0456\u043a\u0443\u0432\u0430\u043b\u043e\u0441\u044f, \u0449\u043e \u0432\u0441\u0435 \u0432\u0456\u0434\u0431\u0443\u0434\u0435\u0442\u044c\u0441\u044f \u043d\u0430\u0431\u0430\u0433\u0430\u0442\u043e \u0448\u0432\u0438\u0434\u0448\u0435\n\u041d\u0430\u0442\u0438\u0441\u043d\u0456\u0442\u044c 'ESC', \u0449\u043e\u0431 \u0441\u043a\u0430\u0441\u0443\u0432\u0430\u0442\u0438 \u0446\u044e \u0434\u0456\u044e
message.status.success=\u0423\u0441\u043f\u0456\u0448\u043d\u043e
-message.intro.friends=\u0414\u043e\u0434\u0430\u0432\u0430\u0439 \u043f\u0440\u0438\u044f\u0442\u0435\u043b\u0456\u0432.\n\u0420\u043e\u0437\u0434\u0430\u0432\u0430\u0439 \u0442\u043e\u0440\u0435\u043d\u0442\u0438.\n\u0417\u0430\u0432\u0430\u043d\u0442\u0430\u0436\u0443\u0439 \u0448\u0432\u0438\u0434\u0448\u0435.
azbuddy.tracker.bbb.status.title=\u041f\u0440\u0438\u0441\u043a\u043e\u0440\u0435\u043d\u043d\u044f \u043f\u0440\u0438\u044f\u0442\u0435\u043b\u0456\u0432
azbuddy.tracker.bbb.status.title.tooltip=\u041a\u043b\u0430\u0446\u043d\u0456\u0442\u044c \u0434\u0432\u0456\u0447\u0456 \u0434\u043b\u044f \u0434\u043e\u043a\u043b\u0430\u0434\u043d\u043e\u0457 \u0456\u043d\u0444\u043e\u0440\u043c\u0430\u0446\u0456\u0457
azbuddy.tracker.bbb.status.idle=\u041d\u0435\u043c\u0430 \u043f\u0440\u0438\u0441\u043a\u043e\u0440\u0435\u043d\u043d\u044f
@@ -2558,13 +2500,8 @@ azbuddy.tracker.bbb.status.in=\u042f \u043f\u043e\u0447\u0430\u0432 \u043f\u0440
azbuddy.tracker.bbb.status.out=\u041f\u0440\u0438\u0441\u043a\u043e\u0440\u0435\u043d\u0456 \u043f\u0440\u0438\u044f\u0442\u0435\u043b\u0456
v3.MainWindow.search.go.tooltip=\u0412\u0438\u043a\u043e\u043d\u0430\u0442\u0438 \u043f\u043e\u0448\u0443\u043a
v3.MainWindow.search.last.tooltip=\u041f\u043e\u0432\u0435\u0440\u043d\u0443\u0442\u0438\u0441\u044f \u0434\u043e \u0440\u0435\u0437\u0443\u043b\u044c\u0442\u0430\u0442\u0456\u0432 \u043f\u043e\u0448\u0443\u043a\u0443
-v3.activity.buddy-invited=\u0412\u0438 \u043d\u0430\u0434\u0456\u0441\u043b\u0430\u043b\u0438 \u0437\u0430\u043f\u0438\u0442 \u0441\u0442\u0430\u0442\u0438 \u043f\u0440\u0438\u044f\u0442\u0435\u043b\u0435\u043c \u0434\u043b\u044f %1.
-v3.activity.buddy-invited.multi=\u0412\u0438 \u043d\u0430\u0434\u0456\u0441\u043b\u0430\u043b\u0438 \u0437\u0430\u043f\u0438\u0442 \u0441\u0442\u0430\u0442\u0438 \u043f\u0440\u0438\u044f\u0442\u0435\u043b\u0435\u043c \u043d\u0430\u0441\u0442\u0443\u043f\u043d\u0438\u043c \u043b\u044e\u0434\u044f\u043c:\n%1
metasearch.addtemplate.done.title=\u0428\u0430\u0431\u043b\u043e\u043d \u0434\u043e\u0434\u0430\u043d\u0438\u0439
metasearch.addtemplate.done.desc=\u0428\u0430\u0431\u043b\u043e\u043d '%1' \u0432\u0434\u0430\u043b\u043e \u0434\u043e\u0434\u0430\u043d\u0438\u0439.\n\u0412\u0456\u043d \u0432\u0440\u0430\u0445\u043e\u0432\u0443\u0432\u0430\u0442\u0438\u043c\u0435\u0442\u044c\u0441\u044f \u043f\u0440\u0438 \u043d\u0430\u0441\u0442\u0443\u043f\u043d\u043e\u043c\u0443 \u043f\u043e\u0448\u0443\u043a\u0443!
-v3.MainWindow.button.share=\u0420\u043e\u0437\u0434\u0430\u0442\u0438 \u0456\u043d\u0444\u043e\u0440\u043c\u0430\u0446\u0456\u044e
-v3.buddies.remove.buddy.dialog.title=\u041f\u0456\u0434\u0442\u0432\u0435\u0440\u0434\u0436\u0435\u043d\u043d\u044f \u0432\u0438\u043b\u0443\u0447\u0435\u043d\u043d\u044f \u043f\u0440\u0438\u044f\u0442\u0435\u043b\u044f
-v3.buddies.remove.buddy.dialog.text=\u0412\u0438 \u0434\u0456\u0439\u0441\u043d\u043e \u0445\u043e\u0447\u0435\u0442\u0435 \u0432\u0438\u043b\u0443\u0447\u0438\u0442\u0438 %1 \u0437 \u0441\u043f\u0438\u0441\u043a\u0443 \u043f\u0440\u0438\u044f\u0442\u0435\u043b\u0456\u0432?
ConfigView.section.security.nopw=\u041f\u0430\u0440\u043e\u043b\u044c \u043d\u0435 \u0437\u0430\u0431\u0435\u0437\u043f\u0435\u0447\u0443\u0454\u0442\u044c\u0441\u044f
ConfigView.section.security.nopw_v=\u041f\u0430\u0440\u043e\u043b\u0456 \u043d\u0435\u0434\u043e\u0441\u0442\u0443\u043f\u043d\u0456, \u0437\u0430\u0440\u0435\u0454\u0441\u0442\u0440\u0443\u0439\u0442\u0435\u0441\u044f \u0432 Vuze
fileplugininstall.install.title=\u0412\u0441\u0442\u0430\u043d\u043e\u0432\u0438\u0442\u0438 \u0434\u043e\u043f\u043e\u0432\u043d\u0435\u043d\u043d\u044f?
@@ -2578,13 +2515,7 @@ azbuddy.os_not_avail=\u041d\u0435 \u0434\u043e\u0441\u0442\u0443\u043f\u043d\u04
azbuddy.os_busy=\u0417\u0430\u0439\u043d\u044f\u0442\u0438\u0439
azbuddy.os_offline=\u041f\u043e\u0437\u0430 \u043c\u0435\u0440\u0435\u0436\u0435\u044e
azbuddy.ui.menu.disconnect=\u0412\u0456\u0434'\u0454\u0434\u043d\u0430\u0442\u0438
-v3.buddy.menu.chat=\u0427\u0430\u0442
-v3.chat.offline=%1 \u0437\u0430\u0440\u0430\u0437 \u043f\u043e\u0437\u0430 \u043c\u0435\u0440\u0435\u0436\u0435\u044e \u0456 \u043e\u0442\u0440\u0438\u043c\u0430\u0454 \u0432\u0430\u0448\u0435 \u043f\u043e\u0432\u0456\u0434\u043e\u043c\u043b\u0435\u043d\u043d\u044f \u043f\u0456\u0441\u043b\u044f \u0437'\u0454\u0434\u043d\u0430\u043d\u043d\u044f.
-v3.chat.wrongversion=%1 \u0432\u0438\u043a\u043e\u0440\u0438\u0441\u0442\u043e\u0432\u0443\u0454 \u0432\u0435\u0440\u0441\u0456\u044e Vuze, \u044f\u043a\u0430 \u043d\u0435 \u043f\u0456\u0434\u0442\u0440\u0438\u043c\u0443\u0454 \u0427\u0430\u0442.
azbuddy.enable_chat_notif=\u0412\u0432\u0456\u043c\u043a\u043d\u0443\u0442\u0438 \u043f\u043e\u0432\u0456\u0434\u043e\u043c\u043b\u0435\u043d\u043d\u044f \u0447\u0430\u0442\u0443
-v3.buddies.dnd.info.dialog.title=\u0417\u0430\u043b\u0438\u0448\u0438\u0442\u0438 \u0440\u043e\u0437\u0434\u0430\u0447\u0443
-v3.buddies.dnd.info.dialog.text=\u0412\u0438 \u0432\u0438\u0431\u0440\u0430\u043b\u0438 "\u0417\u0430\u043b\u0438\u0448\u0438\u0442\u0438 \u0440\u043e\u0437\u0434\u0430\u0447\u0443". \u0412\u0430\u0448\u0430 \u0456\u043d\u0444\u043e\u0440\u043c\u0430\u0446\u0456\u044f \u043f\u0456\u0434\u0433\u043e\u0442\u043e\u0432\u043b\u044e\u0454\u0442\u044c\u0441\u044f \u0434\u043b\u044f \u0440\u043e\u0437\u0434\u0430\u0447\u0456, \u0456 \u0435\u043a\u0440\u0430\u043d \u0432\u0456\u0434\u043a\u0440\u0438\u0454\u0442\u044c\u0441\u044f, \u043a\u043e\u043b\u0438 \u0412\u0430\u0448\u0430 \u0456\u043d\u0444\u043e\u0440\u043c\u0430\u0446\u0456\u044f \u0431\u0443\u0434\u0435 \u0433\u043e\u0442\u043e\u0432\u043e\u044e.\n\n\u041d\u0435 \u0437\u0430\u043a\u0440\u0438\u0432\u0430\u0439\u0442\u0435 Vuze, \u0449\u043e\u0431 \u0432\u0430\u0448 \u043f\u0440\u0438\u044f\u0442\u0435\u043b\u044c \u043e\u0442\u0440\u0438\u043c\u0430\u0432 \u0432\u0430\u0448\u0443 \u0456\u043d\u0444\u043e\u0440\u043c\u0430\u0446\u0456\u044e.\n<A HREF="http://faq.vuze.com/?View=entry&EntryID=267">\u041a\u043b\u0430\u0446\u043d\u0456\u0442\u044c \u0442\u0443\u0442</A> \u0434\u043b\u044f \u0434\u043e\u0434\u0430\u0442\u043a\u043e\u0432\u043e\u0457 \u0456\u043d\u0444\u043e\u0440\u043c\u0430\u0446\u0456\u0457 \u043f\u0440\u043e \u0446\u044e \u043c\u043e\u0436\u043b\u0438\u0432\u0456\u0441\u0442\u044c.
-v3.buddies.dnd.info.dialog.remember=\u0411\u0456\u043b\u044c\u0448\u0435 \u043d\u0435 \u043f\u043e\u043a\u0430\u0437\u0443\u0432\u0430\u0442\u0438 \u0446\u0435 \u043f\u043e\u0432\u0456\u0434\u043e\u043c\u043b\u0435\u043d\u043d\u044f
progress.window.msg.progress=\u0414\u043e\u0447\u0435\u043a\u0430\u0439\u0442\u0435\u0441\u044f \u0437\u0430\u043a\u0456\u043d\u0447\u0435\u043d\u043d\u044f \u0434\u0456\u0457
ConfigView.section.connection.advanced.read_select=\u0417\u0430\u0442\u0440\u0438\u043c\u043a\u0430 \u0447\u0438\u0442\u0430\u043d\u043d\u044f (\u043c\u0441, \u0441\u0442\u0430\u043d\u0434\u0430\u0440\u0442\u043d\u043e: %1)
ConfigView.section.connection.advanced.read_select_min=\u041c\u0456\u043d\u0456\u043c\u0430\u043b\u044c\u043d\u0435 \u043e\u0447\u0456\u043a\u0443\u0432\u0430\u043d\u043d\u044f \u0447\u0438\u0442\u0430\u043d\u043d\u044f (\u043c\u0441, \u0441\u0442\u0430\u043d\u0434\u0430\u0440\u0442\u043d\u043e: %1)
@@ -2640,25 +2571,18 @@ PluginDeprecation.view=\u0412\u0438\u043f\u0440\u0430\u0432\u043b\u0435\u043d\u0
PluginDeprecation.alert=\u0414\u043e\u043f\u043e\u0432\u043d\u0435\u043d\u043d\u044f \u0434\u043e \u043f\u0440\u043e\u0433\u0440\u0430\u043c\u0438 \u043f\u0440\u043e\u0431\u0443\u0432\u0430\u043b\u043e \u0432\u0438\u043a\u043e\u0440\u0438\u0441\u0442\u043e\u0432\u0443\u0432\u0430\u0442\u0438 \u043c\u043e\u0436\u043b\u0438\u0432\u0456\u0441\u0442\u044c, \u044f\u043a\u0430 \u0431\u0443\u0434\u0435 \u0432\u0438\u043b\u0443\u0447\u0435\u043d\u0430 \u043d\u0430\u0434\u0430\u043b\u0456, - \u0432\u0456\u0434\u043a\u0440\u0438\u0439\u0442\u0435 \u043b\u043e\u0433 \u0412\u0438\u043f\u0440\u0430\u0432\u043b\u0435\u043d\u043d\u044f \u0434\u043e\u043f\u043e\u0432\u043d\u0435\u043d\u043d\u044f \u0434\u043b\u044f \u043a\u043e\u043d\u043a\u0440\u0435\u0442\u043d\u0456\u0448\u043e\u0457 \u0456\u043d\u0444\u043e\u0440\u043c\u0430\u0446\u0456\u0457.
TableColumn.header.Thumbnail=\u041f\u0456\u043a\u0442\u043e\u0433\u0440\u0430\u043c\u0430
TableColumn.header.Thumbnail.info=\u041f\u0456\u043a\u0442\u043e\u0433\u0440\u0430\u043c\u0430, \u044f\u043a\u0430 \u043f\u043e\u043a\u0430\u0437\u0443\u0454 \u0432\u043c\u0456\u0441\u0442 \u043d\u0430 Vuze; \u0434\u043b\u044f \u0432\u0441\u044c\u043e\u0433\u043e \u0456\u043d\u0448\u043e\u0433\u043e \u0432\u043c\u0456\u0441\u0442\u0443 \u0437\u0430\u0431\u0435\u0437\u043f\u0435\u0447\u0443\u0454 \u043f\u0456\u043a\u0442\u043e\u0433\u0440\u0430\u043c\u0438 \u041e\u0421.
-TableColumn.header.Rating_global=\u0420\u0435\u0439\u0442\u0438\u043d\u0433
-TableColumn.header.Rating_global.info=\u0413\u043b\u043e\u0431\u0430\u043b\u044c\u043d\u0438\u0439 \u0440\u0435\u0439\u0442\u0438\u043d\u0433 \u0434\u043b\u044f \u0446\u0456\u0454\u0457 \u0456\u043d\u0444\u043e\u0440\u043c\u0430\u0446\u0456\u0457
v3.MainWindow.menu.getting_started=&\u041b\u0435\u0433\u043a\u0438\u0439 \u043f\u043e\u0447\u0430\u0442\u043e\u043a
MainWindow.menu.community=\u0421\u0443\u0441\u043f\u0456&\u043b\u044c\u0441\u0442\u0432\u043e
MainWindow.menu.help.faq=&FAQ
MainWindow.menu.community.wiki=\u0421\u0443\u0441\u043f\u0456\u043b\u044c\u043d\u0430 &\u0432\u0456\u043a\u0456-\u0441\u0442\u043e\u0440\u0456\u043d\u043a\u0430
MainWindow.menu.community.forums=\u0421\u0443\u0441\u043f\u0456\u043b\u044c\u043d\u0456 \u0444\u043e&\u0440\u0443\u043c\u0438
MainWindow.menu.community.blog=&\u0411\u043b\u043e\u0433 Vuze
-MainWindow.menu.community.add_friends=&\u0414\u043e\u0434\u0430\u0442\u0438 \u043f\u0440\u0438\u044f\u0442\u0435\u043b\u044f
MainWindow.menu.help.support=&\u0414\u043e\u0432\u0456\u0434\u043a\u0430 \u0456 \u043f\u0456\u0434\u0442\u0440\u0438\u043c\u043a\u0430
externalLogin.title=\u0417\u0430\u043f\u0438\u0442 \u043b\u043e\u0433\u0456\u043d\u0443
externalLogin.explanation=\u0428\u0430\u0431\u043b\u043e\u043d "%1" \u0432\u0438\u043c\u0430\u0433\u0430\u0454 \u0432\u043a\u0430\u0437\u0430\u0442\u0438 \u043b\u043e\u0433\u0456\u043d. \u041f\u0456\u0441\u043b\u044f \u043e\u0442\u0440\u0438\u043c\u0430\u043d\u043d\u044f \u043b\u043e\u0433\u0456\u043d\u0443 \u0432\u0456\u043a\u043d\u043e \u0437\u0430\u043a\u0440\u0438\u0454\u0442\u044c\u0441\u044f \u0430\u0432\u0442\u043e\u043c\u0430\u0442\u0438\u0447\u043d\u043e.
externalLogin.explanation.capture=\u0412\u0430\u043c \u043f\u043e\u0442\u0440\u0456\u0431\u043d\u043e \u0432\u043a\u0430\u0437\u0430\u0442\u0438 \u043f\u0441\u0435\u0432\u0434\u043e \u0434\u043b\u044f \u0442\u043e\u0433\u043e, \u0449\u043e\u0431 \u0441\u0442\u0432\u043e\u0440\u0438\u0442\u0438 \u0446\u0435\u0439 \u0448\u0430\u0431\u043b\u043e\u043d.
Button.done=\u0412\u0438\u043a\u043e\u043d\u0430\u043d\u043e
GeneralView.torrent_created_on_and_by=%1 \u0437\u0430 %2
-v3.Share.wizard.title=\u0420\u043e\u0437\u0434\u0430\u0447\u0430 -- \u041c\u0430\u0433
-v3.AddFriends.header.message=\u0414\u043e\u0434\u0430\u0439\u0442\u0435 \u043f\u0440\u0438\u044f\u0442\u0435\u043b\u0456\u0432, \u0449\u043e\u0431 \u043f\u043e\u0447\u0430\u0442\u0438 \u0440\u043e\u0437\u0434\u0430\u0432\u0430\u0442\u0438 \u0412\u0430\u0448\u0456 \u0443\u043b\u044e\u0431\u043b\u0435\u043d\u0456 \u0442\u043e\u0440\u0435\u043d\u0442\u0438
-v3.AddFriends.header=\u0414\u043e\u0434\u0430\u0442\u0438 \u043f\u0440\u0438\u044f\u0442\u0435\u043b\u0456\u0432
-v3.AddFriends.wizard.title=\u0414\u043e\u0434\u0430\u0432\u0430\u043d\u043d\u044f \u043f\u0440\u0438\u044f\u0442\u0435\u043b\u0456\u0432 - \u041c\u0430\u0433
Button.continue=\u041f\u0440\u043e\u0434\u043e\u0432\u0436\u0438\u0442\u0438
Button.preview=\u041f\u043e\u043f\u0435\u0440\u0435\u0434\u043d\u0456\u0439 \u043f\u0435\u0440\u0435\u0433\u043b\u044f\u0434
Subscription.menu.forcecheck=\u041f\u043e\u043d\u043e\u0432\u0438\u0442\u0438 \u0437\u0430\u0440\u0430\u0437
@@ -2669,9 +2593,6 @@ sidebar.LibraryDL=\u0417\u0430\u0432\u0430\u043d\u0442\u0430\u0436\u0435\u043d\u
sidebar.LibraryCD=\u0412\u0438\u043a\u043e\u043d\u0430\u043d\u0456
authenticator.location=\u041c\u0456\u0441\u0446\u0435\u0437\u043d\u0430\u0445\u043e\u0434\u0436\u0435\u043d\u043d\u044f
authenticator.details=\u0414\u043e\u043a\u043b\u0430\u0434\u043d\u043e
-v3.MainWindow.menu.publish.new=\u041f\u0443\u0431\u043b\u0456\u043a\u0443\u0432\u0430\u0442\u0438 \u043d\u043e\u0432\u0443 \u0456\u043d\u0444\u043e\u0440\u043c\u0430\u0446\u0456\u044e
-v3.MainWindow.menu.publish.mine=\u041e\u043f\u0443\u0431\u043b\u0456\u043a\u043e\u0432\u0430\u043d\u0430 \u0412\u0430\u043c\u0438 \u0456\u043d\u0444\u043e\u0440\u043c\u0430\u0446\u0456\u044f
-v3.MainWindow.menu.publish.about=\u041f\u0440\u043e \u043f\u0443\u0431\u043b\u0456\u043a\u0430\u0446\u0456\u044e...
v3.MainWindow.menu.showActionBarText=\u041f\u043e\u043a\u0430\u0437\u0430\u0442\u0438 \u0442\u0435\u043a\u0441\u0442
subscript.import.fail.title=\u041d\u0435\u0432\u0434\u0430\u043b\u0438\u0439 \u0456\u043c\u043f\u043e\u0440\u0442
subscript.import.fail.desc=\u0414\u043e\u043a\u043b\u0430\u0434\u043d\u043e: %1
@@ -2688,13 +2609,11 @@ Subscription.menu.reset=\u041f\u043e\u0432\u0435\u0440\u043d\u0443\u0442\u0438\u
ConfigView.section.Subscriptions=\u041f\u0435\u0440\u0435\u0434\u043f\u043b\u0430\u0442\u0438
subscriptions.config.maxresults=\u041c\u0430\u043a\u0441\u0438\u043c\u0430\u043b\u044c\u043d\u0430 \u043a\u0456\u043b\u044c\u043a\u0456\u0441\u0442\u044c \u0440\u0435\u0437\u0443\u043b\u044c\u0442\u0430\u0442\u0456\u0432, \u0437\u0431\u0435\u0440\u0435\u0436\u0435\u043d\u0438\u0445 \u0437\u0430 \u043f\u0435\u0440\u0435\u0434\u043f\u043b\u0430\u0442\u0443 [0: \u043d\u0435\u043e\u0431\u043c\u0435\u0436\u0435\u043d\u043e]
v3.activity.button.readall=\u041f\u043e\u0437\u043d\u0430\u0447\u0438\u0442\u0438 \u0432\u0441\u0456 \u044f\u043a \u043f\u0440\u043e\u0447\u0438\u0442\u0430\u043d\u0456
-ConfigView.interface.start.library=\u041f\u043e\u0447\u0438\u043d\u0430\u0442\u0438 \u0432 \u0411\u0456\u0431\u043b\u0456\u043e\u0442\u0435\u0446\u0456
TableColumn.header.activityNew=\u0421\u0442\u0432\u043e\u0440\u0438\u0442\u0438
TableColumn.header.activityType=\u0422\u0438\u043f
TableColumn.header.activityText=\u041f\u043e\u0432\u0456\u0434\u043e\u043c\u043b\u0435\u043d\u043d\u044f
TableColumn.header.activityDate=\u0414\u0430\u0442\u0430 \u0434\u043e\u043b\u0443\u0447\u0435\u043d\u043d\u044f
TableColumn.header.activityActions=\u0414\u0456\u0457
-TableColumn.header.activityAvatar=\u0410\u0432\u0430\u0442\u0430\u0440
Subscription.menu.resetauth=\u0421\u043a\u0438\u043d\u0443\u0442\u0438 \u043f\u043e\u0434\u0440\u043e\u0431\u0438\u0446\u0456 \u0456\u0434\u0435\u043d\u0442\u0438\u0444\u0456\u043a\u0430\u0446\u0456\u0457
Search.menu.engines=\u0428\u0430\u0431\u043b\u043e\u043d\u0438
Wizard.Subscription.title=\u041f\u0435\u0440\u0435\u0434\u043f\u043b\u0430\u0442\u0438\u0442\u0438
@@ -2721,8 +2640,6 @@ Wizard.Subscription.rss.subtitle3=\u0417\u0431\u0435\u0440\u0456\u0433\u0448\u04
Wizard.Subscription.subscribe.library=\u0406\u043d\u0444\u043e\u0440\u043c\u0430\u0446\u0456\u044f \u0432 \u0412\u0430\u0448\u0456\u0439 \u0411\u0456\u0431\u043b\u0456\u043e\u0442\u0435\u0446\u0456
Wizard.Subscription.subscribe.subscriptions=\u041f\u043e\u0432'\u044f\u0437\u0430\u043d\u0456 \u043f\u0435\u0440\u0435\u0434\u043f\u043b\u0430\u0442\u0438
Wizard.Subscription.subscribe.library.empty=\u041d\u0435\u043c\u0430 \u0434\u043e\u0441\u0442\u0443\u043f\u043d\u0438\u0445 \u043f\u0456\u0434\u043f\u0438\u0441\u043e\u043a?\n \n\u041f\u043e\u0434\u0438\u0432\u0456\u0442\u044c\u0441\u044f \u043d\u0430 \u044f\u0441\u043a\u0440\u0430\u0432\u0443 \u043f\u043e\u043c\u0430\u0440\u0430\u043d\u0447\u0435\u0432\u0443 \u043a\u043e\u043d\u043f\u043a\u0443 \u043c\u0435\u0440\u0435\u0436\u0456 Vuze HD Network.\n \n<A HREF="http://faq.vuze.com/?View=entry&EntryID=288">Read more</A>
-TableColumn.header.Info=\u0406\u043d\u0444\u043e\u0440\u043c\u0430\u0446\u0456\u044f
-TableColumn.header.videoLength=\u0414\u043e\u0432\u0436\u0438\u043d\u0430 \u0432\u0456\u0434\u0435\u043e
message.confirm.delete.title=\u041f\u0456\u0434\u0442\u0432\u0435\u0440\u0434\u0436\u0435\u043d\u043d\u044f \u0432\u0438\u043b\u0443\u0447\u0435\u043d\u043d\u044f
message.confirm.delete.text=\u0412\u0438 \u0441\u043f\u0440\u0430\u0432\u0434\u0456 \u0445\u043e\u0447\u0435\u0442\u0435 \u0432\u0438\u043b\u0443\u0447\u0438\u0442\u0438 '%1'?
Subscription.menu.properties=\u0412\u043b\u0430\u0441\u0442\u0438\u0432\u043e\u0441\u0442\u0456
@@ -2774,8 +2691,6 @@ TableColumn.header.azsubs.ui.column.subs_link.info=\u0410\u0441\u043e\u0446\u045
Button.deleteContent.fromLibrary=\u0412\u0438\u043b\u0443\u0447\u0438\u0442\u0438 \u0437 \u0431\u0456\u0431\u043b\u0456\u043e\u0442\u0435\u043a\u0438
Button.deleteContent.fromComputer=\u0412\u0438\u043b\u0443\u0447\u0438\u0442\u0438 \u0437 \u043a\u043e\u043c\u043f'\u044e\u0442\u0435\u0440\u0430
v3.deleteContent.message=\n\u0412\u0438 \u0445\u043e\u0447\u0435\u0442\u0435 \u0432\u0438\u043b\u0443\u0447\u0438\u0442\u0438 '%1' \u0437 \u043a\u043e\u043c\u043f'\u044e\u0442\u0435\u0440\u0430, \u0447\u0438 \u043b\u0438\u0448\u0435 \u0437 \u0431\u0456\u0431\u043b\u0456\u043e\u0442\u0435\u043a\u0438 Vuze?
-v3.library.infobar.text1=\u0428\u0443\u043a\u0430\u0454\u0442\u0435 \u0440\u043e\u0437\u0448\u0438\u0440\u0435\u043d\u0438\u0439 \u0432\u0438\u0433\u043b\u044f\u0434?
-v3.library.infobar.text2=\u041f\u0435\u0440\u0435\u043c\u043a\u043d\u0443\u0442\u044c \u0432\u0438\u0433\u043b\u044f\u0434 \u043d\u0430 \u043f\u0430\u043d\u0435\u043b\u0456, \u044f\u043a\u0430 \u0437\u043d\u0430\u0445\u043e\u0434\u0438\u0442\u044c\u0441\u044f \u0432\u0438\u0449\u0435.
v3.MainWindow.menu.view.toolbartext=\u041f\u0456\u0434\u043f\u0438\u0441\u0443\u0432\u0430\u0442\u0438 \u043f\u0456\u043a\u0442\u043e\u0433\u0440\u0430\u043c\u0438
v3.MainWindow.menu.view.asSimpleList=\u041f\u0440\u043e\u0441\u0442\u0438\u0439 \u043f\u0435\u0440\u0435\u043b\u0456\u043a
v3.MainWindow.menu.view.asAdvancedList=\u0420\u043e\u0437\u0448\u0438\u0440\u0435\u043d\u0438\u0439 \u043f\u0435\u0440\u0435\u043b\u0456\u043a
@@ -2803,16 +2718,6 @@ azbuddy.ui.menu.cat.share=\u041f\u0435\u0440\u0435\u0434\u043f\u043b\u0430\u0442
azbuddy.ui.menu.cat.set=\u0412\u043a\u0430\u0436\u0456\u0442\u044c \u043a\u0430\u0442\u0435\u0433\u043e\u0440\u0456\u0457
azbuddy.ui.menu.cat.set_msg=\u0421\u043f\u0438\u0441\u043e\u043a \u043a\u0430\u0442\u0435\u0433\u043e\u0440\u0456\u0439 \u0440\u043e\u0437\u0434\u0456\u043b\u044f\u0454\u0442\u044c\u0441\u044f \u043a\u043e\u043c\u0430\u043c\u0438
azbuddy.ui.menu.cat_subs=\u041f\u0435\u0440\u0435\u0434\u043f\u043b\u0430\u0442\u0430
-v3.buddy.prop.dn=\u0406\u043c'\u044f, \u044f\u043a\u0435 \u043f\u043e\u043a\u0430\u0437\u0443\u0454\u0442\u044c\u0441\u044f
-v3.buddy.prop.un=\u0406\u043c'\u044f \u043a\u043e\u0440\u0438\u0441\u0442\u0443\u0432\u0430\u0447\u0430
-v3.buddy.prop.on=\u0412 \u043c\u0435\u0440\u0435\u0436\u0456
-v3.buddy.prop.lupd=\u0412\u043e\u0441\u0442\u0430\u043d\u043d\u0454 \u043f\u043e\u043d\u043e\u0432\u043b\u0435\u043d\u043e
-v3.buddy.prop.pks=\u041a\u0456\u043b\u044c\u043a\u0456\u0441\u0442\u044c \u043f\u0443\u0431\u043b\u0456\u0447\u043d\u0438\u0445 \u043a\u043b\u044e\u0447\u0456\u0432
-v3.buddy.prop.pc=\u041e\u0447\u0456\u043a\u0443\u0432\u0430\u043d\u043d\u044f \u043f\u043e\u0432\u0456\u0434\u043e\u043c\u043b\u0435\u043d\u044c
-v3.buddy.prop.catout=\u0412\u0430\u0448\u0456 \u043a\u0430\u0442\u0435\u0433\u043e\u0440\u0456\u0457, \u044f\u043a\u0456 \u043c\u043e\u0436\u0435 \u043f\u0435\u0440\u0435\u0434\u043f\u043b\u0430\u0442\u0438\u0442\u0438 \u043f\u0440\u0438\u044f\u0442\u0435\u043b\u044c
-v3.buddy.prop.catin=\u0412\u0430\u043c \u0437\u0430\u043f\u0440\u043e\u043f\u043e\u043d\u043e\u0432\u0430\u043d\u0456 \u043a\u0430\u0442\u0435\u0433\u043e\u0440\u0456\u0457 \u043f\u0440\u0438\u044f\u0442\u0435\u043b\u044f
-v3.buddy.set.catout=\u0414\u043e\u0437\u0432\u043e\u043b\u0438\u0442\u0438 \u043f\u0440\u0438\u044f\u0442\u0435\u043b\u044e \u043f\u0435\u0440\u0435\u0434\u043f\u043b\u0430\u0442\u0438\u0442\u0438 \u043a\u0430\u0442\u0435\u0433\u043e\u0440\u0456\u044e
-v3.buddy.set.catin=\u041f\u0435\u0440\u0435\u0434\u043f\u043b\u0430\u0442\u0438\u0442\u0438 \u043a\u0430\u0442\u0435\u0433\u043e\u0440\u0456\u044e \u043f\u0440\u0438\u044f\u0442\u0435\u043b\u044f
subs.prop.update_period=\u041f\u0435\u0440\u0456\u043e\u0434 \u043f\u043e\u043d\u043e\u0432\u043b\u0435\u043d\u043d\u044f
azbuddy.enable_cat_pub=\u0421\u0443\u0441\u043f\u0456\u043b\u044c\u043d\u0456 \u043a\u0430\u0442\u0435\u0433\u043e\u0440\u0456\u0457, \u043d\u0430 \u044f\u043a\u0456 \u0412\u0421\u0406 \u0432\u0430\u0448\u0456 \u043f\u0440\u0438\u044f\u0442\u0435\u043b\u0456 \u043c\u043e\u0436\u0443\u0442\u044c \u043f\u0456\u0434\u043f\u0438\u0441\u0430\u0442\u0438\u0441\u044f (\u0440\u043e\u0437\u0434\u0456\u043b\u044f\u0442\u0438 ',')
v3.dialog.cnclose.title=%1 \u0437\u0430\u043a\u0440\u0438\u0442\u0438\u0439
@@ -2828,12 +2733,9 @@ TableColumn.header.category.info=\u041d\u0430\u0437\u0432\u0430 \u043a\u0430\u04
TableColumn.header.DateCompleted.info=\u0414\u0430\u0442\u0430 \u0437\u0430\u043a\u0456\u043d\u0447\u0435\u043d\u043d\u044f \u0437\u0430\u0432\u0430\u043d\u0442\u0430\u0436\u0435\u043d\u043d\u044f \u0442\u043e\u0440\u0435\u043d\u0442\u0443
TableColumn.header.AzProduct.info=\u0422\u043e\u0440\u0435\u043d\u0442 \u043e\u0442\u0440\u0438\u043c\u0430\u043d\u043e \u0437 \u043c\u0435\u0440\u0435\u0436\u0456
TableColumn.header.health.info=\u041d\u0430\u0441\u043a\u0456\u043b\u044c\u043a\u0438 \u0436\u0438\u0442\u0442\u0454\u0437\u0434\u0430\u0442\u043d\u0435 \u0432\u0430\u0448\u0435 \u043f\u0456\u0434'\u0454\u0434\u043d\u0430\u043d\u043d\u044f \u0434\u043e \u0442\u043e\u0440\u0435\u043d\u0442\u0443
-TableColumn.header.Info.info=\u041a\u043d\u043e\u043f\u043a\u0430, \u044f\u043a\u0430 \u0432\u0456\u0434\u043a\u0440\u0438\u0432\u0430\u0454 \u0441\u0442\u043e\u0440\u0456\u043d\u043a\u0443 \u043f\u043e\u0434\u0440\u043e\u0431\u0438\u0446\u044c \u0432\u043c\u0456\u0441\u0442\u0443 Vuze
TableColumn.header.maxuploads.info=\u041c\u0430\u043a\u0441\u0438\u043c\u0443\u043c # \u0443\u0447\u0430\u0441\u043d\u0438\u043a\u0456\u0432 \u0434\u043b\u044f \u043e\u0434\u043d\u043e\u0447\u0430\u0441\u043d\u043e\u0457 \u0440\u043e\u0437\u0434\u0430\u0447\u0456
TableColumn.header.name.info=\u0406\u043c'\u044f \u0442\u043e\u0440\u0435\u043d\u0442\u0430
TableColumn.header.unopened.info=\u041f\u043e\u0437\u043d\u0430\u0447\u043a\u0430, \u044f\u043a\u0430 \u0432\u043a\u0430\u0437\u0443\u0454, \u0449\u043e \u0442\u043e\u0440\u0435\u043d\u0442 \u0432\u0456\u0434\u0442\u0432\u043e\u0440\u044e\u0432\u0430\u0432\u0441\u044f (\u0432\u0456\u0434\u043a\u0440\u0438\u0432\u0430\u0432\u0441\u044f)
-TableColumn.header.Quality.info=\u042f\u043a\u0456\u0441\u0442\u044c \u0456\u043d\u0444\u043e\u0440\u043c\u0430\u0446\u0456\u0457 (\u043d\u0430\u043f\u0440\u0438\u043a\u043b\u0430\u0434 HD, SD)
-TableColumn.header.RateIt.info=\u0417\u0434\u0430\u0442\u043d\u0456\u0441\u0442\u044c \u043e\u0446\u0456\u043d\u0438\u0442\u0438 \u0456\u043d\u0444\u043e\u0440\u043c\u0430\u0446\u0456\u044e
TableColumn.header.savepath.info=\u0422\u0435\u043a\u0430 \u0430\u0431\u043e \u0444\u0430\u0439\u043b \u0434\u043b\u044f \u0456\u043d\u0444\u043e\u0440\u043c\u0430\u0446\u0456\u0457 \u0442\u043e\u0440\u0435\u043d\u0442\u0430
TableColumn.header.SeedingRank.info=\u0417\u043d\u0430\u0447\u0435\u043d\u043d\u044f, \u043d\u0430\u0441\u043a\u0456\u043b\u044c\u043a\u0438 \u0442\u043e\u0440\u0435\u043d\u0442\u0443 \u043f\u043e\u0442\u0440\u0456\u0431\u043d\u0456 \u0441\u0456\u0434\u0435\u0440\u0438. \u0427\u0438\u043c \u0432\u0438\u0449\u0435 \u0437\u043d\u0430\u0447\u0435\u043d\u043d\u044f, \u0442\u0438\u043c \u043f\u043e\u0442\u0440\u0456\u0431\u043d\u0456\u0448\u0435.
TableColumn.header.shareRatio.info=\u0421\u043a\u0456\u043b\u044c\u043a\u0438 \u0432\u0438 \u0440\u043e\u0437\u0434\u0430\u043b\u0438 \u0432 \u043f\u043e\u0440\u0456\u0432\u043d\u044f\u043d\u043d\u0456 \u0437 \u0442\u0438\u043c, \u0441\u043a\u0456\u043b\u044c\u043a\u0438 \u0432\u0438 \u0437\u0430\u0432\u0430\u043d\u0442\u0430\u0436\u0438\u043b\u0438.
@@ -2843,7 +2745,6 @@ TableColumn.header.upspeed.info=\u041f\u043e\u0442\u043e\u0447\u043d\u0430 \u044
TableColumn.header.downspeed.info=\u041f\u043e\u0442\u043e\u0447\u043d\u0430 \u0448\u0432\u0438\u0434\u043a\u0456\u0441\u0442\u044c \u0437\u0430\u0432\u0430\u043d\u0442\u0430\u0436\u0435\u043d\u043d\u044f
TableColumn.header.up.info=\u041f\u043e\u0442\u043e\u0447\u043d\u0430 \u043a\u0456\u043b\u044c\u043a\u0456\u0441\u0442\u044c \u0434\u0430\u043d\u0438\u0445, \u0432\u0456\u0434\u043f\u0440\u0430\u0432\u043b\u0435\u043d\u0438\u0445 \u0456\u043d\u0448\u0438\u043c \u0443\u0447\u0430\u0441\u043d\u0438\u043a\u0430\u043c
TableColumn.header.down.info=\u041f\u043e\u0442\u043e\u0447\u043d\u0430 \u043a\u0456\u043b\u044c\u043a\u0456\u0441\u0442\u044c \u0434\u0430\u043d\u0438\u0445, \u043e\u0442\u0440\u0438\u043c\u0430\u043d\u0438\u0445 \u0432\u0456\u0434 \u0456\u043d\u0448\u0438\u0445 \u0443\u0447\u0430\u0441\u043d\u0438\u043a\u0456\u0432
-TableColumn.header.videoLength.info=\u0422\u0440\u0438\u0432\u0430\u043b\u0456\u0441\u0442\u044c \u0432\u043c\u0456\u0441\u0442\u0443
TableColumn.header.ProgressETA.info=\u041f\u043e\u0454\u0434\u043d\u0443\u0454 \u0456\u043d\u0444\u043e\u0440\u043c\u0430\u0446\u0456\u044e \u043f\u0440\u043e \u0441\u0442\u0430\u043d, \u0437\u0430\u043a\u0456\u043d\u0447\u0435\u043d\u043d\u044f, \u043f\u0440\u0438\u0431\u043b\u0438\u0437\u043d\u0438\u0439 \u043e\u0441\u0442\u0430\u0442\u043e\u0447\u043d\u0438\u0439 \u0447\u0430\u0441 \u0456 \u0448\u0432\u0438\u0434\u043a\u0456\u0441\u0442\u044c \u0437\u0430\u0432\u0430\u043d\u0442\u0430\u0436\u0435\u043d\u043d\u044f \u0432 \u043e\u0434\u043d\u043e\u043c\u0443 \u0431\u0430\u0433\u0430\u0442\u043e\u0440\u044f\u0434\u043a\u043e\u0432\u043e\u043c\u0443 \u0441\u0442\u043e\u0432\u043f\u0446\u0456.
TableColumn.header.eta.info=\u041f\u0440\u0438\u0431\u043b\u0438\u0437\u043d\u0438\u0439 \u0447\u0430\u0441 \u0434\u043e \u0437\u0430\u043a\u0456\u043d\u0447\u0435\u043d\u043d\u044f \u0437\u0430\u0432\u0430\u043d\u0442\u0430\u0436\u0435\u043d\u043d\u044f
Pieces.column.#.info=\u041d\u043e\u043c\u0435\u0440 \u0447\u0430\u0441\u0442\u0438\u043d\u0438
@@ -3036,19 +2937,3 @@ v3.deviceview.infobar.line2.tivo=\u041f\u043e\u0442\u043e\u043a\u043e\u0432\u043
v3.deviceview.infobar.line2.psp=\u0412\u0456\u0434\u0435\u043e \u0441\u043a\u043e\u043f\u0456\u044e\u0454\u0442\u044c\u0441\u044f \u0434\u043e PSP, \u043a\u043e\u043b\u0438 \u043d\u043e\u0441\u0456\u0439 \u0431\u0443\u0434\u0435 \u043f\u0456\u0434'\u0454\u0434\u043d\u0430\u043d\u043e.
devices.info.copypending2=\u041e\u0447\u0456\u043a\u0443\u0432\u0430\u043d\u043d\u044f \u043a\u043e\u043f\u0456\u044e\u0432\u0430\u043d\u043d\u044f %1 \u0444\u0430\u0439\u043b\u0430(\u0456\u0432), \u043f\u0456\u0434'\u0454\u0434\u043d\u0430\u0439\u0442\u0435 \u0412\u0430\u0448 \u043d\u043e\u0441\u0456\u0439
subscriptions.column.nb-subscribers=\u041f\u0435\u0440\u0435\u0434\u043f\u043b\u0430\u0447\u0443\u044e\u0447\u0456
-# The remaining keys were not in MessagesBundle.properties
-=
-MyTorrentsView.menu.rename.displayed_and_save_path.enter.message.2=\u042f\u043a\u0449\u043e \u0442\u0435\u043a\u0441\u0442 \u043d\u0435 \u0432\u043a\u0430\u0437\u0430\u043d\u0438\u0439, \u0432\u0438\u043a\u043e\u0440\u0438\u0441\u0442\u043e\u0432\u0443\u0432\u0430\u0442\u0438\u043c\u0435\u0442\u044c\u0441\u044f \u043e\u0440\u0438\u0433\u0456\u043d\u0430\u043b\u044c\u043d\u0456 \u0437\u043d\u0430\u0447\u0435\u043d\u043d\u044f.
-v3.MainWindow.recentDL=\u041e\u0441\u0442\u0430\u043d\u043d\u0456 %1 \u0437\u0430\u0432\u0430\u043d\u0442\u0430\u0436\u0435\u043d\u044c
-v3.MainWindow.myMedia.noneSelected=\u0412\u0438 \u043c\u0430\u0454\u0442\u0435 %1 \u0447\u0430\u0441\u0442\u0438\u043d \u0456\u043d\u0444\u043e\u0440\u043c\u0430\u0446\u0456\u0457.\n%2 \u0437 \u043d\u0438\u0445 \u0437\u0430\u0432\u0430\u043d\u0442\u0430\u0436\u0435\u043d\u0456.\n\n\u041a\u043b\u0430\u0446\u043d\u0456\u0442\u044c \u043f\u043e \u0440\u044f\u0434\u043a\u0443 \u0434\u043b\u044f \u0434\u043e\u0434\u0430\u0442\u043a\u043e\u0432\u043e\u0457 \u0456\u043d\u0444\u043e\u0440\u043c\u0430\u0446\u0456\u0457
-ConfigView.section.style.useNewStyleMessageBox=\u0412\u0438\u043a\u043e\u0440\u0438\u0441\u0442\u043e\u0432\u0443\u0432\u0430\u0442\u0438 \u043d\u043e\u0432\u0438\u0439 \u0441\u0442\u0438\u043b\u044c \u0441\u043a\u0440\u0438\u043d\u044c\u043a\u0438 \u0434\u043b\u044f \u043f\u043e\u0432\u0456\u0434\u043e\u043c\u043b\u0435\u043d\u044c
-Scrape.status.error.bad??????=\u0417\u0430\u0434\u0430\u043d\u0430 \u0430\u0434\u0440\u0435\u0441\u0430 \u043d\u0435 \u043f\u0456\u0434\u0442\u0440\u0438\u043c\u0443\u0454 \u0441\u043f\u0435\u0446\u0438\u0444\u0456\u043a\u0430\u0446\u0456\u0457 \u0448\u043a\u0440\u044f\u0431\u0430\u043d\u044c.
-MyTorrentsView.menu.rename.save_path.enter.message.2=\u042f\u043a\u0449\u043e \u0442\u0435\u043a\u0441\u0442 \u043d\u0435 \u0432\u043a\u0430\u0437\u0430\u043d\u0438\u0439, \u0432\u0438\u043a\u043e\u0440\u0438\u0441\u0442\u043e\u0432\u0443\u0432\u0430\u0442\u0438\u043c\u0435\u0442\u044c\u0441\u044f \u043e\u0440\u0438\u0433\u0456\u043d\u0430\u043b\u044c\u043d\u0435 \u0456\u043c'\u044f.
-MyTorrentsView.menu.rename.displayed.enter.message.2=\u042f\u043a\u0449\u043e \u0442\u0435\u043a\u0441\u0442 \u043d\u0435 \u0432\u043a\u0430\u0437\u0430\u043d\u0438\u0439, \u0434\u0456\u044f\u0442\u0438\u043c\u0435 \u043e\u0440\u0438\u0433\u0456\u043d\u0430\u043b\u044c\u043d\u0435 \u0456\u043c'\u044f.
-v3.HomeReminder.title=\u0417\u0430\u0432\u0430\u043d\u0442\u0430\u0436\u0435\u043d\u043d\u044f \u0434\u043e\u0434\u0430\u043d\u0435
-ConfigView.section.language.Update??????=\u041f\u043e\u043d\u043e\u0432\u0438\u0442\u0438 \u0430\u0434\u0440\u0435\u0441\u0443
-v3.HomeReminder.gohome=\u041f\u0435\u0440\u0435\u043c\u043a\u043d\u0443\u0442\u0438\u0441\u044f \u0432 \u0442\u0430\u0431\u043b\u0438\u0446\u044e \u043f\u0430\u043d\u0435\u043b\u0456 \u0456\u043d\u0441\u0442\u0440\u0443\u043c\u0435\u043d\u0442\u0456\u0432
-v3.HomeReminder.text='%1' \u0431\u0443\u0432 \u0434\u043e\u0434\u0430\u043d\u0438\u0439 \u0434\u043e \u0432\u0430\u0448\u043e\u0433\u043e \u0441\u043f\u0438\u0441\u043a\u0443 \u0437\u0430\u0432\u0430\u043d\u0442\u0430\u0436\u0435\u043d\u044c.\n\n\u042f\u043a\u0449\u043e \u0431\u0430\u0436\u0430\u0454\u0442\u0435 \u0441\u043f\u043e\u0441\u0442\u0435\u0440\u0456\u0433\u0430\u0442\u0438 \u043f\u0440\u043e\u0433\u0440\u0435\u0441 \u0437\u0430\u0432\u0430\u043d\u0442\u0430\u0436\u0435\u043d\u043d\u044f, \u0430\u0431\u043e \u0432\u0456\u0434\u0442\u0432\u043e\u0440\u0438\u0442\u0438 \u0444\u0430\u0439\u043b \u043f\u0456\u0441\u043b\u044f \u0437\u0430\u043a\u0456\u043d\u0447\u0435\u043d\u043d\u044f, \u043a\u043b\u0430\u0446\u043d\u0456\u0442\u044c \u043f\u043e \u041f\u0430\u043d\u0435\u043b\u0456 \u0456\u043d\u0441\u0442\u0440\u0443\u043c\u0435\u043d\u0442\u0456\u0432.
-iconBar.open??????.tooltip=\u0412\u0456\u0434\u043a\u0440\u0438\u0442\u0438 \u0430\u0434\u0440\u0435\u0441\u0443
-Tab.closeHint=(\u041d\u0430\u0442\u0438\u0441\u043d\u0456\u0442\u044c 'Esc' \u0434\u043b\u044f \u0437\u0430\u043a\u0440\u0438\u0442\u0442\u044f)
-v3.MainWindow.recentDL.library=\u0411\u0456\u0431\u043b\u0456\u043e\u0442\u0435\u043a\u0430 >>
diff --git a/org/gudy/azureus2/internat/MessagesBundle_zh_CN.properties b/org/gudy/azureus2/internat/MessagesBundle_zh_CN.properties
index af95ffa..dea8e27 100644
--- a/org/gudy/azureus2/internat/MessagesBundle_zh_CN.properties
+++ b/org/gudy/azureus2/internat/MessagesBundle_zh_CN.properties
@@ -157,7 +157,6 @@ ConfigView.label.autoupdate=\u5f53\u6709\u66f4\u65b0\u53ef\u7528\u7684\u65f6\u50
ConfigView.label.openconsole=\u542f\u52a8\u65f6\u6253\u5f00\u63a7\u5236\u53f0
ConfigView.label.openconfig=\u542f\u52a8\u65f6\u663e\u793a\u9009\u9879\u9875
ConfigView.label.startminimized=\u542f\u52a8\u65f6\u6700\u5c0f\u5316
-ConfigView.section.irc=IRC
ConfigView.label.ircwiki=\u8bf7\u9605\u8bfb http://www.azureuswiki.com/index.php/Rules_for_IRC
ConfigView.label.ircserver=\u670d\u52a1\u5668
ConfigView.label.ircchannel=\u9891\u9053
@@ -188,7 +187,6 @@ FilesView.name=\u540d\u79f0
FilesView.name.fastRename=\u5feb\u901f\u91cd\u547d\u540d
FilesView.size=\u5927\u5c0f
FilesView.done=\u5b8c\u6210
-FilesView.%=%
FilesView.firstpiece=\u9996\u533a\u5757\u53f7\u6570#
FilesView.numberofpieces=\u533a\u5757\u603b\u6570 #
FilesView.pieces=\u533a\u5757
@@ -525,7 +523,6 @@ openUrl.title=Vuze - \u6253\u5f00\u4e00\u4e2a Url
openUrl.url=URL\uff1a
MyTorrentsView.menu.host.error.title=\u5750\u5e84 Torrent \u5931\u8d25
MyTorrentsView.menu.host.error.message=\u5750\u5e84\u65f6\u53d1\u751f\u4ee5\u4e0b\u9519\u8bef\uff1a
-ConfigView.section.tracker=Tracker
ConfigView.section.tracker.pollinterval=Tracker \u5ba2\u6237\u7aef Poll \u65f6\u95f4\u95f4\u9694\uff08\u79d2\uff09
ConfigView.section.tracker.publishenable=\u5c06 Torrent \u6587\u4ef6\u4fe1\u606f\u53d1\u5e03\u5230 "/"
ConfigView.section.tracker.ip=Tracker \u5bf9\u5916 IP \u5730\u5740
@@ -612,7 +609,6 @@ MyTorrentsView.menu.editTableColumns=\u9009\u62e9\u663e\u793a\u7684\u5217\uff08&
wizard.operationfailed=\u64cd\u4f5c\u5931\u8d25
authenticator.title=\u9700\u8981\u8ba4\u8bc1
authenticator.realm=\u9886\u57df
-authenticator.tracker=Tracker
authenticator.user=\u7528\u6237\u540d
authenticator.password=\u5bc6\u7801
ConfigView.label.allowSendVersion=\u51c6\u8bb8 Vuze \u5728\u68c0\u67e5\u65b0\u7248\u672c\u65f6 \u53d1\u9001\u533f\u540d\u7684\u7248\u672c\u53f7\u548c\u968f\u673a\u7684 ID
@@ -728,7 +724,6 @@ ConfigView.section.style.alwaysRefreshMyTorrents.tooltip=\u8fd9\u4e2a\u9009\u987
#
#2.0.7.0
#
-ConfigView.section.style.verticaloffset=\u56fe\u50cf\u5782\u76f4\u7684\u504f\u79fb\u91cf\uff08GTK \u8865\u4e01\uff09
security.certtruster.title=\u5b89\u5168\u8bc1\u4e66\u8b66\u544a
security.certtruster.intro=\u8fd9\u4e2a\u5b89\u5168\u8bc1\u4e66\u662f\u7531\u4e00\u4e2a\u4f60\u4e0d\u4fe1\u4efb\u7684\u516c\u53f8\u9881\u53d1\u7684
security.certtruster.resource=\u8d44\u6e90\uff1a
@@ -750,7 +745,6 @@ MainWindow.dialog.share.sharedircontents.recursive=\u9012\u5f52\u7684
globalmanager.download.remove.veto=\u5df2\u5426\u51b3\u5220\u9664\u64cd\u4f5c
plugin.sharing.download.remove.veto=\u6b64\u4e0b\u8f7d\u662f\u7531\u8d44\u6e90\u88ab\u5171\u4eab\u6240\u9020\u6210\u3002\n\u8981\u5220\u9664\u4e0b\u8f7d\uff0c\u8bf7\u5220\u9664\u5171\u4eab\u5173\u8054: go to Tools->My Classic-Shares.
ConfigView.section.tracker.main=\u4e3b\u8981
-ConfigView.section.tracker.web=Web
ConfigView.label.prioritizefirstpiece=\u4f18\u5148\u4e0b\u8f7d\u6587\u4ef6\u7684\u7b2c\u4e00\u4e2a\u533a\u5757
ConfigView.label.prioritizefirstpiece.tooltip=\u8bd5\u56fe\u4e0b\u8f7d\u6bcf\u4e00\u4e2a\u6587\u4ef6\u7684\u6587\u4ef6\u5934\u90e8\u5206\n\u4e3a\u4e86\u652f\u6301\u65e9\u671f\u9884\u89c8\u3002
ConfigView.section.file.confirm_data_delete=\u5220\u9664\u6570\u636e\u65f6\u663e\u793a\u786e\u8ba4\u7a97\u53e3
@@ -1054,7 +1048,6 @@ plugins.basicview.log=\u65e5\u5fd7\uff1a
ConfigView.label.maxdownloadspeed=\u5168\u5c40\u6700\u5927\u4e0b\u8f7d\u901f\u5ea6\uff08KB/s\uff09\uff1a\uff3b0\uff1a\u65e0\u9650\u5236\uff3d
splash.loadingTorrent=\u88c5\u8f7d Torrent
splash.of=\u7684
-ConfigView.section.plugins.irc=IRC
UpdateWindow.title=Vuze \u66f4\u65b0\u5668
UpdateWindow.header=\u4ee5\u4e0b\u7ec4\u4ef6\u9700\u8981\u66f4\u65b0\uff1a
UpdateWindow.columns.install=\u5b89\u88c5
@@ -1131,7 +1124,6 @@ Security.keystore.corrupt=Keystore "%1" \u52a0\u8f7d\u9519\u8bef\uff0c\u8bf7\u52
Security.keystore.empty=Keystore \u4e3a\u7a7a\u3002\u8bf7\u521b\u5efa\u81ea\u6211\u7b7e\u7f72\u8bc1\u4e66\uff08\u53c2\u89c1 \u5de5\u5177->\u9009\u9879->\u5b89\u5168\uff09\u6216\u8f93\u5165\u4e00\u4e2a\u5b58\u5728\u7684\u8bc1\u4e66\u5230 "%1"
webui.restart.info=\u5e26\uff08*\uff09\u7684\u9879\u76ee\u88ab\u6539\u53d8\u540e\u9700\u8981\u91cd\u542f\u624d\u80fd\u8d77\u4f5c\u7528
GeneralView.label.maxdownloadspeed.tooltip=\u6700\u5927\u4e0b\u8f7d\u901f\u5ea6\uff3b0\uff1a\u65e0\u9650\u5236\uff3d
-ConfigView.section.UPnP=UPnP
upnp.enable=\u542f\u7528 UPnP
upnp.info=\u901a\u7528\u5373\u63d2\u5373\u7528\uff08UPnP\uff09 \u5141\u8bb8\u5728\u5df2\u542f\u7528 UPnP \u7684\u8def\u7531\u5668\u4e0a\u81ea\u52a8\u7aef\u53e3\u6620\u5c04\u3002
upnp.mapping.dataport=\u4f20\u5165\u7528\u6237\u6570\u636e\u7aef\u53e3
@@ -1251,7 +1243,6 @@ Security.jar.signfail=JAR \u7b7e\u7f72\u5931\u8d25 - %1
ConfigView.section.security.toolsinfo=\u6709\u7b7e\u540d\u7684 JAR \u6587\u4ef6\u7528\u4e8e\u652f\u6301\u67d0\u4e9b\u63d2\u4ef6\uff0c\u4f8b\u5982\uff1a Swing \u7f51\u7edc\u4ecb\u9762\uff08\u5f53\u5b89\u88c5\u914d\u7f6e\u540e\uff09\u3002\n\u4e3a\u4e86\u7b7e\u7f72 JAR \u6587\u4ef6\uff0c\u5fc5\u987b\u8bbf\u95ee "tools.jar" \u6587\u4ef6\u3002\u6b64\u6587\u4ef6\u968f Sun JDK\uff08\u4e0d\u662f JRE\uff09 \u4e00\u8d77\u5b89\u88c5\u3002 \n\u5982\u679c\u4f60\u4ec5\u5b89\u88c5\u4e86 JRE\uff0c\u8bf7\u518d\u5b89\u88c5 JDK\u3002\nVuze \u901a\u5e38\u80fd\u5e2e\u4f60\u627e\u5230\u8fd9\u4e2a\u6587\u4ef6\u3002\u4f46\u5982\u679c\u6ca1\u627e\u5230\uff0c\u4f60\u53ef\u4ee5\u5728\u6b64\u8bbe\u7f6e\u5b83\u6240\u5728\u7684\u76ee\u5f55\u3002
ConfigView.section.security.toolsdir=\u5305\u542b "tools.jar" \u7684\u76ee\u5f55
ConfigView.section.security.choosetoolssavedir=\u9009\u62e9\u5305\u542b "tools.jar" \u7684\u6587\u4ef6\u5939
-authenticator.torrent=Torrent
ConfigView.section.proxy.peer.same=\u4e3a Tracker \u548c\u7528\u6237\u8fde\u63a5\u4f7f\u7528\u76f8\u540c\u7684\u4ee3\u7406\u670d\u52a1\u5668
ConfigView.section.connection.network.max.simultaneous.connect.attempts=\u6700\u5927\u540c\u65f6\u5bf9\u5916\u8fde\u63a5\u5c1d\u8bd5\uff3b0\uff1a\u7981\u6b62\u5bf9\u5916\u8fde\u63a5\uff3d
ConfigView.section.connection.network.max.simultaneous.connect.attempts.tooltip=\u6700\u5927\u7684\u65b0\u589e\u5411\u5916\u8fde\u63a5\u6570\uff0c\u6307\u5b9a Vuze \u5728\u4efb\u4f55\u65f6\u95f4\u7684\u5c1d\u8bd5\u6b21\u6570\u3002\n\u6ce8\u610f\uff1a WindowsXP Service Pack 2\uff08SP2\uff09 \u5f3a\u5236\u7cfb\u7edf\u540c\u65f6\u8fde\u63a5\u5c1d\u8bd5\u4e3a10\u6b21\u3002\n\u9ed8\u8ba4\u503c\u4e3a8\u6b21\u30020\u4e3a\u5b8c\u5168\u7981\u6b62\u5411\u5916\u8fde\u63a5\u3002
@@ -1570,26 +1561,8 @@ DHTView.general.reachable=\u53ef\u5230\u8fbe\uff1a
DHTView.general.rendezvous=\u96c6\u5408\u70b9\uff1a
ConfigView.label.queue.maxactivetorrentswhenseeding=\u4ec5\u505a\u79cd\u65f6\u7684\u6700\u5927\u4efb\u52a1\u6570\uff3b0\uff1a\u65e0\u9650\u5236\uff3d
Views.plugins.IRC.title=IRC - \u5728\u7ebf\u6280\u672f\u652f\u6301
-Formats.units.persec=/s
-Formats.units.TiB=TiB
-Formats.units.Tibit=Tibit
-Formats.units.TB=TB
-Formats.units.Tbit=Tbit
-Formats.units.GiB=GiB
-Formats.units.Gibit=Gibit
-Formats.units.GB=GB
-Formats.units.Gbit=Gbit
-Formats.units.MiB=MiB
-Formats.units.Mibit=Mibit
-Formats.units.MB=MB
-Formats.units.Mbit=Mbit
-Formats.units.KiB=KiB
-Formats.units.Kibit=Kibit
Formats.units.kB=KB
-Formats.units.KB=KB
Formats.units.kbit=Kbit
-Formats.units.B=B
-Formats.units.bit=bit
Formats.units.alot=\u5f88\u591a \uff01\uff01\uff01
ConfigView.section.ipfilter.persistblocking=\u4e0b\u6b21\u542f\u52a8\u7684\u65f6\u5019\u4fdd\u7559\u4e0a\u6b21\u5c01\u7981\u7684 IP \u5730\u5740
FilesView.menu.rename=\u4fee\u6539\u76ee\u6807
@@ -1645,7 +1618,6 @@ TableColumn.header.swarm_average_completion=\u7528\u6237\u5e73\u5747\u5b8c\u6210
TableColumn.header.swarm_average_completion.info=\u7fa4\u4f53\u7528\u6237\u7684\u5e73\u5747\u4e0b\u8f7d\u5b8c\u6210\u7387
GeneralView.label.swarm_average_completion=\u5e73\u5747\u5b8c\u6210\u5ea6\uff1a
GeneralView.label.swarm_average_completion.tooltip=\u7fa4\u4f53\u7528\u6237\u7684\u5e73\u5747\u4e0b\u8f7d\u5b8c\u6210\u7387
-MainWindow.nat.status.unknown=NAT
MainWindow.nat.status.tooltip.unknown=\u9632\u706b\u5899/NAT\uff08TCP\uff09 \u53ef\u5230\u8fbe\u6027\u72b6\u6001\u672a\u77e5
MainWindow.nat.status.ok=NAT \u6b63\u5e38
MainWindow.nat.status.tooltip.ok=\u53ef\u5230\u8fbe\u6027\u6b63\u5e38\uff08TCP\uff09
@@ -1904,7 +1876,6 @@ ConfigView.section.proxy.username.info=\u5982\u679c\u4ee3\u7406\u670d\u52a1\u566
ConfigView.label.maxuploadswhenbusymin=\u4efb\u52a1\u7e41\u5fd9\u65f6\u5355\u4efb\u52a1\u5168\u901f\u4e0a\u4f20\u65f6\u95f4\uff3b\u79d2\uff3d
MainWindow.menu.help.debug=\u751f\u6210 Debug \u4fe1\u606f
DownloadManager.error.badsize=\u6587\u4ef6\u5927\u5c0f\u9519\u8bef
-ConfigView.section.NATPMP=NAT-PMP
natpmp.info=NAT-PMP \u662f\u82f9\u679c\u673a\u4e0a UPnP \u7684\u66ff\u4ee3\u534f\u8bae\uff0c\u76ee\u524d Airport stations \u5df2\u7ecf\u652f\u6301\u8be5\u534f\u8bae\n\n\u6ce8\u610f UPnP \u5fc5\u987b\u542f\u7528\u540e\u624d\u80fd\u542f\u7528 NAT-PMP\uff0c\u56e0\u4e3a NAT-PMP \u8bbe\u5907\u88ab\u5f53\u4f5c\u4e00\u79cd\u7279\u522b\u7684 UPnP \u8bbe\u5907
natpmp.enable=\u542f\u7528\uff08\u6ce8\u610f\u5fc5\u987b\u5728 Airport \u8bbe\u7f6e\u4e2d\u542f\u7528\u624d\u80fd\u6b63\u5e38\u4f7f\u7528\uff09
ConfigView.section.tracker.host.addurls=\u4fdd\u8bc1\u8fd9\u4e2a Tracker \u7684\u8fde\u63a5\u4f4d\u4e8e\u5750\u5e84\u79cd\u5b50\u4e2d
@@ -1951,13 +1922,8 @@ MainWindow.menu.view.iconbar=\u5de5\u5177\u6761
MyTorrentsView.menu.rename=\u91cd\u547d\u540d
MyTorrentsView.menu.rename.displayed=\u91cd\u547d\u540d\u663e\u793a\u540d\u79f0
MyTorrentsView.menu.rename.save_path=\u91cd\u547d\u540d\u4fdd\u5b58\u76ee\u5f55
-MyTorrentsView.menu.rename.displayed_and_save_path=\u4e24\u8005\u90fd\u91cd\u547d\u540d
MyTorrentsView.menu.rename.displayed.enter.title=\u91cd\u547d\u540d\u663e\u793a\u540d\u79f0
MyTorrentsView.menu.rename.displayed.enter.message=\u4e3a\u8be5\u4e0b\u8f7d\u8f93\u5165\u4e00\u4e2a\u65b0\u7684\u663e\u793a\u540d\u79f0\u3002\n\u5982\u679c\u6ca1\u6709\u8f93\u5165\u6587\u672c\uff0c\u5c06\u4f7f\u7528\u539f\u59cb\u540d\u79f0\u3002
-MyTorrentsView.menu.rename.save_path.enter.title=\u91cd\u547d\u540d\u4fdd\u5b58\u76ee\u5f55
-MyTorrentsView.menu.rename.save_path.enter.message=\u4e3a\u8be5\u4e0b\u8f7d\u8f93\u5165\u4e00\u4e2a\u65b0\u7684\u4fdd\u5b58\u76ee\u5f55\u3002\n\u5982\u679c\u6ca1\u6709\u8f93\u5165\u6587\u672c\uff0c\u4e0b\u8f7d\u4efb\u52a1\u663e\u793a\u7684\u540d\u79f0\u5c06\u88ab\u4f7f\u7528\u3002
-MyTorrentsView.menu.rename.displayed_and_save_path.enter.title=\u91cd\u547d\u540d\u4e0b\u8f7d
-MyTorrentsView.menu.rename.displayed_and_save_path.enter.message=\u4e3a\u8be5\u4e0b\u8f7d\u8f93\u5165\u4e00\u4e2a\u65b0\u7684\u540d\u79f0\u3002\n\u5982\u679c\u6ca1\u6709\u8f93\u5165\u6587\u672c\uff0c\u5c06\u91c7\u7528\u9ed8\u8ba4\u503c\u3002
MyTorrentsView.menu.edit_comment=\u7f16\u8f91\u8bc4\u8bba
MyTorrentsView.menu.edit_comment.enter.title=\u7f16\u8f91\u8bc4\u8bba
MyTorrentsView.menu.edit_comment.enter.message=\u4e3a\u8be5\u4e0b\u8f7d\u8f93\u5165\u4e00\u4e2a\u8bc4\u8bba\u3002
@@ -2007,7 +1973,6 @@ ConfigView.label.pause.downloads.on.exit=\u9000\u51fa\u65f6\u6682\u505c\u4e0b\u8
ConfigView.label.resume.downloads.on.start=\u542f\u52a8\u5e76\u521d\u59cb\u5316\u5b8c\u6210\u540e\u8fdb\u884c\u6682\u505c\u7684\u4e0b\u8f7d\u4efb\u52a1
UIDebugGenerator.message.cancel.title=\u5df2\u53d6\u6d88\u751f\u6210 Debug \u4fe1\u606f
UIDebugGenerator.message.cancel.text=\u4f60\u6ca1\u6709\u63cf\u8ff0\u4f60\u8981\u62a5\u544a\u7684 BUG\u3002 BUG \u5bf9\u4f60\u6765\u8bf4\u5f88\u660e\u663e\uff0c\u4f46\u6ca1\u6709\u63cf\u8ff0\u6211\u4eec\u4ec5\u80fd\u731c\u6d4b\u662f\u4f60\u4e2a\u4eba\u7684\u95ee\u9898\u3002\n\n\u5df2\u53d6\u6d88\u751f\u6210 Debug \u4fe1\u606f\u3002
-ConfigView.section.connection.group.http=HTTP
ConfigView.section.connection.group.http.info=HTTP \u505a\u79cd\u6a21\u5f0f
ConfigView.section.connection.http.enable=\u542f\u7528
ConfigView.section.connection.http.port=\u4f20\u5165\u7aef\u53e3\u53f7
@@ -2160,9 +2125,6 @@ v3.MainWindow.menu.advanced=\u9ad8\u7ea7\uff08&A\uff09
v3.MainWindow.menu.view.searchbar=\u641c\u7d22\u6761
v3.MainWindow.menu.view.tabbar=\u9875\u9762\u6761
v3.MainWindow.currentDL=\u6b63\u5728\u4e0b\u8f7d
-v3.MainWindow.recentDL=\u6700\u8fd1 %1 \u4e0b\u8f7d
-v3.MainWindow.recentDL.library=\u6211\u7684\u6587\u4ef6\u5e93 >>
-v3.MainWindow.myMedia.noneSelected=\u4f60\u62e5\u6709 %1 \u5757\u5185\u5bb9\n%2 \u5757\u5df2\u7ecf\u5b8c\u6210\n\n\u70b9\u51fb\u4e00\u884c\u67e5\u770b\u5185\u5bb9\u4fe1\u606f
v3.MainWindow.button.stream=\u6d41
v3.MainWindow.button.stop=\u505c\u6b62
v3.MainWindow.button.start=\u5f00\u59cb
@@ -2173,7 +2135,6 @@ v3.MainWindow.button.comment=\u8bc4\u8bba
v3.MainWindow.button.viewdetails=\u67e5\u770b\u7ec6\u8282
v3.MainWindow.button.play=\u8fd0\u884c
v3.MainWindow.button.cancel=\u53d6\u6d88
-v3.MainWindow.button.sendtofriend=\u5171\u4eab
v3.MainWindow.button.preview=\u9884\u89c8
v3.MainWindow.view.wait=\u521d\u59cb\u5316\u89c6\u56fe\uff0c \u8bf7\u7a0d\u5019
v3.MainWindow.xofx=%2 \u7684 %1
@@ -2304,7 +2265,6 @@ ConfigTransferAutoSpeed.auto.speed.classic=\u81ea\u52a8\u901f\u5ea6\u8c03\u6574\
ConfigTransferAutoSpeed.auto.speed.beta=\u81ea\u52a8\u901f\u5ea6\u8c03\u6574\uff08beta\uff09
ConfigTransferAutoSpeed.data.update.frequency=\u66f4\u65b0\u9891\u7387
Alert.failed.update=\u81f3\u5c11\u6709\u4e00\u4e2a\u7ec4\u4ef6\u5b89\u88c5\u5931\u8d25\u3002\u8bf7\u67e5\u770b <A HREF="{Alert.failed.update.url}">AzureusWiki\uff1a Failed Update</A> [%1]
-Alert.failed.update.url=http://azureuswiki.com/index.php/Failed_Update
OpenTorrentWindow.mb.existingFiles.partialList=\uff08\u90e8\u5206\u5217\u8868. \u66f4\u591a\u6587\u4ef6\u5df2\u5b58\u5728\uff09
TableColumn.header.bad_avail_time.info=\u4e0a\u4e00\u6b21\u770b\u5230\u5b8c\u6574\u62f7\u8d1d\u7684\u65f6\u95f4
TableColumn.header.bad_avail_time=\u770b\u5230\u5b8c\u6574\u62f7\u8d1d\u7684\u65f6\u523b
@@ -2444,7 +2404,6 @@ azbuddy.ui.menu.remove=\u79fb\u9664
azbuddy.ui.menu.copypk=\u590d\u5236\u516c\u94a5
azbuddy.ui.menu.send=\u53d1\u9001\u6d88\u606f
azbuddy.ui.menu.send_msg=\u8f93\u5165\u8981\u53d1\u9001\u7ed9\u4f60\u597d\u53cb(\u4eec)\u7684\u6587\u5b57
-azbuddy.ui.menu.ping=Ping
azbuddy.ui.menu.ygm=\u53d1\u9001 YGM
azbuddy.ui.menu.enc=\u52a0\u5bc6\u526a\u8d34\u677f
azbuddy.ui.menu.dec=\u89e3\u5bc6\u526a\u8d34\u677f
@@ -2477,53 +2436,17 @@ Button.bar.share=\u5206\u4eab
Button.bar.add=\u6dfb\u52a0
Button.bar.edit=\u7f16\u8f91
Button.bar.edit.cancel=\u5b8c\u6210\u7f16\u8f91
-v3.Share.menu=\u5206\u4eab\u5185\u5bb9
-v3.Share.header=\u5206\u4eab
-v3.Share.header.message=\u4e0e\u5f53\u524d\u597d\u53cb\u5206\u4eab\uff0c\u6216\u6dfb\u52a0\u65b0\u597d\u53cb
-v3.Share.add.buddy=\u6dfb\u52a0\u597d\u53cb
-v3.Share.add.edit.buddy=\u6dfb\u52a0/\u7f16\u8f91\u597d\u53cb
-v3.Share.add.buddy.all=\u548c\u6240\u6709\u4eba\u5206\u4eab
-v3.Share.add.buddy.existing=\u5df2\u6709\u597d\u53cb\uff1a
-v3.Share.add.buddy.new=\u65b0\u597d\u53cb\uff1a
-v3.Share.buddies=\u597d\u53cb
-v3.Share.invitees=\u88ab\u9080\u8bf7\u8005
-v3.Share.invite.buddies.prompt=\u9080\u8bf7\u66f4\u591a\u7684\u597d\u53cb\u6765\u5206\u4eab
-v3.Share.send.now=\u53d1\u9001
-v3.Share.optional.message=\u901a\u8fc7\u63d0\u793a\u53d1\u9001\u989d\u5916\u6d88\u606f (\u6700\u591a 140 \u5b57\u7b26):
-v3.Share.disclaimer=\u6ce8\u610f: \u60a8\u5206\u4eab\u7684\u5185\u5bb9\u548c\u989d\u5916\u7684\u4fe1\u606f\u90fd\u5c06\u88ab\u52a0\u5bc6\u3002
-v3.Share.disclaimer.link=\u66f4\u591a\u9605\u8bfb
-ConfigView.section.security.vuze.login=\u60a8\u9700\u8981\u767b\u5f55\u81f3 Vuze \u6765\u8fdb\u884c\u6b64\u64cd\u4f5c
-v3.buddy.menu.viewprofile=\u67e5\u770b\u9884\u7f6e\u6587\u4ef6
-v3.buddy.menu.remove=\u79fb\u9664\u597d\u53cb
v3.MainWindow.menu.view.pluginbar=\u63d2\u4ef6\u9762\u677f
-v3.MainWindow.menu.view.buddies-viewer=\u597d\u53cb\u9762\u677f
-v3.activity.buddy-request=\u60a8\u6709\u4e00\u4e2a\u6765\u81ea %1 \u7684\u597d\u53cb\u8bf7\u6c42
-v3.activity.buddy-request.accept=\u63a5\u53d7
-v3.activity.buddy-request.multi=\u60a8\u6709\u4e00\u4e2a\u597d\u53cb\u8bf7\u6c42 [#%3] \u6765\u81ea %1
-v3.activity.buddy-linkup=\u60a8\u548c %1 \u73b0\u5728\u662f\u597d\u53cb\u4e86\u3002
-v3.activity.share-content=%1 \u4e0e\u60a8\u5206\u4eab\u4e86 %2 %3 <A HREF="%4" TITLE="%5">\u8bf4...</A>
-v3.activity.share-content.no-msg=%1 \u4e0e\u60a8\u5206\u4eab\u4e86 %2
-v3.buddies.friends=\u597d\u53cb
-v3.buddies.online=\u5728\u7ebf (%1)
-v3.buddies.remove=\u79fb\u9664\u597d\u53cb
-v3.buddies.add.to.share=\u6dfb\u52a0\u597d\u53cb\u5e76\u5206\u4eab
MainWindow.dialog.select.vuze.file=\u9009\u62e9 Vuze \u6587\u4ef6
MainWindow.menu.file.open.vuze=Vuze \u6587\u4ef6...
-azbuddy.ui.dialog.disable.title=\u7981\u7528\u597d\u53cb\u63d2\u4ef6
-azbuddy.ui.dialog.disable.text=\u7981\u7528\u597d\u53cb\u63d2\u4ef6\u5c06\u4f7f\u4f60\u65e0\u6cd5\u901a\u8fc7\u8be5\u7a0b\u5e8f\u5e95\u90e8\u7684\u597d\u53cb\u6761\u6765\u5206\u4eab torrents \uff0c\u5e76\u65e0\u6cd5\u4fee\u6539\u4f60\u7684\u597d\u53cb\u5217\u8868\n\n\u4f60\u786e\u5b9a\u4f60\u8981\u7981\u7528\u597d\u53cb\u63d2\u4ef6\uff1f
metasearch.addtemplate.title=\u5b89\u88c5\u641c\u7d22\u6a21\u677f\uff1f
metasearch.addtemplate.desc=\u4f60\u786e\u5b9a\u4f60\u60f3\u8981\u5b89\u88c5 '%1' \u7684\u641c\u7d22\u6a21\u677f\uff1f
v3.share.private.title=\u5206\u4eab Torrent
v3.share.private.text=\u6240\u9009\u7684 torrent \u88ab\u6807\u8bb0\u4e3a\u79c1\u6709 Torrent.\n\n\u60a8\u4e0d\u53ef\u4ee5\u5206\u4eab\u79c1\u6709 torrents\u3002
-v3.buddies.disabled.title=\u597d\u53cb\u63d2\u4ef6\u7981\u7528
-v3.buddies.disabled.text._windows=\u60a8\u5df2\u7ecf\u7981\u7528\u4e86\u597d\u53cb\u63d2\u4ef6\uff0c\u5c06\u4f7f\u60a8\u65e0\u6cd5\u5206\u4eab\u3001\u63a5\u53d7torrent\u6216\u597d\u53cb\u8bf7\u6c42\u3002\u60a8\u53ef\u4ee5\u5728\u201c\u9009\u9879\u201c\u6807\u7b7e\u9875\u4e2d\u66f4\u6539\u7684\u8bbe\u5b9a\u3002
-v3.buddies.disabled.text._mac=\u60a8\u5df2\u7ecf\u7981\u7528\u4e86\u597d\u53cb\u63d2\u4ef6\uff0c\u5c06\u4f7f\u60a8\u65e0\u6cd5\u5206\u4eab\u3001\u63a5\u53d7torrent\u6216\u597d\u53cb\u8bf7\u6c42\u3002\u60a8\u53ef\u4ee5\u5728\u201c\u9009\u9879\u201c\u6807\u7b7e\u9875\u4e2d\u66f4\u6539\u7684\u8bbe\u5b9a\u3002
metasearch.addtemplate.dup.title=\u91cd\u590d\u7684\u6a21\u677f
metasearch.addtemplate.dup.desc=\u641c\u7d22\u6a21\u677f %1 \u5df2\u7ecf\u5b89\u88c5\u4e86
metasearch.export.select.template.file=\u4fdd\u5b58\u6a21\u677f
metasearch.import.select.template.file=\u6253\u5f00\u6a21\u677f
-v3.MainWindow.button.newtag.share=\u65b0\u529f\u80fd\uff01Torrent\u5206\u4eab
-v3.buddies.faq=\u66f4\u591a\u9605\u8bfb
dialog.uiswitch.title=\u5207\u6362\u5230 Vuze UI
dialog.uiswitch.text=\u60a8\u9700\u8981\u8fd0\u884c\u4e2d\u7684 Vuze UI \u6765\u4f7f\u7528\u6b64\u529f\u80fd\n\nVuze \u5c06\u9700\u8981\u91cd\u65b0\u542f\u52a8
dialog.uiswitch.button=\u5207\u6362\u5230 Vuze UI
@@ -2531,25 +2454,10 @@ azbuddy.tracker.enabled=\u542f\u7528 '\u597d\u53cb\u6367\u573a' \u6765\u901a\u8f
azbuddy.protocolspeed=KB/s \u6700\u5927\u597d\u53cb\u534f\u8bae\u603b\u5f00\u9500
v3.MainWindow.button.download=\u4e0b\u8f7d
v3.MainWindow.button.run=\u542f\u52a8\u5df2\u4e0b\u8f7d\u7684\u6587\u4ef6
-v3.activity.header.friend.requests.foryou=\u597d\u53cb\u8bf7\u6c42 - \u4e3a\u60a8\u7684
-v3.activity.header.friend.requests.fromyou=\u597d\u53cb\u8bf7\u6c42 - \u6765\u81ea\u60a8
-v3.activity.header.friend.requests.accepted=\u597d\u53cb\u8bf7\u6c42 - \u63a5\u53d7
-v3.activity.header.share.requests=Torrent \u5206\u4eab\u8bf7\u6c42
v3.activity.header.downloads=\u4e0b\u8f7d
-v3.activity.header.rating.reminders=\u4e3a\u63d0\u9192\u8005\u8bc4\u5206
v3.activity.header.vuze.news=Vuze \u65b0\u95fb
-login.optional.message=\u60a8\u5fc5\u987b\u767b\u5f55\u4ee5\u4f7f\u7528\u6b64\u529f\u80fd
-message.confirm.share.singular=\u68d2\u6781\u4e86\uff01\u4f60\u8981\u6c42\u5206\u4eab Torrent \u7684\u8bf7\u6c42\u5df2\u88ab\u53d1\u9001\u3002
-message.confirm.share.plural=\u68d2\u6781\u4e86\uff01\u4f60\u8981\u6c42\u5206\u4eab Torrent \u7684\u8bf7\u6c42\u5df2\u88ab\u53d1\u9001\u3002
-message.confirm.share.invite.singular=\u68d2\u6781\u4e86\uff01\u4f60\u8981\u6c42\u8fde\u63a5\u5e76\u5206\u4eab\u7684\u8bf7\u6c42\u5df2\u88ab\u53d1\u9001\u3002\u6162\u6162\u7684\u54c4\u7684\u4f60\u7684\u597d\u53cb\u540c\u610f\u5427\u3002
-message.confirm.share.invite.plural=\u68d2\u6781\u4e86\uff01\u4f60\u8981\u6c42\u8fde\u63a5\u5e76\u5206\u4eab\u7684\u8bf7\u6c42\u5df2\u88ab\u53d1\u9001\u3002\u6162\u6162\u7684\u54c4\u7684\u4f60\u7684\u597d\u53cb\u540c\u610f\u5427\u3002
-message.confirm.invite.singular=\u68d2\u6781\u4e86\uff01\u4f60\u7684\u597d\u53cb\u8bf7\u6c42\u88ab\u5df2\u53d1\u9001\u3002\u6162\u6162\u7684\u54c4\u4f60\u7684\u597d\u53cb\u540c\u610f\u5427\u3002
-message.confirm.invite.plural=\u68d2\u6781\u4e86\uff01\u4f60\u7684\u597d\u53cb\u8bf7\u6c42\u88ab\u5df2\u53d1\u9001\u3002\u6162\u6162\u7684\u54c4\u4f60\u7684\u597d\u53cb\u540c\u610f\u5427\u3002
-message.confirm.invite.error=\u5012\uff01\u4e00\u4e9b\u5bf9\u6b64\u8bf7\u6c42\u7684\u7ebf\u8def\u51b2\u7a81\u4e86\uff0c\u4e00\u4e2a\u6216\u591a\u4e2a\u4f60\u7684\u8bf7\u6c42\u53d1\u751f\u9519\u8bef\u3002
-message.prompt.add.friends=\u4ece\u4f60\u7684\u4fa7\u9762\u677f\u4e2d\u9009\u62e9\u597d\u53cb (\u5728\u5de6\u4e0b\u89d2).
message.taking.too.long=\u5982\u679c\u6240\u82b1\u65f6\u95f4\u6bd4\u9884\u671f\u8981\u957f\u7684\u8bdd\n\u6309\u4e0b 'ESC' \u5165\u80a1\u4f60\u60f3\u8981\u53d6\u6d88\u6b64\u64cd\u4f5c
message.status.success=\u6210\u529f
-message.intro.friends=\u6dfb\u52a0\u597d\u53cb\uff1b\n\u5206\u4eab Torrents\uff1b\n\u66f4\u5feb\u4e0b\u8f7d\u3002
azbuddy.tracker.bbb.status.title=\u597d\u53cb\u6367\u573a
azbuddy.tracker.bbb.status.title.tooltip=\u53cc\u51fb\u67e5\u770b\u8be6\u60c5
azbuddy.tracker.bbb.status.idle=\u6ca1\u6709\u88ab\u6367\u573a
@@ -2558,13 +2466,8 @@ azbuddy.tracker.bbb.status.in=\u6211\u88ab\u6367\u573a\u5566
azbuddy.tracker.bbb.status.out=\u5f53\u524d\u6367\u573a\u7684\u597d\u53cb
v3.MainWindow.search.go.tooltip=\u6267\u884c\u641c\u7d22
v3.MainWindow.search.last.tooltip=\u8fd4\u56de\u641c\u7d22\u7ed3\u679c
-v3.activity.buddy-invited=\u60a8\u5411 %1 \u53d1\u9001\u4e86\u597d\u53cb\u8bf7\u6c42
-v3.activity.buddy-invited.multi=\u60a8\u5411\u4ee5\u4e0b\u4eba\u5458\u53d1\u9001\u4e86\u597d\u53cb\u8bf7\u6c42:\n%1
metasearch.addtemplate.done.title=\u6dfb\u52a0\u7684\u6a21\u677f
metasearch.addtemplate.done.desc=\u6a21\u677f '%1' \u6210\u529f\u6dfb\u52a0.\n\u5b83\u4f1a\u5728\u4f60\u4e0b\u6b21\u641c\u7d22\u65f6\u4f7f\u7528\uff01
-v3.MainWindow.button.share=\u5206\u4eab\u5185\u5bb9
-v3.buddies.remove.buddy.dialog.title=\u79fb\u9664
-v3.buddies.remove.buddy.dialog.text=\u60a8\u786e\u5b9a\u8981\u79fb\u9664\u597d\u53cb %1 \u4e48\uff1f
ConfigView.section.security.nopw=\u6ca1\u6709\u63d0\u4f9b\u5bc6\u7801
ConfigView.section.security.nopw_v=\u6ca1\u6709\u53ef\u7528\u7684\u5bc6\u7801\uff0c\u8bf7\u4e0e Vuze \u7b7e\u540d
fileplugininstall.install.title=\u5b89\u88c5\u63d2\u4ef6\uff1f
@@ -2578,14 +2481,7 @@ azbuddy.os_not_avail=\u4e0d\u53ef\u7528
azbuddy.os_busy=\u5fd9\u788c
azbuddy.os_offline=\u79bb\u7ebf
azbuddy.ui.menu.disconnect=\u65ad\u5f00\u94fe\u63a5
-v3.buddy.menu.chat=\u804a\u5929
-v3.chat.offline=%1 \u76ee\u524d\u79bb\u7ebf\uff0c\u5c06\u5728\u4e0a\u7ebf\u65f6\u6536\u5230\u60a8\u53d1\u9001\u7684\u6d88\u606f
-v3.chat.wrongversion=%1 \u4f7f\u7528\u7684 Vuze \u7248\u672c\u4e0d\u652f\u6301\u804a\u5929\u3002
azbuddy.enable_chat_notif=\u5141\u8bb8\u804a\u5929\u63d0\u793a
-v3.buddies.dnd.info.dialog.title=
-v3.buddies.dnd.info.dialog.text=\u60a8\u53d1\u8d77\u4e86\u4e00\u4e2a Drop Share\u3002\u60a8\u7684\u5185\u5bb9\u6b63\u88ab\u51c6\u5907\u5206\u4eab\u4e2d\uff0c\u5206\u4eab\u7a97\u53e3\u5c06\u5728\u60a8\u5185\u5bb9\u51c6\u5907\u597d\u540e\u6253\u5f00\n\n\u60a8\u9700\u8981\u4fdd\u6301 Vuze \u8fd0\u884c\u4ee5\u4fbf\u60a8\u7684\u597d\u53cb\u63a5\u53d7\u6570\u636e\u3002\n<A HREF="http://faq.vuze.com/?View=entry&EntryID=267">\u70b9\u51fb\u8fd9\u91cc</A> \u83b7\u5f97\u5173\u4e8e\u6b64\u529f\u80fd\u66f4\u591a\u7684\u4fe1\u606f\u3002
-v3.buddies.dnd.info.dialog.ok=\u786e\u8ba4
-v3.buddies.dnd.info.dialog.remember=\u4e0d\u518d\u663e\u793a\u6b64\u6d88\u606f
progress.window.msg.progress=\u8bf7\u7b49\u5f85\u64cd\u4f5c\u5b8c\u6210
DetailedListView.title=\u8be6\u60c5\u5217\u8868
ConfigView.section.connection.network.max.outstanding.connect.attempts=\u6700\u5927\u5bf9\u5916\u8fde\u63a5\u6570
@@ -2636,25 +2532,18 @@ PluginDeprecation.view=\u63d2\u4ef6 Debug
PluginDeprecation.alert=\u4e00\u4e2a\u63d2\u4ef6\u5c1d\u8bd5\u4f7f\u7528\u4e00\u4e2a\u5373\u5c06\u88ab\u79fb\u9664\u7684\u529f\u80fd\u3002- \u8bf7\u6253\u5f00\u63d2\u4ef6 Debug \u65e5\u5fd7\u67e5\u770b\u66f4\u591a\u4fe1\u606f\u3002
TableColumn.header.Thumbnail=\u56fe\u6807
TableColumn.header.Thumbnail.info=\u7528\u4e8e Vuze \u7684\u7f29\u7565\u56fe\uff1b \u5bf9\u4e8e\u5176\u4ed6\u7684\u5185\u5bb9\u7531\u64cd\u4f5c\u7cfb\u7edf\u63d0\u4f9b\u8fd9\u4e9b\u56fe\u6807\u3002
-TableColumn.header.Rating_global=\u8bc4\u5206
-TableColumn.header.Rating_global.info=\u5bf9\u6b64\u5185\u5bb9\u7684\u603b\u4f53\u8bc4\u5206
v3.MainWindow.menu.getting_started=\u5f00\u59cb\u4f7f\u7528(G)
MainWindow.menu.community=\u793e\u533a\uff08C\uff09
MainWindow.menu.help.faq=\u5e38\u89c1\u95ee\u9898\u89e3\u7b54\uff08&F\uff09
MainWindow.menu.community.wiki=\u793e\u533a\u7ef4\u57fa\uff08W\uff09
MainWindow.menu.community.forums=\u793e\u533a\u8bba\u575b\uff08R\uff09
MainWindow.menu.community.blog=Vuze \u535a\u5ba2\uff08B\uff09
-MainWindow.menu.community.add_friends=\u6dfb\u52a0\u597d\u53cb\uff08A\uff09
MainWindow.menu.help.support=\u5e2e\u52a9\u548c\u652f\u6301(H)
externalLogin.title=\u9700\u8981\u767b\u5f55
externalLogin.explanation=\u6a21\u677f "%1" \u9700\u8981\u60a8\u767b\u5f55\u3002\u4e00\u65e6\u767b\u5f55\u8be5\u7a97\u53e3\u4f1a\u81ea\u52a8\u5173\u95ed\u3002\u5982\u679c\u6ca1\u6709\u7684\u8bdd\u8bf7\u70b9\u51fb\u201c\u5b8c\u6210\u3002
externalLogin.explanation.capture=\u60a8\u9700\u8981\u767b\u5f55\u6765\u521b\u5efa\u6b64\u6a21\u677f\u3002\u4e00\u65e6\u60a8\u767b\u5f55\u4e86\uff0c\u8bf7\u70b9\u51fb\u201c\u5b8c\u6210\u201d
Button.done=\u5b8c\u6210
GeneralView.torrent_created_on_and_by=%1 \u7531 %2 \u521b\u5efa
-v3.Share.wizard.title=\u5206\u4eab -- \u5411\u5bfc
-v3.AddFriends.header.message=\u6dfb\u52a0\u597d\u53cb\u5e76\u5f00\u59cb\u5206\u4eab\u60a8\u6700\u559c\u7231\u7684torrents
-v3.AddFriends.header=\u6dfb\u52a0\u597d\u53cb
-v3.AddFriends.wizard.title=\u6dfb\u52a0\u597d\u53cb -- \u5411\u5bfc
Button.continue=\u7ee7\u7eed
Button.preview=\u9884\u89c8
Subscription.menu.forcecheck=\u73b0\u5728\u66f4\u65b0
@@ -2665,9 +2554,6 @@ sidebar.LibraryDL=\u4e0b\u8f7d\u4e2d
sidebar.LibraryCD=\u5df2\u5b8c\u6210
authenticator.location=\u5730\u5740
authenticator.details=\u8be6\u60c5
-v3.MainWindow.menu.publish.new=\u53d1\u5e03\u65b0\u5185\u5bb9
-v3.MainWindow.menu.publish.mine=\u60a8\u53d1\u5e03\u7684\u5185\u5bb9
-v3.MainWindow.menu.publish.about=\u5173\u4e8e\u53d1\u5e03...
v3.MainWindow.menu.showActionBarText=\u663e\u793a\u6587\u672c
subscript.import.fail.title=\u5bfc\u5165\u5931\u8d25
subscript.import.fail.desc=\u8be6\u60c5: %1
@@ -2684,13 +2570,11 @@ Subscription.menu.reset=\u91cd\u7f6e\u81f3\u521d\u59cb\u72b6\u6001
ConfigView.section.Subscriptions=\u8ba2\u9605
subscriptions.config.maxresults=\u6bcf\u4e2a\u8ba2\u9605\u76f8\u5173\u7ed3\u679c\u7684\u6700\u5927\u6570 [0: \u65e0\u9650\u5236]
v3.activity.button.readall=\u6807\u8bb0\u6240\u6709\u4e3a\u5df2\u8bfb
-ConfigView.interface.start.library=\u4ece\u5a92\u4f53\u5e93\u5f00\u59cb
TableColumn.header.activityNew=\u65b0\u5efa
TableColumn.header.activityType=\u7c7b\u578b
TableColumn.header.activityText=\u6d88\u606f
TableColumn.header.activityDate=\u6dfb\u52a0\u7684\u65e5\u671f
TableColumn.header.activityActions=\u52a8\u4f5c
-TableColumn.header.activityAvatar=\u5934\u50cf
Subscription.menu.resetauth=\u91cd\u7f6e\u6388\u6743\u8be6\u60c5
Search.menu.engines=\u6a21\u677f
Wizard.Subscription.title=\u8ba2\u9605
@@ -2716,8 +2600,6 @@ Wizard.Subscription.rss.subtitle3=\u4e00\u65e6\u4fdd\u5b58\uff0c\u60a8\u5c31\u53
Wizard.Subscription.subscribe.library=\u5a92\u4f53\u5e93\u4e2d\u7684\u5185\u5bb9
Wizard.Subscription.subscribe.subscriptions=\u76f8\u5173\u7684\u8ba2\u9605
Wizard.Subscription.subscribe.library.empty=\u6ca1\u6709\u53ef\u7528\u7684\u8ba2\u9605\uff1f\n \n\u627e\u627e Vuze HD Network \u4e0a\u4eae\u6a59\u8272\u7684\u8ba2\u9605\u6309\u94ae.\n \n<A HREF="http://faq.vuze.com/?View=entry&EntryID=288">\u66f4\u591a\u9605\u8bfb</A>
-TableColumn.header.Info=\u4fe1\u606f
-TableColumn.header.videoLength=\u89c6\u9891\u957f\u5ea6
message.confirm.delete.title=\u5220\u9664\u786e\u8ba4
message.confirm.delete.text=\u4f60\u786e\u5b9a\u8981\u5220\u9664 '%1'?
Subscription.menu.properties=\u5c5e\u6027
@@ -2767,8 +2649,6 @@ TableColumn.header.azsubs.ui.column.subs_link.info=\u548c\u8ba2\u9605\u76f8\u517
Button.deleteContent.fromLibrary=\u4ece\u5a92\u4f53\u5e93\u4e2d\u79fb\u9664
Button.deleteContent.fromComputer=\u4ece\u8ba1\u7b97\u673a\u4e2d\u5220\u9664
v3.deleteContent.message=\n\u60a8\u60f3\u8981\u4ece\u60a8\u7535\u8111\u4e2d\u5220\u9664 '%1' \uff0c\u8fd8\u662f\u4ec5\u4ec5\u60f3\u4ece Vuze \u5a92\u4f53\u5e93\u4e2d\u79fb\u9664\u5462\uff1f
-v3.library.infobar.text1=\u5728\u627e\u201c\u9ad8\u7ea7\u89c6\u56fe\u201c\uff1f
-v3.library.infobar.text2=\u4f7f\u7528\u5728\u4e0a\u9762\u7684\u5de5\u5177\u680f\u7684\u201c\u89c6\u56fe\u201c\u6309\u94ae\u5207\u6362\u3002
v3.MainWindow.menu.view.toolbartext=\u5de5\u5177\u680f\u6587\u672c
v3.MainWindow.menu.view.asSimpleList=\u7b80\u6d01\u5217\u8868
v3.MainWindow.menu.view.asAdvancedList=\u9ad8\u7ea7\u5217\u8868
@@ -2788,16 +2668,6 @@ azbuddy.ui.menu.cat.share=\u542f\u7528\u6765\u81ea\u597d\u53cb\u7684\u8ba2\u9605
azbuddy.ui.menu.cat.set=\u8f93\u5165\u5206\u7c7b
azbuddy.ui.menu.cat.set_msg=\u7528\u9017\u53f7\u5206\u9694\u7684\u5206\u7c7b\u5217\u8868\uff0c\u6216\u8005 'All'
azbuddy.ui.menu.cat_subs=\u8ba2\u9605
-v3.buddy.prop.dn=\u663e\u793a\u540d
-v3.buddy.prop.un=\u7528\u6237\u540d
-v3.buddy.prop.on=\u5728\u7ebf
-v3.buddy.prop.lupd=\u4e0a\u6b21\u66f4\u65b0
-v3.buddy.prop.pks=\u516c\u94a5\u8ba1\u6570
-v3.buddy.prop.pc=\u5f85\u5b9a\u7684\u804a\u5929\u4fe1\u606f
-v3.buddy.prop.catout=\u60a8\u5141\u8bb8\u597d\u53cb\u8ba2\u9605\u7684\u5206\u7c7b
-v3.buddy.prop.catin=\u597d\u53cb\u63d0\u4f9b\u7ed9\u60a8\u7684\u5206\u7c7b
-v3.buddy.set.catout=\u5141\u8bb8\u597d\u53cb\u8ba2\u9605\u6b64\u5206\u7c7b
-v3.buddy.set.catin=\u8ba2\u9605\u597d\u53cb\u7684\u5206\u7c7b
v3.dialog.cnclose.title=%1 \u5173\u95ed
v3.dialog.cnclose.subtitle=\u63d0\u793a
v3.dialog.cnclose.info1=\u60a8\u5df2\u7ecf\u5173\u95ed\u4e86\u4e00\u4e2a\u9ad8\u6e05\u7f51\u7edc
@@ -2810,12 +2680,9 @@ TableColumn.header.category.info=torrent \u6240\u5c5e\u7684\u5206\u7c7b\u540d
TableColumn.header.DateCompleted.info=torrent \u4e0b\u8f7d\u5b8c\u6210\u7684\u65e5\u671f
TableColumn.header.AzProduct.info=torrent \u6765\u81ea\u7684\u5185\u5bb9\u7f51\u7edc
TableColumn.header.health.info=\u60a8\u5230 torrent \u7fa4\u7684\u94fe\u63a5\u5065\u5eb7\u5ea6\u5982\u4f55
-TableColumn.header.Info.info=\u542f\u52a8 Vuze \u8be6\u7ec6\u5185\u5bb9\u9875\u9762\u7684\u6309\u94ae
TableColumn.header.maxuploads.info=\u540c\u65f6\u4e0a\u4f20\u7684\u6700\u5927 # peer \u6570
TableColumn.header.name.info=torrent \u7684\u540d\u5b57
TableColumn.header.unopened.info=\u663e\u793a torrent \u662f\u5426\u88ab\u64ad\u653e\u8fc7\uff08\u6253\u5f00\u8fc7\uff09\u7684\u6807\u8bc6\u7b26
-TableColumn.header.Quality.info=vuze \u5185\u5bb9\u7684\u8d28\u91cf\uff0c\u6bd4\u5982\u9ad8\u6e05\u3001\u6807\u6e05
-TableColumn.header.RateIt.info=\u5bf9 vuze \u5185\u5bb9\u8bc4\u5206\u7684\u80fd\u529b
TableColumn.header.savepath.info=torrent \u6570\u636e\u7684\u76ee\u6807\u6587\u4ef6\u5939\u6216\u6587\u4ef6
TableColumn.header.SeedingRank.info=\u6807\u8bc6\u8be5 torrent \u5728\u591a\u5927\u7a0b\u5ea6\u4e0a\u9700\u8981\u505a\u79cd\u3002\u8f83\u9ad8\u7684\u503c\u610f\u5473\u7740\u6709\u8f83\u5f3a\u7684\u9700\u8981\u3002
TableColumn.header.shareRatio.info=\u5c06\u60a8\u4e0a\u4f20\uff08\u5206\u4eab\uff09\u7684\u91cf\u4e0e\u4e0b\u8f7d\u7684\u91cf\u6bd4\u8f83
@@ -2825,7 +2692,6 @@ TableColumn.header.upspeed.info=\u5f53\u524d\u4e0a\u4f20\u901f\u5ea6
TableColumn.header.downspeed.info=\u5f53\u524d\u4e0b\u8f7d\u901f\u5ea6
TableColumn.header.up.info=\u5f53\u524d\u53d1\u9001\u7ed9\u5176\u4ed6\u7528\u6237\u7684\u6570\u636e\u91cf
TableColumn.header.down.info=\u5f53\u524d\u4ece\u5176\u4ed6\u7528\u6237\u83b7\u5f97\u7684\u6570\u636e\u91cf
-TableColumn.header.videoLength.info=\u64ad\u653e vuze \u89c6\u9891\u5185\u5bb9\u65f6\u95f4
TableColumn.header.ProgressETA.info=\u5c06\u72b6\u6001\u3001\u5b8c\u6210\u5ea6\u3001\u5269\u4f59\u65f6\u95f4\u548c\u4e0b\u8f7d\u901f\u5ea6\u6574\u5408\u5230\u4e00\u4e2a\u591a\u7ebf\u680f\u4e2d
TableColumn.header.eta.info=\u5230 torrent \u4e0b\u8f7d\u5b8c\u6210\u7684\u4f30\u8ba1\u65f6\u95f4
Pieces.column.#.info=\u5757\u7f16\u53f7
@@ -2846,19 +2712,3 @@ ColumnSetup.categories=\u5206\u7c7b\uff1a
ColumnSetup.filters=\u8fc7\u6ee4\u5668
ColumnSetup.availcolumns=\u53ef\u7528 %1 \u680f
ColumnSetup.availcolumns.filteredby=\u7528 %2 \u8fc7\u6ee4\u540e\u7684\u53ef\u7528 %1 \u680f
-# The remaining keys were not in MessagesBundle.properties
-window.uiswitcher.AdvancedUI.title=\u9ad8\u7ea7 Vuze
-window.uiswitcher.AdvancedUI.text=* \u63a8\u8350\u90a3\u4e9b\u5e0c\u671b\u4fdd\u7559\u7ecf\u5178\u754c\u9762\u53c8\u9700\u8981 Vuse \u5e73\u53f0\u7684\u641c\u7d22\uff0c\u6d4f\u89c8\uff0c\u53d1\u5e03\u5185\u5bb9\u529f\u80fd\u7684\u7528\u6237\u4f7f\u7528\n\n* \u7b80\u5355\u7684\uff0c\u76f4\u89c2\u7684\u56fe\u5f62\u754c\u9762\uff0c\u642d\u914d\u66f4\u5148\u8fdb\u7684\u7279\u6027\u548c\u529f\u80fd
-v3.mb.notTrusted.button.cancel=\u53d6\u6d88
-v3.mb.UnknownContent.title=\u5185\u5bb9\u672a\u77e5
-v3.mb.notTrusted.text=\u5185\u5bb9 "%1" \u88ab\u8bc6\u522b\u4e3a\u6709\u6f5c\u5728\u5a01\u80c1\u7684\u5185\u5bb9\uff0c\u56e0\u4e3a\u7cfb\u7edf\u62a5\u544a\u5176\u7c7b\u578b\u4e3a\u7c7b\u578b\uff08%2\uff09.
-v3.mb.notTrusted.title=\u5185\u5bb9\u4e0d\u53ef\u4fe1
-ConfigView.section.connection.advanced.IPTOS.tooltip=\u8bbe\u7f6e\u6d41\u91cf\u7b49\u7ea7/\u670d\u52a1\u7c7b\u578b\uff08TOS\uff09 \u5728\u8f93\u51fa\u5305 IP \u5934\u7684\u5b57\u6bb5\u3002\nVuze \u7559\u7a7a\u4e0d\u8bbe\u4e3a\u9ed8\u8ba4\uff0c\u610f\u601d\u662f\u7cfb\u7edf\u4f18\u5148\u4f7f\u7528\u3002\n\u4f8b\u5982\u6570\u503c\u662f\uff1a\n0x02 for IPTOS_LOWCOST\n0x04 for IPTOS_RELIABILITY\n0x08 for IPTOS_THROUGHPUT\n0x10 for IPTOS_LOWDELAY\n\u6ce8\u610f\uff1a\u4f18\u5148\u7f51\u7edc\u5b9e\u73b0\u53ef\u80fd\u4f1a\u5ffd\u7565\u6b64\u503c\uff0c\u6240\u4ee5\u6b64\u9009\u9879\u975e\u5e38\u4f9d\u8d56\u7cfb\u7edf\u548c JRE \u7684\u7248\u672c\u3002
-v3.mb.notTrusted.noapp.text=\u5185\u5bb9 "%1" \u88ab\u8bc6\u522b\u4e3a\u6709\u6f5c\u5728\u5a01\u80c1\u7684\u5185\u5bb9\uff0c\u56e0\u4e3a\u7cfb\u7edf\u62a5\u544a\u5176\u7c7b\u578b\u4e3a\u672a\u77e5\u7c7b\u578b\uff08%2\uff09.
-v3.mb.UnknownContent.noapp.text=\u5185\u5bb9 "%1" \u65e0\u6cd5\u8bc6\u522b\uff0c\u56e0\u4e3a\u7cfb\u7edf\u6ca1\u6709\u8be5\u7c7b\u578b\u6587\u4ef6\uff08%2\uff09 \u7684\u5173\u8054\u7a0b\u5e8f\u3002
-v3.mb.UnknownContent.button.cancel=\u53d6\u6d88
-ConfigView.section.connection.advanced.IPTOS=\u8f93\u51fa\u5305\u670d\u52a1\u7c7b\u578b\uff08TOS\uff09\uff3bex. 0x02\uff0c 0x10\uff3d
-v3.mb.notTrusted.button.run=\u5373\u4f7f\u5982\u6b64\u4e5f\u8981\u8fd0\u884c
-v3.mb.UnknownContent.button.run=\u5373\u4f7f\u5982\u6b64\u4e5f\u8981\u8fd0\u884c
-v3.mb.UnknownContent.text=\u5185\u5bb9 "%1" \u65e0\u6cd5\u8bc6\u522b\uff0c\u7cfb\u7edf\u62a5\u544a\u5185\u5bb9\u4e3a\u7c7b\u578b "%2" \uff0c\u4f46\u6587\u4ef6\u81ea\u79f0 "%3"\u3002
-deletedata.message2=\n\u4f60\u786e\u8ba4\u8981\u7ee7\u7eed\u5417\uff1f
diff --git a/org/gudy/azureus2/internat/MessagesBundle_zh_TW.properties b/org/gudy/azureus2/internat/MessagesBundle_zh_TW.properties
index 23a8512..0e2e761 100644
--- a/org/gudy/azureus2/internat/MessagesBundle_zh_TW.properties
+++ b/org/gudy/azureus2/internat/MessagesBundle_zh_TW.properties
@@ -1,3 +1,4 @@
+#There is a plugin to help with internationalizing these bundles at http://azureus.sourceforge.net/plugin_list.php
MainWindow.menu.file.open.torrent=Torrent \u6a94...
Main.parameter.usage=\u7528\u6cd5 : java org.gudy.azureus2.cl.Main [\u53c3\u6578] "\u6a94\u6848\u540d.torrent" "\u4fdd\u5b58\u8def\u5f91"
Main.parameter.maxUploads=\u6700\u5927\u540c\u6642\u4e0a\u50b3\u6578\u76ee
@@ -379,7 +380,6 @@ MyTorrentsView.menu.removeand.deletedata=\u522a\u9664\u8cc7\u6599 (&D)
MyTorrentsView.menu.removeand.deleteboth=\u5169\u8005\u90fd\u522a\u9664 (&B)
deletedata.title=\u8b66\u544a
deletedata.message1=\u60a8\u5c07\u8981\u522a\u9664\u8cc7\u6599\uff0c\u8a72\u8cc7\u6599\u4f4d\u65bc\uff1a\n
-deletedata.message2=\n\u60a8\u78ba\u5b9a\u8981\u7e7c\u7e8c?
MainWindow.menu.file.configure=\u8a2d\u5b9a\u7cbe\u9748 (&W)
configureWizard.title=\u8a2d\u5b9a\u7cbe\u9748
configureWizard.welcome.title=\u6b61\u8fce\u4f7f\u7528 Vuze \u8a2d\u5b9a\u7cbe\u9748
@@ -514,7 +514,6 @@ ConfigView.section.tracker=Tracker
ConfigView.section.tracker.pollinterval=Tracker \u7528\u6236\u7aef\u8f2a\u8a62\u9593\u9694\uff08\u79d2\uff09
ConfigView.section.tracker.publishenable=\u767c\u4f48 torrent \u8a73\u7d30\u8cc7\u8a0a\u5230 "<tracker_url>"
ConfigView.section.tracker.ip=Tracker \u5916\u90e8 IP \u4f4d\u5740
-MainWindow.menu.help.faq=\u5e38\u898b\u554f\u984c (&F)
ConfigView.section.style.enableXPStyle=\u555f\u7528 XP \u98a8\u683c\uff08\u9700\u8981\u91cd\u65b0\u555f\u52d5\uff09
IPChecker.external.service.dyndns.name=DynDNS \u7db2\u7ad9
IPChecker.external.service.dyndns.url=http://www.dyndns.org/
@@ -553,7 +552,6 @@ splash.openViews=\u958b\u555f\u6aa2\u8996
splash.plugin=\u8f09\u5165\u5916\u639b\u6a21\u7d44 :
configureWizard.nat.tooManyPorts=\u6e2c\u8a66\u904e\u591a\u7684\u9023\u63a5\u57e0 (\u6700\u591a 9 \u500b)
ConfigView.section.color=\u8272\u5f69\u914d\u7f6e
-PeerSocket.unknown=\u672a\u77e5
MyTorrentsView.menu.publish=\u516c\u4f48... (&P)
MyTrackerView.status.published=\u5df2\u516c\u4f48
MyTrackerView.completed=\u5df2\u5b8c\u6210
@@ -569,9 +567,15 @@ IPChecker.external.service.no-ip.description=\u865b\u64ec\u548c\u56fa\u5b9a\u5f0
ConfigView.section.tracker.publicenable=\u555f\u7528\u5916\u90e8 torrents
ConfigView.label.playdownloadspeech=\u4e0b\u8f09\u5b8c\u7562\u5f8c\u64ad\u653e\u8a9e\u97f3\u63d0\u793a
ConfigView.label.playdownloadspeech.info=\u76ee\u524d\u53ea\u6709\u82f1\u8a9e\u767c\u97f3
+#
+# Tooltips
+#
GeneralView.label.status.pieces_available.tooltip=\u986f\u793a\u6bcf\u500b\u6a94\u6848\u5206\u584a\u53ef\u7528\u7684\u62f7\u8c9d\u6578\u76ee\n\u5982\u679c\u6578\u5b57\u7b49\u65bc\u6216\u5c0f\u65bc 1\uff0c\u60a8\u4fbf\u7121\u6cd5\u627e\u5230\u5b8c\u6574\u7684\u6a94\u6848\u62f7\u8c9d\uff08\u53ef\u80fd\u7121\u6cd5\u5b8c\u6210\u4e0b\u8f09\uff09
GeneralView.label.trackerurl.tooltip=\u9ede\u9078\u6b64\u8655\u4ee5\u62f7\u8c9d\u767c\u4f48 url \u5230\u526a\u8cbc\u7c3f
GeneralView.label.trackerurlopen.tooltip=\u9ede\u9078\u6b64\u8655\u6253\u958b tracker \u4e3b\u9801
+#
+# 2.0.4.4
+#
ConfigView.section.style.guiUpdate=\u66f4\u65b0 GUI \u9593\u9694
ConfigView.section.style.graphicsUpdate=\u6bcf\u9694 N \u6b21 GUI \u66f4\u65b0\uff0c\u4e00\u4f75\u66f4\u65b0\u5716\u5f62\u689d
ConfigView.section.style.reOrderDelay=\u6bcf N \u500b GUI \u66f4\u65b0\uff0c\u91cd\u65b0\u6392\u5217\u8868\u683c [0\uff1a\u6c38\u4e0d]
@@ -708,7 +712,9 @@ health.explain.yellow=\u8868\u793a tracker \u662f\u6b63\u5e38\u7684\uff0c\u60a8\
health.explain.green=\u8868\u793a\u4e00\u5207\u6b63\u5e38
ConfigView.section.style.alwaysRefreshMyTorrents=\u6301\u7e8c\u5237\u65b0"\u6211\u7684 Torrents"
ConfigView.section.style.alwaysRefreshMyTorrents.tooltip=\u9019\u500b\u9078\u9805\u6703\u66f4\u65b0"\u6211\u7684 Torrent" ,\u5373\u4f7f\u6c92\u6709\u986f\u793a\u51fa\u4f86 (\u5c0d\u67d0\u4e9b\u5916\u639b\u6a21\u7d44\u5f88\u6709\u7528)
-ConfigView.section.style.verticaloffset=\u5716\u5f62\u5782\u76f4\u504f\u79fb\uff08GTK fix\uff09
+#
+#2.0.7.0
+#
security.certtruster.title=\u5b89\u5168\u6027\u6191\u8b49\u8b66\u544a
security.certtruster.intro=\u9019\u500b\u5b89\u5168\u6027\u6191\u8b49\u662f\u7531\u60a8\u4e0d\u4fe1\u4efb\u7684\u516c\u53f8\u6240\u767c\u884c
security.certtruster.resource=\u4f86\u6e90:
@@ -765,6 +771,9 @@ ConfigView.section.style.dropdiraction=\u555f\u7528\u76ee\u9304\u62d6\u653e\u529
ConfigView.section.style.dropdiraction.opentorrents=\u6253\u958b Torrents
ConfigView.section.style.dropdiraction.sharefolder=\u5171\u4eab\u76ee\u9304
ConfigView.section.style.dropdiraction.sharefoldercontents=\u5171\u4eab\u5167\u5bb9
+#
+# 2.0.7.x
+#
Categories.all=\u5168\u90e8
Categories.uncategorized=\u672a\u5206\u985e
CategoryAddWindow.message=\u8f38\u5165\u65b0\u7684\u5206\u985e\u540d\u7a31
@@ -843,7 +852,6 @@ ConfigView.text.minutes=\u5206
ConfigView.text.neverIgnore=\u6c38\u4e0d\u5ffd\u7565
ConfigView.text.any=\u4efb\u4f55
DownloadManager.error.datamissing=\u8cc7\u6599\u907a\u5931
-iconBar.queue.tooltip=\u6392\u7a0b
MainWindow.menu.file.open.torrentforseeding=Torrent \u6a94... (\u505a\u7a2e\u7528)
MainWindow.menu.language.refresh=\u91cd\u65b0\u8b80\u53d6 (&R)
ManagerItem.forced=\u5f37\u5236
@@ -921,6 +929,9 @@ SpeedView.stats.uptime=\u4e0a\u50b3\u6642\u9593
SpeedView.stats.now=\u73fe\u5728
SpeedView.stats.now.tooltip=\u7e3d\u8a08 (\u5354\u5b9a)
AutoMigration.useralert=Vuze \u4f7f\u7528\u8005\u8a2d\u5b9a\u6a94\u6848/\u76ee\u9304\u81ea\u52d5\u79fb\u52d5\u7d50\u679c:\n\n%1\n\u4efb\u4f55\u5931\u6557\u90fd\u5fc5\u9808\u624b\u52d5\u79fb\u52d5.\n\u5982\u679c\u6a94\u6848\u88ab\u79fb\u52d5\u4e86\uff0c\u4e0d\u8981\u5fd8\u8a18\u5728\u8a2d\u5b9a\u4e2d\u66f4\u65b0\u60a8\u7684\u5b58\u6a94\u8def\u5f91
+#
+# > 2.0.8.0
+#
OpenTorrentWindow.title=\u958b\u555f torrent
OpenTorrentWindow.message=\u5be6\u9a57\u4e2d
OpenTorrentWindow.addFiles=\u52a0\u5165\u6a94\u6848 (&A)
@@ -1160,6 +1171,8 @@ MyTrackerView.badnat.info=\u7a2e\u5b50/\u5925\u4f34 \u7684 NAT \u6aa2\u67e5\u932
ConfigView.section.tracker.natchecktimeout=\u6aa2\u67e5\u903e\u6642\uff08\u79d2\uff09
ConfigView.section.file.perf.cache.enable=\u555f\u7528\u78c1\u789f\u5feb\u53d6
ConfigView.section.file.perf.cache.size=\u5feb\u53d6\u5927\u5c0f\u70ba%1
+#Removed
+#MyTorrentsView.menu.setSpeed=Set Upload Speed
MainWindow.menu.transfers=\u50b3\u9001 (&R)
MainWindow.menu.transfers.startalltransfers=\u5168\u90e8\u555f\u52d5 (&A)
MainWindow.menu.transfers.stopalltransfers=\u5168\u90e8\u505c\u6b62 (&O)
@@ -1245,8 +1258,6 @@ FilesView.fullpath=\u986f\u793a\u5b8c\u6574\u8def\u5f91
FilesView.remaining=\u672a\u5b8c\u6210\u7684\u6a94\u6848\u5206\u584a
TableColumn.header.trackername=Tracker \u540d\u7a31
TableColumn.header.trackername.info=URL \u767c\u4f48\u7684 tracker \u540d\u7a31
-ConfigView.label.announceport=\u7f6e\u63db tracker \u6307\u5b9a\u7684\u9023\u63a5\u57e0
-ConfigView.label.announceport.tooltip=\u901a\u77e5 tracker \u60a8\u6b63\u5728\u4f7f\u7528\u4e0d\u540c\u7684\u9023\u63a5\u57e0\u76e3\u807d\u3002\u4e0d\u60f3\u4f7f\u7528\u9019\u500b\u9078\u9805\u7684\u8a71\u8acb\u4fdd\u6301\u7a7a\u767d
ConfigView.group.override=\u512a\u5148\u8a2d\u5b9a
ConfigView.section.file.perf.cache.notsmallerthan=\u4e0d\u8981\u5feb\u53d6\u5c0f\u65bc(%1)\u7684\u6a94\u6848
PeersView.menu.blockupload=\u963b\u6b62\u4e0a\u50b3
@@ -1277,8 +1288,6 @@ ConfigView.section.connection.advanced.SO_RCVBUF=Socket SO_RCVBUF size[0\uff1a\u
ConfigView.section.connection.advanced.SO_RCVBUF.tooltip=\u8a2d\u5b9a\u6a19\u6e96 socket SO_RCVBUF \u6578\u503c\uff08bytes\uff09\uff0ci.e. TCP \u63a5\u6536\u7a97\u53e3\u7684\u5927\u5c0f\u548c\u6bd4\u4f8b\nVuze \u9810\u8a2d\u70ba\u7a7a\u767d\uff0c\u4e5f\u5c31\u662f\u6839\u64da\u6240\u4f7f\u7528\u7684\u5e95\u5c64\u4f5c\u696d\u7cfb\u7d71\u800c\u5b9a\n\u6ce8\u610f\uff1aLinux \u6703\u4f7f\u7528\u5169\u500d\u7684\u6307\u5b9a\u6578\u503c
ConfigView.section.connection.advanced.SO_SNDBUF=Socket SO_SNDBUF size[0\uff1a\u9810\u8a2d]
ConfigView.section.connection.advanced.SO_SNDBUF.tooltip=\u8a2d\u5b9a\u6a19\u6e96 socket SO_SNDBUF \u6578\u503c\uff08bytes\uff09\uff0ci.e. TCP \u50b3\u9001\u7a97\u53e3\u7684\u5927\u5c0f\nVuze \u9810\u8a2d\u70ba\u7a7a\u767d\uff0c\u4e5f\u5c31\u662f\u6839\u64da\u6240\u4f7f\u7528\u7684\u5e95\u5c64\u4f5c\u696d\u7cfb\u7d71\u800c\u5b9a\n\u6ce8\u610f\uff1aLinux \u6703\u4f7f\u7528\u5169\u500d\u7684\u6307\u5b9a\u6578\u503c
-ConfigView.section.connection.advanced.IPTOS=\u9001\u51fa\u7684\u5c01\u5305\u670d\u52d9\u985e\u578b\uff08TOS\uff09
-ConfigView.section.connection.advanced.IPTOS.tooltip=\u8a2d\u5b9a\u6d41\u91cf\u985e\u5225 / type-of-service (TOS) field in the IP header for outgoing packets.\nVuze \u9810\u8a2d\u70ba\u7a7a\u767d\uff0c\u4e5f\u5c31\u662f\u6839\u64da\u6240\u4f7f\u7528\u7684\u5e95\u5c64\u4f5c\u696d\u7cfb\u7d71\u800c\u5b9a\nExample values are:\n0x02 for IPTOS_LOWCOST\n0x04 for IPTOS_RELIABILITY\n0x08 for IPTOS_THROUGHPUT\n0x10 for IPTOS_LOWDELAY\n\u6ce8\u610f: \u5e95\u5c64\u7db2\u8def\u67b6\u69cb\u53ef\u80fd\u6703\u5ffd\u7565\u6b64\u9805\u6578\u503c\uff0c\u56e0\u6b64\u6b64\u9078\u9805\u4e3b\u8981\u4f9d\u64da\u4f5c\u696d\u7cfb\u7d71\u548c JRE \u7248\u672c\u800c\u5b9a
ConfigView.section.interface.confirm_torrent_removal=torrent \u88ab\u79fb\u9664\u6642\uff0c\u986f\u793a\u78ba\u8a8d\u5c0d\u8a71\u8996\u7a97
ConfigView.section.interface.confirm_torrent_removal.tooltip=\u5f9e"\u6211\u7684 torrent" \u4e2d\u79fb\u9664 torrent \u6642,\u8981\u6c42\u78ba\u8a8d
MyTorrentsView.confirm_torrent_removal=\u60a8\u78ba\u5b9a\u8981\u522a\u9664\uff1f\n
@@ -1425,6 +1434,7 @@ MainWindow.menu.tools.nattest=NAT / Firewall \u6e2c\u8a66 (&N)
Button.apply=\u5957\u7528
Button.close=\u95dc\u9589
window.welcome.title=\u6b61\u8fce\u4f7f\u7528 Vuze %1
+#file can be a URL or a path in the jar
MainWindow.menu.help.releasenotes=\u66f4\u65b0\u7d00\u9304
dht.reseed.label=\u4e00\u822c\u4f86\u8aaa,\u5206\u6563\u6027\u8cc7\u6599\u5eab\u6c92\u6709\u91cd\u65b0\u4f5c\u7a2e\u7684\u5fc5\u8981.\u4f46\u662f\u5982\u679c\u9023\u7d61\u4eba\u7684\u6578\u76ee\u904e\u4f4e,\u5247\u53ef\u4ee5\u7528\u4f86\u6574\u5408.\n \u4fdd\u6301\u7a7a\u767d\u4ee5\u8e22\u6389\u5df2\u9023\u7dda\u7684\u5925\u4f34\u6216\u662f\u8f38\u5165 IP \u4f4d\u7f6e\u548c\u9023\u63a5\u57e0\u4f86\u65b7\u7dda\u5df2\u77e5\u7684\u5925\u4f34
dht.reseed.group=\u91cd\u65b0\u505a\u7a2e
@@ -1541,8 +1551,8 @@ Formats.units.kbit=kbit (\u5341\u9032\u4f4d)
Formats.units.bit=\u4f4d\u5143
Formats.units.alot=\u5f88\u591a !!!
ConfigView.section.ipfilter.persistblocking=\u6bcf\u6b21\u91cd\u555f\u6642\u5132\u5b58\u5c01\u9396\u7684 IP \u7d30\u7bc0
-FilesView.rename.choose.path=\u9078\u64c7\u65b0\u589e\u6216\u5df2\u5b58\u5728\u7684\u6a94\u6848
FilesView.menu.rename=\u91cd\u65b0\u547d\u540d\u6216\u91cd\u8a2d\u76ee\u7684\u5730
+FilesView.rename.choose.path=\u9078\u64c7\u65b0\u589e\u6216\u5df2\u5b58\u5728\u7684\u6a94\u6848
FilesView.rename.confirm.delete.title=\u78ba\u8a8d\u522a\u9664
FilesView.rename.confirm.delete.text=\u78ba\u8a8d\u522a\u9664\u539f\u59cb\u6a94 '%1'
ConfigView.section.mode=\u6a21\u5f0f
@@ -1625,6 +1635,7 @@ MyTorrentsView.dialog.NumberError.title=\u7121\u6548\u6216\u7121\u6cd5\u8fa8\u8b
MyTorrentsView.dialog.NumberError.text=\u60a8\u8f38\u5165\u7684\u6578\u5b57\u7121\u6548\u6216\u662f\u7121\u6cd5\u8fa8\u8b58
MyTorrentsView.menu.manual=\u624b\u52d5... (&M)
MyTorrentsView.dialog.setSpeed.title=\u8a2d\u5b9a %1 \u901f\u5ea6
+# %1 = "in kbps" or ""; %2 = "upload" or "download"
MyTorrentsView.dialog.setNumber.text=\u8f38\u5165 %1 \u4f86\u66f4\u6539 %2:
MyTorrentsView.dialog.setNumber.upload=\u4e0a\u50b3
MyTorrentsView.dialog.setNumber.download=\u5df2\u4e0b\u8f09
@@ -1724,7 +1735,6 @@ TorrentOptionsView.param.max.uploads=\u6700\u5927\u4e0a\u50b3\u9023\u7dda\u6578\
MyTorrentsView.dialog.setPosition.title=\u8a2d\u5b9a\u4f4d\u7f6e
MyTorrentsView.dialog.setPosition.text=\u70ba\u9078\u64c7\u7684 torrents \u8f38\u5165\u4f4d\u7f6e
MyTorrentsView.menu.reposition.manual=\u518d\u914d\u7f6e
-TorrentOptionsView.param.max.uploads.when.seeding.enable=\u505a\u7a2e\u6642\u66ff\u4ee3\u4e0a\u50b3\u6578
ConfigView.section.connection.advanced.info.link=\u8acb\u53c3\u7167\u6b64\u8655\u7684\u8a73\u7d30\u8aaa\u660e
ConfigView.section.connection.advanced.socket.group=Socket \u9078\u9805
ConfigView.section.connection.advanced.bind_port=\u9650\u5236\u5728\u672c\u5730\u9023\u63a5\u57e0 [0\uff1a\u505c\u7528]
@@ -1747,6 +1757,7 @@ ConfigView.section.file.resume.recheck.all=\u7576\u6a5f\u91cd\u65b0\u555f\u52d5\
ConfigureWizard.language.choose=\u5f9e\u4e0b\u9762\u7684\u5217\u8868\u9078\u64c7\u8a9e\u8a00
popup.closing.in=\u5728 %1 \u79d2\u5f8c\u81ea\u52d5\u95dc\u9589\u8996\u7a97
popup.more.waiting=%1 \u66f4\u591a\u8a0a\u606f..
+# > 2402
popup.next=\u4e0b\u4e00\u500b>
popup.previous=\u524d\u4e00\u500b< (%1)
popup.download.finished="%1" \u5df2\u7d93\u4e0b\u8f09\u5b8c\u7562
@@ -1880,13 +1891,8 @@ MainWindow.menu.view.iconbar=\u5de5\u5177\u5217
MyTorrentsView.menu.rename=\u66f4\u540d
MyTorrentsView.menu.rename.displayed=\u66f4\u6539\u986f\u793a\u540d\u7a31
MyTorrentsView.menu.rename.save_path=\u66f4\u6539\u5132\u5b58\u8def\u5f91
-MyTorrentsView.menu.rename.displayed_and_save_path=\u5169\u8005\u90fd\u66f4\u6539
MyTorrentsView.menu.rename.displayed.enter.title=\u66f4\u6539\u986f\u793a\u540d\u7a31
MyTorrentsView.menu.rename.displayed.enter.message=\u70ba\u9019\u500b\u4e0b\u8f09\u8f38\u5165\u65b0\u7684\u986f\u793a\u540d\u7a31\n\u5982\u679c\u6c92\u6709\u8f38\u5165\u6587\u5b57,\u5c31\u4f7f\u7528\u539f\u59cb\u540d\u7a31
-MyTorrentsView.menu.rename.save_path.enter.title=\u66f4\u6539\u5132\u5b58\u8def\u5f91
-MyTorrentsView.menu.rename.save_path.enter.message=\u70ba\u9019\u500b\u4e0b\u8f09\u8f38\u5165\u65b0\u7684\u5132\u5b58\u8def\u5f91\u540d\u7a31\n\u5982\u679c\u6c92\u6709\u8f38\u5165\u6587\u5b57,\u5c31\u4f7f\u7528\u4e0b\u8f09\u6a94\u6848\u7684\u986f\u793a\u540d\u7a31
-MyTorrentsView.menu.rename.displayed_and_save_path.enter.title=\u66f4\u6539\u4e0b\u8f09\u540d\u7a31
-MyTorrentsView.menu.rename.displayed_and_save_path.enter.message=\u8f38\u5165\u65b0\u7684\u4e0b\u8f09\u540d\u7a31\n\u5982\u679c\u6c92\u6709\u8f38\u5165\u6587\u5b57,\u5c31\u4f7f\u7528\u539f\u59cb\u503c
UIDebugGenerator.messageask.title=\u9664\u932f\u7522\u751f\u5668
UIDebugGenerator.messageask.text=\u8acb\u8f38\u5165\u60a8\u8981\u56de\u5831\u7684\u932f\u8aa4\u6558\u8ff0
UIDebugGenerator.complete.title=\u9664\u932f\u904e\u7a0b\u5b8c\u6210
@@ -1912,5 +1918,9 @@ ConfigView.label.popup.autohide=\u5728 x \u79d2\u5f8c\u81ea\u52d5\u96b1\u85cf\u9
ConfigView.label.please.visit.here=\u8acb\u53c3\u89c0\u6b64\u8655\u4ee5\u7372\u5f97\u8a73\u7d30\u8cc7\u8a0a
ConfigView.section.ipfilter.enable.descriptionCache=\u5728 scratch \u6a94\u6848\u4e2d\u5132\u5b58 IP \u8aaa\u660e
ConfigView.section.ipfilter.enable.descriptionCache.tooltip=\u505c\u7528\u6642\uff0c\u4e0d\u6703\u8a18\u9304\u8aaa\u660e\u8cc7\u6599
+# Used for peers which we can't determine.
+PeerSocket.unknown=\u672a\u77e5
+ConfigView.label.announceport=\u7f6e\u63db tracker \u6307\u5b9a\u7684\u9023\u63a5\u57e0
+iconBar.queue.tooltip=\u6392\u7a0b
+MainWindow.menu.help.faq=\u5e38\u898b\u554f\u984c (&F)
MainWindow.menu.help.donate=\u6350\u52a9 ($2,$5,...)
-# The remaining keys were not in MessagesBundle.properties
diff --git a/org/gudy/azureus2/platform/unix/PlatformManagerUnixPlugin.java b/org/gudy/azureus2/platform/unix/PlatformManagerUnixPlugin.java
index 9551f61..8e17afb 100644
--- a/org/gudy/azureus2/platform/unix/PlatformManagerUnixPlugin.java
+++ b/org/gudy/azureus2/platform/unix/PlatformManagerUnixPlugin.java
@@ -205,7 +205,7 @@ public class PlatformManagerUnixPlugin
FileUtil.writeBytesAsFile(oldFilePathString,
startupScript.getBytes());
Runtime.getRuntime().exec(new String[] {
- "chmod",
+ findCommand( "chmod" ),
"+x",
oldStartupScript
});
@@ -233,6 +233,25 @@ public class PlatformManagerUnixPlugin
}
}
+ private String
+ findCommand(
+ String name )
+ {
+ final String[] locations = { "/bin", "/usr/bin" };
+
+ for ( String s: locations ){
+
+ File f = new File( s, name );
+
+ if ( f.exists() && f.canRead()){
+
+ return( f.getAbsolutePath());
+ }
+ }
+
+ return( name );
+ }
+
private void showScriptManualUpdateDialog(String newFilePath,
String oldFilePath, final int version) {
final UIFunctions uif = UIFunctionsManager.getUIFunctions();
diff --git a/org/gudy/azureus2/platform/win32/access/impl/Release/aereg64.dll b/org/gudy/azureus2/platform/win32/access/impl/Release/aereg64.dll
deleted file mode 100644
index cda2ac7..0000000
Binary files a/org/gudy/azureus2/platform/win32/access/impl/Release/aereg64.dll and /dev/null differ
diff --git a/org/gudy/azureus2/plugins/peers/PeerStats.java b/org/gudy/azureus2/plugins/peers/PeerStats.java
index eed94d3..8ee7f07 100644
--- a/org/gudy/azureus2/plugins/peers/PeerStats.java
+++ b/org/gudy/azureus2/plugins/peers/PeerStats.java
@@ -130,4 +130,11 @@ public interface PeerStats
* @since 2.4.0.0
*/
public long getTimeSinceConnectionEstablished();
+
+ public void
+ setDownloadRateLimit(
+ int bytes_per_sec );
+
+ public int
+ getDownloadRateLimit();
}
diff --git a/org/gudy/azureus2/plugins/ui/sidebar/SideBarDropListener.java b/org/gudy/azureus2/plugins/ui/sidebar/SideBarDropListener.java
index 8ec3af0..42a5eb2 100644
--- a/org/gudy/azureus2/plugins/ui/sidebar/SideBarDropListener.java
+++ b/org/gudy/azureus2/plugins/ui/sidebar/SideBarDropListener.java
@@ -25,5 +25,10 @@ package org.gudy.azureus2.plugins.ui.sidebar;
*/
public interface SideBarDropListener
{
- public void sideBarEntryDrop(SideBarEntry entry, Object droppedObject);
+ /**
+ * @param entry
+ * @param droppedObject
+ * @return true if you handled it, false if you didn't
+ */
+ public boolean sideBarEntryDrop(SideBarEntry entry, Object droppedObject);
}
diff --git a/org/gudy/azureus2/pluginsimpl/local/peers/PeerForeignNetworkConnection.java b/org/gudy/azureus2/pluginsimpl/local/peers/PeerForeignNetworkConnection.java
index 0a88a48..e4b3ee1 100644
--- a/org/gudy/azureus2/pluginsimpl/local/peers/PeerForeignNetworkConnection.java
+++ b/org/gudy/azureus2/pluginsimpl/local/peers/PeerForeignNetworkConnection.java
@@ -46,7 +46,6 @@ public class
PeerForeignNetworkConnection
extends NetworkConnectionHelper
{
- private ConnectionEndpoint endpoint;
private Peer peer;
private OutgoingMessageQueue outgoing_message_queue = new omq();
@@ -59,16 +58,14 @@ PeerForeignNetworkConnection
Peer _peer )
{
peer = _peer;
-
- // make up a vaguely usable endpoint
-
- endpoint = new ConnectionEndpoint(new InetSocketAddress( peer.getIp(), peer.getPort()));
}
public ConnectionEndpoint
getEndpoint()
{
- return( endpoint );
+ // make up a vaguely usable endpoint
+
+ return( new ConnectionEndpoint(new InetSocketAddress( peer.getIp(), peer.getPort())));
}
public void
diff --git a/org/gudy/azureus2/pluginsimpl/local/peers/PeerStatsImpl.java b/org/gudy/azureus2/pluginsimpl/local/peers/PeerStatsImpl.java
index d030e0e..6a8d85e 100644
--- a/org/gudy/azureus2/pluginsimpl/local/peers/PeerStatsImpl.java
+++ b/org/gudy/azureus2/pluginsimpl/local/peers/PeerStatsImpl.java
@@ -120,4 +120,17 @@ PeerStatsImpl
{
return( peer_manager.getTimeSinceConnectionEstablished( owner ));
}
+
+ public int
+ getDownloadRateLimit()
+ {
+ return( delegate.getDownloadRateLimitBytesPerSecond());
+ }
+
+ public void
+ setDownloadRateLimit(
+ int bytes )
+ {
+ delegate.setDownloadRateLimitBytesPerSecond( bytes );
+ }
}
diff --git a/org/gudy/azureus2/pluginsimpl/local/utils/xml/rss/RSSUtils.java b/org/gudy/azureus2/pluginsimpl/local/utils/xml/rss/RSSUtils.java
index 1466487..9d415bf 100644
--- a/org/gudy/azureus2/pluginsimpl/local/utils/xml/rss/RSSUtils.java
+++ b/org/gudy/azureus2/pluginsimpl/local/utils/xml/rss/RSSUtils.java
@@ -62,13 +62,24 @@ RSSUtils
}catch( ParseException e ){
String[] fallbacks =
- { "EEE MMM dd hh:mm:ss z yyyy", // Fri Sep 26 00:00:00 EDT 2008
- "EEE MMM dd hh:mm z yyyy", // Fri Sep 26 00:00 EDT 2008
- "EEE MMM dd hh z yyyy", // Fri Sep 26 00 EDT 2008
- "yyyy-MM-dd hh:mm:ss", // 2009-02-08 22:56:45
+ {
+ "dd MMM yyyy HH:mm:ss z", // As above but laxer
+ "EEE dd MMM yyyy HH:mm:ss z", // As above but laxer
+ "EEE MMM dd HH:mm:ss z yyyy", // Fri Sep 26 00:00:00 EDT 2008
+ "EEE MMM dd HH:mm z yyyy", // Fri Sep 26 00:00 EDT 2008
+ "EEE MMM dd HH z yyyy", // Fri Sep 26 00 EDT 2008
+ "yyyy-MM-dd HH:mm:ss", // 2009-02-08 22:56:45
"yyyy-MM-dd", // 2009-02-08
};
+ // remove commas as these keep popping up in silly places
+
+ date_str = date_str.replace( ',', ' ' );
+
+ // remove duplicate white space
+
+ date_str = date_str.replaceAll( "(\\s)+", " " );
+
for (int i=0;i<fallbacks.length;i++){
try{
diff --git a/org/gudy/azureus2/ui/console/commands/Hack.java b/org/gudy/azureus2/ui/console/commands/Hack.java
index 342cf0a..a6b91e4 100644
--- a/org/gudy/azureus2/ui/console/commands/Hack.java
+++ b/org/gudy/azureus2/ui/console/commands/Hack.java
@@ -298,10 +298,10 @@ public class Hack extends TorrentCommand
}
TRTrackerAnnouncer client = dm.getTrackerClient();
try {
- URI uold = new URI(client.getTrackerUrl().toString());
+ URI uold = new URI(client.getTrackerURL().toString());
String portStr = (String) args.get(0);
URI unew = new URI(uold.getScheme(), uold.getUserInfo(), uold.getHost(), Integer.parseInt(portStr), uold.getPath(), uold.getQuery(), uold.getFragment());
- client.setTrackerUrl(new URL(unew.toString()));
+ client.setTrackerURL(new URL(unew.toString()));
ci.out.println("> Set Tracker URL for '"+dm.getSaveLocation()+"' to '"+unew.toString()+"'");
} catch (Exception e) {
ci.out.println("> Command 'hack': Assembling new tracker url failed: "+e.getMessage());
@@ -327,9 +327,9 @@ public class Hack extends TorrentCommand
}
TRTrackerAnnouncer client = dm.getTrackerClient();
try {
- URI uold = new URI(client.getTrackerUrl().toString());
+ URI uold = new URI(client.getTrackerURL().toString());
URI unew = new URI(uold.getScheme(), uold.getUserInfo(), (String)args.get(0), uold.getPort(), uold.getPath(), uold.getQuery(), uold.getFragment());
- client.setTrackerUrl(new URL(unew.toString()));
+ client.setTrackerURL(new URL(unew.toString()));
ci.out.println("> Set Tracker URL for '"+dm.getSaveLocation()+"' to '"+unew.toString()+"'");
} catch (Exception e) {
ci.out.println("> Command 'hack': Assembling new tracker url failed: "+e.getMessage());
@@ -358,7 +358,7 @@ public class Hack extends TorrentCommand
try {
String uriStr = (String) args.get(0);
URI uri = new URI(uriStr);
- client.setTrackerUrl(new URL(uri.toString()));
+ client.setTrackerURL(new URL(uri.toString()));
ci.out.println("> Set Tracker URL for '"+dm.getSaveLocation()+"' to '"+uri+"'");
} catch (Exception e) {
ci.out.println("> Command 'hack': Parsing tracker url failed: "+e.getMessage());
diff --git a/org/gudy/azureus2/ui/console/commands/Show.java b/org/gudy/azureus2/ui/console/commands/Show.java
index 383ac01..88795c7 100644
--- a/org/gudy/azureus2/ui/console/commands/Show.java
+++ b/org/gudy/azureus2/ui/console/commands/Show.java
@@ -529,7 +529,7 @@ public class Show extends IConsoleCommand {
out.println("- Tracker Info -");
TRTrackerAnnouncer trackerclient = dm.getTrackerClient();
if (trackerclient != null) {
- out.println("URL: " + trackerclient.getTrackerUrl());
+ out.println("URL: " + trackerclient.getTrackerURL());
String timestr;
try {
int time = trackerclient.getTimeUntilNextUpdate();
diff --git a/org/gudy/azureus2/ui/swt/OpenTorrentWindow.java b/org/gudy/azureus2/ui/swt/OpenTorrentWindow.java
index 80b684f..798ee1b 100644
--- a/org/gudy/azureus2/ui/swt/OpenTorrentWindow.java
+++ b/org/gudy/azureus2/ui/swt/OpenTorrentWindow.java
@@ -35,9 +35,7 @@ import org.eclipse.swt.custom.TableEditor;
import org.eclipse.swt.dnd.Clipboard;
import org.eclipse.swt.dnd.TextTransfer;
import org.eclipse.swt.events.*;
-import org.eclipse.swt.graphics.Font;
-import org.eclipse.swt.graphics.FontData;
-import org.eclipse.swt.graphics.Rectangle;
+import org.eclipse.swt.graphics.*;
import org.eclipse.swt.layout.GridData;
import org.eclipse.swt.layout.GridLayout;
import org.eclipse.swt.layout.RowLayout;
@@ -100,7 +98,7 @@ public class OpenTorrentWindow
*/
//private final static int MIN_NODOWNLOAD_SIZE = 64 * 1024;
//private final static int MAX_NODOWNLOAD_COUNT = 3;
- private final static int MIN_BUTTON_HEIGHT = Constants.isWindows ? 24 : -1;
+ private final static int MIN_BUTTON_HEIGHT = -1;
private final static String PARAM_DEFSAVEPATH = "Default save path";
@@ -172,7 +170,7 @@ public class OpenTorrentWindow
/** List of torrents being downloaded. Stored so we don't close window
* until they are done/aborted.
*/
- private ArrayList downloaders = new ArrayList();
+ private ArrayList<TorrentDownloader> downloaders = new ArrayList<TorrentDownloader>();
private boolean bOverrideStartModeToStopped = false;
@@ -510,9 +508,6 @@ public class OpenTorrentWindow
});
updateDataDirCombo();
- if (sDestDir != null && sDestDir.length() > 0) {
- cmbDataDir.add(sDestDir);
- }
dirList = COConfigurationManager.getStringListParameter("saveTo_list");
StringIterator iter = dirList.iterator();
while (iter.hasNext()) {
@@ -903,6 +898,9 @@ public class OpenTorrentWindow
int[] indexes = torrentTable.getSelectionIndices();
if (indexes.length == 0) {
+ if (cmbDataDir.getItemCount() == 0) {
+ cmbDataDir.add(sDestDir);
+ }
cmbDataDir.setText(sDestDir);
return;
}
@@ -1042,15 +1040,24 @@ public class OpenTorrentWindow
Utils.disposeSWTObjects(disposeList);
- if (downloaders.size() > 0) {
- for (Iterator iter = downloaders.iterator(); iter.hasNext();) {
- TorrentDownloader element = (TorrentDownloader) iter.next();
- element.cancel();
+ if (bCancel) {
+
+ List<TorrentDownloader> to_cancel;
+
+ synchronized( downloaders ){
+
+ to_cancel = new ArrayList<TorrentDownloader>( downloaders );
+
+ downloaders.clear();
+ }
+
+ if (to_cancel.size() > 0){
+ for (Iterator iter = to_cancel.iterator(); iter.hasNext();) {
+ TorrentDownloader element = (TorrentDownloader) iter.next();
+ element.cancel();
+ }
}
- downloaders.clear();
- }
- if (bCancel) {
for (Iterator iter = torrentList.iterator(); iter.hasNext();) {
TorrentInfo info = (TorrentInfo) iter.next();
if (info.bDeleteFileOnCancel) {
@@ -2340,10 +2347,16 @@ public class OpenTorrentWindow
activeTorrentCount--;
enableControl(ok, activeTorrentCount < 1);
- if (!downloaders.contains(inf))
- return;
- downloaders.remove(inf);
-
+
+ // PARG - yes, this code sucks, added some sync here to prvent some errors but obviously
+ // it needs a complete rewrite
+
+ synchronized( downloaders ){
+ if (!downloaders.contains(inf))
+ return;
+ downloaders.remove(inf);
+ }
+
File file = inf.getFile();
// we already know it isn't a torrent.. we are just using the call
// to popup the message
@@ -2357,16 +2370,20 @@ public class OpenTorrentWindow
if (state == TorrentDownloader.STATE_INIT) {
activeTorrentCount++;
enableControl(ok, activeTorrentCount < 1);
- downloaders.add(inf);
+ synchronized( downloaders ){
+ downloaders.add(inf);
+ }
} else if (state == TorrentDownloader.STATE_FINISHED) {
activeTorrentCount--;
enableControl(ok, activeTorrentCount < 1);
// This can be called more than once for each inf..
- if (!downloaders.contains(inf))
- return;
- downloaders.remove(inf);
-
+ synchronized( downloaders ){
+ if (!downloaders.contains(inf))
+ return;
+ downloaders.remove(inf);
+ }
+
File file = inf.getFile();
if (addTorrent(file.getAbsolutePath(), inf.getURL()) == null) {
// addTorrent may not delete it on error if the downloader saved it
@@ -2410,7 +2427,9 @@ public class OpenTorrentWindow
|| state == TorrentDownloader.STATE_DUPLICATE) {
activeTorrentCount--;
enableControl(ok, activeTorrentCount < 1);
- downloaders.remove(inf);
+ synchronized( downloaders ){
+ downloaders.remove(inf);
+ }
} else if (state == TorrentDownloader.STATE_DOWNLOADING) {
int count = inf.getLastReadCount();
int numRead = inf.getTotalRead();
diff --git a/org/gudy/azureus2/ui/swt/PasswordWindow.java b/org/gudy/azureus2/ui/swt/PasswordWindow.java
index a45885e..7de53a3 100644
--- a/org/gudy/azureus2/ui/swt/PasswordWindow.java
+++ b/org/gudy/azureus2/ui/swt/PasswordWindow.java
@@ -67,7 +67,9 @@ public class PasswordWindow {
public void runSupport() {
if (window == null) {
window = new PasswordWindow(display);
+ window.open();
} else {
+ window.shell.setVisible(true);
window.shell.forceActive();
}
@@ -85,6 +87,9 @@ public class PasswordWindow {
return bOk;
}
protected PasswordWindow(Display display) {
+ }
+
+ private void open() {
bOk = false;
shell = ShellFactory.createMainShell(SWT.APPLICATION_MODAL | SWT.TITLE | SWT.CLOSE);
@@ -177,23 +182,24 @@ public class PasswordWindow {
});
shell.pack();
-
+
Utils.centreWindow(shell);
-
+
shell.open();
}
protected void run() {
while (!shell.isDisposed()) {
- if (!shell.getDisplay().readAndDispatch()) {
- shell.getDisplay().sleep();
+ Display d = shell.getDisplay();
+ if (!d.readAndDispatch() && !shell.isDisposed()) {
+ d.sleep();
}
}
}
private void close() {
shell.dispose();
- if(Constants.isOSX) {
+ if(Utils.isCarbon) {
UIFunctionsSWT uiFunctions = UIFunctionsManagerSWT.getUIFunctionsSWT();
if (uiFunctions != null) {
Shell mainShell = uiFunctions.getMainShell();
diff --git a/org/gudy/azureus2/ui/swt/StartServer.java b/org/gudy/azureus2/ui/swt/StartServer.java
index 88f520e..1e21ca0 100644
--- a/org/gudy/azureus2/ui/swt/StartServer.java
+++ b/org/gudy/azureus2/ui/swt/StartServer.java
@@ -204,10 +204,8 @@ StartServer
return;
}
- if (args.length == 1
- || !COConfigurationManager.getBooleanParameter("add_torrents_silently")) {
- showMainWindow();
- }
+ boolean addSilent = COConfigurationManager.getBooleanParameter("add_torrents_silently");
+ boolean showMainWindow = !addSilent;
boolean open = true;
@@ -228,10 +226,14 @@ StartServer
}else if ( arg.equalsIgnoreCase( "--open" )){
+ showMainWindow = true;
+
continue;
}else if ( arg.equalsIgnoreCase( "--share" )){
+ showMainWindow = true;
+
open = false;
continue;
@@ -244,41 +246,12 @@ StartServer
if ( !file.exists() && !isURI( file_name )){
- // handle hex info hashes
-
- if ( file_name.length() == 40 ){
-
- byte[] hash = null;
-
- try{
- hash = ByteFormatter.decodeString( file_name );
-
- }catch( Throwable e ){
- }
-
- if ( hash != null && hash.length == 20 ){
-
- file_name = "magnet:?xt=urn:btih:" + Base32.encode( hash );
- }
- }
-
- // handle base32 info hash
-
- if ( file_name.length() == 32 ){
-
- byte[] hash = null;
-
- try{
- hash = Base32.decode( file_name );
-
- }catch( Throwable e ){
- }
-
- if ( hash != null && hash.length == 20 ){
-
- file_name = "magnet:?xt=urn:btih:" +file_name;
- }
- }
+ String magnet_uri = UrlUtils.normaliseMagnetURI( file_name );
+
+ if ( magnet_uri != null ){
+
+ file_name = magnet_uri;
+ }
}
if ( isURI( file_name )) {
@@ -331,6 +304,10 @@ StartServer
handleFile( file_name, open );
}
}
+
+ if (showMainWindow) {
+ showMainWindow();
+ }
}
protected boolean
diff --git a/org/gudy/azureus2/ui/swt/TorrentUtil.java b/org/gudy/azureus2/ui/swt/TorrentUtil.java
index ebc506d..f1ef781 100644
--- a/org/gudy/azureus2/ui/swt/TorrentUtil.java
+++ b/org/gudy/azureus2/ui/swt/TorrentUtil.java
@@ -499,21 +499,12 @@ public class TorrentUtil {
return;
}
- List getright = torrent.getAdditionalListProperty( "url-list" );
- List webseeds = torrent.getAdditionalListProperty( "httpseeds" );
+ List getright = getURLList( torrent, "url-list" );
+ List webseeds = getURLList( torrent, "httpseeds" );
Map ws = new HashMap();
-
- if ( getright == null ){
- getright = new ArrayList();
- }
-
- ws.put( "getright", getright );
-
- if ( webseeds == null ){
- webseeds = new ArrayList();
- }
-
+
+ ws.put( "getright", getright );
ws.put( "webseeds", webseeds );
ws = BDecoder.decodeStrings( ws );
@@ -573,6 +564,31 @@ public class TorrentUtil {
true );
}
+
+ protected List
+ getURLList(
+ TOTorrent torrent,
+ String key )
+ {
+ Object obj = torrent.getAdditionalProperty( key );
+
+ if ( obj instanceof byte[] ){
+
+ List l = new ArrayList();
+
+ l.add(obj);
+
+ return( l );
+
+ }else if ( obj instanceof List ){
+
+ return((List)obj);
+
+ }else{
+
+ return( new ArrayList());
+ }
+ }
});
itemEditWebSeeds.setEnabled(dms.length==1);
@@ -1422,10 +1438,13 @@ public class TorrentUtil {
boolean found = dm.filesExist(true);
if (!found && dm.getTorrent() != null
&& !dm.getTorrent().isSimpleTorrent()) {
- sSavePath = fSavePath.getParent();
- if (sSavePath != null) {
- dm.setTorrentSaveDir(sSavePath);
+ String parentPath = fSavePath.getParent();
+ if (parentPath != null) {
+ dm.setTorrentSaveDir(parentPath);
found = dm.filesExist(true);
+ if (!found) {
+ dm.setTorrentSaveDir(sSavePath);
+ }
}
}
diff --git a/org/gudy/azureus2/ui/swt/Utils.java b/org/gudy/azureus2/ui/swt/Utils.java
index fd09903..cc388d0 100644
--- a/org/gudy/azureus2/ui/swt/Utils.java
+++ b/org/gudy/azureus2/ui/swt/Utils.java
@@ -813,7 +813,7 @@ public class Utils
return;
}
- if (new File(sFile).isDirectory()) {
+ if (!Constants.isWindows && new File(sFile).isDirectory()) {
PlatformManager mgr = PlatformManagerFactory.getPlatformManager();
if (mgr.hasCapability(PlatformManagerCapabilities.ShowFileInBrowser)) {
try {
@@ -825,8 +825,7 @@ public class Utils
}
boolean launched = Program.launch(sFile);
- if (!launched && Constants.isUnix
- && (UrlUtils.isURL(sFile) || sFile.startsWith("mailto:"))) {
+ if (!launched && Constants.isUnix) {
if (!Program.launch("xdg-open " + sFile)) {
Program.launch("htmlview " + sFile);
}
diff --git a/org/gudy/azureus2/ui/swt/mainwindow/MainStatusBar.java b/org/gudy/azureus2/ui/swt/mainwindow/MainStatusBar.java
index 01cff89..69f8658 100644
--- a/org/gudy/azureus2/ui/swt/mainwindow/MainStatusBar.java
+++ b/org/gudy/azureus2/ui/swt/mainwindow/MainStatusBar.java
@@ -171,6 +171,12 @@ public class MainStatusBar
private String lastSRimageID = null;
+ private int last_dl_limit;
+
+ private long last_rec_data = - 1;
+
+ private long last_rec_prot;
+
/**
*
*/
@@ -330,8 +336,6 @@ public class MainStatusBar
}
});
- statusBar.layout();
-
this.plugin_label_composite = new Composite(statusBar, SWT.NONE);
this.plugin_label_composite.setForeground(fgColor);
GridLayout gridLayout = new GridLayout();
@@ -402,7 +406,7 @@ public class MainStatusBar
statusDown = new CLabelPadding(statusBar, borderFlag);
statusDown.setImage(imageLoader.getImage("down"));
- statusDown.setText(/*MessageText.getString("ConfigView.download.abbreviated") +*/"n/a");
+ //statusDown.setText(/*MessageText.getString("ConfigView.download.abbreviated") +*/"n/a");
Messages.setLanguageText(statusDown,
"MainWindow.status.updowndetails.tooltip");
@@ -414,7 +418,7 @@ public class MainStatusBar
statusUp = new CLabelPadding(statusBar, borderFlag);
statusUp.setImage(imageLoader.getImage("up"));
- statusUp.setText(/*MessageText.getString("ConfigView.upload.abbreviated") +*/"n/a");
+ //statusUp.setText(/*MessageText.getString("ConfigView.upload.abbreviated") +*/"n/a");
Messages.setLanguageText(statusUp,
"MainWindow.status.updowndetails.tooltip");
@@ -563,6 +567,8 @@ public class MainStatusBar
}
}
+ statusBar.layout(true);
+
return statusBar;
}
@@ -844,12 +850,20 @@ public class MainStatusBar
GlobalManagerStats stats = gm.getStats();
int dl_limit = NetworkManager.getMaxDownloadRateBPS() / 1024;
+ long rec_data = stats.getDataReceiveRate();
+ long rec_prot = stats.getProtocolReceiveRate();
+
+ if (last_dl_limit != dl_limit || last_rec_data != rec_data || last_rec_prot != rec_prot) {
+ last_dl_limit = dl_limit;
+ last_rec_data = rec_data;
+ last_rec_prot = rec_prot;
- statusDown.setText((dl_limit == 0 ? "" : "[" + dl_limit + "K] ")
- + DisplayFormatters.formatDataProtByteCountToKiBEtcPerSec(
- stats.getDataReceiveRate(), stats.getProtocolReceiveRate()));
+ statusDown.setText((dl_limit == 0 ? "" : "[" + dl_limit + "K] ")
+ + DisplayFormatters.formatDataProtByteCountToKiBEtcPerSec(rec_data, rec_prot));
+ }
- boolean auto_up = COConfigurationManager.getBooleanParameter(TransferSpeedValidator.getActiveAutoUploadParameter(gm))
+
+ boolean auto_up = TransferSpeedValidator.isAutoSpeedActive(gm)
&& TransferSpeedValidator.isAutoUploadAvailable(core);
int ul_limit_norm = NetworkManager.getMaxUploadRateBPSNormal() / 1024;
@@ -873,9 +887,6 @@ public class MainStatusBar
+ DisplayFormatters.formatDataProtByteCountToKiBEtcPerSec(
stats.getDataSendRate(), stats.getProtocolSendRate()));
}
-
- // End of Status Sections
- statusBar.layout();
}
/**
@@ -1203,6 +1214,28 @@ public class MainStatusBar
setLayoutData(gridData);
setForeground(parent.getForeground());
}
+
+ public void setText(String text) {
+ if (text == null) {
+ text = "";
+ }
+ if (text.equals(getText())) {
+ return;
+ }
+ super.setText(text);
+ int oldWidth = lastWidth;
+ Point pt = super.computeSize(SWT.DEFAULT, SWT.DEFAULT, true);
+ pt.x += 4;
+ if (pt.x > oldWidth && text.length() > 0) {
+ statusBar.layout();
+ } else if (pt.x < oldWidth) {
+ Utils.execSWTThreadLater(KEEPWIDTHFOR_MS, new AERunnable() {
+ public void runSupport() {
+ statusBar.layout();
+ }
+ });
+ }
+ }
/* (non-Javadoc)
* @see org.eclipse.swt.custom.CLabel#computeSize(int, int, boolean)
diff --git a/org/gudy/azureus2/ui/swt/mainwindow/MenuFactory.java b/org/gudy/azureus2/ui/swt/mainwindow/MenuFactory.java
index 3ba6a86..5086a4a 100644
--- a/org/gudy/azureus2/ui/swt/mainwindow/MenuFactory.java
+++ b/org/gudy/azureus2/ui/swt/mainwindow/MenuFactory.java
@@ -1211,6 +1211,10 @@ public class MenuFactory
* @return may return <code>null</code> if not found
*/
public static MenuItem findMenuItem(Menu menuToStartWith, String idToMatch) {
+ return findMenuItem(menuToStartWith, idToMatch, true);
+ }
+
+ public static MenuItem findMenuItem(Menu menuToStartWith, String idToMatch, boolean deep) {
/*
* This is a recursive method; it will start at the given menuToStartWith
* and recursively traverse to all its sub menus until a matching
@@ -1229,12 +1233,14 @@ public class MenuFactory
return item;
}
- /*
- * Go deeper into each child to try and find it
- */
- MenuItem menuItemToFind = findMenuItem(item.getMenu(), idToMatch);
- if (null != menuItemToFind) {
- return menuItemToFind;
+ if (deep) {
+ /*
+ * Go deeper into each child to try and find it
+ */
+ MenuItem menuItemToFind = findMenuItem(item.getMenu(), idToMatch);
+ if (null != menuItemToFind) {
+ return menuItemToFind;
+ }
}
}
diff --git a/org/gudy/azureus2/ui/swt/mainwindow/SWTThread.java b/org/gudy/azureus2/ui/swt/mainwindow/SWTThread.java
index cfea6cc..1c3898d 100644
--- a/org/gudy/azureus2/ui/swt/mainwindow/SWTThread.java
+++ b/org/gudy/azureus2/ui/swt/mainwindow/SWTThread.java
@@ -168,6 +168,9 @@ public class SWTThread {
display.addListener(SWT.Activate, new Listener() {
public void handleEvent(Event event) {
+ if (event.detail != 1) {
+ return;
+ }
UIFunctionsSWT uif = UIFunctionsManagerSWT.getUIFunctionsSWT();
if (uif != null) {
uif.bringToFront(false);
diff --git a/org/gudy/azureus2/ui/swt/mainwindow/SelectableSpeedMenu.java b/org/gudy/azureus2/ui/swt/mainwindow/SelectableSpeedMenu.java
index f890bc3..611b9af 100644
--- a/org/gudy/azureus2/ui/swt/mainwindow/SelectableSpeedMenu.java
+++ b/org/gudy/azureus2/ui/swt/mainwindow/SelectableSpeedMenu.java
@@ -83,7 +83,7 @@ public class SelectableSpeedMenu {
final String configAutoKey =
TransferSpeedValidator.getActiveAutoUploadParameter(globalManager);
- auto = COConfigurationManager.getBooleanParameter( configAutoKey );
+ auto = TransferSpeedValidator.isAutoSpeedActive(globalManager);
// auto
final MenuItem auto_item = new MenuItem(parent,SWT.CHECK);
diff --git a/org/gudy/azureus2/ui/swt/maketorrent/MultiTrackerEditor.java b/org/gudy/azureus2/ui/swt/maketorrent/MultiTrackerEditor.java
index 29114de..bcef598 100644
--- a/org/gudy/azureus2/ui/swt/maketorrent/MultiTrackerEditor.java
+++ b/org/gudy/azureus2/ui/swt/maketorrent/MultiTrackerEditor.java
@@ -446,7 +446,7 @@ public class MultiTrackerEditor {
String prot = url.getProtocol().toLowerCase();
- if ( prot.equals( "http") || prot.equals( "https" ) || prot.equals( "udp")){
+ if ( prot.equals( "http") || prot.equals( "https" ) || prot.equals( "udp") || prot.equals( "dht")){
return( true );
}
diff --git a/org/gudy/azureus2/ui/swt/osx/CocoaUIEnhancer.java b/org/gudy/azureus2/ui/swt/osx/CocoaUIEnhancer.java
index 092c18b..ee1b4da 100644
--- a/org/gudy/azureus2/ui/swt/osx/CocoaUIEnhancer.java
+++ b/org/gudy/azureus2/ui/swt/osx/CocoaUIEnhancer.java
@@ -88,6 +88,8 @@ public class CocoaUIEnhancer
private static long sel_application_openFiles_;
private static long sel_preferencesMenuItemSelected_;
+
+ private static long sel_applicationShouldHandleReopen_;
private static long sel_toolbarButtonClicked_;
@@ -281,6 +283,18 @@ public class CocoaUIEnhancer
}
}
fileOpen(files);
+ } else if (sel == sel_applicationShouldHandleReopen_) {
+ Event event = new Event ();
+ event.detail = 1;
+ if (display != null) {
+ invoke(Display.class, display, "sendEvent", new Class[] {
+ int.class,
+ Event.class
+ }, new Object[] {
+ SWT.Activate,
+ event
+ });
+ }
}
return 0;
}
@@ -352,7 +366,8 @@ public class CocoaUIEnhancer
private static Object invoke(Class<?> clazz, Object target,
String methodName, Class[] signature, Object[] args) {
try {
- Method method = clazz.getMethod(methodName, signature);
+ Method method = clazz.getDeclaredMethod(methodName, signature);
+ method.setAccessible(true);
return method.invoke(target, args);
} catch (Exception e) {
throw new IllegalStateException(e);
@@ -514,6 +529,7 @@ public class CocoaUIEnhancer
sel_natMenuSelected_ = registerName(osCls, "natMenuItemSelected:");
sel_speedMenuSelected_ = registerName(osCls, "speedMenuItemSelected:");
sel_wizardMenuSelected_ = registerName(osCls, "wizardMenuItemSelected:");
+ sel_applicationShouldHandleReopen_ = registerName(osCls, "applicationShouldHandleReopen:hasVisibleWindows:");
}
// Add the action callbacks for Preferences and About menu items.
@@ -553,6 +569,12 @@ public class CocoaUIEnhancer
wrapPointer(callBack3Addr),
"@:@"
});
+ invoke(osCls, "class_addMethod", new Object[] {
+ wrapPointer(delegateIdSWTApplication),
+ wrapPointer(sel_applicationShouldHandleReopen_),
+ wrapPointer(callBack4Addr),
+ "@:@c"
+ });
// Get the Mac OS X Application menu.
Object sharedApplication = invoke(nsapplicationCls, "sharedApplication");
diff --git a/org/gudy/azureus2/ui/swt/progress/ProgressReporter.java b/org/gudy/azureus2/ui/swt/progress/ProgressReporter.java
index b3e68ae..61a318c 100644
--- a/org/gudy/azureus2/ui/swt/progress/ProgressReporter.java
+++ b/org/gudy/azureus2/ui/swt/progress/ProgressReporter.java
@@ -184,7 +184,7 @@ public class ProgressReporter
/*
* Notifies listeners
*/
- notifyListeners();
+ notifyListeners( getProgressReport());
/*
* Then dispose all listeners to let GC do it's magic.
@@ -223,7 +223,7 @@ public class ProgressReporter
* this optimization is designed to prevent dangling/orphaned listeners, and also reduces the
* number of listeners to notify upon the next event
*/
- private void notifyListeners() {
+ private void notifyListeners( IProgressReport report) {
if (null == reporterListeners || reporterListeners.size() < 1) {
return;
}
@@ -237,7 +237,7 @@ public class ProgressReporter
/*
* If the listener returned RETVAL_OK_TO_DISPOSE then it has indicated that it is no longer needed so we release it
*/
- if (RETVAL_OK_TO_DISPOSE == listener.report(getProgressReport())) {
+ if (RETVAL_OK_TO_DISPOSE == listener.report( report )) {
removalList.add(listener);
}
} catch (Throwable e) {
@@ -283,7 +283,7 @@ public class ProgressReporter
/*
* Now we can notify listeners for this specific reporter
*/
- notifyListeners();
+ notifyListeners( latestProgressReport );
}
/* (non-Javadoc)
diff --git a/org/gudy/azureus2/ui/swt/progress/ProgressReporterPanel.java b/org/gudy/azureus2/ui/swt/progress/ProgressReporterPanel.java
index 73461c3..a67821e 100644
--- a/org/gudy/azureus2/ui/swt/progress/ProgressReporterPanel.java
+++ b/org/gudy/azureus2/ui/swt/progress/ProgressReporterPanel.java
@@ -502,6 +502,7 @@ public class ProgressReporterPanel
case REPORT_TYPE_RETRY:
getDisplay().asyncExec(new Runnable() {
public void run() {
+ lastStatusError = null;
updateStatusLabel(pReport.getMessage(), false);
appendToDetail(
MessageText.getString("Progress.reporting.status.retrying"),
diff --git a/org/gudy/azureus2/ui/swt/views/GeneralView.java b/org/gudy/azureus2/ui/swt/views/GeneralView.java
index 1d9c83d..8edc31d 100644
--- a/org/gudy/azureus2/ui/swt/views/GeneralView.java
+++ b/org/gudy/azureus2/ui/swt/views/GeneralView.java
@@ -1255,7 +1255,7 @@ public class GeneralView extends AbstractIView implements ParameterListener,
if ( trackerClient != null ){
- URL temp = trackerClient.getTrackerUrl();
+ URL temp = trackerClient.getTrackerURL();
if ( temp != null ){
diff --git a/org/gudy/azureus2/ui/swt/views/ManagerView.java b/org/gudy/azureus2/ui/swt/views/ManagerView.java
index b2e34cb..7308ac9 100644
--- a/org/gudy/azureus2/ui/swt/views/ManagerView.java
+++ b/org/gudy/azureus2/ui/swt/views/ManagerView.java
@@ -235,7 +235,7 @@ public class ManagerView
iviews_to_use.add(new LoggerView(true));
}
- IView[] views = (IView[])iviews_to_use.toArray(new IView[iviews_to_use.size()]);
+ final IView[] views = (IView[])iviews_to_use.toArray(new IView[iviews_to_use.size()]);
for (int i = 0; i < views.length; i++)
addSection(views[i], manager);
@@ -269,36 +269,42 @@ public class ManagerView
folder.addSelectionListener(new SelectionAdapter() {
public void widgetSelected(SelectionEvent e) {
folder.getShell().setCursor(e.display.getSystemCursor(SWT.CURSOR_WAIT));
- // Send one last refresh to previous tab, just in case it
- // wants to do something when view goes invisible
- refresh();
-
- CTabItem item = (CTabItem)e.item;
- if (item != null) {
- IView view = (IView)item.getData("IView");
- activeView = view;
-
- if (item.getControl() == null) {
- view.initialize(folder);
- item.setControl(view.getComposite());
- }
-
- item.getControl().setFocus();
- }
- refresh();
- ViewTitleInfoManager.refreshTitleInfo(ManagerView.this);
- folder.getShell().setCursor(e.display.getSystemCursor(SWT.CURSOR_ARROW));
+ try {
+ // Send one last refresh to previous tab, just in case it
+ // wants to do something when view goes invisible
+ refresh();
+
+ CTabItem item = (CTabItem)e.item;
+ if (item != null) {
+ IView view = (IView)item.getData("IView");
+ activeView = view;
+
+ if (item.getControl() == null) {
+ view.initialize(folder);
+ item.setControl(view.getComposite());
+ }
+
+ item.getControl().setFocus();
+ }
+ refresh();
+ ViewTitleInfoManager.refreshTitleInfo(ManagerView.this);
+ } finally {
+ folder.getShell().setCursor(null);
+ }
}
});
-
- views[0].initialize(folder);
- folder.getItem(0).setControl(views[0].getComposite());
- views[0].refresh();
- views[0].getComposite().layout(true);
- views[0].getComposite().setFocus();
- activeView = views[0];
- ViewTitleInfoManager.refreshTitleInfo(this);
+ Utils.execSWTThreadLater(0, new AERunnable() {
+ public void runSupport() {
+ views[0].initialize(folder);
+ folder.getItem(0).setControl(views[0].getComposite());
+ views[0].refresh();
+ views[0].getComposite().layout(true);
+ views[0].getComposite().setFocus();
+ activeView = views[0];
+ ViewTitleInfoManager.refreshTitleInfo(ManagerView.this);
+ }
+ });
}
private IView getActiveView() {
diff --git a/org/gudy/azureus2/ui/swt/views/TorrentInfoView.java b/org/gudy/azureus2/ui/swt/views/TorrentInfoView.java
index 0a85157..630ba11 100644
--- a/org/gudy/azureus2/ui/swt/views/TorrentInfoView.java
+++ b/org/gudy/azureus2/ui/swt/views/TorrentInfoView.java
@@ -210,7 +210,7 @@ TorrentInfoView
if ( announcer != null ){
- active_url = announcer.getTrackerUrl();
+ active_url = announcer.getTrackerURL();
}else{
diff --git a/org/gudy/azureus2/ui/swt/views/clientstats/ClientStatsView.java b/org/gudy/azureus2/ui/swt/views/clientstats/ClientStatsView.java
index 18853ea..812d21a 100644
--- a/org/gudy/azureus2/ui/swt/views/clientstats/ClientStatsView.java
+++ b/org/gudy/azureus2/ui/swt/views/clientstats/ClientStatsView.java
@@ -10,8 +10,7 @@ import org.eclipse.swt.SWT;
import org.eclipse.swt.layout.*;
import org.eclipse.swt.widgets.*;
-import org.gudy.azureus2.core3.download.DownloadManager;
-import org.gudy.azureus2.core3.download.DownloadManagerPeerListener;
+import org.gudy.azureus2.core3.download.*;
import org.gudy.azureus2.core3.global.GlobalManagerListener;
import org.gudy.azureus2.core3.peer.PEPeer;
import org.gudy.azureus2.core3.peer.PEPeerListener;
@@ -227,6 +226,82 @@ public class ClientStatsView
break;
}
}
+
+ Arrays.sort(stats, new Comparator<ClientStatsDataSource>() {
+ public int compare(ClientStatsDataSource o1, ClientStatsDataSource o2) {
+ float v1 = (float) o1.bytesDiscarded / o1.count;
+ float v2 = (float) o2.bytesDiscarded / o2.count;
+ if (v1 == v2) {
+ return 0;
+ }
+ return v1 > v2 ? -1 : 1;
+ }
+ });
+ top = 5;
+ first = true;
+ sb.append("\nMost Discarded (");
+ total = 0;
+ for (ClientStatsDataSource stat : stats) {
+ total += stat.bytesDiscarded;
+ }
+ sb.append(DisplayFormatters.formatByteCountToKiBEtc(total, false, true,
+ 0));
+ sb.append(" Discarded): ");
+ for (ClientStatsDataSource stat : stats) {
+ if (first) {
+ first = false;
+ } else {
+ sb.append(", ");
+ }
+ sb.append(DisplayFormatters.formatByteCountToKiBEtc(
+ stat.bytesDiscarded / stat.count, false, true, 0));
+ sb.append(" per ");
+ sb.append(stat.client);
+ sb.append("(x");
+ sb.append(stat.count);
+ sb.append(")");
+ if (--top <= 0) {
+ break;
+ }
+ }
+
+ Arrays.sort(stats, new Comparator<ClientStatsDataSource>() {
+ public int compare(ClientStatsDataSource o1, ClientStatsDataSource o2) {
+ float v1 = (float) o1.bytesSent / o1.count;
+ float v2 = (float) o2.bytesSent / o2.count;
+ if (v1 == v2) {
+ return 0;
+ }
+ return v1 > v2 ? -1 : 1;
+ }
+ });
+ top = 5;
+ first = true;
+ sb.append("\nMost Fed (");
+ total = 0;
+ for (ClientStatsDataSource stat : stats) {
+ total += stat.bytesSent;
+ }
+ sb.append(DisplayFormatters.formatByteCountToKiBEtc(total, false, true,
+ 0));
+ sb.append(" Sent): ");
+ for (ClientStatsDataSource stat : stats) {
+ if (first) {
+ first = false;
+ } else {
+ sb.append(", ");
+ }
+ sb.append(DisplayFormatters.formatByteCountToKiBEtc(
+ stat.bytesSent / stat.count, false, true, 0));
+ sb.append(" per ");
+ sb.append(stat.client);
+ sb.append("(x");
+ sb.append(stat.count);
+ sb.append(")");
+ if (--top <= 0) {
+ break;
+ }
+ }
ClipboardCopy.copyToClipBoard(sb.toString());
}
@@ -292,6 +367,12 @@ public class ClientStatsView
}
});
tableManager.registerColumn(ClientStatsDataSource.class,
+ ColumnCS_ReceivedPer.COLUMN_ID, new TableColumnCreationListener() {
+ public void tableColumnCreated(TableColumn column) {
+ new ColumnCS_ReceivedPer(column);
+ }
+ });
+ tableManager.registerColumn(ClientStatsDataSource.class,
ColumnCS_Sent.COLUMN_ID, new TableColumnCreationListener() {
public void tableColumnCreated(TableColumn column) {
new ColumnCS_Sent(column);
@@ -428,7 +509,9 @@ public class ClientStatsView
}
public void downloadManagerAdded(DownloadManager dm) {
- dm.addPeerListener(this, true);
+ if (!dm.getDownloadState().getFlag(DownloadManagerState.FLAG_LOW_NOISE)) {
+ dm.addPeerListener(this, true);
+ }
}
public void downloadManagerRemoved(DownloadManager dm) {
diff --git a/org/gudy/azureus2/ui/swt/views/clientstats/ColumnCS_Sent.java b/org/gudy/azureus2/ui/swt/views/clientstats/ColumnCS_ReceivedPer.java
similarity index 80%
copy from org/gudy/azureus2/ui/swt/views/clientstats/ColumnCS_Sent.java
copy to org/gudy/azureus2/ui/swt/views/clientstats/ColumnCS_ReceivedPer.java
index b605370..1b18967 100644
--- a/org/gudy/azureus2/ui/swt/views/clientstats/ColumnCS_Sent.java
+++ b/org/gudy/azureus2/ui/swt/views/clientstats/ColumnCS_ReceivedPer.java
@@ -5,13 +5,13 @@ import org.gudy.azureus2.plugins.ui.tables.TableCell;
import org.gudy.azureus2.plugins.ui.tables.TableCellRefreshListener;
import org.gudy.azureus2.plugins.ui.tables.TableColumn;
-public class ColumnCS_Sent
+public class ColumnCS_ReceivedPer
implements TableCellRefreshListener
{
- public static final String COLUMN_ID = "sent";
+ public static final String COLUMN_ID = "received.per";
- public ColumnCS_Sent(TableColumn column) {
+ public ColumnCS_ReceivedPer(TableColumn column) {
column.initialize(TableColumn.ALIGN_TRAIL, TableColumn.POSITION_LAST, 80);
column.addListeners(this);
column.setType(TableColumn.TYPE_TEXT_ONLY);
@@ -22,7 +22,7 @@ public class ColumnCS_Sent
if (ds == null) {
return;
}
- long val = ds.bytesSent;
+ long val = ds.bytesReceived / ds.count;
if (cell.setSortValue(val) || !cell.isValid()) {
cell.setText(DisplayFormatters.formatByteCountToKiBEtc(val));
}
diff --git a/org/gudy/azureus2/ui/swt/views/configsections/ConfigSectionConnectionAdvanced.java b/org/gudy/azureus2/ui/swt/views/configsections/ConfigSectionConnectionAdvanced.java
index 0b1ad25..a44ce60 100644
--- a/org/gudy/azureus2/ui/swt/views/configsections/ConfigSectionConnectionAdvanced.java
+++ b/org/gudy/azureus2/ui/swt/views/configsections/ConfigSectionConnectionAdvanced.java
@@ -268,7 +268,8 @@ public class ConfigSectionConnectionAdvanced implements UISWTConfigSection {
gridData = new GridData();
write_select_min.setLayoutData(gridData);
-
+ new BooleanParameter( cSection, "IPV6 Enable Support", "network.ipv6.enable.support" );
+
new BooleanParameter( cSection, "IPV6 Prefer Addresses", "network.ipv6.prefer.addresses" );
diff --git a/org/gudy/azureus2/ui/swt/views/stats/StatsView.java b/org/gudy/azureus2/ui/swt/views/stats/StatsView.java
index 5461c7e..d31bb85 100644
--- a/org/gudy/azureus2/ui/swt/views/stats/StatsView.java
+++ b/org/gudy/azureus2/ui/swt/views/stats/StatsView.java
@@ -114,7 +114,7 @@ public class StatsView extends AbstractIView {
dhts.add( new DHTView( DHTView.DHT_TYPE_MAIN ));
vivaldis.add( new VivaldiView( VivaldiView.DHT_TYPE_MAIN ));
- if ( NetworkAdmin.getSingleton().hasIPV6Potential(false)){
+ if ( NetworkAdmin.getSingleton().hasDHTIPV6()){
dhts.add( new DHTView( DHTView.DHT_TYPE_MAIN_V6 ));
vivaldis.add( new VivaldiView( VivaldiView.DHT_TYPE_MAIN_V6 ));
diff --git a/org/gudy/azureus2/ui/swt/views/stats/TrackerStatsView.java b/org/gudy/azureus2/ui/swt/views/stats/TrackerStatsView.java
index 531d81b..3092871 100644
--- a/org/gudy/azureus2/ui/swt/views/stats/TrackerStatsView.java
+++ b/org/gudy/azureus2/ui/swt/views/stats/TrackerStatsView.java
@@ -30,7 +30,7 @@ public class TrackerStatsView
TRTrackerAnnouncerFactory.addListener(new TRTrackerAnnouncerFactoryListener() {
public void clientDestroyed(TRTrackerAnnouncer client) {
- System.out.println("ADD " + client.getTrackerUrl().toString());
+ System.out.println("ADD " + client.getTrackerURL().toString());
}
public void clientCreated(TRTrackerAnnouncer client) {
diff --git a/org/gudy/azureus2/ui/swt/views/table/impl/TableViewSWTImpl.java b/org/gudy/azureus2/ui/swt/views/table/impl/TableViewSWTImpl.java
index daf0874..fd00c27 100644
--- a/org/gudy/azureus2/ui/swt/views/table/impl/TableViewSWTImpl.java
+++ b/org/gudy/azureus2/ui/swt/views/table/impl/TableViewSWTImpl.java
@@ -21,7 +21,6 @@
*/
package org.gudy.azureus2.ui.swt.views.table.impl;
-import java.lang.reflect.InvocationTargetException;
import java.lang.reflect.Method;
import java.util.*;
import java.util.List;
@@ -799,11 +798,9 @@ public class TableViewSWTImpl<DATASOURCETYPE>
event.width = preferredWidth;
}
- if (slider == null) {
- int defaultHeight = getRowDefaultHeight();
- if (event.height < defaultHeight) {
- event.height = defaultHeight;
- }
+ int defaultHeight = getRowDefaultHeight();
+ if (event.height < defaultHeight) {
+ event.height = defaultHeight;
}
}
});
@@ -1060,11 +1057,21 @@ public class TableViewSWTImpl<DATASOURCETYPE>
Utils.disposeSWTObjects(new Object[] { slider } );
}
});
-
+/*
+ if (Utils.isCocoa) {
+ table.addListener(SWT.MouseVerticalWheel, new Listener() {
+ public void handleEvent(Event event) {
+ calculateClientArea();
+ visibleRowsChanged();
+ }
+ });
+ }
+*/
ScrollBar bar = table.getVerticalBar();
if (bar != null) {
bar.addSelectionListener(new SelectionAdapter() {
public void widgetSelected(SelectionEvent e) {
+ calculateClientArea();
visibleRowsChanged();
// Bug: Scroll is slow when table is not focus
if (!table.isFocusControl()) {
@@ -1859,7 +1866,12 @@ public class TableViewSWTImpl<DATASOURCETYPE>
}
column.setAlignment(TableColumnSWTUtils.convertColumnAlignmentToSWT(tableColumns[i].getAlignment()));
Messages.setLanguageText(column, tableColumns[i].getTitleLanguageKey());
- column.setWidth(tableColumns[i].getWidth());
+ if (!Constants.isUnix) {
+ column.setWidth(tableColumns[i].getWidth());
+ } else {
+ column.setData("widthOffset", new Long(1));
+ column.setWidth(tableColumns[i].getWidth() + 1);
+ }
if (tableColumns[i].getMinWidth() == tableColumns[i].getMaxWidth()
&& tableColumns[i].getMinWidth() > 0) {
column.setResizable(false);
@@ -2893,16 +2905,23 @@ public class TableViewSWTImpl<DATASOURCETYPE>
for (int i = 0; i < len; i++) {
TableColumnCore tc = (TableColumnCore) tableColumnsSWT[i].getData("TableColumnCore");
if (tc != null) {
+ boolean foundOne = false;
+
Rectangle bounds = item.getBounds(i);
int tcWidth = tc.getWidth();
if (tcWidth != 0 && bounds.width != 0) {
- int ofs = tc.getWidth() - bounds.width;
- if (ofs > 0) {
+ Object oOldOfs = tableColumnsSWT[i].getData("widthOffset");
+ int oldOfs = (oOldOfs instanceof Number) ? ((Number)oOldOfs).intValue() : 0;
+ int ofs = tc.getWidth() - bounds.width + oldOfs;
+ if (ofs > 0 && ofs != oldOfs) {
+ foundOne = true;
tableColumnsSWT[i].setResizable(true);
- tableColumnsSWT[i].setData("widthOffset", new Long(ofs));
- tc.triggerColumnSizeChange();
+ tableColumnsSWT[i].setData("widthOffset", new Long(ofs + oldOfs));
}
}
+ if (foundOne) {
+ tc.triggerColumnSizeChange();
+ }
}
}
columnPaddingAdjusted = true;
@@ -4355,6 +4374,9 @@ public class TableViewSWTImpl<DATASOURCETYPE>
int iBottomIndex = Utils.getTableBottomIndex(table, iTopIndex);
if (lastTopIndex != iTopIndex) {
+ if (Utils.isCocoa) {
+ calculateClientArea();
+ }
int tmpIndex = lastTopIndex;
lastTopIndex = iTopIndex;
diff --git a/org/gudy/azureus2/ui/swt/views/table/utils/TableColumnManager.java b/org/gudy/azureus2/ui/swt/views/table/utils/TableColumnManager.java
index c094802..d9c7cc6 100644
--- a/org/gudy/azureus2/ui/swt/views/table/utils/TableColumnManager.java
+++ b/org/gudy/azureus2/ui/swt/views/table/utils/TableColumnManager.java
@@ -637,22 +637,34 @@ public class TableColumnManager {
if (listener != null) {
mapColumnIDsToListener.put(forDataSourceType + "." + columnID, listener);
}
- List list = (List) mapDataSourceTypeToColumnIDs.get(forDataSourceType);
- if (list == null) {
- list = new ArrayList(1);
- mapDataSourceTypeToColumnIDs.put(forDataSourceType, list);
- }
- if (!list.contains(columnID)) {
- list.add(columnID);
+ try {
+ items_mon.enter();
+
+ List list = (List) mapDataSourceTypeToColumnIDs.get(forDataSourceType);
+ if (list == null) {
+ list = new ArrayList(1);
+ mapDataSourceTypeToColumnIDs.put(forDataSourceType, list);
+ }
+ if (!list.contains(columnID)) {
+ list.add(columnID);
+ }
+ } finally {
+ items_mon.exit();
}
}
public void unregisterColumn(Class forDataSourceType, String columnID,
TableColumnCreationListener listener) {
- mapColumnIDsToListener.remove(forDataSourceType + "." + columnID);
- List list = (List) mapDataSourceTypeToColumnIDs.get(forDataSourceType);
- if (list != null) {
- list.remove(columnID);
+ try {
+ items_mon.enter();
+
+ mapColumnIDsToListener.remove(forDataSourceType + "." + columnID);
+ List list = (List) mapDataSourceTypeToColumnIDs.get(forDataSourceType);
+ if (list != null) {
+ list.remove(columnID);
+ }
+ } finally {
+ items_mon.exit();
}
}
diff --git a/org/gudy/azureus2/ui/swt/win32/Win32UIEnhancer.java b/org/gudy/azureus2/ui/swt/win32/Win32UIEnhancer.java
index 6028673..4bed862 100644
--- a/org/gudy/azureus2/ui/swt/win32/Win32UIEnhancer.java
+++ b/org/gudy/azureus2/ui/swt/win32/Win32UIEnhancer.java
@@ -118,7 +118,7 @@ public class Win32UIEnhancer
int.class
});
} catch (Exception e) {
- e.printStackTrace();
+ //e.printStackTrace();
mSetWindowLongPtr = claOS.getMethod("SetWindowLongPtr",
new Class[] {
long.class,
@@ -130,11 +130,11 @@ public class Win32UIEnhancer
mOS_memmove_byte = claOS.getMethod("memmove", new Class[] {
byte[].class,
long.class,
- int.class
+ long.class
});
mOS_memmove_int = claOS.getMethod("memmove", new Class[] {
int[].class,
- int.class,
+ long.class,
long.class
});
}
diff --git a/org/gudy/azureus2/ui/webplugin/WebPlugin.java b/org/gudy/azureus2/ui/webplugin/WebPlugin.java
index 415a61c..2fab9fc 100644
--- a/org/gudy/azureus2/ui/webplugin/WebPlugin.java
+++ b/org/gudy/azureus2/ui/webplugin/WebPlugin.java
@@ -51,6 +51,7 @@ public class
WebPlugin
implements Plugin, TrackerWebPageGenerator
{
+ public static final String PR_ENABLE = "Enable"; // Boolean
public static final String PR_DISABLABLE = "Disablable"; // Boolean
public static final String PR_PORT = "Port"; // Integer
public static final String PR_BIND_IP = "Bind IP"; // String
@@ -58,7 +59,7 @@ WebPlugin
public static final String PR_ROOT_DIR = "Root Dir"; // String
public static final String PR_ACCESS = "Access"; // String
public static final String PR_LOG = "DefaultLoggerChannel"; // LoggerChannel
- public static final String PR_CONFIG_MODEL = "DefaultConfigModel"; // BasicPluginConfigModel
+ public static final String PR_CONFIG_MODEL_PARAMS = "DefaultConfigModelParams"; // String[] params to use when creating config model
public static final String PR_VIEW_MODEL = "DefaultViewModel"; // BasicPluginViewModel
public static final String PR_HIDE_RESOURCE_CONFIG = "DefaultHideResourceConfig"; // Boolean
public static final String PR_ENABLE_KEEP_ALIVE = "DefaultEnableKeepAlive"; // Boolean
@@ -68,19 +69,19 @@ WebPlugin
public static final String CONFIG_MIGRATED = "Config Migrated";
public static final String CONFIG_PASSWORD_ENABLE = "Password Enable";
- public final boolean CONFIG_PASSWORD_ENABLE_DEFAULT = false;
+ public static final boolean CONFIG_PASSWORD_ENABLE_DEFAULT = false;
public static final String CONFIG_PAIRING_ENABLE = "Pairing Enable";
- public final boolean CONFIG_PAIRING_ENABLE_DEFAULT = true;
+ public static final boolean CONFIG_PAIRING_ENABLE_DEFAULT = true;
- public static final String CONFIG_ENABLE = "Enable";
- public static final boolean CONFIG_ENABLE_DEFAULT = true;
+ public static final String CONFIG_ENABLE = PR_ENABLE;
+ public boolean CONFIG_ENABLE_DEFAULT = true;
public static final String CONFIG_USER = "User";
- public final String CONFIG_USER_DEFAULT = "";
+ public static final String CONFIG_USER_DEFAULT = "";
public static final String CONFIG_PASSWORD = "Password";
- public final byte[] CONFIG_PASSWORD_DEFAULT = {};
+ public static final byte[] CONFIG_PASSWORD_DEFAULT = {};
public static final String CONFIG_PORT = PR_PORT;
public int CONFIG_PORT_DEFAULT = 8089;
@@ -89,13 +90,13 @@ WebPlugin
public String CONFIG_BIND_IP_DEFAULT = "";
public static final String CONFIG_PROTOCOL = "Protocol";
- public final String CONFIG_PROTOCOL_DEFAULT = "HTTP";
+ public static final String CONFIG_PROTOCOL_DEFAULT = "HTTP";
public static final String CONFIG_UPNP_ENABLE = "UPnP Enable";
- public final boolean CONFIG_UPNP_ENABLE_DEFAULT = true;
+ public static final boolean CONFIG_UPNP_ENABLE_DEFAULT = true;
public static final String CONFIG_HOME_PAGE = "Home Page";
- public final String CONFIG_HOME_PAGE_DEFAULT = "index.html";
+ public static final String CONFIG_HOME_PAGE_DEFAULT = "index.html";
public static final String CONFIG_ROOT_DIR = PR_ROOT_DIR;
public String CONFIG_ROOT_DIR_DEFAULT = "";
@@ -105,7 +106,7 @@ WebPlugin
public static final String CONFIG_MODE = "Mode";
public static final String CONFIG_MODE_FULL = "full";
- public final String CONFIG_MODE_DEFAULT = CONFIG_MODE_FULL;
+ public static final String CONFIG_MODE_DEFAULT = CONFIG_MODE_FULL;
public static final String CONFIG_ACCESS = PR_ACCESS;
public String CONFIG_ACCESS_DEFAULT = "all";
@@ -129,7 +130,7 @@ WebPlugin
private String resource_root;
private boolean ip_range_all = false;
- private IPRange ip_range;
+ private List<IPRange> ip_ranges;
private Properties properties;
@@ -154,6 +155,13 @@ WebPlugin
{
plugin_interface = _plugin_interface;
+ Boolean pr_enable = (Boolean)properties.get(PR_ENABLE);
+
+ if ( pr_enable != null ){
+
+ CONFIG_ENABLE_DEFAULT = pr_enable.booleanValue();
+ }
+
Integer pr_port = (Integer)properties.get(PR_PORT);
if ( pr_port != null ){
@@ -237,11 +245,19 @@ WebPlugin
PluginConfig plugin_config = plugin_interface.getPluginconfig();
- config_model = (BasicPluginConfigModel)properties.get( PR_CONFIG_MODEL );
+ String[] cm_params = (String[])properties.get( PR_CONFIG_MODEL_PARAMS );
- if ( config_model == null ){
+ if ( cm_params == null || cm_params.length == 0 ){
config_model = ui_manager.createBasicPluginConfigModel(ConfigSection.SECTION_PLUGINS, sConfigSectionID);
+
+ }else if ( cm_params.length == 1 ){
+
+ config_model = ui_manager.createBasicPluginConfigModel( cm_params[0] );
+
+ }else{
+
+ config_model = ui_manager.createBasicPluginConfigModel( cm_params[0], cm_params[1] );
}
boolean save_needed = false;
@@ -349,7 +365,7 @@ WebPlugin
plugin_config.save();
}
- LabelParameter param_info = config_model.addLabelParameter2( "webui.restart.info" );
+ final LabelParameter param_info = config_model.addLabelParameter2( "webui.restart.info" );
Boolean disablable = (Boolean)properties.get( PR_DISABLABLE );
@@ -503,21 +519,77 @@ WebPlugin
pw_enable, user_name, password,
});
- if ( !enabled ){
-
- Parameter[] params = config_model.getParameters();
+ if ( param_enable != null ){
+
+ final List<Parameter> changed_params = new ArrayList<Parameter>();
- for ( Parameter param: params ){
+ if ( !enabled ){
- if ( param == param_enable || param == param_info ){
+ Parameter[] params = config_model.getParameters();
+
+ for ( Parameter param: params ){
+
+ if ( param == param_enable || param == param_info ){
+
+ continue;
+ }
+
+ if ( param.isEnabled()){
+
+ changed_params.add( param );
- continue;
+ param.setEnabled( false );
+ }
}
-
- param.setEnabled( false );
}
- return;
+ param_enable.addListener(
+ new ParameterListener()
+ {
+ public void
+ parameterChanged(
+ Parameter e_p )
+ {
+ // this doesn't quite work as tne enabler/disabler parameter logic is implemented
+ // badly and only toggles the UI component, not the enabled state of the
+ // underlying parameter. grr. better than nothing though
+
+ boolean is_enabled = ((BooleanParameter)e_p).getValue();
+
+ if ( is_enabled ){
+
+ for ( Parameter p: changed_params ){
+
+ p.setEnabled( true );
+ }
+ }else{
+
+ changed_params.clear();
+
+ Parameter[] params = config_model.getParameters();
+
+ for ( Parameter param: params ){
+
+ if ( param == e_p || param == param_info ){
+
+ continue;
+ }
+
+ if ( param.isEnabled()){
+
+ changed_params.add( param );
+
+ param.setEnabled( false );
+ }
+ }
+ }
+ }
+ });
+
+ if ( !enabled ){
+
+ return;
+ }
}
// end config
@@ -649,32 +721,55 @@ WebPlugin
String access_str = param_access.getValue().trim();
+ String ip_ranges_str = "";
+
if ( access_str.length() > 7 && Character.isDigit(access_str.charAt(0))){
- ip_range = plugin_interface.getIPFilter().createRange(true);
+ String[] ranges = access_str.replace( ';', ',' ).split( "," );
+
+ ip_ranges = new ArrayList<IPRange>();
- int sep = access_str.indexOf("-");
+ for ( String range: ranges ){
- if ( sep == -1 ){
+ range = range.trim();
- ip_range.setStartIP( access_str );
+ if ( range.length() > 7 ){
+
+ IPRange ip_range = plugin_interface.getIPFilter().createRange(true);
+
+ int sep = range.indexOf("-");
- ip_range.setEndIP( access_str );
+ if ( sep == -1 ){
- }else{
+ ip_range.setStartIP( range );
- ip_range.setStartIP( access_str.substring(0,sep).trim());
+ ip_range.setEndIP( range );
- ip_range.setEndIP( access_str.substring( sep+1 ).trim());
- }
+ }else{
+
+ ip_range.setStartIP( range.substring(0,sep).trim());
+
+ ip_range.setEndIP( range.substring( sep+1 ).trim());
+ }
- ip_range.checkValid();
+ ip_range.checkValid();
- if (!ip_range.isValid()){
+ if (!ip_range.isValid()){
- log.log( LoggerChannel.LT_ERROR, "Access parameter '" + access_str + "' is invalid" );
+ log.log( LoggerChannel.LT_ERROR, "Access parameter '" + range + "' is invalid" );
+
+ }else{
+
+ ip_ranges.add( ip_range );
+
+ ip_ranges_str += (ip_ranges_str.length()==0?"":", ") + ip_range.getStartIP() + " - " + ip_range.getEndIP();
+ }
+ }
+ }
- ip_range = null;
+ if ( ip_ranges.size() == 0 ){
+
+ ip_ranges = null;
}
}else{
@@ -686,9 +781,9 @@ WebPlugin
log.log( LoggerChannel.LT_INFORMATION,
"Acceptable IP range = " +
- ( ip_range==null?
+ ( ip_ranges==null?
(ip_range_all?"all":"local"):
- (ip_range.getStartIP() + " - " + ip_range.getEndIP())));
+ (ip_ranges_str)));
try{
@@ -898,7 +993,7 @@ WebPlugin
boolean valid_ip = true;
InetAddress ia = InetAddress.getByName( client );
- if ( ip_range == null ){
+ if ( ip_ranges == null ){
if ( !ia.isLoopbackAddress()){
@@ -907,7 +1002,17 @@ WebPlugin
}
}else{
- if ( !ip_range.isInRange( ia.getHostAddress())){
+ boolean ok = false;
+
+ for ( IPRange range: ip_ranges ){
+
+ if ( range.isInRange( ia.getHostAddress())){
+
+ ok = true;
+ }
+ }
+
+ if ( !ok ){
log.log( LoggerChannel.LT_ERROR, "Client '" + client + "' (" + ia.getHostAddress() + ") is not in range, rejecting" );
valid_ip = false;
hooks/post-receive
--
Azureus/Vuze packaging for Debian
More information about the pkg-java-commits
mailing list