@tracearr/translations 2.2.0-beta.2 → 2.2.0-beta.4

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 (376) hide show
  1. package/dist/config.d.ts +3351 -1105
  2. package/dist/config.d.ts.map +1 -1
  3. package/dist/config.mobile.d.ts +3351 -1105
  4. package/dist/config.mobile.d.ts.map +1 -1
  5. package/dist/index.d.ts +2 -2
  6. package/dist/index.js +2 -2
  7. package/dist/locales/af-ZA/common.json +298 -266
  8. package/dist/locales/af-ZA/mobile.json +138 -138
  9. package/dist/locales/af-ZA/nav.json +30 -26
  10. package/dist/locales/af-ZA/notifications.json +225 -241
  11. package/dist/locales/af-ZA/pages.json +1975 -901
  12. package/dist/locales/af-ZA/settings.json +462 -433
  13. package/dist/locales/ar-SA/common.json +82 -50
  14. package/dist/locales/ar-SA/mobile.json +96 -96
  15. package/dist/locales/ar-SA/nav.json +23 -19
  16. package/dist/locales/ar-SA/notifications.json +224 -240
  17. package/dist/locales/ar-SA/pages.json +1956 -882
  18. package/dist/locales/ar-SA/settings.json +102 -73
  19. package/dist/locales/ca-ES/common.json +79 -47
  20. package/dist/locales/ca-ES/mobile.json +125 -125
  21. package/dist/locales/ca-ES/nav.json +23 -19
  22. package/dist/locales/ca-ES/notifications.json +225 -241
  23. package/dist/locales/ca-ES/pages.json +1971 -897
  24. package/dist/locales/ca-ES/settings.json +406 -377
  25. package/dist/locales/cs-CZ/common.json +68 -36
  26. package/dist/locales/cs-CZ/mobile.json +99 -99
  27. package/dist/locales/cs-CZ/nav.json +23 -19
  28. package/dist/locales/cs-CZ/notifications.json +223 -239
  29. package/dist/locales/cs-CZ/pages.json +1949 -875
  30. package/dist/locales/cs-CZ/settings.json +102 -73
  31. package/dist/locales/da-DK/common.json +76 -44
  32. package/dist/locales/da-DK/mobile.json +99 -99
  33. package/dist/locales/da-DK/nav.json +24 -20
  34. package/dist/locales/da-DK/notifications.json +223 -239
  35. package/dist/locales/da-DK/pages.json +1956 -882
  36. package/dist/locales/da-DK/settings.json +113 -84
  37. package/dist/locales/de-DE/common.json +73 -41
  38. package/dist/locales/de-DE/mobile.json +102 -102
  39. package/dist/locales/de-DE/nav.json +24 -20
  40. package/dist/locales/de-DE/notifications.json +223 -239
  41. package/dist/locales/de-DE/pages.json +1958 -884
  42. package/dist/locales/de-DE/settings.json +116 -87
  43. package/dist/locales/el-GR/common.json +87 -55
  44. package/dist/locales/el-GR/mobile.json +97 -97
  45. package/dist/locales/el-GR/nav.json +23 -19
  46. package/dist/locales/el-GR/notifications.json +223 -239
  47. package/dist/locales/el-GR/pages.json +1957 -883
  48. package/dist/locales/el-GR/settings.json +109 -80
  49. package/dist/locales/en/common.json +36 -4
  50. package/dist/locales/en/nav.json +6 -2
  51. package/dist/locales/en/notifications.json +13 -29
  52. package/dist/locales/en/pages.json +1189 -115
  53. package/dist/locales/en/settings.json +31 -2
  54. package/dist/locales/en-US/common.json +36 -4
  55. package/dist/locales/en-US/nav.json +6 -2
  56. package/dist/locales/en-US/notifications.json +217 -233
  57. package/dist/locales/en-US/pages.json +1933 -859
  58. package/dist/locales/en-US/settings.json +31 -2
  59. package/dist/locales/es-ES/common.json +62 -30
  60. package/dist/locales/es-ES/mobile.json +96 -96
  61. package/dist/locales/es-ES/nav.json +23 -19
  62. package/dist/locales/es-ES/notifications.json +223 -239
  63. package/dist/locales/es-ES/pages.json +1956 -882
  64. package/dist/locales/es-ES/settings.json +101 -72
  65. package/dist/locales/fi-FI/common.json +66 -34
  66. package/dist/locales/fi-FI/mobile.json +97 -97
  67. package/dist/locales/fi-FI/nav.json +24 -20
  68. package/dist/locales/fi-FI/notifications.json +223 -239
  69. package/dist/locales/fi-FI/pages.json +1956 -882
  70. package/dist/locales/fi-FI/settings.json +111 -82
  71. package/dist/locales/fr-FR/common.json +69 -37
  72. package/dist/locales/fr-FR/mobile.json +10 -10
  73. package/dist/locales/fr-FR/nav.json +24 -20
  74. package/dist/locales/fr-FR/notifications.json +223 -239
  75. package/dist/locales/fr-FR/pages.json +1950 -876
  76. package/dist/locales/fr-FR/settings.json +106 -77
  77. package/dist/locales/he-IL/common.json +298 -266
  78. package/dist/locales/he-IL/mobile.json +138 -138
  79. package/dist/locales/he-IL/nav.json +30 -26
  80. package/dist/locales/he-IL/notifications.json +225 -241
  81. package/dist/locales/he-IL/pages.json +1978 -904
  82. package/dist/locales/he-IL/settings.json +462 -433
  83. package/dist/locales/hu-HU/common.json +197 -165
  84. package/dist/locales/hu-HU/mobile.json +138 -138
  85. package/dist/locales/hu-HU/nav.json +30 -26
  86. package/dist/locales/hu-HU/notifications.json +225 -241
  87. package/dist/locales/hu-HU/pages.json +1978 -904
  88. package/dist/locales/hu-HU/settings.json +457 -428
  89. package/dist/locales/it-IT/common.json +83 -51
  90. package/dist/locales/it-IT/mobile.json +101 -101
  91. package/dist/locales/it-IT/nav.json +24 -20
  92. package/dist/locales/it-IT/notifications.json +224 -240
  93. package/dist/locales/it-IT/pages.json +1958 -884
  94. package/dist/locales/it-IT/settings.json +109 -80
  95. package/dist/locales/ja-JP/common.json +63 -31
  96. package/dist/locales/ja-JP/mobile.json +98 -98
  97. package/dist/locales/ja-JP/nav.json +23 -19
  98. package/dist/locales/ja-JP/notifications.json +223 -239
  99. package/dist/locales/ja-JP/pages.json +1956 -882
  100. package/dist/locales/ja-JP/settings.json +106 -77
  101. package/dist/locales/ko-KR/common.json +298 -266
  102. package/dist/locales/ko-KR/mobile.json +138 -138
  103. package/dist/locales/ko-KR/nav.json +30 -26
  104. package/dist/locales/ko-KR/notifications.json +225 -241
  105. package/dist/locales/ko-KR/pages.json +1978 -904
  106. package/dist/locales/ko-KR/settings.json +462 -433
  107. package/dist/locales/nl-NL/common.json +70 -38
  108. package/dist/locales/nl-NL/mobile.json +91 -91
  109. package/dist/locales/nl-NL/nav.json +24 -20
  110. package/dist/locales/nl-NL/notifications.json +223 -239
  111. package/dist/locales/nl-NL/pages.json +1949 -875
  112. package/dist/locales/nl-NL/settings.json +87 -58
  113. package/dist/locales/no-NO/common.json +62 -30
  114. package/dist/locales/no-NO/mobile.json +96 -96
  115. package/dist/locales/no-NO/nav.json +23 -19
  116. package/dist/locales/no-NO/notifications.json +223 -239
  117. package/dist/locales/no-NO/pages.json +1956 -882
  118. package/dist/locales/no-NO/settings.json +99 -70
  119. package/dist/locales/pl-PL/common.json +57 -25
  120. package/dist/locales/pl-PL/mobile.json +94 -94
  121. package/dist/locales/pl-PL/nav.json +23 -19
  122. package/dist/locales/pl-PL/notifications.json +223 -239
  123. package/dist/locales/pl-PL/pages.json +1956 -882
  124. package/dist/locales/pl-PL/settings.json +100 -71
  125. package/dist/locales/pt-BR/common.json +94 -62
  126. package/dist/locales/pt-BR/mobile.json +138 -138
  127. package/dist/locales/pt-BR/nav.json +24 -20
  128. package/dist/locales/pt-BR/notifications.json +223 -239
  129. package/dist/locales/pt-BR/pages.json +1945 -871
  130. package/dist/locales/pt-BR/settings.json +123 -94
  131. package/dist/locales/pt-PT/common.json +77 -45
  132. package/dist/locales/pt-PT/mobile.json +97 -97
  133. package/dist/locales/pt-PT/nav.json +24 -20
  134. package/dist/locales/pt-PT/notifications.json +223 -239
  135. package/dist/locales/pt-PT/pages.json +1956 -882
  136. package/dist/locales/pt-PT/settings.json +103 -74
  137. package/dist/locales/ro-RO/common.json +70 -38
  138. package/dist/locales/ro-RO/mobile.json +98 -98
  139. package/dist/locales/ro-RO/nav.json +24 -20
  140. package/dist/locales/ro-RO/notifications.json +223 -239
  141. package/dist/locales/ro-RO/pages.json +1956 -882
  142. package/dist/locales/ro-RO/settings.json +106 -77
  143. package/dist/locales/ru-RU/common.json +74 -42
  144. package/dist/locales/ru-RU/mobile.json +97 -97
  145. package/dist/locales/ru-RU/nav.json +23 -19
  146. package/dist/locales/ru-RU/notifications.json +223 -239
  147. package/dist/locales/ru-RU/pages.json +1957 -883
  148. package/dist/locales/ru-RU/settings.json +99 -70
  149. package/dist/locales/sr-SP/common.json +298 -266
  150. package/dist/locales/sr-SP/mobile.json +138 -138
  151. package/dist/locales/sr-SP/nav.json +30 -26
  152. package/dist/locales/sr-SP/notifications.json +225 -241
  153. package/dist/locales/sr-SP/pages.json +1978 -904
  154. package/dist/locales/sr-SP/settings.json +462 -433
  155. package/dist/locales/sv-SE/common.json +71 -39
  156. package/dist/locales/sv-SE/mobile.json +100 -100
  157. package/dist/locales/sv-SE/nav.json +24 -20
  158. package/dist/locales/sv-SE/notifications.json +223 -239
  159. package/dist/locales/sv-SE/pages.json +1956 -882
  160. package/dist/locales/sv-SE/settings.json +106 -77
  161. package/dist/locales/tr-TR/common.json +298 -266
  162. package/dist/locales/tr-TR/mobile.json +138 -138
  163. package/dist/locales/tr-TR/nav.json +30 -26
  164. package/dist/locales/tr-TR/notifications.json +225 -241
  165. package/dist/locales/tr-TR/pages.json +1978 -904
  166. package/dist/locales/tr-TR/settings.json +462 -433
  167. package/dist/locales/uk-UA/common.json +54 -22
  168. package/dist/locales/uk-UA/mobile.json +98 -98
  169. package/dist/locales/uk-UA/nav.json +23 -19
  170. package/dist/locales/uk-UA/notifications.json +223 -239
  171. package/dist/locales/uk-UA/pages.json +1957 -883
  172. package/dist/locales/uk-UA/settings.json +101 -72
  173. package/dist/locales/vi-VN/common.json +298 -266
  174. package/dist/locales/vi-VN/mobile.json +138 -138
  175. package/dist/locales/vi-VN/nav.json +30 -26
  176. package/dist/locales/vi-VN/notifications.json +225 -241
  177. package/dist/locales/vi-VN/pages.json +1978 -904
  178. package/dist/locales/vi-VN/settings.json +462 -433
  179. package/dist/locales/zh-CN/common.json +55 -23
  180. package/dist/locales/zh-CN/mobile.json +95 -95
  181. package/dist/locales/zh-CN/nav.json +23 -19
  182. package/dist/locales/zh-CN/notifications.json +223 -239
  183. package/dist/locales/zh-CN/pages.json +1956 -882
  184. package/dist/locales/zh-CN/settings.json +105 -76
  185. package/dist/locales/zh-TW/common.json +129 -97
  186. package/dist/locales/zh-TW/mobile.json +137 -137
  187. package/dist/locales/zh-TW/nav.json +30 -26
  188. package/dist/locales/zh-TW/notifications.json +225 -241
  189. package/dist/locales/zh-TW/pages.json +1978 -904
  190. package/dist/locales/zh-TW/settings.json +460 -431
  191. package/package.json +3 -2
  192. package/src/index.ts +2 -2
  193. package/src/locales/af-ZA/common.json +298 -266
  194. package/src/locales/af-ZA/mobile.json +138 -138
  195. package/src/locales/af-ZA/nav.json +30 -26
  196. package/src/locales/af-ZA/notifications.json +225 -241
  197. package/src/locales/af-ZA/pages.json +1975 -901
  198. package/src/locales/af-ZA/settings.json +462 -433
  199. package/src/locales/ar-SA/common.json +82 -50
  200. package/src/locales/ar-SA/mobile.json +96 -96
  201. package/src/locales/ar-SA/nav.json +23 -19
  202. package/src/locales/ar-SA/notifications.json +224 -240
  203. package/src/locales/ar-SA/pages.json +1956 -882
  204. package/src/locales/ar-SA/settings.json +102 -73
  205. package/src/locales/ca-ES/common.json +79 -47
  206. package/src/locales/ca-ES/mobile.json +125 -125
  207. package/src/locales/ca-ES/nav.json +23 -19
  208. package/src/locales/ca-ES/notifications.json +225 -241
  209. package/src/locales/ca-ES/pages.json +1971 -897
  210. package/src/locales/ca-ES/settings.json +406 -377
  211. package/src/locales/cs-CZ/common.json +68 -36
  212. package/src/locales/cs-CZ/mobile.json +99 -99
  213. package/src/locales/cs-CZ/nav.json +23 -19
  214. package/src/locales/cs-CZ/notifications.json +223 -239
  215. package/src/locales/cs-CZ/pages.json +1949 -875
  216. package/src/locales/cs-CZ/settings.json +102 -73
  217. package/src/locales/da-DK/common.json +76 -44
  218. package/src/locales/da-DK/mobile.json +99 -99
  219. package/src/locales/da-DK/nav.json +24 -20
  220. package/src/locales/da-DK/notifications.json +223 -239
  221. package/src/locales/da-DK/pages.json +1956 -882
  222. package/src/locales/da-DK/settings.json +113 -84
  223. package/src/locales/de-DE/common.json +73 -41
  224. package/src/locales/de-DE/mobile.json +102 -102
  225. package/src/locales/de-DE/nav.json +24 -20
  226. package/src/locales/de-DE/notifications.json +223 -239
  227. package/src/locales/de-DE/pages.json +1958 -884
  228. package/src/locales/de-DE/settings.json +116 -87
  229. package/src/locales/el-GR/common.json +87 -55
  230. package/src/locales/el-GR/mobile.json +97 -97
  231. package/src/locales/el-GR/nav.json +23 -19
  232. package/src/locales/el-GR/notifications.json +223 -239
  233. package/src/locales/el-GR/pages.json +1957 -883
  234. package/src/locales/el-GR/settings.json +109 -80
  235. package/src/locales/en/common.json +36 -4
  236. package/src/locales/en/nav.json +6 -2
  237. package/src/locales/en/notifications.json +13 -29
  238. package/src/locales/en/pages.json +1189 -115
  239. package/src/locales/en/settings.json +31 -2
  240. package/src/locales/en-US/common.json +36 -4
  241. package/src/locales/en-US/nav.json +6 -2
  242. package/src/locales/en-US/notifications.json +217 -233
  243. package/src/locales/en-US/pages.json +1933 -859
  244. package/src/locales/en-US/settings.json +31 -2
  245. package/src/locales/es-ES/common.json +62 -30
  246. package/src/locales/es-ES/mobile.json +96 -96
  247. package/src/locales/es-ES/nav.json +23 -19
  248. package/src/locales/es-ES/notifications.json +223 -239
  249. package/src/locales/es-ES/pages.json +1956 -882
  250. package/src/locales/es-ES/settings.json +101 -72
  251. package/src/locales/fi-FI/common.json +66 -34
  252. package/src/locales/fi-FI/mobile.json +97 -97
  253. package/src/locales/fi-FI/nav.json +24 -20
  254. package/src/locales/fi-FI/notifications.json +223 -239
  255. package/src/locales/fi-FI/pages.json +1956 -882
  256. package/src/locales/fi-FI/settings.json +111 -82
  257. package/src/locales/fr-FR/common.json +69 -37
  258. package/src/locales/fr-FR/mobile.json +10 -10
  259. package/src/locales/fr-FR/nav.json +24 -20
  260. package/src/locales/fr-FR/notifications.json +223 -239
  261. package/src/locales/fr-FR/pages.json +1950 -876
  262. package/src/locales/fr-FR/settings.json +106 -77
  263. package/src/locales/he-IL/common.json +298 -266
  264. package/src/locales/he-IL/mobile.json +138 -138
  265. package/src/locales/he-IL/nav.json +30 -26
  266. package/src/locales/he-IL/notifications.json +225 -241
  267. package/src/locales/he-IL/pages.json +1978 -904
  268. package/src/locales/he-IL/settings.json +462 -433
  269. package/src/locales/hu-HU/common.json +197 -165
  270. package/src/locales/hu-HU/mobile.json +138 -138
  271. package/src/locales/hu-HU/nav.json +30 -26
  272. package/src/locales/hu-HU/notifications.json +225 -241
  273. package/src/locales/hu-HU/pages.json +1978 -904
  274. package/src/locales/hu-HU/settings.json +457 -428
  275. package/src/locales/it-IT/common.json +83 -51
  276. package/src/locales/it-IT/mobile.json +101 -101
  277. package/src/locales/it-IT/nav.json +24 -20
  278. package/src/locales/it-IT/notifications.json +224 -240
  279. package/src/locales/it-IT/pages.json +1958 -884
  280. package/src/locales/it-IT/settings.json +109 -80
  281. package/src/locales/ja-JP/common.json +63 -31
  282. package/src/locales/ja-JP/mobile.json +98 -98
  283. package/src/locales/ja-JP/nav.json +23 -19
  284. package/src/locales/ja-JP/notifications.json +223 -239
  285. package/src/locales/ja-JP/pages.json +1956 -882
  286. package/src/locales/ja-JP/settings.json +106 -77
  287. package/src/locales/ko-KR/common.json +298 -266
  288. package/src/locales/ko-KR/mobile.json +138 -138
  289. package/src/locales/ko-KR/nav.json +30 -26
  290. package/src/locales/ko-KR/notifications.json +225 -241
  291. package/src/locales/ko-KR/pages.json +1978 -904
  292. package/src/locales/ko-KR/settings.json +462 -433
  293. package/src/locales/nl-NL/common.json +70 -38
  294. package/src/locales/nl-NL/mobile.json +91 -91
  295. package/src/locales/nl-NL/nav.json +24 -20
  296. package/src/locales/nl-NL/notifications.json +223 -239
  297. package/src/locales/nl-NL/pages.json +1949 -875
  298. package/src/locales/nl-NL/settings.json +87 -58
  299. package/src/locales/no-NO/common.json +62 -30
  300. package/src/locales/no-NO/mobile.json +96 -96
  301. package/src/locales/no-NO/nav.json +23 -19
  302. package/src/locales/no-NO/notifications.json +223 -239
  303. package/src/locales/no-NO/pages.json +1956 -882
  304. package/src/locales/no-NO/settings.json +99 -70
  305. package/src/locales/pl-PL/common.json +57 -25
  306. package/src/locales/pl-PL/mobile.json +94 -94
  307. package/src/locales/pl-PL/nav.json +23 -19
  308. package/src/locales/pl-PL/notifications.json +223 -239
  309. package/src/locales/pl-PL/pages.json +1956 -882
  310. package/src/locales/pl-PL/settings.json +100 -71
  311. package/src/locales/pt-BR/common.json +94 -62
  312. package/src/locales/pt-BR/mobile.json +138 -138
  313. package/src/locales/pt-BR/nav.json +24 -20
  314. package/src/locales/pt-BR/notifications.json +223 -239
  315. package/src/locales/pt-BR/pages.json +1945 -871
  316. package/src/locales/pt-BR/settings.json +123 -94
  317. package/src/locales/pt-PT/common.json +77 -45
  318. package/src/locales/pt-PT/mobile.json +97 -97
  319. package/src/locales/pt-PT/nav.json +24 -20
  320. package/src/locales/pt-PT/notifications.json +223 -239
  321. package/src/locales/pt-PT/pages.json +1956 -882
  322. package/src/locales/pt-PT/settings.json +103 -74
  323. package/src/locales/ro-RO/common.json +70 -38
  324. package/src/locales/ro-RO/mobile.json +98 -98
  325. package/src/locales/ro-RO/nav.json +24 -20
  326. package/src/locales/ro-RO/notifications.json +223 -239
  327. package/src/locales/ro-RO/pages.json +1956 -882
  328. package/src/locales/ro-RO/settings.json +106 -77
  329. package/src/locales/ru-RU/common.json +74 -42
  330. package/src/locales/ru-RU/mobile.json +97 -97
  331. package/src/locales/ru-RU/nav.json +23 -19
  332. package/src/locales/ru-RU/notifications.json +223 -239
  333. package/src/locales/ru-RU/pages.json +1957 -883
  334. package/src/locales/ru-RU/settings.json +99 -70
  335. package/src/locales/sr-SP/common.json +298 -266
  336. package/src/locales/sr-SP/mobile.json +138 -138
  337. package/src/locales/sr-SP/nav.json +30 -26
  338. package/src/locales/sr-SP/notifications.json +225 -241
  339. package/src/locales/sr-SP/pages.json +1978 -904
  340. package/src/locales/sr-SP/settings.json +462 -433
  341. package/src/locales/sv-SE/common.json +71 -39
  342. package/src/locales/sv-SE/mobile.json +100 -100
  343. package/src/locales/sv-SE/nav.json +24 -20
  344. package/src/locales/sv-SE/notifications.json +223 -239
  345. package/src/locales/sv-SE/pages.json +1956 -882
  346. package/src/locales/sv-SE/settings.json +106 -77
  347. package/src/locales/tr-TR/common.json +298 -266
  348. package/src/locales/tr-TR/mobile.json +138 -138
  349. package/src/locales/tr-TR/nav.json +30 -26
  350. package/src/locales/tr-TR/notifications.json +225 -241
  351. package/src/locales/tr-TR/pages.json +1978 -904
  352. package/src/locales/tr-TR/settings.json +462 -433
  353. package/src/locales/uk-UA/common.json +54 -22
  354. package/src/locales/uk-UA/mobile.json +98 -98
  355. package/src/locales/uk-UA/nav.json +23 -19
  356. package/src/locales/uk-UA/notifications.json +223 -239
  357. package/src/locales/uk-UA/pages.json +1957 -883
  358. package/src/locales/uk-UA/settings.json +101 -72
  359. package/src/locales/vi-VN/common.json +298 -266
  360. package/src/locales/vi-VN/mobile.json +138 -138
  361. package/src/locales/vi-VN/nav.json +30 -26
  362. package/src/locales/vi-VN/notifications.json +225 -241
  363. package/src/locales/vi-VN/pages.json +1978 -904
  364. package/src/locales/vi-VN/settings.json +462 -433
  365. package/src/locales/zh-CN/common.json +55 -23
  366. package/src/locales/zh-CN/mobile.json +95 -95
  367. package/src/locales/zh-CN/nav.json +23 -19
  368. package/src/locales/zh-CN/notifications.json +223 -239
  369. package/src/locales/zh-CN/pages.json +1956 -882
  370. package/src/locales/zh-CN/settings.json +105 -76
  371. package/src/locales/zh-TW/common.json +129 -97
  372. package/src/locales/zh-TW/mobile.json +137 -137
  373. package/src/locales/zh-TW/nav.json +30 -26
  374. package/src/locales/zh-TW/notifications.json +225 -241
  375. package/src/locales/zh-TW/pages.json +1978 -904
  376. package/src/locales/zh-TW/settings.json +460 -431
@@ -83,7 +83,10 @@
83
83
  "suggestionsReview": "Review",
84
84
  "suggestionsMatchEmail": "Same email",
85
85
  "suggestionsMatchUsername": "Same username",
86
- "suggestionsError": "Could not load merge suggestions"
86
+ "suggestionsError": "Could not load merge suggestions",
87
+ "filterHasAccessTo": "Has access to",
88
+ "filterHasAccessToPlaceholder": "Any server",
89
+ "filterHasAccessToHint": "Shows people with an active account on every server selected."
87
90
  },
88
91
  "userDetail": {
89
92
  "backToUsers": "Back to Users",
@@ -92,9 +95,7 @@
92
95
  "statistics": "Statistics",
93
96
  "sessions": "Sessions",
94
97
  "violations": "Violations",
95
- "locations": "Locations",
96
98
  "terminationHistory": "Termination History",
97
- "noSessionsFound": "No sessions found for this user.",
98
99
  "noViolationsFound": "No violations for this user.",
99
100
  "noTerminationsFound": "No stream terminations for this user.",
100
101
  "byRule": "By / Rule",
@@ -109,7 +110,8 @@
109
110
  "acrossAllServers": "Across all linked accounts:",
110
111
  "overallTrust": "Overall Trust",
111
112
  "serverScope": "Server",
112
- "allServers": "All servers"
113
+ "allServers": "All servers",
114
+ "title": "User Details"
113
115
  },
114
116
  "history": {
115
117
  "title": "History",
@@ -190,8 +192,7 @@
190
192
  "colCopies": "Copies",
191
193
  "colRecoverable": "Recoverable Space",
192
194
  "sameServer": "Same server",
193
- "mirror": "Mirror",
194
- "pageOf": "Page {{page}} of {{totalPages}}"
195
+ "mirror": "Mirror"
195
196
  },
196
197
  "watch": {
197
198
  "title": "Watch Analytics",
@@ -288,11 +289,7 @@
288
289
  },
289
290
  "violations": {
290
291
  "title": "Violations",
291
- "violationLog": "Violation Log",
292
- "noMatches": "No Matches",
293
292
  "tryAdjustingFilters": "Try adjusting your filters",
294
- "allClear": "All Clear",
295
- "noViolationsDetected": "No rule violations detected",
296
293
  "selectAllViolations": "Select all {{count}} violations matching filters",
297
294
  "dismissViolation": "Dismiss Violation",
298
295
  "dismissViolationConfirm": "Are you sure you want to dismiss this violation? This will remove it from the violation log permanently.",
@@ -303,6 +300,7 @@
303
300
  "noViolationsRecorded": "No violations have been recorded yet.",
304
301
  "allSeverities": "All Severities",
305
302
  "allStatuses": "All Statuses",
303
+ "allRules": "All rules",
306
304
  "filterPeople": "People",
307
305
  "allPeople": "All people",
308
306
  "peopleSelectedCount": "{{count}} people",
@@ -337,82 +335,1163 @@
337
335
  "relatedSessions_other": "{{count}} related sessions"
338
336
  }
339
337
  },
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.",
338
+ "automations": {
339
+ "actions": {
340
+ "send": {
341
+ "label": "Send Notification",
342
+ "description": "Send to one or more destinations",
343
+ "fields": {
344
+ "cooldown_minutes": {
345
+ "description": "Minimum time between notifications"
346
+ }
347
+ },
348
+ "ran": "Sent a notification"
349
+ },
350
+ "trust": {
351
+ "label": "Trust Score",
352
+ "description": "Adjust, set, or reset the trust score",
353
+ "fields": {
354
+ "mode": {
355
+ "label": "Mode"
356
+ },
357
+ "amount": {
358
+ "label": "Amount",
359
+ "description": "Positive to increase, negative to decrease"
360
+ },
361
+ "value": {
362
+ "label": "Value"
363
+ }
364
+ },
365
+ "ran": "Changed the trust score"
366
+ },
367
+ "kill_stream": {
368
+ "label": "Kill Stream",
369
+ "description": "Terminate the active stream",
370
+ "fields": {
371
+ "cooldown_minutes": {
372
+ "description": "Minimum time between terminations for the same user"
373
+ },
374
+ "delay_seconds": {
375
+ "label": "Sustain window",
376
+ "description": "Waits this many seconds, then kills the stream only if the automation still matches. 0 kills right after a final re-check."
377
+ },
378
+ "target": {
379
+ "description": "Which sessions to terminate"
380
+ },
381
+ "message": {
382
+ "placeholder": "Optional message"
383
+ }
384
+ },
385
+ "ran": "Stopped the stream"
386
+ },
387
+ "message_client": {
388
+ "label": "Message Client",
389
+ "description": "Send a message to the media player",
390
+ "hint": "Jellyfin and Emby only. Plex only supports messages when killing a stream.",
391
+ "fields": {
392
+ "target": {
393
+ "description": "Which sessions to message"
394
+ },
395
+ "message": {
396
+ "placeholder": "Message to display…"
397
+ }
398
+ },
399
+ "ran": "Put a message on the player"
400
+ }
401
+ },
402
+ "activity": {
403
+ "title": "Activity",
404
+ "description": "What this automation did, newest first. Runs are kept for {{days}} days.",
405
+ "outcome": "Outcome",
406
+ "who": "Who",
407
+ "where": "Where",
408
+ "playing": "Playing",
409
+ "from": "From",
410
+ "summary": "Summary",
411
+ "started": "Started",
412
+ "finished": "Finished",
413
+ "noSummary": "No notes",
414
+ "outcomes": {
415
+ "completed": "Ran",
416
+ "stopped_by_condition": "No match",
417
+ "error": "Failed"
418
+ },
419
+ "empty": "No runs yet",
420
+ "emptyDescription": "Runs are listed here once a trigger matches.",
421
+ "runTitle": "Run",
422
+ "runLoading": "Loading the run",
423
+ "triggeredBy": "Triggered by {{trigger}}",
424
+ "unknownStep": "Unrecognized step",
425
+ "tabs": {
426
+ "all": "All",
427
+ "completed": "Ran",
428
+ "stopped_by_condition": "No match",
429
+ "error": "Failed"
430
+ },
431
+ "group": "Group {{number}}",
432
+ "branch": {
433
+ "then": "Took the 'if' steps",
434
+ "else": "Took the 'otherwise' steps"
435
+ },
436
+ "whyBranch": "What it read",
437
+ "openInEditor": "Open in the builder with this run",
438
+ "tabsLabel": "Filter by outcome",
439
+ "emptyRan": "Nothing has matched yet",
440
+ "emptyRanDescription_one": "{{count}} check ran and did not match.",
441
+ "emptyRanDescription_other": "{{count}} checks ran and did not match.",
442
+ "item": "Item",
443
+ "recordedViolation": "Recorded a violation"
444
+ },
445
+ "allKinds": "All kinds",
446
+ "allStatuses": "All statuses",
447
+ "allSeverities": "All severities",
448
+ "bind": {
449
+ "nameHelper": "The name in the automations list.",
450
+ "namePlaceholder": "A name for this automation",
451
+ "activeLabel": "Turn it on now",
452
+ "back": "Back",
453
+ "submit": "Use this",
454
+ "submitting": "Setting it up…",
455
+ "customize": "Open in the builder",
456
+ "doors": {
457
+ "helper": "Use this keeps the steps as they are; the answers above can change later. Open in the builder makes every step editable and ends the link to the ready-made automation."
458
+ },
459
+ "anyServer": "Any server",
460
+ "serverHelper": "Any server means all of them.",
461
+ "serverLabel": "Which server",
462
+ "accountLabel": "Which account",
463
+ "personLabel": "Which person",
464
+ "destinationsLabel": "Send to",
465
+ "required": "Pick at least one.",
466
+ "needs": {
467
+ "title": "What it needs"
468
+ },
469
+ "helper": {
470
+ "killMessage": "Shown on the player when the stream stops.",
471
+ "clientMessage": "Shown on the player while it keeps playing."
472
+ },
473
+ "noInputs": "Nothing to fill in.",
474
+ "failed": "Couldn't set that up. Try again.",
475
+ "created": "{{name}} is set up and running.",
476
+ "createdOff": "{{name}} was created and is off. Turn it on from the list."
477
+ },
409
478
  "builder": {
410
479
  "destinationDisabled": "Disabled destination",
411
480
  "noDestinations": "No destinations yet. Add one to send notifications.",
481
+ "newDestination": "New destination",
412
482
  "errors": {
413
- "sendNeedsDestination": "Pick at least one destination"
483
+ "sendNeedsDestination": "Pick at least one destination",
484
+ "nameRequired": "Give this automation a name",
485
+ "scopeIncomplete": "Pick who this applies to",
486
+ "triggerRequired": "Add what starts this, or switch one back on",
487
+ "policyNeedsSubject": "Violations are about a person, so this needs a stream or account trigger.",
488
+ "fieldUnavailable": "This check is not available for every trigger here",
489
+ "operatorInvalid": "This comparison doesn't fit the check",
490
+ "valueInvalid": "This value doesn't fit the check",
491
+ "actionUnavailable": "These triggers do not supply what this action needs",
492
+ "variableUnavailable": "The message names something not every trigger here supplies",
493
+ "minutesRange": "Between {{min}} and {{max}} minutes",
494
+ "daysRange": "Between {{min}} and {{max}} days",
495
+ "measureInvalid": "Pick how the minutes are counted",
496
+ "fieldNotAvailableFor": "Not available for: {{triggers}}",
497
+ "trustAmountRange": "Trust changes by between -100 and 100 points",
498
+ "trustValueRange": "Trust score is between 0 and 100",
499
+ "messageRequired": "Type the message to show",
500
+ "tooLong": "At most {{max}} characters"
501
+ },
502
+ "recordAs": {
503
+ "label": "When this runs, record it as",
504
+ "policy": "A violation",
505
+ "policyDescription": "Listed in Violations; can be acknowledged.",
506
+ "notification": "An alert",
507
+ "notificationDescription": "Recorded in Activity; never a violation."
508
+ },
509
+ "severityLabel": "How serious?",
510
+ "activeLabel": "Active",
511
+ "saving": "Saving…",
512
+ "selectPlaceholder": "Select…",
513
+ "searchPlaceholder": "Search…",
514
+ "noMatches": "No matches",
515
+ "clearSelection": "Clear selection",
516
+ "selectedCount": "{{count}} selected",
517
+ "scope": {
518
+ "label": "Who this applies to",
519
+ "global": "Everyone",
520
+ "server": "One server",
521
+ "account": "One account",
522
+ "person": "One person",
523
+ "serverLabel": "Server",
524
+ "serverPlaceholder": "Select server",
525
+ "accountLabel": "Account",
526
+ "accountPlaceholder": "Select account",
527
+ "personLabel": "Person",
528
+ "personPlaceholder": "Select person",
529
+ "personHelper": "Matches this person on every server they have an account on.",
530
+ "noServers": "No servers connected yet.",
531
+ "enforceAcrossServers": "Act on their streams on any of their servers",
532
+ "enforceAcrossServersDescription": "Acts on the person's sessions on any of their servers, not only the one that triggered it. Off by default."
533
+ },
534
+ "conditions": {
535
+ "addGroup": "Add a separate set of checks",
536
+ "fieldPlaceholder": "Pick something to check",
537
+ "windowPrefix": "in",
538
+ "windowUnit": "hrs",
539
+ "uniqueDevices": "Unique devices",
540
+ "uniqueDevicesHint": "Counts only sessions from different physical devices.",
541
+ "uniqueIps": "Unique IPs",
542
+ "uniqueIpsHint": "Counts only sessions from different IP addresses, so same-household streams are not counted.",
543
+ "allDeviceTypes": "All device types",
544
+ "deviceTypesHint": "Counts only streams from the selected device types. Empty means every device.",
545
+ "yes": "Yes",
546
+ "no": "No",
547
+ "recentlySeen": "Recently seen",
548
+ "allCountries": "All countries",
549
+ "sectionTitle": "And only if…",
550
+ "optional": "optional",
551
+ "helper": "Checks that must pass first. Empty means it runs every time.",
552
+ "emptyLine": "No extra checks. This runs every time.",
553
+ "all": "and",
554
+ "any": "or",
555
+ "allHint": "and: every check has to pass",
556
+ "anyHint": "or: any one check is enough",
557
+ "matchLabel": "Join these checks with",
558
+ "fieldLabel": "What to check",
559
+ "operatorLabel": "Is it",
560
+ "valueLabel": "Value",
561
+ "canNeverPass": "This can never pass. The trigger already fires at {{threshold}}.",
562
+ "noFields": "No checks are available for these triggers. Add a stream or account trigger first.",
563
+ "groupSeparator": "and also",
564
+ "addAnother": "Add a check",
565
+ "addFirst": "Add a check",
566
+ "removeGroup": "Remove this set of checks"
567
+ },
568
+ "actions": {
569
+ "add": "Add another action",
570
+ "sectionTitle": "Then do…",
571
+ "ifTitle": "If…",
572
+ "helper": "These run in order, top to bottom.",
573
+ "emptyTitle": "What should happen?",
574
+ "emptyDescription": "Send a notification, stop the stream, change a trust score, or run steps only when an extra check passes.",
575
+ "emptyAction": "Choose what happens",
576
+ "moveUp": "Move {{name}} up",
577
+ "moveDown": "Move {{name}} down",
578
+ "menu": "More for {{name}}",
579
+ "branchName": "this branch",
580
+ "confirmRemoveTitle": "Remove this action?",
581
+ "confirmRemoveDescription": "Stops happening on save.",
582
+ "policyNote": "A branch does not decide whether this is flagged; the And only if… section does.",
583
+ "branchThen": "Do this",
584
+ "branchElse": "Otherwise",
585
+ "branchElseEmpty": "Nothing. The automation carries on.",
586
+ "ifNothing": "nothing picked yet",
587
+ "ifAddCheck": "Add another check",
588
+ "addBranch": "Add a step",
589
+ "expandBranch": "Show this branch's steps",
590
+ "collapseBranch": "Hide this branch's steps"
591
+ },
592
+ "when": {
593
+ "title": "When…",
594
+ "helper": "Any one of these starts it. At least one is required.",
595
+ "emptyTitle": "What should start this?",
596
+ "emptyDescription": "A stream starting, a server going down, an account going quiet.",
597
+ "emptyAction": "Choose what starts it",
598
+ "add": "Add another trigger",
599
+ "or": "or"
600
+ },
601
+ "heldFor": {
602
+ "prefix": "A stream has been paused for",
603
+ "minutesLabel": "Minutes",
604
+ "unit": "minutes",
605
+ "measureLabel": "Counted",
606
+ "current": "this time",
607
+ "total": "in total"
608
+ },
609
+ "inactiveFor": {
610
+ "prefix": "An account has been inactive for",
611
+ "daysLabel": "Days",
612
+ "unit": "days"
613
+ },
614
+ "rows": {
615
+ "toggle": "Include {{name}}",
616
+ "remove": "Remove {{name}}",
617
+ "skipped": "Skipped",
618
+ "toggleHint": "skip",
619
+ "removeHint": "remove",
620
+ "expandHint": "open",
621
+ "moveHint": "reorder"
622
+ },
623
+ "picker": {
624
+ "searchPlaceholder": "Search or describe what should happen",
625
+ "empty": "Nothing matches that.",
626
+ "navigate": "move",
627
+ "select": "pick",
628
+ "close": "close"
629
+ },
630
+ "sentence": {
631
+ "label": "In plain words",
632
+ "placeholderTrigger": "something happens",
633
+ "placeholderAction": "do something"
634
+ },
635
+ "footer": {
636
+ "problems_one": "{{count}} thing to fix",
637
+ "problems_other": "{{count}} things to fix",
638
+ "remaining_one": "{{count}} left to finish",
639
+ "remaining_other": "{{count}} left to finish",
640
+ "ready": "Ready to save",
641
+ "search": "to search"
642
+ },
643
+ "leave": {
644
+ "title": "Leave without saving?",
645
+ "confirm": "Leave"
646
+ },
647
+ "liveCheck": {
648
+ "title": "Right now on the servers",
649
+ "checking": "Checking what's playing now…",
650
+ "empty": "Nothing is playing right now; nothing to check against.",
651
+ "failed": "Could not reach the servers to check.",
652
+ "footnote": "Cooldowns and sessions already handled aren't simulated.",
653
+ "expand": "Show what matched for {{name}}",
654
+ "passed": "Passed",
655
+ "notPassed": "Did not pass",
656
+ "actual": "now {{value}}",
657
+ "unfinished": "Shows what this would do once the automation is complete.",
658
+ "paused": "Paused while this saves",
659
+ "sampleTitle": "What this would do to that run",
660
+ "sampleGone": "That session is no longer on record; nothing to check against.",
661
+ "backToLive": "Back to what's playing now"
414
662
  }
415
- }
663
+ },
664
+ "categories": {
665
+ "session_behavior": "Session Behavior",
666
+ "stream_quality": "Stream Quality",
667
+ "user_attributes": "User Attributes",
668
+ "device_client": "Device & Client",
669
+ "network_location": "Network & Location",
670
+ "scope": "Who and where",
671
+ "media": "Media"
672
+ },
673
+ "createAutomation": "Create automation",
674
+ "customAutomation": "Custom automation",
675
+ "deleteAutomationConfirm": "Are you sure you want to delete this automation? This action cannot be undone.",
676
+ "deleteAutomation_one": "Delete Automation",
677
+ "deleteAutomation_other": "Delete {{count}} Automations",
678
+ "deleteAutomationsConfirm": "Are you sure you want to delete? This action cannot be undone.",
679
+ "describe": {
680
+ "more_one": "+{{count}} more",
681
+ "more_other": "+{{count}} more",
682
+ "noValues": "(none)",
683
+ "includesSameDevice": "includes same device",
684
+ "uniqueIps": "unique IPs",
685
+ "deviceTypesOnly": "{{types}} only",
686
+ "when": "When {{text}}",
687
+ "or": "or {{text}}",
688
+ "nothing": "nothing yet",
689
+ "onlyWhen": "and only if",
690
+ "andAlso": "and also",
691
+ "allOf": "all of:",
692
+ "anyOf": "any of:",
693
+ "joinAll": "and",
694
+ "joinAny": "or",
695
+ "then": "then {{text}}",
696
+ "otherwise": "Otherwise",
697
+ "appliesTo": "Applies to {{name}}",
698
+ "duration": {
699
+ "minutes_one": "{{count}} minute",
700
+ "minutes_other": "{{count}} minutes",
701
+ "days_one": "{{count}} day",
702
+ "days_other": "{{count}} days"
703
+ },
704
+ "triggers": {
705
+ "sessionStarted": "a stream starts",
706
+ "sessionStopped": "a stream stops",
707
+ "sessionTranscodeChanged": "transcoding starts or stops",
708
+ "sessionPaused": "a stream is paused",
709
+ "sessionHeldFor": "a stream has been paused for {{duration}}",
710
+ "sessionHeldForTotal": "a stream has been paused for {{duration}} in total",
711
+ "accountInactiveFor": "an account has been inactive for {{duration}}",
712
+ "accountNewDevice": "an account plays from a new device",
713
+ "accountTrustChanged": "an account's trust score changes",
714
+ "mediaAdded": "media is added",
715
+ "mediaUpgraded": "media is upgraded",
716
+ "serverDown": "a server goes down",
717
+ "serverUp": "a server comes back up",
718
+ "pluginUpdateAvailable": "a plugin update is available",
719
+ "serverUpdateAvailable": "a server update is available",
720
+ "tracearrUpdateAvailable": "a Tracearr update is available"
721
+ },
722
+ "operators": {
723
+ "eq": "is",
724
+ "neq": "is not",
725
+ "gt": "is above",
726
+ "gte": "is at least",
727
+ "lt": "is below",
728
+ "lte": "is at most",
729
+ "in": "is one of",
730
+ "not_in": "is not one of",
731
+ "contains": "contains",
732
+ "not_contains": "does not contain"
733
+ },
734
+ "fields": {
735
+ "concurrent_streams": "the stream count",
736
+ "active_session_distance_km": "the distance between streams",
737
+ "travel_speed_kmh": "the travel speed",
738
+ "unique_ips_in_window": "the number of IP addresses",
739
+ "unique_devices_in_window": "the number of devices",
740
+ "inactive_days": "the time since the last stream",
741
+ "current_pause_minutes": "the current pause",
742
+ "total_pause_minutes": "the total pause time",
743
+ "source_resolution": "the source resolution",
744
+ "output_resolution": "the output resolution",
745
+ "is_transcoding": "the transcoding",
746
+ "is_transcode_downgrade": "the downgrade",
747
+ "source_bitrate_mbps": "the source bitrate",
748
+ "user_id": "the user",
749
+ "trust_score": "the trust score",
750
+ "account_age_days": "the account age",
751
+ "device_type": "the device type",
752
+ "client_name": "the player",
753
+ "platform": "the platform",
754
+ "is_local_network": "the local network",
755
+ "country": "the country",
756
+ "ip_in_range": "the IP address",
757
+ "server_id": "the server",
758
+ "media_type": "the media type",
759
+ "library_item_type": "the item type",
760
+ "library_name": "the library",
761
+ "resolution_after": "the resolution",
762
+ "dynamic_range_after": "the dynamic range",
763
+ "video_codec_after": "the video codec",
764
+ "audio_channels_after": "the audio channels",
765
+ "file_size_after": "the file size"
766
+ },
767
+ "states": {
768
+ "is_local_network": {
769
+ "yes": "the user is on the local network",
770
+ "no": "the user is not on the local network"
771
+ },
772
+ "is_transcode_downgrade": {
773
+ "yes": "the stream is downgraded",
774
+ "no": "the stream is not downgraded"
775
+ },
776
+ "is_transcoding": {
777
+ "video": {
778
+ "yes": "the stream is transcoding video",
779
+ "no": "the stream is not transcoding video"
780
+ },
781
+ "audio": {
782
+ "yes": "the stream is transcoding audio",
783
+ "no": "the stream is not transcoding audio"
784
+ },
785
+ "video_or_audio": {
786
+ "yes": "the stream is transcoding",
787
+ "no": "the stream is not transcoding"
788
+ },
789
+ "neither": {
790
+ "yes": "the stream is not transcoding",
791
+ "no": "the stream is transcoding"
792
+ }
793
+ }
794
+ },
795
+ "actions": {
796
+ "if": "if",
797
+ "flagIt": "Flag it",
798
+ "doNothing": "do nothing",
799
+ "send": "send to {{destinations}}",
800
+ "sendAnywhere": "send a notification",
801
+ "kill_stream": "stop the stream",
802
+ "message_client": "message the player",
803
+ "trustUp": "raise trust by {{amount}}",
804
+ "trustDown": "drop trust by {{amount}}",
805
+ "trustAdjust": "adjust trust by {{amount}}",
806
+ "trustSet": "set trust to {{value}}",
807
+ "trustReset": "reset trust"
808
+ },
809
+ "scope": {
810
+ "server": "one server",
811
+ "account": "one account",
812
+ "person": "one person"
813
+ },
814
+ "sameDeviceInput": "same device: {{input}}",
815
+ "uniqueIpsInput": "unique IPs: {{input}}",
816
+ "unbound": {
817
+ "server": "a chosen server",
818
+ "account": "a chosen account",
819
+ "person": "a chosen person",
820
+ "destinations": "a chosen destination",
821
+ "field_value": "a chosen value",
822
+ "select": "a chosen option",
823
+ "number": "a chosen number",
824
+ "duration": "a chosen length of time",
825
+ "text": "a chosen message",
826
+ "boolean": "a chosen setting",
827
+ "listed": "those chosen"
828
+ }
829
+ },
830
+ "description": "Automations watch your servers and act when their conditions match",
831
+ "detail": {
832
+ "notFound": "Automation not found",
833
+ "title": "Automation",
834
+ "unsaved": "Unsaved changes",
835
+ "runsLine_one": "1 run · last run {{when}}",
836
+ "runsLine_other": "{{count}} runs · last run {{when}}",
837
+ "noRuns": "No runs yet"
838
+ },
839
+ "disable": "Disable",
840
+ "editAutomation": "Edit automation",
841
+ "effects": {
842
+ "title": "What this will do",
843
+ "kill": "Can stop a stream that is playing.",
844
+ "trust": "Changes trust scores.",
845
+ "message": "Puts a message on a player.",
846
+ "violation": "Records a violation against the matched person.",
847
+ "tellsOnly": "Only notifies. Never stops a stream or changes an account.",
848
+ "allServers": "Runs on every server unless one is chosen.",
849
+ "everyServer": "Runs on every server.",
850
+ "oneServer": "Runs on {{server}} only."
851
+ },
852
+ "emptyTitle": "No automations yet",
853
+ "emptyDescription": "Ready-made automations. Pick one and fill in the blanks.",
854
+ "emptySeeAll": "See all {{count}}",
855
+ "emptySeeAllLoading": "See all",
856
+ "enable": "Enable",
857
+ "evaluations": {
858
+ "disclosure": "Matches that did not start a run ({{total}})",
859
+ "reasons": {
860
+ "cooldown_active": "Cooldown was active",
861
+ "edge_replayed": "Same edge already handled",
862
+ "gate_blocked": "An open run already covers this",
863
+ "trigger_filter_failed": "Trigger threshold not reached"
864
+ }
865
+ },
866
+ "export": {
867
+ "title": "Share this automation",
868
+ "description": "A code another Tracearr can paste in.",
869
+ "carries": "The code carries the steps only. Destinations, servers and accounts are not included; the receiving side fills in its own.",
870
+ "copyCode": "Copy the share code",
871
+ "copyJson": "Copy the JSON",
872
+ "authorLabel": "Author",
873
+ "authorPlaceholder": "Name",
874
+ "authorHelper": "Shown on the gallery page and carried in the code. Optional.",
875
+ "save": "Save as ready-made",
876
+ "saved": "{{name}} saved as a ready-made automation.",
877
+ "saveFailed": "Could not save it.",
878
+ "failed": "Couldn't make a code for this one.",
879
+ "saveHelper": "Adds it to this server's list of ready-made automations.",
880
+ "authorInCode": "The code includes the author name.",
881
+ "groupLabel": "Section",
882
+ "groupHelper": "Which part of the gallery it is listed under.",
883
+ "gallery": {
884
+ "trigger": "Put this in the community gallery",
885
+ "body": "The gallery at docs.tracearr.com/templates lists shared automations. Adding one is a pull request to Tracearr/automation-templates with the JSON below. Tracearr never reads the gallery."
886
+ },
887
+ "openRepository": "Open the repository"
888
+ },
889
+ "fields": {
890
+ "concurrent_streams": {
891
+ "label": "Concurrent Streams",
892
+ "description": "Number of active streams from the same user"
893
+ },
894
+ "active_session_distance_km": {
895
+ "label": "Distance Between Sessions",
896
+ "description": "Distance between simultaneous sessions"
897
+ },
898
+ "travel_speed_kmh": {
899
+ "label": "Travel Speed",
900
+ "description": "Calculated travel speed between locations"
901
+ },
902
+ "unique_ips_in_window": {
903
+ "label": "Unique IPs in Window",
904
+ "description": "Number of unique IP addresses in the time window"
905
+ },
906
+ "unique_devices_in_window": {
907
+ "label": "Unique Devices in Window",
908
+ "description": "Number of unique devices in the time window"
909
+ },
910
+ "inactive_days": {
911
+ "label": "Days Inactive",
912
+ "description": "Days since last activity"
913
+ },
914
+ "current_pause_minutes": {
915
+ "label": "Current Pause Duration",
916
+ "description": "How long the session has been continuously paused"
917
+ },
918
+ "total_pause_minutes": {
919
+ "label": "Total Pause Duration",
920
+ "description": "Total accumulated pause time across all pause/resume cycles"
921
+ },
922
+ "source_resolution": {
923
+ "label": "Source Resolution",
924
+ "description": "Original media resolution"
925
+ },
926
+ "output_resolution": {
927
+ "label": "Output Resolution",
928
+ "description": "Transcoded or delivered resolution"
929
+ },
930
+ "is_transcoding": {
931
+ "label": "Is Transcoding",
932
+ "description": "Whether video or audio streams are being transcoded"
933
+ },
934
+ "is_transcode_downgrade": {
935
+ "label": "Transcode Downgrade",
936
+ "description": "Output resolution is lower than source"
937
+ },
938
+ "source_bitrate_mbps": {
939
+ "label": "Source Bitrate",
940
+ "description": "Original media bitrate"
941
+ },
942
+ "user_id": {
943
+ "label": "User",
944
+ "description": "Specific users by account",
945
+ "placeholder": "Select users…"
946
+ },
947
+ "trust_score": {
948
+ "label": "Trust Score",
949
+ "description": "The user's trust score, from 0 to 100"
950
+ },
951
+ "account_age_days": {
952
+ "label": "Account Age",
953
+ "description": "Days since account creation"
954
+ },
955
+ "device_type": {
956
+ "label": "Device Type",
957
+ "description": "Type of device used"
958
+ },
959
+ "client_name": {
960
+ "label": "Client/Player",
961
+ "description": "Media player application",
962
+ "placeholder": "e.g., Plex for iOS"
963
+ },
964
+ "platform": {
965
+ "label": "Platform/OS",
966
+ "description": "Operating system"
967
+ },
968
+ "is_local_network": {
969
+ "label": "Local Network",
970
+ "description": "Streaming from the local network"
971
+ },
972
+ "country": {
973
+ "label": "Country",
974
+ "description": "Geographic country",
975
+ "placeholder": "Select countries…"
976
+ },
977
+ "ip_in_range": {
978
+ "label": "IP Range",
979
+ "description": "IP address in a CIDR range, IPv4 or IPv6",
980
+ "placeholder": "e.g., 192.168.1.0/24 or 2001:db8:abcd:7800::/64"
981
+ },
982
+ "server_id": {
983
+ "label": "Server",
984
+ "description": "Specific media server",
985
+ "placeholder": "Select servers…"
986
+ },
987
+ "media_type": {
988
+ "label": "Media Type",
989
+ "description": "Type of content"
990
+ },
991
+ "library_item_type": {
992
+ "label": "Item Type",
993
+ "description": "What kind of library item it is"
994
+ },
995
+ "library_name": {
996
+ "label": "Library",
997
+ "description": "Name of the library it landed in",
998
+ "placeholder": "Movies"
999
+ },
1000
+ "resolution_after": {
1001
+ "label": "Resolution",
1002
+ "description": "Resolution the item ends up at; unknown never matches, even for \"is not\""
1003
+ },
1004
+ "dynamic_range_after": {
1005
+ "label": "Dynamic Range",
1006
+ "description": "HDR format the item ends up with; unknown never matches, even for \"is not\""
1007
+ },
1008
+ "video_codec_after": {
1009
+ "label": "Video Codec",
1010
+ "description": "Video codec the item ends up with; unknown never matches, even for \"is not\""
1011
+ },
1012
+ "audio_channels_after": {
1013
+ "label": "Audio Channels",
1014
+ "description": "Audio channel count the item ends up with; unknown never matches"
1015
+ },
1016
+ "file_size_after": {
1017
+ "label": "File Size",
1018
+ "description": "Size the item ends up at across every copy; unknown never matches"
1019
+ }
1020
+ },
1021
+ "gallery": {
1022
+ "title": "New automation",
1023
+ "description": "Ready-made automations. Pick one and fill in the blanks.",
1024
+ "searchPlaceholder": "Search",
1025
+ "noMatches": "Nothing matches “{{query}}”.",
1026
+ "noMatchesHint": "Try a word from the outcome: discord, offline, paused.",
1027
+ "group": {
1028
+ "notifications": "Notifications",
1029
+ "server_health": "Server health",
1030
+ "policies": "Limits and rules",
1031
+ "housekeeping": "Housekeeping",
1032
+ "other": "Other ways to start"
1033
+ },
1034
+ "builtin": "Built-in",
1035
+ "kind": {
1036
+ "policy": "A violation",
1037
+ "notification": "An alert"
1038
+ },
1039
+ "paste": {
1040
+ "title": "Paste a share code",
1041
+ "description": "Paste a code and review what it does before adding it."
1042
+ },
1043
+ "scratch": {
1044
+ "title": "Start from scratch",
1045
+ "description": "Build it step by step."
1046
+ },
1047
+ "failed": "Couldn't load the ready-made automations.",
1048
+ "retry": "Try again",
1049
+ "missing": "That ready-made automation is not on this server.",
1050
+ "hint": {
1051
+ "move": "move",
1052
+ "use": "use",
1053
+ "close": "close"
1054
+ },
1055
+ "loading": "Loading…"
1056
+ },
1057
+ "import": {
1058
+ "title": "Paste a share code",
1059
+ "description": "Paste the code. Everything is in the code; Tracearr fetches nothing.",
1060
+ "reviewDescription": "What the code does, and what to fill in.",
1061
+ "placeholder": "tracearr1.…",
1062
+ "formatHint": "A code starts with tracearr1.",
1063
+ "check": "Check it",
1064
+ "checking": "Reading it…",
1065
+ "valid": "Tracearr can read this code.",
1066
+ "madeBy": "Author: {{author}}, as written in the code",
1067
+ "codeShort": "Code {{fingerprint}}",
1068
+ "paused": {
1069
+ "label": "Start paused",
1070
+ "helper": "Turn it on from the list after review."
1071
+ },
1072
+ "submit": "Add it",
1073
+ "adding": "Adding it…",
1074
+ "existing": "Already saved as {{name}}.",
1075
+ "existingUse": "Use it",
1076
+ "collision": {
1077
+ "title": "A different automation named {{name}} already exists.",
1078
+ "add": "Keep both",
1079
+ "replace": "Replace mine"
1080
+ },
1081
+ "raw": "Show the JSON",
1082
+ "errors": {
1083
+ "notACode": "That doesn't look like a Tracearr share code.",
1084
+ "notACodeHint": "A code starts with tracearr1. The JSON works too.",
1085
+ "tooBig": "That's too big to be a Tracearr automation.",
1086
+ "tooBigHint": "Codes are a few thousand characters at most.",
1087
+ "truncated": "This code looks cut off.",
1088
+ "truncatedHint": "Copy the whole code and paste it again; some chat apps split long codes across lines.",
1089
+ "tooNew": "This needs Tracearr {{required}} or newer.",
1090
+ "tooNewHint": "This server runs {{current}}. Update Tracearr, then paste again.",
1091
+ "tooMany": "That's a lot of codes in one minute.",
1092
+ "tooManyHint": "Wait a moment, then check it again.",
1093
+ "rejected": "Tracearr couldn't read this one.",
1094
+ "rejectedHint": "It may come from a different tool or have been edited by hand."
1095
+ },
1096
+ "source": "Shared automations are listed at docs.tracearr.com/templates.",
1097
+ "validCaveat": "Nothing in a code says who wrote it or whether it is safe. The steps are below.",
1098
+ "builtinMatch": "This is {{name}}, one of the automations Tracearr ships."
1099
+ },
1100
+ "kind": {
1101
+ "policy": "Violation",
1102
+ "notification": "Alert"
1103
+ },
1104
+ "kindColumn": "Kind",
1105
+ "name": "Name",
1106
+ "newAutomation": "New automation",
1107
+ "namePlaceholder": "A name for this automation",
1108
+ "nameInvalid": "Give it a name.",
1109
+ "descriptionLabel": "Description",
1110
+ "descriptionPlaceholder": "What this is for",
1111
+ "thisAutomation": "This automation",
1112
+ "cooldownLabel": "At most once every",
1113
+ "cooldownInvalid": "Enter a whole number of minutes, 0 or more, or leave it empty.",
1114
+ "retentionLabel": "Keep runs for",
1115
+ "retentionPlaceholder": "{{days}}",
1116
+ "retentionInvalid": "Enter a whole number of days, at least 1, or leave it empty.",
1117
+ "noAutomationsFound": "No automations found",
1118
+ "operators": {
1119
+ "eq": "equals",
1120
+ "neq": "not equals",
1121
+ "gt": "greater than",
1122
+ "gte": "at least",
1123
+ "lt": "less than",
1124
+ "lte": "at most",
1125
+ "in": "is one of",
1126
+ "not_in": "is not one of",
1127
+ "contains": "contains",
1128
+ "not_contains": "does not contain"
1129
+ },
1130
+ "options": {
1131
+ "4K": "4K (2160p)",
1132
+ "1080p": "1080p",
1133
+ "720p": "720p",
1134
+ "480p": "480p",
1135
+ "SD": "SD",
1136
+ "unknown": "Unknown",
1137
+ "mobile": "Mobile",
1138
+ "tablet": "Tablet",
1139
+ "tv": "TV",
1140
+ "desktop": "Desktop",
1141
+ "browser": "Browser",
1142
+ "ios": "iOS",
1143
+ "android": "Android",
1144
+ "windows": "Windows",
1145
+ "macos": "macOS",
1146
+ "linux": "Linux",
1147
+ "tvos": "tvOS",
1148
+ "androidtv": "Android TV",
1149
+ "roku": "Roku",
1150
+ "webos": "webOS",
1151
+ "tizen": "Tizen",
1152
+ "movie": "Movie",
1153
+ "episode": "TV Episode",
1154
+ "track": "Music",
1155
+ "photo": "Photo",
1156
+ "live": "Live TV",
1157
+ "trailer": "Trailer",
1158
+ "video": "Video",
1159
+ "audio": "Audio",
1160
+ "video_or_audio": "Video or Audio",
1161
+ "neither": "Neither (Direct Play)",
1162
+ "8K": "8K",
1163
+ "1440p": "1440p",
1164
+ "sdr": "SDR",
1165
+ "hdr": "HDR",
1166
+ "hdr10": "HDR10",
1167
+ "hdr10+": "HDR10+",
1168
+ "hlg": "HLG",
1169
+ "dolby vision": "Dolby Vision",
1170
+ "libraryItemType": {
1171
+ "movie": "Movie",
1172
+ "show": "Show",
1173
+ "season": "Season",
1174
+ "episode": "Episode",
1175
+ "artist": "Artist",
1176
+ "album": "Album",
1177
+ "track": "Track",
1178
+ "photo": "Photo"
1179
+ }
1180
+ },
1181
+ "provenance": {
1182
+ "builtin": "Built-in · {{name}} {{version}}",
1183
+ "imported": "Imported from a share code on {{date}} · {{name}} {{version}}",
1184
+ "importedBy": "Imported from a share code by {{author}} on {{date}} · {{name}} {{version}}",
1185
+ "saved": "Saved here from {{name}} on {{date}} · {{version}}",
1186
+ "customized": "Customized from {{name}}",
1187
+ "customizedFromRemoved": "Customized from a ready-made automation that has since been removed"
1188
+ },
1189
+ "recordsOnly": "Records runs only",
1190
+ "scope": {
1191
+ "global": "Global",
1192
+ "person": "Person",
1193
+ "account": "Account",
1194
+ "crossServer": "Cross-server"
1195
+ },
1196
+ "searchPlaceholder": "Search automations…",
1197
+ "sessionTargets": {
1198
+ "triggering": {
1199
+ "label": "Triggering session",
1200
+ "tooltip": "Only the session that triggered this automation"
1201
+ },
1202
+ "oldest": {
1203
+ "label": "Oldest session",
1204
+ "tooltip": "The user's longest-running active session"
1205
+ },
1206
+ "newest": {
1207
+ "label": "Newest session",
1208
+ "tooltip": "The user's most recently started session"
1209
+ },
1210
+ "all_except_one": {
1211
+ "label": "All except one (keep oldest)",
1212
+ "tooltip": "All sessions except the oldest, bringing the user down to one stream"
1213
+ },
1214
+ "all_user": {
1215
+ "label": "All user sessions",
1216
+ "tooltip": "Every active session for this user"
1217
+ }
1218
+ },
1219
+ "configFields": {
1220
+ "cooldown_minutes": {
1221
+ "label": "Cooldown"
1222
+ },
1223
+ "target": {
1224
+ "label": "Target"
1225
+ },
1226
+ "message": {
1227
+ "label": "Message"
1228
+ }
1229
+ },
1230
+ "trustModes": {
1231
+ "adjust": {
1232
+ "label": "Adjust by amount"
1233
+ },
1234
+ "set": {
1235
+ "label": "Set to value"
1236
+ },
1237
+ "reset": {
1238
+ "label": "Reset to default (100)"
1239
+ }
1240
+ },
1241
+ "severity": {
1242
+ "low": "Low",
1243
+ "warning": "Warning",
1244
+ "high": "High"
1245
+ },
1246
+ "template": {
1247
+ "version": "v{{version}}",
1248
+ "updateAvailable": "An update is available",
1249
+ "updatedTitle": "The ready-made automation is now on v{{version}}",
1250
+ "updatedBody": "Review the answers below, then update.",
1251
+ "before": "Now",
1252
+ "after": "After the update",
1253
+ "review": "Review and update",
1254
+ "save": "Save changes",
1255
+ "customize": "Open in the builder",
1256
+ "customizeTitle": "Open this in the builder?",
1257
+ "customizeConfirm": "Opening it in the builder makes this automation independent: every step is editable, and it no longer receives updates from the ready-made one. This cannot be undone.",
1258
+ "customizeConfirmAction": "Open in the builder",
1259
+ "customizeFirst": "This automation follows a ready-made one. Open it in the builder first.",
1260
+ "customizeFailed": "Could not open it in the builder.",
1261
+ "upgradeFailed": "Couldn't update that. Try again.",
1262
+ "gone": "The ready-made automation this was built from is no longer on this server.",
1263
+ "doorsHelper": "The steps come from the ready-made automation and are fixed. Open in the builder makes every step editable and ends the link."
1264
+ },
1265
+ "templates": {
1266
+ "account-inactivity": {
1267
+ "name": "Inactive account",
1268
+ "description": "Raise a violation when an account goes unused for the days you allow.",
1269
+ "keywords": "idle dormant unused stale cleanup inactive account"
1270
+ },
1271
+ "concurrent-streams": {
1272
+ "name": "Too many streams at once",
1273
+ "description": "Raise a violation when an account plays more streams at once than you allow.",
1274
+ "keywords": "limit cap concurrent simultaneous sharing too many streams"
1275
+ },
1276
+ "device-velocity": {
1277
+ "name": "Many IPs in a window",
1278
+ "description": "Raise a violation when an account streams from more IP addresses in a window than you allow.",
1279
+ "keywords": "ip addresses vpn sharing devices window"
1280
+ },
1281
+ "geo-restriction": {
1282
+ "name": "Blocked countries",
1283
+ "description": "Raise a violation when a stream comes from a country you block.",
1284
+ "keywords": "country geo vpn abroad region block travel"
1285
+ },
1286
+ "impossible-travel": {
1287
+ "name": "Impossible travel",
1288
+ "description": "Raise a violation when two sessions sit further apart than anyone could travel between them.",
1289
+ "keywords": "vpn travel speed distance location sharing"
1290
+ },
1291
+ "kill-paused-streams": {
1292
+ "name": "Stop paused streams",
1293
+ "description": "Stop a stream that has sat paused past the minutes you allow.",
1294
+ "keywords": "pause idle afk stop kill terminate reclaim"
1295
+ },
1296
+ "media-added": {
1297
+ "name": "New media added",
1298
+ "description": "Tell a destination when a library item shows up for the first time.",
1299
+ "keywords": "new library movie episode added import notify discord email webhook"
1300
+ },
1301
+ "media-upgraded": {
1302
+ "name": "Media upgraded",
1303
+ "description": "Tell a destination when a library item changes quality.",
1304
+ "keywords": "upgrade quality remux 4k resolution replaced notify discord email webhook"
1305
+ },
1306
+ "new-device": {
1307
+ "name": "New device",
1308
+ "description": "Tell a destination the first time an account streams from a device you have not seen.",
1309
+ "keywords": "device new unknown unrecognized phone login sharing notify discord email webhook"
1310
+ },
1311
+ "no-4k-transcodes": {
1312
+ "name": "No 4K transcodes",
1313
+ "description": "Stop a stream that transcodes 4K source video.",
1314
+ "keywords": "4k transcode quality cpu bandwidth stop"
1315
+ },
1316
+ "paused-too-long": {
1317
+ "name": "Paused too long",
1318
+ "description": "Tell a destination when a stream sits paused past the minutes you allow.",
1319
+ "keywords": "pause idle afk stuck abandoned notify discord email webhook"
1320
+ },
1321
+ "plugin-update": {
1322
+ "name": "Tracearr plugin update",
1323
+ "description": "Tell a destination when a server has a newer Tracearr plugin to install.",
1324
+ "keywords": "plugin update upgrade version release notify discord email webhook"
1325
+ },
1326
+ "server-down": {
1327
+ "name": "Server down",
1328
+ "description": "Tell a destination when a media server stops answering.",
1329
+ "keywords": "offline outage unreachable down notify discord email webhook"
1330
+ },
1331
+ "server-up": {
1332
+ "name": "Server back up",
1333
+ "description": "Tell a destination when a media server answers again.",
1334
+ "keywords": "online recovered restored back up notify discord email webhook"
1335
+ },
1336
+ "server-update": {
1337
+ "name": "Media server update",
1338
+ "description": "Tell a destination when a media server has an update available.",
1339
+ "keywords": "update upgrade version release plex jellyfin emby notify discord"
1340
+ },
1341
+ "simultaneous-locations": {
1342
+ "name": "Two places at once",
1343
+ "description": "Raise a violation when one account streams from two distant places at the same time.",
1344
+ "keywords": "distance location sharing vpn two places at once"
1345
+ },
1346
+ "stream-ended": {
1347
+ "name": "Stream ended",
1348
+ "description": "Tell a destination every time a stream stops.",
1349
+ "keywords": "stop end finish playback notify discord email webhook"
1350
+ },
1351
+ "stream-started": {
1352
+ "name": "Stream started",
1353
+ "description": "Tell a destination every time a stream starts.",
1354
+ "keywords": "play watch begin start viewing notify discord email webhook"
1355
+ },
1356
+ "tracearr-update": {
1357
+ "name": "Tracearr update",
1358
+ "description": "Tell a destination when a new Tracearr release is out.",
1359
+ "keywords": "update upgrade version release tracearr notify discord email webhook"
1360
+ },
1361
+ "transcode-started": {
1362
+ "name": "Stream is transcoding",
1363
+ "description": "Tell a destination when a stream transcodes video or audio.",
1364
+ "keywords": "transcode convert cpu direct play quality notify discord email webhook"
1365
+ },
1366
+ "trust-score-changed": {
1367
+ "name": "Trust score changed",
1368
+ "description": "Tell a destination when an account's trust score changes.",
1369
+ "keywords": "trust score reputation penalty adjusted notify discord email webhook"
1370
+ }
1371
+ },
1372
+ "title": "Automations",
1373
+ "toggleAutomation": "Turn {{name}} on or off",
1374
+ "tryAdjustingFilters": "Try adjusting your filters.",
1375
+ "units": {
1376
+ "km": "km",
1377
+ "kmh": "km/h",
1378
+ "mbps": "Mbps",
1379
+ "days": "days",
1380
+ "minutes": "minutes",
1381
+ "hours": "hours",
1382
+ "gb": "GB",
1383
+ "seconds": "seconds"
1384
+ },
1385
+ "updateAutomation": "Save changes",
1386
+ "catalog": {
1387
+ "groups": {
1388
+ "sessions": "Sessions",
1389
+ "accounts": "Accounts",
1390
+ "library": "Library",
1391
+ "servers": "Servers",
1392
+ "updates": "Updates",
1393
+ "notify": "Notify",
1394
+ "policy": "Take action",
1395
+ "control": "If… then"
1396
+ },
1397
+ "suggested": "Suggested",
1398
+ "triggers": {
1399
+ "sessionStarted": {
1400
+ "description": "The moment play is pressed.",
1401
+ "synonyms": "play, watch, begin, start, viewing"
1402
+ },
1403
+ "sessionStopped": {
1404
+ "description": "Playback ends, however it ended.",
1405
+ "synonyms": "end, finish, quit, close"
1406
+ },
1407
+ "sessionTranscodeChanged": {
1408
+ "description": "The server switches a stream between direct play and transcoding.",
1409
+ "synonyms": "transcode, convert, direct play, cpu"
1410
+ },
1411
+ "sessionPaused": {
1412
+ "description": "The moment a stream is paused.",
1413
+ "synonyms": "pause, hold, idle"
1414
+ },
1415
+ "sessionHeldFor": {
1416
+ "label": "A stream sits paused",
1417
+ "description": "A stream has been paused longer than the set number of minutes.",
1418
+ "synonyms": "pause, idle, abandoned, stuck, afk"
1419
+ },
1420
+ "accountInactiveFor": {
1421
+ "label": "An account goes quiet",
1422
+ "description": "An account has watched nothing for the set number of days.",
1423
+ "synonyms": "inactive, dormant, unused, stale, cleanup"
1424
+ },
1425
+ "accountNewDevice": {
1426
+ "description": "An account streams from a device for the first time.",
1427
+ "synonyms": "device, new, unknown, unrecognized, phone, login, sharing"
1428
+ },
1429
+ "accountTrustChanged": {
1430
+ "description": "An account's trust score changes, whether an automation or an owner moved it.",
1431
+ "synonyms": "trust, score, reputation, penalty, adjusted"
1432
+ },
1433
+ "mediaAdded": {
1434
+ "description": "A library item shows up on a server for the first time.",
1435
+ "synonyms": "new, added, library, movie, episode, import"
1436
+ },
1437
+ "mediaUpgraded": {
1438
+ "description": "A library item that was already there changes quality.",
1439
+ "synonyms": "upgrade, quality, replaced, remux, 4k, resolution"
1440
+ },
1441
+ "serverDown": {
1442
+ "description": "A media server stops answering.",
1443
+ "synonyms": "unreachable, offline, outage, down"
1444
+ },
1445
+ "serverUp": {
1446
+ "description": "A media server answers again.",
1447
+ "synonyms": "online, recovered, restored, back"
1448
+ },
1449
+ "pluginUpdateAvailable": {
1450
+ "description": "The Tracearr plugin on a server has a newer release.",
1451
+ "synonyms": "plugin, upgrade, version, release"
1452
+ },
1453
+ "serverUpdateAvailable": {
1454
+ "description": "A media server has a newer release.",
1455
+ "synonyms": "upgrade, version, release, patch"
1456
+ },
1457
+ "tracearrUpdateAvailable": {
1458
+ "description": "Tracearr itself has a newer release.",
1459
+ "synonyms": "upgrade, version, release, self"
1460
+ }
1461
+ },
1462
+ "actions": {
1463
+ "send": {
1464
+ "synonyms": "notify, alert, discord, email, webhook, push"
1465
+ },
1466
+ "trust": {
1467
+ "synonyms": "score, reputation, penalise, reward"
1468
+ },
1469
+ "kill_stream": {
1470
+ "synonyms": "stop, terminate, cut, end playback"
1471
+ },
1472
+ "message_client": {
1473
+ "synonyms": "warn, tell, notice, on screen"
1474
+ },
1475
+ "if": {
1476
+ "label": "If… otherwise…",
1477
+ "description": "Run some steps only when an extra check passes.",
1478
+ "synonyms": "if, else, otherwise, branch, split, condition"
1479
+ }
1480
+ }
1481
+ },
1482
+ "filters": {
1483
+ "source": "Where it came from",
1484
+ "allSources": "Anywhere",
1485
+ "sources": {
1486
+ "builtin": "Built-in",
1487
+ "import": "Imported",
1488
+ "local": "Saved here",
1489
+ "own": "Built in the builder"
1490
+ },
1491
+ "trigger": "What starts it",
1492
+ "allTriggers": "All triggers"
1493
+ },
1494
+ "openGallery": "Open the gallery"
416
1495
  },
417
1496
  "terminateStream": {
418
1497
  "title": "Terminate Stream",
@@ -477,32 +1556,36 @@
477
1556
  "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."
478
1557
  },
479
1558
  "destinations": {
480
- "title": "Notification destinations",
481
- "description": "Where notifications go. Add as many as you like; each one picks the system events it receives, and rules can send to any of them.",
482
1559
  "add": "Add destination",
1560
+ "builtinNote": "Built in",
1561
+ "clearSecret": "Clear",
1562
+ "delete": "Delete",
1563
+ "deleteConfirm": "Delete {{name}}? Automations that send to it will be blocked until they are updated.",
1564
+ "description": "Where notifications go. Add as many as you like, and automations can send to any of them.",
483
1565
  "empty": "No destinations yet.",
1566
+ "fields": {
1567
+ "webhookUrl": "Webhook URL",
1568
+ "url": "URL",
1569
+ "serverUrl": "Server URL",
1570
+ "apiUrl": "API URL",
1571
+ "topic": "Topic",
1572
+ "authToken": "Auth token",
1573
+ "userKey": "User key",
1574
+ "apiToken": "API token"
1575
+ },
1576
+ "hints": {
1577
+ "authTokenOptional": "Optional for public topics"
1578
+ },
484
1579
  "ownerOnly": "Only the owner can manage notification destinations.",
485
- "eventsLabel": "Events",
486
- "builtinNote": "Built in",
487
1580
  "pushNote": "Delivered to paired mobile devices; each device filters in its own notification settings.",
488
- "webToastNote": "Toasts in this browser.",
489
- "usedBy": "Used by {{count}} rule",
490
- "usedBy_other": "Used by {{count}} rules",
1581
+ "receiveViolations": "Receive violations",
1582
+ "receiveViolationsHint": "Send every violation to this destination",
491
1583
  "reencrypt": "Re-enter this destination's secret",
492
1584
  "secretSet": "Set (leave blank to keep)",
493
- "clearSecret": "Clear",
494
1585
  "test": "Test",
495
1586
  "testHint": "Save first to test",
496
- "delete": "Delete",
497
- "deleteConfirm": "Delete {{name}}? Rules that send to it will be blocked until they are updated.",
498
- "events": {
499
- "violation_detected": "Violation detected",
500
- "stream_started": "Stream started",
501
- "stream_stopped": "Stream stopped",
502
- "server_down": "Server down",
503
- "server_up": "Server up",
504
- "plugin_update_available": "Plugin update available"
505
- },
1587
+ "testNeedsForm": "Fill in the required fields to test",
1588
+ "title": "Notification destinations",
506
1589
  "types": {
507
1590
  "discord": "Discord",
508
1591
  "jsonWebhook": "Webhook (JSON)",
@@ -513,20 +1596,9 @@
513
1596
  "push": "Mobile push",
514
1597
  "webToast": "Browser toasts"
515
1598
  },
516
- "fields": {
517
- "webhookUrl": "Webhook URL",
518
- "url": "URL",
519
- "serverUrl": "Server URL",
520
- "apiUrl": "API URL",
521
- "topic": "Topic",
522
- "authToken": "Auth token",
523
- "userKey": "User key",
524
- "apiToken": "API token"
525
- },
526
- "hints": {
527
- "authTokenOptional": "Optional for public topics"
528
- },
529
- "testNeedsForm": "Fill in the required fields to test"
1599
+ "usedBy": "Used by {{count}} automation",
1600
+ "usedBy_other": "Used by {{count}} automations",
1601
+ "webToastNote": "Toasts in this browser."
530
1602
  },
531
1603
  "jobs": {
532
1604
  "runNow": "Run Now",
@@ -575,7 +1647,8 @@
575
1647
  "circles": "Circles",
576
1648
  "streams": "streams",
577
1649
  "locations": "locations",
578
- "allActivity": "All activity"
1650
+ "allActivity": "All activity",
1651
+ "basemapMissing": "Basemap not installed"
579
1652
  },
580
1653
  "devices": {
581
1654
  "title": "Device Compatibility",
@@ -665,7 +1738,8 @@
665
1738
  "clearQueryCache": "Clear Query Cache",
666
1739
  "clearMobileDevices": "Clear Mobile Devices",
667
1740
  "clearViolations": "Clear Violations",
668
- "clearRules": "Clear Rules",
1741
+ "clearAutomations": "Delete all automations and runs",
1742
+ "clearAutomationsConfirm": "Delete every automation and all of their runs?",
669
1743
  "clearTerminationLogs": "Clear Termination Logs",
670
1744
  "clearLibraryCache": "Clear Library Cache",
671
1745
  "clearSessions": "Clear Sessions",