diff --git a/.tx/config b/.tx/config index 2e0c8650ae..5d3b2f7042 100644 --- a/.tx/config +++ b/.tx/config @@ -156,6 +156,7 @@ trans.fi = apps/i2psnark/locale/messages_fi.po trans.fr = apps/i2psnark/locale/messages_fr.po trans.hu = apps/i2psnark/locale/messages_hu.po trans.it = apps/i2psnark/locale/messages_it.po +trans.ja = apps/i2psnark/locale/messages_ja.po trans.nb = apps/i2psnark/locale/messages_nb.po trans.nl = apps/i2psnark/locale/messages_nl.po trans.pl = apps/i2psnark/locale/messages_pl.po @@ -166,6 +167,7 @@ trans.ru_RU = apps/i2psnark/locale/messages_ru.po trans.sk = apps/i2psnark/locale/messages_sk.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.zh_CN = apps/i2psnark/locale/messages_zh.po diff --git a/apps/i2psnark/java/build.xml b/apps/i2psnark/java/build.xml index 214ffa2375..7d80438e4a 100644 --- a/apps/i2psnark/java/build.xml +++ b/apps/i2psnark/java/build.xml @@ -211,6 +211,9 @@ + + + diff --git a/apps/i2psnark/java/src/org/klomp/snark/SnarkManager.java b/apps/i2psnark/java/src/org/klomp/snark/SnarkManager.java index e9736fab87..b249f72966 100644 --- a/apps/i2psnark/java/src/org/klomp/snark/SnarkManager.java +++ b/apps/i2psnark/java/src/org/klomp/snark/SnarkManager.java @@ -42,6 +42,7 @@ import net.i2p.util.SecureDirectory; import net.i2p.util.SecureFileOutputStream; import net.i2p.util.SimpleTimer; import net.i2p.util.SimpleTimer2; +import net.i2p.util.Translate; import org.klomp.snark.dht.DHT; import org.klomp.snark.dht.KRPC; @@ -127,6 +128,8 @@ public class SnarkManager implements CompleteListener { public static final String PROP_PRIVATETRACKERS = "i2psnark.privatetrackers"; private static final String PROP_USE_DHT = "i2psnark.enableDHT"; private static final String PROP_SMART_SORT = "i2psnark.smartSort"; + private static final String PROP_LANG = "i2psnark.lang"; + private static final String PROP_COUNTRY = "i2psnark.country"; public static final int MIN_UP_BW = 10; public static final int DEFAULT_MAX_UP_BW = 25; @@ -254,6 +257,13 @@ public class SnarkManager implements CompleteListener { //_context.addShutdownTask(new SnarkManagerShutdown()); _idleChecker = new IdleChecker(this, _peerCoordinatorSet); _idleChecker.schedule(5*60*1000); + if (!_context.isRouterContext()) { + String lang = _config.getProperty(PROP_LANG); + if (lang != null) { + String country = _config.getProperty(PROP_COUNTRY, ""); + Translate.setLanguage(lang, country); + } + } } /** @@ -774,19 +784,22 @@ public class SnarkManager implements CompleteListener { public void updateConfig(String dataDir, boolean filesPublic, boolean autoStart, boolean smartSort, String refreshDelay, String startDelay, String pageSize, String seedPct, String eepHost, String eepPort, String i2cpHost, String i2cpPort, String i2cpOpts, - String upLimit, String upBW, boolean useOpenTrackers, boolean useDHT, String theme) { + String upLimit, String upBW, boolean useOpenTrackers, boolean useDHT, String theme, + String lang) { synchronized(_configLock) { locked_updateConfig(dataDir, filesPublic, autoStart, smartSort,refreshDelay, startDelay, pageSize, seedPct, eepHost, eepPort, i2cpHost, i2cpPort, i2cpOpts, - upLimit, upBW, useOpenTrackers, useDHT, theme); + upLimit, upBW, useOpenTrackers, useDHT, theme, + lang); } } private void locked_updateConfig(String dataDir, boolean filesPublic, boolean autoStart, boolean smartSort, String refreshDelay, String startDelay, String pageSize, String seedPct, String eepHost, String eepPort, String i2cpHost, String i2cpPort, String i2cpOpts, - String upLimit, String upBW, boolean useOpenTrackers, boolean useDHT, String theme) { + String upLimit, String upBW, boolean useOpenTrackers, boolean useDHT, String theme, + String lang) { boolean changed = false; boolean interruptMonitor = false; //if (eepHost != null) { @@ -893,6 +906,32 @@ public class SnarkManager implements CompleteListener { } + // Standalone (app context) language. + // lang will generally be null since it is hidden from the form if in router context. + + if (lang != null && !_context.isRouterContext() && + lang.length() >= 2 && lang.length() <= 6) { + int under = lang.indexOf('_'); + String nlang, ncountry; + if (under > 0 && lang.length() > under + 1) { + nlang = lang.substring(0, under); + ncountry = lang.substring(under + 1); + } else { + nlang = lang; + ncountry = ""; + } + String olang = _config.getProperty(PROP_LANG); + String ocountry = _config.getProperty(PROP_COUNTRY); + if (!nlang.equals(olang) || !ncountry.equals(ocountry)) { + changed = true; + _config.setProperty(PROP_LANG, nlang); + _config.setProperty(PROP_COUNTRY, ncountry); + Translate.setLanguage(nlang, ncountry); + } + } + + + // Start of I2CP stuff. // i2cpHost will generally be null since it is hidden from the form if in router context. diff --git a/apps/i2psnark/java/src/org/klomp/snark/standalone/ConfigUIHelper.java b/apps/i2psnark/java/src/org/klomp/snark/standalone/ConfigUIHelper.java new file mode 100644 index 0000000000..59f9662725 --- /dev/null +++ b/apps/i2psnark/java/src/org/klomp/snark/standalone/ConfigUIHelper.java @@ -0,0 +1,122 @@ +package org.klomp.snark.standalone; + +import net.i2p.I2PAppContext; +import net.i2p.util.Translate; + +/** + * Standalone (app context) only. + * Copied from ConfigUIHelper. + * @since 0.9.27 + */ +public class ConfigUIHelper { + + private static final String CHECKED = " selected=\"selected\" "; + private static final String BUNDLE_NAME = "org.klomp.snark.web.messages"; + private static final String COUNTRY_BUNDLE_NAME = "net.i2p.router.countries.messages"; + + /** + * Each language has the ISO code, the flag, the name, and the optional country name. + * Alphabetical by the ISO code please. + * See http://en.wikipedia.org/wiki/ISO_639-1 . + * Any language-specific flag added to the icon set must be + * added to the top-level build.xml for the updater. + * As of 0.9.12, ISO 639-2 three-letter codes are supported also. + * + * Note: we don't currently _x the language strings, + * we'll just rely on the JVM's translations for now. + * Country flag unused. + */ + private static final String langs[][] = { + { "ar", "lang_ar", "Arabic", null }, + { "cs", "cz", "Czech", null }, + //{ "da", "dk", "Danish", null }, + { "de", "de", "German", null }, + //{ "et", "ee", "Estonian", null }, + //{ "el", "gr", "Greek", null }, + { "en", "us", "English", null }, + { "es", "es", "Spanish", null }, + { "fi", "fi", "Finnish", null }, + { "fr", "fr", "French", null }, + { "hu", "hu", "Hungarian", null }, + { "it", "it", "Italian", null }, + { "ja", "jp", "Japanese", null }, + //{ "mg", "mg", "Malagasy", null }, + { "nl", "nl", "Dutch", null }, + { "nb", "no", "Norwegian Bokmaal", null }, + { "pl", "pl", "Polish", null }, + { "pt", "pt", "Portuguese", null }, + { "pt_BR", "br", "Portuguese", "Brazil" }, + { "ro", "ro", "Romanian", null }, + { "ru", "ru", "Russian", null }, + { "sk", "sk", "Slovak", null }, + { "sv", "se", "Swedish", null }, + { "tr", "tr", "Turkish", null }, + { "uk", "ua", "Ukrainian", null }, + { "vi", "vn", "Vietnamese", null }, + { "zh", "cn", "Chinese", null }, + //{ "zh_TW", "tw", "Chinese", "Taiwan" }, + { "xx", "a1", "Debug: Find untagged strings", null }, + }; + + /** + * Standalone (app context) only. + * Copied from ConfigUIHelper. + * @return HTML + * @since 0.9.27 + */ + public static String getLangSettings(I2PAppContext ctx) { + String clang = Translate.getLanguage(ctx); + String current = clang; + String country = Translate.getCountry(ctx); + if (country != null && country.length() > 0) + current += '_' + country; + // find best match + boolean found = false; + for (int i = 0; i < langs.length; i++) { + if (langs[i][0].equals(current)) { + found = true; + break; + } + } + if (!found) { + if (country != null && country.length() > 0) { + current = clang; + for (int i = 0; i < langs.length; i++) { + if (langs[i][0].equals(current)) { + found = true; + break; + } + } + } + if (!found) + current = "en"; + } + StringBuilder buf = new StringBuilder(512); + buf.append("\n"); + return buf.toString(); + } + + /** if necessary */ + private static boolean isAdvanced() { return false; } +} diff --git a/apps/i2psnark/java/src/org/klomp/snark/web/I2PSnarkServlet.java b/apps/i2psnark/java/src/org/klomp/snark/web/I2PSnarkServlet.java index fd914e27bc..d2eb393bcb 100644 --- a/apps/i2psnark/java/src/org/klomp/snark/web/I2PSnarkServlet.java +++ b/apps/i2psnark/java/src/org/klomp/snark/web/I2PSnarkServlet.java @@ -44,6 +44,7 @@ import org.klomp.snark.Storage; import org.klomp.snark.Tracker; import org.klomp.snark.TrackerClient; import org.klomp.snark.dht.DHT; +import org.klomp.snark.standalone.ConfigUIHelper; /** * Refactored to eliminate Jetty dependencies. @@ -954,6 +955,7 @@ public class I2PSnarkServlet extends BasicServlet { } else *****/ if (newURL != null) { + newURL = newURL.trim(); String newDir = req.getParameter("nofilter_newDir"); File dir = null; if (newDir != null) { @@ -1141,9 +1143,10 @@ public class I2PSnarkServlet extends BasicServlet { boolean useDHT = req.getParameter("useDHT") != null; //String openTrackers = req.getParameter("openTrackers"); String theme = req.getParameter("theme"); + String lang = req.getParameter("lang"); _manager.updateConfig(dataDir, filesPublic, autoStart, smartSort, refreshDel, startupDel, pageSize, seedPct, eepHost, eepPort, i2cpHost, i2cpPort, i2cpOpts, - upLimit, upBW, useOpenTrackers, useDHT, theme); + upLimit, upBW, useOpenTrackers, useDHT, theme, lang); // update servlet try { setResourceBase(_manager.getDataDir()); @@ -2198,9 +2201,19 @@ public class I2PSnarkServlet extends BasicServlet { + (smartSort ? "checked " : "") + "title=\""); out.write(_t("If checked, ignore words such as 'the' when sorting")); - out.write("\" >" + + out.write("\" >"); - ""); + if (!_context.isRouterContext()) { + try { + out.write(""); + out.write(_t("Language")); + out.write(": "); + // class only in standalone builds + out.write(ConfigUIHelper.getLangSettings(_context)); + } catch (Throwable t) {} + } + + out.write(""); out.write(_t("Theme")); out.write(": \n" + +#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:1372 +#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:2438 +msgid "Restore defaults" +msgstr "" + +#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:1375 +msgid "Restored default trackers" +msgstr "" + +#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:1487 +#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:1488 +#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:2961 +msgid "Checking" +msgstr "" + +#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:1491 +#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:1492 +#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:2968 +msgid "Allocating" +msgstr "" + +#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:1507 +msgid "Tracker Error" +msgstr "" + +#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:1509 +#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:1539 +#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:1544 +#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:1555 +#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:1560 +#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:1566 +#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:1571 +#, java-format +msgid "1 peer" +msgid_plural "{0} peers" +msgstr[0] "" + +#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:1519 +#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:1520 +#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:2966 +msgid "Starting" +msgstr "" + +#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:1528 +msgid "Seeding" +msgstr "" + +#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:1532 +#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:1546 +#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:1547 +#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:2895 +#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:3151 +msgid "Complete" +msgstr "" + +#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:1551 +#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:1552 +#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:1557 +#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:1558 +msgid "OK" +msgstr "OK" + +#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:1562 +#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:1563 +#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:1568 +#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:1569 +msgid "Stalled" +msgstr "" + +#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:1573 +#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:1574 +#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:1577 +#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:1578 +msgid "No Peers" +msgstr "" + +#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:1580 +#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:1581 +msgid "Stopped" +msgstr "停止しました" + +#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:1610 +msgid "Torrent details" +msgstr "" + +#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:1645 +msgid "View files" +msgstr "" + +#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:1647 +msgid "Open file" +msgstr "" + +#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:1699 +msgid "Stop the torrent" +msgstr "" + +#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:1701 +#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:2973 +msgid "Stop" +msgstr "停止" + +#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:1714 +msgid "Start the torrent" +msgstr "" + +#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:1716 +#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:2975 +msgid "Start" +msgstr "開始" + +#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:1729 +msgid "Remove the torrent from the active list, deleting the .torrent file" +msgstr "" + +#. Can't figure out how to escape double quotes inside the onclick string. +#. Single quotes in translate strings with parameters must be doubled. +#. Then the remaining single quote must be escaped +#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:1734 +#, java-format +msgid "" +"Are you sure you want to delete the file \\''{0}\\'' (downloaded data will " +"not be deleted) ?" +msgstr "" + +#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:1738 +msgid "Remove" +msgstr "" + +#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:1751 +msgid "Delete the .torrent file and the associated data file(s)" +msgstr "" + +#. Can't figure out how to escape double quotes inside the onclick string. +#. Single quotes in translate strings with parameters must be doubled. +#. Then the remaining single quote must be escaped +#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:1756 +#, java-format +msgid "" +"Are you sure you want to delete the torrent \\''{0}\\'' and all downloaded " +"data?" +msgstr "" + +#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:1760 +#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:2392 +msgid "Delete" +msgstr "" + +#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:1796 +msgid "Unknown" +msgstr "" + +#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:1808 +msgid "Seed" +msgstr "" + +#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:1831 +msgid "Uninteresting (The peer has no pieces we need)" +msgstr "" + +#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:1833 +msgid "Choked (The peer is not allowing us to request pieces)" +msgstr "" + +#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:1853 +msgid "Uninterested (We have no pieces the peer needs)" +msgstr "" + +#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:1855 +msgid "Choking (We are not allowing the peer to request pieces)" +msgstr "" + +#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:1971 +#, java-format +msgid "Details at {0} tracker" +msgstr "" + +#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:1988 +msgid "Info" +msgstr "" + +#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:2061 +msgid "Add Torrent" +msgstr "" + +#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:2064 +msgid "From URL" +msgstr "" + +#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:2067 +msgid "" +"Enter the torrent file download URL (I2P only), magnet link, maggot link, or" +" info hash" +msgstr "" + +#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:2072 +msgid "Add torrent" +msgstr "" + +#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:2076 +msgid "Data dir" +msgstr "" + +#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:2079 +#, java-format +msgid "Enter the directory to save the data in (default {0})" +msgstr "" + +#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:2083 +#, java-format +msgid "You can also copy .torrent files to: {0}." +msgstr "" + +#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:2085 +msgid "Removing a .torrent will cause it to stop." +msgstr "" + +#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:2098 +msgid "Create Torrent" +msgstr "" + +#. out.write("From file:
\n"); +#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:2101 +msgid "Data to seed" +msgstr "" + +#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:2105 +#, java-format +msgid "File or directory to seed (full path or within the directory {0} )" +msgstr "" + +#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:2108 +#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:2365 +msgid "Trackers" +msgstr "" + +#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:2110 +msgid "Primary" +msgstr "" + +#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:2112 +msgid "Alternates" +msgstr "" + +#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:2115 +msgid "Create torrent" +msgstr "" + +#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:2133 +msgid "none" +msgstr "" + +#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:2171 +msgid "Data directory" +msgstr "" + +#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:2176 +msgid "Files readable by all" +msgstr "" + +#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:2180 +msgid "If checked, other users may access the downloaded files" +msgstr "" + +#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:2184 +msgid "Auto start torrents" +msgstr "" + +#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:2188 +msgid "If checked, automatically start torrents that are added" +msgstr "" + +#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:2192 +msgid "Smart torrent sorting" +msgstr "" + +#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:2196 +msgid "If checked, ignore words such as 'the' when sorting" +msgstr "" + +#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:2200 +msgid "Theme" +msgstr "" + +#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:2214 +msgid "Refresh time" +msgstr "" + +#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:2227 +msgid "Never" +msgstr "" + +#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:2233 +msgid "Startup delay" +msgstr "" + +#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:2235 +msgid "minutes" +msgstr "" + +#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:2239 +msgid "Page size" +msgstr "" + +#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:2241 +msgid "torrents" +msgstr "" + +#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:2265 +msgid "Total uploader limit" +msgstr "" + +#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:2268 +msgid "peers" +msgstr "" + +#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:2272 +msgid "Up bandwidth limit" +msgstr "" + +#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:2275 +msgid "Half available bandwidth recommended." +msgstr "" + +#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:2277 +msgid "View or change router bandwidth" +msgstr "" + +#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:2281 +msgid "Use open trackers also" +msgstr "" + +#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:2285 +msgid "" +"If checked, announce torrents to open trackers as well as the tracker listed" +" in the torrent file" +msgstr "" + +#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:2289 +msgid "Enable DHT" +msgstr "" + +#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:2293 +msgid "If checked, use DHT" +msgstr "" + +#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:2309 +msgid "Inbound Settings" +msgstr "" + +#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:2316 +msgid "Outbound Settings" +msgstr "" + +#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:2325 +msgid "I2CP host" +msgstr "" + +#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:2330 +msgid "I2CP port" +msgstr "" + +#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:2345 +msgid "I2CP options" +msgstr "" + +#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:2350 +msgid "Save configuration" +msgstr "" + +#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:2370 +#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:3057 +msgid "Name" +msgstr "名前" + +#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:2372 +msgid "Website URL" +msgstr "" + +#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:2374 +msgid "Standard" +msgstr "" + +#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:2376 +#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:3184 +msgid "Open" +msgstr "" + +#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:2378 +msgid "Private" +msgstr "" + +#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:2380 +msgid "Announce URL" +msgstr "" + +#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:2424 +msgid "Add" +msgstr "" + +#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:2467 +#, java-format +msgid "Invalid magnet URL {0}" +msgstr "" + +#. * dummies for translation +#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:2475 +#, java-format +msgid "1 hop" +msgid_plural "{0} hops" +msgstr[0] "" + +#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:2476 +#, java-format +msgid "1 tunnel" +msgid_plural "{0} tunnels" +msgstr[0] "" + +#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:2732 +msgid "Torrent file" +msgstr "" + +#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:2740 +msgid "Data location" +msgstr "" + +#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:2749 +msgid "Info hash" +msgstr "" + +#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:2768 +msgid "Primary Tracker" +msgstr "" + +#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:2777 +msgid "Tracker List" +msgstr "" + +#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:2802 +msgid "Comment" +msgstr "" + +#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:2814 +msgid "Created" +msgstr "" + +#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:2825 +msgid "Created By" +msgstr "" + +#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:2835 +msgid "Added" +msgstr "" + +#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:2844 +msgid "Completed" +msgstr "" + +#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:2856 +msgid "Magnet link" +msgstr "" + +#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:2871 +msgid "Private torrent" +msgstr "" + +#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:2891 +msgid "Completion" +msgstr "" + +#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:2920 +#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:3086 +msgid "Remaining" +msgstr "" + +#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:2929 +msgid "Skipped" +msgstr "" + +#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:2939 +msgid "Files" +msgstr "" + +#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:2946 +msgid "Pieces" +msgstr "" + +#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:2952 +msgid "Piece size" +msgstr "" + +#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:2964 +msgid "Refresh page for results" +msgstr "" + +#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:2976 +msgid "Force Recheck" +msgstr "" + +#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:3037 +msgid "Directory" +msgstr "" + +#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:3096 +msgid "Priority" +msgstr "" + +#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:3108 +msgid "Up to higher level directory" +msgstr "" + +#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:3142 +msgid "Torrent not found?" +msgstr "" + +#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:3148 +msgid "File not found in torrent?" +msgstr "" + +#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:3161 +msgid "complete" +msgstr "" + +#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:3162 +msgid "remaining" +msgstr "" + +#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:3208 +msgid "High" +msgstr "" + +#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:3213 +msgid "Normal" +msgstr "" + +#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:3218 +msgid "Skip" +msgstr "" + +#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:3228 +msgid "Set all high" +msgstr "" + +#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:3230 +msgid "Set all normal" +msgstr "" + +#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:3232 +msgid "Skip all" +msgstr "" + +#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:3233 +msgid "Save priorities" +msgstr "" diff --git a/apps/i2psnark/locale/messages_uk.po b/apps/i2psnark/locale/messages_uk.po new file mode 100644 index 0000000000..bb0d8046d8 --- /dev/null +++ b/apps/i2psnark/locale/messages_uk.po @@ -0,0 +1,1408 @@ +# I2P +# Copyright (C) 2009 The I2P Project +# This file is distributed under the same license as the i2psnark package. +# To contribute translations, see http://www.i2p2.de/newdevelopers +# +# Translators: +# Denis Lysenko , 2015 +# madjong , 2014 +# puxud , 2014 +# zzzi2p, 2016 +msgid "" +msgstr "" +"Project-Id-Version: I2P\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2016-05-25 12:28+0000\n" +"PO-Revision-Date: 2016-06-15 14:40+0000\n" +"Last-Translator: zzzi2p\n" +"Language-Team: Ukrainian (Ukraine) (http://www.transifex.com/otf/I2P/language/uk_UA/)\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\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" + +#: ../java/src/org/klomp/snark/IdleChecker.java:75 +msgid "No more torrents running." +msgstr "Більше немає запущених торрентів." + +#: ../java/src/org/klomp/snark/IdleChecker.java:76 +#: ../java/src/org/klomp/snark/SnarkManager.java:2542 +#: ../java/src/org/klomp/snark/SnarkManager.java:2553 +msgid "I2P tunnel closed." +msgstr "I2P-тунель закритий." + +#: ../java/src/org/klomp/snark/MagnetURI.java:42 +#: ../java/src/org/klomp/snark/MagnetURI.java:52 +#: ../java/src/org/klomp/snark/SnarkManager.java:2224 +msgid "Magnet" +msgstr "Magnet" + +#: ../java/src/org/klomp/snark/SnarkManager.java:794 +#, java-format +msgid "Total uploaders limit changed to {0}" +msgstr "" + +#: ../java/src/org/klomp/snark/SnarkManager.java:796 +#, java-format +msgid "Minimum total uploaders limit is {0}" +msgstr "" + +#: ../java/src/org/klomp/snark/SnarkManager.java:808 +#, java-format +msgid "Up BW limit changed to {0}KBps" +msgstr "" + +#: ../java/src/org/klomp/snark/SnarkManager.java:810 +#, java-format +msgid "Minimum up bandwidth limit is {0}KBps" +msgstr "" + +#: ../java/src/org/klomp/snark/SnarkManager.java:822 +#, java-format +msgid "Startup delay changed to {0}" +msgstr "Затримка запуску змінена на {0}" + +#: ../java/src/org/klomp/snark/SnarkManager.java:833 +#, java-format +msgid "Refresh time changed to {0}" +msgstr "Час оновлення змінено на {0}" + +#: ../java/src/org/klomp/snark/SnarkManager.java:835 +msgid "Refresh disabled" +msgstr "Оновлення вимкнено" + +#: ../java/src/org/klomp/snark/SnarkManager.java:851 +#, java-format +msgid "Page size changed to {0}" +msgstr "Новий розмір сторінки: {0}" + +#: ../java/src/org/klomp/snark/SnarkManager.java:860 +#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:960 +msgid "Data directory must be an absolute path" +msgstr "Директорія даних повинна бути абсолютним шляхом" + +#: ../java/src/org/klomp/snark/SnarkManager.java:862 +msgid "Data directory does not exist" +msgstr "Директорія даних не існує" + +#: ../java/src/org/klomp/snark/SnarkManager.java:864 +msgid "Not a directory" +msgstr "Не директорія" + +#: ../java/src/org/klomp/snark/SnarkManager.java:866 +msgid "Unreadable" +msgstr "Неможливо прочитати" + +#: ../java/src/org/klomp/snark/SnarkManager.java:871 +#, java-format +msgid "Data directory changed to {0}" +msgstr "Директорія даних змінена на {0}" + +#: ../java/src/org/klomp/snark/SnarkManager.java:926 +msgid "I2CP and tunnel changes will take effect after stopping all torrents" +msgstr "Зміни налаштувать I2CP і тунелів застосуються після зупинки всіх торрентів" + +#: ../java/src/org/klomp/snark/SnarkManager.java:930 +#, java-format +msgid "I2CP options changed to {0}" +msgstr "Параметри I2CP змінені на {0}" + +#: ../java/src/org/klomp/snark/SnarkManager.java:936 +msgid "Disconnecting old I2CP destination" +msgstr "" + +#: ../java/src/org/klomp/snark/SnarkManager.java:938 +#, java-format +msgid "I2CP settings changed to {0}" +msgstr "Нові налаштування I2CP: {0}" + +#: ../java/src/org/klomp/snark/SnarkManager.java:943 +msgid "" +"Unable to connect with the new settings, reverting to the old I2CP settings" +msgstr "Не вдалося з’єднатися з використанням нових налаштувань I2CP, повернення до попередніх налаштувань" + +#: ../java/src/org/klomp/snark/SnarkManager.java:947 +msgid "Unable to reconnect with the old settings!" +msgstr "Неможливо перез’єднатись із старими налаштуваннями!" + +#: ../java/src/org/klomp/snark/SnarkManager.java:949 +msgid "Reconnected on the new I2CP destination" +msgstr "" + +#: ../java/src/org/klomp/snark/SnarkManager.java:956 +#, java-format +msgid "I2CP listener restarted for \"{0}\"" +msgstr "" + +#: ../java/src/org/klomp/snark/SnarkManager.java:970 +msgid "New files will be publicly readable" +msgstr "Нові файли будуть публічно доступні для читання" + +#: ../java/src/org/klomp/snark/SnarkManager.java:972 +msgid "New files will not be publicly readable" +msgstr "Нові файли не будуть доступні для читання публічно" + +#: ../java/src/org/klomp/snark/SnarkManager.java:979 +msgid "Enabled autostart" +msgstr "Автозапуск увімкнено" + +#: ../java/src/org/klomp/snark/SnarkManager.java:981 +msgid "Disabled autostart" +msgstr "Автозапуск вимкнено" + +#: ../java/src/org/klomp/snark/SnarkManager.java:988 +msgid "Enabled smart sort" +msgstr "" + +#: ../java/src/org/klomp/snark/SnarkManager.java:990 +msgid "Disabled smart sort" +msgstr "" + +#: ../java/src/org/klomp/snark/SnarkManager.java:997 +msgid "Enabled open trackers - torrent restart required to take effect." +msgstr "" + +#: ../java/src/org/klomp/snark/SnarkManager.java:999 +msgid "Disabled open trackers - torrent restart required to take effect." +msgstr "" + +#: ../java/src/org/klomp/snark/SnarkManager.java:1006 +msgid "Enabled DHT." +msgstr "DHT увімкнено." + +#: ../java/src/org/klomp/snark/SnarkManager.java:1008 +msgid "Disabled DHT." +msgstr "DHT вимкнено." + +#: ../java/src/org/klomp/snark/SnarkManager.java:1010 +msgid "DHT change requires tunnel shutdown and reopen" +msgstr "" + +#: ../java/src/org/klomp/snark/SnarkManager.java:1017 +#, java-format +msgid "{0} theme loaded, return to main i2psnark page to view." +msgstr "Тема {0} завантажена, поверніться до головної сторінки I2PSnark щоб переглянути." + +#: ../java/src/org/klomp/snark/SnarkManager.java:1027 +msgid "Configuration unchanged." +msgstr "Налаштування не змінені." + +#: ../java/src/org/klomp/snark/SnarkManager.java:1059 +msgid "Open Tracker list changed - torrent restart required to take effect." +msgstr "" + +#: ../java/src/org/klomp/snark/SnarkManager.java:1069 +msgid "Private tracker list changed - affects newly created torrents only." +msgstr "" + +#: ../java/src/org/klomp/snark/SnarkManager.java:1115 +#, java-format +msgid "Unable to save the config to {0}" +msgstr "Неможливо зберегти налаштування до {0}" + +#: ../java/src/org/klomp/snark/SnarkManager.java:1196 +msgid "Connecting to I2P" +msgstr "З’єднання з I2P" + +#: ../java/src/org/klomp/snark/SnarkManager.java:1199 +msgid "Error connecting to I2P - check your I2CP settings!" +msgstr "Помилка з’єднання з I2P - перевірте ваші налаштування I2CP!" + +#: ../java/src/org/klomp/snark/SnarkManager.java:1208 +#: ../java/src/org/klomp/snark/SnarkManager.java:2273 +#, java-format +msgid "Error: Could not add the torrent {0}" +msgstr "Помилка: неможливо додати торрент {0}" + +#. catch this here so we don't try do delete it below +#: ../java/src/org/klomp/snark/SnarkManager.java:1231 +#, java-format +msgid "Cannot open \"{0}\"" +msgstr "Неможливо відкрити \"{0}\"" + +#. TODO - if the existing one is a magnet, delete it and add the metainfo +#. instead? +#: ../java/src/org/klomp/snark/SnarkManager.java:1250 +#: ../java/src/org/klomp/snark/SnarkManager.java:1391 +#: ../java/src/org/klomp/snark/SnarkManager.java:1479 +#: ../java/src/org/klomp/snark/web/FetchAndAdd.java:166 +#, java-format +msgid "Torrent with this info hash is already running: {0}" +msgstr "" + +#: ../java/src/org/klomp/snark/SnarkManager.java:1256 +#, java-format +msgid "ERROR - No I2P trackers in private torrent \"{0}\"" +msgstr "ПОМИЛКА: Немає I2P трекерів у особистому торренті \"{0}\"" + +#: ../java/src/org/klomp/snark/SnarkManager.java:1258 +#, java-format +msgid "" +"Warning - No I2P trackers in \"{0}\", will announce to I2P open trackers and" +" DHT only." +msgstr "" + +#: ../java/src/org/klomp/snark/SnarkManager.java:1261 +#, java-format +msgid "" +"Warning - No I2P trackers in \"{0}\", and open trackers are disabled, will " +"announce to DHT only." +msgstr "" + +#: ../java/src/org/klomp/snark/SnarkManager.java:1263 +#, java-format +msgid "" +"Warning - No I2P trackers in \"{0}\", and DHT and open trackers are " +"disabled, you should enable open trackers or DHT before starting the " +"torrent." +msgstr "" + +#: ../java/src/org/klomp/snark/SnarkManager.java:1289 +#, java-format +msgid "Torrent in \"{0}\" is invalid" +msgstr "Торрент у \"{0}\" неправильний/пошкоджений" + +#: ../java/src/org/klomp/snark/SnarkManager.java:1295 +#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:1044 +#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:1071 +#, java-format +msgid "Torrent file deleted: {0}" +msgstr "Торрент файл видалено: {0}" + +#: ../java/src/org/klomp/snark/SnarkManager.java:1298 +#, java-format +msgid "Torrent file moved from {0} to {1}" +msgstr "" + +#: ../java/src/org/klomp/snark/SnarkManager.java:1302 +#: ../java/src/org/klomp/snark/web/FetchAndAdd.java:193 +#, java-format +msgid "ERROR - Out of memory, cannot create torrent from {0}" +msgstr "" + +#: ../java/src/org/klomp/snark/SnarkManager.java:1324 +#, java-format +msgid "Torrent added and started: {0}" +msgstr "" + +#: ../java/src/org/klomp/snark/SnarkManager.java:1326 +#, java-format +msgid "Torrent added: {0}" +msgstr "" + +#: ../java/src/org/klomp/snark/SnarkManager.java:1402 +#: ../java/src/org/klomp/snark/web/FetchAndAdd.java:93 +#, java-format +msgid "Fetching {0}" +msgstr "Отримання торренту: {0}" + +#: ../java/src/org/klomp/snark/SnarkManager.java:1408 +#, java-format +msgid "" +"Open trackers are disabled and we have no DHT peers. Fetch of {0} may not " +"succeed until you start another torrent, enable open trackers, or enable " +"DHT." +msgstr "Використання відкритих трекерів заборонено і немає DHT пірів. Передавання {0} не може бути завершено. Запустіть інший торрент або дозвольте використання відкритих трекерів і/або DHT." + +#: ../java/src/org/klomp/snark/SnarkManager.java:1412 +#, java-format +msgid "Adding {0}" +msgstr "Додавання {0}" + +#: ../java/src/org/klomp/snark/SnarkManager.java:1445 +#, java-format +msgid "Download already running: {0}" +msgstr "" + +#: ../java/src/org/klomp/snark/SnarkManager.java:1490 +#: ../java/src/org/klomp/snark/SnarkManager.java:1516 +#: ../java/src/org/klomp/snark/SnarkManager.java:2154 +#, java-format +msgid "Failed to copy torrent file to {0}" +msgstr "Неможливо скопіювати торрент файл до {0}" + +#: ../java/src/org/klomp/snark/SnarkManager.java:1930 +#, java-format +msgid "Too many files in \"{0}\" ({1})!" +msgstr "" + +#: ../java/src/org/klomp/snark/SnarkManager.java:1932 +#, java-format +msgid "Torrent file \"{0}\" cannot end in \".torrent\"!" +msgstr "" + +#: ../java/src/org/klomp/snark/SnarkManager.java:1934 +#, java-format +msgid "No pieces in \"{0}\"!" +msgstr "" + +#: ../java/src/org/klomp/snark/SnarkManager.java:1936 +#, java-format +msgid "Too many pieces in \"{0}\", limit is {1}!" +msgstr "" + +#: ../java/src/org/klomp/snark/SnarkManager.java:1938 +#, java-format +msgid "Pieces are too large in \"{0}\" ({1}B)!" +msgstr "" + +#: ../java/src/org/klomp/snark/SnarkManager.java:1939 +#, java-format +msgid "Limit is {0}B" +msgstr "Ліміт: {0}Б" + +#: ../java/src/org/klomp/snark/SnarkManager.java:1941 +#, java-format +msgid "Torrent \"{0}\" has no data!" +msgstr "" + +#: ../java/src/org/klomp/snark/SnarkManager.java:1949 +#, java-format +msgid "Torrents larger than {0}B are not supported yet \"{1}\"!" +msgstr "" + +#: ../java/src/org/klomp/snark/SnarkManager.java:1966 +#, java-format +msgid "Error: Could not remove the torrent {0}" +msgstr "Помилка: неможливо видалити торрент {0}" + +#: ../java/src/org/klomp/snark/SnarkManager.java:1989 +#: ../java/src/org/klomp/snark/SnarkManager.java:2008 +#, java-format +msgid "Torrent stopped: {0}" +msgstr "" + +#: ../java/src/org/klomp/snark/SnarkManager.java:2028 +#, java-format +msgid "Torrent removed: \"{0}\"" +msgstr "Торрент вилучено: {0}" + +#: ../java/src/org/klomp/snark/SnarkManager.java:2036 +#, java-format +msgid "Adding torrents in {0}" +msgstr "Додавання торрентів у {0}" + +#: ../java/src/org/klomp/snark/SnarkManager.java:2070 +#, java-format +msgid "Up bandwidth limit is {0} KBps" +msgstr "" + +#: ../java/src/org/klomp/snark/SnarkManager.java:2095 +#, java-format +msgid "Download finished: {0}" +msgstr "Завантаження завершено: {0}" + +#. addMessage(_t("Metainfo received for {0}", snark.getName())); +#: ../java/src/org/klomp/snark/SnarkManager.java:2151 +#: ../java/src/org/klomp/snark/SnarkManager.java:2434 +#, java-format +msgid "Starting up torrent {0}" +msgstr "Запуск торренту {0}" + +#: ../java/src/org/klomp/snark/SnarkManager.java:2166 +#, java-format +msgid "Error on torrent {0}" +msgstr "Помилка торренту {0}" + +#: ../java/src/org/klomp/snark/SnarkManager.java:2267 +msgid "Unable to connect to I2P!" +msgstr "Неможливо з’єднатися з I2P!" + +#: ../java/src/org/klomp/snark/SnarkManager.java:2433 +#: ../java/src/org/klomp/snark/web/FetchAndAdd.java:130 +msgid "Opening the I2P tunnel" +msgstr "Відкриття тунелю I2P" + +#: ../java/src/org/klomp/snark/SnarkManager.java:2453 +msgid "Opening the I2P tunnel and starting all torrents." +msgstr "Відкриття тунелю I2P і запуск всіх торрентів." + +#: ../java/src/org/klomp/snark/SnarkManager.java:2516 +msgid "Stopping all torrents and closing the I2P tunnel." +msgstr "Зупинення всіх торрентів і закриття тунелю I2P." + +#: ../java/src/org/klomp/snark/SnarkManager.java:2535 +msgid "Closing I2P tunnel after notifying trackers." +msgstr "Виключення тунелю I2P після попередження трекерів." + +#: ../java/src/org/klomp/snark/SnarkManager.java:2597 +#, java-format +msgid "Finished recheck of torrent {0}, now {1} complete" +msgstr "" + +#: ../java/src/org/klomp/snark/SnarkManager.java:2599 +#, java-format +msgid "Finished recheck of torrent {0}, unchanged" +msgstr "" + +#: ../java/src/org/klomp/snark/SnarkManager.java:2603 +#, java-format +msgid "Error checking the torrent {0}" +msgstr "" + +#: ../java/src/org/klomp/snark/TrackerClient.java:245 +#, java-format +msgid "No valid trackers for {0} - enable opentrackers or DHT?" +msgstr "Для {0} немає трекерів - включити відкриті трекери або DHT?" + +#: ../java/src/org/klomp/snark/UpdateHandler.java:49 +#: ../java/src/org/klomp/snark/UpdateRunner.java:228 +msgid "Updating" +msgstr "Оновлення" + +#: ../java/src/org/klomp/snark/UpdateRunner.java:115 +#, java-format +msgid "Updating from {0}" +msgstr "Оновлення з {0}" + +#: ../java/src/org/klomp/snark/web/FetchAndAdd.java:80 +#, java-format +msgid "Download torrent file from {0}" +msgstr "" + +#: ../java/src/org/klomp/snark/web/FetchAndAdd.java:103 +#, java-format +msgid "Torrent was not retrieved from {0}" +msgstr "Торрент не було отримано з {0}" + +#: ../java/src/org/klomp/snark/web/FetchAndAdd.java:157 +#, java-format +msgid "Torrent fetched from {0}" +msgstr "Отримано торрент із {0}" + +#: ../java/src/org/klomp/snark/web/FetchAndAdd.java:178 +#, java-format +msgid "Torrent already running: {0}" +msgstr "Торрент вже запущений: {0}" + +#: ../java/src/org/klomp/snark/web/FetchAndAdd.java:180 +#, java-format +msgid "Torrent already in the queue: {0}" +msgstr "Торрент вже в черзі: {0}" + +#: ../java/src/org/klomp/snark/web/FetchAndAdd.java:191 +#, java-format +msgid "Torrent at {0} was not valid" +msgstr "" + +#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:270 +#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:313 +#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:324 +#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:1780 +#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:2702 +msgid "I2PSnark" +msgstr "I2PSnark" + +#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:275 +#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:2167 +#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:2450 +msgid "Configuration" +msgstr "Налаштування" + +#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:277 +msgid "Anonymous BitTorrent Client" +msgstr "Анонімний BitTorrent клієнт" + +#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:291 +msgid "Router is down" +msgstr "Роутер не працює" + +#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:308 +msgid "Torrents" +msgstr "Торренти" + +#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:319 +msgid "Refresh page" +msgstr "Оновити сторінку" + +#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:328 +msgid "Forum" +msgstr "Форум" + +#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:343 +msgid "Click \"Add torrent\" button to fetch torrent" +msgstr "Натисніть \"Додати торрент\" щоб отримати торрент" + +#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:397 +msgid "clear messages" +msgstr "очистити повідомлення" + +#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:452 +#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:3084 +msgid "Status" +msgstr "Статус" + +#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:454 +#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:496 +#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:514 +#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:540 +#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:571 +#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:586 +#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:601 +#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:3057 +#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:3074 +#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:3086 +#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:3098 +#, java-format +msgid "Sort by {0}" +msgstr "Сортувати по {0}" + +#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:465 +msgid "Hide Peers" +msgstr "Приховати піри" + +#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:471 +msgid "Show Peers" +msgstr "Показати піри" + +#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:494 +#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:2688 +#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:2722 +msgid "Torrent" +msgstr "Торрент" + +#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:496 +#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:3057 +msgid "File type" +msgstr "Тип файлу" + +#. Translators: Please keep short or translate as " " +#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:512 +msgid "ETA" +msgstr "Залишилось" + +#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:514 +#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:515 +msgid "Estimated time remaining" +msgstr "Приблизно залишилось" + +#. Translators: Please keep short or translate as " " +#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:538 +msgid "RX" +msgstr "" + +#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:540 +#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:541 +msgid "Downloaded" +msgstr "Завантажено" + +#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:540 +#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:2882 +#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:3072 +msgid "Size" +msgstr "Розмір" + +#. Translators: Please keep short or translate as " " +#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:569 +msgid "TX" +msgstr "" + +#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:571 +#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:2900 +msgid "Upload ratio" +msgstr "" + +#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:571 +#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:572 +msgid "Uploaded" +msgstr "Вивантажено" + +#. Translators: Please keep short or translate as " " +#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:584 +msgid "RX Rate" +msgstr "" + +#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:586 +#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:587 +msgid "Down Rate" +msgstr "" + +#. Translators: Please keep short or translate as " " +#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:599 +msgid "TX Rate" +msgstr "" + +#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:601 +#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:602 +msgid "Up Rate" +msgstr "" + +#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:618 +msgid "Stop all torrents and the I2P tunnel" +msgstr "Зупинити всі торренти і I2P тунель" + +#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:620 +msgid "Stop All" +msgstr "Зупинити всі" + +#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:632 +msgid "Start all stopped torrents" +msgstr "Запустити всі зупинені торренти" + +#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:634 +#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:648 +msgid "Start All" +msgstr "Запустити всі" + +#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:646 +msgid "Start all torrents and the I2P tunnel" +msgstr "Запустити всі торренти і I2P тунель" + +#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:671 +msgid "No torrents loaded." +msgstr "Немає завантажених торрентів." + +#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:677 +msgid "Totals" +msgstr "Загалом" + +#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:679 +#, java-format +msgid "1 torrent" +msgid_plural "{0} torrents" +msgstr[0] "{0} торрент" +msgstr[1] "{0} торрентів" +msgstr[2] "{0} торрентів" + +#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:684 +#, java-format +msgid "1 connected peer" +msgid_plural "{0} connected peers" +msgstr[0] "{0} приєднаний пір" +msgstr[1] "{0} приєднаних пірів" +msgstr[2] "{0} приєднаних пірів" + +#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:691 +#, java-format +msgid "1 DHT peer" +msgid_plural "{0} DHT peers" +msgstr[0] "{0} DHT пір" +msgstr[1] "{0} DHT пірів" +msgstr[2] "{0} DHT пірів" + +#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:698 +msgid "Dest" +msgstr "" + +#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:826 +msgid "First" +msgstr "" + +#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:826 +msgid "First page" +msgstr "Перша сторінка" + +#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:836 +msgid "Prev" +msgstr "Попередня" + +#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:836 +msgid "Previous page" +msgstr "Попередня сторінка" + +#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:869 +msgid "Next" +msgstr "Наступна" + +#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:869 +msgid "Next page" +msgstr "Наступна сторінка" + +#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:877 +msgid "Last" +msgstr "Остання" + +#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:877 +msgid "Last page" +msgstr "Остання сторінка" + +#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:964 +msgid "Data directory cannot be created" +msgstr "" + +#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:974 +#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:1187 +#, java-format +msgid "Cannot add torrent {0} inside another torrent: {1}" +msgstr "Неможливо додати торрент {0} всередині іншого торренту: {1}" + +#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:995 +#, java-format +msgid "Invalid URL: Must start with \"http://\", \"{0}\", or \"{1}\"" +msgstr "Хибний URL: Повинен починатися з \"http://\", \"{0}\" або \"{1}\"" + +#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:1036 +#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:1065 +#, java-format +msgid "Magnet deleted: {0}" +msgstr "Magnet видалено: {0}" + +#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:1063 +#, java-format +msgid "Download deleted: {0}" +msgstr "Завантаження видалено: {0}" + +#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:1080 +#, java-format +msgid "Data file deleted: {0}" +msgstr "Файл з даними видалений: {0}" + +#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:1082 +#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:1091 +#, java-format +msgid "Data file could not be deleted: {0}" +msgstr "Неможливо видалити файл з даними: {0}" + +#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:1107 +#, java-format +msgid "Directory could not be deleted: {0}" +msgstr "Неможливо вилучити директорію: {0}" + +#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:1114 +#, java-format +msgid "Directory deleted: {0}" +msgstr "Директорію видалено: {0}" + +#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:1166 +#, java-format +msgid "Cannot add a torrent ending in \".torrent\": {0}" +msgstr "Неможливо додати торрент, який закінчується на \".torrent\": {0}" + +#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:1171 +#, java-format +msgid "Torrent with this name is already running: {0}" +msgstr "Торрент з цією назвою вже запущений: {0}" + +#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:1177 +#, java-format +msgid "Cannot add a torrent including an I2P directory: {0}" +msgstr "" + +#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:1192 +#, java-format +msgid "Cannot add torrent {0} including another torrent: {1}" +msgstr "" + +#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:1218 +msgid "Error - Cannot include alternate trackers without a primary tracker" +msgstr "" + +#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:1231 +msgid "Error - Cannot mix private and public trackers in a torrent" +msgstr "" + +#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:1253 +#, java-format +msgid "Torrent created for \"{0}\"" +msgstr "Торрент створений для \"{0}\"" + +#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:1255 +#, java-format +msgid "" +"Many I2P trackers require you to register new torrents before seeding - " +"please do so before starting \"{0}\"" +msgstr "Багато I2P трекерів вимагають зареєструвати торренти перед їх роздачою - будь ласка зробіть це перед запуском \"{0}\"" + +#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:1257 +#, java-format +msgid "Error creating a torrent for \"{0}\"" +msgstr "Неможливо створити торрент для \"{0}\"" + +#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:1261 +#, java-format +msgid "Cannot create a torrent for the nonexistent data: {0}" +msgstr "" + +#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:1264 +msgid "Error creating torrent - you must enter a file or directory" +msgstr "Неможливо створити торрент: необхідно вибрати файл або директорію" + +#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:1295 +#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:2434 +msgid "Delete selected" +msgstr "Видалити вибране" + +#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:1295 +#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:2436 +msgid "Save tracker configuration" +msgstr "Зберегти налаштування трекера" + +#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:1312 +msgid "Removed" +msgstr "Видалено" + +#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:1344 +#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:2433 +#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:2435 +msgid "Add tracker" +msgstr "Додати трекер" + +#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:1367 +#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:1370 +msgid "Enter valid tracker name and URLs" +msgstr "" + +#. "\n" + +#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:1372 +#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:2438 +msgid "Restore defaults" +msgstr "Відновити стандартні" + +#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:1375 +msgid "Restored default trackers" +msgstr "Відновлено стандартні трекери" + +#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:1487 +#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:1488 +#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:2961 +msgid "Checking" +msgstr "Перевірка" + +#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:1491 +#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:1492 +#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:2968 +msgid "Allocating" +msgstr "" + +#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:1507 +msgid "Tracker Error" +msgstr "Помилка трекеру" + +#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:1509 +#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:1539 +#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:1544 +#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:1555 +#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:1560 +#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:1566 +#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:1571 +#, java-format +msgid "1 peer" +msgid_plural "{0} peers" +msgstr[0] "{0} пір" +msgstr[1] "{0} пірів" +msgstr[2] "{0} пірів" + +#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:1519 +#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:1520 +#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:2966 +msgid "Starting" +msgstr "Запуск" + +#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:1528 +msgid "Seeding" +msgstr "Роздаю" + +#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:1532 +#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:1546 +#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:1547 +#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:2895 +#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:3151 +msgid "Complete" +msgstr "Готово" + +#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:1551 +#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:1552 +#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:1557 +#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:1558 +msgid "OK" +msgstr "ОК" + +#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:1562 +#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:1563 +#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:1568 +#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:1569 +msgid "Stalled" +msgstr "" + +#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:1573 +#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:1574 +#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:1577 +#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:1578 +msgid "No Peers" +msgstr "Немає пірів" + +#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:1580 +#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:1581 +msgid "Stopped" +msgstr "Зупинено" + +#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:1610 +msgid "Torrent details" +msgstr "Деталі торрента" + +#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:1645 +msgid "View files" +msgstr "Переглянути файли" + +#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:1647 +msgid "Open file" +msgstr "Відкрити файл" + +#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:1699 +msgid "Stop the torrent" +msgstr "Зупинити торрент" + +#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:1701 +#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:2973 +msgid "Stop" +msgstr "Зупинити" + +#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:1714 +msgid "Start the torrent" +msgstr "Запустити торрент" + +#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:1716 +#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:2975 +msgid "Start" +msgstr "Запустити" + +#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:1729 +msgid "Remove the torrent from the active list, deleting the .torrent file" +msgstr "Видалити торрент з активного спику, видалення файлу .torrent" + +#. Can't figure out how to escape double quotes inside the onclick string. +#. Single quotes in translate strings with parameters must be doubled. +#. Then the remaining single quote must be escaped +#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:1734 +#, java-format +msgid "" +"Are you sure you want to delete the file \\''{0}\\'' (downloaded data will " +"not be deleted) ?" +msgstr "Ви дійсно хочете видалити файл \\\"{0}\\\" (завантажені дані не буде видалено)?" + +#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:1738 +msgid "Remove" +msgstr "Вилучити" + +#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:1751 +msgid "Delete the .torrent file and the associated data file(s)" +msgstr "Видалити .torrent файл і всі пов’язані з ним дані" + +#. Can't figure out how to escape double quotes inside the onclick string. +#. Single quotes in translate strings with parameters must be doubled. +#. Then the remaining single quote must be escaped +#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:1756 +#, java-format +msgid "" +"Are you sure you want to delete the torrent \\''{0}\\'' and all downloaded " +"data?" +msgstr "Ви дійсно хочете видалити торрент \\''{0}\\'' і всі завантажені дані?" + +#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:1760 +#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:2392 +msgid "Delete" +msgstr "Видалити" + +#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:1796 +msgid "Unknown" +msgstr "Невідомо" + +#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:1808 +msgid "Seed" +msgstr "" + +#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:1831 +msgid "Uninteresting (The peer has no pieces we need)" +msgstr "Uninteresting (Пір не має потрібних нам частин)" + +#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:1833 +msgid "Choked (The peer is not allowing us to request pieces)" +msgstr "Choked (Пір не дозволяє нам запитувати частини)" + +#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:1853 +msgid "Uninterested (We have no pieces the peer needs)" +msgstr "Uninterested (Ми не маємо потрібних піру частин)" + +#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:1855 +msgid "Choking (We are not allowing the peer to request pieces)" +msgstr "Choking (Ми не дозволяємо піру запитувати частини)" + +#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:1971 +#, java-format +msgid "Details at {0} tracker" +msgstr "Деталі на трекері {0}" + +#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:1988 +msgid "Info" +msgstr "Інформація" + +#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:2061 +msgid "Add Torrent" +msgstr "Додати торрент" + +#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:2064 +msgid "From URL" +msgstr "З URL" + +#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:2067 +msgid "" +"Enter the torrent file download URL (I2P only), magnet link, maggot link, or" +" info hash" +msgstr "Введіть URL-адресу торрент файлу (тільки I2P), посилання Magnet або інфо хеш" + +#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:2072 +msgid "Add torrent" +msgstr "Додати торрент" + +#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:2076 +msgid "Data dir" +msgstr "" + +#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:2079 +#, java-format +msgid "Enter the directory to save the data in (default {0})" +msgstr "" + +#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:2083 +#, java-format +msgid "You can also copy .torrent files to: {0}." +msgstr "Ви також можете скопіювати .torrent файли до: {0}" + +#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:2085 +msgid "Removing a .torrent will cause it to stop." +msgstr "Видалення .torrent файлу спричинить його зупинку." + +#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:2098 +msgid "Create Torrent" +msgstr "Створити торрент" + +#. out.write("From file:
\n"); +#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:2101 +msgid "Data to seed" +msgstr "Дані для роздачі" + +#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:2105 +#, java-format +msgid "File or directory to seed (full path or within the directory {0} )" +msgstr "" + +#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:2108 +#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:2365 +msgid "Trackers" +msgstr "Трекери" + +#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:2110 +msgid "Primary" +msgstr "" + +#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:2112 +msgid "Alternates" +msgstr "" + +#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:2115 +msgid "Create torrent" +msgstr "Створити торрент" + +#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:2133 +msgid "none" +msgstr "" + +#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:2171 +msgid "Data directory" +msgstr "" + +#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:2176 +msgid "Files readable by all" +msgstr "" + +#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:2180 +msgid "If checked, other users may access the downloaded files" +msgstr "Якщо вибрано, інші користувачі можуть мати доступ до завантажених файлів" + +#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:2184 +msgid "Auto start torrents" +msgstr "Автоматично запускати торренти" + +#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:2188 +msgid "If checked, automatically start torrents that are added" +msgstr "Якщо вибрано, автоматично запускатиме торренти які були додані" + +#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:2192 +msgid "Smart torrent sorting" +msgstr "" + +#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:2196 +msgid "If checked, ignore words such as 'the' when sorting" +msgstr "" + +#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:2200 +msgid "Theme" +msgstr "Тема" + +#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:2214 +msgid "Refresh time" +msgstr "Оновити час" + +#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:2227 +msgid "Never" +msgstr "Ніколи" + +#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:2233 +msgid "Startup delay" +msgstr "Затримка перез автозапуском" + +#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:2235 +msgid "minutes" +msgstr "хвилин" + +#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:2239 +msgid "Page size" +msgstr "Розмір сторінки" + +#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:2241 +msgid "torrents" +msgstr "торрентів" + +#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:2265 +msgid "Total uploader limit" +msgstr "" + +#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:2268 +msgid "peers" +msgstr "піри" + +#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:2272 +msgid "Up bandwidth limit" +msgstr "" + +#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:2275 +msgid "Half available bandwidth recommended." +msgstr "" + +#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:2277 +msgid "View or change router bandwidth" +msgstr "" + +#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:2281 +msgid "Use open trackers also" +msgstr "Використовувати також відкриті трекери" + +#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:2285 +msgid "" +"If checked, announce torrents to open trackers as well as the tracker listed" +" in the torrent file" +msgstr "" + +#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:2289 +msgid "Enable DHT" +msgstr "Увімкнути DHT" + +#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:2293 +msgid "If checked, use DHT" +msgstr "" + +#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:2309 +msgid "Inbound Settings" +msgstr "" + +#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:2316 +msgid "Outbound Settings" +msgstr "" + +#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:2325 +msgid "I2CP host" +msgstr "I2CP хост" + +#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:2330 +msgid "I2CP port" +msgstr "I2CP порт" + +#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:2345 +msgid "I2CP options" +msgstr "Параметри I2CP" + +#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:2350 +msgid "Save configuration" +msgstr "Зберегти налаштування" + +#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:2370 +#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:3057 +msgid "Name" +msgstr "Назва" + +#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:2372 +msgid "Website URL" +msgstr "" + +#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:2374 +msgid "Standard" +msgstr "" + +#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:2376 +#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:3184 +msgid "Open" +msgstr "Відкрити" + +#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:2378 +msgid "Private" +msgstr "" + +#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:2380 +msgid "Announce URL" +msgstr "" + +#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:2424 +msgid "Add" +msgstr "Додати" + +#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:2467 +#, java-format +msgid "Invalid magnet URL {0}" +msgstr "" + +#. * dummies for translation +#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:2475 +#, java-format +msgid "1 hop" +msgid_plural "{0} hops" +msgstr[0] "{0} хоп" +msgstr[1] "{0} хопів" +msgstr[2] "{0} хопів" + +#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:2476 +#, java-format +msgid "1 tunnel" +msgid_plural "{0} tunnels" +msgstr[0] "{0} тунель" +msgstr[1] "{0} тунеля" +msgstr[2] "{0} тунелів" + +#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:2732 +msgid "Torrent file" +msgstr "Торрент файл" + +#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:2740 +msgid "Data location" +msgstr "Розміщення даних" + +#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:2749 +msgid "Info hash" +msgstr "Інфо хеш" + +#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:2768 +msgid "Primary Tracker" +msgstr "" + +#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:2777 +msgid "Tracker List" +msgstr "Список трекерів" + +#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:2802 +msgid "Comment" +msgstr "Коментар" + +#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:2814 +msgid "Created" +msgstr "Створено" + +#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:2825 +msgid "Created By" +msgstr "Створено" + +#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:2835 +msgid "Added" +msgstr "" + +#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:2844 +msgid "Completed" +msgstr "" + +#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:2856 +msgid "Magnet link" +msgstr "Посилання Magnet" + +#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:2871 +msgid "Private torrent" +msgstr "Особистий торрент" + +#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:2891 +msgid "Completion" +msgstr "Завершення" + +#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:2920 +#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:3086 +msgid "Remaining" +msgstr "Залишилось" + +#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:2929 +msgid "Skipped" +msgstr "" + +#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:2939 +msgid "Files" +msgstr "Файли" + +#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:2946 +msgid "Pieces" +msgstr "Частин" + +#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:2952 +msgid "Piece size" +msgstr "Розмір частин" + +#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:2964 +msgid "Refresh page for results" +msgstr "" + +#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:2976 +msgid "Force Recheck" +msgstr "" + +#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:3037 +msgid "Directory" +msgstr "Директорія" + +#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:3096 +msgid "Priority" +msgstr "Пріоритет" + +#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:3108 +msgid "Up to higher level directory" +msgstr "На рівень вище" + +#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:3142 +msgid "Torrent not found?" +msgstr "Торрент не знайдено?" + +#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:3148 +msgid "File not found in torrent?" +msgstr "Файл не знайдено у торренті?" + +#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:3161 +msgid "complete" +msgstr "готово" + +#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:3162 +msgid "remaining" +msgstr "залишилось" + +#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:3208 +msgid "High" +msgstr "Високий" + +#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:3213 +msgid "Normal" +msgstr "Нормальний" + +#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:3218 +msgid "Skip" +msgstr "Пропустити" + +#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:3228 +msgid "Set all high" +msgstr "Високий пріоритет всім" + +#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:3230 +msgid "Set all normal" +msgstr "Нормальний пріоритет всім" + +#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:3232 +msgid "Skip all" +msgstr "Пропустити всі" + +#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:3233 +msgid "Save priorities" +msgstr "Зберегти пріоритети" diff --git a/build.xml b/build.xml index 90e8a1fac5..52598f9acf 100644 --- a/build.xml +++ b/build.xml @@ -1834,7 +1834,8 @@ --> - + + diff --git a/core/java/src/net/i2p/util/Translate.java b/core/java/src/net/i2p/util/Translate.java index e76121c8a2..cf64a52802 100644 --- a/core/java/src/net/i2p/util/Translate.java +++ b/core/java/src/net/i2p/util/Translate.java @@ -27,10 +27,14 @@ public abstract class Translate { public static final String PROP_LANG = "routerconsole.lang"; /** @since 0.9.10 */ public static final String PROP_COUNTRY = "routerconsole.country"; - /** non-null, two-letter lower case, may be "" */ + /** non-null, two- or three-letter lower case, may be "" */ private static final String _localeLang = Locale.getDefault().getLanguage(); /** non-null, two-letter upper case, may be "" */ private static final String _localeCountry = Locale.getDefault().getCountry(); + /** App context only, two- or three-letter lower case, may be null */ + private static String _overrideLang = null; + /** App context only, two-letter upper case, may be "" or null */ + private static String _overrideCountry = null; private static final Map _bundles = new ConcurrentHashMap(16); private static final Set _missing = new ConcurrentHashSet(16); /** use to look for untagged strings */ @@ -139,6 +143,12 @@ public abstract class Translate { * @return lang in routerconsole.lang property, else current locale */ public static String getLanguage(I2PAppContext ctx) { + if (!ctx.isRouterContext()) { + synchronized(Translate.class) { + if (_overrideLang != null) + return _overrideLang; + } + } String lang = ctx.getProperty(PROP_LANG); if (lang == null || lang.length() <= 0) lang = _localeLang; @@ -151,11 +161,32 @@ public abstract class Translate { * @since 0.9.10 */ public static String getCountry(I2PAppContext ctx) { + if (!ctx.isRouterContext()) { + synchronized(Translate.class) { + if (_overrideCountry != null) + return _overrideCountry; + } + } // property may be empty so we don't have a non-default // language and a default country return ctx.getProperty(PROP_COUNTRY, _localeCountry); } + /** + * Only for use by standalone apps in App Context. + * NOT for use in Router Context. + * Does not persist, apps must implement their own persistence. + * Overrides in all contexts. + * + * @param lang Two- or three-letter lower case, or null for default + * @param country Two-letter upper case, or null for default, or "" for none + * @since 0.9.27 + */ + public synchronized static void setLanguage(String lang, String country) { + _overrideLang = lang; + _overrideCountry = country; + } + /** * cache both found and not found for speed * @param lang non-null, if "" returns null