merge of '4016f0b3372bfe07d914506d696a999c20d4c02c'

and '66ef156941e22ca82de6bf0b9ec70dd74c7a130b'
This commit is contained in:
kytv
2011-06-27 21:21:32 +00:00
482 changed files with 86220 additions and 21432 deletions

View File

@@ -7,6 +7,8 @@ trans.es = apps/i2ptunnel/locale/messages_es.po
trans.fr = apps/i2ptunnel/locale/messages_fr.po
trans.nl = apps/i2ptunnel/locale/messages_nl.po
trans.ru = apps/i2ptunnel/locale/messages_ru.po
trans.sv_SE = apps/i2ptunnel/locale/messages_sv.po
trans.vi = apps/i2ptunnel/locale/messages_vi.po
trans.zh_CN = apps/i2ptunnel/locale/messages_zh.po
[I2P.routerconsole]
@@ -15,9 +17,14 @@ source_lang = en
trans.ar = apps/routerconsole/locale/messages_ar.po
trans.de = apps/routerconsole/locale/messages_de.po
trans.es = apps/routerconsole/locale/messages_es.po
trans.fi = apps/routerconsole/locale/messages_fi.po
trans.fr = apps/routerconsole/locale/messages_fr.po
trans.it = apps/routerconsole/locale/messages_it.po
trans.nl = apps/routerconsole/locale/messages_nl.po
trans.pl = apps/routerconsole/locale/messages_pl.po
trans.ru = apps/routerconsole/locale/messages_ru.po
trans.sv_SE = apps/routerconsole/locale/messages_sv.po
trans.vi = apps/routerconsole/locale/messages_vi.po
trans.zh_CN = apps/routerconsole/locale/messages_zh.po
[I2P.i2psnark]
@@ -27,9 +34,13 @@ trans.ar = apps/i2psnark/locale/messages_ar.po
trans.de = apps/i2psnark/locale/messages_de.po
trans.es = apps/i2psnark/locale/messages_es.po
trans.fr = apps/i2psnark/locale/messages_fr.po
trans.it = apps/i2psnark/locale/messages_it.po
trans.nl = apps/i2psnark/locale/messages_nl.po
trans.pl = apps/i2psnark/locale/messages_pl.po
trans.pt = apps/i2psnark/locale/messages_pt.po
trans.ru = apps/i2psnark/locale/messages_ru.po
trans.sv_SE = apps/i2psnark/locale/messages_sv.po
trans.vi = apps/i2psnark/locale/messages_vi.po
trans.zh_CN = apps/i2psnark/locale/messages_zh.po
[I2P.susidns]
@@ -40,7 +51,9 @@ trans.de = apps/susidns/locale/messages_de.po
trans.es = apps/susidns/locale/messages_es.po
trans.fr = apps/susidns/locale/messages_fr.po
trans.nl = apps/susidns/locale/messages_nl.po
trans.pl = apps/susidns/locale/messages_pl.po
trans.ru = apps/susidns/locale/messages_ru.po
trans.sv_SE = apps/susidns/locale/messages_sv.po
trans.zh_CN = apps/susidns/locale/messages_zh.po
[I2P.desktopgui]
@@ -49,9 +62,14 @@ source_lang = en
trans.ar = apps/desktopgui/locale/messages_ar.po
trans.de = apps/desktopgui/locale/messages_de.po
trans.es = apps/desktopgui/locale/messages_es.po
trans.fi = apps/desktopgui/locale/messages_fi.po
trans.fr = apps/desktopgui/locale/messages_fr.po
trans.it = apps/desktopgui/locale/messages_it.po
trans.nl = apps/desktopgui/locale/messages_nl.po
trans.pl = apps/desktopgui/locale/messages_pl.po
trans.ru = apps/desktopgui/locale/messages_ru.po
trans.sv_SE = apps/desktopgui/locale/messages_sv.po
trans.vi = apps/desktopgui/locale/messages_vi.po
trans.zh_CN = apps/desktopgui/locale/messages_zh.po
[I2P.susimail]
@@ -61,6 +79,10 @@ trans.de = apps/susimail/locale/messages_de.po
trans.es = apps/susimail/locale/messages_es.po
trans.fr = apps/susimail/locale/messages_fr.po
trans.nl = apps/susimail/locale/messages_nl.po
trans.sv_SE = apps/susimail/locale/messages_sv.po
trans.pl = apps/susimail/locale/messages_pl.po
trans.vi = apps/susimail/locale/messages_vi.po
trans.zh_CN = apps/susimail/locale/messages_zh.po
[main]
host = http://www.transifex.net

View File

@@ -1,4 +1,4 @@
Headless I2P installation instructions
Headless (console mode) I2P installation instructions
1) java -jar i2pinstall.exe -console (you've already done this)
@@ -6,9 +6,9 @@ This will run the installer in text mode, including running the postinstall.sh
script. After that, you may run 'sh i2prouter start'
which will start the router and attempt to launch a browser.
If you do not have an X server running, the browser launch will probably fail, and
If you do not have an X server running, the browser launch may fail, and
you may use:
lynx http://localhost:7657/index.jsp
lynx http://localhost:7657/
to configure the router.
If you're having trouble, swing by http://forum.i2p2.de/, check the
@@ -24,22 +24,22 @@ edit the files i2prouter (Linux) and wrapper.config (Linux and Windows)
where there are comments labeled "PORTABLE". Do this before you
run I2P for the first time.
To run I2P explicitly:
To start I2P:
(*nix): sh i2prouter start
(win*): I2P.exe
(Platforms unsupported by the wrapper - PPC, ARM, etc): sh runplain.sh
(non-x86 platforms PPC, ARM, etc): sh runplain.sh
To stop the router (gracefully):
lynx http://localhost:7657/configservice.jsp ("Shutdown gracefully")
To stop I2P (gracefully):
lynx http://localhost:7657/summaryframe (click "Shutdown")
To stop the router (immediately):
To stop I2P immediately:
sh i2prouter stop
To uninstall I2P:
rm -rf $i2pInstallDir
rm -rf $I2PInstallDir ~/.i2p
Supported JVMs:
Windows: Latest available from http://java.sun.com/ (1.5+ supported)
Linux: Latest available from http://java.sun.com/ (1.5+ supported)
FreeBSD: Sun 1.5-compatible (NIO required)
various: http://www.kaffe.org/ Sun 1.5-compatible (NIO required)
Windows: Latest available from http://java.com/download (1.5+ supported)
Linux: Latest available from http://java.com/download (1.5+ supported)
FreeBSD: 1.5-compatible (NIO required)
Other operating systems and JVMs: See http://trac.i2p2.de/wiki/java

View File

@@ -1,8 +1,8 @@
I2P source installation instructions
Prerequisites to build from source:
Java SDK (preferably Sun) 1.5.0 or higher (1.6 recommended)
The SDK must have Pack200 support (java.util.jar.Pack200)
Java SDK (preferably Oracle/Sun or OpenJDK) 1.6.0 or higher
Non-linux operating systems and JVMs: See http://trac.i2p2.de/wiki/java
Apache Ant 1.7.0 or higher
Optional, For multilanguage support: The xgettext, msgfmt, and msgmerge tools installed
from the GNU gettext package http://www.gnu.org/software/gettext/
@@ -24,10 +24,24 @@ From there, you can run the headless (console mode) installer:
Or run the GUI installer:
java -jar i2pinstall.exe
Or move the update file into an existing installation directory and restart.
Or move the i2pupdate.zip file into an existing installation directory and restart.
To start I2P:
(*nix): sh i2prouter start
(win*): I2P.exe
(non-x86 platforms PPC, ARM, etc): sh runplain.sh
To stop I2P (gracefully):
lynx http://localhost:7657/summaryframe (click "Shutdown")
To stop I2P immediately:
sh i2prouter stop
To uninstall I2P:
rm -rf $I2PInstallDir ~/.i2p
Supported JVMs:
Windows: Latest available from http://java.sun.com/ (1.5+ supported)
Linux: Latest available from http://java.sun.com/ (1.5+ supported)
FreeBSD: Sun 1.5-compatible (NIO required)
various: http://www.kaffe.org/ Sun 1.5-compatible (NIO required)
Windows: Latest available from http://java.com/download (1.5+ supported)
Linux: Latest available from http://java.com/download (1.5+ supported)
FreeBSD: 1.5-compatible (NIO required)
Other operating systems and JVMs: See http://trac.i2p2.de/wiki/java

View File

@@ -29,7 +29,7 @@ POSSIBILITY OF SUCH DAMAGES.
LICENSES
--------
Core:
Core (i2p.jar):
Public domain except as listed below:
ElGamal and DSA code:
@@ -56,10 +56,6 @@ Public domain except as listed below:
Copyright (C) 2001, 2002, Free Software Foundation, Inc.
See licenses/LICENSE-LGPLv2.1.txt
GMP 4.1.3:
Copyright 1991, 1996, 1999, 2000 Free Software Foundation, Inc.
See licenses/LICENSE-LGPLv2.1.txt
HashCash code:
Copyright 2006 Gregory Rubin grrubin@gmail.com
See licenses/LICENSE-HashCash.txt
@@ -72,8 +68,12 @@ Public domain except as listed below:
Contains some code Copyright 2006 Sun Microsystems, Inc.
See licenses/LICENSE-InstallCert.txt
BlockFile:
Copyright (c) 2006, Matthew Estes
See licenses/LICENSE-BlockFile.txt
Router:
Router (router.jar):
Public domain except as listed below:
UPnP.java:
From freenet
@@ -127,11 +127,22 @@ Installer:
Wrapper 3.1.1:
Copyright (c) 1999, 2004 Tanuki Software
Java Service Wrapper Community Edition 32-bit 3.5.9:
Copyright (C) 1999-2011 Tanuki Software, Ltd. All Rights Reserved.
See licenses/LICENSE-Wrapper.txt
Jbigi Libraries (jbigi.jar):
JNI code public domain.
GMP 4.1.3 / 4.1.4:
Copyright 1991, 1996, 1999, 2000 Free Software Foundation, Inc.
See licenses/LICENSE-LGPLv2.1.txt
GMP 4.3.2 / 5.0.2:
Copyright 1991, 1996, 1999, 2000, 2007 Free Software Foundation, Inc.
See licenses/LICENSE-LGPLv3.txt
Applications:
@@ -141,7 +152,7 @@ Applications:
BOB:
Copyright (C) sponge
DWTFYWTPL
See licenses/COPYING-BOB.txt
I2PSnark:
Copyright (C) 2003 Mark J. Wielaard
@@ -164,13 +175,13 @@ Applications:
By welterde.
See licenses/LICENSE-GPLv2.txt
Jetty 5.1.12:
Jetty 5.1.15:
Copyright 2000-2004 Mort Bay Consulting Pty. Ltd.
See licenses/LICENSE-Apache1.1.txt
See licenses/LICENSE-Apache2.0.txt
See licenses/NOTICE-Commons-Logging.txt
JRobin 1.4.0:
JRobin 1.5.9.1:
See licenses/LICENSE-LGPLv2.1.txt
Ministreaming Lib:
@@ -190,6 +201,10 @@ Applications:
Copyright (c) 2003 Direct Information Pvt. Ltd. All Rights Reserved.
See licenses/LICENSE-GeoIP.txt
Router Console and I2PSnark themes:
"Man with hat over face" & related images licensed under a Creative Commons 2.0 license.
Original photos by Florian Kuhlmann. http://www.flickr.com/photos/floriankuhlmann/3117758155
SAM:
Public domain.
@@ -199,6 +214,8 @@ Applications:
SusiDNS:
Copyright (C) 2005 <susi23@mail.i2p>
See licenses/LICENSE-GPLv2.txt
Uses Apache Jakarta Standard Tag Library 1.1.2:
See licenses/LICENSE-Apache2.0.txt
SusiMail:
Copyright (C) 2004-2005 <susi23@mail.i2p>
@@ -223,6 +240,10 @@ distributions. See the source package for the additional license information.
Atalk:
Public domain
BOB Demos:
Copyright (C) sponge
DWTFYWTPL
Desktopgui
Copyright (c) Mathias De Maré
See apps/desktopgui/LICENSE
@@ -240,7 +261,3 @@ distributions. See the source package for the additional license information.
SAM Python Library:
Public domain.
I2PSnark/Console themes:
"Man with hat over face" & related images licensed under a Creative Commons 2.0 license.
Original photos by Florian Kuhlmann. http://www.flickr.com/photos/floriankuhlmann/3117758155

View File

@@ -1,9 +1,9 @@
Prerequisites to build from source:
Java SDK (preferably Sun) 1.5.0 or higher (1.6 recommended)
The SDK must have Pack200 support (java.util.jar.Pack200)
Java SDK (preferably Oracle/Sun or OpenJDK) 1.6.0 or higher
Non-linux operating systems and JVMs: See http://trac.i2p2.de/wiki/java
Apache Ant 1.7.0 or higher
Optional, For multilanguage support: The xgettext, msgfmt, and msgmerge tools installed
from the GNU gettext package http://www.gnu.org/software/gettext/
from the GNU gettext package http://www.gnu.org/software/gettext/
To build:
ant pkg
@@ -11,7 +11,7 @@ To build:
See INSTALL.txt or http://www.i2p2.de/download.html for installation instructions.
Documentation:
http://www.i2p2.de/
http://www.i2p2.de/how
API: run 'ant javadoc' then start at build/javadoc/index.html
Latest release:

View File

@@ -1,19 +0,0 @@
<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
package="net.i2p.router"
android:versionCode="1"
android:versionName="1.0.0">
<uses-permission android:name="android.permission.INTERNET" />
<!-- 3 = 1.5, 2 = 1.1, 1 = 1.0; would probably work with 1 but don't have a 1.0 SDK to test against -->
<uses-sdk android:minSdkVersion="2" />
<application android:label="@string/app_name">
<activity android:name=".I2PAndroid"
android:label="@string/app_name"
android:launchMode="singleTask" >
<intent-filter>
<action android:name="android.intent.action.MAIN" />
<category android:name="android.intent.category.LAUNCHER" />
</intent-filter>
</activity>
</application>
</manifest>

View File

@@ -1,38 +0,0 @@
These instructions are for a recent Android SDK (1.6 or later)..
Should also still work with a 1.5 SDK.
The build file is not compatible with the 1.1 SDK any more.
#Download the SDK from http://developer.android.com/sdk/index.html
#Unzip the android SDK in ../../
#So then the android tools will be in ../../android-sdk-linux_86/tools/
#
# now go to the available packages tab, check the box and click refresh,
# and download an SDK Platform
# Since I2P is configured to run on 1.1 or higher
# (API 2) download that one. Otherwise you must change the
# target in default.properties from android-2 to andriod-x
# where x is the API version.
# create a file local.properties with the following line:
# sdk-location=/path/to/your/android-sdk-linux_86
#then build the android apk file:
ant debug
# Create the android 1.1 (API 2) virtual device
# (don't make a custom hardware profile)
# A AVD created with the 1.5 SDK will not work with the newer tools
../../android-sdk-linux_86/tools/android create avd --name i2p --target 2
#then run the emulator:
../../android-sdk-linux_86/tools/emulator -avd i2p &
#then wait a couple minutes until the emulator is up
#then install the I2P app
ant install
#then run the debugger
../../android-sdk-linux_86/tools/ddms &
#to rebuild and reinstall to emulator:
ant reinstall

View File

@@ -1,356 +0,0 @@
<?xml version="1.0" encoding="UTF-8"?>
<project name=".I2PAndroid" default="help">
<!-- The local.properties file is created and updated by the 'android' tool.
It contain the path to the SDK. It should *NOT* be checked in in Version
Control Systems. -->
<property file="local.properties"/>
<!-- The build.properties file can be created by you and is never touched
by the 'android' tool. This is the place to change some of the default property values
used by the Ant rules.
Here are some properties you may want to change/update:
application-package
the name of your application package as defined in the manifest. Used by the
'uninstall' rule.
source-folder
the name of the source folder. Default is 'src'.
out-folder
the name of the output folder. Default is 'bin'.
Properties related to the SDK location or the project target should be updated
using the 'android' tool with the 'update' action.
This file is an integral part of the build system for your application and
should be checked in in Version Control Systems.
-->
<property file="build.properties"/>
<!-- The default.properties file is created and updated by the 'android' tool, as well
as ADT.
This file is an integral part of the build system for your application and
should be checked in in Version Control Systems. -->
<property file="default.properties"/>
<!-- Custom Android task to deal with the project target, and import the proper rules.
This requires ant 1.6.0 or above. -->
<path id="android.antlibs">
<pathelement path="${sdk-location}/tools/lib/anttasks.jar" />
<pathelement path="${sdk-location}/tools/lib/sdklib.jar" />
<pathelement path="${sdk-location}/tools/lib/androidprefs.jar" />
<pathelement path="${sdk-location}/tools/lib/apkbuilder.jar" />
<pathelement path="${sdk-location}/tools/lib/jarutils.jar" />
</path>
<taskdef name="setup"
classname="com.android.ant.SetupTask"
classpathref="android.antlibs"/>
<!-- Execute the Android Setup task that will setup some properties specific to the target,
and import the rules files.
To customize the rules, copy/paste them below the task, and disable import by setting
the import attribute to false:
<setup import="false" />
This will ensure that the properties are setup correctly but that your customized
targets are used.
-->
<setup import="false" />
<!--
================================================================================
New I2P rules
================================================================================
-->
<target name="buildrouter" depends="dirs" >
<!-- build router and core -->
<ant dir=".." target="buildrouter" />
<!-- router -->
<copy file="../build/router.jar" todir="${external-libs-folder}" />
<!-- core -->
<mkdir dir="tmp" />
<unjar src="../build/i2p.jar" dest="tmp/" />
<delete file="tmp/net/i2p/util/LogWriter.class" />
<!-- org.bouncycastle.crypto already in android
but we need a little trickery because our HMac is incompatible...
and the libs aren't in the SDK to compile against??? -->
<jar destfile="${external-libs-folder}/crypto.jar" >
<fileset dir="tmp/" >
<include name="org/bouncycastle/crypto/Digest.class" />
<include name="org/bouncycastle/crypto/Mac.class" />
<include name="org/bouncycastle/crypto/digests/GeneralDigest.class" />
<include name="org/bouncycastle/crypto/digests/MD5Digest.class" />
</fileset>
</jar>
<delete>
<fileset dir="tmp/" >
<include name="org/bouncycastle/crypto/Digest.class" />
<include name="org/bouncycastle/crypto/Mac.class" />
<include name="org/bouncycastle/crypto/digests/GeneralDigest.class" />
<include name="org/bouncycastle/crypto/digests/MD5Digest.class" />
</fileset>
</delete>
<!--
<delete dir="tmp/org/bouncycastle/" />
<delete file="tmp/net/i2p/crypto/HMACGenerator.class" />
-->
<delete file="tmp/org/bouncycastle/" />
<!-- lots of unneeded stuff could be deleted here -->
<jar destfile="${external-libs-folder}/i2p.jar" basedir="tmp/" />
<!-- some resources -->
<mkdir dir="res/drawable/" />
<copy file="../installer/resources/themes/console/images/i2plogo.png" todir="res/drawable/" />
<copy file="../installer/resources/blocklist.txt" tofile="res/raw/blocklist_txt" />
</target>
<target name="hackcleanup">
<delete file="${external-libs-folder}/crypto.jar" />
</target>
<!-- fix for property name change sometime after SDK 1.5 -->
<property name="android-jar" value="${android.jar}" />
<property name="android-aidl" value="${android.aidl}" />
<!--
================================================================================
From here down copied from SDK platforms/android-1.1/templates/android_rules.xml
and then modified
================================================================================
-->
<!--
This rules file is meant to be imported by the custom Ant task:
com.android.ant.AndroidInitTask
The following properties are put in place by the importing task:
android-jar, android-aidl, aapt, aidl, and dx
Additionnaly, the task sets up the following classpath reference:
android.target.classpath
This is used by the compiler task as the boot classpath.
-->
<!-- Custom tasks -->
<taskdef name="aaptexec"
classname="com.android.ant.AaptExecLoopTask"
classpathref="android.antlibs"/>
<taskdef name="apkbuilder"
classname="com.android.ant.ApkBuilderTask"
classpathref="android.antlibs"/>
<!-- Properties -->
<property name="android-tools" value="${sdk-location}/tools" />
<!-- Input directories -->
<property name="source-folder" value="src" />
<property name="gen-folder" value="gen" />
<property name="resource-folder" value="res" />
<property name="asset-folder" value="assets" />
<property name="source-location" value="${basedir}/${source-folder}" />
<!-- folder for the 3rd party java libraries -->
<property name="external-libs-folder" value="libs" />
<!-- folder for the native libraries -->
<property name="native-libs-folder" value="libs" />
<!-- Output directories -->
<property name="gen-folder" value="gen" />
<property name="out-folder" value="bin" />
<property name="out-classes" value="${out-folder}/classes" />
<property name="out-classes-location" value="${basedir}/${out-classes}"/>
<!-- out folders for a parent project if this project is an instrumentation project -->
<property name="main-out-folder" value="../${out-folder}" />
<property name="main-out-classes" value="${main-out-folder}/classes"/>
<!-- Intermediate files -->
<property name="dex-file" value="classes.dex" />
<property name="intermediate-dex" value="${out-folder}/${dex-file}" />
<!-- dx does not properly support incorrect / or \ based on the platform
and Ant cannot convert them because the parameter is not a valid path.
Because of this we have to compute different paths depending on the platform. -->
<condition property="intermediate-dex-location"
value="${basedir}\${intermediate-dex}"
else="${basedir}/${intermediate-dex}" >
<os family="windows"/>
</condition>
<!-- The final package file to generate -->
<property name="out-debug-package" value="${out-folder}/${ant.project.name}-debug.apk"/>
<!-- Tools -->
<condition property="exe" value=".exe" else=""><os family="windows"/></condition>
<property name="adb" value="${android-tools}/adb${exe}"/>
<!-- rules -->
<!-- Create the output directories if they don't exist yet. -->
<target name="dirs">
<echo>Creating output directories if needed...</echo>
<mkdir dir="${resource-folder}" />
<mkdir dir="${external-libs-folder}" />
<mkdir dir="${gen-folder}" />
<mkdir dir="${out-folder}" />
<mkdir dir="${out-classes}" />
</target>
<!-- Generate the R.java file for this project's resources. -->
<target name="resource-src" depends="dirs">
<echo>Generating R.java / Manifest.java from the resources...</echo>
<exec executable="${aapt}" failonerror="true">
<arg value="package" />
<arg value="-m" />
<arg value="-J" />
<arg path="${gen-folder}" />
<arg value="-M" />
<arg path="AndroidManifest.xml" />
<arg value="-S" />
<arg path="${resource-folder}" />
<arg value="-I" />
<arg path="${android-jar}" />
</exec>
</target>
<!-- Generate java classes from .aidl files. -->
<target name="aidl" depends="dirs">
<echo>Compiling aidl files into Java classes...</echo>
<apply executable="${aidl}" failonerror="true">
<arg value="-p${android-aidl}" />
<arg value="-I${source-folder}" />
<arg value="-o${gen-folder}" />
<fileset dir="${source-folder}">
<include name="**/*.aidl"/>
</fileset>
</apply>
</target>
<!-- Compile this project's .java files into .class files. -->
<!-- I2P add buildrouter -->
<target name="compile" depends="buildrouter, resource-src, aidl">
<javac encoding="ascii" target="1.5" debug="true" extdirs=""
destdir="${out-classes}"
bootclasspathref="android.target.classpath">
<src path="${source-folder}" />
<src path="${gen-folder}" />
<classpath>
<fileset dir="${external-libs-folder}" includes="*.jar"/>
<pathelement path="${main-out-classes}"/>
</classpath>
</javac>
</target>
<!-- Convert this project's .class files into .dex files. -->
<!-- I2P add hackcleanup -->
<target name="dex" depends="compile, hackcleanup">
<echo>Converting compiled files and external libraries into ${out-folder}/${dex-file}...</echo>
<apply executable="${dx}" failonerror="true" parallel="true">
<!-- I2P this is a bad sign that we need this -->
<arg value="-JXmx256m" />
<arg value="--dex" />
<arg value="--output=${intermediate-dex-location}" />
<arg path="${out-classes-location}" />
<fileset dir="${external-libs-folder}" includes="*.jar"/>
</apply>
</target>
<!-- Put the project's resources into the output package file
This actually can create multiple resource package in case
Some custom apk with specific configuration have been
declared in default.properties.
-->
<target name="package-resources">
<echo>Packaging resources</echo>
<aaptexec executable="${aapt}"
command="package"
manifest="AndroidManifest.xml"
resources="${resource-folder}"
assets="${asset-folder}"
androidjar="${android-jar}"
outfolder="${out-folder}"
basename="${ant.project.name}" />
</target>
<!-- Package the application and sign it with a debug key.
This is the default target when building. It is used for debug. -->
<target name="debug" depends="dex, package-resources">
<apkbuilder
outfolder="${out-folder}"
basename="${ant.project.name}"
signed="true"
verbose="false">
<file path="${intermediate-dex}" />
<sourcefolder path="${source-folder}" />
<jarfolder path="${external-libs-folder}" />
<nativefolder path="${native-libs-folder}" />
</apkbuilder>
</target>
<!-- Package the application without signing it.
This allows for the application to be signed later with an official publishing key. -->
<target name="release" depends="dex, package-resources">
<apkbuilder
outfolder="${out-folder}"
basename="${ant.project.name}"
signed="false"
verbose="false">
<file path="${intermediate-dex}" />
<sourcefolder path="${source-folder}" />
<jarfolder path="${external-libs-folder}" />
<nativefolder path="${native-libs-folder}" />
</apkbuilder>
<echo>All generated packages need to be signed with jarsigner before they are published.</echo>
</target>
<!-- Install the package on the default emulator -->
<target name="install" depends="debug">
<echo>Installing ${out-debug-package} onto default emulator...</echo>
<exec executable="${adb}" failonerror="true">
<arg value="install" />
<arg path="${out-debug-package}" />
</exec>
</target>
<target name="reinstall" depends="debug">
<echo>Installing ${out-debug-package} onto default emulator...</echo>
<exec executable="${adb}" failonerror="true">
<arg value="install" />
<arg value="-r" />
<arg path="${out-debug-package}" />
</exec>
</target>
<!-- Uinstall the package from the default emulator -->
<target name="uninstall">
<echo>Uninstalling ${application-package} from the default emulator...</echo>
<exec executable="${adb}" failonerror="true">
<arg value="uninstall" />
<arg path="${application-package}" />
</exec>
</target>
<target name="help">
<!-- displays starts at col 13
|13 80| -->
<echo>Android Ant Build. Available targets:</echo>
<echo> help: Displays this help.</echo>
<echo> debug: Builds the application and sign it with a debug key.</echo>
<echo> release: Builds the application. The generated apk file must be</echo>
<echo> signed before it is published.</echo>
<echo> install: Installs the debug package onto a running emulator or</echo>
<echo> device. This can only be used if the application has </echo>
<echo> not yet been installed.</echo>
<echo> reinstall: Installs the debug package on a running emulator or</echo>
<echo> device that already has the application.</echo>
<echo> The signatures must match.</echo>
<echo> uninstall: uninstall the application from a running emulator or</echo>
<echo> device.</echo>
</target>
</project>

View File

@@ -1,11 +0,0 @@
# This file is automatically generated by Android Tools.
# Do not modify this file -- YOUR CHANGES WILL BE ERASED!
#
# This file must be checked in Version Control Systems.
#
# To customize properties used by the Ant build system use,
# "build.properties", and override values to adapt the script to your
# project structure.
# Project target.
target=android-2

View File

@@ -1,18 +0,0 @@
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:orientation="vertical"
android:layout_width="fill_parent"
android:layout_height="fill_parent"
>
<TextView
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:text="Hello World, I2PAndroid"
/>
<ImageView
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:src="@drawable/i2plogo"
/>
</LinearLayout>

View File

@@ -1,3 +0,0 @@
logger.defaultLevel=INFO
logger.record.net.i2p.router.transport.FIFOBandwidthRefiller=ERROR
logger.record.net.i2p.stat.Rate=ERROR

View File

@@ -1,22 +0,0 @@
# initial router.config
# temp directory
i2p.dir.temp=/data/data/net.i2p.router/files/tmp
i2p.dir.pid=/data/data/net.i2p.router/files/tmp
# save memory
prng.buffers=2
router.decayingBloomFilterM=20
stat.full=false
i2np.udp.maxConnections=30
# no I2CP
i2p.dummyClientFacade=true
# for now
#i2np.ntcp.enable=false
#
# UDP crashes the JVM, don't know why
#
i2np.udp.enable=false
# no COMM at all!!!
#i2p.vmCommSystem=true
# not on android
i2np.upnp.enable=false
routerconsole.geoip.enable=false

View File

@@ -1,4 +0,0 @@
<?xml version="1.0" encoding="utf-8"?>
<resources>
<string name="app_name">I2PAndroid</string>
</resources>

View File

@@ -1,142 +0,0 @@
package net.i2p.router;
import android.app.Activity;
import android.content.Context;
import android.content.res.Resources;
import android.content.res.Resources.NotFoundException;
import android.os.Bundle;
import java.io.File;
import java.io.FileOutputStream;
import java.io.InputStream;
import java.io.IOException;
import java.util.List;
import net.i2p.router.Router;
import net.i2p.router.RouterLaunch;
// import net.i2p.util.NativeBigInteger;
public class I2PAndroid extends Activity
{
static Context _context;
private static final String DIR = "/data/data/net.i2p.router/files";
/** Called when the activity is first created. */
@Override
public void onCreate(Bundle savedInstanceState)
{
super.onCreate(savedInstanceState);
setContentView(R.layout.main);
_context = this; // Activity extends Context
debugStuff();
initialize();
// 300ms per run
// 5x slower than java on my server and 50x slower than native on my server
// NativeBigInteger.main(null);
}
public void onRestart()
{
System.err.println("onRestart called");
super.onRestart();
}
public void onStart()
{
System.err.println("onStart called");
super.onStart();
RouterLaunch.main(null);
System.err.println("Router.main finished");
}
public void onResume()
{
System.err.println("onResume called");
super.onResume();
}
public void onPause()
{
System.err.println("onPause called");
super.onPause();
}
public void onStop()
{
System.err.println("onStop called");
super.onStop();
// from routerconsole ContextHelper
List contexts = RouterContext.listContexts();
if ( (contexts == null) || (contexts.isEmpty()) )
throw new IllegalStateException("No contexts. This is usually because the router is either starting up or shutting down.");
RouterContext ctx = (RouterContext)contexts.get(0);
// shutdown() doesn't return so use shutdownGracefully()
ctx.router().shutdownGracefully(Router.EXIT_HARD);
System.err.println("shutdown complete");
}
public void onDestroy()
{
System.err.println("onDestroy called");
super.onDestroy();
}
public static Context getContext() {
return _context;
}
private void debugStuff() {
System.err.println("java.io.tmpdir" + ": " + System.getProperty("java.io.tmpdir"));
System.err.println("java.vendor" + ": " + System.getProperty("java.vendor"));
System.err.println("java.version" + ": " + System.getProperty("java.version"));
System.err.println("os.arch" + ": " + System.getProperty("os.arch"));
System.err.println("os.name" + ": " + System.getProperty("os.name"));
System.err.println("os.version" + ": " + System.getProperty("os.version"));
System.err.println("user.dir" + ": " + System.getProperty("user.dir"));
System.err.println("user.home" + ": " + System.getProperty("user.home"));
System.err.println("user.name" + ": " + System.getProperty("user.name"));
}
private void initialize() {
// Until we can edit the router.config on the device,
// copy it from the resource every time.
// File f = new I2PFile("router.config");
// if (!f.exists()) {
copyResourceToFile(R.raw.router_config, "router.config");
copyResourceToFile(R.raw.logger_config, "logger.config");
copyResourceToFile(R.raw.blocklist_txt, "blocklist.txt");
// }
// Set up the locations so Router and WorkingDir can find them
System.setProperty("i2p.dir.base", DIR);
System.setProperty("i2p.dir.config", DIR);
System.setProperty("wrapper.logfile", DIR + "/wrapper.log");
}
private void copyResourceToFile(int resID, String f) {
InputStream in = null;
FileOutputStream out = null;
System.err.println("Creating file " + f + " from resource");
byte buf[] = new byte[4096];
try {
// Context methods
in = getResources().openRawResource(resID);
out = openFileOutput(f, 0);
int read = 0;
while ( (read = in.read(buf)) != -1)
out.write(buf, 0, read);
} catch (IOException ioe) {
} catch (Resources.NotFoundException nfe) {
} finally {
if (in != null) try { in.close(); } catch (IOException ioe) {}
if (out != null) try { out.close(); } catch (IOException ioe) {}
}
}
}

View File

@@ -1,163 +0,0 @@
package net.i2p.util;
/*
* public domain
*
*/
import java.io.File;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.OutputStream;
import java.util.List;
/**
* bridge to android logging
*
* @author zzz
*/
class LogWriter implements Runnable {
private final static long CONFIG_READ_ITERVAL = 10 * 1000;
private long _lastReadConfig = 0;
private long _numBytesInCurrentFile = 0;
private OutputStream _currentOut; // = System.out
private int _rotationNum = -1;
private String _logFilenamePattern;
private File _currentFile;
private LogManager _manager;
private boolean _write;
private LogWriter() { // nop
}
public LogWriter(LogManager manager) {
_manager = manager;
}
public void stopWriting() {
_write = false;
}
public void run() {
_write = true;
try {
while (_write) {
flushRecords();
rereadConfig();
}
System.err.println("Done writing");
} catch (Exception e) {
System.err.println("Error writing the logs: " + e.getMessage());
e.printStackTrace();
}
}
public void flushRecords() { flushRecords(true); }
public void flushRecords(boolean shouldWait) {
try {
List records = _manager._removeAll();
if (records == null) return;
for (int i = 0; i < records.size(); i++) {
LogRecord rec = (LogRecord) records.get(i);
writeRecord(rec);
}
} catch (Throwable t) {
t.printStackTrace();
} finally {
if (shouldWait) {
try {
synchronized (this) {
this.wait(10*1000);
}
} catch (InterruptedException ie) { // nop
}
}
}
}
public String currentFile() {
return _currentFile != null ? _currentFile.getAbsolutePath() : "uninitialized";
}
private void rereadConfig() {
long now = Clock.getInstance().now();
if (now - _lastReadConfig > CONFIG_READ_ITERVAL) {
_manager.rereadConfig();
_lastReadConfig = now;
}
}
private void writeRecord(LogRecord rec) {
if (rec.getThrowable() == null)
log(rec.getPriority(), rec.getSource(), rec.getSourceName(), rec.getThreadName(), rec.getMessage());
else
log(rec.getPriority(), rec.getSource(), rec.getSourceName(), rec.getThreadName(), rec.getMessage(), rec.getThrowable());
}
public void log(int priority, Class src, String name, String threadName, String msg) {
if (src != null) {
String tag = src.getName();
int dot = tag.lastIndexOf(".");
if (dot >= 0)
tag = tag.substring(dot + 1);
android.util.Log.println(toAndroidLevel(priority),
tag,
'[' + threadName + "] " + msg);
} else if (name != null)
android.util.Log.println(toAndroidLevel(priority),
name,
'[' + threadName + "] " + msg);
else
android.util.Log.println(toAndroidLevel(priority),
threadName, msg);
}
public void log(int priority, Class src, String name, String threadName, String msg, Throwable t) {
if (src != null) {
String tag = src.getName();
int dot = tag.lastIndexOf(".");
if (dot >= 0)
tag = tag.substring(dot + 1);
android.util.Log.println(toAndroidLevel(priority),
tag,
'[' + threadName + "] " + msg +
' ' + t.toString() + ' ' + android.util.Log.getStackTraceString(t));
} else if (name != null)
android.util.Log.println(toAndroidLevel(priority),
name,
'[' + threadName + "] " + msg +
' ' + t.toString() + ' ' + android.util.Log.getStackTraceString(t));
else
android.util.Log.println(toAndroidLevel(priority),
threadName,
msg + ' ' + t.toString() + ' ' + android.util.Log.getStackTraceString(t));
}
private static int toAndroidLevel(int level) {
switch (level) {
case Log.DEBUG:
return android.util.Log.DEBUG;
case Log.INFO:
return android.util.Log.INFO;
case Log.WARN:
return android.util.Log.WARN;
case Log.ERROR:
case Log.CRIT:
default:
return android.util.Log.ERROR;
}
}
private static final String replace(String pattern, int num) {
char c[] = pattern.toCharArray();
StringBuffer buf = new StringBuffer();
for (int i = 0; i < c.length; i++) {
if ( (c[i] != '#') && (c[i] != '@') )
buf.append(c[i]);
else
buf.append(num);
}
return buf.toString();
}
}

View File

@@ -71,6 +71,7 @@
nbproject/build-impl.xml file.
-->
<target depends="jar" description="Build BOB into a SINGLE JAR." name="onejar">
<!-- Make needed working dirs -->
<mkdir dir="${dist.dir}/lib" />

View File

@@ -26,7 +26,7 @@ dist.dir=dist
dist.jar=${dist.dir}/BOB.jar
dist.javadoc.dir=${dist.dir}/javadoc
endorsed.classpath=
excludes=
excludes=**/*.html,**/*.txt
file.reference.build-javadoc=../../i2p.i2p/build/javadoc
file.reference.i2p.jar=../../core/java/build/i2p.jar
file.reference.i2ptunnel.jar=../i2ptunnel/java/build/i2ptunnel.jar

View File

@@ -51,6 +51,8 @@
<!-- unused for now, as we oddly ship addressbook as a .war -->
<target name="jar" depends="compile, changes">
<jar basedir="${build}" destfile="${dist}/${jar}">
<!-- set if unset -->
<property name="workspace.changes" value="" />
<manifest>
<attribute name="Main-Class" value="addressbook.Daemon"/>
<attribute name="Build-Date" value="${build.timestamp}" />
@@ -67,6 +69,8 @@
<copy todir="${dist}/tmp/WEB-INF/classes">
<fileset dir="${build}"/>
</copy>
<!-- set if unset -->
<property name="workspace.changes.tr" value="" />
<war basedir="${dist}/tmp" webxml="web.xml" destfile="${dist}/${war}">
<manifest>
<attribute name="Build-Date" value="${build.timestamp}" />
@@ -81,9 +85,17 @@
<uptodate property="war.uptodate" targetfile="${dist}/${war}">
<srcfiles dir= "." includes="${build}/**/*.class, web.xml"/>
</uptodate>
<condition property="shouldListChanges" >
<and>
<not>
<isset property="war.uptodate" />
</not>
<isset property="mtn.available" />
</and>
</condition>
</target>
<target name="changes">
<target name="changes" depends="warUpToDate" if="shouldListChanges" >
<exec executable="mtn" outputproperty="workspace.changes" errorproperty="mtn.error2" failifexecutionfails="false" >
<arg value="list" />
<arg value="changed" />

View File

@@ -23,12 +23,14 @@ package net.i2p.addressbook;
import java.io.File;
import java.io.IOException;
import java.util.Collections;
import java.util.HashMap;
import java.util.Iterator;
import java.util.Map;
import net.i2p.I2PAppContext;
import net.i2p.util.EepGet;
import net.i2p.util.SecureFile;
/**
* An address book for storing human readable names mapped to base64 i2p
@@ -40,11 +42,12 @@ import net.i2p.util.EepGet;
*/
class AddressBook {
private String location;
private Map addresses;
private final String location;
/** either addresses or subFile will be non-null, but not both */
private final Map<String, String> addresses;
private final File subFile;
private boolean modified;
private static final boolean DEBUG = false;
/**
* Construct an AddressBook from the contents of the Map addresses.
@@ -53,8 +56,10 @@ class AddressBook {
* A Map containing human readable addresses as keys, mapped to
* base64 i2p destinations.
*/
public AddressBook(Map addresses) {
public AddressBook(Map<String, String> addresses) {
this.addresses = addresses;
this.subFile = null;
this.location = null;
}
/*
@@ -82,6 +87,7 @@ class AddressBook {
}
*/
static final long MAX_SUB_SIZE = 3 * 1024 * 1024l; //about 5,000 hosts
/**
* Construct an AddressBook from the Subscription subscription. If the
* address book at subscription has not changed since the last time it was
@@ -90,33 +96,46 @@ class AddressBook {
*
* Yes, the EepGet fetch() is done in this constructor.
*
* This stores the subscription in a temporary file and does not read the whole thing into memory.
* An AddressBook created with this constructor may not be modified or written using write().
* It may be a merge source (an parameter for another AddressBook's merge())
* but may not be a merge target (this.merge() will throw an exception).
*
* @param subscription
* A Subscription instance pointing at a remote address book.
* @param proxyHost hostname of proxy
* @param proxyPort port number of proxy
*/
public AddressBook(Subscription subscription, String proxyHost, int proxyPort) {
File tmp = new File(I2PAppContext.getGlobalContext().getTempDir(), "addressbook.tmp");
Map<String, String> a = null;
File subf = null;
try {
File tmp = SecureFile.createTempFile("addressbook", null, I2PAppContext.getGlobalContext().getTempDir());
EepGet get = new EepGet(I2PAppContext.getGlobalContext(), true,
proxyHost, proxyPort, 0, -1l, MAX_SUB_SIZE, tmp.getAbsolutePath(), null,
subscription.getLocation(), true, subscription.getEtag(), subscription.getLastModified(), null);
if (get.fetch()) {
subscription.setEtag(get.getETag());
subscription.setLastModified(get.getLastModified());
subscription.setLastFetched(I2PAppContext.getGlobalContext().clock().now());
subf = tmp;
} else {
a = Collections.EMPTY_MAP;
tmp.delete();
}
} catch (IOException ioe) {
a = Collections.EMPTY_MAP;
}
this.addresses = a;
this.subFile = subf;
this.location = subscription.getLocation();
EepGet get = new EepGet(I2PAppContext.getGlobalContext(), true,
proxyHost, proxyPort, 0, -1l, MAX_SUB_SIZE, tmp.getAbsolutePath(), null,
subscription.getLocation(), true, subscription.getEtag(), subscription.getLastModified(), null);
if (get.fetch()) {
subscription.setEtag(get.getETag());
subscription.setLastModified(get.getLastModified());
subscription.setLastFetched(I2PAppContext.getGlobalContext().clock().now());
}
try {
this.addresses = ConfigParser.parse(tmp);
} catch (IOException exp) {
this.addresses = new HashMap();
}
tmp.delete();
}
/**
* Construct an AddressBook from the contents of the file at file. If the
* file cannot be read, construct an empty AddressBook
* file cannot be read, construct an empty AddressBook.
* This reads the entire file into memory.
* The resulting map is modifiable and may be a merge target.
*
* @param file
* A File pointing at a file with lines in the format
@@ -125,22 +144,38 @@ class AddressBook {
*/
public AddressBook(File file) {
this.location = file.toString();
Map<String, String> a;
try {
this.addresses = ConfigParser.parse(file);
a = ConfigParser.parse(file);
} catch (IOException exp) {
this.addresses = new HashMap();
a = new HashMap();
}
this.addresses = a;
this.subFile = null;
}
/**
* Return a Map containing the addresses in the AddressBook.
*
* @return A Map containing the addresses in the AddressBook, where the key
* is a human readable name, and the value is a base64 i2p
* destination.
* Return an iterator over the addresses in the AddressBook.
* @since 0.8.7
*/
public Map getAddresses() {
return this.addresses;
public Iterator<Map.Entry<String, String>> iterator() {
if (this.subFile != null)
return new ConfigIterator(this.subFile);
return this.addresses.entrySet().iterator();
}
/**
* Delete the temp file or clear the map.
* @since 0.8.7
*/
public void delete() {
if (this.subFile != null) {
this.subFile.delete();
} else if (this.addresses != null) {
try {
this.addresses.clear();
} catch (UnsupportedOperationException uoe) {}
}
}
/**
@@ -148,29 +183,32 @@ class AddressBook {
*
* @return A String representing either an abstract path, or a url,
* depending on how the instance was constructed.
* Will be null if created with the Map constructor.
*/
public String getLocation() {
return this.location;
}
/**
* Return a string representation of the contents of the AddressBook.
* Return a string representation of the origin of the AddressBook.
*
* @return A String representing the contents of the AddressBook.
* @return A String representing the origin of the AddressBook.
*/
@Override
public String toString() {
return this.addresses.toString();
if (this.location != null)
return "Book from " + this.location;
return "Map containing " + this.addresses.size() + " entries";
}
private static final int MIN_DEST_LENGTH = 516;
private static final int MAX_DEST_LENGTH = MIN_DEST_LENGTH + 100; // longer than any known cert type for now
/**
* Do basic validation of the hostname and dest
* Do basic validation of the hostname
* hostname was already converted to lower case by ConfigParser.parse()
*/
private static boolean valid(String host, String dest) {
public static boolean isValidKey(String host) {
return
host.endsWith(".i2p") &&
host.length() > 4 &&
@@ -194,8 +232,15 @@ class AddressBook {
(! host.equals("console.i2p")) &&
(! host.endsWith(".proxy.i2p")) &&
(! host.endsWith(".router.i2p")) &&
(! host.endsWith(".console.i2p")) &&
(! host.endsWith(".console.i2p"))
;
}
/**
* Do basic validation of the b64 dest, without bothering to instantiate it
*/
private static boolean isValidDest(String dest) {
return
// null cert ends with AAAA but other zero-length certs would be AA
((dest.length() == MIN_DEST_LENGTH && dest.endsWith("AA")) ||
(dest.length() > MIN_DEST_LENGTH && dest.length() <= MAX_DEST_LENGTH)) &&
@@ -216,18 +261,21 @@ class AddressBook {
* @param overwrite True to overwrite
* @param log
* The log to write messages about new addresses or conflicts to.
*
* @throws IllegalStateException if this was created with the Subscription constructor.
*/
public void merge(AddressBook other, boolean overwrite, Log log) {
Iterator otherIter = other.addresses.keySet().iterator();
if (this.addresses == null)
throw new IllegalStateException();
for (Iterator<Map.Entry<String, String>> iter = other.iterator(); iter.hasNext(); ) {
Map.Entry<String, String> entry = iter.next();
String otherKey = entry.getKey();
String otherValue = entry.getValue();
while (otherIter.hasNext()) {
String otherKey = (String) otherIter.next();
String otherValue = (String) other.addresses.get(otherKey);
if (valid(otherKey, otherValue)) {
if (isValidKey(otherKey) && isValidDest(otherValue)) {
if (this.addresses.containsKey(otherKey) && !overwrite) {
if (!this.addresses.get(otherKey).equals(otherValue)
&& log != null) {
if (DEBUG && log != null &&
!this.addresses.get(otherKey).equals(otherValue)) {
log.append("Conflict for " + otherKey + " from "
+ other.location
+ ". Destination in remote address book is "
@@ -252,8 +300,12 @@ class AddressBook {
*
* @param file
* The file to write the contents of this AddressBook too.
*
* @throws IllegalStateException if this was created with the Subscription constructor.
*/
public void write(File file) {
if (this.addresses == null)
throw new IllegalStateException();
if (this.modified) {
try {
ConfigParser.write(this.addresses, file);
@@ -267,8 +319,17 @@ class AddressBook {
* Write this AddressBook out to the file it was read from. Requires that
* AddressBook was constructed from a file on the local filesystem. If the
* file cannot be writen to, this method will silently fail.
*
* @throws IllegalStateException if this was not created with the File constructor.
*/
public void write() {
if (this.location == null || this.location.startsWith("http://"))
throw new IllegalStateException();
this.write(new File(this.location));
}
@Override
protected void finalize() {
delete();
}
}

View File

@@ -0,0 +1,144 @@
/*
* Copyright (c) 2004 Ragnarok
*
* Permission is hereby granted, free of charge, to any person obtaining a copy
* of this software and associated documentation files (the "Software"), to deal
* in the Software without restriction, including without limitation the rights
* to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
* copies of the Software, and to permit persons to whom the Software is
* furnished to do so, subject to the following conditions:
*
* The above copyright notice and this permission notice shall be included in
* all copies or substantial portions of the Software.
*
* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
* IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
* FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
* COPYRIGHT HOLDER BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER
* IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN
* CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
*/
package net.i2p.addressbook;
import java.io.BufferedReader;
import java.io.File;
import java.io.FileInputStream;
import java.io.IOException;
import java.io.InputStreamReader;
import java.util.Iterator;
import java.util.Map;
import java.util.NoSuchElementException;
/**
* A class to iterate through a hosts.txt or config file without
* reading the whole thing into memory.
* Keys are always converted to lower case.
*
* Callers should iterate all the way through or call close()
* to ensure the underlying stream is closed.
*
* @since 0.8.7
*/
class ConfigIterator implements Iterator<Map.Entry<String, String>> {
private BufferedReader input;
private ConfigEntry next;
/**
* A dummy iterator in which hasNext() is always false.
*/
public ConfigIterator() {}
/**
* An iterator over the key/value pairs in the file.
*/
public ConfigIterator(File file) {
try {
FileInputStream fileStream = new FileInputStream(file);
input = new BufferedReader(new InputStreamReader(fileStream));
} catch (IOException ioe) {}
}
public boolean hasNext() {
if (input == null)
return false;
if (next != null)
return true;
try {
String inputLine = input.readLine();
while (inputLine != null) {
inputLine = ConfigParser.stripComments(inputLine);
String[] splitLine = inputLine.split("=");
if (splitLine.length == 2) {
next = new ConfigEntry(splitLine[0].trim().toLowerCase(), splitLine[1].trim());
return true;
}
inputLine = input.readLine();
}
} catch (IOException ioe) {}
try { input.close(); } catch (IOException ioe) {}
input = null;
next = null;
return false;
}
public Map.Entry<String, String> next() {
if (!hasNext())
throw new NoSuchElementException();
Map.Entry<String, String> rv = next;
next = null;
return rv;
}
public void remove() {
throw new UnsupportedOperationException();
}
public void close() {
if (input != null) {
try { input.close(); } catch (IOException ioe) {}
}
}
@Override
protected void finalize() {
close();
}
/**
* The object returned by the iterator.
*/
private static class ConfigEntry implements Map.Entry<String, String> {
private final String key;
private final String value;
public ConfigEntry(String k, String v) {
key = k;
value = v;
}
public String getKey() {
return key;
}
public String getValue() {
return value;
}
public String setValue(String v) {
throw new UnsupportedOperationException();
}
public int hashCode() {
return key.hashCode() ^ value.hashCode();
}
public boolean equals(Object o) {
if (!(o instanceof Map.Entry))
return false;
Map.Entry e = (Map.Entry) o;
return key.equals(e.getKey()) && value.equals(e.getValue());
}
}
}

View File

@@ -30,7 +30,6 @@ import java.io.InputStreamReader;
import java.io.OutputStreamWriter;
import java.io.StringReader;
import java.util.HashMap;
import java.util.Iterator;
import java.util.LinkedList;
import java.util.List;
import java.util.Map;
@@ -85,8 +84,8 @@ class ConfigParser {
* if the BufferedReader cannot be read.
*
*/
public static Map parse(BufferedReader input) throws IOException {
Map result = new HashMap();
public static Map<String, String> parse(BufferedReader input) throws IOException {
Map<String, String> result = new HashMap();
String inputLine;
inputLine = input.readLine();
while (inputLine != null) {
@@ -111,11 +110,11 @@ class ConfigParser {
* @throws IOException
* if file cannot be read.
*/
public static Map parse(File file) throws IOException {
public static Map<String, String> parse(File file) throws IOException {
FileInputStream fileStream = new FileInputStream(file);
BufferedReader input = new BufferedReader(new InputStreamReader(
fileStream));
Map rv = ConfigParser.parse(input);
Map<String, String> rv = ConfigParser.parse(input);
try {
fileStream.close();
} catch (IOException ioe) {}
@@ -132,7 +131,7 @@ class ConfigParser {
* @throws IOException
* if file cannot be read.
*/
public static Map parse(String string) throws IOException {
public static Map<String, String> parse(String string) throws IOException {
StringReader stringReader = new StringReader(string);
BufferedReader input = new BufferedReader(stringReader);
return ConfigParser.parse(input);
@@ -149,14 +148,13 @@ class ConfigParser {
* @return A Map containing the key, value pairs from file, or if file
* cannot be read, map.
*/
public static Map parse(File file, Map map) {
Map result;
public static Map<String, String> parse(File file, Map<String, String> map) {
Map<String, String> result;
try {
result = ConfigParser.parse(file);
for (Iterator iter = map.keySet().iterator(); iter.hasNext(); ) {
String key = (String) iter.next();
if (!result.containsKey(key))
result.put(key, map.get(key));
for (Map.Entry<String, String> entry : map.entrySet()) {
if (!result.containsKey(entry.getKey()))
result.put(entry.getKey(), entry.getValue());
}
} catch (IOException exp) {
result = map;
@@ -177,9 +175,9 @@ class ConfigParser {
* @throws IOException
* if input cannot be read.
*/
public static List parseSubscriptions(BufferedReader input)
public static List<String> parseSubscriptions(BufferedReader input)
throws IOException {
List result = new LinkedList();
List<String> result = new LinkedList();
String inputLine = input.readLine();
while (inputLine != null) {
inputLine = ConfigParser.stripComments(inputLine).trim();
@@ -201,11 +199,11 @@ class ConfigParser {
* @throws IOException
* if file cannot be read.
*/
public static List parseSubscriptions(File file) throws IOException {
public static List<String> parseSubscriptions(File file) throws IOException {
FileInputStream fileStream = new FileInputStream(file);
BufferedReader input = new BufferedReader(new InputStreamReader(
fileStream));
List rv = ConfigParser.parseSubscriptions(input);
List<String> rv = ConfigParser.parseSubscriptions(input);
try {
fileStream.close();
} catch (IOException ioe) {}
@@ -221,7 +219,7 @@ class ConfigParser {
* @throws IOException
* if string cannot be read.
*/
public static List parseSubscriptions(String string) throws IOException {
public static List<String> parseSubscriptions(String string) throws IOException {
StringReader stringReader = new StringReader(string);
BufferedReader input = new BufferedReader(stringReader);
return ConfigParser.parseSubscriptions(input);
@@ -238,8 +236,8 @@ class ConfigParser {
* @return A List consisting of one element for each line in file, or if
* file cannot be read, list.
*/
public static List parseSubscriptions(File file, List list) {
List result;
public static List<String> parseSubscriptions(File file, List<String> list) {
List<String> result;
try {
result = ConfigParser.parseSubscriptions(file);
} catch (IOException exp) {
@@ -263,12 +261,9 @@ class ConfigParser {
* @throws IOException
* if the BufferedWriter cannot be written to.
*/
public static void write(Map map, BufferedWriter output) throws IOException {
Iterator keyIter = map.keySet().iterator();
while (keyIter.hasNext()) {
String key = (String) keyIter.next();
output.write(key + "=" + (String) map.get(key));
public static void write(Map<String, String> map, BufferedWriter output) throws IOException {
for (Map.Entry<String, String> entry : map.entrySet()) {
output.write(entry.getKey() + '=' + entry.getValue());
output.newLine();
}
output.close();
@@ -288,7 +283,7 @@ class ConfigParser {
* @throws IOException
* if file cannot be written to.
*/
public static void write(Map map, File file) throws IOException {
public static void write(Map<String, String> map, File file) throws IOException {
boolean success = false;
if (!isWindows) {
File tmp = SecureFile.createTempFile("temp-", ".tmp", file.getAbsoluteFile().getParentFile());
@@ -318,12 +313,10 @@ class ConfigParser {
* @throws IOException
* if output cannot be written to.
*/
public static void writeSubscriptions(List list, BufferedWriter output)
public static void writeSubscriptions(List<String> list, BufferedWriter output)
throws IOException {
Iterator iter = list.iterator();
while (iter.hasNext()) {
output.write((String) iter.next());
for (String s : list) {
output.write(s);
output.newLine();
}
output.close();
@@ -340,7 +333,7 @@ class ConfigParser {
* @throws IOException
* if output cannot be written to.
*/
public static void writeSubscriptions(List list, File file)
public static void writeSubscriptions(List<String> list, File file)
throws IOException {
ConfigParser.writeSubscriptions(list, new BufferedWriter(
new OutputStreamWriter(new SecureFileOutputStream(file), "UTF-8")));

View File

@@ -22,13 +22,20 @@
package net.i2p.addressbook;
import java.io.File;
import java.io.IOException;
import java.util.HashMap;
import java.util.Iterator;
import java.util.LinkedList;
import java.util.List;
import java.util.Map;
import java.util.Properties;
import java.util.Set;
import net.i2p.I2PAppContext;
import net.i2p.client.naming.NamingService;
import net.i2p.client.naming.SingleFileNamingService;
import net.i2p.data.DataFormatException;
import net.i2p.data.Destination;
import net.i2p.util.SecureDirectory;
/**
@@ -41,6 +48,7 @@ public class Daemon {
public static final String VERSION = "2.0.4";
private static final Daemon _instance = new Daemon();
private boolean _running;
private static final boolean DEBUG = false;
/**
* Update the router and published address books using remote data from the
@@ -49,29 +57,166 @@ public class Daemon {
* @param master
* The master AddressBook. This address book is never
* overwritten, so it is safe for the user to write to.
* It is only merged to the published addressbook.
* May be null.
* @param router
* The router AddressBook. This is the address book read by
* client applications.
* @param published
* The published AddressBook. This address book is published on
* the user's eepsite so that others may subscribe to it.
* May be null.
* If non-null, overwrite with the new addressbook.
* @param subscriptions
* A SubscriptionList listing the remote address books to update
* from.
* @param log
* The log to write changes and conflicts to.
* May be null.
*/
public void update(AddressBook master, AddressBook router,
public static void update(AddressBook master, AddressBook router,
File published, SubscriptionList subscriptions, Log log) {
router.merge(master, true, null);
Iterator iter = subscriptions.iterator();
Iterator<AddressBook> iter = subscriptions.iterator();
while (iter.hasNext()) {
// yes, the EepGet fetch() is done in next()
router.merge((AddressBook) iter.next(), false, log);
router.merge(iter.next(), false, log);
}
router.write();
if (published != null)
if (published != null) {
if (master != null)
router.merge(master, true, null);
router.write(published);
}
subscriptions.write();
}
/**
* Update the router and published address books using remote data from the
* subscribed address books listed in subscriptions.
* Merging of the "master" addressbook is NOT supported.
*
* @param router
* The NamingService to update, generally the root NamingService from the context.
* @param published
* The published AddressBook. This address book is published on
* the user's eepsite so that others may subscribe to it.
* May be null.
* If non-null, overwrite with the new addressbook.
* @param subscriptions
* A SubscriptionList listing the remote address books to update
* from.
* @param log
* The log to write changes and conflicts to.
* May be null.
* @since 0.8.7
*/
public static void update(NamingService router, File published, SubscriptionList subscriptions, Log log) {
// If the NamingService is a database, we look up as we go.
// If it is a text file, we do things differently, to avoid O(n**2) behavior
// when scanning large subscription results (i.e. those that return the whole file, not just the new entries) -
// we load all the known hostnames into a Set one time.
// This also has the advantage of not flushing the NamingService's LRU cache.
String nsClass = router.getClass().getSimpleName();
boolean isTextFile = nsClass.equals("HostsTxtNamingService") || nsClass.equals("SingleFileNamingService");
Set<String> knownNames = null;
NamingService publishedNS = null;
Iterator<AddressBook> iter = subscriptions.iterator();
while (iter.hasNext()) {
// yes, the EepGet fetch() is done in next()
long start = System.currentTimeMillis();
AddressBook sub = iter.next();
long end = System.currentTimeMillis();
// SubscriptionIterator puts in a dummy AddressBook with no location if no fetch is done
if (DEBUG && log != null && sub.getLocation() != null)
log.append("Fetch of " + sub.getLocation() + " took " + (end - start));
start = end;
int old = 0, nnew = 0, invalid = 0, conflict = 0, total = 0;
for (Iterator<Map.Entry<String, String>> eIter = sub.iterator(); eIter.hasNext(); ) {
Map.Entry<String, String> entry = eIter.next();
String key = entry.getKey();
boolean isKnown;
Destination oldDest = null;
if (isTextFile) {
if (knownNames == null) {
// load the hostname set
Properties opts = new Properties();
opts.setProperty("file", "hosts.txt");
knownNames = router.getNames(opts);
}
isKnown = knownNames.contains(key);
} else {
oldDest = router.lookup(key);
isKnown = oldDest != null;
}
try {
if (!isKnown) {
if (AddressBook.isValidKey(key)) {
Destination dest = new Destination(entry.getValue());
Properties props = new Properties();
props.setProperty("s", sub.getLocation());
boolean success = router.put(key, dest, props);
if (log != null) {
if (success)
log.append("New address " + key +
" added to address book. From: " + sub.getLocation());
else
log.append("Save to naming service " + router + " failed for new key " + key);
}
// now update the published addressbook
if (published != null) {
if (publishedNS == null)
publishedNS = new SingleFileNamingService(I2PAppContext.getGlobalContext(), published.getAbsolutePath());
success = publishedNS.putIfAbsent(key, dest);
if (!success) {
try {
log.append("Save to published address book " + published.getCanonicalPath() + " failed for new key " + key);
} catch (IOException ioe) {}
}
}
if (isTextFile)
// keep track for later dup check
knownNames.add(key);
nnew++;
} else if (log != null) {
log.append("Bad hostname " + key + " from "
+ sub.getLocation());
invalid++;
}
} else if (false && DEBUG && log != null) {
// lookup the conflict if we haven't yet (O(n**2) for text file)
if (isTextFile)
oldDest = router.lookup(key);
if (oldDest != null && !oldDest.toBase64().equals(entry.getValue())) {
log.append("Conflict for " + key + " from "
+ sub.getLocation()
+ ". Destination in remote address book is "
+ entry.getValue());
conflict++;
} else {
old++;
}
} else {
old++;
}
} catch (DataFormatException dfe) {
if (log != null)
log.append("Invalid b64 for" + key + " From: " + sub.getLocation());
invalid++;
}
total++;
}
if (DEBUG && log != null && total > 0) {
log.append("Merge of " + sub.getLocation() + " into " + router +
" took " + (System.currentTimeMillis() - start) + " ms with " +
total + " total, " +
nnew + " new, " +
old + " old, " +
invalid + " invalid, " +
conflict + " conflicts");
}
sub.delete();
}
subscriptions.write();
}
@@ -83,44 +228,80 @@ public class Daemon {
* @param home
* The directory containing addressbook's configuration files.
*/
public void update(Map settings, String home) {
File masterFile = new File(home, (String) settings
.get("master_addressbook"));
File routerFile = new File(home, (String) settings
.get("router_addressbook"));
public static void update(Map<String, String> settings, String home) {
File published = null;
if ("true".equals(settings.get("should_publish")))
published = new File(home, (String) settings
boolean should_publish = Boolean.valueOf(settings.get("should_publish")).booleanValue();
if (should_publish)
published = new File(home, settings
.get("published_addressbook"));
File subscriptionFile = new File(home, (String) settings
File subscriptionFile = new File(home, settings
.get("subscriptions"));
File logFile = new File(home, (String) settings.get("log"));
File etagsFile = new File(home, (String) settings.get("etags"));
File lastModifiedFile = new File(home, (String) settings
File logFile = new File(home, settings.get("log"));
File etagsFile = new File(home, settings.get("etags"));
File lastModifiedFile = new File(home, settings
.get("last_modified"));
File lastFetchedFile = new File(home, (String) settings
File lastFetchedFile = new File(home, settings
.get("last_fetched"));
long delay;
try {
delay = Long.parseLong((String) settings.get("update_delay"));
delay = Long.parseLong(settings.get("update_delay"));
} catch (NumberFormatException nfe) {
delay = 12;
}
delay *= 60 * 60 * 1000;
AddressBook master = new AddressBook(masterFile);
AddressBook router = new AddressBook(routerFile);
List defaultSubs = new LinkedList();
List<String> defaultSubs = new LinkedList();
// defaultSubs.add("http://i2p/NF2RLVUxVulR3IqK0sGJR0dHQcGXAzwa6rEO4WAWYXOHw-DoZhKnlbf1nzHXwMEJoex5nFTyiNMqxJMWlY54cvU~UenZdkyQQeUSBZXyuSweflUXFqKN-y8xIoK2w9Ylq1k8IcrAFDsITyOzjUKoOPfVq34rKNDo7fYyis4kT5bAHy~2N1EVMs34pi2RFabATIOBk38Qhab57Umpa6yEoE~rbyR~suDRvD7gjBvBiIKFqhFueXsR2uSrPB-yzwAGofTXuklofK3DdKspciclTVzqbDjsk5UXfu2nTrC1agkhLyqlOfjhyqC~t1IXm-Vs2o7911k7KKLGjB4lmH508YJ7G9fLAUyjuB-wwwhejoWqvg7oWvqo4oIok8LG6ECR71C3dzCvIjY2QcrhoaazA9G4zcGMm6NKND-H4XY6tUWhpB~5GefB3YczOqMbHq4wi0O9MzBFrOJEOs3X4hwboKWANf7DT5PZKJZ5KorQPsYRSq0E3wSOsFCSsdVCKUGsAAAA/i2p/hosts.txt");
defaultSubs.add("http://www.i2p2.i2p/hosts.txt");
SubscriptionList subscriptions = new SubscriptionList(subscriptionFile,
etagsFile, lastModifiedFile, lastFetchedFile, delay, defaultSubs, (String) settings
.get("proxy_host"), Integer.parseInt((String) settings.get("proxy_port")));
etagsFile, lastModifiedFile, lastFetchedFile, delay, defaultSubs, settings
.get("proxy_host"), Integer.parseInt(settings.get("proxy_port")));
Log log = new Log(logFile);
update(master, router, published, subscriptions, log);
// If false, add hosts via naming service; if true, write hosts.txt file directly
// Default false
if (Boolean.valueOf(settings.get("update_direct")).booleanValue()) {
// Direct hosts.txt access
File routerFile = new File(home, settings.get("router_addressbook"));
AddressBook master;
if (should_publish) {
File masterFile = new File(home, settings.get("master_addressbook"));
master = new AddressBook(masterFile);
} else {
master = null;
}
AddressBook router = new AddressBook(routerFile);
update(master, router, published, subscriptions, log);
} else {
// Naming service - no merging of master to router and published is supported.
update(getNamingService(settings.get("naming_service")), published, subscriptions, log);
}
}
/** depth-first search */
private static NamingService searchNamingService(NamingService ns, String srch)
{
String name = ns.getName();
if (name.equals(srch) || name.endsWith('/' + srch) || name.endsWith('\\' + srch))
return ns;
List<NamingService> list = ns.getNamingServices();
if (list != null) {
for (NamingService nss : list) {
NamingService rv = searchNamingService(nss, srch);
if (rv != null)
return rv;
}
}
return null;
}
/** @return the configured NamingService, or the root NamingService */
private static NamingService getNamingService(String srch)
{
NamingService root = I2PAppContext.getGlobalContext().namingService();
NamingService rv = searchNamingService(root, srch);
return rv != null ? rv : root;
}
/**
@@ -149,7 +330,7 @@ public class Daemon {
homeFile = new SecureDirectory(System.getProperty("user.dir"));
}
Map defaultSettings = new HashMap();
Map<String, String> defaultSettings = new HashMap();
defaultSettings.put("proxy_host", "127.0.0.1");
defaultSettings.put("proxy_port", "4444");
defaultSettings.put("master_addressbook", "../userhosts.txt");
@@ -162,6 +343,8 @@ public class Daemon {
defaultSettings.put("last_modified", "last_modified");
defaultSettings.put("last_fetched", "last_fetched");
defaultSettings.put("update_delay", "12");
defaultSettings.put("update_direct", "false");
defaultSettings.put("naming_service", "hosts.txt");
if (!homeFile.exists()) {
boolean created = homeFile.mkdirs();
@@ -173,7 +356,7 @@ public class Daemon {
File settingsFile = new File(homeFile, settingsLocation);
Map settings = ConfigParser.parse(settingsFile, defaultSettings);
Map<String, String> settings = ConfigParser.parse(settingsFile, defaultSettings);
// wait
try {
Thread.sleep(5*60*1000 + I2PAppContext.getGlobalContext().random().nextLong(5*60*1000));
@@ -181,7 +364,7 @@ public class Daemon {
} catch (InterruptedException ie) {}
while (_running) {
long delay = Long.parseLong((String) settings.get("update_delay"));
long delay = Long.parseLong(settings.get("update_delay"));
if (delay < 1) {
delay = 1;
}

View File

@@ -21,13 +21,18 @@
package net.i2p.addressbook;
import java.util.Properties;
import net.i2p.I2PAppContext;
import net.i2p.client.naming.NamingServiceUpdater;
/**
* A thread that waits five minutes, then runs the addressbook daemon.
*
* @author Ragnarok
*
*/
class DaemonThread extends Thread {
class DaemonThread extends Thread implements NamingServiceUpdater {
private String[] args;
@@ -49,11 +54,22 @@ class DaemonThread extends Thread {
// Thread.sleep(5 * 60 * 1000);
//} catch (InterruptedException exp) {
//}
I2PAppContext.getGlobalContext().namingService().registerUpdater(this);
Daemon.main(this.args);
I2PAppContext.getGlobalContext().namingService().unregisterUpdater(this);
}
public void halt() {
Daemon.stop();
interrupt();
}
/**
* The NamingServiceUpdater interface
* @param options ignored
* @since 0.8.7
*/
public void update(Properties options) {
interrupt();
}
}

View File

@@ -35,9 +35,9 @@ import net.i2p.data.DataHelper; // debug
*
* @author Ragnarok
*/
class SubscriptionIterator implements Iterator {
class SubscriptionIterator implements Iterator<AddressBook> {
private Iterator subIterator;
private Iterator<Subscription> subIterator;
private String proxyHost;
private int proxyPort;
private final long delay;
@@ -51,7 +51,7 @@ class SubscriptionIterator implements Iterator {
* @param proxyHost proxy hostname
* @param proxyPort proxt port number
*/
public SubscriptionIterator(List subscriptions, long delay, String proxyHost, int proxyPort) {
public SubscriptionIterator(List<Subscription> subscriptions, long delay, String proxyHost, int proxyPort) {
this.subIterator = subscriptions.iterator();
this.delay = delay;
this.proxyHost = proxyHost;
@@ -72,8 +72,8 @@ class SubscriptionIterator implements Iterator {
* see java.util.Iterator#next()
* @return an AddressBook (empty if the minimum delay has not been met)
*/
public Object next() {
Subscription sub = (Subscription) this.subIterator.next();
public AddressBook next() {
Subscription sub = this.subIterator.next();
if (sub.getLastFetched() + this.delay < I2PAppContext.getGlobalContext().clock().now()) {
//System.err.println("Fetching addressbook from " + sub.getLocation());
return new AddressBook(sub, this.proxyHost, this.proxyPort);

View File

@@ -24,7 +24,6 @@ package net.i2p.addressbook;
import java.io.File;
import java.io.IOException;
import java.util.HashMap;
import java.util.Iterator;
import java.util.LinkedList;
import java.util.List;
import java.util.Map;
@@ -37,7 +36,7 @@ import java.util.Map;
*/
class SubscriptionList {
private List subscriptions;
private List<Subscription> subscriptions;
private File etagsFile;
@@ -68,7 +67,7 @@ class SubscriptionList {
* @param proxyPort proxy port number
*/
public SubscriptionList(File locationsFile, File etagsFile,
File lastModifiedFile, File lastFetchedFile, long delay, List defaultSubs, String proxyHost,
File lastModifiedFile, File lastFetchedFile, long delay, List<String> defaultSubs, String proxyHost,
int proxyPort) {
this.subscriptions = new LinkedList();
this.etagsFile = etagsFile;
@@ -77,11 +76,10 @@ class SubscriptionList {
this.delay = delay;
this.proxyHost = proxyHost;
this.proxyPort = proxyPort;
Map etags;
Map lastModified;
Map lastFetched;
String location;
List locations = ConfigParser.parseSubscriptions(locationsFile,
Map<String, String> etags;
Map<String, String> lastModified;
Map<String, String> lastFetched;
List<String> locations = ConfigParser.parseSubscriptions(locationsFile,
defaultSubs);
try {
etags = ConfigParser.parse(etagsFile);
@@ -98,12 +96,10 @@ class SubscriptionList {
} catch (IOException exp) {
lastFetched = new HashMap();
}
Iterator iter = locations.iterator();
while (iter.hasNext()) {
location = (String) iter.next();
this.subscriptions.add(new Subscription(location, (String) etags.get(location),
(String) lastModified.get(location),
(String) lastFetched.get(location)));
for (String location : locations) {
this.subscriptions.add(new Subscription(location, etags.get(location),
lastModified.get(location),
lastFetched.get(location)));
}
}
@@ -125,13 +121,10 @@ class SubscriptionList {
* won't be read back correctly; the '=' should be escaped.
*/
public void write() {
Iterator iter = this.subscriptions.iterator();
Subscription sub;
Map etags = new HashMap();
Map lastModified = new HashMap();
Map lastFetched = new HashMap();
while (iter.hasNext()) {
sub = (Subscription) iter.next();
Map<String, String> etags = new HashMap();
Map<String, String> lastModified = new HashMap();
Map<String, String> lastFetched = new HashMap();
for (Subscription sub : this.subscriptions) {
if (sub.getEtag() != null) {
etags.put(sub.getLocation(), sub.getEtag());
}

View File

@@ -9,6 +9,7 @@
<property name="javadoc" value="javadoc"/>
<property name="javac.compilerargs" value=""/>
<property name="require.gettext" value="true" />
<target name="init">
<mkdir dir="${build}"/>
@@ -29,8 +30,7 @@
<compilerarg line="${javac.compilerargs}" />
<classpath>
<pathelement location="../../core/java/build/i2p.jar" />
<!-- doesn't matter if we're not on win32, we just need the java classes, not the platform-dependent code -->
<pathelement location="../../installer/lib/wrapper/win32/wrapper.jar" />
<pathelement location="../../installer/lib/wrapper/all/wrapper.jar" />
<pathelement location="../../router/java/build/router.jar" />
</classpath>
</javac>
@@ -39,17 +39,20 @@
</copy>
</target>
<target name="jar" depends="compile">
<exec executable="sh" osfamily="unix" failifexecutionfails="true" >
<target name="bundle" >
<exec executable="sh" osfamily="unix" failifexecutionfails="true" failonerror="${require.gettext}" >
<arg value="./bundle-messages.sh" />
</exec>
<exec executable="sh" osfamily="mac" failifexecutionfails="true" >
<exec executable="sh" osfamily="mac" failifexecutionfails="true" failonerror="${require.gettext}" >
<arg value="./bundle-messages.sh" />
</exec>
<!-- multi-lang is optional -->
<exec executable="sh" osfamily="windows" failifexecutionfails="false" >
<arg value="./bundle-messages.sh" />
</exec>
</target>
<target name="listChangedFiles" depends="jarUpToDate" if="shouldListChanges" >
<exec executable="mtn" outputproperty="workspace.changes" errorproperty="mtn.error2" failifexecutionfails="false" >
<arg value="list" />
<arg value="changed" />
@@ -61,6 +64,11 @@
<arg value="[:space:]" />
<arg value="," />
</exec>
</target>
<target name="jar" depends="compile, bundle, listChangedFiles" unless="jar.uptodate" >
<!-- set if unset -->
<property name="workspace.changes.tr" value="" />
<jar basedir="${build}" destfile="${dist}/${jar}">
<manifest>
<attribute name="Main-Class" value="net.i2p.desktopgui.Main"/>
@@ -71,6 +79,20 @@
</jar>
</target>
<target name="jarUpToDate">
<uptodate property="jar.uptodate" targetfile="${dist}/${jar}" >
<srcfiles dir= "." includes="build/**/*.class" />
</uptodate>
<condition property="shouldListChanges" >
<and>
<not>
<isset property="jar.uptodate" />
</not>
<isset property="mtn.available" />
</and>
</condition>
</target>
<target name="javadoc">
<mkdir dir="${build}" />
<mkdir dir="${build}/${javadoc}" />
@@ -88,15 +110,15 @@
</target>
<target name="poupdate">
<exec executable="sh" osfamily="unix" failifexecutionfails="true" >
<exec executable="sh" osfamily="unix" failifexecutionfails="true" failonerror="true" >
<arg value="./bundle-messages.sh" />
<arg value="-p" />
</exec>
<exec executable="sh" osfamily="mac" failifexecutionfails="true" >
<exec executable="sh" osfamily="mac" failifexecutionfails="true" failonerror="true" >
<arg value="./bundle-messages.sh" />
<arg value="-p" />
</exec>
<exec executable="sh" osfamily="windows" failifexecutionfails="true" >
<exec executable="sh" osfamily="windows" failifexecutionfails="true" failonerror="true" >
<arg value="./bundle-messages.sh" />
<arg value="-p" />
</exec>

View File

@@ -13,6 +13,7 @@
CLASS=net.i2p.desktopgui.messages
TMPFILE=build/javafiles.txt
export TZ=UTC
RC=0
if [ "$1" = "-p" ]
then
@@ -76,15 +77,17 @@ do
-o ${i}t
if [ $? -ne 0 ]
then
echo 'Warning - xgettext failed, not updating translations'
echo "ERROR - xgettext failed on ${i}, not updating translations"
rm -f ${i}t
RC=1
break
fi
msgmerge -U --backup=none $i ${i}t
if [ $? -ne 0 ]
then
echo 'Warning - msgmerge failed, not updating translations'
echo "ERROR - msgmerge failed on ${i}, not updating translations"
rm -f ${i}t
RC=1
break
fi
rm -f ${i}t
@@ -101,11 +104,13 @@ do
msgfmt --java --statistics -r $CLASS -l $LG -d build $i
if [ $? -ne 0 ]
then
echo 'Warning - msgfmt failed, not updating translations'
echo "ERROR - msgfmt failed on ${i}, not updating translations"
# msgfmt leaves the class file there so the build would work the next time
find build -name messages_${LG}.class -exec rm -f {} \;
RC=1
break
fi
fi
done
rm -f $TMPFILE
# todo: return failure
exit 0
exit $RC

View File

@@ -0,0 +1,57 @@
# I2P
# Copyright (C) 2009 The I2P Project
# This file is distributed under the same license as the desktopgui package.
# To contribute translations, see http://www.i2p2.de/newdevelopers
#
# <jokjok@hotmail.it>, 2011.
msgid ""
msgstr ""
"Project-Id-Version: I2P\n"
"Report-Msgid-Bugs-To: https://trac.i2p2.de/\n"
"POT-Creation-Date: 2011-03-03 18:29+0000\n"
"PO-Revision-Date: 2011-06-09 17:09+0000\n"
"Last-Translator: mkkid <jokjok@hotmail.it>\n"
"Language-Team: Italian (http://www.transifex.net/projects/p/I2P/team/it/)\n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
"Language: it\n"
"Plural-Forms: nplurals=2; plural=(n != 1)\n"
#: src/net/i2p/desktopgui/ExternalTrayManager.java:23
msgid "Start I2P"
msgstr "Avvia I2P"
#: src/net/i2p/desktopgui/ExternalTrayManager.java:38
msgid "I2P is starting!"
msgstr "Avvio di I2P in corso!"
#: src/net/i2p/desktopgui/ExternalTrayManager.java:38
msgid "Starting"
msgstr "Avvio"
#: src/net/i2p/desktopgui/InternalTrayManager.java:26
msgid "Launch I2P Browser"
msgstr "Avvia il Browser I2P"
#: src/net/i2p/desktopgui/InternalTrayManager.java:50
msgid "Configure desktopgui"
msgstr "Configura desktopgui"
#: src/net/i2p/desktopgui/InternalTrayManager.java:67
msgid "Restart I2P"
msgstr "Riavvia I2P"
#: src/net/i2p/desktopgui/InternalTrayManager.java:85
msgid "Stop I2P"
msgstr "Ferma I2P"
#: src/net/i2p/desktopgui/gui/DesktopguiConfigurationFrame.java:44
msgid "Tray icon configuration"
msgstr "Configurazione dell'icona nell'Area di notifica"
#: src/net/i2p/desktopgui/gui/DesktopguiConfigurationFrame.java:47
msgid "Should tray icon be enabled?"
msgstr "Vuoi che l'icona nell'Area di notifica venga abilitata?"

View File

@@ -0,0 +1,57 @@
# I2P
# Copyright (C) 2009 The I2P Project
# This file is distributed under the same license as the desktopgui package.
# To contribute translations, see http://www.i2p2.de/newdevelopers
#
# <b790979@klzlk.com>, 2011.
msgid ""
msgstr ""
"Project-Id-Version: I2P\n"
"Report-Msgid-Bugs-To: https://trac.i2p2.de/\n"
"POT-Creation-Date: 2011-03-03 18:29+0000\n"
"PO-Revision-Date: 2011-05-25 18:36+0000\n"
"Last-Translator: PolishAnon <b790979@klzlk.com>\n"
"Language-Team: Polish (http://www.transifex.net/projects/p/I2P/team/pl/)\n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
"Language: pl\n"
"Plural-Forms: nplurals=3; plural=(n==1 ? 0 : n%10>=2 && n%10<=4 && (n%100<10 || n%100>=20) ? 1 : 2)\n"
#: src/net/i2p/desktopgui/ExternalTrayManager.java:23
msgid "Start I2P"
msgstr "Uruchom I2P"
#: src/net/i2p/desktopgui/ExternalTrayManager.java:38
msgid "I2P is starting!"
msgstr "Uruchamianie I2P!"
#: src/net/i2p/desktopgui/ExternalTrayManager.java:38
msgid "Starting"
msgstr "Uruchamianie"
#: src/net/i2p/desktopgui/InternalTrayManager.java:26
msgid "Launch I2P Browser"
msgstr "Uruchom Przeglądarke I2P"
#: src/net/i2p/desktopgui/InternalTrayManager.java:50
msgid "Configure desktopgui"
msgstr "Skonfiguruj intrefejs pulpitu (desktopgui)"
#: src/net/i2p/desktopgui/InternalTrayManager.java:67
msgid "Restart I2P"
msgstr "Zrestartuj I2P"
#: src/net/i2p/desktopgui/InternalTrayManager.java:85
msgid "Stop I2P"
msgstr "Zatrzymaj I2P"
#: src/net/i2p/desktopgui/gui/DesktopguiConfigurationFrame.java:44
msgid "Tray icon configuration"
msgstr "Konfiguracja ikony zasobnika"
#: src/net/i2p/desktopgui/gui/DesktopguiConfigurationFrame.java:47
msgid "Should tray icon be enabled?"
msgstr "Czy ikona zasobnika powinna być aktywna?"

View File

@@ -0,0 +1,57 @@
# I2P
# Copyright (C) 2009 The I2P Project
# This file is distributed under the same license as the desktopgui package.
# To contribute translations, see http://www.i2p2.de/newdevelopers
#
# 123hund123 <M8R-ra4r1r@mailinator.com>, 2011
msgid ""
msgstr ""
"Project-Id-Version: I2P\n"
"Report-Msgid-Bugs-To: https://trac.i2p2.de/\n"
"POT-Creation-Date: 2011-03-03 18:29+0000\n"
"PO-Revision-Date: 2011-03-22 15:49+0000\n"
"Last-Translator: 123hund123 <M8R-ra4r1r@mailinator.com>\n"
"Language-Team: Swedish (Sweden) (http://www.transifex.net/projects/p/I2P/team/sv_SE/)\n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
"Language: sv_SE\n"
"Plural-Forms: nplurals=2; plural=(n != 1)\n"
#: src/net/i2p/desktopgui/ExternalTrayManager.java:23
msgid "Start I2P"
msgstr "Starta I2P"
#: src/net/i2p/desktopgui/ExternalTrayManager.java:38
msgid "I2P is starting!"
msgstr "I2P startas!"
#: src/net/i2p/desktopgui/ExternalTrayManager.java:38
msgid "Starting"
msgstr "Startar"
#: src/net/i2p/desktopgui/InternalTrayManager.java:26
msgid "Launch I2P Browser"
msgstr "Öppna I2P browser"
#: src/net/i2p/desktopgui/InternalTrayManager.java:50
msgid "Configure desktopgui"
msgstr "Konfigurera desktopgui"
#: src/net/i2p/desktopgui/InternalTrayManager.java:67
msgid "Restart I2P"
msgstr "Starta om I2P"
#: src/net/i2p/desktopgui/InternalTrayManager.java:85
msgid "Stop I2P"
msgstr "Stoppar I2P"
#: src/net/i2p/desktopgui/gui/DesktopguiConfigurationFrame.java:44
msgid "Tray icon configuration"
msgstr "Ikonpanelskonfiguration"
#: src/net/i2p/desktopgui/gui/DesktopguiConfigurationFrame.java:47
msgid "Should tray icon be enabled?"
msgstr "Ska ikonpanelen vara aktiverad?"

View File

@@ -0,0 +1,57 @@
# I2P
# Copyright (C) 2009 The I2P Project
# This file is distributed under the same license as the desktopgui package.
# To contribute translations, see http://www.i2p2.de/newdevelopers
#
# dich_tran <tran.nathan@gmail.com>, 2011.
msgid ""
msgstr ""
"Project-Id-Version: I2P\n"
"Report-Msgid-Bugs-To: https://trac.i2p2.de/\n"
"POT-Creation-Date: 2011-03-03 18:29+0000\n"
"PO-Revision-Date: 2011-04-12 06:13+0000\n"
"Last-Translator: dich_tran <tran.nathan@gmail.com>\n"
"Language-Team: Vietnamese (http://www.transifex.net/projects/p/I2P/team/vi/)\n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
"Language: vi\n"
"Plural-Forms: nplurals=1; plural=0\n"
#: src/net/i2p/desktopgui/ExternalTrayManager.java:23
msgid "Start I2P"
msgstr "Khởi động I2P"
#: src/net/i2p/desktopgui/ExternalTrayManager.java:38
msgid "I2P is starting!"
msgstr "I2P đang bắt đầu"
#: src/net/i2p/desktopgui/ExternalTrayManager.java:38
msgid "Starting"
msgstr "Bắt đầu"
#: src/net/i2p/desktopgui/InternalTrayManager.java:26
msgid "Launch I2P Browser"
msgstr "Kích hoạt trình duyệt I2P"
#: src/net/i2p/desktopgui/InternalTrayManager.java:50
msgid "Configure desktopgui"
msgstr "Cấu hình giao diện"
#: src/net/i2p/desktopgui/InternalTrayManager.java:67
msgid "Restart I2P"
msgstr "Khởi động lại I2P"
#: src/net/i2p/desktopgui/InternalTrayManager.java:85
msgid "Stop I2P"
msgstr "Ngưng I2P"
#: src/net/i2p/desktopgui/gui/DesktopguiConfigurationFrame.java:44
msgid "Tray icon configuration"
msgstr "Cấu hình tray icon"
#: src/net/i2p/desktopgui/gui/DesktopguiConfigurationFrame.java:47
msgid "Should tray icon be enabled?"
msgstr "Cần dùng tray icon?"

View File

@@ -22,7 +22,10 @@
</classpath>
</depend>
</target>
<property name="javac.compilerargs" value="" />
<property name="require.gettext" value="true" />
<target name="compile" depends="depend">
<mkdir dir="./build" />
<mkdir dir="./build/obj" />
@@ -36,7 +39,7 @@
</javac>
</target>
<target name="jar" depends="builddep, compile, jarUpToDate" unless="jar.uptodate" >
<target name="listChangedFiles" depends="jarUpToDate" if="shouldListChanges" >
<exec executable="mtn" outputproperty="workspace.changes" errorproperty="mtn.error2" failifexecutionfails="false" >
<arg value="list" />
<arg value="changed" />
@@ -48,6 +51,11 @@
<arg value="[:space:]" />
<arg value="," />
</exec>
</target>
<target name="jar" depends="builddep, compile, jarUpToDate, listChangedFiles" unless="jar.uptodate" >
<!-- set if unset -->
<property name="workspace.changes.tr" value="" />
<jar destfile="./build/i2psnark.jar" basedir="./build/obj" includes="**/*.class" excludes="**/I2PSnarkServlet*.class **/messages_*.class">
<manifest>
<attribute name="Main-Class" value="org.klomp.snark.Snark" />
@@ -63,6 +71,17 @@
<uptodate property="jar.uptodate" targetfile="build/i2psnark.jar" >
<srcfiles dir= "build/obj" includes="**/*.class" excludes="**/I2PSnarkServlet*.class **/messages_*.class" />
</uptodate>
<condition property="shouldListChanges" >
<and>
<not>
<isset property="jar.uptodate" />
</not>
<not>
<isset property="wjar.uptodate" />
</not>
<isset property="mtn.available" />
</and>
</condition>
</target>
<!-- Ideally we would include
@@ -72,7 +91,9 @@
- So we must continue to duplicate everything in the war.
<classes dir="./build/obj" includes="**/I2PSnarkServlet*.class" />
-->
<target name="war" depends="jar, bundle, warUpToDate" unless="war.uptodate" >
<target name="war" depends="jar, bundle, warUpToDate, listChangedFiles" unless="war.uptodate" >
<!-- set if unset -->
<property name="workspace.changes.tr" value="" />
<war destfile="../i2psnark.war" webxml="../web.xml" basedir="../" includes="_icons/*" >
<!-- include only the web stuff, as of 0.7.12 the router will add i2psnark.jar to the classpath for the war -->
<classes dir="./build/obj" includes="**/web/*.class" />
@@ -93,10 +114,10 @@
<target name="bundle" depends="compile">
<!-- Update the messages_*.po files.
We need to supply the bat file for windows, and then change the fail property to true -->
<exec executable="sh" osfamily="unix" failifexecutionfails="true" >
<exec executable="sh" osfamily="unix" failifexecutionfails="true" failonerror="${require.gettext}" >
<arg value="./bundle-messages.sh" />
</exec>
<exec executable="sh" osfamily="mac" failifexecutionfails="true" >
<exec executable="sh" osfamily="mac" failifexecutionfails="true" failonerror="${require.gettext}" >
<arg value="./bundle-messages.sh" />
</exec>
<!-- multi-lang is optional -->
@@ -107,15 +128,15 @@
<target name="poupdate" depends="builddep, compile">
<!-- Update the messages_*.po files. -->
<exec executable="sh" osfamily="unix" failifexecutionfails="true" >
<exec executable="sh" osfamily="unix" failifexecutionfails="true" failonerror="true" >
<arg value="./bundle-messages.sh" />
<arg value="-p" />
</exec>
<exec executable="sh" osfamily="mac" failifexecutionfails="true" >
<exec executable="sh" osfamily="mac" failifexecutionfails="true" failonerror="true" >
<arg value="./bundle-messages.sh" />
<arg value="-p" />
</exec>
<exec executable="sh" osfamily="windows" failifexecutionfails="true" >
<exec executable="sh" osfamily="windows" failifexecutionfails="true" failonerror="true" >
<arg value="./bundle-messages.sh" />
<arg value="-p" />
</exec>

View File

@@ -12,6 +12,7 @@
CLASS=org.klomp.snark.web.messages
TMPFILE=build/javafiles.txt
export TZ=UTC
RC=0
if [ "$1" = "-p" ]
then
@@ -67,15 +68,17 @@ do
-o ${i}t
if [ $? -ne 0 ]
then
echo 'Warning - xgettext failed, not updating translations'
echo "ERROR - xgettext failed on ${i}, not updating translations"
rm -f ${i}t
RC=1
break
fi
msgmerge -U --backup=none $i ${i}t
if [ $? -ne 0 ]
then
echo 'Warning - msgmerge failed, not updating translations'
echo "ERROR - msgmerge failed on ${i}, not updating translations"
rm -f ${i}t
RC=1
break
fi
rm -f ${i}t
@@ -92,11 +95,13 @@ do
msgfmt --java --statistics -r $CLASS -l $LG -d build/obj $i
if [ $? -ne 0 ]
then
echo 'Warning - msgfmt failed, not updating translations'
echo "ERROR - msgfmt failed on ${i}, not updating translations"
# msgfmt leaves the class file there so the build would work the next time
find build/obj -name messages_${LG}.class -exec rm -f {} \;
RC=1
break
fi
fi
done
rm -f $TMPFILE
# todo: return failure
exit 0
exit $RC

View File

@@ -24,7 +24,6 @@ import java.io.FileInputStream;
import java.io.IOException;
import java.io.InputStream;
import java.security.MessageDigest;
import java.security.NoSuchAlgorithmException;
import java.util.ArrayList;
import java.util.Collections;
import java.util.HashMap;
@@ -401,7 +400,7 @@ public class MetaInfo
****/
private boolean fast_checkPiece(int piece, byte[] bs, int off, int length) {
SHA1 sha1 = new SHA1();
MessageDigest sha1 = SHA1.getInstance();
sha1.update(bs, off, length);
byte[] hash = sha1.digest();
@@ -519,18 +518,11 @@ public class MetaInfo
}
byte[] infoBytes = BEncoder.bencode(info);
//_log.debug("info bencoded: [" + Base64.encode(infoBytes, true) + "]");
try
{
MessageDigest digest = MessageDigest.getInstance("SHA");
MessageDigest digest = SHA1.getInstance();
byte hash[] = digest.digest(infoBytes);
if (_log.shouldLog(Log.DEBUG))
_log.debug("info hash: " + I2PSnarkUtil.toHex(hash));
return hash;
}
catch(NoSuchAlgorithmException nsa)
{
throw new InternalError(nsa.toString());
}
}
/** @since 0.8.5 */

View File

@@ -130,7 +130,8 @@ public class PeerAcceptor
}
}
private static final int LOOKAHEAD_SIZE = "19".length() +
/** 48 */
private static final int LOOKAHEAD_SIZE = 1 + // chr(19)
"BitTorrent protocol".length() +
8 + // blank, reserved
20; // infohash
@@ -144,7 +145,7 @@ public class PeerAcceptor
if (read != buf.length)
throw new IOException("Unable to read the hash (read " + read + ")");
byte rv[] = new byte[20];
System.arraycopy(buf, buf.length-rv.length-1, rv, 0, rv.length);
System.arraycopy(buf, buf.length-rv.length, rv, 0, rv.length);
return rv;
}
}

View File

@@ -342,6 +342,11 @@ public class PeerCoordinator implements PeerListener
private int getMaxConnections() {
if (metainfo == null)
return 6;
int pieces = metainfo.getPieces();
if (pieces <= 2)
return 4;
if (pieces <= 5)
return 6;
int size = metainfo.getPieceLength(0);
int max = _util.getMaxConnections();
if (size <= 512*1024 || completed())

View File

@@ -23,6 +23,7 @@ package org.klomp.snark;
import java.io.File;
import java.io.IOException;
import java.io.RandomAccessFile;
import java.security.MessageDigest;
import java.util.ArrayList;
import java.util.Iterator;
import java.util.List;
@@ -165,7 +166,7 @@ public class Storage
*/
private byte[] fast_digestCreate() throws IOException {
// Calculate piece_hashes
SHA1 digest = new SHA1();
MessageDigest digest = SHA1.getInstance();
byte[] piece_hashes = new byte[20 * pieces];
@@ -556,7 +557,8 @@ public class Storage
private static final char[] ILLEGAL = new char[] {
'<', '>', ':', '"', '/', '\\', '|', '?', '*',
0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15,
16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31 };
16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31,
0x7f };
/**
* Removes 'suspicious' characters from the given file name.

View File

@@ -1038,6 +1038,8 @@ public class I2PSnarkServlet extends Default {
client = "Robert";
else if (ch.startsWith("LV")) // LVCS 1.0.2?; LVRS 1.0.4
client = "Transmission";
else if ("LUtU".equals(ch))
client = "KTorrent";
else
client = _("Unknown") + " (" + ch + ')';
out.write(client + "&nbsp;&nbsp;<tt>" + peer.toString().substring(5, 9)+ "</tt>");

View File

@@ -8,14 +8,14 @@ msgid ""
msgstr ""
"Project-Id-Version: I2P i2psnark\n"
"Report-Msgid-Bugs-To: \n"
"POT-Creation-Date: 2011-03-03 18:28+0000\n"
"PO-Revision-Date: 2011-02-27 17:33+0100\n"
"Last-Translator: \n"
"POT-Creation-Date: 2011-06-02 16:12+0000\n"
"PO-Revision-Date: 2011-06-02 22:29+0100\n"
"Last-Translator: mixxy <m1xxy@mail.i2p>\n"
"Language-Team: foo <foo@bar>\n"
"Language: \n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
"Language: \n"
"Plural-Forms: nplurals=2; plural=(n != 1)\n"
"X-Poedit-Language: German\n"
@@ -46,9 +46,7 @@ msgstr "Startverzögerung auf {0} gesetzt"
#: ../java/src/org/klomp/snark/SnarkManager.java:386
msgid "I2CP and tunnel changes will take effect after stopping all torrents"
msgstr ""
"Änderungen an I2CP und am Tunnel werden nach dem Stoppen aller Torrents "
"wirksam"
msgstr "Änderungen an I2CP und am Tunnel werden nach dem Stoppen aller Torrents wirksam"
#: ../java/src/org/klomp/snark/SnarkManager.java:393
msgid "Disconnecting old I2CP destination"
@@ -60,11 +58,8 @@ msgid "I2CP settings changed to {0}"
msgstr "I2CP Einstellungen geändert auf {0}"
#: ../java/src/org/klomp/snark/SnarkManager.java:402
msgid ""
"Unable to connect with the new settings, reverting to the old I2CP settings"
msgstr ""
"Verbinden mit den neuen Einstellungen nicht möglich, benutze wieder die "
"alten I2CP-Einstellungen"
msgid "Unable to connect with the new settings, reverting to the old I2CP settings"
msgstr "Verbinden mit den neuen Einstellungen nicht möglich, benutze wieder die alten I2CP-Einstellungen"
#: ../java/src/org/klomp/snark/SnarkManager.java:406
msgid "Unable to reconnect with the old settings!"
@@ -89,28 +84,20 @@ msgstr "Deaktiviere Autostart"
#: ../java/src/org/klomp/snark/SnarkManager.java:437
msgid "Enabled open trackers - torrent restart required to take effect."
msgstr ""
"OpenTracker aktiviert - Um dies anzuwenden, müssen die Torrents neu "
"gestartet werden."
msgstr "OpenTracker aktiviert - Um dies anzuwenden, müssen die Torrents neu gestartet werden."
#: ../java/src/org/klomp/snark/SnarkManager.java:439
msgid "Disabled open trackers - torrent restart required to take effect."
msgstr ""
"OpenTracker deaktiviert - Um dies anzuwenden, müssen die Torrents neu "
"gestartet werden."
msgstr "OpenTracker deaktiviert - Um dies anzuwenden, müssen die Torrents neu gestartet werden."
#: ../java/src/org/klomp/snark/SnarkManager.java:447
msgid "Open Tracker list changed - torrent restart required to take effect."
msgstr ""
"OpenTracker-Liste geändert - Um dies anzuwenden, müssen die Torrents neu "
"gestartet werden"
msgstr "OpenTracker-Liste geändert - Um dies anzuwenden, müssen die Torrents neu gestartet werden"
#: ../java/src/org/klomp/snark/SnarkManager.java:454
#, java-format
msgid "{0} theme loaded, return to main i2psnark page to view."
msgstr ""
"Thema {0} geladen. Gehen Sie zurück zur Hauptseite von i2psnark, um die "
"Änderungen zu sehen!"
msgstr "Thema {0} geladen. Gehen Sie zurück zur Hauptseite von i2psnark, um die Änderungen zu sehen!"
#: ../java/src/org/klomp/snark/SnarkManager.java:461
msgid "Configuration unchanged."
@@ -127,8 +114,7 @@ msgstr "Verbinde mit I2P"
#: ../java/src/org/klomp/snark/SnarkManager.java:539
msgid "Error connecting to I2P - check your I2CP settings!"
msgstr ""
"Fehler beim Verbinden mit I2P - Kontrollieren Sie die I2CP-Einstellungen!"
msgstr "Fehler beim Verbinden mit I2P - Kontrollieren Sie die I2CP-Einstellungen!"
#: ../java/src/org/klomp/snark/SnarkManager.java:548
#, java-format
@@ -142,163 +128,152 @@ msgid "Cannot open \"{0}\""
msgstr "Kann dies nicht öffnen: \"{0}\""
#. TODO - if the existing one is a magnet, delete it and add the metainfo instead?
#: ../java/src/org/klomp/snark/SnarkManager.java:586
#: ../java/src/org/klomp/snark/SnarkManager.java:661
#: ../java/src/org/klomp/snark/SnarkManager.java:716
#: ../java/src/org/klomp/snark/SnarkManager.java:589
#: ../java/src/org/klomp/snark/SnarkManager.java:665
#: ../java/src/org/klomp/snark/SnarkManager.java:720
#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:1976
#, java-format
msgid "Torrent with this info hash is already running: {0}"
msgstr "Torrent mit diesem Infohash läuft schon: {0}"
#. addMessage(_("Warning - No I2P trackers in \"{0}\", will announce to I2P open trackers and DHT only.", info.getName()));
#: ../java/src/org/klomp/snark/SnarkManager.java:593
#: ../java/src/org/klomp/snark/SnarkManager.java:596
#, java-format
msgid ""
"Warning - No I2P trackers in \"{0}\", will announce to I2P open trackers "
"only."
msgstr ""
"Warnung - keine I2P Tracker in \"{0}\", werde nur bei I2P-OpenTrackern "
"bekanntgeben"
msgid "Warning - No I2P trackers in \"{0}\", will announce to I2P open trackers only."
msgstr "Warnung - keine I2P Tracker in \"{0}\", werde nur bei I2P-OpenTrackern bekanntgeben"
#. addMessage(_("Warning - No I2P trackers in \"{0}\", and DHT and open trackers are disabled, you should enable open trackers or DHT before starting the torrent.", info.getName()));
#: ../java/src/org/klomp/snark/SnarkManager.java:598
#: ../java/src/org/klomp/snark/SnarkManager.java:601
#, java-format
msgid ""
"Warning - No I2P Trackers found in \"{0}\". Make sure Open Tracker is "
"enabled before starting this torrent."
msgstr ""
"Warnung - keine I2P-Tracker in \"{0}\" gefunden. Stell sicher, dass "
"OpenTracker aktiviert sind, bevor du diesen Torrent startest!"
msgid "Warning - No I2P Trackers found in \"{0}\". Make sure Open Tracker is enabled before starting this torrent."
msgstr "Warnung - keine I2P-Tracker in \"{0}\" gefunden. Stell sicher, dass OpenTracker aktiviert sind, bevor du diesen Torrent startest!"
#: ../java/src/org/klomp/snark/SnarkManager.java:619
#: ../java/src/org/klomp/snark/SnarkManager.java:622
#, java-format
msgid "Torrent in \"{0}\" is invalid"
msgstr "Torrent in \"{0}\" ist nicht gültig"
#: ../java/src/org/klomp/snark/SnarkManager.java:624
#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:1999
#: ../java/src/org/klomp/snark/SnarkManager.java:627
#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:1998
#, java-format
msgid "ERROR - Out of memory, cannot create torrent from {0}"
msgstr ""
"Fehler - unzureichender Arbeitsspeicher, kann keinen Torrent von {0} "
"erstellen."
msgstr "Fehler - unzureichender Arbeitsspeicher, kann keinen Torrent von {0} erstellen."
#: ../java/src/org/klomp/snark/SnarkManager.java:635
#: ../java/src/org/klomp/snark/SnarkManager.java:639
#, java-format
msgid "Torrent added and started: \"{0}\""
msgstr "Torrent hinzugefügt und gestartet: \"{0}\""
#: ../java/src/org/klomp/snark/SnarkManager.java:637
#: ../java/src/org/klomp/snark/SnarkManager.java:641
#, java-format
msgid "Torrent added: \"{0}\""
msgstr "Torrent hinzugefügt: \"{0}\""
#: ../java/src/org/klomp/snark/SnarkManager.java:672
#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:490
#: ../java/src/org/klomp/snark/SnarkManager.java:676
#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:491
#, java-format
msgid "Fetching {0}"
msgstr "Hole {0}"
#: ../java/src/org/klomp/snark/SnarkManager.java:675
#, java-format
msgid ""
"We have no saved peers and no other torrents are running. Fetch of {0} will "
"not succeed until you start another torrent."
msgstr ""
"Wir haben keine Gespeicherten Teilnehmer und keine anderen aktiven Torrents. "
"Das Herunterladen von {0} kann nicht erfolgen, solange du keinen anderen "
"Torrent startest."
#: ../java/src/org/klomp/snark/SnarkManager.java:679
#, java-format
msgid "We have no saved peers and no other torrents are running. Fetch of {0} will not succeed until you start another torrent."
msgstr "Wir haben keine Gespeicherten Teilnehmer und keine anderen aktiven Torrents. Das Herunterladen von {0} kann nicht erfolgen, solange du keinen anderen Torrent startest."
#: ../java/src/org/klomp/snark/SnarkManager.java:683
#, java-format
msgid "Adding {0}"
msgstr "Hinzufügen {0}"
#: ../java/src/org/klomp/snark/SnarkManager.java:726
#: ../java/src/org/klomp/snark/SnarkManager.java:749
#: ../java/src/org/klomp/snark/SnarkManager.java:1174
#: ../java/src/org/klomp/snark/SnarkManager.java:730
#: ../java/src/org/klomp/snark/SnarkManager.java:753
#: ../java/src/org/klomp/snark/SnarkManager.java:1180
#, java-format
msgid "Failed to copy torrent file to {0}"
msgstr "Konnte Torrent-Datei nicht nach {0} kopieren"
#: ../java/src/org/klomp/snark/SnarkManager.java:972
#: ../java/src/org/klomp/snark/SnarkManager.java:976
#, java-format
msgid "Too many files in \"{0}\" ({1}), deleting it!"
msgstr "Zu viele Dateien in \"{0}\" ({1}), wird gelöscht! "
#: ../java/src/org/klomp/snark/SnarkManager.java:974
#: ../java/src/org/klomp/snark/SnarkManager.java:978
#, java-format
msgid "Torrent file \"{0}\" cannot end in \".torrent\", deleting it!"
msgstr "Torrentdatei \"{0}\" darf nicht auf '.torrent' enden, wird gelöscht!"
#: ../java/src/org/klomp/snark/SnarkManager.java:976
#: ../java/src/org/klomp/snark/SnarkManager.java:980
#, java-format
msgid "No pieces in \"{0}\", deleting it!"
msgstr "Keine Teile in \"{0}\", wird entfernt!"
#: ../java/src/org/klomp/snark/SnarkManager.java:978
#: ../java/src/org/klomp/snark/SnarkManager.java:982
#, java-format
msgid "Too many pieces in \"{0}\", limit is {1}, deleting it!"
msgstr "Zu viele Teile in \"{0}\", das Limit sind {1}, werden gelöscht!"
#: ../java/src/org/klomp/snark/SnarkManager.java:980
#: ../java/src/org/klomp/snark/SnarkManager.java:984
#, java-format
msgid "Pieces are too large in \"{0}\" ({1}B), deleting it."
msgstr "Teile in \"{0}\" sind zu groß ({1}B), lösche es."
#: ../java/src/org/klomp/snark/SnarkManager.java:981
#: ../java/src/org/klomp/snark/SnarkManager.java:985
#, java-format
msgid "Limit is {0}B"
msgstr "Limit ist \"{0}\"Bytes"
#: ../java/src/org/klomp/snark/SnarkManager.java:989
#: ../java/src/org/klomp/snark/SnarkManager.java:987
#, java-format
msgid "Torrent \"{0}\" has no data, deleting it!"
msgstr "Torrent \"{0}\" enthält keine Daten und wird gelöscht!"
#: ../java/src/org/klomp/snark/SnarkManager.java:995
#, java-format
msgid "Torrents larger than {0}B are not supported yet, deleting \"{1}\""
msgstr ""
"Torrents größer als \"{0}\"Bytes werden nicht unterstützt, lösche \"{1}\"."
msgstr "Torrents größer als \"{0}\"Bytes werden nicht unterstützt, lösche \"{1}\"."
#: ../java/src/org/klomp/snark/SnarkManager.java:1005
#: ../java/src/org/klomp/snark/SnarkManager.java:1011
#, java-format
msgid "Error: Could not remove the torrent {0}"
msgstr "Fehler: Konnte den Torrent \"{0}\" nicht entfernen"
#: ../java/src/org/klomp/snark/SnarkManager.java:1026
#: ../java/src/org/klomp/snark/SnarkManager.java:1044
#: ../java/src/org/klomp/snark/SnarkManager.java:1032
#: ../java/src/org/klomp/snark/SnarkManager.java:1050
#, java-format
msgid "Torrent stopped: \"{0}\""
msgstr "Torrent angehalten: \"{0}\""
#: ../java/src/org/klomp/snark/SnarkManager.java:1065
#: ../java/src/org/klomp/snark/SnarkManager.java:1071
#, java-format
msgid "Torrent removed: \"{0}\""
msgstr "Torrent entfernt: \"{0}\""
#: ../java/src/org/klomp/snark/SnarkManager.java:1073
#: ../java/src/org/klomp/snark/SnarkManager.java:1079
#, java-format
msgid "Adding torrents in {0}"
msgstr "Füge Torrents in {0} hinzu ..."
#: ../java/src/org/klomp/snark/SnarkManager.java:1122
#: ../java/src/org/klomp/snark/SnarkManager.java:1128
#, java-format
msgid "Download finished: {0}"
msgstr "vollständig heruntergeladen:\"{0}\""
#: ../java/src/org/klomp/snark/SnarkManager.java:1170
#: ../java/src/org/klomp/snark/SnarkManager.java:1176
#, java-format
msgid "Metainfo received for {0}"
msgstr "Metainfo für {0} erhalten"
#: ../java/src/org/klomp/snark/SnarkManager.java:1171
#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:525
#: ../java/src/org/klomp/snark/SnarkManager.java:1177
#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:526
#, java-format
msgid "Starting up torrent {0}"
msgstr "Starte Torrent {0}"
#: ../java/src/org/klomp/snark/SnarkManager.java:1225
#: ../java/src/org/klomp/snark/SnarkManager.java:1231
msgid "Unable to connect to I2P!"
msgstr "Konnte mich nicht mit I2P verbinden!"
#: ../java/src/org/klomp/snark/SnarkManager.java:1231
#: ../java/src/org/klomp/snark/SnarkManager.java:1237
#, java-format
msgid "Unable to add {0}"
msgstr "Konnte {0} nicht hinzufügen."
@@ -395,82 +370,81 @@ msgstr " "
msgid "Up Rate"
msgstr "ausgehend"
#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:365
#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:366
msgid "Stop all torrents and the I2P tunnel"
msgstr "Stoppe alle Torrents und den I2P-Tunnel"
#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:367
#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:368
msgid "Stop All"
msgstr "Stoppe alle"
#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:376
#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:377
msgid "Start all torrents and the I2P tunnel"
msgstr "Starte alle Torrents und den I2P-Tunnel"
#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:378
#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:379
msgid "Start All"
msgstr "Starte alle"
#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:397
#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:398
msgid "No torrents loaded."
msgstr "keine Torrents geladen"
#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:402
#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:403
msgid "Totals"
msgstr "Gesamt"
#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:404
#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:405
#, java-format
msgid "1 torrent"
msgid_plural "{0} torrents"
msgstr[0] "1 Torrent"
msgstr[1] "{0} Torrents"
#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:407
#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:408
#, java-format
msgid "1 connected peer"
msgid_plural "{0} connected peers"
msgstr[0] "1 verbundener Teilnehmer"
msgstr[1] "{0} verbundene Teilnehmer"
#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:496
#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:497
#, java-format
msgid "Invalid URL: Must start with \"http://\", \"{0}\", or \"{1}\""
msgstr "ungültige URL - muss mit \"http://\", \"{0}\", oder \"{1}\" anfangen"
#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:544
#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:571
#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:545
#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:572
#, java-format
msgid "Magnet deleted: {0}"
msgstr "Magnetlink wurde gelöscht: {0}"
#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:552
#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:577
#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:553
#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:578
#, java-format
msgid "Torrent file deleted: {0}"
msgstr "Torrentdatei gelöscht: {0}"
#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:583
#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:593
#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:584
#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:594
#, java-format
msgid "Data file deleted: {0}"
msgstr "Daten gelöscht: {0}"
#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:585
#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:595
#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:586
#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:596
#, java-format
msgid "Data file could not be deleted: {0}"
msgstr "Daten konnten nicht gelöscht werden: {0}"
#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:604
#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:605
#, java-format
msgid "Data dir deleted: {0}"
msgstr "Datenverzeichnis wurde gelöscht: {0}"
#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:637
#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:638
msgid "Error creating torrent - you must select a tracker"
msgstr ""
"Fehler beim Erstellen des Torrents - Sie müssen einen Tracker auswählen!"
msgstr "Fehler beim Erstellen des Torrents - Sie müssen einen Tracker auswählen!"
#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:653
#, java-format
@@ -479,12 +453,8 @@ msgstr "Torrent erstellt für \"{0}\""
#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:655
#, java-format
msgid ""
"Many I2P trackers require you to register new torrents before seeding - "
"please do so before starting \"{0}\""
msgstr ""
"Viele I2P-Tracker erfordern eine Registrierung, bevor der Torrent verteilt "
"wird. Bitte tun Sie dies vor dem Start von \"{0}\"!"
msgid "Many I2P trackers require you to register new torrents before seeding - please do so before starting \"{0}\""
msgstr "Viele I2P-Tracker erfordern eine Registrierung, bevor der Torrent verteilt wird. Bitte tun Sie dies vor dem Start von \"{0}\"!"
#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:657
#, java-format
@@ -498,9 +468,7 @@ msgstr "Kann keinen Torrent für nicht existente Daten erstellen: {0}"
#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:663
msgid "Error creating torrent - you must enter a file or directory"
msgstr ""
"Fehler beim Erstellen des Torrents - Sie müssen eine Datei oder ein "
"Verzeichnis angeben."
msgstr "Fehler beim Erstellen des Torrents - Sie müssen eine Datei oder ein Verzeichnis angeben."
#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:666
msgid "Stopping all torrents and closing the I2P tunnel."
@@ -599,20 +567,15 @@ msgstr "Start"
#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:982
msgid "Remove the torrent from the active list, deleting the .torrent file"
msgstr ""
"entfernt den Torrent von der aktiven Liste und löscht die .torrent-Datei"
msgstr "entfernt den Torrent von der aktiven Liste und löscht die .torrent-Datei"
#. Can't figure out how to escape double quotes inside the onclick string.
#. Single quotes in translate strings with parameters must be doubled.
#. Then the remaining single quite must be escaped
#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:987
#, java-format
msgid ""
"Are you sure you want to delete the file \\''{0}.torrent\\'' (downloaded "
"data will not be deleted) ?"
msgstr ""
"Sind Sie sicher, dass Sie die Datei \\''{0}.torrent\\'' löschen wollen? "
"(Heruntergeladene Daten werden nicht gelöscht.)"
msgid "Are you sure you want to delete the file \\''{0}.torrent\\'' (downloaded data will not be deleted) ?"
msgstr "Sind Sie sicher, dass Sie die Datei \\''{0}.torrent\\'' löschen wollen? (Heruntergeladene Daten werden nicht gelöscht.)"
#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:990
msgid "Remove"
@@ -627,12 +590,8 @@ msgstr "löscht die .torrent-Datei und dazugehörige Daten Datei(en)"
#. Then the remaining single quite must be escaped
#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:1006
#, java-format
msgid ""
"Are you sure you want to delete the torrent \\''{0}\\'' and all downloaded "
"data?"
msgstr ""
"Sind Sie sicher, dass Sie die Torrentdatei \\''{0}\\'' und alle "
"heruntergeladenen Daten löschen wollen?"
msgid "Are you sure you want to delete the torrent \\''{0}\\'' and all downloaded data?"
msgstr "Sind Sie sicher, dass Sie die Torrentdatei \\''{0}\\'' und alle heruntergeladenen Daten löschen wollen?"
#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:1009
msgid "Delete"
@@ -676,11 +635,8 @@ msgid "From URL"
msgstr "Quell-URL"
#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:1193
msgid ""
"Enter the torrent file download URL (I2P only), magnet link, or maggot link"
msgstr ""
"Gib die Download-URL der torrent-Datei (nur I2P), einen Magnet- oder einen "
"Maggotlink an!"
msgid "Enter the torrent file download URL (I2P only), magnet link, or maggot link"
msgstr "Gib die Download-URL der torrent-Datei (nur I2P), einen Magnet- oder einen Maggotlink an!"
#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:1198
msgid "Add torrent"
@@ -792,12 +748,8 @@ msgid "Use open trackers also"
msgstr "Benutze auch OpenTracker"
#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:1358
msgid ""
"If checked, announce torrents to open trackers as well as the tracker listed "
"in the torrent file"
msgstr ""
"Wenn markiert, wird der Torrent neben dem angegebenen Tracker auch bei den "
"OpenTrackern bekannt gegeben."
msgid "If checked, announce torrents to open trackers as well as the tracker listed in the torrent file"
msgstr "Wenn markiert, wird der Torrent neben dem angegebenen Tracker auch bei den OpenTrackern bekannt gegeben."
#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:1362
msgid "Open tracker announce URLs"
@@ -932,90 +884,70 @@ msgstr "Prioritäten speichern"
msgid "Torrent fetched from {0}"
msgstr "Torrent geholt von {0}"
#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:1989
#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:1988
#, java-format
msgid "Torrent already running: {0}"
msgstr "Torrent läuft schon: {0}"
#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:1991
#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:1990
#, java-format
msgid "Torrent already in the queue: {0}"
msgstr "Torrent ist schon in der Warteschlange: {0}"
#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:1997
#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:1996
#, java-format
msgid "Torrent at {0} was not valid"
msgstr "Torrent in {0} war nicht gültig"
#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:2004
#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:2003
#, java-format
msgid "Torrent was not retrieved from {0}"
msgstr "Torrent wurde nicht geladen von {0}"
#~ msgid "Torrent file must originate from an I2P-based tracker"
#~ msgstr "Die Torrentdatei muss von einem Tracker in I2P stammen."
#~ msgid " theme locked and loaded."
#~ msgstr "Aufmachung geladen"
#~ msgid "Estimated Download Time"
#~ msgstr "geschätzte verbleibende Zeit bis zur Fertigstellung"
#~ msgid "Torrent file {0} does not exist"
#~ msgstr "Torrentdatei {0} existiert nicht"
#~ msgid "Copying torrent to {0}"
#~ msgstr "Kopiere Torrent nach {0}"
#~ msgid "from {0}"
#~ msgstr "von {0}"
#~ msgid "Downloading"
#~ msgstr "lade herunter"
#~ msgid "FileSize"
#~ msgstr "Größe"
#~ msgid "Download Status"
#~ msgstr "Zustand"
#~ msgid "size: {0}B"
#~ msgstr "Größe: {0}Byte"
#~ msgid "Directory to store torrents and data"
#~ msgstr "Verzeichnis zum Speichern von Torrentdateien und Daten"
#~ msgid "Do not download"
#~ msgstr "nicht herunterladen"
#~ msgid "Details"
#~ msgstr "Details"
#~ msgid "Cannot change the I2CP settings while torrents are active"
#~ msgstr ""
#~ "Kann nicht die I2CP Einstellungen ändern während Torrents aktiv sind."
#~ msgid "Non-i2p tracker in \"{0}\", deleting it from our list of trackers!"
#~ msgstr ""
#~ "Nicht-I2P Tracker in\"{0}\", entferne ihn aus unserer Liste der Tracker!"
#~ msgid "{0} torrents"
#~ msgstr "{0} Torrents"
#~ msgid "Uninteresting"
#~ msgstr "nicht interessiert"
#~ msgid "Choked"
#~ msgstr "Gestaut"
#~ msgid "Uninterested"
#~ msgstr "Nicht interessiert"
#~ msgid "Choking"
#~ msgstr "Stau"
#~ msgid "Custom tracker URL"
#~ msgstr "Spezifische Tracker URL"
#~ msgid "Configure"
#~ msgstr "Einstellungen"

View File

@@ -8,7 +8,7 @@ msgid ""
msgstr ""
"Project-Id-Version: I2P i2psnark\n"
"Report-Msgid-Bugs-To: \n"
"POT-Creation-Date: 2011-03-03 18:28+0000\n"
"POT-Creation-Date: 2011-06-11 08:22+0000\n"
"PO-Revision-Date: 2010-06-15 14:09+0100\n"
"Last-Translator: duck <duck@mail.i2p>\n"
"Language-Team: duck <duck@mail.i2p>\n"
@@ -128,16 +128,16 @@ msgid "Cannot open \"{0}\""
msgstr ""
#. TODO - if the existing one is a magnet, delete it and add the metainfo instead?
#: ../java/src/org/klomp/snark/SnarkManager.java:586
#: ../java/src/org/klomp/snark/SnarkManager.java:661
#: ../java/src/org/klomp/snark/SnarkManager.java:716
#: ../java/src/org/klomp/snark/SnarkManager.java:589
#: ../java/src/org/klomp/snark/SnarkManager.java:665
#: ../java/src/org/klomp/snark/SnarkManager.java:720
#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:1976
#, java-format
msgid "Torrent with this info hash is already running: {0}"
msgstr ""
#. addMessage(_("Warning - No I2P trackers in \"{0}\", will announce to I2P open trackers and DHT only.", info.getName()));
#: ../java/src/org/klomp/snark/SnarkManager.java:593
#: ../java/src/org/klomp/snark/SnarkManager.java:596
#, java-format
msgid ""
"Warning - No I2P trackers in \"{0}\", will announce to I2P open trackers "
@@ -145,136 +145,141 @@ msgid ""
msgstr ""
#. addMessage(_("Warning - No I2P trackers in \"{0}\", and DHT and open trackers are disabled, you should enable open trackers or DHT before starting the torrent.", info.getName()));
#: ../java/src/org/klomp/snark/SnarkManager.java:598
#: ../java/src/org/klomp/snark/SnarkManager.java:601
#, java-format
msgid ""
"Warning - No I2P Trackers found in \"{0}\". Make sure Open Tracker is "
"enabled before starting this torrent."
msgstr ""
#: ../java/src/org/klomp/snark/SnarkManager.java:619
#: ../java/src/org/klomp/snark/SnarkManager.java:622
#, java-format
msgid "Torrent in \"{0}\" is invalid"
msgstr ""
#: ../java/src/org/klomp/snark/SnarkManager.java:624
#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:1999
#: ../java/src/org/klomp/snark/SnarkManager.java:627
#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:1998
#, java-format
msgid "ERROR - Out of memory, cannot create torrent from {0}"
msgstr ""
#: ../java/src/org/klomp/snark/SnarkManager.java:635
#: ../java/src/org/klomp/snark/SnarkManager.java:639
#, java-format
msgid "Torrent added and started: \"{0}\""
msgstr ""
#: ../java/src/org/klomp/snark/SnarkManager.java:637
#: ../java/src/org/klomp/snark/SnarkManager.java:641
#, java-format
msgid "Torrent added: \"{0}\""
msgstr ""
#: ../java/src/org/klomp/snark/SnarkManager.java:672
#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:490
#: ../java/src/org/klomp/snark/SnarkManager.java:676
#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:491
#, java-format
msgid "Fetching {0}"
msgstr ""
#: ../java/src/org/klomp/snark/SnarkManager.java:675
#: ../java/src/org/klomp/snark/SnarkManager.java:679
#, java-format
msgid ""
"We have no saved peers and no other torrents are running. Fetch of {0} will "
"not succeed until you start another torrent."
msgstr ""
#: ../java/src/org/klomp/snark/SnarkManager.java:679
#: ../java/src/org/klomp/snark/SnarkManager.java:683
#, java-format
msgid "Adding {0}"
msgstr ""
#: ../java/src/org/klomp/snark/SnarkManager.java:726
#: ../java/src/org/klomp/snark/SnarkManager.java:749
#: ../java/src/org/klomp/snark/SnarkManager.java:1174
#: ../java/src/org/klomp/snark/SnarkManager.java:730
#: ../java/src/org/klomp/snark/SnarkManager.java:753
#: ../java/src/org/klomp/snark/SnarkManager.java:1180
#, java-format
msgid "Failed to copy torrent file to {0}"
msgstr ""
#: ../java/src/org/klomp/snark/SnarkManager.java:972
#: ../java/src/org/klomp/snark/SnarkManager.java:976
#, java-format
msgid "Too many files in \"{0}\" ({1}), deleting it!"
msgstr ""
#: ../java/src/org/klomp/snark/SnarkManager.java:974
#: ../java/src/org/klomp/snark/SnarkManager.java:978
#, java-format
msgid "Torrent file \"{0}\" cannot end in \".torrent\", deleting it!"
msgstr ""
#: ../java/src/org/klomp/snark/SnarkManager.java:976
#: ../java/src/org/klomp/snark/SnarkManager.java:980
#, java-format
msgid "No pieces in \"{0}\", deleting it!"
msgstr ""
#: ../java/src/org/klomp/snark/SnarkManager.java:978
#: ../java/src/org/klomp/snark/SnarkManager.java:982
#, java-format
msgid "Too many pieces in \"{0}\", limit is {1}, deleting it!"
msgstr ""
#: ../java/src/org/klomp/snark/SnarkManager.java:980
#: ../java/src/org/klomp/snark/SnarkManager.java:984
#, java-format
msgid "Pieces are too large in \"{0}\" ({1}B), deleting it."
msgstr ""
#: ../java/src/org/klomp/snark/SnarkManager.java:981
#: ../java/src/org/klomp/snark/SnarkManager.java:985
#, java-format
msgid "Limit is {0}B"
msgstr ""
#: ../java/src/org/klomp/snark/SnarkManager.java:989
#: ../java/src/org/klomp/snark/SnarkManager.java:987
#, java-format
msgid "Torrent \"{0}\" has no data, deleting it!"
msgstr ""
#: ../java/src/org/klomp/snark/SnarkManager.java:995
#, java-format
msgid "Torrents larger than {0}B are not supported yet, deleting \"{1}\""
msgstr ""
#: ../java/src/org/klomp/snark/SnarkManager.java:1005
#: ../java/src/org/klomp/snark/SnarkManager.java:1011
#, java-format
msgid "Error: Could not remove the torrent {0}"
msgstr ""
#: ../java/src/org/klomp/snark/SnarkManager.java:1026
#: ../java/src/org/klomp/snark/SnarkManager.java:1044
#: ../java/src/org/klomp/snark/SnarkManager.java:1032
#: ../java/src/org/klomp/snark/SnarkManager.java:1050
#, java-format
msgid "Torrent stopped: \"{0}\""
msgstr ""
#: ../java/src/org/klomp/snark/SnarkManager.java:1065
#: ../java/src/org/klomp/snark/SnarkManager.java:1071
#, java-format
msgid "Torrent removed: \"{0}\""
msgstr ""
#: ../java/src/org/klomp/snark/SnarkManager.java:1073
#: ../java/src/org/klomp/snark/SnarkManager.java:1079
#, java-format
msgid "Adding torrents in {0}"
msgstr ""
#: ../java/src/org/klomp/snark/SnarkManager.java:1122
#: ../java/src/org/klomp/snark/SnarkManager.java:1128
#, java-format
msgid "Download finished: {0}"
msgstr ""
#: ../java/src/org/klomp/snark/SnarkManager.java:1170
#: ../java/src/org/klomp/snark/SnarkManager.java:1176
#, java-format
msgid "Metainfo received for {0}"
msgstr ""
#: ../java/src/org/klomp/snark/SnarkManager.java:1171
#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:525
#: ../java/src/org/klomp/snark/SnarkManager.java:1177
#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:526
#, java-format
msgid "Starting up torrent {0}"
msgstr ""
#: ../java/src/org/klomp/snark/SnarkManager.java:1225
#: ../java/src/org/klomp/snark/SnarkManager.java:1231
msgid "Unable to connect to I2P!"
msgstr ""
#: ../java/src/org/klomp/snark/SnarkManager.java:1231
#: ../java/src/org/klomp/snark/SnarkManager.java:1237
#, java-format
msgid "Unable to add {0}"
msgstr ""
@@ -365,79 +370,79 @@ msgstr ""
msgid "Up Rate"
msgstr ""
#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:365
#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:366
msgid "Stop all torrents and the I2P tunnel"
msgstr ""
#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:367
#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:368
msgid "Stop All"
msgstr ""
#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:376
#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:377
msgid "Start all torrents and the I2P tunnel"
msgstr ""
#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:378
#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:379
msgid "Start All"
msgstr ""
#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:397
#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:398
msgid "No torrents loaded."
msgstr ""
#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:402
#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:403
msgid "Totals"
msgstr ""
#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:404
#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:405
#, java-format
msgid "1 torrent"
msgid_plural "{0} torrents"
msgstr[0] ""
msgstr[1] ""
#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:407
#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:408
#, java-format
msgid "1 connected peer"
msgid_plural "{0} connected peers"
msgstr[0] ""
msgstr[1] ""
#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:496
#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:497
#, java-format
msgid "Invalid URL: Must start with \"http://\", \"{0}\", or \"{1}\""
msgstr ""
#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:544
#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:571
#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:545
#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:572
#, java-format
msgid "Magnet deleted: {0}"
msgstr ""
#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:552
#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:577
#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:553
#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:578
#, java-format
msgid "Torrent file deleted: {0}"
msgstr ""
#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:583
#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:593
#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:584
#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:594
#, java-format
msgid "Data file deleted: {0}"
msgstr ""
#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:585
#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:595
#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:586
#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:596
#, java-format
msgid "Data file could not be deleted: {0}"
msgstr ""
#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:604
#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:605
#, java-format
msgid "Data dir deleted: {0}"
msgstr ""
#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:637
#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:638
msgid "Error creating torrent - you must select a tracker"
msgstr ""
@@ -888,22 +893,22 @@ msgstr ""
msgid "Torrent fetched from {0}"
msgstr ""
#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:1989
#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:1988
#, java-format
msgid "Torrent already running: {0}"
msgstr ""
#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:1991
#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:1990
#, java-format
msgid "Torrent already in the queue: {0}"
msgstr ""
#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:1997
#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:1996
#, java-format
msgid "Torrent at {0} was not valid"
msgstr ""
#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:2004
#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:2003
#, java-format
msgid "Torrent was not retrieved from {0}"
msgstr ""

View File

@@ -8,8 +8,8 @@ msgid ""
msgstr ""
"Project-Id-Version: I2P\n"
"Report-Msgid-Bugs-To: https://trac.i2p2.de/\n"
"POT-Creation-Date: 2011-03-03 18:28+0000\n"
"PO-Revision-Date: 2011-04-03 01:46+0100\n"
"POT-Creation-Date: 2011-06-17 20:12+0000\n"
"PO-Revision-Date: 2011-06-05 10:36+0100\n"
"Last-Translator: mixxy <m1xxy@mail.i2p>\n"
"Language-Team: Spanish (Castilian) <None>\n"
"MIME-Version: 1.0\n"
@@ -45,7 +45,9 @@ msgstr "Tiempo de espera al inicio fue cambiada a {0}."
#: ../java/src/org/klomp/snark/SnarkManager.java:386
msgid "I2CP and tunnel changes will take effect after stopping all torrents"
msgstr "Cambios de I2CP y del túnel tomarán efecto despues de detener todos los torrents."
msgstr ""
"Cambios de I2CP y del túnel tomarán efecto despues de detener todos los "
"torrents."
#: ../java/src/org/klomp/snark/SnarkManager.java:393
msgid "Disconnecting old I2CP destination"
@@ -57,8 +59,11 @@ msgid "I2CP settings changed to {0}"
msgstr "Preferencias de I2CP cambiadas a {0}"
#: ../java/src/org/klomp/snark/SnarkManager.java:402
msgid "Unable to connect with the new settings, reverting to the old I2CP settings"
msgstr "Conectarse no fue posíble con las nuevas preferencias I2CP, utilizaré las anteriores."
msgid ""
"Unable to connect with the new settings, reverting to the old I2CP settings"
msgstr ""
"Conectarse no fue posíble con las nuevas preferencias I2CP, utilizaré las "
"anteriores."
#: ../java/src/org/klomp/snark/SnarkManager.java:406
msgid "Unable to reconnect with the old settings!"
@@ -83,20 +88,27 @@ msgstr "Arranque automático desactivado"
#: ../java/src/org/klomp/snark/SnarkManager.java:437
msgid "Enabled open trackers - torrent restart required to take effect."
msgstr "Rastreadores abiertos activados - Para aplicar ello es necesario que reinicies los torrents."
msgstr ""
"Rastreadores abiertos activados - Para aplicar ello es necesario que "
"reinicies los torrents."
#: ../java/src/org/klomp/snark/SnarkManager.java:439
msgid "Disabled open trackers - torrent restart required to take effect."
msgstr "Rastreadores abiertos desactivados - Para aplicar ello es necesario que reinicies los torrents."
msgstr ""
"Rastreadores abiertos desactivados - Para aplicar ello es necesario que "
"reinicies los torrents."
#: ../java/src/org/klomp/snark/SnarkManager.java:447
msgid "Open Tracker list changed - torrent restart required to take effect."
msgstr "Lista de rastreadores abiertos cambiada - Para aplicar ello es necesario que reinicies los torrents."
msgstr ""
"Lista de rastreadores abiertos cambiada - Para aplicar ello es necesario que "
"reinicies los torrents."
#: ../java/src/org/klomp/snark/SnarkManager.java:454
#, java-format
msgid "{0} theme loaded, return to main i2psnark page to view."
msgstr "Tema {0} cargado. ¡Vuelve a la página principal de i2psnark para verlo!"
msgstr ""
"Tema {0} cargado. ¡Vuelve a la página principal de i2psnark para verlo!"
#: ../java/src/org/klomp/snark/SnarkManager.java:461
msgid "Configuration unchanged."
@@ -126,152 +138,168 @@ msgstr "Error: No se ha podido añadir el torrent {0}."
msgid "Cannot open \"{0}\""
msgstr "No se puede abrir \"{0}\""
#. TODO - if the existing one is a magnet, delete it and add the metainfo
#. instead?
#: ../java/src/org/klomp/snark/SnarkManager.java:586
#: ../java/src/org/klomp/snark/SnarkManager.java:661
#: ../java/src/org/klomp/snark/SnarkManager.java:716
#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:1976
#. TODO - if the existing one is a magnet, delete it and add the metainfo instead?
#: ../java/src/org/klomp/snark/SnarkManager.java:589
#: ../java/src/org/klomp/snark/SnarkManager.java:665
#: ../java/src/org/klomp/snark/SnarkManager.java:720
#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:1978
#, java-format
msgid "Torrent with this info hash is already running: {0}"
msgstr "Ya hay un Torrent con este hash ejecutándose: {0}"
#. addMessage(_("Warning - No I2P trackers in \"{0}\", will announce to I2P
#. open trackers and DHT only.", info.getName()));
#: ../java/src/org/klomp/snark/SnarkManager.java:593
#. addMessage(_("Warning - No I2P trackers in \"{0}\", will announce to I2P open trackers and DHT only.", info.getName()));
#: ../java/src/org/klomp/snark/SnarkManager.java:596
#, java-format
msgid "Warning - No I2P trackers in \"{0}\", will announce to I2P open trackers only."
msgstr "Advertencia - No hay rastreadores de I2P en \"{0}\", se anunciará solamente a los rastreadores I2P abiertos."
msgid ""
"Warning - No I2P trackers in \"{0}\", will announce to I2P open trackers "
"only."
msgstr ""
"Advertencia - No hay rastreadores de I2P en \"{0}\", se anunciará solamente "
"a los rastreadores I2P abiertos."
#. addMessage(_("Warning - No I2P trackers in \"{0}\", and DHT and open
#. trackers are disabled, you should enable open trackers or DHT before
#. starting the torrent.", info.getName()));
#: ../java/src/org/klomp/snark/SnarkManager.java:598
#. addMessage(_("Warning - No I2P trackers in \"{0}\", and DHT and open trackers are disabled, you should enable open trackers or DHT before starting the torrent.", info.getName()));
#: ../java/src/org/klomp/snark/SnarkManager.java:601
#, java-format
msgid "Warning - No I2P Trackers found in \"{0}\". Make sure Open Tracker is enabled before starting this torrent."
msgstr "Advertencia - No se encuentran rastreadores de I2P en \"{0}\". Asegúrate de que OpenTracker esté activado antes de iniciar este torrent."
msgid ""
"Warning - No I2P Trackers found in \"{0}\". Make sure Open Tracker is "
"enabled before starting this torrent."
msgstr ""
"Advertencia - No se encuentran rastreadores de I2P en \"{0}\". Asegúrate de "
"que OpenTracker esté activado antes de iniciar este torrent."
#: ../java/src/org/klomp/snark/SnarkManager.java:619
#: ../java/src/org/klomp/snark/SnarkManager.java:622
#, java-format
msgid "Torrent in \"{0}\" is invalid"
msgstr "El archivo .torrent en \"{0}\" no es válido."
#: ../java/src/org/klomp/snark/SnarkManager.java:624
#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:1999
#: ../java/src/org/klomp/snark/SnarkManager.java:627
#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:2000
#, java-format
msgid "ERROR - Out of memory, cannot create torrent from {0}"
msgstr "ERROR - Falta de memoria, no se puede crear un torrent de {0}."
#: ../java/src/org/klomp/snark/SnarkManager.java:635
#: ../java/src/org/klomp/snark/SnarkManager.java:639
#, java-format
msgid "Torrent added and started: \"{0}\""
msgstr "Torrent añadido e iniciado: \"{0}\""
#: ../java/src/org/klomp/snark/SnarkManager.java:637
#: ../java/src/org/klomp/snark/SnarkManager.java:641
#, java-format
msgid "Torrent added: \"{0}\""
msgstr "Torrent añadido: \"{0}\""
#: ../java/src/org/klomp/snark/SnarkManager.java:672
#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:490
#: ../java/src/org/klomp/snark/SnarkManager.java:676
#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:491
#, java-format
msgid "Fetching {0}"
msgstr "Recogiendo {0}"
#: ../java/src/org/klomp/snark/SnarkManager.java:675
#, java-format
msgid "We have no saved peers and no other torrents are running. Fetch of {0} will not succeed until you start another torrent."
msgstr "No tenemos guardado ningún par y no se está activo ningún otro torrent. La obtención de {0} no tendrá éxito hasta que inicies otro torrent."
#: ../java/src/org/klomp/snark/SnarkManager.java:679
#, java-format
msgid ""
"We have no saved peers and no other torrents are running. Fetch of {0} will "
"not succeed until you start another torrent."
msgstr ""
"No tenemos guardado ningún par y no se está activo ningún otro torrent. La "
"obtención de {0} no tendrá éxito hasta que inicies otro torrent."
#: ../java/src/org/klomp/snark/SnarkManager.java:683
#, java-format
msgid "Adding {0}"
msgstr "Añadiendo {0}"
#: ../java/src/org/klomp/snark/SnarkManager.java:726
#: ../java/src/org/klomp/snark/SnarkManager.java:749
#: ../java/src/org/klomp/snark/SnarkManager.java:1174
#: ../java/src/org/klomp/snark/SnarkManager.java:730
#: ../java/src/org/klomp/snark/SnarkManager.java:753
#: ../java/src/org/klomp/snark/SnarkManager.java:1180
#, java-format
msgid "Failed to copy torrent file to {0}"
msgstr "No se pudo copiar el torrent a {0}."
#: ../java/src/org/klomp/snark/SnarkManager.java:972
#: ../java/src/org/klomp/snark/SnarkManager.java:976
#, java-format
msgid "Too many files in \"{0}\" ({1}), deleting it!"
msgstr "Hay demasiados archivos en \"{0}\", se borrará ({1}). "
#: ../java/src/org/klomp/snark/SnarkManager.java:974
#: ../java/src/org/klomp/snark/SnarkManager.java:978
#, java-format
msgid "Torrent file \"{0}\" cannot end in \".torrent\", deleting it!"
msgstr "Archivo de datos del torrent \"{0}\" no puede terminar en \".torrent' y será borrado."
msgstr ""
"Archivo de datos del torrent \"{0}\" no puede terminar en \".torrent' y será "
"borrado."
#: ../java/src/org/klomp/snark/SnarkManager.java:976
#: ../java/src/org/klomp/snark/SnarkManager.java:980
#, java-format
msgid "No pieces in \"{0}\", deleting it!"
msgstr "No hay partes en \"{0}\", se borrará."
#: ../java/src/org/klomp/snark/SnarkManager.java:978
#: ../java/src/org/klomp/snark/SnarkManager.java:982
#, java-format
msgid "Too many pieces in \"{0}\", limit is {1}, deleting it!"
msgstr "Hay demasiadas partes en \"{0}\" y el límite es {1}. Se borrarán."
#: ../java/src/org/klomp/snark/SnarkManager.java:980
#: ../java/src/org/klomp/snark/SnarkManager.java:984
#, java-format
msgid "Pieces are too large in \"{0}\" ({1}B), deleting it."
msgstr "Partes en \"{0}\" son demasiado grandes ({1}B). Se borrarán."
#: ../java/src/org/klomp/snark/SnarkManager.java:981
#: ../java/src/org/klomp/snark/SnarkManager.java:985
#, java-format
msgid "Limit is {0}B"
msgstr "El límite es de \"{0}\"Bytes"
#: ../java/src/org/klomp/snark/SnarkManager.java:989
#: ../java/src/org/klomp/snark/SnarkManager.java:987
#, java-format
msgid "Torrent \"{0}\" has no data, deleting it!"
msgstr "El torrent \"{0}\" no contiene datos y será borrado."
#: ../java/src/org/klomp/snark/SnarkManager.java:995
#, java-format
msgid "Torrents larger than {0}B are not supported yet, deleting \"{1}\""
msgstr "Torrents más grandes que \"{0}\"Bytes aún no funcionan, se borrará \"{1}\"."
msgstr ""
"Torrents más grandes que \"{0}\"Bytes aún no funcionan, se borrará \"{1}\"."
#: ../java/src/org/klomp/snark/SnarkManager.java:1005
#: ../java/src/org/klomp/snark/SnarkManager.java:1011
#, java-format
msgid "Error: Could not remove the torrent {0}"
msgstr "Error: No se pudo quitar el torrent \"{0}\"."
#: ../java/src/org/klomp/snark/SnarkManager.java:1026
#: ../java/src/org/klomp/snark/SnarkManager.java:1044
#: ../java/src/org/klomp/snark/SnarkManager.java:1032
#: ../java/src/org/klomp/snark/SnarkManager.java:1050
#, java-format
msgid "Torrent stopped: \"{0}\""
msgstr "Torrent detenido: \"{0}\""
#: ../java/src/org/klomp/snark/SnarkManager.java:1065
#: ../java/src/org/klomp/snark/SnarkManager.java:1071
#, java-format
msgid "Torrent removed: \"{0}\""
msgstr "Torrent quitado: \"{0}\""
#: ../java/src/org/klomp/snark/SnarkManager.java:1073
#: ../java/src/org/klomp/snark/SnarkManager.java:1079
#, java-format
msgid "Adding torrents in {0}"
msgstr "Añadiendo torrents en {0}"
#: ../java/src/org/klomp/snark/SnarkManager.java:1122
#: ../java/src/org/klomp/snark/SnarkManager.java:1128
#, java-format
msgid "Download finished: {0}"
msgstr "Terminada la descarga de \"{0}\""
#: ../java/src/org/klomp/snark/SnarkManager.java:1170
#: ../java/src/org/klomp/snark/SnarkManager.java:1176
#, java-format
msgid "Metainfo received for {0}"
msgstr "Metainfo recibida para {0}"
#: ../java/src/org/klomp/snark/SnarkManager.java:1171
#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:525
#: ../java/src/org/klomp/snark/SnarkManager.java:1177
#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:526
#, java-format
msgid "Starting up torrent {0}"
msgstr "Iniciando el torrent {0}"
#: ../java/src/org/klomp/snark/SnarkManager.java:1225
#: ../java/src/org/klomp/snark/SnarkManager.java:1231
msgid "Unable to connect to I2P!"
msgstr "Imposible de conectarse con I2P"
#: ../java/src/org/klomp/snark/SnarkManager.java:1231
#: ../java/src/org/klomp/snark/SnarkManager.java:1237
#, java-format
msgid "Unable to add {0}"
msgstr "Imposible de añadir {0}"
@@ -299,7 +327,7 @@ msgid "Forum"
msgstr "Foro"
#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:284
#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:1719
#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:1721
msgid "Status"
msgstr "Estado"
@@ -314,8 +342,8 @@ msgid "Show Peers"
msgstr "mostrar pares"
#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:306
#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:1643
#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:1659
#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:1645
#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:1661
msgid "Torrent"
msgstr "Torrent"
@@ -362,79 +390,79 @@ msgstr "Tasa"
msgid "Up Rate"
msgstr "Tasa de subida"
#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:365
#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:366
msgid "Stop all torrents and the I2P tunnel"
msgstr "Detener todos los torrents y el túnel I2P"
#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:367
#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:368
msgid "Stop All"
msgstr "Detener todos"
#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:376
#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:377
msgid "Start all torrents and the I2P tunnel"
msgstr "Iniciar todos los torrents y el túnel I2P"
#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:378
#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:379
msgid "Start All"
msgstr "Arrancar todos"
#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:397
#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:398
msgid "No torrents loaded."
msgstr "No está cargado ningún torrent"
#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:402
#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:403
msgid "Totals"
msgstr "Total"
#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:404
#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:405
#, java-format
msgid "1 torrent"
msgid_plural "{0} torrents"
msgstr[0] "1 torrent"
msgstr[1] "{0} torrents"
#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:407
#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:408
#, java-format
msgid "1 connected peer"
msgid_plural "{0} connected peers"
msgstr[0] "1 par conectado"
msgstr[1] "{0} pares conectados"
#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:496
#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:497
#, java-format
msgid "Invalid URL: Must start with \"http://\", \"{0}\", or \"{1}\""
msgstr "URL no válida: debe comenzar con \"http://\", \"{0}\", o \"{1}\"."
#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:544
#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:571
#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:545
#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:572
#, java-format
msgid "Magnet deleted: {0}"
msgstr "Magnet eliminado: {0}"
#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:552
#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:577
#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:553
#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:578
#, java-format
msgid "Torrent file deleted: {0}"
msgstr "Borrado archivo torrent: {0}"
#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:583
#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:593
#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:584
#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:594
#, java-format
msgid "Data file deleted: {0}"
msgstr "Borrado el archivo de datos: {0}"
#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:585
#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:595
#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:586
#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:596
#, java-format
msgid "Data file could not be deleted: {0}"
msgstr "No se pudo borrar el archivo de datos: {0}"
#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:604
#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:605
#, java-format
msgid "Data dir deleted: {0}"
msgstr "Ha sido borrada la carpeta de datos: {0}"
#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:637
#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:638
msgid "Error creating torrent - you must select a tracker"
msgstr "Error al crear el torrents - Tienes que elegir un rastreador."
@@ -445,8 +473,12 @@ msgstr "Torrent creado para \"{0}\""
#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:655
#, java-format
msgid "Many I2P trackers require you to register new torrents before seeding - please do so before starting \"{0}\""
msgstr "Muchos rastreadores en I2P requieren que te registres, antes de que puedas subir el torrent. Por favor, ¡hazlo antes de iniciar \"{0}\"!"
msgid ""
"Many I2P trackers require you to register new torrents before seeding - "
"please do so before starting \"{0}\""
msgstr ""
"Muchos rastreadores en I2P requieren que te registres, antes de que puedas "
"subir el torrent. Por favor, ¡hazlo antes de iniciar \"{0}\"!"
#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:657
#, java-format
@@ -460,7 +492,8 @@ msgstr "No se puede crear un torrent para datos inexistentes: {0}"
#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:663
msgid "Error creating torrent - you must enter a file or directory"
msgstr "Error al crear el torrent - Tienes que especificar un archivo o una carpeta."
msgstr ""
"Error al crear el torrent - Tienes que especificar un archivo o una carpeta."
#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:666
msgid "Stopping all torrents and closing the I2P tunnel."
@@ -500,8 +533,8 @@ msgid "Seeding"
msgstr "sembrando"
#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:828
#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:1665
#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:1770
#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:1667
#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:1772
msgid "Complete"
msgstr "completo"
@@ -529,7 +562,7 @@ msgid "Torrent details"
msgstr "Detalles del torrent"
#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:898
#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:1160
#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:1162
msgid "Info"
msgstr "Info"
@@ -559,15 +592,21 @@ msgstr "Iniciar"
#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:982
msgid "Remove the torrent from the active list, deleting the .torrent file"
msgstr "Quita el torrent de la lista de los torrents activos borrando el archivo .torrent"
msgstr ""
"Quita el torrent de la lista de los torrents activos borrando el archivo ."
"torrent"
#. Can't figure out how to escape double quotes inside the onclick string.
#. Single quotes in translate strings with parameters must be doubled.
#. Then the remaining single quite must be escaped
#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:987
#, java-format
msgid "Are you sure you want to delete the file \\''{0}.torrent\\'' (downloaded data will not be deleted) ?"
msgstr "¿Estás seguro de que quieres borrar el archivo \\''{0}.torrent\\''? (Datos bajados no se borrarán.)"
msgid ""
"Are you sure you want to delete the file \\''{0}.torrent\\'' (downloaded "
"data will not be deleted) ?"
msgstr ""
"¿Estás seguro de que quieres borrar el archivo \\''{0}.torrent\\''? (Datos "
"bajados no se borrarán.)"
#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:990
msgid "Remove"
@@ -582,318 +621,330 @@ msgstr "Borrar el archivo torrent y el/los archivo(s) de datos pertenecientes"
#. Then the remaining single quite must be escaped
#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:1006
#, java-format
msgid "Are you sure you want to delete the torrent \\''{0}\\'' and all downloaded data?"
msgstr "¿Estás seguro de que quieres borrar el archivo torrent \\''{0}\\'' y todos los datos descargados de este torrent?"
msgid ""
"Are you sure you want to delete the torrent \\''{0}\\'' and all downloaded "
"data?"
msgstr ""
"¿Estás seguro de que quieres borrar el archivo torrent \\''{0}\\'' y todos "
"los datos descargados de este torrent?"
#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:1009
msgid "Delete"
msgstr "Borrar"
#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:1042
#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:1044
msgid "Unknown"
msgstr "desconocido"
#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:1054
#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:1056
msgid "Seed"
msgstr "Sembrador"
#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:1077
#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:1079
msgid "Uninteresting (The peer has no pieces we need)"
msgstr "no interesante (El par no tiene partes que nos interesen.)"
#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:1079
#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:1081
msgid "Choked (The peer is not allowing us to request pieces)"
msgstr "moderado (De momento el par no nos permite solicitar más partes)"
#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:1099
#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:1101
msgid "Uninterested (We have no pieces the peer needs)"
msgstr "desinteresado (No tenemos las partes que el par quiere.)"
#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:1101
#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:1103
msgid "Choking (We are not allowing the peer to request pieces)"
msgstr "moderando (De momento no se le permite al par solicitar más partes)"
#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:1159
#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:1161
#, java-format
msgid "Details at {0} tracker"
msgstr "Detalles en el rastreador {0}"
#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:1188
#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:1190
msgid "Add Torrent"
msgstr "Añadir un torrent"
#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:1190
#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:1192
msgid "From URL"
msgstr "URL fuente"
#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:1193
msgid "Enter the torrent file download URL (I2P only), magnet link, or maggot link"
msgstr "Introduce la URL de descarga de torrent (I2P solamente), enlace magnet o un enlace maggot"
#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:1195
msgid ""
"Enter the torrent file download URL (I2P only), magnet link, or maggot link"
msgstr ""
"Introduce la URL de descarga de torrent (I2P solamente), enlace magnet o un "
"enlace maggot"
#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:1198
#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:1200
msgid "Add torrent"
msgstr "Añadir torrent"
#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:1201
#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:1203
#, java-format
msgid "You can also copy .torrent files to: {0}."
msgstr "También puedes copiar archivos torrent a {0}."
#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:1203
#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:1205
msgid "Removing a .torrent will cause it to stop."
msgstr "Quitar un archivo torrent resultará en que se detenga el torrent perteneciente."
msgstr ""
"Quitar un archivo torrent resultará en que se detenga el torrent "
"perteneciente."
#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:1226
#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:1228
msgid "Create Torrent"
msgstr "Crear un torrent"
#. out.write("From file: <input type=\"file\" name=\"newFile\" size=\"50\"
#. value=\"" + newFile + "\" /><br>\n");
#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:1229
#. out.write("From file: <input type=\"file\" name=\"newFile\" size=\"50\" value=\"" + newFile + "\" /><br>\n");
#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:1231
msgid "Data to seed"
msgstr "Datos para sembrar"
#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:1233
msgid "File or directory to seed (must be within the specified path)"
msgstr "Archivo o carpeta para sembrar (tiene que estár en la carpeta especificada)"
#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:1235
#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:1684
msgid "File or directory to seed (must be within the specified path)"
msgstr ""
"Archivo o carpeta para sembrar (tiene que estár en la carpeta especificada)"
#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:1237
#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:1686
msgid "Tracker"
msgstr "Rastreador"
#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:1237
#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:1239
msgid "Select a tracker"
msgstr "Selecciona un rastreador"
#. out.write(_("Open trackers and DHT only"));
#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:1242
#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:1244
msgid "Open trackers only"
msgstr "Sólo rastreadores abiertos"
#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:1257
#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:1259
msgid "or"
msgstr "o"
#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:1260
#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:1262
msgid "Specify custom tracker announce URL"
msgstr "¡Especifica una URL para anunciar al rastreador!"
#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:1263
#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:1265
msgid "Create torrent"
msgstr "Crear torrent"
#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:1281
#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:1420
#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:1283
#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:1422
msgid "Configuration"
msgstr "Preferencias"
#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:1285
#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:1287
msgid "Data directory"
msgstr "Carpeta de datos"
#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:1287
#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:1289
msgid "Edit i2psnark.config and restart to change"
msgstr "Para cambiar, ¡modifica el archivo i2psnark.config y reinicia!"
#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:1291
#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:1293
msgid "Auto start"
msgstr "Arranque automático"
#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:1295
#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:1297
msgid "If checked, automatically start torrents that are added"
msgstr "Si marcado, los torrents añadidos se iniciarán de forma automática."
#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:1299
#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:1301
msgid "Theme"
msgstr "Tema"
#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:1312
#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:1314
msgid "Startup delay"
msgstr "Tiempo de espera al arrancar"
#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:1314
#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:1316
msgid "minutes"
msgstr "minutos"
#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:1338
#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:1340
msgid "Total uploader limit"
msgstr "Límite global de subidores"
#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:1341
#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:1343
msgid "peers"
msgstr "pares"
#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:1345
#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:1347
msgid "Up bandwidth limit"
msgstr "Límite del ancho de banda para la subida"
#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:1348
#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:1350
msgid "Half available bandwidth recommended."
msgstr "Se recomienda la mitad del ancho de banda disponible."
#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:1350
#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:1352
msgid "View or change router bandwidth"
msgstr "Mostrar y cambiar preferencias del ancho de banda del enrutador"
#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:1354
#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:1356
msgid "Use open trackers also"
msgstr "Usar también rastreadores abiertos"
#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:1358
msgid "If checked, announce torrents to open trackers as well as the tracker listed in the torrent file"
msgstr "Si está marcado, el torrent se anunciará a los rastreadores abiertos, además de a los rastreadores especificados."
#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:1360
msgid ""
"If checked, announce torrents to open trackers as well as the tracker listed "
"in the torrent file"
msgstr ""
"Si está marcado, el torrent se anunciará a los rastreadores abiertos, además "
"de a los rastreadores especificados."
#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:1362
#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:1364
msgid "Open tracker announce URLs"
msgstr "URL(s) para anunciar a rastreadores abiertos"
#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:1374
#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:1376
msgid "Inbound Settings"
msgstr "Preferencias de entrada"
#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:1380
#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:1382
msgid "Outbound Settings"
msgstr "Preferencias de salida"
#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:1388
#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:1390
msgid "I2CP host"
msgstr "Anfitrión I2CP"
#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:1393
#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:1395
msgid "I2CP port"
msgstr "Puerto I2CP"
#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:1406
#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:1408
msgid "I2CP options"
msgstr "Opciones I2CP"
#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:1411
#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:1413
msgid "Save configuration"
msgstr "Guardar ajustes"
#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:1436
#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:1438
#, java-format
msgid "Invalid magnet URL {0}"
msgstr "URL de magnet no válida: {0}"
#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:1470
#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:1472
#, java-format
msgid "Invalid info hash in magnet URL {0}"
msgstr "Hash de información no válido en la URL magnet {0}"
#. * dummies for translation
#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:1500
#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:1502
#, java-format
msgid "1 hop"
msgid_plural "{0} hops"
msgstr[0] "1 salto"
msgstr[1] "{0} saltos"
#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:1501
#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:1503
#, java-format
msgid "1 tunnel"
msgid_plural "{0} tunnels"
msgstr[0] "1 túnel"
msgstr[1] "{0} túneles"
#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:1663
#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:1665
msgid "Completion"
msgstr "Completado"
msgstr "Finalización"
#. else unknown
#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:1667
#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:1716
#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:1669
#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:1718
msgid "Size"
msgstr "Tamaño"
#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:1672
#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:1674
msgid "Files"
msgstr "Archivos"
#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:1674
#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:1676
msgid "Pieces"
msgstr "Partes"
#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:1675
#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:1677
msgid "Piece size"
msgstr "Tamaño de las partes"
#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:1697
#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:1699
msgid "Magnet link"
msgstr "Enlace de magnet"
#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:1714
#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:1753
#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:1716
#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:1755
msgid "Directory"
msgstr "Carpeta"
#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:1723
#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:1725
msgid "Priority"
msgstr "Prioridad"
#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:1728
#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:1730
msgid "Up to higher level directory"
msgstr "Subir una herarquía"
#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:1758
#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:1760
msgid "Torrent not found?"
msgstr "¿No se encotró el archivo torrent?"
#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:1767
#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:1769
msgid "File not found in torrent?"
msgstr "¿Archivo no encontrado en el torrent?"
#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:1780
#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:1782
msgid "complete"
msgstr "completo"
#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:1781
#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:1783
msgid "bytes remaining"
msgstr "Bytes faltando"
#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:1806
#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:1808
msgid "Open"
msgstr "abrir"
#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:1832
#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:1834
msgid "High"
msgstr "alta"
#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:1837
#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:1839
msgid "Normal"
msgstr "normal"
#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:1842
#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:1844
msgid "Skip"
msgstr "dejar de lado"
#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:1851
#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:1853
msgid "Save priorities"
msgstr "Guardar prioridades"
#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:1967
#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:1969
#, java-format
msgid "Torrent fetched from {0}"
msgstr "Torrent obtenido desde {0}"
#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:1989
#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:1990
#, java-format
msgid "Torrent already running: {0}"
msgstr "Torrent ya en marcha: {0}"
#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:1991
#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:1992
#, java-format
msgid "Torrent already in the queue: {0}"
msgstr "Torrent ya encolado: {0}"
#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:1997
#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:1998
#, java-format
msgid "Torrent at {0} was not valid"
msgstr "Torrent en {0} no era válido"
#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:2004
#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:2005
#, java-format
msgid "Torrent was not retrieved from {0}"
msgstr "Torrent no se ha podido obtener de {0}"

View File

@@ -8,8 +8,8 @@ msgid ""
msgstr ""
"Project-Id-Version: I2P i2psnark\n"
"Report-Msgid-Bugs-To: \n"
"POT-Creation-Date: 2011-03-25 12:48+0000\n"
"PO-Revision-Date: 2011-04-11 15:45+0100\n"
"POT-Creation-Date: 2011-05-02 11:08+0000\n"
"PO-Revision-Date: 2011-05-19 07:39+0100\n"
"Last-Translator: magma <magma@mail.i2p>\n"
"Language-Team: foo <foo@bar>\n"
"Language: \n"
@@ -187,7 +187,7 @@ msgstr "Ajout {0}"
#: ../java/src/org/klomp/snark/SnarkManager.java:730
#: ../java/src/org/klomp/snark/SnarkManager.java:753
#: ../java/src/org/klomp/snark/SnarkManager.java:1178
#: ../java/src/org/klomp/snark/SnarkManager.java:1180
#, java-format
msgid "Failed to copy torrent file to {0}"
msgstr "Impossible de copier le torrent vers {0}"
@@ -222,53 +222,58 @@ msgstr "Les tronçons sont trop larges dans \"{0}\" ({1}B), suppression."
msgid "Limit is {0}B"
msgstr "La limite est de \"{0}\"octets"
#: ../java/src/org/klomp/snark/SnarkManager.java:993
#: ../java/src/org/klomp/snark/SnarkManager.java:987
#, java-format
msgid "Torrent \"{0}\" has no data, deleting it!"
msgstr "Le fichier torrent \"{0}\" n'a pas de données, suppression!"
#: ../java/src/org/klomp/snark/SnarkManager.java:995
#, java-format
msgid "Torrents larger than {0}B are not supported yet, deleting \"{1}\""
msgstr "Les torrents dont la taille est supérieure à \"{0}\"octets ne sont pas encore supportés, suppression \"{1}\"."
#: ../java/src/org/klomp/snark/SnarkManager.java:1009
#: ../java/src/org/klomp/snark/SnarkManager.java:1011
#, java-format
msgid "Error: Could not remove the torrent {0}"
msgstr "Erreur: Impossible de supprimer le torrent \"{0}\""
#: ../java/src/org/klomp/snark/SnarkManager.java:1030
#: ../java/src/org/klomp/snark/SnarkManager.java:1048
#: ../java/src/org/klomp/snark/SnarkManager.java:1032
#: ../java/src/org/klomp/snark/SnarkManager.java:1050
#, java-format
msgid "Torrent stopped: \"{0}\""
msgstr "Torrent arrêté:\"{0}\""
#: ../java/src/org/klomp/snark/SnarkManager.java:1069
#: ../java/src/org/klomp/snark/SnarkManager.java:1071
#, java-format
msgid "Torrent removed: \"{0}\""
msgstr "Torrent supprimé:\"{0}\""
#: ../java/src/org/klomp/snark/SnarkManager.java:1077
#: ../java/src/org/klomp/snark/SnarkManager.java:1079
#, java-format
msgid "Adding torrents in {0}"
msgstr "Ajout des torrents dans {0}"
#: ../java/src/org/klomp/snark/SnarkManager.java:1126
#: ../java/src/org/klomp/snark/SnarkManager.java:1128
#, java-format
msgid "Download finished: {0}"
msgstr "Téléchargement terminé:\"{0}\""
#: ../java/src/org/klomp/snark/SnarkManager.java:1174
#: ../java/src/org/klomp/snark/SnarkManager.java:1176
#, java-format
msgid "Metainfo received for {0}"
msgstr "Metainfo reçue pour {0}"
#: ../java/src/org/klomp/snark/SnarkManager.java:1175
#: ../java/src/org/klomp/snark/SnarkManager.java:1177
#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:526
#, java-format
msgid "Starting up torrent {0}"
msgstr "Démarrage du torrent {0}"
#: ../java/src/org/klomp/snark/SnarkManager.java:1229
#: ../java/src/org/klomp/snark/SnarkManager.java:1231
msgid "Unable to connect to I2P!"
msgstr "Impossible de se connecter à I2P!"
#: ../java/src/org/klomp/snark/SnarkManager.java:1235
#: ../java/src/org/klomp/snark/SnarkManager.java:1237
#, java-format
msgid "Unable to add {0}"
msgstr "Impossible dajouter {0}"
@@ -897,47 +902,66 @@ msgstr "Le torrent na pas été reçu de {0}"
#~ msgid "Torrent file must originate from an I2P-based tracker"
#~ msgstr "Le fichier torrent doit provenir d'un tracker I2P"
#~ msgid "size: {0}B"
#~ msgstr "Taille: {0}Octets"
#~ msgid "Estimated Download Time"
#~ msgstr "Temps estimé de téléchargement"
#~ msgid "Torrent file {0} does not exist"
#~ msgstr "Le fichier torrent {0} n'existe pas"
#~ msgid "Copying torrent to {0}"
#~ msgstr "Copie du torrent vers {0}"
#~ msgid "from {0}"
#~ msgstr "depuis {0}"
#~ msgid "Downloading"
#~ msgstr "Téléchargement en cours"
#~ msgid "FileSize"
#~ msgstr "Taille du fichier"
#~ msgid "Download Status"
#~ msgstr "État du téléchargement"
#~ msgid "Details"
#~ msgstr "Détails"
#~ msgid "Depuis l'URL"
#~ msgstr "Quell-URL"
#~ msgid "Directory to store torrents and data"
#~ msgstr "Répertoire de stockage des torrents et des données"
#~ msgid "Cannot change the I2CP settings while torrents are active"
#~ msgstr ""
#~ "On ne peut changer les paramètres I2CP pendant que des torrents sont "
#~ "actifs"
#~ msgid "Non-i2p tracker in \"{0}\", deleting it from our list of trackers!"
#~ msgstr ""
#~ "Tracker non-i2p dans \"{0}\", suppression de notre liste de trackers!"
#~ msgid "{0} torrents"
#~ msgstr "{0} Torrents"
#~ msgid "Uninteresting"
#~ msgstr "Pas intéressant"
#~ msgid "Choked"
#~ msgstr "Choked"
#~ msgid "Uninterested"
#~ msgstr "Pas interessé"
#~ msgid "Choking"
#~ msgstr "Choking"
#~ msgid "Custom tracker URL"
#~ msgstr "URL tracker spécifique"
#~ msgid "Configure"
#~ msgstr "Configurer"

View File

@@ -0,0 +1,920 @@
# I2P
# Copyright (C) 2009 The I2P Project
# This file is distributed under the same license as the i2psnark package.
# To contribute translations, see http://www.i2p2.de/newdevelopers
#
msgid ""
msgstr ""
"Project-Id-Version: I2P\n"
"Report-Msgid-Bugs-To: https://trac.i2p2.de/\n"
"POT-Creation-Date: 2011-06-11 08:22+0000\n"
"PO-Revision-Date: 2011-06-11 09:17+0000\n"
"Last-Translator: duck <duck@mail.i2p>\n"
"Language-Team: Italian (http://www.transifex.net/projects/p/I2P/team/it/)\n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
"Language: it\n"
"Plural-Forms: nplurals=2; plural=(n != 1)\n"
#: ../java/src/org/klomp/snark/SnarkManager.java:307
#, java-format
msgid "Total uploaders limit changed to {0}"
msgstr ""
#: ../java/src/org/klomp/snark/SnarkManager.java:309
#, java-format
msgid "Minimum total uploaders limit is {0}"
msgstr ""
#: ../java/src/org/klomp/snark/SnarkManager.java:321
#, java-format
msgid "Up BW limit changed to {0}KBps"
msgstr ""
#: ../java/src/org/klomp/snark/SnarkManager.java:323
#, java-format
msgid "Minimum up bandwidth limit is {0}KBps"
msgstr ""
#: ../java/src/org/klomp/snark/SnarkManager.java:335
#, java-format
msgid "Startup delay changed to {0}"
msgstr ""
#: ../java/src/org/klomp/snark/SnarkManager.java:386
msgid "I2CP and tunnel changes will take effect after stopping all torrents"
msgstr ""
#: ../java/src/org/klomp/snark/SnarkManager.java:393
msgid "Disconnecting old I2CP destination"
msgstr ""
#: ../java/src/org/klomp/snark/SnarkManager.java:397
#, java-format
msgid "I2CP settings changed to {0}"
msgstr ""
#: ../java/src/org/klomp/snark/SnarkManager.java:402
msgid ""
"Unable to connect with the new settings, reverting to the old I2CP settings"
msgstr ""
#: ../java/src/org/klomp/snark/SnarkManager.java:406
msgid "Unable to reconnect with the old settings!"
msgstr ""
#: ../java/src/org/klomp/snark/SnarkManager.java:408
msgid "Reconnected on the new I2CP destination"
msgstr ""
#: ../java/src/org/klomp/snark/SnarkManager.java:418
#, java-format
msgid "I2CP listener restarted for \"{0}\""
msgstr ""
#: ../java/src/org/klomp/snark/SnarkManager.java:429
msgid "Enabled autostart"
msgstr ""
#: ../java/src/org/klomp/snark/SnarkManager.java:431
msgid "Disabled autostart"
msgstr ""
#: ../java/src/org/klomp/snark/SnarkManager.java:437
msgid "Enabled open trackers - torrent restart required to take effect."
msgstr ""
#: ../java/src/org/klomp/snark/SnarkManager.java:439
msgid "Disabled open trackers - torrent restart required to take effect."
msgstr ""
#: ../java/src/org/klomp/snark/SnarkManager.java:447
msgid "Open Tracker list changed - torrent restart required to take effect."
msgstr ""
#: ../java/src/org/klomp/snark/SnarkManager.java:454
#, java-format
msgid "{0} theme loaded, return to main i2psnark page to view."
msgstr ""
#: ../java/src/org/klomp/snark/SnarkManager.java:461
msgid "Configuration unchanged."
msgstr ""
#: ../java/src/org/klomp/snark/SnarkManager.java:471
#, java-format
msgid "Unable to save the config to {0}"
msgstr ""
#: ../java/src/org/klomp/snark/SnarkManager.java:536
msgid "Connecting to I2P"
msgstr ""
#: ../java/src/org/klomp/snark/SnarkManager.java:539
msgid "Error connecting to I2P - check your I2CP settings!"
msgstr ""
#: ../java/src/org/klomp/snark/SnarkManager.java:548
#, java-format
msgid "Error: Could not add the torrent {0}"
msgstr ""
#. catch this here so we don't try do delete it below
#: ../java/src/org/klomp/snark/SnarkManager.java:570
#, java-format
msgid "Cannot open \"{0}\""
msgstr ""
#. TODO - if the existing one is a magnet, delete it and add the metainfo
#. instead?
#: ../java/src/org/klomp/snark/SnarkManager.java:589
#: ../java/src/org/klomp/snark/SnarkManager.java:665
#: ../java/src/org/klomp/snark/SnarkManager.java:720
#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:1976
#, java-format
msgid "Torrent with this info hash is already running: {0}"
msgstr ""
#. addMessage(_("Warning - No I2P trackers in \"{0}\", will announce to I2P
#. open trackers and DHT only.", info.getName()));
#: ../java/src/org/klomp/snark/SnarkManager.java:596
#, java-format
msgid ""
"Warning - No I2P trackers in \"{0}\", will announce to I2P open trackers "
"only."
msgstr ""
#. addMessage(_("Warning - No I2P trackers in \"{0}\", and DHT and open
#. trackers are disabled, you should enable open trackers or DHT before
#. starting the torrent.", info.getName()));
#: ../java/src/org/klomp/snark/SnarkManager.java:601
#, java-format
msgid ""
"Warning - No I2P Trackers found in \"{0}\". Make sure Open Tracker is "
"enabled before starting this torrent."
msgstr ""
#: ../java/src/org/klomp/snark/SnarkManager.java:622
#, java-format
msgid "Torrent in \"{0}\" is invalid"
msgstr ""
#: ../java/src/org/klomp/snark/SnarkManager.java:627
#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:1998
#, java-format
msgid "ERROR - Out of memory, cannot create torrent from {0}"
msgstr ""
#: ../java/src/org/klomp/snark/SnarkManager.java:639
#, java-format
msgid "Torrent added and started: \"{0}\""
msgstr ""
#: ../java/src/org/klomp/snark/SnarkManager.java:641
#, java-format
msgid "Torrent added: \"{0}\""
msgstr ""
#: ../java/src/org/klomp/snark/SnarkManager.java:676
#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:491
#, java-format
msgid "Fetching {0}"
msgstr ""
#: ../java/src/org/klomp/snark/SnarkManager.java:679
#, java-format
msgid ""
"We have no saved peers and no other torrents are running. Fetch of {0} will "
"not succeed until you start another torrent."
msgstr ""
#: ../java/src/org/klomp/snark/SnarkManager.java:683
#, java-format
msgid "Adding {0}"
msgstr ""
#: ../java/src/org/klomp/snark/SnarkManager.java:730
#: ../java/src/org/klomp/snark/SnarkManager.java:753
#: ../java/src/org/klomp/snark/SnarkManager.java:1180
#, java-format
msgid "Failed to copy torrent file to {0}"
msgstr ""
#: ../java/src/org/klomp/snark/SnarkManager.java:976
#, java-format
msgid "Too many files in \"{0}\" ({1}), deleting it!"
msgstr ""
#: ../java/src/org/klomp/snark/SnarkManager.java:978
#, java-format
msgid "Torrent file \"{0}\" cannot end in \".torrent\", deleting it!"
msgstr ""
#: ../java/src/org/klomp/snark/SnarkManager.java:980
#, java-format
msgid "No pieces in \"{0}\", deleting it!"
msgstr ""
#: ../java/src/org/klomp/snark/SnarkManager.java:982
#, java-format
msgid "Too many pieces in \"{0}\", limit is {1}, deleting it!"
msgstr ""
#: ../java/src/org/klomp/snark/SnarkManager.java:984
#, java-format
msgid "Pieces are too large in \"{0}\" ({1}B), deleting it."
msgstr ""
#: ../java/src/org/klomp/snark/SnarkManager.java:985
#, java-format
msgid "Limit is {0}B"
msgstr ""
#: ../java/src/org/klomp/snark/SnarkManager.java:987
#, java-format
msgid "Torrent \"{0}\" has no data, deleting it!"
msgstr ""
#: ../java/src/org/klomp/snark/SnarkManager.java:995
#, java-format
msgid "Torrents larger than {0}B are not supported yet, deleting \"{1}\""
msgstr ""
#: ../java/src/org/klomp/snark/SnarkManager.java:1011
#, java-format
msgid "Error: Could not remove the torrent {0}"
msgstr ""
#: ../java/src/org/klomp/snark/SnarkManager.java:1032
#: ../java/src/org/klomp/snark/SnarkManager.java:1050
#, java-format
msgid "Torrent stopped: \"{0}\""
msgstr ""
#: ../java/src/org/klomp/snark/SnarkManager.java:1071
#, java-format
msgid "Torrent removed: \"{0}\""
msgstr ""
#: ../java/src/org/klomp/snark/SnarkManager.java:1079
#, java-format
msgid "Adding torrents in {0}"
msgstr ""
#: ../java/src/org/klomp/snark/SnarkManager.java:1128
#, java-format
msgid "Download finished: {0}"
msgstr ""
#: ../java/src/org/klomp/snark/SnarkManager.java:1176
#, java-format
msgid "Metainfo received for {0}"
msgstr ""
#: ../java/src/org/klomp/snark/SnarkManager.java:1177
#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:526
#, java-format
msgid "Starting up torrent {0}"
msgstr ""
#: ../java/src/org/klomp/snark/SnarkManager.java:1231
msgid "Unable to connect to I2P!"
msgstr ""
#: ../java/src/org/klomp/snark/SnarkManager.java:1237
#, java-format
msgid "Unable to add {0}"
msgstr ""
#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:205
msgid "I2PSnark - Anonymous BitTorrent Client"
msgstr ""
#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:218
msgid "Torrents"
msgstr ""
#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:221
#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:228
#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:1028
msgid "I2PSnark"
msgstr ""
#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:225
msgid "Refresh page"
msgstr ""
#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:230
msgid "Forum"
msgstr ""
#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:284
#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:1719
msgid "Status"
msgstr ""
#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:290
#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:292
msgid "Hide Peers"
msgstr ""
#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:297
#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:299
msgid "Show Peers"
msgstr ""
#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:306
#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:1643
#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:1659
msgid "Torrent"
msgstr ""
#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:310
msgid "Estimated time remaining"
msgstr ""
#. Translators: Please keep short or translate as " "
#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:313
msgid "ETA"
msgstr ""
#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:317
msgid "Downloaded"
msgstr ""
#. Translators: Please keep short or translate as " "
#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:320
#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:334
msgid "RX"
msgstr ""
#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:324
msgid "Uploaded"
msgstr ""
#. Translators: Please keep short or translate as " "
#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:327
#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:344
msgid "TX"
msgstr ""
#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:332
msgid "Down Rate"
msgstr ""
#. Translators: Please keep short or translate as " "
#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:337
#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:346
msgid "Rate"
msgstr ""
#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:342
msgid "Up Rate"
msgstr ""
#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:366
msgid "Stop all torrents and the I2P tunnel"
msgstr ""
#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:368
msgid "Stop All"
msgstr ""
#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:377
msgid "Start all torrents and the I2P tunnel"
msgstr ""
#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:379
msgid "Start All"
msgstr ""
#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:398
msgid "No torrents loaded."
msgstr ""
#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:403
msgid "Totals"
msgstr ""
#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:405
#, java-format
msgid "1 torrent"
msgid_plural "{0} torrents"
msgstr[0] ""
msgstr[1] ""
#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:408
#, java-format
msgid "1 connected peer"
msgid_plural "{0} connected peers"
msgstr[0] ""
msgstr[1] ""
#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:497
#, java-format
msgid "Invalid URL: Must start with \"http://\", \"{0}\", or \"{1}\""
msgstr ""
#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:545
#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:572
#, java-format
msgid "Magnet deleted: {0}"
msgstr ""
#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:553
#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:578
#, java-format
msgid "Torrent file deleted: {0}"
msgstr ""
#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:584
#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:594
#, java-format
msgid "Data file deleted: {0}"
msgstr ""
#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:586
#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:596
#, java-format
msgid "Data file could not be deleted: {0}"
msgstr ""
#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:605
#, java-format
msgid "Data dir deleted: {0}"
msgstr ""
#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:638
msgid "Error creating torrent - you must select a tracker"
msgstr ""
#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:653
#, java-format
msgid "Torrent created for \"{0}\""
msgstr ""
#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:655
#, java-format
msgid ""
"Many I2P trackers require you to register new torrents before seeding - "
"please do so before starting \"{0}\""
msgstr ""
#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:657
#, java-format
msgid "Error creating a torrent for \"{0}\""
msgstr ""
#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:660
#, java-format
msgid "Cannot create a torrent for the nonexistent data: {0}"
msgstr ""
#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:663
msgid "Error creating torrent - you must enter a file or directory"
msgstr ""
#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:666
msgid "Stopping all torrents and closing the I2P tunnel."
msgstr ""
#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:677
msgid "I2P tunnel closed."
msgstr ""
#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:680
msgid "Opening the I2P tunnel and starting all torrents."
msgstr ""
#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:803
#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:808
#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:814
msgid "Tracker Error"
msgstr ""
#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:806
#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:810
#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:822
#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:826
#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:834
#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:838
#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:843
#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:847
#, java-format
msgid "1 peer"
msgid_plural "{0} peers"
msgstr[0] ""
msgstr[1] ""
#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:819
#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:824
msgid "Seeding"
msgstr ""
#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:828
#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:1665
#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:1770
msgid "Complete"
msgstr ""
#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:831
#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:836
msgid "OK"
msgstr ""
#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:840
#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:845
msgid "Stalled"
msgstr ""
#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:849
#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:852
msgid "No Peers"
msgstr ""
#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:854
msgid "Stopped"
msgstr ""
#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:886
msgid "Torrent details"
msgstr ""
#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:898
#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:1160
msgid "Info"
msgstr ""
#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:913
msgid "View files"
msgstr ""
#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:915
msgid "Open file"
msgstr ""
#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:957
msgid "Stop the torrent"
msgstr ""
#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:959
msgid "Stop"
msgstr ""
#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:969
msgid "Start the torrent"
msgstr ""
#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:971
msgid "Start"
msgstr ""
#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:982
msgid "Remove the torrent from the active list, deleting the .torrent file"
msgstr ""
#. Can't figure out how to escape double quotes inside the onclick string.
#. Single quotes in translate strings with parameters must be doubled.
#. Then the remaining single quite must be escaped
#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:987
#, java-format
msgid ""
"Are you sure you want to delete the file \\''{0}.torrent\\'' (downloaded "
"data will not be deleted) ?"
msgstr ""
#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:990
msgid "Remove"
msgstr ""
#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:1001
msgid "Delete the .torrent file and the associated data file(s)"
msgstr ""
#. Can't figure out how to escape double quotes inside the onclick string.
#. Single quotes in translate strings with parameters must be doubled.
#. Then the remaining single quite must be escaped
#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:1006
#, java-format
msgid ""
"Are you sure you want to delete the torrent \\''{0}\\'' and all downloaded "
"data?"
msgstr ""
#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:1009
msgid "Delete"
msgstr ""
#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:1042
msgid "Unknown"
msgstr ""
#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:1054
msgid "Seed"
msgstr ""
#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:1077
msgid "Uninteresting (The peer has no pieces we need)"
msgstr ""
#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:1079
msgid "Choked (The peer is not allowing us to request pieces)"
msgstr ""
#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:1099
msgid "Uninterested (We have no pieces the peer needs)"
msgstr ""
#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:1101
msgid "Choking (We are not allowing the peer to request pieces)"
msgstr ""
#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:1159
#, java-format
msgid "Details at {0} tracker"
msgstr ""
#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:1188
msgid "Add Torrent"
msgstr ""
#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:1190
msgid "From URL"
msgstr ""
#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:1193
msgid ""
"Enter the torrent file download URL (I2P only), magnet link, or maggot link"
msgstr ""
#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:1198
msgid "Add torrent"
msgstr ""
#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:1201
#, java-format
msgid "You can also copy .torrent files to: {0}."
msgstr ""
#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:1203
msgid "Removing a .torrent will cause it to stop."
msgstr ""
#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:1226
msgid "Create Torrent"
msgstr ""
#. out.write("From file: <input type=\"file\" name=\"newFile\" size=\"50\"
#. value=\"" + newFile + "\" /><br>\n");
#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:1229
msgid "Data to seed"
msgstr ""
#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:1233
msgid "File or directory to seed (must be within the specified path)"
msgstr ""
#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:1235
#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:1684
msgid "Tracker"
msgstr ""
#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:1237
msgid "Select a tracker"
msgstr ""
#. out.write(_("Open trackers and DHT only"));
#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:1242
msgid "Open trackers only"
msgstr ""
#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:1257
msgid "or"
msgstr ""
#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:1260
msgid "Specify custom tracker announce URL"
msgstr ""
#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:1263
msgid "Create torrent"
msgstr ""
#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:1281
#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:1420
msgid "Configuration"
msgstr ""
#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:1285
msgid "Data directory"
msgstr ""
#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:1287
msgid "Edit i2psnark.config and restart to change"
msgstr ""
#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:1291
msgid "Auto start"
msgstr ""
#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:1295
msgid "If checked, automatically start torrents that are added"
msgstr ""
#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:1299
msgid "Theme"
msgstr ""
#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:1312
msgid "Startup delay"
msgstr ""
#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:1314
msgid "minutes"
msgstr ""
#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:1338
msgid "Total uploader limit"
msgstr ""
#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:1341
msgid "peers"
msgstr ""
#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:1345
msgid "Up bandwidth limit"
msgstr ""
#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:1348
msgid "Half available bandwidth recommended."
msgstr ""
#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:1350
msgid "View or change router bandwidth"
msgstr ""
#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:1354
msgid "Use open trackers also"
msgstr ""
#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:1358
msgid ""
"If checked, announce torrents to open trackers as well as the tracker listed"
" in the torrent file"
msgstr ""
#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:1362
msgid "Open tracker announce URLs"
msgstr ""
#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:1374
msgid "Inbound Settings"
msgstr ""
#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:1380
msgid "Outbound Settings"
msgstr ""
#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:1388
msgid "I2CP host"
msgstr ""
#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:1393
msgid "I2CP port"
msgstr ""
#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:1406
msgid "I2CP options"
msgstr ""
#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:1411
msgid "Save configuration"
msgstr ""
#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:1436
#, java-format
msgid "Invalid magnet URL {0}"
msgstr ""
#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:1470
#, java-format
msgid "Invalid info hash in magnet URL {0}"
msgstr ""
#. * dummies for translation
#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:1500
#, java-format
msgid "1 hop"
msgid_plural "{0} hops"
msgstr[0] ""
msgstr[1] ""
#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:1501
#, java-format
msgid "1 tunnel"
msgid_plural "{0} tunnels"
msgstr[0] ""
msgstr[1] ""
#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:1663
msgid "Completion"
msgstr ""
#. else unknown
#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:1667
#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:1716
msgid "Size"
msgstr ""
#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:1672
msgid "Files"
msgstr ""
#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:1674
msgid "Pieces"
msgstr ""
#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:1675
msgid "Piece size"
msgstr ""
#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:1697
msgid "Magnet link"
msgstr ""
#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:1714
#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:1753
msgid "Directory"
msgstr ""
#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:1723
msgid "Priority"
msgstr ""
#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:1728
msgid "Up to higher level directory"
msgstr ""
#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:1758
msgid "Torrent not found?"
msgstr ""
#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:1767
msgid "File not found in torrent?"
msgstr ""
#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:1780
msgid "complete"
msgstr ""
#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:1781
msgid "bytes remaining"
msgstr ""
#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:1806
msgid "Open"
msgstr ""
#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:1832
msgid "High"
msgstr ""
#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:1837
msgid "Normal"
msgstr ""
#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:1842
msgid "Skip"
msgstr ""
#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:1851
msgid "Save priorities"
msgstr ""
#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:1967
#, java-format
msgid "Torrent fetched from {0}"
msgstr ""
#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:1988
#, java-format
msgid "Torrent already running: {0}"
msgstr ""
#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:1990
#, java-format
msgid "Torrent already in the queue: {0}"
msgstr ""
#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:1996
#, java-format
msgid "Torrent at {0} was not valid"
msgstr ""
#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:2003
#, java-format
msgid "Torrent was not retrieved from {0}"
msgstr ""

View File

@@ -0,0 +1,772 @@
# I2P
# Copyright (C) 2009 The I2P Project
# This file is distributed under the same license as the i2psnark package.
# To contribute translations, see http://www.i2p2.de/newdevelopers
# foo <foo@bar>, 2009.
#
msgid ""
msgstr ""
"Project-Id-Version: I2P i2psnark\n"
"Report-Msgid-Bugs-To: \n"
"POT-Creation-Date: 2010-06-26 21:02+0000\n"
"PO-Revision-Date: 2011-01-13 17:43+0100\n"
"Last-Translator: Polacco <polacco@mail.i2p>\n"
"Language-Team: foo <foo@bar>\n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
"X-Poedit-Language: Polish\n"
"Plural-Forms: nplurals=3; plural=(n%10==1 && n%100!=11 ? 0 : n%10>=2 && n%10<=4 && (n%100<10 || n%100>=20) ? 1 : 2)\n"
#: ../java/src/org/klomp/snark/SnarkManager.java:88
#, java-format
msgid "Adding torrents in {0} minutes"
msgstr "Dodawanie torrentów w ciągu {0} minut"
#: ../java/src/org/klomp/snark/SnarkManager.java:258
#, java-format
msgid "Total uploaders limit changed to {0}"
msgstr "Ograniczenie liczby uploaderów zmieniono do {0}"
#: ../java/src/org/klomp/snark/SnarkManager.java:260
#, java-format
msgid "Minimum total uploaders limit is {0}"
msgstr "Minimalny całkowity limit uploadera: {0}"
#: ../java/src/org/klomp/snark/SnarkManager.java:272
#, java-format
msgid "Up BW limit changed to {0}KBps"
msgstr "Ograniczenie pasma WY zmieniono na: {0} KB/s"
#: ../java/src/org/klomp/snark/SnarkManager.java:274
#, java-format
msgid "Minimum up bandwidth limit is {0}KBps"
msgstr "Minimalne pasmo WY to: {0} KB/s"
#: ../java/src/org/klomp/snark/SnarkManager.java:286
#, java-format
msgid "Startup delay limit changed to {0} minutes"
msgstr "Opóźnienie uruchomienia zmieniono do {0} minut"
#: ../java/src/org/klomp/snark/SnarkManager.java:333
msgid "I2CP and tunnel changes will take effect after stopping all torrents"
msgstr "Zmiany dotyczące I2CP i tuneli będą wprowadzone po zatrzymaniu wszystkich torrentów."
#: ../java/src/org/klomp/snark/SnarkManager.java:339
msgid "Disconnecting old I2CP destination"
msgstr "Rozłączanie starych celów I2CP"
#: ../java/src/org/klomp/snark/SnarkManager.java:343
#, java-format
msgid "I2CP settings changed to {0}"
msgstr "Ustawienia I2CP zmienione do: {0}"
#: ../java/src/org/klomp/snark/SnarkManager.java:347
msgid "Unable to connect with the new settings, reverting to the old I2CP settings"
msgstr "Nie można połączyć się z nowymi ustawieniami, powrót do starych ustawień I2CP"
#: ../java/src/org/klomp/snark/SnarkManager.java:351
msgid "Unable to reconnect with the old settings!"
msgstr "Nie można się połączyć ze starymi ustawieniami!"
#: ../java/src/org/klomp/snark/SnarkManager.java:353
msgid "Reconnected on the new I2CP destination"
msgstr "Ponowne podłączanie do nowych celów I2CP"
#: ../java/src/org/klomp/snark/SnarkManager.java:364
#, java-format
msgid "I2CP listener restarted for \"{0}\""
msgstr "Nasłuch I2CP zrestartowany dla \"{0}\""
#: ../java/src/org/klomp/snark/SnarkManager.java:375
msgid "Enabled autostart"
msgstr "Włącz automatycznie uruchamianie"
#: ../java/src/org/klomp/snark/SnarkManager.java:377
msgid "Disabled autostart"
msgstr "Wyłącz automatycznie uruchamianie"
#: ../java/src/org/klomp/snark/SnarkManager.java:383
msgid "Enabled open trackers - torrent restart required to take effect."
msgstr "Włączono otwarte trackery - wymagane ponowne uruchomienie torrenta."
#: ../java/src/org/klomp/snark/SnarkManager.java:385
msgid "Disabled open trackers - torrent restart required to take effect."
msgstr "Wyłączono otwarte trackery - wymagane ponowne uruchomienie torrenta."
#: ../java/src/org/klomp/snark/SnarkManager.java:392
msgid "Open Tracker list changed - torrent restart required to take effect."
msgstr "Zmieniła się lista otwartych trackerów - wymagane ponowne uruchomienie torrenta."
#: ../java/src/org/klomp/snark/SnarkManager.java:399
msgid "Configuration unchanged."
msgstr "Ustawienia niezmienione."
#: ../java/src/org/klomp/snark/SnarkManager.java:409
#, java-format
msgid "Unable to save the config to {0}"
msgstr "Nie można zapisać konfiguracji do {0}"
#: ../java/src/org/klomp/snark/SnarkManager.java:445
msgid "Connecting to I2P"
msgstr "Łączenie z I2P"
#: ../java/src/org/klomp/snark/SnarkManager.java:448
msgid "Error connecting to I2P - check your I2CP settings!"
msgstr "Nie można się połączyć z I2P, sprawdź swoje ustawienia I2CP!"
#: ../java/src/org/klomp/snark/SnarkManager.java:457
#, java-format
msgid "Error: Could not add the torrent {0}"
msgstr "Błąd: Nie można dodać torrenta {0}"
#. catch this here so we don't try do delete it below
#: ../java/src/org/klomp/snark/SnarkManager.java:479
#, java-format
msgid "Cannot open \"{0}\""
msgstr "Nie można otworzyć \"{0}\""
#: ../java/src/org/klomp/snark/SnarkManager.java:492
#, java-format
msgid "Warning - Ignoring non-i2p tracker in \"{0}\", will announce to i2p open trackers only"
msgstr "Uwaga! Ignorowanie trackera spoza I2P w \"{0}\"; będzie anonsować tylko z trackerami I2P"
#: ../java/src/org/klomp/snark/SnarkManager.java:494
#, java-format
msgid "Warning - Ignoring non-i2p tracker in \"{0}\", and open trackers are disabled, you must enable open trackers before starting the torrent!"
msgstr "Uwaga! Ignorowanie trackera spoza I2P w \"{0}\"; otwarty trackery wyłączone, musisz włączyć otwarte trackery zanim uruchomisz torrenta!"
#: ../java/src/org/klomp/snark/SnarkManager.java:513
#, java-format
msgid "Torrent in \"{0}\" is invalid"
msgstr "Torrent w \"{0}\" jest niepoprawny"
#: ../java/src/org/klomp/snark/SnarkManager.java:528
#, java-format
msgid "Torrent added and started: \"{0}\""
msgstr "Torrent dodany i uruchomiony: \"{0}\""
#: ../java/src/org/klomp/snark/SnarkManager.java:530
#, java-format
msgid "Torrent added: \"{0}\""
msgstr "Torrent dodany: \"{0}\""
#: ../java/src/org/klomp/snark/SnarkManager.java:627
#, java-format
msgid "Too many files in \"{0}\" ({1}), deleting it!"
msgstr "Za dużo plików w \"{0}\" ({1}), usuwanie go!"
#: ../java/src/org/klomp/snark/SnarkManager.java:629
#, java-format
msgid "Torrent file \"{0}\" cannot end in \".torrent\", deleting it!"
msgstr "Torrent \"{0}\" nie może się kończyć w \".torrent\", usuwanie go!"
#: ../java/src/org/klomp/snark/SnarkManager.java:631
#, java-format
msgid "No pieces in \"{0}\", deleting it!"
msgstr "W torrencie \"{0}\" nie ma piece'ów, usuwanie go!"
#: ../java/src/org/klomp/snark/SnarkManager.java:633
#, java-format
msgid "Too many pieces in \"{0}\", limit is {1}, deleting it!"
msgstr "Za dużo piece''ów w \"{0}\" (limit to {1}), usuwanie go!"
#: ../java/src/org/klomp/snark/SnarkManager.java:635
#, java-format
msgid "Pieces are too large in \"{0}\" ({1}B), deleting it."
msgstr "Za duże piece''y w torrencie \"{0}\" ({1}B), usuwanie go."
#: ../java/src/org/klomp/snark/SnarkManager.java:636
#, java-format
msgid "Limit is {0}B"
msgstr "Granica to {0}B"
#: ../java/src/org/klomp/snark/SnarkManager.java:644
#, java-format
msgid "Torrents larger than {0}B are not supported yet, deleting \"{1}\""
msgstr "Torrenty większe niż {0}B nie są jeszcze wspierane, usunięcie \"{1}\""
#: ../java/src/org/klomp/snark/SnarkManager.java:660
#, java-format
msgid "Error: Could not remove the torrent {0}"
msgstr "Błąd: nie można usunąć torrenta {0}"
#: ../java/src/org/klomp/snark/SnarkManager.java:681
#, java-format
msgid "Torrent stopped: \"{0}\""
msgstr "Torrent zatrzymany: \"{0}\""
#: ../java/src/org/klomp/snark/SnarkManager.java:696
#, java-format
msgid "Torrent removed: \"{0}\""
msgstr "Torrent usunięty: \"{0}\""
#: ../java/src/org/klomp/snark/SnarkManager.java:729
#, java-format
msgid "Download finished: \"{0}\""
msgstr "Pobieranie zakończone: \"{0}\""
#: ../java/src/org/klomp/snark/SnarkManager.java:729
#, java-format
msgid "size: {0}B"
msgstr "rozmiar: {0}B"
#: ../java/src/org/klomp/snark/SnarkManager.java:757
msgid "Unable to connect to I2P!"
msgstr "Nie można podłączyć się do I2P!"
#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:168
msgid "I2PSnark - Anonymous BitTorrent Client"
msgstr "I2PSnark anonimowy klient BitTorrent"
#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:179
msgid "Torrents"
msgstr "Torrenty"
#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:181
#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:187
#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:831
msgid "I2PSnark"
msgstr "I2PSnark"
#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:185
msgid "Refresh page"
msgstr "Odśwież stronę"
#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:189
msgid "Forum"
msgstr "Forum"
#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:234
#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:1283
msgid "Status"
msgstr "Status"
#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:240
msgid "Hide Peers"
msgstr "Ukryj peery"
#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:243
msgid "Show Peers"
msgstr "Pokaż peery"
#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:248
#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:1265
msgid "Torrent"
msgstr "Torrent"
#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:250
msgid "ETA"
msgstr "Pozostało"
#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:252
msgid "Downloaded"
msgstr "Pobrano"
#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:254
msgid "Uploaded"
msgstr "Wysłano"
#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:256
msgid "Down Rate"
msgstr "Prędkość pobierania"
#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:258
msgid "Up Rate"
msgstr "Prędkość wysyłania"
#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:265
msgid "Stop all torrents and the I2P tunnel"
msgstr "Zatrzymaj wszystkie torrenty i tunel I2P"
#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:267
msgid "Stop All"
msgstr "Zatrzymaj wszystkie"
#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:272
msgid "Start all torrents and the I2P tunnel"
msgstr "Uruchom wszystkie torrenty i tunel I2P"
#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:274
msgid "Start All"
msgstr "Uruchom wszystkie"
#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:291
msgid "No torrents loaded."
msgstr "Nie załadowano torrentów."
#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:296
msgid "Totals"
msgstr "Łącznie"
#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:298
#, java-format
msgid "1 torrent"
msgid_plural "{0} torrents"
msgstr[0] "{0} torrent"
msgstr[1] "{0} torrenty"
msgstr[2] "{0} torrentów"
#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:301
#, java-format
msgid "1 connected peer"
msgid_plural "{0} connected peers"
msgstr[0] "{0} podłączony peer"
msgstr[1] "{0} podłączone peery"
msgstr[2] "{0} podłączonych peerów"
#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:330
#, java-format
msgid "Torrent file {0} does not exist"
msgstr "Plik torrent {0} nie istnieje"
#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:340
#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:1470
#, java-format
msgid "Torrent already running: {0}"
msgstr "Torrent już uruchomiony: {0}"
#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:342
#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:1472
#, java-format
msgid "Torrent already in the queue: {0}"
msgstr "Torrent już w kolejce: {0}"
#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:346
#, java-format
msgid "Copying torrent to {0}"
msgstr "Kopiowanie torrenta do: {0}"
#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:349
#, java-format
msgid "Unable to copy the torrent to {0}"
msgstr "Nie można skopiować torrenta do: {0}"
#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:349
#, java-format
msgid "from {0}"
msgstr "od: {0}"
#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:357
#, java-format
msgid "Fetching {0}"
msgstr "Pobieranie: {0}"
#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:361
msgid "Invalid URL - must start with http://"
msgstr "Niepoprawny URL - musi się zaczynać od http://"
#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:391
#, java-format
msgid "Starting up torrent {0}"
msgstr "Uruchamianie torrenta: {0}"
#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:411
#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:429
#, java-format
msgid "Torrent file deleted: {0}"
msgstr "Plik torrenta usunięto: {0}"
#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:435
#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:445
#, java-format
msgid "Data file deleted: {0}"
msgstr "Pliki z danymi usunięte: {0}"
#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:437
#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:447
#, java-format
msgid "Data file could not be deleted: {0}"
msgstr "Nie można usunąć pliku z danymi: {0}"
#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:456
#, java-format
msgid "Data dir deleted: {0}"
msgstr "Usunięto katalog z danymi: {0}"
#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:488
msgid "Error creating torrent - you must select a tracker"
msgstr "Błąd przy tworzeniu torrenta - musisz wybrać tracker"
#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:503
#, java-format
msgid "Torrent created for \"{0}\""
msgstr "Utworzono torrent dla \"{0}\""
#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:506
#, java-format
msgid "Many I2P trackers require you to register new torrents before seeding - please do so before starting \"{0}\""
msgstr "Wiele trackerów w I2P wymaga zarejestrowania torrenta przed seedowaniem - proszę, zrób tak przed uruchomieniem \"{0}\""
#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:508
#, java-format
msgid "Error creating a torrent for \"{0}\""
msgstr "Błąd podczas tworzenia torrenta dla: \"{0}\""
#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:511
#, java-format
msgid "Cannot create a torrent for the nonexistent data: {0}"
msgstr "Nie można utworzyć torrenta dla nieistniejących danych: {0}"
#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:514
msgid "Error creating torrent - you must enter a file or directory"
msgstr "Błąd przy tworzeniu torrenta - musisz podać plik lub katalog"
#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:517
msgid "Stopping all torrents and closing the I2P tunnel."
msgstr "Zatrzymywanie wszystkich torrentów i zamykanie tunelu I2P"
#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:526
msgid "I2P tunnel closed."
msgstr "Zamknięto tunel I2P."
#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:529
msgid "Opening the I2P tunnel and starting all torrents."
msgstr "Otwieranie tunelu I2P i uruchamianie wszystkich torrentów."
#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:651
#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:845
msgid "Unknown"
msgstr "Nieznany"
#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:654
#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:659
#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:664
msgid "TrackerErr"
msgstr "BładTrackera"
# TODO should replace "uploader limit NN peers" with "global number of upload slots: NN"
#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:657
#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:660
#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:671
#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:674
#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:682
#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:685
#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:690
#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:693
#, java-format
msgid "1 peer"
msgid_plural "{0} peers"
msgstr[0] "{0} peer"
msgstr[1] "{0} peery"
msgstr[2] "{0} peerów"
#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:668
#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:673
msgid "Seeding"
msgstr "Seedowanie"
#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:676
#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:1321
msgid "Complete"
msgstr "Zakończono"
#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:679
#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:684
msgid "OK"
msgstr "OK"
#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:687
#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:692
msgid "Stalled"
msgstr "Utknięto"
#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:695
msgid "No Peers"
msgstr "Brak peerów"
#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:697
msgid "Stopped"
msgstr "Zatrzymany"
#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:712
msgid "View files"
msgstr "Zobacz pliki"
#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:714
msgid "Open file"
msgstr "Otwórz plik"
#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:744
#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:961
msgid "Tracker"
msgstr "Tracker"
#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:745
msgid "Details"
msgstr "Szczegóły"
#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:779
msgid "Stop the torrent"
msgstr "Zatrzymaj torrent"
#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:781
msgid "Stop"
msgstr "Zatrzymaj"
#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:787
msgid "Start the torrent"
msgstr "Uruchom torrent"
#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:789
msgid "Start"
msgstr "Uruchom"
#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:794
msgid "Remove the torrent from the active list, deleting the .torrent file"
msgstr "Usuń torrent z aktywnej listy, usuwając plik .torrent"
#. Can't figure out how to escape double quotes inside the onclick string.
#. Single quotes in translate strings with parameters must be doubled.
#. Then the remaining single quite must be escaped
#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:799
#, java-format
msgid "Are you sure you want to delete the file \\''{0}.torrent\\'' (downloaded data will not be deleted) ?"
msgstr "Czy na pewno chcesz usunąć plik \\''{0}.torrent\\''? (pobrane dane nie zostaną usunięte)"
#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:801
msgid "Remove"
msgstr "Usuń"
#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:805
msgid "Delete the .torrent file and the associated data file(s)"
msgstr "Usuń plik .torrent i związane z nim pliki z danymi"
#. Can't figure out how to escape double quotes inside the onclick string.
#. Single quotes in translate strings with parameters must be doubled.
#. Then the remaining single quite must be escaped
#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:810
#, java-format
msgid "Are you sure you want to delete the torrent \\''{0}\\'' and all downloaded data?"
msgstr "Czy na pewno chcesz usunąć plik \\''{0}.torrent\\'' oraz pobrane dane?"
#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:812
msgid "Delete"
msgstr "Usuń"
#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:855
msgid "Seed"
msgstr "Seed"
#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:873
msgid "Uninteresting (The peer has no pieces we need)"
msgstr "Uninteresting (peer nie ma piece'ów, które potrzebujemy)"
#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:875
msgid "Choked (The peer is not allowing us to request pieces)"
msgstr "Choked (peer nie pozwala nam na prośbę o piece)"
#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:889
msgid "Uninterested (We have no pieces the peer needs)"
msgstr "Uninterested (nie mamy piece'ów, których peer potrzebuje)"
#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:891
msgid "Choking (We are not allowing the peer to request pieces)"
msgstr "Choking (nie pozwalamy peerowi na prośbę o piece)"
#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:921
msgid "Add Torrent"
msgstr "Dodaj torrent"
#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:923
msgid "From URL"
msgstr "Z adresu URL"
#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:928
msgid "Add torrent"
msgstr "Dodaj torrent"
#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:931
#, java-format
msgid "Alternately, you can copy .torrent files to the directory {0}."
msgstr "Albo możesz skopiować plik .torrent do katalogu {0}."
#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:933
msgid "Removing a .torrent file will cause the torrent to stop."
msgstr "Usunięcie pliku .torrent spowoduje zatrzymanie torrenta."
#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:952
msgid "Create Torrent"
msgstr "Utwórz torrent"
#. out.write("From file: <input type=\"file\" name=\"newFile\" size=\"50\" value=\"" + newFile + "\" /><br>\n");
#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:955
msgid "Data to seed"
msgstr "Dane do seedowania"
#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:959
msgid "File or directory to seed (must be within the specified path)"
msgstr "Plik lub katalog do seedowania (musi się znajdować wewnątrz podanej ścieżki)"
#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:963
msgid "Select a tracker"
msgstr "Wybierz tracker"
#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:976
msgid "or"
msgstr "lub"
#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:979
msgid "Specify custom tracker announce URL"
msgstr "Podaj własny adres announce trackera"
#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:982
msgid "Create torrent"
msgstr "Utwórz torrent"
#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:1000
#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:1127
msgid "Configuration"
msgstr "Ustawienia"
#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:1003
msgid "Data directory"
msgstr "Katalog z danymi"
#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:1006
msgid "Directory to store torrents and data"
msgstr "Katalog, w którym znajdują się torrenty i dane"
#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:1008
msgid "Edit i2psnark.config and restart to change"
msgstr "Edytuj plik i2psnark.config i uruchom ponownie by zmiany weszły w życie"
#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:1012
msgid "Auto start"
msgstr "Automatyczne uruchamianie"
#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:1016
msgid "If checked, automatically start torrents that are added"
msgstr "Jeśli zaznaczone - automatycznie uruchamiaj dodane torrenty"
#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:1020
msgid "Startup delay"
msgstr "Opóźnienie uruchomienia"
#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:1022
msgid "minutes"
msgstr "minuty"
#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:1046
msgid "Total uploader limit"
msgstr "Całkowity limit uploaderów"
# TODO should replace "uploader limit NN peers" with "global number of upload slots: NN"
#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:1049
msgid "peers"
msgstr "peery"
#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:1053
msgid "Up bandwidth limit"
msgstr "Ograniczenie pasma WY"
#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:1056
msgid "Half available bandwidth recommended."
msgstr "Zalecana połowa dostępnego pasma."
#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:1058
msgid "View or change router bandwidth"
msgstr "Zobacz lub zmień pasmo routera"
#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:1062
msgid "Use open trackers also"
msgstr "Używaj również otwartych trackerów"
#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:1066
msgid "If checked, announce torrents to open trackers as well as the tracker listed in the torrent file"
msgstr "Jeśli zaznaczone, zgłaszaj torrenty do otwartych trackerów, jak również do trackerów podanych w pliku torrent"
#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:1070
msgid "Open tracker announce URLs"
msgstr "URL otwartego trackera"
#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:1082
msgid "Inbound Settings"
msgstr "Tunele wejściowe"
#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:1088
msgid "Outbound Settings"
msgstr "Tunele wyjściowe"
#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:1095
msgid "I2CP host"
msgstr "Adres I2CP"
#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:1100
msgid "I2CP port"
msgstr "Port I2CP"
#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:1112
msgid "I2CP options"
msgstr "Parametry I2CP"
#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:1118
msgid "Save configuration"
msgstr "Zapisz ustawienia"
#. * dummies for translation
#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:1135
#, java-format
msgid "1 hop"
msgid_plural "{0} hops"
msgstr[0] "{0} skok"
msgstr[1] "{0} skoki"
msgstr[2] "{0} skoków"
#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:1136
#, java-format
msgid "1 tunnel"
msgid_plural "{0} tunnels"
msgstr[0] "{0} tunel"
msgstr[1] "{0} tunele"
msgstr[2] "{0} tuneli"
#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:1277
msgid "Up to higher level directory"
msgstr "Do katalogu nadrzędnego"
#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:1282
msgid "File"
msgstr "Plik"
#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:1282
msgid "Size"
msgstr "Rozmiar"
#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:1305
msgid "Directory"
msgstr "Katalog"
# This debug error message intentionally left in English
#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:1310
msgid "Torrent not found?"
msgstr "Torrent not found?"
# This debug error message intentionally left in English
#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:1318
msgid "File not found in torrent?"
msgstr "File not found in torrent?"
#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:1324
msgid "complete"
msgstr "zakończono"
#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:1325
msgid "bytes remaining"
msgstr "bajtów pozostało"
#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:1450
#, java-format
msgid "Torrent fetched from {0}"
msgstr "Torrent pobrano z {0}"
#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:1478
#, java-format
msgid "Torrent at {0} was not valid"
msgstr "Torrent pobrany z {0} jest niepoprawny"
#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:1483
#, java-format
msgid "Torrent was not retrieved from {0}"
msgstr "Torrent nie był pobrany z: {0}"

View File

@@ -8,14 +8,14 @@ msgid ""
msgstr ""
"Project-Id-Version: I2P i2psnark\n"
"Report-Msgid-Bugs-To: \n"
"POT-Creation-Date: 2011-03-03 18:28+0000\n"
"PO-Revision-Date: 2011-02-27 18:48+0100\n"
"POT-Creation-Date: 2011-06-02 16:13+0000\n"
"PO-Revision-Date: 2011-06-05 10:36+0100\n"
"Last-Translator: mixxy <m1xxy@mail.i2p>\n"
"Language-Team: foo <foo@bar>\n"
"Language: \n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
"Language: \n"
"X-Poedit-Language: Spanish\n"
"Plural-Forms: nplurals=2; plural=(n != 1)\n"
@@ -40,14 +40,13 @@ msgid "Minimum up bandwidth limit is {0}KBps"
msgstr "O limite mínimo da largura de banda para a subida está em {0} kbyte/s."
#: ../java/src/org/klomp/snark/SnarkManager.java:335
#, fuzzy, java-format
#, java-format
msgid "Startup delay changed to {0}"
msgstr "Demora do arranque mudado a {0} minutos"
msgstr "Demora do arranque mudado a {0}."
#: ../java/src/org/klomp/snark/SnarkManager.java:386
msgid "I2CP and tunnel changes will take effect after stopping all torrents"
msgstr ""
"Mudanças do I2CP e do túnel terão efeito depois de deter todos os torrentes"
msgstr "Mudanças do I2CP e do túnel terão efeito depois de deter todos os torrentes"
#: ../java/src/org/klomp/snark/SnarkManager.java:393
msgid "Disconnecting old I2CP destination"
@@ -59,11 +58,8 @@ msgid "I2CP settings changed to {0}"
msgstr "Preferências de I2CP mudadas a {0}"
#: ../java/src/org/klomp/snark/SnarkManager.java:402
msgid ""
"Unable to connect with the new settings, reverting to the old I2CP settings"
msgstr ""
"Conectar-se não foi posível com as novas preferências I2CP, utilizarei as "
"anteriores."
msgid "Unable to connect with the new settings, reverting to the old I2CP settings"
msgstr "Conectar-se não foi posível com as novas preferências I2CP, utilizarei as anteriores."
#: ../java/src/org/klomp/snark/SnarkManager.java:406
msgid "Unable to reconnect with the old settings!"
@@ -88,21 +84,15 @@ msgstr "Desativado o iniciar automáticamente"
#: ../java/src/org/klomp/snark/SnarkManager.java:437
msgid "Enabled open trackers - torrent restart required to take effect."
msgstr ""
"Uso de rastreadores abertos ativado - Para ter efeito é necesário reiniciar "
"os torrentes."
msgstr "Uso de rastreadores abertos ativado - Para ter efeito é necesário reiniciar os torrentes."
#: ../java/src/org/klomp/snark/SnarkManager.java:439
msgid "Disabled open trackers - torrent restart required to take effect."
msgstr ""
"Uso dos rastreadores abertos desativado - Para ter efeito é necesário "
"reiniciar os torrentes."
msgstr "Uso dos rastreadores abertos desativado - Para ter efeito é necesário reiniciar os torrentes."
#: ../java/src/org/klomp/snark/SnarkManager.java:447
msgid "Open Tracker list changed - torrent restart required to take effect."
msgstr ""
"Listado de rastreadores abertos mudado - Para ter efeito é necesário "
"reiniciar os torrentes."
msgstr "Listado de rastreadores abertos mudado - Para ter efeito é necesário reiniciar os torrentes."
#: ../java/src/org/klomp/snark/SnarkManager.java:454
#, java-format
@@ -138,160 +128,152 @@ msgid "Cannot open \"{0}\""
msgstr "Não pode se abrir \"{0}\""
#. TODO - if the existing one is a magnet, delete it and add the metainfo instead?
#: ../java/src/org/klomp/snark/SnarkManager.java:586
#: ../java/src/org/klomp/snark/SnarkManager.java:661
#: ../java/src/org/klomp/snark/SnarkManager.java:716
#: ../java/src/org/klomp/snark/SnarkManager.java:589
#: ../java/src/org/klomp/snark/SnarkManager.java:665
#: ../java/src/org/klomp/snark/SnarkManager.java:720
#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:1976
#, fuzzy, java-format
#, java-format
msgid "Torrent with this info hash is already running: {0}"
msgstr "torrente já em marcha: {0}"
msgstr "torrente com este info hash já em marcha: {0}"
#. addMessage(_("Warning - No I2P trackers in \"{0}\", will announce to I2P open trackers and DHT only.", info.getName()));
#: ../java/src/org/klomp/snark/SnarkManager.java:593
#, fuzzy, java-format
msgid ""
"Warning - No I2P trackers in \"{0}\", will announce to I2P open trackers "
"only."
msgstr ""
"Aviso - Se ignorará rastreado não I2P no \"{0}\", anunciando só aos "
"rastreadores abertos do I2P"
#: ../java/src/org/klomp/snark/SnarkManager.java:596
#, java-format
msgid "Warning - No I2P trackers in \"{0}\", will announce to I2P open trackers only."
msgstr "Aviso - Se ignorarão rastreadores fora de I2P em \"{0}\", anunciando só aos rastreadores abertos do I2P."
#. addMessage(_("Warning - No I2P trackers in \"{0}\", and DHT and open trackers are disabled, you should enable open trackers or DHT before starting the torrent.", info.getName()));
#: ../java/src/org/klomp/snark/SnarkManager.java:598
#, fuzzy, java-format
msgid ""
"Warning - No I2P Trackers found in \"{0}\". Make sure Open Tracker is "
"enabled before starting this torrent."
msgstr ""
"Aviso - Se ignorará rastreador não I2P no \"{0}\", rastreadores abertos "
"estão desativados. Tens que ativá-los antes de iniciar o torrente!"
#: ../java/src/org/klomp/snark/SnarkManager.java:601
#, java-format
msgid "Warning - No I2P Trackers found in \"{0}\". Make sure Open Tracker is enabled before starting this torrent."
msgstr "Aviso - Se ignorará rastreador não I2P no \"{0}\". Tens que ativá os rastreadores abertos antes de iniciar o torrente!"
#: ../java/src/org/klomp/snark/SnarkManager.java:619
#: ../java/src/org/klomp/snark/SnarkManager.java:622
#, java-format
msgid "Torrent in \"{0}\" is invalid"
msgstr "O arquivo .torrent em \"{0}\" não é válido."
#: ../java/src/org/klomp/snark/SnarkManager.java:624
#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:1999
#: ../java/src/org/klomp/snark/SnarkManager.java:627
#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:1998
#, java-format
msgid "ERROR - Out of memory, cannot create torrent from {0}"
msgstr ""
msgstr "ERRO - Não ha espaço suficente, não se pode crear um torrente desde {0}."
#: ../java/src/org/klomp/snark/SnarkManager.java:635
#: ../java/src/org/klomp/snark/SnarkManager.java:639
#, java-format
msgid "Torrent added and started: \"{0}\""
msgstr "torrente adicionado e iniciado: \"{0}\""
#: ../java/src/org/klomp/snark/SnarkManager.java:637
#: ../java/src/org/klomp/snark/SnarkManager.java:641
#, java-format
msgid "Torrent added: \"{0}\""
msgstr "torrente adicionado: \"{0}\""
#: ../java/src/org/klomp/snark/SnarkManager.java:672
#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:490
#: ../java/src/org/klomp/snark/SnarkManager.java:676
#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:491
#, java-format
msgid "Fetching {0}"
msgstr "Buscando {0}"
#: ../java/src/org/klomp/snark/SnarkManager.java:675
#, java-format
msgid ""
"We have no saved peers and no other torrents are running. Fetch of {0} will "
"not succeed until you start another torrent."
msgstr ""
#: ../java/src/org/klomp/snark/SnarkManager.java:679
#, fuzzy, java-format
msgid "Adding {0}"
msgstr "Buscando {0}"
#, java-format
msgid "We have no saved peers and no other torrents are running. Fetch of {0} will not succeed until you start another torrent."
msgstr "Não temos pare guardados nem estão ativo outros torrentes. Receber {0} não vai dar certo até começa outro torrente."
#: ../java/src/org/klomp/snark/SnarkManager.java:726
#: ../java/src/org/klomp/snark/SnarkManager.java:749
#: ../java/src/org/klomp/snark/SnarkManager.java:1174
#: ../java/src/org/klomp/snark/SnarkManager.java:683
#, java-format
msgid "Adding {0}"
msgstr "Adicionando {0}"
#: ../java/src/org/klomp/snark/SnarkManager.java:730
#: ../java/src/org/klomp/snark/SnarkManager.java:753
#: ../java/src/org/klomp/snark/SnarkManager.java:1180
#, java-format
msgid "Failed to copy torrent file to {0}"
msgstr "Não se pode copiar o torrente para {0}."
#: ../java/src/org/klomp/snark/SnarkManager.java:972
#: ../java/src/org/klomp/snark/SnarkManager.java:976
#, java-format
msgid "Too many files in \"{0}\" ({1}), deleting it!"
msgstr "Ha arquivos demais no \"{0}\", se apagará ({1}). "
#: ../java/src/org/klomp/snark/SnarkManager.java:974
#: ../java/src/org/klomp/snark/SnarkManager.java:978
#, java-format
msgid "Torrent file \"{0}\" cannot end in \".torrent\", deleting it!"
msgstr ""
"O arquivo de dados do torrente \"{0}\" não pode terminar em \".torrent' e "
"será apagado."
msgstr "O arquivo de dados do torrente \"{0}\" não pode terminar em \".torrent' e será apagado."
#: ../java/src/org/klomp/snark/SnarkManager.java:976
#: ../java/src/org/klomp/snark/SnarkManager.java:980
#, java-format
msgid "No pieces in \"{0}\", deleting it!"
msgstr "Não ha peças no \"{0}\", se apagará."
#: ../java/src/org/klomp/snark/SnarkManager.java:978
#: ../java/src/org/klomp/snark/SnarkManager.java:982
#, java-format
msgid "Too many pieces in \"{0}\", limit is {1}, deleting it!"
msgstr "Ha peças demais no \"{0}\" e o limite é {1}. Se apagarão."
#: ../java/src/org/klomp/snark/SnarkManager.java:980
#: ../java/src/org/klomp/snark/SnarkManager.java:984
#, java-format
msgid "Pieces are too large in \"{0}\" ({1}B), deleting it."
msgstr "Peças no \"{0}\" são grandes demais ({1}B). Se apagarão."
#: ../java/src/org/klomp/snark/SnarkManager.java:981
#: ../java/src/org/klomp/snark/SnarkManager.java:985
#, java-format
msgid "Limit is {0}B"
msgstr "O limite são \"{0}\"Bytes"
#: ../java/src/org/klomp/snark/SnarkManager.java:989
#: ../java/src/org/klomp/snark/SnarkManager.java:987
#, java-format
msgid "Torrent \"{0}\" has no data, deleting it!"
msgstr "O torrente \"{0}\" não contem dados e será apagado."
#: ../java/src/org/klomp/snark/SnarkManager.java:995
#, java-format
msgid "Torrents larger than {0}B are not supported yet, deleting \"{1}\""
msgstr ""
"torrentes maiores que \"{0}\" Bytes ainda não funcionam, se apagará \"{1}\"."
msgstr "torrentes maiores que \"{0}\" Bytes ainda não funcionam, se apagará \"{1}\"."
#: ../java/src/org/klomp/snark/SnarkManager.java:1005
#: ../java/src/org/klomp/snark/SnarkManager.java:1011
#, java-format
msgid "Error: Could not remove the torrent {0}"
msgstr "Erro: Não se pode quitar o torrente \"{0}\"."
#: ../java/src/org/klomp/snark/SnarkManager.java:1026
#: ../java/src/org/klomp/snark/SnarkManager.java:1044
#: ../java/src/org/klomp/snark/SnarkManager.java:1032
#: ../java/src/org/klomp/snark/SnarkManager.java:1050
#, java-format
msgid "Torrent stopped: \"{0}\""
msgstr "torrente detido: \"{0}\""
#: ../java/src/org/klomp/snark/SnarkManager.java:1065
#: ../java/src/org/klomp/snark/SnarkManager.java:1071
#, java-format
msgid "Torrent removed: \"{0}\""
msgstr "torrente quitado: \"{0}\""
#: ../java/src/org/klomp/snark/SnarkManager.java:1073
#, fuzzy, java-format
#: ../java/src/org/klomp/snark/SnarkManager.java:1079
#, java-format
msgid "Adding torrents in {0}"
msgstr "Os torrentes serão adicionados em {0} minutos ..."
msgstr "Os torrentes serão adicionados em {0} ..."
#: ../java/src/org/klomp/snark/SnarkManager.java:1122
#: ../java/src/org/klomp/snark/SnarkManager.java:1128
#, java-format
msgid "Download finished: {0}"
msgstr "Finalizada a descarga de \"{0}\""
#: ../java/src/org/klomp/snark/SnarkManager.java:1170
#, fuzzy, java-format
#: ../java/src/org/klomp/snark/SnarkManager.java:1176
#, java-format
msgid "Metainfo received for {0}"
msgstr "Não se pode obter torrente de {0}"
msgstr "Metainfo recibido para {0}"
#: ../java/src/org/klomp/snark/SnarkManager.java:1171
#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:525
#: ../java/src/org/klomp/snark/SnarkManager.java:1177
#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:526
#, java-format
msgid "Starting up torrent {0}"
msgstr "Iniciando o torrente {0}"
#: ../java/src/org/klomp/snark/SnarkManager.java:1225
#: ../java/src/org/klomp/snark/SnarkManager.java:1231
msgid "Unable to connect to I2P!"
msgstr "Impossível de se conectar com I2P"
#: ../java/src/org/klomp/snark/SnarkManager.java:1231
#: ../java/src/org/klomp/snark/SnarkManager.java:1237
#, java-format
msgid "Unable to add {0}"
msgstr "Impossível de adicionar {0}"
@@ -382,79 +364,79 @@ msgstr "Taça"
msgid "Up Rate"
msgstr "Taça de subida"
#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:365
#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:366
msgid "Stop all torrents and the I2P tunnel"
msgstr "Deter todos os torrentes e o túnel I2P"
#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:367
#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:368
msgid "Stop All"
msgstr "Deter tudos"
#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:376
#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:377
msgid "Start all torrents and the I2P tunnel"
msgstr "Iniciar todos os torrentes e o túnel I2P"
#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:378
#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:379
msgid "Start All"
msgstr "Arrancar todos"
#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:397
#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:398
msgid "No torrents loaded."
msgstr "Não carregado nenhum torrente"
#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:402
#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:403
msgid "Totals"
msgstr "Total"
#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:404
#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:405
#, java-format
msgid "1 torrent"
msgid_plural "{0} torrents"
msgstr[0] "1 torrente"
msgstr[1] "{0} torrentes"
#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:407
#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:408
#, java-format
msgid "1 connected peer"
msgid_plural "{0} connected peers"
msgstr[0] "1 parceiro conectado"
msgstr[1] "{0} parceiros conectados"
#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:496
#, fuzzy, java-format
#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:497
#, java-format
msgid "Invalid URL: Must start with \"http://\", \"{0}\", or \"{1}\""
msgstr "Endereço não válido - tem que começar com http://"
msgstr "Endereço não válido - tem que começar com \"http://\", \"{0}\", ou \"{1}\"."
#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:544
#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:571
#, fuzzy, java-format
#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:545
#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:572
#, java-format
msgid "Magnet deleted: {0}"
msgstr "Apagada a pasta de dados: {0}"
msgstr "Apagada o magnet: {0}"
#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:552
#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:577
#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:553
#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:578
#, java-format
msgid "Torrent file deleted: {0}"
msgstr "Apagado o arquivo torrente: {0}"
#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:583
#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:593
#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:584
#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:594
#, java-format
msgid "Data file deleted: {0}"
msgstr "Apagado o arquivo de dados: {0}"
#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:585
#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:595
#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:586
#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:596
#, java-format
msgid "Data file could not be deleted: {0}"
msgstr "Não se pode apagar o arquivo de dados: {0}"
#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:604
#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:605
#, java-format
msgid "Data dir deleted: {0}"
msgstr "Apagada a pasta de dados: {0}"
#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:637
#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:638
msgid "Error creating torrent - you must select a tracker"
msgstr "Erro ao criar o torrente - Tens que elegir um rastreador."
@@ -465,12 +447,8 @@ msgstr "torrente criado para \"{0}\""
#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:655
#, java-format
msgid ""
"Many I2P trackers require you to register new torrents before seeding - "
"please do so before starting \"{0}\""
msgstr ""
"Muitos rastreadores no I2P exigem que você registre novos torrentes antes de "
"poder semeá-los. Por favor, faça isto antes de iniciar \"{0}\"!"
msgid "Many I2P trackers require you to register new torrents before seeding - please do so before starting \"{0}\""
msgstr "Muitos rastreadores no I2P exigem que você registre novos torrentes antes de poder semeá-los. Por favor, faça isto antes de iniciar \"{0}\"!"
#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:657
#, java-format
@@ -484,8 +462,7 @@ msgstr "Não se pode criar um torrente para dados que não existam: {0}"
#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:663
msgid "Error creating torrent - you must enter a file or directory"
msgstr ""
"Erro ao criar o torrente - Tens que especificar um arquivo ou uma pasta."
msgstr "Erro ao criar o torrente - Tens que especificar um arquivo ou uma pasta."
#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:666
msgid "Stopping all torrents and closing the I2P tunnel."
@@ -550,9 +527,8 @@ msgid "Stopped"
msgstr "detenido"
#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:886
#, fuzzy
msgid "Torrent details"
msgstr "torrentes"
msgstr "Detalhes do torrente"
#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:898
#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:1160
@@ -592,12 +568,8 @@ msgstr "Retire o torrente da lista ativa, apagando o arquivo .torrent"
#. Then the remaining single quite must be escaped
#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:987
#, java-format
msgid ""
"Are you sure you want to delete the file \\''{0}.torrent\\'' (downloaded "
"data will not be deleted) ?"
msgstr ""
"Está seguro de que quer apagar o arquivo \\''{0}.torrent\\''? (Dados "
"baixados não se apagarão.)"
msgid "Are you sure you want to delete the file \\''{0}.torrent\\'' (downloaded data will not be deleted) ?"
msgstr "Está seguro de que quer apagar o arquivo \\''{0}.torrent\\''? (Dados baixados não se apagarão.)"
#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:990
msgid "Remove"
@@ -612,12 +584,8 @@ msgstr "Apagar o arquivo torrente e o(s) arquivo(s) de dados pertenecentes"
#. Then the remaining single quite must be escaped
#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:1006
#, java-format
msgid ""
"Are you sure you want to delete the torrent \\''{0}\\'' and all downloaded "
"data?"
msgstr ""
"Está seguro de que quer apagar o arquivo torrente \\''{0}\\'' e todos os "
"dados descarregados deste torrente?"
msgid "Are you sure you want to delete the torrent \\''{0}\\'' and all downloaded data?"
msgstr "Está seguro de que quer apagar o arquivo torrente \\''{0}\\'' e todos os dados descarregados deste torrente?"
#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:1009
msgid "Delete"
@@ -637,8 +605,7 @@ msgstr "não interessante (O parceiro não tem peças que precisamos.)"
#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:1079
msgid "Choked (The peer is not allowing us to request pieces)"
msgstr ""
"sufocado (De momento o parceiro não está nos permitindo pedir mais peças.c)"
msgstr "sufocado (De momento o parceiro não está nos permitindo pedir mais peças.c)"
#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:1099
msgid "Uninterested (We have no pieces the peer needs)"
@@ -646,9 +613,7 @@ msgstr "desinteressado (Não temos as peças que o parceiro quer.)"
#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:1101
msgid "Choking (We are not allowing the peer to request pieces)"
msgstr ""
"sufocando (De momento não estamos permitindo que os parceiros peçam mais "
"peças)"
msgstr "sufocando (De momento não estamos permitindo que os parceiros peçam mais peças)"
#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:1159
#, java-format
@@ -664,9 +629,8 @@ msgid "From URL"
msgstr "URL fonte:"
#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:1193
msgid ""
"Enter the torrent file download URL (I2P only), magnet link, or maggot link"
msgstr ""
msgid "Enter the torrent file download URL (I2P only), magnet link, or maggot link"
msgstr "Entre aqui a URL do .torrent (só I2P), a URL magnet ou uma URL maggot."
#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:1198
msgid "Add torrent"
@@ -705,9 +669,8 @@ msgstr "Selecione um rastreador"
#. out.write(_("Open trackers and DHT only"));
#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:1242
#, fuzzy
msgid "Open trackers only"
msgstr "usar também rastreadores abertos"
msgstr " rastreadores abertos"
#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:1257
msgid "or"
@@ -779,12 +742,8 @@ msgid "Use open trackers also"
msgstr "usar também rastreadores abertos"
#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:1358
msgid ""
"If checked, announce torrents to open trackers as well as the tracker listed "
"in the torrent file"
msgstr ""
"Se marcado, anunciar os torrentes aos rastreadores abertos, assim como aos "
"rastreadores listados no arquivo torrente"
msgid "If checked, announce torrents to open trackers as well as the tracker listed in the torrent file"
msgstr "Se marcado, anunciar os torrentes aos rastreadores abertos, assim como aos rastreadores listados no arquivo torrente"
#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:1362
msgid "Open tracker announce URLs"
@@ -817,12 +776,12 @@ msgstr "Guardar configuração"
#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:1436
#, java-format
msgid "Invalid magnet URL {0}"
msgstr ""
msgstr "URL magnet {0} não válida"
#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:1470
#, java-format
msgid "Invalid info hash in magnet URL {0}"
msgstr ""
msgstr "Info hash não válido na URL magnet {0}"
#. * dummies for translation
#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:1500
@@ -840,9 +799,8 @@ msgstr[0] "1 túnel"
msgstr[1] "{0} túneles"
#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:1663
#, fuzzy
msgid "Completion"
msgstr "completo"
msgstr "Finalização"
#. else unknown
#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:1667
@@ -851,21 +809,20 @@ msgid "Size"
msgstr "Tamanho"
#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:1672
#, fuzzy
msgid "Files"
msgstr "Arquivo"
msgstr "Arquivos"
#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:1674
msgid "Pieces"
msgstr ""
msgstr "Peças"
#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:1675
msgid "Piece size"
msgstr ""
msgstr "Tamanho das peças"
#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:1697
msgid "Magnet link"
msgstr ""
msgstr "URL magnet"
#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:1714
#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:1753
@@ -921,105 +878,82 @@ msgstr "Guardar prioridades"
msgid "Torrent fetched from {0}"
msgstr "torrente obtido de {0}"
#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:1989
#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:1988
#, java-format
msgid "Torrent already running: {0}"
msgstr "torrente já em marcha: {0}"
#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:1991
#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:1990
#, java-format
msgid "Torrent already in the queue: {0}"
msgstr "torrente já na cola: {0}"
#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:1997
#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:1996
#, java-format
msgid "Torrent at {0} was not valid"
msgstr "torrente em {0} não foi válido"
#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:2004
#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:2003
#, java-format
msgid "Torrent was not retrieved from {0}"
msgstr "Não se pode obter torrente de {0}"
#~ msgid "Torrent file must originate from an I2P-based tracker"
#~ msgstr "O arquivo torrente tem que incluir um rastreador I2P."
#~ msgid " theme locked and loaded."
#~ msgstr "tema carregado"
#~ msgid "Hide All Attached Peers [connected/total in swarm]"
#~ msgstr "Ocultar todos os pares [conectados/total neste torrente]"
#~ msgid "Show All Attached Peers [connected/total in swarm]"
#~ msgstr "Mostrar todos os pares [conectados/total neste torrente]"
#~ msgid "Loaded Torrents"
#~ msgstr "torrentes carregados"
#~ msgid "Estimated Download Time"
#~ msgstr "tempo restante da descarga"
#~ msgid "1"
#~ msgid_plural "{0}"
#~ msgstr[0] "1"
#~ msgstr[1] "{0}"
#~ msgid "Torrent file {0} does not exist"
#~ msgstr "Arquivo do torrente {0} não existe"
#~ msgid "Copying torrent to {0}"
#~ msgstr "Copiando torrente para {0}"
#~ msgid "from {0}"
#~ msgstr "de {0}"
#~ msgid "Downloading"
#~ msgstr "descarregando"
#~ msgid "FileSize"
#~ msgstr "Tamanho do arquivo"
#~ msgid "Download Status"
#~ msgstr "Estado"
#, fuzzy
#~ msgid "size: {0}B"
#~ msgstr "Tamaño: {0}Bytes"
#~ msgid "Directory to store torrents and data"
#~ msgstr "Carpeta para guardar os arquivos torrentes e os dados"
#~ msgid "Do not download"
#~ msgstr "No descargues"
#~ msgid "Details"
#~ msgstr "Detalles"
#~ msgid "Cannot change the I2CP settings while torrents are active"
#~ msgstr ""
#~ "No se puede cammbiar los ajustes I2CP mientras estén activos los torrents"
#~ msgid "Non-i2p tracker in \"{0}\", deleting it from our list of trackers!"
#~ msgstr ""
#~ "Rastreador fuera de I2P en \"{0}\", borrando de la lista de rastreadores"
#~ msgid "{0} torrents"
#~ msgstr "{0} torrentes"
#~ msgid "Uninteresting"
#~ msgstr "no interesante"
#~ msgid "Choked"
#~ msgstr "frenado"
#~ msgid "Uninterested"
#~ msgstr "desinteresado"
#~ msgid "Choking"
#~ msgstr "frenando"
#~ msgid "Custom tracker URL"
#~ msgstr "URL especial del rastreador"
#~ msgid "Configure"
#~ msgstr "Ajustes"

View File

@@ -8,8 +8,8 @@ msgid ""
msgstr ""
"Project-Id-Version: I2P i2psnark\n"
"Report-Msgid-Bugs-To: \n"
"POT-Creation-Date: 2011-03-03 18:28+0000\n"
"PO-Revision-Date: 2011-02-15 22:27+0500\n"
"POT-Creation-Date: 2011-06-18 14:07+0000\n"
"PO-Revision-Date: 2011-06-18 20:17+0500\n"
"Last-Translator: Hidden Z <hiddenz@mail.i2p>\n"
"Language-Team: foo <foo@bar>\n"
"Language: \n"
@@ -17,8 +17,7 @@ msgstr ""
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
"X-Poedit-Language: Russian\n"
"Plural-Forms: nplurals=3; plural=(n%10==1 && n%100!=11 ? 0 : n%10>=2 && n"
"%10<=4 && (n%100<10 || n%100>=20) ? 1 : 2)\n"
"Plural-Forms: nplurals=3; plural=(n%10==1 && n%100!=11 ? 0 : n%10>=2 && n%10<=4 && (n%100<10 || n%100>=20) ? 1 : 2)\n"
#: ../java/src/org/klomp/snark/SnarkManager.java:307
#, java-format
@@ -47,9 +46,7 @@ msgstr "Задержка запуска изменена на {0}"
#: ../java/src/org/klomp/snark/SnarkManager.java:386
msgid "I2CP and tunnel changes will take effect after stopping all torrents"
msgstr ""
"Изменения настроек I2CP и туннелей вступят в силу после остановки всех "
"торрентов."
msgstr "Изменения настроек I2CP и туннелей вступят в силу после остановки всех торрентов."
#: ../java/src/org/klomp/snark/SnarkManager.java:393
msgid "Disconnecting old I2CP destination"
@@ -61,11 +58,8 @@ msgid "I2CP settings changed to {0}"
msgstr "Новые параметры I2CP: {0}"
#: ../java/src/org/klomp/snark/SnarkManager.java:402
msgid ""
"Unable to connect with the new settings, reverting to the old I2CP settings"
msgstr ""
"Не удалось соединиться с использованием новых настроек I2CP, возвращаемся к "
"старым настройкам"
msgid "Unable to connect with the new settings, reverting to the old I2CP settings"
msgstr "Не удалось соединиться с использованием новых настроек I2CP, возвращаемся к старым настройкам"
#: ../java/src/org/klomp/snark/SnarkManager.java:406
msgid "Unable to reconnect with the old settings!"
@@ -90,27 +84,20 @@ msgstr "Автостарт выключен"
#: ../java/src/org/klomp/snark/SnarkManager.java:437
msgid "Enabled open trackers - torrent restart required to take effect."
msgstr ""
"Включено использование открытых трекеров. Требуется перезапуск торрента, "
"чтобы изменения вступили в силу."
msgstr "Включено использование открытых трекеров. Требуется перезапуск торрента, чтобы изменения вступили в силу."
#: ../java/src/org/klomp/snark/SnarkManager.java:439
msgid "Disabled open trackers - torrent restart required to take effect."
msgstr ""
"Отключено использование открытых трекеров. Требуется перезапуск торрента, "
"чтобы изменения вступили в силу."
msgstr "Отключено использование открытых трекеров. Требуется перезапуск торрента, чтобы изменения вступили в силу."
#: ../java/src/org/klomp/snark/SnarkManager.java:447
msgid "Open Tracker list changed - torrent restart required to take effect."
msgstr ""
"Изменен список открытых трекеров. Требуется перезапуск торрента, чтобы "
"изменения вступили в силу."
msgstr "Изменен список открытых трекеров. Требуется перезапуск торрента, чтобы изменения вступили в силу."
#: ../java/src/org/klomp/snark/SnarkManager.java:454
#, java-format
msgid "{0} theme loaded, return to main i2psnark page to view."
msgstr ""
"{0} тема загружена, вернитесь на основную страницу i2psnark для просмотра."
msgstr "{0} тема загружена, вернитесь на основную страницу i2psnark для просмотра."
#: ../java/src/org/klomp/snark/SnarkManager.java:461
msgid "Configuration unchanged."
@@ -141,161 +128,152 @@ msgid "Cannot open \"{0}\""
msgstr "Не удалось открыть \"{0}\""
#. TODO - if the existing one is a magnet, delete it and add the metainfo instead?
#: ../java/src/org/klomp/snark/SnarkManager.java:586
#: ../java/src/org/klomp/snark/SnarkManager.java:661
#: ../java/src/org/klomp/snark/SnarkManager.java:716
#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:1976
#: ../java/src/org/klomp/snark/SnarkManager.java:589
#: ../java/src/org/klomp/snark/SnarkManager.java:665
#: ../java/src/org/klomp/snark/SnarkManager.java:720
#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:1978
#, java-format
msgid "Torrent with this info hash is already running: {0}"
msgstr "Торрент с таким info hash уже запущен: {0}"
#. addMessage(_("Warning - No I2P trackers in \"{0}\", will announce to I2P open trackers and DHT only.", info.getName()));
#: ../java/src/org/klomp/snark/SnarkManager.java:593
#: ../java/src/org/klomp/snark/SnarkManager.java:596
#, java-format
msgid ""
"Warning - No I2P trackers in \"{0}\", will announce to I2P open trackers "
"only."
msgstr ""
"Внимание - в \"{0}\" не найдено I2P трекеров, анонсирование будет "
"производиться только на открытых трекерах I2P."
msgid "Warning - No I2P trackers in \"{0}\", will announce to I2P open trackers only."
msgstr "Внимание - в \"{0}\" не найдено I2P трекеров, анонсирование будет производиться только на открытых трекерах I2P."
#. addMessage(_("Warning - No I2P trackers in \"{0}\", and DHT and open trackers are disabled, you should enable open trackers or DHT before starting the torrent.", info.getName()));
#: ../java/src/org/klomp/snark/SnarkManager.java:598
#: ../java/src/org/klomp/snark/SnarkManager.java:601
#, java-format
msgid ""
"Warning - No I2P Trackers found in \"{0}\". Make sure Open Tracker is "
"enabled before starting this torrent."
msgstr ""
"Внимание - в \"{0}\" не найдено I2P трекеров. Перед запуском торрента "
"убедитесь, что использование открытых трекеров включено."
msgid "Warning - No I2P Trackers found in \"{0}\". Make sure Open Tracker is enabled before starting this torrent."
msgstr "Внимание - в \"{0}\" не найдено I2P трекеров. Перед запуском торрента убедитесь, что использование открытых трекеров включено."
#: ../java/src/org/klomp/snark/SnarkManager.java:619
#: ../java/src/org/klomp/snark/SnarkManager.java:622
#, java-format
msgid "Torrent in \"{0}\" is invalid"
msgstr "Торрент в \"{0}\" некорректен"
#: ../java/src/org/klomp/snark/SnarkManager.java:624
#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:1999
#: ../java/src/org/klomp/snark/SnarkManager.java:627
#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:2000
#, java-format
msgid "ERROR - Out of memory, cannot create torrent from {0}"
msgstr "ОШИБКА - нехватка памяти, невозможно создать торрент из {0}"
#: ../java/src/org/klomp/snark/SnarkManager.java:635
#: ../java/src/org/klomp/snark/SnarkManager.java:639
#, java-format
msgid "Torrent added and started: \"{0}\""
msgstr "Торрент добавлен и запущен: \"{0}\""
#: ../java/src/org/klomp/snark/SnarkManager.java:637
#: ../java/src/org/klomp/snark/SnarkManager.java:641
#, java-format
msgid "Torrent added: \"{0}\""
msgstr "Торрент добавлен: \"{0}\""
#: ../java/src/org/klomp/snark/SnarkManager.java:672
#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:490
#: ../java/src/org/klomp/snark/SnarkManager.java:676
#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:491
#, java-format
msgid "Fetching {0}"
msgstr "Получение торрента: {0}"
#: ../java/src/org/klomp/snark/SnarkManager.java:675
#, java-format
msgid ""
"We have no saved peers and no other torrents are running. Fetch of {0} will "
"not succeed until you start another torrent."
msgstr ""
"Мы не имеем сохранённых пиров и нет других запущенных торрентов. Загрузка "
"{0} не будет успешна пока вы не запустите другой торрент."
#: ../java/src/org/klomp/snark/SnarkManager.java:679
#, java-format
msgid "We have no saved peers and no other torrents are running. Fetch of {0} will not succeed until you start another torrent."
msgstr "Мы не имеем сохранённых пиров и нет других запущенных торрентов. Загрузка {0} не будет успешна пока вы не запустите другой торрент."
#: ../java/src/org/klomp/snark/SnarkManager.java:683
#, java-format
msgid "Adding {0}"
msgstr "Добавление {0}"
#: ../java/src/org/klomp/snark/SnarkManager.java:726
#: ../java/src/org/klomp/snark/SnarkManager.java:749
#: ../java/src/org/klomp/snark/SnarkManager.java:1174
#: ../java/src/org/klomp/snark/SnarkManager.java:730
#: ../java/src/org/klomp/snark/SnarkManager.java:753
#: ../java/src/org/klomp/snark/SnarkManager.java:1180
#, java-format
msgid "Failed to copy torrent file to {0}"
msgstr "Не удалось скопировать торрент в: {0}"
#: ../java/src/org/klomp/snark/SnarkManager.java:972
#: ../java/src/org/klomp/snark/SnarkManager.java:976
#, java-format
msgid "Too many files in \"{0}\" ({1}), deleting it!"
msgstr "Слишком много файлов в торренте \"{0}\" ({1}), удаляем его!"
#: ../java/src/org/klomp/snark/SnarkManager.java:974
#: ../java/src/org/klomp/snark/SnarkManager.java:978
#, java-format
msgid "Torrent file \"{0}\" cannot end in \".torrent\", deleting it!"
msgstr ""
"Торрент \"{0}\" содержит единственный файл заканчивающийся на \".torrent\", "
"удаляем его!"
msgstr "Торрент \"{0}\" содержит единственный файл заканчивающийся на \".torrent\", удаляем его!"
#: ../java/src/org/klomp/snark/SnarkManager.java:976
#: ../java/src/org/klomp/snark/SnarkManager.java:980
#, java-format
msgid "No pieces in \"{0}\", deleting it!"
msgstr "В торренте \"{0}\" не оказалось ни одной части, удаляем его!"
#: ../java/src/org/klomp/snark/SnarkManager.java:978
#: ../java/src/org/klomp/snark/SnarkManager.java:982
#, java-format
msgid "Too many pieces in \"{0}\", limit is {1}, deleting it!"
msgstr "Слишком много частей в торренте \"{0}\" (наш предел {1}), удаляем его!"
#: ../java/src/org/klomp/snark/SnarkManager.java:980
#: ../java/src/org/klomp/snark/SnarkManager.java:984
#, java-format
msgid "Pieces are too large in \"{0}\" ({1}B), deleting it."
msgstr "Слишком крупные части в торренте \"{0}\" ({1}B), удаляем его."
#: ../java/src/org/klomp/snark/SnarkManager.java:981
#: ../java/src/org/klomp/snark/SnarkManager.java:985
#, java-format
msgid "Limit is {0}B"
msgstr "Наш предел {0}B"
#: ../java/src/org/klomp/snark/SnarkManager.java:989
#: ../java/src/org/klomp/snark/SnarkManager.java:987
#, java-format
msgid "Torrent \"{0}\" has no data, deleting it!"
msgstr "Торрент \"{0}\" не содержит данных, удаляем его!"
#: ../java/src/org/klomp/snark/SnarkManager.java:995
#, java-format
msgid "Torrents larger than {0}B are not supported yet, deleting \"{1}\""
msgstr "Торренты крупнее чем {0}B пока не поддерживается, удаляем \"{1}\""
#: ../java/src/org/klomp/snark/SnarkManager.java:1005
#: ../java/src/org/klomp/snark/SnarkManager.java:1011
#, java-format
msgid "Error: Could not remove the torrent {0}"
msgstr "Ошибка: Невозможно удалить торрент {0}"
#: ../java/src/org/klomp/snark/SnarkManager.java:1026
#: ../java/src/org/klomp/snark/SnarkManager.java:1044
#: ../java/src/org/klomp/snark/SnarkManager.java:1032
#: ../java/src/org/klomp/snark/SnarkManager.java:1050
#, java-format
msgid "Torrent stopped: \"{0}\""
msgstr "Торрент остановлен: \"{0}\""
#: ../java/src/org/klomp/snark/SnarkManager.java:1065
#: ../java/src/org/klomp/snark/SnarkManager.java:1071
#, java-format
msgid "Torrent removed: \"{0}\""
msgstr "Торрент удален: \"{0}\""
#: ../java/src/org/klomp/snark/SnarkManager.java:1073
#: ../java/src/org/klomp/snark/SnarkManager.java:1079
#, java-format
msgid "Adding torrents in {0}"
msgstr "Добавление торрентов через {0}"
#: ../java/src/org/klomp/snark/SnarkManager.java:1122
#: ../java/src/org/klomp/snark/SnarkManager.java:1128
#, java-format
msgid "Download finished: {0}"
msgstr "Закачка завершена: {0}"
#: ../java/src/org/klomp/snark/SnarkManager.java:1170
#: ../java/src/org/klomp/snark/SnarkManager.java:1176
#, java-format
msgid "Metainfo received for {0}"
msgstr "Метаданные получены для {0}"
#: ../java/src/org/klomp/snark/SnarkManager.java:1171
#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:525
#: ../java/src/org/klomp/snark/SnarkManager.java:1177
#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:526
#, java-format
msgid "Starting up torrent {0}"
msgstr "Запускаем торрент: {0}"
#: ../java/src/org/klomp/snark/SnarkManager.java:1225
#: ../java/src/org/klomp/snark/SnarkManager.java:1231
msgid "Unable to connect to I2P!"
msgstr "Не удалось установить соединение с I2P!"
#: ../java/src/org/klomp/snark/SnarkManager.java:1231
#: ../java/src/org/klomp/snark/SnarkManager.java:1237
#, java-format
msgid "Unable to add {0}"
msgstr "Не удаётся добавить {0}"
@@ -323,7 +301,7 @@ msgid "Forum"
msgstr "Форум"
#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:284
#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:1719
#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:1721
msgid "Status"
msgstr "Статус"
@@ -338,8 +316,8 @@ msgid "Show Peers"
msgstr "показать список пиров"
#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:306
#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:1643
#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:1659
#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:1645
#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:1661
msgid "Torrent"
msgstr "Торрент"
@@ -386,31 +364,31 @@ msgstr "Скорость"
msgid "Up Rate"
msgstr "Скорость отдачи"
#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:365
#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:366
msgid "Stop all torrents and the I2P tunnel"
msgstr "Остановить все торренты и закрыть соединение с I2P"
#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:367
#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:368
msgid "Stop All"
msgstr "Остановить все"
#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:376
#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:377
msgid "Start all torrents and the I2P tunnel"
msgstr "Запустить все торренты и открыть соединение с I2P"
#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:378
#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:379
msgid "Start All"
msgstr "Запустить все"
#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:397
#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:398
msgid "No torrents loaded."
msgstr "Нет загруженных торрентов."
#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:402
#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:403
msgid "Totals"
msgstr "Всего"
#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:404
#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:405
#, java-format
msgid "1 torrent"
msgid_plural "{0} torrents"
@@ -418,7 +396,7 @@ msgstr[0] "{0} торрент"
msgstr[1] "{0} торрента"
msgstr[2] "{0} торрентов"
#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:407
#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:408
#, java-format
msgid "1 connected peer"
msgid_plural "{0} connected peers"
@@ -426,42 +404,41 @@ msgstr[0] "{0} подсоединенный пир"
msgstr[1] "{0} подсоединенных пиров"
msgstr[2] "{0} подсоединенных пиров"
#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:496
#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:497
#, java-format
msgid "Invalid URL: Must start with \"http://\", \"{0}\", or \"{1}\""
msgstr ""
"Некорректный URL: должен начинаться с \"http://\", \"{0}\", или \"{1}\""
msgstr "Некорректный URL: должен начинаться с \"http://\", \"{0}\", или \"{1}\""
#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:544
#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:571
#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:545
#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:572
#, java-format
msgid "Magnet deleted: {0}"
msgstr "Magnet удален: {0}"
#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:552
#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:577
#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:553
#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:578
#, java-format
msgid "Torrent file deleted: {0}"
msgstr "Удален торрент: {0}"
#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:583
#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:593
#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:584
#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:594
#, java-format
msgid "Data file deleted: {0}"
msgstr "Файл удален: {0}"
#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:585
#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:595
#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:586
#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:596
#, java-format
msgid "Data file could not be deleted: {0}"
msgstr "Не удалось удалить файл: {0}"
#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:604
#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:605
#, java-format
msgid "Data dir deleted: {0}"
msgstr "Директория удалена: {0}"
#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:637
#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:638
msgid "Error creating torrent - you must select a tracker"
msgstr "Торрент не создан — вы должны указать трекер"
@@ -472,12 +449,8 @@ msgstr "Создан торрент для \"{0}\""
#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:655
#, java-format
msgid ""
"Many I2P trackers require you to register new torrents before seeding - "
"please do so before starting \"{0}\""
msgstr ""
"Многие I2P трекеры требуют зарегистрировать на них торрент перед началом "
"раздачи — пожалуйста проверьте требуется ли это перед запуском \"{0}\""
msgid "Many I2P trackers require you to register new torrents before seeding - please do so before starting \"{0}\""
msgstr "Многие I2P трекеры требуют зарегистрировать на них торрент перед началом раздачи — пожалуйста проверьте требуется ли это перед запуском \"{0}\""
#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:657
#, java-format
@@ -487,8 +460,7 @@ msgstr "Ошибка при создании торрента для: \"{0}\""
#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:660
#, java-format
msgid "Cannot create a torrent for the nonexistent data: {0}"
msgstr ""
"Невозможно создать торрент для несуществующего файла или директории: {0}"
msgstr "Невозможно создать торрент для несуществующего файла или директории: {0}"
#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:663
msgid "Error creating torrent - you must enter a file or directory"
@@ -534,8 +506,8 @@ msgid "Seeding"
msgstr "Раздается"
#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:828
#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:1665
#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:1770
#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:1667
#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:1772
msgid "Complete"
msgstr "Завершен"
@@ -563,7 +535,7 @@ msgid "Torrent details"
msgstr "Подробная информация"
#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:898
#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:1160
#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:1162
msgid "Info"
msgstr "Информация"
@@ -600,12 +572,8 @@ msgstr "Удалить торрент из списка и с диска"
#. Then the remaining single quite must be escaped
#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:987
#, java-format
msgid ""
"Are you sure you want to delete the file \\''{0}.torrent\\'' (downloaded "
"data will not be deleted) ?"
msgstr ""
"Вы действительно хотите удалить \\''{0}.torrent\\''? (загруженные файлы "
"удаляться НЕ будут)"
msgid "Are you sure you want to delete the file \\''{0}.torrent\\'' (downloaded data will not be deleted) ?"
msgstr "Вы действительно хотите удалить \\''{0}.torrent\\''? (загруженные файлы удаляться НЕ будут)"
#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:990
msgid "Remove"
@@ -620,222 +588,208 @@ msgstr "Удалить торрент и стереть загруженные
#. Then the remaining single quite must be escaped
#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:1006
#, java-format
msgid ""
"Are you sure you want to delete the torrent \\''{0}\\'' and all downloaded "
"data?"
msgstr ""
"Вы действительно хотите удалить торрент \\''{0}\\'' и все загруженные файлы?"
msgid "Are you sure you want to delete the torrent \\''{0}\\'' and all downloaded data?"
msgstr "Вы действительно хотите удалить торрент \\''{0}\\'' и все загруженные файлы?"
#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:1009
msgid "Delete"
msgstr "Стереть"
#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:1042
#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:1044
msgid "Unknown"
msgstr "Неизвестный"
#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:1054
#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:1056
msgid "Seed"
msgstr "Сид"
#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:1077
#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:1079
msgid "Uninteresting (The peer has no pieces we need)"
msgstr "Uninteresting (У пира нет нужных нам частей торрента)"
#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:1079
#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:1081
msgid "Choked (The peer is not allowing us to request pieces)"
msgstr "Choked (Этот пир не позволяет нам запрашивать части торрента)"
#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:1099
#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:1101
msgid "Uninterested (We have no pieces the peer needs)"
msgstr "Uninterested (У нас нужных этому пиру частей торрента)"
#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:1101
#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:1103
msgid "Choking (We are not allowing the peer to request pieces)"
msgstr "Choking (Мы не позволяем этому пиру запрашивать у нас части торрента)"
#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:1159
#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:1161
#, java-format
msgid "Details at {0} tracker"
msgstr "Детали на трекере {0}"
#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:1188
#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:1190
msgid "Add Torrent"
msgstr "Добавить Торрент"
#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:1190
#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:1192
msgid "From URL"
msgstr "Из URL"
#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:1193
msgid ""
"Enter the torrent file download URL (I2P only), magnet link, or maggot link"
msgstr ""
"Введите URL (только I2P) для загрузки торрент-файла, magnet-ссылку, или "
"maggot-ссылку"
#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:1195
msgid "Enter the torrent file download URL (I2P only), magnet link, or maggot link"
msgstr "Введите URL (только I2P) для загрузки торрент-файла, magnet-ссылку, или maggot-ссылку"
#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:1198
#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:1200
msgid "Add torrent"
msgstr "Добавить торрент"
#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:1201
#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:1203
#, java-format
msgid "You can also copy .torrent files to: {0}."
msgstr "Либо вы можете просто скопировать .torrent-файлы в директорию {0}."
#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:1203
#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:1205
msgid "Removing a .torrent will cause it to stop."
msgstr "Удаление .torrent-файла приведёт к остановке торрента."
#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:1226
#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:1228
msgid "Create Torrent"
msgstr "Создать Торрент"
#. out.write("From file: <input type=\"file\" name=\"newFile\" size=\"50\" value=\"" + newFile + "\" /><br>\n");
#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:1229
#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:1231
msgid "Data to seed"
msgstr "Файлы для раздачи"
#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:1233
msgid "File or directory to seed (must be within the specified path)"
msgstr ""
"Файл или директория для раздачи (вводите только название файла или "
"директории, указание абсолютных путей не поддерживается)"
#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:1235
#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:1684
msgid "File or directory to seed (must be within the specified path)"
msgstr "Файл или директория для раздачи (вводите только название файла или директории, указание абсолютных путей не поддерживается)"
#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:1237
#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:1686
msgid "Tracker"
msgstr "Трекер"
#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:1237
#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:1239
msgid "Select a tracker"
msgstr "Выбрать трекер"
#. out.write(_("Open trackers and DHT only"));
#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:1242
#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:1244
msgid "Open trackers only"
msgstr "Только открытые трекеры"
#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:1257
#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:1259
msgid "or"
msgstr "или"
#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:1260
#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:1262
msgid "Specify custom tracker announce URL"
msgstr "Задать URL анонсера вручную"
#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:1263
#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:1265
msgid "Create torrent"
msgstr "Создать торрент"
#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:1281
#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:1420
#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:1283
#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:1422
msgid "Configuration"
msgstr "Настройки"
#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:1285
#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:1287
msgid "Data directory"
msgstr "Директория для файлов"
#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:1287
#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:1289
msgid "Edit i2psnark.config and restart to change"
msgstr ""
"Для изменения отредактируйте файл i2psnark.config и перезагрузите I2PSnark"
msgstr "Для изменения отредактируйте файл i2psnark.config и перезагрузите I2PSnark"
#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:1291
#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:1293
msgid "Auto start"
msgstr "Автозапуск"
#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:1295
#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:1297
msgid "If checked, automatically start torrents that are added"
msgstr "Автоматически запускать торренты после добавления"
#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:1299
#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:1301
msgid "Theme"
msgstr "Тема"
#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:1312
#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:1314
msgid "Startup delay"
msgstr "Задержка запуска"
#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:1314
#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:1316
msgid "minutes"
msgstr "минут"
#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:1338
#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:1340
msgid "Total uploader limit"
msgstr "Ограничение количества слотов отдачи"
# TODO should replace "uploader limit NN peers" with "global number of upload slots: NN"
#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:1341
#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:1343
msgid "peers"
msgstr "пиров"
#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:1345
#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:1347
msgid "Up bandwidth limit"
msgstr "Ограничение скорости отдачи"
#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:1348
msgid "Half available bandwidth recommended."
msgstr ""
"Рекомендуется использовать половину от доступной пропускной способности."
#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:1350
msgid "Half available bandwidth recommended."
msgstr "Рекомендуется использовать половину от доступной пропускной способности."
#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:1352
msgid "View or change router bandwidth"
msgstr "Посмотреть/настроить ограничения скорости в маршрутизаторе I2P"
#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:1354
#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:1356
msgid "Use open trackers also"
msgstr "Дополнительно использовать открытые трекеры"
#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:1358
msgid ""
"If checked, announce torrents to open trackers as well as the tracker listed "
"in the torrent file"
msgstr ""
"Анонсировать торренты на открытых трекерах, дополнительно к тем, что указаны "
"внутри торрента"
#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:1360
msgid "If checked, announce torrents to open trackers as well as the tracker listed in the torrent file"
msgstr "Анонсировать торренты на открытых трекерах, дополнительно к тем, что указаны внутри торрента"
#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:1362
#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:1364
msgid "Open tracker announce URLs"
msgstr "URL открытых трекеров"
#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:1374
#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:1376
msgid "Inbound Settings"
msgstr "Входящие туннели"
#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:1380
#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:1382
msgid "Outbound Settings"
msgstr "Исходящие туннели"
#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:1388
#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:1390
msgid "I2CP host"
msgstr "Адрес I2CP"
#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:1393
#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:1395
msgid "I2CP port"
msgstr "Порт I2CP"
#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:1406
#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:1408
msgid "I2CP options"
msgstr "Параметры I2CP"
#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:1411
#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:1413
msgid "Save configuration"
msgstr "Сохранить настройки"
#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:1436
#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:1438
#, java-format
msgid "Invalid magnet URL {0}"
msgstr "Неправильный magnet URL {0}"
#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:1470
#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:1472
#, java-format
msgid "Invalid info hash in magnet URL {0}"
msgstr "Неправильный info hash в magnet URL {0}"
#. * dummies for translation
#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:1500
#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:1502
#, java-format
msgid "1 hop"
msgid_plural "{0} hops"
@@ -843,7 +797,7 @@ msgstr[0] "{0} хоп"
msgstr[1] "{0} хопа"
msgstr[2] "{0} хопов"
#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:1501
#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:1503
#, java-format
msgid "1 tunnel"
msgid_plural "{0} tunnels"
@@ -851,104 +805,104 @@ msgstr[0] "{0} туннель"
msgstr[1] "{0} туннеля"
msgstr[2] "{0} туннелей"
#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:1663
#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:1665
msgid "Completion"
msgstr "Загружено"
#. else unknown
#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:1667
#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:1716
#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:1669
#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:1718
msgid "Size"
msgstr "Размер"
#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:1672
#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:1674
msgid "Files"
msgstr "Файлов"
#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:1674
#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:1676
msgid "Pieces"
msgstr "Части"
#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:1675
#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:1677
msgid "Piece size"
msgstr "Размер части"
#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:1697
#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:1699
msgid "Magnet link"
msgstr "Magnet ссылка"
#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:1714
#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:1753
#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:1716
#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:1755
msgid "Directory"
msgstr "Директория"
#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:1723
#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:1725
msgid "Priority"
msgstr "Приоритет"
#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:1728
#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:1730
msgid "Up to higher level directory"
msgstr "Перейти в директорию уровнем выше"
# This debug error message intentionally left in English
#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:1758
#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:1760
msgid "Torrent not found?"
msgstr "Torrent not found?"
# This debug error message intentionally left in English
#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:1767
#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:1769
msgid "File not found in torrent?"
msgstr "File not found in torrent?"
#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:1780
#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:1782
msgid "complete"
msgstr "скачано"
#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:1781
#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:1783
msgid "bytes remaining"
msgstr "байт осталось"
#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:1806
#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:1808
msgid "Open"
msgstr "Открыть"
#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:1832
#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:1834
msgid "High"
msgstr "Высокий"
#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:1837
#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:1839
msgid "Normal"
msgstr "Нормальный"
#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:1842
#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:1844
msgid "Skip"
msgstr "Пропустить"
#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:1851
#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:1853
msgid "Save priorities"
msgstr "Сохранить приоритеты"
#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:1967
#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:1969
#, java-format
msgid "Torrent fetched from {0}"
msgstr "Получен торрент из: {0}"
#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:1989
#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:1990
#, java-format
msgid "Torrent already running: {0}"
msgstr "Торрент уже запущен: {0}"
#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:1991
#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:1992
#, java-format
msgid "Torrent already in the queue: {0}"
msgstr "Торрент уже в очереди: {0}"
#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:1997
#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:1998
#, java-format
msgid "Torrent at {0} was not valid"
msgstr "Торрент полученный из {0} некорректен"
#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:2004
#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:2005
#, java-format
msgid "Torrent was not retrieved from {0}"
msgstr "Не удалось получить торрент из: {0}"

View File

@@ -0,0 +1,948 @@
# I2P
# Copyright (C) 2009 The I2P Project
# This file is distributed under the same license as the i2psnark package.
# To contribute translations, see http://www.i2p2.de/newdevelopers
#
# <ducki2p@gmail.com>, 2011
# <i2p@robertfoss.se>, 2011
# hottuna <i2p@robertfoss.se>, 2011
# 123hund123 <M8R-ra4r1r@mailinator.com>, 2011
msgid ""
msgstr ""
"Project-Id-Version: I2P\n"
"Report-Msgid-Bugs-To: https://trac.i2p2.de/\n"
"POT-Creation-Date: 2011-05-24 06:00+0000\n"
"PO-Revision-Date: 2011-06-05 14:52+0000\n"
"Last-Translator: digitalmannen <digitalmannen@gmail.com>\n"
"Language-Team: Swedish (Sweden) (http://www.transifex.net/projects/p/I2P/team/sv_SE/)\n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
"Language: sv_SE\n"
"Plural-Forms: nplurals=2; plural=(n != 1)\n"
#: ../java/src/org/klomp/snark/SnarkManager.java:307
#, java-format
msgid "Total uploaders limit changed to {0}"
msgstr "Gräns för totalt antal uppladdare är bytt till {0}"
#: ../java/src/org/klomp/snark/SnarkManager.java:309
#, java-format
msgid "Minimum total uploaders limit is {0}"
msgstr "Gräns för totalt minsta antal uppladdare är bytt till {0}"
#: ../java/src/org/klomp/snark/SnarkManager.java:321
#, java-format
msgid "Up BW limit changed to {0}KBps"
msgstr "Uppladdnings bandbredd bytt till {0}KBps"
#: ../java/src/org/klomp/snark/SnarkManager.java:323
#, java-format
msgid "Minimum up bandwidth limit is {0}KBps"
msgstr "Minsta uppladdnings bandbredd bytt till {0}KBps"
#: ../java/src/org/klomp/snark/SnarkManager.java:335
#, java-format
msgid "Startup delay changed to {0}"
msgstr "Fördröjning vid uppstart bytt till {0}"
#: ../java/src/org/klomp/snark/SnarkManager.java:386
msgid "I2CP and tunnel changes will take effect after stopping all torrents"
msgstr ""
"I2CP och tunnel förändringar kommer träda i kraft efter alla torrentar "
"stoppats."
#: ../java/src/org/klomp/snark/SnarkManager.java:393
msgid "Disconnecting old I2CP destination"
msgstr "Kopplat från gammal I2CP destination"
#: ../java/src/org/klomp/snark/SnarkManager.java:397
#, java-format
msgid "I2CP settings changed to {0}"
msgstr "I2CP-inställningar ändrade till {0}"
#: ../java/src/org/klomp/snark/SnarkManager.java:402
msgid ""
"Unable to connect with the new settings, reverting to the old I2CP settings"
msgstr ""
"Misslyckades med anslutningsförsök med nya inställningar, återställer de "
"gamla I2CP inställningarna"
#: ../java/src/org/klomp/snark/SnarkManager.java:406
msgid "Unable to reconnect with the old settings!"
msgstr "Misslyckades med anslutningsförsök med gamla inställningar!"
#: ../java/src/org/klomp/snark/SnarkManager.java:408
msgid "Reconnected on the new I2CP destination"
msgstr "Återanslöt mot den nya I2CP destinationen"
#: ../java/src/org/klomp/snark/SnarkManager.java:418
#, java-format
msgid "I2CP listener restarted for \"{0}\""
msgstr "I2CP-lyssnar omstartad på grund av \"{0}\""
#: ../java/src/org/klomp/snark/SnarkManager.java:429
msgid "Enabled autostart"
msgstr "Aktiverade automatisk start"
#: ../java/src/org/klomp/snark/SnarkManager.java:431
msgid "Disabled autostart"
msgstr "Avaktiverade automatisk start"
#: ../java/src/org/klomp/snark/SnarkManager.java:437
msgid "Enabled open trackers - torrent restart required to take effect."
msgstr ""
"Aktiverade öppna trackers - torrent måste startas om för att inställningen "
"ska träda i kraft"
#: ../java/src/org/klomp/snark/SnarkManager.java:439
msgid "Disabled open trackers - torrent restart required to take effect."
msgstr ""
"Avaktiverade öppna trackers - torrent måste startas om för att inställningen"
" ska träda i kraft"
#: ../java/src/org/klomp/snark/SnarkManager.java:447
msgid "Open Tracker list changed - torrent restart required to take effect."
msgstr ""
"Öppen tracker-lista förändrad - torrent måste startas om för att "
"inställningen ska träda i kraft"
#: ../java/src/org/klomp/snark/SnarkManager.java:454
#, java-format
msgid "{0} theme loaded, return to main i2psnark page to view."
msgstr "{0} tema laddat, återgå till huvudvyn för i2psnark."
#: ../java/src/org/klomp/snark/SnarkManager.java:461
msgid "Configuration unchanged."
msgstr "Inställningar oförändrade"
#: ../java/src/org/klomp/snark/SnarkManager.java:471
#, java-format
msgid "Unable to save the config to {0}"
msgstr "Misslyckades med att spara inställningar till {0}"
#: ../java/src/org/klomp/snark/SnarkManager.java:536
msgid "Connecting to I2P"
msgstr "Ansluter till I2P"
#: ../java/src/org/klomp/snark/SnarkManager.java:539
msgid "Error connecting to I2P - check your I2CP settings!"
msgstr ""
"Problem vid anslutning till I2P - kontrollera dina I2CP-inställningar!"
#: ../java/src/org/klomp/snark/SnarkManager.java:548
#, java-format
msgid "Error: Could not add the torrent {0}"
msgstr "Problem: Kunda in lägga till torrent {0}"
#. catch this here so we don't try do delete it below
#: ../java/src/org/klomp/snark/SnarkManager.java:570
#, java-format
msgid "Cannot open \"{0}\""
msgstr "Kan inte öppna \"{0}\""
#. TODO - if the existing one is a magnet, delete it and add the metainfo
#. instead?
#: ../java/src/org/klomp/snark/SnarkManager.java:589
#: ../java/src/org/klomp/snark/SnarkManager.java:665
#: ../java/src/org/klomp/snark/SnarkManager.java:720
#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:1976
#, java-format
msgid "Torrent with this info hash is already running: {0}"
msgstr "Torrent med denna infohash körs redan: {0}"
#. addMessage(_("Warning - No I2P trackers in \"{0}\", will announce to I2P
#. open trackers and DHT only.", info.getName()));
#: ../java/src/org/klomp/snark/SnarkManager.java:596
#, java-format
msgid ""
"Warning - No I2P trackers in \"{0}\", will announce to I2P open trackers "
"only."
msgstr ""
"Varning - Inga I2P trackers i \"{0}\", kommer enbart anmäla til öppna "
"trackers i I2P."
#. addMessage(_("Warning - No I2P trackers in \"{0}\", and DHT and open
#. trackers are disabled, you should enable open trackers or DHT before
#. starting the torrent.", info.getName()));
#: ../java/src/org/klomp/snark/SnarkManager.java:601
#, java-format
msgid ""
"Warning - No I2P Trackers found in \"{0}\". Make sure Open Tracker is "
"enabled before starting this torrent."
msgstr ""
"Varning - Inga I2P trackers i \"{0}\". Kontrollera att öppna trackers är "
"påslagna innan denhär torrenten startas."
#: ../java/src/org/klomp/snark/SnarkManager.java:622
#, java-format
msgid "Torrent in \"{0}\" is invalid"
msgstr "Torrent i \"{0}\" är ogiltig"
#: ../java/src/org/klomp/snark/SnarkManager.java:627
#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:1998
#, java-format
msgid "ERROR - Out of memory, cannot create torrent from {0}"
msgstr "Problem: Minnet har tagit slut, kan inte skapa torrent från {0}"
#: ../java/src/org/klomp/snark/SnarkManager.java:639
#, java-format
msgid "Torrent added and started: \"{0}\""
msgstr "Torrent tillagd och startad: \"{0}\""
#: ../java/src/org/klomp/snark/SnarkManager.java:641
#, java-format
msgid "Torrent added: \"{0}\""
msgstr "Torrent tillagd: \"{0}\""
#: ../java/src/org/klomp/snark/SnarkManager.java:676
#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:491
#, java-format
msgid "Fetching {0}"
msgstr "Hämtar {0}"
#: ../java/src/org/klomp/snark/SnarkManager.java:679
#, java-format
msgid ""
"We have no saved peers and no other torrents are running. Fetch of {0} will "
"not succeed until you start another torrent."
msgstr ""
"Vi har inga sparade nerladdare och inga andra torrents kör. Hämtning av {0} "
"kommer inte lyckas för en annan torrent startas."
#: ../java/src/org/klomp/snark/SnarkManager.java:683
#, java-format
msgid "Adding {0}"
msgstr "Lägger till {0}"
#: ../java/src/org/klomp/snark/SnarkManager.java:730
#: ../java/src/org/klomp/snark/SnarkManager.java:753
#: ../java/src/org/klomp/snark/SnarkManager.java:1180
#, java-format
msgid "Failed to copy torrent file to {0}"
msgstr "Misslyckades att kopiera torrentfil till {0}"
#: ../java/src/org/klomp/snark/SnarkManager.java:976
#, java-format
msgid "Too many files in \"{0}\" ({1}), deleting it!"
msgstr "För många filer i \"{0}\" ({1}), tar bort den!"
#: ../java/src/org/klomp/snark/SnarkManager.java:978
#, java-format
msgid "Torrent file \"{0}\" cannot end in \".torrent\", deleting it!"
msgstr "Torrenten \"{0}\" får inte sluta med \".torrent\", tar bort den."
#: ../java/src/org/klomp/snark/SnarkManager.java:980
#, java-format
msgid "No pieces in \"{0}\", deleting it!"
msgstr "Inga delar i \"{0}\", tar bort den."
#: ../java/src/org/klomp/snark/SnarkManager.java:982
#, java-format
msgid "Too many pieces in \"{0}\", limit is {1}, deleting it!"
msgstr "För många delar i \"{0}\", gränden är {1}, raderar den!"
#: ../java/src/org/klomp/snark/SnarkManager.java:984
#, java-format
msgid "Pieces are too large in \"{0}\" ({1}B), deleting it."
msgstr "För stora delar i \"{0}\" ({1}B), raderar den."
#: ../java/src/org/klomp/snark/SnarkManager.java:985
#, java-format
msgid "Limit is {0}B"
msgstr "Gränsen är {0}B"
#: ../java/src/org/klomp/snark/SnarkManager.java:987
#, java-format
msgid "Torrent \"{0}\" has no data, deleting it!"
msgstr "Torrenten \"{0}\" har ingen data, tar bort den!"
#: ../java/src/org/klomp/snark/SnarkManager.java:995
#, java-format
msgid "Torrents larger than {0}B are not supported yet, deleting \"{1}\""
msgstr "Torrentar större än {0}B stöds ännu ej, tar bort \"{1}\""
#: ../java/src/org/klomp/snark/SnarkManager.java:1011
#, java-format
msgid "Error: Could not remove the torrent {0}"
msgstr "Problem: Kunde ej ta bort torrent {0}"
#: ../java/src/org/klomp/snark/SnarkManager.java:1032
#: ../java/src/org/klomp/snark/SnarkManager.java:1050
#, java-format
msgid "Torrent stopped: \"{0}\""
msgstr "Torrent stannad: \"{0}\""
#: ../java/src/org/klomp/snark/SnarkManager.java:1071
#, java-format
msgid "Torrent removed: \"{0}\""
msgstr "Torrent borttagen: \"{0}\""
#: ../java/src/org/klomp/snark/SnarkManager.java:1079
#, java-format
msgid "Adding torrents in {0}"
msgstr "Torrents tillagda i {0}"
#: ../java/src/org/klomp/snark/SnarkManager.java:1128
#, java-format
msgid "Download finished: {0}"
msgstr "Nerladdning klar: {0}"
#: ../java/src/org/klomp/snark/SnarkManager.java:1176
#, java-format
msgid "Metainfo received for {0}"
msgstr "Metainfo mottagen till {0}"
#: ../java/src/org/klomp/snark/SnarkManager.java:1177
#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:526
#, java-format
msgid "Starting up torrent {0}"
msgstr "Startar torrent {0}"
#: ../java/src/org/klomp/snark/SnarkManager.java:1231
msgid "Unable to connect to I2P!"
msgstr "Misslyckades med att ansluta till I2P"
#: ../java/src/org/klomp/snark/SnarkManager.java:1237
#, java-format
msgid "Unable to add {0}"
msgstr "Misslyckades med att lägga till {0}"
#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:205
msgid "I2PSnark - Anonymous BitTorrent Client"
msgstr "I2PSnark - Anonym bittorrentklient"
#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:218
msgid "Torrents"
msgstr "Torrents"
#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:221
#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:228
#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:1028
msgid "I2PSnark"
msgstr "I2PSnark"
#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:225
msgid "Refresh page"
msgstr "Ladda om sida"
#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:230
msgid "Forum"
msgstr "Forum"
#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:284
#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:1719
msgid "Status"
msgstr "Status"
#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:290
#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:292
msgid "Hide Peers"
msgstr "Göm nerladdare"
#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:297
#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:299
msgid "Show Peers"
msgstr "Visa nerladdare"
#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:306
#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:1643
#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:1659
msgid "Torrent"
msgstr "Torrent"
#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:310
msgid "Estimated time remaining"
msgstr "Uppskattad återstående tid"
#. Translators: Please keep short or translate as " "
#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:313
msgid "ETA"
msgstr "UÅT"
#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:317
msgid "Downloaded"
msgstr "Nerladdat"
#. Translators: Please keep short or translate as " "
#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:320
#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:334
msgid "RX"
msgstr "RX"
#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:324
msgid "Uploaded"
msgstr "Uppladdat"
#. Translators: Please keep short or translate as " "
#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:327
#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:344
msgid "TX"
msgstr "TX"
#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:332
msgid "Down Rate"
msgstr "Nerhastighet"
#. Translators: Please keep short or translate as " "
#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:337
#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:346
msgid "Rate"
msgstr "Hastighet"
#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:342
msgid "Up Rate"
msgstr "Upphastighet"
#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:366
msgid "Stop all torrents and the I2P tunnel"
msgstr "Stoppa alla torrents och I2P-tunneln"
#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:368
msgid "Stop All"
msgstr "Stoppa alla"
#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:377
msgid "Start all torrents and the I2P tunnel"
msgstr "Starta alla torrents och I2P-tunneln"
#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:379
msgid "Start All"
msgstr "Starta alla"
#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:398
msgid "No torrents loaded."
msgstr "Inga torrents laddade."
#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:403
msgid "Totals"
msgstr "Totalt"
#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:405
#, java-format
msgid "1 torrent"
msgid_plural "{0} torrents"
msgstr[0] "{0} torrent"
msgstr[1] "{0} torrents"
#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:408
#, java-format
msgid "1 connected peer"
msgid_plural "{0} connected peers"
msgstr[0] "{0} ansluten nerladdare"
msgstr[1] "{0} anslutna nerladdare"
#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:497
#, java-format
msgid "Invalid URL: Must start with \"http://\", \"{0}\", or \"{1}\""
msgstr "Ogiltig URL: Måste starta med \"http://\", \"{0}\" eller \"{1}\""
#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:545
#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:572
#, java-format
msgid "Magnet deleted: {0}"
msgstr "Magnet borttagen: {0}"
#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:553
#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:578
#, java-format
msgid "Torrent file deleted: {0}"
msgstr "Torrentfil borttagen: {0}"
#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:584
#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:594
#, java-format
msgid "Data file deleted: {0}"
msgstr "Datafil borttagen: {0}"
#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:586
#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:596
#, java-format
msgid "Data file could not be deleted: {0}"
msgstr "Datafil kunde inte tas bort: {0}"
#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:605
#, java-format
msgid "Data dir deleted: {0}"
msgstr "Datamapp borttagen: {0}"
#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:638
msgid "Error creating torrent - you must select a tracker"
msgstr "Misslyckades med att skapa torrent - en tracker måste väljas"
#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:653
#, java-format
msgid "Torrent created for \"{0}\""
msgstr "Torrent skapad för \"{0}\""
#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:655
#, java-format
msgid ""
"Many I2P trackers require you to register new torrents before seeding - "
"please do so before starting \"{0}\""
msgstr ""
"Många I2P trackers kräver att användare registrerar sig för uppladdning av "
"torrent - gör det innan \"{0}\" startas"
#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:657
#, java-format
msgid "Error creating a torrent for \"{0}\""
msgstr "Misslyckades med att skapa torrent för \"{0}\""
#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:660
#, java-format
msgid "Cannot create a torrent for the nonexistent data: {0}"
msgstr "Kan ej skapa torrent för data som ej finns: {0}"
#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:663
msgid "Error creating torrent - you must enter a file or directory"
msgstr "Misslyckades med att skapa torrent - en fil eller mapp måste anges"
#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:666
msgid "Stopping all torrents and closing the I2P tunnel."
msgstr "Stoppar alla torrents och stänger I2P-tunneln."
#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:677
msgid "I2P tunnel closed."
msgstr "I2P-tunneln är stängd."
#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:680
msgid "Opening the I2P tunnel and starting all torrents."
msgstr "Öppnar I2P-tunneln och startar torrents."
#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:803
#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:808
#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:814
msgid "Tracker Error"
msgstr "Tracker-fel"
#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:806
#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:810
#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:822
#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:826
#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:834
#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:838
#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:843
#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:847
#, java-format
msgid "1 peer"
msgid_plural "{0} peers"
msgstr[0] "{0} nerladdare"
msgstr[1] "{0} nerladdare"
#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:819
#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:824
msgid "Seeding"
msgstr "Uppladdning"
#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:828
#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:1665
#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:1770
msgid "Complete"
msgstr "Färdig"
#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:831
#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:836
msgid "OK"
msgstr "Ok"
#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:840
#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:845
msgid "Stalled"
msgstr "Avstannad"
#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:849
#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:852
msgid "No Peers"
msgstr "Inga källor"
#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:854
msgid "Stopped"
msgstr "Stoppad"
#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:886
msgid "Torrent details"
msgstr "Torrentdetaljer"
#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:898
#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:1160
msgid "Info"
msgstr "Info"
#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:913
msgid "View files"
msgstr "Se filer"
#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:915
msgid "Open file"
msgstr "Öppna fil"
#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:957
msgid "Stop the torrent"
msgstr "Stoppa torrent"
#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:959
msgid "Stop"
msgstr "Stoppa"
#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:969
msgid "Start the torrent"
msgstr "Starta torrent"
#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:971
msgid "Start"
msgstr "Starta"
#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:982
msgid "Remove the torrent from the active list, deleting the .torrent file"
msgstr "Ta bort torrent från den aktiva listan, tar bort .torrent fil"
#. Can't figure out how to escape double quotes inside the onclick string.
#. Single quotes in translate strings with parameters must be doubled.
#. Then the remaining single quite must be escaped
#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:987
#, java-format
msgid ""
"Are you sure you want to delete the file \\''{0}.torrent\\'' (downloaded "
"data will not be deleted) ?"
msgstr ""
"Är du säker på att du vill ta bort filen \"{0}.torrent\" (nerladdad data "
"kommer ej tas bort) ?"
#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:990
msgid "Remove"
msgstr "Ta bort"
#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:1001
msgid "Delete the .torrent file and the associated data file(s)"
msgstr "Ta bort .torrent filen och tillhörande datafil(er)"
#. Can't figure out how to escape double quotes inside the onclick string.
#. Single quotes in translate strings with parameters must be doubled.
#. Then the remaining single quite must be escaped
#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:1006
#, java-format
msgid ""
"Are you sure you want to delete the torrent \\''{0}\\'' and all downloaded "
"data?"
msgstr ""
"Är du säker på att du vill ta bort torrenten \"{0}\" och all nerladdad data?"
#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:1009
msgid "Delete"
msgstr "Ta bort"
#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:1042
msgid "Unknown"
msgstr "Okänd"
#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:1054
msgid "Seed"
msgstr "Källa"
#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:1077
msgid "Uninteresting (The peer has no pieces we need)"
msgstr "Ointressant (nerladdaren har inga delar vi behöver)"
#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:1079
msgid "Choked (The peer is not allowing us to request pieces)"
msgstr "Spärra (nerladdaren låter oss inte be dom delar)"
#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:1099
msgid "Uninterested (We have no pieces the peer needs)"
msgstr "Ointresserad (vi har inga delar nerladdaren behöver)"
#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:1101
msgid "Choking (We are not allowing the peer to request pieces)"
msgstr "Spärrar (vi låter inte nerladdaren be dom delar)"
#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:1159
#, java-format
msgid "Details at {0} tracker"
msgstr "Detaljer för {0} tracker"
#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:1188
msgid "Add Torrent"
msgstr "Lägg till torrent"
#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:1190
msgid "From URL"
msgstr "Från URL"
#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:1193
msgid ""
"Enter the torrent file download URL (I2P only), magnet link, or maggot link"
msgstr "Ange URL (inom I2P) till torrent, magnet länl eller maggot länk"
#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:1198
msgid "Add torrent"
msgstr "Lägg till torrent"
#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:1201
#, java-format
msgid "You can also copy .torrent files to: {0}."
msgstr "Du kan även kopiera .torrent filer till: {0}"
#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:1203
msgid "Removing a .torrent will cause it to stop."
msgstr "Borttagning av .torrent fil kommer stanna den."
#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:1226
msgid "Create Torrent"
msgstr "Skapa torrent"
#. out.write("From file: <input type=\"file\" name=\"newFile\" size=\"50\"
#. value=\"" + newFile + "\" /><br>\n");
#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:1229
msgid "Data to seed"
msgstr "Data att ladda upp"
#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:1233
msgid "File or directory to seed (must be within the specified path)"
msgstr "Fil eller mapp att ladda upp (måste finnas på angiven plats)"
#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:1235
#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:1684
msgid "Tracker"
msgstr "Tracker"
#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:1237
msgid "Select a tracker"
msgstr "Välj en tracker"
#. out.write(_("Open trackers and DHT only"));
#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:1242
msgid "Open trackers only"
msgstr "Enbart öppna trackers"
#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:1257
msgid "or"
msgstr "eller"
#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:1260
msgid "Specify custom tracker announce URL"
msgstr "Ange anpassad tracker URL"
#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:1263
msgid "Create torrent"
msgstr "Skapa torrent"
#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:1281
#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:1420
msgid "Configuration"
msgstr "Inställningar"
#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:1285
msgid "Data directory"
msgstr "Datamapp"
#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:1287
msgid "Edit i2psnark.config and restart to change"
msgstr "Förändra i2psnark.conig och starta om för att ändra"
#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:1291
msgid "Auto start"
msgstr "Automatisk start"
#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:1295
msgid "If checked, automatically start torrents that are added"
msgstr "Om ikryssad, startas automatiskt tillagda torrents"
#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:1299
msgid "Theme"
msgstr "Tema"
#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:1312
msgid "Startup delay"
msgstr "Fördröjning av uppstart"
#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:1314
msgid "minutes"
msgstr "minuter"
#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:1338
msgid "Total uploader limit"
msgstr "Gräns för totalt antal uppladdare"
#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:1341
msgid "peers"
msgstr "nerladdare"
#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:1345
msgid "Up bandwidth limit"
msgstr "Gräns för bandbredd uppåt"
#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:1348
msgid "Half available bandwidth recommended."
msgstr "Hälften av tillgänglig bandbredd rekommenderas."
#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:1350
msgid "View or change router bandwidth"
msgstr "Se eller ändra routerns bandbredd"
#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:1354
msgid "Use open trackers also"
msgstr "Använd öppna trackers med"
#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:1358
msgid ""
"If checked, announce torrents to open trackers as well as the tracker listed"
" in the torrent file"
msgstr ""
"Om ikryssad, anmäl torrents till öppna trackers och tracker angiven i "
"torrentfilen"
#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:1362
msgid "Open tracker announce URLs"
msgstr "Öppna tracker-anmälnings URL:er"
#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:1374
msgid "Inbound Settings"
msgstr "Inkommande inställningar"
#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:1380
msgid "Outbound Settings"
msgstr "Utgående inställningar"
#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:1388
msgid "I2CP host"
msgstr "I2CP-värd"
#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:1393
msgid "I2CP port"
msgstr "I2CP-port"
#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:1406
msgid "I2CP options"
msgstr "I2CP-inställningar"
#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:1411
msgid "Save configuration"
msgstr "Spara inställningar"
#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:1436
#, java-format
msgid "Invalid magnet URL {0}"
msgstr "Ogiltig magnet URL {0}"
#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:1470
#, java-format
msgid "Invalid info hash in magnet URL {0}"
msgstr "Ogiltig infohash i magnet URL {0}"
#. * dummies for translation
#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:1500
#, java-format
msgid "1 hop"
msgid_plural "{0} hops"
msgstr[0] "{0} hopp"
msgstr[1] "{0} hopp"
#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:1501
#, java-format
msgid "1 tunnel"
msgid_plural "{0} tunnels"
msgstr[0] "{0} tunnel"
msgstr[1] "{0} tunnlar"
#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:1663
msgid "Completion"
msgstr "Färdiställning"
#. else unknown
#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:1667
#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:1716
msgid "Size"
msgstr "Storlek"
#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:1672
msgid "Files"
msgstr "Filer"
#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:1674
msgid "Pieces"
msgstr "Delar"
#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:1675
msgid "Piece size"
msgstr "Delstorlek"
#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:1697
msgid "Magnet link"
msgstr "Magnet länk"
#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:1714
#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:1753
msgid "Directory"
msgstr "Mapp"
#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:1723
msgid "Priority"
msgstr "Prioritet"
#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:1728
msgid "Up to higher level directory"
msgstr "Up till högre mappnivå"
#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:1758
msgid "Torrent not found?"
msgstr "Torrent hittades ej?"
#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:1767
msgid "File not found in torrent?"
msgstr "Fil hittades ej i torrent?"
#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:1780
msgid "complete"
msgstr "färdig"
#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:1781
msgid "bytes remaining"
msgstr "bytes kvar"
#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:1806
msgid "Open"
msgstr "Öppna"
#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:1832
msgid "High"
msgstr "Hög"
#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:1837
msgid "Normal"
msgstr "Normal"
#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:1842
msgid "Skip"
msgstr "Hoppa över"
#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:1851
msgid "Save priorities"
msgstr "Spara prioriteter"
#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:1967
#, java-format
msgid "Torrent fetched from {0}"
msgstr "Torrent hämtad från {0}"
#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:1988
#, java-format
msgid "Torrent already running: {0}"
msgstr "Torrent kör redan: {0}"
#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:1990
#, java-format
msgid "Torrent already in the queue: {0}"
msgstr "Torrent finns redan i kö: {0}"
#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:1996
#, java-format
msgid "Torrent at {0} was not valid"
msgstr "Torrent vid {0} var inte giltig"
#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:2003
#, java-format
msgid "Torrent was not retrieved from {0}"
msgstr "Torrent kunde inte hämtas från {0}"

View File

@@ -0,0 +1,916 @@
# I2P
# Copyright (C) 2009 The I2P Project
# This file is distributed under the same license as the i2psnark package.
# To contribute translations, see http://www.i2p2.de/newdevelopers
#
# dich_tran <tran.nathan@gmail.com>, 2011.
msgid ""
msgstr ""
"Project-Id-Version: I2P\n"
"Report-Msgid-Bugs-To: https://trac.i2p2.de/\n"
"POT-Creation-Date: 2011-06-11 08:22+0000\n"
"PO-Revision-Date: 2011-05-17 18:05+0000\n"
"Last-Translator: ducki2p <ducki2p@gmail.com>\n"
"Language-Team: Vietnamese (http://www.transifex.net/projects/p/I2P/team/vi/)\n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
"Language: vi\n"
"Plural-Forms: nplurals=1; plural=0\n"
#: ../java/src/org/klomp/snark/SnarkManager.java:307
#, java-format
msgid "Total uploaders limit changed to {0}"
msgstr ""
#: ../java/src/org/klomp/snark/SnarkManager.java:309
#, java-format
msgid "Minimum total uploaders limit is {0}"
msgstr ""
#: ../java/src/org/klomp/snark/SnarkManager.java:321
#, java-format
msgid "Up BW limit changed to {0}KBps"
msgstr "Giới hạn băng thông lên đổi thành {0}KBps"
#: ../java/src/org/klomp/snark/SnarkManager.java:323
#, java-format
msgid "Minimum up bandwidth limit is {0}KBps"
msgstr "Tối thiểu băng thông lên là {0}KBps"
#: ../java/src/org/klomp/snark/SnarkManager.java:335
#, java-format
msgid "Startup delay changed to {0}"
msgstr ""
#: ../java/src/org/klomp/snark/SnarkManager.java:386
msgid "I2CP and tunnel changes will take effect after stopping all torrents"
msgstr ""
#: ../java/src/org/klomp/snark/SnarkManager.java:393
msgid "Disconnecting old I2CP destination"
msgstr ""
#: ../java/src/org/klomp/snark/SnarkManager.java:397
#, java-format
msgid "I2CP settings changed to {0}"
msgstr ""
#: ../java/src/org/klomp/snark/SnarkManager.java:402
msgid ""
"Unable to connect with the new settings, reverting to the old I2CP settings"
msgstr ""
#: ../java/src/org/klomp/snark/SnarkManager.java:406
msgid "Unable to reconnect with the old settings!"
msgstr ""
#: ../java/src/org/klomp/snark/SnarkManager.java:408
msgid "Reconnected on the new I2CP destination"
msgstr ""
#: ../java/src/org/klomp/snark/SnarkManager.java:418
#, java-format
msgid "I2CP listener restarted for \"{0}\""
msgstr ""
#: ../java/src/org/klomp/snark/SnarkManager.java:429
msgid "Enabled autostart"
msgstr ""
#: ../java/src/org/klomp/snark/SnarkManager.java:431
msgid "Disabled autostart"
msgstr ""
#: ../java/src/org/klomp/snark/SnarkManager.java:437
msgid "Enabled open trackers - torrent restart required to take effect."
msgstr ""
#: ../java/src/org/klomp/snark/SnarkManager.java:439
msgid "Disabled open trackers - torrent restart required to take effect."
msgstr ""
#: ../java/src/org/klomp/snark/SnarkManager.java:447
msgid "Open Tracker list changed - torrent restart required to take effect."
msgstr ""
#: ../java/src/org/klomp/snark/SnarkManager.java:454
#, java-format
msgid "{0} theme loaded, return to main i2psnark page to view."
msgstr ""
#: ../java/src/org/klomp/snark/SnarkManager.java:461
msgid "Configuration unchanged."
msgstr ""
#: ../java/src/org/klomp/snark/SnarkManager.java:471
#, java-format
msgid "Unable to save the config to {0}"
msgstr ""
#: ../java/src/org/klomp/snark/SnarkManager.java:536
msgid "Connecting to I2P"
msgstr "Nối kết vào I2P"
#: ../java/src/org/klomp/snark/SnarkManager.java:539
msgid "Error connecting to I2P - check your I2CP settings!"
msgstr ""
#: ../java/src/org/klomp/snark/SnarkManager.java:548
#, java-format
msgid "Error: Could not add the torrent {0}"
msgstr ""
#. catch this here so we don't try do delete it below
#: ../java/src/org/klomp/snark/SnarkManager.java:570
#, java-format
msgid "Cannot open \"{0}\""
msgstr ""
#. TODO - if the existing one is a magnet, delete it and add the metainfo
#. instead?
#: ../java/src/org/klomp/snark/SnarkManager.java:589
#: ../java/src/org/klomp/snark/SnarkManager.java:665
#: ../java/src/org/klomp/snark/SnarkManager.java:720
#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:1976
#, java-format
msgid "Torrent with this info hash is already running: {0}"
msgstr ""
#. addMessage(_("Warning - No I2P trackers in \"{0}\", will announce to I2P
#. open trackers and DHT only.", info.getName()));
#: ../java/src/org/klomp/snark/SnarkManager.java:596
#, java-format
msgid ""
"Warning - No I2P trackers in \"{0}\", will announce to I2P open trackers "
"only."
msgstr ""
#. addMessage(_("Warning - No I2P trackers in \"{0}\", and DHT and open
#. trackers are disabled, you should enable open trackers or DHT before
#. starting the torrent.", info.getName()));
#: ../java/src/org/klomp/snark/SnarkManager.java:601
#, java-format
msgid ""
"Warning - No I2P Trackers found in \"{0}\". Make sure Open Tracker is "
"enabled before starting this torrent."
msgstr ""
#: ../java/src/org/klomp/snark/SnarkManager.java:622
#, java-format
msgid "Torrent in \"{0}\" is invalid"
msgstr ""
#: ../java/src/org/klomp/snark/SnarkManager.java:627
#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:1998
#, java-format
msgid "ERROR - Out of memory, cannot create torrent from {0}"
msgstr ""
#: ../java/src/org/klomp/snark/SnarkManager.java:639
#, java-format
msgid "Torrent added and started: \"{0}\""
msgstr ""
#: ../java/src/org/klomp/snark/SnarkManager.java:641
#, java-format
msgid "Torrent added: \"{0}\""
msgstr ""
#: ../java/src/org/klomp/snark/SnarkManager.java:676
#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:491
#, java-format
msgid "Fetching {0}"
msgstr ""
#: ../java/src/org/klomp/snark/SnarkManager.java:679
#, java-format
msgid ""
"We have no saved peers and no other torrents are running. Fetch of {0} will "
"not succeed until you start another torrent."
msgstr ""
#: ../java/src/org/klomp/snark/SnarkManager.java:683
#, java-format
msgid "Adding {0}"
msgstr ""
#: ../java/src/org/klomp/snark/SnarkManager.java:730
#: ../java/src/org/klomp/snark/SnarkManager.java:753
#: ../java/src/org/klomp/snark/SnarkManager.java:1180
#, java-format
msgid "Failed to copy torrent file to {0}"
msgstr ""
#: ../java/src/org/klomp/snark/SnarkManager.java:976
#, java-format
msgid "Too many files in \"{0}\" ({1}), deleting it!"
msgstr ""
#: ../java/src/org/klomp/snark/SnarkManager.java:978
#, java-format
msgid "Torrent file \"{0}\" cannot end in \".torrent\", deleting it!"
msgstr ""
#: ../java/src/org/klomp/snark/SnarkManager.java:980
#, java-format
msgid "No pieces in \"{0}\", deleting it!"
msgstr ""
#: ../java/src/org/klomp/snark/SnarkManager.java:982
#, java-format
msgid "Too many pieces in \"{0}\", limit is {1}, deleting it!"
msgstr ""
#: ../java/src/org/klomp/snark/SnarkManager.java:984
#, java-format
msgid "Pieces are too large in \"{0}\" ({1}B), deleting it."
msgstr ""
#: ../java/src/org/klomp/snark/SnarkManager.java:985
#, java-format
msgid "Limit is {0}B"
msgstr ""
#: ../java/src/org/klomp/snark/SnarkManager.java:987
#, java-format
msgid "Torrent \"{0}\" has no data, deleting it!"
msgstr ""
#: ../java/src/org/klomp/snark/SnarkManager.java:995
#, java-format
msgid "Torrents larger than {0}B are not supported yet, deleting \"{1}\""
msgstr ""
#: ../java/src/org/klomp/snark/SnarkManager.java:1011
#, java-format
msgid "Error: Could not remove the torrent {0}"
msgstr ""
#: ../java/src/org/klomp/snark/SnarkManager.java:1032
#: ../java/src/org/klomp/snark/SnarkManager.java:1050
#, java-format
msgid "Torrent stopped: \"{0}\""
msgstr ""
#: ../java/src/org/klomp/snark/SnarkManager.java:1071
#, java-format
msgid "Torrent removed: \"{0}\""
msgstr ""
#: ../java/src/org/klomp/snark/SnarkManager.java:1079
#, java-format
msgid "Adding torrents in {0}"
msgstr ""
#: ../java/src/org/klomp/snark/SnarkManager.java:1128
#, java-format
msgid "Download finished: {0}"
msgstr ""
#: ../java/src/org/klomp/snark/SnarkManager.java:1176
#, java-format
msgid "Metainfo received for {0}"
msgstr ""
#: ../java/src/org/klomp/snark/SnarkManager.java:1177
#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:526
#, java-format
msgid "Starting up torrent {0}"
msgstr ""
#: ../java/src/org/klomp/snark/SnarkManager.java:1231
msgid "Unable to connect to I2P!"
msgstr ""
#: ../java/src/org/klomp/snark/SnarkManager.java:1237
#, java-format
msgid "Unable to add {0}"
msgstr ""
#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:205
msgid "I2PSnark - Anonymous BitTorrent Client"
msgstr ""
#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:218
msgid "Torrents"
msgstr ""
#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:221
#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:228
#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:1028
msgid "I2PSnark"
msgstr "I2PSnark"
#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:225
msgid "Refresh page"
msgstr "Nạp lại trang"
#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:230
msgid "Forum"
msgstr "Diễn đàn"
#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:284
#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:1719
msgid "Status"
msgstr "Tình trạng"
#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:290
#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:292
msgid "Hide Peers"
msgstr ""
#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:297
#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:299
msgid "Show Peers"
msgstr ""
#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:306
#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:1643
#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:1659
msgid "Torrent"
msgstr ""
#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:310
msgid "Estimated time remaining"
msgstr ""
#. Translators: Please keep short or translate as " "
#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:313
msgid "ETA"
msgstr ""
#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:317
msgid "Downloaded"
msgstr "Đã tải xuống"
#. Translators: Please keep short or translate as " "
#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:320
#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:334
msgid "RX"
msgstr ""
#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:324
msgid "Uploaded"
msgstr "Đã tải lên"
#. Translators: Please keep short or translate as " "
#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:327
#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:344
msgid "TX"
msgstr ""
#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:332
msgid "Down Rate"
msgstr ""
#. Translators: Please keep short or translate as " "
#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:337
#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:346
msgid "Rate"
msgstr ""
#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:342
msgid "Up Rate"
msgstr ""
#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:366
msgid "Stop all torrents and the I2P tunnel"
msgstr ""
#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:368
msgid "Stop All"
msgstr ""
#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:377
msgid "Start all torrents and the I2P tunnel"
msgstr ""
#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:379
msgid "Start All"
msgstr ""
#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:398
msgid "No torrents loaded."
msgstr ""
#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:403
msgid "Totals"
msgstr "Tổng cộng"
#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:405
#, java-format
msgid "1 torrent"
msgid_plural "{0} torrents"
msgstr[0] ""
#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:408
#, java-format
msgid "1 connected peer"
msgid_plural "{0} connected peers"
msgstr[0] ""
#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:497
#, java-format
msgid "Invalid URL: Must start with \"http://\", \"{0}\", or \"{1}\""
msgstr ""
#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:545
#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:572
#, java-format
msgid "Magnet deleted: {0}"
msgstr ""
#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:553
#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:578
#, java-format
msgid "Torrent file deleted: {0}"
msgstr ""
#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:584
#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:594
#, java-format
msgid "Data file deleted: {0}"
msgstr ""
#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:586
#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:596
#, java-format
msgid "Data file could not be deleted: {0}"
msgstr ""
#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:605
#, java-format
msgid "Data dir deleted: {0}"
msgstr ""
#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:638
msgid "Error creating torrent - you must select a tracker"
msgstr ""
#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:653
#, java-format
msgid "Torrent created for \"{0}\""
msgstr ""
#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:655
#, java-format
msgid ""
"Many I2P trackers require you to register new torrents before seeding - "
"please do so before starting \"{0}\""
msgstr ""
#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:657
#, java-format
msgid "Error creating a torrent for \"{0}\""
msgstr ""
#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:660
#, java-format
msgid "Cannot create a torrent for the nonexistent data: {0}"
msgstr ""
#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:663
msgid "Error creating torrent - you must enter a file or directory"
msgstr ""
#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:666
msgid "Stopping all torrents and closing the I2P tunnel."
msgstr ""
#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:677
msgid "I2P tunnel closed."
msgstr "Đường hầm I2P đóng lại."
#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:680
msgid "Opening the I2P tunnel and starting all torrents."
msgstr ""
#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:803
#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:808
#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:814
msgid "Tracker Error"
msgstr ""
#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:806
#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:810
#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:822
#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:826
#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:834
#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:838
#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:843
#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:847
#, java-format
msgid "1 peer"
msgid_plural "{0} peers"
msgstr[0] ""
#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:819
#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:824
msgid "Seeding"
msgstr ""
#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:828
#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:1665
#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:1770
msgid "Complete"
msgstr "Hoàn tất"
#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:831
#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:836
msgid "OK"
msgstr "OK"
#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:840
#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:845
msgid "Stalled"
msgstr "Khựng"
#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:849
#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:852
msgid "No Peers"
msgstr ""
#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:854
msgid "Stopped"
msgstr "Ngưng"
#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:886
msgid "Torrent details"
msgstr ""
#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:898
#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:1160
msgid "Info"
msgstr "Thông tin"
#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:913
msgid "View files"
msgstr "Xem tập tin"
#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:915
msgid "Open file"
msgstr "Mở tập tin"
#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:957
msgid "Stop the torrent"
msgstr ""
#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:959
msgid "Stop"
msgstr "Ngưng"
#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:969
msgid "Start the torrent"
msgstr ""
#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:971
msgid "Start"
msgstr "Bắt đầu"
#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:982
msgid "Remove the torrent from the active list, deleting the .torrent file"
msgstr ""
#. Can't figure out how to escape double quotes inside the onclick string.
#. Single quotes in translate strings with parameters must be doubled.
#. Then the remaining single quite must be escaped
#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:987
#, java-format
msgid ""
"Are you sure you want to delete the file \\''{0}.torrent\\'' (downloaded "
"data will not be deleted) ?"
msgstr ""
#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:990
msgid "Remove"
msgstr "Bỏ"
#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:1001
msgid "Delete the .torrent file and the associated data file(s)"
msgstr ""
#. Can't figure out how to escape double quotes inside the onclick string.
#. Single quotes in translate strings with parameters must be doubled.
#. Then the remaining single quite must be escaped
#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:1006
#, java-format
msgid ""
"Are you sure you want to delete the torrent \\''{0}\\'' and all downloaded "
"data?"
msgstr ""
#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:1009
msgid "Delete"
msgstr "Xóa"
#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:1042
msgid "Unknown"
msgstr "Không rõ"
#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:1054
msgid "Seed"
msgstr ""
#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:1077
msgid "Uninteresting (The peer has no pieces we need)"
msgstr ""
#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:1079
msgid "Choked (The peer is not allowing us to request pieces)"
msgstr ""
#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:1099
msgid "Uninterested (We have no pieces the peer needs)"
msgstr ""
#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:1101
msgid "Choking (We are not allowing the peer to request pieces)"
msgstr ""
#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:1159
#, java-format
msgid "Details at {0} tracker"
msgstr ""
#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:1188
msgid "Add Torrent"
msgstr ""
#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:1190
msgid "From URL"
msgstr ""
#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:1193
msgid ""
"Enter the torrent file download URL (I2P only), magnet link, or maggot link"
msgstr ""
#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:1198
msgid "Add torrent"
msgstr ""
#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:1201
#, java-format
msgid "You can also copy .torrent files to: {0}."
msgstr ""
#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:1203
msgid "Removing a .torrent will cause it to stop."
msgstr ""
#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:1226
msgid "Create Torrent"
msgstr ""
#. out.write("From file: <input type=\"file\" name=\"newFile\" size=\"50\"
#. value=\"" + newFile + "\" /><br>\n");
#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:1229
msgid "Data to seed"
msgstr ""
#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:1233
msgid "File or directory to seed (must be within the specified path)"
msgstr ""
#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:1235
#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:1684
msgid "Tracker"
msgstr ""
#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:1237
msgid "Select a tracker"
msgstr ""
#. out.write(_("Open trackers and DHT only"));
#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:1242
msgid "Open trackers only"
msgstr ""
#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:1257
msgid "or"
msgstr "hoặc"
#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:1260
msgid "Specify custom tracker announce URL"
msgstr ""
#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:1263
msgid "Create torrent"
msgstr ""
#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:1281
#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:1420
msgid "Configuration"
msgstr "Cấu hình"
#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:1285
msgid "Data directory"
msgstr ""
#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:1287
msgid "Edit i2psnark.config and restart to change"
msgstr ""
#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:1291
msgid "Auto start"
msgstr "Tự động bắt đầu"
#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:1295
msgid "If checked, automatically start torrents that are added"
msgstr ""
#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:1299
msgid "Theme"
msgstr ""
#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:1312
msgid "Startup delay"
msgstr ""
#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:1314
msgid "minutes"
msgstr "phút"
#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:1338
msgid "Total uploader limit"
msgstr ""
#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:1341
msgid "peers"
msgstr ""
#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:1345
msgid "Up bandwidth limit"
msgstr "Giới hạn băng thông lên"
#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:1348
msgid "Half available bandwidth recommended."
msgstr ""
#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:1350
msgid "View or change router bandwidth"
msgstr ""
#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:1354
msgid "Use open trackers also"
msgstr ""
#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:1358
msgid ""
"If checked, announce torrents to open trackers as well as the tracker listed"
" in the torrent file"
msgstr ""
#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:1362
msgid "Open tracker announce URLs"
msgstr ""
#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:1374
msgid "Inbound Settings"
msgstr ""
#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:1380
msgid "Outbound Settings"
msgstr ""
#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:1388
msgid "I2CP host"
msgstr ""
#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:1393
msgid "I2CP port"
msgstr ""
#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:1406
msgid "I2CP options"
msgstr ""
#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:1411
msgid "Save configuration"
msgstr "Lưu cấu hình"
#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:1436
#, java-format
msgid "Invalid magnet URL {0}"
msgstr ""
#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:1470
#, java-format
msgid "Invalid info hash in magnet URL {0}"
msgstr ""
#. * dummies for translation
#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:1500
#, java-format
msgid "1 hop"
msgid_plural "{0} hops"
msgstr[0] ""
#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:1501
#, java-format
msgid "1 tunnel"
msgid_plural "{0} tunnels"
msgstr[0] ""
#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:1663
msgid "Completion"
msgstr ""
#. else unknown
#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:1667
#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:1716
msgid "Size"
msgstr "Kích thước"
#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:1672
msgid "Files"
msgstr "Tập tin"
#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:1674
msgid "Pieces"
msgstr "Mảnh"
#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:1675
msgid "Piece size"
msgstr "Kích thước mảnh"
#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:1697
msgid "Magnet link"
msgstr ""
#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:1714
#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:1753
msgid "Directory"
msgstr "Danh mục"
#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:1723
msgid "Priority"
msgstr "Ưu tiên"
#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:1728
msgid "Up to higher level directory"
msgstr ""
#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:1758
msgid "Torrent not found?"
msgstr ""
#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:1767
msgid "File not found in torrent?"
msgstr ""
#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:1780
msgid "complete"
msgstr "hoàn tất"
#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:1781
msgid "bytes remaining"
msgstr ""
#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:1806
msgid "Open"
msgstr "Mở"
#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:1832
msgid "High"
msgstr "Cao"
#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:1837
msgid "Normal"
msgstr "Thường"
#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:1842
msgid "Skip"
msgstr "Lờ"
#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:1851
msgid "Save priorities"
msgstr ""
#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:1967
#, java-format
msgid "Torrent fetched from {0}"
msgstr ""
#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:1988
#, java-format
msgid "Torrent already running: {0}"
msgstr ""
#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:1990
#, java-format
msgid "Torrent already in the queue: {0}"
msgstr ""
#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:1996
#, java-format
msgid "Torrent at {0} was not valid"
msgstr ""
#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:2003
#, java-format
msgid "Torrent was not retrieved from {0}"
msgstr ""

View File

@@ -20,7 +20,10 @@
</classpath>
</depend>
</target>
<property name="javac.compilerargs" value="" />
<property name="require.gettext" value="true" />
<target name="compile" depends="depend">
<mkdir dir="./build" />
<mkdir dir="./build/obj" />
@@ -34,10 +37,7 @@
</javac>
</target>
<!-- TODO: Move the web classes from the jar to the war - they are not part of the API
- This will require sponge to rewrite some seedless stuff that uses it.
-->
<target name="jar" depends="builddep, compile, jarUpToDate" unless="jar.uptodate" >
<target name="listChangedFiles" depends="jarUpToDate" if="shouldListChanges" >
<exec executable="mtn" outputproperty="workspace.changes.j" errorproperty="mtn.error2" failifexecutionfails="false" >
<arg value="list" />
<arg value="changed" />
@@ -49,6 +49,15 @@
<arg value="[:space:]" />
<arg value="," />
</exec>
</target>
<!-- TODO: Move the web classes from the jar to the war - they are not part of the API
- This will require sponge to rewrite some seedless stuff that uses it.
-->
<target name="jar" depends="builddep, compile, jarUpToDate, listChangedFiles" unless="jar.uptodate" >
<!-- set if unset -->
<property name="workspace.changes.j.tr" value="" />
<jar destfile="./build/i2ptunnel.jar" basedir="./build/obj" includes="**/*.class">
<manifest>
<attribute name="Main-Class" value="net.i2p.i2ptunnel.I2PTunnel" />
@@ -64,15 +73,23 @@
<uptodate property="jar.uptodate" targetfile="build/i2ptunnel.jar" >
<srcfiles dir= "build/obj" includes="**/*.class" />
</uptodate>
<condition property="shouldListChanges" >
<and>
<not>
<isset property="jar.uptodate" />
</not>
<isset property="mtn.available" />
</and>
</condition>
</target>
<target name="bundle" depends="compile, precompilejsp">
<!-- Update the messages_*.po files.
We need to supply the bat file for windows, and then change the fail property to true -->
<exec executable="sh" osfamily="unix" failifexecutionfails="true" >
<exec executable="sh" osfamily="unix" failifexecutionfails="true" failonerror="${require.gettext}" >
<arg value="./bundle-messages.sh" />
</exec>
<exec executable="sh" osfamily="mac" failifexecutionfails="true" >
<exec executable="sh" osfamily="mac" failifexecutionfails="true" failonerror="${require.gettext}" >
<arg value="./bundle-messages.sh" />
</exec>
<!-- multi-lang is optional -->
@@ -83,21 +100,21 @@
<target name="poupdate" depends="compile, precompilejsp">
<!-- Update the messages_*.po files. -->
<exec executable="sh" osfamily="unix" failifexecutionfails="true" >
<exec executable="sh" osfamily="unix" failifexecutionfails="true" failonerror="true" >
<arg value="./bundle-messages.sh" />
<arg value="-p" />
</exec>
<exec executable="sh" osfamily="mac" failifexecutionfails="true" >
<exec executable="sh" osfamily="mac" failifexecutionfails="true" failonerror="true" >
<arg value="./bundle-messages.sh" />
<arg value="-p" />
</exec>
<exec executable="sh" osfamily="windows" failifexecutionfails="true" >
<exec executable="sh" osfamily="windows" failifexecutionfails="true" failonerror="true" >
<arg value="./bundle-messages.sh" />
<arg value="-p" />
</exec>
</target>
<target name="war" depends="precompilejsp, bundle, warUpToDate" unless="war.uptodate" >
<target name="listChangedFiles2" depends="warUpToDate" if="shouldListChanges2" >
<exec executable="mtn" outputproperty="workspace.changes.w" errorproperty="mtn.error2" failifexecutionfails="false" >
<arg value="list" />
<arg value="changed" />
@@ -109,6 +126,11 @@
<arg value="[:space:]" />
<arg value="," />
</exec>
</target>
<target name="war" depends="precompilejsp, bundle, warUpToDate, listChangedFiles2" unless="war.uptodate" >
<!-- set if unset -->
<property name="workspace.changes.w.tr" value="" />
<war destfile="build/i2ptunnel.war" webxml="../jsp/web-out.xml"
basedir="../jsp/" excludes="web.xml, web-fragment.xml, web-out.xml, **/*.java, *.jsp">
<manifest>
@@ -123,6 +145,14 @@
<uptodate property="war.uptodate" targetfile="build/i2ptunnel.war" >
<srcfiles dir= "../jsp" excludes="web.xml, web-fragment.xml, **/*.java, *.jsp" />
</uptodate>
<condition property="shouldListChanges2" >
<and>
<not>
<isset property="war.uptodate" />
</not>
<isset property="mtn.available" />
</and>
</condition>
</target>
<target name="precompilejsp" depends="jar" unless="precompilejsp.uptodate">

View File

@@ -12,6 +12,7 @@
CLASS=net.i2p.i2ptunnel.web.messages
TMPFILE=build/javafiles.txt
export TZ=UTC
RC=0
if [ "$1" = "-p" ]
then
@@ -69,15 +70,17 @@ do
-o ${i}t
if [ $? -ne 0 ]
then
echo 'Warning - xgettext failed, not updating translations'
echo "ERROR - xgettext failed on ${i}, not updating translations"
rm -f ${i}t
RC=1
break
fi
msgmerge -U --backup=none $i ${i}t
if [ $? -ne 0 ]
then
echo 'Warning - msgmerge failed, not updating translations'
echo "ERROR - msgmerge failed on ${i}, not updating translations"
rm -f ${i}t
RC=1
break
fi
rm -f ${i}t
@@ -94,11 +97,13 @@ do
msgfmt --java --statistics -r $CLASS -l $LG -d ../jsp/WEB-INF/classes $i
if [ $? -ne 0 ]
then
echo 'Warning - msgfmt failed, not updating translations'
echo "ERROR - msgfmt failed on ${i}, not updating translations"
# msgfmt leaves the class file there so the build would work the next time
find src/WEB-INF/classes -name messages_${LG}.class -exec rm -f {} \;
RC=1
break
fi
fi
done
rm -f $TMPFILE
# todo: return failure
exit 0
exit $RC

View File

@@ -18,16 +18,20 @@ import java.util.Date;
import java.util.HashMap;
import java.util.List;
import java.util.Locale;
import java.util.Map;
import java.util.Properties;
import java.util.StringTokenizer;
import java.util.concurrent.ConcurrentHashMap;
import net.i2p.I2PAppContext;
import net.i2p.I2PException;
import net.i2p.client.naming.NamingService;
import net.i2p.client.streaming.I2PSocket;
import net.i2p.client.streaming.I2PSocketManager;
import net.i2p.client.streaming.I2PSocketOptions;
import net.i2p.data.Base32;
import net.i2p.data.Base64;
import net.i2p.data.DataFormatException;
import net.i2p.data.DataHelper;
import net.i2p.data.Destination;
import net.i2p.util.EventDispatcher;
@@ -62,7 +66,16 @@ import net.i2p.util.Translate;
*/
public class I2PTunnelHTTPClient extends I2PTunnelHTTPClientBase implements Runnable {
private HashMap addressHelpers = new HashMap();
/**
* Map of host name to base64 destination for destinations collected
* via address helper links
*/
private final ConcurrentHashMap<String, String> addressHelpers = new ConcurrentHashMap(8);
/**
* Used to protect actions via http://proxy.i2p/
*/
private final String _proxyNonce;
/**
* These are backups if the xxx.ht error page is missing.
@@ -130,6 +143,18 @@ public class I2PTunnelHTTPClient extends I2PTunnelHTTPClientBase implements Runn
"or naming one of them differently.<p>")
.getBytes();
private final static byte[] ERR_AHELPER_NEW =
("HTTP/1.1 409 New Address\r\n"+
"Content-Type: text/html; charset=iso-8859-1\r\n"+
"Cache-control: no-cache\r\n"+
"\r\n"+
"<html><body><H1>New Host Name with Address Helper</H1>"+
"The address helper link you followed is for a new host name that is not in your address book. " +
"You may either save the destination for this host name to your address book, or remember it only until your router restarts. " +
"If you save it to your address book, you will not see this message again. " +
"If you do not wish to visit this host, click the \"back\" button on your browser.")
.getBytes();
private final static byte[] ERR_BAD_PROTOCOL =
("HTTP/1.1 403 Bad Protocol\r\n"+
"Content-Type: text/html; charset=iso-8859-1\r\n"+
@@ -162,6 +187,7 @@ public class I2PTunnelHTTPClient extends I2PTunnelHTTPClientBase implements Runn
public I2PTunnelHTTPClient(int localPort, Logging l, I2PSocketManager sockMgr, I2PTunnel tunnel, EventDispatcher notifyThis, long clientId) {
super(localPort, l, sockMgr, tunnel, notifyThis, clientId);
_proxyNonce = Long.toString(_context.random().nextLong());
// proxyList = new ArrayList();
setName("HTTP Proxy on " + getTunnel().listenHost + ':' + localPort);
@@ -177,6 +203,7 @@ public class I2PTunnelHTTPClient extends I2PTunnelHTTPClientBase implements Runn
String wwwProxy, EventDispatcher notifyThis,
I2PTunnel tunnel) throws IllegalArgumentException {
super(localPort, ownDest, l, notifyThis, "HTTP Proxy on " + tunnel.listenHost + ':' + localPort + " #" + (++__clientId), tunnel);
_proxyNonce = Long.toString(_context.random().nextLong());
//proxyList = new ArrayList(); // We won't use outside of i2p
if (waitEventValue("openBaseClientResult").equals("error")) {
@@ -258,12 +285,14 @@ public class I2PTunnelHTTPClient extends I2PTunnelHTTPClientBase implements Runn
return rv;
}
private static final String LOCAL_SERVER = "proxy.i2p";
private static final boolean DEFAULT_GZIP = true;
// all default to false
/** all default to false */
public static final String PROP_REFERER = "i2ptunnel.httpclient.sendReferer";
public static final String PROP_USER_AGENT = "i2ptunnel.httpclient.sendUserAgent";
public static final String PROP_VIA = "i2ptunnel.httpclient.sendVia";
public static final String PROP_JUMP_SERVERS = "i2ptunnel.httpclient.jumpServers";
public static final String PROP_DISABLE_HELPER = "i2ptunnel.httpclient.disableAddressHelper";
protected void clientConnectionRun(Socket s) {
InputStream in = null;
@@ -278,7 +307,10 @@ public class I2PTunnelHTTPClient extends I2PTunnelHTTPClientBase implements Runn
InputReader reader = new InputReader(s.getInputStream());
String line, method = null, protocol = null, host = null, destination = null;
StringBuilder newRequest = new StringBuilder();
int ahelper = 0;
boolean ahelperPresent = false;
boolean ahelperNew = false;
String ahelperKey = null;
String userAgent = null;
String authorization = null;
while ((line = reader.readLine(method)) != null) {
line = line.trim();
@@ -334,6 +366,7 @@ public class I2PTunnelHTTPClient extends I2PTunnelHTTPClientBase implements Runn
protocol = request.substring(0, pos + 2);
request = request.substring(pos + 2);
// "foo.i2p/bar/baz HTTP/1.1", with any i2paddresshelper parameter removed
targetRequest = request;
// pos is the start of the path
@@ -380,21 +413,20 @@ public class I2PTunnelHTTPClient extends I2PTunnelHTTPClientBase implements Runn
destination = host;
host = getHostName(destination);
line = method + ' ' + request.substring(pos);
} else if (host.toLowerCase().equals("proxy.i2p")) {
} else if (host.toLowerCase().equals(LOCAL_SERVER)) {
// so we don't do any naming service lookups
destination = host;
usingInternalServer = true;
} else if (host.toLowerCase().endsWith(".i2p")) {
// Destination gets the host name
destination = host;
// Host becomes the destination key
// Host becomes the destination's "{b32}.b32.i2p" string, or "i2p" on lookup failure
host = getHostName(destination);
int pos2;
if ((pos2 = request.indexOf("?")) != -1) {
// Try to find an address helper in the fragments
// and split the request into it's component parts for rebuilding later
String ahelperKey = null;
boolean ahelperConflict = false;
String fragments = request.substring(pos2 + 1);
@@ -404,6 +436,7 @@ public class I2PTunnelHTTPClient extends I2PTunnelHTTPClientBase implements Runn
String urlEncoding = "";
fragments = fragments.substring(0, pos2);
String initialFragments = fragments;
// FIXME split on ';' also
fragments = fragments + "&";
String fragment;
while(fragments.length() > 0) {
@@ -412,35 +445,43 @@ public class I2PTunnelHTTPClient extends I2PTunnelHTTPClientBase implements Runn
fragments = fragments.substring(pos2 + 1);
// Fragment looks like addresshelper key
if (fragment.startsWith("i2paddresshelper=")) {
if (fragment.startsWith("i2paddresshelper=") &&
!Boolean.valueOf(getTunnel().getClientOptions().getProperty(PROP_DISABLE_HELPER)).booleanValue()) {
pos2 = fragment.indexOf("=");
ahelperKey = fragment.substring(pos2 + 1);
// Key contains data, lets not ignore it
if (ahelperKey != null) {
ahelperPresent = true;
// ahelperKey will be validated later
// Host resolvable only with addresshelper
if ( (host == null) || ("i2p".equals(host)) )
{
// Cannot check, use addresshelper key
addressHelpers.put(destination,ahelperKey);
} else {
// Host resolvable from database, verify addresshelper key
// Silently bypass correct keys, otherwise alert
String destB64 = null;
Destination _dest = _context.namingService().lookup(host);
if (_dest != null)
destB64 = _dest.toBase64();
if (destB64 != null && !destB64.equals(ahelperKey))
{
if (host == null || "i2p".equals(host)) {
// Host lookup failed - resolvable only with addresshelper
// Store in local HashMap unless there is conflict
String old = addressHelpers.putIfAbsent(destination.toLowerCase(), ahelperKey);
ahelperNew = old == null;
if ((!ahelperNew) && !old.equals(ahelperKey)) {
// Conflict: handle when URL reconstruction done
ahelperConflict = true;
if (_log.shouldLog(Log.WARN))
_log.warn(getPrefix(requestId) + "Addresshelper key conflict for site [" + destination + "], trusted key [" + destB64 + "], specified key [" + ahelperKey + "].");
_log.warn(getPrefix(requestId) + "Addresshelper key conflict for site [" + destination +
"], trusted key [" + old + "], specified key [" + ahelperKey + "].");
}
} else {
// If the host is resolvable from database, verify addresshelper key
// Silently bypass correct keys, otherwise alert
Destination hostDest = _context.namingService().lookup(destination);
if (hostDest != null) {
String destB64 = hostDest.toBase64();
if (destB64 != null && !destB64.equals(ahelperKey)) {
// Conflict: handle when URL reconstruction done
ahelperConflict = true;
if (_log.shouldLog(Log.WARN))
_log.warn(getPrefix(requestId) + "Addresshelper key conflict for site [" + destination +
"], trusted key [" + destB64 + "], specified key [" + ahelperKey + "].");
}
}
}
}
} // ahelperKey
} else {
// Other fragments, just pass along
// Append each fragment to urlEncoding
@@ -453,11 +494,10 @@ public class I2PTunnelHTTPClient extends I2PTunnelHTTPClientBase implements Runn
}
// Reconstruct the request minus the i2paddresshelper GET var
request = uriPath + urlEncoding + " " + protocolVersion;
targetRequest = request;
// Did addresshelper key conflict?
if (ahelperConflict)
{
if (ahelperConflict) {
if (out != null) {
// convert ahelperKey to b32
String alias = getHostName(ahelperKey);
@@ -479,16 +519,15 @@ public class I2PTunnelHTTPClient extends I2PTunnelHTTPClientBase implements Runn
s.close();
return;
}
}
} // end query processing
String addressHelper = (String) addressHelpers.get(destination);
if (addressHelper != null) {
destination = addressHelper;
host = getHostName(destination);
ahelper = 1;
}
String addressHelper = addressHelpers.get(destination);
if (addressHelper != null)
host = getHostName(addressHelper);
line = method + " " + request.substring(pos);
// end of (host endsWith(".i2p"))
} else if (host.toLowerCase().equals("localhost") || host.equals("127.0.0.1") ||
host.startsWith("192.168.")) {
// if somebody is trying to get to 192.168.example.com, oh well
@@ -584,10 +623,13 @@ public class I2PTunnelHTTPClient extends I2PTunnelHTTPClientBase implements Runn
line = "Host: " + host;
if (_log.shouldLog(Log.INFO))
_log.info(getPrefix(requestId) + "Setting host = " + host);
} else if (lowercaseLine.startsWith("user-agent: ") &&
!Boolean.valueOf(getTunnel().getClientOptions().getProperty(PROP_USER_AGENT)).booleanValue()) {
line = null;
continue;
} else if (lowercaseLine.startsWith("user-agent: ")) {
// save for deciding whether to offer address book form
userAgent = lowercaseLine.substring(12);
if (!Boolean.valueOf(getTunnel().getClientOptions().getProperty(PROP_USER_AGENT)).booleanValue()) {
line = null;
continue;
}
} else if (lowercaseLine.startsWith("accept")) {
// strip the accept-blah headers, as they vary dramatically from
// browser to browser
@@ -687,15 +729,6 @@ public class I2PTunnelHTTPClient extends I2PTunnelHTTPClientBase implements Runn
if (_log.shouldLog(Log.DEBUG))
_log.debug(getPrefix(requestId) + "Destination: " + destination);
// Serve local proxy files (images, css linked from error pages)
// Ignore all the headers
// Allow without authorization
if (usingInternalServer) {
serveLocalFile(out, method, targetRequest);
s.close();
return;
}
// Authorization
if (!authorize(s, requestId, authorization)) {
if (_log.shouldLog(Log.WARN)) {
@@ -705,19 +738,41 @@ public class I2PTunnelHTTPClient extends I2PTunnelHTTPClientBase implements Runn
_log.warn(getPrefix(requestId) + "Auth required, sending 407");
}
out.write(getErrorPage("auth", ERR_AUTH));
writeFooter(out);
s.close();
return;
}
// Serve local proxy files (images, css linked from error pages)
// Ignore all the headers
if (usingInternalServer) {
// disable the add form if address helper is disabled
if (targetRequest.startsWith(LOCAL_SERVER + "/add?") &&
Boolean.valueOf(getTunnel().getClientOptions().getProperty(PROP_DISABLE_HELPER)).booleanValue()) {
out.write(ERR_HELPER_DISABLED);
} else {
serveLocalFile(out, method, targetRequest, _proxyNonce);
}
s.close();
return;
}
// LOOKUP
// If the host is "i2p", the getHostName() lookup failed, don't try to
// look it up again as the naming service does not do negative caching
// so it will be slow.
Destination clientDest;
if ("i2p".equals(host))
String addressHelper = addressHelpers.get(destination.toLowerCase());
if (addressHelper != null) {
clientDest = _context.namingService().lookup(addressHelper);
// remove bad entries
if (clientDest == null)
addressHelpers.remove(destination.toLowerCase());
} else if ("i2p".equals(host)) {
clientDest = null;
else
} else {
clientDest = _context.namingService().lookup(destination);
}
if (clientDest == null) {
//l.log("Could not resolve " + destination + ".");
@@ -727,7 +782,7 @@ public class I2PTunnelHTTPClient extends I2PTunnelHTTPClientBase implements Runn
String jumpServers = null;
if (usingWWWProxy)
header = getErrorPage("dnfp", ERR_DESTINATION_UNKNOWN);
else if(ahelper != 0)
else if (ahelperPresent)
header = getErrorPage("dnfb", ERR_DESTINATION_UNKNOWN);
else if (destination.length() == 60 && destination.endsWith(".b32.i2p"))
header = getErrorPage("dnf", ERR_DESTINATION_UNKNOWN);
@@ -741,7 +796,35 @@ public class I2PTunnelHTTPClient extends I2PTunnelHTTPClientBase implements Runn
s.close();
return;
}
String remoteID;
// Address helper response form
// This will only load once - the second time it won't be "new"
// Don't do this for eepget, which uses a user-agent of "Wget"
if (ahelperNew && "GET".equals(method) &&
(userAgent == null || !userAgent.startsWith("Wget")) &&
!Boolean.valueOf(getTunnel().getClientOptions().getProperty(PROP_DISABLE_HELPER)).booleanValue()) {
writeHelperSaveForm(out, destination, ahelperKey, protocol + targetRequest);
s.close();
return;
}
// Redirect to non-addresshelper URL to not clog the browser address bar
// and not pass the parameter to the eepsite.
// This also prevents the not-found error page from looking bad
// Syndie can't handle a redirect of a POST
if (ahelperPresent && !"POST".equals(method)) {
String uri = protocol + targetRequest;
int spc = uri.indexOf(" ");
if (spc >= 0)
uri = uri.substring(0, spc);
if (_log.shouldLog(Log.DEBUG))
_log.debug("Auto redirecting to " + uri);
out.write(("HTTP/1.1 301 Address Helper Accepted\r\n"+
"Location: " + uri + "\r\n"+
"\r\n").getBytes("UTF-8"));
s.close();
return;
}
Properties opts = new Properties();
//opts.setProperty("i2p.streaming.inactivityTimeout", ""+120*1000);
@@ -779,6 +862,38 @@ public class I2PTunnelHTTPClient extends I2PTunnelHTTPClientBase implements Runn
}
}
/** @since 0.8.7 */
private void writeHelperSaveForm(OutputStream out, String destination, String ahelperKey, String targetRequest) throws IOException {
if (out == null)
return;
// strip HTTP/1.1
int protopos = targetRequest.indexOf(" ");
if (protopos >= 0)
targetRequest = targetRequest.substring(0, protopos);
byte[] header = getErrorPage("ahelper-new", ERR_AHELPER_NEW);
out.write(header);
out.write(("<table><tr><td class=\"mediumtags\" align=\"right\">" + _("Host") + "</td><td class=\"mediumtags\">" + destination + "</td></tr>\n" +
"<tr><td class=\"mediumtags\" align=\"right\">" + _("Destination") + "</td><td>" +
"<textarea rows=\"1\" style=\"height: 4em; min-width: 0; min-height: 0;\" cols=\"70\" wrap=\"off\" readonly=\"readonly\" >" +
ahelperKey + "</textarea></td></tr></table>\n" +
"<hr><div class=\"formaction\">"+
"<form method=\"GET\" action=\"" + targetRequest + "\">" +
"<button type=\"submit\">" + _("Continue to {0} without saving", destination) + "</button>" +
"</form>\n<form method=\"GET\" action=\"http://" + LOCAL_SERVER + "/add\">" +
"<input type=\"hidden\" name=\"host\" value=\"" + destination + "\">\n" +
"<input type=\"hidden\" name=\"dest\" value=\"" + ahelperKey + "\">\n" +
"<input type=\"hidden\" name=\"nonce\" value=\"" + _proxyNonce + "\">\n" +
"<button type=\"submit\" name=\"router\" value=\"router\">" + _("Save {0} to router address book and continue to eepsite", destination) + "</button><br>\n").getBytes("UTF-8"));
if (_context.namingService().getName().equals("BlockfileNamingService")) {
// only blockfile supports multiple books
out.write(("<button type=\"submit\" name=\"master\" value=\"master\">" + _("Save {0} to master address book and continue to eepsite", destination) + "</button><br>\n").getBytes("UTF-8"));
out.write(("<button type=\"submit\" name=\"private\" value=\"private\">" + _("Save {0} to private address book and continue to eepsite", destination) + "</button>\n").getBytes("UTF-8"));
}
out.write(("<input type=\"hidden\" name=\"url\" value=\"" + targetRequest + "\">\n" +
"</form></div></div>").getBytes());
writeFooter(out);
}
/**
* Read the first line unbuffered.
* After that, switch to a BufferedReader, unless the method is "POST".
@@ -915,7 +1030,7 @@ public class I2PTunnelHTTPClient extends I2PTunnelHTTPClientBase implements Runn
out.write(errMessage);
if (targetRequest != null) {
int protopos = targetRequest.indexOf(" ");
String uri = null;
String uri;
if (protopos >= 0)
uri = targetRequest.substring(0, protopos);
else
@@ -1022,6 +1137,20 @@ public class I2PTunnelHTTPClient extends I2PTunnelHTTPClientBase implements Runn
"HTTP Proxy local file not found")
.getBytes();
private final static byte[] ERR_ADD =
("HTTP/1.1 409 Bad\r\n"+
"Content-Type: text/plain\r\n"+
"\r\n"+
"Add to addressbook failed - bad parameters")
.getBytes();
private final static byte[] ERR_HELPER_DISABLED =
("HTTP/1.1 403 Disabled\r\n"+
"Content-Type: text/plain\r\n"+
"\r\n"+
"Address helpers disabled")
.getBytes();
/**
* Very simple web server.
*
@@ -1043,9 +1172,10 @@ public class I2PTunnelHTTPClient extends I2PTunnelHTTPClientBase implements Runn
*
* @param targetRequest "proxy.i2p/themes/foo.png HTTP/1.1"
*/
private static void serveLocalFile(OutputStream out, String method, String targetRequest) {
private static void serveLocalFile(OutputStream out, String method, String targetRequest, String proxyNonce) {
//System.err.println("targetRequest: \"" + targetRequest + "\"");
// a home page message for the curious...
if (targetRequest.startsWith("proxy.i2p/ ")) {
if (targetRequest.startsWith(LOCAL_SERVER + "/ ")) {
try {
out.write(("HTTP/1.1 200 OK\r\nContent-Type: text/plain\r\nCache-Control: max-age=86400\r\n\r\nI2P HTTP proxy OK").getBytes());
out.flush();
@@ -1053,12 +1183,12 @@ public class I2PTunnelHTTPClient extends I2PTunnelHTTPClientBase implements Runn
return;
}
if ((method.equals("GET") || method.equals("HEAD")) &&
targetRequest.startsWith("proxy.i2p/themes/") &&
targetRequest.startsWith(LOCAL_SERVER + "/themes/") &&
!targetRequest.contains("..")) {
int space = targetRequest.indexOf(' ');
String filename = null;
try {
filename = targetRequest.substring(17, space); // "proxy.i2p/themes/".length
filename = targetRequest.substring(LOCAL_SERVER.length() + 8, space); // "/themes/".length
} catch (IndexOutOfBoundsException ioobe) {}
// theme hack
if (filename.startsWith("console/default/"))
@@ -1081,9 +1211,65 @@ public class I2PTunnelHTTPClient extends I2PTunnelHTTPClientBase implements Runn
out.write(type.getBytes());
out.write("\r\nCache-Control: max-age=86400\r\n\r\n".getBytes());
FileUtil.readFile(filename, themesDir.getAbsolutePath(), out);
} catch (IOException ioe) {}
return;
}
}
// Add to addressbook (form submit)
// Parameters are url, host, dest, nonce, and master | router | private.
// Do the add and redirect.
if (targetRequest.startsWith(LOCAL_SERVER + "/add?")) {
int spc = targetRequest.indexOf(' ');
String query = targetRequest.substring(LOCAL_SERVER.length() + 5, spc); // "/add?".length()
Map<String, String> opts = new HashMap(8);
StringTokenizer tok = new StringTokenizer(query, "=&;");
while (tok.hasMoreTokens()) {
String k = tok.nextToken();
if (!tok.hasMoreTokens())
break;
String v = tok.nextToken();
opts.put(decode(k), decode(v));
}
String url = opts.get("url");
String host = opts.get("host");
String b64Dest = opts.get("dest");
String nonce = opts.get("nonce");
String book = "privatehosts.txt";
if (opts.get("master") != null)
book = "userhosts.txt";
else if (opts.get("router") != null)
book = "hosts.txt";
Destination dest = null;
if (b64Dest != null) {
try {
dest = new Destination(b64Dest);
} catch (DataFormatException dfe) {
System.err.println("Bad dest to save?" + b64Dest);
}
}
//System.err.println("url : \"" + url + "\"");
//System.err.println("host : \"" + host + "\"");
//System.err.println("b64dest : \"" + b64Dest + "\"");
//System.err.println("book : \"" + book + "\"");
//System.err.println("nonce : \"" + nonce + "\"");
if (proxyNonce.equals(nonce) && url != null && host != null && dest != null) {
try {
NamingService ns = I2PAppContext.getGlobalContext().namingService();
Properties nsOptions = new Properties();
nsOptions.setProperty("list", book);
nsOptions.setProperty("s", _("Added via address helper"));
boolean success = ns.put(host, dest, nsOptions);
writeRedirectPage(out, success, host, book, url);
return;
} catch (IOException ioe) {}
}
try {
out.write(ERR_ADD);
out.flush();
} catch (IOException ioe) {}
return;
}
try {
out.write(ERR_404);
@@ -1091,16 +1277,72 @@ public class I2PTunnelHTTPClient extends I2PTunnelHTTPClientBase implements Runn
} catch (IOException ioe) {}
}
/** @since 0.8.7 */
private static void writeRedirectPage(OutputStream out, boolean success, String host, String book, String url) throws IOException {
out.write(("HTTP/1.1 200 OK\r\n"+
"Content-Type: text/html; charset=UTF-8\r\n"+
"\r\n"+
"<html><head>"+
"<title>" + _("Redirecting to {0}", host) + "</title>\n" +
"<link rel=\"shortcut icon\" href=\"http://proxy.i2p/themes/console/images/favicon.ico\" >\n" +
"<link href=\"http://proxy.i2p/themes/console/default/console.css\" rel=\"stylesheet\" type=\"text/css\" >\n" +
"<meta http-equiv=\"Refresh\" content=\"1; url=" + url + "\">\n" +
"</head><body>\n" +
"<div class=logo>\n" +
"<a href=\"http://127.0.0.1:7657/\" title=\"" + _("Router Console") + "\"><img src=\"http://proxy.i2p/themes/console/images/i2plogo.png\" alt=\"I2P Router Console\" border=\"0\"></a><hr>\n" +
"<a href=\"http://127.0.0.1:7657/config\">" + _("Configuration") + "</a> <a href=\"http://127.0.0.1:7657/help.jsp\">" + _("Help") + "</a> <a href=\"http://127.0.0.1:7657/susidns/index.jsp\">" + _("Addressbook") + "</a>\n" +
"</div>" +
"<div class=warning id=warning>\n" +
"<h3>" +
(success ?
_("Saved {0} to the {1} addressbook, redirecting now.", host, book) :
_("Failed to save {0} to the {1} addressbook, redirecting now.", host, book)) +
"</h3>\n<p><a href=\"" + url + "\">" +
_("Click here if you are not redirected automatically.") +
"</a></p></div>").getBytes("UTF-8"));
writeFooter(out);
out.flush();
}
/**
* Decode %xx encoding
* @since 0.8.7
*/
private static String decode(String s) {
if (!s.contains("%"))
return s;
StringBuilder buf = new StringBuilder(s.length());
for (int i = 0; i < s.length(); i++) {
char c = s.charAt(i);
if (c != '%') {
buf.append(c);
} else {
try {
buf.append((char) Integer.parseInt(s.substring(++i, (++i) + 1), 16));
} catch (IndexOutOfBoundsException ioobe) {
break;
} catch (NumberFormatException nfe) {
break;
}
}
}
return buf.toString();
}
private static final String BUNDLE_NAME = "net.i2p.i2ptunnel.web.messages";
/** lang in routerconsole.lang property, else current locale */
public static String _(String key) {
protected static String _(String key) {
return Translate.getString(key, I2PAppContext.getGlobalContext(), BUNDLE_NAME);
}
/** {0} */
protected static String _(String key, Object o) {
return Translate.getString(key, o, I2PAppContext.getGlobalContext(), BUNDLE_NAME);
}
/** {0} and {1} */
public static String _(String key, Object o, Object o2) {
protected static String _(String key, Object o, Object o2) {
return Translate.getString(key, o, o2, I2PAppContext.getGlobalContext(), BUNDLE_NAME);
}

View File

@@ -116,11 +116,6 @@ public class I2PTunnelHTTPServer extends I2PTunnelServer {
// according to rfc2616 s14.3, this *should* force identity, even if
// "identity;q=1, *;q=0" didn't.
setEntry(headers, "Accept-encoding", "");
String modifiedHeader = formatHeaders(headers, command);
//String modifiedHeader = getModifiedHeader(socket);
if (_log.shouldLog(Log.DEBUG))
_log.debug("Modified header: [" + modifiedHeader + "]");
socket.setReadTimeout(readTimeout);
Socket s = new Socket(remoteHost, remotePort);
@@ -143,6 +138,10 @@ public class I2PTunnelHTTPServer extends I2PTunnelServer {
// Don't pass this on, outproxies should strip so I2P traffic isn't so obvious but they probably don't
if (alt)
headers.remove("X-Accept-encoding");
String modifiedHeader = formatHeaders(headers, command);
if (_log.shouldLog(Log.DEBUG))
_log.debug("Modified header: [" + modifiedHeader + "]");
if (allowGZIP && useGZIP) {
I2PAppThread req = new I2PAppThread(

View File

@@ -395,7 +395,8 @@ public class I2PTunnelIRCClient extends I2PTunnelClientBase implements Runnable
"HELPME",
"RULES",
"TOPIC",
"ISON" // jIRCii uses this for a ping (response is 303)
"ISON", // jIRCii uses this for a ping (response is 303)
"INVITE"
};
if(field[0].length()==0)

View File

@@ -8,7 +8,7 @@ msgid ""
msgstr ""
"Project-Id-Version: I2P i2ptunnel\n"
"Report-Msgid-Bugs-To: \n"
"POT-Creation-Date: 2011-03-03 18:29+0000\n"
"POT-Creation-Date: 2011-06-11 08:23+0000\n"
"PO-Revision-Date: 2010-06-15 14:09+0100\n"
"Last-Translator: duck <duck@mail.i2p>\n"
"Language-Team: duck <duck@mail.i2p>\n"
@@ -18,7 +18,7 @@ msgstr ""
"Content-Transfer-Encoding: 8bit\n"
"Plural-Forms: nplurals=2; plural=(n != 1)\n"
#: ../java/src/net/i2p/i2ptunnel/I2PTunnelHTTPClient.java:474
#: ../java/src/net/i2p/i2ptunnel/I2PTunnelHTTPClient.java:514
#, java-format
msgid ""
"To visit the destination in your host database, click <a href=\"{0}\">here</"
@@ -26,11 +26,83 @@ msgid ""
"\"{1}\">here</a>."
msgstr ""
#: ../java/src/net/i2p/i2ptunnel/I2PTunnelHTTPClient.java:931
#: ../java/src/net/i2p/i2ptunnel/I2PTunnelHTTPClient.java:875
#: ../jsp/WEB-INF/classes/net/i2p/i2ptunnel/jsp/editClient_jsp.java:388
#: ../jsp/WEB-INF/classes/net/i2p/i2ptunnel/jsp/editServer_jsp.java:142
#: ../jsp/WEB-INF/classes/net/i2p/i2ptunnel/jsp/editServer_jsp.java:401
msgid "Host"
msgstr ""
#: ../java/src/net/i2p/i2ptunnel/I2PTunnelHTTPClient.java:876
#: ../jsp/WEB-INF/classes/net/i2p/i2ptunnel/jsp/index_jsp.java:370
msgid "Destination"
msgstr ""
#: ../java/src/net/i2p/i2ptunnel/I2PTunnelHTTPClient.java:881
#, java-format
msgid "Continue to {0} without saving"
msgstr ""
#: ../java/src/net/i2p/i2ptunnel/I2PTunnelHTTPClient.java:886
#, java-format
msgid "Save {0} to router address book and continue to eepsite"
msgstr ""
#. only blockfile supports multiple books
#: ../java/src/net/i2p/i2ptunnel/I2PTunnelHTTPClient.java:889
#, java-format
msgid "Save {0} to master address book and continue to eepsite"
msgstr ""
#: ../java/src/net/i2p/i2ptunnel/I2PTunnelHTTPClient.java:890
#, java-format
msgid "Save {0} to private address book and continue to eepsite"
msgstr ""
#: ../java/src/net/i2p/i2ptunnel/I2PTunnelHTTPClient.java:1046
msgid ""
"Click a link below to look for an address helper by using a \"jump\" service:"
msgstr ""
#: ../java/src/net/i2p/i2ptunnel/I2PTunnelHTTPClient.java:1262
msgid "Added via address helper"
msgstr ""
#: ../java/src/net/i2p/i2ptunnel/I2PTunnelHTTPClient.java:1286
#, java-format
msgid "Redirecting to {0}"
msgstr ""
#: ../java/src/net/i2p/i2ptunnel/I2PTunnelHTTPClient.java:1292
msgid "Router Console"
msgstr ""
#: ../java/src/net/i2p/i2ptunnel/I2PTunnelHTTPClient.java:1293
msgid "Addressbook"
msgstr ""
#: ../java/src/net/i2p/i2ptunnel/I2PTunnelHTTPClient.java:1293
msgid "Configuration"
msgstr ""
#: ../java/src/net/i2p/i2ptunnel/I2PTunnelHTTPClient.java:1293
msgid "Help"
msgstr ""
#: ../java/src/net/i2p/i2ptunnel/I2PTunnelHTTPClient.java:1298
#, java-format
msgid "Saved {0} to the {1} addressbook, redirecting now."
msgstr ""
#: ../java/src/net/i2p/i2ptunnel/I2PTunnelHTTPClient.java:1299
#, java-format
msgid "Failed to save {0} to the {1} addressbook, redirecting now."
msgstr ""
#: ../java/src/net/i2p/i2ptunnel/I2PTunnelHTTPClient.java:1301
msgid "Click here if you are not redirected automatically."
msgstr ""
#: ../java/src/net/i2p/i2ptunnel/web/EditBean.java:326
#: ../java/src/net/i2p/i2ptunnel/web/EditBean.java:336
msgid "internal"
@@ -117,12 +189,12 @@ msgid "HTTP bidir"
msgstr ""
#: ../java/src/net/i2p/i2ptunnel/web/IndexBean.java:517
#: ../jsp/WEB-INF/classes/net/i2p/i2ptunnel/jsp/index_jsp.java:290
#: ../jsp/WEB-INF/classes/net/i2p/i2ptunnel/jsp/index_jsp.java:293
msgid "Host not set"
msgstr ""
#: ../java/src/net/i2p/i2ptunnel/web/IndexBean.java:521
#: ../jsp/WEB-INF/classes/net/i2p/i2ptunnel/jsp/index_jsp.java:272
#: ../jsp/WEB-INF/classes/net/i2p/i2ptunnel/jsp/index_jsp.java:275
msgid "Port not set"
msgstr ""
@@ -140,24 +212,24 @@ msgstr ""
#: ../jsp/WEB-INF/classes/net/i2p/i2ptunnel/jsp/editClient_jsp.java:112
#: ../jsp/WEB-INF/classes/net/i2p/i2ptunnel/jsp/editServer_jsp.java:112
#: ../jsp/WEB-INF/classes/net/i2p/i2ptunnel/jsp/index_jsp.java:107
#: ../jsp/WEB-INF/classes/net/i2p/i2ptunnel/jsp/index_jsp.java:121
#: ../jsp/WEB-INF/classes/net/i2p/i2ptunnel/jsp/index_jsp.java:242
#: ../jsp/WEB-INF/classes/net/i2p/i2ptunnel/jsp/index_jsp.java:257
#: ../jsp/WEB-INF/classes/net/i2p/i2ptunnel/jsp/index_jsp.java:110
#: ../jsp/WEB-INF/classes/net/i2p/i2ptunnel/jsp/index_jsp.java:124
#: ../jsp/WEB-INF/classes/net/i2p/i2ptunnel/jsp/index_jsp.java:245
#: ../jsp/WEB-INF/classes/net/i2p/i2ptunnel/jsp/index_jsp.java:260
msgid "Name"
msgstr ""
#: ../jsp/WEB-INF/classes/net/i2p/i2ptunnel/jsp/editClient_jsp.java:116
#: ../jsp/WEB-INF/classes/net/i2p/i2ptunnel/jsp/editServer_jsp.java:116
#: ../jsp/WEB-INF/classes/net/i2p/i2ptunnel/jsp/index_jsp.java:246
#: ../jsp/WEB-INF/classes/net/i2p/i2ptunnel/jsp/index_jsp.java:279
#: ../jsp/WEB-INF/classes/net/i2p/i2ptunnel/jsp/index_jsp.java:249
#: ../jsp/WEB-INF/classes/net/i2p/i2ptunnel/jsp/index_jsp.java:282
msgid "Type"
msgstr ""
#: ../jsp/WEB-INF/classes/net/i2p/i2ptunnel/jsp/editClient_jsp.java:120
#: ../jsp/WEB-INF/classes/net/i2p/i2ptunnel/jsp/editServer_jsp.java:120
#: ../jsp/WEB-INF/classes/net/i2p/i2ptunnel/jsp/index_jsp.java:226
#: ../jsp/WEB-INF/classes/net/i2p/i2ptunnel/jsp/index_jsp.java:386
#: ../jsp/WEB-INF/classes/net/i2p/i2ptunnel/jsp/index_jsp.java:229
#: ../jsp/WEB-INF/classes/net/i2p/i2ptunnel/jsp/index_jsp.java:389
msgid "Description"
msgstr ""
@@ -392,17 +464,11 @@ msgstr ""
msgid "Router I2CP Address"
msgstr ""
#: ../jsp/WEB-INF/classes/net/i2p/i2ptunnel/jsp/editClient_jsp.java:388
#: ../jsp/WEB-INF/classes/net/i2p/i2ptunnel/jsp/editServer_jsp.java:142
#: ../jsp/WEB-INF/classes/net/i2p/i2ptunnel/jsp/editServer_jsp.java:401
msgid "Host"
msgstr ""
#: ../jsp/WEB-INF/classes/net/i2p/i2ptunnel/jsp/editClient_jsp.java:396
#: ../jsp/WEB-INF/classes/net/i2p/i2ptunnel/jsp/editServer_jsp.java:148
#: ../jsp/WEB-INF/classes/net/i2p/i2ptunnel/jsp/editServer_jsp.java:409
#: ../jsp/WEB-INF/classes/net/i2p/i2ptunnel/jsp/index_jsp.java:244
#: ../jsp/WEB-INF/classes/net/i2p/i2ptunnel/jsp/index_jsp.java:266
#: ../jsp/WEB-INF/classes/net/i2p/i2ptunnel/jsp/index_jsp.java:247
#: ../jsp/WEB-INF/classes/net/i2p/i2ptunnel/jsp/index_jsp.java:269
msgid "Port"
msgstr ""
@@ -650,131 +716,127 @@ msgstr ""
msgid "Modify"
msgstr ""
#: ../jsp/WEB-INF/classes/net/i2p/i2ptunnel/jsp/index_jsp.java:71
#: ../jsp/WEB-INF/classes/net/i2p/i2ptunnel/jsp/index_jsp.java:74
msgid "I2P Tunnel Manager - List"
msgstr ""
#: ../jsp/WEB-INF/classes/net/i2p/i2ptunnel/jsp/index_jsp.java:83
#: ../jsp/WEB-INF/classes/net/i2p/i2ptunnel/jsp/index_jsp.java:86
msgid "Status Messages"
msgstr ""
#: ../jsp/WEB-INF/classes/net/i2p/i2ptunnel/jsp/index_jsp.java:87
#: ../jsp/WEB-INF/classes/net/i2p/i2ptunnel/jsp/index_jsp.java:90
msgid "Refresh"
msgstr ""
#: ../jsp/WEB-INF/classes/net/i2p/i2ptunnel/jsp/index_jsp.java:91
#: ../jsp/WEB-INF/classes/net/i2p/i2ptunnel/jsp/index_jsp.java:94
msgid "Stop All"
msgstr ""
#: ../jsp/WEB-INF/classes/net/i2p/i2ptunnel/jsp/index_jsp.java:95
#: ../jsp/WEB-INF/classes/net/i2p/i2ptunnel/jsp/index_jsp.java:98
msgid "Start All"
msgstr ""
#: ../jsp/WEB-INF/classes/net/i2p/i2ptunnel/jsp/index_jsp.java:99
#: ../jsp/WEB-INF/classes/net/i2p/i2ptunnel/jsp/index_jsp.java:102
msgid "Restart All"
msgstr ""
#: ../jsp/WEB-INF/classes/net/i2p/i2ptunnel/jsp/index_jsp.java:103
#: ../jsp/WEB-INF/classes/net/i2p/i2ptunnel/jsp/index_jsp.java:106
msgid "Reload Config"
msgstr ""
#: ../jsp/WEB-INF/classes/net/i2p/i2ptunnel/jsp/index_jsp.java:105
#: ../jsp/WEB-INF/classes/net/i2p/i2ptunnel/jsp/index_jsp.java:108
msgid "I2P Server Tunnels"
msgstr ""
#: ../jsp/WEB-INF/classes/net/i2p/i2ptunnel/jsp/index_jsp.java:109
#: ../jsp/WEB-INF/classes/net/i2p/i2ptunnel/jsp/index_jsp.java:130
#: ../jsp/WEB-INF/classes/net/i2p/i2ptunnel/jsp/index_jsp.java:112
#: ../jsp/WEB-INF/classes/net/i2p/i2ptunnel/jsp/index_jsp.java:133
msgid "Points at"
msgstr ""
#: ../jsp/WEB-INF/classes/net/i2p/i2ptunnel/jsp/index_jsp.java:111
#: ../jsp/WEB-INF/classes/net/i2p/i2ptunnel/jsp/index_jsp.java:153
#: ../jsp/WEB-INF/classes/net/i2p/i2ptunnel/jsp/index_jsp.java:157
#: ../jsp/WEB-INF/classes/net/i2p/i2ptunnel/jsp/index_jsp.java:114
#: ../jsp/WEB-INF/classes/net/i2p/i2ptunnel/jsp/index_jsp.java:156
#: ../jsp/WEB-INF/classes/net/i2p/i2ptunnel/jsp/index_jsp.java:160
msgid "Preview"
msgstr ""
#: ../jsp/WEB-INF/classes/net/i2p/i2ptunnel/jsp/index_jsp.java:113
#: ../jsp/WEB-INF/classes/net/i2p/i2ptunnel/jsp/index_jsp.java:177
#: ../jsp/WEB-INF/classes/net/i2p/i2ptunnel/jsp/index_jsp.java:250
#: ../jsp/WEB-INF/classes/net/i2p/i2ptunnel/jsp/index_jsp.java:297
#: ../jsp/WEB-INF/classes/net/i2p/i2ptunnel/jsp/index_jsp.java:116
#: ../jsp/WEB-INF/classes/net/i2p/i2ptunnel/jsp/index_jsp.java:180
#: ../jsp/WEB-INF/classes/net/i2p/i2ptunnel/jsp/index_jsp.java:253
#: ../jsp/WEB-INF/classes/net/i2p/i2ptunnel/jsp/index_jsp.java:300
msgid "Status"
msgstr ""
#: ../jsp/WEB-INF/classes/net/i2p/i2ptunnel/jsp/index_jsp.java:163
#: ../jsp/WEB-INF/classes/net/i2p/i2ptunnel/jsp/index_jsp.java:166
msgid "Base32 Address"
msgstr ""
#: ../jsp/WEB-INF/classes/net/i2p/i2ptunnel/jsp/index_jsp.java:171
#: ../jsp/WEB-INF/classes/net/i2p/i2ptunnel/jsp/index_jsp.java:174
msgid "No Preview"
msgstr ""
#: ../jsp/WEB-INF/classes/net/i2p/i2ptunnel/jsp/index_jsp.java:184
#: ../jsp/WEB-INF/classes/net/i2p/i2ptunnel/jsp/index_jsp.java:304
#: ../jsp/WEB-INF/classes/net/i2p/i2ptunnel/jsp/index_jsp.java:187
#: ../jsp/WEB-INF/classes/net/i2p/i2ptunnel/jsp/index_jsp.java:307
msgid "Starting..."
msgstr ""
#: ../jsp/WEB-INF/classes/net/i2p/i2ptunnel/jsp/index_jsp.java:191
#: ../jsp/WEB-INF/classes/net/i2p/i2ptunnel/jsp/index_jsp.java:205
#: ../jsp/WEB-INF/classes/net/i2p/i2ptunnel/jsp/index_jsp.java:311
#: ../jsp/WEB-INF/classes/net/i2p/i2ptunnel/jsp/index_jsp.java:325
#: ../jsp/WEB-INF/classes/net/i2p/i2ptunnel/jsp/index_jsp.java:339
#: ../jsp/WEB-INF/classes/net/i2p/i2ptunnel/jsp/index_jsp.java:194
#: ../jsp/WEB-INF/classes/net/i2p/i2ptunnel/jsp/index_jsp.java:208
#: ../jsp/WEB-INF/classes/net/i2p/i2ptunnel/jsp/index_jsp.java:314
#: ../jsp/WEB-INF/classes/net/i2p/i2ptunnel/jsp/index_jsp.java:328
#: ../jsp/WEB-INF/classes/net/i2p/i2ptunnel/jsp/index_jsp.java:342
msgid "Stop"
msgstr ""
#: ../jsp/WEB-INF/classes/net/i2p/i2ptunnel/jsp/index_jsp.java:198
#: ../jsp/WEB-INF/classes/net/i2p/i2ptunnel/jsp/index_jsp.java:332
#: ../jsp/WEB-INF/classes/net/i2p/i2ptunnel/jsp/index_jsp.java:201
#: ../jsp/WEB-INF/classes/net/i2p/i2ptunnel/jsp/index_jsp.java:335
msgid "Running"
msgstr ""
#: ../jsp/WEB-INF/classes/net/i2p/i2ptunnel/jsp/index_jsp.java:212
#: ../jsp/WEB-INF/classes/net/i2p/i2ptunnel/jsp/index_jsp.java:346
#: ../jsp/WEB-INF/classes/net/i2p/i2ptunnel/jsp/index_jsp.java:215
#: ../jsp/WEB-INF/classes/net/i2p/i2ptunnel/jsp/index_jsp.java:349
msgid "Stopped"
msgstr ""
#: ../jsp/WEB-INF/classes/net/i2p/i2ptunnel/jsp/index_jsp.java:219
#: ../jsp/WEB-INF/classes/net/i2p/i2ptunnel/jsp/index_jsp.java:353
#: ../jsp/WEB-INF/classes/net/i2p/i2ptunnel/jsp/index_jsp.java:222
#: ../jsp/WEB-INF/classes/net/i2p/i2ptunnel/jsp/index_jsp.java:356
msgid "Start"
msgstr ""
#: ../jsp/WEB-INF/classes/net/i2p/i2ptunnel/jsp/index_jsp.java:234
#: ../jsp/WEB-INF/classes/net/i2p/i2ptunnel/jsp/index_jsp.java:237
msgid "New server tunnel"
msgstr ""
#: ../jsp/WEB-INF/classes/net/i2p/i2ptunnel/jsp/index_jsp.java:236
#: ../jsp/WEB-INF/classes/net/i2p/i2ptunnel/jsp/index_jsp.java:396
#: ../jsp/WEB-INF/classes/net/i2p/i2ptunnel/jsp/index_jsp.java:239
#: ../jsp/WEB-INF/classes/net/i2p/i2ptunnel/jsp/index_jsp.java:399
msgid "Standard"
msgstr ""
#: ../jsp/WEB-INF/classes/net/i2p/i2ptunnel/jsp/index_jsp.java:238
#: ../jsp/WEB-INF/classes/net/i2p/i2ptunnel/jsp/index_jsp.java:398
#: ../jsp/WEB-INF/classes/net/i2p/i2ptunnel/jsp/index_jsp.java:241
#: ../jsp/WEB-INF/classes/net/i2p/i2ptunnel/jsp/index_jsp.java:401
msgid "Create"
msgstr ""
#: ../jsp/WEB-INF/classes/net/i2p/i2ptunnel/jsp/index_jsp.java:240
#: ../jsp/WEB-INF/classes/net/i2p/i2ptunnel/jsp/index_jsp.java:243
msgid "I2P Client Tunnels"
msgstr ""
#: ../jsp/WEB-INF/classes/net/i2p/i2ptunnel/jsp/index_jsp.java:248
#: ../jsp/WEB-INF/classes/net/i2p/i2ptunnel/jsp/index_jsp.java:283
#: ../jsp/WEB-INF/classes/net/i2p/i2ptunnel/jsp/index_jsp.java:251
#: ../jsp/WEB-INF/classes/net/i2p/i2ptunnel/jsp/index_jsp.java:286
msgid "Interface"
msgstr ""
#: ../jsp/WEB-INF/classes/net/i2p/i2ptunnel/jsp/index_jsp.java:318
#: ../jsp/WEB-INF/classes/net/i2p/i2ptunnel/jsp/index_jsp.java:321
msgid "Standby"
msgstr ""
#: ../jsp/WEB-INF/classes/net/i2p/i2ptunnel/jsp/index_jsp.java:363
#: ../jsp/WEB-INF/classes/net/i2p/i2ptunnel/jsp/index_jsp.java:366
msgid "Outproxy"
msgstr ""
#: ../jsp/WEB-INF/classes/net/i2p/i2ptunnel/jsp/index_jsp.java:367
msgid "Destination"
msgstr ""
#: ../jsp/WEB-INF/classes/net/i2p/i2ptunnel/jsp/index_jsp.java:381
#: ../jsp/WEB-INF/classes/net/i2p/i2ptunnel/jsp/index_jsp.java:384
msgid "none"
msgstr ""
#: ../jsp/WEB-INF/classes/net/i2p/i2ptunnel/jsp/index_jsp.java:394
#: ../jsp/WEB-INF/classes/net/i2p/i2ptunnel/jsp/index_jsp.java:397
msgid "New client tunnel"
msgstr ""

View File

@@ -7,9 +7,9 @@
msgid ""
msgstr ""
"Project-Id-Version: I2P\n"
"Report-Msgid-Bugs-To: https://trac.i2p2.de/\n"
"POT-Creation-Date: 2011-03-03 18:29+0000\n"
"PO-Revision-Date: 2011-04-18 21:39+0100\n"
"Report-Msgid-Bugs-To: \n"
"POT-Creation-Date: 2011-06-02 16:13+0000\n"
"PO-Revision-Date: 2011-06-24 09:44+0100\n"
"Last-Translator: mixxy <m1xxy@mail.i2p>\n"
"Language-Team: Spanish (Castilian) <None>\n"
"MIME-Version: 1.0\n"
@@ -18,15 +18,87 @@ msgstr ""
"Language: es\n"
"Plural-Forms: nplurals=2; plural=(n != 1)\n"
#: ../java/src/net/i2p/i2ptunnel/I2PTunnelHTTPClient.java:474
#: ../java/src/net/i2p/i2ptunnel/I2PTunnelHTTPClient.java:514
#, java-format
msgid "To visit the destination in your host database, click <a href=\"{0}\">here</a>. To visit the conflicting addresshelper destination, click <a href=\"{1}\">here</a>."
msgstr "Para visitar el destino en la base de datos de hosts, haga clic <a href=\"{0}\">aquí</a> . Para visitar el destino del ayudante de direcciones en conflicto, haga clic <a href=\"{1}\">aquí</a> ."
#: ../java/src/net/i2p/i2ptunnel/I2PTunnelHTTPClient.java:931
#: ../java/src/net/i2p/i2ptunnel/I2PTunnelHTTPClient.java:875
#: ../jsp/WEB-INF/classes/net/i2p/i2ptunnel/jsp/editClient_jsp.java:388
#: ../jsp/WEB-INF/classes/net/i2p/i2ptunnel/jsp/editServer_jsp.java:142
#: ../jsp/WEB-INF/classes/net/i2p/i2ptunnel/jsp/editServer_jsp.java:401
msgid "Host"
msgstr "Host"
#: ../java/src/net/i2p/i2ptunnel/I2PTunnelHTTPClient.java:876
#: ../jsp/WEB-INF/classes/net/i2p/i2ptunnel/jsp/index_jsp.java:370
msgid "Destination"
msgstr "Destino"
#: ../java/src/net/i2p/i2ptunnel/I2PTunnelHTTPClient.java:881
#, java-format
msgid "Continue to {0} without saving"
msgstr "Acceder a {0} sin guardar"
#: ../java/src/net/i2p/i2ptunnel/I2PTunnelHTTPClient.java:886
#, java-format
msgid "Save {0} to router address book and continue to eepsite"
msgstr "Guardar {0} a la libreta de direcciones del router y acceder al sitio i2p."
#. only blockfile supports multiple books
#: ../java/src/net/i2p/i2ptunnel/I2PTunnelHTTPClient.java:889
#, java-format
msgid "Save {0} to master address book and continue to eepsite"
msgstr "Guardar {0} a la libreta de direcciones principal y acceder al sitio i2p."
#: ../java/src/net/i2p/i2ptunnel/I2PTunnelHTTPClient.java:890
#, java-format
msgid "Save {0} to private address book and continue to eepsite"
msgstr "Guardar {0} a la libreta de direcciones privada y acceder al sitio i2p."
#: ../java/src/net/i2p/i2ptunnel/I2PTunnelHTTPClient.java:1046
msgid "Click a link below to look for an address helper by using a \"jump\" service:"
msgstr "Haga clic en un enlace de debajo para buscar un ayudante de direcciones mediante el uso de un servicio de \"salto\":"
#: ../java/src/net/i2p/i2ptunnel/I2PTunnelHTTPClient.java:1262
msgid "Added via address helper"
msgstr "Agregado por la ayuda a las direcciones."
#: ../java/src/net/i2p/i2ptunnel/I2PTunnelHTTPClient.java:1286
#, java-format
msgid "Redirecting to {0}"
msgstr "Accediendo a {0}"
#: ../java/src/net/i2p/i2ptunnel/I2PTunnelHTTPClient.java:1292
msgid "Router Console"
msgstr "Consola del Router"
#: ../java/src/net/i2p/i2ptunnel/I2PTunnelHTTPClient.java:1293
msgid "Addressbook"
msgstr "Libreta de direcciones"
#: ../java/src/net/i2p/i2ptunnel/I2PTunnelHTTPClient.java:1293
msgid "Configuration"
msgstr "Ajustes"
#: ../java/src/net/i2p/i2ptunnel/I2PTunnelHTTPClient.java:1293
msgid "Help"
msgstr "Ayuda"
#: ../java/src/net/i2p/i2ptunnel/I2PTunnelHTTPClient.java:1298
#, java-format
msgid "Saved {0} to the {1} addressbook, redirecting now."
msgstr "{0} ha sido guardada en la {1}, accediendo ahora."
#: ../java/src/net/i2p/i2ptunnel/I2PTunnelHTTPClient.java:1299
#, java-format
msgid "Failed to save {0} to the {1} addressbook, redirecting now."
msgstr "No se ha podido guardar {0} en la {1}, accediendo ahora."
#: ../java/src/net/i2p/i2ptunnel/I2PTunnelHTTPClient.java:1301
msgid "Click here if you are not redirected automatically."
msgstr "Haz click aquí si no estás siendo enviado automáticamente."
#: ../java/src/net/i2p/i2ptunnel/web/EditBean.java:326
#: ../java/src/net/i2p/i2ptunnel/web/EditBean.java:336
msgid "internal"
@@ -111,12 +183,12 @@ msgid "HTTP bidir"
msgstr "HTTP bidir"
#: ../java/src/net/i2p/i2ptunnel/web/IndexBean.java:517
#: ../jsp/WEB-INF/classes/net/i2p/i2ptunnel/jsp/index_jsp.java:290
#: ../jsp/WEB-INF/classes/net/i2p/i2ptunnel/jsp/index_jsp.java:293
msgid "Host not set"
msgstr "Host no establecido"
#: ../java/src/net/i2p/i2ptunnel/web/IndexBean.java:521
#: ../jsp/WEB-INF/classes/net/i2p/i2ptunnel/jsp/index_jsp.java:272
#: ../jsp/WEB-INF/classes/net/i2p/i2ptunnel/jsp/index_jsp.java:275
msgid "Port not set"
msgstr "Puerto no establecido"
@@ -134,24 +206,24 @@ msgstr "Nueva configuración de proxy"
#: ../jsp/WEB-INF/classes/net/i2p/i2ptunnel/jsp/editClient_jsp.java:112
#: ../jsp/WEB-INF/classes/net/i2p/i2ptunnel/jsp/editServer_jsp.java:112
#: ../jsp/WEB-INF/classes/net/i2p/i2ptunnel/jsp/index_jsp.java:107
#: ../jsp/WEB-INF/classes/net/i2p/i2ptunnel/jsp/index_jsp.java:121
#: ../jsp/WEB-INF/classes/net/i2p/i2ptunnel/jsp/index_jsp.java:242
#: ../jsp/WEB-INF/classes/net/i2p/i2ptunnel/jsp/index_jsp.java:257
#: ../jsp/WEB-INF/classes/net/i2p/i2ptunnel/jsp/index_jsp.java:110
#: ../jsp/WEB-INF/classes/net/i2p/i2ptunnel/jsp/index_jsp.java:124
#: ../jsp/WEB-INF/classes/net/i2p/i2ptunnel/jsp/index_jsp.java:245
#: ../jsp/WEB-INF/classes/net/i2p/i2ptunnel/jsp/index_jsp.java:260
msgid "Name"
msgstr "Nombre"
#: ../jsp/WEB-INF/classes/net/i2p/i2ptunnel/jsp/editClient_jsp.java:116
#: ../jsp/WEB-INF/classes/net/i2p/i2ptunnel/jsp/editServer_jsp.java:116
#: ../jsp/WEB-INF/classes/net/i2p/i2ptunnel/jsp/index_jsp.java:246
#: ../jsp/WEB-INF/classes/net/i2p/i2ptunnel/jsp/index_jsp.java:279
#: ../jsp/WEB-INF/classes/net/i2p/i2ptunnel/jsp/index_jsp.java:249
#: ../jsp/WEB-INF/classes/net/i2p/i2ptunnel/jsp/index_jsp.java:282
msgid "Type"
msgstr "Tipo"
#: ../jsp/WEB-INF/classes/net/i2p/i2ptunnel/jsp/editClient_jsp.java:120
#: ../jsp/WEB-INF/classes/net/i2p/i2ptunnel/jsp/editServer_jsp.java:120
#: ../jsp/WEB-INF/classes/net/i2p/i2ptunnel/jsp/index_jsp.java:226
#: ../jsp/WEB-INF/classes/net/i2p/i2ptunnel/jsp/index_jsp.java:386
#: ../jsp/WEB-INF/classes/net/i2p/i2ptunnel/jsp/index_jsp.java:229
#: ../jsp/WEB-INF/classes/net/i2p/i2ptunnel/jsp/index_jsp.java:389
msgid "Description"
msgstr "Descripción"
@@ -376,17 +448,11 @@ msgstr "para las conexiones de solicitud/respuesta"
msgid "Router I2CP Address"
msgstr "Dirección I2CP del router"
#: ../jsp/WEB-INF/classes/net/i2p/i2ptunnel/jsp/editClient_jsp.java:388
#: ../jsp/WEB-INF/classes/net/i2p/i2ptunnel/jsp/editServer_jsp.java:142
#: ../jsp/WEB-INF/classes/net/i2p/i2ptunnel/jsp/editServer_jsp.java:401
msgid "Host"
msgstr "Host"
#: ../jsp/WEB-INF/classes/net/i2p/i2ptunnel/jsp/editClient_jsp.java:396
#: ../jsp/WEB-INF/classes/net/i2p/i2ptunnel/jsp/editServer_jsp.java:148
#: ../jsp/WEB-INF/classes/net/i2p/i2ptunnel/jsp/editServer_jsp.java:409
#: ../jsp/WEB-INF/classes/net/i2p/i2ptunnel/jsp/index_jsp.java:244
#: ../jsp/WEB-INF/classes/net/i2p/i2ptunnel/jsp/index_jsp.java:266
#: ../jsp/WEB-INF/classes/net/i2p/i2ptunnel/jsp/index_jsp.java:247
#: ../jsp/WEB-INF/classes/net/i2p/i2ptunnel/jsp/index_jsp.java:269
msgid "Port"
msgstr "Puerto"
@@ -632,132 +698,128 @@ msgstr "Modificar Certificado"
msgid "Modify"
msgstr "Modificar"
#: ../jsp/WEB-INF/classes/net/i2p/i2ptunnel/jsp/index_jsp.java:71
#: ../jsp/WEB-INF/classes/net/i2p/i2ptunnel/jsp/index_jsp.java:74
msgid "I2P Tunnel Manager - List"
msgstr "Gestor de túneles I2P - Lista"
#: ../jsp/WEB-INF/classes/net/i2p/i2ptunnel/jsp/index_jsp.java:83
#: ../jsp/WEB-INF/classes/net/i2p/i2ptunnel/jsp/index_jsp.java:86
msgid "Status Messages"
msgstr "Mensajes de estado"
#: ../jsp/WEB-INF/classes/net/i2p/i2ptunnel/jsp/index_jsp.java:87
#: ../jsp/WEB-INF/classes/net/i2p/i2ptunnel/jsp/index_jsp.java:90
msgid "Refresh"
msgstr "Actualizar"
#: ../jsp/WEB-INF/classes/net/i2p/i2ptunnel/jsp/index_jsp.java:91
#: ../jsp/WEB-INF/classes/net/i2p/i2ptunnel/jsp/index_jsp.java:94
msgid "Stop All"
msgstr "Detener todos"
#: ../jsp/WEB-INF/classes/net/i2p/i2ptunnel/jsp/index_jsp.java:95
#: ../jsp/WEB-INF/classes/net/i2p/i2ptunnel/jsp/index_jsp.java:98
msgid "Start All"
msgstr "Iniciar todos"
#: ../jsp/WEB-INF/classes/net/i2p/i2ptunnel/jsp/index_jsp.java:99
#: ../jsp/WEB-INF/classes/net/i2p/i2ptunnel/jsp/index_jsp.java:102
msgid "Restart All"
msgstr "Reiniciar todos"
#: ../jsp/WEB-INF/classes/net/i2p/i2ptunnel/jsp/index_jsp.java:103
#: ../jsp/WEB-INF/classes/net/i2p/i2ptunnel/jsp/index_jsp.java:106
msgid "Reload Config"
msgstr "Actualizar configuración"
#: ../jsp/WEB-INF/classes/net/i2p/i2ptunnel/jsp/index_jsp.java:105
#: ../jsp/WEB-INF/classes/net/i2p/i2ptunnel/jsp/index_jsp.java:108
msgid "I2P Server Tunnels"
msgstr "Túneles de servidor I2P"
#: ../jsp/WEB-INF/classes/net/i2p/i2ptunnel/jsp/index_jsp.java:109
#: ../jsp/WEB-INF/classes/net/i2p/i2ptunnel/jsp/index_jsp.java:130
#: ../jsp/WEB-INF/classes/net/i2p/i2ptunnel/jsp/index_jsp.java:112
#: ../jsp/WEB-INF/classes/net/i2p/i2ptunnel/jsp/index_jsp.java:133
msgid "Points at"
msgstr "Apunta a"
#: ../jsp/WEB-INF/classes/net/i2p/i2ptunnel/jsp/index_jsp.java:111
#: ../jsp/WEB-INF/classes/net/i2p/i2ptunnel/jsp/index_jsp.java:153
#: ../jsp/WEB-INF/classes/net/i2p/i2ptunnel/jsp/index_jsp.java:157
#: ../jsp/WEB-INF/classes/net/i2p/i2ptunnel/jsp/index_jsp.java:114
#: ../jsp/WEB-INF/classes/net/i2p/i2ptunnel/jsp/index_jsp.java:156
#: ../jsp/WEB-INF/classes/net/i2p/i2ptunnel/jsp/index_jsp.java:160
msgid "Preview"
msgstr "Preview"
#: ../jsp/WEB-INF/classes/net/i2p/i2ptunnel/jsp/index_jsp.java:113
#: ../jsp/WEB-INF/classes/net/i2p/i2ptunnel/jsp/index_jsp.java:177
#: ../jsp/WEB-INF/classes/net/i2p/i2ptunnel/jsp/index_jsp.java:250
#: ../jsp/WEB-INF/classes/net/i2p/i2ptunnel/jsp/index_jsp.java:297
#: ../jsp/WEB-INF/classes/net/i2p/i2ptunnel/jsp/index_jsp.java:116
#: ../jsp/WEB-INF/classes/net/i2p/i2ptunnel/jsp/index_jsp.java:180
#: ../jsp/WEB-INF/classes/net/i2p/i2ptunnel/jsp/index_jsp.java:253
#: ../jsp/WEB-INF/classes/net/i2p/i2ptunnel/jsp/index_jsp.java:300
msgid "Status"
msgstr "Estado"
#: ../jsp/WEB-INF/classes/net/i2p/i2ptunnel/jsp/index_jsp.java:163
#: ../jsp/WEB-INF/classes/net/i2p/i2ptunnel/jsp/index_jsp.java:166
msgid "Base32 Address"
msgstr "Dirección Base32"
#: ../jsp/WEB-INF/classes/net/i2p/i2ptunnel/jsp/index_jsp.java:171
#: ../jsp/WEB-INF/classes/net/i2p/i2ptunnel/jsp/index_jsp.java:174
msgid "No Preview"
msgstr "Sin vista previa"
#: ../jsp/WEB-INF/classes/net/i2p/i2ptunnel/jsp/index_jsp.java:184
#: ../jsp/WEB-INF/classes/net/i2p/i2ptunnel/jsp/index_jsp.java:304
#: ../jsp/WEB-INF/classes/net/i2p/i2ptunnel/jsp/index_jsp.java:187
#: ../jsp/WEB-INF/classes/net/i2p/i2ptunnel/jsp/index_jsp.java:307
msgid "Starting..."
msgstr "Iniciando..."
#: ../jsp/WEB-INF/classes/net/i2p/i2ptunnel/jsp/index_jsp.java:191
#: ../jsp/WEB-INF/classes/net/i2p/i2ptunnel/jsp/index_jsp.java:205
#: ../jsp/WEB-INF/classes/net/i2p/i2ptunnel/jsp/index_jsp.java:311
#: ../jsp/WEB-INF/classes/net/i2p/i2ptunnel/jsp/index_jsp.java:325
#: ../jsp/WEB-INF/classes/net/i2p/i2ptunnel/jsp/index_jsp.java:339
#: ../jsp/WEB-INF/classes/net/i2p/i2ptunnel/jsp/index_jsp.java:194
#: ../jsp/WEB-INF/classes/net/i2p/i2ptunnel/jsp/index_jsp.java:208
#: ../jsp/WEB-INF/classes/net/i2p/i2ptunnel/jsp/index_jsp.java:314
#: ../jsp/WEB-INF/classes/net/i2p/i2ptunnel/jsp/index_jsp.java:328
#: ../jsp/WEB-INF/classes/net/i2p/i2ptunnel/jsp/index_jsp.java:342
msgid "Stop"
msgstr "Detener"
#: ../jsp/WEB-INF/classes/net/i2p/i2ptunnel/jsp/index_jsp.java:198
#: ../jsp/WEB-INF/classes/net/i2p/i2ptunnel/jsp/index_jsp.java:332
#: ../jsp/WEB-INF/classes/net/i2p/i2ptunnel/jsp/index_jsp.java:201
#: ../jsp/WEB-INF/classes/net/i2p/i2ptunnel/jsp/index_jsp.java:335
msgid "Running"
msgstr "Ejecutándose"
#: ../jsp/WEB-INF/classes/net/i2p/i2ptunnel/jsp/index_jsp.java:212
#: ../jsp/WEB-INF/classes/net/i2p/i2ptunnel/jsp/index_jsp.java:346
#: ../jsp/WEB-INF/classes/net/i2p/i2ptunnel/jsp/index_jsp.java:215
#: ../jsp/WEB-INF/classes/net/i2p/i2ptunnel/jsp/index_jsp.java:349
msgid "Stopped"
msgstr "Detenido"
#: ../jsp/WEB-INF/classes/net/i2p/i2ptunnel/jsp/index_jsp.java:219
#: ../jsp/WEB-INF/classes/net/i2p/i2ptunnel/jsp/index_jsp.java:353
#: ../jsp/WEB-INF/classes/net/i2p/i2ptunnel/jsp/index_jsp.java:222
#: ../jsp/WEB-INF/classes/net/i2p/i2ptunnel/jsp/index_jsp.java:356
msgid "Start"
msgstr "Iniciar"
#: ../jsp/WEB-INF/classes/net/i2p/i2ptunnel/jsp/index_jsp.java:234
#: ../jsp/WEB-INF/classes/net/i2p/i2ptunnel/jsp/index_jsp.java:237
msgid "New server tunnel"
msgstr "Nuevo servidor de túnel"
#: ../jsp/WEB-INF/classes/net/i2p/i2ptunnel/jsp/index_jsp.java:236
#: ../jsp/WEB-INF/classes/net/i2p/i2ptunnel/jsp/index_jsp.java:396
#: ../jsp/WEB-INF/classes/net/i2p/i2ptunnel/jsp/index_jsp.java:239
#: ../jsp/WEB-INF/classes/net/i2p/i2ptunnel/jsp/index_jsp.java:399
msgid "Standard"
msgstr "Estándar"
#: ../jsp/WEB-INF/classes/net/i2p/i2ptunnel/jsp/index_jsp.java:238
#: ../jsp/WEB-INF/classes/net/i2p/i2ptunnel/jsp/index_jsp.java:398
#: ../jsp/WEB-INF/classes/net/i2p/i2ptunnel/jsp/index_jsp.java:241
#: ../jsp/WEB-INF/classes/net/i2p/i2ptunnel/jsp/index_jsp.java:401
msgid "Create"
msgstr "Crear"
#: ../jsp/WEB-INF/classes/net/i2p/i2ptunnel/jsp/index_jsp.java:240
#: ../jsp/WEB-INF/classes/net/i2p/i2ptunnel/jsp/index_jsp.java:243
msgid "I2P Client Tunnels"
msgstr "Túneles de cliente I2P"
#: ../jsp/WEB-INF/classes/net/i2p/i2ptunnel/jsp/index_jsp.java:248
#: ../jsp/WEB-INF/classes/net/i2p/i2ptunnel/jsp/index_jsp.java:283
#: ../jsp/WEB-INF/classes/net/i2p/i2ptunnel/jsp/index_jsp.java:251
#: ../jsp/WEB-INF/classes/net/i2p/i2ptunnel/jsp/index_jsp.java:286
msgid "Interface"
msgstr "Interfaz"
#: ../jsp/WEB-INF/classes/net/i2p/i2ptunnel/jsp/index_jsp.java:318
#: ../jsp/WEB-INF/classes/net/i2p/i2ptunnel/jsp/index_jsp.java:321
msgid "Standby"
msgstr "En espera"
#: ../jsp/WEB-INF/classes/net/i2p/i2ptunnel/jsp/index_jsp.java:363
#: ../jsp/WEB-INF/classes/net/i2p/i2ptunnel/jsp/index_jsp.java:366
msgid "Outproxy"
msgstr "Outproxy"
#: ../jsp/WEB-INF/classes/net/i2p/i2ptunnel/jsp/index_jsp.java:367
msgid "Destination"
msgstr "Destino"
#: ../jsp/WEB-INF/classes/net/i2p/i2ptunnel/jsp/index_jsp.java:381
#: ../jsp/WEB-INF/classes/net/i2p/i2ptunnel/jsp/index_jsp.java:384
msgid "none"
msgstr "ninguno"
#: ../jsp/WEB-INF/classes/net/i2p/i2ptunnel/jsp/index_jsp.java:394
#: ../jsp/WEB-INF/classes/net/i2p/i2ptunnel/jsp/index_jsp.java:397
msgid "New client tunnel"
msgstr "Nuevo túnel de cliente"

View File

@@ -8,8 +8,8 @@ msgid ""
msgstr ""
"Project-Id-Version: I2P i2ptunnel\n"
"Report-Msgid-Bugs-To: \n"
"POT-Creation-Date: 2011-02-14 18:14+0000\n"
"PO-Revision-Date: 2011-02-14 23:24+0500\n"
"POT-Creation-Date: 2011-06-18 14:08+0000\n"
"PO-Revision-Date: 2011-06-20 22:55+0500\n"
"Last-Translator: Hidden Z <hiddenz@mail.i2p>\n"
"Language-Team: foo <foo@bar>\n"
"Language: \n"
@@ -18,15 +18,87 @@ msgstr ""
"Content-Transfer-Encoding: 8bit\n"
"X-Poedit-Language: Russian\n"
#: ../java/src/net/i2p/i2ptunnel/I2PTunnelHTTPClient.java:474
#: ../java/src/net/i2p/i2ptunnel/I2PTunnelHTTPClient.java:514
#, java-format
msgid "To visit the destination in your host database, click <a href=\"{0}\">here</a>. To visit the conflicting addresshelper destination, click <a href=\"{1}\">here</a>."
msgstr "Для перехода по ссылке из локальной адресной книги, нажмите <a href=\"{0}\">здесь</a>. Для перехода по новой addresshelper-ссылке, нажмите <a href=\"{1}\">здесь</a>."
#: ../java/src/net/i2p/i2ptunnel/I2PTunnelHTTPClient.java:931
#: ../java/src/net/i2p/i2ptunnel/I2PTunnelHTTPClient.java:875
#: ../jsp/WEB-INF/classes/net/i2p/i2ptunnel/jsp/editClient_jsp.java:388
#: ../jsp/WEB-INF/classes/net/i2p/i2ptunnel/jsp/editServer_jsp.java:142
#: ../jsp/WEB-INF/classes/net/i2p/i2ptunnel/jsp/editServer_jsp.java:401
msgid "Host"
msgstr "Адрес"
#: ../java/src/net/i2p/i2ptunnel/I2PTunnelHTTPClient.java:876
#: ../jsp/WEB-INF/classes/net/i2p/i2ptunnel/jsp/index_jsp.java:370
msgid "Destination"
msgstr "Адрес назначения"
#: ../java/src/net/i2p/i2ptunnel/I2PTunnelHTTPClient.java:881
#, java-format
msgid "Continue to {0} without saving"
msgstr "Продолжить переход к {0} без сохранения"
#: ../java/src/net/i2p/i2ptunnel/I2PTunnelHTTPClient.java:886
#, java-format
msgid "Save {0} to router address book and continue to eepsite"
msgstr "Сохранить {0} в адресную книгу роутера (router address book) и продолжить переход к eep-сайту"
#. only blockfile supports multiple books
#: ../java/src/net/i2p/i2ptunnel/I2PTunnelHTTPClient.java:889
#, java-format
msgid "Save {0} to master address book and continue to eepsite"
msgstr "Сохранить {0} в основную (master) адресную книгу и продолжить переход к eep-сайту"
#: ../java/src/net/i2p/i2ptunnel/I2PTunnelHTTPClient.java:890
#, java-format
msgid "Save {0} to private address book and continue to eepsite"
msgstr "Сохранить {0} в приватную адресную книгу и продолжить переход к eep-сайту"
#: ../java/src/net/i2p/i2ptunnel/I2PTunnelHTTPClient.java:1046
msgid "Click a link below to look for an address helper by using a \"jump\" service:"
msgstr "Jump-сервисы, которые, возможно, знают нужную Вам addresshelper-ссылку:"
#: ../java/src/net/i2p/i2ptunnel/I2PTunnelHTTPClient.java:1262
msgid "Added via address helper"
msgstr "Добавлен через address helper"
#: ../java/src/net/i2p/i2ptunnel/I2PTunnelHTTPClient.java:1286
#, java-format
msgid "Redirecting to {0}"
msgstr "Перенаправляем к {0}"
#: ../java/src/net/i2p/i2ptunnel/I2PTunnelHTTPClient.java:1292
msgid "Router Console"
msgstr "Консоль маршрутизатора I2P"
#: ../java/src/net/i2p/i2ptunnel/I2PTunnelHTTPClient.java:1293
msgid "Addressbook"
msgstr "Адресная книга"
#: ../java/src/net/i2p/i2ptunnel/I2PTunnelHTTPClient.java:1293
msgid "Configuration"
msgstr "Настройки"
#: ../java/src/net/i2p/i2ptunnel/I2PTunnelHTTPClient.java:1293
msgid "Help"
msgstr "Помощь"
#: ../java/src/net/i2p/i2ptunnel/I2PTunnelHTTPClient.java:1298
#, java-format
msgid "Saved {0} to the {1} addressbook, redirecting now."
msgstr "{0} сохранён в {1}, перенаправляем."
#: ../java/src/net/i2p/i2ptunnel/I2PTunnelHTTPClient.java:1299
#, java-format
msgid "Failed to save {0} to the {1} addressbook, redirecting now."
msgstr "Не удалось сохранить {0} в {1} адресную книгу, перенаправляем."
#: ../java/src/net/i2p/i2ptunnel/I2PTunnelHTTPClient.java:1301
msgid "Click here if you are not redirected automatically."
msgstr "Нажмите сюда если автоматическое перенаправление не сработало"
#: ../java/src/net/i2p/i2ptunnel/web/EditBean.java:326
#: ../java/src/net/i2p/i2ptunnel/web/EditBean.java:336
msgid "internal"
@@ -111,12 +183,12 @@ msgid "HTTP bidir"
msgstr "HTTP bidir (экспериментальный двунаправленный режим, инструкцию спрашивайте у sponge)"
#: ../java/src/net/i2p/i2ptunnel/web/IndexBean.java:517
#: ../jsp/WEB-INF/classes/net/i2p/i2ptunnel/jsp/index_jsp.java:290
#: ../jsp/WEB-INF/classes/net/i2p/i2ptunnel/jsp/index_jsp.java:293
msgid "Host not set"
msgstr "Хост не задан"
#: ../java/src/net/i2p/i2ptunnel/web/IndexBean.java:521
#: ../jsp/WEB-INF/classes/net/i2p/i2ptunnel/jsp/index_jsp.java:272
#: ../jsp/WEB-INF/classes/net/i2p/i2ptunnel/jsp/index_jsp.java:275
msgid "Port not set"
msgstr "Порт не задан"
@@ -134,24 +206,24 @@ msgstr "Настройки нового клиентского туннеля"
#: ../jsp/WEB-INF/classes/net/i2p/i2ptunnel/jsp/editClient_jsp.java:112
#: ../jsp/WEB-INF/classes/net/i2p/i2ptunnel/jsp/editServer_jsp.java:112
#: ../jsp/WEB-INF/classes/net/i2p/i2ptunnel/jsp/index_jsp.java:107
#: ../jsp/WEB-INF/classes/net/i2p/i2ptunnel/jsp/index_jsp.java:121
#: ../jsp/WEB-INF/classes/net/i2p/i2ptunnel/jsp/index_jsp.java:242
#: ../jsp/WEB-INF/classes/net/i2p/i2ptunnel/jsp/index_jsp.java:257
#: ../jsp/WEB-INF/classes/net/i2p/i2ptunnel/jsp/index_jsp.java:110
#: ../jsp/WEB-INF/classes/net/i2p/i2ptunnel/jsp/index_jsp.java:124
#: ../jsp/WEB-INF/classes/net/i2p/i2ptunnel/jsp/index_jsp.java:245
#: ../jsp/WEB-INF/classes/net/i2p/i2ptunnel/jsp/index_jsp.java:260
msgid "Name"
msgstr "Название"
#: ../jsp/WEB-INF/classes/net/i2p/i2ptunnel/jsp/editClient_jsp.java:116
#: ../jsp/WEB-INF/classes/net/i2p/i2ptunnel/jsp/editServer_jsp.java:116
#: ../jsp/WEB-INF/classes/net/i2p/i2ptunnel/jsp/index_jsp.java:246
#: ../jsp/WEB-INF/classes/net/i2p/i2ptunnel/jsp/index_jsp.java:279
#: ../jsp/WEB-INF/classes/net/i2p/i2ptunnel/jsp/index_jsp.java:249
#: ../jsp/WEB-INF/classes/net/i2p/i2ptunnel/jsp/index_jsp.java:282
msgid "Type"
msgstr "Тип"
#: ../jsp/WEB-INF/classes/net/i2p/i2ptunnel/jsp/editClient_jsp.java:120
#: ../jsp/WEB-INF/classes/net/i2p/i2ptunnel/jsp/editServer_jsp.java:120
#: ../jsp/WEB-INF/classes/net/i2p/i2ptunnel/jsp/index_jsp.java:226
#: ../jsp/WEB-INF/classes/net/i2p/i2ptunnel/jsp/index_jsp.java:386
#: ../jsp/WEB-INF/classes/net/i2p/i2ptunnel/jsp/index_jsp.java:229
#: ../jsp/WEB-INF/classes/net/i2p/i2ptunnel/jsp/index_jsp.java:389
msgid "Description"
msgstr "Описание"
@@ -376,17 +448,11 @@ msgstr "оптимизация для соединений, начинающих
msgid "Router I2CP Address"
msgstr "I2CP Адрес Роутера"
#: ../jsp/WEB-INF/classes/net/i2p/i2ptunnel/jsp/editClient_jsp.java:388
#: ../jsp/WEB-INF/classes/net/i2p/i2ptunnel/jsp/editServer_jsp.java:142
#: ../jsp/WEB-INF/classes/net/i2p/i2ptunnel/jsp/editServer_jsp.java:401
msgid "Host"
msgstr "Адрес"
#: ../jsp/WEB-INF/classes/net/i2p/i2ptunnel/jsp/editClient_jsp.java:396
#: ../jsp/WEB-INF/classes/net/i2p/i2ptunnel/jsp/editServer_jsp.java:148
#: ../jsp/WEB-INF/classes/net/i2p/i2ptunnel/jsp/editServer_jsp.java:409
#: ../jsp/WEB-INF/classes/net/i2p/i2ptunnel/jsp/index_jsp.java:244
#: ../jsp/WEB-INF/classes/net/i2p/i2ptunnel/jsp/index_jsp.java:266
#: ../jsp/WEB-INF/classes/net/i2p/i2ptunnel/jsp/index_jsp.java:247
#: ../jsp/WEB-INF/classes/net/i2p/i2ptunnel/jsp/index_jsp.java:269
msgid "Port"
msgstr "Порт"
@@ -632,133 +698,129 @@ msgstr "Изменить сертификат"
msgid "Modify"
msgstr "Изменить"
#: ../jsp/WEB-INF/classes/net/i2p/i2ptunnel/jsp/index_jsp.java:71
#: ../jsp/WEB-INF/classes/net/i2p/i2ptunnel/jsp/index_jsp.java:74
msgid "I2P Tunnel Manager - List"
msgstr "Менеджер Туннелей I2P — Список"
#: ../jsp/WEB-INF/classes/net/i2p/i2ptunnel/jsp/index_jsp.java:83
#: ../jsp/WEB-INF/classes/net/i2p/i2ptunnel/jsp/index_jsp.java:86
msgid "Status Messages"
msgstr "Сообщения о состоянии"
#: ../jsp/WEB-INF/classes/net/i2p/i2ptunnel/jsp/index_jsp.java:87
#: ../jsp/WEB-INF/classes/net/i2p/i2ptunnel/jsp/index_jsp.java:90
msgid "Refresh"
msgstr "Обновить"
#: ../jsp/WEB-INF/classes/net/i2p/i2ptunnel/jsp/index_jsp.java:91
#: ../jsp/WEB-INF/classes/net/i2p/i2ptunnel/jsp/index_jsp.java:94
msgid "Stop All"
msgstr "Остановить все"
#: ../jsp/WEB-INF/classes/net/i2p/i2ptunnel/jsp/index_jsp.java:95
#: ../jsp/WEB-INF/classes/net/i2p/i2ptunnel/jsp/index_jsp.java:98
msgid "Start All"
msgstr "Запустить все"
#: ../jsp/WEB-INF/classes/net/i2p/i2ptunnel/jsp/index_jsp.java:99
#: ../jsp/WEB-INF/classes/net/i2p/i2ptunnel/jsp/index_jsp.java:102
msgid "Restart All"
msgstr "Перезапустить все"
#: ../jsp/WEB-INF/classes/net/i2p/i2ptunnel/jsp/index_jsp.java:103
#: ../jsp/WEB-INF/classes/net/i2p/i2ptunnel/jsp/index_jsp.java:106
msgid "Reload Config"
msgstr "Перезагрузить настройки"
#: ../jsp/WEB-INF/classes/net/i2p/i2ptunnel/jsp/index_jsp.java:105
#: ../jsp/WEB-INF/classes/net/i2p/i2ptunnel/jsp/index_jsp.java:108
msgid "I2P Server Tunnels"
msgstr "Серверные I2P туннели"
#: ../jsp/WEB-INF/classes/net/i2p/i2ptunnel/jsp/index_jsp.java:109
#: ../jsp/WEB-INF/classes/net/i2p/i2ptunnel/jsp/index_jsp.java:130
#: ../jsp/WEB-INF/classes/net/i2p/i2ptunnel/jsp/index_jsp.java:112
#: ../jsp/WEB-INF/classes/net/i2p/i2ptunnel/jsp/index_jsp.java:133
msgid "Points at"
msgstr "Указывает на"
#: ../jsp/WEB-INF/classes/net/i2p/i2ptunnel/jsp/index_jsp.java:111
#: ../jsp/WEB-INF/classes/net/i2p/i2ptunnel/jsp/index_jsp.java:153
#: ../jsp/WEB-INF/classes/net/i2p/i2ptunnel/jsp/index_jsp.java:157
#: ../jsp/WEB-INF/classes/net/i2p/i2ptunnel/jsp/index_jsp.java:114
#: ../jsp/WEB-INF/classes/net/i2p/i2ptunnel/jsp/index_jsp.java:156
#: ../jsp/WEB-INF/classes/net/i2p/i2ptunnel/jsp/index_jsp.java:160
msgid "Preview"
msgstr "Предпросмотр"
#: ../jsp/WEB-INF/classes/net/i2p/i2ptunnel/jsp/index_jsp.java:113
#: ../jsp/WEB-INF/classes/net/i2p/i2ptunnel/jsp/index_jsp.java:177
#: ../jsp/WEB-INF/classes/net/i2p/i2ptunnel/jsp/index_jsp.java:250
#: ../jsp/WEB-INF/classes/net/i2p/i2ptunnel/jsp/index_jsp.java:297
#: ../jsp/WEB-INF/classes/net/i2p/i2ptunnel/jsp/index_jsp.java:116
#: ../jsp/WEB-INF/classes/net/i2p/i2ptunnel/jsp/index_jsp.java:180
#: ../jsp/WEB-INF/classes/net/i2p/i2ptunnel/jsp/index_jsp.java:253
#: ../jsp/WEB-INF/classes/net/i2p/i2ptunnel/jsp/index_jsp.java:300
msgid "Status"
msgstr "Состояние"
#: ../jsp/WEB-INF/classes/net/i2p/i2ptunnel/jsp/index_jsp.java:163
#: ../jsp/WEB-INF/classes/net/i2p/i2ptunnel/jsp/index_jsp.java:166
msgid "Base32 Address"
msgstr "Base32-адрес"
#: ../jsp/WEB-INF/classes/net/i2p/i2ptunnel/jsp/index_jsp.java:171
#: ../jsp/WEB-INF/classes/net/i2p/i2ptunnel/jsp/index_jsp.java:174
msgid "No Preview"
msgstr "Предпросмотр недоступен"
#: ../jsp/WEB-INF/classes/net/i2p/i2ptunnel/jsp/index_jsp.java:184
#: ../jsp/WEB-INF/classes/net/i2p/i2ptunnel/jsp/index_jsp.java:304
#: ../jsp/WEB-INF/classes/net/i2p/i2ptunnel/jsp/index_jsp.java:187
#: ../jsp/WEB-INF/classes/net/i2p/i2ptunnel/jsp/index_jsp.java:307
msgid "Starting..."
msgstr "Запускается..."
#: ../jsp/WEB-INF/classes/net/i2p/i2ptunnel/jsp/index_jsp.java:191
#: ../jsp/WEB-INF/classes/net/i2p/i2ptunnel/jsp/index_jsp.java:205
#: ../jsp/WEB-INF/classes/net/i2p/i2ptunnel/jsp/index_jsp.java:311
#: ../jsp/WEB-INF/classes/net/i2p/i2ptunnel/jsp/index_jsp.java:325
#: ../jsp/WEB-INF/classes/net/i2p/i2ptunnel/jsp/index_jsp.java:339
#: ../jsp/WEB-INF/classes/net/i2p/i2ptunnel/jsp/index_jsp.java:194
#: ../jsp/WEB-INF/classes/net/i2p/i2ptunnel/jsp/index_jsp.java:208
#: ../jsp/WEB-INF/classes/net/i2p/i2ptunnel/jsp/index_jsp.java:314
#: ../jsp/WEB-INF/classes/net/i2p/i2ptunnel/jsp/index_jsp.java:328
#: ../jsp/WEB-INF/classes/net/i2p/i2ptunnel/jsp/index_jsp.java:342
msgid "Stop"
msgstr "Остановить"
#: ../jsp/WEB-INF/classes/net/i2p/i2ptunnel/jsp/index_jsp.java:198
#: ../jsp/WEB-INF/classes/net/i2p/i2ptunnel/jsp/index_jsp.java:332
#: ../jsp/WEB-INF/classes/net/i2p/i2ptunnel/jsp/index_jsp.java:201
#: ../jsp/WEB-INF/classes/net/i2p/i2ptunnel/jsp/index_jsp.java:335
msgid "Running"
msgstr "Запущен"
#: ../jsp/WEB-INF/classes/net/i2p/i2ptunnel/jsp/index_jsp.java:212
#: ../jsp/WEB-INF/classes/net/i2p/i2ptunnel/jsp/index_jsp.java:346
#: ../jsp/WEB-INF/classes/net/i2p/i2ptunnel/jsp/index_jsp.java:215
#: ../jsp/WEB-INF/classes/net/i2p/i2ptunnel/jsp/index_jsp.java:349
msgid "Stopped"
msgstr "Остановлен"
#: ../jsp/WEB-INF/classes/net/i2p/i2ptunnel/jsp/index_jsp.java:219
#: ../jsp/WEB-INF/classes/net/i2p/i2ptunnel/jsp/index_jsp.java:353
#: ../jsp/WEB-INF/classes/net/i2p/i2ptunnel/jsp/index_jsp.java:222
#: ../jsp/WEB-INF/classes/net/i2p/i2ptunnel/jsp/index_jsp.java:356
msgid "Start"
msgstr "Запустить"
#: ../jsp/WEB-INF/classes/net/i2p/i2ptunnel/jsp/index_jsp.java:234
#: ../jsp/WEB-INF/classes/net/i2p/i2ptunnel/jsp/index_jsp.java:237
msgid "New server tunnel"
msgstr "Новый серверный туннель"
#: ../jsp/WEB-INF/classes/net/i2p/i2ptunnel/jsp/index_jsp.java:236
#: ../jsp/WEB-INF/classes/net/i2p/i2ptunnel/jsp/index_jsp.java:396
#: ../jsp/WEB-INF/classes/net/i2p/i2ptunnel/jsp/index_jsp.java:239
#: ../jsp/WEB-INF/classes/net/i2p/i2ptunnel/jsp/index_jsp.java:399
msgid "Standard"
msgstr "Стандартный"
#: ../jsp/WEB-INF/classes/net/i2p/i2ptunnel/jsp/index_jsp.java:238
#: ../jsp/WEB-INF/classes/net/i2p/i2ptunnel/jsp/index_jsp.java:398
#: ../jsp/WEB-INF/classes/net/i2p/i2ptunnel/jsp/index_jsp.java:241
#: ../jsp/WEB-INF/classes/net/i2p/i2ptunnel/jsp/index_jsp.java:401
msgid "Create"
msgstr "Создать"
#: ../jsp/WEB-INF/classes/net/i2p/i2ptunnel/jsp/index_jsp.java:240
#: ../jsp/WEB-INF/classes/net/i2p/i2ptunnel/jsp/index_jsp.java:243
msgid "I2P Client Tunnels"
msgstr "Клиентские I2P туннели"
#: ../jsp/WEB-INF/classes/net/i2p/i2ptunnel/jsp/index_jsp.java:248
#: ../jsp/WEB-INF/classes/net/i2p/i2ptunnel/jsp/index_jsp.java:283
#: ../jsp/WEB-INF/classes/net/i2p/i2ptunnel/jsp/index_jsp.java:251
#: ../jsp/WEB-INF/classes/net/i2p/i2ptunnel/jsp/index_jsp.java:286
msgid "Interface"
msgstr "Сетевой интерфейс"
#: ../jsp/WEB-INF/classes/net/i2p/i2ptunnel/jsp/index_jsp.java:318
#: ../jsp/WEB-INF/classes/net/i2p/i2ptunnel/jsp/index_jsp.java:321
msgid "Standby"
msgstr "Режим ожидания"
# This term intentionally left in English
#: ../jsp/WEB-INF/classes/net/i2p/i2ptunnel/jsp/index_jsp.java:363
#: ../jsp/WEB-INF/classes/net/i2p/i2ptunnel/jsp/index_jsp.java:366
msgid "Outproxy"
msgstr "Outproxy"
#: ../jsp/WEB-INF/classes/net/i2p/i2ptunnel/jsp/index_jsp.java:367
msgid "Destination"
msgstr "Адрес назначения"
#: ../jsp/WEB-INF/classes/net/i2p/i2ptunnel/jsp/index_jsp.java:381
#: ../jsp/WEB-INF/classes/net/i2p/i2ptunnel/jsp/index_jsp.java:384
msgid "none"
msgstr "нет"
#: ../jsp/WEB-INF/classes/net/i2p/i2ptunnel/jsp/index_jsp.java:394
#: ../jsp/WEB-INF/classes/net/i2p/i2ptunnel/jsp/index_jsp.java:397
msgid "New client tunnel"
msgstr "Новый клиентский туннель"

View File

@@ -0,0 +1,806 @@
# I2P
# Copyright (C) 2009 The I2P Project
# This file is distributed under the same license as the i2ptunnel package.
# To contribute translations, see http://www.i2p2.de/newdevelopers
#
msgid ""
msgstr ""
"Project-Id-Version: I2P\n"
"Report-Msgid-Bugs-To: https://trac.i2p2.de/\n"
"POT-Creation-Date: 2011-05-24 06:00+0000\n"
"PO-Revision-Date: 2011-06-03 17:14+0000\n"
"Last-Translator: digitalmannen <digitalmannen@gmail.com>\n"
"Language-Team: Swedish (Sweden) (http://www.transifex.net/projects/p/I2P/team/sv_SE/)\n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
"Language: sv_SE\n"
"Plural-Forms: nplurals=2; plural=(n != 1)\n"
#: ../java/src/net/i2p/i2ptunnel/I2PTunnelHTTPClient.java:474
#, java-format
msgid ""
"To visit the destination in your host database, click <a "
"href=\"{0}\">here</a>. To visit the conflicting addresshelper destination, "
"click <a href=\"{1}\">here</a>."
msgstr ""
"För att besöka målet i din värd databas href=\"{0}\"> klicka <a här </ a>. "
"För att besöka de motstridiga hjälpaddresserna,<a href=\"{1}\"> klicka <a "
"här </ a>."
#: ../java/src/net/i2p/i2ptunnel/I2PTunnelHTTPClient.java:931
msgid ""
"Click a link below to look for an address helper by using a \"jump\" "
"service:"
msgstr ""
"Klicka på en länk nedan för att söka efter en hjälpaddress genom att använda"
" en \"hopp\" tjänst"
#: ../java/src/net/i2p/i2ptunnel/web/EditBean.java:326
#: ../java/src/net/i2p/i2ptunnel/web/EditBean.java:336
msgid "internal"
msgstr "Intern "
#: ../java/src/net/i2p/i2ptunnel/web/IndexBean.java:171
msgid ""
"Invalid form submission, probably because you used the 'back' or 'reload' "
"button on your browser. Please resubmit."
msgstr ""
"Ogiltigt formulärbegäran, beror troligtvis på attt du använde 'tillbaka' "
"eller 'uppdatera' knappen. Försök att skicka igen"
#: ../java/src/net/i2p/i2ptunnel/web/IndexBean.java:218
msgid "Configuration reloaded for all tunnels"
msgstr "Konfigurationen uppdateras för alla tunnlar"
#. and give them something to look at in any case
#: ../java/src/net/i2p/i2ptunnel/web/IndexBean.java:230
msgid "Starting tunnel"
msgstr "Startar tunnel"
#. and give them something to look at in any case
#: ../java/src/net/i2p/i2ptunnel/web/IndexBean.java:243
msgid "Stopping tunnel"
msgstr "Stannar tunnel"
#: ../java/src/net/i2p/i2ptunnel/web/IndexBean.java:311
msgid "Configuration changes saved"
msgstr "Konfigurationsändringar sparas"
#: ../java/src/net/i2p/i2ptunnel/web/IndexBean.java:314
msgid "Failed to save configuration"
msgstr "Det gick inte att spara konfigurationen"
#: ../java/src/net/i2p/i2ptunnel/web/IndexBean.java:398
msgid "New Tunnel"
msgstr "Ny tunnel"
#: ../java/src/net/i2p/i2ptunnel/web/IndexBean.java:418
msgid "Standard client"
msgstr "Standard klient"
#: ../java/src/net/i2p/i2ptunnel/web/IndexBean.java:419
msgid "HTTP client"
msgstr "HTTP-klient"
#: ../java/src/net/i2p/i2ptunnel/web/IndexBean.java:420
msgid "IRC client"
msgstr "IRC-klient"
#: ../java/src/net/i2p/i2ptunnel/web/IndexBean.java:421
msgid "Standard server"
msgstr "Standard server"
#: ../java/src/net/i2p/i2ptunnel/web/IndexBean.java:422
msgid "HTTP server"
msgstr "HTTP server"
#: ../java/src/net/i2p/i2ptunnel/web/IndexBean.java:423
msgid "SOCKS 4/4a/5 proxy"
msgstr "SOCKS 4/4a/5 proxy"
#: ../java/src/net/i2p/i2ptunnel/web/IndexBean.java:424
msgid "SOCKS IRC proxy"
msgstr "SOCKS IRC proxy"
#: ../java/src/net/i2p/i2ptunnel/web/IndexBean.java:425
msgid "CONNECT/SSL/HTTPS proxy"
msgstr "CONNECT/SSL/HTTPS proxy"
#: ../java/src/net/i2p/i2ptunnel/web/IndexBean.java:426
msgid "IRC server"
msgstr "IRC-server"
#: ../java/src/net/i2p/i2ptunnel/web/IndexBean.java:427
msgid "Streamr client"
msgstr "Klient för Streamr "
#: ../java/src/net/i2p/i2ptunnel/web/IndexBean.java:428
msgid "Streamr server"
msgstr "Server för Streamr"
#: ../java/src/net/i2p/i2ptunnel/web/IndexBean.java:429
msgid "HTTP bidir"
msgstr "HTTP bidir"
#: ../java/src/net/i2p/i2ptunnel/web/IndexBean.java:517
#: ../jsp/WEB-INF/classes/net/i2p/i2ptunnel/jsp/index_jsp.java:293
msgid "Host not set"
msgstr "Ingen värd angiven"
#: ../java/src/net/i2p/i2ptunnel/web/IndexBean.java:521
#: ../jsp/WEB-INF/classes/net/i2p/i2ptunnel/jsp/index_jsp.java:275
msgid "Port not set"
msgstr "Ingen port angiven"
#: ../jsp/WEB-INF/classes/net/i2p/i2ptunnel/jsp/editClient_jsp.java:73
msgid "I2P Tunnel Manager - Edit Client Tunnel"
msgstr "I2P Tunnelhanterare - Redigera klienttunnlar"
#: ../jsp/WEB-INF/classes/net/i2p/i2ptunnel/jsp/editClient_jsp.java:93
msgid "Edit proxy settings"
msgstr "Redigera proxyinställningar"
#: ../jsp/WEB-INF/classes/net/i2p/i2ptunnel/jsp/editClient_jsp.java:101
msgid "New proxy settings"
msgstr "Inställningar för ny proxy "
#: ../jsp/WEB-INF/classes/net/i2p/i2ptunnel/jsp/editClient_jsp.java:112
#: ../jsp/WEB-INF/classes/net/i2p/i2ptunnel/jsp/editServer_jsp.java:112
#: ../jsp/WEB-INF/classes/net/i2p/i2ptunnel/jsp/index_jsp.java:110
#: ../jsp/WEB-INF/classes/net/i2p/i2ptunnel/jsp/index_jsp.java:124
#: ../jsp/WEB-INF/classes/net/i2p/i2ptunnel/jsp/index_jsp.java:245
#: ../jsp/WEB-INF/classes/net/i2p/i2ptunnel/jsp/index_jsp.java:260
msgid "Name"
msgstr "Namn"
#: ../jsp/WEB-INF/classes/net/i2p/i2ptunnel/jsp/editClient_jsp.java:116
#: ../jsp/WEB-INF/classes/net/i2p/i2ptunnel/jsp/editServer_jsp.java:116
#: ../jsp/WEB-INF/classes/net/i2p/i2ptunnel/jsp/index_jsp.java:249
#: ../jsp/WEB-INF/classes/net/i2p/i2ptunnel/jsp/index_jsp.java:282
msgid "Type"
msgstr "Typ"
#: ../jsp/WEB-INF/classes/net/i2p/i2ptunnel/jsp/editClient_jsp.java:120
#: ../jsp/WEB-INF/classes/net/i2p/i2ptunnel/jsp/editServer_jsp.java:120
#: ../jsp/WEB-INF/classes/net/i2p/i2ptunnel/jsp/index_jsp.java:229
#: ../jsp/WEB-INF/classes/net/i2p/i2ptunnel/jsp/index_jsp.java:389
msgid "Description"
msgstr "Beskrivning"
#: ../jsp/WEB-INF/classes/net/i2p/i2ptunnel/jsp/editClient_jsp.java:126
#: ../jsp/WEB-INF/classes/net/i2p/i2ptunnel/jsp/editServer_jsp.java:136
msgid "Target"
msgstr "Mål"
#: ../jsp/WEB-INF/classes/net/i2p/i2ptunnel/jsp/editClient_jsp.java:130
#: ../jsp/WEB-INF/classes/net/i2p/i2ptunnel/jsp/editServer_jsp.java:132
#: ../jsp/WEB-INF/classes/net/i2p/i2ptunnel/jsp/editServer_jsp.java:162
msgid "Access Point"
msgstr "Anslutningspunkt"
#: ../jsp/WEB-INF/classes/net/i2p/i2ptunnel/jsp/editClient_jsp.java:137
#: ../jsp/WEB-INF/classes/net/i2p/i2ptunnel/jsp/editClient_jsp.java:150
#: ../jsp/WEB-INF/classes/net/i2p/i2ptunnel/jsp/editClient_jsp.java:192
#: ../jsp/WEB-INF/classes/net/i2p/i2ptunnel/jsp/editServer_jsp.java:153
#: ../jsp/WEB-INF/classes/net/i2p/i2ptunnel/jsp/editServer_jsp.java:167
#: ../jsp/WEB-INF/classes/net/i2p/i2ptunnel/jsp/editServer_jsp.java:213
msgid "required"
msgstr "krävs"
#: ../jsp/WEB-INF/classes/net/i2p/i2ptunnel/jsp/editClient_jsp.java:159
#: ../jsp/WEB-INF/classes/net/i2p/i2ptunnel/jsp/editServer_jsp.java:178
msgid "Reachable by"
msgstr "Nåbar via"
#: ../jsp/WEB-INF/classes/net/i2p/i2ptunnel/jsp/editClient_jsp.java:180
msgid "Outproxies"
msgstr "utgående proxy"
#: ../jsp/WEB-INF/classes/net/i2p/i2ptunnel/jsp/editClient_jsp.java:187
msgid "Tunnel Destination"
msgstr "Tunnel mål"
#: ../jsp/WEB-INF/classes/net/i2p/i2ptunnel/jsp/editClient_jsp.java:199
msgid "name or destination"
msgstr "namn eller mål"
#: ../jsp/WEB-INF/classes/net/i2p/i2ptunnel/jsp/editClient_jsp.java:202
msgid "b32 not recommended"
msgstr "b32 rekommenderas ej"
#: ../jsp/WEB-INF/classes/net/i2p/i2ptunnel/jsp/editClient_jsp.java:208
msgid "Shared Client"
msgstr "Delad klient"
#: ../jsp/WEB-INF/classes/net/i2p/i2ptunnel/jsp/editClient_jsp.java:212
msgid ""
"(Share tunnels with other clients and irc/httpclients? Change requires "
"restart of client proxy)"
msgstr ""
"(Dela tunnlarna med andra klienter och irc/HTTP-klienter? Ändring kräver "
"omstart av klientproxyn)"
#: ../jsp/WEB-INF/classes/net/i2p/i2ptunnel/jsp/editClient_jsp.java:216
#: ../jsp/WEB-INF/classes/net/i2p/i2ptunnel/jsp/editServer_jsp.java:124
msgid "Auto Start"
msgstr "Starta automatiskt"
#: ../jsp/WEB-INF/classes/net/i2p/i2ptunnel/jsp/editClient_jsp.java:220
#: ../jsp/WEB-INF/classes/net/i2p/i2ptunnel/jsp/editServer_jsp.java:128
msgid "(Check the Box for 'YES')"
msgstr "(Markera i boxen för 'Ja')"
#: ../jsp/WEB-INF/classes/net/i2p/i2ptunnel/jsp/editClient_jsp.java:222
#: ../jsp/WEB-INF/classes/net/i2p/i2ptunnel/jsp/editServer_jsp.java:243
msgid "Advanced networking options"
msgstr "Avancerade nätverks instälningar"
#: ../jsp/WEB-INF/classes/net/i2p/i2ptunnel/jsp/editClient_jsp.java:224
msgid ""
"(NOTE: when this client proxy is configured to share tunnels, then these "
"options are for all the shared proxy clients!)"
msgstr ""
"(OBS: när denna klientproxyn är konfigurerad för att dela tunnlar, då gäller"
" dessa alternativ för alla delade proxyklienter!)"
#: ../jsp/WEB-INF/classes/net/i2p/i2ptunnel/jsp/editClient_jsp.java:226
#: ../jsp/WEB-INF/classes/net/i2p/i2ptunnel/jsp/editServer_jsp.java:245
msgid "Tunnel Options"
msgstr "Tunnel alternativ"
#: ../jsp/WEB-INF/classes/net/i2p/i2ptunnel/jsp/editClient_jsp.java:228
#: ../jsp/WEB-INF/classes/net/i2p/i2ptunnel/jsp/editServer_jsp.java:247
msgid "Length"
msgstr "Längd"
#: ../jsp/WEB-INF/classes/net/i2p/i2ptunnel/jsp/editClient_jsp.java:235
#: ../jsp/WEB-INF/classes/net/i2p/i2ptunnel/jsp/editServer_jsp.java:254
msgid "0 hop tunnel (low anonymity, low latency)"
msgstr " 0 tunnel hopp (låg anonymitet, ingen fördröjning)"
#: ../jsp/WEB-INF/classes/net/i2p/i2ptunnel/jsp/editClient_jsp.java:239
#: ../jsp/WEB-INF/classes/net/i2p/i2ptunnel/jsp/editServer_jsp.java:258
msgid "1 hop tunnel (medium anonymity, medium latency)"
msgstr "1 tunnel hopp (medel anonymitet, medel fördröjning)"
#: ../jsp/WEB-INF/classes/net/i2p/i2ptunnel/jsp/editClient_jsp.java:243
#: ../jsp/WEB-INF/classes/net/i2p/i2ptunnel/jsp/editServer_jsp.java:262
msgid "2 hop tunnel (high anonymity, high latency)"
msgstr "2 tunnel hopp (hög anonymitet, hög fördröjning)"
#: ../jsp/WEB-INF/classes/net/i2p/i2ptunnel/jsp/editClient_jsp.java:247
#: ../jsp/WEB-INF/classes/net/i2p/i2ptunnel/jsp/editServer_jsp.java:266
msgid "3 hop tunnel (very high anonymity, poor performance)"
msgstr "3 tunnel hopp (mycket hög anonymitet, dålig prestanda)"
#: ../jsp/WEB-INF/classes/net/i2p/i2ptunnel/jsp/editClient_jsp.java:256
#: ../jsp/WEB-INF/classes/net/i2p/i2ptunnel/jsp/editServer_jsp.java:275
msgid "hop tunnel (very poor performance)"
msgstr "Tunnel hopp (mycket låg prestanda)"
#: ../jsp/WEB-INF/classes/net/i2p/i2ptunnel/jsp/editClient_jsp.java:261
#: ../jsp/WEB-INF/classes/net/i2p/i2ptunnel/jsp/editServer_jsp.java:280
msgid "Variance"
msgstr "Variation"
#: ../jsp/WEB-INF/classes/net/i2p/i2ptunnel/jsp/editClient_jsp.java:268
#: ../jsp/WEB-INF/classes/net/i2p/i2ptunnel/jsp/editServer_jsp.java:287
msgid "0 hop variance (no randomisation, consistant performance)"
msgstr "0 hopp variation (ingen slumpmässighet, konstant prestanda)"
#: ../jsp/WEB-INF/classes/net/i2p/i2ptunnel/jsp/editClient_jsp.java:272
#: ../jsp/WEB-INF/classes/net/i2p/i2ptunnel/jsp/editServer_jsp.java:291
msgid ""
"+ 0-1 hop variance (medium additive randomisation, subtractive performance)"
msgstr "+ 0-1 hopp variation (medel slumpmässighet, minskad prestanda)"
#: ../jsp/WEB-INF/classes/net/i2p/i2ptunnel/jsp/editClient_jsp.java:276
#: ../jsp/WEB-INF/classes/net/i2p/i2ptunnel/jsp/editServer_jsp.java:295
msgid ""
"+ 0-2 hop variance (high additive randomisation, subtractive performance)"
msgstr "+ 0-2 hopp variation (ökad slumpmässighet, minskad prestanda)"
#: ../jsp/WEB-INF/classes/net/i2p/i2ptunnel/jsp/editClient_jsp.java:280
#: ../jsp/WEB-INF/classes/net/i2p/i2ptunnel/jsp/editServer_jsp.java:299
msgid "+/- 0-1 hop variance (standard randomisation, standard performance)"
msgstr "+/- 0-1 hopp variation (standard slumpmässighet, standardprestanda)"
#: ../jsp/WEB-INF/classes/net/i2p/i2ptunnel/jsp/editClient_jsp.java:284
#: ../jsp/WEB-INF/classes/net/i2p/i2ptunnel/jsp/editServer_jsp.java:303
msgid "+/- 0-2 hop variance (not recommended)"
msgstr "+/- 0-2 hopp variation (inte rekommenderat)"
#: ../jsp/WEB-INF/classes/net/i2p/i2ptunnel/jsp/editClient_jsp.java:296
#: ../jsp/WEB-INF/classes/net/i2p/i2ptunnel/jsp/editServer_jsp.java:315
msgid "hop variance"
msgstr "hopp variation"
#: ../jsp/WEB-INF/classes/net/i2p/i2ptunnel/jsp/editClient_jsp.java:301
#: ../jsp/WEB-INF/classes/net/i2p/i2ptunnel/jsp/editServer_jsp.java:320
msgid "Count"
msgstr "Antal"
#: ../jsp/WEB-INF/classes/net/i2p/i2ptunnel/jsp/editClient_jsp.java:308
#: ../jsp/WEB-INF/classes/net/i2p/i2ptunnel/jsp/editServer_jsp.java:327
msgid "1 inbound, 1 outbound tunnel (low bandwidth usage, less reliability)"
msgstr ""
"1 inkommande, 1 utgående tunnlar (låg bandbreddsanvändning, låg "
"tillförlitlighet)"
#: ../jsp/WEB-INF/classes/net/i2p/i2ptunnel/jsp/editClient_jsp.java:312
#: ../jsp/WEB-INF/classes/net/i2p/i2ptunnel/jsp/editServer_jsp.java:331
msgid ""
"2 inbound, 2 outbound tunnels (standard bandwidth usage, standard "
"reliability)"
msgstr ""
"2 inkommande, 2 utgående tunnlar (normal bandbreddsanvändning, normal "
"tillförlitlighet)"
#: ../jsp/WEB-INF/classes/net/i2p/i2ptunnel/jsp/editClient_jsp.java:316
#: ../jsp/WEB-INF/classes/net/i2p/i2ptunnel/jsp/editServer_jsp.java:335
msgid ""
"3 inbound, 3 outbound tunnels (higher bandwidth usage, higher reliability)"
msgstr ""
"3 inkommande, 3 utgående tunnlar (Högre bandbreddsanvändning, högre "
"tillförlitlighet)"
#: ../jsp/WEB-INF/classes/net/i2p/i2ptunnel/jsp/editClient_jsp.java:325
#: ../jsp/WEB-INF/classes/net/i2p/i2ptunnel/jsp/editServer_jsp.java:344
msgid "tunnels"
msgstr "tunnlar"
#: ../jsp/WEB-INF/classes/net/i2p/i2ptunnel/jsp/editClient_jsp.java:330
#: ../jsp/WEB-INF/classes/net/i2p/i2ptunnel/jsp/editServer_jsp.java:349
msgid "Backup Count"
msgstr "Antal reserver"
#: ../jsp/WEB-INF/classes/net/i2p/i2ptunnel/jsp/editClient_jsp.java:337
#: ../jsp/WEB-INF/classes/net/i2p/i2ptunnel/jsp/editServer_jsp.java:356
msgid "0 backup tunnels (0 redundancy, no added resource usage)"
msgstr ""
"0 reserv tunnlar i varje riktning (ingen redundans, ingen resursanvändning)"
#: ../jsp/WEB-INF/classes/net/i2p/i2ptunnel/jsp/editClient_jsp.java:341
#: ../jsp/WEB-INF/classes/net/i2p/i2ptunnel/jsp/editServer_jsp.java:360
msgid "1 backup tunnel each direction (low redundancy, low resource usage)"
msgstr ""
"1 reserv tunnel i varje riktning (låg redundans, låg resursanvändning)"
#: ../jsp/WEB-INF/classes/net/i2p/i2ptunnel/jsp/editClient_jsp.java:345
#: ../jsp/WEB-INF/classes/net/i2p/i2ptunnel/jsp/editServer_jsp.java:364
msgid ""
"2 backup tunnels each direction (medium redundancy, medium resource usage)"
msgstr ""
"2 reserv tunnlar i varje riktning (medel hög redundans, medel hög "
"resursanvändning)"
#: ../jsp/WEB-INF/classes/net/i2p/i2ptunnel/jsp/editClient_jsp.java:349
#: ../jsp/WEB-INF/classes/net/i2p/i2ptunnel/jsp/editServer_jsp.java:368
msgid "3 backup tunnels each direction (high redundancy, high resource usage)"
msgstr ""
"3 reserv tunnlar i varje riktning (hög redundans, hög resursanvändning)"
#: ../jsp/WEB-INF/classes/net/i2p/i2ptunnel/jsp/editClient_jsp.java:358
#: ../jsp/WEB-INF/classes/net/i2p/i2ptunnel/jsp/editServer_jsp.java:377
msgid "backup tunnels"
msgstr "reserv tunnlar"
#: ../jsp/WEB-INF/classes/net/i2p/i2ptunnel/jsp/editClient_jsp.java:365
#: ../jsp/WEB-INF/classes/net/i2p/i2ptunnel/jsp/editServer_jsp.java:384
msgid "Profile"
msgstr "Profil"
#: ../jsp/WEB-INF/classes/net/i2p/i2ptunnel/jsp/editClient_jsp.java:372
#: ../jsp/WEB-INF/classes/net/i2p/i2ptunnel/jsp/editServer_jsp.java:391
msgid "interactive connection"
msgstr "interaktiv anslutning"
#: ../jsp/WEB-INF/classes/net/i2p/i2ptunnel/jsp/editClient_jsp.java:376
#: ../jsp/WEB-INF/classes/net/i2p/i2ptunnel/jsp/editServer_jsp.java:395
msgid "bulk connection (downloads/websites/BT)"
msgstr "bulk-anslutning (hämtningar/webbplatser/BT)"
#: ../jsp/WEB-INF/classes/net/i2p/i2ptunnel/jsp/editClient_jsp.java:378
msgid "Delay Connect"
msgstr "Fördröj anslutning"
#: ../jsp/WEB-INF/classes/net/i2p/i2ptunnel/jsp/editClient_jsp.java:382
msgid "for request/response connections"
msgstr "för förfrågan/svar-anslutningar"
#: ../jsp/WEB-INF/classes/net/i2p/i2ptunnel/jsp/editClient_jsp.java:386
#: ../jsp/WEB-INF/classes/net/i2p/i2ptunnel/jsp/editServer_jsp.java:399
msgid "Router I2CP Address"
msgstr "I2CP Routeradress"
#: ../jsp/WEB-INF/classes/net/i2p/i2ptunnel/jsp/editClient_jsp.java:388
#: ../jsp/WEB-INF/classes/net/i2p/i2ptunnel/jsp/editServer_jsp.java:142
#: ../jsp/WEB-INF/classes/net/i2p/i2ptunnel/jsp/editServer_jsp.java:401
msgid "Host"
msgstr "Värd"
#: ../jsp/WEB-INF/classes/net/i2p/i2ptunnel/jsp/editClient_jsp.java:396
#: ../jsp/WEB-INF/classes/net/i2p/i2ptunnel/jsp/editServer_jsp.java:148
#: ../jsp/WEB-INF/classes/net/i2p/i2ptunnel/jsp/editServer_jsp.java:409
#: ../jsp/WEB-INF/classes/net/i2p/i2ptunnel/jsp/index_jsp.java:247
#: ../jsp/WEB-INF/classes/net/i2p/i2ptunnel/jsp/index_jsp.java:269
msgid "Port"
msgstr "Port"
#: ../jsp/WEB-INF/classes/net/i2p/i2ptunnel/jsp/editClient_jsp.java:406
#: ../jsp/WEB-INF/classes/net/i2p/i2ptunnel/jsp/editServer_jsp.java:479
msgid "Reduce tunnel quantity when idle"
msgstr "Minska kvantitetn på tunnel vid inaktivitet"
#: ../jsp/WEB-INF/classes/net/i2p/i2ptunnel/jsp/editClient_jsp.java:408
#: ../jsp/WEB-INF/classes/net/i2p/i2ptunnel/jsp/editClient_jsp.java:422
#: ../jsp/WEB-INF/classes/net/i2p/i2ptunnel/jsp/editClient_jsp.java:430
#: ../jsp/WEB-INF/classes/net/i2p/i2ptunnel/jsp/editClient_jsp.java:442
#: ../jsp/WEB-INF/classes/net/i2p/i2ptunnel/jsp/editClient_jsp.java:452
#: ../jsp/WEB-INF/classes/net/i2p/i2ptunnel/jsp/editClient_jsp.java:472
#: ../jsp/WEB-INF/classes/net/i2p/i2ptunnel/jsp/editClient_jsp.java:486
#: ../jsp/WEB-INF/classes/net/i2p/i2ptunnel/jsp/editServer_jsp.java:419
#: ../jsp/WEB-INF/classes/net/i2p/i2ptunnel/jsp/editServer_jsp.java:481
msgid "Enable"
msgstr "Aktivera"
#: ../jsp/WEB-INF/classes/net/i2p/i2ptunnel/jsp/editClient_jsp.java:412
#: ../jsp/WEB-INF/classes/net/i2p/i2ptunnel/jsp/editServer_jsp.java:485
msgid "Reduced tunnel count"
msgstr "Minska antal tunnlar"
#: ../jsp/WEB-INF/classes/net/i2p/i2ptunnel/jsp/editClient_jsp.java:416
#: ../jsp/WEB-INF/classes/net/i2p/i2ptunnel/jsp/editClient_jsp.java:436
#: ../jsp/WEB-INF/classes/net/i2p/i2ptunnel/jsp/editServer_jsp.java:489
msgid "Idle minutes"
msgstr "Inaktiv i minuter"
#: ../jsp/WEB-INF/classes/net/i2p/i2ptunnel/jsp/editClient_jsp.java:420
msgid "Close tunnels when idle"
msgstr "Stäng tunnlar vid inaktivitet"
#: ../jsp/WEB-INF/classes/net/i2p/i2ptunnel/jsp/editClient_jsp.java:426
msgid "New Keys on Reopen"
msgstr "Nya nycklar vid återöppnade"
#: ../jsp/WEB-INF/classes/net/i2p/i2ptunnel/jsp/editClient_jsp.java:434
#: ../jsp/WEB-INF/classes/net/i2p/i2ptunnel/jsp/editServer_jsp.java:435
msgid "Disable"
msgstr "Inaktivera"
#: ../jsp/WEB-INF/classes/net/i2p/i2ptunnel/jsp/editClient_jsp.java:440
msgid "Delay tunnel open until required"
msgstr "Avvakta med att öppna tunnlar tills de behövs"
#: ../jsp/WEB-INF/classes/net/i2p/i2ptunnel/jsp/editClient_jsp.java:450
msgid "Persistent private key"
msgstr "Beständig privat nyckel"
#: ../jsp/WEB-INF/classes/net/i2p/i2ptunnel/jsp/editClient_jsp.java:456
msgid "File"
msgstr "Fil"
#: ../jsp/WEB-INF/classes/net/i2p/i2ptunnel/jsp/editClient_jsp.java:460
#: ../jsp/WEB-INF/classes/net/i2p/i2ptunnel/jsp/editServer_jsp.java:220
msgid "Local destination"
msgstr "Lokalt mål"
#: ../jsp/WEB-INF/classes/net/i2p/i2ptunnel/jsp/editClient_jsp.java:464
msgid "(if known)"
msgstr "(om känd)"
#: ../jsp/WEB-INF/classes/net/i2p/i2ptunnel/jsp/editClient_jsp.java:470
msgid "Local Authorization"
msgstr "Lokala tillstånd"
#: ../jsp/WEB-INF/classes/net/i2p/i2ptunnel/jsp/editClient_jsp.java:476
#: ../jsp/WEB-INF/classes/net/i2p/i2ptunnel/jsp/editClient_jsp.java:490
msgid "Username"
msgstr "Användarnamn"
#: ../jsp/WEB-INF/classes/net/i2p/i2ptunnel/jsp/editClient_jsp.java:480
#: ../jsp/WEB-INF/classes/net/i2p/i2ptunnel/jsp/editClient_jsp.java:494
msgid "Password"
msgstr "Lösenord"
#: ../jsp/WEB-INF/classes/net/i2p/i2ptunnel/jsp/editClient_jsp.java:484
msgid "Outproxy Authorization"
msgstr "Tillstånd för utproxy"
#: ../jsp/WEB-INF/classes/net/i2p/i2ptunnel/jsp/editClient_jsp.java:502
msgid "Jump URL List"
msgstr "Hopp lista för URLer"
#: ../jsp/WEB-INF/classes/net/i2p/i2ptunnel/jsp/editClient_jsp.java:508
#: ../jsp/WEB-INF/classes/net/i2p/i2ptunnel/jsp/editServer_jsp.java:525
msgid "Custom options"
msgstr "Anpassade alternativ"
#: ../jsp/WEB-INF/classes/net/i2p/i2ptunnel/jsp/editClient_jsp.java:512
#: ../jsp/WEB-INF/classes/net/i2p/i2ptunnel/jsp/editServer_jsp.java:529
msgid ""
"NOTE: If tunnel is currently running, most changes will not take effect "
"until tunnel is stopped and restarted."
msgstr ""
"OBS: Om tunneln är igång, kommer de flesta ändringarna inte att träda i "
"kraft förrän tunneln stoppats och startats om."
#: ../jsp/WEB-INF/classes/net/i2p/i2ptunnel/jsp/editClient_jsp.java:514
#: ../jsp/WEB-INF/classes/net/i2p/i2ptunnel/jsp/editServer_jsp.java:531
msgid "Cancel"
msgstr "Avbryt"
#: ../jsp/WEB-INF/classes/net/i2p/i2ptunnel/jsp/editClient_jsp.java:518
#: ../jsp/WEB-INF/classes/net/i2p/i2ptunnel/jsp/editServer_jsp.java:535
msgid "Delete"
msgstr "Radera"
#: ../jsp/WEB-INF/classes/net/i2p/i2ptunnel/jsp/editClient_jsp.java:520
#: ../jsp/WEB-INF/classes/net/i2p/i2ptunnel/jsp/editServer_jsp.java:537
msgid "Save"
msgstr "Spara"
#: ../jsp/WEB-INF/classes/net/i2p/i2ptunnel/jsp/editServer_jsp.java:73
msgid "I2P Tunnel Manager - Edit Server Tunnel"
msgstr "I2P tunnelhanterare - Redigera servertunneln"
#: ../jsp/WEB-INF/classes/net/i2p/i2ptunnel/jsp/editServer_jsp.java:93
msgid "Edit server settings"
msgstr "Redigera serverinställningar"
#: ../jsp/WEB-INF/classes/net/i2p/i2ptunnel/jsp/editServer_jsp.java:101
msgid "New server settings"
msgstr "Inställningar för en ny server "
#: ../jsp/WEB-INF/classes/net/i2p/i2ptunnel/jsp/editServer_jsp.java:199
msgid "Website name"
msgstr "Webbsidas namn"
#: ../jsp/WEB-INF/classes/net/i2p/i2ptunnel/jsp/editServer_jsp.java:203
msgid "(leave blank for outproxies)"
msgstr "(lämna tomt för utgående proxies)"
#: ../jsp/WEB-INF/classes/net/i2p/i2ptunnel/jsp/editServer_jsp.java:208
msgid "Private key file"
msgstr "Privat nyckelfil"
#: ../jsp/WEB-INF/classes/net/i2p/i2ptunnel/jsp/editServer_jsp.java:230
msgid "Add to local addressbook"
msgstr "Lägg till i den lokala adressboken"
#: ../jsp/WEB-INF/classes/net/i2p/i2ptunnel/jsp/editServer_jsp.java:237
msgid "Hostname Signature"
msgstr "Värddatornamnets signatur"
#: ../jsp/WEB-INF/classes/net/i2p/i2ptunnel/jsp/editServer_jsp.java:417
msgid "Encrypt Leaseset"
msgstr "Kryptera Leaseset"
#: ../jsp/WEB-INF/classes/net/i2p/i2ptunnel/jsp/editServer_jsp.java:423
msgid "Encryption Key"
msgstr "Krypteringsnyckel"
#: ../jsp/WEB-INF/classes/net/i2p/i2ptunnel/jsp/editServer_jsp.java:427
msgid "Generate New Key"
msgstr "Skapa ny nyckel "
#: ../jsp/WEB-INF/classes/net/i2p/i2ptunnel/jsp/editServer_jsp.java:429
msgid "Generate"
msgstr "Skapa"
#: ../jsp/WEB-INF/classes/net/i2p/i2ptunnel/jsp/editServer_jsp.java:431
#: ../jsp/WEB-INF/classes/net/i2p/i2ptunnel/jsp/editServer_jsp.java:523
msgid "(Tunnel must be stopped first)"
msgstr "(Tunneln måste stoppas först)"
#: ../jsp/WEB-INF/classes/net/i2p/i2ptunnel/jsp/editServer_jsp.java:433
msgid "Restricted Access List"
msgstr "Begränsad åtkomst lista"
#: ../jsp/WEB-INF/classes/net/i2p/i2ptunnel/jsp/editServer_jsp.java:439
msgid "Whitelist"
msgstr "Lista över tillåtna"
#: ../jsp/WEB-INF/classes/net/i2p/i2ptunnel/jsp/editServer_jsp.java:443
msgid "Blacklist"
msgstr "Svartlista"
#: ../jsp/WEB-INF/classes/net/i2p/i2ptunnel/jsp/editServer_jsp.java:447
msgid "Access List"
msgstr "Åtkomstlista"
#: ../jsp/WEB-INF/classes/net/i2p/i2ptunnel/jsp/editServer_jsp.java:451
msgid "Inbound connection limits (0=unlimited)"
msgstr "Begränsning av inkommande anslutningar (0 = obegränsat)"
#: ../jsp/WEB-INF/classes/net/i2p/i2ptunnel/jsp/editServer_jsp.java:453
msgid "Per client"
msgstr "Per klient"
#: ../jsp/WEB-INF/classes/net/i2p/i2ptunnel/jsp/editServer_jsp.java:455
msgid "Per minute"
msgstr "Per minut"
#: ../jsp/WEB-INF/classes/net/i2p/i2ptunnel/jsp/editServer_jsp.java:459
msgid "Per hour"
msgstr "Per timme"
#: ../jsp/WEB-INF/classes/net/i2p/i2ptunnel/jsp/editServer_jsp.java:463
msgid "Per day"
msgstr "Per dag"
#: ../jsp/WEB-INF/classes/net/i2p/i2ptunnel/jsp/editServer_jsp.java:467
msgid "Total"
msgstr "Totalt"
#: ../jsp/WEB-INF/classes/net/i2p/i2ptunnel/jsp/editServer_jsp.java:475
msgid "Max concurrent connections (0=unlimited)"
msgstr "Maximalt antal samtidiga anslutningar (0 = obegränsat)"
#: ../jsp/WEB-INF/classes/net/i2p/i2ptunnel/jsp/editServer_jsp.java:493
msgid "New Certificate type"
msgstr "Ny certifikatet typ"
#: ../jsp/WEB-INF/classes/net/i2p/i2ptunnel/jsp/editServer_jsp.java:495
msgid "None"
msgstr "Ingen"
#: ../jsp/WEB-INF/classes/net/i2p/i2ptunnel/jsp/editServer_jsp.java:499
msgid "Hashcash (effort)"
msgstr "Hashcash (förmåga)"
#: ../jsp/WEB-INF/classes/net/i2p/i2ptunnel/jsp/editServer_jsp.java:505
msgid "Hashcash Calc Time"
msgstr "Beräknings tid för Hashcash "
#: ../jsp/WEB-INF/classes/net/i2p/i2ptunnel/jsp/editServer_jsp.java:507
msgid "Estimate"
msgstr "Uppsaktta"
#: ../jsp/WEB-INF/classes/net/i2p/i2ptunnel/jsp/editServer_jsp.java:509
msgid "Hidden"
msgstr "Dold"
#: ../jsp/WEB-INF/classes/net/i2p/i2ptunnel/jsp/editServer_jsp.java:513
msgid "Signed (signed by)"
msgstr "Undertecknad (undertecknat av)"
#: ../jsp/WEB-INF/classes/net/i2p/i2ptunnel/jsp/editServer_jsp.java:519
msgid "Modify Certificate"
msgstr "Ändra Certifikat"
#: ../jsp/WEB-INF/classes/net/i2p/i2ptunnel/jsp/editServer_jsp.java:521
msgid "Modify"
msgstr "Ändra"
#: ../jsp/WEB-INF/classes/net/i2p/i2ptunnel/jsp/index_jsp.java:74
msgid "I2P Tunnel Manager - List"
msgstr "I2P tunnelhanterare - Lista"
#: ../jsp/WEB-INF/classes/net/i2p/i2ptunnel/jsp/index_jsp.java:86
msgid "Status Messages"
msgstr "Status meddelande "
#: ../jsp/WEB-INF/classes/net/i2p/i2ptunnel/jsp/index_jsp.java:90
msgid "Refresh"
msgstr "Uppdatera"
#: ../jsp/WEB-INF/classes/net/i2p/i2ptunnel/jsp/index_jsp.java:94
msgid "Stop All"
msgstr "Stoppa alla"
#: ../jsp/WEB-INF/classes/net/i2p/i2ptunnel/jsp/index_jsp.java:98
msgid "Start All"
msgstr "Starta alla"
#: ../jsp/WEB-INF/classes/net/i2p/i2ptunnel/jsp/index_jsp.java:102
msgid "Restart All"
msgstr "Starta om alla"
#: ../jsp/WEB-INF/classes/net/i2p/i2ptunnel/jsp/index_jsp.java:106
msgid "Reload Config"
msgstr "Uppdatera konfigurationen"
#: ../jsp/WEB-INF/classes/net/i2p/i2ptunnel/jsp/index_jsp.java:108
msgid "I2P Server Tunnels"
msgstr "I2P Servertunnlel"
#: ../jsp/WEB-INF/classes/net/i2p/i2ptunnel/jsp/index_jsp.java:112
#: ../jsp/WEB-INF/classes/net/i2p/i2ptunnel/jsp/index_jsp.java:133
msgid "Points at"
msgstr "Pekar på"
#: ../jsp/WEB-INF/classes/net/i2p/i2ptunnel/jsp/index_jsp.java:114
#: ../jsp/WEB-INF/classes/net/i2p/i2ptunnel/jsp/index_jsp.java:156
#: ../jsp/WEB-INF/classes/net/i2p/i2ptunnel/jsp/index_jsp.java:160
msgid "Preview"
msgstr "förhandsvisning"
#: ../jsp/WEB-INF/classes/net/i2p/i2ptunnel/jsp/index_jsp.java:116
#: ../jsp/WEB-INF/classes/net/i2p/i2ptunnel/jsp/index_jsp.java:180
#: ../jsp/WEB-INF/classes/net/i2p/i2ptunnel/jsp/index_jsp.java:253
#: ../jsp/WEB-INF/classes/net/i2p/i2ptunnel/jsp/index_jsp.java:300
msgid "Status"
msgstr "Status"
#: ../jsp/WEB-INF/classes/net/i2p/i2ptunnel/jsp/index_jsp.java:166
msgid "Base32 Address"
msgstr "Bas32 adress"
#: ../jsp/WEB-INF/classes/net/i2p/i2ptunnel/jsp/index_jsp.java:174
msgid "No Preview"
msgstr "Ingen förhandsvisning"
#: ../jsp/WEB-INF/classes/net/i2p/i2ptunnel/jsp/index_jsp.java:187
#: ../jsp/WEB-INF/classes/net/i2p/i2ptunnel/jsp/index_jsp.java:307
msgid "Starting..."
msgstr "Startar..."
#: ../jsp/WEB-INF/classes/net/i2p/i2ptunnel/jsp/index_jsp.java:194
#: ../jsp/WEB-INF/classes/net/i2p/i2ptunnel/jsp/index_jsp.java:208
#: ../jsp/WEB-INF/classes/net/i2p/i2ptunnel/jsp/index_jsp.java:314
#: ../jsp/WEB-INF/classes/net/i2p/i2ptunnel/jsp/index_jsp.java:328
#: ../jsp/WEB-INF/classes/net/i2p/i2ptunnel/jsp/index_jsp.java:342
msgid "Stop"
msgstr "Stopp"
#: ../jsp/WEB-INF/classes/net/i2p/i2ptunnel/jsp/index_jsp.java:201
#: ../jsp/WEB-INF/classes/net/i2p/i2ptunnel/jsp/index_jsp.java:335
msgid "Running"
msgstr "Kör"
#: ../jsp/WEB-INF/classes/net/i2p/i2ptunnel/jsp/index_jsp.java:215
#: ../jsp/WEB-INF/classes/net/i2p/i2ptunnel/jsp/index_jsp.java:349
msgid "Stopped"
msgstr "Stoppad"
#: ../jsp/WEB-INF/classes/net/i2p/i2ptunnel/jsp/index_jsp.java:222
#: ../jsp/WEB-INF/classes/net/i2p/i2ptunnel/jsp/index_jsp.java:356
msgid "Start"
msgstr "Start"
#: ../jsp/WEB-INF/classes/net/i2p/i2ptunnel/jsp/index_jsp.java:237
msgid "New server tunnel"
msgstr "Ny severtunnel "
#: ../jsp/WEB-INF/classes/net/i2p/i2ptunnel/jsp/index_jsp.java:239
#: ../jsp/WEB-INF/classes/net/i2p/i2ptunnel/jsp/index_jsp.java:399
msgid "Standard"
msgstr "Standard"
#: ../jsp/WEB-INF/classes/net/i2p/i2ptunnel/jsp/index_jsp.java:241
#: ../jsp/WEB-INF/classes/net/i2p/i2ptunnel/jsp/index_jsp.java:401
msgid "Create"
msgstr "Skapa"
#: ../jsp/WEB-INF/classes/net/i2p/i2ptunnel/jsp/index_jsp.java:243
msgid "I2P Client Tunnels"
msgstr "I2P Klienttunnel"
#: ../jsp/WEB-INF/classes/net/i2p/i2ptunnel/jsp/index_jsp.java:251
#: ../jsp/WEB-INF/classes/net/i2p/i2ptunnel/jsp/index_jsp.java:286
msgid "Interface"
msgstr "Gränssnitt "
#: ../jsp/WEB-INF/classes/net/i2p/i2ptunnel/jsp/index_jsp.java:321
msgid "Standby"
msgstr "Standby"
#: ../jsp/WEB-INF/classes/net/i2p/i2ptunnel/jsp/index_jsp.java:366
msgid "Outproxy"
msgstr "Utproxy"
#: ../jsp/WEB-INF/classes/net/i2p/i2ptunnel/jsp/index_jsp.java:370
msgid "Destination"
msgstr "Mål"
#: ../jsp/WEB-INF/classes/net/i2p/i2ptunnel/jsp/index_jsp.java:384
msgid "none"
msgstr "Ingen"
#: ../jsp/WEB-INF/classes/net/i2p/i2ptunnel/jsp/index_jsp.java:397
msgid "New client tunnel"
msgstr "Ny klienttunnel"

View File

@@ -0,0 +1,860 @@
# I2P
# Copyright (C) 2009 The I2P Project
# This file is distributed under the same license as the i2ptunnel package.
# To contribute translations, see http://www.i2p2.de/newdevelopers
#
# <tran.nathan@gmail.com>, 2011.
# dich_tran <tran.nathan@gmail.com>, 2011.
msgid ""
msgstr ""
"Project-Id-Version: I2P\n"
"Report-Msgid-Bugs-To: https://trac.i2p2.de/\n"
"POT-Creation-Date: 2011-06-11 08:23+0000\n"
"PO-Revision-Date: 2011-06-11 08:42+0000\n"
"Last-Translator: ducki2p <ducki2p@gmail.com>\n"
"Language-Team: Vietnamese (http://www.transifex.net/projects/p/I2P/team/vi/)\n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
"Language: vi\n"
"Plural-Forms: nplurals=1; plural=0\n"
#: ../java/src/net/i2p/i2ptunnel/I2PTunnelHTTPClient.java:514
#, java-format
msgid ""
"To visit the destination in your host database, click <a "
"href=\"{0}\">here</a>. To visit the conflicting addresshelper destination, "
"click <a href=\"{1}\">here</a>."
msgstr ""
"Để truy cập vào điểm đến trong cơ sở dữ liệu máy chủ, bấm <a "
"href=\"{0}\">vào đây</a>. Để truy cập vào địa chỉ giúp đỡ xung đột, bấm <a "
"href=\"{1}\">vào đây</a>."
#: ../java/src/net/i2p/i2ptunnel/I2PTunnelHTTPClient.java:875
#: ../jsp/WEB-INF/classes/net/i2p/i2ptunnel/jsp/editClient_jsp.java:388
#: ../jsp/WEB-INF/classes/net/i2p/i2ptunnel/jsp/editServer_jsp.java:142
#: ../jsp/WEB-INF/classes/net/i2p/i2ptunnel/jsp/editServer_jsp.java:401
msgid "Host"
msgstr "Máy chủ"
#: ../java/src/net/i2p/i2ptunnel/I2PTunnelHTTPClient.java:876
#: ../jsp/WEB-INF/classes/net/i2p/i2ptunnel/jsp/index_jsp.java:370
msgid "Destination"
msgstr "Đích đến"
#: ../java/src/net/i2p/i2ptunnel/I2PTunnelHTTPClient.java:881
#, java-format
msgid "Continue to {0} without saving"
msgstr ""
#: ../java/src/net/i2p/i2ptunnel/I2PTunnelHTTPClient.java:886
#, java-format
msgid "Save {0} to router address book and continue to eepsite"
msgstr ""
#. only blockfile supports multiple books
#: ../java/src/net/i2p/i2ptunnel/I2PTunnelHTTPClient.java:889
#, java-format
msgid "Save {0} to master address book and continue to eepsite"
msgstr ""
#: ../java/src/net/i2p/i2ptunnel/I2PTunnelHTTPClient.java:890
#, java-format
msgid "Save {0} to private address book and continue to eepsite"
msgstr ""
#: ../java/src/net/i2p/i2ptunnel/I2PTunnelHTTPClient.java:1046
msgid ""
"Click a link below to look for an address helper by using a \"jump\" "
"service:"
msgstr "Bấm vào đường dẫn dưới đây để tìm địa chỉ giúp đỡ bằng dịch vụ \"nhảy\":"
#: ../java/src/net/i2p/i2ptunnel/I2PTunnelHTTPClient.java:1262
msgid "Added via address helper"
msgstr ""
#: ../java/src/net/i2p/i2ptunnel/I2PTunnelHTTPClient.java:1286
#, java-format
msgid "Redirecting to {0}"
msgstr ""
#: ../java/src/net/i2p/i2ptunnel/I2PTunnelHTTPClient.java:1292
msgid "Router Console"
msgstr ""
#: ../java/src/net/i2p/i2ptunnel/I2PTunnelHTTPClient.java:1293
msgid "Addressbook"
msgstr ""
#: ../java/src/net/i2p/i2ptunnel/I2PTunnelHTTPClient.java:1293
msgid "Configuration"
msgstr ""
#: ../java/src/net/i2p/i2ptunnel/I2PTunnelHTTPClient.java:1293
msgid "Help"
msgstr ""
#: ../java/src/net/i2p/i2ptunnel/I2PTunnelHTTPClient.java:1298
#, java-format
msgid "Saved {0} to the {1} addressbook, redirecting now."
msgstr ""
#: ../java/src/net/i2p/i2ptunnel/I2PTunnelHTTPClient.java:1299
#, java-format
msgid "Failed to save {0} to the {1} addressbook, redirecting now."
msgstr ""
#: ../java/src/net/i2p/i2ptunnel/I2PTunnelHTTPClient.java:1301
msgid "Click here if you are not redirected automatically."
msgstr ""
#: ../java/src/net/i2p/i2ptunnel/web/EditBean.java:326
#: ../java/src/net/i2p/i2ptunnel/web/EditBean.java:336
msgid "internal"
msgstr "nội bộ"
#: ../java/src/net/i2p/i2ptunnel/web/IndexBean.java:171
msgid ""
"Invalid form submission, probably because you used the 'back' or 'reload' "
"button on your browser. Please resubmit."
msgstr ""
"Mẫu đơn đệ nạp không đúng, có lẻ vì bạn dùng nút 'back' hay 'reload\" của "
"trình duyệt. Xin vui lòng đệ nạp lại."
#: ../java/src/net/i2p/i2ptunnel/web/IndexBean.java:218
msgid "Configuration reloaded for all tunnels"
msgstr "Nạp lại cấu hình cho mọi đường hầm"
#. and give them something to look at in any case
#: ../java/src/net/i2p/i2ptunnel/web/IndexBean.java:230
msgid "Starting tunnel"
msgstr "Bắt đầu đường hầm"
#. and give them something to look at in any case
#: ../java/src/net/i2p/i2ptunnel/web/IndexBean.java:243
msgid "Stopping tunnel"
msgstr "Ngưng đường hầm"
#: ../java/src/net/i2p/i2ptunnel/web/IndexBean.java:311
msgid "Configuration changes saved"
msgstr "Lưu giữ thay đổi cấu hình"
#: ../java/src/net/i2p/i2ptunnel/web/IndexBean.java:314
msgid "Failed to save configuration"
msgstr "Không lưu cấu hình được"
#: ../java/src/net/i2p/i2ptunnel/web/IndexBean.java:398
msgid "New Tunnel"
msgstr "Đường Hầm Mới"
#: ../java/src/net/i2p/i2ptunnel/web/IndexBean.java:418
msgid "Standard client"
msgstr "Khách thường"
#: ../java/src/net/i2p/i2ptunnel/web/IndexBean.java:419
msgid "HTTP client"
msgstr "Khách HTTP"
#: ../java/src/net/i2p/i2ptunnel/web/IndexBean.java:420
msgid "IRC client"
msgstr "Khách IRC"
#: ../java/src/net/i2p/i2ptunnel/web/IndexBean.java:421
msgid "Standard server"
msgstr "Máy chủ thường"
#: ../java/src/net/i2p/i2ptunnel/web/IndexBean.java:422
msgid "HTTP server"
msgstr "Máy chủ HTTP"
#: ../java/src/net/i2p/i2ptunnel/web/IndexBean.java:423
msgid "SOCKS 4/4a/5 proxy"
msgstr "Proxy SOCKS 4/4a/5"
#: ../java/src/net/i2p/i2ptunnel/web/IndexBean.java:424
msgid "SOCKS IRC proxy"
msgstr "Proxy SOCKS IRC"
#: ../java/src/net/i2p/i2ptunnel/web/IndexBean.java:425
msgid "CONNECT/SSL/HTTPS proxy"
msgstr "Proxy nối kết/SSL/HTTPS"
#: ../java/src/net/i2p/i2ptunnel/web/IndexBean.java:426
msgid "IRC server"
msgstr "Máy chủ IRC"
#: ../java/src/net/i2p/i2ptunnel/web/IndexBean.java:427
msgid "Streamr client"
msgstr "Khách Streamr"
#: ../java/src/net/i2p/i2ptunnel/web/IndexBean.java:428
msgid "Streamr server"
msgstr "Máy chủ Streamr"
#: ../java/src/net/i2p/i2ptunnel/web/IndexBean.java:429
msgid "HTTP bidir"
msgstr "HTTP hai chiều"
#: ../java/src/net/i2p/i2ptunnel/web/IndexBean.java:517
#: ../jsp/WEB-INF/classes/net/i2p/i2ptunnel/jsp/index_jsp.java:293
msgid "Host not set"
msgstr "Máy chủ chưa cấu hình"
#: ../java/src/net/i2p/i2ptunnel/web/IndexBean.java:521
#: ../jsp/WEB-INF/classes/net/i2p/i2ptunnel/jsp/index_jsp.java:275
msgid "Port not set"
msgstr "Cổng chưa cấu hình"
#: ../jsp/WEB-INF/classes/net/i2p/i2ptunnel/jsp/editClient_jsp.java:73
msgid "I2P Tunnel Manager - Edit Client Tunnel"
msgstr "Quảng Lý Hầm I2P - Chỉnh đổi hầm khách"
#: ../jsp/WEB-INF/classes/net/i2p/i2ptunnel/jsp/editClient_jsp.java:93
msgid "Edit proxy settings"
msgstr "Chỉnh đổi cấu hình proxy"
#: ../jsp/WEB-INF/classes/net/i2p/i2ptunnel/jsp/editClient_jsp.java:101
msgid "New proxy settings"
msgstr "Cấu hình mới cho proxy"
#: ../jsp/WEB-INF/classes/net/i2p/i2ptunnel/jsp/editClient_jsp.java:112
#: ../jsp/WEB-INF/classes/net/i2p/i2ptunnel/jsp/editServer_jsp.java:112
#: ../jsp/WEB-INF/classes/net/i2p/i2ptunnel/jsp/index_jsp.java:110
#: ../jsp/WEB-INF/classes/net/i2p/i2ptunnel/jsp/index_jsp.java:124
#: ../jsp/WEB-INF/classes/net/i2p/i2ptunnel/jsp/index_jsp.java:245
#: ../jsp/WEB-INF/classes/net/i2p/i2ptunnel/jsp/index_jsp.java:260
msgid "Name"
msgstr "Tên"
#: ../jsp/WEB-INF/classes/net/i2p/i2ptunnel/jsp/editClient_jsp.java:116
#: ../jsp/WEB-INF/classes/net/i2p/i2ptunnel/jsp/editServer_jsp.java:116
#: ../jsp/WEB-INF/classes/net/i2p/i2ptunnel/jsp/index_jsp.java:249
#: ../jsp/WEB-INF/classes/net/i2p/i2ptunnel/jsp/index_jsp.java:282
msgid "Type"
msgstr "Loại"
#: ../jsp/WEB-INF/classes/net/i2p/i2ptunnel/jsp/editClient_jsp.java:120
#: ../jsp/WEB-INF/classes/net/i2p/i2ptunnel/jsp/editServer_jsp.java:120
#: ../jsp/WEB-INF/classes/net/i2p/i2ptunnel/jsp/index_jsp.java:229
#: ../jsp/WEB-INF/classes/net/i2p/i2ptunnel/jsp/index_jsp.java:389
msgid "Description"
msgstr "Mô tả"
#: ../jsp/WEB-INF/classes/net/i2p/i2ptunnel/jsp/editClient_jsp.java:126
#: ../jsp/WEB-INF/classes/net/i2p/i2ptunnel/jsp/editServer_jsp.java:136
msgid "Target"
msgstr "Điểm đến"
#: ../jsp/WEB-INF/classes/net/i2p/i2ptunnel/jsp/editClient_jsp.java:130
#: ../jsp/WEB-INF/classes/net/i2p/i2ptunnel/jsp/editServer_jsp.java:132
#: ../jsp/WEB-INF/classes/net/i2p/i2ptunnel/jsp/editServer_jsp.java:162
msgid "Access Point"
msgstr "Điểm Truy Cập"
#: ../jsp/WEB-INF/classes/net/i2p/i2ptunnel/jsp/editClient_jsp.java:137
#: ../jsp/WEB-INF/classes/net/i2p/i2ptunnel/jsp/editClient_jsp.java:150
#: ../jsp/WEB-INF/classes/net/i2p/i2ptunnel/jsp/editClient_jsp.java:192
#: ../jsp/WEB-INF/classes/net/i2p/i2ptunnel/jsp/editServer_jsp.java:153
#: ../jsp/WEB-INF/classes/net/i2p/i2ptunnel/jsp/editServer_jsp.java:167
#: ../jsp/WEB-INF/classes/net/i2p/i2ptunnel/jsp/editServer_jsp.java:213
msgid "required"
msgstr "cần có"
#: ../jsp/WEB-INF/classes/net/i2p/i2ptunnel/jsp/editClient_jsp.java:159
#: ../jsp/WEB-INF/classes/net/i2p/i2ptunnel/jsp/editServer_jsp.java:178
msgid "Reachable by"
msgstr "Với được qua"
#: ../jsp/WEB-INF/classes/net/i2p/i2ptunnel/jsp/editClient_jsp.java:180
msgid "Outproxies"
msgstr "Proxy ra"
#: ../jsp/WEB-INF/classes/net/i2p/i2ptunnel/jsp/editClient_jsp.java:187
msgid "Tunnel Destination"
msgstr "Địa điểm Hầm đến"
#: ../jsp/WEB-INF/classes/net/i2p/i2ptunnel/jsp/editClient_jsp.java:199
msgid "name or destination"
msgstr "tên hay điểm đến"
#: ../jsp/WEB-INF/classes/net/i2p/i2ptunnel/jsp/editClient_jsp.java:202
msgid "b32 not recommended"
msgstr "không nên dùng b32"
#: ../jsp/WEB-INF/classes/net/i2p/i2ptunnel/jsp/editClient_jsp.java:208
msgid "Shared Client"
msgstr "Chia khách"
#: ../jsp/WEB-INF/classes/net/i2p/i2ptunnel/jsp/editClient_jsp.java:212
msgid ""
"(Share tunnels with other clients and irc/httpclients? Change requires "
"restart of client proxy)"
msgstr ""
"(Chia sẻ hầm với những khách khác hay khách irc/http? Chỉnh đổi yêu cầu khởi"
" động lại proxy khách)"
#: ../jsp/WEB-INF/classes/net/i2p/i2ptunnel/jsp/editClient_jsp.java:216
#: ../jsp/WEB-INF/classes/net/i2p/i2ptunnel/jsp/editServer_jsp.java:124
msgid "Auto Start"
msgstr "Tự động khởi động"
#: ../jsp/WEB-INF/classes/net/i2p/i2ptunnel/jsp/editClient_jsp.java:220
#: ../jsp/WEB-INF/classes/net/i2p/i2ptunnel/jsp/editServer_jsp.java:128
msgid "(Check the Box for 'YES')"
msgstr "Chọn YES trong ô"
#: ../jsp/WEB-INF/classes/net/i2p/i2ptunnel/jsp/editClient_jsp.java:222
#: ../jsp/WEB-INF/classes/net/i2p/i2ptunnel/jsp/editServer_jsp.java:243
msgid "Advanced networking options"
msgstr "Tùy chọn mạng cao cấp "
#: ../jsp/WEB-INF/classes/net/i2p/i2ptunnel/jsp/editClient_jsp.java:224
msgid ""
"(NOTE: when this client proxy is configured to share tunnels, then these "
"options are for all the shared proxy clients!)"
msgstr ""
"(GHI CHÚ: khi proxy khách được cấu hình để chia sẻ hầm, thì những tùy chọn "
"này cho tất cả khách proxy chia sẻ)"
#: ../jsp/WEB-INF/classes/net/i2p/i2ptunnel/jsp/editClient_jsp.java:226
#: ../jsp/WEB-INF/classes/net/i2p/i2ptunnel/jsp/editServer_jsp.java:245
msgid "Tunnel Options"
msgstr "Tùy chọn hầm"
#: ../jsp/WEB-INF/classes/net/i2p/i2ptunnel/jsp/editClient_jsp.java:228
#: ../jsp/WEB-INF/classes/net/i2p/i2ptunnel/jsp/editServer_jsp.java:247
msgid "Length"
msgstr "Độ dài"
#: ../jsp/WEB-INF/classes/net/i2p/i2ptunnel/jsp/editClient_jsp.java:235
#: ../jsp/WEB-INF/classes/net/i2p/i2ptunnel/jsp/editServer_jsp.java:254
msgid "0 hop tunnel (low anonymity, low latency)"
msgstr "hầm 0 bước nhảy (độ ẩn danh thấp, độ trễ thấp)"
#: ../jsp/WEB-INF/classes/net/i2p/i2ptunnel/jsp/editClient_jsp.java:239
#: ../jsp/WEB-INF/classes/net/i2p/i2ptunnel/jsp/editServer_jsp.java:258
msgid "1 hop tunnel (medium anonymity, medium latency)"
msgstr "hầm 1 bước nhảy (độ ẩn danh vừa, độ trễ vừa)"
#: ../jsp/WEB-INF/classes/net/i2p/i2ptunnel/jsp/editClient_jsp.java:243
#: ../jsp/WEB-INF/classes/net/i2p/i2ptunnel/jsp/editServer_jsp.java:262
msgid "2 hop tunnel (high anonymity, high latency)"
msgstr "hầm 2 bước nhảy (độ ẩn danh cao, độ trễ cao"
#: ../jsp/WEB-INF/classes/net/i2p/i2ptunnel/jsp/editClient_jsp.java:247
#: ../jsp/WEB-INF/classes/net/i2p/i2ptunnel/jsp/editServer_jsp.java:266
msgid "3 hop tunnel (very high anonymity, poor performance)"
msgstr "hầm 3 bước nhảy (độ ẩn danh rất cao, hiệu suất tệ)"
#: ../jsp/WEB-INF/classes/net/i2p/i2ptunnel/jsp/editClient_jsp.java:256
#: ../jsp/WEB-INF/classes/net/i2p/i2ptunnel/jsp/editServer_jsp.java:275
msgid "hop tunnel (very poor performance)"
msgstr "hầm bước nhảy (hiệu xuất rất tệ)"
#: ../jsp/WEB-INF/classes/net/i2p/i2ptunnel/jsp/editClient_jsp.java:261
#: ../jsp/WEB-INF/classes/net/i2p/i2ptunnel/jsp/editServer_jsp.java:280
msgid "Variance"
msgstr "Độ khác biệt"
#: ../jsp/WEB-INF/classes/net/i2p/i2ptunnel/jsp/editClient_jsp.java:268
#: ../jsp/WEB-INF/classes/net/i2p/i2ptunnel/jsp/editServer_jsp.java:287
msgid "0 hop variance (no randomisation, consistant performance)"
msgstr "Khác biệt 0 bước (không ngẫu nhiên, hiệu xuất vững)"
#: ../jsp/WEB-INF/classes/net/i2p/i2ptunnel/jsp/editClient_jsp.java:272
#: ../jsp/WEB-INF/classes/net/i2p/i2ptunnel/jsp/editServer_jsp.java:291
msgid ""
"+ 0-1 hop variance (medium additive randomisation, subtractive performance)"
msgstr ""
"Khác biệt + 0-1 bước (độ ngẫu nhiên bổ xung trung bình, hiệu xuất trừ)"
#: ../jsp/WEB-INF/classes/net/i2p/i2ptunnel/jsp/editClient_jsp.java:276
#: ../jsp/WEB-INF/classes/net/i2p/i2ptunnel/jsp/editServer_jsp.java:295
msgid ""
"+ 0-2 hop variance (high additive randomisation, subtractive performance)"
msgstr "Khác biệt + 0-2 bước (độ ngẫu nhiên bổ xung cao, hiệu xuất trừ)"
#: ../jsp/WEB-INF/classes/net/i2p/i2ptunnel/jsp/editClient_jsp.java:280
#: ../jsp/WEB-INF/classes/net/i2p/i2ptunnel/jsp/editServer_jsp.java:299
msgid "+/- 0-1 hop variance (standard randomisation, standard performance)"
msgstr "Khác biệt +/- 0-1 bước (độ ngẫu nhiên chuẩn, hiệu xuất chuẩn)"
#: ../jsp/WEB-INF/classes/net/i2p/i2ptunnel/jsp/editClient_jsp.java:284
#: ../jsp/WEB-INF/classes/net/i2p/i2ptunnel/jsp/editServer_jsp.java:303
msgid "+/- 0-2 hop variance (not recommended)"
msgstr "Khác biệt +/- 0-2 bước (không nên)"
#: ../jsp/WEB-INF/classes/net/i2p/i2ptunnel/jsp/editClient_jsp.java:296
#: ../jsp/WEB-INF/classes/net/i2p/i2ptunnel/jsp/editServer_jsp.java:315
msgid "hop variance"
msgstr "khác biệt bước"
#: ../jsp/WEB-INF/classes/net/i2p/i2ptunnel/jsp/editClient_jsp.java:301
#: ../jsp/WEB-INF/classes/net/i2p/i2ptunnel/jsp/editServer_jsp.java:320
msgid "Count"
msgstr "Số lượng"
#: ../jsp/WEB-INF/classes/net/i2p/i2ptunnel/jsp/editClient_jsp.java:308
#: ../jsp/WEB-INF/classes/net/i2p/i2ptunnel/jsp/editServer_jsp.java:327
msgid "1 inbound, 1 outbound tunnel (low bandwidth usage, less reliability)"
msgstr "1 đường vô, 1 đường hầm ra (dùng băng thông thấp, độ bền vững thấp)"
#: ../jsp/WEB-INF/classes/net/i2p/i2ptunnel/jsp/editClient_jsp.java:312
#: ../jsp/WEB-INF/classes/net/i2p/i2ptunnel/jsp/editServer_jsp.java:331
msgid ""
"2 inbound, 2 outbound tunnels (standard bandwidth usage, standard "
"reliability)"
msgstr ""
"2 đường vô, 2 đường hầm ra (dùng băng thông trung bình, độ bền vững trung "
"bình)"
#: ../jsp/WEB-INF/classes/net/i2p/i2ptunnel/jsp/editClient_jsp.java:316
#: ../jsp/WEB-INF/classes/net/i2p/i2ptunnel/jsp/editServer_jsp.java:335
msgid ""
"3 inbound, 3 outbound tunnels (higher bandwidth usage, higher reliability)"
msgstr "3 đường vô, 3 đường hầm ra (dùng băng thông cao, độ bền vững cao)"
#: ../jsp/WEB-INF/classes/net/i2p/i2ptunnel/jsp/editClient_jsp.java:325
#: ../jsp/WEB-INF/classes/net/i2p/i2ptunnel/jsp/editServer_jsp.java:344
msgid "tunnels"
msgstr "đường hầm"
#: ../jsp/WEB-INF/classes/net/i2p/i2ptunnel/jsp/editClient_jsp.java:330
#: ../jsp/WEB-INF/classes/net/i2p/i2ptunnel/jsp/editServer_jsp.java:349
msgid "Backup Count"
msgstr "Số lượng trừ bị"
#: ../jsp/WEB-INF/classes/net/i2p/i2ptunnel/jsp/editClient_jsp.java:337
#: ../jsp/WEB-INF/classes/net/i2p/i2ptunnel/jsp/editServer_jsp.java:356
msgid "0 backup tunnels (0 redundancy, no added resource usage)"
msgstr "0 hầm trừ bị (độ dư 0, không thêm tài nguyên)"
#: ../jsp/WEB-INF/classes/net/i2p/i2ptunnel/jsp/editClient_jsp.java:341
#: ../jsp/WEB-INF/classes/net/i2p/i2ptunnel/jsp/editServer_jsp.java:360
msgid "1 backup tunnel each direction (low redundancy, low resource usage)"
msgstr "1 hầm trừ bị mỗi hướng (độ dư thấp, dùng tài nguyên thấp)"
#: ../jsp/WEB-INF/classes/net/i2p/i2ptunnel/jsp/editClient_jsp.java:345
#: ../jsp/WEB-INF/classes/net/i2p/i2ptunnel/jsp/editServer_jsp.java:364
msgid ""
"2 backup tunnels each direction (medium redundancy, medium resource usage)"
msgstr "2 hầm trừ bị mỗi hướng (độ dư trung bình, dùng tài nguyên trung bình)"
#: ../jsp/WEB-INF/classes/net/i2p/i2ptunnel/jsp/editClient_jsp.java:349
#: ../jsp/WEB-INF/classes/net/i2p/i2ptunnel/jsp/editServer_jsp.java:368
msgid "3 backup tunnels each direction (high redundancy, high resource usage)"
msgstr "3 hầm trừ bị mỗi hướng (độ dư cao, dùng tài nguyên cao)"
#: ../jsp/WEB-INF/classes/net/i2p/i2ptunnel/jsp/editClient_jsp.java:358
#: ../jsp/WEB-INF/classes/net/i2p/i2ptunnel/jsp/editServer_jsp.java:377
msgid "backup tunnels"
msgstr "hầm trừ bị"
#: ../jsp/WEB-INF/classes/net/i2p/i2ptunnel/jsp/editClient_jsp.java:365
#: ../jsp/WEB-INF/classes/net/i2p/i2ptunnel/jsp/editServer_jsp.java:384
msgid "Profile"
msgstr "Hồ sơ"
#: ../jsp/WEB-INF/classes/net/i2p/i2ptunnel/jsp/editClient_jsp.java:372
#: ../jsp/WEB-INF/classes/net/i2p/i2ptunnel/jsp/editServer_jsp.java:391
msgid "interactive connection"
msgstr "đường nối tương tác"
#: ../jsp/WEB-INF/classes/net/i2p/i2ptunnel/jsp/editClient_jsp.java:376
#: ../jsp/WEB-INF/classes/net/i2p/i2ptunnel/jsp/editServer_jsp.java:395
msgid "bulk connection (downloads/websites/BT)"
msgstr "đường nối khổ to"
#: ../jsp/WEB-INF/classes/net/i2p/i2ptunnel/jsp/editClient_jsp.java:378
msgid "Delay Connect"
msgstr "Chờ nối kết"
#: ../jsp/WEB-INF/classes/net/i2p/i2ptunnel/jsp/editClient_jsp.java:382
msgid "for request/response connections"
msgstr "cho nối kết yêu cầu/phản hồi"
#: ../jsp/WEB-INF/classes/net/i2p/i2ptunnel/jsp/editClient_jsp.java:386
#: ../jsp/WEB-INF/classes/net/i2p/i2ptunnel/jsp/editServer_jsp.java:399
msgid "Router I2CP Address"
msgstr "Địa chỉ Định Tuyến I2CP"
#: ../jsp/WEB-INF/classes/net/i2p/i2ptunnel/jsp/editClient_jsp.java:396
#: ../jsp/WEB-INF/classes/net/i2p/i2ptunnel/jsp/editServer_jsp.java:148
#: ../jsp/WEB-INF/classes/net/i2p/i2ptunnel/jsp/editServer_jsp.java:409
#: ../jsp/WEB-INF/classes/net/i2p/i2ptunnel/jsp/index_jsp.java:247
#: ../jsp/WEB-INF/classes/net/i2p/i2ptunnel/jsp/index_jsp.java:269
msgid "Port"
msgstr "Cổng"
#: ../jsp/WEB-INF/classes/net/i2p/i2ptunnel/jsp/editClient_jsp.java:406
#: ../jsp/WEB-INF/classes/net/i2p/i2ptunnel/jsp/editServer_jsp.java:479
msgid "Reduce tunnel quantity when idle"
msgstr "Giảm số lượng hầm khi rổi"
#: ../jsp/WEB-INF/classes/net/i2p/i2ptunnel/jsp/editClient_jsp.java:408
#: ../jsp/WEB-INF/classes/net/i2p/i2ptunnel/jsp/editClient_jsp.java:422
#: ../jsp/WEB-INF/classes/net/i2p/i2ptunnel/jsp/editClient_jsp.java:430
#: ../jsp/WEB-INF/classes/net/i2p/i2ptunnel/jsp/editClient_jsp.java:442
#: ../jsp/WEB-INF/classes/net/i2p/i2ptunnel/jsp/editClient_jsp.java:452
#: ../jsp/WEB-INF/classes/net/i2p/i2ptunnel/jsp/editClient_jsp.java:472
#: ../jsp/WEB-INF/classes/net/i2p/i2ptunnel/jsp/editClient_jsp.java:486
#: ../jsp/WEB-INF/classes/net/i2p/i2ptunnel/jsp/editServer_jsp.java:419
#: ../jsp/WEB-INF/classes/net/i2p/i2ptunnel/jsp/editServer_jsp.java:481
msgid "Enable"
msgstr "Mở"
#: ../jsp/WEB-INF/classes/net/i2p/i2ptunnel/jsp/editClient_jsp.java:412
#: ../jsp/WEB-INF/classes/net/i2p/i2ptunnel/jsp/editServer_jsp.java:485
msgid "Reduced tunnel count"
msgstr "Số lượng đường hầm giảm"
#: ../jsp/WEB-INF/classes/net/i2p/i2ptunnel/jsp/editClient_jsp.java:416
#: ../jsp/WEB-INF/classes/net/i2p/i2ptunnel/jsp/editClient_jsp.java:436
#: ../jsp/WEB-INF/classes/net/i2p/i2ptunnel/jsp/editServer_jsp.java:489
msgid "Idle minutes"
msgstr "Số phút rảnh rổi"
#: ../jsp/WEB-INF/classes/net/i2p/i2ptunnel/jsp/editClient_jsp.java:420
msgid "Close tunnels when idle"
msgstr "Đóng đường hầm khi rảnh rổi"
#: ../jsp/WEB-INF/classes/net/i2p/i2ptunnel/jsp/editClient_jsp.java:426
msgid "New Keys on Reopen"
msgstr "Chìa khóa mới khi mở lại"
#: ../jsp/WEB-INF/classes/net/i2p/i2ptunnel/jsp/editClient_jsp.java:434
#: ../jsp/WEB-INF/classes/net/i2p/i2ptunnel/jsp/editServer_jsp.java:435
msgid "Disable"
msgstr "Tắt"
#: ../jsp/WEB-INF/classes/net/i2p/i2ptunnel/jsp/editClient_jsp.java:440
msgid "Delay tunnel open until required"
msgstr "Đợi mở đường hầm cho đến khi yêu cầu"
#: ../jsp/WEB-INF/classes/net/i2p/i2ptunnel/jsp/editClient_jsp.java:450
msgid "Persistent private key"
msgstr "Chìa khóa riêng bền dai"
#: ../jsp/WEB-INF/classes/net/i2p/i2ptunnel/jsp/editClient_jsp.java:456
msgid "File"
msgstr "Tập tin"
#: ../jsp/WEB-INF/classes/net/i2p/i2ptunnel/jsp/editClient_jsp.java:460
#: ../jsp/WEB-INF/classes/net/i2p/i2ptunnel/jsp/editServer_jsp.java:220
msgid "Local destination"
msgstr "Điểm đến nội bộ"
#: ../jsp/WEB-INF/classes/net/i2p/i2ptunnel/jsp/editClient_jsp.java:464
msgid "(if known)"
msgstr "(nếu biết)"
#: ../jsp/WEB-INF/classes/net/i2p/i2ptunnel/jsp/editClient_jsp.java:470
msgid "Local Authorization"
msgstr "Cho phép nội bộ"
#: ../jsp/WEB-INF/classes/net/i2p/i2ptunnel/jsp/editClient_jsp.java:476
#: ../jsp/WEB-INF/classes/net/i2p/i2ptunnel/jsp/editClient_jsp.java:490
msgid "Username"
msgstr "Tên đăng nhập"
#: ../jsp/WEB-INF/classes/net/i2p/i2ptunnel/jsp/editClient_jsp.java:480
#: ../jsp/WEB-INF/classes/net/i2p/i2ptunnel/jsp/editClient_jsp.java:494
msgid "Password"
msgstr "Mật khẩu"
#: ../jsp/WEB-INF/classes/net/i2p/i2ptunnel/jsp/editClient_jsp.java:484
msgid "Outproxy Authorization"
msgstr "Cho phép Outproxy"
#: ../jsp/WEB-INF/classes/net/i2p/i2ptunnel/jsp/editClient_jsp.java:502
msgid "Jump URL List"
msgstr "Danh sách đường dẫn nhảy"
#: ../jsp/WEB-INF/classes/net/i2p/i2ptunnel/jsp/editClient_jsp.java:508
#: ../jsp/WEB-INF/classes/net/i2p/i2ptunnel/jsp/editServer_jsp.java:525
msgid "Custom options"
msgstr "Tùy chọn tùy ý"
#: ../jsp/WEB-INF/classes/net/i2p/i2ptunnel/jsp/editClient_jsp.java:512
#: ../jsp/WEB-INF/classes/net/i2p/i2ptunnel/jsp/editServer_jsp.java:529
msgid ""
"NOTE: If tunnel is currently running, most changes will not take effect "
"until tunnel is stopped and restarted."
msgstr ""
"GHI CHÚ: nếu đường hầm đang chạy thì những sửa đổi sẽ không có tác động cho "
"đến khi đường hầm ngừng và khởi động lại."
#: ../jsp/WEB-INF/classes/net/i2p/i2ptunnel/jsp/editClient_jsp.java:514
#: ../jsp/WEB-INF/classes/net/i2p/i2ptunnel/jsp/editServer_jsp.java:531
msgid "Cancel"
msgstr "Hủy"
#: ../jsp/WEB-INF/classes/net/i2p/i2ptunnel/jsp/editClient_jsp.java:518
#: ../jsp/WEB-INF/classes/net/i2p/i2ptunnel/jsp/editServer_jsp.java:535
msgid "Delete"
msgstr "Xóa"
#: ../jsp/WEB-INF/classes/net/i2p/i2ptunnel/jsp/editClient_jsp.java:520
#: ../jsp/WEB-INF/classes/net/i2p/i2ptunnel/jsp/editServer_jsp.java:537
msgid "Save"
msgstr "Giữ"
#: ../jsp/WEB-INF/classes/net/i2p/i2ptunnel/jsp/editServer_jsp.java:73
msgid "I2P Tunnel Manager - Edit Server Tunnel"
msgstr "Quản Lý Hầm I2P - Điều chỉnh Hầm Máy Chủ"
#: ../jsp/WEB-INF/classes/net/i2p/i2ptunnel/jsp/editServer_jsp.java:93
msgid "Edit server settings"
msgstr "Chỉnh sửa cấu hình máy chủ"
#: ../jsp/WEB-INF/classes/net/i2p/i2ptunnel/jsp/editServer_jsp.java:101
msgid "New server settings"
msgstr "Cấu hình mới cho máy chủ"
#: ../jsp/WEB-INF/classes/net/i2p/i2ptunnel/jsp/editServer_jsp.java:199
msgid "Website name"
msgstr "Tên trang web"
#: ../jsp/WEB-INF/classes/net/i2p/i2ptunnel/jsp/editServer_jsp.java:203
msgid "(leave blank for outproxies)"
msgstr "(để trống cho outproxies)"
#: ../jsp/WEB-INF/classes/net/i2p/i2ptunnel/jsp/editServer_jsp.java:208
msgid "Private key file"
msgstr "Tập tin khóa riêng"
#: ../jsp/WEB-INF/classes/net/i2p/i2ptunnel/jsp/editServer_jsp.java:230
msgid "Add to local addressbook"
msgstr "Thêm vô sổ địa chỉ địa phương"
#: ../jsp/WEB-INF/classes/net/i2p/i2ptunnel/jsp/editServer_jsp.java:237
msgid "Hostname Signature"
msgstr "Chữ ký tên máy chủ"
#: ../jsp/WEB-INF/classes/net/i2p/i2ptunnel/jsp/editServer_jsp.java:417
msgid "Encrypt Leaseset"
msgstr "Leaseset mã hóa"
#: ../jsp/WEB-INF/classes/net/i2p/i2ptunnel/jsp/editServer_jsp.java:423
msgid "Encryption Key"
msgstr "Khóa mã hóa"
#: ../jsp/WEB-INF/classes/net/i2p/i2ptunnel/jsp/editServer_jsp.java:427
msgid "Generate New Key"
msgstr "Tạo khóa mới"
#: ../jsp/WEB-INF/classes/net/i2p/i2ptunnel/jsp/editServer_jsp.java:429
msgid "Generate"
msgstr "Kiến tạo"
#: ../jsp/WEB-INF/classes/net/i2p/i2ptunnel/jsp/editServer_jsp.java:431
#: ../jsp/WEB-INF/classes/net/i2p/i2ptunnel/jsp/editServer_jsp.java:523
msgid "(Tunnel must be stopped first)"
msgstr "(Hầm phải ngưng trước)"
#: ../jsp/WEB-INF/classes/net/i2p/i2ptunnel/jsp/editServer_jsp.java:433
msgid "Restricted Access List"
msgstr "Sổ truy cập giới hạn"
#: ../jsp/WEB-INF/classes/net/i2p/i2ptunnel/jsp/editServer_jsp.java:439
msgid "Whitelist"
msgstr "Sổ trắng"
#: ../jsp/WEB-INF/classes/net/i2p/i2ptunnel/jsp/editServer_jsp.java:443
msgid "Blacklist"
msgstr "Sổ đen"
#: ../jsp/WEB-INF/classes/net/i2p/i2ptunnel/jsp/editServer_jsp.java:447
msgid "Access List"
msgstr "Sổ truy cập"
#: ../jsp/WEB-INF/classes/net/i2p/i2ptunnel/jsp/editServer_jsp.java:451
msgid "Inbound connection limits (0=unlimited)"
msgstr "Giới hạn đường nối vào (0=không giới hạn)"
#: ../jsp/WEB-INF/classes/net/i2p/i2ptunnel/jsp/editServer_jsp.java:453
msgid "Per client"
msgstr "Mỗi khách"
#: ../jsp/WEB-INF/classes/net/i2p/i2ptunnel/jsp/editServer_jsp.java:455
msgid "Per minute"
msgstr "Mỗi phút"
#: ../jsp/WEB-INF/classes/net/i2p/i2ptunnel/jsp/editServer_jsp.java:459
msgid "Per hour"
msgstr "Mỗi giờ"
#: ../jsp/WEB-INF/classes/net/i2p/i2ptunnel/jsp/editServer_jsp.java:463
msgid "Per day"
msgstr "Mỗi ngày"
#: ../jsp/WEB-INF/classes/net/i2p/i2ptunnel/jsp/editServer_jsp.java:467
msgid "Total"
msgstr "Tổng cộng"
#: ../jsp/WEB-INF/classes/net/i2p/i2ptunnel/jsp/editServer_jsp.java:475
msgid "Max concurrent connections (0=unlimited)"
msgstr "Số đường nối tối đa cùng lúc (0=không giới hạn)"
#: ../jsp/WEB-INF/classes/net/i2p/i2ptunnel/jsp/editServer_jsp.java:493
msgid "New Certificate type"
msgstr "Loại Chứng chỉ mới"
#: ../jsp/WEB-INF/classes/net/i2p/i2ptunnel/jsp/editServer_jsp.java:495
msgid "None"
msgstr "Không có"
#: ../jsp/WEB-INF/classes/net/i2p/i2ptunnel/jsp/editServer_jsp.java:499
msgid "Hashcash (effort)"
msgstr "Hashcash (nỗ lực)"
#: ../jsp/WEB-INF/classes/net/i2p/i2ptunnel/jsp/editServer_jsp.java:505
msgid "Hashcash Calc Time"
msgstr "Hashcash (giờ tính toán)"
#: ../jsp/WEB-INF/classes/net/i2p/i2ptunnel/jsp/editServer_jsp.java:507
msgid "Estimate"
msgstr "Ước lượng"
#: ../jsp/WEB-INF/classes/net/i2p/i2ptunnel/jsp/editServer_jsp.java:509
msgid "Hidden"
msgstr "Dấu"
#: ../jsp/WEB-INF/classes/net/i2p/i2ptunnel/jsp/editServer_jsp.java:513
msgid "Signed (signed by)"
msgstr "Ký (ký bởi)"
#: ../jsp/WEB-INF/classes/net/i2p/i2ptunnel/jsp/editServer_jsp.java:519
msgid "Modify Certificate"
msgstr "Chứng chỉ Điều chỉnh"
#: ../jsp/WEB-INF/classes/net/i2p/i2ptunnel/jsp/editServer_jsp.java:521
msgid "Modify"
msgstr "Điều chỉnh"
#: ../jsp/WEB-INF/classes/net/i2p/i2ptunnel/jsp/index_jsp.java:74
msgid "I2P Tunnel Manager - List"
msgstr "Quản Lý Hầm I2P - Danh sách"
#: ../jsp/WEB-INF/classes/net/i2p/i2ptunnel/jsp/index_jsp.java:86
msgid "Status Messages"
msgstr "Thông báo hiện trạng"
#: ../jsp/WEB-INF/classes/net/i2p/i2ptunnel/jsp/index_jsp.java:90
msgid "Refresh"
msgstr "Nạp lại"
#: ../jsp/WEB-INF/classes/net/i2p/i2ptunnel/jsp/index_jsp.java:94
msgid "Stop All"
msgstr "Ngưng tất cả"
#: ../jsp/WEB-INF/classes/net/i2p/i2ptunnel/jsp/index_jsp.java:98
msgid "Start All"
msgstr "Bắt đầu tất cả"
#: ../jsp/WEB-INF/classes/net/i2p/i2ptunnel/jsp/index_jsp.java:102
msgid "Restart All"
msgstr "Khởi động lại tất cả"
#: ../jsp/WEB-INF/classes/net/i2p/i2ptunnel/jsp/index_jsp.java:106
msgid "Reload Config"
msgstr "Nạp lại cấu hình"
#: ../jsp/WEB-INF/classes/net/i2p/i2ptunnel/jsp/index_jsp.java:108
msgid "I2P Server Tunnels"
msgstr "Đường hầm máy chủ I2P"
#: ../jsp/WEB-INF/classes/net/i2p/i2ptunnel/jsp/index_jsp.java:112
#: ../jsp/WEB-INF/classes/net/i2p/i2ptunnel/jsp/index_jsp.java:133
msgid "Points at"
msgstr "Điểm ở"
#: ../jsp/WEB-INF/classes/net/i2p/i2ptunnel/jsp/index_jsp.java:114
#: ../jsp/WEB-INF/classes/net/i2p/i2ptunnel/jsp/index_jsp.java:156
#: ../jsp/WEB-INF/classes/net/i2p/i2ptunnel/jsp/index_jsp.java:160
msgid "Preview"
msgstr "Xem trước"
#: ../jsp/WEB-INF/classes/net/i2p/i2ptunnel/jsp/index_jsp.java:116
#: ../jsp/WEB-INF/classes/net/i2p/i2ptunnel/jsp/index_jsp.java:180
#: ../jsp/WEB-INF/classes/net/i2p/i2ptunnel/jsp/index_jsp.java:253
#: ../jsp/WEB-INF/classes/net/i2p/i2ptunnel/jsp/index_jsp.java:300
msgid "Status"
msgstr "Hiện trạng"
#: ../jsp/WEB-INF/classes/net/i2p/i2ptunnel/jsp/index_jsp.java:166
msgid "Base32 Address"
msgstr "Địa chỉ Base32"
#: ../jsp/WEB-INF/classes/net/i2p/i2ptunnel/jsp/index_jsp.java:174
msgid "No Preview"
msgstr "Không xem trước"
#: ../jsp/WEB-INF/classes/net/i2p/i2ptunnel/jsp/index_jsp.java:187
#: ../jsp/WEB-INF/classes/net/i2p/i2ptunnel/jsp/index_jsp.java:307
msgid "Starting..."
msgstr "Bắt đầu..."
#: ../jsp/WEB-INF/classes/net/i2p/i2ptunnel/jsp/index_jsp.java:194
#: ../jsp/WEB-INF/classes/net/i2p/i2ptunnel/jsp/index_jsp.java:208
#: ../jsp/WEB-INF/classes/net/i2p/i2ptunnel/jsp/index_jsp.java:314
#: ../jsp/WEB-INF/classes/net/i2p/i2ptunnel/jsp/index_jsp.java:328
#: ../jsp/WEB-INF/classes/net/i2p/i2ptunnel/jsp/index_jsp.java:342
msgid "Stop"
msgstr "Ngưng"
#: ../jsp/WEB-INF/classes/net/i2p/i2ptunnel/jsp/index_jsp.java:201
#: ../jsp/WEB-INF/classes/net/i2p/i2ptunnel/jsp/index_jsp.java:335
msgid "Running"
msgstr "Đang chạy"
#: ../jsp/WEB-INF/classes/net/i2p/i2ptunnel/jsp/index_jsp.java:215
#: ../jsp/WEB-INF/classes/net/i2p/i2ptunnel/jsp/index_jsp.java:349
msgid "Stopped"
msgstr "Đã ngưng"
#: ../jsp/WEB-INF/classes/net/i2p/i2ptunnel/jsp/index_jsp.java:222
#: ../jsp/WEB-INF/classes/net/i2p/i2ptunnel/jsp/index_jsp.java:356
msgid "Start"
msgstr "Bắt đầu"
#: ../jsp/WEB-INF/classes/net/i2p/i2ptunnel/jsp/index_jsp.java:237
msgid "New server tunnel"
msgstr "Hầm chủ mới"
#: ../jsp/WEB-INF/classes/net/i2p/i2ptunnel/jsp/index_jsp.java:239
#: ../jsp/WEB-INF/classes/net/i2p/i2ptunnel/jsp/index_jsp.java:399
msgid "Standard"
msgstr "Chuẩn"
#: ../jsp/WEB-INF/classes/net/i2p/i2ptunnel/jsp/index_jsp.java:241
#: ../jsp/WEB-INF/classes/net/i2p/i2ptunnel/jsp/index_jsp.java:401
msgid "Create"
msgstr "Kiến tạo"
#: ../jsp/WEB-INF/classes/net/i2p/i2ptunnel/jsp/index_jsp.java:243
msgid "I2P Client Tunnels"
msgstr "Hầm khách I2P"
#: ../jsp/WEB-INF/classes/net/i2p/i2ptunnel/jsp/index_jsp.java:251
#: ../jsp/WEB-INF/classes/net/i2p/i2ptunnel/jsp/index_jsp.java:286
msgid "Interface"
msgstr "Giao diện"
#: ../jsp/WEB-INF/classes/net/i2p/i2ptunnel/jsp/index_jsp.java:321
msgid "Standby"
msgstr "Chờ"
#: ../jsp/WEB-INF/classes/net/i2p/i2ptunnel/jsp/index_jsp.java:366
msgid "Outproxy"
msgstr "Outproxy"
#: ../jsp/WEB-INF/classes/net/i2p/i2ptunnel/jsp/index_jsp.java:384
msgid "none"
msgstr "không có"
#: ../jsp/WEB-INF/classes/net/i2p/i2ptunnel/jsp/index_jsp.java:397
msgid "New client tunnel"
msgstr "Đường hầm mới"

View File

@@ -67,20 +67,16 @@
<gunzip src="${jetty.filename}" dest="jetty.tar" />
<untar src="jetty.tar" dest="." />
<mkdir dir="jettylib" />
<copy todir="jettylib">
<copy todir="jettylib" preservelastmodified="true" >
<fileset dir="${jetty.base}/lib">
<include name="*.jar" />
</fileset>
</copy>
<copy todir="jettylib">
<fileset dir="${jetty.base}/ext">
<include name="ant.jar" />
<include name="commons-el.jar" />
<include name="commons-logging.jar" />
<include name="jasper-compiler.jar" />
<include name="jasper-runtime.jar" />
<include name="javax.servlet.jar" />
<include name="org.mortbay.jetty.jar" />
</fileset>
</copy>
<delete file="jetty.tar" />
@@ -102,7 +98,7 @@
</javac>
</target>
<target name="jar" depends="compile, jarUpToDate" unless="jar.uptodate" >
<target name="listChangedFiles" depends="jarUpToDate" if="shouldListChanges" >
<exec executable="mtn" outputproperty="workspace.changes" errorproperty="mtn.error2" failifexecutionfails="false" >
<arg value="list" />
<arg value="changed" />
@@ -114,6 +110,11 @@
<arg value="[:space:]" />
<arg value="," />
</exec>
</target>
<target name="jar" depends="compile, jarUpToDate, listChangedFiles" unless="jar.uptodate" >
<!-- set if unset -->
<property name="workspace.changes.tr" value="" />
<jar destfile="./jettylib/org.mortbay.jetty.jar" basedir="./build/obj" includes="**/*.class" update="true" >
<manifest>
<attribute name="Build-Date" value="${build.timestamp}" />
@@ -127,6 +128,14 @@
<uptodate property="jar.uptodate" targetfile="jettylib/org.mortbay.jetty.jar" >
<srcfiles dir= "build/obj" includes="**/*.class" />
</uptodate>
<condition property="shouldListChanges" >
<and>
<not>
<isset property="jar.uptodate" />
</not>
<isset property="mtn.available" />
</and>
</condition>
</target>
<target name="clean" >

Binary file not shown.

Binary file not shown.

View File

@@ -31,7 +31,7 @@
</javac>
</target>
<target name="jar" depends="compile, jarUpToDate" unless="jar.uptodate" >
<target name="listChangedFiles" depends="jarUpToDate" if="shouldListChanges" >
<exec executable="mtn" outputproperty="workspace.changes" errorproperty="mtn.error2" failifexecutionfails="false" >
<arg value="list" />
<arg value="changed" />
@@ -43,6 +43,11 @@
<arg value="[:space:]" />
<arg value="," />
</exec>
</target>
<target name="jar" depends="compile, jarUpToDate, listChangedFiles" unless="jar.uptodate" >
<!-- set if unset -->
<property name="workspace.changes.tr" value="" />
<jar destfile="./build/mstreaming.jar" basedir="./build/obj" includes="**/*.class" >
<manifest>
<attribute name="Build-Date" value="${build.timestamp}" />
@@ -56,6 +61,14 @@
<uptodate property="jar.uptodate" targetfile="build/mstreaming.jar" >
<srcfiles dir= "." includes="build/obj/**/*.class" />
</uptodate>
<condition property="shouldListChanges" >
<and>
<not>
<isset property="jar.uptodate" />
</not>
<isset property="mtn.available" />
</and>
</condition>
</target>
<target name="javadoc">

View File

@@ -1,7 +1,14 @@
<html><body>
<p>Implements a TCP-like (reliable, authenticated, in order) set of sockets for
communicating over the IP-like (unreliable, unauthenticated, unordered) I2P
messages.</p>
messages.
Note that this class is split across two jars, streaming.jar and ministreaming.jar.
The interfaces and some very old code are in ministreaming.jar, but the
real work gets done in streaming.jar. Clients must have both jars
in their classpath.
Most clients will require (only) streaming.jar, ministreaming.jar, and i2p.jar
in their classpath to communicate with the router.
</p>
<p>When an application wants to use streams, it must fetch an {@link
net.i2p.client.streaming.I2PSocketManager} from the {@link

View File

@@ -25,8 +25,8 @@
<pathelement location="../../systray/java/build/obj" />
<pathelement location="../../systray/java/lib/systray4j.jar" />
<pathelement location="../../desktopgui/build" />
<pathelement location="../../../installer/lib/wrapper/win32/wrapper.jar" /> <!-- we dont care if we're not on win32 -->
<pathelement location="../../jrobin/jrobin-1.4.0.jar" />
<pathelement location="../../../installer/lib/wrapper/all/wrapper.jar" />
<pathelement location="../../jrobin/jrobin-1.5.9.1.jar" />
</classpath>
</depend>
</target>
@@ -57,8 +57,8 @@
<pathelement location="../../systray/java/build/systray.jar" />
<pathelement location="../../systray/java/lib/systray4j.jar" />
<pathelement location="../../desktopgui/dist/desktopgui.jar" />
<pathelement location="../../../installer/lib/wrapper/win32/wrapper.jar" /> <!-- we dont care if we're not on win32 -->
<pathelement location="../../jrobin/jrobin-1.4.0.jar" />
<pathelement location="../../../installer/lib/wrapper/all/wrapper.jar" />
<pathelement location="../../jrobin/jrobin-1.5.9.1.jar" />
</classpath>
</javac>
</target>
@@ -67,7 +67,7 @@
<target name="jar" depends="jar1, war, bundle" />
<!-- the jar without the latest message classes from the jsps -->
<target name="jar1" depends="compile, jarUpToDate" unless="jar.uptodate" >
<target name="listChangedFiles" depends="jarUpToDate" if="shouldListChanges" >
<exec executable="mtn" outputproperty="workspace.changes.j" errorproperty="mtn.error2" failifexecutionfails="false" >
<arg value="list" />
<arg value="changed" />
@@ -80,6 +80,11 @@
<arg value="[:space:]" />
<arg value="," />
</exec>
</target>
<target name="jar1" depends="compile, jarUpToDate, listChangedFiles" unless="jar.uptodate" >
<!-- set if unset -->
<property name="workspace.changes.j.tr" value="" />
<jar destfile="./build/routerconsole.jar" basedir="./build/obj" includes="**/*.class">
<manifest>
<!-- top level installer will rename to jrobin.jar -->
@@ -90,22 +95,16 @@
<attribute name="Workspace-Changes" value="${workspace.changes.j.tr}" />
</manifest>
</jar>
<!-- jrobin taken out of routerconsole.jar in 0.7.12
<delete dir="./tmpextract" />
<unjar src="../../jrobin/jrobin-1.4.0.jar" dest="./tmpextract" />
<jar destfile="./build/routerconsole.jar" basedir="./tmpextract" update="true" />
<delete dir="./tmpextract" />
-->
</target>
<!-- this is tricky because the message classes go in the jar, not in the war -->
<target name="bundle" depends="jar1, precompilejsp" >
<!-- Update the messages_*.po files.
We need to supply the bat file for windows, and then change the fail property to true -->
<exec executable="sh" osfamily="unix" failifexecutionfails="true" >
<exec executable="sh" osfamily="unix" failifexecutionfails="true" failonerror="${require.gettext}" >
<arg value="./bundle-messages.sh" />
</exec>
<exec executable="sh" osfamily="mac" failifexecutionfails="true" >
<exec executable="sh" osfamily="mac" failifexecutionfails="true" failonerror="${require.gettext}" >
<arg value="./bundle-messages.sh" />
</exec>
<!-- multi-lang is optional -->
@@ -121,27 +120,34 @@
<uptodate property="jar.uptodate" targetfile="build/routerconsole.jar" >
<srcfiles dir= "build/obj" includes="**/*.class" />
</uptodate>
<condition property="shouldListChanges" >
<and>
<not>
<isset property="jar.uptodate" />
</not>
<isset property="mtn.available" />
</and>
</condition>
</target>
<target name="poupdate" depends="precompilejsp">
<!-- Update the messages_*.po files.
We need to supply the bat file for windows, and then change the fail property to true -->
<exec executable="sh" osfamily="unix" failifexecutionfails="true" >
<exec executable="sh" osfamily="unix" failifexecutionfails="true" failonerror="true" >
<arg value="./bundle-messages.sh" />
<arg value="-p" />
</exec>
<exec executable="sh" osfamily="mac" failifexecutionfails="true" >
<exec executable="sh" osfamily="mac" failifexecutionfails="true" failonerror="true" >
<arg value="./bundle-messages.sh" />
<arg value="-p" />
</exec>
<exec executable="sh" osfamily="windows" failifexecutionfails="true" >
<exec executable="sh" osfamily="windows" failifexecutionfails="true" failonerror="true" >
<arg value="./bundle-messages.sh" />
<arg value="-p" />
</exec>
</target>
<!-- does NOT update the message classes, as those go in the jar -->
<target name="war" depends="precompilejsp, warUpToDate" unless="war.uptodate" >
<target name="listChangedFiles2" depends="warUpToDate" if="shouldListChanges2" >
<exec executable="mtn" outputproperty="workspace.changes.w" errorproperty="mtn.error2" failifexecutionfails="false" >
<arg value="list" />
<arg value="changed" />
@@ -153,6 +159,12 @@
<arg value="[:space:]" />
<arg value="," />
</exec>
</target>
<!-- does NOT update the message classes, as those go in the jar -->
<target name="war" depends="precompilejsp, warUpToDate, listChangedFiles2" unless="war.uptodate" >
<!-- set if unset -->
<property name="workspace.changes.w.tr" value="" />
<!-- Don't include the css in the war, the main build.xml will copy it to docs/themes/console/ -->
<war destfile="build/routerconsole.war" webxml="../jsp/web-out.xml"
basedir="../jsp/" excludes="web.xml, *.css, **/*.java, *.jsp, *.jsi, web-fragment.xml, web-out.xml">
@@ -168,6 +180,14 @@
<uptodate property="war.uptodate" targetfile="build/routerconsole.war" >
<srcfiles dir= "../jsp" excludes="web.xml, web-fragment.xml, *.css, **/*.java, *.jsp, *.jsi" />
</uptodate>
<condition property="shouldListChanges" >
<and>
<not>
<isset property="jar.uptodate" />
</not>
<isset property="mtn.available" />
</and>
</condition>
</target>
<target name="precompilejsp" depends="jar1" unless="precompilejsp.uptodate">
@@ -217,7 +237,7 @@
<pathelement location="../../systray/java/build/obj" />
<pathelement location="../../systray/java/lib/systray4j.jar" />
<pathelement location="../../desktopgui/dist/desktopgui.jar" />
<pathelement location="../../../installer/lib/wrapper/win32/wrapper.jar" />
<pathelement location="../../../installer/lib/wrapper/all/wrapper.jar" />
<pathelement location="build/routerconsole.jar" />
<pathelement location="build/" />
<pathelement location="../../../router/java/build/router.jar" />
@@ -249,7 +269,7 @@
<pathelement location="../../systray/java/build/obj" />
<pathelement location="../../systray/java/lib/systray4j.jar" />
<pathelement location="../../desktopgui/dist/desktopgui.jar" />
<pathelement location="../../../installer/lib/wrapper/win32/wrapper.jar" />
<pathelement location="../../../installer/lib/wrapper/all/wrapper.jar" />
<pathelement location="build/routerconsole.jar" />
<pathelement location="build" />
<pathelement location="../../../router/java/build/router.jar" />

View File

@@ -12,6 +12,7 @@
CLASS=net.i2p.router.web.messages
TMPFILE=build/javafiles.txt
export TZ=UTC
RC=0
if [ "$1" = "-p" ]
then
@@ -43,6 +44,7 @@ fi
# list specific files in core/ and router/ here, so we don't scan the whole tree
ROUTERFILES="\
../../../core/java/src/net/i2p/data/DataHelper.java \
../../../router/java/src/net/i2p/router/Router.java \
../../../router/java/src/net/i2p/router/RouterThrottleImpl.java \
../../../router/java/src/net/i2p/router/tunnel/pool/BuildHandler.java \
../../../router/java/src/net/i2p/router/transport/TransportManager.java \
@@ -105,15 +107,17 @@ do
-o ${i}t
if [ $? -ne 0 ]
then
echo 'Warning - xgettext failed, not updating translations'
echo "ERROR - xgettext failed on ${i}, not updating translations"
rm -f ${i}t
RC=1
break
fi
msgmerge -U --backup=none $i ${i}t
if [ $? -ne 0 ]
then
echo 'Warning - msgmerge failed, not updating translations'
echo "ERROR - msgmerge failed on ${i}, not updating translations"
rm -f ${i}t
RC=1
break
fi
rm -f ${i}t
@@ -130,11 +134,13 @@ do
msgfmt --java --statistics -r $CLASS -l $LG -d build/obj $i
if [ $? -ne 0 ]
then
echo 'Warning - msgfmt failed, not updating translations'
echo "ERROR - msgfmt failed on ${i}, not updating translations"
# msgfmt leaves the class file there so the build would work the next time
find build/obj -name messages_${LG}.class -exec rm -f {} \;
RC=1
break
fi
fi
done
rm -f $TMPFILE
# todo: return failure
exit 0
exit $RC

View File

@@ -95,13 +95,22 @@ public class ConfigClientsHandler extends FormHandler {
// value
if (_action.startsWith("Stop ")) {
String app = _action.substring(5);
int appnum = -1;
try {
PluginStarter.stopPlugin(_context, app);
addFormNotice(_("Stopped plugin {0}", app));
} catch (Throwable e) {
addFormError(_("Error stopping plugin {0}", app) + ": " + e);
appnum = Integer.parseInt(app);
} catch (NumberFormatException nfe) {}
if (appnum >= 0) {
stopClient(appnum);
} else {
try {
PluginStarter.stopPlugin(_context, app);
addFormNotice(_("Stopped plugin {0}", app));
} catch (Throwable e) {
addFormError(_("Error stopping plugin {0}", app) + ": " + e);
_log.error("Error stopping plugin " + app, e);
}
}
return;
}
@@ -201,6 +210,20 @@ public class ConfigClientsHandler extends FormHandler {
return arr[0].trim();
}
// STUB for stopClient, not completed yet.
private void stopClient(int i) {
List<ClientAppConfig> clients = ClientAppConfig.getClientApps(_context);
if (i >= clients.size()) {
addFormError(_("Bad client index."));
return;
}
ClientAppConfig ca = clients.get(i);
//
// What do we do here?
//
addFormNotice(_("Client") + ' ' + _(ca.clientName) + ' ' + _("stopped") + '.');
}
private void startClient(int i) {
List<ClientAppConfig> clients = ClientAppConfig.getClientApps(_context);
if (i >= clients.size()) {

View File

@@ -109,7 +109,12 @@ public class ConfigClientsHelper extends HelperBase {
//"webConsole".equals(ca.clientName) || "Web console".equals(ca.clientName),
false,
ca.className + ((ca.args != null) ? " " + ca.args : ""), (""+cur).equals(_edit),
true, false, false, true, ca.disabled);
true, false,
// Enable this one and comment out the false below once the stub is filled in.
//!ca.disabled && !("webConsole".equals(ca.clientName) || "Web console".equals(ca.clientName)),
false,
true, ca.disabled);
}
if ("new".equals(_edit))

View File

@@ -104,14 +104,21 @@ public class ConfigStatsHandler extends FormHandler {
}
_context.router().setConfigSetting(StatManager.PROP_STAT_FILTER, stats.toString());
boolean graphsChanged = !_graphs.equals(_context.getProperty("stat.summaries"));
_context.router().setConfigSetting("stat.summaries", _graphs);
boolean fullChanged = _context.getBooleanProperty(StatManager.PROP_STAT_FULL) != _isFull;
_context.router().setConfigSetting(StatManager.PROP_STAT_FULL, "" + _isFull);
boolean ok = _context.router().saveConfig();
if (ok)
_context.router().saveConfig();
if (!_stats.isEmpty())
addFormNotice(_("Stat filter and location updated successfully to") + ": " + stats.toString());
else
addFormError(_("Failed to update the stat filter and location"));
addFormNotice(_("Graph list updated, may take up to 60s to be reflected here and on the <a href=\"graphs.jsp\">Graphs Page</a>"));
if (fullChanged) {
if (_isFull)
addFormNotice(_("Full statistics enabled - restart required to take effect"));
else
addFormNotice(_("Full statistics disabled - restart required to take effect"));
}
if (graphsChanged)
addFormNotice(_("Graph list updated, may take up to 60s to be reflected here and on the <a href=\"graphs.jsp\">Graphs Page</a>"));
}
}

View File

@@ -46,12 +46,22 @@ public class ConfigUIHelper extends HelperBase {
return rv;
}
private static final String langs[] = {"ar", "de", "en", "es", "fr", "nl", "pt", "ru", "sv", "zh"};
private static final String flags[] = {"lang_ar", "de", "us", "es", "fr", "nl", "pt", "ru", "se", "cn"};
/**
* Each language has the ISO code, the flag, and the name.
* Alphabetical by the ISO code please.
* See http://en.wikipedia.org/wiki/ISO_639-1 .
* Any language-specific flag added to the icon set must be
* added to the top-level build.xml for the updater.
*/
private static final String langs[] = {"ar", "de", "en", "es", "fi", "fr", "it", "nl", "pl", "pt", "ru",
"sv", "vi", "zh"};
private static final String flags[] = {"lang_ar", "de", "us", "es", "fi", "fr", "it", "nl", "pl", "pt", "ru",
"se", "vn", "cn"};
private static final String xlangs[] = {_x("Arabic"),
_x("German"), _x("English"), _x("Spanish"),_x("French"),
_x("Dutch"), _x("Portuguese"), _x("Russian"),
_x("Swedish"), _x("Chinese")};
_x("German"), _x("English"), _x("Spanish"),_x("Finnish"),
_x("French"), _x("Italian"), _x("Dutch"), _x("Polish"),
_x("Portuguese"), _x("Russian"), _x("Swedish"),
_x("Vietnamese"), _x("Chinese")};
/** todo sort by translated string */
public String getLangSettings() {

View File

@@ -1,6 +1,5 @@
package net.i2p.router.web;
import net.i2p.I2PAppContext;
import net.i2p.crypto.TrustedUpdate;
import net.i2p.data.DataHelper;
import net.i2p.util.FileUtil;
@@ -50,12 +49,14 @@ public class ConfigUpdateHandler extends FormHandler {
*/
private static final String PACK200_URLS =
"http://echelon.i2p/i2p/i2pupdate.su2\r\n" +
"http://inr.i2p/i2p/i2pupdate.su2\r\n" +
"http://stats.i2p/i2p/i2pupdate.su2\r\n" +
"http://www.i2p2.i2p/_static/i2pupdate.su2\r\n" +
"http://update.postman.i2p/i2pupdate.su2" ;
private static final String NO_PACK200_URLS =
"http://echelon.i2p/i2p/i2pupdate.sud\r\n" +
"http://inr.i2p/i2p/i2pupdate.sud\r\n" +
"http://stats.i2p/i2p/i2pupdate.sud\r\n" +
"http://www.i2p2.i2p/_static/i2pupdate.sud\r\n" +
"http://update.postman.i2p/i2pupdate.sud" ;
@@ -76,7 +77,7 @@ public class ConfigUpdateHandler extends FormHandler {
if (_action == null)
return;
if (_action.equals(_("Check for updates"))) {
NewsFetcher fetcher = NewsFetcher.getInstance(I2PAppContext.getGlobalContext());
NewsFetcher fetcher = NewsFetcher.getInstance(_context);
fetcher.fetchNews();
if (fetcher.shouldFetchUnsigned())
fetcher.fetchUnsignedHead();
@@ -98,6 +99,7 @@ public class ConfigUpdateHandler extends FormHandler {
String oldURL = ConfigUpdateHelper.getNewsURL(_context);
if ( (oldURL == null) || (!_newsURL.equals(oldURL)) ) {
_context.router().setConfigSetting(PROP_NEWS_URL, _newsURL);
NewsFetcher.getInstance(_context).invalidateNews();
addFormNotice(_("Updating news URL to") + " " + _newsURL);
}
}

View File

@@ -17,14 +17,15 @@ public class GraphHelper extends FormHandler {
private int _width;
private int _height;
private int _refreshDelaySeconds;
private boolean _persistent;
private static final String PROP_X = "routerconsole.graphX";
private static final String PROP_Y = "routerconsole.graphY";
private static final String PROP_REFRESH = "routerconsole.graphRefresh";
private static final String PROP_PERIODS = "routerconsole.graphPeriods";
private static final String PROP_EVENTS = "routerconsole.graphEvents";
private static final int DEFAULT_X = 250;
private static final int DEFAULT_Y = 100;
public static final int DEFAULT_X = 250;
public static final int DEFAULT_Y = 100;
private static final int DEFAULT_REFRESH = 60;
private static final int DEFAULT_PERIODS = 60;
static final int MAX_X = 2048;
@@ -39,9 +40,21 @@ public class GraphHelper extends FormHandler {
_height = _context.getProperty(PROP_Y, DEFAULT_Y);
_periodCount = _context.getProperty(PROP_PERIODS, DEFAULT_PERIODS);
_refreshDelaySeconds = _context.getProperty(PROP_REFRESH, DEFAULT_REFRESH);
_showEvents = Boolean.valueOf(_context.getProperty(PROP_EVENTS)).booleanValue();
_showEvents = _context.getBooleanProperty(PROP_EVENTS);
}
/**
* This must be output in the jsp since <meta> must be in the <head>
* @since 0.8.7
*/
public String getRefreshMeta() {
if (_refreshDelaySeconds <= 8 ||
ConfigRestartBean.getRestartTimeRemaining() < (1000 * (_refreshDelaySeconds + 30)))
return "";
// shorten the refresh by 3 seconds so we beat the iframe
return "<meta http-equiv=\"refresh\" content=\"" + (_refreshDelaySeconds - 3) + "\">";
}
/**
* This was a HelperBase but now it's a FormHandler
* @since 0.8.2
@@ -51,13 +64,17 @@ public class GraphHelper extends FormHandler {
public void setPeriodCount(String str) {
try { _periodCount = Integer.parseInt(str); } catch (NumberFormatException nfe) {}
}
public void setShowEvents(boolean b) { _showEvents = b; }
public void setHeight(String str) {
try { _height = Math.min(Integer.parseInt(str), MAX_Y); } catch (NumberFormatException nfe) {}
}
public void setWidth(String str) {
try { _width = Math.min(Integer.parseInt(str), MAX_X); } catch (NumberFormatException nfe) {}
}
public void setRefreshDelay(String str) {
try {
int rds = Integer.parseInt(str);
@@ -67,8 +84,13 @@ public class GraphHelper extends FormHandler {
_refreshDelaySeconds = -1;
} catch (NumberFormatException nfe) {}
}
/** @since 0.8.7 */
public void setPersistent(String foo) { _persistent = true; }
public String getImages() {
if (StatSummarizer.isDisabled())
return "";
try {
List listeners = StatSummarizer.instance().getListeners();
TreeSet ordered = new TreeSet(new AlphaComparator());
@@ -91,12 +113,11 @@ public class GraphHelper extends FormHandler {
+ "&amp;height=" + (3 * _height)
+ "\" target=\"_blank\">");
String title = _("Combined bandwidth graph");
_out.write("<img class=\"statimage\" width=\""
+ (_width + 83) + "\" height=\"" + (_height + 92)
+ "\" src=\"viewstat.jsp?stat=bw.combined"
_out.write("<img class=\"statimage\""
+ " src=\"viewstat.jsp?stat=bw.combined"
+ "&amp;periodCount=" + _periodCount
+ "&amp;width=" + _width
+ "&amp;height=" + (_height - 14)
+ "&amp;height=" + (_height - 13)
+ "\" alt=\"" + title + "\" title=\"" + title + "\"></a>\n");
}
@@ -113,9 +134,8 @@ public class GraphHelper extends FormHandler {
+ "&amp;width=" + (3 * _width)
+ "&amp;height=" + (3 * _height)
+ "\" target=\"_blank\">");
_out.write("<img class=\"statimage\" border=\"0\" width=\""
+ (_width + 83) + "\" height=\"" + (_height + 92)
+ "\" src=\"viewstat.jsp?stat="
_out.write("<img class=\"statimage\" border=\"0\""
+ " src=\"viewstat.jsp?stat="
+ r.getRateStat().getName()
+ "&amp;showEvents=" + _showEvents
+ "&amp;period=" + r.getPeriod()
@@ -125,10 +145,9 @@ public class GraphHelper extends FormHandler {
+ "\" alt=\"" + title
+ "\" title=\"" + title + "\"></a>\n");
}
if (_refreshDelaySeconds > 0)
// shorten the refresh by 3 seconds so we beat the iframe
_out.write("<meta http-equiv=\"refresh\" content=\"" + (_refreshDelaySeconds - 3) + "\">\n");
// FIXME jrobin doesn't support setting the timezone, will have to mod TimeAxis.java
_out.write("<p><i>" + _("All times are UTC.") + "</i></p>\n");
} catch (IOException ioe) {
ioe.printStackTrace();
}
@@ -138,6 +157,8 @@ public class GraphHelper extends FormHandler {
private static final int[] times = { 60, 2*60, 5*60, 10*60, 30*60, 60*60, -1 };
public String getForm() {
if (StatSummarizer.isDisabled())
return "";
String prev = System.getProperty("net.i2p.router.web.GraphHelper.nonce");
if (prev != null) System.setProperty("net.i2p.router.web.GraphHelper.noncePrev", prev);
String nonce = "" + _context.random().nextLong();
@@ -147,11 +168,11 @@ public class GraphHelper extends FormHandler {
_out.write("<form action=\"graphs\" method=\"POST\">\n" +
"<input type=\"hidden\" name=\"action\" value=\"foo\">\n" +
"<input type=\"hidden\" name=\"nonce\" value=\"" + nonce + "\" >\n");
_out.write(_("Periods") + ": <input size=\"3\" type=\"text\" name=\"periodCount\" value=\"" + _periodCount + "\"><br>\n");
_out.write(_("Periods") + ": <input size=\"5\" style=\"text-align: right;\" type=\"text\" name=\"periodCount\" value=\"" + _periodCount + "\"><br>\n");
_out.write(_("Plot averages") + ": <input type=\"radio\" class=\"optbox\" name=\"showEvents\" value=\"false\" " + (_showEvents ? "" : "checked=\"true\" ") + "> ");
_out.write(_("or")+ " " +_("plot events") + ": <input type=\"radio\" class=\"optbox\" name=\"showEvents\" value=\"true\" "+ (_showEvents ? "checked=\"true\" " : "") + "><br>\n");
_out.write(_("Image sizes") + ": " + _("width") + ": <input size=\"4\" type=\"text\" name=\"width\" value=\"" + _width
+ "\"> " + _("pixels") + ", " + _("height") + ": <input size=\"4\" type=\"text\" name=\"height\" value=\"" + _height
_out.write(_("Image sizes") + ": " + _("width") + ": <input size=\"4\" style=\"text-align: right;\" type=\"text\" name=\"width\" value=\"" + _width
+ "\"> " + _("pixels") + ", " + _("height") + ": <input size=\"4\" style=\"text-align: right;\" type=\"text\" name=\"height\" value=\"" + _height
+ "\"> " + _("pixels") + "<br>\n");
_out.write(_("Refresh delay") + ": <select name=\"refreshDelay\">");
for (int i = 0; i < times.length; i++) {
@@ -168,13 +189,40 @@ public class GraphHelper extends FormHandler {
_out.write("</option>\n");
}
_out.write("</select><br>\n" +
"<hr><div class=\"formaction\"><input type=\"submit\" value=\"" + _("Redraw") + "\"></div></form>");
_("Store graph data on disk?") +
" <input type=\"checkbox\" class=\"optbox\" value=\"true\" name=\"persistent\"");
boolean persistent = _context.getBooleanPropertyDefaultTrue(SummaryListener.PROP_PERSISTENT);
if (persistent)
_out.write(" checked=\"true\"");
_out.write(">" +
"<hr><div class=\"formaction\"><input type=\"submit\" value=\"" + _("Save settings and redraw graphs") + "\"></div></form>");
} catch (IOException ioe) {
ioe.printStackTrace();
}
return "";
}
/**
* We have to do this here because processForm() isn't called unless the nonces are good
* @since 0.8.7
*/
@Override
public String getAllMessages() {
if (StatSummarizer.isDisabled()) {
addFormError("Graphing not supported with this JVM: " +
System.getProperty("java.vendor") + ' ' +
System.getProperty("java.version") + " (" +
System.getProperty("java.runtime.name") + ' ' +
System.getProperty("java.runtime.version") + ')');
if (_context.getProperty(PROP_REFRESH, 0) >= 0) {
// force no refresh, save silently
_context.router().setConfigSetting(PROP_REFRESH, "-1");
_context.router().saveConfig();
}
}
return super.getAllMessages();
}
/**
* This was a HelperBase but now it's a FormHandler
* @since 0.8.2
@@ -193,26 +241,27 @@ public class GraphHelper extends FormHandler {
_height != _context.getProperty(PROP_Y, DEFAULT_Y) ||
_periodCount != _context.getProperty(PROP_PERIODS, DEFAULT_PERIODS) ||
_refreshDelaySeconds != _context.getProperty(PROP_REFRESH, DEFAULT_REFRESH) ||
_showEvents != Boolean.valueOf(_context.getProperty(PROP_EVENTS)).booleanValue()) {
_showEvents != _context.getBooleanProperty(PROP_EVENTS) ||
_persistent != _context.getBooleanPropertyDefaultTrue(SummaryListener.PROP_PERSISTENT)) {
_context.router().setConfigSetting(PROP_X, "" + _width);
_context.router().setConfigSetting(PROP_Y, "" + _height);
_context.router().setConfigSetting(PROP_PERIODS, "" + _periodCount);
_context.router().setConfigSetting(PROP_REFRESH, "" + _refreshDelaySeconds);
_context.router().setConfigSetting(PROP_EVENTS, "" + _showEvents);
_context.router().setConfigSetting(SummaryListener.PROP_PERSISTENT, "" + _persistent);
_context.router().saveConfig();
addFormNotice(_("Graph settings saved"));
}
}
/** inner class, don't bother reindenting */
private static class AlphaComparator implements Comparator {
public int compare(Object lhs, Object rhs) {
SummaryListener l = (SummaryListener)lhs;
SummaryListener r = (SummaryListener)rhs;
String lName = l.getRate().getRateStat().getName() + "." + l.getRate().getPeriod();
String rName = r.getRate().getRateStat().getName() + "." + r.getRate().getPeriod();
return lName.compareTo(rName);
private static class AlphaComparator implements Comparator<SummaryListener> {
public int compare(SummaryListener l, SummaryListener r) {
String lName = l.getRate().getRateStat().getName();
String rName = r.getRate().getRateStat().getName();
int rv = lName.compareTo(rName);
if (rv != 0)
return rv;
return (int) (l.getRate().getPeriod() - r.getRate().getPeriod());
}
}
}
}

View File

@@ -33,6 +33,7 @@ public class NewsFetcher implements Runnable, EepGet.StatusListener {
private String _updateVersion;
private String _unsignedUpdateVersion;
private String _lastModified;
private boolean _invalidated;
private File _newsFile;
private File _tempFile;
private static NewsFetcher _instance;
@@ -134,6 +135,8 @@ public class NewsFetcher implements Runnable, EepGet.StatusListener {
}
private boolean shouldFetchNews() {
if (_invalidated)
return true;
updateLastFetched();
String freq = _context.getProperty(ConfigUpdateHandler.PROP_REFRESH_FREQUENCY,
ConfigUpdateHandler.DEFAULT_REFRESH_FREQUENCY);
@@ -155,6 +158,16 @@ public class NewsFetcher implements Runnable, EepGet.StatusListener {
return false;
}
}
/**
* Call this when changing news URLs to force an update next time the timer fires.
* @since 0.8.7
*/
void invalidateNews() {
_lastModified = null;
_invalidated = true;
}
public void fetchNews() {
String newsURL = ConfigUpdateHelper.getNewsURL(_context);
boolean shouldProxy = Boolean.valueOf(_context.getProperty(ConfigUpdateHandler.PROP_SHOULD_PROXY, ConfigUpdateHandler.DEFAULT_SHOULD_PROXY)).booleanValue();
@@ -172,6 +185,7 @@ public class NewsFetcher implements Runnable, EepGet.StatusListener {
get.addStatusListener(this);
if (get.fetch()) {
_lastModified = get.getLastModified();
_invalidated = false;
} else {
// backup news location - always proxied
_tempFile.delete();

View File

@@ -1,16 +1,25 @@
package net.i2p.router.web;
import java.awt.Color;
import java.awt.Graphics;
import java.awt.image.BufferedImage;
import java.io.File;
import java.io.IOException;
import java.io.OutputStream;
import java.util.ArrayList;
import java.util.List;
import java.util.StringTokenizer;
import java.util.concurrent.CopyOnWriteArrayList;
import java.util.concurrent.Semaphore;
import javax.imageio.ImageIO;
import javax.imageio.stream.ImageOutputStream;
import javax.imageio.stream.MemoryCacheImageOutputStream;
import net.i2p.router.RouterContext;
import net.i2p.stat.Rate;
import net.i2p.stat.RateStat;
import net.i2p.util.FileUtil;
import net.i2p.util.Log;
import org.jrobin.core.RrdException;
@@ -18,7 +27,17 @@ import org.jrobin.graph.RrdGraph;
import org.jrobin.graph.RrdGraphDef;
/**
* A thread started by RouterConsoleRunner that
* checks the configuration for stats to be tracked via jrobin,
* and adds or deletes RRDs as necessary.
*
* This also contains methods to generate xml or png image output.
* The actual png rendering code is here for the special dual-rate graph;
* the rendering for standard graphs is in SummaryRenderer.
*
* To control memory, the number of simultaneous renderings is limited.
*
* @since 0.6.1.13
*/
public class StatSummarizer implements Runnable {
private final RouterContext _context;
@@ -28,25 +47,52 @@ public class StatSummarizer implements Runnable {
private static StatSummarizer _instance;
private static final int MAX_CONCURRENT_PNG = 3;
private final Semaphore _sem;
private volatile boolean _isRunning = true;
private boolean _isDisabled;
private Thread _thread;
public StatSummarizer() {
_context = (RouterContext)RouterContext.listContexts().get(0); // fuck it, only summarize one per jvm
_log = _context.logManager().getLog(getClass());
_listeners = new ArrayList(16);
_listeners = new CopyOnWriteArrayList();
_instance = this;
_sem = new Semaphore(MAX_CONCURRENT_PNG, true);
_context.addShutdownTask(new Shutdown());
}
public static StatSummarizer instance() { return _instance; }
public void run() {
// JRobin 1.5.9 crashes these JVMs
String vendor = System.getProperty("java.vendor");
if (vendor.startsWith("Apache") || // Harmony
vendor.startsWith("GNU Classpath") || // JamVM
vendor.startsWith("Free Software Foundation")) { // gij
_log.logAlways(Log.WARN, "Graphing not supported with this JVM: " +
vendor + ' ' +
System.getProperty("java.version") + " (" +
System.getProperty("java.runtime.name") + ' ' +
System.getProperty("java.runtime.version") + ')');
_isDisabled = true;
_isRunning = false;
return;
}
boolean isPersistent = _context.getBooleanPropertyDefaultTrue(SummaryListener.PROP_PERSISTENT);
if (!isPersistent)
deleteOldRRDs();
_thread = Thread.currentThread();
String specs = "";
while (_context.router().isAlive()) {
while (_isRunning && _context.router().isAlive()) {
specs = adjustDatabases(specs);
try { Thread.sleep(60*1000); } catch (InterruptedException ie) {}
}
}
/** @since 0.8.7 */
static boolean isDisabled() {
return _instance == null || _instance._isDisabled;
}
/** list of SummaryListener instances */
List<SummaryListener> getListeners() { return _listeners; }
@@ -105,10 +151,10 @@ public class StatSummarizer implements Runnable {
}
private void removeDb(Rate r) {
for (int i = 0; i < _listeners.size(); i++) {
SummaryListener lsnr = _listeners.get(i);
for (SummaryListener lsnr : _listeners) {
if (lsnr.getRate().equals(r)) {
_listeners.remove(i);
// no iter.remove() in COWAL
_listeners.remove(lsnr);
lsnr.stopListening();
return;
}
@@ -116,13 +162,17 @@ public class StatSummarizer implements Runnable {
}
private void addDb(Rate r) {
SummaryListener lsnr = new SummaryListener(r);
_listeners.add(lsnr);
lsnr.startListening();
boolean success = lsnr.startListening();
if (success)
_listeners.add(lsnr);
else
_log.error("Failed to add RRD for rate " + r.getRateStat().getName() + '.' + r.getPeriod());
//System.out.println("Start listening for " + r.getRateStat().getName() + ": " + r.getPeriod());
}
public boolean renderPng(Rate rate, OutputStream out) throws IOException {
return renderPng(rate, out, -1, -1, false, false, false, false, -1, true);
return renderPng(rate, out, GraphHelper.DEFAULT_X, GraphHelper.DEFAULT_Y,
false, false, false, false, -1, true);
}
/**
@@ -141,7 +191,7 @@ public class StatSummarizer implements Runnable {
return locked_renderPng(rate, out, width, height, hideLegend, hideGrid, hideTitle, showEvents,
periodCount, showCredit);
} finally {
_sem.release();
_sem.release();
}
}
@@ -150,10 +200,13 @@ public class StatSummarizer implements Runnable {
boolean showCredit) throws IOException {
if (width > GraphHelper.MAX_X)
width = GraphHelper.MAX_X;
else if (width <= 0)
width = GraphHelper.DEFAULT_X;
if (height > GraphHelper.MAX_Y)
height = GraphHelper.MAX_Y;
for (int i = 0; i < _listeners.size(); i++) {
SummaryListener lsnr = _listeners.get(i);
else if (height <= 0)
height = GraphHelper.DEFAULT_Y;
for (SummaryListener lsnr : _listeners) {
if (lsnr.getRate().equals(rate)) {
lsnr.renderPng(out, width, height, hideLegend, hideGrid, hideTitle, showEvents, periodCount, showCredit);
return true;
@@ -162,14 +215,25 @@ public class StatSummarizer implements Runnable {
return false;
}
/** @deprecated unused */
public boolean renderPng(OutputStream out, String templateFilename) throws IOException {
SummaryRenderer.render(_context, out, templateFilename);
return true;
}
public boolean getXML(Rate rate, OutputStream out) throws IOException {
for (int i = 0; i < _listeners.size(); i++) {
SummaryListener lsnr = _listeners.get(i);
try {
try {
_sem.acquire();
} catch (InterruptedException ie) {}
return locked_getXML(rate, out);
} finally {
_sem.release();
}
}
private boolean locked_getXML(Rate rate, OutputStream out) throws IOException {
for (SummaryListener lsnr : _listeners) {
if (lsnr.getRate().equals(rate)) {
lsnr.getData().exportXml(out);
out.write(("<!-- Rate: " + lsnr.getRate().getRateStat().getName() + " for period " + lsnr.getRate().getPeriod() + " -->\n").getBytes());
@@ -196,68 +260,93 @@ public class StatSummarizer implements Runnable {
return locked_renderRatePng(out, width, height, hideLegend, hideGrid, hideTitle, showEvents,
periodCount, showCredit);
} finally {
_sem.release();
_sem.release();
}
}
private boolean locked_renderRatePng(OutputStream out, int width, int height, boolean hideLegend,
boolean hideGrid, boolean hideTitle, boolean showEvents,
int periodCount, boolean showCredit) throws IOException {
long end = _context.clock().now() - 60*1000;
// go to some trouble to see if we have the data for the combined bw graph
SummaryListener txLsnr = null;
SummaryListener rxLsnr = null;
for (SummaryListener lsnr : StatSummarizer.instance().getListeners()) {
String title = lsnr.getRate().getRateStat().getName();
if (title.equals("bw.sendRate"))
txLsnr = lsnr;
else if (title.equals("bw.recvRate"))
rxLsnr = lsnr;
}
if (txLsnr == null || rxLsnr == null)
throw new IOException("no rates for combined graph");
long end = _context.clock().now() - 75*1000;
if (width > GraphHelper.MAX_X)
width = GraphHelper.MAX_X;
else if (width <= 0)
width = GraphHelper.DEFAULT_X;
if (height > GraphHelper.MAX_Y)
height = GraphHelper.MAX_Y;
if (periodCount <= 0) periodCount = SummaryListener.PERIODS;
if (periodCount > SummaryListener.PERIODS)
periodCount = SummaryListener.PERIODS;
else if (height <= 0)
height = GraphHelper.DEFAULT_Y;
if (periodCount <= 0 || periodCount > txLsnr.getRows())
periodCount = txLsnr.getRows();
long period = 60*1000;
long start = end - period*periodCount;
//long begin = System.currentTimeMillis();
try {
RrdGraphDef def = new RrdGraphDef();
def.setTimePeriod(start/1000, 0);
def.setLowerLimit(0d);
def.setBaseValue(1024);
// Note to translators: all runtime zh translation disabled in this file, no font available in RRD
def.setTimeSpan(start/1000, end/1000);
def.setMinValue(0d);
def.setBase(1024);
String title = _("Bandwidth usage");
if (!hideTitle)
def.setTitle(title);
long started = _context.router().getWhenStarted();
if (started > start && started < end)
def.vrule(started / 1000, SummaryRenderer.RESTART_BAR_COLOR, null, 4.0f); // no room for legend
String sendName = SummaryListener.createName(_context, "bw.sendRate.60000");
String recvName = SummaryListener.createName(_context, "bw.recvRate.60000");
def.datasource(sendName, sendName, sendName, "AVERAGE", "MEMORY");
def.datasource(recvName, recvName, recvName, "AVERAGE", "MEMORY");
def.area(sendName, Color.BLUE, _("Outbound bytes/sec"));
def.datasource(sendName, txLsnr.getData().getPath(), sendName, SummaryListener.CF, txLsnr.getBackendName());
def.datasource(recvName, rxLsnr.getData().getPath(), recvName, SummaryListener.CF, rxLsnr.getBackendName());
def.area(sendName, Color.BLUE, _("Outbound Bytes/sec"));
//def.line(sendName, Color.BLUE, "Outbound bytes/sec", 3);
def.line(recvName, Color.RED, _("Inbound bytes/sec") + "@r", 3);
def.line(recvName, Color.RED, _("Inbound Bytes/sec") + "\\r", 3);
//def.area(recvName, Color.RED, "Inbound bytes/sec@r");
if (!hideLegend) {
def.gprint(sendName, "AVERAGE", _("out average") + ": @2@s" + _("bytes/sec"));
def.gprint(sendName, "MAX", ' ' + _("max") + ": @2@s" + _("bytes/sec") + "@r");
def.gprint(recvName, "AVERAGE", _("in average") + ": @2@s" + _("bytes/sec"));
def.gprint(recvName, "MAX", ' ' + _("max") + ": @2@s" + _("bytes/sec") + "@r");
def.gprint(sendName, SummaryListener.CF, _("Out average") + ": %.2f %s" + _("Bps"));
def.gprint(sendName, "MAX", ' ' + _("max") + ": %.2f %S" + _("Bps") + "\\r");
def.gprint(recvName, SummaryListener.CF, _("In average") + ": %.2f %S" + _("Bps"));
def.gprint(recvName, "MAX", ' ' + _("max") + ": %.2f %S" + _("Bps") + "\\r");
}
if (!showCredit)
def.setShowSignature(false);
if (hideLegend)
def.setShowLegend(false);
def.setNoLegend(true);
if (hideGrid) {
def.setGridX(false);
def.setGridY(false);
def.setDrawXGrid(false);
def.setDrawYGrid(false);
}
//System.out.println("rendering: path=" + path + " dsNames[0]=" + dsNames[0] + " dsNames[1]=" + dsNames[1] + " lsnr.getName=" + _listener.getName());
def.setAntiAliasing(false);
//System.out.println("Rendering: \n" + def.exportXmlTemplate());
//System.out.println("*****************\nData: \n" + _listener.getData().dump());
def.setWidth(width);
def.setHeight(height);
def.setImageFormat("PNG");
def.setLazy(true);
RrdGraph graph = new RrdGraph(def);
//System.out.println("Graph created");
byte data[] = null;
if ( (width <= 0) || (height <= 0) )
data = graph.getPNGBytes();
else
data = graph.getPNGBytes(width, height);
//long timeToPlot = System.currentTimeMillis() - begin;
out.write(data);
int totalWidth = graph.getRrdGraphInfo().getWidth();
int totalHeight = graph.getRrdGraphInfo().getHeight();
BufferedImage img = new BufferedImage(totalWidth, totalHeight, BufferedImage.TYPE_USHORT_565_RGB);
Graphics gfx = img.getGraphics();
graph.render(gfx);
ImageOutputStream ios = new MemoryCacheImageOutputStream(out);
ImageIO.write(img, "png", ios);
//File t = File.createTempFile("jrobinData", ".xml");
//_listener.getData().dumpXml(new FileOutputStream(t));
//System.out.println("plotted: " + (data != null ? data.length : 0) + " bytes in " + timeToPlot
@@ -303,11 +392,40 @@ public class StatSummarizer implements Runnable {
return rv;
}
/**
* Delete the old rrd dir if we are no longer persistent
* @since 0.8.7
*/
private void deleteOldRRDs() {
File rrdDir = new File(_context.getRouterDir(), SummaryListener.RRD_DIR);
FileUtil.rmdir(rrdDir, false);
}
private static final boolean IS_WIN = System.getProperty("os.name").startsWith("Win");
/** translate a string */
private String _(String s) {
// the RRD font doesn't have zh chars, at least on my system
if ("zh".equals(Messages.getLanguage(_context)))
// Works on 1.5.9 except on windows
if (IS_WIN && "zh".equals(Messages.getLanguage(_context)))
return s;
return Messages.getString(s, _context);
}
/**
* Make sure any persistent RRDs are closed
* @since 0.8.7
*/
private class Shutdown implements Runnable {
public void run() {
_isRunning = false;
if (_thread != null)
_thread.interrupt();
for (SummaryListener lsnr : _listeners) {
// FIXME could cause exceptions if rendering?
lsnr.stopListening();
}
_listeners.clear();
}
}
}

View File

@@ -123,7 +123,7 @@ public class SummaryBarRenderer {
.append(_("Health Report"))
.append("\">")
.append(_("Logs"))
.append("</a>\n" +
.append("</a>\n");
// "<a href=\"/jobs.jsp\" target=\"_top\" title=\"")
// .append(_("Show the router's workload, and how it's performing"))
@@ -131,13 +131,15 @@ public class SummaryBarRenderer {
// .append(_("Jobs"))
// .append("</a>\n" +
"<a href=\"/graphs\" target=\"_top\" title=\"")
if (!StatSummarizer.isDisabled()) {
buf.append("<a href=\"/graphs\" target=\"_top\" title=\"")
.append(_("Graph router performance"))
.append("\">")
.append(_("Graphs"))
.append("</a>\n" +
.append("</a>\n");
}
"<a href=\"/stats\" target=\"_top\" title=\"")
buf.append("<a href=\"/stats\" target=\"_top\" title=\"")
.append(_("Textual router performance statistics"))
.append("\">")
.append(_("Stats"))

View File

@@ -384,7 +384,7 @@ public class SummaryHelper extends HelperBase {
buf.append("client.png\" alt=\"Client\" title=\"" + _("Client") + "\">");
buf.append("</td><td align=\"left\"><b><a href=\"tunnels#").append(h.toBase64().substring(0,4));
buf.append("\" target=\"_top\" title=\"" + _("Show tunnels") + "\">");
if (name.length() < 16)
if (name.length() < 18)
buf.append(name);
else
buf.append(name.substring(0,15)).append("&hellip;");

View File

@@ -1,6 +1,6 @@
package net.i2p.router.web;
import java.awt.Color;
import java.io.File;
import java.io.IOException;
import java.io.OutputStream;
@@ -10,42 +10,59 @@ import net.i2p.stat.Rate;
import net.i2p.stat.RateStat;
import net.i2p.stat.RateSummaryListener;
import net.i2p.util.Log;
import net.i2p.util.SecureFile;
import net.i2p.util.SecureFileOutputStream;
import org.jrobin.core.Archive;
import org.jrobin.core.RrdBackendFactory;
import org.jrobin.core.RrdDb;
import org.jrobin.core.RrdDef;
import org.jrobin.core.RrdException;
import org.jrobin.core.RrdMemoryBackendFactory;
import org.jrobin.core.RrdNioBackendFactory;
import org.jrobin.core.Sample;
import org.jrobin.graph.RrdGraph;
import org.jrobin.graph.RrdGraphDef;
import org.jrobin.graph.RrdGraphDefTemplate;
/**
* Creates and updates the in-memory or on-disk RRD database,
* and provides methods to generate graphs of the data
*
* @since 0.6.1.13
*/
class SummaryListener implements RateSummaryListener {
private I2PAppContext _context;
private Log _log;
private Rate _rate;
static final String PROP_PERSISTENT = "routerconsole.graphPersistent";
/** note that .jrb files are NOT compatible with .rrd files */
static final String RRD_DIR = "rrd";
private static final String RRD_PREFIX = "rrd-";
private static final String RRD_SUFFIX = ".jrb";
static final String CF = "AVERAGE";
private static final double XFF = 0.9d;
private static final int STEPS = 1;
private final I2PAppContext _context;
private final Log _log;
private final Rate _rate;
private final boolean _isPersistent;
private String _name;
private String _eventName;
private RrdDb _db;
private Sample _sample;
private RrdMemoryBackendFactory _factory;
private SummaryRenderer _renderer;
private int _rows;
static final int PERIODS = 1440;
static {
try {
RrdBackendFactory.setDefaultFactory("MEMORY");
} catch (RrdException re) {
re.printStackTrace();
}
}
static final int PERIODS = 60 * 24; // 1440
private static final int MIN_ROWS = PERIODS;
private static final int MAX_ROWS = 91 * MIN_ROWS;
private static final long THREE_MONTHS = 91l * 24 * 60 * 60 * 1000;
public SummaryListener(Rate r) {
_context = I2PAppContext.getGlobalContext();
_rate = r;
_log = _context.logManager().getLog(SummaryListener.class);
_isPersistent = _context.getBooleanPropertyDefaultTrue(PROP_PERSISTENT);
}
public void add(double totalValue, long eventCount, double totalEventTime, long period) {
@@ -86,34 +103,73 @@ class SummaryListener implements RateSummaryListener {
}
public Rate getRate() { return _rate; }
public void startListening() {
/**
* @return success
*/
public boolean startListening() {
RateStat rs = _rate.getRateStat();
long period = _rate.getPeriod();
String baseName = rs.getName() + "." + period;
_name = createName(_context, baseName);
_eventName = createName(_context, baseName + ".events");
try {
RrdDef def = new RrdDef(_name, now()/1000, period/1000);
// for info on the heartbeat, xff, steps, etc, see the rrdcreate man page, aka
// http://www.jrobin.org/support/man/rrdcreate.html
long heartbeat = period*10/1000;
def.addDatasource(_name, "GAUGE", heartbeat, Double.NaN, Double.NaN);
def.addDatasource(_eventName, "GAUGE", heartbeat, 0, Double.NaN);
double xff = 0.9;
int steps = 1;
int rows = PERIODS;
def.addArchive("AVERAGE", xff, steps, rows);
_factory = (RrdMemoryBackendFactory)RrdBackendFactory.getDefaultFactory();
_db = new RrdDb(def, _factory);
RrdBackendFactory factory = RrdBackendFactory.getFactory(getBackendName());
String rrdDefName;
if (_isPersistent) {
// generate full path for persistent RRD files
File rrdDir = new SecureFile(_context.getRouterDir(), RRD_DIR);
File rrdFile = new File(rrdDir, RRD_PREFIX + _name + RRD_SUFFIX);
rrdDefName = rrdFile.getAbsolutePath();
if (rrdFile.exists()) {
_db = new RrdDb(rrdDefName, factory);
Archive arch = _db.getArchive(CF, STEPS);
if (arch == null)
throw new IOException("No average CF in " + rrdDefName);
_rows = arch.getRows();
if (_log.shouldLog(Log.INFO))
_log.info("Existing RRD " + baseName + " (" + rrdDefName + ") with " + _rows + " rows consuming " + _db.getRrdBackend().getLength() + " bytes");
} else {
rrdDir.mkdir();
}
} else {
rrdDefName = _name;
}
if (_db == null) {
// not persistent or not previously existing
RrdDef def = new RrdDef(rrdDefName, now()/1000, period/1000);
// for info on the heartbeat, xff, steps, etc, see the rrdcreate man page, aka
// http://www.jrobin.org/support/man/rrdcreate.html
long heartbeat = period*10/1000;
def.addDatasource(_name, "GAUGE", heartbeat, Double.NaN, Double.NaN);
def.addDatasource(_eventName, "GAUGE", heartbeat, 0, Double.NaN);
int steps = 1;
if (_isPersistent) {
_rows = (int) Math.max(MIN_ROWS, Math.min(MAX_ROWS, THREE_MONTHS / period));
} else {
_rows = MIN_ROWS;
}
def.addArchive(CF, XFF, STEPS, _rows);
_db = new RrdDb(def, factory);
if (_isPersistent)
SecureFileOutputStream.setPerms(new File(rrdDefName));
if (_log.shouldLog(Log.INFO))
_log.info("New RRD " + baseName + " (" + rrdDefName + ") with " + _rows + " rows consuming " + _db.getRrdBackend().getLength() + " bytes");
}
_sample = _db.createSample();
_renderer = new SummaryRenderer(_context, this);
_rate.setSummaryListener(this);
return true;
} catch (OutOfMemoryError oom) {
_log.error("Error starting RRD for stat " + baseName, oom);
} catch (RrdException re) {
_log.error("Error starting", re);
_log.error("Error starting RRD for stat " + baseName, re);
} catch (IOException ioe) {
_log.error("Error starting", ioe);
_log.error("Error starting RRD for stat " + baseName, ioe);
}
return false;
}
public void stopListening() {
if (_db == null) return;
try {
@@ -122,23 +178,50 @@ class SummaryListener implements RateSummaryListener {
_log.error("Error closing", ioe);
}
_rate.setSummaryListener(null);
_factory.delete(_db.getPath());
if (!_isPersistent) {
// close() does not release resources for memory backend
try {
((RrdMemoryBackendFactory)RrdBackendFactory.getFactory(RrdMemoryBackendFactory.NAME)).delete(_db.getPath());
} catch (RrdException re) {}
}
_db = null;
}
public void renderPng(OutputStream out, int width, int height, boolean hideLegend, boolean hideGrid, boolean hideTitle, boolean showEvents, int periodCount, boolean showCredit) throws IOException {
if (_renderer == null || _db == null)
throw new IOException("No RRD, check logs for previous errors");
_renderer.render(out, width, height, hideLegend, hideGrid, hideTitle, showEvents, periodCount, showCredit);
}
public void renderPng(OutputStream out) throws IOException { _renderer.render(out); }
public void renderPng(OutputStream out) throws IOException {
if (_renderer == null || _db == null)
throw new IOException("No RRD, check logs for previous errors");
_renderer.render(out);
}
String getName() { return _name; }
String getEventName() { return _eventName; }
RrdDb getData() { return _db; }
long now() { return _context.clock().now(); }
/** @since 0.8.7 */
String getBackendName() {
return _isPersistent ? RrdNioBackendFactory.NAME : RrdMemoryBackendFactory.NAME;
}
/** @since 0.8.7 */
int getRows() {
return _rows;
}
@Override
public boolean equals(Object obj) {
return ((obj instanceof SummaryListener) && ((SummaryListener)obj)._rate.equals(_rate));
}
@Override
public int hashCode() { return _rate.hashCode(); }
}

View File

@@ -1,30 +1,40 @@
package net.i2p.router.web;
import java.awt.Color;
import java.awt.Graphics;
import java.awt.image.BufferedImage;
import java.io.IOException;
import java.io.OutputStream;
import javax.imageio.ImageIO;
import javax.imageio.stream.ImageOutputStream;
import javax.imageio.stream.MemoryCacheImageOutputStream;
import net.i2p.I2PAppContext;
import net.i2p.data.DataHelper;
import net.i2p.router.RouterContext;
import net.i2p.stat.Rate;
import net.i2p.stat.RateStat;
import net.i2p.stat.RateSummaryListener;
import net.i2p.util.Log;
import org.jrobin.core.RrdBackendFactory;
import org.jrobin.core.RrdDb;
import org.jrobin.core.RrdDef;
import org.jrobin.core.RrdException;
import org.jrobin.core.RrdMemoryBackendFactory;
import org.jrobin.core.Sample;
import org.jrobin.graph.RrdGraph;
import org.jrobin.graph.RrdGraphDef;
import org.jrobin.graph.RrdGraphDefTemplate;
/**
* Generate the RRD graph png images,
* except for the combined rate graph, which is
* generated in StatSummarizer.
*
* @since 0.6.1.13
*/
class SummaryRenderer {
private Log _log;
private SummaryListener _listener;
private I2PAppContext _context;
private final Log _log;
private final SummaryListener _listener;
private final I2PAppContext _context;
static final Color RESTART_BAR_COLOR = new Color(255, 144, 0, 224);
public SummaryRenderer(I2PAppContext ctx, SummaryListener lsnr) {
_log = ctx.logManager().getLog(SummaryRenderer.class);
@@ -38,6 +48,7 @@ class SummaryRenderer {
* DOM level 3 load and store support. Perhaps we can bundle that, or
* specify who can get it from where, etc.
*
* @deprecated unsed
*/
public static synchronized void render(I2PAppContext ctx, OutputStream out, String filename) throws IOException {
long end = ctx.clock().now() - 60*1000;
@@ -45,10 +56,21 @@ class SummaryRenderer {
try {
RrdGraphDefTemplate template = new RrdGraphDefTemplate(filename);
RrdGraphDef def = template.getRrdGraphDef();
def.setTimePeriod(start/1000, end/1000); // ignore the periods in the template
def.setTimeSpan(start/1000, end/1000); // ignore the periods in the template
// FIXME not clear how to get the height and width from the template
int width = GraphHelper.DEFAULT_X;
int height = GraphHelper.DEFAULT_Y;
def.setWidth(width);
def.setHeight(height);
RrdGraph graph = new RrdGraph(def);
byte img[] = graph.getPNGBytes();
out.write(img);
int totalWidth = graph.getRrdGraphInfo().getWidth();
int totalHeight = graph.getRrdGraphInfo().getHeight();
BufferedImage img = new BufferedImage(totalWidth, totalHeight, BufferedImage.TYPE_USHORT_565_RGB);
Graphics gfx = img.getGraphics();
graph.render(gfx);
ImageOutputStream ios = new MemoryCacheImageOutputStream(out);
ImageIO.write(img, "png", ios);
} catch (RrdException re) {
//_log.error("Error rendering " + filename, re);
throw new IOException("Error plotting: " + re.getMessage());
@@ -58,34 +80,33 @@ class SummaryRenderer {
}
}
public void render(OutputStream out) throws IOException { render(out, -1, -1, false, false, false, false, -1, false); }
public void render(OutputStream out) throws IOException { render(out, GraphHelper.DEFAULT_X, GraphHelper.DEFAULT_Y,
false, false, false, false, -1, false); }
public void render(OutputStream out, int width, int height, boolean hideLegend, boolean hideGrid, boolean hideTitle, boolean showEvents, int periodCount, boolean showCredit) throws IOException {
long end = _listener.now() - 60*1000;
if (periodCount <= 0) periodCount = SummaryListener.PERIODS;
if (periodCount > SummaryListener.PERIODS)
periodCount = SummaryListener.PERIODS;
long end = _listener.now() - 75*1000;
if (periodCount <= 0 || periodCount > _listener.getRows())
periodCount = _listener.getRows();
long start = end - _listener.getRate().getPeriod()*periodCount;
//long begin = System.currentTimeMillis();
try {
RrdGraphDef def = new RrdGraphDef();
def.setTimePeriod(start/1000, 0);
def.setLowerLimit(0d);
def.setTimeSpan(start/1000, end/1000);
def.setMinValue(0d);
String name = _listener.getRate().getRateStat().getName();
// heuristic to set K=1024
if ((name.startsWith("bw.") || name.indexOf("Size") >= 0 || name.indexOf("Bps") >= 0 || name.indexOf("memory") >= 0)
&& !showEvents)
def.setBaseValue(1024);
def.setBase(1024);
if (!hideTitle) {
String title;
String p;
// we want the formatting and translation of formatDuration2(), except not zh, and not the &nbsp;
if ("zh".equals(Messages.getLanguage(_context)))
if (IS_WIN && "zh".equals(Messages.getLanguage(_context)))
p = DataHelper.formatDuration(_listener.getRate().getPeriod());
else
p = DataHelper.formatDuration2(_listener.getRate().getPeriod()).replace("&nbsp;", " ");
if (showEvents)
// Note to translators: all runtime zh translation disabled in this file, no font available in RRD
title = name + ' ' + _("events in {0}", p);
else
title = name + ' ' + _("averaged for {0}", p);
@@ -108,12 +129,18 @@ class SummaryRenderer {
// Strings.java
descr = _(_listener.getRate().getRateStat().getDescription());
}
def.datasource(plotName, path, plotName, "AVERAGE", "MEMORY");
def.area(plotName, Color.BLUE, descr + "@r");
long started = ((RouterContext)_context).router().getWhenStarted();
if (started > start && started < end)
def.vrule(started / 1000, RESTART_BAR_COLOR, _("Restart"), 4.0f);
def.datasource(plotName, path, plotName, SummaryListener.CF, _listener.getBackendName());
if (descr.length() > 0)
def.area(plotName, Color.BLUE, descr + "\\r");
else
def.area(plotName, Color.BLUE);
if (!hideLegend) {
def.gprint(plotName, "AVERAGE", _("avg") + ": @2@s");
def.gprint(plotName, "MAX", ' ' + _("max") + ": @2@s");
def.gprint(plotName, "LAST", ' ' + _("now") + ": @2@s@r");
def.gprint(plotName, SummaryListener.CF, _("avg") + ": %.2f %s");
def.gprint(plotName, "MAX", ' ' + _("max") + ": %.2f %S");
def.gprint(plotName, "LAST", ' ' + _("now") + ": %.2f %S\\r");
}
if (!showCredit)
def.setShowSignature(false);
@@ -126,24 +153,30 @@ class SummaryRenderer {
def.line(dsNames[1], Color.RED, "Events per period");
*/
if (hideLegend)
def.setShowLegend(false);
def.setNoLegend(true);
if (hideGrid) {
def.setGridX(false);
def.setGridY(false);
def.setDrawXGrid(false);
def.setDrawYGrid(false);
}
//System.out.println("rendering: path=" + path + " dsNames[0]=" + dsNames[0] + " dsNames[1]=" + dsNames[1] + " lsnr.getName=" + _listener.getName());
def.setAntiAliasing(false);
//System.out.println("Rendering: \n" + def.exportXmlTemplate());
//System.out.println("*****************\nData: \n" + _listener.getData().dump());
def.setWidth(width);
def.setHeight(height);
def.setImageFormat("PNG");
def.setLazy(true);
RrdGraph graph = new RrdGraph(def);
int totalWidth = graph.getRrdGraphInfo().getWidth();
int totalHeight = graph.getRrdGraphInfo().getHeight();
BufferedImage img = new BufferedImage(totalWidth, totalHeight, BufferedImage.TYPE_USHORT_565_RGB);
Graphics gfx = img.getGraphics();
graph.render(gfx);
ImageOutputStream ios = new MemoryCacheImageOutputStream(out);
ImageIO.write(img, "png", ios);
//System.out.println("Graph created");
byte data[] = null;
if ( (width <= 0) || (height <= 0) )
data = graph.getPNGBytes();
else
data = graph.getPNGBytes(width, height);
//long timeToPlot = System.currentTimeMillis() - begin;
out.write(data);
//File t = File.createTempFile("jrobinData", ".xml");
//_listener.getData().dumpXml(new FileOutputStream(t));
//System.out.println("plotted: " + (data != null ? data.length : 0) + " bytes in " + timeToPlot
@@ -160,10 +193,13 @@ class SummaryRenderer {
}
}
private static final boolean IS_WIN = System.getProperty("os.name").startsWith("Win");
/** translate a string */
private String _(String s) {
// the RRD font doesn't have zh chars, at least on my system
if ("zh".equals(Messages.getLanguage(_context)))
// Works on 1.5.9 except on windows
if (IS_WIN && "zh".equals(Messages.getLanguage(_context)))
return s;
return Messages.getString(s, _context);
}
@@ -173,7 +209,8 @@ class SummaryRenderer {
*/
private String _(String s, String o) {
// the RRD font doesn't have zh chars, at least on my system
if ("zh".equals(Messages.getLanguage(_context)))
// Works on 1.5.9 except on windows
if (IS_WIN && "zh".equals(Messages.getLanguage(_context)))
return s.replace("{0}", o);
return Messages.getString(s, o, _context);
}

View File

@@ -10,6 +10,7 @@ import java.util.concurrent.ConcurrentHashMap;
import net.i2p.I2PAppContext;
import net.i2p.util.FileUtil;
import net.i2p.util.Log;
import net.i2p.util.SecureDirectory;
import org.mortbay.http.HttpContext;
@@ -36,6 +37,12 @@ import org.mortbay.jetty.servlet.WebApplicationContext;
public class WebAppStarter {
static final Map<String, Long> warModTimes = new ConcurrentHashMap();
static private Log _log;
static {
_log = ContextHelper.getContext(null).logManager().getLog(WebAppStarter.class); ;
}
/**
* adds and starts
@@ -43,7 +50,8 @@ public class WebAppStarter {
*/
static void startWebApp(I2PAppContext ctx, Server server, String appName, String warPath) throws Exception {
File tmpdir = new SecureDirectory(ctx.getTempDir(), "jetty-work-" + appName + ctx.random().nextInt());
WebApplicationContext wac = addWebApp(ctx, server, appName, warPath, tmpdir);
WebApplicationContext wac = addWebApp(ctx, server, appName, warPath, tmpdir);
_log.debug("Loading war from: " + warPath);
wac.start();
}
@@ -89,6 +97,8 @@ public class WebAppStarter {
// this does the passwords...
RouterConsoleRunner.initialize(wac);
// see WebAppConfiguration for info
String[] classNames = server.getWebApplicationConfigurationClassNames();
String[] newClassNames = new String[classNames.length + 1];

View File

@@ -95,13 +95,5 @@ class Dummy {
_("itag0");
_("itag1");
_("itag2");
// Descriptions for the stats that are graphed by default
// There are over 500 stats currently defined, we aren't going to tag them all
_("Low-level bandwidth receive rate"); // bw.recvRate
_("Low-level bandwidth send rate"); // bw.sendRate
_("How many peers we are actively talking with"); // router.activePeers
// router.memoryUsed currently has the max size in the description so it can't be tagged
}
}

View File

@@ -165,7 +165,7 @@
<input type="radio" class="optbox" name="ntcpAutoPort" value="1" <%=nethelper.getTcpAutoPortChecked(1) %> >
<%=intl._("Specify Port")%>:
<input name ="ntcpport" type="text" size="5" maxlength="5" value="<jsp:getProperty name="nethelper" property="ntcpport" />" ><br>
</p><p><b><%=intl._("Note")%>: <%=intl._("Changing these settings will restart your router.")%></b></p>
</p><p><b><%=intl._("Notes")%>: <%=intl._("a) Do not reveal your port numbers to anyone! b) Changing these settings will restart your router.")%></b></p>
<hr><div class="formaction">
<input type="reset" value="<%=intl._("Cancel")%>" >
<input type="submit" name="save" value="<%=intl._("Save changes")%>" >

View File

@@ -26,10 +26,17 @@
<input type="hidden" name="nonce" value="<jsp:getProperty name="formhandler" property="newNonce" />" >
<% /* set hidden default */ %>
<input type="submit" name="action" value="" style="display:none" >
<% if (updatehelper.canInstall()) { %>
<h3><%=intl._("Check for I2P and news updates")%></h3>
<div class="wideload"><table border="0" cellspacing="5">
<tr><td colspan="2"></tr>
<tr><td class= "mediumtags" align="right"><b><%=intl._("News &amp; I2P Updates")%>:</b></td>
<% } else { %>
<h3><%=intl._("Check for news updates")%></h3>
<div class="wideload"><table border="0" cellspacing="5">
<tr><td colspan="2"></tr>
<tr><td class= "mediumtags" align="right"><b><%=intl._("News Updates")%>:</b></td>
<% } // if canInstall %>
<td> <% if ("true".equals(System.getProperty("net.i2p.router.web.UpdateHandler.updateInProgress", "false"))) { %> <i><%=intl._("Update In Progress")%></i><br> <% } else { %> <input type="submit" name="action" value="<%=intl._("Check for updates")%>" />
<% } %></td></tr>
<tr><td colspan="2"><br></td></tr>
@@ -39,14 +46,16 @@
<td><jsp:getProperty name="updatehelper" property="refreshFrequencySelectBox" /></td></tr>
<% if (updatehelper.canInstall()) { %>
<tr><td class= "mediumtags" align="right"><b><%=formhandler._("Update policy")%>:</b></td>
<td><jsp:getProperty name="updatehelper" property="updatePolicySelectBox" /></td>
<td><jsp:getProperty name="updatehelper" property="updatePolicySelectBox" /></td></tr>
<% } // if canInstall %>
<tr><td class= "mediumtags" align="right"><b><%=intl._("Update through the eepProxy?")%></b></td>
<td><jsp:getProperty name="updatehelper" property="updateThroughProxy" /></td>
</tr><tr><td class= "mediumtags" align="right"><b><%=intl._("eepProxy host")%>:</b></td>
<td><input type="text" size="10" name="proxyHost" value="<jsp:getProperty name="updatehelper" property="proxyHost" />" /></td>
</tr><tr><td class= "mediumtags" align="right"><b><%=intl._("eepProxy port")%>:</b></td>
<td><input type="text" size="4" name="proxyPort" value="<jsp:getProperty name="updatehelper" property="proxyPort" />" /></td>
</tr><tr><td class= "mediumtags" align="right"><b><%=intl._("Update URLs")%>:</b></td>
<td><input type="text" size="4" name="proxyPort" value="<jsp:getProperty name="updatehelper" property="proxyPort" />" /></td></tr>
<% if (updatehelper.canInstall()) { %>
<tr><td class= "mediumtags" align="right"><b><%=intl._("Update URLs")%>:</b></td>
<td><textarea name="updateURL" wrap="off" spellcheck="false"><jsp:getProperty name="updatehelper" property="updateURL" /></textarea></td>
</tr><tr><td class= "mediumtags" align="right"><b><%=intl._("Trusted keys")%>:</b></td>
<td><textarea name="trustedKeys" wrap="off" spellcheck="false"><jsp:getProperty name="updatehelper" property="trustedKeys" /></textarea></td>
@@ -55,7 +64,7 @@
</tr><tr><td class= "mediumtags" align="right"><b><%=intl._("Unsigned Build URL")%>:</b></td>
<td><input type="text" size="60" name="zipURL" value="<jsp:getProperty name="updatehelper" property="zipURL" />"></td></tr>
<% } else { %>
<tr><td class= "mediumtags" align="center" colspan="2"><b><%=intl._("I2P updates are disabled because you do not have write permission for the install directory.")%></b></td></tr>
<tr><td class= "mediumtags" align="center" colspan="2"><b><%=intl._("Updates will be dispatched via your package manager.")%></b></td></tr>
<% } // if canInstall %>
<tr class="tablefooter"><td colspan="2">
<div class="formaction">

View File

@@ -36,10 +36,15 @@
%>
<link href="<%=intl.getTheme(request.getHeader("User-Agent"))%>console.css" rel="stylesheet" type="text/css">
<%
// make the fonts bigger for chinese
if (intl.getLang().equals("zh")) {
// make the fonts bigger for chinese
%>
<link href="<%=intl.getTheme(request.getHeader("User-Agent"))%>console_big.css" rel="stylesheet" type="text/css">
<%
} else if (intl.getLang().equals("ar")) {
// Use RTL theme for Arabic
%>
<link href="<%=intl.getTheme(request.getHeader("User-Agent"))%>console_ar.css" rel="stylesheet" type="text/css">
<%
}
%>

View File

@@ -5,19 +5,26 @@
<html><head>
<%@include file="css.jsi" %>
<%=intl.title("graphs")%>
</head><body>
<%@include file="summary.jsi" %>
<h1><%=intl._("I2P Performance Graphs")%></h1>
<div class="main" id="main">
<div class="graphspanel">
<div class="widepanel">
<jsp:useBean class="net.i2p.router.web.GraphHelper" id="graphHelper" scope="request" />
<% graphHelper.storeMethod(request.getMethod()); %>
<jsp:setProperty name="graphHelper" property="contextId" value="<%=(String)session.getAttribute("i2p.contextId")%>" />
<% /* GraphHelper sets the defaults in setContextId, so setting the properties must be after the context */ %>
<jsp:setProperty name="graphHelper" property="*" />
<% graphHelper.storeWriter(out); %>
<%
graphHelper.storeWriter(out);
graphHelper.storeMethod(request.getMethod());
// meta must be inside the head
boolean allowRefresh = intl.allowIFrame(request.getHeader("User-Agent"));
if (allowRefresh) {
out.print(graphHelper.getRefreshMeta());
}
%>
</head><body>
<%@include file="summary.jsi" %>
<h1><%=intl._("I2P Performance Graphs")%></h1>
<div class="main" id="main">
<div class="graphspanel">
<div class="widepanel">
<jsp:getProperty name="graphHelper" property="allMessages" />
<jsp:getProperty name="graphHelper" property="images" />
<jsp:getProperty name="graphHelper" property="form" />

View File

@@ -10,17 +10,17 @@
<%@include file="css.jsi" %>
</head><body>
<%@include file="summary.jsi" %>
<h1>I2P Router Help & Support</h1>
<h1>I2P Router Help &amp; Support</h1>
<div class="main" id="main"><p>
If you'd like to help improve or translate the documentation, or
help with other aspects of the project, please see the documentation for
<a href="http://www.i2p2.i2p/getinvolved.html">volunteers.</a>
</p><p>Further assistance is available here:
</p><p>Further assistance is available here:</p>
<ul class="links">
<li class="tidylist"><a href="http://www.i2p2.i2p/faq.html">FAQ on www.i2p2.i2p</a>
<li class="tidylist"><a href="http://www.i2p2.i2p/faq_de.html">Deutsch FAQ</a>.</ul>
<li class="tidylist"><a href="http://www.i2p2.i2p/faq.html">FAQ on www.i2p2.i2p</a></li>
<li class="tidylist"><a href="http://www.i2p2.i2p/faq_de.html">Deutsch FAQ</a>.</li></ul>
<br>You may also try the <a href="http://forum.i2p/">I2P forum</a>
or IRC.</p>
or IRC.
<h2>Summary Bar Information</h2><p>
Many of the stats on the summary bar may be
@@ -30,37 +30,37 @@ Many of the stats on the summary bar may be
<li class="tidylist"><b>Ident:</b>
The first four characters (24 bits) of your 44-character (256-bit) Base64 router hash.
The full hash is shown on your <a href="netdb.jsp?r=.">router info page</a>.
Never reveal this to anyone, as your router info contains your IP.
Never reveal this to anyone, as your router info contains your IP.</li>
<li class="tidylist"><b>Version:</b>
The version of the I2P software you are running.
The version of the I2P software you are running.</li>
<li class="tidylist"><b>Now:</b>
The current time (UTC) and the skew, if any. I2P requires your computer's time be accurate.
If the skew is more than a few seconds, please correct the problem by adjusting
your computer's time.
your computer's time.</li>
<li class="tidylist"><b>Reachability:</b>
The router's view of whether it can be contacted by other routers.
Further information is on the <a href="config.jsp#help">configuration page</a>.
</ul><h3>Peers</h3><ul>
</li></ul><h3>Peers</h3><ul>
<li class="tidylist"><b>Active:</b>
The first number is the number of peers you've sent or received a message from in the last few minutes.
This may range from 8-10 to several hundred, depending on your total bandwidth,
shared bandwidth, and locally-generated traffic.
The second number is the number of peers seen in the last hour or so.
Do not be concerned if these numbers vary widely.
First enable all stats to <a href="configstats.jsp#router.activePeers">[Enable graphing]</a>.
First enable all stats to <a href="configstats.jsp#router.activePeers">[Enable graphing]</a>.</li>
<li class="tidylist"><b>Fast:</b>
This is the number of peers you use for building client tunnels. It is generally in the
range 8-30. Your fast peers are shown on the <a href="profiles.jsp">profiles page</a>.
<a href="configstats.jsp#router.fastPeers">[Enable graphing]</a>.
<a href="configstats.jsp#router.fastPeers">[Enable graphing]</a>.</li>
<li class="tidylist"><b>High Capacity:</b>
This is the number of peers you use for building some of your exploratory tunnels. It is generally in the
range 8-75. The fast peers are included in the high capacity tier.
Your high capacity peers are shown on the <a href="profiles.jsp">profiles page</a>.
First enable all stats to <a href="configstats.jsp#router.highCapacityPeers">[Enable graphing]</a>.
First enable all stats to <a href="configstats.jsp#router.highCapacityPeers">[Enable graphing]</a>.</li>
<li class="tidylist"><b>Well Integrated:</b>
This is the number of peers you use for network database inquiries.
These are usually the "floodfill" peers.
Your well integrated peers are shown on the bottom of the <a href="profiles.jsp">profiles page</a>.
Your well integrated peers are shown on the bottom of the <a href="profiles.jsp">profiles page</a>.</li>
<li class="tidylist"><b>Known:</b>
This is the total number of routers you know about.
They are listed on the <a href="netdb.jsp">network database page</a>.
@@ -68,7 +68,7 @@ This may range from under 100 to 1000 or more.
This number is not the total size of the network;
it may vary widely depending on your total bandwidth,
shared bandwidth, and locally-generated traffic.
I2P does not require a router to know every other router.
I2P does not require a router to know every other router.</li>
</ul><h3>Bandwidth in/out</h3><div align="justify">
Should be self-explanatory. All values are in bytes per second, not bits per second.
Change your bandwidth limits on the <a href="config.jsp#help">configuration page</a>.
@@ -82,9 +82,9 @@ or external programs connecting through SAM, BOB, or directly to I2CP.
The actual tunnels are shown on the <a href="tunnels.jsp">the tunnels page</a>.</div><ul>
<li class="tidylist"><div align="justify"><b>Exploratory:</b>
Tunnels built by your router and used for communication with the floodfill peers,
building new tunnels, and testing existing tunnels.</div>
building new tunnels, and testing existing tunnels.</div></li>
<li class="tidylist"><b>Client:</b>
Tunnels built by your router for each client's use.
Tunnels built by your router for each client's use.</li>
<li class="tidylist"><b>Participating:</b>
Tunnels built by other routers through your router.
This may vary widely depending on network demand, your
@@ -92,11 +92,11 @@ shared bandwidth, and amount of locally-generated traffic.
The recommended method for limiting participating tunnels is
to change your share percentage on the <a href="config.jsp#help">configuration page</a>.
You may also limit the total number by setting <tt>router.maxParticipatingTunnels=nnn</tt> on
the <a href="configadvanced.jsp">advanced configuration page</a>. <a href="configstats.jsp#tunnel.participatingTunnels">[Enable graphing]</a>.
the <a href="configadvanced.jsp">advanced configuration page</a>. <a href="configstats.jsp#tunnel.participatingTunnels">[Enable graphing]</a>.</li>
<li class="tidylist"><b>Share ratio:</b>
The number of participating tunnels you route for others, divided by the total number of hops in
all your exploratory and client tunnels.
A number greater than 1.00 means you are contributing more tunnels to the network than you are using.
A number greater than 1.00 means you are contributing more tunnels to the network than you are using.</li>
</ul>
<h3>Congestion</h3><div align="justify">
@@ -108,27 +108,27 @@ and their status is not available in the router console.
The job lag should generally be zero.
If it is consistently higher than 500ms, your computer is very slow, or the
router has serious problems.
<a href="configstats.jsp#jobQueue.jobLag">[Enable graphing]</a>.
<a href="configstats.jsp#jobQueue.jobLag">[Enable graphing]</a>.</li>
<li class="tidylist"><b>Message delay:</b>
How long an outbound message waits in the queue.
This should generally be a few hundred milliseconds or less.
If it is consistently higher than 1000ms, your computer is very slow,
or you should adjust your bandwidth limits, or your (bittorrent?) clients
may be sending too much data and should have their transmit bandwidth limit reduced.
<a href="configstats.jsp#transport.sendProcessingTime">[Enable graphing]</a> (transport.sendProcessingTime).
<a href="configstats.jsp#transport.sendProcessingTime">[Enable graphing]</a> (transport.sendProcessingTime).</li>
<li class="tidylist"><b>Tunnel lag:</b>
This is the round trip time for a tunnel test, which sends a single message
out a client tunnel and in an exploratory tunnel, or vice versa.
It should usually be less than 5 seconds.
If it is consistently higher than that, your computer is very slow,
or you should adjust your bandwidth limits, or there are network problems.
<a href="configstats.jsp#tunnel.testSuccessTime">[Enable graphing]</a> (tunnel.testSuccessTime).
<a href="configstats.jsp#tunnel.testSuccessTime">[Enable graphing]</a> (tunnel.testSuccessTime).</li>
<li class="tidylist"><b>Handle backlog:</b>
This is the number of pending requests from other routers to build a
participating tunnel through your router.
It should usually be close to zero.
If it is consistently high, your computer is too slow,
and you should reduce your share bandwidth limits.
and you should reduce your share bandwidth limits.</li>
<li class="tidylist"><b>Accepting/Rejecting:</b>
Your router's status on accepting or rejecting
requests from other routers to build a
@@ -136,7 +136,7 @@ participating tunnel through your router.
Your router may accept all requests, accept or reject a percentage of requests,
or reject all requests for a number of reasons, to control
the bandwidth and CPU demands and maintain capacity for
local clients.</ul>
local clients.</li></ul>
<h2>Legal stuff</h2><p>The I2P router (router.jar) and SDK (i2p.jar) are almost entirely public domain, with
a few notable exceptions:</p><ul>
@@ -155,7 +155,7 @@ instance (trimmed down, as in, we do not include the demo apps or other add-ons,
allowing you to deploy standard JSP/Servlet web applications into your router. Jetty in turn makes use of
Apache's javax.servlet (javax.servlet.jar) implementation.
This product includes software developed by the Apache Software Foundation
(http://www.apache.org/). </p>
(http://www.apache.org/).</p>
<p>Another application you can see on this webpage is <a href="http://www.i2p2.i2p/i2ptunnel">I2PTunnel</a>
(your <a href="i2ptunnel/" target="_blank">web interface</a>) - a GPL'ed application written by mihi that
@@ -168,7 +168,9 @@ more information).</p>
<p>The router by default also includes human's public domain <a href="http://www.i2p2.i2p/sam">SAM</a> bridge,
which other client applications (such the <a href="http://duck.i2p/i2p-bt/">bittorrent port</a>) can use.
There is also an optimized library for doing large number calculations - jbigi - which in turn uses the
LGPL licensed <a href="http://swox.com/gmp/">GMP</a> library, tuned for various PC architectures. Launchers for windows users are built with <a href="http://launch4j.sourceforge.net/">Launch4J</a>, and the installer is built with <a href="http://www.izforge.com/izpack/">IzPack</a>. For
LGPL licensed <a href="http://swox.com/gmp/">GMP</a> library, tuned for various PC architectures. Launchers for windows users
are built with <a href="http://launch4j.sourceforge.net/">Launch4J</a>, and the installer is built with
<a href="http://www.izforge.com/izpack/">IzPack</a>. For
details on other applications available, as well as their licenses, please see the
<a href="http://www.i2p2.i2p/licenses">license policy</a>. Source for the I2P code and most bundled
client applications can be found on our <a href="http://www.i2p2.i2p/download">download page</a>.

View File

@@ -15,11 +15,11 @@
اذا رغبت في المساعدة أو ترجمة الوثائق، أو المساعدة في أشياء أخرى، انظر اسفله
<a href="http://www.i2p2.i2p/getinvolved.html">تطوع</a>
</p><p>المزيد من المساعدة هنا:
</p>المزيد من المساعدة هنا:
<ul class="links">
<li class="tidylist"><a href="http://www.i2p2.i2p/faq.html">ابئلة شائعة www.i2p2.i2p</a>
<br>يمكن ايضا<a href="http://forum.i2p/">I2P منتدى</a>
او بالدردشة على IRC.</p>
او بالدردشة على IRC.</li></ul>
<h2>شريط المعلومات</h2><p>
يمكن للاحصائات أن
@@ -29,14 +29,14 @@
<li class="tidylist"><b>:هوية</b>
الحروف الأولى (24 bits) من 44-حرف (256-) Base64 hash.
The full hash is shown on your <a href="netdb.jsp?r=.">صفحة معلومات الموجه</a>.
هذا لا يكشف عن عنوان IP الخاص بك لأحد.
هذا لا يكشف عن عنوان IP الخاص بك لأحد.</li>
<li class="tidylist"><b>الاصدار</b>
اصدار I2P المستعمل
اصدار I2P المستعمل</li>
<li class="tidylist"><b>الآن</b>
الوقت الحالي (UTC)والانحراف الممكن. يحتاج I2P الى ساعة مضبوطة. اذا كان انحراف الساعة اكثر من بضع ثواني، قم بتصحيح الخلل.
الوقت الحالي (UTC)والانحراف الممكن. يحتاج I2P الى ساعة مضبوطة. اذا كان انحراف الساعة اكثر من بضع ثواني، قم بتصحيح الخلل.</li>
<li class="tidylist"><b>إمكانية الوصول</b>
امكانية الاتصال الخارجي بالموجه
المزيد من التفاصيل في <a href="config.jsp#help">صفحة الاعدادات</a>.
المزيد من التفاصيل في <a href="config.jsp#help">صفحة الاعدادات</a>.</li>
</ul><h3>النظائر</h3><ul>
<li class="tidylist"><b>مفعل</b>
هذا هو عدد النظائر التي تم إرسال أو تلقيها رسالة في الدقائق القليلة الماضية.
@@ -44,25 +44,25 @@ The full hash is shown on your <a href="netdb.jsp?r=.">صفحة معلومات
تقاسم عرض النطاق الترددي ، وحركة المرور المولدة محليا.
والرقم الثاني هو عدد من نظرائه ينظر في آخر ساعة أو نحو ذلك.
لا تشعر بالقلق إذا كانت هذه الأرقام تختلف على نطاق واسع.
<a href="configstats.jsp#router.activePeers">[تفعيل الرسم البياني]</a>.
<a href="configstats.jsp#router.activePeers">[تفعيل الرسم البياني]</a>.</li>
<li class="tidylist"><b>سريع</b>
هذا هو عدد النظائر التي تستعملها لانشاء أنفاق جديدة. هي في نطاق 8-30. النظائر السريعة في
<a href="profiles.jsp">صفحة البروفايل</a>.
<a href="configstats.jsp#router.fastPeers">[تفعيل الرسم البياني]</a>.
<a href="configstats.jsp#router.fastPeers">[تفعيل الرسم البياني]</a>.</li>
<li class="tidylist"><b>قدرة عالية</b>
هذا هو عدد النظائر التي تستعملها لانشاء أنفاق الاكتشاف. هي في نطاق 8-75. النظائر السريعة. النظائر القدرة عالية تظهر هنا.
<a href="profiles.jsp">صفحة البروفايل</a>.
<a href="configstats.jsp#router.highCapacityPeers">[تفعيل الرسم البياني]</a>.
<a href="configstats.jsp#router.highCapacityPeers">[تفعيل الرسم البياني]</a>.</li>
<li class="tidylist"><b>المندمجة جيدا</b>
هذا هو عدد النظائر المستعملة في الاتصال بقاعدة البيانات. النظائر المندمجة جيدا موجودة في أسفل
<a href="profiles.jsp">صفحة البروفايل</a>.
<a href="profiles.jsp">صفحة البروفايل</a>.</li>
<li class="tidylist"><b>المعروفة</b>
هذا هو عدد الموجهات المعروفة.
والظاهرة في صفحة <a href="netdb.jsp">قاعدة البيانات</a>
هي مابين 100 الى 1000 او أكثر.
هذا العدد ليس حجم الاجمالي للشبكة،
يمكنه ان بتغيير حسب سرعة الاتصال.
</li>
</ul><h3>سرعة الاتصال الداخلي/خارجي</h3><div align="justify">
السرعة ب بايت في الثانية
غير السرعة في <a href="config.jsp#help">صفحة الاعدادات</a>.
@@ -76,18 +76,18 @@ The full hash is shown on your <a href="netdb.jsp?r=.">صفحة معلومات
الأنفاق الحالية موجودة في <a href="tunnels.jsp">صفحة الأنفاق</a>.</div><ul>
<li class="tidylist"><div align="justify"><b>تصفح</b>
الأنفاق المستخدمة من طرف الموجه تستعمل في الاتصال مع النظائر، انشاء انفاق جديدة.
</div>
</div></li>
<li class="tidylist"><b>المستخدمين</b>
الأنفاق المستخدمة من طرف الموجه
الأنفاق المستخدمة من طرف الموجه </li>
<li class="tidylist"><b>المشاركة</b>
الأنفاق المنشئة من طرف موجهات أخرى عبر موجهك.
هذا ينبني على درجة استخدام الشبكة، مقدار المشاركة...
يمكنك تغيير درجة المشاركة بـ <a href="config.jsp#help">صفحة الاعدادات</a>.
You may also limit the total number by setting <tt>router.maxParticipatingTunnels=nnn</tt> on
the <a href="configadvanced.jsp">صفحة الاعدادات المتقدمة</a>. <a href="configstats.jsp#tunnel.participatingTunnels">[تفعيل الرسم البياني]</a>.
the <a href="configadvanced.jsp">صفحة الاعدادات المتقدمة</a>. <a href="configstats.jsp#tunnel.participatingTunnels">[تفعيل الرسم البياني]</a>.</li>
<li class="tidylist"><b>نسبة المشاركة</b>
عدد الانفاق المشاركة، مقسوما على عدد اجمالي الانفاق.
عدد أكبر من 1.00 يعني انك تساهم في الشبكة بعدد اكبر مما تستهلك.
عدد أكبر من 1.00 يعني انك تساهم في الشبكة بعدد اكبر مما تستهلك.</li>
</ul>
<h3>ازدحام</h3><div align="justify">
@@ -99,27 +99,27 @@ and their status is not available in the router console.
The job lag should generally be zero.
If it is consistently higher than 500ms, your computer is very slow, or the
router has serious problems.
<a href="configstats.jsp#jobQueue.jobLag">[تفعيل الرسم البياني]</a>.
<a href="configstats.jsp#jobQueue.jobLag">[تفعيل الرسم البياني]</a>.</li>
<li class="tidylist"><b>Message delay:</b>
How long an outbound message waits in the queue.
This should generally be a few hundred milliseconds or less.
If it is consistently higher than 1000ms, your computer is very slow,
or you should adjust your bandwidth limits, or your (bittorrent?) clients
may be sending too much data and should have their transmit bandwidth limit reduced.
<a href="configstats.jsp#transport.sendProcessingTime">[تفعيل الرسم البياني]</a> (transport.sendProcessingTime).
<a href="configstats.jsp#transport.sendProcessingTime">[تفعيل الرسم البياني]</a> (transport.sendProcessingTime).</li>
<li class="tidylist"><b>Tunnel lag:</b>
This is the round trip time for a tunnel test, which sends a single message
out a client tunnel and in an exploratory tunnel, or vice versa.
It should usually be less than 5 seconds.
If it is consistently higher than that, your computer is very slow,
or you should adjust your bandwidth limits, or there are network problems.
<a href="configstats.jsp#tunnel.testSuccessTime">[تفعيل الرسم البياني]</a> (tunnel.testSuccessTime).
<a href="configstats.jsp#tunnel.testSuccessTime">[تفعيل الرسم البياني]</a> (tunnel.testSuccessTime).</li>
<li class="tidylist"><b>Handle backlog:</b>
This is the number of pending requests from other routers to build a
participating tunnel through your router.
It should usually be close to zero.
If it is consistently high, your computer is too slow,
and you should reduce your share bandwidth limits.
and you should reduce your share bandwidth limits.</li>
<li class="tidylist"><b>Accepting/Rejecting:</b>
Your router's status on accepting or rejecting
requests from other routers to build a
@@ -127,7 +127,7 @@ participating tunnel through your router.
Your router may accept all requests, accept or reject a percentage of requests,
or reject all requests for a number of reasons, to control
the bandwidth and CPU demands and maintain capacity for
local clients.</ul>
local clients.</li></ul>
<h2>Legal stuff</h2><p>The I2P router (router.jar) and SDK (i2p.jar) are almost entirely public domain, with
a few notable exceptions:</p><ul>
@@ -146,7 +146,7 @@ instance (trimmed down, as in, we do not include the demo apps or other add-ons,
allowing you to deploy standard JSP/Servlet web applications into your router. Jetty in turn makes use of
Apache's javax.servlet (javax.servlet.jar) implementation.
This product includes software developed by the Apache Software Foundation
(http://www.apache.org/). </p>
(http://www.apache.org/).</p>
<p>Another application you can see on this webpage is <a href="http://www.i2p2.i2p/i2ptunnel">I2PTunnel</a>
(your <a href="i2ptunnel/" target="_blank">web interface</a>) - a GPL'ed application written by mihi that
@@ -159,7 +159,9 @@ more information).</p>
<p>The router by default also includes human's public domain <a href="http://www.i2p2.i2p/sam">SAM</a> bridge,
which other client applications (such the <a href="http://duck.i2p/i2p-bt/">bittorrent port</a>) can use.
There is also an optimized library for doing large number calculations - jbigi - which in turn uses the
LGPL licensed <a href="http://swox.com/gmp/">GMP</a> library, tuned for various PC architectures. Launchers for windows users are built with <a href="http://launch4j.sourceforge.net/">Launch4J</a>, and the installer is built with <a href="http://www.izforge.com/izpack/">IzPack</a>. For
LGPL licensed <a href="http://swox.com/gmp/">GMP</a> library, tuned for various PC architectures.
Launchers for windows users are built with <a href="http://launch4j.sourceforge.net/">Launch4J</a>, and
the installer is built with <a href="http://www.izforge.com/izpack/">IzPack</a>. For
details on other applications available, as well as their licenses, please see the
<a href="http://www.i2p2.i2p/licenses">license policy</a>. Source for the I2P code and most bundled
client applications can be found on our <a href="http://www.i2p2.i2p/download">download page</a>.

View File

@@ -15,12 +15,12 @@ Traduction de mars 2011 (magma@mail.i2p)
<div class="main" id="main"><p>
Si vous souhaitez améliorer ou traduire la documentation ou d'autres versants du projet, merci de vous reporter à
la page consacrée aux <a href="http://www.i2p2.i2p/getinvolved_fr.html">volontaires</a>.
</p><p>D'autres détails sont disponibles ici:
</p>D'autres détails sont disponibles ici:
<ul class="links">
<li class="tidylist"><a href="http://www.i2p2.i2p/faq.html">FAQ en anglais sur www.i2p2.i2p</a>
<li class="tidylist"><a href="http://www.i2p2.i2p/faq_fr.html">les FAQ en français</a>.</ul>
<li class="tidylist"><a href="http://www.i2p2.i2p/faq.html">FAQ en anglais sur www.i2p2.i2p</a></li>
<li class="tidylist"><a href="http://www.i2p2.i2p/faq_fr.html">les FAQ en français</a>.</li></ul>
<br>Il y a aussi le <a href="http://forum.i2p/">forum I2P</a>
et l'IRC.</p>
et l'IRC.
<h2>Informations du panneau de surveillance</h2><p>
Plusieurs des statistiques affichées dans le panneau de surveillance peuvent être
@@ -30,40 +30,40 @@ analyse sur la durée.
<li class="tidylist"><b>Identité locale:</b>
Cliquez sur "Afficher" pour voir l'empreinte Base64 à 44 caractères (256 bits) de votre routeur. Le hachage
complet est affiché sur votre <a href="netdb.jsp?r=.">page d'infos routeur</a>. Ne la divulguez jamais à personne,
car l'info routeur contient votre adresse IP.
car l'info routeur contient votre adresse IP.</li>
<li class="tidylist"><b>Version:</b>
La version d'I2P qui vous affiche actuellement cette page.
La version d'I2P qui vous affiche actuellement cette page.</li>
<li class="tidylist"><b>Lancé depuis:</b>
Indique depuis combien de temps le routeur tourne.
Indique depuis combien de temps le routeur tourne.</li>
<li class="tidylist"><b>Réseau:</b>
Statut de joignabilité du routeur par les autres routeurs.
Plus d'infos sur la page de <a href="config.jsp#help">configuration</a>.
</ul><h3>Pairs</h3><ul>
</li></ul><h3>Pairs</h3><ul>
<li class="tidylist"><b>Actifs:</b>
le premier nombre est celui des routeurs avec qui le votre a communiqué dans les dernières minutes. Ça peut varier de
8-10 à plusieurs centaines, selon votre bande passante et son rapport de partage, et le trafic généré localement. Le
second est celui des pairs vus dans les dernières heures. Ces nombres penvent varier sensiblement sans conséquence.
<a href="configstats.jsp#router.activePeers">[Activer le graphique]</a> (activer auparavant "toutes
les statistiques").
les statistiques").</li>
<li class="tidylist"><b>Rapides:</b>
le nombre de pairs que vous mettez à contribution pour construire vos tunnels clients. En général dans une tranche de
8 à 30. Vos pairs rapides sont détaillés sur la page <a href="profiles.jsp">profils</a>.
<a href="configstats.jsp#router.fastPeers">[Activer le graphique]</a>.
<a href="configstats.jsp#router.fastPeers">[Activer le graphique]</a>.</li>
<li class="tidylist"><b>Hautes capacités:</b>
nombre des pairs que vous utilisez pour construire quelques uns de vos tunnels exploratoires. Habituellement de 8 à 75.
Les pairs rapides font partie du groupe des "Hautes capacités". Vos pairs à hautes capacités sont aussi listés sur
la page <a href="profiles.jsp">profils</a>.
<a href="configstats.jsp#router.highCapacityPeers">[Activer le graphique]</a> (activer auparavant "toutes les
statistiques").
statistiques").</li>
<li class="tidylist"><b>Bien intégrés:</b>
vous utilisez ce groupe pour vos requêtes à la base de données du réseau. Ils sont souvent des pairs de remplissage par
diffusion ("floodfill"). Vos pairs "bien intégrés" sont affichés en bas de la même page
<a href="profiles.jsp">profils</a>.
<a href="profiles.jsp">profils</a>.</li>
<li class="tidylist"><b>Connus:</b> c'est tous les routeurs dont vous connaissez l'existance. Il sont listés sur la
page <a href="netdb.jsp">base de données du réseau</a>. De moins de 100 à 1000 ou plus. Ce nombre ne représente pas la
taille totale du réseau; il varie en fonction de votre bande passante totale et son rapport de partage, et du trafic
local. I2P n'a pas besoin que chaque routeur connaisse tous les autres.
</ul><h3>Bande passante entrée/sortie</h3><div align="justify">
</li></ul><h3>Bande passante entrée/sortie</h3><div align="justify">
Ça parle tout seul. Toutes les valeurs sont en octets par seconde (o/s), pas en bits par seconde (b/s). Modifiez vos
limites de bande passante sur la page de <a href="config.jsp#help">configuration</a>.
Le <a href="graphs.jsp">graphique de bande passante</a> est activé par défaut.</div>
@@ -75,18 +75,18 @@ I2CP.
</div><h3>TUNNELS:</h3><div align="justify">
Les tunnels actuels sont affichés sur la page <a href="tunnels.jsp">tunnels</a>.</div><ul>
<li class="tidylist"><div align="justify"><b>Exploratoires:</b> tunnels créés par votre routeur et utilisés avec les
pairs diffuseurs pour la création des nouveaux tunnels et le test des tunnels existants.</div>
<li class="tidylist"><b>Clients:</b> tunnels créés par votre routeur pour chaque utilisation cliente.
pairs diffuseurs pour la création des nouveaux tunnels et le test des tunnels existants.</div></li>
<li class="tidylist"><b>Clients:</b> tunnels créés par votre routeur pour chaque utilisation cliente.</li>
<li class="tidylist"><b>Participants:</b> les tunnels créés par d'autres routeurs et qui passent par le votre. Leur
nombre dépend largement de la demande du réseau, de votre part de bande passante partagée, et du trafic local.
La méthode recommandée pour limiter leur nombre est de diminuer le rapport de bande passante partagée dans la
<a href="config.jsp#help">configuration</a>. Vous pouvez également limiter ce nombre en définissant la variable
<tt>router.maxParticipatingTunnels=nnn</tt> dans la <a href="configadvanced.jsp">configuration avancée</a>.
<a href="configstats.jsp#tunnel.participatingTunnels">[Activer le graphique]</a>.
<a href="configstats.jsp#tunnel.participatingTunnels">[Activer le graphique]</a>.</li>
<li class="tidylist"><b>Rapport de partage:</b> le nombre de tunnels participants que vous routez pour les autres,
divisé par le nombre total de sauts dans tous vos tunnels exploratoires et clients. S'il est supérieur à 1, cela
signifie que vous contribuez à plus de tunnels que vous n'en utilisez.
</ul>
</li></ul>
<h3>ENCOMBREMENT</h3><div align="justify">
Indications de base sur la charge du routeur:</div><ul>
@@ -94,23 +94,23 @@ Indications de base sur la charge du routeur:</div><ul>
présentée la pages des <a href="jobs.jsp">tâches</a>. Malheureusement, il y a dans le routeur plusieurs autres files
d'attentes qui ne peuvent être affichées dans la console. Le retard de tâches devrait rester à zéro en permamence. s'il
régulièrement supérieur à 500ms, soit votre PC est très lent, soit le routeur a de sérieux problèmes.
<a href="configstats.jsp#jobQueue.jobLag">[Activer le graphique]</a>.
<a href="configstats.jsp#jobQueue.jobLag">[Activer le graphique]</a>.</li>
<li class="tidylist"><b>Retard de messages:</b> temps de rétention des messages en file d'attente d'envois, normalement
quelques centaines de ms ou moins. Au dessus d'une seconde, votre PC est très lent, vous devriez fignoler vos réglages
de bande passante, ou vos clients (bittorrent, iMule...?) envoient trop de données et il faudrait voir à leur tenir
la bride. <a href="configstats.jsp#transport.sendProcessingTime">[Activer le graphique]</a>
(transport.sendProcessingTime).
(transport.sendProcessingTime).</li>
<li class="tidylist"><b>Retard de tunnels:</b> le temps d'aller-retour pour un test de tunnel (envoi d'un seul message
par un tunnel client et dans un tunnel exploratoire ou vice versa. Normalement inférieur à 5s. Si c'est constamment
supérieur, votre PC est très lent, vous devriez retoucher vos limites de bande passante, ou il y a un problème réseau.
<a href="configstats.jsp#tunnel.testSuccessTime">[Activer le graphique]</a> (tunnel.testSuccessTime).
<a href="configstats.jsp#tunnel.testSuccessTime">[Activer le graphique]</a> (tunnel.testSuccessTime).</li>
<li class="tidylist"><b>En attente:</b> nombre de requêtes de création de tunnels participants en attente provenant
d'autres routeurs. Normalement proche de zéro. Sinon, votre ordinateur est trop lent et vous devriez diminuer votre
limite de bande passante partagée.
limite de bande passante partagée.</li>
<li class="tidylist"><b>Accepte/Refuse:</b> c'est le statut de votre routeur au regard de son comportement vis à vis
des demandes de création de tunnels participants provenant d'autres routeurs. Votre routeur peut accepter ou refuser
tout ou partie des requêtes, ou les refuser en totalité pour des raisons prévues telles que le contrôle de la bande
passante et des ressources CPU en vue de préserver les performances des clients locaux.</ul>
passante et des ressources CPU en vue de préserver les performances des clients locaux.</li></ul>
<h2>Informations légales</h2><p>Le routeur I2P (router.jar) et le SDK (i2p.jar) sont presque entièrement dans le
domaine public, à quelques notobles exceptions près:</p><ul>
@@ -128,7 +128,7 @@ qui est une version allégée d'une instance <a href="http://jetty.mortbay.com/j
ce que nous n'avons pas inclus les applications de démo et autres compléments, et que nous avons simplifié la
configuration), vous permettant de déployer dans votre routeur des applications web JSP/Servlet standards. De son côté
Jetty fait usage de l'implémentation javax.servlet d'Apache. Ce dispositif inclus du logiciel développé par la
fondation Apache Software (http://www.apache.org/). </p>
fondation Apache Software (http://www.apache.org/).</p>
<p>Une autre application visible sur cette page: <a href="http://www.i2p2.i2p/i2ptunnel">I2PTunnel</a>
(votre <a href="i2ptunnel/" target="_blank">interface web</a>) sous licence GPL écrite par mihi qui vous permet de

View File

@@ -15,12 +15,12 @@
Als je wilt helpen om de documentatie te verbeteren of vertalen, of wilt helpen
met andere aspecten van het project, zie dan de documentatie voor
<a href="http://www.i2p2.i2p/getinvolved.html">vrijwilligers.</a>
</p><p>Verdere ondersteuning is hier beschikbaar:
</p>Verdere ondersteuning is hier beschikbaar:
<ul class="links">
<li class="tidylist"><a href="http://www.i2p2.i2p/faq.html">FAQ op www.i2p2.i2p</a>
<li class="tidylist"><a href="http://www.i2p2.i2p/faq.html">FAQ op www.i2p2.i2p</a></li>
</ul>
<br>Je kunt ook het <a href="http://forum.i2p/">I2P forum</a>
of IRC proberen.</p>
of IRC proberen.
<h2>Informatie over de Summary Bar</h2><p>
Veel van de statistieken op de summary bar kunnen
@@ -32,14 +32,14 @@ Veel van de statistieken op de summary bar kunnen
<li class="tidylist"><b>Lokale Identiteit:</b>
De eerste vier karakters (24 bits) van je 44-karakter (256-bit) Base64 router hash.
De volledige hash is getoond op je <a href="netdb.jsp?r=.">router info pagina</a>.
Vertel deze aan niemand, want de router info bevat je IP.
Vertel deze aan niemand, want de router info bevat je IP.</li>
<li class="tidylist"><b>Versie:</b>
De versie van de I2P software die je nu gebruikt.
De versie van de I2P software die je nu gebruikt.</li>
<li class="tidylist"><b>Uptime:</b>
Hoe lang je I2P router al draait.
Hoe lang je I2P router al draait.</li>
<li class="tidylist"><b>Netwerk Bereikbaarheid:</b>
De bereikbaarheid van je router door andere routers.
Meer informatie is te vinden op de <a href="config.jsp#help">configuratie pagina</a>.
Meer informatie is te vinden op de <a href="config.jsp#help">configuratie pagina</a>.</li>
</ul>
<h3>Peers</h3><ul>
@@ -51,21 +51,21 @@ en lokaal gegenereerd verkeer. Het tweede nummer is het aantal peers dat je in
het laatste uur hebt gezien. Wees niet ongerust wanneer deze aantallen erg
vari&euml;ren.
<a href="configstats.jsp#router.activePeers">[Grafieken inschakelen]</a>.
<a href="configstats.jsp#router.activePeers">[Grafieken inschakelen]</a>.</li>
<li class="tidylist"><b>Snel:</b>
Dit is het aantal peers dat je gebruikt om client tunnels mee te bouwen. Het ligt over
het algemeen tussen 8 en 30.
Je snelle peers worden getoond op de <a href="profiles.jsp">profielen pagina</a>.
<a href="configstats.jsp#router.fastPeers">[Grafieken inschakelen]</a>.
<a href="configstats.jsp#router.fastPeers">[Grafieken inschakelen]</a>.</li>
<li class="tidylist"><b>Grote capaciteit:</b>
Dit is het aantal peers dat je gebruikt om sommige van de onderzoekende tunnels mee te maken.
Het ligt over het algemeen tussen de 8 en 75. De snelle peers zijn inbegrepen in de categorie grote capaciteit.
De grote capaciteits peers worden getoond op de <a href="profiles.jsp">profielen pagina</a>.
<a href="configstats.jsp#router.highCapacityPeers">[Grafieken inschakelen]</a>.
<a href="configstats.jsp#router.highCapacityPeers">[Grafieken inschakelen]</a>.</li>
<li class="tidylist"><b>Ge&iuml;ntegreerd:</b>
Dit is het aantal peers dat je gebruikt bij het opzoeken in de network database.
Dit zijn gebruikelijk de "floodfill" peers.
Je goed ge&iuml;ntegreerde peers worden getoond aan de onderkant van de <a href="profiles.jsp">profielen pagina</a>.
Je goed ge&iuml;ntegreerde peers worden getoond aan de onderkant van de <a href="profiles.jsp">profielen pagina</a>.</li>
<li class="tidylist"><b>Bekend:</b>
Dit is het aantal routers dat bekend is bij je router.
Ze worden getoond op de <a href="netdb.jsp">netwerk database pagina</a>.
@@ -74,7 +74,7 @@ Dit aantal is niet de totale grootte van het netwerk;
het kan erg vari&euml;ren afhankelijk van je totale bandbreedte,
gedeelde bandbreedte en lokaal gegenereerd verkeer.
Voor I2P is het niet nodig dat een router alle andere routers kent.
</ul>
</li></ul>
<h3>Bandbreedte in/out</h3><div align="justify">
Dit zou zichzelf moeten verklaren. Alle waarden zijn in bytes per seconde, niet in bits per seconde.
@@ -85,9 +85,9 @@ Bandbreedte wordt standaard <a href="graphs.jsp">geplot</a>.</div>
De tunnels zelf worden getoond op de <a href="tunnels.jsp">tunnels pagina</a>.</div><ul>
<li class="tidylist"><div align="justify"><b>Onderzoekend:</b>
Tunnels gebouwd door je router en gebruikt om te communiceren met de floodfill peers,
voor het bouwen van nieuwe tunnels en testen van bestaande tunnels.</div>
voor het bouwen van nieuwe tunnels en testen van bestaande tunnels.</div></li>
<li class="tidylist"><b>Client:</b>
Tunnels gebouwd door je router voor het gebruik door elke client.
Tunnels gebouwd door je router voor het gebruik door elke client.</li>
<li class="tidylist"><b>Deelnemend:</b>
Tunnels gebouwd door andere routers die door je eigen router heen lopen.
Dit kan erg vari&euml;ren afhankelijk van de vraag vanuit het netwerk,
@@ -95,11 +95,11 @@ je gedeelde bandbreedte en hoeveelheid lokaal gegenereerd verkeer.
De aanbevolen methode om het aantal deelnemende tunnels te beperken
is door het share percentage te wijzigen op de <a href="config.jsp#help">configuratie pagina</a>.
Je kan het totale aantal ook beperken met de instelling <tt>router.maxParticipatingTunnels=nnn</tt> op
de <a href="configadvanced.jsp">geavanceerde configuratie pagina</a>. <a href="configstats.jsp#tunnel.participatingTunnels">[Grafieken inschakelen]</a>.
de <a href="configadvanced.jsp">geavanceerde configuratie pagina</a>. <a href="configstats.jsp#tunnel.participatingTunnels">[Grafieken inschakelen]</a>.</li>
<li class="tidylist"><b>Share rato:</b>
Het aantal deelnemende tunnels dat je voor andere routeert, gedeeld door het totale aantal hops in al je onderzoekende en client tunnels.
Een aantal groter dan 1.00 betekent dat je meer tunnels aan het netwerk bijdraagt dan je gebruikt.
</ul>
</li></ul>
<h3>Verstopping</h3><div align="justify">
Een aantal basis indicatoren voor een router overbelasting:</div><ul>
@@ -110,33 +110,33 @@ hun status is niet beschikbaar in de router console.
De taak vertraging zou over het algemeen nul moeten zijn.
Indien dit consequent hoger is dan 500ms, dan is of je computer erg traag of
heeft de router een serieus probleem.
<a href="configstats.jsp#jobQueue.jobLag">[Grafieken inschakelen]</a>.
<a href="configstats.jsp#jobQueue.jobLag">[Grafieken inschakelen]</a>.</li>
<li class="tidylist"><b>Bericht vertraging:</b>
Hoe lang een uitgaand bericht wacht in de wachtrij.
Dit zou over het algemeen een aantal honderd milliseconden of minder moeten zijn.
Indien dit consequent hoger is dan 1000ms, dan is of je computer erg traag
of moet je je bandbreedte instellingen aanpassen, of je (bittorrent?) clients
versturen mogelijk teveel data en moeten hun transmissie bandbreedte beperkt hebben.
<a href="configstats.jsp#transport.sendProcessingTime">[Grafieken inschakelen]</a> (transport.sendProcessingTime).
<a href="configstats.jsp#transport.sendProcessingTime">[Grafieken inschakelen]</a> (transport.sendProcessingTime).</li>
<li class="tidylist"><b>Tunnel vertraging:</b>
Dit is de rondgangstijd voor een tunnel test, welke een enkel bericht verstuurt
vanuit een client tunnel dat dan bij een onderzoekende tunnel naar binnen gaat, of omgekeerd.
Dit zou over het algemeen minder dan 5 seconden moeten zijn.
Indien dit consequent hoger is, dan is of je computer erg traag of
moet je je bandbreedte instellingen aanpassen of zijn er netwerk problemen.
<a href="configstats.jsp#tunnel.testSuccessTime">[Grafieken inschakelen]</a> (tunnel.testSuccessTime).
<a href="configstats.jsp#tunnel.testSuccessTime">[Grafieken inschakelen]</a> (tunnel.testSuccessTime).</li>
<li class="tidylist"><b>Achterstand:</b>
Dit is het aantal wachtende aanvragen van andere routers om een deelnemende
tunnel door je eigen router te bouwen.
Dit zou over het algemeen dicht bij de nul moeten zijn.
Indien dit consequent hoog is, dan is of je computer te traag of
moet je je bandbreedte instellingen aanpassen.
moet je je bandbreedte instellingen aanpassen.</li>
<li class="tidylist"><b>Accepteren / Weigeren:</b>
De status van de router voor het accepteren of weigeren
van verzoeken van andere routers om een deelnemende tunnel door je router te bouwen.
Je router kan alle aanvragen accepteren, een percentage accepteren of weigeren,
of alle aanvragen weigeren om verschillende redenen, om de bandbreedte en CPU
gebruik te beheren en capaciteit te houden voor lokale clients.</ul>
gebruik te beheren en capaciteit te houden voor lokale clients.</li></ul>
<h3>Lokale bestemmingen</h3><div align="justify">
De lokale applicaties die door je router verbinden.

View File

@@ -34,19 +34,19 @@
Первые 4 символа (24 бита) из Вашего 44-символьного (256-битного) Base64 хеша маршрутизатора. Полный хеш показывается на странице <a href="netdb.jsp?r=.">информации о маршрутизаторе</a>. Никогда никому не показывайте хеш своего маршрутизатора, так как в нем содержится информация о Вашем IP-адресе.
</li>
<li class="tidylist"><b>Версия:</b>
Версия Вашего I2P маршрутизатора.
Версия Вашего I2P маршрутизатора. </li>
<li class="tidylist"><b>Время:</b>
Текущее время (UTC) и величина рассинхронизации времени (если есть). Для правильной работы I2P нужно точное системное время. Пожалуйста, поправьте системное время, если расхождение приближается к 1-ой минуте.
</li>
<li class="tidylist"><b>Доступность:</b>
Результат проверки Вашим маршрутизатором, насколько он открыт для входящих соединений от маршрутизаторов других пользователей. Подробнее смотрите на <a href="config.jsp#help">странице сетевых настроек</a>.
</li>
</ul>
<h3>Пиры</h3><ul>
@@ -54,23 +54,23 @@
<li class="tidylist"><b>Активные:</b>
Первое число — это количество пиров, с которыми происходил обмен сообщениями за последние несколько минут. Значение может меняться от 8-10 до нескольких сотен в зависимости от Вашего общего трафика, доли транзитного трафика, локально создаваемого трафика. Второе число — это количество пиров, наблюдавшихся за последний час. Не волнуйтесь, если эти числа сильно меняются. Это нормально. <a href="configstats.jsp#router.activePeers">[Включить построение графика]</a>.
</li>
<li class="tidylist"><b>Быстрые:</b>
Количество пиров, которые используются Вашим маршрутизатором для построения клиентских туннелей. В общем случае это значение будет в диапазоне 8-30. Список быстрых пиров можно посмотреть на странице <a href="profiles.jsp">профили</a>. <a href="configstats.jsp#router.fastPeers">[Включить построение графика]</a>.
</li>
<li class="tidylist"><b>Высокоёмкие:</b>
Количество пиров, которые используются Вашим маршрутизатором для построения части зондирующих туннелей. В общем случае это значение будет в диапазоне 8-75. Быстрые пиры входят в группу высокоёмких. Список высокоёмких пиров можно посмотреть на странице <a href="profiles.jsp">профили</a>. <a href="configstats.jsp#router.highCapacityPeers">[Включить построение графика]</a>.
</li>
<li class="tidylist"><b>Хорошо интегрированные:</b>
Количество пиров, которые используются Вашим маршрутизатором для запросов к сетевой базе данных. Обычно в таком качестве выступают «floodfill» пиры. Список хорошо интегрированных пиров можно посмотреть в конце страницы <a href="profiles.jsp">профили</a>.
</li>
<li class="tidylist"><b>Известные:</b>
Это общее количество пиров известных Вашему маршрутизатору. Их список показывается на странице <a href="netdb.jsp">обзор сетевой базы данных</a>. Это значение может варьироваться от десятков до тысяч. Значение не соответствует реальному полному размеру сети, так как маршрутизатору в сети I2P достаточно знать лишь часть других маршрутизаторов. Значение зависит от Вашего общего трафика, доли транзитного трафика, локально создаваемого трафика.
</li>
</ul>
<h3>Трафик (входящий/исходящий)</h3>
@@ -94,20 +94,20 @@
<li class="tidylist"><div align="justify"><b>Зондирующие:</b>
Туннели, созданные Вашим маршрутизатором для связи с floodfill-пирами, тестирования уже существующих туннелей и построения новых.</div>
</li>
<li class="tidylist"><b>Клиентские:</b>
Туннели, созданные Вашим маршрутизатором для каждого локального клиента.
</li>
<li class="tidylist"><b>Транзитные:</b>
Туннели, построенные другими маршрутизаторами, проходящие через Ваш маршрутизатор. Их количество может сильно варьироваться в зависимости от потребностей сети, настроенной доли транзитного трафика и объема локально создаваемого трафика. Рекомендуемый способ ограничения количества транзитных туннелей — настроить долю транзитного трафика на странице <a href="config.jsp#help">сетевых настроек</a>. Также можно задать точный ограничитель количества через параметр <tt>router.maxParticipatingTunnels=nnn</tt> на странице <a href="configadvanced.jsp">дополнительных настроек</a>.
<a href="configstats.jsp#tunnel.participatingTunnels">[Включить построение графика]</a>.
</li>
<li class="tidylist"><b>Доля транзита:</b>
Количество транзитных туннелей, проходящих через Ваш маршрутизатор, поделенное на суммарное количество хопов в Ваших зондирующих и клиентских туннелях. Значение больше 1.00 означает, что Вы предоставляете для сети больше туннелей, чем используете сами.
</li>
</ul>
<h3>Занятость</h3>
@@ -120,27 +120,27 @@
Как долго задания ожидают выполнения. Содержимое очереди можно посмотреть на странице <a href="jobs.jsp">очередь заданий</a>. К сожалению, есть ещё несколько внутренних очередей, статус которых в консоли не показывается. Задержка заданий в нормальной ситуации должна быть нулевой. Если она систематически выше 500ms, то либо Ваш компьютер слишком медленный, либо с Вашим маршрутизатором проблемы.
<a href="configstats.jsp#jobQueue.jobLag">[Включить построение графика]</a>.
</li>
<li class="tidylist"><b>Задержка сообщений:</b>
Как долго исходящие сообщения находятся в очереди. В нормальном случае эта задержка должна быть не выше нескольких сотен миллисекунд. Если она систематически выше 1000ms, то либо Ваш компьютер слишком медленный, либо Вам следует перенастроить ограничение скорости, либо локальные клиенты (чаще всего bittorrent) посылают слишком много данных. Для таких клиентов имеет смысл ограничить скорость.
<a href="configstats.jsp#transport.sendProcessingTime">[Включить построение графика]</a> (transport.sendProcessingTime).
</li>
<li class="tidylist"><b>Задержка туннелей:</b>
Время прохождения сигнала при проверке туннеля (сообщение посылается от клиентского туннеля до зондирующего или в обратном направлении). Это значение в нормальном случае должно быть ниже 5 секунд. Если оно систематически выше, то либо Ваш компьютер слишком медленный, либо Вам следует перенастроить ограничение скорости, либо с сетью что-то не в порядке.
<a href="configstats.jsp#tunnel.testSuccessTime">[Включить построение графика]</a> (tunnel.testSuccessTime).
</li>
<li class="tidylist"><b>Очередь запросов:</b>
Количество пока необработанных запросов от других маршрутизаторов о построении транзитных туннелей через Ваш маршрутизатор. В нормальном случае это значение должно быть около нуля. Если оно систематически выше, то Ваш компьютер слишком медленный и Вам следует настроить меньшую долю транзитного трафика.
</li>
<li class="tidylist"><b>Принимаем/Не принимаем туннели:</b>
Состояние Вашего маршрутизатора по приему или отклонению запросов от других маршрутизаторов о построении туннелей. Ваш маршрутизатор может принимать все запросы, принимать/отклонять часть запросов или отклонять все запросы, в зависимости от сетевой загрузки, нагрузки на процессор и необходимости резервировать полосу пропускания для локальных клиентов.
</li>
</ul>
<h2>Лицензии</h2>

View File

@@ -34,12 +34,16 @@
<a href="/?lang=ar&amp;consoleNonce=<%=consoleNonce%>"><img src="/flags.jsp?c=lang_ar" title="عربية" alt="عربية"></a>
<a href="/?lang=zh&amp;consoleNonce=<%=consoleNonce%>"><img src="/flags.jsp?c=cn" title="中文" alt="中文"></a>
<a href="/?lang=de&amp;consoleNonce=<%=consoleNonce%>"><img src="/flags.jsp?c=de" title="Deutsch" alt="Deutsch"></a>
<a href="/?lang=fr&amp;consoleNonce=<%=consoleNonce%>"><img src="/flags.jsp?c=fr" title="Français" alt="Français"></a>
<a href="/?lang=es&amp;consoleNonce=<%=consoleNonce%>"><img src="/flags.jsp?c=es" title="Español" alt="Español"></a>
<a href="/?lang=pt&amp;consoleNonce=<%=consoleNonce%>"><img src="/flags.jsp?c=pt" title="Português" alt="Português"></a>
<a href="/?lang=fi&amp;consoleNonce=<%=consoleNonce%>"><img src="/flags.jsp?c=fi" title="Suomi" alt="Suomi"></a>
<a href="/?lang=fr&amp;consoleNonce=<%=consoleNonce%>"><img src="/flags.jsp?c=fr" title="Français" alt="Français"></a><br/>
<a href="/?lang=it&amp;consoleNonce=<%=consoleNonce%>"><img src="/flags.jsp?c=it" title="Italiano" alt="Italiano"></a>
<a href="/?lang=nl&amp;consoleNonce=<%=consoleNonce%>"><img src="/flags.jsp?c=nl" title="Nederlands" alt="Nederlands"></a>
<a href="/?lang=pl&amp;consoleNonce=<%=consoleNonce%>"><img src="/flags.jsp?c=pl" title="Polski" alt="Polski"></a>
<a href="/?lang=pt&amp;consoleNonce=<%=consoleNonce%>"><img src="/flags.jsp?c=pt" title="Português" alt="Português"></a>
<a href="/?lang=ru&amp;consoleNonce=<%=consoleNonce%>"><img src="/flags.jsp?c=ru" title="Русский" alt="Русский"></a>
<a href="/?lang=sv&amp;consoleNonce=<%=consoleNonce%>"><img src="/flags.jsp?c=se" title="Svenska" alt="Svenska"></a>
<a href="/?lang=vi&amp;consoleNonce=<%=consoleNonce%>"><img src="/flags.jsp?c=vn" title="Tiếng Việt" alt="Tiếng Việt"></a>
</div>
<a name="top"></a>
<h2><%=intl._("Welcome to I2P")%></h2>

View File

@@ -8,17 +8,21 @@
*/
boolean rendered = false;
/**** unused
String templateFile = request.getParameter("template");
if (templateFile != null) {
java.io.OutputStream cout = response.getOutputStream();
response.setContentType("image/png");
rendered = net.i2p.router.web.StatSummarizer.instance().renderPng(cout, templateFile);
}
****/
net.i2p.stat.Rate rate = null;
String stat = request.getParameter("stat");
String period = request.getParameter("period");
boolean fakeBw = (stat != null && ("bw.combined".equals(stat)));
net.i2p.stat.RateStat rs = net.i2p.I2PAppContext.getGlobalContext().statManager().getRate(stat);
net.i2p.stat.RateStat rs = null;
if (stat != null)
rs = net.i2p.I2PAppContext.getGlobalContext().statManager().getRate(stat);
if ( !rendered && ((rs != null) || fakeBw) ) {
long per = -1;
try {
@@ -38,6 +42,8 @@ if ( !rendered && ((rs != null) || fakeBw) ) {
}
} else {
response.setContentType("image/png");
// very brief 45 sec expire
response.setDateHeader("Expires", net.i2p.I2PAppContext.getGlobalContext().clock().now() + (45*1000));
int width = -1;
int height = -1;
int periodCount = -1;
@@ -71,6 +77,9 @@ if ( !rendered && ((rs != null) || fakeBw) ) {
* a huge load for a page full of graphs if there's a problem
*/
if (!rendered) {
response.sendError(403, "That stat is not available");
if (stat != null)
response.sendError(403, "The stat " + stat + " is not available, it must be enabled for graphing on the stats configuration page.");
else
response.sendError(403, "No stat specified");
}
%>

File diff suppressed because it is too large Load Diff

File diff suppressed because it is too large Load Diff

File diff suppressed because it is too large Load Diff

File diff suppressed because it is too large Load Diff

View File

@@ -8,8 +8,8 @@ msgid ""
msgstr ""
"Project-Id-Version: I2P routerconsole\n"
"Report-Msgid-Bugs-To: \n"
"POT-Creation-Date: 2011-04-11 08:20+0000\n"
"PO-Revision-Date: 2011-05-02 13:21+0100\n"
"POT-Creation-Date: 2011-05-18 10:29+0000\n"
"PO-Revision-Date: 2011-05-18 13:35+0100\n"
"Last-Translator: magma <magma@mail.i2p>\n"
"Language-Team: I2P Project <foo@bar>\n"
"Language: \n"
@@ -378,6 +378,120 @@ msgstr "RX dupl."
msgid "The total number of duplicate packets received from the peer"
msgstr "Nombre de paquets en double reçus du pair"
#: ../../../router/java/src/net/i2p/router/transport/UPnP.java:402
#: ../java/src/net/i2p/router/web/ConfigNavHelper.java:18
msgid "Service"
msgstr "Service"
#: ../../../router/java/src/net/i2p/router/transport/UPnP.java:404
msgid "WAN Common Interface Configuration"
msgstr "Configuration de l'interface commune Internet"
#: ../../../router/java/src/net/i2p/router/transport/UPnP.java:405
#: ../../../router/java/src/net/i2p/router/transport/UPnP.java:411
#: ../../../router/java/src/net/i2p/router/transport/UPnP.java:421
#: ../../../router/java/src/net/i2p/router/transport/UPnP.java:426
#: ../java/src/net/i2p/router/web/ProfileOrganizerRenderer.java:86
msgid "Status"
msgstr "État"
#: ../../../router/java/src/net/i2p/router/transport/UPnP.java:406
#: ../../../router/java/src/net/i2p/router/transport/UPnP.java:412
#: ../../../router/java/src/net/i2p/router/transport/UPnP.java:422
msgid "Type"
msgstr "Type"
#: ../../../router/java/src/net/i2p/router/transport/UPnP.java:407
#: ../../../router/java/src/net/i2p/router/transport/UPnP.java:413
msgid "Upstream"
msgstr "Montant"
#: ../../../router/java/src/net/i2p/router/transport/UPnP.java:408
#: ../../../router/java/src/net/i2p/router/transport/UPnP.java:414
msgid "Downstream"
msgstr "Descendant"
#: ../../../router/java/src/net/i2p/router/transport/UPnP.java:410
msgid "WAN PPP Connection"
msgstr "Connexion Internet PPP"
#: ../../../router/java/src/net/i2p/router/transport/UPnP.java:415
#: ../../../router/java/src/net/i2p/router/transport/UPnP.java:423
msgid "External IP"
msgstr "Adresse IP externe"
#: ../../../router/java/src/net/i2p/router/transport/UPnP.java:417
msgid "Layer 3 Forwarding"
msgstr "Transfert niveau 3"
#: ../../../router/java/src/net/i2p/router/transport/UPnP.java:418
msgid "Default Connection Service"
msgstr "Service de connexion par défaut"
#: ../../../router/java/src/net/i2p/router/transport/UPnP.java:420
msgid "WAN IP Connection"
msgstr "Connexion IP Internet"
#: ../../../router/java/src/net/i2p/router/transport/UPnP.java:425
msgid "WAN Ethernet Link Configuration"
msgstr "Configuration du lien Ethernet Internet"
#: ../../../router/java/src/net/i2p/router/transport/UPnP.java:438
msgid "Found Device"
msgstr "Appareil détecté"
#: ../../../router/java/src/net/i2p/router/transport/UPnP.java:440
msgid "Subdevice"
msgstr "Service"
#: ../../../router/java/src/net/i2p/router/transport/UPnP.java:461
msgid "UPnP Status"
msgstr "État d'UPnP"
#: ../../../router/java/src/net/i2p/router/transport/UPnP.java:464
msgid "UPnP has been disabled; Do you have more than one UPnP Internet Gateway Device on your LAN ?"
msgstr "UPnP a été désactivé; peut-être avez-vous plus d'une passerelle Internet avec UPnP activé sur votre réseau local."
#: ../../../router/java/src/net/i2p/router/transport/UPnP.java:467
msgid "UPnP has not found any UPnP-aware, compatible device on your LAN."
msgstr "UPnP n'a pas trouvé de passerelle compatible sur votre réseau local."
#: ../../../router/java/src/net/i2p/router/transport/UPnP.java:475
#, java-format
msgid "The current external IP address reported by UPnP is {0}"
msgstr "Adresse IP externe détectée par UPnP : {0}"
#: ../../../router/java/src/net/i2p/router/transport/UPnP.java:477
msgid "The current external IP address is not available."
msgstr "L'adresse IP externe n'est pas disponible."
#: ../../../router/java/src/net/i2p/router/transport/UPnP.java:481
#, java-format
msgid "UPnP reports the maximum downstream bit rate is {0}bits/sec"
msgstr "UPnP indique un débit descendant maximum de {0}b/s"
#: ../../../router/java/src/net/i2p/router/transport/UPnP.java:483
#, java-format
msgid "UPnP reports the maximum upstream bit rate is {0}bits/sec"
msgstr "UPnP indique un débit montant maximum de {0}b/s"
#. {0} is TCP or UDP
#. {1,number,#####} prevents 12345 from being output as 12,345 in the English locale.
#. If you want the digit separator in your locale, translate as {1}.
#: ../../../router/java/src/net/i2p/router/transport/UPnP.java:492
#, java-format
msgid "{0} port {1,number,#####} was successfully forwarded by UPnP."
msgstr "Le port {0} {1,number,#####} est correctement transféré par UPnP."
#: ../../../router/java/src/net/i2p/router/transport/UPnP.java:494
#, java-format
msgid "{0} port {1,number,#####} was not forwarded by UPnP."
msgstr "Le port {0} {1,number,#####} n'est pas transféré par UPnP."
#: ../../../router/java/src/net/i2p/router/transport/UPnPManager.java:161
msgid "UPnP is not enabled"
msgstr "UPnP n'est pas activé"
#: ../../../router/java/src/net/i2p/router/transport/ntcp/EstablishState.java:409
#: ../../../router/java/src/net/i2p/router/transport/ntcp/EstablishState.java:627
#, java-format
@@ -535,24 +649,24 @@ msgid "Dropping tunnel requests: Too slow"
msgstr "Perte de demandes de tunnels: Trop lent"
#. don't even bother, since we are so overloaded locally
#: ../../../router/java/src/net/i2p/router/tunnel/pool/BuildHandler.java:267
#: ../../../router/java/src/net/i2p/router/tunnel/pool/BuildHandler.java:270
msgid "Dropping tunnel requests: Overloaded"
msgstr "Perte de demandes de tunnnels: Surchargé"
#: ../../../router/java/src/net/i2p/router/tunnel/pool/BuildHandler.java:470
#: ../../../router/java/src/net/i2p/router/tunnel/pool/BuildHandler.java:473
msgid "Rejecting tunnels: Request overload"
msgstr "Rejet de tunnels: Surcharge de requêtes "
#: ../../../router/java/src/net/i2p/router/tunnel/pool/BuildHandler.java:495
#: ../../../router/java/src/net/i2p/router/tunnel/pool/BuildHandler.java:498
msgid "Rejecting tunnels: Connection limit"
msgstr "Rejet de tunnels: Limite de connexions"
#: ../../../router/java/src/net/i2p/router/tunnel/pool/BuildHandler.java:695
#: ../../../router/java/src/net/i2p/router/tunnel/pool/BuildHandler.java:716
#: ../../../router/java/src/net/i2p/router/tunnel/pool/BuildHandler.java:698
#: ../../../router/java/src/net/i2p/router/tunnel/pool/BuildHandler.java:719
msgid "Dropping tunnel requests: High load"
msgstr "Perte de tunnels: Forte charge"
#: ../../../router/java/src/net/i2p/router/tunnel/pool/BuildHandler.java:708
#: ../../../router/java/src/net/i2p/router/tunnel/pool/BuildHandler.java:711
msgid "Dropping tunnel requests: Queue time"
msgstr "Demandes de fermeture de tunnel: temps en file d'attente"
@@ -1727,7 +1841,7 @@ msgid "Stop"
msgstr "Arrêt"
#: ../java/src/net/i2p/router/web/ConfigClientsHelper.java:262
#: ../java/src/net/i2p/router/web/ConfigUpdateHandler.java:78
#: ../java/src/net/i2p/router/web/ConfigUpdateHandler.java:80
#: ../jsp/WEB-INF/classes/net/i2p/router/web/jsp/configupdate_jsp.java:331
msgid "Check for updates"
msgstr "Vérifier les mises à jour"
@@ -1843,10 +1957,6 @@ msgstr "Choisissez une classe à ajouter"
msgid "Network"
msgstr "Réseau"
#: ../java/src/net/i2p/router/web/ConfigNavHelper.java:18
msgid "Service"
msgstr "Service"
#: ../java/src/net/i2p/router/web/ConfigNavHelper.java:18
#: ../java/src/net/i2p/router/web/SummaryBarRenderer.java:101
#: ../java/src/net/i2p/router/web/SummaryBarRenderer.java:381
@@ -2364,47 +2474,47 @@ msgstr "Chinois"
msgid "Swedish"
msgstr "Suédois"
#: ../java/src/net/i2p/router/web/ConfigUpdateHandler.java:85
#: ../java/src/net/i2p/router/web/ConfigUpdateHandler.java:87
msgid "Update available, attempting to download now"
msgstr "Mise à jour disponible, essai de téléchargement en cours"
#: ../java/src/net/i2p/router/web/ConfigUpdateHandler.java:87
#: ../java/src/net/i2p/router/web/ConfigUpdateHandler.java:89
msgid "Update available, click button on left to download"
msgstr "Mise à jour disponible, cliquez sur le bouton de gauche pour la télécharger"
#: ../java/src/net/i2p/router/web/ConfigUpdateHandler.java:93
#: ../java/src/net/i2p/router/web/ConfigUpdateHandler.java:95
msgid "No update available"
msgstr "Pas de mise à jour disponible"
#: ../java/src/net/i2p/router/web/ConfigUpdateHandler.java:101
#: ../java/src/net/i2p/router/web/ConfigUpdateHandler.java:103
msgid "Updating news URL to"
msgstr "Mise à jour de l'URL de news vers "
#: ../java/src/net/i2p/router/web/ConfigUpdateHandler.java:109
#: ../java/src/net/i2p/router/web/ConfigUpdateHandler.java:111
msgid "Updating proxy host to"
msgstr "Mise à jour de l'hôte mandataire vers"
#: ../java/src/net/i2p/router/web/ConfigUpdateHandler.java:117
#: ../java/src/net/i2p/router/web/ConfigUpdateHandler.java:119
msgid "Updating proxy port to"
msgstr "Mise à jour du port mandataire vers"
#: ../java/src/net/i2p/router/web/ConfigUpdateHandler.java:130
#: ../java/src/net/i2p/router/web/ConfigUpdateHandler.java:132
msgid "Updating refresh frequency to"
msgstr "Mise à jour de la fréquence de rafraîchissement vers"
#: ../java/src/net/i2p/router/web/ConfigUpdateHandler.java:137
#: ../java/src/net/i2p/router/web/ConfigUpdateHandler.java:139
msgid "Updating update policy to"
msgstr "Mise à jour de la stratégie de mises à jour vers"
#: ../java/src/net/i2p/router/web/ConfigUpdateHandler.java:146
#: ../java/src/net/i2p/router/web/ConfigUpdateHandler.java:148
msgid "Updating update URLs."
msgstr "Mise à jour de l'URL de mises à jour."
#: ../java/src/net/i2p/router/web/ConfigUpdateHandler.java:155
#: ../java/src/net/i2p/router/web/ConfigUpdateHandler.java:157
msgid "Updating trusted keys."
msgstr "Mise à jour des clefs de confiance."
#: ../java/src/net/i2p/router/web/ConfigUpdateHandler.java:163
#: ../java/src/net/i2p/router/web/ConfigUpdateHandler.java:165
msgid "Updating unsigned update URL to"
msgstr "Mise à jour de l'URL de mises à jour non signées vers"
@@ -2897,10 +3007,6 @@ msgstr "Capacité"
msgid "Integration"
msgstr "Intégration"
#: ../java/src/net/i2p/router/web/ProfileOrganizerRenderer.java:86
msgid "Status"
msgstr "État"
#: ../java/src/net/i2p/router/web/ProfileOrganizerRenderer.java:126
msgid "Fast, High Capacity"
msgstr "Rapide, haute capacité"
@@ -4365,14 +4471,12 @@ msgid "Specify Port"
msgstr "Saisir le port"
#: ../jsp/WEB-INF/classes/net/i2p/router/web/jsp/config_jsp.java:527
#: ../jsp/WEB-INF/classes/net/i2p/router/web/jsp/configservice_jsp.java:357
#: ../jsp/WEB-INF/classes/net/i2p/router/web/jsp/configtunnels_jsp.java:348
msgid "Note"
msgstr "Note"
msgid "Notes"
msgstr "Remarques"
#: ../jsp/WEB-INF/classes/net/i2p/router/web/jsp/config_jsp.java:530
msgid "Changing these settings will restart your router."
msgstr "Un changement de cette configuration entraînera un redémarrage du routeur"
msgid "a) Do not reveal your port numbers to anyone! b) Changing these settings will restart your router."
msgstr "a)Ne révélez vos n° de ports à personne! b)La modification de ces réglages redémarrera votre routeur. "
#: ../jsp/WEB-INF/classes/net/i2p/router/web/jsp/config_jsp.java:536
msgid "Configuration Help"
@@ -5051,6 +5155,11 @@ msgstr "Vous pouvez contrôler si I2P est lancé ou pas au démarrage en choisis
msgid "If you prefer the command line, you can also run the "
msgstr "Si vous préférez la ligne commande, vous pouvez aussi exécuter la"
#: ../jsp/WEB-INF/classes/net/i2p/router/web/jsp/configservice_jsp.java:357
#: ../jsp/WEB-INF/classes/net/i2p/router/web/jsp/configtunnels_jsp.java:348
msgid "Note"
msgstr "Note"
#: ../jsp/WEB-INF/classes/net/i2p/router/web/jsp/configservice_jsp.java:359
msgid "If you are running I2P as service right now, removing it will shut down your router immediately."
msgstr "Si vous exécutez actuellement I2P en tant que service, l'enlever arrêtera le routeur immédiatement."

File diff suppressed because it is too large Load Diff

File diff suppressed because it is too large Load Diff

File diff suppressed because it is too large Load Diff

File diff suppressed because it is too large Load Diff

File diff suppressed because it is too large Load Diff

Some files were not shown because too many files have changed in this diff Show More