@tracearr/translations 2.2.0-beta.3 → 2.2.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/config.d.ts +2 -0
- package/dist/config.d.ts.map +1 -1
- package/dist/config.mobile.d.ts +2 -0
- package/dist/config.mobile.d.ts.map +1 -1
- package/dist/locales/af-ZA/common.json +313 -313
- package/dist/locales/af-ZA/mobile.json +138 -138
- package/dist/locales/af-ZA/nav.json +30 -30
- package/dist/locales/af-ZA/notifications.json +228 -228
- package/dist/locales/af-ZA/pages.json +1776 -1775
- package/dist/locales/af-ZA/settings.json +483 -483
- package/dist/locales/ar-SA/common.json +289 -289
- package/dist/locales/ar-SA/mobile.json +96 -96
- package/dist/locales/ar-SA/nav.json +8 -8
- package/dist/locales/ar-SA/notifications.json +227 -227
- package/dist/locales/ar-SA/pages.json +1779 -1778
- package/dist/locales/ar-SA/settings.json +452 -452
- package/dist/locales/ca-ES/common.json +286 -286
- package/dist/locales/ca-ES/mobile.json +125 -125
- package/dist/locales/ca-ES/nav.json +8 -8
- package/dist/locales/ca-ES/notifications.json +228 -228
- package/dist/locales/ca-ES/pages.json +1775 -1774
- package/dist/locales/ca-ES/settings.json +471 -471
- package/dist/locales/cs-CZ/common.json +284 -284
- package/dist/locales/cs-CZ/mobile.json +99 -99
- package/dist/locales/cs-CZ/nav.json +8 -8
- package/dist/locales/cs-CZ/notifications.json +226 -226
- package/dist/locales/cs-CZ/pages.json +1766 -1765
- package/dist/locales/cs-CZ/settings.json +451 -451
- package/dist/locales/da-DK/common.json +284 -284
- package/dist/locales/da-DK/mobile.json +99 -99
- package/dist/locales/da-DK/nav.json +9 -9
- package/dist/locales/da-DK/notifications.json +226 -226
- package/dist/locales/da-DK/pages.json +1775 -1774
- package/dist/locales/da-DK/settings.json +451 -451
- package/dist/locales/de-DE/common.json +285 -285
- package/dist/locales/de-DE/mobile.json +102 -102
- package/dist/locales/de-DE/nav.json +10 -10
- package/dist/locales/de-DE/notifications.json +226 -226
- package/dist/locales/de-DE/pages.json +1775 -1774
- package/dist/locales/de-DE/settings.json +451 -451
- package/dist/locales/el-GR/common.json +283 -283
- package/dist/locales/el-GR/mobile.json +97 -97
- package/dist/locales/el-GR/nav.json +8 -8
- package/dist/locales/el-GR/notifications.json +226 -226
- package/dist/locales/el-GR/pages.json +1781 -1780
- package/dist/locales/el-GR/settings.json +451 -451
- package/dist/locales/en/pages.json +2 -1
- package/dist/locales/en-US/common.json +280 -280
- package/dist/locales/en-US/nav.json +20 -20
- package/dist/locales/en-US/notifications.json +222 -222
- package/dist/locales/en-US/pages.json +1553 -1552
- package/dist/locales/en-US/settings.json +432 -432
- package/dist/locales/es-ES/common.json +283 -283
- package/dist/locales/es-ES/mobile.json +96 -96
- package/dist/locales/es-ES/nav.json +8 -8
- package/dist/locales/es-ES/notifications.json +226 -226
- package/dist/locales/es-ES/pages.json +1774 -1773
- package/dist/locales/es-ES/settings.json +451 -451
- package/dist/locales/fi-FI/common.json +284 -284
- package/dist/locales/fi-FI/mobile.json +97 -97
- package/dist/locales/fi-FI/nav.json +9 -9
- package/dist/locales/fi-FI/notifications.json +226 -226
- package/dist/locales/fi-FI/pages.json +1776 -1775
- package/dist/locales/fi-FI/settings.json +451 -451
- package/dist/locales/fr-FR/common.json +284 -284
- package/dist/locales/fr-FR/mobile.json +10 -10
- package/dist/locales/fr-FR/nav.json +11 -11
- package/dist/locales/fr-FR/notifications.json +226 -226
- package/dist/locales/fr-FR/pages.json +1762 -1761
- package/dist/locales/fr-FR/settings.json +452 -452
- package/dist/locales/he-IL/common.json +313 -313
- package/dist/locales/he-IL/mobile.json +138 -138
- package/dist/locales/he-IL/nav.json +30 -30
- package/dist/locales/he-IL/notifications.json +228 -228
- package/dist/locales/he-IL/pages.json +1796 -1795
- package/dist/locales/he-IL/settings.json +483 -483
- package/dist/locales/hu-HU/common.json +298 -298
- package/dist/locales/hu-HU/mobile.json +138 -138
- package/dist/locales/hu-HU/nav.json +30 -30
- package/dist/locales/hu-HU/notifications.json +228 -228
- package/dist/locales/hu-HU/pages.json +1792 -1791
- package/dist/locales/hu-HU/settings.json +482 -482
- package/dist/locales/it-IT/common.json +284 -284
- package/dist/locales/it-IT/mobile.json +101 -101
- package/dist/locales/it-IT/nav.json +10 -10
- package/dist/locales/it-IT/notifications.json +227 -227
- package/dist/locales/it-IT/pages.json +1779 -1778
- package/dist/locales/it-IT/settings.json +451 -451
- package/dist/locales/ja-JP/common.json +283 -283
- package/dist/locales/ja-JP/mobile.json +98 -98
- package/dist/locales/ja-JP/nav.json +9 -9
- package/dist/locales/ja-JP/notifications.json +226 -226
- package/dist/locales/ja-JP/pages.json +1779 -1778
- package/dist/locales/ja-JP/settings.json +451 -451
- package/dist/locales/ko-KR/common.json +313 -313
- package/dist/locales/ko-KR/mobile.json +138 -138
- package/dist/locales/ko-KR/nav.json +30 -30
- package/dist/locales/ko-KR/notifications.json +228 -228
- package/dist/locales/ko-KR/pages.json +1796 -1795
- package/dist/locales/ko-KR/settings.json +483 -483
- package/dist/locales/nl-NL/common.json +283 -283
- package/dist/locales/nl-NL/mobile.json +91 -91
- package/dist/locales/nl-NL/nav.json +10 -10
- package/dist/locales/nl-NL/notifications.json +226 -226
- package/dist/locales/nl-NL/pages.json +1768 -1767
- package/dist/locales/nl-NL/settings.json +444 -444
- package/dist/locales/no-NO/common.json +283 -283
- package/dist/locales/no-NO/mobile.json +96 -96
- package/dist/locales/no-NO/nav.json +8 -8
- package/dist/locales/no-NO/notifications.json +226 -226
- package/dist/locales/no-NO/pages.json +1778 -1777
- package/dist/locales/no-NO/settings.json +451 -451
- package/dist/locales/pl-PL/common.json +283 -283
- package/dist/locales/pl-PL/mobile.json +94 -94
- package/dist/locales/pl-PL/nav.json +8 -8
- package/dist/locales/pl-PL/notifications.json +226 -226
- package/dist/locales/pl-PL/pages.json +1778 -1777
- package/dist/locales/pl-PL/settings.json +451 -451
- package/dist/locales/pt-BR/common.json +286 -286
- package/dist/locales/pt-BR/mobile.json +138 -138
- package/dist/locales/pt-BR/nav.json +17 -17
- package/dist/locales/pt-BR/notifications.json +226 -226
- package/dist/locales/pt-BR/pages.json +1781 -1780
- package/dist/locales/pt-BR/settings.json +454 -454
- package/dist/locales/pt-PT/common.json +289 -289
- package/dist/locales/pt-PT/mobile.json +97 -97
- package/dist/locales/pt-PT/nav.json +9 -9
- package/dist/locales/pt-PT/notifications.json +226 -226
- package/dist/locales/pt-PT/pages.json +1780 -1779
- package/dist/locales/pt-PT/settings.json +452 -452
- package/dist/locales/ro-RO/common.json +283 -283
- package/dist/locales/ro-RO/mobile.json +98 -98
- package/dist/locales/ro-RO/nav.json +9 -9
- package/dist/locales/ro-RO/notifications.json +226 -226
- package/dist/locales/ro-RO/pages.json +1779 -1778
- package/dist/locales/ro-RO/settings.json +451 -451
- package/dist/locales/ru-RU/common.json +288 -288
- package/dist/locales/ru-RU/mobile.json +97 -97
- package/dist/locales/ru-RU/nav.json +8 -8
- package/dist/locales/ru-RU/notifications.json +226 -226
- package/dist/locales/ru-RU/pages.json +1781 -1780
- package/dist/locales/ru-RU/settings.json +451 -451
- package/dist/locales/sr-SP/common.json +313 -313
- package/dist/locales/sr-SP/mobile.json +138 -138
- package/dist/locales/sr-SP/nav.json +30 -30
- package/dist/locales/sr-SP/notifications.json +228 -228
- package/dist/locales/sr-SP/pages.json +1796 -1795
- package/dist/locales/sr-SP/settings.json +483 -483
- package/dist/locales/sv-SE/common.json +284 -284
- package/dist/locales/sv-SE/mobile.json +100 -100
- package/dist/locales/sv-SE/nav.json +9 -9
- package/dist/locales/sv-SE/notifications.json +226 -226
- package/dist/locales/sv-SE/pages.json +1777 -1776
- package/dist/locales/sv-SE/settings.json +451 -451
- package/dist/locales/tr-TR/common.json +313 -313
- package/dist/locales/tr-TR/mobile.json +138 -138
- package/dist/locales/tr-TR/nav.json +30 -30
- package/dist/locales/tr-TR/notifications.json +228 -228
- package/dist/locales/tr-TR/pages.json +1792 -1791
- package/dist/locales/tr-TR/settings.json +483 -483
- package/dist/locales/uk-UA/common.json +283 -283
- package/dist/locales/uk-UA/mobile.json +98 -98
- package/dist/locales/uk-UA/nav.json +8 -8
- package/dist/locales/uk-UA/notifications.json +226 -226
- package/dist/locales/uk-UA/pages.json +1779 -1778
- package/dist/locales/uk-UA/settings.json +451 -451
- package/dist/locales/vi-VN/common.json +313 -313
- package/dist/locales/vi-VN/mobile.json +138 -138
- package/dist/locales/vi-VN/nav.json +30 -30
- package/dist/locales/vi-VN/notifications.json +228 -228
- package/dist/locales/vi-VN/pages.json +1796 -1795
- package/dist/locales/vi-VN/settings.json +483 -483
- package/dist/locales/zh-CN/common.json +283 -283
- package/dist/locales/zh-CN/mobile.json +95 -95
- package/dist/locales/zh-CN/nav.json +8 -8
- package/dist/locales/zh-CN/notifications.json +226 -226
- package/dist/locales/zh-CN/pages.json +1778 -1777
- package/dist/locales/zh-CN/settings.json +451 -451
- package/dist/locales/zh-TW/common.json +293 -293
- package/dist/locales/zh-TW/mobile.json +137 -137
- package/dist/locales/zh-TW/nav.json +30 -30
- package/dist/locales/zh-TW/notifications.json +228 -228
- package/dist/locales/zh-TW/pages.json +1798 -1797
- package/dist/locales/zh-TW/settings.json +482 -482
- package/package.json +3 -2
- package/src/locales/af-ZA/common.json +313 -313
- package/src/locales/af-ZA/mobile.json +138 -138
- package/src/locales/af-ZA/nav.json +30 -30
- package/src/locales/af-ZA/notifications.json +228 -228
- package/src/locales/af-ZA/pages.json +1776 -1775
- package/src/locales/af-ZA/settings.json +483 -483
- package/src/locales/ar-SA/common.json +289 -289
- package/src/locales/ar-SA/mobile.json +96 -96
- package/src/locales/ar-SA/nav.json +8 -8
- package/src/locales/ar-SA/notifications.json +227 -227
- package/src/locales/ar-SA/pages.json +1779 -1778
- package/src/locales/ar-SA/settings.json +452 -452
- package/src/locales/ca-ES/common.json +286 -286
- package/src/locales/ca-ES/mobile.json +125 -125
- package/src/locales/ca-ES/nav.json +8 -8
- package/src/locales/ca-ES/notifications.json +228 -228
- package/src/locales/ca-ES/pages.json +1775 -1774
- package/src/locales/ca-ES/settings.json +471 -471
- package/src/locales/cs-CZ/common.json +284 -284
- package/src/locales/cs-CZ/mobile.json +99 -99
- package/src/locales/cs-CZ/nav.json +8 -8
- package/src/locales/cs-CZ/notifications.json +226 -226
- package/src/locales/cs-CZ/pages.json +1766 -1765
- package/src/locales/cs-CZ/settings.json +451 -451
- package/src/locales/da-DK/common.json +284 -284
- package/src/locales/da-DK/mobile.json +99 -99
- package/src/locales/da-DK/nav.json +9 -9
- package/src/locales/da-DK/notifications.json +226 -226
- package/src/locales/da-DK/pages.json +1775 -1774
- package/src/locales/da-DK/settings.json +451 -451
- package/src/locales/de-DE/common.json +285 -285
- package/src/locales/de-DE/mobile.json +102 -102
- package/src/locales/de-DE/nav.json +10 -10
- package/src/locales/de-DE/notifications.json +226 -226
- package/src/locales/de-DE/pages.json +1775 -1774
- package/src/locales/de-DE/settings.json +451 -451
- package/src/locales/el-GR/common.json +283 -283
- package/src/locales/el-GR/mobile.json +97 -97
- package/src/locales/el-GR/nav.json +8 -8
- package/src/locales/el-GR/notifications.json +226 -226
- package/src/locales/el-GR/pages.json +1781 -1780
- package/src/locales/el-GR/settings.json +451 -451
- package/src/locales/en/pages.json +2 -1
- package/src/locales/en-US/common.json +280 -280
- package/src/locales/en-US/nav.json +20 -20
- package/src/locales/en-US/notifications.json +222 -222
- package/src/locales/en-US/pages.json +1553 -1552
- package/src/locales/en-US/settings.json +432 -432
- package/src/locales/es-ES/common.json +283 -283
- package/src/locales/es-ES/mobile.json +96 -96
- package/src/locales/es-ES/nav.json +8 -8
- package/src/locales/es-ES/notifications.json +226 -226
- package/src/locales/es-ES/pages.json +1774 -1773
- package/src/locales/es-ES/settings.json +451 -451
- package/src/locales/fi-FI/common.json +284 -284
- package/src/locales/fi-FI/mobile.json +97 -97
- package/src/locales/fi-FI/nav.json +9 -9
- package/src/locales/fi-FI/notifications.json +226 -226
- package/src/locales/fi-FI/pages.json +1776 -1775
- package/src/locales/fi-FI/settings.json +451 -451
- package/src/locales/fr-FR/common.json +284 -284
- package/src/locales/fr-FR/mobile.json +10 -10
- package/src/locales/fr-FR/nav.json +11 -11
- package/src/locales/fr-FR/notifications.json +226 -226
- package/src/locales/fr-FR/pages.json +1762 -1761
- package/src/locales/fr-FR/settings.json +452 -452
- package/src/locales/he-IL/common.json +313 -313
- package/src/locales/he-IL/mobile.json +138 -138
- package/src/locales/he-IL/nav.json +30 -30
- package/src/locales/he-IL/notifications.json +228 -228
- package/src/locales/he-IL/pages.json +1796 -1795
- package/src/locales/he-IL/settings.json +483 -483
- package/src/locales/hu-HU/common.json +298 -298
- package/src/locales/hu-HU/mobile.json +138 -138
- package/src/locales/hu-HU/nav.json +30 -30
- package/src/locales/hu-HU/notifications.json +228 -228
- package/src/locales/hu-HU/pages.json +1792 -1791
- package/src/locales/hu-HU/settings.json +482 -482
- package/src/locales/it-IT/common.json +284 -284
- package/src/locales/it-IT/mobile.json +101 -101
- package/src/locales/it-IT/nav.json +10 -10
- package/src/locales/it-IT/notifications.json +227 -227
- package/src/locales/it-IT/pages.json +1779 -1778
- package/src/locales/it-IT/settings.json +451 -451
- package/src/locales/ja-JP/common.json +283 -283
- package/src/locales/ja-JP/mobile.json +98 -98
- package/src/locales/ja-JP/nav.json +9 -9
- package/src/locales/ja-JP/notifications.json +226 -226
- package/src/locales/ja-JP/pages.json +1779 -1778
- package/src/locales/ja-JP/settings.json +451 -451
- package/src/locales/ko-KR/common.json +313 -313
- package/src/locales/ko-KR/mobile.json +138 -138
- package/src/locales/ko-KR/nav.json +30 -30
- package/src/locales/ko-KR/notifications.json +228 -228
- package/src/locales/ko-KR/pages.json +1796 -1795
- package/src/locales/ko-KR/settings.json +483 -483
- package/src/locales/nl-NL/common.json +283 -283
- package/src/locales/nl-NL/mobile.json +91 -91
- package/src/locales/nl-NL/nav.json +10 -10
- package/src/locales/nl-NL/notifications.json +226 -226
- package/src/locales/nl-NL/pages.json +1768 -1767
- package/src/locales/nl-NL/settings.json +444 -444
- package/src/locales/no-NO/common.json +283 -283
- package/src/locales/no-NO/mobile.json +96 -96
- package/src/locales/no-NO/nav.json +8 -8
- package/src/locales/no-NO/notifications.json +226 -226
- package/src/locales/no-NO/pages.json +1778 -1777
- package/src/locales/no-NO/settings.json +451 -451
- package/src/locales/pl-PL/common.json +283 -283
- package/src/locales/pl-PL/mobile.json +94 -94
- package/src/locales/pl-PL/nav.json +8 -8
- package/src/locales/pl-PL/notifications.json +226 -226
- package/src/locales/pl-PL/pages.json +1778 -1777
- package/src/locales/pl-PL/settings.json +451 -451
- package/src/locales/pt-BR/common.json +286 -286
- package/src/locales/pt-BR/mobile.json +138 -138
- package/src/locales/pt-BR/nav.json +17 -17
- package/src/locales/pt-BR/notifications.json +226 -226
- package/src/locales/pt-BR/pages.json +1781 -1780
- package/src/locales/pt-BR/settings.json +454 -454
- package/src/locales/pt-PT/common.json +289 -289
- package/src/locales/pt-PT/mobile.json +97 -97
- package/src/locales/pt-PT/nav.json +9 -9
- package/src/locales/pt-PT/notifications.json +226 -226
- package/src/locales/pt-PT/pages.json +1780 -1779
- package/src/locales/pt-PT/settings.json +452 -452
- package/src/locales/ro-RO/common.json +283 -283
- package/src/locales/ro-RO/mobile.json +98 -98
- package/src/locales/ro-RO/nav.json +9 -9
- package/src/locales/ro-RO/notifications.json +226 -226
- package/src/locales/ro-RO/pages.json +1779 -1778
- package/src/locales/ro-RO/settings.json +451 -451
- package/src/locales/ru-RU/common.json +288 -288
- package/src/locales/ru-RU/mobile.json +97 -97
- package/src/locales/ru-RU/nav.json +8 -8
- package/src/locales/ru-RU/notifications.json +226 -226
- package/src/locales/ru-RU/pages.json +1781 -1780
- package/src/locales/ru-RU/settings.json +451 -451
- package/src/locales/sr-SP/common.json +313 -313
- package/src/locales/sr-SP/mobile.json +138 -138
- package/src/locales/sr-SP/nav.json +30 -30
- package/src/locales/sr-SP/notifications.json +228 -228
- package/src/locales/sr-SP/pages.json +1796 -1795
- package/src/locales/sr-SP/settings.json +483 -483
- package/src/locales/sv-SE/common.json +284 -284
- package/src/locales/sv-SE/mobile.json +100 -100
- package/src/locales/sv-SE/nav.json +9 -9
- package/src/locales/sv-SE/notifications.json +226 -226
- package/src/locales/sv-SE/pages.json +1777 -1776
- package/src/locales/sv-SE/settings.json +451 -451
- package/src/locales/tr-TR/common.json +313 -313
- package/src/locales/tr-TR/mobile.json +138 -138
- package/src/locales/tr-TR/nav.json +30 -30
- package/src/locales/tr-TR/notifications.json +228 -228
- package/src/locales/tr-TR/pages.json +1792 -1791
- package/src/locales/tr-TR/settings.json +483 -483
- package/src/locales/uk-UA/common.json +283 -283
- package/src/locales/uk-UA/mobile.json +98 -98
- package/src/locales/uk-UA/nav.json +8 -8
- package/src/locales/uk-UA/notifications.json +226 -226
- package/src/locales/uk-UA/pages.json +1779 -1778
- package/src/locales/uk-UA/settings.json +451 -451
- package/src/locales/vi-VN/common.json +313 -313
- package/src/locales/vi-VN/mobile.json +138 -138
- package/src/locales/vi-VN/nav.json +30 -30
- package/src/locales/vi-VN/notifications.json +228 -228
- package/src/locales/vi-VN/pages.json +1796 -1795
- package/src/locales/vi-VN/settings.json +483 -483
- package/src/locales/zh-CN/common.json +283 -283
- package/src/locales/zh-CN/mobile.json +95 -95
- package/src/locales/zh-CN/nav.json +8 -8
- package/src/locales/zh-CN/notifications.json +226 -226
- package/src/locales/zh-CN/pages.json +1778 -1777
- package/src/locales/zh-CN/settings.json +451 -451
- package/src/locales/zh-TW/common.json +293 -293
- package/src/locales/zh-TW/mobile.json +137 -137
- package/src/locales/zh-TW/nav.json +30 -30
- package/src/locales/zh-TW/notifications.json +228 -228
- package/src/locales/zh-TW/pages.json +1798 -1797
- package/src/locales/zh-TW/settings.json +482 -482
|
@@ -1,128 +1,441 @@
|
|
|
1
1
|
{
|
|
2
|
+
"login": {
|
|
3
|
+
"title": "Tracearr",
|
|
4
|
+
"tagline": "Tracearr - Stream access management",
|
|
5
|
+
"createAccountHeading": "Create your account to get started",
|
|
6
|
+
"signInHeading": "Sign in to your account",
|
|
7
|
+
"createAccountDescription": "Create an account to manage your media servers",
|
|
8
|
+
"signInDescription": "Sign in to access your dashboard",
|
|
9
|
+
"selectPlexServer": "Select your Plex server",
|
|
10
|
+
"waitingForPlex": "Waiting for Plex authorization...",
|
|
11
|
+
"completeInPopup": "Complete sign-in in the popup window",
|
|
12
|
+
"reopenPlexLogin": "Reopen Plex Login",
|
|
13
|
+
"continueWith": "Continue with {{provider}}",
|
|
14
|
+
"usernameOrEmail": "Username or Email",
|
|
15
|
+
"identifierPlaceholder": "Username or email address",
|
|
16
|
+
"username": "Username",
|
|
17
|
+
"usernamePlaceholder": "yourusername",
|
|
18
|
+
"emailPlaceholder": "your@email.com",
|
|
19
|
+
"displayNamePlaceholder": "Choose a display name",
|
|
20
|
+
"passwordPlaceholder": "At least 8 characters",
|
|
21
|
+
"yourPasswordPlaceholder": "Your password",
|
|
22
|
+
"setupNote": "After creating your account, you'll add your Plex or Jellyfin servers from Settings.",
|
|
23
|
+
"localDisabledHint": "Local sign-in is disabled for this instance. Ask an admin to run `enable-local-login` from the Tracearr CLI to re-enable it.",
|
|
24
|
+
"oidcError": "Single sign-on failed. Please try again or use another sign-in method.",
|
|
25
|
+
"accountCreated": "Account created successfully!",
|
|
26
|
+
"connectedTo": "Connected to {{name}}",
|
|
27
|
+
"plexAuthFailed": "Plex authentication failed",
|
|
28
|
+
"plexStartFailed": "Failed to start Plex login",
|
|
29
|
+
"serverConnectFailed": "Failed to connect to server",
|
|
30
|
+
"signupFailed": "Signup failed",
|
|
31
|
+
"createAccountFailed": "Failed to create account",
|
|
32
|
+
"loginFailed": "Login failed",
|
|
33
|
+
"invalidCredentials": "Invalid email or password",
|
|
34
|
+
"claimCodeRequired": "First-time setup requires a claim code",
|
|
35
|
+
"enterClaimCode": "Enter Claim Code",
|
|
36
|
+
"claimCodeDescription": "Check your server logs for the claim code to proceed with setup",
|
|
37
|
+
"claimCodeLabel": "Claim Code",
|
|
38
|
+
"claimCodeHint": "The claim code is printed in the server logs when the container starts",
|
|
39
|
+
"validateClaimCode": "Validate Claim Code",
|
|
40
|
+
"claimCodeSecurityNote": "This security measure ensures only authorized users can complete first-time setup"
|
|
41
|
+
},
|
|
42
|
+
"dashboard": {
|
|
43
|
+
"alerts": "Alerts",
|
|
44
|
+
"plays": "Plays",
|
|
45
|
+
"watchTime": "Watch Time",
|
|
46
|
+
"activeUsers": "Active Users",
|
|
47
|
+
"nowPlaying": "Now Playing",
|
|
48
|
+
"streamLocations": "Stream Locations",
|
|
49
|
+
"serverResources": "Server Resources",
|
|
50
|
+
"bandwidth": "Bandwidth",
|
|
51
|
+
"noActiveStreams": "No active streams",
|
|
52
|
+
"streamsAppearHere": "Active streams will appear here when users start watching"
|
|
53
|
+
},
|
|
54
|
+
"users": {
|
|
55
|
+
"title": "Users",
|
|
56
|
+
"showRemoved": "Show removed",
|
|
57
|
+
"noUsersFound": "No users found.",
|
|
58
|
+
"searchPlaceholder": "Search users...",
|
|
59
|
+
"selectAllUsers": "Select all {{count}} users",
|
|
60
|
+
"serversColumn": "Servers",
|
|
61
|
+
"resetTrustScore": "Reset Trust Score",
|
|
62
|
+
"resetTrustScoreTitle_one": "Reset Trust Score for {{count}} User",
|
|
63
|
+
"resetTrustScoreTitle_other": "Reset Trust Score for {{count}} Users",
|
|
64
|
+
"resetTrustScoreConfirm": "Are you sure you want to reset the trust score to 100? This action cannot be undone.",
|
|
65
|
+
"mergeUsers": "Merge users",
|
|
66
|
+
"mergeDialogTitle": "Merge users",
|
|
67
|
+
"mergeDialogDescription": "Every server account, session, and violation from the duplicate moves to the primary. The duplicate identity is deleted.",
|
|
68
|
+
"mergePickPrimary": "Choose the primary identity",
|
|
69
|
+
"mergePrimaryBadge": "Primary",
|
|
70
|
+
"mergePrimaryForced": "This account can log in, so it must stay the primary.",
|
|
71
|
+
"mergeSameServerWarningTitle": "This action is irreversible",
|
|
72
|
+
"mergeSameServerDialogDescription": "This merge permanently combines both accounts on the same server. It cannot be undone.",
|
|
73
|
+
"mergeSameServerWarning": "Both identities already have an account on the same server. Merging will permanently combine their session history, violations, and trust score into a single account on that server. This cannot be undone, and splitting the account afterward will not restore the original two accounts.",
|
|
74
|
+
"mergeSameServerAcknowledge": "I understand the same-server history combine cannot be undone",
|
|
75
|
+
"mergeSameServerFallbackName": "this server",
|
|
76
|
+
"mergeServerAccountRemoved": "Removed",
|
|
77
|
+
"mergeConfirm": "Merge",
|
|
78
|
+
"mergeSelectTwo": "Select exactly two users to merge",
|
|
79
|
+
"mergeSameIdentity": "These accounts already belong to the same user",
|
|
80
|
+
"mergeSelectAllActive": "Clear the select-all selection and pick exactly two users to merge",
|
|
81
|
+
"suggestionsTitle": "Possible duplicate users",
|
|
82
|
+
"suggestionsDescription": "These identities look like the same person across servers. Review and merge them if they match.",
|
|
83
|
+
"suggestionsReview": "Review",
|
|
84
|
+
"suggestionsMatchEmail": "Same email",
|
|
85
|
+
"suggestionsMatchUsername": "Same username",
|
|
86
|
+
"suggestionsError": "Could not load merge suggestions",
|
|
87
|
+
"filterHasAccessTo": "Has access to",
|
|
88
|
+
"filterHasAccessToPlaceholder": "Any server",
|
|
89
|
+
"filterHasAccessToHint": "Shows people with an active account on every server selected."
|
|
90
|
+
},
|
|
91
|
+
"userDetail": {
|
|
92
|
+
"backToUsers": "Back to Users",
|
|
93
|
+
"userNotFound": "User not found",
|
|
94
|
+
"userInfo": "User Info",
|
|
95
|
+
"statistics": "Statistics",
|
|
96
|
+
"sessions": "Sessions",
|
|
97
|
+
"violations": "Violations",
|
|
98
|
+
"terminationHistory": "Termination History",
|
|
99
|
+
"noViolationsFound": "No violations for this user.",
|
|
100
|
+
"noTerminationsFound": "No stream terminations for this user.",
|
|
101
|
+
"byRule": "By / Rule",
|
|
102
|
+
"manual": "Manual",
|
|
103
|
+
"unknownRule": "Unknown rule",
|
|
104
|
+
"adjustTrustScore": "Adjust Trust Score",
|
|
105
|
+
"linkedAccounts": "Linked accounts",
|
|
106
|
+
"splitAccount": "Split into separate user",
|
|
107
|
+
"splitConfirmTitle": "Split server account",
|
|
108
|
+
"splitConfirmDescription": "Detach this server account into its own user. Its watch history and violations move with it.",
|
|
109
|
+
"splitConfirmLoading": "Splitting...",
|
|
110
|
+
"acrossAllServers": "Across all linked accounts:",
|
|
111
|
+
"overallTrust": "Overall Trust",
|
|
112
|
+
"serverScope": "Server",
|
|
113
|
+
"allServers": "All servers",
|
|
114
|
+
"title": "User Details"
|
|
115
|
+
},
|
|
116
|
+
"history": {
|
|
117
|
+
"title": "History",
|
|
118
|
+
"description": "Browse all streaming sessions with powerful filtering",
|
|
119
|
+
"loadingMore": "Loading more...",
|
|
120
|
+
"scrollForMore": "Scroll for more",
|
|
121
|
+
"showingAllResults": "Showing all {{total}} results",
|
|
122
|
+
"deleteSession_one": "Delete {{count}} Session",
|
|
123
|
+
"deleteSession_other": "Delete {{count}} Sessions",
|
|
124
|
+
"deleteSessionsConfirm": "Are you sure you want to delete? This action cannot be undone."
|
|
125
|
+
},
|
|
126
|
+
"library": {
|
|
127
|
+
"title": "Library",
|
|
128
|
+
"description": "Top movies and shows on your server",
|
|
129
|
+
"topMovies": "Top Movies",
|
|
130
|
+
"topShows": "Top TV Shows",
|
|
131
|
+
"noMoviePlays": "No movie plays in this period",
|
|
132
|
+
"noShowPlays": "No TV show plays in this period",
|
|
133
|
+
"overview": {
|
|
134
|
+
"description": "Library health and growth metrics",
|
|
135
|
+
"lastUpdated": "Last updated:",
|
|
136
|
+
"totalItems": "Total Items",
|
|
137
|
+
"shows": "shows",
|
|
138
|
+
"added": "Added",
|
|
139
|
+
"libraryGrowth": "Library Growth",
|
|
140
|
+
"failedToLoad": "Failed to load library statistics",
|
|
141
|
+
"failedToLoadDesc": "Could not fetch library data. Please try again.",
|
|
142
|
+
"thisPeriod": "this period",
|
|
143
|
+
"thisWeek": "this week",
|
|
144
|
+
"thisMonth": "this month",
|
|
145
|
+
"thisYear": "this year",
|
|
146
|
+
"serversNeedSync": "These servers need to sync:"
|
|
147
|
+
},
|
|
148
|
+
"quality": {
|
|
149
|
+
"title": "Quality",
|
|
150
|
+
"description": "Resolution and codec distribution",
|
|
151
|
+
"qualityEvolution": "Quality Evolution",
|
|
152
|
+
"all": "All",
|
|
153
|
+
"failedToLoad": "Failed to load quality data",
|
|
154
|
+
"failedToLoadDesc": "Could not fetch quality data. Please try again."
|
|
155
|
+
},
|
|
156
|
+
"storage": {
|
|
157
|
+
"title": "Storage",
|
|
158
|
+
"description": "Storage usage, predictions, and optimization",
|
|
159
|
+
"totalStorage": "Total Storage",
|
|
160
|
+
"growthRate": "Growth Rate",
|
|
161
|
+
"duplicates": "Duplicates",
|
|
162
|
+
"groups": "groups",
|
|
163
|
+
"recoverable": "recoverable",
|
|
164
|
+
"staleContent": "Stale Content",
|
|
165
|
+
"staleContentDesc": "Content that may be candidates for removal",
|
|
166
|
+
"items": "items",
|
|
167
|
+
"unused": "unused",
|
|
168
|
+
"storageTrend": "Storage Trend",
|
|
169
|
+
"confidence": "Confidence",
|
|
170
|
+
"confidenceHigh": "High",
|
|
171
|
+
"confidenceMedium": "Medium",
|
|
172
|
+
"confidenceLow": "Low",
|
|
173
|
+
"zeroGrowth": "0 GB/mo",
|
|
174
|
+
"predictions": "Predictions",
|
|
175
|
+
"contentROI": "Content ROI",
|
|
176
|
+
"contentROIDesc": "Watch value per storage cost",
|
|
177
|
+
"avgHoursPerGB": "avg hours/GB",
|
|
178
|
+
"insufficientData": "Insufficient data",
|
|
179
|
+
"of": "of",
|
|
180
|
+
"days": "days",
|
|
181
|
+
"failedToLoad": "Failed to load storage data",
|
|
182
|
+
"failedToLoadDesc": "Could not fetch storage data. Please try again.",
|
|
183
|
+
"duplicatesTitle": "Duplicates",
|
|
184
|
+
"duplicatesSubtitle": "Titles stored as more than one physical file, across servers, libraries, and versions",
|
|
185
|
+
"growthPreChangeover": "based on pre-update history",
|
|
186
|
+
"loadingDuplicates": "Loading duplicates...",
|
|
187
|
+
"duplicatesFailed": "Failed to load duplicates",
|
|
188
|
+
"noDuplicatesTitle": "No duplicates found",
|
|
189
|
+
"noDuplicatesDesc": "No titles with more than one physical file detected.",
|
|
190
|
+
"colTitle": "Title",
|
|
191
|
+
"colMatchType": "Match Type",
|
|
192
|
+
"colCopies": "Copies",
|
|
193
|
+
"colRecoverable": "Recoverable Space",
|
|
194
|
+
"sameServer": "Same server",
|
|
195
|
+
"mirror": "Mirror"
|
|
196
|
+
},
|
|
197
|
+
"watch": {
|
|
198
|
+
"title": "Watch Analytics",
|
|
199
|
+
"description": "Viewing behavior and content engagement",
|
|
200
|
+
"watched": "Watched",
|
|
201
|
+
"percentWatched": "% watched",
|
|
202
|
+
"totalWatchTime": "Total Watch Time",
|
|
203
|
+
"avgPerItem": "avg per item",
|
|
204
|
+
"completed": "Completed",
|
|
205
|
+
"peakHour": "Peak Hour",
|
|
206
|
+
"viewingHours": "Viewing Hours",
|
|
207
|
+
"peak": "Peak:",
|
|
208
|
+
"monthlyTrends": "Monthly Trends",
|
|
209
|
+
"busiest": "Busiest:",
|
|
210
|
+
"quietest": "Quietest:",
|
|
211
|
+
"bingeHighlights": "Binge Highlights",
|
|
212
|
+
"bingeHighlightsDesc": "Shows with the most intensive viewing patterns",
|
|
213
|
+
"bingeSessions": "binge sessions",
|
|
214
|
+
"noData": "No watch data yet",
|
|
215
|
+
"noDataDesc": "Watch analytics will appear here once content has been played. Check back after some viewing activity.",
|
|
216
|
+
"failedToLoad": "Failed to load watch analytics",
|
|
217
|
+
"failedToLoadDesc": "Could not fetch watch data."
|
|
218
|
+
},
|
|
219
|
+
"emptyState": {
|
|
220
|
+
"checkingStatus": "Checking library status...",
|
|
221
|
+
"backfillAvailable": {
|
|
222
|
+
"title": "Historical data available",
|
|
223
|
+
"bodyWithDays": "Your library has {{days}} days of history. Generate snapshots to see trends in charts.",
|
|
224
|
+
"bodyGeneric": "Generate historical snapshots to see library trends over time.",
|
|
225
|
+
"syncRunningTitle": "Library sync in progress...",
|
|
226
|
+
"syncRunningBody": "Historical data generation will start automatically once the sync completes."
|
|
227
|
+
},
|
|
228
|
+
"generateHistory": "Generate History",
|
|
229
|
+
"starting": "Starting...",
|
|
230
|
+
"syncInProgress": {
|
|
231
|
+
"title": "Library sync in progress...",
|
|
232
|
+
"body": "Library statistics will appear once the sync completes. This may take a few minutes depending on library size."
|
|
233
|
+
},
|
|
234
|
+
"notSynced": {
|
|
235
|
+
"title": "Library not synced yet",
|
|
236
|
+
"body": "Library statistics will appear here once the library has been synced. This typically happens automatically every hour."
|
|
237
|
+
},
|
|
238
|
+
"noMedia": {
|
|
239
|
+
"title": "No movies or shows yet",
|
|
240
|
+
"body": "This library is synced but doesn't have any movies or shows in it yet."
|
|
241
|
+
},
|
|
242
|
+
"syncNow": "Sync Now",
|
|
243
|
+
"syncing": "Syncing...",
|
|
244
|
+
"notSyncedShort": "Not synced yet",
|
|
245
|
+
"backfillRunning": {
|
|
246
|
+
"title": "Generating historical data...",
|
|
247
|
+
"fallbackBody": "Creating snapshots from library history. This may take a few minutes.",
|
|
248
|
+
"progress": "{{processed}} of {{total}} libraries",
|
|
249
|
+
"snapshotsSuffix": " ({{count}} snapshots)"
|
|
250
|
+
},
|
|
251
|
+
"multiServer": {
|
|
252
|
+
"title": "Some libraries need attention",
|
|
253
|
+
"body": "Sync the servers below to see combined library statistics.",
|
|
254
|
+
"needsBackfillIntro": "These servers are synced but have no historical data yet:"
|
|
255
|
+
},
|
|
256
|
+
"toast": {
|
|
257
|
+
"noServerSelected": "No server selected",
|
|
258
|
+
"syncStartedTitle": "Library sync started",
|
|
259
|
+
"syncStartedDesc": "This may take a few minutes depending on library size.",
|
|
260
|
+
"syncFailedTitle": "Failed to start sync",
|
|
261
|
+
"genericRetry": "Please try again.",
|
|
262
|
+
"backfillStartedTitle": "Backfill started",
|
|
263
|
+
"backfillStartedDesc": "Historical snapshots are being generated.",
|
|
264
|
+
"backfillFailedTitle": "Failed to start backfill",
|
|
265
|
+
"backfillCompleteTitle": "Backfill complete",
|
|
266
|
+
"backfillErrorTitle": "Backfill failed"
|
|
267
|
+
}
|
|
268
|
+
},
|
|
269
|
+
"versionsBackfill": {
|
|
270
|
+
"banner": "File version data is still being collected for this server. Run a library sync to finish.",
|
|
271
|
+
"action": "Sync now",
|
|
272
|
+
"syncFailed": "Sync failed to start on {{count}} server(s). Check your permissions and server status.",
|
|
273
|
+
"syncStarted": "Library sync started."
|
|
274
|
+
}
|
|
275
|
+
},
|
|
2
276
|
"activity": {
|
|
3
|
-
"
|
|
4
|
-
"activityByHourOfDay": "Activity by Hour of Day",
|
|
5
|
-
"concurrentStreams": "Concurrent Streams",
|
|
277
|
+
"title": "Activity",
|
|
6
278
|
"description": "Play trends, patterns, and streaming behavior",
|
|
279
|
+
"playsOverTime": "Plays Over Time",
|
|
280
|
+
"concurrentStreams": "Concurrent Streams",
|
|
7
281
|
"engagementBreakdown": "Engagement Breakdown",
|
|
8
282
|
"howUsersEngage": "How users engage with content",
|
|
9
|
-
"platforms": "Platforms",
|
|
10
|
-
"playsOverTime": "Plays Over Time",
|
|
11
283
|
"playsVsSessions": "Plays vs Sessions",
|
|
12
284
|
"playsVsSessionsDesc": "Full completions only — counts a play when total watch time covers a content's entire runtime",
|
|
13
|
-
"
|
|
14
|
-
"
|
|
285
|
+
"activityByDayOfWeek": "Activity by Day of Week",
|
|
286
|
+
"activityByHourOfDay": "Activity by Hour of Day",
|
|
287
|
+
"platforms": "Platforms",
|
|
288
|
+
"streamQuality": "Stream Quality"
|
|
15
289
|
},
|
|
16
|
-
"
|
|
17
|
-
"
|
|
18
|
-
"
|
|
19
|
-
"
|
|
20
|
-
"
|
|
21
|
-
"
|
|
22
|
-
"
|
|
23
|
-
"
|
|
290
|
+
"violations": {
|
|
291
|
+
"title": "Violations",
|
|
292
|
+
"tryAdjustingFilters": "Try adjusting your filters",
|
|
293
|
+
"selectAllViolations": "Select all {{count}} violations matching filters",
|
|
294
|
+
"dismissViolation": "Dismiss Violation",
|
|
295
|
+
"dismissViolationConfirm": "Are you sure you want to dismiss this violation? This will remove it from the violation log permanently.",
|
|
296
|
+
"dismissViolation_one": "Dismiss {{count}} Violation",
|
|
297
|
+
"dismissViolation_other": "Dismiss {{count}} Violations",
|
|
298
|
+
"dismissViolationsConfirm": "Are you sure you want to dismiss? This will remove them from the violation log permanently and restore associated trust scores.",
|
|
299
|
+
"noViolationsFound": "No violations found",
|
|
300
|
+
"noViolationsRecorded": "No violations have been recorded yet.",
|
|
301
|
+
"allSeverities": "All Severities",
|
|
302
|
+
"allStatuses": "All Statuses",
|
|
303
|
+
"allRules": "All rules",
|
|
304
|
+
"filterPeople": "People",
|
|
305
|
+
"allPeople": "All people",
|
|
306
|
+
"peopleSelectedCount": "{{count}} people",
|
|
307
|
+
"personFilterPlaceholder": "Filter by person",
|
|
308
|
+
"personFilterEmpty": "No matching people found",
|
|
309
|
+
"personFilterError": "Failed to load people",
|
|
310
|
+
"filterByPerson": "Filter violations by this person",
|
|
311
|
+
"detail": {
|
|
312
|
+
"notFound": "Violation not found",
|
|
313
|
+
"violationDetails": "Violation Details",
|
|
314
|
+
"userInfo": "User",
|
|
315
|
+
"sessions": "Sessions",
|
|
316
|
+
"noSessions": "No sessions associated with this violation",
|
|
317
|
+
"trigger": "Trigger",
|
|
318
|
+
"map": "Session Locations",
|
|
319
|
+
"actions": "Actions Taken",
|
|
320
|
+
"timestamps": "Timestamps",
|
|
321
|
+
"created": "Created",
|
|
322
|
+
"acknowledged": "Acknowledged",
|
|
323
|
+
"detected": "Detected",
|
|
324
|
+
"inactivity": "Inactivity Details",
|
|
325
|
+
"daysInactive": "Days Inactive",
|
|
326
|
+
"threshold": "Threshold",
|
|
327
|
+
"lastActivity": "Last Activity",
|
|
328
|
+
"neverActive": "Never active",
|
|
329
|
+
"conditionEvidence": "Condition Evidence",
|
|
330
|
+
"conditionGroup": "Condition Group {{index}}",
|
|
331
|
+
"matched": "{{matched}}/{{total}} matched",
|
|
332
|
+
"actual": "Actual",
|
|
333
|
+
"relatedSessions": "{{count}} related session",
|
|
334
|
+
"relatedSessions_one": "{{count}} related session",
|
|
335
|
+
"relatedSessions_other": "{{count}} related sessions"
|
|
336
|
+
}
|
|
24
337
|
},
|
|
25
338
|
"automations": {
|
|
26
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
|
+
},
|
|
27
367
|
"kill_stream": {
|
|
368
|
+
"label": "Kill Stream",
|
|
28
369
|
"description": "Terminate the active stream",
|
|
29
370
|
"fields": {
|
|
30
371
|
"cooldown_minutes": {
|
|
31
372
|
"description": "Minimum time between terminations for the same user"
|
|
32
373
|
},
|
|
33
374
|
"delay_seconds": {
|
|
34
|
-
"
|
|
35
|
-
"
|
|
36
|
-
},
|
|
37
|
-
"message": {
|
|
38
|
-
"placeholder": "Optional message"
|
|
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."
|
|
39
377
|
},
|
|
40
378
|
"target": {
|
|
41
379
|
"description": "Which sessions to terminate"
|
|
380
|
+
},
|
|
381
|
+
"message": {
|
|
382
|
+
"placeholder": "Optional message"
|
|
42
383
|
}
|
|
43
384
|
},
|
|
44
|
-
"label": "Kill Stream",
|
|
45
385
|
"ran": "Stopped the stream"
|
|
46
386
|
},
|
|
47
387
|
"message_client": {
|
|
388
|
+
"label": "Message Client",
|
|
48
389
|
"description": "Send a message to the media player",
|
|
390
|
+
"hint": "Jellyfin and Emby only. Plex only supports messages when killing a stream.",
|
|
49
391
|
"fields": {
|
|
50
|
-
"message": {
|
|
51
|
-
"placeholder": "Message to display…"
|
|
52
|
-
},
|
|
53
392
|
"target": {
|
|
54
393
|
"description": "Which sessions to message"
|
|
55
|
-
}
|
|
56
|
-
},
|
|
57
|
-
"hint": "Jellyfin and Emby only. Plex only supports messages when killing a stream.",
|
|
58
|
-
"label": "Message Client",
|
|
59
|
-
"ran": "Put a message on the player"
|
|
60
|
-
},
|
|
61
|
-
"send": {
|
|
62
|
-
"description": "Send to one or more destinations",
|
|
63
|
-
"fields": {
|
|
64
|
-
"cooldown_minutes": {
|
|
65
|
-
"description": "Minimum time between notifications"
|
|
66
|
-
}
|
|
67
|
-
},
|
|
68
|
-
"label": "Send Notification",
|
|
69
|
-
"ran": "Sent a notification"
|
|
70
|
-
},
|
|
71
|
-
"trust": {
|
|
72
|
-
"description": "Adjust, set, or reset the trust score",
|
|
73
|
-
"fields": {
|
|
74
|
-
"amount": {
|
|
75
|
-
"description": "Positive to increase, negative to decrease",
|
|
76
|
-
"label": "Amount"
|
|
77
394
|
},
|
|
78
|
-
"
|
|
79
|
-
"
|
|
80
|
-
},
|
|
81
|
-
"value": {
|
|
82
|
-
"label": "Value"
|
|
395
|
+
"message": {
|
|
396
|
+
"placeholder": "Message to display…"
|
|
83
397
|
}
|
|
84
398
|
},
|
|
85
|
-
"
|
|
86
|
-
"ran": "Changed the trust score"
|
|
399
|
+
"ran": "Put a message on the player"
|
|
87
400
|
}
|
|
88
401
|
},
|
|
89
402
|
"activity": {
|
|
90
|
-
"
|
|
91
|
-
"else": "Took the second branch",
|
|
92
|
-
"then": "Took the first branch"
|
|
93
|
-
},
|
|
403
|
+
"title": "Activity",
|
|
94
404
|
"description": "What this automation did, newest first. Runs are kept for {{days}} days.",
|
|
95
|
-
"
|
|
96
|
-
"
|
|
97
|
-
"
|
|
405
|
+
"outcome": "Outcome",
|
|
406
|
+
"who": "Who",
|
|
407
|
+
"where": "Where",
|
|
408
|
+
"playing": "Playing",
|
|
98
409
|
"from": "From",
|
|
99
|
-
"
|
|
410
|
+
"summary": "Summary",
|
|
411
|
+
"started": "Started",
|
|
412
|
+
"finished": "Finished",
|
|
100
413
|
"noSummary": "No notes",
|
|
101
|
-
"openInEditor": "Open in the builder with this run",
|
|
102
|
-
"outcome": "Outcome",
|
|
103
414
|
"outcomes": {
|
|
104
415
|
"completed": "Ran",
|
|
105
|
-
"
|
|
106
|
-
"
|
|
416
|
+
"stopped_by_condition": "No match",
|
|
417
|
+
"error": "Failed"
|
|
107
418
|
},
|
|
108
|
-
"
|
|
109
|
-
"
|
|
419
|
+
"empty": "No runs yet",
|
|
420
|
+
"emptyDescription": "Runs are listed here once a trigger matches.",
|
|
110
421
|
"runTitle": "Run",
|
|
111
|
-
"
|
|
112
|
-
"
|
|
422
|
+
"runLoading": "Loading the run",
|
|
423
|
+
"triggeredBy": "Triggered by {{trigger}}",
|
|
424
|
+
"unknownStep": "Unrecognized step",
|
|
113
425
|
"tabs": {
|
|
114
426
|
"all": "All",
|
|
115
427
|
"completed": "Ran",
|
|
116
|
-
"
|
|
117
|
-
"
|
|
428
|
+
"stopped_by_condition": "No match",
|
|
429
|
+
"error": "Failed"
|
|
430
|
+
},
|
|
431
|
+
"group": "Group {{number}}",
|
|
432
|
+
"branch": {
|
|
433
|
+
"then": "Took the first branch",
|
|
434
|
+
"else": "Took the second branch"
|
|
118
435
|
},
|
|
119
|
-
"tabsLabel": "Filter by outcome",
|
|
120
|
-
"title": "Activity",
|
|
121
|
-
"triggeredBy": "Triggered by {{trigger}}",
|
|
122
|
-
"unknownStep": "Unrecognized step",
|
|
123
|
-
"where": "Where",
|
|
124
|
-
"who": "Who",
|
|
125
436
|
"whyBranch": "What it read",
|
|
437
|
+
"openInEditor": "Open in the builder with this run",
|
|
438
|
+
"tabsLabel": "Filter by outcome",
|
|
126
439
|
"emptyRan": "Nothing has matched yet",
|
|
127
440
|
"emptyRanDescription_one": "{{count}} check ran and did not match.",
|
|
128
441
|
"emptyRanDescription_other": "{{count}} checks ran and did not match.",
|
|
@@ -133,480 +446,373 @@
|
|
|
133
446
|
"allStatuses": "All statuses",
|
|
134
447
|
"allSeverities": "All severities",
|
|
135
448
|
"bind": {
|
|
136
|
-
"
|
|
449
|
+
"nameHelper": "The name in the automations list.",
|
|
450
|
+
"namePlaceholder": "A name for this automation",
|
|
137
451
|
"activeLabel": "Turn it on now",
|
|
138
|
-
"anyServer": "Any server",
|
|
139
452
|
"back": "Back",
|
|
140
|
-
"
|
|
141
|
-
"
|
|
453
|
+
"submit": "Use this",
|
|
454
|
+
"submitting": "Setting it up…",
|
|
142
455
|
"customize": "Open in the builder",
|
|
143
|
-
"destinationsLabel": "Send to",
|
|
144
456
|
"doors": {
|
|
145
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."
|
|
146
458
|
},
|
|
147
|
-
"
|
|
148
|
-
"
|
|
149
|
-
|
|
150
|
-
|
|
151
|
-
|
|
152
|
-
"
|
|
153
|
-
"
|
|
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.",
|
|
154
466
|
"needs": {
|
|
155
467
|
"title": "What it needs"
|
|
156
468
|
},
|
|
469
|
+
"helper": {
|
|
470
|
+
"killMessage": "Shown on the player when the stream stops.",
|
|
471
|
+
"clientMessage": "Shown on the player while it keeps playing."
|
|
472
|
+
},
|
|
157
473
|
"noInputs": "Nothing to fill in.",
|
|
158
|
-
"
|
|
159
|
-
"
|
|
160
|
-
"
|
|
161
|
-
"serverLabel": "Which server",
|
|
162
|
-
"submit": "Use this",
|
|
163
|
-
"submitting": "Setting it up…"
|
|
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."
|
|
164
477
|
},
|
|
165
478
|
"builder": {
|
|
166
|
-
"actions": {
|
|
167
|
-
"add": "Add action",
|
|
168
|
-
"addBranch": "Add action",
|
|
169
|
-
"branchElse": "Otherwise…",
|
|
170
|
-
"branchElseEmpty": "Nothing. The automation carries on.",
|
|
171
|
-
"branchName": "this branch",
|
|
172
|
-
"branchThen": "then",
|
|
173
|
-
"collapseBranch": "Hide this branch's steps",
|
|
174
|
-
"confirmRemoveDescription": "Stops happening on save.",
|
|
175
|
-
"confirmRemoveTitle": "Remove this action?",
|
|
176
|
-
"emptyAction": "Choose what happens",
|
|
177
|
-
"emptyDescription": "Send a notification, stop the stream, change a trust score, or run steps only when an extra check passes.",
|
|
178
|
-
"emptyTitle": "What should happen?",
|
|
179
|
-
"expandBranch": "Show this branch's steps",
|
|
180
|
-
"helper": "These run in order, top to bottom.",
|
|
181
|
-
"ifAddCheck": "Add another check",
|
|
182
|
-
"ifNothing": "nothing yet",
|
|
183
|
-
"ifTitle": "If…",
|
|
184
|
-
"menu": "More for {{name}}",
|
|
185
|
-
"moveDown": "Move {{name}} down",
|
|
186
|
-
"moveUp": "Move {{name}} up",
|
|
187
|
-
"policyNote": "A branch does not decide whether this is flagged; the And only if… section does.",
|
|
188
|
-
"sectionTitle": "Do this…"
|
|
189
|
-
},
|
|
190
|
-
"activeLabel": "Active",
|
|
191
|
-
"clearSelection": "Clear selection",
|
|
192
|
-
"conditions": {
|
|
193
|
-
"addAnother": "Add another condition",
|
|
194
|
-
"addFirst": "Add a condition",
|
|
195
|
-
"addGroup": "Add AND condition group",
|
|
196
|
-
"all": "all of these",
|
|
197
|
-
"allCountries": "All countries",
|
|
198
|
-
"allDeviceTypes": "All device types",
|
|
199
|
-
"allHint": "and: every check has to pass",
|
|
200
|
-
"any": "any of these",
|
|
201
|
-
"anyHint": "or: any one check is enough",
|
|
202
|
-
"canNeverPass": "This can never pass. The trigger already fires at {{threshold}}.",
|
|
203
|
-
"deviceTypesHint": "Counts only streams from the selected device types. Empty means every device.",
|
|
204
|
-
"emptyLine": "No extra checks. This runs every time.",
|
|
205
|
-
"fieldLabel": "Condition",
|
|
206
|
-
"fieldPlaceholder": "Select field",
|
|
207
|
-
"groupSeparator": "and also",
|
|
208
|
-
"helper": "Checks that must pass first. Empty means it runs every time.",
|
|
209
|
-
"matchLabel": "How these conditions combine",
|
|
210
|
-
"no": "No",
|
|
211
|
-
"noFields": "No checks are available for these triggers. Add a stream or account trigger first.",
|
|
212
|
-
"operatorLabel": "Comparison",
|
|
213
|
-
"optional": "optional",
|
|
214
|
-
"recentlySeen": "Recently seen",
|
|
215
|
-
"removeGroup": "Remove this set of checks",
|
|
216
|
-
"sectionTitle": "Only when…",
|
|
217
|
-
"uniqueDevices": "Unique devices",
|
|
218
|
-
"uniqueDevicesHint": "Counts only sessions from different physical devices.",
|
|
219
|
-
"uniqueIps": "Unique IPs",
|
|
220
|
-
"uniqueIpsHint": "Counts only sessions from different IP addresses, so same-household streams are not counted.",
|
|
221
|
-
"valueLabel": "Value",
|
|
222
|
-
"windowPrefix": "in",
|
|
223
|
-
"windowUnit": "hrs",
|
|
224
|
-
"yes": "Yes"
|
|
225
|
-
},
|
|
226
479
|
"destinationDisabled": "Disabled destination",
|
|
480
|
+
"noDestinations": "No destinations yet. Add one to send notifications.",
|
|
481
|
+
"newDestination": "New destination",
|
|
227
482
|
"errors": {
|
|
228
|
-
"
|
|
229
|
-
"daysRange": "Between {{min}} and {{max}} days",
|
|
230
|
-
"fieldNotAvailableFor": "Not available for: {{triggers}}",
|
|
231
|
-
"fieldUnavailable": "This check is not available for every trigger here",
|
|
232
|
-
"measureInvalid": "Pick how the minutes are counted",
|
|
233
|
-
"messageRequired": "Type the message to show",
|
|
234
|
-
"minutesRange": "Between {{min}} and {{max}} minutes",
|
|
483
|
+
"sendNeedsDestination": "Pick at least one destination",
|
|
235
484
|
"nameRequired": "Automation name is required",
|
|
236
|
-
"operatorInvalid": "This comparison does not fit the condition",
|
|
237
|
-
"policyNeedsSubject": "A policy needs a stream or account trigger: violations are about a person",
|
|
238
485
|
"scopeIncomplete": "Pick a target for the selected scope",
|
|
239
|
-
"sendNeedsDestination": "Pick at least one destination",
|
|
240
|
-
"tooLong": "At most {{max}} characters",
|
|
241
486
|
"triggerRequired": "Add what starts this, or switch one back on",
|
|
487
|
+
"policyNeedsSubject": "A policy needs a stream or account trigger: violations are about a person",
|
|
488
|
+
"fieldUnavailable": "This check is not available for every trigger here",
|
|
489
|
+
"operatorInvalid": "This comparison does not fit the condition",
|
|
490
|
+
"valueInvalid": "This value does not fit the condition",
|
|
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}}",
|
|
242
497
|
"trustAmountRange": "Trust changes by between -100 and 100 points",
|
|
243
498
|
"trustValueRange": "Trust score is between 0 and 100",
|
|
244
|
-
"
|
|
245
|
-
"
|
|
499
|
+
"messageRequired": "Type the message to show",
|
|
500
|
+
"tooLong": "At most {{max}} characters"
|
|
246
501
|
},
|
|
247
|
-
"
|
|
248
|
-
"
|
|
249
|
-
"
|
|
250
|
-
"
|
|
251
|
-
"
|
|
252
|
-
"
|
|
253
|
-
|
|
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": "Severity",
|
|
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": "Scope",
|
|
519
|
+
"global": "Global",
|
|
520
|
+
"server": "Specific server",
|
|
521
|
+
"account": "Specific account",
|
|
522
|
+
"person": "Person (all their servers)",
|
|
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": "Enforce across 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 AND condition group",
|
|
536
|
+
"fieldPlaceholder": "Select field",
|
|
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": "Only when…",
|
|
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": "all of these",
|
|
554
|
+
"any": "any of these",
|
|
555
|
+
"allHint": "and: every check has to pass",
|
|
556
|
+
"anyHint": "or: any one check is enough",
|
|
557
|
+
"matchLabel": "How these conditions combine",
|
|
558
|
+
"fieldLabel": "Condition",
|
|
559
|
+
"operatorLabel": "Comparison",
|
|
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 another condition",
|
|
565
|
+
"addFirst": "Add a condition",
|
|
566
|
+
"removeGroup": "Remove this set of checks"
|
|
567
|
+
},
|
|
568
|
+
"actions": {
|
|
569
|
+
"add": "Add action",
|
|
570
|
+
"sectionTitle": "Do this…",
|
|
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": "then",
|
|
584
|
+
"branchElse": "Otherwise…",
|
|
585
|
+
"branchElseEmpty": "Nothing. The automation carries on.",
|
|
586
|
+
"ifNothing": "nothing yet",
|
|
587
|
+
"ifAddCheck": "Add another check",
|
|
588
|
+
"addBranch": "Add action",
|
|
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 trigger",
|
|
599
|
+
"or": "or"
|
|
254
600
|
},
|
|
255
601
|
"heldFor": {
|
|
256
|
-
"current": "this time",
|
|
257
|
-
"measureLabel": "Counted",
|
|
258
|
-
"minutesLabel": "Minutes",
|
|
259
602
|
"prefix": "A stream has been paused for",
|
|
260
|
-
"
|
|
261
|
-
"unit": "minutes"
|
|
603
|
+
"minutesLabel": "Minutes",
|
|
604
|
+
"unit": "minutes",
|
|
605
|
+
"measureLabel": "Counted",
|
|
606
|
+
"current": "this time",
|
|
607
|
+
"total": "in total"
|
|
262
608
|
},
|
|
263
609
|
"inactiveFor": {
|
|
264
|
-
"daysLabel": "Days",
|
|
265
610
|
"prefix": "An account has been inactive for",
|
|
611
|
+
"daysLabel": "Days",
|
|
266
612
|
"unit": "days"
|
|
267
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": "What this automation does",
|
|
632
|
+
"placeholderTrigger": "something happens",
|
|
633
|
+
"placeholderAction": "do something"
|
|
634
|
+
},
|
|
635
|
+
"footer": {
|
|
636
|
+
"problems_one": "{{count}} problem",
|
|
637
|
+
"problems_other": "{{count}} problems",
|
|
638
|
+
"remaining_one": "{{count}} left to finish",
|
|
639
|
+
"remaining_other": "{{count}} left to finish",
|
|
640
|
+
"ready": "Ready to save",
|
|
641
|
+
"search": "to search"
|
|
642
|
+
},
|
|
268
643
|
"leave": {
|
|
269
|
-
"
|
|
270
|
-
"
|
|
644
|
+
"title": "Leave without saving?",
|
|
645
|
+
"confirm": "Leave"
|
|
271
646
|
},
|
|
272
647
|
"liveCheck": {
|
|
273
|
-
"
|
|
274
|
-
"backToLive": "Back to what's playing now",
|
|
648
|
+
"title": "Right now on the servers",
|
|
275
649
|
"checking": "Checking against the sessions playing now…",
|
|
276
650
|
"empty": "Nothing is playing right now; nothing to check against.",
|
|
277
|
-
"expand": "Show what matched for {{name}}",
|
|
278
651
|
"failed": "Could not reach the servers to check.",
|
|
279
652
|
"footnote": "Cooldowns and already-handled sessions aren't simulated.",
|
|
280
|
-
"
|
|
653
|
+
"expand": "Show what matched for {{name}}",
|
|
281
654
|
"passed": "Passed",
|
|
655
|
+
"notPassed": "Did not pass",
|
|
656
|
+
"actual": "now {{value}}",
|
|
657
|
+
"unfinished": "Shows what this would do once the automation is complete.",
|
|
282
658
|
"paused": "Paused while this saves",
|
|
283
|
-
"sampleGone": "That session is no longer on record; nothing to check against.",
|
|
284
659
|
"sampleTitle": "What this would do to that run",
|
|
285
|
-
"
|
|
286
|
-
"
|
|
287
|
-
},
|
|
288
|
-
"newDestination": "New destination",
|
|
289
|
-
"noDestinations": "No destinations yet. Add one to send notifications.",
|
|
290
|
-
"noMatches": "No matches",
|
|
291
|
-
"picker": {
|
|
292
|
-
"close": "close",
|
|
293
|
-
"empty": "Nothing matches that.",
|
|
294
|
-
"navigate": "move",
|
|
295
|
-
"searchPlaceholder": "Search or describe what should happen",
|
|
296
|
-
"select": "pick"
|
|
297
|
-
},
|
|
298
|
-
"recordAs": {
|
|
299
|
-
"label": "When this runs, record it as",
|
|
300
|
-
"notification": "An alert",
|
|
301
|
-
"notificationDescription": "Recorded in Activity; never a violation.",
|
|
302
|
-
"policy": "A violation",
|
|
303
|
-
"policyDescription": "Listed in Violations; can be acknowledged."
|
|
304
|
-
},
|
|
305
|
-
"rows": {
|
|
306
|
-
"expandHint": "open",
|
|
307
|
-
"moveHint": "reorder",
|
|
308
|
-
"remove": "Remove {{name}}",
|
|
309
|
-
"removeHint": "remove",
|
|
310
|
-
"skipped": "Skipped",
|
|
311
|
-
"toggle": "Include {{name}}",
|
|
312
|
-
"toggleHint": "skip"
|
|
313
|
-
},
|
|
314
|
-
"saving": "Saving…",
|
|
315
|
-
"scope": {
|
|
316
|
-
"account": "Specific account",
|
|
317
|
-
"accountLabel": "Account",
|
|
318
|
-
"accountPlaceholder": "Select account",
|
|
319
|
-
"enforceAcrossServers": "Enforce across servers",
|
|
320
|
-
"enforceAcrossServersDescription": "Acts on the person's sessions on any of their servers, not only the one that triggered it. Off by default.",
|
|
321
|
-
"global": "Global",
|
|
322
|
-
"label": "Scope",
|
|
323
|
-
"noServers": "No servers connected yet.",
|
|
324
|
-
"person": "Person (all their servers)",
|
|
325
|
-
"personHelper": "Matches this person on every server they have an account on.",
|
|
326
|
-
"personLabel": "Person",
|
|
327
|
-
"personPlaceholder": "Select person",
|
|
328
|
-
"server": "Specific server",
|
|
329
|
-
"serverLabel": "Server",
|
|
330
|
-
"serverPlaceholder": "Select server"
|
|
331
|
-
},
|
|
332
|
-
"searchPlaceholder": "Search…",
|
|
333
|
-
"selectPlaceholder": "Select…",
|
|
334
|
-
"selectedCount": "{{count}} selected",
|
|
335
|
-
"sentence": {
|
|
336
|
-
"label": "What this automation does",
|
|
337
|
-
"placeholderAction": "do something",
|
|
338
|
-
"placeholderTrigger": "something happens"
|
|
339
|
-
},
|
|
340
|
-
"severityLabel": "Severity",
|
|
341
|
-
"when": {
|
|
342
|
-
"add": "Add trigger",
|
|
343
|
-
"emptyAction": "Choose what starts it",
|
|
344
|
-
"emptyDescription": "A stream starting, a server going down, an account going quiet.",
|
|
345
|
-
"emptyTitle": "What should start this?",
|
|
346
|
-
"helper": "Any one of these starts it. At least one is required.",
|
|
347
|
-
"or": "or",
|
|
348
|
-
"title": "When…"
|
|
660
|
+
"sampleGone": "That session is no longer on record; nothing to check against.",
|
|
661
|
+
"backToLive": "Back to what's playing now"
|
|
349
662
|
}
|
|
350
663
|
},
|
|
351
|
-
"
|
|
352
|
-
"
|
|
353
|
-
|
|
354
|
-
|
|
355
|
-
|
|
356
|
-
|
|
357
|
-
|
|
358
|
-
|
|
359
|
-
|
|
360
|
-
|
|
361
|
-
|
|
362
|
-
|
|
363
|
-
|
|
364
|
-
|
|
365
|
-
|
|
366
|
-
|
|
367
|
-
|
|
368
|
-
|
|
369
|
-
|
|
370
|
-
|
|
371
|
-
"
|
|
372
|
-
|
|
373
|
-
|
|
374
|
-
|
|
375
|
-
|
|
376
|
-
|
|
377
|
-
|
|
378
|
-
|
|
379
|
-
|
|
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": "Scope",
|
|
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 {{count}} 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": "only when",
|
|
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"
|
|
380
703
|
},
|
|
381
|
-
"suggested": "Suggested",
|
|
382
704
|
"triggers": {
|
|
383
|
-
"
|
|
384
|
-
|
|
385
|
-
|
|
386
|
-
|
|
387
|
-
},
|
|
388
|
-
"
|
|
389
|
-
|
|
390
|
-
|
|
391
|
-
|
|
392
|
-
"
|
|
393
|
-
|
|
394
|
-
|
|
395
|
-
|
|
396
|
-
"
|
|
397
|
-
|
|
398
|
-
|
|
399
|
-
},
|
|
400
|
-
"mediaUpgraded": {
|
|
401
|
-
"description": "A library item that was already there changes quality.",
|
|
402
|
-
"synonyms": "upgrade, quality, replaced, remux, 4k, resolution"
|
|
403
|
-
},
|
|
404
|
-
"pluginUpdateAvailable": {
|
|
405
|
-
"description": "The Tracearr plugin on a server has a newer release.",
|
|
406
|
-
"synonyms": "plugin, upgrade, version, release"
|
|
407
|
-
},
|
|
408
|
-
"serverDown": {
|
|
409
|
-
"description": "A media server stops answering.",
|
|
410
|
-
"synonyms": "unreachable, offline, outage, down"
|
|
411
|
-
},
|
|
412
|
-
"serverUp": {
|
|
413
|
-
"description": "A media server answers again.",
|
|
414
|
-
"synonyms": "online, recovered, restored, back"
|
|
415
|
-
},
|
|
416
|
-
"serverUpdateAvailable": {
|
|
417
|
-
"description": "A media server has a newer release.",
|
|
418
|
-
"synonyms": "upgrade, version, release, patch"
|
|
419
|
-
},
|
|
420
|
-
"sessionHeldFor": {
|
|
421
|
-
"description": "A stream has been paused longer than the set number of minutes.",
|
|
422
|
-
"label": "A stream sits paused",
|
|
423
|
-
"synonyms": "pause, idle, abandoned, stuck, afk"
|
|
424
|
-
},
|
|
425
|
-
"sessionPaused": {
|
|
426
|
-
"description": "The moment a stream is paused.",
|
|
427
|
-
"synonyms": "pause, hold, idle"
|
|
428
|
-
},
|
|
429
|
-
"sessionStarted": {
|
|
430
|
-
"description": "The moment play is pressed.",
|
|
431
|
-
"synonyms": "play, watch, begin, start, viewing"
|
|
432
|
-
},
|
|
433
|
-
"sessionStopped": {
|
|
434
|
-
"description": "Playback ends, however it ended.",
|
|
435
|
-
"synonyms": "end, finish, quit, close"
|
|
436
|
-
},
|
|
437
|
-
"sessionTranscodeChanged": {
|
|
438
|
-
"description": "The server switches a stream between direct play and transcoding.",
|
|
439
|
-
"synonyms": "transcode, convert, direct play, cpu"
|
|
440
|
-
},
|
|
441
|
-
"tracearrUpdateAvailable": {
|
|
442
|
-
"description": "Tracearr itself has a newer release.",
|
|
443
|
-
"synonyms": "upgrade, version, release, self"
|
|
444
|
-
}
|
|
445
|
-
}
|
|
446
|
-
},
|
|
447
|
-
"categories": {
|
|
448
|
-
"device_client": "Device & Client",
|
|
449
|
-
"media": "Media",
|
|
450
|
-
"network_location": "Network & Location",
|
|
451
|
-
"scope": "Scope",
|
|
452
|
-
"session_behavior": "Session Behavior",
|
|
453
|
-
"stream_quality": "Stream Quality",
|
|
454
|
-
"user_attributes": "User Attributes"
|
|
455
|
-
},
|
|
456
|
-
"configFields": {
|
|
457
|
-
"cooldown_minutes": {
|
|
458
|
-
"label": "Cooldown"
|
|
459
|
-
},
|
|
460
|
-
"message": {
|
|
461
|
-
"label": "Message"
|
|
462
|
-
},
|
|
463
|
-
"target": {
|
|
464
|
-
"label": "Target"
|
|
465
|
-
}
|
|
466
|
-
},
|
|
467
|
-
"createAutomation": "Create Automation",
|
|
468
|
-
"customAutomation": "Custom automation",
|
|
469
|
-
"deleteAutomationConfirm": "Are you sure you want to delete this automation? This action cannot be undone.",
|
|
470
|
-
"deleteAutomation_one": "Delete {{count}} Automation",
|
|
471
|
-
"deleteAutomation_other": "Delete {{count}} Automations",
|
|
472
|
-
"deleteAutomationsConfirm": "Are you sure you want to delete? This action cannot be undone.",
|
|
473
|
-
"describe": {
|
|
474
|
-
"actions": {
|
|
475
|
-
"doNothing": "do nothing",
|
|
476
|
-
"flagIt": "Flag it",
|
|
477
|
-
"if": "if",
|
|
478
|
-
"kill_stream": "stop the stream",
|
|
479
|
-
"message_client": "message the player",
|
|
480
|
-
"send": "send to {{destinations}}",
|
|
481
|
-
"sendAnywhere": "send a notification",
|
|
482
|
-
"trustAdjust": "adjust trust by {{amount}}",
|
|
483
|
-
"trustDown": "drop trust by {{amount}}",
|
|
484
|
-
"trustReset": "reset trust",
|
|
485
|
-
"trustSet": "set trust to {{value}}",
|
|
486
|
-
"trustUp": "raise trust by {{amount}}"
|
|
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"
|
|
487
721
|
},
|
|
488
|
-
"
|
|
489
|
-
|
|
490
|
-
|
|
491
|
-
|
|
492
|
-
|
|
493
|
-
|
|
494
|
-
"
|
|
495
|
-
"
|
|
496
|
-
"
|
|
497
|
-
"
|
|
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"
|
|
498
733
|
},
|
|
499
734
|
"fields": {
|
|
500
|
-
"account_age_days": "the account age",
|
|
501
|
-
"active_session_distance_km": "the distance between streams",
|
|
502
|
-
"audio_channels_after": "the audio channels",
|
|
503
|
-
"client_name": "the player",
|
|
504
735
|
"concurrent_streams": "the stream count",
|
|
505
|
-
"
|
|
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",
|
|
506
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",
|
|
507
751
|
"device_type": "the device type",
|
|
508
|
-
"
|
|
509
|
-
"
|
|
510
|
-
"inactive_days": "the time since the last stream",
|
|
511
|
-
"ip_in_range": "the IP address",
|
|
752
|
+
"client_name": "the player",
|
|
753
|
+
"platform": "the platform",
|
|
512
754
|
"is_local_network": "the local network",
|
|
513
|
-
"
|
|
514
|
-
"
|
|
755
|
+
"country": "the country",
|
|
756
|
+
"ip_in_range": "the IP address",
|
|
757
|
+
"server_id": "the server",
|
|
758
|
+
"media_type": "the media type",
|
|
515
759
|
"library_item_type": "the item type",
|
|
516
760
|
"library_name": "the library",
|
|
517
|
-
"media_type": "the media type",
|
|
518
|
-
"output_resolution": "the output resolution",
|
|
519
|
-
"platform": "the platform",
|
|
520
761
|
"resolution_after": "the resolution",
|
|
521
|
-
"
|
|
522
|
-
"
|
|
523
|
-
"
|
|
524
|
-
"
|
|
525
|
-
"travel_speed_kmh": "the travel speed",
|
|
526
|
-
"trust_score": "the trust score",
|
|
527
|
-
"unique_devices_in_window": "the number of devices",
|
|
528
|
-
"unique_ips_in_window": "the number of IP addresses",
|
|
529
|
-
"user_id": "the user",
|
|
530
|
-
"video_codec_after": "the video codec"
|
|
531
|
-
},
|
|
532
|
-
"includesSameDevice": "includes same device",
|
|
533
|
-
"joinAll": "and",
|
|
534
|
-
"joinAny": "or",
|
|
535
|
-
"more_one": "+{{count}} more",
|
|
536
|
-
"more_other": "+{{count}} more",
|
|
537
|
-
"noValues": "(none)",
|
|
538
|
-
"nothing": "nothing yet",
|
|
539
|
-
"onlyWhen": "only when",
|
|
540
|
-
"operators": {
|
|
541
|
-
"contains": "contains",
|
|
542
|
-
"eq": "is",
|
|
543
|
-
"gt": "is above",
|
|
544
|
-
"gte": "is at least",
|
|
545
|
-
"in": "is one of",
|
|
546
|
-
"lt": "is below",
|
|
547
|
-
"lte": "is at most",
|
|
548
|
-
"neq": "is not",
|
|
549
|
-
"not_contains": "does not contain",
|
|
550
|
-
"not_in": "is not one of"
|
|
551
|
-
},
|
|
552
|
-
"or": "or {{text}}",
|
|
553
|
-
"otherwise": "Otherwise",
|
|
554
|
-
"sameDeviceInput": "same device: {{input}}",
|
|
555
|
-
"scope": {
|
|
556
|
-
"account": "one account",
|
|
557
|
-
"person": "one person",
|
|
558
|
-
"server": "one server"
|
|
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"
|
|
559
766
|
},
|
|
560
767
|
"states": {
|
|
561
768
|
"is_local_network": {
|
|
562
|
-
"
|
|
563
|
-
"
|
|
769
|
+
"yes": "the user is on the local network",
|
|
770
|
+
"no": "the user is not on the local network"
|
|
564
771
|
},
|
|
565
772
|
"is_transcode_downgrade": {
|
|
566
|
-
"
|
|
567
|
-
"
|
|
773
|
+
"yes": "the stream is downgraded",
|
|
774
|
+
"no": "the stream is not downgraded"
|
|
568
775
|
},
|
|
569
776
|
"is_transcoding": {
|
|
570
|
-
"audio": {
|
|
571
|
-
"no": "the stream is not transcoding audio",
|
|
572
|
-
"yes": "the stream is transcoding audio"
|
|
573
|
-
},
|
|
574
|
-
"neither": {
|
|
575
|
-
"no": "the stream is transcoding",
|
|
576
|
-
"yes": "the stream is not transcoding"
|
|
577
|
-
},
|
|
578
777
|
"video": {
|
|
579
|
-
"
|
|
580
|
-
"
|
|
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"
|
|
581
784
|
},
|
|
582
785
|
"video_or_audio": {
|
|
583
|
-
"
|
|
584
|
-
"
|
|
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"
|
|
585
792
|
}
|
|
586
793
|
}
|
|
587
794
|
},
|
|
588
|
-
"
|
|
589
|
-
|
|
590
|
-
"
|
|
591
|
-
"
|
|
592
|
-
"
|
|
593
|
-
"
|
|
594
|
-
"
|
|
595
|
-
"
|
|
596
|
-
"
|
|
597
|
-
"
|
|
598
|
-
"
|
|
599
|
-
"
|
|
600
|
-
"
|
|
601
|
-
"sessionPaused": "a stream is paused",
|
|
602
|
-
"sessionStarted": "a stream starts",
|
|
603
|
-
"sessionStopped": "a stream stops",
|
|
604
|
-
"sessionTranscodeChanged": "transcoding starts or stops",
|
|
605
|
-
"tracearrUpdateAvailable": "a Tracearr update is available"
|
|
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"
|
|
606
808
|
},
|
|
607
|
-
"
|
|
809
|
+
"scope": {
|
|
810
|
+
"server": "one server",
|
|
811
|
+
"account": "one account",
|
|
812
|
+
"person": "one person"
|
|
813
|
+
},
|
|
814
|
+
"sameDeviceInput": "same device: {{input}}",
|
|
608
815
|
"uniqueIpsInput": "unique IPs: {{input}}",
|
|
609
|
-
"when": "When {{text}}",
|
|
610
816
|
"unbound": {
|
|
611
817
|
"server": "a chosen server",
|
|
612
818
|
"account": "a chosen account",
|
|
@@ -633,43 +839,43 @@
|
|
|
633
839
|
"disable": "Disable",
|
|
634
840
|
"editAutomation": "Edit Automation",
|
|
635
841
|
"effects": {
|
|
636
|
-
"
|
|
637
|
-
"everyServer": "Runs on every server.",
|
|
842
|
+
"title": "What this will do",
|
|
638
843
|
"kill": "Can stop a stream that is playing.",
|
|
844
|
+
"trust": "Changes trust scores.",
|
|
639
845
|
"message": "Puts a message on a player.",
|
|
640
|
-
"
|
|
846
|
+
"violation": "Records a violation against the matched person.",
|
|
641
847
|
"tellsOnly": "Only notifies. Never stops a stream or changes an account.",
|
|
642
|
-
"
|
|
643
|
-
"
|
|
644
|
-
"
|
|
848
|
+
"allServers": "Runs on every server unless one is chosen.",
|
|
849
|
+
"everyServer": "Runs on every server.",
|
|
850
|
+
"oneServer": "Runs on {{server}} only."
|
|
645
851
|
},
|
|
852
|
+
"emptyTitle": "No automations yet",
|
|
646
853
|
"emptyDescription": "Ready-made automations. Pick one and fill in the blanks.",
|
|
647
854
|
"emptySeeAll": "See all {{count}}",
|
|
648
855
|
"emptySeeAllLoading": "See all",
|
|
649
|
-
"emptyTitle": "No automations yet",
|
|
650
856
|
"enable": "Enable",
|
|
651
857
|
"evaluations": {
|
|
858
|
+
"disclosure": "Matches that did not start a run ({{total}})",
|
|
652
859
|
"reasons": {
|
|
653
860
|
"cooldown_active": "Cooldown was active",
|
|
654
861
|
"edge_replayed": "Same edge already handled",
|
|
655
862
|
"gate_blocked": "An open run already covers this",
|
|
656
863
|
"trigger_filter_failed": "Trigger threshold not reached"
|
|
657
|
-
}
|
|
658
|
-
"disclosure": "Matches that did not start a run ({{total}})"
|
|
864
|
+
}
|
|
659
865
|
},
|
|
660
866
|
"export": {
|
|
661
|
-
"
|
|
662
|
-
"
|
|
663
|
-
"authorPlaceholder": "Name",
|
|
867
|
+
"title": "Share this automation",
|
|
868
|
+
"description": "A code another Tracearr can paste in.",
|
|
664
869
|
"carries": "The code carries the steps only. Destinations, servers and accounts are not included; the receiving side fills in its own.",
|
|
665
870
|
"copyCode": "Copy the share code",
|
|
666
871
|
"copyJson": "Copy the JSON",
|
|
667
|
-
"
|
|
668
|
-
"
|
|
872
|
+
"authorLabel": "Author",
|
|
873
|
+
"authorPlaceholder": "Name",
|
|
874
|
+
"authorHelper": "Shown on the gallery page and carried in the code. Optional.",
|
|
669
875
|
"save": "Save as ready-made",
|
|
670
|
-
"saveFailed": "Could not save it.",
|
|
671
876
|
"saved": "{{name}} saved as a ready-made automation.",
|
|
672
|
-
"
|
|
877
|
+
"saveFailed": "Could not save it.",
|
|
878
|
+
"failed": "Couldn't make a code for this one.",
|
|
673
879
|
"saveHelper": "Adds it to this server's list of ready-made automations.",
|
|
674
880
|
"authorInCode": "The code includes the author name.",
|
|
675
881
|
"groupLabel": "Section",
|
|
@@ -681,222 +887,223 @@
|
|
|
681
887
|
"openRepository": "Open the repository"
|
|
682
888
|
},
|
|
683
889
|
"fields": {
|
|
684
|
-
"
|
|
685
|
-
"
|
|
686
|
-
"
|
|
890
|
+
"concurrent_streams": {
|
|
891
|
+
"label": "Concurrent Streams",
|
|
892
|
+
"description": "Number of active streams from the same user"
|
|
687
893
|
},
|
|
688
894
|
"active_session_distance_km": {
|
|
689
|
-
"
|
|
690
|
-
"
|
|
895
|
+
"label": "Distance Between Sessions",
|
|
896
|
+
"description": "Distance between simultaneous sessions"
|
|
691
897
|
},
|
|
692
|
-
"
|
|
693
|
-
"
|
|
694
|
-
"
|
|
898
|
+
"travel_speed_kmh": {
|
|
899
|
+
"label": "Travel Speed",
|
|
900
|
+
"description": "Calculated travel speed between locations"
|
|
695
901
|
},
|
|
696
|
-
"
|
|
697
|
-
"
|
|
698
|
-
"
|
|
699
|
-
"placeholder": "e.g., Plex for iOS"
|
|
902
|
+
"unique_ips_in_window": {
|
|
903
|
+
"label": "Unique IPs in Window",
|
|
904
|
+
"description": "Number of unique IP addresses in the time window"
|
|
700
905
|
},
|
|
701
|
-
"
|
|
702
|
-
"
|
|
703
|
-
"
|
|
906
|
+
"unique_devices_in_window": {
|
|
907
|
+
"label": "Unique Devices in Window",
|
|
908
|
+
"description": "Number of unique devices in the time window"
|
|
704
909
|
},
|
|
705
|
-
"
|
|
706
|
-
"
|
|
707
|
-
"
|
|
708
|
-
"placeholder": "Select countries…"
|
|
910
|
+
"inactive_days": {
|
|
911
|
+
"label": "Days Inactive",
|
|
912
|
+
"description": "Days since last activity"
|
|
709
913
|
},
|
|
710
914
|
"current_pause_minutes": {
|
|
711
|
-
"
|
|
712
|
-
"
|
|
713
|
-
},
|
|
714
|
-
"device_type": {
|
|
715
|
-
"description": "Type of device used",
|
|
716
|
-
"label": "Device Type"
|
|
717
|
-
},
|
|
718
|
-
"dynamic_range_after": {
|
|
719
|
-
"description": "HDR format the item ends up with",
|
|
720
|
-
"label": "Dynamic Range"
|
|
915
|
+
"label": "Current Pause Duration",
|
|
916
|
+
"description": "How long the session has been continuously paused"
|
|
721
917
|
},
|
|
722
|
-
"
|
|
723
|
-
"
|
|
724
|
-
"
|
|
918
|
+
"total_pause_minutes": {
|
|
919
|
+
"label": "Total Pause Duration",
|
|
920
|
+
"description": "Total accumulated pause time across all pause/resume cycles"
|
|
725
921
|
},
|
|
726
|
-
"
|
|
727
|
-
"
|
|
728
|
-
"
|
|
922
|
+
"source_resolution": {
|
|
923
|
+
"label": "Source Resolution",
|
|
924
|
+
"description": "Original media resolution"
|
|
729
925
|
},
|
|
730
|
-
"
|
|
731
|
-
"
|
|
732
|
-
"
|
|
733
|
-
"placeholder": "e.g., 192.168.1.0/24 or 2001:db8:abcd:7800::/64"
|
|
926
|
+
"output_resolution": {
|
|
927
|
+
"label": "Output Resolution",
|
|
928
|
+
"description": "Transcoded or delivered resolution"
|
|
734
929
|
},
|
|
735
|
-
"
|
|
736
|
-
"
|
|
737
|
-
"
|
|
930
|
+
"is_transcoding": {
|
|
931
|
+
"label": "Is Transcoding",
|
|
932
|
+
"description": "Whether video or audio streams are being transcoded"
|
|
738
933
|
},
|
|
739
934
|
"is_transcode_downgrade": {
|
|
740
|
-
"
|
|
741
|
-
"
|
|
935
|
+
"label": "Transcode Downgrade",
|
|
936
|
+
"description": "Output resolution is lower than source"
|
|
742
937
|
},
|
|
743
|
-
"
|
|
744
|
-
"
|
|
745
|
-
"
|
|
938
|
+
"source_bitrate_mbps": {
|
|
939
|
+
"label": "Source Bitrate",
|
|
940
|
+
"description": "Original media bitrate"
|
|
746
941
|
},
|
|
747
|
-
"
|
|
748
|
-
"
|
|
749
|
-
"
|
|
942
|
+
"user_id": {
|
|
943
|
+
"label": "User",
|
|
944
|
+
"description": "Specific users by account",
|
|
945
|
+
"placeholder": "Select users…"
|
|
750
946
|
},
|
|
751
|
-
"
|
|
752
|
-
"
|
|
753
|
-
"
|
|
754
|
-
"placeholder": "Movies"
|
|
947
|
+
"trust_score": {
|
|
948
|
+
"label": "Trust Score",
|
|
949
|
+
"description": "The user's trust score, from 0 to 100"
|
|
755
950
|
},
|
|
756
|
-
"
|
|
757
|
-
"
|
|
758
|
-
"
|
|
951
|
+
"account_age_days": {
|
|
952
|
+
"label": "Account Age",
|
|
953
|
+
"description": "Days since account creation"
|
|
759
954
|
},
|
|
760
|
-
"
|
|
761
|
-
"
|
|
762
|
-
"
|
|
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"
|
|
763
963
|
},
|
|
764
964
|
"platform": {
|
|
765
|
-
"
|
|
766
|
-
"
|
|
965
|
+
"label": "Platform/OS",
|
|
966
|
+
"description": "Operating system"
|
|
767
967
|
},
|
|
768
|
-
"
|
|
769
|
-
"
|
|
770
|
-
"
|
|
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"
|
|
771
981
|
},
|
|
772
982
|
"server_id": {
|
|
773
|
-
"description": "Specific media server",
|
|
774
983
|
"label": "Server",
|
|
984
|
+
"description": "Specific media server",
|
|
775
985
|
"placeholder": "Select servers…"
|
|
776
986
|
},
|
|
777
|
-
"
|
|
778
|
-
"
|
|
779
|
-
"
|
|
780
|
-
},
|
|
781
|
-
"source_resolution": {
|
|
782
|
-
"description": "Original media resolution",
|
|
783
|
-
"label": "Source Resolution"
|
|
987
|
+
"media_type": {
|
|
988
|
+
"label": "Media Type",
|
|
989
|
+
"description": "Type of content"
|
|
784
990
|
},
|
|
785
|
-
"
|
|
786
|
-
"
|
|
787
|
-
"
|
|
991
|
+
"library_item_type": {
|
|
992
|
+
"label": "Item Type",
|
|
993
|
+
"description": "What kind of library item it is"
|
|
788
994
|
},
|
|
789
|
-
"
|
|
790
|
-
"
|
|
791
|
-
"
|
|
995
|
+
"library_name": {
|
|
996
|
+
"label": "Library",
|
|
997
|
+
"description": "Name of the library it landed in",
|
|
998
|
+
"placeholder": "Movies"
|
|
792
999
|
},
|
|
793
|
-
"
|
|
794
|
-
"
|
|
795
|
-
"
|
|
1000
|
+
"resolution_after": {
|
|
1001
|
+
"label": "Resolution",
|
|
1002
|
+
"description": "Resolution the item ends up at"
|
|
796
1003
|
},
|
|
797
|
-
"
|
|
798
|
-
"
|
|
799
|
-
"
|
|
1004
|
+
"dynamic_range_after": {
|
|
1005
|
+
"label": "Dynamic Range",
|
|
1006
|
+
"description": "HDR format the item ends up with"
|
|
800
1007
|
},
|
|
801
|
-
"
|
|
802
|
-
"
|
|
803
|
-
"
|
|
1008
|
+
"video_codec_after": {
|
|
1009
|
+
"label": "Video Codec",
|
|
1010
|
+
"description": "Video codec the item ends up with"
|
|
804
1011
|
},
|
|
805
|
-
"
|
|
806
|
-
"
|
|
807
|
-
"
|
|
808
|
-
"placeholder": "Select users…"
|
|
1012
|
+
"audio_channels_after": {
|
|
1013
|
+
"label": "Audio Channels",
|
|
1014
|
+
"description": "Audio channel count the item ends up with"
|
|
809
1015
|
},
|
|
810
|
-
"
|
|
811
|
-
"
|
|
812
|
-
"
|
|
1016
|
+
"file_size_after": {
|
|
1017
|
+
"label": "File Size",
|
|
1018
|
+
"description": "Size the item ends up at, across every copy"
|
|
813
1019
|
}
|
|
814
1020
|
},
|
|
815
1021
|
"gallery": {
|
|
816
|
-
"
|
|
1022
|
+
"title": "New automation",
|
|
817
1023
|
"description": "Ready-made automations. Pick one and fill in the blanks.",
|
|
818
|
-
"
|
|
1024
|
+
"searchPlaceholder": "Search",
|
|
1025
|
+
"noMatches": "Nothing matches “{{query}}”.",
|
|
1026
|
+
"noMatchesHint": "Try a word from the outcome: discord, offline, paused.",
|
|
819
1027
|
"group": {
|
|
820
|
-
"housekeeping": "Housekeeping",
|
|
821
1028
|
"notifications": "Notifications",
|
|
822
|
-
"
|
|
1029
|
+
"server_health": "Server health",
|
|
823
1030
|
"policies": "Limits and rules",
|
|
824
|
-
"
|
|
825
|
-
|
|
826
|
-
"hint": {
|
|
827
|
-
"close": "close",
|
|
828
|
-
"move": "move",
|
|
829
|
-
"use": "use"
|
|
1031
|
+
"housekeeping": "Housekeeping",
|
|
1032
|
+
"other": "Other ways to start"
|
|
830
1033
|
},
|
|
1034
|
+
"builtin": "Built-in",
|
|
831
1035
|
"kind": {
|
|
832
|
-
"
|
|
833
|
-
"
|
|
1036
|
+
"policy": "A violation",
|
|
1037
|
+
"notification": "An alert"
|
|
834
1038
|
},
|
|
835
|
-
"loading": "Loading…",
|
|
836
|
-
"missing": "That ready-made automation is not on this server.",
|
|
837
|
-
"noMatches": "Nothing matches “{{query}}”.",
|
|
838
|
-
"noMatchesHint": "Try a word from the outcome: discord, offline, paused.",
|
|
839
1039
|
"paste": {
|
|
840
|
-
"
|
|
841
|
-
"
|
|
1040
|
+
"title": "Paste a share code",
|
|
1041
|
+
"description": "Paste a code and review what it does before adding it."
|
|
842
1042
|
},
|
|
843
|
-
"retry": "Try again",
|
|
844
1043
|
"scratch": {
|
|
845
|
-
"
|
|
846
|
-
"
|
|
1044
|
+
"title": "Start from scratch",
|
|
1045
|
+
"description": "Build it step by step."
|
|
847
1046
|
},
|
|
848
|
-
"
|
|
849
|
-
"
|
|
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…"
|
|
850
1056
|
},
|
|
851
1057
|
"import": {
|
|
852
|
-
"
|
|
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.",
|
|
853
1063
|
"check": "Check it",
|
|
854
1064
|
"checking": "Reading it…",
|
|
1065
|
+
"valid": "Tracearr can read this code.",
|
|
1066
|
+
"madeBy": "Author: {{author}}, as written in the code",
|
|
855
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",
|
|
856
1076
|
"collision": {
|
|
1077
|
+
"title": "A different automation named {{name}} already exists.",
|
|
857
1078
|
"add": "Keep both",
|
|
858
|
-
"replace": "Replace mine"
|
|
859
|
-
"title": "A different automation named {{name}} already exists."
|
|
1079
|
+
"replace": "Replace mine"
|
|
860
1080
|
},
|
|
861
|
-
"
|
|
1081
|
+
"raw": "Show the JSON",
|
|
862
1082
|
"errors": {
|
|
863
1083
|
"notACode": "That doesn't look like a Tracearr share code.",
|
|
864
1084
|
"notACodeHint": "A code starts with tracearr1. The JSON works too.",
|
|
865
|
-
"rejected": "Tracearr couldn't read this one.",
|
|
866
|
-
"rejectedHint": "It may come from a different tool or have been edited by hand.",
|
|
867
1085
|
"tooBig": "That's too big to be a Tracearr automation.",
|
|
868
1086
|
"tooBigHint": "Codes are a few thousand characters at most.",
|
|
869
|
-
"
|
|
870
|
-
"
|
|
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.",
|
|
871
1089
|
"tooNew": "This needs Tracearr {{required}} or newer.",
|
|
872
1090
|
"tooNewHint": "This server runs {{current}}. Update Tracearr, then paste again.",
|
|
873
|
-
"
|
|
874
|
-
"
|
|
875
|
-
|
|
876
|
-
|
|
877
|
-
"existingUse": "Use it",
|
|
878
|
-
"formatHint": "A code starts with tracearr1.",
|
|
879
|
-
"madeBy": "Author: {{author}}, as written in the code",
|
|
880
|
-
"paused": {
|
|
881
|
-
"helper": "Turn it on from the list after review.",
|
|
882
|
-
"label": "Start paused"
|
|
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."
|
|
883
1095
|
},
|
|
884
|
-
"placeholder": "tracearr1.…",
|
|
885
|
-
"raw": "Show the JSON",
|
|
886
|
-
"reviewDescription": "What the code does, and what to fill in.",
|
|
887
|
-
"submit": "Add it",
|
|
888
|
-
"title": "Paste a share code",
|
|
889
|
-
"valid": "Tracearr can read this code.",
|
|
890
1096
|
"source": "Shared automations are listed at docs.tracearr.com/templates.",
|
|
891
1097
|
"validCaveat": "Nothing in a code says who wrote it or whether it is safe. The steps are below.",
|
|
892
1098
|
"builtinMatch": "This is {{name}}, one of the automations Tracearr ships."
|
|
893
1099
|
},
|
|
894
1100
|
"kind": {
|
|
895
|
-
"
|
|
896
|
-
"
|
|
1101
|
+
"policy": "Violation",
|
|
1102
|
+
"notification": "Alert"
|
|
897
1103
|
},
|
|
898
1104
|
"kindColumn": "Kind",
|
|
899
1105
|
"name": "Automation Name",
|
|
1106
|
+
"newAutomation": "New automation",
|
|
900
1107
|
"namePlaceholder": "A name for this automation",
|
|
901
1108
|
"nameInvalid": "Give it a name.",
|
|
902
1109
|
"descriptionLabel": "Description",
|
|
@@ -907,88 +1114,99 @@
|
|
|
907
1114
|
"retentionLabel": "Keep runs for",
|
|
908
1115
|
"retentionPlaceholder": "{{days}}",
|
|
909
1116
|
"retentionInvalid": "Enter a whole number of days, at least 1, or leave it empty.",
|
|
910
|
-
"newAutomation": "New automation",
|
|
911
1117
|
"noAutomationsFound": "No automations found",
|
|
912
1118
|
"operators": {
|
|
913
|
-
"contains": "contains",
|
|
914
1119
|
"eq": "equals",
|
|
1120
|
+
"neq": "not equals",
|
|
915
1121
|
"gt": "greater than",
|
|
916
1122
|
"gte": "at least",
|
|
917
|
-
"in": "is one of",
|
|
918
1123
|
"lt": "less than",
|
|
919
1124
|
"lte": "at most",
|
|
920
|
-
"
|
|
921
|
-
"
|
|
922
|
-
"
|
|
1125
|
+
"in": "is one of",
|
|
1126
|
+
"not_in": "is not one of",
|
|
1127
|
+
"contains": "contains",
|
|
1128
|
+
"not_contains": "does not contain"
|
|
923
1129
|
},
|
|
924
1130
|
"options": {
|
|
925
|
-
"1080p": "1080p",
|
|
926
|
-
"1440p": "1440p",
|
|
927
|
-
"480p": "480p",
|
|
928
1131
|
"4K": "4K (2160p)",
|
|
1132
|
+
"1080p": "1080p",
|
|
929
1133
|
"720p": "720p",
|
|
930
|
-
"
|
|
1134
|
+
"480p": "480p",
|
|
931
1135
|
"SD": "SD",
|
|
1136
|
+
"unknown": "Unknown",
|
|
1137
|
+
"mobile": "Mobile",
|
|
1138
|
+
"tablet": "Tablet",
|
|
1139
|
+
"tv": "TV",
|
|
1140
|
+
"desktop": "Desktop",
|
|
1141
|
+
"browser": "Browser",
|
|
1142
|
+
"ios": "iOS",
|
|
932
1143
|
"android": "Android",
|
|
1144
|
+
"windows": "Windows",
|
|
1145
|
+
"macos": "macOS",
|
|
1146
|
+
"linux": "Linux",
|
|
1147
|
+
"tvos": "tvOS",
|
|
933
1148
|
"androidtv": "Android TV",
|
|
934
|
-
"
|
|
935
|
-
"
|
|
936
|
-
"
|
|
937
|
-
"
|
|
1149
|
+
"roku": "Roku",
|
|
1150
|
+
"webos": "webOS",
|
|
1151
|
+
"tizen": "Tizen",
|
|
1152
|
+
"movie": "Movie",
|
|
938
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",
|
|
939
1165
|
"hdr": "HDR",
|
|
940
1166
|
"hdr10": "HDR10",
|
|
941
1167
|
"hdr10+": "HDR10+",
|
|
942
1168
|
"hlg": "HLG",
|
|
943
|
-
"
|
|
1169
|
+
"dolby vision": "Dolby Vision",
|
|
944
1170
|
"libraryItemType": {
|
|
945
|
-
"album": "Album",
|
|
946
|
-
"artist": "Artist",
|
|
947
|
-
"episode": "Episode",
|
|
948
1171
|
"movie": "Movie",
|
|
949
|
-
"photo": "Photo",
|
|
950
|
-
"season": "Season",
|
|
951
1172
|
"show": "Show",
|
|
952
|
-
"
|
|
953
|
-
|
|
954
|
-
|
|
955
|
-
|
|
956
|
-
|
|
957
|
-
|
|
958
|
-
|
|
959
|
-
"neither": "Neither (Direct Play)",
|
|
960
|
-
"photo": "Photo",
|
|
961
|
-
"roku": "Roku",
|
|
962
|
-
"sdr": "SDR",
|
|
963
|
-
"tablet": "Tablet",
|
|
964
|
-
"tizen": "Tizen",
|
|
965
|
-
"track": "Music",
|
|
966
|
-
"trailer": "Trailer",
|
|
967
|
-
"tv": "TV",
|
|
968
|
-
"tvos": "tvOS",
|
|
969
|
-
"unknown": "Unknown",
|
|
970
|
-
"video": "Video",
|
|
971
|
-
"video_or_audio": "Video or Audio",
|
|
972
|
-
"webos": "webOS",
|
|
973
|
-
"windows": "Windows"
|
|
1173
|
+
"season": "Season",
|
|
1174
|
+
"episode": "Episode",
|
|
1175
|
+
"artist": "Artist",
|
|
1176
|
+
"album": "Album",
|
|
1177
|
+
"track": "Track",
|
|
1178
|
+
"photo": "Photo"
|
|
1179
|
+
}
|
|
974
1180
|
},
|
|
975
1181
|
"provenance": {
|
|
976
1182
|
"builtin": "Built-in · {{name}} {{version}}",
|
|
977
|
-
"customized": "Customized from {{name}}",
|
|
978
|
-
"customizedFromRemoved": "Customized from a ready-made automation that has since been removed",
|
|
979
1183
|
"imported": "Imported from a share code on {{date}} · {{name}} {{version}}",
|
|
980
1184
|
"importedBy": "Imported from a share code by {{author}} on {{date}} · {{name}} {{version}}",
|
|
981
|
-
"saved": "Saved here from {{name}} on {{date}} · {{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"
|
|
982
1188
|
},
|
|
983
1189
|
"recordsOnly": "Records runs only",
|
|
984
1190
|
"scope": {
|
|
985
|
-
"account": "Account",
|
|
986
|
-
"crossServer": "Cross-server",
|
|
987
1191
|
"global": "Global",
|
|
988
|
-
"person": "Person"
|
|
1192
|
+
"person": "Person",
|
|
1193
|
+
"account": "Account",
|
|
1194
|
+
"crossServer": "Cross-server"
|
|
989
1195
|
},
|
|
990
1196
|
"searchPlaceholder": "Search automations…",
|
|
991
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
|
+
},
|
|
992
1210
|
"all_except_one": {
|
|
993
1211
|
"label": "All except one (keep oldest)",
|
|
994
1212
|
"tooltip": "All sessions except the oldest, bringing the user down to one stream"
|
|
@@ -996,84 +1214,94 @@
|
|
|
996
1214
|
"all_user": {
|
|
997
1215
|
"label": "All user sessions",
|
|
998
1216
|
"tooltip": "Every active session for this user"
|
|
1217
|
+
}
|
|
1218
|
+
},
|
|
1219
|
+
"configFields": {
|
|
1220
|
+
"cooldown_minutes": {
|
|
1221
|
+
"label": "Cooldown"
|
|
999
1222
|
},
|
|
1000
|
-
"
|
|
1001
|
-
"label": "
|
|
1002
|
-
"tooltip": "The user's most recently started session"
|
|
1223
|
+
"target": {
|
|
1224
|
+
"label": "Target"
|
|
1003
1225
|
},
|
|
1004
|
-
"
|
|
1005
|
-
"label": "
|
|
1006
|
-
|
|
1226
|
+
"message": {
|
|
1227
|
+
"label": "Message"
|
|
1228
|
+
}
|
|
1229
|
+
},
|
|
1230
|
+
"trustModes": {
|
|
1231
|
+
"adjust": {
|
|
1232
|
+
"label": "Adjust by amount"
|
|
1007
1233
|
},
|
|
1008
|
-
"
|
|
1009
|
-
"label": "
|
|
1010
|
-
|
|
1234
|
+
"set": {
|
|
1235
|
+
"label": "Set to value"
|
|
1236
|
+
},
|
|
1237
|
+
"reset": {
|
|
1238
|
+
"label": "Reset to default (100)"
|
|
1011
1239
|
}
|
|
1012
1240
|
},
|
|
1013
1241
|
"severity": {
|
|
1014
|
-
"high": "High",
|
|
1015
1242
|
"low": "Low",
|
|
1016
|
-
"warning": "Warning"
|
|
1243
|
+
"warning": "Warning",
|
|
1244
|
+
"high": "High"
|
|
1017
1245
|
},
|
|
1018
1246
|
"template": {
|
|
1019
|
-
"
|
|
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.",
|
|
1020
1251
|
"before": "Now",
|
|
1252
|
+
"after": "After the update",
|
|
1253
|
+
"review": "Review and update",
|
|
1254
|
+
"save": "Save changes",
|
|
1021
1255
|
"customize": "Customize",
|
|
1256
|
+
"customizeTitle": "Open this in the builder?",
|
|
1022
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.",
|
|
1023
1258
|
"customizeConfirmAction": "Customize it",
|
|
1024
|
-
"customizeFailed": "Could not open it in the builder.",
|
|
1025
1259
|
"customizeFirst": "This automation follows a ready-made one. Open it in the builder first.",
|
|
1026
|
-
"
|
|
1027
|
-
"gone": "The ready-made automation this was built from is no longer on this server.",
|
|
1028
|
-
"review": "Review and update",
|
|
1029
|
-
"save": "Save changes",
|
|
1030
|
-
"updateAvailable": "An update is available",
|
|
1031
|
-
"updatedBody": "Review the answers below, then update.",
|
|
1032
|
-
"updatedTitle": "The ready-made automation is now on v{{version}}",
|
|
1260
|
+
"customizeFailed": "Could not open it in the builder.",
|
|
1033
1261
|
"upgradeFailed": "Couldn't update that. Try again.",
|
|
1034
|
-
"
|
|
1262
|
+
"gone": "The ready-made automation this was built from is no longer on this server.",
|
|
1035
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."
|
|
1036
1264
|
},
|
|
1037
1265
|
"templates": {
|
|
1038
1266
|
"account-inactivity": {
|
|
1267
|
+
"name": "Inactive account",
|
|
1039
1268
|
"description": "Raise a violation when an account goes unused for the days you allow.",
|
|
1040
|
-
"keywords": "idle dormant unused stale cleanup inactive account"
|
|
1041
|
-
"name": "Inactive account"
|
|
1269
|
+
"keywords": "idle dormant unused stale cleanup inactive account"
|
|
1042
1270
|
},
|
|
1043
1271
|
"concurrent-streams": {
|
|
1272
|
+
"name": "Too many streams at once",
|
|
1044
1273
|
"description": "Raise a violation when an account plays more streams at once than you allow.",
|
|
1045
|
-
"keywords": "limit cap concurrent simultaneous sharing too many streams"
|
|
1046
|
-
"name": "Too many streams at once"
|
|
1274
|
+
"keywords": "limit cap concurrent simultaneous sharing too many streams"
|
|
1047
1275
|
},
|
|
1048
1276
|
"device-velocity": {
|
|
1277
|
+
"name": "Many IPs in a window",
|
|
1049
1278
|
"description": "Raise a violation when an account streams from more IP addresses in a window than you allow.",
|
|
1050
|
-
"keywords": "ip addresses vpn sharing devices window"
|
|
1051
|
-
"name": "Many IPs in a window"
|
|
1279
|
+
"keywords": "ip addresses vpn sharing devices window"
|
|
1052
1280
|
},
|
|
1053
1281
|
"geo-restriction": {
|
|
1282
|
+
"name": "Blocked countries",
|
|
1054
1283
|
"description": "Raise a violation when a stream comes from a country you block.",
|
|
1055
|
-
"keywords": "country geo vpn abroad region block travel"
|
|
1056
|
-
"name": "Blocked countries"
|
|
1284
|
+
"keywords": "country geo vpn abroad region block travel"
|
|
1057
1285
|
},
|
|
1058
1286
|
"impossible-travel": {
|
|
1287
|
+
"name": "Impossible travel",
|
|
1059
1288
|
"description": "Raise a violation when two sessions sit further apart than anyone could travel between them.",
|
|
1060
|
-
"keywords": "vpn travel speed distance location sharing"
|
|
1061
|
-
"name": "Impossible travel"
|
|
1289
|
+
"keywords": "vpn travel speed distance location sharing"
|
|
1062
1290
|
},
|
|
1063
1291
|
"kill-paused-streams": {
|
|
1292
|
+
"name": "Stop paused streams",
|
|
1064
1293
|
"description": "Stop a stream that has sat paused past the minutes you allow.",
|
|
1065
|
-
"keywords": "pause idle afk stop kill terminate reclaim"
|
|
1066
|
-
"name": "Stop paused streams"
|
|
1294
|
+
"keywords": "pause idle afk stop kill terminate reclaim"
|
|
1067
1295
|
},
|
|
1068
1296
|
"media-added": {
|
|
1297
|
+
"name": "New media added",
|
|
1069
1298
|
"description": "Tell a destination when a library item shows up for the first time.",
|
|
1070
|
-
"keywords": "new library movie episode added import notify discord email webhook"
|
|
1071
|
-
"name": "New media added"
|
|
1299
|
+
"keywords": "new library movie episode added import notify discord email webhook"
|
|
1072
1300
|
},
|
|
1073
1301
|
"media-upgraded": {
|
|
1302
|
+
"name": "Media upgraded",
|
|
1074
1303
|
"description": "Tell a destination when a library item changes quality.",
|
|
1075
|
-
"keywords": "upgrade quality remux 4k resolution replaced notify discord email webhook"
|
|
1076
|
-
"name": "Media upgraded"
|
|
1304
|
+
"keywords": "upgrade quality remux 4k resolution replaced notify discord email webhook"
|
|
1077
1305
|
},
|
|
1078
1306
|
"new-device": {
|
|
1079
1307
|
"name": "New device",
|
|
@@ -1081,59 +1309,59 @@
|
|
|
1081
1309
|
"keywords": "device new unknown unrecognized phone login sharing notify discord email webhook"
|
|
1082
1310
|
},
|
|
1083
1311
|
"no-4k-transcodes": {
|
|
1312
|
+
"name": "No 4K transcodes",
|
|
1084
1313
|
"description": "Stop a stream that transcodes 4K source video.",
|
|
1085
|
-
"keywords": "4k transcode quality cpu bandwidth stop"
|
|
1086
|
-
"name": "No 4K transcodes"
|
|
1314
|
+
"keywords": "4k transcode quality cpu bandwidth stop"
|
|
1087
1315
|
},
|
|
1088
1316
|
"paused-too-long": {
|
|
1317
|
+
"name": "Paused too long",
|
|
1089
1318
|
"description": "Tell a destination when a stream sits paused past the minutes you allow.",
|
|
1090
|
-
"keywords": "pause idle afk stuck abandoned notify discord email webhook"
|
|
1091
|
-
"name": "Paused too long"
|
|
1319
|
+
"keywords": "pause idle afk stuck abandoned notify discord email webhook"
|
|
1092
1320
|
},
|
|
1093
1321
|
"plugin-update": {
|
|
1322
|
+
"name": "Tracearr plugin update",
|
|
1094
1323
|
"description": "Tell a destination when a server has a newer Tracearr plugin to install.",
|
|
1095
|
-
"keywords": "plugin update upgrade version release notify discord email webhook"
|
|
1096
|
-
"name": "Tracearr plugin update"
|
|
1324
|
+
"keywords": "plugin update upgrade version release notify discord email webhook"
|
|
1097
1325
|
},
|
|
1098
1326
|
"server-down": {
|
|
1327
|
+
"name": "Server down",
|
|
1099
1328
|
"description": "Tell a destination when a media server stops answering.",
|
|
1100
|
-
"keywords": "offline outage unreachable down notify discord email webhook"
|
|
1101
|
-
"name": "Server down"
|
|
1329
|
+
"keywords": "offline outage unreachable down notify discord email webhook"
|
|
1102
1330
|
},
|
|
1103
1331
|
"server-up": {
|
|
1332
|
+
"name": "Server back up",
|
|
1104
1333
|
"description": "Tell a destination when a media server answers again.",
|
|
1105
|
-
"keywords": "online recovered restored back up notify discord email webhook"
|
|
1106
|
-
"name": "Server back up"
|
|
1334
|
+
"keywords": "online recovered restored back up notify discord email webhook"
|
|
1107
1335
|
},
|
|
1108
1336
|
"server-update": {
|
|
1337
|
+
"name": "Media server update",
|
|
1109
1338
|
"description": "Tell a destination when a media server has an update available.",
|
|
1110
|
-
"keywords": "update upgrade version release plex jellyfin emby notify discord"
|
|
1111
|
-
"name": "Media server update"
|
|
1339
|
+
"keywords": "update upgrade version release plex jellyfin emby notify discord"
|
|
1112
1340
|
},
|
|
1113
1341
|
"simultaneous-locations": {
|
|
1342
|
+
"name": "Two places at once",
|
|
1114
1343
|
"description": "Raise a violation when one account streams from two distant places at the same time.",
|
|
1115
|
-
"keywords": "distance location sharing vpn two places at once"
|
|
1116
|
-
"name": "Two places at once"
|
|
1344
|
+
"keywords": "distance location sharing vpn two places at once"
|
|
1117
1345
|
},
|
|
1118
1346
|
"stream-ended": {
|
|
1347
|
+
"name": "Stream ended",
|
|
1119
1348
|
"description": "Tell a destination every time a stream stops.",
|
|
1120
|
-
"keywords": "stop end finish playback notify discord email webhook"
|
|
1121
|
-
"name": "Stream ended"
|
|
1349
|
+
"keywords": "stop end finish playback notify discord email webhook"
|
|
1122
1350
|
},
|
|
1123
1351
|
"stream-started": {
|
|
1352
|
+
"name": "Stream started",
|
|
1124
1353
|
"description": "Tell a destination every time a stream starts.",
|
|
1125
|
-
"keywords": "play watch begin start viewing notify discord email webhook"
|
|
1126
|
-
"name": "Stream started"
|
|
1354
|
+
"keywords": "play watch begin start viewing notify discord email webhook"
|
|
1127
1355
|
},
|
|
1128
1356
|
"tracearr-update": {
|
|
1357
|
+
"name": "Tracearr update",
|
|
1129
1358
|
"description": "Tell a destination when a new Tracearr release is out.",
|
|
1130
|
-
"keywords": "update upgrade version release tracearr notify discord email webhook"
|
|
1131
|
-
"name": "Tracearr update"
|
|
1359
|
+
"keywords": "update upgrade version release tracearr notify discord email webhook"
|
|
1132
1360
|
},
|
|
1133
1361
|
"transcode-started": {
|
|
1362
|
+
"name": "Stream is transcoding",
|
|
1134
1363
|
"description": "Tell a destination when a stream transcodes video or audio.",
|
|
1135
|
-
"keywords": "transcode convert cpu direct play quality notify discord email webhook"
|
|
1136
|
-
"name": "Stream is transcoding"
|
|
1364
|
+
"keywords": "transcode convert cpu direct play quality notify discord email webhook"
|
|
1137
1365
|
},
|
|
1138
1366
|
"trust-score-changed": {
|
|
1139
1367
|
"name": "Trust score changed",
|
|
@@ -1143,29 +1371,114 @@
|
|
|
1143
1371
|
},
|
|
1144
1372
|
"title": "Automations",
|
|
1145
1373
|
"toggleAutomation": "Turn {{name}} on or off",
|
|
1146
|
-
"trustModes": {
|
|
1147
|
-
"adjust": {
|
|
1148
|
-
"label": "Adjust by amount"
|
|
1149
|
-
},
|
|
1150
|
-
"reset": {
|
|
1151
|
-
"label": "Reset to default (100)"
|
|
1152
|
-
},
|
|
1153
|
-
"set": {
|
|
1154
|
-
"label": "Set to value"
|
|
1155
|
-
}
|
|
1156
|
-
},
|
|
1157
1374
|
"tryAdjustingFilters": "Try adjusting your filters.",
|
|
1158
1375
|
"units": {
|
|
1159
|
-
"days": "days",
|
|
1160
|
-
"gb": "GB",
|
|
1161
|
-
"hours": "hours",
|
|
1162
1376
|
"km": "km",
|
|
1163
1377
|
"kmh": "km/h",
|
|
1164
1378
|
"mbps": "Mbps",
|
|
1379
|
+
"days": "days",
|
|
1165
1380
|
"minutes": "minutes",
|
|
1381
|
+
"hours": "hours",
|
|
1382
|
+
"gb": "GB",
|
|
1166
1383
|
"seconds": "seconds"
|
|
1167
1384
|
},
|
|
1168
1385
|
"updateAutomation": "Update Automation",
|
|
1386
|
+
"catalog": {
|
|
1387
|
+
"groups": {
|
|
1388
|
+
"sessions": "Sessions",
|
|
1389
|
+
"accounts": "Accounts",
|
|
1390
|
+
"library": "Library",
|
|
1391
|
+
"servers": "Servers",
|
|
1392
|
+
"updates": "Updates",
|
|
1393
|
+
"notify": "Notify",
|
|
1394
|
+
"policy": "Policy",
|
|
1395
|
+
"control": "Control flow"
|
|
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": "Branch on a condition",
|
|
1477
|
+
"description": "Run one set of steps when a condition holds and another when it does not.",
|
|
1478
|
+
"synonyms": "if, else, otherwise, branch, split, condition"
|
|
1479
|
+
}
|
|
1480
|
+
}
|
|
1481
|
+
},
|
|
1169
1482
|
"filters": {
|
|
1170
1483
|
"source": "Where it came from",
|
|
1171
1484
|
"allSources": "Anywhere",
|
|
@@ -1180,879 +1493,567 @@
|
|
|
1180
1493
|
},
|
|
1181
1494
|
"openGallery": "Open the gallery"
|
|
1182
1495
|
},
|
|
1183
|
-
"
|
|
1184
|
-
"
|
|
1185
|
-
"
|
|
1186
|
-
"
|
|
1187
|
-
"
|
|
1188
|
-
"
|
|
1189
|
-
"
|
|
1190
|
-
"
|
|
1191
|
-
"streamLocations": "Stream Locations",
|
|
1192
|
-
"streamsAppearHere": "Active streams will appear here when users start watching",
|
|
1193
|
-
"watchTime": "Watch Time"
|
|
1194
|
-
},
|
|
1195
|
-
"debug": {
|
|
1196
|
-
"clearAutomations": "Delete all automations and runs",
|
|
1197
|
-
"clearAutomationsConfirm": "Delete every automation and all of their runs?",
|
|
1198
|
-
"clearLibraryCache": "Clear Library Cache",
|
|
1199
|
-
"clearMobileDevices": "Clear Mobile Devices",
|
|
1200
|
-
"clearQueryCache": "Clear Query Cache",
|
|
1201
|
-
"clearServers": "Clear Servers",
|
|
1202
|
-
"clearSessions": "Clear Sessions",
|
|
1203
|
-
"clearStuckJobs": "Clear Stuck Jobs",
|
|
1204
|
-
"clearTerminationLogs": "Clear Termination Logs",
|
|
1205
|
-
"clearUsers": "Clear Users",
|
|
1206
|
-
"clearViolations": "Clear Violations",
|
|
1207
|
-
"clickLoadToView": "Click \"Load\" to view snapshots",
|
|
1208
|
-
"cpu": "CPU",
|
|
1209
|
-
"database": "Database",
|
|
1210
|
-
"databaseDesc": "Database size and table statistics",
|
|
1211
|
-
"deleteAllSuspicious": "Delete All Suspicious",
|
|
1212
|
-
"deleteSelected": "Delete Selected",
|
|
1213
|
-
"description": "Administrative utilities for troubleshooting and data management",
|
|
1214
|
-
"destructiveActions": "Destructive Actions",
|
|
1215
|
-
"environment": "Environment",
|
|
1216
|
-
"factoryReset": "Factory Reset",
|
|
1217
|
-
"libraryItems": "Library Items",
|
|
1218
|
-
"librarySnapshots": "Library Snapshots",
|
|
1219
|
-
"load": "Load",
|
|
1220
|
-
"logExplorerUnavailable": "Log explorer is only available in Docker environments",
|
|
1221
|
-
"logs": "Logs",
|
|
1222
|
-
"maintenance": "Maintenance",
|
|
1223
|
-
"manageSnapshots": "Manage library snapshots used for Storage Trend and Quality Evolution charts",
|
|
1224
|
-
"memory": "Memory",
|
|
1225
|
-
"noSuspiciousSnapshots": "No suspicious snapshots found",
|
|
1226
|
-
"obliterateAllJobs": "Obliterate All Jobs",
|
|
1227
|
-
"of": "of",
|
|
1228
|
-
"ok": "OK",
|
|
1229
|
-
"overview": "Overview",
|
|
1230
|
-
"plexAccounts": "Plex Accounts",
|
|
1231
|
-
"refreshAggregates": "Refresh Aggregates",
|
|
1232
|
-
"selected": "selected",
|
|
1233
|
-
"snapshots": "snapshot(s)",
|
|
1234
|
-
"suspicious": "Suspicious",
|
|
1235
|
-
"suspiciousOnly": "Suspicious only",
|
|
1236
|
-
"systemInformation": "System Information",
|
|
1237
|
-
"tasks": "Tasks",
|
|
1238
|
-
"terminations": "Terminations",
|
|
1239
|
-
"title": "Debug Tools",
|
|
1240
|
-
"totalSize": "Total Size",
|
|
1241
|
-
"uptime": "Uptime"
|
|
1242
|
-
},
|
|
1243
|
-
"devices": {
|
|
1244
|
-
"analyzedSessions": "Analyzed Sessions",
|
|
1245
|
-
"analyzedSessionsTooltip": "Sessions in device + codec combinations with at least {{count}} sessions and a known codec. Rare combinations and sessions with no codec info aren't counted.",
|
|
1246
|
-
"compatibilityMatrix": "Compatibility Matrix",
|
|
1247
|
-
"compatibilityMatrixDesc": "Direct play rates by device and video codec. Sorted by session volume.",
|
|
1248
|
-
"description": "See which devices direct play vs transcode each codec",
|
|
1249
|
-
"deviceAndCodec": "Device + Codec",
|
|
1250
|
-
"deviceHealth": "Device Health",
|
|
1251
|
-
"deviceHealthDesc": "Direct play rate by device type",
|
|
1252
|
-
"directPlayHigh": "≥80% Direct",
|
|
1253
|
-
"directPlayLow": "<50%",
|
|
1254
|
-
"directPlayMid": "50-79%",
|
|
1255
|
-
"directPlayRate": "Direct Play Rate",
|
|
1256
|
-
"legend": "Legend:",
|
|
1257
|
-
"noDeviceDataPeriod": "No device data in this period",
|
|
1258
|
-
"noTranscodeHotspots": "No transcode hotspots",
|
|
1259
|
-
"noTranscodingUsers": "No transcoding users found",
|
|
1260
|
-
"pctOfTotal": "% of Total",
|
|
1261
|
-
"title": "Device Compatibility",
|
|
1262
|
-
"topTranscodingUsers": "Top Transcoding Users",
|
|
1263
|
-
"topTranscodingUsersDesc": "Users causing the most transcodes on your server",
|
|
1264
|
-
"transcodeHotspots": "Transcode Hotspots",
|
|
1265
|
-
"transcodeHotspotsDesc": "Combinations causing the most transcodes",
|
|
1266
|
-
"transcodes": "Transcodes",
|
|
1267
|
-
"uniqueCodecs": "Unique Codecs",
|
|
1268
|
-
"uniqueDevices": "Unique Devices",
|
|
1269
|
-
"videoAndAudio": "Video + audio"
|
|
1496
|
+
"terminateStream": {
|
|
1497
|
+
"title": "Terminate Stream",
|
|
1498
|
+
"stopMedia": "Stop \"{{mediaTitle}}\" for @{{username}}?",
|
|
1499
|
+
"messageLabel": "Message to user (optional)",
|
|
1500
|
+
"messagePlaceholder": "e.g., Please don't share your account",
|
|
1501
|
+
"messageHint": "This message will be shown to them during playback",
|
|
1502
|
+
"terminating": "Terminating...",
|
|
1503
|
+
"killStream": "Kill Stream"
|
|
1270
1504
|
},
|
|
1271
|
-
"
|
|
1272
|
-
"
|
|
1273
|
-
"
|
|
1274
|
-
"
|
|
1275
|
-
"description": "Browse all streaming sessions with powerful filtering",
|
|
1276
|
-
"loadingMore": "Loading more...",
|
|
1277
|
-
"scrollForMore": "Scroll for more",
|
|
1278
|
-
"showingAllResults": "Showing all {{total}} results",
|
|
1279
|
-
"title": "History"
|
|
1505
|
+
"notFound": {
|
|
1506
|
+
"title": "404",
|
|
1507
|
+
"heading": "Page Not Found",
|
|
1508
|
+
"description": "The page you're looking for doesn't exist or has been moved."
|
|
1280
1509
|
},
|
|
1281
|
-
"
|
|
1282
|
-
"
|
|
1283
|
-
|
|
1284
|
-
"
|
|
1285
|
-
|
|
1286
|
-
|
|
1287
|
-
|
|
1288
|
-
|
|
1289
|
-
|
|
1290
|
-
|
|
1291
|
-
"
|
|
1292
|
-
|
|
1293
|
-
|
|
1294
|
-
"
|
|
1295
|
-
"
|
|
1296
|
-
|
|
1297
|
-
|
|
1298
|
-
|
|
1299
|
-
|
|
1300
|
-
"
|
|
1301
|
-
"
|
|
1302
|
-
"title": "Some libraries need attention"
|
|
1510
|
+
"settings": {
|
|
1511
|
+
"plex": {
|
|
1512
|
+
"noServersFound": "No Plex servers found",
|
|
1513
|
+
"noServersFoundHint": "Make sure you own at least one Plex server",
|
|
1514
|
+
"noReachableConnections": "No reachable connections",
|
|
1515
|
+
"local": "Local",
|
|
1516
|
+
"remote": "Remote",
|
|
1517
|
+
"custom": "Custom",
|
|
1518
|
+
"secure": "Secure",
|
|
1519
|
+
"mayNotConnect": "May not connect",
|
|
1520
|
+
"recommended": "Recommended",
|
|
1521
|
+
"customUrl": "Custom URL",
|
|
1522
|
+
"connectionError": {
|
|
1523
|
+
"timeout": "Timed out",
|
|
1524
|
+
"dns": "DNS error",
|
|
1525
|
+
"refused": "Connection refused",
|
|
1526
|
+
"unreachable": "Host unreachable",
|
|
1527
|
+
"reset": "Connection reset",
|
|
1528
|
+
"tls": "TLS error",
|
|
1529
|
+
"http": "HTTP {{status}}",
|
|
1530
|
+
"unknown": "Connection failed"
|
|
1303
1531
|
},
|
|
1304
|
-
"
|
|
1305
|
-
|
|
1306
|
-
|
|
1532
|
+
"connectionsReachable": "{{reachable}} of {{total}} connections reachable",
|
|
1533
|
+
"connectionsAvailable": "{{count}} connections available",
|
|
1534
|
+
"hideFiltered": "Hide filtered",
|
|
1535
|
+
"showAll": "Show all",
|
|
1536
|
+
"moreConnections": "+{{count}} more connections",
|
|
1537
|
+
"connectingTo": "Connecting to {{name}}...",
|
|
1538
|
+
"noAccountsLinked": "No Plex Accounts Linked",
|
|
1539
|
+
"noAccountsLinkedHint": "Link a Plex account to add Plex servers to Tracearr.",
|
|
1540
|
+
"linkPlexAccount": "Link Plex Account",
|
|
1541
|
+
"linkAnotherAccount": "Link Another Plex Account",
|
|
1542
|
+
"linking": "Linking...",
|
|
1543
|
+
"accountsLinked_one": "{{count}} Plex account linked",
|
|
1544
|
+
"accountsLinked_other": "{{count}} Plex accounts linked",
|
|
1545
|
+
"noAccountsLinkedShort": "No Plex accounts linked",
|
|
1546
|
+
"loginEnabled": "Login Enabled",
|
|
1547
|
+
"serversConnected_one": "{{count}} server connected",
|
|
1548
|
+
"serversConnected_other": "{{count}} servers connected",
|
|
1549
|
+
"unlinkAccount": "Unlink this Plex account",
|
|
1550
|
+
"reauthorizeAccount": "Reauthorize this Plex account",
|
|
1551
|
+
"deleteServersFirst": "Delete connected servers first to unlink this account",
|
|
1552
|
+
"linkedAccounts": "Linked Plex Accounts",
|
|
1553
|
+
"linkedAccountsDesc": "Manage the Plex accounts you can add servers from.",
|
|
1554
|
+
"noAccountsYet": "No Plex accounts linked yet.",
|
|
1555
|
+
"unlinkPlexAccount": "Unlink Plex Account",
|
|
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."
|
|
1557
|
+
},
|
|
1558
|
+
"destinations": {
|
|
1559
|
+
"add": "Add destination",
|
|
1560
|
+
"builtinNote": "Built in",
|
|
1561
|
+
"clearSecret": "Clear",
|
|
1562
|
+
"delete": "Delete",
|
|
1563
|
+
"deleteConfirm": "Delete {{name}}? Rules 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.",
|
|
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"
|
|
1307
1575
|
},
|
|
1308
|
-
"
|
|
1309
|
-
"
|
|
1310
|
-
"title": "Library not synced yet"
|
|
1576
|
+
"hints": {
|
|
1577
|
+
"authTokenOptional": "Optional for public topics"
|
|
1311
1578
|
},
|
|
1312
|
-
"
|
|
1313
|
-
"
|
|
1314
|
-
"
|
|
1315
|
-
|
|
1316
|
-
|
|
1579
|
+
"ownerOnly": "Only the owner can manage notification destinations.",
|
|
1580
|
+
"pushNote": "Delivered to paired mobile devices; each device filters in its own notification settings.",
|
|
1581
|
+
"receiveViolations": "Receive violations",
|
|
1582
|
+
"receiveViolationsHint": "Send every violation to this destination",
|
|
1583
|
+
"reencrypt": "Re-enter this destination's secret",
|
|
1584
|
+
"secretSet": "Set (leave blank to keep)",
|
|
1585
|
+
"test": "Test",
|
|
1586
|
+
"testHint": "Save first to test",
|
|
1587
|
+
"testNeedsForm": "Fill in the required fields to test",
|
|
1588
|
+
"title": "Notification destinations",
|
|
1589
|
+
"types": {
|
|
1590
|
+
"discord": "Discord",
|
|
1591
|
+
"jsonWebhook": "Webhook (JSON)",
|
|
1592
|
+
"ntfy": "ntfy",
|
|
1593
|
+
"gotify": "Gotify",
|
|
1594
|
+
"apprise": "Apprise",
|
|
1595
|
+
"pushover": "Pushover",
|
|
1596
|
+
"push": "Mobile push",
|
|
1597
|
+
"webToast": "Browser toasts"
|
|
1317
1598
|
},
|
|
1318
|
-
"
|
|
1319
|
-
"
|
|
1320
|
-
"
|
|
1321
|
-
"backfillCompleteTitle": "Backfill complete",
|
|
1322
|
-
"backfillErrorTitle": "Backfill failed",
|
|
1323
|
-
"backfillFailedTitle": "Failed to start backfill",
|
|
1324
|
-
"backfillStartedDesc": "Historical snapshots are being generated.",
|
|
1325
|
-
"backfillStartedTitle": "Backfill started",
|
|
1326
|
-
"genericRetry": "Please try again.",
|
|
1327
|
-
"noServerSelected": "No server selected",
|
|
1328
|
-
"syncFailedTitle": "Failed to start sync",
|
|
1329
|
-
"syncStartedDesc": "This may take a few minutes depending on library size.",
|
|
1330
|
-
"syncStartedTitle": "Library sync started"
|
|
1331
|
-
}
|
|
1332
|
-
},
|
|
1333
|
-
"noMoviePlays": "No movie plays in this period",
|
|
1334
|
-
"noShowPlays": "No TV show plays in this period",
|
|
1335
|
-
"overview": {
|
|
1336
|
-
"added": "Added",
|
|
1337
|
-
"description": "Library health and growth metrics",
|
|
1338
|
-
"failedToLoad": "Failed to load library statistics",
|
|
1339
|
-
"failedToLoadDesc": "Could not fetch library data. Please try again.",
|
|
1340
|
-
"lastUpdated": "Last updated:",
|
|
1341
|
-
"libraryGrowth": "Library Growth",
|
|
1342
|
-
"serversNeedSync": "These servers need to sync:",
|
|
1343
|
-
"shows": "shows",
|
|
1344
|
-
"thisMonth": "this month",
|
|
1345
|
-
"thisPeriod": "this period",
|
|
1346
|
-
"thisWeek": "this week",
|
|
1347
|
-
"thisYear": "this year",
|
|
1348
|
-
"totalItems": "Total Items"
|
|
1349
|
-
},
|
|
1350
|
-
"quality": {
|
|
1351
|
-
"all": "All",
|
|
1352
|
-
"description": "Resolution and codec distribution",
|
|
1353
|
-
"failedToLoad": "Failed to load quality data",
|
|
1354
|
-
"failedToLoadDesc": "Could not fetch quality data. Please try again.",
|
|
1355
|
-
"qualityEvolution": "Quality Evolution",
|
|
1356
|
-
"title": "Quality"
|
|
1357
|
-
},
|
|
1358
|
-
"storage": {
|
|
1359
|
-
"avgHoursPerGB": "avg hours/GB",
|
|
1360
|
-
"colCopies": "Copies",
|
|
1361
|
-
"colMatchType": "Match Type",
|
|
1362
|
-
"colRecoverable": "Recoverable Space",
|
|
1363
|
-
"colTitle": "Title",
|
|
1364
|
-
"confidence": "Confidence",
|
|
1365
|
-
"confidenceHigh": "High",
|
|
1366
|
-
"confidenceLow": "Low",
|
|
1367
|
-
"confidenceMedium": "Medium",
|
|
1368
|
-
"contentROI": "Content ROI",
|
|
1369
|
-
"contentROIDesc": "Watch value per storage cost",
|
|
1370
|
-
"days": "days",
|
|
1371
|
-
"description": "Storage usage, predictions, and optimization",
|
|
1372
|
-
"duplicates": "Duplicates",
|
|
1373
|
-
"duplicatesFailed": "Failed to load duplicates",
|
|
1374
|
-
"duplicatesSubtitle": "Titles stored as more than one physical file, across servers, libraries, and versions",
|
|
1375
|
-
"duplicatesTitle": "Duplicates",
|
|
1376
|
-
"failedToLoad": "Failed to load storage data",
|
|
1377
|
-
"failedToLoadDesc": "Could not fetch storage data. Please try again.",
|
|
1378
|
-
"groups": "groups",
|
|
1379
|
-
"growthPreChangeover": "based on pre-update history",
|
|
1380
|
-
"growthRate": "Growth Rate",
|
|
1381
|
-
"insufficientData": "Insufficient data",
|
|
1382
|
-
"items": "items",
|
|
1383
|
-
"loadingDuplicates": "Loading duplicates...",
|
|
1384
|
-
"mirror": "Mirror",
|
|
1385
|
-
"noDuplicatesDesc": "No titles with more than one physical file detected.",
|
|
1386
|
-
"noDuplicatesTitle": "No duplicates found",
|
|
1387
|
-
"of": "of",
|
|
1388
|
-
"predictions": "Predictions",
|
|
1389
|
-
"recoverable": "recoverable",
|
|
1390
|
-
"sameServer": "Same server",
|
|
1391
|
-
"staleContent": "Stale Content",
|
|
1392
|
-
"staleContentDesc": "Content that may be candidates for removal",
|
|
1393
|
-
"storageTrend": "Storage Trend",
|
|
1394
|
-
"title": "Storage",
|
|
1395
|
-
"totalStorage": "Total Storage",
|
|
1396
|
-
"unused": "unused",
|
|
1397
|
-
"zeroGrowth": "0 GB/mo"
|
|
1599
|
+
"usedBy": "Used by {{count}} rule",
|
|
1600
|
+
"usedBy_other": "Used by {{count}} rules",
|
|
1601
|
+
"webToastNote": "Toasts in this browser."
|
|
1398
1602
|
},
|
|
1399
|
-
"
|
|
1400
|
-
|
|
1401
|
-
|
|
1402
|
-
|
|
1403
|
-
"
|
|
1404
|
-
"
|
|
1405
|
-
"syncFailed": "Sync failed to start on {{count}} server(s). Check your permissions and server status.",
|
|
1406
|
-
"syncStarted": "Library sync started."
|
|
1603
|
+
"jobs": {
|
|
1604
|
+
"runNow": "Run Now",
|
|
1605
|
+
"running": "Running...",
|
|
1606
|
+
"lastRun": "Last run",
|
|
1607
|
+
"nextRun": "Next run",
|
|
1608
|
+
"schedule": "Schedule"
|
|
1407
1609
|
},
|
|
1408
|
-
"
|
|
1409
|
-
"
|
|
1410
|
-
"
|
|
1411
|
-
"
|
|
1412
|
-
"
|
|
1413
|
-
"
|
|
1414
|
-
"completed": "Completed",
|
|
1415
|
-
"description": "Viewing behavior and content engagement",
|
|
1416
|
-
"failedToLoad": "Failed to load watch analytics",
|
|
1417
|
-
"failedToLoadDesc": "Could not fetch watch data.",
|
|
1418
|
-
"monthlyTrends": "Monthly Trends",
|
|
1419
|
-
"noData": "No watch data yet",
|
|
1420
|
-
"noDataDesc": "Watch analytics will appear here once content has been played. Check back after some viewing activity.",
|
|
1421
|
-
"peak": "Peak:",
|
|
1422
|
-
"peakHour": "Peak Hour",
|
|
1423
|
-
"percentWatched": "% watched",
|
|
1424
|
-
"quietest": "Quietest:",
|
|
1425
|
-
"title": "Watch Analytics",
|
|
1426
|
-
"totalWatchTime": "Total Watch Time",
|
|
1427
|
-
"viewingHours": "Viewing Hours",
|
|
1428
|
-
"watched": "Watched"
|
|
1610
|
+
"mobile": {
|
|
1611
|
+
"editDisplayName": "Edit Display Name",
|
|
1612
|
+
"editDisplayNameDesc": "Change how this device appears in your device list",
|
|
1613
|
+
"displayName": "Display Name",
|
|
1614
|
+
"displayNamePlaceholder": "e.g., My iPhone",
|
|
1615
|
+
"updating": "Updating..."
|
|
1429
1616
|
}
|
|
1430
1617
|
},
|
|
1431
|
-
"login": {
|
|
1432
|
-
"accountCreated": "Account created successfully!",
|
|
1433
|
-
"claimCodeDescription": "Check your server logs for the claim code to proceed with setup",
|
|
1434
|
-
"claimCodeHint": "The claim code is printed in the server logs when the container starts",
|
|
1435
|
-
"claimCodeLabel": "Claim Code",
|
|
1436
|
-
"claimCodeRequired": "First-time setup requires a claim code",
|
|
1437
|
-
"claimCodeSecurityNote": "This security measure ensures only authorized users can complete first-time setup",
|
|
1438
|
-
"completeInPopup": "Complete sign-in in the popup window",
|
|
1439
|
-
"connectedTo": "Connected to {{name}}",
|
|
1440
|
-
"continueWith": "Continue with {{provider}}",
|
|
1441
|
-
"createAccountDescription": "Create an account to manage your media servers",
|
|
1442
|
-
"createAccountFailed": "Failed to create account",
|
|
1443
|
-
"createAccountHeading": "Create your account to get started",
|
|
1444
|
-
"displayNamePlaceholder": "Choose a display name",
|
|
1445
|
-
"emailPlaceholder": "your@email.com",
|
|
1446
|
-
"enterClaimCode": "Enter Claim Code",
|
|
1447
|
-
"identifierPlaceholder": "Username or email address",
|
|
1448
|
-
"invalidCredentials": "Invalid email or password",
|
|
1449
|
-
"localDisabledHint": "Local sign-in is disabled for this instance. Ask an admin to run `enable-local-login` from the Tracearr CLI to re-enable it.",
|
|
1450
|
-
"loginFailed": "Login failed",
|
|
1451
|
-
"oidcError": "Single sign-on failed. Please try again or use another sign-in method.",
|
|
1452
|
-
"passwordPlaceholder": "At least 8 characters",
|
|
1453
|
-
"plexAuthFailed": "Plex authentication failed",
|
|
1454
|
-
"plexStartFailed": "Failed to start Plex login",
|
|
1455
|
-
"reopenPlexLogin": "Reopen Plex Login",
|
|
1456
|
-
"selectPlexServer": "Select your Plex server",
|
|
1457
|
-
"serverConnectFailed": "Failed to connect to server",
|
|
1458
|
-
"setupNote": "After creating your account, you'll add your Plex or Jellyfin servers from Settings.",
|
|
1459
|
-
"signInDescription": "Sign in to access your dashboard",
|
|
1460
|
-
"signInHeading": "Sign in to your account",
|
|
1461
|
-
"signupFailed": "Signup failed",
|
|
1462
|
-
"tagline": "Tracearr - Stream access management",
|
|
1463
|
-
"title": "Tracearr",
|
|
1464
|
-
"username": "Username",
|
|
1465
|
-
"usernameOrEmail": "Username or Email",
|
|
1466
|
-
"usernamePlaceholder": "yourusername",
|
|
1467
|
-
"validateClaimCode": "Validate Claim Code",
|
|
1468
|
-
"waitingForPlex": "Waiting for Plex authorization...",
|
|
1469
|
-
"yourPasswordPlaceholder": "Your password"
|
|
1470
|
-
},
|
|
1471
1618
|
"maintenance": {
|
|
1472
|
-
"
|
|
1473
|
-
"initStep": {
|
|
1474
|
-
"migrations": "Applying database migrations",
|
|
1475
|
-
"services": "Starting services",
|
|
1476
|
-
"timescale": "Preparing TimescaleDB (this can take a while after an upgrade)"
|
|
1477
|
-
},
|
|
1478
|
-
"interruptionDescription": "One or more backend services have become unavailable. This page will automatically refresh when connectivity is restored.",
|
|
1619
|
+
"startingTitle": "Tracearr is starting up...",
|
|
1479
1620
|
"interruptionTitle": "Service interruption",
|
|
1621
|
+
"startingDescription": "The server is waiting for backend services to become available. This page will automatically refresh when everything is ready.",
|
|
1622
|
+
"interruptionDescription": "One or more backend services have become unavailable. This page will automatically refresh when connectivity is restored.",
|
|
1623
|
+
"unreachable": "Can't reach the Tracearr server right now. Live updates are paused and will resume on their own.",
|
|
1624
|
+
"restoreTitle": "Restoring from backup...",
|
|
1480
1625
|
"restoreFailed": "Restore failed",
|
|
1481
1626
|
"restorePhase": {
|
|
1482
|
-
"
|
|
1627
|
+
"validating": "Validating backup",
|
|
1483
1628
|
"creating_restore_point": "Creating restore point",
|
|
1484
|
-
"
|
|
1485
|
-
"restarting": "Restarting services",
|
|
1629
|
+
"shutting_down": "Shutting down services",
|
|
1486
1630
|
"restoring_database": "Restoring database",
|
|
1487
1631
|
"running_migrations": "Running migrations",
|
|
1488
|
-
"
|
|
1489
|
-
"
|
|
1632
|
+
"rebuilding_aggregates": "Rebuilding aggregates",
|
|
1633
|
+
"restarting": "Restarting services",
|
|
1634
|
+
"complete": "Restore complete"
|
|
1490
1635
|
},
|
|
1491
|
-
"
|
|
1492
|
-
|
|
1493
|
-
|
|
1494
|
-
|
|
1636
|
+
"initStep": {
|
|
1637
|
+
"migrations": "Applying database migrations",
|
|
1638
|
+
"timescale": "Preparing TimescaleDB (this can take a while after an upgrade)",
|
|
1639
|
+
"services": "Starting services"
|
|
1640
|
+
},
|
|
1641
|
+
"doNotRestart": "Do not restart or stop the server while this runs. Interrupting it can leave the database half-upgraded."
|
|
1495
1642
|
},
|
|
1496
1643
|
"map": {
|
|
1497
|
-
"allActivity": "All activity",
|
|
1498
|
-
"allTypes": "All types",
|
|
1499
1644
|
"allUsers": "All users",
|
|
1500
|
-
"
|
|
1645
|
+
"allTypes": "All types",
|
|
1501
1646
|
"heatmap": "Heatmap",
|
|
1647
|
+
"circles": "Circles",
|
|
1648
|
+
"streams": "streams",
|
|
1502
1649
|
"locations": "locations",
|
|
1503
|
-
"
|
|
1650
|
+
"allActivity": "All activity",
|
|
1651
|
+
"basemapMissing": "Basemap not installed"
|
|
1652
|
+
},
|
|
1653
|
+
"devices": {
|
|
1654
|
+
"title": "Device Compatibility",
|
|
1655
|
+
"description": "See which devices direct play vs transcode each codec",
|
|
1656
|
+
"analyzedSessions": "Analyzed Sessions",
|
|
1657
|
+
"analyzedSessionsTooltip": "Sessions in device + codec combinations with at least {{count}} sessions and a known codec. Rare combinations and sessions with no codec info aren't counted.",
|
|
1658
|
+
"directPlayRate": "Direct Play Rate",
|
|
1659
|
+
"videoAndAudio": "Video + audio",
|
|
1660
|
+
"uniqueDevices": "Unique Devices",
|
|
1661
|
+
"uniqueCodecs": "Unique Codecs",
|
|
1662
|
+
"deviceHealth": "Device Health",
|
|
1663
|
+
"deviceHealthDesc": "Direct play rate by device type",
|
|
1664
|
+
"transcodeHotspots": "Transcode Hotspots",
|
|
1665
|
+
"transcodeHotspotsDesc": "Combinations causing the most transcodes",
|
|
1666
|
+
"deviceAndCodec": "Device + Codec",
|
|
1667
|
+
"transcodes": "Transcodes",
|
|
1668
|
+
"pctOfTotal": "% of Total",
|
|
1669
|
+
"noTranscodeHotspots": "No transcode hotspots",
|
|
1670
|
+
"compatibilityMatrix": "Compatibility Matrix",
|
|
1671
|
+
"compatibilityMatrixDesc": "Direct play rates by device and video codec. Sorted by session volume.",
|
|
1672
|
+
"noDeviceDataPeriod": "No device data in this period",
|
|
1673
|
+
"legend": "Legend:",
|
|
1674
|
+
"directPlayHigh": "≥80% Direct",
|
|
1675
|
+
"directPlayMid": "50-79%",
|
|
1676
|
+
"directPlayLow": "<50%",
|
|
1677
|
+
"topTranscodingUsers": "Top Transcoding Users",
|
|
1678
|
+
"topTranscodingUsersDesc": "Users causing the most transcodes on your server",
|
|
1679
|
+
"noTranscodingUsers": "No transcoding users found"
|
|
1680
|
+
},
|
|
1681
|
+
"statsBandwidth": {
|
|
1682
|
+
"title": "Bandwidth",
|
|
1683
|
+
"description": "Streaming bandwidth usage and bitrate analysis",
|
|
1684
|
+
"dataTransferred": "Data Transferred",
|
|
1685
|
+
"avgBitrate": "Avg Bitrate",
|
|
1686
|
+
"avgBitrateMbps": "Avg Bitrate (Mbps)",
|
|
1687
|
+
"peakBitrate": "Peak: {{value}} Mbps",
|
|
1688
|
+
"totalWatchTime": "Total Watch Time",
|
|
1689
|
+
"uniqueUsers": "Unique Users",
|
|
1690
|
+
"dailyUsage": "Daily Bandwidth Usage",
|
|
1691
|
+
"dailyUsageDesc": "Average bitrate and session count over time",
|
|
1692
|
+
"topUsers": "Top Bandwidth Users",
|
|
1693
|
+
"topUsersDesc": "Users consuming the most bandwidth",
|
|
1694
|
+
"noData": "No bandwidth data available"
|
|
1695
|
+
},
|
|
1696
|
+
"statsUsers": {
|
|
1697
|
+
"noActivity": "No activity yet",
|
|
1698
|
+
"noActivityDesc": "Start streaming to see your top users here",
|
|
1699
|
+
"top3": "Top 3",
|
|
1700
|
+
"runnersUp": "Runners Up"
|
|
1701
|
+
},
|
|
1702
|
+
"plexCallback": {
|
|
1703
|
+
"authComplete": "Authentication complete",
|
|
1704
|
+
"windowWillClose": "This window will close automatically..."
|
|
1705
|
+
},
|
|
1706
|
+
"apiDocs": {
|
|
1707
|
+
"backToSettings": "Back to Settings",
|
|
1708
|
+
"apiKeyAutoLoaded": "API key auto-loaded",
|
|
1709
|
+
"noApiKey": "No API key generated - create one in Settings to test endpoints",
|
|
1710
|
+
"versionSwitcherLabel": "API documentation version",
|
|
1711
|
+
"versionV1": "API v1",
|
|
1712
|
+
"versionV2": "API v2",
|
|
1713
|
+
"specLoadError": "Failed to load the API specification. Check your API key and try again."
|
|
1714
|
+
},
|
|
1715
|
+
"debug": {
|
|
1716
|
+
"title": "Debug Tools",
|
|
1717
|
+
"description": "Administrative utilities for troubleshooting and data management",
|
|
1718
|
+
"overview": "Overview",
|
|
1719
|
+
"librarySnapshots": "Library Snapshots",
|
|
1720
|
+
"tasks": "Tasks",
|
|
1721
|
+
"logs": "Logs",
|
|
1722
|
+
"plexAccounts": "Plex Accounts",
|
|
1723
|
+
"terminations": "Terminations",
|
|
1724
|
+
"libraryItems": "Library Items",
|
|
1725
|
+
"environment": "Environment",
|
|
1726
|
+
"systemInformation": "System Information",
|
|
1727
|
+
"cpu": "CPU",
|
|
1728
|
+
"memory": "Memory",
|
|
1729
|
+
"uptime": "Uptime",
|
|
1730
|
+
"database": "Database",
|
|
1731
|
+
"databaseDesc": "Database size and table statistics",
|
|
1732
|
+
"totalSize": "Total Size",
|
|
1733
|
+
"maintenance": "Maintenance",
|
|
1734
|
+
"destructiveActions": "Destructive Actions",
|
|
1735
|
+
"refreshAggregates": "Refresh Aggregates",
|
|
1736
|
+
"clearStuckJobs": "Clear Stuck Jobs",
|
|
1737
|
+
"obliterateAllJobs": "Obliterate All Jobs",
|
|
1738
|
+
"clearQueryCache": "Clear Query Cache",
|
|
1739
|
+
"clearMobileDevices": "Clear Mobile Devices",
|
|
1740
|
+
"clearViolations": "Clear Violations",
|
|
1741
|
+
"clearAutomations": "Delete all automations and runs",
|
|
1742
|
+
"clearAutomationsConfirm": "Delete every automation and all of their runs?",
|
|
1743
|
+
"clearTerminationLogs": "Clear Termination Logs",
|
|
1744
|
+
"clearLibraryCache": "Clear Library Cache",
|
|
1745
|
+
"clearSessions": "Clear Sessions",
|
|
1746
|
+
"clearUsers": "Clear Users",
|
|
1747
|
+
"clearServers": "Clear Servers",
|
|
1748
|
+
"factoryReset": "Factory Reset",
|
|
1749
|
+
"manageSnapshots": "Manage library snapshots used for Storage Trend and Quality Evolution charts",
|
|
1750
|
+
"suspiciousOnly": "Suspicious only",
|
|
1751
|
+
"load": "Load",
|
|
1752
|
+
"noSuspiciousSnapshots": "No suspicious snapshots found",
|
|
1753
|
+
"clickLoadToView": "Click \"Load\" to view snapshots",
|
|
1754
|
+
"deleteSelected": "Delete Selected",
|
|
1755
|
+
"deleteAllSuspicious": "Delete All Suspicious",
|
|
1756
|
+
"suspicious": "Suspicious",
|
|
1757
|
+
"ok": "OK",
|
|
1758
|
+
"selected": "selected",
|
|
1759
|
+
"snapshots": "snapshot(s)",
|
|
1760
|
+
"of": "of",
|
|
1761
|
+
"logExplorerUnavailable": "Log explorer is only available in Docker environments"
|
|
1504
1762
|
},
|
|
1505
1763
|
"media": {
|
|
1506
|
-
"
|
|
1507
|
-
"
|
|
1508
|
-
|
|
1764
|
+
"landing": {
|
|
1765
|
+
"title": "Media",
|
|
1766
|
+
"lens": {
|
|
1767
|
+
"label": "Viewing as",
|
|
1768
|
+
"allUsers": "All users"
|
|
1509
1769
|
},
|
|
1510
|
-
"
|
|
1770
|
+
"shelves": {
|
|
1771
|
+
"recentlyAddedMovies": "Recently Added Movies",
|
|
1772
|
+
"recentlyAddedShows": "Recently Added Shows",
|
|
1773
|
+
"mostPopularMovies": "Most Popular Movies",
|
|
1774
|
+
"mostPopularShows": "Most Popular Shows",
|
|
1775
|
+
"emptyRecentlyAdded": "Nothing added in this period",
|
|
1776
|
+
"emptyMostPopular": "No plays in this period",
|
|
1777
|
+
"captionRecentlyAdded": "deduped across servers",
|
|
1778
|
+
"captionMostPopular": {
|
|
1779
|
+
"day": "today",
|
|
1780
|
+
"week": "last 7 days",
|
|
1781
|
+
"month": "last 30 days",
|
|
1782
|
+
"year": "last 12 months",
|
|
1783
|
+
"all": "all time",
|
|
1784
|
+
"custom": "selected date range"
|
|
1785
|
+
}
|
|
1786
|
+
},
|
|
1787
|
+
"card": {
|
|
1788
|
+
"newEpisodes_one": "{{count}} new episode",
|
|
1789
|
+
"newEpisodes_other": "{{count}} new episodes",
|
|
1790
|
+
"addedAgo": "added {{date}}",
|
|
1791
|
+
"addedCompactAgo": "added {{age}} ago",
|
|
1792
|
+
"newEpisodesChip": "{{count}} new"
|
|
1793
|
+
},
|
|
1794
|
+
"deadWeight": {
|
|
1795
|
+
"title": "Dead Weight",
|
|
1796
|
+
"summary": "{{count}} never-watched titles · {{size}}",
|
|
1797
|
+
"empty": "Nothing to reclaim - everything in your library has been watched",
|
|
1511
1798
|
"columns": {
|
|
1799
|
+
"poster": "Poster",
|
|
1800
|
+
"title": "Title",
|
|
1801
|
+
"size": "Size",
|
|
1512
1802
|
"added": "Added",
|
|
1513
|
-
"
|
|
1514
|
-
"library": "Library",
|
|
1515
|
-
"quality": "Quality",
|
|
1516
|
-
"server": "Server",
|
|
1517
|
-
"size": "Size"
|
|
1803
|
+
"servers": "Servers"
|
|
1518
1804
|
},
|
|
1519
|
-
"
|
|
1520
|
-
"
|
|
1521
|
-
|
|
1522
|
-
|
|
1805
|
+
"viewAll": "View all",
|
|
1806
|
+
"viewAllTooltip": "Coming soon"
|
|
1807
|
+
},
|
|
1808
|
+
"loadError": "Couldn't load your media library"
|
|
1809
|
+
},
|
|
1810
|
+
"movies": {
|
|
1811
|
+
"title": "Movies"
|
|
1812
|
+
},
|
|
1813
|
+
"shows": {
|
|
1814
|
+
"title": "Shows"
|
|
1815
|
+
},
|
|
1816
|
+
"genres": {
|
|
1817
|
+
"title": "Genres",
|
|
1818
|
+
"subtitle": "Plays and watch time by genre, across every server in view.",
|
|
1819
|
+
"chart": {
|
|
1820
|
+
"title": "Plays by genre",
|
|
1821
|
+
"valueLabel": "Plays",
|
|
1822
|
+
"itemCount_one": "{{count}} title",
|
|
1823
|
+
"itemCount_other": "{{count}} titles",
|
|
1824
|
+
"ariaLabel": "Bar chart of plays by genre, sorted highest to lowest. The full breakdown is available in the table below."
|
|
1825
|
+
},
|
|
1826
|
+
"table": {
|
|
1827
|
+
"title": "Genre breakdown",
|
|
1828
|
+
"columns": {
|
|
1829
|
+
"genre": "Genre",
|
|
1830
|
+
"items": "Items",
|
|
1831
|
+
"plays": "Plays",
|
|
1832
|
+
"watchTime": "Watch time"
|
|
1833
|
+
},
|
|
1834
|
+
"browseMovies": "Browse {{genre}} movies",
|
|
1835
|
+
"browseShows": "Browse {{genre}} shows"
|
|
1836
|
+
},
|
|
1837
|
+
"empty": {
|
|
1838
|
+
"title": "No genres captured yet",
|
|
1839
|
+
"description": "Genres come from your media servers' metadata sync. Check back after the next sync completes."
|
|
1840
|
+
},
|
|
1841
|
+
"loadError": "Couldn't load genres"
|
|
1842
|
+
},
|
|
1843
|
+
"detail": {
|
|
1844
|
+
"title": "Media Details",
|
|
1845
|
+
"breadcrumb": {
|
|
1846
|
+
"ariaLabel": "Breadcrumb"
|
|
1847
|
+
},
|
|
1848
|
+
"notFound": {
|
|
1849
|
+
"title": "Media not found",
|
|
1850
|
+
"message": "This title doesn't exist or you don't have access to it.",
|
|
1851
|
+
"backLink": "Back to Media"
|
|
1523
1852
|
},
|
|
1524
1853
|
"hero": {
|
|
1525
|
-
"
|
|
1526
|
-
|
|
1527
|
-
"
|
|
1854
|
+
"loadError": "Couldn't load this title",
|
|
1855
|
+
"meta": {
|
|
1856
|
+
"seasons_one": "{{count}} season",
|
|
1857
|
+
"seasons_other": "{{count}} seasons",
|
|
1858
|
+
"episodes_one": "{{count}} episode",
|
|
1859
|
+
"episodes_other": "{{count}} episodes"
|
|
1528
1860
|
},
|
|
1529
1861
|
"availability": {
|
|
1530
1862
|
"added": "added {{date}}",
|
|
1531
1863
|
"addedRemoved": "added {{added}} – removed {{removed}}",
|
|
1532
1864
|
"replaced": "replaced {{date}}"
|
|
1533
1865
|
},
|
|
1534
|
-
"loadError": "Couldn't load this title",
|
|
1535
|
-
"meta": {
|
|
1536
|
-
"episodes_one": "{{count}} episode",
|
|
1537
|
-
"episodes_other": "{{count}} episodes",
|
|
1538
|
-
"seasons_one": "{{count}} season",
|
|
1539
|
-
"seasons_other": "{{count}} seasons"
|
|
1540
|
-
},
|
|
1541
1866
|
"removedEverywhere": {
|
|
1542
1867
|
"caption": "No longer available on any connected server"
|
|
1543
|
-
}
|
|
1544
|
-
},
|
|
1545
|
-
"history": {
|
|
1546
|
-
"columns": {
|
|
1547
|
-
"content": "Content",
|
|
1548
|
-
"date": "Date",
|
|
1549
|
-
"duration": "Duration",
|
|
1550
|
-
"server": "Server",
|
|
1551
|
-
"user": "User"
|
|
1552
1868
|
},
|
|
1553
|
-
"
|
|
1554
|
-
|
|
1555
|
-
|
|
1556
|
-
|
|
1557
|
-
"watched": "Watched"
|
|
1869
|
+
"actions": {
|
|
1870
|
+
"fullHistory": "Full history",
|
|
1871
|
+
"openOnServer": "Open on server"
|
|
1872
|
+
}
|
|
1558
1873
|
},
|
|
1559
1874
|
"kpis": {
|
|
1560
1875
|
"ariaLabel": "Watch statistics",
|
|
1561
|
-
"completion": {
|
|
1562
|
-
"detail": "{{finished}} of {{total}} finished every episode",
|
|
1563
|
-
"detailMovie": "{{finished}} of {{total}} watched to completion",
|
|
1564
|
-
"label": "Avg completion"
|
|
1565
|
-
},
|
|
1566
|
-
"completionLoadError": "Couldn't load completion",
|
|
1567
1876
|
"loadError": "Couldn't load watch statistics",
|
|
1877
|
+
"completionLoadError": "Couldn't load completion",
|
|
1568
1878
|
"plays": {
|
|
1569
|
-
"
|
|
1570
|
-
"
|
|
1879
|
+
"label": "Plays, all time",
|
|
1880
|
+
"caption": "resume chains, short sessions excluded"
|
|
1881
|
+
},
|
|
1882
|
+
"watchTime": {
|
|
1883
|
+
"label": "Watch time",
|
|
1884
|
+
"detail": "+{{hours}}h in the last 30 days"
|
|
1571
1885
|
},
|
|
1572
1886
|
"viewers": {
|
|
1573
|
-
"
|
|
1574
|
-
"
|
|
1887
|
+
"label": "Viewers",
|
|
1888
|
+
"detail": "across all servers"
|
|
1575
1889
|
},
|
|
1576
|
-
"
|
|
1577
|
-
"
|
|
1578
|
-
"
|
|
1890
|
+
"completion": {
|
|
1891
|
+
"label": "Avg completion",
|
|
1892
|
+
"detail": "{{finished}} of {{total}} finished every episode",
|
|
1893
|
+
"detailMovie": "{{finished}} of {{total}} watched to completion"
|
|
1579
1894
|
}
|
|
1580
1895
|
},
|
|
1581
|
-
"
|
|
1582
|
-
"
|
|
1583
|
-
"
|
|
1584
|
-
"
|
|
1585
|
-
|
|
1586
|
-
|
|
1896
|
+
"watchers": {
|
|
1897
|
+
"title": "Watchers",
|
|
1898
|
+
"loadError": "Couldn't load watchers",
|
|
1899
|
+
"empty": "No one has watched this yet.",
|
|
1900
|
+
"lastWatchedAgo": "{{age}} ago",
|
|
1901
|
+
"completionLabel": "{{percent}}% complete",
|
|
1587
1902
|
"columns": {
|
|
1588
|
-
"
|
|
1903
|
+
"user": "User",
|
|
1589
1904
|
"plays": "Plays",
|
|
1590
|
-
"
|
|
1591
|
-
|
|
1592
|
-
|
|
1593
|
-
|
|
1594
|
-
"title": "Platforms",
|
|
1595
|
-
"unknown": "Unknown"
|
|
1905
|
+
"episodes": "Episodes",
|
|
1906
|
+
"completion": "Completion",
|
|
1907
|
+
"lastWatched": "Last watched"
|
|
1908
|
+
}
|
|
1596
1909
|
},
|
|
1597
1910
|
"seasons": {
|
|
1911
|
+
"title": "Seasons",
|
|
1912
|
+
"loadError": "Couldn't load season data",
|
|
1598
1913
|
"empty": "No season data yet",
|
|
1599
1914
|
"episodeCount_one": "{{count}} episode",
|
|
1600
1915
|
"episodeCount_other": "{{count}} episodes",
|
|
1916
|
+
"watchedPct": "{{percent}}% watched",
|
|
1917
|
+
"stripSummary": "{{season}}: {{percent}}% watched",
|
|
1601
1918
|
"episodeLabel": {
|
|
1919
|
+
"watched": "{{code}}: watched",
|
|
1602
1920
|
"partial": "{{code}}: partially watched",
|
|
1603
|
-
"unwatched": "{{code}}: unwatched"
|
|
1604
|
-
|
|
1605
|
-
},
|
|
1606
|
-
"loadError": "Couldn't load season data",
|
|
1607
|
-
"stripSummary": "{{season}}: {{percent}}% watched",
|
|
1608
|
-
"title": "Seasons",
|
|
1609
|
-
"watchedPct": "{{percent}}% watched"
|
|
1921
|
+
"unwatched": "{{code}}: unwatched"
|
|
1922
|
+
}
|
|
1610
1923
|
},
|
|
1611
|
-
"
|
|
1612
|
-
|
|
1613
|
-
"
|
|
1614
|
-
|
|
1615
|
-
|
|
1616
|
-
|
|
1924
|
+
"platforms": {
|
|
1925
|
+
"title": "Platforms",
|
|
1926
|
+
"loadError": "Couldn't load platform breakdown",
|
|
1927
|
+
"empty": "No platform data yet",
|
|
1928
|
+
"unknown": "Unknown",
|
|
1929
|
+
"columns": {
|
|
1930
|
+
"platform": "Platform",
|
|
1617
1931
|
"plays": "Plays",
|
|
1618
|
-
"
|
|
1619
|
-
}
|
|
1620
|
-
"completionLabel": "{{percent}}% complete",
|
|
1621
|
-
"empty": "No one has watched this yet.",
|
|
1622
|
-
"lastWatchedAgo": "{{age}} ago",
|
|
1623
|
-
"loadError": "Couldn't load watchers",
|
|
1624
|
-
"title": "Watchers"
|
|
1625
|
-
}
|
|
1626
|
-
},
|
|
1627
|
-
"genres": {
|
|
1628
|
-
"chart": {
|
|
1629
|
-
"ariaLabel": "Bar chart of plays by genre, sorted highest to lowest. The full breakdown is available in the table below.",
|
|
1630
|
-
"itemCount_one": "{{count}} title",
|
|
1631
|
-
"itemCount_other": "{{count}} titles",
|
|
1632
|
-
"title": "Plays by genre",
|
|
1633
|
-
"valueLabel": "Plays"
|
|
1932
|
+
"watchTime": "Watch time"
|
|
1933
|
+
}
|
|
1634
1934
|
},
|
|
1635
|
-
"
|
|
1636
|
-
"
|
|
1637
|
-
"
|
|
1935
|
+
"history": {
|
|
1936
|
+
"title": "History",
|
|
1937
|
+
"loadError": "Couldn't load history",
|
|
1938
|
+
"empty": "No plays recorded yet",
|
|
1939
|
+
"watched": "Watched",
|
|
1940
|
+
"notWatched": "Not finished",
|
|
1941
|
+
"columns": {
|
|
1942
|
+
"date": "Date",
|
|
1943
|
+
"user": "User",
|
|
1944
|
+
"content": "Content",
|
|
1945
|
+
"server": "Server",
|
|
1946
|
+
"duration": "Duration"
|
|
1947
|
+
}
|
|
1638
1948
|
},
|
|
1639
|
-
"
|
|
1640
|
-
|
|
1641
|
-
|
|
1642
|
-
"
|
|
1643
|
-
"browseShows": "Browse {{genre}} shows",
|
|
1949
|
+
"copies": {
|
|
1950
|
+
"title": "Copies",
|
|
1951
|
+
"loadError": "Couldn't load copies",
|
|
1952
|
+
"unknownLibrary": "Unknown library",
|
|
1644
1953
|
"columns": {
|
|
1645
|
-
"
|
|
1646
|
-
"
|
|
1647
|
-
"
|
|
1648
|
-
"
|
|
1954
|
+
"server": "Server",
|
|
1955
|
+
"library": "Library",
|
|
1956
|
+
"quality": "Quality",
|
|
1957
|
+
"episodes": "Episodes",
|
|
1958
|
+
"size": "Size",
|
|
1959
|
+
"added": "Added"
|
|
1649
1960
|
},
|
|
1650
|
-
"
|
|
1961
|
+
"versionLabel": "File {{index}}"
|
|
1962
|
+
}
|
|
1963
|
+
},
|
|
1964
|
+
"posterCard": {
|
|
1965
|
+
"rankSuffix": ", rank {{rank}}",
|
|
1966
|
+
"onServers": "On {{servers}}",
|
|
1967
|
+
"addedLabel": "Added {{date}}",
|
|
1968
|
+
"plays_one": "{{count}} play",
|
|
1969
|
+
"plays_other": "{{count}} plays",
|
|
1970
|
+
"viewers_one": "{{count}} viewer",
|
|
1971
|
+
"viewers_other": "{{count}} viewers",
|
|
1972
|
+
"watchedState": {
|
|
1973
|
+
"watched": "Watched",
|
|
1974
|
+
"partial": "Partially watched",
|
|
1975
|
+
"watchedByOthers": "Watched by others",
|
|
1976
|
+
"watchedByYou": "Watched by you"
|
|
1651
1977
|
},
|
|
1652
|
-
"
|
|
1978
|
+
"tileLabel": {
|
|
1979
|
+
"added": "added",
|
|
1980
|
+
"plays": "plays",
|
|
1981
|
+
"viewers": "viewers",
|
|
1982
|
+
"resolution": "resolution"
|
|
1983
|
+
},
|
|
1984
|
+
"rankChip": "#{{rank}}",
|
|
1985
|
+
"playsCompact_one": "{{compact}} play",
|
|
1986
|
+
"playsCompact_other": "{{compact}} plays",
|
|
1987
|
+
"versionsChip": "{{count}}×",
|
|
1988
|
+
"versions_one": "{{count}} version",
|
|
1989
|
+
"versions_other": "{{count}} versions",
|
|
1990
|
+
"moreServers": "+{{count}} more"
|
|
1653
1991
|
},
|
|
1654
1992
|
"grid": {
|
|
1655
|
-
"clearJumpAction": "Clear",
|
|
1656
|
-
"emptyAnchored": "Nothing at or after \"{{letter}}\" under these filters",
|
|
1657
|
-
"emptyFilter": "No titles match these filters",
|
|
1658
|
-
"emptySearch": "No titles match \"{{query}}\"",
|
|
1659
|
-
"loadError": "Couldn't load the catalog",
|
|
1660
|
-
"loaderError": "Couldn't load more titles",
|
|
1661
|
-
"retry": "Retry",
|
|
1662
|
-
"scrubber": {
|
|
1663
|
-
"current": "Letter {{letter}}",
|
|
1664
|
-
"label": "Jump to letter"
|
|
1665
|
-
},
|
|
1666
|
-
"showAll": "Show all",
|
|
1667
|
-
"showingFrom": "Showing from {{letter}}",
|
|
1668
1993
|
"toolbar": {
|
|
1669
1994
|
"ariaLabel": "Filters and sort",
|
|
1670
|
-
"
|
|
1671
|
-
"
|
|
1672
|
-
"
|
|
1673
|
-
"
|
|
1995
|
+
"typeLabel": "Media type",
|
|
1996
|
+
"moviesToggle": "Movies",
|
|
1997
|
+
"showsToggle": "Shows",
|
|
1998
|
+
"searchPlaceholder": "Search titles…",
|
|
1999
|
+
"searchLabel": "Search titles",
|
|
2000
|
+
"removeFilter": "Remove {{label}} filter",
|
|
1674
2001
|
"filtersLabel": "Filters",
|
|
1675
2002
|
"filtersSheetTitle": "Filters",
|
|
1676
|
-
"
|
|
1677
|
-
"
|
|
1678
|
-
"
|
|
1679
|
-
|
|
2003
|
+
"done": "Done",
|
|
2004
|
+
"watchedLabel": "Watched",
|
|
2005
|
+
"watched": {
|
|
2006
|
+
"all": "All",
|
|
2007
|
+
"watched": "Watched",
|
|
2008
|
+
"partial": "Partially watched",
|
|
2009
|
+
"unwatched": "Unwatched"
|
|
2010
|
+
},
|
|
2011
|
+
"unwatchedByLens": "Unwatched by {{name}}",
|
|
2012
|
+
"resolutionLabel": "Resolution",
|
|
2013
|
+
"resolutionAll": "Any resolution",
|
|
1680
2014
|
"hdrLabel": "Dynamic range",
|
|
2015
|
+
"hdrAll": "Any",
|
|
1681
2016
|
"hdrOnly": "HDR only",
|
|
1682
|
-
"
|
|
1683
|
-
"
|
|
1684
|
-
"
|
|
1685
|
-
"removeFilter": "Remove {{label}} filter",
|
|
1686
|
-
"resolutionAll": "Any resolution",
|
|
1687
|
-
"resolutionLabel": "Resolution",
|
|
1688
|
-
"searchLabel": "Search titles",
|
|
1689
|
-
"searchPlaceholder": "Search titles…",
|
|
1690
|
-
"serverAll": "Any server",
|
|
2017
|
+
"hdrChip": "HDR",
|
|
2018
|
+
"genreLabel": "Genre",
|
|
2019
|
+
"genreAll": "Any genre",
|
|
1691
2020
|
"serverLabel": "Server",
|
|
1692
|
-
"
|
|
2021
|
+
"serverAll": "Any server",
|
|
2022
|
+
"libraryLabel": "Library",
|
|
2023
|
+
"libraryAll": "Any library",
|
|
2024
|
+
"yearFromLabel": "From year",
|
|
2025
|
+
"yearToLabel": "To year",
|
|
2026
|
+
"sizeGbMinLabel": "Min size (GB)",
|
|
2027
|
+
"sizeGbMaxLabel": "Max size (GB)",
|
|
1693
2028
|
"sizeChipAtLeast": "≥ {{min}} GB",
|
|
1694
2029
|
"sizeChipAtMost": "≤ {{max}} GB",
|
|
1695
2030
|
"sizeChipRange": "{{min}}–{{max}} GB",
|
|
1696
|
-
"
|
|
1697
|
-
"sizeGbMinLabel": "Min size (GB)",
|
|
2031
|
+
"sortLabel": "Sort",
|
|
1698
2032
|
"sort": {
|
|
2033
|
+
"title": "Title A–Z",
|
|
1699
2034
|
"added": "Recently added",
|
|
2035
|
+
"year": "Year",
|
|
1700
2036
|
"plays": "Plays",
|
|
1701
|
-
"title": "Title A–Z",
|
|
1702
|
-
"viewers": "Viewers",
|
|
1703
2037
|
"watch_time": "Watch time",
|
|
1704
|
-
"
|
|
1705
|
-
},
|
|
1706
|
-
"sortLabel": "Sort",
|
|
1707
|
-
"typeLabel": "Media type",
|
|
1708
|
-
"unwatchedByLens": "Unwatched by {{name}}",
|
|
1709
|
-
"watched": {
|
|
1710
|
-
"all": "All",
|
|
1711
|
-
"partial": "Partially watched",
|
|
1712
|
-
"unwatched": "Unwatched",
|
|
1713
|
-
"watched": "Watched"
|
|
2038
|
+
"viewers": "Viewers"
|
|
1714
2039
|
},
|
|
1715
|
-
"
|
|
1716
|
-
"
|
|
1717
|
-
"
|
|
1718
|
-
}
|
|
1719
|
-
},
|
|
1720
|
-
"landing": {
|
|
1721
|
-
"card": {
|
|
1722
|
-
"addedAgo": "added {{date}}",
|
|
1723
|
-
"addedCompactAgo": "added {{age}} ago",
|
|
1724
|
-
"newEpisodesChip": "{{count}} new",
|
|
1725
|
-
"newEpisodes_one": "{{count}} new episode",
|
|
1726
|
-
"newEpisodes_other": "{{count}} new episodes"
|
|
1727
|
-
},
|
|
1728
|
-
"deadWeight": {
|
|
1729
|
-
"columns": {
|
|
1730
|
-
"added": "Added",
|
|
1731
|
-
"poster": "Poster",
|
|
1732
|
-
"servers": "Servers",
|
|
1733
|
-
"size": "Size",
|
|
1734
|
-
"title": "Title"
|
|
1735
|
-
},
|
|
1736
|
-
"empty": "Nothing to reclaim - everything in your library has been watched",
|
|
1737
|
-
"summary": "{{count}} never-watched titles · {{size}}",
|
|
1738
|
-
"title": "Dead Weight",
|
|
1739
|
-
"viewAll": "View all",
|
|
1740
|
-
"viewAllTooltip": "Coming soon"
|
|
1741
|
-
},
|
|
1742
|
-
"lens": {
|
|
1743
|
-
"allUsers": "All users",
|
|
1744
|
-
"label": "Viewing as"
|
|
1745
|
-
},
|
|
1746
|
-
"loadError": "Couldn't load your media library",
|
|
1747
|
-
"shelves": {
|
|
1748
|
-
"captionMostPopular": {
|
|
1749
|
-
"all": "all time",
|
|
1750
|
-
"custom": "selected date range",
|
|
1751
|
-
"day": "today",
|
|
1752
|
-
"month": "last 30 days",
|
|
1753
|
-
"week": "last 7 days",
|
|
1754
|
-
"year": "last 12 months"
|
|
1755
|
-
},
|
|
1756
|
-
"captionRecentlyAdded": "deduped across servers",
|
|
1757
|
-
"emptyMostPopular": "No plays in this period",
|
|
1758
|
-
"emptyRecentlyAdded": "Nothing added in this period",
|
|
1759
|
-
"mostPopularMovies": "Most Popular Movies",
|
|
1760
|
-
"mostPopularShows": "Most Popular Shows",
|
|
1761
|
-
"recentlyAddedMovies": "Recently Added Movies",
|
|
1762
|
-
"recentlyAddedShows": "Recently Added Shows"
|
|
1763
|
-
},
|
|
1764
|
-
"title": "Media"
|
|
1765
|
-
},
|
|
1766
|
-
"movies": {
|
|
1767
|
-
"title": "Movies"
|
|
1768
|
-
},
|
|
1769
|
-
"posterCard": {
|
|
1770
|
-
"addedLabel": "Added {{date}}",
|
|
1771
|
-
"moreServers": "+{{count}} more",
|
|
1772
|
-
"onServers": "On {{servers}}",
|
|
1773
|
-
"playsCompact_one": "{{compact}} play",
|
|
1774
|
-
"playsCompact_other": "{{compact}} plays",
|
|
1775
|
-
"plays_one": "{{count}} play",
|
|
1776
|
-
"plays_other": "{{count}} plays",
|
|
1777
|
-
"rankChip": "#{{rank}}",
|
|
1778
|
-
"rankSuffix": ", rank {{rank}}",
|
|
1779
|
-
"tileLabel": {
|
|
1780
|
-
"added": "added",
|
|
1781
|
-
"plays": "plays",
|
|
1782
|
-
"resolution": "resolution",
|
|
1783
|
-
"viewers": "viewers"
|
|
1784
|
-
},
|
|
1785
|
-
"versionsChip": "{{count}}×",
|
|
1786
|
-
"versions_one": "{{count}} version",
|
|
1787
|
-
"versions_other": "{{count}} versions",
|
|
1788
|
-
"viewers_one": "{{count}} viewer",
|
|
1789
|
-
"viewers_other": "{{count}} viewers",
|
|
1790
|
-
"watchedState": {
|
|
1791
|
-
"partial": "Partially watched",
|
|
1792
|
-
"watched": "Watched",
|
|
1793
|
-
"watchedByOthers": "Watched by others",
|
|
1794
|
-
"watchedByYou": "Watched by you"
|
|
1795
|
-
}
|
|
1796
|
-
},
|
|
1797
|
-
"shows": {
|
|
1798
|
-
"title": "Shows"
|
|
1799
|
-
}
|
|
1800
|
-
},
|
|
1801
|
-
"notFound": {
|
|
1802
|
-
"description": "The page you're looking for doesn't exist or has been moved.",
|
|
1803
|
-
"heading": "Page Not Found",
|
|
1804
|
-
"title": "404"
|
|
1805
|
-
},
|
|
1806
|
-
"plexCallback": {
|
|
1807
|
-
"authComplete": "Authentication complete",
|
|
1808
|
-
"windowWillClose": "This window will close automatically..."
|
|
1809
|
-
},
|
|
1810
|
-
"settings": {
|
|
1811
|
-
"destinations": {
|
|
1812
|
-
"add": "Add destination",
|
|
1813
|
-
"builtinNote": "Built in",
|
|
1814
|
-
"clearSecret": "Clear",
|
|
1815
|
-
"delete": "Delete",
|
|
1816
|
-
"deleteConfirm": "Delete {{name}}? Rules that send to it will be blocked until they are updated.",
|
|
1817
|
-
"description": "Where notifications go. Add as many as you like, and automations can send to any of them.",
|
|
1818
|
-
"empty": "No destinations yet.",
|
|
1819
|
-
"fields": {
|
|
1820
|
-
"apiToken": "API token",
|
|
1821
|
-
"apiUrl": "API URL",
|
|
1822
|
-
"authToken": "Auth token",
|
|
1823
|
-
"serverUrl": "Server URL",
|
|
1824
|
-
"topic": "Topic",
|
|
1825
|
-
"url": "URL",
|
|
1826
|
-
"userKey": "User key",
|
|
1827
|
-
"webhookUrl": "Webhook URL"
|
|
1828
|
-
},
|
|
1829
|
-
"hints": {
|
|
1830
|
-
"authTokenOptional": "Optional for public topics"
|
|
1831
|
-
},
|
|
1832
|
-
"ownerOnly": "Only the owner can manage notification destinations.",
|
|
1833
|
-
"pushNote": "Delivered to paired mobile devices; each device filters in its own notification settings.",
|
|
1834
|
-
"receiveViolations": "Receive violations",
|
|
1835
|
-
"receiveViolationsHint": "Send every violation to this destination",
|
|
1836
|
-
"reencrypt": "Re-enter this destination's secret",
|
|
1837
|
-
"secretSet": "Set (leave blank to keep)",
|
|
1838
|
-
"test": "Test",
|
|
1839
|
-
"testHint": "Save first to test",
|
|
1840
|
-
"testNeedsForm": "Fill in the required fields to test",
|
|
1841
|
-
"title": "Notification destinations",
|
|
1842
|
-
"types": {
|
|
1843
|
-
"apprise": "Apprise",
|
|
1844
|
-
"discord": "Discord",
|
|
1845
|
-
"gotify": "Gotify",
|
|
1846
|
-
"jsonWebhook": "Webhook (JSON)",
|
|
1847
|
-
"ntfy": "ntfy",
|
|
1848
|
-
"push": "Mobile push",
|
|
1849
|
-
"pushover": "Pushover",
|
|
1850
|
-
"webToast": "Browser toasts"
|
|
2040
|
+
"count": "{{loaded}} of {{total}} titles · {{size}}",
|
|
2041
|
+
"countTotal_one": "{{count}} title · {{size}}",
|
|
2042
|
+
"countTotal_other": "{{count}} titles · {{size}}"
|
|
1851
2043
|
},
|
|
1852
|
-
"
|
|
1853
|
-
|
|
1854
|
-
|
|
1855
|
-
},
|
|
1856
|
-
"jobs": {
|
|
1857
|
-
"lastRun": "Last run",
|
|
1858
|
-
"nextRun": "Next run",
|
|
1859
|
-
"runNow": "Run Now",
|
|
1860
|
-
"running": "Running...",
|
|
1861
|
-
"schedule": "Schedule"
|
|
1862
|
-
},
|
|
1863
|
-
"mobile": {
|
|
1864
|
-
"displayName": "Display Name",
|
|
1865
|
-
"displayNamePlaceholder": "e.g., My iPhone",
|
|
1866
|
-
"editDisplayName": "Edit Display Name",
|
|
1867
|
-
"editDisplayNameDesc": "Change how this device appears in your device list",
|
|
1868
|
-
"updating": "Updating..."
|
|
1869
|
-
},
|
|
1870
|
-
"plex": {
|
|
1871
|
-
"accountsLinked_one": "{{count}} Plex account linked",
|
|
1872
|
-
"accountsLinked_other": "{{count}} Plex accounts linked",
|
|
1873
|
-
"connectingTo": "Connecting to {{name}}...",
|
|
1874
|
-
"connectionError": {
|
|
1875
|
-
"dns": "DNS error",
|
|
1876
|
-
"http": "HTTP {{status}}",
|
|
1877
|
-
"refused": "Connection refused",
|
|
1878
|
-
"reset": "Connection reset",
|
|
1879
|
-
"timeout": "Timed out",
|
|
1880
|
-
"tls": "TLS error",
|
|
1881
|
-
"unknown": "Connection failed",
|
|
1882
|
-
"unreachable": "Host unreachable"
|
|
2044
|
+
"scrubber": {
|
|
2045
|
+
"label": "Jump to letter",
|
|
2046
|
+
"current": "Letter {{letter}}"
|
|
1883
2047
|
},
|
|
1884
|
-
"
|
|
1885
|
-
"
|
|
1886
|
-
"
|
|
1887
|
-
"
|
|
1888
|
-
"deleteServersFirst": "Delete connected servers first to unlink this account",
|
|
1889
|
-
"hideFiltered": "Hide filtered",
|
|
1890
|
-
"linkAnotherAccount": "Link Another Plex Account",
|
|
1891
|
-
"linkPlexAccount": "Link Plex Account",
|
|
1892
|
-
"linkedAccounts": "Linked Plex Accounts",
|
|
1893
|
-
"linkedAccountsDesc": "Manage the Plex accounts you can add servers from.",
|
|
1894
|
-
"linking": "Linking...",
|
|
1895
|
-
"local": "Local",
|
|
1896
|
-
"loginEnabled": "Login Enabled",
|
|
1897
|
-
"mayNotConnect": "May not connect",
|
|
1898
|
-
"moreConnections": "+{{count}} more connections",
|
|
1899
|
-
"noAccountsLinked": "No Plex Accounts Linked",
|
|
1900
|
-
"noAccountsLinkedHint": "Link a Plex account to add Plex servers to Tracearr.",
|
|
1901
|
-
"noAccountsLinkedShort": "No Plex accounts linked",
|
|
1902
|
-
"noAccountsYet": "No Plex accounts linked yet.",
|
|
1903
|
-
"noReachableConnections": "No reachable connections",
|
|
1904
|
-
"noServersFound": "No Plex servers found",
|
|
1905
|
-
"noServersFoundHint": "Make sure you own at least one Plex server",
|
|
1906
|
-
"reauthorizeAccount": "Reauthorize this Plex account",
|
|
1907
|
-
"recommended": "Recommended",
|
|
1908
|
-
"remote": "Remote",
|
|
1909
|
-
"secure": "Secure",
|
|
1910
|
-
"serversConnected_one": "{{count}} server connected",
|
|
1911
|
-
"serversConnected_other": "{{count}} servers connected",
|
|
2048
|
+
"loaderError": "Couldn't load more titles",
|
|
2049
|
+
"retry": "Retry",
|
|
2050
|
+
"clearJumpAction": "Clear",
|
|
2051
|
+
"showingFrom": "Showing from {{letter}}",
|
|
1912
2052
|
"showAll": "Show all",
|
|
1913
|
-
"
|
|
1914
|
-
"
|
|
1915
|
-
"
|
|
2053
|
+
"emptyFilter": "No titles match these filters",
|
|
2054
|
+
"emptySearch": "No titles match \"{{query}}\"",
|
|
2055
|
+
"emptyAnchored": "Nothing at or after \"{{letter}}\" under these filters",
|
|
2056
|
+
"loadError": "Couldn't load the catalog"
|
|
1916
2057
|
}
|
|
1917
|
-
},
|
|
1918
|
-
"statsBandwidth": {
|
|
1919
|
-
"avgBitrate": "Avg Bitrate",
|
|
1920
|
-
"avgBitrateMbps": "Avg Bitrate (Mbps)",
|
|
1921
|
-
"dailyUsage": "Daily Bandwidth Usage",
|
|
1922
|
-
"dailyUsageDesc": "Average bitrate and session count over time",
|
|
1923
|
-
"dataTransferred": "Data Transferred",
|
|
1924
|
-
"description": "Streaming bandwidth usage and bitrate analysis",
|
|
1925
|
-
"noData": "No bandwidth data available",
|
|
1926
|
-
"peakBitrate": "Peak: {{value}} Mbps",
|
|
1927
|
-
"title": "Bandwidth",
|
|
1928
|
-
"topUsers": "Top Bandwidth Users",
|
|
1929
|
-
"topUsersDesc": "Users consuming the most bandwidth",
|
|
1930
|
-
"totalWatchTime": "Total Watch Time",
|
|
1931
|
-
"uniqueUsers": "Unique Users"
|
|
1932
|
-
},
|
|
1933
|
-
"statsUsers": {
|
|
1934
|
-
"noActivity": "No activity yet",
|
|
1935
|
-
"noActivityDesc": "Start streaming to see your top users here",
|
|
1936
|
-
"runnersUp": "Runners Up",
|
|
1937
|
-
"top3": "Top 3"
|
|
1938
|
-
},
|
|
1939
|
-
"terminateStream": {
|
|
1940
|
-
"killStream": "Kill Stream",
|
|
1941
|
-
"messageHint": "This message will be shown to them during playback",
|
|
1942
|
-
"messageLabel": "Message to user (optional)",
|
|
1943
|
-
"messagePlaceholder": "e.g., Please don't share your account",
|
|
1944
|
-
"stopMedia": "Stop \"{{mediaTitle}}\" for @{{username}}?",
|
|
1945
|
-
"terminating": "Terminating...",
|
|
1946
|
-
"title": "Terminate Stream"
|
|
1947
|
-
},
|
|
1948
|
-
"userDetail": {
|
|
1949
|
-
"acrossAllServers": "Across all linked accounts:",
|
|
1950
|
-
"adjustTrustScore": "Adjust Trust Score",
|
|
1951
|
-
"allServers": "All servers",
|
|
1952
|
-
"backToUsers": "Back to Users",
|
|
1953
|
-
"byRule": "By / Rule",
|
|
1954
|
-
"linkedAccounts": "Linked accounts",
|
|
1955
|
-
"manual": "Manual",
|
|
1956
|
-
"noTerminationsFound": "No stream terminations for this user.",
|
|
1957
|
-
"noViolationsFound": "No violations for this user.",
|
|
1958
|
-
"overallTrust": "Overall Trust",
|
|
1959
|
-
"serverScope": "Server",
|
|
1960
|
-
"sessions": "Sessions",
|
|
1961
|
-
"splitAccount": "Split into separate user",
|
|
1962
|
-
"splitConfirmDescription": "Detach this server account into its own user. Its watch history and violations move with it.",
|
|
1963
|
-
"splitConfirmLoading": "Splitting...",
|
|
1964
|
-
"splitConfirmTitle": "Split server account",
|
|
1965
|
-
"statistics": "Statistics",
|
|
1966
|
-
"terminationHistory": "Termination History",
|
|
1967
|
-
"title": "User Details",
|
|
1968
|
-
"unknownRule": "Unknown rule",
|
|
1969
|
-
"userInfo": "User Info",
|
|
1970
|
-
"userNotFound": "User not found",
|
|
1971
|
-
"violations": "Violations"
|
|
1972
|
-
},
|
|
1973
|
-
"users": {
|
|
1974
|
-
"filterHasAccessTo": "Has access to",
|
|
1975
|
-
"filterHasAccessToHint": "Shows people with an active account on every server selected.",
|
|
1976
|
-
"filterHasAccessToPlaceholder": "Any server",
|
|
1977
|
-
"mergeConfirm": "Merge",
|
|
1978
|
-
"mergeDialogDescription": "Every server account, session, and violation from the duplicate moves to the primary. The duplicate identity is deleted.",
|
|
1979
|
-
"mergeDialogTitle": "Merge users",
|
|
1980
|
-
"mergePickPrimary": "Choose the primary identity",
|
|
1981
|
-
"mergePrimaryBadge": "Primary",
|
|
1982
|
-
"mergePrimaryForced": "This account can log in, so it must stay the primary.",
|
|
1983
|
-
"mergeSameIdentity": "These accounts already belong to the same user",
|
|
1984
|
-
"mergeSameServerAcknowledge": "I understand the same-server history combine cannot be undone",
|
|
1985
|
-
"mergeSameServerDialogDescription": "This merge permanently combines both accounts on the same server. It cannot be undone.",
|
|
1986
|
-
"mergeSameServerFallbackName": "this server",
|
|
1987
|
-
"mergeSameServerWarning": "Both identities already have an account on the same server. Merging will permanently combine their session history, violations, and trust score into a single account on that server. This cannot be undone, and splitting the account afterward will not restore the original two accounts.",
|
|
1988
|
-
"mergeSameServerWarningTitle": "This action is irreversible",
|
|
1989
|
-
"mergeSelectAllActive": "Clear the select-all selection and pick exactly two users to merge",
|
|
1990
|
-
"mergeSelectTwo": "Select exactly two users to merge",
|
|
1991
|
-
"mergeServerAccountRemoved": "Removed",
|
|
1992
|
-
"mergeUsers": "Merge users",
|
|
1993
|
-
"noUsersFound": "No users found.",
|
|
1994
|
-
"resetTrustScore": "Reset Trust Score",
|
|
1995
|
-
"resetTrustScoreConfirm": "Are you sure you want to reset the trust score to 100? This action cannot be undone.",
|
|
1996
|
-
"resetTrustScoreTitle_one": "Reset Trust Score for {{count}} User",
|
|
1997
|
-
"resetTrustScoreTitle_other": "Reset Trust Score for {{count}} Users",
|
|
1998
|
-
"searchPlaceholder": "Search users...",
|
|
1999
|
-
"selectAllUsers": "Select all {{count}} users",
|
|
2000
|
-
"serversColumn": "Servers",
|
|
2001
|
-
"showRemoved": "Show removed",
|
|
2002
|
-
"suggestionsDescription": "These identities look like the same person across servers. Review and merge them if they match.",
|
|
2003
|
-
"suggestionsError": "Could not load merge suggestions",
|
|
2004
|
-
"suggestionsMatchEmail": "Same email",
|
|
2005
|
-
"suggestionsMatchUsername": "Same username",
|
|
2006
|
-
"suggestionsReview": "Review",
|
|
2007
|
-
"suggestionsTitle": "Possible duplicate users",
|
|
2008
|
-
"title": "Users"
|
|
2009
|
-
},
|
|
2010
|
-
"violations": {
|
|
2011
|
-
"allPeople": "All people",
|
|
2012
|
-
"allRules": "All rules",
|
|
2013
|
-
"allSeverities": "All Severities",
|
|
2014
|
-
"allStatuses": "All Statuses",
|
|
2015
|
-
"detail": {
|
|
2016
|
-
"acknowledged": "Acknowledged",
|
|
2017
|
-
"actions": "Actions Taken",
|
|
2018
|
-
"actual": "Actual",
|
|
2019
|
-
"conditionEvidence": "Condition Evidence",
|
|
2020
|
-
"conditionGroup": "Condition Group {{index}}",
|
|
2021
|
-
"created": "Created",
|
|
2022
|
-
"daysInactive": "Days Inactive",
|
|
2023
|
-
"detected": "Detected",
|
|
2024
|
-
"inactivity": "Inactivity Details",
|
|
2025
|
-
"lastActivity": "Last Activity",
|
|
2026
|
-
"map": "Session Locations",
|
|
2027
|
-
"matched": "{{matched}}/{{total}} matched",
|
|
2028
|
-
"neverActive": "Never active",
|
|
2029
|
-
"noSessions": "No sessions associated with this violation",
|
|
2030
|
-
"notFound": "Violation not found",
|
|
2031
|
-
"relatedSessions": "{{count}} related session",
|
|
2032
|
-
"relatedSessions_one": "{{count}} related session",
|
|
2033
|
-
"relatedSessions_other": "{{count}} related sessions",
|
|
2034
|
-
"sessions": "Sessions",
|
|
2035
|
-
"threshold": "Threshold",
|
|
2036
|
-
"timestamps": "Timestamps",
|
|
2037
|
-
"trigger": "Trigger",
|
|
2038
|
-
"userInfo": "User",
|
|
2039
|
-
"violationDetails": "Violation Details"
|
|
2040
|
-
},
|
|
2041
|
-
"dismissViolation": "Dismiss Violation",
|
|
2042
|
-
"dismissViolationConfirm": "Are you sure you want to dismiss this violation? This will remove it from the violation log permanently.",
|
|
2043
|
-
"dismissViolation_one": "Dismiss {{count}} Violation",
|
|
2044
|
-
"dismissViolation_other": "Dismiss {{count}} Violations",
|
|
2045
|
-
"dismissViolationsConfirm": "Are you sure you want to dismiss? This will remove them from the violation log permanently and restore associated trust scores.",
|
|
2046
|
-
"filterByPerson": "Filter violations by this person",
|
|
2047
|
-
"filterPeople": "People",
|
|
2048
|
-
"noViolationsFound": "No violations found",
|
|
2049
|
-
"noViolationsRecorded": "No violations have been recorded yet.",
|
|
2050
|
-
"peopleSelectedCount": "{{count}} people",
|
|
2051
|
-
"personFilterEmpty": "No matching people found",
|
|
2052
|
-
"personFilterError": "Failed to load people",
|
|
2053
|
-
"personFilterPlaceholder": "Filter by person",
|
|
2054
|
-
"selectAllViolations": "Select all {{count}} violations matching filters",
|
|
2055
|
-
"title": "Violations",
|
|
2056
|
-
"tryAdjustingFilters": "Try adjusting your filters"
|
|
2057
2058
|
}
|
|
2058
2059
|
}
|