diff --git a/ChangeLog b/ChangeLog
index af9e2a91..0df87a1a 100644
--- a/ChangeLog
+++ b/ChangeLog
@@ -7,17 +7,17 @@
- Give preference to address with direct connection
- Exclude addresses with incorrect static or intro key
- Avoid two firewalled routers in the row in tunnel
-- Drop unsolicited database search replies
+- Drop unsolicited database search replies
### Changed
- Increase number of hashes to 16 in exploratory lookup reply
- Reduce number of a RouterInfo lookup attempts to 5
-- Reset stream RTO if outbound tunnel was changed
-- Insert previously excluded floodfill back when successfully connected
+- Reset stream RTO if outbound tunnel was changed
+- Insert previously excluded floodfill back when successfully connected
- Increase maximum stream resend attempts to 9
- Reply to exploratory lookups with only confirmed routers if low tunnel build rate
-- Don't accept too old RouterInfo
-- Build client tunnels through confirmed routers only if low tunnel build rate
-- Manage netDb requests more frequently
+- Don't accept too old RouterInfo
+- Build client tunnels through confirmed routers only if low tunnel build rate
+- Manage netDb requests more frequently
- Don't reply with closer than us only floodfills for lookup
### Fixed
- Crash on router lookup if exploratory pool is not ready
diff --git a/i18n/Chinese.cpp b/i18n/Chinese.cpp
index 5ecfe067..c423165b 100644
--- a/i18n/Chinese.cpp
+++ b/i18n/Chinese.cpp
@@ -1,5 +1,5 @@
/*
-* Copyright (c) 2022-2023, The PurpleI2P Project
+* Copyright (c) 2022-2024, The PurpleI2P Project
*
* This file is part of Purple i2pd project and licensed under BSD3
*
@@ -69,6 +69,7 @@ namespace chinese // language namespace
{"Stopping in", "距停止还有:"},
{"Family", "家族"},
{"Tunnel creation success rate", "隧道创建成功率"},
+ {"Total tunnel creation success rate", "当前隧道创建成功率"},
{"Received", "已接收"},
{"%.2f KiB/s", "%.2f KiB/s"},
{"Sent", "已发送"},
@@ -95,6 +96,7 @@ namespace chinese // language namespace
{"Address", "地址"},
{"Type", "类型"},
{"EncType", "加密类型"},
+ {"Expire LeaseSet", "到期租约集"},
{"Inbound tunnels", "入站隧道"},
{"%dms", "%dms"},
{"Outbound tunnels", "出站隧道"},
@@ -151,6 +153,8 @@ namespace chinese // language namespace
{"StreamID can't be null", "StreamID 不能为空"},
{"Return to destination page", "返回目标页面"},
{"You will be redirected in %d seconds", "您将在%d秒内被重定向"},
+ {"LeaseSet expiration time updated", "租约集到期时间已更新"},
+ {"LeaseSet is not found or already expired", "租约集未找到或已过期"},
{"Transit tunnels count must not exceed %d", "中转隧道数量限制为 %d"},
{"Back to commands list", "返回命令列表"},
{"Register at reg.i2p", "在 reg.i2p 注册域名"},
diff --git a/i18n/Czech.cpp b/i18n/Czech.cpp
index 09a56d50..3b865474 100644
--- a/i18n/Czech.cpp
+++ b/i18n/Czech.cpp
@@ -1,5 +1,5 @@
/*
-* Copyright (c) 2022-2023, The PurpleI2P Project
+* Copyright (c) 2022-2024, The PurpleI2P Project
*
* This file is part of Purple i2pd project and licensed under BSD3
*
@@ -36,18 +36,18 @@ namespace czech // language namespace
{"%.2f GiB", "%.2f GiB"},
{"building", "vytváří se"},
{"failed", "selhalo"},
- {"expiring", "končící"},
+ {"expiring", "vyprší platnost"},
{"established", "vytvořeno"},
{"unknown", "neznámý"},
{"exploratory", "průzkumné"},
- {"Purple I2P Webconsole", "Purple I2P Webkonsole"},
- {"i2pd webconsole", "i2pd webkonsole"},
+ {"Purple I2P Webconsole", "Purple I2P webová konzole"},
+ {"i2pd webconsole", "i2pd webová konzole"},
{"Main page", "Hlavní stránka"},
{"Router commands", "Router příkazy"},
- {"Local Destinations", "Lokální destinace"},
- {"LeaseSets", "LeaseSety"},
+ {"Local Destinations", "Místní cíle"},
+ {"LeaseSets", "Sety pronájmu"},
{"Tunnels", "Tunely"},
- {"Transit Tunnels", "Transitní tunely"},
+ {"Transit Tunnels", "Tranzitní tunely"},
{"Transports", "Transporty"},
{"I2P tunnels", "I2P tunely"},
{"SAM sessions", "SAM relace"},
@@ -61,18 +61,21 @@ namespace czech // language namespace
{"Clock skew", "Časová nesrovnalost"},
{"Offline", "Offline"},
{"Symmetric NAT", "Symetrický NAT"},
+ {"Full cone NAT", "Full cone NAT"},
+ {"No Descriptors", "Žádné popisovače"},
{"Uptime", "Doba provozu"},
- {"Network status", "Status sítě"},
- {"Network status v6", "Status sítě v6"},
+ {"Network status", "Stav sítě"},
+ {"Network status v6", "Stav sítě v6"},
{"Stopping in", "Zastavuji za"},
{"Family", "Rodina"},
{"Tunnel creation success rate", "Úspěšnost vytváření tunelů"},
+ {"Total tunnel creation success rate", "Celková míra úspěšnosti vytváření tunelů"},
{"Received", "Přijato"},
{"%.2f KiB/s", "%.2f KiB/s"},
{"Sent", "Odesláno"},
{"Transit", "Tranzit"},
- {"Data path", "Cesta k data souborům"},
- {"Hidden content. Press on text to see.", "Skrytý kontent. Pro zobrazení, klikni na text."},
+ {"Data path", "Cesta k datovým souborům"},
+ {"Hidden content. Press on text to see.", "Skrytý obsah. Pro zobrazení klikněte sem."},
{"Router Ident", "Routerová Identita"},
{"Router Family", "Rodina routerů"},
{"Router Caps", "Omezení Routerů"},
@@ -93,6 +96,7 @@ namespace czech // language namespace
{"Address", "Adresa"},
{"Type", "Typ"},
{"EncType", "EncType"},
+ {"Expire LeaseSet", "Zrušit platnost setu pronájmu"},
{"Inbound tunnels", "Příchozí tunely"},
{"%dms", "%dms"},
{"Outbound tunnels", "Odchozí tunely"},
@@ -103,21 +107,24 @@ namespace czech // language namespace
{"Amount", "Množství"},
{"Incoming Tags", "Příchozí štítky"},
{"Tags sessions", "Relace štítků"},
- {"Status", "Status"},
- {"Local Destination", "Lokální Destinace"},
+ {"Status", "Stav"},
+ {"Local Destination", "Místní cíl"},
{"Streams", "Toky"},
{"Close stream", "Uzavřít tok"},
+ {"Such destination is not found", "Takováto destinace nebyla nalezena"},
{"I2CP session not found", "I2CP relace nenalezena"},
{"I2CP is not enabled", "I2CP není zapnuto"},
{"Invalid", "Neplatný"},
{"Store type", "Druh uložení"},
{"Expires", "Vyprší"},
- {"Non Expired Leases", "Nevypršené Leasy"},
+ {"Non Expired Leases", "Pronájmy, kterým nevypršela platnost"},
{"Gateway", "Brána"},
{"TunnelID", "ID tunelu"},
{"EndDate", "Datum ukončení"},
+ {"floodfill mode is disabled", "režim floodfill je vypnut"},
{"Queue size", "Velikost fronty"},
{"Run peer test", "Spustit peer test"},
+ {"Reload tunnels configuration", "Znovu načíst nastavení tunelů"},
{"Decline transit tunnels", "Odmítnout tranzitní tunely"},
{"Accept transit tunnels", "Přijmout tranzitní tunely"},
{"Cancel graceful shutdown", "Zrušit hladké vypnutí"},
@@ -145,14 +152,17 @@ namespace czech // language namespace
{"Destination not found", "Destinace nenalezena"},
{"StreamID can't be null", "StreamID nemůže být null"},
{"Return to destination page", "Zpět na stránku destinací"},
- {"Back to commands list", "Zpět na list příkazů"},
+ {"You will be redirected in %d seconds", "Budete přesměrováni za %d sekund"},
+ {"LeaseSet expiration time updated", "Aktualizován čas vypršení platnosti setu pronájmu"},
+ {"LeaseSet is not found or already expired", "Set pronájmu není k nalezení nebo již vypršela jeho platnost"},
+ {"Transit tunnels count must not exceed %d", "Počet tranzitních tunelů nesmí překročit %d"},
+ {"Back to commands list", "Zpět na seznam příkazů"},
{"Register at reg.i2p", "Zaregistrovat na reg.i2p"},
{"Description", "Popis"},
{"A bit information about service on domain", "Trochu informací o službě na doméně"},
{"Submit", "Odeslat"},
{"Domain can't end with .b32.i2p", "Doména nesmí končit na .b32.i2p"},
{"Domain must end with .i2p", "Doména musí končit s .i2p"},
- {"Such destination is not found", "Takováto destinace nebyla nalezena"},
{"Unknown command", "Neznámý příkaz"},
{"Command accepted", "Příkaz přijat"},
{"Proxy error", "Chyba proxy serveru"},
@@ -162,6 +172,15 @@ namespace czech // language namespace
{"You may try to find this host on jump services below", "Můžete se pokusit najít tohoto hostitele na startovacích službách níže"},
{"Invalid request", "Neplatný požadavek"},
{"Proxy unable to parse your request", "Proxy server nemohl zpracovat váš požadavek"},
+ {"Addresshelper is not supported", "Addresshelper není podporován"},
+ {"Host %s is already in router's addressbook. Be careful: source of this URL may be harmful! Click here to update record: Continue.", "Hostitel %s je již v adresáři routeru. Buďte opatrní: zdroj této URL může být škodlivý! Klikněte zde pro aktualizaci záznamu: Pokračovat."},
+ {"Addresshelper forced update rejected", "Addresshelperem vynucená aktualizace zamítnuta"},
+ {"To add host %s in router's addressbook, click here: Continue.", "Pro přidání hostitele %s do adresáře routeru, klikněte zde: Pokračovat."},
+ {"Addresshelper request", "Požadavek Addresshelperu"},
+ {"Host %s added to router's addressbook from helper. Click here to proceed: Continue.", "Hostitel %s přidán do adresáře routeru od pomocníka. Klikněte zde pro pokračování: Pokračovat."},
+ {"Addresshelper adding", "Addresshelper přidávání"},
+ {"Host %s is already in router's addressbook. Click here to update record: Continue.", "Hostitel %s je již v adresáři routeru. Klikněte zde pro aktualizaci záznamu: Pokračovat."},
+ {"Addresshelper update", "Addresshelper aktualizace"},
{"Invalid request URI", "Neplatný URI požadavek"},
{"Can't detect destination host from request", "Nelze zjistit cílového hostitele z požadavku"},
{"Outproxy failure", "Outproxy selhání"},
diff --git a/i18n/French.cpp b/i18n/French.cpp
index 0a5b147e..999f82b9 100644
--- a/i18n/French.cpp
+++ b/i18n/French.cpp
@@ -1,5 +1,5 @@
/*
-* Copyright (c) 2022-2023, The PurpleI2P Project
+* Copyright (c) 2022-2024, The PurpleI2P Project
*
* This file is part of Purple i2pd project and licensed under BSD3
*
@@ -58,7 +58,7 @@ namespace french // language namespace
{"Unknown", "Inconnu"},
{"Proxy", "Proxy"},
{"Mesh", "Maillé"},
- {"Clock skew", "Horloge décalée"},
+ {"Clock skew", "Décalage de l'horloge"},
{"Offline", "Hors ligne"},
{"Symmetric NAT", "NAT symétrique"},
{"Full cone NAT", "NAT à cône complet"},
@@ -68,8 +68,8 @@ namespace french // language namespace
{"Network status v6", "État du réseau v6"},
{"Stopping in", "Arrêt dans"},
{"Family", "Famille"},
- {"Tunnel creation success rate", "Taux de succès de création de tunnels"},
- {"Total tunnel creation success rate", "Taux de réussite de création de tunnel"},
+ {"Tunnel creation success rate", "Taux de création de tunnel réussie"},
+ {"Total tunnel creation success rate", "Taux total de création de tunnel réussie"},
{"Received", "Reçu"},
{"%.2f KiB/s", "%.2f Kio/s"},
{"Sent", "Envoyé"},
diff --git a/i18n/Polish.cpp b/i18n/Polish.cpp
index 26661231..b2abda11 100644
--- a/i18n/Polish.cpp
+++ b/i18n/Polish.cpp
@@ -1,5 +1,5 @@
/*
-* Copyright (c) 2023, The PurpleI2P Project
+* Copyright (c) 2023-2024, The PurpleI2P Project
*
* This file is part of Purple i2pd project and licensed under BSD3
*
@@ -31,22 +31,186 @@ namespace polish // language namespace
static std::map strings
{
+ {"%.2f KiB", "%.2f KiB"},
+ {"%.2f MiB", "%.2f MiB"},
+ {"%.2f GiB", "%.2f GiB"},
{"building", "Kompilowanie"},
{"failed", "nieudane"},
{"expiring", "wygasający"},
{"established", "ustanowiony"},
+ {"unknown", "nieznany"},
+ {"exploratory", "eksploracyjny"},
+ {"Purple I2P Webconsole", "Konsola webowa Purple I2P"},
+ {"i2pd webconsole", "i2pd konsola webowa"},
{"Main page", "Strona główna"},
{"Router commands", "Komendy routera"},
+ {"Local Destinations", "Lokalne miejsca docelowe"},
+ {"LeaseSets", "ZestawyNajmu"},
{"Tunnels", "Tunele"},
+ {"Transit Tunnels", "Tunele Tranzytu"},
+ {"Transports", "Transportery"},
+ {"I2P tunnels", "Tunele I2P"},
+ {"SAM sessions", "Sesje SAM"},
+ {"ERROR", "BŁĄD"},
{"OK", "Ok"},
+ {"Testing", "Testowanie"},
+ {"Firewalled", "Za zaporą sieciową"},
+ {"Unknown", "Nieznany"},
+ {"Proxy", "Proxy"},
+ {"Mesh", "Sieć"},
+ {"Clock skew", "Przesunięcie czasu"},
+ {"Offline", "Offline"},
+ {"Symmetric NAT", "Symetryczny NAT"},
+ {"Full cone NAT", "Pełny stożek NAT"},
+ {"No Descriptors", "Brak deskryptorów"},
{"Uptime", "Czas pracy"},
+ {"Network status", "Stan sieci"},
+ {"Network status v6", "Stan sieci v6"},
+ {"Stopping in", "Zatrzymywanie za"},
+ {"Family", "Rodzina"},
+ {"Tunnel creation success rate", "Wskaźnik sukcesu tworzenia tunelu"},
+ {"Total tunnel creation success rate", "Całkowity wskaźnik sukcesu tworzenia tunelu"},
+ {"Received", "Odebrano"},
+ {"%.2f KiB/s", "%.2f KiB/s"},
{"Sent", "Wysłane"},
+ {"Transit", "Tranzyt"},
+ {"Data path", "Ścieżka do danych"},
+ {"Hidden content. Press on text to see.", "Ukryta zawartość. Naciśnij tekst, aby zobaczyć."},
+ {"Router Ident", "Identyfikator routera"},
+ {"Router Family", "Rodzina routera"},
+ {"Router Caps", "Możliwości routera"},
+ {"Version", "Wersja"},
+ {"Our external address", "Nasz zewnętrzny adres"},
+ {"supported", "wspierane"},
+ {"Routers", "Routery"},
+ {"Floodfills", "Floodfille"},
+ {"Client Tunnels", "Tunele Klienta"},
+ {"Services", "Usługi"},
+ {"Enabled", "Aktywny"},
+ {"Disabled", "Wyłączony"},
+ {"Encrypted B33 address", "Zaszyfrowany adres B33"},
+ {"Address registration line", "Linia rejestracji adresu"},
+ {"Domain", "Domena"},
+ {"Generate", "Generuj"},
+ {"Note: result string can be used only for registering 2LD domains (example.i2p). For registering subdomains please use i2pd-tools.", "Uwaga: wynik string może być używany tylko do rejestracji domen 2LD (przykład.i2p). Do rejestracji subdomen należy użyć narzędzi i2pd."},
+ {"Address", "Adres"},
+ {"Type", "Typ"},
+ {"EncType", "TypEnkrypcji"},
+ {"Expire LeaseSet", "Wygaśnij LeaseSet"},
+ {"Inbound tunnels", "Tunele przychodzące"},
+ {"%dms", "%dms"},
+ {"Outbound tunnels", "Tunele wychodzące"},
+ {"Tags", "Tagi"},
+ {"Incoming", "Przychodzące"},
+ {"Outgoing", "Wychodzące"},
+ {"Destination", "Miejsce docelowe"},
+ {"Amount", "Ilość"},
+ {"Incoming Tags", "Przychodzące tagi"},
+ {"Tags sessions", "Sesje tagów"},
+ {"Status", "Status"},
+ {"Local Destination", "Lokalne miejsce docelowe"},
+ {"Streams", "Strumienie"},
+ {"Close stream", "Zamknij strumień"},
+ {"Such destination is not found", "Nie znaleziono takiego miejsca docelowego"},
+ {"I2CP session not found", "Sesja I2CP nie została znaleziona"},
+ {"I2CP is not enabled", "I2CP nie jest włączone"},
+ {"Invalid", "Niepoprawny"},
+ {"Store type", "Rodzaj przechowywania"},
+ {"Expires", "Wygasa za"},
+ {"Non Expired Leases", "Leasingi niewygasłe"},
+ {"Gateway", "Brama"},
+ {"TunnelID", "IDTunelu"},
+ {"EndDate", "DataZakończenia"},
+ {"floodfill mode is disabled", "tryb floodfill jest wyłączony"},
+ {"Queue size", "Wielkość kolejki"},
+ {"Run peer test", "Wykonaj test peer"},
+ {"Reload tunnels configuration", "Załaduj ponownie konfigurację tuneli"},
+ {"Decline transit tunnels", "Odrzuć tunele tranzytowe"},
+ {"Accept transit tunnels", "Akceptuj tunele tranzytowe"},
+ {"Cancel graceful shutdown", "Anuluj łagodne wyłączenie"},
+ {"Start graceful shutdown", "Rozpocznij łagodne wyłączenie"},
+ {"Force shutdown", "Wymuś wyłączenie"},
+ {"Reload external CSS styles", "Odśwież zewnętrzne style CSS"},
+ {"Note: any action done here are not persistent and not changes your config files.", "Uwaga: każda akcja wykonana tutaj nie jest trwała i nie zmienia Twoich plików konfiguracyjnych."},
+ {"Logging level", "Poziom logowania"},
+ {"Transit tunnels limit", "Limit tuneli tranzytowych"},
+ {"Change", "Zmień"},
+ {"Change language", "Zmień język"},
+ {"no transit tunnels currently built", "brak obecnie zbudowanych tuneli tranzytowych"},
+ {"SAM disabled", "SAM wyłączony"},
+ {"no sessions currently running", "brak aktualnie uruchomionych sesji"},
+ {"SAM session not found", "Sesja SAM nie została znaleziona"},
+ {"SAM Session", "Sesja SAM"},
+ {"Server Tunnels", "Tunele Serwera"},
+ {"Client Forwards", "Przekierowania Klienta"},
+ {"Server Forwards", "Przekierowania Serwera"},
+ {"Unknown page", "Nieznana strona"},
+ {"Invalid token", "Nieprawidłowy token"},
+ {"SUCCESS", "SUKCES"},
+ {"Stream closed", "Strumień zamknięty"},
+ {"Stream not found or already was closed", "Strumień nie został znaleziony lub został już zamknięty"},
+ {"Destination not found", "Nie znaleziono punktu docelowego"},
+ {"StreamID can't be null", "StreamID nie może być null"},
+ {"Return to destination page", "Wróć do strony miejsca docelowego"},
+ {"You will be redirected in %d seconds", "Zostaniesz prekierowany za %d sekund"},
+ {"LeaseSet expiration time updated", "Zaktualizowano czas wygaśnięcia LeaseSet"},
+ {"LeaseSet is not found or already expired", "LeaseSet nie został znaleziony lub już wygasł"},
+ {"Transit tunnels count must not exceed %d", "Liczba tuneli tranzytowych nie może przekraczać %d"},
+ {"Back to commands list", "Powrót do listy poleceń"},
+ {"Register at reg.i2p", "Zarejestruj się na reg.i2p"},
+ {"Description", "Opis"},
+ {"A bit information about service on domain", "Trochę informacji o usłudze w domenie"},
+ {"Submit", "Zatwierdź"},
+ {"Domain can't end with .b32.i2p", "Domena nie może kończyć się na .b32.i2p"},
+ {"Domain must end with .i2p", "Domena musi kończyć się na .i2p"},
+ {"Unknown command", "Nieznana komenda"},
+ {"Command accepted", "Polecenie zaakceptowane"},
+ {"Proxy error", "Błąd serwera proxy"},
+ {"Proxy info", "Informacje o proxy"},
+ {"Proxy error: Host not found", "Błąd proxy: Nie znaleziono hosta"},
+ {"Remote host not found in router's addressbook", "Nie znaleziono zdalnego hosta w książce adresowej routera"},
+ {"You may try to find this host on jump services below", "Możesz znaleźć tego hosta na poniższych usługach skoku"},
+ {"Invalid request", "Nieprawidłowe żądanie"},
+ {"Proxy unable to parse your request", "Serwer proxy nie może przetworzyć Twojego żądania"},
+ {"Addresshelper is not supported", "Adresshelper nie jest obsługiwany"},
+ {"Host %s is already in router's addressbook. Be careful: source of this URL may be harmful! Click here to update record: Continue.", "Host %s jest już w książce adresowej routera. Uważaj: źródło tego adresu URL może być szkodliwe! Kliknij tutaj, aby zaktualizować rekord: Kontynuuj."},
+ {"Addresshelper forced update rejected", "Wymuszona aktualizacja Addreshelper odrzucona"},
+ {"To add host %s in router's addressbook, click here: Continue.", "Aby dodać host %s w książce adresowej routera, kliknij tutaj: Kontynuuj."},
+ {"Addresshelper request", "Prośba Addresshelper"},
+ {"Host %s added to router's addressbook from helper. Click here to proceed: Continue.", "Host %s dodany do książki adresowej routera od pomocnika. Kliknij tutaj, aby kontynuować: Kontynuuj."},
+ {"Addresshelper adding", "Dodawanie Addresshelper"},
+ {"Host %s is already in router's addressbook. Click here to update record: Continue.", "Host %s jest już w książce adresowej routera. Kliknij tutaj, aby zaktualizować rekord: Kontynuuj."},
+ {"Addresshelper update", "Aktualizacja Adresshelper"},
+ {"Invalid request URI", "Nieprawidłowe URI żądania"},
+ {"Can't detect destination host from request", "Nie można wykryć hosta docelowego z żądania"},
+ {"Outproxy failure", "Błąd proxy wyjściowego"},
+ {"Bad outproxy settings", "Błędne ustawienia proxy wyjściowych"},
+ {"Host %s is not inside I2P network, but outproxy is not enabled", "Host %s nie jest wewnątrz sieci I2P, a proxy wyjściowe nie jest włączone"},
+ {"Unknown outproxy URL", "Nieznany adres URL proxy wyjściowego"},
+ {"Cannot resolve upstream proxy", "Nie można rozwiązać serwera proxy upstream"},
+ {"Hostname is too long", "Nazwa hosta jest zbyt długa"},
+ {"Cannot connect to upstream SOCKS proxy", "Nie można połączyć się z proxy SOCKS upstream"},
+ {"Cannot negotiate with SOCKS proxy", "Nie można negocjować z proxy SOCKS"},
+ {"CONNECT error", "Błąd POŁĄCZENIE"},
+ {"Failed to connect", "Nie udało się połączyć"},
+ {"SOCKS proxy error", "Błąd proxy SOCKS"},
+ {"Failed to send request to upstream", "Nie udało się wysłać żądania do upstream"},
+ {"No reply from SOCKS proxy", "Brak odpowiedzi od serwera proxy SOCKS"},
+ {"Cannot connect", "Nie można się połączyć"},
+ {"HTTP out proxy not implemented", "Serwer wyjściowy proxy HTTP nie został zaimplementowany"},
+ {"Cannot connect to upstream HTTP proxy", "Nie można połączyć się z proxy HTTP upstream"},
+ {"Host is down", "Host jest niedostępny"},
+ {"Can't create connection to requested host, it may be down. Please try again later.", "Nie można utworzyć połączenia z żądanym hostem, może być wyłączony. Spróbuj ponownie później."},
{"", ""},
};
static std::map> plurals
{
- {"", {"", "", ""}},
+ {"%d days", {"%d dzień", "%d dni", "%d dni", "%d dni"}},
+ {"%d hours", {"%d godzina", "%d godziny", "%d godzin", "%d godzin"}},
+ {"%d minutes", {"%d minuta", "%d minuty", "%d minut", "%d minut"}},
+ {"%d seconds", {"%d sekunda", "%d sekundy", "%d sekund", "%d sekund"}},
+ {"", {"", "", "", ""}},
};
std::shared_ptr GetLocale()
diff --git a/i18n/Portuguese.cpp b/i18n/Portuguese.cpp
index 4c6d749f..0c490ba3 100644
--- a/i18n/Portuguese.cpp
+++ b/i18n/Portuguese.cpp
@@ -1,5 +1,5 @@
/*
-* Copyright (c) 2023, The PurpleI2P Project
+* Copyright (c) 2023-2024, The PurpleI2P Project
*
* This file is part of Purple i2pd project and licensed under BSD3
*
@@ -58,7 +58,7 @@ namespace portuguese // language namespace
{"Unknown", "Desconhecido"},
{"Proxy", "Proxy"},
{"Mesh", "Malha"},
- {"Clock skew", "Defasagem do Relógio"},
+ {"Clock skew", "Desvio de Relógio"},
{"Offline", "Desligado"},
{"Symmetric NAT", "NAT Simétrico"},
{"Full cone NAT", "Full cone NAT"},
@@ -74,7 +74,7 @@ namespace portuguese // language namespace
{"%.2f KiB/s", "%.2f KiB/s"},
{"Sent", "Enviado"},
{"Transit", "Trânsito"},
- {"Data path", "Diretório dos dados"},
+ {"Data path", "Diretório de dados"},
{"Hidden content. Press on text to see.", "Conteúdo oculto. Clique no texto para revelar."},
{"Router Ident", "Identidade do Roteador"},
{"Router Family", "Família do Roteador"},
@@ -106,9 +106,9 @@ namespace portuguese // language namespace
{"Destination", "Destinos"},
{"Amount", "Quantidade"},
{"Incoming Tags", "Etiquetas de Entrada"},
- {"Tags sessions", "Sessões de etiquetas"},
+ {"Tags sessions", "Sessões de Etiquetas"},
{"Status", "Estado"},
- {"Local Destination", "Destinos Locais"},
+ {"Local Destination", "Destino Local"},
{"Streams", "Fluxos"},
{"Close stream", "Fechar fluxo"},
{"Such destination is not found", "Tal destino não foi encontrado"},
@@ -148,7 +148,7 @@ namespace portuguese // language namespace
{"Invalid token", "Token Inválido"},
{"SUCCESS", "SUCESSO"},
{"Stream closed", "Fluxo fechado"},
- {"Stream not found or already was closed", "Fluxo não encontrado ou já encerrado"},
+ {"Stream not found or already was closed", "Fluxo não encontrado ou já fechado"},
{"Destination not found", "Destino não encontrado"},
{"StreamID can't be null", "StreamID não pode ser nulo"},
{"Return to destination page", "Retornar para à página de destino"},
@@ -157,7 +157,7 @@ namespace portuguese // language namespace
{"LeaseSet is not found or already expired", "LeaseSet não foi encontrado ou já expirou"},
{"Transit tunnels count must not exceed %d", "A contagem de túneis de trânsito não deve exceder %d"},
{"Back to commands list", "Voltar para a lista de comandos"},
- {"Register at reg.i2p", "Registrar na reg.i2p"},
+ {"Register at reg.i2p", "Registrar em reg.i2p"},
{"Description", "Descrição"},
{"A bit information about service on domain", "Algumas informações sobre o serviço no domínio"},
{"Submit", "Enviar"},
@@ -169,22 +169,22 @@ namespace portuguese // language namespace
{"Proxy info", "Informações do proxy"},
{"Proxy error: Host not found", "Erro no proxy: Host não encontrado"},
{"Remote host not found in router's addressbook", "O host remoto não foi encontrado no livro de endereços do roteador"},
- {"You may try to find this host on jump services below", "Você pode tentar encontrar este host nos jump services abaixo"},
+ {"You may try to find this host on jump services below", "Você pode tentar encontrar este host nos serviços de jump abaixo"},
{"Invalid request", "Requisição inválida"},
{"Proxy unable to parse your request", "O proxy foi incapaz de processar a sua requisição"},
{"Addresshelper is not supported", "O Auxiliar de Endereços não é suportado"},
{"Host %s is already in router's addressbook. Be careful: source of this URL may be harmful! Click here to update record: Continue.", "O host %s já está no catálogo de endereços do roteador. Cuidado: a fonte desta URL pode ser perigosa! Clique aqui para atualizar o registro: Continuar."},
{"Addresshelper forced update rejected", "A atualização forçada do Auxiliar de Endereços foi rejeitada"},
{"To add host %s in router's addressbook, click here: Continue.", "Para adicionar o host %s ao catálogo de endereços do roteador, clique aqui: Continuar ."},
- {"Addresshelper request", "Requisição do Auxiliar de Endereços"},
- {"Host %s added to router's addressbook from helper. Click here to proceed: Continue.", "O host %s foi adicionado ao catálogo de endereços do roteador por um auxiliar. Clique aqui para proceder: Continuar ."},
+ {"Addresshelper request", "Requisição ao Auxiliar de Endereços"},
+ {"Host %s added to router's addressbook from helper. Click here to proceed: Continue.", "O host %s foi adicionado ao catálogo de endereços do roteador por um auxiliar. Clique aqui para prosseguir: Continuar ."},
{"Addresshelper adding", "Auxiliar de Endereço adicionando"},
{"Host %s is already in router's addressbook. Click here to update record: Continue.", "O host %s já está no catálogo de endereços do roteador . Clique aqui para atualizar o registro: Continuar."},
{"Addresshelper update", "Atualização do Auxiliar de Endereços"},
{"Invalid request URI", "A URI de requisição é inválida"},
{"Can't detect destination host from request", "Incapaz de detectar o host de destino da requisição"},
{"Outproxy failure", "Falha no outproxy"},
- {"Bad outproxy settings", "Configurações ruins de outproxy"},
+ {"Bad outproxy settings", "Má configurações do outproxy"},
{"Host %s is not inside I2P network, but outproxy is not enabled", "O host %s não está dentro da rede I2P, mas o outproxy não está ativado"},
{"Unknown outproxy URL", "URL de outproxy desconhecida"},
{"Cannot resolve upstream proxy", "Não é possível resolver o proxy de entrada"},