diff --git a/web/public/locales/ru/audio.json b/web/public/locales/ru/audio.json index 7018b1115..953c0f688 100644 --- a/web/public/locales/ru/audio.json +++ b/web/public/locales/ru/audio.json @@ -26,7 +26,7 @@ "gasp": "Вздох", "pant": "Пыхтение", "snort": "Фырканье", - "sniff": "Принюхивание", + "sniff": "Нюхание", "burping": "Отрыжка", "cough": "Кашель", "run": "Бег", @@ -38,6 +38,392 @@ "gargling": "Полоскание горла", "stomach_rumble": "Урчание живота", "hiccup": "Икание", - "fart": "Газы", - "footsteps": "Шаги" + "fart": "Пукание", + "footsteps": "Шаги", + "chant": "Песнопение", + "hands": "Руки", + "finger_snapping": "Щелкать пальцами", + "clapping": "Хлопать", + "moo": "Мычание", + "cowbell": "Коровий колокольчик", + "heart_murmur": "Шум в сердце", + "cheering": "Ликование", + "applause": "Аплодисменты", + "chatter": "Болтовня", + "crowd": "Толпа", + "children_playing": "Игра детей", + "animal": "Зверь", + "pets": "Домашние животные", + "dog": "Собака", + "bark": "Лай", + "yip": "Тявкать", + "howl": "Вой", + "whimper_dog": "Собачий скулеж", + "cat": "Кошка", + "purr": "Мурлыканье", + "meow": "Мяуканье", + "hiss": "Шипение", + "growling": "Рычать", + "bow_wow": "Гавканье", + "heartbeat": "Сердце биение", + "caterwaul": "Кошачий вой", + "horse": "Лошадь", + "clip_clop": "Цоканье", + "neigh": "Ржание", + "livestock": "Скот", + "cattle": "Крупный рогатый скот", + "pig": "Свинья", + "oink": "Хрюканье", + "bleat": "Блеяние", + "sheep": "Овца", + "fowl": "Домашняя птица", + "goat": "Коза", + "chicken": "Курица", + "cluck": "Кудахтанье", + "cock_a_doodle_doo": "Кукареканье", + "turkey": "Индейка", + "gobble": "Бормотание индейки", + "duck": "Утка", + "quack": "Кряканье", + "goose": "Гусь", + "honk": "Гоготание", + "wild_animals": "Дикие животные", + "roaring_cats": "Рычащие кошки", + "roar": "Рычание", + "chirp": "Чириканье", + "squawk": "Птичий крик", + "pigeon": "Голубь", + "coo": "Воркование", + "crow": "Ворона", + "caw": "Карканье", + "owl": "Сова", + "hoot": "Уханье", + "flapping_wings": "Хлопание крыльев", + "dogs": "Собаки", + "rats": "Крысы", + "mouse": "Мышь", + "insect": "Насекомое", + "cricket": "Сверчок", + "mosquito": "Комар", + "fly": "Муха", + "buzz": "Жужжание", + "frog": "Лягушка", + "croak": "Кваканье", + "snake": "Змея", + "rattle": "Треск", + "music": "Музыка", + "musical_instrument": "Музыкальный инструмент", + "whale_vocalization": "Пение кита", + "plucked_string_instrument": "Щипковый струнный инструмент", + "guitar": "Гитара", + "patter": "Шорох", + "bass_guitar": "Бас-гитара", + "steel_guitar": "Стальная гитара", + "tapping": "Постукивание", + "car": "Автомобиль", + "motorcycle": "Мотоцикл", + "bicycle": "Велосипед", + "bird": "Птица", + "electric_guitar": "Электрогитара", + "acoustic_guitar": "Акустическая гитара", + "scream": "Крик", + "strum": "Звук струн", + "banjo": "Банджо", + "zither": "Цитра", + "ukulele": "Укулеле", + "keyboard": "Клавишный инструмент", + "electric_piano": "Электропианино", + "organ": "Орган", + "electronic_organ": "Электроорган", + "synthesizer": "Синтезатор", + "hammond_organ": "Орган Хаммонда", + "sampler": "Сэмплер", + "harpsichord": "Клавесин", + "percussion": "Ударные инструменты", + "drum_kit": "Ударная установка", + "drum_machine": "Драммашина", + "drum": "Барабан", + "snare_drum": "Малый барабан", + "rimshot": "Обод барабана", + "drum_roll": "Барабанная дробь", + "bass_drum": "Бас-барабан", + "timpani": "Литавры", + "tabla": "Табла", + "cymbal": "Тарелка", + "hi_hat": "Хай-хэт", + "wood_block": "Вуд-блок", + "tambourine": "Бубен", + "maraca": "Маракас", + "gong": "Гонг", + "tubular_bells": "Трубчатые колокола", + "mallet_percussion": "Маллет-перкуссия", + "marimba": "Маримба", + "glockenspiel": "Колокольчики", + "vibraphone": "Вибрафон", + "steelpan": "Стальной барабан", + "orchestra": "Оркестр", + "brass_instrument": "Медный духовой инструмент", + "french_horn": "Валторна", + "trumpet": "Труба", + "trombone": "Тромбон", + "bowed_string_instrument": "Смычковый струнный инструмент", + "string_section": "Струнная секция", + "mandolin": "Мандолина", + "piano": "Пианино", + "sitar": "Ситар", + "violin": "Скрипка", + "pizzicato": "Пиццикато", + "cello": "Виолончель", + "double_bass": "Контрабас", + "wind_instrument": "Духовой инструмент", + "flute": "Флейта", + "saxophone": "Саксофон", + "clarinet": "Кларнет", + "harp": "Арфа", + "bell": "Колокол", + "church_bell": "Церковный колокол", + "jingle_bell": "Бубенчик", + "bicycle_bell": "Велосипедный звонок", + "tuning_fork": "Камертон", + "chime": "Колокольчик", + "wind_chime": "Музыка ветра", + "harmonica": "Губная гармошка", + "accordion": "Аккордеон", + "bagpipes": "Волынка", + "didgeridoo": "Диджериду", + "theremin": "Терменвокс", + "singing_bowl": "Поющая чаша", + "scratching": "Скрэтчинг", + "pop_music": "Поп-музыка", + "hip_hop_music": "Хип-хоп", + "beatboxing": "Битбоксинг", + "rock_music": "Рок-музыка", + "heavy_metal": "Хеви-метал", + "punk_rock": "Панк-рок", + "grunge": "Гранж", + "progressive_rock": "Прогрессив-рок", + "rock_and_roll": "Рок-н-ролл", + "psychedelic_rock": "Психоделический рок", + "rhythm_and_blues": "Ритм-н-блюз", + "soul_music": "Соул", + "bluegrass": "Блюграсс", + "funk": "Фанк", + "middle_eastern_music": "Ближневосточная музыка", + "jazz": "Джаз", + "disco": "Диско", + "classical_music": "Классическая музыка", + "opera": "Опера", + "house_music": "Хаус", + "techno": "Техно", + "dubstep": "Дабстеп", + "drum_and_bass": "Драм-н-бейс", + "electronica": "Электроника", + "electronic_dance_music": "Электронная танцевальная музыка", + "ambient_music": "Эмбиент", + "music_of_latin_america": "Латиноамериканская музыка", + "salsa_music": "Сальса", + "flamenco": "Фламенко", + "blues": "Блюз", + "music_for_children": "Детская музыка", + "new-age_music": "Нью-эйдж", + "a_capella": "А капелла", + "music_of_africa": "Африканская музыка", + "afrobeat": "Афробит", + "christian_music": "Христианская музыка", + "gospel_music": "Госпел", + "music_of_asia": "Азиатская музыка", + "carnatic_music": "Карнатическая музыка", + "music_of_bollywood": "Музыка Болливуда", + "ska": "Ска", + "traditional_music": "Традиционная музыка", + "independent_music": "Инди", + "song": "Песня", + "background_music": "Фоновая музыка", + "theme_music": "Тематическая музыка", + "jingle": "Джингл", + "soundtrack_music": "Саундтрек", + "lullaby": "Колыбельная", + "video_game_music": "Музыка из видеоигр", + "christmas_music": "Рождественская музыка", + "dance_music": "Танцевальная музыка", + "wedding_music": "Свадебная музыка", + "happy_music": "Весёлая музыка", + "sad_music": "Грустная музыка", + "tender_music": "Нежная музыка", + "exciting_music": "Энергичная музыка", + "angry_music": "Гневная музыка", + "scary_music": "Страшная музыка", + "wind": "Ветер", + "rustling_leaves": "Шуршание листьев", + "wind_noise": "Шум ветра", + "thunderstorm": "Гроза", + "thunder": "Гром", + "water": "Вода", + "rain": "Дождь", + "raindrop": "Капли дождя", + "rain_on_surface": "Дождь на поверхности", + "stream": "Поток", + "waterfall": "Водопад", + "gurgling": "Журчание", + "fire": "Огонь", + "crackle": "Потрескивание", + "vehicle": "Транспорт", + "boat": "Лодка", + "sailboat": "Парусник", + "rowboat": "Вёсельная лодка", + "motorboat": "Моторная лодка", + "ship": "Корабль", + "motor_vehicle": "Моторный транспорт", + "power_windows": "Электростеклоподъемники", + "skidding": "Занос", + "tire_squeal": "Визг шин", + "car_passing_by": "Проезжающая машина", + "race_car": "Гоночный автомобиль", + "truck": "Грузовик", + "air_brake": "Пневматический тормоз", + "air_horn": "Пневматический гудок", + "reversing_beeps": "Сигнал заднего хода", + "ice_cream_truck": "Грузовик с мороженым", + "bus": "Автобус", + "emergency_vehicle": "Транспорт экстренных служб", + "police_car": "Полицейский автомобиль", + "fire_engine": "Пожарная машина", + "rail_transport": "Рельсовый транспорт", + "train": "Поезд", + "train_whistle": "Свисток поезда", + "train_horn": "Гудок поезда", + "railroad_car": "Железнодорожный вагон", + "train_wheels_squealing": "Визг колес поезда", + "subway": "Метро", + "aircraft": "Воздушное судно", + "aircraft_engine": "Двигатель воздушного судна", + "jet_engine": "Реактивный двигатель", + "propeller": "Пропеллер", + "fixed-wing_aircraft": "Самолет с неподвижным крылом", + "skateboard": "Скейтборд", + "engine": "Двигатель", + "light_engine": "Легкий двигатель", + "dental_drill's_drill": "Стоматологическая бормашина", + "medium_engine": "Средний двигатель", + "heavy_engine": "Тяжёлый двигатель", + "engine_knocking": "Детонация двигателя", + "engine_starting": "Запуск двигателя", + "idling": "Холостой ход", + "accelerating": "Ускорение", + "ding-dong": "Дин-дон", + "sliding_door": "Раздвижная дверь", + "slam": "Хлопок", + "knock": "Стук", + "tap": "Небольшой стук", + "squeak": "Скрип", + "cupboard_open_or_close": "Открытие или закрытие шкафа", + "drawer_open_or_close": "Открытие или закрытие ящика", + "dishes": "Тарелки", + "cutlery": "Столовые приборы", + "chopping": "Нарезание", + "frying": "Жарка", + "microwave_oven": "Микроволновка", + "blender": "Блендер", + "water_tap": "Водопроводный кран", + "sink": "Раковина", + "bathtub": "Ванна", + "hair_dryer": "Фен", + "toilet_flush": "Слив унитаза", + "toothbrush": "Зубная щетка", + "zipper": "Молния на одежде", + "keys_jangling": "Бряканье ключей", + "coin": "Монета", + "scissors": "Ножницы", + "electric_shaver": "Электробритва", + "shuffling_cards": "Тасование карт", + "typing": "Печатание", + "typewriter": "Печатная машинка", + "computer_keyboard": "Компьютерная клавиатура", + "writing": "Письмо", + "alarm": "Сигнализация", + "telephone": "Телефон", + "telephone_bell_ringing": "Звонок телефона", + "ringtone": "Рингтон", + "telephone_dialing": "Набор телефонного номера", + "dial_tone": "Телефонный гудок", + "busy_signal": "Сигнал занято", + "alarm_clock": "Будильник", + "siren": "Сирена", + "civil_defense_siren": "Сирена гражданской обороны", + "foghorn": "Туманный горн", + "whistle": "Свисток", + "steam_whistle": "Паровой свисток", + "mechanisms": "Механизмы", + "clock": "Часы", + "tick": "Тик", + "tick-tock": "Тик-так", + "gears": "Шестерни", + "pulleys": "Шкивы", + "sewing_machine": "Швейная машинка", + "mechanical_fan": "Механический вентилятор", + "printer": "Принтер", + "camera": "Камера", + "single-lens_reflex_camera": "Зеркальная камера", + "tools": "Инструменты", + "sawing": "Распиловка", + "filing": "Звук напильника", + "sanding": "Шлифовка", + "power_tool": "Электроинструмент", + "drill": "Дрель", + "explosion": "Взрыв", + "gunshot": "Выстрел", + "machine_gun": "Автомат", + "fusillade": "Оружейная очередь", + "artillery_fire": "Артиллерийский огонь", + "burst": "Очередь выстрелов", + "eruption": "Извержение", + "boom": "Бум", + "wood": "Дерево", + "chop": "Рубка", + "splinter": "Щепка", + "glass": "Стекло", + "crack": "Трещина", + "chink": "Звон", + "shatter": "Разбитие", + "silence": "Тишина", + "sound_effect": "Звуковой эффект", + "environmental_noise": "Шум окружающей среды", + "static": "Статический шум", + "field_recording": "Полевая запись", + "country": "Кантри", + "vocal_music": "Вокальная музыка", + "electronic_music": "Электронная музыка", + "folk_music": "Фолк-музыка", + "trance_music": "Транс", + "swing_music": "Свинг", + "reggae": "Регги", + "waves": "Волны", + "ambulance": "Скорая помощь", + "helicopter": "Вертолет", + "radio": "Радио", + "lawn_mower": "Газонокосилка", + "electric_toothbrush": "Электрическая зубная щетка", + "air_conditioning": "Кондиционер", + "toot": "Гудок", + "traffic_noise": "Дорожный шум", + "ocean": "Океан", + "steam": "Пар", + "car_alarm": "Автомобильная сигнализация", + "buzzer": "Зуммер", + "chainsaw": "Цепная пила", + "door": "Дверь", + "doorbell": "Дверной звонок", + "smoke_detector": "Датчик дыма", + "white_noise": "Белый шум", + "cash_register": "Касса", + "vacuum_cleaner": "Пылесос", + "fire_alarm": "Пожарная сигнализация", + "ratchet": "Трещотка", + "cap_gun": "Игрушечный пистолет", + "fireworks": "Фейерверк", + "jackhammer": "Отбойный молоток", + "pink_noise": "Розовый шум", + "hammer": "Молоток", + "firecracker": "Петарда", + "television": "Телевидение" } diff --git a/web/public/locales/ru/common.json b/web/public/locales/ru/common.json index 0967ef424..ea5a430bc 100644 --- a/web/public/locales/ru/common.json +++ b/web/public/locales/ru/common.json @@ -1 +1,242 @@ -{} +{ + "time": { + "untilForTime": "До {{time}}", + "untilForRestart": "До перезапуска Frigate.", + "untilRestart": "До перезапуска", + "ago": "{{timeAgo}} назад", + "justNow": "Только что", + "today": "Сегодня", + "yesterday": "Вчера", + "thisWeek": "На этой неделе", + "last14": "Последние 14 дней", + "last30": "Последние 30 дней", + "last7": "Последние 7 дней", + "thisMonth": "В этом месяце", + "5minutes": "5 минут", + "30minutes": "30 минут", + "1hour": "1 час", + "12hours": "12 часов", + "24hours": "24 часа", + "pm": "pm", + "am": "am", + "yr": "{{time}}л", + "year_one": "{{time}} год", + "year_few": "{{time}} года", + "year_many": "{{time}} лет", + "mo": "{{time}}мес", + "month_one": "{{time}} месяц", + "month_few": "{{time}} месяца", + "month_many": "{{time}} месяцев", + "d": "{{time}}д", + "h": "{{time}}ч", + "hour_one": "{{time}} час", + "hour_few": "{{time}} часа", + "hour_many": "{{time}} часов", + "m": "{{time}}мин", + "minute_one": "{{time}} минута", + "minute_few": "{{time}} минуты", + "minute_many": "{{time}} минут", + "day_one": "{{time}} день", + "day_few": "{{time}} дня", + "day_many": "{{time}} дней", + "lastWeek": "На прошлой неделе", + "lastMonth": "В прошлом месяце", + "10minutes": "10 минут", + "s": "{{time}}с", + "second_one": "{{time}} секунда", + "second_few": "{{time}} секунды", + "second_many": "{{time}} секунд", + "formattedTimestampExcludeSeconds": { + "24hour": "%b %-d, %H:%M", + "12hour": "%b %-d, %I:%M %p" + }, + "formattedTimestampWithYear": { + "24hour": "%b %-d %Y, %H:%M", + "12hour": "%b %-d %Y, %I:%M %p" + }, + "formattedTimestamp2": { + "24hour": "%d %b %H:%M:%S", + "12hour": "%m/%d %I:%M:%S%P" + }, + "formattedTimestamp": { + "12hour": "%b %-d, %I:%M:%S %p", + "24hour": "%b %-d, %H:%M:%S" + }, + "formattedTimestampOnlyMonthAndDay": "%b %-d" + }, + "selectItem": "Выбор {{item}}", + "button": { + "apply": "Принять", + "done": "Готово", + "enabled": "Включено", + "enable": "Включить", + "save": "Сохранить", + "saving": "Сохранение...", + "fullscreen": "Полноэкранный режим", + "pictureInPicture": "Картинка в картинке", + "twoWayTalk": "Двусторонняя связь", + "cameraAudio": "Аудио с камеры", + "on": "Вкл", + "edit": "Редактировать", + "copyCoordinates": "Копировать координаты", + "delete": "Удалить", + "yes": "Да", + "no": "Нет", + "download": "Загрузить", + "info": "Информация", + "suspended": "Приостановлено", + "cancel": "Отменить", + "disable": "Отключить", + "reset": "Сбросить", + "disabled": "Отключено", + "close": "Закрыть", + "copy": "Копировать", + "back": "Назад", + "history": "История", + "off": "Выкл", + "exitFullscreen": "Выйти из полноэкранного режима", + "unsuspended": "Возобновить", + "play": "Воспроизвести", + "unselect": "Снять выбор", + "export": "Экспорт", + "deleteNow": "Удалить сейчас", + "next": "Следующий" + }, + "label": { + "back": "Вернуться" + }, + "unit": { + "speed": { + "kph": "км/ч", + "mph": "миль/ч" + } + }, + "menu": { + "configuration": "Конфигурация", + "systemLogs": "Системные логи", + "settings": "Настройки", + "configurationEditor": "Редактор конфигурации", + "system": "Система", + "systemMetrics": "Метрики системы", + "languages": "Языки", + "language": { + "en": "English (Английский)", + "zhCN": "简体中文 (Упрощённый китайский)", + "es": "Español (Испанский)", + "hi": "हिन्दी (Хинди)", + "fr": "Français (Французский)", + "ar": "العربية (Арабский)", + "pt": "Português (Португальский)", + "ru": "Русский", + "tr": "Türkçe (Турецкий)", + "nl": "Nederlands (Нидерландский)", + "cs": "Čeština (Чешский)", + "nb": "Norsk Bokmål (Норвежский (букмол))", + "vi": "Tiếng Việt (Вьетнамский)", + "fa": "فارسی (Фарси)", + "pl": "Polski (Польский)", + "uk": "Українська (Украинский)", + "el": "Ελληνικά (Греческий)", + "da": "Dansk (Датский)", + "sk": "Slovenčina (Словацкий)", + "sv": "Svenska (Шведский)", + "hu": "Magyar (Венгерский)", + "fi": "Suomi (Финский)", + "ro": "Română (Румынский)", + "ja": "日本語 (Японский)", + "it": "Italiano (Итальянский)", + "de": "Deutsch (Немецкий)", + "ko": "한국어 (Корейский)", + "he": "עברית (Иврит)", + "withSystem": { + "label": "Использовать системные языковые настройки" + } + }, + "darkMode": { + "withSystem": { + "label": "Использовать системные настройки светлого или тёмного режимов" + }, + "label": "Тёмный режим", + "light": "Светлый", + "dark": "Тёмный" + }, + "withSystem": "Система", + "theme": { + "label": "Тема", + "blue": "Синяя", + "default": "По умолчанию", + "green": "Зелёная", + "nord": "Северная", + "red": "Красная", + "contrast": "Высокий контраст" + }, + "help": "Помощь", + "documentation": { + "title": "Документация", + "label": "Документация по Frigate" + }, + "explore": "Обзор", + "restart": "Перезапуск Frigate", + "live": { + "title": "Прямой эфир", + "allCameras": "Все камеры", + "cameras": { + "count_one": "{{count}} камера", + "count_few": "{{count}} камеры", + "count_many": "{{count}} камер", + "title": "Камеры" + } + }, + "review": "Просмотр", + "export": "Экспорт", + "uiPlayground": "Среда тестирования интерфейсов", + "faceLibrary": "Библиотека Лиц", + "user": { + "title": "Пользователь", + "account": "Аккаунт", + "current": "Текущий пользователь: {{user}}", + "anonymous": "anonymous", + "logout": "Выход", + "setPassword": "Установить пароль" + }, + "appearance": "Внешний вид" + }, + "pagination": { + "label": "пагинация", + "previous": { + "title": "Предыдущая", + "label": "Переход на предыдущую страницу" + }, + "next": { + "title": "Следующая", + "label": "Переход на следующую страницу" + }, + "more": "Больше страниц" + }, + "accessDenied": { + "desc": "У вас нет разрешения на просмотр этой страницы.", + "documentTitle": "Доступ запрещён - Frigate", + "title": "Доступ запрещён" + }, + "notFound": { + "desc": "Страница не найдена", + "documentTitle": "Не найдена - Frigate", + "title": "404" + }, + "toast": { + "copyUrlToClipboard": "URL скопирован в буфер обмена.", + "save": { + "error": { + "noMessage": "Не удалось сохранить изменения конфигурации", + "title": "Не удалось сохранить изменения конфигурации: {{errorMessage}}" + }, + "title": "Сохранить" + } + }, + "role": { + "title": "Роль", + "admin": "Администратор", + "viewer": "Наблюдатель", + "desc": "Администраторы имеют полный доступ ко всем функциям в интерфейсе Frigate. Наблюдатели ограничены просмотром камер, элементов просмотра и архивных записей." + } +} diff --git a/web/public/locales/ru/components/auth.json b/web/public/locales/ru/components/auth.json index 0967ef424..b227af835 100644 --- a/web/public/locales/ru/components/auth.json +++ b/web/public/locales/ru/components/auth.json @@ -1 +1,15 @@ -{} +{ + "form": { + "user": "Имя пользователя", + "password": "Пароль", + "login": "Логин", + "errors": { + "usernameRequired": "Необходимо ввести имя пользователя", + "passwordRequired": "Необходимо ввести пароль", + "rateLimit": "Превышение числа попыток. Попробуй еще раз позже.", + "loginFailed": "Ошибка входа", + "unknownError": "Неизвестная ошибка. Проверьте логи.", + "webUnknownError": "Неизвестная ошибка. Проверьте логи консоли." + } + } +} diff --git a/web/public/locales/ru/components/camera.json b/web/public/locales/ru/components/camera.json index 0967ef424..88ed8e9c0 100644 --- a/web/public/locales/ru/components/camera.json +++ b/web/public/locales/ru/components/camera.json @@ -1 +1,83 @@ -{} +{ + "group": { + "label": "Группы камер", + "add": "Добавить группу камер", + "edit": "Редактирование группы камер", + "delete": { + "label": "Удалить группу камер", + "confirm": { + "title": "Подтвердить удаление", + "desc": "Вы уверены, что хотите удалить группу камер {{name}}?" + } + }, + "name": { + "label": "Название", + "placeholder": "Введите название...", + "errorMessage": { + "exists": "Такое название группы камер уже существует.", + "nameMustNotPeriod": "Название группы камер не должно содержать точки.", + "invalid": "Неверное название группы камер.", + "mustLeastCharacters": "Название группы камер должно содержать не менее 2 символов." + } + }, + "cameras": { + "label": "Камеры", + "desc": "Выберите камеры для этой группы." + }, + "icon": "Иконка", + "success": "Группа камер {{name}} сохранена.", + "camera": { + "setting": { + "label": "Настройки видеопотока", + "desc": "Изменить параметры прямой трансляции для панели этой группы камер. Эти настройки зависят от устройства/браузера.", + "audioIsAvailable": "Для этого потока доступен звук", + "audioIsUnavailable": "Для этого потока звук недоступен", + "audio": { + "tips": { + "title": "Аудио должно выводиться с вашей камеры и быть настроено в go2rtc для этого потока.", + "document": "Прочитать документацию " + } + }, + "streamMethod": { + "label": "Метод стриминга", + "method": { + "noStreaming": { + "label": "Нет потока", + "desc": "Изображения с камеры будут обновляться только раз в минуту, и прямая трансляция происходить не будет." + }, + "smartStreaming": { + "label": "Умный поток (рекомендуется)", + "desc": "Умный поток будет обновлять изображение с камеры раз в минуту при отсутствии активности для экономии трафика и ресурсов. При обнаружении активности изображение автоматически переключается на прямую трансляцию." + }, + "continuousStreaming": { + "label": "Непрерывный поток", + "desc": { + "warning": "Непрерывная потоковая передача может привести к высокому потреблению трафика и проблемам с производительностью. Используйте с осторожностью.", + "title": "Изображение с камеры всегда будет транслироваться в реальном времени при отображении на панели, даже если активность не обнаружена." + } + } + } + }, + "compatibilityMode": { + "label": "Режим совместимости", + "desc": "Включите эту опцию только если прямая трансляция с вашей камеры отображает цветовые артефакты и имеет диагональную линию с правой стороны изображения." + }, + "title": "Настройки видеопотока {{cameraName}}" + } + } + }, + "debug": { + "options": { + "label": "Настройки", + "title": "Опции", + "hideOptions": "Скрыть опции", + "showOptions": "Показать опции" + }, + "boundingBox": "Ограничивающая рамка", + "timestamp": "Метка времени", + "zones": "Зоны", + "mask": "Маска", + "motion": "Движение", + "regions": "Регионы" + } +} diff --git a/web/public/locales/ru/components/dialog.json b/web/public/locales/ru/components/dialog.json index 0967ef424..531ee4b66 100644 --- a/web/public/locales/ru/components/dialog.json +++ b/web/public/locales/ru/components/dialog.json @@ -1 +1,116 @@ -{} +{ + "restart": { + "title": "Вы уверены, что хотите перезапустить Frigate?", + "button": "Перезапуск", + "restarting": { + "title": "Frigate перезапускается", + "content": "Эта страница перезагрузится через {{countdown}} сек.", + "button": "Принудительно перезагрузить сейчас" + } + }, + "explore": { + "plus": { + "submitToPlus": { + "label": "Отправить в Frigate+", + "desc": "Объекты в местах, которых вы хотите избежать, не являются ложными срабатываниями. Отправка их как ложных срабатываний запутает модель." + }, + "review": { + "true": { + "label": "Подтвердите метку для Frigate Plus", + "true_one": "Это {{label}}", + "true_few": "Это {{label}}", + "true_many": "Это {{label}}" + }, + "false": { + "label": "Не подтверждать эту метку для Frigate Plus", + "false_one": "Это не {{label}}", + "false_few": "Это не {{label}}", + "false_many": "Это не {{label}}" + }, + "state": { + "submitted": "Отправлено" + } + } + }, + "video": { + "viewInHistory": "Посмотреть в Истории" + } + }, + "export": { + "time": { + "fromTimeline": "Выберите из Таймлайна", + "custom": "Пользовательский", + "start": { + "title": "Время начала", + "label": "Выберите время начала" + }, + "end": { + "title": "Время окончания", + "label": "Выберите время окончания" + }, + "lastHour_one": "Последний час", + "lastHour_few": "Последние {{count}} часа", + "lastHour_many": "Последние {{count}} часов" + }, + "name": { + "placeholder": "Назовите экспорт" + }, + "select": "Выбрать", + "export": "Экспорт", + "selectOrExport": "Выбрать или экспортировать", + "toast": { + "success": "Экспорт успешно запущен. Файл доступен в папке /exports.", + "error": { + "failed": "Не удалось запустить экспорт: {{error}}", + "noVaildTimeSelected": "Не выбран допустимый временной диапазон", + "endTimeMustAfterStartTime": "Время окончания должно быть после времени начала" + } + }, + "fromTimeline": { + "saveExport": "Сохранить экспорт", + "previewExport": "Предпросмотр экспорта" + } + }, + "streaming": { + "label": "Поток", + "restreaming": { + "disabled": "Рестриминг не включён для этой камеры.", + "desc": { + "title": "Настройте go2rtc для дополнительных вариантов просмотра в реальном времени и аудио для этой камеры.", + "readTheDocumentation": "Прочитать документацию " + } + }, + "debugView": "Режим отладки", + "showStats": { + "label": "Показать статистику потока", + "desc": "Включите эту опцию, чтобы отображать статистику потока в виде наложения на изображение с камеры." + } + }, + "search": { + "saveSearch": { + "label": "Сохранить поиск", + "placeholder": "Введите название для вашего поиска", + "overwrite": "{{searchName}} уже существует. Сохранение перезапишет существующее значение.", + "success": "Поиск {{searchName}} был сохранен.", + "button": { + "save": { + "label": "Сохранить этот поиск" + } + }, + "desc": "Укажите название этого сохранённого поиска." + } + }, + "recording": { + "confirmDelete": { + "title": "Подтвердить удаление", + "desc": { + "selected": "Вы уверены, что хотите удалить все записанное видео, связанное с этим элементом просмотра?

Удерживайте клавишу Shift, чтобы пропустить это окно в будущем." + } + }, + "button": { + "export": "Экспорт", + "markAsReviewed": "Пометить как просмотренное", + "deleteNow": "Удалить сейчас" + } + } +} diff --git a/web/public/locales/ru/components/filter.json b/web/public/locales/ru/components/filter.json index 0967ef424..653a684ec 100644 --- a/web/public/locales/ru/components/filter.json +++ b/web/public/locales/ru/components/filter.json @@ -1 +1,126 @@ -{} +{ + "filter": "Фильтр", + "labels": { + "label": "Метки", + "all": { + "title": "Все метки", + "short": "Метки" + }, + "count": "{{count}} меток", + "count_one": "{{count}} Метка", + "count_other": "{{count}} меток" + }, + "zones": { + "all": { + "title": "Все зоны", + "short": "Зоны" + }, + "label": "Зоны" + }, + "dates": { + "all": { + "title": "Все даты", + "short": "Даты" + } + }, + "timeRange": "Временной диапазон", + "subLabels": { + "label": "Вторичные метки", + "all": "Все вторичные метки" + }, + "score": "Оценка", + "estimatedSpeed": "Расчетная скорость ({{unit}})", + "more": "Больше фильтров", + "reset": { + "label": "Сбросить фильтры к значениям по умолчанию" + }, + "features": { + "hasSnapshot": "Есть снимок", + "hasVideoClip": "Есть видеоклип", + "submittedToFrigatePlus": { + "label": "Отправлено в Frigate+", + "tips": "Сначала необходимо отфильтровать отслеживаемые объекты, у которых есть снимок.

Отслеживаемые объекты без снимка нельзя отправить в Frigate+." + }, + "label": "Функции" + }, + "sort": { + "speedAsc": "Расчетная скорость (по возрастанию)", + "speedDesc": "Расчетная скорость (по убыванию)", + "label": "Сортировка", + "dateAsc": "Дата (по возрастанию)", + "dateDesc": "Дата (по убыванию)", + "scoreAsc": "Оценка объекта (по возрастанию)", + "scoreDesc": "Оценка объекта (по убыванию)", + "relevance": "Релевантность" + }, + "cameras": { + "label": "Фильтр камер", + "all": { + "title": "Все камеры", + "short": "Камеры" + } + }, + "explore": { + "settings": { + "defaultView": { + "unfilteredGrid": "Нефильтрованная сетка", + "summary": "Сводка", + "title": "Вид по умолчанию", + "desc": "При отсутствии выбранных фильтров отображать сводку последних отслеживаемых объектов для каждой метки или показывать нефильтрованную сетку." + }, + "gridColumns": { + "title": "Столбцы сетки", + "desc": "Выберите количество столбцов сетки." + }, + "searchSource": { + "label": "Источник поиска", + "desc": "Выберите, выполнять поиск по миниатюрам или описаниям отслеживаемых объектов.", + "options": { + "thumbnailImage": "Изображение миниатюры", + "description": "Описание" + } + }, + "title": "Настройки" + }, + "date": { + "selectDateBy": { + "label": "Выберите дату для фильтрации" + } + } + }, + "logSettings": { + "filterBySeverity": "Фильтровать логи по уровню важности", + "loading": { + "title": "Загрузка", + "desc": "При прокрутке панели логов в самый низ новые записи автоматически отображаются по мере их добавления." + }, + "label": "Уровень детализации логов", + "allLogs": "Все логи", + "disableLogStreaming": "Отключить потоковую передачу логов" + }, + "trackedObjectDelete": { + "title": "Подтвердить удаление", + "toast": { + "error": "Не удалось удалить отслеживаемые объекты: {{errorMessage}}", + "success": "Отслеживаемые объекты успешно удалены." + }, + "desc": "Удаление этих {{objectLength}} отслеживаемых объектов приведёт к удалению их снимков, сохранённых эмбеддингов и записей жизненного цикла. НО сами записи в разделе «История» останутся.

Вы уверены, что хотите продолжить?

Удерживайте Shift, чтобы пропустить это окно в будущем." + }, + "zoneMask": { + "filterBy": "Фильтр по маске зоны" + }, + "recognizedLicensePlates": { + "noLicensePlatesFound": "Номерных знаков не найдено.", + "placeholder": "Введите номер для поиска знака...", + "title": "Распознанные номерные знаки", + "loadFailed": "Не удалось загрузить распознанные номерные знаки.", + "loading": "Загрузка распознанных номерных знаков...", + "selectPlatesFromList": "Выберите один или более знаков из списка." + }, + "review": { + "showReviewed": "Показать просмотренные" + }, + "motion": { + "showMotionOnly": "Показывать только движение" + } +} diff --git a/web/public/locales/ru/components/icons.json b/web/public/locales/ru/components/icons.json index 0967ef424..792966741 100644 --- a/web/public/locales/ru/components/icons.json +++ b/web/public/locales/ru/components/icons.json @@ -1 +1,8 @@ -{} +{ + "iconPicker": { + "selectIcon": "Выберите иконку", + "search": { + "placeholder": "Поиск иконки..." + } + } +} diff --git a/web/public/locales/ru/components/input.json b/web/public/locales/ru/components/input.json index 0967ef424..149b56d0a 100644 --- a/web/public/locales/ru/components/input.json +++ b/web/public/locales/ru/components/input.json @@ -1 +1,10 @@ -{} +{ + "button": { + "downloadVideo": { + "label": "Скачать видео", + "toast": { + "success": "Загрузка видео начата." + } + } + } +} diff --git a/web/public/locales/ru/components/player.json b/web/public/locales/ru/components/player.json index 0967ef424..f0a44efcd 100644 --- a/web/public/locales/ru/components/player.json +++ b/web/public/locales/ru/components/player.json @@ -1 +1,51 @@ -{} +{ + "noRecordingsFoundForThisTime": "Не найдено ни одной записи", + "noPreviewFound": "Предпросмотр не найден", + "submitFrigatePlus": { + "title": "Отправить этот кадр в Frigate+?", + "submit": "Отправить" + }, + "noPreviewFoundFor": "Не найдено предпросмотра для {{cameraName}}", + "livePlayerRequiredIOSVersion": "iOS 17.1 или выше требуется для этого типа стрима.", + "streamOffline": { + "title": "Поток оффлайн", + "desc": "С потока detect камеры {{cameraName}} не получено кадров, проверьте логи ошибок" + }, + "cameraDisabled": "Камера отключена", + "stats": { + "streamType": { + "title": "Тип потока:", + "short": "Тип" + }, + "bandwidth": { + "title": "Пропускная способность:", + "short": "Пропускная способность" + }, + "latency": { + "title": "Задержка:", + "value": "{{seconds}} сек", + "short": { + "title": "Задержка", + "value": "{{seconds}} сек" + } + }, + "totalFrames": "Всего кадров:", + "droppedFrames": { + "title": "Пропущено кадров:", + "short": { + "title": "Пропущено", + "value": "{{droppedFrames}} кадров" + } + }, + "decodedFrames": "Декодированные кадры:", + "droppedFrameRate": "Частота пропущенных кадров:" + }, + "toast": { + "error": { + "submitFrigatePlusFailed": "Не удалось отправить кадр в Frigate+" + }, + "success": { + "submittedFrigatePlus": "Кадр успешно загружен в Frigate+" + } + } +} diff --git a/web/public/locales/ru/objects.json b/web/public/locales/ru/objects.json index 0967ef424..659ff402c 100644 --- a/web/public/locales/ru/objects.json +++ b/web/public/locales/ru/objects.json @@ -1 +1,120 @@ -{} +{ + "dog": "Собака", + "cat": "Кошка", + "animal": "Зверь", + "bark": "Лай", + "person": "Человек", + "bicycle": "Велосипед", + "car": "Автомобиль", + "motorcycle": "Мотоцикл", + "bird": "Птица", + "horse": "Лошадь", + "sheep": "Овца", + "mouse": "Мышь", + "goat": "Коза", + "airplane": "Самолет", + "keyboard": "Клавишный инструмент", + "boat": "Лодка", + "bus": "Автобус", + "train": "Поезд", + "skateboard": "Скейтборд", + "door": "Дверь", + "blender": "Блендер", + "sink": "Раковина", + "clock": "Часы", + "vehicle": "Транспорт", + "hair_dryer": "Фен", + "toothbrush": "Зубная щетка", + "scissors": "Ножницы", + "traffic_light": "Светофор", + "fire_hydrant": "Пожарный гидрант", + "street_sign": "Дорожный знак", + "stop_sign": "Знак Стоп", + "parking_meter": "Парковочный счётчик", + "bench": "Скамейка", + "cow": "Корова", + "elephant": "Слон", + "bear": "Медведь", + "zebra": "Зебра", + "giraffe": "Жираф", + "hat": "Шляпа", + "backpack": "Рюкзак", + "umbrella": "Зонтик", + "shoe": "Обувь", + "eye_glasses": "Очки", + "tie": "Галстук", + "suitcase": "Чемодан", + "handbag": "Сумочка", + "frisbee": "Фрисби", + "skis": "Лыжи", + "snowboard": "Сноуборд", + "kite": "Воздушный змей", + "baseball_bat": "Бейсбольная бита", + "baseball_glove": "Бейсбольная перчатка", + "sports_ball": "Спортивный мяч", + "surfboard": "Доска для серфинга", + "tennis_racket": "Теннисная ракетка", + "bottle": "Бутылка", + "plate": "Тарелка", + "wine_glass": "Винный бокал", + "cup": "Чашка", + "fork": "Вилка", + "spoon": "Ложка", + "bowl": "Миска", + "banana": "Банан", + "apple": "Яблоко", + "orange": "Апельсин", + "broccoli": "Брокколи", + "sandwich": "Сэндвич", + "carrot": "Морковь", + "hot_dog": "Хот-дог", + "pizza": "Пицца", + "donut": "Пончик", + "cake": "Торт", + "chair": "Стул", + "couch": "Диван", + "potted_plant": "Комнатное растение", + "bed": "Кровать", + "mirror": "Зеркало", + "dining_table": "Обеденный стол", + "window": "Окно", + "desk": "Стол", + "toilet": "Туалет", + "tv": "ТВ", + "laptop": "Ноутбук", + "remote": "Пульт дистанционного управления", + "cell_phone": "Мобильный телефон", + "microwave": "Микроволновка", + "oven": "Духовка", + "toaster": "Тостер", + "refrigerator": "Холодильник", + "book": "Книга", + "vase": "Ваза", + "teddy_bear": "Плюшевый мишка", + "hair_brush": "Расчёска", + "squirrel": "Белка", + "deer": "Олень", + "fox": "Лиса", + "rabbit": "Кролик", + "raccoon": "Енот", + "robot_lawnmower": "Роботизированная газонокосилка", + "waste_bin": "Мусорное ведро", + "on_demand": "По требованию", + "face": "Лицо", + "license_plate": "Номерной знак", + "package": "Посылка", + "bbq_grill": "Гриль для барбекю", + "amazon": "Amazon", + "usps": "USPS", + "ups": "UPS", + "fedex": "FedEx", + "dhl": "DHL", + "an_post": "An Post", + "purolator": "Purolator", + "knife": "Нож", + "postnl": "PostNL", + "nzpost": "NZPost", + "postnord": "PostNord", + "gls": "GLS", + "dpd": "DPD" +} diff --git a/web/public/locales/ru/views/configEditor.json b/web/public/locales/ru/views/configEditor.json index 0967ef424..e82cbf6ff 100644 --- a/web/public/locales/ru/views/configEditor.json +++ b/web/public/locales/ru/views/configEditor.json @@ -1 +1,15 @@ -{} +{ + "configEditor": "Редактор конфига", + "copyConfig": "Скопировать конфигурацию", + "saveAndRestart": "Сохранить и перезапустить", + "saveOnly": "Только сохранить", + "documentTitle": "Редактор конфигурации - Frigate", + "toast": { + "success": { + "copyToClipboard": "Конфигурация скопирована в буфер обмена." + }, + "error": { + "savingError": "Ошибка сохранения конфигурации" + } + } +} diff --git a/web/public/locales/ru/views/events.json b/web/public/locales/ru/views/events.json index 0967ef424..de63641ad 100644 --- a/web/public/locales/ru/views/events.json +++ b/web/public/locales/ru/views/events.json @@ -1 +1,35 @@ -{} +{ + "alerts": "Оповещения", + "detections": "Обнаружения", + "motion": { + "label": "Движение", + "only": "Только движение" + }, + "allCameras": "Все камеры", + "camera": "Камера", + "empty": { + "alert": "Отсутствуют оповещения для просмотра", + "detection": "Отсутствуют обнаружения для просмотра", + "motion": "Не найдено данных о движении" + }, + "timeline": "Таймлайн", + "timeline.aria": "Выбор таймлайна", + "events": { + "label": "События", + "aria": "Выбор событий", + "noFoundForTimePeriod": "Для этого периода времени не найдено ни одного события." + }, + "documentTitle": "Просмотр - Frigate", + "recordings": { + "documentTitle": "Записи - Frigate" + }, + "calendarFilter": { + "last24Hours": "Последние 24 часа" + }, + "markAsReviewed": "Пометить как просмотренное", + "newReviewItems": { + "label": "Посмотреть новые элементы для просмотра", + "button": "Новые элементы для просмотра" + }, + "markTheseItemsAsReviewed": "Пометить эти элементы как просмотренные" +} diff --git a/web/public/locales/ru/views/explore.json b/web/public/locales/ru/views/explore.json index 0967ef424..93080daf0 100644 --- a/web/public/locales/ru/views/explore.json +++ b/web/public/locales/ru/views/explore.json @@ -1 +1,194 @@ -{} +{ + "exploreIsUnavailable": { + "embeddingsReindexing": { + "context": "Обзор станет доступен после завершения переиндексации эмбеддингов отслеживаемых объектов.", + "startingUp": "Запуск...", + "estimatedTime": "Оставшееся время:", + "finishingShortly": "Скоро завершится", + "step": { + "descriptionsEmbedded": "Встроенные описания: ", + "trackedObjectsProcessed": "Обработанные отслеживаемые объекты: ", + "thumbnailsEmbedded": "Встроенные миниатюры: " + } + }, + "title": "Обзор недоступен", + "downloadingModels": { + "setup": { + "visionModel": "Модель компьютерного зрения", + "visionModelFeatureExtractor": "Экстрактор признаков модели компьютерного зрения", + "textModel": "Текстовая модель", + "textTokenizer": "Текстовый токенизатор" + }, + "tips": { + "context": "Возможно, вы захотите переиндексировать эмбеддинги отслеживаемых объектов после загрузки моделей.", + "documentation": "Прочитать документацию" + }, + "context": "Frigate загружает необходимые модели эмбеддингов для поддержки функции семантического поиска. Это может занять несколько минут в зависимости от скорости вашего интернет-соединения.", + "error": "Произошла ошибка. Проверьте логи Frigate." + } + }, + "generativeAI": "Генеративный ИИ", + "documentTitle": "Обзор - Frigate", + "details": { + "timestamp": "Метка времени", + "item": { + "title": "Детали элемента просмотра", + "desc": "Детали элемента просмотра", + "button": { + "share": "Поделиться этим элементом просмотра", + "viewInExplore": "Смотреть в Обзоре" + }, + "tips": { + "hasMissingObjects": "Настройте конфигурацию, если хотите, чтобы Frigate сохранял отслеживаемые объекты для следующих меток: {{objects}}", + "mismatch_one": "{{count}} недоступный объект обнаружен и включен в этот элемент просмотра. Эти объекты либо не соответствовали критериям тревоги/детекции, либо уже были удалены.", + "mismatch_few": "{{count}} недоступных объекта обнаружено и включено в этот элемент просмотра. Эти объекты либо не соответствовали критериям тревоги/детекции, либо уже были удалены.", + "mismatch_many": "{{count}} недоступных объектов обнаружено и включено в этот элемент просмотра. Эти объекты либо не соответствовали критериям тревоги/детекции, либо уже были удалены." + }, + "toast": { + "success": { + "updatedSublabel": "Успешно обновлена вторичная метка.", + "updatedLPR": "Номерной знак успешно обновлён.", + "regenerate": "Новое описание запрошено у {{provider}}. В зависимости от скорости работы вашего провайдера, генерация нового описания может занять некоторое время." + }, + "error": { + "updatedSublabelFailed": "Не удалось обновить вторичную метку: {{errorMessage}}", + "updatedLPRFailed": "Не удалось обновить номерной знак: {{errorMessage}}", + "regenerate": "Не удалось запросить новое описание у {{provider}}: {{errorMessage}}" + } + } + }, + "editSubLabel": { + "descNoLabel": "Введите новую вторичную метку для этого отслеживаемого объекта", + "title": "Редактирование вторичной метки", + "desc": "Введите новую вторичную метку для {{label}}" + }, + "topScore": { + "label": "Лучшая оценка", + "info": "Лучшая оценка — это наивысшая медианный оценка для отслеживаемого объекта, поэтому она может отличаться от оценки, показанной на миниатюре результата поиска." + }, + "estimatedSpeed": "Расчётная скорость", + "tips": { + "saveDescriptionFailed": "Не удалось обновить описание: {{errorMessage}}", + "descriptionSaved": "Описание успешно сохранено" + }, + "label": "Метка", + "editLPR": { + "title": "Редактирование номерного знака", + "descNoLabel": "Введите новое значение номерного знака для этого отслеживаемого объекта", + "desc": "Введите новое значение номерного знака для {{label}}" + }, + "recognizedLicensePlate": "Распознанный номерной знак", + "objects": "Объекты", + "camera": "Камера", + "zones": "Зоны", + "button": { + "findSimilar": "Найти похожее", + "regenerate": { + "title": "Перегенерировать", + "label": "Перегенерировать описание отслеживаемого объекта" + } + }, + "description": { + "label": "Описание", + "aiTips": "Frigate не будет запрашивать описание у вашего генеративного ИИ-провайдера, пока жизненный цикл отслеживаемого объекта не завершится.", + "placeholder": "Описание отслеживаемого объекта" + }, + "expandRegenerationMenu": "Развернуть меню перегенерации", + "regenerateFromSnapshot": "Перегенерировать из снимка", + "regenerateFromThumbnails": "Перегенерировать из миниатюры" + }, + "trackedObjectDetails": "Детали отслеживаемого объекта", + "type": { + "details": "детали", + "snapshot": "снимок", + "video": "видео", + "object_lifecycle": "жизненный цикл объекта" + }, + "objectLifecycle": { + "title": "Жизненный цикл объекта", + "noImageFound": "Для этой метки времени изображение не найдено.", + "createObjectMask": "Создать маску объекта", + "adjustAnnotationSettings": "Изменить настройки аннотаций", + "scrollViewTips": "Прокрутите, чтобы просмотреть ключевые моменты жизненного цикла этого объекта.", + "autoTrackingTips": "Позиции ограничивающих рамок будут неточными для камер с автотрекингом.", + "lifecycleItemDesc": { + "visible": "Обнаружен(а) {{label}}", + "entered_zone": "{{label}} зафиксирован(а) в {{zones}}", + "active": "{{label}} активировался(ась)", + "stationary": "{{label}} перестал(а) двигаться", + "attribute": { + "faceOrLicense_plate": "{{attribute}} обнаружен для {{label}}", + "other": "{{label}} распознан(а) как {{attribute}}" + }, + "gone": "{{label}} покинул(а) зону", + "heard": "Обнаружен звук {{label}}", + "external": "Обнаружен(а) {{label}}" + }, + "annotationSettings": { + "title": "Настройки аннотаций", + "showAllZones": { + "title": "Показать все зоны", + "desc": "Всегда показывать зоны на кадрах, где объекты вошли в зону." + }, + "offset": { + "label": "Сдвиг аннотаций", + "desc": "Эти данные поступают из потока детекции вашей камеры, но накладываются на изображения из потока записи. Потоки вряд ли идеально синхронизированы, поэтому ограничивающая рамка и видео могут не совпадать. Для корректировки используйте поле annotation_offset.", + "millisecondsToOffset": "Смещение аннотаций детекции в миллисекундах. По умолчанию: 0", + "documentation": "Прочитать документацию ", + "tips": "СОВЕТ: Представьте, у вас клип события, где человек идёт слева направо. Если рамка на таймлайне постоянно смещена влево от человека — уменьшите значение. Если рамка опережает движение — увеличьте значение." + } + }, + "carousel": { + "previous": "Предыдущий слайд", + "next": "Следующий слайд" + } + }, + "itemMenu": { + "downloadVideo": { + "label": "Скачать видео", + "aria": "Скачать видео" + }, + "downloadSnapshot": { + "label": "Скачать снимок", + "aria": "Скачать снимок" + }, + "viewObjectLifecycle": { + "label": "Просмотр жизненного цикла объекта", + "aria": "Показать жизненный цикл объекта" + }, + "findSimilar": { + "label": "Найти похожее", + "aria": "Найти похожие отслеживаемые объекты" + }, + "submitToPlus": { + "label": "Отправить в Frigate+", + "aria": "Отправить в Frigate Plus" + }, + "viewInHistory": { + "label": "Посмотреть в Истории", + "aria": "Посмотреть в Истории" + }, + "deleteTrackedObject": { + "label": "Удалить этот отслеживаемый объект" + } + }, + "dialog": { + "confirmDelete": { + "title": "Подтвердить удаление", + "desc": "Удаление этого отслеживаемого объекта приведёт к удалению его снимка, всех сохранённых эмбеддингов и записей жизненного цикла. Сами записи в разделе История НЕ будут удалены.

Вы уверены, что хотите продолжить?" + } + }, + "noTrackedObjects": "Не найдено отслеживаемых объектов", + "fetchingTrackedObjectsFailed": "При получении списка отслеживаемых объектов произошла ошибка: {{errorMessage}}", + "trackedObjectsCount_one": "{{count}} отслеживаемый объект ", + "trackedObjectsCount_few": "{{count}} отслеживаемых объекта ", + "trackedObjectsCount_many": "{{count}} отслеживаемых объектов ", + "searchResult": { + "deleteTrackedObject": { + "toast": { + "success": "Отслеживаемый объект успешно удалён.", + "error": "Не удалось удалить отслеживаемый объект: {{errorMessage}}" + } + } + } +} diff --git a/web/public/locales/ru/views/exports.json b/web/public/locales/ru/views/exports.json index 0967ef424..f48fb3e71 100644 --- a/web/public/locales/ru/views/exports.json +++ b/web/public/locales/ru/views/exports.json @@ -1 +1,17 @@ -{} +{ + "documentTitle": "Экспорт - Frigate", + "search": "Поиск", + "noExports": "Не найдено файлов экспорта", + "deleteExport": "Удалить экспорт", + "deleteExport.desc": "Вы уверены, что хотите удалить {{exportName}}?", + "editExport": { + "title": "Переименовать экспорт", + "desc": "Введите новое имя для этого экспорта.", + "saveExport": "Сохранить экспорт" + }, + "toast": { + "error": { + "renameExportFailed": "Не удалось переименовать экспорт: {{errorMessage}}" + } + } +} diff --git a/web/public/locales/ru/views/faceLibrary.json b/web/public/locales/ru/views/faceLibrary.json index 0967ef424..4dee9b964 100644 --- a/web/public/locales/ru/views/faceLibrary.json +++ b/web/public/locales/ru/views/faceLibrary.json @@ -1 +1,73 @@ -{} +{ + "details": { + "person": "Человек", + "timestamp": "Метка времени", + "face": "Подробности о лице", + "faceDesc": "Подробности о лице и связанном объекте", + "confidence": "Достоверность" + }, + "documentTitle": "Библиотека лиц - Frigate", + "description": { + "placeholder": "Введите название коллекции", + "addFace": "Пошаговое добавление новой коллекции в Библиотеку лиц." + }, + "createFaceLibrary": { + "desc": "Создание новой коллекции", + "nextSteps": "Для создания надежной базы:
  • Используйте вкладку Обучение, чтобы выбрать изображения и обучить систему для каждого обнаруженного человека.
  • Используйте фронтальные изображения для лучшего результата; избегайте изображений с лицами, снятыми под углом.
  • ", + "title": "Создать коллекцию", + "new": "Создать новое лицо" + }, + "selectFace": "Выбор лица", + "uploadFaceImage": { + "desc": "Загрузите изображение для поиска лиц и связывания с {{pageToggle}}", + "title": "Загрузка изображения с лицом" + }, + "selectItem": "Выбор {{item}}", + "train": { + "aria": "Выбор обучения", + "title": "Обучение" + }, + "toast": { + "success": { + "deletedFace_one": "Успешно удалено {{count}} лицо.", + "deletedFace_few": "Успешно удалено {{count}} лица.", + "deletedFace_many": "Успешно удалено {{count}} лиц.", + "deletedName_one": "{{count}} лицо успешно удалено.", + "deletedName_few": "{{count}} лица успешно удалено.", + "deletedName_many": "{{count}} лиц успешно удалено.", + "uploadedImage": "Изображение успешно загружено.", + "trainedFace": "Лицо успешно запомнено.", + "addFaceLibrary": "{{name}} успешно добавлен в Библиотеку Лиц!", + "updatedFaceScore": "Оценка лица успешно обновлена." + }, + "error": { + "deleteFaceFailed": "Не удалось удалить: {{errorMessage}}", + "uploadingImageFailed": "Не удалось загрузить изображение: {{errorMessage}}", + "trainFailed": "Не удалось запомнить: {{errorMessage}}", + "updateFaceScoreFailed": "Не удалось обновить оценку лица: {{errorMessage}}", + "addFaceLibraryFailed": "Не удалось установить имя для лица: {{errorMessage}}", + "deleteNameFailed": "Не удалось удалить имя: {{errorMessage}}" + } + }, + "deleteFaceLibrary": { + "title": "Удалить имя", + "desc": "Вы уверены, что хотите удалить коллекцию «{{name}}»? Это действие безвозвратно удалит все лица в коллекции." + }, + "imageEntry": { + "dropActive": "Перетащите изображение сюда...", + "dropInstructions": "Перетащите изображение сюда или нажмите для выбора", + "maxSize": "Макс. размер: {{size}}Мб", + "validation": { + "selectImage": "Пожалуйста, выберите файл изображения." + } + }, + "readTheDocs": "Прочитать документацию", + "trainFaceAs": "Запомнить Лицо как:", + "button": { + "uploadImage": "Загрузить изображение", + "deleteFaceAttempts": "Удалить попытки распознавания лиц", + "addFace": "Добавить Лицо", + "reprocessFace": "Переобработать Лицо" + }, + "trainFace": "Запомнить Лицо" +} diff --git a/web/public/locales/ru/views/live.json b/web/public/locales/ru/views/live.json index 0967ef424..0ac9f9f9c 100644 --- a/web/public/locales/ru/views/live.json +++ b/web/public/locales/ru/views/live.json @@ -1 +1,158 @@ -{} +{ + "documentTitle": "Прямой эфир - Frigate", + "documentTitle.withCamera": "{{camera}} - Прямой эфир - Frigate", + "lowBandwidthMode": "Экономичный режим", + "twoWayTalk": { + "enable": "Включить двустороннюю связь", + "disable": "Отключить двустороннюю связь" + }, + "cameraAudio": { + "enable": "Включить звук с камеры", + "disable": "Отключить звук с камеры" + }, + "ptz": { + "move": { + "clickMove": { + "label": "Кликните в кадре для центрирования камеры", + "enable": "Включить перемещение по клику", + "disable": "Отключить перемещение по клику" + }, + "left": { + "label": "Переместить PTZ-камеру влево" + }, + "down": { + "label": "Переместить PTZ-камеру вниз" + }, + "up": { + "label": "Переместить PTZ-камеру вверх" + }, + "right": { + "label": "Переместить PTZ-камеру вправо" + } + }, + "zoom": { + "in": { + "label": "Приблизить PTZ-камеру" + }, + "out": { + "label": "Отдалить PTZ-камеру" + } + }, + "frame": { + "center": { + "label": "Кликните в кадре для центрирования PTZ-камеры" + } + }, + "presets": "Предустановки PTZ-камеры" + }, + "camera": { + "enable": "Включить камеру", + "disable": "Отключить камеру" + }, + "muteCameras": { + "enable": "Отключить звук на всех камерах", + "disable": "Включить звук на всех камерах" + }, + "detect": { + "enable": "Включить детекцию", + "disable": "Отключить детекцию" + }, + "recording": { + "enable": "Включить запись", + "disable": "Отключить запись" + }, + "snapshots": { + "enable": "Включить снимки", + "disable": "Отключить снимки" + }, + "audioDetect": { + "enable": "Включить детекцию аудио", + "disable": "Отключить детекцию аудио" + }, + "autotracking": { + "enable": "Включить автотрекинг", + "disable": "Отключить автотрекинг" + }, + "streamStats": { + "enable": "Показать статистику потока", + "disable": "Скрыть статистику потока" + }, + "manualRecording": { + "title": "Запись по требованию", + "tips": "Создать ручное событие на основе настроек хранения записей этой камеры.", + "playInBackground": { + "label": "Воспроизвести в фоне", + "desc": "Включите эту опцию, чтобы продолжать трансляцию при скрытом плеере." + }, + "showStats": { + "label": "Показать статистику", + "desc": "Включите эту опцию, чтобы отображать статистику потока в виде наложения на изображение с камеры." + }, + "debugView": "Режим отладки", + "start": "Запустить запись по запросу", + "started": "Запущена запись по запросу.", + "failedToStart": "Не удалось запустить запись по требованию.", + "recordDisabledTips": "Поскольку запись отключена или ограничена в конфигурации для этой камеры, будет сохранён только снимок.", + "end": "Завершить запись по требованию", + "ended": "Запись по требованию остановлена.", + "failedToEnd": "Не удалось остановить запись по требованию." + }, + "streamingSettings": "Настройки потока", + "suspend": { + "forTime": "Приостановить на: " + }, + "stream": { + "audio": { + "tips": { + "documentation": "Прочитать документацию ", + "title": "Аудио должно выводиться с вашей камеры и быть настроено в go2rtc для этого потока." + }, + "available": "Для этого потока доступен звук", + "unavailable": "Аудио недоступно для этого потока" + }, + "title": "Поток", + "twoWayTalk": { + "tips": "Ваше устройство должно поддерживать эту функцию, а WebRTC должен быть настроен для двусторонней связи.", + "tips.documentation": "Прочитать документацию ", + "available": "Двусторонняя связь доступна для этого потока", + "unavailable": "Двусторонняя связь недоступна для этого потока" + }, + "lowBandwidth": { + "tips": "Режим просмотра в реальном времени переведён в экономичный режим из-за буферизации или ошибок потока.", + "resetStream": "Сброс потока" + }, + "playInBackground": { + "label": "Воспроизвести в фоне", + "tips": "Включите эту опцию, чтобы продолжать трансляцию при скрытом плеере." + } + }, + "cameraSettings": { + "title": "Настройки {{camera}}", + "objectDetection": "Детекция объектов", + "recording": "Запись", + "audioDetection": "Детекция аудио", + "snapshots": "Снимки", + "autotracking": "Автотрекинг", + "cameraEnabled": "Камера активирована" + }, + "history": { + "label": "Показать архивные записи" + }, + "effectiveRetainMode": { + "modes": { + "all": "Все", + "motion": "Движение", + "active_objects": "Активные объекты" + }, + "notAllTips": "Ваша конфигурация хранения записей {{source}} установлена в mode: {{effectiveRetainMode}}, поэтому эта запись по запросу будет сохранять только сегменты с {{effectiveRetainModeName}}." + }, + "editLayout": { + "label": "Редактировать макет", + "group": { + "label": "Редактирование группы камер" + }, + "exitEdit": "Выход из редактирования" + }, + "audio": "Аудио", + "notifications": "Уведомления" +} diff --git a/web/public/locales/ru/views/recording.json b/web/public/locales/ru/views/recording.json index 0967ef424..3a7f427c3 100644 --- a/web/public/locales/ru/views/recording.json +++ b/web/public/locales/ru/views/recording.json @@ -1 +1,12 @@ -{} +{ + "filter": "Фильтр", + "export": "Экспорт", + "calendar": "Календарь", + "filters": "Фильтры", + "toast": { + "error": { + "endTimeMustAfterStartTime": "Конечное время должно быть позже начального", + "noValidTimeSelected": "Выыбран недопустимый временной диапазон" + } + } +} diff --git a/web/public/locales/ru/views/search.json b/web/public/locales/ru/views/search.json index 0967ef424..ae33aeb18 100644 --- a/web/public/locales/ru/views/search.json +++ b/web/public/locales/ru/views/search.json @@ -1 +1,67 @@ -{} +{ + "savedSearches": "Сохраненные поиски", + "button": { + "clear": "Очистить поиск", + "save": "Сохранить поиск", + "delete": "Удалить сохранённый поиск", + "filterActive": "Активные фильтры", + "filterInformation": "Информация о фильтре" + }, + "search": "Поиск", + "searchFor": "Поиск {{inputValue}}", + "trackedObjectId": "ID отслеживаемого объекта", + "filter": { + "label": { + "cameras": "Камеры", + "zones": "Зоны", + "sub_labels": "Вторичные метки", + "search_type": "Тип поиска", + "time_range": "Временной диапазон", + "before": "До", + "after": "После", + "min_score": "Мин. оценка", + "max_score": "Макс. оценка", + "min_speed": "Мин. скорость", + "recognized_license_plate": "Распознанный номерной знак", + "max_speed": "Макс. скорость", + "has_clip": "Есть клип", + "has_snapshot": "Есть снимок", + "labels": "Метки" + }, + "searchType": { + "thumbnail": "Миниатюра", + "description": "Описание" + }, + "toast": { + "error": { + "beforeDateBeLaterAfter": "Дата 'до' должна быть позже, чем дата 'после'.", + "afterDatebeEarlierBefore": "Дата 'после' должна быть раньше, чем дата 'до'.", + "minScoreMustBeLessOrEqualMaxScore": "Значение 'min_score' должно быть меньше или равно значению 'max_score'.", + "maxScoreMustBeGreaterOrEqualMinScore": "Значение 'max_score' должно быть больше или равно значению 'min_score'.", + "minSpeedMustBeLessOrEqualMaxSpeed": "Значение 'min_speed' должно быть меньше или равно значению 'max_speed'.", + "maxSpeedMustBeGreaterOrEqualMinSpeed": "Значение 'max_speed' должно быть больше или равно значению 'min_speed'." + } + }, + "tips": { + "title": "Как использовать текстовые фильтры", + "desc": { + "text": "Фильтры помогают уточнить результаты поиска. Вот как их использовать в поле ввода:", + "step": "", + "example": "Пример: cameras:front_door label:person before:01012024 time_range:3:00PM-4:00PM " + } + }, + "header": { + "currentFilterType": "Значения фильтров", + "noFilters": "Фильтры", + "activeFilters": "Активные фильтры" + } + }, + "similaritySearch": { + "title": "Поиск похожего", + "active": "Активен поиск похожего", + "clear": "Очистить поиск похожего" + }, + "placeholder": { + "search": "Поиск..." + } +} diff --git a/web/public/locales/ru/views/settings.json b/web/public/locales/ru/views/settings.json index 0967ef424..afb783f9f 100644 --- a/web/public/locales/ru/views/settings.json +++ b/web/public/locales/ru/views/settings.json @@ -1 +1,585 @@ -{} +{ + "documentTitle": { + "default": "Настройки - Frigate", + "camera": "Настройки камеры - Frigate", + "masksAndZones": "Маски и Зоны - Frigate", + "motionTuner": "Детекции движения - Frigate", + "general": "Общие настройки - Frigate", + "frigatePlus": "Настройки Frigate+ - Frigate", + "authentication": "Настройки аутентификации - Frigate", + "classification": "Настройки распознавания - Frigate", + "object": "Настройка объектов - Frigate" + }, + "menu": { + "cameras": "Настройки камеры", + "masksAndZones": "Маски / Зоны", + "motionTuner": "Детекции движения", + "debug": "Отладка", + "users": "Пользователи", + "notifications": "Уведомления", + "frigateplus": "Frigate+", + "ui": "Интерфейс", + "classification": "Распознование" + }, + "dialog": { + "unsavedChanges": { + "title": "У вас есть несохраненные изменения.", + "desc": "Хотите сохранить изменения перед продолжением?" + } + }, + "cameraSetting": { + "camera": "Камера", + "noCamera": "Нет камеры" + }, + "general": { + "title": "Общие настройки", + "liveDashboard": { + "title": "Панель мониторинга", + "automaticLiveView": { + "desc": "Автоматически переключаться на просмотр камеры в реальном времени при обнаружении активности. Если отключить эту опцию, статичные изображения камер на панели мониторинга будут обновляться только раз в минуту.", + "label": "Автоматический просмотр в реальном времени" + }, + "playAlertVideos": { + "label": "Воспроизводить видео с тревогами", + "desc": "По умолчанию последние тревоги на панели мониторинга воспроизводятся как короткие зацикленные видео. Отключите эту опцию, чтобы показывать только статичное изображение последних оповещений на этом устройстве/браузере." + } + }, + "calendar": { + "title": "Календарь", + "firstWeekday": { + "sunday": "Воскресенье", + "monday": "Понедельник", + "label": "Первый день недели", + "desc": "День, с которого начинаются недели в календаре обзоров." + } + }, + "recordingsViewer": { + "title": "Просмотр записей", + "defaultPlaybackRate": { + "label": "Скорость воспроизведения по умолчанию", + "desc": "Скорость воспроизведения записей по умолчанию." + } + }, + "storedLayouts": { + "clearAll": "Сбросить все макеты", + "desc": "Расположение камер в группе можно настраивать перетаскиванием и изменением размера. Позиции сохраняются в локальном хранилище браузера.", + "title": "Сохранённые макеты" + }, + "cameraGroupStreaming": { + "title": "Настройки трансляции группы камер", + "desc": "Настройки трансляции для каждой группы камер хранятся локально в вашем браузере.", + "clearAll": "Очистить все настройки трансляции" + }, + "toast": { + "success": { + "clearStoredLayout": "Сохранённый макет для {{cameraName}} удалён", + "clearStreamingSettings": "Настройки потоков для всех групп камер сброшены." + }, + "error": { + "clearStoredLayoutFailed": "Не удалось удалить макет: {{errorMessage}}", + "clearStreamingSettingsFailed": "Не удалось очистить настройки потока: {{errorMessage}}" + } + } + }, + "classification": { + "semanticSearch": { + "title": "Семантический поиск", + "readTheDocumentation": "Открыть документацию", + "reindexNow": { + "label": "Переиндексировать сейчас", + "confirmButton": "Переиндексировать", + "alreadyInProgress": "Переиндексация уже выполняется.", + "desc": "Переиндексация заново сгенерирует векторные представления для всех отслеживаемых объектов. Этот процесс выполняется в фоновом режиме и может максимально загрузить ваш процессор, а также занять значительное время в зависимости от количества отслеживаемых объектов.", + "confirmTitle": "Подтвердить переиндексацию", + "success": "Реиндексация запущена успешно.", + "error": "Не удалось начать реиндексацию: {{errorMessage}}", + "confirmDesc": "Вы уверены, что хотите переиндексировать все векторные представления отслеживаемых объектов? Этот процесс будет выполняться в фоновом режиме, но может максимально загрузить ваш процессор и занять довольно много времени. Вы можете следить за ходом выполнения на странице «Обзор»." + }, + "desc": "Семантический поиск во Frigate позволяет находить отслеживаемые объекты в записях с помощью самого изображения, пользовательского текстового описания или автоматически сгенерированного описания.", + "modelSize": { + "label": "Размер модели", + "desc": "Размер модели, используемой для эмбеддингов семантического поиска.", + "small": { + "title": "маленький", + "desc": "Использование маленький задействует квантованную версию модели, которая потребляет меньше оперативной памяти и работает быстрее на CPU с очень незначительной разницей в качестве эмбеддингов." + }, + "large": { + "title": "большой", + "desc": "Использование большой задействует полную модель Jina и автоматически запускается на GPU, если это возможно." + } + } + }, + "faceRecognition": { + "desc": "Функция распознавания лиц позволяет присваивать людям имена, и когда их лицо будет распознано, Frigate присвоит имя человека в качестве дополнительной метки. Эта информация содержится в пользовательском интерфейсе, фильтрах, а также в уведомлениях.", + "title": "Распознавание лиц", + "readTheDocumentation": "Открыть документацию", + "modelSize": { + "label": "Размер модели", + "desc": "Размер модели, используемой для распознавания лиц.", + "small": { + "title": "малый", + "desc": "Использование маленький задействует модель FaceNet для эмбеддингов лиц, которая эффективно работает на большинстве CPU." + }, + "large": { + "title": "большой", + "desc": "Использование большой задействует модель ArcFace для эмбеддингов лиц и автоматически запускается на GPU, если это возможно." + } + } + }, + "licensePlateRecognition": { + "title": "Распознавание номерных знаков", + "readTheDocumentation": "Открыть документацию", + "desc": "Frigate может распознавать номерные знаки на транспортных средствах и автоматически добавлять обнаруженные символы в поле recognized_license_plate или известное имя в качестве sub_label для объектов типа car. Типичный пример использования — чтение номеров машин, заезжающих на подъездную дорожку или проезжающих по улице." + }, + "toast": { + "success": "Настройки классификации сохранены. Перезапустите Frigate, чтобы применить внесенные изменения.", + "error": "Не удалось сохранить изменения конфигурации: {{errorMessage}}" + }, + "title": "Настройки классификации", + "birdClassification": { + "title": "Классификация птиц", + "desc": "Классификация птиц определяет известные виды с помощью квантованной модели TensorFlow. При распознавании птицы её общепринятое название добавляется как sub_label. Эти данные отображаются в интерфейсе, фильтрах и уведомлениях." + } + }, + "users": { + "dialog": { + "passwordSetting": { + "updatePassword": "Обновить пароль для {{username}}", + "setPassword": "Установить пароль", + "desc": "Создайте надежный пароль для защиты аккаунта." + }, + "deleteUser": { + "warn": "Вы уверены, что хотите удалить пользователя {{username}}?", + "title": "Удалить пользователя", + "desc": "Это действие необратимо. Учётная запись пользователя и все связанные с ней данные будут удалены без возможности восстановления." + }, + "changeRole": { + "title": "Изменить роль пользователя", + "desc": "Обновить права доступа для {{username}}", + "roleInfo": "

    Выберите подходящую роль для этого пользователя:

    " + }, + "form": { + "user": { + "placeholder": "Введите имя пользователя", + "desc": "Допустимо использовать только буквы, цифры, точки и подчёркивания.", + "title": "Имя пользователя" + }, + "password": { + "title": "Пароль", + "placeholder": "Введите пароль", + "confirm": { + "title": "Подтвердите пароль", + "placeholder": "Подтвердите пароль" + }, + "strength": { + "title": "Сложность пароля: ", + "weak": "Слабый", + "medium": "Средний", + "strong": "Сложный", + "veryStrong": "Очень сложный" + }, + "match": "Пароли совпадают", + "notMatch": "Пароли не совпадают" + }, + "newPassword": { + "title": "Новый пароль", + "confirm": { + "placeholder": "Повторно введите новый пароль" + }, + "placeholder": "Введите новый пароль" + }, + "usernameIsRequired": "Необходимо ввести имя пользователя" + }, + "createUser": { + "title": "Создать нового пользователя", + "usernameOnlyInclude": "Имя пользователя может включать только буквы, цифры, . или _", + "desc": "Добавить новую учетную запись пользователя и определить роль для доступа к разделам интерфейса Frigate." + } + }, + "title": "Пользователи", + "toast": { + "success": { + "roleUpdated": "Обновлена роль для {{user}}", + "createUser": "Пользователь {{user}} успешно создан", + "deleteUser": "Пользователь {{user}} успешно удалён", + "updatePassword": "Пароль успешно обновлён." + }, + "error": { + "setPasswordFailed": "Не удалось сохранить пароль: {{errorMessage}}", + "createUserFailed": "Не удалось создать пользователя: {{errorMessage}}", + "deleteUserFailed": "Не удалось удалить пользователя: {{errorMessage}}", + "roleUpdateFailed": "Не удалось обновить роль: {{errorMessage}}" + } + }, + "table": { + "username": "Имя пользователя", + "actions": "Действия", + "password": "Пароль", + "noUsers": "Пользователей не найдено.", + "changeRole": "Изменить роль пользователя", + "role": "Роль", + "deleteUser": "Удалить пользователя" + }, + "management": { + "title": "Управление пользователями", + "desc": "Управление учетными записями пользователей этого экземпляра Frigate." + }, + "updatePassword": "Обновить пароль", + "addUser": "Добавить пользователя" + }, + "notification": { + "title": "Уведомления", + "notificationSettings": { + "documentation": "Прочитать документацию", + "title": "Настройки уведомлений", + "desc": "Frigate может отправлять push-уведомления на ваше устройство, когда приложение открыто в браузере или установлено как PWA." + }, + "notificationUnavailable": { + "documentation": "Прочитать документацию", + "title": "Уведомления недоступны", + "desc": "Веб-уведомления требуют защищённого контекста (https://...). Это ограничение браузера. Получите безопасный доступ к Frigate, чтобы использовать уведомления." + }, + "email": { + "title": "Email", + "desc": "Для уведомлений о проблемах с push-сервисом требуется указать действующий адрес электронной почты.", + "placeholder": "например, example@email.com" + }, + "globalSettings": { + "title": "Глобальные настройки", + "desc": "Временно приостановить уведомления для определённых камер на всех зарегистрированных устройствах." + }, + "cameras": { + "title": "Камеры", + "noCameras": "Нет доступных камер", + "desc": "Выберите камеры для активации уведомлений." + }, + "deviceSpecific": "Настройки для конкретного устройства", + "registerDevice": "Зарегистрировать это устройство", + "unregisterDevice": "Отменить регистрацию этого устройства", + "suspended": "Уведомления приостановлены {{time}}", + "sendTestNotification": "Отправить тестовое уведомление", + "active": "Уведомления активны", + "suspendTime": { + "30minutes": "Приостановить на 30 минут", + "1hour": "Приостановить на 1 час", + "12hours": "Приостановить на 12 часов", + "24hours": "Приостановить на 24 часа", + "untilRestart": "Приостановить до перезапуска", + "5minutes": "Приостановить на 5 минут", + "10minutes": "Приостановить на 10 минут" + }, + "toast": { + "success": { + "settingSaved": "Настройки уведомлений сохранены.", + "registered": "Регистрация для уведомлений успешно завершена. Перезапуск Frigate необходим перед отправкой любых уведомлений (включая тестовое уведомление)." + }, + "error": { + "registerFailed": "Не удалось сохранить регистрацию уведомлений." + } + }, + "cancelSuspension": "Отменить приостановку" + }, + "camera": { + "review": { + "alerts": "Тревоги ", + "desc": "Включить или отключить тревоги и обнаружения для этой камеры. В отключенном состоянии новые события не будут записываться.", + "detections": "Обнаружения ", + "title": "Просмотр" + }, + "reviewClassification": { + "objectAlertsTips": "Все объекты {{alertsLabels}} на камере {{cameraName}} будут отображаться как Тревоги.", + "desc": "Frigate разделяет записи для проверки на два типа как «Тревоги» и «Обнаружения». По умолчанию все объекты person и car считаются Тревогами. Вы можете уточнить эту классификацию, настроив для них требуемые зоны.", + "selectAlertsZones": "Выберите зоны для тревог", + "zoneObjectDetectionsTips": { + "notSelectDetections": "Все объекты {{detectionsLabels}}, обнаруженные в {{zone}} на камере {{cameraName}}, которые не отнесены к Тревогам, будут отображаться как Обнаружения, независимо от того, в какой зоне они находятся.", + "text": "Все объекты {{detectionsLabels}}, не отнесённые к категории в {{zone}} на камере {{cameraName}}, будут отображаться как обнаружения.", + "regardlessOfZoneObjectDetectionsTips": "Все объекты {{detectionsLabels}}, не отнесённые к категории на камере {{cameraName}}, будут отображаться как обнаружения, независимо от того, в какой зоне они находятся." + }, + "zoneObjectAlertsTips": "Все объекты {{alertsLabels}}, обнаруженные в {{zone}} на камере {{cameraName}}, будут отображаться как Тревоги.", + "selectDetectionsZones": "Выберите зоны для обнаружения", + "noDefinedZones": "Для этой камеры не определено ни одной зоны.", + "objectDetectionsTips": "Все объекты {{detectionsLabels}}, не отнесённые к категории на камере {{cameraName}}, будут отображаться как обнаружения, независимо от того, в какой зоне они находятся.", + "title": "Классификация просмотра", + "readTheDocumentation": "Прочитать документацию", + "limitDetections": "Ограничить детекции отдельными зонами", + "toast": { + "success": "Конфигурация классификации просмотра была сохранена. Перезапустите Frigate для применения изменений." + } + }, + "title": "Настройки камеры", + "streams": { + "title": "Потоки", + "desc": "Отключение камеры полностью останавливает обработку Frigate потоков с этой камеры. Обнаружение, запись и отладка будут недоступны.
    Примечание: Это не отключает рестриминг go2rtc." + } + }, + "masksAndZones": { + "zones": { + "objects": { + "title": "Объекты", + "desc": "Список объектов, применяемых к этой зоне." + }, + "speedEstimation": { + "desc": "Включить оценку скорости объектов в этой зоне. Зона должна состоять ровно из 4 точек.", + "title": "Расчёт скорости" + }, + "label": "Зоны", + "documentTitle": "Редактирование зоны - Frigate", + "desc": { + "title": "Зоны позволяют определить конкретную область кадра, чтобы можно было определить, находится ли объект в заданной области.", + "documentation": "Документация" + }, + "add": "Добавить зону", + "edit": "Редактировать зону", + "point_one": "{{count}} точка", + "point_few": "{{count}} точки", + "point_many": "{{count}} точек", + "clickDrawPolygon": "Кликните, чтобы нарисовать полигон на изображении.", + "name": { + "title": "Название", + "inputPlaceHolder": "Введите название...", + "tips": "Название должно содержать не менее 2 символов и не совпадать с названием камеры или другой зоны." + }, + "inertia": { + "title": "Инерция", + "desc": "Указывает, сколько кадров объект должен находиться в зоне, прежде чем он будет считаться находящимся в ней. Значение по умолчанию: 3" + }, + "loiteringTime": { + "title": "Время присутствия", + "desc": "Устанавливает минимальное время в секундах, которое объект должен находиться в зоне для её активации. Значение по умолчанию: 0" + }, + "allObjects": "Все объекты", + "speedThreshold": { + "title": "Предел скорости ({{unit}})", + "toast": { + "error": { + "loiteringTimeError": "Зоны с установленным временем присутствия более 0 не должны использоваться для вычисления скорости.", + "pointLengthError": "Расчёт скорости отключён для этой зоны. Зоны с расчётом скорости должны содержать ровно 4 точки." + } + }, + "desc": "Задаёт минимальную скорость объектов для учёта в этой зоне." + }, + "toast": { + "success": "Зона ({{zoneName}}) сохранена. Перезапустите Frigate для применения изменений." + } + }, + "motionMasks": { + "desc": { + "documentation": "Документация", + "title": "Маски движения используются, чтобы предотвратить срабатывание обнаружений на нежелательные типы движения. Чрезмерная маскировка усложняет отслеживание объектов." + }, + "add": "Новая маска движения", + "edit": "Редактировать маску движения", + "context": { + "documentation": "Прочитать документацию", + "title": "Маски движения используются, чтобы предотвратить срабатывание обнаружений на нежелательные типы движения (например, ветки деревьев, метки времени на камере). При этом маски движения нужно использовать очень умеренно: чрезмерное применение масок затруднит отслеживание объектов." + }, + "clickDrawPolygon": "Нажмите, чтобы нарисовать полигон на изображении.", + "polygonAreaTooLarge": { + "documentation": "Прочитать документацию", + "title": "Маска движения покрывает {{polygonArea}}% кадра. Большие маски движения не рекомендуются.", + "tips": "Маски движения не предотвращают обнаружение объектов. Вместо этого следует использовать обязательную зону." + }, + "point_one": "{{count}} точка", + "point_few": "{{count}} точки", + "point_many": "{{count}} точек", + "label": "Маска движения", + "documentTitle": "Редактирование маски движения - Frigate", + "toast": { + "success": { + "title": "{{polygonName}} сохранена. Перезапустите Frigate для применения изменений.", + "noName": "Маска движения сохранена. Перезапустите Frigate для применения изменений." + } + } + }, + "filter": { + "all": "Все маски и зоны" + }, + "form": { + "zoneName": { + "error": { + "mustBeAtLeastTwoCharacters": "Имя зоны должно содержать не менее 2 символов.", + "mustNotBeSameWithCamera": "Имя зоны не должно совпадать с именем камеры.", + "hasIllegalCharacter": "Имя зоны содержит недопустимые символы.", + "alreadyExists": "Зона с таким именем уже существует для этой камеры.", + "mustNotContainPeriod": "Имя зоны не должно содержать точки." + } + }, + "distance": { + "error": { + "text": "Расстояние должно быть больше или равно 0.1.", + "mustBeFilled": "Все поля расстояния должны быть заполнены для расчёта скорости." + } + }, + "inertia": { + "error": { + "mustBeAboveZero": "Инерция должна быть больше 0." + } + }, + "loiteringTime": { + "error": { + "mustBeGreaterOrEqualZero": "Время присутствия должно быть больше или равно 0." + } + }, + "polygonDrawing": { + "removeLastPoint": "Удалить последнюю точку", + "error": { + "mustBeFinished": "Рисование полигона должно быть завершено перед сохранением." + }, + "delete": { + "success": "{{name}} удалён.", + "title": "Подтвердить удаление", + "desc": "Вы уверены, что хотите удалить {{type}} {{name}}?" + }, + "snapPoints": { + "false": "Не привязывать к точкам", + "true": "Привязать точки" + }, + "reset": { + "label": "Удалить все точки" + } + } + }, + "toast": { + "error": { + "copyCoordinatesFailed": "Не удалось скопировать координаты в буфер обмена." + }, + "success": { + "copyCoordinates": "Координаты {{polyName}} скопированы в буфер обмена." + } + }, + "objectMasks": { + "label": "Маски объектов", + "desc": { + "documentation": "Документация", + "title": "Маски фильтра объектов используются для исключения ложных срабатываний определённого типа объектов в зависимости от местоположения." + }, + "documentTitle": "Редактирование маски объектов - Frigate", + "add": "Добавить маску объектов", + "clickDrawPolygon": "Кликните, чтобы нарисовать полигон на изображении.", + "edit": "Редактирование маски объектов", + "context": "Маски фильтра объектов используются для исключения ложных срабатываний определённого типа объектов в зависимости от местоположения.", + "point_one": "{{count}} точка", + "point_few": "{{count}} точки", + "point_many": "{{count}} точек", + "objects": { + "allObjectTypes": "Все типы объектов", + "title": "Объекты", + "desc": "Тип объекта, к которому применяется эта маска." + }, + "toast": { + "success": { + "title": "{{polygonName}} сохранена. Перезапустите Frigate для применения изменений.", + "noName": "Маска объектов сохранена. Перезапустите Frigate для применения изменений." + } + } + } + }, + "motionDetectionTuner": { + "desc": { + "documentation": "Прочитать руководство по настройке детекции движения", + "title": "Frigate использует детекцию движения как первичную проверку, чтобы определить, есть ли в кадре что-то, что стоит анализировать с помощью детекции объектов." + }, + "title": "Настройка детекции движения", + "contourArea": { + "title": "Площадь контура", + "desc": "Параметр площади контура определяет, какие группы изменённых пикселей считаются движением. По умолчанию: 10" + }, + "improveContrast": { + "title": "Улучшить контрастность", + "desc": "Улучшение контрастности в тёмных сценах. Default: ON" + }, + "Threshold": { + "title": "Порог", + "desc": "Пороговое значение определяет, насколько должна измениться яркость пикселя, чтобы считаться движением. По умолчанию: 30" + }, + "toast": { + "success": "Настройки движения сохранены." + } + }, + "debug": { + "objectShapeFilterDrawing": { + "document": "Прочитать документацию ", + "title": "Отрисовка фильтра формы объекта", + "desc": "Отображает прямоугольник на изображении, чтобы видеть данные о площади и соотношении сторон", + "tips": "Включите эту опцию, чтобы нарисовать прямоугольник на изображении с камеры для отображения его площади и соотношения сторон. Эти значения можно затем использовать для настройки параметров фильтра формы объектов в вашем конфигурационном файле.", + "area": "Площадь", + "ratio": "Соотношение", + "score": "Оценка" + }, + "detectorDesc": "Frigate использует ваши детекторы ({{detectors}}) для обнаружения объектов в видеопотоке с камер.", + "desc": "Режим отладки отображает отслеживаемые объекты и их статистику в реальном времени. Список объектов показывает отложенную по времени сводку обнаруженных объектов.", + "debugging": "Отладка", + "title": "Отладка", + "boundingBoxes": { + "colors": { + "label": "Цвета ограничивающих рамок объектов", + "info": "
  • При запуске каждой метке объекта назначается уникальный цвет
  • Тонкая синяя линия: объект в данный момент не обнаружен
  • Тонкая серая линия: объект помечен как статичный
  • Толстая линия: объект под автотрекингом (если включено)
  • " + }, + "title": "Ограничивающие рамки", + "desc": "Показывать ограничивающие рамки вокруг отслеживаемых объектов" + }, + "objectList": "Список объектов", + "noObjects": "Нет объектов", + "timestamp": { + "title": "Метка времени", + "desc": "Наложить временную метку на изображение" + }, + "zones": { + "title": "Зоны", + "desc": "Показать контур всех определённых зон" + }, + "mask": { + "title": "Маски движения", + "desc": "Показать полигоны маски движения" + }, + "motion": { + "title": "Области движения", + "desc": "Показать рамки вокруг областей, в которых определяется движение", + "tips": "

    Области движения


    Красные рамки будут наложены на участки кадра, где в данный момент обнаружено движение

    " + }, + "regions": { + "title": "Регионы", + "desc": "Показать рамку области интереса, отправленной детектору объектов", + "tips": "

    Рамки областей интереса


    Ярко-зелёные рамки будут наложены на области интереса в кадре, которые отправляются детектору объектов.

    " + } + }, + "frigatePlus": { + "snapshotConfig": { + "documentation": "Прочитать документацию", + "title": "Настройки снимков", + "cleanCopyWarning": "У некоторых камер включены снимки (snapshots), но отключена опция чистой копии (clean copy). Чтобы иметь возможность отправлять изображения с этих камер в Frigate+, необходимо включить параметр clean_copy в конфигурации снимков.", + "table": { + "cleanCopySnapshots": "Снимки clean_copy", + "camera": "Камера", + "snapshots": "Снимки" + }, + "desc": "Отправка в Frigate+ требует, чтобы в вашей конфигурации были включены как снимки (snapshots), так и снимки clean_copy." + }, + "title": "Настройки Frigate+", + "apiKey": { + "title": "Ключ API Frigate+", + "validated": "Ключ API Frigate+ найден и проверен", + "notValidated": "Ключ API Frigate+ не найден или не проверен", + "desc": "Ключ API Frigate+ включает интеграцию с сервисом Frigate+.", + "plusLink": "Подробнее про Frigate+" + }, + "modelInfo": { + "title": "Информация о модели", + "modelType": "Тип модели", + "trainDate": "Дата обучения", + "error": "Не удалось загрузить информацию о модели", + "availableModels": "Доступные модели", + "loadingAvailableModels": "Загрузка доступных моделей...", + "modelSelect": "Здесь можно выбрать ваши доступные модели на Frigate+. Обратите внимание, что могут быть выбраны только модели, совместимые с текущей конфигурацией детектора.", + "baseModel": "Базовая модель", + "supportedDetectors": "Поддерживаемые детекторы", + "dimensions": "Размеры", + "loading": "Загрузка информации о модели...", + "cameras": "Камеры" + }, + "toast": { + "success": "Настройки Frigate+ были сохранены. Перезапустите Frigate, чтобы применить изменения.", + "error": "Не удалось сохранить изменения конфигурации: {{errorMessage}}" + } + } +} diff --git a/web/public/locales/ru/views/system.json b/web/public/locales/ru/views/system.json index 0967ef424..b8dbf381c 100644 --- a/web/public/locales/ru/views/system.json +++ b/web/public/locales/ru/views/system.json @@ -1 +1,157 @@ -{} +{ + "documentTitle": { + "cameras": "Статистика камер - Frigate", + "storage": "Статистика хранилища - Frigate", + "general": "Общая статистика - Frigate", + "enrichments": "Статистика улучшений - Frigate", + "logs": { + "frigate": "Логи Frigate - Frigate", + "go2rtc": "Логи Go2RTC - Frigate", + "nginx": "Логи Nginx - Frigate" + } + }, + "title": "Система", + "metrics": "Показатели системы", + "logs": { + "download": { + "label": "Загрузить логи" + }, + "copy": { + "label": "Копировать в буфер", + "success": "Логи копированы в буфер", + "error": "Не удалось скопировать логи в буфер обмена" + }, + "type": { + "label": "Тип", + "timestamp": "Метка времени", + "tag": "Тег", + "message": "Сообщение" + }, + "tips": "Логи передаются с сервера в потоковом режиме", + "toast": { + "error": { + "fetchingLogsFailed": "Ошибка получения логов: {{errorMessage}}", + "whileStreamingLogs": "Ошибка при потоковой передаче логов: {{errorMessage}}" + } + } + }, + "general": { + "title": "Общее", + "detector": { + "title": "Детекторы", + "inferenceSpeed": "Скорость вывода детектора", + "cpuUsage": "Использование CPU детектором", + "memoryUsage": "Использование памяти детектором" + }, + "hardwareInfo": { + "title": "Информация об оборудовании", + "gpuUsage": "Использование GPU", + "gpuMemory": "Память GPU", + "gpuEncoder": "GPU-кодировщик", + "gpuDecoder": "GPU-декодер", + "gpuInfo": { + "vainfoOutput": { + "title": "Вывод Vainfo", + "returnCode": "Код возврата: {{code}}", + "processOutput": "Вывод процесса:", + "processError": "Ошибка процесса:" + }, + "nvidiaSMIOutput": { + "title": "Вывод Nvidia SMI", + "name": "Название: {{name}}", + "driver": "Драйвер: {{driver}}", + "cudaComputerCapability": "CUDA Compute Capability: {{cuda_compute}}", + "vbios": "Информация VBios: {{vbios}}" + }, + "closeInfo": { + "label": "Закрыть информацию GPU" + }, + "copyInfo": { + "label": "Скопировать информацию GPU" + }, + "toast": { + "success": "Информация GPU скопирована в буфер обмена" + } + } + }, + "otherProcesses": { + "title": "Другие процессы", + "processCpuUsage": "Использование CPU процессом", + "processMemoryUsage": "Использование памяти процессом" + } + }, + "storage": { + "title": "Хранилище", + "overview": "Обзор", + "recordings": { + "title": "Записи", + "tips": "Это значение показывает общий объём хранилища, занятый записями в базе данных Frigate. Frigate не отслеживает использование хранилища для всех файлов на диске.", + "earliestRecording": "Самая ранняя доступная запись:" + }, + "cameraStorage": { + "title": "Хранилище камеры", + "camera": "Камера", + "unusedStorageInformation": "Информация о неиспользованном хранилище", + "storageUsed": "Хранилище", + "percentageOfTotalUsed": "Процент от общего объёма", + "bandwidth": "Пропускная способность", + "unused": { + "title": "Не используется", + "tips": "Это значение может неточно отражать свободное место, доступное Frigate, если на вашем диске есть другие файлы помимо записей Frigate. Frigate не отслеживает использование хранилища за пределами своих записей." + } + } + }, + "cameras": { + "title": "Камеры", + "overview": "Обзор", + "info": { + "cameraProbeInfo": "Информация о тестировании камеры {{camera}}", + "streamDataFromFFPROBE": "Данные о потоке получены от ffprobe.", + "fetching": "Получение данных камеры", + "stream": "Поток {{idx}}", + "video": "Видео:", + "codec": "Кодек:", + "resolution": "Разрешение:", + "fps": "FPS:", + "unknown": "Неизвестно", + "audio": "Аудио:", + "error": "Ошибка: {{error}}", + "tips": { + "title": "Информация о тестировании камеры" + } + }, + "framesAndDetections": "Кадры/детекции", + "label": { + "ffmpeg": "ffmpeg", + "camera": "камера", + "capture": "захват", + "skipped": "пропущено", + "detect": "детекция" + }, + "toast": { + "success": { + "copyToClipboard": "Данные тестирования скопированы в буфер обмена." + }, + "error": { + "unableToProbeCamera": "Не удалось протестировать камеру: {{errorMessage}}" + } + } + }, + "lastRefreshed": "Последнее обновление: ", + "stats": { + "ffmpegHighCpuUsage": "Камера {{camera}} использует чрезмерно много ресурсов CPU в FFMPEG ({{ffmpegAvg}}%)", + "detectHighCpuUsage": "Камера {{camera}} использует слишком много ресурсов CPU для детекции ({{detectAvg}}%)", + "healthy": "Система в порядке", + "reindexingEmbeddings": "Переиндексация эмбеддингов ({{processed}}% завершено)" + }, + "enrichments": { + "title": "Обогащения данных", + "infPerSecond": "Выводов в секунду", + "embeddings": { + "image_embedding_speed": "Скорость генерации эмбеддингов изображений", + "plate_recognition_speed": "Скорость распознавания номеров", + "text_embedding_speed": "Скорость генерации текстовых эмбеддингов", + "face_embedding_speed": "Скорость генерации эмбеддингов лиц" + } + } +}