@tracearr/translations 2.2.4-beta.3 → 2.3.0-beta.2

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 (252) hide show
  1. package/README.md +1 -1
  2. package/dist/config.d.ts +1164 -64
  3. package/dist/config.d.ts.map +1 -1
  4. package/dist/config.mobile.d.ts +1164 -64
  5. package/dist/config.mobile.d.ts.map +1 -1
  6. package/dist/locales/af-ZA/common.json +281 -280
  7. package/dist/locales/af-ZA/notifications.json +238 -218
  8. package/dist/locales/af-ZA/pages.json +1726 -1646
  9. package/dist/locales/af-ZA/settings.json +888 -440
  10. package/dist/locales/ar-SA/common.json +281 -280
  11. package/dist/locales/ar-SA/notifications.json +242 -222
  12. package/dist/locales/ar-SA/pages.json +1684 -1604
  13. package/dist/locales/ar-SA/settings.json +889 -441
  14. package/dist/locales/ca-ES/common.json +281 -280
  15. package/dist/locales/ca-ES/notifications.json +238 -218
  16. package/dist/locales/ca-ES/pages.json +1682 -1602
  17. package/dist/locales/ca-ES/settings.json +888 -440
  18. package/dist/locales/cs-CZ/common.json +281 -280
  19. package/dist/locales/cs-CZ/notifications.json +242 -222
  20. package/dist/locales/cs-CZ/pages.json +1688 -1608
  21. package/dist/locales/cs-CZ/settings.json +889 -441
  22. package/dist/locales/da-DK/common.json +281 -280
  23. package/dist/locales/da-DK/notifications.json +242 -222
  24. package/dist/locales/da-DK/pages.json +1684 -1604
  25. package/dist/locales/da-DK/settings.json +889 -441
  26. package/dist/locales/de-DE/common.json +281 -280
  27. package/dist/locales/de-DE/notifications.json +242 -222
  28. package/dist/locales/de-DE/pages.json +1690 -1610
  29. package/dist/locales/de-DE/settings.json +889 -441
  30. package/dist/locales/el-GR/common.json +281 -280
  31. package/dist/locales/el-GR/notifications.json +242 -222
  32. package/dist/locales/el-GR/pages.json +1684 -1604
  33. package/dist/locales/el-GR/settings.json +889 -441
  34. package/dist/locales/en/notifications.json +26 -6
  35. package/dist/locales/en/pages.json +94 -12
  36. package/dist/locales/en/settings.json +474 -26
  37. package/dist/locales/en-US/common.json +281 -280
  38. package/dist/locales/en-US/notifications.json +242 -222
  39. package/dist/locales/en-US/pages.json +1774 -1694
  40. package/dist/locales/en-US/settings.json +898 -450
  41. package/dist/locales/es-ES/common.json +281 -280
  42. package/dist/locales/es-ES/notifications.json +242 -222
  43. package/dist/locales/es-ES/pages.json +1689 -1609
  44. package/dist/locales/es-ES/settings.json +889 -441
  45. package/dist/locales/fi-FI/common.json +281 -280
  46. package/dist/locales/fi-FI/notifications.json +242 -222
  47. package/dist/locales/fi-FI/pages.json +1684 -1604
  48. package/dist/locales/fi-FI/settings.json +889 -441
  49. package/dist/locales/fr-FR/notifications.json +242 -222
  50. package/dist/locales/fr-FR/pages.json +1698 -1618
  51. package/dist/locales/fr-FR/settings.json +898 -450
  52. package/dist/locales/he-IL/common.json +281 -280
  53. package/dist/locales/he-IL/notifications.json +238 -218
  54. package/dist/locales/he-IL/pages.json +1726 -1646
  55. package/dist/locales/he-IL/settings.json +888 -440
  56. package/dist/locales/hu-HU/common.json +281 -280
  57. package/dist/locales/hu-HU/notifications.json +238 -218
  58. package/dist/locales/hu-HU/pages.json +1726 -1646
  59. package/dist/locales/hu-HU/settings.json +888 -440
  60. package/dist/locales/it-IT/common.json +281 -280
  61. package/dist/locales/it-IT/notifications.json +242 -222
  62. package/dist/locales/it-IT/pages.json +1684 -1604
  63. package/dist/locales/it-IT/settings.json +889 -441
  64. package/dist/locales/ja-JP/common.json +281 -280
  65. package/dist/locales/ja-JP/notifications.json +242 -222
  66. package/dist/locales/ja-JP/pages.json +1684 -1604
  67. package/dist/locales/ja-JP/settings.json +889 -441
  68. package/dist/locales/ko-KR/common.json +281 -281
  69. package/dist/locales/ko-KR/notifications.json +242 -222
  70. package/dist/locales/ko-KR/pages.json +1746 -1666
  71. package/dist/locales/ko-KR/settings.json +898 -450
  72. package/dist/locales/nl-NL/common.json +281 -280
  73. package/dist/locales/nl-NL/notifications.json +242 -222
  74. package/dist/locales/nl-NL/pages.json +1699 -1619
  75. package/dist/locales/nl-NL/settings.json +891 -443
  76. package/dist/locales/no-NO/common.json +281 -280
  77. package/dist/locales/no-NO/notifications.json +242 -222
  78. package/dist/locales/no-NO/pages.json +1684 -1604
  79. package/dist/locales/no-NO/settings.json +889 -441
  80. package/dist/locales/pl-PL/common.json +281 -280
  81. package/dist/locales/pl-PL/notifications.json +242 -222
  82. package/dist/locales/pl-PL/pages.json +1684 -1604
  83. package/dist/locales/pl-PL/settings.json +889 -441
  84. package/dist/locales/pt-BR/common.json +281 -280
  85. package/dist/locales/pt-BR/notifications.json +242 -222
  86. package/dist/locales/pt-BR/pages.json +1725 -1645
  87. package/dist/locales/pt-BR/settings.json +889 -441
  88. package/dist/locales/pt-PT/common.json +281 -280
  89. package/dist/locales/pt-PT/notifications.json +242 -222
  90. package/dist/locales/pt-PT/pages.json +1684 -1604
  91. package/dist/locales/pt-PT/settings.json +889 -441
  92. package/dist/locales/ro-RO/common.json +281 -280
  93. package/dist/locales/ro-RO/notifications.json +242 -222
  94. package/dist/locales/ro-RO/pages.json +1684 -1604
  95. package/dist/locales/ro-RO/settings.json +889 -441
  96. package/dist/locales/ru-RU/common.json +281 -280
  97. package/dist/locales/ru-RU/notifications.json +242 -222
  98. package/dist/locales/ru-RU/pages.json +1684 -1604
  99. package/dist/locales/ru-RU/settings.json +889 -441
  100. package/dist/locales/sr-SP/common.json +281 -280
  101. package/dist/locales/sr-SP/notifications.json +238 -218
  102. package/dist/locales/sr-SP/pages.json +1726 -1646
  103. package/dist/locales/sr-SP/settings.json +888 -440
  104. package/dist/locales/sv-SE/common.json +281 -280
  105. package/dist/locales/sv-SE/notifications.json +242 -222
  106. package/dist/locales/sv-SE/pages.json +1684 -1604
  107. package/dist/locales/sv-SE/settings.json +889 -441
  108. package/dist/locales/tr-TR/common.json +281 -280
  109. package/dist/locales/tr-TR/notifications.json +238 -218
  110. package/dist/locales/tr-TR/pages.json +1726 -1646
  111. package/dist/locales/tr-TR/settings.json +888 -440
  112. package/dist/locales/uk-UA/common.json +13 -12
  113. package/dist/locales/uk-UA/nav.json +17 -23
  114. package/dist/locales/uk-UA/notifications.json +242 -222
  115. package/dist/locales/uk-UA/pages.json +121 -41
  116. package/dist/locales/uk-UA/settings.json +889 -441
  117. package/dist/locales/vi-VN/common.json +281 -280
  118. package/dist/locales/vi-VN/notifications.json +238 -218
  119. package/dist/locales/vi-VN/pages.json +1726 -1646
  120. package/dist/locales/vi-VN/settings.json +888 -440
  121. package/dist/locales/zh-CN/common.json +281 -280
  122. package/dist/locales/zh-CN/notifications.json +242 -222
  123. package/dist/locales/zh-CN/pages.json +1695 -1615
  124. package/dist/locales/zh-CN/settings.json +898 -450
  125. package/dist/locales/zh-TW/common.json +281 -280
  126. package/dist/locales/zh-TW/notifications.json +242 -222
  127. package/dist/locales/zh-TW/pages.json +1804 -1724
  128. package/dist/locales/zh-TW/settings.json +888 -440
  129. package/package.json +1 -1
  130. package/src/locales/af-ZA/common.json +281 -280
  131. package/src/locales/af-ZA/notifications.json +238 -218
  132. package/src/locales/af-ZA/pages.json +1726 -1646
  133. package/src/locales/af-ZA/settings.json +888 -440
  134. package/src/locales/ar-SA/common.json +281 -280
  135. package/src/locales/ar-SA/notifications.json +242 -222
  136. package/src/locales/ar-SA/pages.json +1684 -1604
  137. package/src/locales/ar-SA/settings.json +889 -441
  138. package/src/locales/ca-ES/common.json +281 -280
  139. package/src/locales/ca-ES/notifications.json +238 -218
  140. package/src/locales/ca-ES/pages.json +1682 -1602
  141. package/src/locales/ca-ES/settings.json +888 -440
  142. package/src/locales/cs-CZ/common.json +281 -280
  143. package/src/locales/cs-CZ/notifications.json +242 -222
  144. package/src/locales/cs-CZ/pages.json +1688 -1608
  145. package/src/locales/cs-CZ/settings.json +889 -441
  146. package/src/locales/da-DK/common.json +281 -280
  147. package/src/locales/da-DK/notifications.json +242 -222
  148. package/src/locales/da-DK/pages.json +1684 -1604
  149. package/src/locales/da-DK/settings.json +889 -441
  150. package/src/locales/de-DE/common.json +281 -280
  151. package/src/locales/de-DE/notifications.json +242 -222
  152. package/src/locales/de-DE/pages.json +1690 -1610
  153. package/src/locales/de-DE/settings.json +889 -441
  154. package/src/locales/el-GR/common.json +281 -280
  155. package/src/locales/el-GR/notifications.json +242 -222
  156. package/src/locales/el-GR/pages.json +1684 -1604
  157. package/src/locales/el-GR/settings.json +889 -441
  158. package/src/locales/en/notifications.json +26 -6
  159. package/src/locales/en/pages.json +94 -12
  160. package/src/locales/en/settings.json +474 -26
  161. package/src/locales/en-US/common.json +281 -280
  162. package/src/locales/en-US/notifications.json +242 -222
  163. package/src/locales/en-US/pages.json +1774 -1694
  164. package/src/locales/en-US/settings.json +898 -450
  165. package/src/locales/es-ES/common.json +281 -280
  166. package/src/locales/es-ES/notifications.json +242 -222
  167. package/src/locales/es-ES/pages.json +1689 -1609
  168. package/src/locales/es-ES/settings.json +889 -441
  169. package/src/locales/fi-FI/common.json +281 -280
  170. package/src/locales/fi-FI/notifications.json +242 -222
  171. package/src/locales/fi-FI/pages.json +1684 -1604
  172. package/src/locales/fi-FI/settings.json +889 -441
  173. package/src/locales/fr-FR/notifications.json +242 -222
  174. package/src/locales/fr-FR/pages.json +1698 -1618
  175. package/src/locales/fr-FR/settings.json +898 -450
  176. package/src/locales/he-IL/common.json +281 -280
  177. package/src/locales/he-IL/notifications.json +238 -218
  178. package/src/locales/he-IL/pages.json +1726 -1646
  179. package/src/locales/he-IL/settings.json +888 -440
  180. package/src/locales/hu-HU/common.json +281 -280
  181. package/src/locales/hu-HU/notifications.json +238 -218
  182. package/src/locales/hu-HU/pages.json +1726 -1646
  183. package/src/locales/hu-HU/settings.json +888 -440
  184. package/src/locales/it-IT/common.json +281 -280
  185. package/src/locales/it-IT/notifications.json +242 -222
  186. package/src/locales/it-IT/pages.json +1684 -1604
  187. package/src/locales/it-IT/settings.json +889 -441
  188. package/src/locales/ja-JP/common.json +281 -280
  189. package/src/locales/ja-JP/notifications.json +242 -222
  190. package/src/locales/ja-JP/pages.json +1684 -1604
  191. package/src/locales/ja-JP/settings.json +889 -441
  192. package/src/locales/ko-KR/common.json +281 -281
  193. package/src/locales/ko-KR/notifications.json +242 -222
  194. package/src/locales/ko-KR/pages.json +1746 -1666
  195. package/src/locales/ko-KR/settings.json +898 -450
  196. package/src/locales/nl-NL/common.json +281 -280
  197. package/src/locales/nl-NL/notifications.json +242 -222
  198. package/src/locales/nl-NL/pages.json +1699 -1619
  199. package/src/locales/nl-NL/settings.json +891 -443
  200. package/src/locales/no-NO/common.json +281 -280
  201. package/src/locales/no-NO/notifications.json +242 -222
  202. package/src/locales/no-NO/pages.json +1684 -1604
  203. package/src/locales/no-NO/settings.json +889 -441
  204. package/src/locales/pl-PL/common.json +281 -280
  205. package/src/locales/pl-PL/notifications.json +242 -222
  206. package/src/locales/pl-PL/pages.json +1684 -1604
  207. package/src/locales/pl-PL/settings.json +889 -441
  208. package/src/locales/pt-BR/common.json +281 -280
  209. package/src/locales/pt-BR/notifications.json +242 -222
  210. package/src/locales/pt-BR/pages.json +1725 -1645
  211. package/src/locales/pt-BR/settings.json +889 -441
  212. package/src/locales/pt-PT/common.json +281 -280
  213. package/src/locales/pt-PT/notifications.json +242 -222
  214. package/src/locales/pt-PT/pages.json +1684 -1604
  215. package/src/locales/pt-PT/settings.json +889 -441
  216. package/src/locales/ro-RO/common.json +281 -280
  217. package/src/locales/ro-RO/notifications.json +242 -222
  218. package/src/locales/ro-RO/pages.json +1684 -1604
  219. package/src/locales/ro-RO/settings.json +889 -441
  220. package/src/locales/ru-RU/common.json +281 -280
  221. package/src/locales/ru-RU/notifications.json +242 -222
  222. package/src/locales/ru-RU/pages.json +1684 -1604
  223. package/src/locales/ru-RU/settings.json +889 -441
  224. package/src/locales/sr-SP/common.json +281 -280
  225. package/src/locales/sr-SP/notifications.json +238 -218
  226. package/src/locales/sr-SP/pages.json +1726 -1646
  227. package/src/locales/sr-SP/settings.json +888 -440
  228. package/src/locales/sv-SE/common.json +281 -280
  229. package/src/locales/sv-SE/notifications.json +242 -222
  230. package/src/locales/sv-SE/pages.json +1684 -1604
  231. package/src/locales/sv-SE/settings.json +889 -441
  232. package/src/locales/tr-TR/common.json +281 -280
  233. package/src/locales/tr-TR/notifications.json +238 -218
  234. package/src/locales/tr-TR/pages.json +1726 -1646
  235. package/src/locales/tr-TR/settings.json +888 -440
  236. package/src/locales/uk-UA/common.json +13 -12
  237. package/src/locales/uk-UA/nav.json +17 -23
  238. package/src/locales/uk-UA/notifications.json +242 -222
  239. package/src/locales/uk-UA/pages.json +121 -41
  240. package/src/locales/uk-UA/settings.json +889 -441
  241. package/src/locales/vi-VN/common.json +281 -280
  242. package/src/locales/vi-VN/notifications.json +238 -218
  243. package/src/locales/vi-VN/pages.json +1726 -1646
  244. package/src/locales/vi-VN/settings.json +888 -440
  245. package/src/locales/zh-CN/common.json +281 -280
  246. package/src/locales/zh-CN/notifications.json +242 -222
  247. package/src/locales/zh-CN/pages.json +1695 -1615
  248. package/src/locales/zh-CN/settings.json +898 -450
  249. package/src/locales/zh-TW/common.json +281 -280
  250. package/src/locales/zh-TW/notifications.json +242 -222
  251. package/src/locales/zh-TW/pages.json +1804 -1724
  252. package/src/locales/zh-TW/settings.json +888 -440
@@ -1,504 +1,952 @@
1
1
  {
2
- "title": "설정",
3
- "tabs": {
4
- "general": "일반",
5
- "servers": "서버",
6
- "notifications": "알림",
7
- "mobile": "모바일 앱",
8
- "tailscale": "Tailscale",
9
- "import": "가져오기",
10
- "advanced": "고급",
11
- "jobs": "작업",
12
- "accessControl": "접근 제어",
13
- "backup": "백업"
2
+ "accessControl": {
3
+ "allowGuestAccess": "게스트 접근 허용",
4
+ "allowGuestAccessDesc": "",
5
+ "description": "Tracearr에 접근할 수 있는 사용자를 구성하세요",
6
+ "singleOwnerNote": "참고: 게스트 접근이 비활성화되면 서버 소유자만 로그인할 수 있습니다. 다른 모든 사용자는 \"접근 거부\" 메시지를 보게 됩니다.",
7
+ "title": "접근 제어"
8
+ },
9
+ "account": {
10
+ "createAccount": "계정 만들기",
11
+ "createYourAccount": "시작하려면 계정을 만드세요",
12
+ "displayName": "표시 이름",
13
+ "email": "이메일",
14
+ "password": "비밀번호",
15
+ "signInToAccount": "계정에 로그인하세요",
16
+ "useLocalAccount": "로컬 계정 대신 사용"
17
+ },
18
+ "advanced": {
19
+ "connectionScenarios": "연결 시나리오",
20
+ "externalUrl": "외부 URL",
21
+ "reverseProxy": "리버스 프록시",
22
+ "title": "고급 설정",
23
+ "trustProxy": "프록시 헤더 신뢰"
24
+ },
25
+ "backup": {
26
+ "actions": "작업",
27
+ "backToBackups": "백업으로 돌아가기",
28
+ "backupHistory": "백업 기록",
29
+ "createBackup": "백업 만들기",
30
+ "creating": "백업 생성 중...",
31
+ "databaseSize": "현재 데이터베이스 크기: {{size}}",
32
+ "date": "날짜",
33
+ "dayFri": "금요일",
34
+ "dayMon": "월요일",
35
+ "daySat": "토요일",
36
+ "daySun": "일요일",
37
+ "dayThu": "목요일",
38
+ "dayTue": "화요일",
39
+ "dayWed": "수요일",
40
+ "deleteConfirmDescription": "이 백업을 삭제할까요? 이 작업은 되돌릴 수 없습니다.",
41
+ "deleteConfirmTitle": "백업 삭제",
42
+ "description": "Tracearr 데이터를 백업하고 복원하세요",
43
+ "download": "",
44
+ "freeSpace": "백업 디렉터리 여유 공간: {{size}}",
45
+ "lowDiskSpace": "디스크 공간이 부족합니다. 백업과 복원에는 데이터베이스 크기의 최소 두 배에 해당하는 여유 공간이 필요합니다.",
46
+ "noBackups": "아직 백업이 없습니다. 위에서 첫 백업을 만들어 보세요.",
47
+ "restore": {
48
+ "automations": "자동화",
49
+ "cannotRestore": "복원에는 PostgreSQL 슈퍼유저 권한이 필요합니다. 데이터베이스 사용자에게 슈퍼유저 권한이 있는지 확인한 뒤 다시 시도하세요.",
50
+ "complete": "복원이 성공적으로 완료되었습니다. 잠시 후 페이지가 새로고침됩니다.",
51
+ "confirm": "복원 시작",
52
+ "confirmLabel": "모든 데이터가 대체된다는 것을 이해했습니다",
53
+ "databaseSize": "데이터베이스 크기",
54
+ "failed": "복원 실패",
55
+ "libraryItems": "라이브러리 항목",
56
+ "pgVersionMismatch": "백업은 PostgreSQL {{backupVersion}}에서 생성되었지만 이 서버는 PostgreSQL {{serverVersion}}을 실행 중입니다. 더 새로운 PostgreSQL 버전의 덤프는 복원할 수 없습니다.",
57
+ "selectedBackup": "선택한 백업",
58
+ "servers": "서버",
59
+ "sessions": "세션",
60
+ "tables": "테이블",
61
+ "title": "백업 복원",
62
+ "tsVersionMismatch": "백업은 TimescaleDB {{backupVersion}}로 생성되었지만 이 서버는 TimescaleDB {{serverVersion}}까지만 지원합니다.",
63
+ "users": "사용자",
64
+ "warning": "복원하면 기존 데이터가 모두 대체됩니다. 복원이 완료된 뒤 다시 로그인해야 합니다."
65
+ },
66
+ "restoreAction": "복원",
67
+ "retentionCount": "최근 항목 유지",
68
+ "retentionSuffix": "개의 예약 백업",
69
+ "rowActions": "",
70
+ "schedule": "예약 백업",
71
+ "scheduleDaily": "매일",
72
+ "scheduleDayOfMonth": "일자",
73
+ "scheduleDayOfMonthHint": "일수가 더 적은 달에는 마지막 날에 백업이 실행됩니다.",
74
+ "scheduleDayOfWeek": "요일",
75
+ "scheduleDisabled": "비활성화",
76
+ "scheduleHour": "",
77
+ "scheduleMinute": "",
78
+ "scheduleMonthly": "매월",
79
+ "scheduleTime": "시간({{timezone}})",
80
+ "scheduleType": "일정",
81
+ "scheduleWeekly": "매주",
82
+ "size": "크기",
83
+ "title": "백업",
84
+ "toast": {
85
+ "backupCreateFailed": "백업을 만들지 못했습니다",
86
+ "backupCreated": "백업이 성공적으로 생성되었습니다",
87
+ "backupDeleteFailed": "백업을 삭제하지 못했습니다",
88
+ "backupDeleted": "백업이 삭제되었습니다",
89
+ "backupUploadFailed": "백업을 업로드하지 못했습니다",
90
+ "backupUploaded": "백업이 성공적으로 업로드되었습니다",
91
+ "restoreStartFailed": "복원을 시작하지 못했습니다",
92
+ "restoreStarted": "복원이 시작되었습니다",
93
+ "scheduleError": "백업 일정을 저장하지 못했습니다",
94
+ "scheduleSaved": "백업 일정이 저장되었습니다"
95
+ },
96
+ "type": "유형",
97
+ "typeManual": "수동",
98
+ "typeScheduled": "예약됨",
99
+ "typeUploaded": "업로드됨",
100
+ "uploadBackup": "백업 업로드",
101
+ "uploading": "업로드 중...",
102
+ "version": "버전"
103
+ },
104
+ "email": {
105
+ "branding": {
106
+ "accent": "",
107
+ "accentPicker": "",
108
+ "description": "",
109
+ "footerText": "",
110
+ "footerTextHelp": "",
111
+ "logo": {
112
+ "label": "",
113
+ "none": "",
114
+ "tracearr": "",
115
+ "url": ""
116
+ },
117
+ "logoUrl": "",
118
+ "mailto": "",
119
+ "mailtoHelp": "",
120
+ "postalAddress": "",
121
+ "postalAddressHelp": "",
122
+ "save": "",
123
+ "saving": "",
124
+ "title": ""
125
+ },
126
+ "ownerOnly": "",
127
+ "suppressions": {
128
+ "add": "",
129
+ "addConfirm": "",
130
+ "addDescription": "",
131
+ "addTitle": "",
132
+ "address": "",
133
+ "empty": "",
134
+ "emptyDescription": "",
135
+ "globalNote": "",
136
+ "openSource": "",
137
+ "reason": {
138
+ "manual": "",
139
+ "unsubscribed": ""
140
+ },
141
+ "remove": "",
142
+ "removeDescription": "",
143
+ "removeTitle": "",
144
+ "title": ""
145
+ }
14
146
  },
15
147
  "general": {
16
- "title": "일반 설정",
17
- "unitSystem": "단위 체계",
18
- "metric": "미터법(km, km/h)",
19
- "imperial": "야드파운드법(mi, mph)",
20
- "timezone": "시간대",
21
- "primaryAuth": "기본 인증 방식",
22
- "localAccount": "로컬 계정",
23
- "plexAccount": "Plex 계정",
24
- "language": "언어",
25
- "languageDescription": "표시할 언어를 선택하세요.",
26
- "helpTranslate": "Tracearr 번역 돕기",
27
- "timeFormat": "시간 형식",
28
- "timeFormatDescription": "시간을 표시할 방식을 선택하세요.",
29
- "timeFormat12h": "12시간제(오후 1:30)",
30
- "timeFormat24h": "24시간제(13:30)",
31
- "appearance": "화면 표시",
32
- "appearanceDesc": "Tracearr의 화면 스타일을 맞춤 설정하세요",
33
- "theme": "테마",
34
148
  "accentColor": "강조 색상",
35
- "default": "(기본값)",
36
- "cyanDefault": "* 시안이 기본 강조 색상입니다",
37
- "themeLight": "밝게",
38
- "themeDark": "어둡게",
39
- "themeSystem": "시스템 설정 따르기",
149
+ "apiDocs": "API 문서",
150
+ "apiKeyDesc": "Homarr, Home Assistant 등 외부 연동에서 Tracearr API에 접근할 수 있습니다.",
151
+ "apiKeyReadAccess": "API 키는 Tracearr 데이터에 대한 전체 읽기 권한을 부여합니다.",
152
+ "apiRateLimit": "API 요청 한도",
153
+ "apiRateLimitDesc": "API 키별 분당 최대 공개 API 요청 수입니다. 적용하려면 다시 시작해야 합니다.",
154
+ "apiRateLimitSuffix": "/분",
40
155
  "application": "애플리케이션",
41
156
  "applicationDesc": "기본 애플리케이션 설정을 구성하세요",
42
- "unitSystemDesc": "",
43
- "sessionSync": "세션 동기화",
44
- "sessionSyncDesc": "",
45
- "syncInterval": "동기화 간격",
46
- "syncIntervalDesc": "",
47
- "syncIntervalSuffix": "초",
48
- "plexSseNote": "Plex는 거의 즉시 업데이트되는 Server-Sent Events(SSE)를 사용하므로 폴링이 필요 없습니다.",
49
- "jellyfinPollingNote": "Jellyfin/Emby는 위 간격으로 폴링됩니다.",
157
+ "copyToClipboard": "클립보드에 복사",
158
+ "cyanDefault": "* 시안이 기본 강조 색상입니다",
159
+ "default": "(기본값)",
160
+ "detect": "감지",
50
161
  "enhancedGeoIP": "향상된 GeoIP 조회",
51
162
  "enhancedGeoIPDesc": "더 정확한 위치 데이터를 위해 Plex의 GeoIP 서비스를 사용합니다. 활성화하면 조회를 위해 IP 주소가 plex.tv로 전송됩니다. 로컬 MaxMind 데이터베이스는 대체 수단으로 사용됩니다.",
52
163
  "externalAccess": "외부 접근",
53
164
  "externalAccessDesc": "(모바일 앱 같은) 외부 기기가 서버에 연결하는 방식을 구성하세요",
54
165
  "externalUrl": "외부 URL",
55
- "externalUrlPlaceholder": "https://tracearr.example.com",
56
166
  "externalUrlDesc": "외부 기기가 이 서버에 접속할 때 사용할 URL입니다. QR 코드와 모바일 앱 페어링에 사용됩니다.",
57
- "detect": "감지",
58
- "localhostWarning": "Localhost URL은 외부 기기에서 작동하지 않습니다. LAN IP나 도메인 이름을 사용하세요.",
167
+ "externalUrlPlaceholder": "https://tracearr.example.com",
168
+ "generateApiKeyPrompt": "외부 연동을 사용하려면 API 키를 생성하세요.",
169
+ "generateKey": "키 생성",
170
+ "helpTranslate": "Tracearr 번역 돕기",
171
+ "imageCache": {
172
+ "ceiling": "최대 한도",
173
+ "description": "포스터가 바뀔 때까지 각 포스터 한 장을 디스크에 보관합니다. 공간 확보를 위해 자동 삭제하지 않으며, 디스크 여유 공간이 부족해지면 캐시 저장을 중단하고 알려 줍니다.",
174
+ "diskLimited": "{{since}}부터 디스크 공간 부족: 포스터 약 {{shortfall}}개가 캐시되지 않았습니다.",
175
+ "files": "파일 수",
176
+ "floor": "확보할 여유 공간",
177
+ "free": "남은 디스크 공간",
178
+ "freeOf": "전체 {{total}} 중",
179
+ "lastSweep": "마지막 정리",
180
+ "loadError": "캐시 상태를 불러오지 못했습니다.",
181
+ "need": "예상 필요 용량",
182
+ "needHint": "포스터 {{count}}개 × 18KB",
183
+ "never": "아직 없음",
184
+ "size": "디스크 사용량",
185
+ "title": "포스터 캐시"
186
+ },
187
+ "imperial": "야드파운드법(mi, mph)",
59
188
  "iosHttpWarning": "iOS는 외부 연결에 HTTPS가 필요합니다. SSL이 적용된 리버스 프록시를 설정하세요.",
60
- "apiKeyDesc": "Homarr, Home Assistant 등 외부 연동에서 Tracearr API에 접근할 수 있습니다.",
61
- "apiDocs": "API 문서",
189
+ "jellyfinPollingNote": "Jellyfin/Emby는 위 간격으로 폴링됩니다.",
190
+ "language": "언어",
191
+ "languageDescription": "표시할 언어를 선택하세요.",
192
+ "localAccount": "로컬 계정",
193
+ "localhostWarning": "Localhost URL은 외부 기기에서 작동하지 않습니다. LAN IP나 도메인 이름을 사용하세요.",
194
+ "metric": "미터법(km, km/h)",
62
195
  "noApiKeyGenerated": "생성된 API 키가 없습니다",
63
- "copyToClipboard": "클립보드에 복사",
64
- "apiKeyReadAccess": "API 키는 Tracearr 데이터에 대한 전체 읽기 권한을 부여합니다.",
65
- "generateApiKeyPrompt": "외부 연동을 사용하려면 API 키를 생성하세요.",
196
+ "plexAccount": "Plex 계정",
197
+ "plexSseNote": "Plex는 거의 즉시 업데이트되는 Server-Sent Events(SSE)를 사용하므로 폴링이 필요 없습니다.",
198
+ "primaryAuth": "기본 인증 방식",
199
+ "publicApiSettings": "공개 API",
200
+ "publicApiSettingsDesc": "공개 API의 시청 완료 기준과 요청 한도를 설정합니다",
66
201
  "regenerate": "다시 생성",
67
- "generateKey": "키 생성",
68
202
  "regenerateApiKey": "API 키를 다시 생성할까요?",
69
203
  "regenerateApiKeyDesc": "현재 API 키가 무효화됩니다. 이전 키를 사용하는 모든 연동은 더 이상 작동하지 않습니다.",
70
- "publicApiSettings": "공개 API",
71
- "publicApiSettingsDesc": "공개 API의 시청 완료 기준과 요청 한도를 설정합니다",
72
- "watchedThresholdMovie": "영화 시청 완료 기준",
73
- "watchedThresholdMovieDesc": "",
74
- "watchedThresholdTv": "TV 에피소드 시청 완료 기준",
75
- "watchedThresholdTvDesc": "",
76
- "watchedThresholdMusic": "음악 재생 완료 기준",
77
- "watchedThresholdMusicDesc": "",
78
- "watchedThresholdSuffix": "%",
79
- "apiRateLimit": "API 요청 한도",
80
- "apiRateLimitDesc": "API 키별 분당 최대 공개 API 요청 수입니다. 적용하려면 다시 시작해야 합니다.",
81
- "apiRateLimitSuffix": "/분",
204
+ "sessionSync": "세션 동기화",
205
+ "sessionSyncDesc": "",
206
+ "syncInterval": "동기화 간격",
207
+ "syncIntervalDesc": "",
208
+ "syncIntervalSuffix": "초",
209
+ "theme": "테마",
210
+ "themeDark": "어둡게",
211
+ "themeLight": "밝게",
212
+ "themeSystem": "시스템 설정 따르기",
213
+ "timeFormat": "시간 형식",
214
+ "timeFormat12h": "12시간제(오후 1:30)",
215
+ "timeFormat24h": "24시간제(13:30)",
216
+ "timeFormatDescription": "시간을 표시할 방식을 선택하세요.",
217
+ "timezone": "시간대",
218
+ "title": "일반 설정",
219
+ "unitSystem": "단위 체계",
220
+ "unitSystemDesc": "",
82
221
  "updateChecks": {
83
- "title": "업데이트 확인",
84
222
  "description": "Tracearr는 여섯 시간마다 새 릴리스를 확인합니다. 업데이트 트리거를 수신하는 자동화를 통해 알림을 보냅니다.",
85
223
  "plugin": "실시간 플러그인",
86
224
  "pluginDesc": "Jellyfin과 Emby 서버가 이벤트를 전달하는 Tracearr 플러그인의 새 릴리스를 확인합니다.",
87
225
  "server": "미디어 서버",
88
- "serverDesc": "각 Plex, Jellyfin, Emby 서버의 설치 버전을 제작자가 배포한 최신 릴리스와 비교합니다."
226
+ "serverDesc": "각 Plex, Jellyfin, Emby 서버의 설치 버전을 제작자가 배포한 최신 릴리스와 비교합니다.",
227
+ "title": "업데이트 확인"
89
228
  },
90
- "imageCache": {
91
- "title": "포스터 캐시",
92
- "description": "포스터가 바뀔 때까지 각 포스터 한 장을 디스크에 보관합니다. 공간 확보를 위해 자동 삭제하지 않으며, 디스크 여유 공간이 부족해지면 캐시 저장을 중단하고 알려 줍니다.",
93
- "size": "디스크 사용량",
94
- "files": "파일 수",
95
- "need": "예상 필요 용량",
96
- "needHint": "포스터 {{count}}개 × 18KB",
97
- "free": "남은 디스크 공간",
98
- "freeOf": "전체 {{total}} 중",
99
- "floor": "확보할 여유 공간",
100
- "ceiling": "최대 한도",
101
- "lastSweep": "마지막 정리",
102
- "never": "아직 없음",
103
- "diskLimited": "{{since}}부터 디스크 공간 부족: 포스터 약 {{shortfall}}개가 캐시되지 않았습니다.",
104
- "loadError": "캐시 상태를 불러오지 못했습니다."
105
- }
229
+ "watchedThresholdMovie": "영화 시청 완료 기준",
230
+ "watchedThresholdMovieDesc": "",
231
+ "watchedThresholdMusic": "음악 재생 완료 기준",
232
+ "watchedThresholdMusicDesc": "",
233
+ "watchedThresholdSuffix": "%",
234
+ "watchedThresholdTv": "TV 에피소드 시청 완료 기준",
235
+ "watchedThresholdTvDesc": ""
106
236
  },
107
- "servers": {
108
- "title": "연결된 서버",
109
- "addServer": "서버 추가",
110
- "serverName": "서버 이름",
111
- "serverUrl": "서버 URL",
112
- "syncInterval": "동기화 간격",
113
- "testConnection": "연결 테스트",
114
- "connectionSuccess": "연결되었습니다",
115
- "connectionFailed": "연결에 실패했습니다",
116
- "noServersConnected": "연결된 서버가 없습니다",
117
- "noServersConnectedHint": "Jellyfin 또는 Emby 서버를 연결하려면 \"서버 추가\"를 클릭하세요",
118
- "serverType": "서버 유형",
119
- "loadingAccounts": "연결된 Plex 계정을 불러오는 중...",
120
- "noPlexAccountsLinked": "연결된 Plex 계정이 없습니다",
121
- "noPlexAccountsLinkedHint": "위에서 Plex 계정을 연결한 뒤 다시 돌아와 서버를 추가하세요.",
122
- "selectPlexAccount": "Plex 계정 선택",
123
- "chooseAccount": "계정 선택...",
124
- "selectAccountHelp": "서버를 검색할 Plex 계정을 선택하세요.",
125
- "allServersConnected": "모든 서버가 연결됨",
126
- "allServersConnectedDesc": "이 계정의 모든 서버가 이미 연결되어 있습니다.",
127
- "serverUrlPlaceholder": "http://192.168.1.100:8096",
128
- "serverUrlHelp": "Jellyfin 또는 Emby 서버에 직접 연결되는 URL입니다. 안정성을 위해 IP:포트를 사용하는 것이 좋습니다.",
129
- "serverNamePlaceholder": "내 미디어 서버",
130
- "apiKeyPlaceholder": "API 키 입력",
131
- "apiKeyHelp": "미디어 서버 대시보드의 API 키 또는 고급 설정에서 찾을 수 있습니다.",
132
- "connecting": "연결 중...",
133
- "connectServer": "서버 연결",
134
- "removeServer": "서버 제거",
135
- "removeServerConfirm": "이 서버를 제거할까요? 연결된 세션 데이터는 유지되지만, 이 서버의 새 세션은 더 이상 모니터링할 수 없습니다.",
136
- "editServer": "서버 수정",
137
- "editServerDesc": "서버 이름 또는 연결 URL을 업데이트하세요.",
138
- "serverColor": "서버 색상",
139
- "serverColorDesc": "여러 서버 보기에서 서버를 구분하는 데 사용됩니다",
140
- "updating": "업데이트 중...",
141
- "allFieldsRequired": "모든 항목을 입력해야 합니다",
142
- "addServerDialogDescPlex": "연결된 계정에서 Plex 서버를 선택하세요.",
143
- "addServerDialogDescOther": "Jellyfin 또는 Emby 서버를 연결하세요.",
144
- "description": "연결된 Plex, Jellyfin, Emby 서버를 관리하세요",
145
- "discoveringServers": "사용 가능한 Plex 서버를 검색하는 중...",
237
+ "import": {
238
+ "apiKeyHelp": "Tautulli 설정 > Web Interface > API Key에서 찾을 수 있습니다.",
239
+ "apiKeyPlaceholder": "Tautulli API 키",
240
+ "checkPlugin": "플러그인 확인",
241
+ "checkingPlugin": "확인 중...",
242
+ "connectToTautulli": "Tautulli에 연결",
243
+ "connectedFound": "연결되었습니다! 사용자 {{users}}명과 기록 {{records}}개를 찾았습니다.",
244
+ "duplicates": "중복 {{count}}개 건너뜀",
245
+ "enrichMetadata": "미디어 메타데이터로 보강(권장)",
246
+ "enrichMetadataHelp": "가져온 세션에 대해 미디어 서버에서 추가 메타데이터를 가져옵니다.",
247
+ "enriched": "보강됨",
248
+ "errors": "오류",
249
+ "exportBackupHelp": "Jellystat에서 설정 > 백업 > 활동 백업으로 이동해 데이터를 내보내세요.",
250
+ "exportBackupHint": "Jellystat에서 활동 백업을 내보내세요",
251
+ "howItWorks": "가져오기 방식",
252
+ "howItWorksDesc": "Tracearr가 소스의 모든 과거 시청 데이터를 가져옵니다. 라이브러리 크기에 따라 시간이 걸릴 수 있습니다.",
253
+ "importComplete": "가져오기 완료",
254
+ "importFailed": "가져오기 실패",
255
+ "importFullRange": "전체 기록 가져오기",
256
+ "importFullRangeHelp": "기본적으로 Tracearr가 이 서버에서 처음 기록한 세션보다 오래된 기록만 가져오므로 이미 기록된 세션이 중복되지 않습니다. Tracearr 기록에 누락된 구간이 있다면 이 옵션을 켜서 겹치는 기간과 관계없이 플러그인의 전체 기록을 가져오세요. 완전히 동일한 항목은 계속 건너뜁니다.",
257
+ "importHistory": "가져오기 기록",
258
+ "importInProgressGeneric": "가져오는 중...",
259
+ "importInProgressPercent": "가져오는 중({{percent}}% 완료)...",
260
+ "importOptions": "가져오기 옵션",
261
+ "importProgress": "가져오기 진행률",
262
+ "imported": "가져옴",
263
+ "importing": "가져오는 중...",
264
+ "includeStreamDetails": "자세한 스트림 데이터 포함(코덱, 비트레이트, 해상도)",
265
+ "includeStreamDetailsHelp": "추가 스트림 정보를 가져옵니다. 가져오기 시간이 크게 늘어날 수 있습니다.",
266
+ "jellyfinEmby": "Jellyfin/Emby(Jellystat)",
267
+ "jellystat": "Jellystat에서 가져오기",
268
+ "noServers": "연결된 서버가 없습니다",
269
+ "noServersHint": "데이터를 가져오려면 연결된 서버가 하나 이상 필요합니다.",
270
+ "overlapSkipped": "기간이 겹쳐 {{count}}개 건너뜀",
271
+ "overwriteFriendlyNames": "기존 표시 이름을 Tautulli 이름으로 덮어쓰기",
272
+ "overwriteFriendlyNamesHelp": "Tracearr의 기존 식별 이름이 Tautulli의 표시 이름으로 바뀝니다.",
273
+ "page": "페이지",
274
+ "playbackReporting": "Playback Reporting 플러그인",
275
+ "playbackReportingDesc": "Jellyfin 또는 Emby 서버에 설치된 Playback Reporting 플러그인에서 시청 기록을 바로 가져옵니다. 파일로 내보낼 필요가 없습니다.",
276
+ "pleaseEnterDetails": "Tautulli URL과 API 키를 입력하세요",
277
+ "pleaseSelectJsonFile": "JSON 파일을 선택하세요",
278
+ "plex": "Plex(Tautulli)",
279
+ "pluginFound": "플러그인 확인됨: {{oldestDate}}~{{newestDate}}, 기록 {{records}}개",
280
+ "pluginNotInstalled": "이 서버에 Playback Reporting 플러그인이 설치되지 않았거나 Tracearr에서 접근할 수 없습니다. 시청 기록을 남기려면 서버의 플러그인 카탈로그에서 설치하거나 아래에서 Jellystat 가져오기를 사용하세요.",
281
+ "processed": "처리됨",
282
+ "recordsMayBeSkipped": "다음 경우 기록을 건너뛸 수 있습니다:",
283
+ "selectJellyfinServer": "Jellyfin 또는 Emby 서버 선택",
284
+ "selectPlexServer": "Plex 서버 선택",
285
+ "selectTargetServer": "대상 서버 선택",
286
+ "serverTimezone": "서버 시간대",
287
+ "serverTimezoneHelp": "브라우저가 아닌 미디어 서버 호스트에 설정된 시간대와 일치해야 합니다. Playback Reporting의 타임스탬프는 서버 현지 시간으로 저장됩니다.",
288
+ "skipDuplicate": "중복 세션 - 이 세션은 이전에 이미 가져왔습니다.",
289
+ "skipDuplicatePlugin": "중복 기록 - 이미 직접 가져왔거나 같은 플러그인 데이터를 Jellystat에서 먼저 가져온 항목입니다.",
290
+ "skipInProgress": "진행 중인 세션 - 참조 ID가 없는 활성/미완료 세션은 건너뜁니다.",
291
+ "skipOverlap": "기간이 겹치는 기록 - 타임스탬프가 Tracearr에서 이미 추적 중인 기간에 포함됩니다. 포함하려면 전체 기록 가져오기를 켜세요.",
292
+ "skipSyncHint": "건너뛴 기록이 많다면 설정 > 서버에서 최근에 서버를 동기화했는지 확인하세요.",
293
+ "skipUserNotFoundJellyfin": "사용자를 찾을 수 없음 - Jellyfin/Emby 사용자가 Tracearr에 없습니다. 먼저 서버를 동기화해 모든 사용자를 추가하세요.",
294
+ "skipUserNotFoundPlex": "사용자를 찾을 수 없음 - Plex 사용자가 Tracearr에 없습니다. 먼저 서버를 동기화해 모든 사용자를 추가하세요.",
295
+ "skipped": "건너뜀",
296
+ "startImport": "가져오기 시작",
297
+ "startingImport": "가져오기를 시작하는 중...",
298
+ "step1": "1",
299
+ "step2": "2",
300
+ "targetServer": "대상 서버",
301
+ "tautulli": "Tautulli에서 가져오기",
302
+ "tautulliUrl": "Tautulli URL",
303
+ "tautulliUrlHelp": "Tautulli 인스턴스의 URL입니다.",
304
+ "tautulliUrlPlaceholder": "http://localhost:8181",
305
+ "testing": "테스트 중...",
306
+ "testingConnection": "연결 테스트 중...",
307
+ "title": "데이터 가져오기",
308
+ "updateExistingRecords": "기존 기록에 스트림 상세 정보 업데이트",
309
+ "updateExistingRecordsHelp": "이전에 가져온 기록에 스트림 품질 데이터를 업데이트합니다.",
310
+ "uploadJellystatBackup": "Jellystat 백업 업로드",
311
+ "uploadingBackup": "백업 파일을 업로드하는 중..."
312
+ },
313
+ "ipWarning": {
314
+ "acknowledge": "알겠습니다",
315
+ "message": "모든 사용자가 같은 IP 주소나 로컬 네트워크 IP를 사용하는 것으로 보입니다. 위치 또는 IP 주소 기반 규칙 로직에 영향을 줄 수 있습니다."
316
+ },
317
+ "jobs": {
318
+ "backfill": "백필",
319
+ "cleanup": "정리",
320
+ "delayed": "지연됨",
321
+ "description": "",
322
+ "errors": "오류",
323
+ "jobHistory": "작업 기록",
324
+ "jobHistoryDesc": "최근 유지관리 작업 실행 내역",
325
+ "lastJobCompleted": "마지막 작업이 성공적으로 완료되었습니다",
326
+ "lastJobFailed": "마지막 작업이 실패했습니다",
327
+ "mayTakeAWhile": "시간이 걸릴 수 있습니다",
328
+ "mayTakeAWhileDesc": "라이브러리 크기에 따라 이 작업을 완료하는 데 몇 분이 걸릴 수 있습니다.",
329
+ "normalization": "정규화",
330
+ "processed": "처리됨",
331
+ "queued": "대기열에 있음",
332
+ "runConfirm": "{{name}}을(를) 실행할까요?",
333
+ "runJob": "작업 실행",
334
+ "running": "실행 중",
335
+ "runningState": "실행 중",
336
+ "startJob": "작업 시작",
337
+ "title": "유지관리 작업",
338
+ "unchanged": "변경 없음",
339
+ "updated": "업데이트됨",
340
+ "waiting": "대기 중"
341
+ },
342
+ "mobile": {
343
+ "addDevice": "기기 추가",
344
+ "connectedOn": "",
345
+ "copyToken": "토큰 복사",
346
+ "deviceName": "기기 이름",
347
+ "deviceNamePlaceholder": "예: iPhone 15",
348
+ "devicesConnected": "{{max}}대 중 {{current}}대 기기 연결됨",
349
+ "disable": "비활성화",
350
+ "disableMobileAccess": "모바일 접근 비활성화",
351
+ "disableMobileAccessConfirm": "모든 모바일 기기의 연결이 끊기고 모든 세션이 취소됩니다. 나중에 모바일 접근을 다시 활성화할 수 있습니다.",
352
+ "done": "완료",
353
+ "downloadOnAppStore": "App Store에서 다운로드",
354
+ "enableMobileAccess": "모바일 접근 활성화",
355
+ "enabling": "활성화 중...",
356
+ "expiresIn": "만료까지 {{time}}",
357
+ "externalUrlBanner": "리버스 프록시를 사용하거나 원격으로 접속하나요? 모바일 앱이 서버에 연결할 수 있도록",
358
+ "externalUrlBannerLink": "외부 URL",
359
+ "externalUrlBannerSuffix": "을/를 설정하세요.",
360
+ "externalUrlRequired": "모바일 페어링을 사용하려면 일반 설정에서 외부 URL을 구성해야 합니다.",
361
+ "failedToGenerateToken": "토큰 생성 실패",
362
+ "generateToken": "페어링 토큰 생성",
363
+ "getOnGooglePlay": "Google Play에서 받기",
364
+ "lastSeen": "",
365
+ "mobileAccessDisabled": "모바일 접근이 비활성화됨",
366
+ "mobileAccessDisabledDesc": "Tracearr 모바일 앱이 서버에 연결할 수 있도록 모바일 접근을 활성화하세요.",
367
+ "noDevices": "연결된 기기가 없습니다",
368
+ "noDevicesDesc": "",
369
+ "oneTimePairToken": "일회용 페어링 토큰",
370
+ "pairDevice": "기기 페어링",
371
+ "pairNewDevice": "새 기기 페어링",
372
+ "pairNewDeviceDesc": "Tracearr 모바일 앱으로 QR 코드를 스캔하거나 토큰을 직접 입력하세요.",
373
+ "pendingTokens": "대기 중인 페어링 토큰 {{count}}개",
374
+ "removeDevice": "기기 제거",
375
+ "removeDeviceConfirm": "{{deviceName}}을/를 제거할까요? 다시 연결하려면 이 기기를 다시 페어링해야 합니다.",
376
+ "renameDevice": "기기 이름 변경",
377
+ "renameDeviceDesc": "목록에서 이 기기를 식별할 이름을 입력하세요.",
378
+ "revokeAll": "모든 세션 취소",
379
+ "revokeAllConfirm": "모든 모바일 기기의 연결이 끊깁니다. 다시 연결하려면 기기를 다시 페어링해야 합니다.",
380
+ "revokeAllSessions": "모두 취소",
381
+ "scanQrCode": "QR 코드 스캔",
382
+ "title": "모바일 앱",
383
+ "tokenExpires": "토큰 만료까지 {{time}}",
384
+ "tokenExpiryNote": "이 토큰은 5분 후 만료되며 한 번만 사용할 수 있습니다."
385
+ },
386
+ "nav": {
387
+ "descriptions": {
388
+ "api": "",
389
+ "appearance": "",
390
+ "backup": "",
391
+ "behavior": "",
392
+ "connections": "",
393
+ "destinations": "",
394
+ "email": "",
395
+ "guest": "",
396
+ "import": "",
397
+ "jobs": "",
398
+ "locale": "",
399
+ "mobile": "",
400
+ "newsletters": "",
401
+ "plexAccounts": "",
402
+ "posters": "",
403
+ "remote": ""
404
+ },
405
+ "groups": {
406
+ "access": "",
407
+ "data": "",
408
+ "general": "",
409
+ "notifications": "",
410
+ "servers": ""
411
+ },
412
+ "itemLabel": "",
413
+ "label": "",
414
+ "sections": {
415
+ "api": "",
416
+ "appearance": "",
417
+ "backup": "",
418
+ "behavior": "",
419
+ "connections": "",
420
+ "destinations": "",
421
+ "email": "",
422
+ "guest": "",
423
+ "import": "",
424
+ "jobs": "",
425
+ "locale": "",
426
+ "mobile": "",
427
+ "newsletters": "",
428
+ "plexAccounts": "",
429
+ "posters": "",
430
+ "remote": ""
431
+ },
432
+ "selectLabel": ""
433
+ },
434
+ "newsletters": {
435
+ "addEmailDestination": "",
436
+ "copyOf": "",
437
+ "counts": {
438
+ "albums_one": "",
439
+ "albums_other": "",
440
+ "movies_one": "",
441
+ "movies_other": "",
442
+ "shows_one": "",
443
+ "shows_other": "",
444
+ "watched_one": "",
445
+ "watched_other": ""
446
+ },
447
+ "deleteDescription": "",
448
+ "deleteTitle": "",
449
+ "duplicate": "",
450
+ "editor": {
451
+ "actions": {
452
+ "more": "",
453
+ "preview": "",
454
+ "send": "",
455
+ "sendHint": "",
456
+ "test": "",
457
+ "testHint": ""
458
+ },
459
+ "allLibraries": "",
460
+ "allServers": "",
461
+ "basics": "",
462
+ "clear": "",
463
+ "content": "",
464
+ "cron": "",
465
+ "cronHint": "",
466
+ "dayOfMonth": "",
467
+ "dayOfMonthHelp": "",
468
+ "dayOfWeek": "",
469
+ "days": "",
470
+ "delivery": {
471
+ "destination": "",
472
+ "destinationHelp": "",
473
+ "hostedNeedsUrl": "",
474
+ "imageMode": "",
475
+ "modeHelp": {
476
+ "hosted": "",
477
+ "inline": "",
478
+ "none": ""
479
+ },
480
+ "modePreviewHint": "",
481
+ "modes": {
482
+ "hosted": "",
483
+ "inline": "",
484
+ "none": ""
485
+ },
486
+ "noDestination": "",
487
+ "pickDestination": "",
488
+ "skipWhenEmpty": "",
489
+ "skipWhenEmptyHelp": "",
490
+ "title": ""
491
+ },
492
+ "dstNote": "",
493
+ "enabledHelp": "",
494
+ "fixFirst": "",
495
+ "headerSummary": "",
496
+ "historyNeedsSave": "",
497
+ "intro": "",
498
+ "introPlaceholder": "",
499
+ "kinds": {
500
+ "cron": "",
501
+ "daily": "",
502
+ "monthly": "",
503
+ "weekly": ""
504
+ },
505
+ "libraries": "",
506
+ "librariesHelp": "",
507
+ "librariesSelected": "",
508
+ "links": {
509
+ "tracearr": "",
510
+ "tracearrNote": ""
511
+ },
512
+ "message": "",
513
+ "name": "",
514
+ "nameHelp": "",
515
+ "newTitle": "",
516
+ "nextRun": "",
517
+ "nextRunPending": "",
518
+ "noLibraries": "",
519
+ "noServers": "",
520
+ "notFound": "",
521
+ "outro": "",
522
+ "outroPlaceholder": "",
523
+ "placeholders": {
524
+ "end_date": "",
525
+ "item_count": "",
526
+ "server_name": "",
527
+ "start_date": ""
528
+ },
529
+ "preview": {
530
+ "countsListed": {
531
+ "albums": "",
532
+ "movies": "",
533
+ "shows": ""
534
+ },
535
+ "draft": "",
536
+ "images": "",
537
+ "imagesBlocked": "",
538
+ "imagesBlockedNote": "",
539
+ "imagesOn": "",
540
+ "linksNote": "",
541
+ "recipients": "",
542
+ "subjectLabel": "",
543
+ "title": "",
544
+ "variantTab": "",
545
+ "variants": "",
546
+ "width": "",
547
+ "widths": {
548
+ "desktop": "",
549
+ "phone": ""
550
+ },
551
+ "window": "",
552
+ "windowSince": ""
553
+ },
554
+ "previewVariant_one": "",
555
+ "previewVariant_other": "",
556
+ "readiness": {
557
+ "destination": "",
558
+ "destinationError": "",
559
+ "destinationFail": "",
560
+ "destinationUnknown": "",
561
+ "dns": "",
562
+ "dnsLink": "",
563
+ "emptyVariant": "",
564
+ "externalUrl": "",
565
+ "externalUrlFail": "",
566
+ "externalUrlNotHttps": "",
567
+ "fixDestination": "",
568
+ "fixExternalUrl": "",
569
+ "fixRecipients": "",
570
+ "fromDomain": "",
571
+ "fromDomainFail": "",
572
+ "fromDomainUnknown": "",
573
+ "intro": "",
574
+ "noPublicUrl": "",
575
+ "privatePublicUrl": "",
576
+ "recipientsFail": "",
577
+ "recipientsLoadFailed": "",
578
+ "recipientsUnknown": "",
579
+ "recipients_one": "",
580
+ "recipients_other": "",
581
+ "serverSettingsLink": "",
582
+ "staleScope": "",
583
+ "title": "",
584
+ "variantsLoadFailed": ""
585
+ },
586
+ "recipients": {
587
+ "account": "",
588
+ "addAddress": "",
589
+ "addressLabel": "",
590
+ "badAddress": "",
591
+ "contactEmailFor": "",
592
+ "emptyDescription": "",
593
+ "emptyTitle": "",
594
+ "exclude": "",
595
+ "excludeAction": "",
596
+ "excludedAfterSave": "",
597
+ "excludedCount": "",
598
+ "excludedHelp": "",
599
+ "extraAddress": "",
600
+ "extraAddresses": "",
601
+ "extraAddressesHelp": "",
602
+ "groupsNote": "",
603
+ "include": "",
604
+ "includeAction": "",
605
+ "includedAfterSave": "",
606
+ "loadFailed": "",
607
+ "members": "",
608
+ "membersHelp": "",
609
+ "membersOff": "",
610
+ "membersOffSuppressed": "",
611
+ "nameLabel": "",
612
+ "namePlaceholder": "",
613
+ "noAddress": "",
614
+ "noAddressHelp": "",
615
+ "openUserPage": "",
616
+ "ownerNote": "",
617
+ "reasons": {
618
+ "banned": "",
619
+ "pending": ""
620
+ },
621
+ "removeAddress": "",
622
+ "saveEmail": "",
623
+ "saveFirst": "",
624
+ "saveFirstHelp": "",
625
+ "staleScope": "",
626
+ "suppressed": "",
627
+ "suppressedHeading": "",
628
+ "suppressedHelp": "",
629
+ "title": "",
630
+ "unknownMember": "",
631
+ "willReceive": ""
632
+ },
633
+ "removeLibrary": "",
634
+ "save": "",
635
+ "saving": "",
636
+ "schedule": "",
637
+ "scheduleKind": "",
638
+ "searchLibraries": "",
639
+ "searchServers": "",
640
+ "sections": {
641
+ "description": "",
642
+ "labels": {
643
+ "mostWatched": "",
644
+ "movies": "",
645
+ "music": "",
646
+ "seasons": "",
647
+ "shows": ""
648
+ },
649
+ "legend": "",
650
+ "mostWatched": "",
651
+ "mostWatchedHelp": "",
652
+ "movies": "",
653
+ "music": "",
654
+ "musicHelp": "",
655
+ "shows": "",
656
+ "the": "",
657
+ "units": {
658
+ "albums": "",
659
+ "mostPlayed": "",
660
+ "movies": "",
661
+ "seasonsEach": "",
662
+ "shows": ""
663
+ },
664
+ "upTo": ""
665
+ },
666
+ "send": {
667
+ "confirm": "",
668
+ "nobody": "",
669
+ "previewing": "",
670
+ "sending": "",
671
+ "summary": "",
672
+ "title": "",
673
+ "trimmed_one": "",
674
+ "trimmed_other": ""
675
+ },
676
+ "sendNeedsSave": "",
677
+ "senderName": "",
678
+ "senderNameHelp": "",
679
+ "senderNameRequiredMulti": "",
680
+ "servers": "",
681
+ "serversHelp": "",
682
+ "serversSelected": "",
683
+ "subject": "",
684
+ "subjectHelp": "",
685
+ "tabs": {
686
+ "edit": "",
687
+ "history": ""
688
+ },
689
+ "test": {
690
+ "address": "",
691
+ "description": "",
692
+ "send": "",
693
+ "title": "",
694
+ "variant": ""
695
+ },
696
+ "time": "",
697
+ "timezone": "",
698
+ "timezoneHelp": "",
699
+ "turnOnNow": "",
700
+ "unknownLibrary": "",
701
+ "unsaved": "",
702
+ "variantHeading": "",
703
+ "variantsNote": "",
704
+ "windowHelp": {
705
+ "fixed": "",
706
+ "since_last_send": ""
707
+ },
708
+ "windowKind": "",
709
+ "windowMax": "",
710
+ "windowSentence": {
711
+ "fallback": "",
712
+ "fallbackLabel": "",
713
+ "fixed": "",
714
+ "fixedAfter": "",
715
+ "fixedLabel": ""
716
+ },
717
+ "windows": {
718
+ "fixed": "",
719
+ "since_last_send": ""
720
+ }
721
+ },
722
+ "empty": "",
723
+ "emptyDescription": "",
724
+ "enabled": "",
725
+ "history": {
726
+ "attempts": "",
727
+ "empty": "",
728
+ "emptyDescription": "",
729
+ "finished": "",
730
+ "loadFailed": "",
731
+ "open": "",
732
+ "openSnapshot": "",
733
+ "openVariantSnapshot": "",
734
+ "page": "",
735
+ "pruned": "",
736
+ "recipients": "",
737
+ "recipientsEmpty": "",
738
+ "retryFailed": "",
739
+ "sendTitle": "",
740
+ "snapshotTitle": "",
741
+ "status": {
742
+ "failed": "",
743
+ "queued": "",
744
+ "sent": "",
745
+ "suppressed": "",
746
+ "unknown": ""
747
+ },
748
+ "trigger": {
749
+ "manual": "",
750
+ "schedule": "",
751
+ "test": ""
752
+ },
753
+ "unknownHelp": "",
754
+ "variant": "",
755
+ "variantEmpty": "",
756
+ "window": ""
757
+ },
758
+ "lastSend": "",
759
+ "neverSent": "",
760
+ "new": "",
761
+ "nextRun": "",
762
+ "noDestinationDescription": "",
763
+ "noDestinationHint": "",
764
+ "noDestinationTitle": "",
765
+ "noNextRun": "",
766
+ "outcome": {
767
+ "failed": "",
768
+ "partial": "",
769
+ "rendering": "",
770
+ "sending": "",
771
+ "sent": "",
772
+ "skipped_empty": ""
773
+ },
774
+ "ownerOnly": "",
775
+ "richText": {
776
+ "bold": "",
777
+ "bulletList": "",
778
+ "counter": "",
779
+ "italic": "",
780
+ "link": "",
781
+ "linkApply": "",
782
+ "linkHref": ""
783
+ },
784
+ "rowActions": "",
785
+ "schedule": {
786
+ "cron": "",
787
+ "daily": "",
788
+ "inZone": "",
789
+ "monthly": "",
790
+ "weekly": ""
791
+ },
792
+ "sendNow": ""
793
+ },
794
+ "plex": {
795
+ "chooseServer": "모니터링할 Plex Media Server를 선택하세요",
796
+ "selectServer": "서버 선택",
797
+ "signInWithPlex": "Plex로 로그인",
798
+ "signUpWithPlex": "Plex로 가입"
799
+ },
800
+ "serverHealth": {
801
+ "multipleUnreachable": "{{count}}개 서버에 연결할 수 없습니다: {{serverNames}}",
802
+ "unreachable": "{{serverName}}에 연결할 수 없습니다"
803
+ },
804
+ "servers": {
805
+ "addServer": "서버 추가",
806
+ "addServerDialogDescOther": "Jellyfin 또는 Emby 서버를 연결하세요.",
807
+ "addServerDialogDescPlex": "연결된 계정에서 Plex 서버를 선택하세요.",
808
+ "added": "{{date}} 추가됨",
809
+ "allFieldsRequired": "모든 항목을 입력해야 합니다",
810
+ "allServersConnected": "모든 서버가 연결됨",
811
+ "allServersConnectedDesc": "이 계정의 모든 서버가 이미 연결되어 있습니다.",
812
+ "apiKeyHelp": "미디어 서버 대시보드의 API 키 또는 고급 설정에서 찾을 수 있습니다.",
813
+ "apiKeyHelpEmby": "Emby 서버 > API 키에서 찾을 수 있습니다",
814
+ "apiKeyHelpJellyfin": "Jellyfin 대시보드 > API 키에서 찾을 수 있습니다",
815
+ "apiKeyPlaceholder": "API 키 입력",
816
+ "checkingConnection": "연결 확인 중…",
817
+ "chooseAccount": "계정 선택...",
818
+ "connectServer": "서버 연결",
819
+ "connecting": "연결 중...",
820
+ "connectionFailed": "연결에 실패했습니다",
821
+ "connectionSuccess": "연결되었습니다",
822
+ "description": "연결된 Plex, Jellyfin, Emby 서버를 관리하세요",
146
823
  "discoveringConnections": "연결을 검색하는 중...",
824
+ "discoveringServers": "사용 가능한 Plex 서버를 검색하는 중...",
825
+ "editServer": "서버 수정",
826
+ "editServerDesc": "서버 이름 또는 연결 URL을 업데이트하세요.",
827
+ "loadingAccounts": "연결된 Plex 계정을 불러오는 중...",
828
+ "noPlexAccountsLinked": "연결된 Plex 계정이 없습니다",
829
+ "noPlexAccountsLinkedHint": "위에서 Plex 계정을 연결한 뒤 다시 돌아와 서버를 추가하세요.",
830
+ "noServersConnected": "연결된 서버가 없습니다",
831
+ "noServersConnectedHint": "Jellyfin 또는 Emby 서버를 연결하려면 \"서버 추가\"를 클릭하세요",
147
832
  "plexAccount": "Plex 계정",
148
- "serverUrlHelpJellyfin": "Jellyfin 서버에 접근할 수 있는 URL입니다",
149
- "serverUrlHelpEmby": "Emby 서버에 접근할 수 있는 URL입니다",
150
- "apiKeyHelpJellyfin": "Jellyfin 대시보드 > API 키에서 찾을 수 있습니다",
151
- "apiKeyHelpEmby": "Emby 서버 > API 키에서 찾을 수 있습니다",
152
833
  "plexServerPlaceholder": "내 Plex 서버",
153
834
  "plexServerUrlPlaceholder": "http://192.168.1.100:32400",
154
- "updateHint": "또는 아래 업데이트를 클릭해 이름 변경만 저장하세요.",
155
- "added": "{{date}} 추가됨",
156
- "realtimeActive": "실시간 업데이트 활성화됨",
157
- "pollingMode": "폴링",
158
- "setupRealtime": "실시간 업데이트 설정",
159
- "realtimeError": "실시간 연결 오류",
160
- "checkingConnection": "연결 확인 중…",
161
- "pluginVersion": "플러그인 v{{version}}",
162
835
  "pluginUpdateAvailable": "플러그인 업데이트가 있습니다",
836
+ "pluginVersion": "플러그인 v{{version}}",
837
+ "pollingMode": "폴링",
838
+ "posterSource": {
839
+ "automatic": "자동(가장 최근 항목)",
840
+ "description": "같은 콘텐츠가 여러 서버에 있으면 이 서버의 포스터를 사용합니다. 포스터가 없으면 가장 최근에 추가된 항목의 포스터를 사용합니다.",
841
+ "emptyHint": "우선 포스터 출처를 선택하려면 서버를 추가하세요.",
842
+ "label": "우선 포스터 출처",
843
+ "ownerOnly": "",
844
+ "title": "포스터 설정",
845
+ "titleDesc": "같은 콘텐츠가 여러 서버에 있을 때 표시할 포스터의 서버를 선택합니다"
846
+ },
847
+ "publicUrl": "",
848
+ "publicUrlHint": "",
849
+ "realtimeActive": "실시간 업데이트 활성화됨",
163
850
  "realtimeDialog": {
164
- "title": "실시간 업데이트 활성화",
165
- "updateTitle": "Tracearr SSE 플러그인 업데이트",
166
- "jellyfinDescription": "다음 폴링을 기다리지 않고 즉시 세션 업데이트를 받으려면 Tracearr SSE 플러그인을 설치하세요.",
167
- "embyDescription": "다음 폴링을 기다리지 않고 즉시 세션 업데이트를 받으려면 Tracearr SSE 플러그인을 설치하세요.",
168
- "jellyfinUpdateDescription": "새 플러그인 버전이 있습니다. Jellyfin 대시보드에서 플러그인 > 카탈로그로 이동해 Tracearr SSE를 업데이트한 뒤 Jellyfin을 다시 시작하세요.",
169
- "embyUpdateDescription": "새 플러그인 버전이 있습니다. 최신 릴리스 ZIP을 내려받아 Emby 플러그인 폴더의 DLL을 교체한 뒤 Emby를 다시 시작하세요.",
170
- "repositoryUrl": "저장소 URL",
171
- "copyUrl": "URL 복사",
172
- "jellyfinRepoUrl": "https://raw.githubusercontent.com/Tracearr/Media-Server-SSE/main/manifest.json",
173
- "embyReleasesUrl": "https://github.com/Tracearr/Media-Server-SSE/releases",
174
- "openReleases": "릴리스 페이지 열기",
175
851
  "autoDetectNote": "플러그인을 설치한 뒤 Jellyfin 또는 Emby를 반드시 다시 시작하세요. Tracearr는 다시 시작할 필요 없이 플러그인을 자동으로 감지합니다.",
176
852
  "close": "닫기",
853
+ "copyUrl": "URL 복사",
854
+ "embyDescription": "다음 폴링을 기다리지 않고 즉시 세션 업데이트를 받으려면 Tracearr SSE 플러그인을 설치하세요.",
855
+ "embyReleasesUrl": "https://github.com/Tracearr/Media-Server-SSE/releases",
856
+ "embyUpdateDescription": "새 플러그인 버전이 있습니다. 최신 릴리스 ZIP을 내려받아 Emby 플러그인 폴더의 DLL을 교체한 뒤 Emby를 다시 시작하세요.",
177
857
  "issueBlocked": "서버에는 플러그인이 설치되어 활성화된 것으로 표시되지만, Tracearr가 엔드포인트에서 404 응답을 받았습니다. 보통 리버스 프록시가 해당 경로를 차단할 때 발생합니다.",
858
+ "issueMalfunctioned": "서버에서 플러그인을 불러오지 못했습니다. 플러그인이나 미디어 서버를 업데이트하면 대부분 해결됩니다.",
178
859
  "issueRestartRequired": "플러그인이 설치되었지만 활성화하려면 미디어 서버를 다시 시작해야 합니다.",
179
- "issueMalfunctioned": "서버에서 플러그인을 불러오지 못했습니다. 플러그인이나 미디어 서버를 업데이트하면 대부분 해결됩니다."
180
- },
181
- "posterSource": {
182
- "title": "포스터 설정",
183
- "titleDesc": "같은 콘텐츠가 여러 서버에 있을 때 표시할 포스터의 서버를 선택합니다",
184
- "label": "우선 포스터 출처",
185
- "description": "같은 콘텐츠가 여러 서버에 있으면 이 서버의 포스터를 사용합니다. 포스터가 없으면 가장 최근에 추가된 항목의 포스터를 사용합니다.",
186
- "automatic": "자동(가장 최근 항목)",
187
- "emptyHint": "우선 포스터 출처를 선택하려면 서버를 추가하세요."
860
+ "jellyfinDescription": "다음 폴링을 기다리지 않고 즉시 세션 업데이트를 받으려면 Tracearr SSE 플러그인을 설치하세요.",
861
+ "jellyfinRepoUrl": "https://raw.githubusercontent.com/Tracearr/Media-Server-SSE/main/manifest.json",
862
+ "jellyfinUpdateDescription": "새 플러그인 버전이 있습니다. Jellyfin 대시보드에서 플러그인 > 카탈로그로 이동해 Tracearr SSE를 업데이트한 뒤 Jellyfin을 다시 시작하세요.",
863
+ "openReleases": "릴리스 페이지 열기",
864
+ "repositoryUrl": "저장소 URL",
865
+ "title": "실시간 업데이트 활성화",
866
+ "updateTitle": "Tracearr SSE 플러그인 업데이트"
188
867
  },
189
- "version": {
190
- "installed": "버전 {{version}}",
191
- "upToDate": "최신 버전",
192
- "updateAvailable": "{{version}} 업데이트 가능"
193
- }
194
- },
195
- "mobile": {
196
- "title": "모바일 앱",
197
- "pairDevice": "기기 페어링",
198
- "connectedDevices": "연결된 기기",
199
- "generateToken": "페어링 토큰 생성",
200
- "scanQrCode": "QR 코드 스캔",
201
- "tokenExpires": "토큰 만료까지 {{time}}",
202
- "noDevices": "연결된 기기가 없습니다",
203
- "revokeAll": "모든 세션 취소",
204
- "getTheApp": "앱 받기",
205
- "getTheAppDesc": "iOS 또는 Android용 Tracearr 모바일 앱을 다운로드하세요",
206
- "getOnGooglePlay": "Google Play에서 받기",
207
- "downloadOnAppStore": "App Store에서 다운로드",
208
- "pairYourDevice": "기기 페어링",
209
- "pairYourDeviceDesc": "",
210
- "externalUrlRequired": "모바일 페어링을 사용하려면 일반 설정에서 외부 URL을 구성해야 합니다.",
211
- "mobileAccessDisabled": "모바일 접근이 비활성화됨",
212
- "mobileAccessDisabledDesc": "Tracearr 모바일 앱이 서버에 연결할 수 있도록 모바일 접근을 활성화하세요.",
213
- "enableMobileAccess": "모바일 접근 활성화",
214
- "enabling": "활성화 중...",
215
- "devicesConnected": "{{max}}대 중 {{current}}대 기기 연결됨",
216
- "pendingTokens": "대기 중인 페어링 토큰 {{count}}개",
217
- "addDevice": "기기 추가",
218
- "disableMobileAccess": "모바일 접근 비활성화",
219
- "connectedDevicesDesc": "서버에 페어링된 기기 {{count}}대",
220
- "revokeAllSessions": "모두 취소",
221
- "pairNewDevice": "새 기기 페어링",
222
- "pairNewDeviceDesc": "Tracearr 모바일 앱으로 QR 코드를 스캔하거나 토큰을 직접 입력하세요.",
223
- "expiresIn": "만료까지 {{time}}",
224
- "oneTimePairToken": "일회용 페어링 토큰",
225
- "copyToken": "토큰 복사",
226
- "tokenExpiryNote": "이 토큰은 5분 후 만료되며 한 번만 사용할 수 있습니다.",
227
- "done": "완료",
228
- "disableMobileAccessConfirm": "모든 모바일 기기의 연결이 끊기고 모든 세션이 취소됩니다. 나중에 모바일 접근을 다시 활성화할 수 있습니다.",
229
- "disable": "비활성화",
230
- "revokeAllConfirm": "모든 모바일 기기의 연결이 끊깁니다. 다시 연결하려면 기기를 다시 페어링해야 합니다.",
231
- "renameDevice": "기기 이름 변경",
232
- "renameDeviceDesc": "목록에서 이 기기를 식별할 이름을 입력하세요.",
233
- "deviceName": "기기 이름",
234
- "deviceNamePlaceholder": "예: iPhone 15",
235
- "removeDevice": "기기 제거",
236
- "failedToGenerateToken": "토큰 생성 실패",
237
- "removeDeviceConfirm": "{{deviceName}}을/를 제거할까요? 다시 연결하려면 이 기기를 다시 페어링해야 합니다.",
238
- "externalUrlBanner": "리버스 프록시를 사용하거나 원격으로 접속하나요? 모바일 앱이 서버에 연결할 수 있도록",
239
- "externalUrlBannerLink": "외부 URL",
240
- "externalUrlBannerSuffix": "을/를 설정하세요."
868
+ "realtimeError": "실시간 연결 오류",
869
+ "removeServer": "서버 제거",
870
+ "removeServerConfirm": "이 서버를 제거할까요? 연결된 세션 데이터는 유지되지만, 이 서버의 새 세션은 더 이상 모니터링할 수 없습니다.",
871
+ "reorder": "",
872
+ "selectAccountHelp": "서버를 검색할 Plex 계정을 선택하세요.",
873
+ "selectPlexAccount": "Plex 계정 선택",
874
+ "serverColor": "서버 색상",
875
+ "serverColorDesc": "여러 서버 보기에서 서버를 구분하는 데 사용됩니다",
876
+ "serverName": "서버 이름",
877
+ "serverNamePlaceholder": "내 미디어 서버",
878
+ "serverType": "서버 유형",
879
+ "serverUrl": "서버 URL",
880
+ "serverUrlHelp": "Jellyfin 또는 Emby 서버에 직접 연결되는 URL입니다. 안정성을 위해 IP:포트를 사용하는 것이 좋습니다.",
881
+ "serverUrlHelpEmby": "Emby 서버에 접근할 수 있는 URL입니다",
882
+ "serverUrlHelpJellyfin": "Jellyfin 서버에 접근할 수 있는 URL입니다",
883
+ "serverUrlPlaceholder": "http://192.168.1.100:8096",
884
+ "setupRealtime": "실시간 업데이트 설정",
885
+ "syncInterval": "동기화 간격",
886
+ "testConnection": "연결 테스트",
887
+ "title": "연결된 서버",
888
+ "updateHint": "또는 아래 업데이트를 클릭해 이름 변경만 저장하세요.",
889
+ "updating": "업데이트 중...",
890
+ "version": {
891
+ "installed": "버전 {{version}}",
892
+ "upToDate": "최신 버전",
893
+ "updateAvailable": "{{version}} 업데이트 가능"
894
+ }
895
+ },
896
+ "shared": {
897
+ "timezone": {
898
+ "empty": "",
899
+ "other": "",
900
+ "placeholder": "",
901
+ "search": ""
902
+ }
241
903
  },
242
904
  "tailscale": {
243
- "title": "Tailscale VPN",
244
- "description": "",
245
- "notAvailable": "Tailscale 바이너리를 찾을 수 없습니다. 이 기능은 공식 Docker 이미지에서 실행할 때만 사용할 수 있습니다.",
246
- "disabledDescription": "Tailscale을 활성화해 Tracearr를 개인 tailnet에 연결하세요. 포트 포워딩이나 리버스 프록시가 필요 없습니다.",
247
- "hostnameLabel": "기기 호스트 이름",
248
- "hostnameHint": "Tailnet에서 이 기기를 식별할 사용자 지정 이름입니다. 문자, 숫자, 하이픈만 사용할 수 있습니다.",
249
- "enable": "Tailscale 활성화",
250
- "disable": "Tailscale 비활성화",
251
- "starting": "Tailscale 시작 중...",
252
- "stopping": "Tailscale 중지 중...",
253
- "awaitingAuth": "승인 대기 중...",
254
905
  "authorize": "Tailscale에서 승인",
906
+ "awaitingAuth": "승인 대기 중...",
255
907
  "connected": "Tailscale이 연결되었습니다. Tracearr 인스턴스를 tailnet에서 사용할 수 있습니다.",
256
- "hostname": "호스트 이름",
908
+ "description": "",
909
+ "disable": "Tailscale 비활성화",
910
+ "disableConfirmDescription": "Tracearr가 tailnet에서 연결 해제됩니다. 다시 승인하지 않고도 나중에 다시 활성화할 수 있습니다.",
911
+ "disableConfirmTitle": "Tailscale을 비활성화할까요?",
912
+ "disabledDescription": "Tailscale을 활성화해 Tracearr를 개인 tailnet에 연결하세요. 포트 포워딩이나 리버스 프록시가 필요 없습니다.",
257
913
  "dnsName": "DNS 이름",
258
- "tailnetUrl": "URL",
259
- "showLogs": "로그 보기",
260
- "hideLogs": "로그 숨기기",
261
- "noLogs": "표시할 로그 출력이 없습니다.",
914
+ "enable": "Tailscale 활성화",
262
915
  "exitNodeNone": "없음",
263
916
  "exitNodeOffline": "(오프라인)",
264
- "unknownError": "알 수 없는 오류가 발생했습니다.",
265
- "disableConfirmTitle": "Tailscale을 비활성화할까요?",
266
- "disableConfirmDescription": "Tracearr가 tailnet에서 연결 해제됩니다. 다시 승인하지 않고도 나중에 다시 활성화할 수 있습니다.",
267
- "resetConfirmTitle": "Tailscale을 초기화할까요?",
917
+ "hideLogs": "로그 숨기기",
918
+ "hostname": "호스트 이름",
919
+ "hostnameHint": "Tailnet에서 이 기기를 식별할 사용자 지정 이름입니다. 문자, 숫자, 하이픈만 사용할 수 있습니다.",
920
+ "hostnameLabel": "기기 호스트 이름",
921
+ "noLogs": "표시할 로그 출력이 없습니다.",
922
+ "notAvailable": "Tailscale 바이너리를 찾을 수 없습니다. 이 기능은 공식 Docker 이미지에서 실행할 때만 사용할 수 있습니다.",
268
923
  "resetConfirmDescription": "Tracearr가 tailnet에서 연결 해제되고 기기 Id가 제거됩니다. 다시 활성화하려면 다시 승인해야 합니다.",
924
+ "resetConfirmTitle": "Tailscale을 초기화할까요?",
925
+ "showLogs": "로그 보기",
926
+ "starting": "Tailscale 시작 중...",
927
+ "stopping": "Tailscale 중지 중...",
928
+ "tailnetUrl": "URL",
929
+ "title": "Tailscale VPN",
269
930
  "toast": {
931
+ "disableFailed": "Tailscale을 비활성화하지 못했습니다",
270
932
  "disabled": "Tailscale이 비활성화되었습니다.",
271
933
  "enableFailed": "Tailscale을 활성화하지 못했습니다",
272
- "disableFailed": "Tailscale을 비활성화하지 못했습니다",
273
- "reset": "Tailscale이 초기화되었습니다.",
274
- "resetFailed": "Tailscale을 초기화하지 못했습니다",
934
+ "exitNodeFailed": "Exit node를 설정하지 못했습니다",
275
935
  "exitNodeSet": "Exit node가 업데이트되었습니다.",
276
- "exitNodeFailed": "Exit node를 설정하지 못했습니다"
277
- }
278
- },
279
- "jobs": {
280
- "title": "유지관리 작업",
281
- "description": "",
282
- "normalization": "정규화",
283
- "backfill": "백필",
284
- "cleanup": "정리",
285
- "running": "실행 중",
286
- "queued": "대기열에 있음",
287
- "delayed": "지연됨",
288
- "waiting": "대기 중",
289
- "runningState": "실행 중",
290
- "runJob": "작업 실행",
291
- "processed": "처리됨",
292
- "updated": "업데이트됨",
293
- "unchanged": "변경 없음",
294
- "errors": "오류",
295
- "lastJobCompleted": "마지막 작업이 성공적으로 완료되었습니다",
296
- "lastJobFailed": "마지막 작업이 실패했습니다",
297
- "jobHistory": "작업 기록",
298
- "jobHistoryDesc": "최근 유지관리 작업 실행 내역",
299
- "runConfirm": "{{name}}을(를) 실행할까요?",
300
- "mayTakeAWhile": "시간이 걸릴 수 있습니다",
301
- "mayTakeAWhileDesc": "라이브러리 크기에 따라 이 작업을 완료하는 데 몇 분이 걸릴 수 있습니다.",
302
- "startJob": "작업 시작"
303
- },
304
- "advanced": {
305
- "title": "고급 설정",
306
- "externalUrl": "외부 URL",
307
- "trustProxy": "프록시 헤더 신뢰",
308
- "reverseProxy": "리버스 프록시",
309
- "connectionScenarios": "연결 시나리오"
310
- },
311
- "accessControl": {
312
- "title": "접근 제어",
313
- "description": "Tracearr에 접근할 수 있는 사용자를 구성하세요",
314
- "allowGuestAccess": "게스트 접근 허용",
315
- "allowGuestAccessDesc": "",
316
- "singleOwnerNote": "참고: 게스트 접근이 비활성화되면 서버 소유자만 로그인할 수 있습니다. 다른 모든 사용자는 \"접근 거부\" 메시지를 보게 됩니다."
317
- },
318
- "import": {
319
- "title": "데이터 가져오기",
320
- "jellystat": "Jellystat에서 가져오기",
321
- "tautulli": "Tautulli에서 가져오기",
322
- "importProgress": "가져오기 진행률",
323
- "importComplete": "가져오기 완료",
324
- "importFailed": "가져오기 실패",
325
- "processed": "처리됨",
326
- "page": "페이지",
327
- "imported": "가져옴",
328
- "skipped": "건너뜀",
329
- "enriched": "보강됨",
330
- "errors": "오류",
331
- "noServers": "연결된 서버가 없습니다",
332
- "noServersHint": "데이터를 가져오려면 연결된 서버가 하나 이상 필요합니다.",
333
- "tautulliUrl": "Tautulli URL",
334
- "tautulliUrlPlaceholder": "http://localhost:8181",
335
- "tautulliUrlHelp": "Tautulli 인스턴스의 URL입니다.",
336
- "apiKeyHelp": "Tautulli 설정 > Web Interface > API Key에서 찾을 수 있습니다.",
337
- "testing": "테스트 중...",
338
- "connectToTautulli": "Tautulli에 연결",
339
- "importHistory": "가져오기 기록",
340
- "targetServer": "대상 서버",
341
- "selectPlexServer": "Plex 서버 선택",
342
- "overwriteFriendlyNames": "기존 표시 이름을 Tautulli 이름으로 덮어쓰기",
343
- "overwriteFriendlyNamesHelp": "Tracearr의 기존 식별 이름이 Tautulli의 표시 이름으로 바뀝니다.",
344
- "includeStreamDetails": "자세한 스트림 데이터 포함(코덱, 비트레이트, 해상도)",
345
- "includeStreamDetailsHelp": "추가 스트림 정보를 가져옵니다. 가져오기 시간이 크게 늘어날 수 있습니다.",
346
- "importing": "가져오는 중...",
347
- "startImport": "가져오기 시작",
348
- "howItWorks": "가져오기 방식",
349
- "howItWorksDesc": "Tracearr가 소스의 모든 과거 시청 데이터를 가져옵니다. 라이브러리 크기에 따라 시간이 걸릴 수 있습니다.",
350
- "recordsMayBeSkipped": "다음 경우 기록을 건너뛸 수 있습니다:",
351
- "selectTargetServer": "대상 서버 선택",
352
- "selectJellyfinServer": "Jellyfin 또는 Emby 서버 선택",
353
- "uploadJellystatBackup": "Jellystat 백업 업로드",
354
- "exportBackupHint": "Jellystat에서 활동 백업을 내보내세요",
355
- "exportBackupHelp": "Jellystat에서 설정 > 백업 > 활동 백업으로 이동해 데이터를 내보내세요.",
356
- "importOptions": "가져오기 옵션",
357
- "enrichMetadata": "미디어 메타데이터로 보강(권장)",
358
- "enrichMetadataHelp": "가져온 세션에 대해 미디어 서버에서 추가 메타데이터를 가져옵니다.",
359
- "updateExistingRecords": "기존 기록에 스트림 상세 정보 업데이트",
360
- "updateExistingRecordsHelp": "이전에 가져온 기록에 스트림 품질 데이터를 업데이트합니다.",
361
- "pleaseEnterDetails": "Tautulli URL과 API 키를 입력하세요",
362
- "testingConnection": "연결 테스트 중...",
363
- "pleaseSelectJsonFile": "JSON 파일을 선택하세요",
364
- "uploadingBackup": "백업 파일을 업로드하는 중...",
365
- "importHistoryDesc": "외부 소스에서 과거 시청 데이터를 가져옵니다",
366
- "plex": "Plex(Tautulli)",
367
- "jellyfinEmby": "Jellyfin/Emby(Jellystat)",
368
- "step1": "1",
369
- "step2": "2",
370
- "apiKeyPlaceholder": "Tautulli API 키",
371
- "skipUserNotFoundPlex": "사용자를 찾을 수 없음 - Plex 사용자가 Tracearr에 없습니다. 먼저 서버를 동기화해 모든 사용자를 추가하세요.",
372
- "skipDuplicate": "중복 세션 - 이 세션은 이전에 이미 가져왔습니다.",
373
- "skipInProgress": "진행 중인 세션 - 참조 ID가 없는 활성/미완료 세션은 건너뜁니다.",
374
- "skipUserNotFoundJellyfin": "사용자를 찾을 수 없음 - Jellyfin/Emby 사용자가 Tracearr에 없습니다. 먼저 서버를 동기화해 모든 사용자를 추가하세요.",
375
- "skipSyncHint": "건너뛴 기록이 많다면 설정 > 서버에서 최근에 서버를 동기화했는지 확인하세요.",
376
- "importInProgressPercent": "가져오는 중({{percent}}% 완료)...",
377
- "importInProgressGeneric": "가져오는 중...",
378
- "startingImport": "가져오기를 시작하는 중...",
379
- "connectedFound": "연결되었습니다! 사용자 {{users}}명과 기록 {{records}}개를 찾았습니다.",
380
- "playbackReporting": "Playback Reporting 플러그인",
381
- "playbackReportingDesc": "Jellyfin 또는 Emby 서버에 설치된 Playback Reporting 플러그인에서 시청 기록을 바로 가져옵니다. 파일로 내보낼 필요가 없습니다.",
382
- "checkPlugin": "플러그인 확인",
383
- "checkingPlugin": "확인 중...",
384
- "pluginFound": "플러그인 확인됨: {{oldestDate}}~{{newestDate}}, 기록 {{records}}개",
385
- "pluginNotInstalled": "이 서버에 Playback Reporting 플러그인이 설치되지 않았거나 Tracearr에서 접근할 수 없습니다. 시청 기록을 남기려면 서버의 플러그인 카탈로그에서 설치하거나 아래에서 Jellystat 가져오기를 사용하세요.",
386
- "serverTimezone": "서버 시간대",
387
- "serverTimezoneHelp": "브라우저가 아닌 미디어 서버 호스트에 설정된 시간대와 일치해야 합니다. Playback Reporting의 타임스탬프는 서버 현지 시간으로 저장됩니다.",
388
- "importFullRange": "전체 기록 가져오기",
389
- "importFullRangeHelp": "기본적으로 Tracearr가 이 서버에서 처음 기록한 세션보다 오래된 기록만 가져오므로 이미 기록된 세션이 중복되지 않습니다. Tracearr 기록에 누락된 구간이 있다면 이 옵션을 켜서 겹치는 기간과 관계없이 플러그인의 전체 기록을 가져오세요. 완전히 동일한 항목은 계속 건너뜁니다.",
390
- "overlapSkipped": "기간이 겹쳐 {{count}}개 건너뜀",
391
- "duplicates": "중복 {{count}}개 건너뜀",
392
- "skipOverlap": "기간이 겹치는 기록 - 타임스탬프가 Tracearr에서 이미 추적 중인 기간에 포함됩니다. 포함하려면 전체 기록 가져오기를 켜세요.",
393
- "skipDuplicatePlugin": "중복 기록 - 이미 직접 가져왔거나 같은 플러그인 데이터를 Jellystat에서 먼저 가져온 항목입니다."
394
- },
395
- "plex": {
396
- "signInWithPlex": "Plex로 로그인",
397
- "signUpWithPlex": "Plex로 가입",
398
- "selectServer": "서버 선택",
399
- "chooseServer": "모니터링할 Plex Media Server를 선택하세요"
400
- },
401
- "account": {
402
- "createAccount": "계정 만들기",
403
- "email": "이메일",
404
- "password": "비밀번호",
405
- "displayName": "표시 이름",
406
- "createYourAccount": "시작하려면 계정을 만드세요",
407
- "signInToAccount": "계정에 로그인하세요",
408
- "useLocalAccount": "로컬 계정 대신 사용"
936
+ "reset": "Tailscale이 초기화되었습니다.",
937
+ "resetFailed": "Tailscale을 초기화하지 못했습니다"
938
+ },
939
+ "unknownError": "알 수 없는 오류가 발생했습니다."
409
940
  },
941
+ "title": "설정",
410
942
  "update": {
411
- "title": "업데이트 사용 가능",
412
- "releaseNotes": "릴리스 노트",
413
- "updateCommand": "업데이트 명령",
414
- "pullInstructions": "pull 후 업데이트를 적용하려면 컨테이너를 다시 시작하세요.",
415
- "stableRelease": "안정 릴리스",
416
943
  "betaUpdate": "베타 업데이트",
417
944
  "newVersion": "새 버전",
945
+ "pullInstructions": "pull 후 업데이트를 적용하려면 컨테이너를 다시 시작하세요.",
946
+ "releaseNotes": "릴리스 노트",
947
+ "stableRelease": "안정 릴리스",
948
+ "title": "업데이트 사용 가능",
949
+ "updateCommand": "업데이트 명령",
418
950
  "versionAvailable": "{{version}} 사용 가능"
419
- },
420
- "serverHealth": {
421
- "unreachable": "{{serverName}}에 연결할 수 없습니다",
422
- "multipleUnreachable": "{{count}}개 서버에 연결할 수 없습니다: {{serverNames}}"
423
- },
424
- "ipWarning": {
425
- "message": "모든 사용자가 같은 IP 주소나 로컬 네트워크 IP를 사용하는 것으로 보입니다. 위치 또는 IP 주소 기반 규칙 로직에 영향을 줄 수 있습니다.",
426
- "acknowledge": "알겠습니다"
427
- },
428
- "backup": {
429
- "title": "백업",
430
- "backToBackups": "백업으로 돌아가기",
431
- "description": "Tracearr 데이터를 백업하고 복원하세요",
432
- "createBackup": "백업 만들기",
433
- "creating": "백업 생성 중...",
434
- "uploadBackup": "백업 업로드",
435
- "uploading": "업로드 중...",
436
- "databaseSize": "현재 데이터베이스 크기: {{size}}",
437
- "freeSpace": "백업 디렉터리 여유 공간: {{size}}",
438
- "lowDiskSpace": "디스크 공간이 부족합니다. 백업과 복원에는 데이터베이스 크기의 최소 두 배에 해당하는 여유 공간이 필요합니다.",
439
- "backupHistory": "백업 기록",
440
- "noBackups": "아직 백업이 없습니다. 위에서 첫 백업을 만들어 보세요.",
441
- "filename": "파일 이름",
442
- "size": "크기",
443
- "date": "날짜",
444
- "type": "유형",
445
- "version": "버전",
446
- "actions": "작업",
447
- "typeManual": "수동",
448
- "typeScheduled": "예약됨",
449
- "typeUploaded": "업로드됨",
450
- "restoreAction": "복원",
451
- "deleteConfirmTitle": "백업 삭제",
452
- "deleteConfirmDescription": "이 백업을 삭제할까요? 이 작업은 되돌릴 수 없습니다.",
453
- "schedule": "예약 백업",
454
- "scheduleType": "일정",
455
- "scheduleDisabled": "비활성화",
456
- "scheduleDaily": "매일",
457
- "scheduleWeekly": "매주",
458
- "scheduleMonthly": "매월",
459
- "scheduleTime": "시간({{timezone}})",
460
- "scheduleDayOfWeek": "요일",
461
- "scheduleDayOfMonth": "일자",
462
- "scheduleDayOfMonthHint": "일수가 더 적은 달에는 마지막 날에 백업이 실행됩니다.",
463
- "retentionCount": "최근 항목 유지",
464
- "retentionSuffix": "개의 예약 백업",
465
- "daySun": "일요일",
466
- "dayMon": "월요일",
467
- "dayTue": "화요일",
468
- "dayWed": "수요일",
469
- "dayThu": "목요일",
470
- "dayFri": "금요일",
471
- "daySat": "토요일",
472
- "restore": {
473
- "title": "백업 복원",
474
- "selectedBackup": "선택한 백업",
475
- "databaseSize": "데이터베이스 크기",
476
- "sessions": "세션",
477
- "users": "사용자",
478
- "servers": "서버",
479
- "automations": "자동화",
480
- "libraryItems": "라이브러리 항목",
481
- "tables": "테이블",
482
- "warning": "복원하면 기존 데이터가 모두 대체됩니다. 복원이 완료된 뒤 다시 로그인해야 합니다.",
483
- "confirmLabel": "모든 데이터가 대체된다는 것을 이해했습니다",
484
- "confirm": "복원 시작",
485
- "complete": "복원이 성공적으로 완료되었습니다. 잠시 후 페이지가 새로고침됩니다.",
486
- "failed": "복원 실패",
487
- "cannotRestore": "복원에는 PostgreSQL 슈퍼유저 권한이 필요합니다. 데이터베이스 사용자에게 슈퍼유저 권한이 있는지 확인한 뒤 다시 시도하세요.",
488
- "pgVersionMismatch": "백업은 PostgreSQL {{backupVersion}}에서 생성되었지만 이 서버는 PostgreSQL {{serverVersion}}을 실행 중입니다. 더 새로운 PostgreSQL 버전의 덤프는 복원할 수 없습니다.",
489
- "tsVersionMismatch": "백업은 TimescaleDB {{backupVersion}}로 생성되었지만 이 서버는 TimescaleDB {{serverVersion}}까지만 지원합니다."
490
- },
491
- "toast": {
492
- "backupCreated": "백업이 성공적으로 생성되었습니다",
493
- "backupCreateFailed": "백업을 만들지 못했습니다",
494
- "backupUploaded": "백업이 성공적으로 업로드되었습니다",
495
- "backupUploadFailed": "백업을 업로드하지 못했습니다",
496
- "backupDeleted": "백업이 삭제되었습니다",
497
- "backupDeleteFailed": "백업을 삭제하지 못했습니다",
498
- "restoreStarted": "복원이 시작되었습니다",
499
- "restoreStartFailed": "복원을 시작하지 못했습니다",
500
- "scheduleSaved": "백업 일정이 저장되었습니다",
501
- "scheduleError": "백업 일정을 저장하지 못했습니다"
502
- }
503
951
  }
504
952
  }