notepad.cpp 30 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649650651652653654655656657658659660661662663664665666667668669670671672673674675676677678679680681682683684685686687688689690691692693694695696697698699700701702703704705706707708709710711712713714715716717718719720721722723724725726727728729730731732733734735736737738739740741742743744745746747748749750751752753754755756757758759760761762763764765766767768769770771772773774775776777778779780781782783784785786787788789790791792793794795796797798799800801802803804805806807808809810811812813814815816817818819820821822823824825826827828829830831832833834835836837838839840841842843844845846847848849850851852853854855856857858859860861862863864865866867868869870871872873874875876877878879880881882883884885886887888889890891892893894895896897898899900901902903904905906907908909910911912913914915916917918919920921922923924925926927928929930931932933934935936937938939940941942943944945946947948949950951952953954955956957958959960961
  1. #include "notepad.h"
  2. const std::u8string Notepad::ConfigComment::type(Lang lang, TunnelType type)
  3. {
  4. switch (lang)
  5. {
  6. case Lang::ru: {
  7. static const std::u8string ru {u8"# Тип туннеля:\n"};
  8. return ru + tunnelTypeDescription(lang, type);
  9. }
  10. default: {
  11. static const std::u8string en {u8"# Tunnel type. You have selected\n"};
  12. return en + tunnelTypeDescription(lang, type);
  13. }
  14. }
  15. }
  16. const char8_t *Notepad::ConfigComment::clientAddress(Lang lang)
  17. {
  18. switch (lang)
  19. {
  20. case Lang::ru: {
  21. static const char8_t* ru {u8"# Локальный адрес, на котором будет доступен туннель\n"
  22. "# Например, 127.0.0.1\n"};
  23. return ru;
  24. }
  25. default: {
  26. static const char8_t* en {u8"# Local address where the tunnel will be accessed\n"
  27. "# For example, 127.0.0.1\n"};
  28. return en;
  29. }
  30. }
  31. }
  32. const char8_t *Notepad::ConfigComment::clientPort(Lang lang)
  33. {
  34. switch (lang)
  35. {
  36. case Lang::ru: {
  37. static const char8_t* ru {u8"# Локальный порт, на котором будет доступен туннель\n"
  38. "# Например, 8080\n"};
  39. return ru;
  40. }
  41. default: {
  42. static const char8_t* en {u8"# Local port where the tunnel will be accessed\n"
  43. "# For example, 8080\n"};
  44. return en;
  45. }
  46. }
  47. }
  48. const char8_t *Notepad::ConfigComment::clientDestination(Lang lang)
  49. {
  50. switch (lang)
  51. {
  52. case Lang::ru: {
  53. static const char8_t* ru {u8"# I2P-адрес сервера (*.b32.i2p)\n"};
  54. return ru;
  55. }
  56. default: {
  57. static const char8_t* en {u8"# I2P server address (*.b32.i2p)\n"};
  58. return en;
  59. }
  60. }
  61. }
  62. const char8_t *Notepad::ConfigComment::clientDestinationPort(Lang lang)
  63. {
  64. switch (lang)
  65. {
  66. case Lang::ru: {
  67. static const char8_t* ru {u8"# Порт сервера в сети I2P\n"
  68. "# Можно не указывать, если по адресу доступен только один сервис\n"};
  69. return ru;
  70. }
  71. default: {
  72. static const char8_t* en {u8"# Server port on the I2P network\n"
  73. "# Can be omitted if only one service is available at the address\n"};
  74. return en;
  75. }
  76. }
  77. }
  78. const char8_t *Notepad::ConfigComment::clientKeepAlive(Lang lang)
  79. {
  80. switch (lang)
  81. {
  82. case Lang::ru: {
  83. static const char8_t* ru {u8"# Интервал между отправками пингов на сервер для поддержания соединения\n"
  84. "# Для отключения используется значение 0 (значение по умолчанию)\n"};
  85. return ru;
  86. }
  87. default: {
  88. static const char8_t* en {u8"# Interval between sending pings to the server to maintain connection\n"
  89. "# To disable, the value 0 is used (default)\n"};
  90. return en;
  91. }
  92. }
  93. }
  94. const char8_t *Notepad::ConfigComment::serverAddress(Lang lang)
  95. {
  96. switch (lang)
  97. {
  98. case Lang::ru: {
  99. static const char8_t* ru {u8"# Адрес локального интерфейса, который будет использован\n"
  100. "# для доступа к сервису (например, 192.168.0.2 или 127.0.0.1)\n"};
  101. return ru;
  102. }
  103. default: {
  104. static const char8_t* en {u8"# The address of the local interface to be used\n"
  105. "# to access the service (for example, 192.168.0.2 or 127.0.0.1)\n"};
  106. return en;
  107. }
  108. }
  109. }
  110. const char8_t *Notepad::ConfigComment::serverHost(Lang lang)
  111. {
  112. switch (lang)
  113. {
  114. case Lang::ru: {
  115. static const char8_t* ru {u8"# Адрес сервиса, который будет доступен в сети I2P\n"
  116. "# Например, 192.168.0.3 или 127.0.0.1\n"};
  117. return ru;
  118. }
  119. default: {
  120. static const char8_t* en {u8"# The address of the service that will be available on the I2P\n"
  121. "# For example, 192.168.0.3 or 127.0.0.1\n"};
  122. return en;
  123. }
  124. }
  125. }
  126. const char8_t *Notepad::ConfigComment::serverPort(Lang lang)
  127. {
  128. switch (lang)
  129. {
  130. case Lang::ru: {
  131. static const char8_t* ru {u8"# Порт сервиса, по которому он доступен в обычной сети\n"};
  132. return ru;
  133. }
  134. default: {
  135. static const char8_t* en {u8"# The service port on which it is accessible on the regular network\n"};
  136. return en;
  137. }
  138. }
  139. }
  140. const char8_t *Notepad::ConfigComment::serverInport(Lang lang)
  141. {
  142. switch (lang)
  143. {
  144. case Lang::ru: {
  145. static const char8_t* ru {u8"# Порт, по которому сервис будет доступен в сети I2P\n"};
  146. return ru;
  147. }
  148. default: {
  149. static const char8_t* en {u8"# The port on which the service will be available on the I2P\n"};
  150. return en;
  151. }
  152. }
  153. }
  154. const char8_t *Notepad::ConfigComment::serverBlinded(Lang lang)
  155. {
  156. switch (lang)
  157. {
  158. case Lang::ru: {
  159. static const char8_t* ru {u8"# Параметры для зашифрованного лизсета (b33 aka bb32).\n"
  160. "# Используется для дополнительной приватности сервера,"
  161. "# делая невозможным пассивное обнаружение сервиса через мониторинг флудфилов\n"
  162. "# Подробнее: https://habr.com/ru/articles/555604/\n"};
  163. return ru;
  164. }
  165. default: {
  166. static const char8_t* en {u8"# Parameters for encrypted leaseset (b33 aka bb32).\n"
  167. "# Used for additional server privacy,\n"
  168. "# making it impossible to passively detect the service through monitoring floodfilles\n"
  169. "# Read more (russian): https://habr.com/ru/articles/555604/\n"};
  170. return en;
  171. }
  172. }
  173. }
  174. const char8_t *Notepad::ConfigComment::inbound(Lang lang)
  175. {
  176. switch (lang)
  177. {
  178. case Lang::ru: {
  179. static const char8_t* ru {u8"# Это конфиг туннеля, который является логической сущностью, обеспечивающей\n"
  180. "# соединение через сеть I2P. Фактически туннель состоит из нескольких туннелей,\n"
  181. "# которые называются нитями.\n"
  182. "# Параметры входящих нитей:\n"};
  183. return ru;
  184. }
  185. default: {
  186. static const char8_t* en {u8"# This is a tunnel config, which is a logical term that enables communication.\n"
  187. "# In fact, a tunnel consists of several tunnels, which are called strands.\n"
  188. "# Parameters of inbound strands:\n"};
  189. return en;
  190. }
  191. }
  192. }
  193. const char8_t *Notepad::ConfigComment::outbound(Lang lang)
  194. {
  195. switch (lang)
  196. {
  197. case Lang::ru: {
  198. static const char8_t* ru {u8"# Параметры исходящих нитей:\n"};
  199. return ru;
  200. }
  201. default: {
  202. static const char8_t* en {u8"# Parameters of outbound strands:\n"};
  203. return en;
  204. }
  205. }
  206. }
  207. const char8_t *Notepad::ConfigComment::length(Lang lang)
  208. {
  209. switch (lang)
  210. {
  211. case Lang::ru: {
  212. static const char8_t* ru {u8"# - Количество транзитных узлов (длина)\n"};
  213. return ru;
  214. }
  215. default: {
  216. static const char8_t* en {u8"# - Number of transit nodes (length)\n"};
  217. return en;
  218. }
  219. }
  220. }
  221. const char8_t *Notepad::ConfigComment::quantity(Lang lang)
  222. {
  223. switch (lang)
  224. {
  225. case Lang::ru: {
  226. static const char8_t* ru {u8"# - Количество нитей\n"};
  227. return ru;
  228. }
  229. default: {
  230. static const char8_t* en {u8"# - Strands count\n"};
  231. return en;
  232. }
  233. }
  234. }
  235. const char8_t *Notepad::ConfigComment::variance(Lang lang)
  236. {
  237. switch (lang)
  238. {
  239. case Lang::ru: {
  240. static const char8_t* ru {u8"# - Число, на которое будет меняться длина случайных нитей (от -3 до 3)\n"};
  241. return ru;
  242. }
  243. default: {
  244. static const char8_t* en {u8"# - The number by which the length of random strands will be changed (from -3 to 3)\n"};
  245. return en;
  246. }
  247. }
  248. }
  249. const char8_t *Notepad::ConfigComment::keysTransient(Lang lang)
  250. {
  251. switch (lang)
  252. {
  253. case Lang::ru: {
  254. static const char8_t* ru {u8"# Временные ключи. Адрес туннеля будет меняться после каждого запуска i2pd.\n"
  255. "# Чтобы использовать одинаковый временный адрес на нескольких туннелях,\n"
  256. "# указывайте одинаковое название transient-*\n"};
  257. return ru;
  258. }
  259. default: {
  260. static const char8_t* en {u8"# Temporary keys. The tunnel address will change after each i2pd startup.\n"
  261. "# To use the same temporary address on multiple tunnels,\n"
  262. "# specify the same transient-* name\n"};
  263. return en;
  264. }
  265. }
  266. }
  267. const char8_t *Notepad::ConfigComment::keys(Lang lang)
  268. {
  269. switch (lang)
  270. {
  271. case Lang::ru: {
  272. static const char8_t* ru {u8"# Ключи, обеспечивающие постоянный адрес. Если указанный файл не существует,\n"
  273. "# ключи будут созданы при первом запуске. Ключи хранятся в рабочей директории i2pd\n"};
  274. return ru;
  275. }
  276. default: {
  277. static const char8_t* en {u8"# Keys that provide a permanent address. If the specified file does not exist,\n"
  278. "# keys will be created at the first startup. Keys are stored in the i2pd working directory\n"};
  279. return en;
  280. }
  281. }
  282. }
  283. const char8_t *Notepad::ConfigComment::footer(Lang lang, bool isBlinded)
  284. {
  285. switch (lang)
  286. {
  287. case Lang::ru: {
  288. if (isBlinded)
  289. {
  290. static const char8_t* ru {u8"\n"
  291. "# Для создания туннеля нужно вставить этот текст в начало конфига tunnels.conf,\n"
  292. "# который находится в рабочей директории i2pd. Расположение рабочей директории\n"
  293. "# в системе отображается на главной странице веб-консоли i2pd (http://127.0.0.1:7070).\n"
  294. "# Адрес созданного туннеля можно найти также через веб-консоль\n"
  295. "# по пути I2P Tunnels -> TUNNEL NAME -> Encrypted B33 address.\n"
  296. "# Другие параметры и более подробное описание приведенных параметров смотрите\n"
  297. "# в документации: https://i2pd.readthedocs.io/en/latest/user-guide/tunnels/"};
  298. return ru;
  299. }
  300. else
  301. {
  302. static const char8_t* ru {u8"\n"
  303. "# Для создания туннеля нужно вставить этот текст в начало конфига tunnels.conf,\n"
  304. "# который находится в рабочей директории i2pd. Расположение рабочей директории\n"
  305. "# в системе отображается на главной странице веб-консоли i2pd (http://127.0.0.1:7070).\n"
  306. "# Адрес созданного туннеля можно найти также через веб-консоль, вкладка I2P Tunnels.\n"
  307. "# Другие параметры и более подробное описание приведенных параметров смотрите\n"
  308. "# в документации: https://i2pd.readthedocs.io/en/latest/user-guide/tunnels/"};
  309. return ru;
  310. }
  311. }
  312. default: {
  313. if (isBlinded)
  314. {
  315. static const char8_t* en {u8"\n"
  316. "# To create a tunnel, you need to paste this text into the beginning of the tunnels.conf config,\n"
  317. "# which is located in the i2pd working directory. Location of the working directory\n"
  318. "# in the system is displayed on the main page of the i2pd web console (http://127.0.0.1:7070).\n"
  319. "# The address of the created tunnel can also be found through the web console\n"
  320. "# on the path I2P Tunnels -> TUNNEL NAME -> Encrypted B33 address.\n"
  321. "# For other parameters and more detailed description of the above parameters see\n"
  322. "# in the documentation: https://i2pd.readthedocs.io/en/latest/user-guide/tunnels/"};
  323. return en;
  324. }
  325. else
  326. {
  327. static const char8_t* en {u8"\n"
  328. "# To create a tunnel, you need to paste this text into the beginning of the tunnels.conf config,\n"
  329. "# which is located in the i2pd working directory. Location of the working directory\n"
  330. "# in the system is displayed on the main page of the i2pd web console (http://127.0.0.1:7070).\n"
  331. "# The address of the created tunnel can also be found through the web console, I2P Tunnels tab.\n"
  332. "# For other parameters and more detailed description of the above parameters see\n"
  333. "# in the documentation: https://i2pd.readthedocs.io/en/latest/user-guide/tunnels/"};
  334. return en;
  335. }
  336. }
  337. }
  338. }
  339. std::string Notepad::langToString(Lang lang)
  340. {
  341. return lang == Lang::ru ? "ru" : "en";
  342. }
  343. std::string Notepad::langToCode(Lang lang)
  344. {
  345. switch (lang)
  346. {
  347. case Lang::ru:
  348. return "ru";
  349. default:
  350. return "en";
  351. }
  352. }
  353. Notepad::Lang Notepad::stringToLang(const std::string &string)
  354. {
  355. return string == "ru" ? Lang::ru : Lang::en;
  356. }
  357. const char8_t *Notepad::tunnelTypeDescription(Lang lang, TunnelType type)
  358. {
  359. switch (type)
  360. {
  361. case TunnelType::TcpClient: {
  362. switch (lang)
  363. {
  364. case Lang::ru: {
  365. static const char8_t* ru {u8"# Клиентское подключение по протоколу TCP\n"};
  366. return ru;
  367. }
  368. default: {
  369. static const char8_t* en {u8"# Client connection via TCP protocol\n"};
  370. return en;
  371. }
  372. }
  373. }
  374. case TunnelType::TcpServer: {
  375. switch (lang)
  376. {
  377. case Lang::ru: {
  378. static const char8_t* ru {u8"# Серверный туннель для приема подключений по протоколу TCP\n"};
  379. return ru;
  380. }
  381. default: {
  382. static const char8_t* en {u8"# Server tunnel to accept TCP connections\n"};
  383. return en;
  384. }
  385. }
  386. }
  387. case TunnelType::UdpClient: {
  388. switch (lang)
  389. {
  390. case Lang::ru: {
  391. static const char8_t* ru {u8"# Клиентское подключение по протоколу UDP\n"};
  392. return ru;
  393. }
  394. default: {
  395. static const char8_t* en {u8"# Client connection via UDP protocol\n"};
  396. return en;
  397. }
  398. }
  399. }
  400. case TunnelType::UdpServer: {
  401. switch (lang)
  402. {
  403. case Lang::ru: {
  404. static const char8_t* ru {u8"# Серверный туннель для приема подключений по протоколу UDP\n"};
  405. return ru;
  406. }
  407. default: {
  408. static const char8_t* en {u8"# Server tunnel to accept UDP connections\n"};
  409. return en;
  410. }
  411. }
  412. }
  413. case TunnelType::HttpServer: {
  414. switch (lang)
  415. {
  416. case Lang::ru: {
  417. static const char8_t* ru {u8"# Серверный туннель для приема подключений по протоколу TCP\n"
  418. "# с добавлением специальных заголовков HTTP к каждому запросу\n"
  419. "# для идентификации клиента\n"};
  420. return ru;
  421. }
  422. default: {
  423. static const char8_t* en {u8"# Server tunnel to accept TCP connections\n"
  424. "# with adding special HTTP headers to each request\n"
  425. "# to identify the client\n"};
  426. return en;
  427. }
  428. }
  429. }
  430. case TunnelType::HttpProxy: {
  431. switch (lang)
  432. {
  433. case Lang::ru: {
  434. static const char8_t* ru {u8"# HTTP-прокси для выхода в сеть I2P\n"};
  435. return ru;
  436. }
  437. default: {
  438. static const char8_t* en {u8"# HTTP proxy for I2P network access\n"};
  439. return en;
  440. }
  441. }
  442. }
  443. case TunnelType::SocksProxy: {
  444. switch (lang)
  445. {
  446. case Lang::ru: {
  447. static const char8_t* ru {u8"# SOCKS5-прокси для выхода в сеть I2P\n"};
  448. return ru;
  449. }
  450. default: {
  451. static const char8_t* en {u8"# SOCKS5 proxy for I2P network access\n"};
  452. return en;
  453. }
  454. }
  455. }
  456. case TunnelType::IrcServer: {
  457. switch (lang)
  458. {
  459. case Lang::ru: {
  460. static const char8_t* ru {u8"# Серверный туннель для приема подключений по протоколу TCP\n"
  461. "# с добавлением специального заголовка для отображения I2P-адресов\n"
  462. "# клиентов, которые подключаются к серверу IRC (Internet Relay Chat)\n"};
  463. return ru;
  464. }
  465. default: {
  466. static const char8_t* en {u8"# Server tunnel to accept TCP connections\n"
  467. "# with addition of a special header for displaying I2P addresses\n"
  468. "# of clients that connect to the IRC (Internet Relay Chat) server\n"};
  469. return en;
  470. }
  471. }
  472. }
  473. default: {
  474. switch (lang)
  475. {
  476. case Lang::ru: {
  477. static const char8_t* ru {u8"# ^-^ это баг\n"};
  478. return ru;
  479. }
  480. default: {
  481. static const char8_t* en {u8"# ^-^ this is a bug\n"};
  482. return en;
  483. }
  484. }
  485. }
  486. }
  487. }
  488. const char8_t *Notepad::SetterError::name(Lang lang)
  489. {
  490. switch (lang)
  491. {
  492. case Lang::ru: {
  493. static const char8_t* ru {u8"Имя может содержать только латиницу, цифры, а также символы - _ ."};
  494. return ru;
  495. }
  496. default: {
  497. static const char8_t* en {u8"The name can contain only Latin characters, digits, and symbols - _ ."};
  498. return en;
  499. }
  500. }
  501. }
  502. const char8_t *Notepad::SetterError::length(Lang lang)
  503. {
  504. switch (lang)
  505. {
  506. case Lang::ru: {
  507. static const char8_t* ru {u8"Максимальная длина туннеля составляет 8 транзитных узлов (минимальная - 0)"};
  508. return ru;
  509. }
  510. default: {
  511. static const char8_t* en {u8"The maximum length of the tunnel is 8 transit nodes (minimum is 0)"};
  512. return en;
  513. }
  514. }
  515. }
  516. const char8_t *Notepad::SetterError::variance(Lang lang)
  517. {
  518. switch (lang)
  519. {
  520. case Lang::ru: {
  521. static const char8_t* ru {u8"Фактор случайного изменения длины нитей может принимать значения от -3 до 3."};
  522. return ru;
  523. }
  524. default: {
  525. static const char8_t* en {u8"The factor of random variation in strands length can take values from -3 to 3."};
  526. return en;
  527. }
  528. }
  529. }
  530. const char8_t *Notepad::SetterError::quantity(Lang lang)
  531. {
  532. switch (lang)
  533. {
  534. case Lang::ru: {
  535. static const char8_t* ru {u8"Максимальная ширина туннеля (количество нитей) - 16. Минимальное - 1."};
  536. return ru;
  537. }
  538. default: {
  539. static const char8_t* en {u8"Maximum tunnel width (number of strands) - 16. Minimum - 1."};
  540. return en;
  541. }
  542. }
  543. }
  544. const char8_t * Notepad::WebUi::tagline(Lang lang)
  545. {
  546. switch (lang)
  547. {
  548. case Lang::ru: {
  549. static const char8_t* ru {u8"Конструктор конфигов туннелей I2P"};
  550. return ru;
  551. }
  552. default: {
  553. static const char8_t* en {u8"I2P tunnel config builder"};
  554. return en;
  555. }
  556. }
  557. }
  558. const char8_t * Notepad::WebUi::error(Lang lang)
  559. {
  560. switch (lang)
  561. {
  562. case Lang::ru: {
  563. static const char8_t* ru {u8"Ошибка"};
  564. return ru;
  565. }
  566. default: {
  567. static const char8_t* en {u8"Error"};
  568. return en;
  569. }
  570. }
  571. }
  572. const char8_t *Notepad::WebUi::mainThOption(Lang lang)
  573. {
  574. switch (lang)
  575. {
  576. case Lang::ru: {
  577. static const char8_t* ru {u8"Параметр"};
  578. return ru;
  579. }
  580. default: {
  581. static const char8_t* en {u8"Parameter"};
  582. return en;
  583. }
  584. }
  585. }
  586. const char8_t *Notepad::WebUi::mainThInput(Lang lang)
  587. {
  588. switch (lang)
  589. {
  590. case Lang::ru: {
  591. static const char8_t* ru {u8"Значение"};
  592. return ru;
  593. }
  594. default: {
  595. static const char8_t* en {u8"Value"};
  596. return en;
  597. }
  598. }
  599. }
  600. const char8_t *Notepad::WebUi::mainTunnelName(Lang lang)
  601. {
  602. switch (lang)
  603. {
  604. case Lang::ru: {
  605. static const char8_t* ru {u8"Название туннеля"};
  606. return ru;
  607. }
  608. default: {
  609. static const char8_t* en {u8"Tunnel name"};
  610. return en;
  611. }
  612. }
  613. }
  614. const char8_t *Notepad::WebUi::mainTunnelNamePlaceholder(Lang lang)
  615. {
  616. switch (lang)
  617. {
  618. case Lang::ru: {
  619. static const char8_t* ru {u8"Латиница, цифры и _ - ."};
  620. return ru;
  621. }
  622. default: {
  623. static const char8_t* en {u8"Letters, numbers, and _ - ."};
  624. return en;
  625. }
  626. }
  627. }
  628. const char8_t *Notepad::WebUi::mainTunnelType(Lang lang)
  629. {
  630. switch (lang)
  631. {
  632. case Lang::ru: {
  633. static const char8_t* ru {u8"Тип туннеля"};
  634. return ru;
  635. }
  636. default: {
  637. static const char8_t* en {u8"Tunnel type"};
  638. return en;
  639. }
  640. }
  641. }
  642. const char8_t *Notepad::WebUi::mainDropdownClientTCP(Lang lang)
  643. {
  644. switch (lang)
  645. {
  646. case Lang::ru: {
  647. static const char8_t* ru {u8"Клиент TCP"};
  648. return ru;
  649. }
  650. default: {
  651. static const char8_t* en {u8"TCP client"};
  652. return en;
  653. }
  654. }
  655. }
  656. const char8_t *Notepad::WebUi::mainDropdownClientUDP(Lang lang)
  657. {
  658. switch (lang)
  659. {
  660. case Lang::ru: {
  661. static const char8_t* ru {u8"Клиент UDP"};
  662. return ru;
  663. }
  664. default: {
  665. static const char8_t* en {u8"UDP client"};
  666. return en;
  667. }
  668. }
  669. }
  670. const char8_t *Notepad::WebUi::mainDropdownServerTCP(Lang lang)
  671. {
  672. switch (lang)
  673. {
  674. case Lang::ru: {
  675. static const char8_t* ru {u8"Сервер TCP"};
  676. return ru;
  677. }
  678. default: {
  679. static const char8_t* en {u8"TCP server"};
  680. return en;
  681. }
  682. }
  683. }
  684. const char8_t *Notepad::WebUi::mainDropdownServerUDP(Lang lang)
  685. {
  686. switch (lang)
  687. {
  688. case Lang::ru: {
  689. static const char8_t* ru {u8"Сервер UDP"};
  690. return ru;
  691. }
  692. default: {
  693. static const char8_t* en {u8"UDP server"};
  694. return en;
  695. }
  696. }
  697. }
  698. const char8_t *Notepad::WebUi::mainDropdownServerHTTP(Lang lang)
  699. {
  700. switch (lang)
  701. {
  702. case Lang::ru: {
  703. static const char8_t* ru {u8"Сервер HTTP"};
  704. return ru;
  705. }
  706. default: {
  707. static const char8_t* en {u8"HTTP server"};
  708. return en;
  709. }
  710. }
  711. }
  712. const char8_t *Notepad::WebUi::mainDropdownServerIRC(Lang lang)
  713. {
  714. switch (lang)
  715. {
  716. case Lang::ru: {
  717. static const char8_t* ru {u8"Сервер IRC"};
  718. return ru;
  719. }
  720. default: {
  721. static const char8_t* en {u8"IRC server"};
  722. return en;
  723. }
  724. }
  725. }
  726. const char8_t *Notepad::WebUi::mainDropdownSOCKSProxy(Lang lang)
  727. {
  728. switch (lang)
  729. {
  730. case Lang::ru: {
  731. static const char8_t* ru {u8"SOCKS5-прокси"};
  732. return ru;
  733. }
  734. default: {
  735. static const char8_t* en {u8"SOCKS5 proxy"};
  736. return en;
  737. }
  738. }
  739. }
  740. const char8_t *Notepad::WebUi::mainDropdownHTTPProxy(Lang lang)
  741. {
  742. switch (lang)
  743. {
  744. case Lang::ru: {
  745. static const char8_t* ru {u8"HTTP-прокси"};
  746. return ru;
  747. }
  748. default: {
  749. static const char8_t* en {u8"HTTP proxy"};
  750. return en;
  751. }
  752. }
  753. }
  754. const char8_t *Notepad::WebUi::mainInbound(Lang lang)
  755. {
  756. switch (lang)
  757. {
  758. case Lang::ru: {
  759. static const char8_t* ru {u8"Входящие"};
  760. return ru;
  761. }
  762. default: {
  763. static const char8_t* en {u8"Inbound"};
  764. return en;
  765. }
  766. }
  767. }
  768. const char8_t *Notepad::WebUi::mainOutbound(Lang lang)
  769. {
  770. switch (lang)
  771. {
  772. case Lang::ru: {
  773. static const char8_t* ru {u8"Исходящие"};
  774. return ru;
  775. }
  776. default: {
  777. static const char8_t* en {u8"Outbound"};
  778. return en;
  779. }
  780. }
  781. }
  782. const char8_t *Notepad::WebUi::mainLength(Lang lang)
  783. {
  784. switch (lang)
  785. {
  786. case Lang::ru: {
  787. static const char8_t* ru {u8"Длина нитей (количество транзитных узлов)"};
  788. return ru;
  789. }
  790. default: {
  791. static const char8_t* en {u8"Thread length (number of transit nodes)"};
  792. return en;
  793. }
  794. }
  795. }
  796. const char8_t *Notepad::WebUi::mainQuantity(Lang lang)
  797. {
  798. switch (lang)
  799. {
  800. case Lang::ru: {
  801. static const char8_t* ru {u8"Количество нитей (ширина туннеля)"};
  802. return ru;
  803. }
  804. default: {
  805. static const char8_t* en {u8"Number of strands (tunnel width)"};
  806. return en;
  807. }
  808. }
  809. }
  810. const char8_t *Notepad::WebUi::mainVariance(Lang lang)
  811. {
  812. switch (lang)
  813. {
  814. case Lang::ru: {
  815. static const char8_t* ru {u8"Число для изменения длины случайных нитей"};
  816. return ru;
  817. }
  818. default: {
  819. static const char8_t* en {u8"Number to change the length of random strands"};
  820. return en;
  821. }
  822. }
  823. }
  824. const char8_t *Notepad::WebUi::mainB33(Lang lang)
  825. {
  826. switch (lang)
  827. {
  828. case Lang::ru: {
  829. static const char8_t* ru {u8"Зашифрованный лизсет (защита от пассивного обнаружения ресурса, только для серверов)"};
  830. return ru;
  831. }
  832. default: {
  833. static const char8_t* en {u8"Encrypted leaseset (protection against passive resource discovery, for servers only)"};
  834. return en;
  835. }
  836. }
  837. }
  838. const char8_t *Notepad::WebUi::mainTransient(Lang lang)
  839. {
  840. switch (lang)
  841. {
  842. case Lang::ru: {
  843. static const char8_t* ru {u8"Временные ключи (внутрисетевой адрес изменится после рестарта i2pd)"};
  844. return ru;
  845. }
  846. default: {
  847. static const char8_t* en {u8"Temporary keys (on-net address will change after i2pd restart)"};
  848. return en;
  849. }
  850. }
  851. }
  852. const char8_t *Notepad::WebUi::mainKeepalive(Lang lang)
  853. {
  854. switch (lang)
  855. {
  856. case Lang::ru: {
  857. static const char8_t* ru {u8"Пинг сервера для поддержания соединения (интервал в секундах; чтобы выключить - 0). Только для клиентских туннелей"};
  858. return ru;
  859. }
  860. default: {
  861. static const char8_t* en {u8"Server ping to keep the connection alive (interval in seconds; to turn off - 0). For client tunnels only"};
  862. return en;
  863. }
  864. }
  865. }
  866. const char8_t *Notepad::WebUi::mainComments(Lang lang)
  867. {
  868. switch (lang)
  869. {
  870. case Lang::ru: {
  871. static const char8_t* ru {u8"Добавить подробные комментарии в конфиг"};
  872. return ru;
  873. }
  874. default: {
  875. static const char8_t* en {u8"Add detailed comments to the config"};
  876. return en;
  877. }
  878. }
  879. }
  880. const char8_t *Notepad::WebUi::mainGenerate(Lang lang)
  881. {
  882. switch (lang)
  883. {
  884. case Lang::ru: {
  885. static const char8_t* ru {u8"Сгенерировать"};
  886. return ru;
  887. }
  888. default: {
  889. static const char8_t* en {u8"Generate"};
  890. return en;
  891. }
  892. }
  893. }
  894. const char8_t *Notepad::WebUi::configGoBack(Lang lang)
  895. {
  896. switch (lang)
  897. {
  898. case Lang::ru: {
  899. static const char8_t* ru {u8"На главную"};
  900. return ru;
  901. }
  902. default: {
  903. static const char8_t* en {u8"Main page"};
  904. return en;
  905. }
  906. }
  907. }