\r\n";
for (auto& it: serverForwards)
{
auto& ident = it.second->GetLocalDestination ()->GetIdentHash();
@@ -1084,7 +1098,7 @@ namespace http {
return;
}
}
- // Html5 head start
+ // HTML head start
ShowPageHead (s);
if (req.uri.find("page=") != std::string::npos) {
HandlePage (req, res, s);
@@ -1158,7 +1172,7 @@ namespace http {
ShowLeasesSets(s);
else {
res.code = 400;
- ShowError(s, "Unknown page: " + page);
+ ShowError(s, tr("Unknown page") + ": " + page);
return;
}
}
@@ -1177,7 +1191,7 @@ namespace http {
if (token.empty () || m_Tokens.find (std::stoi (token)) == m_Tokens.end ())
{
- ShowError(s, "Invalid token");
+ ShowError(s, tr("Invalid token"));
return;
}
@@ -1235,18 +1249,18 @@ namespace http {
if (dest)
{
if(dest->DeleteStream (streamID))
- s << "
SUCCESS: Stream closed
\r\n
\r\n";
+ s << "
" << tr("SUCCESS") << ": " << tr("Stream closed") << "
\r\n
\r\n";
else
- s << "
ERROR: Stream not found or already was closed
\r\n
\r\n";
+ s << "
" << tr("ERROR") << ": " << tr("Stream not found or already was closed") << "
\r\n
\r\n";
}
else
- s << "
ERROR: Destination not found
\r\n
\r\n";
+ s << "
" << tr("ERROR") << ": " << tr("Destination not found") << "
\r\n
\r\n";
}
else
- s << "
ERROR: StreamID can be null
\r\n
\r\n";
+ s << "
" << tr("ERROR") << ": " << tr("StreamID can't be null") << "
\r\n
\r\n";
- s << "
Return to destination page\r\n";
- s << "
You will be redirected back in 5 seconds";
+ s << "" << tr("Return to destination page") << "
\r\n";
+ s << "
" << tr("You will be redirected back in 5 seconds") << "";
redirect = "5; url=" + webroot + "?page=local_destination&b32=" + b32;
res.add_header("Refresh", redirect.c_str());
return;
@@ -1257,9 +1271,9 @@ namespace http {
if (limit > 0 && limit <= 65535)
SetMaxNumTransitTunnels (limit);
else {
- s << "ERROR: Transit tunnels count must not exceed 65535\r\n
\r\n
\r\n";
- s << "Back to commands list\r\n
\r\n";
- s << "
You will be redirected back in 5 seconds";
+ s << "" << tr("ERROR") << ": " << tr("Transit tunnels count must not exceed 65535") << "\r\n
\r\n
\r\n";
+ s << "" << tr("Back to commands list") << "\r\n
\r\n";
+ s << "
" << tr("You will be redirected back in 5 seconds") << "";
res.add_header("Refresh", redirect.c_str());
return;
}
@@ -1292,37 +1306,37 @@ namespace http {
auto len = i2p::data::ByteStreamToBase64 (signature, signatureLen, sig, signatureLen*2);
sig[len] = 0;
out << "#!sig=" << sig;
- s << "SUCCESS:
\r\n
\r\n
\r\n";
delete[] signature;
delete[] sig;
}
else
- s << "
ERROR: Domain can't end with .b32.i2p\r\n
\r\n
\r\n";
+ s << "
" << tr("ERROR") << ": " << tr("Domain can't end with .b32.i2p") << "\r\n
\r\n
\r\n";
}
else
- s << "
ERROR: Domain must end with .i2p\r\n
\r\n
\r\n";
+ s << "
" << tr("ERROR") << ": " << tr("Domain must end with .i2p") << "\r\n
\r\n
\r\n";
}
else
- s << "
ERROR: Such destination is not found\r\n
\r\n
\r\n";
+ s << "
" << tr("ERROR") << ": " << tr("Such destination is not found") << "\r\n
\r\n
\r\n";
- s << "
Return to destination page\r\n";
+ s << "
" << tr("Return to destination page") << "\r\n";
return;
}
else
{
res.code = 400;
- ShowError(s, "Unknown command: " + cmd);
+ ShowError(s, tr("Unknown command") + ": " + cmd);
return;
}
- s << "
SUCCESS: Command accepted
\r\n";
- s << "
Back to commands list\r\n";
- s << "
You will be redirected in 5 seconds";
+ s << "" << tr("SUCCESS") << ": " << tr("Command accepted") << "
\r\n";
+ s << "" << tr("Back to commands list") << "
\r\n";
+ s << "
" << tr("You will be redirected in 5 seconds") << "";
res.add_header("Refresh", redirect.c_str());
}
diff --git a/i18n/russian.cpp b/i18n/russian.cpp
index feb6fc63..71f27613 100644
--- a/i18n/russian.cpp
+++ b/i18n/russian.cpp
@@ -52,16 +52,170 @@ namespace russian { // language
{"http out proxy not implemented", "поддержка внешнего HTTP прокси сервера не реализована"},
{"cannot connect to upstream http proxy", "не удалось подключиться к вышестоящему HTTP прокси серверу"},
{"Host is down", "Адрес недоступен"},
- {"Can't create connection to requested host, it may be down. Please try again later.", "Не удалось установить соединение к запрошенному адресу, возможно он не в сети. Попробуйте повторить запрос позже."},
+ {"Can't create connection to requested host, it may be down. Please try again later.",
+ "Не удалось установить соединение к запрошенному адресу, возможно он не в сети. Попробуйте повторить запрос позже."},
+
+ // Webconsole //
+ // cssStyles
+ {"Disabled", "Выключено"},
+ {"Enabled", "Включено"},
+ // ShowTraffic
+ {"KiB", "КиБ"},
+ {"MiB", "МиБ"},
+ {"GiB", "ГиБ"},
+ // ShowTunnelDetails
+ {"building", "строится"},
+ {"failed", "неудачный"},
+ {"expiring", "заканчивается"},
+ {"established", "работает"},
+ {"exploratory", "исследовательский"},
+ {"unknown", "неизвестно"},
+ {"i2pd webconsole", "Веб-консоль i2pd"},
+ // ShowPageHead
+ {"Main page", "Главная"},
+ {"Router commands", "Команды роутера"},
+ {"Local destinations", "Локальные назнач."},
+ {"LeaseSets", "Лизсеты"},
+ {"Tunnels", "Туннели"},
+ {"Transit tunnels", "Транзит. туннели"},
+ {"Transports", "Транспорты"},
+ {"I2P tunnels", "I2P туннели"},
+ {"SAM sessions", "SAM сессии"},
+ // Network Status
+ {"OK", "OK"},
+ {"Testing", "Тестирование"},
+ {"Firewalled", "Файрвол"},
+ {"Unknown", "Неизвестно"},
+ {"Proxy", "Прокси"},
+ {"Mesh", "MESH-сеть"},
+ {"Error", "Ошибка"},
+ {"Clock skew", "Не точное время"},
+ {"Offline", "Оффлайн"},
+ {"Symmetric NAT", "Симметричный NAT"},
+ // Status
+ {"Uptime", "В сети"},
+ {"Network status", "Сетевой статус"},
+ {"Network status v6", "Сетевой статус v6"},
+ {"Stopping in", "Остановка через"},
+ {"Family", "Семейство"},
+ {"Tunnel creation success rate", "Успешно построенных туннелей"},
+ {"Received", "Получено"},
+ {"Sent", "Отправлено"},
+ {"Transit", "Транзит"},
+ {"KiB/s", "КиБ/с"},
+ {"Data path", "Путь к данным"},
+ {"Hidden content. Press on text to see.", "Скрытый контент. Нажмите на текст чтобы отобразить."},
+ {"Router Ident", "Идентификатор роутера"},
+ {"Router Family", "Семейство роутера"},
+ {"Router Caps", "Флаги роутера"},
+ {"Version", "Версия"},
+ {"Our external address", "Наш внешний адрес"},
+ {"supported", "поддерживается"},
+ {"Routers", "Роутеры"},
+ {"Floodfills", "Флудфилы"},
+ {"LeaseSets", "Лизсеты"},
+ {"Client Tunnels", "Клиентские туннели"},
+ {"Transit Tunnels", "Транзитные туннели"},
+ {"Services", "Сервисы"},
+ // ShowLocalDestinations
+ {"Local Destinations", "Локальные назначения"},
+ // ShowLeaseSetDestination
+ {"Encrypted B33 address", "Шифрованные B33 адреса"},
+ {"Address registration line", "Строка регистрации адреса"},
+ {"Domain", "Домен"},
+ {"Generate", "Сгенерировать"},
+ {"Address", "Адрес"},
+ {"Type", "Тип"},
+ {"EncType", "ТипШифр"},
+ {"Inbound tunnels", "Входящие туннели"},
+ {"Outbound tunnels", "Исходящие туннели"},
+ {"ms", "мс"}, // milliseconds
+ {"Tags", "Теги"},
+ {"Incoming", "Входящие"},
+ {"Outgoing", "Исходящие"},
+ {"Destination", "Назначение"},
+ {"Amount", "Количество"},
+ {"Incoming Tags", "Входящие Теги"},
+ {"Tags sessions", "Сессии Тегов"},
+ {"Status", "Статус"},
+ // ShowLocalDestination
+ {"Local Destination", "Локальное назначение"},
+ {"Streams", "Стримы"},
+ {"Close stream", "Закрыть стрим"},
+ // ShowI2CPLocalDestination
+ {"I2CP session not found", "I2CP сессия не найдена"},
+ {"I2CP is not enabled", "I2CP не включен"},
+ // ShowLeasesSets
+ {"Invalid", "Некорректный"},
+ {"Store type", "Тип хранилища"},
+ {"Expires", "Истекает"},
+ {"Non Expired Leases", "Не истекшие Lease-ы"},
+ {"Gateway", "Шлюз"},
+ {"TunnelID", "ID туннеля"},
+ {"EndDate", "Заканчивается"},
+ {"not floodfill", "не флудфил"},
+ // ShowTunnels
+ {"Queue size", "Размер очереди"},
+ // ShowCommands
+ {"Run peer test", "Запустить тестирование"},
+ {"Decline transit tunnels", "Отклонять транзитные туннели"},
+ {"Accept transit tunnels", "Принимать транзитные туннели"},
+ {"Cancel graceful shutdown", "Отменить плавную остановку"},
+ {"Start graceful shutdown", "Запустить плавную остановку"},
+ {"Force shutdown", "Принудительная остановка"},
+ {"Note: any action done here are not persistent and not changes your config files.",
+ "Примечание: любое действие произведенное здесь не является постоянным и не изменяет ваши конфигурационные файлы."},
+ {"Logging level", "Уровень логирования"},
+ {"Transit tunnels limit", "Лимит транзитных туннелей"},
+ {"Change", "Изменить"},
+ // ShowTransitTunnels
+ {"no transit tunnels currently built", "нет построенных транзитных туннелей"},
+ // ShowSAMSessions/ShowSAMSession
+ {"SAM disabled", "SAM выключен"},
+ {"SAM session not found", "SAM сессия не найдена"},
+ {"no sessions currently running", "нет запущенных сессий"},
+ {"SAM Session", "SAM сессия"},
+ // ShowI2PTunnels
+ {"Server Tunnels", "Серверные туннели"},
+ {"Client Forwards", "Клиентские переадресации"},
+ {"Server Forwards", "Серверные переадресации"},
+ // HandlePage
+ {"Unknown page", "Неизвестная страница"},
+ // HandleCommand, ShowError
+ {"Invalid token", "Неверный токен"},
+ {"SUCCESS", "УСПЕШНО"},
+ {"ERROR", "ОШИБКА"},
+ {"Unknown command", "Неизвестная команда"},
+ {"Command accepted", "Команда принята"},
+ {"Back to commands list", "Вернуться к списку команд"},
+ {"You will be redirected in 5 seconds", "Вы будете переадресованы через 5 секунд"},
+ // HTTP_COMMAND_KILLSTREAM
+ {"Stream closed", "Стрим закрыт"},
+ {"Stream not found or already was closed", "Стрим не найден или уже закрыт"},
+ {"Destination not found", "Точка назначения не найдена"},
+ {"StreamID can't be null", "StreamID не может быть пустым"},
+ {"Return to destination page", "Вернуться на страницу точки назначения"},
+ {"You will be redirected back in 5 seconds", "Вы будете переадресованы назад через 5 секунд"},
+ // HTTP_COMMAND_LIMITTRANSIT
+ {"Transit tunnels count must not exceed 65535", "Число транзитных туннелей не должно превышать 65535"},
+ // HTTP_COMMAND_GET_REG_STRING
+ {"Register at reg.i2p", "Зарегистрировать на reg.i2p"},
+ {"Description", "Описание"},
+ {"A bit information about service on domain", "Немного информации о сервисе на домене"},
+ {"Submit", "Отправить"},
+ {"Domain can't end with .b32.i2p", "Домен не может заканчиваться на .b32.i2p"},
+ {"Domain must end with .i2p", "Домен должен заканчиваться на .i2p"},
+ {"Such destination is not found", "Такая точка назначения не найдена"},
{"", ""},
};
static std::map> plurals
{
+ // ShowUptime
{"days", {"день", "дня", "дней"}},
{"hours", {"час", "часа", "часов"}},
- {"minutes", {"минута", "минуты", "минут"}},
- {"seconds", {"секунда", "секунды", "секунд"}},
+ {"minutes", {"минуту", "минуты", "минут"}},
+ {"seconds", {"секунду", "секунды", "секунд"}},
{"", {"", ""}},
};