ysk-server-shared 1.0.0 → 1.1.9

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (779) hide show
  1. package/README.md +21 -6
  2. package/dist/browser.d.ts +1 -0
  3. package/dist/browser.d.ts.map +1 -1
  4. package/dist/browser.js +1 -0
  5. package/dist/browser.js.map +1 -1
  6. package/dist/bt-tracker.d.ts +56 -0
  7. package/dist/bt-tracker.d.ts.map +1 -1
  8. package/dist/bt-tracker.js +1 -0
  9. package/dist/bt-tracker.js.map +1 -1
  10. package/dist/capabilities.d.ts +1 -1
  11. package/dist/capabilities.d.ts.map +1 -1
  12. package/dist/capabilities.js +6 -0
  13. package/dist/capabilities.js.map +1 -1
  14. package/dist/cdn.d.ts +2 -0
  15. package/dist/cdn.d.ts.map +1 -1
  16. package/dist/databases.d.ts +2 -0
  17. package/dist/databases.d.ts.map +1 -1
  18. package/dist/docker.d.ts +134 -0
  19. package/dist/docker.d.ts.map +1 -0
  20. package/dist/docker.js +94 -0
  21. package/dist/docker.js.map +1 -0
  22. package/dist/dto.d.ts +10 -1
  23. package/dist/dto.d.ts.map +1 -1
  24. package/dist/email-domain.d.ts +7 -0
  25. package/dist/email-domain.d.ts.map +1 -1
  26. package/dist/files.d.ts +18 -0
  27. package/dist/files.d.ts.map +1 -1
  28. package/dist/files.js +35 -1
  29. package/dist/files.js.map +1 -1
  30. package/dist/ftp.d.ts +9 -0
  31. package/dist/ftp.d.ts.map +1 -1
  32. package/dist/index.d.ts +2 -0
  33. package/dist/index.d.ts.map +1 -1
  34. package/dist/index.js +2 -0
  35. package/dist/index.js.map +1 -1
  36. package/dist/migrate.d.ts +7 -0
  37. package/dist/migrate.d.ts.map +1 -1
  38. package/dist/migrate.js.map +1 -1
  39. package/dist/route-capabilities.d.ts +16 -0
  40. package/dist/route-capabilities.d.ts.map +1 -1
  41. package/dist/route-capabilities.js +142 -4
  42. package/dist/route-capabilities.js.map +1 -1
  43. package/dist/system.d.ts +4 -0
  44. package/dist/system.d.ts.map +1 -1
  45. package/dist/validators.d.ts +178 -0
  46. package/dist/validators.d.ts.map +1 -0
  47. package/dist/validators.js +121 -0
  48. package/dist/validators.js.map +1 -0
  49. package/locales/ar/agents.json +17 -2
  50. package/locales/ar/apache.json +7 -1
  51. package/locales/ar/audit.json +4 -1
  52. package/locales/ar/backups.json +36 -1
  53. package/locales/ar/btTracker.json +121 -39
  54. package/locales/ar/catalog.json +8 -8
  55. package/locales/ar/cdn.json +89 -1
  56. package/locales/ar/cli.json +4 -4
  57. package/locales/ar/common.json +9 -1
  58. package/locales/ar/cron.json +33 -1
  59. package/locales/ar/dashboard.json +24 -3
  60. package/locales/ar/db.json +75 -3
  61. package/locales/ar/dns.json +23 -1
  62. package/locales/ar/docker.json +248 -0
  63. package/locales/ar/email.json +50 -11
  64. package/locales/ar/errors.json +5 -2
  65. package/locales/ar/fail2ban.json +38 -13
  66. package/locales/ar/files.json +53 -10
  67. package/locales/ar/firewall.json +19 -10
  68. package/locales/ar/ftp.json +32 -1
  69. package/locales/ar/hostBrowse.json +37 -15
  70. package/locales/ar/listToolbar.json +2 -1
  71. package/locales/ar/login.json +12 -7
  72. package/locales/ar/logs.json +31 -2
  73. package/locales/ar/metrics.json +36 -1
  74. package/locales/ar/migrate.json +27 -1
  75. package/locales/ar/nav.json +11 -4
  76. package/locales/ar/network.json +27 -2
  77. package/locales/ar/nginx.json +4 -1
  78. package/locales/ar/notFound.json +6 -0
  79. package/locales/ar/notes.json +252 -64
  80. package/locales/ar/playbooks.json +1 -1
  81. package/locales/ar/projects.json +134 -12
  82. package/locales/ar/protection.json +72 -8
  83. package/locales/ar/publicFiles.json +18 -1
  84. package/locales/ar/rbac.json +15 -2
  85. package/locales/ar/readiness.json +33 -2
  86. package/locales/ar/redis.json +24 -1
  87. package/locales/ar/runtime.json +49 -2
  88. package/locales/ar/search.json +14 -10
  89. package/locales/ar/security.json +68 -7
  90. package/locales/ar/serviceExposure.json +18 -6
  91. package/locales/ar/services.json +69 -3
  92. package/locales/ar/software.json +2 -1
  93. package/locales/ar/softwareLifecycle.json +12 -2
  94. package/locales/ar/ssl.json +12 -1
  95. package/locales/ar/stackWizard.json +9 -2
  96. package/locales/ar/support.json +33 -17
  97. package/locales/ar/system.json +31 -2
  98. package/locales/ar/systemd.json +3 -1
  99. package/locales/ar/terminal.json +9 -1
  100. package/locales/ar/translation.json +2422 -302
  101. package/locales/ar/updates.json +76 -3
  102. package/locales/ar/users.json +19 -1
  103. package/locales/ar/validators.json +325 -0
  104. package/locales/ar/vnc.json +17 -1
  105. package/locales/ar/vpn.json +18 -3
  106. package/locales/bn/agents.json +17 -2
  107. package/locales/bn/apache.json +7 -1
  108. package/locales/bn/audit.json +4 -1
  109. package/locales/bn/backups.json +36 -1
  110. package/locales/bn/btTracker.json +121 -39
  111. package/locales/bn/catalog.json +5 -5
  112. package/locales/bn/cdn.json +89 -1
  113. package/locales/bn/cli.json +2 -2
  114. package/locales/bn/common.json +9 -1
  115. package/locales/bn/cron.json +33 -1
  116. package/locales/bn/dashboard.json +24 -3
  117. package/locales/bn/db.json +75 -3
  118. package/locales/bn/dns.json +23 -1
  119. package/locales/bn/docker.json +248 -0
  120. package/locales/bn/email.json +49 -10
  121. package/locales/bn/errors.json +5 -2
  122. package/locales/bn/fail2ban.json +26 -1
  123. package/locales/bn/files.json +53 -10
  124. package/locales/bn/firewall.json +17 -8
  125. package/locales/bn/ftp.json +32 -1
  126. package/locales/bn/hostBrowse.json +37 -15
  127. package/locales/bn/listToolbar.json +2 -1
  128. package/locales/bn/login.json +13 -8
  129. package/locales/bn/logs.json +31 -2
  130. package/locales/bn/metrics.json +36 -1
  131. package/locales/bn/migrate.json +27 -1
  132. package/locales/bn/nav.json +10 -3
  133. package/locales/bn/network.json +27 -2
  134. package/locales/bn/nginx.json +4 -1
  135. package/locales/bn/notFound.json +6 -0
  136. package/locales/bn/notes.json +222 -34
  137. package/locales/bn/projects.json +133 -11
  138. package/locales/bn/protection.json +66 -2
  139. package/locales/bn/publicFiles.json +18 -1
  140. package/locales/bn/rbac.json +15 -2
  141. package/locales/bn/readiness.json +32 -1
  142. package/locales/bn/redis.json +24 -1
  143. package/locales/bn/runtime.json +49 -2
  144. package/locales/bn/search.json +13 -9
  145. package/locales/bn/security.json +68 -7
  146. package/locales/bn/serviceExposure.json +18 -6
  147. package/locales/bn/services.json +68 -2
  148. package/locales/bn/software.json +2 -1
  149. package/locales/bn/softwareLifecycle.json +12 -2
  150. package/locales/bn/ssl.json +12 -1
  151. package/locales/bn/stackWizard.json +9 -2
  152. package/locales/bn/support.json +38 -22
  153. package/locales/bn/system.json +31 -2
  154. package/locales/bn/systemd.json +3 -1
  155. package/locales/bn/terminal.json +9 -1
  156. package/locales/bn/translation.json +2366 -246
  157. package/locales/bn/updates.json +76 -3
  158. package/locales/bn/users.json +19 -1
  159. package/locales/bn/validators.json +325 -0
  160. package/locales/bn/vnc.json +17 -1
  161. package/locales/bn/vpn.json +18 -3
  162. package/locales/en/agents.json +20 -5
  163. package/locales/en/apache.json +6 -0
  164. package/locales/en/audit.json +4 -1
  165. package/locales/en/backups.json +39 -4
  166. package/locales/en/btTracker.json +85 -3
  167. package/locales/en/cdn.json +104 -2
  168. package/locales/en/cli.json +7 -7
  169. package/locales/en/common.json +9 -1
  170. package/locales/en/cron.json +33 -1
  171. package/locales/en/dashboard.json +28 -7
  172. package/locales/en/db.json +81 -8
  173. package/locales/en/dns.json +23 -1
  174. package/locales/en/docker.json +248 -0
  175. package/locales/en/email.json +50 -11
  176. package/locales/en/errors.json +6 -3
  177. package/locales/en/fail2ban.json +31 -6
  178. package/locales/en/files.json +44 -1
  179. package/locales/en/firewall.json +10 -1
  180. package/locales/en/ftp.json +34 -3
  181. package/locales/en/hostBrowse.json +24 -2
  182. package/locales/en/listToolbar.json +2 -1
  183. package/locales/en/login.json +6 -1
  184. package/locales/en/logs.json +33 -4
  185. package/locales/en/metrics.json +37 -2
  186. package/locales/en/migrate.json +27 -1
  187. package/locales/en/nav.json +9 -2
  188. package/locales/en/network.json +27 -2
  189. package/locales/en/nginx.json +4 -1
  190. package/locales/en/notFound.json +6 -0
  191. package/locales/en/notes.json +233 -42
  192. package/locales/en/projects.json +133 -11
  193. package/locales/en/protection.json +68 -3
  194. package/locales/en/publicFiles.json +18 -1
  195. package/locales/en/rbac.json +15 -2
  196. package/locales/en/readiness.json +30 -1
  197. package/locales/en/redis.json +24 -1
  198. package/locales/en/runtime.json +51 -3
  199. package/locales/en/search.json +4 -0
  200. package/locales/en/security.json +70 -9
  201. package/locales/en/serviceExposure.json +13 -1
  202. package/locales/en/services.json +68 -2
  203. package/locales/en/software.json +2 -1
  204. package/locales/en/softwareLifecycle.json +11 -1
  205. package/locales/en/ssl.json +12 -1
  206. package/locales/en/stackWizard.json +9 -2
  207. package/locales/en/support.json +17 -1
  208. package/locales/en/system.json +36 -7
  209. package/locales/en/systemd.json +2 -0
  210. package/locales/en/terminal.json +10 -2
  211. package/locales/en/translation.json +2312 -192
  212. package/locales/en/updates.json +50 -4
  213. package/locales/en/users.json +20 -1
  214. package/locales/en/validators.json +325 -0
  215. package/locales/en/vnc.json +23 -7
  216. package/locales/en/vpn.json +17 -2
  217. package/locales/es/agents.json +17 -2
  218. package/locales/es/apache.json +7 -1
  219. package/locales/es/audit.json +4 -1
  220. package/locales/es/backups.json +36 -1
  221. package/locales/es/btTracker.json +119 -37
  222. package/locales/es/catalog.json +6 -6
  223. package/locales/es/cdn.json +89 -1
  224. package/locales/es/cli.json +2 -2
  225. package/locales/es/common.json +9 -1
  226. package/locales/es/cron.json +33 -1
  227. package/locales/es/dashboard.json +24 -3
  228. package/locales/es/db.json +75 -3
  229. package/locales/es/dns.json +23 -1
  230. package/locales/es/docker.json +248 -0
  231. package/locales/es/email.json +49 -10
  232. package/locales/es/errors.json +5 -2
  233. package/locales/es/fail2ban.json +26 -1
  234. package/locales/es/files.json +52 -9
  235. package/locales/es/firewall.json +17 -8
  236. package/locales/es/ftp.json +32 -1
  237. package/locales/es/hostBrowse.json +35 -13
  238. package/locales/es/listToolbar.json +2 -1
  239. package/locales/es/login.json +12 -7
  240. package/locales/es/logs.json +31 -2
  241. package/locales/es/metrics.json +36 -1
  242. package/locales/es/migrate.json +27 -1
  243. package/locales/es/nav.json +11 -4
  244. package/locales/es/network.json +27 -2
  245. package/locales/es/nginx.json +4 -1
  246. package/locales/es/notFound.json +6 -0
  247. package/locales/es/notes.json +229 -41
  248. package/locales/es/projects.json +133 -11
  249. package/locales/es/protection.json +66 -2
  250. package/locales/es/publicFiles.json +18 -1
  251. package/locales/es/rbac.json +15 -2
  252. package/locales/es/readiness.json +32 -1
  253. package/locales/es/redis.json +24 -1
  254. package/locales/es/runtime.json +49 -2
  255. package/locales/es/search.json +13 -9
  256. package/locales/es/security.json +68 -7
  257. package/locales/es/serviceExposure.json +18 -6
  258. package/locales/es/services.json +68 -2
  259. package/locales/es/software.json +2 -1
  260. package/locales/es/softwareLifecycle.json +12 -2
  261. package/locales/es/ssl.json +12 -1
  262. package/locales/es/stackWizard.json +9 -2
  263. package/locales/es/support.json +37 -21
  264. package/locales/es/system.json +31 -2
  265. package/locales/es/systemd.json +3 -1
  266. package/locales/es/terminal.json +9 -1
  267. package/locales/es/translation.json +2368 -248
  268. package/locales/es/updates.json +76 -3
  269. package/locales/es/users.json +19 -1
  270. package/locales/es/validators.json +325 -0
  271. package/locales/es/vnc.json +17 -1
  272. package/locales/es/vpn.json +18 -3
  273. package/locales/fr/agents.json +17 -2
  274. package/locales/fr/apache.json +7 -1
  275. package/locales/fr/audit.json +4 -1
  276. package/locales/fr/backups.json +36 -1
  277. package/locales/fr/btTracker.json +118 -36
  278. package/locales/fr/catalog.json +6 -6
  279. package/locales/fr/cdn.json +89 -1
  280. package/locales/fr/cli.json +3 -3
  281. package/locales/fr/common.json +9 -1
  282. package/locales/fr/cron.json +33 -1
  283. package/locales/fr/dashboard.json +24 -3
  284. package/locales/fr/db.json +75 -3
  285. package/locales/fr/dns.json +23 -1
  286. package/locales/fr/docker.json +248 -0
  287. package/locales/fr/email.json +47 -8
  288. package/locales/fr/errors.json +5 -2
  289. package/locales/fr/fail2ban.json +27 -2
  290. package/locales/fr/files.json +52 -9
  291. package/locales/fr/firewall.json +13 -4
  292. package/locales/fr/ftp.json +32 -1
  293. package/locales/fr/hostBrowse.json +34 -12
  294. package/locales/fr/listToolbar.json +2 -1
  295. package/locales/fr/login.json +11 -6
  296. package/locales/fr/logs.json +31 -2
  297. package/locales/fr/metrics.json +36 -1
  298. package/locales/fr/migrate.json +27 -1
  299. package/locales/fr/nav.json +11 -4
  300. package/locales/fr/network.json +27 -2
  301. package/locales/fr/nginx.json +4 -1
  302. package/locales/fr/notFound.json +6 -0
  303. package/locales/fr/notes.json +225 -37
  304. package/locales/fr/projects.json +131 -9
  305. package/locales/fr/protection.json +66 -2
  306. package/locales/fr/publicFiles.json +18 -1
  307. package/locales/fr/rbac.json +15 -2
  308. package/locales/fr/readiness.json +32 -1
  309. package/locales/fr/redis.json +25 -2
  310. package/locales/fr/runtime.json +49 -2
  311. package/locales/fr/search.json +11 -7
  312. package/locales/fr/security.json +68 -7
  313. package/locales/fr/serviceExposure.json +17 -5
  314. package/locales/fr/services.json +68 -2
  315. package/locales/fr/software.json +2 -1
  316. package/locales/fr/softwareLifecycle.json +12 -2
  317. package/locales/fr/ssl.json +12 -1
  318. package/locales/fr/stackWizard.json +9 -2
  319. package/locales/fr/support.json +37 -21
  320. package/locales/fr/system.json +31 -2
  321. package/locales/fr/systemd.json +3 -1
  322. package/locales/fr/terminal.json +9 -1
  323. package/locales/fr/translation.json +2352 -232
  324. package/locales/fr/updates.json +76 -3
  325. package/locales/fr/users.json +19 -1
  326. package/locales/fr/validators.json +325 -0
  327. package/locales/fr/vnc.json +17 -1
  328. package/locales/fr/vpn.json +17 -2
  329. package/locales/hi/agents.json +17 -2
  330. package/locales/hi/apache.json +7 -1
  331. package/locales/hi/audit.json +4 -1
  332. package/locales/hi/backups.json +36 -1
  333. package/locales/hi/btTracker.json +121 -39
  334. package/locales/hi/catalog.json +7 -7
  335. package/locales/hi/cdn.json +89 -1
  336. package/locales/hi/cli.json +1 -1
  337. package/locales/hi/common.json +9 -1
  338. package/locales/hi/cron.json +33 -1
  339. package/locales/hi/dashboard.json +24 -3
  340. package/locales/hi/db.json +75 -3
  341. package/locales/hi/dns.json +23 -1
  342. package/locales/hi/docker.json +248 -0
  343. package/locales/hi/email.json +49 -10
  344. package/locales/hi/errors.json +5 -2
  345. package/locales/hi/fail2ban.json +29 -4
  346. package/locales/hi/files.json +53 -10
  347. package/locales/hi/firewall.json +17 -8
  348. package/locales/hi/ftp.json +32 -1
  349. package/locales/hi/hostBrowse.json +37 -15
  350. package/locales/hi/listToolbar.json +2 -1
  351. package/locales/hi/login.json +13 -8
  352. package/locales/hi/logs.json +31 -2
  353. package/locales/hi/metrics.json +36 -1
  354. package/locales/hi/migrate.json +27 -1
  355. package/locales/hi/nav.json +11 -4
  356. package/locales/hi/network.json +27 -2
  357. package/locales/hi/nginx.json +4 -1
  358. package/locales/hi/notFound.json +6 -0
  359. package/locales/hi/notes.json +227 -39
  360. package/locales/hi/projects.json +134 -12
  361. package/locales/hi/protection.json +67 -3
  362. package/locales/hi/publicFiles.json +18 -1
  363. package/locales/hi/rbac.json +16 -3
  364. package/locales/hi/readiness.json +32 -1
  365. package/locales/hi/redis.json +24 -1
  366. package/locales/hi/runtime.json +49 -2
  367. package/locales/hi/search.json +14 -10
  368. package/locales/hi/security.json +68 -7
  369. package/locales/hi/serviceExposure.json +18 -6
  370. package/locales/hi/services.json +68 -2
  371. package/locales/hi/software.json +2 -1
  372. package/locales/hi/softwareLifecycle.json +12 -2
  373. package/locales/hi/ssl.json +12 -1
  374. package/locales/hi/stackWizard.json +9 -2
  375. package/locales/hi/support.json +36 -20
  376. package/locales/hi/system.json +31 -2
  377. package/locales/hi/systemd.json +3 -1
  378. package/locales/hi/terminal.json +9 -1
  379. package/locales/hi/translation.json +2379 -259
  380. package/locales/hi/updates.json +76 -3
  381. package/locales/hi/users.json +19 -1
  382. package/locales/hi/validators.json +325 -0
  383. package/locales/hi/vnc.json +17 -1
  384. package/locales/hi/vpn.json +19 -4
  385. package/locales/id/agents.json +17 -2
  386. package/locales/id/apache.json +7 -1
  387. package/locales/id/audit.json +4 -1
  388. package/locales/id/backups.json +36 -1
  389. package/locales/id/btTracker.json +119 -37
  390. package/locales/id/catalog.json +6 -6
  391. package/locales/id/cdn.json +89 -1
  392. package/locales/id/cli.json +2 -2
  393. package/locales/id/common.json +9 -1
  394. package/locales/id/cron.json +33 -1
  395. package/locales/id/dashboard.json +24 -3
  396. package/locales/id/db.json +75 -3
  397. package/locales/id/dns.json +23 -1
  398. package/locales/id/docker.json +248 -0
  399. package/locales/id/email.json +49 -10
  400. package/locales/id/errors.json +5 -2
  401. package/locales/id/fail2ban.json +26 -1
  402. package/locales/id/files.json +52 -9
  403. package/locales/id/firewall.json +15 -6
  404. package/locales/id/ftp.json +32 -1
  405. package/locales/id/hostBrowse.json +35 -13
  406. package/locales/id/listToolbar.json +2 -1
  407. package/locales/id/login.json +13 -8
  408. package/locales/id/logs.json +31 -2
  409. package/locales/id/metrics.json +36 -1
  410. package/locales/id/migrate.json +27 -1
  411. package/locales/id/nav.json +10 -3
  412. package/locales/id/network.json +27 -2
  413. package/locales/id/nginx.json +4 -1
  414. package/locales/id/notFound.json +6 -0
  415. package/locales/id/notes.json +224 -36
  416. package/locales/id/projects.json +132 -10
  417. package/locales/id/protection.json +66 -2
  418. package/locales/id/publicFiles.json +18 -1
  419. package/locales/id/rbac.json +15 -2
  420. package/locales/id/readiness.json +32 -1
  421. package/locales/id/redis.json +24 -1
  422. package/locales/id/runtime.json +49 -2
  423. package/locales/id/search.json +13 -9
  424. package/locales/id/security.json +67 -6
  425. package/locales/id/serviceExposure.json +18 -6
  426. package/locales/id/services.json +68 -2
  427. package/locales/id/software.json +2 -1
  428. package/locales/id/softwareLifecycle.json +12 -2
  429. package/locales/id/ssl.json +12 -1
  430. package/locales/id/stackWizard.json +9 -2
  431. package/locales/id/support.json +36 -20
  432. package/locales/id/system.json +31 -2
  433. package/locales/id/systemd.json +3 -1
  434. package/locales/id/terminal.json +9 -1
  435. package/locales/id/translation.json +2358 -238
  436. package/locales/id/updates.json +76 -3
  437. package/locales/id/users.json +19 -1
  438. package/locales/id/validators.json +325 -0
  439. package/locales/id/vnc.json +17 -1
  440. package/locales/id/vpn.json +18 -3
  441. package/locales/ja/agents.json +17 -2
  442. package/locales/ja/apache.json +7 -1
  443. package/locales/ja/audit.json +4 -1
  444. package/locales/ja/backups.json +36 -1
  445. package/locales/ja/btTracker.json +121 -39
  446. package/locales/ja/catalog.json +10 -10
  447. package/locales/ja/cdn.json +89 -1
  448. package/locales/ja/cli.json +3 -3
  449. package/locales/ja/common.json +9 -1
  450. package/locales/ja/cron.json +33 -1
  451. package/locales/ja/dashboard.json +24 -3
  452. package/locales/ja/db.json +75 -3
  453. package/locales/ja/dns.json +23 -1
  454. package/locales/ja/docker.json +248 -0
  455. package/locales/ja/email.json +49 -10
  456. package/locales/ja/errors.json +5 -2
  457. package/locales/ja/fail2ban.json +26 -1
  458. package/locales/ja/files.json +52 -9
  459. package/locales/ja/firewall.json +17 -8
  460. package/locales/ja/ftp.json +32 -1
  461. package/locales/ja/hostBrowse.json +37 -15
  462. package/locales/ja/listToolbar.json +2 -1
  463. package/locales/ja/login.json +11 -6
  464. package/locales/ja/logs.json +31 -2
  465. package/locales/ja/metrics.json +36 -1
  466. package/locales/ja/migrate.json +27 -1
  467. package/locales/ja/nav.json +13 -6
  468. package/locales/ja/network.json +28 -3
  469. package/locales/ja/nginx.json +4 -1
  470. package/locales/ja/notFound.json +6 -0
  471. package/locales/ja/notes.json +233 -45
  472. package/locales/ja/projects.json +133 -11
  473. package/locales/ja/protection.json +66 -2
  474. package/locales/ja/publicFiles.json +18 -1
  475. package/locales/ja/rbac.json +15 -2
  476. package/locales/ja/readiness.json +32 -1
  477. package/locales/ja/redis.json +24 -1
  478. package/locales/ja/runtime.json +50 -3
  479. package/locales/ja/search.json +12 -8
  480. package/locales/ja/security.json +68 -7
  481. package/locales/ja/serviceExposure.json +18 -6
  482. package/locales/ja/services.json +68 -2
  483. package/locales/ja/software.json +2 -1
  484. package/locales/ja/softwareLifecycle.json +12 -2
  485. package/locales/ja/ssl.json +12 -1
  486. package/locales/ja/stackWizard.json +9 -2
  487. package/locales/ja/support.json +38 -22
  488. package/locales/ja/system.json +31 -2
  489. package/locales/ja/systemd.json +3 -1
  490. package/locales/ja/terminal.json +9 -1
  491. package/locales/ja/translation.json +2385 -265
  492. package/locales/ja/updates.json +76 -3
  493. package/locales/ja/users.json +19 -1
  494. package/locales/ja/validators.json +325 -0
  495. package/locales/ja/vnc.json +17 -1
  496. package/locales/ja/vpn.json +18 -3
  497. package/locales/ko/agents.json +17 -2
  498. package/locales/ko/apache.json +7 -1
  499. package/locales/ko/audit.json +4 -1
  500. package/locales/ko/backups.json +36 -1
  501. package/locales/ko/btTracker.json +121 -39
  502. package/locales/ko/catalog.json +8 -8
  503. package/locales/ko/cdn.json +89 -1
  504. package/locales/ko/cli.json +2 -2
  505. package/locales/ko/common.json +9 -1
  506. package/locales/ko/cron.json +33 -1
  507. package/locales/ko/dashboard.json +24 -3
  508. package/locales/ko/db.json +75 -3
  509. package/locales/ko/dns.json +23 -1
  510. package/locales/ko/docker.json +248 -0
  511. package/locales/ko/email.json +49 -10
  512. package/locales/ko/errors.json +5 -2
  513. package/locales/ko/fail2ban.json +37 -12
  514. package/locales/ko/files.json +52 -9
  515. package/locales/ko/firewall.json +18 -9
  516. package/locales/ko/ftp.json +32 -1
  517. package/locales/ko/hostBrowse.json +37 -15
  518. package/locales/ko/listToolbar.json +2 -1
  519. package/locales/ko/login.json +10 -5
  520. package/locales/ko/logs.json +31 -2
  521. package/locales/ko/metrics.json +36 -1
  522. package/locales/ko/migrate.json +27 -1
  523. package/locales/ko/nav.json +11 -4
  524. package/locales/ko/network.json +27 -2
  525. package/locales/ko/nginx.json +4 -1
  526. package/locales/ko/notFound.json +6 -0
  527. package/locales/ko/notes.json +243 -55
  528. package/locales/ko/playbooks.json +1 -1
  529. package/locales/ko/projects.json +134 -12
  530. package/locales/ko/protection.json +69 -5
  531. package/locales/ko/publicFiles.json +18 -1
  532. package/locales/ko/rbac.json +15 -2
  533. package/locales/ko/readiness.json +33 -2
  534. package/locales/ko/redis.json +24 -1
  535. package/locales/ko/runtime.json +49 -2
  536. package/locales/ko/search.json +13 -9
  537. package/locales/ko/security.json +68 -7
  538. package/locales/ko/serviceExposure.json +18 -6
  539. package/locales/ko/services.json +68 -2
  540. package/locales/ko/software.json +2 -1
  541. package/locales/ko/softwareLifecycle.json +12 -2
  542. package/locales/ko/ssl.json +12 -1
  543. package/locales/ko/stackWizard.json +9 -2
  544. package/locales/ko/support.json +36 -20
  545. package/locales/ko/system.json +31 -2
  546. package/locales/ko/systemd.json +3 -1
  547. package/locales/ko/terminal.json +9 -1
  548. package/locales/ko/translation.json +2404 -284
  549. package/locales/ko/updates.json +76 -3
  550. package/locales/ko/users.json +19 -1
  551. package/locales/ko/validators.json +325 -0
  552. package/locales/ko/vnc.json +17 -1
  553. package/locales/ko/vpn.json +19 -4
  554. package/locales/pt/agents.json +17 -2
  555. package/locales/pt/apache.json +7 -1
  556. package/locales/pt/audit.json +4 -1
  557. package/locales/pt/backups.json +36 -1
  558. package/locales/pt/btTracker.json +119 -37
  559. package/locales/pt/catalog.json +4 -4
  560. package/locales/pt/cdn.json +89 -1
  561. package/locales/pt/cli.json +2 -2
  562. package/locales/pt/common.json +9 -1
  563. package/locales/pt/cron.json +33 -1
  564. package/locales/pt/dashboard.json +24 -3
  565. package/locales/pt/db.json +75 -3
  566. package/locales/pt/dns.json +23 -1
  567. package/locales/pt/docker.json +248 -0
  568. package/locales/pt/email.json +49 -10
  569. package/locales/pt/errors.json +5 -2
  570. package/locales/pt/fail2ban.json +26 -1
  571. package/locales/pt/files.json +52 -9
  572. package/locales/pt/firewall.json +16 -7
  573. package/locales/pt/ftp.json +32 -1
  574. package/locales/pt/hostBrowse.json +37 -15
  575. package/locales/pt/listToolbar.json +2 -1
  576. package/locales/pt/login.json +14 -9
  577. package/locales/pt/logs.json +31 -2
  578. package/locales/pt/metrics.json +36 -1
  579. package/locales/pt/migrate.json +27 -1
  580. package/locales/pt/nav.json +10 -3
  581. package/locales/pt/network.json +27 -2
  582. package/locales/pt/nginx.json +4 -1
  583. package/locales/pt/notFound.json +6 -0
  584. package/locales/pt/notes.json +226 -38
  585. package/locales/pt/projects.json +131 -9
  586. package/locales/pt/protection.json +66 -2
  587. package/locales/pt/publicFiles.json +18 -1
  588. package/locales/pt/rbac.json +15 -2
  589. package/locales/pt/readiness.json +32 -1
  590. package/locales/pt/redis.json +24 -1
  591. package/locales/pt/runtime.json +49 -2
  592. package/locales/pt/search.json +11 -7
  593. package/locales/pt/security.json +68 -7
  594. package/locales/pt/serviceExposure.json +17 -5
  595. package/locales/pt/services.json +68 -2
  596. package/locales/pt/software.json +2 -1
  597. package/locales/pt/softwareLifecycle.json +12 -2
  598. package/locales/pt/ssl.json +12 -1
  599. package/locales/pt/stackWizard.json +9 -2
  600. package/locales/pt/support.json +36 -20
  601. package/locales/pt/system.json +31 -2
  602. package/locales/pt/systemd.json +3 -1
  603. package/locales/pt/terminal.json +9 -1
  604. package/locales/pt/translation.json +2358 -238
  605. package/locales/pt/updates.json +76 -3
  606. package/locales/pt/users.json +19 -1
  607. package/locales/pt/validators.json +325 -0
  608. package/locales/pt/vnc.json +17 -1
  609. package/locales/pt/vpn.json +17 -2
  610. package/locales/ur/agents.json +17 -2
  611. package/locales/ur/apache.json +7 -1
  612. package/locales/ur/audit.json +4 -1
  613. package/locales/ur/backups.json +36 -1
  614. package/locales/ur/btTracker.json +121 -39
  615. package/locales/ur/catalog.json +6 -6
  616. package/locales/ur/cdn.json +89 -1
  617. package/locales/ur/cli.json +2 -2
  618. package/locales/ur/common.json +9 -1
  619. package/locales/ur/cron.json +33 -1
  620. package/locales/ur/dashboard.json +24 -3
  621. package/locales/ur/db.json +75 -3
  622. package/locales/ur/dns.json +23 -1
  623. package/locales/ur/docker.json +248 -0
  624. package/locales/ur/email.json +49 -10
  625. package/locales/ur/errors.json +5 -2
  626. package/locales/ur/fail2ban.json +26 -1
  627. package/locales/ur/files.json +53 -10
  628. package/locales/ur/firewall.json +17 -8
  629. package/locales/ur/ftp.json +32 -1
  630. package/locales/ur/hostBrowse.json +37 -15
  631. package/locales/ur/listToolbar.json +2 -1
  632. package/locales/ur/login.json +13 -8
  633. package/locales/ur/logs.json +31 -2
  634. package/locales/ur/metrics.json +36 -1
  635. package/locales/ur/migrate.json +27 -1
  636. package/locales/ur/nav.json +10 -3
  637. package/locales/ur/network.json +27 -2
  638. package/locales/ur/nginx.json +4 -1
  639. package/locales/ur/notFound.json +6 -0
  640. package/locales/ur/notes.json +222 -34
  641. package/locales/ur/projects.json +133 -11
  642. package/locales/ur/protection.json +66 -2
  643. package/locales/ur/publicFiles.json +18 -1
  644. package/locales/ur/rbac.json +15 -2
  645. package/locales/ur/readiness.json +32 -1
  646. package/locales/ur/redis.json +24 -1
  647. package/locales/ur/runtime.json +49 -2
  648. package/locales/ur/search.json +13 -9
  649. package/locales/ur/security.json +68 -7
  650. package/locales/ur/serviceExposure.json +18 -6
  651. package/locales/ur/services.json +68 -2
  652. package/locales/ur/software.json +2 -1
  653. package/locales/ur/softwareLifecycle.json +12 -2
  654. package/locales/ur/ssl.json +12 -1
  655. package/locales/ur/stackWizard.json +9 -2
  656. package/locales/ur/support.json +37 -21
  657. package/locales/ur/system.json +31 -2
  658. package/locales/ur/systemd.json +3 -1
  659. package/locales/ur/terminal.json +9 -1
  660. package/locales/ur/translation.json +2367 -247
  661. package/locales/ur/updates.json +76 -3
  662. package/locales/ur/users.json +19 -1
  663. package/locales/ur/validators.json +325 -0
  664. package/locales/ur/vnc.json +17 -1
  665. package/locales/ur/vpn.json +19 -4
  666. package/locales/zh-CN/agents.json +17 -2
  667. package/locales/zh-CN/apache.json +8 -2
  668. package/locales/zh-CN/audit.json +4 -1
  669. package/locales/zh-CN/backups.json +36 -1
  670. package/locales/zh-CN/btTracker.json +85 -3
  671. package/locales/zh-CN/catalog.json +2 -2
  672. package/locales/zh-CN/cdn.json +89 -1
  673. package/locales/zh-CN/cli.json +5 -5
  674. package/locales/zh-CN/common.json +9 -1
  675. package/locales/zh-CN/cron.json +33 -1
  676. package/locales/zh-CN/dashboard.json +25 -4
  677. package/locales/zh-CN/db.json +76 -4
  678. package/locales/zh-CN/dns.json +23 -1
  679. package/locales/zh-CN/docker.json +248 -0
  680. package/locales/zh-CN/email.json +49 -10
  681. package/locales/zh-CN/errors.json +5 -2
  682. package/locales/zh-CN/fail2ban.json +31 -6
  683. package/locales/zh-CN/files.json +46 -3
  684. package/locales/zh-CN/firewall.json +11 -2
  685. package/locales/zh-CN/ftp.json +32 -1
  686. package/locales/zh-CN/hostBrowse.json +23 -1
  687. package/locales/zh-CN/listToolbar.json +2 -1
  688. package/locales/zh-CN/login.json +6 -1
  689. package/locales/zh-CN/logs.json +36 -7
  690. package/locales/zh-CN/metrics.json +36 -1
  691. package/locales/zh-CN/migrate.json +27 -1
  692. package/locales/zh-CN/nav.json +10 -3
  693. package/locales/zh-CN/network.json +28 -3
  694. package/locales/zh-CN/nginx.json +5 -2
  695. package/locales/zh-CN/notFound.json +6 -0
  696. package/locales/zh-CN/notes.json +216 -28
  697. package/locales/zh-CN/projects.json +130 -8
  698. package/locales/zh-CN/protection.json +66 -2
  699. package/locales/zh-CN/publicFiles.json +18 -1
  700. package/locales/zh-CN/rbac.json +15 -2
  701. package/locales/zh-CN/readiness.json +33 -2
  702. package/locales/zh-CN/redis.json +24 -1
  703. package/locales/zh-CN/runtime.json +50 -3
  704. package/locales/zh-CN/search.json +5 -1
  705. package/locales/zh-CN/security.json +68 -7
  706. package/locales/zh-CN/serviceExposure.json +13 -1
  707. package/locales/zh-CN/services.json +68 -2
  708. package/locales/zh-CN/software.json +2 -1
  709. package/locales/zh-CN/softwareLifecycle.json +12 -2
  710. package/locales/zh-CN/ssl.json +12 -1
  711. package/locales/zh-CN/stackWizard.json +9 -2
  712. package/locales/zh-CN/support.json +18 -2
  713. package/locales/zh-CN/system.json +32 -3
  714. package/locales/zh-CN/systemd.json +3 -1
  715. package/locales/zh-CN/terminal.json +9 -1
  716. package/locales/zh-CN/translation.json +2273 -153
  717. package/locales/zh-CN/updates.json +76 -3
  718. package/locales/zh-CN/users.json +19 -1
  719. package/locales/zh-CN/validators.json +325 -0
  720. package/locales/zh-CN/vnc.json +17 -1
  721. package/locales/zh-CN/vpn.json +19 -4
  722. package/locales/zh-HK/agents.json +22 -7
  723. package/locales/zh-HK/apache.json +8 -2
  724. package/locales/zh-HK/audit.json +4 -1
  725. package/locales/zh-HK/backups.json +39 -4
  726. package/locales/zh-HK/btTracker.json +89 -7
  727. package/locales/zh-HK/catalog.json +2 -2
  728. package/locales/zh-HK/cdn.json +91 -3
  729. package/locales/zh-HK/cli.json +15 -15
  730. package/locales/zh-HK/common.json +9 -1
  731. package/locales/zh-HK/cron.json +37 -5
  732. package/locales/zh-HK/dashboard.json +28 -7
  733. package/locales/zh-HK/db.json +82 -10
  734. package/locales/zh-HK/dns.json +23 -1
  735. package/locales/zh-HK/docker.json +248 -0
  736. package/locales/zh-HK/email.json +64 -25
  737. package/locales/zh-HK/errors.json +6 -3
  738. package/locales/zh-HK/fail2ban.json +32 -7
  739. package/locales/zh-HK/files.json +48 -5
  740. package/locales/zh-HK/firewall.json +13 -4
  741. package/locales/zh-HK/ftp.json +34 -3
  742. package/locales/zh-HK/hostBrowse.json +24 -2
  743. package/locales/zh-HK/listToolbar.json +2 -1
  744. package/locales/zh-HK/login.json +7 -2
  745. package/locales/zh-HK/logs.json +40 -11
  746. package/locales/zh-HK/metrics.json +38 -3
  747. package/locales/zh-HK/migrate.json +26 -0
  748. package/locales/zh-HK/nav.json +12 -5
  749. package/locales/zh-HK/network.json +32 -7
  750. package/locales/zh-HK/nginx.json +6 -3
  751. package/locales/zh-HK/notFound.json +6 -0
  752. package/locales/zh-HK/notes.json +270 -82
  753. package/locales/zh-HK/projects.json +143 -21
  754. package/locales/zh-HK/protection.json +67 -3
  755. package/locales/zh-HK/publicFiles.json +20 -3
  756. package/locales/zh-HK/rbac.json +15 -2
  757. package/locales/zh-HK/readiness.json +35 -4
  758. package/locales/zh-HK/redis.json +27 -4
  759. package/locales/zh-HK/runtime.json +58 -11
  760. package/locales/zh-HK/search.json +5 -1
  761. package/locales/zh-HK/security.json +79 -18
  762. package/locales/zh-HK/serviceExposure.json +13 -1
  763. package/locales/zh-HK/services.json +69 -3
  764. package/locales/zh-HK/software.json +2 -1
  765. package/locales/zh-HK/softwareLifecycle.json +12 -2
  766. package/locales/zh-HK/ssl.json +13 -2
  767. package/locales/zh-HK/stackWizard.json +10 -3
  768. package/locales/zh-HK/support.json +22 -6
  769. package/locales/zh-HK/system.json +36 -7
  770. package/locales/zh-HK/systemd.json +9 -7
  771. package/locales/zh-HK/terminal.json +10 -2
  772. package/locales/zh-HK/translation.json +2475 -355
  773. package/locales/zh-HK/uiInline.json +3 -3
  774. package/locales/zh-HK/updates.json +77 -4
  775. package/locales/zh-HK/users.json +20 -2
  776. package/locales/zh-HK/validators.json +325 -0
  777. package/locales/zh-HK/vnc.json +23 -7
  778. package/locales/zh-HK/vpn.json +23 -8
  779. package/package.json +8 -9
@@ -15,7 +15,9 @@
15
15
  "failed": "Échoué",
16
16
  "error": "Erreur",
17
17
  "unknown": "Non sondé",
18
- "fallback": "Inconnu"
18
+ "fallback": "Inconnu",
19
+ "activating": "Starting",
20
+ "stuck": "Start stuck"
19
21
  },
20
22
  "liveN": "{{count}} en ligne",
21
23
  "registeredOnly": "Enregistré uniquement",
@@ -130,7 +132,20 @@
130
132
  "labelStderr": "stderr",
131
133
  "labelAckCli": "accusé de réception + CLI JSON",
132
134
  "labelStdoutBody": "Corps stdout CLI",
133
- "resultOuterHint": "Le résultat externe est la sortie stdout de CLI --json."
135
+ "resultOuterHint": "Le résultat externe est la sortie stdout de CLI --json.",
136
+ "statusFlowTitle": "Flux de statut",
137
+ "statusFlow": "Enregistré uniquement → en ligne → obsolète (> 60 s) → hors ligne (déconnecté). Le filtre « Hors ligne » est déconnecté.",
138
+ "colSession": "UUID de session",
139
+ "copySession": "Copier l'UUID de session pour le cluster/CLI --session",
140
+ "staleFor": "Invisible {{age}}",
141
+ "commandTitle": "Mettre une commande en file d'attente pour cette session",
142
+ "historyTitleShort": "Ouvrir l'historique des commandes (lecture seule)",
143
+ "expEdge": "Sur un bord :",
144
+ "noteAllowlist": "Agent tool calls must pass the allowlist.",
145
+ "noteRbacCap": "Agent role is capped at write-low.",
146
+ "journal": "journal",
147
+ "activatingStuckHint": "Activating longer than 5 minutes — treated as failed. Check journal.",
148
+ "noOnlineAgents": "No agents online"
134
149
  },
135
150
  "ai": {
136
151
  "status": {
@@ -248,7 +263,13 @@
248
263
  "cleanupConflicts": "Nettoyer les résidus de conflit",
249
264
  "cleanupConflictsTitle": "Nettoyer tous les résidus de conflit ?",
250
265
  "cleanupConflictsDesc": "Supprimez toutes les configurations d'artefacts sur disque en conflit avec un projet ou un nom de serveur autonome. Les lignes du projet sont conservées.",
251
- "artifactRemovedOk": "Conf résiduel supprimé"
266
+ "artifactRemovedOk": "Conf résiduel supprimé",
267
+ "sslTerminatedUpstream": "TLS se termine à l'avant de Nginx",
268
+ "removeArtifactHint": "Supprime seulement ce conf disque reliquat. Ne supprime pas le projet.",
269
+ "sourceOrphan": "Leftover",
270
+ "orphanSite": "Project gone",
271
+ "pillSitesSplit": "{{n}} sites · {{leftover}} leftover",
272
+ "stopSites": "{{n}} site(s) will stop answering HTTP."
252
273
  },
253
274
  "applyStatus": {
254
275
  "draft": "Brouillon",
@@ -285,7 +306,10 @@
285
306
  "project.publish": "Publier Nginx",
286
307
  "project.suspend": "Suspendre le projet",
287
308
  "software.install": "Installer un logiciel",
288
- "software.update": "Mettre à jour un logiciel"
309
+ "software.update": "Mettre à jour un logiciel",
310
+ "backup.restore": "Backup restore",
311
+ "backup.run": "Backup run",
312
+ "backup.delete": "Backup deleted"
289
313
  }
290
314
  },
291
315
  "backups": {
@@ -419,20 +443,55 @@
419
443
  "remotePushSub": "Après succès du tar local, envoyer vers SFTP, chemin local ou S3",
420
444
  "accessKey": "Clé d'accès",
421
445
  "secretKey": "Clé secrète",
422
- "overwriteConfirmHint": "Tapez OVERWRITE pour confirmer l'écrasement"
446
+ "overwriteConfirmHint": "Tapez OVERWRITE pour confirmer l'écrasement",
447
+ "testRemote": "Tester la destination",
448
+ "testRemoteDone": "Sonde distante terminée",
449
+ "testRemoteFailed": "Sonde distante échouée",
450
+ "resticRepoPh": "Répertoire de données du panneau / restic-repo",
451
+ "testDisabledHint": "Activez le push à distance avant de tester.",
452
+ "identityId": "Identité SSH sortante",
453
+ "identityHint": "Préféré. Même coffre-fort que /security SSH. Le mot de passe nécessite sshpass.",
454
+ "identityNone": "Aucun — mot de passe ou clé par défaut",
455
+ "remotePathHint": "Par rapport au domicile de l’utilisateur distant (ou chroot SFTP). \".\" est-ce que c'est la maison ?",
456
+ "restoreFullTitle": "Écraser les fichiers de projet et les bases de données de cette archive — saisissez le nom du fichier pour confirmer",
457
+ "restoreWebTitle": "Restaurer les fichiers du site Web uniquement à partir de cette archive",
458
+ "previewTitle": "Aperçu de la restauration sans écrire",
459
+ "partialSkipped": "Partiel – certains projets ignorés",
460
+ "testRemoteHint": "Connects to the remote host and writes a small probe file. Not read-only.",
461
+ "skippedListHint": "These projects were skipped:",
462
+ "goLogs": "Open logs",
463
+ "goAbout": "Backup notes",
464
+ "skippedPendingOs": "Skipped — OS user / home not provisioned",
465
+ "latestFile": "Latest archive",
466
+ "tabTrash": "Recycle bin",
467
+ "trashTitle": "Recycle bin ({{count}})",
468
+ "trashSub": "Deleted archives stay here for 7 days, then they are removed permanently.",
469
+ "trashEmpty": "Recycle bin is empty",
470
+ "trashEmptyDesc": "Deleted backup files appear here for 7 days.",
471
+ "trashRestore": "Restore",
472
+ "trashPurge": "Delete forever",
473
+ "trashEmptyAll": "Empty recycle bin",
474
+ "trashExpires": "Expires {{at}}",
475
+ "trashPurgeTitle": "Permanently delete this backup?",
476
+ "trashPurgeDesc": "Permanently delete {{name}}. This cannot be undone.",
477
+ "trashEmptyTitle": "Empty recycle bin?",
478
+ "trashEmptyDescConfirm": "Permanently delete {{count}} archive(s). Type the count to confirm.",
479
+ "trashRestored": "Restored from recycle bin",
480
+ "trashPurged": "Permanently deleted",
481
+ "trashedOk": "Moved to recycle bin"
423
482
  },
424
483
  "btTracker": {
425
484
  "title": "Traqueur BT",
426
485
  "sub": "Self-hosted BitTorrent / WebTorrent tracker for file shares",
427
486
  "pageDesc": "Seed panel file shares over BitTorrent. Start the tracker, set a public announce host, then create BT shares in Files.",
428
- "status": "Status",
429
- "running": "Running",
430
- "stopped": "Stopped",
487
+ "status": "Statut",
488
+ "running": "En cours d'exécution",
489
+ "stopped": "Arrêté",
431
490
  "installed": "Installed (bundled)",
432
491
  "start": "Start tracker",
433
492
  "stop": "Stop tracker",
434
- "refresh": "Refresh",
435
- "settings": "Settings",
493
+ "refresh": "Rafraîchir",
494
+ "settings": "Paramètres",
436
495
  "httpPort": "HTTP / WebSocket port",
437
496
  "udpPort": "UDP port (0 = off)",
438
497
  "listenHost": "Listen host",
@@ -451,18 +510,18 @@
451
510
  "torrentsEmpty": "No announce traffic yet",
452
511
  "torrentsEmptyHint": "Create a file share with BitTorrent mode in Files. This table fills as peers announce and the server seeds.",
453
512
  "torrentsDesc": "Live swarm from the tracker, plus local seeder status for panel shares.",
454
- "colName": "Name",
513
+ "colName": "Nom",
455
514
  "colHash": "Info hash",
456
- "colSeeds": "Seeds",
457
- "colLeechers": "Leechers",
458
- "colStatus": "Status",
515
+ "colSeeds": "Graines",
516
+ "colLeechers": "Sangsues",
517
+ "colStatus": "Statut",
459
518
  "announceUrls": "Announce URLs",
460
519
  "announceDesc": "Put these trackers in clients, or rely on magnets generated by the panel.",
461
- "copy": "Copy",
462
- "copied": "Copied",
520
+ "copy": "Copie",
521
+ "copied": "Copié",
463
522
  "statsTorrents": "Torrents",
464
- "statsPeers": "Peers",
465
- "statsAnnounces": "Announces",
523
+ "statsPeers": "Pairs",
524
+ "statsAnnounces": "Annonce",
466
525
  "statsJobs": "Active jobs",
467
526
  "openShares": "File shares",
468
527
  "needExecute": "Enable system-change permission (YSK_EXECUTE) to open ports and run production seeds.",
@@ -471,27 +530,27 @@
471
530
  "restoreSeeds": "Re-seed BT shares",
472
531
  "restoreSeedsHint": "Start tracker if needed and re-seed shares that still have a .torrent on disk.",
473
532
  "bundledNote": "Bundled with YSK Server (Node). No apt install/uninstall — Start/Stop manages the process.",
474
- "stackTitle": "Software",
533
+ "stackTitle": "Logiciel",
475
534
  "jobs": "Torrent jobs",
476
535
  "jobsEmpty": "No background torrent jobs",
477
536
  "jobsEmptyHint": "Large shares (≥128 MiB) build .torrent files in the background so the Files dialog stays responsive.",
478
537
  "jobsDesc": "Background create-torrent queue for large file or folder shares.",
479
- "colJob": "Job",
480
- "colShare": "Share",
538
+ "colJob": "Emploi",
539
+ "colShare": "Partager",
481
540
  "colJobStatus": "Job status",
482
541
  "colEnqueued": "Enqueued",
483
542
  "refreshJobs": "Refresh jobs",
484
- "tabOverview": "Overview",
543
+ "tabOverview": "Aperçu",
485
544
  "tabTorrents": "Torrents",
486
- "tabJobs": "Jobs",
487
- "tabSettings": "Settings",
488
- "tabAbout": "About",
545
+ "tabJobs": "Emplois",
546
+ "tabSettings": "Paramètres",
547
+ "tabAbout": "À propos",
489
548
  "heroRunning": "Tracker is live",
490
549
  "heroStopped": "Tracker is stopped",
491
550
  "heroRunningSub": "Peers can announce and discover seeds for panel shares.",
492
551
  "heroStoppedSub": "Start the tracker before sharing large files over BitTorrent.",
493
- "live": "Live",
494
- "liveOff": "Idle",
552
+ "live": "En direct",
553
+ "liveOff": "Inactif",
495
554
  "quickStart": "Quick start",
496
555
  "quickStartDesc": "Three steps to share files over BitTorrent.",
497
556
  "step1Title": "Set public announce host",
@@ -500,28 +559,28 @@
500
559
  "step2Hint": "Open port exposure if peers are off this host.",
501
560
  "step3Title": "Create a BT share",
502
561
  "step3Hint": "In Files → Share, choose BitTorrent or both.",
503
- "stepDone": "Done",
504
- "stepTodo": "Todo",
505
- "networkCard": "Network",
562
+ "stepDone": "Fait",
563
+ "stepTodo": "Faire",
564
+ "networkCard": "Réseau",
506
565
  "networkCardDesc": "Where the tracker listens and what host appears in magnets.",
507
- "seederCard": "Seeder",
566
+ "seederCard": "Semoir",
508
567
  "seederCardDesc": "In-process WebTorrent seeder limits and peer ports.",
509
- "lifecycleCard": "Lifecycle",
568
+ "lifecycleCard": "Cycle de vie",
510
569
  "lifecycleCardDesc": "Boot behaviour and how the service is packaged.",
511
570
  "pid": "PID",
512
571
  "port": "Port",
513
572
  "announceHost": "Announce host",
514
573
  "goSettings": "Open settings",
515
574
  "searchTorrents": "Search name or hash…",
516
- "filterAll": "All",
517
- "filterSeeding": "Seeding",
518
- "filterOther": "Other",
575
+ "filterAll": "Tous",
576
+ "filterSeeding": "Semis",
577
+ "filterOther": "Autre",
519
578
  "noMatch": "No torrents match your filter",
520
- "seedStatusSeeding": "Seeding",
521
- "seedStatusPending": "Pending",
522
- "seedStatusError": "Error",
523
- "seedStatusStopped": "Stopped",
524
- "seedStatusNone": "None",
579
+ "seedStatusSeeding": "Semis",
580
+ "seedStatusPending": "En attente",
581
+ "seedStatusError": "Erreur",
582
+ "seedStatusStopped": "Arrêté",
583
+ "seedStatusNone": "Aucun",
525
584
  "notesTitle": "Service notes",
526
585
  "exposureTitle": "Network access",
527
586
  "protoHttp": "HTTP",
@@ -538,14 +597,96 @@
538
597
  "udpPortClassic": "6969 · Classic",
539
598
  "portSuggest8000": "8000 · Recommended",
540
599
  "saveOkRestart": "Enregistré - redémarrez le tracker pour appliquer les ports",
541
- "announceHostUnset": ""
600
+ "announceHostUnset": "Non défini",
601
+ "tabTrackers": "Traqueurs",
602
+ "addTorrent": "Ajouter un torrent",
603
+ "addTorrentTitle": "Ajouter un torrent",
604
+ "addTorrentHint": "Téléchargez un .torrent ou collez un aimant. Choisissez un dossier Fichiers. WebTorrent télécharge les fichiers et les graines manquants une fois terminé.",
605
+ "dropTorrent": "Déposez un .torrent ici",
606
+ "chooseFile": "ou choisissez un fichier",
607
+ "magnetLabel": "Aimant",
608
+ "magnetPlaceholder": "aimant:?xt=urne:btih:…",
609
+ "inspect": "Lire",
610
+ "extraTrackersPreview": "Annoncera également à {{n}} tracker(s) supplémentaire(s)",
611
+ "saveLocation": "Enregistrer l'emplacement",
612
+ "saveRootPublic": "Fichiers publics",
613
+ "newFolder": "Nouveau dossier",
614
+ "destPreview": "Écrirai à",
615
+ "startDownload": "Démarrer le téléchargement",
616
+ "filterDownloading": "Téléchargement",
617
+ "filterPaused": "En pause",
618
+ "filterError": "Erreur",
619
+ "emptyDrop": "Déposez un .torrent ici ou choisissez un fichier",
620
+ "emptyHint": "Les fichiers vont dans le dossier que vous choisissez. S'ils sont déjà terminés, cet hôte héberge des graines. Moteur : WebTorrent — aucun logiciel de téléchargement supplémentaire.",
621
+ "pause": "Pause",
622
+ "resume": "CV",
623
+ "openFolder": "Ouvrir le dossier",
624
+ "remove": "Retirer",
625
+ "removeKeep": "Supprimer, conserver les fichiers",
626
+ "removeDelete": "Supprimer et supprimer des fichiers",
627
+ "removeConfirm": "Supprimer ce torrent de la bibliothèque ?",
628
+ "kindShare": "Partager",
629
+ "filesInTorrent": "fichiers",
630
+ "extraTrackersDesc": "URL d'annonce supplémentaires. Les téléchargements/graines de bibliothèque et les graines de partage de fichiers les utilisent en plus de la liste .torrent. Cela n’ouvre pas le tracker local aux essaims arbitraires.",
631
+ "extraTrackersEmpty": "Pas de trackers supplémentaires. Ajoutez des URL d'annonce HTTP(S), UDP ou WS(S) afin que cet hôte puisse trouver des homologues.",
632
+ "extraTrackerAdd": "Ajouter",
633
+ "extraTrackerUrl": "Annoncer l'URL",
634
+ "extraTrackerApply": "Appliquer sur les graines actuelles",
635
+ "extraTrackerApplyOk": "Trackers supplémentaires appliqués",
636
+ "extraEnabled": "Sur",
637
+ "extraTrackerBad": "L'URL doit commencer par http://, https://, udp://, ws:// ou wss://",
638
+ "extraTrackerDup": "Déjà répertorié",
639
+ "extraTrackerLimit": "Maximum 32 trackers supplémentaires",
640
+ "addOk": "Ajouté à la bibliothèque",
641
+ "savedTo": "Sauvegarder",
642
+ "folderEmpty": "Aucun sous-dossier",
643
+ "needTorrentFile": "Choisissez un fichier .torrent",
644
+ "torrentTooBig": ".torrent supérieur à 8 Mio",
645
+ "seedStatusDownloading": "Téléchargement",
646
+ "seedStatusChecking": "Vérification",
647
+ "seedStatusPaused": "En pause",
648
+ "seedStatusQueued": "En file d'attente",
649
+ "swarmLeftover": "Le Tracker a {{count}} annonce(s) hors bibliothèque (source distincte de la liste des torrents)",
650
+ "addSourceSection": "Source",
651
+ "addSourceFile": "Fichier",
652
+ "addSourceMagnet": "Aimant",
653
+ "previewSection": "Aperçu",
654
+ "saveRoot": "Racine",
655
+ "clearFile": "Retirer le fichier",
656
+ "extraTrackersTitle": "Announce supplémentaire",
657
+ "extraTrackersEmptyTitle": "Aucun tracker pour l’instant",
658
+ "extraEnabledCount": "{{count}} activé(s)",
659
+ "extraApplyHint": "Activez-en au moins un pour l’appliquer aux seeds en cours",
660
+ "destMode": "Utilisation de ce dossier",
661
+ "seedExisting": "Seeder les fichiers existants",
662
+ "downloadNewFolder": "Télécharger dans un nouveau dossier",
663
+ "destFileConflict": "Un fichier {{name}} existe déjà ici. Choisissez un autre dossier, ou seedez le fichier existant s’il correspond.",
664
+ "waitingPeers": "En attente de pairs. Si les fichiers sont déjà sur cet hôte, ajoutez à nouveau et choisissez de seeder les existants.",
665
+ "stopTitle": "Arrêtez le tracker - l'amorçage et les téléchargements seront interrompus",
666
+ "stopDesc": "Les torrents en cours d'exécution arrêtent d'annoncer. Les pairs se déconnectent jusqu'à ce que vous redémarriez le tracker.",
667
+ "fillPublicHost": "Utilisez {{host}}",
668
+ "fillPublicHostTitle": "Remplissez le nom d'hôte actuel du panneau en tant qu'hôte d'annonce publique",
669
+ "listenHostHint": "0.0.0.0 listens on every address. Prefer 127.0.0.1 unless peers must reach this host.",
670
+ "listenAllWarn": "Tracker is bound to all addresses. With the firewall off this is public. Bind 127.0.0.1 for local-only, or restrict the port in the firewall.",
671
+ "bindLoopback": "127.0.0.1 only",
672
+ "bindAll": "0.0.0.0 (all)",
673
+ "seederPortMin": "Peer port start",
674
+ "seederPortMax": "Peer port end",
675
+ "statsLibrary": "Library",
676
+ "statsLibraryHint": "Torrents in the panel library / file shares",
677
+ "statsTrackerLeftover": "Tracker leftover",
678
+ "statsTrackerLeftoverHint": "Tracker announce hashes that are not library rows",
679
+ "statsAnnouncesHint": "Announce requests seen by the tracker process",
680
+ "leftoverHashesTitle": "Tracker leftover hashes",
681
+ "leftoverHashesHint": "Read-only. These announces are not library or share rows.",
682
+ "publicHostMissingLive": "Tracker is listening but public announce host is not set. Off-host peers cannot find this seed."
542
683
  },
543
684
  "catalog": {
544
685
  "sw": {
545
686
  "vsftpd": "vsftpd (FTPS)",
546
- "db_util": "db-util (base utilisateurs FTP)",
687
+ "db_util": "db-util (base de données utilisateur FTP)",
547
688
  "nginx": "Nginx",
548
- "certbot": "Certbot (Chiffrons)",
689
+ "certbot": "Certbot (Let's Encrypt)",
549
690
  "mysql_client": "Client MySQL/MariaDB",
550
691
  "mysql_server": "Serveur MySQL",
551
692
  "mariadb_server": "Serveur MariaDB",
@@ -554,10 +695,10 @@
554
695
  "redis_tools": "Client Redis",
555
696
  "redis_server": "Serveur Redis",
556
697
  "ufw": "Pare-feu UFW",
557
- "fail2ban": "échec2ban",
698
+ "fail2ban": "fail2ban",
558
699
  "postfix": "Postfix",
559
- "dovecot": "Pigeonnier",
560
- "opendkim": "OuvrirDKIM",
700
+ "dovecot": "Dovecot",
701
+ "opendkim": "OpenDKIM",
561
702
  "pdns_server": "PowerDNS",
562
703
  "git": "Git",
563
704
  "node": "Node.js",
@@ -565,7 +706,7 @@
565
706
  "python": "Python",
566
707
  "go": "Go",
567
708
  "rust": "Rust",
568
- "chromium": "Chrome / Chrome"
709
+ "chromium": "Chromium / Chrome"
569
710
  },
570
711
  "php": {
571
712
  "session": "Session",
@@ -689,7 +830,95 @@
689
830
  "deleteNodeDesc": "Supprime le nœud CDN « {{name}} ».",
690
831
  "deleteSiteDesc": "Supprime le site CDN « {{name}} ».",
691
832
  "deleteSiteC1": "Politique du site et associations edge",
692
- "deleteSiteC2": "Les configs nginx appliquées peuvent nécessiter un nettoyage ou une réapplication séparés"
833
+ "deleteSiteC2": "Les configs nginx appliquées peuvent nécessiter un nettoyage ou une réapplication séparés",
834
+ "statOnline": "Online",
835
+ "statOffline": "Hors ligne {{n}}",
836
+ "statHitRate": "Taux de réussite {{v}}",
837
+ "hitNoStats": "Pas encore de stats de bord",
838
+ "loopbackOriginBlocked": "N’appliquera pas l’origin de bouclage {{url}} à un bord distant. Définissez un origin joignable.",
839
+ "applyFailedHint": "Échec d’application — voir les notes ci-dessous",
840
+ "applyStatus": {
841
+ "draft": "Brouillon",
842
+ "planned": "Planifié",
843
+ "applying": "Application…",
844
+ "applied": "Appliqué",
845
+ "failed": "Échoué",
846
+ "partial": "Partiel"
847
+ },
848
+ "drain": "Vidange",
849
+ "drainTitle": "Arrêtez d'envoyer du nouveau trafic CDN vers ce périphérique",
850
+ "drainDesc": "Vider « {{name}} » ? Les connexions existantes restent jusqu'à leur fin.",
851
+ "drainLastTitle": "C'est le dernier bord : le drainage laissera chaque site sans bord",
852
+ "drainLastDesc": "«{{name}}» est le seul avantage. Égouttez-le et tous les sites n'ont aucun bord.",
853
+ "clearDrainTitle": "Acceptez à nouveau le nouveau trafic sur ce bord",
854
+ "clearDrainDesc": "Vider la vidange sur « {{name}} » ?",
855
+ "deleteNodeTitle": "Supprimer ce bord CDN",
856
+ "deleteLastNodeTitle": "Supprimez le dernier bord : tous les sites n'auront aucun bord",
857
+ "purge": "Purge",
858
+ "previewTitle": "Aperçu de la configuration nginx (pas d'écriture)",
859
+ "writeConfTitle": "Écrire les fichiers de configuration Edge Nginx",
860
+ "applyEdgesTitle": "Appliquer ce site aux bords (écrit nginx)",
861
+ "purgeTitle": "Purger le cache sur les bords",
862
+ "dnsSyncTitle": "Écrire des enregistrements DNS CDN",
863
+ "probeDnsTitle": "Bords de sonde et DNS (lecture seule)",
864
+ "distSslTitle": "Copier les matériaux TLS sur les bords",
865
+ "leIssueTitle": "Émettez un certificat Let’s Encrypt et distribuez-le",
866
+ "deleteSiteTitle": "Supprimer ce site CDN",
867
+ "siteOpConfirmGeneric": "Exécuter cette action sur « {{name}} » ?",
868
+ "siteOpConfirmDesc": "Site « {{name}} » · {{action}}. Cela peut modifier nginx, DNS ou les certificats.",
869
+ "siteOpConfirm": {
870
+ "apply": "Appliquer ce site aux bords ?",
871
+ "render": "Écrire la configuration nginx pour ce site ?",
872
+ "purge": "Vider le cache de ce site ?",
873
+ "dns-sync": "Synchroniser le DNS pour ce site ?",
874
+ "dist": "Distribuer TLS sur les bords ?",
875
+ "issue": "Problème Chiffrons et distribuons ?"
876
+ },
877
+ "pillNodesSites": "{{n}} nœuds · {{s}} sites",
878
+ "statHit": "Taux de réussite",
879
+ "hitUnknown": "Inconnu",
880
+ "lastHealthHint": "Dernière sonde {{at}} · {{ok}}",
881
+ "lastHealthNever": "Pas encore sondé – exécutez Probe",
882
+ "lastHealthFail": "la sonde a échoué",
883
+ "healthLoopNeedSites": "Ajoutez d'abord un site",
884
+ "nodeStatus": {
885
+ "online": "en ligne",
886
+ "offline": "hors ligne",
887
+ "draining": "évacuation",
888
+ "unknown": "inconnu"
889
+ },
890
+ "statOnlineOf": "Online {{n}}/{{total}}",
891
+ "statDraining": "Draining {{n}}",
892
+ "localTest": "local / test",
893
+ "colRegion": "Region",
894
+ "previewOnlyNote": "Preview only — nothing was written to the edges.",
895
+ "statByRegion": "Region: ",
896
+ "statByApply": "Apply status: ",
897
+ "col": {
898
+ "origin": "Origin",
899
+ "edges": "Edges",
900
+ "apply": "Apply",
901
+ "dns": "DNS",
902
+ "edgesOnline": "Edges online / applied",
903
+ "dnsRr": "CDN DNS records"
904
+ },
905
+ "mode": {
906
+ "origin_pull": "Origin pull",
907
+ "reverse_proxy": "Reverse proxy",
908
+ "static_edge": "Static edge"
909
+ },
910
+ "dnsStrategy": {
911
+ "multi_a": "Multiple A records",
912
+ "cname": "CNAME",
913
+ "geo": "Geo"
914
+ },
915
+ "edgesOnlineApplied": "{{online}}/{{total}} online · {{applied}} applied",
916
+ "hitMiss": "Hits {{hits}} / misses {{misses}}",
917
+ "cacheBytes": "Cache ≈ {{n}} B",
918
+ "hitRateUnknown": "No access log with cache status and no cache directory, so hit rate cannot be estimated.",
919
+ "offlineHint": "Offline — probe failed. Remove the node if it is leftover.",
920
+ "applyFailedNoNote": "No stored reason. Re-apply to capture the error.",
921
+ "statApplyFailed": "Apply failed"
693
922
  },
694
923
  "cli": {
695
924
  "unknownCommand": "Commande inconnue : {{command}}\nExécutez `{{cli}} help`",
@@ -705,7 +934,7 @@
705
934
  },
706
935
  "help": {
707
936
  "blurb": "CLI du plan de contrôle — préférez --json pour les agents IA.\nDocs : docs/agent/README.md · docs/cli/reference.md · docs/agent/commands.json",
708
- "main": "{{product}} ({{cli}}) v{{version}}\n\nCLI du plan de contrôle — préférez --json pour les agents IA.\nDocs : docs/agent/README.md · docs/cli/reference.md · docs/agent/commands.json\n\nUtilisation :\n {{cli}} <command> [options]\n\nCommandes :\n setup Init dataDir + admin\n update Vérif./appl. auto-mise à jour\n serve API HTTP + interface Web\n system unit-install Installer ysk-server.service [--enable]\n tools Lister les outils ; tools run --tool <name> [--dry-run]\n ask NL → plan IA [--execute]\n projects list|get|create|deploy|stop|health|backup|template\n backup all|list|status|restore|delete|schedule|control-plane|settings|restic\n templates Modèles d'applications\n hosting aides nginx|dns|db|firewall\n dns zone|zones (alias IA → hosting dns-*)\n logs sources|query|journal|overview\n host overview|metrics (lecture seule)\n nginx status|list|test|sync\n ssl list|get (certificats)\n db-cluster list|get|create|plan (HA plan d'abord)\n ssh-key list|create|import|public|export|install|delete (coffre d'identités SSH)\n ssh-2fa list|enroll|confirm|install|pam|retire (TOTP connexion SSH ≠ 2FA panneau)\n services Matrice des services hôte (sondage systemctl)\n defense | protection status|ban|unban|whitelist\n security status|sessions|api-keys (flags 2FA · révocation session · clés API)\n cdn nodes|sites|render|apply|purge|probe|dashboard|health-loop|from-project\n agents runtimes|fleet list|commands|register (panneau + edge)\n agent run Sondeur de flotte sortant (expérimental)\n store status|export|import|migrate (backends document json|sqlite|postgres)\n files list|read|write|mkdir|rm|stat|rename|copy|move|chmod|trash|shares (bac à sable)\n cron list|create|delete|enable|disable|run|install|status\n email domains|mailboxes|deliverability|bootstrap|dns (parité panneau)\n health Instantané mode local ou --url http://host:port/health\n readiness | doctor Préparation production (honnête)\n migrate inventory|host|post|status|resume (migration hôte complète)\n version | help\n\nGlobal :\n --json stdout JSON (IA)\n --data-dir PATH\n --config PATH\n --help | --version\n\nSortie : 0 ok · 1 erreur · 2 validation · 3 bloqué · 4 introuvable · 5 erreur hôte\n\nSécurité :\n Les ops dangereuses sont en dry-run par défaut (plan seulement).\n Passez --execute (alias --apply) + env YSK_EXECUTE=1 pour modifier l'hôte.\n\nExemples :\n {{cli}} readiness --json\n {{cli}} host --json\n {{cli}} nginx status --json\n {{cli}} ssl list --json\n {{cli}} projects get --id UUID --json\n {{cli}} defense ban --ip 1.2.3.4 --json # plan dry-run\n {{cli}} projects list --json\n {{cli}} logs query --source journal: --lines 100 --json\n {{cli}} tools --json"
937
+ "main": "{{product}} ({{cli}}) v{{version}}\n\nCLI du plan de contrôle — préférez --json pour les agents IA.\nDocs : docs/agent/README.md · docs/cli/reference.md · docs/agent/commands.json\n\nUtilisation :\n {{cli}} <command> [options]\n\nCommandes :\n setup Init dataDir + admin\n update Vérif./appl. auto-mise à jour\n serve API HTTP + interface Web\n system unit-install Installer ysk-server.service [--enable]\n tools Lister les outils ; tools run --tool <name> [--dry-run]\n ask NL → plan IA [--execute]\n projects list|get|create|deploy|stop|health|backup|template\n backup all|list|status|restore|delete|schedule|control-plane|settings|restic\n templates Modèles d'applications\n hosting aides nginx|dns|db|firewall\n dns zone|zones (alias IA → hosting dns-*)\n logs sources|query|journal|overview\n host overview|metrics (lecture seule)\n nginx status|list|test|sync\n ssl list|get (certificats)\n db-cluster list|get|create|plan (HA plan d'abord)\n ssh-key list|create|import|public|export|install|delete (coffre d'identités SSH)\n ssh-2fa list|enroll|confirm|install|pam|retire (TOTP connexion SSH ≠ 2FA panneau)\n services Matrice des services hôte (sondage systemctl)\n defense | protection status|ban|unban|whitelist\n security status|sessions|api-keys (flags 2FA · révocation session · clés API)\n cdn nodes|sites|render|apply|purge|probe|dashboard|health-loop|from-project\n agents runtimes|fleet list|commands|register (panneau + edge)\n agent run Sondeur de flotte sortant (expérimental)\n store status|export|import|migrate (backends document json|sqlite|postgres)\n files list|read|write|mkdir|rm|stat|rename|copy|move|chmod|trash|shares (bac à sable)\n cron list|create|delete|enable|disable|run|install|status\n email domains|mailboxes|deliverability|bootstrap|dns (parité panneau)\n health Instantané mode local ou --url http://host:port/health\n readiness | doctor Préparation production (honnête)\n migrate inventory|host|post|status|resume (migration hôte complète)\n validators list|chains|disk|get (Beta)\n docker status|ps|images|compose|prune (engine)\n version | help\n\nGlobal :\n --json stdout JSON (IA)\n --data-dir PATH\n --config PATH\n --help | --version\n\nSortie : 0 ok · 1 erreur · 2 validation · 3 bloqué · 4 introuvable · 5 erreur hôte\n\nSécurité :\n Les ops dangereuses sont en dry-run par défaut (plan seulement).\n Passez --execute (alias --apply) + env YSK_EXECUTE=1 pour modifier l'hôte.\n\nExemples :\n {{cli}} readiness --json\n {{cli}} host --json\n {{cli}} nginx status --json\n {{cli}} ssl list --json\n {{cli}} projects get --id UUID --json\n {{cli}} defense ban --ip 1.2.3.4 --json # plan dry-run\n {{cli}} projects list --json\n {{cli}} logs query --source journal: --lines 100 --json\n {{cli}} tools --json"
709
938
  },
710
939
  "usage": {
711
940
  "tools": {
@@ -1575,7 +1804,7 @@
1575
1804
  },
1576
1805
  "status": {
1577
1806
  "bans": {
1578
- "a8d96b": "Utilisation : {{CLI_NAME}} defense status|bans|suspects|ban|unban|whitelist|stack-apply|fail2ban|firewall|timeline|presets [--json]\n` +\n ` bans [--q text] [--source fail2ban|panel|ufw|auto]\n` +\n ` suspects [--q text]\n` +\n ` stack-apply [--execute] # UFW + fail2ban + preset actuel\n` +\n ` fail2ban | firewall # sondes approfondies (honnêtes)\n` +\n ` timeline [--limit N] [--q text]\n` +\n ` presets # liste + activePreset\n"
1807
+ "a8d96b": "Utilisation : {{CLI_NAME}} defense status|bans|suspects|ban|unban|whitelist|stack-apply|fail2ban|firewall|timeline|presets [--json]\n bans [--q text] [--source fail2ban|panel|ufw|auto]\n suspects [--q text]\n stack-apply [--execute] # UFW + fail2ban + preset actuel\n fail2ban | firewall # sondes approfondies (honnêtes)\n timeline [--limit N] [--q text]\n presets # liste + activePreset\n"
1579
1808
  }
1580
1809
  }
1581
1810
  }
@@ -1741,7 +1970,7 @@
1741
1970
  }
1742
1971
  },
1743
1972
  "x": {
1744
- "972912": "Utilisation :\n ysk-server migrate inventory [--data-dir PATH] --json\n ysk-server migrate host --target root@IP [--identity-file PATH|--identity-id ID|--password PW] --execute [--maintenance] [--force-wipe-target]\n ysk-server migrate post --job ID --data-dir PATH --execute # sur la cible\n ysk-server migrate status [--job ID]\n ysk-server migrate resume --job ID --execute\n"
1973
+ "972912": "Utilisation :\n ysk-server migrate inventory [--data-dir PATH] --json\n ysk-server migrate host --target root@IP [--identity-file PATH|--identity-id ID|--password PW] --execute [--maintenance] [--force-wipe-target]\n ysk-server migrate post --job ID --data-dir PATH --execute # sur la cible\n ysk-server migrate status [--job ID]\n ysk-server migrate resume --job ID --execute\n ysk-server migrate orphan-homes [--data-dir PATH] --json\n ysk-server migrate orphan-homes --path /home/ysk-server-UUID --confirm PATH --execute\n"
1745
1974
  },
1746
1975
  "hostingHelp": "Utilisation : ysk-server hosting <sub>\n Ops dangereuses en simulation par défaut ; ajoutez --execute (+ YSK_EXECUTE=1) pour appliquer\n nginx | nginx-sync [--execute]\n redis-provision | postgres-provision | mysql-provision [--execute]\n dns-zone --zone X --ip A.B.C.D [--ipv6 X:X::X] [--validate] [--reload]\n dns-zones | powerdns-status | powerdns-install [--install|--execute]\n powerdns-load --zone X --ip A.B.C.D [--load|--execute]\n email-apply --domain X [--install|--execute]\n email-mailbox --domain X --local user [--password P] [--ip A.B.C.D] [--system]\n ftps-apply --domain X [--install|--execute]\n runtimes | runtime-install --kind node|php|python|go|rust --version V [--install|--execute]\n dovecot-passdb --domain X | --all\n webmail-apply --domain webmail.example.com [--download]\n public-files --domain files.example.com [--reload]\n email-bootstrap --domain example.com --ip A.B.C.D [--install|--execute]\n email-deliverability --domain example.com # pack PTR/DNSBL/warmup (honnête)\n firewall-apply [--smtp] [--execute]\n",
1747
1976
  "logsQuery": "Utilisation : {{CLI_NAME}} logs query --source <id> [--lines N] [--grep G] [--since 1h] [--priority err]\n exemples de source : journal: journal:nginx.service file:syslog project:<uuid>\n {{CLI_NAME}} logs sources --json\n {{CLI_NAME}} logs journal [--unit nginx.service] --json\n"
@@ -1910,6 +2139,7 @@
1910
2139
  "noData": "Aucune donnée",
1911
2140
  "input": "Entrée",
1912
2141
  "pleaseEnter": "Saisir {{value}}",
2142
+ "required": "Obligatoire",
1913
2143
  "about": "À propos",
1914
2144
  "operation": "Actes",
1915
2145
  "delete": "Supprimer",
@@ -1996,7 +2226,14 @@
1996
2226
  "show": "Afficher",
1997
2227
  "done": "Fait",
1998
2228
  "next": "Suivant",
1999
- "previous": "Précédent"
2229
+ "previous": "Précédent",
2230
+ "all": "Tous",
2231
+ "showPassword": "Montrer",
2232
+ "hidePassword": "Cacher",
2233
+ "more": "Plus",
2234
+ "redirectedTo": "Ouvert {{to}} (était {{from}})",
2235
+ "unavailable": "Not available right now",
2236
+ "ok": "OK"
2000
2237
  },
2001
2238
  "cron": {
2002
2239
  "presetCdTrue": "application cd + vrai (test)",
@@ -2135,7 +2372,39 @@
2135
2372
  "sourceHost": "Hôte",
2136
2373
  "noHostJobs": "Aucune tâche crontab dans cette portée",
2137
2374
  "hostPartial": "Impossible de lire tous les crontabs utilisateur (root requis)",
2138
- "pendingInstall": "Installation en attente ({{count}})"
2375
+ "pendingInstall": "Installation en attente ({{count}})",
2376
+ "hourRange": "L'heure doit être comprise entre 0 et 23.",
2377
+ "minuteRange": "Les minutes doivent être comprises entre 0 et 59.",
2378
+ "hoursCommon": "Horaires communs",
2379
+ "hoursAll": "Toutes les heures",
2380
+ "invalidExpr": "Ce n'est pas une expression cron à 5 champs valide.",
2381
+ "needCommand": "Le commandement est requis.",
2382
+ "needUser": "Choisissez un projet ou un utilisateur système.",
2383
+ "hostCounts": "Lignes hôtes",
2384
+ "hostCountsVal": "{{ysk}} · autres {{other}} · total {{total}}",
2385
+ "hostYskYes": "lignes de panneaux présentes",
2386
+ "hostYskNo": "pas de lignes de panneaux",
2387
+ "emptyHostCrontab": "Pas de crontab pour {{user}}.",
2388
+ "writtenOnHost": "Written",
2389
+ "registeredJobsChip": "Registered",
2390
+ "registeredVsWritten": "Registered in the panel vs written to host crontab",
2391
+ "installPreviewTitle": "Preview before installing to system crontab",
2392
+ "installPreviewDesc": "This merges the YSK block into the host crontab. Existing non-YSK lines stay.",
2393
+ "installPreviewMerge": "Install writes a YSK Server crontab merge block. It does not replace the whole crontab.",
2394
+ "installPreviewEmpty": "No pending managed jobs — install still refreshes the YSK block.",
2395
+ "editJobTitle": "Edit job",
2396
+ "editJobDesc": "Changes stay in the panel until you install to the system crontab.",
2397
+ "saveJob": "Save (management only)",
2398
+ "panelLines": "Panel lines",
2399
+ "otherLines": "Other lines",
2400
+ "totalLines": "Total",
2401
+ "writtenOnHostHint": "Lines already written to the host crontab",
2402
+ "registeredJobsHint": "Jobs registered in the panel (including pending install)",
2403
+ "pendingInstallCount": "{{n}} pending install",
2404
+ "systemJobBadge": "No project · system user",
2405
+ "willNotRun": "Not written to system crontab — will not run.",
2406
+ "pendingStale": "Not written to system crontab for {{days}} day(s) — it will not run.",
2407
+ "jobsTabPending": "Jobs ({{count}}) · pending {{pending}}"
2139
2408
  },
2140
2409
  "dashboard": {
2141
2410
  "title": "Tableau de bord",
@@ -2181,7 +2450,8 @@
2181
2450
  "mode": {
2182
2451
  "degraded": "dégradé",
2183
2452
  "production_capable": "prêt pour la production",
2184
- "normal": "normale"
2453
+ "normal": "normale",
2454
+ "blocked": "blocked"
2185
2455
  },
2186
2456
  "details": "Détails",
2187
2457
  "certExpiryTitle": "Expiration du certificat :",
@@ -2224,7 +2494,7 @@
2224
2494
  "runtime": "Durée d'exécution",
2225
2495
  "runtimeHint": "Définit la version runtime et le style de déploiement par défaut",
2226
2496
  "runtimeVersion": "Version du runtime",
2227
- "versionHint": "Stocké comme runtime_version du projet",
2497
+ "versionHint": "Écrit le réglage de version d’environnement d’exécution du projet",
2228
2498
  "serverIpv4": "IPv4 du serveur",
2229
2499
  "serverIpv4Hint": "DNS A / courrier SPF",
2230
2500
  "serverIpv4Ph": "IPv4 public de cet hôte",
@@ -2246,7 +2516,27 @@
2246
2516
  "noNotifs": "Aucune notification",
2247
2517
  "noNotifsDesc": "Les alertes système et les tâches apparaissent ici",
2248
2518
  "applyAuditTitle": "Audit de l’état d’application",
2249
- "applyAuditDesc": "ok {{ok}} · avert. {{warn}} · erreur {{bad}}"
2519
+ "applyAuditDesc": "ok {{ok}} · avert. {{warn}} · erreur {{bad}}",
2520
+ "barTitle": "{{count}} alerte(s) hôte",
2521
+ "levelCritical": "Critique",
2522
+ "levelWarn": "Avertissement",
2523
+ "levelInfo": "Informations",
2524
+ "colTitle": "Alerte",
2525
+ "colDetail": "Détail",
2526
+ "colSource": "Source",
2527
+ "notifSearch": "Rechercher des alertes",
2528
+ "notifAll": "Tous",
2529
+ "notifDismiss": "Cacher",
2530
+ "goFix": "Réparer",
2531
+ "needDomainFirst": "Saisissez d’abord un domaine",
2532
+ "serviceAria": "{{name}}: {{state}}",
2533
+ "sev": {
2534
+ "ok": "OK",
2535
+ "warn": "Warning",
2536
+ "bad": "Problem"
2537
+ },
2538
+ "publicNo2fa": "This panel listens on all interfaces and your admin account has no 2FA.",
2539
+ "readinessBlocked": "{{n}} blocker(s)"
2250
2540
  },
2251
2541
  "dataTable": {
2252
2542
  "empty": "Aucune donnée",
@@ -2471,7 +2761,54 @@
2471
2761
  "probe": "Sonder",
2472
2762
  "name": "Nom",
2473
2763
  "type": "Taper",
2474
- "status": "Statut"
2764
+ "status": {
2765
+ "healthy": "En bonne santé",
2766
+ "planned": "Prévu",
2767
+ "partial": "Partiel",
2768
+ "failed": "Échoué",
2769
+ "draft": "Brouillon",
2770
+ "degraded": "Dégradé",
2771
+ "applied": "Appliqué"
2772
+ },
2773
+ "fleetSession": "Identifiant de session de l'agent de flotte",
2774
+ "fleetSessionHint": "Optional. Paste a session UUID from /agents. Then this peer uses fleet (no SSH). Leave empty for SSH scp.",
2775
+ "fleetSessionPh": "UUID de la session de la page Agents",
2776
+ "engineNotInstalled": "{{engine}} n'est pas installé sur cet hôte — installez-le d'abord ou ouvrez le moteur qui est réellement en cours d'exécution.",
2777
+ "fleetSessionNone": "Aucun — utilisez SSH",
2778
+ "fleetSessionOpenAgents": "Ouvrir /agents pour enregistrer une session",
2779
+ "createWizardTitle": "Ouvre l'assistant de plan. Nécessite une adresse IP locale et ≥1 homologue. Écrit uniquement les artefacts du panneau (essai à sec). Ne redémarre pas le moteur jusqu'à ce que vous l'appliquiez.",
2780
+ "bootstrap": "Amorçage",
2781
+ "fleetApply": "Flotte postuler",
2782
+ "planTitle": "Régénérer le plan de cluster (pas de changement d'hôte)",
2783
+ "writeFileTitle": "Écrire les fichiers de gestion sous le répertoire de données du panneau (essai à sec)",
2784
+ "probeLocalTitle": "Sonder cet hôte uniquement",
2785
+ "probeAllTitle": "Sondez chaque membre enregistré",
2786
+ "bootstrapTitle": "Installez le drop-in local et amorcez le premier nœud",
2787
+ "remoteInstallPlanTitle": "Aperçu de l'installation à distance (pas d'exécution)",
2788
+ "downloadBundleTitle": "Téléchargez le bundle de configuration entre pairs (.tar.gz)",
2789
+ "pushPlanTitle": "Aperçu push to peer (pas de scp)",
2790
+ "fleetSyncPlanTitle": "Aperçu de la synchronisation de la flotte (pas d'exécution)",
2791
+ "fleetApplyTitle": "La mise en file d'attente s'applique-t-elle aux membres de la flotte ?",
2792
+ "redirectedFromCluster": "You were redirected here from /cluster. This is the database cluster tab.",
2793
+ "roleUnassigned": "No role assigned",
2794
+ "standaloneOtherEngines": "This engine is standalone. Other engines have clusters: {{names}}.",
2795
+ "notApplied": "Not applied",
2796
+ "plannedAt": "Created {{when}}",
2797
+ "clearStalePlans": "Clear stale plans",
2798
+ "clearStalePlansTitle": "Delete stale planned clusters?",
2799
+ "clearStalePlansDesc": "Deletes {{n}} planned/draft registration(s) older than 7 days. Does not apply or push. System conf is not touched.",
2800
+ "landingTitle": "Database cluster",
2801
+ "landingDesc": "No database engine is installed on this host. Open an engine page to install, then return here.",
2802
+ "landingNoneInstalled": "MySQL, MariaDB, PostgreSQL, and Redis are not installed. /cluster does not open a MySQL tab when MySQL is missing.",
2803
+ "openEngine": "Open {{engine}}",
2804
+ "overviewPill": "Clusters {{n}}",
2805
+ "enginesInstalled": "Engines",
2806
+ "plannedCount": "Planned",
2807
+ "overviewList": "Clusters ({{count}})",
2808
+ "overviewEmpty": "No cluster registrations yet.",
2809
+ "engine": "Engine",
2810
+ "kind": "Kind",
2811
+ "members": "Members"
2475
2812
  },
2476
2813
  "console": {
2477
2814
  "dataBrowse": "Parcourir les données",
@@ -2511,7 +2848,9 @@
2511
2848
  "reloadConfig": "Recharger la conf",
2512
2849
  "disableBoot": "Désactiver au démarrage",
2513
2850
  "needRights": "Nécessite des droits de modification système et admin. Les échecs affichent les raisons — jamais de faux succès.",
2514
- "noneFetched": "— aucun —"
2851
+ "noneFetched": "— aucun —",
2852
+ "disableBootConfirm": "Le moteur ne démarrera pas après le redémarrage tant que vous ne l'aurez pas réactivé.",
2853
+ "affectsProjects": "Sites and services that use this engine will be interrupted."
2515
2854
  },
2516
2855
  "expiresLabel": "Expire",
2517
2856
  "importEntry": "Entrée : {{url}}",
@@ -2537,7 +2876,30 @@
2537
2876
  "unfreezeOk": "Réparation de {{engine}} terminée",
2538
2877
  "startAfterUnfreeze": "Démarrer le service (exécute automatiquement le plan de réparation en cas d'échec)",
2539
2878
  "serviceDownTitle": "Le service de base de données est arrêté",
2540
- "serviceDownBody": "Le service est en mauvais état"
2879
+ "serviceDownBody": "Le service est en mauvais état",
2880
+ "emptyDbHostHasRows": "L'hôte possède déjà des bases de données qui ne figurent pas dans cette liste de plan de contrôle.",
2881
+ "hostHasUntracked": "{{count}} les bases de données hôtes ne sont pas enregistrées dans le panneau",
2882
+ "hostInventoryHint": "Le tableau contient uniquement des lignes du plan de contrôle. Les noms live proviennent de SHOW DATABASES.",
2883
+ "adoptHostDb": "S'inscrire {{name}}",
2884
+ "remoteTest": "Tester la connexion",
2885
+ "remoteTestDone": "Sonde d'hôte distant terminée",
2886
+ "remoteTestOk": "accessible",
2887
+ "remoteTestFail": "inaccessible",
2888
+ "remoteNotChecked": "non testé",
2889
+ "registeredVsHostHint": "Enregistré dans le panneau / trouvé sur l’hôte",
2890
+ "dumpNeedRegistered": "Enregistrez d’abord une base dans le panneau",
2891
+ "dumpFirstDbTitle": "Exporter la première base enregistrée",
2892
+ "importNeedRegistered": "Enregistrez d’abord une base dans le panneau",
2893
+ "importLatestNeedConfirm": "Confirmation requise — importe dans la base enregistrée",
2894
+ "adoptHostDbTitle": "N’enregistre que le nom dans le plan de contrôle ; n’altère pas les données hôte.",
2895
+ "cleanupExpiredTempUsersTitle": "Supprime les utilisateurs temporaires du panneau déjà expirés",
2896
+ "remoteDeleteTitle": "Retirer uniquement cet enregistrement",
2897
+ "remoteDeleteConfirm": "Retirer l’enregistrement {{name}} ? Le serveur distant n’est pas modifié.",
2898
+ "registeredCount": "Registered",
2899
+ "hostCount": "On host",
2900
+ "registeredUsers": "Registered users",
2901
+ "registeredUsersHint": "Panel registrations only — not every MySQL account",
2902
+ "hostStillExists": "Still on host"
2541
2903
  },
2542
2904
  "dialogs": {
2543
2905
  "confirmDefault": "Confirmer",
@@ -2761,7 +3123,277 @@
2761
3123
  "aboutHealthTitle": "Santé des services",
2762
3124
  "aboutHealthBody": "Utilisez Outils pour sonder PowerDNS, réparer le bind et ouvrir le port 53.",
2763
3125
  "aboutStackTitle": "Logiciels",
2764
- "aboutStackBody": "Vérifiez/mettez à jour le paquet PowerDNS sous Logiciels."
3126
+ "aboutStackBody": "Vérifiez/mettez à jour le paquet PowerDNS sous Logiciels.",
3127
+ "invalidZone": "Nom de zone invalide. Utilisez un vrai domaine (par exemple exemple.com).",
3128
+ "invalidIpv4": "IPv4 invalide. Chaque octet doit être compris entre 0 et 255.",
3129
+ "mailZonesMissing": "Les domaines de messagerie n'ont pas de zone DNS ici : {{domains}}.",
3130
+ "createMailZone": "Créer une zone de messagerie",
3131
+ "createMailZoneNow": "Zone de messagerie créée {{domain}}",
3132
+ "healNeedInstall": "PowerDNS n'est pas installé - installez-le d'abord dans l'onglet Logiciel",
3133
+ "applyNeedService": "Le service DNS n'est pas en cours d'exécution : démarrez-le ou installez-le avant de l'appliquer.",
3134
+ "deleteZoneNeedName": "Supprimez cette zone — vous saisirez le nom de la zone pour confirmer",
3135
+ "toolsFirewallTitle": "Pare-feu (UFW)",
3136
+ "toolsFirewallHint": "Autoriser ou refuser le port 53. N’arrête ni ne démarre PowerDNS.",
3137
+ "toolsUnitTitle": "Unité PowerDNS",
3138
+ "toolsUnitHint": "Unité systemd pdns — démarrer, arrêter, redémarrer, recharger.",
3139
+ "installConfirmTitle": "Installer PowerDNS ?",
3140
+ "installConfirmDesc": "Installe pdns-server et écrit la config gérée. Nécessite root et YSK_EXECUTE=1.",
3141
+ "installConfirmConsequence": "Après installation et démarrage, PowerDNS liera le port 53.",
3142
+ "installPort53Busy": "Le port 53 est déjà utilisé. PowerDNS peut échouer à se lier tant que cet écouteur n’est pas arrêté ou réparé.",
3143
+ "installPort53BusyConsequence": "Réparez la liaison ou arrêtez l’autre écouteur avant d’attendre des réponses sur 53.",
3144
+ "createZoneNeedValid": "Enter a valid zone name and IPv4 address",
3145
+ "startProbeFailed": "Could not re-check DNS health after start",
3146
+ "startNotListening": "PowerDNS start returned, but the unit is not answering on port 53",
3147
+ "goStartService": "Start DNS service",
3148
+ "startBindHint": "If start returns to stopped, port 53 is often held by systemd-resolved. Use Heal bind below, then start again."
3149
+ },
3150
+ "docker": {
3151
+ "title": "Docker",
3152
+ "subtitle": "Installez et contrôlez le moteur Docker, les conteneurs, images, projets Compose et le disque sur cet hôte.",
3153
+ "refresh": "Actualiser",
3154
+ "notInstalled": "Docker Engine n’est pas installé. Installez docker.io et docker-compose-v2 depuis cette page.",
3155
+ "protected": "Protégé",
3156
+ "pruneConfirm": "Saisissez PRUNE pour confirmer le nettoyage de volume ou du système",
3157
+ "settingsHint": "Sous-ensemble sûr de daemon.json uniquement. Appliquer écrit le fichier et redémarre docker.service.",
3158
+ "cli": {
3159
+ "usage": "Utilisation : ysk-server docker status|ps|images|volumes|networks|df|logs|inspect|exec|start|stop|restart|rm|pull|run|prune|engine|compose [--image IMG] [--name N] [--preset version|help|hostname] [--bin BIN] [--project P] [--execute] [--json]"
3160
+ },
3161
+ "tab": {
3162
+ "overview": "Aperçu",
3163
+ "containers": "Conteneurs",
3164
+ "images": "Images Docker",
3165
+ "compose": "Compose",
3166
+ "volumes": "Volumes",
3167
+ "networks": "Réseaux",
3168
+ "prune": "Nettoyer",
3169
+ "settings": "Paramètres",
3170
+ "about": "À propos"
3171
+ },
3172
+ "col": {
3173
+ "engine": "Moteur",
3174
+ "containers": "Conteneurs",
3175
+ "version": "Version du moteur",
3176
+ "dataRoot": "Répertoire de données",
3177
+ "disk": "Disque",
3178
+ "validators": "Piles validateur",
3179
+ "name": "Nom",
3180
+ "image": "Image du conteneur",
3181
+ "status": "État",
3182
+ "ports": "Ports publiés",
3183
+ "managed": "Géré par le panneau",
3184
+ "size": "Taille",
3185
+ "driver": "Pilote",
3186
+ "type": "Genre",
3187
+ "reclaimable": "Récupérable"
3188
+ },
3189
+ "state": {
3190
+ "up": "Actif",
3191
+ "down": "Arrêté",
3192
+ "running": "Running",
3193
+ "exited": "Exited",
3194
+ "restarting": "Restarting",
3195
+ "restartingCount": "Restarting · {{n}} times",
3196
+ "paused": "Paused",
3197
+ "created": "Created",
3198
+ "dead": "Dead",
3199
+ "removing": "Removing",
3200
+ "unknown": "Unknown",
3201
+ "exitedCode": "Exited ({{n}})"
3202
+ },
3203
+ "actions": {
3204
+ "start": "Démarrer",
3205
+ "stop": "Arrêter",
3206
+ "restart": "Redémarrer",
3207
+ "remove": "Supprimer",
3208
+ "logs": "Journaux",
3209
+ "inspect": "Inspecter",
3210
+ "exec": "Exec (version du client)",
3211
+ "run": "Exécuter une image",
3212
+ "pull": "Télécharger",
3213
+ "up": "Démarrer",
3214
+ "down": "Arrêter",
3215
+ "createVolume": "Créer un volume",
3216
+ "createNetwork": "Créer un réseau",
3217
+ "pruneContainers": "Nettoyer les conteneurs",
3218
+ "pruneImages": "Nettoyer les images",
3219
+ "pruneVolumes": "Nettoyer les volumes",
3220
+ "pruneSystem": "Nettoyage système",
3221
+ "startEngine": "Démarrer le moteur",
3222
+ "stopEngine": "Arrêter le moteur",
3223
+ "restartEngine": "Redémarrer le moteur",
3224
+ "applyDaemon": "Appliquer les paramètres du moteur"
3225
+ },
3226
+ "empty": {
3227
+ "containers": "Aucun conteneur",
3228
+ "images": "Aucune image",
3229
+ "compose": "Aucun projet Compose",
3230
+ "volumes": "Aucun volume",
3231
+ "networks": "Aucun réseau",
3232
+ "composeDesc": "Projects come from validator nodes or Compose files already on this host. This page does not accept arbitrary YAML uploads.",
3233
+ "composeCta": "Open validator nodes"
3234
+ },
3235
+ "logs": {
3236
+ "empty": "Pas encore de journaux",
3237
+ "follow": "Follow"
3238
+ },
3239
+ "settings": {
3240
+ "logMaxSize": "Taille max. des journaux de conteneur",
3241
+ "liveRestore": "Restauration à chaud (conserver les conteneurs si le démon redémarre)",
3242
+ "mirrors": "Miroirs Registry (une URL par ligne)",
3243
+ "insecure": "Registries non chiffrés (un hôte par ligne)"
3244
+ },
3245
+ "about": {
3246
+ "body": "Docker est un service hôte de premier plan sur YSK Server, comme Nginx. Installation via le panneau (Ubuntu docker.io + docker-compose-v2). Les nœuds validateurs s’exécutent en projets Compose yskval-*.",
3247
+ "honesty": "Les changements d’hôte nécessitent root et YSK_EXECUTE=1. Le dry-run est la valeur par défaut. Cette page n’est pas Kubernetes.",
3248
+ "validators": "Ouvrir les nœuds validateurs"
3249
+ },
3250
+ "alerts": {
3251
+ "daemonTitle": "Le démon Docker est arrêté",
3252
+ "daemonBody": "Docker est installé mais docker.service n’est pas actif. Les piles validateur ne peuvent pas démarrer."
3253
+ },
3254
+ "errors": {
3255
+ "notInstalled": "Docker n’est pas installé",
3256
+ "daemonDown": "Le démon Docker n’est pas actif",
3257
+ "needCompose": "docker compose (greffon v2) est requis",
3258
+ "badImage": "Référence d’image invalide",
3259
+ "badName": "Nom invalide",
3260
+ "badPort": "Publication de port invalide",
3261
+ "badEnv": "Variable d’environnement invalide",
3262
+ "badVolume": "Montage de volume invalide",
3263
+ "badNetwork": "Réseau invalide",
3264
+ "protectedNetwork": "Impossible de supprimer un réseau Docker intégré",
3265
+ "badRestart": "Politique de redémarrage invalide",
3266
+ "badPrune": "Portée de nettoyage invalide",
3267
+ "needPruneConfirm": "Le nettoyage de volume ou du système exige confirm=PRUNE",
3268
+ "badDaemon": "Paramètre du moteur invalide",
3269
+ "composeMissing": "Fichier Compose de ce projet introuvable",
3270
+ "logsFailed": "Impossible de lire les journaux du conteneur",
3271
+ "mutateFailed": "La commande Docker a échoué",
3272
+ "engineFailed": "Impossible de contrôler docker.service",
3273
+ "badExec": "Exec est limité aux binaires et préréglages autorisés (pas de shell, pas de TTY)",
3274
+ "uninstallBusy": "Arrêtez les conteneurs gérés par le panneau (y compris les piles validateur) avant de désinstaller Docker"
3275
+ },
3276
+ "notes": {
3277
+ "dryMutate": "Dry-run uniquement. Passez --execute et YSK_EXECUTE=1 pour modifier l’hôte.",
3278
+ "dryPrune": "Aperçu du nettoyage (non appliqué).",
3279
+ "dryEngine": "Le contrôle du moteur est un dry-run.",
3280
+ "dryDaemon": "Écrirait /etc/docker/daemon.json et redémarrerait docker.service.",
3281
+ "daemonWrote": "daemon.json écrit",
3282
+ "start": "Conteneur démarré",
3283
+ "stop": "Conteneur arrêté",
3284
+ "restart": "Conteneur redémarré",
3285
+ "remove": "Conteneur supprimé",
3286
+ "ran": "Conteneur démarré depuis une image",
3287
+ "pulled": "Image téléchargée",
3288
+ "exec": "Exec autorisé exécuté",
3289
+ "imageRemoved": "Image supprimée",
3290
+ "volumeCreated": "Volume créé",
3291
+ "volumeRemoved": "Volume supprimé",
3292
+ "networkCreated": "Réseau créé",
3293
+ "networkRemoved": "Réseau supprimé",
3294
+ "pruned": "Nettoyage terminé",
3295
+ "compose": {
3296
+ "up": "Projet Compose démarré",
3297
+ "down": "Projet Compose arrêté",
3298
+ "restart": "Projet Compose redémarré",
3299
+ "rm": "Compose project removed"
3300
+ },
3301
+ "engine": {
3302
+ "start": "docker.service démarré",
3303
+ "stop": "docker.service arrêté",
3304
+ "restart": "docker.service redémarré"
3305
+ }
3306
+ },
3307
+ "needEngineTitle": "Install Docker Engine first",
3308
+ "notInstalledValue": "Not installed",
3309
+ "nameHint": "Letters, digits, underscore, dot, hyphen (max 128)",
3310
+ "volPlaceholder": "my-data",
3311
+ "netPlaceholder": "my-net",
3312
+ "runPorts": "Publish ports",
3313
+ "runPortsHint": "host:container per line, e.g. 8080:80",
3314
+ "runEnv": "Environment",
3315
+ "runEnvHint": "KEY=value per line",
3316
+ "runRestart": "Restart policy",
3317
+ "runNetwork": "Network",
3318
+ "runVolumes": "Volumes",
3319
+ "runVolumesHint": "volume:dest per line",
3320
+ "runAdvancedHint": "For multi-service stacks use validator nodes or Compose files already on this host.",
3321
+ "daemonConfirmTitle": "Apply daemon settings?",
3322
+ "daemonConfirmDesc": "Writes daemon.json and restarts docker.service. All containers will be interrupted.",
3323
+ "ui": {
3324
+ "whatYouGet": "Ce que fait cette page",
3325
+ "whatYouGetLead": "Installez d’abord Docker Engine. Ensuite vous pouvez lancer un conteneur, tirer des images et voir les piles Compose validateur déjà sur cet hôte.",
3326
+ "capEngine": "Moteur",
3327
+ "capEngineDesc": "Installation en un clic de docker.io et docker-compose-v2. Démarrez et arrêtez docker.service ici.",
3328
+ "capWork": "Conteneurs et images",
3329
+ "capWorkDesc": "Choisissez une image courante, tirez-la, lancez-la, puis lisez les journaux ou inspectez le conteneur.",
3330
+ "capStacks": "Piles validateur",
3331
+ "capStacksDesc": "Les piles multi-services sont des projets Compose validateur (yskval-*). Cette page n’accepte pas de YAML téléversé.",
3332
+ "cardEngine": "Moteur",
3333
+ "cardDisk": "Disque",
3334
+ "cardWork": "Sur cet hôte",
3335
+ "compose": "Compose",
3336
+ "cgroup": "cgroup",
3337
+ "used": "Utilisé",
3338
+ "free": "Libre",
3339
+ "running": "En cours",
3340
+ "images": "Images",
3341
+ "volumes": "Volumes",
3342
+ "networks": "Réseaux",
3343
+ "goImages": "Images",
3344
+ "goValidators": "Nœuds validateur",
3345
+ "imagePickHint": "Choisissez une image courante. Utilisez Autre seulement pour une autre référence.",
3346
+ "imageCustom": "Autre",
3347
+ "driver": "Pilote",
3348
+ "driverLocalOnly": "Ce panneau crée uniquement des volumes local.",
3349
+ "netDefaultDriver": "Les nouveaux réseaux utilisent le pilote bridge par défaut de Docker.",
3350
+ "pruneWhat": "Éléments à retirer",
3351
+ "pruneAck": "Je comprends que les données inutilisées seront supprimées et ne pourront pas être restaurées",
3352
+ "pruneAckDesc": "Le nettoyage des volumes ou du système est irréversible. Les conteneurs arrêtés et les images inutilisées du périmètre choisi sont retirés.",
3353
+ "pruneNow": "Nettoyer maintenant",
3354
+ "useMirrors": "Utiliser des miroirs de registre",
3355
+ "useInsecure": "Autoriser les registres non chiffrés",
3356
+ "publishPorts": "Publier des ports sur l’hôte",
3357
+ "attachVolume": "Attacher un volume",
3358
+ "setEnv": "Définir des variables d’environnement",
3359
+ "defaultNet": "Par défaut",
3360
+ "mountPath": "Chemin de montage",
3361
+ "restartNo": "Jamais",
3362
+ "restartUnless": "Sauf arrêt",
3363
+ "restartAlways": "Toujours",
3364
+ "restartOnFail": "En cas d’échec",
3365
+ "needAck": "Confirmez avant de nettoyer",
3366
+ "scopeContainers": "Conteneurs arrêtés",
3367
+ "scopeImages": "Images inutilisées",
3368
+ "scopeVolumes": "Volumes inutilisés",
3369
+ "scopeBuilder": "Cache de construction",
3370
+ "scopeSystem": "Tout ce qui est inutilisé",
3371
+ "noVolumesYet": "Aucun volume — créez-en un dans l’onglet Volumes d’abord.",
3372
+ "customPort": "Autre port hôte",
3373
+ "customPortHost": "Port hôte",
3374
+ "customPortContainer": "Port conteneur",
3375
+ "pctUsed": "{{n}} % utilisé",
3376
+ "customPortHint": "1–65535. Example: 9090 → 80.",
3377
+ "pickBridge": "Bridge network"
3378
+ },
3379
+ "deleteTitle": "Delete {{id}}",
3380
+ "deleteDesc": "This cannot be undone.",
3381
+ "deleteC1": "The resource is removed from this host.",
3382
+ "deleteComposeVal": "This is a validator stack — the validator instance is also deleted.",
3383
+ "pruneTitle": "Prune Docker resources",
3384
+ "pruneDesc": "Type PRUNE to confirm. Unused data cannot be restored.",
3385
+ "pruneC1": "Unused resources in the selected scope are deleted.",
3386
+ "pruneC2": "Volume and system prune permanently delete unused data volumes.",
3387
+ "pruneC3": "Stopped containers or unused images in this scope are removed.",
3388
+ "df": {
3389
+ "images": "Images",
3390
+ "containers": "Containers",
3391
+ "volumes": "Local volumes",
3392
+ "builder": "Build cache",
3393
+ "other": "Other"
3394
+ },
3395
+ "deleteRunningWarn": "This container is still running or restarting. It will be force-removed.",
3396
+ "stopEngineDesc": "This stops the Docker engine and all {{n}} container(s) on this host."
2765
3397
  },
2766
3398
  "email": {
2767
3399
  "title": "E-mail",
@@ -2812,7 +3444,7 @@
2812
3444
  "needExecute": "Nécessite YSK_EXECUTE",
2813
3445
  "viewQueue": "Voir la file d’attente",
2814
3446
  "flushQueue": "Vider la file d’attente",
2815
- "queueHint": "Cliquez sur Voir la file d’attente pour consulter la file Postfix locale",
3447
+ "queueHint": "File Postfix locale. La lecture est une sonde ; le vidage exige YSK_EXECUTE.",
2816
3448
  "deleteThisId": "Supprimer cet ID",
2817
3449
  "queueEmpty": "Aucun courrier différé",
2818
3450
  "queueEmptyHint": "Aucun message différé",
@@ -3081,7 +3713,8 @@
3081
3713
  "dmarcMissing": "DMARC manquant — fortement recommandé",
3082
3714
  "ptrBad": "PTR (DNS inverse) manquant ou incorrect — demander au fournisseur VPS",
3083
3715
  "port25Blocked": "Le port sortant 25 semble bloqué — demander le déblocage ou utiliser un relais SMTP",
3084
- "port25Unknown": "État du port 25 inconnu — lancer le test de connectivité"
3716
+ "port25Unknown": "État du port 25 inconnu — lancer le test de connectivité",
3717
+ "dmarcUnpublished": "DMARC est généré dans le panel mais n'est pas encore publié dans le DNS public"
3085
3718
  },
3086
3719
  "stack": {
3087
3720
  "tlsNote": "Certificats TLS via Let’s Encrypt pour SMTP/IMAP",
@@ -3122,7 +3755,8 @@
3122
3755
  "postfixReloaded": "Postfix rechargé.",
3123
3756
  "postfixReloadFailed": "Échec du rechargement Postfix : {{detail}}",
3124
3757
  "dovecotApplied": "Snippet TLS Dovecot écrit et rechargement tenté.",
3125
- "dovecotSkipped": "Dovecot ignoré (non installé ou doveconf indisponible)."
3758
+ "dovecotSkipped": "Dovecot ignoré (non installé ou doveconf indisponible).",
3759
+ "dovecotSslOmitted": "Le certificat de courrier est manquant ; a écrit ssl=no pour que Dovecot puisse démarrer sans les fichiers LE."
3126
3760
  },
3127
3761
  "policyApplySystemHint": "Cocher « appliquer au système » pour écrire les maps Postfix/Rspamd et recharger ;",
3128
3762
  "rateLimitAppliedNote": "Limite horaire sortante et drapeau antispam appliqués (quand l’application système est activée).",
@@ -3161,11 +3795,11 @@
3161
3795
  "deliverabilityDesc": "Contrôles PTR / DNS / port 25",
3162
3796
  "dnsTodosDesc": "Copiez puis ajoutez chez votre hébergeur DNS",
3163
3797
  "deliverabilityHonesty": "Impossible de définir le PTR ou de débloquer le port 25 pour vous",
3164
- "warmupSuggest": "Suggestions de warm-up",
3798
+ "warmupSuggest": "Suggestions de préchauffage",
3165
3799
  "writeSsoSkeleton": "Écrire le squelette SSO Roundcube",
3166
- "rateLimitPerHour": "Limite de messages par heure",
3167
- "rateLimitGlobalHint": "Prendre le minimum de chaque domaine (global)",
3168
- "savePolicyWritten": "Écrire uniquement dans le plan de contrôle",
3800
+ "rateLimitPerHour": "Plafond de messages par heure",
3801
+ "rateLimitGlobalHint": "Le global prend le minimum de chaque domaine",
3802
+ "savePolicyWritten": "Écrit uniquement dans le plan de contrôle",
3169
3803
  "dnsblMultiIp": "RBL multi-IP",
3170
3804
  "webmailTool": "Logiciel webmail",
3171
3805
  "webmailToolRoundcube": "Roundcube (par défaut)",
@@ -3238,7 +3872,44 @@
3238
3872
  "mailboxEmptyTitle": "Pas encore de boîtes aux lettres",
3239
3873
  "passwordMismatch": "Les mots de passe ne correspondent pas",
3240
3874
  "passwordTooShort": "Le mot de passe doit comporter au moins 8 caractères",
3241
- "mailboxUpdateNeedField": "Définir un nouveau mot de passe ou modifier le statut"
3875
+ "mailboxUpdateNeedField": "Définir un nouveau mot de passe ou modifier le statut",
3876
+ "catchallHint": "Les parties locales inconnues vont à la boîte cible. Brouillon jusqu’à l’application.",
3877
+ "queueSearchPh": "Rechercher ID, expéditeur ou destinataire…",
3878
+ "queueId": "ID de file",
3879
+ "queueSender": "Expéditeur",
3880
+ "queueRecipients": "Destinataires",
3881
+ "queueSize": "Taille",
3882
+ "queueReason": "Raison",
3883
+ "queueActive": "Actif",
3884
+ "queueHeld": "Retenu",
3885
+ "queueDeferred": "Différé",
3886
+ "deleteQueueTitle": "Supprimer ce message en file ?",
3887
+ "deleteQueueDesc": "Retirer {{id}} de la file MTA locale. YSK_EXECUTE requis.",
3888
+ "openQueuePage": "Ouvrir la file mail",
3889
+ "healthUnchecked": "Pas encore vérifié",
3890
+ "dovecotFailedHint": "Dovecot failed. Open the Software tab for status; if the mail certificate is missing, issue it on the SSL page first.",
3891
+ "domainsListDesc": "Domaines de messagerie enregistrés sur cet hôte",
3892
+ "healthChecklist": "Liste {{score}}/100",
3893
+ "healthChecklistHint": "Score de liste — DNS / PTR / port 25 pas encore sondés",
3894
+ "healthLiveHint": "Score de sonde réelle",
3895
+ "installWebmailTitle": "Créer le projet de webmail partagé (première installation)",
3896
+ "reinstallWebmailTitle": "Reconstruire/mettre à niveau le projet webmail existant",
3897
+ "reinstallNeedInstall": "Installez d'abord la messagerie Web",
3898
+ "dovecotFailedStatus": "Le pigeonnier est {{status}}. Ouvrez l'onglet Logiciel pour le résumé de l'unité.",
3899
+ "mailCertMissing": "Pas de certificat pour {{hosts}}. Émettez-le sur la page SSL.",
3900
+ "mailCertPresent": "Un certificat de courrier est déjà émis : il ne s'agit pas d'un problème de certificat manquant.",
3901
+ "webmailNeedCert": "Aucun certificat pour {{host}} — émettez-le sur SSL avant de forcer HTTPS.",
3902
+ "flushQueueEmpty": "La file d'attente est vide",
3903
+ "flushQueueNeedExecute": "Le vidage de la file d'attente nécessite YSK_EXECUTE (autorisation d'exécution de l'hôte)",
3904
+ "healthUncheckedHint": "DNS / PTR / port 25 n’ont pas encore été sondés.",
3905
+ "deliverabilityScore": "Pack de délivrabilité",
3906
+ "opendkimNoReload": "OpenDKIM n’a pas de reload — redémarrez après un changement de clés ou de tables.",
3907
+ "opendkimNoReloadTitle": "systemctl reload opendkim n’est pas pris en charge sur cette pile",
3908
+ "tlsRequestLeFor": "Request LE for {{host}}",
3909
+ "deliverabilityChecks": "Checks",
3910
+ "healthPartialScore": "Partial {{n}}/100 (DNS only)",
3911
+ "healthPartialHint": "DNS checklist only — live and blacklist not probed.",
3912
+ "deleteImpact": "{{mailboxes}} mailboxes · {{records}} DNS records · {{aliases}} aliases"
3242
3913
  },
3243
3914
  "errors": {
3244
3915
  "YSK_UNAUTHORIZED": "Non autorisé",
@@ -3279,7 +3950,9 @@
3279
3950
  "sessionExpired": "Session expirée ; reconnectez-vous",
3280
3951
  "sessionIdle": "Délai d'inactivité dépassé ; reconnectez-vous",
3281
3952
  "totpNotEnabled": "La 2FA n'est pas activée",
3282
- "totpSecretNoDataDir": "Le secret TOTP est chiffré mais dataDir n'est pas défini"
3953
+ "totpSecretNoDataDir": "Le secret TOTP est chiffré mais dataDir n'est pas défini",
3954
+ "mustChangePassword": "Vous devez définir un nouveau mot de passe avant de continuer",
3955
+ "policyNeedsOwn2fa": "Activez 2FA pour ce compte et confirmez avec un code TOTP avant d'exiger 2FA pour les autres"
3283
3956
  },
3284
3957
  "http": {
3285
3958
  "notFoundRoute": "Introuvable : {{method}} {{path}}",
@@ -3289,7 +3962,8 @@
3289
3962
  "unprocessable": "Requête rejetée par le serveur",
3290
3963
  "requestFailed": "Échec de la requête ({{status}})",
3291
3964
  "jsonInvalid": "JSON invalide",
3292
- "internal": "Erreur interne"
3965
+ "internal": "Erreur interne",
3966
+ "payloadTooLarge": "Le corps de la requête est trop volumineux"
3293
3967
  },
3294
3968
  "YSK_HOST_BROWSE_SSRF": "Navigation d'hôte bloquée par la politique de sécurité",
3295
3969
  "YSK_HOST_BROWSE_SESSION": "Session de navigation de l'hôte introuvable ou expirée",
@@ -3359,7 +4033,7 @@
3359
4033
  "customExample15m": "Personnalisé, ex. 15m",
3360
4034
  "customMaxretry": "Personnalisé 1–50",
3361
4035
  "min": "{{n}} minutes",
3362
- "hour": "{{n}} h",
4036
+ "hour": "{{n}} heures",
3363
4037
  "week": "{{n}} sem",
3364
4038
  "enableJailsHint": "Activer les jails (cocher puis appliquer) :",
3365
4039
  "writtenOnlyMsg": "Fichier du panneau écrit (non appliqué sur l'hôte)",
@@ -3376,7 +4050,32 @@
3376
4050
  "reload": "fail2ban rechargé",
3377
4051
  "restart": "fail2ban redémarré",
3378
4052
  "stop": "fail2ban arrêté"
3379
- }
4053
+ },
4054
+ "statWhitelist": "Liste blanche",
4055
+ "invalidIp": "Entrez un IPv4, IPv6 ou CIDR valide.",
4056
+ "whitelistPendingApply": "Enregistré dans la liste des panneaux. Appuyez sur Appliquer la politique pour écrire jail.local.",
4057
+ "ignoreipFile": "dataDir/fail2ban/ignoreip.txt",
4058
+ "jailsTabHint": "Statut des prisons actives. Activez ou désactivez les prisons dans l'onglet Politique.",
4059
+ "colJail": "Prison",
4060
+ "colEnabled": "Sur",
4061
+ "serviceStateLine": "Unité {{unit}} · {{state}} · démarrage {{boot}}",
4062
+ "jail": {
4063
+ "sshd": "SSH force brute",
4064
+ "nginxHttpAuth": "Authentification HTTP Nginx",
4065
+ "nginxBotsearch": "Scanner Nginx / sondes de bots",
4066
+ "nginxBadbots": "Nginx a connu de mauvais robots",
4067
+ "nginxLimitReq": "Prison à limite de débit Nginx",
4068
+ "postfix": "Postfix mail force brute",
4069
+ "dovecot": "Connexion à la messagerie Dovecot",
4070
+ "recidive": "Récidivistes"
4071
+ },
4072
+ "cannotBanSelf": "Il s'agit de l'hôte ou de votre adresse IP de connexion : ajoutez-le à ignoreip au lieu de le bannir.",
4073
+ "suggestIgnoreHint": "Adresses IP d'administrateur suggérées (fichier de panneau uniquement jusqu'à ce que vous appliquiez la stratégie) :",
4074
+ "suggestIgnoreAdd": "Ajouter {{ip}}",
4075
+ "whitelistEmptyWarn": "La liste blanche est vide ; les jails peuvent vous interdire. Ajoutez votre IP de connexion avant d’appliquer ignoreip.",
4076
+ "suggestIgnoreLogin": "Votre IP de connexion {{ip}}",
4077
+ "applyIgnoreEmptyWarn": "Appliquer avec une liste blanche vide vide ignoreip",
4078
+ "applyIgnoreNeedConfirm": "Réécrit ignoreip du jail et recharge fail2ban"
3380
4079
  },
3381
4080
  "featurePage": {
3382
4081
  "back": "Retour"
@@ -3674,18 +4373,18 @@
3674
4373
  "shareTorrentFile": "Télécharger .torrent",
3675
4374
  "shareSeedStatus": "Statut de semis",
3676
4375
  "shareBtStats": "Statut BitTorrent",
3677
- "btSeeds": "Seeds",
3678
- "btLeechers": "Leechers",
3679
- "btPeers": "Peers",
4376
+ "btSeeds": "Graines",
4377
+ "btLeechers": "Sangsues",
4378
+ "btPeers": "Pairs",
3680
4379
  "btUploadSpeed": "Vitesse de téléchargement",
3681
4380
  "btDownloadSpeed": "Vitesse de téléchargement",
3682
- "btUploaded": "Uploaded",
3683
- "btDownloaded": "Downloaded",
3684
- "btRatio": "Ratio",
3685
- "btUpdatedAt": "Updated",
4381
+ "btUploaded": "Téléchargé",
4382
+ "btDownloaded": "Téléchargé",
4383
+ "btRatio": "Rapport",
4384
+ "btUpdatedAt": "Mis à jour",
3686
4385
  "btServerStats": "Semoir de serveur",
3687
4386
  "btClientStats": "Votre client",
3688
- "btSeeding": "Seeding",
4387
+ "btSeeding": "Semis",
3689
4388
  "btPending": "Semis en attente",
3690
4389
  "btStopped": "La graine s'est arrêtée",
3691
4390
  "btError": "Erreur de graine",
@@ -3699,7 +4398,50 @@
3699
4398
  "publicShareBtFailed": "Échec de WebTorrent : {{detail}}",
3700
4399
  "publicShareBtNeedMagnet": "Pas d'URI magnétique pour ce partage",
3701
4400
  "publicShareBtUnsupported": "Ce navigateur ne peut pas exécuter WebTorrent ; utilisez plutôt magnet ou .torrent",
3702
- "btNone": "—"
4401
+ "btNone": "—",
4402
+ "uploadStatusSkipped": "Ignoré",
4403
+ "uploadStatusCancelled": "Annulé",
4404
+ "conflict": {
4405
+ "titleFile": "Un élément nommé « {{name}} » existe déjà",
4406
+ "titleFolder": "Un dossier nommé « {{name}} » existe déjà",
4407
+ "descFile": "Choisissez l’action. Rien n’est écrasé tant que vous ne choisissez pas Remplacer.",
4408
+ "descFolder": "Choisissez l’action. Fusionner conserve le dossier existant et continue avec son contenu.",
4409
+ "incoming": "À ajouter",
4410
+ "existing": "Déjà ici",
4411
+ "kindFile": "Fichier",
4412
+ "kindFolder": "Dossier",
4413
+ "skip": "Ignorer",
4414
+ "skipHint": "Ne pas ajouter cet élément",
4415
+ "keepBoth": "Conserver les deux",
4416
+ "keepBothHint": "Enregistrer l’élément entrant sous {{name}}",
4417
+ "replace": "Remplacer",
4418
+ "replaceHint": "Écraser le fichier existant. Une instantané de version est conservé si possible.",
4419
+ "replaceFolderHint": "Écrase les fichiers du même nom dans ce dossier. Les autres fichiers restent.",
4420
+ "merge": "Fusionner",
4421
+ "mergeHint": "Conserver le dossier existant et y ajouter les fichiers entrants",
4422
+ "applyAll": "Appliquer à tous les conflits restants",
4423
+ "applyAllHint": "Utiliser cette action pour le reste de ce dépôt ou transfert",
4424
+ "cancelRest": "Annuler le reste",
4425
+ "progress": "{{current}} sur {{total}}",
4426
+ "typeMismatch": "Un {{destKind}} nommé « {{name}} » est déjà ici. L’élément entrant est un {{incomingKind}}.",
4427
+ "skipped": "Ignoré",
4428
+ "cancelled": "Annulé"
4429
+ },
4430
+ "emptyTrashTitle": "Vider la poubelle ?",
4431
+ "emptyTrashDesc": "Chaque fichier dans la corbeille sera définitivement supprimé. Cela ne peut pas être annulé.",
4432
+ "purgeForeverDesc": "Ce fichier sera définitivement supprimé. Cela ne peut pas être annulé.",
4433
+ "webdavReissueUnchanged": "L'identifiant du jeton n'a pas changé après la réémission : l'écriture n'a peut-être pas persisté. Essayer à nouveau.",
4434
+ "webdavDisableFailed": "WebDAV est toujours activé après la désactivation : l'écriture n'a peut-être pas persisté. Essayer à nouveau.",
4435
+ "dirNamedLikeFile": "(dossier résiduel ; le nom ressemble à un fichier)",
4436
+ "webdavAfterEnable": "Disponible après activation de WebDAV et émission d’un jeton.",
4437
+ "webdavAlreadyOff": "WebDAV is already off",
4438
+ "deleteMore": " and {{n}} more",
4439
+ "unshareTitle": "Revoke this share?",
4440
+ "unshareDesc": "Revoke the link for {{name}} ({{url}}). The link stops working immediately.",
4441
+ "pillTrash": "{{count}} in trash",
4442
+ "pillSpace": "{{used}} used",
4443
+ "webdavTokenInactive": "Disabled — token #{{id}} is not active",
4444
+ "webdavOffNoToken": "Disabled (no active token)"
3703
4445
  },
3704
4446
  "firewall": {
3705
4447
  "profiles": {
@@ -3732,7 +4474,7 @@
3732
4474
  "notInstalled": "UFW n’est pas installé",
3733
4475
  "toolHintPrefix": "Outils sous-jacents :",
3734
4476
  "toolHintBody": "UFW = ports / règles permanentes · pour la réponse aux attaques et le bannissement auto, utilisez",
3735
- "toolHintFail2ban": "fail2ban = bannissements temporaires basés sur les journaux",
4477
+ "toolHintfail2ban": "fail2ban = bannissements temporaires basés sur les journaux",
3736
4478
  "executeOffHint": "Modifications système désactivées — le statut est lisible ;",
3737
4479
  "tabs": {
3738
4480
  "rules": "Règles",
@@ -3799,9 +4541,18 @@
3799
4541
  "colService": "Service",
3800
4542
  "colMode": "Mode",
3801
4543
  "colPorts": "Ports",
3802
- "colSync": "Status",
3803
- "synced": "Synced",
3804
- "syncNow": "Sync"
4544
+ "colSync": "Statut",
4545
+ "synced": "Synchronisé",
4546
+ "syncNow": "Synchroniser",
4547
+ "disableConfirmTitle": "Désactiver UFW ?",
4548
+ "disableConfirmDesc": "Le pare-feu de l’hôte cessera de filtrer le trafic. Sur un réseau public, SSH et le panneau peuvent être exposés.",
4549
+ "disableConfirmConsequence": "Les règles d’autorisation/refus restent enregistrées mais ne s’appliquent plus tant que UFW n’est pas réactivé.",
4550
+ "toolHintFail2ban": "fail2ban = bannissements temporaires basés sur les journaux",
4551
+ "servicesUfwOff": "UFW est éteint. Cette liste représente l'exposition souhaitée, et non les règles que l'hôte applique.",
4552
+ "desiredOnlyUfwOff": "Souhaité : {{mode}} · UFW désactivé (non appliqué)",
4553
+ "syncNotApplied": "UFW désactivé · non appliqué",
4554
+ "defaultNotApplied": "n/a (UFW désactivé)",
4555
+ "ufwOffHint": "Les messages entrants par défaut ne sont pas appliqués lorsque UFW est désactivé"
3805
4556
  },
3806
4557
  "ftp": {
3807
4558
  "title": "Comptes FTPS",
@@ -3936,7 +4687,38 @@
3936
4687
  "sftpRegister": "Enregistrer la clé",
3937
4688
  "sftpAddedAt": "Ajoutée {{time}}",
3938
4689
  "sftpTechSummary": "Détails techniques (avancé)",
3939
- "sftpTechNote": "Les clés sont écrites sous le chemin géré"
4690
+ "sftpTechNote": "Les clés sont écrites sous le chemin géré",
4691
+ "filterProject": "Comptes FTP de ce projet uniquement",
4692
+ "clearProjectFilter": "Afficher tous les comptes",
4693
+ "vsftpdFailedHint": "vsftpd a échoué. Ouvrez l'onglet Service (listen et Listen_ipv6 ne peuvent pas être tous les deux OUI).",
4694
+ "tabService": "Service",
4695
+ "listenConflictLive": "Live vsftpd.conf a Listen={{v4}} et Listen_ipv6={{v6}} — les deux OUI ne parviendront pas à démarrer.",
4696
+ "listenConflictNeedFix": "Corrigez d'abord Listen / Listen_ipv6 (ils ne peuvent pas tous les deux être OUI), puis appliquez.",
4697
+ "fixListenIpv4": "Utiliser uniquement IPv4 (listen=YES, Listen_ipv6=NO)",
4698
+ "liveFileValue": "Déposez maintenant : {{value}}",
4699
+ "startBlockedFailed": "Le service a échoué : appliquez une configuration valide avant de démarrer",
4700
+ "ftpsNeedCert": "Choisissez d'abord un domaine de certificat",
4701
+ "detectPublicIp": "Détecter l'adresse IP publique",
4702
+ "detectPublicIpTitle": "Remplissez le premier IPv4 sans bouclage de cet hôte",
4703
+ "pasvIpRequired": "Indiquez une IP publique PASV avant d’appliquer (NAT/cloud). Détectez ou saisissez une adresse.",
4704
+ "vsftpdFailedGeneric": "vsftpd failed. Open the Service tab for live settings and journal.",
4705
+ "stateFailed": "Failed to start",
4706
+ "plaintextInsecure": "Cleartext FTP (no TLS) — insecure. Enable FTPS before exposing port 21.",
4707
+ "plaintextPublicLive": "vsftpd is listening on a public address without FTPS. Credentials travel in the clear. Enable FTPS, bind to this host only, or confirm PLAINTEXT to keep this posture.",
4708
+ "bindAddress": "Listen scope",
4709
+ "bindAddressHint": "New installs bind to this host only. Public listen without FTPS needs a typed confirmation.",
4710
+ "bindLocal": "This host only",
4711
+ "bindLocalHint": "127.0.0.1 — fine without TLS for local tests",
4712
+ "bindPublic": "Public",
4713
+ "bindPublicHint": "All interfaces — enable FTPS or confirm PLAINTEXT",
4714
+ "enableFtpsAndStart": "Enable FTPS and start",
4715
+ "publicPlainNeedConfirm": "Public cleartext FTP needs a PLAINTEXT confirmation",
4716
+ "plainConfirmTitle": "Start public FTP without FTPS?",
4717
+ "plainConfirmDesc": "Port 21 will accept logins and data in the clear on the public address.",
4718
+ "plainConfirmC1": "Usernames and passwords are visible on the network.",
4719
+ "plainConfirmC2": "PASV will advertise the configured public IP.",
4720
+ "plainConfirmC3": "Host firewall and cloud security group are not opened for you.",
4721
+ "plainConfirmAction": "Start cleartext FTP"
3940
4722
  },
3941
4723
  "geo": {
3942
4724
  "continents": {
@@ -4181,26 +4963,26 @@
4181
4963
  "mediaNote": "Véritable navigateur : la vidéo est diffusée en streaming ; l'audio n'est pas encore ponté vers le panneau (phase 2).",
4182
4964
  "isolationNote": "Un vrai navigateur crée un utilisateur Linux éphémère pour Chrome ; quitter la page ou le délai d'inactivité détruit cet utilisateur.",
4183
4965
  "resumeHint": "Reprendre la session précédente ({{count}} onglets)",
4184
- "resume": "Resume",
4185
- "resumeDismiss": "Dismiss",
4966
+ "resume": "CV",
4967
+ "resumeDismiss": "Rejeter",
4186
4968
  "resumeDone": "Reprise de la séance",
4187
4969
  "settingsSafety": "Sécurité de la navigation",
4188
4970
  "settingsSafetyHint": "Bloque strictement les hôtes les plus risqués ; La version décontractée permet des cibles intranet plus larges. Ne désactive pas les protections SSRF pour les métadonnées cloud.",
4189
4971
  "safetyStrict": "Strict",
4190
4972
  "safetyStandard": "Standard",
4191
- "safetyRelaxed": "Relaxed",
4973
+ "safetyRelaxed": "Détendu",
4192
4974
  "settingsBlockHosts": "Suffixes d'hôtes bloqués",
4193
4975
  "settingsBlockHostsHint": "Un nom d'hôte ou un suffixe par ligne (par exemple malware.test). Les correspondances exactes et suffixes sont bloquées.",
4194
4976
  "settingsAllowDangerousDownloads": "Autoriser les téléchargements à haut risque (exe/scripts)",
4195
4977
  "settingsAudioBridge": "Ponter l'audio de la page vers le panneau",
4196
4978
  "settingsAudioBridgeHint": "Diffuse l'audio Chrome de l'hôte dans ce navigateur. Certains sites nécessitent un clic pour déverrouiller la lecture.",
4197
- "downloads": "Downloads",
4979
+ "downloads": "Téléchargements",
4198
4980
  "downloadsEmpty": "Aucun téléchargement dans cette session",
4199
- "downloadReady": "Ready",
4200
- "downloadBlocked": "Blocked",
4201
- "downloadPending": "Pending",
4202
- "downloadFailed": "Failed",
4203
- "downloadSave": "Save",
4981
+ "downloadReady": "Prêt",
4982
+ "downloadBlocked": "Bloqué",
4983
+ "downloadPending": "En attente",
4984
+ "downloadFailed": "Échoué",
4985
+ "downloadSave": "Sauvegarder",
4204
4986
  "audioUnlock": "Activer le son",
4205
4987
  "audioUnlockHint": "Cliquez pour déverrouiller la lecture audio dans cet onglet",
4206
4988
  "audioUnlocked": "Audio débloqué",
@@ -4210,12 +4992,34 @@
4210
4992
  "audioNotBridged": "Audio désactivé",
4211
4993
  "audioNotBridgedHint": "Activez le pont audio dans Paramètres pour entendre la page",
4212
4994
  "mediaPolicyTitle": "Médias dans un vrai navigateur",
4213
- "mediaVideoLabel": "Video",
4995
+ "mediaVideoLabel": "Vidéo",
4214
4996
  "mediaVideoDesc": "Rendu sur l'hôte et diffusé sous forme d'images dans le panneau.",
4215
4997
  "mediaAudioLabel": "Audio",
4216
4998
  "mediaAudioDesc": "Pont facultatif depuis l'hôte Chrome ; peut nécessiter un clic de déverrouillage.",
4217
- "mediaPolicyLabel": "Policy",
4218
- "mediaPolicyDesc": "Les téléchargements et la lecture automatique suivent les paramètres de sécurité et de téléchargement ci-dessus."
4999
+ "mediaPolicyLabel": "Politique",
5000
+ "mediaPolicyDesc": "Les téléchargements et la lecture automatique suivent les paramètres de sécurité et de téléchargement ci-dessus.",
5001
+ "frameBlocked": "La page n'a pas pu être affichée dans le cadre du panneau.",
5002
+ "historyEmpty": "Aucun historique dans cette session.",
5003
+ "bookmarksEmpty": "Aucun favori pour l'instant.",
5004
+ "closeSessionHint": "Efface les cookies pour cette session de navigation. Les signets restent.",
5005
+ "bookmarkAdd": "Ajouter ou supprimer un signet",
5006
+ "bookmarkList": "Liste de favoris",
5007
+ "envUnset": "pas réglé",
5008
+ "envPanelValue": "panneau : {{value}}",
5009
+ "settingsNoSandboxWarn": "Désactive le bac à sable Chromium. À utiliser uniquement dans un conteneur approuvé. S'applique à la prochaine session de navigateur réel.",
5010
+ "settingsDangerDlWarn": "Permet les téléchargements d'exécutables et de scripts via le navigateur hôte. Confirmez que vous en avez besoin.",
5011
+ "settingsDangerConfirmTitle": "Activer un paramètre de navigation à haut risque ?",
5012
+ "needUrl": "Saisissez une URL ci-dessus pour démarrer une session.",
5013
+ "envColVar": "Variable",
5014
+ "envColHost": "Processus hôte",
5015
+ "envColPanel": "Réglage du panneau",
5016
+ "envColEffective": "Effectif",
5017
+ "engineBrowserNeedChrome": "Real browser (Chrome not installed)",
5018
+ "egressHint": "The target site sees this server’s outbound address ({{host}}), not your laptop. Cookies stay in the server session jar.",
5019
+ "closeNoSession": "No session yet",
5020
+ "resumeHintDetail": "Resume previous session ({{count}} tabs) · {{url}} · {{when}}",
5021
+ "resumeHintOwned": "Resume last browse for {{user}} ({{count}} tabs) · {{url}} · {{when}}",
5022
+ "clearSessionData": "Clear session data"
4219
5023
  },
4220
5024
  "listToolbar": {
4221
5025
  "searchPlaceholder": "Rechercher…",
@@ -4227,24 +5031,30 @@
4227
5031
  "activeFilters": "{{count}} filtres actifs",
4228
5032
  "noResults": "Aucune correspondance",
4229
5033
  "noResultsHint": "Essayez un autre mot-clé ou effacez les filtres.",
4230
- "searching": "Recherche…"
5034
+ "searching": "Recherche…",
5035
+ "emptyChip": "No items in this filter"
4231
5036
  },
4232
5037
  "logViewer": {
4233
5038
  "banIpTitle": "Bannir {{ip}} dans Protection"
4234
5039
  },
4235
5040
  "login": {
4236
- "title": "Se connecter à YSK Server",
5041
+ "title": "Connexion à YSK Server",
4237
5042
  "subtitle": "Console serveur",
4238
- "username": "Nom d'utilisateur",
5043
+ "username": "Nom dutilisateur",
4239
5044
  "password": "Mot de passe",
4240
5045
  "submit": "Se connecter",
4241
- "failed": "Échec de la connexion. Vérifiez le nom d'utilisateur ou le mot de passe.",
5046
+ "failed": "Échec de la connexion. Vérifiez le nom dutilisateur ou le mot de passe.",
4242
5047
  "footer": "Un produit de YSK Limited",
4243
5048
  "totpRequired": "La 2FA est activée pour ce compte. Saisissez le code à 6 chiffres.",
4244
- "totpLabel": "Code d'authentification",
4245
- "totpHint": "Code à 6 chiffres de votre application d'authentification",
5049
+ "totpLabel": "Code dauthentification",
5050
+ "totpHint": "Code à 6 chiffres de votre application dauthentification",
4246
5051
  "submitting": "Connexion…",
4247
- "sessionExpired": "Session expirée ; reconnectez-vous"
5052
+ "sessionExpired": "Session expirée ; reconnectez-vous",
5053
+ "newPassword": "Nouveau mot de passe",
5054
+ "newPasswordAgain": "Confirmer le nouveau mot de passe",
5055
+ "changePassword": "Changer le mot de passe",
5056
+ "passwordMismatch": "Les mots de passe ne correspondent pas",
5057
+ "passwordChanged": "Mot de passe mis à jour"
4248
5058
  },
4249
5059
  "logs": {
4250
5060
  "catSystem": "Fichiers système",
@@ -4371,7 +5181,7 @@
4371
5181
  "logrotateLabel": "logrotation",
4372
5182
  "srcNginx": "nginx",
4373
5183
  "srcSsh": "chut",
4374
- "srcFail2ban": "échec2ban",
5184
+ "srcfail2ban": "échec2ban",
4375
5185
  "srcAuthLog": "auth.log",
4376
5186
  "srcNginxError": "erreur nginx",
4377
5187
  "srcLetsEncrypt": "chiffrons",
@@ -4379,7 +5189,36 @@
4379
5189
  "groupVarLog": "/var/log",
4380
5190
  "prioErr": "euh+",
4381
5191
  "prioWarn": "avertir+",
4382
- "prioInfo": "infos+"
5192
+ "prioInfo": "infos+",
5193
+ "srcFail2ban": "échec2ban",
5194
+ "vacuumSize": "Limité à 500 Mo",
5195
+ "logrotateNoStatus": "Pas encore de fichier d'état de rotation (normal s'il n'a jamais été exécuté).",
5196
+ "autoVacuumOff": "Le nettoyage automatique est désactivé. Le temps n'est pas utilisé jusqu'à ce que vous l'activiez.",
5197
+ "aboutAllowlist": "Explore ne peut lire que les unités de journal et les chemins /var/log sur liste autorisée. Les chemins d’hôtes arbitraires ne sont pas proposés.",
5198
+ "aboutCustomPath": "Ajoutez un chemin personnalisé dans Paramètres (uniquement /var/log ou /run/log). Ensuite, ouvrez-le depuis Explorer.",
5199
+ "noRowsInWindow": "Aucun enregistrement dans cette fenêtre horaire",
5200
+ "showInactiveUnits": "Afficher les unités inactives",
5201
+ "sseNeedFollow": "Activez d'abord le suivi – SSE est uniquement destiné à la queue en direct",
5202
+ "vacuumNeedRetention": "Saisissez d’abord une fenêtre de conservation (ex. 14d)",
5203
+ "vacuumNeedConfirm": "Confirmation requise — supprime d’anciens journaux journal",
5204
+ "vacuumSizeNeedConfirm": "Confirmation requise — plafonne l’usage disque de journal",
5205
+ "vacuumSizeAlreadyBelow": "L’usage actuel est déjà sous le plafond ; généralement rien n’est supprimé.",
5206
+ "vacuumSizeNoopDesc": "Le journal est déjà sous 500 Mo. vacuum --size=500M s’exécute quand même et ne supprime généralement rien.",
5207
+ "journalDiskHint": "Usage actuel de systemd-journald (journal actif). N’inclut pas les fichiers rotés sous /var/log.",
5208
+ "varLogDiskHint": "Estimation de /var/log, y compris les fichiers rotés.",
5209
+ "queryFirst": "Interrogez d’abord",
5210
+ "projectSourcesTitle": "{{n}} source(s) (fichiers + journal)",
5211
+ "logrotatePath": "Chemin",
5212
+ "logrotateLast": "Dernière rotation",
5213
+ "logrotateExpand": "Afficher {{n}} plus",
5214
+ "logrotateCollapse": "Afficher moins",
5215
+ "logrotateVersion": "Version d'état {{v}}",
5216
+ "errorsWindowHint": "Recent errors from the last overview probe (not live-updating when you switch tabs)",
5217
+ "sourceCount": "{{shown}} shown",
5218
+ "sourceUnavailable": "This source has not produced a log yet",
5219
+ "sourceNoLog": "No log yet",
5220
+ "exportJsonl": "JSONL export",
5221
+ "sseLive": " (live stream)"
4383
5222
  },
4384
5223
  "metrics": {
4385
5224
  "alert": {
@@ -4511,7 +5350,42 @@
4511
5350
  "usageNoteFull": "Utilisation via du local (non estimée). Le quota est une limite souple du plan de contrôle ; un setquota dur nécessite apply-to-host.",
4512
5351
  "sseNeedLogin": "Non connecté ; impossible d’ouvrir le SSE",
4513
5352
  "sseSessionExpired": "Non connecté ou session expirée ; impossible d’ouvrir le SSE",
4514
- "sseHttpError": "flux HTTP {{status}}"
5353
+ "sseHttpError": "flux HTTP {{status}}",
5354
+ "colFilesystem": "Système de fichiers",
5355
+ "colMount": "Monter",
5356
+ "colSize": "Taille",
5357
+ "colUsed": "Utilisé",
5358
+ "colAvail": "Disponible",
5359
+ "colUsePct": "Utilisé %",
5360
+ "colHome": "Maison",
5361
+ "usageNoteLink": "Quota souple du plan de contrôle. Appliquez des limites strictes dans l’onglet Isolation du projet.",
5362
+ "alertsBuiltinOnly": "Seuils intégrés CPU/mémoire/disque uniquement. Pas de courrier électronique, de webhook ou de canal Slack.",
5363
+ "lastEvaluated": "Dernière vérification",
5364
+ "shareNoQuotaHint": "Sans quota, la part n’est pas un pourcentage. Définissez-la dans l’onglet Isolation du projet.",
5365
+ "setQuotaLink": "Définir le quota",
5366
+ "unusualHome": "Chemin inhabituel",
5367
+ "unusualHomeHint": "Pas une maison de projet /home/…. L'isolement canonique est /home/ysk-server-{id}.",
5368
+ "protectedPid": "PID 1 / init / systemd ne peut pas être signalé depuis le panneau",
5369
+ "sigTermTitle": "Envoyer SIGTERM (demander au processus de quitter)",
5370
+ "sigKillTitle": "Envoyer SIGKILL (force kill – ne peut pas être attrapé)",
5371
+ "batchTerm": "TERM",
5372
+ "batchKill": "KILL",
5373
+ "rawTopLabel": "Haut brut (non traduit)",
5374
+ "followSseLabel": "Suivre (diffusion en direct)",
5375
+ "alertsReadOnly": "Seuils intégrés CPU/mémoire/disque uniquement. Pas de courrier électronique, de webhook ou de canal Slack.",
5376
+ "alertsGoNotifications": "Ouvrir le centre de notifications",
5377
+ "lastCheck": "Dernière vérification",
5378
+ "rawTopHint": "Sortie top(1) non traduite",
5379
+ "load1m": "Load 1m",
5380
+ "uptime": "Uptime",
5381
+ "filterCpu5": "≥5% CPU",
5382
+ "filterMem5": "≥5% memory",
5383
+ "signalHint": "Select a process, then send TERM or KILL.",
5384
+ "signalFromRow": "Select this process for TERM / KILL",
5385
+ "selectForSignal": "Select",
5386
+ "forceKillTitleNamed": "KILL PID {{pid}} ({{cmd}})?",
5387
+ "sendSigTitleNamed": "Send TERM to PID {{pid}} ({{cmd}})?",
5388
+ "controlPlaneNoSignal": "The control-plane process cannot be signalled"
4515
5389
  },
4516
5390
  "migrate": {
4517
5391
  "tabInventory": "Inventaire",
@@ -4593,7 +5467,33 @@
4593
5467
  "dryRunOnlyDesc": "· Inventaire + précontrôle uniquement ; pas de rsync ni d’écritures sur la cible",
4594
5468
  "executeNote": "L’hôte nécessite YSK_EXECUTE=1 et l’API root. Après la migration, mettez à jour les DNS A/AAAA et vérifiez le pare-feu cloud + le PTR mail.",
4595
5469
  "dnsCutover": "Basculement DNS (manuel)",
4596
- "dnsCutoverDesc": "Pointez les A/AAAA de ces noms vers la nouvelle IP publique ;"
5470
+ "dnsCutoverDesc": "Pointez les A/AAAA de ces noms vers la nouvelle IP publique ;",
5471
+ "orphanHomesHint": "Restes de maisons du projet (pas dans le magasin). Supprimez-les uniquement après avoir confirmé qu'ils ne sont pas utilisés.",
5472
+ "orphanRemove": "Supprimer les restes de la maison",
5473
+ "orphanRemoveTitle": "Supprimer l'accueil du projet restant ?",
5474
+ "orphanRemoveDesc": "Supprimez définitivement {{path}} du disque. Ce n'est pas un projet de magasin. Nécessite YSK_EXECUTE=1.",
5475
+ "orphanRemovePhrase": "Saisissez DELETE pour confirmer.",
5476
+ "orphanRemoveNeedConfirm": "Confirmation requise",
5477
+ "passwordNotStored": "Password is used for this SSH session only and is not saved on disk.",
5478
+ "overwriteDanger": "Overwrite will replace existing YSK data on the target. This cannot be undone from the panel.",
5479
+ "orphanBackupFirst": "Back up first (open Backups)",
5480
+ "expandAllWarnings": "Show all {{n}} warnings",
5481
+ "collapseWarnings": "Show fewer",
5482
+ "inventoriedWarn": "Inventoried · {{n}} warnings",
5483
+ "orphanMtime": "Last modified {{at}}",
5484
+ "inventoriedOrphans": "Inventoried · {{n}} leftover homes",
5485
+ "inventoriedWarnAndOrphans": "Inventoried · {{w}} warnings · {{n}} leftover",
5486
+ "orphanHomesTitle": "Leftover project homes ({{count}})",
5487
+ "orphanHomesSummary": "{{count}} path(s) on disk are not in the store. Back up first if unsure, then remove unused paths.",
5488
+ "orphanColHome": "Home",
5489
+ "orphanColModified": "Modified",
5490
+ "orphanKpi": "Leftover",
5491
+ "sourceOs": "OS",
5492
+ "sourceDataDir": "dataDir",
5493
+ "sourceDbRedis": "Databases / Redis",
5494
+ "sourceDbRedisValue": "{{db}} databases · {{redis}} Redis",
5495
+ "orphanColEntries": "Entries",
5496
+ "orphanEntries": "{{n}} top-level entries in the directory"
4597
5497
  },
4598
5498
  "multiCheck": {
4599
5499
  "customPlaceholder": "Code personnalisé",
@@ -4648,7 +5548,7 @@
4648
5548
  "rust": "Rust",
4649
5549
  "protection": "Centre de défense",
4650
5550
  "firewall": "Pare-feu",
4651
- "fail2ban": "échec2ban",
5551
+ "fail2ban": "fail2ban",
4652
5552
  "users": "Utilisateurs et paquets",
4653
5553
  "services": "Services",
4654
5554
  "metrics": "Métriques",
@@ -4670,7 +5570,9 @@
4670
5570
  "runtimes": "Durées d'exécution",
4671
5571
  "security": "Sécurité",
4672
5572
  "system": "Système",
4673
- "ai": "IA"
5573
+ "ai": "IA",
5574
+ "validators": "Validateurs",
5575
+ "containers": "Conteneurs"
4674
5576
  },
4675
5577
  "java": "Java",
4676
5578
  "kotlin": "Kotlin",
@@ -4689,8 +5591,13 @@
4689
5591
  "bookmarkPinned": "Épinglé",
4690
5592
  "bookmarkAdded": "Épinglé sur la barre latérale",
4691
5593
  "bookmarkRemoved": "Supprimé de la barre latérale",
4692
- "btTracker": "Traqueur BT",
4693
- "support": "Support"
5594
+ "btTracker": "BT Tracker",
5595
+ "support": "Soutien",
5596
+ "noAccessTitle": "Accès refusé",
5597
+ "noAccessDesc": "Votre rôle n’inclut pas cette page. Demandez à un administrateur si vous en avez besoin.",
5598
+ "backToDashboard": "Retour au tableau de bord",
5599
+ "validators": "Validateurs (Beta)",
5600
+ "docker": "Docker"
4694
5601
  },
4695
5602
  "network": {
4696
5603
  "title": "Interfaces réseau",
@@ -4829,10 +5736,35 @@
4829
5736
  "azure_frontdoor": "Porte d'entrée azur",
4830
5737
  "gcore": "CDN Gcore",
4831
5738
  "custom": "Proxys personnalisés"
4832
- }
5739
+ },
5740
+ "needProvider": "Choisissez un fournisseur CDN avant de récupérer sa liste IP.",
5741
+ "spoofWarn": "Faire confiance au mauvais CIDR permet aux clients d'usurper les en-têtes X-Forwarded-For / CDN comme adresse IP."
4833
5742
  },
4834
5743
  "linkUp": "En haut",
4835
- "linkDown": "Vers le bas"
5744
+ "linkDown": "Vers le bas",
5745
+ "linkDownTitle": "Mettez {{name}} hors ligne",
5746
+ "linkDownNeedConfirm": "Tapez le nom de l'interface pour confirmer",
5747
+ "persistNmHint": "Persistant signifie que les modifications peuvent survivre au redémarrage via NetworkManager.",
5748
+ "hideRaw": "Masquer la sortie brute",
5749
+ "rawLoadedAt": "Chargé {{time}}",
5750
+ "deleteDefaultPanelWarn": "La suppression de l'itinéraire par défaut peut abandonner cette session de panneau. Tapez DEFAULT pour confirmer.",
5751
+ "typeDefaultToConfirm": "Tapez DEFAULT pour confirmer",
5752
+ "deleteDefaultNeedConfirm": "Confirmation requise — saisissez DEFAULT (peut couper ce panneau)",
5753
+ "deleteRouteNeedConfirm": "Confirmation requise",
5754
+ "nmUnavailable": "NetworkManager n'est pas en cours d'exécution — seule une route en direct peut être ajoutée",
5755
+ "defaultRouteDownNeedName": "Il s'agit de la sortie de route par défaut. Tapez le nom de l’interface pour confirmer – le panneau peut se déconnecter.",
5756
+ "linkDownDefault": "Down default route",
5757
+ "loopbackImmutable": "Loopback cannot be changed",
5758
+ "operUnknownHint": "Kernel did not report UP/DOWN (common for lo). The interface is still usable.",
5759
+ "statUp": "Up",
5760
+ "oper": {
5761
+ "up": "Up",
5762
+ "down": "Down",
5763
+ "unknown": "Unknown",
5764
+ "other": "Other",
5765
+ "loopback": "Always on",
5766
+ "loopbackHint": "Loopback is always available and cannot be changed."
5767
+ }
4836
5768
  },
4837
5769
  "nginx": {
4838
5770
  "pillSites": "{{count}} site(s)",
@@ -4916,7 +5848,16 @@
4916
5848
  "setHsts": "HSTS",
4917
5849
  "setCfRealIp": "IP réelle de Cloudflare",
4918
5850
  "setIndexes": "Liste d'annuaire",
4919
- "bodyInherit": "Mondial"
5851
+ "bodyInherit": "Mondial",
5852
+ "stopSites": "{{n}} site(s) will stop answering HTTP.",
5853
+ "purgeCacheTitle": "Purge Nginx cache and reload?",
5854
+ "purgeCacheDesc": "Clears the on-disk cache and reloads Nginx. Live sites stay up."
5855
+ },
5856
+ "notFound": {
5857
+ "title": "Page introuvable",
5858
+ "body": "Pas de page de panneau à {{path}}.",
5859
+ "hint": "Les URL inconnues ne vous renvoient plus au tableau de bord.",
5860
+ "home": "Tableau de bord"
4920
5861
  },
4921
5862
  "notes": {
4922
5863
  "notFound": "Introuvable",
@@ -4950,19 +5891,53 @@
4950
5891
  },
4951
5892
  "ssh": {
4952
5893
  "identityNotFound": "Identité introuvable",
4953
- "registrationNotFound": "Enregistrement introuvable"
5894
+ "registrationNotFound": "Enregistrement introuvable",
5895
+ "keyOkNologin": "Key accepted. Account has no login shell (nologin) — use SFTP. Treated as PASS.",
5896
+ "keyOkSftp": "SFTP pwd a réussi après le refus du shell SSH."
4954
5897
  },
4955
5898
  "cdn": {
4956
5899
  "siteNotFound": "Site CDN introuvable",
4957
- "nodeMissing": "Le nœud n'existe pas"
5900
+ "nodeMissing": "Le nœud n'existe pas",
5901
+ "probe": {
5902
+ "timeout": "Délai d'expiration de la connexion après {{ms}}ms ({{detail}}). Le homologue peut être protégé par un pare-feu.",
5903
+ "dns": "La recherche DNS a échoué ({{detail}}).",
5904
+ "refused": "Connexion refusée après {{ms}}ms ({{detail}}). Port fermé ou blocage à sens unique.",
5905
+ "tls": "Échec de la vérification TLS ({{detail}}).",
5906
+ "unreach": "Hôte inaccessible après {{ms}}ms ({{detail}}).",
5907
+ "http": "La sonde HTTP a échoué après {{ms}}ms ({{detail}})."
5908
+ },
5909
+ "loopbackOriginRemote": "L'origine est 127.0.0.1 : il s'agit de cet hôte, et non d'un périphérique distant. Définissez une adresse IP d'origine accessible ou bind_ip.",
5910
+ "needSshOrFleet": "Le dispositif Edge distant a besoin d’une identité SSH sortante (ou d’un nom d’utilisateur) ou d’une session de flotte /agents. L'URL de santé à elle seule n'applique pas le transport.",
5911
+ "originRemoteRewrite": "Les bords distants utiliseront l'origine accessible {{url}} au lieu du bouclage.",
5912
+ "originRemoteUnknown": "L'origine est un bouclage et aucune adresse IP publique/LAN ou bind_ip n'est connue — apply refusera les bords distants jusqu'à ce qu'il y en ait un."
4958
5913
  },
4959
5914
  "backup": {
4960
5915
  "fileNotFound": "Fichier de sauvegarde introuvable",
4961
5916
  "resticNoPassword": "restic est activé mais le mot de passe n'est pas défini",
4962
- "resticNotInPath": "restic absent du PATH"
5917
+ "resticNotInPath": "restic absent du PATH",
5918
+ "dbEnvUnreadable": "Impossible de lire .db.env ; dump SQL ignoré.",
5919
+ "dbEnvNoName": ".db.env n'a pas de nom de base de données ; dump SQL ignoré.",
5920
+ "targetOutside": "La cible de restauration doit se trouver dans le répertoire d'accueil du projet ou dans la racine des fichiers publics.",
5921
+ "testUnsaved": "Test des valeurs de formulaire non enregistrées (non écrites dans les paramètres).",
5922
+ "testIdentity": "ssh (identity) to {{spec}} ok",
5923
+ "sshAuthFailed": "Clé SSH ou mot de passe rejeté (publickey). Choisissez une identité sortante ou installez sshpass.",
5924
+ "remotePathIsFile": "Le chemin distant {{path}} est un fichier. Utilisez un répertoire.",
5925
+ "remoteMkdirFailed": "Impossible de créer le répertoire distant : {{detail}}",
5926
+ "sidecarPushed": "A également poussé le side-car SQL {{name}}",
5927
+ "controlPlaneDryRun": "Aperçu uniquement – ​​rien d’écrit. Dans le panneau, utilisez Restaurer et confirmez la phrase à écrire.",
5928
+ "controlPlaneNeedConfirm": "La restauration complète du plan de contrôle nécessite la phrase de confirmation RESTORE-CONTROL-PLANE.",
5929
+ "controlPlaneRestartAfter": "Redémarrez l'API après une restauration réussie.",
5930
+ "movedToTrash": "Moved {{name}} to the recycle bin. Permanent delete after {{days}} days.",
5931
+ "restoreNameExists": "Cannot restore {{name}} — a live archive with that name already exists.",
5932
+ "restoredFromTrash": "Restored {{name}} from the recycle bin.",
5933
+ "trashEmptied": "Permanently deleted {{n}} archive(s) from the recycle bin."
4963
5934
  },
4964
5935
  "redis": {
4965
- "cliMissing": "redis-cli n'est pas installé"
5936
+ "cliMissing": "redis-cli n'est pas installé",
5937
+ "requirepassAlreadySet": "Redis already has requirepass — not overwritten.",
5938
+ "requirepassApplied": "requirepass applied at runtime",
5939
+ "requirepassApplyFailed": "Could not CONFIG SET requirepass (will rely on restart + conf)",
5940
+ "generatedRequirepass": "Generated Redis password (shown once): {{password}}"
4966
5941
  },
4967
5942
  "nginx": {
4968
5943
  "reloaded": "nginx rechargé",
@@ -4985,7 +5960,8 @@
4985
5960
  "vsftpdStarted": "vsftpd démarré",
4986
5961
  "openPortsStep": "Ports du pare-feu (manuel)",
4987
5962
  "openPortsReminder": "Ouvrez les ports TCP sur le pare-feu hôte et le groupe de sécurité cloud : {{ports}}. L'application FTPS n'ouvre pas les ports pour vous.",
4988
- "openPortsPasvHint": "Si la connexion fonctionne mais que le LIST du répertoire expire, la plage de données PASV est bloquée — ouvrez le ful"
5963
+ "openPortsPasvHint": "Si la connexion fonctionne mais que le LIST du répertoire expire, la plage de données PASV est bloquée — ouvrez le ful",
5964
+ "publicPlaintextBlocked": "Refusing to start public FTP without FTPS. Bind to this host only, enable FTPS with a certificate, or confirm PLAINTEXT to expose cleartext on the public address."
4989
5965
  },
4990
5966
  "deploy": {
4991
5967
  "nodeMissingIsolated": "Binaire Node manquant pour le déploiement isolé : {{path}} — installez la chaîne d'outils Node {{version}} puis redéployez. Refus d'écrire une unit qui provoquerait un 203/EXEC.",
@@ -5003,7 +5979,8 @@
5003
5979
  "pathOutsideSandbox": "Chemin hors bac à sable : {{target}}",
5004
5980
  "notFoundRel": "Introuvable : {{relPath}}",
5005
5981
  "fileNotFoundRel": "Fichier introuvable : {{relPath}}",
5006
- "notFoundFrom": "Introuvable : {{fromPath}}"
5982
+ "notFoundFrom": "Introuvable : {{fromPath}}",
5983
+ "alreadyExists": "Existe déjà : {{name}}"
5007
5984
  },
5008
5985
  "dns": {
5009
5986
  "needZoneServerIp": "Saisissez la zone et l'IP du serveur",
@@ -5039,11 +6016,24 @@
5039
6016
  "applyDigOk": "PowerDNS BIND : list-zones + dig OK",
5040
6017
  "applyDigFail": "Zone enregistrée dans conf mais dig encore vide/REFUSED — non marquée comme appliquée",
5041
6018
  "applySyncIncomplete": "Sync PowerDNS bind incomplète — fichier de zone sur disque uniquement (non appliqué). Corriger EXECUTE/root ou les logs pdns.",
5042
- "writeOnlyHint": "Fichier de zone écrit uniquement — PowerDNS ne répondra pas tant que load/apply n'enregistre pas named"
6019
+ "writeOnlyHint": "Fichier de zone écrit uniquement — PowerDNS ne répondra pas tant que load/apply n'enregistre pas named",
6020
+ "noActiveUnit": "No active named/bind9/pdns unit",
6021
+ "pdnsUnitRestarts": "pdns unit state/restarts: {{detail}}",
6022
+ "port53LoopbackOnly": "Port 53 is only on loopback (systemd-resolved 127.0.0.53) — not a product authoritative nameserver",
6023
+ "port53Closed": "Port 53 is not listening (UDP/TCP)",
6024
+ "udp53NotPublic": "UDP/53 is not listening on a public address",
6025
+ "tcp53NotPublic": "TCP/53 is not listening on a public address",
6026
+ "noManagedZones": "No managed zone files under dataDir/dns/zones",
6027
+ "pdnsListZones": "PowerDNS list-zones: {{n}}",
6028
+ "lookupIgnoredAt": "dig is unavailable — @{{server}} was ignored. Not using the system resolver as that server’s answer.",
6029
+ "localAOk": "local A {{name}} → {{ip}}"
5043
6030
  },
5044
6031
  "db": {
5045
6032
  "needExecuteCreate": "L'exécution hôte est désactivée ; impossible de créer la base depuis le panneau",
5046
- "dryRunMysql": "dry-run : base non créée. Utiliser --execute avec YSK_EXECUTE=1 pour provisionner"
6033
+ "dryRunMysql": "dry-run : base non créée. Utiliser --execute avec YSK_EXECUTE=1 pour provisionner",
6034
+ "remoteNoCreds": "Aucun nom d'utilisateur/mot de passe stocké — TCP uniquement (l'enregistrement n'est pas une connexion).",
6035
+ "remoteReachable": "TCP {{host}} : {{port}} ouvert ({{ms}}ms).",
6036
+ "remoteUnreachable": "TCP {{host}} :{{port}} fermé ou filtré ({{ms}}ms)."
5047
6037
  },
5048
6038
  "net": {
5049
6039
  "invalidIface": "Nom d'interface invalide",
@@ -5124,7 +6114,17 @@
5124
6114
  "dns": "DNS",
5125
6115
  "email": "E-mail",
5126
6116
  "isolation": "Isolation de projet",
5127
- "ops": "Opérations"
6117
+ "ops": "Opérations",
6118
+ "runtimesNode": "Noeud.js",
6119
+ "runtimesPhp": "PHP",
6120
+ "runtimesPython": "Python",
6121
+ "runtimesGo": "Go",
6122
+ "pm2": "PM2",
6123
+ "runtimesNodeFix": "Installer Node à partir de /runtimes/node",
6124
+ "runtimesPhpFix": "Installer PHP depuis /runtimes/php",
6125
+ "runtimesPythonFix": "Installer Python depuis /runtimes/python",
6126
+ "runtimesGoFix": "Installer Go à partir de /runtimes/go",
6127
+ "pm2Fix": "Installez PM2 à partir de la page d'exécution du nœud"
5128
6128
  },
5129
6129
  "needAdmin": "Autorisation administrateur requise",
5130
6130
  "notInstalled": "Non installé",
@@ -5317,7 +6317,7 @@
5317
6317
  "n0179": "Bucket/chemin S3 non configuré",
5318
6318
  "n0180": "SFTP.ssh chown nécessite root + YSK_EXECUTE",
5319
6319
  "n0181": "Confirmation SIGKILL Kill: true",
5320
- "n0182": "SMTP /",
6320
+ "n0182": "SMTP/",
5321
6321
  "n0183": "SPF",
5322
6322
  "n0184": "SRV : priorité poids port cible",
5323
6323
  "n0185": "SSH",
@@ -5397,7 +6397,7 @@
5397
6397
  "n0259": "domaine",
5398
6398
  "n0260": "domaine introuvable :",
5399
6399
  "n0261": "dovecot reload échoué ou service absent (sieve Wrote ; reload Success)",
5400
- "n0262": "dry-run dispatch flotte (pas )",
6400
+ "n0262": "essai de répartition de flotte (non mis en file)",
5401
6401
  "n0263": "dry-run push pair (pas scp)",
5402
6402
  "n0264": "dry-run install distant (pas ssh)",
5403
6403
  "n0265": "dry-run transfert terminé ( bootstrap complet)",
@@ -5406,10 +6406,10 @@
5406
6406
  "n0268": "dry-run — n'écrit pas /etc",
5407
6407
  "n0269": "dry-run : ajoutez d'abord --execute pour appliquer ufw",
5408
6408
  "n0270": "dry-run : inventaire + prévol OK, pas de package/transfert",
5409
- "n0271": "dry-run : probe/. ajoutez d'abord --execute YSK_EXECUTE=1 pour vraiment provisionner",
5410
- "n0272": "dry-run : fichier géré écrit (dataDir). ajoutez d'abord execute + YSK_EXECUTE=1 + root pour le drop-in système",
5411
- "n0273": "dry-run : non. ajoutez d'abord --execute YSK_EXECUTE=1 pour vraiment bannir",
5412
- "n0274": "dry-run : non. ajoutez d'abord --execute YSK_EXECUTE=1 pour vraiment débannir",
6409
+ "n0271": "Exécution à sec : sonde/plan uniquement. Passez --execute avec YSK_EXECUTE=1 pour effectuer le provisionnement.",
6410
+ "n0272": "Exécution à sec : écriture du fichier géré (dataDir). Passez --execute avec YSK_EXECUTE=1 en tant que root pour installer le système drop-in.",
6411
+ "n0273": "Exécution à sec : non interdite. Passez --execute avec YSK_EXECUTE=1 pour réellement interdire.",
6412
+ "n0274": "Exécution à sec : non interdite. Passez --execute avec YSK_EXECUTE=1 pour débloquer réellement.",
5413
6413
  "n0275": "dryRun=true — API de modification",
5414
6414
  "n0276": "dryRun : n'écrit pas",
5415
6415
  "n0277": "dump écrit dans dataDir, pas de transfert",
@@ -5758,7 +6758,7 @@
5758
6758
  "n0620": "démarrer processus pas processus",
5759
6759
  "n0621": "OPcache",
5760
6760
  "n0622": "SSL",
5761
- "n0623": "",
6761
+ "n0623": "Actif",
5762
6762
  "n0624": "fichier",
5763
6763
  "n0625": "fichier",
5764
6764
  "n0626": "nœud wsrep, HA ≥2 nœuds",
@@ -5974,7 +6974,7 @@
5974
6974
  "n0836": "certificat veuillez — Échec",
5975
6975
  "n0837": "≥ fichier",
5976
6976
  "n0838": "paramètres conservés sauvegarde",
5977
- "n0839": "Succès cette cible peut BatchMode, ",
6977
+ "n0839": "Le succès signifie que cette cible accepte BatchMode SSH (non interactif). Il ne s’agit pas d’une concession d’accès mondial.",
5978
6978
  "n0840": "ou 32767",
5979
6979
  "n0841": "logiciel installé",
5980
6980
  "n0842": "autorisation/",
@@ -6134,7 +7134,7 @@
6134
7134
  "n0996": "nginx local -t OK ( conf gérée, ≠ edge appliqué)",
6135
7135
  "n0997": "wsrep local possible, taille pas nœud",
6136
7136
  "n0998": "ysk.json local illisible / empreinte",
6137
- "n0999": "local OK ; sonde pair saine complète (non )",
7137
+ "n0999": "Le nœud local est OK ; un état de santé complet nécessite une sonde par les pairs (non effectuée).",
6138
7138
  "n1000": "nginx local — conf écrite, pas de rechargement",
6139
7139
  "n1001": "connexion NM localeDisponible ; réussira. peut \"\" ou NetworkManager.",
6140
7140
  "n1002": "ps localDisponible — impossible ()",
@@ -6210,7 +7210,7 @@
6210
7210
  "n1070": "Écrit sur le control plane ; non appliqué sur l'hôte",
6211
7211
  "n1071": "apt-obtenir",
6212
7212
  "n1072": "défi d'authentification",
6213
- "n1073": "bind_ip",
7213
+ "n1073": "liaison_ip",
6214
7214
  "n1074": "dataDir — base de données mise à jour",
6215
7215
  "n1075": "domaine vacation.sieve — ignoré par boîte aux lettres",
6216
7216
  "n1076": "edge peut apply ( skip/drain)— conf écrite",
@@ -6730,7 +7730,7 @@
6730
7730
  "n1590": "",
6731
7731
  "n1591": "Pas root — chemins système useradd / systemd / nginx restreints",
6732
7732
  "n1592": "sans seccomp nécessite runAsUser",
6733
- "n1593": "panneau veuillez /",
7733
+ "n1593": "Requêtes publiques / min",
6734
7734
  "n1594": "connexion panneau ; Disponible\"\" ( )",
6735
7735
  "n1595": "Le panneau ne s'exécute pas en tant que root",
6736
7736
  "n1596": "Disponible apply:false",
@@ -7001,7 +8001,7 @@
7001
8001
  "t0251": "{{v0}} Installation incomplète",
7002
8002
  "t0252": "{{v0}} démarrage du service",
7003
8003
  "t0253": "Échec du démarrage : {{v0}}",
7004
- "t0254": "Prend en charge Node.js version {{v0}} ; Version disponible : {{v1}}",
8004
+ "t0254": "Prend en charge Node.js {{v0}} ; versions disponibles : {{v1}}",
7005
8005
  "t0255": "Prend en charge PHP version {{v0}} ; Disponible : {{v1}}",
7006
8006
  "t0256": "Prend en charge Python version {{v0}} ; Disponible : {{v1}}",
7007
8007
  "t0257": "Prend en charge Go version {{v0}} ; Disponible : {{v1}}",
@@ -7123,12 +8123,12 @@
7123
8123
  "t0373": "Isolation du projet \"{{v0}}\"",
7124
8124
  "t0374": "vers le chemin local {{v0}}",
7125
8125
  "t0375": "identité {{v0}} : {{v1}}",
7126
- "t0376": "scp (identité) vers {{v0}}",
7127
- "t0377": "échec scp(identité) : {{v0}}",
7128
- "t0378": "scp vers {{v0}}",
7129
- "t0379": "échec scp : {{v0}}",
7130
- "t0380": "scp vers {{v0}}",
7131
- "t0381": "échec scp : {{v0}} (identité distante de secours identityId)",
8126
+ "t0376": "sftp (identité) vers {{v0}} réussi",
8127
+ "t0377": "échec sftp (identité) : {{v0}}",
8128
+ "t0378": "sftp vers {{v0}} réussi",
8129
+ "t0379": "échec sftp : {{v0}}",
8130
+ "t0380": "sftp vers {{v0}} réussi",
8131
+ "t0381": "échec sftp : {{v0}} (vous pouvez définir backup remote identityId)",
7132
8132
  "t0382": "S3 {{v0}}",
7133
8133
  "t0383": "échec S3 : {{v0}}",
7134
8134
  "t0384": " : {{v0}}/{{v1}} admin 2FA activée",
@@ -7136,7 +8136,7 @@
7136
8136
  "t0386": "{{v0}} CHEMIN",
7137
8137
  "t0387": "{{v0}} introuvable",
7138
8138
  "t0388": "Installez {{v0}} ou ajoutez-le au PATH",
7139
- "t0389": "Version disponible : {{v0}}",
8139
+ "t0389": "Versions disponibles : {{v0}}",
7140
8140
  "t0390": "{{v0}} % ( {{v1}} Mo)",
7141
8141
  "t0391": "{{v0}} % ({{v1}})",
7142
8142
  "t0392": "démarrage du service {{v0}}",
@@ -7379,15 +8379,15 @@
7379
8379
  "t0629": "projet {{v0}} home : {{v1}}",
7380
8380
  "t0630": "projet {{v0}} bind_ip={{v1}} — possible ( IP )",
7381
8381
  "t0631": "projet {{v0}} home n'est pas un chemin : {{v1}}",
7382
- "t0632": "home (store ) : {{v0}}",
8382
+ "t0632": "Accueil orphelin sur disque (aucun projet de magasin correspondant) : {{v0}}",
7383
8383
  "t0633": "Maildir : {{v0}}",
7384
8384
  "t0634": "{{v0}} — impossible vers la cible",
7385
8385
  "t0635": "sondage impossible {{v0}}",
7386
8386
  "t0636": "{{v0}} · {{v1}}",
7387
8387
  "t0637": "projet {{v0}} · {{v1}} · DB {{v2}} · Redis {{v3}}",
7388
- "t0638": "installation logiciel {{v0}} · homes {{v1}}",
8388
+ "t0638": "Installer le logiciel {{v0}} · homes {{v1}}",
7389
8389
  "t0639": "bascule hôte {{v0}}",
7390
- "t0640": "Avertissement {{v0}} (veuillez )",
8390
+ "t0640": "{{v0}} avertissement(s) — examen avant le basculement.",
7391
8391
  "t0641": "clé {{v0}}",
7392
8392
  "t0642": "clé impossible : {{v0}}",
7393
8393
  "t0643": "cible : écriture authorized_keys impossible : {{v0}}",
@@ -7451,7 +8451,7 @@
7451
8451
  "t0701": "CDN {{v0}}",
7452
8452
  "t0702": "nœud origin shield inexistant : {{v0}}",
7453
8453
  "t0703": "edges : {{v0}}",
7454
- "t0704": "URL origin () : {{v0}}",
8454
+ "t0704": "URL d'origine (depuis la liaison du projet) : {{v0}}",
7455
8455
  "t0705": "mise à jour CDN {{v0}}",
7456
8456
  "t0706": "création CDN {{v0}}",
7457
8457
  "t0707": "origin shield : edge shield {{v0}} → {{v1}}",
@@ -7547,7 +8547,16 @@
7547
8547
  "t0797": "échec du fuseau horaire : {{v0}}",
7548
8548
  "tScoreFrom": "score={{score}} de={{from}}",
7549
8549
  "appliedTag": " (appliqué)",
7550
- "writtenTag": " (écrit seulement)"
8550
+ "writtenTag": " (écrit seulement)",
8551
+ "selfDestMissing": "Répertoire d'installation en cours introuvable (systemd ExecStart ou cli.js)",
8552
+ "selfDestUnwritable": "Impossible d'écrire dans le répertoire d'installation en cours {{v0}}",
8553
+ "selfApplied": "{{v0}} appliqué sur {{v1}}",
8554
+ "selfVerifyFail": "Le fichier de version ne contient pas {{v0}} après application",
8555
+ "selfDownloadFail": "Impossible de télécharger ou extraire le paquet officiel {{v0}} : {{v1}}",
8556
+ "selfOverlayFail": "Impossible d'appliquer le paquet officiel au répertoire en cours : {{v0}}",
8557
+ "selfUpgradeHint": "Échec de l'application du panneau. En root : curl -fsSL https://raw.githubusercontent.com/yanshekki/ysk-server/main/install.sh | bash -s -- --upgrade",
8558
+ "n1611": "UFW est inactif : {{n}} les règles de refus permanents sont stockées dans user.rules mais le noyau ne les applique pas.",
8559
+ "n1612": "UFW est inactif. Une règle de refus serait écrite uniquement dans user.rules — le noyau ne supprimerait pas de paquets. Activez d’abord UFW. Ne s'active pas automatiquement."
7551
8560
  },
7552
8561
  "tpl": {
7553
8562
  "deleted": "Supprimé {{name}}",
@@ -7610,7 +8619,7 @@
7610
8619
  "noParen": "(aucun)",
7611
8620
  "keepOldDb": "(ancienne BD conservée)",
7612
8621
  "ufwNotDetected": "UFW non détecté sur cet hôte",
7613
- "fail2banStartHint": "Démarrez-le sur la page Fail2ban",
8622
+ "fail2banStartHint": "Démarrez-le sur la page fail2ban",
7614
8623
  "hasExecuteNotRoot": "EXECUTE est activé mais le processus n'est pas root",
7615
8624
  "notRootTarget": "Pas root (useradd/apt cibles seront bloqués)",
7616
8625
  "reapplyDone": "étapes clés de réapplication terminées",
@@ -7777,7 +8786,10 @@
7777
8786
  "accessReconnectHint": "Les clients déjà connectés doivent se reconnecter pour prendre de nouveaux itinéraires",
7778
8787
  "ovpnNatDurable": "OpenVPN NAT/forward installé pour le redémarrage (systemd ExecStartPost).",
7779
8788
  "clientFullTunnelProtect": "Client tunnel complet détecté (AllowedIPs 0.0.0.0/0). Protection de l'hôte appliquée afin que les réponses du panneau/SSH restent sur la carte réseau LAN.",
7780
- "clientFullTunnelHint": "Astuce : pour un accès partagé uniquement, définissez AllowedIPs sur les CIDR VPN/LAN (et non 0.0.0.0/0) dans la configuration, puis reconnectez-vous."
8789
+ "clientFullTunnelHint": "Astuce : pour un accès partagé uniquement, définissez AllowedIPs sur les CIDR VPN/LAN (et non 0.0.0.0/0) dans la configuration, puis reconnectez-vous.",
8790
+ "serverStopped": "{{engine}} serveur arrêté.",
8791
+ "serverStopFailed": "Impossible d'arrêter le serveur {{engine}} : {{detail}}",
8792
+ "peersSynced": "Peer list reloaded on the running WireGuard interface."
7781
8793
  },
7782
8794
  "vnc": {
7783
8795
  "needInstall": "Installer {{stack}}",
@@ -7871,7 +8883,21 @@
7871
8883
  "clientDeleted": "Profil client supprimé",
7872
8884
  "sessionStartCwd": "Échec du démarrage de VNC : répertoire de travail non accessible à l'utilisateur de la session (affichage :{{display}}). Corrigé en démarrant depuis HOME.",
7873
8885
  "desktopRestarted": "Profil de bureau appliqué et session redémarrée ({{desktop}}). Reconnectez VNC/noVNC.",
7874
- "desktopNeedsStart": "Profil de bureau {{desktop}} écrit sur xstartup. Démarrez la session pour postuler."
8886
+ "desktopNeedsStart": "Profil de bureau {{desktop}} écrit sur xstartup. Démarrez la session pour postuler.",
8887
+ "passwordNeedTiger": "vncpasswd introuvable. Installez TigerVNC (tigervnc-standalone-server) avant de définir un mot de passe.",
8888
+ "linuxUserRolledBack": "Suppression de l'utilisateur Linux restant {{user}} après l'échec du mot de passe VNC.",
8889
+ "linuxUserOrphan": "Impossible de supprimer l'utilisateur Linux restant {{user}} après l'échec du mot de passe VNC.",
8890
+ "sessionStartHostname": "Failed to start display :{{display}}: this host cannot resolve its own hostname. Add the hostname to /etc/hosts (or fix DNS) then start the session again.",
8891
+ "userdelLeftover": "Panel account removed, but Linux user {{user}} is still on the host. Remove it from Users or the host.",
8892
+ "hostnameResolves": "Hostname {{hostname}} resolves.",
8893
+ "hostnameUnresolvable": "This host cannot resolve its own hostname ({{hostname}}). VNC session start will fail until /etc/hosts is fixed.",
8894
+ "hostnameAlreadyResolves": "Hostname {{hostname}} already resolves — /etc/hosts unchanged.",
8895
+ "hostnameWouldAppend": "Would append to /etc/hosts: {{line}}",
8896
+ "hostnameAppended": "Appended to /etc/hosts: {{line}}",
8897
+ "hostnameAppendFailed": "Could not write /etc/hosts: {{detail}}",
8898
+ "skipStartHostname": "Did not start the display — fix hostname resolution first.",
8899
+ "hostnameAliasPresent": "Hostname {{hostname}} is already an exact /etc/hosts alias — not appended again.",
8900
+ "hostnameStillUnresolvable": "Wrote /etc/hosts but {{hostname}} still does not resolve. Confirm nsswitch hosts includes files."
7875
8901
  },
7876
8902
  "apache": {
7877
8903
  "needServerName": "Nom du serveur requis",
@@ -7921,7 +8947,110 @@
7921
8947
  "startedDetached": "Le travailleur détaché du tracker BT a démarré (pid {{pid}}, port {{port}})",
7922
8948
  "runningDetached": "Tracker exécuté en tant que travailleur détaché (pid {{pid}})",
7923
8949
  "jobQueued": "Création de torrent BT en file d'attente (partage important)",
7924
- "jobRunning": "Création de torrent BT en cours d'exécution"
8950
+ "jobRunning": "Création de torrent BT en cours d'exécution",
8951
+ "libraryAdded": "Ajout de {{name}} à la bibliothèque WebTorrent",
8952
+ "libraryInspectFailed": "Impossible de lire ce .torrent ou cet aimant",
8953
+ "libraryDup": "Ce torrent est déjà dans la bibliothèque",
8954
+ "libraryDestBad": "Le dossier de sauvegarde n'est pas un chemin de fichiers valide",
8955
+ "libraryTorrentTooBig": "Le fichier .torrent fait plus de 8 Mo",
8956
+ "libraryNotFound": "Élément de bibliothèque introuvable",
8957
+ "libraryPaused": "En pause",
8958
+ "libraryResumed": "Reprise",
8959
+ "libraryRemoved": "Supprimé de la bibliothèque",
8960
+ "libraryFilesRemoved": "Fichiers téléchargés supprimés",
8961
+ "libraryRestoreDone": "Restauration de la bibliothèque : démarrée {{started}}/{{attempted}} (échec {{failed}})",
8962
+ "applyTrackersDone": "Application de trackers supplémentaires aux {{n}} emplacements d'annonce en direct",
8963
+ "libraryNeedServe": "Enregistré. Ouvrez le panneau (serveur ysk-server) pour que WebTorrent puisse télécharger ou démarrer.",
8964
+ "libraryDestIsFile": "Impossible de créer un dossier nommé {{name}} — un fichier portant ce nom existe déjà.",
8965
+ "librarySeedMissing": "Aucun fichier correspondant à créer dans ce dossier.",
8966
+ "libraryWaitingPeers": "En attente de pairs. Si les fichiers sont déjà sur cet hôte, ajoutez-les à nouveau et choisissez seed-existant."
8967
+ },
8968
+ "leftover": {
8969
+ "staleCliTitle": "CLI restante périmée",
8970
+ "staleCli": "CLI restante toujours présente : {{path}} (produit en cours d'exécution {{version}}). PATH peut le préférer. Supprimer avec : rm -f {{path}}",
8971
+ "apacheDefaultTitle": "Site par défaut restant d'Apache",
8972
+ "apacheDefault": "Apache 000 par défaut est toujours activé. Il s'agit du fichier stock du site — cela ne signifie pas qu'Apache écoute sur public :80 (YSK Apache est attendu sur 127.0.0.1:8080). La superposition ne le désactive pas. Appliquez Apache à partir du panneau ou de l'hébergement Apache apply --execute.",
8973
+ "nginxCatchAllTitle": "Nginx fourre-tout manquant",
8974
+ "nginxCatchAll": "ysk-000-default.conf n'est pas dans /etc/nginx/conf.d. Un SNI inconnu peut échouer. Exécutez les projets nginx-sync --execute.",
8975
+ "vsftpdTitle": "L'unité vsftpd a échoué",
8976
+ "vsftpd": "vsftpd a échoué. La superposition ne réécrit pas Listen/listen_ipv6. Appliquez FTP à partir du panneau.",
8977
+ "dovecotTitle": "Dovecot TLS indique un certificat manquant",
8978
+ "dovecot": "Dovecot ssl_cert indique qu'il manque {{path}}. La superposition ne réécrit pas ssl=no. Appliquez le courrier TLS après avoir émis le certificat ou appliquez la pile de courrier électronique.",
8979
+ "overlayDoesNotHeal": "La superposition de produits ne réécrit pas nginx, Apache, vsftpd ou Dovecot. Utilisez les commandes d'application répertoriées (root + YSK_EXECUTE=1).",
8980
+ "readinessTitle": "Restes d’hôte après superposition",
8981
+ "readinessClean": "Aucun défaut Apache restant, nginx fourre-tout manquant, échec de vsftpd ou CLI obsolète détecté.",
8982
+ "staleCliRemoved": "CLI résiduel {{path}} supprimé.",
8983
+ "staleCliRemoveFailed": "Impossible de supprimer le CLI résiduel {{path}} : {{detail}}",
8984
+ "vsftpdSslOff": "Certificat FTPS manquant : ssl_enable=NO sur vsftpd, puis redémarrage.",
8985
+ "dovecotSslOff": "{{path}} manquant : Dovecot en ssl=no, puis redémarrage.",
8986
+ "nginxRemoved": "Removed leftover nginx conf {{path}}.",
8987
+ "nginxNotLeftover": "Not a leftover public-files conf — refuse delete.",
8988
+ "nginxUnusedKeep": "000-default is unused, not leftover — not deleted.",
8989
+ "nginxSystemCopy": "System copy still present: {{path}}. Needs YSK_EXECUTE + root to remove.",
8990
+ "nginxReloadFailed": "nginx -t or reload failed after removing {{path}}.",
8991
+ "executeStaleCli": "Pass --execute (root + YSK_EXECUTE=1) to remove stale CLI bins.",
8992
+ "executeMissingTls": "Pass --execute (root + YSK_EXECUTE=1) to disable missing-cert TLS so vsftpd/Dovecot can start.",
8993
+ "executeGeneric": "Pass --execute (root + YSK_EXECUTE=1) to apply leftover cleanup for the findings above."
8994
+ },
8995
+ "git": {
8996
+ "missingBin": "git n'est pas sur PATH",
8997
+ "auth": "L'authentification a échoué. Ajoutez une clé de déploiement ou un jeton HTTPS.",
8998
+ "hostkey": "La vérification de la clé de l'hôte SSH a échoué. Confirmez et épinglez la clé hôte.",
8999
+ "dirty": "L'arbre de travail a {{count}} changement(s) local(s). La traction est bloquée.",
9000
+ "diverged": "Impossible d'avancer rapidement. Réinitialisez la référence distante si vous avez l’intention de supprimer l’historique Git local.",
9001
+ "missingRef": "Cette branche, cette balise ou ce commit ne se trouve pas sur la télécommande.",
9002
+ "shallow": "Ce clone est peu profond. Récupérez l’historique complet avant d’épingler un ancien commit.",
9003
+ "notRepo": "app/ n'est pas encore un référentiel Git.",
9004
+ "unrelated": "Des histoires sans rapport. Reclonez uniquement après confirmation - les fichiers personnalisés seront perdus.",
9005
+ "lock": "Git index.lock est présent. Supprimez-le uniquement si aucun processus git n'est en cours d'exécution.",
9006
+ "disk": "Disque plein ou quota dépassé.",
9007
+ "timeout": "Git a expiré.",
9008
+ "network": "Erreur réseau lors de la conversation avec la télécommande.",
9009
+ "lfs": "Ce dépôt utilise Git LFS et git-lfs n'est pas disponible.",
9010
+ "submodule": "La mise à jour du sous-module a échoué.",
9011
+ "unknown": "Git a échoué. Voir le résultat de la commande.",
9012
+ "fetchOk": "Récupéré de l'origine.",
9013
+ "checkoutOk": "J'ai vérifié {{ref}}.",
9014
+ "resetOk": "Réinitialisez difficilement à {{ref}}.",
9015
+ "envRestored": "App/.env restauré à partir du plan de contrôle.",
9016
+ "needPinHost": "La clé d'hôte SSH n'est pas épinglée. Scannez-le et épinglez-le avant de le cloner ou de le récupérer.",
9017
+ "tokenSaved": "Jeton HTTPS stocké (plus jamais affiché).",
9018
+ "tokenCleared": "Jeton HTTPS supprimé.",
9019
+ "tokenInvalid": "Le jeton doit comporter au moins 8 caractères.",
9020
+ "deployKeyCreated": "Clé de déploiement créée. Ajoutez la clé publique sur l'hôte Git.",
9021
+ "deployKeyCleared": "Clé de déploiement détachée de ce projet.",
9022
+ "hostPinned": "Clés d'hôte SSH épinglées pour {{host}}.",
9023
+ "hostUnpinned": "Clés d'hôte SSH épinglées effacées.",
9024
+ "hostScanFailed": "ssh-keyscan n'a renvoyé aucune clé pour cet hôte.",
9025
+ "hookEnabled": "Le hook Git entrant est activé. Collez vous-même l'URL dans GitHub, Gitea ou GitLab.",
9026
+ "hookDisabled": "Le hook Git entrant est désactivé. L'URL ne sera pas synchronisée.",
9027
+ "hookSecretOnce": "Copiez ce secret de hook maintenant. Il n'est plus affiché.",
9028
+ "refsNeedUrl": "Entrez d'abord une URL Git.",
9029
+ "refsOk": "Chargé {{branches}} branche(s) et {{tags}} balise(s).",
9030
+ "refsEmpty": "La télécommande n'a annoncé aucune branche ni balise.",
9031
+ "diffEmpty": "Aucune différence non mise en scène (le fichier .env protégé est exclu)."
9032
+ },
9033
+ "migrate": {
9034
+ "orphanConfirm": "Tapez le chemin d’accès exact restant pour confirmer la suppression.",
9035
+ "orphanStillInStore": "Cette maison fait toujours partie d'un projet du magasin.",
9036
+ "orphanMissing": "Chemin pas sur le disque : {{path}}",
9037
+ "orphanNeedExecute": "Supprimerait les restes {{path}}. Nécessite YSK_EXECUTE=1.",
9038
+ "orphanRmFailed": "Impossible de supprimer la maison restante : {{detail}}",
9039
+ "orphanRemoved": "Suppression de la maison de projet restante {{path}}."
9040
+ },
9041
+ "defense": {
9042
+ "panelReqLabel": "Demandes de panel / min",
9043
+ "panelReqExcluded": "Trafic du panneau authentifié : affiché ici, non pris en compte dans le score de menace",
9044
+ "tcpOk": "TCP {{target}} accessible",
9045
+ "tcpFail": "TCP {{target}} a échoué",
9046
+ "dnsDegraded": "Chemin DNS dégradé",
9047
+ "reqRateHigh": "Taux de requêtes publiques {{reqs}}/min ≥ {{threshold}}",
9048
+ "ddosHeuristic": "Taux de requêtes publiques élevé et échec de la sonde de périphérie"
9049
+ },
9050
+ "publicFiles": {
9051
+ "liveConf": "Conf Nginx en service : {{path}}",
9052
+ "publicRoot": "Racine publique : {{path}}",
9053
+ "confNameStale": "Le fichier {{file}} ne correspond pas au server_name actuel {{serverName}}. Réappliquez les fichiers publics pour le renommer."
7925
9054
  }
7926
9055
  },
7927
9056
  "ops": {
@@ -8113,7 +9242,8 @@
8113
9242
  "deployTitle": "Suivant : Déployer",
8114
9243
  "deployBody": "Utilisez Déployer dans l'en-tête, ou l'onglet Déployer pour Git.",
8115
9244
  "nginxTitle": "Suivant : Publier Nginx",
8116
- "nginxBody": "Ouvrez l'onglet Réseau pour publier Nginx (SSL optionnel)."
9245
+ "nginxBody": "Ouvrez l'onglet Réseau pour publier Nginx (SSL optionnel).",
9246
+ "provisionOsAction": "Create system user"
8117
9247
  },
8118
9248
  "healthDetail": {
8119
9249
  "none": "Pas encore de contrôle d'état",
@@ -8123,7 +9253,12 @@
8123
9253
  "httpStatus": "HTTP",
8124
9254
  "latency": "Latence",
8125
9255
  "error": "Erreur",
8126
- "at": "Vérifié le"
9256
+ "at": "Vérifié le",
9257
+ "deployMode": "Deploy mode",
9258
+ "edgeKind": "Edge",
9259
+ "goLiveOk": "Go-live",
9260
+ "goLiveAt": "Go-live at",
9261
+ "degraded": "Degraded"
8127
9262
  },
8128
9263
  "railPhp": "PHP/site",
8129
9264
  "railStatic": "Site statique",
@@ -8554,14 +9689,14 @@
8554
9689
  "railNode": "Processus Node",
8555
9690
  "runtimeName": {
8556
9691
  "php": "PHP",
8557
- "node": "Node.js",
9692
+ "node": "Noeud.js",
8558
9693
  "static": "Statique",
8559
9694
  "python": "Python",
8560
- "go": "Go",
8561
- "rust": "Rust",
9695
+ "go": "Aller",
9696
+ "rust": "Rouiller",
8562
9697
  "java": "Java",
8563
9698
  "kotlin": "Kotlin",
8564
- "bun": "Bun"
9699
+ "bun": "Chignon"
8565
9700
  },
8566
9701
  "netCacheTitle": "Cache",
8567
9702
  "logsDeepAccess": "Centre de logs · accès",
@@ -8598,16 +9733,132 @@
8598
9733
  "netPublishMaint": "Entretien",
8599
9734
  "sslNeedDomain": "Définissez un domaine avant de publier Nginx / SSL.",
8600
9735
  "createTemplateMissing": "{{v0}} ;「— —」。",
8601
- "deleteDialogDesc": "「{{v0}}」。。",
9736
+ "deleteDialogDesc": "「{{name}}」。。",
8602
9737
  "deleteWillStop": "systèmed / PM2 /",
8603
9738
  "deleteWillWeb": "Configuration Nginx、Pool PHP-FPM、Apache vhost()",
8604
9739
  "deleteWillOs": "LinuxMaison()",
8605
9740
  "deleteKeepOs": "AccueilLinux()",
8606
9741
  "deleteWillDb": "…",
8607
9742
  "deleteRemoveFilesDesc": "Annuler,",
8608
- "deleteTypeNameHint": "「{{v0}}」",
9743
+ "deleteTypeNameHint": "「{{name}}」",
8609
9744
  "deleteDnsWarn": "Zone DNS / domaine 。",
8610
- "manageInNginx": "Gérer dans Nginx"
9745
+ "manageInNginx": "Gérer dans Nginx",
9746
+ "advFtpHomeApp": "Répertoire app du site",
9747
+ "advFtpHomeRoot": "Répertoire racine du projet",
9748
+ "advFtpManage": "Ouvrir la page FTP",
9749
+ "listDesc": "Gérer les sites sur cet hôte.",
9750
+ "resShell": "Coquille de connexion",
9751
+ "resSaveHint": "Enregistrez et appliquez les modifications au système d'exploitation en direct. Le plan de contrôle stocke uniquement le formulaire. Réappliquer utilise les dernières valeurs enregistrées.",
9752
+ "resBashConfirmTitle": "Autoriser les bash interactifs ?",
9753
+ "resBashConfirmDesc": "Cela accorde un shell de connexion interactif à l’utilisateur du projet. Confirmez uniquement si vous avez besoin de SSH ou PTY en tant qu'utilisateur.",
9754
+ "noPathSepHint": "Le nom ne peut pas contenir / ou \\.",
9755
+ "createGitHint": "Facultatif. Stocké sur le projet ; cloner à partir de l'onglet Déployer (ne clone pas lors de la création).",
9756
+ "gitBranch": "Bifurquer",
9757
+ "gitBranchHint": "Branch or tag. Empty uses the remote default. First clone is shallow (depth 1).",
9758
+ "gitLastRef": "Dernière synchronisation : {{branch}} @ {{commit}}",
9759
+ "gitConfirmTitle": "Cloner dans ce projet ?",
9760
+ "gitConfirmBody": "Si app/ est toujours l'espace réservé Hello World, il sera effacé, puis cloné. Les fichiers personnalisés qui ne sont pas un échafaudage YSK sont refusés.",
9761
+ "runtimeActual": "Binaire réel {{path}}",
9762
+ "gitConfirmRemoteBody": "Cela pointe l'origine vers la nouvelle URL et extrait. Des histoires sans rapport échouent ; les fichiers personnalisés ne sont pas effacés.",
9763
+ "runtimeFallback": "L'option {{version}} choisie n'est pas sur cet hôte. Le processus utilise {{path}}.",
9764
+ "gitSync": "Synchroniser",
9765
+ "gitFetch": "Aller chercher",
9766
+ "gitCheckout": "Vérifier",
9767
+ "gitReset": "Réinitialiser à distance",
9768
+ "gitDeepen": "Récupérer l'historique complet",
9769
+ "gitLogTitle": "Commis récents",
9770
+ "gitDirtyTitle": "Les modifications locales bloquent l'extraction",
9771
+ "gitDirtyBody": "{{count}} le(s) fichier(s) diffèrent de Git (modifications de fichiers ou application). Jetez-les ou abandonnez.",
9772
+ "gitDiscard": "Supprimer les fichiers locaux",
9773
+ "gitOpenFiles": "Ouvrir dans les fichiers",
9774
+ "gitNotCloned": "Non cloné",
9775
+ "gitClean": "Faire le ménage",
9776
+ "gitDirty": "Sale",
9777
+ "gitBehind": "Derrière {{count}}",
9778
+ "gitAhead": "En avant {{count}}",
9779
+ "gitDetached": "Épinglé",
9780
+ "gitShallow": "Peu profond",
9781
+ "gitMissing": "git manquant",
9782
+ "gitResetConfirmTitle": "Réinitialisation difficile à distance ?",
9783
+ "gitResetConfirmBody": "Cela supprime l'historique Git local et les fichiers non suivis, à l'exception de .env, puis restaure .env à partir du plan de contrôle.",
9784
+ "gitHeads": "Succursales distantes",
9785
+ "gitToken": "Jeton HTTPS",
9786
+ "gitTokenHint": "Personal access token. Stored encrypted; never written into the remote URL.",
9787
+ "gitTokenPlaceholder": "ghp_… ou glpat-…",
9788
+ "gitTokenSet": "Ensemble de jetons",
9789
+ "gitSaveToken": "Enregistrer le jeton",
9790
+ "gitClearToken": "Effacer le jeton",
9791
+ "gitDeployKey": "Déployer la clé publique",
9792
+ "gitDeployKeyHint": "Ajoutez-le en tant que clé de déploiement en lecture seule sur l'hôte Git.",
9793
+ "gitDeployKeyOn": "Clé de déploiement",
9794
+ "gitMakeKey": "Créer une clé de déploiement",
9795
+ "gitCopyPub": "Copier la clé publique",
9796
+ "gitClearKey": "Effacer la clé de déploiement",
9797
+ "gitKeyCopied": "Clé publique copiée",
9798
+ "gitPinHost": "Épingler la clé de l'hôte",
9799
+ "gitPinHostBody": "{{host}} n'est pas épinglé. Confirmez les empreintes digitales, puis épinglez avant le clonage SSH.",
9800
+ "gitHostUnpinned": "Clé d'hôte non épinglée",
9801
+ "gitHookTitle": "Inbound hook",
9802
+ "gitHookHint": "Paste POST /api/v1/hooks/git/<id> into GitHub / Gitea / GitLab yourself (push events). Not Slack. Secret is HMAC or X-YSK-Git-Hook.",
9803
+ "gitHookOn": "Hook on",
9804
+ "gitHookOff": "Hook off",
9805
+ "gitHookEnable": "Enable hook",
9806
+ "gitHookRotate": "Rotation secrète",
9807
+ "gitHookDisable": "Disable hook",
9808
+ "gitHookSecretOnce": "Copy this secret now — it is not stored in the page after you leave.",
9809
+ "gitHookCopyUrl": "Copy URL",
9810
+ "gitHookCopySecret": "Copier le secret",
9811
+ "gitHookCopied": "Copié",
9812
+ "gitHookSetup": "Add the webhook yourself. Payload URL = the URL above. Content type application/json. Events: push only. Secret = the one-time value.",
9813
+ "gitHookGithub": "GitHub: Settings → Webhooks → Add webhook. Content type application/json. Events: Just the push event. GitHub.com requires HTTPS.",
9814
+ "gitHookGitea": "Gitea: Settings → Webhooks → Add Webhook → Gitea. HTTP Method POST. Push events.",
9815
+ "gitHookGitlab": "GitLab: Settings → Webhooks. Trigger: Push events. Secret token = the hook secret (sent as X-Gitlab-Token).",
9816
+ "gitHookHonesty": "The host unit must have YSK_EXECUTE=1. Without it the hook answers but does not clone or deploy.",
9817
+ "gitHookSkipOther": "Pushes to other branches are ignored. Only the project ref syncs.",
9818
+ "gitAuthHttps": "Jeton HTTPS",
9819
+ "gitAuthSsh": "Clé de déploiement SSH",
9820
+ "gitLoadRefs": "Charger les branches",
9821
+ "gitRefDefault": "Valeur par défaut à distance",
9822
+ "gitRefBranches": "Succursales",
9823
+ "gitRefTags": "Balises",
9824
+ "gitRefOther": "Autre réf…",
9825
+ "gitRefCustom": "Commit ou ref",
9826
+ "gitRefsNeedUrl": "Entrez d'abord une URL.",
9827
+ "gitRefsNeedAuth": "Enregistrez un jeton ou déployez une clé, puis chargez des branches.",
9828
+ "gitRefsHint": "Chargé depuis la télécommande. Choisissez-en un – ne tapez pas.",
9829
+ "gitHookSetupToggle": "Comment coller ça",
9830
+ "gitHookOneLiner": "HMAC ou X-YSK-Git-Hook. Seule la réf. de ce projet.",
9831
+ "gitHookExecuteHint": "Nécessite YSK_EXECUTE=1 pour cloner ou déployer.",
9832
+ "gitShowKey": "Afficher la clé",
9833
+ "gitHideKey": "Cacher",
9834
+ "gitBehindShort": "↓{{count}}",
9835
+ "gitAheadShort": "↑{{count}}",
9836
+ "gitDirtyShort": "Sale · {{count}}",
9837
+ "gitFilesLink": "Fichiers",
9838
+ "gitTokenLaterHint": "Le jeton HTTPS et la profondeur de clonage sont définis dans l'onglet Déploiement du projet après la création.",
9839
+ "netForceHttpsOn": "HTTP sera redirigé vers HTTPS après la publication du Edge.",
9840
+ "netForceHttpsOff": "Aucune redirection forcée n'est stockée.",
9841
+ "netHttpsLiveNotForced": "Un fichier Edge existe ; HTTPS peut déjà fonctionner. Cette case force uniquement HTTP → HTTPS.",
9842
+ "gitSyncBlockedDirty": "La synchronisation est désactivée jusqu'à ce que les modifications locales soient ignorées (réinitialisation) ou que les fichiers correspondent à Git.",
9843
+ "gitViewDiff": "Voir la différence",
9844
+ "gitBranchAfterUrl": "Saisissez d’abord l’URL Git. Vide = branche par défaut du distant.",
9845
+ "gitResetNeedConfirm": "Confirmation requise — abandonne les commits locaux",
9846
+ "openUrlNeedDomain": "Définissez d’abord un domaine – n’ouvrez pas 127.0.0.1 dans votre navigateur",
9847
+ "needOsUser": "Créez d'abord l'utilisateur système dans l'onglet Isolation.",
9848
+ "stopTitle": "Arrêter ce projet (unité systemd et site public)",
9849
+ "deployTitle": "Déployer ce projet",
9850
+ "httpStatsHint": "À partir du journal d'accès de ce projet (dernier échantillon)",
9851
+ "httpStatsNone": "Aucun journal d'accès au projet pour l'instant",
9852
+ "statStoppedOnly": "Arrêté",
9853
+ "statReadyOnly": "Prêt",
9854
+ "netBoundCert": "Certificat lié",
9855
+ "netBoundCertExpiry": "expire {{at}}",
9856
+ "netNoBoundCert": "Aucun certificat sur disque pour ce nom d’hôte",
9857
+ "netForceHttpsNeedCert": "Émettez un certificat sur /ssl pour ce domaine avant de forcer HTTPS.",
9858
+ "goIsolation": "Open Isolation tab",
9859
+ "netHstsNeedHttps": "Turn on force HTTPS first",
9860
+ "homeMissing": "Home directory does not exist",
9861
+ "homeMissingHint": "Same live probe as migrate inventory — create the system user on Isolation"
8611
9862
  },
8612
9863
  "protection": {
8613
9864
  "levels": {
@@ -8641,7 +9892,9 @@
8641
9892
  "note": {
8642
9893
  "notApplied": "Non appliqué sur l'hôte (nécessite root + YSK_EXECUTE=1) — enregistré dans les paramètres du panneau",
8643
9894
  "nginxWritten": "Fichier panneau de limitation de débit Nginx écrit",
8644
- "f2bWritten": "Paramètres panneau fail2ban écrits"
9895
+ "f2bWritten": "Paramètres panneau fail2ban écrits",
9896
+ "hintDropped": "Internal protection hint omitted",
9897
+ "nginxLimits": "Will write Nginx rate-limit snippet"
8645
9898
  },
8646
9899
  "rel": {
8647
9900
  "justNow": "À l'instant",
@@ -8955,7 +10208,69 @@
8955
10208
  "plusRegion": "+ région {{v}}",
8956
10209
  "plusCity": "+ ville {{v}}",
8957
10210
  "lastTickPrefix": "· dernier {{t}}",
8958
- "nextTickPrefix": "· prochain {{t}}"
10211
+ "nextTickPrefix": "· prochain {{t}}",
10212
+ "stackApply": "Appliquer la pile de protection (UFW, fail2ban, preset)",
10213
+ "stackApplyDone": "Application de la pile de protection demandée",
10214
+ "stackApplyHint": "Cela active UFW et applique fail2ban ainsi que le préréglage suggéré. Confirmez que vous ne vous bloquerez pas hors d'un panneau distant.",
10215
+ "cannotBanSelf": "Impossible d’interdire {{ip}} — c’est l’hôte, votre IP de connexion ou ignoreip",
10216
+ "selfIp": "Cet hôte",
10217
+ "selfHostIp": "IP de l'hôte",
10218
+ "selfLoginIp": "Votre IP de connexion",
10219
+ "showZeroScore": "Afficher le score 0",
10220
+ "hideZeroScore": "Masquer le score 0",
10221
+ "freshnessNa": "n / A",
10222
+ "geoDraftOnly": "Politique désactivée — Enregistrer n’écrit qu’un brouillon. Nginx n’applique rien tant qu’elle n’est pas activée.",
10223
+ "selectAllCountriesWarn": "Tout sélectionner en liste de blocage ? Cela peut bloquer cet hôte et votre pays de connexion.",
10224
+ "badgeRecommendPreset": "Un préréglage plus fort est recommandé pour la menace actuelle",
10225
+ "badgeAutomationOn": "L’automatisation est activée",
10226
+ "badgeBanCount": "Interdictions actives",
10227
+ "badgeGeoOn": "La politique d’accès Geo est activée",
10228
+ "badgeGeoNotReady": "La base GeoIP n’est pas prête",
10229
+ "badgeIntelSignals": "Signaux qui ajoutent au score actuellement",
10230
+ "signalActive": "Actif",
10231
+ "signalInactive": "Inactif",
10232
+ "signalJails": "{{n}} prison(s)",
10233
+ "dbReadyHint": "Fichiers MMDB présents",
10234
+ "dbNotReadyHint": "Téléchargez d’abord une base GeoIP",
10235
+ "staleHint": "Si la dernière mise à jour réussie a plus de 7 jours",
10236
+ "statSuspects": "IP suspectes",
10237
+ "scoreBasisHint": "Le score de menace utilise le pare-feu, le volume d'interdiction fail2ban et les signaux de taux de requêtes – ce qui n'est pas le même nombre que la liste des suspects Intel.",
10238
+ "geoNeedDb": "Les bases de données GeoIP sont manquantes : mettez d'abord à jour les fichiers MMDB",
10239
+ "colHits": "Requêtes",
10240
+ "col429": "429",
10241
+ "topIpsTitle": "IP en tête",
10242
+ "hitsCount": "{{n}} requêtes",
10243
+ "sampleWindowHint": "Les comptes viennent de la fenêtre d’échantillons access + auth actuelle, pas du fichier journal complet.",
10244
+ "statSuspectsSplit": "{{actionable}} actionable / {{total}} listed",
10245
+ "suspectActionableCount": "Actionable IPs {{count}}",
10246
+ "uaNeedZones": "Set a Cloudflare zone first",
10247
+ "banConfirmTitle": "Ban {{ip}}?",
10248
+ "banConfirmDesc": "This IP will be blocked on the host. Confirm it is not a current panel or session address.",
10249
+ "ufwOff": "UFW (off)",
10250
+ "ufwOffHint": "UFW is not active — fail2ban is the usable target.",
10251
+ "whitelistSyncHint": "{{n}} panel entries · fail2ban ignoreip sync: {{sync}}",
10252
+ "whitelistSyncOn": "on",
10253
+ "whitelistSyncOff": "off (lists may differ)",
10254
+ "draftBadge": "Draft",
10255
+ "banIsSelf": "This IP matches the current panel source or this host.",
10256
+ "banNotSelf": "This IP is not the current panel source.",
10257
+ "geoSourceLocal": "Local GeoIP library (sapics + DB-IP)",
10258
+ "nginxPreviewHint": "Nginx snippet this preset would write (preview only):",
10259
+ "modeValue": {
10260
+ "normal": "Normal",
10261
+ "degraded": "Degraded",
10262
+ "ddos-protection": "DDoS protection",
10263
+ "offline": "Offline"
10264
+ },
10265
+ "wlRemovedUndo": "Removed {{ip}} from the allow list. Undo within 5 seconds.",
10266
+ "undo": "Undo",
10267
+ "banSelectedConfirmTitle": "Ban {{count}} selected IPs?",
10268
+ "banSelectedConfirmDesc": "These addresses will be blocked on the host: {{ips}}",
10269
+ "freshnessMissing": "No database",
10270
+ "freshnessStale": "Stale",
10271
+ "freshnessFresh": "Current",
10272
+ "banConfirmMethod": "Method: {{method}}",
10273
+ "banConfirmUntilUnban": "Stays banned until you unban it (or fail2ban expiry)."
8959
10274
  },
8960
10275
  "publicFiles": {
8961
10276
  "notSet": "Non défini",
@@ -8987,7 +10302,24 @@
8987
10302
  "diskRoot": "Racine disque",
8988
10303
  "filesInRoot": "Entrées",
8989
10304
  "managedConf": "Conf gérée",
8990
- "systemConf": "conf.d système"
10305
+ "systemConf": "conf.d système",
10306
+ "notes": {
10307
+ "noManagedConf": "Aucune configuration Nginx gérée pour l'instant : cliquez sur Appliquer",
10308
+ "notSynced": "La configuration gérée existe mais ne se trouve pas sous /etc/nginx/conf.d — appliquez-la à nouveau en tant que root avec YSK_EXECUTE"
10309
+ },
10310
+ "autoindex": "Liste des répertoires (indexation automatique)",
10311
+ "liveSystemConf": "Conf système active : {{path}}",
10312
+ "publicRootNote": "Racine publique : {{path}}",
10313
+ "applyConfirmTitle": "Appliquer le site des fichiers publics ?",
10314
+ "applyConfirmDesc": "Écrire Nginx server_name {{name}} et recharger Nginx.",
10315
+ "serverNameMismatch": "La conf active est {{live}} ; le formulaire a {{draft}}. Appliquez pour remplacer.",
10316
+ "executeFlag": "Execute",
10317
+ "asRoot": "Root",
10318
+ "statusDraft": "Draft / not applied",
10319
+ "liveName": "Live name",
10320
+ "draftName": "Draft name",
10321
+ "draftUnapplied": "This draft is not applied. Nginx still serves the live name.",
10322
+ "discardDraft": "Discard draft"
8991
10323
  },
8992
10324
  "rbac": {
8993
10325
  "permissions": "Autorisations",
@@ -9071,7 +10403,13 @@
9071
10403
  "auditExport": "Export d'audit",
9072
10404
  "securityApiKeysAdmin": "Administration des clés API",
9073
10405
  "networkBrowse": "Navigation Web via l'hôte",
9074
- "networkVnc": "Bureau à distance VNC"
10406
+ "networkVnc": "Bureau à distance VNC",
10407
+ "validatorsRead": "Validateurs (lecture)",
10408
+ "validatorsManage": "Validateurs gérer",
10409
+ "validatorsWipe": "Validateurs effacer les données",
10410
+ "dockerRead": "Docker (lecture)",
10411
+ "dockerManage": "Docker gérer",
10412
+ "dockerWipe": "Docker supprimer / nettoyer"
9075
10413
  },
9076
10414
  "aboutRoles": "Rôles (valeurs d'usine)",
9077
10415
  "aboutRolesBody": "Les rôles définissent les capacités par défaut ; les utilisateurs peuvent en remplacer certaines individuellement.",
@@ -9087,7 +10425,14 @@
9087
10425
  "capabilitiesHint": "Activer/désactiver ce que ce rôle peut faire",
9088
10426
  "enabledCount": "{{enabled}} sur {{total}} activées",
9089
10427
  "bandAboveMax": "Au-dessus du niveau max",
9090
- "dirtyHint": "Personnalisé (diffère de l'usine)"
10428
+ "dirtyHint": "Personnalisé (diffère de l'usine)",
10429
+ "unsaved": "Non enregistré",
10430
+ "unsavedHint": "Modifications non enregistrées sur ce rôle",
10431
+ "nothingToSave": "Rien à sauver",
10432
+ "saveRole": "Enregistrer la politique {{role}}",
10433
+ "discardTitle": "Supprimer la stratégie non enregistrée ?",
10434
+ "discardDesc": "Le changement de rôle supprime les modifications de fonctionnalités non enregistrées.",
10435
+ "roleUnavailable": "Not available for this role"
9091
10436
  },
9092
10437
  "readiness": {
9093
10438
  "cat": {
@@ -9198,13 +10543,44 @@
9198
10543
  "fixNow": "Corriger maintenant",
9199
10544
  "fixFailed": "Échec de la correction",
9200
10545
  "fixDone": "Permissions dataDir renforcées (chmod 750)",
9201
- "fixDoneWebUi": "Interface Web compilée / installée"
10546
+ "fixDoneWebUi": "Interface Web compilée / installée",
10547
+ "rootLabel": "Superutilisateur",
10548
+ "exportStarted": "Téléchargement {{name}}",
10549
+ "blockersHint": "Les bloqueurs sont le sous-ensemble critique de Manquants — pas des contrôles en plus.",
10550
+ "techDetails": "Détails techniques",
10551
+ "missingOwner": "Aucun propriétaire de panel attribué (attribution de quota de package)",
10552
+ "notOsProvisioned": "Utilisateur/domicile du système d'exploitation non encore provisionné",
10553
+ "ondrejNone": "Aucune source PHP ondrej Launchpad détectée",
10554
+ "ondrejFound": "Sources ondrej/php héritées trouvées en conflit avec packages.sury.org : {{paths}}",
10555
+ "ondrejTitle": "PHP apt source (ondrej résiduel)",
10556
+ "systemctlActive": "Le service est en cours d'exécution",
10557
+ "systemctlStatus": "Statut du service : {{status}}",
10558
+ "binInPath": "{{bin}} dans CHEMIN",
10559
+ "leftoverApache": "Site par défaut restant d'Apache",
10560
+ "leftoverVsftpd": "L'unité vsftpd a échoué",
10561
+ "leftoverCli": "CLI restante périmée",
10562
+ "leftoverNginx": "Nginx fourre-tout manquant",
10563
+ "leftoverDovecot": "Dovecot TLS indique un certificat manquant",
10564
+ "leftoverOther": "Restes d’hôte",
10565
+ "leftoverApply": "Les restes s'appliquent",
10566
+ "isolationOwnerDegrades": "L'absence de Owner_user_id affecte l'attribution du quota de package : le statut est dégradé, pas prêt.",
10567
+ "totalChecks": "All checks",
10568
+ "totalChecksHint": "Ready + degraded + missing = this total. Blockers are the critical missing subset.",
10569
+ "requireAdminTotp": "require admin 2FA policy",
10570
+ "listenBind": "listen address",
10571
+ "item": {
10572
+ "admin2fa": "Admin two-factor"
10573
+ },
10574
+ "dataDirPerms": "panel data-directory permissions",
10575
+ "mode750": "mode 750",
10576
+ "gateBlocked": "Not passed · {{n}} missing",
10577
+ "isolationPendingOs": "Same as project status: OS user pending. Open Isolation to provision the system user and home."
9202
10578
  },
9203
10579
  "redis": {
9204
10580
  "neverExpire": "N'expire jamais",
9205
10581
  "ttlSeconds": "{{ttl}}s",
9206
10582
  "ttlMinutes": "{{n}} minutes",
9207
- "ttlHours": "{{n}} h",
10583
+ "ttlHours": "{{n}} heures",
9208
10584
  "ttlDays": "{{n}} j",
9209
10585
  "typeString": "Chaîne",
9210
10586
  "typeHash": "Hacher",
@@ -9266,7 +10642,30 @@
9266
10642
  "pickKey": "Sélectionnez une clé à gauche pour afficher le contenu.",
9267
10643
  "ttlPrefix": "TTL : {{ttl}}",
9268
10644
  "writeLiveHint": "Écrit dans Redis en direct ; impossible d'annuler en un clic depuis le panneau.",
9269
- "refPath": "Réf. : {{path}}"
10645
+ "refPath": "Réf. : {{path}}",
10646
+ "dbEmptyMark": " · vide",
10647
+ "noRequirepass": "Le mode protégé est actif, mais requirepass est vide ou non lu — pas de mot de passe.",
10648
+ "setRequirepass": "Définir le mot de passe",
10649
+ "rdbOnlyLossHint": "AOF désactivé et RDB activé. Un redémarrage ou un plantage peut perdre des écritures récentes.",
10650
+ "dirDataContainer": "/données (conteneur)",
10651
+ "dirHostDefault": "/var/lib/redis",
10652
+ "dirDefaultInstance": "/var/lib/redis/default",
10653
+ "dirDataWarn": "/data est généralement un chemin de conteneur ; ce panneau ne peut pas confirmer son existence.",
10654
+ "saveOff": "Désactiver les instantanés (non recommandé)",
10655
+ "saveOffWarn": "Une chaîne de sauvegarde vide désactive les instantanés RDB. Un crash peut perdre toutes les données si AOF est également désactivé.",
10656
+ "dirMoveWarn": "Changer de répertoire ne déplace pas dump.rdb / AOF. Le prochain démarrage utilise le nouveau chemin tel quel.",
10657
+ "passwordUnset": "Non défini sur le service",
10658
+ "passwordSetHidden": "Ensemble (non illustré)",
10659
+ "scanHint": "Uses SCAN, not KEYS. Returns at most {{n}} keys — avoid * on huge databases.",
10660
+ "scanCapped": "Showing the first {{n}} matches.",
10661
+ "dbOptionKeys": "DB {{i}} · {{n}} keys",
10662
+ "dbOptionEmpty": "DB {{i}} · empty",
10663
+ "insecureShort": "No password",
10664
+ "generateRequirepass": "Generate and apply password",
10665
+ "generateRequirepassTitle": "Generate a Redis password?",
10666
+ "generateRequirepassDesc": "Writes requirepass and restarts Redis. The password is shown once. Host change needs EXECUTE.",
10667
+ "generateRequirepassDone": "Redis password applied",
10668
+ "generatedOnce": "Generated password (shown once): {{password}}"
9270
10669
  },
9271
10670
  "resources": {
9272
10671
  "created": "Créé",
@@ -9734,7 +11133,29 @@
9734
11133
  "projectsCount": "Projets YSK",
9735
11134
  "noProjects": "Aucun projet",
9736
11135
  "noProjectsDesc": "Aucun projet node/bun dans le panneau, ou utilisateur OS non provisionné.",
9737
- "pm2OnlyDesc": "Uniquement les applications démarrées avec PM2 sous l’utilisateur du panneau. Les déploiements systemd apparaissent ci-dessus."
11136
+ "pm2OnlyDesc": "Uniquement les applications démarrées avec PM2 sous l’utilisateur du panneau. Les déploiements systemd apparaissent ci-dessus.",
11137
+ "startupTitle": "Démarrer au démarrage",
11138
+ "startupDesc": "Enregistrez PM2 pour que les processus reviennent après le redémarrage.",
11139
+ "systemdActionsHint": "Les actions systemd nécessitent root et YSK_EXECUTE.",
11140
+ "startupOk": "Startup registered. {{notes}}",
11141
+ "startupFail": "Could not register startup. {{notes}}",
11142
+ "actionOk": "{{action}} {{name}} — {{notes}}",
11143
+ "actionFail": "Could not {{action}} {{name}}. {{notes}}",
11144
+ "startupReady": "Ready",
11145
+ "startupReadyYes": "Yes",
11146
+ "startupReadyNo": "No",
11147
+ "startupUnit": "Unit",
11148
+ "startupDump": "Dump",
11149
+ "startupInstall": "Install startup",
11150
+ "startupSave": "Save process list",
11151
+ "actRestart": "Restart",
11152
+ "actStop": "Stop",
11153
+ "actReload": "Reload",
11154
+ "pm2ActionsHint": "PM2 actions apply to the panel user’s process list only.",
11155
+ "noteUnparsed": "PM2 list could not be parsed (empty or unexpected output).",
11156
+ "notePanelUserOnly": "PM2 list is for the panel process user only.",
11157
+ "noteProjectUnits": "{{n}} YSK project unit(s) listed",
11158
+ "glossary": "PM2 = process manager; SSE = live stream."
9738
11159
  },
9739
11160
  "recordedInstalled": "Enregistré {{v}}",
9740
11161
  "remoteSourceSuffix": "({{source}})",
@@ -9788,7 +11209,32 @@
9788
11209
  "path": "Chemin",
9789
11210
  "fullVersion": "Version complète",
9790
11211
  "useListForDefaults": "Pour modifier la valeur par défaut de l'hôte ou du panneau, ou supprimer cette version, utilisez la liste ci-dessus.",
9791
- "alreadyHostDefaultShort": "Défaut de l'hôte"
11212
+ "alreadyHostDefaultShort": "Défaut de l'hôte",
11213
+ "managedPathMissingTitle": "Le chemin géré {{name}} n'est pas prêt",
11214
+ "managedPathMissing": "{{name}} géré par YSK pour la version {{version}} n'est pas prêt. Re-sondez ou réinstallez.",
11215
+ "installRecordedCta": "Installation enregistrée {{v}}",
11216
+ "targetMissing": "Version cible non installée",
11217
+ "targetMissingHint": "La cible {{version}} n’est pas sur cet hôte. Liez une version installée ou installez cette version.",
11218
+ "needsInstall": "à installer",
11219
+ "needsInstallHint": "Pas sur cet hôte. Installez-le ou choisissez une version déjà présente.",
11220
+ "unitBytes": "octets",
11221
+ "headerSizeKb": "{{n}} Ko",
11222
+ "phpIniChipEmpty": "Non chargé — ouvrez l’onglet php.ini",
11223
+ "phpFpmService": "PHP-FPM",
11224
+ "phpFpmServiceDesc": "Démarrer, arrêter, recharger ou redémarrer l’unité PHP-FPM",
11225
+ "rustupDefaultMissingTitle": "Pas de chaîne d’outils rustup par défaut",
11226
+ "rustupDefaultMissing": "rustup n’a pas de défaut. Définissez stable dans l’onglet Logiciel.",
11227
+ "rustupDefaultMissingShort": "Aucune chaîne d'outils par défaut",
11228
+ "rustupSetDefaultHint": "Définir la chaîne d'outils par défaut",
11229
+ "uninstalledCountHint": "{{n}} version(s) absente(s) de cet hôte",
11230
+ "applyPhpVhostTitle": "Besoin de confirmation – écrit les fichiers pool/vhost",
11231
+ "applyPhpVhostDesc": "Écrira le pool {{pool}} et le vhost {{domain}}. Services de rechargement : {{reload}}.",
11232
+ "binaryPath": "Chemin du binaire",
11233
+ "installedLabel": "Installed",
11234
+ "installedHint": "Host probe result — not the control-plane record",
11235
+ "targetHint": "Version this page will install or pin",
11236
+ "rebuildFromHost": "Rebuild record from host",
11237
+ "rebuiltFromHost": "Record refreshed from host probe"
9792
11238
  },
9793
11239
  "search": {
9794
11240
  "placeholder": "Rechercher des pages et des ressources…",
@@ -9798,20 +11244,24 @@
9798
11244
  "noResults": "Aucune correspondance",
9799
11245
  "kinds": {
9800
11246
  "page": "Pages",
9801
- "project": "Projects",
9802
- "email": "Email",
9803
- "mailbox": "Mailboxes",
11247
+ "project": "Projets",
11248
+ "email": "E-mail",
11249
+ "mailbox": "Boîtes aux lettres",
9804
11250
  "ssl": "SSL",
9805
11251
  "dns": "DNS",
9806
11252
  "nginx": "Nginx",
9807
- "share": "Shares",
11253
+ "share": "Actions",
9808
11254
  "ftp": "FTP",
9809
11255
  "mysql": "MySQL",
9810
11256
  "postgres": "PostgreSQL",
9811
- "redis": "Redis",
11257
+ "redis": "Rédis",
9812
11258
  "cron": "Cron",
9813
- "user": "Users",
9814
- "other": "Other"
11259
+ "user": "Utilisateurs",
11260
+ "other": "Autre"
11261
+ },
11262
+ "alias": {
11263
+ "ssl": "certificat certificat certificats",
11264
+ "projects": "chantiers"
9815
11265
  }
9816
11266
  },
9817
11267
  "security": {
@@ -9835,7 +11285,7 @@
9835
11285
  "tabApiKeys": "Clés API",
9836
11286
  "tabSsh": "SSH",
9837
11287
  "tabApprovals": "Approbations",
9838
- "tabAllowlist": "Liste d'autorisation",
11288
+ "tabAllowlist": "Outils agent",
9839
11289
  "apiTokenOnce": "Jeton API (affiché une seule fois) :",
9840
11290
  "copiedToken": "Jeton copié",
9841
11291
  "totpTitle": "Double authentification (TOTP)",
@@ -9919,8 +11369,8 @@
9919
11369
  "revokeAllDevices": "Révoquer tous les appareils",
9920
11370
  "revokedAllDevices": "Tous les appareils de confiance ont été révoqués",
9921
11371
  "export2faBackup": "Exporter la sauvegarde 2FA chiffrée",
9922
- "fail2banSnippetMsg": "Extraits Fail2ban : {{written}} — {{notes}}",
9923
- "generateFail2ban": "Générer les extraits Fail2ban",
11372
+ "fail2banSnippetMsg": "Extraits fail2ban : {{written}} — {{notes}}",
11373
+ "generatefail2ban": "Générer les extraits fail2ban",
9924
11374
  "adminPolicyTitle": "Politique 2FA admin",
9925
11375
  "adminPolicyDesc": "",
9926
11376
  "requireAdmin2fa": "Exiger la 2FA admin",
@@ -9940,8 +11390,8 @@
9940
11390
  "apiKeysEmpty": "Aucune clé API pour l'instant",
9941
11391
  "apiKeysEmptyHint": "Créez depuis la barre d'outils ; puis appelez l'API avec un jeton Bearer",
9942
11392
  "approve": "Approuver",
9943
- "allowlistTitle": "Liste d'autorisation ({{count}})",
9944
- "allowlistEmpty": "Aucun outil en liste d'autorisation",
11393
+ "allowlistTitle": "Outils agent ({{count}})",
11394
+ "allowlistEmpty": "Aucun outil dans le catalogue",
9945
11395
  "createApiKeyTitle": "Créer une clé API",
9946
11396
  "createApiKeyDesc": "Le jeton complet n'est affiché qu'une seule fois après la création",
9947
11397
  "createKeyBtn": "Créer la clé",
@@ -10183,7 +11633,23 @@
10183
11633
  "sharePanelTitle": "Partager le secret TOTP du panneau ?",
10184
11634
  "sharePanelDesc": "Risque élevé. Tapez SHARED pour confirmer.",
10185
11635
  "confirmString": "Chaîne de confirmation",
10186
- "enableShare": "Activer le partage"
11636
+ "enableShare": "Activer le partage",
11637
+ "invalidPub": "Collez une ligne complète de clé publique OpenSSH (ssh-ed25519 / ssh-rsa / ecdsa…).",
11638
+ "dryRunOk": "Aperçu terminé. Vérifiez le contenu ci-dessous.",
11639
+ "strictBlocked": "Le paquet ou PAM n’est pas prêt ; l’application Strict est désactivée.",
11640
+ "strictDryRun": "Aperçu du mode strict",
11641
+ "errorNoDetail": "Échec du test (aucun détail)",
11642
+ "privCloseWithoutAck": "Fermé. La clé privée ne sera plus affichée ; générez-en un nouveau si vous ne l’avez pas enregistré.",
11643
+ "loginNoProjects": "Aucun projet. Autorisez un utilisateur Linux existant (root / testeur) ci-dessous. L'écriture de /root/.ssh nécessite YSK_EXECUTE=1.",
11644
+ "loginLinuxHint": "Utilisé lorsqu'il n'y a pas de projet. Exemple : root ou testeur.",
11645
+ "pkgStatus": "Package {{status}}",
11646
+ "pamStatus": "PAM {{status}}",
11647
+ "kbdStatus": "sshd keyboard-interactive {{status}}",
11648
+ "light": {
11649
+ "green": "ok",
11650
+ "yellow": "check",
11651
+ "red": "missing"
11652
+ }
10187
11653
  },
10188
11654
  "sessionsActive": "Sessions actives",
10189
11655
  "sessionsOther": "Autres appareils",
@@ -10206,7 +11672,52 @@
10206
11672
  "revokeOthersDesc": "Cela mettra fin à {{count}} autre(s) session(s). Votre navigateur actuel reste connecté.",
10207
11673
  "sessionRevoked": "Session déconnectée",
10208
11674
  "mySecurityHint": "",
10209
- "policyTotpHint": "Politique du site : chaque administrateur doit activer sa propre 2FA (QR individuel)"
11675
+ "policyTotpHint": "Politique du site : chaque administrateur doit activer sa propre 2FA (QR individuel)",
11676
+ "requireUser2fa": "Exiger la 2FA pour tous les utilisateurs du panneau",
11677
+ "generateFail2ban": "Générer les extraits fail2ban",
11678
+ "changePasswordTitle": "Changer le mot de passe de connexion",
11679
+ "currentPassword": "Mot de passe actuel",
11680
+ "newPassword": "Nouveau mot de passe",
11681
+ "confirmNewPassword": "Confirmer le nouveau mot de passe",
11682
+ "passwordMismatch": "Les nouveaux mots de passe ne correspondent pas.",
11683
+ "changePassword": "Changer le mot de passe",
11684
+ "passwordChanged": "Mot de passe mis à jour.",
11685
+ "strictNeedsEnrolled": "Au moins un administrateur doit avoir la 2FA avant d’activer Strict.",
11686
+ "policyTotpNeedSelf": "Activez d’abord la 2FA sur ce compte ; sinon le code de confirmation ne peut pas être saisi.",
11687
+ "fail2banSnippetTitle": "Extrait fail2ban",
11688
+ "fail2banSnippetEmpty": "Aucun extrait n’a été écrit.",
11689
+ "trustedDevicesTitle": "Appareils de confiance",
11690
+ "noTrustedDevices": "Aucun appareil de confiance.",
11691
+ "strictConfirmTitle": "Activer la 2FA Strict ?",
11692
+ "strictConfirmDesc": "Les utilisateurs sans 2FA seront refusés. Confirmez que vous avez un TOTP ou une Passkey qui fonctionne.",
11693
+ "revokeDevicesTitle": "Révoquer les appareils de confiance ?",
11694
+ "revokeDevicesDesc": "Les navigateurs mémorisés devront refaire la 2FA.",
11695
+ "approvalsHint": "Les approbations apparaissent lorsqu’un outil à haut risque nécessite un second opérateur. Configurez les droits dans Utilisateurs → Autorisations.",
11696
+ "allowlistReadonly": "Catalogue d’outils agent (lecture seule). Les capacités se règlent dans Utilisateurs → Autorisations.",
11697
+ "colTool": "Outil",
11698
+ "colAllowed": "Autorisé",
11699
+ "colRisk": "Risque",
11700
+ "colApproval": "Approbation",
11701
+ "risk": {
11702
+ "low": "Faible",
11703
+ "medium": "Moyen",
11704
+ "high": "Élevé",
11705
+ "critical": "Critique"
11706
+ },
11707
+ "totpStatusLoadFailed": "Impossible de charger l’état 2FA",
11708
+ "confirmDeleteApiKey": "Supprimer cette clé API ?",
11709
+ "confirmDeleteApiKeyDesc": "«{{name}}» arrêtera l'authentification. Cela ne peut pas être annulé.",
11710
+ "policyNoTotpHint": "This account has no 2FA yet — saving policy does not need a TOTP. Set up 2FA above if you want to require it for others.",
11711
+ "sessionCli": "CLI",
11712
+ "sessionApi": "API",
11713
+ "statApiSessions": "Sessions API",
11714
+ "revokeOtherTitle": "Déconnexion {{n}} autre(s) session(s)",
11715
+ "policyNeedSelf2fa": "Activez d'abord 2FA sur ce compte, puis confirmez avec un code TOTP",
11716
+ "revokeAllDevicesTitle": "Révoquer tous les appareils mémorisés : vous et les autres administrateurs devez à nouveau vérifier 2FA",
11717
+ "statSshValue": "{{keys}} keys · {{auth}} authorized",
11718
+ "statSshHint": "Outbound identities / authorized login keys",
11719
+ "needCurrentPassword": "Enter the current password first",
11720
+ "passwordMin8": "New password must be at least 8 characters"
10210
11721
  },
10211
11722
  "serviceExposure": {
10212
11723
  "title": "Accès au réseau",
@@ -10215,8 +11726,8 @@
10215
11726
  "manageDesc": "Contrôlez comment {{service}} est accessible sur le pare-feu hôte.",
10216
11727
  "mode": "Mode d'accès",
10217
11728
  "modePrivate": "Local uniquement",
10218
- "modePublic": "Public",
10219
- "modeRestricted": "Restricted",
11729
+ "modePublic": "Publique",
11730
+ "modeRestricted": "Limité",
10220
11731
  "summaryPrivate": "Non ouvert sur le pare-feu public.",
10221
11732
  "summaryPublic": "Ouvert · {{ports}}",
10222
11733
  "summaryRestricted": "Restreint · {{count}} source(s)",
@@ -10224,8 +11735,8 @@
10224
11735
  "outOfSync": "Désynchronisé",
10225
11736
  "firewallOff": "Pare-feu désactivé",
10226
11737
  "ufwMissing": "UFW non installé",
10227
- "ufwInactive": "inactive",
10228
- "firewallLink": "Firewall",
11738
+ "ufwInactive": "inactif",
11739
+ "firewallLink": "Pare-feu",
10229
11740
  "portsLabel": "Ports",
10230
11741
  "allowFrom": "Sources autorisées (IP / CIDR)",
10231
11742
  "allowCountries": "Pays autorisés (ISO)",
@@ -10237,7 +11748,19 @@
10237
11748
  "restrictedNeedSource": "Ajoutez au moins un code IP/CIDR ou pays pour le mode restreint.",
10238
11749
  "privateStartTitle": "Exposer {{service}} sur le réseau ?",
10239
11750
  "confirmAndStart": "Confirmez et démarrez",
10240
- "cloudSgNote": "Pare-feu hôte uniquement : les groupes de sécurité cloud (AWS/GCP/Azure) ne sont pas modifiés."
11751
+ "cloudSgNote": "Pare-feu hôte uniquement : les groupes de sécurité cloud (AWS/GCP/Azure) ne sont pas modifiés.",
11752
+ "modeUndecided": "Non défini",
11753
+ "modeLoading": "Chargement",
11754
+ "summaryUndecided": "Mode d'accès non confirmé (par défaut du catalogue : {{suggested}}).",
11755
+ "summaryNotEnforced": "Le pare-feu est désactivé : le panneau n'ouvre ni ne bloque ces ports.",
11756
+ "roleSmtp": "Soumission SMTP",
11757
+ "roleImap": "Boîte aux lettres IMAP/POP3",
11758
+ "serviceNotInstalled": "Ce service n'est pas installé, les règles de pare-feu ne s'appliquent donc pas.",
11759
+ "openButStopped": "Ports ouverts – le service ne fonctionne pas",
11760
+ "openNoTenants": "Ports publics sans locataires",
11761
+ "summaryFirewallOffOnly": "Host firewall is not enabled, so port rules are not enforced.",
11762
+ "modePublicLive": "Public (live bind)",
11763
+ "summaryPublicLive": "Listening on {{bind}} — reachable on all interfaces. Confirm access mode; this is not private."
10241
11764
  },
10242
11765
  "services": {
10243
11766
  "enabledBoot": "Au démarrage",
@@ -10245,8 +11768,27 @@
10245
11768
  "start": "Démarrer",
10246
11769
  "stop": "Arrêter",
10247
11770
  "restart": "Redémarrer",
10248
- "reload": "Recharger"
10249
- },
11771
+ "reload": "Recharger",
11772
+ "enable": "Activer au démarrage",
11773
+ "disable": "Désactiver au démarrage"
11774
+ },
11775
+ "lifecycleTitle": "Contrôle du service {{label}}",
11776
+ "startedOk": "{{label}} démarré",
11777
+ "stoppedOk": "{{label}} arrêté",
11778
+ "restartedOk": "{{label}} redémarré",
11779
+ "reloadedOk": "{{label}} rechargé",
11780
+ "stopConfirmTitle": "Arrêter {{label}} ?",
11781
+ "stopConfirmDesc": "{{label}} cessera d’écouter. Relancez-le depuis cette page si besoin.",
11782
+ "stopConfirmEdgeDesc": "Arrêter {{label}} met hors ligne les sites et le reverse proxy jusqu’au redémarrage.",
11783
+ "stopConfirmEdgeConsequence": "Tant que {{label}} est arrêté, cet hôte ne sert pas HTTP/HTTPS.",
11784
+ "stopConfirmSshdTitle": "Arrêter sshd ?",
11785
+ "stopConfirmSshdDesc": "Arrêter sshd coupe le SSH distant. Confirmez un accès console ou une autre voie.",
11786
+ "stopConfirmSshdToken": "arrête sshd",
11787
+ "stopConfirmSshdConsequence": "Les nouvelles sessions SSH échoueront jusqu’au démarrage de sshd depuis la console.",
11788
+ "stopConfirmPanelTitle": "Arrêter YSK Server ?",
11789
+ "stopConfirmPanelDesc": "Le panneau et l’API seront hors ligne jusqu’au démarrage de l’unité sur l’hôte.",
11790
+ "stopConfirmPanelToken": "arrêter le serveur Ysk",
11791
+ "stopConfirmPanelConsequence": "Cette session navigateur sera coupée. Démarrez l’unité via SSH ou la console hôte.",
10250
11792
  "actionDone": "{{action}} terminé",
10251
11793
  "runningOf": "{{running}}/{{total}} en cours",
10252
11794
  "canMutate": "Modifiable",
@@ -10277,7 +11819,54 @@
10277
11819
  "protectionDoneNote": "Sonde de protection terminée",
10278
11820
  "probeDone": "Sonde terminée",
10279
11821
  "runProtection": "Lancer la sonde de protection",
10280
- "notProbedYet": "Pas encore sondé"
11822
+ "notProbedYet": "Pas encore sondé",
11823
+ "stopConfirmFail2banTitle": "Arrêter fail2ban ?",
11824
+ "stopConfirmFail2banDesc": "L'arrêt de fail2ban désactive les interdictions IP automatiques. Les sites Web et SSH continuent de fonctionner.",
11825
+ "stopConfirmFail2banConsequence": "Les nouveaux attaquants ne sont pas bannis tant que fail2ban n’est pas redémarré.",
11826
+ "installOrOpen": "Installer / ouvrir",
11827
+ "statusFilter": {
11828
+ "all": "Tous les états",
11829
+ "running": "En cours d'exécution",
11830
+ "failed": "Échoué",
11831
+ "missing": "Non installé"
11832
+ },
11833
+ "stopNeedConfirm": "Confirmation requise",
11834
+ "stopNeedConfirmPhrase": "Saisie de la phrase de confirmation requise",
11835
+ "enabledOk": "{{label}} activé au démarrage",
11836
+ "bootDisabledWarn": "{{label}} tourne mais ne démarrera pas au boot. Activez-le pour le conserver.",
11837
+ "bootDisabledShort": "Pas au boot",
11838
+ "mariadbNotInstalled": "MariaDB n’est pas installé",
11839
+ "mariadbNotInstalledMysqlOk": "Not installed: MariaDB (MySQL is installed)",
11840
+ "restartConfirmPanelTitle": "Restart YSK Server?",
11841
+ "restartConfirmPanelDesc": "The panel and API will drop briefly while the unit restarts.",
11842
+ "unitNotFound": "Unit not installed",
11843
+ "unitNa": "Not applicable",
11844
+ "unitStatic": "static",
11845
+ "unitIndirect": "indirect",
11846
+ "needRunning": "{{label}} is not running",
11847
+ "bootNa": "Not applicable",
11848
+ "permLabel": "Permission",
11849
+ "permCanChange": "Can change the system (superuser)",
11850
+ "permBlocked": "Cannot change the system",
11851
+ "permHint": "System change {{exec}} · Superuser {{root}}",
11852
+ "clusterLegend": "Planned = saved in the panel, not applied on the host.",
11853
+ "active": {
11854
+ "active": "Running",
11855
+ "inactive": "Stopped",
11856
+ "not-found": "Not installed",
11857
+ "failed": "Failed",
11858
+ "tool": "Tool",
11859
+ "activating": "Starting"
11860
+ },
11861
+ "sshdBootOffWarn": "sshd is not enabled on boot. After reboot this host will have no SSH rescue path.",
11862
+ "restartConfirmTitle": "Restart {{label}}?",
11863
+ "restartConfirmDesc": "Restart {{label}} now. Active connections may drop.",
11864
+ "startVerifyFailed": "{{label}} start did not stay healthy.",
11865
+ "stopNeedConfirmImpact": "Stop {{label}}? Active connections to this service will drop.",
11866
+ "reloadTitle": "Reload {{label}} configuration without a full restart",
11867
+ "stopConfirmPanelSshdOffDesc": "The panel and API will go offline. sshd is not enabled on boot, so SSH may not be a rescue path after reboot.",
11868
+ "stopConfirmPanelSshdOffConsequence": "sshd is not enabled on boot. After reboot you may have no SSH rescue path.",
11869
+ "ufwNoLifecycle": "UFW is not started or stopped from this matrix."
10281
11870
  },
10282
11871
  "software": {
10283
11872
  "title": "Logiciels",
@@ -10368,7 +11957,8 @@
10368
11957
  "pick": "Choisir la version",
10369
11958
  "noTarget": "Aucune cible de mise à jour",
10370
11959
  "needRuntimePage": "Installez cette version sur la page du runtime",
10371
- "noAptCandidate": "Aucune version candidate apt"
11960
+ "noAptCandidate": "Aucune version candidate apt",
11961
+ "sourceLabel": "Source"
10372
11962
  },
10373
11963
  "install": {
10374
11964
  "progress": "Installation : {{list}}…",
@@ -10467,14 +12057,24 @@
10467
12057
  "generic": "Les services associés peuvent s'arrêter",
10468
12058
  "purgeData": "Les chemins de données seront supprimés",
10469
12059
  "protectedSkipped": "Les composants protégés sont ignorés",
10470
- "runtimeStack": "Toutes les versions gérées par panneau de ce runtime seront supprimées"
12060
+ "runtimeStack": "Toutes les versions gérées par panneau de ce runtime seront supprimées",
12061
+ "containers": "Les conteneurs en cours s’arrêteront",
12062
+ "validators": "Les piles validateur qui utilisent Docker Compose s’arrêteront"
10471
12063
  },
10472
12064
  "requestCancel": "Demande d'annulation",
10473
12065
  "cancelling": "Annulation…",
10474
12066
  "dockCancelling": "Annulation · {{title}}",
10475
12067
  "dockCancelled": "Annulé · {{title}}",
10476
12068
  "cancelHint": "Annulation demandée. Le client a arrêté d'écouter ; l'hôte peut terminer l'apt/l'étape en cours. Re-sondez l'état après un moment.",
10477
- "cancelledToast": "Opération annulée (le client a arrêté la diffusion)"
12069
+ "cancelledToast": "Opération annulée (le client a arrêté la diffusion)",
12070
+ "kindApply": "Appliquer",
12071
+ "kindScan": "Balayage",
12072
+ "kindDeploy": "Déployer",
12073
+ "kindRuntime": "Durée d'exécution",
12074
+ "jobDone": "Terminé · {{title}}",
12075
+ "jobFailed": "Échec · {{title}}",
12076
+ "uninstallUfwWarn": "Retirer UFW laisse cet hôte sans le pare-feu de ports géré par le panneau.",
12077
+ "uninstallFail2banWarn": "Retirer fail2ban arrête les jails et lève les interdictions. Si vous le gardez, ajoutez votre IP de connexion à ignoreip."
10478
12078
  },
10479
12079
  "sqlEngineHealth": {
10480
12080
  "finding": {
@@ -10690,7 +12290,18 @@
10690
12290
  "requestDone": "Demande de certificat terminée",
10691
12291
  "requestFailed": "La demande de certificat n’a pas abouti",
10692
12292
  "applyFailed": "Échec de la demande",
10693
- "deletedCert": "{{domain}} supprimé"
12293
+ "deletedCert": "{{domain}} supprimé",
12294
+ "uninstallCertbotWarn": "La suppression de certbot arrête le renouvellement automatique des certificats Let's Encrypt existants.",
12295
+ "renew": "Renouveler",
12296
+ "renewFor": "Renouveler Let's Encrypt pour {{domain}}",
12297
+ "domainRequired": "Saisissez un domaine.",
12298
+ "domainInvalid": "Le format du domaine n’est pas valide.",
12299
+ "domainKnownHint": "Choisissez un domaine projet / DNS / mail connu, ou saisissez-en un.",
12300
+ "deleteNeedDomain": "Supprimez ce certificat — saisissez le nom de domaine pour confirmer",
12301
+ "panelCertHint": "Panel HTTPS uses {{path}} (expires {{exp}}). It is not listed as a site certificate.",
12302
+ "openPanelTls": "Open panel HTTPS",
12303
+ "deleteDomain": "Delete {{domain}}",
12304
+ "uninstallCertbot": "Uninstall certbot (loses auto-renew)"
10694
12305
  },
10695
12306
  "stackWizard": {
10696
12307
  "purgeConfirm": "Confirmer la purge ? Les chemins de données enregistrés (bases de données/courriel) seront supprimés définitivement.",
@@ -10705,39 +12316,62 @@
10705
12316
  "componentsTitle": "Composants à installer",
10706
12317
  "dryRun": "Aperçu dry-run",
10707
12318
  "installNow": "Installer maintenant",
10708
- "uninstallHint": "Sélectionner les lots à supprimer",
12319
+ "uninstallHint": "Cochez les lots à retirer. Sans sélection, le retrait est impossible. Les données sont conservées par défaut.",
10709
12320
  "dataPolicy": "Politique de données",
10710
12321
  "keepData": "Conserver les données",
10711
12322
  "purgeData": "Purger les données",
10712
- "uninstallNow": "Désinstaller maintenant"
12323
+ "uninstallNow": "Désinstaller maintenant",
12324
+ "uninstallNeedSelect": "Sélectionnez au moins un forfait. Une sélection vide ne signifie plus tout supprimer.",
12325
+ "uninstallConfirmTitle": "Supprimer les groupes sélectionnés ?",
12326
+ "uninstallConfirmDesc": "{{count}} le ou les bundles seront supprimés. Tapez SUPPRIMER pour confirmer.",
12327
+ "countHint": "These counts are OS packages in the software plan — not the service-matrix units on the other tab.",
12328
+ "executeRoot": "System changes {{execute}} · administrator {{root}}",
12329
+ "manifestPlan": "Plan {{plan}} ({{bundles}})",
12330
+ "manifestHint": "Last chosen software plan and bundles"
10713
12331
  },
10714
12332
  "support": {
10715
- "title": "Support",
10716
- "sub": "Créateur, don et YSK Limited — produit gratuit, aide réelle",
10717
- "creatorTitle": "Creator",
10718
- "creatorBody": "YSK Server est conçu comme un plan de contrôle à hôte unique gratuit et honnête pour les opérateurs qui souhaitent posséder leur pile. Le projet est maintenu à l'air libre ; les commentaires et les rapports de bogues le maintiennent précis.",
10719
- "donateTitle": "Soutenir / Faire un don",
10720
- "donateBody": "Si YSK Server vous fait gagner du temps, envisagez de sponsoriser le développement. Chaque contribution contribue à maintenir le produit gratuit pour tous.",
12333
+ "title": "Assistance",
12334
+ "sub": "Creator, dons et YSK Limited — produit gratuit, aide réelle",
12335
+ "creatorTitle": "Créateur",
12336
+ "creatorBody": "YSK Server est un plan de contrôle mono-hôte, gratuit et honnête, pour les opérateurs qui veulent posséder leur pile. Le projet est maintenu au grand jour ; retours et rapports de bogues le rendent plus solide.",
12337
+ "donateTitle": "Soutien / Don",
12338
+ "donateBody": "Si YSK Server vous fait gagner du temps, envisagez de parrainer le développement. Chaque contribution aide à garder le produit gratuit pour tous.",
10721
12339
  "donateGithub": "Commanditaires GitHub",
10722
12340
  "donateOther": "Autres façons de donner",
10723
12341
  "yskTitle": "YSK Limited",
10724
- "yskIntro": "Besoin d’une aide pratique au-delà du panneau gratuit ? YSK Limited peut vous aider dans les domaines suivants :",
10725
- "yskSvc1": "Configuration du serveur, renforcement et opérations en cours",
10726
- "yskSvc2": "Conception de stack d'hébergement (web, mail, DNS, bases de données)",
10727
- "yskSvc3": "Migration, automatisation et intégration personnalisée",
10728
- "yskSvc4": "Réponse aux incidents et examens de l’état de préparation de la production",
10729
- "yskNoPrice": "Aucun prix n'est indiqué ici — contactez-nous pour une conversation adaptée à votre environnement.",
12342
+ "yskIntro": "Besoin d’une aide concrète au-delà du panneau gratuit ? YSK Limited peut aider pour :",
12343
+ "yskSvc1": "Installation, durcissement et exploitation continue du serveur",
12344
+ "yskSvc2": "Conception de pile dhébergement (web, mail, DNS, bases de données)",
12345
+ "yskSvc3": "Migration, automatisation et intégration sur mesure",
12346
+ "yskSvc4": "Réponse aux incidents et revues de préparation à la production",
12347
+ "yskNoPrice": "Aucun tarif nest affiché ici — contactez-nous pour une discussion adaptée à votre environnement.",
10730
12348
  "yskWebsite": "ysk.hk",
10731
- "helpTitle": "Vous avez un problème ?",
10732
- "helpBody": "Envoyez-nous un e-mail avec votre système d'exploitation, le chemin du journal d'installation et ce à quoi vous vous attendiez par rapport à ce qui s'est passé. Nous lisons chaque message.",
10733
- "docsHint": "La documentation complète se trouve dans le référentiel sous",
12349
+ "helpTitle": "Un problème ?",
12350
+ "helpBody": "Écrivez-nous avec votre OS, le chemin du journal dinstallation, et ce que vous attendiez vs ce qui sest passé. Nous lisons chaque message.",
12351
+ "docsHint": "La documentation complète se trouve dans le dépôt sous",
10734
12352
  "donateLinktree": "Linktree",
10735
- "cryptoTitle": "Poignées Crypto / Web3",
10736
- "cryptoHint": "Envoyez sur le réseau correspondant uniquement. Vérifiez l’adresse avant lenvoi.",
10737
- "cryptoNetwork": "Network",
10738
- "cryptoAddress": "Address",
10739
- "copy": "Copy",
10740
- "copied": "Copied"
12353
+ "cryptoTitle": "Crypto / identifiants Web3",
12354
+ "cryptoHint": "N’envoyez que sur le réseau correspondant. Vérifiez l’adresse avant denvoyer.",
12355
+ "cryptoNetwork": "Réseau",
12356
+ "cryptoAddress": "Adresse",
12357
+ "copy": "Copier",
12358
+ "copied": "Copié",
12359
+ "docsLink": "Documentation",
12360
+ "diagTitle": "Résumé du diagnostic",
12361
+ "diagBody": "Copiez la version, exécutez et hébergez les faits à coller dans un e-mail. Il ne s'agit pas d'un ensemble de journaux complet.",
12362
+ "diagCopy": "Copier le résumé du diagnostic",
12363
+ "diagCopied": "Résumé du diagnostic copié",
12364
+ "copyTitle": "Copier {{address}}",
12365
+ "diagCopyTitle": "Copier version, EXECUTE et faits hôte",
12366
+ "diagPreview": "Aperçu de ce qui sera copié",
12367
+ "diagLoading": "Chargement du diagnostic…",
12368
+ "diagLoadFailed": "Impossible de charger le diagnostic",
12369
+ "copiedAddr": "Copied {{addr}}",
12370
+ "diagStatus": "Status",
12371
+ "diagMode": "Mode",
12372
+ "diagProtection": "Protection",
12373
+ "diagHostname": "Hostname",
12374
+ "diagOs": "OS"
10741
12375
  },
10742
12376
  "system": {
10743
12377
  "exportLoadFailed": "Échec du chargement des données d'export",
@@ -10818,7 +12452,18 @@
10818
12452
  "leOk": "Certificat Let’s Encrypt obtenu pour {{domain}}",
10819
12453
  "leFailed": "Échec de la demande de certificat : {{detail}}",
10820
12454
  "leHint": "Vérifiez que l’enregistrement DNS A pointe ici et que le port 80 est joignable (ou que nginx sert le domaine)",
10821
- "openFirewall": "Si public : autorisez le port du panneau {{port}}/tcp (Pare-feu → ouvrir le port → 9287 Panel)"
12455
+ "openFirewall": "Si public : autorisez le port du panneau {{port}}/tcp (Pare-feu → ouvrir le port → 9287 Panel)",
12456
+ "disableConfirmTitle": "Désactiver le panneau HTTPS ?",
12457
+ "disableConfirmDesc": "Le panneau servira HTTP. WebAuthn/Passkey cessera de fonctionner jusqu'à ce que HTTPS soit réactivé.",
12458
+ "disablePasskeyWarn": "Les clés d'accès enregistrées nécessitent HTTPS – elles échoueront sur HTTP.",
12459
+ "disableNeedConfirm": "Confirmation requise — saisissez DISABLE-HTTPS",
12460
+ "listenPublic": "Le panneau écoute sur une adresse publique (0.0.0.0/::). Restreindre avec un pare-feu ou lier à 127.0.0.1.",
12461
+ "bootstrapCert": "Il s'agit du certificat d'amorçage auto-signé — les navigateurs vous avertiront. Émettez un certificat approuvé pour le domaine du panneau.",
12462
+ "cliNoSocket": "La CLI n'a pas de socket HTTP actif ; serveHttps est déduit des sockets de configuration et d'écoute (ss).",
12463
+ "listenHost": "Adresse d'écoute",
12464
+ "currentHost": "Cette séance",
12465
+ "replaceCert": "Remplacer par un certificat de confiance",
12466
+ "needFqdn": "Need a FQDN (example.com), not a bare hostname"
10822
12467
  },
10823
12468
  "timeNtp": "Heure et NTP",
10824
12469
  "clockStatus": "État de l’horloge système",
@@ -10923,7 +12568,25 @@
10923
12568
  "exportPath": "Chemin d’export",
10924
12569
  "mode": "Mode",
10925
12570
  "managedConf": "Conf gérée",
10926
- "dryRunFlag": "Simulation"
12571
+ "dryRunFlag": "Simulation",
12572
+ "timezoneSearch": "Filtrer les fuseaux horaires…",
12573
+ "resyncNtp": "Resynchroniser NTP",
12574
+ "storageSub": "Utilisation du disque",
12575
+ "syncReloadNeedConfirm": "Confirmation requise — écrit /etc/nginx/conf.d et recharge Nginx",
12576
+ "nginxLeftover": "Reliquat",
12577
+ "nginxUnused": "Inutilisé",
12578
+ "nginxLeftoverHint": "Conf reliquat (ex. public-files). Incluse dans la sync tant que vous n’agissez pas.",
12579
+ "nginxUnusedHint": "Conf stock / catch-all (000-default). Incluse dans la sync tant que vous n’agissez pas.",
12580
+ "powerUnlock": "Débloquez la zone dangereuse",
12581
+ "powerLock": "Verrouiller la zone dangereuse",
12582
+ "noScheduledPower": "Aucun redémarrage ou mise hors tension n'est prévu",
12583
+ "timezoneNow": "Host time now: {{time}} ({{tz}})",
12584
+ "timezoneBrowserDiff": "This host uses {{host}}; your browser uses {{browser}}. Changing timezone here changes the host clock, not the browser.",
12585
+ "notExported": "Not exported yet",
12586
+ "nginxRemoveLeftover": "Remove leftover",
12587
+ "nginxRemoveLeftoverTitle": "Remove leftover nginx conf?",
12588
+ "nginxRemoveLeftoverDesc": "Deletes {{name}} from the panel inventory. The live /etc/nginx copy is removed only with YSK_EXECUTE + root. 000-default is not leftover and cannot be deleted here.",
12589
+ "needExecuteRoot": "Needs YSK_EXECUTE + root"
10927
12590
  },
10928
12591
  "systemd": {
10929
12592
  "enabled": "Activé",
@@ -11017,7 +12680,9 @@
11017
12680
  "aboutPolicySub": "L'écriture du modèle et l'installation système sont des étapes distinctes. Relancer après installation est une opération normale, pas une étape manquante.",
11018
12681
  "policyInstallFull": "Installer et activer : copier vers /etc/systemd/system, daemon-reload, enable --now. Nécessite root + EXECUTE.",
11019
12682
  "policyBlockedTitle": "Bloqué sans privilège",
11020
- "policyNotEqualTitle": "Les états ne sont pas équivalents"
12683
+ "policyNotEqualTitle": "Les états ne sont pas équivalents",
12684
+ "rawStateHint": "Raw unit state in tooltip",
12685
+ "bootHint": "Whether the unit starts at boot"
11021
12686
  },
11022
12687
  "tabs": {
11023
12688
  "scrollLeft": "Faire défiler les onglets vers la gauche",
@@ -11057,7 +12722,15 @@
11057
12722
  "stepUpHint": "La connexion root exige une élévation 2FA lorsque votre compte a le TOTP activé.",
11058
12723
  "stepUpTitle": "Confirmer le shell root",
11059
12724
  "stepUpDesc": "Saisissez le code de votre authenticator ou un code de récupération.",
11060
- "totpLabel": "Code TOTP / de récupération"
12725
+ "totpLabel": "Code TOTP / de récupération",
12726
+ "sessionStillOpen": "Un live shell est toujours connecté pendant que vous lisez cette page.",
12727
+ "rootConfirmTitle": "Ouvrir un shell racine ?",
12728
+ "rootConfirmDesc": "Cette session est un PTY racine sans restriction sur l'hôte. Les commandes sont auditées.",
12729
+ "rootConfirmBody": "Continuez uniquement si vous avez l'intention d'exécuter des commandes d'hôte privilégiées.",
12730
+ "copyAll": "Copier tout",
12731
+ "copyAllNeedConn": "Connectez-vous d'abord - le tampon est vide lorsqu'il est déconnecté",
12732
+ "groupSystem": "System",
12733
+ "groupProject": "Project"
11061
12734
  },
11062
12735
  "uiInline": {
11063
12736
  "s27d9daa5": "durée d'exécution {{v0}} {{v1}},",
@@ -11357,9 +13030,9 @@
11357
13030
  "applyPanelUpdate": "Appliquer la mise à jour du panneau",
11358
13031
  "recheck": "Revérifier",
11359
13032
  "aboutScope": "Portée",
11360
- "aboutScopeV": "version du plan de contrôle ysk-server · pas une mise à niveau apt système complète",
13033
+ "aboutScopeV": "panneau du serveur ysk + services de catalogue + environnements d'exécution + packages apt restants",
11361
13034
  "aboutChannel": "Canal",
11362
- "aboutChannelV": "npm → GitHub release → package.json ; appliquer via npm install -g ou git (YSK_SOURCE_ROOT)",
13035
+ "aboutChannelV": "package npm ysk-server version GitHub → apps/server/package.json ; appliquer : npm i -g ysk-server@version ou git (YSK_SOURCE_ROOT)",
11363
13036
  "aboutFail": "Échecs",
11364
13037
  "aboutFailV": "Les canaux indisponibles ne sont pas signalés comme à jour ; l'application nécessite EXECUTE ; l'application git nécessite un redémarrage du service",
11365
13038
  "jobsTitle": "Tâches planifiées",
@@ -11436,7 +13109,80 @@
11436
13109
  "scanNow": "Scannez maintenant",
11437
13110
  "viewUpgradable": "Voir évolutif",
11438
13111
  "installElsewhere": "Pour installer des packages (Nginx, PHP, bases de données…), ouvrez la page des fonctionnalités correspondantes – pas ce hub.",
11439
- "status": "Statut"
13112
+ "status": "Statut",
13113
+ "groupService": "Services",
13114
+ "groupRuntime": "Durées d'exécution",
13115
+ "groupOs": "Paquets système",
13116
+ "notInstalled": "Non installé",
13117
+ "goToPage": "Ouvrir la page",
13118
+ "hubHint": "Cataloguez les logiciels et les environnements d'exécution sur cet hôte. Numérisez pour actualiser.",
13119
+ "intervalDay": "tous les jours",
13120
+ "intervalDays": "tous les {{n}} jours",
13121
+ "intervalHour": "toutes les heures",
13122
+ "intervalHours": "toutes les {{n}} heures",
13123
+ "intervalMinutes": "toutes les {{n}} minutes",
13124
+ "intervalSeconds": "toutes les {{n}} secondes",
13125
+ "availableHint": "Packages avec un candidat plus récent du gestionnaire de packages.",
13126
+ "servicesHint": "Services de catalogue sur cet hôte. Ouvrez la page du service pour installer.",
13127
+ "runtimeHint": "Durées d'exécution sur cet hôte. Les mises à niveau de version sont effectuées sur chaque page d'exécution.",
13128
+ "needsReboot": "Redémarrage nécessaire",
13129
+ "kernelRebootWarn": "L'installation d'un nouveau noyau nécessite généralement un redémarrage avant son utilisation.",
13130
+ "neverRun": "pas encore couru",
13131
+ "scanOsvN": "Scan + OSV (premier {{n}})",
13132
+ "rebootNeeded": "redémarrer",
13133
+ "kernelRebootHint": "Les packages du noyau nécessitent un redémarrage après l'application",
13134
+ "needApprovalHint": "Ouvrez Disponible et filtrez les packages qui nécessitent une approbation",
13135
+ "applyNeedConfirm": "Ouvre une boîte de dialogue de confirmation avant d'appliquer",
13136
+ "probeFailed": "La sonde a échoué",
13137
+ "notViaApt": "Non géré par apt — aucun candidat",
13138
+ "noCandidate": "Aucune version candidate",
13139
+ "jobOpenGeo": "Page GéoIP",
13140
+ "job": {
13141
+ "protection_probe": {
13142
+ "name": "Sonde de protection",
13143
+ "hint": "Signaux de défense périodiques"
13144
+ },
13145
+ "updates_scan": {
13146
+ "name": "Analyse des mises à jour",
13147
+ "hint": "Actualiser l'inventaire des packages"
13148
+ },
13149
+ "daily_backup": {
13150
+ "name": "Sauvegarde quotidienne",
13151
+ "hint": "Sauvegarde planifiée tout"
13152
+ },
13153
+ "db_temp_expire": {
13154
+ "name": "Expiration des utilisateurs de base de données temporaires",
13155
+ "hint": "Supprimer les utilisateurs de base de données temporaires expirés"
13156
+ },
13157
+ "defense_auto_ban": {
13158
+ "name": "Interdiction automatique de la défense",
13159
+ "hint": "Appliquer une coche d'interdiction automatique"
13160
+ },
13161
+ "defense_geoip_update": {
13162
+ "name": "Mise à jour GeoIP",
13163
+ "hint": "Télécharger les bases de données GeoIP"
13164
+ },
13165
+ "log_auto_vacuum": {
13166
+ "name": "Aspirateur à bûches",
13167
+ "hint": "conservation du journal"
13168
+ },
13169
+ "email_dnsbl": {
13170
+ "name": "Envoyer un e-mail à DNSBL",
13171
+ "hint": "Vérification DNSBL par courrier"
13172
+ },
13173
+ "validators_upgrade_scan": {
13174
+ "name": "Validators upgrade scan",
13175
+ "hint": "Check validator image / binary updates"
13176
+ }
13177
+ },
13178
+ "applyPanelAlreadyLatest": "Déjà la dernière version du panneau",
13179
+ "panelRestarting": "Le panneau redémarre pour charger la nouvelle version…",
13180
+ "panelRestarted": "Panneau de retour · {{version}}",
13181
+ "panelRestartWait": "Mise à jour appliquée. Si la page ne se rafraîchit pas, rechargez dans quelques secondes.",
13182
+ "cveNotChecked": "Not checked",
13183
+ "cveLabel": "CVE",
13184
+ "riskUnevaluated": "Not evaluated — run Scan + OSV",
13185
+ "footerNewVersion": "New version {{version}}"
11440
13186
  },
11441
13187
  "users": {
11442
13188
  "userCount": "{{count}} utilisateurs",
@@ -11558,7 +13304,350 @@
11558
13304
  "securityClearTotpHint": "Nécessite une authentification renforcée",
11559
13305
  "securityClearConfirm": "Saisissez le nom d'utilisateur pour confirmer la suppression de la 2FA",
11560
13306
  "securityClearOk": "2FA supprimée pour {{name}}",
11561
- "securitySelfNote": "Pour configurer votre propre 2FA, ouvrez Sécurité → Ma sécurité."
13307
+ "securitySelfNote": "Pour configurer votre propre 2FA, ouvrez Sécurité → Ma sécurité.",
13308
+ "cannotDeleteSelf": "Impossible de supprimer le compte actuellement connecté",
13309
+ "cannotModifySelf": "Impossible de suspendre ou rétrograder le compte actuellement connecté",
13310
+ "cannotDeleteLastAdmin": "Impossible de supprimer le dernier administrateur",
13311
+ "cannotDemoteLastAdmin": "Impossible de suspendre ou rétrograder le dernier administrateur",
13312
+ "lockSelfHint": "Ceci est le compte connecté. La suppression, la suspension et le changement de rôle sont bloqués pour éviter un verrouillage.",
13313
+ "lockLastAdminHint": "Ceci est le dernier administrateur. La suppression, la suspension et la rétrogradation sont bloquées.",
13314
+ "demoteAdminTitle": "Rétrograder cet administrateur ?",
13315
+ "demoteAdminDesc": "Cet utilisateur perdra l’accès administrateur complet. Confirmez qu’un autre administrateur reste.",
13316
+ "searchPkgPh": "Nom du package",
13317
+ "quotaNonNeg": "Les décomptes et les quotas ne peuvent pas être négatifs.",
13318
+ "diskQuotaHint": "Les préréglages sont en GiB ; la boîte personnalisée est MiB.",
13319
+ "bandwidthHint": "0 signifie illimité.",
13320
+ "impersonateHint": "Ouvre une session en tant qu'utilisateur. Utilisez le menu du compte pour quitter l’usurpation d’identité.",
13321
+ "operatorHighRiskHint": "Le rôle opérateur d’usine inclut des écritures à haut risque. Le restreindre n’affecte que les nouveaux comptes ; changer le défaut affecte les opérateurs existants.",
13322
+ "cannotImpersonateSelf": "Vous êtes déjà connecté avec ce compte",
13323
+ "singleAdminNo2fa": "Cet hôte a un seul administrateur et 2FA est désactivé : activez 2FA et ajoutez un administrateur de sauvegarde.",
13324
+ "enableAdmin2fa": "Enable admin 2FA",
13325
+ "addBackupAdmin": "Add a backup admin"
13326
+ },
13327
+ "validators": {
13328
+ "title": "Validateurs (Beta)",
13329
+ "subtitle": "Installez et gérez des nœuds L1 sur cet hôte. Non dépositaire — vous gardez les clés.",
13330
+ "beta": "Beta",
13331
+ "tab": {
13332
+ "nodes": "Nœuds",
13333
+ "disk": "Disque",
13334
+ "about": "À propos",
13335
+ "stack": "Software"
13336
+ },
13337
+ "empty": {
13338
+ "title": "Aucun nœud validateur pour l’instant",
13339
+ "desc": "Créez un nœud de testnet en quelques clics."
13340
+ },
13341
+ "refresh": "Actualiser",
13342
+ "disk": {
13343
+ "title": "Disque des validateurs",
13344
+ "root": "Répertoire de données",
13345
+ "free": "Libre",
13346
+ "used": "Utilisé",
13347
+ "none": "Pas encore de données d’instance",
13348
+ "warn": "Utilisation du disque élevée (70 %+)",
13349
+ "danger": "Utilisation du disque critique (85 %+)",
13350
+ "autoClear": "Vider automatiquement la plus grande instance arrêtée lorsque le disque est critique (désactivé par défaut)",
13351
+ "autoClearRisk": "Destructive: the largest stopped instance is deleted without a further prompt. Default is off. Check audit / logs after it fires.",
13352
+ "autoClearConfirmTitle": "Enable auto-clear?",
13353
+ "autoClearC1": "When disk is critical, the largest stopped instance is deleted without asking again.",
13354
+ "fsUsed": "Filesystem used",
13355
+ "leftoverTitle": "Leftover data ({{count}})",
13356
+ "leftoverDesc": "Directories under the validators root that are not a store instance. Remove only after you confirm they are unused.",
13357
+ "leftoverRemove": "Remove",
13358
+ "leftoverRemoveTitle": "Delete leftover validator data?",
13359
+ "leftoverRemoveDesc": "Permanently delete {{path}} from disk. This is not a listed node.",
13360
+ "autoClearThreshold": "Trigger: filesystem use at or above 85%.",
13361
+ "autoClearCandidate": "Current candidate: {{id}}",
13362
+ "autoClearNone": "No stopped instance is a candidate right now.",
13363
+ "browseRoot": "Open in file browser",
13364
+ "leftoverEmpty": "No leftover instance directories"
13365
+ },
13366
+ "chain": {
13367
+ "eth": "Ethereum",
13368
+ "avax": "Avalanche",
13369
+ "near": "NEAR",
13370
+ "ada": "Cardano",
13371
+ "btc": "Bitcoin",
13372
+ "cosmos": "Cosmos Hub",
13373
+ "sui": "Sui",
13374
+ "aptos": "Aptos",
13375
+ "dot": "Polkadot",
13376
+ "sol": "Solana"
13377
+ },
13378
+ "network": {
13379
+ "hoodi": "Hoodi",
13380
+ "sepolia": "Sepolia",
13381
+ "mainnet": "Réseau principal",
13382
+ "fuji": "Fuji",
13383
+ "testnet": "Réseau de test",
13384
+ "preview": "Aperçu",
13385
+ "preprod": "Préproduction",
13386
+ "westend": "Westend"
13387
+ },
13388
+ "networkKind": {
13389
+ "testnet": "Réseau de test",
13390
+ "mainnet": "Réseau principal",
13391
+ "mixed": "Mainnet + testnet"
13392
+ },
13393
+ "profile": {
13394
+ "minimal": "Minimaliste",
13395
+ "pruned": "Pruned",
13396
+ "validator-ready": "Prêt validateur",
13397
+ "rpc": "RPC"
13398
+ },
13399
+ "col": {
13400
+ "id": "ID",
13401
+ "chain": "Chaîne",
13402
+ "network": "Réseau",
13403
+ "profile": "Profil",
13404
+ "status": "État",
13405
+ "disk": "Disque"
13406
+ },
13407
+ "cli": {
13408
+ "usage": "Utilisation : ysk-server validators list|chains|disk|get|status|logs|create|start|stop|restart|clear|upgrade|policy|mithril|prune|switch-network|snapshot|compose|settings [--chain C] [--network N] [--profile P] [--el EL] [--cl CL] [--data-path P] [--rpc-port N] [--id ID] [--upgrade POLICY] [--confirm TOKEN] [--execute] [--json]"
13409
+ },
13410
+ "clients": {
13411
+ "el": "Client d’exécution",
13412
+ "cl": "Client de consensus"
13413
+ },
13414
+ "mithril": {
13415
+ "label": "Restaurer d’abord depuis un instantané Mithril (recommandé en testnet)",
13416
+ "action": "Restaurer avec Mithril"
13417
+ },
13418
+ "errors": {
13419
+ "notFound": "Instance de validateur introuvable",
13420
+ "invalidId": "Identifiant d’instance invalide",
13421
+ "diskLow": "Pas assez d’espace disque libre pour cette chaîne, ce réseau et ce profil",
13422
+ "diskUnknownMainnet": "Impossible de mesurer l’espace libre ; création en réseau principal refusée",
13423
+ "needDocker": "Docker Compose est requis et introuvable",
13424
+ "composeFailed": "docker compose a échoué",
13425
+ "needConfirm": "Vider exige confirm=identifiant d’instance ou CLEAR",
13426
+ "mithrilAdaOnly": "La restauration Mithril n’est disponible que pour Cardano",
13427
+ "needMithrilConfirm": "Mithril exige confirm=identifiant d’instance ou MITHRIL",
13428
+ "mithrilBlocked": "Le docker run Mithril a été bloqué par la liste d’autorisation",
13429
+ "mithrilKey": "Impossible de charger la clé de vérification genesis Mithril",
13430
+ "mithrilFailed": "Échec du téléchargement de l’instantané Mithril",
13431
+ "pruneFailed": "Le nettoyage a échoué",
13432
+ "switchNeedStop": "Arrêtez le nœud avant de changer de réseau",
13433
+ "switchNeedClear": "Changer de réseau efface les données de chaîne. Confirmez avec l’identifiant d’instance ou CLEAR",
13434
+ "composeMissing": "Fichier Compose introuvable",
13435
+ "composeNotManaged": "Refus d’écrire un fichier Compose non géré par YSK",
13436
+ "badDataPath": "Le chemin de données doit être un répertoire absolu hors des chemins système",
13437
+ "portInUse": "Ce port RPC est déjà utilisé par une autre instance de validateur",
13438
+ "snapshotUnsupported": "Aucune source d’instantané autorisée pour cette chaîne",
13439
+ "snapshotLookup": "Impossible de résoudre le pointeur d’instantané officiel",
13440
+ "needSnapshotConfirm": "La restauration d’instantané exige confirm=identifiant d’instance ou SNAPSHOT",
13441
+ "snapshotBlocked": "Le docker run d’instantané a été bloqué par la liste d’autorisation",
13442
+ "snapshotFailed": "Échec du téléchargement ou de l’extraction de l’instantané"
13443
+ },
13444
+ "notes": {
13445
+ "beta": "Cette fonction est Beta. Les changements d’hôte nécessitent root et YSK_EXECUTE=1.",
13446
+ "noKeys": "YSK Server ne génère ni n’enregistre jamais de clés de staking.",
13447
+ "dockerSoon": "Install and start from this page wizard. Host changes need root and YSK_EXECUTE=1.",
13448
+ "dryCreate": "Spécification d’instance et compose écrits (dry-run). Passez --execute et YSK_EXECUTE=1 pour démarrer les conteneurs.",
13449
+ "dryStart": "Le démarrage est un dry-run. Passez --execute et YSK_EXECUTE=1.",
13450
+ "dryStop": "L’arrêt est un dry-run. Passez --execute et YSK_EXECUTE=1.",
13451
+ "dryClear": "Le vidage est un dry-run. Passez --execute et YSK_EXECUTE=1.",
13452
+ "created": "Nœud créé et compose démarré",
13453
+ "started": "Nœud démarré",
13454
+ "stopped": "Nœud arrêté",
13455
+ "cleared": "Données de chaîne vidées",
13456
+ "dryMithril": "La restauration Mithril est un dry-run. Passez --execute et YSK_EXECUTE=1.",
13457
+ "mithril": "Instantané Mithril restauré ; nœud redémarré",
13458
+ "dryPrune": "Le nettoyage est un dry-run. Passez --execute et YSK_EXECUTE=1.",
13459
+ "pruned": "Images de projet inutilisées nettoyées",
13460
+ "pruneProfile": "L’élagage natif du client est le profil pruned/minimal. Recréez pour le changer.",
13461
+ "sameNetwork": "Déjà sur ce réseau",
13462
+ "drySwitch": "Le changement de réseau est un dry-run.",
13463
+ "switched": "Réseau changé et données de chaîne vidées",
13464
+ "dryCompose": "Écrirait compose.yml",
13465
+ "composeWrote": "compose.yml écrit",
13466
+ "statsEmpty": "Aucun conteneur en cours d’exécution à mesurer",
13467
+ "autoClearNone": "Aucune instance arrêtée à vider automatiquement",
13468
+ "drySnapshot": "La restauration d’instantané est un dry-run. Passez --execute et YSK_EXECUTE=1.",
13469
+ "snapshotEthEl": "Archive EL ethPandaOps restaurée et CL réinitialisé pour le checkpoint sync",
13470
+ "snapshotEthCl": "Données CL réinitialisées pour le checkpoint sync officiel",
13471
+ "snapshotNear": "Données NEAR effacées ; compose réinitialisera avec le genesis officiel et epoch sync",
13472
+ "nativePrune": "Commande d’élagage native du client exécutée",
13473
+ "dryDelete": "Delete is dry-run. Pass --execute and YSK_EXECUTE=1.",
13474
+ "deleted": "Node deleted",
13475
+ "leftoverRemoved": "Removed leftover {{path}}"
13476
+ },
13477
+ "create": "Créer un nœud",
13478
+ "wizard": {
13479
+ "title": "Créer un nœud",
13480
+ "back": "Retour",
13481
+ "next": "Suivant",
13482
+ "install": "Installer",
13483
+ "mainnetWarn": "Le réseau principal demande beaucoup d’espace libre (ETH souvent 800 Gio+). Le testnet est recommandé.",
13484
+ "mainnetAck": "Je comprends le risque disque et slashing. Continuer en réseau principal.",
13485
+ "heavyWarn": "Cette chaîne est lourde (gros disque et IOPS élevés). Solana en réseau principal demande généralement 2 Tio+.",
13486
+ "memory": "Limite mémoire (ex. 4g)",
13487
+ "cpus": "Limite CPU (ex. 2.0)",
13488
+ "dataPath": "Chemin de données (facultatif)",
13489
+ "rpcPort": "Port RPC (facultatif)",
13490
+ "stepOf": "Step {{n}} / {{total}}",
13491
+ "stepChain": "Chain",
13492
+ "stepNetwork": "Network",
13493
+ "stepProfile": "Profile",
13494
+ "stepSummary": "Summary",
13495
+ "needDocker": "Docker Engine is not installed. Install it first — this button stays disabled.",
13496
+ "diskNeed": "This profile needs about {{need}} · free {{free}}",
13497
+ "diskShort": "Not enough free disk for this chain / network / profile",
13498
+ "limitNone": "No limit",
13499
+ "rpcDefault": "Default",
13500
+ "customPath": "Use a custom data path",
13501
+ "installConfirmTitle": "Install this node?",
13502
+ "installConfirmDesc": "{{chain}} · {{network}} · {{profile}}. About {{disk}} of disk. The image pull can take a long time.",
13503
+ "installC1": "Several gigabytes of images may be downloaded.",
13504
+ "installC2": "You can cancel the panel task; already-pulled images are not deleted automatically.",
13505
+ "lowDiskAcked": "Free disk is below the recommended size. You confirmed create anyway; sync may stop if the disk fills.",
13506
+ "diskNeedNetwork": "Default (Minimal) for this network needs about {{need}} · free {{free}}",
13507
+ "diskShortDetail": "Need {{need}} · free {{free}} · short {{short}}",
13508
+ "needCustomPath": "Enter an absolute data path",
13509
+ "previewId": "Node id",
13510
+ "previewCompose": "Compose project",
13511
+ "profileSeeAbout": "What each profile means is on the About tab.",
13512
+ "dockerAbout": "Docker Engine is required to install and start nodes.",
13513
+ "dockerAboutOk": "Docker Engine is installed.",
13514
+ "dockerAboutMissing": "Docker Engine is not installed. Open Docker to install it.",
13515
+ "rewriteCompose": "Rewrite compose",
13516
+ "rewriteComposeTitle": "Rewrite compose.yml from the current adapter?",
13517
+ "rewriteComposeDesc": "Overwrites the generated compose for {{id}} using the shipped flags for this chain.",
13518
+ "chainMeta": "{{disk}} min · {{clients}} clients",
13519
+ "profileHint": {
13520
+ "minimal": "Smallest sync — light disk, not for staking.",
13521
+ "pruned": "Keeps recent history only (Pruned). Smaller than archive, still usable for RPC.",
13522
+ "validator-ready": "Sized for a staking validator. Needs more disk than Minimal.",
13523
+ "rpc": "Public RPC node — not a staking validator."
13524
+ }
13525
+ },
13526
+ "actions": {
13527
+ "detail": "Détails",
13528
+ "start": "Démarrer",
13529
+ "stop": "Arrêter",
13530
+ "restart": "Redémarrer",
13531
+ "clear": "Vider",
13532
+ "upgrade": "Mettre à jour",
13533
+ "clearConfirm": "Saisissez l’identifiant d’instance ou CLEAR",
13534
+ "prune": "Nettoyer les images",
13535
+ "switchNetwork": "Changer de réseau",
13536
+ "removeUnit": "Supprimer aussi compose / l’enregistrement d’instance",
13537
+ "restoreAfter": "Restaurer l’instantané après vidage",
13538
+ "delete": "Delete",
13539
+ "deleteTitle": "Delete {{id}}",
13540
+ "deleteDesc": "This removes the node from the panel.",
13541
+ "deleteC1": "Docker Compose is stopped and removed",
13542
+ "deleteC2": "Chain data on disk is deleted",
13543
+ "deleteC3": "The instance record is removed",
13544
+ "pruneTitle": "Prune unused images",
13545
+ "pruneDesc": "Type the instance id to prune unused Compose images for this node.",
13546
+ "pruneC1": "Unused images labelled for this Compose project are deleted.",
13547
+ "clearTitle": "Clear {{id}}",
13548
+ "clearC1": "Chain data on disk is deleted.",
13549
+ "clearC2": "The instance stays in the panel, stopped and empty.",
13550
+ "switchTitle": "Switch network",
13551
+ "switchC1": "The node is stopped and chain data is wiped before the new network is written."
13552
+ },
13553
+ "policy": {
13554
+ "label": "Politique de mise à jour",
13555
+ "manual": "Manuel",
13556
+ "notify": "Notifier",
13557
+ "auto-safe": "Auto (sûr)",
13558
+ "auto-all": "Auto (tout)"
13559
+ },
13560
+ "logs": {
13561
+ "empty": "Pas encore de journaux",
13562
+ "follow": "Suivre les journaux"
13563
+ },
13564
+ "compose": {
13565
+ "label": "Fichier Compose",
13566
+ "save": "Enregistrer compose"
13567
+ },
13568
+ "snapshot": {
13569
+ "action": "Restaurer l’instantané",
13570
+ "mithril": "Cardano utilise Mithril pour restaurer un instantané certifié.",
13571
+ "eth": "Ethereum en réseau principal démarre via le checkpoint sync officiel du client de consensus. L’EL continue en snap sync.",
13572
+ "ethEl": "Hoodi/Sepolia peuvent restaurer une archive EL ethPandaOps, puis faire un checkpoint-sync du CL.",
13573
+ "avax": "Avalanche utilise state-sync dans le profil compose.",
13574
+ "near": "Les instantanés tar NEAR gratuits officiels ont été retirés. Restaurer efface les données et utilise le genesis officiel plus epoch sync.",
13575
+ "none": "Aucune source d’instantané n’est configurée pour cette chaîne."
13576
+ },
13577
+ "stake": {
13578
+ "title": "Préparer le staking (vous gardez les clés)",
13579
+ "offlineKeys": "Générez les clés hors ligne. Le panneau ne les stocke jamais.",
13580
+ "deposit": "Terminez le dépôt / l’enregistrement sur le launchpad officiel.",
13581
+ "withdrawal": "Définissez vous-même les identifiants de retrait.",
13582
+ "monitor": "Surveillez disque, pairs et badges de mise à jour sur cette page."
13583
+ },
13584
+ "alerts": {
13585
+ "diskTitle": "Disque validateur critique",
13586
+ "diskBody": "L’espace libre du volume de données validateur est critique.",
13587
+ "upgradeTitle": "Mise à jour validateur disponible",
13588
+ "upgradeBody": "Un ou plusieurs clients de nœud ont une version épinglée plus récente.",
13589
+ "syncTitle": "Le nœud validateur nécessite une attention",
13590
+ "syncBody": "Un nœud se synchronise depuis plus de 6 heures ou a signalé une erreur.",
13591
+ "rollbackTitle": "Mise à jour validateur annulée",
13592
+ "rollbackBody": "La mise à jour de {{id}} a échoué au contrôle de santé et a été annulée."
13593
+ },
13594
+ "upgrade": {
13595
+ "changelog": "Journal des changements"
13596
+ },
13597
+ "readiness": {
13598
+ "dockerTitle": "Docker pour les nœuds validateurs",
13599
+ "dockerOk": "{{count}} instance(s) de validateur ; Docker est installé",
13600
+ "dockerMissing": "Des instances de validateur existent mais la commande docker est introuvable"
13601
+ },
13602
+ "detail": {
13603
+ "status": "Status",
13604
+ "sync": "Sync",
13605
+ "peers": "Peers",
13606
+ "version": "Version",
13607
+ "access": "Access",
13608
+ "upgrade": "Updates",
13609
+ "upgradeHint": "How this node tracks client versions.",
13610
+ "network": "Network",
13611
+ "networkHint": "Switching network stops the node and clears chain data. Confirm under Clear data first.",
13612
+ "maintain": "Maintenance",
13613
+ "danger": "Clear data",
13614
+ "dangerHint": "Type the instance id or CLEAR. This deletes chain data on disk.",
13615
+ "compose": "Compose",
13616
+ "logs": "Logs"
13617
+ },
13618
+ "state": {
13619
+ "unknown": "Unknown",
13620
+ "stopped": "Stopped",
13621
+ "running": "Running",
13622
+ "syncing": "Syncing",
13623
+ "error": "Error",
13624
+ "starting": "Starting"
13625
+ },
13626
+ "profileHelp": {
13627
+ "title": "Profiles",
13628
+ "desc": "The four choices on wizard step 3 are mainly disk budget and role. Each chain shows its recommended size in the wizard. The panel never holds staking keys.",
13629
+ "minimal": "Smallest disk. Use for testnets or a first install. Not a full history, and not for a live staking validator.",
13630
+ "pruned": "Keeps recent chain state and drops older blocks (Pruned). More disk than Minimal, less than a full node. Use to follow the tip long-term.",
13631
+ "validatorReady": "Reserves more disk so you can later attest or propose as a validator. Generate keys offline yourself. Being offline or misconfigured can lose stake.",
13632
+ "rpc": "For this host or other services to query the chain. RPC listens on 127.0.0.1 by default and is not published to the internet."
13633
+ },
13634
+ "software": {
13635
+ "engine": "Docker Engine",
13636
+ "engineDesc": "Validator nodes run as Compose projects. Install Docker here if it is missing. Image prune stays on the Docker page.",
13637
+ "client": "Client",
13638
+ "image": "Image",
13639
+ "present": "Local",
13640
+ "local": "Pulled",
13641
+ "missing": "Not pulled",
13642
+ "size": "Size",
13643
+ "usedBy": "Used by",
13644
+ "unused": "No instance",
13645
+ "pull": "Pull",
13646
+ "pulling": "Pull {{ref}}",
13647
+ "empty": "No pinned client images",
13648
+ "emptyDesc": "The catalog is empty. This should not happen.",
13649
+ "daemonDown": "Docker Engine is not running"
13650
+ }
11562
13651
  },
11563
13652
  "vnc": {
11564
13653
  "pageDesc": "Serveur et client VNC",
@@ -11804,7 +13893,23 @@
11804
13893
  "stackMissingShort": "Non installé",
11805
13894
  "editClientTitle": "Modifier le client distant",
11806
13895
  "editClientDesc": "Mettez à jour le chemin, les hôtes et le mot de passe stocké facultatif.",
11807
- "clientUpdated": "Profil client mis à jour"
13896
+ "clientUpdated": "Profil client mis à jour",
13897
+ "rememberNeedPassword": "Entrez d'abord un mot de passe.",
13898
+ "settingsNeedStack": "Ces valeurs par défaut s'appliquent lorsque TigerVNC (et XFCE si sélectionné) sont installés. Installez-les d'abord dans l'onglet Installer.",
13899
+ "clientNeedNovnc": "Ouvrir dans le navigateur nécessite noVNC. Installez-le dans l'onglet Installer avant d'ajouter les télécommandes que vous prévoyez d'ouvrir ici.",
13900
+ "needXfceFirst": "Install XFCE first",
13901
+ "needSessionRunning": "Session is not running — start it first",
13902
+ "deleteKeepUserWarn": "The Linux user will stay on the host as an orphan. You must clean it up later.",
13903
+ "bindRfbLine": "RFB {{bind}} :{{port}}",
13904
+ "bindNovncLine": "noVNC 127.0.0.1:{{port}}",
13905
+ "bindNovncHint": "noVNC listens on localhost. The desktop is reached through this panel, not the public internet, unless RFB bind is all interfaces.",
13906
+ "hostnameBroken": "This host cannot resolve its own hostname ({{hostname}}). Session start will fail.",
13907
+ "hostnameFix": "Write hostname to /etc/hosts",
13908
+ "hostnameFixTitle": "Append this line to /etc/hosts?",
13909
+ "hostnameFixDesc": "{{line}}",
13910
+ "hostnameFixDone": "Hostname /etc/hosts updated",
13911
+ "startAfterCreateBlocked": "Disabled until the hostname resolves",
13912
+ "hostnameBrokenIdle": "Hostname {{hostname}} does not resolve on this host. Fix /etc/hosts before you create a session."
11808
13913
  },
11809
13914
  "vpn": {
11810
13915
  "pageDesc": "Serveur et client VPN",
@@ -11812,7 +13917,7 @@
11812
13917
  "tab": {
11813
13918
  "wireguard": "WireGuard",
11814
13919
  "openvpn": "OpenVPN",
11815
- "outline": "Chaussettes d'ombre",
13920
+ "outline": "Shadowsocks",
11816
13921
  "client": "Client local",
11817
13922
  "software": "Logiciels",
11818
13923
  "monitor": "Moniteur",
@@ -11935,6 +14040,21 @@
11935
14040
  "lanCidrs": "Réseaux LAN",
11936
14041
  "customCidr": "CIDR",
11937
14042
  "addCidr": "Ajouter"
11938
- }
14043
+ },
14044
+ "engineNotInstalled": "Ce moteur VPN n'est pas installé sur l'hôte.",
14045
+ "serverNotListening": "L'unité serveur n'est pas active. UDP/TCP {{port}} est peut-être fermé.",
14046
+ "installEngineFirst": "Installez d'abord le moteur VPN",
14047
+ "portHint": {
14048
+ "51820": "Port d'écoute WireGuard par défaut",
14049
+ "51821": "Port d'écoute WireGuard alternatif",
14050
+ "51822": "Deuxième port d'écoute WireGuard alternatif"
14051
+ },
14052
+ "needServerRunning": "{{engine}} is not running — apply the server first",
14053
+ "engineSummarySoftware": "{{installed}} installed · {{running}} running",
14054
+ "privateKeyOnce": "The client private key is shown only here. Download or copy it now — it cannot be recovered later.",
14055
+ "showPrivateKey": "Show private key",
14056
+ "hidePrivateKey": "Hide private key",
14057
+ "deletePeerTitle": "Delete peer {{name}}?",
14058
+ "deletePeerDesc": "Remove {{name}} ({{address}}). The client disconnects immediately and the config cannot be restored."
11939
14059
  }
11940
14060
  }