@tracearr/translations 2.2.0-beta.2 → 2.2.0-beta.4
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/config.d.ts +3351 -1105
- package/dist/config.d.ts.map +1 -1
- package/dist/config.mobile.d.ts +3351 -1105
- package/dist/config.mobile.d.ts.map +1 -1
- package/dist/index.d.ts +2 -2
- package/dist/index.js +2 -2
- package/dist/locales/af-ZA/common.json +298 -266
- package/dist/locales/af-ZA/mobile.json +138 -138
- package/dist/locales/af-ZA/nav.json +30 -26
- package/dist/locales/af-ZA/notifications.json +225 -241
- package/dist/locales/af-ZA/pages.json +1975 -901
- package/dist/locales/af-ZA/settings.json +462 -433
- package/dist/locales/ar-SA/common.json +82 -50
- package/dist/locales/ar-SA/mobile.json +96 -96
- package/dist/locales/ar-SA/nav.json +23 -19
- package/dist/locales/ar-SA/notifications.json +224 -240
- package/dist/locales/ar-SA/pages.json +1956 -882
- package/dist/locales/ar-SA/settings.json +102 -73
- package/dist/locales/ca-ES/common.json +79 -47
- package/dist/locales/ca-ES/mobile.json +125 -125
- package/dist/locales/ca-ES/nav.json +23 -19
- package/dist/locales/ca-ES/notifications.json +225 -241
- package/dist/locales/ca-ES/pages.json +1971 -897
- package/dist/locales/ca-ES/settings.json +406 -377
- package/dist/locales/cs-CZ/common.json +68 -36
- package/dist/locales/cs-CZ/mobile.json +99 -99
- package/dist/locales/cs-CZ/nav.json +23 -19
- package/dist/locales/cs-CZ/notifications.json +223 -239
- package/dist/locales/cs-CZ/pages.json +1949 -875
- package/dist/locales/cs-CZ/settings.json +102 -73
- package/dist/locales/da-DK/common.json +76 -44
- package/dist/locales/da-DK/mobile.json +99 -99
- package/dist/locales/da-DK/nav.json +24 -20
- package/dist/locales/da-DK/notifications.json +223 -239
- package/dist/locales/da-DK/pages.json +1956 -882
- package/dist/locales/da-DK/settings.json +113 -84
- package/dist/locales/de-DE/common.json +73 -41
- package/dist/locales/de-DE/mobile.json +102 -102
- package/dist/locales/de-DE/nav.json +24 -20
- package/dist/locales/de-DE/notifications.json +223 -239
- package/dist/locales/de-DE/pages.json +1958 -884
- package/dist/locales/de-DE/settings.json +116 -87
- package/dist/locales/el-GR/common.json +87 -55
- package/dist/locales/el-GR/mobile.json +97 -97
- package/dist/locales/el-GR/nav.json +23 -19
- package/dist/locales/el-GR/notifications.json +223 -239
- package/dist/locales/el-GR/pages.json +1957 -883
- package/dist/locales/el-GR/settings.json +109 -80
- package/dist/locales/en/common.json +36 -4
- package/dist/locales/en/nav.json +6 -2
- package/dist/locales/en/notifications.json +13 -29
- package/dist/locales/en/pages.json +1189 -115
- package/dist/locales/en/settings.json +31 -2
- package/dist/locales/en-US/common.json +36 -4
- package/dist/locales/en-US/nav.json +6 -2
- package/dist/locales/en-US/notifications.json +217 -233
- package/dist/locales/en-US/pages.json +1933 -859
- package/dist/locales/en-US/settings.json +31 -2
- package/dist/locales/es-ES/common.json +62 -30
- package/dist/locales/es-ES/mobile.json +96 -96
- package/dist/locales/es-ES/nav.json +23 -19
- package/dist/locales/es-ES/notifications.json +223 -239
- package/dist/locales/es-ES/pages.json +1956 -882
- package/dist/locales/es-ES/settings.json +101 -72
- package/dist/locales/fi-FI/common.json +66 -34
- package/dist/locales/fi-FI/mobile.json +97 -97
- package/dist/locales/fi-FI/nav.json +24 -20
- package/dist/locales/fi-FI/notifications.json +223 -239
- package/dist/locales/fi-FI/pages.json +1956 -882
- package/dist/locales/fi-FI/settings.json +111 -82
- package/dist/locales/fr-FR/common.json +69 -37
- package/dist/locales/fr-FR/mobile.json +10 -10
- package/dist/locales/fr-FR/nav.json +24 -20
- package/dist/locales/fr-FR/notifications.json +223 -239
- package/dist/locales/fr-FR/pages.json +1950 -876
- package/dist/locales/fr-FR/settings.json +106 -77
- package/dist/locales/he-IL/common.json +298 -266
- package/dist/locales/he-IL/mobile.json +138 -138
- package/dist/locales/he-IL/nav.json +30 -26
- package/dist/locales/he-IL/notifications.json +225 -241
- package/dist/locales/he-IL/pages.json +1978 -904
- package/dist/locales/he-IL/settings.json +462 -433
- package/dist/locales/hu-HU/common.json +197 -165
- package/dist/locales/hu-HU/mobile.json +138 -138
- package/dist/locales/hu-HU/nav.json +30 -26
- package/dist/locales/hu-HU/notifications.json +225 -241
- package/dist/locales/hu-HU/pages.json +1978 -904
- package/dist/locales/hu-HU/settings.json +457 -428
- package/dist/locales/it-IT/common.json +83 -51
- package/dist/locales/it-IT/mobile.json +101 -101
- package/dist/locales/it-IT/nav.json +24 -20
- package/dist/locales/it-IT/notifications.json +224 -240
- package/dist/locales/it-IT/pages.json +1958 -884
- package/dist/locales/it-IT/settings.json +109 -80
- package/dist/locales/ja-JP/common.json +63 -31
- package/dist/locales/ja-JP/mobile.json +98 -98
- package/dist/locales/ja-JP/nav.json +23 -19
- package/dist/locales/ja-JP/notifications.json +223 -239
- package/dist/locales/ja-JP/pages.json +1956 -882
- package/dist/locales/ja-JP/settings.json +106 -77
- package/dist/locales/ko-KR/common.json +298 -266
- package/dist/locales/ko-KR/mobile.json +138 -138
- package/dist/locales/ko-KR/nav.json +30 -26
- package/dist/locales/ko-KR/notifications.json +225 -241
- package/dist/locales/ko-KR/pages.json +1978 -904
- package/dist/locales/ko-KR/settings.json +462 -433
- package/dist/locales/nl-NL/common.json +70 -38
- package/dist/locales/nl-NL/mobile.json +91 -91
- package/dist/locales/nl-NL/nav.json +24 -20
- package/dist/locales/nl-NL/notifications.json +223 -239
- package/dist/locales/nl-NL/pages.json +1949 -875
- package/dist/locales/nl-NL/settings.json +87 -58
- package/dist/locales/no-NO/common.json +62 -30
- package/dist/locales/no-NO/mobile.json +96 -96
- package/dist/locales/no-NO/nav.json +23 -19
- package/dist/locales/no-NO/notifications.json +223 -239
- package/dist/locales/no-NO/pages.json +1956 -882
- package/dist/locales/no-NO/settings.json +99 -70
- package/dist/locales/pl-PL/common.json +57 -25
- package/dist/locales/pl-PL/mobile.json +94 -94
- package/dist/locales/pl-PL/nav.json +23 -19
- package/dist/locales/pl-PL/notifications.json +223 -239
- package/dist/locales/pl-PL/pages.json +1956 -882
- package/dist/locales/pl-PL/settings.json +100 -71
- package/dist/locales/pt-BR/common.json +94 -62
- package/dist/locales/pt-BR/mobile.json +138 -138
- package/dist/locales/pt-BR/nav.json +24 -20
- package/dist/locales/pt-BR/notifications.json +223 -239
- package/dist/locales/pt-BR/pages.json +1945 -871
- package/dist/locales/pt-BR/settings.json +123 -94
- package/dist/locales/pt-PT/common.json +77 -45
- package/dist/locales/pt-PT/mobile.json +97 -97
- package/dist/locales/pt-PT/nav.json +24 -20
- package/dist/locales/pt-PT/notifications.json +223 -239
- package/dist/locales/pt-PT/pages.json +1956 -882
- package/dist/locales/pt-PT/settings.json +103 -74
- package/dist/locales/ro-RO/common.json +70 -38
- package/dist/locales/ro-RO/mobile.json +98 -98
- package/dist/locales/ro-RO/nav.json +24 -20
- package/dist/locales/ro-RO/notifications.json +223 -239
- package/dist/locales/ro-RO/pages.json +1956 -882
- package/dist/locales/ro-RO/settings.json +106 -77
- package/dist/locales/ru-RU/common.json +74 -42
- package/dist/locales/ru-RU/mobile.json +97 -97
- package/dist/locales/ru-RU/nav.json +23 -19
- package/dist/locales/ru-RU/notifications.json +223 -239
- package/dist/locales/ru-RU/pages.json +1957 -883
- package/dist/locales/ru-RU/settings.json +99 -70
- package/dist/locales/sr-SP/common.json +298 -266
- package/dist/locales/sr-SP/mobile.json +138 -138
- package/dist/locales/sr-SP/nav.json +30 -26
- package/dist/locales/sr-SP/notifications.json +225 -241
- package/dist/locales/sr-SP/pages.json +1978 -904
- package/dist/locales/sr-SP/settings.json +462 -433
- package/dist/locales/sv-SE/common.json +71 -39
- package/dist/locales/sv-SE/mobile.json +100 -100
- package/dist/locales/sv-SE/nav.json +24 -20
- package/dist/locales/sv-SE/notifications.json +223 -239
- package/dist/locales/sv-SE/pages.json +1956 -882
- package/dist/locales/sv-SE/settings.json +106 -77
- package/dist/locales/tr-TR/common.json +298 -266
- package/dist/locales/tr-TR/mobile.json +138 -138
- package/dist/locales/tr-TR/nav.json +30 -26
- package/dist/locales/tr-TR/notifications.json +225 -241
- package/dist/locales/tr-TR/pages.json +1978 -904
- package/dist/locales/tr-TR/settings.json +462 -433
- package/dist/locales/uk-UA/common.json +54 -22
- package/dist/locales/uk-UA/mobile.json +98 -98
- package/dist/locales/uk-UA/nav.json +23 -19
- package/dist/locales/uk-UA/notifications.json +223 -239
- package/dist/locales/uk-UA/pages.json +1957 -883
- package/dist/locales/uk-UA/settings.json +101 -72
- package/dist/locales/vi-VN/common.json +298 -266
- package/dist/locales/vi-VN/mobile.json +138 -138
- package/dist/locales/vi-VN/nav.json +30 -26
- package/dist/locales/vi-VN/notifications.json +225 -241
- package/dist/locales/vi-VN/pages.json +1978 -904
- package/dist/locales/vi-VN/settings.json +462 -433
- package/dist/locales/zh-CN/common.json +55 -23
- package/dist/locales/zh-CN/mobile.json +95 -95
- package/dist/locales/zh-CN/nav.json +23 -19
- package/dist/locales/zh-CN/notifications.json +223 -239
- package/dist/locales/zh-CN/pages.json +1956 -882
- package/dist/locales/zh-CN/settings.json +105 -76
- package/dist/locales/zh-TW/common.json +129 -97
- package/dist/locales/zh-TW/mobile.json +137 -137
- package/dist/locales/zh-TW/nav.json +30 -26
- package/dist/locales/zh-TW/notifications.json +225 -241
- package/dist/locales/zh-TW/pages.json +1978 -904
- package/dist/locales/zh-TW/settings.json +460 -431
- package/package.json +3 -2
- package/src/index.ts +2 -2
- package/src/locales/af-ZA/common.json +298 -266
- package/src/locales/af-ZA/mobile.json +138 -138
- package/src/locales/af-ZA/nav.json +30 -26
- package/src/locales/af-ZA/notifications.json +225 -241
- package/src/locales/af-ZA/pages.json +1975 -901
- package/src/locales/af-ZA/settings.json +462 -433
- package/src/locales/ar-SA/common.json +82 -50
- package/src/locales/ar-SA/mobile.json +96 -96
- package/src/locales/ar-SA/nav.json +23 -19
- package/src/locales/ar-SA/notifications.json +224 -240
- package/src/locales/ar-SA/pages.json +1956 -882
- package/src/locales/ar-SA/settings.json +102 -73
- package/src/locales/ca-ES/common.json +79 -47
- package/src/locales/ca-ES/mobile.json +125 -125
- package/src/locales/ca-ES/nav.json +23 -19
- package/src/locales/ca-ES/notifications.json +225 -241
- package/src/locales/ca-ES/pages.json +1971 -897
- package/src/locales/ca-ES/settings.json +406 -377
- package/src/locales/cs-CZ/common.json +68 -36
- package/src/locales/cs-CZ/mobile.json +99 -99
- package/src/locales/cs-CZ/nav.json +23 -19
- package/src/locales/cs-CZ/notifications.json +223 -239
- package/src/locales/cs-CZ/pages.json +1949 -875
- package/src/locales/cs-CZ/settings.json +102 -73
- package/src/locales/da-DK/common.json +76 -44
- package/src/locales/da-DK/mobile.json +99 -99
- package/src/locales/da-DK/nav.json +24 -20
- package/src/locales/da-DK/notifications.json +223 -239
- package/src/locales/da-DK/pages.json +1956 -882
- package/src/locales/da-DK/settings.json +113 -84
- package/src/locales/de-DE/common.json +73 -41
- package/src/locales/de-DE/mobile.json +102 -102
- package/src/locales/de-DE/nav.json +24 -20
- package/src/locales/de-DE/notifications.json +223 -239
- package/src/locales/de-DE/pages.json +1958 -884
- package/src/locales/de-DE/settings.json +116 -87
- package/src/locales/el-GR/common.json +87 -55
- package/src/locales/el-GR/mobile.json +97 -97
- package/src/locales/el-GR/nav.json +23 -19
- package/src/locales/el-GR/notifications.json +223 -239
- package/src/locales/el-GR/pages.json +1957 -883
- package/src/locales/el-GR/settings.json +109 -80
- package/src/locales/en/common.json +36 -4
- package/src/locales/en/nav.json +6 -2
- package/src/locales/en/notifications.json +13 -29
- package/src/locales/en/pages.json +1189 -115
- package/src/locales/en/settings.json +31 -2
- package/src/locales/en-US/common.json +36 -4
- package/src/locales/en-US/nav.json +6 -2
- package/src/locales/en-US/notifications.json +217 -233
- package/src/locales/en-US/pages.json +1933 -859
- package/src/locales/en-US/settings.json +31 -2
- package/src/locales/es-ES/common.json +62 -30
- package/src/locales/es-ES/mobile.json +96 -96
- package/src/locales/es-ES/nav.json +23 -19
- package/src/locales/es-ES/notifications.json +223 -239
- package/src/locales/es-ES/pages.json +1956 -882
- package/src/locales/es-ES/settings.json +101 -72
- package/src/locales/fi-FI/common.json +66 -34
- package/src/locales/fi-FI/mobile.json +97 -97
- package/src/locales/fi-FI/nav.json +24 -20
- package/src/locales/fi-FI/notifications.json +223 -239
- package/src/locales/fi-FI/pages.json +1956 -882
- package/src/locales/fi-FI/settings.json +111 -82
- package/src/locales/fr-FR/common.json +69 -37
- package/src/locales/fr-FR/mobile.json +10 -10
- package/src/locales/fr-FR/nav.json +24 -20
- package/src/locales/fr-FR/notifications.json +223 -239
- package/src/locales/fr-FR/pages.json +1950 -876
- package/src/locales/fr-FR/settings.json +106 -77
- package/src/locales/he-IL/common.json +298 -266
- package/src/locales/he-IL/mobile.json +138 -138
- package/src/locales/he-IL/nav.json +30 -26
- package/src/locales/he-IL/notifications.json +225 -241
- package/src/locales/he-IL/pages.json +1978 -904
- package/src/locales/he-IL/settings.json +462 -433
- package/src/locales/hu-HU/common.json +197 -165
- package/src/locales/hu-HU/mobile.json +138 -138
- package/src/locales/hu-HU/nav.json +30 -26
- package/src/locales/hu-HU/notifications.json +225 -241
- package/src/locales/hu-HU/pages.json +1978 -904
- package/src/locales/hu-HU/settings.json +457 -428
- package/src/locales/it-IT/common.json +83 -51
- package/src/locales/it-IT/mobile.json +101 -101
- package/src/locales/it-IT/nav.json +24 -20
- package/src/locales/it-IT/notifications.json +224 -240
- package/src/locales/it-IT/pages.json +1958 -884
- package/src/locales/it-IT/settings.json +109 -80
- package/src/locales/ja-JP/common.json +63 -31
- package/src/locales/ja-JP/mobile.json +98 -98
- package/src/locales/ja-JP/nav.json +23 -19
- package/src/locales/ja-JP/notifications.json +223 -239
- package/src/locales/ja-JP/pages.json +1956 -882
- package/src/locales/ja-JP/settings.json +106 -77
- package/src/locales/ko-KR/common.json +298 -266
- package/src/locales/ko-KR/mobile.json +138 -138
- package/src/locales/ko-KR/nav.json +30 -26
- package/src/locales/ko-KR/notifications.json +225 -241
- package/src/locales/ko-KR/pages.json +1978 -904
- package/src/locales/ko-KR/settings.json +462 -433
- package/src/locales/nl-NL/common.json +70 -38
- package/src/locales/nl-NL/mobile.json +91 -91
- package/src/locales/nl-NL/nav.json +24 -20
- package/src/locales/nl-NL/notifications.json +223 -239
- package/src/locales/nl-NL/pages.json +1949 -875
- package/src/locales/nl-NL/settings.json +87 -58
- package/src/locales/no-NO/common.json +62 -30
- package/src/locales/no-NO/mobile.json +96 -96
- package/src/locales/no-NO/nav.json +23 -19
- package/src/locales/no-NO/notifications.json +223 -239
- package/src/locales/no-NO/pages.json +1956 -882
- package/src/locales/no-NO/settings.json +99 -70
- package/src/locales/pl-PL/common.json +57 -25
- package/src/locales/pl-PL/mobile.json +94 -94
- package/src/locales/pl-PL/nav.json +23 -19
- package/src/locales/pl-PL/notifications.json +223 -239
- package/src/locales/pl-PL/pages.json +1956 -882
- package/src/locales/pl-PL/settings.json +100 -71
- package/src/locales/pt-BR/common.json +94 -62
- package/src/locales/pt-BR/mobile.json +138 -138
- package/src/locales/pt-BR/nav.json +24 -20
- package/src/locales/pt-BR/notifications.json +223 -239
- package/src/locales/pt-BR/pages.json +1945 -871
- package/src/locales/pt-BR/settings.json +123 -94
- package/src/locales/pt-PT/common.json +77 -45
- package/src/locales/pt-PT/mobile.json +97 -97
- package/src/locales/pt-PT/nav.json +24 -20
- package/src/locales/pt-PT/notifications.json +223 -239
- package/src/locales/pt-PT/pages.json +1956 -882
- package/src/locales/pt-PT/settings.json +103 -74
- package/src/locales/ro-RO/common.json +70 -38
- package/src/locales/ro-RO/mobile.json +98 -98
- package/src/locales/ro-RO/nav.json +24 -20
- package/src/locales/ro-RO/notifications.json +223 -239
- package/src/locales/ro-RO/pages.json +1956 -882
- package/src/locales/ro-RO/settings.json +106 -77
- package/src/locales/ru-RU/common.json +74 -42
- package/src/locales/ru-RU/mobile.json +97 -97
- package/src/locales/ru-RU/nav.json +23 -19
- package/src/locales/ru-RU/notifications.json +223 -239
- package/src/locales/ru-RU/pages.json +1957 -883
- package/src/locales/ru-RU/settings.json +99 -70
- package/src/locales/sr-SP/common.json +298 -266
- package/src/locales/sr-SP/mobile.json +138 -138
- package/src/locales/sr-SP/nav.json +30 -26
- package/src/locales/sr-SP/notifications.json +225 -241
- package/src/locales/sr-SP/pages.json +1978 -904
- package/src/locales/sr-SP/settings.json +462 -433
- package/src/locales/sv-SE/common.json +71 -39
- package/src/locales/sv-SE/mobile.json +100 -100
- package/src/locales/sv-SE/nav.json +24 -20
- package/src/locales/sv-SE/notifications.json +223 -239
- package/src/locales/sv-SE/pages.json +1956 -882
- package/src/locales/sv-SE/settings.json +106 -77
- package/src/locales/tr-TR/common.json +298 -266
- package/src/locales/tr-TR/mobile.json +138 -138
- package/src/locales/tr-TR/nav.json +30 -26
- package/src/locales/tr-TR/notifications.json +225 -241
- package/src/locales/tr-TR/pages.json +1978 -904
- package/src/locales/tr-TR/settings.json +462 -433
- package/src/locales/uk-UA/common.json +54 -22
- package/src/locales/uk-UA/mobile.json +98 -98
- package/src/locales/uk-UA/nav.json +23 -19
- package/src/locales/uk-UA/notifications.json +223 -239
- package/src/locales/uk-UA/pages.json +1957 -883
- package/src/locales/uk-UA/settings.json +101 -72
- package/src/locales/vi-VN/common.json +298 -266
- package/src/locales/vi-VN/mobile.json +138 -138
- package/src/locales/vi-VN/nav.json +30 -26
- package/src/locales/vi-VN/notifications.json +225 -241
- package/src/locales/vi-VN/pages.json +1978 -904
- package/src/locales/vi-VN/settings.json +462 -433
- package/src/locales/zh-CN/common.json +55 -23
- package/src/locales/zh-CN/mobile.json +95 -95
- package/src/locales/zh-CN/nav.json +23 -19
- package/src/locales/zh-CN/notifications.json +223 -239
- package/src/locales/zh-CN/pages.json +1956 -882
- package/src/locales/zh-CN/settings.json +105 -76
- package/src/locales/zh-TW/common.json +129 -97
- package/src/locales/zh-TW/mobile.json +137 -137
- package/src/locales/zh-TW/nav.json +30 -26
- package/src/locales/zh-TW/notifications.json +225 -241
- package/src/locales/zh-TW/pages.json +1978 -904
- package/src/locales/zh-TW/settings.json +460 -431
|
@@ -1,764 +1,1585 @@
|
|
|
1
1
|
{
|
|
2
|
-
"
|
|
3
|
-
"
|
|
4
|
-
"
|
|
5
|
-
"
|
|
6
|
-
"
|
|
7
|
-
"
|
|
8
|
-
"
|
|
9
|
-
"
|
|
10
|
-
"
|
|
11
|
-
"
|
|
12
|
-
"
|
|
13
|
-
"
|
|
14
|
-
"
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
"
|
|
18
|
-
"
|
|
19
|
-
"
|
|
20
|
-
"
|
|
21
|
-
"
|
|
22
|
-
"
|
|
23
|
-
"
|
|
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"
|
|
24
41
|
},
|
|
25
42
|
"dashboard": {
|
|
26
|
-
"activeUsers": "Active Users",
|
|
27
43
|
"alerts": "Alerts",
|
|
28
|
-
"bandwidth": "Bandwidth",
|
|
29
|
-
"noActiveStreams": "No active streams",
|
|
30
|
-
"nowPlaying": "Now Playing",
|
|
31
44
|
"plays": "Plays",
|
|
32
|
-
"
|
|
45
|
+
"watchTime": "Watch Time",
|
|
46
|
+
"activeUsers": "Active Users",
|
|
47
|
+
"nowPlaying": "Now Playing",
|
|
33
48
|
"streamLocations": "Stream Locations",
|
|
34
|
-
"
|
|
35
|
-
"
|
|
49
|
+
"serverResources": "Server Resources",
|
|
50
|
+
"bandwidth": "Bandwidth",
|
|
51
|
+
"noActiveStreams": "No active streams",
|
|
52
|
+
"streamsAppearHere": "Active streams will appear here when users start watching"
|
|
36
53
|
},
|
|
37
|
-
"
|
|
38
|
-
"
|
|
39
|
-
"
|
|
40
|
-
"
|
|
41
|
-
"
|
|
42
|
-
"
|
|
43
|
-
"
|
|
44
|
-
"
|
|
45
|
-
"
|
|
46
|
-
"
|
|
47
|
-
"
|
|
48
|
-
"
|
|
49
|
-
"
|
|
50
|
-
"
|
|
51
|
-
"
|
|
52
|
-
"
|
|
53
|
-
"
|
|
54
|
-
"
|
|
55
|
-
"
|
|
56
|
-
"
|
|
57
|
-
"
|
|
58
|
-
"
|
|
59
|
-
"
|
|
60
|
-
"
|
|
61
|
-
"
|
|
62
|
-
"
|
|
63
|
-
"
|
|
64
|
-
"
|
|
65
|
-
"
|
|
66
|
-
"
|
|
67
|
-
"
|
|
68
|
-
"
|
|
69
|
-
"
|
|
70
|
-
"
|
|
71
|
-
"
|
|
72
|
-
"
|
|
73
|
-
"selected": "selected",
|
|
74
|
-
"snapshots": "snapshot(s)",
|
|
75
|
-
"suspicious": "Suspicious",
|
|
76
|
-
"suspiciousOnly": "Suspicious only",
|
|
77
|
-
"systemInformation": "System Information",
|
|
78
|
-
"tasks": "Tasks",
|
|
79
|
-
"terminations": "Terminations",
|
|
80
|
-
"title": "Debug Tools",
|
|
81
|
-
"totalSize": "Total Size",
|
|
82
|
-
"uptime": "Uptime"
|
|
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."
|
|
83
90
|
},
|
|
84
|
-
"
|
|
85
|
-
"
|
|
86
|
-
"
|
|
87
|
-
"
|
|
88
|
-
"
|
|
89
|
-
"
|
|
90
|
-
"
|
|
91
|
-
"
|
|
92
|
-
"
|
|
93
|
-
"
|
|
94
|
-
"
|
|
95
|
-
"
|
|
96
|
-
"
|
|
97
|
-
"
|
|
98
|
-
"
|
|
99
|
-
"
|
|
100
|
-
"
|
|
101
|
-
"
|
|
102
|
-
"
|
|
103
|
-
"
|
|
104
|
-
"
|
|
105
|
-
"
|
|
106
|
-
"
|
|
107
|
-
"
|
|
108
|
-
"uniqueCodecs": "Unique Codecs",
|
|
109
|
-
"uniqueDevices": "Unique Devices",
|
|
110
|
-
"videoAndAudio": "Video + audio"
|
|
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"
|
|
111
115
|
},
|
|
112
116
|
"history": {
|
|
113
|
-
"
|
|
114
|
-
"deleteSession_other": "Delete {{count}} Sessions",
|
|
115
|
-
"deleteSessionsConfirm": "Are you sure you want to delete? This action cannot be undone.",
|
|
117
|
+
"title": "History",
|
|
116
118
|
"description": "Browse all streaming sessions with powerful filtering",
|
|
117
119
|
"loadingMore": "Loading more...",
|
|
118
120
|
"scrollForMore": "Scroll for more",
|
|
119
121
|
"showingAllResults": "Showing all {{total}} results",
|
|
120
|
-
"
|
|
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."
|
|
121
125
|
},
|
|
122
126
|
"library": {
|
|
127
|
+
"title": "Library",
|
|
123
128
|
"description": "Top movies and shows on your server",
|
|
124
|
-
"
|
|
125
|
-
|
|
126
|
-
"bodyGeneric": "Generate historical snapshots to see library trends over time.",
|
|
127
|
-
"bodyWithDays": "Your library has {{days}} days of history. Generate snapshots to see trends in charts.",
|
|
128
|
-
"syncRunningBody": "Historical data generation will start automatically once the sync completes.",
|
|
129
|
-
"syncRunningTitle": "Library sync in progress...",
|
|
130
|
-
"title": "Historical data available"
|
|
131
|
-
},
|
|
132
|
-
"backfillRunning": {
|
|
133
|
-
"fallbackBody": "Creating snapshots from library history. This may take a few minutes.",
|
|
134
|
-
"progress": "{{processed}} of {{total}} libraries",
|
|
135
|
-
"snapshotsSuffix": " ({{count}} snapshots)",
|
|
136
|
-
"title": "Generating historical data..."
|
|
137
|
-
},
|
|
138
|
-
"checkingStatus": "Checking library status...",
|
|
139
|
-
"generateHistory": "Generate History",
|
|
140
|
-
"multiServer": {
|
|
141
|
-
"body": "Sync the servers below to see combined library statistics.",
|
|
142
|
-
"needsBackfillIntro": "These servers are synced but have no historical data yet:",
|
|
143
|
-
"title": "Some libraries need attention"
|
|
144
|
-
},
|
|
145
|
-
"noMedia": {
|
|
146
|
-
"body": "This library is synced but doesn't have any movies or shows in it yet.",
|
|
147
|
-
"title": "No movies or shows yet"
|
|
148
|
-
},
|
|
149
|
-
"notSynced": {
|
|
150
|
-
"body": "Library statistics will appear here once the library has been synced. This typically happens automatically every hour.",
|
|
151
|
-
"title": "Library not synced yet"
|
|
152
|
-
},
|
|
153
|
-
"notSyncedShort": "Not synced yet",
|
|
154
|
-
"starting": "Starting...",
|
|
155
|
-
"syncInProgress": {
|
|
156
|
-
"body": "Library statistics will appear once the sync completes. This may take a few minutes depending on library size.",
|
|
157
|
-
"title": "Library sync in progress..."
|
|
158
|
-
},
|
|
159
|
-
"syncNow": "Sync Now",
|
|
160
|
-
"syncing": "Syncing...",
|
|
161
|
-
"toast": {
|
|
162
|
-
"backfillCompleteTitle": "Backfill complete",
|
|
163
|
-
"backfillErrorTitle": "Backfill failed",
|
|
164
|
-
"backfillFailedTitle": "Failed to start backfill",
|
|
165
|
-
"backfillStartedDesc": "Historical snapshots are being generated.",
|
|
166
|
-
"backfillStartedTitle": "Backfill started",
|
|
167
|
-
"genericRetry": "Please try again.",
|
|
168
|
-
"noServerSelected": "No server selected",
|
|
169
|
-
"syncFailedTitle": "Failed to start sync",
|
|
170
|
-
"syncStartedDesc": "This may take a few minutes depending on library size.",
|
|
171
|
-
"syncStartedTitle": "Library sync started"
|
|
172
|
-
}
|
|
173
|
-
},
|
|
129
|
+
"topMovies": "Top Movies",
|
|
130
|
+
"topShows": "Top TV Shows",
|
|
174
131
|
"noMoviePlays": "No movie plays in this period",
|
|
175
132
|
"noShowPlays": "No TV show plays in this period",
|
|
176
133
|
"overview": {
|
|
177
|
-
"added": "Added",
|
|
178
134
|
"description": "Library health and growth metrics",
|
|
179
|
-
"failedToLoad": "Failed to load library statistics",
|
|
180
|
-
"failedToLoadDesc": "Could not fetch library data. Please try again.",
|
|
181
135
|
"lastUpdated": "Last updated:",
|
|
182
|
-
"
|
|
183
|
-
"serversNeedSync": "These servers need to sync:",
|
|
136
|
+
"totalItems": "Total Items",
|
|
184
137
|
"shows": "shows",
|
|
185
|
-
"
|
|
138
|
+
"added": "Added",
|
|
139
|
+
"libraryGrowth": "Library Growth",
|
|
140
|
+
"failedToLoad": "Failed to load library statistics",
|
|
141
|
+
"failedToLoadDesc": "Could not fetch library data. Please try again.",
|
|
186
142
|
"thisPeriod": "this period",
|
|
187
143
|
"thisWeek": "this week",
|
|
144
|
+
"thisMonth": "this month",
|
|
188
145
|
"thisYear": "this year",
|
|
189
|
-
"
|
|
146
|
+
"serversNeedSync": "These servers need to sync:"
|
|
190
147
|
},
|
|
191
148
|
"quality": {
|
|
192
|
-
"
|
|
149
|
+
"title": "Quality",
|
|
193
150
|
"description": "Resolution and codec distribution",
|
|
194
|
-
"failedToLoad": "Failed to load quality data",
|
|
195
|
-
"failedToLoadDesc": "Could not fetch quality data. Please try again.",
|
|
196
151
|
"qualityEvolution": "Quality Evolution",
|
|
197
|
-
"
|
|
152
|
+
"all": "All",
|
|
153
|
+
"failedToLoad": "Failed to load quality data",
|
|
154
|
+
"failedToLoadDesc": "Could not fetch quality data. Please try again."
|
|
198
155
|
},
|
|
199
156
|
"storage": {
|
|
200
|
-
"
|
|
201
|
-
"colCopies": "Copies",
|
|
202
|
-
"colMatchType": "Match Type",
|
|
203
|
-
"colRecoverable": "Recoverable Space",
|
|
204
|
-
"colTitle": "Title",
|
|
205
|
-
"confidence": "Confidence",
|
|
206
|
-
"confidenceHigh": "High",
|
|
207
|
-
"confidenceLow": "Low",
|
|
208
|
-
"confidenceMedium": "Medium",
|
|
209
|
-
"contentROI": "Content ROI",
|
|
210
|
-
"contentROIDesc": "Watch value per storage cost",
|
|
211
|
-
"days": "days",
|
|
157
|
+
"title": "Storage",
|
|
212
158
|
"description": "Storage usage, predictions, and optimization",
|
|
159
|
+
"totalStorage": "Total Storage",
|
|
160
|
+
"growthRate": "Growth Rate",
|
|
213
161
|
"duplicates": "Duplicates",
|
|
214
|
-
"
|
|
215
|
-
"
|
|
216
|
-
"
|
|
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",
|
|
217
181
|
"failedToLoad": "Failed to load storage data",
|
|
218
182
|
"failedToLoadDesc": "Could not fetch storage data. Please try again.",
|
|
219
|
-
"
|
|
183
|
+
"duplicatesTitle": "Duplicates",
|
|
184
|
+
"duplicatesSubtitle": "Titles stored as more than one physical file, across servers, libraries, and versions",
|
|
220
185
|
"growthPreChangeover": "based on pre-update history",
|
|
221
|
-
"growthRate": "Growth Rate",
|
|
222
|
-
"insufficientData": "Insufficient data",
|
|
223
|
-
"items": "items",
|
|
224
186
|
"loadingDuplicates": "Loading duplicates...",
|
|
225
|
-
"
|
|
226
|
-
"noDuplicatesDesc": "No titles with more than one physical file detected.",
|
|
187
|
+
"duplicatesFailed": "Failed to load duplicates",
|
|
227
188
|
"noDuplicatesTitle": "No duplicates found",
|
|
228
|
-
"
|
|
229
|
-
"
|
|
230
|
-
"
|
|
231
|
-
"
|
|
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",
|
|
232
194
|
"sameServer": "Same server",
|
|
233
|
-
"
|
|
234
|
-
"staleContentDesc": "Content that may be candidates for removal",
|
|
235
|
-
"storageTrend": "Storage Trend",
|
|
236
|
-
"title": "Storage",
|
|
237
|
-
"totalStorage": "Total Storage",
|
|
238
|
-
"unused": "unused",
|
|
239
|
-
"zeroGrowth": "0 GB/mo"
|
|
240
|
-
},
|
|
241
|
-
"title": "Library",
|
|
242
|
-
"topMovies": "Top Movies",
|
|
243
|
-
"topShows": "Top TV Shows",
|
|
244
|
-
"versionsBackfill": {
|
|
245
|
-
"action": "Sync now",
|
|
246
|
-
"banner": "File version data is still being collected for this server. Run a library sync to finish.",
|
|
247
|
-
"syncFailed": "Sync failed to start on {{count}} server(s). Check your permissions and server status.",
|
|
248
|
-
"syncStarted": "Library sync started."
|
|
195
|
+
"mirror": "Mirror"
|
|
249
196
|
},
|
|
250
197
|
"watch": {
|
|
198
|
+
"title": "Watch Analytics",
|
|
199
|
+
"description": "Viewing behavior and content engagement",
|
|
200
|
+
"watched": "Watched",
|
|
201
|
+
"percentWatched": "% watched",
|
|
202
|
+
"totalWatchTime": "Total Watch Time",
|
|
251
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:",
|
|
252
211
|
"bingeHighlights": "Binge Highlights",
|
|
253
212
|
"bingeHighlightsDesc": "Shows with the most intensive viewing patterns",
|
|
254
213
|
"bingeSessions": "binge sessions",
|
|
255
|
-
"busiest": "Busiest:",
|
|
256
|
-
"completed": "Completed",
|
|
257
|
-
"description": "Viewing behavior and content engagement",
|
|
258
|
-
"failedToLoad": "Failed to load watch analytics",
|
|
259
|
-
"failedToLoadDesc": "Could not fetch watch data.",
|
|
260
|
-
"monthlyTrends": "Monthly Trends",
|
|
261
214
|
"noData": "No watch data yet",
|
|
262
215
|
"noDataDesc": "Watch analytics will appear here once content has been played. Check back after some viewing activity.",
|
|
263
|
-
"
|
|
264
|
-
"
|
|
265
|
-
"percentWatched": "% watched",
|
|
266
|
-
"quietest": "Quietest:",
|
|
267
|
-
"title": "Watch Analytics",
|
|
268
|
-
"totalWatchTime": "Total Watch Time",
|
|
269
|
-
"viewingHours": "Viewing Hours",
|
|
270
|
-
"watched": "Watched"
|
|
271
|
-
}
|
|
272
|
-
},
|
|
273
|
-
"login": {
|
|
274
|
-
"accountCreated": "Account created successfully!",
|
|
275
|
-
"claimCodeDescription": "Check your server logs for the claim code to proceed with setup",
|
|
276
|
-
"claimCodeHint": "The claim code is printed in the server logs when the container starts",
|
|
277
|
-
"claimCodeLabel": "Claim Code",
|
|
278
|
-
"claimCodeRequired": "First-time setup requires a claim code",
|
|
279
|
-
"claimCodeSecurityNote": "This security measure ensures only authorized users can complete first-time setup",
|
|
280
|
-
"completeInPopup": "Complete sign-in in the popup window",
|
|
281
|
-
"connectedTo": "Connected to {{name}}",
|
|
282
|
-
"continueWith": "Continue with {{provider}}",
|
|
283
|
-
"createAccountDescription": "Create an account to manage your media servers",
|
|
284
|
-
"createAccountFailed": "Failed to create account",
|
|
285
|
-
"createAccountHeading": "Create your account to get started",
|
|
286
|
-
"displayNamePlaceholder": "Choose a display name",
|
|
287
|
-
"emailPlaceholder": "your@email.com",
|
|
288
|
-
"enterClaimCode": "Enter Claim Code",
|
|
289
|
-
"identifierPlaceholder": "Username or email address",
|
|
290
|
-
"invalidCredentials": "Invalid email or password",
|
|
291
|
-
"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.",
|
|
292
|
-
"loginFailed": "Login failed",
|
|
293
|
-
"oidcError": "Single sign-on failed. Please try again or use another sign-in method.",
|
|
294
|
-
"passwordPlaceholder": "At least 8 characters",
|
|
295
|
-
"plexAuthFailed": "Plex authentication failed",
|
|
296
|
-
"plexStartFailed": "Failed to start Plex login",
|
|
297
|
-
"reopenPlexLogin": "Reopen Plex Login",
|
|
298
|
-
"selectPlexServer": "Select your Plex server",
|
|
299
|
-
"serverConnectFailed": "Failed to connect to server",
|
|
300
|
-
"setupNote": "After creating your account, you'll add your Plex or Jellyfin servers from Settings.",
|
|
301
|
-
"signInDescription": "Sign in to access your dashboard",
|
|
302
|
-
"signInHeading": "Sign in to your account",
|
|
303
|
-
"signupFailed": "Signup failed",
|
|
304
|
-
"tagline": "Tracearr - Stream access management",
|
|
305
|
-
"title": "Tracearr",
|
|
306
|
-
"username": "Username",
|
|
307
|
-
"usernameOrEmail": "Username or Email",
|
|
308
|
-
"usernamePlaceholder": "yourusername",
|
|
309
|
-
"validateClaimCode": "Validate Claim Code",
|
|
310
|
-
"waitingForPlex": "Waiting for Plex authorization...",
|
|
311
|
-
"yourPasswordPlaceholder": "Your password"
|
|
312
|
-
},
|
|
313
|
-
"maintenance": {
|
|
314
|
-
"doNotRestart": "Do not restart or stop the server while this runs. Interrupting it can leave the database half-upgraded.",
|
|
315
|
-
"initStep": {
|
|
316
|
-
"migrations": "Applying database migrations",
|
|
317
|
-
"services": "Starting services",
|
|
318
|
-
"timescale": "Preparing TimescaleDB (this can take a while after an upgrade)"
|
|
216
|
+
"failedToLoad": "Failed to load watch analytics",
|
|
217
|
+
"failedToLoadDesc": "Could not fetch watch data."
|
|
319
218
|
},
|
|
320
|
-
"
|
|
321
|
-
|
|
322
|
-
|
|
323
|
-
|
|
324
|
-
|
|
325
|
-
|
|
326
|
-
|
|
327
|
-
|
|
328
|
-
|
|
329
|
-
"
|
|
330
|
-
"
|
|
331
|
-
"
|
|
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
|
+
}
|
|
332
268
|
},
|
|
333
|
-
"
|
|
334
|
-
|
|
335
|
-
|
|
336
|
-
|
|
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
|
+
}
|
|
337
275
|
},
|
|
338
|
-
"
|
|
339
|
-
"
|
|
340
|
-
"
|
|
341
|
-
"
|
|
342
|
-
"
|
|
343
|
-
"
|
|
344
|
-
"
|
|
345
|
-
"
|
|
276
|
+
"activity": {
|
|
277
|
+
"title": "Activity",
|
|
278
|
+
"description": "Play trends, patterns, and streaming behavior",
|
|
279
|
+
"playsOverTime": "Plays Over Time",
|
|
280
|
+
"concurrentStreams": "Concurrent Streams",
|
|
281
|
+
"engagementBreakdown": "Engagement Breakdown",
|
|
282
|
+
"howUsersEngage": "How users engage with content",
|
|
283
|
+
"playsVsSessions": "Plays vs Sessions",
|
|
284
|
+
"playsVsSessionsDesc": "Full completions only — counts a play when total watch time covers a content's entire runtime",
|
|
285
|
+
"activityByDayOfWeek": "Activity by Day of Week",
|
|
286
|
+
"activityByHourOfDay": "Activity by Hour of Day",
|
|
287
|
+
"platforms": "Platforms",
|
|
288
|
+
"streamQuality": "Stream Quality"
|
|
346
289
|
},
|
|
347
|
-
"
|
|
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",
|
|
348
311
|
"detail": {
|
|
349
|
-
"
|
|
350
|
-
|
|
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
|
+
}
|
|
337
|
+
},
|
|
338
|
+
"automations": {
|
|
339
|
+
"actions": {
|
|
340
|
+
"send": {
|
|
341
|
+
"label": "Send Notification",
|
|
342
|
+
"description": "Send to one or more destinations",
|
|
343
|
+
"fields": {
|
|
344
|
+
"cooldown_minutes": {
|
|
345
|
+
"description": "Minimum time between notifications"
|
|
346
|
+
}
|
|
347
|
+
},
|
|
348
|
+
"ran": "Sent a notification"
|
|
351
349
|
},
|
|
352
|
-
"
|
|
353
|
-
"
|
|
354
|
-
|
|
355
|
-
|
|
356
|
-
"
|
|
357
|
-
|
|
358
|
-
|
|
359
|
-
"
|
|
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
|
+
}
|
|
360
364
|
},
|
|
361
|
-
"
|
|
362
|
-
"title": "Copies",
|
|
363
|
-
"unknownLibrary": "Unknown library",
|
|
364
|
-
"versionLabel": "File {{index}}"
|
|
365
|
+
"ran": "Changed the trust score"
|
|
365
366
|
},
|
|
366
|
-
"
|
|
367
|
-
"
|
|
368
|
-
|
|
369
|
-
|
|
370
|
-
|
|
371
|
-
|
|
372
|
-
|
|
373
|
-
"
|
|
374
|
-
|
|
375
|
-
|
|
376
|
-
|
|
377
|
-
|
|
378
|
-
|
|
379
|
-
|
|
380
|
-
"
|
|
381
|
-
|
|
382
|
-
|
|
383
|
-
"removedEverywhere": {
|
|
384
|
-
"caption": "No longer available on any connected server"
|
|
385
|
-
}
|
|
386
|
-
},
|
|
387
|
-
"history": {
|
|
388
|
-
"columns": {
|
|
389
|
-
"content": "Content",
|
|
390
|
-
"date": "Date",
|
|
391
|
-
"duration": "Duration",
|
|
392
|
-
"server": "Server",
|
|
393
|
-
"user": "User"
|
|
367
|
+
"kill_stream": {
|
|
368
|
+
"label": "Kill Stream",
|
|
369
|
+
"description": "Terminate the active stream",
|
|
370
|
+
"fields": {
|
|
371
|
+
"cooldown_minutes": {
|
|
372
|
+
"description": "Minimum time between terminations for the same user"
|
|
373
|
+
},
|
|
374
|
+
"delay_seconds": {
|
|
375
|
+
"label": "Sustain window",
|
|
376
|
+
"description": "Waits this many seconds, then kills the stream only if the automation still matches. 0 kills right after a final re-check."
|
|
377
|
+
},
|
|
378
|
+
"target": {
|
|
379
|
+
"description": "Which sessions to terminate"
|
|
380
|
+
},
|
|
381
|
+
"message": {
|
|
382
|
+
"placeholder": "Optional message"
|
|
383
|
+
}
|
|
394
384
|
},
|
|
395
|
-
"
|
|
396
|
-
"loadError": "Couldn't load history",
|
|
397
|
-
"notWatched": "Not finished",
|
|
398
|
-
"title": "History",
|
|
399
|
-
"watched": "Watched"
|
|
385
|
+
"ran": "Stopped the stream"
|
|
400
386
|
},
|
|
401
|
-
"
|
|
402
|
-
"
|
|
403
|
-
"
|
|
404
|
-
|
|
405
|
-
|
|
406
|
-
"
|
|
407
|
-
|
|
408
|
-
|
|
409
|
-
|
|
410
|
-
|
|
411
|
-
|
|
412
|
-
"label": "Plays, all time"
|
|
413
|
-
},
|
|
414
|
-
"viewers": {
|
|
415
|
-
"detail": "across all servers",
|
|
416
|
-
"label": "Viewers"
|
|
387
|
+
"message_client": {
|
|
388
|
+
"label": "Message Client",
|
|
389
|
+
"description": "Send a message to the media player",
|
|
390
|
+
"hint": "Jellyfin and Emby only. Plex only supports messages when killing a stream.",
|
|
391
|
+
"fields": {
|
|
392
|
+
"target": {
|
|
393
|
+
"description": "Which sessions to message"
|
|
394
|
+
},
|
|
395
|
+
"message": {
|
|
396
|
+
"placeholder": "Message to display…"
|
|
397
|
+
}
|
|
417
398
|
},
|
|
418
|
-
"
|
|
419
|
-
|
|
420
|
-
|
|
421
|
-
|
|
422
|
-
|
|
423
|
-
"
|
|
424
|
-
|
|
425
|
-
|
|
426
|
-
|
|
399
|
+
"ran": "Put a message on the player"
|
|
400
|
+
}
|
|
401
|
+
},
|
|
402
|
+
"activity": {
|
|
403
|
+
"title": "Activity",
|
|
404
|
+
"description": "What this automation did, newest first. Runs are kept for {{days}} days.",
|
|
405
|
+
"outcome": "Outcome",
|
|
406
|
+
"who": "Who",
|
|
407
|
+
"where": "Where",
|
|
408
|
+
"playing": "Playing",
|
|
409
|
+
"from": "From",
|
|
410
|
+
"summary": "Summary",
|
|
411
|
+
"started": "Started",
|
|
412
|
+
"finished": "Finished",
|
|
413
|
+
"noSummary": "No notes",
|
|
414
|
+
"outcomes": {
|
|
415
|
+
"completed": "Ran",
|
|
416
|
+
"stopped_by_condition": "No match",
|
|
417
|
+
"error": "Failed"
|
|
427
418
|
},
|
|
428
|
-
"
|
|
429
|
-
|
|
430
|
-
|
|
431
|
-
|
|
432
|
-
|
|
433
|
-
|
|
434
|
-
|
|
435
|
-
"
|
|
436
|
-
"
|
|
437
|
-
"
|
|
419
|
+
"empty": "No runs yet",
|
|
420
|
+
"emptyDescription": "Runs are listed here once a trigger matches.",
|
|
421
|
+
"runTitle": "Run",
|
|
422
|
+
"runLoading": "Loading the run",
|
|
423
|
+
"triggeredBy": "Triggered by {{trigger}}",
|
|
424
|
+
"unknownStep": "Unrecognized step",
|
|
425
|
+
"tabs": {
|
|
426
|
+
"all": "All",
|
|
427
|
+
"completed": "Ran",
|
|
428
|
+
"stopped_by_condition": "No match",
|
|
429
|
+
"error": "Failed"
|
|
438
430
|
},
|
|
439
|
-
"
|
|
440
|
-
|
|
441
|
-
"
|
|
442
|
-
"
|
|
443
|
-
"episodeLabel": {
|
|
444
|
-
"partial": "{{code}}: partially watched",
|
|
445
|
-
"unwatched": "{{code}}: unwatched",
|
|
446
|
-
"watched": "{{code}}: watched"
|
|
447
|
-
},
|
|
448
|
-
"loadError": "Couldn't load season data",
|
|
449
|
-
"stripSummary": "{{season}}: {{percent}}% watched",
|
|
450
|
-
"title": "Seasons",
|
|
451
|
-
"watchedPct": "{{percent}}% watched"
|
|
431
|
+
"group": "Group {{number}}",
|
|
432
|
+
"branch": {
|
|
433
|
+
"then": "Took the first branch",
|
|
434
|
+
"else": "Took the second branch"
|
|
452
435
|
},
|
|
453
|
-
"
|
|
454
|
-
"
|
|
455
|
-
|
|
456
|
-
|
|
457
|
-
|
|
458
|
-
|
|
459
|
-
|
|
460
|
-
|
|
461
|
-
},
|
|
462
|
-
"completionLabel": "{{percent}}% complete",
|
|
463
|
-
"empty": "No one has watched this yet.",
|
|
464
|
-
"lastWatchedAgo": "{{age}} ago",
|
|
465
|
-
"loadError": "Couldn't load watchers",
|
|
466
|
-
"title": "Watchers"
|
|
467
|
-
}
|
|
436
|
+
"whyBranch": "What it read",
|
|
437
|
+
"openInEditor": "Open in the builder with this run",
|
|
438
|
+
"tabsLabel": "Filter by outcome",
|
|
439
|
+
"emptyRan": "Nothing has matched yet",
|
|
440
|
+
"emptyRanDescription_one": "{{count}} check ran and did not match.",
|
|
441
|
+
"emptyRanDescription_other": "{{count}} checks ran and did not match.",
|
|
442
|
+
"item": "Item",
|
|
443
|
+
"recordedViolation": "Recorded a violation"
|
|
468
444
|
},
|
|
469
|
-
"
|
|
470
|
-
|
|
471
|
-
|
|
472
|
-
|
|
473
|
-
|
|
474
|
-
|
|
475
|
-
|
|
445
|
+
"allKinds": "All kinds",
|
|
446
|
+
"allStatuses": "All statuses",
|
|
447
|
+
"allSeverities": "All severities",
|
|
448
|
+
"bind": {
|
|
449
|
+
"nameHelper": "The name in the automations list.",
|
|
450
|
+
"namePlaceholder": "A name for this automation",
|
|
451
|
+
"activeLabel": "Turn it on now",
|
|
452
|
+
"back": "Back",
|
|
453
|
+
"submit": "Use this",
|
|
454
|
+
"submitting": "Setting it up…",
|
|
455
|
+
"customize": "Open in the builder",
|
|
456
|
+
"doors": {
|
|
457
|
+
"helper": "Use this keeps the steps as they are; the answers above can change later. Open in the builder makes every step editable and ends the link to the ready-made automation."
|
|
476
458
|
},
|
|
477
|
-
"
|
|
478
|
-
|
|
479
|
-
|
|
459
|
+
"anyServer": "Any server",
|
|
460
|
+
"serverHelper": "Any server means all of them.",
|
|
461
|
+
"serverLabel": "Which server",
|
|
462
|
+
"accountLabel": "Which account",
|
|
463
|
+
"personLabel": "Which person",
|
|
464
|
+
"destinationsLabel": "Send to",
|
|
465
|
+
"required": "Pick at least one.",
|
|
466
|
+
"needs": {
|
|
467
|
+
"title": "What it needs"
|
|
480
468
|
},
|
|
481
|
-
"
|
|
482
|
-
|
|
483
|
-
|
|
484
|
-
"browseMovies": "Browse {{genre}} movies",
|
|
485
|
-
"browseShows": "Browse {{genre}} shows",
|
|
486
|
-
"columns": {
|
|
487
|
-
"genre": "Genre",
|
|
488
|
-
"items": "Items",
|
|
489
|
-
"plays": "Plays",
|
|
490
|
-
"watchTime": "Watch time"
|
|
491
|
-
},
|
|
492
|
-
"title": "Genre breakdown"
|
|
469
|
+
"helper": {
|
|
470
|
+
"killMessage": "Shown on the player when the stream stops.",
|
|
471
|
+
"clientMessage": "Shown on the player while it keeps playing."
|
|
493
472
|
},
|
|
494
|
-
"
|
|
473
|
+
"noInputs": "Nothing to fill in.",
|
|
474
|
+
"failed": "Couldn't set that up. Try again.",
|
|
475
|
+
"created": "{{name}} is set up and running.",
|
|
476
|
+
"createdOff": "{{name}} was created and is off. Turn it on from the list."
|
|
495
477
|
},
|
|
496
|
-
"
|
|
497
|
-
"
|
|
498
|
-
"
|
|
499
|
-
"
|
|
500
|
-
"
|
|
501
|
-
|
|
502
|
-
|
|
503
|
-
|
|
504
|
-
|
|
505
|
-
"
|
|
506
|
-
"
|
|
478
|
+
"builder": {
|
|
479
|
+
"destinationDisabled": "Disabled destination",
|
|
480
|
+
"noDestinations": "No destinations yet. Add one to send notifications.",
|
|
481
|
+
"newDestination": "New destination",
|
|
482
|
+
"errors": {
|
|
483
|
+
"sendNeedsDestination": "Pick at least one destination",
|
|
484
|
+
"nameRequired": "Automation name is required",
|
|
485
|
+
"scopeIncomplete": "Pick a target for the selected scope",
|
|
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}}",
|
|
497
|
+
"trustAmountRange": "Trust changes by between -100 and 100 points",
|
|
498
|
+
"trustValueRange": "Trust score is between 0 and 100",
|
|
499
|
+
"messageRequired": "Type the message to show",
|
|
500
|
+
"tooLong": "At most {{max}} characters"
|
|
507
501
|
},
|
|
508
|
-
"
|
|
509
|
-
|
|
510
|
-
|
|
511
|
-
"
|
|
512
|
-
"
|
|
513
|
-
"
|
|
514
|
-
|
|
515
|
-
|
|
516
|
-
|
|
517
|
-
|
|
518
|
-
|
|
519
|
-
|
|
520
|
-
|
|
521
|
-
|
|
522
|
-
|
|
523
|
-
|
|
524
|
-
"
|
|
525
|
-
"
|
|
526
|
-
"
|
|
527
|
-
"
|
|
528
|
-
"
|
|
529
|
-
"resolutionLabel": "Resolution",
|
|
530
|
-
"searchLabel": "Search titles",
|
|
531
|
-
"searchPlaceholder": "Search titles…",
|
|
532
|
-
"serverAll": "Any server",
|
|
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)",
|
|
533
523
|
"serverLabel": "Server",
|
|
534
|
-
"
|
|
535
|
-
"
|
|
536
|
-
"
|
|
537
|
-
"
|
|
538
|
-
"
|
|
539
|
-
"
|
|
540
|
-
"
|
|
541
|
-
|
|
542
|
-
|
|
543
|
-
|
|
544
|
-
|
|
545
|
-
|
|
546
|
-
|
|
547
|
-
|
|
548
|
-
"
|
|
549
|
-
"
|
|
550
|
-
"
|
|
551
|
-
"
|
|
552
|
-
|
|
553
|
-
|
|
554
|
-
|
|
555
|
-
|
|
556
|
-
|
|
557
|
-
"
|
|
558
|
-
"
|
|
559
|
-
"
|
|
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"
|
|
600
|
+
},
|
|
601
|
+
"heldFor": {
|
|
602
|
+
"prefix": "A stream has been paused for",
|
|
603
|
+
"minutesLabel": "Minutes",
|
|
604
|
+
"unit": "minutes",
|
|
605
|
+
"measureLabel": "Counted",
|
|
606
|
+
"current": "this time",
|
|
607
|
+
"total": "in total"
|
|
608
|
+
},
|
|
609
|
+
"inactiveFor": {
|
|
610
|
+
"prefix": "An account has been inactive for",
|
|
611
|
+
"daysLabel": "Days",
|
|
612
|
+
"unit": "days"
|
|
613
|
+
},
|
|
614
|
+
"rows": {
|
|
615
|
+
"toggle": "Include {{name}}",
|
|
616
|
+
"remove": "Remove {{name}}",
|
|
617
|
+
"skipped": "Skipped",
|
|
618
|
+
"toggleHint": "skip",
|
|
619
|
+
"removeHint": "remove",
|
|
620
|
+
"expandHint": "open",
|
|
621
|
+
"moveHint": "reorder"
|
|
622
|
+
},
|
|
623
|
+
"picker": {
|
|
624
|
+
"searchPlaceholder": "Search or describe what should happen",
|
|
625
|
+
"empty": "Nothing matches that.",
|
|
626
|
+
"navigate": "move",
|
|
627
|
+
"select": "pick",
|
|
628
|
+
"close": "close"
|
|
629
|
+
},
|
|
630
|
+
"sentence": {
|
|
631
|
+
"label": "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
|
+
},
|
|
643
|
+
"leave": {
|
|
644
|
+
"title": "Leave without saving?",
|
|
645
|
+
"confirm": "Leave"
|
|
646
|
+
},
|
|
647
|
+
"liveCheck": {
|
|
648
|
+
"title": "Right now on the servers",
|
|
649
|
+
"checking": "Checking against the sessions playing now…",
|
|
650
|
+
"empty": "Nothing is playing right now; nothing to check against.",
|
|
651
|
+
"failed": "Could not reach the servers to check.",
|
|
652
|
+
"footnote": "Cooldowns and already-handled sessions aren't simulated.",
|
|
653
|
+
"expand": "Show what matched for {{name}}",
|
|
654
|
+
"passed": "Passed",
|
|
655
|
+
"notPassed": "Did not pass",
|
|
656
|
+
"actual": "now {{value}}",
|
|
657
|
+
"unfinished": "Shows what this would do once the automation is complete.",
|
|
658
|
+
"paused": "Paused while this saves",
|
|
659
|
+
"sampleTitle": "What this would do to that run",
|
|
660
|
+
"sampleGone": "That session is no longer on record; nothing to check against.",
|
|
661
|
+
"backToLive": "Back to what's playing now"
|
|
560
662
|
}
|
|
561
663
|
},
|
|
562
|
-
"
|
|
563
|
-
"
|
|
564
|
-
|
|
565
|
-
|
|
566
|
-
|
|
567
|
-
|
|
568
|
-
|
|
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"
|
|
569
703
|
},
|
|
570
|
-
"
|
|
571
|
-
"
|
|
572
|
-
|
|
573
|
-
|
|
574
|
-
|
|
575
|
-
|
|
576
|
-
|
|
577
|
-
},
|
|
578
|
-
"
|
|
579
|
-
"
|
|
580
|
-
"
|
|
581
|
-
"
|
|
582
|
-
"
|
|
704
|
+
"triggers": {
|
|
705
|
+
"sessionStarted": "a stream starts",
|
|
706
|
+
"sessionStopped": "a stream stops",
|
|
707
|
+
"sessionTranscodeChanged": "transcoding starts or stops",
|
|
708
|
+
"sessionPaused": "a stream is paused",
|
|
709
|
+
"sessionHeldFor": "a stream has been paused for {{duration}}",
|
|
710
|
+
"sessionHeldForTotal": "a stream has been paused for {{duration}} in total",
|
|
711
|
+
"accountInactiveFor": "an account has been inactive for {{duration}}",
|
|
712
|
+
"accountNewDevice": "an account plays from a new device",
|
|
713
|
+
"accountTrustChanged": "an account's trust score changes",
|
|
714
|
+
"mediaAdded": "media is added",
|
|
715
|
+
"mediaUpgraded": "media is upgraded",
|
|
716
|
+
"serverDown": "a server goes down",
|
|
717
|
+
"serverUp": "a server comes back up",
|
|
718
|
+
"pluginUpdateAvailable": "a plugin update is available",
|
|
719
|
+
"serverUpdateAvailable": "a server update is available",
|
|
720
|
+
"tracearrUpdateAvailable": "a Tracearr update is available"
|
|
583
721
|
},
|
|
584
|
-
"
|
|
585
|
-
"
|
|
586
|
-
"
|
|
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"
|
|
587
733
|
},
|
|
588
|
-
"
|
|
589
|
-
|
|
590
|
-
"
|
|
591
|
-
|
|
592
|
-
|
|
593
|
-
|
|
594
|
-
|
|
595
|
-
|
|
596
|
-
|
|
734
|
+
"fields": {
|
|
735
|
+
"concurrent_streams": "the stream count",
|
|
736
|
+
"active_session_distance_km": "the distance between streams",
|
|
737
|
+
"travel_speed_kmh": "the travel speed",
|
|
738
|
+
"unique_ips_in_window": "the number of IP addresses",
|
|
739
|
+
"unique_devices_in_window": "the number of devices",
|
|
740
|
+
"inactive_days": "the time since the last stream",
|
|
741
|
+
"current_pause_minutes": "the current pause",
|
|
742
|
+
"total_pause_minutes": "the total pause time",
|
|
743
|
+
"source_resolution": "the source resolution",
|
|
744
|
+
"output_resolution": "the output resolution",
|
|
745
|
+
"is_transcoding": "the transcoding",
|
|
746
|
+
"is_transcode_downgrade": "the downgrade",
|
|
747
|
+
"source_bitrate_mbps": "the source bitrate",
|
|
748
|
+
"user_id": "the user",
|
|
749
|
+
"trust_score": "the trust score",
|
|
750
|
+
"account_age_days": "the account age",
|
|
751
|
+
"device_type": "the device type",
|
|
752
|
+
"client_name": "the player",
|
|
753
|
+
"platform": "the platform",
|
|
754
|
+
"is_local_network": "the local network",
|
|
755
|
+
"country": "the country",
|
|
756
|
+
"ip_in_range": "the IP address",
|
|
757
|
+
"server_id": "the server",
|
|
758
|
+
"media_type": "the media type",
|
|
759
|
+
"library_item_type": "the item type",
|
|
760
|
+
"library_name": "the library",
|
|
761
|
+
"resolution_after": "the resolution",
|
|
762
|
+
"dynamic_range_after": "the dynamic range",
|
|
763
|
+
"video_codec_after": "the video codec",
|
|
764
|
+
"audio_channels_after": "the audio channels",
|
|
765
|
+
"file_size_after": "the file size"
|
|
766
|
+
},
|
|
767
|
+
"states": {
|
|
768
|
+
"is_local_network": {
|
|
769
|
+
"yes": "the user is on the local network",
|
|
770
|
+
"no": "the user is not on the local network"
|
|
597
771
|
},
|
|
598
|
-
"
|
|
599
|
-
|
|
600
|
-
|
|
601
|
-
|
|
602
|
-
"
|
|
603
|
-
|
|
604
|
-
|
|
772
|
+
"is_transcode_downgrade": {
|
|
773
|
+
"yes": "the stream is downgraded",
|
|
774
|
+
"no": "the stream is not downgraded"
|
|
775
|
+
},
|
|
776
|
+
"is_transcoding": {
|
|
777
|
+
"video": {
|
|
778
|
+
"yes": "the stream is transcoding video",
|
|
779
|
+
"no": "the stream is not transcoding video"
|
|
780
|
+
},
|
|
781
|
+
"audio": {
|
|
782
|
+
"yes": "the stream is transcoding audio",
|
|
783
|
+
"no": "the stream is not transcoding audio"
|
|
784
|
+
},
|
|
785
|
+
"video_or_audio": {
|
|
786
|
+
"yes": "the stream is transcoding",
|
|
787
|
+
"no": "the stream is not transcoding"
|
|
788
|
+
},
|
|
789
|
+
"neither": {
|
|
790
|
+
"yes": "the stream is not transcoding",
|
|
791
|
+
"no": "the stream is transcoding"
|
|
792
|
+
}
|
|
793
|
+
}
|
|
605
794
|
},
|
|
606
|
-
"
|
|
607
|
-
|
|
608
|
-
|
|
609
|
-
|
|
610
|
-
|
|
611
|
-
|
|
612
|
-
|
|
613
|
-
|
|
614
|
-
|
|
615
|
-
|
|
616
|
-
|
|
617
|
-
|
|
618
|
-
|
|
619
|
-
"rankChip": "#{{rank}}",
|
|
620
|
-
"rankSuffix": ", rank {{rank}}",
|
|
621
|
-
"tileLabel": {
|
|
622
|
-
"added": "added",
|
|
623
|
-
"plays": "plays",
|
|
624
|
-
"resolution": "resolution",
|
|
625
|
-
"viewers": "viewers"
|
|
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"
|
|
626
808
|
},
|
|
627
|
-
"
|
|
628
|
-
|
|
629
|
-
|
|
630
|
-
|
|
631
|
-
|
|
632
|
-
"
|
|
633
|
-
|
|
634
|
-
|
|
635
|
-
"
|
|
636
|
-
"
|
|
809
|
+
"scope": {
|
|
810
|
+
"server": "one server",
|
|
811
|
+
"account": "one account",
|
|
812
|
+
"person": "one person"
|
|
813
|
+
},
|
|
814
|
+
"sameDeviceInput": "same device: {{input}}",
|
|
815
|
+
"uniqueIpsInput": "unique IPs: {{input}}",
|
|
816
|
+
"unbound": {
|
|
817
|
+
"server": "a chosen server",
|
|
818
|
+
"account": "a chosen account",
|
|
819
|
+
"person": "a chosen person",
|
|
820
|
+
"destinations": "a chosen destination",
|
|
821
|
+
"field_value": "a chosen value",
|
|
822
|
+
"select": "a chosen option",
|
|
823
|
+
"number": "a chosen number",
|
|
824
|
+
"duration": "a chosen length of time",
|
|
825
|
+
"text": "a chosen message",
|
|
826
|
+
"boolean": "a chosen setting",
|
|
827
|
+
"listed": "those chosen"
|
|
637
828
|
}
|
|
638
829
|
},
|
|
639
|
-
"
|
|
640
|
-
|
|
641
|
-
|
|
642
|
-
|
|
643
|
-
|
|
644
|
-
|
|
645
|
-
|
|
646
|
-
|
|
647
|
-
},
|
|
648
|
-
"plexCallback": {
|
|
649
|
-
"authComplete": "Authentication complete",
|
|
650
|
-
"windowWillClose": "This window will close automatically..."
|
|
651
|
-
},
|
|
652
|
-
"rules": {
|
|
653
|
-
"accountInactivity": "Account Inactivity",
|
|
654
|
-
"accountInactivityDesc": "Get notified when users have not watched anything for a specified period",
|
|
655
|
-
"addRule": "Add Rule",
|
|
656
|
-
"allowed": "Allowed",
|
|
657
|
-
"allowedCountries": "Allowed Countries",
|
|
658
|
-
"allowlist": "Allowlist (only allow these countries)",
|
|
659
|
-
"allowlistNote": "Streams from any other country will trigger a violation.",
|
|
660
|
-
"blocked": "Blocked",
|
|
661
|
-
"blockedCountries": "Blocked Countries",
|
|
662
|
-
"blocklist": "Blocklist (block these countries)",
|
|
663
|
-
"builder": {
|
|
664
|
-
"destinationDisabled": "Disabled destination",
|
|
665
|
-
"errors": {
|
|
666
|
-
"sendNeedsDestination": "Pick at least one destination"
|
|
667
|
-
},
|
|
668
|
-
"noDestinations": "No destinations yet. Add one to send notifications."
|
|
830
|
+
"description": "Automations watch your servers and act when their conditions match",
|
|
831
|
+
"detail": {
|
|
832
|
+
"notFound": "Automation not found",
|
|
833
|
+
"title": "Automation",
|
|
834
|
+
"unsaved": "Unsaved changes",
|
|
835
|
+
"runsLine_one": "1 run · last run {{when}}",
|
|
836
|
+
"runsLine_other": "{{count}} runs · last run {{when}}",
|
|
837
|
+
"noRuns": "No runs yet"
|
|
669
838
|
},
|
|
670
|
-
"chooseTemplate": "Choose a Rule Template",
|
|
671
|
-
"chooseTemplateDesc": "Select a pre-configured rule type to get started quickly.",
|
|
672
|
-
"classicRule": "Classic Rule",
|
|
673
|
-
"concurrentStreams": "Concurrent Streams",
|
|
674
|
-
"concurrentStreamsDesc": "Limit the number of simultaneous streams per user",
|
|
675
|
-
"createDescription": "Configure a new detection rule for your media servers.",
|
|
676
|
-
"createFirstRule": "Create your first detection rule to start monitoring for account sharing.",
|
|
677
|
-
"createRule": "Create Rule",
|
|
678
|
-
"customRule": "Custom Rule",
|
|
679
|
-
"days": "Days",
|
|
680
|
-
"deleteRule": "Delete Rule",
|
|
681
|
-
"deleteRuleConfirm": "Are you sure you want to delete this rule? This action cannot be undone.",
|
|
682
|
-
"deleteRule_one": "Delete {{count}} Rule",
|
|
683
|
-
"deleteRule_other": "Delete {{count}} Rules",
|
|
684
|
-
"deleteRulesConfirm": "Are you sure you want to delete? This action cannot be undone.",
|
|
685
|
-
"description": "Configure detection rules for account sharing and policy violations",
|
|
686
|
-
"deviceVelocity": "Device Velocity",
|
|
687
|
-
"deviceVelocityDesc": "Detect when a user connects from too many IPs in a time window",
|
|
688
839
|
"disable": "Disable",
|
|
689
|
-
"
|
|
840
|
+
"editAutomation": "Edit Automation",
|
|
841
|
+
"effects": {
|
|
842
|
+
"title": "What this will do",
|
|
843
|
+
"kill": "Can stop a stream that is playing.",
|
|
844
|
+
"trust": "Changes trust scores.",
|
|
845
|
+
"message": "Puts a message on a player.",
|
|
846
|
+
"violation": "Records a violation against the matched person.",
|
|
847
|
+
"tellsOnly": "Only notifies. Never stops a stream or changes an account.",
|
|
848
|
+
"allServers": "Runs on every server unless one is chosen.",
|
|
849
|
+
"everyServer": "Runs on every server.",
|
|
850
|
+
"oneServer": "Runs on {{server}} only."
|
|
851
|
+
},
|
|
852
|
+
"emptyTitle": "No automations yet",
|
|
853
|
+
"emptyDescription": "Ready-made automations. Pick one and fill in the blanks.",
|
|
854
|
+
"emptySeeAll": "See all {{count}}",
|
|
855
|
+
"emptySeeAllLoading": "See all",
|
|
690
856
|
"enable": "Enable",
|
|
691
|
-
"
|
|
692
|
-
|
|
693
|
-
|
|
694
|
-
|
|
695
|
-
|
|
696
|
-
|
|
697
|
-
|
|
698
|
-
|
|
699
|
-
|
|
700
|
-
"
|
|
701
|
-
|
|
702
|
-
|
|
703
|
-
|
|
704
|
-
|
|
705
|
-
|
|
706
|
-
|
|
707
|
-
|
|
708
|
-
|
|
709
|
-
|
|
710
|
-
|
|
711
|
-
|
|
712
|
-
|
|
713
|
-
|
|
714
|
-
|
|
715
|
-
|
|
716
|
-
|
|
717
|
-
|
|
718
|
-
|
|
719
|
-
|
|
720
|
-
"simultaneousLocations": "Simultaneous Locations",
|
|
721
|
-
"simultaneousLocationsDesc": "Detect when a user streams from multiple distant locations at once",
|
|
722
|
-
"timeWindow": "Time Window (hours)",
|
|
723
|
-
"title": "Rules",
|
|
724
|
-
"unit": "Unit",
|
|
725
|
-
"updateDescription": "Update the rule configuration below.",
|
|
726
|
-
"updateRule": "Update Rule",
|
|
727
|
-
"weeks": "Weeks"
|
|
728
|
-
},
|
|
729
|
-
"settings": {
|
|
730
|
-
"destinations": {
|
|
731
|
-
"add": "Add destination",
|
|
732
|
-
"builtinNote": "Built in",
|
|
733
|
-
"clearSecret": "Clear",
|
|
734
|
-
"delete": "Delete",
|
|
735
|
-
"deleteConfirm": "Delete {{name}}? Rules that send to it will be blocked until they are updated.",
|
|
736
|
-
"description": "Where notifications go. Add as many as you like; each one picks the system events it receives, and rules can send to any of them.",
|
|
737
|
-
"empty": "No destinations yet.",
|
|
738
|
-
"events": {
|
|
739
|
-
"plugin_update_available": "Plugin update available",
|
|
740
|
-
"server_down": "Server down",
|
|
741
|
-
"server_up": "Server up",
|
|
742
|
-
"stream_started": "Stream started",
|
|
743
|
-
"stream_stopped": "Stream stopped",
|
|
744
|
-
"violation_detected": "Violation detected"
|
|
745
|
-
},
|
|
746
|
-
"eventsLabel": "Events",
|
|
747
|
-
"fields": {
|
|
748
|
-
"apiToken": "API token",
|
|
749
|
-
"apiUrl": "API URL",
|
|
750
|
-
"authToken": "Auth token",
|
|
751
|
-
"serverUrl": "Server URL",
|
|
752
|
-
"topic": "Topic",
|
|
753
|
-
"url": "URL",
|
|
754
|
-
"userKey": "User key",
|
|
755
|
-
"webhookUrl": "Webhook URL"
|
|
857
|
+
"evaluations": {
|
|
858
|
+
"disclosure": "Matches that did not start a run ({{total}})",
|
|
859
|
+
"reasons": {
|
|
860
|
+
"cooldown_active": "Cooldown was active",
|
|
861
|
+
"edge_replayed": "Same edge already handled",
|
|
862
|
+
"gate_blocked": "An open run already covers this",
|
|
863
|
+
"trigger_filter_failed": "Trigger threshold not reached"
|
|
864
|
+
}
|
|
865
|
+
},
|
|
866
|
+
"export": {
|
|
867
|
+
"title": "Share this automation",
|
|
868
|
+
"description": "A code another Tracearr can paste in.",
|
|
869
|
+
"carries": "The code carries the steps only. Destinations, servers and accounts are not included; the receiving side fills in its own.",
|
|
870
|
+
"copyCode": "Copy the share code",
|
|
871
|
+
"copyJson": "Copy the JSON",
|
|
872
|
+
"authorLabel": "Author",
|
|
873
|
+
"authorPlaceholder": "Name",
|
|
874
|
+
"authorHelper": "Shown on the gallery page and carried in the code. Optional.",
|
|
875
|
+
"save": "Save as ready-made",
|
|
876
|
+
"saved": "{{name}} saved as a ready-made automation.",
|
|
877
|
+
"saveFailed": "Could not save it.",
|
|
878
|
+
"failed": "Couldn't make a code for this one.",
|
|
879
|
+
"saveHelper": "Adds it to this server's list of ready-made automations.",
|
|
880
|
+
"authorInCode": "The code includes the author name.",
|
|
881
|
+
"groupLabel": "Section",
|
|
882
|
+
"groupHelper": "Which part of the gallery it is listed under.",
|
|
883
|
+
"gallery": {
|
|
884
|
+
"trigger": "Put this in the community gallery",
|
|
885
|
+
"body": "The gallery at docs.tracearr.com/templates lists shared automations. Adding one is a pull request to Tracearr/automation-templates with the JSON below. Tracearr never reads the gallery."
|
|
756
886
|
},
|
|
757
|
-
"
|
|
758
|
-
|
|
887
|
+
"openRepository": "Open the repository"
|
|
888
|
+
},
|
|
889
|
+
"fields": {
|
|
890
|
+
"concurrent_streams": {
|
|
891
|
+
"label": "Concurrent Streams",
|
|
892
|
+
"description": "Number of active streams from the same user"
|
|
893
|
+
},
|
|
894
|
+
"active_session_distance_km": {
|
|
895
|
+
"label": "Distance Between Sessions",
|
|
896
|
+
"description": "Distance between simultaneous sessions"
|
|
897
|
+
},
|
|
898
|
+
"travel_speed_kmh": {
|
|
899
|
+
"label": "Travel Speed",
|
|
900
|
+
"description": "Calculated travel speed between locations"
|
|
901
|
+
},
|
|
902
|
+
"unique_ips_in_window": {
|
|
903
|
+
"label": "Unique IPs in Window",
|
|
904
|
+
"description": "Number of unique IP addresses in the time window"
|
|
905
|
+
},
|
|
906
|
+
"unique_devices_in_window": {
|
|
907
|
+
"label": "Unique Devices in Window",
|
|
908
|
+
"description": "Number of unique devices in the time window"
|
|
909
|
+
},
|
|
910
|
+
"inactive_days": {
|
|
911
|
+
"label": "Days Inactive",
|
|
912
|
+
"description": "Days since last activity"
|
|
913
|
+
},
|
|
914
|
+
"current_pause_minutes": {
|
|
915
|
+
"label": "Current Pause Duration",
|
|
916
|
+
"description": "How long the session has been continuously paused"
|
|
917
|
+
},
|
|
918
|
+
"total_pause_minutes": {
|
|
919
|
+
"label": "Total Pause Duration",
|
|
920
|
+
"description": "Total accumulated pause time across all pause/resume cycles"
|
|
921
|
+
},
|
|
922
|
+
"source_resolution": {
|
|
923
|
+
"label": "Source Resolution",
|
|
924
|
+
"description": "Original media resolution"
|
|
925
|
+
},
|
|
926
|
+
"output_resolution": {
|
|
927
|
+
"label": "Output Resolution",
|
|
928
|
+
"description": "Transcoded or delivered resolution"
|
|
929
|
+
},
|
|
930
|
+
"is_transcoding": {
|
|
931
|
+
"label": "Is Transcoding",
|
|
932
|
+
"description": "Whether video or audio streams are being transcoded"
|
|
933
|
+
},
|
|
934
|
+
"is_transcode_downgrade": {
|
|
935
|
+
"label": "Transcode Downgrade",
|
|
936
|
+
"description": "Output resolution is lower than source"
|
|
937
|
+
},
|
|
938
|
+
"source_bitrate_mbps": {
|
|
939
|
+
"label": "Source Bitrate",
|
|
940
|
+
"description": "Original media bitrate"
|
|
941
|
+
},
|
|
942
|
+
"user_id": {
|
|
943
|
+
"label": "User",
|
|
944
|
+
"description": "Specific users by account",
|
|
945
|
+
"placeholder": "Select users…"
|
|
946
|
+
},
|
|
947
|
+
"trust_score": {
|
|
948
|
+
"label": "Trust Score",
|
|
949
|
+
"description": "The user's trust score, from 0 to 100"
|
|
950
|
+
},
|
|
951
|
+
"account_age_days": {
|
|
952
|
+
"label": "Account Age",
|
|
953
|
+
"description": "Days since account creation"
|
|
954
|
+
},
|
|
955
|
+
"device_type": {
|
|
956
|
+
"label": "Device Type",
|
|
957
|
+
"description": "Type of device used"
|
|
958
|
+
},
|
|
959
|
+
"client_name": {
|
|
960
|
+
"label": "Client/Player",
|
|
961
|
+
"description": "Media player application",
|
|
962
|
+
"placeholder": "e.g., Plex for iOS"
|
|
963
|
+
},
|
|
964
|
+
"platform": {
|
|
965
|
+
"label": "Platform/OS",
|
|
966
|
+
"description": "Operating system"
|
|
967
|
+
},
|
|
968
|
+
"is_local_network": {
|
|
969
|
+
"label": "Local Network",
|
|
970
|
+
"description": "Streaming from the local network"
|
|
971
|
+
},
|
|
972
|
+
"country": {
|
|
973
|
+
"label": "Country",
|
|
974
|
+
"description": "Geographic country",
|
|
975
|
+
"placeholder": "Select countries…"
|
|
976
|
+
},
|
|
977
|
+
"ip_in_range": {
|
|
978
|
+
"label": "IP Range",
|
|
979
|
+
"description": "IP address in a CIDR range, IPv4 or IPv6",
|
|
980
|
+
"placeholder": "e.g., 192.168.1.0/24 or 2001:db8:abcd:7800::/64"
|
|
981
|
+
},
|
|
982
|
+
"server_id": {
|
|
983
|
+
"label": "Server",
|
|
984
|
+
"description": "Specific media server",
|
|
985
|
+
"placeholder": "Select servers…"
|
|
986
|
+
},
|
|
987
|
+
"media_type": {
|
|
988
|
+
"label": "Media Type",
|
|
989
|
+
"description": "Type of content"
|
|
990
|
+
},
|
|
991
|
+
"library_item_type": {
|
|
992
|
+
"label": "Item Type",
|
|
993
|
+
"description": "What kind of library item it is"
|
|
994
|
+
},
|
|
995
|
+
"library_name": {
|
|
996
|
+
"label": "Library",
|
|
997
|
+
"description": "Name of the library it landed in",
|
|
998
|
+
"placeholder": "Movies"
|
|
999
|
+
},
|
|
1000
|
+
"resolution_after": {
|
|
1001
|
+
"label": "Resolution",
|
|
1002
|
+
"description": "Resolution the item ends up at"
|
|
1003
|
+
},
|
|
1004
|
+
"dynamic_range_after": {
|
|
1005
|
+
"label": "Dynamic Range",
|
|
1006
|
+
"description": "HDR format the item ends up with"
|
|
1007
|
+
},
|
|
1008
|
+
"video_codec_after": {
|
|
1009
|
+
"label": "Video Codec",
|
|
1010
|
+
"description": "Video codec the item ends up with"
|
|
1011
|
+
},
|
|
1012
|
+
"audio_channels_after": {
|
|
1013
|
+
"label": "Audio Channels",
|
|
1014
|
+
"description": "Audio channel count the item ends up with"
|
|
1015
|
+
},
|
|
1016
|
+
"file_size_after": {
|
|
1017
|
+
"label": "File Size",
|
|
1018
|
+
"description": "Size the item ends up at, across every copy"
|
|
1019
|
+
}
|
|
1020
|
+
},
|
|
1021
|
+
"gallery": {
|
|
1022
|
+
"title": "New automation",
|
|
1023
|
+
"description": "Ready-made automations. Pick one and fill in the blanks.",
|
|
1024
|
+
"searchPlaceholder": "Search",
|
|
1025
|
+
"noMatches": "Nothing matches “{{query}}”.",
|
|
1026
|
+
"noMatchesHint": "Try a word from the outcome: discord, offline, paused.",
|
|
1027
|
+
"group": {
|
|
1028
|
+
"notifications": "Notifications",
|
|
1029
|
+
"server_health": "Server health",
|
|
1030
|
+
"policies": "Limits and rules",
|
|
1031
|
+
"housekeeping": "Housekeeping",
|
|
1032
|
+
"other": "Other ways to start"
|
|
1033
|
+
},
|
|
1034
|
+
"builtin": "Built-in",
|
|
1035
|
+
"kind": {
|
|
1036
|
+
"policy": "A violation",
|
|
1037
|
+
"notification": "An alert"
|
|
1038
|
+
},
|
|
1039
|
+
"paste": {
|
|
1040
|
+
"title": "Paste a share code",
|
|
1041
|
+
"description": "Paste a code and review what it does before adding it."
|
|
1042
|
+
},
|
|
1043
|
+
"scratch": {
|
|
1044
|
+
"title": "Start from scratch",
|
|
1045
|
+
"description": "Build it step by step."
|
|
1046
|
+
},
|
|
1047
|
+
"failed": "Couldn't load the ready-made automations.",
|
|
1048
|
+
"retry": "Try again",
|
|
1049
|
+
"missing": "That ready-made automation is not on this server.",
|
|
1050
|
+
"hint": {
|
|
1051
|
+
"move": "move",
|
|
1052
|
+
"use": "use",
|
|
1053
|
+
"close": "close"
|
|
1054
|
+
},
|
|
1055
|
+
"loading": "Loading…"
|
|
1056
|
+
},
|
|
1057
|
+
"import": {
|
|
1058
|
+
"title": "Paste a share code",
|
|
1059
|
+
"description": "Paste the code. Everything is in the code; Tracearr fetches nothing.",
|
|
1060
|
+
"reviewDescription": "What the code does, and what to fill in.",
|
|
1061
|
+
"placeholder": "tracearr1.…",
|
|
1062
|
+
"formatHint": "A code starts with tracearr1.",
|
|
1063
|
+
"check": "Check it",
|
|
1064
|
+
"checking": "Reading it…",
|
|
1065
|
+
"valid": "Tracearr can read this code.",
|
|
1066
|
+
"madeBy": "Author: {{author}}, as written in the code",
|
|
1067
|
+
"codeShort": "Code {{fingerprint}}",
|
|
1068
|
+
"paused": {
|
|
1069
|
+
"label": "Start paused",
|
|
1070
|
+
"helper": "Turn it on from the list after review."
|
|
1071
|
+
},
|
|
1072
|
+
"submit": "Add it",
|
|
1073
|
+
"adding": "Adding it…",
|
|
1074
|
+
"existing": "Already saved as {{name}}.",
|
|
1075
|
+
"existingUse": "Use it",
|
|
1076
|
+
"collision": {
|
|
1077
|
+
"title": "A different automation named {{name}} already exists.",
|
|
1078
|
+
"add": "Keep both",
|
|
1079
|
+
"replace": "Replace mine"
|
|
1080
|
+
},
|
|
1081
|
+
"raw": "Show the JSON",
|
|
1082
|
+
"errors": {
|
|
1083
|
+
"notACode": "That doesn't look like a Tracearr share code.",
|
|
1084
|
+
"notACodeHint": "A code starts with tracearr1. The JSON works too.",
|
|
1085
|
+
"tooBig": "That's too big to be a Tracearr automation.",
|
|
1086
|
+
"tooBigHint": "Codes are a few thousand characters at most.",
|
|
1087
|
+
"truncated": "This code looks cut off.",
|
|
1088
|
+
"truncatedHint": "Copy the whole code and paste it again; some chat apps split long codes across lines.",
|
|
1089
|
+
"tooNew": "This needs Tracearr {{required}} or newer.",
|
|
1090
|
+
"tooNewHint": "This server runs {{current}}. Update Tracearr, then paste again.",
|
|
1091
|
+
"tooMany": "That's a lot of codes in one minute.",
|
|
1092
|
+
"tooManyHint": "Wait a moment, then check it again.",
|
|
1093
|
+
"rejected": "Tracearr couldn't read this one.",
|
|
1094
|
+
"rejectedHint": "It may come from a different tool or have been edited by hand."
|
|
1095
|
+
},
|
|
1096
|
+
"source": "Shared automations are listed at docs.tracearr.com/templates.",
|
|
1097
|
+
"validCaveat": "Nothing in a code says who wrote it or whether it is safe. The steps are below.",
|
|
1098
|
+
"builtinMatch": "This is {{name}}, one of the automations Tracearr ships."
|
|
1099
|
+
},
|
|
1100
|
+
"kind": {
|
|
1101
|
+
"policy": "Violation",
|
|
1102
|
+
"notification": "Alert"
|
|
1103
|
+
},
|
|
1104
|
+
"kindColumn": "Kind",
|
|
1105
|
+
"name": "Automation Name",
|
|
1106
|
+
"newAutomation": "New automation",
|
|
1107
|
+
"namePlaceholder": "A name for this automation",
|
|
1108
|
+
"nameInvalid": "Give it a name.",
|
|
1109
|
+
"descriptionLabel": "Description",
|
|
1110
|
+
"descriptionPlaceholder": "What this is for",
|
|
1111
|
+
"thisAutomation": "This automation",
|
|
1112
|
+
"cooldownLabel": "At most once every",
|
|
1113
|
+
"cooldownInvalid": "Enter a whole number of minutes, 0 or more, or leave it empty.",
|
|
1114
|
+
"retentionLabel": "Keep runs for",
|
|
1115
|
+
"retentionPlaceholder": "{{days}}",
|
|
1116
|
+
"retentionInvalid": "Enter a whole number of days, at least 1, or leave it empty.",
|
|
1117
|
+
"noAutomationsFound": "No automations found",
|
|
1118
|
+
"operators": {
|
|
1119
|
+
"eq": "equals",
|
|
1120
|
+
"neq": "not equals",
|
|
1121
|
+
"gt": "greater than",
|
|
1122
|
+
"gte": "at least",
|
|
1123
|
+
"lt": "less than",
|
|
1124
|
+
"lte": "at most",
|
|
1125
|
+
"in": "is one of",
|
|
1126
|
+
"not_in": "is not one of",
|
|
1127
|
+
"contains": "contains",
|
|
1128
|
+
"not_contains": "does not contain"
|
|
1129
|
+
},
|
|
1130
|
+
"options": {
|
|
1131
|
+
"4K": "4K (2160p)",
|
|
1132
|
+
"1080p": "1080p",
|
|
1133
|
+
"720p": "720p",
|
|
1134
|
+
"480p": "480p",
|
|
1135
|
+
"SD": "SD",
|
|
1136
|
+
"unknown": "Unknown",
|
|
1137
|
+
"mobile": "Mobile",
|
|
1138
|
+
"tablet": "Tablet",
|
|
1139
|
+
"tv": "TV",
|
|
1140
|
+
"desktop": "Desktop",
|
|
1141
|
+
"browser": "Browser",
|
|
1142
|
+
"ios": "iOS",
|
|
1143
|
+
"android": "Android",
|
|
1144
|
+
"windows": "Windows",
|
|
1145
|
+
"macos": "macOS",
|
|
1146
|
+
"linux": "Linux",
|
|
1147
|
+
"tvos": "tvOS",
|
|
1148
|
+
"androidtv": "Android TV",
|
|
1149
|
+
"roku": "Roku",
|
|
1150
|
+
"webos": "webOS",
|
|
1151
|
+
"tizen": "Tizen",
|
|
1152
|
+
"movie": "Movie",
|
|
1153
|
+
"episode": "TV Episode",
|
|
1154
|
+
"track": "Music",
|
|
1155
|
+
"photo": "Photo",
|
|
1156
|
+
"live": "Live TV",
|
|
1157
|
+
"trailer": "Trailer",
|
|
1158
|
+
"video": "Video",
|
|
1159
|
+
"audio": "Audio",
|
|
1160
|
+
"video_or_audio": "Video or Audio",
|
|
1161
|
+
"neither": "Neither (Direct Play)",
|
|
1162
|
+
"8K": "8K",
|
|
1163
|
+
"1440p": "1440p",
|
|
1164
|
+
"sdr": "SDR",
|
|
1165
|
+
"hdr": "HDR",
|
|
1166
|
+
"hdr10": "HDR10",
|
|
1167
|
+
"hdr10+": "HDR10+",
|
|
1168
|
+
"hlg": "HLG",
|
|
1169
|
+
"dolby vision": "Dolby Vision",
|
|
1170
|
+
"libraryItemType": {
|
|
1171
|
+
"movie": "Movie",
|
|
1172
|
+
"show": "Show",
|
|
1173
|
+
"season": "Season",
|
|
1174
|
+
"episode": "Episode",
|
|
1175
|
+
"artist": "Artist",
|
|
1176
|
+
"album": "Album",
|
|
1177
|
+
"track": "Track",
|
|
1178
|
+
"photo": "Photo"
|
|
1179
|
+
}
|
|
1180
|
+
},
|
|
1181
|
+
"provenance": {
|
|
1182
|
+
"builtin": "Built-in · {{name}} {{version}}",
|
|
1183
|
+
"imported": "Imported from a share code on {{date}} · {{name}} {{version}}",
|
|
1184
|
+
"importedBy": "Imported from a share code by {{author}} on {{date}} · {{name}} {{version}}",
|
|
1185
|
+
"saved": "Saved here from {{name}} on {{date}} · {{version}}",
|
|
1186
|
+
"customized": "Customized from {{name}}",
|
|
1187
|
+
"customizedFromRemoved": "Customized from a ready-made automation that has since been removed"
|
|
1188
|
+
},
|
|
1189
|
+
"recordsOnly": "Records runs only",
|
|
1190
|
+
"scope": {
|
|
1191
|
+
"global": "Global",
|
|
1192
|
+
"person": "Person",
|
|
1193
|
+
"account": "Account",
|
|
1194
|
+
"crossServer": "Cross-server"
|
|
1195
|
+
},
|
|
1196
|
+
"searchPlaceholder": "Search automations…",
|
|
1197
|
+
"sessionTargets": {
|
|
1198
|
+
"triggering": {
|
|
1199
|
+
"label": "Triggering session",
|
|
1200
|
+
"tooltip": "Only the session that triggered this automation"
|
|
1201
|
+
},
|
|
1202
|
+
"oldest": {
|
|
1203
|
+
"label": "Oldest session",
|
|
1204
|
+
"tooltip": "The user's longest-running active session"
|
|
1205
|
+
},
|
|
1206
|
+
"newest": {
|
|
1207
|
+
"label": "Newest session",
|
|
1208
|
+
"tooltip": "The user's most recently started session"
|
|
1209
|
+
},
|
|
1210
|
+
"all_except_one": {
|
|
1211
|
+
"label": "All except one (keep oldest)",
|
|
1212
|
+
"tooltip": "All sessions except the oldest, bringing the user down to one stream"
|
|
1213
|
+
},
|
|
1214
|
+
"all_user": {
|
|
1215
|
+
"label": "All user sessions",
|
|
1216
|
+
"tooltip": "Every active session for this user"
|
|
1217
|
+
}
|
|
1218
|
+
},
|
|
1219
|
+
"configFields": {
|
|
1220
|
+
"cooldown_minutes": {
|
|
1221
|
+
"label": "Cooldown"
|
|
1222
|
+
},
|
|
1223
|
+
"target": {
|
|
1224
|
+
"label": "Target"
|
|
1225
|
+
},
|
|
1226
|
+
"message": {
|
|
1227
|
+
"label": "Message"
|
|
1228
|
+
}
|
|
1229
|
+
},
|
|
1230
|
+
"trustModes": {
|
|
1231
|
+
"adjust": {
|
|
1232
|
+
"label": "Adjust by amount"
|
|
1233
|
+
},
|
|
1234
|
+
"set": {
|
|
1235
|
+
"label": "Set to value"
|
|
1236
|
+
},
|
|
1237
|
+
"reset": {
|
|
1238
|
+
"label": "Reset to default (100)"
|
|
1239
|
+
}
|
|
1240
|
+
},
|
|
1241
|
+
"severity": {
|
|
1242
|
+
"low": "Low",
|
|
1243
|
+
"warning": "Warning",
|
|
1244
|
+
"high": "High"
|
|
1245
|
+
},
|
|
1246
|
+
"template": {
|
|
1247
|
+
"version": "v{{version}}",
|
|
1248
|
+
"updateAvailable": "An update is available",
|
|
1249
|
+
"updatedTitle": "The ready-made automation is now on v{{version}}",
|
|
1250
|
+
"updatedBody": "Review the answers below, then update.",
|
|
1251
|
+
"before": "Now",
|
|
1252
|
+
"after": "After the update",
|
|
1253
|
+
"review": "Review and update",
|
|
1254
|
+
"save": "Save changes",
|
|
1255
|
+
"customize": "Customize",
|
|
1256
|
+
"customizeTitle": "Open this in the builder?",
|
|
1257
|
+
"customizeConfirm": "Opening it in the builder makes this automation independent: every step is editable, and it no longer receives updates from the ready-made one. This cannot be undone.",
|
|
1258
|
+
"customizeConfirmAction": "Customize it",
|
|
1259
|
+
"customizeFirst": "This automation follows a ready-made one. Open it in the builder first.",
|
|
1260
|
+
"customizeFailed": "Could not open it in the builder.",
|
|
1261
|
+
"upgradeFailed": "Couldn't update that. Try again.",
|
|
1262
|
+
"gone": "The ready-made automation this was built from is no longer on this server.",
|
|
1263
|
+
"doorsHelper": "The steps come from the ready-made automation and are fixed. Open in the builder makes every step editable and ends the link."
|
|
1264
|
+
},
|
|
1265
|
+
"templates": {
|
|
1266
|
+
"account-inactivity": {
|
|
1267
|
+
"name": "Inactive account",
|
|
1268
|
+
"description": "Raise a violation when an account goes unused for the days you allow.",
|
|
1269
|
+
"keywords": "idle dormant unused stale cleanup inactive account"
|
|
1270
|
+
},
|
|
1271
|
+
"concurrent-streams": {
|
|
1272
|
+
"name": "Too many streams at once",
|
|
1273
|
+
"description": "Raise a violation when an account plays more streams at once than you allow.",
|
|
1274
|
+
"keywords": "limit cap concurrent simultaneous sharing too many streams"
|
|
1275
|
+
},
|
|
1276
|
+
"device-velocity": {
|
|
1277
|
+
"name": "Many IPs in a window",
|
|
1278
|
+
"description": "Raise a violation when an account streams from more IP addresses in a window than you allow.",
|
|
1279
|
+
"keywords": "ip addresses vpn sharing devices window"
|
|
1280
|
+
},
|
|
1281
|
+
"geo-restriction": {
|
|
1282
|
+
"name": "Blocked countries",
|
|
1283
|
+
"description": "Raise a violation when a stream comes from a country you block.",
|
|
1284
|
+
"keywords": "country geo vpn abroad region block travel"
|
|
1285
|
+
},
|
|
1286
|
+
"impossible-travel": {
|
|
1287
|
+
"name": "Impossible travel",
|
|
1288
|
+
"description": "Raise a violation when two sessions sit further apart than anyone could travel between them.",
|
|
1289
|
+
"keywords": "vpn travel speed distance location sharing"
|
|
1290
|
+
},
|
|
1291
|
+
"kill-paused-streams": {
|
|
1292
|
+
"name": "Stop paused streams",
|
|
1293
|
+
"description": "Stop a stream that has sat paused past the minutes you allow.",
|
|
1294
|
+
"keywords": "pause idle afk stop kill terminate reclaim"
|
|
1295
|
+
},
|
|
1296
|
+
"media-added": {
|
|
1297
|
+
"name": "New media added",
|
|
1298
|
+
"description": "Tell a destination when a library item shows up for the first time.",
|
|
1299
|
+
"keywords": "new library movie episode added import notify discord email webhook"
|
|
1300
|
+
},
|
|
1301
|
+
"media-upgraded": {
|
|
1302
|
+
"name": "Media upgraded",
|
|
1303
|
+
"description": "Tell a destination when a library item changes quality.",
|
|
1304
|
+
"keywords": "upgrade quality remux 4k resolution replaced notify discord email webhook"
|
|
1305
|
+
},
|
|
1306
|
+
"new-device": {
|
|
1307
|
+
"name": "New device",
|
|
1308
|
+
"description": "Tell a destination the first time an account streams from a device you have not seen.",
|
|
1309
|
+
"keywords": "device new unknown unrecognized phone login sharing notify discord email webhook"
|
|
1310
|
+
},
|
|
1311
|
+
"no-4k-transcodes": {
|
|
1312
|
+
"name": "No 4K transcodes",
|
|
1313
|
+
"description": "Stop a stream that transcodes 4K source video.",
|
|
1314
|
+
"keywords": "4k transcode quality cpu bandwidth stop"
|
|
1315
|
+
},
|
|
1316
|
+
"paused-too-long": {
|
|
1317
|
+
"name": "Paused too long",
|
|
1318
|
+
"description": "Tell a destination when a stream sits paused past the minutes you allow.",
|
|
1319
|
+
"keywords": "pause idle afk stuck abandoned notify discord email webhook"
|
|
1320
|
+
},
|
|
1321
|
+
"plugin-update": {
|
|
1322
|
+
"name": "Tracearr plugin update",
|
|
1323
|
+
"description": "Tell a destination when a server has a newer Tracearr plugin to install.",
|
|
1324
|
+
"keywords": "plugin update upgrade version release notify discord email webhook"
|
|
1325
|
+
},
|
|
1326
|
+
"server-down": {
|
|
1327
|
+
"name": "Server down",
|
|
1328
|
+
"description": "Tell a destination when a media server stops answering.",
|
|
1329
|
+
"keywords": "offline outage unreachable down notify discord email webhook"
|
|
1330
|
+
},
|
|
1331
|
+
"server-up": {
|
|
1332
|
+
"name": "Server back up",
|
|
1333
|
+
"description": "Tell a destination when a media server answers again.",
|
|
1334
|
+
"keywords": "online recovered restored back up notify discord email webhook"
|
|
1335
|
+
},
|
|
1336
|
+
"server-update": {
|
|
1337
|
+
"name": "Media server update",
|
|
1338
|
+
"description": "Tell a destination when a media server has an update available.",
|
|
1339
|
+
"keywords": "update upgrade version release plex jellyfin emby notify discord"
|
|
1340
|
+
},
|
|
1341
|
+
"simultaneous-locations": {
|
|
1342
|
+
"name": "Two places at once",
|
|
1343
|
+
"description": "Raise a violation when one account streams from two distant places at the same time.",
|
|
1344
|
+
"keywords": "distance location sharing vpn two places at once"
|
|
1345
|
+
},
|
|
1346
|
+
"stream-ended": {
|
|
1347
|
+
"name": "Stream ended",
|
|
1348
|
+
"description": "Tell a destination every time a stream stops.",
|
|
1349
|
+
"keywords": "stop end finish playback notify discord email webhook"
|
|
1350
|
+
},
|
|
1351
|
+
"stream-started": {
|
|
1352
|
+
"name": "Stream started",
|
|
1353
|
+
"description": "Tell a destination every time a stream starts.",
|
|
1354
|
+
"keywords": "play watch begin start viewing notify discord email webhook"
|
|
1355
|
+
},
|
|
1356
|
+
"tracearr-update": {
|
|
1357
|
+
"name": "Tracearr update",
|
|
1358
|
+
"description": "Tell a destination when a new Tracearr release is out.",
|
|
1359
|
+
"keywords": "update upgrade version release tracearr notify discord email webhook"
|
|
1360
|
+
},
|
|
1361
|
+
"transcode-started": {
|
|
1362
|
+
"name": "Stream is transcoding",
|
|
1363
|
+
"description": "Tell a destination when a stream transcodes video or audio.",
|
|
1364
|
+
"keywords": "transcode convert cpu direct play quality notify discord email webhook"
|
|
1365
|
+
},
|
|
1366
|
+
"trust-score-changed": {
|
|
1367
|
+
"name": "Trust score changed",
|
|
1368
|
+
"description": "Tell a destination when an account's trust score changes.",
|
|
1369
|
+
"keywords": "trust score reputation penalty adjusted notify discord email webhook"
|
|
1370
|
+
}
|
|
1371
|
+
},
|
|
1372
|
+
"title": "Automations",
|
|
1373
|
+
"toggleAutomation": "Turn {{name}} on or off",
|
|
1374
|
+
"tryAdjustingFilters": "Try adjusting your filters.",
|
|
1375
|
+
"units": {
|
|
1376
|
+
"km": "km",
|
|
1377
|
+
"kmh": "km/h",
|
|
1378
|
+
"mbps": "Mbps",
|
|
1379
|
+
"days": "days",
|
|
1380
|
+
"minutes": "minutes",
|
|
1381
|
+
"hours": "hours",
|
|
1382
|
+
"gb": "GB",
|
|
1383
|
+
"seconds": "seconds"
|
|
1384
|
+
},
|
|
1385
|
+
"updateAutomation": "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
|
+
},
|
|
1482
|
+
"filters": {
|
|
1483
|
+
"source": "Where it came from",
|
|
1484
|
+
"allSources": "Anywhere",
|
|
1485
|
+
"sources": {
|
|
1486
|
+
"builtin": "Built-in",
|
|
1487
|
+
"import": "Imported",
|
|
1488
|
+
"local": "Saved here",
|
|
1489
|
+
"own": "Built in the builder"
|
|
1490
|
+
},
|
|
1491
|
+
"trigger": "What starts it",
|
|
1492
|
+
"allTriggers": "All triggers"
|
|
1493
|
+
},
|
|
1494
|
+
"openGallery": "Open the gallery"
|
|
1495
|
+
},
|
|
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"
|
|
1504
|
+
},
|
|
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."
|
|
1509
|
+
},
|
|
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"
|
|
1531
|
+
},
|
|
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"
|
|
1575
|
+
},
|
|
1576
|
+
"hints": {
|
|
1577
|
+
"authTokenOptional": "Optional for public topics"
|
|
759
1578
|
},
|
|
760
1579
|
"ownerOnly": "Only the owner can manage notification destinations.",
|
|
761
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",
|
|
762
1583
|
"reencrypt": "Re-enter this destination's secret",
|
|
763
1584
|
"secretSet": "Set (leave blank to keep)",
|
|
764
1585
|
"test": "Test",
|
|
@@ -766,13 +1587,13 @@
|
|
|
766
1587
|
"testNeedsForm": "Fill in the required fields to test",
|
|
767
1588
|
"title": "Notification destinations",
|
|
768
1589
|
"types": {
|
|
769
|
-
"apprise": "Apprise",
|
|
770
1590
|
"discord": "Discord",
|
|
771
|
-
"gotify": "Gotify",
|
|
772
1591
|
"jsonWebhook": "Webhook (JSON)",
|
|
773
1592
|
"ntfy": "ntfy",
|
|
774
|
-
"
|
|
1593
|
+
"gotify": "Gotify",
|
|
1594
|
+
"apprise": "Apprise",
|
|
775
1595
|
"pushover": "Pushover",
|
|
1596
|
+
"push": "Mobile push",
|
|
776
1597
|
"webToast": "Browser toasts"
|
|
777
1598
|
},
|
|
778
1599
|
"usedBy": "Used by {{count}} rule",
|
|
@@ -780,206 +1601,459 @@
|
|
|
780
1601
|
"webToastNote": "Toasts in this browser."
|
|
781
1602
|
},
|
|
782
1603
|
"jobs": {
|
|
783
|
-
"lastRun": "Last run",
|
|
784
|
-
"nextRun": "Next run",
|
|
785
1604
|
"runNow": "Run Now",
|
|
786
1605
|
"running": "Running...",
|
|
1606
|
+
"lastRun": "Last run",
|
|
1607
|
+
"nextRun": "Next run",
|
|
787
1608
|
"schedule": "Schedule"
|
|
788
1609
|
},
|
|
789
1610
|
"mobile": {
|
|
790
|
-
"displayName": "Display Name",
|
|
791
|
-
"displayNamePlaceholder": "e.g., My iPhone",
|
|
792
1611
|
"editDisplayName": "Edit Display Name",
|
|
793
1612
|
"editDisplayNameDesc": "Change how this device appears in your device list",
|
|
1613
|
+
"displayName": "Display Name",
|
|
1614
|
+
"displayNamePlaceholder": "e.g., My iPhone",
|
|
794
1615
|
"updating": "Updating..."
|
|
795
|
-
},
|
|
796
|
-
"plex": {
|
|
797
|
-
"accountsLinked_one": "{{count}} Plex account linked",
|
|
798
|
-
"accountsLinked_other": "{{count}} Plex accounts linked",
|
|
799
|
-
"connectingTo": "Connecting to {{name}}...",
|
|
800
|
-
"connectionError": {
|
|
801
|
-
"dns": "DNS error",
|
|
802
|
-
"http": "HTTP {{status}}",
|
|
803
|
-
"refused": "Connection refused",
|
|
804
|
-
"reset": "Connection reset",
|
|
805
|
-
"timeout": "Timed out",
|
|
806
|
-
"tls": "TLS error",
|
|
807
|
-
"unknown": "Connection failed",
|
|
808
|
-
"unreachable": "Host unreachable"
|
|
809
|
-
},
|
|
810
|
-
"connectionsAvailable": "{{count}} connections available",
|
|
811
|
-
"connectionsReachable": "{{reachable}} of {{total}} connections reachable",
|
|
812
|
-
"custom": "Custom",
|
|
813
|
-
"customUrl": "Custom URL",
|
|
814
|
-
"deleteServersFirst": "Delete connected servers first to unlink this account",
|
|
815
|
-
"hideFiltered": "Hide filtered",
|
|
816
|
-
"linkAnotherAccount": "Link Another Plex Account",
|
|
817
|
-
"linkPlexAccount": "Link Plex Account",
|
|
818
|
-
"linkedAccounts": "Linked Plex Accounts",
|
|
819
|
-
"linkedAccountsDesc": "Manage the Plex accounts you can add servers from.",
|
|
820
|
-
"linking": "Linking...",
|
|
821
|
-
"local": "Local",
|
|
822
|
-
"loginEnabled": "Login Enabled",
|
|
823
|
-
"mayNotConnect": "May not connect",
|
|
824
|
-
"moreConnections": "+{{count}} more connections",
|
|
825
|
-
"noAccountsLinked": "No Plex Accounts Linked",
|
|
826
|
-
"noAccountsLinkedHint": "Link a Plex account to add Plex servers to Tracearr.",
|
|
827
|
-
"noAccountsLinkedShort": "No Plex accounts linked",
|
|
828
|
-
"noAccountsYet": "No Plex accounts linked yet.",
|
|
829
|
-
"noReachableConnections": "No reachable connections",
|
|
830
|
-
"noServersFound": "No Plex servers found",
|
|
831
|
-
"noServersFoundHint": "Make sure you own at least one Plex server",
|
|
832
|
-
"recommended": "Recommended",
|
|
833
|
-
"remote": "Remote",
|
|
834
|
-
"secure": "Secure",
|
|
835
|
-
"serversConnected_one": "{{count}} server connected",
|
|
836
|
-
"serversConnected_other": "{{count}} servers connected",
|
|
837
|
-
"showAll": "Show all",
|
|
838
|
-
"unlinkAccount": "Unlink this Plex account",
|
|
839
|
-
"reauthorizeAccount": "Reauthorize this Plex account",
|
|
840
|
-
"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.",
|
|
841
|
-
"unlinkPlexAccount": "Unlink Plex Account"
|
|
842
1616
|
}
|
|
843
1617
|
},
|
|
844
|
-
"
|
|
845
|
-
"
|
|
846
|
-
"
|
|
847
|
-
"
|
|
848
|
-
"
|
|
849
|
-
"
|
|
850
|
-
"
|
|
851
|
-
"
|
|
852
|
-
"
|
|
853
|
-
|
|
854
|
-
|
|
855
|
-
|
|
856
|
-
|
|
857
|
-
|
|
1618
|
+
"maintenance": {
|
|
1619
|
+
"startingTitle": "Tracearr is starting up...",
|
|
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...",
|
|
1625
|
+
"restoreFailed": "Restore failed",
|
|
1626
|
+
"restorePhase": {
|
|
1627
|
+
"validating": "Validating backup",
|
|
1628
|
+
"creating_restore_point": "Creating restore point",
|
|
1629
|
+
"shutting_down": "Shutting down services",
|
|
1630
|
+
"restoring_database": "Restoring database",
|
|
1631
|
+
"running_migrations": "Running migrations",
|
|
1632
|
+
"rebuilding_aggregates": "Rebuilding aggregates",
|
|
1633
|
+
"restarting": "Restarting services",
|
|
1634
|
+
"complete": "Restore complete"
|
|
1635
|
+
},
|
|
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."
|
|
1642
|
+
},
|
|
1643
|
+
"map": {
|
|
1644
|
+
"allUsers": "All users",
|
|
1645
|
+
"allTypes": "All types",
|
|
1646
|
+
"heatmap": "Heatmap",
|
|
1647
|
+
"circles": "Circles",
|
|
1648
|
+
"streams": "streams",
|
|
1649
|
+
"locations": "locations",
|
|
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"
|
|
858
1695
|
},
|
|
859
1696
|
"statsUsers": {
|
|
860
1697
|
"noActivity": "No activity yet",
|
|
861
1698
|
"noActivityDesc": "Start streaming to see your top users here",
|
|
862
|
-
"
|
|
863
|
-
"
|
|
1699
|
+
"top3": "Top 3",
|
|
1700
|
+
"runnersUp": "Runners Up"
|
|
864
1701
|
},
|
|
865
|
-
"
|
|
866
|
-
"
|
|
867
|
-
"
|
|
868
|
-
"messageLabel": "Message to user (optional)",
|
|
869
|
-
"messagePlaceholder": "e.g., Please don't share your account",
|
|
870
|
-
"stopMedia": "Stop \"{{mediaTitle}}\" for @{{username}}?",
|
|
871
|
-
"terminating": "Terminating...",
|
|
872
|
-
"title": "Terminate Stream"
|
|
1702
|
+
"plexCallback": {
|
|
1703
|
+
"authComplete": "Authentication complete",
|
|
1704
|
+
"windowWillClose": "This window will close automatically..."
|
|
873
1705
|
},
|
|
874
|
-
"
|
|
875
|
-
"
|
|
876
|
-
"
|
|
877
|
-
"
|
|
878
|
-
"
|
|
879
|
-
"
|
|
880
|
-
"
|
|
881
|
-
"
|
|
882
|
-
"manual": "Manual",
|
|
883
|
-
"noSessionsFound": "No sessions found for this user.",
|
|
884
|
-
"noTerminationsFound": "No stream terminations for this user.",
|
|
885
|
-
"noViolationsFound": "No violations for this user.",
|
|
886
|
-
"overallTrust": "Overall Trust",
|
|
887
|
-
"serverScope": "Server",
|
|
888
|
-
"sessions": "Sessions",
|
|
889
|
-
"splitAccount": "Split into separate user",
|
|
890
|
-
"splitConfirmDescription": "Detach this server account into its own user. Its watch history and violations move with it.",
|
|
891
|
-
"splitConfirmLoading": "Splitting...",
|
|
892
|
-
"splitConfirmTitle": "Split server account",
|
|
893
|
-
"statistics": "Statistics",
|
|
894
|
-
"terminationHistory": "Termination History",
|
|
895
|
-
"unknownRule": "Unknown rule",
|
|
896
|
-
"userInfo": "User Info",
|
|
897
|
-
"userNotFound": "User not found",
|
|
898
|
-
"violations": "Violations"
|
|
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."
|
|
899
1714
|
},
|
|
900
|
-
"
|
|
901
|
-
"
|
|
902
|
-
"
|
|
903
|
-
"
|
|
904
|
-
"
|
|
905
|
-
"
|
|
906
|
-
"
|
|
907
|
-
"
|
|
908
|
-
"
|
|
909
|
-
"
|
|
910
|
-
"
|
|
911
|
-
"
|
|
912
|
-
"
|
|
913
|
-
"
|
|
914
|
-
"
|
|
915
|
-
"
|
|
916
|
-
"
|
|
917
|
-
"
|
|
918
|
-
"
|
|
919
|
-
"
|
|
920
|
-
"
|
|
921
|
-
"
|
|
922
|
-
"
|
|
923
|
-
"
|
|
924
|
-
"
|
|
925
|
-
"
|
|
926
|
-
"
|
|
927
|
-
"
|
|
928
|
-
"
|
|
929
|
-
"
|
|
930
|
-
"
|
|
931
|
-
"
|
|
932
|
-
"
|
|
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"
|
|
933
1762
|
},
|
|
934
|
-
"
|
|
935
|
-
"
|
|
936
|
-
|
|
937
|
-
|
|
938
|
-
|
|
1763
|
+
"media": {
|
|
1764
|
+
"landing": {
|
|
1765
|
+
"title": "Media",
|
|
1766
|
+
"lens": {
|
|
1767
|
+
"label": "Viewing as",
|
|
1768
|
+
"allUsers": "All users"
|
|
1769
|
+
},
|
|
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",
|
|
1798
|
+
"columns": {
|
|
1799
|
+
"poster": "Poster",
|
|
1800
|
+
"title": "Title",
|
|
1801
|
+
"size": "Size",
|
|
1802
|
+
"added": "Added",
|
|
1803
|
+
"servers": "Servers"
|
|
1804
|
+
},
|
|
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
|
+
},
|
|
939
1843
|
"detail": {
|
|
940
|
-
"
|
|
941
|
-
"
|
|
942
|
-
|
|
943
|
-
|
|
944
|
-
"
|
|
945
|
-
|
|
946
|
-
|
|
947
|
-
|
|
948
|
-
|
|
949
|
-
"
|
|
950
|
-
|
|
951
|
-
|
|
952
|
-
|
|
953
|
-
|
|
954
|
-
|
|
955
|
-
|
|
956
|
-
|
|
957
|
-
|
|
958
|
-
|
|
959
|
-
|
|
960
|
-
|
|
961
|
-
|
|
962
|
-
|
|
963
|
-
|
|
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"
|
|
1852
|
+
},
|
|
1853
|
+
"hero": {
|
|
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"
|
|
1860
|
+
},
|
|
1861
|
+
"availability": {
|
|
1862
|
+
"added": "added {{date}}",
|
|
1863
|
+
"addedRemoved": "added {{added}} – removed {{removed}}",
|
|
1864
|
+
"replaced": "replaced {{date}}"
|
|
1865
|
+
},
|
|
1866
|
+
"removedEverywhere": {
|
|
1867
|
+
"caption": "No longer available on any connected server"
|
|
1868
|
+
},
|
|
1869
|
+
"actions": {
|
|
1870
|
+
"fullHistory": "Full history",
|
|
1871
|
+
"openOnServer": "Open on server"
|
|
1872
|
+
}
|
|
1873
|
+
},
|
|
1874
|
+
"kpis": {
|
|
1875
|
+
"ariaLabel": "Watch statistics",
|
|
1876
|
+
"loadError": "Couldn't load watch statistics",
|
|
1877
|
+
"completionLoadError": "Couldn't load completion",
|
|
1878
|
+
"plays": {
|
|
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"
|
|
1885
|
+
},
|
|
1886
|
+
"viewers": {
|
|
1887
|
+
"label": "Viewers",
|
|
1888
|
+
"detail": "across all servers"
|
|
1889
|
+
},
|
|
1890
|
+
"completion": {
|
|
1891
|
+
"label": "Avg completion",
|
|
1892
|
+
"detail": "{{finished}} of {{total}} finished every episode",
|
|
1893
|
+
"detailMovie": "{{finished}} of {{total}} watched to completion"
|
|
1894
|
+
}
|
|
1895
|
+
},
|
|
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",
|
|
1902
|
+
"columns": {
|
|
1903
|
+
"user": "User",
|
|
1904
|
+
"plays": "Plays",
|
|
1905
|
+
"episodes": "Episodes",
|
|
1906
|
+
"completion": "Completion",
|
|
1907
|
+
"lastWatched": "Last watched"
|
|
1908
|
+
}
|
|
1909
|
+
},
|
|
1910
|
+
"seasons": {
|
|
1911
|
+
"title": "Seasons",
|
|
1912
|
+
"loadError": "Couldn't load season data",
|
|
1913
|
+
"empty": "No season data yet",
|
|
1914
|
+
"episodeCount_one": "{{count}} episode",
|
|
1915
|
+
"episodeCount_other": "{{count}} episodes",
|
|
1916
|
+
"watchedPct": "{{percent}}% watched",
|
|
1917
|
+
"stripSummary": "{{season}}: {{percent}}% watched",
|
|
1918
|
+
"episodeLabel": {
|
|
1919
|
+
"watched": "{{code}}: watched",
|
|
1920
|
+
"partial": "{{code}}: partially watched",
|
|
1921
|
+
"unwatched": "{{code}}: unwatched"
|
|
1922
|
+
}
|
|
1923
|
+
},
|
|
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",
|
|
1931
|
+
"plays": "Plays",
|
|
1932
|
+
"watchTime": "Watch time"
|
|
1933
|
+
}
|
|
1934
|
+
},
|
|
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
|
+
}
|
|
1948
|
+
},
|
|
1949
|
+
"copies": {
|
|
1950
|
+
"title": "Copies",
|
|
1951
|
+
"loadError": "Couldn't load copies",
|
|
1952
|
+
"unknownLibrary": "Unknown library",
|
|
1953
|
+
"columns": {
|
|
1954
|
+
"server": "Server",
|
|
1955
|
+
"library": "Library",
|
|
1956
|
+
"quality": "Quality",
|
|
1957
|
+
"episodes": "Episodes",
|
|
1958
|
+
"size": "Size",
|
|
1959
|
+
"added": "Added"
|
|
1960
|
+
},
|
|
1961
|
+
"versionLabel": "File {{index}}"
|
|
1962
|
+
}
|
|
964
1963
|
},
|
|
965
|
-
"
|
|
966
|
-
|
|
967
|
-
|
|
968
|
-
|
|
969
|
-
|
|
970
|
-
|
|
971
|
-
|
|
972
|
-
|
|
973
|
-
|
|
974
|
-
|
|
975
|
-
|
|
976
|
-
|
|
977
|
-
|
|
978
|
-
|
|
979
|
-
|
|
980
|
-
|
|
981
|
-
|
|
982
|
-
|
|
983
|
-
|
|
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"
|
|
1977
|
+
},
|
|
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"
|
|
1991
|
+
},
|
|
1992
|
+
"grid": {
|
|
1993
|
+
"toolbar": {
|
|
1994
|
+
"ariaLabel": "Filters and sort",
|
|
1995
|
+
"typeLabel": "Media type",
|
|
1996
|
+
"moviesToggle": "Movies",
|
|
1997
|
+
"showsToggle": "Shows",
|
|
1998
|
+
"searchPlaceholder": "Search titles…",
|
|
1999
|
+
"searchLabel": "Search titles",
|
|
2000
|
+
"removeFilter": "Remove {{label}} filter",
|
|
2001
|
+
"filtersLabel": "Filters",
|
|
2002
|
+
"filtersSheetTitle": "Filters",
|
|
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",
|
|
2014
|
+
"hdrLabel": "Dynamic range",
|
|
2015
|
+
"hdrAll": "Any",
|
|
2016
|
+
"hdrOnly": "HDR only",
|
|
2017
|
+
"hdrChip": "HDR",
|
|
2018
|
+
"genreLabel": "Genre",
|
|
2019
|
+
"genreAll": "Any genre",
|
|
2020
|
+
"serverLabel": "Server",
|
|
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)",
|
|
2028
|
+
"sizeChipAtLeast": "≥ {{min}} GB",
|
|
2029
|
+
"sizeChipAtMost": "≤ {{max}} GB",
|
|
2030
|
+
"sizeChipRange": "{{min}}–{{max}} GB",
|
|
2031
|
+
"sortLabel": "Sort",
|
|
2032
|
+
"sort": {
|
|
2033
|
+
"title": "Title A–Z",
|
|
2034
|
+
"added": "Recently added",
|
|
2035
|
+
"year": "Year",
|
|
2036
|
+
"plays": "Plays",
|
|
2037
|
+
"watch_time": "Watch time",
|
|
2038
|
+
"viewers": "Viewers"
|
|
2039
|
+
},
|
|
2040
|
+
"count": "{{loaded}} of {{total}} titles · {{size}}",
|
|
2041
|
+
"countTotal_one": "{{count}} title · {{size}}",
|
|
2042
|
+
"countTotal_other": "{{count}} titles · {{size}}"
|
|
2043
|
+
},
|
|
2044
|
+
"scrubber": {
|
|
2045
|
+
"label": "Jump to letter",
|
|
2046
|
+
"current": "Letter {{letter}}"
|
|
2047
|
+
},
|
|
2048
|
+
"loaderError": "Couldn't load more titles",
|
|
2049
|
+
"retry": "Retry",
|
|
2050
|
+
"clearJumpAction": "Clear",
|
|
2051
|
+
"showingFrom": "Showing from {{letter}}",
|
|
2052
|
+
"showAll": "Show all",
|
|
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"
|
|
2057
|
+
}
|
|
984
2058
|
}
|
|
985
2059
|
}
|