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

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 (250) hide show
  1. package/README.md +1 -1
  2. package/dist/config.d.ts +1160 -64
  3. package/dist/config.d.ts.map +1 -1
  4. package/dist/config.mobile.d.ts +1160 -64
  5. package/dist/config.mobile.d.ts.map +1 -1
  6. package/dist/locales/af-ZA/common.json +281 -280
  7. package/dist/locales/af-ZA/notifications.json +238 -218
  8. package/dist/locales/af-ZA/pages.json +1726 -1646
  9. package/dist/locales/af-ZA/settings.json +888 -440
  10. package/dist/locales/ar-SA/common.json +281 -280
  11. package/dist/locales/ar-SA/notifications.json +242 -222
  12. package/dist/locales/ar-SA/pages.json +1684 -1604
  13. package/dist/locales/ar-SA/settings.json +889 -441
  14. package/dist/locales/ca-ES/common.json +281 -280
  15. package/dist/locales/ca-ES/notifications.json +238 -218
  16. package/dist/locales/ca-ES/pages.json +1682 -1602
  17. package/dist/locales/ca-ES/settings.json +888 -440
  18. package/dist/locales/cs-CZ/common.json +281 -280
  19. package/dist/locales/cs-CZ/notifications.json +242 -222
  20. package/dist/locales/cs-CZ/pages.json +1688 -1608
  21. package/dist/locales/cs-CZ/settings.json +889 -441
  22. package/dist/locales/da-DK/common.json +281 -280
  23. package/dist/locales/da-DK/notifications.json +242 -222
  24. package/dist/locales/da-DK/pages.json +1684 -1604
  25. package/dist/locales/da-DK/settings.json +889 -441
  26. package/dist/locales/de-DE/common.json +281 -280
  27. package/dist/locales/de-DE/notifications.json +242 -222
  28. package/dist/locales/de-DE/pages.json +1690 -1610
  29. package/dist/locales/de-DE/settings.json +889 -441
  30. package/dist/locales/el-GR/common.json +281 -280
  31. package/dist/locales/el-GR/notifications.json +242 -222
  32. package/dist/locales/el-GR/pages.json +1684 -1604
  33. package/dist/locales/el-GR/settings.json +889 -441
  34. package/dist/locales/en/notifications.json +26 -6
  35. package/dist/locales/en/pages.json +92 -12
  36. package/dist/locales/en/settings.json +474 -26
  37. package/dist/locales/en-US/common.json +281 -280
  38. package/dist/locales/en-US/notifications.json +242 -222
  39. package/dist/locales/en-US/pages.json +1774 -1694
  40. package/dist/locales/en-US/settings.json +898 -450
  41. package/dist/locales/es-ES/common.json +281 -280
  42. package/dist/locales/es-ES/notifications.json +242 -222
  43. package/dist/locales/es-ES/pages.json +1689 -1609
  44. package/dist/locales/es-ES/settings.json +889 -441
  45. package/dist/locales/fi-FI/common.json +281 -280
  46. package/dist/locales/fi-FI/notifications.json +242 -222
  47. package/dist/locales/fi-FI/pages.json +1684 -1604
  48. package/dist/locales/fi-FI/settings.json +889 -441
  49. package/dist/locales/fr-FR/notifications.json +242 -222
  50. package/dist/locales/fr-FR/pages.json +1698 -1618
  51. package/dist/locales/fr-FR/settings.json +898 -450
  52. package/dist/locales/he-IL/common.json +281 -280
  53. package/dist/locales/he-IL/notifications.json +238 -218
  54. package/dist/locales/he-IL/pages.json +1726 -1646
  55. package/dist/locales/he-IL/settings.json +888 -440
  56. package/dist/locales/hu-HU/common.json +281 -280
  57. package/dist/locales/hu-HU/notifications.json +238 -218
  58. package/dist/locales/hu-HU/pages.json +1726 -1646
  59. package/dist/locales/hu-HU/settings.json +888 -440
  60. package/dist/locales/it-IT/common.json +281 -280
  61. package/dist/locales/it-IT/notifications.json +242 -222
  62. package/dist/locales/it-IT/pages.json +1684 -1604
  63. package/dist/locales/it-IT/settings.json +889 -441
  64. package/dist/locales/ja-JP/common.json +281 -280
  65. package/dist/locales/ja-JP/notifications.json +242 -222
  66. package/dist/locales/ja-JP/pages.json +1684 -1604
  67. package/dist/locales/ja-JP/settings.json +889 -441
  68. package/dist/locales/ko-KR/common.json +281 -281
  69. package/dist/locales/ko-KR/notifications.json +242 -222
  70. package/dist/locales/ko-KR/pages.json +1746 -1666
  71. package/dist/locales/ko-KR/settings.json +898 -450
  72. package/dist/locales/nl-NL/common.json +281 -280
  73. package/dist/locales/nl-NL/notifications.json +242 -222
  74. package/dist/locales/nl-NL/pages.json +1699 -1619
  75. package/dist/locales/nl-NL/settings.json +891 -443
  76. package/dist/locales/no-NO/common.json +281 -280
  77. package/dist/locales/no-NO/notifications.json +242 -222
  78. package/dist/locales/no-NO/pages.json +1684 -1604
  79. package/dist/locales/no-NO/settings.json +889 -441
  80. package/dist/locales/pl-PL/common.json +281 -280
  81. package/dist/locales/pl-PL/notifications.json +242 -222
  82. package/dist/locales/pl-PL/pages.json +1684 -1604
  83. package/dist/locales/pl-PL/settings.json +889 -441
  84. package/dist/locales/pt-BR/common.json +281 -280
  85. package/dist/locales/pt-BR/notifications.json +242 -222
  86. package/dist/locales/pt-BR/pages.json +1725 -1645
  87. package/dist/locales/pt-BR/settings.json +889 -441
  88. package/dist/locales/pt-PT/common.json +281 -280
  89. package/dist/locales/pt-PT/notifications.json +242 -222
  90. package/dist/locales/pt-PT/pages.json +1684 -1604
  91. package/dist/locales/pt-PT/settings.json +889 -441
  92. package/dist/locales/ro-RO/common.json +281 -280
  93. package/dist/locales/ro-RO/notifications.json +242 -222
  94. package/dist/locales/ro-RO/pages.json +1684 -1604
  95. package/dist/locales/ro-RO/settings.json +889 -441
  96. package/dist/locales/ru-RU/common.json +281 -280
  97. package/dist/locales/ru-RU/notifications.json +242 -222
  98. package/dist/locales/ru-RU/pages.json +1684 -1604
  99. package/dist/locales/ru-RU/settings.json +889 -441
  100. package/dist/locales/sr-SP/common.json +281 -280
  101. package/dist/locales/sr-SP/notifications.json +238 -218
  102. package/dist/locales/sr-SP/pages.json +1726 -1646
  103. package/dist/locales/sr-SP/settings.json +888 -440
  104. package/dist/locales/sv-SE/common.json +281 -280
  105. package/dist/locales/sv-SE/notifications.json +242 -222
  106. package/dist/locales/sv-SE/pages.json +1684 -1604
  107. package/dist/locales/sv-SE/settings.json +889 -441
  108. package/dist/locales/tr-TR/common.json +281 -280
  109. package/dist/locales/tr-TR/notifications.json +238 -218
  110. package/dist/locales/tr-TR/pages.json +1726 -1646
  111. package/dist/locales/tr-TR/settings.json +888 -440
  112. package/dist/locales/uk-UA/common.json +281 -280
  113. package/dist/locales/uk-UA/notifications.json +242 -222
  114. package/dist/locales/uk-UA/pages.json +1684 -1604
  115. package/dist/locales/uk-UA/settings.json +889 -441
  116. package/dist/locales/vi-VN/common.json +281 -280
  117. package/dist/locales/vi-VN/notifications.json +238 -218
  118. package/dist/locales/vi-VN/pages.json +1726 -1646
  119. package/dist/locales/vi-VN/settings.json +888 -440
  120. package/dist/locales/zh-CN/common.json +281 -280
  121. package/dist/locales/zh-CN/notifications.json +242 -222
  122. package/dist/locales/zh-CN/pages.json +1695 -1615
  123. package/dist/locales/zh-CN/settings.json +898 -450
  124. package/dist/locales/zh-TW/common.json +281 -280
  125. package/dist/locales/zh-TW/notifications.json +242 -222
  126. package/dist/locales/zh-TW/pages.json +1804 -1724
  127. package/dist/locales/zh-TW/settings.json +888 -440
  128. package/package.json +1 -1
  129. package/src/locales/af-ZA/common.json +281 -280
  130. package/src/locales/af-ZA/notifications.json +238 -218
  131. package/src/locales/af-ZA/pages.json +1726 -1646
  132. package/src/locales/af-ZA/settings.json +888 -440
  133. package/src/locales/ar-SA/common.json +281 -280
  134. package/src/locales/ar-SA/notifications.json +242 -222
  135. package/src/locales/ar-SA/pages.json +1684 -1604
  136. package/src/locales/ar-SA/settings.json +889 -441
  137. package/src/locales/ca-ES/common.json +281 -280
  138. package/src/locales/ca-ES/notifications.json +238 -218
  139. package/src/locales/ca-ES/pages.json +1682 -1602
  140. package/src/locales/ca-ES/settings.json +888 -440
  141. package/src/locales/cs-CZ/common.json +281 -280
  142. package/src/locales/cs-CZ/notifications.json +242 -222
  143. package/src/locales/cs-CZ/pages.json +1688 -1608
  144. package/src/locales/cs-CZ/settings.json +889 -441
  145. package/src/locales/da-DK/common.json +281 -280
  146. package/src/locales/da-DK/notifications.json +242 -222
  147. package/src/locales/da-DK/pages.json +1684 -1604
  148. package/src/locales/da-DK/settings.json +889 -441
  149. package/src/locales/de-DE/common.json +281 -280
  150. package/src/locales/de-DE/notifications.json +242 -222
  151. package/src/locales/de-DE/pages.json +1690 -1610
  152. package/src/locales/de-DE/settings.json +889 -441
  153. package/src/locales/el-GR/common.json +281 -280
  154. package/src/locales/el-GR/notifications.json +242 -222
  155. package/src/locales/el-GR/pages.json +1684 -1604
  156. package/src/locales/el-GR/settings.json +889 -441
  157. package/src/locales/en/notifications.json +26 -6
  158. package/src/locales/en/pages.json +92 -12
  159. package/src/locales/en/settings.json +474 -26
  160. package/src/locales/en-US/common.json +281 -280
  161. package/src/locales/en-US/notifications.json +242 -222
  162. package/src/locales/en-US/pages.json +1774 -1694
  163. package/src/locales/en-US/settings.json +898 -450
  164. package/src/locales/es-ES/common.json +281 -280
  165. package/src/locales/es-ES/notifications.json +242 -222
  166. package/src/locales/es-ES/pages.json +1689 -1609
  167. package/src/locales/es-ES/settings.json +889 -441
  168. package/src/locales/fi-FI/common.json +281 -280
  169. package/src/locales/fi-FI/notifications.json +242 -222
  170. package/src/locales/fi-FI/pages.json +1684 -1604
  171. package/src/locales/fi-FI/settings.json +889 -441
  172. package/src/locales/fr-FR/notifications.json +242 -222
  173. package/src/locales/fr-FR/pages.json +1698 -1618
  174. package/src/locales/fr-FR/settings.json +898 -450
  175. package/src/locales/he-IL/common.json +281 -280
  176. package/src/locales/he-IL/notifications.json +238 -218
  177. package/src/locales/he-IL/pages.json +1726 -1646
  178. package/src/locales/he-IL/settings.json +888 -440
  179. package/src/locales/hu-HU/common.json +281 -280
  180. package/src/locales/hu-HU/notifications.json +238 -218
  181. package/src/locales/hu-HU/pages.json +1726 -1646
  182. package/src/locales/hu-HU/settings.json +888 -440
  183. package/src/locales/it-IT/common.json +281 -280
  184. package/src/locales/it-IT/notifications.json +242 -222
  185. package/src/locales/it-IT/pages.json +1684 -1604
  186. package/src/locales/it-IT/settings.json +889 -441
  187. package/src/locales/ja-JP/common.json +281 -280
  188. package/src/locales/ja-JP/notifications.json +242 -222
  189. package/src/locales/ja-JP/pages.json +1684 -1604
  190. package/src/locales/ja-JP/settings.json +889 -441
  191. package/src/locales/ko-KR/common.json +281 -281
  192. package/src/locales/ko-KR/notifications.json +242 -222
  193. package/src/locales/ko-KR/pages.json +1746 -1666
  194. package/src/locales/ko-KR/settings.json +898 -450
  195. package/src/locales/nl-NL/common.json +281 -280
  196. package/src/locales/nl-NL/notifications.json +242 -222
  197. package/src/locales/nl-NL/pages.json +1699 -1619
  198. package/src/locales/nl-NL/settings.json +891 -443
  199. package/src/locales/no-NO/common.json +281 -280
  200. package/src/locales/no-NO/notifications.json +242 -222
  201. package/src/locales/no-NO/pages.json +1684 -1604
  202. package/src/locales/no-NO/settings.json +889 -441
  203. package/src/locales/pl-PL/common.json +281 -280
  204. package/src/locales/pl-PL/notifications.json +242 -222
  205. package/src/locales/pl-PL/pages.json +1684 -1604
  206. package/src/locales/pl-PL/settings.json +889 -441
  207. package/src/locales/pt-BR/common.json +281 -280
  208. package/src/locales/pt-BR/notifications.json +242 -222
  209. package/src/locales/pt-BR/pages.json +1725 -1645
  210. package/src/locales/pt-BR/settings.json +889 -441
  211. package/src/locales/pt-PT/common.json +281 -280
  212. package/src/locales/pt-PT/notifications.json +242 -222
  213. package/src/locales/pt-PT/pages.json +1684 -1604
  214. package/src/locales/pt-PT/settings.json +889 -441
  215. package/src/locales/ro-RO/common.json +281 -280
  216. package/src/locales/ro-RO/notifications.json +242 -222
  217. package/src/locales/ro-RO/pages.json +1684 -1604
  218. package/src/locales/ro-RO/settings.json +889 -441
  219. package/src/locales/ru-RU/common.json +281 -280
  220. package/src/locales/ru-RU/notifications.json +242 -222
  221. package/src/locales/ru-RU/pages.json +1684 -1604
  222. package/src/locales/ru-RU/settings.json +889 -441
  223. package/src/locales/sr-SP/common.json +281 -280
  224. package/src/locales/sr-SP/notifications.json +238 -218
  225. package/src/locales/sr-SP/pages.json +1726 -1646
  226. package/src/locales/sr-SP/settings.json +888 -440
  227. package/src/locales/sv-SE/common.json +281 -280
  228. package/src/locales/sv-SE/notifications.json +242 -222
  229. package/src/locales/sv-SE/pages.json +1684 -1604
  230. package/src/locales/sv-SE/settings.json +889 -441
  231. package/src/locales/tr-TR/common.json +281 -280
  232. package/src/locales/tr-TR/notifications.json +238 -218
  233. package/src/locales/tr-TR/pages.json +1726 -1646
  234. package/src/locales/tr-TR/settings.json +888 -440
  235. package/src/locales/uk-UA/common.json +281 -280
  236. package/src/locales/uk-UA/notifications.json +242 -222
  237. package/src/locales/uk-UA/pages.json +1684 -1604
  238. package/src/locales/uk-UA/settings.json +889 -441
  239. package/src/locales/vi-VN/common.json +281 -280
  240. package/src/locales/vi-VN/notifications.json +238 -218
  241. package/src/locales/vi-VN/pages.json +1726 -1646
  242. package/src/locales/vi-VN/settings.json +888 -440
  243. package/src/locales/zh-CN/common.json +281 -280
  244. package/src/locales/zh-CN/notifications.json +242 -222
  245. package/src/locales/zh-CN/pages.json +1695 -1615
  246. package/src/locales/zh-CN/settings.json +898 -450
  247. package/src/locales/zh-TW/common.json +281 -280
  248. package/src/locales/zh-TW/notifications.json +242 -222
  249. package/src/locales/zh-TW/pages.json +1804 -1724
  250. package/src/locales/zh-TW/settings.json +888 -440
@@ -1,16 +1,52 @@
1
1
  {
2
2
  "title": "Settings",
3
- "tabs": {
4
- "general": "General",
5
- "servers": "Servers",
6
- "notifications": "Notifications",
7
- "mobile": "Mobile App",
8
- "tailscale": "Tailscale",
9
- "import": "Import",
10
- "advanced": "Advanced",
11
- "jobs": "Jobs",
12
- "accessControl": "Access Control",
13
- "backup": "Backup"
3
+ "nav": {
4
+ "label": "Settings sections",
5
+ "selectLabel": "Settings section",
6
+ "itemLabel": "{{group}} / {{section}}",
7
+ "groups": {
8
+ "general": "General",
9
+ "servers": "Servers",
10
+ "notifications": "Notifications",
11
+ "access": "Access",
12
+ "data": "Data & API"
13
+ },
14
+ "sections": {
15
+ "appearance": "Appearance",
16
+ "locale": "Locale & units",
17
+ "behavior": "Behavior",
18
+ "connections": "Connections",
19
+ "posters": "Poster source",
20
+ "plexAccounts": "Plex accounts",
21
+ "destinations": "Destinations",
22
+ "newsletters": "Newsletters",
23
+ "email": "Email",
24
+ "guest": "Guest access",
25
+ "mobile": "Mobile devices",
26
+ "remote": "Remote access",
27
+ "import": "Import",
28
+ "backup": "Backup",
29
+ "jobs": "Jobs",
30
+ "api": "API"
31
+ },
32
+ "descriptions": {
33
+ "appearance": "Theme and accent color, stored in this browser.",
34
+ "locale": "Language, clock and units used across the dashboard.",
35
+ "behavior": "How often Tracearr polls your servers and what it caches.",
36
+ "connections": "Media servers Tracearr reads sessions and libraries from.",
37
+ "posters": "Which server's artwork wins when a title exists on more than one.",
38
+ "plexAccounts": "Plex.tv accounts Tracearr uses to discover and authorize servers.",
39
+ "destinations": "Where notifications and digests are delivered.",
40
+ "guest": "What signed-out and guest visitors can see.",
41
+ "mobile": "Devices paired to the Tracearr mobile app.",
42
+ "remote": "How people outside your network reach this instance.",
43
+ "import": "Bring watch history in from Tautulli, Jellystat or Playback Reporting.",
44
+ "backup": "Snapshots of the database and configuration.",
45
+ "jobs": "Maintenance tasks you can run on demand.",
46
+ "api": "The public API key, its rate limit and what counts as watched.",
47
+ "newsletters": "Recently added titles, emailed to a server's members on a schedule.",
48
+ "email": "Branding for every email Tracearr sends, and the addresses that opted out."
49
+ }
14
50
  },
15
51
  "general": {
16
52
  "title": "General Settings",
@@ -22,14 +58,12 @@
22
58
  "localAccount": "Local Account",
23
59
  "plexAccount": "Plex Account",
24
60
  "language": "Language",
25
- "languageDescription": "Choose your preferred display language.",
61
+ "languageDescription": "Stored in this browser, so everyone signed in picks their own.",
26
62
  "helpTranslate": "Help translate Tracearr",
27
63
  "timeFormat": "Time Format",
28
- "timeFormatDescription": "Choose how times are displayed.",
64
+ "timeFormatDescription": "12-hour or 24-hour clock, used for session times in history and on media pages.",
29
65
  "timeFormat12h": "12-hour (1:30 PM)",
30
66
  "timeFormat24h": "24-hour (13:30)",
31
- "appearance": "Appearance",
32
- "appearanceDesc": "Customize the look and feel of Tracearr",
33
67
  "theme": "Theme",
34
68
  "accentColor": "Accent Color",
35
69
  "default": "(default)",
@@ -39,7 +73,7 @@
39
73
  "themeSystem": "System",
40
74
  "application": "Application",
41
75
  "applicationDesc": "Configure basic application settings",
42
- "unitSystemDesc": "Choose how distances and speeds are displayed.",
76
+ "unitSystemDesc": "Distances and speeds in automation rules read in miles or kilometers.",
43
77
  "sessionSync": "Session Sync",
44
78
  "sessionSyncDesc": "Enable session tracking for your media servers.",
45
79
  "syncInterval": "Sync Interval",
@@ -147,11 +181,14 @@
147
181
  "plexAccount": "Plex Account",
148
182
  "serverUrlHelpJellyfin": "The URL where your Jellyfin server is accessible",
149
183
  "serverUrlHelpEmby": "The URL where your Emby server is accessible",
184
+ "publicUrl": "Public address",
185
+ "publicUrlHint": "The address members use to open this server. Newsletter links use it.",
150
186
  "apiKeyHelpJellyfin": "Find this in Jellyfin Dashboard → API Keys",
151
187
  "apiKeyHelpEmby": "Find this in Emby Server → API Keys",
152
188
  "plexServerPlaceholder": "My Plex Server",
153
189
  "plexServerUrlPlaceholder": "http://192.168.1.100:32400",
154
190
  "updateHint": "Or click Update below to save only the name change.",
191
+ "reorder": "Reorder server",
155
192
  "added": "Added {{date}}",
156
193
  "realtimeActive": "Real-time updates active",
157
194
  "pollingMode": "Polling",
@@ -184,7 +221,8 @@
184
221
  "label": "Preferred Poster Source",
185
222
  "description": "When a title is on more than one server, use this server's poster. If it doesn't have one, we'll fall back to the most recently added copy.",
186
223
  "automatic": "Automatic (most recent)",
187
- "emptyHint": "Add a server to choose a preferred poster source."
224
+ "emptyHint": "Add a server to choose a preferred poster source.",
225
+ "ownerOnly": "Only the owner can choose the preferred poster source."
188
226
  },
189
227
  "version": {
190
228
  "installed": "Version {{version}}",
@@ -195,18 +233,16 @@
195
233
  "mobile": {
196
234
  "title": "Mobile App",
197
235
  "pairDevice": "Pair Device",
198
- "connectedDevices": "Connected Devices",
199
236
  "generateToken": "Generate Pair Token",
200
237
  "scanQrCode": "Scan QR Code",
201
238
  "tokenExpires": "Token expires in {{time}}",
202
- "noDevices": "No devices connected",
239
+ "lastSeen": "Last seen {{when}}",
240
+ "connectedOn": "Connected {{date}}",
241
+ "noDevices": "No devices paired yet",
242
+ "noDevicesDesc": "Install the app, then pair it with a one-time QR code.",
203
243
  "revokeAll": "Revoke All Sessions",
204
- "getTheApp": "Get the App",
205
- "getTheAppDesc": "Download the Tracearr mobile app for iOS or Android",
206
244
  "getOnGooglePlay": "Get it on Google Play",
207
245
  "downloadOnAppStore": "Download on the App Store",
208
- "pairYourDevice": "Pair Your Device",
209
- "pairYourDeviceDesc": "Scan the QR code with the Tracearr app to connect this server",
210
246
  "externalUrlRequired": "An external URL must be configured in General Settings for mobile pairing to work.",
211
247
  "mobileAccessDisabled": "Mobile Access Disabled",
212
248
  "mobileAccessDisabledDesc": "Enable mobile access to allow the Tracearr mobile app to connect to your server.",
@@ -216,7 +252,6 @@
216
252
  "pendingTokens": "{{count}} pending pair tokens",
217
253
  "addDevice": "Add Device",
218
254
  "disableMobileAccess": "Disable Mobile Access",
219
- "connectedDevicesDesc": "{{count}} devices paired to your server",
220
255
  "revokeAllSessions": "Revoke All",
221
256
  "pairNewDevice": "Pair New Device",
222
257
  "pairNewDeviceDesc": "Scan the QR code with the Tracearr mobile app, or enter the token manually.",
@@ -362,7 +397,6 @@
362
397
  "testingConnection": "Testing connection...",
363
398
  "pleaseSelectJsonFile": "Please select a JSON file",
364
399
  "uploadingBackup": "Uploading backup file...",
365
- "importHistoryDesc": "Import historical watch data from external sources",
366
400
  "plex": "Plex (Tautulli)",
367
401
  "jellyfinEmby": "Jellyfin/Emby (Jellystat)",
368
402
  "step1": "1",
@@ -438,12 +472,13 @@
438
472
  "lowDiskSpace": "Low disk space — backups and restores require at least twice the database size in free space.",
439
473
  "backupHistory": "Backup History",
440
474
  "noBackups": "No backups yet. Create your first backup above.",
441
- "filename": "Filename",
442
475
  "size": "Size",
443
476
  "date": "Date",
444
477
  "type": "Type",
445
478
  "version": "Version",
446
479
  "actions": "Actions",
480
+ "rowActions": "Backup actions",
481
+ "download": "Download",
447
482
  "typeManual": "Manual",
448
483
  "typeScheduled": "Scheduled",
449
484
  "typeUploaded": "Uploaded",
@@ -457,6 +492,8 @@
457
492
  "scheduleWeekly": "Weekly",
458
493
  "scheduleMonthly": "Monthly",
459
494
  "scheduleTime": "Time ({{timezone}})",
495
+ "scheduleHour": "Hour",
496
+ "scheduleMinute": "Minute",
460
497
  "scheduleDayOfWeek": "Day of Week",
461
498
  "scheduleDayOfMonth": "Day of Month",
462
499
  "scheduleDayOfMonthHint": "On months with fewer days, the backup runs on the last day.",
@@ -500,5 +537,416 @@
500
537
  "scheduleSaved": "Backup schedule saved",
501
538
  "scheduleError": "Failed to save backup schedule"
502
539
  }
540
+ },
541
+ "newsletters": {
542
+ "ownerOnly": "Only the owner can manage newsletters.",
543
+ "new": "New newsletter",
544
+ "empty": "No newsletters yet",
545
+ "emptyDescription": "A newsletter emails the members of a server what was added recently.",
546
+ "noDestinationTitle": "Newsletters need an email destination",
547
+ "noDestinationDescription": "An email destination is the SMTP server newsletters send through. Each newsletter picks its own recipients, so this one only needs the server and sender details.",
548
+ "noDestinationHint": "No email destination yet.",
549
+ "addEmailDestination": "Add email destination",
550
+ "enabled": "Enabled",
551
+ "rowActions": "Newsletter actions",
552
+ "duplicate": "Duplicate",
553
+ "sendNow": "Send now",
554
+ "deleteTitle": "Delete this newsletter?",
555
+ "deleteDescription": "{{name}} and its send history will be deleted. Suppressed addresses stay suppressed.",
556
+ "schedule": {
557
+ "daily": "Daily at {{time}}",
558
+ "weekly": "Weekly on {{day}} at {{time}}",
559
+ "monthly": "Monthly on day {{day}} at {{time}}",
560
+ "cron": "Cron {{expression}}",
561
+ "inZone": "{{summary}}, {{timezone}}"
562
+ },
563
+ "nextRun": "Next run {{when}}",
564
+ "noNextRun": "Not scheduled",
565
+ "neverSent": "Never sent",
566
+ "lastSend": "{{outcome}} to {{count}}",
567
+ "outcome": {
568
+ "rendering": "Rendering",
569
+ "sending": "Sending",
570
+ "sent": "Sent",
571
+ "partial": "Partly sent",
572
+ "failed": "Failed",
573
+ "skipped_empty": "Nothing new"
574
+ },
575
+ "counts": {
576
+ "movies_one": "{{count}} movie",
577
+ "movies_other": "{{count}} movies",
578
+ "shows_one": "{{count}} show",
579
+ "shows_other": "{{count}} shows",
580
+ "albums_one": "{{count}} album",
581
+ "albums_other": "{{count}} albums",
582
+ "watched_one": "{{count}} most watched",
583
+ "watched_other": "{{count}} most watched"
584
+ },
585
+ "copyOf": "Copy of {{name}}",
586
+ "richText": {
587
+ "bold": "Bold",
588
+ "italic": "Italic",
589
+ "link": "Link",
590
+ "bulletList": "Bulleted list",
591
+ "linkHref": "Link address",
592
+ "linkApply": "Apply",
593
+ "counter": "{{used}} / {{max}}"
594
+ },
595
+ "editor": {
596
+ "newTitle": "New newsletter",
597
+ "headerSummary": "{{schedule}} · {{recipients}}",
598
+ "notFound": "This newsletter no longer exists.",
599
+ "basics": "Basics",
600
+ "tabs": {
601
+ "edit": "Edit",
602
+ "history": "History"
603
+ },
604
+ "historyNeedsSave": "History appears once the newsletter is saved.",
605
+ "name": "Name",
606
+ "nameHelp": "Only you see this. It names the newsletter in this list and in the send history.",
607
+ "turnOnNow": "Turn it on now",
608
+ "enabledHelp": "Off means the schedule does not run; Send now still works.",
609
+ "schedule": "Schedule",
610
+ "scheduleKind": "Repeats",
611
+ "kinds": {
612
+ "daily": "Daily",
613
+ "weekly": "Weekly",
614
+ "monthly": "Monthly",
615
+ "cron": "Cron expression"
616
+ },
617
+ "dayOfWeek": "Day",
618
+ "dayOfMonth": "Day of month",
619
+ "dayOfMonthHelp": "Days 1 to 28, so the run never lands on a month that does not have the day.",
620
+ "time": "Time",
621
+ "timezone": "Timezone",
622
+ "timezoneHelp": "Sets the send time and the dates printed in the subject and the email.",
623
+ "cron": "Expression",
624
+ "cronHint": "Five fields: minute, hour, day of month, month, day of week.",
625
+ "dstNote": "A time inside the spring-forward hour runs when the clock reaches the next valid minute.",
626
+ "nextRun": "Next run {{when}} ({{timezone}})",
627
+ "nextRunPending": "Next run is set when you save.",
628
+ "content": "Content",
629
+ "windowKind": "Covers",
630
+ "windows": {
631
+ "since_last_send": "Everything since the last email",
632
+ "fixed": "A fixed number of days"
633
+ },
634
+ "windowHelp": {
635
+ "since_last_send": "Picks up where the last email stopped, so nothing is listed twice. A test send does not move that mark; Send now does. A skipped week does not, so nothing is lost.",
636
+ "fixed": "Always looks back the same number of days from the moment it runs, so a title added twice in that span is listed twice."
637
+ },
638
+ "windowSentence": {
639
+ "fallback": "The first email looks back",
640
+ "fallbackLabel": "The first email looks back {{count}} days.",
641
+ "fixed": "Look back",
642
+ "fixedAfter": "each time",
643
+ "fixedLabel": "Look back {{count}} days each time."
644
+ },
645
+ "windowMax": "Never more than 31 days, whatever this says.",
646
+ "days": "days",
647
+ "servers": "Servers",
648
+ "allServers": "All servers",
649
+ "searchServers": "Search servers",
650
+ "noServers": "No server matches",
651
+ "serversSelected": "{{count}} servers",
652
+ "variantsNote": "This picks both the titles and the people: only members with an account on these servers receive it. Someone on several of them gets one email covering all of theirs.",
653
+ "serversHelp": "Only members with an account on this server receive it.",
654
+ "libraries": "Libraries",
655
+ "allLibraries": "All libraries",
656
+ "searchLibraries": "Search libraries",
657
+ "noLibraries": "No library matches",
658
+ "librariesSelected": "{{count}} libraries",
659
+ "librariesHelp": "Narrows what the email lists. It does not change who receives it.",
660
+ "clear": "Clear",
661
+ "unknownLibrary": "Unknown library",
662
+ "removeLibrary": "Remove library {{id}}",
663
+ "sections": {
664
+ "movies": "Movies",
665
+ "shows": "Shows",
666
+ "music": "Music",
667
+ "mostWatched": "Most watched",
668
+ "legend": "Sections",
669
+ "description": "The email lists what was added in the window, up to these limits. Anything over the limit, and anything trimmed to keep the email under the 102 KB at which Gmail clips it, becomes a \"+N more\" line.",
670
+ "upTo": "up to",
671
+ "the": "the",
672
+ "units": {
673
+ "movies": "movies",
674
+ "shows": "shows",
675
+ "seasonsEach": "seasons each",
676
+ "albums": "albums",
677
+ "mostPlayed": "most played"
678
+ },
679
+ "labels": {
680
+ "movies": "Movies, up to {{count}} movies",
681
+ "shows": "Shows, up to {{count}} shows",
682
+ "seasons": "Shows, {{count}} seasons each",
683
+ "music": "Music, up to {{count}} albums",
684
+ "mostWatched": "Most watched, the {{count}} most played"
685
+ },
686
+ "musicHelp": "Counted in albums, shared across artists in the order they were added.",
687
+ "mostWatchedHelp": "What members played most in the window, new or not, with a play count. Every other section lists what was added."
688
+ },
689
+ "message": "Message",
690
+ "senderName": "From name",
691
+ "senderNameHelp": "The name in the From line and at the end of the email. Leave it empty to use {{name}}.",
692
+ "senderNameRequiredMulti": "This newsletter covers {{count}} servers, so there is no one server name to sign it with. Pick a name.",
693
+ "previewVariant_one": "{{count}} person with an account on {{servers}}",
694
+ "previewVariant_other": "{{count}} people with an account on {{servers}}",
695
+ "variantHeading": "{{count}} with an account on {{servers}}",
696
+ "subject": "Subject",
697
+ "subjectHelp": "These get replaced when the email is built:",
698
+ "placeholders": {
699
+ "server_name": "the From name above",
700
+ "start_date": "the first day of the window",
701
+ "end_date": "the day the email goes out",
702
+ "item_count": "movies, episodes and albums added, counting episodes rather than shows"
703
+ },
704
+ "intro": "Intro",
705
+ "introPlaceholder": "A few words at the top, above the first section",
706
+ "outro": "Outro",
707
+ "outroPlaceholder": "A few words at the bottom, above the unsubscribe footer",
708
+ "save": "Save",
709
+ "saving": "Saving",
710
+ "unsaved": "Unsaved changes",
711
+ "fixFirst": "Fix the highlighted fields before saving.",
712
+ "sendNeedsSave": "Save your changes before sending.",
713
+ "recipients": {
714
+ "title": "Recipients",
715
+ "members": "Everyone on the chosen servers",
716
+ "membersHelp": "Everyone with an active account on {{servers}}. Their address comes from their contact email, then their Tracearr email, then the address their media server account carries.",
717
+ "ownerNote": "If you have an account on one of these servers you are on the list below; use Exclude to take yourself off.",
718
+ "membersOff": "Members are off; only the extra addresses receive this newsletter.",
719
+ "membersOffSuppressed": "Members are off; only the extra addresses receive this newsletter. {{count}} of them are on the suppression list and will not be mailed.",
720
+ "extraAddresses": "Extra addresses",
721
+ "extraAddressesHelp": "Addresses with no account here. They get the version covering every server, and they can unsubscribe like anyone else.",
722
+ "addAddress": "Add address",
723
+ "addressLabel": "Address {{n}}",
724
+ "nameLabel": "Name {{n}}",
725
+ "namePlaceholder": "Name (optional)",
726
+ "removeAddress": "Remove address {{n}}",
727
+ "badAddress": "That is not an email address.",
728
+ "saveFirst": "Save to see recipients.",
729
+ "saveFirstHelp": "Preview renders the email for the current servers and shows how many people each version reaches.",
730
+ "loadFailed": "Could not load the recipients.",
731
+ "willReceive": "Will receive ({{count}})",
732
+ "groupsNote": "People on different servers get different emails. Each list below only sees what was added to the servers named.",
733
+ "staleScope": "This list still reflects the saved servers. Save to see who the new selection reaches.",
734
+ "noAddress": "No email address ({{count}})",
735
+ "noAddressHelp": "Nothing was found for these people: no contact email, no Tracearr email, and nothing from their media server account. Jellyfin and Emby never send one. Add a contact email here and it saves straight away.",
736
+ "contactEmailFor": "Contact email for {{name}}",
737
+ "saveEmail": "Save the contact email for {{name}}",
738
+ "openUserPage": "Open {{name}}'s page",
739
+ "unknownMember": "Unknown member",
740
+ "account": "{{username}} on {{server}}",
741
+ "extraAddress": "Extra address",
742
+ "suppressed": "Suppressed",
743
+ "suppressedHeading": "Suppressed ({{count}})",
744
+ "suppressedHelp": "These addresses unsubscribed or were suppressed by hand under Email; the send skips them.",
745
+ "exclude": "Exclude {{name}} from this newsletter",
746
+ "excludeAction": "Exclude",
747
+ "include": "Include {{name}} again",
748
+ "includeAction": "Include",
749
+ "excludedCount": "Excluded ({{count}})",
750
+ "excludedHelp": "These people stay off this newsletter until you include them again. Other newsletters are unaffected.",
751
+ "excludedAfterSave": "Excluded after save",
752
+ "includedAfterSave": "Included after save",
753
+ "reasons": {
754
+ "banned": "Banned",
755
+ "pending": "Pending"
756
+ },
757
+ "emptyTitle": "Nobody will receive this newsletter",
758
+ "emptyDescription": "Turn on Members above, or add an extra address, to reach someone."
759
+ },
760
+ "delivery": {
761
+ "title": "Delivery",
762
+ "destination": "Email destination",
763
+ "destinationHelp": "The SMTP account this sends through. It does not decide who receives it.",
764
+ "pickDestination": "Pick a destination",
765
+ "noDestination": "None",
766
+ "imageMode": "Poster images",
767
+ "modes": {
768
+ "hosted": "Hosted",
769
+ "inline": "Attached",
770
+ "none": "No posters"
771
+ },
772
+ "modeHelp": {
773
+ "hosted": "Loaded from this Tracearr over the external URL; the URL must be reachable from the public internet, and every recipient's mail provider sees it.",
774
+ "inline": "Attached to the email. Every client shows them, and the email is larger, so the size limit trims more titles.",
775
+ "none": "Cards render without posters."
776
+ },
777
+ "modePreviewHint": "Preview renders the current choice; set its Images toggle to Blocked to see the email without remote images.",
778
+ "hostedNeedsUrl": "No external URL is set. Hosted posters need one before this can be saved: set it under Access, Remote access, or pick Attached.",
779
+ "skipWhenEmpty": "Skip when nothing was added",
780
+ "skipWhenEmptyHelp": "Nothing new means no email. On a newsletter covering several servers this is per group: people whose servers added nothing hear nothing, the rest still get theirs. A test send always renders."
781
+ },
782
+ "links": {
783
+ "tracearr": "Link titles to Tracearr",
784
+ "tracearrNote": "The Tracearr UI is admin-only today, so members will hit the login page; the media server link stays either way."
785
+ },
786
+ "readiness": {
787
+ "title": "Before you send",
788
+ "intro": "These do not block saving. They decide whether a send reaches anyone.",
789
+ "destination": "Sending through \"{{name}}\".",
790
+ "destinationFail": "No email destination is set, so this newsletter cannot send.",
791
+ "destinationUnknown": "Checking the email destination.",
792
+ "destinationError": "Could not load the email destinations. Reload the page.",
793
+ "fixDestination": "Choose a destination",
794
+ "fixRecipients": "Go to recipients",
795
+ "fixExternalUrl": "Set the external URL",
796
+ "staleScope": "The recipient rows reflect the saved servers. Save to check the new selection.",
797
+ "externalUrl": "External URL is set; hosted posters, the browser view and Tracearr links work.",
798
+ "externalUrlFail": "No external URL: hosted posters, the browser view and Tracearr links are off.",
799
+ "externalUrlNotHttps": "External URL is set over http: members get an unsubscribe link, but one-click unsubscribe needs https.",
800
+ "noPublicUrl": "Item links for {{server}} are left out because it has no public address.",
801
+ "privatePublicUrl": "Item links for {{server}} are left out because its public address is private.",
802
+ "emptyVariant": "Members on only {{servers}} get nothing from the next send: {{servers}} added no titles in the window.",
803
+ "variantsLoadFailed": "Variant counts could not be loaded.",
804
+ "serverSettingsLink": "Open server settings",
805
+ "fromDomain": "The from address matches the SMTP account's domain.",
806
+ "fromDomainFail": "The from address and the SMTP username sit on different domains; some providers refuse that.",
807
+ "fromDomainUnknown": "Pick a destination to check its from address.",
808
+ "recipients_one": "{{count}} recipient resolves to an address.",
809
+ "recipients_other": "{{count}} recipients resolve to an address.",
810
+ "recipientsFail": "Nobody resolves to an address yet.",
811
+ "recipientsUnknown": "Recipients are unknown until the newsletter is saved.",
812
+ "recipientsLoadFailed": "Recipients could not be loaded.",
813
+ "dns": "Deliverability depends on SPF, DKIM and DMARC records for the sending domain.",
814
+ "dnsLink": "Read how to set them"
815
+ },
816
+ "actions": {
817
+ "preview": "Preview",
818
+ "test": "Send test",
819
+ "send": "Send now",
820
+ "more": "More send options",
821
+ "testHint": "Sends one copy to one address and leaves the window where it is.",
822
+ "sendHint": "Mails everyone now and moves the window forward, the same as a scheduled run."
823
+ },
824
+ "preview": {
825
+ "variants": "Who is looking",
826
+ "variantTab": "{{count}} on {{servers}}",
827
+ "title": "Preview",
828
+ "draft": "Preview of unsaved changes",
829
+ "subjectLabel": "Subject",
830
+ "window": "Added between {{start}} and {{end}}",
831
+ "windowSince": "Added since the last email, {{start}} to {{end}}",
832
+ "countsListed": {
833
+ "movies": "{{listed}} of {{found}} movies",
834
+ "shows": "{{listed}} of {{found}} shows",
835
+ "albums": "{{listed}} of {{found}} albums"
836
+ },
837
+ "recipients": "{{resolved}} people get this newsletter across all versions. {{missing}} have no address and {{suppressed}} unsubscribed.",
838
+ "width": "Width",
839
+ "widths": {
840
+ "desktop": "600 px",
841
+ "phone": "375 px"
842
+ },
843
+ "images": "Images",
844
+ "imagesOn": "Shown",
845
+ "imagesBlocked": "Blocked",
846
+ "imagesBlockedNote": "Many clients block remote images until the reader allows them.",
847
+ "linksNote": "The unsubscribe and view-in-browser links are filled in per recipient when the email is sent, so they do nothing here."
848
+ },
849
+ "test": {
850
+ "title": "Send a test",
851
+ "description": "Renders the current window and sends it to one address, ignoring the suppression list.",
852
+ "variant": "Send the version for",
853
+ "address": "Send to",
854
+ "send": "Send test"
855
+ },
856
+ "send": {
857
+ "title": "Send {{name}} now?",
858
+ "previewing": "Working out who gets what...",
859
+ "summary": "Send to {{count}} recipients: {{counts}} added between {{start}} and {{end}}",
860
+ "nobody": "Nobody resolves to an address ({{missing}} members have none), so there is nothing to send.",
861
+ "trimmed_one": "{{count}} item is held back as a +N more line so the email stays under the 102 KB at which Gmail clips it.",
862
+ "trimmed_other": "{{count}} items are held back as +N more lines so the email stays under the 102 KB at which Gmail clips it.",
863
+ "confirm": "Send",
864
+ "sending": "Sending"
865
+ }
866
+ },
867
+ "history": {
868
+ "empty": "No sends yet",
869
+ "emptyDescription": "Every scheduled, manual and test send lands here with who it reached.",
870
+ "loadFailed": "Could not load the send history.",
871
+ "trigger": {
872
+ "schedule": "Scheduled",
873
+ "manual": "Manual",
874
+ "test": "Test"
875
+ },
876
+ "window": "{{start}} to {{end}}",
877
+ "recipients": "{{count}} recipients",
878
+ "recipientsEmpty": "Recipients appear once the send starts.",
879
+ "finished": "Finished {{when}}",
880
+ "open": "Open the send from {{when}}",
881
+ "page": "Page {{page}} of {{pages}}",
882
+ "sendTitle": "Send",
883
+ "status": {
884
+ "queued": "Queued",
885
+ "sent": "Sent",
886
+ "failed": "Failed",
887
+ "suppressed": "Suppressed",
888
+ "unknown": "Unknown"
889
+ },
890
+ "attempts": "{{count}} attempts",
891
+ "unknownHelp": "The server stopped answering after the message went out; it is never retried on its own.",
892
+ "openSnapshot": "Open snapshot",
893
+ "variant": "Members on {{servers}}",
894
+ "variantEmpty": "Nothing new for these servers; nobody in this group was mailed.",
895
+ "openVariantSnapshot": "Open the snapshot for {{servers}}",
896
+ "snapshotTitle": "Sent copy",
897
+ "pruned": "The snapshot was pruned after 90 days; nothing can be viewed or resent.",
898
+ "retryFailed": "Retry failed"
899
+ }
900
+ },
901
+ "email": {
902
+ "ownerOnly": "Only the owner can manage email branding and the suppression list.",
903
+ "branding": {
904
+ "title": "Branding",
905
+ "description": "Applied to every email Tracearr sends: alerts and newsletters alike.",
906
+ "logo": {
907
+ "label": "Logo",
908
+ "tracearr": "Tracearr",
909
+ "none": "No logo",
910
+ "url": "An image at a URL"
911
+ },
912
+ "logoUrl": "Logo URL",
913
+ "accent": "Accent color",
914
+ "accentPicker": "Pick the accent color",
915
+ "footerText": "Footer text",
916
+ "footerTextHelp": "One line under every email, such as who runs the server.",
917
+ "postalAddress": "Postal address",
918
+ "postalAddressHelp": "Optional; some jurisdictions expect one on bulk mail.",
919
+ "mailto": "Offer unsubscribe by email too",
920
+ "mailtoHelp": "Adds a mailto form to the List-Unsubscribe header; it points at the destination's reply-to, which someone has to read.",
921
+ "save": "Save branding",
922
+ "saving": "Saving"
923
+ },
924
+ "suppressions": {
925
+ "title": "Suppressed addresses",
926
+ "globalNote": "Suppression is global to the address: it opts the address out of every newsletter on this install.",
927
+ "empty": "No suppressed addresses",
928
+ "emptyDescription": "Unsubscribes land here on their own; add an address by hand to keep it off every list.",
929
+ "add": "Add address",
930
+ "addTitle": "Suppress an address",
931
+ "addDescription": "The address will not receive any newsletter until it is removed from this list.",
932
+ "address": "Email address",
933
+ "addConfirm": "Suppress",
934
+ "reason": {
935
+ "unsubscribed": "Unsubscribed",
936
+ "manual": "Added by hand"
937
+ },
938
+ "openSource": "Open the newsletter this came from",
939
+ "remove": "Remove {{address}} from the list",
940
+ "removeTitle": "Remove this address?",
941
+ "removeDescription": "{{address}} will receive newsletters again from the next send."
942
+ }
943
+ },
944
+ "shared": {
945
+ "timezone": {
946
+ "placeholder": "Pick a timezone",
947
+ "search": "Search timezones",
948
+ "empty": "No timezone matches",
949
+ "other": "Other"
950
+ }
503
951
  }
504
952
  }