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": "실패한",
16
16
  "error": "오류",
17
17
  "unknown": "프로브되지 않음",
18
- "fallback": "알 수 없음"
18
+ "fallback": "알 수 없음",
19
+ "activating": "Starting",
20
+ "stuck": "Start stuck"
19
21
  },
20
22
  "liveN": "{{count}} 온라인",
21
23
  "registeredOnly": "등록만 됨",
@@ -130,7 +132,20 @@
130
132
  "labelStderr": "표준 오류",
131
133
  "labelAckCli": "ack + CLI JSON",
132
134
  "labelStdoutBody": "CLI 표준 출력 본문",
133
- "resultOuterHint": "외부 결과는 CLI --json stdout입니다."
135
+ "resultOuterHint": "외부 결과는 CLI --json stdout입니다.",
136
+ "statusFlowTitle": "상태 흐름",
137
+ "statusFlow": "등록만 → 온라인 → 오래된(60초 이상) → 오프라인(연결 끊김). 필터 \"오프라인\"이 연결 해제되었습니다.",
138
+ "colSession": "세션 UUID",
139
+ "copySession": "클러스터/CLI --session에 대한 세션 UUID 복사",
140
+ "staleFor": "보이지 않음 {{age}}",
141
+ "commandTitle": "이 세션에 대한 명령을 대기열에 넣습니다.",
142
+ "historyTitleShort": "명령 기록 열기(읽기 전용)",
143
+ "expEdge": "가장자리에서:",
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": "깨끗한 충돌 잔차",
249
264
  "cleanupConflictsTitle": "모든 충돌 잔여물을 청소하시겠습니까?",
250
265
  "cleanupConflictsDesc": "프로젝트 또는 독립 실행형 ServerName과 충돌하는 모든 디스크상의 아티팩트 구성을 제거하십시오. 프로젝트 행은 유지됩니다.",
251
- "artifactRemovedOk": "잔여 conf가 제거되었습니다."
266
+ "artifactRemovedOk": "잔여 conf가 제거되었습니다.",
267
+ "sslTerminatedUpstream": "TLS는 전면 Nginx에서 끝납니다.",
268
+ "removeArtifactHint": "이 잔여 디스크 conf만 삭제하며 프로젝트는 지우지 않습니다.",
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": "초안",
@@ -285,7 +306,10 @@
285
306
  "project.publish": "Nginx 게시",
286
307
  "project.suspend": "프로젝트 일시 중단",
287
308
  "software.install": "소프트웨어 설치",
288
- "software.update": "소프트웨어 업데이트"
309
+ "software.update": "소프트웨어 업데이트",
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": "로컬 tar가 성공한 후 SFTP, 로컬 경로 또는 S3로 푸시합니다.",
420
444
  "accessKey": "액세스 키",
421
445
  "secretKey": "비밀키",
422
- "overwriteConfirmHint": "덮어쓰기를 확인하려면 OVERWRITE를 입력하세요."
446
+ "overwriteConfirmHint": "덮어쓰기를 확인하려면 OVERWRITE를 입력하세요.",
447
+ "testRemote": "대상 테스트",
448
+ "testRemoteDone": "원격 탐침 완료",
449
+ "testRemoteFailed": "원격 탐침 실패",
450
+ "resticRepoPh": "패널 데이터 디렉토리 / Restic-repo",
451
+ "testDisabledHint": "테스트하기 전에 원격 푸시를 켜십시오.",
452
+ "identityId": "아웃바운드 SSH ID",
453
+ "identityHint": "우선의. /security SSH와 동일한 볼트입니다. 비밀번호에는 sshpass가 필요합니다.",
454
+ "identityNone": "없음 — 비밀번호 또는 기본 키",
455
+ "remotePathHint": "원격 사용자의 집(또는 SFTP chroot)을 기준으로 합니다. “.” 그 집이에요.",
456
+ "restoreFullTitle": "이 아카이브의 프로젝트 파일 및 데이터베이스 덮어쓰기 - 확인하려면 파일 이름을 입력하세요.",
457
+ "restoreWebTitle": "이 아카이브에서만 웹사이트 파일을 복원하세요.",
458
+ "previewTitle": "쓰지 않고 복원 미리보기",
459
+ "partialSkipped": "부분 — 일부 프로젝트를 건너뛰었습니다.",
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": "블루투스 트래커",
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": "상태",
488
+ "running": "달리기",
489
+ "stopped": "중지됨",
431
490
  "installed": "Installed (bundled)",
432
491
  "start": "Start tracker",
433
492
  "stop": "Stop tracker",
434
- "refresh": "Refresh",
435
- "settings": "Settings",
493
+ "refresh": "새로고침",
494
+ "settings": "설정",
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": "이름",
455
514
  "colHash": "Info hash",
456
- "colSeeds": "Seeds",
457
- "colLeechers": "Leechers",
458
- "colStatus": "Status",
515
+ "colSeeds": "씨앗",
516
+ "colLeechers": "거머리",
517
+ "colStatus": "상태",
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",
463
- "statsTorrents": "Torrents",
464
- "statsPeers": "Peers",
465
- "statsAnnounces": "Announces",
520
+ "copy": "복사",
521
+ "copied": "복사됨",
522
+ "statsTorrents": "급류",
523
+ "statsPeers": "동료",
524
+ "statsAnnounces": "발표하다",
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": "소프트웨어",
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": "직업",
539
+ "colShare": "공유하다",
481
540
  "colJobStatus": "Job status",
482
541
  "colEnqueued": "Enqueued",
483
542
  "refreshJobs": "Refresh jobs",
484
- "tabOverview": "Overview",
485
- "tabTorrents": "Torrents",
486
- "tabJobs": "Jobs",
487
- "tabSettings": "Settings",
488
- "tabAbout": "About",
543
+ "tabOverview": "개요",
544
+ "tabTorrents": "급류",
545
+ "tabJobs": "채용정보",
546
+ "tabSettings": "설정",
547
+ "tabAbout": "설명",
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": "살다",
553
+ "liveOff": "게으른",
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": "완료",
563
+ "stepTodo": "토도",
564
+ "networkCard": "네트워크",
506
565
  "networkCardDesc": "Where the tracker listens and what host appears in magnets.",
507
- "seederCard": "Seeder",
566
+ "seederCard": "파종기",
508
567
  "seederCardDesc": "In-process WebTorrent seeder limits and peer ports.",
509
- "lifecycleCard": "Lifecycle",
568
+ "lifecycleCard": "수명주기",
510
569
  "lifecycleCardDesc": "Boot behaviour and how the service is packaged.",
511
570
  "pid": "PID",
512
- "port": "Port",
571
+ "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": "전체",
576
+ "filterSeeding": "파종",
577
+ "filterOther": "다른",
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": "파종",
580
+ "seedStatusPending": "보류 중",
581
+ "seedStatusError": "오류",
582
+ "seedStatusStopped": "중지됨",
583
+ "seedStatusNone": "없음",
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": "저장됨 - 포트를 적용하려면 트래커를 다시 시작하세요",
541
- "announceHostUnset": ""
600
+ "announceHostUnset": "미설정",
601
+ "tabTrackers": "추적기",
602
+ "addTorrent": "토렌트 추가",
603
+ "addTorrentTitle": "토렌트 추가",
604
+ "addTorrentHint": ".torrent를 업로드하거나 자석을 붙여넣으세요. 파일 폴더를 선택합니다. WebTorrent는 완료되면 누락된 파일과 시드를 다운로드합니다.",
605
+ "dropTorrent": "여기에 .torrent를 드롭하세요.",
606
+ "chooseFile": "또는 파일을 선택하세요",
607
+ "magnetLabel": "자석",
608
+ "magnetPlaceholder": "자석:?xt=urn:btih:…",
609
+ "inspect": "읽다",
610
+ "extraTrackersPreview": "{{n}} 추가 추적자에게도 알립니다.",
611
+ "saveLocation": "위치 저장",
612
+ "saveRootPublic": "공개 파일",
613
+ "newFolder": "새 폴더",
614
+ "destPreview": "에 쓸 것입니다",
615
+ "startDownload": "다운로드 시작",
616
+ "filterDownloading": "다운로드 중",
617
+ "filterPaused": "일시중지됨",
618
+ "filterError": "오류",
619
+ "emptyDrop": "여기에 .torrent를 드롭하거나 파일을 선택하세요.",
620
+ "emptyHint": "선택한 폴더에 파일이 들어갑니다. 이미 완료된 경우 이 호스트가 시드됩니다. 엔진: WebTorrent — 추가 소프트웨어 다운로드가 없습니다.",
621
+ "pause": "정지시키다",
622
+ "resume": "재개하다",
623
+ "openFolder": "폴더 열기",
624
+ "remove": "제거하다",
625
+ "removeKeep": "파일 제거, 보관",
626
+ "removeDelete": "파일 제거 및 삭제",
627
+ "removeConfirm": "라이브러리에서 이 토렌트를 삭제하시겠습니까?",
628
+ "kindShare": "공유하다",
629
+ "filesInTorrent": "파일",
630
+ "extraTrackersDesc": "추가 공지 URL. 라이브러리 다운로드/시드 및 파일 공유 시드는 .torrent 목록 외에 이를 사용합니다. 이것은 임의의 떼에 대한 로컬 추적기를 열지 않습니다.",
631
+ "extraTrackersEmpty": "추가 추적기가 없습니다. 이 호스트가 피어를 찾을 수 있도록 HTTP(S), UDP 또는 WS(S) 알림 URL을 추가하세요.",
632
+ "extraTrackerAdd": "추가하다",
633
+ "extraTrackerUrl": "URL 발표",
634
+ "extraTrackerApply": "현재 시드에 적용",
635
+ "extraTrackerApplyOk": "추가 추적기 적용",
636
+ "extraEnabled": "켜짐",
637
+ "extraTrackerBad": "URL은 http://, https://, udp://, ws:// 또는 wss://로 시작해야 합니다.",
638
+ "extraTrackerDup": "이미 나열됨",
639
+ "extraTrackerLimit": "최대 32개의 추가 추적기",
640
+ "addOk": "라이브러리에 추가됨",
641
+ "savedTo": "저장",
642
+ "folderEmpty": "하위 폴더 없음",
643
+ "needTorrentFile": ".torrent 파일을 선택하세요",
644
+ "torrentTooBig": "8MiB보다 큰 .torrent",
645
+ "seedStatusDownloading": "다운로드 중",
646
+ "seedStatusChecking": "확인 중",
647
+ "seedStatusPaused": "일시중지됨",
648
+ "seedStatusQueued": "대기 중",
649
+ "swarmLeftover": "Tracker에 라이브러리에 없는 announce가 {{count}}개 있습니다(Torrent 목록과 출처가 다름)",
650
+ "addSourceSection": "소스",
651
+ "addSourceFile": "파일",
652
+ "addSourceMagnet": "자석",
653
+ "previewSection": "미리보기",
654
+ "saveRoot": "루트",
655
+ "clearFile": "파일 지우기",
656
+ "extraTrackersTitle": "추가 announce",
657
+ "extraTrackersEmptyTitle": "아직 Tracker가 없습니다",
658
+ "extraEnabledCount": "{{count}}개 사용 중",
659
+ "extraApplyHint": "기존 시드에 적용하려면 하나 이상 켜세요",
660
+ "destMode": "이 폴더 사용 방법",
661
+ "seedExisting": "기존 파일로 시드",
662
+ "downloadNewFolder": "새 폴더로 다운로드",
663
+ "destFileConflict": "여기에 {{name}} 파일이 있습니다. 다른 폴더를 고르거나, 내용이 같으면 기존 파일로 시드하세요.",
664
+ "waitingPeers": "피어를 기다리는 중입니다. 파일이 이 호스트에 있으면 다시 추가하고 기존 파일로 시드하세요.",
665
+ "stopTitle": "추적기를 중지합니다. 시드 및 다운로드가 중단됩니다.",
666
+ "stopDesc": "실행 중인 토렌트가 발표를 중지합니다. 추적기를 다시 시작할 때까지 피어의 연결이 끊어집니다.",
667
+ "fillPublicHost": "{{host}} 사용",
668
+ "fillPublicHostTitle": "현재 패널 호스트 이름을 공개 발표 호스트로 입력하세요.",
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
687
  "db_util": "db-util (FTP 사용자 DB)",
547
688
  "nginx": "Nginx",
548
- "certbot": "Certbot(암호화하자)",
689
+ "certbot": "Certbot (Let's Encrypt)",
549
690
  "mysql_client": "MySQL/MariaDB 클라이언트",
550
691
  "mysql_server": "MySQL 서버",
551
692
  "mariadb_server": "마리아DB 서버",
@@ -554,22 +695,22 @@
554
695
  "redis_tools": "레디스 클라이언트",
555
696
  "redis_server": "레디스 서버",
556
697
  "ufw": "UFW 방화벽",
557
- "fail2ban": "실패2금지",
558
- "postfix": "접미사",
559
- "dovecot": "비둘기장",
560
- "opendkim": "오픈DKIM",
561
- "pdns_server": "파워DNS",
698
+ "fail2ban": "fail2ban",
699
+ "postfix": "Postfix",
700
+ "dovecot": "Dovecot",
701
+ "opendkim": "OpenDKIM",
702
+ "pdns_server": "PowerDNS",
562
703
  "git": "힘내",
563
704
  "node": "Node.js",
564
705
  "php": "PHP",
565
706
  "python": "Python",
566
707
  "go": "Go",
567
708
  "rust": "Rust",
568
- "chromium": "크롬 / 크롬"
709
+ "chromium": "Chromium / Chrome"
569
710
  },
570
711
  "php": {
571
712
  "session": "세션",
572
- "opcache": "OP캐시"
713
+ "opcache": "OPcache"
573
714
  }
574
715
  },
575
716
  "cdn": {
@@ -689,7 +830,95 @@
689
830
  "deleteNodeDesc": "CDN 노드 \"{{name}}\"을 삭제합니다.",
690
831
  "deleteSiteDesc": "CDN 사이트 \"{{name}}\"을 삭제합니다.",
691
832
  "deleteSiteC1": "사이트 정책 및 에지 연결",
692
- "deleteSiteC2": "적용된 nginx 구성은 별도의 정리 또는 재적용이 필요할 수 있습니다."
833
+ "deleteSiteC2": "적용된 nginx 구성은 별도의 정리 또는 재적용이 필요할 수 있습니다.",
834
+ "statOnline": "Online",
835
+ "statOffline": "오프라인 {{n}}",
836
+ "statHitRate": "적중률 {{v}}",
837
+ "hitNoStats": "아직 에지 통계가 없습니다",
838
+ "loopbackOriginBlocked": "루프백 origin {{url}}을 원격 에지에 쓰지 않습니다. 먼저 도달 가능한 origin으로 바꾸세요.",
839
+ "applyFailedHint": "적용 실패 — 아래 메모를 보세요",
840
+ "applyStatus": {
841
+ "draft": "초안",
842
+ "planned": "계획됨",
843
+ "applying": "적용 중",
844
+ "applied": "적용됨",
845
+ "failed": "실패",
846
+ "partial": "부분"
847
+ },
848
+ "drain": "물을 빼다",
849
+ "drainTitle": "이 에지로 새 CDN 트래픽 전송을 중지합니다.",
850
+ "drainDesc": "“{{name}}”을 비우시겠습니까? 기존 연결은 완료될 때까지 유지됩니다.",
851
+ "drainLastTitle": "이것이 마지막 가장자리입니다. 배수구는 가장자리 없이 모든 사이트를 떠납니다.",
852
+ "drainLastDesc": "“{{name}}”이 유일한 가장자리입니다. 그것을 비우면 모든 사이트에 우위가 없습니다.",
853
+ "clearDrainTitle": "이 에지에서 새 트래픽을 다시 수락합니다.",
854
+ "clearDrainDesc": "'{{name}}'의 배수를 삭제하시겠습니까?",
855
+ "deleteNodeTitle": "이 CDN 에지 삭제",
856
+ "deleteLastNodeTitle": "마지막 가장자리 삭제 - 모든 사이트에 가장자리가 없습니다.",
857
+ "purge": "숙청",
858
+ "previewTitle": "nginx 구성 미리보기(쓰기 없음)",
859
+ "writeConfTitle": "Edge nginx 구성 파일 쓰기",
860
+ "applyEdgesTitle": "이 사이트를 엣지에 적용(nginx 작성)",
861
+ "purgeTitle": "가장자리의 캐시 제거",
862
+ "dnsSyncTitle": "CDN DNS 레코드 쓰기",
863
+ "probeDnsTitle": "프로브 에지 및 DNS(읽기 전용)",
864
+ "distSslTitle": "TLS 자료를 가장자리에 복사",
865
+ "leIssueTitle": "Let’s Encrypt 인증서 발급 및 배포",
866
+ "deleteSiteTitle": "이 CDN 사이트 삭제",
867
+ "siteOpConfirmGeneric": "'{{name}}'에서 이 작업을 실행하시겠습니까?",
868
+ "siteOpConfirmDesc": "사이트 “{{name}}” · {{action}}. 이는 nginx, DNS 또는 인증서를 변경할 수 있습니다.",
869
+ "siteOpConfirm": {
870
+ "apply": "이 사이트를 가장자리에 적용하시겠습니까?",
871
+ "render": "이 사이트에 대한 nginx 구성을 작성하시겠습니까?",
872
+ "purge": "이 사이트의 캐시를 삭제하시겠습니까?",
873
+ "dns-sync": "이 사이트의 DNS를 동기화하시겠습니까?",
874
+ "dist": "TLS를 에지에 배포하시겠습니까?",
875
+ "issue": "Issue 암호화해서 배포하자?"
876
+ },
877
+ "pillNodesSites": "{{n}} 노드 · {{s}} 사이트",
878
+ "statHit": "적중률",
879
+ "hitUnknown": "알 수 없음",
880
+ "lastHealthHint": "마지막 조사 {{at}} · {{ok}}",
881
+ "lastHealthNever": "아직 프로브되지 않음 - 프로브 실행",
882
+ "lastHealthFail": "프로브 실패",
883
+ "healthLoopNeedSites": "먼저 사이트를 추가하세요.",
884
+ "nodeStatus": {
885
+ "online": "온라인",
886
+ "offline": "오프라인",
887
+ "draining": "배수",
888
+ "unknown": "알려지지 않은"
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": "알 수 없는 명령: {{command}}\n`{{cli}} 도움말`을 실행하세요.",
@@ -1575,7 +1804,7 @@
1575
1804
  },
1576
1805
  "status": {
1577
1806
  "bans": {
1578
- "a8d96b": "사용법: {{CLI_NAME}} 방어 상태|bans|suspects|ban|unban|whitelist|stack-apply|fail2ban|firewall|timeline|presets [--json]\n` +\n ` 금지 [--q 텍스트] [--source 실패2ban|패널|ufw|자동]\n` +\n ` 용의자 [--q 텍스트]\n` +\n ` stack-apply [--execute] # UFW + Fail2ban + 현재 프리셋\n` +\n ` 실패2반 | 방화벽 # 심층 조사(정직)\n` +\n ` 타임라인 [--limit N] [--q 텍스트]\n` +\n ` 사전 설정 # 목록 + activePreset"
1807
+ "a8d96b": "사용법: {{CLI_NAME}} 방어 상태|bans|suspects|ban|unban|whitelist|stack-apply|fail2ban|firewall|timeline|presets [--json]\n 금지 [--q 텍스트] [--source 실패2ban|패널|ufw|자동]\n 용의자 [--q 텍스트]\n stack-apply [--execute] # UFW + fail2ban + 현재 프리셋\n 실패2반 | 방화벽 # 심층 조사(정직)\n 타임라인 [--limit N] [--q 텍스트]\n 사전 설정 # 목록 + activePreset"
1579
1808
  }
1580
1809
  }
1581
1810
  }
@@ -1741,7 +1970,7 @@
1741
1970
  }
1742
1971
  },
1743
1972
  "x": {
1744
- "972912": "사용법:\n ysk-server 인벤토리 마이그레이션 [--data-dir PATH] --json\n ysk-server 마이그레이션 호스트 --target root@IP [--identity-file PATH|--identity-id ID|--password PW] --execute [--maintenance] [--force-wipe-target]\n ysk-server 마이그레이션 post --job ID --data-dir PATH --execute # 대상에서\n ysk-server 마이그레이션 상태 [--작업 ID]\n ysk-server 마이그레이션 이력서 --작업 ID --execute"
1973
+ "972912": "사용법:\n ysk-server 인벤토리 마이그레이션 [--data-dir PATH] --json\n ysk-server 마이그레이션 호스트 --target root@IP [--identity-file PATH|--identity-id ID|--password PW] --execute [--maintenance] [--force-wipe-target]\n ysk-server 마이그레이션 post --job ID --data-dir PATH --execute # 대상에서\n ysk-server 마이그레이션 상태 [--작업 ID]\n ysk-server 마이그레이션 이력서 --작업 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": "사용법: ysk-server 호스팅 <sub>\n 위험한 작전의 기본 테스트 실행; 적용하려면 --execute(+ YSK_EXECUTE=1)를 추가하세요.\n 엔진엑스 | nginx-sync [--실행]\n redis 제공 | postgres 제공 | mysql-provision [--실행]\n dns-zone --zone X --ip A.B.C.D [--ipv6 X:X::X] [--validate] [--reload]\n DNS 영역 | powerdns 상태 | powerdns-install [--install|--실행]\n powerdns-load --zone X --ip A.B.C.D [--load|--execute]\n 이메일 적용 --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 런타임 | 런타임 설치 --kind node|php|python|go|rust --version V [--install|--execute]\n dovecot-passdb --domain X | --모두\n webmail-apply --domain webmail.example.com [--다운로드]\n 공개 파일 --domain files.example.com [--reload]\n email-bootstrap --domain example.com --ip A.B.C.D [--install|--execute]\n email-deliverability --domain example.com # PTR/DNSBL/웜업 팩(정직)\n 방화벽 적용 [--smtp] [--실행]",
1747
1976
  "logsQuery": "사용법: {{CLI_NAME}} 로그 쿼리 --source <id> [--lines N] [--grep G] [--since 1h] [--priority err]\n 소스 예: 저널: 저널:nginx.service 파일:syslog 프로젝트:<uuid>\n {{CLI_NAME}} 로그 소스 --json\n {{CLI_NAME}} 로그 저널 [--unit nginx.service] --json"
@@ -1910,6 +2139,7 @@
1910
2139
  "noData": "데이터 없음",
1911
2140
  "input": "입력",
1912
2141
  "pleaseEnter": "{{value}} 입력",
2142
+ "required": "필수",
1913
2143
  "about": "설명",
1914
2144
  "operation": "행위",
1915
2145
  "delete": "삭제",
@@ -1996,7 +2226,14 @@
1996
2226
  "show": "보여주다",
1997
2227
  "done": "완료",
1998
2228
  "next": "다음",
1999
- "previous": "이전"
2229
+ "previous": "이전",
2230
+ "all": "전체",
2231
+ "showPassword": "보여주다",
2232
+ "hidePassword": "숨다",
2233
+ "more": "더",
2234
+ "redirectedTo": "{{to}}(으)로 이동했습니다(원래 {{from}})",
2235
+ "unavailable": "Not available right now",
2236
+ "ok": "OK"
2000
2237
  },
2001
2238
  "cron": {
2002
2239
  "presetCdTrue": "CD 앱 + true(테스트)",
@@ -2135,7 +2372,39 @@
2135
2372
  "sourceHost": "주인",
2136
2373
  "noHostJobs": "이 범위에는 crontab 작업이 없습니다.",
2137
2374
  "hostPartial": "모든 사용자 crontab을 읽을 수 없습니다(루트 필요).",
2138
- "pendingInstall": "설치 대기 중({{count}})"
2375
+ "pendingInstall": "설치 대기 중({{count}})",
2376
+ "hourRange": "시간은 0~23이어야 합니다.",
2377
+ "minuteRange": "분은 0~59여야 합니다.",
2378
+ "hoursCommon": "공통시간",
2379
+ "hoursAll": "모든 시간",
2380
+ "invalidExpr": "유효한 5개 필드 크론 표현식이 아닙니다.",
2381
+ "needCommand": "명령이 필요합니다.",
2382
+ "needUser": "프로젝트 또는 시스템 사용자를 선택합니다.",
2383
+ "hostCounts": "호스트 라인",
2384
+ "hostCountsVal": "{{ysk}} · 기타 {{other}} · 합계 {{total}}",
2385
+ "hostYskYes": "패널라인 존재",
2386
+ "hostYskNo": "패널라인이 없다",
2387
+ "emptyHostCrontab": "{{user}}에는 crontab이 없습니다.",
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": "대시보드",
@@ -2181,7 +2450,8 @@
2181
2450
  "mode": {
2182
2451
  "degraded": "타락한",
2183
2452
  "production_capable": "생산 준비 완료",
2184
- "normal": "정상"
2453
+ "normal": "정상",
2454
+ "blocked": "blocked"
2185
2455
  },
2186
2456
  "details": "세부",
2187
2457
  "certExpiryTitle": "인증서 만료:",
@@ -2224,7 +2494,7 @@
2224
2494
  "runtime": "실행 시간",
2225
2495
  "runtimeHint": "기본 런타임 버전 및 배포 스타일 설정",
2226
2496
  "runtimeVersion": "런타임 버전",
2227
- "versionHint": "프로젝트 런타임_버전으로 저장됨",
2497
+ "versionHint": "프로젝트 실행 환경 버전 설정에 씁니다",
2228
2498
  "serverIpv4": "서버 IPv4",
2229
2499
  "serverIpv4Hint": "DNS A/메일 SPF",
2230
2500
  "serverIpv4Ph": "이 호스트의 공개 IPv4",
@@ -2246,7 +2516,27 @@
2246
2516
  "noNotifs": "알림 없음",
2247
2517
  "noNotifsDesc": "시스템 경고 및 할 일이 여기에 표시됩니다.",
2248
2518
  "applyAuditTitle": "현황 감사 적용",
2249
- "applyAuditDesc": "알았어 {{ok}} · 경고 {{warn}} · 나쁘다 {{bad}}"
2519
+ "applyAuditDesc": "알았어 {{ok}} · 경고 {{warn}} · 나쁘다 {{bad}}",
2520
+ "barTitle": "호스트 알림 {{count}}건",
2521
+ "levelCritical": "심각",
2522
+ "levelWarn": "경고",
2523
+ "levelInfo": "정보",
2524
+ "colTitle": "알림",
2525
+ "colDetail": "내용",
2526
+ "colSource": "출처",
2527
+ "notifSearch": "알림 검색",
2528
+ "notifAll": "전체",
2529
+ "notifDismiss": "숨다",
2530
+ "goFix": "고치다",
2531
+ "needDomainFirst": "먼저 도메인을 입력하세요",
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": "데이터 없음",
@@ -2471,7 +2761,54 @@
2471
2761
  "probe": "조사",
2472
2762
  "name": "이름",
2473
2763
  "type": "유형",
2474
- "status": "상태"
2764
+ "status": {
2765
+ "healthy": "건강한",
2766
+ "planned": "예정",
2767
+ "partial": "부분",
2768
+ "failed": "실패한",
2769
+ "draft": "초안",
2770
+ "degraded": "타락한",
2771
+ "applied": "적용된"
2772
+ },
2773
+ "fleetSession": "Fleet 에이전트 세션 ID",
2774
+ "fleetSessionHint": "Optional. Paste a session UUID from /agents. Then this peer uses fleet (no SSH). Leave empty for SSH scp.",
2775
+ "fleetSessionPh": "에이전트 페이지 세션 UUID",
2776
+ "engineNotInstalled": "{{engine}}은(는) 이 호스트에 설치되어 있지 않습니다. 먼저 설치하거나 실제로 실행 중인 엔진을 엽니다.",
2777
+ "fleetSessionNone": "없음 - SSH 사용",
2778
+ "fleetSessionOpenAgents": "/agents를 열어 세션을 등록하세요.",
2779
+ "createWizardTitle": "계획 마법사를 엽니다. 로컬 IP와 1개 이상의 피어가 필요합니다. 패널 아티팩트만 씁니다(시험 실행). 적용할 때까지 엔진을 다시 시작하지 않습니다.",
2780
+ "bootstrap": "부트스트랩",
2781
+ "fleetApply": "함대 적용",
2782
+ "planTitle": "클러스터 계획 재생성(호스트 변경 없음)",
2783
+ "writeFileTitle": "패널 데이터 디렉토리 아래에 관리 파일 쓰기(드라이런)",
2784
+ "probeLocalTitle": "이 호스트만 프로브",
2785
+ "probeAllTitle": "등록된 모든 회원을 조사하세요.",
2786
+ "bootstrapTitle": "로컬 드롭인 설치 및 첫 번째 노드 부트스트랩",
2787
+ "remoteInstallPlanTitle": "원격 설치 미리보기(실행 없음)",
2788
+ "downloadBundleTitle": "피어 conf 번들(.tar.gz) 다운로드",
2789
+ "pushPlanTitle": "피어로 푸시 미리보기(SCP 없음)",
2790
+ "fleetSyncPlanTitle": "플릿 동기화 미리보기(실행 없음)",
2791
+ "fleetApplyTitle": "함대 구성원에게 대기열을 적용하시겠습니까?",
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": "데이터 찾아보기",
@@ -2511,7 +2848,9 @@
2511
2848
  "reloadConfig": "구성 다시 로드",
2512
2849
  "disableBoot": "부팅 시 비활성화",
2513
2850
  "needRights": "시스템 변경 권한과 관리자가 필요합니다. 실패는 이유를 보여줍니다. 절대 가짜 성공이 아닙니다.",
2514
- "noneFetched": "- 없음 -"
2851
+ "noneFetched": "- 없음 -",
2852
+ "disableBootConfirm": "다시 활성화할 때까지 재부팅 후 엔진이 시작되지 않습니다.",
2853
+ "affectsProjects": "Sites and services that use this engine will be interrupted."
2515
2854
  },
2516
2855
  "expiresLabel": "만료",
2517
2856
  "importEntry": "입장: {{url}}",
@@ -2537,7 +2876,30 @@
2537
2876
  "unfreezeOk": "{{engine}} 수리 완료",
2538
2877
  "startAfterUnfreeze": "서비스 시작(실패 시 복구 계획 자동 실행)",
2539
2878
  "serviceDownTitle": "데이터베이스 서비스가 다운되었습니다",
2540
- "serviceDownBody": "서비스 상태가 좋지 않음"
2879
+ "serviceDownBody": "서비스 상태가 좋지 않음",
2880
+ "emptyDbHostHasRows": "호스트에는 이 제어 영역 목록에 없는 데이터베이스가 이미 있습니다.",
2881
+ "hostHasUntracked": "{{count}} 호스트 데이터베이스가 패널에 등록되지 않았습니다.",
2882
+ "hostInventoryHint": "테이블은 제어 영역 행 전용입니다. 실제 이름은 SHOW DATABASES에서 가져옵니다.",
2883
+ "adoptHostDb": "등록 {{name}}",
2884
+ "remoteTest": "테스트 연결",
2885
+ "remoteTestDone": "원격 호스트 프로브 완료",
2886
+ "remoteTestOk": "도달 가능",
2887
+ "remoteTestFail": "접근할 수 없음",
2888
+ "remoteNotChecked": "테스트되지 않음",
2889
+ "registeredVsHostHint": "패널 등록 / 호스트 실측",
2890
+ "dumpNeedRegistered": "먼저 패널에 데이터베이스를 등록하세요",
2891
+ "dumpFirstDbTitle": "첫 등록 데이터베이스 내보내기",
2892
+ "importNeedRegistered": "먼저 패널에 데이터베이스를 등록하세요",
2893
+ "importLatestNeedConfirm": "확인 필요 — 등록된 데이터베이스로 가져옵니다",
2894
+ "adoptHostDbTitle": "제어면에 이름만 등록하며 호스트 데이터는 바꾸지 않습니다.",
2895
+ "cleanupExpiredTempUsersTitle": "만료된 패널 임시 사용자를 삭제합니다",
2896
+ "remoteDeleteTitle": "이 등록만 제거",
2897
+ "remoteDeleteConfirm": "등록 {{name}}을(를) 제거할까요? 원격 서버는 변경되지 않습니다.",
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": "확인하다",
@@ -2761,7 +3123,277 @@
2761
3123
  "aboutHealthTitle": "서비스 상태",
2762
3124
  "aboutHealthBody": "도구를 사용하여 PowerDNS를 검색하고 바인딩을 복구하고 포트 53을 엽니다.",
2763
3125
  "aboutStackTitle": "소프트웨어",
2764
- "aboutStackBody": "소프트웨어에서 PowerDNS 패키지를 확인/업데이트하세요."
3126
+ "aboutStackBody": "소프트웨어에서 PowerDNS 패키지를 확인/업데이트하세요.",
3127
+ "invalidZone": "영역 이름이 잘못되었습니다. 실제 도메인(예: example.com)을 사용하세요.",
3128
+ "invalidIpv4": "IPv4가 잘못되었습니다. 각 옥텟은 0~255여야 합니다.",
3129
+ "mailZonesMissing": "이메일 도메인에는 DNS 영역이 없습니다: {{domains}}.",
3130
+ "createMailZone": "메일 영역 생성",
3131
+ "createMailZoneNow": "메일존 생성 {{domain}}",
3132
+ "healNeedInstall": "PowerDNS가 설치되지 않았습니다. 먼저 소프트웨어 탭에 설치하세요.",
3133
+ "applyNeedService": "DNS 서비스가 실행되고 있지 않습니다. 적용하기 전에 시작하거나 설치하세요.",
3134
+ "deleteZoneNeedName": "이 영역 삭제 — 확인을 위해 영역 이름을 입력합니다.",
3135
+ "toolsFirewallTitle": "방화벽(UFW)",
3136
+ "toolsFirewallHint": "53번 포트를 허용하거나 차단합니다. PowerDNS를 시작하거나 중지하지 않습니다.",
3137
+ "toolsUnitTitle": "PowerDNS 유닛",
3138
+ "toolsUnitHint": "systemd 유닛 pdns — 시작, 중지, 재시작, 다시 로드.",
3139
+ "installConfirmTitle": "PowerDNS를 설치할까요?",
3140
+ "installConfirmDesc": "pdns-server를 설치하고 관리 설정을 씁니다. root와 YSK_EXECUTE=1이 필요합니다.",
3141
+ "installConfirmConsequence": "설치 후 시작하면 PowerDNS가 53번 포트를 바인딩합니다.",
3142
+ "installPort53Busy": "53번 포트가 이미 사용 중입니다. 해당 수신을 중지하거나 복구하기 전에는 PowerDNS 바인딩이 실패할 수 있습니다.",
3143
+ "installPort53BusyConsequence": "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": "이 서버에서 Docker 엔진, 컨테이너, 이미지, Compose 프로젝트, 디스크를 설치하고 제어합니다.",
3153
+ "refresh": "새로 고침",
3154
+ "notInstalled": "Docker Engine이 설치되어 있지 않습니다. 이 페이지에서 docker.io와 docker-compose-v2를 설치하세요.",
3155
+ "protected": "보호됨",
3156
+ "pruneConfirm": "volume 또는 시스템 정리를 확인하려면 PRUNE을 입력",
3157
+ "settingsHint": "안전한 daemon.json 항목만 엽니다. 적용하면 파일을 쓰고 docker.service를 다시 시작합니다.",
3158
+ "cli": {
3159
+ "usage": "사용법: 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": "개요",
3163
+ "containers": "컨테이너",
3164
+ "images": "이미지",
3165
+ "compose": "Compose",
3166
+ "volumes": "Volume",
3167
+ "networks": "네트워크",
3168
+ "prune": "정리",
3169
+ "settings": "설정",
3170
+ "about": "설명"
3171
+ },
3172
+ "col": {
3173
+ "engine": "엔진",
3174
+ "containers": "컨테이너",
3175
+ "version": "버전",
3176
+ "dataRoot": "데이터 디렉터리",
3177
+ "disk": "디스크",
3178
+ "validators": "검증자 스택",
3179
+ "name": "이름",
3180
+ "image": "이미지",
3181
+ "status": "상태",
3182
+ "ports": "포트",
3183
+ "managed": "패널 관리",
3184
+ "size": "크기",
3185
+ "driver": "드라이버",
3186
+ "type": "유형",
3187
+ "reclaimable": "회수 가능"
3188
+ },
3189
+ "state": {
3190
+ "up": "실행 중",
3191
+ "down": "중지됨",
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": "시작",
3205
+ "stop": "중지",
3206
+ "restart": "다시 시작",
3207
+ "remove": "삭제",
3208
+ "logs": "로그",
3209
+ "inspect": "검사",
3210
+ "exec": "실행(version)",
3211
+ "run": "이미지 실행",
3212
+ "pull": "받기",
3213
+ "up": "시작",
3214
+ "down": "중지",
3215
+ "createVolume": "volume 만들기",
3216
+ "createNetwork": "네트워크 만들기",
3217
+ "pruneContainers": "컨테이너 정리",
3218
+ "pruneImages": "이미지 정리",
3219
+ "pruneVolumes": "volume 정리",
3220
+ "pruneSystem": "시스템 정리",
3221
+ "startEngine": "엔진 시작",
3222
+ "stopEngine": "엔진 중지",
3223
+ "restartEngine": "엔진 다시 시작",
3224
+ "applyDaemon": "엔진 설정 적용"
3225
+ },
3226
+ "empty": {
3227
+ "containers": "컨테이너 없음",
3228
+ "images": "이미지 없음",
3229
+ "compose": "Compose 프로젝트 없음",
3230
+ "volumes": "volume 없음",
3231
+ "networks": "네트워크 없음",
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": "아직 로그가 없습니다",
3237
+ "follow": "Follow"
3238
+ },
3239
+ "settings": {
3240
+ "logMaxSize": "컨테이너 로그 한도",
3241
+ "liveRestore": "실시간 복원(데몬 재시작 시 컨테이너 유지)",
3242
+ "mirrors": "Registry 미러(줄마다 URL 하나)",
3243
+ "insecure": "암호화되지 않은 Registry(줄마다 호스트 하나)"
3244
+ },
3245
+ "about": {
3246
+ "body": "Docker는 Nginx와 같은 등급의 YSK Server 호스트 서비스입니다. 패널에서 Ubuntu docker.io + docker-compose-v2로 설치합니다. 검증자 노드는 yskval-* Compose 프로젝트로 실행됩니다.",
3247
+ "honesty": "호스트 변경에는 root와 YSK_EXECUTE=1이 필요합니다. 기본은 시험 실행입니다. 이 페이지는 Kubernetes가 아닙니다.",
3248
+ "validators": "검증자 노드 열기"
3249
+ },
3250
+ "alerts": {
3251
+ "daemonTitle": "Docker 데몬이 중지됨",
3252
+ "daemonBody": "Docker는 설치되어 있지만 docker.service가 활성 상태가 아닙니다. 검증자 스택을 시작할 수 없습니다."
3253
+ },
3254
+ "errors": {
3255
+ "notInstalled": "Docker가 설치되어 있지 않습니다",
3256
+ "daemonDown": "Docker 데몬이 활성 상태가 아닙니다",
3257
+ "needCompose": "docker compose(v2 플러그인)가 필요합니다",
3258
+ "badImage": "이미지 참조가 올바르지 않습니다",
3259
+ "badName": "이름이 올바르지 않습니다",
3260
+ "badPort": "포트 공개가 올바르지 않습니다",
3261
+ "badEnv": "환경 변수가 올바르지 않습니다",
3262
+ "badVolume": "볼륨 마운트가 올바르지 않습니다",
3263
+ "badNetwork": "네트워크가 올바르지 않습니다",
3264
+ "protectedNetwork": "내장 Docker 네트워크는 삭제할 수 없습니다",
3265
+ "badRestart": "재시작 정책이 올바르지 않습니다",
3266
+ "badPrune": "정리 범위가 올바르지 않습니다",
3267
+ "needPruneConfirm": "volume 또는 시스템 정리에는 confirm=PRUNE이 필요합니다",
3268
+ "badDaemon": "엔진 설정이 올바르지 않습니다",
3269
+ "composeMissing": "이 프로젝트의 Compose 파일을 찾을 수 없습니다",
3270
+ "logsFailed": "컨테이너 로그를 읽을 수 없습니다",
3271
+ "mutateFailed": "Docker 명령이 실패했습니다",
3272
+ "engineFailed": "docker.service를 제어할 수 없습니다",
3273
+ "badExec": "exec는 허용 목록의 바이너리와 프리셋만 가능합니다(셸 불가, TTY 불가)",
3274
+ "uninstallBusy": "Docker를 제거하기 전에 패널이 관리하는 컨테이너(검증자 스택 포함)를 중지하십시오"
3275
+ },
3276
+ "notes": {
3277
+ "dryMutate": "시험 실행입니다. 호스트를 바꾸려면 --execute와 YSK_EXECUTE=1을 사용하세요.",
3278
+ "dryPrune": "정리 미리보기(적용되지 않음).",
3279
+ "dryEngine": "엔진 제어는 시험 실행입니다.",
3280
+ "dryDaemon": "/etc/docker/daemon.json을 쓰고 docker.service를 다시 시작합니다.",
3281
+ "daemonWrote": "daemon.json을 썼습니다",
3282
+ "start": "컨테이너를 시작했습니다",
3283
+ "stop": "컨테이너를 중지했습니다",
3284
+ "restart": "컨테이너를 다시 시작했습니다",
3285
+ "remove": "컨테이너를 삭제했습니다",
3286
+ "ran": "이미지로 컨테이너를 시작했습니다",
3287
+ "pulled": "이미지를 받았습니다",
3288
+ "exec": "허용 목록 exec를 실행했습니다",
3289
+ "imageRemoved": "이미지를 삭제했습니다",
3290
+ "volumeCreated": "volume을 만들었습니다",
3291
+ "volumeRemoved": "volume을 삭제했습니다",
3292
+ "networkCreated": "네트워크를 만들었습니다",
3293
+ "networkRemoved": "네트워크를 삭제했습니다",
3294
+ "pruned": "정리가 끝났습니다",
3295
+ "compose": {
3296
+ "up": "Compose 프로젝트를 시작했습니다",
3297
+ "down": "Compose 프로젝트를 중지했습니다",
3298
+ "restart": "Compose 프로젝트를 다시 시작했습니다",
3299
+ "rm": "Compose project removed"
3300
+ },
3301
+ "engine": {
3302
+ "start": "docker.service를 시작했습니다",
3303
+ "stop": "docker.service를 중지했습니다",
3304
+ "restart": "docker.service를 다시 시작했습니다"
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": "이 페이지에서 할 수 있는 일",
3325
+ "whatYouGetLead": "먼저 Docker Engine을 설치합니다. 이후 단일 컨테이너 실행, 이미지 받기, 이 호스트의 검증자 Compose 스택 확인이 가능합니다.",
3326
+ "capEngine": "엔진",
3327
+ "capEngineDesc": "docker.io와 docker-compose-v2를 한 번에 설치합니다. docker.service 시작과 중지도 여기에서 합니다.",
3328
+ "capWork": "컨테이너와 이미지",
3329
+ "capWorkDesc": "자주 쓰는 이미지를 고르고 받은 뒤 실행하고, 로그를 보거나 검사합니다.",
3330
+ "capStacks": "검증자 스택",
3331
+ "capStacksDesc": "다중 서비스 스택은 검증자 Compose 프로젝트(yskval-*)입니다. 이 페이지는 YAML 업로드를 받지 않습니다.",
3332
+ "cardEngine": "엔진",
3333
+ "cardDisk": "디스크",
3334
+ "cardWork": "이 호스트",
3335
+ "compose": "Compose",
3336
+ "cgroup": "cgroup",
3337
+ "used": "사용량",
3338
+ "free": "여유",
3339
+ "running": "실행 중",
3340
+ "images": "이미지",
3341
+ "volumes": "Volume",
3342
+ "networks": "네트워크",
3343
+ "goImages": "이미지",
3344
+ "goValidators": "검증자 노드",
3345
+ "imagePickHint": "자주 쓰는 이미지를 고르세요. 다른 참조가 필요할 때만 기타를 사용합니다.",
3346
+ "imageCustom": "기타",
3347
+ "driver": "드라이버",
3348
+ "driverLocalOnly": "이 패널은 local volume만 만듭니다.",
3349
+ "netDefaultDriver": "새 네트워크는 Docker 기본 bridge 드라이버를 사용합니다.",
3350
+ "pruneWhat": "삭제할 항목",
3351
+ "pruneAck": "사용하지 않는 데이터가 삭제되며 복구할 수 없음을 이해합니다",
3352
+ "pruneAckDesc": "Volume 또는 시스템 정리는 되돌릴 수 없습니다. 선택한 범위의 중지된 컨테이너와 미사용 이미지를 삭제합니다.",
3353
+ "pruneNow": "지금 정리",
3354
+ "useMirrors": "Registry 미러 사용",
3355
+ "useInsecure": "암호화되지 않은 Registry 허용",
3356
+ "publishPorts": "호스트에 포트 공개",
3357
+ "attachVolume": "Volume 연결",
3358
+ "setEnv": "환경 변수 설정",
3359
+ "defaultNet": "기본",
3360
+ "mountPath": "마운트 경로",
3361
+ "restartNo": "안 함",
3362
+ "restartUnless": "중지하기 전까지",
3363
+ "restartAlways": "항상",
3364
+ "restartOnFail": "실패 시",
3365
+ "needAck": "정리 전에 확인해 주세요",
3366
+ "scopeContainers": "중지된 컨테이너",
3367
+ "scopeImages": "미사용 이미지",
3368
+ "scopeVolumes": "미사용 Volume",
3369
+ "scopeBuilder": "빌드 캐시",
3370
+ "scopeSystem": "미사용 전부",
3371
+ "noVolumesYet": "Volume이 없습니다. 먼저 Volume 탭에서 만드세요.",
3372
+ "customPort": "다른 호스트 포트",
3373
+ "customPortHost": "호스트 포트",
3374
+ "customPortContainer": "컨테이너 포트",
3375
+ "pctUsed": "{{n}}% 사용",
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": "이메일",
@@ -2812,7 +3444,7 @@
2812
3444
  "needExecute": "YSK_EXECUTE 필요",
2813
3445
  "viewQueue": "대기열 보기",
2814
3446
  "flushQueue": "대기열 플러시",
2815
- "queueHint": "로컬 Postfix 대기열을 읽으려면 대기열 보기를 클릭하세요.",
3447
+ "queueHint": "로컬 Postfix 큐. 조회는 읽기 탐침이며 비우기는 YSK_EXECUTE가 필요합니다.",
2816
3448
  "deleteThisId": "이 ID 삭제",
2817
3449
  "queueEmpty": "지연된 메일 없음",
2818
3450
  "queueEmptyHint": "지연된 메시지 없음",
@@ -3081,7 +3713,8 @@
3081
3713
  "dmarcMissing": "DMARC 누락 - 적극 권장",
3082
3714
  "ptrBad": "PTR 역방향 DNS가 없거나 잘못됨 - VPS 공급자에게 요청",
3083
3715
  "port25Blocked": "아웃바운드 포트 25가 차단된 것으로 나타납니다. 차단 해제를 요청하거나 SMTP 릴레이를 사용하세요.",
3084
- "port25Unknown": "포트 25 상태를 알 수 없음 - 연결 확인 실행"
3716
+ "port25Unknown": "포트 25 상태를 알 수 없음 - 연결 확인 실행",
3717
+ "dmarcUnpublished": "DMARC가 패널에서 생성되었지만 아직 공개 DNS에 게시되지 않았습니다."
3085
3718
  },
3086
3719
  "stack": {
3087
3720
  "tlsNote": "SMTP/IMAP용 Let's Encrypt를 통한 TLS 인증서",
@@ -3122,7 +3755,8 @@
3122
3755
  "postfixReloaded": "Postfix가 다시 로드되었습니다.",
3123
3756
  "postfixReloadFailed": "접미사 다시 로드 실패: {{detail}}",
3124
3757
  "dovecotApplied": "Dovecot TLS 코드 조각을 작성하고 다시 로드를 시도했습니다.",
3125
- "dovecotSkipped": "건너뛴 Dovecot(설치되지 않았거나 doveconf를 사용할 수 없음)"
3758
+ "dovecotSkipped": "건너뛴 Dovecot(설치되지 않았거나 doveconf를 사용할 수 없음)",
3759
+ "dovecotSslOmitted": "메일 인증서가 누락되었습니다. ssl=no를 작성하여 Dovecot이 LE 파일 없이 시작할 수 있도록 했습니다."
3126
3760
  },
3127
3761
  "policyApplySystemHint": "Postfix/Rspamd 맵을 작성하고 다시 로드하려면 \"시스템에 적용\"을 선택하세요.",
3128
3762
  "rateLimitAppliedNote": "시간당 아웃바운드 비율 및 스팸 방지 플래그가 적용됩니다(시스템 적용이 켜져 있는 경우).",
@@ -3161,12 +3795,12 @@
3161
3795
  "deliverabilityDesc": "PTR/DNS/포트 25 확인",
3162
3796
  "dnsTodosDesc": "복사한 후 DNS 호스트에 추가하세요.",
3163
3797
  "deliverabilityHonesty": "PTR을 설정하거나 포트 25를 잠금 해제할 수 없습니다.",
3164
- "warmupSuggest": "暖身建議",
3165
- "writeSsoSkeleton": "寫入 Roundcube SSO 지원",
3166
- "rateLimitPerHour": "每小시계息上限",
3167
- "rateLimitGlobalHint": "전체域取各域name最小值",
3168
- "savePolicyWritten": "只寫入控조제면",
3169
- "dnsblMultiIp": "많은 IP RBL",
3798
+ "warmupSuggest": "워밍업 제안",
3799
+ "writeSsoSkeleton": "Roundcube SSO 골격 기록",
3800
+ "rateLimitPerHour": "시간당 메시지 상한",
3801
+ "rateLimitGlobalHint": "전역은 도메인별 최솟값 사용",
3802
+ "savePolicyWritten": "제어면에만 기록",
3803
+ "dnsblMultiIp": "다중 IP RBL",
3170
3804
  "webmailTool": "웹메일 소프트웨어",
3171
3805
  "webmailToolRoundcube": "원형큐브(기본값)",
3172
3806
  "webmailToolSnappy": "SnappyMail(경량)",
@@ -3238,7 +3872,44 @@
3238
3872
  "mailboxEmptyTitle": "아직 편지함 없음",
3239
3873
  "passwordMismatch": "비밀번호가 일치하지 않습니다.",
3240
3874
  "passwordTooShort": "비밀번호는 8자 이상이어야 합니다.",
3241
- "mailboxUpdateNeedField": "새 비밀번호를 설정하거나 상태를 변경하세요."
3875
+ "mailboxUpdateNeedField": "새 비밀번호를 설정하거나 상태를 변경하세요.",
3876
+ "catchallHint": "정의되지 않은 로컬 부분은 대상 사서함으로 갑니다. 적용 전까지 초안입니다.",
3877
+ "queueSearchPh": "ID, 보낸 사람, 받는 사람 검색…",
3878
+ "queueId": "큐 ID",
3879
+ "queueSender": "보낸 사람",
3880
+ "queueRecipients": "받는 사람",
3881
+ "queueSize": "크기",
3882
+ "queueReason": "이유",
3883
+ "queueActive": "전송 중",
3884
+ "queueHeld": "보류",
3885
+ "queueDeferred": "지연",
3886
+ "deleteQueueTitle": "이 큐 메일을 삭제할까요?",
3887
+ "deleteQueueDesc": "로컬 MTA 큐에서 {{id}}를 제거합니다. YSK_EXECUTE가 필요합니다.",
3888
+ "openQueuePage": "메일 큐 열기",
3889
+ "healthUnchecked": "아직 확인되지 않음",
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": "이 호스트에 등록된 메일 도메인",
3892
+ "healthChecklist": "점검표 {{score}}/100",
3893
+ "healthChecklistHint": "점검표 점수 — DNS/PTR/포트 25 실측 전",
3894
+ "healthLiveHint": "실측 점수",
3895
+ "installWebmailTitle": "공유 웹메일 프로젝트 생성(첫 설치)",
3896
+ "reinstallWebmailTitle": "기존 웹메일 프로젝트 재구축/업그레이드",
3897
+ "reinstallNeedInstall": "먼저 웹메일을 설치하세요",
3898
+ "dovecotFailedStatus": "비둘기장은 {{status}}입니다. 장치 요약을 보려면 소프트웨어 탭을 엽니다.",
3899
+ "mailCertMissing": "{{hosts}}에 대한 인증서가 없습니다. SSL 페이지에서 발급하세요.",
3900
+ "mailCertPresent": "메일 인증서가 이미 발급되었습니다. 이는 인증서 누락 문제가 아닙니다.",
3901
+ "webmailNeedCert": "{{host}}에 대한 인증서가 없습니다. HTTPS를 강제하기 전에 SSL에서 발급하세요.",
3902
+ "flushQueueEmpty": "대기열이 비어 있습니다.",
3903
+ "flushQueueNeedExecute": "큐를 플러시하려면 YSK_EXECUTE(호스트 실행 권한)가 필요합니다.",
3904
+ "healthUncheckedHint": "DNS / PTR / 25번 포트는 아직 검사하지 않았습니다.",
3905
+ "deliverabilityScore": "전달성 팩",
3906
+ "opendkimNoReload": "OpenDKIM은 다시 로드를 지원하지 않습니다. 키나 테이블 변경 후 재시작하십시오.",
3907
+ "opendkimNoReloadTitle": "이 스택에서는 systemctl reload opendkim을 지원하지 않습니다",
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": "승인되지 않은",
@@ -3279,7 +3950,9 @@
3279
3950
  "sessionExpired": "세션이 만료되었습니다. 다시 로그인",
3280
3951
  "sessionIdle": "유휴 시간 초과; 다시 로그인",
3281
3952
  "totpNotEnabled": "2FA가 활성화되지 않았습니다",
3282
- "totpSecretNoDataDir": "TOTP 비밀번호가 암호화되었지만 dataDir이 설정되지 않았습니다."
3953
+ "totpSecretNoDataDir": "TOTP 비밀번호가 암호화되었지만 dataDir이 설정되지 않았습니다.",
3954
+ "mustChangePassword": "계속하려면 새 비밀번호를 설정해야 합니다",
3955
+ "policyNeedsOwn2fa": "이 계정에 대해 2FA를 활성화하고 다른 사람에게 2FA를 요구하기 전에 TOTP 코드로 확인하세요."
3283
3956
  },
3284
3957
  "http": {
3285
3958
  "notFoundRoute": "찾을 수 없음: {{method}} {{path}}",
@@ -3289,7 +3962,8 @@
3289
3962
  "unprocessable": "서버에서 요청을 거부했습니다.",
3290
3963
  "requestFailed": "요청 실패({{status}})",
3291
3964
  "jsonInvalid": "잘못된 JSON",
3292
- "internal": "내부 오류"
3965
+ "internal": "내부 오류",
3966
+ "payloadTooLarge": "요청 본문이 너무 큽니다"
3293
3967
  },
3294
3968
  "YSK_HOST_BROWSE_SSRF": "보안 정책에 의해 호스트 탐색이 차단되었습니다.",
3295
3969
  "YSK_HOST_BROWSE_SESSION": "호스트 찾아보기 세션을 찾을 수 없거나 만료되었습니다.",
@@ -3302,9 +3976,9 @@
3302
3976
  "statTotal": "총 금지",
3303
3977
  "statBanList": "금지 목록",
3304
3978
  "statBoot": "부팅 시",
3305
- "startedOk": "Fail2ban이 시작되었습니다",
3979
+ "startedOk": "fail2ban이 시작되었습니다",
3306
3980
  "startService": "서비스 시작",
3307
- "notInstalled": "Fail2ban이 설치되어 있지 않습니다",
3981
+ "notInstalled": "fail2ban이 설치되어 있지 않습니다",
3308
3982
  "toolHintPrefix": "기본 도구:",
3309
3983
  "toolHintBody": "failure2ban = 로그를 스캔한 후,",
3310
3984
  "toolHintTemp": "일시적인",
@@ -3323,7 +3997,7 @@
3323
3997
  "banipOk": "반입 완료",
3324
3998
  "manualBanHint": "임시 차단;",
3325
3999
  "currentBans": "현재 금지됨",
3326
- "bannedTableTitle": "금지된 IP(실시간 Fail2ban-client)",
4000
+ "bannedTableTitle": "금지된 IP(실시간 fail2ban-client)",
3327
4001
  "bannedTableDesc": "클라이언트 액세스가 필요합니다. 금지 해제에는 YSK_EXECUTE가 필요합니다.",
3328
4002
  "unbanOk": "금지 해제됨",
3329
4003
  "unban": "금지 해제",
@@ -3331,9 +4005,9 @@
3331
4005
  "whitelistAdded": "허용 목록에 추가됨",
3332
4006
  "addWhitelistShort": "+화이트리스트",
3333
4007
  "emptyBansTitle": "금지된 IP 없음",
3334
- "emptyBansDesc": "또는 Fail2ban-client를 읽을 권한이 없습니다.",
4008
+ "emptyBansDesc": "또는 fail2ban-client를 읽을 권한이 없습니다.",
3335
4009
  "ignoreipTitle": "IP 허용 목록 무시",
3336
- "ignoreipDesc": "IP는 절대 금지되지 않습니다(패널 파일 + 선택적 라이브 Fail2ban-client)",
4010
+ "ignoreipDesc": "IP는 절대 금지되지 않습니다(패널 파일 + 선택적 라이브 fail2ban-client)",
3337
4011
  "addIp": "IP 추가",
3338
4012
  "addWhitelist": "허용 목록에 추가",
3339
4013
  "applyPolicyIgnoreip": "정책 적용(ignoreip 포함)",
@@ -3364,19 +4038,44 @@
3364
4038
  "enableJailsHint": "감옥 활성화(확인 후 적용):",
3365
4039
  "writtenOnlyMsg": "패널 파일 작성(호스트에는 적용되지 않음)",
3366
4040
  "writeOnly": "패널 파일만 쓰기",
3367
- "appliedOk": "Fail2ban 적용됨",
4041
+ "appliedOk": "fail2ban 적용됨",
3368
4042
  "applyToSystem": "시스템에 적용",
3369
4043
  "systemdTitle": "체계화된 제어",
3370
4044
  "enableAndStart": "활성화 및 시작",
3371
4045
  "serviceHint": "공격 대응용",
3372
4046
  "serviceHintSuffix": "(이 페이지의 감옥 + Nginx 속도 제한을 호출합니다.",
3373
4047
  "actionOk": {
3374
- "enable": "Fail2ban 활성화 및 시작됨",
3375
- "start": "Fail2ban이 시작되었습니다",
3376
- "reload": "Fail2ban이 다시 로드되었습니다.",
3377
- "restart": "Fail2ban이 다시 시작되었습니다.",
3378
- "stop": "Fail2ban이 중지되었습니다."
3379
- }
4048
+ "enable": "fail2ban 활성화 및 시작됨",
4049
+ "start": "fail2ban이 시작되었습니다",
4050
+ "reload": "fail2ban이 다시 로드되었습니다.",
4051
+ "restart": "fail2ban이 다시 시작되었습니다.",
4052
+ "stop": "fail2ban이 중지되었습니다."
4053
+ },
4054
+ "statWhitelist": "화이트리스트",
4055
+ "invalidIp": "유효한 IPv4, IPv6 또는 CIDR을 입력하세요.",
4056
+ "whitelistPendingApply": "패널 목록에 저장됩니다. Jail.local을 작성하려면 정책 적용을 누르세요.",
4057
+ "ignoreipFile": "dataDir/fail2ban/ignoreip.txt",
4058
+ "jailsTabHint": "활성 감옥 상태. 정책 탭에서 감옥을 켜거나 끕니다.",
4059
+ "colJail": "교도소",
4060
+ "colEnabled": "켜짐",
4061
+ "serviceStateLine": "장치 {{unit}} · {{state}} · 부팅 {{boot}}",
4062
+ "jail": {
4063
+ "sshd": "SSH 무차별 대입",
4064
+ "nginxHttpAuth": "Nginx HTTP 인증",
4065
+ "nginxBotsearch": "Nginx 스캐너/봇 프로브",
4066
+ "nginxBadbots": "Nginx는 알려진 나쁜 봇",
4067
+ "nginxLimitReq": "Nginx 속도 제한 감옥",
4068
+ "postfix": "접미사 메일 무차별 대입",
4069
+ "dovecot": "Dovecot 메일 로그인",
4070
+ "recidive": "반복 위반자"
4071
+ },
4072
+ "cannotBanSelf": "이것은 호스트 또는 로그인 IP입니다. 금지하는 대신 Ignoreip에 추가하세요.",
4073
+ "suggestIgnoreHint": "제안된 관리자 IP(정책을 적용할 때까지만 패널 파일):",
4074
+ "suggestIgnoreAdd": "{{ip}} 추가",
4075
+ "whitelistEmptyWarn": "허용 목록이 비어 있습니다. jail이 당신을 차단할 수 있습니다. ignoreip 적용 전에 로그인 IP를 넣으세요.",
4076
+ "suggestIgnoreLogin": "내 로그인 IP {{ip}}",
4077
+ "applyIgnoreEmptyWarn": "허용 목록이 빈 채로 적용하면 ignoreip가 비워집니다",
4078
+ "applyIgnoreNeedConfirm": "jail ignoreip를 다시 쓰고 fail2ban을 다시 불러옵니다"
3380
4079
  },
3381
4080
  "featurePage": {
3382
4081
  "back": "뒤로"
@@ -3674,15 +4373,15 @@
3674
4373
  "shareTorrentFile": ".torrent 다운로드",
3675
4374
  "shareSeedStatus": "시딩 상태",
3676
4375
  "shareBtStats": "비트토렌트 상태",
3677
- "btSeeds": "Seeds",
3678
- "btLeechers": "Leechers",
3679
- "btPeers": "Peers",
4376
+ "btSeeds": "씨앗",
4377
+ "btLeechers": "거머리",
4378
+ "btPeers": "동료",
3680
4379
  "btUploadSpeed": "업로드 속도",
3681
4380
  "btDownloadSpeed": "다운로드 속도",
3682
- "btUploaded": "Uploaded",
3683
- "btDownloaded": "Downloaded",
3684
- "btRatio": "Ratio",
3685
- "btUpdatedAt": "Updated",
4381
+ "btUploaded": "업로드됨",
4382
+ "btDownloaded": "다운로드됨",
4383
+ "btRatio": "비율",
4384
+ "btUpdatedAt": "업데이트됨",
3686
4385
  "btServerStats": "서버 시더",
3687
4386
  "btClientStats": "귀하의 고객",
3688
4387
  "btSeeding": "시딩 중",
@@ -3691,7 +4390,7 @@
3691
4390
  "btError": "시드 오류",
3692
4391
  "publicShareMethod": "어떻게 다운로드하시겠습니까?",
3693
4392
  "publicShareDirect": "직접 다운로드",
3694
- "publicShareBt": "BitTorrent",
4393
+ "publicShareBt": "비트토렌트",
3695
4394
  "openBtTracker": "BT 트래커 열기",
3696
4395
  "publicShareBtInBrowser": "브라우저에서 WebTorrent 다운로드",
3697
4396
  "publicShareBtProgress": "다운로드 {{pct}}% · peers {{peers}} · ↓ {{down}} · ↑ {{up}}",
@@ -3699,7 +4398,50 @@
3699
4398
  "publicShareBtFailed": "WebTorrent 실패: {{detail}}",
3700
4399
  "publicShareBtNeedMagnet": "이 공유에 대한 마그넷 URI가 없습니다.",
3701
4400
  "publicShareBtUnsupported": "이 브라우저는 WebTorrent를 실행할 수 없습니다. 대신 자석이나 .torrent를 사용하세요.",
3702
- "btNone": "—"
4401
+ "btNone": "—",
4402
+ "uploadStatusSkipped": "건너뜀",
4403
+ "uploadStatusCancelled": "취소됨",
4404
+ "conflict": {
4405
+ "titleFile": "“{{name}}” 항목이 이미 있습니다",
4406
+ "titleFolder": "“{{name}}” 폴더가 이미 있습니다",
4407
+ "descFile": "처리 방법을 선택하세요. 바꾸기를 고르기 전에는 덮어쓰지 않습니다.",
4408
+ "descFolder": "처리 방법을 선택하세요. 병합은 기존 폴더를 유지하고 내용을 이어서 처리합니다.",
4409
+ "incoming": "가져올 항목",
4410
+ "existing": "이미 있음",
4411
+ "kindFile": "파일",
4412
+ "kindFolder": "폴더",
4413
+ "skip": "건너뛰기",
4414
+ "skipHint": "이 항목을 추가하지 않습니다",
4415
+ "keepBoth": "둘 다 유지",
4416
+ "keepBothHint": "가져올 항목을 {{name}}(으)로 저장",
4417
+ "replace": "바꾸기",
4418
+ "replaceHint": "기존 파일을 덮어씁니다. 가능하면 버전 스냅샷을 남깁니다.",
4419
+ "replaceFolderHint": "이 폴더 안의 같은 이름 파일을 덮어씁니다. 다른 파일은 그대로입니다.",
4420
+ "merge": "병합",
4421
+ "mergeHint": "기존 폴더를 유지하고 새 파일을 그 안에 추가합니다",
4422
+ "applyAll": "남은 이름 충돌 모두에 적용",
4423
+ "applyAllHint": "이번 끌어놓기 또는 복사/이동의 나머지에 같은 동작을 사용합니다",
4424
+ "cancelRest": "나머지 취소",
4425
+ "progress": "{{current}} / {{total}}",
4426
+ "typeMismatch": "“{{name}}” {{destKind}}이(가) 이미 있습니다. 가져올 항목은 {{incomingKind}}입니다.",
4427
+ "skipped": "건너뜀",
4428
+ "cancelled": "취소됨"
4429
+ },
4430
+ "emptyTrashTitle": "휴지통을 비우시겠습니까?",
4431
+ "emptyTrashDesc": "휴지통에 있는 모든 파일은 영구적으로 삭제됩니다. 이 작업은 취소할 수 없습니다.",
4432
+ "purgeForeverDesc": "이 파일은 영구적으로 삭제됩니다. 이 작업은 취소할 수 없습니다.",
4433
+ "webdavReissueUnchanged": "재발행 후에도 토큰 ID가 변경되지 않았습니다. 쓰기가 지속되지 않았을 수 있습니다. 다시 시도해 보세요.",
4434
+ "webdavDisableFailed": "WebDAV는 비활성화 후에도 여전히 활성화되어 있습니다. 쓰기가 지속되지 않았을 수 있습니다. 다시 시도해 보세요.",
4435
+ "dirNamedLikeFile": "(폴더 잔여물; 이름이 파일처럼 보임)",
4436
+ "webdavAfterEnable": "WebDAV를 켜고 토큰을 발급한 뒤에 사용할 수 있습니다.",
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가 설치되지 않았습니다",
3733
4475
  "toolHintPrefix": "기본 도구:",
3734
4476
  "toolHintBody": "UFW = 포트/영구 규칙 · 공격 대응 및 자동 금지 사용",
3735
- "toolHintFail2ban": "failure2ban = 임시 로그 기반 금지",
4477
+ "toolHintfail2ban": "failure2ban = 임시 로그 기반 금지",
3736
4478
  "executeOffHint": "시스템 변경 꺼짐 — 상태를 읽을 수 있습니다.",
3737
4479
  "tabs": {
3738
4480
  "rules": "규칙",
@@ -3740,7 +4482,7 @@
3740
4482
  "deny": "IP 영구 거부",
3741
4483
  "profiles": "프로필",
3742
4484
  "about": "설명",
3743
- "services": "Services"
4485
+ "services": "서비스"
3744
4486
  },
3745
4487
  "currentRules": "현재 규칙",
3746
4488
  "rulesSourceHint": "UFW 번호가 매겨진 규칙(ufw 상태 번호가 매겨짐)",
@@ -3770,7 +4512,7 @@
3770
4512
  "allowThisPort": "이 포트를 허용하세요",
3771
4513
  "allowPortHint": "웹 호스트의 경우 22/80/443을 유지합니다.",
3772
4514
  "denyTitle": "IP 영구 거부",
3773
- "denySub": "UFW DENY · 일시적인 Fail2ban 금지와는 다름",
4515
+ "denySub": "UFW DENY · 일시적인 fail2ban 금지와는 다름",
3774
4516
  "denyPlaceholder": "거부할 IPv4 또는 IPv6",
3775
4517
  "deniedOk": "영구적으로 거부됨",
3776
4518
  "removedDeny": "거부가 삭제되었습니다.",
@@ -3796,12 +4538,21 @@
3796
4538
  "servicesEmptyDesc": "이 목록을 채우려면 관리형 서비스(웹, FTPS, VPN, DB…)를 시작하세요.",
3797
4539
  "servicesManualHint": "수동 포트 칩은 포트 탭 아래에 있습니다. 규칙이 태그된 상태로 유지되도록 여기에서 액세스를 관리하는 것이 좋습니다(ysk-svc).",
3798
4540
  "portsManualHint": "고급 수동 규칙. 관리되는 소프트웨어의 경우 서비스 탭을 선호합니다.",
3799
- "colService": "Service",
3800
- "colMode": "Mode",
3801
- "colPorts": "Ports",
3802
- "colSync": "Status",
3803
- "synced": "Synced",
3804
- "syncNow": "Sync"
4541
+ "colService": "서비스",
4542
+ "colMode": "방법",
4543
+ "colPorts": "포트",
4544
+ "colSync": "상태",
4545
+ "synced": "동기화됨",
4546
+ "syncNow": "동조",
4547
+ "disableConfirmTitle": "UFW를 사용 중지할까요?",
4548
+ "disableConfirmDesc": "호스트 방화벽이 트래픽을 필터하지 않습니다. 공용 네트워크에서는 SSH와 패널이 노출될 수 있습니다.",
4549
+ "disableConfirmConsequence": "기존 허용/거부 규칙은 유지되지만 UFW를 다시 켤 때까지 적용되지 않습니다.",
4550
+ "toolHintFail2ban": "failure2ban = 임시 로그 기반 금지",
4551
+ "servicesUfwOff": "UFW는 꺼져있습니다. 이 목록은 호스트가 시행하는 규칙이 아니라 원하는 노출입니다.",
4552
+ "desiredOnlyUfwOff": "원하는: {{mode}} · UFW 꺼짐(적용되지 않음)",
4553
+ "syncNotApplied": "UFW 꺼짐 · 적용되지 않음",
4554
+ "defaultNotApplied": "해당 없음(UFW 꺼짐)",
4555
+ "ufwOffHint": "UFW가 꺼진 동안에는 기본 수신이 적용되지 않습니다."
3805
4556
  },
3806
4557
  "ftp": {
3807
4558
  "title": "FTPS 계정",
@@ -3936,7 +4687,38 @@
3936
4687
  "sftpRegister": "키 등록",
3937
4688
  "sftpAddedAt": "추가됨 {{time}}",
3938
4689
  "sftpTechSummary": "기술 세부정보(고급)",
3939
- "sftpTechNote": "키는 관리 경로 아래에 기록됩니다."
4690
+ "sftpTechNote": "키는 관리 경로 아래에 기록됩니다.",
4691
+ "filterProject": "이 프로젝트의 FTP 계정만 표시",
4692
+ "clearProjectFilter": "모든 계정 보기",
4693
+ "vsftpdFailedHint": "vsftpd가 실패했습니다. 서비스 탭을 엽니다(listen과 ​​listening_ipv6이 둘 다 YES일 수는 없습니다).",
4694
+ "tabService": "서비스",
4695
+ "listenConflictLive": "Live vsftpd.conf에는 listening={{v4}} 및 listening_ipv6={{v6}}이 있습니다. 두 가지 모두 YES가 시작되지 않습니다.",
4696
+ "listenConflictNeedFix": "먼저 Listen / Listen_ipv6을 수정한 다음(둘 다 YES일 수 없음) 적용하세요.",
4697
+ "fixListenIpv4": "IPv4만 사용(listen=YES, listening_ipv6=NO)",
4698
+ "liveFileValue": "지금 제출하세요: {{value}}",
4699
+ "startBlockedFailed": "서비스가 실패했습니다. 시작하기 전에 유효한 구성을 적용하세요.",
4700
+ "ftpsNeedCert": "먼저 인증서 도메인을 선택하세요.",
4701
+ "detectPublicIp": "공개 IP 감지",
4702
+ "detectPublicIpTitle": "이 호스트에서 첫 번째 비루프백 IPv4를 채웁니다.",
4703
+ "pasvIpRequired": "적용 전에 PASV 공인 IP를 지정하세요(NAT/클라우드). 감지하거나 주소를 입력합니다.",
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": "실제 브라우저: 비디오가 스트리밍됩니다. 오디오가 아직 패널에 연결되지 않았습니다(2단계).",
4182
4964
  "isolationNote": "실제 브라우저는 Chrome용 임시 Linux 사용자를 생성합니다. 페이지를 떠나거나 유휴 시간 초과로 인해 해당 사용자가 삭제됩니다.",
4183
4965
  "resumeHint": "이전 세션 재개({{count}} 탭)",
4184
- "resume": "Resume",
4185
- "resumeDismiss": "Dismiss",
4966
+ "resume": "재개하다",
4967
+ "resumeDismiss": "해고하다",
4186
4968
  "resumeDone": "세션이 재개되었습니다.",
4187
4969
  "settingsSafety": "항해 안전",
4188
4970
  "settingsSafetyHint": "엄격한 차단은 더 위험한 호스트를 차단합니다. 완화됨은 더 넓은 인트라넷 대상을 허용합니다. 클라우드 메타데이터에 대한 SSRF 보호를 비활성화하지 않습니다.",
4189
- "safetyStrict": "Strict",
4190
- "safetyStandard": "Standard",
4191
- "safetyRelaxed": "Relaxed",
4971
+ "safetyStrict": "엄격한",
4972
+ "safetyStandard": "기준",
4973
+ "safetyRelaxed": "편안한",
4192
4974
  "settingsBlockHosts": "차단된 호스트 접미사",
4193
4975
  "settingsBlockHostsHint": "한 줄에 하나의 호스트 이름 또는 접미사(예: Malware.test). 정확한 일치와 접미사 일치는 차단됩니다.",
4194
4976
  "settingsAllowDangerousDownloads": "위험도가 높은 다운로드 허용(exe/스크립트)",
4195
4977
  "settingsAudioBridge": "페이지 오디오를 패널에 연결",
4196
4978
  "settingsAudioBridgeHint": "호스트 Chrome 오디오를 이 브라우저로 스트리밍합니다. 일부 사이트에서는 재생 잠금을 해제하려면 클릭이 필요합니다.",
4197
- "downloads": "Downloads",
4979
+ "downloads": "다운로드",
4198
4980
  "downloadsEmpty": "이 세션에는 다운로드가 없습니다.",
4199
- "downloadReady": "Ready",
4200
- "downloadBlocked": "Blocked",
4201
- "downloadPending": "Pending",
4202
- "downloadFailed": "Failed",
4203
- "downloadSave": "Save",
4981
+ "downloadReady": "준비됨",
4982
+ "downloadBlocked": "막힌",
4983
+ "downloadPending": "보류 중",
4984
+ "downloadFailed": "실패한",
4985
+ "downloadSave": "저장",
4204
4986
  "audioUnlock": "소리 활성화",
4205
4987
  "audioUnlockHint": "이 탭에서 오디오 재생을 잠금 해제하려면 클릭하세요.",
4206
4988
  "audioUnlocked": "오디오 잠금 해제됨",
@@ -4210,12 +4992,34 @@
4210
4992
  "audioNotBridged": "오디오 꺼짐",
4211
4993
  "audioNotBridgedHint": "페이지를 들으려면 설정에서 오디오 브리지를 켜세요.",
4212
4994
  "mediaPolicyTitle": "실제 브라우저의 미디어",
4213
- "mediaVideoLabel": "Video",
4995
+ "mediaVideoLabel": "동영상",
4214
4996
  "mediaVideoDesc": "호스트에서 렌더링되고 패널에 프레임으로 스트리밍됩니다.",
4215
- "mediaAudioLabel": "Audio",
4997
+ "mediaAudioLabel": "오디오",
4216
4998
  "mediaAudioDesc": "호스트 Chrome의 선택적 브리지; 잠금 해제 클릭이 필요할 수 있습니다.",
4217
- "mediaPolicyLabel": "Policy",
4218
- "mediaPolicyDesc": "다운로드 및 자동 재생은 위의 안전 및 다운로드 설정을 따릅니다."
4999
+ "mediaPolicyLabel": "정책",
5000
+ "mediaPolicyDesc": "다운로드 및 자동 재생은 위의 안전 및 다운로드 설정을 따릅니다.",
5001
+ "frameBlocked": "페이지를 패널 프레임에 표시할 수 없습니다.",
5002
+ "historyEmpty": "이 세션에는 기록이 없습니다.",
5003
+ "bookmarksEmpty": "아직 북마크가 없습니다.",
5004
+ "closeSessionHint": "이 탐색 세션에 대한 쿠키를 지웁니다. 북마크가 유지됩니다.",
5005
+ "bookmarkAdd": "북마크 추가 또는 제거",
5006
+ "bookmarkList": "북마크 목록",
5007
+ "envUnset": "설정되지 않음",
5008
+ "envPanelValue": "패널: {{value}}",
5009
+ "settingsNoSandboxWarn": "Chromium 샌드박스를 비활성화합니다. 신뢰할 수 있는 용기 내에서만 사용하세요. 다음 실제 브라우저 세션에 적용됩니다.",
5010
+ "settingsDangerDlWarn": "호스트 브라우저를 통해 실행 파일 및 스크립트 다운로드를 허용합니다. 이것이 필요하다는 것을 확인하세요.",
5011
+ "settingsDangerConfirmTitle": "위험도가 높은 탐색 설정을 활성화하시겠습니까?",
5012
+ "needUrl": "위에서 URL을 입력해 세션을 시작하세요.",
5013
+ "envColVar": "변수",
5014
+ "envColHost": "호스트 프로세스",
5015
+ "envColPanel": "패널 설정",
5016
+ "envColEffective": "적용값",
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": "찾다…",
@@ -4227,24 +5031,30 @@
4227
5031
  "activeFilters": "{{count}} 필터 활성화됨",
4228
5032
  "noResults": "일치하는 항목 없음",
4229
5033
  "noResultsHint": "다른 키워드를 사용하거나 필터를 삭제해 보세요.",
4230
- "searching": "수색…"
5034
+ "searching": "수색…",
5035
+ "emptyChip": "No items in this filter"
4231
5036
  },
4232
5037
  "logViewer": {
4233
5038
  "banIpTitle": "보호에서 {{ip}} 금지"
4234
5039
  },
4235
5040
  "login": {
4236
- "title": "YSK 서버에 로그인",
5041
+ "title": "YSK Server 로그인",
4237
5042
  "subtitle": "서버 콘솔",
4238
5043
  "username": "사용자 이름",
4239
5044
  "password": "비밀번호",
4240
5045
  "submit": "로그인",
4241
- "failed": "로그인에 실패했습니다. 사용자 이름이나 비밀번호를 확인하세요.",
5046
+ "failed": "로그인에 실패했습니다. 사용자 이름 또는 비밀번호를 확인하세요.",
4242
5047
  "footer": "YSK Limited의 제품",
4243
- "totpRequired": "이 계정에는 2FA가 활성화되어 있습니다. 6자리 코드를 입력하세요.",
4244
- "totpLabel": "인증코드",
5048
+ "totpRequired": "이 계정은 2FA가 켜져 있습니다. 6자리 코드를 입력하세요.",
5049
+ "totpLabel": "인증 코드",
4245
5050
  "totpHint": "인증 앱의 6자리 코드",
4246
5051
  "submitting": "로그인 중…",
4247
- "sessionExpired": "세션이 만료되었습니다. 다시 로그인"
5052
+ "sessionExpired": "세션이 만료되었습니다. 다시 로그인하세요",
5053
+ "newPassword": "새 비밀번호",
5054
+ "newPasswordAgain": "새 비밀번호 확인",
5055
+ "changePassword": "비밀번호 변경",
5056
+ "passwordMismatch": "비밀번호가 일치하지 않습니다",
5057
+ "passwordChanged": "비밀번호가 업데이트되었습니다"
4248
5058
  },
4249
5059
  "logs": {
4250
5060
  "catSystem": "시스템 파일",
@@ -4371,7 +5181,7 @@
4371
5181
  "logrotateLabel": "로그로테이션",
4372
5182
  "srcNginx": "nginx",
4373
5183
  "srcSsh": "SSH",
4374
- "srcFail2ban": "실패2금지",
5184
+ "srcfail2ban": "실패2금지",
4375
5185
  "srcAuthLog": "auth.log",
4376
5186
  "srcNginxError": "nginx 오류",
4377
5187
  "srcLetsEncrypt": "암호화하자",
@@ -4379,7 +5189,36 @@
4379
5189
  "groupVarLog": "/var/log",
4380
5190
  "prioErr": "오류+",
4381
5191
  "prioWarn": "경고+",
4382
- "prioInfo": "정보+"
5192
+ "prioInfo": "정보+",
5193
+ "srcFail2ban": "실패2금지",
5194
+ "vacuumSize": "500MB로 제한",
5195
+ "logrotateNoStatus": "아직 logrotate 상태 파일이 없습니다(실행된 적이 없다면 정상).",
5196
+ "autoVacuumOff": "자동 청소가 꺼져 있습니다. 활성화할 때까지 시간은 사용되지 않습니다.",
5197
+ "aboutAllowlist": "Explore는 허용 목록에 있는 저널 단위와 /var/log 경로만 읽을 수 있습니다. 임의의 호스트 경로는 제공되지 않습니다.",
5198
+ "aboutCustomPath": "설정에 사용자 정의 경로를 추가합니다(/var/log 또는 /run/log만 해당). 그런 다음 탐색에서 엽니다.",
5199
+ "noRowsInWindow": "이 기간에는 기록이 없습니다.",
5200
+ "showInactiveUnits": "비활성 장치 표시",
5201
+ "sseNeedFollow": "먼저 팔로우를 켭니다. SSE는 라이브 테일에만 사용됩니다.",
5202
+ "vacuumNeedRetention": "먼저 보존 기간을 입력하세요(예: 14d)",
5203
+ "vacuumNeedConfirm": "확인 필요 — 오래된 journal 로그를 삭제합니다",
5204
+ "vacuumSizeNeedConfirm": "확인 필요 — journal 디스크 사용을 제한합니다",
5205
+ "vacuumSizeAlreadyBelow": "현재 사용량이 한도보다 낮아 보통 삭제되지 않습니다.",
5206
+ "vacuumSizeNoopDesc": "journal이 이미 500 MB 미만입니다. vacuum --size=500M은 실행되지만 보통 삭제하지 않습니다.",
5207
+ "journalDiskHint": "현재 systemd-journald 사용량(활성 journal). /var/log 순환 파일은 포함하지 않습니다.",
5208
+ "varLogDiskHint": "/var/log 추정(순환 파일 포함).",
5209
+ "queryFirst": "먼저 조회하세요",
5210
+ "projectSourcesTitle": "출처 {{n}}개(파일 + journal)",
5211
+ "logrotatePath": "길",
5212
+ "logrotateLast": "마지막 회전",
5213
+ "logrotateExpand": "{{n}} 더보기",
5214
+ "logrotateCollapse": "간략히 표시",
5215
+ "logrotateVersion": "상태 버전 {{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": "로컬 du의 사용량(추정되지 않음) 할당량은 제어 영역의 소프트 한도입니다. 하드 설정 할당량에는 호스트에 적용이 필요합니다.",
4512
5351
  "sseNeedLogin": "로그인되지 않았습니다. SSE를 열 수 없습니다",
4513
5352
  "sseSessionExpired": "로그인되지 않았거나 세션이 만료되었습니다. SSE를 열 수 없습니다",
4514
- "sseHttpError": "HTTP 스트리밍 {{status}}"
5353
+ "sseHttpError": "HTTP 스트리밍 {{status}}",
5354
+ "colFilesystem": "파일 시스템",
5355
+ "colMount": "산",
5356
+ "colSize": "크기",
5357
+ "colUsed": "사용된",
5358
+ "colAvail": "사용 가능",
5359
+ "colUsePct": "사용된 %",
5360
+ "colHome": "집",
5361
+ "usageNoteLink": "제어 영역 소프트 할당량. 프로젝트 격리 탭에 엄격한 제한을 적용합니다.",
5362
+ "alertsBuiltinOnly": "내장 CPU/메모리/디스크 임계값만 해당됩니다. 이메일, 웹훅 또는 Slack 채널이 없습니다.",
5363
+ "lastEvaluated": "마지막 확인",
5364
+ "shareNoQuotaHint": "할당량이 없어 비율이 없습니다. 프로젝트 격리 탭에서 설정하세요.",
5365
+ "setQuotaLink": "할당량 설정",
5366
+ "unusualHome": "비표준 경로",
5367
+ "unusualHomeHint": "/home/… 프로젝트 홈이 아닙니다. 정식 격리는 /home/ysk-server-{id}입니다.",
5368
+ "protectedPid": "PID 1 / init / systemd는 패널에서 신호를 보낼 수 없습니다",
5369
+ "sigTermTitle": "SIGTERM 보내기(프로세스 종료 요청)",
5370
+ "sigKillTitle": "SIGKILL 보내기(강제 종료 — 잡을 수 없음)",
5371
+ "batchTerm": "TERM",
5372
+ "batchKill": "KILL",
5373
+ "rawTopLabel": "원시 상단 (번역되지 않음)",
5374
+ "followSseLabel": "팔로우(실시간 스트림)",
5375
+ "alertsReadOnly": "내장 CPU/메모리/디스크 임계값만 해당됩니다. 이메일, 웹훅 또는 Slack 채널이 없습니다.",
5376
+ "alertsGoNotifications": "알림 센터 열기",
5377
+ "lastCheck": "마지막 확인",
5378
+ "rawTopHint": "번역되지 않은 top(1) 출력",
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": "목록",
@@ -4593,7 +5467,33 @@
4593
5467
  "dryRunOnlyDesc": "· 재고 + 사전 확인만; rsync 또는 대상 쓰기 없음",
4594
5468
  "executeNote": "호스트에는 YSK_EXECUTE=1 및 루트 API가 필요합니다. 마이그레이션 후 DNS A/AAAA를 업데이트하고 클라우드 방화벽 + 메일 PTR을 확인하세요.",
4595
5469
  "dnsCutover": "DNS 컷오버(수동)",
4596
- "dnsCutoverDesc": "이러한 이름에 대한 A/AAAA를 새 공용 IP로 지정합니다."
5470
+ "dnsCutoverDesc": "이러한 이름에 대한 A/AAAA를 새 공용 IP로 지정합니다.",
5471
+ "orphanHomesHint": "남은 프로젝트 주택(상점에 없음) 사용되지 않은 것을 확인한 후에만 제거하십시오.",
5472
+ "orphanRemove": "남은 집 없애기",
5473
+ "orphanRemoveTitle": "남은 프로젝트 홈을 삭제하시겠습니까?",
5474
+ "orphanRemoveDesc": "디스크에서 {{path}}를 영구적으로 삭제합니다. 이것은 상점 프로젝트가 아닙니다. YSK_EXECUTE=1이 필요합니다.",
5475
+ "orphanRemovePhrase": "확인하려면 DELETE를 입력하세요.",
5476
+ "orphanRemoveNeedConfirm": "확인이 필요합니다",
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": "맞춤 코드",
@@ -4648,7 +5548,7 @@
4648
5548
  "rust": "Rust",
4649
5549
  "protection": "방어센터",
4650
5550
  "firewall": "방화벽",
4651
- "fail2ban": "실패2금지",
5551
+ "fail2ban": "fail2ban",
4652
5552
  "users": "사용자 및 패키지",
4653
5553
  "services": "서비스",
4654
5554
  "metrics": "측정항목",
@@ -4670,7 +5570,9 @@
4670
5570
  "runtimes": "런타임",
4671
5571
  "security": "보안",
4672
5572
  "system": "시스템",
4673
- "ai": "AI"
5573
+ "ai": "AI",
5574
+ "validators": "검증자",
5575
+ "containers": "컨테이너"
4674
5576
  },
4675
5577
  "java": "Java",
4676
5578
  "kotlin": "Kotlin",
@@ -4689,8 +5591,13 @@
4689
5591
  "bookmarkPinned": "고정됨",
4690
5592
  "bookmarkAdded": "사이드바에 고정됨",
4691
5593
  "bookmarkRemoved": "사이드바에서 삭제됨",
4692
- "btTracker": "블루투스 트래커",
4693
- "support": "Support"
5594
+ "btTracker": "BT Tracker",
5595
+ "support": "지원하다",
5596
+ "noAccessTitle": "접근 권한 없음",
5597
+ "noAccessDesc": "현재 역할로는 이 페이지를 열 수 없습니다. 필요하면 관리자에게 요청하세요.",
5598
+ "backToDashboard": "대시보드로 돌아가기",
5599
+ "validators": "검증자 (Beta)",
5600
+ "docker": "도커"
4694
5601
  },
4695
5602
  "network": {
4696
5603
  "title": "네트워크 인터페이스",
@@ -4829,10 +5736,35 @@
4829
5736
  "azure_frontdoor": "푸른 정문",
4830
5737
  "gcore": "G코어 CDN",
4831
5738
  "custom": "맞춤형 프록시"
4832
- }
5739
+ },
5740
+ "needProvider": "IP 목록을 가져오기 전에 CDN 제공업체를 선택하세요.",
5741
+ "spoofWarn": "잘못된 CIDR을 신뢰하면 클라이언트가 X-Forwarded-For/CDN 헤더를 IP로 스푸핑할 수 있습니다."
4833
5742
  },
4834
5743
  "linkUp": "위로",
4835
- "linkDown": "아래에"
5744
+ "linkDown": "아래에",
5745
+ "linkDownTitle": "{{name}} 오프라인으로 전환",
5746
+ "linkDownNeedConfirm": "확인하려면 인터페이스 이름을 입력하세요.",
5747
+ "persistNmHint": "지속 가능이란 변경 사항이 NetworkManager를 통해 재부팅 후에도 유지될 수 있음을 의미합니다.",
5748
+ "hideRaw": "원시 출력 숨기기",
5749
+ "rawLoadedAt": "로드됨 {{time}}",
5750
+ "deleteDefaultPanelWarn": "기본 경로를 삭제하면 이 패널 세션이 중단될 수 있습니다. 확인하려면 DEFAULT를 입력하세요.",
5751
+ "typeDefaultToConfirm": "확인하려면 DEFAULT를 입력하세요.",
5752
+ "deleteDefaultNeedConfirm": "확인 필요 — DEFAULT 입력(이 패널 연결이 끊길 수 있음)",
5753
+ "deleteRouteNeedConfirm": "확인이 필요합니다",
5754
+ "nmUnavailable": "NetworkManager가 실행되고 있지 않습니다. 실시간 경로만 추가할 수 있습니다.",
5755
+ "defaultRouteDownNeedName": "이는 기본 경로 송신입니다. 확인하려면 인터페이스 이름을 입력하세요. 패널 연결이 끊어질 수 있습니다.",
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}} 사이트",
@@ -4916,7 +5848,16 @@
4916
5848
  "setHsts": "HSTS",
4917
5849
  "setCfRealIp": "Cloudflare 실제 IP",
4918
5850
  "setIndexes": "디렉토리 목록",
4919
- "bodyInherit": "글로벌"
5851
+ "bodyInherit": "글로벌",
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": "페이지를 찾을 수 없습니다",
5858
+ "body": "{{path}}에 패널 페이지가 없습니다.",
5859
+ "hint": "알 수 없는 URL은 더 이상 대시보드로 보내지 않습니다.",
5860
+ "home": "대시보드"
4920
5861
  },
4921
5862
  "notes": {
4922
5863
  "notFound": "찾을 수 없음",
@@ -4950,19 +5891,53 @@
4950
5891
  },
4951
5892
  "ssh": {
4952
5893
  "identityNotFound": "신원을 찾을 수 없습니다",
4953
- "registrationNotFound": "등록을 찾을 수 없습니다"
5894
+ "registrationNotFound": "등록을 찾을 수 없습니다",
5895
+ "keyOkNologin": "Key accepted. Account has no login shell (nologin) — use SFTP. Treated as PASS.",
5896
+ "keyOkSftp": "SSH 쉘이 거부된 후 SFTP 비밀번호가 성공했습니다."
4954
5897
  },
4955
5898
  "cdn": {
4956
5899
  "siteNotFound": "CDN 사이트를 찾을 수 없습니다",
4957
- "nodeMissing": "노드가 존재하지 않습니다"
5900
+ "nodeMissing": "노드가 존재하지 않습니다",
5901
+ "probe": {
5902
+ "timeout": "{{ms}}ms({{detail}}) 후 연결 시간이 초과되었습니다. 피어에 방화벽이 있을 수 있습니다.",
5903
+ "dns": "DNS 조회에 실패했습니다({{detail}}).",
5904
+ "refused": "{{ms}}ms({{detail}}) 후에 연결이 거부되었습니다. 포트 폐쇄 또는 단방향 차단.",
5905
+ "tls": "TLS 확인에 실패했습니다({{detail}}).",
5906
+ "unreach": "{{ms}}ms({{detail}}) 후에 호스트에 연결할 수 없습니다.",
5907
+ "http": "{{ms}}ms({{detail}}) 후에 HTTP 프로브가 실패했습니다."
5908
+ },
5909
+ "loopbackOriginRemote": "원본은 127.0.0.1입니다. 즉, 원격 에지가 아닌 이 호스트입니다. 연결 가능한 원본 IP 또는 바인딩_ip를 설정합니다.",
5910
+ "needSshOrFleet": "원격 엣지에는 아웃바운드 SSH ID(또는 사용자 이름) 또는 /agents 플릿 세션이 필요합니다. 상태 URL만으로는 전송이 적용되지 않습니다.",
5911
+ "originRemoteRewrite": "원격 에지는 루프백 대신 도달 가능한 원점 {{url}}을 사용합니다.",
5912
+ "originRemoteUnknown": "오리진은 루프백이고 공개/LAN IP 또는 바인딩_ip가 알려져 있지 않습니다. Apply는 원격 에지가 설정될 때까지 거부합니다."
4958
5913
  },
4959
5914
  "backup": {
4960
5915
  "fileNotFound": "백업 파일을 찾을 수 없습니다",
4961
5916
  "resticNoPassword": "Restic이 활성화되었지만 비밀번호가 설정되지 않았습니다",
4962
- "resticNotInPath": "PATH에 있지 않음"
5917
+ "resticNotInPath": "PATH에 있지 않음",
5918
+ "dbEnvUnreadable": ".db.env를 읽을 수 없습니다. SQL 덤프를 건너뛰었습니다.",
5919
+ "dbEnvNoName": ".db.env에는 데이터베이스 이름이 없습니다. SQL 덤프를 건너뛰었습니다.",
5920
+ "targetOutside": "복원 대상은 프로젝트 홈 또는 공용 파일 루트 내부에 있어야 합니다.",
5921
+ "testUnsaved": "저장되지 않은 양식 값 테스트(설정에 기록되지 않음)",
5922
+ "testIdentity": "ssh (identity) to {{spec}} ok",
5923
+ "sshAuthFailed": "SSH 키 또는 비밀번호가 거부되었습니다(공개 키). 아웃바운드 ID를 선택하거나 sshpass를 설치하세요.",
5924
+ "remotePathIsFile": "원격 경로 {{path}}는 파일입니다. 디렉토리를 사용하십시오.",
5925
+ "remoteMkdirFailed": "원격 디렉터리를 생성할 수 없습니다: {{detail}}",
5926
+ "sidecarPushed": "SQL 사이드카도 푸시됨 {{name}}",
5927
+ "controlPlaneDryRun": "미리보기만 가능 - 작성된 내용이 없습니다. 패널에서 복원을 사용하고 작성할 문구를 확인하세요.",
5928
+ "controlPlaneNeedConfirm": "전체 제어 영역 복원에는 RESTORE-Control-PLANE 확인 문구가 필요합니다.",
5929
+ "controlPlaneRestartAfter": "복원에 성공한 후 API를 다시 시작하세요.",
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가 설치되지 않았습니다"
5936
+ "cliMissing": "redis-cli가 설치되지 않았습니다",
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가 다시 로드됨",
@@ -4985,7 +5960,8 @@
4985
5960
  "vsftpdStarted": "vsftpd가 시작되었습니다",
4986
5961
  "openPortsStep": "방화벽 포트(수동)",
4987
5962
  "openPortsReminder": "호스트 방화벽 및 클라우드 보안 그룹에서 TCP 포트 열기: {{ports}}. FTPS 적용은 포트를 열지 않습니다.",
4988
- "openPortsPasvHint": "로그인은 작동하지만 디렉터리 LIST 시간이 초과되면 PASV 데이터 범위가 차단됩니다. 전체 파일을 엽니다."
5963
+ "openPortsPasvHint": "로그인은 작동하지만 디렉터리 LIST 시간이 초과되면 PASV 데이터 범위가 차단됩니다. 전체 파일을 엽니다.",
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": "격리된 배포를 위한 노드 바이너리 누락: {{path}} — Node {{version}} 툴체인을 설치한 후 다시 배포합니다. 203/EXEC가 되는 유닛 작성을 거부합니다.",
@@ -5003,7 +5979,8 @@
5003
5979
  "pathOutsideSandbox": "샌드박스 외부 경로: {{target}}",
5004
5980
  "notFoundRel": "찾을 수 없음: {{relPath}}",
5005
5981
  "fileNotFoundRel": "파일을 찾을 수 없습니다: {{relPath}}",
5006
- "notFoundFrom": "찾을 수 없음: {{fromPath}}"
5982
+ "notFoundFrom": "찾을 수 없음: {{fromPath}}",
5983
+ "alreadyExists": "같은 이름이 이미 있습니다: {{name}}"
5007
5984
  },
5008
5985
  "dns": {
5009
5986
  "needZoneServerIp": "영역 및 서버 IP 입력",
@@ -5039,11 +6016,24 @@
5039
6016
  "applyDigOk": "PowerDNS BIND: 목록 영역 + 발굴 확인",
5040
6017
  "applyDigFail": "conf에 영역이 등록되었지만 여전히 비어 있음/REFUSED — 표시가 적용되지 않음",
5041
6018
  "applySyncIncomplete": "PowerDNS 바인드 동기화 미완료 — 디스크에만 영역 파일이 있습니다(적용되지 않음). EXECUTE/root 또는 pdns 로그를 수정합니다.",
5042
- "writeOnlyHint": "영역 파일 쓰기 전용 - PowerDNS는 다음 이름의 레지스터를 로드/적용할 때까지 응답하지 않습니다."
6019
+ "writeOnlyHint": "영역 파일 쓰기 전용 - PowerDNS는 다음 이름의 레지스터를 로드/적용할 때까지 응답하지 않습니다.",
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": "호스트 실행이 꺼져 있습니다. 패널에서 데이터베이스를 생성할 수 없습니다.",
5046
- "dryRunMysql": "테스트 실행: 데이터베이스가 생성되지 않았습니다. YSK_EXECUTE=1과 함께 --execute를 사용하여 프로비저닝"
6033
+ "dryRunMysql": "테스트 실행: 데이터베이스가 생성되지 않았습니다. YSK_EXECUTE=1과 함께 --execute를 사용하여 프로비저닝",
6034
+ "remoteNoCreds": "사용자 이름/비밀번호가 저장되지 않음 — TCP 전용(등록은 로그인이 아님)",
6035
+ "remoteReachable": "TCP {{host}}:{{port}} 개방({{ms}}ms).",
6036
+ "remoteUnreachable": "TCP {{host}}:{{port}} 폐쇄 또는 필터링됨({{ms}}ms)."
5047
6037
  },
5048
6038
  "net": {
5049
6039
  "invalidIface": "잘못된 인터페이스 이름",
@@ -5124,7 +6114,17 @@
5124
6114
  "dns": "DNS",
5125
6115
  "email": "이메일",
5126
6116
  "isolation": "프로젝트 격리",
5127
- "ops": "운영"
6117
+ "ops": "운영",
6118
+ "runtimesNode": "Node.js",
6119
+ "runtimesPhp": "PHP",
6120
+ "runtimesPython": "파이썬",
6121
+ "runtimesGo": "Go",
6122
+ "pm2": "PM2",
6123
+ "runtimesNodeFix": "/runtimes/node에서 노드 설치",
6124
+ "runtimesPhpFix": "/runtimes/php에서 PHP 설치",
6125
+ "runtimesPythonFix": "/runtimes/python에서 Python 설치",
6126
+ "runtimesGoFix": "/runtimes/go에서 Go 설치",
6127
+ "pm2Fix": "노드 런타임 페이지에서 PM2 설치"
5128
6128
  },
5129
6129
  "needAdmin": "관리자 권한이 필요합니다",
5130
6130
  "notInstalled": "미설치",
@@ -5397,7 +6397,7 @@
5397
6397
  "n0259": "도메인",
5398
6398
  "n0260": "도메인을 찾을 수 없음:",
5399
6399
  "n0261": "dovecot 다시 로드 실패 또는 servicenot(시브 쓰기, 다시 로드 성공)",
5400
- "n0262": "시험 운행 함대 파견 (아님)",
6400
+ "n0262": "플릿 디스패치 미리보기(대기열에 넣지 않음)",
5401
6401
  "n0263": "테스트 실행 피어 푸시(SCP 아님)",
5402
6402
  "n0264": "테스트 실행 원격 설치(Ssh 아님)",
5403
6403
  "n0265": "테스트 실행 전송 완료(전체 부트스트랩)",
@@ -5406,10 +6406,10 @@
5406
6406
  "n0268": "테스트 실행 — /etc를 쓰지 않음",
5407
6407
  "n0269": "테스트 실행: add --execute firstapply ufw",
5408
6408
  "n0270": "테스트 실행: 인벤토리 + 프리플라이트 통과, 패키지/이송 아님",
5409
- "n0271": "테스트 실행: 프로브/. add --execute YSK_EXECUTE=1 firstreally 프로비저닝",
5410
- "n0272": "dry-run: 관리 파일(dataDir)을 작성했습니다. 실행 추가 + YSK_EXECUTE=1 + 루트 번째 시스템 드롭인",
5411
- "n0273": "드라이런: 아닙니다. add --execute YSK_EXECUTE=1 firstreally 금지",
5412
- "n0274": "드라이런: 아닙니다. add --execute YSK_EXECUTE=1 firstreally 차단 해제",
6409
+ "n0271": "테스트 실행: 프로브/계획 전용. 실제로 프로비저닝하려면 YSK_EXECUTE=1 --execute를 전달하세요.",
6410
+ "n0272": "Dry-run: 관리 파일(dataDir)을 작성했습니다. --execute를 YSK_EXECUTE=1 전달하여 시스템 드롭인을 설치합니다.",
6411
+ "n0273": "드라이런(Dry-run): 금지되지 않음. 실제로 금지하려면 --execute YSK_EXECUTE=1 전달하세요.",
6412
+ "n0274": "테스트 실행: 금지가 해제되지 않았습니다. 실제로 금지를 해제하려면 YSK_EXECUTE=1 --execute를 전달하세요.",
5413
6413
  "n0275": "dryRun=true — API 변경",
5414
6414
  "n0276": "dryRun: 쓰지 않음",
5415
6415
  "n0277": "dump write dataDir, 전송하지 않음",
@@ -5417,10 +6417,10 @@
5417
6417
  "n0279": "실행( YSK_EXECUTE=1 + 루트)",
5418
6418
  "n0280": "실행하려면 대기열에 추가해야 합니다.",
5419
6419
  "n0281": "내보내기 관리자",
5420
- "n0282": "Fail2ban 적용 실패",
5421
- "n0283": "Fail2ban 서비스",
5422
- "n0284": "Fail2ban이 활성화되지 않았습니다.",
5423
- "n0285": "Fail2ban 아님",
6420
+ "n0282": "fail2ban 적용 실패",
6421
+ "n0283": "fail2ban 서비스",
6422
+ "n0284": "fail2ban이 활성화되지 않았습니다.",
6423
+ "n0285": "fail2ban 아님",
5424
6424
  "n0286": "실패2금지",
5425
6425
  "n0287": "fail2ban 상태 읽기 실패",
5426
6426
  "n0288": "fall2ban: sshd, nginx-http-auth 및 표준 감옥",
@@ -5676,7 +6676,7 @@
5676
6676
  "n0538": "YSK_SECRETS_KEY",
5677
6677
  "n0539": "baseUrl/.ysk-cdn-health 경로(C2 캔 상태 위치)",
5678
6678
  "n0540": "버전(최신 재정의)",
5679
- "n0541": "YSK_LATEST_VERSION (/)",
6679
+ "n0541": "YSK_LATEST_VERSION(/)",
5680
6680
  "n0542": "없는",
5681
6681
  "n0543": "mysqldump — 패키지는 MySQL을 사용할 수 없습니다.",
5682
6682
  "n0544": "pg_dump — 패키지는 Postgres를 사용할 수 없습니다.",
@@ -5739,7 +6739,7 @@
5739
6739
  "n0601": "파일 또는 디렉토리 삭제",
5740
6740
  "n0602": "deletesystemuser — 거부",
5741
6741
  "n0603": "삭제: 호스트 실행이 활성화되지 않았습니다. 경로 관리 데이터 디렉터리",
5742
- "n0604": "Fail2ban을 적용하고 서비스를 활성화하려면",
6742
+ "n0604": "fail2ban을 적용하고 서비스를 활성화하려면",
5743
6743
  "n0605": "페이지 활성화(소프트/일반)",
5744
6744
  "n0606": "강화",
5745
6745
  "n0607": "또는",
@@ -5758,7 +6758,7 @@
5758
6758
  "n0620": "시작프로세스프로세스가 아님",
5759
6759
  "n0621": "OP캐시",
5760
6760
  "n0622": "SSL",
5761
- "n0623": "",
6761
+ "n0623": "활성",
5762
6762
  "n0624": "파일",
5763
6763
  "n0625": "파일",
5764
6764
  "n0626": "노드 wsrep, HA ≥2 노드",
@@ -5860,9 +6860,9 @@
5860
6860
  "n0722": "그리고 쿠키",
5861
6861
  "n0723": "활성화 --이제 실패2반",
5862
6862
  "n0724": "galera_new_cluster(부트스트랩)",
5863
- "n0725": "Fail2ban을 다시 로드했습니다.",
6863
+ "n0725": "fail2ban을 다시 로드했습니다.",
5864
6864
  "n0726": "nginx를 다시 로드하세요",
5865
- "n0727": "Fail2ban을 다시 시작했습니다.",
6865
+ "n0727": "fail2ban을 다시 시작했습니다.",
5866
6866
  "n0728": "scp 영역(다시 로드된 피어 ≠ 명명됨)에 기록됨",
5867
6867
  "n0729": "scp에서 피어/tmp로(피어에 기록됨 ≠ 서비스가 다시 시작됨)",
5868
6868
  "n0730": "systemctl reload nginx",
@@ -5889,7 +6889,7 @@
5889
6889
  "n0751": "nginx 캐시 디렉토리 및 다시 로드(hostnot Proxy_cache는 가능)",
5890
6890
  "n0752": "서버완료인증서제발",
5891
6891
  "n0753": "CF 전용 UFW 적용 (origin CF + Keepport)",
5892
- "n0754": "Fail2ban 적용",
6892
+ "n0754": "fail2ban 적용",
5893
6893
  "n0755": "시스템 Postfix에 적용된 설정",
5894
6894
  "n0756": "시스템 Nginx에 적용",
5895
6895
  "n0757": "적용된 방화벽 규칙",
@@ -5974,7 +6974,7 @@
5974
6974
  "n0836": "인증서를 주세요. 실패했습니다.",
5975
6975
  "n0837": "≥ 파일",
5976
6976
  "n0838": "설정유지백업",
5977
- "n0839": "성공이 대상은 BatchMode, 가능",
6977
+ "n0839": "성공은 대상이 BatchMode SSH(비대화형)를 허용한다는 것을 의미합니다. 이는 전역 액세스 권한을 부여하는 것이 아닙니다.",
5978
6978
  "n0840": "또는 32767",
5979
6979
  "n0841": "소프트웨어가 설치됨",
5980
6980
  "n0842": "허가/",
@@ -6034,7 +7034,7 @@
6034
7034
  "n0896": "클라이언트가 IP만 사용할 때 더 빠른 인증",
6035
7035
  "n0897": ": Cloudflare 영역 + CF_API_TOKEN firstcan Under Attack API",
6036
7036
  "n0898": "할 수 없다",
6037
- "n0899": "Nginx와 Fail2ban",
7037
+ "n0899": "Nginx와 fail2ban",
6038
7038
  "n0900": "성능 및 리소스",
6039
7039
  "n0901": "IP/도메인. Spamhaus 등을 확인해 보시기 바랍니다.",
6040
7040
  "n0902": "A/AAAA(정점 및 www)",
@@ -6061,9 +7061,9 @@
6061
7061
  "n0923": "그리고",
6062
7062
  "n0924": "테이블 오픈 캐시",
6063
7063
  "n0925": "PHP 버전",
6064
- "n0926": "더 많은 Fail2ban 감옥, 더 빠른 금지",
7064
+ "n0926": "더 많은 fail2ban 감옥, 더 빠른 금지",
6065
7065
  "n0927": "Redis를 부탁드립니다",
6066
- "n0928": "Fail2ban 감옥 업데이트(관리 파일)",
7066
+ "n0928": "fail2ban 감옥 업데이트(관리 파일)",
6067
7067
  "n0929": "업데이트미완료",
6068
7068
  "n0930": "가장 엄격한 Nginx 제한(~1req/s)",
6069
7069
  "n0931": "12 디렉토리",
@@ -6134,7 +7134,7 @@
6134
7134
  "n0996": "local nginx -t OK (관리형 conf, ≠ edge 적용)",
6135
7135
  "n0997": "로컬 wsrep은 노드가 아닌 크기일 수 있습니다.",
6136
7136
  "n0998": "로컬 ysk.json을 읽을 수 없음/지문",
6137
- "n0999": "로컬 OK; 완전한 정상 피어 프로브( 아님)",
7137
+ "n0999": "로컬 노드는 괜찮습니다. 완전한 정상 상태에는 피어 프로브가 필요합니다(완료되지 않음).",
6138
7138
  "n1000": "local nginx — conf 작성했지만 다시 로드하지 않음",
6139
7139
  "n1001": "localAvailable NM 연결; 성공할 것입니다. \"\" 또는 NetworkManager를 사용할 수 있습니다.",
6140
7140
  "n1002": "localAvailable ps - 할 수 없음 ()",
@@ -6228,7 +7228,7 @@
6228
7228
  "n1088": "휴가.체 캔",
6229
7229
  "n1089": "vhost requireupdate (또는 conf 서버)",
6230
7230
  "n1090": "wsrep 상태(Galera 또는 servicenot 불가)",
6231
- "n1091": "활성 감옥 또는 Fail2ban이 실행되지 않음",
7231
+ "n1091": "활성 감옥 또는 fail2ban이 실행되지 않음",
6232
7232
  "n1092": "통나무",
6233
7233
  "n1093": "캔 시스템 (작성)",
6234
7234
  "n1094": "타겟팅 가능(healthUrl / baseUrl / publicIpv4)",
@@ -6368,7 +7368,7 @@
6368
7368
  "n1228": "상태: 작성됨() - 가장자리 적용되지 않음; PR-C3 팬아웃 + nginx -t/reload",
6369
7369
  "n1229": "상태: 작성됨(시스템 Postfix/Rspamd에는 적용되지 않음)",
6370
7370
  "n1230": "상태: 기록됨(시스템 Nginx가 아님, ApplySystem이 다시 로드를 시도함)",
6371
- "n1231": "상태: 작성됨(관리; 라이브 Fail2ban-client YSK_EXECUTE 또는 \"→시스템에 적용\" Jail.local)",
7371
+ "n1231": "상태: 작성됨(관리; 라이브 fail2ban-client YSK_EXECUTE 또는 \"→시스템에 적용\" Jail.local)",
6372
7372
  "n1232": "상태: 기록됨(키/DS, 영역이 아니거나 영역이 아님)",
6373
7373
  "n1233": "상태: 작성됨(SSO 아님)",
6374
7374
  "n1234": "상태: 기록됨( /not 아님) - 성공",
@@ -6576,7 +7576,7 @@
6576
7576
  "n1436": "읽기 금지 실패",
6577
7577
  "n1437": "금지된 권한을 읽을 수 있습니다. 금지 해제/금지 YSK_EXECUTE",
6578
7578
  "n1438": "읽기 금지 실패(권한 또는 서비스)",
6579
- "n1439": "Fail2ban 금지 읽기 실패",
7579
+ "n1439": "fail2ban 금지 읽기 실패",
6580
7580
  "n1440": "읽지 못했습니다.",
6581
7581
  "n1441": "읽기 로그 실패",
6582
7582
  "n1442": "읽기 파일",
@@ -6679,7 +7679,7 @@
6679
7679
  "n1539": "YSK_EXECUTE 먼저 ufw 적용 가능",
6680
7680
  "n1540": "YSK_EXECUTE는 실제로 자동 차단됩니다.",
6681
7681
  "n1541": "YSK_EXECUTE 바닙",
6682
- "n1542": "YSK_EXECUTE Fail2ban 서비스",
7682
+ "n1542": "YSK_EXECUTE fail2ban 서비스",
6683
7683
  "n1543": "YSK_EXECUTE=1 firstcan 진공 저널",
6684
7684
  "n1544": "실행:true 또는 dryRun:true",
6685
7685
  "n1545": "nginx log_format $upstream_cache_status(또는 X-YSK-캐시)첫 번째 HIT/MISS",
@@ -6730,7 +7730,7 @@
6730
7730
  "n1590": "",
6731
7731
  "n1591": "루트 아님 — useradd / systemd / nginx 시스템 경로가 제한됩니다.",
6732
7732
  "n1592": "seccomp가 아닌 경우 runAsUser가 필요합니다.",
6733
- "n1593": "패널부탁드립니다 /",
7733
+ "n1593": "공개 요청 /",
6734
7734
  "n1594": "패널연결; 사용 가능\"\" ( )",
6735
7735
  "n1595": "패널이 루트로 실행되고 있지 않습니다.",
6736
7736
  "n1596": "사용 가능 적용:거짓",
@@ -6971,7 +7971,7 @@
6971
7971
  "t0221": "관리하다: {{v0}} ({{v1}} )",
6972
7972
  "t0222": "sshdignoreip {{v0}} {{v1}} · 상태: 적용됨",
6973
7973
  "t0223": "실패2ban-clientignoreip 실패: {{v0}} (관리되는 파일 쓰기; 적용됨)",
6974
- "t0224": "Fail2ban 감옥: {{v0}}",
7974
+ "t0224": "fail2ban 감옥: {{v0}}",
6975
7975
  "t0225": "쓴 단위 {{v0}}",
6976
7976
  "t0226": "상태는 여전히 {{v0}} (적용되지 않음)",
6977
7977
  "t0227": "예상치 못한 Apply_status: {{v0}}",
@@ -7001,7 +8001,7 @@
7001
8001
  "t0251": "{{v0}} 설치가 완료되지 않았습니다.",
7002
8002
  "t0252": "{{v0}} 서비스 시작",
7003
8003
  "t0253": "시작 실패: {{v0}}",
7004
- "t0254": "Node.js 버전 {{v0}} 지원; 사용 가능한 버전: {{v1}}",
8004
+ "t0254": "Node.js 버전 {{v0}} 지원; 사용 가능 버전: {{v1}}",
7005
8005
  "t0255": "PHP 버전 {{v0}} 지원; 사용 가능 시간: {{v1}}",
7006
8006
  "t0256": "Python 버전 {{v0}} 지원; 사용 가능 시간: {{v1}}",
7007
8007
  "t0257": "Go 버전 {{v0}} 지원; 사용 가능 시간: {{v1}}",
@@ -7044,7 +8044,7 @@
7044
8044
  "t0294": "pdnsutil 영역 {{v0}}",
7045
8045
  "t0295": "systemctl {{v0}} fall2ban 알았어",
7046
8046
  "t0296": "{{v0}} 실패: {{v1}}",
7047
- "t0297": "Fail2ban 금지 {{v0}} @ {{v1}} (, 금지 시간 제한)",
8047
+ "t0297": "fail2ban 금지 {{v0}} @ {{v1}} (, 금지 시간 제한)",
7048
8048
  "t0298": "Banip 실패: {{v0}}",
7049
8049
  "t0299": "감옥: {{v0}}",
7050
8050
  "t0300": "IP 무시: dataDir/fail2ban/ignoreip.txt",
@@ -7123,12 +8123,12 @@
7123
8123
  "t0373": "프로젝트 \"{{v0}}\" 격리",
7124
8124
  "t0374": "로컬 경로로 {{v0}}",
7125
8125
  "t0375": "신원 {{v0}}: {{v1}}",
7126
- "t0376": "scp(ID) {{v0}}",
7127
- "t0377": "scp(ID) 실패: {{v0}}",
7128
- "t0378": "scp를 {{v0}}",
7129
- "t0379": "scp 실패: {{v0}}",
7130
- "t0380": "scp를 {{v0}}",
7131
- "t0381": "scp 실패: {{v0}} (원격 ID 백업)",
8126
+ "t0376": "sftp(identity) {{v0}}에 성공",
8127
+ "t0377": "sftp(identity) 실패: {{v0}}",
8128
+ "t0378": "sftp로 {{v0}}에 성공",
8129
+ "t0379": "sftp 실패: {{v0}}",
8130
+ "t0380": "sftp로 {{v0}}에 성공",
8131
+ "t0381": "sftp 실패: {{v0}} (백업 remote identityId를 설정할 수 있음)",
7132
8132
  "t0382": "시즌3 {{v0}}",
7133
8133
  "t0383": "S3 실패: {{v0}}",
7134
8134
  "t0384": ": {{v0}}/{{v1}} 관리자 2FA 활성화",
@@ -7136,7 +8136,7 @@
7136
8136
  "t0386": "{{v0}} 경로",
7137
8137
  "t0387": "{{v0}} 찾을 수 없음",
7138
8138
  "t0388": "{{v0}}를 설치하거나 PATH에 추가하세요.",
7139
- "t0389": "사용 가능한 버전: {{v0}}",
8139
+ "t0389": "사용 가능 버전: {{v0}}",
7140
8140
  "t0390": "{{v0}}%( {{v1}}MB)",
7141
8141
  "t0391": "{{v0}}% ({{v1}})",
7142
8142
  "t0392": "서비스 시작 {{v0}}",
@@ -7218,7 +8218,7 @@
7218
8218
  "t0468": "인상할 수 있음(후보자 ≠ 현재): {{v0}}",
7219
8219
  "t0469": "npm 레지스트리 HTTP {{v0}}",
7220
8220
  "t0470": "GitHub, HTTP {{v0}} 출시",
7221
- "t0471": "GitHub package.json HTTP {{v0}}",
8221
+ "t0471": "GitHub 패키지.json HTTP {{v0}}",
7222
8222
  "t0472": "npm: {{v0}}@{{v1}}",
7223
8223
  "t0473": "npm {{v0}} 사용할 수 없음: {{v1}}",
7224
8224
  "t0474": "GitHub 릴리스를 사용할 수 없음: {{v0}}",
@@ -7300,7 +8300,7 @@
7300
8300
  "t0550": "액티브 디펜스 프리셋 → {{v0}}",
7301
8301
  "t0551": "금지 → {{v0}} ({{v1}} / {{v2}})",
7302
8302
  "t0552": "적용된 방어 프리셋: {{v0}}",
7303
- "t0553": "Fail2ban 실패: {{v0}}",
8303
+ "t0553": "fail2ban 실패: {{v0}}",
7304
8304
  "t0554": "ufw 실패: {{v0}}",
7305
8305
  "t0555": "{{v0}}",
7306
8306
  "t0556": "ufw 삭제 실패: {{v0}}",
@@ -7379,15 +8379,15 @@
7379
8379
  "t0629": "프로젝트 {{v0}} 집: {{v1}}",
7380
8380
  "t0630": "프로젝트 {{v0}} bind_ip={{v1}} — 가능 ( IP )",
7381
8381
  "t0631": "프로젝트 {{v0}} 집이 아닌 경로: {{v1}}",
7382
- "t0632": "집(상점): {{v0}}",
8382
+ "t0632": "디스크에 있는 고아 집(일치하는 상점 프로젝트 없음): {{v0}}",
7383
8383
  "t0633": "메일주소: {{v0}}",
7384
8384
  "t0634": "{{v0}} — 타겟팅할 수 없음",
7385
8385
  "t0635": "조사할 수 없습니다 {{v0}}",
7386
8386
  "t0636": "{{v0}} · {{v1}}",
7387
8387
  "t0637": "프로젝트 {{v0}} · {{v1}} · DB {{v2}} · Redis {{v3}}",
7388
- "t0638": "설치소프트웨어 {{v0}} · 주택 {{v1}}",
8388
+ "t0638": "설치할 소프트웨어 {{v0}} · homes {{v1}}",
7389
8389
  "t0639": "컷오버 호스트 {{v0}}",
7390
- "t0640": "경고 {{v0}} (부탁드립니다)",
8390
+ "t0640": "{{v0}} 경고 — 컷오버 전에 검토하세요.",
7391
8391
  "t0641": "열쇠 {{v0}}",
7392
8392
  "t0642": "키를 사용할 수 없습니다: {{v0}}",
7393
8393
  "t0643": "targetnot writeauthorized_keys: {{v0}}",
@@ -7451,7 +8451,7 @@
7451
8451
  "t0701": "CDN {{v0}}",
7452
8452
  "t0702": "원본 쉴드 노드가 존재하지 않습니다: {{v0}}",
7453
8453
  "t0703": "가장자리: {{v0}}",
7454
- "t0704": "원본 URL(): {{v0}}",
8454
+ "t0704": "원본 URL(프로젝트 바인딩에서): {{v0}}",
7455
8455
  "t0705": "CDN 업데이트 {{v0}}",
7456
8456
  "t0706": "CDN 생성 {{v0}}",
7457
8457
  "t0707": "원점 방패: 가장자리 방패 {{v0}} → {{v1}}",
@@ -7547,7 +8547,16 @@
7547
8547
  "t0797": "시간대 실패: {{v0}}",
7548
8548
  "tScoreFrom": "점수={{score}} from={{from}}",
7549
8549
  "appliedTag": "(적용된)",
7550
- "writtenTag": "(작성만 가능)"
8550
+ "writtenTag": "(작성만 가능)",
8551
+ "selfDestMissing": "실행 중인 설치 디렉터리를 찾을 수 없습니다(systemd ExecStart 또는 cli.js)",
8552
+ "selfDestUnwritable": "실행 중인 설치 디렉터리에 쓸 수 없습니다 {{v0}}",
8553
+ "selfApplied": "{{v0}}을(를) {{v1}}에 적용했습니다",
8554
+ "selfVerifyFail": "적용 후 버전 파일에 {{v0}}이(가) 없습니다",
8555
+ "selfDownloadFail": "공식 패키지 {{v0}}을(를) 다운로드하거나 압축을 풀 수 없습니다: {{v1}}",
8556
+ "selfOverlayFail": "공식 패키지를 실행 중인 디렉터리에 적용하지 못했습니다: {{v0}}",
8557
+ "selfUpgradeHint": "패널 적용에 실패했습니다. root로 실행: curl -fsSL https://raw.githubusercontent.com/yanshekki/ysk-server/main/install.sh | bash -s -- --upgrade",
8558
+ "n1611": "UFW가 비활성 상태입니다. {{n}} 영구 거부 규칙이 user.rules에 저장되어 있지만 커널이 이를 시행하지 않습니다.",
8559
+ "n1612": "UFW는 비활성 상태입니다. 거부 규칙은 user.rules에만 기록되며 커널은 패킷을 삭제하지 않습니다. 먼저 UFW를 활성화하세요. 자동으로 활성화되지 않습니다."
7551
8560
  },
7552
8561
  "tpl": {
7553
8562
  "deleted": "삭제됨 {{name}}",
@@ -7610,7 +8619,7 @@
7610
8619
  "noParen": "(없음)",
7611
8620
  "keepOldDb": "(오래된 DB를 유지)",
7612
8621
  "ufwNotDetected": "이 호스트에서는 UFW가 감지되지 않습니다.",
7613
- "fail2banStartHint": "Fail2ban 페이지에서 시작하세요",
8622
+ "fail2banStartHint": "fail2ban 페이지에서 시작하세요",
7614
8623
  "hasExecuteNotRoot": "EXECUTE가 켜져 있지만 프로세스가 루트가 아닙니다.",
7615
8624
  "notRootTarget": "루트가 아님(대상 사용자add/apt가 차단됨)",
7616
8625
  "reapplyDone": "주요 단계 재적용 완료",
@@ -7777,7 +8786,10 @@
7777
8786
  "accessReconnectHint": "이미 연결된 클라이언트는 새 경로를 선택하려면 다시 연결해야 합니다.",
7778
8787
  "ovpnNatDurable": "재부팅을 위해 OpenVPN NAT/forward가 설치되었습니다(systemd ExecStartPost).",
7779
8788
  "clientFullTunnelProtect": "전체 터널 클라이언트가 감지되었습니다(AllowedIPs 0.0.0.0/0). 패널/SSH 응답이 LAN NIC에 유지되도록 호스트 보호를 적용했습니다.",
7780
- "clientFullTunnelHint": "팁: 분할 액세스의 경우에만 conf에서 AllowedIP를 VPN/LAN CIDR(0.0.0.0/0 아님)로 설정한 다음 다시 연결하세요."
8789
+ "clientFullTunnelHint": "팁: 분할 액세스의 경우에만 conf에서 AllowedIP를 VPN/LAN CIDR(0.0.0.0/0 아님)로 설정한 다음 다시 연결하세요.",
8790
+ "serverStopped": "{{engine}} 서버가 중지되었습니다.",
8791
+ "serverStopFailed": "중지할 수 없습니다. {{engine}} 서버: {{detail}}",
8792
+ "peersSynced": "Peer list reloaded on the running WireGuard interface."
7781
8793
  },
7782
8794
  "vnc": {
7783
8795
  "needInstall": "설치 {{stack}}",
@@ -7871,7 +8883,21 @@
7871
8883
  "clientDeleted": "고객 프로필이 삭제되었습니다.",
7872
8884
  "sessionStartCwd": "VNC 시작 실패: 세션 사용자가 작업 디렉터리에 액세스할 수 없습니다(표시 :{{display}}). HOME에서 시작하여 수정되었습니다.",
7873
8885
  "desktopRestarted": "데스크톱 프로필이 적용되고 세션이 다시 시작되었습니다({{desktop}}). VNC/noVNC를 다시 연결합니다.",
7874
- "desktopNeedsStart": "데스크탑 프로필 {{desktop}}가 xstartup에 기록되었습니다. 신청하려면 세션을 시작하세요."
8886
+ "desktopNeedsStart": "데스크탑 프로필 {{desktop}}가 xstartup에 기록되었습니다. 신청하려면 세션을 시작하세요.",
8887
+ "passwordNeedTiger": "vncpasswd를 찾을 수 없습니다. 비밀번호를 설정하기 전에 TigerVNC(tigervnc-standalone-server)를 설치하세요.",
8888
+ "linuxUserRolledBack": "VNC 비밀번호 실패 후 남은 Linux 사용자 {{user}}를 제거했습니다.",
8889
+ "linuxUserOrphan": "VNC 비밀번호 실패 후 남은 Linux 사용자 {{user}}를 제거할 수 없습니다.",
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": "서버 이름이 필요합니다",
@@ -7921,7 +8947,110 @@
7921
8947
  "startedDetached": "BT 추적기 분리 작업자 시작됨(pid {{pid}}, 포트 {{port}})",
7922
8948
  "runningDetached": "분리된 작업자로 실행되는 추적기(pid {{pid}})",
7923
8949
  "jobQueued": "BT 토렌트 생성 대기 중(큰 공유)",
7924
- "jobRunning": "BT 토렌트 생성 실행 중"
8950
+ "jobRunning": "BT 토렌트 생성 실행 중",
8951
+ "libraryAdded": "WebTorrent 라이브러리에 {{name}}를 추가했습니다.",
8952
+ "libraryInspectFailed": "해당 .torrent 또는 자석을 읽을 수 없습니다.",
8953
+ "libraryDup": "해당 토렌트는 이미 라이브러리에 있습니다.",
8954
+ "libraryDestBad": "저장 폴더는 유효한 파일 경로가 아닙니다.",
8955
+ "libraryTorrentTooBig": ".torrent 파일이 8MiB보다 큽니다.",
8956
+ "libraryNotFound": "라이브러리 항목을 찾을 수 없습니다.",
8957
+ "libraryPaused": "일시중지됨",
8958
+ "libraryResumed": "재개됨",
8959
+ "libraryRemoved": "라이브러리에서 삭제됨",
8960
+ "libraryFilesRemoved": "다운로드한 파일을 삭제했습니다.",
8961
+ "libraryRestoreDone": "라이브러리 복원: 시작됨 {{started}}/{{attempted}}(실패함 {{failed}})",
8962
+ "applyTrackersDone": "{{n}} 실시간 발표 슬롯에 추가 추적기를 적용했습니다.",
8963
+ "libraryNeedServe": "저장되었습니다. WebTorrent가 다운로드하거나 시드할 수 있도록 패널(ysk-serverserv)을 엽니다.",
8964
+ "libraryDestIsFile": "{{name}}이라는 폴더를 만들 수 없습니다. 해당 이름의 파일이 이미 존재합니다.",
8965
+ "librarySeedMissing": "해당 폴더에 시드할 일치하는 파일이 없습니다.",
8966
+ "libraryWaitingPeers": "동료를 기다리고 있습니다. 파일이 이미 이 호스트에 있는 경우 다시 추가하고 시드-기존을 선택합니다."
8967
+ },
8968
+ "leftover": {
8969
+ "staleCliTitle": "오래된 남은 CLI",
8970
+ "staleCli": "남은 CLI가 여전히 존재합니다: {{path}}(실행 중인 제품 {{version}}). PATH가 이를 선호할 수도 있습니다. 제거 방법: rm -f {{path}}",
8971
+ "apacheDefaultTitle": "Apache 남은 기본 사이트",
8972
+ "apacheDefault": "Apache 000-default는 여전히 활성화되어 있습니다. 이는 스톡 사이트 파일입니다. 이는 Apache가 공개 :80(YSK Apache는 127.0.0.1:8080에서 예상됨)을 수신한다는 의미는 아닙니다. 오버레이는 이를 비활성화하지 않습니다. 패널에서 Apache를 적용하거나 Apache를 호스팅하여 --execute를 적용합니다.",
8973
+ "nginxCatchAllTitle": "Nginx 포괄 기능이 누락되었습니다.",
8974
+ "nginxCatchAll": "ysk-000-default.conf가 /etc/nginx/conf.d에 없습니다. 알 수 없는 SNI가 실패할 수 있습니다. 프로젝트 nginx-sync --execute를 실행합니다.",
8975
+ "vsftpdTitle": "vsftpd 장치 실패",
8976
+ "vsftpd": "vsftpd가 실패했습니다. 오버레이는 Listen/listen_ipv6을 다시 작성하지 않습니다. 패널에서 FTP를 적용합니다.",
8977
+ "dovecotTitle": "누락된 인증서를 가리키는 Dovecot TLS",
8978
+ "dovecot": "Dovecot ssl_cert가 {{path}} 누락을 가리킵니다. 오버레이는 ssl=no를 다시 쓰지 않습니다. 인증서 발급 후 메일 TLS를 적용하거나 이메일 스택을 적용하세요.",
8979
+ "overlayDoesNotHeal": "제품 오버레이는 nginx, Apache, vsftpd 또는 Dovecot을 다시 작성하지 않습니다. 나열된 적용 명령(root + YSK_EXECUTE=1)을 사용합니다.",
8980
+ "readinessTitle": "오버레이 후 호스트 남은 부분",
8981
+ "readinessClean": "남은 Apache 기본값이 없거나 nginx catch-all이 누락되었거나 vsftpd가 실패했거나 오래된 CLI가 감지되었습니다.",
8982
+ "staleCliRemoved": "잔여 CLI {{path}}을(를) 제거했습니다.",
8983
+ "staleCliRemoveFailed": "잔여 CLI {{path}}을(를) 제거하지 못했습니다: {{detail}}",
8984
+ "vsftpdSslOff": "FTPS 인증서 파일이 없어 vsftpd를 ssl_enable=NO로 설정한 뒤 다시 시작했습니다.",
8985
+ "dovecotSslOff": "{{path}}이(가) 없어 Dovecot을 ssl=no로 설정한 뒤 다시 시작했습니다.",
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": "자식이 PATH에 없습니다",
8997
+ "auth": "인증에 실패했습니다. 배포 키 또는 HTTPS 토큰을 추가합니다.",
8998
+ "hostkey": "SSH 호스트 키 확인에 실패했습니다. 호스트 키를 확인하고 고정하세요.",
8999
+ "dirty": "작업 트리에는 {{count}} 로컬 변경 사항이 있습니다. 당기기가 차단되었습니다.",
9000
+ "diverged": "빨리감기를 할 수 없습니다. 로컬 Git 기록을 삭제하려면 원격 참조로 재설정하세요.",
9001
+ "missingRef": "해당 분기, 태그 또는 커밋이 원격에 없습니다.",
9002
+ "shallow": "이 클론은 얕습니다. 이전 커밋을 고정하기 전에 전체 기록을 가져오세요.",
9003
+ "notRepo": "app/은 아직 Git 저장소가 아닙니다.",
9004
+ "unrelated": "관련 없는 역사. 확인 후에만 다시 복제하십시오. 사용자 정의 파일은 손실됩니다.",
9005
+ "lock": "Git index.lock이 존재합니다. git 프로세스가 실행되고 있지 않은 경우에만 제거하십시오.",
9006
+ "disk": "디스크가 가득 찼거나 할당량이 초과되었습니다.",
9007
+ "timeout": "힘내 시간이 초과되었습니다.",
9008
+ "network": "리모컨과 통신 중 네트워크 오류가 발생했습니다.",
9009
+ "lfs": "이 저장소는 Git LFS를 사용하며 git-lfs는 사용할 수 없습니다.",
9010
+ "submodule": "하위 모듈 업데이트에 실패했습니다.",
9011
+ "unknown": "Git이 실패했습니다. 명령 출력을 참조하세요.",
9012
+ "fetchOk": "원본에서 가져왔습니다.",
9013
+ "checkoutOk": "{{ref}}를 확인했습니다.",
9014
+ "resetOk": "{{ref}}로 하드 재설정하세요.",
9015
+ "envRestored": "제어 영역에서 app/.env를 복원했습니다.",
9016
+ "needPinHost": "SSH 호스트 키가 고정되지 않았습니다. 복제하거나 가져오기 전에 스캔하고 고정하세요.",
9017
+ "tokenSaved": "HTTPS 토큰이 저장되었습니다(다시 표시되지 않음).",
9018
+ "tokenCleared": "HTTPS 토큰이 제거되었습니다.",
9019
+ "tokenInvalid": "토큰은 8자 이상이어야 합니다.",
9020
+ "deployKeyCreated": "배포 키가 생성되었습니다. Git 호스트에 공개 키를 추가합니다.",
9021
+ "deployKeyCleared": "이 프로젝트에서 분리된 키를 배포합니다.",
9022
+ "hostPinned": "{{host}}에 대한 SSH 호스트 키가 고정되었습니다.",
9023
+ "hostUnpinned": "고정된 SSH 호스트 키를 삭제했습니다.",
9024
+ "hostScanFailed": "ssh-keyscan은 해당 호스트에 대해 키를 반환하지 않았습니다.",
9025
+ "hookEnabled": "인바운드 Git 후크가 켜져 있습니다. URL을 GitHub, Gitea 또는 GitLab에 직접 붙여넣으세요.",
9026
+ "hookDisabled": "인바운드 Git 후크가 꺼져 있습니다. URL은 동기화되지 않습니다.",
9027
+ "hookSecretOnce": "지금 이 후크 비밀을 복사하세요. 다시 표시되지 않습니다.",
9028
+ "refsNeedUrl": "먼저 Git URL을 입력하세요.",
9029
+ "refsOk": "{{branches}} 브랜치 및 {{tags}} 태그가 로드되었습니다.",
9030
+ "refsEmpty": "원격에 분기나 태그가 없음을 알렸습니다.",
9031
+ "diffEmpty": "단계적이지 않은 diff가 없습니다(보호된 .env는 제외됨)."
9032
+ },
9033
+ "migrate": {
9034
+ "orphanConfirm": "삭제를 확인하려면 남은 홈 경로를 정확하게 입력하세요.",
9035
+ "orphanStillInStore": "그 집은 여전히 ​​상점의 프로젝트에 속해 있습니다.",
9036
+ "orphanMissing": "디스크에 없는 경로: {{path}}",
9037
+ "orphanNeedExecute": "남은 {{path}}을 제거하겠습니다. YSK_EXECUTE=1이 필요합니다.",
9038
+ "orphanRmFailed": "남은 집을 제거할 수 없습니다: {{detail}}",
9039
+ "orphanRemoved": "남은 프로젝트 홈 {{path}}을 제거했습니다."
9040
+ },
9041
+ "defense": {
9042
+ "panelReqLabel": "패널 요청/분",
9043
+ "panelReqExcluded": "인증된 패널 트래픽 - 여기에 표시되지만 위협 점수에는 포함되지 않습니다.",
9044
+ "tcpOk": "TCP {{target}} 도달 가능",
9045
+ "tcpFail": "TCP {{target}} 실패",
9046
+ "dnsDegraded": "DNS 경로 성능 저하",
9047
+ "reqRateHigh": "공개 요청 비율 {{reqs}}/분 ≥ {{threshold}}",
9048
+ "ddosHeuristic": "높은 공개 요청률과 에지 프로브 실패"
9049
+ },
9050
+ "publicFiles": {
9051
+ "liveConf": "적용 중인 Nginx 설정: {{path}}",
9052
+ "publicRoot": "공개 루트: {{path}}",
9053
+ "confNameStale": "설정 파일 {{file}}이(가) 현재 server_name {{serverName}}과(와) 일치하지 않습니다. 공개 파일을 다시 적용해 이름을 바꾸세요."
7925
9054
  }
7926
9055
  },
7927
9056
  "ops": {
@@ -8023,7 +9152,7 @@
8023
9152
  },
8024
9153
  "security-units": {
8025
9154
  "name": "보안 유닛",
8026
- "description": "Fail2ban + sshd 상태(읽기 전용)"
9155
+ "description": "fail2ban + sshd 상태(읽기 전용)"
8027
9156
  },
8028
9157
  "web-stack-status": {
8029
9158
  "name": "웹 스택 상태",
@@ -8103,7 +9232,7 @@
8103
9232
  "created": "생성됨",
8104
9233
  "os": "OS 사용자",
8105
9234
  "deploy": "배포",
8106
- "nginx": "Nginx",
9235
+ "nginx": "엔진엑스",
8107
9236
  "health": "건강"
8108
9237
  },
8109
9238
  "next": {
@@ -8113,7 +9242,8 @@
8113
9242
  "deployTitle": "다음: 배포",
8114
9243
  "deployBody": "헤더의 배포를 사용하거나 Git의 배포 탭을 사용하세요.",
8115
9244
  "nginxTitle": "다음: Nginx 게시",
8116
- "nginxBody": "네트워크 탭을 열어 Nginx(SSL 옵션)를 게시하세요."
9245
+ "nginxBody": "네트워크 탭을 열어 Nginx(SSL 옵션)를 게시하세요.",
9246
+ "provisionOsAction": "Create system user"
8117
9247
  },
8118
9248
  "healthDetail": {
8119
9249
  "none": "아직 건강검진이 없습니다",
@@ -8123,7 +9253,12 @@
8123
9253
  "httpStatus": "HTTP",
8124
9254
  "latency": "숨어 있음",
8125
9255
  "error": "오류",
8126
- "at": "확인 시간"
9256
+ "at": "확인 시간",
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 / 사이트",
8129
9264
  "railStatic": "정적 사이트",
@@ -8556,12 +9691,12 @@
8556
9691
  "php": "PHP",
8557
9692
  "node": "Node.js",
8558
9693
  "static": "공전",
8559
- "python": "Python",
8560
- "go": "Go",
8561
- "rust": "Rust",
8562
- "java": "Java",
8563
- "kotlin": "Kotlin",
8564
- "bun": "Bun"
9694
+ "python": "파이썬",
9695
+ "go": "가다",
9696
+ "rust": "",
9697
+ "java": "자바",
9698
+ "kotlin": "코틀린",
9699
+ "bun": "혈액 요소 질소"
8565
9700
  },
8566
9701
  "netCacheTitle": "은닉처",
8567
9702
  "logsDeepAccess": "로그센터 · 접속",
@@ -8598,16 +9733,132 @@
8598
9733
  "netPublishMaint": "유지",
8599
9734
  "sslNeedDomain": "Nginx/SSL을 게시하기 전에 도메인을 설정하세요.",
8600
9735
  "createTemplateMissing": "{{v0}} ;「— —」。",
8601
- "deleteDialogDesc": "「{{v0}}」。。",
9736
+ "deleteDialogDesc": "「{{name}}」。。",
8602
9737
  "deleteWillStop": "시스템 / PM2 /",
8603
9738
  "deleteWillWeb": "Nginx conf, PHP-FPM 풀, Apache 가상 호스트()",
8604
9739
  "deleteWillOs": "리눅스 홈 ()",
8605
9740
  "deleteKeepOs": "홈 리눅스 ()",
8606
9741
  "deleteWillDb": "…",
8607
9742
  "deleteRemoveFilesDesc": "취소,",
8608
- "deleteTypeNameHint": "「{{v0}}」",
9743
+ "deleteTypeNameHint": "「{{name}}」",
8609
9744
  "deleteDnsWarn": "DNS 영역/도메인 。",
8610
- "manageInNginx": "Nginx에서 관리"
9745
+ "manageInNginx": "Nginx에서 관리",
9746
+ "advFtpHomeApp": "사이트 app 디렉터리",
9747
+ "advFtpHomeRoot": "프로젝트 홈(전체)",
9748
+ "advFtpManage": "FTP 페이지 열기",
9749
+ "listDesc": "이 호스트에서 사이트를 관리하세요.",
9750
+ "resShell": "로그인 쉘",
9751
+ "resSaveHint": "라이브 OS의 변경 사항을 저장하고 적용합니다. 제어 영역은 양식만 저장합니다. 다시 적용하면 마지막으로 저장된 값이 사용됩니다.",
9752
+ "resBashConfirmTitle": "대화형 bash를 허용하시겠습니까?",
9753
+ "resBashConfirmDesc": "그러면 프로젝트 사용자에게 대화형 로그인 셸이 부여됩니다. 해당 사용자로 SSH 또는 PTY가 필요한 경우에만 확인하세요.",
9754
+ "noPathSepHint": "이름에는 / 또는 \\가 포함될 수 없습니다.",
9755
+ "createGitHint": "선택 과목. 프로젝트에 저장됩니다. 배포 탭에서 복제합니다(생성 시 복제되지 않음).",
9756
+ "gitBranch": "나뭇가지",
9757
+ "gitBranchHint": "Branch or tag. Empty uses the remote default. First clone is shallow (depth 1).",
9758
+ "gitLastRef": "마지막 동기화: {{branch}} @ {{commit}}",
9759
+ "gitConfirmTitle": "이 프로젝트에 복제하시겠습니까?",
9760
+ "gitConfirmBody": "app/이 여전히 Hello World 자리 표시자인 경우 지워진 다음 복제됩니다. YSK 스캐폴드가 아닌 사용자 정의 파일은 거부됩니다.",
9761
+ "runtimeActual": "실제 바이너리 {{path}}",
9762
+ "gitConfirmRemoteBody": "이는 새 URL의 출처를 가리키고 가져옵니다. 관련되지 않은 기록은 실패합니다. 사용자 정의 파일은 지워지지 않습니다.",
9763
+ "runtimeFallback": "선택된 {{version}}은(는) 이 호스트에 없습니다. 프로세스는 {{path}}을 사용합니다.",
9764
+ "gitSync": "동조",
9765
+ "gitFetch": "술책",
9766
+ "gitCheckout": "점검",
9767
+ "gitReset": "원격으로 재설정",
9768
+ "gitDeepen": "전체 기록 가져오기",
9769
+ "gitLogTitle": "최근 커밋",
9770
+ "gitDirtyTitle": "로컬 변경 블록 풀",
9771
+ "gitDirtyBody": "{{count}} 파일이 Git(파일 편집 또는 앱)과 다릅니다. 이를 폐기하거나 중단하십시오.",
9772
+ "gitDiscard": "로컬 파일 삭제",
9773
+ "gitOpenFiles": "파일에서 열기",
9774
+ "gitNotCloned": "복제되지 않음",
9775
+ "gitClean": "깨끗한",
9776
+ "gitDirty": "더러운",
9777
+ "gitBehind": "뒤에 {{count}}",
9778
+ "gitAhead": "앞으로 {{count}}",
9779
+ "gitDetached": "고정됨",
9780
+ "gitShallow": "얕은",
9781
+ "gitMissing": "자식이 없어",
9782
+ "gitResetConfirmTitle": "원격으로 하드 재설정하시겠습니까?",
9783
+ "gitResetConfirmBody": "이렇게 하면 로컬 Git 기록과 .env를 제외한 추적되지 않는 파일이 삭제되고 제어 플레인에서 .env가 복원됩니다.",
9784
+ "gitHeads": "원격 지점",
9785
+ "gitToken": "HTTPS 토큰",
9786
+ "gitTokenHint": "Personal access token. Stored encrypted; never written into the remote URL.",
9787
+ "gitTokenPlaceholder": "ghp_… 또는 glpat-…",
9788
+ "gitTokenSet": "토큰 세트",
9789
+ "gitSaveToken": "토큰 저장",
9790
+ "gitClearToken": "토큰 지우기",
9791
+ "gitDeployKey": "공개 키 배포",
9792
+ "gitDeployKeyHint": "이를 Git 호스트에 읽기 전용 배포 키로 추가하세요.",
9793
+ "gitDeployKeyOn": "키 배포",
9794
+ "gitMakeKey": "배포 키 생성",
9795
+ "gitCopyPub": "공개 키 복사",
9796
+ "gitClearKey": "배포 키 지우기",
9797
+ "gitKeyCopied": "공개 키가 복사되었습니다.",
9798
+ "gitPinHost": "호스트 키 고정",
9799
+ "gitPinHostBody": "{{host}}이 고정되지 않았습니다. 지문을 확인한 다음 SSH 복제 전에 고정하세요.",
9800
+ "gitHostUnpinned": "호스트 키가 고정되지 않음",
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": "비밀 순환",
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": "비밀 복사",
9811
+ "gitHookCopied": "복사됨",
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": "HTTPS 토큰",
9819
+ "gitAuthSsh": "SSH 배포 키",
9820
+ "gitLoadRefs": "브랜치 로드",
9821
+ "gitRefDefault": "원격 기본값",
9822
+ "gitRefBranches": "지점",
9823
+ "gitRefTags": "태그",
9824
+ "gitRefOther": "기타 참고…",
9825
+ "gitRefCustom": "커밋 또는 참조",
9826
+ "gitRefsNeedUrl": "먼저 URL을 입력하세요.",
9827
+ "gitRefsNeedAuth": "토큰 또는 배포 키를 저장한 다음 분기를 로드하세요.",
9828
+ "gitRefsHint": "리모콘에서 로드되었습니다. 하나를 선택하십시오. 입력하지 마십시오.",
9829
+ "gitHookSetupToggle": "이것을 붙여넣는 방법",
9830
+ "gitHookOneLiner": "HMAC 또는 X-YSK-Git-Hook. 이 프로젝트의 심판만 해당됩니다.",
9831
+ "gitHookExecuteHint": "복제하거나 배포하려면 YSK_EXECUTE=1이 필요합니다.",
9832
+ "gitShowKey": "키 표시",
9833
+ "gitHideKey": "숨다",
9834
+ "gitBehindShort": "↓{{count}}",
9835
+ "gitAheadShort": "↑{{count}}",
9836
+ "gitDirtyShort": "더러운 · {{count}}",
9837
+ "gitFilesLink": "파일",
9838
+ "gitTokenLaterHint": "HTTPS 토큰 및 복제 깊이는 생성 후 프로젝트 배포 탭에서 설정됩니다.",
9839
+ "netForceHttpsOn": "Edge를 게시하면 HTTP가 HTTPS로 리디렉션됩니다.",
9840
+ "netForceHttpsOff": "강제 리디렉션이 저장되지 않습니다.",
9841
+ "netHttpsLiveNotForced": "Edge 파일이 존재합니다. HTTPS가 이미 작동할 수도 있습니다. 이 상자는 HTTP→HTTPS만 강제합니다.",
9842
+ "gitSyncBlockedDirty": "로컬 변경 사항이 삭제되거나(재설정) 파일이 Git과 일치할 때까지 동기화가 비활성화됩니다.",
9843
+ "gitViewDiff": "차이점 보기",
9844
+ "gitBranchAfterUrl": "먼저 Git URL을 입력하세요. 비우면 원격 기본 분기를 사용합니다.",
9845
+ "gitResetNeedConfirm": "확인 필요 — 로컬 커밋을 버립니다",
9846
+ "openUrlNeedDomain": "먼저 도메인을 설정하세요. 브라우저에서 127.0.0.1을 열지 마세요.",
9847
+ "needOsUser": "먼저 격리 탭에서 시스템 사용자를 생성합니다.",
9848
+ "stopTitle": "이 프로젝트를 중지하십시오(시스템 장치 및 공개 사이트).",
9849
+ "deployTitle": "이 프로젝트 배포",
9850
+ "httpStatsHint": "이 프로젝트의 액세스 로그에서(마지막 샘플)",
9851
+ "httpStatsNone": "아직 프로젝트 액세스 로그가 없습니다.",
9852
+ "statStoppedOnly": "중지됨",
9853
+ "statReadyOnly": "준비됨",
9854
+ "netBoundCert": "바인딩된 인증서",
9855
+ "netBoundCertExpiry": "만료 {{at}}",
9856
+ "netNoBoundCert": "이 호스트 이름의 인증서가 디스크에 없습니다",
9857
+ "netForceHttpsNeedCert": "HTTPS를 강제하기 전에 /ssl에서 이 도메인 인증서를 발급하세요.",
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": "호스트에 적용되지 않음(루트 + YSK_EXECUTE=1 필요) - 패널 설정에 저장됨",
8643
9894
  "nginxWritten": "Nginx 속도 제한 패널 파일 작성",
8644
- "f2bWritten": "Fail2ban 패널 설정을 작성했습니다."
9895
+ "f2bWritten": "fail2ban 패널 설정을 작성했습니다.",
9896
+ "hintDropped": "Internal protection hint omitted",
9897
+ "nginxLimits": "Will write Nginx rate-limit snippet"
8645
9898
  },
8646
9899
  "rel": {
8647
9900
  "justNow": "방금",
@@ -8740,7 +9993,7 @@
8740
9993
  "signalDdos": "DDoS 휴리스틱",
8741
9994
  "signalTcp": "TCP 연결",
8742
9995
  "signalUfwOff": "UFW 꺼짐",
8743
- "signalF2bBans": "Fail2ban 금지 횟수",
9996
+ "signalF2bBans": "fail2ban 금지 횟수",
8744
9997
  "weightHint": "{{label}} 가중치 0–3",
8745
9998
  "detected": "(감지됨)",
8746
9999
  "notSet": "(설정되지 않음)",
@@ -8900,13 +10153,13 @@
8900
10153
  "alreadyBanned": "금지됨",
8901
10154
  "whitelist": "화이트리스트",
8902
10155
  "bansWorkflow": "대응: 용의자 목록 → 금지/금지 해제. 감옥 정책, IP 무시, 서비스 수명 주기:",
8903
- "f2bTool": "Fail2ban 도구",
10156
+ "f2bTool": "fail2ban 도구",
8904
10157
  "noSecondJail": "(여기에는 두 번째 감옥 편집자가 없습니다).",
8905
10158
  "autoBanWhitelistTitle": "자동 차단 허용 목록",
8906
10159
  "autoBanWhitelistDesc": "보호 자동 차단 예외(fail2banignoreip 동기화)",
8907
10160
  "ignoreipWhitelist": "IP 허용 목록 무시",
8908
10161
  "notSetSuggestAdmin": "설정되지 않음(관리자 IP 추가)",
8909
- "moreItems": "… {{n}} 더보기 · Fail2ban 허용 목록 참조",
10162
+ "moreItems": "… {{n}} 더보기 · fail2ban 허용 목록 참조",
8910
10163
  "add": "추가하다",
8911
10164
  "manualBanTitle": "수동 차단",
8912
10165
  "methodFollows": "방법은 위의 선택을 따릅니다(fail2ban / UFW).",
@@ -8955,7 +10208,69 @@
8955
10208
  "plusRegion": "+ 지역 {{v}}",
8956
10209
  "plusCity": "+ 도시 {{v}}",
8957
10210
  "lastTickPrefix": "· 마지막 {{t}}",
8958
- "nextTickPrefix": "· 다음 {{t}}"
10211
+ "nextTickPrefix": "· 다음 {{t}}",
10212
+ "stackApply": "보호 스택 적용(UFW, Fail2ban, 사전 설정)",
10213
+ "stackApplyDone": "보호 스택 적용이 요청되었습니다.",
10214
+ "stackApplyHint": "이렇게 하면 UFW가 활성화되고 Fail2ban과 제안된 사전 설정이 적용됩니다. 원격 패널에서 자신을 잠그지 않을 것인지 확인하십시오.",
10215
+ "cannotBanSelf": "{{ip}}는 차단할 수 없습니다 — 호스트, 로그인 IP 또는 ignoreip입니다",
10216
+ "selfIp": "이 호스트",
10217
+ "selfHostIp": "호스트 IP",
10218
+ "selfLoginIp": "귀하의 로그인 IP",
10219
+ "showZeroScore": "0점 표시",
10220
+ "hideZeroScore": "0점 숨기기",
10221
+ "freshnessNa": "해당사항 없음",
10222
+ "geoDraftOnly": "정책이 꺼져 있습니다. 저장은 초안만 씁니다. 켜기 전까지 Nginx는 적용하지 않습니다.",
10223
+ "selectAllCountriesWarn": "차단 목록에서 모든 국가를 선택할까요? 이 호스트와 로그인 국가도 막힐 수 있습니다.",
10224
+ "badgeRecommendPreset": "현재 위협 수준에는 더 강한 프리셋을 권장합니다",
10225
+ "badgeAutomationOn": "자동화가 켜져 있습니다",
10226
+ "badgeBanCount": "현재 차단 수",
10227
+ "badgeGeoOn": "Geo 접근 정책이 켜져 있습니다",
10228
+ "badgeGeoNotReady": "GeoIP 데이터베이스가 준비되지 않았습니다",
10229
+ "badgeIntelSignals": "지금 점수에 더해지는 신호 수",
10230
+ "signalActive": "동작 중",
10231
+ "signalInactive": "비활성",
10232
+ "signalJails": "jail {{n}}개",
10233
+ "dbReadyHint": "MMDB 파일이 있습니다",
10234
+ "dbNotReadyHint": "먼저 GeoIP 데이터베이스를 받으세요",
10235
+ "staleHint": "마지막 성공 업데이트가 7일을 넘겼는지",
10236
+ "statSuspects": "의심되는 IP",
10237
+ "scoreBasisHint": "위협 점수는 방화벽, Fail2ban 금지 볼륨 및 요청 속도 신호를 사용하며 인텔 용의자 목록과 동일한 수는 아닙니다.",
10238
+ "geoNeedDb": "GeoIP 데이터베이스가 없습니다. 먼저 MMDB 파일을 업데이트하세요.",
10239
+ "colHits": "횟수",
10240
+ "col429": "429",
10241
+ "topIpsTitle": "상위 IP",
10242
+ "hitsCount": "{{n}}회",
10243
+ "sampleWindowHint": "횟수는 전체 로그가 아니라 현재 access + auth 샘플 창에서 나옵니다.",
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": "설정되지 않음",
@@ -8987,7 +10302,24 @@
8987
10302
  "diskRoot": "디스크 루트",
8988
10303
  "filesInRoot": "항목",
8989
10304
  "managedConf": "관리형 구성",
8990
- "systemConf": "시스템 구성"
10305
+ "systemConf": "시스템 구성",
10306
+ "notes": {
10307
+ "noManagedConf": "아직 관리되는 Nginx conf가 없습니다. 적용을 클릭하세요.",
10308
+ "notSynced": "관리되는 conf가 존재하지만 /etc/nginx/conf.d 아래에 있지 않습니다. YSK_EXECUTE를 사용하여 루트로 다시 적용합니다."
10309
+ },
10310
+ "autoindex": "디렉토리 목록(자동 색인)",
10311
+ "liveSystemConf": "실제 시스템 설정: {{path}}",
10312
+ "publicRootNote": "공개 루트: {{path}}",
10313
+ "applyConfirmTitle": "공개 파일 사이트를 적용할까요?",
10314
+ "applyConfirmDesc": "Nginx server_name {{name}}을(를) 쓰고 Nginx를 다시 로드합니다.",
10315
+ "serverNameMismatch": "실제 설정은 {{live}}이고 폼은 {{draft}}입니다. 적용하면 교체됩니다.",
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": "권한",
@@ -9071,7 +10403,13 @@
9071
10403
  "auditExport": "내보내기 감사",
9072
10404
  "securityApiKeysAdmin": "API 키 관리자",
9073
10405
  "networkBrowse": "호스트 중재 웹 탐색",
9074
- "networkVnc": "VNC 원격 데스크톱"
10406
+ "networkVnc": "VNC 원격 데스크톱",
10407
+ "validatorsRead": "검증자(읽기)",
10408
+ "validatorsManage": "검증자 관리",
10409
+ "validatorsWipe": "검증자 데이터 삭제",
10410
+ "dockerRead": "Docker(읽기)",
10411
+ "dockerManage": "Docker 관리",
10412
+ "dockerWipe": "Docker 삭제/정리"
9075
10413
  },
9076
10414
  "aboutRoles": "역할(공장 기본값)",
9077
10415
  "aboutRolesBody": "역할은 기본 기능을 설정합니다. 사용자는 개별 항목을 재정의할 수 있습니다.",
@@ -9087,7 +10425,14 @@
9087
10425
  "capabilitiesHint": "이 역할이 수행할 수 있는 작업 전환",
9088
10426
  "enabledCount": "{{total}} 중 {{enabled}} 활성화됨",
9089
10427
  "bandAboveMax": "최대 레벨 이상",
9090
- "dirtyHint": "맞춤형(공장마다 다름)"
10428
+ "dirtyHint": "맞춤형(공장마다 다름)",
10429
+ "unsaved": "저장되지 않음",
10430
+ "unsavedHint": "이 역할에 대한 저장되지 않은 수정사항",
10431
+ "nothingToSave": "저장할 항목이 없습니다.",
10432
+ "saveRole": "{{role}} 정책 저장",
10433
+ "discardTitle": "저장되지 않은 정책을 삭제하시겠습니까?",
10434
+ "discardDesc": "역할을 전환하면 저장되지 않은 기능 편집 내용이 삭제됩니다.",
10435
+ "roleUnavailable": "Not available for this role"
9091
10436
  },
9092
10437
  "readiness": {
9093
10438
  "cat": {
@@ -9161,7 +10506,7 @@
9161
10506
  "scMetrics": "호스트 측정항목",
9162
10507
  "scMetricsD": "로드 · 메모리 · 경고",
9163
10508
  "scProtection": "국방센터",
9164
- "scProtectionD": "대응 · UFW · Fail2ban",
10509
+ "scProtectionD": "대응 · UFW · fail2ban",
9165
10510
  "policyNote": "정책: 메일 PTR / 포트 25 / 등록자 DNS는 자동으로 완료되지 않습니다. HTTP 503 = 준비되지 않았지만 전체 보고서(가짜 성공 아님)",
9166
10511
  "notProbedTitle": "아직 조사되지 않음",
9167
10512
  "notProbedDesc": "읽기 전용 준비 상태 확인을 시작하려면 \"다시 프로브\"를 클릭하세요.",
@@ -9198,7 +10543,38 @@
9198
10543
  "fixNow": "지금 고치세요",
9199
10544
  "fixFailed": "수정 실패",
9200
10545
  "fixDone": "dataDir 권한 강화(chmod 750)",
9201
- "fixDoneWebUi": "웹 UI 구축/설치"
10546
+ "fixDoneWebUi": "웹 UI 구축/설치",
10547
+ "rootLabel": "수퍼유저",
10548
+ "exportStarted": "다운로드 중 {{name}}",
10549
+ "blockersHint": "「차단」은 「없음」의 핵심 부분집합이며 추가 검사가 아닙니다.",
10550
+ "techDetails": "기술적인 세부사항",
10551
+ "missingOwner": "할당된 패널 소유자 없음(패키지 할당량 속성)",
10552
+ "notOsProvisioned": "OS 사용자/홈이 아직 프로비저닝되지 않았습니다.",
10553
+ "ondrejNone": "ondrej Launchpad PHP 소스가 감지되지 않았습니다.",
10554
+ "ondrejFound": "packages.sury.org와 충돌하는 기존 ondrej/php 소스 발견: {{paths}}",
10555
+ "ondrejTitle": "PHP 적절한 소스(ondrej 잔여)",
10556
+ "systemctlActive": "서비스가 실행 중입니다.",
10557
+ "systemctlStatus": "서비스 상태: {{status}}",
10558
+ "binInPath": "PATH의 {{bin}}",
10559
+ "leftoverApache": "Apache 남은 기본 사이트",
10560
+ "leftoverVsftpd": "vsftpd 장치 실패",
10561
+ "leftoverCli": "오래된 남은 CLI",
10562
+ "leftoverNginx": "Nginx 포괄 기능이 누락되었습니다.",
10563
+ "leftoverDovecot": "누락된 인증서를 가리키는 Dovecot TLS",
10564
+ "leftoverOther": "호스트 남은 음식",
10565
+ "leftoverApply": "남은 적용",
10566
+ "isolationOwnerDegrades": "owner_user_id가 누락되면 패키지 할당량 특성에 영향을 미칩니다. 상태는 저하됨, 준비되지 않음입니다.",
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": "만료되지 않음",
@@ -9266,7 +10642,30 @@
9266
10642
  "pickKey": "콘텐츠를 보려면 왼쪽에 있는 키를 선택하세요.",
9267
10643
  "ttlPrefix": "TTL: {{ttl}}",
9268
10644
  "writeLiveHint": "라이브 Redis를 작성합니다. 한 번의 클릭으로 패널에서 실행 취소할 수 없습니다.",
9269
- "refPath": "참조: {{path}}"
10645
+ "refPath": "참조: {{path}}",
10646
+ "dbEmptyMark": " · 비어 있음",
10647
+ "noRequirepass": "보호 모드는 켜져 있지만 requirepass가 비었거나 읽히지 않았습니다 — 암호 없음.",
10648
+ "setRequirepass": "암호 설정",
10649
+ "rdbOnlyLossHint": "AOF 꺼짐, RDB 켜짐. 재시작이나 충돌 시 최근 쓰기가 유실될 수 있습니다.",
10650
+ "dirDataContainer": "/data(컨테이너)",
10651
+ "dirHostDefault": "/var/lib/redis",
10652
+ "dirDefaultInstance": "/var/lib/redis/default",
10653
+ "dirDataWarn": "/data는 일반적으로 컨테이너 경로입니다. 이 패널에서는 존재 여부를 확인할 수 없습니다.",
10654
+ "saveOff": "스냅샷 비활성화(권장되지 않음)",
10655
+ "saveOffWarn": "빈 저장 문자열은 RDB 스냅샷을 끕니다. AOF도 꺼져 있으면 충돌로 인해 모든 데이터가 손실될 수 있습니다.",
10656
+ "dirMoveWarn": "dir을 변경해도 dump.rdb / AOF는 이동되지 않습니다. 다음 시작에서는 새 경로를 그대로 사용합니다.",
10657
+ "passwordUnset": "서비스에 설정되지 않음",
10658
+ "passwordSetHidden": "설정(표시되지 않음)",
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": "생성됨",
@@ -9734,7 +11133,29 @@
9734
11133
  "projectsCount": "YSK 프로젝트",
9735
11134
  "noProjects": "프로젝트 없음",
9736
11135
  "noProjectsDesc": "패널에 노드/bun 프로젝트가 없거나 OS 사용자가 프로비저닝되지 않았습니다.",
9737
- "pm2OnlyDesc": "패널 사용자 아래에서 PM2로 시작된 앱만 해당됩니다. systemd 배포가 위에 나타납니다."
11136
+ "pm2OnlyDesc": "패널 사용자 아래에서 PM2로 시작된 앱만 해당됩니다. systemd 배포가 위에 나타납니다.",
11137
+ "startupTitle": "부팅 시 시작",
11138
+ "startupDesc": "PM2를 등록하면 재부팅 후 프로세스가 다시 시작됩니다.",
11139
+ "systemdActionsHint": "systemd 작업에는 루트와 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": "녹화됨 {{v}}",
9740
11161
  "remoteSourceSuffix": "({{source}})",
@@ -9788,7 +11209,32 @@
9788
11209
  "path": "길",
9789
11210
  "fullVersion": "정식 버전",
9790
11211
  "useListForDefaults": "호스트 또는 패널 기본값을 변경하거나 이 버전을 제거하려면 위 목록을 사용하십시오.",
9791
- "alreadyHostDefaultShort": "호스트 기본값"
11212
+ "alreadyHostDefaultShort": "호스트 기본값",
11213
+ "managedPathMissingTitle": "관리형 {{name}} 경로가 준비되지 않음",
11214
+ "managedPathMissing": "버전 {{version}}에 대한 YSK 관리 {{name}}가 준비되지 않았습니다. 다시 조사하거나 다시 설치하십시오.",
11215
+ "installRecordedCta": "설치 기록 {{v}}",
11216
+ "targetMissing": "대상 버전이 설치되지 않음",
11217
+ "targetMissingHint": "대상 {{version}}이(가) 이 호스트에 없습니다. 설치된 버전에 묶거나 이 핀을 설치하세요.",
11218
+ "needsInstall": "설치 필요",
11219
+ "needsInstallHint": "이 버전은 이 호스트에 없습니다. 먼저 설치하거나 설치된 버전을 고르세요.",
11220
+ "unitBytes": "바이트",
11221
+ "headerSizeKb": "{{n}}KB",
11222
+ "phpIniChipEmpty": "불러오지 않음 — php.ini 탭을 여세요",
11223
+ "phpFpmService": "PHP-FPM",
11224
+ "phpFpmServiceDesc": "PHP-FPM 유닛 시작, 중지, 다시 불러오기, 재시작",
11225
+ "rustupDefaultMissingTitle": "rustup 기본 툴체인이 없습니다",
11226
+ "rustupDefaultMissing": "rustup에 기본값이 없습니다. 소프트웨어 탭에서 stable을 설정하세요.",
11227
+ "rustupDefaultMissingShort": "기본 툴체인 없음",
11228
+ "rustupSetDefaultHint": "기본 툴체인 설정",
11229
+ "uninstalledCountHint": "{{n}}개 버전이 이 호스트에 없습니다",
11230
+ "applyPhpVhostTitle": "확인 필요 - 풀/가상 호스트 파일 쓰기",
11231
+ "applyPhpVhostDesc": "{{pool}} 풀과 {{domain}} 가상 호스트를 작성합니다. 서비스 새로고침: {{reload}}.",
11232
+ "binaryPath": "바이너리 경로",
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": "페이지 및 리소스 검색…",
@@ -9797,21 +11243,25 @@
9797
11243
  "loading": "수색…",
9798
11244
  "noResults": "일치하는 항목 없음",
9799
11245
  "kinds": {
9800
- "page": "Pages",
9801
- "project": "Projects",
9802
- "email": "Email",
9803
- "mailbox": "Mailboxes",
11246
+ "page": "페이지",
11247
+ "project": "프로젝트",
11248
+ "email": "이메일",
11249
+ "mailbox": "사서함",
9804
11250
  "ssl": "SSL",
9805
11251
  "dns": "DNS",
9806
- "nginx": "Nginx",
9807
- "share": "Shares",
11252
+ "nginx": "엔진엑스",
11253
+ "share": "주식",
9808
11254
  "ftp": "FTP",
9809
11255
  "mysql": "MySQL",
9810
11256
  "postgres": "PostgreSQL",
9811
- "redis": "Redis",
11257
+ "redis": "레디스",
9812
11258
  "cron": "Cron",
9813
- "user": "Users",
9814
- "other": "Other"
11259
+ "user": "사용자",
11260
+ "other": "다른"
11261
+ },
11262
+ "alias": {
11263
+ "ssl": "인증서 인증서 인증서",
11264
+ "projects": "프로젝트 사이트"
9815
11265
  }
9816
11266
  },
9817
11267
  "security": {
@@ -9835,7 +11285,7 @@
9835
11285
  "tabApiKeys": "API 키",
9836
11286
  "tabSsh": "SSH",
9837
11287
  "tabApprovals": "승인",
9838
- "tabAllowlist": "허용 목록",
11288
+ "tabAllowlist": "에이전트 도구",
9839
11289
  "apiTokenOnce": "API 토큰(한 번 표시됨):",
9840
11290
  "copiedToken": "토큰이 복사되었습니다.",
9841
11291
  "totpTitle": "2단계(TOTP)",
@@ -9919,8 +11369,8 @@
9919
11369
  "revokeAllDevices": "모든 기기 취소",
9920
11370
  "revokedAllDevices": "신뢰할 수 있는 모든 기기가 취소되었습니다.",
9921
11371
  "export2faBackup": "2FA 암호화 백업 내보내기",
9922
- "fail2banSnippetMsg": "Fail2ban 스니펫: {{written}} — {{notes}}",
9923
- "generateFail2ban": "Fail2ban 스니펫 생성",
11372
+ "fail2banSnippetMsg": "fail2ban 스니펫: {{written}} — {{notes}}",
11373
+ "generatefail2ban": "fail2ban 스니펫 생성",
9924
11374
  "adminPolicyTitle": "관리자 2FA 정책",
9925
11375
  "adminPolicyDesc": "",
9926
11376
  "requireAdmin2fa": "관리자 2FA 필요",
@@ -9940,8 +11390,8 @@
9940
11390
  "apiKeysEmpty": "아직 API 키가 없습니다.",
9941
11391
  "apiKeysEmptyHint": "도구 모음에서 생성하세요. 그런 다음 Bearer 토큰으로 API를 호출합니다.",
9942
11392
  "approve": "승인하다",
9943
- "allowlistTitle": "허용 목록({{count}})",
9944
- "allowlistEmpty": "허용 목록 도구 없음",
11393
+ "allowlistTitle": "에이전트 도구({{count}})",
11394
+ "allowlistEmpty": "카탈로그에 도구가 없습니다",
9945
11395
  "createApiKeyTitle": "API 키 생성",
9946
11396
  "createApiKeyDesc": "전체 토큰은 생성 후 한 번만 표시됩니다.",
9947
11397
  "createKeyBtn": "키 생성",
@@ -10183,7 +11633,23 @@
10183
11633
  "sharePanelTitle": "패널 TOTP 비밀을 공유하시겠습니까?",
10184
11634
  "sharePanelDesc": "위험. 확인하려면 SHARED를 입력하세요.",
10185
11635
  "confirmString": "확인 문자열",
10186
- "enableShare": "공유 활성화"
11636
+ "enableShare": "공유 활성화",
11637
+ "invalidPub": "OpenSSH 공개 키를 한 줄로 붙여 넣으세요(ssh-ed25519 / ssh-rsa / ecdsa…).",
11638
+ "dryRunOk": "미리보기가 끝났습니다. 아래 내용을 확인하세요.",
11639
+ "strictBlocked": "패키지 또는 PAM이 준비되지 않아 Strict 적용이 비활성화되었습니다.",
11640
+ "strictDryRun": "엄격 모드 미리보기",
11641
+ "errorNoDetail": "테스트 실패(상세 없음)",
11642
+ "privCloseWithoutAck": "닫은. 개인 키는 다시 표시되지 않습니다. 저장하지 않은 경우 새 것을 생성하십시오.",
11643
+ "loginNoProjects": "프로젝트가 없습니다. 아래에서 기존 Linux 사용자(루트/테스터)에게 권한을 부여하세요. /root/.ssh를 작성하려면 YSK_EXECUTE=1이 필요합니다.",
11644
+ "loginLinuxHint": "프로젝트가 없을 때 사용됩니다. 예: 루트 또는 테스터.",
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": "활성 세션",
10189
11655
  "sessionsOther": "기타 장치",
@@ -10206,7 +11672,52 @@
10206
11672
  "revokeOthersDesc": "{{count}} 다른 세션이 종료됩니다. 현재 브라우저는 로그인된 상태로 유지됩니다.",
10207
11673
  "sessionRevoked": "세션이 로그아웃되었습니다.",
10208
11674
  "mySecurityHint": "",
10209
- "policyTotpHint": "사이트 정책: 각 관리자는 자신의 2FA(개별 QR)를 활성화해야 합니다."
11675
+ "policyTotpHint": "사이트 정책: 각 관리자는 자신의 2FA(개별 QR)를 활성화해야 합니다.",
11676
+ "requireUser2fa": "모든 패널 사용자에게 2FA 요구",
11677
+ "generateFail2ban": "fail2ban 스니펫 생성",
11678
+ "changePasswordTitle": "로그인 비밀번호 변경",
11679
+ "currentPassword": "현재 비밀번호",
11680
+ "newPassword": "새 비밀번호",
11681
+ "confirmNewPassword": "새 비밀번호 확인",
11682
+ "passwordMismatch": "새 비밀번호가 일치하지 않습니다.",
11683
+ "changePassword": "비밀번호 변경",
11684
+ "passwordChanged": "비밀번호가 업데이트되었습니다.",
11685
+ "strictNeedsEnrolled": "Strict를 켜려면 관리자 2단계가 필요합니다.",
11686
+ "policyTotpNeedSelf": "먼저 이 계정에서 2단계를 사용하세요. 확인 코드를 입력할 수 없습니다.",
11687
+ "fail2banSnippetTitle": "fail2ban 스니펫",
11688
+ "fail2banSnippetEmpty": "스니펫이 기록되지 않았습니다.",
11689
+ "trustedDevicesTitle": "신뢰하는 기기",
11690
+ "noTrustedDevices": "신뢰하는 기기가 없습니다.",
11691
+ "strictConfirmTitle": "Strict 2단계를 켤까요?",
11692
+ "strictConfirmDesc": "2단계가 없는 사용자는 로그인할 수 없습니다. 사용 가능한 TOTP 또는 Passkey가 있는지 확인하세요.",
11693
+ "revokeDevicesTitle": "신뢰하는 기기를 취소할까요?",
11694
+ "revokeDevicesDesc": "기억된 브라우저는 다시 2단계가 필요합니다.",
11695
+ "approvalsHint": "고위험 도구에 두 번째 운영자 승인이 필요할 때 표시됩니다. 권한은 「사용자 → 권한」에서 설정합니다.",
11696
+ "allowlistReadonly": "에이전트 도구 카탈로그(읽기 전용). 능력 부여는 「사용자 → 권한」에서 설정합니다.",
11697
+ "colTool": "도구",
11698
+ "colAllowed": "허용",
11699
+ "colRisk": "위험",
11700
+ "colApproval": "승인",
11701
+ "risk": {
11702
+ "low": "낮음",
11703
+ "medium": "보통",
11704
+ "high": "높음",
11705
+ "critical": "심각"
11706
+ },
11707
+ "totpStatusLoadFailed": "2단계 상태를 불러오지 못했습니다",
11708
+ "confirmDeleteApiKey": "이 API 키를 삭제하시겠습니까?",
11709
+ "confirmDeleteApiKeyDesc": "'{{name}}'을 입력하면 인증이 중단됩니다. 이 작업은 취소할 수 없습니다.",
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": "API 세션",
11714
+ "revokeOtherTitle": "로그아웃 {{n}} 다른 세션",
11715
+ "policyNeedSelf2fa": "먼저 이 계정에서 2FA를 활성화한 다음 TOTP 코드로 확인하세요.",
11716
+ "revokeAllDevicesTitle": "기억된 모든 장치를 취소합니다. 귀하와 다른 관리자는 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": "네트워크 접속",
@@ -10215,8 +11726,8 @@
10215
11726
  "manageDesc": "호스트 방화벽에서 {{service}}에 접근할 수 있는 방법을 제어합니다.",
10216
11727
  "mode": "액세스 모드",
10217
11728
  "modePrivate": "로컬 전용",
10218
- "modePublic": "Public",
10219
- "modeRestricted": "Restricted",
11729
+ "modePublic": "공공의",
11730
+ "modeRestricted": "제한된",
10220
11731
  "summaryPrivate": "공용 방화벽에서는 열리지 않습니다.",
10221
11732
  "summaryPublic": "열려 있음 · {{ports}}",
10222
11733
  "summaryRestricted": "제한됨 · {{count}} 소스",
@@ -10224,9 +11735,9 @@
10224
11735
  "outOfSync": "동기화되지 않음",
10225
11736
  "firewallOff": "방화벽 꺼짐",
10226
11737
  "ufwMissing": "UFW가 설치되지 않았습니다",
10227
- "ufwInactive": "inactive",
10228
- "firewallLink": "Firewall",
10229
- "portsLabel": "Ports",
11738
+ "ufwInactive": "비활성",
11739
+ "firewallLink": "방화벽",
11740
+ "portsLabel": "포트",
10230
11741
  "allowFrom": "허용된 소스(IP/CIDR)",
10231
11742
  "allowCountries": "허용 국가(ISO)",
10232
11743
  "hintPrivate": "서비스는 여전히 localhost에서 수신 대기할 수 있습니다. 공개 UFW 허용 규칙이 없습니다.",
@@ -10237,7 +11748,19 @@
10237
11748
  "restrictedNeedSource": "제한 모드에 대한 IP/CIDR 또는 국가 코드를 하나 이상 추가하세요.",
10238
11749
  "privateStartTitle": "네트워크에 {{service}}를 노출하시겠습니까?",
10239
11750
  "confirmAndStart": "확인하고 시작하세요",
10240
- "cloudSgNote": "호스트 방화벽만 해당 - 클라우드 보안 그룹(AWS/GCP/Azure)은 변경되지 않습니다."
11751
+ "cloudSgNote": "호스트 방화벽만 해당 - 클라우드 보안 그룹(AWS/GCP/Azure)은 변경되지 않습니다.",
11752
+ "modeUndecided": "설정되지 않음",
11753
+ "modeLoading": "로드 중",
11754
+ "summaryUndecided": "액세스 모드가 확인되지 않았습니다(카탈로그 기본값: {{suggested}}).",
11755
+ "summaryNotEnforced": "방화벽이 꺼져 있습니다. 패널이 이러한 포트를 열거나 차단하지 않습니다.",
11756
+ "roleSmtp": "SMTP 제출",
11757
+ "roleImap": "IMAP/POP3 사서함",
11758
+ "serviceNotInstalled": "이 서비스는 설치되지 않았으므로 방화벽 규칙이 적용되지 않습니다.",
11759
+ "openButStopped": "포트가 열려 있음 - 서비스가 실행되고 있지 않음",
11760
+ "openNoTenants": "테넌트가 없는 공용 포트",
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": "부팅 시",
@@ -10245,8 +11768,27 @@
10245
11768
  "start": "시작",
10246
11769
  "stop": "멈추다",
10247
11770
  "restart": "다시 시작",
10248
- "reload": "새로고침"
10249
- },
11771
+ "reload": "새로고침",
11772
+ "enable": "부팅 시 사용",
11773
+ "disable": "부팅 시 사용 안 함"
11774
+ },
11775
+ "lifecycleTitle": "{{label}} 서비스 제어",
11776
+ "startedOk": "{{label}}을(를) 시작했습니다",
11777
+ "stoppedOk": "{{label}}을(를) 중지했습니다",
11778
+ "restartedOk": "{{label}}을(를) 재시작했습니다",
11779
+ "reloadedOk": "{{label}}을(를) 다시 불러왔습니다",
11780
+ "stopConfirmTitle": "{{label}}을(를) 중지할까요?",
11781
+ "stopConfirmDesc": "{{label}} 수신을 중지합니다. 필요하면 이 페이지에서 다시 시작하세요.",
11782
+ "stopConfirmEdgeDesc": "{{label}}을(를) 중지하면 사이트와 리버스 프록시가 다시 시작할 때까지 오프라인입니다.",
11783
+ "stopConfirmEdgeConsequence": "{{label}}이(가) 중지된 동안 이 호스트는 HTTP/HTTPS를 제공하지 않습니다.",
11784
+ "stopConfirmSshdTitle": "sshd를 중지할까요?",
11785
+ "stopConfirmSshdDesc": "sshd를 중지하면 원격 SSH가 끊깁니다. 콘솔 등 다른 로그인 경로가 있는지 확인하세요.",
11786
+ "stopConfirmSshdToken": "SSHD 중지",
11787
+ "stopConfirmSshdConsequence": "호스트 콘솔에서 sshd를 시작할 때까지 새 SSH 세션은 실패합니다.",
11788
+ "stopConfirmPanelTitle": "YSK Server를 중지할까요?",
11789
+ "stopConfirmPanelDesc": "호스트에서 유닛을 시작할 때까지 패널과 API가 오프라인입니다.",
11790
+ "stopConfirmPanelToken": "ysk 서버 중지",
11791
+ "stopConfirmPanelConsequence": "이 브라우저 세션이 끊깁니다. SSH 또는 호스트 콘솔에서 시작하세요.",
10250
11792
  "actionDone": "{{action}} 완료",
10251
11793
  "runningOf": "{{running}}/{{total}} 달리기",
10252
11794
  "canMutate": "변하기 쉬운",
@@ -10277,7 +11819,54 @@
10277
11819
  "protectionDoneNote": "보호 프로브 완료",
10278
11820
  "probeDone": "프로브 완료",
10279
11821
  "runProtection": "보호 프로브 실행",
10280
- "notProbedYet": "아직 조사되지 않음"
11822
+ "notProbedYet": "아직 조사되지 않음",
11823
+ "stopConfirmFail2banTitle": "Fail2ban을 중지하시겠습니까?",
11824
+ "stopConfirmFail2banDesc": "fall2ban을 중지하면 자동 IP 차단이 꺼집니다. 웹사이트와 SSH는 계속 실행됩니다.",
11825
+ "stopConfirmFail2banConsequence": "새로운 공격자는 Fail2ban이 다시 시작될 때까지 금지되지 않습니다.",
11826
+ "installOrOpen": "설치/열기",
11827
+ "statusFilter": {
11828
+ "all": "모든 주",
11829
+ "running": "달리기",
11830
+ "failed": "실패한",
11831
+ "missing": "미설치"
11832
+ },
11833
+ "stopNeedConfirm": "확인이 필요합니다",
11834
+ "stopNeedConfirmPhrase": "확인 문구를 입력해야 합니다",
11835
+ "enabledOk": "{{label}} 부팅 시 사용으로 설정됨",
11836
+ "bootDisabledWarn": "{{label}}이(가) 실행 중이지만 부팅 시 시작되지 않습니다. 재부팅 후에도 유지하려면 사용으로 설정하세요.",
11837
+ "bootDisabledShort": "부팅 시 아님",
11838
+ "mariadbNotInstalled": "MariaDB가 설치되지 않음",
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": "소프트웨어",
@@ -10368,7 +11957,8 @@
10368
11957
  "pick": "버전 선택",
10369
11958
  "noTarget": "업데이트 대상 없음",
10370
11959
  "needRuntimePage": "런타임 페이지에 이 버전을 설치하세요.",
10371
- "noAptCandidate": "적절한 후보 버전 없음"
11960
+ "noAptCandidate": "적절한 후보 버전 없음",
11961
+ "sourceLabel": "원천"
10372
11962
  },
10373
11963
  "install": {
10374
11964
  "progress": "설치 중: {{list}}…",
@@ -10467,14 +12057,24 @@
10467
12057
  "generic": "관련 서비스가 중단될 수 있습니다",
10468
12058
  "purgeData": "데이터 경로가 삭제됩니다.",
10469
12059
  "protectedSkipped": "보호된 구성 요소를 건너뜁니다.",
10470
- "runtimeStack": "이 런타임의 모든 패널 관리 버전이 삭제됩니다."
12060
+ "runtimeStack": "이 런타임의 모든 패널 관리 버전이 삭제됩니다.",
12061
+ "containers": "실행 중인 컨테이너가 중지됩니다",
12062
+ "validators": "Docker Compose를 쓰는 검증자 스택이 중지됩니다"
10471
12063
  },
10472
12064
  "requestCancel": "취소 요청",
10473
12065
  "cancelling": "취소 중…",
10474
12066
  "dockCancelling": "취소 중 · {{title}}",
10475
12067
  "dockCancelled": "취소됨 · {{title}}",
10476
12068
  "cancelHint": "취소를 요청했습니다. 클라이언트가 청취를 중단했습니다. 호스트는 현재 apt/step을 완료할 수 있습니다. 잠시 후 상태를 다시 조사해 보세요.",
10477
- "cancelledToast": "작업이 취소됨(클라이언트가 스트리밍을 중지함)"
12069
+ "cancelledToast": "작업이 취소됨(클라이언트가 스트리밍을 중지함)",
12070
+ "kindApply": "적용",
12071
+ "kindScan": "주사",
12072
+ "kindDeploy": "배포",
12073
+ "kindRuntime": "실행 시간",
12074
+ "jobDone": "완료 · {{title}}",
12075
+ "jobFailed": "실패 · {{title}}",
12076
+ "uninstallUfwWarn": "UFW를 제거하면 패널이 관리하는 포트 방화벽이 사라집니다.",
12077
+ "uninstallFail2banWarn": "fail2ban을 제거하면 jail이 멈추고 현재 차단이 해제됩니다. 유지하려면 먼저 로그인 IP를 ignoreip에 넣으세요."
10478
12078
  },
10479
12079
  "sqlEngineHealth": {
10480
12080
  "finding": {
@@ -10690,7 +12290,18 @@
10690
12290
  "requestDone": "인증서 요청이 완료되었습니다.",
10691
12291
  "requestFailed": "인증서 요청이 실패했습니다.",
10692
12292
  "applyFailed": "요청 실패",
10693
- "deletedCert": "삭제됨 {{domain}}"
12293
+ "deletedCert": "삭제됨 {{domain}}",
12294
+ "uninstallCertbotWarn": "certbot을 제거하면 기존 Let's Encrypt 인증서의 자동 갱신이 중지됩니다.",
12295
+ "renew": "고쳐 쓰다",
12296
+ "renewFor": "{{domain}}에 대한 Let’s Encrypt 갱신",
12297
+ "domainRequired": "도메인을 입력하세요.",
12298
+ "domainInvalid": "도메인 형식이 올바르지 않습니다.",
12299
+ "domainKnownHint": "알려진 프로젝트·DNS·메일 도메인에서 고르거나 직접 입력하세요.",
12300
+ "deleteNeedDomain": "이 인증서 삭제 - 도메인 이름을 입력하여 확인하세요.",
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": "퍼지를 확인하시겠습니까? 등록된 데이터 경로(데이터베이스/메일)가 영구적으로 삭제됩니다.",
@@ -10705,39 +12316,62 @@
10705
12316
  "componentsTitle": "설치할 구성 요소",
10706
12317
  "dryRun": "테스트 실행 미리보기",
10707
12318
  "installNow": "지금 설치",
10708
- "uninstallHint": "제거할 번들 선택",
12319
+ "uninstallHint": "제거할 번들을 선택하세요. 선택하지 않으면 제거할 수 없습니다. 데이터는 기본적으로 유지됩니다.",
10709
12320
  "dataPolicy": "데이터 정책",
10710
12321
  "keepData": "데이터 보관",
10711
12322
  "purgeData": "데이터 삭제",
10712
- "uninstallNow": "지금 제거"
12323
+ "uninstallNow": "지금 제거",
12324
+ "uninstallNeedSelect": "번들을 하나 이상 선택하세요. 빈 선택은 더 이상 모두 제거를 의미하지 않습니다.",
12325
+ "uninstallConfirmTitle": "선택한 번들을 삭제하시겠습니까?",
12326
+ "uninstallConfirmDesc": "{{count}} 번들이 제거됩니다. 확인하려면 REMOVE를 입력하세요.",
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": "창작자, 기부자 YSK Limited — 무료 제품, 실질적인 도움",
10717
- "creatorTitle": "Creator",
10718
- "creatorBody": "YSK 서버는 스택을 소유하려는 운영자를 위한 무료의 정직한 단일 호스트 제어 평면으로 구축되었습니다. 프로젝트는 공개적으로 유지됩니다. 피드백과 버그 보고서는 이를 명확하게 유지합니다.",
10719
- "donateTitle": "지원/기부",
10720
- "donateBody": "YSK 서버로 시간을 절약한다면 개발 후원을 고려해 보세요. 모든 기여는 모든 사람에게 제품을 무료로 제공하는 데 도움이 됩니다.",
12333
+ "title": "지원",
12334
+ "sub": "Creator, 후원, YSK Limited — 무료 제품, 실질적인 도움",
12335
+ "creatorTitle": "창조자",
12336
+ "creatorBody": "YSK Server는 자신의 스택을 소유하려는 운영자를 위한 무료·정직한 단일 호스트 제어 평면입니다. 프로젝트는 공개적으로 유지되며, 피드백과 버그 신고가 품질을 지킵니다.",
12337
+ "donateTitle": "지원 / 후원",
12338
+ "donateBody": "YSK Server가 시간을 아껴 주었다면 개발 후원을 고려해 주세요. 모든 기여가 제품을 모두에게 무료로 유지하는 데 도움이 됩니다.",
10721
12339
  "donateGithub": "GitHub 후원자",
10722
- "donateOther": "다른 기부 방법",
12340
+ "donateOther": "다른 후원 방법",
10723
12341
  "yskTitle": "YSK Limited",
10724
- "yskIntro": "무료 패널 이상의 실제적인 도움이 필요하십니까? YSK Limited는 다음을 지원할있습니다.",
10725
- "yskSvc1": "서버 설정, 강화 지속적인 운영",
12342
+ "yskIntro": "무료 패널 이상의 실무 지원이 필요하신가요? YSK Limited는 다음을 도울있습니다:",
12343
+ "yskSvc1": "서버 구축, 강화, 지속 운영",
10726
12344
  "yskSvc2": "호스팅 스택 설계(웹, 메일, DNS, 데이터베이스)",
10727
- "yskSvc3": "마이그레이션, 자동화 맞춤형 통합",
10728
- "yskSvc4": "사고 대응 생산 준비 상태 검토",
10729
- "yskNoPrice": "여기에 가격이 나와 있지 않습니다. 귀하의 환경에 맞는 대화를 원하시면 당사에 문의하십시오.",
12345
+ "yskSvc3": "마이그레이션, 자동화, 맞춤 연동",
12346
+ "yskSvc4": "사고 대응과 프로덕션 준비 검토",
12347
+ "yskNoPrice": "여기에는 가격이 없습니다. 환경에 맞게 상담해 드립니다.",
10730
12348
  "yskWebsite": "ysk.hk",
10731
12349
  "helpTitle": "문제가 있나요?",
10732
- "helpBody": "OS, 설치 로그 경로, 예상한 내용과 발생한 내용을 이메일로 보내주세요. 우리는 모든 메시지를 읽습니다.",
10733
- "docsHint": "전체 문서는 다음 저장소에 있습니다.",
12350
+ "helpBody": "OS, 설치 로그 경로, 기대한 동작과 실제 결과를 이메일로 보내 주세요. 모든 메시지를 읽습니다.",
12351
+ "docsHint": "전체 문서는 저장소에 있습니다:",
10734
12352
  "donateLinktree": "Linktree",
10735
- "cryptoTitle": "암호화/web3 핸들",
10736
- "cryptoHint": "일치하는 네트워크에서만 전송하세요. 보내기 전에 주소를 다시 확인하세요.",
10737
- "cryptoNetwork": "Network",
10738
- "cryptoAddress": "Address",
10739
- "copy": "Copy",
10740
- "copied": "Copied"
12353
+ "cryptoTitle": "암호화폐 / Web3 핸들",
12354
+ "cryptoHint": "해당 네트워크에서만 보내세요. 보내기 전에 주소를 다시 확인하세요.",
12355
+ "cryptoNetwork": "네트워크",
12356
+ "cryptoAddress": "주소",
12357
+ "copy": "복사",
12358
+ "copied": "복사됨",
12359
+ "docsLink": "선적 서류 비치",
12360
+ "diagTitle": "진단 요약",
12361
+ "diagBody": "버전을 복사하고, 실행하고, 팩트를 호스트하여 이메일에 붙여넣습니다. 이것은 전체 로그 번들이 아닙니다.",
12362
+ "diagCopy": "진단 요약 복사",
12363
+ "diagCopied": "진단 요약이 복사되었습니다.",
12364
+ "copyTitle": "{{address}} 복사",
12365
+ "diagCopyTitle": "버전, EXECUTE, 호스트 정보 복사",
12366
+ "diagPreview": "복사될 내용 미리보기",
12367
+ "diagLoading": "진단 로드 중…",
12368
+ "diagLoadFailed": "진단을 로드할 수 없습니다.",
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": "내보내기 데이터를 로드하지 못했습니다.",
@@ -10818,7 +12452,18 @@
10818
12452
  "leOk": "{{domain}}에 대해 획득한 인증서를 암호화하자",
10819
12453
  "leFailed": "인증서 요청 실패: {{detail}}",
10820
12454
  "leHint": "여기에서 DNS A가 가리키고 포트 80이 연결 가능한지 확인하세요(또는 nginx가 도메인을 제공함)",
10821
- "openFirewall": "공개인 경우: 패널 포트 {{port}}/tcp 허용(방화벽 → 포트 열기 → 9287 패널)"
12455
+ "openFirewall": "공개인 경우: 패널 포트 {{port}}/tcp 허용(방화벽 → 포트 열기 → 9287 패널)",
12456
+ "disableConfirmTitle": "패널 HTTPS를 비활성화하시겠습니까?",
12457
+ "disableConfirmDesc": "패널은 HTTP를 제공합니다. WebAuthn/Passkey는 HTTPS가 다시 활성화될 때까지 작동이 중지됩니다.",
12458
+ "disablePasskeyWarn": "등록된 패스키에는 HTTPS가 필요합니다. HTTP에서는 실패합니다.",
12459
+ "disableNeedConfirm": "확인 필요 — DISABLE-HTTPS 입력",
12460
+ "listenPublic": "패널은 공개 주소(0.0.0.0/::)를 수신하고 있습니다. 방화벽으로 제한하거나 127.0.0.1로 바인딩하세요.",
12461
+ "bootstrapCert": "이는 자체 서명된 부트스트랩 인증서입니다. 브라우저에서 경고합니다. 패널 도메인에 대해 신뢰할 수 있는 인증서를 발급합니다.",
12462
+ "cliNoSocket": "CLI에는 라이브 HTTP 소켓이 없습니다. ServingHttps는 구성 및 청취 소켓(ss)에서 추론됩니다.",
12463
+ "listenHost": "청취 주소",
12464
+ "currentHost": "이번 세션",
12465
+ "replaceCert": "신뢰할 수 있는 인증서로 교체",
12466
+ "needFqdn": "Need a FQDN (example.com), not a bare hostname"
10822
12467
  },
10823
12468
  "timeNtp": "시간 및 NTP",
10824
12469
  "clockStatus": "시스템 시계 상태",
@@ -10923,7 +12568,25 @@
10923
12568
  "exportPath": "내보내기 경로",
10924
12569
  "mode": "방법",
10925
12570
  "managedConf": "관리형 구성",
10926
- "dryRunFlag": "드라이런"
12571
+ "dryRunFlag": "드라이런",
12572
+ "timezoneSearch": "시간대 필터링…",
12573
+ "resyncNtp": "NTP 재동기화",
12574
+ "storageSub": "디스크 사용량",
12575
+ "syncReloadNeedConfirm": "확인 필요 — /etc/nginx/conf.d에 쓰고 Nginx를 다시 불러옵니다",
12576
+ "nginxLeftover": "잔여",
12577
+ "nginxUnused": "미사용",
12578
+ "nginxLeftoverHint": "옛 public-files 등 잔여 conf. 조치하기 전까지 동기화에 포함됩니다.",
12579
+ "nginxUnusedHint": "기본 / catch-all conf(000-default). 조치하기 전까지 동기화에 포함됩니다.",
12580
+ "powerUnlock": "위험 구역 잠금 해제",
12581
+ "powerLock": "위험 구역 잠금",
12582
+ "noScheduledPower": "재부팅이나 전원 끄기가 예약되지 않았습니다.",
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": "사용",
@@ -11017,7 +12680,9 @@
11017
12680
  "aboutPolicySub": "템플릿 작성과 시스템 설치는 별도의 단계입니다. 설치 후 다시 실행하는 것은 누락된 단계가 아니라 일반적인 작업입니다.",
11018
12681
  "policyInstallFull": "설치 및 활성화: /etc/systemd/system에 복사하고 daemon-reload하고 --now를 활성화합니다. 루트 + EXECUTE가 필요합니다.",
11019
12682
  "policyBlockedTitle": "권한 없이 차단됨",
11020
- "policyNotEqualTitle": "상태는 동일하지 않습니다."
12683
+ "policyNotEqualTitle": "상태는 동일하지 않습니다.",
12684
+ "rawStateHint": "Raw unit state in tooltip",
12685
+ "bootHint": "Whether the unit starts at boot"
11021
12686
  },
11022
12687
  "tabs": {
11023
12688
  "scrollLeft": "탭을 왼쪽으로 스크롤",
@@ -11057,7 +12722,15 @@
11057
12722
  "stepUpHint": "계정에 TOTP가 활성화되어 있는 경우 루트 로그인을 위해서는 2FA 승격이 필요합니다.",
11058
12723
  "stepUpTitle": "루트 쉘 확인",
11059
12724
  "stepUpDesc": "인증 코드 또는 복구 코드를 입력하세요.",
11060
- "totpLabel": "TOTP / 복구 코드"
12725
+ "totpLabel": "TOTP / 복구 코드",
12726
+ "sessionStillOpen": "이 페이지를 읽는 동안 라이브 셸은 계속 연결되어 있습니다.",
12727
+ "rootConfirmTitle": "루트 쉘을 여시겠습니까?",
12728
+ "rootConfirmDesc": "이 세션은 호스트의 무제한 루트 PTY입니다. 명령이 감사됩니다.",
12729
+ "rootConfirmBody": "권한 있는 호스트 명령을 실행하려는 경우에만 계속하십시오.",
12730
+ "copyAll": "모두 복사",
12731
+ "copyAllNeedConn": "먼저 연결 - 연결이 끊어진 동안 버퍼는 비어 있습니다.",
12732
+ "groupSystem": "System",
12733
+ "groupProject": "Project"
11061
12734
  },
11062
12735
  "uiInline": {
11063
12736
  "s27d9daa5": "런타임 {{v0}} {{v1}},",
@@ -11357,9 +13030,9 @@
11357
13030
  "applyPanelUpdate": "패널 업데이트 적용",
11358
13031
  "recheck": "재확인",
11359
13032
  "aboutScope": "범위",
11360
- "aboutScopeV": "ysk-server 제어 평면 버전 · 전체 시스템 적절한 업그레이드가 아님",
13033
+ "aboutScopeV": "ysk-server 패널 + 카탈로그 서비스 + 런타임 + 나머지 적절한 패키지",
11361
13034
  "aboutChannel": "채널",
11362
- "aboutChannelV": "npm → GitHub 릴리스 → package.json; npm install -g 또는 git(YSK_SOURCE_ROOT)을 통해 적용",
13035
+ "aboutChannelV": "npm 패키지 ysk-server → GitHub 릴리스 → apps/server/package.json; 적용: npm i -g ysk-server@version 또는 git (YSK_SOURCE_ROOT)",
11363
13036
  "aboutFail": "실패",
11364
13037
  "aboutFailV": "사용할 수 없는 채널은 최신으로 보고되지 않습니다. 적용하려면 실행이 필요합니다. git Apply에 서비스를 다시 시작해야 합니다.",
11365
13038
  "jobsTitle": "예약된 작업",
@@ -11436,7 +13109,80 @@
11436
13109
  "scanNow": "지금 스캔",
11437
13110
  "viewUpgradable": "업그레이드 가능 보기",
11438
13111
  "installElsewhere": "패키지(Nginx, PHP, 데이터베이스…)를 설치하려면 이 허브가 아닌 해당 기능 페이지를 엽니다.",
11439
- "status": "상태"
13112
+ "status": "상태",
13113
+ "groupService": "서비스",
13114
+ "groupRuntime": "런타임",
13115
+ "groupOs": "시스템 패키지",
13116
+ "notInstalled": "미설치",
13117
+ "goToPage": "페이지 열기",
13118
+ "hubHint": "이 호스트의 카탈로그 소프트웨어 및 런타임. 새로고침하려면 스캔하세요.",
13119
+ "intervalDay": "매일",
13120
+ "intervalDays": "{{n}}일마다",
13121
+ "intervalHour": "매시간",
13122
+ "intervalHours": "{{n}}시간마다",
13123
+ "intervalMinutes": "{{n}}분마다",
13124
+ "intervalSeconds": "{{n}}초마다",
13125
+ "availableHint": "패키지 관리자의 최신 후보가 포함된 패키지입니다.",
13126
+ "servicesHint": "이 호스트의 카탈로그 서비스입니다. 설치하려면 서비스 페이지를 엽니다.",
13127
+ "runtimeHint": "이 호스트의 런타임. 버전 업그레이드는 각 런타임 페이지에서 수행됩니다.",
13128
+ "needsReboot": "재부팅 필요",
13129
+ "kernelRebootWarn": "새 커널을 설치하려면 일반적으로 사용하기 전에 재부팅해야 합니다.",
13130
+ "neverRun": "아직 실행되지 않음",
13131
+ "scanOsvN": "스캔 + OSV(첫 번째 {{n}})",
13132
+ "rebootNeeded": "재부팅",
13133
+ "kernelRebootHint": "커널 패키지를 적용한 후 재부팅해야 함",
13134
+ "needApprovalHint": "사용 가능을 열고 승인이 필요한 패키지로 필터링합니다.",
13135
+ "applyNeedConfirm": "적용하기 전에 확인 대화상자를 엽니다.",
13136
+ "probeFailed": "프로브 실패",
13137
+ "notViaApt": "apt에서 관리하지 않음 — 후보자 없음",
13138
+ "noCandidate": "후보 버전 없음",
13139
+ "jobOpenGeo": "GeoIP 페이지",
13140
+ "job": {
13141
+ "protection_probe": {
13142
+ "name": "보호 프로브",
13143
+ "hint": "주기적 방어 신호"
13144
+ },
13145
+ "updates_scan": {
13146
+ "name": "업데이트 검사",
13147
+ "hint": "패키지 인벤토리 새로 고침"
13148
+ },
13149
+ "daily_backup": {
13150
+ "name": "일일 백업",
13151
+ "hint": "전체 백업 예약"
13152
+ },
13153
+ "db_temp_expire": {
13154
+ "name": "임시 DB 사용자 만료",
13155
+ "hint": "만료된 임시 데이터베이스 사용자 삭제"
13156
+ },
13157
+ "defense_auto_ban": {
13158
+ "name": "방어 자동 금지",
13159
+ "hint": "자동 차단 체크 적용"
13160
+ },
13161
+ "defense_geoip_update": {
13162
+ "name": "GeoIP 업데이트",
13163
+ "hint": "GeoIP 데이터베이스 다운로드"
13164
+ },
13165
+ "log_auto_vacuum": {
13166
+ "name": "로그 진공",
13167
+ "hint": "저널링 보존"
13168
+ },
13169
+ "email_dnsbl": {
13170
+ "name": "이메일 DNSBL",
13171
+ "hint": "메일 DNSBL 확인"
13172
+ },
13173
+ "validators_upgrade_scan": {
13174
+ "name": "Validators upgrade scan",
13175
+ "hint": "Check validator image / binary updates"
13176
+ }
13177
+ },
13178
+ "applyPanelAlreadyLatest": "이미 최신 패널 버전",
13179
+ "panelRestarting": "새 버전을 불러오려고 패널을 다시 시작하는 중…",
13180
+ "panelRestarted": "패널이 복구됨 · {{version}}",
13181
+ "panelRestartWait": "적용이 끝났습니다. 이 페이지가 갱신되지 않으면 몇 초 후 다시 불러오세요.",
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}} 사용자",
@@ -11558,7 +13304,350 @@
11558
13304
  "securityClearTotpHint": "승격이 필요합니다",
11559
13305
  "securityClearConfirm": "2FA 삭제를 확인하려면 사용자 이름을 입력하세요.",
11560
13306
  "securityClearOk": "{{name}}에 대한 2FA를 통과했습니다.",
11561
- "securitySelfNote": "자신만의 2FA를 설정하려면 보안 → 내 보안을 엽니다."
13307
+ "securitySelfNote": "자신만의 2FA를 설정하려면 보안 → 내 보안을 엽니다.",
13308
+ "cannotDeleteSelf": "로그인한 계정은 삭제할 수 없습니다",
13309
+ "cannotModifySelf": "로그인한 계정은 정지하거나 강등할 수 없습니다",
13310
+ "cannotDeleteLastAdmin": "마지막 관리자는 삭제할 수 없습니다",
13311
+ "cannotDemoteLastAdmin": "마지막 관리자는 정지하거나 강등할 수 없습니다",
13312
+ "lockSelfHint": "로그인한 계정입니다. 잠김을 막기 위해 삭제, 정지, 역할 변경이 차단됩니다.",
13313
+ "lockLastAdminHint": "마지막 관리자입니다. 삭제, 정지, 강등이 차단됩니다.",
13314
+ "demoteAdminTitle": "이 관리자를 강등할까요?",
13315
+ "demoteAdminDesc": "이 사용자는 전체 관리자 권한을 잃습니다. 다른 관리자가 남아 있는지 확인하세요.",
13316
+ "searchPkgPh": "패키지 이름",
13317
+ "quotaNonNeg": "개수와 할당량은 음수일 수 없습니다.",
13318
+ "diskQuotaHint": "사전 설정은 GiB입니다. 사용자 정의 상자는 MiB입니다.",
13319
+ "bandwidthHint": "0은 무제한을 의미합니다.",
13320
+ "impersonateHint": "이 사용자로 세션을 엽니다. 명의 도용을 종료하려면 계정 메뉴를 사용하세요.",
13321
+ "operatorHighRiskHint": "공장 기본 운영자 역할에는 고위험 쓰기가 포함됩니다. 좁히면 새 계정만, 기본을 바꾸면 기존 운영자에게도 영향을 줍니다.",
13322
+ "cannotImpersonateSelf": "이미 이 계정으로 로그인되어 있습니다.",
13323
+ "singleAdminNo2fa": "이 호스트에는 관리자가 한 명 있고 2FA가 꺼져 있습니다. 2FA를 활성화하고 백업 관리자를 추가하세요.",
13324
+ "enableAdmin2fa": "Enable admin 2FA",
13325
+ "addBackupAdmin": "Add a backup admin"
13326
+ },
13327
+ "validators": {
13328
+ "title": "검증자 노드 (Beta)",
13329
+ "subtitle": "이 호스트에서 L1 노드를 설치하고 관리합니다. 비수탁 — 키는 직접 보관하세요.",
13330
+ "beta": "Beta",
13331
+ "tab": {
13332
+ "nodes": "노드",
13333
+ "disk": "디스크",
13334
+ "about": "설명",
13335
+ "stack": "Software"
13336
+ },
13337
+ "empty": {
13338
+ "title": "아직 검증자 노드가 없습니다",
13339
+ "desc": "마법사로 테스트넷 노드를 만드세요."
13340
+ },
13341
+ "refresh": "새로 고침",
13342
+ "disk": {
13343
+ "title": "검증자 디스크",
13344
+ "root": "데이터 디렉터리",
13345
+ "free": "여유",
13346
+ "used": "사용",
13347
+ "none": "아직 인스턴스 데이터가 없습니다",
13348
+ "warn": "디스크 사용량이 높습니다(70% 이상)",
13349
+ "danger": "디스크 사용량이 위험합니다(85% 이상)",
13350
+ "autoClear": "디스크가 위험할 때 가장 큰 중지 인스턴스를 자동 삭제(기본 꺼짐)",
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": "메인넷",
13382
+ "fuji": "Fuji",
13383
+ "testnet": "테스트넷",
13384
+ "preview": "시사",
13385
+ "preprod": "프레프로트",
13386
+ "westend": "Westend"
13387
+ },
13388
+ "networkKind": {
13389
+ "testnet": "테스트넷",
13390
+ "mainnet": "메인넷",
13391
+ "mixed": "Mainnet + testnet"
13392
+ },
13393
+ "profile": {
13394
+ "minimal": "최소",
13395
+ "pruned": "Pruned",
13396
+ "validator-ready": "검증자 준비",
13397
+ "rpc": "RPC"
13398
+ },
13399
+ "col": {
13400
+ "id": "ID",
13401
+ "chain": "체인",
13402
+ "network": "네트워크",
13403
+ "profile": "프로필",
13404
+ "status": "상태",
13405
+ "disk": "디스크"
13406
+ },
13407
+ "cli": {
13408
+ "usage": "사용법: 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": "실행 클라이언트",
13412
+ "cl": "합의 클라이언트"
13413
+ },
13414
+ "mithril": {
13415
+ "label": "먼저 Mithril 스냅샷으로 복원(테스트넷 권장)",
13416
+ "action": "Mithril로 복원"
13417
+ },
13418
+ "errors": {
13419
+ "notFound": "검증자 인스턴스를 찾을 수 없습니다",
13420
+ "invalidId": "인스턴스 ID가 올바르지 않습니다",
13421
+ "diskLow": "이 체인, 네트워크, 프로필에 필요한 여유 디스크가 부족합니다",
13422
+ "diskUnknownMainnet": "여유 디스크를 측정할 수 없어 메인넷 생성을 거부했습니다",
13423
+ "needDocker": "Docker Compose가 필요하지만 찾을 수 없습니다",
13424
+ "composeFailed": "docker compose가 실패했습니다",
13425
+ "needConfirm": "삭제에는 confirm=인스턴스 ID 또는 CLEAR가 필요합니다",
13426
+ "mithrilAdaOnly": "Mithril 복원은 Cardano만 지원합니다",
13427
+ "needMithrilConfirm": "Mithril에는 confirm=인스턴스 ID 또는 MITHRIL이 필요합니다",
13428
+ "mithrilBlocked": "Mithril docker run이 허용 목록에서 거부되었습니다",
13429
+ "mithrilKey": "Mithril genesis 검증 키를 불러올 수 없습니다",
13430
+ "mithrilFailed": "Mithril 스냅샷 다운로드가 실패했습니다",
13431
+ "pruneFailed": "정리가 실패했습니다",
13432
+ "switchNeedStop": "네트워크를 바꾸기 전에 노드를 중지하십시오",
13433
+ "switchNeedClear": "네트워크 전환은 체인 데이터를 지웁니다. 인스턴스 ID 또는 CLEAR로 확인하십시오",
13434
+ "composeMissing": "Compose 파일을 찾을 수 없습니다",
13435
+ "composeNotManaged": "YSK가 관리하지 않는 Compose 파일은 쓰지 않습니다",
13436
+ "badDataPath": "데이터 경로는 시스템 경로가 아닌 절대 디렉터리여야 합니다",
13437
+ "portInUse": "해당 RPC 포트는 다른 검증자 인스턴스가 사용 중입니다",
13438
+ "snapshotUnsupported": "이 체인에는 허용된 스냅샷 원본이 없습니다",
13439
+ "snapshotLookup": "공식 스냅샷 포인터를 해석할 수 없습니다",
13440
+ "needSnapshotConfirm": "스냅샷 복원에는 confirm=인스턴스 ID 또는 SNAPSHOT이 필요합니다",
13441
+ "snapshotBlocked": "스냅샷 docker run이 허용 목록에서 거부되었습니다",
13442
+ "snapshotFailed": "스냅샷 다운로드 또는 압축 해제가 실패했습니다"
13443
+ },
13444
+ "notes": {
13445
+ "beta": "이 기능은 Beta입니다. 호스트 변경에는 root와 YSK_EXECUTE=1이 필요합니다.",
13446
+ "noKeys": "YSK Server는 스테이킹 키를 생성하거나 저장하지 않습니다.",
13447
+ "dockerSoon": "Install and start from this page wizard. Host changes need root and YSK_EXECUTE=1.",
13448
+ "dryCreate": "인스턴스 사양과 compose를 썼습니다(dry-run). 컨테이너를 시작하려면 --execute와 YSK_EXECUTE=1을 사용하세요.",
13449
+ "dryStart": "시작은 dry-run입니다. --execute와 YSK_EXECUTE=1을 사용하세요.",
13450
+ "dryStop": "중지는 dry-run입니다. --execute와 YSK_EXECUTE=1을 사용하세요.",
13451
+ "dryClear": "삭제는 dry-run입니다. --execute와 YSK_EXECUTE=1을 사용하세요.",
13452
+ "created": "노드를 만들고 compose를 시작했습니다",
13453
+ "started": "노드를 시작했습니다",
13454
+ "stopped": "노드를 중지했습니다",
13455
+ "cleared": "체인 데이터를 지웠습니다",
13456
+ "dryMithril": "Mithril 복원은 dry-run입니다. --execute와 YSK_EXECUTE=1을 사용하세요.",
13457
+ "mithril": "Mithril 스냅샷을 복원하고 노드를 다시 시작했습니다",
13458
+ "dryPrune": "정리는 dry-run입니다. --execute와 YSK_EXECUTE=1을 사용하세요.",
13459
+ "pruned": "사용하지 않는 프로젝트 이미지를 정리했습니다",
13460
+ "pruneProfile": "클라이언트 원본 정리는 pruned/minimal 프로필입니다. 바꾸려면 다시 만드세요.",
13461
+ "sameNetwork": "이미 그 네트워크입니다",
13462
+ "drySwitch": "네트워크 전환은 dry-run입니다.",
13463
+ "switched": "네트워크를 바꾸고 체인 데이터를 지웠습니다",
13464
+ "dryCompose": "compose.yml을 씁니다",
13465
+ "composeWrote": "compose.yml을 썼습니다",
13466
+ "statsEmpty": "측정할 실행 중 컨테이너가 없습니다",
13467
+ "autoClearNone": "자동 삭제할 중지된 인스턴스가 없습니다",
13468
+ "drySnapshot": "스냅샷 복원은 dry-run입니다. --execute와 YSK_EXECUTE=1을 사용하세요.",
13469
+ "snapshotEthEl": "ethPandaOps EL 아카이브를 복원하고 checkpoint sync를 위해 CL을 재설정했습니다",
13470
+ "snapshotEthCl": "CL 데이터를 재설정하고 공식 checkpoint sync를 사용합니다",
13471
+ "snapshotNear": "NEAR 데이터를 지웠습니다. compose가 공식 genesis와 epoch sync로 다시 초기화합니다",
13472
+ "nativePrune": "클라이언트 원본 정리 명령을 실행했습니다",
13473
+ "dryDelete": "Delete is dry-run. Pass --execute and YSK_EXECUTE=1.",
13474
+ "deleted": "Node deleted",
13475
+ "leftoverRemoved": "Removed leftover {{path}}"
13476
+ },
13477
+ "create": "노드 만들기",
13478
+ "wizard": {
13479
+ "title": "노드 만들기",
13480
+ "back": "뒤로",
13481
+ "next": "다음",
13482
+ "install": "설치",
13483
+ "mainnetWarn": "메인넷은 여유 디스크가 많이 필요합니다(ETH는 종종 800 GiB 이상). 테스트넷을 권장합니다.",
13484
+ "mainnetAck": "디스크와 슬래싱 위험을 이해했으며 메인넷을 계속합니다.",
13485
+ "heavyWarn": "이 체인은 부하가 큽니다(대용량 디스크와 높은 IOPS). Solana 메인넷은 보통 2 TiB 이상이 필요합니다.",
13486
+ "memory": "메모리 한도(예: 4g)",
13487
+ "cpus": "CPU 한도(예: 2.0)",
13488
+ "dataPath": "데이터 경로(선택)",
13489
+ "rpcPort": "RPC 포트(선택)",
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": "자세히",
13528
+ "start": "시작",
13529
+ "stop": "중지",
13530
+ "restart": "다시 시작",
13531
+ "clear": "비우기",
13532
+ "upgrade": "업그레이드",
13533
+ "clearConfirm": "인스턴스 ID 또는 CLEAR 입력",
13534
+ "prune": "이미지 정리",
13535
+ "switchNetwork": "네트워크 전환",
13536
+ "removeUnit": "compose/인스턴스 기록도 삭제",
13537
+ "restoreAfter": "비운 뒤 스냅샷 복원",
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": "업그레이드 정책",
13555
+ "manual": "수동",
13556
+ "notify": "알림",
13557
+ "auto-safe": "자동(안전)",
13558
+ "auto-all": "자동(모두)"
13559
+ },
13560
+ "logs": {
13561
+ "empty": "아직 로그가 없습니다",
13562
+ "follow": "로그 따라가기"
13563
+ },
13564
+ "compose": {
13565
+ "label": "Compose 파일",
13566
+ "save": "compose 저장"
13567
+ },
13568
+ "snapshot": {
13569
+ "action": "스냅샷 복원",
13570
+ "mithril": "Cardano는 인증 스냅샷 복원에 Mithril을 사용합니다.",
13571
+ "eth": "Ethereum 메인넷은 합의 클라이언트의 공식 checkpoint sync로 시작합니다. EL은 snap sync를 계속합니다.",
13572
+ "ethEl": "Hoodi/Sepolia는 ethPandaOps EL 아카이브를 복원한 뒤 CL을 checkpoint-sync할 수 있습니다.",
13573
+ "avax": "Avalanche는 compose 프로필에서 state-sync를 사용합니다.",
13574
+ "near": "공식 무료 NEAR tar 스냅샷은 종료되었습니다. 복원은 데이터를 지우고 공식 genesis와 epoch sync를 사용합니다.",
13575
+ "none": "이 체인에는 스냅샷 원본이 설정되어 있지 않습니다."
13576
+ },
13577
+ "stake": {
13578
+ "title": "스테이킹 준비(키는 직접 보관)",
13579
+ "offlineKeys": "키는 오프라인에서 만드세요. 패널은 저장하지 않습니다.",
13580
+ "deposit": "공식 launchpad에서 예치/등록을 완료하세요.",
13581
+ "withdrawal": "출금 자격 증명은 직접 설정하세요.",
13582
+ "monitor": "이 페이지에서 디스크, 피어, 업그레이드 배지를 확인하세요."
13583
+ },
13584
+ "alerts": {
13585
+ "diskTitle": "검증자 디스크가 위험합니다",
13586
+ "diskBody": "검증자 데이터 볼륨의 여유 공간이 매우 적습니다.",
13587
+ "upgradeTitle": "검증자 업그레이드가 있습니다",
13588
+ "upgradeBody": "하나 이상의 노드 클라이언트에 더 새로운 고정 버전이 있습니다.",
13589
+ "syncTitle": "검증자 노드를 확인하세요",
13590
+ "syncBody": "6시간 넘게 동기화 중인 노드가 있거나 오류를 보고했습니다.",
13591
+ "rollbackTitle": "검증자 업그레이드를 롤백했습니다",
13592
+ "rollbackBody": "{{id}} 업그레이드가 상태 확인에 실패하여 롤백되었습니다."
13593
+ },
13594
+ "upgrade": {
13595
+ "changelog": "변경 기록"
13596
+ },
13597
+ "readiness": {
13598
+ "dockerTitle": "검증자 노드용 Docker",
13599
+ "dockerOk": "검증자 인스턴스 {{count}}개; Docker가 설치되어 있습니다",
13600
+ "dockerMissing": "검증자 인스턴스가 있지만 docker 명령을 찾을 수 없습니다"
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": "VNC 서버 및 클라이언트",
@@ -11804,15 +13893,31 @@
11804
13893
  "stackMissingShort": "미설치",
11805
13894
  "editClientTitle": "원격 클라이언트 편집",
11806
13895
  "editClientDesc": "경로, 호스트 및 선택적으로 저장된 비밀번호를 업데이트합니다.",
11807
- "clientUpdated": "클라이언트 프로필이 업데이트되었습니다."
13896
+ "clientUpdated": "클라이언트 프로필이 업데이트되었습니다.",
13897
+ "rememberNeedPassword": "먼저 비밀번호를 입력하세요.",
13898
+ "settingsNeedStack": "이러한 기본값은 TigerVNC(선택한 경우 XFCE)가 설치된 경우 적용됩니다. 먼저 설치 탭에서 설치하세요.",
13899
+ "clientNeedNovnc": "브라우저에서 열려면 noVNC가 필요합니다. 여기에서 열 것으로 예상되는 리모컨을 추가하기 전에 설치 탭에서 설치하세요.",
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": "VPN 서버 및 클라이언트",
11811
13916
  "eyebrow": "VPN",
11812
13917
  "tab": {
11813
- "wireguard": "와이어가드",
11814
- "openvpn": "오픈VPN",
11815
- "outline": "섀도우삭스",
13918
+ "wireguard": "WireGuard",
13919
+ "openvpn": "OpenVPN",
13920
+ "outline": "Shadowsocks",
11816
13921
  "client": "로컬 클라이언트",
11817
13922
  "software": "소프트웨어",
11818
13923
  "monitor": "감시 장치",
@@ -11935,6 +14040,21 @@
11935
14040
  "lanCidrs": "LAN 네트워크",
11936
14041
  "customCidr": "CIDR",
11937
14042
  "addCidr": "추가하다"
11938
- }
14043
+ },
14044
+ "engineNotInstalled": "이 VPN 엔진이 호스트에 설치되어 있지 않습니다.",
14045
+ "serverNotListening": "서버 유닛이 활성 상태가 아닙니다. UDP/TCP {{port}}가 닫혀 있을 수 있습니다.",
14046
+ "installEngineFirst": "VPN 엔진을 먼저 설치하세요",
14047
+ "portHint": {
14048
+ "51820": "기본 WireGuard 수신 포트",
14049
+ "51821": "대체 WireGuard 수신 포트",
14050
+ "51822": "두 번째 대체 WireGuard 수신 포트"
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
  }