mirror of
https://github.com/getpaseo/paseo.git
synced 2026-10-14 13:22:37 +00:00
* feat(app): open files and subagents in a closable sheet on compact On phones, opening a file, a provider subagent, or a Paseo subagent now shows it in a bottom sheet over the current tab instead of adding a tab, so the tab strip stays for terminals and root agents. Paseo subagents get "Open as tab" to move the same tab (same tabId and state) into a full tab with a composer; agents in a sheet hide the composer. The decision lives in the workspace layout store's openTab, driven by a per-kind `compactSheet` rule in the panel manifest, so every open path (chat links, Explorer, subagents track, notifications, plugins) follows it without call-site branching, and a new kind opts in with one manifest entry. The app shell publishes the layout mode (compact / single-pane / split-panes) once, so callers stop passing isCompact for placement. A sheet holding unsaved edits is never implicitly displaced; later opens go to tabs underneath, and closing it goes through the existing discard guard. The editor host is position: sticky because CodeMirror's scrollIntoView otherwise scrolls the bottom sheet's container and drags the sheet to full height. * test(app): fail the compact sheet snap check when the sheet is oversized --------- Co-authored-by: paseo-bot[bot] <paseo-bot[bot]@users.noreply.github.com>
2883 lines
151 KiB
TypeScript
2883 lines
151 KiB
TypeScript
import { en, type TranslationResources } from "./en";
|
||
import { pluginSettings } from "./plugin-settings";
|
||
|
||
export const ru: TranslationResources = {
|
||
paneFind: {
|
||
connectionFailure:
|
||
"Не удалось выполнить поиск в чате. Проверьте подключение к хосту и повторите попытку.",
|
||
historyChangedFailure: "Чат изменился во время поиска. Выполните поиск снова.",
|
||
revealFailure: "Не удалось показать это совпадение. Повторите попытку.",
|
||
searching: "Поиск…",
|
||
loading: "Загрузка…",
|
||
failed: "Ошибка",
|
||
retry: "Повторить",
|
||
|
||
title: "Найти",
|
||
placeholder: "Найти в панели",
|
||
close: "Закрыть поиск",
|
||
matches: "Совпадения",
|
||
previous: "Предыдущее совпадение",
|
||
next: "Следующее совпадение",
|
||
toggleReplace: "Показать замену",
|
||
replaceWith: "Заменить на",
|
||
replace: "Заменить",
|
||
replaceAll: "Заменить всё",
|
||
noMatches: "Нет совпадений",
|
||
position: "{{current}} из {{total}}",
|
||
total: "Совпадений: {{total}}",
|
||
},
|
||
common: {
|
||
bottomSheetBackdrop: "Фон нижней панели",
|
||
back: "Назад",
|
||
loading: "Загрузка...",
|
||
actions: {
|
||
save: "Сохранить",
|
||
back: "Назад",
|
||
cancel: "Отмена",
|
||
close: "Закрыть",
|
||
copy: "Копировать",
|
||
copyLine: "Копировать строку",
|
||
dismiss: "Отклонить",
|
||
reload: "Перезагрузить",
|
||
retry: "Повторить",
|
||
search: "Поиск",
|
||
select: "Выбрать",
|
||
selectAll: "Выбрать все",
|
||
},
|
||
placeholders: {
|
||
search: "Поиск...",
|
||
},
|
||
empty: {
|
||
noResults: "Ничего не найдено",
|
||
noOptionsMatchSearch: "Нет вариантов, соответствующих вашему запросу.",
|
||
},
|
||
states: {
|
||
loading: "Загрузка...",
|
||
starting: "Начало...",
|
||
copied: "Скопировано",
|
||
copiedLabel: "Скопировано {{label}}",
|
||
downloadComplete: "Загрузка завершена",
|
||
downloadFailed: "Загрузка не удалась",
|
||
},
|
||
errors: {
|
||
error: "Ошибка",
|
||
unableToSave: "Не удалось сохранить",
|
||
unableToCopy: "Не удалось скопировать",
|
||
nameRequired: "Требуется имя",
|
||
daemonUnavailable: "Daemon недоступен",
|
||
daemonClientUnavailable: "Daemon клиента недоступен",
|
||
daemonClientDisconnected: "Daemon клиента отключен",
|
||
noFileFound: "Файл для {{token}} не найден",
|
||
unexpectedDictationError: "При обработке диктовки произошла непредвиденная ошибка.",
|
||
},
|
||
connectionStatus: {
|
||
online: "Онлайн",
|
||
connecting: "Подключение",
|
||
offline: "Оффлайн",
|
||
error: "Ошибка",
|
||
idle: "Ожидание",
|
||
},
|
||
},
|
||
shell: {
|
||
menu: {
|
||
toggleSidebar: "Переключить боковую панель",
|
||
open: "Открыть меню",
|
||
close: "Закрыть меню",
|
||
},
|
||
commandCenter: {
|
||
placeholder: "Поиск команд, файлов, рабочих пространств и агентов...",
|
||
filePlaceholder: "Поиск файлов...",
|
||
searchingFiles: "Поиск файлов...",
|
||
noMatches: "Нет совпадений",
|
||
actions: "Действия",
|
||
files: "Файлы",
|
||
workspaces: "Рабочие пространства",
|
||
agents: "Агенты",
|
||
newAgent: "Новый агент",
|
||
open: "Открыть {{name}}",
|
||
openInSidePane: "Открыть {{name}} в боковой панели",
|
||
openInFocusedPane: "Открыть {{name}} в активной области",
|
||
addProject: "Добавить проект",
|
||
home: "Главная",
|
||
groupByProject: "Группировать по проекту",
|
||
groupByStatus: "Группировать по статусу",
|
||
modelGroupLabel: "Модель",
|
||
modelSearchKeywords: "Сменить, изменить, выбрать или установить модель",
|
||
thinkingGroupLabel: "Мышление",
|
||
thinkingSearchKeywords: "Уровень усилия рассуждения",
|
||
modeGroupLabel: "Режим",
|
||
modeSearchKeywords: "режим подтверждения разрешений доступа",
|
||
planModeGroupLabel: "Режим планирования",
|
||
planModeSearchKeywords: "план планирование режим плана",
|
||
fastModeGroupLabel: "Быстрый",
|
||
fastModeSearchKeywords: "быстрый скорость низкая задержка",
|
||
settingOn: "Вкл",
|
||
settingOff: "Выкл",
|
||
},
|
||
},
|
||
composer: {
|
||
placeholders: {
|
||
desktop: "Напишите агенту сообщение, отметьте @files или используйте /commands и /skills.",
|
||
mobile: "Сообщение,@files,/commands",
|
||
fallback: "Сообщение...",
|
||
terminal: "Prompt",
|
||
},
|
||
input: {
|
||
accessibilityLabel: "Написать агенту...",
|
||
terminalAccessibilityLabel: "Terminal prompt",
|
||
fullscreen: "Полный экран",
|
||
exitFullscreen: "Выйти из полноэкранного режима",
|
||
focusHint: "{{shortcut}}, для фокуса",
|
||
addAttachment: "Добавить вложение",
|
||
interruptAgent: "Прервать агента",
|
||
queueMessage: "Сообщение в очередь",
|
||
sendAndInterrupt: "Отправить и прервать",
|
||
sendAndSteer: "Отправить и направить",
|
||
sendMessage: "Отправить сообщение",
|
||
queue: "Очередь",
|
||
send: "Отправить",
|
||
},
|
||
cancel: {
|
||
cancelingAgent: "Отменить агента",
|
||
stopAgent: "Остановить агента",
|
||
interrupt: "Прервать",
|
||
},
|
||
voice: {
|
||
enableVoiceMode: "Включить голосовой режим",
|
||
voiceMode: "Голосовой режим",
|
||
unmuteVoiceMode: "Включить голосовой режим",
|
||
muteVoiceMode: "Отключить голосовой режим",
|
||
stopDictation: "Остановить диктовку",
|
||
startDictation: "Начать диктовку",
|
||
unmuteVoice: "Включить звук",
|
||
muteVoice: "Отключить голос",
|
||
dictation: "Диктовка",
|
||
interruptBeforeVoice: "Остановите агента перед запуском голосового режима",
|
||
},
|
||
attachments: {
|
||
addImage: "Добавить изображение",
|
||
pasteImage: "Вставить изображение",
|
||
addFile: "Загрузить файл",
|
||
addIssueOrPr: "Добавить проблему или PR",
|
||
addIssueOrPr_mr: "Добавить проблему или MR",
|
||
dropImagesHere: "Скиньте изображения сюда",
|
||
dropFilesHere: "Переместите файлы сюда",
|
||
editQueuedMessage: "Изменить сообщение из очереди",
|
||
sendQueuedMessageNow: "Отправить сообщение из очереди сейчас",
|
||
openImage: "Открыть прикрепленное изображение",
|
||
removeImage: "Удалить прикрепленное изображение",
|
||
removeFile: "Удалить прикрепленный файл",
|
||
openGithub: "Открыть {{kind}} {{number}}",
|
||
removeGithub: "Удалить {{kind}} {{number}}",
|
||
element: "Элемент",
|
||
openBrowserElement: "Открыть вложение с элементом браузера",
|
||
removeBrowserElement: "Удалить вложение с элементом браузера",
|
||
openReview: "Открыть вложение проверки",
|
||
removeReview: "Удалить вложение проверки",
|
||
},
|
||
errors: {
|
||
failedToSend: "Не удалось отправить сообщение",
|
||
failedToCreateAgent: "Не удалось создать агента.",
|
||
noHostSelected: "Хост не выбран",
|
||
initialPromptRequired: "Необходим инициализирующий промпт",
|
||
alreadyLoading: "Уже загружается",
|
||
uploadFailed: "Ошибка загрузки файла",
|
||
noClipboardImage:
|
||
"В текущем буфере обмена нет изображения. Попробуйте вставить его с клавиатуры.",
|
||
pasteImageFailed: "Не удалось вставить изображение",
|
||
fileTooLarge: "Файл {{fileName}} слишком большой (максимальный размер: {{size}})",
|
||
},
|
||
clientCommands: {
|
||
archiveAgent: "Архивировать текущего агента",
|
||
freshDraft: "Архивировать этого агента и создать новый черновик",
|
||
},
|
||
github: {
|
||
searching: "Идет поиск...",
|
||
noResults: "Результаты не найдены.",
|
||
searchPlaceholder: "Поиск задач и PR...",
|
||
searchPlaceholder_mr: "Поиск задач и MR...",
|
||
title: "Прикрепить задачу или PR",
|
||
title_mr: "Прикрепить задачу или MR",
|
||
},
|
||
},
|
||
agentControls: {
|
||
provider: {
|
||
fallback: "Провайдер",
|
||
select: "Выбрать провайдера агента",
|
||
},
|
||
thinking: {
|
||
title: "Рассуждения",
|
||
unknown: "Неизвестно",
|
||
extraHigh: "Очень высокий",
|
||
select: "Выбрать уровень рассуждений",
|
||
selectWithValue: "Выбрать уровень рассуждений ({{value}})",
|
||
},
|
||
model: {
|
||
unknown: "Неизвестная модель",
|
||
},
|
||
features: {
|
||
title: "Функции",
|
||
open: "Открыть настройки функций агента",
|
||
on: "Включено",
|
||
off: "Выключено",
|
||
},
|
||
mode: {
|
||
title: "Режим",
|
||
searchPlaceholder: "Поиск режимов...",
|
||
selectWithValue: "Выбрать режим агента ({{value}})",
|
||
},
|
||
hints: {
|
||
thinking: "Режим рассуждений",
|
||
model: "Изменить модель",
|
||
mode: "Изменить режим",
|
||
},
|
||
},
|
||
agentStream: {
|
||
empty: "Начните общаться с этим агентом...",
|
||
scrollToBottom: "Прокрутить вниз",
|
||
historyLoadFailed: "Не удалось загрузить историю агента",
|
||
messageCapped: "Это сообщение было обрезано ({{bytes}} байт).",
|
||
permission: {
|
||
rejectedPlan: "Отклонённый план",
|
||
approvedPlan: "Одобренный план",
|
||
canceledPlan: "Отменённый план",
|
||
|
||
plan: "План",
|
||
required: "Требуется разрешение",
|
||
deny: "Отклонить",
|
||
accept: "Разрешить",
|
||
implement: "Реализовать",
|
||
question: "Как бы вы хотели продолжить?",
|
||
proposedPlan: "Предлагаемый план",
|
||
},
|
||
},
|
||
agentPanel: {
|
||
states: {
|
||
notFound: "Агент не найден",
|
||
failedToLoad: "Не удалось загрузить агента",
|
||
reconnecting: "Повторное подключение к хосту",
|
||
updating: "Обновление сообщений",
|
||
timelineSyncFailed: "Не удалось обновить историю агента.",
|
||
timelineSyncRetrying: "Повторная попытка…",
|
||
archivingTitle: "Агент перемещается в архив...",
|
||
archivingSubtitle: "Подождите, пока агент будет перемещён в архив.",
|
||
},
|
||
unavailable: {
|
||
selectedHost: "Выбранный хост",
|
||
unknownHost:
|
||
"Невозможно открыть этого агента, поскольку {{serverLabel}} не настроен на этом устройстве.",
|
||
addHost:
|
||
"Добавьте хост в настройках или откройте агента на настроенном хосте, чтобы продолжить.",
|
||
preparingSession: "Подготовка сессии на хосте {{serverLabel}}...",
|
||
connecting: "Подключение к {{serverLabel}}...",
|
||
showSoon: "Агент скоро появится.",
|
||
showWhenOnline: "Агент появится, как только хост будет в сети.",
|
||
reconnectingTo: "Повторное подключение к {{serverLabel}}...",
|
||
showAgainWhenReachable: "Агент снова появится, как только хост станет доступен.",
|
||
},
|
||
archived: {
|
||
callout: "Этот агент находится в архиве",
|
||
unarchive: "Разархивировать",
|
||
},
|
||
},
|
||
sessions: {
|
||
title: "История",
|
||
empty: "Сессий пока нет",
|
||
noMatches: "Подходящих сессий не найдено",
|
||
tooManyMatches: "Слишком много совпадений — уточните запрос",
|
||
hostLoadFailed: "{{host}}: не удалось загрузить историю",
|
||
searchPlaceholder: "Поиск по истории",
|
||
actions: {
|
||
loadMore: "Загрузить ещё",
|
||
clearSearch: "Очистить поиск",
|
||
},
|
||
},
|
||
agentList: {
|
||
fallbackTitle: "Новая сессия",
|
||
dateSections: {
|
||
recent: "Недавние",
|
||
today: "Сегодня",
|
||
yesterday: "Вчера",
|
||
thisWeek: "На этой неделе",
|
||
thisMonth: "В этом месяце",
|
||
older: "Более ранние",
|
||
},
|
||
status: {
|
||
initializing: "Запускается",
|
||
idle: "Ожидает",
|
||
running: "Работает",
|
||
error: "Ошибка",
|
||
closed: "Закрыт",
|
||
},
|
||
badges: {
|
||
archived: "В архиве",
|
||
pending: "На рассмотрении: {{count}}",
|
||
attention: "Внимание",
|
||
},
|
||
archiveSheet: {
|
||
hostOffline: "Хост не в сети",
|
||
runningAgent: "Этот агент всё ещё работает. Перемещение в архив остановит его.",
|
||
archive: "Архивировать",
|
||
},
|
||
},
|
||
message: {
|
||
diagram: {
|
||
diagram: "Диаграмма",
|
||
zoomIn: "Увеличить масштаб",
|
||
zoomOut: "Уменьшить масштаб",
|
||
resetZoom: "Сбросить масштаб",
|
||
fullscreen: "Полноэкранный режим",
|
||
viewSource: "Показать исходный код",
|
||
viewDiagram: "Показать диаграмму",
|
||
},
|
||
actions: {
|
||
copyCode: "Скопировать код",
|
||
copyTurn: "Скопировать ответ",
|
||
copyMessage: "Копировать сообщение",
|
||
forkMenu: "Форкнуть чат отсюда",
|
||
forkInNewTab: "Создать форк в новой вкладке",
|
||
forkInNewWorkspace: "Создать форк в новом рабочем пространстве",
|
||
forkUnavailable: "Обновите хост, чтобы использовать эту функцию.",
|
||
forkMissingWorkspace: "Этот агент не связан с рабочим пространством.",
|
||
forkFailed: "Не удалось создать форк чата",
|
||
openFile: "Открыть файл",
|
||
copied: "Скопировано",
|
||
},
|
||
attachments: {
|
||
dismissImage: "Закрыть изображение",
|
||
closeImage: "Закрыть изображение",
|
||
imageLoadFailed: "Не удалось загрузить изображение",
|
||
imageUnavailable: "Изображение недоступно",
|
||
imagePreviewUnavailable: "Предварительный просмотр изображения недоступен.",
|
||
imagePreviewLoadFailed: "Не удалось загрузить предварительный просмотр изображения.",
|
||
review: "Ревью",
|
||
commentsOne: "1 комментарий",
|
||
commentsMany: "Комментарии: {{count}}",
|
||
textAttachment: "Текстовое вложение",
|
||
text: "Текст",
|
||
file: "Файл",
|
||
},
|
||
speak: {
|
||
header: "Сказал",
|
||
},
|
||
activity: {
|
||
details: "Подробности",
|
||
},
|
||
dictation: {
|
||
start: "Начать диктовку голосом",
|
||
cancel: "Отменить диктовку",
|
||
retry: "Повторить диктовку",
|
||
insert: "Вставить транскрипцию",
|
||
insertAndSend: "Вставить транскрипцию и отправить",
|
||
failed: "Диктовка не удалась: {{error}}",
|
||
failedRetry: "Диктовка не удалась. Нажмите «Повторить».",
|
||
},
|
||
question: {
|
||
submit: "Отправить",
|
||
next: "Далее",
|
||
answerPlaceholder: "Введите ответ...",
|
||
otherPlaceholder: "Другой ответ...",
|
||
},
|
||
todo: {
|
||
title: "Задачи",
|
||
empty: "Задач пока нет.",
|
||
tasksProgress: "Задачи: {{completed}}/{{total}}",
|
||
activity: {
|
||
created: "Создано задач: {{count}}",
|
||
added: "Добавлена",
|
||
started: "Начата",
|
||
completed: "Завершена",
|
||
},
|
||
},
|
||
turnFooter: {
|
||
workedFor: "Время работы: {{duration}}",
|
||
},
|
||
compaction: {
|
||
loading: "Сжатие контекста...",
|
||
auto: "Контекст сжат автоматически",
|
||
manual: "Контекст сжат вручную",
|
||
withTokens: "Контекст сжат ({{tokens}} тыс. токенов)",
|
||
completed: "Контекст сжат",
|
||
},
|
||
},
|
||
importSession: {
|
||
chooseHostTitle: en.importSession.chooseHostTitle,
|
||
title: "Импортировать сессию",
|
||
searchPlaceholder: "Поиск сессий...",
|
||
scope: {
|
||
host: "Сессии на {{host}}",
|
||
workspace: "Это рабочее пространство",
|
||
},
|
||
filters: {
|
||
all: "Все",
|
||
},
|
||
status: {
|
||
connectHost: "Подключитесь к хосту, чтобы импортировать сессии",
|
||
updateHost: "Обновите хост, чтобы импортировать сессии.",
|
||
noProviders: "Нет включённых провайдеров с поддержкой импорта.",
|
||
loading: "Загрузка недавних сессий...",
|
||
failedProvider: "Не удалось загрузить сессии провайдера {{provider}}",
|
||
failedImport: "Не удалось импортировать выбранную сессию.",
|
||
},
|
||
actions: {
|
||
refresh: "Обновить список сессий",
|
||
showAll: "Показать все",
|
||
loadMore: "Загрузить ещё",
|
||
},
|
||
preview: {
|
||
untitledSession: "Сессия без названия",
|
||
noPrompt: "Нет промпта для предварительного просмотра",
|
||
},
|
||
empty: {
|
||
noRecent: "Нет недавних сессий для импорта.",
|
||
noMatches: "Нет сессий, соответствующих запросу.",
|
||
alreadyImported: "Все недавние сессии уже импортированы.",
|
||
noProviderSessions: "Сессии провайдера {{provider}} не найдены.",
|
||
},
|
||
row: {
|
||
importing: "Импортируется...",
|
||
},
|
||
},
|
||
workspace: {
|
||
route: {
|
||
loading: "Загрузка рабочего пространства",
|
||
connecting: "Подключение",
|
||
hostOffline: "{{hostName}} не в сети",
|
||
cannotReachHost: "Не удаётся связаться с {{hostName}}",
|
||
hostStatus: "Статус хоста: {{status}}",
|
||
needsHostUpgrade: "Обновите хост, чтобы восстановить это рабочее пространство",
|
||
manageHost: "Управление хостом",
|
||
recovery: {
|
||
archivedTitle: "Рабочая область в архиве",
|
||
restoreDescription:
|
||
"Восстановите «{{workspaceName}}», чтобы вернуться к его агентам. Worktree будет использовать ветку {{branch}}.",
|
||
restoreWithoutBranchDescription:
|
||
"Восстановите «{{workspaceName}}», чтобы вернуться к его агентам. Новая ветка будет создана от сохранённой базовой или ветки репозитория по умолчанию.",
|
||
unarchiveDescription:
|
||
"Рабочее пространство «{{workspaceName}}» находится в архиве. Разархивируйте его, чтобы снова открыть.",
|
||
restoreAction: "Восстановить",
|
||
unarchiveAction: "Разархивировать",
|
||
restoringTitle: "Восстановление рабочего пространства",
|
||
restoringAction: "Восстановление...",
|
||
unavailableTitle: "Рабочая область недоступна",
|
||
checkFailedTitle: "Не удалось проверить рабочее пространство",
|
||
},
|
||
},
|
||
hoverCard: {
|
||
scriptsAccessibility: "Скрипты рабочего пространства",
|
||
copyPath: "Копировать путь",
|
||
copyBranchName: "Копировать имя ветки",
|
||
copied: "Скопировано",
|
||
},
|
||
fileActions: {
|
||
openFile: "Открыть файл",
|
||
openIn: "Открыть в {{target}}",
|
||
openToSide: "Открыть сбоку",
|
||
copyPath: "Копировать путь",
|
||
copyRelativePath: "Копировать относительный путь",
|
||
revealIn: "Показать в {{target}}",
|
||
download: "Скачать",
|
||
addToChat: "Добавить в чат",
|
||
moreActions: "Дополнительные действия",
|
||
newFile: "Новый файл",
|
||
newFolder: "Новая папка",
|
||
collapseFolder: "Свернуть папку",
|
||
rename: "Переименовать",
|
||
duplicate: "Создать копию",
|
||
revert: "Отменить изменения",
|
||
delete: "Удалить",
|
||
confirmDelete: {
|
||
fileTitle: "Удалить файл?",
|
||
folderTitle: "Удалить папку?",
|
||
message: "Элемент «{{name}}» будет удалён безвозвратно.",
|
||
confirm: "Удалить",
|
||
cancel: "Отмена",
|
||
},
|
||
confirmRevert: {
|
||
title: "Отменить изменения?",
|
||
message: "Изменения в «{{name}}» будут безвозвратно отменены.",
|
||
confirm: "Отменить",
|
||
cancel: "Отмена",
|
||
failed: "Не удалось отменить изменения",
|
||
},
|
||
},
|
||
fileExplorer: {
|
||
sort: {
|
||
name: "Имя",
|
||
modified: "Дата изменения",
|
||
size: "Размер",
|
||
},
|
||
context: {
|
||
size: "Размер",
|
||
modified: "Дата изменения",
|
||
},
|
||
actions: {
|
||
back: "Назад",
|
||
retry: "Повторить попытку",
|
||
refresh: "Обновить файлы",
|
||
refreshing: "Обновление файлов",
|
||
hideHiddenFiles: "Скрыть скрытые файлы",
|
||
showHiddenFiles: "Показать скрытые файлы",
|
||
},
|
||
empty: {
|
||
noFiles: "Нет файлов",
|
||
noVisibleFiles: "Нет видимых файлов",
|
||
},
|
||
states: {
|
||
unavailable: "Рабочее пространство недоступно",
|
||
loading: "Загрузка файлов...",
|
||
},
|
||
errors: {
|
||
failedToListDirectory: "Не удалось получить содержимое каталога",
|
||
createFailed: "Не удалось создать элемент",
|
||
renameFailed: "Не удалось переименовать элемент",
|
||
duplicateFailed: "Не удалось создать копию элемента",
|
||
revealFailed: "Не удалось показать расположение элемента",
|
||
deleteFailed: "Не удалось удалить элемент",
|
||
},
|
||
draft: {
|
||
filePlaceholder: "Имя файла",
|
||
folderPlaceholder: "Имя папки",
|
||
},
|
||
},
|
||
setup: {
|
||
descriptor: {
|
||
label: "Настройка",
|
||
completed: "Настройка завершена",
|
||
failed: "Настройка не удалась",
|
||
workspace: "Настройка рабочего пространства",
|
||
blocked: "Настройка заблокирована",
|
||
},
|
||
status: {
|
||
running: "Выполняется",
|
||
completed: "Завершено",
|
||
failed: "Завершено с ошибкой",
|
||
waiting: "Ожидание вывода команд настройки",
|
||
blocked: "Заблокировано",
|
||
},
|
||
waiting: "Настройка рабочего пространства...",
|
||
blocked: {
|
||
title: "Настройка не запускалась",
|
||
description:
|
||
"Этот PR поступил из другого репозитория — {{repository}}. Его настройка и скрипты могут выполнить код, который вы не проверяли.",
|
||
run: "Запустить настройку",
|
||
runFailed: "Не удалось запустить настройку рабочего пространства",
|
||
},
|
||
empty: {
|
||
noCommands: "Для этого рабочего пространства не выполнялись команды настройки.",
|
||
},
|
||
accessibility: {
|
||
noCommands: "Для этого рабочего пространства не выполнялись команды настройки.",
|
||
log: "Журнал настройки рабочего пространства",
|
||
},
|
||
log: {
|
||
noOutput: "Нет вывода",
|
||
},
|
||
},
|
||
browser: {
|
||
unavailable: {
|
||
title: "Встроенный браузер доступен только в настольном приложении",
|
||
subtitle:
|
||
"Откройте это рабочее пространство в Electron, чтобы использовать встроенный браузер.",
|
||
},
|
||
session: "Сеанс браузера {{browserId}}",
|
||
controls: {
|
||
back: "Назад",
|
||
forward: "Вперед",
|
||
stopLoading: "Остановить загрузку",
|
||
refresh: "Обновить",
|
||
browserUrl: "URL браузера",
|
||
enterUrl: "Введите URL",
|
||
openDevTools: "Открыть инструменты разработчика браузера",
|
||
cancelSelector: "Отменить выбор элемента",
|
||
annotateElement: "Добавить примечание к элементу",
|
||
screenshotElement: "Сделать снимок элемента",
|
||
screenshotCopied: "Снимок скопирован в буфер обмена",
|
||
elementCopied: "Элемент скопирован в буфер обмена",
|
||
screenshotFailed: "Не удалось скопировать снимок",
|
||
selectorLoading: "Дождитесь окончания загрузки страницы",
|
||
selectorFailed: "Не удалось включить режим выбора элемента",
|
||
},
|
||
annotate: {
|
||
title: "Добавить примечание к элементу",
|
||
placeholder: "Сообщение агенту об этом элементе…",
|
||
submit: "Прикрепить",
|
||
cancel: "Отмена",
|
||
},
|
||
devices: {
|
||
label: "Размер экрана устройства",
|
||
responsive: "Адаптивный режим",
|
||
},
|
||
errors: {
|
||
failedToLoad: "Не удалось загрузить страницу",
|
||
invalidUrl: "Недопустимый URL браузера",
|
||
unsupportedProtocol:
|
||
"URL браузера с неподдерживаемым протоколом заблокирован: {{protocol}}",
|
||
},
|
||
},
|
||
terminal: {
|
||
hostDisconnected: "Хост не подключён",
|
||
updateHost: "Обновите хост, чтобы использовать нативный рендерер терминала.",
|
||
unableToSubscribe: "Не удалось подключиться к терминалу",
|
||
},
|
||
sheet: {
|
||
openAsTab: "Открыть во вкладке",
|
||
},
|
||
tabs: {
|
||
loading: "Загрузка...",
|
||
modified: "Несохранённые изменения",
|
||
loadingAgentTitle: "Загрузка названия агента",
|
||
fallback: {
|
||
newAgent: "Новый агент",
|
||
setup: "Настройка",
|
||
workspaceSetup: "Настройка рабочего пространства",
|
||
terminal: "Терминал",
|
||
browser: "Браузер",
|
||
agent: "Агент",
|
||
workspace: "Рабочее пространство",
|
||
},
|
||
switcher: {
|
||
trigger: "Переключить вкладки (открыто: {{count}})",
|
||
title: "Переключить вкладку",
|
||
searchPlaceholder: "Поиск вкладок",
|
||
},
|
||
menu: {
|
||
openFor: "Открыть меню для {{label}}",
|
||
copyResumeCommand: "Копировать команду продолжения",
|
||
copyAgentId: "Скопировать идентификатор агента",
|
||
copyTerminalId: "Скопировать идентификатор терминала",
|
||
copyFilePath: "Скопировать путь к файлу",
|
||
rename: "Переименовать",
|
||
closeAbove: "Закрыть вкладки выше",
|
||
closeBelow: "Закрыть вкладки ниже",
|
||
closeLeft: "Закрыть вкладки слева",
|
||
closeRight: "Закрыть вкладки справа",
|
||
closeOthers: "Закрыть другие вкладки",
|
||
moveToMain: "Переместить на основную панель",
|
||
reloadAgent: "Перезагрузить агента",
|
||
reloadAgentTooltip: "Перезагрузите агента, чтобы обновить навыки, MCP или статус входа.",
|
||
close: "Закрыть",
|
||
renameTerminal: "Переименовать терминал",
|
||
renameAgent: "Переименовать агента",
|
||
},
|
||
actions: {
|
||
newTab: "Новая вкладка",
|
||
newAgent: "Новый агент",
|
||
newTerminal: "Новый терминал",
|
||
preparingTerminal: "Подготовка вкладки терминала",
|
||
preparingTerminalTooltip: "Подготовка терминала...",
|
||
newBrowser: "Новый браузер",
|
||
maximizePane: "Развернуть панель",
|
||
restorePane: "Восстановить панель",
|
||
closePane: "Закрыть панель",
|
||
exitFocusMode: "Выйти из режима фокусировки",
|
||
splitRight: "Разделить панель справа",
|
||
splitDown: "Разделить панель снизу",
|
||
changes: "Изменения",
|
||
files: "Файлы",
|
||
pullRequest: "PR",
|
||
terminalProfilesMenu: "Профили терминала",
|
||
editTerminalProfiles: "Изменить профили",
|
||
},
|
||
explorerSidebar: {
|
||
open: "Открыть боковую панель",
|
||
close: "Закрыть боковую панель",
|
||
toggle: "Переключить боковую панель",
|
||
changes: "Изменения",
|
||
files: "Файлы",
|
||
},
|
||
toasts: {
|
||
copyFailed: "Не удалось скопировать",
|
||
agentIdCopiedLabel: "ID агента",
|
||
terminalIdCopiedLabel: "Идентификатор терминала",
|
||
resumeCommandCopiedLabel: "команда продолжения",
|
||
filePathCopiedLabel: "Путь к файлу",
|
||
resumeIdUnavailable: "ID возобновления недоступен",
|
||
resumeCommandUnavailable: "Команда возобновления недоступна",
|
||
reloadingAgent: "Перезагрузка агента...",
|
||
reloadedAgent: "Агент перезагружен",
|
||
failedToReloadAgent: "Не удалось перезагрузить агента",
|
||
failedToCloseAgent: "Не удалось закрыть агента",
|
||
},
|
||
confirmations: {
|
||
unsavedTitle: "Несохранённые изменения",
|
||
unsavedMessage:
|
||
"В этой вкладке есть несохранённые изменения. При закрытии черновик будет удалён.",
|
||
closeWithoutSaving: "Закрыть без сохранения",
|
||
closePaneTitle: "Закрыть панель?",
|
||
bulkUnsaved:
|
||
"Вкладок с несохранёнными изменениями: {{count}}. При закрытии черновики будут удалены.",
|
||
close: "Закрыть",
|
||
cancel: "Отмена",
|
||
archive: "Архивировать",
|
||
closeTerminalTitle: "Закрыть терминал?",
|
||
closeTerminalMessage:
|
||
"Любой запущенный процесс в этом терминале будет немедленно остановлен.",
|
||
archiveRunningAgentTitle: "Архивировать работающего агента?",
|
||
archiveRunningAgentMessage:
|
||
"Этот агент всё ещё работает. При архивировании агент будет остановлен, а вкладка закрыта.",
|
||
closeTabsLeftTitle: "Закрыть вкладки слева?",
|
||
closeTabsRightTitle: "Закрыть вкладки справа?",
|
||
closeOtherTabsTitle: "Закрыть другие вкладки?",
|
||
bulk: {
|
||
all: "Будут архивированы агенты ({{agents}}), закрыты терминалы ({{terminals}}) и вкладки ({{tabs}}). Все запущенные процессы в закрытых терминалах будут немедленно остановлены.",
|
||
agentsAndTerminals:
|
||
"Будут архивированы агенты ({{agents}}) и закрыты терминалы ({{terminals}}). Все запущенные процессы в закрытых терминалах будут немедленно остановлены.",
|
||
terminalsAndTabs:
|
||
"Будут закрыты терминалы ({{terminals}}) и вкладки ({{tabs}}). Все запущенные процессы в закрытых терминалах будут немедленно остановлены.",
|
||
agentsAndTabs: "Будут архивированы агенты ({{agents}}) и закрыты вкладки ({{tabs}}).",
|
||
terminals:
|
||
"Будут закрыты терминалы ({{terminals}}). Все запущенные процессы в них будут немедленно остановлены.",
|
||
tabs: "Будут закрыты вкладки ({{tabs}}).",
|
||
agents: "Будут архивированы агенты ({{agents}}).",
|
||
},
|
||
},
|
||
},
|
||
header: {
|
||
actions: {
|
||
workspaceActions: "Действия с рабочим пространством",
|
||
newAgent: "Новый агент",
|
||
newTerminal: "Новый терминал",
|
||
newBrowser: "Новая вкладка браузера",
|
||
importSession: "Импортировать сессию",
|
||
copyPath: "Скопировать путь к рабочему пространству",
|
||
copyBranchName: "Скопировать название ветки",
|
||
showSetup: "Показать настройку рабочего пространства",
|
||
},
|
||
toasts: {
|
||
workspacePathUnavailable: "Путь к рабочему пространству пока недоступен.",
|
||
branchNameUnavailable: "Имя ветки недоступно",
|
||
terminalQueued:
|
||
"Рабочее пространство подготавливается. Терминал откроется, когда оно будет готово...",
|
||
workspacePathCopiedLabel: "Путь к рабочему пространству",
|
||
branchNameCopiedLabel: "Имя ветки",
|
||
},
|
||
},
|
||
scripts: {
|
||
title: "Скрипты",
|
||
actions: {
|
||
chooseUrl: "Выбрать URL",
|
||
copyUrl: "Скопировать URL",
|
||
openService: "Открыть сервис",
|
||
restart: "Перезапустить",
|
||
run: "Запустить",
|
||
stop: "Остановить",
|
||
view: "Открыть терминал",
|
||
},
|
||
accessibility: {
|
||
trigger: "Скрипты рабочего пространства",
|
||
openService: "Открыть сервис {{scriptName}}",
|
||
viewTerminal: "Открыть терминал скрипта {{scriptName}}",
|
||
runScript: "Запустить скрипт {{scriptName}}",
|
||
stopScript: "Остановить скрипт {{scriptName}}",
|
||
restartScript: "Перезапустить скрипт {{scriptName}}",
|
||
copyUrl: "Скопировать URL скрипта {{scriptName}}",
|
||
chooseUrl: "Выбрать URL для {{scriptName}}",
|
||
script: "Скрипт {{scriptName}}",
|
||
},
|
||
routes: {
|
||
public: "Обратный прокси",
|
||
paseo: "Запоминающийся адрес",
|
||
direct: "Прямой адрес",
|
||
},
|
||
states: {
|
||
exitCode: "Код выхода: {{code}}",
|
||
startFailed: "Не удалось запустить скрипт {{scriptName}}",
|
||
stopFailed: "Не удалось остановить скрипт {{scriptName}}",
|
||
},
|
||
},
|
||
tree: {
|
||
showFolderTree: "Показать дерево папок",
|
||
hideFolderTree: "Скрыть дерево папок",
|
||
},
|
||
git: {
|
||
actions: {
|
||
moreOptions: "Дополнительные параметры",
|
||
moreActions: "Дополнительные действия",
|
||
commit: {
|
||
label: "Создать коммит",
|
||
pending: "Создание коммита...",
|
||
success: "Коммит создан",
|
||
},
|
||
pull: {
|
||
label: "Получить изменения",
|
||
pending: "Получение изменений...",
|
||
success: "Изменения получены",
|
||
},
|
||
push: {
|
||
label: "Отправить изменения",
|
||
pending: "Отправка изменений...",
|
||
success: "Изменения отправлены",
|
||
},
|
||
pullAndPush: {
|
||
label: "Получить и отправить изменения",
|
||
pending: "Получение и отправка изменений...",
|
||
success: "Изменения получены и отправлены",
|
||
},
|
||
viewPr: "Посмотреть PR",
|
||
createPr: {
|
||
label: "Создать PR",
|
||
pending: "Создание PR...",
|
||
success: "PR создан",
|
||
label_mr: "Создать MR",
|
||
pending_mr: "Создание MR...",
|
||
success_mr: "MR создан",
|
||
},
|
||
mergeBranch: {
|
||
label: "Выполнить слияние локально",
|
||
pending: "Слияние...",
|
||
success: "Слияние выполнено",
|
||
},
|
||
mergeFromBase: {
|
||
label: "Обновить из {{baseRef}}",
|
||
pending: "Обновление...",
|
||
success: "Обновлено",
|
||
},
|
||
archive: {
|
||
label: "Архивировать рабочее пространство",
|
||
pending: "Архивирование...",
|
||
success: "В архиве",
|
||
},
|
||
mergePr: {
|
||
squash: "Выполнить слияние PR (squash)",
|
||
merge: "Выполнить слияние PR (merge)",
|
||
rebase: "Выполнить слияние PR (rebase)",
|
||
pending: "Слияние PR...",
|
||
success: "Слияние PR выполнено",
|
||
squash_mr: "Выполнить слияние MR (squash)",
|
||
merge_mr: "Выполнить слияние MR (merge)",
|
||
rebase_mr: "Выполнить слияние MR (rebase)",
|
||
pending_mr: "Слияние MR...",
|
||
success_mr: "Слияние MR выполнено",
|
||
},
|
||
viewPr_mr: "Посмотреть MR",
|
||
autoMerge: {
|
||
enableSquash: "Включить автослияние (squash)",
|
||
enableMerge: "Включить автослияние (merge)",
|
||
enableRebase: "Включить автослияние (rebase)",
|
||
enabled: "Автослияние включено",
|
||
enabling: "Включение автослияния...",
|
||
disabling: "Отключение автослияния...",
|
||
disabled: "Автослияние отключено",
|
||
},
|
||
unavailable: {
|
||
viewPrNoForge: "Просмотр {{noun}} сейчас недоступен: {{brand}} не подключён.",
|
||
pullNoRemote:
|
||
"Получение изменений недоступно: эта ветка ещё не связана с удалённым репозиторием.",
|
||
pullDirty:
|
||
"Получение изменений недоступно при наличии локальных изменений. Сначала создайте коммит или сохраните изменения в stash.",
|
||
pullUpToDate: "Получение изменений недоступно: ветка уже в актуальном состоянии.",
|
||
pushNoRemote:
|
||
"Отправка изменений недоступна: эта ветка ещё не связана с удалённым репозиторием.",
|
||
pushBehind: "Отправка изменений пока недоступна: сначала получите более новые изменения.",
|
||
pushNothing: "Отправка изменений недоступна: нет новых изменений для отправки.",
|
||
pullAndPushNoRemote:
|
||
"Получение и отправка изменений недоступны: эта ветка ещё не связана с удалённым репозиторием.",
|
||
pullAndPushDirty:
|
||
"Получение и отправка изменений недоступны при наличии локальных изменений. Сначала создайте коммит или сохраните изменения в stash.",
|
||
pullAndPushNoIncoming:
|
||
"Получение и отправка изменений недоступны: нет входящих изменений для получения.",
|
||
pullAndPushInSync:
|
||
"Получение и отправка изменений недоступны: ветка уже синхронизирована.",
|
||
pullAndPushNothingToPush:
|
||
"Получение и отправка изменений недоступны: после получения нечего отправлять.",
|
||
createPrNoForge: "Создание {{noun}} сейчас недоступно: {{brand}} не подключён.",
|
||
createPrNoCommits: "Создание PR недоступно: в этой ветке пока нет новых коммитов.",
|
||
mergeNoBase: "Слияние недоступно: не удалось определить базовую ветку.",
|
||
mergeDirty:
|
||
"Слияние недоступно при наличии локальных изменений. Сначала создайте коммит или сохраните изменения в stash.",
|
||
mergeNothing: "Слияние недоступно: в этой ветке пока нет новых изменений для слияния.",
|
||
updateNoBase: "Обновление недоступно: не удалось определить базовую ветку.",
|
||
updateDirty:
|
||
"Обновление недоступно при наличии локальных изменений. Сначала создайте коммит или сохраните изменения в stash.",
|
||
updateCurrent: "Обновление недоступно: эта ветка уже синхронизирована с {{baseRef}}.",
|
||
mergePrNoGithub: "Слияние PR сейчас недоступно: GitHub не подключён.",
|
||
archiveNotWorktree:
|
||
"Архивирование недоступно: это рабочее пространство не было создано как worktree Paseo.",
|
||
mergePrNoForge: "Слияние {{noun}} сейчас недоступно: {{brand}} не подключён.",
|
||
mergePrMissing: "Слияние PR недоступно: PR ещё не создан.",
|
||
mergePrDraft: "Слияние PR недоступно: PR всё ещё является черновиком.",
|
||
mergePrMerged: "Слияние PR недоступно: PR уже объединён.",
|
||
mergePrClosed: "Слияние PR недоступно: PR закрыт.",
|
||
mergePrConflicts: "Слияние PR недоступно: в PR есть конфликты слияния.",
|
||
mergePrQueue: "Слияние PR недоступно: в этом репозитории используется очередь слияния.",
|
||
mergePrNotReady:
|
||
"Функция слияния {{noun}} недоступна до тех пор, пока {{brand}} не сообщит, что {{noun}} готов к слиянию.",
|
||
autoMergeCannotDisable:
|
||
"Автослияние включено, но эта учётная запись не может его отключить.",
|
||
},
|
||
toasts: {
|
||
failedCommit: "Не удалось создать коммит",
|
||
failedPull: "Не удалось получить изменения",
|
||
failedPush: "Не удалось отправить изменения",
|
||
failedPullAndPush: "Не удалось получить и отправить изменения",
|
||
failedCreatePr: "Не удалось создать PR.",
|
||
failedMergePr: "Не удалось выполнить слияние PR",
|
||
failedEnableAutoMerge: "Не удалось включить автослияние",
|
||
failedDisableAutoMerge: "Не удалось отключить автослияние",
|
||
baseRefUnavailable: "Базовая ветка недоступна",
|
||
failedMerge: "Не удалось выполнить слияние",
|
||
failedMergeFromBase: "Не удалось выполнить слияние с базовой веткой",
|
||
},
|
||
archiveWarning: {
|
||
title: "Архивировать «{{workspaceName}}»?",
|
||
confirm: "Архивировать",
|
||
cancel: "Отмена",
|
||
uncommittedChanges: "Незафиксированные изменения",
|
||
uncommittedChangesWithDiff: "Незафиксированные изменения ({{diffStat}})",
|
||
addedLine: "Добавлено строк: {{count}}",
|
||
addedLines: "Добавлено строк: {{count}}",
|
||
deletedLine: "Удалено строк: {{count}}",
|
||
deletedLines: "Удалено строк: {{count}}",
|
||
unpushedCommit: "Неотправленных коммитов: {{count}}",
|
||
unpushedCommits: "Неотправленных коммитов: {{count}}",
|
||
},
|
||
},
|
||
diff: {
|
||
openChangesTab: "Открыть вкладку «Изменения»",
|
||
openDiffTab: "Открыть вкладку «Дифф»",
|
||
closeChangesTab: "Закрыть вкладку «Изменения»",
|
||
jumpToFile: {
|
||
title: "Перейти к файлу",
|
||
},
|
||
binaryFile: "Бинарный файл",
|
||
tooLarge: "Дифф слишком велик для отображения",
|
||
previewTooLargeTitle: "Этот дифф слишком велик для предварительного просмотра",
|
||
previewTooLargeDescription: "Сузьте диапазон сравнения, чтобы просмотреть дифф здесь",
|
||
unified: "Унифицированный дифф",
|
||
split: "Параллельный дифф",
|
||
switchToUnified: "Переключиться на унифицированный дифф",
|
||
switchToSplit: "Переключиться на параллельный дифф",
|
||
options: "Параметры диффа",
|
||
inlineDiff: "Встроенный дифф",
|
||
hideWhitespace: "Скрыть пробельные изменения",
|
||
showWhitespace: "Показать пробельные изменения",
|
||
scrollLongLines: "Прокручивать длинные строки",
|
||
wrapLongLines: "Перенос длинных строк",
|
||
collapseAllFolders: "Свернуть все папки",
|
||
expandAllFolders: "Развернуть все папки",
|
||
collapseAllFiles: "Свернуть все файлы",
|
||
expandAllFiles: "Развернуть все файлы",
|
||
refreshing: "Обновление",
|
||
refresh: "Обновить",
|
||
refreshState: "Обновить состояние Git и {{brand}}",
|
||
failedRefresh: "Не удалось обновить состояние Git.",
|
||
seeUncommittedChanges: "Показать незафиксированные изменения",
|
||
seeCommittedChanges: "Показать зафиксированные изменения",
|
||
checkingRepository: "Проверяем репозиторий...",
|
||
notRepository: "Это не репозиторий Git",
|
||
diffMode: "Режим диффа",
|
||
uncommitted: "Незафиксированные изменения",
|
||
committed: "Зафиксированные изменения",
|
||
branchUnknown: "Неизвестная ветка",
|
||
base: "базовая ветка",
|
||
newFile: "Новый",
|
||
deletedFile: "Файл удалён",
|
||
modifiedFile: "Файл изменён",
|
||
commits: {
|
||
title: "Коммиты",
|
||
countLabel: "Коммитов в рабочем пространстве: {{count}}",
|
||
noneAhead: "Пока нет коммитов, отсутствующих в {{baseRef}}",
|
||
fileDiffEmpty: "Нет изменений для отображения",
|
||
fileDiffError: "Не удалось загрузить дифф файла",
|
||
loading: "Загрузка коммитов…",
|
||
loadError: "Не удалось загрузить коммиты",
|
||
empty: "Коммитов пока нет",
|
||
},
|
||
},
|
||
openInEditor: {
|
||
open: "Открыть",
|
||
chooseEditor: "Выбрать редактор",
|
||
openIn: "Открыть рабочее пространство в {{target}}",
|
||
openFileIn: "Открыть {{fileName}} в {{target}}",
|
||
failedOpen: "Не удалось открыть рабочее пространство",
|
||
},
|
||
pr: {
|
||
actions: {
|
||
viewPullRequest: "Просмотреть",
|
||
openOn: "Открыть на {{brand}}",
|
||
addToChat: "Добавить в чат",
|
||
addAllToChat: "Добавить всё в чат",
|
||
addingToChat: "Добавление...",
|
||
},
|
||
checksOverview: {
|
||
headline: {
|
||
actionRequired: "Некоторые проверки требуют внимания",
|
||
failure: "Некоторые проверки не пройдены",
|
||
pending: "Некоторые проверки ещё не завершены",
|
||
success: "Все проверки пройдены",
|
||
none: "Нет проверок",
|
||
},
|
||
count: {
|
||
actionRequired: "требует действий: {{count}}",
|
||
warning: "с предупреждением: {{count}}",
|
||
failure: "не пройдено: {{count}}",
|
||
pending: "выполняется: {{count}}",
|
||
manual: "вручную: {{count}}",
|
||
success: "пройдено: {{count}}",
|
||
ignored: "пропущено: {{count}}",
|
||
},
|
||
detailOne: "Проверка ({{parts}})",
|
||
detailMany: "Проверки ({{parts}})",
|
||
groupOne: {
|
||
actionRequired: "Требует действий: {{count}}",
|
||
warning: "С предупреждением: {{count}}",
|
||
failure: "Не пройдена: {{count}}",
|
||
pending: "Выполняется: {{count}}",
|
||
manual: "Ручная: {{count}}",
|
||
success: "Пройдена: {{count}}",
|
||
ignored: "Пропущена: {{count}}",
|
||
},
|
||
groupMany: {
|
||
actionRequired: "Требуют действий: {{count}}",
|
||
warning: "С предупреждением: {{count}}",
|
||
failure: "Не пройдены: {{count}}",
|
||
pending: "Выполняются: {{count}}",
|
||
manual: "Ручные: {{count}}",
|
||
success: "Пройдены: {{count}}",
|
||
ignored: "Пропущены: {{count}}",
|
||
},
|
||
},
|
||
checksSummary: {
|
||
passedLabel: "успешно",
|
||
failedLabel: "ошибка",
|
||
runningLabel: "выполняется",
|
||
passedAccessible: "Проверки пройдены",
|
||
failedAccessible: "Проверки не пройдены",
|
||
runningAccessible: "Проверки выполняются",
|
||
},
|
||
sections: {
|
||
checks: "Проверки",
|
||
pipeline: "Пайплайн",
|
||
reviews: "Ревью",
|
||
activity: "Активность",
|
||
},
|
||
empty: {
|
||
noJobs: "Нет заданий",
|
||
loadingPipeline: "Загрузка пайплайна...",
|
||
pipelineJobsLoadFailed: "Не удалось загрузить задания пайплайна",
|
||
allowedToFail: "допускается сбой",
|
||
noActivity: "Активности пока нет",
|
||
},
|
||
approvals: "Одобрено: {{given}} из {{required}}",
|
||
accessibility: {
|
||
pullRequest: "PR #{{number}}",
|
||
pullRequest_mr: "MR !{{number}}",
|
||
commentActions: "Действия с комментарием",
|
||
threadActions: "Действия с обсуждением",
|
||
checkStatus: {
|
||
passed: "Успешно",
|
||
failed: "Ошибка",
|
||
warning: "Предупреждение",
|
||
actionRequired: "Требуется действие",
|
||
manual: "Вручную",
|
||
pending: "Ожидание",
|
||
skipped: "Пропущено",
|
||
cancelled: "Отменено",
|
||
},
|
||
},
|
||
states: {
|
||
draft: "Черновик",
|
||
merged: "Объединён",
|
||
closed: "Закрыт",
|
||
open: "Открыт",
|
||
},
|
||
activity: {
|
||
commented: "Оставлен комментарий",
|
||
approved: "Одобрено",
|
||
requestedChanges: "Запрошены изменения",
|
||
reviewed: "Проведено ревью",
|
||
},
|
||
time: {
|
||
justNow: "прямо сейчас",
|
||
},
|
||
thread: {
|
||
discussion: "Ветка обсуждения",
|
||
resolved: "Решено",
|
||
outdated: "Устарело",
|
||
},
|
||
errors: {
|
||
statusLoadFailed: "Не удалось загрузить статус PR",
|
||
activityLoadFailed: "Не удалось загрузить активность PR",
|
||
},
|
||
},
|
||
forgeSetup: {
|
||
installCli: "Установите CLI {{cli}}, чтобы использовать возможности {{brand}}.",
|
||
signIn: "Выполните {{command}}, чтобы использовать возможности {{brand}}.",
|
||
generic: "Настройте {{brand}} на этом хосте, чтобы использовать его функции.",
|
||
},
|
||
},
|
||
},
|
||
workspaceLabels: {
|
||
title: "Метки",
|
||
unlabelled: "Без метки",
|
||
create: "Создать метку",
|
||
createConfirm: "Создать",
|
||
creating: "Создание…",
|
||
name: "Название метки",
|
||
updateHostUse: "Обновите этот хост, чтобы использовать метки.",
|
||
errors: { update: "Не удалось обновить метку", load: "Не удалось загрузить метки" },
|
||
colors: {
|
||
violet: "Фиолетовый",
|
||
sky: "Голубой",
|
||
emerald: "Изумрудный",
|
||
orange: "Оранжевый",
|
||
pink: "Розовый",
|
||
indigo: "Индиго",
|
||
teal: "Бирюзовый",
|
||
red: "Красный",
|
||
amber: "Янтарный",
|
||
blue: "Синий",
|
||
},
|
||
filter: {
|
||
clear: "Очистить фильтр",
|
||
},
|
||
manage: {
|
||
open: "Управление метками…",
|
||
title: "Управление метками",
|
||
search: "Поиск меток",
|
||
empty: "На этом хосте нет меток.",
|
||
edit: "Изменить метку",
|
||
editLabel: "Изменить метку «{{name}}»",
|
||
name: "Название",
|
||
color: "Цвет",
|
||
save: "Сохранить",
|
||
delete: "Удалить",
|
||
deleteTitle: "Удалить метку «{{name}}»?",
|
||
deleteMessage_one: "Метка будет снята с {{count}} рабочего пространства на этом хосте.",
|
||
deleteMessage_other: "Метка будет снята с {{count}} рабочих пространств на этом хосте.",
|
||
offline: "Этот хост не в сети.",
|
||
updateHost: "Обновите этот хост для управления метками.",
|
||
},
|
||
},
|
||
changelog: {
|
||
title: "Что нового",
|
||
installed: "Установлена",
|
||
showMore: "Показать ещё",
|
||
openWebsite: "Полный список изменений",
|
||
error: {
|
||
title: "Не удалось загрузить список изменений",
|
||
description: "Проверьте подключение и попробуйте снова.",
|
||
},
|
||
},
|
||
sidebar: {
|
||
statusGroupAccessibility: "Группа «{{label}}»",
|
||
statusBucket: {
|
||
needsInput: "Ожидает ввода",
|
||
failed: "Ошибка",
|
||
readyToReview: "На проверку",
|
||
working: "В работе",
|
||
done: "Готово",
|
||
},
|
||
display: {
|
||
showBackground: "Показать фоновые пространства",
|
||
trigger: "Настройки отображения",
|
||
heading: "Отображение",
|
||
grouping: {
|
||
label: "Группировка",
|
||
project: "Проект",
|
||
status: "Статус",
|
||
labels: "Метки",
|
||
},
|
||
titleSource: {
|
||
label: "Заголовок",
|
||
title: "Заголовок",
|
||
branch: "Имя ветки",
|
||
},
|
||
show: {
|
||
label: "Показывать",
|
||
branch: "Ветка",
|
||
project: "Проект",
|
||
host: "Хост",
|
||
changeRequest: "PR",
|
||
checks: "Проверки",
|
||
services: "Сервисы",
|
||
labels: "Метки",
|
||
diff: "Статистика изменений",
|
||
timestamp: "Последняя активность",
|
||
},
|
||
checks: {
|
||
iconAndText: "Значок и текст",
|
||
icon: "Только значок",
|
||
none: "Скрыто",
|
||
},
|
||
hostFilter: {
|
||
label: "Хост",
|
||
all: "Все хосты",
|
||
},
|
||
projectFilter: {
|
||
label: "Проект",
|
||
all: "Все проекты",
|
||
},
|
||
},
|
||
filterEmpty: {
|
||
title: "Нет подходящих рабочих пространств",
|
||
description:
|
||
"Измените или очистите фильтры боковой панели, чтобы увидеть рабочие пространства.",
|
||
clear: "Очистить фильтры",
|
||
},
|
||
pinned: {
|
||
title: "Закреплённые",
|
||
},
|
||
host: {
|
||
noHost: "Нет хоста",
|
||
switchTitle: "Сменить хост",
|
||
searchPlaceholder: "Поиск хостов...",
|
||
},
|
||
actions: {
|
||
addProject: "Добавить проект",
|
||
newWorkspace: "Новое рабочее пространство",
|
||
hosts: "Хосты",
|
||
settings: "Настройки",
|
||
closeSidebar: "Закрыть боковую панель",
|
||
},
|
||
footer: {
|
||
usage: "Использование",
|
||
},
|
||
help: {
|
||
trigger: "Помощь и поддержка",
|
||
sectionHelp: "Помощь",
|
||
diagnostics: "Запустить диагностику",
|
||
shortcuts: "Сочетания клавиш",
|
||
reportIssue: "Сообщить о проблеме",
|
||
discord: "Discord",
|
||
github: "Создать issue на GitHub",
|
||
whatsNew: "Что нового",
|
||
appName: "Paseo",
|
||
},
|
||
sections: {
|
||
sessions: "История",
|
||
search: "Поиск",
|
||
schedules: "Расписания",
|
||
},
|
||
worktreeSetup: {
|
||
title: "Настроить скрипты worktree",
|
||
description:
|
||
"Добавьте команды настройки для автоматической установки зависимостей и подготовки новых worktree.",
|
||
openProjectSettings: "Открыть настройки проекта",
|
||
},
|
||
project: {
|
||
actions: {
|
||
menu: "Действия проекта",
|
||
openSettings: "Открыть настройки проекта",
|
||
openNewWindow: "Открыть в новом окне",
|
||
openNewWindowFailed: "Не удалось открыть новое окно",
|
||
openFolder: "Открыть в файловом менеджере",
|
||
openFolderFailed: "Не удалось открыть папку",
|
||
remove: "Удалить проект",
|
||
removing: "Удаление...",
|
||
},
|
||
confirmations: {
|
||
removeTitle: "Удалить проект?",
|
||
removeMessage:
|
||
"Удалить проект «{{projectName}}» с боковой панели?\n\nФайлы на диске не будут изменены.",
|
||
removeConfirm: "Удалить",
|
||
cancel: "Отмена",
|
||
},
|
||
toasts: {
|
||
hostDisconnected: "Хост не подключён",
|
||
removeFailed: "Не удалось удалить некоторые рабочие пространства.",
|
||
updateHostToRemove: "Обновите хост, чтобы удалять проекты.",
|
||
},
|
||
empty: {
|
||
title: "Пока нет проектов",
|
||
description: "Добавьте проект, чтобы начать работу",
|
||
},
|
||
},
|
||
workspace: {
|
||
status: {
|
||
serviceRunning: "Сервис {{name}} запущен",
|
||
serviceUnhealthy: "Сервис {{name}} работает некорректно",
|
||
creating: "Создание...",
|
||
},
|
||
checks: {
|
||
passed: "Успешные: {{count}}",
|
||
failed: "Ошибки: {{count}}",
|
||
warning: "Предупреждения: {{count}}",
|
||
actionRequired: "Требуется действие: {{count}}",
|
||
manual: "Вручную: {{count}}",
|
||
pending: "Ожидают: {{count}}",
|
||
},
|
||
actions: {
|
||
menu: "Действия рабочего пространства",
|
||
newWorkspace: "Новое рабочее пространство",
|
||
showMore: "Показать ещё",
|
||
showLess: "Показать меньше",
|
||
createWorkspaceFor: "Создать новое рабочее пространство для {{projectName}}",
|
||
copyPath: "Копировать путь",
|
||
copyBranchName: "Скопировать имя ветки",
|
||
rename: "Переименовать рабочее пространство",
|
||
pin: "Закрепить вверху",
|
||
unpin: "Открепить",
|
||
archive: "Архивировать",
|
||
archiveWorkspace: "Архивировать рабочее пространство",
|
||
hideFromSidebar: "Скрыть на боковой панели",
|
||
archiving: "Архивирование...",
|
||
hiding: "Скрытие...",
|
||
},
|
||
confirmations: {
|
||
hideTitle: "Скрыть рабочее пространство?",
|
||
hideMessage:
|
||
"Скрыть «{{workspaceName}}» на боковой панели?\n\nФайлы на диске не будут изменены.",
|
||
hideConfirm: "Скрыть",
|
||
cancel: "Отмена",
|
||
},
|
||
rename: {
|
||
title: "Переименовать рабочее пространство",
|
||
submit: "Переименовать",
|
||
invalidBranchName: "Недопустимое имя ветки",
|
||
},
|
||
toasts: {
|
||
workspacePathUnavailable: "Путь к рабочему пространству недоступен",
|
||
pathCopied: "Путь скопирован",
|
||
branchNameCopied: "Имя ветки скопировано",
|
||
hostDisconnected: "Хост не подключён",
|
||
hideFailed: "Не удалось скрыть рабочее пространство",
|
||
archiveFailed: "Не удалось архивировать рабочее пространство",
|
||
},
|
||
},
|
||
},
|
||
newWorkspace: {
|
||
title: "Новое рабочее пространство",
|
||
create: "Создать",
|
||
isolation: {
|
||
local: "Локально",
|
||
worktree: "Новый worktree",
|
||
label: "Изоляция",
|
||
},
|
||
fields: {
|
||
project: "Проект",
|
||
base: "Базовая ветка",
|
||
baseNotApplicable: "Неприменимо",
|
||
},
|
||
titlePlaceholder: "Заголовок (необязательно)",
|
||
errors: {
|
||
hostDisconnected: "Хост не подключён",
|
||
createWorktreeFailed: "Не удалось создать worktree.",
|
||
composerStateRequired: "Редактор сообщения ещё не готов.",
|
||
selectModel: "Выберите модель",
|
||
},
|
||
tooltips: {
|
||
project: "Выберите проект",
|
||
host: "Выберите хост",
|
||
isolation: "Выберите уровень изоляции",
|
||
startingRef: "Выберите, с чего начать",
|
||
launch: "Выберите, что запустить",
|
||
},
|
||
refPicker: {
|
||
startingRef: "Исходная точка",
|
||
intoBase: "в ветку {{baseRef}}",
|
||
searching: "Идет поиск...",
|
||
noMatchingRefs: "Нет подходящих веток или PR.",
|
||
searchPlaceholder: "Поиск веток и PR",
|
||
title: "Начать с",
|
||
},
|
||
launch: {
|
||
title: "Что запустить",
|
||
chat: "Чат",
|
||
terminal: "Терминал",
|
||
manageProfiles: "Управление профилями терминала",
|
||
submit: "Запустить",
|
||
promptPlaceholder: "Промпт для {{name}}",
|
||
commandPlaceholder:
|
||
"Введите команду или оставьте поле пустым, чтобы открыть терминал без запуска команды",
|
||
},
|
||
},
|
||
desktop: {
|
||
windowControls: {
|
||
minimize: "Свернуть окно",
|
||
maximize: "Развернуть окно",
|
||
restore: "Восстановить окно",
|
||
close: "Закрыть окно",
|
||
},
|
||
quitting: {
|
||
title: "Завершение работы Paseo...",
|
||
detail: "Остановка локального демона.",
|
||
},
|
||
daemon: {
|
||
lifecycle: en.desktop.daemon.lifecycle,
|
||
title: "Демон",
|
||
status: {
|
||
title: "Статус",
|
||
builtInOnly: "Здесь показан только встроенный демон настольного приложения.",
|
||
running: "работает",
|
||
notRunning: "не работает",
|
||
pid: "PID {{pid}}",
|
||
},
|
||
management: {
|
||
title: "Управление встроенным демоном",
|
||
hint: "Разрешить Paseo запускать и останавливать встроенный демон",
|
||
pauseTitle: "Приостановить встроенный демон",
|
||
pauseMessage:
|
||
"Это немедленно остановит встроенный демон. Запущенные агенты и терминалы, подключенные к встроенному демону, будут остановлены.",
|
||
pauseAndStop: "Приостановить управление и остановить демон",
|
||
registrationFailed:
|
||
"Встроенный демон запущен, но Paseo не удалось сохранить подключение к localhost. Выключите и снова включите управление демоном или добавьте localhost вручную.",
|
||
pausedStopFailed:
|
||
"Встроенное управление демоном было приостановлено, но Paseo не смог остановить демон.",
|
||
updateFailed: "Не удалось изменить настройки управления встроенным демоном.",
|
||
},
|
||
keepRunning: {
|
||
title: "Продолжать работу демона после выхода",
|
||
hint: "Демон продолжит работать после выхода из Paseo",
|
||
},
|
||
logs: {
|
||
title: "Файл журнала",
|
||
modalTitle: "Журналы демона",
|
||
unavailable: "Путь к журналу недоступен",
|
||
empty: "(файл журнала пуст)",
|
||
copied: "Путь к журналу скопирован.",
|
||
copyFailed: "Не удалось скопировать путь к журналу.",
|
||
open: "Открыть журналы",
|
||
copyPath: "Копировать путь",
|
||
},
|
||
fullStatus: {
|
||
title: "Полный статус",
|
||
modalTitle: "Статус демона",
|
||
hint: "Выполняет команду `paseo daemon status` и показывает результат",
|
||
view: "Посмотреть статус",
|
||
copied: "Статус скопирован в буфер обмена.",
|
||
fetchFailed: "Не удалось получить статус демона: {{message}}",
|
||
},
|
||
advancedSettings: "Расширенные настройки",
|
||
openAdvancedSettings: "Открыть дополнительные настройки демона",
|
||
versionMismatch:
|
||
"Версии приложения и демона не совпадают. Обновите приложение и демон до одной версии, чтобы избежать проблем.",
|
||
loadFailed: "Не удалось загрузить статус встроенного демона.",
|
||
},
|
||
updates: {
|
||
status: {
|
||
checking: "Проверка обновлений приложения...",
|
||
installing: "Установка обновления приложения...",
|
||
upToDate: "Установлена последняя версия приложения.",
|
||
upToDateWithLastChecked:
|
||
"Установлена последняя версия приложения. Последняя проверка: {{time}}.",
|
||
pending: "Мы сообщим вам, когда обновление будет готово.",
|
||
pendingWithLastChecked:
|
||
"Мы сообщим вам, когда обновление будет готово. Последняя проверка в {{time}}.",
|
||
pendingWithVersion: "Найдено обновление: {{version}}. Загрузка...",
|
||
pendingWithVersionAndLastChecked:
|
||
"Найдено обновление: {{version}}. Загрузка... Последняя проверка в {{time}}.",
|
||
availableWithVersion: "Обновление готово: {{version}}",
|
||
availableWithVersionAndLastChecked:
|
||
"Обновление готово: {{version}}. Последняя проверка: {{time}}.",
|
||
available: "Обновление приложения готово к установке.",
|
||
availableWithLastChecked:
|
||
"Обновление приложения готово к установке. Последняя проверка в {{time}}.",
|
||
installed: "Обновление приложения установлено. Требуется перезапуск.",
|
||
failed: "Не удалось обновить приложение.",
|
||
idle: "Статус обновления ещё не проверен.",
|
||
},
|
||
installError: "Не удалось установить обновление настольного приложения.",
|
||
callout: {
|
||
installingTitle: "Установка обновления",
|
||
failedTitle: "Обновление не выполнено",
|
||
availableTitle: "Доступно обновление",
|
||
genericError: "Что-то пошло не так.",
|
||
whatsNew: "Что нового",
|
||
installingAction: "Установка...",
|
||
installAndRestart: "Установить и перезапустить",
|
||
installingDescription: "Установка и перезапуск...",
|
||
versionReady: "Версия {{version}} готова к установке.",
|
||
newVersionReady: "Новая версия готова к установке.",
|
||
restartWarning:
|
||
"При обновлении приложения работающие агенты будут остановлены, а сеансы терминала закрыты.",
|
||
},
|
||
},
|
||
settings: {
|
||
loadFailed: "Не удалось загрузить настройки настольного приложения.",
|
||
saveFailed: "Не удалось сохранить настройки настольного приложения.",
|
||
},
|
||
rosetta: {
|
||
title: "Загрузите сборку Apple Silicon",
|
||
runningIntel: "Вы используете сборку Paseo для Intel через Rosetta на Apple Silicon.",
|
||
highCpu:
|
||
"Из-за этого процессор сильно загружен. Чтобы устранить проблему, скачайте сборку для Apple Silicon.",
|
||
download: "Скачать",
|
||
},
|
||
permissions: {
|
||
notifications: {
|
||
allowed: "Уведомления разрешены операционной системой.",
|
||
denied: "Уведомления запрещены в настройках системы.",
|
||
notGranted: "Разрешение на уведомления ещё не предоставлено.",
|
||
webOnly: "Статус системных уведомлений доступен только в веб-среде выполнения.",
|
||
supported: "Уведомления на рабочем столе поддерживаются.",
|
||
unsupported: "Уведомления на рабочем столе не поддерживаются на этой платформе.",
|
||
apiUnavailable: "Web Notification API недоступен в этой среде.",
|
||
requestsWebOnly:
|
||
"Запрашивать разрешение на системные уведомления можно только в веб-среде выполнения.",
|
||
requestUnavailable: "В Web Notification API недоступен метод requestPermission().",
|
||
requestFailed: "Не удалось запросить разрешение на уведомления: {{message}}",
|
||
unexpectedState: "Неожиданное состояние разрешения на уведомления: {{state}}",
|
||
},
|
||
microphone: {
|
||
webOnly: "Статус микрофона доступен только в веб-среде выполнения.",
|
||
navigatorUnavailable: "Объект Navigator недоступен в этой среде.",
|
||
granted: "Доступ к микрофону разрешён.",
|
||
denied: "Доступ к микрофону запрещен в настройках системы.",
|
||
notGranted: "Разрешение на использование микрофона ещё не получено.",
|
||
unexpectedState: "Неожиданное состояние разрешения на микрофон: {{state}}",
|
||
statusApiUnavailable:
|
||
"API проверки состояния микрофона недоступен в этой среде выполнения. Запросите доступ, чтобы проверить его.",
|
||
queryFailed: "Не удалось проверить состояние микрофона: {{message}}",
|
||
captureUnavailable: "В этой среде захват микрофона недоступен.",
|
||
permissionApiUnavailable:
|
||
"API проверки разрешений недоступен. Запросите доступ, чтобы проверить его.",
|
||
requestsWebOnly: "Запрашивать доступ к микрофону можно только в веб-среде выполнения.",
|
||
captureApiUnavailable: "API захвата микрофона недоступен в этой среде.",
|
||
requestDenied:
|
||
"Разрешение на использование микрофона было отклонено пользователем или системой.",
|
||
noDevice: "Микрофон не найден.",
|
||
requestFailed: "Не удалось запросить доступ к микрофону: {{message}}",
|
||
},
|
||
empty: {
|
||
notifications: "Статус уведомлений ещё не проверен.",
|
||
microphone: "Состояние микрофона ещё не проверялось.",
|
||
},
|
||
testNotification: {
|
||
title: "Тест уведомлений Paseo",
|
||
body: "Если вы это видите, уведомления на рабочем столе работают.",
|
||
notDelivered:
|
||
"Уведомление не доставлено. Проверьте раздел «Уведомления» в системных настройках.",
|
||
failed: "Не удалось отправить уведомление.",
|
||
},
|
||
},
|
||
integrations: {
|
||
cli: {
|
||
statusFailed: "Не удалось проверить состояние установки CLI.",
|
||
installFailed: "Не удалось установить Paseo CLI.",
|
||
},
|
||
},
|
||
},
|
||
rootError: {
|
||
title: "В Paseo возникла проблема.",
|
||
body: "Попробуйте перезагрузить приложение. Если ошибка повторится, приложите приведённые ниже сведения к отчёту.",
|
||
details: "Подробности",
|
||
},
|
||
startup: {
|
||
errorTitle: "Что-то пошло не так",
|
||
errorDescription:
|
||
"Не удалось запустить локальный сервер. Если ошибка повторится, сообщите о ней на GitHub и приложите приведённые ниже журналы.",
|
||
logs: {
|
||
loading: "Загрузка журналов демона...",
|
||
unavailable: "Журналы демона отсутствуют.",
|
||
loadFailed: "Не удалось загрузить журналы демона: {{message}}",
|
||
},
|
||
},
|
||
openProject: {
|
||
tiles: {
|
||
addProject: {
|
||
title: "Добавить проект",
|
||
description: "Откройте папку на своем компьютере",
|
||
},
|
||
importSession: {
|
||
title: "Импортировать сессию",
|
||
description: "Импортируйте недавние сессии из внешних CLI",
|
||
},
|
||
setupProviders: {
|
||
title: "Настроить провайдеров",
|
||
description: "Настройте Claude Code, Codex и другие провайдеры",
|
||
},
|
||
pairDevice: {
|
||
title: "Подключить устройство",
|
||
description: "Подключите свой телефон к этому демону",
|
||
},
|
||
},
|
||
},
|
||
projectPicker: {
|
||
placeholder: "Введите текст для поиска...",
|
||
browse: "Обзор…",
|
||
opening: "Открытие проекта...",
|
||
searching: "Идет поиск...",
|
||
empty: "Начните вводить путь",
|
||
errors: {
|
||
directory_not_found: "Каталог не найден.",
|
||
open_failed: "Не удалось открыть проект.",
|
||
},
|
||
openPath: "Открыть путь",
|
||
},
|
||
branchSwitcher: {
|
||
triggerTooltip: "Переключить ветку рабочего пространства",
|
||
currentBranch: "Текущая ветка: {{branchName}}. Нажмите, чтобы переключить ветку.",
|
||
placeholder: "Сменить ветку...",
|
||
searchPlaceholder: "Фильтровать ветки...",
|
||
empty: "Ветки не найдены.",
|
||
title: "Переключить ветку",
|
||
uncommittedTitle: "Незафиксированные изменения",
|
||
uncommittedMessage:
|
||
"У вас есть незафиксированные изменения. Убрать их в stash перед переключением ветки?",
|
||
stashAndSwitch: "Убрать в stash и переключиться",
|
||
failedToStash: "Не удалось убрать изменения в stash",
|
||
failedToSwitch: "Не удалось переключить ветку",
|
||
restoreStashTitle: "Восстановить изменения из stash?",
|
||
restoreStashMessage:
|
||
"В этой ветке есть изменения из предыдущей сессии, сохранённые в stash. Восстановить их?",
|
||
restore: "Восстановить",
|
||
later: "Позже",
|
||
stashRestored: "Изменения из stash восстановлены.",
|
||
},
|
||
agentAutocomplete: {
|
||
searchingWorkspace: "Поиск в рабочем пространстве...",
|
||
loadingCommands: "Загрузка команд...",
|
||
noFiles: "Файлы и каталоги не найдены",
|
||
noCommands: "Команды не найдены",
|
||
failedToLoad: "Не удалось загрузить",
|
||
chooseProjectForCommands: "Выберите проект, чтобы увидеть команды",
|
||
chooseModelForCommands: "Выберите модель, чтобы увидеть команды",
|
||
},
|
||
loadOlderHistory: {
|
||
failed: "Не удалось загрузить старую историю.",
|
||
},
|
||
imageAttachmentPicker: {
|
||
permissionTitle: "Требуется разрешение",
|
||
permissionMessage: "Разрешите доступ к медиатеке, чтобы прикреплять изображения.",
|
||
errorTitle: "Ошибка",
|
||
failedToSelect: "Не удалось выбрать изображение",
|
||
dialogTitle: "Прикрепить изображения",
|
||
dialogFilterName: "Изображения",
|
||
},
|
||
workspaceSetup: {
|
||
title: "Создать рабочее пространство",
|
||
errors: {
|
||
failedCreateWorktree: "Не удалось создать worktree.",
|
||
failedOpenProject: "Не удалось открыть проект",
|
||
selectModel: "Выберите модель",
|
||
hostDisconnected: "Хост не подключён",
|
||
pendingRequired: "Нет ожидающей настройки рабочего пространства.",
|
||
composerStateRequired: "Редактор настройки рабочего пространства ещё не готов.",
|
||
},
|
||
},
|
||
onboarding: {
|
||
title: "Добро пожаловать в Paseo",
|
||
subtitle: "Подключите компьютер, чтобы начать",
|
||
actions: {
|
||
settings: "Настройки",
|
||
},
|
||
},
|
||
modelSelector: {
|
||
title: "Выберите провайдера",
|
||
selectModel: "Выберите модель",
|
||
selectedModel: "Выберите модель ({{model}})",
|
||
loading: "Загрузка...",
|
||
loadingShort: "Загрузка",
|
||
loadingSelector: "Загрузка выбора модели...",
|
||
error: "Ошибка",
|
||
defaultModel: "По умолчанию",
|
||
profiles: "Профили",
|
||
providers: "Провайдеры",
|
||
model: "Модель",
|
||
editProfiles: "Изменить",
|
||
editProfilesLabel: "Изменить профили агентов",
|
||
createProfile: "Создать профиль",
|
||
createProfileFromModel: "Создать профиль из этой модели",
|
||
editProfileLabel: "Изменить {{name}}",
|
||
editProfilesCount: "Изменить профили ({{count}})",
|
||
modelCount: "{{count}} модель",
|
||
modelCountPlural: "{{count}} моделей",
|
||
retry: "Повторить попытку",
|
||
retrying: "Повторная попытка...",
|
||
noMatches: "Ни одна модель не соответствует вашему запросу",
|
||
noMatchesForQuery: "Нет моделей, соответствующих «{{query}}»",
|
||
searchAllPlaceholder: "Поиск по всем моделям...",
|
||
searchPlaceholder: "Поиск моделей...",
|
||
openProviderSettings: "Открыть настройки {{provider}}",
|
||
},
|
||
providerCatalog: {
|
||
title: "Добавить провайдера",
|
||
search: "Поиск провайдеров",
|
||
noProviders: "Провайдеры не найдены",
|
||
actions: {
|
||
add: "Добавить",
|
||
adding: "Добавление",
|
||
installed: "Установлено",
|
||
cancel: "Отмена",
|
||
installInstructions: "Инструкции по установке",
|
||
installInstructionsFor: "Инструкции по установке {{provider}}",
|
||
},
|
||
errors: {
|
||
unableToInstall: "Не удалось установить провайдера",
|
||
},
|
||
},
|
||
providerSelection: {
|
||
defaultModel: "По умолчанию",
|
||
selectModel: "Выберите модель",
|
||
loading: "Загрузка...",
|
||
error: "Ошибка",
|
||
unavailable: "Недоступно",
|
||
unknownError: "Неизвестная ошибка",
|
||
readiness: {
|
||
initialPromptRequired: "Требуется начальный промпт",
|
||
noProviders: "На выбранном хосте нет доступных провайдеров",
|
||
modelDefaultsLoading: "Настройки модели по умолчанию всё ещё загружаются",
|
||
noModelAvailable: "Для выбранного провайдера нет доступных моделей.",
|
||
workspaceDirectoryNotFound: "Каталог рабочего пространства не найден",
|
||
hostDisconnected: "Хост не подключён",
|
||
},
|
||
},
|
||
pairing: {
|
||
hostPassword: {
|
||
title: "Пароль для {{host}}",
|
||
label: "Пароль хоста",
|
||
},
|
||
hostConfirmation: {
|
||
title: "Подключиться к этому хосту?",
|
||
description:
|
||
"Этот хост сможет выполнять код в приложении и обращаться к другим вашим подключённым хостам. Подключайтесь, только если узнаёте его.",
|
||
descriptionChanged:
|
||
"Эта ссылка меняет способ подключения к этому хосту. Хост сможет выполнять код в приложении и обращаться к другим вашим подключённым хостам. Подключайтесь, только если узнаёте его.",
|
||
hostLabel: "Хост",
|
||
fingerprintLabel: "Отпечаток ключа",
|
||
relayLabel: "Реле",
|
||
connect: "Подключить",
|
||
},
|
||
connectionMethods: {
|
||
title: "Добавить подключение",
|
||
direct: {
|
||
title: "Прямое подключение",
|
||
description: "Локальная сеть или VPN.",
|
||
},
|
||
remoteSsh: {
|
||
title: "Удалённый SSH",
|
||
description: "Подключение через SSH-клиент настольного приложения.",
|
||
},
|
||
scanQr: {
|
||
title: "Сканировать QR-код",
|
||
description: "Зашифрованное подключение через ретранслятор.",
|
||
},
|
||
pasteLink: {
|
||
title: "Вставить ссылку для сопряжения",
|
||
description: "Зашифрованное подключение через ретранслятор.",
|
||
},
|
||
},
|
||
direct: {
|
||
title: "Прямое подключение",
|
||
helper: "Введите адрес сервера Paseo.",
|
||
fields: {
|
||
host: "Хост",
|
||
port: "Порт",
|
||
password: "Пароль",
|
||
optional: "Необязательно",
|
||
useSsl: "Использовать SSL",
|
||
connectionUri: "URI подключения",
|
||
},
|
||
advanced: {
|
||
label: "Дополнительные параметры",
|
||
show: "Показать дополнительные параметры",
|
||
hide: "Скрыть дополнительные параметры",
|
||
},
|
||
passwordVisibility: {
|
||
show: "Показать пароль",
|
||
hide: "Скрыть пароль",
|
||
},
|
||
actions: {
|
||
cancel: "Отмена",
|
||
connect: "Подключиться",
|
||
connecting: "Подключение...",
|
||
},
|
||
errors: {
|
||
hostRequired: "Требуется хост",
|
||
invalidPort: "Порт должен быть в диапазоне от 1 до 65535.",
|
||
invalidConnection: "Неверное соединение",
|
||
failedTitle: "Соединение не удалось",
|
||
failedToConnect: "Не удалось подключиться к {{endpoint}}.",
|
||
noAdditionalDetails: "{{detail}} (дополнительные сведения отсутствуют)",
|
||
timedOut: "Время подключения истекло. Проверьте адрес хоста, порт и сеть.",
|
||
refused: "В подключении отказано. Демон запущен по этому адресу?",
|
||
hostNotFound: "Хост не найден. Проверьте имя хоста и повторите попытку.",
|
||
hostUnreachable: "Хост недоступен. Проверьте сеть и брандмауэр.",
|
||
tlsError:
|
||
"Ошибка TLS. Прямые соединения используют SSL только тогда, когда перед демоном находится терминатор TLS.",
|
||
unableToConnect:
|
||
"Не удалось подключиться. Проверьте адрес хоста и порт, а также доступность демона.",
|
||
details: "Подробности: {{detail}}",
|
||
},
|
||
},
|
||
remoteSsh: {
|
||
title: "Удалённый SSH",
|
||
helper: "Подключитесь к демону Paseo на удалённом хосте.",
|
||
fields: {
|
||
target: "Хост SSH",
|
||
password: "Пароль демона",
|
||
optional: "Необязательно",
|
||
},
|
||
passwordVisibility: {
|
||
show: "Показать пароль",
|
||
hide: "Скрыть пароль",
|
||
},
|
||
actions: {
|
||
cancel: "Отмена",
|
||
connect: "Подключить",
|
||
connecting: "Подключение...",
|
||
},
|
||
errors: {
|
||
targetRequired: "Укажите хост SSH",
|
||
invalidTarget: "Укажите корректный хост ssh://",
|
||
failedToConnect: "Не удалось подключиться по SSH. {{detail}}",
|
||
},
|
||
},
|
||
link: {
|
||
title: "Вставить ссылку для сопряжения",
|
||
helper: "Вставьте ссылку на сопряжение с вашего сервера.",
|
||
label: "Ссылка на сопряжение",
|
||
errors: {
|
||
required: "Вставьте ссылку для сопряжения (.../#offer=...)",
|
||
missingOffer: "Ссылка должна содержать #offer=...",
|
||
emptyOffer: "Параметр #offer не содержит данных.",
|
||
invalid: "Неверная ссылка для сопряжения",
|
||
unableToPair: "Не удалось выполнить сопряжение с хостом",
|
||
},
|
||
alert: {
|
||
failedTitle: "Сопряжение не удалось",
|
||
},
|
||
actions: {
|
||
cancel: "Отмена",
|
||
pair: "Подключить",
|
||
pairing: "Сопряжение...",
|
||
},
|
||
},
|
||
scan: {
|
||
title: "Сканировать QR-код",
|
||
webUnavailableTitle: "Недоступно в веб-версии",
|
||
webUnavailableBody:
|
||
"Сканирование QR-кодов не поддерживается в веб-сборке. Используйте «Вставить ссылку».",
|
||
backToSettings: "Вернуться к настройкам",
|
||
cameraPermissionTitle: "Разрешение камеры",
|
||
cameraPermissionBody:
|
||
"Разрешите доступ к камере, чтобы отсканировать QR-код для сопряжения с вашим демоном.",
|
||
grantPermission: "Предоставить разрешение",
|
||
pairing: "Сопряжение...",
|
||
unableToPair: "Не удалось выполнить сопряжение с хостом",
|
||
errorTitle: "Ошибка",
|
||
},
|
||
device: {
|
||
loadingOffer: "Загрузка данных для сопряжения...",
|
||
failedToLoadOffer: "Не удалось загрузить данные для сопряжения.",
|
||
relayDisabled:
|
||
"Ретранслятор не включён. Включите его, чтобы выполнить сопряжение устройства.",
|
||
enableTitle: "Включить ретранслятор?",
|
||
enableDescription:
|
||
"Ретранслятор позволяет этому устройству подключаться откуда угодно. Трафик сопряжения защищён сквозным шифрованием.",
|
||
relayDocs: "Как работает ретранслятор",
|
||
relayDocsAccessibility: "Узнать, как работает ретранслятор Paseo",
|
||
enableRelay: "Включить ретранслятор",
|
||
enablingRelay: "Включение ретранслятора...",
|
||
notNow: "Не сейчас",
|
||
directConnectionHint:
|
||
"Без ретранслятора подключайтесь напрямую через TCP, Tailscale или другую VPN. QR-код создаваться не будет.",
|
||
updateRequired: "Обновите хост, чтобы включить ретранслятор из Paseo Desktop.",
|
||
unavailable: "Данные для сопряжения недоступны.",
|
||
hint: "Отсканируйте этот QR-код с помощью Paseo на телефоне или скопируйте ссылку ниже.",
|
||
securityWarning:
|
||
"Обращайтесь с этой ссылкой для сопряжения как с паролем. Любой, у кого она есть, может получить доступ к этому демону.",
|
||
qrUnavailable: "QR-код недоступен.",
|
||
qrAccessibility: "QR-код сопряжения",
|
||
retry: "Повторить попытку",
|
||
copy: "Копировать",
|
||
copied: "Скопировано",
|
||
},
|
||
},
|
||
realtimeVoice: {
|
||
actions: {
|
||
mute: "Отключить микрофон в голосовом режиме реального времени",
|
||
unmute: "Включить микрофон в голосовом режиме реального времени",
|
||
stop: "Остановить голосовой режим реального времени и прервать текущий ответ",
|
||
},
|
||
},
|
||
rewind: {
|
||
tooltip: "Вернуться к этому сообщению",
|
||
warning: "Это действие нельзя отменить.",
|
||
actions: {
|
||
conversation: "Откатить диалог",
|
||
files: "Откатить файлы",
|
||
both: "Откатить диалог и файлы",
|
||
},
|
||
errors: {
|
||
failed: "Не удалось откатить состояние агента",
|
||
},
|
||
},
|
||
diffViewer: {
|
||
empty: "Нет изменений для отображения",
|
||
},
|
||
serviceUrl: {
|
||
title: "Открыть URL сервиса",
|
||
message: "Открыть {{url}}?",
|
||
inPaseo: "В Paseo",
|
||
externalBrowser: "Внешний браузер",
|
||
dontAskAgain: "Больше не спрашивать",
|
||
},
|
||
downloads: {
|
||
requestTokenFailed: "Не удалось запросить токен загрузки.",
|
||
hostUnavailable: "Хост загрузки недоступен.",
|
||
cancelled: "Загрузка отменена.",
|
||
failed: "Не удалось загрузить файл.",
|
||
shareFile: "Поделиться файлом",
|
||
shareFileNamed: "Поделиться {{fileName}}",
|
||
},
|
||
menu: {
|
||
backdrop: "Фон меню",
|
||
},
|
||
subagents: {
|
||
title: "Субагенты",
|
||
pillLabelOne: "1 субагент",
|
||
pillLabelMany: "Субагентов: {{count}}",
|
||
pillLabelWorking: "{{count}} в работе",
|
||
pillLabelFailed: "{{count}} с ошибкой",
|
||
pillLabelNeedsInputOne: "1 ожидает ввода",
|
||
pillLabelNeedsInputMany: "{{count}} ожидают ввода",
|
||
pillLabelReadyToReview: "{{count}} на проверку",
|
||
detachAction: "Отсоединить {{label}}",
|
||
detachTooltip: "Отсоединить субагента",
|
||
archiveAction: "Архивировать {{label}}",
|
||
archiveTooltip: "Архивировать субагента",
|
||
archiveFinishedAction: "Архивировать завершенные субагенты",
|
||
archiveFinishedRetry: "Повторить ({{failed}}/{{total}})",
|
||
},
|
||
panels: {
|
||
draft: {
|
||
newAgent: "Новый агент",
|
||
creatingAgent: "Создание агента",
|
||
},
|
||
file: {
|
||
directoryMissing: "Каталог рабочего пространства не найден.",
|
||
loading: "Загрузка файла...",
|
||
noPreview: "Предварительный просмотр недоступен",
|
||
binaryPreviewUnavailable: "Предварительный просмотр двоичного файла недоступен.",
|
||
tooLargeToDisplay: "Этот файл слишком велик для отображения",
|
||
failedToLoad: "Не удалось загрузить файл",
|
||
failedToLoadPreview: "Не удалось загрузить предварительный просмотр файла.",
|
||
editor: {
|
||
fileSize: "Размер файла {{size}}",
|
||
lines: "Строк: {{count}}",
|
||
editorStatus: "Состояние редактора: {{status}}",
|
||
unsavedChanges: "Несохранённые изменения",
|
||
saving: "Сохранение...",
|
||
saveFailed: "Не удалось сохранить",
|
||
changedOnDisk: "Изменён на диске",
|
||
vimMode: "Режим Vim {{mode}}",
|
||
cursor: "Строка {{line}}, столбец {{column}}",
|
||
preview: "Предпросмотр",
|
||
source: "Исходный текст",
|
||
deletedTitle: "Файл удалён с диска",
|
||
checkFailedTitle: "Не удалось проверить файл на диске",
|
||
preservedDescription: "Открытая копия сохранена в редакторе.",
|
||
conflictDescription:
|
||
"Локальный буфер сохранён в редакторе. Выберите, какую версию оставить.",
|
||
overwrite: "Перезаписать",
|
||
reload: "Перезагрузить",
|
||
reloadTitle: "Перезагрузить с диска?",
|
||
reloadMessage: "Локальные изменения будут потеряны.",
|
||
},
|
||
},
|
||
files: {
|
||
label: "Файлы",
|
||
subtitle: "Файлы рабочего пространства",
|
||
tooltip: "Просмотр файлов рабочего пространства",
|
||
chooseFile: "Выберите файл",
|
||
},
|
||
pullRequest: {
|
||
label: "PR",
|
||
subtitle: "Сведения о PR",
|
||
emptyTitle: "PR пока нет",
|
||
emptyDescription: "Создайте PR для этой рабочей копии, чтобы увидеть здесь сведения о нём.",
|
||
},
|
||
diff: {
|
||
changesLabel: "Изменения",
|
||
diffLabel: "Дифф",
|
||
changesSubtitle: "Изменения в worktree",
|
||
commitSubtitle: "Изменения в коммите",
|
||
uncommittedSubtitle: "Незафиксированные изменения",
|
||
baseSubtitle: "Сравнение с {{baseRef}}",
|
||
directoryMissing: "Каталог рабочего пространства не найден.",
|
||
empty: "Нет изменений",
|
||
loadError: "Не удалось загрузить список изменений",
|
||
capabilityMissing: "Обновите хост, чтобы просматривать изменения в коммитах.",
|
||
},
|
||
},
|
||
toolCallDetails: {
|
||
error: "Ошибка",
|
||
empty: "Дополнительные сведения отсутствуют",
|
||
subAgentActivity: "Активность субагента",
|
||
input: "Входные данные",
|
||
output: "Выходные данные",
|
||
},
|
||
toolCallGroup: {
|
||
editedFiles: {
|
||
one: "изменён {{count}} файл",
|
||
other: "изменены файлы ({{count}})",
|
||
},
|
||
commands: {
|
||
one: "выполнена {{count}} команда",
|
||
other: "выполнены команды ({{count}})",
|
||
},
|
||
readFiles: {
|
||
one: "прочитан {{count}} файл",
|
||
other: "прочитаны файлы ({{count}})",
|
||
},
|
||
searches: {
|
||
one: "выполнен {{count}} поиск",
|
||
other: "выполнены поисковые запросы ({{count}})",
|
||
},
|
||
otherTools: {
|
||
one: "использован {{count}} другой инструмент",
|
||
other: "использованы другие инструменты ({{count}})",
|
||
},
|
||
paseoCalls: {
|
||
one: "выполнен {{count}} вызов Paseo",
|
||
other: "выполнены вызовы Paseo ({{count}})",
|
||
},
|
||
and: "и",
|
||
},
|
||
renameModal: {
|
||
rename: "Переименовать",
|
||
saving: "Сохранение...",
|
||
},
|
||
sidebarCallout: {
|
||
dismiss: "Закрыть",
|
||
},
|
||
contextWindow: {
|
||
noData: "Нет данных о контексте",
|
||
accessibilityNoData: "Контекстное окно: нет данных о контексте",
|
||
title: "Контекстное окно",
|
||
used: "Использовано: {{percentage}}%",
|
||
tokens: "Токены: {{used}} / {{max}}",
|
||
sessionCost: "Стоимость сессии: {{cost}}",
|
||
accessibility: "Использовано {{percentage}}% контекстного окна",
|
||
},
|
||
review: {
|
||
feedback: {
|
||
send: "Отправить отзыв ({{count}})",
|
||
sending: "Отправка отзыва ({{count}})",
|
||
chooseAgent: "Выберите агента",
|
||
sent: "Отзыв отправлен: {{recipient}}",
|
||
"no-agents": "Откройте вкладку агента в этой рабочей области, чтобы отправить отзыв.",
|
||
disconnected: "Подключитесь к хосту, чтобы отправить отзыв.",
|
||
"no-context": "Сохранённые комментарии больше не соответствуют этому diff.",
|
||
failed: "Не удалось отправить отзыв. Повторите попытку.",
|
||
prompt: "Пожалуйста, учтите эту проверку кода.",
|
||
},
|
||
comment: {
|
||
add: "Добавить комментарий к ревью",
|
||
edit: "Изменить комментарий к ревью",
|
||
delete: "Удалить комментарий к ревью",
|
||
label: "Комментарий к ревью",
|
||
placeholder: "Оставить комментарий",
|
||
cancel: "Отмена",
|
||
cancelAccessibility: "Отменить ввод комментария к ревью",
|
||
save: "Сохранить",
|
||
saveAccessibility: "Сохранить комментарий к ревью",
|
||
},
|
||
},
|
||
settings: {
|
||
title: "Настройки",
|
||
loading: "Загрузка настроек...",
|
||
groups: {
|
||
app: "Приложение",
|
||
host: "Хост",
|
||
},
|
||
hostPicker: {
|
||
switchHost: "Сменить хост",
|
||
local: "Локальный",
|
||
},
|
||
backToWorkspace: "Назад",
|
||
addHost: "Добавить хост",
|
||
enableBuiltInDaemon: "Включить встроенный демон",
|
||
projects: "Проекты",
|
||
projectList: {
|
||
hostLoadFailed: "Не удалось загрузить проекты с хоста {{hostName}}: {{message}}",
|
||
editProject: "Изменить {{projectName}}",
|
||
},
|
||
groupInfo: "О разделе «{{title}}»",
|
||
sections: {
|
||
general: "Основные",
|
||
chat: "Чат",
|
||
appearance: "Оформление",
|
||
sidebar: "Боковая панель",
|
||
terminal: "Терминал",
|
||
browser: "Браузер",
|
||
editor: "Редактор",
|
||
shortcuts: "Сочетания клавиш",
|
||
integrations: "Интеграции",
|
||
notifications: "Уведомления",
|
||
permissions: "Разрешения",
|
||
diagnostics: "Диагностика",
|
||
about: "О приложении",
|
||
},
|
||
layout: en.settings.layout,
|
||
editor: {
|
||
title: "Редактор",
|
||
vimKeybindings: "Сочетания клавиш Vim",
|
||
vimHint: "Применяется к исходным файлам в веб- и настольной версии.",
|
||
},
|
||
notifications: {
|
||
title: "Уведомления",
|
||
permission: "Разрешение на уведомления",
|
||
refreshAccessibility: "Обновить разрешение на уведомления",
|
||
playSound: "Воспроизводить звук",
|
||
playSoundHint: "Воспроизводит звук при получении уведомления на компьютере",
|
||
test: "Проверить уведомление",
|
||
testHint: "Отправляет уведомление с текущими настройками",
|
||
permissionRequired: "Разрешите доступ к уведомлениям перед проверкой",
|
||
send: "Отправить",
|
||
sending: "Отправка...",
|
||
sentTitle: "Тестовое уведомление отправлено",
|
||
sentDescription: "Paseo передал уведомление операционной системе.",
|
||
sendFailedTitle: "Не удалось отправить тестовое уведомление",
|
||
},
|
||
hostSections: {
|
||
projects: "Проекты",
|
||
connections: "Подключения",
|
||
agents: "Агенты",
|
||
metadata: "Метаданные",
|
||
workspaces: "Рабочие пространства",
|
||
providers: "Провайдеры",
|
||
usage: "Использование",
|
||
terminals: "Терминалы",
|
||
plugins: "Плагины",
|
||
host: "Обзор",
|
||
},
|
||
plugins: pluginSettings.ru,
|
||
metadataGeneration: {
|
||
title: "Генерация метаданных",
|
||
description:
|
||
"Выберите модель, которую Paseo будет использовать для названий рабочих пространств и веток, сообщений коммитов и черновиков PR",
|
||
selection: "Выбор модели",
|
||
automatic: "Автоматически",
|
||
preferred: "Вручную",
|
||
automaticHint: "Paseo выбирает быструю доступную модель",
|
||
preferredHint: "Выберите модель, которую использует Paseo",
|
||
model: "Модель",
|
||
fallbackHint: "Если она недоступна, Paseo использует другую доступную модель",
|
||
docs: "Документация",
|
||
saveError: "Не удалось обновить настройки генерации метаданных",
|
||
},
|
||
general: {
|
||
title: "Основные",
|
||
sending: "Отправка",
|
||
browserData: {
|
||
title: "Данные браузера",
|
||
siteData: "Файлы cookie и данные сайтов",
|
||
description: "Вкладки браузера в Paseo используют общие данные входа и данные сайтов.",
|
||
clear: "Очистить данные браузера",
|
||
clearing: "Очистка...",
|
||
confirmTitle: "Очистить данные браузера?",
|
||
confirmMessage:
|
||
"Вы выйдете из аккаунтов на сайтах, а открытые вкладки браузера перезагрузятся.",
|
||
success: "Данные браузера очищены.",
|
||
error: "Не удалось очистить данные браузера.",
|
||
},
|
||
defaultSend: {
|
||
label: "Отправка по умолчанию",
|
||
descriptions: {
|
||
interrupt:
|
||
"Когда агент работает, Enter прерывает его работу, а Command/Ctrl+Enter ставит сообщение в очередь.",
|
||
steer:
|
||
"Когда агент работает, Enter дополняет текущий ответ новым указанием, а Command/Ctrl+Enter ставит сообщение в очередь.",
|
||
queue:
|
||
"Когда агент работает, Enter ставит сообщение в очередь, а Command/Ctrl+Enter отправляет его.",
|
||
},
|
||
options: {
|
||
interrupt: "Прерывать",
|
||
steer: "Направить",
|
||
queue: "Поставить в очередь",
|
||
},
|
||
},
|
||
serviceUrls: {
|
||
options: {
|
||
ask: "Спрашивать",
|
||
inApp: "В Paseo",
|
||
external: "Внешний браузер",
|
||
},
|
||
},
|
||
terminalScrollback: {
|
||
label: "Буфер прокрутки терминала",
|
||
description: "Количество строк, сохраняемых во встроенном буфере терминала",
|
||
accessibilityLabel: "Количество строк в буфере прокрутки терминала",
|
||
},
|
||
autoExpandReasoning: {
|
||
label: "Всегда разворачивать размышления",
|
||
description:
|
||
"По умолчанию полностью разворачивать блоки размышлений и хода рассуждений агента",
|
||
},
|
||
toolCallDetail: {
|
||
label: "Отображение вызовов инструментов",
|
||
description: "Как вызовы инструментов отображаются на временной шкале",
|
||
options: {
|
||
overview: "Сводка",
|
||
detailed: "Все подробности",
|
||
},
|
||
},
|
||
language: {
|
||
label: "Язык",
|
||
description: "Язык приложения",
|
||
options: {
|
||
system: "Как в системе",
|
||
ar: "العربية",
|
||
en: "English",
|
||
es: "Español",
|
||
fr: "Français",
|
||
ja: "日本語",
|
||
ko: "한국어",
|
||
ptBR: "Português brasileiro",
|
||
ru: "Русский",
|
||
zhCN: "简体中文",
|
||
},
|
||
},
|
||
},
|
||
diagnostics: {
|
||
title: "Диагностика",
|
||
legacyTerminalRenderer: {
|
||
label: "Использовать прежний рендерер терминала",
|
||
description: "Использовать прежний WebView-терминал после повторного открытия",
|
||
accessibilityLabel: "Использовать прежний рендерер терминала",
|
||
},
|
||
testAudio: "Проверка звука",
|
||
playTest: "Воспроизвести тестовый звук",
|
||
playing: "Воспроизведение...",
|
||
playbackFailed: "Ошибка воспроизведения: {{message}}",
|
||
app: {
|
||
title: "Диагностика приложения",
|
||
rowTitle: "Диагностика приложения",
|
||
rowHint:
|
||
"Собрать сведения о подключениях, демоне, провайдерах, настольном приложении и журналах",
|
||
run: "Запустить",
|
||
running: "Выполняется диагностика...",
|
||
copyLabel: "результаты диагностики",
|
||
copyAccessibility: "Скопировать результаты диагностики",
|
||
copyFailed: "Не удалось скопировать результаты диагностики",
|
||
refreshAccessibility: "Обновить результаты диагностики",
|
||
refreshingAccessibility: "Диагностика обновляется",
|
||
progress: {
|
||
client: "Клиент",
|
||
desktop: "Настольное приложение",
|
||
},
|
||
},
|
||
},
|
||
about: {
|
||
title: "О приложении",
|
||
appVersion: "Версия приложения",
|
||
whatsNewHint: "Заметки о выпуске для каждой версии",
|
||
thisDevice: "Это устройство",
|
||
connectedHosts: "Подключенные хосты",
|
||
offline: "Оффлайн",
|
||
versionDiffers: "Версия отличается от версии на этом устройстве",
|
||
releaseChannel: {
|
||
label: "Канал выпуска",
|
||
description:
|
||
"Переключитесь на бета-канал, чтобы раньше получать обновления и помогать развивать Paseo.",
|
||
stable: "Стабильный",
|
||
beta: "Бета",
|
||
},
|
||
updates: {
|
||
label: "Обновления приложения",
|
||
readyToInstall: "Версия {{version}} готова к установке",
|
||
installTitle: "Установить обновление настольного приложения",
|
||
installMessage: "Это обновит Paseo на этом компьютере.",
|
||
installConfirm: "Установить обновление",
|
||
update: "Обновить",
|
||
updateTo: "Обновить до {{version}}",
|
||
installing: "Установка...",
|
||
check: "Проверить",
|
||
checking: "Проверка...",
|
||
alertTitle: "Ошибка",
|
||
alertMessage: "Не удалось открыть диалог подтверждения обновления.",
|
||
},
|
||
},
|
||
appearance: {
|
||
theme: {
|
||
title: "Тема",
|
||
accessibilityLabel: "Тема: {{value}}",
|
||
options: {
|
||
light: "Светлая",
|
||
dark: "Тёмная",
|
||
zinc: "Цинк",
|
||
midnight: "Полночь",
|
||
claude: "Claude",
|
||
ghostty: "Ghostty",
|
||
pureBlack: "Абсолютно чёрная",
|
||
auto: "Системная",
|
||
},
|
||
},
|
||
detailLevel: {
|
||
title: "Уровень детализации",
|
||
},
|
||
chatOutline: {
|
||
title: "Оглавление чата",
|
||
description: "Показывать оглавление для перехода между запросами",
|
||
},
|
||
sidebar: {
|
||
header: {
|
||
title: "Верх",
|
||
description:
|
||
"Выберите, какие элементы отображаются вверху боковой панели и в каком порядке",
|
||
},
|
||
footer: {
|
||
title: "Низ",
|
||
description:
|
||
"Выберите, какие строки отображаются внизу боковой панели и в каком порядке. «Добавить проект» и ряд значков видны всегда",
|
||
},
|
||
moveUp: "Переместить вверх",
|
||
moveDown: "Переместить вниз",
|
||
},
|
||
fonts: {
|
||
title: "Шрифты",
|
||
systemDefault: "Системный шрифт",
|
||
interfaceFont: "Шрифт интерфейса",
|
||
interfaceFontHint:
|
||
"Используется во всём приложении. Оставьте поле пустым, чтобы использовать системный шрифт.",
|
||
interfaceFontAccessibility: "Семейство интерфейсных шрифтов",
|
||
interfaceSize: "Размер интерфейса",
|
||
interfaceSizeHint: "Используется для навигации, элементов управления и подписей",
|
||
interfaceSizeAccessibility: "Размер шрифта интерфейса",
|
||
contentSize: "Размер содержимого",
|
||
contentSizeHint: "Используется для текста чата и отображаемого Markdown",
|
||
contentSizeAccessibility: "Размер шрифта содержимого",
|
||
codeFont: "Шрифт кода",
|
||
codeFontHint:
|
||
"Используется для кода, диффов и вывода терминала. Оставьте поле пустым, чтобы использовать системный шрифт.",
|
||
codeFontAccessibility: "Семейство шрифтов кода",
|
||
codeSize: "Размер кода",
|
||
codeSizeHint: "Используется для кода, диффов и вывода терминала",
|
||
codeSizeAccessibility: "Размер шрифта кода",
|
||
},
|
||
layout: {
|
||
title: "Макет",
|
||
contentWidth: "Ширина содержимого",
|
||
contentWidthHint: "Максимальная ширина чата и файлов Markdown на широких экранах",
|
||
contentWidthAccessibility: "Ширина содержимого в пикселях",
|
||
reset: "Сбросить",
|
||
resetAccessibility: "Сбросить ширину содержимого",
|
||
},
|
||
syntax: {
|
||
title: "Синтаксис",
|
||
highlightTheme: "Тема подсветки",
|
||
highlightThemeHint: "Цвета кода, не зависящие от темы приложения",
|
||
highlightThemeAccessibility: "Тема подсветки: {{value}}",
|
||
previewAccessibility:
|
||
"Предварительный просмотр типографики содержимого, темы синтаксиса и шрифта кода в реальном времени.",
|
||
previewContent: "Предварительный просмотр содержимого и кода",
|
||
},
|
||
},
|
||
shortcuts: {
|
||
dialogTitle: "Сочетания клавиш",
|
||
searchPlaceholder: "Поиск сочетаний клавиш",
|
||
unavailableOnMobile: "Сочетания клавиш доступны только на рабочем столе.",
|
||
capturePrompt: "Нажмите сочетание клавиш...",
|
||
unassigned: "Не задано",
|
||
actions: {
|
||
menu: "Действия для {{name}}",
|
||
done: "Готово",
|
||
cancel: "Отмена",
|
||
bind: "Назначить",
|
||
rebind: "Переназначить",
|
||
clear: "Очистить",
|
||
reset: "Восстановить значение по умолчанию",
|
||
resetAll: "Сбросить все",
|
||
},
|
||
sections: {
|
||
general: "Общие",
|
||
workspaces: "Проекты и рабочие пространства",
|
||
tabsPanes: "Вкладки и панели",
|
||
layout: "Макет",
|
||
agentInput: "Ввод для агента",
|
||
},
|
||
help: {
|
||
openProject: "Открыть проект",
|
||
newWorkspace: "Новое рабочее пространство",
|
||
newWorktree: "Новый worktree",
|
||
archiveWorkspace: "Архивировать рабочее пространство",
|
||
newTab: "Новая вкладка",
|
||
closeCurrentTab: "Закрыть текущую вкладку",
|
||
jumpToWorkspace: "Перейти к рабочему пространству",
|
||
jumpToTab: "Перейти на вкладку",
|
||
previousWorkspace: "Предыдущее рабочее пространство",
|
||
nextWorkspace: "Следующее рабочее пространство",
|
||
previousTab: "Предыдущая вкладка",
|
||
nextTab: "Следующая вкладка",
|
||
splitPaneRight: "Разделить панель справа",
|
||
splitPaneDown: "Разделить панель вниз",
|
||
focusPaneLeft: "Перейти на панель слева",
|
||
focusPaneRight: "Перейти на панель справа",
|
||
focusPaneUp: "Перейти на панель выше",
|
||
focusPaneDown: "Перейти на панель ниже",
|
||
moveTabLeft: "Переместить вкладку влево",
|
||
moveTabRight: "Переместить вкладку вправо",
|
||
moveTabUp: "Переместить вкладку вверх",
|
||
moveTabDown: "Переместить вкладку вниз",
|
||
closePane: "Закрыть панель",
|
||
newTerminal: "Новый терминал",
|
||
searchFiles: "Поиск файлов",
|
||
toggleCommandCenter: "Переключить командный центр",
|
||
showKeyboardShortcuts: "Показать сочетания клавиш",
|
||
toggleLeftSidebar: "Переключить левую боковую панель",
|
||
toggleRightSidebar: "Переключить боковую панель",
|
||
toggleBothSidebars: "Переключить обе боковые панели",
|
||
toggleSettings: "Переключить настройки",
|
||
toggleFocusMode: "Переключить режим фокусировки",
|
||
cycleTheme: "Переключить тему",
|
||
focusMessageInput: "Перейти к полю ввода сообщения",
|
||
cycleAgentMode: "Переключить режим агента",
|
||
toggleVoiceMode: "Переключить голосовой режим",
|
||
startStopDictation: "Начать/остановить диктовку",
|
||
interruptAgent: "Прервать агента",
|
||
sendMessage: "Отправить сообщение",
|
||
queueMessage: "Поставить сообщение в очередь",
|
||
muteUnmuteVoiceMode: "Выключить/включить звук в голосовом режиме",
|
||
switchProject: "Сменить проект",
|
||
},
|
||
helpNotes: {
|
||
showKeyboardShortcuts: "Доступно, когда фокус находится не в текстовом поле или терминале.",
|
||
},
|
||
},
|
||
integrations: {
|
||
title: "Интеграции",
|
||
docs: {
|
||
cli: "Документация CLI",
|
||
openCli: "Открыть документацию CLI",
|
||
},
|
||
commandLine: {
|
||
title: "Командная строка",
|
||
description: "Управляйте агентами и автоматизируйте их работу из терминала",
|
||
},
|
||
actions: {
|
||
install: "Установить",
|
||
installing: "Установка...",
|
||
installed: "Установлено",
|
||
},
|
||
},
|
||
permissions: {
|
||
title: "Разрешения",
|
||
microphone: "Микрофон",
|
||
refresh: "Обновить",
|
||
refreshing: "Обновление...",
|
||
refreshAccessibility: "Обновить разрешения рабочего стола",
|
||
actions: {
|
||
granted: "Предоставлено",
|
||
request: "Запросить",
|
||
requesting: "Запрашивается...",
|
||
},
|
||
},
|
||
host: {
|
||
password: {
|
||
guidance:
|
||
"Удалите этот хост и добавьте его снова с паролем, который запрашивает этот демон.",
|
||
},
|
||
appearance: {
|
||
title: "Оформление",
|
||
name: {
|
||
label: "Имя",
|
||
},
|
||
color: {
|
||
label: "Цвет",
|
||
accessibilityLabel: "Цвет, {{value}}",
|
||
options: {
|
||
none: "По умолчанию",
|
||
violet: "Фиолетовый",
|
||
sky: "Голубой",
|
||
emerald: "Изумрудный",
|
||
orange: "Оранжевый",
|
||
pink: "Розовый",
|
||
indigo: "Индиго",
|
||
teal: "Бирюзовый",
|
||
red: "Красный",
|
||
amber: "Янтарный",
|
||
blue: "Синий",
|
||
},
|
||
},
|
||
badge: {
|
||
label: "Значок на боковой панели",
|
||
accessibilityLabel: "Значок на боковой панели, {{value}}",
|
||
options: {
|
||
name: "Имя",
|
||
icon: "Только значок",
|
||
hidden: "Скрыт",
|
||
},
|
||
},
|
||
preview: {
|
||
workspaceName: "my-workspace",
|
||
},
|
||
},
|
||
notFound: "Хост не найден",
|
||
badges: {
|
||
relay: "Ретранслятор",
|
||
local: "Локальный",
|
||
remoteSsh: "Удалённый SSH",
|
||
},
|
||
connections: {
|
||
title: "Подключения",
|
||
removeTitle: "Удалить подключение",
|
||
removeMessage: "Удалить {{name}}? Это действие нельзя отменить.",
|
||
removeAction: "Удалить",
|
||
removeErrorTitle: "Ошибка",
|
||
removeErrorMessage: "Не удалось удалить подключение",
|
||
timeout: "Время ожидания истекло",
|
||
},
|
||
pairDevices: {
|
||
title: "Подключение устройств",
|
||
rowTitle: "Подключить устройство",
|
||
rowHint:
|
||
"Отсканируйте QR-код или скопируйте ссылку, чтобы подключить телефон к этому хосту.",
|
||
},
|
||
skills: {
|
||
sectionTitle: "Навыки оркестрации",
|
||
title: "Навыки оркестрации",
|
||
description: "Научите агентов координировать работу через CLI",
|
||
docs: "Навыки",
|
||
openDocs: "Открыть документацию по навыкам",
|
||
unavailable: "Подключитесь к этому хосту, чтобы управлять навыками оркестрации",
|
||
unsupported: "Обновите этот хост, чтобы управлять навыками оркестрации",
|
||
updateAvailable: "Доступно обновление",
|
||
updateTitle: "Обновить навыки Paseo?",
|
||
updateFallback: "Встроенные навыки будут синхронизированы с этим хостом.",
|
||
uninstallTitle: "Удалить навыки Paseo?",
|
||
uninstallMessage:
|
||
"Удаляет все навыки оркестрации Paseo из ~/.agents, ~/.claude и ~/.codex на этом хосте.",
|
||
choose: "Выбрать навыки",
|
||
chooseAll: "Все навыки",
|
||
chooseAllHint: "Устанавливать все встроенные навыки, включая добавленные позже.",
|
||
chooseList: "Встроенные навыки",
|
||
chooseEmpty: "На этом хосте нет встроенных навыков.",
|
||
removeTitle: "Удалить снятые навыки?",
|
||
removeMessage:
|
||
"{{skills}} будут удалены из ~/.agents, ~/.claude и ~/.codex на этом хосте. Всё, что вы добавили в эти папки навыков, тоже будет удалено.",
|
||
saveFailed: "Не удалось сохранить выбор навыков.",
|
||
statusFailed: "Не удалось проверить состояние навыков оркестрации.",
|
||
updateFailed: "Не удалось обновить навыки оркестрации.",
|
||
uninstallFailed: "Не удалось удалить навыки оркестрации.",
|
||
saveSelectionFailed: "Не удалось сохранить выбор навыков оркестрации.",
|
||
actions: {
|
||
install: "Установить",
|
||
installing: "Установка...",
|
||
installed: "Установлено",
|
||
update: "Обновить",
|
||
working: "Выполняется...",
|
||
remove: "Удалить",
|
||
uninstall: "Удалить",
|
||
save: "Сохранить",
|
||
saving: "Сохранение...",
|
||
cancel: "Отмена",
|
||
},
|
||
operations: {
|
||
add: "Добавить навык",
|
||
update: "Обновить навык",
|
||
delete: "Удалить навык",
|
||
},
|
||
},
|
||
orchestration: {
|
||
title: "Оркестрация",
|
||
unavailable: "Подключитесь к этому хосту, чтобы управлять оркестрацией.",
|
||
enableTools: {
|
||
title: "Включить инструменты Paseo",
|
||
hint: "Агенты смогут управлять worktree, агентами и расписаниями.",
|
||
accessibilityLabel: "Добавить инструменты Paseo",
|
||
},
|
||
systemPrompt: {
|
||
title: "Системный промпт",
|
||
hint: "Добавляет системный промпт всем агентам",
|
||
sheetTitle: "Добавить системный промпт",
|
||
accessibilityLabel: "Добавить системный промпт",
|
||
placeholder: "Всегда отвечайте кратко.",
|
||
edit: "Редактировать",
|
||
reset: "Сбросить",
|
||
save: "Сохранить",
|
||
saving: "Сохранение...",
|
||
},
|
||
},
|
||
agents: {
|
||
unavailable: "Подключитесь к этому хосту, чтобы управлять агентами",
|
||
},
|
||
workspaces: {
|
||
unavailable: "Подключитесь к этому хосту, чтобы управлять рабочими пространствами",
|
||
},
|
||
terminalProfiles: {
|
||
unavailable: "Подключитесь к этому хосту, чтобы управлять профилями терминала",
|
||
sectionTitle: "Профили терминала",
|
||
editProfile: "Изменить профиль",
|
||
addProfileTitle: "Добавить профиль терминала",
|
||
editProfileTitle: "Изменить профиль терминала",
|
||
namePlaceholder: "Claude Code",
|
||
commandPlaceholder: "claude",
|
||
argsPlaceholder: "--dangerously-skip-permissions",
|
||
nameLabel: "Название",
|
||
commandLabel: "Команда",
|
||
argsLabel: "Аргументы",
|
||
nameRequired: "Укажите название",
|
||
commandRequired: "Укажите команду",
|
||
argsHint: "Аргументы, разделённые пробелами и передаваемые команде",
|
||
saving: "Сохранение...",
|
||
remove: "Удалить",
|
||
removeConfirmTitle: "Удалить профиль?",
|
||
removeConfirmMessage: "Удалить «{{name}}»?",
|
||
moveUp: "Переместить вверх",
|
||
moveDown: "Переместить вниз",
|
||
save: "Сохранить",
|
||
emptyState:
|
||
"Профилей пока нет. Добавьте профиль, чтобы запускать терминалы с заданной командой.",
|
||
},
|
||
agentProfiles: {
|
||
sectionTitle: "Профили агентов",
|
||
unavailable: "Подключитесь к этому хосту, чтобы управлять профилями агентов",
|
||
unsupported: "На этом хосте запущен демон, который пока не поддерживает профили агентов",
|
||
emptyState:
|
||
"Пока нет профилей. Добавьте один, чтобы запускать агентов с сохранённым провайдером и моделью.",
|
||
addProfileTitle: "Добавить профиль агента",
|
||
newProfile: "Новый профиль",
|
||
editProfile: "Изменить профиль",
|
||
editProfileTitle: "Изменить профиль агента",
|
||
nameLabel: "Имя",
|
||
namePlaceholder: "Работа над UI",
|
||
iconLabel: "Значок",
|
||
noIcon: "Нет",
|
||
providerLabel: "Провайдер",
|
||
providerPlaceholder: "Выберите провайдера",
|
||
noProviders: "На этом хосте нет доступных провайдеров",
|
||
modelLabel: "Модель",
|
||
noModels: "У этого провайдера нет моделей для выбора",
|
||
modeLabel: "Режим",
|
||
noModes: "У этого провайдера нет режимов для выбора",
|
||
thinkingLabel: "Рассуждения",
|
||
noThinkingOptions: "У этой модели нет уровней рассуждений",
|
||
featuresLabel: "Функции",
|
||
featureCount: "Функции: {{count}}",
|
||
featureCountOne: "{{count}} функция",
|
||
notesLabel: "Когда использовать",
|
||
notesPlaceholder: "Используйте для работы над UI — компоненты, макет и токены дизайна.",
|
||
notesHint: "Помогает агентам выбрать этот профиль при запуске другого агента.",
|
||
save: "Сохранить",
|
||
saving: "Сохранение...",
|
||
remove: "Удалить",
|
||
removeConfirmTitle: "Удалить профиль?",
|
||
removeConfirmMessage: "Удалить «{{name}}»?",
|
||
moveUp: "Переместить вверх",
|
||
moveDown: "Переместить вниз",
|
||
},
|
||
daemon: {
|
||
rename: {
|
||
editLabel: "Изменить название",
|
||
title: "Переименовать хост",
|
||
placeholder: "Мой хост",
|
||
submit: "Переименовать",
|
||
},
|
||
restart: {
|
||
title: "Перезапустить демон",
|
||
hint: "Перезапускает процесс демона. Приложение автоматически переподключится",
|
||
confirm: "Перезапустить",
|
||
confirmTitle: "Перезапустить {{name}}",
|
||
confirmMessage:
|
||
"Это перезапустит демон. Агенты, работающие на нём, продолжат работу, а приложение автоматически переподключится.",
|
||
restarting: "Перезапуск...",
|
||
unableToReconnectTitle: "Не удалось переподключиться",
|
||
unableToReconnectMessage:
|
||
"Хост {{name}} не вернулся в сеть. Убедитесь, что демон перезапустился.",
|
||
unavailableTitle: "Хост недоступен",
|
||
unavailableMessage:
|
||
"Этот хост не подключён. Дождитесь его появления в сети перед перезапуском.",
|
||
offlineTitle: "Хост не в сети",
|
||
offlineMessage:
|
||
"Этот хост не в сети. Paseo переподключится автоматически. Дождитесь подключения перед перезапуском.",
|
||
requestFailedTitle: "Ошибка",
|
||
requestFailedMessage:
|
||
"Не удалось отправить запрос на перезапуск. Paseo переподключается автоматически. Повторите попытку, когда хост появится в сети.",
|
||
dialogFailedMessage: "Не удалось открыть диалог подтверждения перезапуска.",
|
||
},
|
||
update: {
|
||
desktopManagedHint:
|
||
"Этот демон управляется Paseo Desktop. Обновите Paseo Desktop на хосте.",
|
||
title: "Обновить демон",
|
||
hint: "Обновить демон до последней версии и перезапустить его",
|
||
confirm: "Обновить",
|
||
confirmTitle: "Обновить {{name}}",
|
||
confirmMessage:
|
||
"Демон будет обновлён до последней версии и перезапущен. Работа агентов будет ненадолго прервана.",
|
||
updating: "Обновление...",
|
||
phaseStarting: "Подготовка обновления...",
|
||
phaseDownloading: "Загрузка пакетов...",
|
||
phaseInstalling: "Установка...",
|
||
phaseComplete: "Обновление завершено. Перезапуск...",
|
||
unableToReconnectTitle: "Не удалось переподключиться",
|
||
unableToReconnectMessage:
|
||
"Хост {{name}} не вернулся в сеть после обновления. Убедитесь, что демон перезапустился.",
|
||
unavailableTitle: "Хост недоступен",
|
||
unavailableMessage:
|
||
"Этот хост не подключён. Дождитесь его появления в сети перед обновлением.",
|
||
offlineTitle: "Хост не в сети",
|
||
offlineMessage: "Этот хост не в сети. Дождитесь его появления в сети перед обновлением.",
|
||
requestFailedTitle: "Не удалось обновить",
|
||
requestFailedMessage: "Не удалось обновить демон: {{error}}",
|
||
dialogFailedMessage: "Не удалось открыть диалог подтверждения обновления.",
|
||
},
|
||
dangerZone: "Опасная зона",
|
||
remove: {
|
||
title: "Удалить хост",
|
||
localTitle: "Удалить подключение к localhost",
|
||
hint: "Удаляет этот хост и сохранённые подключения к нему с этого устройства.",
|
||
localHint:
|
||
"Удаляет подключение к localhost с этого устройства и останавливает встроенный демон",
|
||
localConfirmTitle: "Удалить подключение к localhost и остановить демон?",
|
||
confirmMessage: "Удалить {{name}}? Сохранённые подключения к этому хосту будут удалены.",
|
||
localConfirmMessage:
|
||
"Подключение к localhost будет удалено, управление встроенным демоном отключено, а управляемый демон остановлен. Удалённые хосты останутся подключёнными.",
|
||
errorTitle: "Ошибка",
|
||
errorMessage: "Не удалось удалить хост",
|
||
localErrorMessage: "Не удалось удалить подключение к localhost",
|
||
},
|
||
},
|
||
},
|
||
providers: {
|
||
title: "Провайдеры",
|
||
addProvider: "Добавить провайдера",
|
||
providerDetails: "Сведения о провайдере {{name}}",
|
||
enableProvider: "Включить {{name}}",
|
||
unavailable: "Подключитесь к этому хосту, чтобы увидеть провайдеров",
|
||
loading: "Загрузка...",
|
||
addErrorTitle: "Не удалось добавить провайдера",
|
||
updateErrorTitle: "Не удалось обновить провайдера",
|
||
actions: {
|
||
menu: "Действия с {{name}}",
|
||
remove: "Удалить провайдера",
|
||
removing: "Удаление...",
|
||
},
|
||
remove: {
|
||
confirmTitle: "Удалить {{name}}?",
|
||
confirmMessage:
|
||
"Запись провайдера будет удалена из config.json. Это действие нельзя отменить.",
|
||
confirm: "Удалить",
|
||
errorTitle: "Не удалось удалить провайдера",
|
||
},
|
||
statuses: {
|
||
disabled: "Отключён",
|
||
loading: "Загрузка",
|
||
error: "Ошибка",
|
||
available: "Доступен",
|
||
notInstalled: "Не установлен",
|
||
},
|
||
models: {
|
||
one: "1 модель",
|
||
many: "{{count}} моделей",
|
||
addModel: "Добавить модель",
|
||
addCustomTitle: "Добавить пользовательскую модель",
|
||
modelId: "ID модели",
|
||
modelIdPlaceholder: "например, openai/gpt-5",
|
||
add: "Добавить",
|
||
adding: "Добавление...",
|
||
failedToSave: "Не удалось сохранить модель.",
|
||
removeModel: "Удалить {{id}}",
|
||
searchPlaceholder: "Поиск моделей",
|
||
loading: "Загрузка моделей...",
|
||
retry: "Повторить попытку",
|
||
retrying: "Повторная попытка...",
|
||
noSearchMatches: "Ни одна модель не соответствует вашему запросу",
|
||
noneDetected: "Модели не обнаружены",
|
||
discovered: "Обнаруженные модели",
|
||
custom: "Пользовательские модели",
|
||
updated: "Обновлено {{time}}",
|
||
},
|
||
diagnostic: {
|
||
title: "Диагностика",
|
||
button: "Диагностика",
|
||
refresh: "Обновить",
|
||
refreshing: "Обновление...",
|
||
copyLabel: "результаты диагностики",
|
||
copyAccessibility: "Скопировать результаты диагностики",
|
||
copyFailed: "Не удалось скопировать результаты диагностики",
|
||
refreshAccessibility: "Обновить диагностику",
|
||
refreshingAccessibility: "Диагностика обновляется",
|
||
running: "Выполняется диагностика...",
|
||
none: "Диагностика недоступна",
|
||
failedToFetch: "Не удалось получить диагностику.",
|
||
unknownError: "Неизвестная ошибка",
|
||
},
|
||
},
|
||
project: {
|
||
noEditableTarget: "Этот проект нельзя редактировать на этом хосте.",
|
||
backToProjects: "Вернуться к проектам",
|
||
edit: {
|
||
title: "Изменить проект",
|
||
name: "Название",
|
||
nameLabel: "Название проекта",
|
||
icon: "Значок",
|
||
chooseImage: "Выбрать изображение",
|
||
useAutomatic: "Использовать автоматический значок",
|
||
imageUrl: "URL изображения или сайта",
|
||
save: "Сохранить изменения",
|
||
savedToast: "Проект обновлён",
|
||
},
|
||
readFailures: {
|
||
invalidTitle: "Не удалось разобрать paseo.json",
|
||
invalidDescription: "Исправьте файл на диске, затем загрузите его заново.",
|
||
missingTitle: "У этого хоста нет этого проекта",
|
||
missingSingleHost: "У выбранного хоста нет записей об этом проекте.",
|
||
transportTitle: "Не удалось загрузить paseo.json.",
|
||
transportFallback: "Хост не ответил.",
|
||
failedTitle: "Не удалось загрузить paseo.json.",
|
||
failedDescription: "Загрузите данные заново, чтобы повторить попытку.",
|
||
},
|
||
worktree: {
|
||
title: "Хуки жизненного цикла worktree",
|
||
info: "Команды, которые выполняются при создании или удалении worktree для этого проекта.",
|
||
docs: "Документация",
|
||
docsTooltip:
|
||
"Дополнительную информацию и переменные среды, доступные для этих команд, см. в документации.",
|
||
setup: "Настройка",
|
||
setupAccessibility: "Команды настройки worktree",
|
||
uncommittedTitle: "Закоммитьте изменения в paseo.json",
|
||
uncommittedDescription:
|
||
"Новые worktree используют скрипт настройки из выбранной базовой ветки.",
|
||
teardown: "Удаление",
|
||
teardownAccessibility: "Команды удаления worktree",
|
||
},
|
||
scripts: {
|
||
title: "Скрипты",
|
||
info: "Долго работающие сервисы и одноразовые команды, которые можно запускать из любого агента этого проекта.",
|
||
empty: "Скриптов пока нет.",
|
||
untitled: "Безымянный скрипт",
|
||
port: "порт {{port}}",
|
||
menuAccessibility: "Открыть меню скриптов",
|
||
removeTitle: "Удалить скрипт?",
|
||
removeMessage: "Удалить {{name}}?",
|
||
removeFallbackName: "этот скрипт",
|
||
name: "Название",
|
||
command: "Команда",
|
||
nameAccessibility: "Название скрипта",
|
||
commandAccessibility: "Команда скрипта",
|
||
nameRequired: "Укажите название",
|
||
commandRequired: "Требуется команда",
|
||
newScript: "Новый скрипт",
|
||
editScript: "Изменить {{name}}",
|
||
runAsService: "Запускать как сервис",
|
||
serviceHint: "Paseo управляет процессом и назначает порт через переменную $PASEO_PORT.",
|
||
actions: {
|
||
add: "Добавить скрипт",
|
||
edit: "Редактировать",
|
||
remove: "Удалить",
|
||
},
|
||
},
|
||
metadata: {
|
||
title: "Генерация метаданных",
|
||
info: "Инструкции для этого проекта, добавляемые в промпты ИИ, с помощью которых Paseo генерирует метаданные. Используйте их, чтобы соблюдать принятые в команде правила именования веток, оформления коммитов и формата PR.",
|
||
branchName: "Названия веток",
|
||
branchNamePlaceholder:
|
||
"Добавляйте к веткам префиксы feat/ или fix/, а к личным веткам — mb/",
|
||
commitMessage: "Сообщения коммитов",
|
||
commitMessagePlaceholder: "Используйте формат Conventional Commits с областью",
|
||
pullRequest: "PR",
|
||
pullRequestPlaceholder:
|
||
"Начинайте с краткого резюме в один абзац и добавляйте раздел «План тестирования».",
|
||
},
|
||
writeFailures: {
|
||
staleTitle: "Конфигурация изменена на диске",
|
||
staleDescription: "Перед сохранением загрузите с диска последнюю версию paseo.json.",
|
||
failedTitle: "Не удалось сохранить paseo.json.",
|
||
failedDescription: "Повторите попытку или загрузите с диска последнюю версию paseo.json.",
|
||
},
|
||
actions: {
|
||
reload: "Загрузить заново",
|
||
tryAgain: "Повторить",
|
||
save: "Сохранить",
|
||
saved: "Проект сохранён.",
|
||
saving: "Сохранение...",
|
||
cancel: "Отмена",
|
||
},
|
||
},
|
||
},
|
||
};
|