propagate from branch 'i2p.i2p' (head d2e954c054d89a425c9791067ac7998433e95a23)
to branch 'i2p.i2p.zzz.jetty9' (head adcba23cab31b88e430ee09bf45fd1b6789a1719)
6
.idea/ant.xml
generated
Normal file
@ -0,0 +1,6 @@
|
|||||||
|
<?xml version="1.0" encoding="UTF-8"?>
|
||||||
|
<project version="4">
|
||||||
|
<component name="AntConfiguration">
|
||||||
|
<buildFile url="file://$PROJECT_DIR$/build.xml" />
|
||||||
|
</component>
|
||||||
|
</project>
|
22
.idea/compiler.xml
generated
Normal file
@ -0,0 +1,22 @@
|
|||||||
|
<?xml version="1.0" encoding="UTF-8"?>
|
||||||
|
<project version="4">
|
||||||
|
<component name="CompilerConfiguration">
|
||||||
|
<resourceExtensions />
|
||||||
|
<wildcardResourcePatterns>
|
||||||
|
<entry name="!?*.java" />
|
||||||
|
<entry name="!?*.form" />
|
||||||
|
<entry name="!?*.class" />
|
||||||
|
<entry name="!?*.groovy" />
|
||||||
|
<entry name="!?*.scala" />
|
||||||
|
<entry name="!?*.flex" />
|
||||||
|
<entry name="!?*.kt" />
|
||||||
|
<entry name="!?*.clj" />
|
||||||
|
<entry name="!?*.aj" />
|
||||||
|
</wildcardResourcePatterns>
|
||||||
|
<annotationProcessing>
|
||||||
|
<profile default="true" name="Default" enabled="false">
|
||||||
|
<processorPath useClasspath="true" />
|
||||||
|
</profile>
|
||||||
|
</annotationProcessing>
|
||||||
|
</component>
|
||||||
|
</project>
|
3
.idea/copyright/profiles_settings.xml
generated
Normal file
@ -0,0 +1,3 @@
|
|||||||
|
<component name="CopyrightManager">
|
||||||
|
<settings default="" />
|
||||||
|
</component>
|
9
.idea/libraries/javax_servlet_jsp_2_2_0_v201112011158.xml
generated
Normal file
@ -0,0 +1,9 @@
|
|||||||
|
<component name="libraryTable">
|
||||||
|
<library name="javax.servlet.jsp-2.2.0.v201112011158">
|
||||||
|
<CLASSES>
|
||||||
|
<root url="jar://$PROJECT_DIR$/apps/jetty/jetty-distribution-8.1.17.v20150415/lib/jsp/javax.servlet.jsp-2.2.0.v201112011158.jar!/" />
|
||||||
|
</CLASSES>
|
||||||
|
<JAVADOC />
|
||||||
|
<SOURCES />
|
||||||
|
</library>
|
||||||
|
</component>
|
22
.idea/libraries/jettylib.xml
generated
Normal file
@ -0,0 +1,22 @@
|
|||||||
|
<component name="libraryTable">
|
||||||
|
<library name="jettylib">
|
||||||
|
<CLASSES>
|
||||||
|
<root url="jar://$PROJECT_DIR$/apps/jetty/jetty-distribution-8.1.17.v20150415/lib/jetty-security-8.1.17.v20150415.jar!/" />
|
||||||
|
<root url="jar://$PROJECT_DIR$/apps/jetty/jetty-distribution-8.1.17.v20150415/lib/jetty-servlets-8.1.17.v20150415.jar!/" />
|
||||||
|
<root url="jar://$PROJECT_DIR$/apps/jetty/jetty-distribution-8.1.17.v20150415/lib/jetty-deploy-8.1.17.v20150415.jar!/" />
|
||||||
|
<root url="jar://$PROJECT_DIR$/apps/jetty/jetty-distribution-8.1.17.v20150415/lib/jetty-util-8.1.17.v20150415.jar!/" />
|
||||||
|
<root url="jar://$PROJECT_DIR$/apps/jetty/jetty-distribution-8.1.17.v20150415/lib/jetty-servlet-8.1.17.v20150415.jar!/" />
|
||||||
|
<root url="jar://$PROJECT_DIR$/apps/jetty/jetty-distribution-8.1.17.v20150415/lib/jetty-http-8.1.17.v20150415.jar!/" />
|
||||||
|
<root url="jar://$PROJECT_DIR$/apps/jetty/jetty-distribution-8.1.17.v20150415/lib/jetty-xml-8.1.17.v20150415.jar!/" />
|
||||||
|
<root url="jar://$PROJECT_DIR$/apps/jetty/jetty-distribution-8.1.17.v20150415/lib/jetty-server-8.1.17.v20150415.jar!/" />
|
||||||
|
<root url="jar://$PROJECT_DIR$/apps/jetty/jetty-distribution-8.1.17.v20150415/lib/servlet-api-3.0.jar!/" />
|
||||||
|
<root url="jar://$PROJECT_DIR$/apps/jetty/jetty-distribution-8.1.17.v20150415/lib/jetty-jmx-8.1.17.v20150415.jar!/" />
|
||||||
|
<root url="jar://$PROJECT_DIR$/apps/jetty/jetty-distribution-8.1.17.v20150415/lib/jetty-webapp-8.1.17.v20150415.jar!/" />
|
||||||
|
<root url="jar://$PROJECT_DIR$/apps/jetty/jetty-distribution-8.1.17.v20150415/lib/jetty-io-8.1.17.v20150415.jar!/" />
|
||||||
|
<root url="jar://$PROJECT_DIR$/apps/jetty/jetty-distribution-8.1.17.v20150415/lib/jetty-continuation-8.1.17.v20150415.jar!/" />
|
||||||
|
<root url="jar://$PROJECT_DIR$/apps/jetty/jetty-distribution-8.1.17.v20150415/lib/jetty-rewrite-8.1.17.v20150415.jar!/" />
|
||||||
|
</CLASSES>
|
||||||
|
<JAVADOC />
|
||||||
|
<SOURCES />
|
||||||
|
</library>
|
||||||
|
</component>
|
9
.idea/libraries/jrobin_1_5_9_1.xml
generated
Normal file
@ -0,0 +1,9 @@
|
|||||||
|
<component name="libraryTable">
|
||||||
|
<library name="jrobin-1.5.9.1">
|
||||||
|
<CLASSES>
|
||||||
|
<root url="jar://$PROJECT_DIR$/apps/jrobin/jrobin-1.5.9.1.jar!/" />
|
||||||
|
</CLASSES>
|
||||||
|
<JAVADOC />
|
||||||
|
<SOURCES />
|
||||||
|
</library>
|
||||||
|
</component>
|
10
.idea/libraries/lib.xml
generated
Normal file
@ -0,0 +1,10 @@
|
|||||||
|
<component name="libraryTable">
|
||||||
|
<library name="lib">
|
||||||
|
<CLASSES>
|
||||||
|
<root url="jar://$PROJECT_DIR$/apps/susidns/src/lib/jstl.jar!/" />
|
||||||
|
<root url="jar://$PROJECT_DIR$/apps/susidns/src/lib/standard.jar!/" />
|
||||||
|
</CLASSES>
|
||||||
|
<JAVADOC />
|
||||||
|
<SOURCES />
|
||||||
|
</library>
|
||||||
|
</component>
|
9
.idea/libraries/start.xml
generated
Normal file
@ -0,0 +1,9 @@
|
|||||||
|
<component name="libraryTable">
|
||||||
|
<library name="start">
|
||||||
|
<CLASSES>
|
||||||
|
<root url="jar://$PROJECT_DIR$/apps/jetty/jetty-distribution-8.1.17.v20150415/start.jar!/" />
|
||||||
|
</CLASSES>
|
||||||
|
<JAVADOC />
|
||||||
|
<SOURCES />
|
||||||
|
</library>
|
||||||
|
</component>
|
9
.idea/libraries/systray4j.xml
generated
Normal file
@ -0,0 +1,9 @@
|
|||||||
|
<component name="libraryTable">
|
||||||
|
<library name="systray4j">
|
||||||
|
<CLASSES>
|
||||||
|
<root url="jar://$PROJECT_DIR$/apps/systray/java/lib/systray4j.jar!/" />
|
||||||
|
</CLASSES>
|
||||||
|
<JAVADOC />
|
||||||
|
<SOURCES />
|
||||||
|
</library>
|
||||||
|
</component>
|
9
.idea/libraries/tomcat_coyote_util.xml
generated
Normal file
@ -0,0 +1,9 @@
|
|||||||
|
<component name="libraryTable">
|
||||||
|
<library name="tomcat-coyote-util">
|
||||||
|
<CLASSES>
|
||||||
|
<root url="jar://$PROJECT_DIR$/apps/jetty/apache-tomcat/lib/tomcat-coyote-util.jar!/" />
|
||||||
|
</CLASSES>
|
||||||
|
<JAVADOC />
|
||||||
|
<SOURCES />
|
||||||
|
</library>
|
||||||
|
</component>
|
12
.idea/libraries/tomcat_lib.xml
generated
Normal file
@ -0,0 +1,12 @@
|
|||||||
|
<component name="libraryTable">
|
||||||
|
<library name="tomcat-lib">
|
||||||
|
<CLASSES>
|
||||||
|
<root url="jar://$PROJECT_DIR$/apps/jetty/apache-tomcat-deployer/lib/tomcat-juli.jar!/" />
|
||||||
|
<root url="jar://$PROJECT_DIR$/apps/jetty/apache-tomcat-deployer/lib/el-api.jar!/" />
|
||||||
|
<root url="jar://$PROJECT_DIR$/apps/jetty/apache-tomcat-deployer/lib/jasper.jar!/" />
|
||||||
|
<root url="jar://$PROJECT_DIR$/apps/jetty/apache-tomcat-deployer/lib/jasper-el.jar!/" />
|
||||||
|
</CLASSES>
|
||||||
|
<JAVADOC />
|
||||||
|
<SOURCES />
|
||||||
|
</library>
|
||||||
|
</component>
|
9
.idea/libraries/wrapper.xml
generated
Normal file
@ -0,0 +1,9 @@
|
|||||||
|
<component name="libraryTable">
|
||||||
|
<library name="wrapper">
|
||||||
|
<CLASSES>
|
||||||
|
<root url="jar://$PROJECT_DIR$/installer/lib/wrapper/all/wrapper.jar!/" />
|
||||||
|
</CLASSES>
|
||||||
|
<JAVADOC />
|
||||||
|
<SOURCES />
|
||||||
|
</library>
|
||||||
|
</component>
|
9
.idea/libraries/wrapper_win.xml
generated
Normal file
@ -0,0 +1,9 @@
|
|||||||
|
<component name="libraryTable">
|
||||||
|
<library name="wrapper-win">
|
||||||
|
<CLASSES>
|
||||||
|
<root url="jar://$PROJECT_DIR$/installer/lib/wrapper/win-all/wrapper.jar!/" />
|
||||||
|
</CLASSES>
|
||||||
|
<JAVADOC />
|
||||||
|
<SOURCES />
|
||||||
|
</library>
|
||||||
|
</component>
|
57
.idea/misc.xml
generated
Normal file
@ -0,0 +1,57 @@
|
|||||||
|
<?xml version="1.0" encoding="UTF-8"?>
|
||||||
|
<project version="4">
|
||||||
|
<component name="ClientPropertiesManager">
|
||||||
|
<properties class="javax.swing.AbstractButton">
|
||||||
|
<property name="hideActionText" class="java.lang.Boolean" />
|
||||||
|
</properties>
|
||||||
|
<properties class="javax.swing.JComponent">
|
||||||
|
<property name="html.disable" class="java.lang.Boolean" />
|
||||||
|
</properties>
|
||||||
|
<properties class="javax.swing.JEditorPane">
|
||||||
|
<property name="JEditorPane.w3cLengthUnits" class="java.lang.Boolean" />
|
||||||
|
<property name="JEditorPane.honorDisplayProperties" class="java.lang.Boolean" />
|
||||||
|
<property name="charset" class="java.lang.String" />
|
||||||
|
</properties>
|
||||||
|
<properties class="javax.swing.JList">
|
||||||
|
<property name="List.isFileList" class="java.lang.Boolean" />
|
||||||
|
</properties>
|
||||||
|
<properties class="javax.swing.JPasswordField">
|
||||||
|
<property name="JPasswordField.cutCopyAllowed" class="java.lang.Boolean" />
|
||||||
|
</properties>
|
||||||
|
<properties class="javax.swing.JSlider">
|
||||||
|
<property name="Slider.paintThumbArrowShape" class="java.lang.Boolean" />
|
||||||
|
<property name="JSlider.isFilled" class="java.lang.Boolean" />
|
||||||
|
</properties>
|
||||||
|
<properties class="javax.swing.JTable">
|
||||||
|
<property name="Table.isFileList" class="java.lang.Boolean" />
|
||||||
|
<property name="JTable.autoStartsEdit" class="java.lang.Boolean" />
|
||||||
|
<property name="terminateEditOnFocusLost" class="java.lang.Boolean" />
|
||||||
|
</properties>
|
||||||
|
<properties class="javax.swing.JToolBar">
|
||||||
|
<property name="JToolBar.isRollover" class="java.lang.Boolean" />
|
||||||
|
</properties>
|
||||||
|
<properties class="javax.swing.JTree">
|
||||||
|
<property name="JTree.lineStyle" class="java.lang.String" />
|
||||||
|
</properties>
|
||||||
|
<properties class="javax.swing.text.JTextComponent">
|
||||||
|
<property name="caretAspectRatio" class="java.lang.Double" />
|
||||||
|
<property name="caretWidth" class="java.lang.Integer" />
|
||||||
|
</properties>
|
||||||
|
</component>
|
||||||
|
<component name="EntryPointsManager">
|
||||||
|
<entry_points version="2.0" />
|
||||||
|
</component>
|
||||||
|
<component name="ProjectLevelVcsManager" settingsEditedManually="false">
|
||||||
|
<OptionsSetting value="true" id="Add" />
|
||||||
|
<OptionsSetting value="true" id="Remove" />
|
||||||
|
<OptionsSetting value="true" id="Checkout" />
|
||||||
|
<OptionsSetting value="true" id="Update" />
|
||||||
|
<OptionsSetting value="true" id="Status" />
|
||||||
|
<OptionsSetting value="true" id="Edit" />
|
||||||
|
<ConfirmationsSetting value="0" id="Add" />
|
||||||
|
<ConfirmationsSetting value="0" id="Remove" />
|
||||||
|
</component>
|
||||||
|
<component name="ProjectRootManager" version="2" languageLevel="JDK_1_7" default="true" assert-keyword="true" jdk-15="true" project-jdk-name="1.7" project-jdk-type="JavaSDK">
|
||||||
|
<output url="file://$PROJECT_DIR$/build" />
|
||||||
|
</component>
|
||||||
|
</project>
|
27
.idea/modules.xml
generated
Normal file
@ -0,0 +1,27 @@
|
|||||||
|
<?xml version="1.0" encoding="UTF-8"?>
|
||||||
|
<project version="4">
|
||||||
|
<component name="ProjectModuleManager">
|
||||||
|
<modules>
|
||||||
|
<module fileurl="file://$PROJECT_DIR$/apps/BOB/BOB.iml" filepath="$PROJECT_DIR$/apps/BOB/BOB.iml" />
|
||||||
|
<module fileurl="file://$PROJECT_DIR$/apps/addressbook/addressbook.iml" filepath="$PROJECT_DIR$/apps/addressbook/addressbook.iml" />
|
||||||
|
<module fileurl="file://$PROJECT_DIR$/apps/admin/admin.iml" filepath="$PROJECT_DIR$/apps/admin/admin.iml" />
|
||||||
|
<module fileurl="file://$PROJECT_DIR$/core/core.iml" filepath="$PROJECT_DIR$/core/core.iml" />
|
||||||
|
<module fileurl="file://$PROJECT_DIR$/apps/desktopgui/desktopgui.iml" filepath="$PROJECT_DIR$/apps/desktopgui/desktopgui.iml" />
|
||||||
|
<module fileurl="file://$PROJECT_DIR$/apps/i2psnark/i2psnark.iml" filepath="$PROJECT_DIR$/apps/i2psnark/i2psnark.iml" />
|
||||||
|
<module fileurl="file://$PROJECT_DIR$/apps/i2ptunnel/i2ptunnel.iml" filepath="$PROJECT_DIR$/apps/i2ptunnel/i2ptunnel.iml" />
|
||||||
|
<module fileurl="file://$PROJECT_DIR$/apps/imagegen/identicon/identicon.iml" filepath="$PROJECT_DIR$/apps/imagegen/identicon/identicon.iml" />
|
||||||
|
<module fileurl="file://$PROJECT_DIR$/apps/imagegen/imagegen/imagegen.iml" filepath="$PROJECT_DIR$/apps/imagegen/imagegen/imagegen.iml" />
|
||||||
|
<module fileurl="file://$PROJECT_DIR$/installer/installer.iml" filepath="$PROJECT_DIR$/installer/installer.iml" />
|
||||||
|
<module fileurl="file://$PROJECT_DIR$/apps/jetty/jetty.iml" filepath="$PROJECT_DIR$/apps/jetty/jetty.iml" />
|
||||||
|
<module fileurl="file://$PROJECT_DIR$/apps/ministreaming/ministreaming.iml" filepath="$PROJECT_DIR$/apps/ministreaming/ministreaming.iml" />
|
||||||
|
<module fileurl="file://$PROJECT_DIR$/router/router.iml" filepath="$PROJECT_DIR$/router/router.iml" />
|
||||||
|
<module fileurl="file://$PROJECT_DIR$/apps/routerconsole/routerconsole.iml" filepath="$PROJECT_DIR$/apps/routerconsole/routerconsole.iml" />
|
||||||
|
<module fileurl="file://$PROJECT_DIR$/apps/sam/sam.iml" filepath="$PROJECT_DIR$/apps/sam/sam.iml" />
|
||||||
|
<module fileurl="file://$PROJECT_DIR$/apps/streaming/streaming.iml" filepath="$PROJECT_DIR$/apps/streaming/streaming.iml" />
|
||||||
|
<module fileurl="file://$PROJECT_DIR$/apps/susidns/susidns.iml" filepath="$PROJECT_DIR$/apps/susidns/susidns.iml" />
|
||||||
|
<module fileurl="file://$PROJECT_DIR$/apps/susimail/susimail.iml" filepath="$PROJECT_DIR$/apps/susimail/susimail.iml" />
|
||||||
|
<module fileurl="file://$PROJECT_DIR$/apps/systray/systray.iml" filepath="$PROJECT_DIR$/apps/systray/systray.iml" />
|
||||||
|
<module fileurl="file://$PROJECT_DIR$/apps/imagegen/zxing/zxing.iml" filepath="$PROJECT_DIR$/apps/imagegen/zxing/zxing.iml" />
|
||||||
|
</modules>
|
||||||
|
</component>
|
||||||
|
</project>
|
6
.idea/runConfigurations/updater.xml
generated
Normal file
@ -0,0 +1,6 @@
|
|||||||
|
<component name="ProjectRunConfigurationManager">
|
||||||
|
<configuration default="false" name="updater" type="AntRunConfiguration" factoryName="Ant Target">
|
||||||
|
<antsettings antfile="file://$PROJECT_DIR$/build.xml" target="updater" />
|
||||||
|
<method />
|
||||||
|
</configuration>
|
||||||
|
</component>
|
11
.mtn-ignore
@ -28,18 +28,23 @@ web-fragment.xml
|
|||||||
web-out.xml
|
web-out.xml
|
||||||
|
|
||||||
# Temporary/build dirs
|
# Temporary/build dirs
|
||||||
^build
|
^build$
|
||||||
^pkg-temp
|
^pkg-temp
|
||||||
/build
|
/build$
|
||||||
/classes
|
/classes
|
||||||
/dist
|
/dist
|
||||||
^installer/resources/locale/mo
|
^installer/resources/locale/mo
|
||||||
/tmp
|
/tmp
|
||||||
^apps/jetty/jettylib
|
^apps/jetty/jettylib
|
||||||
|
|
||||||
|
# MSVC files
|
||||||
|
core/c/jcpuid/msvc/*.opendb
|
||||||
|
core/c/jcpuid/msvc/*.pdb
|
||||||
|
core/c/jcpuid/msvc/*.sdf
|
||||||
|
core/c/jcpuid/msvc/*.user
|
||||||
|
|
||||||
# Debian-related
|
# Debian-related
|
||||||
^debian/copyright
|
^debian/copyright
|
||||||
^debian/changelog
|
|
||||||
^.pc/
|
^.pc/
|
||||||
|
|
||||||
# Build property overrides
|
# Build property overrides
|
||||||
|
64
.tx/config
@ -6,10 +6,12 @@ trans.cs = apps/i2ptunnel/locale/messages_cs.po
|
|||||||
trans.da = apps/i2ptunnel/locale/messages_da.po
|
trans.da = apps/i2ptunnel/locale/messages_da.po
|
||||||
trans.de = apps/i2ptunnel/locale/messages_de.po
|
trans.de = apps/i2ptunnel/locale/messages_de.po
|
||||||
trans.es = apps/i2ptunnel/locale/messages_es.po
|
trans.es = apps/i2ptunnel/locale/messages_es.po
|
||||||
|
trans.fi = apps/i2ptunnel/locale/messages_fi.po
|
||||||
trans.fr = apps/i2ptunnel/locale/messages_fr.po
|
trans.fr = apps/i2ptunnel/locale/messages_fr.po
|
||||||
trans.hu = apps/i2ptunnel/locale/messages_hu.po
|
trans.hu = apps/i2ptunnel/locale/messages_hu.po
|
||||||
trans.it = apps/i2ptunnel/locale/messages_it.po
|
trans.it = apps/i2ptunnel/locale/messages_it.po
|
||||||
trans.ja = apps/i2ptunnel/locale/messages_ja.po
|
trans.ja = apps/i2ptunnel/locale/messages_ja.po
|
||||||
|
trans.ko = apps/i2ptunnel/locale/messages_ko.po
|
||||||
trans.nb = apps/i2ptunnel/locale/messages_nb.po
|
trans.nb = apps/i2ptunnel/locale/messages_nb.po
|
||||||
trans.nl = apps/i2ptunnel/locale/messages_nl.po
|
trans.nl = apps/i2ptunnel/locale/messages_nl.po
|
||||||
trans.nn = apps/i2ptunnel/locale/messages_nn.po
|
trans.nn = apps/i2ptunnel/locale/messages_nn.po
|
||||||
@ -20,9 +22,11 @@ trans.ro = apps/i2ptunnel/locale/messages_ro.po
|
|||||||
trans.ru_RU = apps/i2ptunnel/locale/messages_ru.po
|
trans.ru_RU = apps/i2ptunnel/locale/messages_ru.po
|
||||||
trans.sk = apps/i2ptunnel/locale/messages_sk.po
|
trans.sk = apps/i2ptunnel/locale/messages_sk.po
|
||||||
trans.sv_SE = apps/i2ptunnel/locale/messages_sv.po
|
trans.sv_SE = apps/i2ptunnel/locale/messages_sv.po
|
||||||
|
trans.tr_TR = apps/i2ptunnel/locale/messages_tr.po
|
||||||
trans.uk_UA = apps/i2ptunnel/locale/messages_uk.po
|
trans.uk_UA = apps/i2ptunnel/locale/messages_uk.po
|
||||||
trans.vi = apps/i2ptunnel/locale/messages_vi.po
|
trans.vi = apps/i2ptunnel/locale/messages_vi.po
|
||||||
trans.zh_CN = apps/i2ptunnel/locale/messages_zh.po
|
trans.zh_CN = apps/i2ptunnel/locale/messages_zh.po
|
||||||
|
trans.zh_TW = apps/i2ptunnel/locale/messages_zh_TW.po
|
||||||
|
|
||||||
[I2P.proxy]
|
[I2P.proxy]
|
||||||
source_file = apps/i2ptunnel/locale-proxy/messages_en.po
|
source_file = apps/i2ptunnel/locale-proxy/messages_en.po
|
||||||
@ -31,11 +35,13 @@ trans.ar = apps/i2ptunnel/locale-proxy/messages_ar.po
|
|||||||
trans.cs = apps/i2ptunnel/locale-proxy/messages_cs.po
|
trans.cs = apps/i2ptunnel/locale-proxy/messages_cs.po
|
||||||
trans.de = apps/i2ptunnel/locale-proxy/messages_de.po
|
trans.de = apps/i2ptunnel/locale-proxy/messages_de.po
|
||||||
trans.es = apps/i2ptunnel/locale-proxy/messages_es.po
|
trans.es = apps/i2ptunnel/locale-proxy/messages_es.po
|
||||||
|
trans.fi = apps/i2ptunnel/locale-proxy/messages_fi.po
|
||||||
trans.fr = apps/i2ptunnel/locale-proxy/messages_fr.po
|
trans.fr = apps/i2ptunnel/locale-proxy/messages_fr.po
|
||||||
trans.hu = apps/i2ptunnel/locale-proxy/messages_hu.po
|
trans.hu = apps/i2ptunnel/locale-proxy/messages_hu.po
|
||||||
;; Java converts id to in
|
;; Java converts id to in
|
||||||
trans.id = apps/i2ptunnel/locale-proxy/messages_in.po
|
trans.id = apps/i2ptunnel/locale-proxy/messages_in.po
|
||||||
trans.it = apps/i2ptunnel/locale-proxy/messages_it.po
|
trans.it = apps/i2ptunnel/locale-proxy/messages_it.po
|
||||||
|
trans.ko = apps/i2ptunnel/locale-proxy/messages_ko.po
|
||||||
trans.nb = apps/i2ptunnel/locale-proxy/messages_nb.po
|
trans.nb = apps/i2ptunnel/locale-proxy/messages_nb.po
|
||||||
trans.nl = apps/i2ptunnel/locale-proxy/messages_nl.po
|
trans.nl = apps/i2ptunnel/locale-proxy/messages_nl.po
|
||||||
trans.pl = apps/i2ptunnel/locale-proxy/messages_pl.po
|
trans.pl = apps/i2ptunnel/locale-proxy/messages_pl.po
|
||||||
@ -45,6 +51,7 @@ trans.ro = apps/i2ptunnel/locale-proxy/messages_ro.po
|
|||||||
trans.ru_RU = apps/i2ptunnel/locale-proxy/messages_ru.po
|
trans.ru_RU = apps/i2ptunnel/locale-proxy/messages_ru.po
|
||||||
trans.sk = apps/i2ptunnel/locale-proxy/messages_sk.po
|
trans.sk = apps/i2ptunnel/locale-proxy/messages_sk.po
|
||||||
trans.sv_SE = apps/i2ptunnel/locale-proxy/messages_sv.po
|
trans.sv_SE = apps/i2ptunnel/locale-proxy/messages_sv.po
|
||||||
|
trans.tr_TR = apps/i2ptunnel/locale-proxy/messages_tr.po
|
||||||
trans.uk_UA = apps/i2ptunnel/locale-proxy/messages_uk.po
|
trans.uk_UA = apps/i2ptunnel/locale-proxy/messages_uk.po
|
||||||
trans.vi = apps/i2ptunnel/locale-proxy/messages_vi.po
|
trans.vi = apps/i2ptunnel/locale-proxy/messages_vi.po
|
||||||
trans.zh_CN = apps/i2ptunnel/locale-proxy/messages_zh.po
|
trans.zh_CN = apps/i2ptunnel/locale-proxy/messages_zh.po
|
||||||
@ -64,6 +71,7 @@ trans.fr = apps/routerconsole/locale/messages_fr.po
|
|||||||
trans.hu = apps/routerconsole/locale/messages_hu.po
|
trans.hu = apps/routerconsole/locale/messages_hu.po
|
||||||
trans.it = apps/routerconsole/locale/messages_it.po
|
trans.it = apps/routerconsole/locale/messages_it.po
|
||||||
trans.ja = apps/routerconsole/locale/messages_ja.po
|
trans.ja = apps/routerconsole/locale/messages_ja.po
|
||||||
|
trans.ko = apps/routerconsole/locale/messages_ko.po
|
||||||
trans.nb = apps/routerconsole/locale/messages_nb.po
|
trans.nb = apps/routerconsole/locale/messages_nb.po
|
||||||
trans.nl = apps/routerconsole/locale/messages_nl.po
|
trans.nl = apps/routerconsole/locale/messages_nl.po
|
||||||
trans.pl = apps/routerconsole/locale/messages_pl.po
|
trans.pl = apps/routerconsole/locale/messages_pl.po
|
||||||
@ -76,15 +84,19 @@ trans.tr_TR = apps/routerconsole/locale/messages_tr.po
|
|||||||
trans.uk_UA = apps/routerconsole/locale/messages_uk.po
|
trans.uk_UA = apps/routerconsole/locale/messages_uk.po
|
||||||
trans.vi = apps/routerconsole/locale/messages_vi.po
|
trans.vi = apps/routerconsole/locale/messages_vi.po
|
||||||
trans.zh_CN = apps/routerconsole/locale/messages_zh.po
|
trans.zh_CN = apps/routerconsole/locale/messages_zh.po
|
||||||
|
trans.zh_TW = apps/routerconsole/locale/messages_zh_TW.po
|
||||||
|
|
||||||
[I2P.welcome]
|
[I2P.welcome]
|
||||||
source_file = apps/routerconsole/locale-news/messages_en.po
|
source_file = apps/routerconsole/locale-news/messages_en.po
|
||||||
source_lang = en
|
source_lang = en
|
||||||
trans.ar = apps/routerconsole/locale-news/messages_ar.po
|
trans.ar = apps/routerconsole/locale-news/messages_ar.po
|
||||||
|
trans.cs = apps/routerconsole/locale-news/messages_cs.po
|
||||||
trans.de = apps/routerconsole/locale-news/messages_de.po
|
trans.de = apps/routerconsole/locale-news/messages_de.po
|
||||||
|
trans.el = apps/routerconsole/locale-news/messages_el.po
|
||||||
trans.es = apps/routerconsole/locale-news/messages_es.po
|
trans.es = apps/routerconsole/locale-news/messages_es.po
|
||||||
trans.fi = apps/routerconsole/locale-news/messages_fi.po
|
trans.fi = apps/routerconsole/locale-news/messages_fi.po
|
||||||
trans.fr = apps/routerconsole/locale-news/messages_fr.po
|
trans.fr = apps/routerconsole/locale-news/messages_fr.po
|
||||||
|
trans.gl = apps/routerconsole/locale-news/messages_gl.po
|
||||||
trans.he = apps/routerconsole/locale-news/messages_he.po
|
trans.he = apps/routerconsole/locale-news/messages_he.po
|
||||||
;; Java converts id to in
|
;; Java converts id to in
|
||||||
trans.id = apps/routerconsole/locale-news/messages_in.po
|
trans.id = apps/routerconsole/locale-news/messages_in.po
|
||||||
@ -105,6 +117,7 @@ trans.sv_SE = apps/routerconsole/locale-news/messages_sv.po
|
|||||||
trans.tr_TR = apps/routerconsole/locale-news/messages_tr.po
|
trans.tr_TR = apps/routerconsole/locale-news/messages_tr.po
|
||||||
trans.uk_UA = apps/routerconsole/locale-news/messages_uk.po
|
trans.uk_UA = apps/routerconsole/locale-news/messages_uk.po
|
||||||
trans.zh_CN = apps/routerconsole/locale-news/messages_zh.po
|
trans.zh_CN = apps/routerconsole/locale-news/messages_zh.po
|
||||||
|
trans.zh_TW = apps/routerconsole/locale-news/messages_zh_TW.po
|
||||||
|
|
||||||
[I2P.countries]
|
[I2P.countries]
|
||||||
type = PO
|
type = PO
|
||||||
@ -116,11 +129,14 @@ trans.de = apps/routerconsole/locale-countries/messages_de.po
|
|||||||
trans.el = apps/routerconsole/locale-countries/messages_el.po
|
trans.el = apps/routerconsole/locale-countries/messages_el.po
|
||||||
trans.es = apps/routerconsole/locale-countries/messages_es.po
|
trans.es = apps/routerconsole/locale-countries/messages_es.po
|
||||||
trans.et_EE = apps/routerconsole/locale-countries/messages_et.po
|
trans.et_EE = apps/routerconsole/locale-countries/messages_et.po
|
||||||
|
trans.fa = apps/routerconsole/locale-countries/messages_fa.po
|
||||||
trans.fi = apps/routerconsole/locale-countries/messages_fi.po
|
trans.fi = apps/routerconsole/locale-countries/messages_fi.po
|
||||||
trans.fr = apps/routerconsole/locale-countries/messages_fr.po
|
trans.fr = apps/routerconsole/locale-countries/messages_fr.po
|
||||||
|
trans.gl = apps/routerconsole/locale-countries/messages_gl.po
|
||||||
trans.hu = apps/routerconsole/locale-countries/messages_hu.po
|
trans.hu = apps/routerconsole/locale-countries/messages_hu.po
|
||||||
trans.it = apps/routerconsole/locale-countries/messages_it.po
|
trans.it = apps/routerconsole/locale-countries/messages_it.po
|
||||||
trans.ja = apps/routerconsole/locale-countries/messages_ja.po
|
trans.ja = apps/routerconsole/locale-countries/messages_ja.po
|
||||||
|
trans.ko = apps/routerconsole/locale-countries/messages_ko.po
|
||||||
trans.mg = apps/routerconsole/locale-countries/messages_mg.po
|
trans.mg = apps/routerconsole/locale-countries/messages_mg.po
|
||||||
trans.nb = apps/routerconsole/locale-countries/messages_nb.po
|
trans.nb = apps/routerconsole/locale-countries/messages_nb.po
|
||||||
trans.nl = apps/routerconsole/locale-countries/messages_nl.po
|
trans.nl = apps/routerconsole/locale-countries/messages_nl.po
|
||||||
@ -132,10 +148,11 @@ trans.ru_RU = apps/routerconsole/locale-countries/messages_ru.po
|
|||||||
trans.sk = apps/routerconsole/locale-countries/messages_sk.po
|
trans.sk = apps/routerconsole/locale-countries/messages_sk.po
|
||||||
trans.sq = apps/routerconsole/locale-countries/messages_sq.po
|
trans.sq = apps/routerconsole/locale-countries/messages_sq.po
|
||||||
trans.sv_SE = apps/routerconsole/locale-countries/messages_sv.po
|
trans.sv_SE = apps/routerconsole/locale-countries/messages_sv.po
|
||||||
trans.uk_UA = apps/routerconsole/locale-countries/messages_uk.po
|
|
||||||
trans.tr_TR = apps/routerconsole/locale-countries/messages_tr.po
|
trans.tr_TR = apps/routerconsole/locale-countries/messages_tr.po
|
||||||
|
trans.uk_UA = apps/routerconsole/locale-countries/messages_uk.po
|
||||||
trans.vi = apps/routerconsole/locale-countries/messages_vi.po
|
trans.vi = apps/routerconsole/locale-countries/messages_vi.po
|
||||||
trans.zh_CN = apps/routerconsole/locale-countries/messages_zh.po
|
trans.zh_CN = apps/routerconsole/locale-countries/messages_zh.po
|
||||||
|
trans.zh_TW = apps/routerconsole/locale-countries/messages_zh_TW.po
|
||||||
|
|
||||||
[I2P.i2psnark]
|
[I2P.i2psnark]
|
||||||
source_file = apps/i2psnark/locale/messages_en.po
|
source_file = apps/i2psnark/locale/messages_en.po
|
||||||
@ -144,18 +161,23 @@ trans.ar = apps/i2psnark/locale/messages_ar.po
|
|||||||
trans.cs = apps/i2psnark/locale/messages_cs.po
|
trans.cs = apps/i2psnark/locale/messages_cs.po
|
||||||
trans.de = apps/i2psnark/locale/messages_de.po
|
trans.de = apps/i2psnark/locale/messages_de.po
|
||||||
trans.es = apps/i2psnark/locale/messages_es.po
|
trans.es = apps/i2psnark/locale/messages_es.po
|
||||||
|
trans.fi = apps/i2psnark/locale/messages_fi.po
|
||||||
trans.fr = apps/i2psnark/locale/messages_fr.po
|
trans.fr = apps/i2psnark/locale/messages_fr.po
|
||||||
trans.hu = apps/i2psnark/locale/messages_hu.po
|
trans.hu = apps/i2psnark/locale/messages_hu.po
|
||||||
trans.it = apps/i2psnark/locale/messages_it.po
|
trans.it = apps/i2psnark/locale/messages_it.po
|
||||||
|
trans.ja = apps/i2psnark/locale/messages_ja.po
|
||||||
|
trans.ko = apps/i2psnark/locale/messages_ko.po
|
||||||
trans.nb = apps/i2psnark/locale/messages_nb.po
|
trans.nb = apps/i2psnark/locale/messages_nb.po
|
||||||
trans.nl = apps/i2psnark/locale/messages_nl.po
|
trans.nl = apps/i2psnark/locale/messages_nl.po
|
||||||
trans.pl = apps/i2psnark/locale/messages_pl.po
|
trans.pl = apps/i2psnark/locale/messages_pl.po
|
||||||
trans.pt = apps/i2psnark/locale/messages_pt.po
|
trans.pt = apps/i2psnark/locale/messages_pt.po
|
||||||
trans.pt_BR = apps/i2psnark/locale/messages_pt_bR.po
|
trans.pt_BR = apps/i2psnark/locale/messages_pt_BR.po
|
||||||
trans.ro = apps/i2psnark/locale/messages_ro.po
|
trans.ro = apps/i2psnark/locale/messages_ro.po
|
||||||
trans.ru_RU = apps/i2psnark/locale/messages_ru.po
|
trans.ru_RU = apps/i2psnark/locale/messages_ru.po
|
||||||
trans.sk = apps/i2psnark/locale/messages_sk.po
|
trans.sk = apps/i2psnark/locale/messages_sk.po
|
||||||
trans.sv_SE = apps/i2psnark/locale/messages_sv.po
|
trans.sv_SE = apps/i2psnark/locale/messages_sv.po
|
||||||
|
trans.tr_TR = apps/i2psnark/locale/messages_tr.po
|
||||||
|
trans.uk_UA = apps/i2psnark/locale/messages_uk.po
|
||||||
trans.vi = apps/i2psnark/locale/messages_vi.po
|
trans.vi = apps/i2psnark/locale/messages_vi.po
|
||||||
trans.zh_CN = apps/i2psnark/locale/messages_zh.po
|
trans.zh_CN = apps/i2psnark/locale/messages_zh.po
|
||||||
|
|
||||||
@ -168,10 +190,13 @@ trans.da = apps/susidns/locale/messages_da.po
|
|||||||
trans.de = apps/susidns/locale/messages_de.po
|
trans.de = apps/susidns/locale/messages_de.po
|
||||||
trans.el = apps/susidns/locale/messages_el.po
|
trans.el = apps/susidns/locale/messages_el.po
|
||||||
trans.es = apps/susidns/locale/messages_es.po
|
trans.es = apps/susidns/locale/messages_es.po
|
||||||
|
trans.fi = apps/susidns/locale/messages_fi.po
|
||||||
trans.fr = apps/susidns/locale/messages_fr.po
|
trans.fr = apps/susidns/locale/messages_fr.po
|
||||||
|
trans.gl = apps/susidns/locale/messages_gl.po
|
||||||
trans.hu = apps/susidns/locale/messages_hu.po
|
trans.hu = apps/susidns/locale/messages_hu.po
|
||||||
trans.it = apps/susidns/locale/messages_it.po
|
trans.it = apps/susidns/locale/messages_it.po
|
||||||
trans.ja = apps/susidns/locale/messages_ja.po
|
trans.ja = apps/susidns/locale/messages_ja.po
|
||||||
|
trans.ko = apps/susidns/locale/messages_ko.po
|
||||||
trans.nl = apps/susidns/locale/messages_nl.po
|
trans.nl = apps/susidns/locale/messages_nl.po
|
||||||
trans.pl = apps/susidns/locale/messages_pl.po
|
trans.pl = apps/susidns/locale/messages_pl.po
|
||||||
trans.pt = apps/susidns/locale/messages_pt.po
|
trans.pt = apps/susidns/locale/messages_pt.po
|
||||||
@ -183,27 +208,40 @@ trans.tr_TR = apps/susidns/locale/messages_tr.po
|
|||||||
trans.uk_UA = apps/susidns/locale/messages_uk.po
|
trans.uk_UA = apps/susidns/locale/messages_uk.po
|
||||||
trans.vi = apps/susidns/locale/messages_vi.po
|
trans.vi = apps/susidns/locale/messages_vi.po
|
||||||
trans.zh_CN = apps/susidns/locale/messages_zh.po
|
trans.zh_CN = apps/susidns/locale/messages_zh.po
|
||||||
|
trans.zh_TW = apps/susidns/locale/messages_zh_TW.po
|
||||||
|
|
||||||
[I2P.desktopgui]
|
[I2P.desktopgui]
|
||||||
source_file = apps/desktopgui/locale/messages_en.po
|
source_file = apps/desktopgui/locale/messages_en.po
|
||||||
source_lang = en
|
source_lang = en
|
||||||
trans.ar = apps/desktopgui/locale/messages_ar.po
|
trans.ar = apps/desktopgui/locale/messages_ar.po
|
||||||
|
trans.bg = apps/desktopgui/locale/messages_bg.po
|
||||||
|
trans.ca = apps/desktopgui/locale/messages_ca.po
|
||||||
trans.cs = apps/desktopgui/locale/messages_cs.po
|
trans.cs = apps/desktopgui/locale/messages_cs.po
|
||||||
trans.da = apps/desktopgui/locale/messages_da.po
|
trans.da = apps/desktopgui/locale/messages_da.po
|
||||||
trans.de = apps/desktopgui/locale/messages_de.po
|
trans.de = apps/desktopgui/locale/messages_de.po
|
||||||
trans.el = apps/desktopgui/locale/messages_el.po
|
trans.el = apps/desktopgui/locale/messages_el.po
|
||||||
trans.es = apps/desktopgui/locale/messages_es.po
|
trans.es = apps/desktopgui/locale/messages_es.po
|
||||||
|
trans.fa = apps/desktopgui/locale/messages_fa.po
|
||||||
|
trans.fi = apps/desktopgui/locale/messages_fi.po
|
||||||
trans.fr = apps/desktopgui/locale/messages_fr.po
|
trans.fr = apps/desktopgui/locale/messages_fr.po
|
||||||
|
trans.gl = apps/desktopgui/locale/messages_gl.po
|
||||||
trans.hu = apps/desktopgui/locale/messages_hu.po
|
trans.hu = apps/desktopgui/locale/messages_hu.po
|
||||||
|
;; Java converts id to in
|
||||||
|
trans.id = apps/desktopgui/locale/messages_in.po
|
||||||
trans.it = apps/desktopgui/locale/messages_it.po
|
trans.it = apps/desktopgui/locale/messages_it.po
|
||||||
trans.ja = apps/desktopgui/locale/messages_ja.po
|
trans.ja = apps/desktopgui/locale/messages_ja.po
|
||||||
|
trans.ko = apps/desktopgui/locale/messages_ko.po
|
||||||
|
trans.mg = apps/desktopgui/locale/messages_mg.po
|
||||||
|
trans.nb = apps/desktopgui/locale/messages_nb.po
|
||||||
trans.nl = apps/desktopgui/locale/messages_nl.po
|
trans.nl = apps/desktopgui/locale/messages_nl.po
|
||||||
trans.pl = apps/desktopgui/locale/messages_pl.po
|
trans.pl = apps/desktopgui/locale/messages_pl.po
|
||||||
|
trans.pt = apps/desktopgui/locale/messages_pt.po
|
||||||
trans.pt_BR = apps/desktopgui/locale/messages_pt_BR.po
|
trans.pt_BR = apps/desktopgui/locale/messages_pt_BR.po
|
||||||
trans.ro = apps/desktopgui/locale/messages_ro.po
|
trans.ro = apps/desktopgui/locale/messages_ro.po
|
||||||
trans.ru_RU = apps/desktopgui/locale/messages_ru.po
|
trans.ru_RU = apps/desktopgui/locale/messages_ru.po
|
||||||
trans.sk = apps/desktopgui/locale/messages_sk.po
|
trans.sk = apps/desktopgui/locale/messages_sk.po
|
||||||
trans.sv_SE = apps/desktopgui/locale/messages_sv.po
|
trans.sv_SE = apps/desktopgui/locale/messages_sv.po
|
||||||
|
trans.sq = apps/desktopgui/locale/messages_sq.po
|
||||||
trans.uk_UA = apps/desktopgui/locale/messages_uk.po
|
trans.uk_UA = apps/desktopgui/locale/messages_uk.po
|
||||||
trans.tr_TR = apps/desktopgui/locale/messages_tr.po
|
trans.tr_TR = apps/desktopgui/locale/messages_tr.po
|
||||||
trans.vi = apps/desktopgui/locale/messages_vi.po
|
trans.vi = apps/desktopgui/locale/messages_vi.po
|
||||||
@ -218,11 +256,13 @@ trans.de = apps/susimail/locale/messages_de.po
|
|||||||
trans.es = apps/susimail/locale/messages_es.po
|
trans.es = apps/susimail/locale/messages_es.po
|
||||||
trans.fi = apps/susimail/locale/messages_fi.po
|
trans.fi = apps/susimail/locale/messages_fi.po
|
||||||
trans.fr = apps/susimail/locale/messages_fr.po
|
trans.fr = apps/susimail/locale/messages_fr.po
|
||||||
|
trans.gl = apps/susimail/locale/messages_gl.po
|
||||||
trans.hu = apps/susimail/locale/messages_hu.po
|
trans.hu = apps/susimail/locale/messages_hu.po
|
||||||
;; Java converts id to in
|
;; Java converts id to in
|
||||||
trans.id = apps/susimail/locale/messages_in.po
|
trans.id = apps/susimail/locale/messages_in.po
|
||||||
trans.it = apps/susimail/locale/messages_it.po
|
trans.it = apps/susimail/locale/messages_it.po
|
||||||
trans.ja = apps/susimail/locale/messages_ja.po
|
trans.ja = apps/susimail/locale/messages_ja.po
|
||||||
|
trans.ko = apps/susimail/locale/messages_ko.po
|
||||||
trans.mg = apps/susimail/locale/messages_mg.po
|
trans.mg = apps/susimail/locale/messages_mg.po
|
||||||
trans.nl = apps/susimail/locale/messages_nl.po
|
trans.nl = apps/susimail/locale/messages_nl.po
|
||||||
trans.pl = apps/susimail/locale/messages_pl.po
|
trans.pl = apps/susimail/locale/messages_pl.po
|
||||||
@ -232,9 +272,11 @@ trans.ro = apps/susimail/locale/messages_ro.po
|
|||||||
trans.ru_RU = apps/susimail/locale/messages_ru.po
|
trans.ru_RU = apps/susimail/locale/messages_ru.po
|
||||||
trans.sq = apps/susimail/locale/messages_sq.po
|
trans.sq = apps/susimail/locale/messages_sq.po
|
||||||
trans.sv_SE = apps/susimail/locale/messages_sv.po
|
trans.sv_SE = apps/susimail/locale/messages_sv.po
|
||||||
|
trans.tr_TR = apps/susimail/locale/messages_tr.po
|
||||||
trans.uk_UA = apps/susimail/locale/messages_uk.po
|
trans.uk_UA = apps/susimail/locale/messages_uk.po
|
||||||
trans.vi = apps/susimail/locale/messages_vi.po
|
trans.vi = apps/susimail/locale/messages_vi.po
|
||||||
trans.zh_CN = apps/susimail/locale/messages_zh.po
|
trans.zh_CN = apps/susimail/locale/messages_zh.po
|
||||||
|
trans.zh_TW = apps/susimail/locale/messages_zh_TW.po
|
||||||
|
|
||||||
[I2P.debconf]
|
[I2P.debconf]
|
||||||
source_file = debian/po/templates.pot
|
source_file = debian/po/templates.pot
|
||||||
@ -259,9 +301,10 @@ trans.ru_RU = debian/po/ru.po
|
|||||||
trans.sk = debian/po/sk.po
|
trans.sk = debian/po/sk.po
|
||||||
trans.sq = debian/po/sq.po
|
trans.sq = debian/po/sq.po
|
||||||
trans.sv_SE = debian/po/sv.po
|
trans.sv_SE = debian/po/sv.po
|
||||||
trans.uk_UA = debian/po/uk.po
|
|
||||||
trans.tr_TR = debian/po/tr.po
|
trans.tr_TR = debian/po/tr.po
|
||||||
|
trans.uk_UA = debian/po/uk.po
|
||||||
trans.zh_CN = debian/po/zh.po
|
trans.zh_CN = debian/po/zh.po
|
||||||
|
trans.zh_TW = debian/po/zh_TW.po
|
||||||
|
|
||||||
[I2P.i2prouter-script]
|
[I2P.i2prouter-script]
|
||||||
source_file = installer/resources/locale/po/messages_en.po
|
source_file = installer/resources/locale/po/messages_en.po
|
||||||
@ -275,10 +318,8 @@ trans.es = installer/resources/locale/po/messages_es.po
|
|||||||
trans.fr = installer/resources/locale/po/messages_fr.po
|
trans.fr = installer/resources/locale/po/messages_fr.po
|
||||||
trans.id = installer/resources/locale/po/messages_id.po
|
trans.id = installer/resources/locale/po/messages_id.po
|
||||||
trans.it = installer/resources/locale/po/messages_it.po
|
trans.it = installer/resources/locale/po/messages_it.po
|
||||||
trans.pl = installer/resources/locale/po/messages_pl.po
|
|
||||||
trans.ja = installer/resources/locale/po/messages_ja.po
|
trans.ja = installer/resources/locale/po/messages_ja.po
|
||||||
;; currently fails check
|
trans.ko = installer/resources/locale/po/messages_ko.po
|
||||||
;;trans.ko = installer/resources/locale/po/messages_ko.po
|
|
||||||
trans.nl = installer/resources/locale/po/messages_nl.po
|
trans.nl = installer/resources/locale/po/messages_nl.po
|
||||||
trans.pl = installer/resources/locale/po/messages_pl.po
|
trans.pl = installer/resources/locale/po/messages_pl.po
|
||||||
trans.pt = installer/resources/locale/po/messages_pt.po
|
trans.pt = installer/resources/locale/po/messages_pt.po
|
||||||
@ -301,6 +342,8 @@ trans.de = core/java/src/gnu/getopt/MessagesBundle_de.properties
|
|||||||
trans.es = core/java/src/gnu/getopt/MessagesBundle_es.properties
|
trans.es = core/java/src/gnu/getopt/MessagesBundle_es.properties
|
||||||
trans.fi = core/java/src/gnu/getopt/MessagesBundle_fi.properties
|
trans.fi = core/java/src/gnu/getopt/MessagesBundle_fi.properties
|
||||||
trans.fr = core/java/src/gnu/getopt/MessagesBundle_fr.properties
|
trans.fr = core/java/src/gnu/getopt/MessagesBundle_fr.properties
|
||||||
|
;; currently corrupt, non-UTF-8
|
||||||
|
;;trans.gl = core/java/src/gnu/getopt/MessagesBundle_gl.properties
|
||||||
trans.hu = core/java/src/gnu/getopt/MessagesBundle_hu.properties
|
trans.hu = core/java/src/gnu/getopt/MessagesBundle_hu.properties
|
||||||
;; Java converts id to in
|
;; Java converts id to in
|
||||||
trans.id = core/java/src/gnu/getopt/MessagesBundle_in.properties
|
trans.id = core/java/src/gnu/getopt/MessagesBundle_in.properties
|
||||||
@ -319,6 +362,8 @@ trans.ru_RU = core/java/src/gnu/getopt/MessagesBundle_ru.properties
|
|||||||
trans.sk = core/java/src/gnu/getopt/MessagesBundle_sk.properties
|
trans.sk = core/java/src/gnu/getopt/MessagesBundle_sk.properties
|
||||||
;; currently corrupt, non-UTF-8
|
;; currently corrupt, non-UTF-8
|
||||||
;;trans.sq = core/java/src/gnu/getopt/MessagesBundle_sq.properties
|
;;trans.sq = core/java/src/gnu/getopt/MessagesBundle_sq.properties
|
||||||
|
;; currently corrupt, non-UTF-8
|
||||||
|
;;trans.tr_TR = core/java/src/gnu/getopt/MessagesBundle_tr.properties
|
||||||
trans.uk_UA = core/java/src/gnu/getopt/MessagesBundle_uk.properties
|
trans.uk_UA = core/java/src/gnu/getopt/MessagesBundle_uk.properties
|
||||||
trans.zh_CN = core/java/src/gnu/getopt/MessagesBundle_zh.properties
|
trans.zh_CN = core/java/src/gnu/getopt/MessagesBundle_zh.properties
|
||||||
|
|
||||||
@ -326,17 +371,24 @@ trans.zh_CN = core/java/src/gnu/getopt/MessagesBundle_zh.properties
|
|||||||
source_file = apps/ministreaming/locale/messages_en.po
|
source_file = apps/ministreaming/locale/messages_en.po
|
||||||
source_lang = en
|
source_lang = en
|
||||||
trans.ca = apps/ministreaming/locale/messages_ca.po
|
trans.ca = apps/ministreaming/locale/messages_ca.po
|
||||||
|
trans.cs = apps/ministreaming/locale/messages_cs.po
|
||||||
trans.de = apps/ministreaming/locale/messages_de.po
|
trans.de = apps/ministreaming/locale/messages_de.po
|
||||||
trans.es = apps/ministreaming/locale/messages_es.po
|
trans.es = apps/ministreaming/locale/messages_es.po
|
||||||
|
trans.fi = apps/ministreaming/locale/messages_fi.po
|
||||||
trans.fr = apps/ministreaming/locale/messages_fr.po
|
trans.fr = apps/ministreaming/locale/messages_fr.po
|
||||||
|
trans.gl = apps/ministreaming/locale/messages_gl.po
|
||||||
;; Java converts id to in
|
;; Java converts id to in
|
||||||
trans.id = apps/ministreaming/locale/messages_in.po
|
trans.id = apps/ministreaming/locale/messages_in.po
|
||||||
trans.it = apps/ministreaming/locale/messages_it.po
|
trans.it = apps/ministreaming/locale/messages_it.po
|
||||||
|
trans.ko = apps/ministreaming/locale/messages_ko.po
|
||||||
trans.nb = apps/ministreaming/locale/messages_nb.po
|
trans.nb = apps/ministreaming/locale/messages_nb.po
|
||||||
|
trans.nl = apps/ministreaming/locale/messages_nl.po
|
||||||
trans.pl = apps/ministreaming/locale/messages_pl.po
|
trans.pl = apps/ministreaming/locale/messages_pl.po
|
||||||
|
trans.pt_BR = apps/ministreaming/locale/messages_pt_BR.po
|
||||||
trans.ro = apps/ministreaming/locale/messages_ro.po
|
trans.ro = apps/ministreaming/locale/messages_ro.po
|
||||||
trans.ru_RU = apps/ministreaming/locale/messages_ru.po
|
trans.ru_RU = apps/ministreaming/locale/messages_ru.po
|
||||||
trans.sv_SE = apps/ministreaming/locale/messages_sv.po
|
trans.sv_SE = apps/ministreaming/locale/messages_sv.po
|
||||||
|
trans.tr_TR = apps/ministreaming/locale/messages_tr.po
|
||||||
trans.uk_UA = apps/ministreaming/locale/messages_uk.po
|
trans.uk_UA = apps/ministreaming/locale/messages_uk.po
|
||||||
trans.zh_CN = apps/ministreaming/locale/messages_zh.po
|
trans.zh_CN = apps/ministreaming/locale/messages_zh.po
|
||||||
|
|
||||||
|
14
Docker.entrypoint.sh
Normal file
@ -0,0 +1,14 @@
|
|||||||
|
#!/bin/sh
|
||||||
|
|
||||||
|
export JAVA_HOME=/opt/jdk/jre
|
||||||
|
|
||||||
|
# Ensure user rights
|
||||||
|
chown -R i2p:nobody /opt/i2p
|
||||||
|
chmod -R u+rwx /opt/i2p
|
||||||
|
|
||||||
|
gosu i2p /opt/i2p/i2psvc /opt/i2p/wrapper.config wrapper.pidfile=/var/tmp/i2p.pid \
|
||||||
|
wrapper.name=i2p \
|
||||||
|
wrapper.displayname="I2P Service" \
|
||||||
|
wrapper.statusfile=/var/tmp/i2p.status \
|
||||||
|
wrapper.java.statusfile=/var/tmp/i2p.java.status \
|
||||||
|
wrapper.logfile=/var/tmp/wrapper.log
|
7
Docker.expt
Normal file
@ -0,0 +1,7 @@
|
|||||||
|
#!/usr/bin/expect
|
||||||
|
set timeout 15;
|
||||||
|
spawn java -jar /tmp/i2pinstall.jar -console
|
||||||
|
expect {
|
||||||
|
-re ".*press 1 to continue, 2 to quit, 3 to redisplay" {send "1\r"; exp_continue;}
|
||||||
|
-re "Select target path *" {send "/opt/i2p\r"; exp_continue;}
|
||||||
|
}
|
62
Dockerfile
Normal file
@ -0,0 +1,62 @@
|
|||||||
|
FROM meeh/java8server:latest
|
||||||
|
# Docker image based on Alpine with Java.
|
||||||
|
|
||||||
|
# We use Oracle Java to run I2P, but uses the openjdk to build it.
|
||||||
|
|
||||||
|
|
||||||
|
MAINTAINER Mikal Villa <mikal@sigterm.no>
|
||||||
|
|
||||||
|
ENV GIT_BRANCH="master"
|
||||||
|
ENV I2P_PREFIX="/opt/i2p"
|
||||||
|
ENV PATH=${I2P_PREFIX}/bin:$PATH
|
||||||
|
ENV JAVA_HOME=/usr/lib/jvm/default-jvm
|
||||||
|
|
||||||
|
ENV GOSU_VERSION=1.7
|
||||||
|
ENV GOSU_SHASUM="34049cfc713e8b74b90d6de49690fa601dc040021980812b2f1f691534be8a50 /usr/local/bin/gosu"
|
||||||
|
|
||||||
|
RUN mkdir /user && adduser -S -h /user i2p && chown -R i2p:nobody /user
|
||||||
|
|
||||||
|
# Adding files first, since Docker.expt is required for installation
|
||||||
|
ADD Docker.expt /tmp/Docker.expt
|
||||||
|
ADD Docker.entrypoint.sh /entrypoint.sh
|
||||||
|
|
||||||
|
# Required for wget https
|
||||||
|
RUN apk add --no-cache openssl
|
||||||
|
# Gosu is a replacement for su/sudo in docker and not a backdoor :) See https://github.com/tianon/gosu
|
||||||
|
RUN wget -O /usr/local/bin/gosu https://github.com/tianon/gosu/releases/download/${GOSU_VERSION}/gosu-amd64 \
|
||||||
|
&& echo "${GOSU_SHASUM}" | sha256sum -c && chmod +x /usr/local/bin/gosu
|
||||||
|
|
||||||
|
#
|
||||||
|
# Each RUN is a layer, adding the dependencies and building i2pd in one layer takes around 8-900Mb, so to keep the
|
||||||
|
# image under 200mb we need to remove all the build dependencies in the same "RUN" / layer.
|
||||||
|
#
|
||||||
|
|
||||||
|
# The main layer
|
||||||
|
RUN apk --no-cache add build-base git gettext tar bzip2 apache-ant openjdk8 expect \
|
||||||
|
&& mkdir -p /usr/src/build \
|
||||||
|
&& cd /usr/src/build \
|
||||||
|
&& git clone -b ${GIT_BRANCH} https://github.com/i2p/i2p.i2p.git \
|
||||||
|
&& cd /usr/src/build/i2p.i2p \
|
||||||
|
&& echo "noExe=true" >> build.properties \
|
||||||
|
&& ant installer-linux \
|
||||||
|
&& cp i2pinstall*.jar /tmp/i2pinstall.jar \
|
||||||
|
&& mkdir -p /opt \
|
||||||
|
&& chown i2p:root /opt \
|
||||||
|
&& chmod u+rw /opt \
|
||||||
|
&& gosu i2p expect -f /tmp/Docker.expt \
|
||||||
|
&& cd ${I2P_PREFIX} \
|
||||||
|
&& rm -fr man docs *.bat *.command *.app /tmp/i2pinstall.jar /tmp/Docker.expt \
|
||||||
|
&& rm -fr /usr/src/build \
|
||||||
|
&& apk --purge del build-base apache-ant expect tcl expat git openjdk8 openjdk8-jre openjdk8-jre-base openjdk8-jre-lib bzip2 tar \
|
||||||
|
binutils-libs binutils pkgconfig libcurl libc-dev musl-dev g++ make fortify-headers pkgconf giflib libssh2 libxdmcp libxcb \
|
||||||
|
libx11 pcre alsa-lib libxi libxrender libxml2 readline bash openssl \
|
||||||
|
&& rm -fr /usr/lib/jvm/default-jre \
|
||||||
|
&& ln -sf /opt/jdk/jre /usr/lib/jvm/default-jre \
|
||||||
|
&& chmod a+x /entrypoint.sh
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
EXPOSE 7654 7656 7657 7658 4444 6668 8998 7659 7660 4445 15000-20000
|
||||||
|
|
||||||
|
ENTRYPOINT [ "/entrypoint.sh" ]
|
||||||
|
|
@ -25,21 +25,22 @@ where there are comments labeled "PORTABLE". Do this before you
|
|||||||
run I2P for the first time.
|
run I2P for the first time.
|
||||||
|
|
||||||
To start I2P:
|
To start I2P:
|
||||||
(*nix): sh i2prouter start
|
(*nix, BSD, Mac): sh i2prouter start
|
||||||
(win*): I2P.exe
|
(win*): I2P.exe
|
||||||
(non-x86 platforms PPC, ARM, etc): sh runplain.sh
|
(platforms without wrapper support): sh runplain.sh
|
||||||
|
|
||||||
To stop I2P (gracefully):
|
To stop I2P (gracefully):
|
||||||
lynx http://localhost:7657/summaryframe (click "Shutdown")
|
lynx http://localhost:7657/summaryframe (click "Shutdown")
|
||||||
|
or (*nix, BSD, Mac) sh i2prouter graceful
|
||||||
|
|
||||||
To stop I2P immediately:
|
To stop I2P immediately:
|
||||||
sh i2prouter stop
|
(*nix, BSD, Mac) sh i2prouter stop
|
||||||
|
|
||||||
To uninstall I2P:
|
To uninstall I2P:
|
||||||
rm -rf $I2PInstallDir ~/.i2p
|
rm -rf $I2PInstallDir ~/.i2p
|
||||||
|
|
||||||
Supported JVMs:
|
Supported JVMs:
|
||||||
All platforms: Java 1.6 or higher required; 1.7 or higher recommended
|
All platforms: Java 1.7 or higher required
|
||||||
Windows: OpenJDK or Oracle from http://java.com/download
|
Windows: OpenJDK or Oracle from http://java.com/download
|
||||||
Linux: OpenJDK or Oracle from http://java.com/download
|
Linux: OpenJDK or Oracle from http://java.com/download
|
||||||
FreeBSD: OpenJDK or Oracle from http://java.com/download
|
FreeBSD: OpenJDK or Oracle from http://java.com/download
|
||||||
|
23
INSTALL.txt
@ -1,11 +1,13 @@
|
|||||||
I2P source installation instructions
|
I2P source installation instructions
|
||||||
|
|
||||||
Prerequisites to build from source:
|
Prerequisites to build from source:
|
||||||
Java SDK (preferably Oracle/Sun or OpenJDK) 1.6.0 or higher
|
Java SDK (preferably Oracle/Sun or OpenJDK) 1.7.0 or higher
|
||||||
Non-linux operating systems and JVMs: See https://trac.i2p2.de/wiki/java
|
Non-linux operating systems and JVMs: See https://trac.i2p2.de/wiki/java
|
||||||
|
Certain subsystems for embedded (core, router, mstreaming, streaming, i2ptunnel) require only Java 1.6
|
||||||
Apache Ant 1.7.0 or higher
|
Apache Ant 1.7.0 or higher
|
||||||
The xgettext, msgfmt, and msgmerge tools installed
|
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/
|
||||||
|
Build environment must use a UTF-8 locale.
|
||||||
|
|
||||||
To build and install I2P from source, you must first build
|
To build and install I2P from source, you must first build
|
||||||
and package up the appropriate installer by running:
|
and package up the appropriate installer by running:
|
||||||
@ -40,29 +42,30 @@ or on Windows, just double-click on i2pinstall.exe.
|
|||||||
Or move the i2pupdate.zip file into an existing installation directory and restart.
|
Or move the i2pupdate.zip file into an existing installation directory and restart.
|
||||||
|
|
||||||
To start I2P:
|
To start I2P:
|
||||||
(*nix): sh i2prouter start
|
(*nix, BSD, Mac): sh i2prouter start
|
||||||
(win*): I2P.exe or i2prouter.bat
|
(win*): I2P.exe or i2prouter.bat
|
||||||
(non-x86 platforms PPC, ARM, etc): sh runplain.sh
|
(platforms without wrapper support): sh runplain.sh
|
||||||
|
|
||||||
To install I2P as a system service:
|
To install I2P as a system service:
|
||||||
(*nix) sh i2prouter install
|
(*nix, BSD, Mac) sh i2prouter install
|
||||||
(win*) install_i2p_service_winnt.bat
|
(win*) install_i2p_service_winnt.bat
|
||||||
|
|
||||||
To uninstall I2P as a system service:
|
To uninstall I2P as a system service:
|
||||||
(*nix) sh i2prouter remove
|
(*nix, BSD, Mac) sh i2prouter remove
|
||||||
(win*) uninstall_i2p-service_winnt.bat
|
(win*) uninstall_i2p-service_winnt.bat
|
||||||
|
|
||||||
To stop I2P (gracefully):
|
To stop I2P (gracefully):
|
||||||
lynx http://localhost:7657/summaryframe (click "Shutdown")
|
lynx http://localhost:7657/summaryframe (click "Shutdown")
|
||||||
|
or (*nix, BSD, Mac) sh i2prouter graceful
|
||||||
|
|
||||||
To stop I2P immediately:
|
To stop I2P immediately:
|
||||||
sh i2prouter stop
|
(*nix, BSD, Mac) sh i2prouter stop
|
||||||
|
|
||||||
To uninstall I2P:
|
To uninstall I2P:
|
||||||
rm -rf $I2PInstallDir ~/.i2p
|
rm -rf $I2PInstallDir ~/.i2p
|
||||||
|
|
||||||
Supported JVMs:
|
Supported JVMs:
|
||||||
Windows: Latest available from http://java.com/download (1.5+ supported)
|
Windows: Latest available from http://java.com/download (1.7+ supported)
|
||||||
Linux: Latest available from http://java.com/download (1.5+ supported)
|
Linux: Latest available from http://java.com/download (1.7+ supported)
|
||||||
FreeBSD: 1.5-compatible (NIO required)
|
FreeBSD: 1.7-compatible (NIO required)
|
||||||
Other operating systems and JVMs: See http://trac.i2p2.de/wiki/java
|
Other operating systems and JVMs: See http://trac.i2p2.de/wiki/java
|
||||||
|
51
LICENSE.txt
@ -36,10 +36,14 @@ Public domain except as listed below:
|
|||||||
Copyright (c) 2003, TheCrypto
|
Copyright (c) 2003, TheCrypto
|
||||||
See licenses/LICENSE-ElGamalDSA.txt
|
See licenses/LICENSE-ElGamalDSA.txt
|
||||||
|
|
||||||
SHA256 and HMAC:
|
HMAC:
|
||||||
Copyright (c) 2000 - 2004 The Legion Of The Bouncy Castle
|
Copyright (c) 2000 - 2004 The Legion Of The Bouncy Castle
|
||||||
See licenses/LICENSE-SHA256.txt
|
See licenses/LICENSE-SHA256.txt
|
||||||
|
|
||||||
|
ElGamal:
|
||||||
|
Copyright (c) 2000 - 2013 The Legion of the Bouncy Castle Inc. (http://www.bouncycastle.org)
|
||||||
|
See licenses/LICENSE-SHA256.txt
|
||||||
|
|
||||||
AES code:
|
AES code:
|
||||||
Copyright (c) 1995-2005 The Cryptix Foundation Limited.
|
Copyright (c) 1995-2005 The Cryptix Foundation Limited.
|
||||||
See licenses/LICENSE-Cryptix.txt
|
See licenses/LICENSE-Cryptix.txt
|
||||||
@ -60,7 +64,7 @@ Public domain except as listed below:
|
|||||||
Copyright 2006 Gregory Rubin grrubin@gmail.com
|
Copyright 2006 Gregory Rubin grrubin@gmail.com
|
||||||
See licenses/LICENSE-HashCash.txt
|
See licenses/LICENSE-HashCash.txt
|
||||||
|
|
||||||
GettextResource from gettext v0.18:
|
GettextResource from gettext v0.19.8:
|
||||||
Copyright (C) 2001, 2007 Free Software Foundation, Inc.
|
Copyright (C) 2001, 2007 Free Software Foundation, Inc.
|
||||||
See licenses/LICENSE-LGPLv2.1.txt
|
See licenses/LICENSE-LGPLv2.1.txt
|
||||||
|
|
||||||
@ -99,9 +103,14 @@ Public domain except as listed below:
|
|||||||
http://creativecommons.org/licenses/by-sa/3.0/
|
http://creativecommons.org/licenses/by-sa/3.0/
|
||||||
This product includes GeoLite data created by MaxMind, available from http://www.maxmind.com/
|
This product includes GeoLite data created by MaxMind, available from http://www.maxmind.com/
|
||||||
|
|
||||||
|
GeoIP API 1.3.1:
|
||||||
|
See licenses/LICENSE-LGPLv2.1.txt
|
||||||
|
|
||||||
|
|
||||||
Installer:
|
Installer:
|
||||||
Launch4j 3.0.1:
|
Launch4j 3.0.1:
|
||||||
|
(Launch4j is only included in the upstream source package and Windows binaries.
|
||||||
|
Not applicable for non-Windows binaries or Debian/Launchpad packages.)
|
||||||
Copyright (c) 2004, 2008 Grzegorz Kowal
|
Copyright (c) 2004, 2008 Grzegorz Kowal
|
||||||
See licenses/LICENSE-Launch4j.txt (in binary packages)
|
See licenses/LICENSE-Launch4j.txt (in binary packages)
|
||||||
See installer/lib/launch4j/LICENSE.txt (in source packages)
|
See installer/lib/launch4j/LICENSE.txt (in source packages)
|
||||||
@ -141,8 +150,8 @@ Installer:
|
|||||||
|
|
||||||
|
|
||||||
|
|
||||||
Java Service Wrapper Community Edition 32-bit 3.5.25:
|
Java Service Wrapper Community Edition 32-bit 3.5.30:
|
||||||
Copyright (C) 1999-2011 Tanuki Software, Ltd. All Rights Reserved.
|
Copyright (C) 1999-2016 Tanuki Software, Ltd. All Rights Reserved.
|
||||||
See licenses/LICENSE-Wrapper.txt
|
See licenses/LICENSE-Wrapper.txt
|
||||||
|
|
||||||
|
|
||||||
@ -152,6 +161,8 @@ Jbigi Libraries (jbigi.jar):
|
|||||||
GMP 4.3.2 / 5.0.2:
|
GMP 4.3.2 / 5.0.2:
|
||||||
Copyright 1991, 1996, 1999, 2000, 2007 Free Software Foundation, Inc.
|
Copyright 1991, 1996, 1999, 2000, 2007 Free Software Foundation, Inc.
|
||||||
See licenses/LICENSE-LGPLv3.txt
|
See licenses/LICENSE-LGPLv3.txt
|
||||||
|
GMP 6.0.0:
|
||||||
|
See licenses/LICENSE-GPLv2.txt
|
||||||
|
|
||||||
|
|
||||||
Applications:
|
Applications:
|
||||||
@ -164,6 +175,10 @@ Applications:
|
|||||||
Copyright (C) sponge
|
Copyright (C) sponge
|
||||||
See licenses/COPYING-BOB.txt
|
See licenses/COPYING-BOB.txt
|
||||||
|
|
||||||
|
Desktopgui
|
||||||
|
Copyright (c) Mathias De Maré
|
||||||
|
See licenses/LICENSE-DesktopGUI.txt
|
||||||
|
|
||||||
I2PSnark:
|
I2PSnark:
|
||||||
Copyright (C) 2003 Mark J. Wielaard
|
Copyright (C) 2003 Mark J. Wielaard
|
||||||
GPLv2 (or any later version)
|
GPLv2 (or any later version)
|
||||||
@ -186,15 +201,31 @@ Applications:
|
|||||||
By welterde.
|
By welterde.
|
||||||
See licenses/LICENSE-GPLv2.txt
|
See licenses/LICENSE-GPLv2.txt
|
||||||
|
|
||||||
Jetty 8.1.17.v20150415:
|
Imagegen:
|
||||||
|
Identicon:
|
||||||
|
Copyright (c) 2007-2014 Don Park <donpark@docuverse.com>
|
||||||
|
See licenses/LICENSE-Identicon.txt
|
||||||
|
RandomArt:
|
||||||
|
Copyright (c) 2000, 2001 Markus Friedl. All rights reserved.
|
||||||
|
Copyright (c) 2008 Alexander von Gernler. All rights reserved.
|
||||||
|
See licenses/LICENSE-BSD.txt
|
||||||
|
Zxing 3.3.0:
|
||||||
|
See licenses/LICENSE-Apache2.0.txt
|
||||||
|
|
||||||
|
Jetty 8.1.21.v20160908:
|
||||||
See licenses/ABOUT-Jetty.html
|
See licenses/ABOUT-Jetty.html
|
||||||
See licenses/NOTICE-Jetty.html
|
See licenses/NOTICE-Jetty.html
|
||||||
See licenses/LICENSE-Apache2.0.txt
|
See licenses/LICENSE-Apache2.0.txt
|
||||||
See licenses/LICENSE-ECLIPSE-1.0.html
|
See licenses/LICENSE-ECLIPSE-1.0.html
|
||||||
See licenses/NOTICE-Commons-Logging.txt
|
See licenses/NOTICE-Commons-Logging.txt
|
||||||
|
|
||||||
JRobin 1.5.9.1:
|
JRobin 1.6.0-1:
|
||||||
|
Copyright (c) 2001-2005 Sasa Markovic and Ciaran Treanor.
|
||||||
|
Copyright (c) 2011 The OpenNMS Group, Inc.
|
||||||
See licenses/LICENSE-LGPLv2.1.txt
|
See licenses/LICENSE-LGPLv2.1.txt
|
||||||
|
DeallocationHelper:
|
||||||
|
Copyright (c) 2006-2016 Julien Gouesse
|
||||||
|
See licenses/LICENSE-GPLv2.txt
|
||||||
|
|
||||||
Ministreaming Lib:
|
Ministreaming Lib:
|
||||||
By mihi.
|
By mihi.
|
||||||
@ -252,8 +283,8 @@ Applications:
|
|||||||
Bundles systray4j-2.4.1:
|
Bundles systray4j-2.4.1:
|
||||||
See licenses/LICENSE-LGPLv2.1.txt
|
See licenses/LICENSE-LGPLv2.1.txt
|
||||||
|
|
||||||
Tomcat 6.0.44:
|
Tomcat 6.0.48:
|
||||||
Copyright 1999-2015 The Apache Software Foundation
|
Copyright 1999-2016 The Apache Software Foundation
|
||||||
See licenses/LICENSE-Apache2.0.txt
|
See licenses/LICENSE-Apache2.0.txt
|
||||||
See licenses/NOTICE-Tomcat.txt
|
See licenses/NOTICE-Tomcat.txt
|
||||||
|
|
||||||
@ -271,10 +302,6 @@ distributions. See the source package for the additional license information.
|
|||||||
Copyright (C) sponge
|
Copyright (C) sponge
|
||||||
DWTFYWTPL
|
DWTFYWTPL
|
||||||
|
|
||||||
Desktopgui
|
|
||||||
Copyright (c) Mathias De Maré
|
|
||||||
See apps/desktopgui/LICENSE
|
|
||||||
|
|
||||||
SAM C Library:
|
SAM C Library:
|
||||||
Copyright (c) 2004, Matthew P. Cashdollar <mpc@innographx.com>
|
Copyright (c) 2004, Matthew P. Cashdollar <mpc@innographx.com>
|
||||||
See apps/sam/c/doc/license.txt
|
See apps/sam/c/doc/license.txt
|
||||||
|
51
README.md
Normal file
@ -0,0 +1,51 @@
|
|||||||
|
Prerequisites to build from source:
|
||||||
|
Java SDK (preferably Oracle/Sun or OpenJDK) 1.7.0 or higher
|
||||||
|
Non-linux operating systems and JVMs: See https://trac.i2p2.de/wiki/java
|
||||||
|
Certain subsystems for embedded (core, router, mstreaming, streaming, i2ptunnel) require only Java 1.6
|
||||||
|
Apache Ant 1.7.0 or higher
|
||||||
|
The xgettext, msgfmt, and msgmerge tools installed
|
||||||
|
from the GNU gettext package http://www.gnu.org/software/gettext/
|
||||||
|
Build environment must use a UTF-8 locale.
|
||||||
|
|
||||||
|
To build:
|
||||||
|
On x86 systems do:
|
||||||
|
ant pkg
|
||||||
|
|
||||||
|
On non-x86, use one of the following instead:
|
||||||
|
ant installer-linux
|
||||||
|
ant installer-freebsd
|
||||||
|
ant installer-osx
|
||||||
|
|
||||||
|
Run 'ant' with no arguments to see other build options.
|
||||||
|
See INSTALL.txt or https://geti2p.net/download for installation instructions.
|
||||||
|
|
||||||
|
Documentation:
|
||||||
|
https://geti2p.net/how
|
||||||
|
API: http://docs.i2p-projekt.de/javadoc/
|
||||||
|
or run 'ant javadoc' then start at build/javadoc/index.html
|
||||||
|
|
||||||
|
Latest release:
|
||||||
|
https://geti2p.net/download
|
||||||
|
|
||||||
|
To get development branch from source control:
|
||||||
|
https://geti2p.net/newdevelopers
|
||||||
|
|
||||||
|
FAQ:
|
||||||
|
https://geti2p.net/faq
|
||||||
|
|
||||||
|
Need help?
|
||||||
|
IRC irc.freenode.net #i2p
|
||||||
|
http://forum.i2p/
|
||||||
|
|
||||||
|
Bug reports:
|
||||||
|
https://trac.i2p2.de/report/1
|
||||||
|
|
||||||
|
Contact information, security issues, press inquiries:
|
||||||
|
https://geti2p.net/en/contact
|
||||||
|
|
||||||
|
Twitter:
|
||||||
|
@i2p, @geti2p
|
||||||
|
|
||||||
|
Licenses:
|
||||||
|
See LICENSE.txt
|
||||||
|
|
16
README.txt
@ -1,9 +1,11 @@
|
|||||||
Prerequisites to build from source:
|
Prerequisites to build from source:
|
||||||
Java SDK (preferably Oracle/Sun or OpenJDK) 1.6.0 or higher
|
Java SDK (preferably Oracle/Sun or OpenJDK) 1.7.0 or higher
|
||||||
Non-linux operating systems and JVMs: See https://trac.i2p2.de/wiki/java
|
Non-linux operating systems and JVMs: See https://trac.i2p2.de/wiki/java
|
||||||
|
Certain subsystems for embedded (core, router, mstreaming, streaming, i2ptunnel) require only Java 1.6
|
||||||
Apache Ant 1.7.0 or higher
|
Apache Ant 1.7.0 or higher
|
||||||
The xgettext, msgfmt, and msgmerge tools installed
|
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/
|
||||||
|
Build environment must use a UTF-8 locale.
|
||||||
|
|
||||||
To build:
|
To build:
|
||||||
On x86 systems do:
|
On x86 systems do:
|
||||||
@ -19,7 +21,8 @@ To build:
|
|||||||
|
|
||||||
Documentation:
|
Documentation:
|
||||||
https://geti2p.net/how
|
https://geti2p.net/how
|
||||||
API: run 'ant javadoc' then start at build/javadoc/index.html
|
API: http://docs.i2p-projekt.de/javadoc/
|
||||||
|
or run 'ant javadoc' then start at build/javadoc/index.html
|
||||||
|
|
||||||
Latest release:
|
Latest release:
|
||||||
https://geti2p.net/download
|
https://geti2p.net/download
|
||||||
@ -34,6 +37,15 @@ Need help?
|
|||||||
IRC irc.freenode.net #i2p
|
IRC irc.freenode.net #i2p
|
||||||
http://forum.i2p/
|
http://forum.i2p/
|
||||||
|
|
||||||
|
Bug reports:
|
||||||
|
https://trac.i2p2.de/report/1
|
||||||
|
|
||||||
|
Contact information, security issues, press inquiries:
|
||||||
|
https://geti2p.net/en/contact
|
||||||
|
|
||||||
|
Twitter:
|
||||||
|
@i2p, @geti2p
|
||||||
|
|
||||||
Licenses:
|
Licenses:
|
||||||
See LICENSE.txt
|
See LICENSE.txt
|
||||||
|
|
||||||
|
@ -49,7 +49,7 @@ config /etc/rc.d/rc.i2p.new
|
|||||||
config $INST_DIR/wrapper.config.new
|
config $INST_DIR/wrapper.config.new
|
||||||
|
|
||||||
if [ -e /var/log/packages/i2p-base* ]; then
|
if [ -e /var/log/packages/i2p-base* ]; then
|
||||||
echo "Warning: This package supercedes the 'i2p-base' package." >&2
|
echo "Warning: This package supersedes the 'i2p-base' package." >&2
|
||||||
echo
|
echo
|
||||||
echo "You may want to 'removepkg i2p-base'" >&2
|
echo "You may want to 'removepkg i2p-base'" >&2
|
||||||
echo "and check the contents of /etc/rc.d/rc.local*" >&2
|
echo "and check the contents of /etc/rc.d/rc.local*" >&2
|
||||||
|
13
apps/BOB/BOB.iml
Normal file
@ -0,0 +1,13 @@
|
|||||||
|
<?xml version="1.0" encoding="UTF-8"?>
|
||||||
|
<module type="JAVA_MODULE" version="4">
|
||||||
|
<component name="NewModuleRootManager" inherit-compiler-output="true">
|
||||||
|
<exclude-output />
|
||||||
|
<content url="file://$MODULE_DIR$">
|
||||||
|
<sourceFolder url="file://$MODULE_DIR$/src" isTestSource="false" />
|
||||||
|
</content>
|
||||||
|
<orderEntry type="inheritedJdk" />
|
||||||
|
<orderEntry type="sourceFolder" forTests="false" />
|
||||||
|
<orderEntry type="module" module-name="core" />
|
||||||
|
<orderEntry type="module" module-name="ministreaming" />
|
||||||
|
</component>
|
||||||
|
</module>
|
@ -66,7 +66,7 @@ public class Main {
|
|||||||
}
|
}
|
||||||
|
|
||||||
static void wrtxt(OutputStream CMDout, String s) throws IOException {
|
static void wrtxt(OutputStream CMDout, String s) throws IOException {
|
||||||
CMDout.write(s.getBytes());
|
CMDout.write(DataHelper.getUTF8(s));
|
||||||
CMDout.write('\n');
|
CMDout.write('\n');
|
||||||
CMDout.flush();
|
CMDout.flush();
|
||||||
}
|
}
|
||||||
|
@ -63,7 +63,7 @@ public class Main {
|
|||||||
}
|
}
|
||||||
|
|
||||||
static void wrtxt(OutputStream CMDout, String s) throws IOException {
|
static void wrtxt(OutputStream CMDout, String s) throws IOException {
|
||||||
CMDout.write(s.getBytes());
|
CMDout.write(DataHelper.getUTF8(s));
|
||||||
CMDout.write('\n');
|
CMDout.write('\n');
|
||||||
CMDout.flush();
|
CMDout.flush();
|
||||||
}
|
}
|
||||||
|
@ -48,8 +48,9 @@ javac.classpath=\
|
|||||||
# Space-separated list of extra javac options
|
# Space-separated list of extra javac options
|
||||||
javac.compilerargs=
|
javac.compilerargs=
|
||||||
javac.deprecation=false
|
javac.deprecation=false
|
||||||
javac.source=1.5
|
javac.version=1.7
|
||||||
javac.target=1.5
|
javac.source=${javac.version}
|
||||||
|
javac.target=${javac.version}
|
||||||
javac.test.classpath=\
|
javac.test.classpath=\
|
||||||
${javac.classpath}:\
|
${javac.classpath}:\
|
||||||
${build.classes.dir}:\
|
${build.classes.dir}:\
|
||||||
|
@ -143,6 +143,7 @@ public class BOB implements Runnable, ClientApp {
|
|||||||
* Stop BOB gracefully
|
* Stop BOB gracefully
|
||||||
* @deprecated unused
|
* @deprecated unused
|
||||||
*/
|
*/
|
||||||
|
@Deprecated
|
||||||
public synchronized static void stop() {
|
public synchronized static void stop() {
|
||||||
if (_bob != null)
|
if (_bob != null)
|
||||||
_bob.shutdown(null);
|
_bob.shutdown(null);
|
||||||
@ -164,7 +165,7 @@ public class BOB implements Runnable, ClientApp {
|
|||||||
if (classResource != null) {
|
if (classResource != null) {
|
||||||
String classPath = classResource.toString();
|
String classPath = classResource.toString();
|
||||||
if (classPath.startsWith("jar")) {
|
if (classPath.startsWith("jar")) {
|
||||||
String manifestPath = classPath.substring(0, classPath.lastIndexOf("!") + 1) +
|
String manifestPath = classPath.substring(0, classPath.lastIndexOf('!') + 1) +
|
||||||
"/META-INF/MANIFEST.MF";
|
"/META-INF/MANIFEST.MF";
|
||||||
try {
|
try {
|
||||||
Manifest manifest = new Manifest(new URL(manifestPath).openStream());
|
Manifest manifest = new Manifest(new URL(manifestPath).openStream());
|
||||||
@ -247,11 +248,11 @@ public class BOB implements Runnable, ClientApp {
|
|||||||
save = true;
|
save = true;
|
||||||
}
|
}
|
||||||
if (!props.containsKey("inbound.length")) {
|
if (!props.containsKey("inbound.length")) {
|
||||||
props.setProperty("inbound.length", "1");
|
props.setProperty("inbound.length", "3");
|
||||||
save = true;
|
save = true;
|
||||||
}
|
}
|
||||||
if (!props.containsKey("outbound.length")) {
|
if (!props.containsKey("outbound.length")) {
|
||||||
props.setProperty("outbound.length", "1");
|
props.setProperty("outbound.length", "3");
|
||||||
save = true;
|
save = true;
|
||||||
}
|
}
|
||||||
if (!props.containsKey("inbound.lengthVariance")) {
|
if (!props.containsKey("inbound.lengthVariance")) {
|
||||||
@ -338,7 +339,7 @@ public class BOB implements Runnable, ClientApp {
|
|||||||
|
|
||||||
if (g) {
|
if (g) {
|
||||||
DoCMDS conn_c = new DoCMDS(spin, lock, server, props, database, _log);
|
DoCMDS conn_c = new DoCMDS(spin, lock, server, props, database, _log);
|
||||||
Thread t = new Thread(conn_c);
|
Thread t = new I2PAppThread(conn_c);
|
||||||
t.setName("BOB.DoCMDS " + i);
|
t.setName("BOB.DoCMDS " + i);
|
||||||
t.start();
|
t.start();
|
||||||
i++;
|
i++;
|
||||||
@ -363,25 +364,30 @@ public class BOB implements Runnable, ClientApp {
|
|||||||
// We could order them to stop, but that could cause nasty issues in the locks.
|
// We could order them to stop, but that could cause nasty issues in the locks.
|
||||||
visitAllThreads();
|
visitAllThreads();
|
||||||
database.getReadLock();
|
database.getReadLock();
|
||||||
int all = database.getcount();
|
|
||||||
database.releaseReadLock();
|
|
||||||
NamedDB nickinfo;
|
NamedDB nickinfo;
|
||||||
for (i = 0; i < all; i++) {
|
try {
|
||||||
database.getReadLock();
|
for (Object ndb : database.values()) {
|
||||||
nickinfo = (NamedDB) database.getnext(i);
|
nickinfo = (NamedDB) ndb;
|
||||||
nickinfo.getReadLock();
|
nickinfo.getReadLock();
|
||||||
if (nickinfo.get(P_RUNNING).equals(Boolean.TRUE) && nickinfo.get(P_STOPPING).equals(Boolean.FALSE) && nickinfo.get(P_STARTING).equals(Boolean.FALSE)) {
|
boolean released = false;
|
||||||
nickinfo.releaseReadLock();
|
try {
|
||||||
database.releaseReadLock();
|
if (nickinfo.get(P_RUNNING).equals(Boolean.TRUE) && nickinfo.get(P_STOPPING).equals(Boolean.FALSE) && nickinfo.get(P_STARTING).equals(Boolean.FALSE)) {
|
||||||
database.getWriteLock();
|
nickinfo.releaseReadLock();
|
||||||
nickinfo.getWriteLock();
|
released = true;
|
||||||
nickinfo.add(P_STOPPING, Boolean.valueOf(true));
|
nickinfo.getWriteLock();
|
||||||
nickinfo.releaseWriteLock();
|
try {
|
||||||
database.releaseWriteLock();
|
nickinfo.add(P_STOPPING, Boolean.TRUE);
|
||||||
} else {
|
} finally {
|
||||||
nickinfo.releaseReadLock();
|
nickinfo.releaseWriteLock();
|
||||||
database.releaseReadLock();
|
}
|
||||||
|
}
|
||||||
|
} finally {
|
||||||
|
if (!released)
|
||||||
|
nickinfo.releaseReadLock();
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
} finally {
|
||||||
|
database.releaseReadLock();
|
||||||
}
|
}
|
||||||
changeState(STOPPED);
|
changeState(STOPPED);
|
||||||
_log.info("BOB is now stopped.");
|
_log.info("BOB is now stopped.");
|
||||||
|
@ -18,10 +18,12 @@ package net.i2p.BOB;
|
|||||||
import java.net.ConnectException;
|
import java.net.ConnectException;
|
||||||
import java.net.SocketTimeoutException;
|
import java.net.SocketTimeoutException;
|
||||||
import java.util.concurrent.atomic.AtomicBoolean;
|
import java.util.concurrent.atomic.AtomicBoolean;
|
||||||
|
|
||||||
import net.i2p.I2PException;
|
import net.i2p.I2PException;
|
||||||
import net.i2p.client.streaming.I2PServerSocket;
|
import net.i2p.client.streaming.I2PServerSocket;
|
||||||
import net.i2p.client.streaming.I2PSocket;
|
import net.i2p.client.streaming.I2PSocket;
|
||||||
import net.i2p.client.streaming.I2PSocketManager;
|
import net.i2p.client.streaming.I2PSocketManager;
|
||||||
|
import net.i2p.util.I2PAppThread;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Listen on I2P and connect to TCP
|
* Listen on I2P and connect to TCP
|
||||||
@ -77,7 +79,7 @@ public class I2Plistener implements Runnable {
|
|||||||
conn++;
|
conn++;
|
||||||
// toss the connection to a new thread.
|
// toss the connection to a new thread.
|
||||||
I2PtoTCP conn_c = new I2PtoTCP(sessSocket, info, database, lives);
|
I2PtoTCP conn_c = new I2PtoTCP(sessSocket, info, database, lives);
|
||||||
Thread t = new Thread(conn_c, Thread.currentThread().getName() + " I2PtoTCP " + conn);
|
Thread t = new I2PAppThread(conn_c, Thread.currentThread().getName() + " I2PtoTCP " + conn);
|
||||||
t.start();
|
t.start();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -19,7 +19,10 @@ import java.io.InputStream;
|
|||||||
import java.io.OutputStream;
|
import java.io.OutputStream;
|
||||||
import java.net.Socket;
|
import java.net.Socket;
|
||||||
import java.util.concurrent.atomic.AtomicBoolean;
|
import java.util.concurrent.atomic.AtomicBoolean;
|
||||||
|
|
||||||
import net.i2p.client.streaming.I2PSocket;
|
import net.i2p.client.streaming.I2PSocket;
|
||||||
|
import net.i2p.data.DataHelper;
|
||||||
|
import net.i2p.util.I2PAppThread;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Process I2P->TCP
|
* Process I2P->TCP
|
||||||
@ -29,9 +32,9 @@ import net.i2p.client.streaming.I2PSocket;
|
|||||||
public class I2PtoTCP implements Runnable {
|
public class I2PtoTCP implements Runnable {
|
||||||
|
|
||||||
private I2PSocket I2P;
|
private I2PSocket I2P;
|
||||||
private NamedDB info, database;
|
private final NamedDB info, database;
|
||||||
private Socket sock;
|
private Socket sock;
|
||||||
private AtomicBoolean lives;
|
private final AtomicBoolean lives;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Constructor
|
* Constructor
|
||||||
@ -53,8 +56,8 @@ public class I2PtoTCP implements Runnable {
|
|||||||
}
|
}
|
||||||
|
|
||||||
private void runlock() {
|
private void runlock() {
|
||||||
database.releaseReadLock();
|
|
||||||
info.releaseReadLock();
|
info.releaseReadLock();
|
||||||
|
database.releaseReadLock();
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@ -75,23 +78,15 @@ public class I2PtoTCP implements Runnable {
|
|||||||
die:
|
die:
|
||||||
{
|
{
|
||||||
try {
|
try {
|
||||||
try {
|
rlock();
|
||||||
rlock();
|
|
||||||
} catch (Exception e) {
|
|
||||||
break die;
|
|
||||||
}
|
|
||||||
try {
|
try {
|
||||||
host = info.get("OUTHOST").toString();
|
host = info.get("OUTHOST").toString();
|
||||||
port = Integer.parseInt(info.get("OUTPORT").toString());
|
port = Integer.parseInt(info.get("OUTPORT").toString());
|
||||||
tell = info.get("QUIET").equals(Boolean.FALSE);
|
tell = info.get("QUIET").equals(Boolean.FALSE);
|
||||||
} catch (Exception e) {
|
} catch (Exception e) {
|
||||||
runlock();
|
|
||||||
break die;
|
break die;
|
||||||
}
|
} finally {
|
||||||
try {
|
|
||||||
runlock();
|
runlock();
|
||||||
} catch (Exception e) {
|
|
||||||
break die;
|
|
||||||
}
|
}
|
||||||
sock = new Socket(host, port);
|
sock = new Socket(host, port);
|
||||||
sock.setKeepAlive(true);
|
sock.setKeepAlive(true);
|
||||||
@ -104,15 +99,15 @@ public class I2PtoTCP implements Runnable {
|
|||||||
|
|
||||||
if (tell) {
|
if (tell) {
|
||||||
// tell who is connecting
|
// tell who is connecting
|
||||||
out.write(I2P.getPeerDestination().toBase64().getBytes());
|
out.write(DataHelper.getASCII(I2P.getPeerDestination().toBase64()));
|
||||||
out.write(10); // nl
|
out.write(10); // nl
|
||||||
out.flush(); // not really needed, but...
|
out.flush(); // not really needed, but...
|
||||||
}
|
}
|
||||||
// setup to cross the streams
|
// setup to cross the streams
|
||||||
TCPio conn_c = new TCPio(in, Iout, lives); // app -> I2P
|
TCPio conn_c = new TCPio(in, Iout, lives); // app -> I2P
|
||||||
TCPio conn_a = new TCPio(Iin, out, lives); // I2P -> app
|
TCPio conn_a = new TCPio(Iin, out, lives); // I2P -> app
|
||||||
t = new Thread(conn_c, Thread.currentThread().getName() + " TCPioA");
|
t = new I2PAppThread(conn_c, Thread.currentThread().getName() + " TCPioA");
|
||||||
q = new Thread(conn_a, Thread.currentThread().getName() + " TCPioB");
|
q = new I2PAppThread(conn_a, Thread.currentThread().getName() + " TCPioB");
|
||||||
// Fire!
|
// Fire!
|
||||||
t.start();
|
t.start();
|
||||||
q.start();
|
q.start();
|
||||||
|
@ -21,11 +21,13 @@ import java.net.InetAddress;
|
|||||||
import java.net.ServerSocket;
|
import java.net.ServerSocket;
|
||||||
import java.util.Properties;
|
import java.util.Properties;
|
||||||
import java.util.concurrent.atomic.AtomicBoolean;
|
import java.util.concurrent.atomic.AtomicBoolean;
|
||||||
|
|
||||||
import net.i2p.I2PException;
|
import net.i2p.I2PException;
|
||||||
import net.i2p.client.I2PClient;
|
import net.i2p.client.I2PClient;
|
||||||
import net.i2p.client.streaming.I2PServerSocket;
|
import net.i2p.client.streaming.I2PServerSocket;
|
||||||
import net.i2p.client.streaming.I2PSocketManager;
|
import net.i2p.client.streaming.I2PSocketManager;
|
||||||
import net.i2p.client.streaming.I2PSocketManagerFactory;
|
import net.i2p.client.streaming.I2PSocketManagerFactory;
|
||||||
|
import net.i2p.util.I2PAppThread;
|
||||||
import net.i2p.util.Log;
|
import net.i2p.util.Log;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@ -36,18 +38,18 @@ import net.i2p.util.Log;
|
|||||||
*/
|
*/
|
||||||
public class MUXlisten implements Runnable {
|
public class MUXlisten implements Runnable {
|
||||||
|
|
||||||
private NamedDB database, info;
|
private final NamedDB database, info;
|
||||||
private Logger _log;
|
private final Logger _log;
|
||||||
private I2PSocketManager socketManager;
|
private final I2PSocketManager socketManager;
|
||||||
private ByteArrayInputStream prikey;
|
private final ByteArrayInputStream prikey;
|
||||||
private ThreadGroup tg;
|
private ThreadGroup tg;
|
||||||
private String N;
|
private final String N;
|
||||||
private ServerSocket listener = null;
|
private ServerSocket listener;
|
||||||
private int backlog = 50; // should this be more? less?
|
private final int backlog = 50; // should this be more? less?
|
||||||
boolean go_out;
|
private final boolean go_out;
|
||||||
boolean come_in;
|
private final boolean come_in;
|
||||||
private AtomicBoolean lock;
|
private final AtomicBoolean lock;
|
||||||
private AtomicBoolean lives;
|
private final AtomicBoolean lives;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Constructor Will fail if INPORT is occupied.
|
* Constructor Will fail if INPORT is occupied.
|
||||||
@ -59,43 +61,39 @@ public class MUXlisten implements Runnable {
|
|||||||
* @throws java.io.IOException
|
* @throws java.io.IOException
|
||||||
*/
|
*/
|
||||||
MUXlisten(AtomicBoolean lock, NamedDB database, NamedDB info, Logger _log) throws I2PException, IOException, RuntimeException {
|
MUXlisten(AtomicBoolean lock, NamedDB database, NamedDB info, Logger _log) throws I2PException, IOException, RuntimeException {
|
||||||
|
int port = 0;
|
||||||
|
InetAddress host = null;
|
||||||
|
this.lock = lock;
|
||||||
|
this.tg = null;
|
||||||
|
this.database = database;
|
||||||
|
this.info = info;
|
||||||
|
this._log = _log;
|
||||||
|
lives = new AtomicBoolean(false);
|
||||||
try {
|
try {
|
||||||
int port = 0;
|
wlock();
|
||||||
InetAddress host = null;
|
try {
|
||||||
this.lock = lock;
|
this.info.add("STARTING", Boolean.TRUE);
|
||||||
this.tg = null;
|
} finally {
|
||||||
this.database = database;
|
wunlock();
|
||||||
this.info = info;
|
}
|
||||||
this._log = _log;
|
Properties Q = new Properties();
|
||||||
lives = new AtomicBoolean(false);
|
rlock();
|
||||||
|
try {
|
||||||
this.database.getWriteLock();
|
N = this.info.get("NICKNAME").toString();
|
||||||
this.info.getWriteLock();
|
prikey = new ByteArrayInputStream((byte[]) info.get("KEYS"));
|
||||||
this.info.add("STARTING", Boolean.valueOf(true));
|
// Make a new copy so that anything else won't muck with our database.
|
||||||
this.info.releaseWriteLock();
|
Properties R = (Properties) info.get("PROPERTIES");
|
||||||
this.database.releaseWriteLock();
|
Lifted.copyProperties(R, Q);
|
||||||
this.database.getReadLock();
|
|
||||||
this.info.getReadLock();
|
this.go_out = info.exists("OUTPORT");
|
||||||
|
this.come_in = info.exists("INPORT");
|
||||||
N = this.info.get("NICKNAME").toString();
|
if (this.come_in) {
|
||||||
prikey = new ByteArrayInputStream((byte[]) info.get("KEYS"));
|
port = Integer.parseInt(info.get("INPORT").toString());
|
||||||
// Make a new copy so that anything else won't muck with our database.
|
host = InetAddress.getByName(info.get("INHOST").toString());
|
||||||
Properties R = (Properties) info.get("PROPERTIES");
|
}
|
||||||
Properties Q = new Properties();
|
} finally {
|
||||||
Lifted.copyProperties(R, Q);
|
runlock();
|
||||||
this.database.releaseReadLock();
|
|
||||||
this.info.releaseReadLock();
|
|
||||||
|
|
||||||
this.database.getReadLock();
|
|
||||||
this.info.getReadLock();
|
|
||||||
this.go_out = info.exists("OUTPORT");
|
|
||||||
this.come_in = info.exists("INPORT");
|
|
||||||
if (this.come_in) {
|
|
||||||
port = Integer.parseInt(info.get("INPORT").toString());
|
|
||||||
host = InetAddress.getByName(info.get("INHOST").toString());
|
|
||||||
}
|
}
|
||||||
this.database.releaseReadLock();
|
|
||||||
this.info.releaseReadLock();
|
|
||||||
|
|
||||||
String i2cpHost = Q.getProperty(I2PClient.PROP_TCP_HOST, "127.0.0.1");
|
String i2cpHost = Q.getProperty(I2PClient.PROP_TCP_HOST, "127.0.0.1");
|
||||||
int i2cpPort = 7654;
|
int i2cpPort = 7654;
|
||||||
@ -113,48 +111,51 @@ public class MUXlisten implements Runnable {
|
|||||||
prikey, i2cpHost, i2cpPort, Q);
|
prikey, i2cpHost, i2cpPort, Q);
|
||||||
} catch (IOException e) {
|
} catch (IOException e) {
|
||||||
// Something went bad.
|
// Something went bad.
|
||||||
this.database.getWriteLock();
|
wlock();
|
||||||
this.info.getWriteLock();
|
try {
|
||||||
this.info.add("STARTING", Boolean.valueOf(false));
|
this.info.add("STARTING", Boolean.FALSE);
|
||||||
this.info.releaseWriteLock();
|
} finally {
|
||||||
this.database.releaseWriteLock();
|
wunlock();
|
||||||
throw new IOException(e.toString());
|
}
|
||||||
|
throw e;
|
||||||
} catch (RuntimeException e) {
|
} catch (RuntimeException e) {
|
||||||
// Something went bad.
|
// Something went bad.
|
||||||
this.database.getWriteLock();
|
wlock();
|
||||||
this.info.getWriteLock();
|
try {
|
||||||
this.info.add("STARTING", Boolean.valueOf(false));
|
this.info.add("STARTING", Boolean.FALSE);
|
||||||
this.info.releaseWriteLock();
|
} finally {
|
||||||
this.database.releaseWriteLock();
|
wunlock();
|
||||||
throw new RuntimeException(e);
|
}
|
||||||
|
throw e;
|
||||||
} catch (Exception e) {
|
} catch (Exception e) {
|
||||||
// Something else went bad.
|
// Something else went bad.
|
||||||
this.database.getWriteLock();
|
wlock();
|
||||||
this.info.getWriteLock();
|
try {
|
||||||
this.info.add("STARTING", Boolean.valueOf(false));
|
this.info.add("STARTING", Boolean.FALSE);
|
||||||
this.info.releaseWriteLock();
|
} finally {
|
||||||
this.database.releaseWriteLock();
|
wunlock();
|
||||||
|
}
|
||||||
e.printStackTrace();
|
e.printStackTrace();
|
||||||
throw new RuntimeException(e);
|
throw new RuntimeException(e);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
private void rlock() throws Exception {
|
private void rlock() {
|
||||||
database.getReadLock();
|
database.getReadLock();
|
||||||
info.getReadLock();
|
info.getReadLock();
|
||||||
}
|
}
|
||||||
|
|
||||||
private void runlock() throws Exception {
|
private void runlock() {
|
||||||
database.releaseReadLock();
|
|
||||||
info.releaseReadLock();
|
info.releaseReadLock();
|
||||||
|
database.releaseReadLock();
|
||||||
}
|
}
|
||||||
|
|
||||||
private void wlock() throws Exception {
|
private void wlock() {
|
||||||
database.getWriteLock();
|
database.getWriteLock();
|
||||||
info.getWriteLock();
|
info.getWriteLock();
|
||||||
}
|
}
|
||||||
|
|
||||||
private void wunlock() throws Exception {
|
private void wunlock() {
|
||||||
info.releaseWriteLock();
|
info.releaseWriteLock();
|
||||||
database.releaseWriteLock();
|
database.releaseWriteLock();
|
||||||
}
|
}
|
||||||
@ -168,24 +169,19 @@ public class MUXlisten implements Runnable {
|
|||||||
Thread t = null;
|
Thread t = null;
|
||||||
Thread q = null;
|
Thread q = null;
|
||||||
try {
|
try {
|
||||||
|
wlock();
|
||||||
try {
|
try {
|
||||||
wlock();
|
|
||||||
try {
|
try {
|
||||||
info.add("RUNNING", Boolean.valueOf(true));
|
info.add("RUNNING", Boolean.TRUE);
|
||||||
} catch (Exception e) {
|
} catch (Exception e) {
|
||||||
lock.set(false);
|
lock.set(false);
|
||||||
wunlock();
|
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
} catch (Exception e) {
|
} catch (Exception e) {
|
||||||
lock.set(false);
|
lock.set(false);
|
||||||
return;
|
return;
|
||||||
}
|
} finally {
|
||||||
try {
|
|
||||||
wunlock();
|
wunlock();
|
||||||
} catch (Exception e) {
|
|
||||||
lock.set(false);
|
|
||||||
return;
|
|
||||||
}
|
}
|
||||||
lives.set(true);
|
lives.set(true);
|
||||||
lock.set(false);
|
lock.set(false);
|
||||||
@ -201,32 +197,28 @@ public class MUXlisten implements Runnable {
|
|||||||
// I2P -> TCP
|
// I2P -> TCP
|
||||||
SS = socketManager.getServerSocket();
|
SS = socketManager.getServerSocket();
|
||||||
I2Plistener conn = new I2Plistener(SS, socketManager, info, database, _log, lives);
|
I2Plistener conn = new I2Plistener(SS, socketManager, info, database, _log, lives);
|
||||||
t = new Thread(tg, conn, "BOBI2Plistener " + N);
|
t = new I2PAppThread(tg, conn, "BOBI2Plistener " + N);
|
||||||
t.start();
|
t.start();
|
||||||
}
|
}
|
||||||
|
|
||||||
if (come_in) {
|
if (come_in) {
|
||||||
// TCP -> I2P
|
// TCP -> I2P
|
||||||
TCPlistener conn = new TCPlistener(listener, socketManager, info, database, _log, lives);
|
TCPlistener conn = new TCPlistener(listener, socketManager, info, database, _log, lives);
|
||||||
q = new Thread(tg, conn, "BOBTCPlistener " + N);
|
q = new I2PAppThread(tg, conn, "BOBTCPlistener " + N);
|
||||||
q.start();
|
q.start();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
wlock();
|
||||||
try {
|
try {
|
||||||
wlock();
|
|
||||||
try {
|
try {
|
||||||
info.add("STARTING", Boolean.valueOf(false));
|
info.add("STARTING", Boolean.FALSE);
|
||||||
} catch (Exception e) {
|
} catch (Exception e) {
|
||||||
wunlock();
|
|
||||||
break quit;
|
break quit;
|
||||||
}
|
}
|
||||||
} catch (Exception e) {
|
} catch (Exception e) {
|
||||||
break quit;
|
break quit;
|
||||||
}
|
} finally {
|
||||||
try {
|
|
||||||
wunlock();
|
wunlock();
|
||||||
} catch (Exception e) {
|
|
||||||
break quit;
|
|
||||||
}
|
}
|
||||||
boolean spin = true;
|
boolean spin = true;
|
||||||
while (spin && lives.get()) {
|
while (spin && lives.get()) {
|
||||||
@ -235,21 +227,17 @@ public class MUXlisten implements Runnable {
|
|||||||
} catch (InterruptedException e) {
|
} catch (InterruptedException e) {
|
||||||
break quit;
|
break quit;
|
||||||
}
|
}
|
||||||
|
rlock();
|
||||||
try {
|
try {
|
||||||
rlock();
|
|
||||||
try {
|
try {
|
||||||
spin = info.get("STOPPING").equals(Boolean.FALSE);
|
spin = info.get("STOPPING").equals(Boolean.FALSE);
|
||||||
} catch (Exception e) {
|
} catch (Exception e) {
|
||||||
runlock();
|
|
||||||
break quit;
|
break quit;
|
||||||
}
|
}
|
||||||
} catch (Exception e) {
|
} catch (Exception e) {
|
||||||
break quit;
|
break quit;
|
||||||
}
|
} finally {
|
||||||
try {
|
|
||||||
runlock();
|
runlock();
|
||||||
} catch (Exception e) {
|
|
||||||
break quit;
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
} // die
|
} // die
|
||||||
@ -269,16 +257,16 @@ public class MUXlisten implements Runnable {
|
|||||||
try {
|
try {
|
||||||
wlock();
|
wlock();
|
||||||
try {
|
try {
|
||||||
info.add("STARTING", Boolean.valueOf(false));
|
info.add("STARTING", Boolean.FALSE);
|
||||||
info.add("STOPPING", Boolean.valueOf(true));
|
info.add("STOPPING", Boolean.TRUE);
|
||||||
info.add("RUNNING", Boolean.valueOf(false));
|
info.add("RUNNING", Boolean.FALSE);
|
||||||
} catch (Exception e) {
|
} catch (Exception e) {
|
||||||
lock.set(false);
|
lock.set(false);
|
||||||
wunlock();
|
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
wunlock();
|
|
||||||
} catch (Exception e) {
|
} catch (Exception e) {
|
||||||
|
} finally {
|
||||||
|
wunlock();
|
||||||
}
|
}
|
||||||
// Start cleanup.
|
// Start cleanup.
|
||||||
while (!lock.compareAndSet(false, true)) {
|
while (!lock.compareAndSet(false, true)) {
|
||||||
@ -320,15 +308,15 @@ public class MUXlisten implements Runnable {
|
|||||||
try {
|
try {
|
||||||
wlock();
|
wlock();
|
||||||
try {
|
try {
|
||||||
info.add("STARTING", Boolean.valueOf(false));
|
info.add("STARTING", Boolean.FALSE);
|
||||||
info.add("STOPPING", Boolean.valueOf(false));
|
info.add("STOPPING", Boolean.FALSE);
|
||||||
info.add("RUNNING", Boolean.valueOf(false));
|
info.add("RUNNING", Boolean.FALSE);
|
||||||
} catch (Exception e) {
|
} catch (Exception e) {
|
||||||
lock.set(false);
|
lock.set(false);
|
||||||
wunlock();
|
|
||||||
return;
|
return;
|
||||||
}
|
} finally {
|
||||||
wunlock();
|
wunlock();
|
||||||
|
}
|
||||||
} catch (Exception e) {
|
} catch (Exception e) {
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -15,6 +15,12 @@
|
|||||||
*/
|
*/
|
||||||
package net.i2p.BOB;
|
package net.i2p.BOB;
|
||||||
|
|
||||||
|
import java.util.Collection;
|
||||||
|
import java.util.HashMap;
|
||||||
|
import java.util.Map;
|
||||||
|
import java.util.concurrent.locks.ReentrantReadWriteLock;
|
||||||
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Internal database to relate nicknames to options to values
|
* Internal database to relate nicknames to options to values
|
||||||
*
|
*
|
||||||
@ -22,129 +28,62 @@ package net.i2p.BOB;
|
|||||||
*/
|
*/
|
||||||
public class NamedDB {
|
public class NamedDB {
|
||||||
|
|
||||||
private volatile Object[][] data;
|
private final Map<String, Object> data;
|
||||||
private int index, writersWaiting, readers;
|
private final ReentrantReadWriteLock lock = new ReentrantReadWriteLock(false);
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* make initial NULL object
|
|
||||||
*
|
*
|
||||||
*/
|
*/
|
||||||
public NamedDB() {
|
public NamedDB() {
|
||||||
this.data = new Object[1][2];
|
this.data = new HashMap<String, Object>();
|
||||||
}
|
}
|
||||||
|
|
||||||
synchronized public void getReadLock() {
|
public void getReadLock() {
|
||||||
while ((writersWaiting != 0)) {
|
lock.readLock().lock();
|
||||||
try {
|
|
||||||
wait();
|
|
||||||
} catch (InterruptedException ie) {
|
|
||||||
}
|
|
||||||
}
|
|
||||||
readers++;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
synchronized public void releaseReadLock() {
|
public void releaseReadLock() {
|
||||||
readers--;
|
lock.readLock().unlock();
|
||||||
notifyAll();
|
|
||||||
}
|
}
|
||||||
|
|
||||||
synchronized public void getWriteLock() {
|
public void getWriteLock() {
|
||||||
writersWaiting++;
|
lock.writeLock().lock();
|
||||||
while (readers != 0 && writersWaiting != 1) {
|
|
||||||
try {
|
|
||||||
wait();
|
|
||||||
} catch (InterruptedException ie) {
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
synchronized public void releaseWriteLock() {
|
public void releaseWriteLock() {
|
||||||
writersWaiting--;
|
lock.writeLock().unlock();
|
||||||
notifyAll();
|
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Find objects in the array, returns its index or throws exception
|
* Delete an object if it exists
|
||||||
* @param key
|
|
||||||
* @return an objects index
|
|
||||||
* @throws ArrayIndexOutOfBoundsException when key does not exist
|
|
||||||
*/
|
|
||||||
public int idx(Object key) throws ArrayIndexOutOfBoundsException {
|
|
||||||
for (int i = 0; i < index; i++) {
|
|
||||||
if (key.equals(data[i][0])) {
|
|
||||||
return i;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
throw new ArrayIndexOutOfBoundsException("Can't locate key for index");
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Delete an object from array if it exists
|
|
||||||
*
|
*
|
||||||
* @param key
|
* @param key
|
||||||
*/
|
*/
|
||||||
public void kill(Object key) {
|
public void kill(String key) {
|
||||||
|
data.remove(key);
|
||||||
int i, j, k, l;
|
|
||||||
Object[][] olddata;
|
|
||||||
int didsomething = 0;
|
|
||||||
|
|
||||||
try {
|
|
||||||
k = idx(key);
|
|
||||||
} catch (ArrayIndexOutOfBoundsException b) {
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
olddata = new Object[index + 2][2];
|
|
||||||
// copy to olddata, skipping 'k'
|
|
||||||
for (i = 0, l = 0; l < index; i++, l++) {
|
|
||||||
if (i == k) {
|
|
||||||
l++;
|
|
||||||
didsomething++;
|
|
||||||
}
|
|
||||||
for (j = 0; j < 2; j++) {
|
|
||||||
olddata[i][j] = data[l][j];
|
|
||||||
}
|
|
||||||
}
|
|
||||||
index -= didsomething;
|
|
||||||
data = olddata;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Add object to the array, deletes the old one if it exists
|
* Add object, deletes the old one if it exists
|
||||||
*
|
*
|
||||||
* @param key
|
* @param key
|
||||||
* @param val
|
* @param val
|
||||||
*/
|
*/
|
||||||
public void add(Object key, Object val) {
|
public void add(String key, Object val) {
|
||||||
Object[][] olddata;
|
data.put(key, val);
|
||||||
int i, j;
|
|
||||||
i = 0;
|
|
||||||
kill(key);
|
|
||||||
|
|
||||||
olddata = new Object[index + 2][2];
|
|
||||||
// copy to olddata
|
|
||||||
for (i = 0; i < index; i++) {
|
|
||||||
for (j = 0; j < 2; j++) {
|
|
||||||
olddata[i][j] = data[i][j];
|
|
||||||
}
|
|
||||||
}
|
|
||||||
data = olddata;
|
|
||||||
data[index++] = new Object[]{key, val};
|
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Get the object, and return it, throws RuntimeException
|
* Get the object, and return it, throws RuntimeException if not found
|
||||||
*
|
*
|
||||||
* @param key
|
* @param key non-null
|
||||||
* @return Object
|
* @return Object non-null
|
||||||
* @throws java.lang.RuntimeException
|
* @throws java.lang.RuntimeException if not found
|
||||||
*/
|
*/
|
||||||
public Object get(Object key) throws RuntimeException {
|
public Object get(String key) throws RuntimeException {
|
||||||
for (int i = 0; i < index; i++) {
|
Object rv = data.get(key);
|
||||||
if (key.equals(data[i][0])) {
|
if (rv != null)
|
||||||
return data[i][1];
|
return rv;
|
||||||
}
|
|
||||||
}
|
|
||||||
throw new RuntimeException("Key not found");
|
throw new RuntimeException("Key not found");
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -154,33 +93,14 @@ public class NamedDB {
|
|||||||
* @param key
|
* @param key
|
||||||
* @return true if an object exists, else returns false
|
* @return true if an object exists, else returns false
|
||||||
*/
|
*/
|
||||||
public boolean exists(Object key) {
|
public boolean exists(String key) {
|
||||||
for (int i = 0; i < index; i++) {
|
return data.containsKey(key);
|
||||||
if (key.equals(data[i][0])) {
|
|
||||||
return true;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
return false;
|
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
*
|
* @since 0.9.29 replaces getcount() and getnext(int)
|
||||||
* @param i index
|
|
||||||
* @return an indexed Object
|
|
||||||
* @throws java.lang.RuntimeException
|
|
||||||
*/
|
*/
|
||||||
public Object getnext(int i) throws RuntimeException {
|
public Collection<Object> values() {
|
||||||
if (i < index && i > -1) {
|
return data.values();
|
||||||
return data[i][1];
|
|
||||||
}
|
|
||||||
throw new RuntimeException("No more data");
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
* @return the count of how many objects
|
|
||||||
*/
|
|
||||||
public int getcount() {
|
|
||||||
return index;
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -27,9 +27,9 @@ import java.util.concurrent.atomic.AtomicBoolean;
|
|||||||
*/
|
*/
|
||||||
public class TCPio implements Runnable {
|
public class TCPio implements Runnable {
|
||||||
|
|
||||||
private InputStream Ain;
|
private final InputStream Ain;
|
||||||
private OutputStream Aout;
|
private final OutputStream Aout;
|
||||||
private AtomicBoolean lives;
|
private final AtomicBoolean lives;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Constructor
|
* Constructor
|
||||||
|
@ -20,8 +20,10 @@ import java.net.ServerSocket;
|
|||||||
import java.net.Socket;
|
import java.net.Socket;
|
||||||
import java.net.SocketTimeoutException;
|
import java.net.SocketTimeoutException;
|
||||||
import java.util.concurrent.atomic.AtomicBoolean;
|
import java.util.concurrent.atomic.AtomicBoolean;
|
||||||
|
|
||||||
import net.i2p.client.streaming.I2PServerSocket;
|
import net.i2p.client.streaming.I2PServerSocket;
|
||||||
import net.i2p.client.streaming.I2PSocketManager;
|
import net.i2p.client.streaming.I2PSocketManager;
|
||||||
|
import net.i2p.util.I2PAppThread;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Listen on TCP port and connect to I2P
|
* Listen on TCP port and connect to I2P
|
||||||
@ -75,7 +77,7 @@ public class TCPlistener implements Runnable {
|
|||||||
conn++;
|
conn++;
|
||||||
// toss the connection to a new thread.
|
// toss the connection to a new thread.
|
||||||
TCPtoI2P conn_c = new TCPtoI2P(socketManager, server, info, database, lives);
|
TCPtoI2P conn_c = new TCPtoI2P(socketManager, server, info, database, lives);
|
||||||
Thread t = new Thread(conn_c, Thread.currentThread().getName() + " TCPtoI2P " + conn);
|
Thread t = new I2PAppThread(conn_c, Thread.currentThread().getName() + " TCPtoI2P " + conn);
|
||||||
t.start();
|
t.start();
|
||||||
g = false;
|
g = false;
|
||||||
}
|
}
|
||||||
|
@ -24,13 +24,14 @@ import java.net.NoRouteToHostException;
|
|||||||
import java.net.Socket;
|
import java.net.Socket;
|
||||||
import java.util.Locale;
|
import java.util.Locale;
|
||||||
import java.util.concurrent.atomic.AtomicBoolean;
|
import java.util.concurrent.atomic.AtomicBoolean;
|
||||||
|
|
||||||
|
import net.i2p.I2PAppContext;
|
||||||
import net.i2p.I2PException;
|
import net.i2p.I2PException;
|
||||||
import net.i2p.client.streaming.I2PSocket;
|
import net.i2p.client.streaming.I2PSocket;
|
||||||
import net.i2p.client.streaming.I2PSocketManager;
|
import net.i2p.client.streaming.I2PSocketManager;
|
||||||
import net.i2p.data.DataFormatException;
|
import net.i2p.data.DataFormatException;
|
||||||
import net.i2p.data.Destination;
|
import net.i2p.data.Destination;
|
||||||
//import net.i2p.i2ptunnel.I2PTunnel;
|
import net.i2p.util.I2PAppThread;
|
||||||
import net.i2p.I2PAppContext;
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
*
|
*
|
||||||
@ -41,22 +42,19 @@ import net.i2p.I2PAppContext;
|
|||||||
public class TCPtoI2P implements Runnable {
|
public class TCPtoI2P implements Runnable {
|
||||||
|
|
||||||
private I2PSocket I2P;
|
private I2PSocket I2P;
|
||||||
private NamedDB info, database;
|
private final Socket sock;
|
||||||
private Socket sock;
|
private final I2PSocketManager socketManager;
|
||||||
private I2PSocketManager socketManager;
|
private final AtomicBoolean lives;
|
||||||
private AtomicBoolean lives;
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Constructor
|
* Constructor
|
||||||
* @param i2p
|
* @param i2p
|
||||||
* @param socket
|
* @param socket
|
||||||
* param info
|
* @param info unused
|
||||||
* param database
|
* @param database unused
|
||||||
*/
|
*/
|
||||||
TCPtoI2P(I2PSocketManager i2p, Socket socket, NamedDB info, NamedDB database, AtomicBoolean lives) {
|
TCPtoI2P(I2PSocketManager i2p, Socket socket, NamedDB info, NamedDB database, AtomicBoolean lives) {
|
||||||
this.sock = socket;
|
this.sock = socket;
|
||||||
this.info = info;
|
|
||||||
this.database = database;
|
|
||||||
this.socketManager = i2p;
|
this.socketManager = i2p;
|
||||||
this.lives = lives;
|
this.lives = lives;
|
||||||
}
|
}
|
||||||
@ -105,16 +103,6 @@ public class TCPtoI2P implements Runnable {
|
|||||||
out.flush();
|
out.flush();
|
||||||
}
|
}
|
||||||
|
|
||||||
private void rlock() {
|
|
||||||
database.getReadLock();
|
|
||||||
info.getReadLock();
|
|
||||||
}
|
|
||||||
|
|
||||||
private void runlock() {
|
|
||||||
info.releaseReadLock();
|
|
||||||
database.releaseReadLock();
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* TCP stream to I2P stream thread starter
|
* TCP stream to I2P stream thread starter
|
||||||
*
|
*
|
||||||
@ -158,8 +146,8 @@ public class TCPtoI2P implements Runnable {
|
|||||||
// setup to cross the streams
|
// setup to cross the streams
|
||||||
TCPio conn_c = new TCPio(in, Iout, lives); // app -> I2P
|
TCPio conn_c = new TCPio(in, Iout, lives); // app -> I2P
|
||||||
TCPio conn_a = new TCPio(Iin, out, lives); // I2P -> app
|
TCPio conn_a = new TCPio(Iin, out, lives); // I2P -> app
|
||||||
t = new Thread(conn_c, Thread.currentThread().getName() + " TCPioA");
|
t = new I2PAppThread(conn_c, Thread.currentThread().getName() + " TCPioA");
|
||||||
q = new Thread(conn_a, Thread.currentThread().getName() + " TCPioB");
|
q = new I2PAppThread(conn_a, Thread.currentThread().getName() + " TCPioB");
|
||||||
// Fire!
|
// Fire!
|
||||||
t.start();
|
t.start();
|
||||||
q.start();
|
q.start();
|
||||||
|
@ -36,6 +36,7 @@ import net.i2p.util.Log;
|
|||||||
* @author sponge
|
* @author sponge
|
||||||
* @deprecated incomplete, unused
|
* @deprecated incomplete, unused
|
||||||
*/
|
*/
|
||||||
|
@Deprecated
|
||||||
public class UDPIOthread implements I2PSessionListener, Runnable {
|
public class UDPIOthread implements I2PSessionListener, Runnable {
|
||||||
|
|
||||||
private final NamedDB info;
|
private final NamedDB info;
|
||||||
|
25
apps/addressbook/addressbook.iml
Normal file
@ -0,0 +1,25 @@
|
|||||||
|
<?xml version="1.0" encoding="UTF-8"?>
|
||||||
|
<module type="JAVA_MODULE" version="4">
|
||||||
|
<component name="FacetManager">
|
||||||
|
<facet type="web" name="Web">
|
||||||
|
<configuration>
|
||||||
|
<descriptors>
|
||||||
|
<deploymentDescriptor name="web.xml" url="file://$MODULE_DIR$/web.xml" />
|
||||||
|
</descriptors>
|
||||||
|
<webroots>
|
||||||
|
<root url="file://$MODULE_DIR$" relative="/WEB-INF" />
|
||||||
|
</webroots>
|
||||||
|
</configuration>
|
||||||
|
</facet>
|
||||||
|
</component>
|
||||||
|
<component name="NewModuleRootManager" inherit-compiler-output="true">
|
||||||
|
<exclude-output />
|
||||||
|
<content url="file://$MODULE_DIR$">
|
||||||
|
<sourceFolder url="file://$MODULE_DIR$/java/src" isTestSource="false" />
|
||||||
|
</content>
|
||||||
|
<orderEntry type="inheritedJdk" />
|
||||||
|
<orderEntry type="sourceFolder" forTests="false" />
|
||||||
|
<orderEntry type="library" name="jettylib" level="project" />
|
||||||
|
<orderEntry type="module" module-name="core" />
|
||||||
|
</component>
|
||||||
|
</module>
|
@ -7,7 +7,7 @@
|
|||||||
<property name="jar" value="addressbook.jar"/>
|
<property name="jar" value="addressbook.jar"/>
|
||||||
<property name="war" value="addressbook.war"/>
|
<property name="war" value="addressbook.war"/>
|
||||||
<property name="javac.compilerargs" value="" />
|
<property name="javac.compilerargs" value="" />
|
||||||
<property name="javac.version" value="1.6" />
|
<property name="javac.version" value="1.7" />
|
||||||
|
|
||||||
<target name="init">
|
<target name="init">
|
||||||
<mkdir dir="${build}"/>
|
<mkdir dir="${build}"/>
|
||||||
@ -77,15 +77,17 @@
|
|||||||
<!-- unused for now (except for Android), as we oddly ship addressbook as a .war -->
|
<!-- unused for now (except for Android), as we oddly ship addressbook as a .war -->
|
||||||
<target name="jar" depends="compile, changes">
|
<target name="jar" depends="compile, changes">
|
||||||
<!-- set if unset -->
|
<!-- set if unset -->
|
||||||
<property name="workspace.changes" value="" />
|
<property name="workspace.changes.tr" value="" />
|
||||||
<jar basedir="${build}" destfile="${dist}/${jar}">
|
<jar basedir="${build}" destfile="${dist}/${jar}">
|
||||||
<manifest>
|
<manifest>
|
||||||
<attribute name="Main-Class" value="addressbook.Daemon"/>
|
<attribute name="Main-Class" value="net.i2p.addressbook.Daemon"/>
|
||||||
<attribute name="Implementation-Version" value="${full.version}" />
|
<attribute name="Implementation-Version" value="${full.version}" />
|
||||||
<attribute name="Built-By" value="${build.built-by}" />
|
<attribute name="Built-By" value="${build.built-by}" />
|
||||||
<attribute name="Build-Date" value="${build.timestamp}" />
|
<attribute name="Build-Date" value="${build.timestamp}" />
|
||||||
<attribute name="Base-Revision" value="${workspace.version}" />
|
<attribute name="Base-Revision" value="${workspace.version}" />
|
||||||
<attribute name="Workspace-Changes" value="${workspace.changes}" />
|
<attribute name="Workspace-Changes" value="${workspace.changes.tr}" />
|
||||||
|
<attribute name="X-Compile-Source-JDK" value="${javac.version}" />
|
||||||
|
<attribute name="X-Compile-Target-JDK" value="${javac.version}" />
|
||||||
</manifest>
|
</manifest>
|
||||||
</jar>
|
</jar>
|
||||||
</target>
|
</target>
|
||||||
@ -106,6 +108,8 @@
|
|||||||
<attribute name="Build-Date" value="${build.timestamp}" />
|
<attribute name="Build-Date" value="${build.timestamp}" />
|
||||||
<attribute name="Base-Revision" value="${workspace.version}" />
|
<attribute name="Base-Revision" value="${workspace.version}" />
|
||||||
<attribute name="Workspace-Changes" value="${workspace.changes.tr}" />
|
<attribute name="Workspace-Changes" value="${workspace.changes.tr}" />
|
||||||
|
<attribute name="X-Compile-Source-JDK" value="${javac.version}" />
|
||||||
|
<attribute name="X-Compile-Target-JDK" value="${javac.version}" />
|
||||||
</manifest>
|
</manifest>
|
||||||
</war>
|
</war>
|
||||||
<delete dir="${dist}/tmp"/>
|
<delete dir="${dist}/tmp"/>
|
||||||
|
@ -27,8 +27,10 @@ import java.util.Collections;
|
|||||||
import java.util.HashMap;
|
import java.util.HashMap;
|
||||||
import java.util.Iterator;
|
import java.util.Iterator;
|
||||||
import java.util.Map;
|
import java.util.Map;
|
||||||
|
import java.util.regex.Pattern;
|
||||||
|
|
||||||
import net.i2p.I2PAppContext;
|
import net.i2p.I2PAppContext;
|
||||||
|
import net.i2p.client.naming.HostTxtEntry;
|
||||||
import net.i2p.util.EepGet;
|
import net.i2p.util.EepGet;
|
||||||
import net.i2p.util.SecureFile;
|
import net.i2p.util.SecureFile;
|
||||||
|
|
||||||
@ -37,18 +39,40 @@ import net.i2p.util.SecureFile;
|
|||||||
* destinations. AddressBooks can be created from local and remote files, merged
|
* destinations. AddressBooks can be created from local and remote files, merged
|
||||||
* together, and written out to local files.
|
* together, and written out to local files.
|
||||||
*
|
*
|
||||||
|
* Methods are NOT thread-safe.
|
||||||
|
*
|
||||||
* @author Ragnarok
|
* @author Ragnarok
|
||||||
*
|
*
|
||||||
*/
|
*/
|
||||||
class AddressBook {
|
class AddressBook implements Iterable<Map.Entry<String, HostTxtEntry>> {
|
||||||
|
|
||||||
private final String location;
|
private final String location;
|
||||||
/** either addresses or subFile will be non-null, but not both */
|
/** either addresses or subFile will be non-null, but not both */
|
||||||
private final Map<String, String> addresses;
|
private final Map<String, HostTxtEntry> addresses;
|
||||||
private final File subFile;
|
private final File subFile;
|
||||||
private boolean modified;
|
private boolean modified;
|
||||||
private static final boolean DEBUG = false;
|
private static final boolean DEBUG = false;
|
||||||
|
|
||||||
|
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
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 5-67 chars lower/upper case
|
||||||
|
*/
|
||||||
|
private static final Pattern HOST_PATTERN =
|
||||||
|
Pattern.compile("^[0-9a-zA-Z\\.-]{5,67}$");
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 52 chars lower/upper case
|
||||||
|
* Always ends in 'a' or 'q'
|
||||||
|
*/
|
||||||
|
private static final Pattern B32_PATTERN =
|
||||||
|
Pattern.compile("^[2-7a-zA-Z]{51}[aAqQ]$");
|
||||||
|
|
||||||
|
/** not a complete qualification, just a quick check */
|
||||||
|
private static final Pattern B64_PATTERN =
|
||||||
|
Pattern.compile("^[0-9a-zA-Z~-]{" + MIN_DEST_LENGTH + ',' + MAX_DEST_LENGTH + "}={0,2}$");
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Construct an AddressBook from the contents of the Map addresses.
|
* Construct an AddressBook from the contents of the Map addresses.
|
||||||
*
|
*
|
||||||
@ -56,7 +80,7 @@ class AddressBook {
|
|||||||
* A Map containing human readable addresses as keys, mapped to
|
* A Map containing human readable addresses as keys, mapped to
|
||||||
* base64 i2p destinations.
|
* base64 i2p destinations.
|
||||||
*/
|
*/
|
||||||
public AddressBook(Map<String, String> addresses) {
|
public AddressBook(Map<String, HostTxtEntry> addresses) {
|
||||||
this.addresses = addresses;
|
this.addresses = addresses;
|
||||||
this.subFile = null;
|
this.subFile = null;
|
||||||
this.location = null;
|
this.location = null;
|
||||||
@ -86,7 +110,7 @@ class AddressBook {
|
|||||||
new File("addressbook.tmp").delete();
|
new File("addressbook.tmp").delete();
|
||||||
}
|
}
|
||||||
*/
|
*/
|
||||||
static final long MAX_SUB_SIZE = 3 * 1024 * 1024l; //about 5,000 hosts
|
static final long MAX_SUB_SIZE = 5 * 1024 * 1024l; //about 8,000 hosts
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Construct an AddressBook from the Subscription subscription. If the
|
* Construct an AddressBook from the Subscription subscription. If the
|
||||||
@ -107,7 +131,7 @@ class AddressBook {
|
|||||||
* @param proxyPort port number of proxy
|
* @param proxyPort port number of proxy
|
||||||
*/
|
*/
|
||||||
public AddressBook(Subscription subscription, String proxyHost, int proxyPort) {
|
public AddressBook(Subscription subscription, String proxyHost, int proxyPort) {
|
||||||
Map<String, String> a = null;
|
Map<String, HostTxtEntry> a = null;
|
||||||
File subf = null;
|
File subf = null;
|
||||||
try {
|
try {
|
||||||
File tmp = SecureFile.createTempFile("addressbook", null, I2PAppContext.getGlobalContext().getTempDir());
|
File tmp = SecureFile.createTempFile("addressbook", null, I2PAppContext.getGlobalContext().getTempDir());
|
||||||
@ -144,28 +168,40 @@ class AddressBook {
|
|||||||
*/
|
*/
|
||||||
public AddressBook(File file) {
|
public AddressBook(File file) {
|
||||||
this.location = file.toString();
|
this.location = file.toString();
|
||||||
Map<String, String> a;
|
Map<String, HostTxtEntry> a;
|
||||||
try {
|
try {
|
||||||
a = ConfigParser.parse(file);
|
a = HostTxtParser.parse(file);
|
||||||
} catch (IOException exp) {
|
} catch (IOException exp) {
|
||||||
a = new HashMap<String, String>();
|
a = new HashMap<String, HostTxtEntry>();
|
||||||
}
|
}
|
||||||
this.addresses = a;
|
this.addresses = a;
|
||||||
this.subFile = null;
|
this.subFile = null;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Test only.
|
||||||
|
*
|
||||||
|
* @param testsubfile path to a file containing the simulated fetch of a subscription
|
||||||
|
* @since 0.9.26
|
||||||
|
*/
|
||||||
|
public AddressBook(String testsubfile) {
|
||||||
|
this.location = testsubfile;
|
||||||
|
this.addresses = null;
|
||||||
|
this.subFile = new File(testsubfile);
|
||||||
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Return an iterator over the addresses in the AddressBook.
|
* Return an iterator over the addresses in the AddressBook.
|
||||||
* @since 0.8.7
|
* @since 0.8.7
|
||||||
*/
|
*/
|
||||||
public Iterator<Map.Entry<String, String>> iterator() {
|
public Iterator<Map.Entry<String, HostTxtEntry>> iterator() {
|
||||||
if (this.subFile != null) {
|
if (this.subFile != null) {
|
||||||
try {
|
try {
|
||||||
return new ConfigIterator(this.subFile);
|
return new HostTxtIterator(this.subFile);
|
||||||
} catch (IOException ioe) {
|
} catch (IOException ioe) {
|
||||||
return new ConfigIterator();
|
return new HostTxtIterator();
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
return this.addresses.entrySet().iterator();
|
return this.addresses.entrySet().iterator();
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -206,12 +242,9 @@ class AddressBook {
|
|||||||
return "Map containing " + this.addresses.size() + " entries";
|
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
|
* Do basic validation of the hostname
|
||||||
* hostname was already converted to lower case by ConfigParser.parse()
|
* hostname was already converted to lower case by HostTxtParser.parse()
|
||||||
*/
|
*/
|
||||||
public static boolean isValidKey(String host) {
|
public static boolean isValidKey(String host) {
|
||||||
return
|
return
|
||||||
@ -225,9 +258,10 @@ class AddressBook {
|
|||||||
host.indexOf("..") < 0 &&
|
host.indexOf("..") < 0 &&
|
||||||
// IDN - basic check, not complete validation
|
// IDN - basic check, not complete validation
|
||||||
(host.indexOf("--") < 0 || host.startsWith("xn--") || host.indexOf(".xn--") > 0) &&
|
(host.indexOf("--") < 0 || host.startsWith("xn--") || host.indexOf(".xn--") > 0) &&
|
||||||
host.replaceAll("[a-z0-9.-]", "").length() == 0 &&
|
HOST_PATTERN.matcher(host).matches() &&
|
||||||
// Base32 spoofing (52chars.i2p)
|
// Base32 spoofing (52chars.i2p)
|
||||||
(! (host.length() == 56 && host.substring(0,52).replaceAll("[a-z2-7]", "").length() == 0)) &&
|
// We didn't do it this way, we use a .b32.i2p suffix, but let's prohibit it anyway
|
||||||
|
(! (host.length() == 56 && B32_PATTERN.matcher(host.substring(0,52)).matches())) &&
|
||||||
// ... or maybe we do Base32 this way ...
|
// ... or maybe we do Base32 this way ...
|
||||||
(! host.equals("b32.i2p")) &&
|
(! host.equals("b32.i2p")) &&
|
||||||
(! host.endsWith(".b32.i2p")) &&
|
(! host.endsWith(".b32.i2p")) &&
|
||||||
@ -251,7 +285,7 @@ class AddressBook {
|
|||||||
(dest.length() > MIN_DEST_LENGTH && dest.length() <= MAX_DEST_LENGTH)) &&
|
(dest.length() > MIN_DEST_LENGTH && dest.length() <= MAX_DEST_LENGTH)) &&
|
||||||
// B64 comes in groups of 2, 3, or 4 chars, but never 1
|
// B64 comes in groups of 2, 3, or 4 chars, but never 1
|
||||||
((dest.length() % 4) != 1) &&
|
((dest.length() % 4) != 1) &&
|
||||||
dest.replaceAll("[a-zA-Z0-9~-]", "").length() == 0
|
B64_PATTERN.matcher(dest).matches()
|
||||||
;
|
;
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -272,15 +306,15 @@ class AddressBook {
|
|||||||
public void merge(AddressBook other, boolean overwrite, Log log) {
|
public void merge(AddressBook other, boolean overwrite, Log log) {
|
||||||
if (this.addresses == null)
|
if (this.addresses == null)
|
||||||
throw new IllegalStateException();
|
throw new IllegalStateException();
|
||||||
for (Iterator<Map.Entry<String, String>> iter = other.iterator(); iter.hasNext(); ) {
|
for (Iterator<Map.Entry<String, HostTxtEntry>> iter = other.iterator(); iter.hasNext(); ) {
|
||||||
Map.Entry<String, String> entry = iter.next();
|
Map.Entry<String, HostTxtEntry> entry = iter.next();
|
||||||
String otherKey = entry.getKey();
|
String otherKey = entry.getKey();
|
||||||
String otherValue = entry.getValue();
|
HostTxtEntry otherValue = entry.getValue();
|
||||||
|
|
||||||
if (isValidKey(otherKey) && isValidDest(otherValue)) {
|
if (isValidKey(otherKey) && isValidDest(otherValue.getDest())) {
|
||||||
if (this.addresses.containsKey(otherKey) && !overwrite) {
|
if (this.addresses.containsKey(otherKey) && !overwrite) {
|
||||||
if (DEBUG && log != null &&
|
if (DEBUG && log != null &&
|
||||||
!this.addresses.get(otherKey).equals(otherValue)) {
|
!this.addresses.get(otherKey).equals(otherValue.getDest())) {
|
||||||
log.append("Conflict for " + otherKey + " from "
|
log.append("Conflict for " + otherKey + " from "
|
||||||
+ other.location
|
+ other.location
|
||||||
+ ". Destination in remote address book is "
|
+ ". Destination in remote address book is "
|
||||||
@ -313,7 +347,7 @@ class AddressBook {
|
|||||||
throw new IllegalStateException();
|
throw new IllegalStateException();
|
||||||
if (this.modified) {
|
if (this.modified) {
|
||||||
try {
|
try {
|
||||||
ConfigParser.write(this.addresses, file);
|
HostTxtParser.write(this.addresses, file);
|
||||||
} catch (IOException exp) {
|
} catch (IOException exp) {
|
||||||
System.err.println("Error writing addressbook " + file.getAbsolutePath() + " : " + exp.toString());
|
System.err.println("Error writing addressbook " + file.getAbsolutePath() + " : " + exp.toString());
|
||||||
}
|
}
|
||||||
@ -337,4 +371,27 @@ class AddressBook {
|
|||||||
protected void finalize() {
|
protected void finalize() {
|
||||||
delete();
|
delete();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/****
|
||||||
|
public static void main(String[] args) {
|
||||||
|
String[] tests = { "foo.i2p",
|
||||||
|
"3bnipzzu67cdq2rcygyxz52xhvy6ylokn4zfrk36ywn6pixmaoza.b32.i2p",
|
||||||
|
"9rhEy4dT9fMlcSOhDzfWRxCV2aen4Zp4eSthOf5f9gVKMa4PtQJ-wEzm2KEYeDXkbM6wEDvMQ6ou4LIniSE6bSAwy7fokiXk5oabels-sJmftnQWRbZyyXEAsLc3gpJJvp9km7kDyZ0z0YGL5tf3S~OaWdptB5tSBOAOjm6ramcYZMWhyUqm~xSL1JyXUqWEHRYwhoDJNL6-L516VpDYVigMBpIwskjeFGcqK8BqWAe0bRwxIiFTPN6Ck8SDzQvS1l1Yj-zfzg3X3gOknzwR8nrHUkjsWtEB6nhbOr8AR21C9Hs0a7MUJvSe2NOuBoNTrtxT76jDruI78JcG5r~WKl6M12yM-SqeBNE9hQn2QCHeHAKju7FdRCbqaZ99IwyjfwvZbkiYYQVN1xlUuGaXrj98XDzK7GORYdH-PrVGfEbMXQ40KLHUWHz8w4tQXAOQrCHEichod0RIzuuxo3XltCWKrf1xGZhkAo9bk2qXi6digCijvYNaKmQdXZYWW~RtAAAA",
|
||||||
|
"6IZTYacjlXjSAxu-uXEO5oGsj-f4tfePHEvGjs5pu-AMXMwD7-xFdi8kdobDMJp9yRAl96U7yLl~0t9zHeqqYmNeZnDSkTmAcSC2PT45ZJDXBobKi1~a77zuqfPwnzEatYfW3GL1JQAEkAmiwNJoG7ThTZ3zT7W9ekVJpHi9mivpTbaI~rALLfuAg~Mvr60nntZHjqhEZuiU4dTXrmc5nykl~UaMnBdwHL4jKmoN5CotqHyLYZfp74fdD-Oq4SkhuBhU8wkBIM3lz3Ul1o6-s0lNUMdYJq1CyxnyP7jeekdfAlSx4P4sU4M0dPaYvPdOFWPWwBuEh0pCs5Mj01B2xeEBhpV~xSLn6ru5Vq98TrmaR33KHxd76OYYFsWwzVbBuMVSd800XpBghGFucGw01YHYsPh3Afb01sXbf8Nb1bkxCy~DsrmoH4Ww3bpx66JhRTWvg5al3oWlCX51CnJUqaaK~dPL-pBvAyLKIA5aYvl8ca66jtA7AFDxsOb2texBBQAEAAcAAA==",
|
||||||
|
"te9Ky7XvVcLLr5vQqvfmOasg915P3-ddP3iDqpMMk7v5ufFKobLAX~1k-E4WVsJVlkYvkHVOjxix-uT1IdewKmLd81s5wZtz0GQ3ZC6p0C3S2cOxz7kQqf7QYSR0BrhZC~2du3-GdQO9TqNmsnHrah5lOZf0LN2JFEFPqg8ZB5JNm3JjJeSqePBRk3zAUogNaNK3voB1MVI0ZROKopXAJM4XMERNqI8tIH4ngGtV41SEJJ5pUFrrTx~EiUPqmSEaEA6UDYZiqd23ZlewZ31ExXQj97zvkuhKCoS9A9MNkzZejJhP-TEXWF8~KHur9f51H--EhwZ42Aj69-3GuNjsMdTwglG5zyIfhd2OspxJrXzCPqIV2sXn80IbPgwxHu0CKIJ6X43B5vTyVu87QDI13MIRNGWNZY5KmM5pilGP7jPkOs4xQDo4NHzpuJR5igjWgJIBPU6fI9Pzq~BMzjLiZOMp8xNWey1zKC96L0eX4of1MG~oUvq0qmIHGNa1TlUwBQAEAAEAAA==",
|
||||||
|
"(*&(*&(*&(*",
|
||||||
|
"9rhEy4dT9fMlcSOhDzfWRxCV2aen4Zp4eSthOf5f9gVKMa4PtQJ-wEzm2KEYeDXkbM6wEDvMQ6ou4LIniSE6bSAwy7fokiXk5oabels-sJmftnQWRbZyyXEAsLc3gpJJvp9km7kDyZ0z0YGL5tf3S~OaWdptB5tSBOAOjm6ramcYZMWhyUqm~xSL1JyXUqWEHRYwhoDJNL6-L516VpDYVigMBpIwskjeFGcqK8BqWAe0bRwxIiFTPN6Ck8SDzQvS1l1Yj-zfzg3X3gOknzwR8nrHUkjsWtEB6nhbOr8AR21C9Hs0a7MUJvSe2NOuBoNTrtxT76jDruI78JcG5r~WKl6M12yM-SqeBNE9hQn2QCHeHAKju7FdRCbqaZ99IwyjfwvZbkiYYQVN1xlUuGaXrj98XDzK7GORYdH-PrVGfEbMXQ40KLHUWHz8w4tQXAOQrCHEichod0RIzuuxo3XltCWKrf1xGZhkAo9bk2qXi6digCijvYNaKmQdXZYWW~RtAAA",
|
||||||
|
"6IZTYacjlXjSAxu-uXEO5oGsj-f4tfePHEvGjs5pu-AMXMwD7-xFdi8kdobDMJp9yRAl96U7yLl~0t9zHeqqYmNeZnDSkTmAcSC2PT45ZJDXBobKi1~a77zuqfPwnzEatYfW3GL1JQAEkAmiwNJoG7ThTZ3zT7W9ekVJpHi9mivpTbaI~rALLfuAg~Mvr60nntZHjqhEZuiU4dTXrmc5nykl~UaMnBdwHL4jKmoN5CotqHyLYZfp74fdD-Oq4SkhuBhU8wkBIM3lz3Ul1o6-s0lNUMdYJq1CyxnyP7jeekdfAlSx4P4sU4M0dPaYvPdOFWPWwBuEh0pCs5Mj01B2xeEBhpV~xSLn6ru5Vq98TrmaR33KHxd76OYYFsWwzVbBuMVSd800XpBghGFucGw01YHYsPh3Afb01sXbf8Nb1bkxCy~DsrmoH4Ww3bpx66JhRTWvg5al3oWlCX51CnJUqaaK~dPL-pBvAyLKIA5aYvl8ca66jtA7AFDxsOb2texBBQAEAAcAAA===",
|
||||||
|
"!e9Ky7XvVcLLr5vQqvfmOasg915P3-ddP3iDqpMMk7v5ufFKobLAX~1k-E4WVsJVlkYvkHVOjxix-uT1IdewKmLd81s5wZtz0GQ3ZC6p0C3S2cOxz7kQqf7QYSR0BrhZC~2du3-GdQO9TqNmsnHrah5lOZf0LN2JFEFPqg8ZB5JNm3JjJeSqePBRk3zAUogNaNK3voB1MVI0ZROKopXAJM4XMERNqI8tIH4ngGtV41SEJJ5pUFrrTx~EiUPqmSEaEA6UDYZiqd23ZlewZ31ExXQj97zvkuhKCoS9A9MNkzZejJhP-TEXWF8~KHur9f51H--EhwZ42Aj69-3GuNjsMdTwglG5zyIfhd2OspxJrXzCPqIV2sXn80IbPgwxHu0CKIJ6X43B5vTyVu87QDI13MIRNGWNZY5KmM5pilGP7jPkOs4xQDo4NHzpuJR5igjWgJIBPU6fI9Pzq~BMzjLiZOMp8xNWey1zKC96L0eX4of1MG~oUvq0qmIHGNa1TlUwBQAEAAEAAA==",
|
||||||
|
"x"
|
||||||
|
};
|
||||||
|
for (String s : tests) {
|
||||||
|
test(s);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
public static void test(String s) {
|
||||||
|
System.out.println(s + " valid host? " + isValidKey(s) + " valid dest? " + isValidDest(s));
|
||||||
|
}
|
||||||
|
****/
|
||||||
}
|
}
|
||||||
|
@ -29,12 +29,13 @@ import java.io.IOException;
|
|||||||
import java.io.InputStreamReader;
|
import java.io.InputStreamReader;
|
||||||
import java.io.OutputStreamWriter;
|
import java.io.OutputStreamWriter;
|
||||||
import java.io.StringReader;
|
import java.io.StringReader;
|
||||||
|
import java.util.ArrayList;
|
||||||
import java.util.HashMap;
|
import java.util.HashMap;
|
||||||
import java.util.LinkedList;
|
|
||||||
import java.util.List;
|
import java.util.List;
|
||||||
import java.util.Locale;
|
import java.util.Locale;
|
||||||
import java.util.Map;
|
import java.util.Map;
|
||||||
|
|
||||||
|
import net.i2p.data.DataHelper;
|
||||||
import net.i2p.util.SecureFile;
|
import net.i2p.util.SecureFile;
|
||||||
import net.i2p.util.SecureFileOutputStream;
|
import net.i2p.util.SecureFileOutputStream;
|
||||||
import net.i2p.util.SystemVersion;
|
import net.i2p.util.SystemVersion;
|
||||||
@ -43,8 +44,7 @@ import net.i2p.util.SystemVersion;
|
|||||||
* Utility class providing methods to parse and write files in config file
|
* Utility class providing methods to parse and write files in config file
|
||||||
* format, and subscription file format.
|
* format, and subscription file format.
|
||||||
*
|
*
|
||||||
* TODO: Change file encoding from default to UTF-8?
|
* TODO: switch to the DataHelper loadProps/storeProps methods?
|
||||||
* Or switch to the DataHelper loadProps/storeProps methods?
|
|
||||||
*
|
*
|
||||||
* @author Ragnarok
|
* @author Ragnarok
|
||||||
*/
|
*/
|
||||||
@ -87,20 +87,23 @@ class ConfigParser {
|
|||||||
* if the BufferedReader cannot be read.
|
* if the BufferedReader cannot be read.
|
||||||
*
|
*
|
||||||
*/
|
*/
|
||||||
public static Map<String, String> parse(BufferedReader input) throws IOException {
|
private static Map<String, String> parse(BufferedReader input) throws IOException {
|
||||||
Map<String, String> result = new HashMap<String, String>();
|
try {
|
||||||
String inputLine;
|
Map<String, String> result = new HashMap<String, String>();
|
||||||
inputLine = input.readLine();
|
String inputLine;
|
||||||
while (inputLine != null) {
|
while ((inputLine = input.readLine()) != null) {
|
||||||
inputLine = stripComments(inputLine);
|
inputLine = stripComments(inputLine);
|
||||||
String[] splitLine = inputLine.split("=");
|
if (inputLine.length() == 0)
|
||||||
if (splitLine.length == 2) {
|
continue;
|
||||||
result.put(splitLine[0].trim().toLowerCase(Locale.US), splitLine[1].trim());
|
String[] splitLine = DataHelper.split(inputLine, "=", 2);
|
||||||
|
if (splitLine.length == 2) {
|
||||||
|
result.put(splitLine[0].trim().toLowerCase(Locale.US), splitLine[1].trim());
|
||||||
|
}
|
||||||
}
|
}
|
||||||
inputLine = input.readLine();
|
return result;
|
||||||
|
} finally {
|
||||||
|
try { input.close(); } catch (IOException ioe) {}
|
||||||
}
|
}
|
||||||
input.close();
|
|
||||||
return result;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@ -113,15 +116,21 @@ class ConfigParser {
|
|||||||
* @throws IOException
|
* @throws IOException
|
||||||
* if file cannot be read.
|
* if file cannot be read.
|
||||||
*/
|
*/
|
||||||
public static Map<String, String> parse(File file) throws IOException {
|
public static Map<String, String> parse(File file) throws IOException {
|
||||||
FileInputStream fileStream = new FileInputStream(file);
|
FileInputStream fileStream = null;
|
||||||
BufferedReader input = new BufferedReader(new InputStreamReader(
|
|
||||||
fileStream, "UTF-8"));
|
|
||||||
Map<String, String> rv = parse(input);
|
|
||||||
try {
|
try {
|
||||||
fileStream.close();
|
fileStream = new FileInputStream(file);
|
||||||
} catch (IOException ioe) {}
|
BufferedReader input = new BufferedReader(new InputStreamReader(
|
||||||
return rv;
|
fileStream, "UTF-8"));
|
||||||
|
Map<String, String> rv = parse(input);
|
||||||
|
return rv;
|
||||||
|
} finally {
|
||||||
|
if (fileStream != null) {
|
||||||
|
try {
|
||||||
|
fileStream.close();
|
||||||
|
} catch (IOException ioe) {}
|
||||||
|
}
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@ -134,11 +143,13 @@ class ConfigParser {
|
|||||||
* @throws IOException
|
* @throws IOException
|
||||||
* if file cannot be read.
|
* if file cannot be read.
|
||||||
*/
|
*/
|
||||||
public static Map<String, String> parse(String string) throws IOException {
|
/****
|
||||||
|
public static Map<String, String> parse(String string) throws IOException {
|
||||||
StringReader stringReader = new StringReader(string);
|
StringReader stringReader = new StringReader(string);
|
||||||
BufferedReader input = new BufferedReader(stringReader);
|
BufferedReader input = new BufferedReader(stringReader);
|
||||||
return parse(input);
|
return parse(input);
|
||||||
}
|
}
|
||||||
|
****/
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Return a Map using the contents of the File file. If file cannot be read,
|
* Return a Map using the contents of the File file. If file cannot be read,
|
||||||
@ -151,8 +162,8 @@ class ConfigParser {
|
|||||||
* @return A Map containing the key, value pairs from file, or if file
|
* @return A Map containing the key, value pairs from file, or if file
|
||||||
* cannot be read, map.
|
* cannot be read, map.
|
||||||
*/
|
*/
|
||||||
public static Map<String, String> parse(File file, Map<String, String> map) {
|
public static Map<String, String> parse(File file, Map<String, String> map) {
|
||||||
Map<String, String> result;
|
Map<String, String> result;
|
||||||
try {
|
try {
|
||||||
result = parse(file);
|
result = parse(file);
|
||||||
for (Map.Entry<String, String> entry : map.entrySet()) {
|
for (Map.Entry<String, String> entry : map.entrySet()) {
|
||||||
@ -178,19 +189,21 @@ class ConfigParser {
|
|||||||
* @throws IOException
|
* @throws IOException
|
||||||
* if input cannot be read.
|
* if input cannot be read.
|
||||||
*/
|
*/
|
||||||
public static List<String> parseSubscriptions(BufferedReader input)
|
private static List<String> parseSubscriptions(BufferedReader input)
|
||||||
throws IOException {
|
throws IOException {
|
||||||
List<String> result = new LinkedList<String>();
|
try {
|
||||||
String inputLine = input.readLine();
|
List<String> result = new ArrayList<String>(4);
|
||||||
while (inputLine != null) {
|
String inputLine;
|
||||||
inputLine = stripComments(inputLine).trim();
|
while ((inputLine = input.readLine()) != null) {
|
||||||
if (inputLine.length() > 0) {
|
inputLine = stripComments(inputLine).trim();
|
||||||
result.add(inputLine);
|
if (inputLine.length() > 0) {
|
||||||
|
result.add(inputLine);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
inputLine = input.readLine();
|
return result;
|
||||||
|
} finally {
|
||||||
|
try { input.close(); } catch (IOException ioe) {}
|
||||||
}
|
}
|
||||||
input.close();
|
|
||||||
return result;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@ -202,15 +215,21 @@ class ConfigParser {
|
|||||||
* @throws IOException
|
* @throws IOException
|
||||||
* if file cannot be read.
|
* if file cannot be read.
|
||||||
*/
|
*/
|
||||||
public static List<String> parseSubscriptions(File file) throws IOException {
|
private static List<String> parseSubscriptions(File file) throws IOException {
|
||||||
FileInputStream fileStream = new FileInputStream(file);
|
FileInputStream fileStream = null;
|
||||||
BufferedReader input = new BufferedReader(new InputStreamReader(
|
|
||||||
fileStream, "UTF-8"));
|
|
||||||
List<String> rv = parseSubscriptions(input);
|
|
||||||
try {
|
try {
|
||||||
fileStream.close();
|
fileStream = new FileInputStream(file);
|
||||||
} catch (IOException ioe) {}
|
BufferedReader input = new BufferedReader(new InputStreamReader(
|
||||||
return rv;
|
fileStream, "UTF-8"));
|
||||||
|
List<String> rv = parseSubscriptions(input);
|
||||||
|
return rv;
|
||||||
|
} finally {
|
||||||
|
if (fileStream != null) {
|
||||||
|
try {
|
||||||
|
fileStream.close();
|
||||||
|
} catch (IOException ioe) {}
|
||||||
|
}
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@ -222,11 +241,13 @@ class ConfigParser {
|
|||||||
* @throws IOException
|
* @throws IOException
|
||||||
* if string cannot be read.
|
* if string cannot be read.
|
||||||
*/
|
*/
|
||||||
|
/****
|
||||||
public static List<String> parseSubscriptions(String string) throws IOException {
|
public static List<String> parseSubscriptions(String string) throws IOException {
|
||||||
StringReader stringReader = new StringReader(string);
|
StringReader stringReader = new StringReader(string);
|
||||||
BufferedReader input = new BufferedReader(stringReader);
|
BufferedReader input = new BufferedReader(stringReader);
|
||||||
return parseSubscriptions(input);
|
return parseSubscriptions(input);
|
||||||
}
|
}
|
||||||
|
****/
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Return a List using the contents of the File file. If file cannot be
|
* Return a List using the contents of the File file. If file cannot be
|
||||||
@ -276,12 +297,15 @@ class ConfigParser {
|
|||||||
* @throws IOException
|
* @throws IOException
|
||||||
* if the BufferedWriter cannot be written to.
|
* if the BufferedWriter cannot be written to.
|
||||||
*/
|
*/
|
||||||
public static void write(Map<String, String> map, BufferedWriter output) throws IOException {
|
private static void write(Map<String, String> map, BufferedWriter output) throws IOException {
|
||||||
for (Map.Entry<String, String> entry : map.entrySet()) {
|
try {
|
||||||
output.write(entry.getKey() + '=' + entry.getValue());
|
for (Map.Entry<String, String> entry : map.entrySet()) {
|
||||||
output.newLine();
|
output.write(entry.getKey() + '=' + entry.getValue());
|
||||||
|
output.newLine();
|
||||||
|
}
|
||||||
|
} finally {
|
||||||
|
try { output.close(); } catch (IOException ioe) {}
|
||||||
}
|
}
|
||||||
output.close();
|
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@ -298,7 +322,7 @@ class ConfigParser {
|
|||||||
* @throws IOException
|
* @throws IOException
|
||||||
* if file cannot be written to.
|
* if file cannot be written to.
|
||||||
*/
|
*/
|
||||||
public static void write(Map<String, String> map, File file) throws IOException {
|
public static void write(Map<String, String> map, File file) throws IOException {
|
||||||
boolean success = false;
|
boolean success = false;
|
||||||
if (!isWindows) {
|
if (!isWindows) {
|
||||||
File tmp = SecureFile.createTempFile("temp-", ".tmp", file.getAbsoluteFile().getParentFile());
|
File tmp = SecureFile.createTempFile("temp-", ".tmp", file.getAbsoluteFile().getParentFile());
|
||||||
@ -326,13 +350,16 @@ class ConfigParser {
|
|||||||
* @throws IOException
|
* @throws IOException
|
||||||
* if output cannot be written to.
|
* if output cannot be written to.
|
||||||
*/
|
*/
|
||||||
public static void writeSubscriptions(List<String> list, BufferedWriter output)
|
private static void writeSubscriptions(List<String> list, BufferedWriter output)
|
||||||
throws IOException {
|
throws IOException {
|
||||||
for (String s : list) {
|
try {
|
||||||
output.write(s);
|
for (String s : list) {
|
||||||
output.newLine();
|
output.write(s);
|
||||||
|
output.newLine();
|
||||||
|
}
|
||||||
|
} finally {
|
||||||
|
try { output.close(); } catch (IOException ioe) {}
|
||||||
}
|
}
|
||||||
output.close();
|
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@ -346,7 +373,7 @@ class ConfigParser {
|
|||||||
* @throws IOException
|
* @throws IOException
|
||||||
* if output cannot be written to.
|
* if output cannot be written to.
|
||||||
*/
|
*/
|
||||||
public static void writeSubscriptions(List<String> list, File file)
|
private static void writeSubscriptions(List<String> list, File file)
|
||||||
throws IOException {
|
throws IOException {
|
||||||
writeSubscriptions(list, new BufferedWriter(
|
writeSubscriptions(list, new BufferedWriter(
|
||||||
new OutputStreamWriter(new SecureFileOutputStream(file), "UTF-8")));
|
new OutputStreamWriter(new SecureFileOutputStream(file), "UTF-8")));
|
||||||
|
@ -23,19 +23,21 @@ package net.i2p.addressbook;
|
|||||||
|
|
||||||
import java.io.File;
|
import java.io.File;
|
||||||
import java.io.IOException;
|
import java.io.IOException;
|
||||||
|
import java.util.ArrayList;
|
||||||
import java.util.HashMap;
|
import java.util.HashMap;
|
||||||
import java.util.Iterator;
|
import java.util.Iterator;
|
||||||
import java.util.LinkedList;
|
|
||||||
import java.util.List;
|
import java.util.List;
|
||||||
import java.util.Map;
|
import java.util.Map;
|
||||||
import java.util.Properties;
|
import java.util.Properties;
|
||||||
import java.util.Set;
|
import java.util.Set;
|
||||||
|
|
||||||
import net.i2p.I2PAppContext;
|
import net.i2p.I2PAppContext;
|
||||||
|
import net.i2p.client.naming.HostTxtEntry;
|
||||||
import net.i2p.client.naming.NamingService;
|
import net.i2p.client.naming.NamingService;
|
||||||
import net.i2p.client.naming.SingleFileNamingService;
|
import net.i2p.client.naming.SingleFileNamingService;
|
||||||
import net.i2p.data.DataFormatException;
|
import net.i2p.data.DataFormatException;
|
||||||
import net.i2p.data.Destination;
|
import net.i2p.data.Destination;
|
||||||
|
import net.i2p.util.OrderedProperties;
|
||||||
import net.i2p.util.SecureDirectory;
|
import net.i2p.util.SecureDirectory;
|
||||||
import net.i2p.util.SystemVersion;
|
import net.i2p.util.SystemVersion;
|
||||||
|
|
||||||
@ -53,6 +55,12 @@ public class Daemon {
|
|||||||
private static final String DEFAULT_SUB = "http://i2p-projekt.i2p/hosts.txt";
|
private static final String DEFAULT_SUB = "http://i2p-projekt.i2p/hosts.txt";
|
||||||
/** @since 0.9.12 */
|
/** @since 0.9.12 */
|
||||||
static final String OLD_DEFAULT_SUB = "http://www.i2p2.i2p/hosts.txt";
|
static final String OLD_DEFAULT_SUB = "http://www.i2p2.i2p/hosts.txt";
|
||||||
|
/** Any properties we receive from the subscription, we store to the
|
||||||
|
* addressbook with this prefix, so it knows it's part of the signature.
|
||||||
|
* This is also chosen so that it can't be spoofed.
|
||||||
|
*/
|
||||||
|
private static final String RCVD_PROP_PREFIX = "=";
|
||||||
|
private static final boolean MUST_VALIDATE = false;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Update the router and published address books using remote data from the
|
* Update the router and published address books using remote data from the
|
||||||
@ -80,10 +88,9 @@ public class Daemon {
|
|||||||
*/
|
*/
|
||||||
public static void update(AddressBook master, AddressBook router,
|
public static void update(AddressBook master, AddressBook router,
|
||||||
File published, SubscriptionList subscriptions, Log log) {
|
File published, SubscriptionList subscriptions, Log log) {
|
||||||
Iterator<AddressBook> iter = subscriptions.iterator();
|
for (AddressBook book : subscriptions) {
|
||||||
while (iter.hasNext()) {
|
|
||||||
// yes, the EepGet fetch() is done in next()
|
// yes, the EepGet fetch() is done in next()
|
||||||
router.merge(iter.next(), false, log);
|
router.merge(book, false, log);
|
||||||
}
|
}
|
||||||
router.write();
|
router.write();
|
||||||
if (published != null) {
|
if (published != null) {
|
||||||
@ -129,18 +136,22 @@ public class Daemon {
|
|||||||
while (iter.hasNext()) {
|
while (iter.hasNext()) {
|
||||||
// yes, the EepGet fetch() is done in next()
|
// yes, the EepGet fetch() is done in next()
|
||||||
long start = System.currentTimeMillis();
|
long start = System.currentTimeMillis();
|
||||||
AddressBook sub = iter.next();
|
AddressBook addressbook = iter.next();
|
||||||
long end = System.currentTimeMillis();
|
|
||||||
// SubscriptionIterator puts in a dummy AddressBook with no location if no fetch is done
|
// SubscriptionIterator puts in a dummy AddressBook with no location if no fetch is done
|
||||||
if (DEBUG && log != null && sub.getLocation() != null)
|
if (DEBUG && log != null && addressbook.getLocation() != null) {
|
||||||
log.append("Fetch of " + sub.getLocation() + " took " + (end - start));
|
long end = System.currentTimeMillis();
|
||||||
start = end;
|
log.append("Fetch of " + addressbook.getLocation() + " took " + (end - start));
|
||||||
|
start = end;
|
||||||
|
}
|
||||||
int old = 0, nnew = 0, invalid = 0, conflict = 0, total = 0;
|
int old = 0, nnew = 0, invalid = 0, conflict = 0, total = 0;
|
||||||
for (Iterator<Map.Entry<String, String>> eIter = sub.iterator(); eIter.hasNext(); ) {
|
int deleted = 0;
|
||||||
Map.Entry<String, String> entry = eIter.next();
|
for (Map.Entry<String, HostTxtEntry> entry : addressbook) {
|
||||||
|
total++;
|
||||||
|
// may be null for 'remove' entries
|
||||||
String key = entry.getKey();
|
String key = entry.getKey();
|
||||||
boolean isKnown;
|
boolean isKnown;
|
||||||
Destination oldDest = null;
|
// NOT set for text file NamingService
|
||||||
|
Destination oldDest;
|
||||||
if (isTextFile) {
|
if (isTextFile) {
|
||||||
if (knownNames == null) {
|
if (knownNames == null) {
|
||||||
// load the hostname set
|
// load the hostname set
|
||||||
@ -148,22 +159,305 @@ public class Daemon {
|
|||||||
opts.setProperty("file", "hosts.txt");
|
opts.setProperty("file", "hosts.txt");
|
||||||
knownNames = router.getNames(opts);
|
knownNames = router.getNames(opts);
|
||||||
}
|
}
|
||||||
isKnown = knownNames.contains(key);
|
oldDest = null;
|
||||||
|
isKnown = key != null ? knownNames.contains(key) : null;
|
||||||
} else {
|
} else {
|
||||||
oldDest = router.lookup(key);
|
oldDest = key != null ? router.lookup(key) : null;
|
||||||
isKnown = oldDest != null;
|
isKnown = oldDest != null;
|
||||||
}
|
}
|
||||||
try {
|
try {
|
||||||
if (!isKnown) {
|
HostTxtEntry he = entry.getValue();
|
||||||
if (AddressBook.isValidKey(key)) {
|
Properties hprops = he.getProps();
|
||||||
Destination dest = new Destination(entry.getValue());
|
boolean mustValidate = MUST_VALIDATE || hprops != null;
|
||||||
Properties props = new Properties();
|
String action = hprops != null ? hprops.getProperty(HostTxtEntry.PROP_ACTION) : null;
|
||||||
props.setProperty("s", sub.getLocation());
|
if (key == null && !he.hasValidRemoveSig()) {
|
||||||
|
if (log != null) {
|
||||||
|
log.append("Bad signature of action " + action + " for key " +
|
||||||
|
hprops.getProperty(HostTxtEntry.PROP_NAME) +
|
||||||
|
". From: " + addressbook.getLocation());
|
||||||
|
}
|
||||||
|
invalid++;
|
||||||
|
} else if (key != null && mustValidate && !he.hasValidSig()) {
|
||||||
|
if (log != null) {
|
||||||
|
log.append("Bad signature of action " + action + " for key " + key +
|
||||||
|
". From: " + addressbook.getLocation());
|
||||||
|
}
|
||||||
|
invalid++;
|
||||||
|
} else if (action != null || !isKnown) {
|
||||||
|
if (key != null && AddressBook.isValidKey(key)) {
|
||||||
|
Destination dest = new Destination(he.getDest());
|
||||||
|
Properties props = new OrderedProperties();
|
||||||
|
props.setProperty("s", addressbook.getLocation());
|
||||||
|
boolean allowExistingKeyInPublished = false;
|
||||||
|
if (mustValidate) {
|
||||||
|
// sig checked above
|
||||||
|
props.setProperty("v", "true");
|
||||||
|
}
|
||||||
|
if (hprops != null) {
|
||||||
|
// merge in all the received properties
|
||||||
|
for (Map.Entry<Object, Object> e : hprops.entrySet()) {
|
||||||
|
// Add prefix to indicate received property
|
||||||
|
props.setProperty(RCVD_PROP_PREFIX + e.getKey(), (String) e.getValue());
|
||||||
|
}
|
||||||
|
}
|
||||||
|
if (action != null) {
|
||||||
|
// Process commands. hprops is non-null.
|
||||||
|
// Must handle isKnown in each case.
|
||||||
|
if (action.equals(HostTxtEntry.ACTION_ADDDEST)) {
|
||||||
|
// Add an alternate destination (new crypto) for existing hostname
|
||||||
|
// Requires new NamingService support if the key exists
|
||||||
|
String polddest = hprops.getProperty(HostTxtEntry.PROP_OLDDEST);
|
||||||
|
if (polddest != null) {
|
||||||
|
Destination pod = new Destination(polddest);
|
||||||
|
List<Destination> pod2 = router.lookupAll(key);
|
||||||
|
if (pod2 == null) {
|
||||||
|
// we didn't know it before, so we'll add it
|
||||||
|
// check inner sig anyway
|
||||||
|
if (!he.hasValidInnerSig()) {
|
||||||
|
logInner(log, action, key, addressbook);
|
||||||
|
invalid++;
|
||||||
|
continue;
|
||||||
|
}
|
||||||
|
} else if (pod2.contains(dest)) {
|
||||||
|
// we knew it before, with the same dest
|
||||||
|
old++;
|
||||||
|
continue;
|
||||||
|
} else if (pod2.contains(pod)) {
|
||||||
|
// checks out, so verify the inner sig
|
||||||
|
if (!he.hasValidInnerSig()) {
|
||||||
|
logInner(log, action, key, addressbook);
|
||||||
|
invalid++;
|
||||||
|
continue;
|
||||||
|
}
|
||||||
|
// TODO Requires NamingService support
|
||||||
|
// if (isTextFile), do we replace or not? check sigType.isAvailable()
|
||||||
|
boolean success = router.addDestination(key, dest, props);
|
||||||
|
if (log != null) {
|
||||||
|
if (success)
|
||||||
|
log.append("Additional address for " + key +
|
||||||
|
" added to address book. From: " + addressbook.getLocation());
|
||||||
|
else
|
||||||
|
log.append("Failed to add additional address for " + key +
|
||||||
|
" From: " + addressbook.getLocation());
|
||||||
|
}
|
||||||
|
// now update the published addressbook
|
||||||
|
// ditto
|
||||||
|
if (published != null) {
|
||||||
|
if (publishedNS == null)
|
||||||
|
publishedNS = new SingleFileNamingService(I2PAppContext.getGlobalContext(), published.getAbsolutePath());
|
||||||
|
// FIXME this fails, no support in SFNS
|
||||||
|
success = publishedNS.addDestination(key, dest, props);
|
||||||
|
if (log != null && !success)
|
||||||
|
log.append("Add to published address book " + published.getAbsolutePath() + " failed for " + key);
|
||||||
|
}
|
||||||
|
nnew++;
|
||||||
|
continue;
|
||||||
|
} else {
|
||||||
|
// mismatch, disallow
|
||||||
|
logMismatch(log, action, key, pod2, he.getDest(), addressbook);
|
||||||
|
invalid++;
|
||||||
|
continue;
|
||||||
|
}
|
||||||
|
} else {
|
||||||
|
logMissing(log, action, key, addressbook);
|
||||||
|
invalid++;
|
||||||
|
continue;
|
||||||
|
}
|
||||||
|
} else if (action.equals(HostTxtEntry.ACTION_ADDNAME)) {
|
||||||
|
// Add an alias for an existing hostname, same dest
|
||||||
|
if (isKnown) {
|
||||||
|
// could be same or different dest
|
||||||
|
old++;
|
||||||
|
continue;
|
||||||
|
}
|
||||||
|
String poldname = hprops.getProperty(HostTxtEntry.PROP_OLDNAME);
|
||||||
|
if (poldname != null) {
|
||||||
|
List<Destination> pod = router.lookupAll(poldname);
|
||||||
|
if (pod == null) {
|
||||||
|
// we didn't have the old one, so we'll add the new one
|
||||||
|
} else if (pod.contains(dest)) {
|
||||||
|
// checks out, so we'll add the new one
|
||||||
|
} else {
|
||||||
|
// mismatch, disallow
|
||||||
|
logMismatch(log, action, key, pod, he.getDest(), addressbook);
|
||||||
|
invalid++;
|
||||||
|
continue;
|
||||||
|
}
|
||||||
|
} else {
|
||||||
|
logMissing(log, action, key, addressbook);
|
||||||
|
invalid++;
|
||||||
|
continue;
|
||||||
|
}
|
||||||
|
} else if (action.equals(HostTxtEntry.ACTION_ADDSUBDOMAIN)) {
|
||||||
|
// add a subdomain with verification
|
||||||
|
if (isKnown) {
|
||||||
|
old++;
|
||||||
|
continue;
|
||||||
|
}
|
||||||
|
String polddest = hprops.getProperty(HostTxtEntry.PROP_OLDDEST);
|
||||||
|
String poldname = hprops.getProperty(HostTxtEntry.PROP_OLDNAME);
|
||||||
|
if (polddest != null && poldname != null) {
|
||||||
|
// check for valid subdomain
|
||||||
|
if (!AddressBook.isValidKey(poldname) ||
|
||||||
|
key.indexOf('.' + poldname) <= 0) {
|
||||||
|
if (log != null)
|
||||||
|
log.append("Action: " + action + " failed because" +
|
||||||
|
" old name " + poldname +
|
||||||
|
" is invalid" +
|
||||||
|
". From: " + addressbook.getLocation());
|
||||||
|
invalid++;
|
||||||
|
continue;
|
||||||
|
}
|
||||||
|
Destination pod = new Destination(polddest);
|
||||||
|
List<Destination> pod2 = router.lookupAll(poldname);
|
||||||
|
if (pod2 == null) {
|
||||||
|
// we didn't have the old name
|
||||||
|
// check inner sig anyway
|
||||||
|
if (!he.hasValidInnerSig()) {
|
||||||
|
logInner(log, action, key, addressbook);
|
||||||
|
invalid++;
|
||||||
|
continue;
|
||||||
|
}
|
||||||
|
} else if (pod2.contains(pod)) {
|
||||||
|
// checks out, so verify the inner sig
|
||||||
|
if (!he.hasValidInnerSig()) {
|
||||||
|
logInner(log, action, key, addressbook);
|
||||||
|
invalid++;
|
||||||
|
continue;
|
||||||
|
}
|
||||||
|
} else {
|
||||||
|
// mismatch, disallow
|
||||||
|
logMismatch(log, action, key, pod2, polddest, addressbook);
|
||||||
|
invalid++;
|
||||||
|
continue;
|
||||||
|
}
|
||||||
|
} else {
|
||||||
|
logMissing(log, action, key, addressbook);
|
||||||
|
invalid++;
|
||||||
|
continue;
|
||||||
|
}
|
||||||
|
} else if (action.equals(HostTxtEntry.ACTION_CHANGEDEST)) {
|
||||||
|
// change destination on an existing entry
|
||||||
|
// This removes all previous destinations under that hostname,
|
||||||
|
// is this what we want?
|
||||||
|
String polddest = hprops.getProperty(HostTxtEntry.PROP_OLDDEST);
|
||||||
|
if (polddest != null) {
|
||||||
|
Destination pod = new Destination(polddest);
|
||||||
|
List<Destination> pod2 = router.lookupAll(key);
|
||||||
|
if (pod2 == null) {
|
||||||
|
// we didn't have the old name
|
||||||
|
// check inner sig anyway
|
||||||
|
if (!he.hasValidInnerSig()) {
|
||||||
|
logInner(log, action, key, addressbook);
|
||||||
|
invalid++;
|
||||||
|
continue;
|
||||||
|
}
|
||||||
|
} else if (pod2.contains(dest)) {
|
||||||
|
// we already have the new dest
|
||||||
|
old++;
|
||||||
|
continue;
|
||||||
|
} else if (pod2.contains(pod)) {
|
||||||
|
// checks out, so verify the inner sig
|
||||||
|
if (!he.hasValidInnerSig()) {
|
||||||
|
logInner(log, action, key, addressbook);
|
||||||
|
invalid++;
|
||||||
|
continue;
|
||||||
|
}
|
||||||
|
if (log != null) {
|
||||||
|
if (pod2.size() == 1)
|
||||||
|
log.append("Changing destination for " + key +
|
||||||
|
". From: " + addressbook.getLocation());
|
||||||
|
else
|
||||||
|
log.append("Replacing " + pod2.size() + " destinations for " + key +
|
||||||
|
". From: " + addressbook.getLocation());
|
||||||
|
}
|
||||||
|
allowExistingKeyInPublished = true;
|
||||||
|
props.setProperty("m", Long.toString(I2PAppContext.getGlobalContext().clock().now()));
|
||||||
|
} else {
|
||||||
|
// mismatch, disallow
|
||||||
|
logMismatch(log, action, key, pod2, polddest, addressbook);
|
||||||
|
invalid++;
|
||||||
|
continue;
|
||||||
|
}
|
||||||
|
} else {
|
||||||
|
logMissing(log, action, key, addressbook);
|
||||||
|
invalid++;
|
||||||
|
continue;
|
||||||
|
}
|
||||||
|
} else if (action.equals(HostTxtEntry.ACTION_CHANGENAME)) {
|
||||||
|
// Delete old name, replace with new
|
||||||
|
// This removes all previous destinations under that hostname,
|
||||||
|
// is this what we want?
|
||||||
|
if (isKnown) {
|
||||||
|
old++;
|
||||||
|
continue;
|
||||||
|
}
|
||||||
|
String poldname = hprops.getProperty(HostTxtEntry.PROP_OLDNAME);
|
||||||
|
if (poldname != null) {
|
||||||
|
List<Destination> pod = router.lookupAll(poldname);
|
||||||
|
if (pod == null) {
|
||||||
|
// we didn't have the old name
|
||||||
|
} else if (pod.contains(dest)) {
|
||||||
|
// checks out, so we'll delete it
|
||||||
|
if (knownNames != null)
|
||||||
|
knownNames.remove(poldname);
|
||||||
|
boolean success = router.remove(poldname, dest);
|
||||||
|
if (success)
|
||||||
|
deleted++;
|
||||||
|
if (log != null) {
|
||||||
|
if (success)
|
||||||
|
log.append("Removed: " + poldname +
|
||||||
|
" to be replaced with " + key +
|
||||||
|
". From: " + addressbook.getLocation());
|
||||||
|
else
|
||||||
|
log.append("Remove failed for: " + poldname +
|
||||||
|
" to be replaced with " + key +
|
||||||
|
". From: " + addressbook.getLocation());
|
||||||
|
}
|
||||||
|
// now update the published addressbook
|
||||||
|
if (published != null) {
|
||||||
|
if (publishedNS == null)
|
||||||
|
publishedNS = new SingleFileNamingService(I2PAppContext.getGlobalContext(), published.getAbsolutePath());
|
||||||
|
success = publishedNS.remove(poldname, dest);
|
||||||
|
if (log != null && !success)
|
||||||
|
log.append("Remove from published address book " + published.getAbsolutePath() + " failed for " + poldname);
|
||||||
|
}
|
||||||
|
} else {
|
||||||
|
// mismatch, disallow
|
||||||
|
logMismatch(log, action, key, pod, he.getDest(), addressbook);
|
||||||
|
continue;
|
||||||
|
}
|
||||||
|
} else {
|
||||||
|
logMissing(log, action, key, addressbook);
|
||||||
|
invalid++;
|
||||||
|
continue;
|
||||||
|
}
|
||||||
|
} else if (action.equals(HostTxtEntry.ACTION_REMOVE) ||
|
||||||
|
action.equals(HostTxtEntry.ACTION_REMOVEALL)) {
|
||||||
|
// w/o name=dest handled below
|
||||||
|
if (log != null)
|
||||||
|
log.append("Action: " + action + " with name=dest invalid" +
|
||||||
|
". From: " + addressbook.getLocation());
|
||||||
|
invalid++;
|
||||||
|
continue;
|
||||||
|
} else if (action.equals(HostTxtEntry.ACTION_UPDATE)) {
|
||||||
|
if (isKnown) {
|
||||||
|
allowExistingKeyInPublished = true;
|
||||||
|
props.setProperty("m", Long.toString(I2PAppContext.getGlobalContext().clock().now()));
|
||||||
|
}
|
||||||
|
} else {
|
||||||
|
if (log != null)
|
||||||
|
log.append("Action: " + action + " unrecognized" +
|
||||||
|
". From: " + addressbook.getLocation());
|
||||||
|
invalid++;
|
||||||
|
continue;
|
||||||
|
}
|
||||||
|
} // action != null
|
||||||
boolean success = router.put(key, dest, props);
|
boolean success = router.put(key, dest, props);
|
||||||
if (log != null) {
|
if (log != null) {
|
||||||
if (success)
|
if (success)
|
||||||
log.append("New address " + key +
|
log.append("New address " + key +
|
||||||
" added to address book. From: " + sub.getLocation());
|
" added to address book. From: " + addressbook.getLocation());
|
||||||
else
|
else
|
||||||
log.append("Save to naming service " + router + " failed for new key " + key);
|
log.append("Save to naming service " + router + " failed for new key " + key);
|
||||||
}
|
}
|
||||||
@ -171,59 +465,236 @@ public class Daemon {
|
|||||||
if (published != null) {
|
if (published != null) {
|
||||||
if (publishedNS == null)
|
if (publishedNS == null)
|
||||||
publishedNS = new SingleFileNamingService(I2PAppContext.getGlobalContext(), published.getAbsolutePath());
|
publishedNS = new SingleFileNamingService(I2PAppContext.getGlobalContext(), published.getAbsolutePath());
|
||||||
success = publishedNS.putIfAbsent(key, dest);
|
if (allowExistingKeyInPublished)
|
||||||
|
success = publishedNS.put(key, dest, props);
|
||||||
|
else
|
||||||
|
success = publishedNS.putIfAbsent(key, dest, props);
|
||||||
if (log != null && !success) {
|
if (log != null && !success) {
|
||||||
try {
|
log.append("Save to published address book " + published.getAbsolutePath() + " failed for new key " + key);
|
||||||
log.append("Save to published address book " + published.getCanonicalPath() + " failed for new key " + key);
|
|
||||||
} catch (IOException ioe) {}
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
if (isTextFile)
|
if (isTextFile)
|
||||||
// keep track for later dup check
|
// keep track for later dup check
|
||||||
knownNames.add(key);
|
knownNames.add(key);
|
||||||
nnew++;
|
nnew++;
|
||||||
|
} else if (key == null) {
|
||||||
|
// 'remove' actions
|
||||||
|
// isKnown is false
|
||||||
|
if (action != null) {
|
||||||
|
// Process commands. hprops is non-null.
|
||||||
|
if (action.equals(HostTxtEntry.ACTION_REMOVE)) {
|
||||||
|
// delete this entry
|
||||||
|
String polddest = hprops.getProperty(HostTxtEntry.PROP_DEST);
|
||||||
|
String poldname = hprops.getProperty(HostTxtEntry.PROP_NAME);
|
||||||
|
if (polddest != null && poldname != null) {
|
||||||
|
Destination pod = new Destination(polddest);
|
||||||
|
List<Destination> pod2 = router.lookupAll(poldname);
|
||||||
|
if (pod2 != null && pod2.contains(pod)) {
|
||||||
|
if (knownNames != null && pod2.size() == 1)
|
||||||
|
knownNames.remove(poldname);
|
||||||
|
boolean success = router.remove(poldname, pod);
|
||||||
|
if (success)
|
||||||
|
deleted++;
|
||||||
|
if (log != null) {
|
||||||
|
if (success)
|
||||||
|
log.append("Removed: " + poldname +
|
||||||
|
" as requested" +
|
||||||
|
". From: " + addressbook.getLocation());
|
||||||
|
else
|
||||||
|
log.append("Remove failed for: " + poldname +
|
||||||
|
" as requested" +
|
||||||
|
". From: " + addressbook.getLocation());
|
||||||
|
}
|
||||||
|
// now update the published addressbook
|
||||||
|
if (published != null) {
|
||||||
|
if (publishedNS == null)
|
||||||
|
publishedNS = new SingleFileNamingService(I2PAppContext.getGlobalContext(), published.getAbsolutePath());
|
||||||
|
success = publishedNS.remove(poldname, pod);
|
||||||
|
if (log != null && !success)
|
||||||
|
log.append("Remove from published address book " + published.getAbsolutePath() + " failed for " + poldname);
|
||||||
|
}
|
||||||
|
} else if (pod2 != null) {
|
||||||
|
// mismatch, disallow
|
||||||
|
logMismatch(log, action, key, pod2, polddest, addressbook);
|
||||||
|
invalid++;
|
||||||
|
} else {
|
||||||
|
old++;
|
||||||
|
}
|
||||||
|
} else {
|
||||||
|
logMissing(log, action, "delete", addressbook);
|
||||||
|
invalid++;
|
||||||
|
}
|
||||||
|
} else if (action.equals(HostTxtEntry.ACTION_REMOVEALL)) {
|
||||||
|
// delete all entries with this destination
|
||||||
|
String polddest = hprops.getProperty(HostTxtEntry.PROP_DEST);
|
||||||
|
// oldname is optional, but nice because not all books support reverse lookup
|
||||||
|
if (polddest != null) {
|
||||||
|
Destination pod = new Destination(polddest);
|
||||||
|
String poldname = hprops.getProperty(HostTxtEntry.PROP_NAME);
|
||||||
|
if (poldname != null) {
|
||||||
|
List<Destination> pod2 = router.lookupAll(poldname);
|
||||||
|
if (pod2 != null && pod2.contains(pod)) {
|
||||||
|
if (knownNames != null)
|
||||||
|
knownNames.remove(poldname);
|
||||||
|
boolean success = router.remove(poldname, pod);
|
||||||
|
if (success)
|
||||||
|
deleted++;
|
||||||
|
if (log != null) {
|
||||||
|
if (success)
|
||||||
|
log.append("Removed: " + poldname +
|
||||||
|
" as requested" +
|
||||||
|
". From: " + addressbook.getLocation());
|
||||||
|
else
|
||||||
|
log.append("Remove failed for: " + poldname +
|
||||||
|
" as requested" +
|
||||||
|
". From: " + addressbook.getLocation());
|
||||||
|
}
|
||||||
|
// now update the published addressbook
|
||||||
|
if (published != null) {
|
||||||
|
if (publishedNS == null)
|
||||||
|
publishedNS = new SingleFileNamingService(I2PAppContext.getGlobalContext(), published.getAbsolutePath());
|
||||||
|
success = publishedNS.remove(poldname, pod);
|
||||||
|
if (log != null && !success)
|
||||||
|
log.append("Remove from published address book " + published.getAbsolutePath() + " failed for " + poldname);
|
||||||
|
}
|
||||||
|
} else if (pod2 != null) {
|
||||||
|
// mismatch, disallow
|
||||||
|
logMismatch(log, action, key, pod2, polddest, addressbook);
|
||||||
|
invalid++;
|
||||||
|
} else {
|
||||||
|
old++;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
// reverse lookup, delete all
|
||||||
|
List<String> revs = router.reverseLookupAll(pod);
|
||||||
|
if (revs != null) {
|
||||||
|
for (String rev : revs) {
|
||||||
|
if (knownNames != null)
|
||||||
|
knownNames.remove(rev);
|
||||||
|
boolean success = router.remove(rev, pod);
|
||||||
|
if (success)
|
||||||
|
deleted++;
|
||||||
|
if (log != null) {
|
||||||
|
if (success)
|
||||||
|
log.append("Removed: " + rev +
|
||||||
|
" as requested" +
|
||||||
|
". From: " + addressbook.getLocation());
|
||||||
|
else
|
||||||
|
log.append("Remove failed for: " + rev +
|
||||||
|
" as requested" +
|
||||||
|
". From: " + addressbook.getLocation());
|
||||||
|
}
|
||||||
|
// now update the published addressbook
|
||||||
|
if (published != null) {
|
||||||
|
if (publishedNS == null)
|
||||||
|
publishedNS = new SingleFileNamingService(I2PAppContext.getGlobalContext(), published.getAbsolutePath());
|
||||||
|
success = publishedNS.remove(rev, pod);
|
||||||
|
if (log != null && !success)
|
||||||
|
log.append("Remove from published address book " + published.getAbsolutePath() + " failed for " + rev);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
} else {
|
||||||
|
logMissing(log, action, "delete", addressbook);
|
||||||
|
invalid++;
|
||||||
|
}
|
||||||
|
} else {
|
||||||
|
if (log != null)
|
||||||
|
log.append("Action: " + action + " w/o name=dest unrecognized" +
|
||||||
|
". From: " + addressbook.getLocation());
|
||||||
|
invalid++;
|
||||||
|
}
|
||||||
|
continue;
|
||||||
|
} else {
|
||||||
|
if (log != null)
|
||||||
|
log.append("No action in command line" +
|
||||||
|
". From: " + addressbook.getLocation());
|
||||||
|
invalid++;
|
||||||
|
continue;
|
||||||
|
}
|
||||||
} else if (log != null) {
|
} else if (log != null) {
|
||||||
log.append("Bad hostname " + key + " from "
|
log.append("Bad hostname " + key + ". From: "
|
||||||
+ sub.getLocation());
|
+ addressbook.getLocation());
|
||||||
invalid++;
|
invalid++;
|
||||||
}
|
}
|
||||||
|
/****
|
||||||
} else if (false && DEBUG && log != null) {
|
} else if (false && DEBUG && log != null) {
|
||||||
// lookup the conflict if we haven't yet (O(n**2) for text file)
|
// lookup the conflict if we haven't yet (O(n**2) for text file)
|
||||||
if (isTextFile)
|
if (isTextFile)
|
||||||
oldDest = router.lookup(key);
|
oldDest = router.lookup(key);
|
||||||
if (oldDest != null && !oldDest.toBase64().equals(entry.getValue())) {
|
if (oldDest != null && !oldDest.toBase64().equals(entry.getValue())) {
|
||||||
log.append("Conflict for " + key + " from "
|
log.append("Conflict for " + key + ". From: "
|
||||||
+ sub.getLocation()
|
+ addressbook.getLocation()
|
||||||
+ ". Destination in remote address book is "
|
+ ". Destination in remote address book is "
|
||||||
+ entry.getValue());
|
+ entry.getValue());
|
||||||
conflict++;
|
conflict++;
|
||||||
} else {
|
} else {
|
||||||
old++;
|
old++;
|
||||||
}
|
}
|
||||||
|
****/
|
||||||
} else {
|
} else {
|
||||||
old++;
|
old++;
|
||||||
}
|
}
|
||||||
} catch (DataFormatException dfe) {
|
} catch (DataFormatException dfe) {
|
||||||
if (log != null)
|
if (log != null)
|
||||||
log.append("Invalid b64 for " + key + " From: " + sub.getLocation());
|
log.append("Invalid b64 for " + key + " From: " + addressbook.getLocation());
|
||||||
invalid++;
|
invalid++;
|
||||||
}
|
}
|
||||||
total++;
|
|
||||||
}
|
}
|
||||||
if (DEBUG && log != null && total > 0) {
|
if (DEBUG && log != null && total > 0) {
|
||||||
log.append("Merge of " + sub.getLocation() + " into " + router +
|
log.append("Merge of " + addressbook.getLocation() + " into " + router +
|
||||||
" took " + (System.currentTimeMillis() - start) + " ms with " +
|
" took " + (System.currentTimeMillis() - start) + " ms with " +
|
||||||
total + " total, " +
|
total + " total, " +
|
||||||
nnew + " new, " +
|
nnew + " new, " +
|
||||||
old + " old, " +
|
old + " old, " +
|
||||||
|
deleted + " deleted, " +
|
||||||
invalid + " invalid, " +
|
invalid + " invalid, " +
|
||||||
conflict + " conflicts");
|
conflict + " conflicts");
|
||||||
}
|
} // entries
|
||||||
sub.delete();
|
addressbook.delete();
|
||||||
}
|
} // subscriptions
|
||||||
subscriptions.write();
|
subscriptions.write();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/** @since 0.9.26 */
|
||||||
|
private static void logInner(Log log, String action, String name, AddressBook addressbook) {
|
||||||
|
if (log != null) {
|
||||||
|
log.append("Action: " + action + " failed because" +
|
||||||
|
" inner signature for key " + name +
|
||||||
|
" failed" +
|
||||||
|
". From: " + addressbook.getLocation());
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
/** @since 0.9.26 */
|
||||||
|
private static void logMissing(Log log, String action, String name, AddressBook addressbook) {
|
||||||
|
if (log != null) {
|
||||||
|
log.append("Action: " + action + " for " + name +
|
||||||
|
" failed, missing required parameters" +
|
||||||
|
". From: " + addressbook.getLocation());
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
/** @since 0.9.26 */
|
||||||
|
private static void logMismatch(Log log, String action, String name, List<Destination> dests,
|
||||||
|
String olddest, AddressBook addressbook) {
|
||||||
|
if (log != null) {
|
||||||
|
StringBuilder buf = new StringBuilder(16);
|
||||||
|
final int sz = dests.size();
|
||||||
|
for (int i = 0; i < sz; i++) {
|
||||||
|
buf.append(dests.get(i).toBase64().substring(0, 6));
|
||||||
|
if (i != sz - 1)
|
||||||
|
buf.append(", ");
|
||||||
|
}
|
||||||
|
log.append("Action: " + action + " failed because" +
|
||||||
|
" destinations for " + name +
|
||||||
|
" (" + buf + ')' +
|
||||||
|
" do not include" +
|
||||||
|
" (" + olddest.substring(0, 6) + ')' +
|
||||||
|
". From: " + addressbook.getLocation());
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Run an update, using the Map settings to provide the parameters.
|
* Run an update, using the Map settings to provide the parameters.
|
||||||
*
|
*
|
||||||
@ -236,16 +707,12 @@ public class Daemon {
|
|||||||
File published = null;
|
File published = null;
|
||||||
boolean should_publish = Boolean.parseBoolean(settings.get("should_publish"));
|
boolean should_publish = Boolean.parseBoolean(settings.get("should_publish"));
|
||||||
if (should_publish)
|
if (should_publish)
|
||||||
published = new File(home, settings
|
published = new File(home, settings.get("published_addressbook"));
|
||||||
.get("published_addressbook"));
|
File subscriptionFile = new File(home, settings.get("subscriptions"));
|
||||||
File subscriptionFile = new File(home, settings
|
|
||||||
.get("subscriptions"));
|
|
||||||
File logFile = new File(home, settings.get("log"));
|
File logFile = new File(home, settings.get("log"));
|
||||||
File etagsFile = new File(home, settings.get("etags"));
|
File etagsFile = new File(home, settings.get("etags"));
|
||||||
File lastModifiedFile = new File(home, settings
|
File lastModifiedFile = new File(home, settings.get("last_modified"));
|
||||||
.get("last_modified"));
|
File lastFetchedFile = new File(home, settings.get("last_fetched"));
|
||||||
File lastFetchedFile = new File(home, settings
|
|
||||||
.get("last_fetched"));
|
|
||||||
long delay;
|
long delay;
|
||||||
try {
|
try {
|
||||||
delay = Long.parseLong(settings.get("update_delay"));
|
delay = Long.parseLong(settings.get("update_delay"));
|
||||||
@ -254,13 +721,14 @@ public class Daemon {
|
|||||||
}
|
}
|
||||||
delay *= 60 * 60 * 1000;
|
delay *= 60 * 60 * 1000;
|
||||||
|
|
||||||
List<String> defaultSubs = new LinkedList<String>();
|
List<String> defaultSubs = new ArrayList<String>(4);
|
||||||
// defaultSubs.add("http://i2p/NF2RLVUxVulR3IqK0sGJR0dHQcGXAzwa6rEO4WAWYXOHw-DoZhKnlbf1nzHXwMEJoex5nFTyiNMqxJMWlY54cvU~UenZdkyQQeUSBZXyuSweflUXFqKN-y8xIoK2w9Ylq1k8IcrAFDsITyOzjUKoOPfVq34rKNDo7fYyis4kT5bAHy~2N1EVMs34pi2RFabATIOBk38Qhab57Umpa6yEoE~rbyR~suDRvD7gjBvBiIKFqhFueXsR2uSrPB-yzwAGofTXuklofK3DdKspciclTVzqbDjsk5UXfu2nTrC1agkhLyqlOfjhyqC~t1IXm-Vs2o7911k7KKLGjB4lmH508YJ7G9fLAUyjuB-wwwhejoWqvg7oWvqo4oIok8LG6ECR71C3dzCvIjY2QcrhoaazA9G4zcGMm6NKND-H4XY6tUWhpB~5GefB3YczOqMbHq4wi0O9MzBFrOJEOs3X4hwboKWANf7DT5PZKJZ5KorQPsYRSq0E3wSOsFCSsdVCKUGsAAAA/i2p/hosts.txt");
|
// defaultSubs.add("http://i2p/NF2RLVUxVulR3IqK0sGJR0dHQcGXAzwa6rEO4WAWYXOHw-DoZhKnlbf1nzHXwMEJoex5nFTyiNMqxJMWlY54cvU~UenZdkyQQeUSBZXyuSweflUXFqKN-y8xIoK2w9Ylq1k8IcrAFDsITyOzjUKoOPfVq34rKNDo7fYyis4kT5bAHy~2N1EVMs34pi2RFabATIOBk38Qhab57Umpa6yEoE~rbyR~suDRvD7gjBvBiIKFqhFueXsR2uSrPB-yzwAGofTXuklofK3DdKspciclTVzqbDjsk5UXfu2nTrC1agkhLyqlOfjhyqC~t1IXm-Vs2o7911k7KKLGjB4lmH508YJ7G9fLAUyjuB-wwwhejoWqvg7oWvqo4oIok8LG6ECR71C3dzCvIjY2QcrhoaazA9G4zcGMm6NKND-H4XY6tUWhpB~5GefB3YczOqMbHq4wi0O9MzBFrOJEOs3X4hwboKWANf7DT5PZKJZ5KorQPsYRSq0E3wSOsFCSsdVCKUGsAAAA/i2p/hosts.txt");
|
||||||
defaultSubs.add(DEFAULT_SUB);
|
defaultSubs.add(DEFAULT_SUB);
|
||||||
|
|
||||||
SubscriptionList subscriptions = new SubscriptionList(subscriptionFile,
|
SubscriptionList subscriptions = new SubscriptionList(subscriptionFile,
|
||||||
etagsFile, lastModifiedFile, lastFetchedFile, delay, defaultSubs, settings
|
etagsFile, lastModifiedFile, lastFetchedFile,
|
||||||
.get("proxy_host"), Integer.parseInt(settings.get("proxy_port")));
|
delay, defaultSubs, settings.get("proxy_host"),
|
||||||
|
Integer.parseInt(settings.get("proxy_port")));
|
||||||
Log log = SystemVersion.isAndroid() ? null : new Log(logFile);
|
Log log = SystemVersion.isAndroid() ? null : new Log(logFile);
|
||||||
|
|
||||||
// If false, add hosts via naming service; if true, write hosts.txt file directly
|
// If false, add hosts via naming service; if true, write hosts.txt file directly
|
||||||
@ -319,7 +787,24 @@ public class Daemon {
|
|||||||
* others are ignored.
|
* others are ignored.
|
||||||
*/
|
*/
|
||||||
public static void main(String[] args) {
|
public static void main(String[] args) {
|
||||||
_instance.run(args);
|
if (args != null && args.length > 0 && args[0].equals("test"))
|
||||||
|
_instance.test(args);
|
||||||
|
else
|
||||||
|
_instance.run(args);
|
||||||
|
}
|
||||||
|
|
||||||
|
/** @since 0.9.26 */
|
||||||
|
private static void test(String[] args) {
|
||||||
|
Properties ctxProps = new Properties();
|
||||||
|
String PROP_FORCE = "i2p.naming.blockfile.writeInAppContext";
|
||||||
|
ctxProps.setProperty(PROP_FORCE, "true");
|
||||||
|
I2PAppContext ctx = new I2PAppContext(ctxProps);
|
||||||
|
NamingService ns = getNamingService("hosts.txt");
|
||||||
|
File published = new File("test-published.txt");
|
||||||
|
Log log = new Log(new File("test-log.txt"));
|
||||||
|
SubscriptionList subscriptions = new SubscriptionList("test-sub.txt");
|
||||||
|
update(ns, published, subscriptions, log);
|
||||||
|
ctx.logManager().flush();
|
||||||
}
|
}
|
||||||
|
|
||||||
public void run(String[] args) {
|
public void run(String[] args) {
|
||||||
|
@ -25,6 +25,7 @@ import java.util.Properties;
|
|||||||
|
|
||||||
import net.i2p.I2PAppContext;
|
import net.i2p.I2PAppContext;
|
||||||
import net.i2p.client.naming.NamingServiceUpdater;
|
import net.i2p.client.naming.NamingServiceUpdater;
|
||||||
|
import net.i2p.util.I2PAppThread;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* A thread that waits five minutes, then runs the addressbook daemon.
|
* A thread that waits five minutes, then runs the addressbook daemon.
|
||||||
@ -32,9 +33,9 @@ import net.i2p.client.naming.NamingServiceUpdater;
|
|||||||
* @author Ragnarok
|
* @author Ragnarok
|
||||||
*
|
*
|
||||||
*/
|
*/
|
||||||
public class DaemonThread extends Thread implements NamingServiceUpdater {
|
public class DaemonThread extends I2PAppThread implements NamingServiceUpdater {
|
||||||
|
|
||||||
private String[] args;
|
private final String[] args;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Construct a DaemonThread with the command line arguments args.
|
* Construct a DaemonThread with the command line arguments args.
|
||||||
|
@ -22,6 +22,7 @@
|
|||||||
package net.i2p.addressbook;
|
package net.i2p.addressbook;
|
||||||
|
|
||||||
import java.io.BufferedReader;
|
import java.io.BufferedReader;
|
||||||
|
import java.io.Closeable;
|
||||||
import java.io.File;
|
import java.io.File;
|
||||||
import java.io.FileInputStream;
|
import java.io.FileInputStream;
|
||||||
import java.io.IOException;
|
import java.io.IOException;
|
||||||
@ -31,6 +32,9 @@ import java.util.Locale;
|
|||||||
import java.util.Map;
|
import java.util.Map;
|
||||||
import java.util.NoSuchElementException;
|
import java.util.NoSuchElementException;
|
||||||
|
|
||||||
|
import net.i2p.client.naming.HostTxtEntry;
|
||||||
|
import net.i2p.data.DataHelper;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* A class to iterate through a hosts.txt or config file without
|
* A class to iterate through a hosts.txt or config file without
|
||||||
* reading the whole thing into memory.
|
* reading the whole thing into memory.
|
||||||
@ -39,22 +43,25 @@ import java.util.NoSuchElementException;
|
|||||||
* Callers should iterate all the way through or call close()
|
* Callers should iterate all the way through or call close()
|
||||||
* to ensure the underlying stream is closed.
|
* to ensure the underlying stream is closed.
|
||||||
*
|
*
|
||||||
* @since 0.8.7
|
* This is not used for config files.
|
||||||
|
* It is only used for subscriptions.
|
||||||
|
*
|
||||||
|
* @since 0.8.7, renamed from ConfigIterator in 0.9.26
|
||||||
*/
|
*/
|
||||||
class ConfigIterator implements Iterator<Map.Entry<String, String>> {
|
class HostTxtIterator implements Iterator<Map.Entry<String, HostTxtEntry>>, Closeable {
|
||||||
|
|
||||||
private BufferedReader input;
|
private BufferedReader input;
|
||||||
private ConfigEntry next;
|
private MapEntry next;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* A dummy iterator in which hasNext() is always false.
|
* A dummy iterator in which hasNext() is always false.
|
||||||
*/
|
*/
|
||||||
public ConfigIterator() {}
|
public HostTxtIterator() {}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* An iterator over the key/value pairs in the file.
|
* An iterator over the key/value pairs in the file.
|
||||||
*/
|
*/
|
||||||
public ConfigIterator(File file) throws IOException {
|
public HostTxtIterator(File file) throws IOException {
|
||||||
FileInputStream fileStream = new FileInputStream(file);
|
FileInputStream fileStream = new FileInputStream(file);
|
||||||
input = new BufferedReader(new InputStreamReader(fileStream, "UTF-8"));
|
input = new BufferedReader(new InputStreamReader(fileStream, "UTF-8"));
|
||||||
}
|
}
|
||||||
@ -65,15 +72,13 @@ class ConfigIterator implements Iterator<Map.Entry<String, String>> {
|
|||||||
if (next != null)
|
if (next != null)
|
||||||
return true;
|
return true;
|
||||||
try {
|
try {
|
||||||
String inputLine = input.readLine();
|
String inputLine;
|
||||||
while (inputLine != null) {
|
while ((inputLine = input.readLine()) != null) {
|
||||||
inputLine = ConfigParser.stripComments(inputLine);
|
HostTxtEntry he = HostTxtParser.parse(inputLine, true);
|
||||||
String[] splitLine = inputLine.split("=");
|
if (he == null)
|
||||||
if (splitLine.length == 2) {
|
continue;
|
||||||
next = new ConfigEntry(splitLine[0].trim().toLowerCase(Locale.US), splitLine[1].trim());
|
next = new MapEntry(he.getName(), he);
|
||||||
return true;
|
return true;
|
||||||
}
|
|
||||||
inputLine = input.readLine();
|
|
||||||
}
|
}
|
||||||
} catch (IOException ioe) {}
|
} catch (IOException ioe) {}
|
||||||
try { input.close(); } catch (IOException ioe) {}
|
try { input.close(); } catch (IOException ioe) {}
|
||||||
@ -82,10 +87,15 @@ class ConfigIterator implements Iterator<Map.Entry<String, String>> {
|
|||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
|
|
||||||
public Map.Entry<String, String> next() {
|
/**
|
||||||
|
* 'remove' entries will be returned with a null key,
|
||||||
|
* and the value will contain a null name, null dest,
|
||||||
|
* and non-null props.
|
||||||
|
*/
|
||||||
|
public Map.Entry<String, HostTxtEntry> next() {
|
||||||
if (!hasNext())
|
if (!hasNext())
|
||||||
throw new NoSuchElementException();
|
throw new NoSuchElementException();
|
||||||
Map.Entry<String, String> rv = next;
|
Map.Entry<String, HostTxtEntry> rv = next;
|
||||||
next = null;
|
next = null;
|
||||||
return rv;
|
return rv;
|
||||||
}
|
}
|
||||||
@ -108,11 +118,11 @@ class ConfigIterator implements Iterator<Map.Entry<String, String>> {
|
|||||||
/**
|
/**
|
||||||
* The object returned by the iterator.
|
* The object returned by the iterator.
|
||||||
*/
|
*/
|
||||||
private static class ConfigEntry implements Map.Entry<String, String> {
|
private static class MapEntry implements Map.Entry<String, HostTxtEntry> {
|
||||||
private final String key;
|
private final String key;
|
||||||
private final String value;
|
private final HostTxtEntry value;
|
||||||
|
|
||||||
public ConfigEntry(String k, String v) {
|
public MapEntry(String k, HostTxtEntry v) {
|
||||||
key = k;
|
key = k;
|
||||||
value = v;
|
value = v;
|
||||||
}
|
}
|
||||||
@ -121,11 +131,11 @@ class ConfigIterator implements Iterator<Map.Entry<String, String>> {
|
|||||||
return key;
|
return key;
|
||||||
}
|
}
|
||||||
|
|
||||||
public String getValue() {
|
public HostTxtEntry getValue() {
|
||||||
return value;
|
return value;
|
||||||
}
|
}
|
||||||
|
|
||||||
public String setValue(String v) {
|
public HostTxtEntry setValue(HostTxtEntry v) {
|
||||||
throw new UnsupportedOperationException();
|
throw new UnsupportedOperationException();
|
||||||
}
|
}
|
||||||
|
|
285
apps/addressbook/java/src/net/i2p/addressbook/HostTxtParser.java
Normal file
@ -0,0 +1,285 @@
|
|||||||
|
package net.i2p.addressbook;
|
||||||
|
|
||||||
|
import java.io.BufferedReader;
|
||||||
|
import java.io.BufferedWriter;
|
||||||
|
import java.io.File;
|
||||||
|
import java.io.FileInputStream;
|
||||||
|
import java.io.IOException;
|
||||||
|
import java.io.InputStreamReader;
|
||||||
|
import java.io.OutputStreamWriter;
|
||||||
|
import java.io.StringReader;
|
||||||
|
import java.util.ArrayList;
|
||||||
|
import java.util.HashMap;
|
||||||
|
import java.util.List;
|
||||||
|
import java.util.Locale;
|
||||||
|
import java.util.Map;
|
||||||
|
import java.util.Properties;
|
||||||
|
|
||||||
|
import net.i2p.client.naming.HostTxtEntry;
|
||||||
|
import net.i2p.data.DataHelper;
|
||||||
|
import net.i2p.util.SecureFile;
|
||||||
|
import net.i2p.util.SecureFileOutputStream;
|
||||||
|
import net.i2p.util.SystemVersion;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Utility class providing methods to parse and write files in a hosts.txt file
|
||||||
|
* format, and subscription file format.
|
||||||
|
*
|
||||||
|
* @since 0.9.26 modified from ConfigParser
|
||||||
|
*/
|
||||||
|
class HostTxtParser {
|
||||||
|
|
||||||
|
private static final boolean isWindows = SystemVersion.isWindows();
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Return a Map using the contents of BufferedReader input. input must have
|
||||||
|
* a single key, value pair on each line, in the format: key=value. Lines
|
||||||
|
* starting with '#' or ';' are considered comments, and ignored. Lines that
|
||||||
|
* are obviously not in the format key=value are also ignored.
|
||||||
|
* The key is converted to lower case.
|
||||||
|
*
|
||||||
|
* Returned map will not contain null ("remove") entries.
|
||||||
|
*
|
||||||
|
* @param input
|
||||||
|
* A BufferedReader with lines in key=value format to parse into
|
||||||
|
* a Map.
|
||||||
|
* @return A Map containing the key, value pairs from input.
|
||||||
|
* @throws IOException
|
||||||
|
* if the BufferedReader cannot be read.
|
||||||
|
*
|
||||||
|
*/
|
||||||
|
private static Map<String, HostTxtEntry> parse(BufferedReader input) throws IOException {
|
||||||
|
try {
|
||||||
|
Map<String, HostTxtEntry> result = new HashMap<String, HostTxtEntry>();
|
||||||
|
String inputLine;
|
||||||
|
while ((inputLine = input.readLine()) != null) {
|
||||||
|
HostTxtEntry he = parse(inputLine, false);
|
||||||
|
if (he == null)
|
||||||
|
continue;
|
||||||
|
result.put(he.getName(), he);
|
||||||
|
}
|
||||||
|
return result;
|
||||||
|
} finally {
|
||||||
|
try { input.close(); } catch (IOException ioe) {}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Return a HostTxtEntry from the contents of the inputLine.
|
||||||
|
*
|
||||||
|
* @param inputLine key=value[#!k1=v1#k2=v2...]
|
||||||
|
* @param allowCommandOnly if true, a line starting with #! will return
|
||||||
|
* a HostTxtEntry with a null name and dest and non-null props.
|
||||||
|
* If false, these lines will return null.
|
||||||
|
* @return null if no entry found or on error
|
||||||
|
*/
|
||||||
|
public static HostTxtEntry parse(String inputLine, boolean allowCommandOnly) {
|
||||||
|
if (inputLine.startsWith(";"))
|
||||||
|
return null;
|
||||||
|
int comment = inputLine.indexOf('#');
|
||||||
|
String kv;
|
||||||
|
String sprops;
|
||||||
|
if (comment >= 0) {
|
||||||
|
int shebang = inputLine.indexOf(HostTxtEntry.PROPS_SEPARATOR);
|
||||||
|
if (shebang == comment && shebang + 2 < inputLine.length()) {
|
||||||
|
if (comment == 0 && !allowCommandOnly)
|
||||||
|
return null;
|
||||||
|
sprops = inputLine.substring(shebang + 2);
|
||||||
|
} else {
|
||||||
|
if (comment == 0)
|
||||||
|
return null;
|
||||||
|
sprops = null;
|
||||||
|
}
|
||||||
|
kv = inputLine.substring(0, comment);
|
||||||
|
} else {
|
||||||
|
sprops = null;
|
||||||
|
kv = inputLine;
|
||||||
|
}
|
||||||
|
String name, dest;
|
||||||
|
if (comment != 0) {
|
||||||
|
// we have a name=dest
|
||||||
|
String[] splitLine = DataHelper.split(kv, "=", 2);
|
||||||
|
if (splitLine.length < 2)
|
||||||
|
return null;
|
||||||
|
name = splitLine[0].trim().toLowerCase(Locale.US);
|
||||||
|
dest = splitLine[1].trim();
|
||||||
|
if (name.length() == 0 || dest.length() == 0)
|
||||||
|
return null;
|
||||||
|
} else {
|
||||||
|
// line starts with #!, rv will contain props only
|
||||||
|
name = null;
|
||||||
|
dest = null;
|
||||||
|
}
|
||||||
|
HostTxtEntry he;
|
||||||
|
if (sprops != null) {
|
||||||
|
try {
|
||||||
|
he = new HostTxtEntry(name, dest, sprops);
|
||||||
|
} catch (IllegalArgumentException iae) {
|
||||||
|
return null;
|
||||||
|
}
|
||||||
|
} else {
|
||||||
|
he = new HostTxtEntry(name, dest);
|
||||||
|
}
|
||||||
|
return he;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Return a Map using the contents of the File file. See parse(BufferedReader)
|
||||||
|
* for details of the input format.
|
||||||
|
*
|
||||||
|
* Returned map will not contain null ("remove") entries.
|
||||||
|
*
|
||||||
|
* @param file
|
||||||
|
* A File to parse.
|
||||||
|
* @return A Map containing the key, value pairs from file.
|
||||||
|
* @throws IOException
|
||||||
|
* if file cannot be read.
|
||||||
|
*/
|
||||||
|
public static Map<String, HostTxtEntry> parse(File file) throws IOException {
|
||||||
|
FileInputStream fileStream = null;
|
||||||
|
try {
|
||||||
|
fileStream = new FileInputStream(file);
|
||||||
|
BufferedReader input = new BufferedReader(new InputStreamReader(
|
||||||
|
fileStream, "UTF-8"));
|
||||||
|
Map<String, HostTxtEntry> rv = parse(input);
|
||||||
|
return rv;
|
||||||
|
} finally {
|
||||||
|
if (fileStream != null) {
|
||||||
|
try {
|
||||||
|
fileStream.close();
|
||||||
|
} catch (IOException ioe) {}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Return a Map using the contents of the File file. If file cannot be read,
|
||||||
|
* use map instead, and write the result to where file should have been.
|
||||||
|
*
|
||||||
|
* Returned map will not contain null ("remove") entries.
|
||||||
|
*
|
||||||
|
* @param file
|
||||||
|
* A File to attempt to parse.
|
||||||
|
* @param map
|
||||||
|
* A Map containing values to use as defaults.
|
||||||
|
* @return A Map containing the key, value pairs from file, or if file
|
||||||
|
* cannot be read, map.
|
||||||
|
*/
|
||||||
|
public static Map<String, HostTxtEntry> parse(File file, Map<String, HostTxtEntry> map) {
|
||||||
|
Map<String, HostTxtEntry> result;
|
||||||
|
try {
|
||||||
|
result = parse(file);
|
||||||
|
for (Map.Entry<String, HostTxtEntry> entry : map.entrySet()) {
|
||||||
|
if (!result.containsKey(entry.getKey()))
|
||||||
|
result.put(entry.getKey(), entry.getValue());
|
||||||
|
}
|
||||||
|
} catch (IOException exp) {
|
||||||
|
result = map;
|
||||||
|
try {
|
||||||
|
write(result, file);
|
||||||
|
} catch (IOException exp2) {
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return result;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Write contents of Map map to BufferedWriter output. Output is written
|
||||||
|
* with one key, value pair on each line, in the format: key=value.
|
||||||
|
*
|
||||||
|
* @param map
|
||||||
|
* A Map to write to output.
|
||||||
|
* @param output
|
||||||
|
* A BufferedWriter to write the Map to.
|
||||||
|
* @throws IOException
|
||||||
|
* if the BufferedWriter cannot be written to.
|
||||||
|
*/
|
||||||
|
private static void write(Map<String, HostTxtEntry> map, BufferedWriter output) throws IOException {
|
||||||
|
try {
|
||||||
|
for (Map.Entry<String, HostTxtEntry> entry : map.entrySet()) {
|
||||||
|
entry.getValue().write(output);
|
||||||
|
}
|
||||||
|
} finally {
|
||||||
|
try { output.close(); } catch (IOException ioe) {}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Write contents of Map map to the File file. Output is written
|
||||||
|
* with one key, value pair on each line, in the format: key=value.
|
||||||
|
* Write to a temp file in the same directory and then rename, to not corrupt
|
||||||
|
* simultaneous accesses by the router. Except on Windows where renameTo()
|
||||||
|
* will fail if the target exists.
|
||||||
|
*
|
||||||
|
* @param map
|
||||||
|
* A Map to write to file.
|
||||||
|
* @param file
|
||||||
|
* A File to write the Map to.
|
||||||
|
* @throws IOException
|
||||||
|
* if file cannot be written to.
|
||||||
|
*/
|
||||||
|
public static void write(Map<String, HostTxtEntry> map, File file) throws IOException {
|
||||||
|
boolean success = false;
|
||||||
|
if (!isWindows) {
|
||||||
|
File tmp = SecureFile.createTempFile("temp-", ".tmp", file.getAbsoluteFile().getParentFile());
|
||||||
|
write(map, new BufferedWriter(new OutputStreamWriter(new SecureFileOutputStream(tmp), "UTF-8")));
|
||||||
|
success = tmp.renameTo(file);
|
||||||
|
if (!success) {
|
||||||
|
tmp.delete();
|
||||||
|
//System.out.println("Warning: addressbook rename fail from " + tmp + " to " + file);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
if (!success) {
|
||||||
|
// hmm, that didn't work, try it the old way
|
||||||
|
write(map, new BufferedWriter(new OutputStreamWriter(new SecureFileOutputStream(file), "UTF-8")));
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Usage: HostTxtParser validate example.i2p=b64dest[#!key1=val1#key2=val2]
|
||||||
|
*/
|
||||||
|
public static void main(String[] args) throws Exception {
|
||||||
|
if (args.length != 2 || !args[0].equals("validate")) {
|
||||||
|
System.err.println("Usage: HostTxtParser validate example.i2p=b64dest[#!key1=val1#key2=val2]");
|
||||||
|
System.exit(1);
|
||||||
|
}
|
||||||
|
HostTxtEntry e = parse(args[1].trim(), false);
|
||||||
|
if (e == null) {
|
||||||
|
System.err.println("Bad format");
|
||||||
|
System.exit(1);
|
||||||
|
}
|
||||||
|
if (!e.hasValidSig()) {
|
||||||
|
System.err.println("Bad signature");
|
||||||
|
System.exit(1);
|
||||||
|
}
|
||||||
|
Properties p = e.getProps();
|
||||||
|
if (p != null) {
|
||||||
|
if (p.containsKey(HostTxtEntry.PROP_ACTION) ||
|
||||||
|
p.containsKey(HostTxtEntry.PROP_OLDDEST) ||
|
||||||
|
p.containsKey(HostTxtEntry.PROP_OLDNAME) ||
|
||||||
|
p.containsKey(HostTxtEntry.PROP_OLDSIG)) {
|
||||||
|
if (!e.hasValidSig()) {
|
||||||
|
System.err.println("Bad inner signature");
|
||||||
|
System.exit(1);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
System.err.println("Good signature for " + e.getName());
|
||||||
|
System.exit(0);
|
||||||
|
}
|
||||||
|
|
||||||
|
/****
|
||||||
|
public static void test(String[] args) throws Exception {
|
||||||
|
File f = new File("tmp-hosts.txt");
|
||||||
|
Map<String, HostTxtEntry> map = parse(f);
|
||||||
|
for (HostTxtEntry e : map.values()) {
|
||||||
|
System.out.println("Host: " + e.getName() +
|
||||||
|
"\nDest: " + e.getDest() +
|
||||||
|
"\nAction: " + (e.getProps() != null ? e.getProps().getProperty("action") : "(none)") +
|
||||||
|
"\nValid Inner? " + e.hasValidInnerSig() +
|
||||||
|
"\nValid? " + e.hasValidSig() +
|
||||||
|
'\n');
|
||||||
|
}
|
||||||
|
}
|
||||||
|
****/
|
||||||
|
}
|
@ -36,7 +36,7 @@ import java.util.Date;
|
|||||||
*/
|
*/
|
||||||
class Log {
|
class Log {
|
||||||
|
|
||||||
private File file;
|
private final File file;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Construct a Log instance that writes to the File file.
|
* Construct a Log instance that writes to the File file.
|
||||||
@ -74,7 +74,9 @@ class Log {
|
|||||||
*
|
*
|
||||||
* @return The File that the log is writing to.
|
* @return The File that the log is writing to.
|
||||||
*/
|
*/
|
||||||
|
/****
|
||||||
public File getFile() {
|
public File getFile() {
|
||||||
return this.file;
|
return this.file;
|
||||||
}
|
}
|
||||||
|
****/
|
||||||
}
|
}
|
||||||
|
@ -29,10 +29,8 @@ package net.i2p.addressbook;
|
|||||||
*/
|
*/
|
||||||
class Subscription {
|
class Subscription {
|
||||||
|
|
||||||
private String location;
|
private final String location;
|
||||||
|
|
||||||
private String etag;
|
private String etag;
|
||||||
|
|
||||||
private String lastModified;
|
private String lastModified;
|
||||||
private long lastFetched;
|
private long lastFetched;
|
||||||
|
|
||||||
@ -41,14 +39,15 @@ class Subscription {
|
|||||||
* was last read at the time represented by etag and lastModified.
|
* was last read at the time represented by etag and lastModified.
|
||||||
*
|
*
|
||||||
* @param location
|
* @param location
|
||||||
* A String representing a url to a remote address book.
|
* A String representing a url to a remote address book. Non-null.
|
||||||
* @param etag
|
* @param etag
|
||||||
* The etag header that we recieved the last time we read this
|
* The etag header that we received the last time we read this
|
||||||
* subscription.
|
* subscription. May be null.
|
||||||
* @param lastModified
|
* @param lastModified
|
||||||
* the last-modified header we recieved the last time we read
|
* the last-modified header we received the last time we read
|
||||||
* this subscription.
|
* this subscription. May be null.
|
||||||
* @param lastFetched when the subscription was last fetched (Java time, as a String)
|
* @param lastFetched when the subscription was last fetched (Java time, as a String).
|
||||||
|
* May be null.
|
||||||
*/
|
*/
|
||||||
public Subscription(String location, String etag, String lastModified, String lastFetched) {
|
public Subscription(String location, String etag, String lastModified, String lastFetched) {
|
||||||
this.location = location;
|
this.location = location;
|
||||||
@ -71,7 +70,7 @@ class Subscription {
|
|||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Return the etag header that we recieved the last time we read this
|
* Return the etag header that we received the last time we read this
|
||||||
* subscription.
|
* subscription.
|
||||||
*
|
*
|
||||||
* @return A String containing the etag header.
|
* @return A String containing the etag header.
|
||||||
@ -91,7 +90,7 @@ class Subscription {
|
|||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Return the last-modified header that we recieved the last time we read
|
* Return the last-modified header that we received the last time we read
|
||||||
* this subscription.
|
* this subscription.
|
||||||
*
|
*
|
||||||
* @return A String containing the last-modified header.
|
* @return A String containing the last-modified header.
|
||||||
|
@ -26,6 +26,7 @@ import java.util.Iterator;
|
|||||||
import java.util.List;
|
import java.util.List;
|
||||||
|
|
||||||
import net.i2p.I2PAppContext;
|
import net.i2p.I2PAppContext;
|
||||||
|
import net.i2p.client.naming.HostTxtEntry;
|
||||||
import net.i2p.util.PortMapper;
|
import net.i2p.util.PortMapper;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@ -37,9 +38,9 @@ import net.i2p.util.PortMapper;
|
|||||||
*/
|
*/
|
||||||
class SubscriptionIterator implements Iterator<AddressBook> {
|
class SubscriptionIterator implements Iterator<AddressBook> {
|
||||||
|
|
||||||
private Iterator<Subscription> subIterator;
|
private final Iterator<Subscription> subIterator;
|
||||||
private String proxyHost;
|
private final String proxyHost;
|
||||||
private int proxyPort;
|
private final int proxyPort;
|
||||||
private final long delay;
|
private final long delay;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@ -75,8 +76,12 @@ class SubscriptionIterator implements Iterator<AddressBook> {
|
|||||||
*/
|
*/
|
||||||
public AddressBook next() {
|
public AddressBook next() {
|
||||||
Subscription sub = this.subIterator.next();
|
Subscription sub = this.subIterator.next();
|
||||||
if (sub.getLastFetched() + this.delay < I2PAppContext.getGlobalContext().clock().now() &&
|
if (sub.getLocation().startsWith("file:")) {
|
||||||
I2PAppContext.getGlobalContext().portMapper().getPort(PortMapper.SVC_HTTP_PROXY) >= 0) {
|
// test only
|
||||||
|
return new AddressBook(sub.getLocation().substring(5));
|
||||||
|
} else if (sub.getLastFetched() + this.delay < I2PAppContext.getGlobalContext().clock().now() &&
|
||||||
|
I2PAppContext.getGlobalContext().portMapper().getPort(PortMapper.SVC_HTTP_PROXY) >= 0 &&
|
||||||
|
!I2PAppContext.getGlobalContext().getBooleanProperty("i2p.vmCommSystem")) {
|
||||||
//System.err.println("Fetching addressbook from " + sub.getLocation());
|
//System.err.println("Fetching addressbook from " + sub.getLocation());
|
||||||
return new AddressBook(sub, this.proxyHost, this.proxyPort);
|
return new AddressBook(sub, this.proxyHost, this.proxyPort);
|
||||||
} else {
|
} else {
|
||||||
@ -84,7 +89,7 @@ class SubscriptionIterator implements Iterator<AddressBook> {
|
|||||||
// DataHelper.formatDuration(I2PAppContext.getGlobalContext().clock().now() - sub.getLastFetched()) +
|
// DataHelper.formatDuration(I2PAppContext.getGlobalContext().clock().now() - sub.getLastFetched()) +
|
||||||
// " ago but the minimum delay is " +
|
// " ago but the minimum delay is " +
|
||||||
// DataHelper.formatDuration(this.delay));
|
// DataHelper.formatDuration(this.delay));
|
||||||
return new AddressBook(Collections.<String, String> emptyMap());
|
return new AddressBook(Collections.<String, HostTxtEntry>emptyMap());
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -23,8 +23,9 @@ package net.i2p.addressbook;
|
|||||||
|
|
||||||
import java.io.File;
|
import java.io.File;
|
||||||
import java.io.IOException;
|
import java.io.IOException;
|
||||||
|
import java.util.ArrayList;
|
||||||
|
import java.util.Collections;
|
||||||
import java.util.HashMap;
|
import java.util.HashMap;
|
||||||
import java.util.LinkedList;
|
|
||||||
import java.util.List;
|
import java.util.List;
|
||||||
import java.util.Map;
|
import java.util.Map;
|
||||||
|
|
||||||
@ -34,19 +35,15 @@ import java.util.Map;
|
|||||||
* @author Ragnarok
|
* @author Ragnarok
|
||||||
*
|
*
|
||||||
*/
|
*/
|
||||||
class SubscriptionList {
|
class SubscriptionList implements Iterable<AddressBook> {
|
||||||
|
|
||||||
private List<Subscription> subscriptions;
|
private final List<Subscription> subscriptions;
|
||||||
|
private final File etagsFile;
|
||||||
private File etagsFile;
|
private final File lastModifiedFile;
|
||||||
|
private final File lastFetchedFile;
|
||||||
private File lastModifiedFile;
|
|
||||||
private File lastFetchedFile;
|
|
||||||
private final long delay;
|
private final long delay;
|
||||||
|
private final String proxyHost;
|
||||||
private String proxyHost;
|
private final int proxyPort;
|
||||||
|
|
||||||
private int proxyPort;
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Construct a SubscriptionList using the urls from locationsFile and, if
|
* Construct a SubscriptionList using the urls from locationsFile and, if
|
||||||
@ -69,7 +66,7 @@ class SubscriptionList {
|
|||||||
public SubscriptionList(File locationsFile, File etagsFile,
|
public SubscriptionList(File locationsFile, File etagsFile,
|
||||||
File lastModifiedFile, File lastFetchedFile, long delay, List<String> defaultSubs, String proxyHost,
|
File lastModifiedFile, File lastFetchedFile, long delay, List<String> defaultSubs, String proxyHost,
|
||||||
int proxyPort) {
|
int proxyPort) {
|
||||||
this.subscriptions = new LinkedList<Subscription>();
|
this.subscriptions = new ArrayList<Subscription>(4);
|
||||||
this.etagsFile = etagsFile;
|
this.etagsFile = etagsFile;
|
||||||
this.lastModifiedFile = lastModifiedFile;
|
this.lastModifiedFile = lastModifiedFile;
|
||||||
this.lastFetchedFile = lastFetchedFile;
|
this.lastFetchedFile = lastFetchedFile;
|
||||||
@ -84,17 +81,17 @@ class SubscriptionList {
|
|||||||
try {
|
try {
|
||||||
etags = ConfigParser.parse(etagsFile);
|
etags = ConfigParser.parse(etagsFile);
|
||||||
} catch (IOException exp) {
|
} catch (IOException exp) {
|
||||||
etags = new HashMap<String, String>();
|
etags = Collections.<String, String>emptyMap();
|
||||||
}
|
}
|
||||||
try {
|
try {
|
||||||
lastModified = ConfigParser.parse(lastModifiedFile);
|
lastModified = ConfigParser.parse(lastModifiedFile);
|
||||||
} catch (IOException exp) {
|
} catch (IOException exp) {
|
||||||
lastModified = new HashMap<String, String>();
|
lastModified = Collections.<String, String>emptyMap();
|
||||||
}
|
}
|
||||||
try {
|
try {
|
||||||
lastFetched = ConfigParser.parse(lastFetchedFile);
|
lastFetched = ConfigParser.parse(lastFetchedFile);
|
||||||
} catch (IOException exp) {
|
} catch (IOException exp) {
|
||||||
lastFetched = new HashMap<String, String>();
|
lastFetched = Collections.<String, String>emptyMap();
|
||||||
}
|
}
|
||||||
for (String location : locations) {
|
for (String location : locations) {
|
||||||
this.subscriptions.add(new Subscription(location, etags.get(location),
|
this.subscriptions.add(new Subscription(location, etags.get(location),
|
||||||
@ -103,6 +100,24 @@ class SubscriptionList {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Testing only.
|
||||||
|
*
|
||||||
|
* @param hoststxt path to a local file used as the test 'subscription' input
|
||||||
|
* @since 0.9.26
|
||||||
|
*/
|
||||||
|
public SubscriptionList(String hoststxt) {
|
||||||
|
File dummy = new File("/dev/null");
|
||||||
|
this.etagsFile = dummy;
|
||||||
|
this.lastModifiedFile = dummy;
|
||||||
|
this.lastFetchedFile = dummy;
|
||||||
|
this.delay = 0;
|
||||||
|
this.proxyHost = "127.0.0.1";
|
||||||
|
this.proxyPort = 4444;
|
||||||
|
Subscription sub = new Subscription("file:" + hoststxt, null, null, null);
|
||||||
|
this.subscriptions = Collections.singletonList(sub);
|
||||||
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Return an iterator over the AddressBooks represented by the Subscriptions
|
* Return an iterator over the AddressBooks represented by the Subscriptions
|
||||||
* in this SubscriptionList.
|
* in this SubscriptionList.
|
||||||
@ -121,9 +136,10 @@ class SubscriptionList {
|
|||||||
* won't be read back correctly; the '=' should be escaped.
|
* won't be read back correctly; the '=' should be escaped.
|
||||||
*/
|
*/
|
||||||
public void write() {
|
public void write() {
|
||||||
Map<String, String> etags = new HashMap<String, String>();
|
int sz = subscriptions.size();
|
||||||
Map<String, String> lastModified = new HashMap<String, String>();
|
Map<String, String> etags = new HashMap<String, String>(sz);
|
||||||
Map<String, String> lastFetched = new HashMap<String, String>();
|
Map<String, String> lastModified = new HashMap<String, String>(sz);
|
||||||
|
Map<String, String> lastFetched = new HashMap<String, String>(sz);
|
||||||
for (Subscription sub : this.subscriptions) {
|
for (Subscription sub : this.subscriptions) {
|
||||||
if (sub.getEtag() != null) {
|
if (sub.getEtag() != null) {
|
||||||
etags.put(sub.getLocation(), sub.getEtag());
|
etags.put(sub.getLocation(), sub.getEtag());
|
||||||
@ -131,13 +147,16 @@ class SubscriptionList {
|
|||||||
if (sub.getLastModified() != null) {
|
if (sub.getLastModified() != null) {
|
||||||
lastModified.put(sub.getLocation(), sub.getLastModified());
|
lastModified.put(sub.getLocation(), sub.getLastModified());
|
||||||
}
|
}
|
||||||
lastFetched.put(sub.getLocation(), "" + sub.getLastFetched());
|
lastFetched.put(sub.getLocation(), Long.toString(sub.getLastFetched()));
|
||||||
}
|
}
|
||||||
try {
|
try {
|
||||||
ConfigParser.write(etags, this.etagsFile);
|
ConfigParser.write(etags, this.etagsFile);
|
||||||
|
} catch (IOException exp) {}
|
||||||
|
try {
|
||||||
ConfigParser.write(lastModified, this.lastModifiedFile);
|
ConfigParser.write(lastModified, this.lastModifiedFile);
|
||||||
|
} catch (IOException exp) {}
|
||||||
|
try {
|
||||||
ConfigParser.write(lastFetched, this.lastFetchedFile);
|
ConfigParser.write(lastFetched, this.lastFetchedFile);
|
||||||
} catch (IOException exp) {
|
} catch (IOException exp) {}
|
||||||
}
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -1,7 +1,7 @@
|
|||||||
<html>
|
<html>
|
||||||
<body>
|
<body>
|
||||||
<p>
|
<p>
|
||||||
The addressbook application, which fetches hosts.txt files from subscription URLS via
|
The addressbook application, which fetches hosts.txt files from subscription URLs via
|
||||||
HTTP and adds new hosts to the local database.
|
HTTP and adds new hosts to the local database.
|
||||||
While implemented as a webapp, this application contains no user interface.
|
While implemented as a webapp, this application contains no user interface.
|
||||||
May also be packaged as a jar, as is done for Android.
|
May also be packaged as a jar, as is done for Android.
|
||||||
|
14
apps/admin/admin.iml
Normal file
@ -0,0 +1,14 @@
|
|||||||
|
<?xml version="1.0" encoding="UTF-8"?>
|
||||||
|
<module type="JAVA_MODULE" version="4">
|
||||||
|
<component name="NewModuleRootManager" inherit-compiler-output="true">
|
||||||
|
<exclude-output />
|
||||||
|
<content url="file://$MODULE_DIR$">
|
||||||
|
<sourceFolder url="file://$MODULE_DIR$/java/src" isTestSource="false" />
|
||||||
|
</content>
|
||||||
|
<orderEntry type="inheritedJdk" />
|
||||||
|
<orderEntry type="sourceFolder" forTests="false" />
|
||||||
|
<orderEntry type="module" module-name="core" />
|
||||||
|
<orderEntry type="module" module-name="router" />
|
||||||
|
<orderEntry type="module" module-name="routerconsole" />
|
||||||
|
</component>
|
||||||
|
</module>
|
@ -11,8 +11,10 @@ import java.util.Iterator;
|
|||||||
import java.util.Set;
|
import java.util.Set;
|
||||||
|
|
||||||
import net.i2p.data.Hash;
|
import net.i2p.data.Hash;
|
||||||
|
import net.i2p.data.DataHelper;
|
||||||
import net.i2p.router.Router;
|
import net.i2p.router.Router;
|
||||||
import net.i2p.router.RouterContext;
|
import net.i2p.router.RouterContext;
|
||||||
|
import net.i2p.router.web.StatsGenerator;
|
||||||
import net.i2p.util.I2PThread;
|
import net.i2p.util.I2PThread;
|
||||||
import net.i2p.util.Log;
|
import net.i2p.util.Log;
|
||||||
|
|
||||||
@ -47,8 +49,8 @@ class AdminRunner implements Runnable {
|
|||||||
reply(out, "this is not a website");
|
reply(out, "this is not a website");
|
||||||
} else if ( (command.indexOf("routerStats.html") >= 0) || (command.indexOf("oldstats.jsp") >= 0) ) {
|
} else if ( (command.indexOf("routerStats.html") >= 0) || (command.indexOf("oldstats.jsp") >= 0) ) {
|
||||||
try {
|
try {
|
||||||
out.write("HTTP/1.1 200 OK\nConnection: close\nCache-control: no-cache\nContent-type: text/html\n\n".getBytes());
|
out.write(DataHelper.getASCII("HTTP/1.1 200 OK\nConnection: close\nCache-control: no-cache\nContent-type: text/html\n\n"));
|
||||||
_generator.generateStatsPage(new OutputStreamWriter(out));
|
_generator.generateStatsPage(new OutputStreamWriter(out), true);
|
||||||
out.close();
|
out.close();
|
||||||
} catch (IOException ioe) {
|
} catch (IOException ioe) {
|
||||||
if (_log.shouldLog(Log.WARN))
|
if (_log.shouldLog(Log.WARN))
|
||||||
@ -61,8 +63,9 @@ class AdminRunner implements Runnable {
|
|||||||
reply(out, shutdown(command));
|
reply(out, shutdown(command));
|
||||||
} else if (true || command.indexOf("routerConsole.html") > 0) {
|
} else if (true || command.indexOf("routerConsole.html") > 0) {
|
||||||
try {
|
try {
|
||||||
out.write("HTTP/1.1 200 OK\nConnection: close\nCache-control: no-cache\nContent-type: text/html\n\n".getBytes());
|
out.write(DataHelper.getASCII("HTTP/1.1 200 OK\nConnection: close\nCache-control: no-cache\nContent-type: text/html\n\n"));
|
||||||
_context.router().renderStatusHTML(new OutputStreamWriter(out));
|
// TODO Not technically the same as router().renderStatusHTML() was
|
||||||
|
_context.routerAppManager().renderStatusHTML(new OutputStreamWriter(out));
|
||||||
out.close();
|
out.close();
|
||||||
} catch (IOException ioe) {
|
} catch (IOException ioe) {
|
||||||
if (_log.shouldLog(Log.WARN))
|
if (_log.shouldLog(Log.WARN))
|
||||||
@ -80,7 +83,7 @@ class AdminRunner implements Runnable {
|
|||||||
reply.append("Content-type: text/html\n\n");
|
reply.append("Content-type: text/html\n\n");
|
||||||
reply.append(content);
|
reply.append(content);
|
||||||
try {
|
try {
|
||||||
out.write(reply.toString().getBytes());
|
out.write(DataHelper.getASCII(reply.toString()));
|
||||||
out.close();
|
out.close();
|
||||||
} catch (IOException ioe) {
|
} catch (IOException ioe) {
|
||||||
if (_log.shouldLog(Log.WARN))
|
if (_log.shouldLog(Log.WARN))
|
||||||
@ -97,7 +100,7 @@ class AdminRunner implements Runnable {
|
|||||||
reply.append("Content-type: text/plain\n\n");
|
reply.append("Content-type: text/plain\n\n");
|
||||||
reply.append(content);
|
reply.append(content);
|
||||||
try {
|
try {
|
||||||
out.write(reply.toString().getBytes());
|
out.write(DataHelper.getASCII(reply.toString()));
|
||||||
out.close();
|
out.close();
|
||||||
} catch (IOException ioe) {
|
} catch (IOException ioe) {
|
||||||
if (_log.shouldLog(Log.WARN))
|
if (_log.shouldLog(Log.WARN))
|
||||||
|
@ -1,4 +1,4 @@
|
|||||||
# Last Modified: Sun Apr 12 22:08:32 2015
|
#Last Modified: Sun Dec 06 12:30:32 2015
|
||||||
# vim:syntax=apparmor et ts=8 sw=4
|
# vim:syntax=apparmor et ts=8 sw=4
|
||||||
|
|
||||||
#include <tunables/global>
|
#include <tunables/global>
|
||||||
@ -15,7 +15,7 @@ $INSTALL_PATH/{i2prouter,runplain.sh} flags=(complain) {
|
|||||||
|
|
||||||
$INSTALL_PATH/ r,
|
$INSTALL_PATH/ r,
|
||||||
$INSTALL_PATH/{i2psvc,wrapper} rmix,
|
$INSTALL_PATH/{i2psvc,wrapper} rmix,
|
||||||
owner $INSTALL_PATH/** rwklm,
|
owner $INSTALL_PATH/** rwkm,
|
||||||
|
|
||||||
# Needed for Java
|
# Needed for Java
|
||||||
owner @{PROC} r,
|
owner @{PROC} r,
|
||||||
@ -57,7 +57,7 @@ $INSTALL_PATH/{i2prouter,runplain.sh} flags=(complain) {
|
|||||||
/usr/share/java/eclipse-ecj-*.jar r,
|
/usr/share/java/eclipse-ecj-*.jar r,
|
||||||
|
|
||||||
/{,var/}tmp/ rwm,
|
/{,var/}tmp/ rwm,
|
||||||
owner /{,var/}tmp/** rwklm,
|
owner /{,var/}tmp/** rwkm,
|
||||||
|
|
||||||
/{,usr/}bin/{,b,d}ash rix,
|
/{,usr/}bin/{,b,d}ash rix,
|
||||||
/{,usr/}bin/cat rix,
|
/{,usr/}bin/cat rix,
|
||||||
|
@ -5,10 +5,9 @@
|
|||||||
<property name="build" value="build"/>
|
<property name="build" value="build"/>
|
||||||
<property name="dist" location="dist"/>
|
<property name="dist" location="dist"/>
|
||||||
<property name="jar" value="desktopgui.jar"/>
|
<property name="jar" value="desktopgui.jar"/>
|
||||||
<property name="resources" value="resources"/>
|
<property name="javadoc" value="javadoc"/>
|
||||||
<property name="javadoc" value="javadoc"/>
|
|
||||||
<property name="javac.compilerargs" value=""/>
|
<property name="javac.compilerargs" value=""/>
|
||||||
<property name="javac.version" value="1.6" />
|
<property name="javac.version" value="1.7" />
|
||||||
<property name="require.gettext" value="true" />
|
<property name="require.gettext" value="true" />
|
||||||
|
|
||||||
<condition property="no.bundle">
|
<condition property="no.bundle">
|
||||||
@ -17,9 +16,8 @@
|
|||||||
|
|
||||||
<target name="init">
|
<target name="init">
|
||||||
<mkdir dir="${build}"/>
|
<mkdir dir="${build}"/>
|
||||||
<mkdir dir="${build}/${resources}"/>
|
<mkdir dir="${build}/messages-src"/>
|
||||||
<mkdir dir="${build}/${javadoc}"/>
|
<mkdir dir="${dist}"/>
|
||||||
<mkdir dir="${dist}"/>
|
|
||||||
</target>
|
</target>
|
||||||
|
|
||||||
<target name="clean">
|
<target name="clean">
|
||||||
@ -27,35 +25,36 @@
|
|||||||
<delete dir="${dist}"/>
|
<delete dir="${dist}"/>
|
||||||
</target>
|
</target>
|
||||||
|
|
||||||
<target name="compile" depends="init">
|
<target name="compile" depends="init">
|
||||||
<javac debug="true" deprecation="on" source="${javac.version}" target="${javac.version}"
|
<javac debug="true" deprecation="on" source="${javac.version}" target="${javac.version}"
|
||||||
includeAntRuntime="false"
|
includeAntRuntime="false"
|
||||||
srcdir="${src}" destdir="${build}">
|
srcdir="${src}" destdir="${build}">
|
||||||
<compilerarg line="${javac.compilerargs}" />
|
<compilerarg line="${javac.compilerargs}" />
|
||||||
<classpath>
|
<classpath>
|
||||||
<pathelement location="../../core/java/build/i2p.jar" />
|
<pathelement location="../../core/java/build/i2p.jar" />
|
||||||
<pathelement location="../../installer/lib/wrapper/all/wrapper.jar" />
|
<pathelement location="../../installer/lib/wrapper/all/wrapper.jar" />
|
||||||
<pathelement location="../../router/java/build/router.jar" />
|
<pathelement location="../../router/java/build/router.jar" />
|
||||||
</classpath>
|
</classpath>
|
||||||
</javac>
|
</javac>
|
||||||
<copy todir="${build}/desktopgui/${resources}">
|
</target>
|
||||||
<fileset dir="${resources}" />
|
|
||||||
</copy>
|
|
||||||
</target>
|
|
||||||
|
|
||||||
<target name="bundle" unless="no.bundle">
|
<target name="bundle" unless="no.bundle" depends="init">
|
||||||
<exec executable="sh" osfamily="unix" failifexecutionfails="true" failonerror="${require.gettext}" >
|
<exec executable="sh" osfamily="unix" failifexecutionfails="true" failonerror="${require.gettext}" >
|
||||||
<env key="JAVA_HOME" value="${java.home}" />
|
<env key="JAVA_HOME" value="${java.home}" />
|
||||||
<arg value="./bundle-messages.sh" />
|
<arg value="./bundle-messages.sh" />
|
||||||
</exec>
|
</exec>
|
||||||
<exec executable="sh" osfamily="mac" failifexecutionfails="true" failonerror="${require.gettext}" >
|
<exec executable="sh" osfamily="mac" failifexecutionfails="true" failonerror="${require.gettext}" >
|
||||||
<arg value="./bundle-messages.sh" />
|
<arg value="./bundle-messages.sh" />
|
||||||
</exec>
|
</exec>
|
||||||
<!-- multi-lang is optional -->
|
<exec executable="sh" osfamily="windows" failifexecutionfails="false" >
|
||||||
<exec executable="sh" osfamily="windows" failifexecutionfails="false" >
|
<arg value="./bundle-messages.sh" />
|
||||||
<arg value="./bundle-messages.sh" />
|
</exec>
|
||||||
</exec>
|
<javac source="${javac.version}" target="${javac.version}"
|
||||||
</target>
|
includeAntRuntime="false"
|
||||||
|
srcdir="${build}/messages-src" destdir="${build}">
|
||||||
|
<compilerarg line="${javac.compilerargs}" />
|
||||||
|
</javac>
|
||||||
|
</target>
|
||||||
|
|
||||||
<target name="listChangedFiles" depends="jarUpToDate" if="shouldListChanges" >
|
<target name="listChangedFiles" depends="jarUpToDate" if="shouldListChanges" >
|
||||||
<exec executable="mtn" outputproperty="workspace.changes" errorproperty="mtn.error2" failifexecutionfails="false" >
|
<exec executable="mtn" outputproperty="workspace.changes" errorproperty="mtn.error2" failifexecutionfails="false" >
|
||||||
@ -74,12 +73,18 @@
|
|||||||
<target name="jar" depends="compile, bundle, listChangedFiles" unless="jar.uptodate" >
|
<target name="jar" depends="compile, bundle, listChangedFiles" unless="jar.uptodate" >
|
||||||
<!-- set if unset -->
|
<!-- set if unset -->
|
||||||
<property name="workspace.changes.tr" value="" />
|
<property name="workspace.changes.tr" value="" />
|
||||||
<jar basedir="${build}" destfile="${dist}/${jar}">
|
<!-- ideal for linux: 24x24, but transparency doesn't work -->
|
||||||
|
<copy tofile="${build}/desktopgui/resources/images/logo.png" file="../../installer/resources/themes/console/images/itoopie_xsm.png" />
|
||||||
|
<copy todir="${build}/desktopgui/resources/images" file="images/itoopie_black_24.png" />
|
||||||
|
<copy todir="${build}/desktopgui/resources/images" file="images/itoopie_white_24.png" />
|
||||||
|
<jar basedir="${build}" excludes="messages-src/**" destfile="${dist}/${jar}">
|
||||||
<manifest>
|
<manifest>
|
||||||
<attribute name="Main-Class" value="net.i2p.desktopgui.Main"/>
|
<attribute name="Main-Class" value="net.i2p.desktopgui.Main"/>
|
||||||
<attribute name="Build-Date" value="${build.timestamp}" />
|
<attribute name="Build-Date" value="${build.timestamp}" />
|
||||||
<attribute name="Base-Revision" value="${workspace.version}" />
|
<attribute name="Base-Revision" value="${workspace.version}" />
|
||||||
<attribute name="Workspace-Changes" value="${workspace.changes.tr}" />
|
<attribute name="Workspace-Changes" value="${workspace.changes.tr}" />
|
||||||
|
<attribute name="X-Compile-Source-JDK" value="${javac.version}" />
|
||||||
|
<attribute name="X-Compile-Target-JDK" value="${javac.version}" />
|
||||||
</manifest>
|
</manifest>
|
||||||
</jar>
|
</jar>
|
||||||
</target>
|
</target>
|
||||||
|
@ -31,7 +31,7 @@ if which find|grep -q -i windows ; then
|
|||||||
export PATH=.:/bin:/usr/local/bin:$PATH
|
export PATH=.:/bin:/usr/local/bin:$PATH
|
||||||
fi
|
fi
|
||||||
# Fast mode - update ondemond
|
# Fast mode - update ondemond
|
||||||
# set LG2 to the language you need in envrionment varibales to enable this
|
# set LG2 to the language you need in environment variables to enable this
|
||||||
|
|
||||||
# add ../java/ so the refs will work in the po file
|
# add ../java/ so the refs will work in the po file
|
||||||
JPATHS="src"
|
JPATHS="src"
|
||||||
@ -64,19 +64,19 @@ do
|
|||||||
echo "Updating the $i file from the tags..."
|
echo "Updating the $i file from the tags..."
|
||||||
# extract strings from java and jsp files, and update messages.po files
|
# extract strings from java and jsp files, and update messages.po files
|
||||||
# translate calls must be one of the forms:
|
# translate calls must be one of the forms:
|
||||||
# _("foo")
|
# _t("foo")
|
||||||
# _x("foo")
|
# _x("foo")
|
||||||
# intl._("foo")
|
# intl._t("foo")
|
||||||
# intl.title("foo")
|
# intl.title("foo")
|
||||||
# handler._("foo")
|
# handler._t("foo")
|
||||||
# formhandler._("foo")
|
# formhandler._t("foo")
|
||||||
# net.i2p.router.web.Messages.getString("foo")
|
# net.i2p.router.web.Messages.getString("foo")
|
||||||
# In a jsp, you must use a helper or handler that has the context set.
|
# In a jsp, you must use a helper or handler that has the context set.
|
||||||
# To start a new translation, copy the header from an old translation to the new .po file,
|
# To start a new translation, copy the header from an old translation to the new .po file,
|
||||||
# then ant distclean updater.
|
# then ant distclean updater.
|
||||||
find $JPATHS -name *.java > $TMPFILE
|
find $JPATHS -name *.java > $TMPFILE
|
||||||
xgettext -f $TMPFILE -F -L java --from-code=UTF-8 --add-comments\
|
xgettext -f $TMPFILE -F -L java --from-code=UTF-8 --add-comments\
|
||||||
--keyword=_ --keyword=_x --keyword=intl._ --keyword=intl.title \
|
--keyword=_t --keyword=_x --keyword=intl._ --keyword=intl.title \
|
||||||
--keyword=handler._ --keyword=formhandler._ \
|
--keyword=handler._ --keyword=formhandler._ \
|
||||||
--keyword=net.i2p.router.web.Messages.getString \
|
--keyword=net.i2p.router.web.Messages.getString \
|
||||||
-o ${i}t
|
-o ${i}t
|
||||||
@ -105,15 +105,40 @@ do
|
|||||||
# only generate for non-source language
|
# only generate for non-source language
|
||||||
echo "Generating ${CLASS}_$LG ResourceBundle..."
|
echo "Generating ${CLASS}_$LG ResourceBundle..."
|
||||||
|
|
||||||
# convert to class files in build
|
msgfmt -V | grep -q '0\.19'
|
||||||
msgfmt --java --statistics -r $CLASS -l $LG -d build $i
|
|
||||||
if [ $? -ne 0 ]
|
if [ $? -ne 0 ]
|
||||||
then
|
then
|
||||||
echo "ERROR - msgfmt failed on ${i}, not updating translations"
|
# slow way
|
||||||
# msgfmt leaves the class file there so the build would work the next time
|
# convert to class files in build
|
||||||
find build -name messages_${LG}.class -exec rm -f {} \;
|
msgfmt --java --statistics -r $CLASS -l $LG -d build $i
|
||||||
RC=1
|
if [ $? -ne 0 ]
|
||||||
break
|
then
|
||||||
|
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
|
||||||
|
else
|
||||||
|
# fast way
|
||||||
|
# convert to java files in build/messages-src
|
||||||
|
TD=build/messages-src-tmp
|
||||||
|
TDX=$TD/net/i2p/desktopgui
|
||||||
|
TD2=build/messages-src
|
||||||
|
TDY=$TD2/net/i2p/desktopgui
|
||||||
|
rm -rf $TD
|
||||||
|
mkdir -p $TD $TDY
|
||||||
|
msgfmt --java --statistics --source -r $CLASS -l $LG -d $TD $i
|
||||||
|
if [ $? -ne 0 ]
|
||||||
|
then
|
||||||
|
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
|
||||||
|
mv $TDX/messages_$LG.java $TDY
|
||||||
|
rm -rf $TD
|
||||||
fi
|
fi
|
||||||
fi
|
fi
|
||||||
done
|
done
|
||||||
|
13
apps/desktopgui/desktopgui.iml
Normal file
@ -0,0 +1,13 @@
|
|||||||
|
<?xml version="1.0" encoding="UTF-8"?>
|
||||||
|
<module type="JAVA_MODULE" version="4">
|
||||||
|
<component name="NewModuleRootManager" inherit-compiler-output="true">
|
||||||
|
<exclude-output />
|
||||||
|
<content url="file://$MODULE_DIR$">
|
||||||
|
<sourceFolder url="file://$MODULE_DIR$/src" isTestSource="false" />
|
||||||
|
</content>
|
||||||
|
<orderEntry type="inheritedJdk" />
|
||||||
|
<orderEntry type="sourceFolder" forTests="false" />
|
||||||
|
<orderEntry type="module" module-name="core" />
|
||||||
|
<orderEntry type="module" module-name="router" />
|
||||||
|
</component>
|
||||||
|
</module>
|
BIN
apps/desktopgui/images/itoopie_black_24.png
Normal file
After Width: | Height: | Size: 558 B |
BIN
apps/desktopgui/images/itoopie_white_24.png
Normal file
After Width: | Height: | Size: 677 B |
@ -2,55 +2,94 @@
|
|||||||
# Copyright (C) 2009 The I2P Project
|
# Copyright (C) 2009 The I2P Project
|
||||||
# This file is distributed under the same license as the desktopgui package.
|
# This file is distributed under the same license as the desktopgui package.
|
||||||
# To contribute translations, see http://www.i2p2.de/newdevelopers
|
# To contribute translations, see http://www.i2p2.de/newdevelopers
|
||||||
# foo <foo@bar>, 2009.
|
#
|
||||||
#
|
# Translators:
|
||||||
|
# ducki2p <ducki2p@gmail.com>, 2011
|
||||||
|
# foo <foo@bar>, 2009
|
||||||
msgid ""
|
msgid ""
|
||||||
msgstr ""
|
msgstr ""
|
||||||
"Project-Id-Version: I2P desktopgui\n"
|
"Project-Id-Version: I2P\n"
|
||||||
"Report-Msgid-Bugs-To: \n"
|
"Report-Msgid-Bugs-To: \n"
|
||||||
"POT-Creation-Date: 2011-02-20 11:53+0000\n"
|
"POT-Creation-Date: 2016-05-25 12:29+0000\n"
|
||||||
"PO-Revision-Date: 2011-02-26 19:46-0000\n"
|
"PO-Revision-Date: 2016-05-25 12:34+0000\n"
|
||||||
"Last-Translator: hamada <hamada@mail.i2p>\n"
|
"Last-Translator: zzzi2p\n"
|
||||||
"Language: ar\n"
|
"Language-Team: Arabic (http://www.transifex.com/otf/I2P/language/ar/)\n"
|
||||||
"Language-Team: duck <duck@mail.i2p>\n"
|
|
||||||
"MIME-Version: 1.0\n"
|
"MIME-Version: 1.0\n"
|
||||||
"Content-Type: text/plain; charset=UTF-8\n"
|
"Content-Type: text/plain; charset=UTF-8\n"
|
||||||
"Content-Transfer-Encoding: 8bit\n"
|
"Content-Transfer-Encoding: 8bit\n"
|
||||||
"Plural-Forms: nplurals=2; plural=(n != 1)\n"
|
"Language: ar\n"
|
||||||
|
"Plural-Forms: nplurals=6; plural=n==0 ? 0 : n==1 ? 1 : n==2 ? 2 : n%100>=3 && n%100<=10 ? 3 : n%100>=11 && n%100<=99 ? 4 : 5;\n"
|
||||||
|
|
||||||
#: src/net/i2p/desktopgui/ExternalTrayManager.java:23
|
#: src/net/i2p/desktopgui/ExternalTrayManager.java:31
|
||||||
|
#: src/net/i2p/desktopgui/ExternalTrayManager.java:59
|
||||||
msgid "Start I2P"
|
msgid "Start I2P"
|
||||||
msgstr "ابدأ I2P"
|
msgstr "ابدأ I2P"
|
||||||
|
|
||||||
#: src/net/i2p/desktopgui/ExternalTrayManager.java:38
|
#: src/net/i2p/desktopgui/ExternalTrayManager.java:44
|
||||||
|
#: src/net/i2p/desktopgui/ExternalTrayManager.java:72
|
||||||
msgid "I2P is starting!"
|
msgid "I2P is starting!"
|
||||||
msgstr "جاري تشغيل I2P"
|
msgstr "جاري تشغيل I2P"
|
||||||
|
|
||||||
#: src/net/i2p/desktopgui/ExternalTrayManager.java:38
|
#: src/net/i2p/desktopgui/ExternalTrayManager.java:44
|
||||||
|
#: src/net/i2p/desktopgui/ExternalTrayManager.java:72
|
||||||
msgid "Starting"
|
msgid "Starting"
|
||||||
msgstr "جاري البدأ"
|
msgstr "جاري البدأ"
|
||||||
|
|
||||||
#: src/net/i2p/desktopgui/InternalTrayManager.java:26
|
#: src/net/i2p/desktopgui/InternalTrayManager.java:55
|
||||||
|
#: src/net/i2p/desktopgui/InternalTrayManager.java:207
|
||||||
msgid "Launch I2P Browser"
|
msgid "Launch I2P Browser"
|
||||||
msgstr " تشغيل متصفح I2P"
|
msgstr " تشغيل متصفح I2P"
|
||||||
|
|
||||||
#: src/net/i2p/desktopgui/InternalTrayManager.java:50
|
#: src/net/i2p/desktopgui/InternalTrayManager.java:76
|
||||||
msgid "Configure desktopgui"
|
#: src/net/i2p/desktopgui/InternalTrayManager.java:228
|
||||||
msgstr "اعدادات"
|
msgid "Configure I2P System Tray"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
#: src/net/i2p/desktopgui/InternalTrayManager.java:67
|
#: src/net/i2p/desktopgui/InternalTrayManager.java:77
|
||||||
|
#: src/net/i2p/desktopgui/InternalTrayManager.java:229
|
||||||
|
msgid "Disable"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
#: src/net/i2p/desktopgui/InternalTrayManager.java:93
|
||||||
|
#: src/net/i2p/desktopgui/InternalTrayManager.java:245
|
||||||
msgid "Restart I2P"
|
msgid "Restart I2P"
|
||||||
msgstr "اعادة تشغيل"
|
msgstr "اعادة تشغيل"
|
||||||
|
|
||||||
#: src/net/i2p/desktopgui/InternalTrayManager.java:85
|
#: src/net/i2p/desktopgui/InternalTrayManager.java:110
|
||||||
|
#: src/net/i2p/desktopgui/InternalTrayManager.java:262
|
||||||
msgid "Stop I2P"
|
msgid "Stop I2P"
|
||||||
msgstr "توقيف I2P"
|
msgstr "توقيف I2P"
|
||||||
|
|
||||||
#: src/net/i2p/desktopgui/gui/DesktopguiConfigurationFrame.java:44
|
#: src/net/i2p/desktopgui/InternalTrayManager.java:126
|
||||||
msgid "Tray icon configuration"
|
#: src/net/i2p/desktopgui/InternalTrayManager.java:278
|
||||||
msgstr "اعدادات الأيقونة"
|
msgid "Restart I2P Immediately"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
#: src/net/i2p/desktopgui/gui/DesktopguiConfigurationFrame.java:47
|
#: src/net/i2p/desktopgui/InternalTrayManager.java:143
|
||||||
msgid "Should tray icon be enabled?"
|
#: src/net/i2p/desktopgui/InternalTrayManager.java:295
|
||||||
msgstr "هل ترغب في تفعيل الأيقونة؟"
|
msgid "Stop I2P Immediately"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
#: src/net/i2p/desktopgui/InternalTrayManager.java:157
|
||||||
|
#: src/net/i2p/desktopgui/InternalTrayManager.java:309
|
||||||
|
msgid "Cancel I2P Shutdown"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
#: src/net/i2p/desktopgui/InternalTrayManager.java:363
|
||||||
|
#, java-format
|
||||||
|
msgid "Shutdown in {0}"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
#: src/net/i2p/desktopgui/InternalTrayManager.java:365
|
||||||
|
msgid "Shutdown imminent"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
#. status translations are in the console bundle
|
||||||
|
#: src/net/i2p/desktopgui/InternalTrayManager.java:370
|
||||||
|
msgid "Network"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
#. Windows typically has tooltips; Linux (at least Ubuntu) doesn't
|
||||||
|
#: src/net/i2p/desktopgui/TrayManager.java:63
|
||||||
|
msgid "I2P: Right-click for menu"
|
||||||
|
msgstr ""
|
||||||
|
94
apps/desktopgui/locale/messages_bg.po
Normal file
@ -0,0 +1,94 @@
|
|||||||
|
# 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
|
||||||
|
#
|
||||||
|
# Translators:
|
||||||
|
# Gabriel Radev <gabosss@gmail.com>, 2015
|
||||||
|
msgid ""
|
||||||
|
msgstr ""
|
||||||
|
"Project-Id-Version: I2P\n"
|
||||||
|
"Report-Msgid-Bugs-To: \n"
|
||||||
|
"POT-Creation-Date: 2016-05-25 12:29+0000\n"
|
||||||
|
"PO-Revision-Date: 2016-05-25 12:34+0000\n"
|
||||||
|
"Last-Translator: zzzi2p\n"
|
||||||
|
"Language-Team: Bulgarian (http://www.transifex.com/otf/I2P/language/bg/)\n"
|
||||||
|
"MIME-Version: 1.0\n"
|
||||||
|
"Content-Type: text/plain; charset=UTF-8\n"
|
||||||
|
"Content-Transfer-Encoding: 8bit\n"
|
||||||
|
"Language: bg\n"
|
||||||
|
"Plural-Forms: nplurals=2; plural=(n != 1);\n"
|
||||||
|
|
||||||
|
#: src/net/i2p/desktopgui/ExternalTrayManager.java:31
|
||||||
|
#: src/net/i2p/desktopgui/ExternalTrayManager.java:59
|
||||||
|
msgid "Start I2P"
|
||||||
|
msgstr "Стартиране на I2P"
|
||||||
|
|
||||||
|
#: src/net/i2p/desktopgui/ExternalTrayManager.java:44
|
||||||
|
#: src/net/i2p/desktopgui/ExternalTrayManager.java:72
|
||||||
|
msgid "I2P is starting!"
|
||||||
|
msgstr "I2P е стартиран!"
|
||||||
|
|
||||||
|
#: src/net/i2p/desktopgui/ExternalTrayManager.java:44
|
||||||
|
#: src/net/i2p/desktopgui/ExternalTrayManager.java:72
|
||||||
|
msgid "Starting"
|
||||||
|
msgstr "Стартиране"
|
||||||
|
|
||||||
|
#: src/net/i2p/desktopgui/InternalTrayManager.java:55
|
||||||
|
#: src/net/i2p/desktopgui/InternalTrayManager.java:207
|
||||||
|
msgid "Launch I2P Browser"
|
||||||
|
msgstr "Стартиране на I2P Браузер"
|
||||||
|
|
||||||
|
#: src/net/i2p/desktopgui/InternalTrayManager.java:76
|
||||||
|
#: src/net/i2p/desktopgui/InternalTrayManager.java:228
|
||||||
|
msgid "Configure I2P System Tray"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
#: src/net/i2p/desktopgui/InternalTrayManager.java:77
|
||||||
|
#: src/net/i2p/desktopgui/InternalTrayManager.java:229
|
||||||
|
msgid "Disable"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
#: src/net/i2p/desktopgui/InternalTrayManager.java:93
|
||||||
|
#: src/net/i2p/desktopgui/InternalTrayManager.java:245
|
||||||
|
msgid "Restart I2P"
|
||||||
|
msgstr "Рестартиране на I2P"
|
||||||
|
|
||||||
|
#: src/net/i2p/desktopgui/InternalTrayManager.java:110
|
||||||
|
#: src/net/i2p/desktopgui/InternalTrayManager.java:262
|
||||||
|
msgid "Stop I2P"
|
||||||
|
msgstr "Спиране на I2P"
|
||||||
|
|
||||||
|
#: src/net/i2p/desktopgui/InternalTrayManager.java:126
|
||||||
|
#: src/net/i2p/desktopgui/InternalTrayManager.java:278
|
||||||
|
msgid "Restart I2P Immediately"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
#: src/net/i2p/desktopgui/InternalTrayManager.java:143
|
||||||
|
#: src/net/i2p/desktopgui/InternalTrayManager.java:295
|
||||||
|
msgid "Stop I2P Immediately"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
#: src/net/i2p/desktopgui/InternalTrayManager.java:157
|
||||||
|
#: src/net/i2p/desktopgui/InternalTrayManager.java:309
|
||||||
|
msgid "Cancel I2P Shutdown"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
#: src/net/i2p/desktopgui/InternalTrayManager.java:363
|
||||||
|
#, java-format
|
||||||
|
msgid "Shutdown in {0}"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
#: src/net/i2p/desktopgui/InternalTrayManager.java:365
|
||||||
|
msgid "Shutdown imminent"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
#. status translations are in the console bundle
|
||||||
|
#: src/net/i2p/desktopgui/InternalTrayManager.java:370
|
||||||
|
msgid "Network"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
#. Windows typically has tooltips; Linux (at least Ubuntu) doesn't
|
||||||
|
#: src/net/i2p/desktopgui/TrayManager.java:63
|
||||||
|
msgid "I2P: Right-click for menu"
|
||||||
|
msgstr ""
|
93
apps/desktopgui/locale/messages_ca.po
Normal file
@ -0,0 +1,93 @@
|
|||||||
|
# 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
|
||||||
|
#
|
||||||
|
# Translators:
|
||||||
|
msgid ""
|
||||||
|
msgstr ""
|
||||||
|
"Project-Id-Version: I2P\n"
|
||||||
|
"Report-Msgid-Bugs-To: \n"
|
||||||
|
"POT-Creation-Date: 2016-05-25 12:29+0000\n"
|
||||||
|
"PO-Revision-Date: 2016-05-25 12:34+0000\n"
|
||||||
|
"Last-Translator: zzzi2p\n"
|
||||||
|
"Language-Team: Catalan (http://www.transifex.com/otf/I2P/language/ca/)\n"
|
||||||
|
"MIME-Version: 1.0\n"
|
||||||
|
"Content-Type: text/plain; charset=UTF-8\n"
|
||||||
|
"Content-Transfer-Encoding: 8bit\n"
|
||||||
|
"Language: ca\n"
|
||||||
|
"Plural-Forms: nplurals=2; plural=(n != 1);\n"
|
||||||
|
|
||||||
|
#: src/net/i2p/desktopgui/ExternalTrayManager.java:31
|
||||||
|
#: src/net/i2p/desktopgui/ExternalTrayManager.java:59
|
||||||
|
msgid "Start I2P"
|
||||||
|
msgstr "Iniciar I2P"
|
||||||
|
|
||||||
|
#: src/net/i2p/desktopgui/ExternalTrayManager.java:44
|
||||||
|
#: src/net/i2p/desktopgui/ExternalTrayManager.java:72
|
||||||
|
msgid "I2P is starting!"
|
||||||
|
msgstr "I2P s'està iniciant."
|
||||||
|
|
||||||
|
#: src/net/i2p/desktopgui/ExternalTrayManager.java:44
|
||||||
|
#: src/net/i2p/desktopgui/ExternalTrayManager.java:72
|
||||||
|
msgid "Starting"
|
||||||
|
msgstr "Iniciant"
|
||||||
|
|
||||||
|
#: src/net/i2p/desktopgui/InternalTrayManager.java:55
|
||||||
|
#: src/net/i2p/desktopgui/InternalTrayManager.java:207
|
||||||
|
msgid "Launch I2P Browser"
|
||||||
|
msgstr "Iniciar navegador I2P"
|
||||||
|
|
||||||
|
#: src/net/i2p/desktopgui/InternalTrayManager.java:76
|
||||||
|
#: src/net/i2p/desktopgui/InternalTrayManager.java:228
|
||||||
|
msgid "Configure I2P System Tray"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
#: src/net/i2p/desktopgui/InternalTrayManager.java:77
|
||||||
|
#: src/net/i2p/desktopgui/InternalTrayManager.java:229
|
||||||
|
msgid "Disable"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
#: src/net/i2p/desktopgui/InternalTrayManager.java:93
|
||||||
|
#: src/net/i2p/desktopgui/InternalTrayManager.java:245
|
||||||
|
msgid "Restart I2P"
|
||||||
|
msgstr "Reiniciar I2P "
|
||||||
|
|
||||||
|
#: src/net/i2p/desktopgui/InternalTrayManager.java:110
|
||||||
|
#: src/net/i2p/desktopgui/InternalTrayManager.java:262
|
||||||
|
msgid "Stop I2P"
|
||||||
|
msgstr "Aturar I2P "
|
||||||
|
|
||||||
|
#: src/net/i2p/desktopgui/InternalTrayManager.java:126
|
||||||
|
#: src/net/i2p/desktopgui/InternalTrayManager.java:278
|
||||||
|
msgid "Restart I2P Immediately"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
#: src/net/i2p/desktopgui/InternalTrayManager.java:143
|
||||||
|
#: src/net/i2p/desktopgui/InternalTrayManager.java:295
|
||||||
|
msgid "Stop I2P Immediately"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
#: src/net/i2p/desktopgui/InternalTrayManager.java:157
|
||||||
|
#: src/net/i2p/desktopgui/InternalTrayManager.java:309
|
||||||
|
msgid "Cancel I2P Shutdown"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
#: src/net/i2p/desktopgui/InternalTrayManager.java:363
|
||||||
|
#, java-format
|
||||||
|
msgid "Shutdown in {0}"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
#: src/net/i2p/desktopgui/InternalTrayManager.java:365
|
||||||
|
msgid "Shutdown imminent"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
#. status translations are in the console bundle
|
||||||
|
#: src/net/i2p/desktopgui/InternalTrayManager.java:370
|
||||||
|
msgid "Network"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
#. Windows typically has tooltips; Linux (at least Ubuntu) doesn't
|
||||||
|
#: src/net/i2p/desktopgui/TrayManager.java:63
|
||||||
|
msgid "I2P: Right-click for menu"
|
||||||
|
msgstr ""
|
@ -7,49 +7,87 @@
|
|||||||
msgid ""
|
msgid ""
|
||||||
msgstr ""
|
msgstr ""
|
||||||
"Project-Id-Version: I2P\n"
|
"Project-Id-Version: I2P\n"
|
||||||
"Report-Msgid-Bugs-To: https://trac.i2p2.de/\n"
|
"Report-Msgid-Bugs-To: \n"
|
||||||
"POT-Creation-Date: 2011-03-03 18:29+0000\n"
|
"POT-Creation-Date: 2016-05-25 12:29+0000\n"
|
||||||
"PO-Revision-Date: 2012-02-12 19:44+0000\n"
|
"PO-Revision-Date: 2016-05-25 12:34+0000\n"
|
||||||
"Last-Translator: Waseihou Watashi <waseihou@gmail.com>\n"
|
"Last-Translator: zzzi2p\n"
|
||||||
"Language-Team: Czech (http://www.transifex.net/projects/p/I2P/language/cs/)\n"
|
"Language-Team: Czech (http://www.transifex.com/otf/I2P/language/cs/)\n"
|
||||||
"MIME-Version: 1.0\n"
|
"MIME-Version: 1.0\n"
|
||||||
"Content-Type: text/plain; charset=UTF-8\n"
|
"Content-Type: text/plain; charset=UTF-8\n"
|
||||||
"Content-Transfer-Encoding: 8bit\n"
|
"Content-Transfer-Encoding: 8bit\n"
|
||||||
"Language: cs\n"
|
"Language: cs\n"
|
||||||
"Plural-Forms: nplurals=3; plural=(n==1) ? 0 : (n>=2 && n<=4) ? 1 : 2\n"
|
"Plural-Forms: nplurals=3; plural=(n==1) ? 0 : (n>=2 && n<=4) ? 1 : 2;\n"
|
||||||
|
|
||||||
#: src/net/i2p/desktopgui/ExternalTrayManager.java:23
|
#: src/net/i2p/desktopgui/ExternalTrayManager.java:31
|
||||||
|
#: src/net/i2p/desktopgui/ExternalTrayManager.java:59
|
||||||
msgid "Start I2P"
|
msgid "Start I2P"
|
||||||
msgstr "Spustit I2P"
|
msgstr "Spustit I2P"
|
||||||
|
|
||||||
#: src/net/i2p/desktopgui/ExternalTrayManager.java:38
|
#: src/net/i2p/desktopgui/ExternalTrayManager.java:44
|
||||||
|
#: src/net/i2p/desktopgui/ExternalTrayManager.java:72
|
||||||
msgid "I2P is starting!"
|
msgid "I2P is starting!"
|
||||||
msgstr "I2P startuje!"
|
msgstr "I2P startuje!"
|
||||||
|
|
||||||
#: src/net/i2p/desktopgui/ExternalTrayManager.java:38
|
#: src/net/i2p/desktopgui/ExternalTrayManager.java:44
|
||||||
|
#: src/net/i2p/desktopgui/ExternalTrayManager.java:72
|
||||||
msgid "Starting"
|
msgid "Starting"
|
||||||
msgstr "Startuji"
|
msgstr "Startuji"
|
||||||
|
|
||||||
#: src/net/i2p/desktopgui/InternalTrayManager.java:26
|
#: src/net/i2p/desktopgui/InternalTrayManager.java:55
|
||||||
|
#: src/net/i2p/desktopgui/InternalTrayManager.java:207
|
||||||
msgid "Launch I2P Browser"
|
msgid "Launch I2P Browser"
|
||||||
msgstr "Spouštím I2P Browser"
|
msgstr "Spouštím I2P Browser"
|
||||||
|
|
||||||
#: src/net/i2p/desktopgui/InternalTrayManager.java:50
|
#: src/net/i2p/desktopgui/InternalTrayManager.java:76
|
||||||
msgid "Configure desktopgui"
|
#: src/net/i2p/desktopgui/InternalTrayManager.java:228
|
||||||
msgstr "Nastavuji desktopgui"
|
msgid "Configure I2P System Tray"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
#: src/net/i2p/desktopgui/InternalTrayManager.java:67
|
#: src/net/i2p/desktopgui/InternalTrayManager.java:77
|
||||||
|
#: src/net/i2p/desktopgui/InternalTrayManager.java:229
|
||||||
|
msgid "Disable"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
#: src/net/i2p/desktopgui/InternalTrayManager.java:93
|
||||||
|
#: src/net/i2p/desktopgui/InternalTrayManager.java:245
|
||||||
msgid "Restart I2P"
|
msgid "Restart I2P"
|
||||||
msgstr "Restart I2P"
|
msgstr "Restart I2P"
|
||||||
|
|
||||||
#: src/net/i2p/desktopgui/InternalTrayManager.java:85
|
#: src/net/i2p/desktopgui/InternalTrayManager.java:110
|
||||||
|
#: src/net/i2p/desktopgui/InternalTrayManager.java:262
|
||||||
msgid "Stop I2P"
|
msgid "Stop I2P"
|
||||||
msgstr "Zastavit I2P"
|
msgstr "Zastavit I2P"
|
||||||
|
|
||||||
#: src/net/i2p/desktopgui/gui/DesktopguiConfigurationFrame.java:44
|
#: src/net/i2p/desktopgui/InternalTrayManager.java:126
|
||||||
msgid "Tray icon configuration"
|
#: src/net/i2p/desktopgui/InternalTrayManager.java:278
|
||||||
msgstr "Nastavení ikony na liště (tray icon)"
|
msgid "Restart I2P Immediately"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
#: src/net/i2p/desktopgui/gui/DesktopguiConfigurationFrame.java:47
|
#: src/net/i2p/desktopgui/InternalTrayManager.java:143
|
||||||
msgid "Should tray icon be enabled?"
|
#: src/net/i2p/desktopgui/InternalTrayManager.java:295
|
||||||
msgstr "Zapnout ikonu na liště?"
|
msgid "Stop I2P Immediately"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
#: src/net/i2p/desktopgui/InternalTrayManager.java:157
|
||||||
|
#: src/net/i2p/desktopgui/InternalTrayManager.java:309
|
||||||
|
msgid "Cancel I2P Shutdown"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
#: src/net/i2p/desktopgui/InternalTrayManager.java:363
|
||||||
|
#, java-format
|
||||||
|
msgid "Shutdown in {0}"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
#: src/net/i2p/desktopgui/InternalTrayManager.java:365
|
||||||
|
msgid "Shutdown imminent"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
#. status translations are in the console bundle
|
||||||
|
#: src/net/i2p/desktopgui/InternalTrayManager.java:370
|
||||||
|
msgid "Network"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
#. Windows typically has tooltips; Linux (at least Ubuntu) doesn't
|
||||||
|
#: src/net/i2p/desktopgui/TrayManager.java:63
|
||||||
|
msgid "I2P: Right-click for menu"
|
||||||
|
msgstr ""
|
||||||
|
@ -3,55 +3,93 @@
|
|||||||
# This file is distributed under the same license as the desktopgui package.
|
# This file is distributed under the same license as the desktopgui package.
|
||||||
# To contribute translations, see http://www.i2p2.de/newdevelopers
|
# To contribute translations, see http://www.i2p2.de/newdevelopers
|
||||||
#
|
#
|
||||||
# <kia___@hushmail.com>, 2011.
|
# Translators:
|
||||||
|
# Aesthese, 2016
|
||||||
|
# KIA <kia___@hushmail.com>, 2011
|
||||||
msgid ""
|
msgid ""
|
||||||
msgstr ""
|
msgstr ""
|
||||||
"Project-Id-Version: I2P\n"
|
"Project-Id-Version: I2P\n"
|
||||||
"Report-Msgid-Bugs-To: https://trac.i2p2.de/\n"
|
"Report-Msgid-Bugs-To: \n"
|
||||||
"POT-Creation-Date: 2011-03-03 18:29+0000\n"
|
"POT-Creation-Date: 2016-05-25 12:29+0000\n"
|
||||||
"PO-Revision-Date: 2011-07-12 19:41+0000\n"
|
"PO-Revision-Date: 2016-05-25 12:34+0000\n"
|
||||||
"Last-Translator: KIA <kia___@hushmail.com>\n"
|
"Last-Translator: zzzi2p\n"
|
||||||
"Language-Team: Danish (http://www.transifex.net/projects/p/I2P/team/da/)\n"
|
"Language-Team: Danish (http://www.transifex.com/otf/I2P/language/da/)\n"
|
||||||
"MIME-Version: 1.0\n"
|
"MIME-Version: 1.0\n"
|
||||||
"Content-Type: text/plain; charset=UTF-8\n"
|
"Content-Type: text/plain; charset=UTF-8\n"
|
||||||
"Content-Transfer-Encoding: 8bit\n"
|
"Content-Transfer-Encoding: 8bit\n"
|
||||||
"Language: da\n"
|
"Language: da\n"
|
||||||
"Plural-Forms: nplurals=2; plural=(n != 1)\n"
|
"Plural-Forms: nplurals=2; plural=(n != 1);\n"
|
||||||
|
|
||||||
#: src/net/i2p/desktopgui/ExternalTrayManager.java:23
|
#: src/net/i2p/desktopgui/ExternalTrayManager.java:31
|
||||||
|
#: src/net/i2p/desktopgui/ExternalTrayManager.java:59
|
||||||
msgid "Start I2P"
|
msgid "Start I2P"
|
||||||
msgstr "Start I2P"
|
msgstr "Start I2P"
|
||||||
|
|
||||||
#: src/net/i2p/desktopgui/ExternalTrayManager.java:38
|
#: src/net/i2p/desktopgui/ExternalTrayManager.java:44
|
||||||
|
#: src/net/i2p/desktopgui/ExternalTrayManager.java:72
|
||||||
msgid "I2P is starting!"
|
msgid "I2P is starting!"
|
||||||
msgstr "I2P starter nu!"
|
msgstr "I2P starter!"
|
||||||
|
|
||||||
#: src/net/i2p/desktopgui/ExternalTrayManager.java:38
|
#: src/net/i2p/desktopgui/ExternalTrayManager.java:44
|
||||||
|
#: src/net/i2p/desktopgui/ExternalTrayManager.java:72
|
||||||
msgid "Starting"
|
msgid "Starting"
|
||||||
msgstr "Starter"
|
msgstr "Starter"
|
||||||
|
|
||||||
#: src/net/i2p/desktopgui/InternalTrayManager.java:26
|
#: src/net/i2p/desktopgui/InternalTrayManager.java:55
|
||||||
|
#: src/net/i2p/desktopgui/InternalTrayManager.java:207
|
||||||
msgid "Launch I2P Browser"
|
msgid "Launch I2P Browser"
|
||||||
msgstr "Start I2P Browseren"
|
msgstr "Start I2P Browseren"
|
||||||
|
|
||||||
#: src/net/i2p/desktopgui/InternalTrayManager.java:50
|
#: src/net/i2p/desktopgui/InternalTrayManager.java:76
|
||||||
msgid "Configure desktopgui"
|
#: src/net/i2p/desktopgui/InternalTrayManager.java:228
|
||||||
msgstr "Konfigurer desktopgui"
|
msgid "Configure I2P System Tray"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
#: src/net/i2p/desktopgui/InternalTrayManager.java:67
|
#: src/net/i2p/desktopgui/InternalTrayManager.java:77
|
||||||
|
#: src/net/i2p/desktopgui/InternalTrayManager.java:229
|
||||||
|
msgid "Disable"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
#: src/net/i2p/desktopgui/InternalTrayManager.java:93
|
||||||
|
#: src/net/i2p/desktopgui/InternalTrayManager.java:245
|
||||||
msgid "Restart I2P"
|
msgid "Restart I2P"
|
||||||
msgstr "Genstart I2P"
|
msgstr "Genstart I2P"
|
||||||
|
|
||||||
#: src/net/i2p/desktopgui/InternalTrayManager.java:85
|
#: src/net/i2p/desktopgui/InternalTrayManager.java:110
|
||||||
|
#: src/net/i2p/desktopgui/InternalTrayManager.java:262
|
||||||
msgid "Stop I2P"
|
msgid "Stop I2P"
|
||||||
msgstr "Stop I2P"
|
msgstr "Stop I2P"
|
||||||
|
|
||||||
#: src/net/i2p/desktopgui/gui/DesktopguiConfigurationFrame.java:44
|
#: src/net/i2p/desktopgui/InternalTrayManager.java:126
|
||||||
msgid "Tray icon configuration"
|
#: src/net/i2p/desktopgui/InternalTrayManager.java:278
|
||||||
msgstr "Konfiguration af processbar ikonet"
|
msgid "Restart I2P Immediately"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
#: src/net/i2p/desktopgui/gui/DesktopguiConfigurationFrame.java:47
|
#: src/net/i2p/desktopgui/InternalTrayManager.java:143
|
||||||
msgid "Should tray icon be enabled?"
|
#: src/net/i2p/desktopgui/InternalTrayManager.java:295
|
||||||
msgstr "Skal processbar ikonet være aktivt?"
|
msgid "Stop I2P Immediately"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
#: src/net/i2p/desktopgui/InternalTrayManager.java:157
|
||||||
|
#: src/net/i2p/desktopgui/InternalTrayManager.java:309
|
||||||
|
msgid "Cancel I2P Shutdown"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
#: src/net/i2p/desktopgui/InternalTrayManager.java:363
|
||||||
|
#, java-format
|
||||||
|
msgid "Shutdown in {0}"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
#: src/net/i2p/desktopgui/InternalTrayManager.java:365
|
||||||
|
msgid "Shutdown imminent"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
#. status translations are in the console bundle
|
||||||
|
#: src/net/i2p/desktopgui/InternalTrayManager.java:370
|
||||||
|
msgid "Network"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
#. Windows typically has tooltips; Linux (at least Ubuntu) doesn't
|
||||||
|
#: src/net/i2p/desktopgui/TrayManager.java:63
|
||||||
|
msgid "I2P: Right-click for menu"
|
||||||
|
msgstr ""
|
||||||
|
@ -2,54 +2,96 @@
|
|||||||
# Copyright (C) 2009 The I2P Project
|
# Copyright (C) 2009 The I2P Project
|
||||||
# This file is distributed under the same license as the desktopgui package.
|
# This file is distributed under the same license as the desktopgui package.
|
||||||
# To contribute translations, see http://www.i2p2.de/newdevelopers
|
# To contribute translations, see http://www.i2p2.de/newdevelopers
|
||||||
# foo <foo@bar>, 2009.
|
#
|
||||||
#
|
# Translators:
|
||||||
|
# blabla <blabla@trash-mail.com>, 2011
|
||||||
|
# Ettore Atalan <atalanttore@googlemail.com>, 2016
|
||||||
|
# foo <foo@bar>, 2009
|
||||||
|
# Lars Schimmer <echelon@i2pmail.org>, 2016
|
||||||
msgid ""
|
msgid ""
|
||||||
msgstr ""
|
msgstr ""
|
||||||
"Project-Id-Version: I2P\n"
|
"Project-Id-Version: I2P\n"
|
||||||
"Report-Msgid-Bugs-To: \n"
|
"Report-Msgid-Bugs-To: \n"
|
||||||
"POT-Creation-Date: 2014-01-09 18:07+0000\n"
|
"POT-Creation-Date: 2016-05-25 12:29+0000\n"
|
||||||
"PO-Revision-Date: 2011-03-22 15:49+0000\n"
|
"PO-Revision-Date: 2016-06-08 09:04+0000\n"
|
||||||
"Last-Translator: blabla <blabla@trash-mail.com>\n"
|
"Last-Translator: Lars Schimmer <echelon@i2pmail.org>\n"
|
||||||
"Language-Team: German <>\n"
|
"Language-Team: German (http://www.transifex.com/otf/I2P/language/de/)\n"
|
||||||
"Language: de\n"
|
|
||||||
"MIME-Version: 1.0\n"
|
"MIME-Version: 1.0\n"
|
||||||
"Content-Type: text/plain; charset=UTF-8\n"
|
"Content-Type: text/plain; charset=UTF-8\n"
|
||||||
"Content-Transfer-Encoding: 8bit\n"
|
"Content-Transfer-Encoding: 8bit\n"
|
||||||
"Plural-Forms: nplurals=2; plural=(n != 1)\n"
|
"Language: de\n"
|
||||||
|
"Plural-Forms: nplurals=2; plural=(n != 1);\n"
|
||||||
|
|
||||||
#: src/net/i2p/desktopgui/ExternalTrayManager.java:23
|
#: src/net/i2p/desktopgui/ExternalTrayManager.java:31
|
||||||
|
#: src/net/i2p/desktopgui/ExternalTrayManager.java:59
|
||||||
msgid "Start I2P"
|
msgid "Start I2P"
|
||||||
msgstr "I2P starten"
|
msgstr "I2P starten"
|
||||||
|
|
||||||
#: src/net/i2p/desktopgui/ExternalTrayManager.java:38
|
#: src/net/i2p/desktopgui/ExternalTrayManager.java:44
|
||||||
|
#: src/net/i2p/desktopgui/ExternalTrayManager.java:72
|
||||||
msgid "I2P is starting!"
|
msgid "I2P is starting!"
|
||||||
msgstr "I2P startet gerade!"
|
msgstr "I2P startet gerade!"
|
||||||
|
|
||||||
#: src/net/i2p/desktopgui/ExternalTrayManager.java:38
|
#: src/net/i2p/desktopgui/ExternalTrayManager.java:44
|
||||||
|
#: src/net/i2p/desktopgui/ExternalTrayManager.java:72
|
||||||
msgid "Starting"
|
msgid "Starting"
|
||||||
msgstr "Startend"
|
msgstr "Startend"
|
||||||
|
|
||||||
#: src/net/i2p/desktopgui/InternalTrayManager.java:26
|
#: src/net/i2p/desktopgui/InternalTrayManager.java:55
|
||||||
|
#: src/net/i2p/desktopgui/InternalTrayManager.java:207
|
||||||
msgid "Launch I2P Browser"
|
msgid "Launch I2P Browser"
|
||||||
msgstr "I2P-Browser öffnen"
|
msgstr "I2P-Browser öffnen"
|
||||||
|
|
||||||
#: src/net/i2p/desktopgui/InternalTrayManager.java:50
|
#: src/net/i2p/desktopgui/InternalTrayManager.java:76
|
||||||
msgid "Configure desktopgui"
|
#: src/net/i2p/desktopgui/InternalTrayManager.java:228
|
||||||
msgstr "Desktopgui konfigurieren"
|
msgid "Configure I2P System Tray"
|
||||||
|
msgstr "I2P System Tray konfigurieren"
|
||||||
|
|
||||||
#: src/net/i2p/desktopgui/InternalTrayManager.java:67
|
#: src/net/i2p/desktopgui/InternalTrayManager.java:77
|
||||||
|
#: src/net/i2p/desktopgui/InternalTrayManager.java:229
|
||||||
|
msgid "Disable"
|
||||||
|
msgstr "Deaktivieren"
|
||||||
|
|
||||||
|
#: src/net/i2p/desktopgui/InternalTrayManager.java:93
|
||||||
|
#: src/net/i2p/desktopgui/InternalTrayManager.java:245
|
||||||
msgid "Restart I2P"
|
msgid "Restart I2P"
|
||||||
msgstr "I2P neustarten"
|
msgstr "I2P neustarten"
|
||||||
|
|
||||||
#: src/net/i2p/desktopgui/InternalTrayManager.java:85
|
#: src/net/i2p/desktopgui/InternalTrayManager.java:110
|
||||||
|
#: src/net/i2p/desktopgui/InternalTrayManager.java:262
|
||||||
msgid "Stop I2P"
|
msgid "Stop I2P"
|
||||||
msgstr "I2P beenden"
|
msgstr "I2P beenden"
|
||||||
|
|
||||||
#: src/net/i2p/desktopgui/gui/DesktopguiConfigurationFrame.java:43
|
#: src/net/i2p/desktopgui/InternalTrayManager.java:126
|
||||||
msgid "Tray icon configuration"
|
#: src/net/i2p/desktopgui/InternalTrayManager.java:278
|
||||||
msgstr "Systemleistensymbol konfigurieren"
|
msgid "Restart I2P Immediately"
|
||||||
|
msgstr "I2P sofort neustarten"
|
||||||
|
|
||||||
#: src/net/i2p/desktopgui/gui/DesktopguiConfigurationFrame.java:46
|
#: src/net/i2p/desktopgui/InternalTrayManager.java:143
|
||||||
msgid "Should tray icon be enabled?"
|
#: src/net/i2p/desktopgui/InternalTrayManager.java:295
|
||||||
msgstr "Systemleistensymbol aktivieren?"
|
msgid "Stop I2P Immediately"
|
||||||
|
msgstr "I2P sofort beenden"
|
||||||
|
|
||||||
|
#: src/net/i2p/desktopgui/InternalTrayManager.java:157
|
||||||
|
#: src/net/i2p/desktopgui/InternalTrayManager.java:309
|
||||||
|
msgid "Cancel I2P Shutdown"
|
||||||
|
msgstr "Herunterfahren von I2P abbrechen"
|
||||||
|
|
||||||
|
#: src/net/i2p/desktopgui/InternalTrayManager.java:363
|
||||||
|
#, java-format
|
||||||
|
msgid "Shutdown in {0}"
|
||||||
|
msgstr "Herunterfahren in {0}"
|
||||||
|
|
||||||
|
#: src/net/i2p/desktopgui/InternalTrayManager.java:365
|
||||||
|
msgid "Shutdown imminent"
|
||||||
|
msgstr "Herunterfahren bevorstehend"
|
||||||
|
|
||||||
|
#. status translations are in the console bundle
|
||||||
|
#: src/net/i2p/desktopgui/InternalTrayManager.java:370
|
||||||
|
msgid "Network"
|
||||||
|
msgstr "Netzwerk"
|
||||||
|
|
||||||
|
#. Windows typically has tooltips; Linux (at least Ubuntu) doesn't
|
||||||
|
#: src/net/i2p/desktopgui/TrayManager.java:63
|
||||||
|
msgid "I2P: Right-click for menu"
|
||||||
|
msgstr "I2P: Rechtsklick für Menü"
|
||||||
|
@ -4,53 +4,91 @@
|
|||||||
# To contribute translations, see http://www.i2p2.de/newdevelopers
|
# To contribute translations, see http://www.i2p2.de/newdevelopers
|
||||||
#
|
#
|
||||||
# Translators:
|
# Translators:
|
||||||
# <lixtetrax@grhack.net>, 2012.
|
# lixtetrax <lixtetrax@grhack.net>, 2012
|
||||||
msgid ""
|
msgid ""
|
||||||
msgstr ""
|
msgstr ""
|
||||||
"Project-Id-Version: I2P\n"
|
"Project-Id-Version: I2P\n"
|
||||||
"Report-Msgid-Bugs-To: https://trac.i2p2.de/\n"
|
"Report-Msgid-Bugs-To: \n"
|
||||||
"POT-Creation-Date: 2011-03-03 18:29+0000\n"
|
"POT-Creation-Date: 2016-05-25 12:29+0000\n"
|
||||||
"PO-Revision-Date: 2012-07-02 11:28+0000\n"
|
"PO-Revision-Date: 2016-05-25 12:34+0000\n"
|
||||||
"Last-Translator: lixtetrax <lixtetrax@grhack.net>\n"
|
"Last-Translator: zzzi2p\n"
|
||||||
"Language-Team: Greek (http://www.transifex.com/projects/p/I2P/language/el/)\n"
|
"Language-Team: Greek (http://www.transifex.com/otf/I2P/language/el/)\n"
|
||||||
"MIME-Version: 1.0\n"
|
"MIME-Version: 1.0\n"
|
||||||
"Content-Type: text/plain; charset=UTF-8\n"
|
"Content-Type: text/plain; charset=UTF-8\n"
|
||||||
"Content-Transfer-Encoding: 8bit\n"
|
"Content-Transfer-Encoding: 8bit\n"
|
||||||
"Language: el\n"
|
"Language: el\n"
|
||||||
"Plural-Forms: nplurals=2; plural=(n != 1)\n"
|
"Plural-Forms: nplurals=2; plural=(n != 1);\n"
|
||||||
|
|
||||||
#: src/net/i2p/desktopgui/ExternalTrayManager.java:23
|
#: src/net/i2p/desktopgui/ExternalTrayManager.java:31
|
||||||
|
#: src/net/i2p/desktopgui/ExternalTrayManager.java:59
|
||||||
msgid "Start I2P"
|
msgid "Start I2P"
|
||||||
msgstr "Έναρξη Ι2Ρ"
|
msgstr "Έναρξη Ι2Ρ"
|
||||||
|
|
||||||
#: src/net/i2p/desktopgui/ExternalTrayManager.java:38
|
#: src/net/i2p/desktopgui/ExternalTrayManager.java:44
|
||||||
|
#: src/net/i2p/desktopgui/ExternalTrayManager.java:72
|
||||||
msgid "I2P is starting!"
|
msgid "I2P is starting!"
|
||||||
msgstr "Το Ι2Ρ ξεκίνησε!"
|
msgstr "Το Ι2Ρ ξεκίνησε!"
|
||||||
|
|
||||||
#: src/net/i2p/desktopgui/ExternalTrayManager.java:38
|
#: src/net/i2p/desktopgui/ExternalTrayManager.java:44
|
||||||
|
#: src/net/i2p/desktopgui/ExternalTrayManager.java:72
|
||||||
msgid "Starting"
|
msgid "Starting"
|
||||||
msgstr "Έναρξη"
|
msgstr "Έναρξη"
|
||||||
|
|
||||||
#: src/net/i2p/desktopgui/InternalTrayManager.java:26
|
#: src/net/i2p/desktopgui/InternalTrayManager.java:55
|
||||||
|
#: src/net/i2p/desktopgui/InternalTrayManager.java:207
|
||||||
msgid "Launch I2P Browser"
|
msgid "Launch I2P Browser"
|
||||||
msgstr "Έναρξη φυλλομετρητή Ι2Ρ"
|
msgstr "Έναρξη φυλλομετρητή Ι2Ρ"
|
||||||
|
|
||||||
#: src/net/i2p/desktopgui/InternalTrayManager.java:50
|
#: src/net/i2p/desktopgui/InternalTrayManager.java:76
|
||||||
msgid "Configure desktopgui"
|
#: src/net/i2p/desktopgui/InternalTrayManager.java:228
|
||||||
msgstr "Παραμετροποίηση desktopgui"
|
msgid "Configure I2P System Tray"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
#: src/net/i2p/desktopgui/InternalTrayManager.java:67
|
#: src/net/i2p/desktopgui/InternalTrayManager.java:77
|
||||||
|
#: src/net/i2p/desktopgui/InternalTrayManager.java:229
|
||||||
|
msgid "Disable"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
#: src/net/i2p/desktopgui/InternalTrayManager.java:93
|
||||||
|
#: src/net/i2p/desktopgui/InternalTrayManager.java:245
|
||||||
msgid "Restart I2P"
|
msgid "Restart I2P"
|
||||||
msgstr "Επανεκκίνηση Ι2Ρ"
|
msgstr "Επανεκκίνηση Ι2Ρ"
|
||||||
|
|
||||||
#: src/net/i2p/desktopgui/InternalTrayManager.java:85
|
#: src/net/i2p/desktopgui/InternalTrayManager.java:110
|
||||||
|
#: src/net/i2p/desktopgui/InternalTrayManager.java:262
|
||||||
msgid "Stop I2P"
|
msgid "Stop I2P"
|
||||||
msgstr "Τερματισμός Ι2Ρ"
|
msgstr "Τερματισμός Ι2Ρ"
|
||||||
|
|
||||||
#: src/net/i2p/desktopgui/gui/DesktopguiConfigurationFrame.java:44
|
#: src/net/i2p/desktopgui/InternalTrayManager.java:126
|
||||||
msgid "Tray icon configuration"
|
#: src/net/i2p/desktopgui/InternalTrayManager.java:278
|
||||||
msgstr "Παραμετροποίηση εικονιδίου"
|
msgid "Restart I2P Immediately"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
#: src/net/i2p/desktopgui/gui/DesktopguiConfigurationFrame.java:47
|
#: src/net/i2p/desktopgui/InternalTrayManager.java:143
|
||||||
msgid "Should tray icon be enabled?"
|
#: src/net/i2p/desktopgui/InternalTrayManager.java:295
|
||||||
msgstr "Ενεργοποίηση εικονιδίου;"
|
msgid "Stop I2P Immediately"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
#: src/net/i2p/desktopgui/InternalTrayManager.java:157
|
||||||
|
#: src/net/i2p/desktopgui/InternalTrayManager.java:309
|
||||||
|
msgid "Cancel I2P Shutdown"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
#: src/net/i2p/desktopgui/InternalTrayManager.java:363
|
||||||
|
#, java-format
|
||||||
|
msgid "Shutdown in {0}"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
#: src/net/i2p/desktopgui/InternalTrayManager.java:365
|
||||||
|
msgid "Shutdown imminent"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
#. status translations are in the console bundle
|
||||||
|
#: src/net/i2p/desktopgui/InternalTrayManager.java:370
|
||||||
|
msgid "Network"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
#. Windows typically has tooltips; Linux (at least Ubuntu) doesn't
|
||||||
|
#: src/net/i2p/desktopgui/TrayManager.java:63
|
||||||
|
msgid "I2P: Right-click for menu"
|
||||||
|
msgstr ""
|
||||||
|
@ -8,7 +8,7 @@ msgid ""
|
|||||||
msgstr ""
|
msgstr ""
|
||||||
"Project-Id-Version: I2P desktopgui\n"
|
"Project-Id-Version: I2P desktopgui\n"
|
||||||
"Report-Msgid-Bugs-To: \n"
|
"Report-Msgid-Bugs-To: \n"
|
||||||
"POT-Creation-Date: 2014-01-09 19:27+0000\n"
|
"POT-Creation-Date: 2016-05-25 12:29+0000\n"
|
||||||
"PO-Revision-Date: 2010-06-15 14:09+0100\n"
|
"PO-Revision-Date: 2010-06-15 14:09+0100\n"
|
||||||
"Last-Translator: duck <duck@mail.i2p>\n"
|
"Last-Translator: duck <duck@mail.i2p>\n"
|
||||||
"Language-Team: duck <duck@mail.i2p>\n"
|
"Language-Team: duck <duck@mail.i2p>\n"
|
||||||
@ -18,38 +18,76 @@ msgstr ""
|
|||||||
"Content-Transfer-Encoding: 8bit\n"
|
"Content-Transfer-Encoding: 8bit\n"
|
||||||
"Plural-Forms: nplurals=2; plural=(n != 1)\n"
|
"Plural-Forms: nplurals=2; plural=(n != 1)\n"
|
||||||
|
|
||||||
#: src/net/i2p/desktopgui/ExternalTrayManager.java:23
|
#: src/net/i2p/desktopgui/ExternalTrayManager.java:31
|
||||||
|
#: src/net/i2p/desktopgui/ExternalTrayManager.java:59
|
||||||
msgid "Start I2P"
|
msgid "Start I2P"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: src/net/i2p/desktopgui/ExternalTrayManager.java:38
|
#: src/net/i2p/desktopgui/ExternalTrayManager.java:44
|
||||||
|
#: src/net/i2p/desktopgui/ExternalTrayManager.java:72
|
||||||
msgid "I2P is starting!"
|
msgid "I2P is starting!"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: src/net/i2p/desktopgui/ExternalTrayManager.java:38
|
#: src/net/i2p/desktopgui/ExternalTrayManager.java:44
|
||||||
|
#: src/net/i2p/desktopgui/ExternalTrayManager.java:72
|
||||||
msgid "Starting"
|
msgid "Starting"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: src/net/i2p/desktopgui/InternalTrayManager.java:26
|
#: src/net/i2p/desktopgui/InternalTrayManager.java:55
|
||||||
|
#: src/net/i2p/desktopgui/InternalTrayManager.java:207
|
||||||
msgid "Launch I2P Browser"
|
msgid "Launch I2P Browser"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: src/net/i2p/desktopgui/InternalTrayManager.java:50
|
#: src/net/i2p/desktopgui/InternalTrayManager.java:76
|
||||||
msgid "Configure desktopgui"
|
#: src/net/i2p/desktopgui/InternalTrayManager.java:228
|
||||||
|
msgid "Configure I2P System Tray"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: src/net/i2p/desktopgui/InternalTrayManager.java:67
|
#: src/net/i2p/desktopgui/InternalTrayManager.java:77
|
||||||
|
#: src/net/i2p/desktopgui/InternalTrayManager.java:229
|
||||||
|
msgid "Disable"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
#: src/net/i2p/desktopgui/InternalTrayManager.java:93
|
||||||
|
#: src/net/i2p/desktopgui/InternalTrayManager.java:245
|
||||||
msgid "Restart I2P"
|
msgid "Restart I2P"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: src/net/i2p/desktopgui/InternalTrayManager.java:85
|
#: src/net/i2p/desktopgui/InternalTrayManager.java:110
|
||||||
|
#: src/net/i2p/desktopgui/InternalTrayManager.java:262
|
||||||
msgid "Stop I2P"
|
msgid "Stop I2P"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: src/net/i2p/desktopgui/gui/DesktopguiConfigurationFrame.java:43
|
#: src/net/i2p/desktopgui/InternalTrayManager.java:126
|
||||||
msgid "Tray icon configuration"
|
#: src/net/i2p/desktopgui/InternalTrayManager.java:278
|
||||||
|
msgid "Restart I2P Immediately"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: src/net/i2p/desktopgui/gui/DesktopguiConfigurationFrame.java:46
|
#: src/net/i2p/desktopgui/InternalTrayManager.java:143
|
||||||
msgid "Should tray icon be enabled?"
|
#: src/net/i2p/desktopgui/InternalTrayManager.java:295
|
||||||
|
msgid "Stop I2P Immediately"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
#: src/net/i2p/desktopgui/InternalTrayManager.java:157
|
||||||
|
#: src/net/i2p/desktopgui/InternalTrayManager.java:309
|
||||||
|
msgid "Cancel I2P Shutdown"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
#: src/net/i2p/desktopgui/InternalTrayManager.java:363
|
||||||
|
#, java-format
|
||||||
|
msgid "Shutdown in {0}"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
#: src/net/i2p/desktopgui/InternalTrayManager.java:365
|
||||||
|
msgid "Shutdown imminent"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
#. status translations are in the console bundle
|
||||||
|
#: src/net/i2p/desktopgui/InternalTrayManager.java:370
|
||||||
|
msgid "Network"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
#. Windows typically has tooltips; Linux (at least Ubuntu) doesn't
|
||||||
|
#: src/net/i2p/desktopgui/TrayManager.java:63
|
||||||
|
msgid "I2P: Right-click for menu"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
@ -2,55 +2,96 @@
|
|||||||
# Copyright (C) 2009 The I2P Project
|
# Copyright (C) 2009 The I2P Project
|
||||||
# This file is distributed under the same license as the desktopgui package.
|
# This file is distributed under the same license as the desktopgui package.
|
||||||
# To contribute translations, see http://www.i2p2.de/newdevelopers
|
# To contribute translations, see http://www.i2p2.de/newdevelopers
|
||||||
# foo <foo@bar>, 2009.
|
#
|
||||||
#
|
# Translators:
|
||||||
|
# ducki2p <ducki2p@gmail.com>, 2011
|
||||||
|
# foo <foo@bar>, 2009
|
||||||
|
# punkibastardo <punkibastardo@gmail.com>, 2011
|
||||||
|
# strel, 2016
|
||||||
msgid ""
|
msgid ""
|
||||||
msgstr ""
|
msgstr ""
|
||||||
"Project-Id-Version: I2P\n"
|
"Project-Id-Version: I2P\n"
|
||||||
"Report-Msgid-Bugs-To: https://trac.i2p2.de/\n"
|
"Report-Msgid-Bugs-To: \n"
|
||||||
"POT-Creation-Date: 2011-03-03 18:29+0000\n"
|
"POT-Creation-Date: 2016-05-25 12:29+0000\n"
|
||||||
"PO-Revision-Date: 2011-04-02 23:57+0100\n"
|
"PO-Revision-Date: 2016-05-27 21:54+0000\n"
|
||||||
"Last-Translator: mixxy <m1xxy@mail.i2p>\n"
|
"Last-Translator: strel\n"
|
||||||
"Language-Team: Spanish (Castilian) <None>\n"
|
"Language-Team: Spanish (http://www.transifex.com/otf/I2P/language/es/)\n"
|
||||||
"MIME-Version: 1.0\n"
|
"MIME-Version: 1.0\n"
|
||||||
"Content-Type: text/plain; charset=UTF-8\n"
|
"Content-Type: text/plain; charset=UTF-8\n"
|
||||||
"Content-Transfer-Encoding: 8bit\n"
|
"Content-Transfer-Encoding: 8bit\n"
|
||||||
"Language: es\n"
|
"Language: es\n"
|
||||||
"Plural-Forms: nplurals=2; plural=(n != 1)\n"
|
"Plural-Forms: nplurals=2; plural=(n != 1);\n"
|
||||||
|
|
||||||
#: src/net/i2p/desktopgui/ExternalTrayManager.java:23
|
#: src/net/i2p/desktopgui/ExternalTrayManager.java:31
|
||||||
|
#: src/net/i2p/desktopgui/ExternalTrayManager.java:59
|
||||||
msgid "Start I2P"
|
msgid "Start I2P"
|
||||||
msgstr "Iniciar I2P"
|
msgstr "Iniciar I2P"
|
||||||
|
|
||||||
#: src/net/i2p/desktopgui/ExternalTrayManager.java:38
|
#: src/net/i2p/desktopgui/ExternalTrayManager.java:44
|
||||||
|
#: src/net/i2p/desktopgui/ExternalTrayManager.java:72
|
||||||
msgid "I2P is starting!"
|
msgid "I2P is starting!"
|
||||||
msgstr "I2P está iniciando!"
|
msgstr "I2P está iniciando!"
|
||||||
|
|
||||||
#: src/net/i2p/desktopgui/ExternalTrayManager.java:38
|
#: src/net/i2p/desktopgui/ExternalTrayManager.java:44
|
||||||
|
#: src/net/i2p/desktopgui/ExternalTrayManager.java:72
|
||||||
msgid "Starting"
|
msgid "Starting"
|
||||||
msgstr "Iniciando"
|
msgstr "Iniciando"
|
||||||
|
|
||||||
#: src/net/i2p/desktopgui/InternalTrayManager.java:26
|
#: src/net/i2p/desktopgui/InternalTrayManager.java:55
|
||||||
|
#: src/net/i2p/desktopgui/InternalTrayManager.java:207
|
||||||
msgid "Launch I2P Browser"
|
msgid "Launch I2P Browser"
|
||||||
msgstr "Lanzar navegador I2P"
|
msgstr "Lanzar navegador I2P"
|
||||||
|
|
||||||
#: src/net/i2p/desktopgui/InternalTrayManager.java:50
|
#: src/net/i2p/desktopgui/InternalTrayManager.java:76
|
||||||
msgid "Configure desktopgui"
|
#: src/net/i2p/desktopgui/InternalTrayManager.java:228
|
||||||
msgstr "Configurar desktopgui"
|
msgid "Configure I2P System Tray"
|
||||||
|
msgstr "Configurar la bandeja de sistema de I2P"
|
||||||
|
|
||||||
#: src/net/i2p/desktopgui/InternalTrayManager.java:67
|
#: src/net/i2p/desktopgui/InternalTrayManager.java:77
|
||||||
|
#: src/net/i2p/desktopgui/InternalTrayManager.java:229
|
||||||
|
msgid "Disable"
|
||||||
|
msgstr "Deshabilitar"
|
||||||
|
|
||||||
|
#: src/net/i2p/desktopgui/InternalTrayManager.java:93
|
||||||
|
#: src/net/i2p/desktopgui/InternalTrayManager.java:245
|
||||||
msgid "Restart I2P"
|
msgid "Restart I2P"
|
||||||
msgstr "Reiniciar I2P"
|
msgstr "Reiniciar I2P"
|
||||||
|
|
||||||
#: src/net/i2p/desktopgui/InternalTrayManager.java:85
|
#: src/net/i2p/desktopgui/InternalTrayManager.java:110
|
||||||
|
#: src/net/i2p/desktopgui/InternalTrayManager.java:262
|
||||||
msgid "Stop I2P"
|
msgid "Stop I2P"
|
||||||
msgstr "Detener I2P"
|
msgstr "Detener I2P"
|
||||||
|
|
||||||
#: src/net/i2p/desktopgui/gui/DesktopguiConfigurationFrame.java:44
|
#: src/net/i2p/desktopgui/InternalTrayManager.java:126
|
||||||
msgid "Tray icon configuration"
|
#: src/net/i2p/desktopgui/InternalTrayManager.java:278
|
||||||
msgstr "Configuración del ícono de la barra de tareas"
|
msgid "Restart I2P Immediately"
|
||||||
|
msgstr "Reiniciar I2P inmediatamente"
|
||||||
|
|
||||||
#: src/net/i2p/desktopgui/gui/DesktopguiConfigurationFrame.java:47
|
#: src/net/i2p/desktopgui/InternalTrayManager.java:143
|
||||||
msgid "Should tray icon be enabled?"
|
#: src/net/i2p/desktopgui/InternalTrayManager.java:295
|
||||||
msgstr "¿Debería estar activado el ícono de la barra de tareas?"
|
msgid "Stop I2P Immediately"
|
||||||
|
msgstr "Detener I2P inmediatamente"
|
||||||
|
|
||||||
|
#: src/net/i2p/desktopgui/InternalTrayManager.java:157
|
||||||
|
#: src/net/i2p/desktopgui/InternalTrayManager.java:309
|
||||||
|
msgid "Cancel I2P Shutdown"
|
||||||
|
msgstr "Cancelar el cierre de I2P"
|
||||||
|
|
||||||
|
#: src/net/i2p/desktopgui/InternalTrayManager.java:363
|
||||||
|
#, java-format
|
||||||
|
msgid "Shutdown in {0}"
|
||||||
|
msgstr "Cierre en {0}"
|
||||||
|
|
||||||
|
#: src/net/i2p/desktopgui/InternalTrayManager.java:365
|
||||||
|
msgid "Shutdown imminent"
|
||||||
|
msgstr "Cierre inminente"
|
||||||
|
|
||||||
|
#. status translations are in the console bundle
|
||||||
|
#: src/net/i2p/desktopgui/InternalTrayManager.java:370
|
||||||
|
msgid "Network"
|
||||||
|
msgstr "Red"
|
||||||
|
|
||||||
|
#. Windows typically has tooltips; Linux (at least Ubuntu) doesn't
|
||||||
|
#: src/net/i2p/desktopgui/TrayManager.java:63
|
||||||
|
msgid "I2P: Right-click for menu"
|
||||||
|
msgstr "I2P: Clic secundario para menú"
|
||||||
|
94
apps/desktopgui/locale/messages_fa.po
Normal file
@ -0,0 +1,94 @@
|
|||||||
|
# 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
|
||||||
|
#
|
||||||
|
# Translators:
|
||||||
|
# NoProfile, 2016
|
||||||
|
msgid ""
|
||||||
|
msgstr ""
|
||||||
|
"Project-Id-Version: I2P\n"
|
||||||
|
"Report-Msgid-Bugs-To: \n"
|
||||||
|
"POT-Creation-Date: 2016-05-25 12:29+0000\n"
|
||||||
|
"PO-Revision-Date: 2016-05-25 12:34+0000\n"
|
||||||
|
"Last-Translator: zzzi2p\n"
|
||||||
|
"Language-Team: Persian (http://www.transifex.com/otf/I2P/language/fa/)\n"
|
||||||
|
"MIME-Version: 1.0\n"
|
||||||
|
"Content-Type: text/plain; charset=UTF-8\n"
|
||||||
|
"Content-Transfer-Encoding: 8bit\n"
|
||||||
|
"Language: fa\n"
|
||||||
|
"Plural-Forms: nplurals=1; plural=0;\n"
|
||||||
|
|
||||||
|
#: src/net/i2p/desktopgui/ExternalTrayManager.java:31
|
||||||
|
#: src/net/i2p/desktopgui/ExternalTrayManager.java:59
|
||||||
|
msgid "Start I2P"
|
||||||
|
msgstr "شروع I2P"
|
||||||
|
|
||||||
|
#: src/net/i2p/desktopgui/ExternalTrayManager.java:44
|
||||||
|
#: src/net/i2p/desktopgui/ExternalTrayManager.java:72
|
||||||
|
msgid "I2P is starting!"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
#: src/net/i2p/desktopgui/ExternalTrayManager.java:44
|
||||||
|
#: src/net/i2p/desktopgui/ExternalTrayManager.java:72
|
||||||
|
msgid "Starting"
|
||||||
|
msgstr "راه اندازی"
|
||||||
|
|
||||||
|
#: src/net/i2p/desktopgui/InternalTrayManager.java:55
|
||||||
|
#: src/net/i2p/desktopgui/InternalTrayManager.java:207
|
||||||
|
msgid "Launch I2P Browser"
|
||||||
|
msgstr "راه اندازی مرورگر I2P"
|
||||||
|
|
||||||
|
#: src/net/i2p/desktopgui/InternalTrayManager.java:76
|
||||||
|
#: src/net/i2p/desktopgui/InternalTrayManager.java:228
|
||||||
|
msgid "Configure I2P System Tray"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
#: src/net/i2p/desktopgui/InternalTrayManager.java:77
|
||||||
|
#: src/net/i2p/desktopgui/InternalTrayManager.java:229
|
||||||
|
msgid "Disable"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
#: src/net/i2p/desktopgui/InternalTrayManager.java:93
|
||||||
|
#: src/net/i2p/desktopgui/InternalTrayManager.java:245
|
||||||
|
msgid "Restart I2P"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
#: src/net/i2p/desktopgui/InternalTrayManager.java:110
|
||||||
|
#: src/net/i2p/desktopgui/InternalTrayManager.java:262
|
||||||
|
msgid "Stop I2P"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
#: src/net/i2p/desktopgui/InternalTrayManager.java:126
|
||||||
|
#: src/net/i2p/desktopgui/InternalTrayManager.java:278
|
||||||
|
msgid "Restart I2P Immediately"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
#: src/net/i2p/desktopgui/InternalTrayManager.java:143
|
||||||
|
#: src/net/i2p/desktopgui/InternalTrayManager.java:295
|
||||||
|
msgid "Stop I2P Immediately"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
#: src/net/i2p/desktopgui/InternalTrayManager.java:157
|
||||||
|
#: src/net/i2p/desktopgui/InternalTrayManager.java:309
|
||||||
|
msgid "Cancel I2P Shutdown"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
#: src/net/i2p/desktopgui/InternalTrayManager.java:363
|
||||||
|
#, java-format
|
||||||
|
msgid "Shutdown in {0}"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
#: src/net/i2p/desktopgui/InternalTrayManager.java:365
|
||||||
|
msgid "Shutdown imminent"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
#. status translations are in the console bundle
|
||||||
|
#: src/net/i2p/desktopgui/InternalTrayManager.java:370
|
||||||
|
msgid "Network"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
#. Windows typically has tooltips; Linux (at least Ubuntu) doesn't
|
||||||
|
#: src/net/i2p/desktopgui/TrayManager.java:63
|
||||||
|
msgid "I2P: Right-click for menu"
|
||||||
|
msgstr ""
|
95
apps/desktopgui/locale/messages_fi.po
Normal file
@ -0,0 +1,95 @@
|
|||||||
|
# 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
|
||||||
|
#
|
||||||
|
# Translators:
|
||||||
|
# Jorma Karvonen <karvonen.jorma@gmail.com>, 2015
|
||||||
|
# outolumo <outolumo@gmail.com>, 2015-2016
|
||||||
|
msgid ""
|
||||||
|
msgstr ""
|
||||||
|
"Project-Id-Version: I2P\n"
|
||||||
|
"Report-Msgid-Bugs-To: \n"
|
||||||
|
"POT-Creation-Date: 2016-05-25 12:29+0000\n"
|
||||||
|
"PO-Revision-Date: 2016-06-01 18:50+0000\n"
|
||||||
|
"Last-Translator: outolumo <outolumo@gmail.com>\n"
|
||||||
|
"Language-Team: Finnish (http://www.transifex.com/otf/I2P/language/fi/)\n"
|
||||||
|
"MIME-Version: 1.0\n"
|
||||||
|
"Content-Type: text/plain; charset=UTF-8\n"
|
||||||
|
"Content-Transfer-Encoding: 8bit\n"
|
||||||
|
"Language: fi\n"
|
||||||
|
"Plural-Forms: nplurals=2; plural=(n != 1);\n"
|
||||||
|
|
||||||
|
#: src/net/i2p/desktopgui/ExternalTrayManager.java:31
|
||||||
|
#: src/net/i2p/desktopgui/ExternalTrayManager.java:59
|
||||||
|
msgid "Start I2P"
|
||||||
|
msgstr "Käynnistä I2P"
|
||||||
|
|
||||||
|
#: src/net/i2p/desktopgui/ExternalTrayManager.java:44
|
||||||
|
#: src/net/i2p/desktopgui/ExternalTrayManager.java:72
|
||||||
|
msgid "I2P is starting!"
|
||||||
|
msgstr "I2P on käynnistyy!"
|
||||||
|
|
||||||
|
#: src/net/i2p/desktopgui/ExternalTrayManager.java:44
|
||||||
|
#: src/net/i2p/desktopgui/ExternalTrayManager.java:72
|
||||||
|
msgid "Starting"
|
||||||
|
msgstr "Käynnistetään"
|
||||||
|
|
||||||
|
#: src/net/i2p/desktopgui/InternalTrayManager.java:55
|
||||||
|
#: src/net/i2p/desktopgui/InternalTrayManager.java:207
|
||||||
|
msgid "Launch I2P Browser"
|
||||||
|
msgstr "Käynnistä I2P-selain"
|
||||||
|
|
||||||
|
#: src/net/i2p/desktopgui/InternalTrayManager.java:76
|
||||||
|
#: src/net/i2p/desktopgui/InternalTrayManager.java:228
|
||||||
|
msgid "Configure I2P System Tray"
|
||||||
|
msgstr "I2P tehtäväpalkin asetukset"
|
||||||
|
|
||||||
|
#: src/net/i2p/desktopgui/InternalTrayManager.java:77
|
||||||
|
#: src/net/i2p/desktopgui/InternalTrayManager.java:229
|
||||||
|
msgid "Disable"
|
||||||
|
msgstr "Poista käytöstä"
|
||||||
|
|
||||||
|
#: src/net/i2p/desktopgui/InternalTrayManager.java:93
|
||||||
|
#: src/net/i2p/desktopgui/InternalTrayManager.java:245
|
||||||
|
msgid "Restart I2P"
|
||||||
|
msgstr "Käynnistä I2P uudelleen"
|
||||||
|
|
||||||
|
#: src/net/i2p/desktopgui/InternalTrayManager.java:110
|
||||||
|
#: src/net/i2p/desktopgui/InternalTrayManager.java:262
|
||||||
|
msgid "Stop I2P"
|
||||||
|
msgstr "Pysäytä I2P"
|
||||||
|
|
||||||
|
#: src/net/i2p/desktopgui/InternalTrayManager.java:126
|
||||||
|
#: src/net/i2p/desktopgui/InternalTrayManager.java:278
|
||||||
|
msgid "Restart I2P Immediately"
|
||||||
|
msgstr "Käynnistä I2P uudelleen heti"
|
||||||
|
|
||||||
|
#: src/net/i2p/desktopgui/InternalTrayManager.java:143
|
||||||
|
#: src/net/i2p/desktopgui/InternalTrayManager.java:295
|
||||||
|
msgid "Stop I2P Immediately"
|
||||||
|
msgstr "Pysäytä I2P heti"
|
||||||
|
|
||||||
|
#: src/net/i2p/desktopgui/InternalTrayManager.java:157
|
||||||
|
#: src/net/i2p/desktopgui/InternalTrayManager.java:309
|
||||||
|
msgid "Cancel I2P Shutdown"
|
||||||
|
msgstr "Peruuta I2P:n sammutus"
|
||||||
|
|
||||||
|
#: src/net/i2p/desktopgui/InternalTrayManager.java:363
|
||||||
|
#, java-format
|
||||||
|
msgid "Shutdown in {0}"
|
||||||
|
msgstr "Sammuta {0} kuluttua..."
|
||||||
|
|
||||||
|
#: src/net/i2p/desktopgui/InternalTrayManager.java:365
|
||||||
|
msgid "Shutdown imminent"
|
||||||
|
msgstr "Sammutus välittömästi"
|
||||||
|
|
||||||
|
#. status translations are in the console bundle
|
||||||
|
#: src/net/i2p/desktopgui/InternalTrayManager.java:370
|
||||||
|
msgid "Network"
|
||||||
|
msgstr "Verkko"
|
||||||
|
|
||||||
|
#. Windows typically has tooltips; Linux (at least Ubuntu) doesn't
|
||||||
|
#: src/net/i2p/desktopgui/TrayManager.java:63
|
||||||
|
msgid "I2P: Right-click for menu"
|
||||||
|
msgstr "I2P: Valikko hiiren kakkosnapilla"
|
@ -2,59 +2,98 @@
|
|||||||
# Copyright (C) 2009 The I2P Project
|
# Copyright (C) 2009 The I2P Project
|
||||||
# This file is distributed under the same license as the desktopgui package.
|
# This file is distributed under the same license as the desktopgui package.
|
||||||
# To contribute translations, see http://www.i2p2.de/newdevelopers
|
# To contribute translations, see http://www.i2p2.de/newdevelopers
|
||||||
#
|
#
|
||||||
# Translators:
|
# Translators:
|
||||||
# blabla <blabla@trash-mail.com>, 2011
|
# blabla <blabla@trash-mail.com>, 2011
|
||||||
|
# Boxoa590, 2013
|
||||||
# ducki2p <ducki2p@gmail.com>, 2011
|
# ducki2p <ducki2p@gmail.com>, 2011
|
||||||
# foo <foo@bar>, 2009
|
# foo <foo@bar>, 2009
|
||||||
# Boxoa590, 2013
|
# Boxoa590, 2013
|
||||||
|
# Towinet, 2016
|
||||||
msgid ""
|
msgid ""
|
||||||
msgstr ""
|
msgstr ""
|
||||||
"Project-Id-Version: I2P\n"
|
"Project-Id-Version: I2P\n"
|
||||||
"Report-Msgid-Bugs-To: \n"
|
"Report-Msgid-Bugs-To: \n"
|
||||||
"POT-Creation-Date: 2014-01-09 19:14+0000\n"
|
"POT-Creation-Date: 2016-05-25 12:29+0000\n"
|
||||||
"PO-Revision-Date: 2013-06-08 04:50+0000\n"
|
"PO-Revision-Date: 2016-05-26 15:55+0000\n"
|
||||||
"Last-Translator: Boxoa590\n"
|
"Last-Translator: Towinet\n"
|
||||||
"Language-Team: French (http://www.transifex.com/projects/p/I2P/language/"
|
"Language-Team: French (http://www.transifex.com/otf/I2P/language/fr/)\n"
|
||||||
"fr/)\n"
|
|
||||||
"Language: fr\n"
|
|
||||||
"MIME-Version: 1.0\n"
|
"MIME-Version: 1.0\n"
|
||||||
"Content-Type: text/plain; charset=UTF-8\n"
|
"Content-Type: text/plain; charset=UTF-8\n"
|
||||||
"Content-Transfer-Encoding: 8bit\n"
|
"Content-Transfer-Encoding: 8bit\n"
|
||||||
|
"Language: fr\n"
|
||||||
"Plural-Forms: nplurals=2; plural=(n > 1);\n"
|
"Plural-Forms: nplurals=2; plural=(n > 1);\n"
|
||||||
|
|
||||||
#: src/net/i2p/desktopgui/ExternalTrayManager.java:23
|
#: src/net/i2p/desktopgui/ExternalTrayManager.java:31
|
||||||
|
#: src/net/i2p/desktopgui/ExternalTrayManager.java:59
|
||||||
msgid "Start I2P"
|
msgid "Start I2P"
|
||||||
msgstr "Démarrer I2P"
|
msgstr "Démarrer I2P"
|
||||||
|
|
||||||
#: src/net/i2p/desktopgui/ExternalTrayManager.java:38
|
#: src/net/i2p/desktopgui/ExternalTrayManager.java:44
|
||||||
|
#: src/net/i2p/desktopgui/ExternalTrayManager.java:72
|
||||||
msgid "I2P is starting!"
|
msgid "I2P is starting!"
|
||||||
msgstr "I2P démarre !"
|
msgstr "I2P démarre !"
|
||||||
|
|
||||||
#: src/net/i2p/desktopgui/ExternalTrayManager.java:38
|
#: src/net/i2p/desktopgui/ExternalTrayManager.java:44
|
||||||
|
#: src/net/i2p/desktopgui/ExternalTrayManager.java:72
|
||||||
msgid "Starting"
|
msgid "Starting"
|
||||||
msgstr "Démarrage"
|
msgstr "Démarrage"
|
||||||
|
|
||||||
#: src/net/i2p/desktopgui/InternalTrayManager.java:26
|
#: src/net/i2p/desktopgui/InternalTrayManager.java:55
|
||||||
|
#: src/net/i2p/desktopgui/InternalTrayManager.java:207
|
||||||
msgid "Launch I2P Browser"
|
msgid "Launch I2P Browser"
|
||||||
msgstr "Lancer le navigateur I2P"
|
msgstr "Lancer le navigateur I2P"
|
||||||
|
|
||||||
#: src/net/i2p/desktopgui/InternalTrayManager.java:50
|
#: src/net/i2p/desktopgui/InternalTrayManager.java:76
|
||||||
msgid "Configure desktopgui"
|
#: src/net/i2p/desktopgui/InternalTrayManager.java:228
|
||||||
msgstr "Configurer l'interface de bureau"
|
msgid "Configure I2P System Tray"
|
||||||
|
msgstr "Configurer la zone de notification d'I2P"
|
||||||
|
|
||||||
#: src/net/i2p/desktopgui/InternalTrayManager.java:67
|
#: src/net/i2p/desktopgui/InternalTrayManager.java:77
|
||||||
|
#: src/net/i2p/desktopgui/InternalTrayManager.java:229
|
||||||
|
msgid "Disable"
|
||||||
|
msgstr "Désactiver"
|
||||||
|
|
||||||
|
#: src/net/i2p/desktopgui/InternalTrayManager.java:93
|
||||||
|
#: src/net/i2p/desktopgui/InternalTrayManager.java:245
|
||||||
msgid "Restart I2P"
|
msgid "Restart I2P"
|
||||||
msgstr "Redémarrer I2P"
|
msgstr "Redémarrer I2P"
|
||||||
|
|
||||||
#: src/net/i2p/desktopgui/InternalTrayManager.java:85
|
#: src/net/i2p/desktopgui/InternalTrayManager.java:110
|
||||||
|
#: src/net/i2p/desktopgui/InternalTrayManager.java:262
|
||||||
msgid "Stop I2P"
|
msgid "Stop I2P"
|
||||||
msgstr "Arrêter I2P"
|
msgstr "Arrêter I2P"
|
||||||
|
|
||||||
#: src/net/i2p/desktopgui/gui/DesktopguiConfigurationFrame.java:43
|
#: src/net/i2p/desktopgui/InternalTrayManager.java:126
|
||||||
msgid "Tray icon configuration"
|
#: src/net/i2p/desktopgui/InternalTrayManager.java:278
|
||||||
msgstr "Configuration de l'icône de notification"
|
msgid "Restart I2P Immediately"
|
||||||
|
msgstr "Redémarrer I2P immédiatement"
|
||||||
|
|
||||||
#: src/net/i2p/desktopgui/gui/DesktopguiConfigurationFrame.java:46
|
#: src/net/i2p/desktopgui/InternalTrayManager.java:143
|
||||||
msgid "Should tray icon be enabled?"
|
#: src/net/i2p/desktopgui/InternalTrayManager.java:295
|
||||||
msgstr "Activer l'icône de notification ?"
|
msgid "Stop I2P Immediately"
|
||||||
|
msgstr "Arrêter I2P immédiatement"
|
||||||
|
|
||||||
|
#: src/net/i2p/desktopgui/InternalTrayManager.java:157
|
||||||
|
#: src/net/i2p/desktopgui/InternalTrayManager.java:309
|
||||||
|
msgid "Cancel I2P Shutdown"
|
||||||
|
msgstr "Annuler l'arrêt d'I2P"
|
||||||
|
|
||||||
|
#: src/net/i2p/desktopgui/InternalTrayManager.java:363
|
||||||
|
#, java-format
|
||||||
|
msgid "Shutdown in {0}"
|
||||||
|
msgstr "Arrêt dans {0}"
|
||||||
|
|
||||||
|
#: src/net/i2p/desktopgui/InternalTrayManager.java:365
|
||||||
|
msgid "Shutdown imminent"
|
||||||
|
msgstr "Arrêt imminent"
|
||||||
|
|
||||||
|
#. status translations are in the console bundle
|
||||||
|
#: src/net/i2p/desktopgui/InternalTrayManager.java:370
|
||||||
|
msgid "Network"
|
||||||
|
msgstr "Réseau"
|
||||||
|
|
||||||
|
#. Windows typically has tooltips; Linux (at least Ubuntu) doesn't
|
||||||
|
#: src/net/i2p/desktopgui/TrayManager.java:63
|
||||||
|
msgid "I2P: Right-click for menu"
|
||||||
|
msgstr "I2P : clic droit pour menu"
|
||||||
|
94
apps/desktopgui/locale/messages_gl.po
Normal file
@ -0,0 +1,94 @@
|
|||||||
|
# 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
|
||||||
|
#
|
||||||
|
# Translators:
|
||||||
|
# Uberius Crypto <uberius@anonymail.tech>, 2016
|
||||||
|
msgid ""
|
||||||
|
msgstr ""
|
||||||
|
"Project-Id-Version: I2P\n"
|
||||||
|
"Report-Msgid-Bugs-To: \n"
|
||||||
|
"POT-Creation-Date: 2016-05-25 12:29+0000\n"
|
||||||
|
"PO-Revision-Date: 2016-10-22 05:24+0000\n"
|
||||||
|
"Last-Translator: Uberius Crypto <uberius@anonymail.tech>\n"
|
||||||
|
"Language-Team: Galician (http://www.transifex.com/otf/I2P/language/gl/)\n"
|
||||||
|
"MIME-Version: 1.0\n"
|
||||||
|
"Content-Type: text/plain; charset=UTF-8\n"
|
||||||
|
"Content-Transfer-Encoding: 8bit\n"
|
||||||
|
"Language: gl\n"
|
||||||
|
"Plural-Forms: nplurals=2; plural=(n != 1);\n"
|
||||||
|
|
||||||
|
#: src/net/i2p/desktopgui/ExternalTrayManager.java:31
|
||||||
|
#: src/net/i2p/desktopgui/ExternalTrayManager.java:59
|
||||||
|
msgid "Start I2P"
|
||||||
|
msgstr "Iniciar I2P"
|
||||||
|
|
||||||
|
#: src/net/i2p/desktopgui/ExternalTrayManager.java:44
|
||||||
|
#: src/net/i2p/desktopgui/ExternalTrayManager.java:72
|
||||||
|
msgid "I2P is starting!"
|
||||||
|
msgstr "I2P está a se iniciar!"
|
||||||
|
|
||||||
|
#: src/net/i2p/desktopgui/ExternalTrayManager.java:44
|
||||||
|
#: src/net/i2p/desktopgui/ExternalTrayManager.java:72
|
||||||
|
msgid "Starting"
|
||||||
|
msgstr "Iniciando"
|
||||||
|
|
||||||
|
#: src/net/i2p/desktopgui/InternalTrayManager.java:55
|
||||||
|
#: src/net/i2p/desktopgui/InternalTrayManager.java:207
|
||||||
|
msgid "Launch I2P Browser"
|
||||||
|
msgstr "Lanzar Navegador I2P"
|
||||||
|
|
||||||
|
#: src/net/i2p/desktopgui/InternalTrayManager.java:76
|
||||||
|
#: src/net/i2p/desktopgui/InternalTrayManager.java:228
|
||||||
|
msgid "Configure I2P System Tray"
|
||||||
|
msgstr "Configurar a Bandexa do Sistema I2P"
|
||||||
|
|
||||||
|
#: src/net/i2p/desktopgui/InternalTrayManager.java:77
|
||||||
|
#: src/net/i2p/desktopgui/InternalTrayManager.java:229
|
||||||
|
msgid "Disable"
|
||||||
|
msgstr "Inhabilitar"
|
||||||
|
|
||||||
|
#: src/net/i2p/desktopgui/InternalTrayManager.java:93
|
||||||
|
#: src/net/i2p/desktopgui/InternalTrayManager.java:245
|
||||||
|
msgid "Restart I2P"
|
||||||
|
msgstr "Reiniciar I2P"
|
||||||
|
|
||||||
|
#: src/net/i2p/desktopgui/InternalTrayManager.java:110
|
||||||
|
#: src/net/i2p/desktopgui/InternalTrayManager.java:262
|
||||||
|
msgid "Stop I2P"
|
||||||
|
msgstr "Deter I2P"
|
||||||
|
|
||||||
|
#: src/net/i2p/desktopgui/InternalTrayManager.java:126
|
||||||
|
#: src/net/i2p/desktopgui/InternalTrayManager.java:278
|
||||||
|
msgid "Restart I2P Immediately"
|
||||||
|
msgstr "Reiniciar I2P Inmediatamente"
|
||||||
|
|
||||||
|
#: src/net/i2p/desktopgui/InternalTrayManager.java:143
|
||||||
|
#: src/net/i2p/desktopgui/InternalTrayManager.java:295
|
||||||
|
msgid "Stop I2P Immediately"
|
||||||
|
msgstr "Deter I2P Inmediatamente"
|
||||||
|
|
||||||
|
#: src/net/i2p/desktopgui/InternalTrayManager.java:157
|
||||||
|
#: src/net/i2p/desktopgui/InternalTrayManager.java:309
|
||||||
|
msgid "Cancel I2P Shutdown"
|
||||||
|
msgstr "Cancelar Apagado I2P"
|
||||||
|
|
||||||
|
#: src/net/i2p/desktopgui/InternalTrayManager.java:363
|
||||||
|
#, java-format
|
||||||
|
msgid "Shutdown in {0}"
|
||||||
|
msgstr "Apagar en {0}"
|
||||||
|
|
||||||
|
#: src/net/i2p/desktopgui/InternalTrayManager.java:365
|
||||||
|
msgid "Shutdown imminent"
|
||||||
|
msgstr "Apagar de contado"
|
||||||
|
|
||||||
|
#. status translations are in the console bundle
|
||||||
|
#: src/net/i2p/desktopgui/InternalTrayManager.java:370
|
||||||
|
msgid "Network"
|
||||||
|
msgstr "Rede"
|
||||||
|
|
||||||
|
#. Windows typically has tooltips; Linux (at least Ubuntu) doesn't
|
||||||
|
#: src/net/i2p/desktopgui/TrayManager.java:63
|
||||||
|
msgid "I2P: Right-click for menu"
|
||||||
|
msgstr "I2P: Clic co botón dereito para acceder ó menú"
|
@ -7,49 +7,87 @@
|
|||||||
msgid ""
|
msgid ""
|
||||||
msgstr ""
|
msgstr ""
|
||||||
"Project-Id-Version: I2P\n"
|
"Project-Id-Version: I2P\n"
|
||||||
"Report-Msgid-Bugs-To: https://trac.i2p2.de/\n"
|
"Report-Msgid-Bugs-To: \n"
|
||||||
"POT-Creation-Date: 2011-03-03 18:29+0000\n"
|
"POT-Creation-Date: 2016-05-25 12:29+0000\n"
|
||||||
"PO-Revision-Date: 2012-06-01 16:28+0000\n"
|
"PO-Revision-Date: 2016-05-25 12:34+0000\n"
|
||||||
"Last-Translator: AdminLMH <lehetmashogy@i2pmail.org>\n"
|
"Last-Translator: zzzi2p\n"
|
||||||
"Language-Team: Hungarian (http://www.transifex.net/projects/p/I2P/language/hu/)\n"
|
"Language-Team: Hungarian (http://www.transifex.com/otf/I2P/language/hu/)\n"
|
||||||
"MIME-Version: 1.0\n"
|
"MIME-Version: 1.0\n"
|
||||||
"Content-Type: text/plain; charset=UTF-8\n"
|
"Content-Type: text/plain; charset=UTF-8\n"
|
||||||
"Content-Transfer-Encoding: 8bit\n"
|
"Content-Transfer-Encoding: 8bit\n"
|
||||||
"Language: hu\n"
|
"Language: hu\n"
|
||||||
"Plural-Forms: nplurals=2; plural=(n != 1)\n"
|
"Plural-Forms: nplurals=2; plural=(n != 1);\n"
|
||||||
|
|
||||||
#: src/net/i2p/desktopgui/ExternalTrayManager.java:23
|
#: src/net/i2p/desktopgui/ExternalTrayManager.java:31
|
||||||
|
#: src/net/i2p/desktopgui/ExternalTrayManager.java:59
|
||||||
msgid "Start I2P"
|
msgid "Start I2P"
|
||||||
msgstr "I2P indítása"
|
msgstr "I2P indítása"
|
||||||
|
|
||||||
#: src/net/i2p/desktopgui/ExternalTrayManager.java:38
|
#: src/net/i2p/desktopgui/ExternalTrayManager.java:44
|
||||||
|
#: src/net/i2p/desktopgui/ExternalTrayManager.java:72
|
||||||
msgid "I2P is starting!"
|
msgid "I2P is starting!"
|
||||||
msgstr "I2P indul!"
|
msgstr "I2P indul!"
|
||||||
|
|
||||||
#: src/net/i2p/desktopgui/ExternalTrayManager.java:38
|
#: src/net/i2p/desktopgui/ExternalTrayManager.java:44
|
||||||
|
#: src/net/i2p/desktopgui/ExternalTrayManager.java:72
|
||||||
msgid "Starting"
|
msgid "Starting"
|
||||||
msgstr "indítás"
|
msgstr "indítás"
|
||||||
|
|
||||||
#: src/net/i2p/desktopgui/InternalTrayManager.java:26
|
#: src/net/i2p/desktopgui/InternalTrayManager.java:55
|
||||||
|
#: src/net/i2p/desktopgui/InternalTrayManager.java:207
|
||||||
msgid "Launch I2P Browser"
|
msgid "Launch I2P Browser"
|
||||||
msgstr "I2P Böngésző Indítása"
|
msgstr "I2P Böngésző Indítása"
|
||||||
|
|
||||||
#: src/net/i2p/desktopgui/InternalTrayManager.java:50
|
#: src/net/i2p/desktopgui/InternalTrayManager.java:76
|
||||||
msgid "Configure desktopgui"
|
#: src/net/i2p/desktopgui/InternalTrayManager.java:228
|
||||||
msgstr "Asztali Grafikus Felület Beállítása"
|
msgid "Configure I2P System Tray"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
#: src/net/i2p/desktopgui/InternalTrayManager.java:67
|
#: src/net/i2p/desktopgui/InternalTrayManager.java:77
|
||||||
|
#: src/net/i2p/desktopgui/InternalTrayManager.java:229
|
||||||
|
msgid "Disable"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
#: src/net/i2p/desktopgui/InternalTrayManager.java:93
|
||||||
|
#: src/net/i2p/desktopgui/InternalTrayManager.java:245
|
||||||
msgid "Restart I2P"
|
msgid "Restart I2P"
|
||||||
msgstr "I2P Újraindítása"
|
msgstr "I2P Újraindítása"
|
||||||
|
|
||||||
#: src/net/i2p/desktopgui/InternalTrayManager.java:85
|
#: src/net/i2p/desktopgui/InternalTrayManager.java:110
|
||||||
|
#: src/net/i2p/desktopgui/InternalTrayManager.java:262
|
||||||
msgid "Stop I2P"
|
msgid "Stop I2P"
|
||||||
msgstr "I2P Leállítása"
|
msgstr "I2P Leállítása"
|
||||||
|
|
||||||
#: src/net/i2p/desktopgui/gui/DesktopguiConfigurationFrame.java:44
|
#: src/net/i2p/desktopgui/InternalTrayManager.java:126
|
||||||
msgid "Tray icon configuration"
|
#: src/net/i2p/desktopgui/InternalTrayManager.java:278
|
||||||
msgstr "Tálcaikon beállítása"
|
msgid "Restart I2P Immediately"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
#: src/net/i2p/desktopgui/gui/DesktopguiConfigurationFrame.java:47
|
#: src/net/i2p/desktopgui/InternalTrayManager.java:143
|
||||||
msgid "Should tray icon be enabled?"
|
#: src/net/i2p/desktopgui/InternalTrayManager.java:295
|
||||||
msgstr "Tálcaikon engedélyezve legyen?"
|
msgid "Stop I2P Immediately"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
#: src/net/i2p/desktopgui/InternalTrayManager.java:157
|
||||||
|
#: src/net/i2p/desktopgui/InternalTrayManager.java:309
|
||||||
|
msgid "Cancel I2P Shutdown"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
#: src/net/i2p/desktopgui/InternalTrayManager.java:363
|
||||||
|
#, java-format
|
||||||
|
msgid "Shutdown in {0}"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
#: src/net/i2p/desktopgui/InternalTrayManager.java:365
|
||||||
|
msgid "Shutdown imminent"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
#. status translations are in the console bundle
|
||||||
|
#: src/net/i2p/desktopgui/InternalTrayManager.java:370
|
||||||
|
msgid "Network"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
#. Windows typically has tooltips; Linux (at least Ubuntu) doesn't
|
||||||
|
#: src/net/i2p/desktopgui/TrayManager.java:63
|
||||||
|
msgid "I2P: Right-click for menu"
|
||||||
|
msgstr ""
|
||||||
|
94
apps/desktopgui/locale/messages_in.po
Normal file
@ -0,0 +1,94 @@
|
|||||||
|
# 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
|
||||||
|
#
|
||||||
|
# Translators:
|
||||||
|
# Khairul Agasta <khairuldroids@gmail.com>, 2014
|
||||||
|
msgid ""
|
||||||
|
msgstr ""
|
||||||
|
"Project-Id-Version: I2P\n"
|
||||||
|
"Report-Msgid-Bugs-To: \n"
|
||||||
|
"POT-Creation-Date: 2016-05-25 12:29+0000\n"
|
||||||
|
"PO-Revision-Date: 2016-05-25 12:34+0000\n"
|
||||||
|
"Last-Translator: zzzi2p\n"
|
||||||
|
"Language-Team: Indonesian (http://www.transifex.com/otf/I2P/language/id/)\n"
|
||||||
|
"MIME-Version: 1.0\n"
|
||||||
|
"Content-Type: text/plain; charset=UTF-8\n"
|
||||||
|
"Content-Transfer-Encoding: 8bit\n"
|
||||||
|
"Language: id\n"
|
||||||
|
"Plural-Forms: nplurals=1; plural=0;\n"
|
||||||
|
|
||||||
|
#: src/net/i2p/desktopgui/ExternalTrayManager.java:31
|
||||||
|
#: src/net/i2p/desktopgui/ExternalTrayManager.java:59
|
||||||
|
msgid "Start I2P"
|
||||||
|
msgstr "Mulai I2P"
|
||||||
|
|
||||||
|
#: src/net/i2p/desktopgui/ExternalTrayManager.java:44
|
||||||
|
#: src/net/i2p/desktopgui/ExternalTrayManager.java:72
|
||||||
|
msgid "I2P is starting!"
|
||||||
|
msgstr "I2P sudah memulai!"
|
||||||
|
|
||||||
|
#: src/net/i2p/desktopgui/ExternalTrayManager.java:44
|
||||||
|
#: src/net/i2p/desktopgui/ExternalTrayManager.java:72
|
||||||
|
msgid "Starting"
|
||||||
|
msgstr "Memulai"
|
||||||
|
|
||||||
|
#: src/net/i2p/desktopgui/InternalTrayManager.java:55
|
||||||
|
#: src/net/i2p/desktopgui/InternalTrayManager.java:207
|
||||||
|
msgid "Launch I2P Browser"
|
||||||
|
msgstr "Luncurkan Peramban I2P"
|
||||||
|
|
||||||
|
#: src/net/i2p/desktopgui/InternalTrayManager.java:76
|
||||||
|
#: src/net/i2p/desktopgui/InternalTrayManager.java:228
|
||||||
|
msgid "Configure I2P System Tray"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
#: src/net/i2p/desktopgui/InternalTrayManager.java:77
|
||||||
|
#: src/net/i2p/desktopgui/InternalTrayManager.java:229
|
||||||
|
msgid "Disable"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
#: src/net/i2p/desktopgui/InternalTrayManager.java:93
|
||||||
|
#: src/net/i2p/desktopgui/InternalTrayManager.java:245
|
||||||
|
msgid "Restart I2P"
|
||||||
|
msgstr "Mulai ulang I2P"
|
||||||
|
|
||||||
|
#: src/net/i2p/desktopgui/InternalTrayManager.java:110
|
||||||
|
#: src/net/i2p/desktopgui/InternalTrayManager.java:262
|
||||||
|
msgid "Stop I2P"
|
||||||
|
msgstr "Hentikan I2P"
|
||||||
|
|
||||||
|
#: src/net/i2p/desktopgui/InternalTrayManager.java:126
|
||||||
|
#: src/net/i2p/desktopgui/InternalTrayManager.java:278
|
||||||
|
msgid "Restart I2P Immediately"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
#: src/net/i2p/desktopgui/InternalTrayManager.java:143
|
||||||
|
#: src/net/i2p/desktopgui/InternalTrayManager.java:295
|
||||||
|
msgid "Stop I2P Immediately"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
#: src/net/i2p/desktopgui/InternalTrayManager.java:157
|
||||||
|
#: src/net/i2p/desktopgui/InternalTrayManager.java:309
|
||||||
|
msgid "Cancel I2P Shutdown"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
#: src/net/i2p/desktopgui/InternalTrayManager.java:363
|
||||||
|
#, java-format
|
||||||
|
msgid "Shutdown in {0}"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
#: src/net/i2p/desktopgui/InternalTrayManager.java:365
|
||||||
|
msgid "Shutdown imminent"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
#. status translations are in the console bundle
|
||||||
|
#: src/net/i2p/desktopgui/InternalTrayManager.java:370
|
||||||
|
msgid "Network"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
#. Windows typically has tooltips; Linux (at least Ubuntu) doesn't
|
||||||
|
#: src/net/i2p/desktopgui/TrayManager.java:63
|
||||||
|
msgid "I2P: Right-click for menu"
|
||||||
|
msgstr ""
|
@ -4,54 +4,93 @@
|
|||||||
# To contribute translations, see http://www.i2p2.de/newdevelopers
|
# To contribute translations, see http://www.i2p2.de/newdevelopers
|
||||||
#
|
#
|
||||||
# Translators:
|
# Translators:
|
||||||
# <bovas85@gmail.com>, 2012.
|
# Leelium <bovas85@gmail.com>, 2012
|
||||||
# <jokjok@hotmail.it>, 2011.
|
# mkkid <jokjok@hotmail.it>, 2011
|
||||||
|
# Sebastiano Pistore <olatusrooc@virgilio.it>, 2016
|
||||||
msgid ""
|
msgid ""
|
||||||
msgstr ""
|
msgstr ""
|
||||||
"Project-Id-Version: I2P\n"
|
"Project-Id-Version: I2P\n"
|
||||||
"Report-Msgid-Bugs-To: https://trac.i2p2.de/\n"
|
"Report-Msgid-Bugs-To: \n"
|
||||||
"POT-Creation-Date: 2011-03-03 18:29+0000\n"
|
"POT-Creation-Date: 2016-05-25 12:29+0000\n"
|
||||||
"PO-Revision-Date: 2012-06-01 12:21+0000\n"
|
"PO-Revision-Date: 2016-05-26 09:32+0000\n"
|
||||||
"Last-Translator: Leelium <bovas85@gmail.com>\n"
|
"Last-Translator: Sebastiano Pistore <olatusrooc@virgilio.it>\n"
|
||||||
"Language-Team: Italian (http://www.transifex.net/projects/p/I2P/language/it/)\n"
|
"Language-Team: Italian (http://www.transifex.com/otf/I2P/language/it/)\n"
|
||||||
"MIME-Version: 1.0\n"
|
"MIME-Version: 1.0\n"
|
||||||
"Content-Type: text/plain; charset=UTF-8\n"
|
"Content-Type: text/plain; charset=UTF-8\n"
|
||||||
"Content-Transfer-Encoding: 8bit\n"
|
"Content-Transfer-Encoding: 8bit\n"
|
||||||
"Language: it\n"
|
"Language: it\n"
|
||||||
"Plural-Forms: nplurals=2; plural=(n != 1)\n"
|
"Plural-Forms: nplurals=2; plural=(n != 1);\n"
|
||||||
|
|
||||||
#: src/net/i2p/desktopgui/ExternalTrayManager.java:23
|
#: src/net/i2p/desktopgui/ExternalTrayManager.java:31
|
||||||
|
#: src/net/i2p/desktopgui/ExternalTrayManager.java:59
|
||||||
msgid "Start I2P"
|
msgid "Start I2P"
|
||||||
msgstr "Avvia I2P"
|
msgstr "Avvia I2P"
|
||||||
|
|
||||||
#: src/net/i2p/desktopgui/ExternalTrayManager.java:38
|
#: src/net/i2p/desktopgui/ExternalTrayManager.java:44
|
||||||
|
#: src/net/i2p/desktopgui/ExternalTrayManager.java:72
|
||||||
msgid "I2P is starting!"
|
msgid "I2P is starting!"
|
||||||
msgstr "Avvio di I2P in corso!"
|
msgstr "Avvio di I2P in corso!"
|
||||||
|
|
||||||
#: src/net/i2p/desktopgui/ExternalTrayManager.java:38
|
#: src/net/i2p/desktopgui/ExternalTrayManager.java:44
|
||||||
|
#: src/net/i2p/desktopgui/ExternalTrayManager.java:72
|
||||||
msgid "Starting"
|
msgid "Starting"
|
||||||
msgstr "Avvio"
|
msgstr "Avvio"
|
||||||
|
|
||||||
#: src/net/i2p/desktopgui/InternalTrayManager.java:26
|
#: src/net/i2p/desktopgui/InternalTrayManager.java:55
|
||||||
|
#: src/net/i2p/desktopgui/InternalTrayManager.java:207
|
||||||
msgid "Launch I2P Browser"
|
msgid "Launch I2P Browser"
|
||||||
msgstr "Avvia il Browser I2P"
|
msgstr "Avvia il Browser I2P"
|
||||||
|
|
||||||
#: src/net/i2p/desktopgui/InternalTrayManager.java:50
|
#: src/net/i2p/desktopgui/InternalTrayManager.java:76
|
||||||
msgid "Configure desktopgui"
|
#: src/net/i2p/desktopgui/InternalTrayManager.java:228
|
||||||
msgstr "Configura desktopgui"
|
msgid "Configure I2P System Tray"
|
||||||
|
msgstr "Configura l'icona di I2P nella Barra dei notifica"
|
||||||
|
|
||||||
#: src/net/i2p/desktopgui/InternalTrayManager.java:67
|
#: src/net/i2p/desktopgui/InternalTrayManager.java:77
|
||||||
|
#: src/net/i2p/desktopgui/InternalTrayManager.java:229
|
||||||
|
msgid "Disable"
|
||||||
|
msgstr "Disabilita"
|
||||||
|
|
||||||
|
#: src/net/i2p/desktopgui/InternalTrayManager.java:93
|
||||||
|
#: src/net/i2p/desktopgui/InternalTrayManager.java:245
|
||||||
msgid "Restart I2P"
|
msgid "Restart I2P"
|
||||||
msgstr "Riavvia I2P"
|
msgstr "Riavvia I2P"
|
||||||
|
|
||||||
#: src/net/i2p/desktopgui/InternalTrayManager.java:85
|
#: src/net/i2p/desktopgui/InternalTrayManager.java:110
|
||||||
|
#: src/net/i2p/desktopgui/InternalTrayManager.java:262
|
||||||
msgid "Stop I2P"
|
msgid "Stop I2P"
|
||||||
msgstr "Ferma I2P"
|
msgstr "Ferma I2P"
|
||||||
|
|
||||||
#: src/net/i2p/desktopgui/gui/DesktopguiConfigurationFrame.java:44
|
#: src/net/i2p/desktopgui/InternalTrayManager.java:126
|
||||||
msgid "Tray icon configuration"
|
#: src/net/i2p/desktopgui/InternalTrayManager.java:278
|
||||||
msgstr "Configurazione dell'icona nell'area di notifica"
|
msgid "Restart I2P Immediately"
|
||||||
|
msgstr "Riavvia subito I2P"
|
||||||
|
|
||||||
#: src/net/i2p/desktopgui/gui/DesktopguiConfigurationFrame.java:47
|
#: src/net/i2p/desktopgui/InternalTrayManager.java:143
|
||||||
msgid "Should tray icon be enabled?"
|
#: src/net/i2p/desktopgui/InternalTrayManager.java:295
|
||||||
msgstr "Vuoi che l'icona nelll'rea di notifica venga abilitata?"
|
msgid "Stop I2P Immediately"
|
||||||
|
msgstr "Arresta subito I2P"
|
||||||
|
|
||||||
|
#: src/net/i2p/desktopgui/InternalTrayManager.java:157
|
||||||
|
#: src/net/i2p/desktopgui/InternalTrayManager.java:309
|
||||||
|
msgid "Cancel I2P Shutdown"
|
||||||
|
msgstr "Annulla l'arresto di I2P"
|
||||||
|
|
||||||
|
#: src/net/i2p/desktopgui/InternalTrayManager.java:363
|
||||||
|
#, java-format
|
||||||
|
msgid "Shutdown in {0}"
|
||||||
|
msgstr "Spegnimento in {0}"
|
||||||
|
|
||||||
|
#: src/net/i2p/desktopgui/InternalTrayManager.java:365
|
||||||
|
msgid "Shutdown imminent"
|
||||||
|
msgstr "Spegnimento imminente"
|
||||||
|
|
||||||
|
#. status translations are in the console bundle
|
||||||
|
#: src/net/i2p/desktopgui/InternalTrayManager.java:370
|
||||||
|
msgid "Network"
|
||||||
|
msgstr "Rete"
|
||||||
|
|
||||||
|
#. Windows typically has tooltips; Linux (at least Ubuntu) doesn't
|
||||||
|
#: src/net/i2p/desktopgui/TrayManager.java:63
|
||||||
|
msgid "I2P: Right-click for menu"
|
||||||
|
msgstr "I2P: Fai un click destro per aprire il menu"
|
||||||
|
@ -4,53 +4,91 @@
|
|||||||
# To contribute translations, see http://www.i2p2.de/newdevelopers
|
# To contribute translations, see http://www.i2p2.de/newdevelopers
|
||||||
#
|
#
|
||||||
# Translators:
|
# Translators:
|
||||||
# plazmism <gomidori@live.jp>, 2013
|
# タカハシ <indexial@outlook.jp>, 2013
|
||||||
msgid ""
|
msgid ""
|
||||||
msgstr ""
|
msgstr ""
|
||||||
"Project-Id-Version: I2P\n"
|
"Project-Id-Version: I2P\n"
|
||||||
"Report-Msgid-Bugs-To: \n"
|
"Report-Msgid-Bugs-To: \n"
|
||||||
"POT-Creation-Date: 2011-03-03 18:29+0000\n"
|
"POT-Creation-Date: 2016-05-25 12:29+0000\n"
|
||||||
"PO-Revision-Date: 2013-11-26 10:38+0000\n"
|
"PO-Revision-Date: 2016-05-25 12:34+0000\n"
|
||||||
"Last-Translator: plazmism <gomidori@live.jp>\n"
|
"Last-Translator: zzzi2p\n"
|
||||||
"Language-Team: Japanese (http://www.transifex.com/projects/p/I2P/language/ja/)\n"
|
"Language-Team: Japanese (http://www.transifex.com/otf/I2P/language/ja/)\n"
|
||||||
"MIME-Version: 1.0\n"
|
"MIME-Version: 1.0\n"
|
||||||
"Content-Type: text/plain; charset=UTF-8\n"
|
"Content-Type: text/plain; charset=UTF-8\n"
|
||||||
"Content-Transfer-Encoding: 8bit\n"
|
"Content-Transfer-Encoding: 8bit\n"
|
||||||
"Language: ja\n"
|
"Language: ja\n"
|
||||||
"Plural-Forms: nplurals=1; plural=0;\n"
|
"Plural-Forms: nplurals=1; plural=0;\n"
|
||||||
|
|
||||||
#: src/net/i2p/desktopgui/ExternalTrayManager.java:23
|
#: src/net/i2p/desktopgui/ExternalTrayManager.java:31
|
||||||
|
#: src/net/i2p/desktopgui/ExternalTrayManager.java:59
|
||||||
msgid "Start I2P"
|
msgid "Start I2P"
|
||||||
msgstr "I2P を開始"
|
msgstr "I2P を開始"
|
||||||
|
|
||||||
#: src/net/i2p/desktopgui/ExternalTrayManager.java:38
|
#: src/net/i2p/desktopgui/ExternalTrayManager.java:44
|
||||||
|
#: src/net/i2p/desktopgui/ExternalTrayManager.java:72
|
||||||
msgid "I2P is starting!"
|
msgid "I2P is starting!"
|
||||||
msgstr "I2P 起動中!"
|
msgstr "I2P 起動中!"
|
||||||
|
|
||||||
#: src/net/i2p/desktopgui/ExternalTrayManager.java:38
|
#: src/net/i2p/desktopgui/ExternalTrayManager.java:44
|
||||||
|
#: src/net/i2p/desktopgui/ExternalTrayManager.java:72
|
||||||
msgid "Starting"
|
msgid "Starting"
|
||||||
msgstr "起動中"
|
msgstr "起動中"
|
||||||
|
|
||||||
#: src/net/i2p/desktopgui/InternalTrayManager.java:26
|
#: src/net/i2p/desktopgui/InternalTrayManager.java:55
|
||||||
|
#: src/net/i2p/desktopgui/InternalTrayManager.java:207
|
||||||
msgid "Launch I2P Browser"
|
msgid "Launch I2P Browser"
|
||||||
msgstr "I2P ブラウザを起動"
|
msgstr "I2P ブラウザを起動"
|
||||||
|
|
||||||
#: src/net/i2p/desktopgui/InternalTrayManager.java:50
|
#: src/net/i2p/desktopgui/InternalTrayManager.java:76
|
||||||
msgid "Configure desktopgui"
|
#: src/net/i2p/desktopgui/InternalTrayManager.java:228
|
||||||
msgstr "desktopgui を設定"
|
msgid "Configure I2P System Tray"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
#: src/net/i2p/desktopgui/InternalTrayManager.java:67
|
#: src/net/i2p/desktopgui/InternalTrayManager.java:77
|
||||||
|
#: src/net/i2p/desktopgui/InternalTrayManager.java:229
|
||||||
|
msgid "Disable"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
#: src/net/i2p/desktopgui/InternalTrayManager.java:93
|
||||||
|
#: src/net/i2p/desktopgui/InternalTrayManager.java:245
|
||||||
msgid "Restart I2P"
|
msgid "Restart I2P"
|
||||||
msgstr "I2P を再起動"
|
msgstr "I2P を再起動"
|
||||||
|
|
||||||
#: src/net/i2p/desktopgui/InternalTrayManager.java:85
|
#: src/net/i2p/desktopgui/InternalTrayManager.java:110
|
||||||
|
#: src/net/i2p/desktopgui/InternalTrayManager.java:262
|
||||||
msgid "Stop I2P"
|
msgid "Stop I2P"
|
||||||
msgstr "I2P を停止"
|
msgstr "I2P を停止"
|
||||||
|
|
||||||
#: src/net/i2p/desktopgui/gui/DesktopguiConfigurationFrame.java:44
|
#: src/net/i2p/desktopgui/InternalTrayManager.java:126
|
||||||
msgid "Tray icon configuration"
|
#: src/net/i2p/desktopgui/InternalTrayManager.java:278
|
||||||
msgstr "トレイアイコン設定"
|
msgid "Restart I2P Immediately"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
#: src/net/i2p/desktopgui/gui/DesktopguiConfigurationFrame.java:47
|
#: src/net/i2p/desktopgui/InternalTrayManager.java:143
|
||||||
msgid "Should tray icon be enabled?"
|
#: src/net/i2p/desktopgui/InternalTrayManager.java:295
|
||||||
msgstr "トレイアイコンを有効にしますか?"
|
msgid "Stop I2P Immediately"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
#: src/net/i2p/desktopgui/InternalTrayManager.java:157
|
||||||
|
#: src/net/i2p/desktopgui/InternalTrayManager.java:309
|
||||||
|
msgid "Cancel I2P Shutdown"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
#: src/net/i2p/desktopgui/InternalTrayManager.java:363
|
||||||
|
#, java-format
|
||||||
|
msgid "Shutdown in {0}"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
#: src/net/i2p/desktopgui/InternalTrayManager.java:365
|
||||||
|
msgid "Shutdown imminent"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
#. status translations are in the console bundle
|
||||||
|
#: src/net/i2p/desktopgui/InternalTrayManager.java:370
|
||||||
|
msgid "Network"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
#. Windows typically has tooltips; Linux (at least Ubuntu) doesn't
|
||||||
|
#: src/net/i2p/desktopgui/TrayManager.java:63
|
||||||
|
msgid "I2P: Right-click for menu"
|
||||||
|
msgstr ""
|
||||||
|
95
apps/desktopgui/locale/messages_ko.po
Normal file
@ -0,0 +1,95 @@
|
|||||||
|
# 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
|
||||||
|
#
|
||||||
|
# Translators:
|
||||||
|
# HelloKS <kqwe1859@gmail.com>, 2014
|
||||||
|
# HelloKS <kqwe1859@gmail.com>, 2016
|
||||||
|
msgid ""
|
||||||
|
msgstr ""
|
||||||
|
"Project-Id-Version: I2P\n"
|
||||||
|
"Report-Msgid-Bugs-To: \n"
|
||||||
|
"POT-Creation-Date: 2016-05-25 12:29+0000\n"
|
||||||
|
"PO-Revision-Date: 2016-07-31 00:29+0000\n"
|
||||||
|
"Last-Translator: HelloKS <kqwe1859@gmail.com>\n"
|
||||||
|
"Language-Team: Korean (http://www.transifex.com/otf/I2P/language/ko/)\n"
|
||||||
|
"MIME-Version: 1.0\n"
|
||||||
|
"Content-Type: text/plain; charset=UTF-8\n"
|
||||||
|
"Content-Transfer-Encoding: 8bit\n"
|
||||||
|
"Language: ko\n"
|
||||||
|
"Plural-Forms: nplurals=1; plural=0;\n"
|
||||||
|
|
||||||
|
#: src/net/i2p/desktopgui/ExternalTrayManager.java:31
|
||||||
|
#: src/net/i2p/desktopgui/ExternalTrayManager.java:59
|
||||||
|
msgid "Start I2P"
|
||||||
|
msgstr "I2P 시작"
|
||||||
|
|
||||||
|
#: src/net/i2p/desktopgui/ExternalTrayManager.java:44
|
||||||
|
#: src/net/i2p/desktopgui/ExternalTrayManager.java:72
|
||||||
|
msgid "I2P is starting!"
|
||||||
|
msgstr "I2P 시작중!"
|
||||||
|
|
||||||
|
#: src/net/i2p/desktopgui/ExternalTrayManager.java:44
|
||||||
|
#: src/net/i2p/desktopgui/ExternalTrayManager.java:72
|
||||||
|
msgid "Starting"
|
||||||
|
msgstr "시작중"
|
||||||
|
|
||||||
|
#: src/net/i2p/desktopgui/InternalTrayManager.java:55
|
||||||
|
#: src/net/i2p/desktopgui/InternalTrayManager.java:207
|
||||||
|
msgid "Launch I2P Browser"
|
||||||
|
msgstr "I2P 브라우저 실행"
|
||||||
|
|
||||||
|
#: src/net/i2p/desktopgui/InternalTrayManager.java:76
|
||||||
|
#: src/net/i2p/desktopgui/InternalTrayManager.java:228
|
||||||
|
msgid "Configure I2P System Tray"
|
||||||
|
msgstr "I2P 시스템 트레이 설정"
|
||||||
|
|
||||||
|
#: src/net/i2p/desktopgui/InternalTrayManager.java:77
|
||||||
|
#: src/net/i2p/desktopgui/InternalTrayManager.java:229
|
||||||
|
msgid "Disable"
|
||||||
|
msgstr "비활성화"
|
||||||
|
|
||||||
|
#: src/net/i2p/desktopgui/InternalTrayManager.java:93
|
||||||
|
#: src/net/i2p/desktopgui/InternalTrayManager.java:245
|
||||||
|
msgid "Restart I2P"
|
||||||
|
msgstr "I2P 재시작"
|
||||||
|
|
||||||
|
#: src/net/i2p/desktopgui/InternalTrayManager.java:110
|
||||||
|
#: src/net/i2p/desktopgui/InternalTrayManager.java:262
|
||||||
|
msgid "Stop I2P"
|
||||||
|
msgstr "I2P 정지"
|
||||||
|
|
||||||
|
#: src/net/i2p/desktopgui/InternalTrayManager.java:126
|
||||||
|
#: src/net/i2p/desktopgui/InternalTrayManager.java:278
|
||||||
|
msgid "Restart I2P Immediately"
|
||||||
|
msgstr "I2P 즉시 재시작"
|
||||||
|
|
||||||
|
#: src/net/i2p/desktopgui/InternalTrayManager.java:143
|
||||||
|
#: src/net/i2p/desktopgui/InternalTrayManager.java:295
|
||||||
|
msgid "Stop I2P Immediately"
|
||||||
|
msgstr "I2P 즉시 정지"
|
||||||
|
|
||||||
|
#: src/net/i2p/desktopgui/InternalTrayManager.java:157
|
||||||
|
#: src/net/i2p/desktopgui/InternalTrayManager.java:309
|
||||||
|
msgid "Cancel I2P Shutdown"
|
||||||
|
msgstr "I2P 종료 취소"
|
||||||
|
|
||||||
|
#: src/net/i2p/desktopgui/InternalTrayManager.java:363
|
||||||
|
#, java-format
|
||||||
|
msgid "Shutdown in {0}"
|
||||||
|
msgstr "{0} 안에 종료"
|
||||||
|
|
||||||
|
#: src/net/i2p/desktopgui/InternalTrayManager.java:365
|
||||||
|
msgid "Shutdown imminent"
|
||||||
|
msgstr "즉시 종료"
|
||||||
|
|
||||||
|
#. status translations are in the console bundle
|
||||||
|
#: src/net/i2p/desktopgui/InternalTrayManager.java:370
|
||||||
|
msgid "Network"
|
||||||
|
msgstr "네트워크"
|
||||||
|
|
||||||
|
#. Windows typically has tooltips; Linux (at least Ubuntu) doesn't
|
||||||
|
#: src/net/i2p/desktopgui/TrayManager.java:63
|
||||||
|
msgid "I2P: Right-click for menu"
|
||||||
|
msgstr "I2P: 메뉴는 오른쪽 클릭"
|
94
apps/desktopgui/locale/messages_mg.po
Normal file
@ -0,0 +1,94 @@
|
|||||||
|
# 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
|
||||||
|
#
|
||||||
|
# Translators:
|
||||||
|
# topdog101 <topdog101@free.fr>, 2014
|
||||||
|
msgid ""
|
||||||
|
msgstr ""
|
||||||
|
"Project-Id-Version: I2P\n"
|
||||||
|
"Report-Msgid-Bugs-To: \n"
|
||||||
|
"POT-Creation-Date: 2016-05-25 12:29+0000\n"
|
||||||
|
"PO-Revision-Date: 2016-05-25 12:34+0000\n"
|
||||||
|
"Last-Translator: zzzi2p\n"
|
||||||
|
"Language-Team: Malagasy (http://www.transifex.com/otf/I2P/language/mg/)\n"
|
||||||
|
"MIME-Version: 1.0\n"
|
||||||
|
"Content-Type: text/plain; charset=UTF-8\n"
|
||||||
|
"Content-Transfer-Encoding: 8bit\n"
|
||||||
|
"Language: mg\n"
|
||||||
|
"Plural-Forms: nplurals=2; plural=(n > 1);\n"
|
||||||
|
|
||||||
|
#: src/net/i2p/desktopgui/ExternalTrayManager.java:31
|
||||||
|
#: src/net/i2p/desktopgui/ExternalTrayManager.java:59
|
||||||
|
msgid "Start I2P"
|
||||||
|
msgstr "Velomy i I2P"
|
||||||
|
|
||||||
|
#: src/net/i2p/desktopgui/ExternalTrayManager.java:44
|
||||||
|
#: src/net/i2p/desktopgui/ExternalTrayManager.java:72
|
||||||
|
msgid "I2P is starting!"
|
||||||
|
msgstr "Manomboka ho velona i I2P!"
|
||||||
|
|
||||||
|
#: src/net/i2p/desktopgui/ExternalTrayManager.java:44
|
||||||
|
#: src/net/i2p/desktopgui/ExternalTrayManager.java:72
|
||||||
|
msgid "Starting"
|
||||||
|
msgstr "Velona"
|
||||||
|
|
||||||
|
#: src/net/i2p/desktopgui/InternalTrayManager.java:55
|
||||||
|
#: src/net/i2p/desktopgui/InternalTrayManager.java:207
|
||||||
|
msgid "Launch I2P Browser"
|
||||||
|
msgstr "Alefaso ny fijerena tranonkala I2P"
|
||||||
|
|
||||||
|
#: src/net/i2p/desktopgui/InternalTrayManager.java:76
|
||||||
|
#: src/net/i2p/desktopgui/InternalTrayManager.java:228
|
||||||
|
msgid "Configure I2P System Tray"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
#: src/net/i2p/desktopgui/InternalTrayManager.java:77
|
||||||
|
#: src/net/i2p/desktopgui/InternalTrayManager.java:229
|
||||||
|
msgid "Disable"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
#: src/net/i2p/desktopgui/InternalTrayManager.java:93
|
||||||
|
#: src/net/i2p/desktopgui/InternalTrayManager.java:245
|
||||||
|
msgid "Restart I2P"
|
||||||
|
msgstr "Avereno alefa i I2P"
|
||||||
|
|
||||||
|
#: src/net/i2p/desktopgui/InternalTrayManager.java:110
|
||||||
|
#: src/net/i2p/desktopgui/InternalTrayManager.java:262
|
||||||
|
msgid "Stop I2P"
|
||||||
|
msgstr "Ajanony i I2P"
|
||||||
|
|
||||||
|
#: src/net/i2p/desktopgui/InternalTrayManager.java:126
|
||||||
|
#: src/net/i2p/desktopgui/InternalTrayManager.java:278
|
||||||
|
msgid "Restart I2P Immediately"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
#: src/net/i2p/desktopgui/InternalTrayManager.java:143
|
||||||
|
#: src/net/i2p/desktopgui/InternalTrayManager.java:295
|
||||||
|
msgid "Stop I2P Immediately"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
#: src/net/i2p/desktopgui/InternalTrayManager.java:157
|
||||||
|
#: src/net/i2p/desktopgui/InternalTrayManager.java:309
|
||||||
|
msgid "Cancel I2P Shutdown"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
#: src/net/i2p/desktopgui/InternalTrayManager.java:363
|
||||||
|
#, java-format
|
||||||
|
msgid "Shutdown in {0}"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
#: src/net/i2p/desktopgui/InternalTrayManager.java:365
|
||||||
|
msgid "Shutdown imminent"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
#. status translations are in the console bundle
|
||||||
|
#: src/net/i2p/desktopgui/InternalTrayManager.java:370
|
||||||
|
msgid "Network"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
#. Windows typically has tooltips; Linux (at least Ubuntu) doesn't
|
||||||
|
#: src/net/i2p/desktopgui/TrayManager.java:63
|
||||||
|
msgid "I2P: Right-click for menu"
|
||||||
|
msgstr ""
|
94
apps/desktopgui/locale/messages_nb.po
Normal file
@ -0,0 +1,94 @@
|
|||||||
|
# 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
|
||||||
|
#
|
||||||
|
# Translators:
|
||||||
|
# Allan Nordhøy <epost@anotheragency.no>, 2014
|
||||||
|
msgid ""
|
||||||
|
msgstr ""
|
||||||
|
"Project-Id-Version: I2P\n"
|
||||||
|
"Report-Msgid-Bugs-To: \n"
|
||||||
|
"POT-Creation-Date: 2016-05-25 12:29+0000\n"
|
||||||
|
"PO-Revision-Date: 2016-05-25 12:34+0000\n"
|
||||||
|
"Last-Translator: zzzi2p\n"
|
||||||
|
"Language-Team: Norwegian Bokmål (http://www.transifex.com/otf/I2P/language/nb/)\n"
|
||||||
|
"MIME-Version: 1.0\n"
|
||||||
|
"Content-Type: text/plain; charset=UTF-8\n"
|
||||||
|
"Content-Transfer-Encoding: 8bit\n"
|
||||||
|
"Language: nb\n"
|
||||||
|
"Plural-Forms: nplurals=2; plural=(n != 1);\n"
|
||||||
|
|
||||||
|
#: src/net/i2p/desktopgui/ExternalTrayManager.java:31
|
||||||
|
#: src/net/i2p/desktopgui/ExternalTrayManager.java:59
|
||||||
|
msgid "Start I2P"
|
||||||
|
msgstr "Start I2P"
|
||||||
|
|
||||||
|
#: src/net/i2p/desktopgui/ExternalTrayManager.java:44
|
||||||
|
#: src/net/i2p/desktopgui/ExternalTrayManager.java:72
|
||||||
|
msgid "I2P is starting!"
|
||||||
|
msgstr "I2P starter opp!"
|
||||||
|
|
||||||
|
#: src/net/i2p/desktopgui/ExternalTrayManager.java:44
|
||||||
|
#: src/net/i2p/desktopgui/ExternalTrayManager.java:72
|
||||||
|
msgid "Starting"
|
||||||
|
msgstr "Starter opp"
|
||||||
|
|
||||||
|
#: src/net/i2p/desktopgui/InternalTrayManager.java:55
|
||||||
|
#: src/net/i2p/desktopgui/InternalTrayManager.java:207
|
||||||
|
msgid "Launch I2P Browser"
|
||||||
|
msgstr "Kjør I2P-nettleser"
|
||||||
|
|
||||||
|
#: src/net/i2p/desktopgui/InternalTrayManager.java:76
|
||||||
|
#: src/net/i2p/desktopgui/InternalTrayManager.java:228
|
||||||
|
msgid "Configure I2P System Tray"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
#: src/net/i2p/desktopgui/InternalTrayManager.java:77
|
||||||
|
#: src/net/i2p/desktopgui/InternalTrayManager.java:229
|
||||||
|
msgid "Disable"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
#: src/net/i2p/desktopgui/InternalTrayManager.java:93
|
||||||
|
#: src/net/i2p/desktopgui/InternalTrayManager.java:245
|
||||||
|
msgid "Restart I2P"
|
||||||
|
msgstr "Omstart av I2P"
|
||||||
|
|
||||||
|
#: src/net/i2p/desktopgui/InternalTrayManager.java:110
|
||||||
|
#: src/net/i2p/desktopgui/InternalTrayManager.java:262
|
||||||
|
msgid "Stop I2P"
|
||||||
|
msgstr "Stopp I2P"
|
||||||
|
|
||||||
|
#: src/net/i2p/desktopgui/InternalTrayManager.java:126
|
||||||
|
#: src/net/i2p/desktopgui/InternalTrayManager.java:278
|
||||||
|
msgid "Restart I2P Immediately"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
#: src/net/i2p/desktopgui/InternalTrayManager.java:143
|
||||||
|
#: src/net/i2p/desktopgui/InternalTrayManager.java:295
|
||||||
|
msgid "Stop I2P Immediately"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
#: src/net/i2p/desktopgui/InternalTrayManager.java:157
|
||||||
|
#: src/net/i2p/desktopgui/InternalTrayManager.java:309
|
||||||
|
msgid "Cancel I2P Shutdown"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
#: src/net/i2p/desktopgui/InternalTrayManager.java:363
|
||||||
|
#, java-format
|
||||||
|
msgid "Shutdown in {0}"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
#: src/net/i2p/desktopgui/InternalTrayManager.java:365
|
||||||
|
msgid "Shutdown imminent"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
#. status translations are in the console bundle
|
||||||
|
#: src/net/i2p/desktopgui/InternalTrayManager.java:370
|
||||||
|
msgid "Network"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
#. Windows typically has tooltips; Linux (at least Ubuntu) doesn't
|
||||||
|
#: src/net/i2p/desktopgui/TrayManager.java:63
|
||||||
|
msgid "I2P: Right-click for menu"
|
||||||
|
msgstr ""
|
@ -2,54 +2,95 @@
|
|||||||
# Copyright (C) 2009 The I2P Project
|
# Copyright (C) 2009 The I2P Project
|
||||||
# This file is distributed under the same license as the desktopgui package.
|
# This file is distributed under the same license as the desktopgui package.
|
||||||
# To contribute translations, see http://www.i2p2.de/newdevelopers
|
# To contribute translations, see http://www.i2p2.de/newdevelopers
|
||||||
# foo <foo@bar>, 2009.
|
|
||||||
#
|
#
|
||||||
|
# Translators:
|
||||||
|
# ducki2p <ducki2p@gmail.com>, 2011
|
||||||
|
# foo <foo@bar>, 2009
|
||||||
|
# Martijn de Boer, 2016
|
||||||
msgid ""
|
msgid ""
|
||||||
msgstr ""
|
msgstr ""
|
||||||
"Project-Id-Version: I2P\n"
|
"Project-Id-Version: I2P\n"
|
||||||
"Report-Msgid-Bugs-To: http://trac.i2p2.de/\n"
|
"Report-Msgid-Bugs-To: \n"
|
||||||
"POT-Creation-Date: 2011-02-20 11:53+0000\n"
|
"POT-Creation-Date: 2016-05-25 12:29+0000\n"
|
||||||
"PO-Revision-Date: 2011-02-20 12:15+0000\n"
|
"PO-Revision-Date: 2016-06-19 14:16+0000\n"
|
||||||
"Last-Translator: ducki2p <ducki2p@gmail.com>\n"
|
"Last-Translator: Martijn de Boer\n"
|
||||||
"Language-Team: Dutch <>\n"
|
"Language-Team: Dutch (http://www.transifex.com/otf/I2P/language/nl/)\n"
|
||||||
"MIME-Version: 1.0\n"
|
"MIME-Version: 1.0\n"
|
||||||
"Content-Type: text/plain; charset=UTF-8\n"
|
"Content-Type: text/plain; charset=UTF-8\n"
|
||||||
"Content-Transfer-Encoding: 8bit\n"
|
"Content-Transfer-Encoding: 8bit\n"
|
||||||
"Language: nl\n"
|
"Language: nl\n"
|
||||||
"Plural-Forms: nplurals=2; plural=(n != 1)\n"
|
"Plural-Forms: nplurals=2; plural=(n != 1);\n"
|
||||||
|
|
||||||
#: src/net/i2p/desktopgui/ExternalTrayManager.java:23
|
#: src/net/i2p/desktopgui/ExternalTrayManager.java:31
|
||||||
|
#: src/net/i2p/desktopgui/ExternalTrayManager.java:59
|
||||||
msgid "Start I2P"
|
msgid "Start I2P"
|
||||||
msgstr "I2P starten"
|
msgstr "I2P starten"
|
||||||
|
|
||||||
#: src/net/i2p/desktopgui/ExternalTrayManager.java:38
|
#: src/net/i2p/desktopgui/ExternalTrayManager.java:44
|
||||||
|
#: src/net/i2p/desktopgui/ExternalTrayManager.java:72
|
||||||
msgid "I2P is starting!"
|
msgid "I2P is starting!"
|
||||||
msgstr "I2P is aan het starten!"
|
msgstr "I2P is aan het starten!"
|
||||||
|
|
||||||
#: src/net/i2p/desktopgui/ExternalTrayManager.java:38
|
#: src/net/i2p/desktopgui/ExternalTrayManager.java:44
|
||||||
|
#: src/net/i2p/desktopgui/ExternalTrayManager.java:72
|
||||||
msgid "Starting"
|
msgid "Starting"
|
||||||
msgstr "Bezig met starten"
|
msgstr "Bezig met starten"
|
||||||
|
|
||||||
#: src/net/i2p/desktopgui/InternalTrayManager.java:26
|
#: src/net/i2p/desktopgui/InternalTrayManager.java:55
|
||||||
|
#: src/net/i2p/desktopgui/InternalTrayManager.java:207
|
||||||
msgid "Launch I2P Browser"
|
msgid "Launch I2P Browser"
|
||||||
msgstr "Start I2P Browser"
|
msgstr "Start I2P Browser"
|
||||||
|
|
||||||
#: src/net/i2p/desktopgui/InternalTrayManager.java:50
|
#: src/net/i2p/desktopgui/InternalTrayManager.java:76
|
||||||
msgid "Configure desktopgui"
|
#: src/net/i2p/desktopgui/InternalTrayManager.java:228
|
||||||
msgstr "Configureer desktopgui"
|
msgid "Configure I2P System Tray"
|
||||||
|
msgstr "Configureer I2P systeembalk"
|
||||||
|
|
||||||
#: src/net/i2p/desktopgui/InternalTrayManager.java:67
|
#: src/net/i2p/desktopgui/InternalTrayManager.java:77
|
||||||
|
#: src/net/i2p/desktopgui/InternalTrayManager.java:229
|
||||||
|
msgid "Disable"
|
||||||
|
msgstr "Uitschakelen"
|
||||||
|
|
||||||
|
#: src/net/i2p/desktopgui/InternalTrayManager.java:93
|
||||||
|
#: src/net/i2p/desktopgui/InternalTrayManager.java:245
|
||||||
msgid "Restart I2P"
|
msgid "Restart I2P"
|
||||||
msgstr "I2P herstarten"
|
msgstr "I2P herstarten"
|
||||||
|
|
||||||
#: src/net/i2p/desktopgui/InternalTrayManager.java:85
|
#: src/net/i2p/desktopgui/InternalTrayManager.java:110
|
||||||
|
#: src/net/i2p/desktopgui/InternalTrayManager.java:262
|
||||||
msgid "Stop I2P"
|
msgid "Stop I2P"
|
||||||
msgstr "I2P stoppen"
|
msgstr "I2P stoppen"
|
||||||
|
|
||||||
#: src/net/i2p/desktopgui/gui/DesktopguiConfigurationFrame.java:44
|
#: src/net/i2p/desktopgui/InternalTrayManager.java:126
|
||||||
msgid "Tray icon configuration"
|
#: src/net/i2p/desktopgui/InternalTrayManager.java:278
|
||||||
msgstr "Systeemvak icoon configuratie"
|
msgid "Restart I2P Immediately"
|
||||||
|
msgstr "Herstart I2P direct"
|
||||||
|
|
||||||
#: src/net/i2p/desktopgui/gui/DesktopguiConfigurationFrame.java:47
|
#: src/net/i2p/desktopgui/InternalTrayManager.java:143
|
||||||
msgid "Should tray icon be enabled?"
|
#: src/net/i2p/desktopgui/InternalTrayManager.java:295
|
||||||
msgstr "Systeemvak icoon inschakelen?"
|
msgid "Stop I2P Immediately"
|
||||||
|
msgstr "Stop I2P direct"
|
||||||
|
|
||||||
|
#: src/net/i2p/desktopgui/InternalTrayManager.java:157
|
||||||
|
#: src/net/i2p/desktopgui/InternalTrayManager.java:309
|
||||||
|
msgid "Cancel I2P Shutdown"
|
||||||
|
msgstr "Annuleer afsluiten I2P"
|
||||||
|
|
||||||
|
#: src/net/i2p/desktopgui/InternalTrayManager.java:363
|
||||||
|
#, java-format
|
||||||
|
msgid "Shutdown in {0}"
|
||||||
|
msgstr "Afsluiten in {0}"
|
||||||
|
|
||||||
|
#: src/net/i2p/desktopgui/InternalTrayManager.java:365
|
||||||
|
msgid "Shutdown imminent"
|
||||||
|
msgstr "Afsluiten op handen"
|
||||||
|
|
||||||
|
#. status translations are in the console bundle
|
||||||
|
#: src/net/i2p/desktopgui/InternalTrayManager.java:370
|
||||||
|
msgid "Network"
|
||||||
|
msgstr "Netwerk"
|
||||||
|
|
||||||
|
#. Windows typically has tooltips; Linux (at least Ubuntu) doesn't
|
||||||
|
#: src/net/i2p/desktopgui/TrayManager.java:63
|
||||||
|
msgid "I2P: Right-click for menu"
|
||||||
|
msgstr "I2P: Rechts klikken voor menu"
|
||||||
|
@ -6,52 +6,91 @@
|
|||||||
# Translators:
|
# Translators:
|
||||||
# PolishAnon <b790979@klzlk.com>, 2011
|
# PolishAnon <b790979@klzlk.com>, 2011
|
||||||
# polacco <polacco@i2pmail.org>, 2015
|
# polacco <polacco@i2pmail.org>, 2015
|
||||||
|
# Verdulo :-) <cybertomek@openmailbox.org>, 2016
|
||||||
msgid ""
|
msgid ""
|
||||||
msgstr ""
|
msgstr ""
|
||||||
"Project-Id-Version: I2P\n"
|
"Project-Id-Version: I2P\n"
|
||||||
"Report-Msgid-Bugs-To: \n"
|
"Report-Msgid-Bugs-To: \n"
|
||||||
"POT-Creation-Date: 2014-01-09 19:27+0000\n"
|
"POT-Creation-Date: 2016-05-25 12:29+0000\n"
|
||||||
"PO-Revision-Date: 2015-02-17 20:54+0000\n"
|
"PO-Revision-Date: 2016-05-25 19:49+0000\n"
|
||||||
"Last-Translator: polacco <polacco@i2pmail.org>\n"
|
"Last-Translator: Verdulo :-) <cybertomek@openmailbox.org>\n"
|
||||||
"Language-Team: Polish (http://www.transifex.com/projects/p/I2P/language/pl/)\n"
|
"Language-Team: Polish (http://www.transifex.com/otf/I2P/language/pl/)\n"
|
||||||
"MIME-Version: 1.0\n"
|
"MIME-Version: 1.0\n"
|
||||||
"Content-Type: text/plain; charset=UTF-8\n"
|
"Content-Type: text/plain; charset=UTF-8\n"
|
||||||
"Content-Transfer-Encoding: 8bit\n"
|
"Content-Transfer-Encoding: 8bit\n"
|
||||||
"Language: pl\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"
|
"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
|
#: src/net/i2p/desktopgui/ExternalTrayManager.java:31
|
||||||
|
#: src/net/i2p/desktopgui/ExternalTrayManager.java:59
|
||||||
msgid "Start I2P"
|
msgid "Start I2P"
|
||||||
msgstr "Uruchom I2P"
|
msgstr "Uruchom I2P"
|
||||||
|
|
||||||
#: src/net/i2p/desktopgui/ExternalTrayManager.java:38
|
#: src/net/i2p/desktopgui/ExternalTrayManager.java:44
|
||||||
|
#: src/net/i2p/desktopgui/ExternalTrayManager.java:72
|
||||||
msgid "I2P is starting!"
|
msgid "I2P is starting!"
|
||||||
msgstr "Uruchamianie I2P!"
|
msgstr "Uruchamianie I2P!"
|
||||||
|
|
||||||
#: src/net/i2p/desktopgui/ExternalTrayManager.java:38
|
#: src/net/i2p/desktopgui/ExternalTrayManager.java:44
|
||||||
|
#: src/net/i2p/desktopgui/ExternalTrayManager.java:72
|
||||||
msgid "Starting"
|
msgid "Starting"
|
||||||
msgstr "Uruchamianie"
|
msgstr "Uruchamianie"
|
||||||
|
|
||||||
#: src/net/i2p/desktopgui/InternalTrayManager.java:26
|
#: src/net/i2p/desktopgui/InternalTrayManager.java:55
|
||||||
|
#: src/net/i2p/desktopgui/InternalTrayManager.java:207
|
||||||
msgid "Launch I2P Browser"
|
msgid "Launch I2P Browser"
|
||||||
msgstr "Uruchom przeglądarkę I2P"
|
msgstr "Uruchom przeglądarkę I2P"
|
||||||
|
|
||||||
#: src/net/i2p/desktopgui/InternalTrayManager.java:50
|
#: src/net/i2p/desktopgui/InternalTrayManager.java:76
|
||||||
msgid "Configure desktopgui"
|
#: src/net/i2p/desktopgui/InternalTrayManager.java:228
|
||||||
msgstr "Skonfiguruj intrefejs pulpitu (desktopgui)"
|
msgid "Configure I2P System Tray"
|
||||||
|
msgstr "Konfiguruj I2P w zasobniku systemowym"
|
||||||
|
|
||||||
#: src/net/i2p/desktopgui/InternalTrayManager.java:67
|
#: src/net/i2p/desktopgui/InternalTrayManager.java:77
|
||||||
|
#: src/net/i2p/desktopgui/InternalTrayManager.java:229
|
||||||
|
msgid "Disable"
|
||||||
|
msgstr "Wyłącz"
|
||||||
|
|
||||||
|
#: src/net/i2p/desktopgui/InternalTrayManager.java:93
|
||||||
|
#: src/net/i2p/desktopgui/InternalTrayManager.java:245
|
||||||
msgid "Restart I2P"
|
msgid "Restart I2P"
|
||||||
msgstr "Zrestartuj I2P"
|
msgstr "Zrestartuj I2P"
|
||||||
|
|
||||||
#: src/net/i2p/desktopgui/InternalTrayManager.java:85
|
#: src/net/i2p/desktopgui/InternalTrayManager.java:110
|
||||||
|
#: src/net/i2p/desktopgui/InternalTrayManager.java:262
|
||||||
msgid "Stop I2P"
|
msgid "Stop I2P"
|
||||||
msgstr "Zatrzymaj I2P"
|
msgstr "Zatrzymaj I2P"
|
||||||
|
|
||||||
#: src/net/i2p/desktopgui/gui/DesktopguiConfigurationFrame.java:43
|
#: src/net/i2p/desktopgui/InternalTrayManager.java:126
|
||||||
msgid "Tray icon configuration"
|
#: src/net/i2p/desktopgui/InternalTrayManager.java:278
|
||||||
msgstr "Konfiguracja ikony zasobnika"
|
msgid "Restart I2P Immediately"
|
||||||
|
msgstr "Zrestartuj I2P natychmiast"
|
||||||
|
|
||||||
#: src/net/i2p/desktopgui/gui/DesktopguiConfigurationFrame.java:46
|
#: src/net/i2p/desktopgui/InternalTrayManager.java:143
|
||||||
msgid "Should tray icon be enabled?"
|
#: src/net/i2p/desktopgui/InternalTrayManager.java:295
|
||||||
msgstr "Czy ikona zasobnika powinna być aktywna?"
|
msgid "Stop I2P Immediately"
|
||||||
|
msgstr "Wyłącz I2P natychmiast"
|
||||||
|
|
||||||
|
#: src/net/i2p/desktopgui/InternalTrayManager.java:157
|
||||||
|
#: src/net/i2p/desktopgui/InternalTrayManager.java:309
|
||||||
|
msgid "Cancel I2P Shutdown"
|
||||||
|
msgstr "Anuluj zamykanie I2P"
|
||||||
|
|
||||||
|
#: src/net/i2p/desktopgui/InternalTrayManager.java:363
|
||||||
|
#, java-format
|
||||||
|
msgid "Shutdown in {0}"
|
||||||
|
msgstr "Wyłączenie za {0}"
|
||||||
|
|
||||||
|
#: src/net/i2p/desktopgui/InternalTrayManager.java:365
|
||||||
|
msgid "Shutdown imminent"
|
||||||
|
msgstr "Zaraz zamknę"
|
||||||
|
|
||||||
|
#. status translations are in the console bundle
|
||||||
|
#: src/net/i2p/desktopgui/InternalTrayManager.java:370
|
||||||
|
msgid "Network"
|
||||||
|
msgstr "Sieć"
|
||||||
|
|
||||||
|
#. Windows typically has tooltips; Linux (at least Ubuntu) doesn't
|
||||||
|
#: src/net/i2p/desktopgui/TrayManager.java:63
|
||||||
|
msgid "I2P: Right-click for menu"
|
||||||
|
msgstr "I2P: kliknij prawym aby otworzyć menu"
|
||||||
|
96
apps/desktopgui/locale/messages_pt.po
Normal file
@ -0,0 +1,96 @@
|
|||||||
|
# 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
|
||||||
|
#
|
||||||
|
# Translators:
|
||||||
|
# Maria Manuela Silva, 2016
|
||||||
|
# wicked, 2013
|
||||||
|
# wicked, 2012
|
||||||
|
msgid ""
|
||||||
|
msgstr ""
|
||||||
|
"Project-Id-Version: I2P\n"
|
||||||
|
"Report-Msgid-Bugs-To: \n"
|
||||||
|
"POT-Creation-Date: 2016-05-25 12:29+0000\n"
|
||||||
|
"PO-Revision-Date: 2016-05-31 15:25+0000\n"
|
||||||
|
"Last-Translator: Maria Manuela Silva\n"
|
||||||
|
"Language-Team: Portuguese (http://www.transifex.com/otf/I2P/language/pt/)\n"
|
||||||
|
"MIME-Version: 1.0\n"
|
||||||
|
"Content-Type: text/plain; charset=UTF-8\n"
|
||||||
|
"Content-Transfer-Encoding: 8bit\n"
|
||||||
|
"Language: pt\n"
|
||||||
|
"Plural-Forms: nplurals=2; plural=(n != 1);\n"
|
||||||
|
|
||||||
|
#: src/net/i2p/desktopgui/ExternalTrayManager.java:31
|
||||||
|
#: src/net/i2p/desktopgui/ExternalTrayManager.java:59
|
||||||
|
msgid "Start I2P"
|
||||||
|
msgstr "Iniciar I2P"
|
||||||
|
|
||||||
|
#: src/net/i2p/desktopgui/ExternalTrayManager.java:44
|
||||||
|
#: src/net/i2p/desktopgui/ExternalTrayManager.java:72
|
||||||
|
msgid "I2P is starting!"
|
||||||
|
msgstr "I2P está a iniciar!"
|
||||||
|
|
||||||
|
#: src/net/i2p/desktopgui/ExternalTrayManager.java:44
|
||||||
|
#: src/net/i2p/desktopgui/ExternalTrayManager.java:72
|
||||||
|
msgid "Starting"
|
||||||
|
msgstr "A Iniciar"
|
||||||
|
|
||||||
|
#: src/net/i2p/desktopgui/InternalTrayManager.java:55
|
||||||
|
#: src/net/i2p/desktopgui/InternalTrayManager.java:207
|
||||||
|
msgid "Launch I2P Browser"
|
||||||
|
msgstr "Iniciar o browser I2P"
|
||||||
|
|
||||||
|
#: src/net/i2p/desktopgui/InternalTrayManager.java:76
|
||||||
|
#: src/net/i2p/desktopgui/InternalTrayManager.java:228
|
||||||
|
msgid "Configure I2P System Tray"
|
||||||
|
msgstr "Configurar Bandeja do Sistema do I2P"
|
||||||
|
|
||||||
|
#: src/net/i2p/desktopgui/InternalTrayManager.java:77
|
||||||
|
#: src/net/i2p/desktopgui/InternalTrayManager.java:229
|
||||||
|
msgid "Disable"
|
||||||
|
msgstr "Desativar"
|
||||||
|
|
||||||
|
#: src/net/i2p/desktopgui/InternalTrayManager.java:93
|
||||||
|
#: src/net/i2p/desktopgui/InternalTrayManager.java:245
|
||||||
|
msgid "Restart I2P"
|
||||||
|
msgstr "Reiniciar o I2P"
|
||||||
|
|
||||||
|
#: src/net/i2p/desktopgui/InternalTrayManager.java:110
|
||||||
|
#: src/net/i2p/desktopgui/InternalTrayManager.java:262
|
||||||
|
msgid "Stop I2P"
|
||||||
|
msgstr "Parar o I2P"
|
||||||
|
|
||||||
|
#: src/net/i2p/desktopgui/InternalTrayManager.java:126
|
||||||
|
#: src/net/i2p/desktopgui/InternalTrayManager.java:278
|
||||||
|
msgid "Restart I2P Immediately"
|
||||||
|
msgstr "Reiniciar o I2P imediatamente"
|
||||||
|
|
||||||
|
#: src/net/i2p/desktopgui/InternalTrayManager.java:143
|
||||||
|
#: src/net/i2p/desktopgui/InternalTrayManager.java:295
|
||||||
|
msgid "Stop I2P Immediately"
|
||||||
|
msgstr "Parar o I2P de imediatamente"
|
||||||
|
|
||||||
|
#: src/net/i2p/desktopgui/InternalTrayManager.java:157
|
||||||
|
#: src/net/i2p/desktopgui/InternalTrayManager.java:309
|
||||||
|
msgid "Cancel I2P Shutdown"
|
||||||
|
msgstr "Cancelar Encerramento do I2P"
|
||||||
|
|
||||||
|
#: src/net/i2p/desktopgui/InternalTrayManager.java:363
|
||||||
|
#, java-format
|
||||||
|
msgid "Shutdown in {0}"
|
||||||
|
msgstr "Encerramento em {0}"
|
||||||
|
|
||||||
|
#: src/net/i2p/desktopgui/InternalTrayManager.java:365
|
||||||
|
msgid "Shutdown imminent"
|
||||||
|
msgstr "Encerramento eminente"
|
||||||
|
|
||||||
|
#. status translations are in the console bundle
|
||||||
|
#: src/net/i2p/desktopgui/InternalTrayManager.java:370
|
||||||
|
msgid "Network"
|
||||||
|
msgstr "Rede"
|
||||||
|
|
||||||
|
#. Windows typically has tooltips; Linux (at least Ubuntu) doesn't
|
||||||
|
#: src/net/i2p/desktopgui/TrayManager.java:63
|
||||||
|
msgid "I2P: Right-click for menu"
|
||||||
|
msgstr "I2P: Clique direito para menu"
|
@ -6,52 +6,92 @@
|
|||||||
# Translators:
|
# Translators:
|
||||||
# testsubject67 <deborinha97@hotmail.com>, 2014
|
# testsubject67 <deborinha97@hotmail.com>, 2014
|
||||||
# blueboy, 2013
|
# blueboy, 2013
|
||||||
|
# blueboy, 2015
|
||||||
|
# Rafael Ferrari, 2016
|
||||||
msgid ""
|
msgid ""
|
||||||
msgstr ""
|
msgstr ""
|
||||||
"Project-Id-Version: I2P\n"
|
"Project-Id-Version: I2P\n"
|
||||||
"Report-Msgid-Bugs-To: \n"
|
"Report-Msgid-Bugs-To: \n"
|
||||||
"POT-Creation-Date: 2014-01-09 19:27+0000\n"
|
"POT-Creation-Date: 2016-05-25 12:29+0000\n"
|
||||||
"PO-Revision-Date: 2014-07-05 17:40+0000\n"
|
"PO-Revision-Date: 2016-06-13 01:45+0000\n"
|
||||||
"Last-Translator: testsubject67 <deborinha97@hotmail.com>\n"
|
"Last-Translator: Rafael Ferrari\n"
|
||||||
"Language-Team: Portuguese (Brazil) (http://www.transifex.com/projects/p/I2P/language/pt_BR/)\n"
|
"Language-Team: Portuguese (Brazil) (http://www.transifex.com/otf/I2P/language/pt_BR/)\n"
|
||||||
"MIME-Version: 1.0\n"
|
"MIME-Version: 1.0\n"
|
||||||
"Content-Type: text/plain; charset=UTF-8\n"
|
"Content-Type: text/plain; charset=UTF-8\n"
|
||||||
"Content-Transfer-Encoding: 8bit\n"
|
"Content-Transfer-Encoding: 8bit\n"
|
||||||
"Language: pt_BR\n"
|
"Language: pt_BR\n"
|
||||||
"Plural-Forms: nplurals=2; plural=(n > 1);\n"
|
"Plural-Forms: nplurals=2; plural=(n > 1);\n"
|
||||||
|
|
||||||
#: src/net/i2p/desktopgui/ExternalTrayManager.java:23
|
#: src/net/i2p/desktopgui/ExternalTrayManager.java:31
|
||||||
|
#: src/net/i2p/desktopgui/ExternalTrayManager.java:59
|
||||||
msgid "Start I2P"
|
msgid "Start I2P"
|
||||||
msgstr "Conectar-se à I2P"
|
msgstr "Conectar-se à I2P"
|
||||||
|
|
||||||
#: src/net/i2p/desktopgui/ExternalTrayManager.java:38
|
#: src/net/i2p/desktopgui/ExternalTrayManager.java:44
|
||||||
|
#: src/net/i2p/desktopgui/ExternalTrayManager.java:72
|
||||||
msgid "I2P is starting!"
|
msgid "I2P is starting!"
|
||||||
msgstr "Conectando-se a I2P!"
|
msgstr "Conectando-se a I2P!"
|
||||||
|
|
||||||
#: src/net/i2p/desktopgui/ExternalTrayManager.java:38
|
#: src/net/i2p/desktopgui/ExternalTrayManager.java:44
|
||||||
|
#: src/net/i2p/desktopgui/ExternalTrayManager.java:72
|
||||||
msgid "Starting"
|
msgid "Starting"
|
||||||
msgstr "Conectando"
|
msgstr "Conectando"
|
||||||
|
|
||||||
#: src/net/i2p/desktopgui/InternalTrayManager.java:26
|
#: src/net/i2p/desktopgui/InternalTrayManager.java:55
|
||||||
|
#: src/net/i2p/desktopgui/InternalTrayManager.java:207
|
||||||
msgid "Launch I2P Browser"
|
msgid "Launch I2P Browser"
|
||||||
msgstr "Lançar o navegador I2P "
|
msgstr "Lançar o navegador I2P "
|
||||||
|
|
||||||
#: src/net/i2p/desktopgui/InternalTrayManager.java:50
|
#: src/net/i2p/desktopgui/InternalTrayManager.java:76
|
||||||
msgid "Configure desktopgui"
|
#: src/net/i2p/desktopgui/InternalTrayManager.java:228
|
||||||
msgstr "Configurar desktopgui"
|
msgid "Configure I2P System Tray"
|
||||||
|
msgstr "Configurar o ícone de sistema I2P"
|
||||||
|
|
||||||
#: src/net/i2p/desktopgui/InternalTrayManager.java:67
|
#: src/net/i2p/desktopgui/InternalTrayManager.java:77
|
||||||
|
#: src/net/i2p/desktopgui/InternalTrayManager.java:229
|
||||||
|
msgid "Disable"
|
||||||
|
msgstr "Desabilitar"
|
||||||
|
|
||||||
|
#: src/net/i2p/desktopgui/InternalTrayManager.java:93
|
||||||
|
#: src/net/i2p/desktopgui/InternalTrayManager.java:245
|
||||||
msgid "Restart I2P"
|
msgid "Restart I2P"
|
||||||
msgstr "Reinicializar o roteador I2P"
|
msgstr "Reinicializar o roteador I2P"
|
||||||
|
|
||||||
#: src/net/i2p/desktopgui/InternalTrayManager.java:85
|
#: src/net/i2p/desktopgui/InternalTrayManager.java:110
|
||||||
|
#: src/net/i2p/desktopgui/InternalTrayManager.java:262
|
||||||
msgid "Stop I2P"
|
msgid "Stop I2P"
|
||||||
msgstr "Interromper o roteador I2P"
|
msgstr "Interromper o roteador I2P"
|
||||||
|
|
||||||
#: src/net/i2p/desktopgui/gui/DesktopguiConfigurationFrame.java:43
|
#: src/net/i2p/desktopgui/InternalTrayManager.java:126
|
||||||
msgid "Tray icon configuration"
|
#: src/net/i2p/desktopgui/InternalTrayManager.java:278
|
||||||
msgstr "Configuração de ícone de bandeja"
|
msgid "Restart I2P Immediately"
|
||||||
|
msgstr "Reinicializar o I2P Imediatamente"
|
||||||
|
|
||||||
#: src/net/i2p/desktopgui/gui/DesktopguiConfigurationFrame.java:46
|
#: src/net/i2p/desktopgui/InternalTrayManager.java:143
|
||||||
msgid "Should tray icon be enabled?"
|
#: src/net/i2p/desktopgui/InternalTrayManager.java:295
|
||||||
msgstr "Ativar ícone de bandeja?"
|
msgid "Stop I2P Immediately"
|
||||||
|
msgstr "Parar o I2P Imediatamente"
|
||||||
|
|
||||||
|
#: src/net/i2p/desktopgui/InternalTrayManager.java:157
|
||||||
|
#: src/net/i2p/desktopgui/InternalTrayManager.java:309
|
||||||
|
msgid "Cancel I2P Shutdown"
|
||||||
|
msgstr "Cancelar o desligamento do I2P"
|
||||||
|
|
||||||
|
#: src/net/i2p/desktopgui/InternalTrayManager.java:363
|
||||||
|
#, java-format
|
||||||
|
msgid "Shutdown in {0}"
|
||||||
|
msgstr "Desligando em {0}"
|
||||||
|
|
||||||
|
#: src/net/i2p/desktopgui/InternalTrayManager.java:365
|
||||||
|
msgid "Shutdown imminent"
|
||||||
|
msgstr "Desligando agora"
|
||||||
|
|
||||||
|
#. status translations are in the console bundle
|
||||||
|
#: src/net/i2p/desktopgui/InternalTrayManager.java:370
|
||||||
|
msgid "Network"
|
||||||
|
msgstr "Rede"
|
||||||
|
|
||||||
|
#. Windows typically has tooltips; Linux (at least Ubuntu) doesn't
|
||||||
|
#: src/net/i2p/desktopgui/TrayManager.java:63
|
||||||
|
msgid "I2P: Right-click for menu"
|
||||||
|
msgstr "I2P: Clique com o botão direito para o menu"
|
||||||
|
@ -2,56 +2,94 @@
|
|||||||
# Copyright (C) 2009 The I2P Project
|
# Copyright (C) 2009 The I2P Project
|
||||||
# This file is distributed under the same license as the desktopgui package.
|
# This file is distributed under the same license as the desktopgui package.
|
||||||
# To contribute translations, see http://www.i2p2.de/newdevelopers
|
# To contribute translations, see http://www.i2p2.de/newdevelopers
|
||||||
#
|
#
|
||||||
# Translators:
|
# Translators:
|
||||||
|
# Predator <Predator@windowslive.com>, 2016
|
||||||
|
# titus <titus0818@gmail.com>, 2016
|
||||||
msgid ""
|
msgid ""
|
||||||
msgstr ""
|
msgstr ""
|
||||||
"Project-Id-Version: I2P\n"
|
"Project-Id-Version: I2P\n"
|
||||||
"Report-Msgid-Bugs-To: \n"
|
"Report-Msgid-Bugs-To: \n"
|
||||||
"POT-Creation-Date: 2014-01-09 19:03+0000\n"
|
"POT-Creation-Date: 2016-05-25 12:29+0000\n"
|
||||||
"PO-Revision-Date: 2013-11-11 11:31+0000\n"
|
"PO-Revision-Date: 2016-09-16 18:17+0000\n"
|
||||||
"Last-Translator: polearnik <polearnik@mail.ru>\n"
|
"Last-Translator: Predator <Predator@windowslive.com>\n"
|
||||||
"Language-Team: Romanian (http://www.transifex.com/projects/p/I2P/language/"
|
"Language-Team: Romanian (http://www.transifex.com/otf/I2P/language/ro/)\n"
|
||||||
"ro/)\n"
|
|
||||||
"Language: ro\n"
|
|
||||||
"MIME-Version: 1.0\n"
|
"MIME-Version: 1.0\n"
|
||||||
"Content-Type: text/plain; charset=UTF-8\n"
|
"Content-Type: text/plain; charset=UTF-8\n"
|
||||||
"Content-Transfer-Encoding: 8bit\n"
|
"Content-Transfer-Encoding: 8bit\n"
|
||||||
"Plural-Forms: nplurals=3; plural=(n==1?0:(((n%100>19)||((n%100==0)&&(n!=0)))?"
|
"Language: ro\n"
|
||||||
"2:1));\n"
|
"Plural-Forms: nplurals=3; plural=(n==1?0:(((n%100>19)||((n%100==0)&&(n!=0)))?2:1));\n"
|
||||||
|
|
||||||
#: src/net/i2p/desktopgui/ExternalTrayManager.java:23
|
#: src/net/i2p/desktopgui/ExternalTrayManager.java:31
|
||||||
|
#: src/net/i2p/desktopgui/ExternalTrayManager.java:59
|
||||||
msgid "Start I2P"
|
msgid "Start I2P"
|
||||||
msgstr "Start I2P"
|
msgstr "Start I2P"
|
||||||
|
|
||||||
#: src/net/i2p/desktopgui/ExternalTrayManager.java:38
|
#: src/net/i2p/desktopgui/ExternalTrayManager.java:44
|
||||||
|
#: src/net/i2p/desktopgui/ExternalTrayManager.java:72
|
||||||
msgid "I2P is starting!"
|
msgid "I2P is starting!"
|
||||||
msgstr "I2P se pornește!"
|
msgstr "I2P se pornește!"
|
||||||
|
|
||||||
#: src/net/i2p/desktopgui/ExternalTrayManager.java:38
|
#: src/net/i2p/desktopgui/ExternalTrayManager.java:44
|
||||||
|
#: src/net/i2p/desktopgui/ExternalTrayManager.java:72
|
||||||
msgid "Starting"
|
msgid "Starting"
|
||||||
msgstr "Începere"
|
msgstr "Pornește"
|
||||||
|
|
||||||
#: src/net/i2p/desktopgui/InternalTrayManager.java:26
|
#: src/net/i2p/desktopgui/InternalTrayManager.java:55
|
||||||
|
#: src/net/i2p/desktopgui/InternalTrayManager.java:207
|
||||||
msgid "Launch I2P Browser"
|
msgid "Launch I2P Browser"
|
||||||
msgstr "Lansare I2P Browser"
|
msgstr "Lansare I2P Browser"
|
||||||
|
|
||||||
#: src/net/i2p/desktopgui/InternalTrayManager.java:50
|
#: src/net/i2p/desktopgui/InternalTrayManager.java:76
|
||||||
msgid "Configure desktopgui"
|
#: src/net/i2p/desktopgui/InternalTrayManager.java:228
|
||||||
msgstr "Configurarea desktopgui"
|
msgid "Configure I2P System Tray"
|
||||||
|
msgstr "Configurează bara de sistem I2P"
|
||||||
|
|
||||||
#: src/net/i2p/desktopgui/InternalTrayManager.java:67
|
#: src/net/i2p/desktopgui/InternalTrayManager.java:77
|
||||||
|
#: src/net/i2p/desktopgui/InternalTrayManager.java:229
|
||||||
|
msgid "Disable"
|
||||||
|
msgstr "Dezactivare"
|
||||||
|
|
||||||
|
#: src/net/i2p/desktopgui/InternalTrayManager.java:93
|
||||||
|
#: src/net/i2p/desktopgui/InternalTrayManager.java:245
|
||||||
msgid "Restart I2P"
|
msgid "Restart I2P"
|
||||||
msgstr "Restart I2P"
|
msgstr "Restart I2P"
|
||||||
|
|
||||||
#: src/net/i2p/desktopgui/InternalTrayManager.java:85
|
#: src/net/i2p/desktopgui/InternalTrayManager.java:110
|
||||||
|
#: src/net/i2p/desktopgui/InternalTrayManager.java:262
|
||||||
msgid "Stop I2P"
|
msgid "Stop I2P"
|
||||||
msgstr "Stop I2P"
|
msgstr "Stop I2P"
|
||||||
|
|
||||||
#: src/net/i2p/desktopgui/gui/DesktopguiConfigurationFrame.java:43
|
#: src/net/i2p/desktopgui/InternalTrayManager.java:126
|
||||||
msgid "Tray icon configuration"
|
#: src/net/i2p/desktopgui/InternalTrayManager.java:278
|
||||||
msgstr "Configurare pictogramei din bara de sistem"
|
msgid "Restart I2P Immediately"
|
||||||
|
msgstr "Repornește I2P imediat"
|
||||||
|
|
||||||
#: src/net/i2p/desktopgui/gui/DesktopguiConfigurationFrame.java:46
|
#: src/net/i2p/desktopgui/InternalTrayManager.java:143
|
||||||
msgid "Should tray icon be enabled?"
|
#: src/net/i2p/desktopgui/InternalTrayManager.java:295
|
||||||
msgstr "Ar trebui să fie activata pictograma din bara de sistem?"
|
msgid "Stop I2P Immediately"
|
||||||
|
msgstr "Oprește I2P imediat"
|
||||||
|
|
||||||
|
#: src/net/i2p/desktopgui/InternalTrayManager.java:157
|
||||||
|
#: src/net/i2p/desktopgui/InternalTrayManager.java:309
|
||||||
|
msgid "Cancel I2P Shutdown"
|
||||||
|
msgstr "Anulează oprirea I2P"
|
||||||
|
|
||||||
|
#: src/net/i2p/desktopgui/InternalTrayManager.java:363
|
||||||
|
#, java-format
|
||||||
|
msgid "Shutdown in {0}"
|
||||||
|
msgstr "Oprire în {0}"
|
||||||
|
|
||||||
|
#: src/net/i2p/desktopgui/InternalTrayManager.java:365
|
||||||
|
msgid "Shutdown imminent"
|
||||||
|
msgstr "Oprire iminentă"
|
||||||
|
|
||||||
|
#. status translations are in the console bundle
|
||||||
|
#: src/net/i2p/desktopgui/InternalTrayManager.java:370
|
||||||
|
msgid "Network"
|
||||||
|
msgstr "Rețea"
|
||||||
|
|
||||||
|
#. Windows typically has tooltips; Linux (at least Ubuntu) doesn't
|
||||||
|
#: src/net/i2p/desktopgui/TrayManager.java:63
|
||||||
|
msgid "I2P: Right-click for menu"
|
||||||
|
msgstr "I2P: Click dreapta pentru meniu"
|
||||||
|
@ -4,55 +4,95 @@
|
|||||||
# To contribute translations, see http://www.i2p2.de/newdevelopers
|
# To contribute translations, see http://www.i2p2.de/newdevelopers
|
||||||
#
|
#
|
||||||
# Translators:
|
# Translators:
|
||||||
|
# c4sp3r, 2016
|
||||||
# ducki2p <ducki2p@gmail.com>, 2011
|
# ducki2p <ducki2p@gmail.com>, 2011
|
||||||
# foo <foo@bar>, 2009
|
# foo <foo@bar>, 2009
|
||||||
# Роман Азаренко <transifex@basicxp.ru>, 2013
|
# Foster Snowhill, 2013
|
||||||
|
# brianhopes <voganc-12@live.ru>, 2015
|
||||||
msgid ""
|
msgid ""
|
||||||
msgstr ""
|
msgstr ""
|
||||||
"Project-Id-Version: I2P\n"
|
"Project-Id-Version: I2P\n"
|
||||||
"Report-Msgid-Bugs-To: \n"
|
"Report-Msgid-Bugs-To: \n"
|
||||||
"POT-Creation-Date: 2011-03-03 18:29+0000\n"
|
"POT-Creation-Date: 2016-05-25 12:29+0000\n"
|
||||||
"PO-Revision-Date: 2013-12-04 11:46+0000\n"
|
"PO-Revision-Date: 2016-07-27 14:27+0000\n"
|
||||||
"Last-Translator: Bergitte <alvina_alexandrova@mail.ru>\n"
|
"Last-Translator: c4sp3r\n"
|
||||||
"Language-Team: Russian (Russia) (http://www.transifex.com/projects/p/I2P/language/ru_RU/)\n"
|
"Language-Team: Russian (Russia) (http://www.transifex.com/otf/I2P/language/ru_RU/)\n"
|
||||||
"MIME-Version: 1.0\n"
|
"MIME-Version: 1.0\n"
|
||||||
"Content-Type: text/plain; charset=UTF-8\n"
|
"Content-Type: text/plain; charset=UTF-8\n"
|
||||||
"Content-Transfer-Encoding: 8bit\n"
|
"Content-Transfer-Encoding: 8bit\n"
|
||||||
"Language: ru_RU\n"
|
"Language: ru_RU\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=4; plural=(n%10==1 && n%100!=11 ? 0 : n%10>=2 && n%10<=4 && (n%100<12 || n%100>14) ? 1 : n%10==0 || (n%10>=5 && n%10<=9) || (n%100>=11 && n%100<=14)? 2 : 3);\n"
|
||||||
|
|
||||||
#: src/net/i2p/desktopgui/ExternalTrayManager.java:23
|
#: src/net/i2p/desktopgui/ExternalTrayManager.java:31
|
||||||
|
#: src/net/i2p/desktopgui/ExternalTrayManager.java:59
|
||||||
msgid "Start I2P"
|
msgid "Start I2P"
|
||||||
msgstr "Запустить I2P"
|
msgstr "Запустить I2P"
|
||||||
|
|
||||||
#: src/net/i2p/desktopgui/ExternalTrayManager.java:38
|
#: src/net/i2p/desktopgui/ExternalTrayManager.java:44
|
||||||
|
#: src/net/i2p/desktopgui/ExternalTrayManager.java:72
|
||||||
msgid "I2P is starting!"
|
msgid "I2P is starting!"
|
||||||
msgstr "I2P запускается!"
|
msgstr "I2P запускается!"
|
||||||
|
|
||||||
#: src/net/i2p/desktopgui/ExternalTrayManager.java:38
|
#: src/net/i2p/desktopgui/ExternalTrayManager.java:44
|
||||||
|
#: src/net/i2p/desktopgui/ExternalTrayManager.java:72
|
||||||
msgid "Starting"
|
msgid "Starting"
|
||||||
msgstr "Запускается"
|
msgstr "Запускается"
|
||||||
|
|
||||||
#: src/net/i2p/desktopgui/InternalTrayManager.java:26
|
#: src/net/i2p/desktopgui/InternalTrayManager.java:55
|
||||||
|
#: src/net/i2p/desktopgui/InternalTrayManager.java:207
|
||||||
msgid "Launch I2P Browser"
|
msgid "Launch I2P Browser"
|
||||||
msgstr "Запустить браузер I2P"
|
msgstr "Запустить браузер I2P"
|
||||||
|
|
||||||
#: src/net/i2p/desktopgui/InternalTrayManager.java:50
|
#: src/net/i2p/desktopgui/InternalTrayManager.java:76
|
||||||
msgid "Configure desktopgui"
|
#: src/net/i2p/desktopgui/InternalTrayManager.java:228
|
||||||
msgstr "Настроить desktopgui"
|
msgid "Configure I2P System Tray"
|
||||||
|
msgstr "Настроить системный трей I2P"
|
||||||
|
|
||||||
#: src/net/i2p/desktopgui/InternalTrayManager.java:67
|
#: src/net/i2p/desktopgui/InternalTrayManager.java:77
|
||||||
|
#: src/net/i2p/desktopgui/InternalTrayManager.java:229
|
||||||
|
msgid "Disable"
|
||||||
|
msgstr "Отключить"
|
||||||
|
|
||||||
|
#: src/net/i2p/desktopgui/InternalTrayManager.java:93
|
||||||
|
#: src/net/i2p/desktopgui/InternalTrayManager.java:245
|
||||||
msgid "Restart I2P"
|
msgid "Restart I2P"
|
||||||
msgstr "Перезапустить I2P"
|
msgstr "Перезапустить I2P"
|
||||||
|
|
||||||
#: src/net/i2p/desktopgui/InternalTrayManager.java:85
|
#: src/net/i2p/desktopgui/InternalTrayManager.java:110
|
||||||
|
#: src/net/i2p/desktopgui/InternalTrayManager.java:262
|
||||||
msgid "Stop I2P"
|
msgid "Stop I2P"
|
||||||
msgstr "Остановить I2P"
|
msgstr "Остановить I2P"
|
||||||
|
|
||||||
#: src/net/i2p/desktopgui/gui/DesktopguiConfigurationFrame.java:44
|
#: src/net/i2p/desktopgui/InternalTrayManager.java:126
|
||||||
msgid "Tray icon configuration"
|
#: src/net/i2p/desktopgui/InternalTrayManager.java:278
|
||||||
msgstr "Конфигурация значка в области уведомлений"
|
msgid "Restart I2P Immediately"
|
||||||
|
msgstr "Перезапустить I2P немедленно"
|
||||||
|
|
||||||
#: src/net/i2p/desktopgui/gui/DesktopguiConfigurationFrame.java:47
|
#: src/net/i2p/desktopgui/InternalTrayManager.java:143
|
||||||
msgid "Should tray icon be enabled?"
|
#: src/net/i2p/desktopgui/InternalTrayManager.java:295
|
||||||
msgstr "Отображать ли значок в области уведомлений?"
|
msgid "Stop I2P Immediately"
|
||||||
|
msgstr "Остановить I2P немедленно"
|
||||||
|
|
||||||
|
#: src/net/i2p/desktopgui/InternalTrayManager.java:157
|
||||||
|
#: src/net/i2p/desktopgui/InternalTrayManager.java:309
|
||||||
|
msgid "Cancel I2P Shutdown"
|
||||||
|
msgstr "Отменить выключение I2P"
|
||||||
|
|
||||||
|
#: src/net/i2p/desktopgui/InternalTrayManager.java:363
|
||||||
|
#, java-format
|
||||||
|
msgid "Shutdown in {0}"
|
||||||
|
msgstr "Выключение через {0}"
|
||||||
|
|
||||||
|
#: src/net/i2p/desktopgui/InternalTrayManager.java:365
|
||||||
|
msgid "Shutdown imminent"
|
||||||
|
msgstr "Неотменяемое выключение"
|
||||||
|
|
||||||
|
#. status translations are in the console bundle
|
||||||
|
#: src/net/i2p/desktopgui/InternalTrayManager.java:370
|
||||||
|
msgid "Network"
|
||||||
|
msgstr "Сеть"
|
||||||
|
|
||||||
|
#. Windows typically has tooltips; Linux (at least Ubuntu) doesn't
|
||||||
|
#: src/net/i2p/desktopgui/TrayManager.java:63
|
||||||
|
msgid "I2P: Right-click for menu"
|
||||||
|
msgstr "I2P: Правый щелчок для вызова меню"
|
||||||
|
@ -4,54 +4,92 @@
|
|||||||
# To contribute translations, see http://www.i2p2.de/newdevelopers
|
# To contribute translations, see http://www.i2p2.de/newdevelopers
|
||||||
#
|
#
|
||||||
# Translators:
|
# Translators:
|
||||||
# Krantišek <jaksrn@gmail.com>, 2014
|
# Jakub Srna <jaksrn@gmail.com>, 2014
|
||||||
# Svistwarrior273 <romanbeno273@gmail.com>, 2014
|
# Roman 'Kaktuxista' Benji <romanbeno273@gmail.com>, 2014
|
||||||
msgid ""
|
msgid ""
|
||||||
msgstr ""
|
msgstr ""
|
||||||
"Project-Id-Version: I2P\n"
|
"Project-Id-Version: I2P\n"
|
||||||
"Report-Msgid-Bugs-To: \n"
|
"Report-Msgid-Bugs-To: \n"
|
||||||
"POT-Creation-Date: 2014-01-09 19:27+0000\n"
|
"POT-Creation-Date: 2016-05-25 12:29+0000\n"
|
||||||
"PO-Revision-Date: 2014-04-20 09:56+0000\n"
|
"PO-Revision-Date: 2016-05-25 12:34+0000\n"
|
||||||
"Last-Translator: Svistwarrior273 <romanbeno273@gmail.com>\n"
|
"Last-Translator: zzzi2p\n"
|
||||||
"Language-Team: Slovak (http://www.transifex.com/projects/p/I2P/language/sk/)\n"
|
"Language-Team: Slovak (http://www.transifex.com/otf/I2P/language/sk/)\n"
|
||||||
"MIME-Version: 1.0\n"
|
"MIME-Version: 1.0\n"
|
||||||
"Content-Type: text/plain; charset=UTF-8\n"
|
"Content-Type: text/plain; charset=UTF-8\n"
|
||||||
"Content-Transfer-Encoding: 8bit\n"
|
"Content-Transfer-Encoding: 8bit\n"
|
||||||
"Language: sk\n"
|
"Language: sk\n"
|
||||||
"Plural-Forms: nplurals=3; plural=(n==1) ? 0 : (n>=2 && n<=4) ? 1 : 2;\n"
|
"Plural-Forms: nplurals=3; plural=(n==1) ? 0 : (n>=2 && n<=4) ? 1 : 2;\n"
|
||||||
|
|
||||||
#: src/net/i2p/desktopgui/ExternalTrayManager.java:23
|
#: src/net/i2p/desktopgui/ExternalTrayManager.java:31
|
||||||
|
#: src/net/i2p/desktopgui/ExternalTrayManager.java:59
|
||||||
msgid "Start I2P"
|
msgid "Start I2P"
|
||||||
msgstr "Spustiť I2P"
|
msgstr "Spustiť I2P"
|
||||||
|
|
||||||
#: src/net/i2p/desktopgui/ExternalTrayManager.java:38
|
#: src/net/i2p/desktopgui/ExternalTrayManager.java:44
|
||||||
|
#: src/net/i2p/desktopgui/ExternalTrayManager.java:72
|
||||||
msgid "I2P is starting!"
|
msgid "I2P is starting!"
|
||||||
msgstr "I2P sa spúšťa!"
|
msgstr "I2P sa spúšťa!"
|
||||||
|
|
||||||
#: src/net/i2p/desktopgui/ExternalTrayManager.java:38
|
#: src/net/i2p/desktopgui/ExternalTrayManager.java:44
|
||||||
|
#: src/net/i2p/desktopgui/ExternalTrayManager.java:72
|
||||||
msgid "Starting"
|
msgid "Starting"
|
||||||
msgstr "Spúšťa sa"
|
msgstr "Spúšťa sa"
|
||||||
|
|
||||||
#: src/net/i2p/desktopgui/InternalTrayManager.java:26
|
#: src/net/i2p/desktopgui/InternalTrayManager.java:55
|
||||||
|
#: src/net/i2p/desktopgui/InternalTrayManager.java:207
|
||||||
msgid "Launch I2P Browser"
|
msgid "Launch I2P Browser"
|
||||||
msgstr "Spustiť I2P prehliadač"
|
msgstr "Spustiť I2P prehliadač"
|
||||||
|
|
||||||
#: src/net/i2p/desktopgui/InternalTrayManager.java:50
|
#: src/net/i2p/desktopgui/InternalTrayManager.java:76
|
||||||
msgid "Configure desktopgui"
|
#: src/net/i2p/desktopgui/InternalTrayManager.java:228
|
||||||
msgstr "Nakonfigurovať desktopgui"
|
msgid "Configure I2P System Tray"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
#: src/net/i2p/desktopgui/InternalTrayManager.java:67
|
#: src/net/i2p/desktopgui/InternalTrayManager.java:77
|
||||||
|
#: src/net/i2p/desktopgui/InternalTrayManager.java:229
|
||||||
|
msgid "Disable"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
#: src/net/i2p/desktopgui/InternalTrayManager.java:93
|
||||||
|
#: src/net/i2p/desktopgui/InternalTrayManager.java:245
|
||||||
msgid "Restart I2P"
|
msgid "Restart I2P"
|
||||||
msgstr "Reštartovať I2P"
|
msgstr "Reštartovať I2P"
|
||||||
|
|
||||||
#: src/net/i2p/desktopgui/InternalTrayManager.java:85
|
#: src/net/i2p/desktopgui/InternalTrayManager.java:110
|
||||||
|
#: src/net/i2p/desktopgui/InternalTrayManager.java:262
|
||||||
msgid "Stop I2P"
|
msgid "Stop I2P"
|
||||||
msgstr "Zastaviť I2P"
|
msgstr "Zastaviť I2P"
|
||||||
|
|
||||||
#: src/net/i2p/desktopgui/gui/DesktopguiConfigurationFrame.java:43
|
#: src/net/i2p/desktopgui/InternalTrayManager.java:126
|
||||||
msgid "Tray icon configuration"
|
#: src/net/i2p/desktopgui/InternalTrayManager.java:278
|
||||||
msgstr "Konfigurácia ikony v lište"
|
msgid "Restart I2P Immediately"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
#: src/net/i2p/desktopgui/gui/DesktopguiConfigurationFrame.java:46
|
#: src/net/i2p/desktopgui/InternalTrayManager.java:143
|
||||||
msgid "Should tray icon be enabled?"
|
#: src/net/i2p/desktopgui/InternalTrayManager.java:295
|
||||||
msgstr "Mala by byť ikona v lište povolená?"
|
msgid "Stop I2P Immediately"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
#: src/net/i2p/desktopgui/InternalTrayManager.java:157
|
||||||
|
#: src/net/i2p/desktopgui/InternalTrayManager.java:309
|
||||||
|
msgid "Cancel I2P Shutdown"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
#: src/net/i2p/desktopgui/InternalTrayManager.java:363
|
||||||
|
#, java-format
|
||||||
|
msgid "Shutdown in {0}"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
#: src/net/i2p/desktopgui/InternalTrayManager.java:365
|
||||||
|
msgid "Shutdown imminent"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
#. status translations are in the console bundle
|
||||||
|
#: src/net/i2p/desktopgui/InternalTrayManager.java:370
|
||||||
|
msgid "Network"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
#. Windows typically has tooltips; Linux (at least Ubuntu) doesn't
|
||||||
|
#: src/net/i2p/desktopgui/TrayManager.java:63
|
||||||
|
msgid "I2P: Right-click for menu"
|
||||||
|
msgstr ""
|
||||||
|
94
apps/desktopgui/locale/messages_sq.po
Normal file
@ -0,0 +1,94 @@
|
|||||||
|
# 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
|
||||||
|
#
|
||||||
|
# Translators:
|
||||||
|
# Shpetim <shpetim@privacysolutions.no>, 2014
|
||||||
|
msgid ""
|
||||||
|
msgstr ""
|
||||||
|
"Project-Id-Version: I2P\n"
|
||||||
|
"Report-Msgid-Bugs-To: \n"
|
||||||
|
"POT-Creation-Date: 2016-05-25 12:29+0000\n"
|
||||||
|
"PO-Revision-Date: 2016-05-25 12:34+0000\n"
|
||||||
|
"Last-Translator: zzzi2p\n"
|
||||||
|
"Language-Team: Albanian (http://www.transifex.com/otf/I2P/language/sq/)\n"
|
||||||
|
"MIME-Version: 1.0\n"
|
||||||
|
"Content-Type: text/plain; charset=UTF-8\n"
|
||||||
|
"Content-Transfer-Encoding: 8bit\n"
|
||||||
|
"Language: sq\n"
|
||||||
|
"Plural-Forms: nplurals=2; plural=(n != 1);\n"
|
||||||
|
|
||||||
|
#: src/net/i2p/desktopgui/ExternalTrayManager.java:31
|
||||||
|
#: src/net/i2p/desktopgui/ExternalTrayManager.java:59
|
||||||
|
msgid "Start I2P"
|
||||||
|
msgstr "Starto I2P'në"
|
||||||
|
|
||||||
|
#: src/net/i2p/desktopgui/ExternalTrayManager.java:44
|
||||||
|
#: src/net/i2p/desktopgui/ExternalTrayManager.java:72
|
||||||
|
msgid "I2P is starting!"
|
||||||
|
msgstr "I2P po starton!"
|
||||||
|
|
||||||
|
#: src/net/i2p/desktopgui/ExternalTrayManager.java:44
|
||||||
|
#: src/net/i2p/desktopgui/ExternalTrayManager.java:72
|
||||||
|
msgid "Starting"
|
||||||
|
msgstr "Po startoj"
|
||||||
|
|
||||||
|
#: src/net/i2p/desktopgui/InternalTrayManager.java:55
|
||||||
|
#: src/net/i2p/desktopgui/InternalTrayManager.java:207
|
||||||
|
msgid "Launch I2P Browser"
|
||||||
|
msgstr "Nis Browser'in e I2P'së"
|
||||||
|
|
||||||
|
#: src/net/i2p/desktopgui/InternalTrayManager.java:76
|
||||||
|
#: src/net/i2p/desktopgui/InternalTrayManager.java:228
|
||||||
|
msgid "Configure I2P System Tray"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
#: src/net/i2p/desktopgui/InternalTrayManager.java:77
|
||||||
|
#: src/net/i2p/desktopgui/InternalTrayManager.java:229
|
||||||
|
msgid "Disable"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
#: src/net/i2p/desktopgui/InternalTrayManager.java:93
|
||||||
|
#: src/net/i2p/desktopgui/InternalTrayManager.java:245
|
||||||
|
msgid "Restart I2P"
|
||||||
|
msgstr "Ristarto I2P¨në"
|
||||||
|
|
||||||
|
#: src/net/i2p/desktopgui/InternalTrayManager.java:110
|
||||||
|
#: src/net/i2p/desktopgui/InternalTrayManager.java:262
|
||||||
|
msgid "Stop I2P"
|
||||||
|
msgstr "Ndale I2P'në"
|
||||||
|
|
||||||
|
#: src/net/i2p/desktopgui/InternalTrayManager.java:126
|
||||||
|
#: src/net/i2p/desktopgui/InternalTrayManager.java:278
|
||||||
|
msgid "Restart I2P Immediately"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
#: src/net/i2p/desktopgui/InternalTrayManager.java:143
|
||||||
|
#: src/net/i2p/desktopgui/InternalTrayManager.java:295
|
||||||
|
msgid "Stop I2P Immediately"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
#: src/net/i2p/desktopgui/InternalTrayManager.java:157
|
||||||
|
#: src/net/i2p/desktopgui/InternalTrayManager.java:309
|
||||||
|
msgid "Cancel I2P Shutdown"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
#: src/net/i2p/desktopgui/InternalTrayManager.java:363
|
||||||
|
#, java-format
|
||||||
|
msgid "Shutdown in {0}"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
#: src/net/i2p/desktopgui/InternalTrayManager.java:365
|
||||||
|
msgid "Shutdown imminent"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
#. status translations are in the console bundle
|
||||||
|
#: src/net/i2p/desktopgui/InternalTrayManager.java:370
|
||||||
|
msgid "Network"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
#. Windows typically has tooltips; Linux (at least Ubuntu) doesn't
|
||||||
|
#: src/net/i2p/desktopgui/TrayManager.java:63
|
||||||
|
msgid "I2P: Right-click for menu"
|
||||||
|
msgstr ""
|
@ -4,53 +4,92 @@
|
|||||||
# To contribute translations, see http://www.i2p2.de/newdevelopers
|
# To contribute translations, see http://www.i2p2.de/newdevelopers
|
||||||
#
|
#
|
||||||
# Translators:
|
# Translators:
|
||||||
# 123hund123 <M8R-ra4r1r@mailinator.com>, 2011.
|
# 123hund123 <M8R-ra4r1r@mailinator.com>, 2011
|
||||||
|
# Jonatan Nyberg <jonatan@autistici.org>, 2016
|
||||||
msgid ""
|
msgid ""
|
||||||
msgstr ""
|
msgstr ""
|
||||||
"Project-Id-Version: I2P\n"
|
"Project-Id-Version: I2P\n"
|
||||||
"Report-Msgid-Bugs-To: https://trac.i2p2.de/\n"
|
"Report-Msgid-Bugs-To: \n"
|
||||||
"POT-Creation-Date: 2011-03-03 18:29+0000\n"
|
"POT-Creation-Date: 2016-05-25 12:29+0000\n"
|
||||||
"PO-Revision-Date: 2011-03-22 15:49+0000\n"
|
"PO-Revision-Date: 2016-06-14 13:22+0000\n"
|
||||||
"Last-Translator: 123hund123 <M8R-ra4r1r@mailinator.com>\n"
|
"Last-Translator: Jonatan Nyberg <jonatan@autistici.org>\n"
|
||||||
"Language-Team: Swedish (Sweden) (http://www.transifex.net/projects/p/I2P/language/sv_SE/)\n"
|
"Language-Team: Swedish (Sweden) (http://www.transifex.com/otf/I2P/language/sv_SE/)\n"
|
||||||
"MIME-Version: 1.0\n"
|
"MIME-Version: 1.0\n"
|
||||||
"Content-Type: text/plain; charset=UTF-8\n"
|
"Content-Type: text/plain; charset=UTF-8\n"
|
||||||
"Content-Transfer-Encoding: 8bit\n"
|
"Content-Transfer-Encoding: 8bit\n"
|
||||||
"Language: sv_SE\n"
|
"Language: sv_SE\n"
|
||||||
"Plural-Forms: nplurals=2; plural=(n != 1)\n"
|
"Plural-Forms: nplurals=2; plural=(n != 1);\n"
|
||||||
|
|
||||||
#: src/net/i2p/desktopgui/ExternalTrayManager.java:23
|
#: src/net/i2p/desktopgui/ExternalTrayManager.java:31
|
||||||
|
#: src/net/i2p/desktopgui/ExternalTrayManager.java:59
|
||||||
msgid "Start I2P"
|
msgid "Start I2P"
|
||||||
msgstr "Starta I2P"
|
msgstr "Starta I2P"
|
||||||
|
|
||||||
#: src/net/i2p/desktopgui/ExternalTrayManager.java:38
|
#: src/net/i2p/desktopgui/ExternalTrayManager.java:44
|
||||||
|
#: src/net/i2p/desktopgui/ExternalTrayManager.java:72
|
||||||
msgid "I2P is starting!"
|
msgid "I2P is starting!"
|
||||||
msgstr "I2P startas!"
|
msgstr "I2P startas!"
|
||||||
|
|
||||||
#: src/net/i2p/desktopgui/ExternalTrayManager.java:38
|
#: src/net/i2p/desktopgui/ExternalTrayManager.java:44
|
||||||
|
#: src/net/i2p/desktopgui/ExternalTrayManager.java:72
|
||||||
msgid "Starting"
|
msgid "Starting"
|
||||||
msgstr "Startar"
|
msgstr "Startar"
|
||||||
|
|
||||||
#: src/net/i2p/desktopgui/InternalTrayManager.java:26
|
#: src/net/i2p/desktopgui/InternalTrayManager.java:55
|
||||||
|
#: src/net/i2p/desktopgui/InternalTrayManager.java:207
|
||||||
msgid "Launch I2P Browser"
|
msgid "Launch I2P Browser"
|
||||||
msgstr "Öppna I2P browser"
|
msgstr "Öppna I2P browser"
|
||||||
|
|
||||||
#: src/net/i2p/desktopgui/InternalTrayManager.java:50
|
#: src/net/i2p/desktopgui/InternalTrayManager.java:76
|
||||||
msgid "Configure desktopgui"
|
#: src/net/i2p/desktopgui/InternalTrayManager.java:228
|
||||||
msgstr "Konfigurera desktopgui"
|
msgid "Configure I2P System Tray"
|
||||||
|
msgstr "Konfigurera I2P systemfältet"
|
||||||
|
|
||||||
#: src/net/i2p/desktopgui/InternalTrayManager.java:67
|
#: src/net/i2p/desktopgui/InternalTrayManager.java:77
|
||||||
|
#: src/net/i2p/desktopgui/InternalTrayManager.java:229
|
||||||
|
msgid "Disable"
|
||||||
|
msgstr "Avaktivera"
|
||||||
|
|
||||||
|
#: src/net/i2p/desktopgui/InternalTrayManager.java:93
|
||||||
|
#: src/net/i2p/desktopgui/InternalTrayManager.java:245
|
||||||
msgid "Restart I2P"
|
msgid "Restart I2P"
|
||||||
msgstr "Starta om I2P"
|
msgstr "Starta om I2P"
|
||||||
|
|
||||||
#: src/net/i2p/desktopgui/InternalTrayManager.java:85
|
#: src/net/i2p/desktopgui/InternalTrayManager.java:110
|
||||||
|
#: src/net/i2p/desktopgui/InternalTrayManager.java:262
|
||||||
msgid "Stop I2P"
|
msgid "Stop I2P"
|
||||||
msgstr "Stoppar I2P"
|
msgstr "Stoppar I2P"
|
||||||
|
|
||||||
#: src/net/i2p/desktopgui/gui/DesktopguiConfigurationFrame.java:44
|
#: src/net/i2p/desktopgui/InternalTrayManager.java:126
|
||||||
msgid "Tray icon configuration"
|
#: src/net/i2p/desktopgui/InternalTrayManager.java:278
|
||||||
msgstr "Ikonpanelskonfiguration"
|
msgid "Restart I2P Immediately"
|
||||||
|
msgstr "Starta om I2P omedelbart"
|
||||||
|
|
||||||
#: src/net/i2p/desktopgui/gui/DesktopguiConfigurationFrame.java:47
|
#: src/net/i2p/desktopgui/InternalTrayManager.java:143
|
||||||
msgid "Should tray icon be enabled?"
|
#: src/net/i2p/desktopgui/InternalTrayManager.java:295
|
||||||
msgstr "Ska ikonpanelen vara aktiverad?"
|
msgid "Stop I2P Immediately"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
#: src/net/i2p/desktopgui/InternalTrayManager.java:157
|
||||||
|
#: src/net/i2p/desktopgui/InternalTrayManager.java:309
|
||||||
|
msgid "Cancel I2P Shutdown"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
#: src/net/i2p/desktopgui/InternalTrayManager.java:363
|
||||||
|
#, java-format
|
||||||
|
msgid "Shutdown in {0}"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
#: src/net/i2p/desktopgui/InternalTrayManager.java:365
|
||||||
|
msgid "Shutdown imminent"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
#. status translations are in the console bundle
|
||||||
|
#: src/net/i2p/desktopgui/InternalTrayManager.java:370
|
||||||
|
msgid "Network"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
#. Windows typically has tooltips; Linux (at least Ubuntu) doesn't
|
||||||
|
#: src/net/i2p/desktopgui/TrayManager.java:63
|
||||||
|
msgid "I2P: Right-click for menu"
|
||||||
|
msgstr ""
|
||||||
|
@ -4,53 +4,91 @@
|
|||||||
# To contribute translations, see http://www.i2p2.de/newdevelopers
|
# To contribute translations, see http://www.i2p2.de/newdevelopers
|
||||||
#
|
#
|
||||||
# Translators:
|
# Translators:
|
||||||
# Kaya Zeren <kayazeren@gmail.com>, 2013
|
# Kaya Zeren <kayazeren@gmail.com>, 2013,2016
|
||||||
msgid ""
|
msgid ""
|
||||||
msgstr ""
|
msgstr ""
|
||||||
"Project-Id-Version: I2P\n"
|
"Project-Id-Version: I2P\n"
|
||||||
"Report-Msgid-Bugs-To: https://trac.i2p2.de/\n"
|
"Report-Msgid-Bugs-To: \n"
|
||||||
"POT-Creation-Date: 2011-03-03 18:29+0000\n"
|
"POT-Creation-Date: 2016-05-25 12:29+0000\n"
|
||||||
"PO-Revision-Date: 2013-04-26 06:07+0000\n"
|
"PO-Revision-Date: 2016-05-26 05:38+0000\n"
|
||||||
"Last-Translator: Kaya Zeren <kayazeren@gmail.com>\n"
|
"Last-Translator: Kaya Zeren <kayazeren@gmail.com>\n"
|
||||||
"Language-Team: Turkish (Turkey) (http://www.transifex.com/projects/p/I2P/language/tr_TR/)\n"
|
"Language-Team: Turkish (Turkey) (http://www.transifex.com/otf/I2P/language/tr_TR/)\n"
|
||||||
"MIME-Version: 1.0\n"
|
"MIME-Version: 1.0\n"
|
||||||
"Content-Type: text/plain; charset=UTF-8\n"
|
"Content-Type: text/plain; charset=UTF-8\n"
|
||||||
"Content-Transfer-Encoding: 8bit\n"
|
"Content-Transfer-Encoding: 8bit\n"
|
||||||
"Language: tr_TR\n"
|
"Language: tr_TR\n"
|
||||||
"Plural-Forms: nplurals=1; plural=0;\n"
|
"Plural-Forms: nplurals=1; plural=0;\n"
|
||||||
|
|
||||||
#: src/net/i2p/desktopgui/ExternalTrayManager.java:23
|
#: src/net/i2p/desktopgui/ExternalTrayManager.java:31
|
||||||
|
#: src/net/i2p/desktopgui/ExternalTrayManager.java:59
|
||||||
msgid "Start I2P"
|
msgid "Start I2P"
|
||||||
msgstr "I2P başlasın"
|
msgstr "I2P başlasın"
|
||||||
|
|
||||||
#: src/net/i2p/desktopgui/ExternalTrayManager.java:38
|
#: src/net/i2p/desktopgui/ExternalTrayManager.java:44
|
||||||
|
#: src/net/i2p/desktopgui/ExternalTrayManager.java:72
|
||||||
msgid "I2P is starting!"
|
msgid "I2P is starting!"
|
||||||
msgstr "I2P başlatılıyor!"
|
msgstr "I2P başlatılıyor!"
|
||||||
|
|
||||||
#: src/net/i2p/desktopgui/ExternalTrayManager.java:38
|
#: src/net/i2p/desktopgui/ExternalTrayManager.java:44
|
||||||
|
#: src/net/i2p/desktopgui/ExternalTrayManager.java:72
|
||||||
msgid "Starting"
|
msgid "Starting"
|
||||||
msgstr "Başlatılıyor"
|
msgstr "Başlatılıyor"
|
||||||
|
|
||||||
#: src/net/i2p/desktopgui/InternalTrayManager.java:26
|
#: src/net/i2p/desktopgui/InternalTrayManager.java:55
|
||||||
|
#: src/net/i2p/desktopgui/InternalTrayManager.java:207
|
||||||
msgid "Launch I2P Browser"
|
msgid "Launch I2P Browser"
|
||||||
msgstr "I2P Tarayıcısını Açın"
|
msgstr "I2P Tarayıcısını Açın"
|
||||||
|
|
||||||
#: src/net/i2p/desktopgui/InternalTrayManager.java:50
|
#: src/net/i2p/desktopgui/InternalTrayManager.java:76
|
||||||
msgid "Configure desktopgui"
|
#: src/net/i2p/desktopgui/InternalTrayManager.java:228
|
||||||
msgstr "Masaüstü Arayüzünü Ayarlayın"
|
msgid "Configure I2P System Tray"
|
||||||
|
msgstr "I2P Sistem Tepsisi Ayarları"
|
||||||
|
|
||||||
#: src/net/i2p/desktopgui/InternalTrayManager.java:67
|
#: src/net/i2p/desktopgui/InternalTrayManager.java:77
|
||||||
|
#: src/net/i2p/desktopgui/InternalTrayManager.java:229
|
||||||
|
msgid "Disable"
|
||||||
|
msgstr "Devre Dışı"
|
||||||
|
|
||||||
|
#: src/net/i2p/desktopgui/InternalTrayManager.java:93
|
||||||
|
#: src/net/i2p/desktopgui/InternalTrayManager.java:245
|
||||||
msgid "Restart I2P"
|
msgid "Restart I2P"
|
||||||
msgstr "I2P Yeniden Başlasın"
|
msgstr "I2P Yeniden Başlasın"
|
||||||
|
|
||||||
#: src/net/i2p/desktopgui/InternalTrayManager.java:85
|
#: src/net/i2p/desktopgui/InternalTrayManager.java:110
|
||||||
|
#: src/net/i2p/desktopgui/InternalTrayManager.java:262
|
||||||
msgid "Stop I2P"
|
msgid "Stop I2P"
|
||||||
msgstr "I2P Durdurulsun"
|
msgstr "I2P Durdurulsun"
|
||||||
|
|
||||||
#: src/net/i2p/desktopgui/gui/DesktopguiConfigurationFrame.java:44
|
#: src/net/i2p/desktopgui/InternalTrayManager.java:126
|
||||||
msgid "Tray icon configuration"
|
#: src/net/i2p/desktopgui/InternalTrayManager.java:278
|
||||||
msgstr "Sistem tepsisi simgesi ayarı"
|
msgid "Restart I2P Immediately"
|
||||||
|
msgstr "I2P Hemen Yeniden Başlatılsın"
|
||||||
|
|
||||||
#: src/net/i2p/desktopgui/gui/DesktopguiConfigurationFrame.java:47
|
#: src/net/i2p/desktopgui/InternalTrayManager.java:143
|
||||||
msgid "Should tray icon be enabled?"
|
#: src/net/i2p/desktopgui/InternalTrayManager.java:295
|
||||||
msgstr "Sistem tepsisi simgesi kullanılsın"
|
msgid "Stop I2P Immediately"
|
||||||
|
msgstr "I2P Hemen Durdurulsun"
|
||||||
|
|
||||||
|
#: src/net/i2p/desktopgui/InternalTrayManager.java:157
|
||||||
|
#: src/net/i2p/desktopgui/InternalTrayManager.java:309
|
||||||
|
msgid "Cancel I2P Shutdown"
|
||||||
|
msgstr "I2P Kapatmayı İptal Et"
|
||||||
|
|
||||||
|
#: src/net/i2p/desktopgui/InternalTrayManager.java:363
|
||||||
|
#, java-format
|
||||||
|
msgid "Shutdown in {0}"
|
||||||
|
msgstr "{0} içinde kapat"
|
||||||
|
|
||||||
|
#: src/net/i2p/desktopgui/InternalTrayManager.java:365
|
||||||
|
msgid "Shutdown imminent"
|
||||||
|
msgstr "Kapatılmak üzere"
|
||||||
|
|
||||||
|
#. status translations are in the console bundle
|
||||||
|
#: src/net/i2p/desktopgui/InternalTrayManager.java:370
|
||||||
|
msgid "Network"
|
||||||
|
msgstr "Ağ"
|
||||||
|
|
||||||
|
#. Windows typically has tooltips; Linux (at least Ubuntu) doesn't
|
||||||
|
#: src/net/i2p/desktopgui/TrayManager.java:63
|
||||||
|
msgid "I2P: Right-click for menu"
|
||||||
|
msgstr "I2P: Menüde sağ tık"
|
||||||
|
@ -4,55 +4,94 @@
|
|||||||
# To contribute translations, see http://www.i2p2.de/newdevelopers
|
# To contribute translations, see http://www.i2p2.de/newdevelopers
|
||||||
#
|
#
|
||||||
# Translators:
|
# Translators:
|
||||||
# Denis Blank <gribua@gmail.com>, 2011
|
# w008 <alex.on.www@gmail.com>, 2016
|
||||||
|
# Denis Lysenko <gribua@gmail.com>, 2011
|
||||||
# LinuxChata, 2014
|
# LinuxChata, 2014
|
||||||
# madjong <madjong@i2pmail.org>, 2014
|
# madjong <madjong@i2pmail.org>, 2014
|
||||||
msgid ""
|
msgid ""
|
||||||
msgstr ""
|
msgstr ""
|
||||||
"Project-Id-Version: I2P\n"
|
"Project-Id-Version: I2P\n"
|
||||||
"Report-Msgid-Bugs-To: \n"
|
"Report-Msgid-Bugs-To: \n"
|
||||||
"POT-Creation-Date: 2014-01-09 19:27+0000\n"
|
"POT-Creation-Date: 2016-05-25 12:29+0000\n"
|
||||||
"PO-Revision-Date: 2014-12-17 17:00+0000\n"
|
"PO-Revision-Date: 2016-07-14 18:50+0000\n"
|
||||||
"Last-Translator: madjong <madjong@i2pmail.org>\n"
|
"Last-Translator: w008 <alex.on.www@gmail.com>\n"
|
||||||
"Language-Team: Ukrainian (Ukraine) (http://www.transifex.com/projects/p/I2P/language/uk_UA/)\n"
|
"Language-Team: Ukrainian (Ukraine) (http://www.transifex.com/otf/I2P/language/uk_UA/)\n"
|
||||||
"MIME-Version: 1.0\n"
|
"MIME-Version: 1.0\n"
|
||||||
"Content-Type: text/plain; charset=UTF-8\n"
|
"Content-Type: text/plain; charset=UTF-8\n"
|
||||||
"Content-Transfer-Encoding: 8bit\n"
|
"Content-Transfer-Encoding: 8bit\n"
|
||||||
"Language: uk_UA\n"
|
"Language: uk_UA\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"
|
||||||
|
|
||||||
#: src/net/i2p/desktopgui/ExternalTrayManager.java:23
|
#: src/net/i2p/desktopgui/ExternalTrayManager.java:31
|
||||||
|
#: src/net/i2p/desktopgui/ExternalTrayManager.java:59
|
||||||
msgid "Start I2P"
|
msgid "Start I2P"
|
||||||
msgstr "Запустити I2P"
|
msgstr "Запустити I2P"
|
||||||
|
|
||||||
#: src/net/i2p/desktopgui/ExternalTrayManager.java:38
|
#: src/net/i2p/desktopgui/ExternalTrayManager.java:44
|
||||||
|
#: src/net/i2p/desktopgui/ExternalTrayManager.java:72
|
||||||
msgid "I2P is starting!"
|
msgid "I2P is starting!"
|
||||||
msgstr "I2P запускається!"
|
msgstr "I2P запускається!"
|
||||||
|
|
||||||
#: src/net/i2p/desktopgui/ExternalTrayManager.java:38
|
#: src/net/i2p/desktopgui/ExternalTrayManager.java:44
|
||||||
|
#: src/net/i2p/desktopgui/ExternalTrayManager.java:72
|
||||||
msgid "Starting"
|
msgid "Starting"
|
||||||
msgstr "Запускається"
|
msgstr "Запускається"
|
||||||
|
|
||||||
#: src/net/i2p/desktopgui/InternalTrayManager.java:26
|
#: src/net/i2p/desktopgui/InternalTrayManager.java:55
|
||||||
|
#: src/net/i2p/desktopgui/InternalTrayManager.java:207
|
||||||
msgid "Launch I2P Browser"
|
msgid "Launch I2P Browser"
|
||||||
msgstr "Запустити I2P Браузер"
|
msgstr "Запустити I2P Браузер"
|
||||||
|
|
||||||
#: src/net/i2p/desktopgui/InternalTrayManager.java:50
|
#: src/net/i2p/desktopgui/InternalTrayManager.java:76
|
||||||
msgid "Configure desktopgui"
|
#: src/net/i2p/desktopgui/InternalTrayManager.java:228
|
||||||
msgstr "Настроїти вигляд інтерфейсу"
|
msgid "Configure I2P System Tray"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
#: src/net/i2p/desktopgui/InternalTrayManager.java:67
|
#: src/net/i2p/desktopgui/InternalTrayManager.java:77
|
||||||
|
#: src/net/i2p/desktopgui/InternalTrayManager.java:229
|
||||||
|
msgid "Disable"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
#: src/net/i2p/desktopgui/InternalTrayManager.java:93
|
||||||
|
#: src/net/i2p/desktopgui/InternalTrayManager.java:245
|
||||||
msgid "Restart I2P"
|
msgid "Restart I2P"
|
||||||
msgstr "Перезапустити I2P"
|
msgstr "Перезапустити I2P"
|
||||||
|
|
||||||
#: src/net/i2p/desktopgui/InternalTrayManager.java:85
|
#: src/net/i2p/desktopgui/InternalTrayManager.java:110
|
||||||
|
#: src/net/i2p/desktopgui/InternalTrayManager.java:262
|
||||||
msgid "Stop I2P"
|
msgid "Stop I2P"
|
||||||
msgstr "Зупинити I2P"
|
msgstr "Зупинити I2P"
|
||||||
|
|
||||||
#: src/net/i2p/desktopgui/gui/DesktopguiConfigurationFrame.java:43
|
#: src/net/i2p/desktopgui/InternalTrayManager.java:126
|
||||||
msgid "Tray icon configuration"
|
#: src/net/i2p/desktopgui/InternalTrayManager.java:278
|
||||||
msgstr "Налаштування трей-іконки"
|
msgid "Restart I2P Immediately"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
#: src/net/i2p/desktopgui/gui/DesktopguiConfigurationFrame.java:46
|
#: src/net/i2p/desktopgui/InternalTrayManager.java:143
|
||||||
msgid "Should tray icon be enabled?"
|
#: src/net/i2p/desktopgui/InternalTrayManager.java:295
|
||||||
msgstr "Чи повинна трей-іконка бути включена?"
|
msgid "Stop I2P Immediately"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
#: src/net/i2p/desktopgui/InternalTrayManager.java:157
|
||||||
|
#: src/net/i2p/desktopgui/InternalTrayManager.java:309
|
||||||
|
msgid "Cancel I2P Shutdown"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
#: src/net/i2p/desktopgui/InternalTrayManager.java:363
|
||||||
|
#, java-format
|
||||||
|
msgid "Shutdown in {0}"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
#: src/net/i2p/desktopgui/InternalTrayManager.java:365
|
||||||
|
msgid "Shutdown imminent"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
#. status translations are in the console bundle
|
||||||
|
#: src/net/i2p/desktopgui/InternalTrayManager.java:370
|
||||||
|
msgid "Network"
|
||||||
|
msgstr "Мережа"
|
||||||
|
|
||||||
|
#. Windows typically has tooltips; Linux (at least Ubuntu) doesn't
|
||||||
|
#: src/net/i2p/desktopgui/TrayManager.java:63
|
||||||
|
msgid "I2P: Right-click for menu"
|
||||||
|
msgstr ""
|
||||||
|
@ -3,55 +3,92 @@
|
|||||||
# This file is distributed under the same license as the desktopgui package.
|
# This file is distributed under the same license as the desktopgui package.
|
||||||
# To contribute translations, see http://www.i2p2.de/newdevelopers
|
# To contribute translations, see http://www.i2p2.de/newdevelopers
|
||||||
#
|
#
|
||||||
# dich_tran <tran.nathan@gmail.com>, 2011.
|
# Translators:
|
||||||
|
# dich_tran <thnhan@gmail.com>, 2011
|
||||||
msgid ""
|
msgid ""
|
||||||
msgstr ""
|
msgstr ""
|
||||||
"Project-Id-Version: I2P\n"
|
"Project-Id-Version: I2P\n"
|
||||||
"Report-Msgid-Bugs-To: https://trac.i2p2.de/\n"
|
"Report-Msgid-Bugs-To: \n"
|
||||||
"POT-Creation-Date: 2011-03-03 18:29+0000\n"
|
"POT-Creation-Date: 2016-05-25 12:29+0000\n"
|
||||||
"PO-Revision-Date: 2011-04-12 06:13+0000\n"
|
"PO-Revision-Date: 2016-05-25 12:34+0000\n"
|
||||||
"Last-Translator: dich_tran <tran.nathan@gmail.com>\n"
|
"Last-Translator: zzzi2p\n"
|
||||||
"Language-Team: Vietnamese (http://www.transifex.net/projects/p/I2P/team/vi/)\n"
|
"Language-Team: Vietnamese (http://www.transifex.com/otf/I2P/language/vi/)\n"
|
||||||
"MIME-Version: 1.0\n"
|
"MIME-Version: 1.0\n"
|
||||||
"Content-Type: text/plain; charset=UTF-8\n"
|
"Content-Type: text/plain; charset=UTF-8\n"
|
||||||
"Content-Transfer-Encoding: 8bit\n"
|
"Content-Transfer-Encoding: 8bit\n"
|
||||||
"Language: vi\n"
|
"Language: vi\n"
|
||||||
"Plural-Forms: nplurals=1; plural=0\n"
|
"Plural-Forms: nplurals=1; plural=0;\n"
|
||||||
|
|
||||||
#: src/net/i2p/desktopgui/ExternalTrayManager.java:23
|
#: src/net/i2p/desktopgui/ExternalTrayManager.java:31
|
||||||
|
#: src/net/i2p/desktopgui/ExternalTrayManager.java:59
|
||||||
msgid "Start I2P"
|
msgid "Start I2P"
|
||||||
msgstr "Khởi động I2P"
|
msgstr "Khởi động I2P"
|
||||||
|
|
||||||
#: src/net/i2p/desktopgui/ExternalTrayManager.java:38
|
#: src/net/i2p/desktopgui/ExternalTrayManager.java:44
|
||||||
|
#: src/net/i2p/desktopgui/ExternalTrayManager.java:72
|
||||||
msgid "I2P is starting!"
|
msgid "I2P is starting!"
|
||||||
msgstr "I2P đang bắt đầu"
|
msgstr "I2P đang bắt đầu"
|
||||||
|
|
||||||
#: src/net/i2p/desktopgui/ExternalTrayManager.java:38
|
#: src/net/i2p/desktopgui/ExternalTrayManager.java:44
|
||||||
|
#: src/net/i2p/desktopgui/ExternalTrayManager.java:72
|
||||||
msgid "Starting"
|
msgid "Starting"
|
||||||
msgstr "Bắt đầu"
|
msgstr "Bắt đầu"
|
||||||
|
|
||||||
#: src/net/i2p/desktopgui/InternalTrayManager.java:26
|
#: src/net/i2p/desktopgui/InternalTrayManager.java:55
|
||||||
|
#: src/net/i2p/desktopgui/InternalTrayManager.java:207
|
||||||
msgid "Launch I2P Browser"
|
msgid "Launch I2P Browser"
|
||||||
msgstr "Kích hoạt trình duyệt I2P"
|
msgstr "Kích hoạt trình duyệt I2P"
|
||||||
|
|
||||||
#: src/net/i2p/desktopgui/InternalTrayManager.java:50
|
#: src/net/i2p/desktopgui/InternalTrayManager.java:76
|
||||||
msgid "Configure desktopgui"
|
#: src/net/i2p/desktopgui/InternalTrayManager.java:228
|
||||||
msgstr "Cấu hình giao diện"
|
msgid "Configure I2P System Tray"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
#: src/net/i2p/desktopgui/InternalTrayManager.java:67
|
#: src/net/i2p/desktopgui/InternalTrayManager.java:77
|
||||||
|
#: src/net/i2p/desktopgui/InternalTrayManager.java:229
|
||||||
|
msgid "Disable"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
#: src/net/i2p/desktopgui/InternalTrayManager.java:93
|
||||||
|
#: src/net/i2p/desktopgui/InternalTrayManager.java:245
|
||||||
msgid "Restart I2P"
|
msgid "Restart I2P"
|
||||||
msgstr "Khởi động lại I2P"
|
msgstr "Khởi động lại I2P"
|
||||||
|
|
||||||
#: src/net/i2p/desktopgui/InternalTrayManager.java:85
|
#: src/net/i2p/desktopgui/InternalTrayManager.java:110
|
||||||
|
#: src/net/i2p/desktopgui/InternalTrayManager.java:262
|
||||||
msgid "Stop I2P"
|
msgid "Stop I2P"
|
||||||
msgstr "Ngưng I2P"
|
msgstr "Ngưng I2P"
|
||||||
|
|
||||||
#: src/net/i2p/desktopgui/gui/DesktopguiConfigurationFrame.java:44
|
#: src/net/i2p/desktopgui/InternalTrayManager.java:126
|
||||||
msgid "Tray icon configuration"
|
#: src/net/i2p/desktopgui/InternalTrayManager.java:278
|
||||||
msgstr "Cấu hình tray icon"
|
msgid "Restart I2P Immediately"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
#: src/net/i2p/desktopgui/gui/DesktopguiConfigurationFrame.java:47
|
#: src/net/i2p/desktopgui/InternalTrayManager.java:143
|
||||||
msgid "Should tray icon be enabled?"
|
#: src/net/i2p/desktopgui/InternalTrayManager.java:295
|
||||||
msgstr "Cần dùng tray icon?"
|
msgid "Stop I2P Immediately"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
#: src/net/i2p/desktopgui/InternalTrayManager.java:157
|
||||||
|
#: src/net/i2p/desktopgui/InternalTrayManager.java:309
|
||||||
|
msgid "Cancel I2P Shutdown"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
#: src/net/i2p/desktopgui/InternalTrayManager.java:363
|
||||||
|
#, java-format
|
||||||
|
msgid "Shutdown in {0}"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
#: src/net/i2p/desktopgui/InternalTrayManager.java:365
|
||||||
|
msgid "Shutdown imminent"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
#. status translations are in the console bundle
|
||||||
|
#: src/net/i2p/desktopgui/InternalTrayManager.java:370
|
||||||
|
msgid "Network"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
#. Windows typically has tooltips; Linux (at least Ubuntu) doesn't
|
||||||
|
#: src/net/i2p/desktopgui/TrayManager.java:63
|
||||||
|
msgid "I2P: Right-click for menu"
|
||||||
|
msgstr ""
|
||||||
|
@ -3,56 +3,94 @@
|
|||||||
# This file is distributed under the same license as the desktopgui package.
|
# This file is distributed under the same license as the desktopgui package.
|
||||||
# To contribute translations, see http://www.i2p2.de/newdevelopers
|
# To contribute translations, see http://www.i2p2.de/newdevelopers
|
||||||
#
|
#
|
||||||
# ducki2p <ducki2p@gmail.com>, 2011.
|
# Translators:
|
||||||
# walking <walking@i2pmail.org>, 2011.
|
# ducki2p <ducki2p@gmail.com>, 2011
|
||||||
|
# walking <walking@i2pmail.org>, 2011
|
||||||
|
# Y.F Yang <yfdyh000@gmail.com>, 2016
|
||||||
msgid ""
|
msgid ""
|
||||||
msgstr ""
|
msgstr ""
|
||||||
"Project-Id-Version: I2P\n"
|
"Project-Id-Version: I2P\n"
|
||||||
"Report-Msgid-Bugs-To: https://trac.i2p2.de/\n"
|
"Report-Msgid-Bugs-To: \n"
|
||||||
"POT-Creation-Date: 2011-03-03 18:29+0000\n"
|
"POT-Creation-Date: 2016-05-25 12:29+0000\n"
|
||||||
"PO-Revision-Date: 2011-03-24 09:18+0000\n"
|
"PO-Revision-Date: 2016-05-25 14:00+0000\n"
|
||||||
"Last-Translator: walking <walking@i2pmail.org>\n"
|
"Last-Translator: Y.F Yang <yfdyh000@gmail.com>\n"
|
||||||
"Language-Team: Chinese (China) (http://www.transifex.net/projects/p/I2P/team/zh_CN/)\n"
|
"Language-Team: Chinese (China) (http://www.transifex.com/otf/I2P/language/zh_CN/)\n"
|
||||||
"MIME-Version: 1.0\n"
|
"MIME-Version: 1.0\n"
|
||||||
"Content-Type: text/plain; charset=UTF-8\n"
|
"Content-Type: text/plain; charset=UTF-8\n"
|
||||||
"Content-Transfer-Encoding: 8bit\n"
|
"Content-Transfer-Encoding: 8bit\n"
|
||||||
"Language: zh_CN\n"
|
"Language: zh_CN\n"
|
||||||
"Plural-Forms: nplurals=1; plural=0\n"
|
"Plural-Forms: nplurals=1; plural=0;\n"
|
||||||
|
|
||||||
#: src/net/i2p/desktopgui/ExternalTrayManager.java:23
|
#: src/net/i2p/desktopgui/ExternalTrayManager.java:31
|
||||||
|
#: src/net/i2p/desktopgui/ExternalTrayManager.java:59
|
||||||
msgid "Start I2P"
|
msgid "Start I2P"
|
||||||
msgstr "启动 I2P"
|
msgstr "启动 I2P"
|
||||||
|
|
||||||
#: src/net/i2p/desktopgui/ExternalTrayManager.java:38
|
#: src/net/i2p/desktopgui/ExternalTrayManager.java:44
|
||||||
|
#: src/net/i2p/desktopgui/ExternalTrayManager.java:72
|
||||||
msgid "I2P is starting!"
|
msgid "I2P is starting!"
|
||||||
msgstr "正在启动 I2P !"
|
msgstr "正在启动 I2P !"
|
||||||
|
|
||||||
#: src/net/i2p/desktopgui/ExternalTrayManager.java:38
|
#: src/net/i2p/desktopgui/ExternalTrayManager.java:44
|
||||||
|
#: src/net/i2p/desktopgui/ExternalTrayManager.java:72
|
||||||
msgid "Starting"
|
msgid "Starting"
|
||||||
msgstr "正在启动"
|
msgstr "正在启动"
|
||||||
|
|
||||||
#: src/net/i2p/desktopgui/InternalTrayManager.java:26
|
#: src/net/i2p/desktopgui/InternalTrayManager.java:55
|
||||||
|
#: src/net/i2p/desktopgui/InternalTrayManager.java:207
|
||||||
msgid "Launch I2P Browser"
|
msgid "Launch I2P Browser"
|
||||||
msgstr "正在启动I2P浏览器"
|
msgstr "正在启动I2P浏览器"
|
||||||
|
|
||||||
#: src/net/i2p/desktopgui/InternalTrayManager.java:50
|
#: src/net/i2p/desktopgui/InternalTrayManager.java:76
|
||||||
msgid "Configure desktopgui"
|
#: src/net/i2p/desktopgui/InternalTrayManager.java:228
|
||||||
msgstr "设置desktopgui"
|
msgid "Configure I2P System Tray"
|
||||||
|
msgstr "配置 I2P 系统托盘"
|
||||||
|
|
||||||
#: src/net/i2p/desktopgui/InternalTrayManager.java:67
|
#: src/net/i2p/desktopgui/InternalTrayManager.java:77
|
||||||
|
#: src/net/i2p/desktopgui/InternalTrayManager.java:229
|
||||||
|
msgid "Disable"
|
||||||
|
msgstr "禁用"
|
||||||
|
|
||||||
|
#: src/net/i2p/desktopgui/InternalTrayManager.java:93
|
||||||
|
#: src/net/i2p/desktopgui/InternalTrayManager.java:245
|
||||||
msgid "Restart I2P"
|
msgid "Restart I2P"
|
||||||
msgstr "重启 I2P"
|
msgstr "重启 I2P"
|
||||||
|
|
||||||
#: src/net/i2p/desktopgui/InternalTrayManager.java:85
|
#: src/net/i2p/desktopgui/InternalTrayManager.java:110
|
||||||
|
#: src/net/i2p/desktopgui/InternalTrayManager.java:262
|
||||||
msgid "Stop I2P"
|
msgid "Stop I2P"
|
||||||
msgstr "停止 I2P"
|
msgstr "停止 I2P"
|
||||||
|
|
||||||
#: src/net/i2p/desktopgui/gui/DesktopguiConfigurationFrame.java:44
|
#: src/net/i2p/desktopgui/InternalTrayManager.java:126
|
||||||
msgid "Tray icon configuration"
|
#: src/net/i2p/desktopgui/InternalTrayManager.java:278
|
||||||
msgstr "托盘图标配置"
|
msgid "Restart I2P Immediately"
|
||||||
|
msgstr "立即重启 I2P"
|
||||||
|
|
||||||
#: src/net/i2p/desktopgui/gui/DesktopguiConfigurationFrame.java:47
|
#: src/net/i2p/desktopgui/InternalTrayManager.java:143
|
||||||
msgid "Should tray icon be enabled?"
|
#: src/net/i2p/desktopgui/InternalTrayManager.java:295
|
||||||
msgstr "是否启用托盘图标?"
|
msgid "Stop I2P Immediately"
|
||||||
|
msgstr "立即停止 I2P"
|
||||||
|
|
||||||
|
#: src/net/i2p/desktopgui/InternalTrayManager.java:157
|
||||||
|
#: src/net/i2p/desktopgui/InternalTrayManager.java:309
|
||||||
|
msgid "Cancel I2P Shutdown"
|
||||||
|
msgstr "取消 I2P 关闭"
|
||||||
|
|
||||||
|
#: src/net/i2p/desktopgui/InternalTrayManager.java:363
|
||||||
|
#, java-format
|
||||||
|
msgid "Shutdown in {0}"
|
||||||
|
msgstr "{0} 后关闭"
|
||||||
|
|
||||||
|
#: src/net/i2p/desktopgui/InternalTrayManager.java:365
|
||||||
|
msgid "Shutdown imminent"
|
||||||
|
msgstr "立即关闭"
|
||||||
|
|
||||||
|
#. status translations are in the console bundle
|
||||||
|
#: src/net/i2p/desktopgui/InternalTrayManager.java:370
|
||||||
|
msgid "Network"
|
||||||
|
msgstr "网络"
|
||||||
|
|
||||||
|
#. Windows typically has tooltips; Linux (at least Ubuntu) doesn't
|
||||||
|
#: src/net/i2p/desktopgui/TrayManager.java:63
|
||||||
|
msgid "I2P: Right-click for menu"
|
||||||
|
msgstr "I2P:右击获得菜单"
|
||||||
|
Before Width: | Height: | Size: 1.1 KiB |
Before Width: | Height: | Size: 34 KiB |
Before Width: | Height: | Size: 1.3 KiB |
Before Width: | Height: | Size: 1.3 KiB |
Before Width: | Height: | Size: 1.3 KiB |