Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
2 changes: 2 additions & 0 deletions src/i18n/__tests__/tutorialHelpTranslations.test.ts
Original file line number Diff line number Diff line change
Expand Up @@ -4,6 +4,7 @@ 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";

Expand Down Expand Up @@ -39,6 +40,7 @@ const dialogsByLocale = {
fr: frDialogs,
tr: trDialogs,
"ko-KR": koKRDialogs,
ru: ruDialogs,
} satisfies Record<Locale, { tutorial: Record<string, unknown> }>;

describe("TutorialHelp translations", () => {
Expand Down
1 change: 1 addition & 0 deletions src/i18n/config.ts
Original file line number Diff line number Diff line change
Expand Up @@ -9,6 +9,7 @@ export const SUPPORTED_LOCALES = [
"ko-KR",
"ja-JP",
"ar",
"ru",
] as const;
export const I18N_NAMESPACES = [
"common",
Expand Down
50 changes: 50 additions & 0 deletions src/i18n/locales/ru/common.json
Original file line number Diff line number Diff line change
@@ -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"
}
}
70 changes: 70 additions & 0 deletions src/i18n/locales/ru/dialogs.json
Original file line number Diff line number Diff line change
@@ -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": "Отменить и закрыть",
Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

P1 Badge Correct misleading discard action label in Russian dialog

dialogs.unsavedChanges.discardAndClose is translated as "Отменить и закрыть" (“Cancel and close”), but this label is bound to the destructive discard changes and close path in the close-confirmation flow (electron/main.ts, createEditorWindowWrapper, choice index 1). In the Russian UI, this can mislead users into clicking what looks like cancel and unintentionally losing unsaved work.

Useful? React with 👍 / 👎.

Copy link
Copy Markdown
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

disagree with that interpretation

"loadProject": "Загрузить проект…",
"saveProject": "Сохранить проект…",
"saveProjectAs": "Сохранить проект как…"
},
"fileDialogs": {
"saveGif": "Сохранить экспортированный GIF",
"saveVideo": "Сохранить экспортированное видео",
"selectVideo": "Выбрать видеофайл",
"saveProject": "Сохранить проект OpenScreen",
"openProject": "Открыть проект OpenScreen",
"gifImage": "GIF изображение",
"mp4Video": "MP4 видео",
"videoFiles": "Видеофайлы",
"openscreenProject": "Проект OpenScreen",
"allFiles": "Все файлы"
}
}
45 changes: 45 additions & 0 deletions src/i18n/locales/ru/editor.json
Original file line number Diff line number Diff line change
@@ -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": "Разрешение на запись запрещено. Пожалуйста, разрешите запись экрана."
}
}
43 changes: 43 additions & 0 deletions src/i18n/locales/ru/launch.json
Original file line number Diff line number Diff line change
@@ -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": "Оставить текущий язык"
}
}
Loading
Loading