@tracearr/translations 2.2.0-beta.3 → 2.2.0

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 (365) hide show
  1. package/dist/config.d.ts +2 -0
  2. package/dist/config.d.ts.map +1 -1
  3. package/dist/config.mobile.d.ts +2 -0
  4. package/dist/config.mobile.d.ts.map +1 -1
  5. package/dist/locales/af-ZA/common.json +313 -313
  6. package/dist/locales/af-ZA/mobile.json +138 -138
  7. package/dist/locales/af-ZA/nav.json +30 -30
  8. package/dist/locales/af-ZA/notifications.json +228 -228
  9. package/dist/locales/af-ZA/pages.json +1776 -1775
  10. package/dist/locales/af-ZA/settings.json +483 -483
  11. package/dist/locales/ar-SA/common.json +289 -289
  12. package/dist/locales/ar-SA/mobile.json +96 -96
  13. package/dist/locales/ar-SA/nav.json +8 -8
  14. package/dist/locales/ar-SA/notifications.json +227 -227
  15. package/dist/locales/ar-SA/pages.json +1779 -1778
  16. package/dist/locales/ar-SA/settings.json +452 -452
  17. package/dist/locales/ca-ES/common.json +286 -286
  18. package/dist/locales/ca-ES/mobile.json +125 -125
  19. package/dist/locales/ca-ES/nav.json +8 -8
  20. package/dist/locales/ca-ES/notifications.json +228 -228
  21. package/dist/locales/ca-ES/pages.json +1775 -1774
  22. package/dist/locales/ca-ES/settings.json +471 -471
  23. package/dist/locales/cs-CZ/common.json +284 -284
  24. package/dist/locales/cs-CZ/mobile.json +99 -99
  25. package/dist/locales/cs-CZ/nav.json +8 -8
  26. package/dist/locales/cs-CZ/notifications.json +226 -226
  27. package/dist/locales/cs-CZ/pages.json +1766 -1765
  28. package/dist/locales/cs-CZ/settings.json +451 -451
  29. package/dist/locales/da-DK/common.json +284 -284
  30. package/dist/locales/da-DK/mobile.json +99 -99
  31. package/dist/locales/da-DK/nav.json +9 -9
  32. package/dist/locales/da-DK/notifications.json +226 -226
  33. package/dist/locales/da-DK/pages.json +1775 -1774
  34. package/dist/locales/da-DK/settings.json +451 -451
  35. package/dist/locales/de-DE/common.json +285 -285
  36. package/dist/locales/de-DE/mobile.json +102 -102
  37. package/dist/locales/de-DE/nav.json +10 -10
  38. package/dist/locales/de-DE/notifications.json +226 -226
  39. package/dist/locales/de-DE/pages.json +1775 -1774
  40. package/dist/locales/de-DE/settings.json +451 -451
  41. package/dist/locales/el-GR/common.json +283 -283
  42. package/dist/locales/el-GR/mobile.json +97 -97
  43. package/dist/locales/el-GR/nav.json +8 -8
  44. package/dist/locales/el-GR/notifications.json +226 -226
  45. package/dist/locales/el-GR/pages.json +1781 -1780
  46. package/dist/locales/el-GR/settings.json +451 -451
  47. package/dist/locales/en/pages.json +2 -1
  48. package/dist/locales/en-US/common.json +280 -280
  49. package/dist/locales/en-US/nav.json +20 -20
  50. package/dist/locales/en-US/notifications.json +222 -222
  51. package/dist/locales/en-US/pages.json +1553 -1552
  52. package/dist/locales/en-US/settings.json +432 -432
  53. package/dist/locales/es-ES/common.json +283 -283
  54. package/dist/locales/es-ES/mobile.json +96 -96
  55. package/dist/locales/es-ES/nav.json +8 -8
  56. package/dist/locales/es-ES/notifications.json +226 -226
  57. package/dist/locales/es-ES/pages.json +1774 -1773
  58. package/dist/locales/es-ES/settings.json +451 -451
  59. package/dist/locales/fi-FI/common.json +284 -284
  60. package/dist/locales/fi-FI/mobile.json +97 -97
  61. package/dist/locales/fi-FI/nav.json +9 -9
  62. package/dist/locales/fi-FI/notifications.json +226 -226
  63. package/dist/locales/fi-FI/pages.json +1776 -1775
  64. package/dist/locales/fi-FI/settings.json +451 -451
  65. package/dist/locales/fr-FR/common.json +284 -284
  66. package/dist/locales/fr-FR/mobile.json +10 -10
  67. package/dist/locales/fr-FR/nav.json +11 -11
  68. package/dist/locales/fr-FR/notifications.json +226 -226
  69. package/dist/locales/fr-FR/pages.json +1762 -1761
  70. package/dist/locales/fr-FR/settings.json +452 -452
  71. package/dist/locales/he-IL/common.json +313 -313
  72. package/dist/locales/he-IL/mobile.json +138 -138
  73. package/dist/locales/he-IL/nav.json +30 -30
  74. package/dist/locales/he-IL/notifications.json +228 -228
  75. package/dist/locales/he-IL/pages.json +1796 -1795
  76. package/dist/locales/he-IL/settings.json +483 -483
  77. package/dist/locales/hu-HU/common.json +298 -298
  78. package/dist/locales/hu-HU/mobile.json +138 -138
  79. package/dist/locales/hu-HU/nav.json +30 -30
  80. package/dist/locales/hu-HU/notifications.json +228 -228
  81. package/dist/locales/hu-HU/pages.json +1792 -1791
  82. package/dist/locales/hu-HU/settings.json +482 -482
  83. package/dist/locales/it-IT/common.json +284 -284
  84. package/dist/locales/it-IT/mobile.json +101 -101
  85. package/dist/locales/it-IT/nav.json +10 -10
  86. package/dist/locales/it-IT/notifications.json +227 -227
  87. package/dist/locales/it-IT/pages.json +1779 -1778
  88. package/dist/locales/it-IT/settings.json +451 -451
  89. package/dist/locales/ja-JP/common.json +283 -283
  90. package/dist/locales/ja-JP/mobile.json +98 -98
  91. package/dist/locales/ja-JP/nav.json +9 -9
  92. package/dist/locales/ja-JP/notifications.json +226 -226
  93. package/dist/locales/ja-JP/pages.json +1779 -1778
  94. package/dist/locales/ja-JP/settings.json +451 -451
  95. package/dist/locales/ko-KR/common.json +313 -313
  96. package/dist/locales/ko-KR/mobile.json +138 -138
  97. package/dist/locales/ko-KR/nav.json +30 -30
  98. package/dist/locales/ko-KR/notifications.json +228 -228
  99. package/dist/locales/ko-KR/pages.json +1796 -1795
  100. package/dist/locales/ko-KR/settings.json +483 -483
  101. package/dist/locales/nl-NL/common.json +283 -283
  102. package/dist/locales/nl-NL/mobile.json +91 -91
  103. package/dist/locales/nl-NL/nav.json +10 -10
  104. package/dist/locales/nl-NL/notifications.json +226 -226
  105. package/dist/locales/nl-NL/pages.json +1768 -1767
  106. package/dist/locales/nl-NL/settings.json +444 -444
  107. package/dist/locales/no-NO/common.json +283 -283
  108. package/dist/locales/no-NO/mobile.json +96 -96
  109. package/dist/locales/no-NO/nav.json +8 -8
  110. package/dist/locales/no-NO/notifications.json +226 -226
  111. package/dist/locales/no-NO/pages.json +1778 -1777
  112. package/dist/locales/no-NO/settings.json +451 -451
  113. package/dist/locales/pl-PL/common.json +283 -283
  114. package/dist/locales/pl-PL/mobile.json +94 -94
  115. package/dist/locales/pl-PL/nav.json +8 -8
  116. package/dist/locales/pl-PL/notifications.json +226 -226
  117. package/dist/locales/pl-PL/pages.json +1778 -1777
  118. package/dist/locales/pl-PL/settings.json +451 -451
  119. package/dist/locales/pt-BR/common.json +286 -286
  120. package/dist/locales/pt-BR/mobile.json +138 -138
  121. package/dist/locales/pt-BR/nav.json +17 -17
  122. package/dist/locales/pt-BR/notifications.json +226 -226
  123. package/dist/locales/pt-BR/pages.json +1781 -1780
  124. package/dist/locales/pt-BR/settings.json +454 -454
  125. package/dist/locales/pt-PT/common.json +289 -289
  126. package/dist/locales/pt-PT/mobile.json +97 -97
  127. package/dist/locales/pt-PT/nav.json +9 -9
  128. package/dist/locales/pt-PT/notifications.json +226 -226
  129. package/dist/locales/pt-PT/pages.json +1780 -1779
  130. package/dist/locales/pt-PT/settings.json +452 -452
  131. package/dist/locales/ro-RO/common.json +283 -283
  132. package/dist/locales/ro-RO/mobile.json +98 -98
  133. package/dist/locales/ro-RO/nav.json +9 -9
  134. package/dist/locales/ro-RO/notifications.json +226 -226
  135. package/dist/locales/ro-RO/pages.json +1779 -1778
  136. package/dist/locales/ro-RO/settings.json +451 -451
  137. package/dist/locales/ru-RU/common.json +288 -288
  138. package/dist/locales/ru-RU/mobile.json +97 -97
  139. package/dist/locales/ru-RU/nav.json +8 -8
  140. package/dist/locales/ru-RU/notifications.json +226 -226
  141. package/dist/locales/ru-RU/pages.json +1781 -1780
  142. package/dist/locales/ru-RU/settings.json +451 -451
  143. package/dist/locales/sr-SP/common.json +313 -313
  144. package/dist/locales/sr-SP/mobile.json +138 -138
  145. package/dist/locales/sr-SP/nav.json +30 -30
  146. package/dist/locales/sr-SP/notifications.json +228 -228
  147. package/dist/locales/sr-SP/pages.json +1796 -1795
  148. package/dist/locales/sr-SP/settings.json +483 -483
  149. package/dist/locales/sv-SE/common.json +284 -284
  150. package/dist/locales/sv-SE/mobile.json +100 -100
  151. package/dist/locales/sv-SE/nav.json +9 -9
  152. package/dist/locales/sv-SE/notifications.json +226 -226
  153. package/dist/locales/sv-SE/pages.json +1777 -1776
  154. package/dist/locales/sv-SE/settings.json +451 -451
  155. package/dist/locales/tr-TR/common.json +313 -313
  156. package/dist/locales/tr-TR/mobile.json +138 -138
  157. package/dist/locales/tr-TR/nav.json +30 -30
  158. package/dist/locales/tr-TR/notifications.json +228 -228
  159. package/dist/locales/tr-TR/pages.json +1792 -1791
  160. package/dist/locales/tr-TR/settings.json +483 -483
  161. package/dist/locales/uk-UA/common.json +283 -283
  162. package/dist/locales/uk-UA/mobile.json +98 -98
  163. package/dist/locales/uk-UA/nav.json +8 -8
  164. package/dist/locales/uk-UA/notifications.json +226 -226
  165. package/dist/locales/uk-UA/pages.json +1779 -1778
  166. package/dist/locales/uk-UA/settings.json +451 -451
  167. package/dist/locales/vi-VN/common.json +313 -313
  168. package/dist/locales/vi-VN/mobile.json +138 -138
  169. package/dist/locales/vi-VN/nav.json +30 -30
  170. package/dist/locales/vi-VN/notifications.json +228 -228
  171. package/dist/locales/vi-VN/pages.json +1796 -1795
  172. package/dist/locales/vi-VN/settings.json +483 -483
  173. package/dist/locales/zh-CN/common.json +283 -283
  174. package/dist/locales/zh-CN/mobile.json +95 -95
  175. package/dist/locales/zh-CN/nav.json +8 -8
  176. package/dist/locales/zh-CN/notifications.json +226 -226
  177. package/dist/locales/zh-CN/pages.json +1778 -1777
  178. package/dist/locales/zh-CN/settings.json +451 -451
  179. package/dist/locales/zh-TW/common.json +293 -293
  180. package/dist/locales/zh-TW/mobile.json +137 -137
  181. package/dist/locales/zh-TW/nav.json +30 -30
  182. package/dist/locales/zh-TW/notifications.json +228 -228
  183. package/dist/locales/zh-TW/pages.json +1798 -1797
  184. package/dist/locales/zh-TW/settings.json +482 -482
  185. package/package.json +3 -2
  186. package/src/locales/af-ZA/common.json +313 -313
  187. package/src/locales/af-ZA/mobile.json +138 -138
  188. package/src/locales/af-ZA/nav.json +30 -30
  189. package/src/locales/af-ZA/notifications.json +228 -228
  190. package/src/locales/af-ZA/pages.json +1776 -1775
  191. package/src/locales/af-ZA/settings.json +483 -483
  192. package/src/locales/ar-SA/common.json +289 -289
  193. package/src/locales/ar-SA/mobile.json +96 -96
  194. package/src/locales/ar-SA/nav.json +8 -8
  195. package/src/locales/ar-SA/notifications.json +227 -227
  196. package/src/locales/ar-SA/pages.json +1779 -1778
  197. package/src/locales/ar-SA/settings.json +452 -452
  198. package/src/locales/ca-ES/common.json +286 -286
  199. package/src/locales/ca-ES/mobile.json +125 -125
  200. package/src/locales/ca-ES/nav.json +8 -8
  201. package/src/locales/ca-ES/notifications.json +228 -228
  202. package/src/locales/ca-ES/pages.json +1775 -1774
  203. package/src/locales/ca-ES/settings.json +471 -471
  204. package/src/locales/cs-CZ/common.json +284 -284
  205. package/src/locales/cs-CZ/mobile.json +99 -99
  206. package/src/locales/cs-CZ/nav.json +8 -8
  207. package/src/locales/cs-CZ/notifications.json +226 -226
  208. package/src/locales/cs-CZ/pages.json +1766 -1765
  209. package/src/locales/cs-CZ/settings.json +451 -451
  210. package/src/locales/da-DK/common.json +284 -284
  211. package/src/locales/da-DK/mobile.json +99 -99
  212. package/src/locales/da-DK/nav.json +9 -9
  213. package/src/locales/da-DK/notifications.json +226 -226
  214. package/src/locales/da-DK/pages.json +1775 -1774
  215. package/src/locales/da-DK/settings.json +451 -451
  216. package/src/locales/de-DE/common.json +285 -285
  217. package/src/locales/de-DE/mobile.json +102 -102
  218. package/src/locales/de-DE/nav.json +10 -10
  219. package/src/locales/de-DE/notifications.json +226 -226
  220. package/src/locales/de-DE/pages.json +1775 -1774
  221. package/src/locales/de-DE/settings.json +451 -451
  222. package/src/locales/el-GR/common.json +283 -283
  223. package/src/locales/el-GR/mobile.json +97 -97
  224. package/src/locales/el-GR/nav.json +8 -8
  225. package/src/locales/el-GR/notifications.json +226 -226
  226. package/src/locales/el-GR/pages.json +1781 -1780
  227. package/src/locales/el-GR/settings.json +451 -451
  228. package/src/locales/en/pages.json +2 -1
  229. package/src/locales/en-US/common.json +280 -280
  230. package/src/locales/en-US/nav.json +20 -20
  231. package/src/locales/en-US/notifications.json +222 -222
  232. package/src/locales/en-US/pages.json +1553 -1552
  233. package/src/locales/en-US/settings.json +432 -432
  234. package/src/locales/es-ES/common.json +283 -283
  235. package/src/locales/es-ES/mobile.json +96 -96
  236. package/src/locales/es-ES/nav.json +8 -8
  237. package/src/locales/es-ES/notifications.json +226 -226
  238. package/src/locales/es-ES/pages.json +1774 -1773
  239. package/src/locales/es-ES/settings.json +451 -451
  240. package/src/locales/fi-FI/common.json +284 -284
  241. package/src/locales/fi-FI/mobile.json +97 -97
  242. package/src/locales/fi-FI/nav.json +9 -9
  243. package/src/locales/fi-FI/notifications.json +226 -226
  244. package/src/locales/fi-FI/pages.json +1776 -1775
  245. package/src/locales/fi-FI/settings.json +451 -451
  246. package/src/locales/fr-FR/common.json +284 -284
  247. package/src/locales/fr-FR/mobile.json +10 -10
  248. package/src/locales/fr-FR/nav.json +11 -11
  249. package/src/locales/fr-FR/notifications.json +226 -226
  250. package/src/locales/fr-FR/pages.json +1762 -1761
  251. package/src/locales/fr-FR/settings.json +452 -452
  252. package/src/locales/he-IL/common.json +313 -313
  253. package/src/locales/he-IL/mobile.json +138 -138
  254. package/src/locales/he-IL/nav.json +30 -30
  255. package/src/locales/he-IL/notifications.json +228 -228
  256. package/src/locales/he-IL/pages.json +1796 -1795
  257. package/src/locales/he-IL/settings.json +483 -483
  258. package/src/locales/hu-HU/common.json +298 -298
  259. package/src/locales/hu-HU/mobile.json +138 -138
  260. package/src/locales/hu-HU/nav.json +30 -30
  261. package/src/locales/hu-HU/notifications.json +228 -228
  262. package/src/locales/hu-HU/pages.json +1792 -1791
  263. package/src/locales/hu-HU/settings.json +482 -482
  264. package/src/locales/it-IT/common.json +284 -284
  265. package/src/locales/it-IT/mobile.json +101 -101
  266. package/src/locales/it-IT/nav.json +10 -10
  267. package/src/locales/it-IT/notifications.json +227 -227
  268. package/src/locales/it-IT/pages.json +1779 -1778
  269. package/src/locales/it-IT/settings.json +451 -451
  270. package/src/locales/ja-JP/common.json +283 -283
  271. package/src/locales/ja-JP/mobile.json +98 -98
  272. package/src/locales/ja-JP/nav.json +9 -9
  273. package/src/locales/ja-JP/notifications.json +226 -226
  274. package/src/locales/ja-JP/pages.json +1779 -1778
  275. package/src/locales/ja-JP/settings.json +451 -451
  276. package/src/locales/ko-KR/common.json +313 -313
  277. package/src/locales/ko-KR/mobile.json +138 -138
  278. package/src/locales/ko-KR/nav.json +30 -30
  279. package/src/locales/ko-KR/notifications.json +228 -228
  280. package/src/locales/ko-KR/pages.json +1796 -1795
  281. package/src/locales/ko-KR/settings.json +483 -483
  282. package/src/locales/nl-NL/common.json +283 -283
  283. package/src/locales/nl-NL/mobile.json +91 -91
  284. package/src/locales/nl-NL/nav.json +10 -10
  285. package/src/locales/nl-NL/notifications.json +226 -226
  286. package/src/locales/nl-NL/pages.json +1768 -1767
  287. package/src/locales/nl-NL/settings.json +444 -444
  288. package/src/locales/no-NO/common.json +283 -283
  289. package/src/locales/no-NO/mobile.json +96 -96
  290. package/src/locales/no-NO/nav.json +8 -8
  291. package/src/locales/no-NO/notifications.json +226 -226
  292. package/src/locales/no-NO/pages.json +1778 -1777
  293. package/src/locales/no-NO/settings.json +451 -451
  294. package/src/locales/pl-PL/common.json +283 -283
  295. package/src/locales/pl-PL/mobile.json +94 -94
  296. package/src/locales/pl-PL/nav.json +8 -8
  297. package/src/locales/pl-PL/notifications.json +226 -226
  298. package/src/locales/pl-PL/pages.json +1778 -1777
  299. package/src/locales/pl-PL/settings.json +451 -451
  300. package/src/locales/pt-BR/common.json +286 -286
  301. package/src/locales/pt-BR/mobile.json +138 -138
  302. package/src/locales/pt-BR/nav.json +17 -17
  303. package/src/locales/pt-BR/notifications.json +226 -226
  304. package/src/locales/pt-BR/pages.json +1781 -1780
  305. package/src/locales/pt-BR/settings.json +454 -454
  306. package/src/locales/pt-PT/common.json +289 -289
  307. package/src/locales/pt-PT/mobile.json +97 -97
  308. package/src/locales/pt-PT/nav.json +9 -9
  309. package/src/locales/pt-PT/notifications.json +226 -226
  310. package/src/locales/pt-PT/pages.json +1780 -1779
  311. package/src/locales/pt-PT/settings.json +452 -452
  312. package/src/locales/ro-RO/common.json +283 -283
  313. package/src/locales/ro-RO/mobile.json +98 -98
  314. package/src/locales/ro-RO/nav.json +9 -9
  315. package/src/locales/ro-RO/notifications.json +226 -226
  316. package/src/locales/ro-RO/pages.json +1779 -1778
  317. package/src/locales/ro-RO/settings.json +451 -451
  318. package/src/locales/ru-RU/common.json +288 -288
  319. package/src/locales/ru-RU/mobile.json +97 -97
  320. package/src/locales/ru-RU/nav.json +8 -8
  321. package/src/locales/ru-RU/notifications.json +226 -226
  322. package/src/locales/ru-RU/pages.json +1781 -1780
  323. package/src/locales/ru-RU/settings.json +451 -451
  324. package/src/locales/sr-SP/common.json +313 -313
  325. package/src/locales/sr-SP/mobile.json +138 -138
  326. package/src/locales/sr-SP/nav.json +30 -30
  327. package/src/locales/sr-SP/notifications.json +228 -228
  328. package/src/locales/sr-SP/pages.json +1796 -1795
  329. package/src/locales/sr-SP/settings.json +483 -483
  330. package/src/locales/sv-SE/common.json +284 -284
  331. package/src/locales/sv-SE/mobile.json +100 -100
  332. package/src/locales/sv-SE/nav.json +9 -9
  333. package/src/locales/sv-SE/notifications.json +226 -226
  334. package/src/locales/sv-SE/pages.json +1777 -1776
  335. package/src/locales/sv-SE/settings.json +451 -451
  336. package/src/locales/tr-TR/common.json +313 -313
  337. package/src/locales/tr-TR/mobile.json +138 -138
  338. package/src/locales/tr-TR/nav.json +30 -30
  339. package/src/locales/tr-TR/notifications.json +228 -228
  340. package/src/locales/tr-TR/pages.json +1792 -1791
  341. package/src/locales/tr-TR/settings.json +483 -483
  342. package/src/locales/uk-UA/common.json +283 -283
  343. package/src/locales/uk-UA/mobile.json +98 -98
  344. package/src/locales/uk-UA/nav.json +8 -8
  345. package/src/locales/uk-UA/notifications.json +226 -226
  346. package/src/locales/uk-UA/pages.json +1779 -1778
  347. package/src/locales/uk-UA/settings.json +451 -451
  348. package/src/locales/vi-VN/common.json +313 -313
  349. package/src/locales/vi-VN/mobile.json +138 -138
  350. package/src/locales/vi-VN/nav.json +30 -30
  351. package/src/locales/vi-VN/notifications.json +228 -228
  352. package/src/locales/vi-VN/pages.json +1796 -1795
  353. package/src/locales/vi-VN/settings.json +483 -483
  354. package/src/locales/zh-CN/common.json +283 -283
  355. package/src/locales/zh-CN/mobile.json +95 -95
  356. package/src/locales/zh-CN/nav.json +8 -8
  357. package/src/locales/zh-CN/notifications.json +226 -226
  358. package/src/locales/zh-CN/pages.json +1778 -1777
  359. package/src/locales/zh-CN/settings.json +451 -451
  360. package/src/locales/zh-TW/common.json +293 -293
  361. package/src/locales/zh-TW/mobile.json +137 -137
  362. package/src/locales/zh-TW/nav.json +30 -30
  363. package/src/locales/zh-TW/notifications.json +228 -228
  364. package/src/locales/zh-TW/pages.json +1798 -1797
  365. package/src/locales/zh-TW/settings.json +482 -482
@@ -1,170 +1,91 @@
1
1
  {
2
- "accessControl": {
3
- "allowGuestAccess": "Allow Guest Access",
4
- "allowGuestAccessDesc": "When disabled, only the server owner can log in to Tracearr",
5
- "description": "Configure who can access Tracearr",
6
- "singleOwnerNote": "Note: When guest access is disabled, only the server owner can sign in. All other users will see an \"Access Denied\" message.",
7
- "title": "Access Control"
8
- },
9
- "account": {
10
- "createAccount": "Create Account",
11
- "createYourAccount": "Create your account to get started",
12
- "displayName": "Display Name",
13
- "email": "Email",
14
- "password": "Password",
15
- "signInToAccount": "Sign in to your account",
16
- "useLocalAccount": "Use local account instead"
17
- },
18
- "advanced": {
19
- "connectionScenarios": "Connection Scenarios",
20
- "externalUrl": "External URL",
21
- "reverseProxy": "Reverse Proxy",
22
- "title": "Advanced Settings",
23
- "trustProxy": "Trust Proxy Headers"
24
- },
25
- "backup": {
26
- "actions": "Actions",
27
- "backToBackups": "Back to Backups",
28
- "backupHistory": "Backup History",
29
- "createBackup": "Create Backup",
30
- "creating": "Creating backup...",
31
- "databaseSize": "Current database size: {{size}}",
32
- "date": "Date",
33
- "dayFri": "Friday",
34
- "dayMon": "Monday",
35
- "daySat": "Saturday",
36
- "daySun": "Sunday",
37
- "dayThu": "Thursday",
38
- "dayTue": "Tuesday",
39
- "dayWed": "Wednesday",
40
- "deleteConfirmDescription": "Are you sure you want to delete this backup? This cannot be undone.",
41
- "deleteConfirmTitle": "Delete Backup",
42
- "description": "Backup and restore your Tracearr data",
43
- "filename": "Filename",
44
- "freeSpace": "Backup directory free space: {{size}}",
45
- "lowDiskSpace": "Low disk space — backups and restores require at least twice the database size in free space.",
46
- "noBackups": "No backups yet. Create your first backup above.",
47
- "restore": {
48
- "automations": "Automations",
49
- "cannotRestore": "Restore requires PostgreSQL superuser privileges. Please ensure your database user has superuser privileges and try again.",
50
- "complete": "Restore completed successfully. The page will refresh shortly.",
51
- "confirm": "Start Restore",
52
- "confirmLabel": "I understand this will replace all data",
53
- "databaseSize": "Database Size",
54
- "failed": "Restore failed",
55
- "libraryItems": "Library Items",
56
- "pgVersionMismatch": "Backup was created on PostgreSQL {{backupVersion}} but this server runs PostgreSQL {{serverVersion}}. Restoring a dump from a newer PostgreSQL version is not supported.",
57
- "selectedBackup": "Selected Backup",
58
- "servers": "Servers",
59
- "sessions": "Sessions",
60
- "tables": "Tables",
61
- "title": "Restore Backup",
62
- "tsVersionMismatch": "Backup was created with TimescaleDB {{backupVersion}} but this server only supports up to TimescaleDB {{serverVersion}}.",
63
- "users": "Users",
64
- "warning": "Restoring will replace all existing data. You will need to re-login after the restore completes."
65
- },
66
- "restoreAction": "Restore",
67
- "retentionCount": "Keep Last",
68
- "retentionSuffix": "scheduled backups",
69
- "schedule": "Scheduled Backups",
70
- "scheduleDaily": "Daily",
71
- "scheduleDayOfMonth": "Day of Month",
72
- "scheduleDayOfMonthHint": "On months with fewer days, the backup runs on the last day.",
73
- "scheduleDayOfWeek": "Day of Week",
74
- "scheduleDisabled": "Disabled",
75
- "scheduleMonthly": "Monthly",
76
- "scheduleTime": "Time ({{timezone}})",
77
- "scheduleType": "Schedule",
78
- "scheduleWeekly": "Weekly",
79
- "size": "Size",
80
- "title": "Backup",
81
- "toast": {
82
- "backupCreateFailed": "Failed to create backup",
83
- "backupCreated": "Backup created successfully",
84
- "backupDeleteFailed": "Failed to delete backup",
85
- "backupDeleted": "Backup deleted",
86
- "backupUploadFailed": "Failed to upload backup",
87
- "backupUploaded": "Backup uploaded successfully",
88
- "restoreStartFailed": "Failed to start restore",
89
- "restoreStarted": "Restore started",
90
- "scheduleError": "Failed to save backup schedule",
91
- "scheduleSaved": "Backup schedule saved"
92
- },
93
- "type": "Type",
94
- "typeManual": "Manual",
95
- "typeScheduled": "Scheduled",
96
- "typeUploaded": "Uploaded",
97
- "uploadBackup": "Upload Backup",
98
- "uploading": "Uploading...",
99
- "version": "Version"
2
+ "title": "Settings",
3
+ "tabs": {
4
+ "general": "General",
5
+ "servers": "Servers",
6
+ "notifications": "Notifications",
7
+ "mobile": "Mobile App",
8
+ "tailscale": "Tailscale",
9
+ "import": "Import",
10
+ "advanced": "Advanced",
11
+ "jobs": "Jobs",
12
+ "accessControl": "Access Control",
13
+ "backup": "Backup"
100
14
  },
101
15
  "general": {
102
- "accentColor": "Accent Color",
103
- "apiDocs": "API Docs",
104
- "apiKeyDesc": "Access the Tracearr API for third-party integrations like Homarr, Home Assistant, etc.",
105
- "apiKeyReadAccess": "Your API key grants full read access to your Tracearr data.",
106
- "apiRateLimit": "API Rate Limit",
107
- "apiRateLimitDesc": "Maximum public API requests per minute per key. Restart required to apply.",
108
- "apiRateLimitSuffix": "/min",
16
+ "title": "General Settings",
17
+ "unitSystem": "Unit System",
18
+ "metric": "Metric (km, km/h)",
19
+ "imperial": "Imperial (mi, mph)",
20
+ "timezone": "Timezone",
21
+ "primaryAuth": "Primary Authentication Method",
22
+ "localAccount": "Local Account",
23
+ "plexAccount": "Plex Account",
24
+ "language": "Language",
25
+ "languageDescription": "Choose your preferred display language.",
26
+ "helpTranslate": "Help translate Tracearr",
27
+ "timeFormat": "Time Format",
28
+ "timeFormatDescription": "Choose how times are displayed.",
29
+ "timeFormat12h": "12-hour (1:30 PM)",
30
+ "timeFormat24h": "24-hour (13:30)",
109
31
  "appearance": "Appearance",
110
32
  "appearanceDesc": "Customize the look and feel of Tracearr",
33
+ "theme": "Theme",
34
+ "accentColor": "Accent Color",
35
+ "default": "(default)",
36
+ "cyanDefault": "* Cyan is the default accent color",
37
+ "themeLight": "Light",
38
+ "themeDark": "Dark",
39
+ "themeSystem": "System",
111
40
  "application": "Application",
112
41
  "applicationDesc": "Configure basic application settings",
113
- "copyToClipboard": "Copy to clipboard",
114
- "cyanDefault": "* Cyan is the default accent color",
115
- "default": "(default)",
116
- "detect": "Detect",
42
+ "unitSystemDesc": "Choose how distances and speeds are displayed",
43
+ "sessionSync": "Session Sync",
44
+ "sessionSyncDesc": "Enable session tracking for your media servers",
45
+ "syncInterval": "Sync Interval",
46
+ "syncIntervalDesc": "Polling frequency for Jellyfin/Emby (5-300 seconds)",
47
+ "syncIntervalSuffix": "sec",
48
+ "plexSseNote": "Plex uses Server-Sent Events (SSE) for near-instant updates — no polling needed.",
49
+ "jellyfinPollingNote": "Jellyfin/Emby are polled at the interval above.",
117
50
  "enhancedGeoIP": "Enhanced GeoIP Lookup",
118
51
  "enhancedGeoIPDesc": "Use Plex's GeoIP service for more accurate location data. When enabled, IP addresses are sent to plex.tv for lookup. Local MaxMind database is used as fallback.",
119
52
  "externalAccess": "External Access",
120
53
  "externalAccessDesc": "Configure how external devices (like mobile apps) connect to your server",
121
54
  "externalUrl": "External URL",
122
- "externalUrlDesc": "The URL that external devices should use to reach this server. Used for QR codes and mobile app pairing.",
123
55
  "externalUrlPlaceholder": "https://tracearr.example.com",
124
- "generateApiKeyPrompt": "Generate an API key to enable external integrations.",
125
- "generateKey": "Generate Key",
126
- "helpTranslate": "Help translate Tracearr",
127
- "imperial": "Imperial (mi, mph)",
128
- "iosHttpWarning": "iOS requires HTTPS for external connections. Set up a reverse proxy with SSL.",
129
- "jellyfinPollingNote": "Jellyfin/Emby are polled at the interval above.",
130
- "language": "Language",
131
- "languageDescription": "Choose your preferred display language.",
132
- "localAccount": "Local Account",
56
+ "externalUrlDesc": "The URL that external devices should use to reach this server. Used for QR codes and mobile app pairing.",
57
+ "detect": "Detect",
133
58
  "localhostWarning": "Localhost URLs won't work for external devices. Use your LAN IP or a domain name.",
134
- "metric": "Metric (km, km/h)",
59
+ "iosHttpWarning": "iOS requires HTTPS for external connections. Set up a reverse proxy with SSL.",
60
+ "apiKeyDesc": "Access the Tracearr API for third-party integrations like Homarr, Home Assistant, etc.",
61
+ "apiDocs": "API Docs",
135
62
  "noApiKeyGenerated": "No API key generated",
136
- "plexAccount": "Plex Account",
137
- "plexSseNote": "Plex uses Server-Sent Events (SSE) for near-instant updates — no polling needed.",
138
- "primaryAuth": "Primary Authentication Method",
139
- "publicApiSettings": "Public API",
140
- "publicApiSettingsDesc": "Configure watch-completion thresholds and request limits for the public API",
63
+ "copyToClipboard": "Copy to clipboard",
64
+ "apiKeyReadAccess": "Your API key grants full read access to your Tracearr data.",
65
+ "generateApiKeyPrompt": "Generate an API key to enable external integrations.",
141
66
  "regenerate": "Regenerate",
67
+ "generateKey": "Generate Key",
142
68
  "regenerateApiKey": "Regenerate API Key?",
143
69
  "regenerateApiKeyDesc": "This will invalidate your current API key. Any integrations using the old key will stop working.",
144
- "sessionSync": "Session Sync",
145
- "sessionSyncDesc": "Enable session tracking for your media servers",
146
- "syncInterval": "Sync Interval",
147
- "syncIntervalDesc": "Polling frequency for Jellyfin/Emby (5-300 seconds)",
148
- "syncIntervalSuffix": "sec",
149
- "theme": "Theme",
150
- "themeDark": "Dark",
151
- "themeLight": "Light",
152
- "themeSystem": "System",
153
- "timeFormat": "Time Format",
154
- "timeFormat12h": "12-hour (1:30 PM)",
155
- "timeFormat24h": "24-hour (13:30)",
156
- "timeFormatDescription": "Choose how times are displayed.",
157
- "timezone": "Timezone",
158
- "title": "General Settings",
159
- "unitSystem": "Unit System",
160
- "unitSystemDesc": "Choose how distances and speeds are displayed",
70
+ "publicApiSettings": "Public API",
71
+ "publicApiSettingsDesc": "Configure watch-completion thresholds and request limits for the public API",
72
+ "watchedThresholdMovie": "Movie Watched Threshold",
73
+ "watchedThresholdMovieDesc": "Percentage of a movie that must be watched before it's marked complete",
74
+ "watchedThresholdTv": "TV Episode Watched Threshold",
75
+ "watchedThresholdTvDesc": "Percentage of an episode that must be watched before it's marked complete",
76
+ "watchedThresholdMusic": "Track Watched Threshold",
77
+ "watchedThresholdMusicDesc": "Percentage of a track that must be played before it's marked complete",
78
+ "watchedThresholdSuffix": "%",
79
+ "apiRateLimit": "API Rate Limit",
80
+ "apiRateLimitDesc": "Maximum public API requests per minute per key. Restart required to apply.",
81
+ "apiRateLimitSuffix": "/min",
161
82
  "updateChecks": {
83
+ "title": "Update checks",
162
84
  "description": "Tracearr looks for new releases every six hours. Notifications come from whatever automation listens for the update triggers.",
163
85
  "plugin": "Realtime plugin",
164
86
  "pluginDesc": "Check for new releases of the Tracearr plugin your Jellyfin and Emby servers stream events through.",
165
87
  "server": "Media servers",
166
- "serverDesc": "Compare what each Plex, Jellyfin and Emby server runs with the newest release its makers publish.",
167
- "title": "Update checks"
88
+ "serverDesc": "Compare what each Plex, Jellyfin and Emby server runs with the newest release its makers publish."
168
89
  },
169
90
  "imageCache": {
170
91
  "title": "Poster cache",
@@ -181,324 +102,403 @@
181
102
  "never": "not yet",
182
103
  "diskLimited": "Disk-limited since {{since}}: about {{shortfall}} of posters are not cached.",
183
104
  "loadError": "Could not load the cache status."
184
- },
185
- "watchedThresholdMovie": "Movie Watched Threshold",
186
- "watchedThresholdMovieDesc": "Percentage of a movie that must be watched before it's marked complete",
187
- "watchedThresholdMusic": "Track Watched Threshold",
188
- "watchedThresholdMusicDesc": "Percentage of a track that must be played before it's marked complete",
189
- "watchedThresholdSuffix": "%",
190
- "watchedThresholdTv": "TV Episode Watched Threshold",
191
- "watchedThresholdTvDesc": "Percentage of an episode that must be watched before it's marked complete"
192
- },
193
- "import": {
194
- "apiKeyHelp": "Found in Tautulli Settings → Web Interface → API Key.",
195
- "apiKeyPlaceholder": "Your Tautulli API key",
196
- "checkPlugin": "Check Plugin",
197
- "checkingPlugin": "Checking...",
198
- "connectToTautulli": "Connect to Tautulli",
199
- "connectedFound": "Connected! Found {{users}} users and {{records}} history records.",
200
- "duplicates": "{{count}} duplicates skipped",
201
- "enrichMetadata": "Enrich with media metadata (recommended)",
202
- "enrichMetadataHelp": "Fetches additional metadata from your media server for imported sessions.",
203
- "enriched": "Enriched",
204
- "errors": "Errors",
205
- "exportBackupHelp": "In Jellystat, go to Settings → Backup → Activity Backup to export your data.",
206
- "exportBackupHint": "Export an Activity Backup from Jellystat",
207
- "howItWorks": "How the import works",
208
- "howItWorksDesc": "Tracearr will import all historical watch data from your source. This may take a while depending on the size of your library.",
209
- "importComplete": "Import Complete",
210
- "importFailed": "Import Failed",
211
- "importFullRange": "Import full history",
212
- "importFullRangeHelp": "By default only history older than Tracearr's earliest tracked session for this server is imported, so sessions Tracearr already recorded are never duplicated. Enable this to import the plugin's entire history regardless of overlap, if your Tracearr history has gaps. Exact duplicates are still skipped.",
213
- "importHistory": "Import History",
214
- "importHistoryDesc": "Import historical watch data from external sources",
215
- "importInProgressGeneric": "Import in progress...",
216
- "importInProgressPercent": "Import in progress ({{percent}}% complete)...",
217
- "importOptions": "Import Options",
218
- "importProgress": "Import Progress",
219
- "imported": "Imported",
220
- "importing": "Importing...",
221
- "includeStreamDetails": "Include detailed stream data (codecs, bitrate, resolution)",
222
- "includeStreamDetailsHelp": "Imports additional stream information. May increase import time significantly.",
223
- "jellyfinEmby": "Jellyfin/Emby (Jellystat)",
224
- "jellystat": "Import from Jellystat",
225
- "noServers": "No Servers Connected",
226
- "noServersHint": "You need at least one connected server to import data.",
227
- "overlapSkipped": "{{count}} skipped as overlap",
228
- "overwriteFriendlyNames": "Overwrite existing friendly names with Tautulli names",
229
- "overwriteFriendlyNamesHelp": "Existing identity names in Tracearr will be replaced with the friendly names from Tautulli.",
230
- "page": "Page",
231
- "playbackReporting": "Playback Reporting Plugin",
232
- "playbackReportingDesc": "Import history directly from the Playback Reporting plugin installed on your Jellyfin or Emby server. No file export needed.",
233
- "pleaseEnterDetails": "Please enter Tautulli URL and API key",
234
- "pleaseSelectJsonFile": "Please select a JSON file",
235
- "plex": "Plex (Tautulli)",
236
- "pluginFound": "Plugin found: {{records}} records from {{oldestDate}} to {{newestDate}}",
237
- "pluginNotInstalled": "The Playback Reporting plugin is not installed on this server, or Tracearr cannot reach it. Install it from the server's plugin catalog to start recording history, or use the Jellystat import below.",
238
- "processed": "Processed",
239
- "recordsMayBeSkipped": "Records may be skipped if:",
240
- "selectJellyfinServer": "Select a Jellyfin or Emby server",
241
- "selectPlexServer": "Select a Plex server",
242
- "selectTargetServer": "Select Target Server",
243
- "serverTimezone": "Server Timezone",
244
- "serverTimezoneHelp": "Must match the timezone configured on your media server host, not your browser's timezone. Playback Reporting timestamps are stored in local server time.",
245
- "skipDuplicate": "Duplicate session — The session was already imported previously.",
246
- "skipDuplicatePlugin": "Duplicate record - already imported directly or arrived earlier via a Jellystat import of the same plugin data.",
247
- "skipInProgress": "In-progress session — Active/incomplete sessions without a reference ID are skipped.",
248
- "skipOverlap": "Overlapping record - the timestamp falls inside the period Tracearr already tracks for this server. Enable full-range import to include it.",
249
- "skipSyncHint": "If many records are skipped, ensure you've synced your server recently in Settings → Servers.",
250
- "skipUserNotFoundJellyfin": "User not found — The Jellyfin/Emby user doesn't exist in Tracearr. Sync your server first to add all users.",
251
- "skipUserNotFoundPlex": "User not found — The Plex user doesn't exist in Tracearr. Sync your server first to add all users.",
252
- "skipped": "Skipped",
253
- "startImport": "Start Import",
254
- "startingImport": "Starting import...",
255
- "step1": "1",
256
- "step2": "2",
257
- "targetServer": "Target Server",
258
- "tautulli": "Import from Tautulli",
259
- "tautulliUrl": "Tautulli URL",
260
- "tautulliUrlHelp": "The URL of your Tautulli instance.",
261
- "tautulliUrlPlaceholder": "http://localhost:8181",
262
- "testing": "Testing...",
263
- "testingConnection": "Testing connection...",
264
- "title": "Import Data",
265
- "updateExistingRecords": "Update existing records with stream details",
266
- "updateExistingRecordsHelp": "Previously imported records will be updated with stream quality data.",
267
- "uploadJellystatBackup": "Upload Jellystat Backup",
268
- "uploadingBackup": "Uploading backup file..."
269
- },
270
- "ipWarning": {
271
- "acknowledge": "Got it",
272
- "message": "All users appear to be using the same IP address or local network IPs. This may affect rule-based logic for location or IP addresses."
273
- },
274
- "jobs": {
275
- "backfill": "Backfill",
276
- "cleanup": "Cleanup",
277
- "delayed": "delayed",
278
- "description": "Manage background tasks that keep your data accurate and optimized.",
279
- "errors": "errors",
280
- "jobHistory": "Job History",
281
- "jobHistoryDesc": "Recent maintenance job executions",
282
- "lastJobCompleted": "Last job completed successfully",
283
- "lastJobFailed": "Last job failed",
284
- "mayTakeAWhile": "This may take a while",
285
- "mayTakeAWhileDesc": "This job may take several minutes to complete depending on the size of your library.",
286
- "normalization": "Normalization",
287
- "processed": "processed",
288
- "queued": "queued",
289
- "runConfirm": "Run {{name}}?",
290
- "runJob": "Run Job",
291
- "running": "running",
292
- "runningState": "Running",
293
- "startJob": "Start Job",
294
- "title": "Maintenance Jobs",
295
- "unchanged": "unchanged",
296
- "updated": "updated",
297
- "waiting": "Waiting"
298
- },
299
- "mobile": {
300
- "addDevice": "Add Device",
301
- "connectedDevices": "Connected Devices",
302
- "connectedDevicesDesc": "{{count}} devices paired to your server",
303
- "copyToken": "Copy token",
304
- "deviceName": "Device name",
305
- "deviceNamePlaceholder": "e.g. iPhone 15",
306
- "devicesConnected": "{{current}} of {{max}} devices connected",
307
- "disable": "Disable",
308
- "disableMobileAccess": "Disable Mobile Access",
309
- "disableMobileAccessConfirm": "This will disconnect all mobile devices and revoke all sessions. You can re-enable mobile access later.",
310
- "done": "Done",
311
- "downloadOnAppStore": "Download on the App Store",
312
- "enableMobileAccess": "Enable Mobile Access",
313
- "enabling": "Enabling...",
314
- "expiresIn": "Expires in {{time}}",
315
- "externalUrlBanner": "Using a reverse proxy or accessing remotely? Set your",
316
- "externalUrlBannerLink": "External URL",
317
- "externalUrlBannerSuffix": "so the mobile app can connect to your server.",
318
- "externalUrlRequired": "An external URL must be configured in General Settings for mobile pairing to work.",
319
- "failedToGenerateToken": "Failed to Generate Token",
320
- "generateToken": "Generate Pair Token",
321
- "getOnGooglePlay": "Get it on Google Play",
322
- "getTheApp": "Get the App",
323
- "getTheAppDesc": "Download the Tracearr mobile app for iOS or Android",
324
- "mobileAccessDisabled": "Mobile Access Disabled",
325
- "mobileAccessDisabledDesc": "Enable mobile access to allow the Tracearr mobile app to connect to your server.",
326
- "noDevices": "No devices connected",
327
- "oneTimePairToken": "One-Time Pair Token",
328
- "pairDevice": "Pair Device",
329
- "pairNewDevice": "Pair New Device",
330
- "pairNewDeviceDesc": "Scan the QR code with the Tracearr mobile app, or enter the token manually.",
331
- "pairYourDevice": "Pair Your Device",
332
- "pairYourDeviceDesc": "Scan the QR code with the Tracearr app to connect this server.",
333
- "pendingTokens": "{{count}} pending pair tokens",
334
- "removeDevice": "Remove Device",
335
- "removeDeviceConfirm": "Are you sure you want to remove {{deviceName}}? This device will need to pair again to reconnect.",
336
- "renameDevice": "Rename Device",
337
- "renameDeviceDesc": "Enter a name to identify this device in the list.",
338
- "revokeAll": "Revoke All Sessions",
339
- "revokeAllConfirm": "This will disconnect all mobile devices. They will need to pair again to reconnect.",
340
- "revokeAllSessions": "Revoke All",
341
- "scanQrCode": "Scan QR Code",
342
- "title": "Mobile App",
343
- "tokenExpires": "Token expires in {{time}}",
344
- "tokenExpiryNote": "This token expires in 5 minutes and can only be used once."
345
- },
346
- "plex": {
347
- "chooseServer": "Choose which Plex Media Server to monitor",
348
- "selectServer": "Select Server",
349
- "signInWithPlex": "Sign in with Plex",
350
- "signUpWithPlex": "Sign up with Plex"
351
- },
352
- "serverHealth": {
353
- "multipleUnreachable": "{{count}} servers unreachable: {{serverNames}}",
354
- "unreachable": "{{serverName}} is unreachable"
105
+ }
355
106
  },
356
107
  "servers": {
108
+ "title": "Connected Servers",
357
109
  "addServer": "Add Server",
358
- "addServerDialogDescOther": "Connect a Jellyfin or Emby server.",
359
- "addServerDialogDescPlex": "Select a Plex server from your linked account.",
360
- "added": "Added {{date}}",
361
- "allFieldsRequired": "All fields are required",
110
+ "serverName": "Server Name",
111
+ "serverUrl": "Server URL",
112
+ "syncInterval": "Sync Interval",
113
+ "testConnection": "Test Connection",
114
+ "connectionSuccess": "Connection successful",
115
+ "connectionFailed": "Connection failed",
116
+ "noServersConnected": "No servers connected",
117
+ "noServersConnectedHint": "Click \"Add Server\" to connect a Jellyfin or Emby server",
118
+ "serverType": "Server Type",
119
+ "loadingAccounts": "Loading linked Plex accounts...",
120
+ "noPlexAccountsLinked": "No Plex Accounts Linked",
121
+ "noPlexAccountsLinkedHint": "Link a Plex account above, then come back to add a server.",
122
+ "selectPlexAccount": "Select Plex Account",
123
+ "chooseAccount": "Choose an account...",
124
+ "selectAccountHelp": "Select which Plex account to discover servers from.",
362
125
  "allServersConnected": "All Servers Connected",
363
126
  "allServersConnectedDesc": "All servers from this account are already connected.",
364
- "apiKeyHelp": "Found in your media server's dashboard under API Keys or Advanced settings.",
365
- "apiKeyHelpEmby": "Find this in Emby Server → API Keys",
366
- "apiKeyHelpJellyfin": "Find this in Jellyfin Dashboard → API Keys",
127
+ "serverUrlPlaceholder": "http://192.168.1.100:8096",
128
+ "serverUrlHelp": "Direct URL to your Jellyfin or Emby server. Use IP:port for best reliability.",
129
+ "serverNamePlaceholder": "My Media Server",
367
130
  "apiKeyPlaceholder": "Enter your API key",
368
- "checkingConnection": "Checking connection…",
369
- "chooseAccount": "Choose an account...",
370
- "connectServer": "Connect Server",
131
+ "apiKeyHelp": "Found in your media server's dashboard under API Keys or Advanced settings.",
371
132
  "connecting": "Connecting...",
372
- "connectionFailed": "Connection failed",
373
- "connectionSuccess": "Connection successful",
374
- "description": "Manage your connected Plex, Jellyfin, and Emby servers",
375
- "discoveringConnections": "Discovering connections...",
376
- "discoveringServers": "Discovering available Plex servers...",
133
+ "connectServer": "Connect Server",
134
+ "removeServer": "Remove Server",
135
+ "removeServerConfirm": "Are you sure you want to remove this server? All associated session data will be retained, but you won't be able to monitor new sessions from this server.",
377
136
  "editServer": "Edit Server",
378
137
  "editServerDesc": "Update the server name or connection URL.",
379
- "loadingAccounts": "Loading linked Plex accounts...",
380
- "noPlexAccountsLinked": "No Plex Accounts Linked",
381
- "noPlexAccountsLinkedHint": "Link a Plex account above, then come back to add a server.",
382
- "noServersConnected": "No servers connected",
383
- "noServersConnectedHint": "Click \"Add Server\" to connect a Jellyfin or Emby server",
138
+ "serverColor": "Server Color",
139
+ "serverColorDesc": "Used for visual attribution in multi-server view",
140
+ "updating": "Updating...",
141
+ "allFieldsRequired": "All fields are required",
142
+ "addServerDialogDescPlex": "Select a Plex server from your linked account.",
143
+ "addServerDialogDescOther": "Connect a Jellyfin or Emby server.",
144
+ "description": "Manage your connected Plex, Jellyfin, and Emby servers",
145
+ "discoveringServers": "Discovering available Plex servers...",
146
+ "discoveringConnections": "Discovering connections...",
384
147
  "plexAccount": "Plex Account",
148
+ "serverUrlHelpJellyfin": "The URL where your Jellyfin server is accessible",
149
+ "serverUrlHelpEmby": "The URL where your Emby server is accessible",
150
+ "apiKeyHelpJellyfin": "Find this in Jellyfin Dashboard → API Keys",
151
+ "apiKeyHelpEmby": "Find this in Emby Server → API Keys",
385
152
  "plexServerPlaceholder": "My Plex Server",
386
153
  "plexServerUrlPlaceholder": "http://192.168.1.100:32400",
387
- "pluginUpdateAvailable": "Plugin update available",
388
- "pluginVersion": "plugin v{{version}}",
389
- "pollingMode": "Polling",
390
- "posterSource": {
391
- "automatic": "Automatic (most recent)",
392
- "description": "When a title is on more than one server, use this server's poster. If it doesn't have one, we'll fall back to the most recently added copy.",
393
- "emptyHint": "Add a server to choose a preferred poster source.",
394
- "label": "Preferred Poster Source",
395
- "title": "Poster Preferences",
396
- "titleDesc": "Choose which server's poster is shown when a title exists on more than one server"
397
- },
154
+ "updateHint": "Or click Update below to save only the name change.",
155
+ "added": "Added {{date}}",
398
156
  "realtimeActive": "Real-time updates active",
157
+ "pollingMode": "Polling",
158
+ "setupRealtime": "Set up real-time updates",
159
+ "realtimeError": "Real-time error",
160
+ "checkingConnection": "Checking connection…",
161
+ "pluginVersion": "plugin v{{version}}",
162
+ "pluginUpdateAvailable": "Plugin update available",
399
163
  "realtimeDialog": {
400
- "autoDetectNote": "Restart Jellyfin or Emby after installing the plugin; the restart is required. Tracearr itself needs no restart and picks the plugin up automatically.",
401
- "close": "Close",
402
- "copyUrl": "Copy URL",
164
+ "title": "Enable real-time updates",
165
+ "updateTitle": "Update the Tracearr SSE plugin",
166
+ "jellyfinDescription": "Install the Tracearr SSE plugin to get instant session updates without waiting for the next poll.",
403
167
  "embyDescription": "Install the Tracearr SSE plugin to get instant session updates without waiting for the next poll.",
404
- "embyReleasesUrl": "https://github.com/Tracearr/Media-Server-SSE/releases",
168
+ "jellyfinUpdateDescription": "A newer plugin release is available. Open your Jellyfin dashboard, go to Plugins, Catalog, and update Tracearr SSE, then restart Jellyfin.",
405
169
  "embyUpdateDescription": "A newer plugin release is available. Download the latest release zip, replace the plugin DLL in your Emby plugins folder, and restart Emby.",
406
- "issueBlocked": "The server reports the plugin as installed and active, but Tracearr gets a 404 from its endpoint. A reverse proxy blocking the path is the usual cause.",
407
- "issueMalfunctioned": "The server reports the plugin failed to load. Updating the plugin or the media server usually clears this.",
408
- "issueRestartRequired": "The plugin is installed, but the media server needs a restart before it activates.",
409
- "jellyfinDescription": "Install the Tracearr SSE plugin to get instant session updates without waiting for the next poll.",
170
+ "repositoryUrl": "Repository URL",
171
+ "copyUrl": "Copy URL",
410
172
  "jellyfinRepoUrl": "https://raw.githubusercontent.com/Tracearr/Media-Server-SSE/main/manifest.json",
411
- "jellyfinUpdateDescription": "A newer plugin release is available. Open your Jellyfin dashboard, go to Plugins, Catalog, and update Tracearr SSE, then restart Jellyfin.",
173
+ "embyReleasesUrl": "https://github.com/Tracearr/Media-Server-SSE/releases",
412
174
  "openReleases": "Open releases page",
413
- "repositoryUrl": "Repository URL",
414
- "title": "Enable real-time updates",
415
- "updateTitle": "Update the Tracearr SSE plugin"
175
+ "autoDetectNote": "Restart Jellyfin or Emby after installing the plugin; the restart is required. Tracearr itself needs no restart and picks the plugin up automatically.",
176
+ "close": "Close",
177
+ "issueBlocked": "The server reports the plugin as installed and active, but Tracearr gets a 404 from its endpoint. A reverse proxy blocking the path is the usual cause.",
178
+ "issueRestartRequired": "The plugin is installed, but the media server needs a restart before it activates.",
179
+ "issueMalfunctioned": "The server reports the plugin failed to load. Updating the plugin or the media server usually clears this."
180
+ },
181
+ "posterSource": {
182
+ "title": "Poster Preferences",
183
+ "titleDesc": "Choose which server's poster is shown when a title exists on more than one server",
184
+ "label": "Preferred Poster Source",
185
+ "description": "When a title is on more than one server, use this server's poster. If it doesn't have one, we'll fall back to the most recently added copy.",
186
+ "automatic": "Automatic (most recent)",
187
+ "emptyHint": "Add a server to choose a preferred poster source."
416
188
  },
417
- "realtimeError": "Real-time error",
418
- "removeServer": "Remove Server",
419
- "removeServerConfirm": "Are you sure you want to remove this server? All associated session data will be retained, but you won't be able to monitor new sessions from this server.",
420
- "selectAccountHelp": "Select which Plex account to discover servers from.",
421
- "selectPlexAccount": "Select Plex Account",
422
- "serverColor": "Server Color",
423
- "serverColorDesc": "Used for visual attribution in multi-server view",
424
- "serverName": "Server Name",
425
- "serverNamePlaceholder": "My Media Server",
426
- "serverType": "Server Type",
427
- "serverUrl": "Server URL",
428
- "serverUrlHelp": "Direct URL to your Jellyfin or Emby server. Use IP:port for best reliability.",
429
- "serverUrlHelpEmby": "The URL where your Emby server is accessible",
430
- "serverUrlHelpJellyfin": "The URL where your Jellyfin server is accessible",
431
- "serverUrlPlaceholder": "http://192.168.1.100:8096",
432
- "setupRealtime": "Set up real-time updates",
433
- "syncInterval": "Sync Interval",
434
- "testConnection": "Test Connection",
435
- "title": "Connected Servers",
436
- "updateHint": "Or click Update below to save only the name change.",
437
- "updating": "Updating...",
438
189
  "version": {
439
190
  "installed": "Version {{version}}",
440
191
  "upToDate": "up to date",
441
192
  "updateAvailable": "update {{version}} available"
442
193
  }
443
194
  },
444
- "tabs": {
445
- "accessControl": "Access Control",
446
- "advanced": "Advanced",
447
- "backup": "Backup",
448
- "general": "General",
449
- "import": "Import",
450
- "jobs": "Jobs",
451
- "mobile": "Mobile App",
452
- "notifications": "Notifications",
453
- "servers": "Servers",
454
- "tailscale": "Tailscale"
455
- },
456
- "tailscale": {
457
- "authorize": "Authorize in Tailscale",
458
- "awaitingAuth": "Waiting for authorization...",
459
- "connected": "Tailscale is connected. Your Tracearr instance is available on the tailnet.",
460
- "description": "Access Tracearr securely on your Tailscale network without port forwarding.",
461
- "disable": "Disable Tailscale",
462
- "disableConfirmDescription": "This will disconnect Tracearr from your tailnet. You can re-enable without re-authorizing.",
463
- "disableConfirmTitle": "Disable Tailscale?",
464
- "disabledDescription": "Enable Tailscale to put Tracearr on your private tailnet. No port forwarding or reverse proxy required.",
465
- "dnsName": "DNS Name",
466
- "enable": "Enable Tailscale",
467
- "exitNodeNone": "None",
468
- "exitNodeOffline": "(offline)",
469
- "hideLogs": "Hide Logs",
470
- "hostname": "Hostname",
471
- "hostnameHint": "Optional custom name for this device on your tailnet. Letters, numbers, and hyphens only.",
472
- "hostnameLabel": "Device Hostname",
473
- "noLogs": "No log output available.",
474
- "notAvailable": "Tailscale binary not found. This feature is only available when running the official Docker image.",
475
- "resetConfirmDescription": "This will disconnect Tracearr from your tailnet and remove the device identity. You will need to re-authorize if you enable it again.",
476
- "resetConfirmTitle": "Reset Tailscale?",
477
- "showLogs": "Show Logs",
478
- "starting": "Starting Tailscale...",
479
- "stopping": "Stopping Tailscale...",
480
- "tailnetUrl": "URL",
481
- "title": "Tailscale VPN",
482
- "toast": {
483
- "disableFailed": "Failed to disable Tailscale",
484
- "disabled": "Tailscale has been disabled.",
485
- "enableFailed": "Failed to enable Tailscale",
486
- "exitNodeFailed": "Failed to set exit node",
487
- "exitNodeSet": "Exit node updated.",
195
+ "mobile": {
196
+ "title": "Mobile App",
197
+ "pairDevice": "Pair Device",
198
+ "connectedDevices": "Connected Devices",
199
+ "generateToken": "Generate Pair Token",
200
+ "scanQrCode": "Scan QR Code",
201
+ "tokenExpires": "Token expires in {{time}}",
202
+ "noDevices": "No devices connected",
203
+ "revokeAll": "Revoke All Sessions",
204
+ "getTheApp": "Get the App",
205
+ "getTheAppDesc": "Download the Tracearr mobile app for iOS or Android",
206
+ "getOnGooglePlay": "Get it on Google Play",
207
+ "downloadOnAppStore": "Download on the App Store",
208
+ "pairYourDevice": "Pair Your Device",
209
+ "pairYourDeviceDesc": "Scan the QR code with the Tracearr app to connect this server.",
210
+ "externalUrlRequired": "An external URL must be configured in General Settings for mobile pairing to work.",
211
+ "mobileAccessDisabled": "Mobile Access Disabled",
212
+ "mobileAccessDisabledDesc": "Enable mobile access to allow the Tracearr mobile app to connect to your server.",
213
+ "enableMobileAccess": "Enable Mobile Access",
214
+ "enabling": "Enabling...",
215
+ "devicesConnected": "{{current}} of {{max}} devices connected",
216
+ "pendingTokens": "{{count}} pending pair tokens",
217
+ "addDevice": "Add Device",
218
+ "disableMobileAccess": "Disable Mobile Access",
219
+ "connectedDevicesDesc": "{{count}} devices paired to your server",
220
+ "revokeAllSessions": "Revoke All",
221
+ "pairNewDevice": "Pair New Device",
222
+ "pairNewDeviceDesc": "Scan the QR code with the Tracearr mobile app, or enter the token manually.",
223
+ "expiresIn": "Expires in {{time}}",
224
+ "oneTimePairToken": "One-Time Pair Token",
225
+ "copyToken": "Copy token",
226
+ "tokenExpiryNote": "This token expires in 5 minutes and can only be used once.",
227
+ "done": "Done",
228
+ "disableMobileAccessConfirm": "This will disconnect all mobile devices and revoke all sessions. You can re-enable mobile access later.",
229
+ "disable": "Disable",
230
+ "revokeAllConfirm": "This will disconnect all mobile devices. They will need to pair again to reconnect.",
231
+ "renameDevice": "Rename Device",
232
+ "renameDeviceDesc": "Enter a name to identify this device in the list.",
233
+ "deviceName": "Device name",
234
+ "deviceNamePlaceholder": "e.g. iPhone 15",
235
+ "removeDevice": "Remove Device",
236
+ "failedToGenerateToken": "Failed to Generate Token",
237
+ "removeDeviceConfirm": "Are you sure you want to remove {{deviceName}}? This device will need to pair again to reconnect.",
238
+ "externalUrlBanner": "Using a reverse proxy or accessing remotely? Set your",
239
+ "externalUrlBannerLink": "External URL",
240
+ "externalUrlBannerSuffix": "so the mobile app can connect to your server."
241
+ },
242
+ "tailscale": {
243
+ "title": "Tailscale VPN",
244
+ "description": "Access Tracearr securely on your Tailscale network without port forwarding.",
245
+ "notAvailable": "Tailscale binary not found. This feature is only available when running the official Docker image.",
246
+ "disabledDescription": "Enable Tailscale to put Tracearr on your private tailnet. No port forwarding or reverse proxy required.",
247
+ "hostnameLabel": "Device Hostname",
248
+ "hostnameHint": "Optional custom name for this device on your tailnet. Letters, numbers, and hyphens only.",
249
+ "enable": "Enable Tailscale",
250
+ "disable": "Disable Tailscale",
251
+ "starting": "Starting Tailscale...",
252
+ "stopping": "Stopping Tailscale...",
253
+ "awaitingAuth": "Waiting for authorization...",
254
+ "authorize": "Authorize in Tailscale",
255
+ "connected": "Tailscale is connected. Your Tracearr instance is available on the tailnet.",
256
+ "hostname": "Hostname",
257
+ "dnsName": "DNS Name",
258
+ "tailnetUrl": "URL",
259
+ "showLogs": "Show Logs",
260
+ "hideLogs": "Hide Logs",
261
+ "noLogs": "No log output available.",
262
+ "exitNodeNone": "None",
263
+ "exitNodeOffline": "(offline)",
264
+ "unknownError": "An unknown error occurred.",
265
+ "disableConfirmTitle": "Disable Tailscale?",
266
+ "disableConfirmDescription": "This will disconnect Tracearr from your tailnet. You can re-enable without re-authorizing.",
267
+ "resetConfirmTitle": "Reset Tailscale?",
268
+ "resetConfirmDescription": "This will disconnect Tracearr from your tailnet and remove the device identity. You will need to re-authorize if you enable it again.",
269
+ "toast": {
270
+ "disabled": "Tailscale has been disabled.",
271
+ "enableFailed": "Failed to enable Tailscale",
272
+ "disableFailed": "Failed to disable Tailscale",
488
273
  "reset": "Tailscale has been reset.",
489
- "resetFailed": "Failed to reset Tailscale"
490
- },
491
- "unknownError": "An unknown error occurred."
274
+ "resetFailed": "Failed to reset Tailscale",
275
+ "exitNodeSet": "Exit node updated.",
276
+ "exitNodeFailed": "Failed to set exit node"
277
+ }
278
+ },
279
+ "jobs": {
280
+ "title": "Maintenance Jobs",
281
+ "description": "Manage background tasks that keep your data accurate and optimized.",
282
+ "normalization": "Normalization",
283
+ "backfill": "Backfill",
284
+ "cleanup": "Cleanup",
285
+ "running": "running",
286
+ "queued": "queued",
287
+ "delayed": "delayed",
288
+ "waiting": "Waiting",
289
+ "runningState": "Running",
290
+ "runJob": "Run Job",
291
+ "processed": "processed",
292
+ "updated": "updated",
293
+ "unchanged": "unchanged",
294
+ "errors": "errors",
295
+ "lastJobCompleted": "Last job completed successfully",
296
+ "lastJobFailed": "Last job failed",
297
+ "jobHistory": "Job History",
298
+ "jobHistoryDesc": "Recent maintenance job executions",
299
+ "runConfirm": "Run {{name}}?",
300
+ "mayTakeAWhile": "This may take a while",
301
+ "mayTakeAWhileDesc": "This job may take several minutes to complete depending on the size of your library.",
302
+ "startJob": "Start Job"
303
+ },
304
+ "advanced": {
305
+ "title": "Advanced Settings",
306
+ "externalUrl": "External URL",
307
+ "trustProxy": "Trust Proxy Headers",
308
+ "reverseProxy": "Reverse Proxy",
309
+ "connectionScenarios": "Connection Scenarios"
310
+ },
311
+ "accessControl": {
312
+ "title": "Access Control",
313
+ "description": "Configure who can access Tracearr",
314
+ "allowGuestAccess": "Allow Guest Access",
315
+ "allowGuestAccessDesc": "When disabled, only the server owner can log in to Tracearr",
316
+ "singleOwnerNote": "Note: When guest access is disabled, only the server owner can sign in. All other users will see an \"Access Denied\" message."
317
+ },
318
+ "import": {
319
+ "title": "Import Data",
320
+ "jellystat": "Import from Jellystat",
321
+ "tautulli": "Import from Tautulli",
322
+ "importProgress": "Import Progress",
323
+ "importComplete": "Import Complete",
324
+ "importFailed": "Import Failed",
325
+ "processed": "Processed",
326
+ "page": "Page",
327
+ "imported": "Imported",
328
+ "skipped": "Skipped",
329
+ "enriched": "Enriched",
330
+ "errors": "Errors",
331
+ "noServers": "No Servers Connected",
332
+ "noServersHint": "You need at least one connected server to import data.",
333
+ "tautulliUrl": "Tautulli URL",
334
+ "tautulliUrlPlaceholder": "http://localhost:8181",
335
+ "tautulliUrlHelp": "The URL of your Tautulli instance.",
336
+ "apiKeyHelp": "Found in Tautulli Settings → Web Interface → API Key.",
337
+ "testing": "Testing...",
338
+ "connectToTautulli": "Connect to Tautulli",
339
+ "importHistory": "Import History",
340
+ "targetServer": "Target Server",
341
+ "selectPlexServer": "Select a Plex server",
342
+ "overwriteFriendlyNames": "Overwrite existing friendly names with Tautulli names",
343
+ "overwriteFriendlyNamesHelp": "Existing identity names in Tracearr will be replaced with the friendly names from Tautulli.",
344
+ "includeStreamDetails": "Include detailed stream data (codecs, bitrate, resolution)",
345
+ "includeStreamDetailsHelp": "Imports additional stream information. May increase import time significantly.",
346
+ "importing": "Importing...",
347
+ "startImport": "Start Import",
348
+ "howItWorks": "How the import works",
349
+ "howItWorksDesc": "Tracearr will import all historical watch data from your source. This may take a while depending on the size of your library.",
350
+ "recordsMayBeSkipped": "Records may be skipped if:",
351
+ "selectTargetServer": "Select Target Server",
352
+ "selectJellyfinServer": "Select a Jellyfin or Emby server",
353
+ "uploadJellystatBackup": "Upload Jellystat Backup",
354
+ "exportBackupHint": "Export an Activity Backup from Jellystat",
355
+ "exportBackupHelp": "In Jellystat, go to Settings → Backup → Activity Backup to export your data.",
356
+ "importOptions": "Import Options",
357
+ "enrichMetadata": "Enrich with media metadata (recommended)",
358
+ "enrichMetadataHelp": "Fetches additional metadata from your media server for imported sessions.",
359
+ "updateExistingRecords": "Update existing records with stream details",
360
+ "updateExistingRecordsHelp": "Previously imported records will be updated with stream quality data.",
361
+ "pleaseEnterDetails": "Please enter Tautulli URL and API key",
362
+ "testingConnection": "Testing connection...",
363
+ "pleaseSelectJsonFile": "Please select a JSON file",
364
+ "uploadingBackup": "Uploading backup file...",
365
+ "importHistoryDesc": "Import historical watch data from external sources",
366
+ "plex": "Plex (Tautulli)",
367
+ "jellyfinEmby": "Jellyfin/Emby (Jellystat)",
368
+ "step1": "1",
369
+ "step2": "2",
370
+ "apiKeyPlaceholder": "Your Tautulli API key",
371
+ "skipUserNotFoundPlex": "User not found — The Plex user doesn't exist in Tracearr. Sync your server first to add all users.",
372
+ "skipDuplicate": "Duplicate session — The session was already imported previously.",
373
+ "skipInProgress": "In-progress session — Active/incomplete sessions without a reference ID are skipped.",
374
+ "skipUserNotFoundJellyfin": "User not found — The Jellyfin/Emby user doesn't exist in Tracearr. Sync your server first to add all users.",
375
+ "skipSyncHint": "If many records are skipped, ensure you've synced your server recently in Settings → Servers.",
376
+ "importInProgressPercent": "Import in progress ({{percent}}% complete)...",
377
+ "importInProgressGeneric": "Import in progress...",
378
+ "startingImport": "Starting import...",
379
+ "connectedFound": "Connected! Found {{users}} users and {{records}} history records.",
380
+ "playbackReporting": "Playback Reporting Plugin",
381
+ "playbackReportingDesc": "Import history directly from the Playback Reporting plugin installed on your Jellyfin or Emby server. No file export needed.",
382
+ "checkPlugin": "Check Plugin",
383
+ "checkingPlugin": "Checking...",
384
+ "pluginFound": "Plugin found: {{records}} records from {{oldestDate}} to {{newestDate}}",
385
+ "pluginNotInstalled": "The Playback Reporting plugin is not installed on this server, or Tracearr cannot reach it. Install it from the server's plugin catalog to start recording history, or use the Jellystat import below.",
386
+ "serverTimezone": "Server Timezone",
387
+ "serverTimezoneHelp": "Must match the timezone configured on your media server host, not your browser's timezone. Playback Reporting timestamps are stored in local server time.",
388
+ "importFullRange": "Import full history",
389
+ "importFullRangeHelp": "By default only history older than Tracearr's earliest tracked session for this server is imported, so sessions Tracearr already recorded are never duplicated. Enable this to import the plugin's entire history regardless of overlap, if your Tracearr history has gaps. Exact duplicates are still skipped.",
390
+ "overlapSkipped": "{{count}} skipped as overlap",
391
+ "duplicates": "{{count}} duplicates skipped",
392
+ "skipOverlap": "Overlapping record - the timestamp falls inside the period Tracearr already tracks for this server. Enable full-range import to include it.",
393
+ "skipDuplicatePlugin": "Duplicate record - already imported directly or arrived earlier via a Jellystat import of the same plugin data."
394
+ },
395
+ "plex": {
396
+ "signInWithPlex": "Sign in with Plex",
397
+ "signUpWithPlex": "Sign up with Plex",
398
+ "selectServer": "Select Server",
399
+ "chooseServer": "Choose which Plex Media Server to monitor"
400
+ },
401
+ "account": {
402
+ "createAccount": "Create Account",
403
+ "email": "Email",
404
+ "password": "Password",
405
+ "displayName": "Display Name",
406
+ "createYourAccount": "Create your account to get started",
407
+ "signInToAccount": "Sign in to your account",
408
+ "useLocalAccount": "Use local account instead"
492
409
  },
493
- "title": "Settings",
494
410
  "update": {
495
- "betaUpdate": "Beta Update",
496
- "newVersion": "New Version",
497
- "pullInstructions": "After pulling, restart your container to apply the update.",
498
- "releaseNotes": "Release Notes",
499
- "stableRelease": "Stable Release",
500
411
  "title": "Update Available",
412
+ "releaseNotes": "Release Notes",
501
413
  "updateCommand": "Update Command",
414
+ "pullInstructions": "After pulling, restart your container to apply the update.",
415
+ "stableRelease": "Stable Release",
416
+ "betaUpdate": "Beta Update",
417
+ "newVersion": "New Version",
502
418
  "versionAvailable": "{{version}} available"
419
+ },
420
+ "serverHealth": {
421
+ "unreachable": "{{serverName}} is unreachable",
422
+ "multipleUnreachable": "{{count}} servers unreachable: {{serverNames}}"
423
+ },
424
+ "ipWarning": {
425
+ "message": "All users appear to be using the same IP address or local network IPs. This may affect rule-based logic for location or IP addresses.",
426
+ "acknowledge": "Got it"
427
+ },
428
+ "backup": {
429
+ "title": "Backup",
430
+ "backToBackups": "Back to Backups",
431
+ "description": "Backup and restore your Tracearr data",
432
+ "createBackup": "Create Backup",
433
+ "creating": "Creating backup...",
434
+ "uploadBackup": "Upload Backup",
435
+ "uploading": "Uploading...",
436
+ "databaseSize": "Current database size: {{size}}",
437
+ "freeSpace": "Backup directory free space: {{size}}",
438
+ "lowDiskSpace": "Low disk space — backups and restores require at least twice the database size in free space.",
439
+ "backupHistory": "Backup History",
440
+ "noBackups": "No backups yet. Create your first backup above.",
441
+ "filename": "Filename",
442
+ "size": "Size",
443
+ "date": "Date",
444
+ "type": "Type",
445
+ "version": "Version",
446
+ "actions": "Actions",
447
+ "typeManual": "Manual",
448
+ "typeScheduled": "Scheduled",
449
+ "typeUploaded": "Uploaded",
450
+ "restoreAction": "Restore",
451
+ "deleteConfirmTitle": "Delete Backup",
452
+ "deleteConfirmDescription": "Are you sure you want to delete this backup? This cannot be undone.",
453
+ "schedule": "Scheduled Backups",
454
+ "scheduleType": "Schedule",
455
+ "scheduleDisabled": "Disabled",
456
+ "scheduleDaily": "Daily",
457
+ "scheduleWeekly": "Weekly",
458
+ "scheduleMonthly": "Monthly",
459
+ "scheduleTime": "Time ({{timezone}})",
460
+ "scheduleDayOfWeek": "Day of Week",
461
+ "scheduleDayOfMonth": "Day of Month",
462
+ "scheduleDayOfMonthHint": "On months with fewer days, the backup runs on the last day.",
463
+ "retentionCount": "Keep Last",
464
+ "retentionSuffix": "scheduled backups",
465
+ "daySun": "Sunday",
466
+ "dayMon": "Monday",
467
+ "dayTue": "Tuesday",
468
+ "dayWed": "Wednesday",
469
+ "dayThu": "Thursday",
470
+ "dayFri": "Friday",
471
+ "daySat": "Saturday",
472
+ "restore": {
473
+ "title": "Restore Backup",
474
+ "selectedBackup": "Selected Backup",
475
+ "databaseSize": "Database Size",
476
+ "sessions": "Sessions",
477
+ "users": "Users",
478
+ "servers": "Servers",
479
+ "automations": "Automations",
480
+ "libraryItems": "Library Items",
481
+ "tables": "Tables",
482
+ "warning": "Restoring will replace all existing data. You will need to re-login after the restore completes.",
483
+ "confirmLabel": "I understand this will replace all data",
484
+ "confirm": "Start Restore",
485
+ "complete": "Restore completed successfully. The page will refresh shortly.",
486
+ "failed": "Restore failed",
487
+ "cannotRestore": "Restore requires PostgreSQL superuser privileges. Please ensure your database user has superuser privileges and try again.",
488
+ "pgVersionMismatch": "Backup was created on PostgreSQL {{backupVersion}} but this server runs PostgreSQL {{serverVersion}}. Restoring a dump from a newer PostgreSQL version is not supported.",
489
+ "tsVersionMismatch": "Backup was created with TimescaleDB {{backupVersion}} but this server only supports up to TimescaleDB {{serverVersion}}."
490
+ },
491
+ "toast": {
492
+ "backupCreated": "Backup created successfully",
493
+ "backupCreateFailed": "Failed to create backup",
494
+ "backupUploaded": "Backup uploaded successfully",
495
+ "backupUploadFailed": "Failed to upload backup",
496
+ "backupDeleted": "Backup deleted",
497
+ "backupDeleteFailed": "Failed to delete backup",
498
+ "restoreStarted": "Restore started",
499
+ "restoreStartFailed": "Failed to start restore",
500
+ "scheduleSaved": "Backup schedule saved",
501
+ "scheduleError": "Failed to save backup schedule"
502
+ }
503
503
  }
504
504
  }