feat(l10n): Update English localization with voice call states and model capabilities

This commit is contained in:
cogwheel0
2025-11-02 17:44:23 +05:30
parent b648ae29ea
commit 8321e3c721
23 changed files with 6242 additions and 1662 deletions

View File

@@ -1,7 +1,6 @@
{
"@@locale": "ru",
"appTitle": "Conduit",
"initializationFailed": "Ошибка инициализации",
"retry": "Повторить",
"back": "Назад",
"you": "Вы",
@@ -16,10 +15,6 @@
"@connectionIssueSubtitle": {
"description": "Подзаголовок с доступными действиями при недоступности сервера"
},
"stillOfflineMessage": "Мы все еще не можем подключиться к серверу. Проверьте соединение и повторите попытку.",
"@stillOfflineMessage": {
"description": "Сообщение после повторной попытки, когда соединение не восстановлено"
},
"account": "Аккаунт",
"supportConduit": "Поддержать Conduit",
"supportConduitSubtitle": "Сохраните независимость Conduit, финансируя разработку.",
@@ -37,32 +32,14 @@
"noResults": "Нет результатов",
"searchModels": "Поиск моделей...",
"errorMessage": "Что-то пошло не так. Пожалуйста, попробуйте еще раз.",
"loginButton": "Войти",
"menuItem": "Настройки",
"dynamicContentWithPlaceholder": "Добро пожаловать, {name}!",
"itemsCount": "{count, plural, =0{Нет элементов} one{{count} элемент} few{{count} элемента} other{{count} элементов}}",
"closeButtonSemantic": "Закрыть",
"loadingContent": "Загрузка содержимого",
"noItems": "Нет элементов",
"noItemsToDisplay": "Нет элементов для отображения",
"loadMore": "Загрузить еще",
"workspace": "Рабочее пространство",
"recentFiles": "Недавние файлы",
"knowledgeBase": "База знаний",
"noFilesYet": "Пока нет файлов",
"uploadDocsPrompt": "Загрузите документы для использования в разговорах с Conduit",
"uploadFirstFile": "Загрузить первый файл",
"attachments": "Вложения",
"knowledgeBaseEmpty": "База знаний пуста",
"createCollectionsPrompt": "Создайте коллекции связанных документов для удобной ссылки",
"chooseSourcePhoto": "Выберите источник",
"takePhoto": "Сделать фото",
"chooseFromGallery": "Выбрать из галереи",
"document": "Документ",
"documentHint": "PDF, Word или текстовый файл",
"uploadFileTitle": "Загрузить файл",
"fileUploadComingSoon": "Загрузка файлов для {type} скоро появится!",
"kbCreationComingSoon": "Создание базы знаний скоро появится!",
"backToServerSetup": "Вернуться к настройке сервера",
"connectedToServer": "Подключено к серверу",
"signIn": "Войти",
@@ -125,7 +102,6 @@
"onboardQuickSubtitle": "Откройте меню для переключения между чатами, рабочим пространством и профилем.",
"onboardQuickBullet1": "Нажмите на меню для доступа к чатам, рабочему пространству, профилю",
"onboardQuickBullet2": "Начните новый чат или управляйте моделями из верхней панели",
"addAttachment": "Добавить вложение",
"attachmentLabel": "Вложение",
"tools": "Инструменты",
"voiceInput": "Голосовой ввод",
@@ -157,16 +133,12 @@
"failedToDecodeImage": "Не удалось декодировать изображение",
"invalidImageFormat": "Неверный формат изображения",
"emptyImageData": "Пустые данные изображения",
"featureRequiresInternet": "Эта функция требует подключения к интернету",
"messagesWillSendWhenOnline": "Сообщения будут отправлены, когда вы снова будете онлайн",
"confirm": "Подтвердить",
"cancel": "Отмена",
"ok": "OK",
"inputField": "Поле ввода",
"captureDocumentOrImage": "Сфотографировать документ или изображение",
"checkConnection": "Проверить соединение",
"openSettings": "Открыть настройки",
"chooseDifferentFile": "Выбрать другой файл",
"goBack": "Назад",
"technicalDetails": "Технические детали",
"save": "Сохранить",
@@ -178,18 +150,9 @@
"newChat": "Новый чат",
"more": "Еще",
"clear": "Очистить",
"searchHint": "Поиск...",
"searchConversations": "Поиск разговоров...",
"create": "Создать",
"folderCreated": "Папка создана",
"failedToCreateFolder": "Не удалось создать папку",
"movedChatToFolder": "Перемещено «{title}» в «{folder}»",
"@movedChatToFolder": {
"placeholders": {
"title": {"type": "String"},
"folder": {"type": "String"}
}
},
"failedToMoveChat": "Не удалось переместить чат",
"failedToLoadChats": "Не удалось загрузить чаты",
"failedToUpdatePin": "Не удалось обновить закрепление",
@@ -219,13 +182,17 @@
"deleteMessagesMessage": "Удалить {count, plural, one{{count} сообщение} few{{count} сообщения} other{{count} сообщений}}?",
"@deleteMessagesMessage": {
"placeholders": {
"count": {"type": "int"}
"count": {
"type": "int"
}
}
},
"routeNotFound": "Маршрут не найден: {routeName}",
"@routeNotFound": {
"placeholders": {
"routeName": {"type": "String"}
"routeName": {
"type": "String"
}
}
},
"deleteChatTitle": "Удалить чат",
@@ -271,29 +238,55 @@
"headerNameTooLong": "Имя заголовка слишком длинное (максимум 64 символа)",
"headerNameInvalidChars": "Недопустимое имя заголовка. Используйте только буквы, цифры и эти символы: !#$&-^_`|~",
"headerNameReserved": "Невозможно переопределить зарезервированный заголовок «{key}»",
"@headerNameReserved": {"placeholders": {"key": {"type": "String"}}},
"@headerNameReserved": {
"placeholders": {
"key": {
"type": "String"
}
}
},
"headerValueEmpty": "Значение заголовка не может быть пустым",
"headerValueTooLong": "Значение заголовка слишком длинное (максимум 1024 символа)",
"headerValueInvalidChars": "Значение заголовка содержит недопустимые символы. Используйте только печатаемые ASCII.",
"headerValueUnsafe": "Значение заголовка содержит потенциально небезопасное содержимое",
"headerAlreadyExists": "Заголовок «{key}» уже существует. Сначала удалите его для обновления.",
"@headerAlreadyExists": {"placeholders": {"key": {"type": "String"}}},
"@headerAlreadyExists": {
"placeholders": {
"key": {
"type": "String"
}
}
},
"maxHeadersReachedDetail": "Разрешено максимум 10 пользовательских заголовков. Удалите некоторые, чтобы добавить больше.",
"editMessage": "Редактировать сообщение",
"noModelsAvailable": "Нет доступных моделей",
"followingSystem": "Следует за системой: {theme}",
"@followingSystem": {"placeholders": {"theme": {"type": "String"}}},
"@followingSystem": {
"placeholders": {
"theme": {
"type": "String"
}
}
},
"themeDark": "Темная",
"themePalette": "Цветовая палитра",
"@themePalette": {"description": "Заголовок для выбора цветовой палитры приложения."},
"themePaletteDescription": "Выберите акцентные цвета для кнопок, карточек и пузырьков чата.",
"@themePaletteDescription": {"description": "Вспомогательный текст, объясняющий выбор палитры."},
"@themePalette": {
"description": "Заголовок для выбора цветовой палитры приложения."
},
"themeLight": "Светлая",
"currentlyUsingDarkTheme": "Используется темная тема",
"currentlyUsingLightTheme": "Используется светлая тема",
"aboutConduit": "О Conduit",
"versionLabel": "Версия: {version} ({build})",
"@versionLabel": {"placeholders": {"version": {"type": "String"}, "build": {"type": "String"}}},
"@versionLabel": {
"placeholders": {
"version": {
"type": "String"
},
"build": {
"type": "String"
}
}
},
"githubRepository": "Репозиторий GitHub",
"unableToLoadAppInfo": "Не удалось загрузить информацию о приложении",
"thinking": "Думаю...",
@@ -301,7 +294,12 @@
"thoughtForDuration": "Думал {duration}",
"@thoughtForDuration": {
"description": "Показывает, сколько времени ассистент думал перед ответом.",
"placeholders": {"duration": {"type": "String", "example": "3с"}}
"placeholders": {
"duration": {
"type": "String",
"example": "3с"
}
}
},
"appCustomization": "Настройка",
"appCustomizationSubtitle": "Тема, язык, голос и quickpills",
@@ -325,12 +323,413 @@
"display": "Отображение",
"realtime": "Реальное время",
"transportMode": "Режим транспорта",
"transportModeDescription": "Выберите, как приложение подключается для обновлений в реальном времени.",
"mode": "Режим",
"transportModePolling": "Опрос (резерв)",
"transportModeWs": "Только WebSocket",
"transportModePollingInfo": "Переходит на HTTP-опрос, если WebSocket заблокирован. Возвращается к WebSocket, когда это возможно.",
"transportModeWsInfo": "Меньше накладных расходов, но может не работать за строгими прокси/брандмауэрами.",
"websocketConnectionError": "Не удалось установить соединение в реальном времени. Пожалуйста, проверьте сеть и конфигурацию сервера.",
"websocketReconnectFailed": "Сбой соединения в реальном времени. Потоковая передача может работать неправильно."
"quickActionsSelectedCount": "{count, plural, =0{Действия не выбраны} one{{count} действие выбрано} few{{count} действия выбраны} many{{count} действий выбрано} other{{count} действий выбрано}}",
"@quickActionsSelectedCount": {
"description": "Subtitle indicating how many quick actions are selected.",
"placeholders": {
"count": {
"type": "int",
"example": "2"
}
}
},
"autoSelectDescription": "Позвольте приложению выбрать лучшую модель",
"@autoSelectDescription": {
"description": "Explains what the auto-select model setting does."
},
"ttsEngineLabel": "Движок",
"@ttsEngineLabel": {
"description": "Label for selecting the text-to-speech engine."
},
"ttsEngineDevice": "На устройстве",
"@ttsEngineDevice": {
"description": "Chip label for using on-device text-to-speech."
},
"ttsEngineServer": "Сервер",
"@ttsEngineServer": {
"description": "Chip label for using server-side text-to-speech."
},
"modelCapabilityMultimodal": "Мультимодальность",
"@modelCapabilityMultimodal": {
"description": "Capability chip label for models that support multimodal input."
},
"modelCapabilityReasoning": "Рассуждения",
"@modelCapabilityReasoning": {
"description": "Capability chip label for models that support reasoning features."
},
"voiceCallTitle": "Голосовой звонок",
"@voiceCallTitle": {
"description": "Title displayed on the voice call screen."
},
"voiceCallPause": "Пауза",
"@voiceCallPause": {
"description": "Button label to pause a voice call."
},
"voiceCallResume": "Продолжить",
"@voiceCallResume": {
"description": "Button label to resume a paused voice call."
},
"voiceCallStop": "Остановить",
"@voiceCallStop": {
"description": "Button label to stop the active voice call."
},
"voiceCallEnd": "Завершить звонок",
"@voiceCallEnd": {
"description": "Button label to end the voice call session."
},
"chooseDifferentFile": "Выбрать другой файл",
"@chooseDifferentFile": {
"description": "Action label prompting the user to pick another file."
},
"errorWithMessage": "Ошибка: {message}",
"@errorWithMessage": {
"description": "Error label with appended message text.",
"placeholders": {
"message": {
"type": "String",
"example": "Network timeout"
}
}
},
"networkTimeoutError": "Время соединения истекло. Проверьте подключение к интернету и повторите попытку.",
"@networkTimeoutError": {
"description": "User-facing message when a network request times out."
},
"networkUnreachableError": "Не удаётся связаться с сервером. Проверьте URL сервера и подключение к интернету.",
"@networkUnreachableError": {
"description": "User-facing message when the server cannot be reached."
},
"networkServerNotResponding": "Сервер не отвечает. Убедитесь, что он запущен и доступен.",
"@networkServerNotResponding": {
"description": "User-facing message when the server does not respond to a request."
},
"networkGenericError": "Проблема с подключением. Проверьте подключение к интернету.",
"@networkGenericError": {
"description": "Fallback message for generic network errors."
},
"serverError500": "На сервере возникли проблемы. Обычно это временно.",
"@serverError500": {
"description": "Message when a 500 error is encountered."
},
"serverErrorUnavailable": "Сервер временно недоступен. Повторите попытку чуть позже.",
"@serverErrorUnavailable": {
"description": "Message when a 502/503 error is encountered."
},
"serverErrorTimeout": "Сервер слишком долго отвечает. Повторите попытку.",
"@serverErrorTimeout": {
"description": "Message when the server times out."
},
"serverErrorGeneric": "Сервер испытывает трудности. Повторите попытку позже.",
"@serverErrorGeneric": {
"description": "Fallback server error message."
},
"authSessionExpired": "Сессия истекла. Выполните вход снова.",
"@authSessionExpired": {
"description": "Message when an authentication session expires."
},
"authForbidden": "У вас нет прав для выполнения этого действия.",
"@authForbidden": {
"description": "Message when the user lacks required permissions."
},
"authInvalidToken": "Токен аутентификации недействителен. Выполните вход снова.",
"@authInvalidToken": {
"description": "Message when the authentication token is invalid."
},
"authGenericError": "Проблема с аутентификацией. Выполните вход снова.",
"@authGenericError": {
"description": "Fallback authentication error message."
},
"validationInvalidEmail": "Введите корректный адрес электронной почты.",
"@validationInvalidEmail": {
"description": "Validation message for invalid email input."
},
"validationWeakPassword": "Пароль не соответствует требованиям. Проверьте его и повторите попытку.",
"@validationWeakPassword": {
"description": "Validation message for weak passwords."
},
"validationMissingRequired": "Заполните все обязательные поля.",
"@validationMissingRequired": {
"description": "Validation message when required fields are missing."
},
"validationFormatError": "Некоторые данные указаны в неверном формате. Проверьте и повторите попытку.",
"@validationFormatError": {
"description": "Validation message for generic formatting issues."
},
"validationGenericError": "Проверьте введённые данные и повторите попытку.",
"@validationGenericError": {
"description": "Fallback validation message."
},
"fileNotFound": "Файл не найден. Возможно, он был перемещён или удалён.",
"@fileNotFound": {
"description": "Message when a file cannot be located."
},
"fileAccessDenied": "Нет доступа к файлу. Проверьте разрешения.",
"@fileAccessDenied": {
"description": "Message when file access is denied."
},
"fileTooLarge": "Файл слишком большой. Выберите файл меньшего размера.",
"@fileTooLarge": {
"description": "Message when a file exceeds size limits."
},
"fileGenericError": "Проблема с файлом. Попробуйте другой файл.",
"@fileGenericError": {
"description": "Fallback file error message."
},
"permissionCameraRequired": "Требуется доступ к камере. Включите его в настройках.",
"@permissionCameraRequired": {
"description": "Message when camera permission is missing."
},
"permissionStorageRequired": "Требуется доступ к хранилищу. Включите его в настройках.",
"@permissionStorageRequired": {
"description": "Message when storage permission is missing."
},
"permissionMicrophoneRequired": "Требуется доступ к микрофону. Включите его в настройках.",
"@permissionMicrophoneRequired": {
"description": "Message when microphone permission is missing."
},
"permissionGenericError": "Требуется разрешение. Проверьте разрешения приложения в настройках.",
"@permissionGenericError": {
"description": "Fallback permission error message."
},
"actionRetryRequest": "Повторите запрос.",
"@actionRetryRequest": {
"description": "Description for retrying a failed request."
},
"actionVerifyConnection": "Проверьте подключение к интернету.",
"@actionVerifyConnection": {
"description": "Description for checking internet connectivity."
},
"actionRetryOperation": "Повторите операцию.",
"@actionRetryOperation": {
"description": "Description for retrying the same operation."
},
"actionRetryAfterDelay": "Подождите немного и попробуйте снова.",
"@actionRetryAfterDelay": {
"description": "Description suggesting a short delay before retrying."
},
"actionSignInToAccount": "Войдите в свою учётную запись.",
"@actionSignInToAccount": {
"description": "Description for signing back into the app."
},
"actionSelectAnotherFile": "Выберите другой файл.",
"@actionSelectAnotherFile": {
"description": "Description for choosing a different file."
},
"actionOpenAppSettings": "Откройте настройки приложения, чтобы предоставить разрешения.",
"@actionOpenAppSettings": {
"description": "Description for opening system or app settings."
},
"actionRetryAfterPermission": "Повторите попытку после предоставления разрешения.",
"@actionRetryAfterPermission": {
"description": "Description for retrying once permissions are granted."
},
"actionReturnToPrevious": "Вернуться на предыдущий экран.",
"@actionReturnToPrevious": {
"description": "Description for navigating back to the prior screen."
},
"continueAction": "Продолжить",
"@continueAction": {
"description": "Button label to continue an action or flow."
},
"loadingShort": "Загрузка",
"@loadingShort": {
"description": "Short loading label used for accessibility."
},
"loadingAnnouncement": "Загрузка: {message}",
"@loadingAnnouncement": {
"description": "Screen reader announcement when loading a resource.",
"placeholders": {
"message": {
"type": "String",
"example": "Messages"
}
}
},
"errorAnnouncement": "Ошибка: {error}",
"@errorAnnouncement": {
"description": "Screen reader announcement for an error.",
"placeholders": {
"error": {
"type": "String",
"example": "Network timeout"
}
}
},
"errorAnnouncementWithSuggestion": "Ошибка: {error}. {suggestion}",
"@errorAnnouncementWithSuggestion": {
"description": "Screen reader announcement for an error with a follow-up suggestion.",
"placeholders": {
"error": {
"type": "String",
"example": "Network timeout"
},
"suggestion": {
"type": "String",
"example": "Please try again later."
}
}
},
"successAnnouncement": "Успешно: {message}",
"@successAnnouncement": {
"description": "Screen reader announcement for successful actions.",
"placeholders": {
"message": {
"type": "String",
"example": "Profile updated"
}
}
},
"requiredFieldLabel": "{label} *",
"@requiredFieldLabel": {
"description": "Label text indicating a required field.",
"placeholders": {
"label": {
"type": "String",
"example": "Email"
}
}
},
"requiredFieldHelper": "Обязательное поле",
"@requiredFieldHelper": {
"description": "Helper text indicating that the field is required."
},
"switchOnLabel": "Вкл.",
"@switchOnLabel": {
"description": "Semantic label when a switch is enabled."
},
"switchOffLabel": "Выкл.",
"@switchOffLabel": {
"description": "Semantic label when a switch is disabled."
},
"dialogSemanticLabel": "Диалог: {title}",
"@dialogSemanticLabel": {
"description": "Semantic label describing the dialog title.",
"placeholders": {
"title": {
"type": "String",
"example": "Settings"
}
}
},
"previousLabel": "Назад",
"@previousLabel": {
"description": "Label for navigating to the previous item."
},
"nextLabel": "Далее",
"@nextLabel": {
"description": "Label for navigating to the next item."
},
"themePaletteConduitLabel": "Conduit",
"@themePaletteConduitLabel": {
"description": "Palette name for the default Conduit theme."
},
"themePaletteConduitDescription": "Нейтральная чистая тема, созданная для Conduit.",
"@themePaletteConduitDescription": {
"description": "Description of the Conduit palette."
},
"themePaletteClaudeLabel": "Claude",
"@themePaletteClaudeLabel": {
"description": "Palette name inspired by the Claude web client."
},
"themePaletteClaudeDescription": "Тёплая тактильная палитра из веб-клиента Claude.",
"@themePaletteClaudeDescription": {
"description": "Description of the Claude palette."
},
"themePaletteT3ChatLabel": "T3 Chat",
"@themePaletteT3ChatLabel": {
"description": "Palette name inspired by the T3 Stack brand."
},
"themePaletteT3ChatDescription": "Игривые градиенты, вдохновлённые брендом T3 Stack.",
"@themePaletteT3ChatDescription": {
"description": "Description of the T3 Chat palette."
},
"themePaletteCatppuccinLabel": "Catppuccin",
"@themePaletteCatppuccinLabel": {
"description": "Palette name for Catppuccin colors."
},
"themePaletteCatppuccinDescription": "Мягкая пастельная палитра.",
"@themePaletteCatppuccinDescription": {
"description": "Description of the Catppuccin palette."
},
"themePaletteTangerineLabel": "Tangerine",
"@themePaletteTangerineLabel": {
"description": "Palette name for Tangerine colors."
},
"themePaletteTangerineDescription": "Тёплая палитра оранжевых и сланцевых оттенков.",
"@themePaletteTangerineDescription": {
"description": "Description of the Tangerine palette."
},
"@onboardStartTitle": {
"description": "Onboarding card: start chatting title.",
"placeholders": {
"username": {
"type": "String",
"example": "Alex"
}
}
},
"@notAnImageFile": {
"description": "Error when a referenced file is not an image.",
"placeholders": {
"fileName": {
"type": "String",
"example": "image.txt"
}
}
},
"@failedToLoadImage": {
"description": "Error including the underlying reason when image loading fails.",
"placeholders": {
"error": {
"type": "String",
"example": "Network error"
}
}
},
"@ttsVoicesForLanguage": {
"description": "Section header for voices matching the app language",
"placeholders": {
"language": {
"type": "String",
"example": "EN"
}
}
},
"voiceCallReady": "Готово",
"@voiceCallReady": {
"description": "Status label shown when the voice call is ready to start."
},
"voiceCallConnecting": "Подключение...",
"@voiceCallConnecting": {
"description": "Status label shown while the voice call is connecting."
},
"voiceCallListening": "Слушает",
"@voiceCallListening": {
"description": "Status label shown while the call is listening for input."
},
"voiceCallPaused": "Пауза",
"@voiceCallPaused": {
"description": "Status label shown when the call is paused."
},
"voiceCallProcessing": "Обрабатывает...",
"@voiceCallProcessing": {
"description": "Status label shown while the call processes a response."
},
"voiceCallSpeaking": "Говорит",
"@voiceCallSpeaking": {
"description": "Status label shown while the assistant is speaking."
},
"voiceCallDisconnected": "Отключено",
"@voiceCallDisconnected": {
"description": "Status label shown when the voice call has ended or disconnected."
},
"voiceCallErrorHelp": "Проверьте:\n• Разрешение на микрофон предоставлено\n• Распознавание речи доступно на устройстве\n• Есть подключение к серверу",
"@voiceCallErrorHelp": {
"description": "Guidance shown when the voice call encounters an error."
}
}