@tracearr/translations 0.1.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 (572) hide show
  1. package/LICENSE +661 -0
  2. package/README.md +116 -0
  3. package/dist/config.d.ts +4510 -0
  4. package/dist/config.d.ts.map +1 -0
  5. package/dist/config.js +164 -0
  6. package/dist/config.js.map +1 -0
  7. package/dist/config.mobile.d.ts +4511 -0
  8. package/dist/config.mobile.d.ts.map +1 -0
  9. package/dist/config.mobile.js +587 -0
  10. package/dist/config.mobile.js.map +1 -0
  11. package/dist/formatting.d.ts +120 -0
  12. package/dist/formatting.d.ts.map +1 -0
  13. package/dist/formatting.js +265 -0
  14. package/dist/formatting.js.map +1 -0
  15. package/dist/index.d.ts +46 -0
  16. package/dist/index.d.ts.map +1 -0
  17. package/dist/index.js +49 -0
  18. package/dist/index.js.map +1 -0
  19. package/dist/language.d.ts +101 -0
  20. package/dist/language.d.ts.map +1 -0
  21. package/dist/language.js +241 -0
  22. package/dist/language.js.map +1 -0
  23. package/dist/locales/af/common.json +276 -0
  24. package/dist/locales/af/mobile.json +60 -0
  25. package/dist/locales/af/nav.json +22 -0
  26. package/dist/locales/af/notifications.json +262 -0
  27. package/dist/locales/af/pages.json +324 -0
  28. package/dist/locales/af/settings.json +243 -0
  29. package/dist/locales/af-ZA/common.json +308 -0
  30. package/dist/locales/af-ZA/mobile.json +178 -0
  31. package/dist/locales/af-ZA/nav.json +28 -0
  32. package/dist/locales/af-ZA/notifications.json +279 -0
  33. package/dist/locales/af-ZA/pages.json +953 -0
  34. package/dist/locales/af-ZA/settings.json +487 -0
  35. package/dist/locales/ar/common.json +276 -0
  36. package/dist/locales/ar/mobile.json +60 -0
  37. package/dist/locales/ar/nav.json +22 -0
  38. package/dist/locales/ar/notifications.json +262 -0
  39. package/dist/locales/ar/pages.json +324 -0
  40. package/dist/locales/ar/settings.json +243 -0
  41. package/dist/locales/ar-SA/common.json +308 -0
  42. package/dist/locales/ar-SA/mobile.json +178 -0
  43. package/dist/locales/ar-SA/nav.json +28 -0
  44. package/dist/locales/ar-SA/notifications.json +279 -0
  45. package/dist/locales/ar-SA/pages.json +953 -0
  46. package/dist/locales/ar-SA/settings.json +487 -0
  47. package/dist/locales/ca/common.json +276 -0
  48. package/dist/locales/ca/mobile.json +60 -0
  49. package/dist/locales/ca/nav.json +22 -0
  50. package/dist/locales/ca/notifications.json +262 -0
  51. package/dist/locales/ca/pages.json +324 -0
  52. package/dist/locales/ca/settings.json +243 -0
  53. package/dist/locales/ca-ES/common.json +308 -0
  54. package/dist/locales/ca-ES/mobile.json +178 -0
  55. package/dist/locales/ca-ES/nav.json +28 -0
  56. package/dist/locales/ca-ES/notifications.json +279 -0
  57. package/dist/locales/ca-ES/pages.json +953 -0
  58. package/dist/locales/ca-ES/settings.json +487 -0
  59. package/dist/locales/cs/common.json +276 -0
  60. package/dist/locales/cs/mobile.json +60 -0
  61. package/dist/locales/cs/nav.json +22 -0
  62. package/dist/locales/cs/notifications.json +262 -0
  63. package/dist/locales/cs/pages.json +324 -0
  64. package/dist/locales/cs/settings.json +243 -0
  65. package/dist/locales/cs-CZ/common.json +308 -0
  66. package/dist/locales/cs-CZ/mobile.json +178 -0
  67. package/dist/locales/cs-CZ/nav.json +28 -0
  68. package/dist/locales/cs-CZ/notifications.json +279 -0
  69. package/dist/locales/cs-CZ/pages.json +953 -0
  70. package/dist/locales/cs-CZ/settings.json +487 -0
  71. package/dist/locales/da/common.json +276 -0
  72. package/dist/locales/da/mobile.json +60 -0
  73. package/dist/locales/da/nav.json +22 -0
  74. package/dist/locales/da/notifications.json +262 -0
  75. package/dist/locales/da/pages.json +324 -0
  76. package/dist/locales/da/settings.json +243 -0
  77. package/dist/locales/da-DK/common.json +308 -0
  78. package/dist/locales/da-DK/mobile.json +178 -0
  79. package/dist/locales/da-DK/nav.json +28 -0
  80. package/dist/locales/da-DK/notifications.json +279 -0
  81. package/dist/locales/da-DK/pages.json +953 -0
  82. package/dist/locales/da-DK/settings.json +487 -0
  83. package/dist/locales/de/common.json +276 -0
  84. package/dist/locales/de/mobile.json +60 -0
  85. package/dist/locales/de/nav.json +22 -0
  86. package/dist/locales/de/notifications.json +262 -0
  87. package/dist/locales/de/pages.json +324 -0
  88. package/dist/locales/de/settings.json +243 -0
  89. package/dist/locales/de-DE/common.json +308 -0
  90. package/dist/locales/de-DE/mobile.json +178 -0
  91. package/dist/locales/de-DE/nav.json +28 -0
  92. package/dist/locales/de-DE/notifications.json +279 -0
  93. package/dist/locales/de-DE/pages.json +953 -0
  94. package/dist/locales/de-DE/settings.json +487 -0
  95. package/dist/locales/el/common.json +276 -0
  96. package/dist/locales/el/mobile.json +60 -0
  97. package/dist/locales/el/nav.json +22 -0
  98. package/dist/locales/el/notifications.json +262 -0
  99. package/dist/locales/el/pages.json +324 -0
  100. package/dist/locales/el/settings.json +243 -0
  101. package/dist/locales/el-GR/common.json +308 -0
  102. package/dist/locales/el-GR/mobile.json +178 -0
  103. package/dist/locales/el-GR/nav.json +28 -0
  104. package/dist/locales/el-GR/notifications.json +279 -0
  105. package/dist/locales/el-GR/pages.json +953 -0
  106. package/dist/locales/el-GR/settings.json +487 -0
  107. package/dist/locales/en/common.json +308 -0
  108. package/dist/locales/en/mobile.json +178 -0
  109. package/dist/locales/en/nav.json +28 -0
  110. package/dist/locales/en/notifications.json +279 -0
  111. package/dist/locales/en/pages.json +953 -0
  112. package/dist/locales/en/settings.json +487 -0
  113. package/dist/locales/en-US/common.json +308 -0
  114. package/dist/locales/en-US/mobile.json +178 -0
  115. package/dist/locales/en-US/nav.json +28 -0
  116. package/dist/locales/en-US/notifications.json +279 -0
  117. package/dist/locales/en-US/pages.json +953 -0
  118. package/dist/locales/en-US/settings.json +487 -0
  119. package/dist/locales/es/common.json +276 -0
  120. package/dist/locales/es/mobile.json +60 -0
  121. package/dist/locales/es/nav.json +22 -0
  122. package/dist/locales/es/notifications.json +262 -0
  123. package/dist/locales/es/pages.json +324 -0
  124. package/dist/locales/es/settings.json +243 -0
  125. package/dist/locales/es-ES/common.json +308 -0
  126. package/dist/locales/es-ES/mobile.json +178 -0
  127. package/dist/locales/es-ES/nav.json +28 -0
  128. package/dist/locales/es-ES/notifications.json +279 -0
  129. package/dist/locales/es-ES/pages.json +953 -0
  130. package/dist/locales/es-ES/settings.json +487 -0
  131. package/dist/locales/fi/common.json +276 -0
  132. package/dist/locales/fi/mobile.json +60 -0
  133. package/dist/locales/fi/nav.json +22 -0
  134. package/dist/locales/fi/notifications.json +262 -0
  135. package/dist/locales/fi/pages.json +324 -0
  136. package/dist/locales/fi/settings.json +243 -0
  137. package/dist/locales/fi-FI/common.json +308 -0
  138. package/dist/locales/fi-FI/mobile.json +178 -0
  139. package/dist/locales/fi-FI/nav.json +28 -0
  140. package/dist/locales/fi-FI/notifications.json +279 -0
  141. package/dist/locales/fi-FI/pages.json +953 -0
  142. package/dist/locales/fi-FI/settings.json +487 -0
  143. package/dist/locales/fr/common.json +276 -0
  144. package/dist/locales/fr/mobile.json +60 -0
  145. package/dist/locales/fr/nav.json +22 -0
  146. package/dist/locales/fr/notifications.json +262 -0
  147. package/dist/locales/fr/pages.json +324 -0
  148. package/dist/locales/fr/settings.json +243 -0
  149. package/dist/locales/fr-FR/common.json +308 -0
  150. package/dist/locales/fr-FR/mobile.json +178 -0
  151. package/dist/locales/fr-FR/nav.json +28 -0
  152. package/dist/locales/fr-FR/notifications.json +279 -0
  153. package/dist/locales/fr-FR/pages.json +953 -0
  154. package/dist/locales/fr-FR/settings.json +487 -0
  155. package/dist/locales/he/common.json +276 -0
  156. package/dist/locales/he/mobile.json +60 -0
  157. package/dist/locales/he/nav.json +22 -0
  158. package/dist/locales/he/notifications.json +262 -0
  159. package/dist/locales/he/pages.json +324 -0
  160. package/dist/locales/he/settings.json +243 -0
  161. package/dist/locales/he-IL/common.json +308 -0
  162. package/dist/locales/he-IL/mobile.json +178 -0
  163. package/dist/locales/he-IL/nav.json +28 -0
  164. package/dist/locales/he-IL/notifications.json +279 -0
  165. package/dist/locales/he-IL/pages.json +953 -0
  166. package/dist/locales/he-IL/settings.json +487 -0
  167. package/dist/locales/hu/common.json +276 -0
  168. package/dist/locales/hu/mobile.json +60 -0
  169. package/dist/locales/hu/nav.json +22 -0
  170. package/dist/locales/hu/notifications.json +262 -0
  171. package/dist/locales/hu/pages.json +324 -0
  172. package/dist/locales/hu/settings.json +243 -0
  173. package/dist/locales/hu-HU/common.json +308 -0
  174. package/dist/locales/hu-HU/mobile.json +178 -0
  175. package/dist/locales/hu-HU/nav.json +28 -0
  176. package/dist/locales/hu-HU/notifications.json +279 -0
  177. package/dist/locales/hu-HU/pages.json +953 -0
  178. package/dist/locales/hu-HU/settings.json +487 -0
  179. package/dist/locales/it/common.json +276 -0
  180. package/dist/locales/it/mobile.json +60 -0
  181. package/dist/locales/it/nav.json +22 -0
  182. package/dist/locales/it/notifications.json +262 -0
  183. package/dist/locales/it/pages.json +324 -0
  184. package/dist/locales/it/settings.json +243 -0
  185. package/dist/locales/it-IT/common.json +308 -0
  186. package/dist/locales/it-IT/mobile.json +178 -0
  187. package/dist/locales/it-IT/nav.json +28 -0
  188. package/dist/locales/it-IT/notifications.json +279 -0
  189. package/dist/locales/it-IT/pages.json +953 -0
  190. package/dist/locales/it-IT/settings.json +487 -0
  191. package/dist/locales/ja/common.json +276 -0
  192. package/dist/locales/ja/mobile.json +60 -0
  193. package/dist/locales/ja/nav.json +22 -0
  194. package/dist/locales/ja/notifications.json +262 -0
  195. package/dist/locales/ja/pages.json +324 -0
  196. package/dist/locales/ja/settings.json +243 -0
  197. package/dist/locales/ja-JP/common.json +308 -0
  198. package/dist/locales/ja-JP/mobile.json +178 -0
  199. package/dist/locales/ja-JP/nav.json +28 -0
  200. package/dist/locales/ja-JP/notifications.json +279 -0
  201. package/dist/locales/ja-JP/pages.json +953 -0
  202. package/dist/locales/ja-JP/settings.json +487 -0
  203. package/dist/locales/ko/common.json +276 -0
  204. package/dist/locales/ko/mobile.json +60 -0
  205. package/dist/locales/ko/nav.json +22 -0
  206. package/dist/locales/ko/notifications.json +262 -0
  207. package/dist/locales/ko/pages.json +324 -0
  208. package/dist/locales/ko/settings.json +243 -0
  209. package/dist/locales/ko-KR/common.json +308 -0
  210. package/dist/locales/ko-KR/mobile.json +178 -0
  211. package/dist/locales/ko-KR/nav.json +28 -0
  212. package/dist/locales/ko-KR/notifications.json +279 -0
  213. package/dist/locales/ko-KR/pages.json +953 -0
  214. package/dist/locales/ko-KR/settings.json +487 -0
  215. package/dist/locales/nl/common.json +276 -0
  216. package/dist/locales/nl/mobile.json +60 -0
  217. package/dist/locales/nl/nav.json +22 -0
  218. package/dist/locales/nl/notifications.json +262 -0
  219. package/dist/locales/nl/pages.json +324 -0
  220. package/dist/locales/nl/settings.json +243 -0
  221. package/dist/locales/nl-NL/common.json +308 -0
  222. package/dist/locales/nl-NL/mobile.json +178 -0
  223. package/dist/locales/nl-NL/nav.json +28 -0
  224. package/dist/locales/nl-NL/notifications.json +279 -0
  225. package/dist/locales/nl-NL/pages.json +953 -0
  226. package/dist/locales/nl-NL/settings.json +487 -0
  227. package/dist/locales/no/common.json +276 -0
  228. package/dist/locales/no/mobile.json +60 -0
  229. package/dist/locales/no/nav.json +22 -0
  230. package/dist/locales/no/notifications.json +262 -0
  231. package/dist/locales/no/pages.json +324 -0
  232. package/dist/locales/no/settings.json +243 -0
  233. package/dist/locales/no-NO/common.json +308 -0
  234. package/dist/locales/no-NO/mobile.json +178 -0
  235. package/dist/locales/no-NO/nav.json +28 -0
  236. package/dist/locales/no-NO/notifications.json +279 -0
  237. package/dist/locales/no-NO/pages.json +953 -0
  238. package/dist/locales/no-NO/settings.json +487 -0
  239. package/dist/locales/pl/common.json +276 -0
  240. package/dist/locales/pl/mobile.json +60 -0
  241. package/dist/locales/pl/nav.json +22 -0
  242. package/dist/locales/pl/notifications.json +262 -0
  243. package/dist/locales/pl/pages.json +324 -0
  244. package/dist/locales/pl/settings.json +243 -0
  245. package/dist/locales/pl-PL/common.json +308 -0
  246. package/dist/locales/pl-PL/mobile.json +178 -0
  247. package/dist/locales/pl-PL/nav.json +28 -0
  248. package/dist/locales/pl-PL/notifications.json +279 -0
  249. package/dist/locales/pl-PL/pages.json +953 -0
  250. package/dist/locales/pl-PL/settings.json +487 -0
  251. package/dist/locales/pt/common.json +276 -0
  252. package/dist/locales/pt/mobile.json +60 -0
  253. package/dist/locales/pt/nav.json +22 -0
  254. package/dist/locales/pt/notifications.json +262 -0
  255. package/dist/locales/pt/pages.json +324 -0
  256. package/dist/locales/pt/settings.json +243 -0
  257. package/dist/locales/pt-BR/common.json +308 -0
  258. package/dist/locales/pt-BR/mobile.json +178 -0
  259. package/dist/locales/pt-BR/nav.json +28 -0
  260. package/dist/locales/pt-BR/notifications.json +279 -0
  261. package/dist/locales/pt-BR/pages.json +953 -0
  262. package/dist/locales/pt-BR/settings.json +487 -0
  263. package/dist/locales/pt-PT/common.json +308 -0
  264. package/dist/locales/pt-PT/mobile.json +178 -0
  265. package/dist/locales/pt-PT/nav.json +28 -0
  266. package/dist/locales/pt-PT/notifications.json +279 -0
  267. package/dist/locales/pt-PT/pages.json +953 -0
  268. package/dist/locales/pt-PT/settings.json +487 -0
  269. package/dist/locales/ro/common.json +276 -0
  270. package/dist/locales/ro/mobile.json +60 -0
  271. package/dist/locales/ro/nav.json +22 -0
  272. package/dist/locales/ro/notifications.json +262 -0
  273. package/dist/locales/ro/pages.json +324 -0
  274. package/dist/locales/ro/settings.json +243 -0
  275. package/dist/locales/ro-RO/common.json +308 -0
  276. package/dist/locales/ro-RO/mobile.json +178 -0
  277. package/dist/locales/ro-RO/nav.json +28 -0
  278. package/dist/locales/ro-RO/notifications.json +279 -0
  279. package/dist/locales/ro-RO/pages.json +953 -0
  280. package/dist/locales/ro-RO/settings.json +487 -0
  281. package/dist/locales/ru/common.json +276 -0
  282. package/dist/locales/ru/mobile.json +60 -0
  283. package/dist/locales/ru/nav.json +22 -0
  284. package/dist/locales/ru/notifications.json +262 -0
  285. package/dist/locales/ru/pages.json +324 -0
  286. package/dist/locales/ru/settings.json +243 -0
  287. package/dist/locales/ru-RU/common.json +308 -0
  288. package/dist/locales/ru-RU/mobile.json +178 -0
  289. package/dist/locales/ru-RU/nav.json +28 -0
  290. package/dist/locales/ru-RU/notifications.json +279 -0
  291. package/dist/locales/ru-RU/pages.json +953 -0
  292. package/dist/locales/ru-RU/settings.json +487 -0
  293. package/dist/locales/sr/common.json +276 -0
  294. package/dist/locales/sr/mobile.json +60 -0
  295. package/dist/locales/sr/nav.json +22 -0
  296. package/dist/locales/sr/notifications.json +262 -0
  297. package/dist/locales/sr/pages.json +324 -0
  298. package/dist/locales/sr/settings.json +243 -0
  299. package/dist/locales/sr-SP/common.json +308 -0
  300. package/dist/locales/sr-SP/mobile.json +178 -0
  301. package/dist/locales/sr-SP/nav.json +28 -0
  302. package/dist/locales/sr-SP/notifications.json +279 -0
  303. package/dist/locales/sr-SP/pages.json +953 -0
  304. package/dist/locales/sr-SP/settings.json +487 -0
  305. package/dist/locales/sv/common.json +276 -0
  306. package/dist/locales/sv/mobile.json +60 -0
  307. package/dist/locales/sv/nav.json +22 -0
  308. package/dist/locales/sv/notifications.json +262 -0
  309. package/dist/locales/sv/pages.json +324 -0
  310. package/dist/locales/sv/settings.json +243 -0
  311. package/dist/locales/sv-SE/common.json +308 -0
  312. package/dist/locales/sv-SE/mobile.json +178 -0
  313. package/dist/locales/sv-SE/nav.json +28 -0
  314. package/dist/locales/sv-SE/notifications.json +279 -0
  315. package/dist/locales/sv-SE/pages.json +953 -0
  316. package/dist/locales/sv-SE/settings.json +487 -0
  317. package/dist/locales/tr/common.json +276 -0
  318. package/dist/locales/tr/mobile.json +60 -0
  319. package/dist/locales/tr/nav.json +22 -0
  320. package/dist/locales/tr/notifications.json +262 -0
  321. package/dist/locales/tr/pages.json +324 -0
  322. package/dist/locales/tr/settings.json +243 -0
  323. package/dist/locales/tr-TR/common.json +308 -0
  324. package/dist/locales/tr-TR/mobile.json +178 -0
  325. package/dist/locales/tr-TR/nav.json +28 -0
  326. package/dist/locales/tr-TR/notifications.json +279 -0
  327. package/dist/locales/tr-TR/pages.json +953 -0
  328. package/dist/locales/tr-TR/settings.json +487 -0
  329. package/dist/locales/uk/common.json +276 -0
  330. package/dist/locales/uk/mobile.json +60 -0
  331. package/dist/locales/uk/nav.json +22 -0
  332. package/dist/locales/uk/notifications.json +262 -0
  333. package/dist/locales/uk/pages.json +324 -0
  334. package/dist/locales/uk/settings.json +243 -0
  335. package/dist/locales/uk-UA/common.json +308 -0
  336. package/dist/locales/uk-UA/mobile.json +178 -0
  337. package/dist/locales/uk-UA/nav.json +28 -0
  338. package/dist/locales/uk-UA/notifications.json +279 -0
  339. package/dist/locales/uk-UA/pages.json +953 -0
  340. package/dist/locales/uk-UA/settings.json +487 -0
  341. package/dist/locales/vi/common.json +276 -0
  342. package/dist/locales/vi/mobile.json +60 -0
  343. package/dist/locales/vi/nav.json +22 -0
  344. package/dist/locales/vi/notifications.json +262 -0
  345. package/dist/locales/vi/pages.json +324 -0
  346. package/dist/locales/vi/settings.json +243 -0
  347. package/dist/locales/vi-VN/common.json +308 -0
  348. package/dist/locales/vi-VN/mobile.json +178 -0
  349. package/dist/locales/vi-VN/nav.json +28 -0
  350. package/dist/locales/vi-VN/notifications.json +279 -0
  351. package/dist/locales/vi-VN/pages.json +953 -0
  352. package/dist/locales/vi-VN/settings.json +487 -0
  353. package/dist/locales/zh/common.json +276 -0
  354. package/dist/locales/zh/mobile.json +60 -0
  355. package/dist/locales/zh/nav.json +22 -0
  356. package/dist/locales/zh/notifications.json +262 -0
  357. package/dist/locales/zh/pages.json +324 -0
  358. package/dist/locales/zh/settings.json +243 -0
  359. package/dist/locales/zh-CN/common.json +308 -0
  360. package/dist/locales/zh-CN/mobile.json +178 -0
  361. package/dist/locales/zh-CN/nav.json +28 -0
  362. package/dist/locales/zh-CN/notifications.json +279 -0
  363. package/dist/locales/zh-CN/pages.json +953 -0
  364. package/dist/locales/zh-CN/settings.json +487 -0
  365. package/dist/locales/zh-TW/common.json +308 -0
  366. package/dist/locales/zh-TW/mobile.json +178 -0
  367. package/dist/locales/zh-TW/nav.json +28 -0
  368. package/dist/locales/zh-TW/notifications.json +279 -0
  369. package/dist/locales/zh-TW/pages.json +953 -0
  370. package/dist/locales/zh-TW/settings.json +487 -0
  371. package/dist/mobile.d.ts +11 -0
  372. package/dist/mobile.d.ts.map +1 -0
  373. package/dist/mobile.js +14 -0
  374. package/dist/mobile.js.map +1 -0
  375. package/dist/types.d.ts +54 -0
  376. package/dist/types.d.ts.map +1 -0
  377. package/dist/types.js +5 -0
  378. package/dist/types.js.map +1 -0
  379. package/package.json +57 -0
  380. package/src/config.mobile.ts +647 -0
  381. package/src/config.ts +209 -0
  382. package/src/formatting.ts +297 -0
  383. package/src/index.ts +105 -0
  384. package/src/language.ts +270 -0
  385. package/src/locales/af-ZA/common.json +308 -0
  386. package/src/locales/af-ZA/mobile.json +178 -0
  387. package/src/locales/af-ZA/nav.json +28 -0
  388. package/src/locales/af-ZA/notifications.json +279 -0
  389. package/src/locales/af-ZA/pages.json +953 -0
  390. package/src/locales/af-ZA/settings.json +487 -0
  391. package/src/locales/ar-SA/common.json +308 -0
  392. package/src/locales/ar-SA/mobile.json +178 -0
  393. package/src/locales/ar-SA/nav.json +28 -0
  394. package/src/locales/ar-SA/notifications.json +279 -0
  395. package/src/locales/ar-SA/pages.json +953 -0
  396. package/src/locales/ar-SA/settings.json +487 -0
  397. package/src/locales/ca-ES/common.json +308 -0
  398. package/src/locales/ca-ES/mobile.json +178 -0
  399. package/src/locales/ca-ES/nav.json +28 -0
  400. package/src/locales/ca-ES/notifications.json +279 -0
  401. package/src/locales/ca-ES/pages.json +953 -0
  402. package/src/locales/ca-ES/settings.json +487 -0
  403. package/src/locales/cs-CZ/common.json +308 -0
  404. package/src/locales/cs-CZ/mobile.json +178 -0
  405. package/src/locales/cs-CZ/nav.json +28 -0
  406. package/src/locales/cs-CZ/notifications.json +279 -0
  407. package/src/locales/cs-CZ/pages.json +953 -0
  408. package/src/locales/cs-CZ/settings.json +487 -0
  409. package/src/locales/da-DK/common.json +308 -0
  410. package/src/locales/da-DK/mobile.json +178 -0
  411. package/src/locales/da-DK/nav.json +28 -0
  412. package/src/locales/da-DK/notifications.json +279 -0
  413. package/src/locales/da-DK/pages.json +953 -0
  414. package/src/locales/da-DK/settings.json +487 -0
  415. package/src/locales/de-DE/common.json +308 -0
  416. package/src/locales/de-DE/mobile.json +178 -0
  417. package/src/locales/de-DE/nav.json +28 -0
  418. package/src/locales/de-DE/notifications.json +279 -0
  419. package/src/locales/de-DE/pages.json +953 -0
  420. package/src/locales/de-DE/settings.json +487 -0
  421. package/src/locales/el-GR/common.json +308 -0
  422. package/src/locales/el-GR/mobile.json +178 -0
  423. package/src/locales/el-GR/nav.json +28 -0
  424. package/src/locales/el-GR/notifications.json +279 -0
  425. package/src/locales/el-GR/pages.json +953 -0
  426. package/src/locales/el-GR/settings.json +487 -0
  427. package/src/locales/en/common.json +308 -0
  428. package/src/locales/en/mobile.json +178 -0
  429. package/src/locales/en/nav.json +28 -0
  430. package/src/locales/en/notifications.json +279 -0
  431. package/src/locales/en/pages.json +953 -0
  432. package/src/locales/en/settings.json +487 -0
  433. package/src/locales/en-US/common.json +308 -0
  434. package/src/locales/en-US/mobile.json +178 -0
  435. package/src/locales/en-US/nav.json +28 -0
  436. package/src/locales/en-US/notifications.json +279 -0
  437. package/src/locales/en-US/pages.json +953 -0
  438. package/src/locales/en-US/settings.json +487 -0
  439. package/src/locales/es-ES/common.json +308 -0
  440. package/src/locales/es-ES/mobile.json +178 -0
  441. package/src/locales/es-ES/nav.json +28 -0
  442. package/src/locales/es-ES/notifications.json +279 -0
  443. package/src/locales/es-ES/pages.json +953 -0
  444. package/src/locales/es-ES/settings.json +487 -0
  445. package/src/locales/fi-FI/common.json +308 -0
  446. package/src/locales/fi-FI/mobile.json +178 -0
  447. package/src/locales/fi-FI/nav.json +28 -0
  448. package/src/locales/fi-FI/notifications.json +279 -0
  449. package/src/locales/fi-FI/pages.json +953 -0
  450. package/src/locales/fi-FI/settings.json +487 -0
  451. package/src/locales/fr-FR/common.json +308 -0
  452. package/src/locales/fr-FR/mobile.json +178 -0
  453. package/src/locales/fr-FR/nav.json +28 -0
  454. package/src/locales/fr-FR/notifications.json +279 -0
  455. package/src/locales/fr-FR/pages.json +953 -0
  456. package/src/locales/fr-FR/settings.json +487 -0
  457. package/src/locales/he-IL/common.json +308 -0
  458. package/src/locales/he-IL/mobile.json +178 -0
  459. package/src/locales/he-IL/nav.json +28 -0
  460. package/src/locales/he-IL/notifications.json +279 -0
  461. package/src/locales/he-IL/pages.json +953 -0
  462. package/src/locales/he-IL/settings.json +487 -0
  463. package/src/locales/hu-HU/common.json +308 -0
  464. package/src/locales/hu-HU/mobile.json +178 -0
  465. package/src/locales/hu-HU/nav.json +28 -0
  466. package/src/locales/hu-HU/notifications.json +279 -0
  467. package/src/locales/hu-HU/pages.json +953 -0
  468. package/src/locales/hu-HU/settings.json +487 -0
  469. package/src/locales/it-IT/common.json +308 -0
  470. package/src/locales/it-IT/mobile.json +178 -0
  471. package/src/locales/it-IT/nav.json +28 -0
  472. package/src/locales/it-IT/notifications.json +279 -0
  473. package/src/locales/it-IT/pages.json +953 -0
  474. package/src/locales/it-IT/settings.json +487 -0
  475. package/src/locales/ja-JP/common.json +308 -0
  476. package/src/locales/ja-JP/mobile.json +178 -0
  477. package/src/locales/ja-JP/nav.json +28 -0
  478. package/src/locales/ja-JP/notifications.json +279 -0
  479. package/src/locales/ja-JP/pages.json +953 -0
  480. package/src/locales/ja-JP/settings.json +487 -0
  481. package/src/locales/ko-KR/common.json +308 -0
  482. package/src/locales/ko-KR/mobile.json +178 -0
  483. package/src/locales/ko-KR/nav.json +28 -0
  484. package/src/locales/ko-KR/notifications.json +279 -0
  485. package/src/locales/ko-KR/pages.json +953 -0
  486. package/src/locales/ko-KR/settings.json +487 -0
  487. package/src/locales/nl-NL/common.json +308 -0
  488. package/src/locales/nl-NL/mobile.json +178 -0
  489. package/src/locales/nl-NL/nav.json +28 -0
  490. package/src/locales/nl-NL/notifications.json +279 -0
  491. package/src/locales/nl-NL/pages.json +953 -0
  492. package/src/locales/nl-NL/settings.json +487 -0
  493. package/src/locales/no-NO/common.json +308 -0
  494. package/src/locales/no-NO/mobile.json +178 -0
  495. package/src/locales/no-NO/nav.json +28 -0
  496. package/src/locales/no-NO/notifications.json +279 -0
  497. package/src/locales/no-NO/pages.json +953 -0
  498. package/src/locales/no-NO/settings.json +487 -0
  499. package/src/locales/pl-PL/common.json +308 -0
  500. package/src/locales/pl-PL/mobile.json +178 -0
  501. package/src/locales/pl-PL/nav.json +28 -0
  502. package/src/locales/pl-PL/notifications.json +279 -0
  503. package/src/locales/pl-PL/pages.json +953 -0
  504. package/src/locales/pl-PL/settings.json +487 -0
  505. package/src/locales/pt-BR/common.json +308 -0
  506. package/src/locales/pt-BR/mobile.json +178 -0
  507. package/src/locales/pt-BR/nav.json +28 -0
  508. package/src/locales/pt-BR/notifications.json +279 -0
  509. package/src/locales/pt-BR/pages.json +953 -0
  510. package/src/locales/pt-BR/settings.json +487 -0
  511. package/src/locales/pt-PT/common.json +308 -0
  512. package/src/locales/pt-PT/mobile.json +178 -0
  513. package/src/locales/pt-PT/nav.json +28 -0
  514. package/src/locales/pt-PT/notifications.json +279 -0
  515. package/src/locales/pt-PT/pages.json +953 -0
  516. package/src/locales/pt-PT/settings.json +487 -0
  517. package/src/locales/ro-RO/common.json +308 -0
  518. package/src/locales/ro-RO/mobile.json +178 -0
  519. package/src/locales/ro-RO/nav.json +28 -0
  520. package/src/locales/ro-RO/notifications.json +279 -0
  521. package/src/locales/ro-RO/pages.json +953 -0
  522. package/src/locales/ro-RO/settings.json +487 -0
  523. package/src/locales/ru-RU/common.json +308 -0
  524. package/src/locales/ru-RU/mobile.json +178 -0
  525. package/src/locales/ru-RU/nav.json +28 -0
  526. package/src/locales/ru-RU/notifications.json +279 -0
  527. package/src/locales/ru-RU/pages.json +953 -0
  528. package/src/locales/ru-RU/settings.json +487 -0
  529. package/src/locales/sr-SP/common.json +308 -0
  530. package/src/locales/sr-SP/mobile.json +178 -0
  531. package/src/locales/sr-SP/nav.json +28 -0
  532. package/src/locales/sr-SP/notifications.json +279 -0
  533. package/src/locales/sr-SP/pages.json +953 -0
  534. package/src/locales/sr-SP/settings.json +487 -0
  535. package/src/locales/sv-SE/common.json +308 -0
  536. package/src/locales/sv-SE/mobile.json +178 -0
  537. package/src/locales/sv-SE/nav.json +28 -0
  538. package/src/locales/sv-SE/notifications.json +279 -0
  539. package/src/locales/sv-SE/pages.json +953 -0
  540. package/src/locales/sv-SE/settings.json +487 -0
  541. package/src/locales/tr-TR/common.json +308 -0
  542. package/src/locales/tr-TR/mobile.json +178 -0
  543. package/src/locales/tr-TR/nav.json +28 -0
  544. package/src/locales/tr-TR/notifications.json +279 -0
  545. package/src/locales/tr-TR/pages.json +953 -0
  546. package/src/locales/tr-TR/settings.json +487 -0
  547. package/src/locales/uk-UA/common.json +308 -0
  548. package/src/locales/uk-UA/mobile.json +178 -0
  549. package/src/locales/uk-UA/nav.json +28 -0
  550. package/src/locales/uk-UA/notifications.json +279 -0
  551. package/src/locales/uk-UA/pages.json +953 -0
  552. package/src/locales/uk-UA/settings.json +487 -0
  553. package/src/locales/vi-VN/common.json +308 -0
  554. package/src/locales/vi-VN/mobile.json +178 -0
  555. package/src/locales/vi-VN/nav.json +28 -0
  556. package/src/locales/vi-VN/notifications.json +279 -0
  557. package/src/locales/vi-VN/pages.json +953 -0
  558. package/src/locales/vi-VN/settings.json +487 -0
  559. package/src/locales/zh-CN/common.json +308 -0
  560. package/src/locales/zh-CN/mobile.json +178 -0
  561. package/src/locales/zh-CN/nav.json +28 -0
  562. package/src/locales/zh-CN/notifications.json +279 -0
  563. package/src/locales/zh-CN/pages.json +953 -0
  564. package/src/locales/zh-CN/settings.json +487 -0
  565. package/src/locales/zh-TW/common.json +308 -0
  566. package/src/locales/zh-TW/mobile.json +178 -0
  567. package/src/locales/zh-TW/nav.json +28 -0
  568. package/src/locales/zh-TW/notifications.json +279 -0
  569. package/src/locales/zh-TW/pages.json +953 -0
  570. package/src/locales/zh-TW/settings.json +487 -0
  571. package/src/mobile.ts +69 -0
  572. package/src/types.ts +86 -0
@@ -0,0 +1,953 @@
1
+ {
2
+ "login": {
3
+ "title": "Tracearr",
4
+ "tagline": "Tracearr - Stream access management",
5
+ "createAccountHeading": "Create your account to get started",
6
+ "signInHeading": "Sign in to your account",
7
+ "createAccountDescription": "Create an account to manage your media servers",
8
+ "signInDescription": "Sign in to access your dashboard",
9
+ "selectPlexServer": "Select your Plex server",
10
+ "waitingForPlex": "Waiting for Plex authorization...",
11
+ "completeInPopup": "Complete sign-in in the popup window",
12
+ "reopenPlexLogin": "Reopen Plex Login",
13
+ "continueWith": "Continue with {{provider}}",
14
+ "usernameOrEmail": "Username or Email",
15
+ "identifierPlaceholder": "Username or email address",
16
+ "username": "Username",
17
+ "usernamePlaceholder": "yourusername",
18
+ "emailPlaceholder": "your@email.com",
19
+ "displayNamePlaceholder": "Choose a display name",
20
+ "passwordPlaceholder": "At least 8 characters",
21
+ "yourPasswordPlaceholder": "Your password",
22
+ "setupNote": "After creating your account, you'll add your Plex or Jellyfin servers from Settings.",
23
+ "localDisabledHint": "Local sign-in is disabled for this instance. Ask an admin to run `enable-local-login` from the Tracearr CLI to re-enable it.",
24
+ "oidcError": "Single sign-on failed. Please try again or use another sign-in method.",
25
+ "accountCreated": "Account created successfully!",
26
+ "connectedTo": "Connected to {{name}}",
27
+ "plexAuthFailed": "Plex authentication failed",
28
+ "plexStartFailed": "Failed to start Plex login",
29
+ "serverConnectFailed": "Failed to connect to server",
30
+ "signupFailed": "Signup failed",
31
+ "createAccountFailed": "Failed to create account",
32
+ "loginFailed": "Login failed",
33
+ "invalidCredentials": "Invalid username, email, or password",
34
+ "claimCodeRequired": "First-time setup requires a claim code",
35
+ "enterClaimCode": "Enter Claim Code",
36
+ "claimCodeDescription": "Check your server logs for the claim code to proceed with setup",
37
+ "claimCodeLabel": "Claim Code",
38
+ "claimCodeHint": "The claim code is printed in the server logs when the container starts",
39
+ "validateClaimCode": "Validate Claim Code",
40
+ "claimCodeSecurityNote": "This security measure ensures only authorized users can complete first-time setup"
41
+ },
42
+ "dashboard": {
43
+ "alerts": "Alerts",
44
+ "plays": "Plays",
45
+ "watchTime": "Watch Time",
46
+ "activeUsers": "Active Users",
47
+ "nowPlaying": "Now Playing",
48
+ "streamLocations": "Stream Locations",
49
+ "serverResources": "Server Resources",
50
+ "bandwidth": "Bandwidth",
51
+ "noActiveStreams": "No active streams",
52
+ "streamsAppearHere": "Active streams will appear here when users start watching"
53
+ },
54
+ "users": {
55
+ "title": "Users",
56
+ "showRemoved": "Show removed",
57
+ "noUsersFound": "No users found.",
58
+ "searchPlaceholder": "Search users...",
59
+ "selectAllUsers": "Select all {{count}} users",
60
+ "serversColumn": "Servers",
61
+ "resetTrustScore": "Reset Trust Score",
62
+ "resetTrustScoreTitle_one": "Reset Trust Score for {{count}} User",
63
+ "resetTrustScoreTitle_other": "Reset Trust Score for {{count}} Users",
64
+ "resetTrustScoreConfirm": "Are you sure you want to reset the trust score to 100? This action cannot be undone.",
65
+ "mergeUsers": "Merge users",
66
+ "mergeDialogTitle": "Merge users",
67
+ "mergeDialogDescription": "Every server account, session, and violation from the duplicate moves to the primary. The duplicate identity is deleted.",
68
+ "mergePickPrimary": "Choose the primary identity",
69
+ "mergePrimaryBadge": "Primary",
70
+ "mergePrimaryForced": "This account can log in, so it must stay the primary.",
71
+ "mergeSameServerWarningTitle": "This action is irreversible",
72
+ "mergeSameServerDialogDescription": "This merge permanently combines both accounts on the same server. It cannot be undone.",
73
+ "mergeSameServerWarning": "Both identities already have an account on the same server. Merging will permanently combine their session history, violations, and trust score into a single account on that server. This cannot be undone, and splitting the account afterward will not restore the original two accounts.",
74
+ "mergeSameServerAcknowledge": "I understand the same-server history combine cannot be undone",
75
+ "mergeSameServerFallbackName": "this server",
76
+ "mergeServerAccountRemoved": "Removed",
77
+ "mergeConfirm": "Merge",
78
+ "mergeSelectTwo": "Select exactly two users to merge",
79
+ "mergeSameIdentity": "These accounts already belong to the same user",
80
+ "mergeSelectAllActive": "Clear the select-all selection and pick exactly two users to merge",
81
+ "suggestionsTitle": "Possible duplicate users",
82
+ "suggestionsDescription": "These identities look like the same person across servers. Review and merge them if they match.",
83
+ "suggestionsReview": "Review",
84
+ "suggestionsMatchEmail": "Same email",
85
+ "suggestionsMatchUsername": "Same username",
86
+ "suggestionsError": "Could not load merge suggestions"
87
+ },
88
+ "userDetail": {
89
+ "backToUsers": "Back to Users",
90
+ "userNotFound": "User not found",
91
+ "userInfo": "User Info",
92
+ "statistics": "Statistics",
93
+ "sessions": "Sessions",
94
+ "violations": "Violations",
95
+ "locations": "Locations",
96
+ "terminationHistory": "Termination History",
97
+ "noSessionsFound": "No sessions found for this user.",
98
+ "noViolationsFound": "No violations for this user.",
99
+ "noTerminationsFound": "No stream terminations for this user.",
100
+ "byRule": "By / Rule",
101
+ "manual": "Manual",
102
+ "unknownRule": "Unknown rule",
103
+ "adjustTrustScore": "Adjust Trust Score",
104
+ "linkedAccounts": "Linked accounts",
105
+ "splitAccount": "Split into separate user",
106
+ "splitConfirmTitle": "Split server account",
107
+ "splitConfirmDescription": "Detach this server account into its own user. Its watch history and violations move with it.",
108
+ "splitConfirmLoading": "Splitting...",
109
+ "acrossAllServers": "Across all linked accounts:",
110
+ "overallTrust": "Overall Trust",
111
+ "serverScope": "Server",
112
+ "allServers": "All servers"
113
+ },
114
+ "history": {
115
+ "title": "History",
116
+ "description": "Browse all streaming sessions with powerful filtering",
117
+ "loadingMore": "Loading more...",
118
+ "scrollForMore": "Scroll for more",
119
+ "showingAllResults": "Showing all {{total}} results",
120
+ "deleteSession_one": "Delete {{count}} Session",
121
+ "deleteSession_other": "Delete {{count}} Sessions",
122
+ "deleteSessionsConfirm": "Are you sure you want to delete? This action cannot be undone."
123
+ },
124
+ "library": {
125
+ "title": "Library",
126
+ "description": "Top movies and shows on your server",
127
+ "topMovies": "Top Movies",
128
+ "topShows": "Top TV Shows",
129
+ "noMoviePlays": "No movie plays in this period",
130
+ "noShowPlays": "No TV show plays in this period",
131
+ "overview": {
132
+ "description": "Library health and growth metrics",
133
+ "lastUpdated": "Last updated:",
134
+ "totalItems": "Total Items",
135
+ "shows": "shows",
136
+ "added": "Added",
137
+ "libraryGrowth": "Library Growth",
138
+ "failedToLoad": "Failed to load library statistics",
139
+ "failedToLoadDesc": "Could not fetch library data. Please try again.",
140
+ "thisPeriod": "this period",
141
+ "thisWeek": "this week",
142
+ "thisMonth": "this month",
143
+ "thisYear": "this year",
144
+ "serversNeedSync": "These servers need to sync:"
145
+ },
146
+ "quality": {
147
+ "title": "Quality",
148
+ "description": "Resolution and codec distribution",
149
+ "qualityEvolution": "Quality Evolution",
150
+ "all": "All",
151
+ "failedToLoad": "Failed to load quality data",
152
+ "failedToLoadDesc": "Could not fetch quality data. Please try again."
153
+ },
154
+ "storage": {
155
+ "title": "Storage",
156
+ "description": "Storage usage, predictions, and optimization",
157
+ "totalStorage": "Total Storage",
158
+ "growthRate": "Growth Rate",
159
+ "duplicates": "Duplicates",
160
+ "groups": "groups",
161
+ "recoverable": "recoverable",
162
+ "staleContent": "Stale Content",
163
+ "staleContentDesc": "Content that may be candidates for removal",
164
+ "items": "items",
165
+ "unused": "unused",
166
+ "storageTrend": "Storage Trend",
167
+ "confidence": "Confidence",
168
+ "confidenceHigh": "High",
169
+ "confidenceMedium": "Medium",
170
+ "confidenceLow": "Low",
171
+ "zeroGrowth": "0 GB/mo",
172
+ "predictions": "Predictions",
173
+ "contentROI": "Content ROI",
174
+ "contentROIDesc": "Watch value per storage cost",
175
+ "avgHoursPerGB": "avg hours/GB",
176
+ "insufficientData": "Insufficient data",
177
+ "of": "of",
178
+ "days": "days",
179
+ "failedToLoad": "Failed to load storage data",
180
+ "failedToLoadDesc": "Could not fetch storage data. Please try again.",
181
+ "duplicatesTitle": "Duplicates",
182
+ "duplicatesSubtitle": "Titles stored as more than one physical file, across servers, libraries, and versions",
183
+ "growthPreChangeover": "based on pre-update history",
184
+ "loadingDuplicates": "Loading duplicates...",
185
+ "duplicatesFailed": "Failed to load duplicates",
186
+ "noDuplicatesTitle": "No duplicates found",
187
+ "noDuplicatesDesc": "No titles with more than one physical file detected.",
188
+ "colTitle": "Title",
189
+ "colMatchType": "Match Type",
190
+ "colCopies": "Copies",
191
+ "colRecoverable": "Recoverable Space",
192
+ "sameServer": "Same server",
193
+ "mirror": "Mirror",
194
+ "pageOf": "Page {{page}} of {{totalPages}}"
195
+ },
196
+ "watch": {
197
+ "title": "Watch Analytics",
198
+ "description": "Viewing behavior and content engagement",
199
+ "watched": "Watched",
200
+ "percentWatched": "% watched",
201
+ "totalWatchTime": "Total Watch Time",
202
+ "avgPerItem": "avg per item",
203
+ "completed": "Completed",
204
+ "peakHour": "Peak Hour",
205
+ "viewingHours": "Viewing Hours",
206
+ "peak": "Peak:",
207
+ "monthlyTrends": "Monthly Trends",
208
+ "busiest": "Busiest:",
209
+ "quietest": "Quietest:",
210
+ "bingeHighlights": "Binge Highlights",
211
+ "bingeHighlightsDesc": "Shows with the most intensive viewing patterns",
212
+ "bingeSessions": "binge sessions",
213
+ "noData": "No watch data yet",
214
+ "noDataDesc": "Watch analytics will appear here once content has been played. Check back after some viewing activity.",
215
+ "failedToLoad": "Failed to load watch analytics",
216
+ "failedToLoadDesc": "Could not fetch watch data."
217
+ },
218
+ "emptyState": {
219
+ "checkingStatus": "Checking library status...",
220
+ "backfillAvailable": {
221
+ "title": "Historical data available",
222
+ "bodyWithDays": "Your library has {{days}} days of history. Generate snapshots to see trends in charts.",
223
+ "bodyGeneric": "Generate historical snapshots to see library trends over time.",
224
+ "syncRunningTitle": "Library sync in progress...",
225
+ "syncRunningBody": "Historical data generation will start automatically once the sync completes."
226
+ },
227
+ "generateHistory": "Generate History",
228
+ "starting": "Starting...",
229
+ "syncInProgress": {
230
+ "title": "Library sync in progress...",
231
+ "body": "Library statistics will appear once the sync completes. This may take a few minutes depending on library size."
232
+ },
233
+ "notSynced": {
234
+ "title": "Library not synced yet",
235
+ "body": "Library statistics will appear here once the library has been synced. This typically happens automatically every hour."
236
+ },
237
+ "noMedia": {
238
+ "title": "No movies or shows yet",
239
+ "body": "This library is synced but doesn't have any movies or shows in it yet."
240
+ },
241
+ "syncNow": "Sync Now",
242
+ "syncing": "Syncing...",
243
+ "notSyncedShort": "Not synced yet",
244
+ "backfillRunning": {
245
+ "title": "Generating historical data...",
246
+ "fallbackBody": "Creating snapshots from library history. This may take a few minutes.",
247
+ "progress": "{{processed}} of {{total}} libraries",
248
+ "snapshotsSuffix": " ({{count}} snapshots)"
249
+ },
250
+ "multiServer": {
251
+ "title": "Some libraries need attention",
252
+ "body": "Sync the servers below to see combined library statistics.",
253
+ "needsBackfillIntro": "These servers are synced but have no historical data yet:"
254
+ },
255
+ "toast": {
256
+ "noServerSelected": "No server selected",
257
+ "syncStartedTitle": "Library sync started",
258
+ "syncStartedDesc": "This may take a few minutes depending on library size.",
259
+ "syncFailedTitle": "Failed to start sync",
260
+ "genericRetry": "Please try again.",
261
+ "backfillStartedTitle": "Backfill started",
262
+ "backfillStartedDesc": "Historical snapshots are being generated.",
263
+ "backfillFailedTitle": "Failed to start backfill",
264
+ "backfillCompleteTitle": "Backfill complete",
265
+ "backfillErrorTitle": "Backfill failed"
266
+ }
267
+ },
268
+ "versionsBackfill": {
269
+ "banner": "File version data is still being collected for this server. Run a library sync to finish.",
270
+ "action": "Sync now",
271
+ "syncFailed": "Sync failed to start on {{count}} server(s). Check your permissions and server status.",
272
+ "syncStarted": "Library sync started."
273
+ }
274
+ },
275
+ "activity": {
276
+ "title": "Activity",
277
+ "description": "Play trends, patterns, and streaming behavior",
278
+ "playsOverTime": "Plays Over Time",
279
+ "concurrentStreams": "Concurrent Streams",
280
+ "engagementBreakdown": "Engagement Breakdown",
281
+ "howUsersEngage": "How users engage with content",
282
+ "playsVsSessions": "Plays vs Sessions",
283
+ "playsVsSessionsDesc": "Full completions only — counts a play when total watch time covers a content's entire runtime",
284
+ "activityByDayOfWeek": "Activity by Day of Week",
285
+ "activityByHourOfDay": "Activity by Hour of Day",
286
+ "platforms": "Platforms",
287
+ "streamQuality": "Stream Quality"
288
+ },
289
+ "violations": {
290
+ "title": "Violations",
291
+ "violationLog": "Violation Log",
292
+ "noMatches": "No Matches",
293
+ "tryAdjustingFilters": "Try adjusting your filters",
294
+ "allClear": "All Clear",
295
+ "noViolationsDetected": "No rule violations detected",
296
+ "selectAllViolations": "Select all {{count}} violations matching filters",
297
+ "dismissViolation": "Dismiss Violation",
298
+ "dismissViolationConfirm": "Are you sure you want to dismiss this violation? This will remove it from the violation log permanently.",
299
+ "dismissViolation_one": "Dismiss {{count}} Violation",
300
+ "dismissViolation_other": "Dismiss {{count}} Violations",
301
+ "dismissViolationsConfirm": "Are you sure you want to dismiss? This will remove them from the violation log permanently and restore associated trust scores.",
302
+ "noViolationsFound": "No violations found",
303
+ "noViolationsRecorded": "No violations have been recorded yet.",
304
+ "allSeverities": "All Severities",
305
+ "allStatuses": "All Statuses",
306
+ "filterPeople": "People",
307
+ "allPeople": "All people",
308
+ "peopleSelectedCount": "{{count}} people",
309
+ "personFilterPlaceholder": "Filter by person",
310
+ "personFilterEmpty": "No matching people found",
311
+ "personFilterError": "Failed to load people",
312
+ "filterByPerson": "Filter violations by this person",
313
+ "detail": {
314
+ "notFound": "Violation not found",
315
+ "violationDetails": "Violation Details",
316
+ "userInfo": "User",
317
+ "sessions": "Sessions",
318
+ "noSessions": "No sessions associated with this violation",
319
+ "trigger": "Trigger",
320
+ "map": "Session Locations",
321
+ "actions": "Actions Taken",
322
+ "timestamps": "Timestamps",
323
+ "created": "Created",
324
+ "acknowledged": "Acknowledged",
325
+ "detected": "Detected",
326
+ "inactivity": "Inactivity Details",
327
+ "daysInactive": "Days Inactive",
328
+ "threshold": "Threshold",
329
+ "lastActivity": "Last Activity",
330
+ "neverActive": "Never active",
331
+ "conditionEvidence": "Condition Evidence",
332
+ "conditionGroup": "Condition Group {{index}}",
333
+ "matched": "{{matched}}/{{total}} matched",
334
+ "actual": "Actual",
335
+ "relatedSessions": "{{count}} related session",
336
+ "relatedSessions_one": "{{count}} related session",
337
+ "relatedSessions_other": "{{count}} related sessions"
338
+ }
339
+ },
340
+ "rules": {
341
+ "title": "Rules",
342
+ "description": "Configure detection rules for account sharing and policy violations",
343
+ "addRule": "Add Rule",
344
+ "createRule": "Create Rule",
345
+ "editRule": "Edit Rule",
346
+ "updateDescription": "Update the rule configuration below.",
347
+ "createDescription": "Configure a new detection rule for your media servers.",
348
+ "ruleName": "Rule Name",
349
+ "ruleNamePlaceholder": "e.g., Concurrent Stream Limit",
350
+ "ruleType": "Rule Type",
351
+ "updateRule": "Update Rule",
352
+ "deleteRule": "Delete Rule",
353
+ "deleteRuleConfirm": "Are you sure you want to delete this rule? This action cannot be undone.",
354
+ "deleteRule_one": "Delete {{count}} Rule",
355
+ "deleteRule_other": "Delete {{count}} Rules",
356
+ "deleteRulesConfirm": "Are you sure you want to delete? This action cannot be undone.",
357
+ "enable": "Enable",
358
+ "disable": "Disable",
359
+ "noRulesConfigured": "No rules configured",
360
+ "createFirstRule": "Create your first detection rule to start monitoring for account sharing.",
361
+ "impossibleTravel": "Impossible Travel",
362
+ "impossibleTravelDesc": "Detect when a user streams from locations too far apart in a short time",
363
+ "simultaneousLocations": "Simultaneous Locations",
364
+ "simultaneousLocationsDesc": "Detect when a user streams from multiple distant locations at once",
365
+ "deviceVelocity": "Device Velocity",
366
+ "deviceVelocityDesc": "Detect when a user connects from too many IPs in a time window",
367
+ "concurrentStreams": "Concurrent Streams",
368
+ "concurrentStreamsDesc": "Limit the number of simultaneous streams per user",
369
+ "geoRestriction": "Geo Restriction",
370
+ "geoRestrictionDesc": "Block streaming from specific countries",
371
+ "accountInactivity": "Account Inactivity",
372
+ "accountInactivityDesc": "Get notified when users have not watched anything for a specified period",
373
+ "maxSpeed": "Max Speed ({{unit}})",
374
+ "recordsOnly": "Records violations only",
375
+ "maxSpeedDefault": "Maximum realistic travel speed. Default: {{value}} {{unit}} (airplane speed)",
376
+ "minDistance": "Min Distance ({{unit}})",
377
+ "minDistanceDefault": "Minimum distance between locations to trigger. Default: {{value}} {{unit}}",
378
+ "maxIps": "Max IPs",
379
+ "timeWindow": "Time Window (hours)",
380
+ "maxIpsDefault": "Maximum unique IPs allowed within the time window. Default: 5 IPs in 24 hours",
381
+ "groupByDevice": "Group by Device",
382
+ "groupByDeviceDesc": "Count by device instead of IP. Prevents false positives from VPN, DHCP, or Virtual Channels.",
383
+ "maxStreams": "Max Streams",
384
+ "maxStreamsDefault": "Maximum simultaneous streams per user. Default: 3",
385
+ "mode": "Mode",
386
+ "blocklist": "Blocklist (block these countries)",
387
+ "allowlist": "Allowlist (only allow these countries)",
388
+ "blockedCountries": "Blocked Countries",
389
+ "allowedCountries": "Allowed Countries",
390
+ "selectCountriesToBlock": "Select countries to block...",
391
+ "selectAllowedCountries": "Select allowed countries...",
392
+ "allowlistNote": "Streams from any other country will trigger a violation.",
393
+ "inactivityPeriod": "Inactivity Period",
394
+ "unit": "Unit",
395
+ "days": "Days",
396
+ "weeks": "Weeks",
397
+ "months": "Months",
398
+ "inactivityNote": "Creates an alert when a user has not watched anything for this period. Checks run hourly.",
399
+ "excludeLocalNetwork": "Exclude Local Network",
400
+ "excludeLocalNetworkDesc": "Ignore sessions from local/private IPs (e.g., 192.168.x.x, 10.x.x.x)",
401
+ "blocked": "Blocked",
402
+ "allowed": "Allowed",
403
+ "none": "None",
404
+ "inactiveFor": "Inactive for {{value}} {{unit}}",
405
+ "classicRule": "Classic Rule",
406
+ "customRule": "Custom Rule",
407
+ "chooseTemplate": "Choose a Rule Template",
408
+ "chooseTemplateDesc": "Select a pre-configured rule type to get started quickly."
409
+ },
410
+ "terminateStream": {
411
+ "title": "Terminate Stream",
412
+ "stopMedia": "Stop \"{{mediaTitle}}\" for @{{username}}?",
413
+ "messageLabel": "Message to user (optional)",
414
+ "messagePlaceholder": "e.g., Please don't share your account",
415
+ "messageHint": "This message will be shown to them during playback",
416
+ "terminating": "Terminating...",
417
+ "killStream": "Kill Stream"
418
+ },
419
+ "notFound": {
420
+ "title": "404",
421
+ "heading": "Page Not Found",
422
+ "description": "The page you're looking for doesn't exist or has been moved."
423
+ },
424
+ "settings": {
425
+ "plex": {
426
+ "noServersFound": "No Plex servers found",
427
+ "noServersFoundHint": "Make sure you own at least one Plex server",
428
+ "noReachableConnections": "No reachable connections",
429
+ "local": "Local",
430
+ "remote": "Remote",
431
+ "custom": "Custom",
432
+ "secure": "Secure",
433
+ "mayNotConnect": "May not connect",
434
+ "recommended": "Recommended",
435
+ "customUrl": "Custom URL",
436
+ "connectionError": {
437
+ "timeout": "Timed out",
438
+ "dns": "DNS error",
439
+ "refused": "Connection refused",
440
+ "unreachable": "Host unreachable",
441
+ "reset": "Connection reset",
442
+ "tls": "TLS error",
443
+ "http": "HTTP {{status}}",
444
+ "unknown": "Connection failed"
445
+ },
446
+ "connectionsReachable": "{{reachable}} of {{total}} connections reachable",
447
+ "connectionsAvailable": "{{count}} connections available",
448
+ "hideFiltered": "Hide filtered",
449
+ "showAll": "Show all",
450
+ "moreConnections": "+{{count}} more connections",
451
+ "connectingTo": "Connecting to {{name}}...",
452
+ "noAccountsLinked": "No Plex Accounts Linked",
453
+ "noAccountsLinkedHint": "Link a Plex account to add Plex servers to Tracearr.",
454
+ "linkPlexAccount": "Link Plex Account",
455
+ "linkAnotherAccount": "Link Another Plex Account",
456
+ "linking": "Linking...",
457
+ "accountsLinked_one": "{{count}} Plex account linked",
458
+ "accountsLinked_other": "{{count}} Plex accounts linked",
459
+ "noAccountsLinkedShort": "No Plex accounts linked",
460
+ "loginEnabled": "Login Enabled",
461
+ "serversConnected_one": "{{count}} server connected",
462
+ "serversConnected_other": "{{count}} servers connected",
463
+ "unlinkAccount": "Unlink this Plex account",
464
+ "deleteServersFirst": "Delete connected servers first to unlink this account",
465
+ "linkedAccounts": "Linked Plex Accounts",
466
+ "linkedAccountsDesc": "Manage the Plex accounts you can add servers from.",
467
+ "noAccountsYet": "No Plex accounts linked yet.",
468
+ "unlinkPlexAccount": "Unlink Plex Account",
469
+ "unlinkConfirm": "Are you sure you want to unlink this Plex account? You won't be able to add servers from this account until you link it again."
470
+ },
471
+ "notifications": {
472
+ "title": "Notification Agents",
473
+ "description": "Configure notification channels and select which events each agent should receive.",
474
+ "loadingSettings": "Loading notification settings...",
475
+ "addAgent": "Add Notification Agent",
476
+ "editAgent": "Edit Notification Agent",
477
+ "addAgentDesc": "Choose a notification service and configure it.",
478
+ "editAgentDesc": "Update the notification agent configuration.",
479
+ "noAgents": "No notification agents configured",
480
+ "noAgentsHint": "Add an agent to receive notifications about sharing violations and stream events.",
481
+ "agentType": "Agent Type",
482
+ "selectType": "Select type...",
483
+ "webhookUrl": "Webhook URL",
484
+ "webhookUrlPlaceholder": "https://...",
485
+ "triggerEvents": "Trigger Events",
486
+ "allEvents": "All Events",
487
+ "customEvents": "Custom Events",
488
+ "eventSelection": "Event Selection",
489
+ "testingAgent": "Testing...",
490
+ "testAgent": "Test Agent",
491
+ "removeAgentTitle": "Remove {{name}}?",
492
+ "removeAgentDesc": "This will remove {{name}} and disable all its notifications. You can add it back later.",
493
+ "webhookAgents": "Webhook Agents",
494
+ "oneWebhookLimit": "Only one webhook agent can be active at a time.",
495
+ "currentlyConfigured": "{{name}} is currently configured.",
496
+ "allAgentsConfigured": "All notification agents are already configured.",
497
+ "noConfigNeeded": "No configuration needed for this agent.",
498
+ "saveAgent": "Add Agent",
499
+ "updateAgent": "Update Agent"
500
+ },
501
+ "jobs": {
502
+ "runNow": "Run Now",
503
+ "running": "Running...",
504
+ "lastRun": "Last run",
505
+ "nextRun": "Next run",
506
+ "schedule": "Schedule"
507
+ },
508
+ "mobile": {
509
+ "editDisplayName": "Edit Display Name",
510
+ "editDisplayNameDesc": "Change how this device appears in your device list",
511
+ "displayName": "Display Name",
512
+ "displayNamePlaceholder": "e.g., My iPhone",
513
+ "updating": "Updating..."
514
+ }
515
+ },
516
+ "maintenance": {
517
+ "startingTitle": "Tracearr is starting up...",
518
+ "interruptionTitle": "Service interruption",
519
+ "startingDescription": "The server is waiting for backend services to become available. This page will automatically refresh when everything is ready.",
520
+ "interruptionDescription": "One or more backend services have become unavailable. This page will automatically refresh when connectivity is restored.",
521
+ "restoreTitle": "Restoring from backup...",
522
+ "restoreFailed": "Restore failed",
523
+ "restorePhase": {
524
+ "validating": "Validating backup",
525
+ "creating_restore_point": "Creating restore point",
526
+ "shutting_down": "Shutting down services",
527
+ "restoring_database": "Restoring database",
528
+ "running_migrations": "Running migrations",
529
+ "rebuilding_aggregates": "Rebuilding aggregates",
530
+ "restarting": "Restarting services",
531
+ "complete": "Restore complete"
532
+ },
533
+ "initStep": {
534
+ "migrations": "Applying database migrations",
535
+ "timescale": "Preparing TimescaleDB (this can take a while after an upgrade)",
536
+ "services": "Starting services"
537
+ },
538
+ "doNotRestart": "Do not restart or stop the server while this runs. Interrupting it can leave the database half-upgraded."
539
+ },
540
+ "map": {
541
+ "allUsers": "All users",
542
+ "allTypes": "All types",
543
+ "heatmap": "Heatmap",
544
+ "circles": "Circles",
545
+ "streams": "streams",
546
+ "locations": "locations",
547
+ "allActivity": "All activity"
548
+ },
549
+ "devices": {
550
+ "title": "Device Compatibility",
551
+ "description": "See which devices direct play vs transcode each codec",
552
+ "analyzedSessions": "Analyzed Sessions",
553
+ "analyzedSessionsTooltip": "Sessions in device + codec combinations with at least {{count}} sessions and a known codec. Rare combinations and sessions with no codec info aren't counted.",
554
+ "directPlayRate": "Direct Play Rate",
555
+ "videoAndAudio": "Video + audio",
556
+ "uniqueDevices": "Unique Devices",
557
+ "uniqueCodecs": "Unique Codecs",
558
+ "deviceHealth": "Device Health",
559
+ "deviceHealthDesc": "Direct play rate by device type",
560
+ "transcodeHotspots": "Transcode Hotspots",
561
+ "transcodeHotspotsDesc": "Combinations causing the most transcodes",
562
+ "deviceAndCodec": "Device + Codec",
563
+ "transcodes": "Transcodes",
564
+ "pctOfTotal": "% of Total",
565
+ "noTranscodeHotspots": "No transcode hotspots",
566
+ "compatibilityMatrix": "Compatibility Matrix",
567
+ "compatibilityMatrixDesc": "Direct play rates by device and video codec. Sorted by session volume.",
568
+ "noDeviceDataPeriod": "No device data in this period",
569
+ "legend": "Legend:",
570
+ "directPlayHigh": "≥80% Direct",
571
+ "directPlayMid": "50-79%",
572
+ "directPlayLow": "<50%",
573
+ "topTranscodingUsers": "Top Transcoding Users",
574
+ "topTranscodingUsersDesc": "Users causing the most transcodes on your server",
575
+ "noTranscodingUsers": "No transcoding users found"
576
+ },
577
+ "statsBandwidth": {
578
+ "title": "Bandwidth",
579
+ "description": "Streaming bandwidth usage and bitrate analysis",
580
+ "dataTransferred": "Data Transferred",
581
+ "avgBitrate": "Avg Bitrate",
582
+ "avgBitrateMbps": "Avg Bitrate (Mbps)",
583
+ "peakBitrate": "Peak: {{value}} Mbps",
584
+ "totalWatchTime": "Total Watch Time",
585
+ "uniqueUsers": "Unique Users",
586
+ "dailyUsage": "Daily Bandwidth Usage",
587
+ "dailyUsageDesc": "Average bitrate and session count over time",
588
+ "topUsers": "Top Bandwidth Users",
589
+ "topUsersDesc": "Users consuming the most bandwidth",
590
+ "noData": "No bandwidth data available"
591
+ },
592
+ "statsUsers": {
593
+ "noActivity": "No activity yet",
594
+ "noActivityDesc": "Start streaming to see your top users here",
595
+ "top3": "Top 3",
596
+ "runnersUp": "Runners Up"
597
+ },
598
+ "plexCallback": {
599
+ "authComplete": "Authentication complete",
600
+ "windowWillClose": "This window will close automatically..."
601
+ },
602
+ "apiDocs": {
603
+ "backToSettings": "Back to Settings",
604
+ "apiKeyAutoLoaded": "API key auto-loaded",
605
+ "noApiKey": "No API key generated - create one in Settings to test endpoints",
606
+ "versionSwitcherLabel": "API documentation version",
607
+ "versionV1": "API v1",
608
+ "versionV2": "API v2",
609
+ "specLoadError": "Failed to load the API specification. Check your API key and try again."
610
+ },
611
+ "debug": {
612
+ "title": "Debug Tools",
613
+ "description": "Administrative utilities for troubleshooting and data management",
614
+ "overview": "Overview",
615
+ "librarySnapshots": "Library Snapshots",
616
+ "tasks": "Tasks",
617
+ "logs": "Logs",
618
+ "plexAccounts": "Plex Accounts",
619
+ "terminations": "Terminations",
620
+ "libraryItems": "Library Items",
621
+ "environment": "Environment",
622
+ "systemInformation": "System Information",
623
+ "cpu": "CPU",
624
+ "memory": "Memory",
625
+ "uptime": "Uptime",
626
+ "database": "Database",
627
+ "databaseDesc": "Database size and table statistics",
628
+ "totalSize": "Total Size",
629
+ "maintenance": "Maintenance",
630
+ "destructiveActions": "Destructive Actions",
631
+ "refreshAggregates": "Refresh Aggregates",
632
+ "clearStuckJobs": "Clear Stuck Jobs",
633
+ "obliterateAllJobs": "Obliterate All Jobs",
634
+ "clearQueryCache": "Clear Query Cache",
635
+ "clearMobileDevices": "Clear Mobile Devices",
636
+ "clearViolations": "Clear Violations",
637
+ "clearRules": "Clear Rules",
638
+ "clearTerminationLogs": "Clear Termination Logs",
639
+ "clearLibraryCache": "Clear Library Cache",
640
+ "clearSessions": "Clear Sessions",
641
+ "clearUsers": "Clear Users",
642
+ "clearServers": "Clear Servers",
643
+ "factoryReset": "Factory Reset",
644
+ "manageSnapshots": "Manage library snapshots used for Storage Trend and Quality Evolution charts",
645
+ "suspiciousOnly": "Suspicious only",
646
+ "load": "Load",
647
+ "noSuspiciousSnapshots": "No suspicious snapshots found",
648
+ "clickLoadToView": "Click \"Load\" to view snapshots",
649
+ "deleteSelected": "Delete Selected",
650
+ "deleteAllSuspicious": "Delete All Suspicious",
651
+ "suspicious": "Suspicious",
652
+ "ok": "OK",
653
+ "selected": "selected",
654
+ "snapshots": "snapshot(s)",
655
+ "of": "of",
656
+ "logExplorerUnavailable": "Log explorer is only available in Docker environments"
657
+ },
658
+ "media": {
659
+ "landing": {
660
+ "title": "Media",
661
+ "lens": {
662
+ "label": "Viewing as",
663
+ "allUsers": "All users"
664
+ },
665
+ "shelves": {
666
+ "recentlyAddedMovies": "Recently Added Movies",
667
+ "recentlyAddedShows": "Recently Added Shows",
668
+ "mostPopularMovies": "Most Popular Movies",
669
+ "mostPopularShows": "Most Popular Shows",
670
+ "emptyRecentlyAdded": "Nothing added in this period",
671
+ "emptyMostPopular": "No plays in this period",
672
+ "captionRecentlyAdded": "deduped across servers",
673
+ "captionMostPopular": {
674
+ "day": "today",
675
+ "week": "last 7 days",
676
+ "month": "last 30 days",
677
+ "year": "last 12 months",
678
+ "all": "all time",
679
+ "custom": "selected date range"
680
+ }
681
+ },
682
+ "card": {
683
+ "newEpisodes_one": "{{count}} new episode",
684
+ "newEpisodes_other": "{{count}} new episodes",
685
+ "addedAgo": "added {{date}}",
686
+ "addedCompactAgo": "added {{age}} ago",
687
+ "newEpisodesChip": "{{count}} new"
688
+ },
689
+ "deadWeight": {
690
+ "title": "Dead Weight",
691
+ "summary": "{{count}} never-watched titles · {{size}}",
692
+ "empty": "Nothing to reclaim - everything in your library has been watched",
693
+ "columns": {
694
+ "poster": "Poster",
695
+ "title": "Title",
696
+ "size": "Size",
697
+ "added": "Added",
698
+ "servers": "Servers"
699
+ },
700
+ "viewAll": "View all",
701
+ "viewAllTooltip": "Coming soon"
702
+ },
703
+ "loadError": "Couldn't load your media library"
704
+ },
705
+ "movies": {
706
+ "title": "Movies"
707
+ },
708
+ "shows": {
709
+ "title": "Shows"
710
+ },
711
+ "genres": {
712
+ "title": "Genres",
713
+ "subtitle": "Plays and watch time by genre, across every server in view.",
714
+ "chart": {
715
+ "title": "Plays by genre",
716
+ "valueLabel": "Plays",
717
+ "itemCount_one": "{{count}} title",
718
+ "itemCount_other": "{{count}} titles",
719
+ "ariaLabel": "Bar chart of plays by genre, sorted highest to lowest. The full breakdown is available in the table below."
720
+ },
721
+ "table": {
722
+ "title": "Genre breakdown",
723
+ "columns": {
724
+ "genre": "Genre",
725
+ "items": "Items",
726
+ "plays": "Plays",
727
+ "watchTime": "Watch time"
728
+ },
729
+ "browseMovies": "Browse {{genre}} movies",
730
+ "browseShows": "Browse {{genre}} shows"
731
+ },
732
+ "empty": {
733
+ "title": "No genres captured yet",
734
+ "description": "Genres come from your media servers' metadata sync. Check back after the next sync completes."
735
+ },
736
+ "loadError": "Couldn't load genres"
737
+ },
738
+ "detail": {
739
+ "title": "Media Details",
740
+ "breadcrumb": {
741
+ "ariaLabel": "Breadcrumb"
742
+ },
743
+ "notFound": {
744
+ "title": "Media not found",
745
+ "message": "This title doesn't exist or you don't have access to it.",
746
+ "backLink": "Back to Media"
747
+ },
748
+ "hero": {
749
+ "loadError": "Couldn't load this title",
750
+ "meta": {
751
+ "seasons_one": "{{count}} season",
752
+ "seasons_other": "{{count}} seasons",
753
+ "episodes_one": "{{count}} episode",
754
+ "episodes_other": "{{count}} episodes"
755
+ },
756
+ "availability": {
757
+ "added": "added {{date}}",
758
+ "removed": "removed {{date}}"
759
+ },
760
+ "removedEverywhere": {
761
+ "caption": "No longer available on any connected server"
762
+ },
763
+ "actions": {
764
+ "fullHistory": "Full history",
765
+ "openOnServer": "Open on server"
766
+ }
767
+ },
768
+ "kpis": {
769
+ "ariaLabel": "Watch statistics",
770
+ "loadError": "Couldn't load watch statistics",
771
+ "completionLoadError": "Couldn't load completion",
772
+ "plays": {
773
+ "label": "Plays, all time",
774
+ "caption": "resume chains, short sessions excluded"
775
+ },
776
+ "watchTime": {
777
+ "label": "Watch time",
778
+ "detail": "+{{hours}}h in the last 30 days"
779
+ },
780
+ "viewers": {
781
+ "label": "Viewers",
782
+ "detail": "across all servers"
783
+ },
784
+ "completion": {
785
+ "label": "Avg completion",
786
+ "detail": "{{finished}} of {{total}} finished every episode",
787
+ "detailMovie": "{{finished}} of {{total}} watched to completion"
788
+ }
789
+ },
790
+ "watchers": {
791
+ "title": "Watchers",
792
+ "loadError": "Couldn't load watchers",
793
+ "empty": "No one has watched this yet.",
794
+ "lastWatchedAgo": "{{age}} ago",
795
+ "completionLabel": "{{percent}}% complete",
796
+ "columns": {
797
+ "user": "User",
798
+ "plays": "Plays",
799
+ "episodes": "Episodes",
800
+ "completion": "Completion",
801
+ "lastWatched": "Last watched"
802
+ }
803
+ },
804
+ "seasons": {
805
+ "title": "Seasons",
806
+ "loadError": "Couldn't load season data",
807
+ "empty": "No season data yet",
808
+ "episodeCount_one": "{{count}} episode",
809
+ "episodeCount_other": "{{count}} episodes",
810
+ "watchedPct": "{{percent}}% watched",
811
+ "stripSummary": "{{season}}: {{percent}}% watched",
812
+ "episodeLabel": {
813
+ "watched": "{{code}}: watched",
814
+ "partial": "{{code}}: partially watched",
815
+ "unwatched": "{{code}}: unwatched"
816
+ }
817
+ },
818
+ "platforms": {
819
+ "title": "Platforms",
820
+ "loadError": "Couldn't load platform breakdown",
821
+ "empty": "No platform data yet",
822
+ "unknown": "Unknown",
823
+ "columns": {
824
+ "platform": "Platform",
825
+ "plays": "Plays",
826
+ "watchTime": "Watch time"
827
+ }
828
+ },
829
+ "history": {
830
+ "title": "History",
831
+ "loadError": "Couldn't load history",
832
+ "empty": "No plays recorded yet",
833
+ "watched": "Watched",
834
+ "notWatched": "Not finished",
835
+ "columns": {
836
+ "date": "Date",
837
+ "user": "User",
838
+ "content": "Content",
839
+ "server": "Server",
840
+ "duration": "Duration"
841
+ }
842
+ },
843
+ "copies": {
844
+ "title": "Copies",
845
+ "loadError": "Couldn't load copies",
846
+ "unknownLibrary": "Unknown library",
847
+ "columns": {
848
+ "server": "Server",
849
+ "library": "Library",
850
+ "quality": "Quality",
851
+ "episodes": "Episodes",
852
+ "size": "Size",
853
+ "added": "Added"
854
+ },
855
+ "versionLabel": "File {{index}}"
856
+ }
857
+ },
858
+ "posterCard": {
859
+ "rankSuffix": ", rank {{rank}}",
860
+ "onServers": "On {{servers}}",
861
+ "addedLabel": "Added {{date}}",
862
+ "plays_one": "{{count}} play",
863
+ "plays_other": "{{count}} plays",
864
+ "viewers_one": "{{count}} viewer",
865
+ "viewers_other": "{{count}} viewers",
866
+ "watchedState": {
867
+ "watched": "Watched",
868
+ "partial": "Partially watched",
869
+ "watchedByOthers": "Watched by others",
870
+ "watchedByYou": "Watched by you"
871
+ },
872
+ "tileLabel": {
873
+ "added": "added",
874
+ "plays": "plays",
875
+ "viewers": "viewers",
876
+ "resolution": "resolution"
877
+ },
878
+ "rankChip": "#{{rank}}",
879
+ "playsCompact_one": "{{compact}} play",
880
+ "playsCompact_other": "{{compact}} plays",
881
+ "versionsChip": "{{count}}×",
882
+ "versions_one": "{{count}} version",
883
+ "versions_other": "{{count}} versions",
884
+ "moreServers": "+{{count}} more"
885
+ },
886
+ "grid": {
887
+ "toolbar": {
888
+ "ariaLabel": "Filters and sort",
889
+ "typeLabel": "Media type",
890
+ "moviesToggle": "Movies",
891
+ "showsToggle": "Shows",
892
+ "searchPlaceholder": "Search titles…",
893
+ "searchLabel": "Search titles",
894
+ "removeFilter": "Remove {{label}} filter",
895
+ "filtersLabel": "Filters",
896
+ "filtersSheetTitle": "Filters",
897
+ "done": "Done",
898
+ "watchedLabel": "Watched",
899
+ "watched": {
900
+ "all": "All",
901
+ "watched": "Watched",
902
+ "partial": "Partially watched",
903
+ "unwatched": "Unwatched"
904
+ },
905
+ "unwatchedByLens": "Unwatched by {{name}}",
906
+ "resolutionLabel": "Resolution",
907
+ "resolutionAll": "Any resolution",
908
+ "hdrLabel": "Dynamic range",
909
+ "hdrAll": "Any",
910
+ "hdrOnly": "HDR only",
911
+ "hdrChip": "HDR",
912
+ "genreLabel": "Genre",
913
+ "genreAll": "Any genre",
914
+ "serverLabel": "Server",
915
+ "serverAll": "Any server",
916
+ "libraryLabel": "Library",
917
+ "libraryAll": "Any library",
918
+ "yearFromLabel": "From year",
919
+ "yearToLabel": "To year",
920
+ "sizeGbMinLabel": "Min size (GB)",
921
+ "sizeGbMaxLabel": "Max size (GB)",
922
+ "sizeChipAtLeast": "≥ {{min}} GB",
923
+ "sizeChipAtMost": "≤ {{max}} GB",
924
+ "sizeChipRange": "{{min}}–{{max}} GB",
925
+ "sortLabel": "Sort",
926
+ "sort": {
927
+ "title": "Title A–Z",
928
+ "added": "Recently added",
929
+ "year": "Year",
930
+ "plays": "Plays",
931
+ "watch_time": "Watch time",
932
+ "viewers": "Viewers"
933
+ },
934
+ "count": "{{loaded}} of {{total}} titles · {{size}}",
935
+ "countTotal_one": "{{count}} title · {{size}}",
936
+ "countTotal_other": "{{count}} titles · {{size}}"
937
+ },
938
+ "scrubber": {
939
+ "label": "Jump to letter",
940
+ "current": "Letter {{letter}}"
941
+ },
942
+ "loaderError": "Couldn't load more titles",
943
+ "retry": "Retry",
944
+ "clearJumpAction": "Clear",
945
+ "showingFrom": "Showing from {{letter}}",
946
+ "showAll": "Show all",
947
+ "emptyFilter": "No titles match these filters",
948
+ "emptySearch": "No titles match \"{{query}}\"",
949
+ "emptyAnchored": "Nothing at or after \"{{letter}}\" under these filters",
950
+ "loadError": "Couldn't load the catalog"
951
+ }
952
+ }
953
+ }