From 6130c66be6e12c68314657ea772fcf6084f9b08b Mon Sep 17 00:00:00 2001 From: psychosomat Date: Wed, 6 May 2026 12:55:01 +0300 Subject: [PATCH 1/2] Add Russian localization --- .../tutorialHelpTranslations.test.ts | 2 + src/i18n/config.ts | 1 + src/i18n/locales/ru/common.json | 50 +++++ src/i18n/locales/ru/dialogs.json | 70 ++++++ src/i18n/locales/ru/editor.json | 45 ++++ src/i18n/locales/ru/launch.json | 43 ++++ src/i18n/locales/ru/settings.json | 202 ++++++++++++++++++ src/i18n/locales/ru/shortcuts.json | 37 ++++ src/i18n/locales/ru/timeline.json | 55 +++++ 9 files changed, 505 insertions(+) create mode 100644 src/i18n/locales/ru/common.json create mode 100644 src/i18n/locales/ru/dialogs.json create mode 100644 src/i18n/locales/ru/editor.json create mode 100644 src/i18n/locales/ru/launch.json create mode 100644 src/i18n/locales/ru/settings.json create mode 100644 src/i18n/locales/ru/shortcuts.json create mode 100644 src/i18n/locales/ru/timeline.json diff --git a/src/i18n/__tests__/tutorialHelpTranslations.test.ts b/src/i18n/__tests__/tutorialHelpTranslations.test.ts index fcfa9d3..54979d5 100644 --- a/src/i18n/__tests__/tutorialHelpTranslations.test.ts +++ b/src/i18n/__tests__/tutorialHelpTranslations.test.ts @@ -6,6 +6,7 @@ import frDialogs from "@/i18n/locales/fr/dialogs.json"; import koKRDialogs from "@/i18n/locales/ko-KR/dialogs.json"; import trDialogs from "@/i18n/locales/tr/dialogs.json"; import zhCNDialogs from "@/i18n/locales/zh-CN/dialogs.json"; +import ruDialogs from "@/i18n/locales/ru/dialogs.json"; const tutorialHelpKeys = [ "triggerLabel", @@ -39,6 +40,7 @@ const dialogsByLocale = { fr: frDialogs, tr: trDialogs, "ko-KR": koKRDialogs, + ru: ruDialogs, } satisfies Record }>; describe("TutorialHelp translations", () => { diff --git a/src/i18n/config.ts b/src/i18n/config.ts index cf0b34c..9b0d6b9 100644 --- a/src/i18n/config.ts +++ b/src/i18n/config.ts @@ -9,6 +9,7 @@ export const SUPPORTED_LOCALES = [ "ko-KR", "ja-JP", "ar", + "ru", ] as const; export const I18N_NAMESPACES = [ "common", diff --git a/src/i18n/locales/ru/common.json b/src/i18n/locales/ru/common.json new file mode 100644 index 0000000..e001a5f --- /dev/null +++ b/src/i18n/locales/ru/common.json @@ -0,0 +1,50 @@ +{ + "actions": { + "cancel": "Отмена", + "save": "Сохранить", + "delete": "Удалить", + "close": "Закрыть", + "share": "Поделиться", + "done": "Готово", + "open": "Открыть", + "upload": "Загрузить", + "export": "Экспорт", + "showInFolder": "Показать в папке", + "file": "Файл", + "edit": "Редактировать", + "view": "Вид", + "window": "Окно", + "quit": "Выход", + "stopRecording": "Остановить запись", + "undo": "Отменить", + "redo": "Повторить", + "cut": "Вырезать", + "copy": "Копировать", + "paste": "Вставить", + "selectAll": "Выделить всё", + "minimize": "Свернуть", + "reload": "Перезагрузить", + "forceReload": "Принудительная перезагрузка", + "toggleDevTools": "Переключить инструменты разработчика", + "actualSize": "Реальный размер", + "zoomIn": "Увеличить", + "zoomOut": "Уменьшить", + "toggleFullScreen": "Полноэкранный режим", + "recordingStatus": "Запись: {{source}}", + "about": "О OpenScreen", + "services": "Сервисы", + "hide": "Скрыть OpenScreen", + "hideOthers": "Скрыть остальные", + "unhide": "Показать все" + }, + "playback": { + "play": "Воспроизвести", + "pause": "Пауза", + "fullscreen": "Полный экран", + "exitFullscreen": "Выход из полного экрана" + }, + "locale": { + "name": "Русский", + "short": "RU" + } +} diff --git a/src/i18n/locales/ru/dialogs.json b/src/i18n/locales/ru/dialogs.json new file mode 100644 index 0000000..40b4113 --- /dev/null +++ b/src/i18n/locales/ru/dialogs.json @@ -0,0 +1,70 @@ +{ + "export": { + "complete": "Экспорт завершён", + "yourFormatReady": "Ваш {{format}} готов", + "showInFolder": "Показать в папке", + "finalizingVideo": "Завершение экспорта видео...", + "compilingGifProgress": "Сборка GIF... {{progress}}%", + "compilingGifWait": "Сборка GIF... Это может занять некоторое время", + "takeMoment": "Это может занять некоторое время...", + "failed": "Экспорт не удался", + "tryAgain": "Пожалуйста, попробуйте снова", + "finalizingVideoTitle": "Завершение видео", + "compilingGif": "Сборка GIF", + "exportingFormat": "Экспорт {{format}}", + "compiling": "Сборка", + "renderingFrames": "Рендеринг кадров", + "processing": "Обработка...", + "finalizing": "Завершение...", + "compilingStatus": "Сборка...", + "status": "Статус", + "format": "Формат", + "frames": "Кадры", + "cancelExport": "Отменить экспорт", + "savedSuccessfully": "{{format}} успешно сохранён!" + }, + "tutorial": { + "triggerLabel": "Как работает обрезка", + "title": "Как работает обрезка", + "description": "Как вырезать ненужные части видео.", + "explanationBefore": "Инструмент обрезки работает путём определения сегментов, которые вы хотите", + "remove": "удалить", + "explanationMiddle": " — всё, что", + "covered": "покрыто", + "explanationAfter": "красным сегментом обрезки, будет вырезано при экспорте.", + "visualExample": "Визуальный пример", + "removed": "УДАЛЕНО", + "kept": "Сохранено", + "part1": "Часть 1", + "part2": "Часть 2", + "part3": "Часть 3", + "finalVideo": "Итоговое видео", + "step1Title": "1. Добавить обрезку", + "step1DescriptionBefore": "Нажмите ", + "step1DescriptionAfter": " или нажмите на значок ножниц, чтобы отметить секцию для удаления.", + "step2Title": "2. Настроить", + "step2Description": "Перетащите края красной области, чтобы точно покрыть то, что вы хотите вырезать." + }, + "unsavedChanges": { + "title": "Несохранённые изменения", + "message": "У вас есть несохранённые изменения.", + "detail": "Хотите сохранить проект перед закрытием?", + "saveAndClose": "Сохранить и закрыть", + "discardAndClose": "Отменить и закрыть", + "loadProject": "Загрузить проект…", + "saveProject": "Сохранить проект…", + "saveProjectAs": "Сохранить проект как…" + }, + "fileDialogs": { + "saveGif": "Сохранить экспортированный GIF", + "saveVideo": "Сохранить экспортированное видео", + "selectVideo": "Выбрать видеофайл", + "saveProject": "Сохранить проект OpenScreen", + "openProject": "Открыть проект OpenScreen", + "gifImage": "GIF изображение", + "mp4Video": "MP4 видео", + "videoFiles": "Видеофайлы", + "openscreenProject": "Проект OpenScreen", + "allFiles": "Все файлы" + } +} diff --git a/src/i18n/locales/ru/editor.json b/src/i18n/locales/ru/editor.json new file mode 100644 index 0000000..098ca7a --- /dev/null +++ b/src/i18n/locales/ru/editor.json @@ -0,0 +1,45 @@ +{ + "newRecording": { + "title": "Вернуться к записи", + "description": "Ваша текущая сессия была сохранена.", + "cancel": "Отмена", + "confirm": "Подтвердить" + }, + "loadingVideo": "Загрузка видео...", + "errors": { + "noVideoLoaded": "Видео не загружено", + "videoNotReady": "Видео не готово", + "unableToDetermineSourcePath": "Не удалось определить путь к исходному видео", + "failedToSaveGif": "Не удалось сохранить GIF", + "gifExportFailed": "Экспорт GIF не удался", + "failedToSaveVideo": "Не удалось сохранить видео", + "exportFailed": "Экспорт не удался", + "exportFailedWithError": "Экспорт не удался: {{error}}", + "exportBackgroundLoadFailed": "Экспорт не удался: не удалось загрузить фоновое изображение ({{url}})", + "failedToSaveExport": "Не удалось сохранить экспорт", + "failedToSaveExportedVideo": "Не удалось сохранить экспортированное видео", + "failedToRevealInFolder": "Ошибка при показе в папке: {{error}}" + }, + "export": { + "canceled": "Экспорт отменён", + "exportedSuccessfully": "{{format}} успешно экспортирован" + }, + "project": { + "saveCanceled": "Сохранение проекта отменено", + "failedToSave": "Не удалось сохранить проект", + "savedTo": "Проект сохранён в {{path}}", + "failedToLoad": "Не удалось загрузить проект", + "invalidFormat": "Неверный формат файла проекта", + "loadedFrom": "Проект загружен из {{path}}" + }, + "recording": { + "failedCameraAccess": "Не удалось запросить доступ к камере.", + "cameraBlocked": "Доступ к камере заблокирован. Включите его в системных настройках для использования веб-камеры.", + "systemAudioUnavailable": "Системный аудио недоступен. Запись без системного аудио.", + "microphoneDenied": "Доступ к микрофону запрещён. Запись продолжится без аудио.", + "cameraDenied": "Доступ к камере запрещён. Запись продолжится без веб-камеры.", + "cameraDisconnected": "Веб-камера отключена.", + "cameraNotFound": "Камера не найдена.", + "permissionDenied": "Разрешение на запись запрещено. Пожалуйста, разрешите запись экрана." + } +} diff --git a/src/i18n/locales/ru/launch.json b/src/i18n/locales/ru/launch.json new file mode 100644 index 0000000..e4373e3 --- /dev/null +++ b/src/i18n/locales/ru/launch.json @@ -0,0 +1,43 @@ +{ + "tooltips": { + "hideHUD": "Скрыть HUD", + "closeApp": "Закрыть приложение", + "restartRecording": "Перезапустить запись", + "cancelRecording": "Отменить запись", + "pauseRecording": "Приостановить запись", + "resumeRecording": "Возобновить запись", + "openVideoFile": "Открыть видеофайл", + "openProject": "Открыть проект" + }, + "audio": { + "enableSystemAudio": "Включить системное аудио", + "disableSystemAudio": "Отключить системное аудио", + "enableMicrophone": "Включить микрофон", + "disableMicrophone": "Отключить микрофон", + "defaultMicrophone": "Микрофон по умолчанию" + }, + "webcam": { + "enableWebcam": "Включить веб-камеру", + "disableWebcam": "Отключить веб-камеру", + "defaultCamera": "Камера по умолчанию", + "searching": "Поиск...", + "noneFound": "Камера не найдена", + "unavailable": "Камера недоступна" + }, + "sourceSelector": { + "loading": "Загрузка источников...", + "screens": "Экраны ({{count}})", + "windows": "Окна ({{count}})", + "defaultSourceName": "Экран" + }, + "recording": { + "selectSource": "Пожалуйста, выберите источник для записи" + }, + "language": "Язык", + "systemLanguagePrompt": { + "title": "Использовать системный язык?", + "description": "Мы обнаружили {{language}} как системный язык. Хотите переключить OpenScreen на {{language}}?", + "switch": "Переключить на {{language}}", + "keepDefault": "Оставить текущий язык" + } +} diff --git a/src/i18n/locales/ru/settings.json b/src/i18n/locales/ru/settings.json new file mode 100644 index 0000000..e3be5ed --- /dev/null +++ b/src/i18n/locales/ru/settings.json @@ -0,0 +1,202 @@ +{ + "zoom": { + "level": "Уровень масштабирования", + "selectRegion": "Выберите область масштабирования для настройки", + "deleteZoom": "Удалить масштабирование", + "focusMode": { + "title": "Режим фокуса", + "manual": "Ручной", + "auto": "Авто", + "autoDescription": "Камера следует за записанной позицией курсора" + }, + "threeD": { + "title": "3D вращение", + "preset": { + "iso": "Изометрия", + "left": "Слева", + "right": "Справа" + } + } + }, + "speed": { + "playbackSpeed": "Скорость воспроизведения", + "selectRegion": "Выберите область скорости для настройки", + "deleteRegion": "Удалить область скорости", + "customPlaybackSpeed": "Пользовательская скорость воспроизведения", + "maxSpeedError": "Скорость не может быть выше 16×" + }, + "trim": { + "deleteRegion": "Удалить область обрезки" + }, + "layout": { + "title": "Макет", + "preset": "Пресет", + "selectPreset": "Выбрать пресет", + "pictureInPicture": "Картинка в картинке", + "verticalStack": "Вертикальный стек", + "dualFrame": "Двойной кадр", + "webcamShape": "Форма камеры", + "webcamSize": "Размер веб-камеры" + }, + "effects": { + "title": "Видеоэффекты", + "blurBg": "Размытие фона", + "motionBlur": "Размытие движения", + "off": "выкл", + "on": "вкл", + "shadow": "Тень", + "roundness": "Скругление", + "padding": "Отступ", + "cursorHighlight": { + "title": "Подсветка курсора", + "style": "Стиль", + "dot": "Точка", + "ring": "Кольцо", + "size": "Размер", + "onlyOnClicks": "Только при кликах", + "color": "Цвет", + "offsetX": "Смещение X (записи окон)", + "offsetY": "Смещение Y", + "accessibilityPermissionTitle": "Требуется разрешение на доступность", + "accessibilityPermissionDescription": "Откройте Системные настройки → Конфиденциальность и безопасность → Универсальный доступ, включите Openscreen, затем перезапустите приложение." + } + }, + "background": { + "title": "Фон", + "image": "Изображение", + "color": "Цвет", + "gradient": "Градиент", + "uploadCustom": "Загрузить свой", + "gradientLabel": "Градиент {{index}}", + "colorWheel": "Цветовой круг", + "colorPalette": "Палитра цветов" + }, + "crop": { + "title": "Обрезка", + "cropVideo": "Обрезать видео", + "dragInstruction": "Перетащите каждую сторону для настройки области обрезки", + "ratio": "Соотношение сторон", + "free": "Свободно", + "done": "Готово", + "lockAspectRatio": "Заблокировать соотношение сторон", + "unlockAspectRatio": "Разблокировать соотношение сторон" + }, + "exportFormat": { + "mp4": "MP4", + "gif": "GIF", + "mp4Video": "MP4 видео", + "mp4Description": "Видеофайл высокого качества", + "gifAnimation": "GIF анимация", + "gifDescription": "Анимированное изображение для обмена" + }, + "exportQuality": { + "title": "Качество экспорта", + "low": "Низкое", + "medium": "Среднее", + "high": "Высокое" + }, + "gifSettings": { + "frameRate": "Частота кадров GIF", + "size": "Размер GIF", + "loop": "Зациклить GIF" + }, + "project": { + "save": "Сохранить проект", + "load": "Загрузить проект" + }, + "export": { + "videoButton": "Экспорт видео", + "gifButton": "Экспорт GIF", + "chooseSaveLocation": "Выбрать место сохранения" + }, + "links": { + "reportBug": "Сообщить об ошибке", + "starOnGithub": "Звезда на GitHub" + }, + "imageUpload": { + "invalidFileType": "Неверный тип файла", + "jpgOnly": "Пожалуйста, загрузите изображение JPG или JPEG.", + "uploadSuccess": "Пользовательское изображение успешно загружено!", + "failedToUpload": "Не удалось загрузить изображение", + "errorReading": "Произошла ошибка при чтении файла." + }, + "annotation": { + "title": "Настройки аннотаций", + "active": "Активно", + "typeText": "Текст", + "typeImage": "Изображение", + "typeArrow": "Стрелка", + "typeBlur": "Размытие", + "textContent": "Содержание текста", + "textPlaceholder": "Введите ваш текст...", + "fontStyle": "Стиль шрифта", + "selectStyle": "Выбрать стиль", + "size": "Размер", + "customFonts": "Пользовательские шрифты", + "textColor": "Цвет текста", + "background": "Фон", + "none": "Нет", + "color": "Цвет", + "colorWheel": "Цветовой круг", + "colorPalette": "Палитра цветов", + "clearBackground": "Очистить фон", + "uploadImage": "Загрузить изображение", + "supportedFormats": "Поддерживаемые форматы: JPG, PNG, GIF, WebP", + "arrowDirection": "Направление стрелки", + "strokeWidth": "Толщина линии: {{width}}px", + "arrowColor": "Цвет стрелки", + "blurType": "Тип размытия", + "blurTypeBlur": "Размытие", + "blurTypeMosaic": "Мозаичное размытие", + "blurColor": "Цвет размытия", + "blurColorWhite": "Белый", + "blurColorBlack": "Чёрный", + "blurShape": "Форма размытия", + "blurIntensity": "Интенсивность размытия", + "mosaicBlockSize": "Размер блока мозаики", + "blurShapeRectangle": "Прямоугольник", + "blurShapeOval": "Овал", + "blurShapeFreehand": "От руки", + "deleteAnnotation": "Удалить аннотацию", + "shortcutsAndTips": "Горячие клавиши и советы", + "tipMovePlayhead": "Переместите курсор воспроизведения к перекрывающейся секции аннотации и выберите элемент.", + "tipTabCycle": "Используйте Tab для циклического переключения между перекрывающимися элементами.", + "tipShiftTabCycle": "Используйте Shift+Tab для циклического переключения в обратном направлении.", + "invalidImageType": "Неверный тип файла", + "imageFormatsOnly": "Пожалуйста, загрузите изображение JPG, PNG, GIF или WebP.", + "imageUploadSuccess": "Изображение успешно загружено!", + "failedImageUpload": "Не удалось загрузить изображение" + }, + "fontStyles": { + "classic": "Классический", + "editor": "Редактор", + "strong": "Жирный", + "typewriter": "Пишущая машинка", + "deco": "Декоративный", + "simple": "Простой", + "modern": "Современный", + "clean": "Чистый" + }, + "customFont": { + "dialogTitle": "Добавить шрифт Google", + "urlLabel": "URL импорта Google Fonts", + "urlPlaceholder": "https://fonts.googleapis.com/css2?family=Roboto&display=swap", + "urlHelp": "Возьмите его из Google Fonts: Выберите шрифт → Нажмите \"Get font\" → Скопируйте URL @import", + "nameLabel": "Отображаемое имя", + "namePlaceholder": "Мой пользовательский шрифт", + "nameHelp": "Так шрифт будет отображаться в селекторе шрифтов", + "addButton": "Добавить шрифт", + "addingButton": "Добавление...", + "errorEmptyUrl": "Пожалуйста, введите URL импорта Google Fonts", + "errorInvalidUrl": "Пожалуйста, введите корректный URL Google Fonts", + "errorEmptyName": "Пожалуйста, введите имя шрифта", + "errorExtractFailed": "Не удалось извлечь семейство шрифтов из URL", + "successMessage": "Шрифт \"{{fontName}}\" успешно добавлен", + "failedToAdd": "Не удалось добавить шрифт", + "errorTimeout": "Загрузка шрифта заняла слишком много времени. Пожалуйста, проверьте URL и попробуйте снова.", + "errorLoadFailed": "Не удалось загрузить шрифт. Пожалуйста, проверьте правильность URL Google Fonts." + }, + "language": { + "title": "Язык" + } +} diff --git a/src/i18n/locales/ru/shortcuts.json b/src/i18n/locales/ru/shortcuts.json new file mode 100644 index 0000000..ab6eae8 --- /dev/null +++ b/src/i18n/locales/ru/shortcuts.json @@ -0,0 +1,37 @@ +{ + "title": "Горячие клавиши", + "customize": "Настроить", + "configurable": "Настраиваемые", + "fixed": "Фиксированные", + "pressKey": "Нажмите клавишу…", + "clickToChange": "Нажмите для изменения", + "pressEscToCancel": "Нажмите Esc для отмены", + "helpText": "Нажмите на горячую клавишу, затем нажмите новую комбинацию клавиш. Нажмите Esc для отмены.", + "resetToDefaults": "Сбросить по умолчанию", + "alreadyUsedBy": "Уже используется для {{action}}", + "swap": "Поменять", + "reservedShortcut": "Эта горячая клавиша зарезервирована для \"{{label}}\" и не может быть переназначена.", + "savedToast": "Горячие клавиши сохранены", + "resetToast": "Сброс к горячим клавишам по умолчанию — нажмите Сохранить для применения", + "actions": { + "addZoom": "Добавить масштабирование", + "addTrim": "Добавить обрезку", + "addSpeed": "Изменить скорость", + "addAnnotation": "Добавить аннотацию", + "addBlur": "Добавить размытие", + "addKeyframe": "Добавить ключевой кадр", + "deleteSelected": "Удалить выбранное", + "playPause": "Воспроизведение / Пауза" + }, + "fixedActions": { + "undo": "Отменить", + "redo": "Повторить", + "cycleAnnotationsForward": "Циклически переключить аннотации вперёд", + "cycleAnnotationsBackward": "Циклически переключить аннотации назад", + "deleteSelectedAlt": "Удалить выбранное (альт)", + "panTimeline": "Панорамирование таймлайна", + "zoomTimeline": "Масштабирование таймлайна", + "frameBack": "Кадр назад", + "frameForward": "Кадр вперёд" + } +} diff --git a/src/i18n/locales/ru/timeline.json b/src/i18n/locales/ru/timeline.json new file mode 100644 index 0000000..fe9ce46 --- /dev/null +++ b/src/i18n/locales/ru/timeline.json @@ -0,0 +1,55 @@ +{ + "buttons": { + "addZoom": "Добавить масштабирование (Z)", + "suggestZooms": "Предложить масштабирование на основе курсора", + "addTrim": "Добавить обрезку (T)", + "addAnnotation": "Добавить аннотацию (A)", + "addBlur": "Добавить размытие (B)", + "addSpeed": "Изменить скорость (S)" + }, + "hints": { + "pressZoom": "Нажмите Z для добавления масштабирования", + "pressTrim": "Нажмите T для добавления обрезки", + "pressAnnotation": "Нажмите A для добавления аннотации", + "pressBlur": "Нажмите B для добавления области размытия", + "pressSpeed": "Нажмите S для изменения скорости" + }, + "labels": { + "pan": "Панорамирование", + "zoom": "Масштабирование", + "trim": "Обрезка", + "speed": "Скорость воспроизведения", + "zoomItem": "Масштабирование {{index}}", + "trimItem": "Обрезка {{index}}", + "speedItem": "Скорость воспроизведения {{index}}", + "annotationItem": "Аннотация", + "blurItem": "Размытие {{index}}", + "imageItem": "Изображение", + "emptyText": "Пустой текст" + }, + "emptyState": { + "noVideo": "Видео не загружено", + "dragAndDrop": "Перетащите видео для начала редактирования" + }, + "errors": { + "cannotPlaceZoom": "Невозможно разместить масштабирование здесь", + "zoomExistsAtLocation": "Масштабирование уже существует в этом месте или недостаточно свободного места.", + "zoomSuggestionUnavailable": "Обработчик предложений масштабирования недоступен", + "noCursorTelemetry": "Нет данных телеметрии курсора", + "noCursorTelemetryDescription": "Сначала запишите screencast для генерации предложений на основе курсора.", + "noUsableTelemetry": "Нет пригодной телеметрии курсора", + "noUsableTelemetryDescription": "Запись не содержит достаточно данных о движении курсора.", + "noDwellMoments": "Не найдено чётких моментов задержки курсора", + "noDwellMomentsDescription": "Попробуйте запись с более медленными паузами курсора на важных действиях.", + "noAutoZoomSlots": "Нет доступных слотов авто-масштабирования", + "noAutoZoomSlotsDescription": "Обнаруженные точки задержки перекрывают существующие области масштабирования.", + "cannotPlaceTrim": "Невозможно разместить обрезку здесь", + "trimExistsAtLocation": "Обрезка уже существует в этом месте или недостаточно свободного места.", + "cannotPlaceSpeed": "Невозможно разместить изменение скорости здесь", + "speedExistsAtLocation": "Область изменения скорости уже существует в этом месте или недостаточно свободного места." + }, + "success": { + "addedZoomSuggestions": "Добавлено {{count}} предложение масштабирования на основе курсора", + "addedZoomSuggestionsPlural": "Добавлено {{count}} предложений масштабирования на основе курсора" + } +} From 9336e3d3c6a1bcef7a1f33f2f06ca273751b1077 Mon Sep 17 00:00:00 2001 From: psychosomat Date: Wed, 6 May 2026 13:16:21 +0300 Subject: [PATCH 2/2] Fix Russian translation typo and reorder imports --- src/i18n/__tests__/tutorialHelpTranslations.test.ts | 2 +- src/i18n/locales/ru/editor.json | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/src/i18n/__tests__/tutorialHelpTranslations.test.ts b/src/i18n/__tests__/tutorialHelpTranslations.test.ts index 54979d5..a7bc726 100644 --- a/src/i18n/__tests__/tutorialHelpTranslations.test.ts +++ b/src/i18n/__tests__/tutorialHelpTranslations.test.ts @@ -4,9 +4,9 @@ import enDialogs from "@/i18n/locales/en/dialogs.json"; import esDialogs from "@/i18n/locales/es/dialogs.json"; import frDialogs from "@/i18n/locales/fr/dialogs.json"; import koKRDialogs from "@/i18n/locales/ko-KR/dialogs.json"; +import ruDialogs from "@/i18n/locales/ru/dialogs.json"; import trDialogs from "@/i18n/locales/tr/dialogs.json"; import zhCNDialogs from "@/i18n/locales/zh-CN/dialogs.json"; -import ruDialogs from "@/i18n/locales/ru/dialogs.json"; const tutorialHelpKeys = [ "triggerLabel", diff --git a/src/i18n/locales/ru/editor.json b/src/i18n/locales/ru/editor.json index 098ca7a..c5616d2 100644 --- a/src/i18n/locales/ru/editor.json +++ b/src/i18n/locales/ru/editor.json @@ -35,7 +35,7 @@ "recording": { "failedCameraAccess": "Не удалось запросить доступ к камере.", "cameraBlocked": "Доступ к камере заблокирован. Включите его в системных настройках для использования веб-камеры.", - "systemAudioUnavailable": "Системный аудио недоступен. Запись без системного аудио.", + "systemAudioUnavailable": "Системное аудио недоступно. Запись без системного аудио.", "microphoneDenied": "Доступ к микрофону запрещён. Запись продолжится без аудио.", "cameraDenied": "Доступ к камере запрещён. Запись продолжится без веб-камеры.", "cameraDisconnected": "Веб-камера отключена.",