Implement BumperEndpoints and remove deprecated bumper-related functionality
Added new BumperEndpoints to the API for managing bumper templates and variants, enhancing the channel management capabilities. Removed outdated bumper-related commands and handlers from the application, streamlining the codebase and improving maintainability. Updated ChannelEndpoints to reflect these changes and ensure proper routing for the new endpoints.
This commit is contained in:
@@ -457,8 +457,6 @@ export const ru = {
|
||||
everyDay: 'каждый день',
|
||||
daypart: 'Дейпарт',
|
||||
slotKind: 'Тип слота',
|
||||
group: 'Группа',
|
||||
pickGroup: 'выберите группу',
|
||||
strategy: 'Стратегия',
|
||||
cooldownDays: 'Остывание, дней',
|
||||
cooldownHint: 'Не брать то, что уже выходило за этот срок.',
|
||||
@@ -475,8 +473,6 @@ export const ru = {
|
||||
maxDrift: 'Допуск, мин',
|
||||
snap: 'Округление',
|
||||
snapOff: 'нет',
|
||||
bumperConditionsHint:
|
||||
'Как часто ставить заставку и на каких переходах — условия элемента стыка, а не настройка канала.',
|
||||
resizeSlot: 'Потянуть за край — длительность',
|
||||
copyDay: 'Копировать день',
|
||||
copyDayFrom: 'Копировать {{day}} в:',
|
||||
@@ -497,7 +493,6 @@ export const ru = {
|
||||
grid: 'Сетка',
|
||||
rules: 'Правила',
|
||||
junctions: 'Стыки',
|
||||
bumpers: 'Заставки',
|
||||
viewer: 'Зритель',
|
||||
settings: 'Настройки',
|
||||
air: 'Эфир',
|
||||
@@ -603,35 +598,12 @@ export const ru = {
|
||||
'Что играет между программами: реклама, анонсы, заставки. Слот может взять свой стык, иначе берётся стык по умолчанию.',
|
||||
defaultJunction: 'Стык по умолчанию',
|
||||
noJunction: 'без стыка',
|
||||
newJunctionName: 'Новый стык',
|
||||
addJunctionElement: '+ врезка',
|
||||
junctionEmpty: 'пусто',
|
||||
junctionFrom: 'конец',
|
||||
junctionTo: 'начало',
|
||||
junctionElement: 'Врезка',
|
||||
junctionKind: 'Тип',
|
||||
junctionKinds: {
|
||||
Ad: 'Реклама',
|
||||
Promo: 'Анонс',
|
||||
Bumper: 'Заставка',
|
||||
Filler: 'Заполнитель',
|
||||
},
|
||||
junctionAmountMode: 'Чем меряется',
|
||||
junctionAmountModes: { Count: 'Единиц', Duration: 'Минут' },
|
||||
junctionCount: 'Сколько единиц',
|
||||
junctionMinutes: 'Сколько минут',
|
||||
junctionAmountHint:
|
||||
'В смешанной группе (ролики и готовые блоки) считайте минутами: одна «единица» там — то ли ролик, то ли блок.',
|
||||
junctionRequired: 'Обязательная — не выбрасывать при нехватке времени',
|
||||
junctionOnlyOnChange: 'Только при смене шоу',
|
||||
junctionMinInterval: 'Не чаще, чем раз в, мин',
|
||||
junctionMinIntervalHint: '0 — без ограничения.',
|
||||
junctionBetween: 'Стык внутри слота',
|
||||
junctionAfter: 'Стык после слота',
|
||||
junctionDefault: 'по умолчанию',
|
||||
bumperTemplate: 'Блок заставки',
|
||||
pickBumperTemplate: 'выберите блок',
|
||||
minutesShort: ' мин',
|
||||
junctionsUsed: 'Используются в этом канале',
|
||||
junctionsNoneUsed: 'Канал не ссылается ни на один стык — между программами ничего не играет.',
|
||||
openJunctionEditor: 'Редактор стыков',
|
||||
pendingChanges: 'Правила изменены — эфир идёт по старым.',
|
||||
restore: 'Сбросить изменения',
|
||||
restoreConfirm:
|
||||
@@ -682,64 +654,150 @@ export const ru = {
|
||||
enabled: 'В эфире',
|
||||
enabledLabel: 'Канал в эфире',
|
||||
settings: 'Настройки',
|
||||
bumpers: 'ТВ-заставки',
|
||||
bumpersLabel: 'Заставки на переходах',
|
||||
bumpersHint: 'Короткая заставка «Сейчас / Далее» между разными шоу',
|
||||
bumperSelection: 'Выбор блока',
|
||||
bumperSelectionRandom: 'Случайно',
|
||||
bumperSelectionWeighted: 'Случайно взвешенный',
|
||||
bumperSelectionAlwaysFirst: 'Всегда первый',
|
||||
bumperFont: 'Шрифт',
|
||||
bumperFontSans: 'Гротеск',
|
||||
bumperFontSerif: 'Антиква',
|
||||
bumperNowLabel: 'Подпись «Сейчас»',
|
||||
bumperNextLabel: 'Подпись «Далее»',
|
||||
bumperBg: 'Фон (цвет 1)',
|
||||
bumperBg2: 'Фон (цвет 2)',
|
||||
bumperAccent: 'Акцент',
|
||||
bumperText: 'Текст',
|
||||
bumperTemplates: 'Блоки заставок',
|
||||
bumperTemplatesHint:
|
||||
'Каждый блок — свой звук и оформление. Первый блок дефолтный, его нельзя удалить. Длительность заставки — по длине звука.',
|
||||
bumperAddTemplate: 'Добавить блок',
|
||||
bumperTemplateName: 'Название',
|
||||
bumperVariants: 'Подблоки (текст)',
|
||||
bumperVariantsHint:
|
||||
'Разный текст на одной музыке и оформлении блока. Правило показа — у каждого подблока своё.',
|
||||
bumperAddVariant: 'Добавить текст',
|
||||
bumperVariantName: 'Название',
|
||||
bumperTextKind: 'Режим текста',
|
||||
bumperKindNowNext: 'Сейчас / Далее',
|
||||
bumperKindFree: 'Свободный текст',
|
||||
bumperLine1: 'Строка 1',
|
||||
bumperLine2: 'Строка 2',
|
||||
bumperTrigger: 'Показывать',
|
||||
bumperTriggerOnShowChange: 'При смене шоу',
|
||||
bumperTriggerBetweenEpisodes: 'Между сериями',
|
||||
bumperTriggerBoth: 'Оба',
|
||||
bumperVariantWeight: 'Вес',
|
||||
bumperVariantWeightHint:
|
||||
'Для стратегии «случайно взвешенный»: чем больше — тем чаще (0 — не выбирается)',
|
||||
bumperDefault: 'по умолчанию',
|
||||
bumperSeconds: 'с',
|
||||
bumperDefaultDuration: '≈8 с (джингл)',
|
||||
bumperAudio: 'Звук',
|
||||
bumperAudioHint: 'Звук заставки; иначе — синтезированный джингл',
|
||||
bumperPreview: 'Отрендерить примеры',
|
||||
bumperPreviewRendering: 'Рендерим…',
|
||||
bumperPreviewHint:
|
||||
'Примеры всех подблоков со звуком и анимацией (примерные названия шоу). Использует сохранённые настройки.',
|
||||
bumperBackground: 'Фон-картинка',
|
||||
bumperBackgroundHint: 'Картинка фона; иначе — постер шоу или градиент',
|
||||
bumperBackgroundPick: 'Выбрать из галереи',
|
||||
bumperFileLoaded: 'загружено',
|
||||
bumperFileDefault: 'по умолчанию',
|
||||
bumperUpload: 'Загрузить',
|
||||
bumperReset: 'Сбросить',
|
||||
filler: 'Заглушка',
|
||||
noFiller: 'Без заглушки',
|
||||
noSchedule: 'Расписание ещё не построено',
|
||||
},
|
||||
junctions: {
|
||||
title: 'Стыки',
|
||||
hint: 'Что играет между программами: реклама, анонсы, заставки. Стык общий для всех каналов — канал только выбирает, какой поставить в слот.',
|
||||
newName: 'Новый стык',
|
||||
empty0: 'Стыков пока нет.',
|
||||
empty: 'пусто',
|
||||
from: 'конец',
|
||||
to: 'начало',
|
||||
fork: 'развилка',
|
||||
addElement: '+ врезка',
|
||||
maxTotal: 'Потолок, с',
|
||||
usedInChannels: 'в каналах: {{count}}',
|
||||
cannotDeleteUsed: 'Стык используется каналами — сначала снимите ссылки.',
|
||||
splitOut: 'Вынести из развилки',
|
||||
mergeIntoFork: 'Объединить с предыдущей в развилку',
|
||||
element: 'Врезка',
|
||||
kind: 'Тип',
|
||||
kinds: {
|
||||
Ad: 'Реклама',
|
||||
Promo: 'Анонс',
|
||||
Bumper: 'Заставка',
|
||||
Filler: 'Заполнитель',
|
||||
},
|
||||
group: 'Группа',
|
||||
pickGroup: 'выберите группу',
|
||||
bumperTemplate: 'Блок заставки',
|
||||
pickBumper: 'выберите блок',
|
||||
bumperVariant: 'Подблок',
|
||||
bumperVariantAuto: 'по триггеру и весам',
|
||||
bumperVariantHint:
|
||||
'Оставьте «по триггеру и весам», чтобы на смене шоу и между сериями играли разные тексты.',
|
||||
amountMode: 'Чем меряется',
|
||||
amountModes: { Count: 'Единиц', Duration: 'Минут' },
|
||||
count: 'Сколько единиц',
|
||||
minutes: 'Сколько минут',
|
||||
minutesShort: ' мин',
|
||||
amountHint:
|
||||
'В смешанной группе (ролики и готовые блоки) считайте минутами: одна «единица» там — то ли ролик, то ли блок.',
|
||||
required: 'Обязательная',
|
||||
requiredHint:
|
||||
'Обязательность решает, кого выбросить при нехватке времени. На порядок показа она не влияет — он задаётся местом в цепочке.',
|
||||
choiceWeight: 'Вес в развилке',
|
||||
choiceWeightHint: 'Чем больше — тем чаще играет именно эта врезка (0 — не выбирается).',
|
||||
conditions: 'Условия показа',
|
||||
onlyOnChange: 'Только при смене шоу',
|
||||
chance: 'Вероятность, %',
|
||||
chanceHint:
|
||||
'Вероятность и интервал считаются по этой врезке отдельно; жребий берётся из seed генерации, поэтому пересборка не тасует врезки.',
|
||||
minInterval: 'Не чаще, чем раз в, мин',
|
||||
dayparts: 'Дейпарты',
|
||||
daypartsHint: 'Ничего не выбрано — врезка идёт в любых дейпартах.',
|
||||
timeWindow: 'Окно суток канала',
|
||||
clearWindow: 'Сбросить',
|
||||
timeWindowHint: 'Пусто — в любое время. Окно может переходить через полночь.',
|
||||
badgeOnChange: 'на смене',
|
||||
badgeInterval: 'раз в {{minutes}} мин',
|
||||
},
|
||||
bumpers: {
|
||||
title: 'Заставки',
|
||||
hint: 'Блоки заставок общие для всех каналов: оформление и звук — у блока, текст — у подблоков. В эфир заставка попадает врезкой стыка.',
|
||||
empty: 'Блоков заставок пока нет.',
|
||||
newName: 'Новый блок',
|
||||
newNamePlaceholder: 'Название блока',
|
||||
newVariantName: 'Новый текст',
|
||||
sampleChannel: 'Смотреть глазами канала',
|
||||
sampleChannelNone: 'без канала',
|
||||
sampleChannelHint: 'Блок общий, но образцы подстановки берутся у выбранного канала.',
|
||||
name: 'Название',
|
||||
font: 'Шрифт',
|
||||
fontSans: 'Гротеск',
|
||||
fontSerif: 'Антиква',
|
||||
colorBg: 'Фон (цвет 1)',
|
||||
colorBg2: 'Фон (цвет 2)',
|
||||
colorAccent: 'Акцент',
|
||||
colorText: 'Текст',
|
||||
saveStyle: 'Сохранить оформление',
|
||||
seconds: 'с',
|
||||
defaultDuration: '≈8 с (джингл)',
|
||||
variantsCount: 'текстов: {{count}}',
|
||||
usedInJunctions: 'во врезках: {{count}}',
|
||||
cannotDeleteUsed: 'Блок используется во врезках стыков — сначала снимите ссылки.',
|
||||
audio: 'Звук',
|
||||
audioHint: 'Длина звука задаёт длительность заставки; без него — синтезированный джингл.',
|
||||
background: 'Фон',
|
||||
backgroundFieldHint: 'Картинка фона блока; иначе — градиент палитры или постер шоу.',
|
||||
backgroundPick: 'Выбрать из галереи',
|
||||
backgrounds: {
|
||||
Template: 'Фон блока',
|
||||
NextPoster: 'Постер следующего шоу',
|
||||
NowPoster: 'Постер предыдущего шоу',
|
||||
},
|
||||
fileLoaded: 'загружено',
|
||||
fileDefault: 'по умолчанию',
|
||||
upload: 'Загрузить',
|
||||
reset: 'Сбросить',
|
||||
variants: 'Подблоки (тексты)',
|
||||
variantsHint:
|
||||
'Разный текст на одной музыке и оформлении. Правило показа и фон — у каждого подблока свои.',
|
||||
addVariant: 'Добавить текст',
|
||||
variantName: 'Название',
|
||||
trigger: 'Показывать',
|
||||
triggers: {
|
||||
OnShowChange: 'При смене шоу',
|
||||
BetweenEpisodes: 'Между сериями',
|
||||
Both: 'Оба',
|
||||
},
|
||||
weight: 'Вес',
|
||||
lineStyles: { Label: 'Подпись', Title: 'Название', Caption: 'Мелкая' },
|
||||
lineColors: { Accent: 'Акцент', Text: 'Текст' },
|
||||
addLine: 'Строка',
|
||||
presets: 'Пресеты',
|
||||
preset_nowNext: 'Сейчас / Далее',
|
||||
preset_nextAt: 'Далее в …',
|
||||
preset_channel: 'Логотип канала',
|
||||
presetNow: 'СЕЙЧАС',
|
||||
presetNext: 'ДАЛЕЕ',
|
||||
presetNextAt: 'ДАЛЕЕ В',
|
||||
framePreview: 'Кадр',
|
||||
framePreviewHint: 'Подстановка образцами: так строка будет выглядеть в эфире.',
|
||||
unknownPlaceholder: 'Неизвестный плейсхолдер: {{tokens}}',
|
||||
volatileHint: 'каждый показ уникален — кэш рендера не работает',
|
||||
render: 'Отрендерить примеры',
|
||||
rendering: 'Рендерим…',
|
||||
renderHint: 'Настоящий ffmpeg-рендер всех подблоков со звуком — несколько секунд.',
|
||||
tokens: {
|
||||
channel: 'Название канала',
|
||||
'channel.number': 'Номер канала',
|
||||
'now.title': 'Текущее шоу',
|
||||
'next.title': 'Следующее шоу',
|
||||
'now.episode': 'Серия текущего',
|
||||
'next.episode': 'Серия следующего',
|
||||
'next.year': 'Год следующего',
|
||||
'next.genre': 'Жанр следующего',
|
||||
'next.time': 'Время старта следующего',
|
||||
time: 'Время показа заставки',
|
||||
date: 'Дата',
|
||||
weekday: 'День недели',
|
||||
slot: 'Название слота',
|
||||
},
|
||||
},
|
||||
maintenance: {
|
||||
title: 'Обслуживание',
|
||||
warning: 'Операции необратимы — удаляют данные и файлы навсегда.',
|
||||
|
||||
Reference in New Issue
Block a user