diff --git a/App/osaurus.xcodeproj/project.pbxproj b/App/osaurus.xcodeproj/project.pbxproj index 018716ad5..07a97b780 100644 --- a/App/osaurus.xcodeproj/project.pbxproj +++ b/App/osaurus.xcodeproj/project.pbxproj @@ -224,6 +224,7 @@ knownRegions = ( en, de, + ru, "zh-Hans", Base, ); diff --git a/App/osaurus/InfoPlist.xcstrings b/App/osaurus/InfoPlist.xcstrings index 000e16edf..d0ac57c88 100644 --- a/App/osaurus/InfoPlist.xcstrings +++ b/App/osaurus/InfoPlist.xcstrings @@ -1,240 +1,318 @@ { - "sourceLanguage" : "en", - "strings" : { - "CFBundleDisplayName" : { - "comment" : "Bundle display name", - "extractionState" : "extracted_with_value", - "localizations" : { - "en" : { - "stringUnit" : { - "state" : "new", - "value" : "Osaurus" - } - }, - "zh-Hans" : { - "stringUnit" : { - "state" : "translated", - "value" : "Osaurus" + "sourceLanguage": "en", + "strings": { + "CFBundleDisplayName": { + "comment": "Bundle display name", + "extractionState": "extracted_with_value", + "localizations": { + "en": { + "stringUnit": { + "state": "new", + "value": "Osaurus" + } + }, + "zh-Hans": { + "stringUnit": { + "state": "translated", + "value": "Osaurus" + } + }, + "ru": { + "stringUnit": { + "state": "translated", + "value": "Osaurus" } } } }, - "CFBundleName" : { - "comment" : "Bundle name", - "extractionState" : "extracted_with_value", - "localizations" : { - "en" : { - "stringUnit" : { - "state" : "new", - "value" : "osaurus" + "CFBundleName": { + "comment": "Bundle name", + "extractionState": "extracted_with_value", + "localizations": { + "en": { + "stringUnit": { + "state": "new", + "value": "osaurus" } }, - "zh-Hans" : { - "stringUnit" : { - "state" : "translated", - "value" : "osaurus" + "zh-Hans": { + "stringUnit": { + "state": "translated", + "value": "osaurus" + } + }, + "ru": { + "stringUnit": { + "state": "translated", + "value": "Osaurus" } } } }, - "NSAppleEventsUsageDescription" : { - "comment" : "Privacy - AppleEvents Sending Usage Description", - "extractionState" : "extracted_with_value", - "localizations" : { - "en" : { - "stringUnit" : { - "state" : "new", - "value" : "Osaurus plugins may use automation to control other applications on your behalf." + "NSAppleEventsUsageDescription": { + "comment": "Privacy - AppleEvents Sending Usage Description", + "extractionState": "extracted_with_value", + "localizations": { + "en": { + "stringUnit": { + "state": "new", + "value": "Osaurus plugins may use automation to control other applications on your behalf." + } + }, + "zh-Hans": { + "stringUnit": { + "state": "translated", + "value": "Osaurus 插件可能会使用自动化代表你控制其他应用。" } }, - "zh-Hans" : { - "stringUnit" : { - "state" : "translated", - "value" : "Osaurus 插件可能会使用自动化代表你控制其他应用。" + "ru": { + "stringUnit": { + "state": "translated", + "value": "Плагины Osaurus могут использовать автоматизацию для управления другими приложениями от вашего имени." } } } }, - "NSCalendarsFullAccessUsageDescription" : { - "comment" : "Privacy - Calendars Full Access Usage Description", - "extractionState" : "extracted_with_value", - "localizations" : { - "en" : { - "stringUnit" : { - "state" : "new", - "value" : "Osaurus plugins may access your calendar to read and create events." + "NSCalendarsFullAccessUsageDescription": { + "comment": "Privacy - Calendars Full Access Usage Description", + "extractionState": "extracted_with_value", + "localizations": { + "en": { + "stringUnit": { + "state": "new", + "value": "Osaurus plugins may access your calendar to read and create events." + } + }, + "zh-Hans": { + "stringUnit": { + "state": "translated", + "value": "Osaurus 插件可能会访问你的日历,以读取和创建日程。" } }, - "zh-Hans" : { - "stringUnit" : { - "state" : "translated", - "value" : "Osaurus 插件可能会访问你的日历,以读取和创建日程。" + "ru": { + "stringUnit": { + "state": "translated", + "value": "Плагины Osaurus могут получать доступ к вашему календарю для чтения и создания событий." } } } }, - "NSCalendarsUsageDescription" : { - "comment" : "Privacy - Calendars Usage Description", - "extractionState" : "extracted_with_value", - "localizations" : { - "en" : { - "stringUnit" : { - "state" : "new", - "value" : "Osaurus plugins may access your calendar to read and create events." + "NSCalendarsUsageDescription": { + "comment": "Privacy - Calendars Usage Description", + "extractionState": "extracted_with_value", + "localizations": { + "en": { + "stringUnit": { + "state": "new", + "value": "Osaurus plugins may access your calendar to read and create events." } }, - "zh-Hans" : { - "stringUnit" : { - "state" : "translated", - "value" : "Osaurus 插件可能会访问你的日历,以读取和创建日程。" + "zh-Hans": { + "stringUnit": { + "state": "translated", + "value": "Osaurus 插件可能会访问你的日历,以读取和创建日程。" + } + }, + "ru": { + "stringUnit": { + "state": "translated", + "value": "Плагины Osaurus могут получать доступ к вашему календарю для чтения и создания событий." } } } }, - "NSContactsUsageDescription" : { - "comment" : "Privacy - Contacts Usage Description", - "extractionState" : "extracted_with_value", - "localizations" : { - "en" : { - "stringUnit" : { - "state" : "new", - "value" : "Osaurus plugins may access your contacts to search and read contact information." + "NSContactsUsageDescription": { + "comment": "Privacy - Contacts Usage Description", + "extractionState": "extracted_with_value", + "localizations": { + "en": { + "stringUnit": { + "state": "new", + "value": "Osaurus plugins may access your contacts to search and read contact information." + } + }, + "zh-Hans": { + "stringUnit": { + "state": "translated", + "value": "Osaurus 插件可能会访问你的联系人,以搜索和读取联系人信息。" } }, - "zh-Hans" : { - "stringUnit" : { - "state" : "translated", - "value" : "Osaurus 插件可能会访问你的联系人,以搜索和读取联系人信息。" + "ru": { + "stringUnit": { + "state": "translated", + "value": "Плагины Osaurus могут получать доступ к вашим контактам для поиска и чтения контактной информации." } } } }, - "NSHumanReadableCopyright" : { - "comment" : "Copyright (human-readable)", - "extractionState" : "extracted_with_value", - "localizations" : { - "en" : { - "stringUnit" : { - "state" : "new", - "value" : "" + "NSHumanReadableCopyright": { + "comment": "Copyright (human-readable)", + "extractionState": "extracted_with_value", + "localizations": { + "en": { + "stringUnit": { + "state": "new", + "value": "" } }, - "zh-Hans" : { - "stringUnit" : { - "state" : "translated", - "value" : "" + "zh-Hans": { + "stringUnit": { + "state": "translated", + "value": "" + } + }, + "ru": { + "stringUnit": { + "state": "translated", + "value": "" } } } }, - "NSLocalNetworkUsageDescription" : { - "comment" : "Privacy - Local Network Usage Description", - "extractionState" : "extracted_with_value", - "localizations" : { - "en" : { - "stringUnit" : { - "state" : "new", - "value" : "Osaurus uses the local network to discover and connect to agents running on other devices." + "NSLocalNetworkUsageDescription": { + "comment": "Privacy - Local Network Usage Description", + "extractionState": "extracted_with_value", + "localizations": { + "en": { + "stringUnit": { + "state": "new", + "value": "Osaurus uses the local network to discover and connect to agents running on other devices." + } + }, + "zh-Hans": { + "stringUnit": { + "state": "translated", + "value": "Osaurus 使用本地网络来发现并连接运行在其他设备上的智能体。" } }, - "zh-Hans" : { - "stringUnit" : { - "state" : "translated", - "value" : "Osaurus 使用本地网络来发现并连接运行在其他设备上的智能体。" + "ru": { + "stringUnit": { + "state": "translated", + "value": "Osaurus использует локальную сеть для обнаружения агентов, работающих на других устройствах, и подключения к ним." } } } }, - "NSLocationUsageDescription" : { - "comment" : "Privacy - Location Usage Description", - "extractionState" : "extracted_with_value", - "localizations" : { - "en" : { - "stringUnit" : { - "state" : "new", - "value" : "Osaurus plugins may access your location to provide location-based services." + "NSLocationUsageDescription": { + "comment": "Privacy - Location Usage Description", + "extractionState": "extracted_with_value", + "localizations": { + "en": { + "stringUnit": { + "state": "new", + "value": "Osaurus plugins may access your location to provide location-based services." } }, - "zh-Hans" : { - "stringUnit" : { - "state" : "translated", - "value" : "Osaurus 插件可能会访问你的位置,以提供基于位置的服务。" + "zh-Hans": { + "stringUnit": { + "state": "translated", + "value": "Osaurus 插件可能会访问你的位置,以提供基于位置的服务。" + } + }, + "ru": { + "stringUnit": { + "state": "translated", + "value": "Плагины Osaurus могут получать доступ к вашему местоположению для предоставления услуг на основе местоположения." } } } }, - "NSLocationWhenInUseUsageDescription" : { - "comment" : "Privacy - Location When In Use Usage Description", - "extractionState" : "extracted_with_value", - "localizations" : { - "en" : { - "stringUnit" : { - "state" : "new", - "value" : "Osaurus plugins may access your location to provide location-based services." + "NSLocationWhenInUseUsageDescription": { + "comment": "Privacy - Location When In Use Usage Description", + "extractionState": "extracted_with_value", + "localizations": { + "en": { + "stringUnit": { + "state": "new", + "value": "Osaurus plugins may access your location to provide location-based services." + } + }, + "zh-Hans": { + "stringUnit": { + "state": "translated", + "value": "Osaurus 插件可能会访问你的位置,以提供基于位置的服务。" } }, - "zh-Hans" : { - "stringUnit" : { - "state" : "translated", - "value" : "Osaurus 插件可能会访问你的位置,以提供基于位置的服务。" + "ru": { + "stringUnit": { + "state": "translated", + "value": "Плагины Osaurus могут получать доступ к вашему местоположению для предоставления услуг на основе местоположения." } } } }, - "NSMicrophoneUsageDescription" : { - "comment" : "Privacy - Microphone Usage Description", - "extractionState" : "extracted_with_value", - "localizations" : { - "en" : { - "stringUnit" : { - "state" : "new", - "value" : "Osaurus uses the microphone for on-device voice transcription with FluidAudio." + "NSMicrophoneUsageDescription": { + "comment": "Privacy - Microphone Usage Description", + "extractionState": "extracted_with_value", + "localizations": { + "en": { + "stringUnit": { + "state": "new", + "value": "Osaurus uses the microphone for on-device voice transcription with FluidAudio." + } + }, + "zh-Hans": { + "stringUnit": { + "state": "translated", + "value": "Osaurus 使用麦克风通过 FluidAudio 进行设备端语音转写。" } }, - "zh-Hans" : { - "stringUnit" : { - "state" : "translated", - "value" : "Osaurus 使用麦克风通过 FluidAudio 进行设备端语音转写。" + "ru": { + "stringUnit": { + "state": "translated", + "value": "Osaurus использует микрофон для транскрипции голоса на устройстве с помощью FluidAudio." } } } }, - "NSRemindersUsageDescription" : { - "comment" : "Privacy - Reminders Usage Description", - "extractionState" : "extracted_with_value", - "localizations" : { - "en" : { - "stringUnit" : { - "state" : "new", - "value" : "Osaurus plugins may access your reminders to read and create tasks." + "NSRemindersUsageDescription": { + "comment": "Privacy - Reminders Usage Description", + "extractionState": "extracted_with_value", + "localizations": { + "en": { + "stringUnit": { + "state": "new", + "value": "Osaurus plugins may access your reminders to read and create tasks." } }, - "zh-Hans" : { - "stringUnit" : { - "state" : "translated", - "value" : "Osaurus 插件可能会访问你的提醒事项,以读取和创建任务。" + "zh-Hans": { + "stringUnit": { + "state": "translated", + "value": "Osaurus 插件可能会访问你的提醒事项,以读取和创建任务。" + } + }, + "ru": { + "stringUnit": { + "state": "translated", + "value": "Плагины Osaurus могут получать доступ к вашим напоминаниям для чтения и создания задач." } } } }, - "NSScreenCaptureUsageDescription" : { - "comment" : "Privacy - Screen Capture Usage Description", - "extractionState" : "stale", - "localizations" : { - "en" : { - "stringUnit" : { - "state" : "new", - "value" : "Osaurus can capture system audio for transcription. Screen content is not recorded." + "NSScreenCaptureUsageDescription": { + "comment": "Privacy - Screen Capture Usage Description", + "extractionState": "stale", + "localizations": { + "en": { + "stringUnit": { + "state": "new", + "value": "Osaurus can capture system audio for transcription. Screen content is not recorded." + } + }, + "zh-Hans": { + "stringUnit": { + "state": "translated", + "value": "Osaurus 可以捕获系统音频用于转写。不会录制屏幕内容。" } }, - "zh-Hans" : { - "stringUnit" : { - "state" : "translated", - "value" : "Osaurus 可以捕获系统音频用于转写。不会录制屏幕内容。" + "ru": { + "stringUnit": { + "state": "translated", + "value": "Osaurus может захватывать системный звук для транскрипции. Содержимое экрана не записывается." } } } } }, - "version" : "1.0" -} \ No newline at end of file + "version": "1.0" +} diff --git a/App/osaurus/Localizable.xcstrings b/App/osaurus/Localizable.xcstrings index 7ec229791..661725eaf 100644 --- a/App/osaurus/Localizable.xcstrings +++ b/App/osaurus/Localizable.xcstrings @@ -1,426 +1,590 @@ { - "sourceLanguage" : "en", - "strings" : { - "About Osaurus" : { - "localizations" : { - "de" : { - "stringUnit" : { - "state" : "translated", - "value" : "Über Osaurus" + "sourceLanguage": "en", + "strings": { + "About Osaurus": { + "localizations": { + "de": { + "stringUnit": { + "state": "translated", + "value": "Über Osaurus" } }, - "zh-Hans" : { - "stringUnit" : { - "state" : "translated", - "value" : "关于 Osaurus" + "zh-Hans": { + "stringUnit": { + "state": "translated", + "value": "关于 Osaurus" + } + }, + "ru": { + "stringUnit": { + "state": "translated", + "value": "О программе Osaurus" } } } }, - "Acknowledgements…" : { - "localizations" : { - "de" : { - "stringUnit" : { - "state" : "translated", - "value" : "Danksagungen…" + "Acknowledgements…": { + "localizations": { + "de": { + "stringUnit": { + "state": "translated", + "value": "Danksagungen…" + } + }, + "zh-Hans": { + "stringUnit": { + "state": "translated", + "value": "致谢…" } }, - "zh-Hans" : { - "stringUnit" : { - "state" : "translated", - "value" : "致谢…" + "ru": { + "stringUnit": { + "state": "translated", + "value": "Благодарности…" } } } }, - "Agents" : { - "localizations" : { - "de" : { - "stringUnit" : { - "state" : "translated", - "value" : "Agenten" + "Agents": { + "localizations": { + "de": { + "stringUnit": { + "state": "translated", + "value": "Agenten" } }, - "zh-Hans" : { - "stringUnit" : { - "state" : "translated", - "value" : "智能体" + "zh-Hans": { + "stringUnit": { + "state": "translated", + "value": "智能体" + } + }, + "ru": { + "stringUnit": { + "state": "translated", + "value": "Агенты" } } } }, - "Default" : { - "comment" : "Name of an agent that can be used to create a new chat window.", - "isCommentAutoGenerated" : true + "Default": { + "comment": "Name of an agent that can be used to create a new chat window.", + "isCommentAutoGenerated": true, + "localizations": { + "ru": { + "stringUnit": { + "state": "translated", + "value": "По умолчанию" + } + } + } }, - "Disable Voice Detection" : { - "localizations" : { - "de" : { - "stringUnit" : { - "state" : "translated", - "value" : "Spracherkennung deaktivieren" + "Disable Voice Detection": { + "localizations": { + "de": { + "stringUnit": { + "state": "translated", + "value": "Spracherkennung deaktivieren" + } + }, + "zh-Hans": { + "stringUnit": { + "state": "translated", + "value": "关闭语音检测" } }, - "zh-Hans" : { - "stringUnit" : { - "state" : "translated", - "value" : "关闭语音检测" + "ru": { + "stringUnit": { + "state": "translated", + "value": "Отключить обнаружение голоса" } } } }, - "Discord Community" : { - "localizations" : { - "de" : { - "stringUnit" : { - "state" : "translated", - "value" : "Discord-Community" + "Discord Community": { + "localizations": { + "de": { + "stringUnit": { + "state": "translated", + "value": "Discord-Community" } }, - "zh-Hans" : { - "stringUnit" : { - "state" : "translated", - "value" : "Discord 社区" + "zh-Hans": { + "stringUnit": { + "state": "translated", + "value": "Discord 社区" + } + }, + "ru": { + "stringUnit": { + "state": "translated", + "value": "Сообщество Discord" } } } }, - "Documentation" : { - "localizations" : { - "de" : { - "stringUnit" : { - "state" : "translated", - "value" : "Dokumentation" + "Documentation": { + "localizations": { + "de": { + "stringUnit": { + "state": "translated", + "value": "Dokumentation" + } + }, + "zh-Hans": { + "stringUnit": { + "state": "translated", + "value": "文档" } }, - "zh-Hans" : { - "stringUnit" : { - "state" : "translated", - "value" : "文档" + "ru": { + "stringUnit": { + "state": "translated", + "value": "Документация" } } } }, - "Enable Voice Detection" : { - "localizations" : { - "de" : { - "stringUnit" : { - "state" : "translated", - "value" : "Spracherkennung aktivieren" + "Enable Voice Detection": { + "localizations": { + "de": { + "stringUnit": { + "state": "translated", + "value": "Spracherkennung aktivieren" + } + }, + "zh-Hans": { + "stringUnit": { + "state": "translated", + "value": "开启语音检测" } }, - "zh-Hans" : { - "stringUnit" : { - "state" : "translated", - "value" : "开启语音检测" + "ru": { + "stringUnit": { + "state": "translated", + "value": "Включить обнаружение голоса" } } } }, - "Keyboard Shortcuts" : { - "localizations" : { - "de" : { - "stringUnit" : { - "state" : "translated", - "value" : "Tastaturkurzbefehle" + "Keyboard Shortcuts": { + "localizations": { + "de": { + "stringUnit": { + "state": "translated", + "value": "Tastaturkurzbefehle" } }, - "zh-Hans" : { - "stringUnit" : { - "state" : "translated", - "value" : "键盘快捷键" + "zh-Hans": { + "stringUnit": { + "state": "translated", + "value": "键盘快捷键" + } + }, + "ru": { + "stringUnit": { + "state": "translated", + "value": "Сочетания клавиш" } } } }, - "Manage Agents…" : { - "localizations" : { - "de" : { - "stringUnit" : { - "state" : "translated", - "value" : "Agenten verwalten…" + "Manage Agents…": { + "localizations": { + "de": { + "stringUnit": { + "state": "translated", + "value": "Agenten verwalten…" + } + }, + "zh-Hans": { + "stringUnit": { + "state": "translated", + "value": "管理智能体…" } }, - "zh-Hans" : { - "stringUnit" : { - "state" : "translated", - "value" : "管理智能体…" + "ru": { + "stringUnit": { + "state": "translated", + "value": "Управление агентами…" } } } }, - "Manage Schedules…" : { - "localizations" : { - "de" : { - "stringUnit" : { - "state" : "translated", - "value" : "Zeitpläne verwalten…" + "Manage Schedules…": { + "localizations": { + "de": { + "stringUnit": { + "state": "translated", + "value": "Zeitpläne verwalten…" } }, - "zh-Hans" : { - "stringUnit" : { - "state" : "translated", - "value" : "管理计划任务…" + "zh-Hans": { + "stringUnit": { + "state": "translated", + "value": "管理计划任务…" + } + }, + "ru": { + "stringUnit": { + "state": "translated", + "value": "Управление расписаниями…" } } } }, - "Manage Themes…" : { - "localizations" : { - "de" : { - "stringUnit" : { - "state" : "translated", - "value" : "Themes verwalten…" + "Manage Themes…": { + "localizations": { + "de": { + "stringUnit": { + "state": "translated", + "value": "Themes verwalten…" + } + }, + "zh-Hans": { + "stringUnit": { + "state": "translated", + "value": "管理主题…" } }, - "zh-Hans" : { - "stringUnit" : { - "state" : "translated", - "value" : "管理主题…" + "ru": { + "stringUnit": { + "state": "translated", + "value": "Управление темами…" } } } }, - "Manage Watchers…" : { - "localizations" : { - "de" : { - "stringUnit" : { - "state" : "translated", - "value" : "Watcher verwalten…" + "Manage Watchers…": { + "localizations": { + "de": { + "stringUnit": { + "state": "translated", + "value": "Watcher verwalten…" } }, - "zh-Hans" : { - "stringUnit" : { - "state" : "translated", - "value" : "管理监听器…" + "zh-Hans": { + "stringUnit": { + "state": "translated", + "value": "管理监听器…" + } + }, + "ru": { + "stringUnit": { + "state": "translated", + "value": "Управление наблюдателями…" } } } }, - "Models" : { - "localizations" : { - "de" : { - "stringUnit" : { - "state" : "translated", - "value" : "Modelle" + "Models": { + "localizations": { + "de": { + "stringUnit": { + "state": "translated", + "value": "Modelle" } }, - "zh-Hans" : { - "stringUnit" : { - "state" : "translated", - "value" : "模型" + "zh-Hans": { + "stringUnit": { + "state": "translated", + "value": "模型" + } + }, + "ru": { + "stringUnit": { + "state": "translated", + "value": "Модели" } } } }, - "New Schedule…" : { - "localizations" : { - "de" : { - "stringUnit" : { - "state" : "translated", - "value" : "Neuer Zeitplan…" + "New Schedule…": { + "localizations": { + "de": { + "stringUnit": { + "state": "translated", + "value": "Neuer Zeitplan…" + } + }, + "zh-Hans": { + "stringUnit": { + "state": "translated", + "value": "新建计划任务…" } }, - "zh-Hans" : { - "stringUnit" : { - "state" : "translated", - "value" : "新建计划任务…" + "ru": { + "stringUnit": { + "state": "translated", + "value": "Новое расписание…" } } } }, - "New Watcher…" : { - "localizations" : { - "de" : { - "stringUnit" : { - "state" : "translated", - "value" : "Neuer Watcher…" + "New Watcher…": { + "localizations": { + "de": { + "stringUnit": { + "state": "translated", + "value": "Neuer Watcher…" } }, - "zh-Hans" : { - "stringUnit" : { - "state" : "translated", - "value" : "新建监听器…" + "zh-Hans": { + "stringUnit": { + "state": "translated", + "value": "新建监听器…" + } + }, + "ru": { + "stringUnit": { + "state": "translated", + "value": "Новый наблюдатель…" } } } }, - "New Window" : { - "localizations" : { - "de" : { - "stringUnit" : { - "state" : "translated", - "value" : "Neues Fenster" + "New Window": { + "localizations": { + "de": { + "stringUnit": { + "state": "translated", + "value": "Neues Fenster" + } + }, + "zh-Hans": { + "stringUnit": { + "state": "translated", + "value": "新建窗口" } }, - "zh-Hans" : { - "stringUnit" : { - "state" : "translated", - "value" : "新建窗口" + "ru": { + "stringUnit": { + "state": "translated", + "value": "Новое окно" } } } }, - "New Window with Agent" : { - "localizations" : { - "de" : { - "stringUnit" : { - "state" : "translated", - "value" : "Neues Fenster mit Agent" + "New Window with Agent": { + "localizations": { + "de": { + "stringUnit": { + "state": "translated", + "value": "Neues Fenster mit Agent" } }, - "zh-Hans" : { - "stringUnit" : { - "state" : "translated", - "value" : "使用智能体新建窗口" + "zh-Hans": { + "stringUnit": { + "state": "translated", + "value": "使用智能体新建窗口" + } + }, + "ru": { + "stringUnit": { + "state": "translated", + "value": "Новое окно с агентом" } } } }, - "Osaurus Help" : { - "localizations" : { - "de" : { - "stringUnit" : { - "state" : "translated", - "value" : "Osaurus-Hilfe" + "Osaurus Help": { + "localizations": { + "de": { + "stringUnit": { + "state": "translated", + "value": "Osaurus-Hilfe" + } + }, + "zh-Hans": { + "stringUnit": { + "state": "translated", + "value": "Osaurus 帮助" } }, - "zh-Hans" : { - "stringUnit" : { - "state" : "translated", - "value" : "Osaurus 帮助" + "ru": { + "stringUnit": { + "state": "translated", + "value": "Справка Osaurus" } } } }, - "Plugins" : { - "localizations" : { - "de" : { - "stringUnit" : { - "state" : "translated", - "value" : "Plugins" + "Plugins": { + "localizations": { + "de": { + "stringUnit": { + "state": "translated", + "value": "Plugins" } }, - "zh-Hans" : { - "stringUnit" : { - "state" : "translated", - "value" : "插件" + "zh-Hans": { + "stringUnit": { + "state": "translated", + "value": "插件" + } + }, + "ru": { + "stringUnit": { + "state": "translated", + "value": "Плагины" } } } }, - "Report an Issue…" : { - "localizations" : { - "de" : { - "stringUnit" : { - "state" : "translated", - "value" : "Problem melden…" + "Report an Issue…": { + "localizations": { + "de": { + "stringUnit": { + "state": "translated", + "value": "Problem melden…" } }, - "zh-Hans" : { - "stringUnit" : { - "state" : "translated", - "value" : "报告问题…" + "zh-Hans": { + "stringUnit": { + "state": "translated", + "value": "报告问题…" + } + }, + "ru": { + "stringUnit": { + "state": "translated", + "value": "Сообщить о проблеме…" } } } }, - "Schedules" : { - "localizations" : { - "de" : { - "stringUnit" : { - "state" : "translated", - "value" : "Zeitpläne" + "Schedules": { + "localizations": { + "de": { + "stringUnit": { + "state": "translated", + "value": "Zeitpläne" + } + }, + "zh-Hans": { + "stringUnit": { + "state": "translated", + "value": "计划任务" } }, - "zh-Hans" : { - "stringUnit" : { - "state" : "translated", - "value" : "计划任务" + "ru": { + "stringUnit": { + "state": "translated", + "value": "Расписания" } } } }, - "Server" : { - "localizations" : { - "de" : { - "stringUnit" : { - "state" : "translated", - "value" : "Server" + "Server": { + "localizations": { + "de": { + "stringUnit": { + "state": "translated", + "value": "Server" } }, - "zh-Hans" : { - "stringUnit" : { - "state" : "translated", - "value" : "服务器" + "zh-Hans": { + "stringUnit": { + "state": "translated", + "value": "服务器" + } + }, + "ru": { + "stringUnit": { + "state": "translated", + "value": "Сервер" } } } }, - "Settings…" : { - "localizations" : { - "de" : { - "stringUnit" : { - "state" : "translated", - "value" : "Einstellungen…" + "Settings…": { + "localizations": { + "de": { + "stringUnit": { + "state": "translated", + "value": "Einstellungen…" + } + }, + "zh-Hans": { + "stringUnit": { + "state": "translated", + "value": "设置…" } }, - "zh-Hans" : { - "stringUnit" : { - "state" : "translated", - "value" : "设置…" + "ru": { + "stringUnit": { + "state": "translated", + "value": "Настройки…" } } } }, - "Theme" : { - "localizations" : { - "de" : { - "stringUnit" : { - "state" : "translated", - "value" : "Theme" + "Theme": { + "localizations": { + "de": { + "stringUnit": { + "state": "translated", + "value": "Theme" } }, - "zh-Hans" : { - "stringUnit" : { - "state" : "translated", - "value" : "主题" + "zh-Hans": { + "stringUnit": { + "state": "translated", + "value": "主题" + } + }, + "ru": { + "stringUnit": { + "state": "translated", + "value": "Тема" } } } }, - "Toggle Voice Detection" : { - "localizations" : { - "de" : { - "stringUnit" : { - "state" : "translated", - "value" : "Spracherkennung umschalten" + "Toggle Voice Detection": { + "localizations": { + "de": { + "stringUnit": { + "state": "translated", + "value": "Spracherkennung umschalten" + } + }, + "zh-Hans": { + "stringUnit": { + "state": "translated", + "value": "切换语音检测" } }, - "zh-Hans" : { - "stringUnit" : { - "state" : "translated", - "value" : "切换语音检测" + "ru": { + "stringUnit": { + "state": "translated", + "value": "Переключить обнаружение голоса" } } } }, - "Watchers" : { - "localizations" : { - "de" : { - "stringUnit" : { - "state" : "translated", - "value" : "Watcher" + "Watchers": { + "localizations": { + "de": { + "stringUnit": { + "state": "translated", + "value": "Watcher" + } + }, + "zh-Hans": { + "stringUnit": { + "state": "translated", + "value": "监听器" } }, - "zh-Hans" : { - "stringUnit" : { - "state" : "translated", - "value" : "监听器" + "ru": { + "stringUnit": { + "state": "translated", + "value": "Наблюдатели" } } } } }, - "version" : "1.1" -} \ No newline at end of file + "version": "1.1" +} diff --git a/Packages/OsaurusCLI/Sources/OsaurusCLI/OsaurusCLI.swift b/Packages/OsaurusCLI/Sources/OsaurusCLI/OsaurusCLI.swift index cb0b0296d..72457a36f 100644 --- a/Packages/OsaurusCLI/Sources/OsaurusCLI/OsaurusCLI.swift +++ b/Packages/OsaurusCLI/Sources/OsaurusCLI/OsaurusCLI.swift @@ -58,7 +58,7 @@ struct OsaurusCLI { static func main() async { let arguments = CommandLine.arguments.dropFirst() guard let cmd = parseCommand(arguments) else { - if let first = arguments.first { fputs("Unknown or invalid command: \(first)\n\n", stderr) } + if let first = arguments.first { fputs("Неизвестная или недопустимая команда: \(first)\n\n", stderr) } printUsage() exit(EXIT_FAILURE) } @@ -98,45 +98,45 @@ struct OsaurusCLI { private static func printUsage() { let usage = """ - osaurus - CLI for Osaurus + osaurus - CLI для Osaurus - Usage: + Использование: osaurus serve [--port N] [--expose] [--yes|-y] - Start the server (default: localhost only). If --expose - is set, a warning prompt will appear unless --yes is provided. - osaurus stop Stop the server - osaurus mcp Run MCP stdio server proxying to local HTTP - osaurus version Show version (also: --version or -v) - osaurus status Check if the Osaurus server is running - osaurus list List available model IDs - osaurus show Show metadata for a model - osaurus pull Download a model from Hugging Face - osaurus run Chat with a downloaded model (interactive) - osaurus ui Show the Osaurus menu popover in the menu bar - osaurus tools list List installed tools + Запускает сервер (по умолчанию только localhost). Если указан --expose, + появится предупреждение, если не передан --yes. + osaurus stop Останавливает сервер + osaurus mcp Запускает MCP stdio сервер с проксированием к локальному HTTP + osaurus version Показывает версию (также: --version или -v) + osaurus status Проверяет, запущен ли сервер Osaurus + osaurus list Показывает доступные идентификаторы моделей + osaurus show Показывает метаданные модели + osaurus pull Скачивает модель с Hugging Face + osaurus run Общается со скачанной моделью (интерактивно) + osaurus ui Показывает всплывающее меню Osaurus в строке меню + osaurus tools list Показывает установленные инструменты osaurus tools install - Install a tool from registry or local/URL + Устанавливает инструмент из реестра или из локального пути/URL osaurus tools search - Search for tools in the registry - osaurus tools outdated Check for outdated tools - osaurus tools upgrade Upgrade installed tools + Ищет инструменты в реестре + osaurus tools outdated Проверяет устаревшие инструменты + osaurus tools upgrade Обновляет установленные инструменты osaurus tools uninstall - Uninstall a tool - osaurus tools verify Verify dylib integrity of installed tools + Удаляет инструмент + osaurus tools verify Проверяет целостность dylib установленных инструментов osaurus tools create [--language swift|rust] - Scaffold a v2 plugin project + Создаёт каркас проекта плагина v2 osaurus tools package [dylib_path] - Package plugin into a zip (includes web/, docs) - osaurus tools reload Ask the app to rescan tools + Пакует плагин в zip (включая web/ и документацию) + osaurus tools reload Просит приложение заново просканировать инструменты osaurus tools rollback - Roll back a tool to its previous version + Откатывает инструмент к предыдущей версии osaurus tools dev [--web-proxy ] - Dev mode with hot reload and optional web proxy + Режим разработки с горячей перезагрузкой и необязательным веб-прокси osaurus manifest extract - Extract manifest JSON from built plugin + Извлекает JSON-манифест из собранного плагина osaurus bundle load [--name "Display Name"] - Load and run an MCP Bundle (.mcpb file) - osaurus help Show this help + Загружает и запускает MCP Bundle (.mcpb) + osaurus help Показывает эту справку """ print(usage) diff --git a/Packages/OsaurusCLI/Sources/OsaurusCLICore/Commands/Bundle/BundleCommand.swift b/Packages/OsaurusCLI/Sources/OsaurusCLICore/Commands/Bundle/BundleCommand.swift index 8fe4aa1f9..7b2197409 100644 --- a/Packages/OsaurusCLI/Sources/OsaurusCLICore/Commands/Bundle/BundleCommand.swift +++ b/Packages/OsaurusCLI/Sources/OsaurusCLICore/Commands/Bundle/BundleCommand.swift @@ -13,7 +13,7 @@ public struct BundleCommand: Command { public static func execute(args: [String]) async { guard let sub = args.first else { fputs( - "Missing bundle subcommand. Use one of: load\n", + "Отсутствует подкоманда bundle. Используйте одну из: load\n", stderr ) exit(EXIT_FAILURE) @@ -23,7 +23,7 @@ public struct BundleCommand: Command { case "load": await BundleLoad.execute(args: rest) default: - fputs("Unknown bundle subcommand: \(sub)\n", stderr) + fputs("Неизвестная подкоманда bundle: \(sub)\n", stderr) exit(EXIT_FAILURE) } } diff --git a/Packages/OsaurusCLI/Sources/OsaurusCLICore/Commands/Bundle/BundleLoad.swift b/Packages/OsaurusCLI/Sources/OsaurusCLICore/Commands/Bundle/BundleLoad.swift index e4f5bd5ba..42362d0aa 100644 --- a/Packages/OsaurusCLI/Sources/OsaurusCLICore/Commands/Bundle/BundleLoad.swift +++ b/Packages/OsaurusCLI/Sources/OsaurusCLICore/Commands/Bundle/BundleLoad.swift @@ -21,21 +21,21 @@ enum BundleLoadError: Error, CustomStringConvertible { var description: String { switch self { case .missingPath: - return "Error: Bundle path required\n Usage: osaurus bundle load " + return "Ошибка: требуется путь к bundle\n Использование: osaurus bundle load " case let .fileNotFound(path): - return "Error: File not found: \(path)" + return "Ошибка: файл не найден: \(path)" case .invalidExtension: - return "Error: File must have .mcpb extension" + return "Ошибка: файл должен иметь расширение .mcpb" case let .extractionFailed(reason): - return "Error: Failed to extract bundle: \(reason)" + return "Ошибка: не удалось извлечь bundle: \(reason)" case .missingManifest: - return "Error: manifest.json not found in bundle" + return "Ошибка: manifest.json не найден в bundle" case let .invalidManifest(reason): - return "Error: Invalid manifest format: \(reason)" + return "Ошибка: неверный формат манифеста: \(reason)" case let .serverLaunchFailed(reason): - return "Error: Failed to start MCP server: \(reason)" + return "Ошибка: не удалось запустить MCP-сервер: \(reason)" case let .toolDiscoveryFailed(reason): - return "Error: Failed to discover tools: \(reason)" + return "Ошибка: не удалось обнаружить инструменты: \(reason)" } } } @@ -93,10 +93,10 @@ struct BundleLoad { let manifest = try bundleInfo.parseManifest() // Display bundle info - print("Bundle: \(displayName ?? manifest.displayName ?? manifest.name)") - print("Version: \(manifest.version)") + print("Пакет: \(displayName ?? manifest.displayName ?? manifest.name)") + print("Версия: \(manifest.version)") if let description = manifest.description { - print("Description: \(description)") + print("Описание: \(description)") } print("") @@ -111,19 +111,19 @@ struct BundleLoad { let tools = try await serverInfo.discoverTools() if tools.isEmpty { - print("No tools discovered.") + print("Инструменты не найдены.") } else { - print("Discovered \(tools.count) tool(s):") + print("Найдено \(tools.count) инструмент(ов):") for tool in tools { print(" - \(tool.name): \(tool.description ?? "")") } } } catch { - print("Warning: Could not discover tools: \(error)") + print("Предупреждение: не удалось обнаружить инструменты: \(error)") } print("") - print("Server running. Press Ctrl+C to stop.") + print("Сервер запущен. Нажмите Ctrl+C, чтобы остановить.") print("") // Keep alive until interrupt diff --git a/Packages/OsaurusCLI/Sources/OsaurusCLICore/Commands/List.swift b/Packages/OsaurusCLI/Sources/OsaurusCLICore/Commands/List.swift index 2c3be9209..2c05767f3 100644 --- a/Packages/OsaurusCLI/Sources/OsaurusCLICore/Commands/List.swift +++ b/Packages/OsaurusCLI/Sources/OsaurusCLICore/Commands/List.swift @@ -20,7 +20,7 @@ public struct ListCommand: Command { let port = await ServerControl.ensureServerReadyOrExit() guard let url = URL(string: "http://127.0.0.1:\(port)/models") else { - fputs("Invalid URL for models\n", stderr) + fputs("Неверный URL для моделей\n", stderr) exit(EXIT_FAILURE) } var request = URLRequest(url: url) @@ -30,23 +30,23 @@ public struct ListCommand: Command { do { let (data, response) = try await URLSession.shared.data(for: request) - guard let http = response as? HTTPURLResponse, http.statusCode == 200 else { - fputs( - "Failed to fetch models (status \((response as? HTTPURLResponse)?.statusCode ?? -1))\n", - stderr - ) - exit(EXIT_FAILURE) - } - let decoder = JSONDecoder() - let list = try decoder.decode(ModelsListResponse.self, from: data) - if list.data.isEmpty { - print("(no models found)") + guard let http = response as? HTTPURLResponse, http.statusCode == 200 else { + fputs( + "Не удалось получить список моделей (статус \((response as? HTTPURLResponse)?.statusCode ?? -1))\n", + stderr + ) + exit(EXIT_FAILURE) + } + let decoder = JSONDecoder() + let list = try decoder.decode(ModelsListResponse.self, from: data) + if list.data.isEmpty { + print("Модели не найдены") + exit(EXIT_SUCCESS) + } + for m in list.data { print(m.id) } exit(EXIT_SUCCESS) - } - for m in list.data { print(m.id) } - exit(EXIT_SUCCESS) - } catch { - fputs("Error fetching models: \(error.localizedDescription)\n", stderr) + } catch { + fputs("Ошибка при получении моделей: \(error.localizedDescription)\n", stderr) exit(EXIT_FAILURE) } } diff --git a/Packages/OsaurusCLI/Sources/OsaurusCLICore/Commands/MCPCommand.swift b/Packages/OsaurusCLI/Sources/OsaurusCLICore/Commands/MCPCommand.swift index 0d7693aa1..aad887a54 100644 --- a/Packages/OsaurusCLI/Sources/OsaurusCLICore/Commands/MCPCommand.swift +++ b/Packages/OsaurusCLI/Sources/OsaurusCLICore/Commands/MCPCommand.swift @@ -12,14 +12,14 @@ public struct MCPCommand: Command { public static let name = "mcp" public static func execute(args: [String]) async { - fputs("[MCP] Starting MCP command...\n", stderr) + fputs("[MCP] Запуск MCP-команды...\n", stderr) // Ensure app server is up; auto-launch only if not already running let port = await ServerControl.ensureServerReadyOrExit(pollSeconds: 5.0) - fputs("[MCP] Server ready on port \(port)\n", stderr) + fputs("[MCP] Сервер готов на порту \(port)\n", stderr) let baseURL = "http://127.0.0.1:\(port)" let version = Bundle.main.infoDictionary?["CFBundleShortVersionString"] as? String ?? "cli" - fputs("[MCP] Creating server with version: \(version)\n", stderr) + fputs("[MCP] Создание сервера с версией: \(version)\n", stderr) // Build MCP server let server = MCP.Server( @@ -30,12 +30,12 @@ public struct MCPCommand: Command { // Register ListTools -> GET /mcp/tools await server.withMethodHandler(MCP.ListTools.self) { _ in - fputs("[MCP] Handling ListTools\n", stderr) + fputs("[MCP] Обработка ListTools\n", stderr) guard let url = URL(string: "\(baseURL)/mcp/tools") else { - fputs("[MCP] Invalid tools URL\n", stderr) + fputs("[MCP] Неверный URL инструментов\n", stderr) return .init(tools: []) } - fputs("[MCP] Fetching tools from \(url)\n", stderr) + fputs("[MCP] Получение инструментов из \(url)\n", stderr) var request = URLRequest(url: url) request.httpMethod = "GET" request.setValue("application/json", forHTTPHeaderField: "Accept") @@ -44,12 +44,12 @@ public struct MCPCommand: Command { let (data, response) = try await URLSession.shared.data(for: request) guard let http = response as? HTTPURLResponse, http.statusCode == 200 else { fputs( - "[MCP] Failed to list tools: HTTP \((response as? HTTPURLResponse)?.statusCode ?? 0)\n", + "[MCP] Не удалось получить список инструментов: HTTP \((response as? HTTPURLResponse)?.statusCode ?? 0)\n", stderr ) return .init(tools: []) } - fputs("[MCP] Tools fetched successfully\n", stderr) + fputs("[MCP] Инструменты успешно получены\n", stderr) let tools: [MCP.Tool] if let obj = try JSONSerialization.jsonObject(with: data) as? [String: Any], let arr = obj["tools"] as? [[String: Any]] @@ -66,14 +66,14 @@ public struct MCPCommand: Command { } return .init(tools: tools) } catch { - fputs("[MCP] Error fetching tools: \(error)\n", stderr) + fputs("[MCP] Ошибка при получении инструментов: \(error)\n", stderr) return .init(tools: []) } } // Register CallTool -> POST /mcp/call await server.withMethodHandler(MCP.CallTool.self) { params in - fputs("[MCP] Handling CallTool: \(params.name)\n", stderr) + fputs("[MCP] Обработка CallTool: \(params.name)\n", stderr) struct CallBody: Encodable { let name: String let arguments: MCP.Value? @@ -87,7 +87,7 @@ public struct MCPCommand: Command { let isError: Bool } guard let url = URL(string: "\(baseURL)/mcp/call") else { - return .init(content: [.text("Invalid URL")], isError: true) + return .init(content: [.text("Неверный URL")], isError: true) } var request = URLRequest(url: url) request.httpMethod = "POST" @@ -120,24 +120,24 @@ public struct MCPCommand: Command { return .init(content: [.text(text)], isError: decoded.isError) } } catch { - fputs("[MCP] Error calling tool: \(error)\n", stderr) + fputs("[MCP] Ошибка при вызове инструмента: \(error)\n", stderr) return .init(content: [.text(error.localizedDescription)], isError: true) } } // Start stdio transport do { - fputs("[MCP] Starting Stdio transport...\n", stderr) + fputs("[MCP] Запуск транспорта Stdio...\n", stderr) let transport = MCP.StdioTransport() try await server.start(transport: transport) - fputs("[MCP] Server started. If 'start' is non-blocking, we are now in the loop.\n", stderr) + fputs("[MCP] Сервер запущен. Если 'start' не блокирующий, мы уже в цикле.\n", stderr) // Keep the process alive while true { try await Task.sleep(nanoseconds: 1_000_000_000) } } catch { - fputs("MCP server error: \(error.localizedDescription)\n", stderr) + fputs("Ошибка MCP-сервера: \(error.localizedDescription)\n", stderr) exit(EXIT_FAILURE) } } diff --git a/Packages/OsaurusCLI/Sources/OsaurusCLICore/Commands/Manifest/ManifestCommand.swift b/Packages/OsaurusCLI/Sources/OsaurusCLICore/Commands/Manifest/ManifestCommand.swift index c2afbdcdb..0dbbb2302 100644 --- a/Packages/OsaurusCLI/Sources/OsaurusCLICore/Commands/Manifest/ManifestCommand.swift +++ b/Packages/OsaurusCLI/Sources/OsaurusCLICore/Commands/Manifest/ManifestCommand.swift @@ -13,7 +13,7 @@ public struct ManifestCommand: Command { public static func execute(args: [String]) async { guard let sub = args.first else { fputs( - "Missing manifest subcommand. Use one of: extract\n", + "Отсутствует подкоманда manifest. Используйте одну из: extract\n", stderr ) exit(EXIT_FAILURE) @@ -23,7 +23,7 @@ public struct ManifestCommand: Command { case "extract": ManifestExtract.execute(args: rest) default: - fputs("Unknown manifest subcommand: \(sub)\n", stderr) + fputs("Неизвестная подкоманда manifest: \(sub)\n", stderr) exit(EXIT_FAILURE) } } diff --git a/Packages/OsaurusCLI/Sources/OsaurusCLICore/Commands/Manifest/ManifestExtract.swift b/Packages/OsaurusCLI/Sources/OsaurusCLICore/Commands/Manifest/ManifestExtract.swift index 0036fedc7..078c6599d 100644 --- a/Packages/OsaurusCLI/Sources/OsaurusCLICore/Commands/Manifest/ManifestExtract.swift +++ b/Packages/OsaurusCLI/Sources/OsaurusCLICore/Commands/Manifest/ManifestExtract.swift @@ -10,7 +10,7 @@ import Foundation public struct ManifestExtract { public static func execute(args: [String]) { guard let dylibPath = args.first, !dylibPath.isEmpty else { - fputs("Usage: osaurus manifest extract \n", stderr) + fputs("Использование: osaurus manifest extract \n", stderr) exit(EXIT_FAILURE) } @@ -19,10 +19,10 @@ public struct ManifestExtract { print(json) exit(EXIT_SUCCESS) } catch let error as ExtractionError { - fputs("Error: \(error.description)\n", stderr) + fputs("Ошибка: \(error.description)\n", stderr) exit(EXIT_FAILURE) } catch { - fputs("Error: \(error.localizedDescription)\n", stderr) + fputs("Ошибка: \(error.localizedDescription)\n", stderr) exit(EXIT_FAILURE) } } @@ -111,17 +111,17 @@ public struct ManifestExtract { var description: String { switch self { case .fileNotFound(let path): - return "File not found: \(path)" + return "Файл не найден: \(path)" case .loadFailed(let msg): - return "Failed to load dylib: \(msg)" + return "Не удалось загрузить dylib: \(msg)" case .missingEntryPoint: - return "Missing plugin entry point (osaurus_plugin_entry or osaurus_plugin_entry_v2)" + return "Не найдена точка входа плагина (osaurus_plugin_entry или osaurus_plugin_entry_v2)" case .entryReturnedNull: - return "Plugin entry returned null" + return "Точка входа плагина вернула null" case .initFailed: - return "Plugin init failed" + return "Не удалось инициализировать плагин" case .manifestFailed: - return "Failed to get manifest" + return "Не удалось получить манифест" } } } diff --git a/Packages/OsaurusCLI/Sources/OsaurusCLICore/Commands/Pull.swift b/Packages/OsaurusCLI/Sources/OsaurusCLICore/Commands/Pull.swift index b2299f2c9..8f819b9ee 100644 --- a/Packages/OsaurusCLI/Sources/OsaurusCLICore/Commands/Pull.swift +++ b/Packages/OsaurusCLI/Sources/OsaurusCLICore/Commands/Pull.swift @@ -42,13 +42,13 @@ public struct PullCommand: Command { public static func execute(args: [String]) async { guard let modelId = args.first, !modelId.isEmpty else { - fputs("Missing required \n", stderr) - fputs("Usage: osaurus pull \n", stderr) - fputs("Example: osaurus pull mlx-community/Llama-3.2-1B-4bit\n", stderr) + fputs("Отсутствует обязательный \n", stderr) + fputs("Использование: osaurus pull \n", stderr) + fputs("Пример: osaurus pull mlx-community/Llama-3.2-1B-4bit\n", stderr) exit(EXIT_FAILURE) } - print("Pulling \(modelId) ...") + print("Загружается \(modelId) ...") // Resolve the local destination: ~/.osaurus/models// let destination = resolveLocalDirectory(for: modelId) @@ -59,19 +59,19 @@ public struct PullCommand: Command { withIntermediateDirectories: true ) } catch { - fputs("Failed to create model directory: \(error.localizedDescription)\n", stderr) + fputs("Не удалось создать каталог модели: \(error.localizedDescription)\n", stderr) exit(EXIT_FAILURE) } // Fetch file list from Hugging Face tree API guard let files = await fetchMatchingFiles(repoId: modelId, patterns: downloadFilePatterns) else { - fputs("Could not retrieve file list from Hugging Face for '\(modelId)'.\n", stderr) - fputs("Check that the model exists and is an MLX-compatible repository.\n", stderr) + fputs("Не удалось получить список файлов из Hugging Face для '\(modelId)'.\n", stderr) + fputs("Проверьте, что модель существует и совместима с MLX.\n", stderr) exit(EXIT_FAILURE) } if files.isEmpty { - fputs("No matching files found for '\(modelId)'.\n", stderr) + fputs("Не найдено подходящих файлов для '\(modelId)'.\n", stderr) exit(EXIT_FAILURE) } @@ -92,13 +92,13 @@ public struct PullCommand: Command { } if filesToDownload.isEmpty { - print("Model '\(modelId)' is already up to date.") + print("Модель '\(modelId)' уже актуальна.") exit(EXIT_SUCCESS) } print( - "Downloading \(filesToDownload.count) file(s) " - + "(\(ByteCountFormatter.string(fromByteCount: totalBytes, countStyle: .file)) total) ..." + "Загружается \(filesToDownload.count) файл(ов) " + + "(\(ByteCountFormatter.string(fromByteCount: totalBytes, countStyle: .file)) всего) ..." ) // Download each file sequentially with progress @@ -111,7 +111,7 @@ public struct PullCommand: Command { string: "https://huggingface.co/\(modelId)/resolve/main/\(encodedPath)" ) else { - fputs("Invalid URL for file: \(file.path)\n", stderr) + fputs("Неверный URL для файла: \(file.path)\n", stderr) continue } @@ -132,12 +132,12 @@ public struct PullCommand: Command { ) completedBytes += file.size } catch { - fputs("\nFailed to download '\(file.path)': \(error.localizedDescription)\n", stderr) + fputs("\nНе удалось скачать '\(file.path)': \(error.localizedDescription)\n", stderr) exit(EXIT_FAILURE) } } - print("\nDone. Model saved to: \(destination.path)") + print("\nГотово. Модель сохранена в: \(destination.path)") exit(EXIT_SUCCESS) } @@ -191,7 +191,7 @@ public struct PullCommand: Command { let (data, response) = try await URLSession.shared.data(for: request) guard let http = response as? HTTPURLResponse else { return nil } if http.statusCode == 404 { - fputs("Model '\(repoId)' not found on Hugging Face (404).\n", stderr) + fputs("Модель '\(repoId)' не найдена на Hugging Face (404).\n", stderr) return nil } guard (200 ..< 300).contains(http.statusCode) else { return nil } diff --git a/Packages/OsaurusCLI/Sources/OsaurusCLICore/Commands/Run.swift b/Packages/OsaurusCLI/Sources/OsaurusCLICore/Commands/Run.swift index 622080635..9a1d584ac 100644 --- a/Packages/OsaurusCLI/Sources/OsaurusCLICore/Commands/Run.swift +++ b/Packages/OsaurusCLI/Sources/OsaurusCLICore/Commands/Run.swift @@ -12,7 +12,7 @@ public struct RunCommand: Command { public static func execute(args: [String]) async { guard let modelArg = args.first, !modelArg.isEmpty else { - fputs("Missing required \n\n", stderr) + fputs("Отсутствует обязательный \n\n", stderr) // printUsage() // Usage is now handled by Main or Help command exit(EXIT_FAILURE) } @@ -22,7 +22,7 @@ public struct RunCommand: Command { let sessionId = "cli-\(UUID().uuidString.prefix(8))" var transcript: [ChatMessage] = [] - print("Chatting with \(modelArg). Type 'exit' to quit.\n") + print("Чат с \(modelArg). Чтобы выйти, введите 'exit'.\n") while true { // Prompt fputs("> ", stdout) @@ -36,7 +36,7 @@ public struct RunCommand: Command { // Build streaming request guard let url = URL(string: "http://127.0.0.1:\(port)/chat") else { - fputs("Invalid URL for chat\n", stderr) + fputs("Неверный URL для чата\n", stderr) exit(EXIT_FAILURE) } var request = URLRequest(url: url) @@ -57,7 +57,7 @@ public struct RunCommand: Command { let payload = try JSONEncoder().encode(body) request.httpBody = payload } catch { - fputs("Failed to encode chat request: \(error.localizedDescription)\n", stderr) + fputs("Не удалось закодировать запрос чата: \(error.localizedDescription)\n", stderr) exit(EXIT_FAILURE) } @@ -70,7 +70,7 @@ public struct RunCommand: Command { for try await chunk in bytes { errorData.append(contentsOf: [chunk]) } } catch { /* ignore stream read errors on failure */ } let message = String(data: errorData, encoding: .utf8) ?? "" - fputs("Chat request failed (status \(http.statusCode)). \n\(message)\n", stderr) + fputs("Запрос чата не выполнен (статус \(http.statusCode)).\n\(message)\n", stderr) exit(EXIT_FAILURE) } @@ -100,11 +100,11 @@ public struct RunCommand: Command { transcript.append(ChatMessage(role: "assistant", content: assistantAggregate)) } } catch { - fputs("Streaming error: \(error.localizedDescription)\n", stderr) + fputs("Ошибка потоковой передачи: \(error.localizedDescription)\n", stderr) exit(EXIT_FAILURE) } } - print("Goodbye.") + print("До свидания.") exit(EXIT_SUCCESS) } } diff --git a/Packages/OsaurusCLI/Sources/OsaurusCLICore/Commands/Serve.swift b/Packages/OsaurusCLI/Sources/OsaurusCLICore/Commands/Serve.swift index db3dbdfe0..eb09aa1b0 100644 --- a/Packages/OsaurusCLI/Sources/OsaurusCLICore/Commands/Serve.swift +++ b/Packages/OsaurusCLI/Sources/OsaurusCLICore/Commands/Serve.swift @@ -37,20 +37,20 @@ public struct ServeCommand: Command { if expose && !assumeYes { // Security warning prompt let warning = """ - WARNING: Exposing Osaurus to the local network will allow other devices on your LAN - to connect to your server. Make sure you trust your network and understand the risks. - Proceed with exposure? [y/N]: + ВНИМАНИЕ: Если вы откроете Osaurus в локальной сети, другие устройства в вашей LAN + смогут подключаться к вашему серверу. Убедитесь, что вы доверяете своей сети и понимаете риски. + Продолжить публикацию? [y/N]:\u{20} """ fputs(warning, stderr) fflush(stderr) if let line = readLine(strippingNewline: true) { let answer = line.trimmingCharacters(in: .whitespacesAndNewlines).lowercased() if answer != "y" && answer != "yes" { - fputs("aborted\n", stderr) + fputs("прервано\n", stderr) exit(EXIT_FAILURE) } } else { - fputs("aborted\n", stderr) + fputs("прервано\n", stderr) exit(EXIT_FAILURE) } } @@ -76,7 +76,7 @@ public struct ServeCommand: Command { var relaunched = false while Date() < deadline { if await ServerControl.checkHealth(port: portToCheck) { - print("listening on http://127.0.0.1:\(portToCheck)") + print("Сервер слушает на http://127.0.0.1:\(portToCheck)") exit(EXIT_SUCCESS) } // If the app was still initializing and missed the first signal, retry once after ~3s @@ -98,13 +98,13 @@ public struct ServeCommand: Command { let altPort = min(max(portToCheck + 1, 1), 65535) fputs( """ - Failed to start server on port \(portToCheck) - Hints: - - The port may be busy. Try: osaurus serve --port \(altPort) - - Ensure Osaurus.app is installed: brew install --cask osaurus - - Try launching the app first, then serve: + Не удалось запустить сервер на порту \(portToCheck) + Подсказки: + - Порт может быть занят. Попробуйте: osaurus serve --port \(altPort) + - Убедитесь, что Osaurus.app установлен: brew install --cask osaurus + - Попробуйте сначала запустить приложение, затем serve: open -a /Applications/Osaurus.app && osaurus serve - - You can also open the UI: osaurus ui + - Также можно открыть интерфейс: osaurus ui """.appending("\n"), stderr ) diff --git a/Packages/OsaurusCLI/Sources/OsaurusCLICore/Commands/Show.swift b/Packages/OsaurusCLI/Sources/OsaurusCLICore/Commands/Show.swift index d60f45830..1191fe599 100644 --- a/Packages/OsaurusCLI/Sources/OsaurusCLICore/Commands/Show.swift +++ b/Packages/OsaurusCLI/Sources/OsaurusCLICore/Commands/Show.swift @@ -102,15 +102,15 @@ public struct ShowCommand: Command { public static func execute(args: [String]) async { guard let modelArg = args.first, !modelArg.isEmpty else { - fputs("Missing required \n", stderr) - fputs("Usage: osaurus show \n", stderr) + fputs("Отсутствует обязательный \n", stderr) + fputs("Использование: osaurus show \n", stderr) exit(EXIT_FAILURE) } let port = await ServerControl.ensureServerReadyOrExit() guard let url = URL(string: "http://127.0.0.1:\(port)/api/show") else { - fputs("Invalid URL for show endpoint\n", stderr) + fputs("Неверный URL для эндпоинта show\n", stderr) exit(EXIT_FAILURE) } @@ -125,14 +125,14 @@ public struct ShowCommand: Command { do { request.httpBody = try JSONEncoder().encode(body) } catch { - fputs("Failed to encode request: \(error.localizedDescription)\n", stderr) + fputs("Не удалось закодировать запрос: \(error.localizedDescription)\n", stderr) exit(EXIT_FAILURE) } do { let (data, response) = try await URLSession.shared.data(for: request) guard let http = response as? HTTPURLResponse else { - fputs("Invalid response from server\n", stderr) + fputs("Неверный ответ от сервера\n", stderr) exit(EXIT_FAILURE) } @@ -141,9 +141,9 @@ public struct ShowCommand: Command { if let errorResp = try? JSONDecoder().decode(ErrorResponse.self, from: data), let message = errorResp.error?.message { - fputs("Error: \(message)\n", stderr) + fputs("Ошибка: \(message)\n", stderr) } else { - fputs("Failed to get model info (status \(http.statusCode))\n", stderr) + fputs("Не удалось получить информацию о модели (статус \(http.statusCode))\n", stderr) } exit(EXIT_FAILURE) } @@ -153,7 +153,7 @@ public struct ShowCommand: Command { printFormattedOutput(modelArg: modelArg, response: showResponse) exit(EXIT_SUCCESS) } catch { - fputs("Error: \(error.localizedDescription)\n", stderr) + fputs("Ошибка: \(error.localizedDescription)\n", stderr) exit(EXIT_FAILURE) } } @@ -217,26 +217,26 @@ public struct ShowCommand: Command { } // Print Model section - print(" Model") + print(" Модель") if let arch = architecture { - print(" \(pad("architecture", to: 20))\(arch)") + print(" \(pad("архитектура", to: 20))\(arch)") } if let params = parameterCount { - print(" \(pad("parameters", to: 20))\(params)") + print(" \(pad("параметры", to: 20))\(params)") } if let ctx = contextLength { - print(" \(pad("context length", to: 20))\(formatNumber(ctx))") + print(" \(pad("длина контекста", to: 20))\(formatNumber(ctx))") } if let embed = embeddingLength { - print(" \(pad("embedding length", to: 20))\(formatNumber(embed))") + print(" \(pad("длина эмбеддинга", to: 20))\(formatNumber(embed))") } if let quant = quantization, !quant.isEmpty { - print(" \(pad("quantization", to: 20))\(quant)") + print(" \(pad("квантование", to: 20))\(quant)") } // Print Capabilities section print("") - print(" Capabilities") + print(" Возможности") for cap in capabilities { print(" \(cap)") } @@ -244,7 +244,7 @@ public struct ShowCommand: Command { // Print Parameters section if available if let paramsString = response.parameters, !paramsString.isEmpty { print("") - print(" Parameters") + print(" Параметры") let lines = paramsString.split(separator: "\n") for line in lines { let parts = line.split(separator: " ", maxSplits: 1) diff --git a/Packages/OsaurusCLI/Sources/OsaurusCLICore/Commands/Status.swift b/Packages/OsaurusCLI/Sources/OsaurusCLICore/Commands/Status.swift index 338bb9208..368ef7568 100644 --- a/Packages/OsaurusCLI/Sources/OsaurusCLICore/Commands/Status.swift +++ b/Packages/OsaurusCLI/Sources/OsaurusCLICore/Commands/Status.swift @@ -14,7 +14,7 @@ public struct StatusCommand: Command { let port = Configuration.resolveConfiguredPort() ?? 1337 guard let url = URL(string: "http://127.0.0.1:\(port)/health") else { - fputs("Invalid URL for health check\n", stderr) + fputs("Неверный URL для проверки состояния\n", stderr) exit(EXIT_FAILURE) } @@ -25,14 +25,14 @@ public struct StatusCommand: Command { do { let (_, response) = try await URLSession.shared.data(for: request) if let http = response as? HTTPURLResponse, http.statusCode == 200 { - print("running (port \(port))") + print("запущен (порт \(port))") exit(EXIT_SUCCESS) } else { - print("stopped") + print("остановлен") exit(EXIT_FAILURE) } } catch { - print("stopped") + print("остановлен") exit(EXIT_FAILURE) } } diff --git a/Packages/OsaurusCLI/Sources/OsaurusCLICore/Commands/Stop.swift b/Packages/OsaurusCLI/Sources/OsaurusCLICore/Commands/Stop.swift index 9097a2622..2dd5a84eb 100644 --- a/Packages/OsaurusCLI/Sources/OsaurusCLICore/Commands/Stop.swift +++ b/Packages/OsaurusCLI/Sources/OsaurusCLICore/Commands/Stop.swift @@ -17,12 +17,12 @@ public struct StopCommand: Command { let deadline = Date().addingTimeInterval(3.0) while Date() < deadline { if !(await ServerControl.checkHealth(port: port)) { - print("stopped") + print("остановлен") exit(EXIT_SUCCESS) } try? await Task.sleep(nanoseconds: 200_000_000) } - fputs("Server did not stop in time\n", stderr) + fputs("Сервер не остановился вовремя\n", stderr) exit(EXIT_FAILURE) } } diff --git a/Packages/OsaurusCLI/Sources/OsaurusCLICore/Commands/Tools/ToolsCommand.swift b/Packages/OsaurusCLI/Sources/OsaurusCLICore/Commands/Tools/ToolsCommand.swift index 49c1225bd..4b7007dcf 100644 --- a/Packages/OsaurusCLI/Sources/OsaurusCLICore/Commands/Tools/ToolsCommand.swift +++ b/Packages/OsaurusCLI/Sources/OsaurusCLICore/Commands/Tools/ToolsCommand.swift @@ -13,7 +13,7 @@ public struct ToolsCommand: Command { public static func execute(args: [String]) async { guard let sub = args.first else { fputs( - "Missing tools subcommand. Use one of: create, package, install, list, uninstall, reload, search, outdated, upgrade, rollback, verify, dev, reset\n", + "Отсутствует подкоманда tools. Используйте одну из: create, package, install, list, uninstall, reload, search, outdated, upgrade, rollback, verify, dev, reset\n", stderr ) exit(EXIT_FAILURE) @@ -47,7 +47,7 @@ public struct ToolsCommand: Command { case "reset": ToolsReset.execute(args: rest) default: - fputs("Unknown tools subcommand: \(sub)\n", stderr) + fputs("Неизвестная подкоманда tools: \(sub)\n", stderr) exit(EXIT_FAILURE) } } diff --git a/Packages/OsaurusCLI/Sources/OsaurusCLICore/Commands/Tools/ToolsCreate.swift b/Packages/OsaurusCLI/Sources/OsaurusCLICore/Commands/Tools/ToolsCreate.swift index d1984e940..7c733c775 100644 --- a/Packages/OsaurusCLI/Sources/OsaurusCLICore/Commands/Tools/ToolsCreate.swift +++ b/Packages/OsaurusCLI/Sources/OsaurusCLICore/Commands/Tools/ToolsCreate.swift @@ -10,7 +10,7 @@ import Foundation public struct ToolsCreate { public static func execute(args: [String]) { guard let name = args.first, !name.isEmpty else { - fputs("Usage: osaurus tools create [--language swift|rust]\n", stderr) + fputs("Использование: osaurus tools create [--language swift|rust]\n", stderr) exit(EXIT_FAILURE) } var language = "swift" @@ -20,7 +20,7 @@ public struct ToolsCreate { } let root = URL(fileURLWithPath: FileManager.default.currentDirectoryPath) scaffoldPlugin(name: name, language: language, rootDirectory: root) - print("Created plugin scaffold at ./\(name)") + print("Создан каркас плагина в ./\(name)") exit(EXIT_SUCCESS) } @@ -64,7 +64,7 @@ public struct ToolsCreate { try? FileManager.default.createDirectory(at: webDir, withIntermediateDirectories: true) let indexHtml = """ - + @@ -72,7 +72,7 @@ public struct ToolsCreate {

\(displayName)

-

Plugin web UI placeholder.

+

Заглушка веб-интерфейса плагина.

""" @@ -396,18 +396,18 @@ public struct ToolsCreate { let readme = """ # \(name) - An Osaurus plugin (v2 ABI). + Плагин Osaurus (ABI v2). - ## Development + ## Разработка - Start dev mode from the project root. This builds the plugin, installs it - into Osaurus, and watches for source changes with automatic rebuild + reload: + Запустите режим разработки из корня проекта. Это соберёт плагин, установит его + в Osaurus и будет отслеживать изменения исходников с автоматической пересборкой и перезагрузкой: ```bash osaurus tools dev ``` - With frontend hot module replacement (HMR): + С горячей заменой модулей фронтенда (HMR): ```bash # Terminal 1: start your frontend dev server @@ -417,18 +417,18 @@ public struct ToolsCreate { osaurus tools dev --web-proxy http://localhost:5173 ``` - ## Publishing + ## Публикация - This project includes a GitHub Actions workflow (`.github/workflows/release.yml`) that - automatically builds and releases the plugin when you push a version tag. + В этом проекте есть workflow GitHub Actions (`.github/workflows/release.yml`), который + автоматически собирает и публикует плагин, когда вы отправляете тег версии. - To release: + Чтобы выпустить релиз: ```bash git tag v0.1.0 git push origin v0.1.0 ``` - For manual packaging and distribution: + Для ручной упаковки и распространения: ```bash swift build -c release @@ -436,23 +436,23 @@ public struct ToolsCreate { osaurus tools install ./dev.example.\(name)-0.1.0.zip ``` - ## Plugin Structure - - This plugin uses the **v2 ABI** which supports: - - **Tools** - AI-callable functions - - **Routes** - HTTP endpoints (OAuth, webhooks, APIs) - - **Config** - Persistent key-value storage via `host.config_get/set/delete` - - **Database** - Per-plugin SQLite via `host.db_exec/db_query` - - **Web** - Static frontend assets served from `web/` - - **Logging** - Structured logging via `host.log` - - **Agent Dispatch** - Background agent tasks via `host.dispatch` - - **Inference** - LLM completions and embeddings via `host.complete/embed` - - **HTTP Client** - Outbound HTTP requests via `host.http_request` - - **Task Events** - Lifecycle callbacks via `on_task_event` - - Plugin metadata is defined in `get_manifest()` in Plugin.swift. - The `osaurus-plugin.json` file at the project root stores the plugin_id - and version used by `osaurus tools dev`. + ## Структура плагина + + Этот плагин использует **ABI v2**, который поддерживает: + - **Инструменты** - функции, вызываемые ИИ + - **Маршруты** - HTTP-эндпоинты (OAuth, webhooks, API) + - **Конфиг** - постоянное key-value-хранилище через `host.config_get/set/delete` + - **База данных** - SQLite на плагин через `host.db_exec/db_query` + - **Веб** - статические фронтенд-ассеты, отдаваемые из `web/` + - **Логирование** - структурированное логирование через `host.log` + - **Диспетчер агентов** - фоновые задачи агентов через `host.dispatch` + - **Инференс** - completions и embeddings LLM через `host.complete/embed` + - **HTTP-клиент** - исходящие HTTP-запросы через `host.http_request` + - **События задач** - callbacks жизненного цикла через `on_task_event` + + Метаданные плагина определяются в `get_manifest()` в Plugin.swift. + Файл `osaurus-plugin.json` в корне проекта хранит `plugin_id` + и версию, используемые `osaurus tools dev`. """ try? readme.write(to: dir.appendingPathComponent("README.md"), atomically: true, encoding: .utf8) @@ -747,35 +747,35 @@ public struct ToolsCreate { let readme = """ # \(name) - An Osaurus plugin (v2 ABI) written in Rust. + Плагин Osaurus (ABI v2), написанный на Rust. - ## Development + ## Разработка - Start dev mode from the project root. This builds the plugin, installs it - into Osaurus, and watches for source changes with automatic rebuild + reload: + Запустите режим разработки из корня проекта. Это соберёт плагин, установит его + в Osaurus и будет отслеживать изменения исходников с автоматической пересборкой и перезагрузкой: ```bash osaurus tools dev ``` - With frontend hot module replacement (HMR): + С горячей заменой модулей фронтенда (HMR): ```bash osaurus tools dev --web-proxy http://localhost:5173 ``` - ## Publishing + ## Публикация - This project includes a GitHub Actions workflow (`.github/workflows/release.yml`) that - automatically builds and releases the plugin when you push a version tag. + В этом проекте есть workflow GitHub Actions (`.github/workflows/release.yml`), который + автоматически собирает и публикует плагин, когда вы отправляете тег версии. - To release: + Чтобы выпустить релиз: ```bash git tag v0.1.0 git push origin v0.1.0 ``` - For manual packaging and distribution: + Для ручной упаковки и распространения: ```bash cargo build --release @@ -783,23 +783,23 @@ public struct ToolsCreate { osaurus tools install ./dev.example.\(name)-0.1.0.zip ``` - ## Plugin Structure - - This plugin uses the **v2 ABI** which supports: - - **Tools** - AI-callable functions - - **Routes** - HTTP endpoints (OAuth, webhooks, APIs) - - **Config** - Persistent key-value storage via `host.config_get/set/delete` - - **Database** - Per-plugin SQLite via `host.db_exec/db_query` - - **Web** - Static frontend assets served from `web/` - - **Logging** - Structured logging via `host.log` - - **Agent Dispatch** - Background agent tasks via `host.dispatch` - - **Inference** - LLM completions and embeddings via `host.complete/embed` - - **HTTP Client** - Outbound HTTP requests via `host.http_request` - - **Task Events** - Lifecycle callbacks via `on_task_event` - - Plugin metadata is defined in `plugin_get_manifest()` in `src/lib.rs`. - The `osaurus-plugin.json` file at the project root stores the plugin_id - and version used by `osaurus tools dev`. + ## Структура плагина + + Этот плагин использует **ABI v2**, который поддерживает: + - **Инструменты** - функции, вызываемые ИИ + - **Маршруты** - HTTP-эндпоинты (OAuth, webhooks, API) + - **Конфиг** - постоянное key-value-хранилище через `host.config_get/set/delete` + - **База данных** - SQLite на плагин через `host.db_exec/db_query` + - **Веб** - статические фронтенд-ассеты, отдаваемые из `web/` + - **Логирование** - структурированное логирование через `host.log` + - **Диспетчер агентов** - фоновые задачи агентов через `host.dispatch` + - **Инференс** - completions и embeddings LLM через `host.complete/embed` + - **HTTP-клиент** - исходящие HTTP-запросы через `host.http_request` + - **События задач** - callbacks жизненного цикла через `on_task_event` + + Метаданные плагина определяются в `plugin_get_manifest()` в `src/lib.rs`. + Файл `osaurus-plugin.json` в корне проекта хранит `plugin_id` + и версию, используемые `osaurus tools dev`. """ try? readme.write(to: dir.appendingPathComponent("README.md"), atomically: true, encoding: .utf8) diff --git a/Packages/OsaurusCLI/Sources/OsaurusCLICore/Commands/Tools/ToolsDev.swift b/Packages/OsaurusCLI/Sources/OsaurusCLICore/Commands/Tools/ToolsDev.swift index ebb1e5188..a24cd5119 100644 --- a/Packages/OsaurusCLI/Sources/OsaurusCLICore/Commands/Tools/ToolsDev.swift +++ b/Packages/OsaurusCLI/Sources/OsaurusCLICore/Commands/Tools/ToolsDev.swift @@ -62,10 +62,10 @@ public struct ToolsDev { let configURL = cwd.appendingPathComponent("osaurus-plugin.json") guard fm.fileExists(atPath: configURL.path) else { - fputs("No osaurus-plugin.json found in current directory.\n", stderr) - fputs("Run this command from a plugin project root, or pass a plugin_id:\n", stderr) + fputs("В текущем каталоге не найден osaurus-plugin.json.\n", stderr) + fputs("Запустите команду из корня проекта плагина или передайте plugin_id:\n", stderr) fputs(" osaurus tools dev \n\n", stderr) - fputs("To create a new plugin project:\n", stderr) + fputs("Чтобы создать новый проект плагина:\n", stderr) fputs(" osaurus tools create MyPlugin\n", stderr) exit(EXIT_FAILURE) } @@ -73,7 +73,7 @@ public struct ToolsDev { guard let configData = try? Data(contentsOf: configURL), let config = try? JSONDecoder().decode(PluginConfig.self, from: configData) else { - fputs("Failed to parse osaurus-plugin.json\n", stderr) + fputs("Не удалось разобрать osaurus-plugin.json\n", stderr) exit(EXIT_FAILURE) } @@ -83,25 +83,25 @@ public struct ToolsDev { } else if fm.fileExists(atPath: cwd.appendingPathComponent("Cargo.toml").path) { language = .rust } else { - fputs("Cannot detect project language. Expected Package.swift or Cargo.toml in cwd.\n", stderr) + fputs("Не удалось определить язык проекта. Ожидался Package.swift или Cargo.toml в текущем каталоге.\n", stderr) exit(EXIT_FAILURE) } - print(" Plugin: \(config.plugin_id) v\(config.version)") + print(" Плагин: \(config.plugin_id) v\(config.version)") // Initial build - print(" Building...", terminator: "") + print(" Сборка...", terminator: "") fflush(stdout) let buildStart = Date() guard build(language: language, cwd: cwd) else { - fputs(" failed\nBuild failed. Fix the errors above and try again.\n", stderr) + fputs(" неудачно\nСборка не удалась. Исправьте ошибки выше и попробуйте снова.\n", stderr) exit(EXIT_FAILURE) } let elapsed = String(format: "%.1f", Date().timeIntervalSince(buildStart)) - print(" done (\(elapsed)s)") + print(" готово (\(elapsed)с)") guard let dylibURL = findBuiltDylib(language: language, cwd: cwd) else { - fputs("No .dylib found in build output.\n", stderr) + fputs("В выходных данных сборки не найден .dylib.\n", stderr) exit(EXIT_FAILURE) } @@ -111,16 +111,16 @@ public struct ToolsDev { projectDir: cwd ) - print(" Installed to \(installDir.path)") + print(" Установлено в \(installDir.path)") setupWebProxy(pluginId: config.plugin_id, webProxyURL: webProxyURL) await AppControl.launchAppIfNeeded() sendReload() if let proxy = webProxyURL { - print(" Web proxy: \(proxy)") + print(" Веб-прокси: \(proxy)") } - print(" Watching for changes... Press Ctrl+C to stop\n") + print(" Наблюдение за изменениями... Нажмите Ctrl+C, чтобы остановить.\n") setupSignalHandler() @@ -135,23 +135,23 @@ public struct ToolsDev { let currentAssetMtime = latestAssetMtime(cwd: cwd) if currentSourceMtime > lastSourceMtime { - print("[\(timestamp())] Source changed, rebuilding...") + print("[\(timestamp())] Источник изменён, пересборка...") if build(language: language, cwd: cwd) { if let newDylib = findBuiltDylib(language: language, cwd: cwd) { _ = installPlugin(config: config, dylibURL: newDylib, projectDir: cwd) sendReload() - print("[\(timestamp())] Reload signal sent.") + print("[\(timestamp())] Сигнал перезагрузки отправлен.") } } else { - fputs("[\(timestamp())] Build failed. Waiting for next change...\n", stderr) + fputs("[\(timestamp())] Сборка не удалась. Ждём следующего изменения...\n", stderr) } lastSourceMtime = latestMtime(in: srcDir) lastAssetMtime = latestAssetMtime(cwd: cwd) } else if currentAssetMtime > lastAssetMtime { - print("[\(timestamp())] Assets changed, copying...") + print("[\(timestamp())] Активы изменены, копирование...") _ = installPlugin(config: config, dylibURL: dylibURL, projectDir: cwd) sendReload() - print("[\(timestamp())] Reload signal sent.") + print("[\(timestamp())] Сигнал перезагрузки отправлен.") lastAssetMtime = currentAssetMtime } } @@ -164,18 +164,18 @@ public struct ToolsDev { .appendingPathComponent(pluginId, isDirectory: true) guard FileManager.default.fileExists(atPath: pluginDir.path) else { - fputs("Plugin not found: \(pluginId)\n", stderr) - fputs("Install it first or create the directory at: \(pluginDir.path)\n", stderr) + fputs("Плагин не найден: \(pluginId)\n", stderr) + fputs("Сначала установите его или создайте каталог по адресу: \(pluginDir.path)\n", stderr) exit(EXIT_FAILURE) } - print("Starting dev mode for \(pluginId)") + print("Запуск режима разработки для \(pluginId)") if let proxy = webProxyURL { - print("Web proxy: \(proxy)") - print("Requests to /plugins/\(pluginId)/app/* will be proxied to \(proxy)") + print("Веб-прокси: \(proxy)") + print("Запросы к /plugins/\(pluginId)/app/* будут проксированы через \(proxy)") } - print("Watching for .dylib changes in \(pluginDir.path)") - print("Press Ctrl+C to stop\n") + print("Наблюдение за изменениями .dylib в \(pluginDir.path)") + print("Нажмите Ctrl+C, чтобы остановить.\n") setupWebProxy(pluginId: pluginId, webProxyURL: webProxyURL) setupSignalHandler() @@ -225,10 +225,10 @@ public struct ToolsDev { let modified = dylibMtime(dylib) if let modified, let last = lastModified, modified > last { - print("[\(timestamp())] Detected dylib change, sending reload signal...") + print("[\(timestamp())] Обнаружено изменение dylib, отправка сигнала перезагрузки...") sendReload() lastModified = modified - print("[\(timestamp())] Reload signal sent.") + print("[\(timestamp())] Сигнал перезагрузки отправлен.") } else if lastModified == nil { lastModified = modified } diff --git a/Packages/OsaurusCLI/Sources/OsaurusCLICore/Commands/Tools/ToolsInstall.swift b/Packages/OsaurusCLI/Sources/OsaurusCLICore/Commands/Tools/ToolsInstall.swift index b6ed123f2..d987f8a30 100644 --- a/Packages/OsaurusCLI/Sources/OsaurusCLICore/Commands/Tools/ToolsInstall.swift +++ b/Packages/OsaurusCLI/Sources/OsaurusCLICore/Commands/Tools/ToolsInstall.swift @@ -12,7 +12,7 @@ import OsaurusRepository public struct ToolsInstall { public static func execute(args: [String]) async { guard let src = args.first, !src.isEmpty else { - fputs("Usage: osaurus tools install [--version ]\n", stderr) + fputs("Использование: osaurus tools install [--version ]\n", stderr) exit(EXIT_FAILURE) } @@ -30,7 +30,7 @@ public struct ToolsInstall { let vstr = args[idx + 1] preferredVersion = SemanticVersion.parse(vstr) if preferredVersion == nil { - fputs("Invalid semver: \(vstr)\n", stderr) + fputs("Неверный semver: \(vstr)\n", stderr) exit(EXIT_FAILURE) } } @@ -40,13 +40,13 @@ public struct ToolsInstall { preferredVersion: preferredVersion ) print( - "Installed \(result.receipt.plugin_id) @ \(result.receipt.version) to \(result.installDirectory.path)" + "Установлен \(result.receipt.plugin_id) @ \(result.receipt.version) в \(result.installDirectory.path)" ) // Notify app to reload tools AppControl.postDistributedNotification(name: "com.dinoki.osaurus.control.toolsReload", userInfo: [:]) exit(EXIT_SUCCESS) } catch { - fputs("Install failed: \(error)\n", stderr) + fputs("Установка не удалась: \(error)\n", stderr) exit(EXIT_FAILURE) } } @@ -58,7 +58,7 @@ public struct ToolsInstall { do { try fm.createDirectory(at: tmpDir, withIntermediateDirectories: true) } catch { - fputs("Failed to create temp directory: \(error)\n", stderr) + fputs("Не удалось создать временный каталог: \(error)\n", stderr) exit(EXIT_FAILURE) } @@ -72,7 +72,7 @@ public struct ToolsInstall { // 1. Unpack/Copy to staging if src.hasPrefix("http://") || src.hasPrefix("https://") { guard let url = URL(string: src) else { - fputs("Invalid URL: \(src)\n", stderr) + fputs("Неверный URL: \(src)\n", stderr) exit(EXIT_FAILURE) } // Extract filename from URL path @@ -81,13 +81,13 @@ public struct ToolsInstall { do { let (data, resp) = try await URLSession.shared.data(from: url) guard let http = resp as? HTTPURLResponse, (200 ... 299).contains(http.statusCode) else { - fputs("Download failed (status \((resp as? HTTPURLResponse)?.statusCode ?? -1))\n", stderr) + fputs("Загрузка не удалась (статус \((resp as? HTTPURLResponse)?.statusCode ?? -1))\n", stderr) exit(EXIT_FAILURE) } try data.write(to: zipFile) try unzip(zipURL: zipFile, to: tmpDir) } catch { - fputs("Download/Unzip error: \(error)\n", stderr) + fputs("Ошибка загрузки/распаковки: \(error)\n", stderr) exit(EXIT_FAILURE) } } else { @@ -103,22 +103,22 @@ public struct ToolsInstall { try fm.copyItem(at: item, to: tmpDir.appendingPathComponent(item.lastPathComponent)) } } catch { - fputs("Failed to copy directory: \(error)\n", stderr) + fputs("Не удалось скопировать каталог: \(error)\n", stderr) exit(EXIT_FAILURE) } } else if pathURL.pathExtension.lowercased() == "zip" { do { try unzip(zipURL: pathURL, to: tmpDir) } catch { - fputs("Unzip error: \(error)\n", stderr) + fputs("Ошибка распаковки: \(error)\n", stderr) exit(EXIT_FAILURE) } } else { - fputs("Unsupported file type: \(src)\n", stderr) + fputs("Неподдерживаемый тип файла: \(src)\n", stderr) exit(EXIT_FAILURE) } } else { - fputs("Path not found: \(src)\n", stderr) + fputs("Путь не найден: \(src)\n", stderr) exit(EXIT_FAILURE) } } @@ -126,7 +126,7 @@ public struct ToolsInstall { // 2. Parse plugin_id and version from source name // Expected format: - (e.g., my-plugin-1.0.0) guard let (pluginId, semver) = parsePluginIdAndVersion(from: sourceName) else { - fputs("Invalid naming format. Expected: -.zip (e.g., my-plugin-1.0.0.zip)\n", stderr) + fputs("Неверный формат имени. Ожидается: -.zip (например, my-plugin-1.0.0.zip)\n", stderr) exit(EXIT_FAILURE) } @@ -162,14 +162,14 @@ public struct ToolsInstall { // 5. Update Current Symlink try PluginInstallManager.updateCurrentSymlink(pluginId: pluginId, version: semver) - print("Installed \(pluginId) @ \(semver) to \(installDir.path)") + print("Установлен \(pluginId) @ \(semver) в \(installDir.path)") // Notify app AppControl.postDistributedNotification(name: "com.dinoki.osaurus.control.toolsReload", userInfo: [:]) exit(EXIT_SUCCESS) } catch { - fputs("Installation failed: \(error)\n", stderr) + fputs("Установка не удалась: \(error)\n", stderr) exit(EXIT_FAILURE) } } @@ -261,7 +261,7 @@ public struct ToolsInstall { throw NSError( domain: "ToolsInstall", code: 1, - userInfo: [NSLocalizedDescriptionKey: "unzip command failed"] + userInfo: [NSLocalizedDescriptionKey: "Команда unzip завершилась с ошибкой"] ) } } diff --git a/Packages/OsaurusCLI/Sources/OsaurusCLICore/Commands/Tools/ToolsList.swift b/Packages/OsaurusCLI/Sources/OsaurusCLICore/Commands/Tools/ToolsList.swift index 5acbbddad..113fd7068 100644 --- a/Packages/OsaurusCLI/Sources/OsaurusCLICore/Commands/Tools/ToolsList.swift +++ b/Packages/OsaurusCLI/Sources/OsaurusCLICore/Commands/Tools/ToolsList.swift @@ -12,13 +12,13 @@ public struct ToolsList { let root = Configuration.toolsRootDirectory() let fm = FileManager.default if !fm.fileExists(atPath: root.path) { - print("(no plugins installed)") + print("Плагины не установлены") exit(EXIT_SUCCESS) } do { let contents = try fm.contentsOfDirectory(atPath: root.path) if contents.isEmpty { - print("(no plugins installed)") + print("Плагины не установлены") } else { for entry in contents.sorted() { // Skip hidden files @@ -30,7 +30,7 @@ public struct ToolsList { let currentLink = pluginDir.appendingPathComponent("current") guard let versionName = try? fm.destinationOfSymbolicLink(atPath: currentLink.path) else { // No current symlink - just print the directory name - print("\(entry) (no active version)") + print("\(entry) (нет активной версии)") continue } @@ -45,16 +45,16 @@ public struct ToolsList { { let pluginId = (obj["plugin_id"] as? String) ?? entry let version = (obj["version"] as? String) ?? versionName - print("\(pluginId) version=\(version)") + print("\(pluginId) версия=\(version)") } else { // Receipt not found - print basic info from directory structure - print("\(entry) version=\(versionName)") + print("\(entry) версия=\(versionName)") } } } exit(EXIT_SUCCESS) } catch { - fputs("Failed to read tools directory: \(error)\n", stderr) + fputs("Не удалось прочитать каталог инструментов: \(error)\n", stderr) exit(EXIT_FAILURE) } } diff --git a/Packages/OsaurusCLI/Sources/OsaurusCLICore/Commands/Tools/ToolsOutdated.swift b/Packages/OsaurusCLI/Sources/OsaurusCLICore/Commands/Tools/ToolsOutdated.swift index 7f47255ae..2574c7154 100644 --- a/Packages/OsaurusCLI/Sources/OsaurusCLICore/Commands/Tools/ToolsOutdated.swift +++ b/Packages/OsaurusCLI/Sources/OsaurusCLICore/Commands/Tools/ToolsOutdated.swift @@ -14,7 +14,7 @@ public struct ToolsOutdated { let fm = FileManager.default let root = PluginInstallManager.toolsRootDirectory() guard let pluginDirs = try? fm.contentsOfDirectory(at: root, includingPropertiesForKeys: nil) else { - print("(no tools installed)") + print("Инструменты не установлены") exit(EXIT_SUCCESS) } var any = false @@ -28,11 +28,11 @@ public struct ToolsOutdated { continue } if let inst = installed, available > inst { - print("\(pluginId)\tinstalled: \(inst)\tavailable: \(available)") + print("\(pluginId)\tустановлено: \(inst)\tдоступно: \(available)") any = true } } - if !any { print("All up to date.") } + if !any { print("Все актуально.") } exit(EXIT_SUCCESS) } } diff --git a/Packages/OsaurusCLI/Sources/OsaurusCLICore/Commands/Tools/ToolsPackage.swift b/Packages/OsaurusCLI/Sources/OsaurusCLICore/Commands/Tools/ToolsPackage.swift index 6e1f23161..8e6c00523 100644 --- a/Packages/OsaurusCLI/Sources/OsaurusCLICore/Commands/Tools/ToolsPackage.swift +++ b/Packages/OsaurusCLI/Sources/OsaurusCLICore/Commands/Tools/ToolsPackage.swift @@ -46,9 +46,9 @@ public struct ToolsPackage { public static func execute(args: [String]) { guard args.count >= 2 else { - fputs("Usage: osaurus tools package [dylib_path]\n", stderr) - fputs(" If dylib_path is omitted, auto-detects .dylib files in current directory.\n", stderr) - fputs(" Also includes web/, SKILL.md, README.md, CHANGELOG.md if present.\n", stderr) + fputs("Использование: osaurus tools package [dylib_path]\n", stderr) + fputs(" Если dylib_path не указан, .dylib-файлы будут найдены автоматически в текущем каталоге.\n", stderr) + fputs(" Также включает web/, SKILL.md, README.md и CHANGELOG.md, если они есть.\n", stderr) exit(EXIT_FAILURE) } @@ -63,7 +63,7 @@ public struct ToolsPackage { if args.count >= 3 { let dylibPath = args[2] guard fm.fileExists(atPath: cwd.appendingPathComponent(dylibPath).path) else { - fputs("Dylib not found: \(dylibPath)\n", stderr) + fputs("Dylib не найден: \(dylibPath)\n", stderr) exit(EXIT_FAILURE) } dylibPaths.append(dylibPath) @@ -71,12 +71,12 @@ public struct ToolsPackage { do { dylibPaths = try findDylibs(in: cwd) } catch { - fputs("Failed to read current directory: \(error)\n", stderr) + fputs("Не удалось прочитать текущий каталог: \(error)\n", stderr) exit(EXIT_FAILURE) } guard !dylibPaths.isEmpty else { - fputs("No .dylib files found in current directory.\n", stderr) - fputs("Build your plugin first, or specify the dylib path explicitly.\n", stderr) + fputs("В текущем каталоге не найдено .dylib-файлов.\n", stderr) + fputs("Сначала соберите плагин или явно укажите путь к dylib.\n", stderr) exit(EXIT_FAILURE) } } @@ -100,21 +100,21 @@ public struct ToolsPackage { try proc.run() proc.waitUntilExit() if proc.terminationStatus != 0 { - fputs("zip command failed; ensure /usr/bin/zip is available.\n", stderr) + fputs("Команда zip завершилась с ошибкой; убедитесь, что /usr/bin/zip доступен.\n", stderr) exit(EXIT_FAILURE) } } catch { - fputs("Failed to run zip: \(error)\n", stderr) + fputs("Не удалось запустить zip: \(error)\n", stderr) exit(EXIT_FAILURE) } let extras = zipEntries.filter { !$0.hasSuffix(".dylib") } if !extras.isEmpty { - print("Created \(name) (includes: \(extras.joined(separator: ", ")))") + print("Создан \(name) (включая: \(extras.joined(separator: ", ")))") } else { - print("Created \(name)") + print("Создан \(name)") } - print("Install with: osaurus tools install ./\(name)") + print("Установите командой: osaurus tools install ./\(name)") exit(EXIT_SUCCESS) } } diff --git a/Packages/OsaurusCLI/Sources/OsaurusCLICore/Commands/Tools/ToolsReload.swift b/Packages/OsaurusCLI/Sources/OsaurusCLICore/Commands/Tools/ToolsReload.swift index 2297ec4dd..aad6fa973 100644 --- a/Packages/OsaurusCLI/Sources/OsaurusCLICore/Commands/Tools/ToolsReload.swift +++ b/Packages/OsaurusCLI/Sources/OsaurusCLICore/Commands/Tools/ToolsReload.swift @@ -10,7 +10,7 @@ import Foundation public struct ToolsReload { public static func execute(args: [String]) { AppControl.postDistributedNotification(name: "com.dinoki.osaurus.control.toolsReload", userInfo: [:]) - print("Reload signal sent.") + print("Сигнал перезагрузки отправлен.") exit(EXIT_SUCCESS) } } diff --git a/Packages/OsaurusCLI/Sources/OsaurusCLICore/Commands/Tools/ToolsReset.swift b/Packages/OsaurusCLI/Sources/OsaurusCLICore/Commands/Tools/ToolsReset.swift index 5bee4d8b4..6c333f1a3 100644 --- a/Packages/OsaurusCLI/Sources/OsaurusCLICore/Commands/Tools/ToolsReset.swift +++ b/Packages/OsaurusCLI/Sources/OsaurusCLICore/Commands/Tools/ToolsReset.swift @@ -19,9 +19,9 @@ public struct ToolsReset { if fm.fileExists(atPath: registryClone.path) { do { try fm.removeItem(at: registryClone) - print("Reset plugin registry cache") + print("Кэш реестра плагинов сброшен") } catch { - fputs("Warning: failed to remove registry cache: \(error)\n", stderr) + fputs("Предупреждение: не удалось удалить кэш реестра: \(error)\n", stderr) } } @@ -30,7 +30,7 @@ public struct ToolsReset { let url = toolsRoot.appendingPathComponent(name, isDirectory: false) if fm.fileExists(atPath: url.path) { try? fm.removeItem(at: url) - print("Cleared \(name)") + print("Очищено \(name)") } } @@ -45,7 +45,7 @@ public struct ToolsReset { try? fm.removeItem(at: entry) count += 1 } - print("Removed \(count) installed plugin(s)") + print("Удалено \(count) установленных плагинов") } } @@ -54,11 +54,11 @@ public struct ToolsReset { defaults.removeObject(forKey: "LaunchGuard.startupInProgress") defaults.removeObject(forKey: "LaunchGuard.consecutiveCrashCount") defaults.synchronize() - print("Reset crash recovery state") + print("Состояние восстановления после сбоев сброшено") } AppControl.postDistributedNotification(name: "com.dinoki.osaurus.control.toolsReload", userInfo: [:]) - print("Done. Restart Osaurus to apply changes.") + print("Готово. Перезапустите Osaurus, чтобы применить изменения.") exit(EXIT_SUCCESS) } } diff --git a/Packages/OsaurusCLI/Sources/OsaurusCLICore/Commands/Tools/ToolsRollback.swift b/Packages/OsaurusCLI/Sources/OsaurusCLICore/Commands/Tools/ToolsRollback.swift index e02fdcf12..5501d14ec 100644 --- a/Packages/OsaurusCLI/Sources/OsaurusCLICore/Commands/Tools/ToolsRollback.swift +++ b/Packages/OsaurusCLI/Sources/OsaurusCLICore/Commands/Tools/ToolsRollback.swift @@ -11,21 +11,21 @@ import OsaurusRepository public struct ToolsRollback { public static func execute(args: [String]) { guard let pluginId = args.first, !pluginId.isEmpty else { - fputs("Usage: osaurus tools rollback \n", stderr) + fputs("Использование: osaurus tools rollback \n", stderr) exit(EXIT_FAILURE) } let versions = InstalledPluginsStore.shared.installedVersions(pluginId: pluginId) guard versions.count >= 2 else { - fputs("No previous version to roll back to for \(pluginId)\n", stderr) + fputs("Для \(pluginId) нет предыдущей версии для отката\n", stderr) exit(EXIT_FAILURE) } let target = versions[1] // previous do { try PluginInstallManager.updateCurrentSymlink(pluginId: pluginId, version: target) - print("Rolled back \(pluginId) to \(target)") + print("Откат выполнен: \(pluginId) -> \(target)") exit(EXIT_SUCCESS) } catch { - fputs("Rollback failed: \(error)\n", stderr) + fputs("Откат не удался: \(error)\n", stderr) exit(EXIT_FAILURE) } } diff --git a/Packages/OsaurusCLI/Sources/OsaurusCLICore/Commands/Tools/ToolsSearch.swift b/Packages/OsaurusCLI/Sources/OsaurusCLICore/Commands/Tools/ToolsSearch.swift index fcd1ae4e8..180150447 100644 --- a/Packages/OsaurusCLI/Sources/OsaurusCLICore/Commands/Tools/ToolsSearch.swift +++ b/Packages/OsaurusCLI/Sources/OsaurusCLICore/Commands/Tools/ToolsSearch.swift @@ -19,11 +19,11 @@ public struct ToolsSearch { return false } if filtered.isEmpty { - print("(no matches)") + print("Совпадений не найдено") } else { for spec in filtered.sorted(by: { $0.plugin_id < $1.plugin_id }) { let latest = spec.versions.map(\.version).sorted(by: >).first?.description ?? "-" - print("\(spec.plugin_id)\tlatest: \(latest)\t\(spec.name ?? "")") + print("\(spec.plugin_id)\tпоследняя: \(latest)\t\(spec.name ?? "")") } } exit(EXIT_SUCCESS) diff --git a/Packages/OsaurusCLI/Sources/OsaurusCLICore/Commands/Tools/ToolsUninstall.swift b/Packages/OsaurusCLI/Sources/OsaurusCLICore/Commands/Tools/ToolsUninstall.swift index 5f1adbc12..a8def22fe 100644 --- a/Packages/OsaurusCLI/Sources/OsaurusCLICore/Commands/Tools/ToolsUninstall.swift +++ b/Packages/OsaurusCLI/Sources/OsaurusCLICore/Commands/Tools/ToolsUninstall.swift @@ -10,7 +10,7 @@ import Foundation public struct ToolsUninstall { public static func execute(args: [String]) { guard let target = args.first, !target.isEmpty else { - fputs("Usage: osaurus tools uninstall \n", stderr) + fputs("Использование: osaurus tools uninstall \n", stderr) exit(EXIT_FAILURE) } let fm = FileManager.default @@ -64,14 +64,14 @@ public struct ToolsUninstall { } } guard let dir = dirToRemove else { - fputs("Could not locate installed plugin for '\(target)'\n", stderr) + fputs("Не удалось найти установленный плагин для '\(target)'\n", stderr) exit(EXIT_FAILURE) } do { try fm.removeItem(at: dir) - print("Uninstalled \(dir.lastPathComponent)") + print("Удалён \(dir.lastPathComponent)") } catch { - fputs("Failed to uninstall: \(error)\n", stderr) + fputs("Не удалось удалить плагин: \(error)\n", stderr) exit(EXIT_FAILURE) } // Notify app to reload diff --git a/Packages/OsaurusCLI/Sources/OsaurusCLICore/Commands/Tools/ToolsUpgrade.swift b/Packages/OsaurusCLI/Sources/OsaurusCLICore/Commands/Tools/ToolsUpgrade.swift index 8e2433bd9..d1cb8563c 100644 --- a/Packages/OsaurusCLI/Sources/OsaurusCLICore/Commands/Tools/ToolsUpgrade.swift +++ b/Packages/OsaurusCLI/Sources/OsaurusCLICore/Commands/Tools/ToolsUpgrade.swift @@ -27,9 +27,9 @@ public struct ToolsUpgrade { if let latest, installed == nil || latest > installed! { do { _ = try await PluginInstallManager.shared.install(pluginId: pid, preferredVersion: latest) - print("Upgraded \(pid) to \(latest)") + print("Обновлён \(pid) до \(latest)") } catch { - fputs("Upgrade failed for \(pid): \(error)\n", stderr) + fputs("Не удалось обновить \(pid): \(error)\n", stderr) failures += 1 } } diff --git a/Packages/OsaurusCLI/Sources/OsaurusCLICore/Commands/Tools/ToolsVerify.swift b/Packages/OsaurusCLI/Sources/OsaurusCLICore/Commands/Tools/ToolsVerify.swift index ec20249cd..086d06072 100644 --- a/Packages/OsaurusCLI/Sources/OsaurusCLICore/Commands/Tools/ToolsVerify.swift +++ b/Packages/OsaurusCLI/Sources/OsaurusCLICore/Commands/Tools/ToolsVerify.swift @@ -14,7 +14,7 @@ public struct ToolsVerify { let fm = FileManager.default let root = PluginInstallManager.toolsRootDirectory() guard let pluginDirs = try? fm.contentsOfDirectory(at: root, includingPropertiesForKeys: nil) else { - print("(no tools installed)") + print("Инструменты не установлены") exit(EXIT_SUCCESS) } var failures = 0 @@ -41,9 +41,9 @@ public struct ToolsVerify { let digest = CryptoKit.SHA256.hash(data: dylibData) let sha = Data(digest).map { String(format: "%02x", $0) }.joined() if sha.lowercased() == receipt.dylib_sha256.lowercased() { - print("OK \(receipt.plugin_id)@\(receipt.version) \(receipt.dylib_filename)") + print("ОК \(receipt.plugin_id)@\(receipt.version) \(receipt.dylib_filename)") } else { - print("FAIL \(receipt.plugin_id)@\(receipt.version) expected \(receipt.dylib_sha256) got \(sha)") + print("ОШИБКА \(receipt.plugin_id)@\(receipt.version) ожидалось \(receipt.dylib_sha256), получено \(sha)") failures += 1 } } diff --git a/Packages/OsaurusCLI/Sources/OsaurusCLICore/Commands/Version.swift b/Packages/OsaurusCLI/Sources/OsaurusCLICore/Commands/Version.swift index 537e4d9a6..9f96709a7 100644 --- a/Packages/OsaurusCLI/Sources/OsaurusCLICore/Commands/Version.swift +++ b/Packages/OsaurusCLI/Sources/OsaurusCLICore/Commands/Version.swift @@ -23,7 +23,7 @@ public struct VersionCommand: Command { } else if let v = versionString { output = "Osaurus \(v)" } else { - output = "Osaurus dev" + output = "Osaurus для разработки" } print(output) exit(EXIT_SUCCESS) diff --git a/Packages/OsaurusCLI/Sources/OsaurusCLICore/Services/AppControl.swift b/Packages/OsaurusCLI/Sources/OsaurusCLICore/Services/AppControl.swift index ec814481e..6d0358cb5 100644 --- a/Packages/OsaurusCLI/Sources/OsaurusCLICore/Services/AppControl.swift +++ b/Packages/OsaurusCLI/Sources/OsaurusCLICore/Services/AppControl.swift @@ -49,7 +49,7 @@ public struct AppControl { } if !launched { fputs( - "Could not launch Osaurus.app. Install it with Homebrew: brew install --cask osaurus\n", + "Не удалось запустить Osaurus.app. Установите его через Homebrew: brew install --cask osaurus\n", stderr ) return diff --git a/Packages/OsaurusCLI/Sources/OsaurusCLICore/Services/ServerControl.swift b/Packages/OsaurusCLI/Sources/OsaurusCLICore/Services/ServerControl.swift index 9be535177..d4c880d3e 100644 --- a/Packages/OsaurusCLI/Sources/OsaurusCLICore/Services/ServerControl.swift +++ b/Packages/OsaurusCLI/Sources/OsaurusCLICore/Services/ServerControl.swift @@ -36,7 +36,7 @@ public struct ServerControl { healthy = await checkHealth(port: port) } guard healthy else { - fputs("Server is not running. Start it with 'osaurus serve'\n", stderr) + fputs("Сервер не запущен. Запустите его командой 'osaurus serve'\n", stderr) exit(EXIT_FAILURE) } return port diff --git a/Packages/OsaurusCLI/Tests/OsaurusCLITests/ManifestExtractTests.swift b/Packages/OsaurusCLI/Tests/OsaurusCLITests/ManifestExtractTests.swift index 9d5bf4e8a..24669ce6b 100644 --- a/Packages/OsaurusCLI/Tests/OsaurusCLITests/ManifestExtractTests.swift +++ b/Packages/OsaurusCLI/Tests/OsaurusCLITests/ManifestExtractTests.swift @@ -83,12 +83,12 @@ final class ManifestExtractTests: XCTestCase { func testErrorDescriptions() { let cases: [(ManifestExtract.ExtractionError, String)] = [ - (.fileNotFound("/path/to/file"), "File not found: /path/to/file"), - (.loadFailed("bad format"), "Failed to load dylib: bad format"), - (.missingEntryPoint, "Missing plugin entry point (osaurus_plugin_entry or osaurus_plugin_entry_v2)"), - (.entryReturnedNull, "Plugin entry returned null"), - (.initFailed, "Plugin init failed"), - (.manifestFailed, "Failed to get manifest"), + (.fileNotFound("/path/to/file"), "Файл не найден: /path/to/file"), + (.loadFailed("bad format"), "Не удалось загрузить dylib: bad format"), + (.missingEntryPoint, "Не найдена точка входа плагина (osaurus_plugin_entry или osaurus_plugin_entry_v2)"), + (.entryReturnedNull, "Точка входа плагина вернула null"), + (.initFailed, "Не удалось инициализировать плагин"), + (.manifestFailed, "Не удалось получить манифест"), ] for (error, expected) in cases { diff --git a/Packages/OsaurusCore/Resources/Localizable.xcstrings b/Packages/OsaurusCore/Resources/Localizable.xcstrings index 9a6d72afe..369d7f369 100644 --- a/Packages/OsaurusCore/Resources/Localizable.xcstrings +++ b/Packages/OsaurusCore/Resources/Localizable.xcstrings @@ -8,6 +8,12 @@ "state": "translated", "value": " Kopie" } + }, + "ru": { + "stringUnit": { + "state": "translated", + "value": "Копировать" + } } } }, @@ -48,6 +54,84 @@ } } } + }, + "ru": { + "variations": { + "plural": { + "one": { + "stringUnit": { + "state": "translated", + "value": "%lld доступных навыков" + } + }, + "other": { + "stringUnit": { + "state": "translated", + "value": "%lld доступных навыков" + } + } + } + } + } + } + }, + "%lld secrets": { + "localizations": { + "en": { + "variations": { + "plural": { + "one": { + "stringUnit": { + "state": "translated", + "value": "%lld secret" + } + }, + "other": { + "stringUnit": { + "state": "translated", + "value": "%lld secrets" + } + } + } + } + }, + "ru": { + "variations": { + "plural": { + "one": { + "stringUnit": { + "state": "translated", + "value": "%lld секрет" + } + }, + "other": { + "stringUnit": { + "state": "translated", + "value": "%lld секретов" + } + } + } + } + } + } + }, + "%lldm %llds remaining": { + "localizations": { + "ru": { + "stringUnit": { + "state": "translated", + "value": "%lldm Осталось %llds" + } + } + } + }, + "%llds remaining": { + "localizations": { + "ru": { + "stringUnit": { + "state": "translated", + "value": "Осталось %llds" + } } } }, @@ -58,6 +142,12 @@ "state": "translated", "value": "(Standard)" } + }, + "ru": { + "stringUnit": { + "state": "translated", + "value": "(По умолчанию)" + } } } }, @@ -68,6 +158,12 @@ "state": "translated", "value": "(dieses Gerät)" } + }, + "ru": { + "stringUnit": { + "state": "translated", + "value": "(это устройство)" + } } } }, @@ -78,6 +174,12 @@ "state": "translated", "value": "+ Enter zum Speichern" } + }, + "ru": { + "stringUnit": { + "state": "translated", + "value": "+ Введите, чтобы сохранить" + } } } }, @@ -88,6 +190,12 @@ "state": "translated", "value": "20+ eingebaute Plugins für Mail, Kalender, Browser, Dateien und mehr. Importiere Skills von GitHub. Verbinde MCP-Server. Alles mit deiner Erlaubnis." } + }, + "ru": { + "stringUnit": { + "state": "translated", + "value": "Более 20 встроенных плагинов для почты, календаря, браузера, файлов и многого другого. Импортируйте навыки из GitHub. Подключите MCP-серверы. Все с вашего разрешения." + } } } }, @@ -98,6 +206,12 @@ "state": "translated", "value": "Eine Mikrofon-Schaltfläche erscheint in der Chat-Eingabe, wenn Stimme bereit ist" } + }, + "ru": { + "stringUnit": { + "state": "translated", + "value": "Кнопка микрофона появится в окне чата, когда голос будет готов." + } } } }, @@ -108,6 +222,12 @@ "state": "translated", "value": "ALLE" } + }, + "ru": { + "stringUnit": { + "state": "translated", + "value": "ВСЕ" + } } } }, @@ -118,6 +238,12 @@ "state": "translated", "value": "ALLE MODELLE" } + }, + "ru": { + "stringUnit": { + "state": "translated", + "value": "ВСЕ МОДЕЛИ" + } } } }, @@ -128,6 +254,12 @@ "state": "translated", "value": "API-Endpunkte" } + }, + "ru": { + "stringUnit": { + "state": "translated", + "value": "Конечные точки API" + } } } }, @@ -138,6 +270,12 @@ "state": "translated", "value": "API KEY" } + }, + "ru": { + "stringUnit": { + "state": "translated", + "value": "API-КЛЮЧ" + } } } }, @@ -148,6 +286,12 @@ "state": "translated", "value": "API-Schlüssel erforderlich" } + }, + "ru": { + "stringUnit": { + "state": "translated", + "value": "Требуются ключи API" + } } } }, @@ -158,6 +302,12 @@ "state": "translated", "value": "API-Referenz" } + }, + "ru": { + "stringUnit": { + "state": "translated", + "value": "Справочник по API" + } } } }, @@ -168,6 +318,12 @@ "state": "translated", "value": "ARGUMENTE" } + }, + "ru": { + "stringUnit": { + "state": "translated", + "value": "АРГУМЕНТЫ" + } } } }, @@ -178,6 +334,12 @@ "state": "translated", "value": "AUTHENTIFIZIERUNG" } + }, + "ru": { + "stringUnit": { + "state": "translated", + "value": "АУТЕНТИФИКАЦИЯ" + } } } }, @@ -188,6 +350,12 @@ "state": "translated", "value": "Über Osaurus" } + }, + "ru": { + "stringUnit": { + "state": "translated", + "value": "О программе Osaurus" + } } } }, @@ -198,6 +366,12 @@ "state": "translated", "value": "Über Systemberechtigungen" } + }, + "ru": { + "stringUnit": { + "state": "translated", + "value": "О системных разрешениях" + } } } }, @@ -208,6 +382,12 @@ "state": "translated", "value": "Zugangsschlüssel" } + }, + "ru": { + "stringUnit": { + "state": "translated", + "value": "Ключи доступа" + } } } }, @@ -218,6 +398,12 @@ "state": "translated", "value": "Bedienungshilfen" } + }, + "ru": { + "stringUnit": { + "state": "translated", + "value": "Доступность" + } } } }, @@ -228,6 +414,12 @@ "state": "translated", "value": "Danksagungen" } + }, + "ru": { + "stringUnit": { + "state": "translated", + "value": "Благодарности" + } } } }, @@ -238,6 +430,12 @@ "state": "translated", "value": "Danksagungen…" } + }, + "ru": { + "stringUnit": { + "state": "translated", + "value": "Благодарности…" + } } } }, @@ -248,6 +446,12 @@ "state": "translated", "value": "Aktivierte Agenten" } + }, + "ru": { + "stringUnit": { + "state": "translated", + "value": "Активированные агенты" + } } } }, @@ -258,6 +462,12 @@ "state": "translated", "value": "Aktivierungstaste" } + }, + "ru": { + "stringUnit": { + "state": "translated", + "value": "Горячая клавиша активации" + } } } }, @@ -268,6 +478,12 @@ "state": "translated", "value": "Aktiv" } + }, + "ru": { + "stringUnit": { + "state": "translated", + "value": "Активный" + } } } }, @@ -278,6 +494,12 @@ "state": "translated", "value": "Hinzufügen" } + }, + "ru": { + "stringUnit": { + "state": "translated", + "value": "Добавить" + } } } }, @@ -288,6 +510,12 @@ "state": "translated", "value": "Farbe hinzufügen" } + }, + "ru": { + "stringUnit": { + "state": "translated", + "value": "Добавить цвет" + } } } }, @@ -298,6 +526,12 @@ "state": "translated", "value": "Datei hinzufügen" } + }, + "ru": { + "stringUnit": { + "state": "translated", + "value": "Добавить файл" + } } } }, @@ -308,6 +542,12 @@ "state": "translated", "value": "Header hinzufügen" } + }, + "ru": { + "stringUnit": { + "state": "translated", + "value": "Добавить заголовок" + } } } }, @@ -318,6 +558,12 @@ "state": "translated", "value": "Modell hinzufügen" } + }, + "ru": { + "stringUnit": { + "state": "translated", + "value": "Добавить модель" + } } } }, @@ -328,6 +574,12 @@ "state": "translated", "value": "Überschreibung hinzufügen" } + }, + "ru": { + "stringUnit": { + "state": "translated", + "value": "Добавить переопределение" + } } } }, @@ -338,6 +590,12 @@ "state": "translated", "value": "Anbieter hinzufügen" } + }, + "ru": { + "stringUnit": { + "state": "translated", + "value": "Добавить поставщика" + } } } }, @@ -348,6 +606,12 @@ "state": "translated", "value": "Tool hinzufügen" } + }, + "ru": { + "stringUnit": { + "state": "translated", + "value": "Добавить инструмент" + } } } }, @@ -358,6 +622,12 @@ "state": "translated", "value": "Füge deinen ersten Anbieter hinzu" } + }, + "ru": { + "stringUnit": { + "state": "translated", + "value": "Добавьте своего первого провайдера" + } } } }, @@ -368,6 +638,12 @@ "state": "translated", "value": "Füge ein Modell hinzu, um loszulegen" } + }, + "ru": { + "stringUnit": { + "state": "translated", + "value": "Добавьте модель, чтобы начать" + } } } }, @@ -378,6 +654,12 @@ "state": "translated", "value": "Füge einen Remote-MCP-Server hinzu, um seine Tools zu entdecken und zu nutzen" } + }, + "ru": { + "stringUnit": { + "state": "translated", + "value": "Добавьте удаленный сервер MCP, чтобы обнаруживать и использовать его инструменты." + } } } }, @@ -388,6 +670,12 @@ "state": "translated", "value": "Empfindlichkeit der Spracherkennung anpassen" } + }, + "ru": { + "stringUnit": { + "state": "translated", + "value": "Настройте чувствительность обнаружения голоса" + } } } }, @@ -398,6 +686,12 @@ "state": "translated", "value": "Beeinflusst Pausenerkennung, Aktivierungswort-Erkennung und Sprachaktivitätsschwellen" } + }, + "ru": { + "stringUnit": { + "state": "translated", + "value": "Влияет на обнаружение паузы, обнаружение слов пробуждения и пороги голосовой активности." + } } } }, @@ -408,6 +702,12 @@ "state": "translated", "value": "Agent kann eigene Tools als Plugins erstellen" } + }, + "ru": { + "stringUnit": { + "state": "translated", + "value": "Агент может создавать свои собственные инструменты в виде плагинов." + } } } }, @@ -418,6 +718,12 @@ "state": "translated", "value": "Agenten" } + }, + "ru": { + "stringUnit": { + "state": "translated", + "value": "Агенты" + } } } }, @@ -428,6 +734,12 @@ "state": "translated", "value": "Agenten führen Befehle sicher aus" } + }, + "ru": { + "stringUnit": { + "state": "translated", + "value": "Агенты безопасно выполняют команды" + } } } }, @@ -438,6 +750,12 @@ "state": "translated", "value": "Agenten führen Shell-Befehle sicher aus" } + }, + "ru": { + "stringUnit": { + "state": "translated", + "value": "Агенты безопасно выполняют команды оболочки" + } } } }, @@ -448,6 +766,12 @@ "state": "translated", "value": "Agenten, Gedächtnis, Tools und Identität – direkt auf deinem Mac.\nModelle sind austauschbar – alles andere wächst mit dir." } + }, + "ru": { + "stringUnit": { + "state": "translated", + "value": "Агенты, память, инструменты и личные данные, которые живут на вашем Mac.\nМодели взаимозаменяемы — все остальное складывается, остается с вами." + } } } }, @@ -458,6 +782,12 @@ "state": "translated", "value": "Agenten, Stimme und Themes" } + }, + "ru": { + "stringUnit": { + "state": "translated", + "value": "Агенты, голос и темы" + } } } }, @@ -468,6 +798,12 @@ "state": "translated", "value": "Aggressive Suche. Bis zu 15 Tools geladen, kann Prompt-Größe erhöhen." } + }, + "ru": { + "stringUnit": { + "state": "translated", + "value": "Агрессивный поиск. Загружено до 15 инструментов, размер подсказки может быть увеличен." + } } } }, @@ -478,6 +814,12 @@ "state": "translated", "value": "Alle" } + }, + "ru": { + "stringUnit": { + "state": "translated", + "value": "Все" + } } } }, @@ -488,6 +830,12 @@ "state": "translated", "value": "Alle Modelle" } + }, + "ru": { + "stringUnit": { + "state": "translated", + "value": "Все модели" + } } } }, @@ -498,6 +846,12 @@ "state": "translated", "value": "Alle Verarbeitung findet auf deinem Mac statt" } + }, + "ru": { + "stringUnit": { + "state": "translated", + "value": "Вся обработка происходит на вашем Mac" + } } } }, @@ -508,6 +862,12 @@ "state": "translated", "value": "Erlauben" } + }, + "ru": { + "stringUnit": { + "state": "translated", + "value": "Разрешить" + } } } }, @@ -518,6 +878,12 @@ "state": "translated", "value": "Agent darf beliebige Befehle in der Sandbox ausführen" } + }, + "ru": { + "stringUnit": { + "state": "translated", + "value": "Разрешить агенту запускать произвольные команды в песочнице" + } } } }, @@ -528,7 +894,13 @@ "state": "translated", "value": "Erlaubt das Aufnehmen von System-Audio für Transkription. Bildschirminhalte werden nicht aufgezeichnet." } - } + }, + "ru": { + "stringUnit": { + "state": "translated", + "value": "Позволяет захватывать системный звук для транскрипции. Содержимое экрана не записывается." + } + } } }, "Allows plugins to access and search contacts.": { @@ -538,6 +910,12 @@ "state": "translated", "value": "Erlaubt Plugins, auf Kontakte zuzugreifen und sie zu durchsuchen." } + }, + "ru": { + "stringUnit": { + "state": "translated", + "value": "Позволяет плагинам получать доступ к контактам и осуществлять их поиск." + } } } }, @@ -548,6 +926,12 @@ "state": "translated", "value": "Erlaubt Plugins, auf geschützte Dateien wie die Nachrichten-Datenbank und andere App-Daten zuzugreifen." } + }, + "ru": { + "stringUnit": { + "state": "translated", + "value": "Позволяет плагинам получать доступ к защищенным файлам, таким как база данных сообщений и другим данным приложения." + } } } }, @@ -558,6 +942,12 @@ "state": "translated", "value": "Erlaubt Plugins, direkt auf deinen Kalender zuzugreifen, um Termine zu lesen und zu erstellen." } + }, + "ru": { + "stringUnit": { + "state": "translated", + "value": "Позволяет плагинам получать доступ к вашему календарю для непосредственного чтения и создания событий." + } } } }, @@ -568,6 +958,12 @@ "state": "translated", "value": "Erlaubt Plugins, auf deinen aktuellen Standort zuzugreifen." } + }, + "ru": { + "stringUnit": { + "state": "translated", + "value": "Позволяет плагинам получать доступ к вашему текущему местоположению." + } } } }, @@ -578,6 +974,12 @@ "state": "translated", "value": "Erlaubt Plugins, auf deine Erinnerungen zuzugreifen, um Aufgaben zu lesen und zu erstellen." } + }, + "ru": { + "stringUnit": { + "state": "translated", + "value": "Позволяет плагинам получать доступ к вашим напоминаниям для чтения и создания задач." + } } } }, @@ -588,6 +990,12 @@ "state": "translated", "value": "Erlaubt Plugins, die Karten-App via AppleScript zu steuern." } + }, + "ru": { + "stringUnit": { + "state": "translated", + "value": "Позволяет плагинам управлять приложением «Карты» через AppleScript." + } } } }, @@ -598,6 +1006,12 @@ "state": "translated", "value": "Erlaubt Plugins, andere Apps via AppleScript und Apple Events zu steuern." } + }, + "ru": { + "stringUnit": { + "state": "translated", + "value": "Позволяет плагинам управлять другими приложениями с помощью AppleScript и Apple Events." + } } } }, @@ -608,6 +1022,12 @@ "state": "translated", "value": "Erlaubt Plugins, mit UI-Elementen zu interagieren, Eingaben zu simulieren und den Computer zu steuern." } + }, + "ru": { + "stringUnit": { + "state": "translated", + "value": "Позволяет плагинам взаимодействовать с элементами пользовательского интерфейса, имитировать ввод и управлять компьютером." + } } } }, @@ -618,6 +1038,12 @@ "state": "translated", "value": "Erlaubt Plugins, Termine in Kalender.app via AppleScript zu lesen und zu erstellen." } + }, + "ru": { + "stringUnit": { + "state": "translated", + "value": "Позволяет плагинам читать и создавать события в Calendar.app через AppleScript." + } } } }, @@ -628,6 +1054,12 @@ "state": "translated", "value": "Erlaubt Plugins, Notizen in der Notizen-App via AppleScript zu lesen und zu erstellen." } + }, + "ru": { + "stringUnit": { + "state": "translated", + "value": "Позволяет плагинам читать и создавать заметки в приложении «Заметки» через AppleScript." + } } } }, @@ -638,6 +1070,12 @@ "state": "translated", "value": "Erlaubt Plugins, Mails in Mail.app via AppleScript zu lesen und zu senden." } + }, + "ru": { + "stringUnit": { + "state": "translated", + "value": "Позволяет плагинам читать и отправлять электронную почту в Mail.app через AppleScript." + } } } }, @@ -648,6 +1086,12 @@ "state": "translated", "value": "Erlaubt Sprach-Transkription über das Mikrofon für Speech-to-Text." } + }, + "ru": { + "stringUnit": { + "state": "translated", + "value": "Позволяет транскрипцию голоса с помощью микрофона для преобразования речи в текст." + } } } }, @@ -658,6 +1102,12 @@ "state": "translated", "value": "Fast fertig…" } + }, + "ru": { + "stringUnit": { + "state": "translated", + "value": "Почти готово..." + } } } }, @@ -668,6 +1118,12 @@ "state": "translated", "value": "Immer erlauben" } + }, + "ru": { + "stringUnit": { + "state": "translated", + "value": "Всегда разрешать" + } } } }, @@ -678,6 +1134,12 @@ "state": "translated", "value": "Animation" } + }, + "ru": { + "stringUnit": { + "state": "translated", + "value": "Анимация" + } } } }, @@ -688,6 +1150,12 @@ "state": "translated", "value": "Anthropic" } + }, + "ru": { + "stringUnit": { + "state": "translated", + "value": "Anthropic" + } } } }, @@ -698,6 +1166,12 @@ "state": "translated", "value": "Jede OpenAI-kompatible API" } + }, + "ru": { + "stringUnit": { + "state": "translated", + "value": "Любой OpenAI-совместимый API" + } } } }, @@ -708,6 +1182,32 @@ "state": "translated", "value": "Apple Intelligence ist in macOS integriert und läuft privat auf deinem Gerät. Es ist sofort einsatzbereit.\n\nLokale Modelle laufen auf deinem Mac mit deiner Hardware. Sie sind privat und kostenlos, erfordern aber einen Download.\n\nCloud-Anbieter wie Claude und ChatGPT sind leistungsfähiger, erfordern aber ein Konto und berechnen pro Nutzung.\n\nNicht sicher? Apple Intelligence wird für die meisten Nutzer empfohlen." } + }, + "ru": { + "stringUnit": { + "state": "translated", + "value": "Apple Intelligence встроена в macOS и работает конфиденциально на вашем устройстве. Она доступна сразу.\n\nЛокальные модели работают на вашем Mac, используя его ресурсы. Они конфиденциальны и бесплатны, но требуют загрузки.\n\nОблачные провайдеры, такие как Claude и ChatGPT, мощнее, но требуют учетной записи и оплаты за использование.\n\nСомневаетесь? Apple Intelligence рекомендуется большинству пользователей." + } + } + } + }, + "Apple Intelligence runs on-device · Local models stay on your Mac · Providers use the cloud": { + "localizations": { + "ru": { + "stringUnit": { + "state": "translated", + "value": "Apple Intelligence работает на устройстве · локальные модели остаются на вашем Mac · провайдеры работают в облаке" + } + } + } + }, + "Local models stay on your Mac · Providers use the cloud": { + "localizations": { + "ru": { + "stringUnit": { + "state": "translated", + "value": "Локальные модели остаются на вашем Mac · провайдеры работают в облаке" + } } } }, @@ -718,6 +1218,12 @@ "state": "translated", "value": "Anwendungsverhalten und Systemintegration." } + }, + "ru": { + "stringUnit": { + "state": "translated", + "value": "Поведение приложений и системная интеграция." + } } } }, @@ -728,6 +1234,12 @@ "state": "translated", "value": "Theme anwenden" } + }, + "ru": { + "stringUnit": { + "state": "translated", + "value": "Применить тему" + } } } }, @@ -738,6 +1250,12 @@ "state": "translated", "value": "Genehmigung erforderlich" } + }, + "ru": { + "stringUnit": { + "state": "translated", + "value": "Требуется одобрение" + } } } }, @@ -748,6 +1266,12 @@ "state": "translated", "value": "Genehmigen" } + }, + "ru": { + "stringUnit": { + "state": "translated", + "value": "Утвердить" + } } } }, @@ -758,6 +1282,12 @@ "state": "translated", "value": "Architektur" } + }, + "ru": { + "stringUnit": { + "state": "translated", + "value": "Архитектура" + } } } }, @@ -768,6 +1298,12 @@ "state": "translated", "value": "Möchtest du diesen Chat wirklich löschen?" } + }, + "ru": { + "stringUnit": { + "state": "translated", + "value": "Вы уверены, что хотите удалить этот чат?" + } } } }, @@ -778,6 +1314,12 @@ "state": "translated", "value": "Argumente" } + }, + "ru": { + "stringUnit": { + "state": "translated", + "value": "Аргументы" + } } } }, @@ -788,6 +1330,12 @@ "state": "translated", "value": "Artefakte" } + }, + "ru": { + "stringUnit": { + "state": "translated", + "value": "Артефакты" + } } } }, @@ -798,6 +1346,12 @@ "state": "translated", "value": "Fragen" } + }, + "ru": { + "stringUnit": { + "state": "translated", + "value": "Спрашивать" + } } } }, @@ -808,6 +1362,12 @@ "state": "translated", "value": "KI fragen" } + }, + "ru": { + "stringUnit": { + "state": "translated", + "value": "Спросить ИИ" + } } } }, @@ -818,6 +1378,12 @@ "state": "translated", "value": "Assistent" } + }, + "ru": { + "stringUnit": { + "state": "translated", + "value": "Ассистент" + } } } }, @@ -828,6 +1394,12 @@ "state": "translated", "value": "Assistenten-Blase" } + }, + "ru": { + "stringUnit": { + "state": "translated", + "value": "Помощник пузырь" + } } } }, @@ -838,6 +1410,12 @@ "state": "translated", "value": "Datei anhängen" } + }, + "ru": { + "stringUnit": { + "state": "translated", + "value": "Прикрепить файл" + } } } }, @@ -848,6 +1426,12 @@ "state": "translated", "value": "Bild anhängen" } + }, + "ru": { + "stringUnit": { + "state": "translated", + "value": "Прикрепить изображение" + } } } }, @@ -858,6 +1442,12 @@ "state": "translated", "value": "Audio" } + }, + "ru": { + "stringUnit": { + "state": "translated", + "value": "Аудио" + } } } }, @@ -868,6 +1458,12 @@ "state": "translated", "value": "Audiodatei" } + }, + "ru": { + "stringUnit": { + "state": "translated", + "value": "Аудио файл" + } } } }, @@ -878,6 +1474,12 @@ "state": "translated", "value": "Audioeingang" } + }, + "ru": { + "stringUnit": { + "state": "translated", + "value": "Аудиовход" + } } } }, @@ -888,6 +1490,12 @@ "state": "translated", "value": "Authentifizierungsfehler" } + }, + "ru": { + "stringUnit": { + "state": "translated", + "value": "Ошибка аутентификации" + } } } }, @@ -898,6 +1506,12 @@ "state": "translated", "value": "Autor" } + }, + "ru": { + "stringUnit": { + "state": "translated", + "value": "Автор" + } } } }, @@ -908,6 +1522,12 @@ "state": "translated", "value": "Auto" } + }, + "ru": { + "stringUnit": { + "state": "translated", + "value": "Авто" + } } } }, @@ -918,6 +1538,12 @@ "state": "translated", "value": "Auto-Start" } + }, + "ru": { + "stringUnit": { + "state": "translated", + "value": "Автозапуск" + } } } }, @@ -928,6 +1554,12 @@ "state": "translated", "value": "Automatisches Senden ist im manuellen Stopp-Modus deaktiviert." } + }, + "ru": { + "stringUnit": { + "state": "translated", + "value": "Автоматическая отправка отключена в режиме ручной остановки." + } } } }, @@ -938,6 +1570,12 @@ "state": "translated", "value": "Automatisch senden oder Spracheingabe nach dieser Stilledauer schließen" } + }, + "ru": { + "stringUnit": { + "state": "translated", + "value": "Автоматически отправлять или закрывать голосовой ввод после истечения заданного периода молчания" + } } } }, @@ -948,6 +1586,12 @@ "state": "translated", "value": "Dateien automatisch nach Typ sortieren" } + }, + "ru": { + "stringUnit": { + "state": "translated", + "value": "Автоматическая сортировка файлов по папкам по типу" + } } } }, @@ -958,6 +1602,12 @@ "state": "translated", "value": "Automatisiere wiederkehrende KI-Aufgaben mit individuellen Zeitplänen" } + }, + "ru": { + "stringUnit": { + "state": "translated", + "value": "Автоматизируйте повторяющиеся задачи ИИ с помощью настраиваемых расписаний." + } } } }, @@ -968,6 +1618,12 @@ "state": "translated", "value": "Automatische Benachrichtigungen zu festgelegten Zeiten" } + }, + "ru": { + "stringUnit": { + "state": "translated", + "value": "Автоматические уведомления в установленное время" + } } } }, @@ -978,6 +1634,12 @@ "state": "translated", "value": "Automatisch" } + }, + "ru": { + "stringUnit": { + "state": "translated", + "value": "Автоматический" + } } } }, @@ -988,6 +1650,12 @@ "state": "translated", "value": "Sendet Nachricht automatisch nach kurzer Pause" } + }, + "ru": { + "stringUnit": { + "state": "translated", + "value": "Автоматически отправляет сообщение после небольшой паузы" + } } } }, @@ -998,6 +1666,12 @@ "state": "translated", "value": "Entlädt andere Modelle automatisch. Empfohlen für Standardnutzung." } + }, + "ru": { + "stringUnit": { + "state": "translated", + "value": "Автоматически выгружает другие модели. Рекомендуется для стандартного использования." + } } } }, @@ -1008,6 +1682,12 @@ "state": "translated", "value": "Automatisierung" } + }, + "ru": { + "stringUnit": { + "state": "translated", + "value": "Автоматизация" + } } } }, @@ -1018,6 +1698,12 @@ "state": "translated", "value": "Automatisierung (Kalender)" } + }, + "ru": { + "stringUnit": { + "state": "translated", + "value": "Автоматизация (Календарь)" + } } } }, @@ -1028,6 +1714,12 @@ "state": "translated", "value": "Automatisierung (Mail)" } + }, + "ru": { + "stringUnit": { + "state": "translated", + "value": "Автоматизация (Почта)" + } } } }, @@ -1038,6 +1730,12 @@ "state": "translated", "value": "Autonome Agenten" } + }, + "ru": { + "stringUnit": { + "state": "translated", + "value": "Автономные агенты" + } } } }, @@ -1048,6 +1746,12 @@ "state": "translated", "value": "Autonome Ausführung" } + }, + "ru": { + "stringUnit": { + "state": "translated", + "value": "Автономный руководитель" + } } } }, @@ -1058,6 +1762,12 @@ "state": "translated", "value": "Autonome Ausführung" } + }, + "ru": { + "stringUnit": { + "state": "translated", + "value": "Автономное выполнение" + } } } }, @@ -1068,6 +1778,12 @@ "state": "translated", "value": "Verfügbare Modelle" } + }, + "ru": { + "stringUnit": { + "state": "translated", + "value": "Доступные модели" + } } } }, @@ -1078,6 +1794,12 @@ "state": "translated", "value": "Verfügbare Tools" } + }, + "ru": { + "stringUnit": { + "state": "translated", + "value": "Доступные инструменты" + } } } }, @@ -1088,6 +1810,12 @@ "state": "translated", "value": "Verfügbare Endpunkte auf deinem Osaurus-Server. Aufklappen, um direkt zu testen." } + }, + "ru": { + "stringUnit": { + "state": "translated", + "value": "Доступные конечные точки на сервере Osaurus. Разверните, чтобы проверить их напрямую." + } } } }, @@ -1098,6 +1826,12 @@ "state": "translated", "value": "Ø Latenz" } + }, + "ru": { + "stringUnit": { + "state": "translated", + "value": "Средняя задержка" + } } } }, @@ -1108,6 +1842,12 @@ "state": "translated", "value": "Zurück" } + }, + "ru": { + "stringUnit": { + "state": "translated", + "value": "Назад" + } } } }, @@ -1118,6 +1858,12 @@ "state": "translated", "value": "Hintergrund" } + }, + "ru": { + "stringUnit": { + "state": "translated", + "value": "Фон" + } } } }, @@ -1128,6 +1874,12 @@ "state": "translated", "value": "Hintergrundbild" } + }, + "ru": { + "stringUnit": { + "state": "translated", + "value": "Фоновое изображение" + } } } }, @@ -1138,6 +1890,12 @@ "state": "translated", "value": "Hintergrundaufgabe läuft" } + }, + "ru": { + "stringUnit": { + "state": "translated", + "value": "Выполняется фоновая задача" + } } } }, @@ -1148,6 +1906,12 @@ "state": "translated", "value": "Ausgewogen" } + }, + "ru": { + "stringUnit": { + "state": "translated", + "value": "Сбалансированный" + } } } }, @@ -1158,6 +1922,12 @@ "state": "translated", "value": "Ausgewogen für normale Konversation" } + }, + "ru": { + "stringUnit": { + "state": "translated", + "value": "Сбалансирован для обычного разговора" + } } } }, @@ -1168,6 +1938,12 @@ "state": "translated", "value": "Basispfad" } + }, + "ru": { + "stringUnit": { + "state": "translated", + "value": "Базовый путь" + } } } }, @@ -1178,6 +1954,12 @@ "state": "translated", "value": "Verhalten" } + }, + "ru": { + "stringUnit": { + "state": "translated", + "value": "Поведение" + } } } }, @@ -1188,6 +1970,12 @@ "state": "translated", "value": "Beta-Updates" } + }, + "ru": { + "stringUnit": { + "state": "translated", + "value": "Бета-обновления" + } } } }, @@ -1198,6 +1986,12 @@ "state": "translated", "value": "Rahmen" } + }, + "ru": { + "stringUnit": { + "state": "translated", + "value": "Границы" + } } } }, @@ -1208,6 +2002,12 @@ "state": "translated", "value": "Kurzbeschreibung (optional)" } + }, + "ru": { + "stringUnit": { + "state": "translated", + "value": "Краткое описание (необязательно)" + } } } }, @@ -1218,6 +2018,12 @@ "state": "translated", "value": "Durchsuchen" } + }, + "ru": { + "stringUnit": { + "state": "translated", + "value": "Обзор" + } } } }, @@ -1228,6 +2034,12 @@ "state": "translated", "value": "Plugins durchsuchen und verwalten" } + }, + "ru": { + "stringUnit": { + "state": "translated", + "value": "Просматривайте и управляйте плагинами" + } } } }, @@ -1238,6 +2050,12 @@ "state": "translated", "value": "Durchsuche das Repository, um Plugins zu installieren" } + }, + "ru": { + "stringUnit": { + "state": "translated", + "value": "Просмотрите репозиторий для установки плагинов" + } } } }, @@ -1248,6 +2066,12 @@ "state": "translated", "value": "Browser-Fehler" } + }, + "ru": { + "stringUnit": { + "state": "translated", + "value": "Ошибка браузера" + } } } }, @@ -1258,6 +2082,12 @@ "state": "translated", "value": "Blasen-Stil" } + }, + "ru": { + "stringUnit": { + "state": "translated", + "value": "Пузырьковый стиль" + } } } }, @@ -1268,6 +2098,12 @@ "state": "translated", "value": "Baue eine Landing Page für " } + }, + "ru": { + "stringUnit": { + "state": "translated", + "value": "Создайте целевую страницу для" + } } } }, @@ -1278,6 +2114,12 @@ "state": "translated", "value": "Website bauen" } + }, + "ru": { + "stringUnit": { + "state": "translated", + "value": "Создать сайт" + } } } }, @@ -1288,6 +2130,12 @@ "state": "translated", "value": "Erstelle deinen individuellen KI-Assistenten" } + }, + "ru": { + "stringUnit": { + "state": "translated", + "value": "Создайте своего собственного помощника с искусственным интеллектом" + } } } }, @@ -1298,6 +2146,12 @@ "state": "translated", "value": "In macOS integriert. Privat, schnell und sofort einsatzbereit." } + }, + "ru": { + "stringUnit": { + "state": "translated", + "value": "Встроено в macOS. Конфиденциально, быстро и сразу готово к использованию." + } } } }, @@ -1308,6 +2162,12 @@ "state": "translated", "value": "Integriert" } + }, + "ru": { + "stringUnit": { + "state": "translated", + "value": "Встроенный" + } } } }, @@ -1318,6 +2178,12 @@ "state": "translated", "value": "Integrierte Themes" } + }, + "ru": { + "stringUnit": { + "state": "translated", + "value": "Встроенные темы" + } } } }, @@ -1328,6 +2194,12 @@ "state": "translated", "value": "Eingebaute Skills sind schreibgeschützt" } + }, + "ru": { + "stringUnit": { + "state": "translated", + "value": "Встроенные навыки доступны только для чтения." + } } } }, @@ -1338,6 +2210,12 @@ "state": "translated", "value": "Integrierte Themes können nicht direkt bearbeitet werden" } + }, + "ru": { + "stringUnit": { + "state": "translated", + "value": "Встроенные темы нельзя изменить напрямую." + } } } }, @@ -1348,6 +2226,12 @@ "state": "translated", "value": "VERBINDUNG" } + }, + "ru": { + "stringUnit": { + "state": "translated", + "value": "СВЯЗЬ" + } } } }, @@ -1358,6 +2242,12 @@ "state": "translated", "value": "GESPRÄCHSVERLAUF" } + }, + "ru": { + "stringUnit": { + "state": "translated", + "value": "ИСТОРИЯ РАЗГОВОРА" + } } } }, @@ -1368,6 +2258,12 @@ "state": "translated", "value": "CPUs" } + }, + "ru": { + "stringUnit": { + "state": "translated", + "value": "процессоры" + } } } }, @@ -1378,6 +2274,12 @@ "state": "translated", "value": "EIGENE HEADER" } + }, + "ru": { + "stringUnit": { + "state": "translated", + "value": "ТАМОЖЕННЫЕ ЗАГОЛОВКИ" + } } } }, @@ -1388,6 +2290,12 @@ "state": "translated", "value": "Cache-Inspektor" } + }, + "ru": { + "stringUnit": { + "state": "translated", + "value": "Инспектор кэша" + } } } }, @@ -1398,6 +2306,12 @@ "state": "translated", "value": "Kalender" } + }, + "ru": { + "stringUnit": { + "state": "translated", + "value": "Календарь" + } } } }, @@ -1408,6 +2322,12 @@ "state": "translated", "value": "Abbrechen" } + }, + "ru": { + "stringUnit": { + "state": "translated", + "value": "Отмена" + } } } }, @@ -1418,6 +2338,12 @@ "state": "translated", "value": "Download abbrechen" } + }, + "ru": { + "stringUnit": { + "state": "translated", + "value": "Отменить загрузку" + } } } }, @@ -1428,6 +2354,12 @@ "state": "translated", "value": "Bearbeitung abbrechen" } + }, + "ru": { + "stringUnit": { + "state": "translated", + "value": "Отменить редактирование" + } } } }, @@ -1438,6 +2370,12 @@ "state": "translated", "value": "Spracheingabe abbrechen" } + }, + "ru": { + "stringUnit": { + "state": "translated", + "value": "Отменить голосовой ввод" + } } } }, @@ -1448,6 +2386,12 @@ "state": "translated", "value": "Abgebrochen" } + }, + "ru": { + "stringUnit": { + "state": "translated", + "value": "Отменено" + } } } }, @@ -1458,6 +2402,12 @@ "state": "translated", "value": "Kann nicht von Osaurus wiederhergestellt werden" } + }, + "ru": { + "stringUnit": { + "state": "translated", + "value": "Osaurus не сможет его восстановить" + } } } }, @@ -1468,6 +2418,12 @@ "state": "translated", "value": "Fähigkeit" } + }, + "ru": { + "stringUnit": { + "state": "translated", + "value": "Возможность" + } } } }, @@ -1478,6 +2434,12 @@ "state": "translated", "value": "Kategorie" } + }, + "ru": { + "stringUnit": { + "state": "translated", + "value": "Категория" + } } } }, @@ -1488,6 +2450,12 @@ "state": "translated", "value": "Ordner ändern" } + }, + "ru": { + "stringUnit": { + "state": "translated", + "value": "Изменить папку" + } } } }, @@ -1498,6 +2466,12 @@ "state": "translated", "value": "Ändern unter Einstellungen → Allgemein" } + }, + "ru": { + "stringUnit": { + "state": "translated", + "value": "Измените настройки → Общие." + } } } }, @@ -1508,6 +2482,12 @@ "state": "translated", "value": "Geänderte Dateien" } + }, + "ru": { + "stringUnit": { + "state": "translated", + "value": "Измененные файлы" + } } } }, @@ -1518,6 +2498,12 @@ "state": "translated", "value": "Änderungen werden in Echtzeit angezeigt" } + }, + "ru": { + "stringUnit": { + "state": "translated", + "value": "Изменения отражаются в режиме реального времени" + } } } }, @@ -1528,6 +2514,12 @@ "state": "translated", "value": "Ändern…" } + }, + "ru": { + "stringUnit": { + "state": "translated", + "value": "Изменять…" + } } } }, @@ -1538,6 +2530,12 @@ "state": "translated", "value": "Chat" } + }, + "ru": { + "stringUnit": { + "state": "translated", + "value": "Чат" + } } } }, @@ -1548,6 +2546,12 @@ "state": "translated", "value": "Chat-Oberfläche" } + }, + "ru": { + "stringUnit": { + "state": "translated", + "value": "Интерфейс чата" + } } } }, @@ -1558,6 +2562,12 @@ "state": "translated", "value": "Nach Updates suchen" } + }, + "ru": { + "stringUnit": { + "state": "translated", + "value": "Проверьте наличие обновлений" + } } } }, @@ -1568,6 +2578,12 @@ "state": "translated", "value": "Datei auswählen" } + }, + "ru": { + "stringUnit": { + "state": "translated", + "value": "Выберите файл" + } } } }, @@ -1578,6 +2594,12 @@ "state": "translated", "value": "Ordner wählen" } + }, + "ru": { + "stringUnit": { + "state": "translated", + "value": "Выберите папку" + } } } }, @@ -1588,6 +2610,12 @@ "state": "translated", "value": "Bild wählen" } + }, + "ru": { + "stringUnit": { + "state": "translated", + "value": "Выберите изображение" + } } } }, @@ -1598,6 +2626,12 @@ "state": "translated", "value": "Lokales Modell wählen" } + }, + "ru": { + "stringUnit": { + "state": "translated", + "value": "Выберите локальную модель" + } } } }, @@ -1608,6 +2642,12 @@ "state": "translated", "value": "Anbieter auswählen" } + }, + "ru": { + "stringUnit": { + "state": "translated", + "value": "Выберите провайдера" + } } } }, @@ -1618,6 +2658,12 @@ "state": "translated", "value": "Wähle, wie die App erkennt, dass du fertig gesprochen hast." } + }, + "ru": { + "stringUnit": { + "state": "translated", + "value": "Выберите, как приложение узнает, когда вы закончили говорить." + } } } }, @@ -1628,6 +2674,12 @@ "state": "translated", "value": "Klärung erforderlich" } + }, + "ru": { + "stringUnit": { + "state": "translated", + "value": "Требуется разъяснение" + } } } }, @@ -1638,6 +2690,12 @@ "state": "translated", "value": "Löschen" } + }, + "ru": { + "stringUnit": { + "state": "translated", + "value": "Очистить" + } } } }, @@ -1648,6 +2706,12 @@ "state": "translated", "value": "Alles löschen" } + }, + "ru": { + "stringUnit": { + "state": "translated", + "value": "Очистить все" + } } } }, @@ -1658,6 +2722,12 @@ "state": "translated", "value": "Gesamtes Gedächtnis löschen" } + }, + "ru": { + "stringUnit": { + "state": "translated", + "value": "Очистить всю память" + } } } }, @@ -1668,6 +2738,12 @@ "state": "translated", "value": "Alles löschen" } + }, + "ru": { + "stringUnit": { + "state": "translated", + "value": "Очистить все" + } } } }, @@ -1678,6 +2754,12 @@ "state": "translated", "value": "Ordner leeren" } + }, + "ru": { + "stringUnit": { + "state": "translated", + "value": "Очистить папку" + } } } }, @@ -1688,6 +2770,12 @@ "state": "translated", "value": "Ordnerauswahl aufheben" } + }, + "ru": { + "stringUnit": { + "state": "translated", + "value": "Очистить выбор папки" + } } } }, @@ -1698,6 +2786,12 @@ "state": "translated", "value": "Warteschlange leeren" } + }, + "ru": { + "stringUnit": { + "state": "translated", + "value": "Очистить сообщение в очереди" + } } } }, @@ -1708,6 +2802,12 @@ "state": "translated", "value": "Antwort löschen" } + }, + "ru": { + "stringUnit": { + "state": "translated", + "value": "Четкий ответ" + } } } }, @@ -1718,6 +2818,12 @@ "state": "translated", "value": "Suche löschen" } + }, + "ru": { + "stringUnit": { + "state": "translated", + "value": "Очистить поиск" + } } } }, @@ -1728,6 +2834,12 @@ "state": "translated", "value": "Zum Antworten klicken" } + }, + "ru": { + "stringUnit": { + "state": "translated", + "value": "Нажмите, чтобы ответить" + } } } }, @@ -1738,6 +2850,12 @@ "state": "translated", "value": "Schließen" } + }, + "ru": { + "stringUnit": { + "state": "translated", + "value": "Закрыть" + } } } }, @@ -1748,6 +2866,12 @@ "state": "translated", "value": "Fortschrittsanzeige schließen" } + }, + "ru": { + "stringUnit": { + "state": "translated", + "value": "Закрыть панель прогресса" + } } } }, @@ -1758,6 +2882,12 @@ "state": "translated", "value": "Fenster schließen" } + }, + "ru": { + "stringUnit": { + "state": "translated", + "value": "Закрыть окно" + } } } }, @@ -1768,6 +2898,12 @@ "state": "translated", "value": "Code & Auswahl" } + }, + "ru": { + "stringUnit": { + "state": "translated", + "value": "Код и выбор" + } } } }, @@ -1778,6 +2914,12 @@ "state": "translated", "value": "Befehlszeilen-Tool" } + }, + "ru": { + "stringUnit": { + "state": "translated", + "value": "Инструмент командной строки" + } } } }, @@ -1788,6 +2930,12 @@ "state": "translated", "value": "Zusage" } + }, + "ru": { + "stringUnit": { + "state": "translated", + "value": "Обязательство" + } } } }, @@ -1798,6 +2946,12 @@ "state": "translated", "value": "Einrichtung abschließen, um Stimme zu aktivieren" } + }, + "ru": { + "stringUnit": { + "state": "translated", + "value": "Завершите настройку для включения голоса" + } } } }, @@ -1808,6 +2962,12 @@ "state": "translated", "value": "Schließe diese Schritte ab, um den Transkriptionsmodus zu aktivieren" } + }, + "ru": { + "stringUnit": { + "state": "translated", + "value": "Выполните эти шаги, чтобы включить режим транскрипции." + } } } }, @@ -1818,6 +2978,12 @@ "state": "translated", "value": "Schließe diese Schritte ab, um den VAD-Modus zu aktivieren" } + }, + "ru": { + "stringUnit": { + "state": "translated", + "value": "Выполните эти шаги, чтобы включить режим VAD." + } } } }, @@ -1828,6 +2994,12 @@ "state": "translated", "value": "Abgeschlossen" } + }, + "ru": { + "stringUnit": { + "state": "translated", + "value": "Завершенный" + } } } }, @@ -1838,6 +3010,12 @@ "state": "translated", "value": "Komponenten" } + }, + "ru": { + "stringUnit": { + "state": "translated", + "value": "Компоненты" + } } } }, @@ -1848,6 +3026,12 @@ "state": "translated", "value": "Computer-Audio" } + }, + "ru": { + "stringUnit": { + "state": "translated", + "value": "Компьютерное аудио" + } } } }, @@ -1858,6 +3042,12 @@ "state": "translated", "value": "Konfiguration" } + }, + "ru": { + "stringUnit": { + "state": "translated", + "value": "Конфигурация" + } } } }, @@ -1868,6 +3058,12 @@ "state": "translated", "value": "Konfigurieren" } + }, + "ru": { + "stringUnit": { + "state": "translated", + "value": "Настроить" + } } } }, @@ -1878,6 +3074,22 @@ "state": "translated", "value": "Zugangsdaten konfigurieren" } + }, + "ru": { + "stringUnit": { + "state": "translated", + "value": "Настроить секреты" + } + } + } + }, + "Secrets are stored securely in Keychain.": { + "localizations": { + "ru": { + "stringUnit": { + "state": "translated", + "value": "Секреты надежно хранятся в Связке ключей." + } } } }, @@ -1888,6 +3100,12 @@ "state": "translated", "value": "Konfiguriere, wie der Chat-Modus Antworten generiert." } + }, + "ru": { + "stringUnit": { + "state": "translated", + "value": "Настройте способ генерации ответов в режиме чата." + } } } }, @@ -1898,6 +3116,12 @@ "state": "translated", "value": "Konfiguriere wie Sprachnachrichten verarbeitet werden" } + }, + "ru": { + "stringUnit": { + "state": "translated", + "value": "Настройка обработки голосовых сообщений" + } } } }, @@ -1908,6 +3132,12 @@ "state": "translated", "value": "Konfiguriere wie Aktivierungswörter erkannt werden" } + }, + "ru": { + "stringUnit": { + "state": "translated", + "value": "Настройка способа обнаружения слов пробуждения" + } } } }, @@ -1918,6 +3148,12 @@ "state": "translated", "value": "Ressourcen für den Linux-Container konfigurieren. Diese können später geändert werden." } + }, + "ru": { + "stringUnit": { + "state": "translated", + "value": "Настройте ресурсы для контейнера Linux. Их можно изменить позже." + } } } }, @@ -1928,6 +3164,12 @@ "state": "translated", "value": "Sandbox-Ausführung und Relay-Tunnel-Zugriff konfigurieren." } + }, + "ru": { + "stringUnit": { + "state": "translated", + "value": "Настройте выполнение песочницы и доступ к туннелю ретрансляции." + } } } }, @@ -1938,6 +3180,12 @@ "state": "translated", "value": "Konfiguriere den lokalen API-Server für externe Integrationen." } + }, + "ru": { + "stringUnit": { + "state": "translated", + "value": "Настройте локальный сервер API для внешней интеграции." + } } } }, @@ -1948,6 +3196,12 @@ "state": "translated", "value": "Spracheinstellungen direkt im Sprache-Tab konfigurieren." } + }, + "ru": { + "stringUnit": { + "state": "translated", + "value": "Настройте параметры голоса прямо на вкладке «Голос»." + } } } }, @@ -1958,6 +3212,12 @@ "state": "translated", "value": "Konfiguriere was passiert, wenn ein Aktivierungswort erkannt wird" } + }, + "ru": { + "stringUnit": { + "state": "translated", + "value": "Настройте, что произойдет при обнаружении слова пробуждения" + } } } }, @@ -1968,6 +3228,12 @@ "state": "translated", "value": "Konfiguriere deine Osaurus-Einstellungen" } + }, + "ru": { + "stringUnit": { + "state": "translated", + "value": "Настройте параметры Osaurus" + } } } }, @@ -1978,6 +3244,12 @@ "state": "translated", "value": "Bestätigungsverzögerung" } + }, + "ru": { + "stringUnit": { + "state": "translated", + "value": "Задержка подтверждения" + } } } }, @@ -1988,6 +3260,12 @@ "state": "translated", "value": "Verbinden" } + }, + "ru": { + "stringUnit": { + "state": "translated", + "value": "Соединять" + } } } }, @@ -1998,6 +3276,12 @@ "state": "translated", "value": "Anbieter verbinden" } + }, + "ru": { + "stringUnit": { + "state": "translated", + "value": "Подключите провайдера" + } } } }, @@ -2008,6 +3292,12 @@ "state": "translated", "value": "Verbinde einen Anbieter, um auf Remote-Modelle zuzugreifen." } + }, + "ru": { + "stringUnit": { + "state": "translated", + "value": "Подключите провайдера, чтобы получить доступ к удаленным моделям." + } } } }, @@ -2018,6 +3308,12 @@ "state": "translated", "value": "KI-Anbieter verbinden" } + }, + "ru": { + "stringUnit": { + "state": "translated", + "value": "Подключите поставщика ИИ" + } } } }, @@ -2028,6 +3324,12 @@ "state": "translated", "value": "Eigenen Anbieter verbinden" } + }, + "ru": { + "stringUnit": { + "state": "translated", + "value": "Подключить пользовательского поставщика" + } } } }, @@ -2038,6 +3340,12 @@ "state": "translated", "value": "Mit einem Remote-API-Anbieter verbinden" } + }, + "ru": { + "stringUnit": { + "state": "translated", + "value": "Подключитесь к удаленному поставщику API" + } } } }, @@ -2048,6 +3356,12 @@ "state": "translated", "value": "Mit Remote-API-Anbietern verbinden" } + }, + "ru": { + "stringUnit": { + "state": "translated", + "value": "Подключайтесь к удаленным поставщикам API" + } } } }, @@ -2058,6 +3372,12 @@ "state": "translated", "value": "Verbunden" } + }, + "ru": { + "stringUnit": { + "state": "translated", + "value": "Подключено" + } } } }, @@ -2068,6 +3388,12 @@ "state": "translated", "value": "Verbinde..." } + }, + "ru": { + "stringUnit": { + "state": "translated", + "value": "Подключение..." + } } } }, @@ -2078,6 +3404,12 @@ "state": "translated", "value": "Verbindungsproblem" } + }, + "ru": { + "stringUnit": { + "state": "translated", + "value": "Проблема с подключением" + } } } }, @@ -2088,6 +3420,12 @@ "state": "translated", "value": "Kontakte" } + }, + "ru": { + "stringUnit": { + "state": "translated", + "value": "Контакты" + } } } }, @@ -2098,6 +3436,12 @@ "state": "translated", "value": "Kontext-Budget" } + }, + "ru": { + "stringUnit": { + "state": "translated", + "value": "Контекстный бюджет" + } } } }, @@ -2108,6 +3452,12 @@ "state": "translated", "value": "Kontextlänge" } + }, + "ru": { + "stringUnit": { + "state": "translated", + "value": "Длина контекста" + } } } }, @@ -2118,6 +3468,12 @@ "state": "translated", "value": "Kontext zu lang" } + }, + "ru": { + "stringUnit": { + "state": "translated", + "value": "Контекст слишком длинный" + } } } }, @@ -2128,6 +3484,12 @@ "state": "translated", "value": "Weiter" } + }, + "ru": { + "stringUnit": { + "state": "translated", + "value": "Продолжать" + } } } }, @@ -2138,6 +3500,12 @@ "state": "translated", "value": "Dauerhaftes Zuhören" } + }, + "ru": { + "stringUnit": { + "state": "translated", + "value": "Непрерывное прослушивание" + } } } }, @@ -2148,6 +3516,12 @@ "state": "needs_review", "value": "Steuere, wie Ordner-Tools ausgeführt werden, wenn der Chat Zugriff auf einen Arbeitsordner hat." } + }, + "ru": { + "stringUnit": { + "state": "translated", + "value": "Контролируйте, как выполняются инструменты папок, когда чат имеет доступ к рабочей папке." + } } } }, @@ -2158,6 +3532,12 @@ "state": "translated", "value": "Steuert, wie die KI denkt und Tools aufruft. Niedrigere Temperatur verbessert die Zuverlässigkeit." } + }, + "ru": { + "stringUnit": { + "state": "translated", + "value": "Управляет тем, как ИИ рассуждает и вызывает инструменты. Более низкая температура повышает надежность." + } } } }, @@ -2168,6 +3548,12 @@ "state": "translated", "value": "Konversation" } + }, + "ru": { + "stringUnit": { + "state": "translated", + "value": "Беседа" + } } } }, @@ -2178,6 +3564,12 @@ "state": "translated", "value": "Gespräche bleiben auf deinem Mac. Wechsle Anbieter jederzeit – dein Verlauf kommt mit." } + }, + "ru": { + "stringUnit": { + "state": "translated", + "value": "Разговоры остаются на вашем Mac. Меняйте провайдера в любое время — ваша история всегда с вами." + } } } }, @@ -2188,6 +3580,12 @@ "state": "translated", "value": "Kopiert" } + }, + "ru": { + "stringUnit": { + "state": "translated", + "value": "Скопировано" + } } } }, @@ -2198,6 +3596,12 @@ "state": "translated", "value": "Kopieren" } + }, + "ru": { + "stringUnit": { + "state": "translated", + "value": "Копировать" + } } } }, @@ -2208,6 +3612,12 @@ "state": "translated", "value": "Code kopieren" } + }, + "ru": { + "stringUnit": { + "state": "translated", + "value": "Копировать код" + } } } }, @@ -2218,6 +3628,12 @@ "state": "translated", "value": "Bild kopieren" } + }, + "ru": { + "stringUnit": { + "state": "translated", + "value": "Копировать изображение" + } } } }, @@ -2228,6 +3644,12 @@ "state": "translated", "value": "URL kopieren" } + }, + "ru": { + "stringUnit": { + "state": "translated", + "value": "Копировать URL" + } } } }, @@ -2238,6 +3660,12 @@ "state": "translated", "value": "Code kopieren" } + }, + "ru": { + "stringUnit": { + "state": "translated", + "value": "Скопировать код" + } } } }, @@ -2248,6 +3676,12 @@ "state": "translated", "value": "Inhalt in die Zwischenablage kopieren" } + }, + "ru": { + "stringUnit": { + "state": "translated", + "value": "Скопировать содержимое в буфер обмена" + } } } }, @@ -2258,6 +3692,12 @@ "state": "translated", "value": "Relay-URL kopieren" } + }, + "ru": { + "stringUnit": { + "state": "translated", + "value": "Копировать URL-адрес ретранслятора" + } } } }, @@ -2268,6 +3708,12 @@ "state": "translated", "value": "Antwort kopieren" } + }, + "ru": { + "stringUnit": { + "state": "translated", + "value": "Копировать ответ" + } } } }, @@ -2278,6 +3724,12 @@ "state": "translated", "value": "Kopiere diesen Schlüssel jetzt. Er wird nicht erneut angezeigt." } + }, + "ru": { + "stringUnit": { + "state": "translated", + "value": "Скопируйте этот ключ сейчас. Оно больше не будет показано." + } } } }, @@ -2288,6 +3740,12 @@ "state": "translated", "value": "In die Zwischenablage kopieren" } + }, + "ru": { + "stringUnit": { + "state": "translated", + "value": "Скопировать в буфер обмена" + } } } }, @@ -2298,6 +3756,12 @@ "state": "translated", "value": "Kernmodell" } + }, + "ru": { + "stringUnit": { + "state": "translated", + "value": "Базовая модель" + } } } }, @@ -2308,6 +3772,12 @@ "state": "translated", "value": "Eckenradius" } + }, + "ru": { + "stringUnit": { + "state": "translated", + "value": "Угловой радиус" + } } } }, @@ -2318,6 +3788,12 @@ "state": "translated", "value": "Korrektur" } + }, + "ru": { + "stringUnit": { + "state": "translated", + "value": "Коррекция" + } } } }, @@ -2328,6 +3804,12 @@ "state": "translated", "value": "Countdown" } + }, + "ru": { + "stringUnit": { + "state": "translated", + "value": "Обратный отсчет" + } } } }, @@ -2338,6 +3820,12 @@ "state": "translated", "value": "Agent erstellen" } + }, + "ru": { + "stringUnit": { + "state": "translated", + "value": "Создать агента" + } } } }, @@ -2348,6 +3836,12 @@ "state": "translated", "value": "Plugin erstellen" } + }, + "ru": { + "stringUnit": { + "state": "translated", + "value": "Создать плагин" + } } } }, @@ -2358,6 +3852,12 @@ "state": "translated", "value": "Zeitplan erstellen" } + }, + "ru": { + "stringUnit": { + "state": "translated", + "value": "Создать расписание" + } } } }, @@ -2368,6 +3868,12 @@ "state": "translated", "value": "Skill erstellen" } + }, + "ru": { + "stringUnit": { + "state": "translated", + "value": "Создать навык" + } } } }, @@ -2378,6 +3884,12 @@ "state": "translated", "value": "Theme erstellen" } + }, + "ru": { + "stringUnit": { + "state": "translated", + "value": "Создать тему" + } } } }, @@ -2388,7 +3900,13 @@ "state": "translated", "value": "Watcher erstellen" } - } + }, + "ru": { + "stringUnit": { + "state": "translated", + "value": "Создать наблюдателя" + } + } } }, "Create Your First Agent": { @@ -2398,6 +3916,12 @@ "state": "translated", "value": "Erstelle deinen ersten Agenten" } + }, + "ru": { + "stringUnit": { + "state": "translated", + "value": "Создайте своего первого агента" + } } } }, @@ -2408,6 +3932,12 @@ "state": "translated", "value": "Erstelle dein erstes eigenes Theme" } + }, + "ru": { + "stringUnit": { + "state": "translated", + "value": "Создайте свою первую пользовательскую тему" + } } } }, @@ -2418,6 +3948,12 @@ "state": "translated", "value": "Erstelle deinen ersten Zeitplan" } + }, + "ru": { + "stringUnit": { + "state": "translated", + "value": "Создайте свое первое расписание" + } } } }, @@ -2428,6 +3964,12 @@ "state": "translated", "value": "Erstelle deinen ersten Skill" } + }, + "ru": { + "stringUnit": { + "state": "translated", + "value": "Создайте свой первый навык" + } } } }, @@ -2438,6 +3980,12 @@ "state": "translated", "value": "Erstelle deinen ersten Watcher" } + }, + "ru": { + "stringUnit": { + "state": "translated", + "value": "Создайте своего первого наблюдателя" + } } } }, @@ -2448,6 +3996,12 @@ "state": "translated", "value": "Identität erstellen" } + }, + "ru": { + "stringUnit": { + "state": "translated", + "value": "Создайте свою идентичность" + } } } }, @@ -2458,6 +4012,12 @@ "state": "translated", "value": "Erstelle deine Osaurus-Identität" } + }, + "ru": { + "stringUnit": { + "state": "translated", + "value": "Создайте свою идентичность в Osaurus" + } } } }, @@ -2468,6 +4028,12 @@ "state": "translated", "value": "Symlink zur eingebetteten CLI erstellen" } + }, + "ru": { + "stringUnit": { + "state": "translated", + "value": "Создайте символическую ссылку на встроенный CLI." + } } } }, @@ -2478,6 +4044,12 @@ "state": "translated", "value": "Erstelle einen Agenten, um Sandbox-Zugriff, Plugins und Secrets zu konfigurieren." } + }, + "ru": { + "stringUnit": { + "state": "translated", + "value": "Создайте агент для настройки доступа к песочнице, плагинов и секретов." + } } } }, @@ -2488,6 +4060,12 @@ "state": "translated", "value": "Erstelle individuelle Assistenten mit einzigartigen Verhaltensweisen" } + }, + "ru": { + "stringUnit": { + "state": "translated", + "value": "Создавайте персонализированных помощников с уникальным поведением." + } } } }, @@ -2498,6 +4076,12 @@ "state": "translated", "value": "Erstelle verschiedene Agenten für verschiedene Aufgaben. Sprich freihändig per Stimme. Passe das Erscheinungsbild an." } + }, + "ru": { + "stringUnit": { + "state": "translated", + "value": "Создавайте разных агентов для разных задач. Разговаривайте без помощи рук с помощью голоса. Настройте, как все будет выглядеть." + } } } }, @@ -2508,6 +4092,12 @@ "state": "translated", "value": "Kreativer Ideengeber" } + }, + "ru": { + "stringUnit": { + "state": "translated", + "value": "Творческий мозговой штурм" + } } } }, @@ -2518,6 +4108,12 @@ "state": "translated", "value": "Cron-Ausdruck" } + }, + "ru": { + "stringUnit": { + "state": "translated", + "value": "Выражение Крон" + } } } }, @@ -2528,6 +4124,12 @@ "state": "translated", "value": "Aktuell aktiv" } + }, + "ru": { + "stringUnit": { + "state": "translated", + "value": "В настоящее время активен" + } } } }, @@ -2538,6 +4140,12 @@ "state": "translated", "value": "Individuelle KI-Assistenten mit eigenen Prompts, Tools und Stilen." } + }, + "ru": { + "stringUnit": { + "state": "translated", + "value": "Пользовательские помощники искусственного интеллекта с уникальными подсказками, инструментами и стилями." + } } } }, @@ -2548,6 +4156,12 @@ "state": "translated", "value": "Eigene JSON-Daten bleiben bei Export und Import erhalten" } + }, + "ru": { + "stringUnit": { + "state": "translated", + "value": "Пользовательские данные JSON, сохраняемые при экспорте и импорте." + } } } }, @@ -2558,6 +4172,12 @@ "state": "translated", "value": "Eigener Anbieter" } + }, + "ru": { + "stringUnit": { + "state": "translated", + "value": "Пользовательский поставщик" + } } } }, @@ -2568,6 +4188,12 @@ "state": "translated", "value": "Eigenes Aktivierungswort (optional)" } + }, + "ru": { + "stringUnit": { + "state": "translated", + "value": "Пользовательская фраза пробуждения (необязательно)" + } } } }, @@ -2578,6 +4204,12 @@ "state": "translated", "value": "Eigenes Verzeichnis ausgewählt" } + }, + "ru": { + "stringUnit": { + "state": "translated", + "value": "Выбран собственный каталог" + } } } }, @@ -2588,6 +4220,12 @@ "state": "translated", "value": "Eigene Anweisungen für dieses Plugin..." } + }, + "ru": { + "stringUnit": { + "state": "translated", + "value": "Специальные инструкции для этого плагина..." + } } } }, @@ -2598,6 +4236,12 @@ "state": "translated", "value": "Anpassen" } + }, + "ru": { + "stringUnit": { + "state": "translated", + "value": "Настроить" + } } } }, @@ -2608,6 +4252,12 @@ "state": "translated", "value": "Anpassen, wie die KI dieses Plugin nutzt." } + }, + "ru": { + "stringUnit": { + "state": "translated", + "value": "Настройте, как ИИ использует этот плагин." + } } } }, @@ -2618,6 +4268,12 @@ "state": "translated", "value": "Passe das Aussehen deiner Chat-Oberfläche an" } + }, + "ru": { + "stringUnit": { + "state": "translated", + "value": "Настройте внешний вид интерфейса чата" + } } } }, @@ -2628,6 +4284,12 @@ "state": "translated", "value": "GEFAHRENBEREICH" } + }, + "ru": { + "stringUnit": { + "state": "translated", + "value": "ОПАСНАЯ ЗОНА" + } } } }, @@ -2638,6 +4300,12 @@ "state": "translated", "value": "DAUER" } + }, + "ru": { + "stringUnit": { + "state": "translated", + "value": "ПРОДОЛЖИТЕЛЬНОСТЬ" + } } } }, @@ -2648,6 +4316,12 @@ "state": "translated", "value": "Täglich" } + }, + "ru": { + "stringUnit": { + "state": "translated", + "value": "Ежедневно" + } } } }, @@ -2658,6 +4332,12 @@ "state": "translated", "value": "Tagesplaner" } + }, + "ru": { + "stringUnit": { + "state": "translated", + "value": "Ежедневник" + } } } }, @@ -2668,6 +4348,12 @@ "state": "translated", "value": "Dunkel" } + }, + "ru": { + "stringUnit": { + "state": "translated", + "value": "Темный" + } } } }, @@ -2678,6 +4364,12 @@ "state": "translated", "value": "Datenbank" } + }, + "ru": { + "stringUnit": { + "state": "translated", + "value": "База данных" + } } } }, @@ -2688,6 +4380,12 @@ "state": "translated", "value": "Datum" } + }, + "ru": { + "stringUnit": { + "state": "translated", + "value": "Дата" + } } } }, @@ -2698,6 +4396,12 @@ "state": "translated", "value": "Tag" } + }, + "ru": { + "stringUnit": { + "state": "translated", + "value": "День" + } } } }, @@ -2708,6 +4412,12 @@ "state": "translated", "value": "Tag des Monats" } + }, + "ru": { + "stringUnit": { + "state": "translated", + "value": "День месяца" + } } } }, @@ -2718,6 +4428,12 @@ "state": "translated", "value": "Wochentag" } + }, + "ru": { + "stringUnit": { + "state": "translated", + "value": "День недели" + } } } }, @@ -2728,6 +4444,12 @@ "state": "translated", "value": "Entscheidung" } + }, + "ru": { + "stringUnit": { + "state": "translated", + "value": "Решение" + } } } }, @@ -2738,6 +4460,12 @@ "state": "translated", "value": "Standard" } + }, + "ru": { + "stringUnit": { + "state": "translated", + "value": "По умолчанию" + } } } }, @@ -2748,6 +4476,12 @@ "state": "translated", "value": "Standard (aus globalen Einstellungen)" } + }, + "ru": { + "stringUnit": { + "state": "translated", + "value": "По умолчанию (из глобальных настроек)" + } } } }, @@ -2758,6 +4492,12 @@ "state": "translated", "value": "Standard-Agent" } + }, + "ru": { + "stringUnit": { + "state": "translated", + "value": "Агент по умолчанию" + } } } }, @@ -2768,6 +4508,12 @@ "state": "translated", "value": "Standard-Modell" } + }, + "ru": { + "stringUnit": { + "state": "translated", + "value": "Модель по умолчанию" + } } } }, @@ -2778,6 +4524,12 @@ "state": "translated", "value": "Standard. Bis zu 8 relevante Tools geladen." } + }, + "ru": { + "stringUnit": { + "state": "translated", + "value": "По умолчанию. Загружено до 8 соответствующих инструментов." + } } } }, @@ -2788,6 +4540,12 @@ "state": "translated", "value": "Spezialisierte Anweisungen für die KI definieren" } + }, + "ru": { + "stringUnit": { + "state": "translated", + "value": "Определить специализированное руководство для ИИ" + } } } }, @@ -2798,6 +4556,12 @@ "state": "translated", "value": "Löschen" } + }, + "ru": { + "stringUnit": { + "state": "translated", + "value": "Удалить" + } } } }, @@ -2808,6 +4572,12 @@ "state": "translated", "value": "Chat löschen" } + }, + "ru": { + "stringUnit": { + "state": "translated", + "value": "Удалить чат" + } } } }, @@ -2818,6 +4588,12 @@ "state": "translated", "value": "Modell löschen" } + }, + "ru": { + "stringUnit": { + "state": "translated", + "value": "Удалить модель" + } } } }, @@ -2828,6 +4604,12 @@ "state": "translated", "value": "Secret löschen" } + }, + "ru": { + "stringUnit": { + "state": "translated", + "value": "Удалить секрет" + } } } }, @@ -2838,6 +4620,12 @@ "state": "translated", "value": "Lösche Daten und Einstellungen. Bitte warten…" } + }, + "ru": { + "stringUnit": { + "state": "translated", + "value": "Удаление данных и предпочтений. Пожалуйста, подождите…" + } } } }, @@ -2848,6 +4636,12 @@ "state": "translated", "value": "Ablehnen" } + }, + "ru": { + "stringUnit": { + "state": "translated", + "value": "Отклонить" + } } } }, @@ -2858,6 +4652,12 @@ "state": "translated", "value": "Beschreibe was du brauchst." } + }, + "ru": { + "stringUnit": { + "state": "translated", + "value": "Опишите, что вам нужно." + } } } }, @@ -2868,6 +4668,12 @@ "state": "translated", "value": "Beschreibung" } + }, + "ru": { + "stringUnit": { + "state": "translated", + "value": "Описание" + } } } }, @@ -2878,6 +4684,12 @@ "state": "translated", "value": "Gestalte ein einzigartiges Aussehen für deine Chat-Oberfläche mit eigenen Farben, Schriften und Effekten" } + }, + "ru": { + "stringUnit": { + "state": "translated", + "value": "Создайте уникальный внешний вид интерфейса чата с помощью пользовательских цветов, шрифтов и эффектов." + } } } }, @@ -2888,6 +4700,12 @@ "state": "translated", "value": "Erkennungsempfindlichkeit wird im Audio-Tab konfiguriert" } + }, + "ru": { + "stringUnit": { + "state": "translated", + "value": "Чувствительность обнаружения настраивается на вкладке «Аудио»." + } } } }, @@ -2898,6 +4716,12 @@ "state": "translated", "value": "Entwickler-Tools und API-Referenz" } + }, + "ru": { + "stringUnit": { + "state": "translated", + "value": "Инструменты разработчика и справочник по API" + } } } }, @@ -2908,6 +4732,12 @@ "state": "translated", "value": "Vorflug-Suche deaktivieren. Nur explizite Tool-Aufrufe werden verwendet." } + }, + "ru": { + "stringUnit": { + "state": "translated", + "value": "Отключите предполетный поиск. Используются только явные вызовы инструментов." + } } } }, @@ -2918,6 +4748,12 @@ "state": "translated", "value": "Tools deaktivieren" } + }, + "ru": { + "stringUnit": { + "state": "translated", + "value": "Отключить инструменты" + } } } }, @@ -2928,6 +4764,12 @@ "state": "translated", "value": "Deaktiviert" } + }, + "ru": { + "stringUnit": { + "state": "translated", + "value": "Отключено" + } } } }, @@ -2938,6 +4780,12 @@ "state": "translated", "value": "Trennen" } + }, + "ru": { + "stringUnit": { + "state": "translated", + "value": "Отключить" + } } } }, @@ -2948,6 +4796,12 @@ "state": "translated", "value": "Discord-Community" } + }, + "ru": { + "stringUnit": { + "state": "translated", + "value": "Сообщество Discord" + } } } }, @@ -2958,6 +4812,12 @@ "state": "translated", "value": "Erkennungs-Timeout" } + }, + "ru": { + "stringUnit": { + "state": "translated", + "value": "Тайм-аут обнаружения" + } } } }, @@ -2968,6 +4828,12 @@ "state": "translated", "value": "Schließen" } + }, + "ru": { + "stringUnit": { + "state": "translated", + "value": "Скрыть" + } } } }, @@ -2978,6 +4844,12 @@ "state": "translated", "value": "Dokument" } + }, + "ru": { + "stringUnit": { + "state": "translated", + "value": "Документ" + } } } }, @@ -2988,6 +4860,12 @@ "state": "translated", "value": "Dokumentation" } + }, + "ru": { + "stringUnit": { + "state": "translated", + "value": "Документация" + } } } }, @@ -2998,6 +4876,12 @@ "state": "translated", "value": "Noch keinen Schlüssel?" } + }, + "ru": { + "stringUnit": { + "state": "translated", + "value": "У вас нет ключа?" + } } } }, @@ -3008,6 +4892,12 @@ "state": "translated", "value": "Fertig" } + }, + "ru": { + "stringUnit": { + "state": "translated", + "value": "Готово" + } } } }, @@ -3018,9 +4908,15 @@ "state": "translated", "value": "Fertig (Esc)" } - } - } - }, + }, + "ru": { + "stringUnit": { + "state": "translated", + "value": "Готово (Esc)" + } + } + } + }, "Download": { "localizations": { "de": { @@ -3028,6 +4924,12 @@ "state": "translated", "value": "Herunterladen" } + }, + "ru": { + "stringUnit": { + "state": "translated", + "value": "Скачать" + } } } }, @@ -3038,6 +4940,12 @@ "state": "translated", "value": "Download fehlgeschlagen" } + }, + "ru": { + "stringUnit": { + "state": "translated", + "value": "Загрузка не удалась" + } } } }, @@ -3048,6 +4956,12 @@ "state": "translated", "value": "Lokales Modell herunterladen" } + }, + "ru": { + "stringUnit": { + "state": "translated", + "value": "Загрузите локальную модель" + } } } }, @@ -3058,6 +4972,12 @@ "state": "translated", "value": "Später herunterladen" } + }, + "ru": { + "stringUnit": { + "state": "translated", + "value": "Скачать позже" + } } } }, @@ -3068,6 +4988,12 @@ "state": "translated", "value": "Heruntergeladen" } + }, + "ru": { + "stringUnit": { + "state": "translated", + "value": "Скачано" + } } } }, @@ -3078,6 +5004,12 @@ "state": "translated", "value": "Heruntergeladene Modelle werden hier angezeigt" } + }, + "ru": { + "stringUnit": { + "state": "translated", + "value": "Здесь появятся загруженные модели." + } } } }, @@ -3088,6 +5020,12 @@ "state": "translated", "value": "Wird heruntergeladen" } + }, + "ru": { + "stringUnit": { + "state": "translated", + "value": "Загрузка" + } } } }, @@ -3098,6 +5036,12 @@ "state": "translated", "value": "Downloads" } + }, + "ru": { + "stringUnit": { + "state": "translated", + "value": "Загрузки" + } } } }, @@ -3108,6 +5052,12 @@ "state": "translated", "value": "Downloads-Organizer" } + }, + "ru": { + "stringUnit": { + "state": "translated", + "value": "Организатор загрузок" + } } } }, @@ -3118,6 +5068,12 @@ "state": "translated", "value": "Texte verfassen und senden" } + }, + "ru": { + "stringUnit": { + "state": "translated", + "value": "Составляйте и отправляйте тексты" + } } } }, @@ -3128,6 +5084,12 @@ "state": "translated", "value": "Dropbox-Automatisierung" } + }, + "ru": { + "stringUnit": { + "state": "translated", + "value": "Автоматизация Dropbox" + } } } }, @@ -3138,6 +5100,12 @@ "state": "translated", "value": "Duplizieren" } + }, + "ru": { + "stringUnit": { + "state": "translated", + "value": "Дублировать" + } } } }, @@ -3148,6 +5116,12 @@ "state": "translated", "value": "EN" } + }, + "ru": { + "stringUnit": { + "state": "translated", + "value": "RU" + } } } }, @@ -3158,6 +5132,12 @@ "state": "translated", "value": "Rand-Licht" } + }, + "ru": { + "stringUnit": { + "state": "translated", + "value": "Краевой свет" + } } } }, @@ -3168,6 +5148,12 @@ "state": "translated", "value": "Bearbeiten" } + }, + "ru": { + "stringUnit": { + "state": "translated", + "value": "Редактировать" + } } } }, @@ -3178,6 +5164,12 @@ "state": "translated", "value": "Plugin bearbeiten" } + }, + "ru": { + "stringUnit": { + "state": "translated", + "value": "Редактировать плагин" + } } } }, @@ -3188,6 +5180,12 @@ "state": "translated", "value": "Skill bearbeiten" } + }, + "ru": { + "stringUnit": { + "state": "translated", + "value": "Изменить навык" + } } } }, @@ -3198,6 +5196,12 @@ "state": "translated", "value": "Benutzerprofil bearbeiten" } + }, + "ru": { + "stringUnit": { + "state": "translated", + "value": "Редактировать профиль пользователя" + } } } }, @@ -3208,6 +5212,12 @@ "state": "translated", "value": "Watcher bearbeiten" } + }, + "ru": { + "stringUnit": { + "state": "translated", + "value": "Редактировать наблюдателя" + } } } }, @@ -3218,6 +5228,12 @@ "state": "translated", "value": "Bearbeitung" } + }, + "ru": { + "stringUnit": { + "state": "translated", + "value": "Редактирование" + } } } }, @@ -3228,6 +5244,12 @@ "state": "translated", "value": "Aktivieren" } + }, + "ru": { + "stringUnit": { + "state": "translated", + "value": "Давать возможность" + } } } }, @@ -3238,6 +5260,12 @@ "state": "translated", "value": "Sandbox für autonome Code-Ausführung aktivieren" } + }, + "ru": { + "stringUnit": { + "state": "translated", + "value": "Включить песочницу для автономного выполнения кода" + } } } }, @@ -3248,6 +5276,12 @@ "state": "translated", "value": "Tunnel aktivieren" } + }, + "ru": { + "stringUnit": { + "state": "translated", + "value": "Включить туннель" + } } } }, @@ -3258,6 +5292,12 @@ "state": "translated", "value": "Zwischenablage-Überwachung aktivieren" } + }, + "ru": { + "stringUnit": { + "state": "translated", + "value": "Включить мониторинг буфера обмена" + } } } }, @@ -3268,6 +5308,12 @@ "state": "translated", "value": "Aktiviere Relay im Sandbox-Tab für eine öffentliche URL." } + }, + "ru": { + "stringUnit": { + "state": "translated", + "value": "Включите ретрансляцию на вкладке «Песочница», чтобы получить общедоступный URL-адрес." + } } } }, @@ -3278,6 +5324,12 @@ "state": "translated", "value": "Aktiviert" } + }, + "ru": { + "stringUnit": { + "state": "translated", + "value": "Включено" + } } } }, @@ -3288,6 +5340,12 @@ "state": "translated", "value": "Nur-Englisch-Modell mit höchster Trefferquote" } + }, + "ru": { + "stringUnit": { + "state": "translated", + "value": "Модель только на английском языке с самой высокой запоминаемостью" + } } } }, @@ -3298,6 +5356,12 @@ "state": "translated", "value": "Repository-URL eingeben" } + }, + "ru": { + "stringUnit": { + "state": "translated", + "value": "Введите URL-адрес репозитория" + } } } }, @@ -3308,6 +5372,12 @@ "state": "translated", "value": "Gib eine explizite Tatsache ein, die immer in deinem Profil sein soll" } + }, + "ru": { + "stringUnit": { + "state": "translated", + "value": "Введите явный факт, который всегда должен быть в вашем профиле." + } } } }, @@ -3318,6 +5388,12 @@ "state": "translated", "value": "Anweisungen für alle Chats eingeben..." } + }, + "ru": { + "stringUnit": { + "state": "translated", + "value": "Введите инструкции для всех чатов..." + } } } }, @@ -3328,6 +5404,12 @@ "state": "translated", "value": "Anweisungen für diesen Agenten eingeben..." } + }, + "ru": { + "stringUnit": { + "state": "translated", + "value": "Введите инструкции для этого агента..." + } } } }, @@ -3338,6 +5420,12 @@ "state": "translated", "value": "Gib das Server-Token für diesen Agenten ein, oder lass das Feld leer, wenn keines benötigt wird." } + }, + "ru": { + "stringUnit": { + "state": "translated", + "value": "Введите токен сервера для этого агента или оставьте пустым, если он не требуется." + } } } }, @@ -3348,6 +5436,12 @@ "state": "translated", "value": "Fehler" } + }, + "ru": { + "stringUnit": { + "state": "translated", + "value": "Ошибка" + } } } }, @@ -3358,6 +5452,12 @@ "state": "translated", "value": "Fehler: %@" } + }, + "ru": { + "stringUnit": { + "state": "translated", + "value": "Ошибка: %@" + } } } }, @@ -3368,6 +5468,12 @@ "state": "translated", "value": "Fehler" } + }, + "ru": { + "stringUnit": { + "state": "translated", + "value": "Ошибки" + } } } }, @@ -3378,6 +5484,12 @@ "state": "translated", "value": "Geschätzte Größe" } + }, + "ru": { + "stringUnit": { + "state": "translated", + "value": "Предполагаемый размер" + } } } }, @@ -3388,6 +5500,12 @@ "state": "translated", "value": "Jedes Plugin aufklappen, um die erforderlichen Berechtigungen zu erteilen" } + }, + "ru": { + "stringUnit": { + "state": "translated", + "value": "Разверните каждый плагин, чтобы предоставить необходимые разрешения." + } } } }, @@ -3398,6 +5516,12 @@ "state": "translated", "value": "Ablauf" } + }, + "ru": { + "stringUnit": { + "state": "translated", + "value": "Срок действия" + } } } }, @@ -3408,6 +5532,12 @@ "state": "translated", "value": "Erkläre " } + }, + "ru": { + "stringUnit": { + "state": "translated", + "value": "Объяснять" + } } } }, @@ -3418,6 +5548,12 @@ "state": "translated", "value": "Konzept erklären" } + }, + "ru": { + "stringUnit": { + "state": "translated", + "value": "Объяснить концепцию" + } } } }, @@ -3428,6 +5564,12 @@ "state": "translated", "value": "Exportieren" } + }, + "ru": { + "stringUnit": { + "state": "translated", + "value": "Экспорт" + } } } }, @@ -3438,6 +5580,12 @@ "state": "translated", "value": "Agent ins Internet freigeben?" } + }, + "ru": { + "stringUnit": { + "state": "translated", + "value": "Выставить агента в Интернет?" + } } } }, @@ -3448,6 +5596,12 @@ "state": "translated", "value": "Agenten über Relay-Tunnel im Internet freigeben." } + }, + "ru": { + "stringUnit": { + "state": "translated", + "value": "Предоставляйте агентам доступ к общедоступному Интернету через ретрансляционные туннели." + } } } }, @@ -3458,6 +5612,12 @@ "state": "translated", "value": "Im Netzwerk freigeben" } + }, + "ru": { + "stringUnit": { + "state": "translated", + "value": "Выставить в сеть" + } } } }, @@ -3468,6 +5628,12 @@ "state": "translated", "value": "Fakt" } + }, + "ru": { + "stringUnit": { + "state": "translated", + "value": "Факт" + } } } }, @@ -3478,6 +5644,12 @@ "state": "translated", "value": "Faktenprüfung und ausgewogene Analyse" } + }, + "ru": { + "stringUnit": { + "state": "translated", + "value": "Проверка фактов и сбалансированный анализ" + } } } }, @@ -3488,6 +5660,12 @@ "state": "translated", "value": "Werksreset…" } + }, + "ru": { + "stringUnit": { + "state": "translated", + "value": "Сброс к заводским настройкам…" + } } } }, @@ -3498,6 +5676,12 @@ "state": "translated", "value": "Fehlgeschlagen" } + }, + "ru": { + "stringUnit": { + "state": "translated", + "value": "Неуспешный" + } } } }, @@ -3508,6 +5692,12 @@ "state": "translated", "value": "Fehlgeschlagen – Tippen zum Wiederholen" } + }, + "ru": { + "stringUnit": { + "state": "translated", + "value": "Не удалось – нажмите, чтобы повторить попытку." + } } } }, @@ -3518,6 +5708,12 @@ "state": "translated", "value": "Themes konnten nicht geladen werden" } + }, + "ru": { + "stringUnit": { + "state": "translated", + "value": "Не удалось загрузить темы" + } } } }, @@ -3528,6 +5724,12 @@ "state": "translated", "value": "Agent konnte nicht gelöscht werden" } + }, + "ru": { + "stringUnit": { + "state": "translated", + "value": "Не удалось удалить агента." + } } } }, @@ -3538,6 +5740,12 @@ "state": "translated", "value": "Danksagungen konnten nicht geladen werden" } + }, + "ru": { + "stringUnit": { + "state": "translated", + "value": "Не удалось загрузить подтверждения." + } } } }, @@ -3548,6 +5756,12 @@ "state": "translated", "value": "Bild konnte nicht geladen werden" } + }, + "ru": { + "stringUnit": { + "state": "translated", + "value": "Не удалось загрузить изображение" + } } } }, @@ -3558,6 +5772,12 @@ "state": "translated", "value": "Plugin konnte nicht geladen werden" } + }, + "ru": { + "stringUnit": { + "state": "translated", + "value": "Не удалось загрузить плагин" + } } } }, @@ -3568,6 +5788,12 @@ "state": "translated", "value": "Schnell" } + }, + "ru": { + "stringUnit": { + "state": "translated", + "value": "Быстрый" + } } } }, @@ -3578,6 +5804,12 @@ "state": "translated", "value": "Repository-Informationen werden abgerufen" } + }, + "ru": { + "stringUnit": { + "state": "translated", + "value": "Получение информации о репозитории" + } } } }, @@ -3588,6 +5820,12 @@ "state": "translated", "value": "Lade Skills…" } + }, + "ru": { + "stringUnit": { + "state": "translated", + "value": "Получение навыков..." + } } } }, @@ -3598,6 +5836,12 @@ "state": "translated", "value": "Datei-Watcher, die automatisch Aktionen auslösen, wenn sich Dateien ändern." } + }, + "ru": { + "stringUnit": { + "state": "translated", + "value": "Наблюдатели файлов, которые автоматически запускают действия при изменении файлов." + } } } }, @@ -3608,6 +5852,12 @@ "state": "translated", "value": "Dateien im Plugin-Verzeichnis bereitgestellt" } + }, + "ru": { + "stringUnit": { + "state": "translated", + "value": "Файлы, помещенные в каталог плагина" + } } } }, @@ -3618,6 +5868,12 @@ "state": "translated", "value": "Füllen" } + }, + "ru": { + "stringUnit": { + "state": "translated", + "value": "Наполнять" + } } } }, @@ -3628,6 +5884,12 @@ "state": "translated", "value": "Filter" } + }, + "ru": { + "stringUnit": { + "state": "translated", + "value": "Фильтр" + } } } }, @@ -3638,6 +5900,12 @@ "state": "translated", "value": "Filter" } + }, + "ru": { + "stringUnit": { + "state": "translated", + "value": "Фильтры" + } } } }, @@ -3648,7 +5916,13 @@ "state": "translated", "value": "Orte in der Nähe finden" } - } + }, + "ru": { + "stringUnit": { + "state": "translated", + "value": "Найти места поблизости" + } + } } }, "Finish setup": { @@ -3658,6 +5932,12 @@ "state": "translated", "value": "Einrichtung abschließen" } + }, + "ru": { + "stringUnit": { + "state": "translated", + "value": "Завершить настройку" + } } } }, @@ -3668,6 +5948,12 @@ "state": "translated", "value": "Einpassen" } + }, + "ru": { + "stringUnit": { + "state": "translated", + "value": "Соответствовать" + } } } }, @@ -3678,6 +5964,12 @@ "state": "translated", "value": "Beheben" } + }, + "ru": { + "stringUnit": { + "state": "translated", + "value": "Исправить" + } } } }, @@ -3688,6 +5980,12 @@ "state": "translated", "value": "Flexibel (mehrere Modelle)" } + }, + "ru": { + "stringUnit": { + "state": "translated", + "value": "Гибкий (несколько моделей)" + } } } }, @@ -3698,6 +5996,12 @@ "state": "translated", "value": "Ordner" } + }, + "ru": { + "stringUnit": { + "state": "translated", + "value": "Папка" + } } } }, @@ -3708,6 +6012,12 @@ "state": "translated", "value": "Ordner ist gesperrt während Task läuft" } + }, + "ru": { + "stringUnit": { + "state": "translated", + "value": "Папка заблокирована во время выполнения задачи" + } } } }, @@ -3718,6 +6028,12 @@ "state": "translated", "value": "Format: Minute Stunde Tag-des-Monats Monat Wochentag" } + }, + "ru": { + "stringUnit": { + "state": "translated", + "value": "Формат: минуты час день месяца месяц день недели" + } } } }, @@ -3728,6 +6044,12 @@ "state": "translated", "value": "Aus Datei" } + }, + "ru": { + "stringUnit": { + "state": "translated", + "value": "Из файла" + } } } }, @@ -3738,6 +6060,12 @@ "state": "translated", "value": "Von GitHub" } + }, + "ru": { + "stringUnit": { + "state": "translated", + "value": "С GitHub" + } } } }, @@ -3748,6 +6076,12 @@ "state": "translated", "value": "Von: %@" } + }, + "ru": { + "stringUnit": { + "state": "translated", + "value": "От: %@" + } } } }, @@ -3758,6 +6092,12 @@ "state": "translated", "value": "Vollständiger Festplattenzugriff" } + }, + "ru": { + "stringUnit": { + "state": "translated", + "value": "Полный доступ к диску" + } } } }, @@ -3768,6 +6108,12 @@ "state": "translated", "value": "Vollständige Isolation" } + }, + "ru": { + "stringUnit": { + "state": "translated", + "value": "Полная изоляция" + } } } }, @@ -3778,6 +6124,12 @@ "state": "translated", "value": "Vollständige Lizenztexte sind in den verlinkten Repositories verfügbar." } + }, + "ru": { + "stringUnit": { + "state": "translated", + "value": "Полные тексты лицензий доступны в связанных репозиториях." + } } } }, @@ -3788,6 +6140,12 @@ "state": "translated", "value": "Allgemein" } + }, + "ru": { + "stringUnit": { + "state": "translated", + "value": "Общий" + } } } }, @@ -3798,6 +6156,12 @@ "state": "translated", "value": "Generieren" } + }, + "ru": { + "stringUnit": { + "state": "translated", + "value": "Генерировать" + } } } }, @@ -3808,6 +6172,12 @@ "state": "translated", "value": "Zugangsschlüssel generieren" } + }, + "ru": { + "stringUnit": { + "state": "translated", + "value": "Создать ключ доступа" + } } } }, @@ -3818,6 +6188,12 @@ "state": "translated", "value": "Identität erstellen" } + }, + "ru": { + "stringUnit": { + "state": "translated", + "value": "Создать идентичность" + } } } }, @@ -3828,6 +6204,12 @@ "state": "translated", "value": "Schlüssel generieren" } + }, + "ru": { + "stringUnit": { + "state": "translated", + "value": "Создать ключ" + } } } }, @@ -3838,6 +6220,12 @@ "state": "translated", "value": "Erstelle eine kryptografische Identität für dich und\ndeine Agenten. Sicher im iCloud-Schlüsselbund gespeichert." } + }, + "ru": { + "stringUnit": { + "state": "translated", + "value": "Создайте криптографическую идентификацию для себя и своих\nагенты. Надежно хранится в связке ключей iCloud." + } } } }, @@ -3848,6 +6236,12 @@ "state": "translated", "value": "Erstelle eine kryptografische Identität für dich und deine\\nAgenten. Sicher im iCloud-Schlüsselbund gespeichert." } + }, + "ru": { + "stringUnit": { + "state": "translated", + "value": "Создайте криптографическую идентификацию для себя и своих агентов. Надежно хранится в связке ключей iCloud." + } } } }, @@ -3858,6 +6252,12 @@ "state": "translated", "value": "Erstelle eine kryptografische Identität, sicher gespeichert\nim iCloud-Schlüsselbund und Secure Enclave." } + }, + "ru": { + "stringUnit": { + "state": "translated", + "value": "Создайте криптографическую идентификацию, хранящуюся в безопасном месте.\nв вашей связке ключей iCloud и Secure Enclave." + } } } }, @@ -3868,6 +6268,12 @@ "state": "translated", "value": "Erstelle eine kryptografische Identität, sicher gespeichert\\nim iCloud-Schlüsselbund und in der Secure Enclave." } + }, + "ru": { + "stringUnit": { + "state": "translated", + "value": "Создайте криптографический идентификатор, который будет надежно храниться\\в вашей связке ключей iCloud и Secure Enclave." + } } } }, @@ -3878,6 +6284,12 @@ "state": "translated", "value": "Ideen generieren und Möglichkeiten erkunden" } + }, + "ru": { + "stringUnit": { + "state": "translated", + "value": "Генерируйте идеи и изучайте возможности" + } } } }, @@ -3888,6 +6300,12 @@ "state": "translated", "value": "Erkenntnisse nach Zeitplan generieren" } + }, + "ru": { + "stringUnit": { + "state": "translated", + "value": "Генерируйте аналитику по расписанию" + } } } }, @@ -3898,6 +6316,12 @@ "state": "translated", "value": "Identität wird erstellt…" } + }, + "ru": { + "stringUnit": { + "state": "translated", + "value": "Генерация личности..." + } } } }, @@ -3908,6 +6332,12 @@ "state": "translated", "value": "Generierung" } + }, + "ru": { + "stringUnit": { + "state": "translated", + "value": "Поколение" + } } } }, @@ -3918,6 +6348,12 @@ "state": "translated", "value": "Schlüssel holen" } + }, + "ru": { + "stringUnit": { + "state": "translated", + "value": "Получить ключ" + } } } }, @@ -3928,6 +6364,12 @@ "state": "translated", "value": "Los geht's" } + }, + "ru": { + "stringUnit": { + "state": "translated", + "value": "Начать" + } } } }, @@ -3938,6 +6380,12 @@ "state": "translated", "value": "Erhalte jeden Morgen eine tägliche Zusammenfassung" } + }, + "ru": { + "stringUnit": { + "state": "translated", + "value": "Получайте ежедневную сводку каждое утро" + } } } }, @@ -3948,6 +6396,12 @@ "state": "translated", "value": "Wird mit der Zeit schlauer" } + }, + "ru": { + "stringUnit": { + "state": "translated", + "value": "Становится умнее со временем" + } } } }, @@ -3958,6 +6412,12 @@ "state": "translated", "value": "Globaler Hotkey" } + }, + "ru": { + "stringUnit": { + "state": "translated", + "value": "Глобальная горячая клавиша" + } } } }, @@ -3968,6 +6428,12 @@ "state": "translated", "value": "Guten Tag" } + }, + "ru": { + "stringUnit": { + "state": "translated", + "value": "Добрый день" + } } } }, @@ -3978,6 +6444,12 @@ "state": "translated", "value": "Guten Abend" } + }, + "ru": { + "stringUnit": { + "state": "translated", + "value": "Добрый вечер" + } } } }, @@ -3988,6 +6460,12 @@ "state": "translated", "value": "Guten Morgen" } + }, + "ru": { + "stringUnit": { + "state": "translated", + "value": "Доброе утро" + } } } }, @@ -3998,6 +6476,12 @@ "state": "translated", "value": "Google Gemini" } + }, + "ru": { + "stringUnit": { + "state": "translated", + "value": "Гугл Близнецы" + } } } }, @@ -4008,6 +6492,12 @@ "state": "translated", "value": "Farbverlauf" } + }, + "ru": { + "stringUnit": { + "state": "translated", + "value": "Градиент" + } } } }, @@ -4018,6 +6508,12 @@ "state": "translated", "value": "Erteilen" } + }, + "ru": { + "stringUnit": { + "state": "translated", + "value": "Грант" + } } } }, @@ -4028,6 +6524,12 @@ "state": "translated", "value": "Gewähre die folgenden Berechtigungen, um alle Funktionen zu nutzen:" } + }, + "ru": { + "stringUnit": { + "state": "translated", + "value": "Предоставьте следующие разрешения на использование всех функций:" + } } } }, @@ -4038,6 +6540,12 @@ "state": "translated", "value": "Erteilt" } + }, + "ru": { + "stringUnit": { + "state": "translated", + "value": "Предоставленный" + } } } }, @@ -4048,6 +6556,12 @@ "state": "translated", "value": "HTTP-API" } + }, + "ru": { + "stringUnit": { + "state": "translated", + "value": "HTTP API" + } } } }, @@ -4058,6 +6572,12 @@ "state": "translated", "value": "Hallo" } + }, + "ru": { + "stringUnit": { + "state": "translated", + "value": "Привет" + } } } }, @@ -4068,6 +6588,12 @@ "state": "translated", "value": "Hilf mir zu organisieren: " } + }, + "ru": { + "stringUnit": { + "state": "translated", + "value": "Помогите мне организовать" + } } } }, @@ -4078,6 +6604,12 @@ "state": "translated", "value": "Beim Schreiben helfen" } + }, + "ru": { + "stringUnit": { + "state": "translated", + "value": "Помогите мне написать" + } } } }, @@ -4088,6 +6620,12 @@ "state": "translated", "value": "Hilf mir beim Schreiben von " } + }, + "ru": { + "stringUnit": { + "state": "translated", + "value": "Помогите мне написать" + } } } }, @@ -4098,6 +6636,12 @@ "state": "translated", "value": "Dock-Symbol ausblenden" } + }, + "ru": { + "stringUnit": { + "state": "translated", + "value": "Скрыть значок в доке" + } } } }, @@ -4108,6 +6652,12 @@ "state": "translated", "value": "Hoch" } + }, + "ru": { + "stringUnit": { + "state": "translated", + "value": "Высокий" + } } } }, @@ -4118,6 +6668,12 @@ "state": "translated", "value": "Verlauf" } + }, + "ru": { + "stringUnit": { + "state": "translated", + "value": "История" + } } } }, @@ -4128,6 +6684,12 @@ "state": "translated", "value": "Stündlich" } + }, + "ru": { + "stringUnit": { + "state": "translated", + "value": "Ежечасно" + } } } }, @@ -4138,6 +6700,12 @@ "state": "translated", "value": "Wie kann ich dir heute helfen?" } + }, + "ru": { + "stringUnit": { + "state": "translated", + "value": "Чем я могу помочь вам сегодня?" + } } } }, @@ -4148,6 +6716,12 @@ "state": "translated", "value": "Wie möchtest du Osaurus betreiben?" } + }, + "ru": { + "stringUnit": { + "state": "translated", + "value": "Как вы хотите использовать Osaurus?" + } } } }, @@ -4158,6 +6732,12 @@ "state": "translated", "value": "Wie transkribierter Text an das aktive Feld gesendet wird" } + }, + "ru": { + "stringUnit": { + "state": "translated", + "value": "Как расшифрованный текст отправляется в активное поле" + } } } }, @@ -4168,6 +6748,12 @@ "state": "translated", "value": "Ich habe ihn gespeichert" } + }, + "ru": { + "stringUnit": { + "state": "translated", + "value": "Я сохранил это" + } } } }, @@ -4178,6 +6764,12 @@ "state": "translated", "value": "ANWEISUNGEN" } + }, + "ru": { + "stringUnit": { + "state": "translated", + "value": "ИНСТРУКЦИИ" + } } } }, @@ -4188,6 +6780,12 @@ "state": "translated", "value": "Identität" } + }, + "ru": { + "stringUnit": { + "state": "translated", + "value": "Идентичность" + } } } }, @@ -4198,6 +6796,12 @@ "state": "translated", "value": "Identität →" } + }, + "ru": { + "stringUnit": { + "state": "translated", + "value": "Идентичность →" + } } } }, @@ -4208,6 +6812,12 @@ "state": "translated", "value": "Wenn installiert in ~/.local/bin, stelle sicher, dass es in deinem PATH ist." } + }, + "ru": { + "stringUnit": { + "state": "translated", + "value": "Если он установлен в ~/.local/bin, убедитесь, что он находится в вашем PATH." + } } } }, @@ -4218,6 +6828,12 @@ "state": "translated", "value": "Wenn der Tag in einem Monat nicht existiert, wird am letzten Tag ausgeführt." } + }, + "ru": { + "stringUnit": { + "state": "translated", + "value": "Если день не существует в месяце, он будет выполняться в последний день." + } } } }, @@ -4228,6 +6844,12 @@ "state": "translated", "value": "Bild" } + }, + "ru": { + "stringUnit": { + "state": "translated", + "value": "Изображение" + } } } }, @@ -4238,6 +6860,12 @@ "state": "translated", "value": "Importieren" } + }, + "ru": { + "stringUnit": { + "state": "translated", + "value": "Импорт" + } } } }, @@ -4248,6 +6876,12 @@ "state": "translated", "value": "Importfehler" } + }, + "ru": { + "stringUnit": { + "state": "translated", + "value": "Ошибка импорта" + } } } }, @@ -4258,6 +6892,12 @@ "state": "translated", "value": "Import fehlgeschlagen" } + }, + "ru": { + "stringUnit": { + "state": "translated", + "value": "Импорт не выполнен" + } } } }, @@ -4268,6 +6908,12 @@ "state": "translated", "value": "Von GitHub importieren" } + }, + "ru": { + "stringUnit": { + "state": "translated", + "value": "Импорт из GitHub" + } } } }, @@ -4278,9 +6924,15 @@ "state": "translated", "value": "Importiere Skills aus einem beliebigen GitHub-Repository" } - } - } - }, + }, + "ru": { + "stringUnit": { + "state": "translated", + "value": "Импортируйте навыки из любого репозитория GitHub." + } + } + } + }, "Importing Skills": { "localizations": { "de": { @@ -4288,6 +6940,12 @@ "state": "translated", "value": "Importiere Skills" } + }, + "ru": { + "stringUnit": { + "state": "translated", + "value": "Импорт навыков" + } } } }, @@ -4298,6 +6956,12 @@ "state": "translated", "value": "Importiere Skill %lld von %lld" } + }, + "ru": { + "stringUnit": { + "state": "translated", + "value": "Импорт навыка %lld из %lld" + } } } }, @@ -4308,6 +6972,12 @@ "state": "translated", "value": "Importiere…" } + }, + "ru": { + "stringUnit": { + "state": "translated", + "value": "Импорт..." + } } } }, @@ -4318,6 +6988,12 @@ "state": "translated", "value": "Unbestimmter Fortschritt" } + }, + "ru": { + "stringUnit": { + "state": "translated", + "value": "Неопределенный прогресс" + } } } }, @@ -4328,6 +7004,12 @@ "state": "translated", "value": "Inferenz-Details" } + }, + "ru": { + "stringUnit": { + "state": "translated", + "value": "Детали вывода" + } } } }, @@ -4338,6 +7020,12 @@ "state": "translated", "value": "Eingabegerät" } + }, + "ru": { + "stringUnit": { + "state": "translated", + "value": "Устройство ввода" + } } } }, @@ -4348,6 +7036,12 @@ "state": "translated", "value": "Eingabequelle" } + }, + "ru": { + "stringUnit": { + "state": "translated", + "value": "Источник входного сигнала" + } } } }, @@ -4358,6 +7052,12 @@ "state": "translated", "value": "Einblicke" } + }, + "ru": { + "stringUnit": { + "state": "translated", + "value": "Информация" + } } } }, @@ -4368,6 +7068,12 @@ "state": "translated", "value": "Installieren" } + }, + "ru": { + "stringUnit": { + "state": "translated", + "value": "Установить" + } } } }, @@ -4378,6 +7084,12 @@ "state": "translated", "value": "Integrierte Themes installieren" } + }, + "ru": { + "stringUnit": { + "state": "translated", + "value": "Установите встроенные темы" + } } } }, @@ -4388,6 +7100,12 @@ "state": "translated", "value": "CLI installieren" } + }, + "ru": { + "stringUnit": { + "state": "translated", + "value": "Установить интерфейс командной строки" + } } } }, @@ -4398,6 +7116,12 @@ "state": "translated", "value": "Sandbox-Plugins installieren und ausführen" } + }, + "ru": { + "stringUnit": { + "state": "translated", + "value": "Установите и запустите плагины песочницы" + } } } }, @@ -4408,6 +7132,12 @@ "state": "translated", "value": "Installiere die `osaurus` CLI in deinen PATH für Terminal-Zugriff." } + }, + "ru": { + "stringUnit": { + "state": "translated", + "value": "Установите CLI `osaurus` в свой PATH для доступа к терминалу." + } } } }, @@ -4418,6 +7148,12 @@ "state": "translated", "value": "Tools installieren, die in der VM laufen" } + }, + "ru": { + "stringUnit": { + "state": "translated", + "value": "Установите инструменты, которые работают внутри виртуальной машины." + } } } }, @@ -4428,6 +7164,12 @@ "state": "translated", "value": "Anweisungen" } + }, + "ru": { + "stringUnit": { + "state": "translated", + "value": "Инструкции" + } } } }, @@ -4438,6 +7180,12 @@ "state": "translated", "value": "Anweisungen, die das Verhalten dieses Agenten definieren. Leer lassen für globale Einstellungen." } + }, + "ru": { + "stringUnit": { + "state": "translated", + "value": "Инструкции, определяющие поведение этого агента. Оставьте пустым, чтобы использовать глобальные настройки." + } } } }, @@ -4448,6 +7196,12 @@ "state": "translated", "value": "Unterbrechen und sofort senden" } + }, + "ru": { + "stringUnit": { + "state": "translated", + "value": "Прервать и отправить немедленно" + } } } }, @@ -4458,6 +7212,12 @@ "state": "translated", "value": "Intervall" } + }, + "ru": { + "stringUnit": { + "state": "translated", + "value": "Интервал" + } } } }, @@ -4468,6 +7228,12 @@ "state": "translated", "value": "Ungültiges JSON" } + }, + "ru": { + "stringUnit": { + "state": "translated", + "value": "Неверный JSON" + } } } }, @@ -4478,6 +7244,12 @@ "state": "translated", "value": "Isolierte Ausführung" } + }, + "ru": { + "stringUnit": { + "state": "translated", + "value": "Изолированное выполнение" + } } } }, @@ -4488,6 +7260,12 @@ "state": "translated", "value": "Aufgaben" } + }, + "ru": { + "stringUnit": { + "state": "translated", + "value": "Проблемы" + } } } }, @@ -4498,6 +7276,12 @@ "state": "translated", "value": "JSON-Vorschau" } + }, + "ru": { + "stringUnit": { + "state": "translated", + "value": "Предварительный просмотр JSON" + } } } }, @@ -4508,6 +7292,12 @@ "state": "translated", "value": "Loslegen" } + }, + "ru": { + "stringUnit": { + "state": "translated", + "value": "Перейти в" + } } } }, @@ -4518,6 +7308,12 @@ "state": "translated", "value": "Hält Modelle geladen bis zum manuellen Entladen. Erfordert 32 GB+ RAM." } + }, + "ru": { + "stringUnit": { + "state": "translated", + "value": "Сохраняет модели загруженными до тех пор, пока они не будут выгружены вручную. Требуется 32 ГБ+ ОЗУ." + } } } }, @@ -4528,6 +7324,12 @@ "state": "translated", "value": "Schlüssel" } + }, + "ru": { + "stringUnit": { + "state": "translated", + "value": "Ключ" + } } } }, @@ -4538,6 +7340,12 @@ "state": "translated", "value": "Tastenkürzel" } + }, + "ru": { + "stringUnit": { + "state": "translated", + "value": "Сочетания клавиш" + } } } }, @@ -4548,6 +7356,12 @@ "state": "translated", "value": "HÖRT ZU" } + }, + "ru": { + "stringUnit": { + "state": "translated", + "value": "СЛУШАНИЕ" + } } } }, @@ -4558,6 +7372,12 @@ "state": "translated", "value": "Bezeichnung" } + }, + "ru": { + "stringUnit": { + "state": "translated", + "value": "Этикетка" + } } } }, @@ -4568,6 +7388,12 @@ "state": "translated", "value": "Sprachmodelle werden hier angezeigt" } + }, + "ru": { + "stringUnit": { + "state": "translated", + "value": "Здесь появятся языковые модели" + } } } }, @@ -4578,6 +7404,12 @@ "state": "translated", "value": "Groß" } + }, + "ru": { + "stringUnit": { + "state": "translated", + "value": "Большой" + } } } }, @@ -4588,6 +7420,12 @@ "state": "translated", "value": "Groß (4 GB+)" } + }, + "ru": { + "stringUnit": { + "state": "translated", + "value": "Большой (4 ГБ+)" + } } } }, @@ -4598,6 +7436,12 @@ "state": "translated", "value": "Osaurus beim Anmelden starten" } + }, + "ru": { + "stringUnit": { + "state": "translated", + "value": "Запустите Osaurus при входе в систему" + } } } }, @@ -4608,6 +7452,12 @@ "state": "translated", "value": "Mehr erfahren" } + }, + "ru": { + "stringUnit": { + "state": "translated", + "value": "Узнать больше" + } } } }, @@ -4618,6 +7468,12 @@ "state": "translated", "value": "Erfahre, wie du Osaurus in deine Anwendungen integrierst." } + }, + "ru": { + "stringUnit": { + "state": "translated", + "value": "Узнайте, как интегрировать Osaurus в ваши приложения." + } } } }, @@ -4628,6 +7484,12 @@ "state": "translated", "value": "Leer lassen, um den aktuellen Wert beizubehalten" } + }, + "ru": { + "stringUnit": { + "state": "translated", + "value": "Оставьте пустым, чтобы быть в курсе" + } } } }, @@ -4638,6 +7500,12 @@ "state": "translated", "value": "Leer lassen, um nur Agentennamen als Aktivierungswörter zu nutzen" } + }, + "ru": { + "stringUnit": { + "state": "translated", + "value": "Оставьте пустым, чтобы в качестве слов пробуждения использовались только имена агентов." + } } } }, @@ -4648,6 +7516,12 @@ "state": "translated", "value": "Leer lassen, um Standardwerte aus den globalen Einstellungen zu verwenden." } + }, + "ru": { + "stringUnit": { + "state": "translated", + "value": "Оставьте пустым, чтобы использовать значения по умолчанию из глобальных настроек." + } } } }, @@ -4658,6 +7532,12 @@ "state": "translated", "value": "Veraltete WhisperKit-Modelle gefunden" } + }, + "ru": { + "stringUnit": { + "state": "translated", + "value": "Обнаружены устаревшие модели WhisperKit" + } } } }, @@ -4668,6 +7548,12 @@ "state": "translated", "value": "Lizenz" } + }, + "ru": { + "stringUnit": { + "state": "translated", + "value": "Лицензия" + } } } }, @@ -4678,6 +7564,12 @@ "state": "translated", "value": "Hell" } + }, + "ru": { + "stringUnit": { + "state": "translated", + "value": "Свет" + } } } }, @@ -4688,6 +7580,12 @@ "state": "translated", "value": "Leichtgewichtiges Modell für Gedächtnis-Extraktion, Preflight-Suchoptimierung und andere Hintergrund-Inferenzaufgaben." } + }, + "ru": { + "stringUnit": { + "state": "translated", + "value": "Облегченная модель, используемая для извлечения памяти, предполетной оптимизации поиска и других задач фонового вывода." + } } } }, @@ -4698,6 +7596,12 @@ "state": "translated", "value": "Likes" } + }, + "ru": { + "stringUnit": { + "state": "translated", + "value": "Нравится" + } } } }, @@ -4708,6 +7612,12 @@ "state": "translated", "value": "Hört zu" } + }, + "ru": { + "stringUnit": { + "state": "translated", + "value": "Прослушивание" + } } } }, @@ -4718,6 +7628,12 @@ "state": "translated", "value": "Hört zu…" } + }, + "ru": { + "stringUnit": { + "state": "translated", + "value": "Слушаю..." + } } } }, @@ -4728,6 +7644,12 @@ "state": "translated", "value": "Live-Vorschau" } + }, + "ru": { + "stringUnit": { + "state": "translated", + "value": "Живой просмотр" + } } } }, @@ -4738,6 +7660,12 @@ "state": "translated", "value": "Live-Test" } + }, + "ru": { + "stringUnit": { + "state": "translated", + "value": "Живой тест" + } } } }, @@ -4748,6 +7676,12 @@ "state": "translated", "value": "Geladene Modelle" } + }, + "ru": { + "stringUnit": { + "state": "translated", + "value": "Загруженные модели" + } } } }, @@ -4758,6 +7692,12 @@ "state": "translated", "value": "Danksagungen werden geladen…" } + }, + "ru": { + "stringUnit": { + "state": "translated", + "value": "Загрузка подтверждений..." + } } } }, @@ -4768,6 +7708,12 @@ "state": "translated", "value": "Identität wird geladen…" } + }, + "ru": { + "stringUnit": { + "state": "translated", + "value": "Загрузка личности..." + } } } }, @@ -4778,6 +7724,12 @@ "state": "translated", "value": "Bild wird geladen…" } + }, + "ru": { + "stringUnit": { + "state": "translated", + "value": "Загрузка изображения..." + } } } }, @@ -4788,6 +7740,12 @@ "state": "translated", "value": "Gedächtnis wird geladen..." } + }, + "ru": { + "stringUnit": { + "state": "translated", + "value": "Загрузка памяти..." + } } } }, @@ -4798,6 +7756,12 @@ "state": "translated", "value": "Modell wird geladen…" } + }, + "ru": { + "stringUnit": { + "state": "translated", + "value": "Загрузка модели..." + } } } }, @@ -4808,6 +7772,12 @@ "state": "translated", "value": "Repository wird geladen..." } + }, + "ru": { + "stringUnit": { + "state": "translated", + "value": "Загрузка репозитория..." + } } } }, @@ -4818,6 +7788,12 @@ "state": "translated", "value": "Themes werden geladen…" } + }, + "ru": { + "stringUnit": { + "state": "translated", + "value": "Загрузка тем..." + } } } }, @@ -4828,6 +7804,12 @@ "state": "translated", "value": "Laden…" } + }, + "ru": { + "stringUnit": { + "state": "translated", + "value": "Загрузка..." + } } } }, @@ -4838,6 +7820,12 @@ "state": "translated", "value": "Lokaler Guide" } + }, + "ru": { + "stringUnit": { + "state": "translated", + "value": "Местный гид" + } } } }, @@ -4848,6 +7836,12 @@ "state": "translated", "value": "Lokale Netzwerkerkennung" } + }, + "ru": { + "stringUnit": { + "state": "translated", + "value": "Обнаружение локальной сети" + } } } }, @@ -4858,6 +7852,12 @@ "state": "translated", "value": "Lokale Modelle laufen auf deinem Mac mit deiner Hardware. Sie sind privat und kostenlos, aber bei komplexen Aufgaben weniger leistungsfähig als Cloud-Modelle.\n\nCloud-Anbieter wie Claude und ChatGPT sind leistungsfähiger, erfordern aber ein Konto und berechnen pro Nutzung.\n\nNicht sicher? Starte lokal. Du kannst später Anbieter hinzufügen." } + }, + "ru": { + "stringUnit": { + "state": "translated", + "value": "Локальные модели работают на вашем Mac с использованием вашего оборудования. Они являются частными и бесплатными в использовании, но менее пригодны для выполнения сложных задач, чем облачные модели.\n\nОблачные поставщики, такие как Claude и ChatGPT, более мощные, но требуют учетной записи и оплаты за использование.\n\nНе уверен? Начать локально. Вы можете добавить поставщиков позже." + } } } }, @@ -4868,6 +7868,12 @@ "state": "translated", "value": "Standort" } + }, + "ru": { + "stringUnit": { + "state": "translated", + "value": "Расположение" + } } } }, @@ -4878,6 +7884,12 @@ "state": "translated", "value": "Protokolle" } + }, + "ru": { + "stringUnit": { + "state": "translated", + "value": "Журналы" + } } } }, @@ -4888,6 +7900,12 @@ "state": "translated", "value": "Niedrig" } + }, + "ru": { + "stringUnit": { + "state": "translated", + "value": "Низкий" + } } } }, @@ -4898,6 +7916,12 @@ "state": "translated", "value": "MCP-Anbieter" } + }, + "ru": { + "stringUnit": { + "state": "translated", + "value": "Поставщики MCP" + } } } }, @@ -4908,7 +7932,13 @@ "state": "translated", "value": "METHODE" } - } + }, + "ru": { + "stringUnit": { + "state": "translated", + "value": "МЕТОД" + } + } } }, "Maintenance": { @@ -4918,6 +7948,12 @@ "state": "translated", "value": "Wartung" } + }, + "ru": { + "stringUnit": { + "state": "translated", + "value": "Обслуживание" + } } } }, @@ -4928,6 +7964,12 @@ "state": "translated", "value": "Agenten verwalten…" } + }, + "ru": { + "stringUnit": { + "state": "translated", + "value": "Управление агентами..." + } } } }, @@ -4938,6 +7980,12 @@ "state": "translated", "value": "Agenten verwalten…" } + }, + "ru": { + "stringUnit": { + "state": "translated", + "value": "Управление агентами…" + } } } }, @@ -4948,6 +7996,12 @@ "state": "translated", "value": "Zeitpläne verwalten…" } + }, + "ru": { + "stringUnit": { + "state": "translated", + "value": "Управлять расписаниями…" + } } } }, @@ -4958,6 +8012,12 @@ "state": "translated", "value": "Themes verwalten…" } + }, + "ru": { + "stringUnit": { + "state": "translated", + "value": "Управление темами…" + } } } }, @@ -4968,6 +8028,12 @@ "state": "translated", "value": "Tools verwalten" } + }, + "ru": { + "stringUnit": { + "state": "translated", + "value": "Управление инструментами" + } } } }, @@ -4978,6 +8044,12 @@ "state": "translated", "value": "Watcher verwalten…" } + }, + "ru": { + "stringUnit": { + "state": "translated", + "value": "Управление наблюдателями…" + } } } }, @@ -4988,6 +8060,12 @@ "state": "translated", "value": "Tools verwalten und entdecken" } + }, + "ru": { + "stringUnit": { + "state": "translated", + "value": "Управляйте и находите инструменты" + } } } }, @@ -4998,6 +8076,12 @@ "state": "translated", "value": "Systemberechtigungen für Plugins und Funktionen verwalten" } + }, + "ru": { + "stringUnit": { + "state": "translated", + "value": "Управление системными разрешениями для плагинов и функций." + } } } }, @@ -5008,6 +8092,12 @@ "state": "translated", "value": "Verwalte dein Profil, Überschreibungen und Gedächtnis-Konfiguration" } + }, + "ru": { + "stringUnit": { + "state": "translated", + "value": "Управляйте своим профилем, переопределениями и конфигурацией памяти." + } } } }, @@ -5018,6 +8108,12 @@ "state": "translated", "value": "Verwalte deinen Zeitplan" } + }, + "ru": { + "stringUnit": { + "state": "translated", + "value": "Управляйте своим графиком" + } } } }, @@ -5028,6 +8124,12 @@ "state": "translated", "value": "Vom Plugin verwaltet" } + }, + "ru": { + "stringUnit": { + "state": "translated", + "value": "Управляется плагином" + } } } }, @@ -5038,6 +8140,12 @@ "state": "translated", "value": "Verwaltung" } + }, + "ru": { + "stringUnit": { + "state": "translated", + "value": "Управление" + } } } }, @@ -5048,6 +8156,12 @@ "state": "translated", "value": "Manager" } + }, + "ru": { + "stringUnit": { + "state": "translated", + "value": "Менеджер" + } } } }, @@ -5058,6 +8172,12 @@ "state": "translated", "value": "Manuell" } + }, + "ru": { + "stringUnit": { + "state": "translated", + "value": "Руководство" + } } } }, @@ -5068,6 +8188,12 @@ "state": "translated", "value": "Profilinhalt manuell bearbeiten" } + }, + "ru": { + "stringUnit": { + "state": "translated", + "value": "Редактируйте содержимое своего профиля вручную." + } } } }, @@ -5078,6 +8204,12 @@ "state": "translated", "value": "Karten" } + }, + "ru": { + "stringUnit": { + "state": "translated", + "value": "Карты" + } } } }, @@ -5088,6 +8220,12 @@ "state": "translated", "value": "Master-Adresse" } + }, + "ru": { + "stringUnit": { + "state": "translated", + "value": "Главный адрес" + } } } }, @@ -5098,6 +8236,12 @@ "state": "translated", "value": "Max. Token" } + }, + "ru": { + "stringUnit": { + "state": "translated", + "value": "Макс. жетонов" + } } } }, @@ -5108,6 +8252,12 @@ "state": "translated", "value": "Max. Tool-Versuche" } + }, + "ru": { + "stringUnit": { + "state": "translated", + "value": "Макс. количество попыток инструмента" + } } } }, @@ -5118,6 +8268,12 @@ "state": "translated", "value": "Mittel" } + }, + "ru": { + "stringUnit": { + "state": "translated", + "value": "Середина" + } } } }, @@ -5128,6 +8284,12 @@ "state": "translated", "value": "Mittel (2-4 GB)" } + }, + "ru": { + "stringUnit": { + "state": "translated", + "value": "Средний (2–4 ГБ)" + } } } }, @@ -5138,6 +8300,12 @@ "state": "translated", "value": "Gedächtnis" } + }, + "ru": { + "stringUnit": { + "state": "translated", + "value": "Память" + } } } }, @@ -5148,6 +8316,12 @@ "state": "translated", "value": "Gedächtnis-Kontextvorschau" } + }, + "ru": { + "stringUnit": { + "state": "translated", + "value": "Предварительный просмотр контекста памяти" + } } } }, @@ -5158,6 +8332,12 @@ "state": "translated", "value": "Gedächtnissystem ist deaktiviert. Aktiviere es unten, um das Gedächtnis aufzubauen." } + }, + "ru": { + "stringUnit": { + "state": "translated", + "value": "Система памяти отключена. Включите его ниже, чтобы начать наращивать память." + } } } }, @@ -5168,6 +8348,12 @@ "state": "translated", "value": "Nachrichten-Assistent" } + }, + "ru": { + "stringUnit": { + "state": "translated", + "value": "Помощник по сообщениям" + } } } }, @@ -5178,6 +8364,12 @@ "state": "translated", "value": "Nachricht oder Dateien anhängen…" } + }, + "ru": { + "stringUnit": { + "state": "translated", + "value": "Отправьте сообщение или прикрепите файлы..." + } } } }, @@ -5188,6 +8380,12 @@ "state": "translated", "value": "Nachricht oder Bild einfügen…" } + }, + "ru": { + "stringUnit": { + "state": "translated", + "value": "Отправьте сообщение или вставьте изображение..." + } } } }, @@ -5198,6 +8396,12 @@ "state": "translated", "value": "Nachricht in Warteschlange" } + }, + "ru": { + "stringUnit": { + "state": "translated", + "value": "Сообщение в очереди" + } } } }, @@ -5208,6 +8412,12 @@ "state": "translated", "value": "Mikrofon" } + }, + "ru": { + "stringUnit": { + "state": "translated", + "value": "Микрофон" + } } } }, @@ -5218,6 +8428,12 @@ "state": "translated", "value": "Minimale Tool-Einbindung. Bis zu 3 Tools geladen." } + }, + "ru": { + "stringUnit": { + "state": "translated", + "value": "Минимальная инъекция инструмента. Загружено до 3 инструментов." + } } } }, @@ -5228,6 +8444,12 @@ "state": "translated", "value": "Minute der Stunde" } + }, + "ru": { + "stringUnit": { + "state": "translated", + "value": "Минута часа" + } } } }, @@ -5238,6 +8460,12 @@ "state": "translated", "value": "Minuten" } + }, + "ru": { + "stringUnit": { + "state": "translated", + "value": "Минуты" + } } } }, @@ -5248,6 +8476,12 @@ "state": "translated", "value": "Modus" } + }, + "ru": { + "stringUnit": { + "state": "translated", + "value": "Режим" + } } } }, @@ -5258,6 +8492,12 @@ "state": "translated", "value": "Modell" } + }, + "ru": { + "stringUnit": { + "state": "translated", + "value": "Модель" + } } } }, @@ -5268,6 +8508,12 @@ "state": "translated", "value": "Modelldetails" } + }, + "ru": { + "stringUnit": { + "state": "translated", + "value": "Детали модели" + } } } }, @@ -5278,6 +8524,12 @@ "state": "translated", "value": "Modellfamilie" } + }, + "ru": { + "stringUnit": { + "state": "translated", + "value": "Модельная семья" + } } } }, @@ -5288,6 +8540,12 @@ "state": "translated", "value": "Modell geladen" } + }, + "ru": { + "stringUnit": { + "state": "translated", + "value": "Модель загружена" + } } } }, @@ -5298,6 +8556,12 @@ "state": "translated", "value": "Modellgröße" } + }, + "ru": { + "stringUnit": { + "state": "translated", + "value": "Размер модели" + } } } }, @@ -5308,6 +8572,12 @@ "state": "translated", "value": "Modelltyp" } + }, + "ru": { + "stringUnit": { + "state": "translated", + "value": "Тип модели" + } } } }, @@ -5318,6 +8588,12 @@ "state": "translated", "value": "Modell nicht geladen" } + }, + "ru": { + "stringUnit": { + "state": "translated", + "value": "Модель не загружена" + } } } }, @@ -5328,6 +8604,12 @@ "state": "translated", "value": "Modell bereit" } + }, + "ru": { + "stringUnit": { + "state": "translated", + "value": "Модель готова" + } } } }, @@ -5338,6 +8620,12 @@ "state": "translated", "value": "Modell-Updates verfügbar" } + }, + "ru": { + "stringUnit": { + "state": "translated", + "value": "Доступны обновления модели" + } } } }, @@ -5348,6 +8636,12 @@ "state": "translated", "value": "Modelle" } + }, + "ru": { + "stringUnit": { + "state": "translated", + "value": "Модели" + } } } }, @@ -5358,6 +8652,12 @@ "state": "translated", "value": "Modelle werden in Unterordnern nach Repository-Name organisiert" } + }, + "ru": { + "stringUnit": { + "state": "translated", + "value": "Модели будут организованы в подпапках по имени репозитория." + } } } }, @@ -5368,6 +8668,12 @@ "state": "translated", "value": "API-Verbindung bearbeiten" } + }, + "ru": { + "stringUnit": { + "state": "translated", + "value": "Измените соединение API" + } } } }, @@ -5378,6 +8684,12 @@ "state": "translated", "value": "Deine Skill-Anweisungen bearbeiten" } + }, + "ru": { + "stringUnit": { + "state": "translated", + "value": "Измените инструкции для своего навыка" + } } } }, @@ -5388,6 +8700,12 @@ "state": "translated", "value": "API-Anfragen und Performance überwachen" } + }, + "ru": { + "stringUnit": { + "state": "translated", + "value": "Мониторинг запросов и производительности API" + } } } }, @@ -5398,6 +8716,12 @@ "state": "translated", "value": "Ordner auf Änderungen überwachen und Arbeitsaufgaben automatisch auslösen" } + }, + "ru": { + "stringUnit": { + "state": "translated", + "value": "Отслеживайте папки на предмет изменений и автоматически запускайте рабочие задачи" + } } } }, @@ -5408,6 +8732,12 @@ "state": "translated", "value": "Ordner auf Änderungen überwachen und Arbeitsaufgaben automatisch auslösen." } + }, + "ru": { + "stringUnit": { + "state": "translated", + "value": "Отслеживайте папки на предмет изменений и автоматически запускайте рабочие задачи." + } } } }, @@ -5418,6 +8748,12 @@ "state": "translated", "value": "Monat" } + }, + "ru": { + "stringUnit": { + "state": "translated", + "value": "Месяц" + } } } }, @@ -5428,6 +8764,12 @@ "state": "translated", "value": "Monatlich" } + }, + "ru": { + "stringUnit": { + "state": "translated", + "value": "Ежемесячно" + } } } }, @@ -5438,6 +8780,12 @@ "state": "translated", "value": "Morgenbriefing" } + }, + "ru": { + "stringUnit": { + "state": "translated", + "value": "Утренний брифинг" + } } } }, @@ -5448,6 +8796,12 @@ "state": "translated", "value": "Mehrsprachiges Modell mit 25 europäischen Sprachen" } + }, + "ru": { + "stringUnit": { + "state": "translated", + "value": "Многоязычная модель с поддержкой 25 европейских языков." + } } } }, @@ -5458,6 +8812,12 @@ "state": "translated", "value": "Name" } + }, + "ru": { + "stringUnit": { + "state": "translated", + "value": "Имя" + } } } }, @@ -5468,6 +8828,12 @@ "state": "translated", "value": "Schmal" } + }, + "ru": { + "stringUnit": { + "state": "translated", + "value": "Узкий" + } } } }, @@ -5478,6 +8844,12 @@ "state": "translated", "value": "Navigation" } + }, + "ru": { + "stringUnit": { + "state": "translated", + "value": "Навигация" + } } } }, @@ -5488,6 +8860,12 @@ "state": "translated", "value": "Neuen Schlüssel benötigt?" } + }, + "ru": { + "stringUnit": { + "state": "translated", + "value": "Нужен новый ключ?" + } } } }, @@ -5498,6 +8876,12 @@ "state": "translated", "value": "Berechtigung erforderlich" } + }, + "ru": { + "stringUnit": { + "state": "translated", + "value": "Требуется разрешение" + } } } }, @@ -5508,6 +8892,12 @@ "state": "translated", "value": "Eingabe erforderlich" } + }, + "ru": { + "stringUnit": { + "state": "translated", + "value": "Требуется ввод данных" + } } } }, @@ -5518,6 +8908,12 @@ "state": "translated", "value": "Netzwerk-Zugriff" } + }, + "ru": { + "stringUnit": { + "state": "translated", + "value": "Доступ к сети" + } } } }, @@ -5528,6 +8924,12 @@ "state": "translated", "value": "Neuer Chat" } + }, + "ru": { + "stringUnit": { + "state": "translated", + "value": "Новый чат" + } } } }, @@ -5538,9 +8940,15 @@ "state": "translated", "value": "Neuer Zeitplan…" } - } - } - }, + }, + "ru": { + "stringUnit": { + "state": "translated", + "value": "Новое расписание…" + } + } + } + }, "New Skill": { "localizations": { "de": { @@ -5548,6 +8956,12 @@ "state": "translated", "value": "Neuer Skill" } + }, + "ru": { + "stringUnit": { + "state": "translated", + "value": "Новый навык" + } } } }, @@ -5558,6 +8972,12 @@ "state": "translated", "value": "Neues Tool" } + }, + "ru": { + "stringUnit": { + "state": "translated", + "value": "Новый инструмент" + } } } }, @@ -5568,6 +8988,12 @@ "state": "translated", "value": "Neuer Watcher…" } + }, + "ru": { + "stringUnit": { + "state": "translated", + "value": "Новый наблюдатель…" + } } } }, @@ -5578,6 +9004,12 @@ "state": "translated", "value": "Neues Fenster" } + }, + "ru": { + "stringUnit": { + "state": "translated", + "value": "Новое окно" + } } } }, @@ -5588,6 +9020,12 @@ "state": "translated", "value": "Neues Fenster mit Agent" } + }, + "ru": { + "stringUnit": { + "state": "translated", + "value": "Новое окно с агентом" + } } } }, @@ -5598,6 +9036,12 @@ "state": "translated", "value": "Weiter" } + }, + "ru": { + "stringUnit": { + "state": "translated", + "value": "Следующий" + } } } }, @@ -5608,6 +9052,12 @@ "state": "translated", "value": "Keine Agenten" } + }, + "ru": { + "stringUnit": { + "state": "translated", + "value": "Нет агентов" + } } } }, @@ -5618,6 +9068,12 @@ "state": "translated", "value": "Keine MCP-Anbieter" } + }, + "ru": { + "stringUnit": { + "state": "translated", + "value": "Нет поставщиков MCP" + } } } }, @@ -5628,6 +9084,12 @@ "state": "translated", "value": "Keine Remote-Anbieter" } + }, + "ru": { + "stringUnit": { + "state": "translated", + "value": "Нет удаленных провайдеров" + } } } }, @@ -5638,6 +9100,12 @@ "state": "translated", "value": "Noch keine Anfragen" } + }, + "ru": { + "stringUnit": { + "state": "translated", + "value": "Пока нет запросов" + } } } }, @@ -5648,6 +9116,12 @@ "state": "translated", "value": "Keine Themes gefunden" } + }, + "ru": { + "stringUnit": { + "state": "translated", + "value": "Темы не найдены" + } } } }, @@ -5658,6 +9132,12 @@ "state": "translated", "value": "Keine Watcher" } + }, + "ru": { + "stringUnit": { + "state": "translated", + "value": "Нет наблюдателей" + } } } }, @@ -5668,6 +9148,12 @@ "state": "translated", "value": "Keine aktiven Aufgaben" } + }, + "ru": { + "stringUnit": { + "state": "translated", + "value": "Нет активных задач" + } } } }, @@ -5678,6 +9164,12 @@ "state": "translated", "value": "Keine Adresse" } + }, + "ru": { + "stringUnit": { + "state": "translated", + "value": "Нет адреса" + } } } }, @@ -5688,6 +9180,12 @@ "state": "translated", "value": "Keine Agenten konfiguriert. Erstelle zuerst einen Agenten." } + }, + "ru": { + "stringUnit": { + "state": "translated", + "value": "Агенты не настроены. Сначала создайте агента." + } } } }, @@ -5698,6 +9196,12 @@ "state": "translated", "value": "Noch keine Agenten – erstelle einen im Agenten-Tab" } + }, + "ru": { + "stringUnit": { + "state": "translated", + "value": "Агентов пока нет — создайте их во вкладке «Агенты»." + } } } }, @@ -5708,6 +9212,12 @@ "state": "translated", "value": "Noch keine Chat-Sitzungen" } + }, + "ru": { + "stringUnit": { + "state": "translated", + "value": "Чатов пока нет" + } } } }, @@ -5718,6 +9228,12 @@ "state": "translated", "value": "Noch keine Gesprächszusammenfassungen." } + }, + "ru": { + "stringUnit": { + "state": "translated", + "value": "Сводок разговоров пока нет." + } } } }, @@ -5728,6 +9244,12 @@ "state": "translated", "value": "Noch keine Gespräche" } + }, + "ru": { + "stringUnit": { + "state": "translated", + "value": "Пока нет разговоров" + } } } }, @@ -5738,6 +9260,12 @@ "state": "translated", "value": "Keine benutzerdefinierten Header konfiguriert" } + }, + "ru": { + "stringUnit": { + "state": "translated", + "value": "Пользовательские заголовки не настроены" + } } } }, @@ -5748,6 +9276,12 @@ "state": "translated", "value": "Keine Beschreibung" } + }, + "ru": { + "stringUnit": { + "state": "translated", + "value": "Нет описания" + } } } }, @@ -5758,6 +9292,12 @@ "state": "translated", "value": "Keine heruntergeladenen Modelle" } + }, + "ru": { + "stringUnit": { + "state": "translated", + "value": "Нет загруженных моделей" + } } } }, @@ -5768,6 +9308,12 @@ "state": "translated", "value": "Kein Ausführungsverlauf" } + }, + "ru": { + "stringUnit": { + "state": "translated", + "value": "Нет истории выполнения" + } } } }, @@ -5778,6 +9324,12 @@ "state": "translated", "value": "Keine Modellfamilien gefunden" } + }, + "ru": { + "stringUnit": { + "state": "translated", + "value": "Семьи не найдены" + } } } }, @@ -5788,6 +9340,12 @@ "state": "translated", "value": "Keine Datei ausgewählt" } + }, + "ru": { + "stringUnit": { + "state": "translated", + "value": "Файл не выбран" + } } } }, @@ -5798,6 +9356,12 @@ "state": "translated", "value": "Kein Ordner ausgewählt" } + }, + "ru": { + "stringUnit": { + "state": "translated", + "value": "Папка не выбрана" + } } } }, @@ -5808,6 +9372,12 @@ "state": "translated", "value": "Keine Identität eingerichtet" } + }, + "ru": { + "stringUnit": { + "state": "translated", + "value": "Идентичность не настроена" + } } } }, @@ -5818,6 +9388,12 @@ "state": "translated", "value": "Keine Aufgaben gefunden" } + }, + "ru": { + "stringUnit": { + "state": "translated", + "value": "Проблем не обнаружено" + } } } }, @@ -5828,6 +9404,12 @@ "state": "translated", "value": "Keine Einträge" } + }, + "ru": { + "stringUnit": { + "state": "translated", + "value": "Нет товаров" + } } } }, @@ -5838,6 +9420,12 @@ "state": "translated", "value": "Keine Treffer gefunden" } + }, + "ru": { + "stringUnit": { + "state": "translated", + "value": "Совпадений не найдено" + } } } }, @@ -5848,6 +9436,12 @@ "state": "translated", "value": "Keine passenden Einträge" } + }, + "ru": { + "stringUnit": { + "state": "translated", + "value": "Нет соответствующих записей" + } } } }, @@ -5858,6 +9452,12 @@ "state": "translated", "value": "Kein Modell ausgewählt" } + }, + "ru": { + "stringUnit": { + "state": "translated", + "value": "Модель не выбрана" + } } } }, @@ -5868,6 +9468,12 @@ "state": "translated", "value": "Keine Modelle verfügbar" } + }, + "ru": { + "stringUnit": { + "state": "translated", + "value": "Нет доступных моделей" + } } } }, @@ -5878,6 +9484,12 @@ "state": "translated", "value": "Derzeit keine Modelle im Cache." } + }, + "ru": { + "stringUnit": { + "state": "translated", + "value": "В настоящее время в кэше нет моделей." + } } } }, @@ -5888,6 +9500,12 @@ "state": "translated", "value": "Keine Modelle heruntergeladen" } + }, + "ru": { + "stringUnit": { + "state": "translated", + "value": "Модели не загружены" + } } } }, @@ -5898,6 +9516,12 @@ "state": "translated", "value": "Keine Modelle gefunden" } + }, + "ru": { + "stringUnit": { + "state": "translated", + "value": "Модели не найдены" + } } } }, @@ -5908,6 +9532,12 @@ "state": "translated", "value": "Keine Modelle entsprechen deiner Suche" } + }, + "ru": { + "stringUnit": { + "state": "translated", + "value": "Ни одна модель не соответствует вашему запросу" + } } } }, @@ -5918,6 +9548,12 @@ "state": "translated", "value": "Keine Überschreibungen gesetzt. Füge explizite Fakten hinzu, die immer in deinem Profil sein sollen." } + }, + "ru": { + "stringUnit": { + "state": "translated", + "value": "Никаких переопределений не установлено. Добавьте откровенные факты, которые всегда должны быть в вашем профиле." + } } } }, @@ -5928,6 +9564,12 @@ "state": "translated", "value": "Keine Plugins verfügbar" } + }, + "ru": { + "stringUnit": { + "state": "translated", + "value": "Нет доступных плагинов" + } } } }, @@ -5938,6 +9580,12 @@ "state": "translated", "value": "Keine Plugins installiert" } + }, + "ru": { + "stringUnit": { + "state": "translated", + "value": "Плагины не установлены" + } } } }, @@ -5948,6 +9596,12 @@ "state": "translated", "value": "Keine Plugins entsprechen deiner Suche" } + }, + "ru": { + "stringUnit": { + "state": "translated", + "value": "Нет плагинов, соответствующих вашему запросу" + } } } }, @@ -5958,6 +9612,12 @@ "state": "translated", "value": "Noch kein Profil erstellt. Chatte mit Osaurus und das Gedächtnissystem erstellt dein Profil automatisch." } + }, + "ru": { + "stringUnit": { + "state": "translated", + "value": "Профиль еще не создан. Пообщайтесь с Osaurus, и система памяти автоматически создаст ваш профиль." + } } } }, @@ -5968,6 +9628,12 @@ "state": "translated", "value": "Keine empfohlenen Modelle" } + }, + "ru": { + "stringUnit": { + "state": "translated", + "value": "Нет рекомендуемых моделей" + } } } }, @@ -5978,6 +9644,12 @@ "state": "translated", "value": "Kein Anfrage-Body" } + }, + "ru": { + "stringUnit": { + "state": "translated", + "value": "Нет тела запроса" + } } } }, @@ -5988,6 +9660,12 @@ "state": "translated", "value": "Kein Antwort-Body" } + }, + "ru": { + "stringUnit": { + "state": "translated", + "value": "Нет тела ответа" + } } } }, @@ -5998,6 +9676,12 @@ "state": "translated", "value": "Keine Sandbox-Plugins" } + }, + "ru": { + "stringUnit": { + "state": "translated", + "value": "Нет плагинов для песочницы" + } } } }, @@ -6008,6 +9692,12 @@ "state": "translated", "value": "Keine Zeitpläne mit diesem Agenten verknüpft" } + }, + "ru": { + "stringUnit": { + "state": "translated", + "value": "Нет расписаний, связанных с этим агентом" + } } } }, @@ -6018,6 +9708,12 @@ "state": "translated", "value": "Keine empfohlenen Modelle" } + }, + "ru": { + "stringUnit": { + "state": "translated", + "value": "Нет предложенных моделей" + } } } }, @@ -6028,6 +9724,12 @@ "state": "translated", "value": "Noch keine Aufgaben" } + }, + "ru": { + "stringUnit": { + "state": "translated", + "value": "Заданий пока нет" + } } } }, @@ -6038,6 +9740,12 @@ "state": "translated", "value": "Keine Tools verfügbar" } + }, + "ru": { + "stringUnit": { + "state": "translated", + "value": "Нет доступных инструментов" + } } } }, @@ -6048,6 +9756,12 @@ "state": "translated", "value": "Keine Tools in diesem Plugin definiert" } + }, + "ru": { + "stringUnit": { + "state": "translated", + "value": "В этом плагине не определены инструменты" + } } } }, @@ -6058,6 +9772,12 @@ "state": "translated", "value": "Keine Watcher mit diesem Agenten verknüpft" } + }, + "ru": { + "stringUnit": { + "state": "translated", + "value": "С этим агентом не связаны наблюдатели" + } } } }, @@ -6068,6 +9788,12 @@ "state": "translated", "value": "Noch keine Arbeitsaufgaben" } + }, + "ru": { + "stringUnit": { + "state": "translated", + "value": "Рабочих задач пока нет" + } } } }, @@ -6078,6 +9804,12 @@ "state": "translated", "value": "Noch keine Arbeitsgedächtnis-Einträge. Erinnerungen werden automatisch aus Gesprächen extrahiert." } + }, + "ru": { + "stringUnit": { + "state": "translated", + "value": "Записей в рабочей памяти пока нет. Воспоминания автоматически извлекаются из разговоров." + } } } }, @@ -6088,6 +9820,12 @@ "state": "translated", "value": "Keine" } + }, + "ru": { + "stringUnit": { + "state": "translated", + "value": "Никто" + } } } }, @@ -6098,6 +9836,12 @@ "state": "translated", "value": "Nicht verbunden" } + }, + "ru": { + "stringUnit": { + "state": "translated", + "value": "Не подключен" + } } } }, @@ -6108,6 +9852,12 @@ "state": "translated", "value": "Nicht gefunden" } + }, + "ru": { + "stringUnit": { + "state": "translated", + "value": "Не найдено" + } } } }, @@ -6118,6 +9868,12 @@ "state": "translated", "value": "Nicht erteilt" } + }, + "ru": { + "stringUnit": { + "state": "translated", + "value": "Не предоставлено" + } } } }, @@ -6128,6 +9884,12 @@ "state": "translated", "value": "Nicht bereitgestellt" } + }, + "ru": { + "stringUnit": { + "state": "translated", + "value": "Не предоставлено" + } } } }, @@ -6138,6 +9900,12 @@ "state": "translated", "value": "Nicht verfügbar" } + }, + "ru": { + "stringUnit": { + "state": "translated", + "value": "Нет в наличии" + } } } }, @@ -6148,6 +9916,12 @@ "state": "translated", "value": "Nicht gesetzt" } + }, + "ru": { + "stringUnit": { + "state": "translated", + "value": "Не установлено" + } } } }, @@ -6158,6 +9932,12 @@ "state": "translated", "value": "Notizen" } + }, + "ru": { + "stringUnit": { + "state": "translated", + "value": "Примечания" + } } } }, @@ -6168,7 +9948,13 @@ "state": "translated", "value": "OK" } - } + }, + "ru": { + "stringUnit": { + "state": "translated", + "value": "ХОРОШО" + } + } } }, "OSAURUS IDENTITY RECOVERY": { @@ -6178,6 +9964,12 @@ "state": "translated", "value": "OSAURUS-IDENTITÄTSWIEDERHERSTELLUNG" } + }, + "ru": { + "stringUnit": { + "state": "translated", + "value": "ВОССТАНОВЛЕНИЕ ИДЕНТИЧНОСТИ ОЗАРУСА" + } } } }, @@ -6188,6 +9980,12 @@ "state": "translated", "value": "Aus" } + }, + "ru": { + "stringUnit": { + "state": "translated", + "value": "Выключенный" + } } } }, @@ -6198,6 +9996,12 @@ "state": "translated", "value": "Ein" } + }, + "ru": { + "stringUnit": { + "state": "translated", + "value": "На" + } } } }, @@ -6208,6 +10012,12 @@ "state": "translated", "value": "In diesem Netzwerk" } + }, + "ru": { + "stringUnit": { + "state": "translated", + "value": "В этой сети" + } } } }, @@ -6218,6 +10028,12 @@ "state": "translated", "value": "Einmalig" } + }, + "ru": { + "stringUnit": { + "state": "translated", + "value": "Один раз" + } } } }, @@ -6228,6 +10044,12 @@ "state": "translated", "value": "Sobald der Download abgeschlossen ist, läuft eine KI komplett auf deinem Mac – ohne Konto, ohne Cloud, ohne dass Daten dein Gerät verlassen." } + }, + "ru": { + "stringUnit": { + "state": "translated", + "value": "Как только это закончится, на вашем Mac будет полностью работать ИИ — ни учетной записи, ни облака, ни данных, покидающих ваш компьютер." + } } } }, @@ -6238,6 +10060,12 @@ "state": "translated", "value": "Noch ein Schritt" } + }, + "ru": { + "stringUnit": { + "state": "translated", + "value": "Еще один шаг" + } } } }, @@ -6248,6 +10076,12 @@ "state": "translated", "value": "Öffnen" } + }, + "ru": { + "stringUnit": { + "state": "translated", + "value": "Открыть" + } } } }, @@ -6258,6 +10092,12 @@ "state": "translated", "value": "KI-Chat öffnen" } + }, + "ru": { + "stringUnit": { + "state": "translated", + "value": "Открыть чат с искусственным интеллектом" + } } } }, @@ -6268,6 +10108,12 @@ "state": "translated", "value": "Dokumentation öffnen" } + }, + "ru": { + "stringUnit": { + "state": "translated", + "value": "Открыть документацию" + } } } }, @@ -6278,6 +10124,12 @@ "state": "translated", "value": "Datei öffnen" } + }, + "ru": { + "stringUnit": { + "state": "translated", + "value": "Открыть файл" + } } } }, @@ -6288,6 +10140,12 @@ "state": "translated", "value": "Vollbild öffnen" } + }, + "ru": { + "stringUnit": { + "state": "translated", + "value": "Открыть полноэкранный режим" + } } } }, @@ -6298,6 +10156,12 @@ "state": "translated", "value": "Open Responses" } + }, + "ru": { + "stringUnit": { + "state": "translated", + "value": "Открытые ответы" + } } } }, @@ -6308,6 +10172,12 @@ "state": "translated", "value": "Sandbox-Einstellungen öffnen" } + }, + "ru": { + "stringUnit": { + "state": "translated", + "value": "Открыть настройки песочницы" + } } } }, @@ -6318,6 +10188,12 @@ "state": "translated", "value": "Server-Verwaltung öffnen" } + }, + "ru": { + "stringUnit": { + "state": "translated", + "value": "Открытое управление сервером" + } } } }, @@ -6328,6 +10204,12 @@ "state": "translated", "value": "Einstellungen öffnen" } + }, + "ru": { + "stringUnit": { + "state": "translated", + "value": "Открыть настройки" + } } } }, @@ -6338,6 +10220,12 @@ "state": "translated", "value": "Sprache-Tab öffnen" } + }, + "ru": { + "stringUnit": { + "state": "translated", + "value": "Открыть вкладку «Голос»" + } } } }, @@ -6348,6 +10236,12 @@ "state": "translated", "value": "Web-App öffnen" } + }, + "ru": { + "stringUnit": { + "state": "translated", + "value": "Открыть веб-приложение" + } } } }, @@ -6358,6 +10252,12 @@ "state": "translated", "value": "Datei öffnen" } + }, + "ru": { + "stringUnit": { + "state": "translated", + "value": "Открыть файл" + } } } }, @@ -6368,6 +10268,12 @@ "state": "translated", "value": "In neuem Fenster öffnen" } + }, + "ru": { + "stringUnit": { + "state": "translated", + "value": "Открыть в новом окне" + } } } }, @@ -6378,6 +10284,12 @@ "state": "translated", "value": "Repository öffnen" } + }, + "ru": { + "stringUnit": { + "state": "translated", + "value": "Открыть репозиторий" + } } } }, @@ -6388,6 +10300,12 @@ "state": "translated", "value": "Von Osaurus verwendete Open-Source-Bibliotheken" } + }, + "ru": { + "stringUnit": { + "state": "translated", + "value": "Библиотеки с открытым исходным кодом, используемые Osaurus" + } } } }, @@ -6398,6 +10316,12 @@ "state": "translated", "value": "Mit Standardanwendung öffnen" } + }, + "ru": { + "stringUnit": { + "state": "translated", + "value": "Открыть с помощью приложения по умолчанию" + } } } }, @@ -6408,6 +10332,12 @@ "state": "translated", "value": "Öffnen mit…" } + }, + "ru": { + "stringUnit": { + "state": "translated", + "value": "Открыть с…" + } } } }, @@ -6418,6 +10348,12 @@ "state": "translated", "value": "OpenAI-kompatibel" } + }, + "ru": { + "stringUnit": { + "state": "translated", + "value": "Совместимость с OpenAI" + } } } }, @@ -6428,6 +10364,12 @@ "state": "translated", "value": "OpenRouter, MiniMax, etc." } + }, + "ru": { + "stringUnit": { + "state": "translated", + "value": "OpenRouter, MiniMax и т. д." + } } } }, @@ -6438,6 +10380,12 @@ "state": "translated", "value": "Optional" } + }, + "ru": { + "stringUnit": { + "state": "translated", + "value": "Необязательный" + } } } }, @@ -6448,6 +10396,12 @@ "state": "translated", "value": "Optional. Wird als Systemnachricht für alle Chats angezeigt." } + }, + "ru": { + "stringUnit": { + "state": "translated", + "value": "Необязательный. Отображается как системное сообщение для всех чатов." + } } } }, @@ -6458,6 +10412,12 @@ "state": "translated", "value": "Optional ein visuelles Theme für diesen Agenten zuweisen." } + }, + "ru": { + "stringUnit": { + "state": "translated", + "value": "При необходимости назначьте этому агенту визуальную тему." + } } } }, @@ -6468,6 +10428,12 @@ "state": "translated", "value": "Oder eigene Antwort eingeben…" } + }, + "ru": { + "stringUnit": { + "state": "translated", + "value": "Или введите собственный ответ..." + } } } }, @@ -6478,6 +10444,12 @@ "state": "translated", "value": "Dateien organisieren" } + }, + "ru": { + "stringUnit": { + "state": "translated", + "value": "Упорядочить мои файлы" + } } } }, @@ -6488,6 +10460,12 @@ "state": "translated", "value": "Osaurus-Agent" } + }, + "ru": { + "stringUnit": { + "state": "translated", + "value": "Агент Осавра" + } } } }, @@ -6498,6 +10476,12 @@ "state": "translated", "value": "Osaurus-Hilfe" } + }, + "ru": { + "stringUnit": { + "state": "translated", + "value": "Справка Osaurus" + } } } }, @@ -6508,6 +10492,12 @@ "state": "translated", "value": "Osaurus Server" } + }, + "ru": { + "stringUnit": { + "state": "translated", + "value": "Сервер Osaurus" + } } } }, @@ -6518,6 +10508,12 @@ "state": "translated", "value": "Osaurus baut ein vielschichtiges Gedächtnis aus deinen Gesprächen auf – Profil, Arbeitskontext, Zusammenfassungen und ein Wissensgraph. Agenten rufen relevante Fakten automatisch ab. Dein Gedächtnis bleibt bei dir, nicht beim Anbieter." } + }, + "ru": { + "stringUnit": { + "state": "translated", + "value": "Osaurus создает многоуровневую память из ваших разговоров — профиль, рабочий контекст, резюме и график знаний. Агенты автоматически вспоминают соответствующие факты. Ваша память остается с вами, а не с поставщиком услуг." + } } } }, @@ -6528,6 +10524,12 @@ "state": "translated", "value": "Osaurus braucht eine KI – entweder einen Cloud-Anbieter oder ein lokales Modell." } + }, + "ru": { + "stringUnit": { + "state": "translated", + "value": "Для работы Osaurus нужен ИИ — либо облачный провайдер, либо локальная модель." + } } } }, @@ -6538,6 +10540,12 @@ "state": "translated", "value": "Ausgabegerät" } + }, + "ru": { + "stringUnit": { + "state": "translated", + "value": "Устройство вывода" + } } } }, @@ -6548,6 +10556,12 @@ "state": "translated", "value": "Überlagerung" } + }, + "ru": { + "stringUnit": { + "state": "translated", + "value": "Наложение" + } } } }, @@ -6558,6 +10572,12 @@ "state": "translated", "value": "Überschreibung hinzugefügt" } + }, + "ru": { + "stringUnit": { + "state": "translated", + "value": "Переопределение добавлено" + } } } }, @@ -6568,6 +10588,12 @@ "state": "translated", "value": "Übersicht" } + }, + "ru": { + "stringUnit": { + "state": "translated", + "value": "Обзор" + } } } }, @@ -6578,6 +10604,12 @@ "state": "translated", "value": "Deine eigene KI." } + }, + "ru": { + "stringUnit": { + "state": "translated", + "value": "Владейте своим ИИ." + } } } }, @@ -6588,6 +10620,12 @@ "state": "translated", "value": "PFAD" } + }, + "ru": { + "stringUnit": { + "state": "translated", + "value": "ПУТЬ" + } } } }, @@ -6598,6 +10636,12 @@ "state": "translated", "value": "PROTOKOLL" } + }, + "ru": { + "stringUnit": { + "state": "translated", + "value": "ПРОТОКОЛ" + } } } }, @@ -6608,6 +10652,12 @@ "state": "translated", "value": "Parakeet v2 (Englisch)" } + }, + "ru": { + "stringUnit": { + "state": "translated", + "value": "Попугай v2 (английский)" + } } } }, @@ -6618,6 +10668,12 @@ "state": "translated", "value": "Parakeet v3 (Mehrsprachig)" } + }, + "ru": { + "stringUnit": { + "state": "translated", + "value": "Попугай v3 (Многоязычный)" + } } } }, @@ -6628,6 +10684,12 @@ "state": "translated", "value": "Parameter" } + }, + "ru": { + "stringUnit": { + "state": "translated", + "value": "Параметры" + } } } }, @@ -6638,6 +10700,12 @@ "state": "translated", "value": "Aus %@ einfügen" } + }, + "ru": { + "stringUnit": { + "state": "translated", + "value": "Вставить %@ из" + } } } }, @@ -6648,6 +10716,12 @@ "state": "translated", "value": "Füge eine Repository-URL ein, um loszulegen" } + }, + "ru": { + "stringUnit": { + "state": "translated", + "value": "Вставьте URL-адрес репозитория, чтобы начать." + } } } }, @@ -6658,6 +10732,12 @@ "state": "translated", "value": "In Eingabe einfügen" } + }, + "ru": { + "stringUnit": { + "state": "translated", + "value": "Вставить во вход" + } } } }, @@ -6668,6 +10748,12 @@ "state": "translated", "value": "Über Zwischenablage einfügen (empfohlen)" } + }, + "ru": { + "stringUnit": { + "state": "translated", + "value": "Вставить через буфер обмена (рекомендуется)" + } } } }, @@ -6678,6 +10764,12 @@ "state": "translated", "value": "Geduldig" } + }, + "ru": { + "stringUnit": { + "state": "translated", + "value": "Пациент" + } } } }, @@ -6688,6 +10780,12 @@ "state": "translated", "value": "Pausieren" } + }, + "ru": { + "stringUnit": { + "state": "translated", + "value": "Пауза" + } } } }, @@ -6698,6 +10796,12 @@ "state": "translated", "value": "Pausenerkennung" } + }, + "ru": { + "stringUnit": { + "state": "translated", + "value": "Обнаружение паузы" + } } } }, @@ -6708,6 +10812,12 @@ "state": "translated", "value": "Pausiere zum Senden" } + }, + "ru": { + "stringUnit": { + "state": "translated", + "value": "Пауза для отправки" + } } } }, @@ -6718,6 +10828,12 @@ "state": "translated", "value": "Ausstehend" } + }, + "ru": { + "stringUnit": { + "state": "translated", + "value": "В ожидании" + } } } }, @@ -6728,6 +10844,12 @@ "state": "translated", "value": "Alle Gedächtnisdaten einschließlich Profil, Einträge und Zusammenfassungen dauerhaft löschen." } + }, + "ru": { + "stringUnit": { + "state": "translated", + "value": "Безвозвратно удалите все данные из памяти, включая профиль, записи и сводки." + } } } }, @@ -6738,6 +10860,12 @@ "state": "translated", "value": "Berechtigung erforderlich" } + }, + "ru": { + "stringUnit": { + "state": "translated", + "value": "Требуется разрешение" + } } } }, @@ -6748,6 +10876,12 @@ "state": "translated", "value": "Berechtigungen" } + }, + "ru": { + "stringUnit": { + "state": "translated", + "value": "Разрешения" + } } } }, @@ -6758,6 +10892,12 @@ "state": "translated", "value": "Berechtigungen, Anbieter, Erscheinungsbild" } + }, + "ru": { + "stringUnit": { + "state": "translated", + "value": "Разрешения, провайдеры, внешний вид" + } } } }, @@ -6768,6 +10908,12 @@ "state": "translated", "value": "Erkennt leises Sprechen, wartet länger auf Pausen" } + }, + "ru": { + "stringUnit": { + "state": "translated", + "value": "Подхватывает тихую речь, дольше ждет пауз" + } } } }, @@ -6778,6 +10924,12 @@ "state": "translated", "value": "Bitte fülle alle Pflichtfelder aus" } + }, + "ru": { + "stringUnit": { + "state": "translated", + "value": "Пожалуйста, заполните все обязательные поля" + } } } }, @@ -6788,6 +10940,12 @@ "state": "translated", "value": "Bitte versuche es erneut." } + }, + "ru": { + "stringUnit": { + "state": "translated", + "value": "Пожалуйста, попробуйте еще раз." + } } } }, @@ -6798,9 +10956,15 @@ "state": "translated", "value": "Plugin" } - } - } - }, + }, + "ru": { + "stringUnit": { + "state": "translated", + "value": "Плагин" + } + } + } + }, "Plugin Configuration": { "localizations": { "de": { @@ -6808,6 +10972,12 @@ "state": "translated", "value": "Plugin-Konfiguration" } + }, + "ru": { + "stringUnit": { + "state": "translated", + "value": "Конфигурация плагина" + } } } }, @@ -6818,6 +10988,12 @@ "state": "translated", "value": "Plugin-Erstellung" } + }, + "ru": { + "stringUnit": { + "state": "translated", + "value": "Создание плагина" + } } } }, @@ -6828,6 +11004,12 @@ "state": "translated", "value": "Plugin-Name" } + }, + "ru": { + "stringUnit": { + "state": "translated", + "value": "Имя плагина" + } } } }, @@ -6838,6 +11020,12 @@ "state": "translated", "value": "Plugin-Laufzeitumgebung" } + }, + "ru": { + "stringUnit": { + "state": "translated", + "value": "Время выполнения плагина" + } } } }, @@ -6848,6 +11036,12 @@ "state": "translated", "value": "Plugins" } + }, + "ru": { + "stringUnit": { + "state": "translated", + "value": "Плагины" + } } } }, @@ -6858,6 +11052,12 @@ "state": "translated", "value": "Präferenz" } + }, + "ru": { + "stringUnit": { + "state": "translated", + "value": "Предпочтение" + } } } }, @@ -6868,6 +11068,12 @@ "state": "translated", "value": "Download wird vorbereitet…" } + }, + "ru": { + "stringUnit": { + "state": "translated", + "value": "Подготовка загрузки..." + } } } }, @@ -6878,6 +11084,12 @@ "state": "translated", "value": "Beliebige Tastenkombination drücken" } + }, + "ru": { + "stringUnit": { + "state": "translated", + "value": "Нажмите любую комбинацию клавиш" + } } } }, @@ -6888,6 +11100,12 @@ "state": "translated", "value": "Drücke diesen Kurzbefehl, um Transkription zu starten/stoppen" } + }, + "ru": { + "stringUnit": { + "state": "translated", + "value": "Нажмите этот ярлык, чтобы начать/остановить транскрипцию" + } } } }, @@ -6898,6 +11116,12 @@ "state": "translated", "value": "Drücken zum Sprechen" } + }, + "ru": { + "stringUnit": { + "state": "translated", + "value": "Нажмите, чтобы поговорить" + } } } }, @@ -6908,6 +11132,12 @@ "state": "translated", "value": "Eingebaute Skill-Anweisungen ansehen" } + }, + "ru": { + "stringUnit": { + "state": "translated", + "value": "Предварительный просмотр встроенных инструкций по навыкам" + } } } }, @@ -6918,6 +11148,12 @@ "state": "translated", "value": "Kontext für diesen Agenten vorschauen" } + }, + "ru": { + "stringUnit": { + "state": "translated", + "value": "Предварительный просмотр контекста для этого агента" + } } } }, @@ -6928,6 +11164,12 @@ "state": "translated", "value": "Gedächtnis-Kontext vorschauen" } + }, + "ru": { + "stringUnit": { + "state": "translated", + "value": "Предварительный просмотр контекста памяти" + } } } }, @@ -6938,6 +11180,12 @@ "state": "translated", "value": "Drucken" } + }, + "ru": { + "stringUnit": { + "state": "translated", + "value": "Распечатать" + } } } }, @@ -6948,6 +11196,12 @@ "state": "translated", "value": "Jetzt drucken. Er wird nicht nochmal angezeigt." } + }, + "ru": { + "stringUnit": { + "state": "translated", + "value": "Распечатайте это сейчас. Оно больше не будет показано." + } } } }, @@ -6958,6 +11212,12 @@ "state": "translated", "value": "Standardmäßig privat" } + }, + "ru": { + "stringUnit": { + "state": "translated", + "value": "Частный по умолчанию" + } } } }, @@ -6968,6 +11228,12 @@ "state": "translated", "value": "Geteilte Dateien bei Änderung verarbeiten" } + }, + "ru": { + "stringUnit": { + "state": "translated", + "value": "Обработка общих файлов при изменении" + } } } }, @@ -6978,6 +11244,12 @@ "state": "translated", "value": "Verarbeitet" } + }, + "ru": { + "stringUnit": { + "state": "translated", + "value": "Обработка" + } } } }, @@ -6988,6 +11260,12 @@ "state": "translated", "value": "Produktivitäts-Coach" } + }, + "ru": { + "stringUnit": { + "state": "translated", + "value": "Тренер по продуктивности" + } } } }, @@ -6998,6 +11276,12 @@ "state": "translated", "value": "Profil gespeichert" } + }, + "ru": { + "stringUnit": { + "state": "translated", + "value": "Профиль сохранен." + } } } }, @@ -7008,6 +11292,12 @@ "state": "translated", "value": "Fortschritt" } + }, + "ru": { + "stringUnit": { + "state": "translated", + "value": "Прогресс" + } } } }, @@ -7018,6 +11308,12 @@ "state": "translated", "value": "Prompt-Schnellzugriffe im Leerzustand. Jeden Modus unabhängig anpassen." } + }, + "ru": { + "stringUnit": { + "state": "translated", + "value": "Ярлыки подсказок отображаются в пустом состоянии. Настраивайте каждый режим независимо." + } } } }, @@ -7028,6 +11324,12 @@ "state": "translated", "value": "Anbieter" } + }, + "ru": { + "stringUnit": { + "state": "translated", + "value": "Провайдеры" + } } } }, @@ -7038,6 +11340,12 @@ "state": "translated", "value": "Bietet:" } + }, + "ru": { + "stringUnit": { + "state": "translated", + "value": "Обеспечивает:" + } } } }, @@ -7048,6 +11356,12 @@ "state": "translated", "value": "Folgenachricht einreihen…" } + }, + "ru": { + "stringUnit": { + "state": "translated", + "value": "Поставить в очередь следующее сообщение..." + } } } }, @@ -7058,6 +11372,12 @@ "state": "translated", "value": "Warteschlange:" } + }, + "ru": { + "stringUnit": { + "state": "translated", + "value": "В очереди:" + } } } }, @@ -7068,6 +11388,12 @@ "state": "translated", "value": "Schnellaktionen" } + }, + "ru": { + "stringUnit": { + "state": "translated", + "value": "Быстрые действия" + } } } }, @@ -7078,6 +11404,12 @@ "state": "translated", "value": "Kurzführung" } + }, + "ru": { + "stringUnit": { + "state": "translated", + "value": "Краткое руководство" + } } } }, @@ -7088,6 +11420,12 @@ "state": "translated", "value": "LETZTE CHATS" } + }, + "ru": { + "stringUnit": { + "state": "translated", + "value": "ПОСЛЕДНИЕ ЧАТЫ" + } } } }, @@ -7098,6 +11436,12 @@ "state": "translated", "value": "LETZTE AUFGABEN" } + }, + "ru": { + "stringUnit": { + "state": "translated", + "value": "ПОСЛЕДНИЕ ЗАДАЧИ" + } } } }, @@ -7108,6 +11452,12 @@ "state": "translated", "value": "EMPFOHLEN" } + }, + "ru": { + "stringUnit": { + "state": "translated", + "value": "РЕКОМЕНДУЕТСЯ" + } } } }, @@ -7118,6 +11468,12 @@ "state": "translated", "value": "AUFNAHME" } + }, + "ru": { + "stringUnit": { + "state": "translated", + "value": "ЗАПИСЬ" + } } } }, @@ -7128,6 +11484,12 @@ "state": "translated", "value": "WIEDERHERSTELLUNGSCODE" } + }, + "ru": { + "stringUnit": { + "state": "translated", + "value": "КОД ВОССТАНОВЛЕНИЯ" + } } } }, @@ -7138,6 +11500,12 @@ "state": "translated", "value": "ZEITLIMIT FÜR ANFRAGEN" } + }, + "ru": { + "stringUnit": { + "state": "translated", + "value": "ЗАПРОСИТЬ ТАЙМ-АУТ" + } } } }, @@ -7148,6 +11516,12 @@ "state": "translated", "value": "RESSOURCEN" } + }, + "ru": { + "stringUnit": { + "state": "translated", + "value": "РЕСУРСЫ" + } } } }, @@ -7158,6 +11532,12 @@ "state": "translated", "value": "ERGEBNIS" } + }, + "ru": { + "stringUnit": { + "state": "translated", + "value": "РЕЗУЛЬТАТ" + } } } }, @@ -7168,6 +11548,12 @@ "state": "translated", "value": "Zu viele Anfragen" } + }, + "ru": { + "stringUnit": { + "state": "translated", + "value": "Ограниченная ставка" + } } } }, @@ -7178,6 +11564,12 @@ "state": "translated", "value": "Bereit" } + }, + "ru": { + "stringUnit": { + "state": "translated", + "value": "Готовый" + } } } }, @@ -7188,6 +11580,12 @@ "state": "translated", "value": "Bereit" } + }, + "ru": { + "stringUnit": { + "state": "translated", + "value": "Готов к работе" + } } } }, @@ -7198,6 +11596,12 @@ "state": "translated", "value": "Bereit zum Starten" } + }, + "ru": { + "stringUnit": { + "state": "translated", + "value": "Готов начать" + } } } }, @@ -7208,6 +11612,12 @@ "state": "translated", "value": "Größe neu berechnen" } + }, + "ru": { + "stringUnit": { + "state": "translated", + "value": "Пересчитать размер" + } } } }, @@ -7218,6 +11628,12 @@ "state": "translated", "value": "Vorab-Updates mit neuen Funktionen erhalten, bevor sie allgemein verfügbar sind" } + }, + "ru": { + "stringUnit": { + "state": "translated", + "value": "Получайте предварительные обновления с новыми функциями до того, как они станут общедоступными." + } } } }, @@ -7228,6 +11644,12 @@ "state": "translated", "value": "Empfohlen" } + }, + "ru": { + "stringUnit": { + "state": "translated", + "value": "Рекомендуется" + } } } }, @@ -7238,6 +11660,12 @@ "state": "translated", "value": "Aufnahme…" } + }, + "ru": { + "stringUnit": { + "state": "translated", + "value": "Запись..." + } } } }, @@ -7248,6 +11676,12 @@ "state": "translated", "value": "Aufnahme… Neuen Kurzbefehl drücken" } + }, + "ru": { + "stringUnit": { + "state": "translated", + "value": "Запись… Нажмите новый ярлык." + } } } }, @@ -7258,6 +11692,12 @@ "state": "translated", "value": "Rekursive Überwachung" } + }, + "ru": { + "stringUnit": { + "state": "translated", + "value": "Рекурсивный мониторинг" + } } } }, @@ -7268,6 +11708,12 @@ "state": "translated", "value": "Aktualisieren" } + }, + "ru": { + "stringUnit": { + "state": "translated", + "value": "Обновить" + } } } }, @@ -7278,6 +11724,12 @@ "state": "translated", "value": "Kontext aktualisieren" } + }, + "ru": { + "stringUnit": { + "state": "translated", + "value": "Обновить контекст" + } } } }, @@ -7288,6 +11740,12 @@ "state": "translated", "value": "Agenten aktualisieren" } + }, + "ru": { + "stringUnit": { + "state": "translated", + "value": "Обновить агентов" + } } } }, @@ -7298,6 +11756,12 @@ "state": "translated", "value": "Verfügbare Geräte aktualisieren" } + }, + "ru": { + "stringUnit": { + "state": "translated", + "value": "Обновить доступные устройства" + } } } }, @@ -7308,6 +11772,12 @@ "state": "translated", "value": "Gedächtnisdaten aktualisieren" } + }, + "ru": { + "stringUnit": { + "state": "translated", + "value": "Обновить данные памяти" + } } } }, @@ -7318,6 +11788,12 @@ "state": "translated", "value": "Berechtigungsstatus aktualisieren" } + }, + "ru": { + "stringUnit": { + "state": "translated", + "value": "Обновить статус разрешения" + } } } }, @@ -7328,6 +11804,12 @@ "state": "translated", "value": "Repository aktualisieren" } + }, + "ru": { + "stringUnit": { + "state": "translated", + "value": "Обновить репозиторий" + } } } }, @@ -7338,6 +11820,12 @@ "state": "translated", "value": "Zeitpläne aktualisieren" } + }, + "ru": { + "stringUnit": { + "state": "translated", + "value": "Обновить расписания" + } } } }, @@ -7348,6 +11836,12 @@ "state": "translated", "value": "Aktualisiere..." } + }, + "ru": { + "stringUnit": { + "state": "translated", + "value": "Освежающий..." + } } } }, @@ -7358,6 +11852,12 @@ "state": "translated", "value": "Neu generieren" } + }, + "ru": { + "stringUnit": { + "state": "translated", + "value": "Регенерировать" + } } } }, @@ -7368,6 +11868,12 @@ "state": "translated", "value": "Integrierte neu installieren" } + }, + "ru": { + "stringUnit": { + "state": "translated", + "value": "Переустановите встроенные модули" + } } } }, @@ -7378,6 +11884,12 @@ "state": "translated", "value": "Beziehung" } + }, + "ru": { + "stringUnit": { + "state": "translated", + "value": "Отношение" + } } } }, @@ -7388,6 +11900,12 @@ "state": "translated", "value": "Relays" } + }, + "ru": { + "stringUnit": { + "state": "translated", + "value": "Реле" + } } } }, @@ -7398,6 +11916,12 @@ "state": "translated", "value": "Erinnerungen" } + }, + "ru": { + "stringUnit": { + "state": "translated", + "value": "Напоминания" + } } } }, @@ -7408,6 +11932,12 @@ "state": "translated", "value": "Entfernen" } + }, + "ru": { + "stringUnit": { + "state": "translated", + "value": "Удалять" + } } } }, @@ -7418,6 +11948,12 @@ "state": "translated", "value": "Container entfernen?" } + }, + "ru": { + "stringUnit": { + "state": "translated", + "value": "Удалить контейнер?" + } } } }, @@ -7428,7 +11964,13 @@ "state": "translated", "value": "Bild entfernen" } - } + }, + "ru": { + "stringUnit": { + "state": "translated", + "value": "Удалить изображение" + } + } } }, "Remove Plugin?": { @@ -7438,6 +11980,12 @@ "state": "translated", "value": "Plugin entfernen?" } + }, + "ru": { + "stringUnit": { + "state": "translated", + "value": "Удалить плагин?" + } } } }, @@ -7448,6 +11996,12 @@ "state": "translated", "value": "Datei entfernen" } + }, + "ru": { + "stringUnit": { + "state": "translated", + "value": "Удалить файл" + } } } }, @@ -7458,6 +12012,12 @@ "state": "translated", "value": "Umbenennen" } + }, + "ru": { + "stringUnit": { + "state": "translated", + "value": "Переименовать" + } } } }, @@ -7468,6 +12028,12 @@ "state": "translated", "value": "Screenshots umbenennen und organisieren" } + }, + "ru": { + "stringUnit": { + "state": "translated", + "value": "Переименовывайте и систематизируйте снимки экрана" + } } } }, @@ -7478,6 +12044,12 @@ "state": "translated", "value": "Ersetze Pfad-Parameter durch echte Werte. Teste mit curl oder deinem HTTP-Client." } + }, + "ru": { + "stringUnit": { + "state": "translated", + "value": "Замените параметры пути реальными значениями. Протестируйте через Curl или ваш HTTP-клиент." + } } } }, @@ -7488,6 +12060,12 @@ "state": "translated", "value": "Problem melden…" } + }, + "ru": { + "stringUnit": { + "state": "translated", + "value": "Сообщить о проблеме…" + } } } }, @@ -7498,6 +12076,12 @@ "state": "translated", "value": "Anfrage" } + }, + "ru": { + "stringUnit": { + "state": "translated", + "value": "Запрос" + } } } }, @@ -7508,6 +12092,12 @@ "state": "translated", "value": "Zeitüberschreitung" } + }, + "ru": { + "stringUnit": { + "state": "translated", + "value": "Время запроса истекло" + } } } }, @@ -7518,6 +12108,12 @@ "state": "translated", "value": "Erforderliche Dateien" } + }, + "ru": { + "stringUnit": { + "state": "translated", + "value": "Необходимые файлы" + } } } }, @@ -7528,6 +12124,12 @@ "state": "translated", "value": "Erfordert lauteres Sprechen, schnellere Reaktion" } + }, + "ru": { + "stringUnit": { + "state": "translated", + "value": "Требуется более громкая речь и более быстрая реакция." + } } } }, @@ -7538,6 +12140,12 @@ "state": "translated", "value": "Recherchiere " } + }, + "ru": { + "stringUnit": { + "state": "translated", + "value": "Исследовать" + } } } }, @@ -7548,6 +12156,12 @@ "state": "translated", "value": "Forschungsanalyst" } + }, + "ru": { + "stringUnit": { + "state": "translated", + "value": "Аналитик-исследователь" + } } } }, @@ -7558,6 +12172,12 @@ "state": "translated", "value": "Thema recherchieren" } + }, + "ru": { + "stringUnit": { + "state": "translated", + "value": "Исследование темы" + } } } }, @@ -7568,6 +12188,12 @@ "state": "translated", "value": "Zurücksetzen" } + }, + "ru": { + "stringUnit": { + "state": "translated", + "value": "Перезагрузить" + } } } }, @@ -7578,6 +12204,12 @@ "state": "translated", "value": "Alles auf Standard zurücksetzen" } + }, + "ru": { + "stringUnit": { + "state": "translated", + "value": "Сбросить все по умолчанию" + } } } }, @@ -7588,6 +12220,12 @@ "state": "translated", "value": "Container zurücksetzen?" } + }, + "ru": { + "stringUnit": { + "state": "translated", + "value": "Сбросить контейнер?" + } } } }, @@ -7598,6 +12236,12 @@ "state": "translated", "value": "Alle Arbeits-Tool-Berechtigungen auf Standard zurücksetzen" } + }, + "ru": { + "stringUnit": { + "state": "translated", + "value": "Сбросить все разрешения рабочего инструмента по умолчанию" + } } } }, @@ -7608,6 +12252,12 @@ "state": "translated", "value": "Auf Standard zurücksetzen" } + }, + "ru": { + "stringUnit": { + "state": "translated", + "value": "Сбросить настройки по умолчанию" + } } } }, @@ -7618,6 +12268,12 @@ "state": "translated", "value": "Auf Standards zurücksetzen" } + }, + "ru": { + "stringUnit": { + "state": "translated", + "value": "Сброс к настройкам по умолчанию" + } } } }, @@ -7628,6 +12284,12 @@ "state": "translated", "value": "Auf Standard zurücksetzen" } + }, + "ru": { + "stringUnit": { + "state": "translated", + "value": "Сбросить настройки по умолчанию" + } } } }, @@ -7638,6 +12300,12 @@ "state": "translated", "value": "Auf Standardverzeichnis zurücksetzen" } + }, + "ru": { + "stringUnit": { + "state": "translated", + "value": "Сброс в каталог по умолчанию" + } } } }, @@ -7648,6 +12316,12 @@ "state": "translated", "value": "Osaurus wird zurückgesetzt" } + }, + "ru": { + "stringUnit": { + "state": "translated", + "value": "Сброс приложения Osaurus" + } } } }, @@ -7658,6 +12332,12 @@ "state": "translated", "value": "Das Zurücksetzen zerstört alle installierten Sandbox-Pakete. Agent-Arbeitsbereichsdateien auf dem Host bleiben erhalten." } + }, + "ru": { + "stringUnit": { + "state": "translated", + "value": "Сброс уничтожает все установленные пакеты песочницы. Файлы рабочей области агента на хосте сохраняются." + } } } }, @@ -7668,6 +12348,12 @@ "state": "translated", "value": "Antwort" } + }, + "ru": { + "stringUnit": { + "state": "translated", + "value": "Ответ" + } } } }, @@ -7678,6 +12364,12 @@ "state": "translated", "value": "Reaktionszeit" } + }, + "ru": { + "stringUnit": { + "state": "translated", + "value": "Отзывчивость" + } } } }, @@ -7688,6 +12380,12 @@ "state": "translated", "value": "Startet neu" } + }, + "ru": { + "stringUnit": { + "state": "translated", + "value": "Перезапуск" + } } } }, @@ -7698,6 +12396,12 @@ "state": "translated", "value": "Server wird neugestartet…" } + }, + "ru": { + "stringUnit": { + "state": "translated", + "value": "Перезапуск сервера..." + } } } }, @@ -7708,6 +12412,12 @@ "state": "translated", "value": "Startet neu…" } + }, + "ru": { + "stringUnit": { + "state": "translated", + "value": "Перезапуск..." + } } } }, @@ -7718,6 +12428,12 @@ "state": "translated", "value": "Ansicht zurücksetzen" } + }, + "ru": { + "stringUnit": { + "state": "translated", + "value": "Восстановить настройки просмотра по умолчанию" + } } } }, @@ -7728,6 +12444,12 @@ "state": "translated", "value": "Nur-Ansicht-Einstellungen auf empfohlene Standards zurücksetzen (beeinflusst gespeicherte Konfiguration nicht)" } + }, + "ru": { + "stringUnit": { + "state": "translated", + "value": "Восстановить настройки только для просмотра до рекомендуемых значений по умолчанию (не влияет на сохраненную конфигурацию)" + } } } }, @@ -7738,6 +12460,12 @@ "state": "translated", "value": "Ergebnis" } + }, + "ru": { + "stringUnit": { + "state": "translated", + "value": "Результат" + } } } }, @@ -7748,6 +12476,12 @@ "state": "translated", "value": "Fortsetzen" } + }, + "ru": { + "stringUnit": { + "state": "translated", + "value": "Резюме" + } } } }, @@ -7758,6 +12492,12 @@ "state": "translated", "value": "Erneut versuchen" } + }, + "ru": { + "stringUnit": { + "state": "translated", + "value": "Повторить попытку" + } } } }, @@ -7768,6 +12508,12 @@ "state": "translated", "value": "Server-Start wiederholen" } + }, + "ru": { + "stringUnit": { + "state": "translated", + "value": "Повторите запуск сервера" + } } } }, @@ -7778,6 +12524,12 @@ "state": "translated", "value": "Im Finder anzeigen" } + }, + "ru": { + "stringUnit": { + "state": "translated", + "value": "Показать в Finder" + } } } }, @@ -7788,6 +12540,12 @@ "state": "translated", "value": "Im Finder anzeigen oder als PDF exportieren" } + }, + "ru": { + "stringUnit": { + "state": "translated", + "value": "Покажите в Finder или экспортируйте в PDF" + } } } }, @@ -7798,6 +12556,12 @@ "state": "translated", "value": "Widerrufen" } + }, + "ru": { + "stringUnit": { + "state": "translated", + "value": "Отозвать" + } } } }, @@ -7808,6 +12572,12 @@ "state": "translated", "value": "Routen" } + }, + "ru": { + "stringUnit": { + "state": "translated", + "value": "Маршруты" + } } } }, @@ -7818,6 +12588,12 @@ "state": "translated", "value": "LLMs lokal ausführen" } + }, + "ru": { + "stringUnit": { + "state": "translated", + "value": "Запускайте LLM локально" + } } } }, @@ -7828,6 +12604,12 @@ "state": "translated", "value": "Jetzt ausführen" } + }, + "ru": { + "stringUnit": { + "state": "translated", + "value": "Беги сейчас" + } } } }, @@ -7838,6 +12620,12 @@ "state": "translated", "value": "Diagnosetest zur Überprüfung der Berechtigung ausführen" } + }, + "ru": { + "stringUnit": { + "state": "translated", + "value": "Запустите диагностический тест, чтобы проверить разрешение" + } } } }, @@ -7848,6 +12636,12 @@ "state": "translated", "value": "Code in einem sicheren Linux-Container ausführen" } + }, + "ru": { + "stringUnit": { + "state": "translated", + "value": "Запускайте код в безопасном контейнере Linux" + } } } }, @@ -7858,6 +12652,12 @@ "state": "translated", "value": "Nur in der Menüleiste ausführen (Neustart erforderlich)" } + }, + "ru": { + "stringUnit": { + "state": "translated", + "value": "Запускать только в строке меню (требуется перезагрузка)" + } } } }, @@ -7868,6 +12668,12 @@ "state": "translated", "value": "Isolierte Linux-Container für Agent-Plugins und autonome Ausführung." } + }, + "ru": { + "stringUnit": { + "state": "translated", + "value": "Запускайте изолированные контейнеры Linux для подключаемых модулей агентов и автономного выполнения." + } } } }, @@ -7878,6 +12684,12 @@ "state": "translated", "value": "Läuft" } + }, + "ru": { + "stringUnit": { + "state": "translated", + "value": "Бег" + } } } }, @@ -7888,6 +12700,12 @@ "state": "translated", "value": "Läuft auf Port %@" } + }, + "ru": { + "stringUnit": { + "state": "translated", + "value": "Запуск на порту %@" + } } } }, @@ -7898,6 +12716,12 @@ "state": "translated", "value": "Läuft gut" } + }, + "ru": { + "stringUnit": { + "state": "translated", + "value": "Хорошо работает" + } } } }, @@ -7908,6 +12732,12 @@ "state": "translated", "value": "Läuft komplett auf deinem Mac. Kein Konto nötig." } + }, + "ru": { + "stringUnit": { + "state": "translated", + "value": "Полностью работает на вашем Mac. Учетная запись не нужна." + } } } }, @@ -7918,6 +12748,12 @@ "state": "translated", "value": "Läuft komplett auf deinem Mac. Keine Daten verlassen deinen Computer." } + }, + "ru": { + "stringUnit": { + "state": "translated", + "value": "Полностью работает на вашем Mac. Данные не покидают ваш компьютер." + } } } }, @@ -7928,6 +12764,12 @@ "state": "translated", "value": "QUELLE" } + }, + "ru": { + "stringUnit": { + "state": "translated", + "value": "ИСТОЧНИК" + } } } }, @@ -7938,6 +12780,12 @@ "state": "translated", "value": "STATUS" } + }, + "ru": { + "stringUnit": { + "state": "translated", + "value": "СТАТУС" + } } } }, @@ -7948,6 +12796,12 @@ "state": "translated", "value": "Sichere, isolierte Ausführung" } + }, + "ru": { + "stringUnit": { + "state": "translated", + "value": "Безопасное изолированное выполнение" + } } } }, @@ -7958,6 +12812,12 @@ "state": "translated", "value": "Sandbox" } + }, + "ru": { + "stringUnit": { + "state": "translated", + "value": "Песочница" + } } } }, @@ -7968,6 +12828,12 @@ "state": "translated", "value": "Sandbox-Bereinigung" } + }, + "ru": { + "stringUnit": { + "state": "translated", + "value": "Очистка песочницы" + } } } }, @@ -7978,6 +12844,12 @@ "state": "translated", "value": "Sandbox-Plugins" } + }, + "ru": { + "stringUnit": { + "state": "translated", + "value": "Плагины песочницы" + } } } }, @@ -7988,6 +12860,12 @@ "state": "translated", "value": "Sandbox nicht verfügbar" } + }, + "ru": { + "stringUnit": { + "state": "translated", + "value": "Песочница недоступна" + } } } }, @@ -7998,6 +12876,12 @@ "state": "translated", "value": "Sandbox aktiviert — Container läuft nicht" } + }, + "ru": { + "stringUnit": { + "state": "translated", + "value": "Песочница включена — контейнер не запущен" + } } } }, @@ -8008,6 +12892,12 @@ "state": "translated", "value": "Sandbox ist aktiv — klicken zum Deaktivieren. Rechtsklick für Einstellungen." } + }, + "ru": { + "stringUnit": { + "state": "translated", + "value": "Песочница активна — нажмите, чтобы отключить. Щелкните правой кнопкой мыши для настроек." + } } } }, @@ -8018,6 +12908,12 @@ "state": "translated", "value": "Sandbox ist auf diesem System nicht verfügbar" } + }, + "ru": { + "stringUnit": { + "state": "translated", + "value": "Песочница недоступна в этой системе" + } } } }, @@ -8028,6 +12924,12 @@ "state": "translated", "value": "Sandbox startet…" } + }, + "ru": { + "stringUnit": { + "state": "translated", + "value": "Песочница запускается…" + } } } }, @@ -8038,6 +12940,12 @@ "state": "translated", "value": "Sandbox erfordert macOS 26 oder neuer." } + }, + "ru": { + "stringUnit": { + "state": "translated", + "value": "Для песочницы требуется macOS 26 или новее." + } } } }, @@ -8048,6 +12956,12 @@ "state": "translated", "value": "Sandbox erfordert macOS 26+. Native Plugins funktionieren normal." } + }, + "ru": { + "stringUnit": { + "state": "translated", + "value": "Для песочницы требуется macOS 26+. Родные плагины работают нормально." + } } } }, @@ -8058,9 +12972,15 @@ "state": "translated", "value": "Speichern" } - } - } - }, + }, + "ru": { + "stringUnit": { + "state": "translated", + "value": "Сохранять" + } + } + } + }, "Save Changes": { "localizations": { "de": { @@ -8068,6 +12988,12 @@ "state": "translated", "value": "Änderungen speichern" } + }, + "ru": { + "stringUnit": { + "state": "translated", + "value": "Сохранить изменения" + } } } }, @@ -8078,6 +13004,12 @@ "state": "translated", "value": "Bild speichern" } + }, + "ru": { + "stringUnit": { + "state": "translated", + "value": "Сохранить изображение" + } } } }, @@ -8088,6 +13020,12 @@ "state": "translated", "value": "Bild speichern…" } + }, + "ru": { + "stringUnit": { + "state": "translated", + "value": "Сохранить изображение…" + } } } }, @@ -8098,6 +13036,12 @@ "state": "translated", "value": "Speichere diesen Wiederherstellungscode. Er wird nicht nochmal angezeigt." } + }, + "ru": { + "stringUnit": { + "state": "translated", + "value": "Сохраните этот код восстановления. Оно больше не будет показано." + } } } }, @@ -8108,6 +13052,12 @@ "state": "translated", "value": "Speichere deinen Wiederherstellungscode" } + }, + "ru": { + "stringUnit": { + "state": "translated", + "value": "Сохраните код восстановления" + } } } }, @@ -8118,6 +13068,12 @@ "state": "translated", "value": "Gespeichert" } + }, + "ru": { + "stringUnit": { + "state": "translated", + "value": "Сохранено" + } } } }, @@ -8128,6 +13084,12 @@ "state": "translated", "value": "Gespeichert!" } + }, + "ru": { + "stringUnit": { + "state": "translated", + "value": "Спасено!" + } } } }, @@ -8138,6 +13100,12 @@ "state": "translated", "value": "Geplant für" } + }, + "ru": { + "stringUnit": { + "state": "translated", + "value": "Запланировано на" + } } } }, @@ -8148,6 +13116,12 @@ "state": "translated", "value": "Zeitpläne" } + }, + "ru": { + "stringUnit": { + "state": "translated", + "value": "Расписания" + } } } }, @@ -8158,6 +13132,12 @@ "state": "translated", "value": "Bildschirmaufnahme" } + }, + "ru": { + "stringUnit": { + "state": "translated", + "value": "Запись экрана" + } } } }, @@ -8168,6 +13148,12 @@ "state": "translated", "value": "Screenshot-Manager" } + }, + "ru": { + "stringUnit": { + "state": "translated", + "value": "Менеджер скриншотов" + } } } }, @@ -8178,6 +13164,12 @@ "state": "translated", "value": "Suchen" } + }, + "ru": { + "stringUnit": { + "state": "translated", + "value": "Поиск" + } } } }, @@ -8188,6 +13180,12 @@ "state": "translated", "value": "Einstellungen durchsuchen" } + }, + "ru": { + "stringUnit": { + "state": "translated", + "value": "Настройки поиска" + } } } }, @@ -8198,6 +13196,12 @@ "state": "translated", "value": "Chats suchen…" } + }, + "ru": { + "stringUnit": { + "state": "translated", + "value": "Поиск в чатах..." + } } } }, @@ -8208,6 +13212,12 @@ "state": "translated", "value": "Gespräche suchen…" } + }, + "ru": { + "stringUnit": { + "state": "translated", + "value": "Поиск разговоров..." + } } } }, @@ -8218,6 +13228,12 @@ "state": "translated", "value": "Endpunkte suchen" } + }, + "ru": { + "stringUnit": { + "state": "translated", + "value": "Поиск конечных точек" + } } } }, @@ -8228,6 +13244,12 @@ "state": "translated", "value": "Einträge durchsuchen…" } + }, + "ru": { + "stringUnit": { + "state": "translated", + "value": "Поиск записей..." + } } } }, @@ -8238,6 +13260,12 @@ "state": "translated", "value": "Modelle suchen" } + }, + "ru": { + "stringUnit": { + "state": "translated", + "value": "Поиск моделей" + } } } }, @@ -8248,6 +13276,12 @@ "state": "translated", "value": "Modelle suchen…" } + }, + "ru": { + "stringUnit": { + "state": "translated", + "value": "Поиск моделей..." + } } } }, @@ -8258,6 +13292,12 @@ "state": "translated", "value": "Pfad oder Modell suchen…" } + }, + "ru": { + "stringUnit": { + "state": "translated", + "value": "Путь поиска или модель..." + } } } }, @@ -8268,6 +13308,12 @@ "state": "translated", "value": "Plugins suchen" } + }, + "ru": { + "stringUnit": { + "state": "translated", + "value": "Поиск плагинов" + } } } }, @@ -8278,6 +13324,12 @@ "state": "translated", "value": "Aufgaben suchen…" } + }, + "ru": { + "stringUnit": { + "state": "translated", + "value": "Поиск задач..." + } } } }, @@ -8288,6 +13340,12 @@ "state": "translated", "value": "Tools und Skills suchen…" } + }, + "ru": { + "stringUnit": { + "state": "translated", + "value": "Инструменты и навыки поиска..." + } } } }, @@ -8298,6 +13356,12 @@ "state": "translated", "value": "Suchen…" } + }, + "ru": { + "stringUnit": { + "state": "translated", + "value": "Поиск..." + } } } }, @@ -8308,6 +13372,12 @@ "state": "translated", "value": "Geheimer Prompt" } + }, + "ru": { + "stringUnit": { + "state": "translated", + "value": "Секретная подсказка" + } } } }, @@ -8318,6 +13388,12 @@ "state": "translated", "value": "Geheimnis erforderlich" } + }, + "ru": { + "stringUnit": { + "state": "translated", + "value": "Требуется секрет" + } } } }, @@ -8328,6 +13404,12 @@ "state": "translated", "value": "Entdecke was Osaurus kann" } + }, + "ru": { + "stringUnit": { + "state": "translated", + "value": "Посмотрите, что умеет Osaurus" + } } } }, @@ -8338,6 +13420,12 @@ "state": "translated", "value": "Alles auswählen" } + }, + "ru": { + "stringUnit": { + "state": "translated", + "value": "Выбрать все" + } } } }, @@ -8348,6 +13436,12 @@ "state": "translated", "value": "Eingabegerät auswählen" } + }, + "ru": { + "stringUnit": { + "state": "translated", + "value": "Выберите устройство ввода" + } } } }, @@ -8358,6 +13452,12 @@ "state": "translated", "value": "Modell auswählen" } + }, + "ru": { + "stringUnit": { + "state": "translated", + "value": "Выберите модель" + } } } }, @@ -8368,6 +13468,12 @@ "state": "translated", "value": "Wähle ein Issue aus, um Details zu sehen, oder starte es für die Live-Ausführung." } + }, + "ru": { + "stringUnit": { + "state": "translated", + "value": "Выберите задачу, чтобы просмотреть подробности, или запустите ее, чтобы увидеть выполнение в реальном времени." + } } } }, @@ -8378,6 +13484,12 @@ "state": "translated", "value": "Option auswählen" } + }, + "ru": { + "stringUnit": { + "state": "translated", + "value": "Выберите вариант" + } } } }, @@ -8388,6 +13500,12 @@ "state": "translated", "value": "Wähle mindestens einen Agenten, um VAD zu aktivieren" } + }, + "ru": { + "stringUnit": { + "state": "translated", + "value": "Выберите хотя бы один агент, чтобы включить VAD." + } } } }, @@ -8398,6 +13516,12 @@ "state": "translated", "value": "Eigenes Verzeichnis auswählen" } + }, + "ru": { + "stringUnit": { + "state": "translated", + "value": "Выберите собственный каталог" + } } } }, @@ -8408,6 +13532,12 @@ "state": "translated", "value": "Wähle welche Agenten per Stimme aktiviert werden können" } + }, + "ru": { + "stringUnit": { + "state": "translated", + "value": "Выберите, какие агенты можно активировать голосом" + } } } }, @@ -8418,6 +13548,12 @@ "state": "translated", "value": "Ausgewähltes Modell ist veraltet." } + }, + "ru": { + "stringUnit": { + "state": "translated", + "value": "Выбранная модель устарела." + } } } }, @@ -8428,6 +13564,12 @@ "state": "translated", "value": "Jetzt senden" } + }, + "ru": { + "stringUnit": { + "state": "translated", + "value": "Отправить сейчас" + } } } }, @@ -8438,6 +13580,12 @@ "state": "translated", "value": "Wird gesendet…" } + }, + "ru": { + "stringUnit": { + "state": "translated", + "value": "Отправка..." + } } } }, @@ -8448,6 +13596,12 @@ "state": "translated", "value": "Empfindlichkeitsstufe" } + }, + "ru": { + "stringUnit": { + "state": "translated", + "value": "Уровень чувствительности" + } } } }, @@ -8458,6 +13612,12 @@ "state": "translated", "value": "Separates Dateisystem pro Agent" } + }, + "ru": { + "stringUnit": { + "state": "translated", + "value": "Отдельная файловая система для каждого агента" + } } } }, @@ -8468,6 +13628,12 @@ "state": "translated", "value": "Server" } + }, + "ru": { + "stringUnit": { + "state": "translated", + "value": "Сервер" + } } } }, @@ -8478,6 +13644,12 @@ "state": "translated", "value": "Serverfehler" } + }, + "ru": { + "stringUnit": { + "state": "translated", + "value": "Ошибка сервера" + } } } }, @@ -8488,6 +13660,12 @@ "state": "translated", "value": "Server läuft" } + }, + "ru": { + "stringUnit": { + "state": "translated", + "value": "Сервер работает" + } } } }, @@ -8498,6 +13676,12 @@ "state": "translated", "value": "Server gestoppt" } + }, + "ru": { + "stringUnit": { + "state": "translated", + "value": "Сервер остановлен" + } } } }, @@ -8508,6 +13692,12 @@ "state": "translated", "value": "Server-URL" } + }, + "ru": { + "stringUnit": { + "state": "translated", + "value": "URL-адрес сервера" + } } } }, @@ -8518,6 +13708,12 @@ "state": "translated", "value": "Server ist gesperrt" } + }, + "ru": { + "stringUnit": { + "state": "translated", + "value": "Сервер заблокирован" + } } } }, @@ -8528,6 +13724,12 @@ "state": "translated", "value": "Server läuft nicht" } + }, + "ru": { + "stringUnit": { + "state": "translated", + "value": "Сервер не запущен" + } } } }, @@ -8538,6 +13740,12 @@ "state": "translated", "value": "Server läuft" } + }, + "ru": { + "stringUnit": { + "state": "translated", + "value": "Сервер работает" + } } } }, @@ -8548,6 +13756,12 @@ "state": "translated", "value": "Sitzung gesamt" } + }, + "ru": { + "stringUnit": { + "state": "translated", + "value": "Всего сеансов" + } } } }, @@ -8558,6 +13772,12 @@ "state": "translated", "value": "Als Standard setzen" } + }, + "ru": { + "stringUnit": { + "state": "translated", + "value": "Установить по умолчанию" + } } } }, @@ -8568,6 +13788,12 @@ "state": "translated", "value": "Sandbox einrichten" } + }, + "ru": { + "stringUnit": { + "state": "translated", + "value": "Настроить песочницу" + } } } }, @@ -8578,6 +13804,12 @@ "state": "translated", "value": "Setze einen Hotkey, um den Transkriptionsmodus zu aktivieren" } + }, + "ru": { + "stringUnit": { + "state": "translated", + "value": "Установите горячую клавишу для включения режима транскрипции" + } } } }, @@ -8588,6 +13820,12 @@ "state": "translated", "value": "Richte automatisierte KI-Aufgaben ein, die nach deinem Zeitplan laufen." } + }, + "ru": { + "stringUnit": { + "state": "translated", + "value": "Настройте автоматические задачи ИИ, которые выполняются по вашему расписанию." + } } } }, @@ -8598,6 +13836,12 @@ "state": "translated", "value": "Anweisungen, Modell-Einstellungen, Tastenkürzel und Erscheinungsbild einrichten." } + }, + "ru": { + "stringUnit": { + "state": "translated", + "value": "Настройте инструкции, настройки модели, ярлыки и внешний вид." + } } } }, @@ -8608,6 +13852,12 @@ "state": "translated", "value": "Zeitpläne und Datei-Watcher für autonomes Verhalten einrichten." } + }, + "ru": { + "stringUnit": { + "state": "translated", + "value": "Настройте расписания и средства наблюдения за файлами для автономного поведения." + } } } }, @@ -8618,6 +13868,12 @@ "state": "translated", "value": "Richte die Identität dieses Agenten im Identität-Tab ein" } + }, + "ru": { + "stringUnit": { + "state": "translated", + "value": "Настройте личность этого агента на вкладке «Идентификация»." + } } } }, @@ -8628,6 +13884,12 @@ "state": "translated", "value": "Richte deine Osaurus-Identität ein" } + }, + "ru": { + "stringUnit": { + "state": "translated", + "value": "Настройте свою идентичность в Osaurus" + } } } }, @@ -8638,6 +13900,12 @@ "state": "translated", "value": "Sandbox wird eingerichtet" } + }, + "ru": { + "stringUnit": { + "state": "translated", + "value": "Настройка песочницы" + } } } }, @@ -8648,6 +13916,12 @@ "state": "translated", "value": "Einstellungen" } + }, + "ru": { + "stringUnit": { + "state": "translated", + "value": "Настройки" + } } } }, @@ -8658,6 +13932,12 @@ "state": "translated", "value": "Einstellungen…" } + }, + "ru": { + "stringUnit": { + "state": "translated", + "value": "Настройки…" + } } } }, @@ -8668,6 +13948,12 @@ "state": "translated", "value": "Einrichtung" } + }, + "ru": { + "stringUnit": { + "state": "translated", + "value": "Настраивать" + } } } }, @@ -8678,6 +13964,12 @@ "state": "translated", "value": "Einrichtung erforderlich" } + }, + "ru": { + "stringUnit": { + "state": "translated", + "value": "Требуется настройка" + } } } }, @@ -8688,7 +13980,13 @@ "state": "translated", "value": "Schattenposition" } - } + }, + "ru": { + "stringUnit": { + "state": "translated", + "value": "Позиция тени" + } + } } }, "Shadows": { @@ -8698,6 +13996,12 @@ "state": "translated", "value": "Schatten" } + }, + "ru": { + "stringUnit": { + "state": "translated", + "value": "Тени" + } } } }, @@ -8708,6 +14012,12 @@ "state": "translated", "value": "Shell-Befehl nach Installation der Abhängigkeiten" } + }, + "ru": { + "stringUnit": { + "state": "translated", + "value": "Команда оболочки запускается после установки зависимостей" + } } } }, @@ -8718,6 +14028,12 @@ "state": "translated", "value": "Auszuführender Shell-Befehl" } + }, + "ru": { + "stringUnit": { + "state": "translated", + "value": "Команда оболочки для выполнения" + } } } }, @@ -8728,6 +14044,12 @@ "state": "translated", "value": "Schimmernder Fortschrittsbalken" } + }, + "ru": { + "stringUnit": { + "state": "translated", + "value": "Мерцающий индикатор выполнения" + } } } }, @@ -8738,6 +14060,12 @@ "state": "translated", "value": "Kurzbeschreibung" } + }, + "ru": { + "stringUnit": { + "state": "translated", + "value": "Краткое описание" + } } } }, @@ -8748,6 +14076,12 @@ "state": "translated", "value": "Alle anzeigen" } + }, + "ru": { + "stringUnit": { + "state": "translated", + "value": "Показать все" + } } } }, @@ -8758,6 +14092,12 @@ "state": "translated", "value": "Weniger anzeigen" } + }, + "ru": { + "stringUnit": { + "state": "translated", + "value": "Показать меньше" + } } } }, @@ -8768,6 +14108,12 @@ "state": "translated", "value": "Toast-Benachrichtigungen anzeigen" } + }, + "ru": { + "stringUnit": { + "state": "translated", + "value": "Показать всплывающие уведомления" + } } } }, @@ -8778,6 +14124,12 @@ "state": "translated", "value": "Seitenleiste" } + }, + "ru": { + "stringUnit": { + "state": "translated", + "value": "Боковая панель" + } } } }, @@ -8788,6 +14140,12 @@ "state": "translated", "value": "Stille-Zeitlimit" } + }, + "ru": { + "stringUnit": { + "state": "translated", + "value": "Тайм-аут тишины" + } } } }, @@ -8798,6 +14156,12 @@ "state": "translated", "value": "Einmalig verwendbar" } + }, + "ru": { + "stringUnit": { + "state": "translated", + "value": "Одноразовое использование — расходуется при восстановлении." + } } } }, @@ -8808,6 +14172,12 @@ "state": "translated", "value": "Fähigkeit" } + }, + "ru": { + "stringUnit": { + "state": "translated", + "value": "Навык" + } } } }, @@ -8818,6 +14188,12 @@ "state": "translated", "value": "Skill ist verfügbar" } + }, + "ru": { + "stringUnit": { + "state": "translated", + "value": "Навык доступен для использования" + } } } }, @@ -8828,6 +14204,12 @@ "state": "translated", "value": "Skill ist ausgeblendet" } + }, + "ru": { + "stringUnit": { + "state": "translated", + "value": "Навык скрыт" + } } } }, @@ -8838,6 +14220,12 @@ "state": "translated", "value": "Skills" } + }, + "ru": { + "stringUnit": { + "state": "translated", + "value": "Навыки" + } } } }, @@ -8848,6 +14236,12 @@ "state": "translated", "value": "Skills bieten spezialisiertes Wissen und Anleitungen für die KI." } + }, + "ru": { + "stringUnit": { + "state": "translated", + "value": "Навыки предоставляют ИИ специальные знания и рекомендации." + } } } }, @@ -8858,6 +14252,12 @@ "state": "translated", "value": "Überspringen" } + }, + "ru": { + "stringUnit": { + "state": "translated", + "value": "Пропускать" + } } } }, @@ -8868,6 +14268,12 @@ "state": "translated", "value": "Erstmal überspringen" } + }, + "ru": { + "stringUnit": { + "state": "translated", + "value": "Пропустить сейчас" + } } } }, @@ -8878,6 +14284,12 @@ "state": "translated", "value": "Klein" } + }, + "ru": { + "stringUnit": { + "state": "translated", + "value": "Маленький" + } } } }, @@ -8888,6 +14300,12 @@ "state": "translated", "value": "Klein (<2 GB)" } + }, + "ru": { + "stringUnit": { + "state": "translated", + "value": "Маленький (<2 ГБ)" + } } } }, @@ -8898,6 +14316,12 @@ "state": "translated", "value": "Einfarbig" } + }, + "ru": { + "stringUnit": { + "state": "translated", + "value": "Твердый" + } } } }, @@ -8908,6 +14332,12 @@ "state": "translated", "value": "Einfarbiger Hintergrund" } + }, + "ru": { + "stringUnit": { + "state": "translated", + "value": "Сплошной фон" + } } } }, @@ -8918,6 +14348,12 @@ "state": "translated", "value": "Einige heruntergeladene Modelle wurden durch verbesserte OsaurusAI-Versionen ersetzt, die bekannte Fehler beheben." } + }, + "ru": { + "stringUnit": { + "state": "translated", + "value": "Некоторые загруженные модели заменены улучшенными версиями OsaurusAI, исправляющими известные ошибки." + } } } }, @@ -8928,6 +14364,12 @@ "state": "translated", "value": "Etwas ist schiefgelaufen" } + }, + "ru": { + "stringUnit": { + "state": "translated", + "value": "Что-то пошло не так" + } } } }, @@ -8938,6 +14380,12 @@ "state": "translated", "value": "Etwas ist schiefgelaufen" } + }, + "ru": { + "stringUnit": { + "state": "translated", + "value": "Что-то пошло не так" + } } } }, @@ -8948,6 +14396,12 @@ "state": "translated", "value": "Beim Zugriff auf den Browser ist etwas schiefgelaufen. Vermutlich ein vorübergehendes Problem." } + }, + "ru": { + "stringUnit": { + "state": "translated", + "value": "Что-то пошло не так при взаимодействии с браузером. Возможно, это временная проблема." + } } } }, @@ -8958,6 +14412,12 @@ "state": "translated", "value": "Sprich einen Agentennamen, um die Erkennung zu testen" } + }, + "ru": { + "stringUnit": { + "state": "translated", + "value": "Произнесите имя агента, чтобы проверить обнаружение." + } } } }, @@ -8968,6 +14428,12 @@ "state": "translated", "value": "Spezialisiertes Wissen und Anleitungen für die KI" } + }, + "ru": { + "stringUnit": { + "state": "translated", + "value": "Специализированные знания и рекомендации для ИИ" + } } } }, @@ -8978,6 +14444,12 @@ "state": "translated", "value": "Sprachmodell" } + }, + "ru": { + "stringUnit": { + "state": "translated", + "value": "Речевая модель" + } } } }, @@ -8988,6 +14460,12 @@ "state": "translated", "value": "Download starten" } + }, + "ru": { + "stringUnit": { + "state": "translated", + "value": "Начать загрузку" + } } } }, @@ -8998,6 +14476,12 @@ "state": "translated", "value": "Server starten" } + }, + "ru": { + "stringUnit": { + "state": "translated", + "value": "Запустить сервер" + } } } }, @@ -9008,6 +14492,12 @@ "state": "translated", "value": "Starte eine Arbeitssitzung, um hier Aufgaben zu sehen" } + }, + "ru": { + "stringUnit": { + "state": "translated", + "value": "Начните рабочий сеанс, чтобы увидеть задачи здесь" + } } } }, @@ -9018,6 +14508,12 @@ "state": "translated", "value": "Bei Anmeldung starten" } + }, + "ru": { + "stringUnit": { + "state": "translated", + "value": "Начать с входа в систему" + } } } }, @@ -9028,6 +14524,12 @@ "state": "translated", "value": "Starte den Sandbox-Container, um diese Optionen zu aktivieren." } + }, + "ru": { + "stringUnit": { + "state": "translated", + "value": "Запустите контейнер песочницы, чтобы включить эти параметры." + } } } }, @@ -9038,6 +14540,12 @@ "state": "translated", "value": "Starte den Server vom Übersicht-Tab, um Endpunkte zu testen." } + }, + "ru": { + "stringUnit": { + "state": "translated", + "value": "Запустите сервер на вкладке «Обзор», чтобы протестировать конечные точки." + } } } }, @@ -9048,6 +14556,12 @@ "state": "translated", "value": "Osaurus verwenden" } + }, + "ru": { + "stringUnit": { + "state": "translated", + "value": "Начните пользоваться Osaurus" + } } } }, @@ -9058,6 +14572,12 @@ "state": "translated", "value": "Startet" } + }, + "ru": { + "stringUnit": { + "state": "translated", + "value": "Начало" + } } } }, @@ -9068,6 +14588,12 @@ "state": "translated", "value": "Server wird gestartet…" } + }, + "ru": { + "stringUnit": { + "state": "translated", + "value": "Запускаем сервер..." + } } } }, @@ -9078,6 +14604,12 @@ "state": "translated", "value": "Startet…" } + }, + "ru": { + "stringUnit": { + "state": "translated", + "value": "Начало..." + } } } }, @@ -9088,6 +14620,12 @@ "state": "translated", "value": "Starte…" } + }, + "ru": { + "stringUnit": { + "state": "translated", + "value": "Начало…" + } } } }, @@ -9098,6 +14636,12 @@ "state": "translated", "value": "Statistiken" } + }, + "ru": { + "stringUnit": { + "state": "translated", + "value": "Статистика" + } } } }, @@ -9108,6 +14652,12 @@ "state": "translated", "value": "Status" } + }, + "ru": { + "stringUnit": { + "state": "translated", + "value": "Статус" + } } } }, @@ -9118,6 +14668,12 @@ "state": "translated", "value": "Stopp" } + }, + "ru": { + "stringUnit": { + "state": "translated", + "value": "Останавливаться" + } } } }, @@ -9128,6 +14684,12 @@ "state": "translated", "value": "Stopp-Modus" } + }, + "ru": { + "stringUnit": { + "state": "translated", + "value": "Режим остановки" + } } } }, @@ -9138,6 +14700,12 @@ "state": "translated", "value": "Gestoppt" } + }, + "ru": { + "stringUnit": { + "state": "translated", + "value": "Остановлено" + } } } }, @@ -9148,6 +14716,12 @@ "state": "translated", "value": "Stoppt" } + }, + "ru": { + "stringUnit": { + "state": "translated", + "value": "Остановка" + } } } }, @@ -9158,6 +14732,12 @@ "state": "translated", "value": "Server wird gestoppt…" } + }, + "ru": { + "stringUnit": { + "state": "translated", + "value": "Остановка сервера..." + } } } }, @@ -9168,6 +14748,12 @@ "state": "translated", "value": "Stoppt…" } + }, + "ru": { + "stringUnit": { + "state": "translated", + "value": "Остановка..." + } } } }, @@ -9178,6 +14764,12 @@ "state": "translated", "value": "Speicher" } + }, + "ru": { + "stringUnit": { + "state": "translated", + "value": "Хранилище" + } } } }, @@ -9188,6 +14780,12 @@ "state": "translated", "value": "An einem sicheren Ort aufbewahren" } + }, + "ru": { + "stringUnit": { + "state": "translated", + "value": "Храните в безопасном месте" + } } } }, @@ -9198,6 +14796,12 @@ "state": "translated", "value": "Im Schlüsselbund gespeichert" } + }, + "ru": { + "stringUnit": { + "state": "translated", + "value": "Хранится в связке ключей" + } } } }, @@ -9208,6 +14812,12 @@ "state": "translated", "value": "Strecken" } + }, + "ru": { + "stringUnit": { + "state": "translated", + "value": "Потягиваться" + } } } }, @@ -9218,6 +14828,12 @@ "state": "translated", "value": "Strikt (ein Modell)" } + }, + "ru": { + "stringUnit": { + "state": "translated", + "value": "Строгий (одна модель)" + } } } }, @@ -9228,6 +14844,12 @@ "state": "translated", "value": "Erfolg" } + }, + "ru": { + "stringUnit": { + "state": "translated", + "value": "Успех" + } } } }, @@ -9238,6 +14860,12 @@ "state": "translated", "value": "Empfohlene Modelle werden hier angezeigt" } + }, + "ru": { + "stringUnit": { + "state": "translated", + "value": "Предлагаемые модели появятся здесь." + } } } }, @@ -9248,6 +14876,12 @@ "state": "translated", "value": "Zusammenfassungen" } + }, + "ru": { + "stringUnit": { + "state": "translated", + "value": "Резюме" + } } } }, @@ -9258,6 +14892,12 @@ "state": "translated", "value": "Text zusammenfassen" } + }, + "ru": { + "stringUnit": { + "state": "translated", + "value": "Обобщить текст" + } } } }, @@ -9268,6 +14908,12 @@ "state": "translated", "value": "Fasse Folgendes zusammen: " } + }, + "ru": { + "stringUnit": { + "state": "translated", + "value": "Подведите итоги:" + } } } }, @@ -9278,6 +14924,12 @@ "state": "translated", "value": "Zusammenfassungs-Aufbewahrung" } + }, + "ru": { + "stringUnit": { + "state": "translated", + "value": "Суммарное удержание" + } } } }, @@ -9288,6 +14940,12 @@ "state": "translated", "value": "Unterstützt Standard-5-Felder-Format mit * , - und / Operatoren" } + }, + "ru": { + "stringUnit": { + "state": "translated", + "value": "Поддерживает стандартный формат из 5 полей с операторами *, - и /." + } } } }, @@ -9298,6 +14956,12 @@ "state": "translated", "value": "Klar! Hier ein Beispiel:" } + }, + "ru": { + "stringUnit": { + "state": "translated", + "value": "Конечно! Вот пример:" + } } } }, @@ -9308,6 +14972,12 @@ "state": "translated", "value": "Synchronisieren" } + }, + "ru": { + "stringUnit": { + "state": "translated", + "value": "Синхронизировать" + } } } }, @@ -9318,9 +14988,15 @@ "state": "translated", "value": "Synchronisierung abgeschlossen" } - } - } - }, + }, + "ru": { + "stringUnit": { + "state": "translated", + "value": "Синхронизация завершена" + } + } + } + }, "Syncing...": { "localizations": { "de": { @@ -9328,6 +15004,12 @@ "state": "translated", "value": "Synchronisiere..." } + }, + "ru": { + "stringUnit": { + "state": "translated", + "value": "Синхронизация..." + } } } }, @@ -9338,6 +15020,12 @@ "state": "translated", "value": "System" } + }, + "ru": { + "stringUnit": { + "state": "translated", + "value": "Система" + } } } }, @@ -9348,6 +15036,12 @@ "state": "translated", "value": "Systemton" } + }, + "ru": { + "stringUnit": { + "state": "translated", + "value": "Системный звук" + } } } }, @@ -9358,6 +15052,12 @@ "state": "translated", "value": "Systemstandard" } + }, + "ru": { + "stringUnit": { + "state": "translated", + "value": "Системные настройки по умолчанию" + } } } }, @@ -9368,6 +15068,12 @@ "state": "translated", "value": "Systemberechtigungen erforderlich" } + }, + "ru": { + "stringUnit": { + "state": "translated", + "value": "Требуются системные разрешения" + } } } }, @@ -9378,6 +15084,12 @@ "state": "translated", "value": "System-Prompt" } + }, + "ru": { + "stringUnit": { + "state": "translated", + "value": "Системная подсказка" + } } } }, @@ -9388,6 +15100,12 @@ "state": "translated", "value": "Systemeinstellungen" } + }, + "ru": { + "stringUnit": { + "state": "translated", + "value": "Системные настройки" + } } } }, @@ -9398,6 +15116,12 @@ "state": "translated", "value": "Systempakete installiert über apk" } + }, + "ru": { + "stringUnit": { + "state": "translated", + "value": "Системные пакеты устанавливаются через apk" + } } } }, @@ -9408,6 +15132,12 @@ "state": "translated", "value": "ZEIT" } + }, + "ru": { + "stringUnit": { + "state": "translated", + "value": "ВРЕМЯ" + } } } }, @@ -9418,6 +15148,12 @@ "state": "translated", "value": "TRANSKRIPTION" } + }, + "ru": { + "stringUnit": { + "state": "translated", + "value": "расшифровка" + } } } }, @@ -9428,6 +15164,12 @@ "state": "translated", "value": "Zum Abbrechen tippen" } + }, + "ru": { + "stringUnit": { + "state": "translated", + "value": "Нажмите, чтобы отменить" + } } } }, @@ -9438,6 +15180,12 @@ "state": "translated", "value": "Aufgabe" } + }, + "ru": { + "stringUnit": { + "state": "translated", + "value": "Задача" + } } } }, @@ -9448,6 +15196,12 @@ "state": "translated", "value": "Aufgabe abgebrochen" } + }, + "ru": { + "stringUnit": { + "state": "translated", + "value": "Задача отменена" + } } } }, @@ -9458,6 +15212,12 @@ "state": "translated", "value": "Aufgabenverwaltung und Zielsetzung" } + }, + "ru": { + "stringUnit": { + "state": "translated", + "value": "Управление задачами и постановка целей" + } } } }, @@ -9468,6 +15228,12 @@ "state": "translated", "value": "Aufgabe wurde abgebrochen" } + }, + "ru": { + "stringUnit": { + "state": "translated", + "value": "Задача отменена" + } } } }, @@ -9478,6 +15244,12 @@ "state": "translated", "value": "Aufgaben" } + }, + "ru": { + "stringUnit": { + "state": "translated", + "value": "Задачи" + } } } }, @@ -9488,6 +15260,12 @@ "state": "translated", "value": "Temperatur" } + }, + "ru": { + "stringUnit": { + "state": "translated", + "value": "Температура" + } } } }, @@ -9498,6 +15276,12 @@ "state": "translated", "value": "Testen" } + }, + "ru": { + "stringUnit": { + "state": "translated", + "value": "Тест" + } } } }, @@ -9508,6 +15292,12 @@ "state": "translated", "value": "Animation testen" } + }, + "ru": { + "stringUnit": { + "state": "translated", + "value": "Тестовая анимация" + } } } }, @@ -9518,6 +15308,12 @@ "state": "translated", "value": "Verbindung testen" } + }, + "ru": { + "stringUnit": { + "state": "translated", + "value": "Тестовое соединение" + } } } }, @@ -9528,6 +15324,12 @@ "state": "translated", "value": "Test-Benachrichtigung" } + }, + "ru": { + "stringUnit": { + "state": "translated", + "value": "Тестовый тост" + } } } }, @@ -9538,6 +15340,12 @@ "state": "translated", "value": "Transkription testen" } + }, + "ru": { + "stringUnit": { + "state": "translated", + "value": "Тестовая транскрипция" + } } } }, @@ -9548,6 +15356,12 @@ "state": "translated", "value": "Aktivierungswort-Erkennung testen" } + }, + "ru": { + "stringUnit": { + "state": "translated", + "value": "Тестирование распознавания слов пробуждения" + } } } }, @@ -9558,6 +15372,12 @@ "state": "translated", "value": "Teste den Transkriptionsmodus hier. Text wird in das Feld unten eingegeben." } + }, + "ru": { + "stringUnit": { + "state": "translated", + "value": "Тестовый режим транскрипции здесь. Текст будет введен в поле ниже." + } } } }, @@ -9568,6 +15388,12 @@ "state": "translated", "value": "Teste deine Audioeinstellungen mit Live-Sprachtranskription" } + }, + "ru": { + "stringUnit": { + "state": "translated", + "value": "Проверьте настройки звука с помощью живой голосовой транскрипции" + } } } }, @@ -9578,6 +15404,12 @@ "state": "translated", "value": "Teste…" } + }, + "ru": { + "stringUnit": { + "state": "translated", + "value": "Тестирование..." + } } } }, @@ -9588,6 +15420,12 @@ "state": "translated", "value": "Testet exec, NAT-Netzwerk, Agent-Benutzer, apk und vsock-Bridge" } + }, + "ru": { + "stringUnit": { + "state": "translated", + "value": "Тестирует exec, сеть NAT, пользователей агента, apk и мост vsock." + } } } }, @@ -9598,6 +15436,12 @@ "state": "translated", "value": "Die KI wird ausgelöst, wenn sich Dateien in diesem Ordner ändern." } + }, + "ru": { + "stringUnit": { + "state": "translated", + "value": "AI будет срабатывать при изменении файлов в этой папке." + } } } }, @@ -9608,6 +15452,12 @@ "state": "translated", "value": "Die KI wird diesen Ordner als Arbeitsverzeichnis verwenden." } + }, + "ru": { + "stringUnit": { + "state": "translated", + "value": "ИИ будет использовать эту папку в качестве своего рабочего каталога." + } } } }, @@ -9618,6 +15468,12 @@ "state": "translated", "value": "Die Sandbox führt Code in einem Linux-Container auf deinem Mac aus. Agenten können Befehle ausführen, Pakete installieren und mit Dateien arbeiten – komplett isoliert von deinem System." } + }, + "ru": { + "stringUnit": { + "state": "translated", + "value": "Песочница запускает код в контейнере Linux на вашем Mac. Агенты могут выполнять команды, устанавливать пакеты и работать с файлами — полностью изолированно от вашей системы." + } } } }, @@ -9628,6 +15484,12 @@ "state": "translated", "value": "Der Agent bestimmt das Verhalten der KI und die verfügbaren Tools." } + }, + "ru": { + "stringUnit": { + "state": "translated", + "value": "Агент определяет поведение ИИ и доступные инструменты." + } } } }, @@ -9638,6 +15500,12 @@ "state": "translated", "value": "Das Modell hat sein Kontextfenster überschritten. Versuche eine kürzere Nachricht oder starte einen neuen Chat." } + }, + "ru": { + "stringUnit": { + "state": "translated", + "value": "Модель превысила контекстное окно. Попробуйте написать более короткое сообщение или начать новый чат." + } } } }, @@ -9648,6 +15516,12 @@ "state": "translated", "value": "Der Vorgang hat zu lange gedauert. Bitte erneut versuchen." } + }, + "ru": { + "stringUnit": { + "state": "translated", + "value": "Операция длилась слишком долго. Пожалуйста, попробуйте еще раз." + } } } }, @@ -9658,6 +15532,12 @@ "state": "translated", "value": "Der Vorgang wurde beendet, bevor er abgeschlossen war." } + }, + "ru": { + "stringUnit": { + "state": "translated", + "value": "Операция была остановлена ​​до завершения." + } } } }, @@ -9668,6 +15548,12 @@ "state": "translated", "value": "Die angeforderte Ressource wurde nicht gefunden." } + }, + "ru": { + "stringUnit": { + "state": "translated", + "value": "Запрошенный ресурс не найден." + } } } }, @@ -9678,6 +15564,12 @@ "state": "translated", "value": "Der Dienst ist vorübergehend nicht erreichbar. Bitte später erneut versuchen." } + }, + "ru": { + "stringUnit": { + "state": "translated", + "value": "Услуга временно недоступна. Пожалуйста, повторите попытку позже." + } } } }, @@ -9688,6 +15580,12 @@ "state": "translated", "value": "Theme" } + }, + "ru": { + "stringUnit": { + "state": "translated", + "value": "Тема" + } } } }, @@ -9698,6 +15596,12 @@ "state": "translated", "value": "Theme-Editor" } + }, + "ru": { + "stringUnit": { + "state": "translated", + "value": "Редактор тем" + } } } }, @@ -9708,6 +15612,12 @@ "state": "translated", "value": "Themes" } + }, + "ru": { + "stringUnit": { + "state": "translated", + "value": "Темы" + } } } }, @@ -9718,6 +15628,12 @@ "state": "translated", "value": "Themes konnten nicht geladen werden. Versuche die eingebauten Themes neu zu installieren." } + }, + "ru": { + "stringUnit": { + "state": "translated", + "value": "Не удалось загрузить темы. Попробуйте переустановить встроенные темы." + } } } }, @@ -9728,6 +15644,12 @@ "state": "translated", "value": "Problem mit den API-Zugangsdaten. Bitte Einstellungen prüfen." } + }, + "ru": { + "stringUnit": { + "state": "translated", + "value": "Возникла проблема с учетными данными API. Пожалуйста, проверьте ваши настройки." + } } } }, @@ -9738,6 +15660,12 @@ "state": "translated", "value": "Diese Anweisungen werden an die KI gesendet, wenn der Zeitplan ausgeführt wird." } + }, + "ru": { + "stringUnit": { + "state": "translated", + "value": "Эти инструкции будут отправлены ИИ при запуске расписания." + } } } }, @@ -9748,6 +15676,12 @@ "state": "translated", "value": "Diese Einstellungen gelten für alle Sprachmodi: Spracheingabe, Transkription und VAD-Modus." } + }, + "ru": { + "stringUnit": { + "state": "translated", + "value": "Эти настройки применяются ко всем голосовым режимам: голосовому вводу, транскрипции и режиму VAD." + } } } }, @@ -9758,6 +15692,12 @@ "state": "translated", "value": "Denkt nach" } + }, + "ru": { + "stringUnit": { + "state": "translated", + "value": "мышление" + } } } }, @@ -9768,6 +15708,12 @@ "state": "translated", "value": "Denkt nach…" } + }, + "ru": { + "stringUnit": { + "state": "translated", + "value": "Думая…" + } } } }, @@ -9778,6 +15724,12 @@ "state": "translated", "value": "Dieses Feld ist erforderlich" } + }, + "ru": { + "stringUnit": { + "state": "translated", + "value": "Это поле обязательно к заполнению" + } } } }, @@ -9788,6 +15740,12 @@ "state": "translated", "value": "Dies wird vor dem System-Prompt bei jeder Nachricht eingefügt" } + }, + "ru": { + "stringUnit": { + "state": "translated", + "value": "Это вводится перед системным приглашением для каждого сообщения." + } } } }, @@ -9798,6 +15756,12 @@ "state": "translated", "value": "Dieses Modell ist veraltet. Klicke, um zu einer neueren Version zu wechseln." } + }, + "ru": { + "stringUnit": { + "state": "translated", + "value": "Эта модель устарела. Нажмите, чтобы переключиться на более новую версию." + } } } }, @@ -9808,6 +15772,12 @@ "state": "translated", "value": "Dieses Plugin benötigt deine Genehmigung, bevor es geladen werden kann." } + }, + "ru": { + "stringUnit": { + "state": "translated", + "value": "Этот плагин требует вашего одобрения, прежде чем он сможет загрузиться." + } } } }, @@ -9818,6 +15788,12 @@ "state": "translated", "value": "Dieses Plugin benötigt Zugangsdaten, um richtig zu funktionieren." } + }, + "ru": { + "stringUnit": { + "state": "translated", + "value": "Этот плагин требует учетные данные для правильной работы." + } } } }, @@ -9828,6 +15804,12 @@ "state": "translated", "value": "Dies löscht dauerhaft dein Profil, alle Arbeitsgedächtnis-Einträge, Gesprächszusammenfassungen und den Verarbeitungsverlauf. Dies kann nicht rückgängig gemacht werden." } + }, + "ru": { + "stringUnit": { + "state": "translated", + "value": "Это приведет к безвозвратному удалению вашего профиля, всех записей рабочей памяти, сводок разговоров и истории обработки. Это невозможно отменить." + } } } }, @@ -9838,6 +15820,12 @@ "state": "translated", "value": "Dies stoppt und entfernt den Container vollständig. Du kannst ihn später erneut einrichten." } + }, + "ru": { + "stringUnit": { + "state": "translated", + "value": "Это остановит и полностью удалит контейнер. Позже вы сможете настроить его снова." + } } } }, @@ -9848,6 +15836,12 @@ "state": "translated", "value": "Knappe Passform" } + }, + "ru": { + "stringUnit": { + "state": "translated", + "value": "Плотно прилегает" + } } } }, @@ -9858,6 +15852,12 @@ "state": "translated", "value": "Kacheln" } + }, + "ru": { + "stringUnit": { + "state": "translated", + "value": "Плитка" + } } } }, @@ -9868,6 +15868,12 @@ "state": "translated", "value": "Zeit" } + }, + "ru": { + "stringUnit": { + "state": "translated", + "value": "Время" + } } } }, @@ -9878,6 +15884,12 @@ "state": "translated", "value": "Zeit zum Abbrechen, bevor die Nachricht automatisch gesendet wird" } + }, + "ru": { + "stringUnit": { + "state": "translated", + "value": "Время отмены до автоматической отправки сообщения" + } } } }, @@ -9888,6 +15900,12 @@ "state": "translated", "value": "Winzig" } + }, + "ru": { + "stringUnit": { + "state": "translated", + "value": "Крошечный" + } } } }, @@ -9898,6 +15916,12 @@ "state": "translated", "value": "Modell-Denkmodus umschalten" } + }, + "ru": { + "stringUnit": { + "state": "translated", + "value": "Переключить режим рассуждения модели" + } } } }, @@ -9908,6 +15932,12 @@ "state": "translated", "value": "Zu groß" } + }, + "ru": { + "stringUnit": { + "state": "translated", + "value": "Слишком большой" + } } } }, @@ -9918,6 +15948,12 @@ "state": "translated", "value": "Zu viele Anfragen. Bitte kurz warten und erneut versuchen." } + }, + "ru": { + "stringUnit": { + "state": "translated", + "value": "Слишком много запросов. Пожалуйста, подождите немного, прежде чем повторить попытку." + } } } }, @@ -9928,6 +15964,12 @@ "state": "translated", "value": "Tool-Aufruf-Timeout" } + }, + "ru": { + "stringUnit": { + "state": "translated", + "value": "Тайм-аут вызова инструмента" + } } } }, @@ -9938,6 +15980,12 @@ "state": "translated", "value": "Tool-Aufrufe" } + }, + "ru": { + "stringUnit": { + "state": "translated", + "value": "Вызовы инструментов" + } } } }, @@ -9948,7 +15996,13 @@ "state": "translated", "value": "Tool-Berechtigungen" } - } + }, + "ru": { + "stringUnit": { + "state": "translated", + "value": "Разрешения инструмента" + } + } } }, "Tool Secrets": { @@ -9958,6 +16012,12 @@ "state": "translated", "value": "Tool-Zugangsdaten" } + }, + "ru": { + "stringUnit": { + "state": "translated", + "value": "Секреты инструментов" + } } } }, @@ -9968,6 +16028,12 @@ "state": "translated", "value": "Tools" } + }, + "ru": { + "stringUnit": { + "state": "translated", + "value": "Инструменты" + } } } }, @@ -9978,6 +16044,12 @@ "state": "translated", "value": "Tools, Skills und Plugins" } + }, + "ru": { + "stringUnit": { + "state": "translated", + "value": "Инструменты, навыки и плагины" + } } } }, @@ -9988,6 +16060,12 @@ "state": "translated", "value": "Top-P-Überschreibung" } + }, + "ru": { + "stringUnit": { + "state": "translated", + "value": "Переопределение верхнего P" + } } } }, @@ -9998,6 +16076,12 @@ "state": "translated", "value": "Gesamt" } + }, + "ru": { + "stringUnit": { + "state": "translated", + "value": "Общий" + } } } }, @@ -10008,6 +16092,12 @@ "state": "translated", "value": "Aufrufe gesamt" } + }, + "ru": { + "stringUnit": { + "state": "translated", + "value": "Всего звонков" + } } } }, @@ -10018,6 +16108,12 @@ "state": "translated", "value": "Transkription" } + }, + "ru": { + "stringUnit": { + "state": "translated", + "value": "Транскрипция" + } } } }, @@ -10028,6 +16124,12 @@ "state": "translated", "value": "Transkriptionsübermittlung" } + }, + "ru": { + "stringUnit": { + "state": "translated", + "value": "Доставка транскрипции" + } } } }, @@ -10038,6 +16140,12 @@ "state": "translated", "value": "Transkriptionsmodus" } + }, + "ru": { + "stringUnit": { + "state": "translated", + "value": "Режим транскрипции" + } } } }, @@ -10048,6 +16156,12 @@ "state": "translated", "value": "Transkriptionsmodell" } + }, + "ru": { + "stringUnit": { + "state": "translated", + "value": "Модель транскрипции" + } } } }, @@ -10058,6 +16172,12 @@ "state": "translated", "value": "Jetzt auslösen" } + }, + "ru": { + "stringUnit": { + "state": "translated", + "value": "Запустить сейчас" + } } } }, @@ -10068,6 +16188,12 @@ "state": "translated", "value": "Reagiert schnell. Ideal für Screenshots und einzelne Dateien." } + }, + "ru": { + "stringUnit": { + "state": "translated", + "value": "Быстро срабатывает. Лучше всего подходит для снимков экрана и отдельных файлов." + } } } }, @@ -10078,6 +16204,12 @@ "state": "translated", "value": "Fehlerbehebung oder Zurücksetzen der Anwendung. Ein Werksreset löscht alle Daten und Einstellungen dauerhaft." } + }, + "ru": { + "stringUnit": { + "state": "translated", + "value": "Устраните неполадки или перезагрузите приложение. Сброс к заводским настройкам безвозвратно удаляет все данные и настройки." + } } } }, @@ -10088,6 +16220,12 @@ "state": "translated", "value": "Nochmal versuchen" } + }, + "ru": { + "stringUnit": { + "state": "translated", + "value": "Попробуйте еще раз" + } } } }, @@ -10098,6 +16236,12 @@ "state": "translated", "value": "Versuche einen anderen Suchbegriff" } + }, + "ru": { + "stringUnit": { + "state": "translated", + "value": "Попробуйте другой поисковый запрос" + } } } }, @@ -10108,6 +16252,12 @@ "state": "translated", "value": "Versuche andere Suchbegriffe" } + }, + "ru": { + "stringUnit": { + "state": "translated", + "value": "Попробуйте изменить условия поиска" + } } } }, @@ -10118,6 +16268,12 @@ "state": "translated", "value": "Antwort eingeben…" } + }, + "ru": { + "stringUnit": { + "state": "translated", + "value": "Введите ответ..." + } } } }, @@ -10128,6 +16284,12 @@ "state": "translated", "value": "Tipp-Indikator" } + }, + "ru": { + "stringUnit": { + "state": "translated", + "value": "Индикатор набора текста" + } } } }, @@ -10138,6 +16300,12 @@ "state": "translated", "value": "Auf die ausgewählte Datei konnte nicht zugegriffen werden" } + }, + "ru": { + "stringUnit": { + "state": "translated", + "value": "Невозможно получить доступ к выбранному файлу" + } } } }, @@ -10148,6 +16316,12 @@ "state": "translated", "value": "Keine Verbindung zum Dienst. Bitte Internetverbindung prüfen." } + }, + "ru": { + "stringUnit": { + "state": "translated", + "value": "Невозможно подключиться к сервису. Пожалуйста, проверьте подключение к Интернету." + } } } }, @@ -10158,6 +16332,12 @@ "state": "translated", "value": "Alles rückgängig" } + }, + "ru": { + "stringUnit": { + "state": "translated", + "value": "Отменить все" + } } } }, @@ -10168,6 +16348,12 @@ "state": "translated", "value": "Änderung rückgängig" } + }, + "ru": { + "stringUnit": { + "state": "translated", + "value": "Отменить изменение" + } } } }, @@ -10178,6 +16364,12 @@ "state": "translated", "value": "Alle Dateiänderungen rückgängig machen" } + }, + "ru": { + "stringUnit": { + "state": "translated", + "value": "Отменить все изменения файла" + } } } }, @@ -10188,6 +16380,12 @@ "state": "translated", "value": "Diese Änderung rückgängig machen" } + }, + "ru": { + "stringUnit": { + "state": "translated", + "value": "Отменить это изменение" + } } } }, @@ -10198,6 +16396,12 @@ "state": "translated", "value": "Deinstallieren" } + }, + "ru": { + "stringUnit": { + "state": "translated", + "value": "Удалить" + } } } }, @@ -10208,6 +16412,12 @@ "state": "translated", "value": "Unbekannt" } + }, + "ru": { + "stringUnit": { + "state": "translated", + "value": "Неизвестный" + } } } }, @@ -10218,6 +16428,12 @@ "state": "translated", "value": "Unbekannter Tab" } + }, + "ru": { + "stringUnit": { + "state": "translated", + "value": "Неизвестная вкладка" + } } } }, @@ -10228,6 +16444,12 @@ "state": "translated", "value": "Entladen" } + }, + "ru": { + "stringUnit": { + "state": "translated", + "value": "Разгрузить" + } } } }, @@ -10238,6 +16460,12 @@ "state": "translated", "value": "Aktualisieren" } + }, + "ru": { + "stringUnit": { + "state": "translated", + "value": "Обновлять" + } } } }, @@ -10248,6 +16476,12 @@ "state": "translated", "value": "Update verfügbar" } + }, + "ru": { + "stringUnit": { + "state": "translated", + "value": "Доступно обновление" + } } } }, @@ -10258,6 +16492,12 @@ "state": "translated", "value": "Aktualisiert" } + }, + "ru": { + "stringUnit": { + "state": "translated", + "value": "Обновлено" + } } } }, @@ -10268,6 +16508,12 @@ "state": "translated", "value": "Aktualisiert sich beim Bearbeiten" } + }, + "ru": { + "stringUnit": { + "state": "translated", + "value": "Обновления по мере редактирования" + } } } }, @@ -10278,6 +16524,12 @@ "state": "translated", "value": "Apple Intelligence verwenden" } + }, + "ru": { + "stringUnit": { + "state": "translated", + "value": "Использовать Apple Intelligence" + } } } }, @@ -10288,6 +16540,12 @@ "state": "translated", "value": "Nutze OpenAI, Anthropic, xAI oder einen anderen Anbieter deines Vertrauens. API Key erforderlich." } + }, + "ru": { + "stringUnit": { + "state": "translated", + "value": "Используйте OpenAI, Anthropic, xAI или другого поставщика, которому вы доверяете. Требуется ключ API." + } } } }, @@ -10298,6 +16556,12 @@ "state": "translated", "value": "Nutzer-Blase" } + }, + "ru": { + "stringUnit": { + "state": "translated", + "value": "Пользовательский пузырь" + } } } }, @@ -10308,6 +16572,12 @@ "state": "translated", "value": "Benutzerprofil" } + }, + "ru": { + "stringUnit": { + "state": "translated", + "value": "Профиль пользователя" + } } } }, @@ -10318,6 +16588,12 @@ "state": "translated", "value": "Verwendet das Standardverhalten" } + }, + "ru": { + "stringUnit": { + "state": "translated", + "value": "Использует поведение системы по умолчанию" + } } } }, @@ -10328,6 +16604,12 @@ "state": "translated", "value": "Verwendet deine globalen Chat-Einstellungen" } + }, + "ru": { + "stringUnit": { + "state": "translated", + "value": "Использует ваши глобальные настройки чата" + } } } }, @@ -10338,6 +16620,12 @@ "state": "translated", "value": "Standardspeicherort wird verwendet" } + }, + "ru": { + "stringUnit": { + "state": "translated", + "value": "Использование местоположения по умолчанию" + } } } }, @@ -10348,6 +16636,12 @@ "state": "translated", "value": "VAD" } + }, + "ru": { + "stringUnit": { + "state": "translated", + "value": "ВАД" + } } } }, @@ -10358,6 +16652,12 @@ "state": "translated", "value": "VAD-Modus" } + }, + "ru": { + "stringUnit": { + "state": "translated", + "value": "Режим VAD" + } } } }, @@ -10368,6 +16668,12 @@ "state": "translated", "value": "Version" } + }, + "ru": { + "stringUnit": { + "state": "translated", + "value": "Версия" + } } } }, @@ -10378,6 +16684,12 @@ "state": "translated", "value": "Anzeigen" } + }, + "ru": { + "stringUnit": { + "state": "translated", + "value": "Вид" + } } } }, @@ -10388,6 +16700,12 @@ "state": "translated", "value": "Details ansehen" } + }, + "ru": { + "stringUnit": { + "state": "translated", + "value": "Посмотреть детали" + } } } }, @@ -10398,6 +16716,12 @@ "state": "translated", "value": "Dokumentation ansehen" } + }, + "ru": { + "stringUnit": { + "state": "translated", + "value": "Посмотреть документы" + } } } }, @@ -10408,6 +16732,12 @@ "state": "translated", "value": "Skill anzeigen" } + }, + "ru": { + "stringUnit": { + "state": "translated", + "value": "Посмотреть навык" + } } } }, @@ -10418,6 +16748,12 @@ "state": "translated", "value": "Artefakt anzeigen" } + }, + "ru": { + "stringUnit": { + "state": "translated", + "value": "Посмотреть артефакт" + } } } }, @@ -10428,6 +16764,12 @@ "state": "translated", "value": "Gesprächsverlauf, Arbeitsspeicher und Zusammenfassungen anzeigen." } + }, + "ru": { + "stringUnit": { + "state": "translated", + "value": "Просматривайте историю разговоров, рабочую память и сводки." + } } } }, @@ -10438,6 +16780,12 @@ "state": "translated", "value": "Auf GitHub anzeigen" } + }, + "ru": { + "stringUnit": { + "state": "translated", + "value": "Посмотреть на GitHub" + } } } }, @@ -10448,6 +16796,12 @@ "state": "translated", "value": "Auf Hugging Face anzeigen" } + }, + "ru": { + "stringUnit": { + "state": "translated", + "value": "Вид на обнимающее лицо" + } } } }, @@ -10458,6 +16812,12 @@ "state": "translated", "value": "Stimme" } + }, + "ru": { + "stringUnit": { + "state": "translated", + "value": "Голос" + } } } }, @@ -10468,6 +16828,12 @@ "state": "translated", "value": "Sprachaktivitätserkennung" } + }, + "ru": { + "stringUnit": { + "state": "translated", + "value": "Обнаружение голосовой активности" + } } } }, @@ -10478,6 +16844,12 @@ "state": "translated", "value": "Spracherkennung-Fehler: %@" } + }, + "ru": { + "stringUnit": { + "state": "translated", + "value": "Ошибка распознавания голоса: %@" + } } } }, @@ -10488,6 +16860,12 @@ "state": "translated", "value": "Spracherkennung: Deaktiviert – Zum Aktivieren klicken" } + }, + "ru": { + "stringUnit": { + "state": "translated", + "value": "Обнаружение голоса: отключено — нажмите, чтобы включить" + } } } }, @@ -10498,6 +16876,12 @@ "state": "translated", "value": "Spracherkennung: Hört zu – Zum Deaktivieren klicken" } + }, + "ru": { + "stringUnit": { + "state": "translated", + "value": "Обнаружение голоса: прослушивание — нажмите, чтобы отключить" + } } } }, @@ -10508,6 +16892,12 @@ "state": "translated", "value": "Spracherkennung: Kein Modell ausgewählt" } + }, + "ru": { + "stringUnit": { + "state": "translated", + "value": "Обнаружение голоса: модель не выбрана" + } } } }, @@ -10518,6 +16908,12 @@ "state": "translated", "value": "Spracherkennung: Nicht konfiguriert (Agenten in den Einstellungen auswählen)" } + }, + "ru": { + "stringUnit": { + "state": "translated", + "value": "Обнаружение голоса: не настроено (выберите агентов в настройках)" + } } } }, @@ -10528,6 +16924,12 @@ "state": "translated", "value": "Spracherkennung: Bereit – Zum Deaktivieren klicken" } + }, + "ru": { + "stringUnit": { + "state": "translated", + "value": "Обнаружение голоса: готово — нажмите, чтобы отключить" + } } } }, @@ -10538,6 +16940,12 @@ "state": "translated", "value": "Spracherkennung: Startet…" } + }, + "ru": { + "stringUnit": { + "state": "translated", + "value": "Обнаружение голоса: Начало..." + } } } }, @@ -10548,6 +16956,12 @@ "state": "translated", "value": "Spracheingabe" } + }, + "ru": { + "stringUnit": { + "state": "translated", + "value": "Голосовой ввод" + } } } }, @@ -10558,6 +16972,12 @@ "state": "translated", "value": "Spracheingabe im Chat" } + }, + "ru": { + "stringUnit": { + "state": "translated", + "value": "Голосовой ввод в чате" + } } } }, @@ -10568,6 +16988,12 @@ "state": "translated", "value": "Sprachempfindlichkeit" } + }, + "ru": { + "stringUnit": { + "state": "translated", + "value": "Голосовая чувствительность" + } } } }, @@ -10578,9 +17004,15 @@ "state": "translated", "value": "Sprachtranskription" } - } - } - }, + }, + "ru": { + "stringUnit": { + "state": "translated", + "value": "Транскрипция голоса" + } + } + } + }, "Voice transcription ready": { "localizations": { "de": { @@ -10588,6 +17020,12 @@ "state": "translated", "value": "Sprachtranskription bereit" } + }, + "ru": { + "stringUnit": { + "state": "translated", + "value": "Транскрипция голоса готова" + } } } }, @@ -10598,6 +17036,12 @@ "state": "translated", "value": "WAV, MP3, M4A" } + }, + "ru": { + "stringUnit": { + "state": "translated", + "value": "WAV, MP3, M4A" + } } } }, @@ -10608,6 +17052,12 @@ "state": "translated", "value": "ARBEITSGEDÄCHTNIS" } + }, + "ru": { + "stringUnit": { + "state": "translated", + "value": "РАБОЧАЯ ПАМЯТЬ" + } } } }, @@ -10618,6 +17068,12 @@ "state": "translated", "value": "Wartet" } + }, + "ru": { + "stringUnit": { + "state": "translated", + "value": "Ожидающий" + } } } }, @@ -10628,6 +17084,12 @@ "state": "translated", "value": "Warte auf Antwort..." } + }, + "ru": { + "stringUnit": { + "state": "translated", + "value": "Жду ответа..." + } } } }, @@ -10638,6 +17100,12 @@ "state": "translated", "value": "Wartet bis schnelle Änderungen abgeschlossen sind. Gut für allgemeinen Gebrauch." } + }, + "ru": { + "stringUnit": { + "state": "translated", + "value": "Ждет быстрых изменений, чтобы урегулироваться. Хорошо подходит для общего использования." + } } } }, @@ -10648,6 +17116,12 @@ "state": "translated", "value": "Wartet bis du manuell den Stopp-Button klickst" } + }, + "ru": { + "stringUnit": { + "state": "translated", + "value": "Ждет, пока вы вручную нажмете кнопку «Стоп»" + } } } }, @@ -10658,6 +17132,12 @@ "state": "translated", "value": "Wartet länger auf Downloads und Batch-Operationen." } + }, + "ru": { + "stringUnit": { + "state": "translated", + "value": "Длительное ожидание завершения загрузки и пакетных операций." + } } } }, @@ -10668,6 +17148,12 @@ "state": "translated", "value": "Aktivierungswort-Einstellungen" } + }, + "ru": { + "stringUnit": { + "state": "translated", + "value": "Настройки слова пробуждения" + } } } }, @@ -10678,6 +17164,12 @@ "state": "translated", "value": "Watcher" } + }, + "ru": { + "stringUnit": { + "state": "translated", + "value": "Наблюдатели" + } } } }, @@ -10688,6 +17180,12 @@ "state": "translated", "value": "Wöchentlich" } + }, + "ru": { + "stringUnit": { + "state": "translated", + "value": "Еженедельно" + } } } }, @@ -10698,6 +17196,12 @@ "state": "translated", "value": "Wochenbericht" } + }, + "ru": { + "stringUnit": { + "state": "translated", + "value": "Еженедельный отчет" + } } } }, @@ -10708,6 +17212,12 @@ "state": "translated", "value": "Was soll erledigt werden?" } + }, + "ru": { + "stringUnit": { + "state": "translated", + "value": "Что вы хотите сделать?" + } } } }, @@ -10718,6 +17228,12 @@ "state": "translated", "value": "Was soll die KI tun, wenn dies ausgeführt wird?" } + }, + "ru": { + "stringUnit": { + "state": "translated", + "value": "Что должен делать ИИ, когда это запустится?" + } } } }, @@ -10728,6 +17244,12 @@ "state": "translated", "value": "Was dieses Tool macht" } + }, + "ru": { + "stringUnit": { + "state": "translated", + "value": "Что делает этот инструмент" + } } } }, @@ -10738,6 +17260,12 @@ "state": "translated", "value": "Was kommt als Nächstes?" } + }, + "ru": { + "stringUnit": { + "state": "translated", + "value": "Что дальше?" + } } } }, @@ -10748,6 +17276,12 @@ "state": "translated", "value": "Was ist der Unterschied?" } + }, + "ru": { + "stringUnit": { + "state": "translated", + "value": "Какая разница?" + } } } }, @@ -10758,6 +17292,12 @@ "state": "translated", "value": "Breit" } + }, + "ru": { + "stringUnit": { + "state": "translated", + "value": "Широкий" + } } } }, @@ -10768,6 +17308,12 @@ "state": "translated", "value": "Arbeit" } + }, + "ru": { + "stringUnit": { + "state": "translated", + "value": "Работа" + } } } }, @@ -10778,6 +17324,12 @@ "state": "translated", "value": "Arbeitsgedächtnis" } + }, + "ru": { + "stringUnit": { + "state": "translated", + "value": "Рабочая память" + } } } }, @@ -10788,6 +17340,12 @@ "state": "translated", "value": "Blogbeitrag schreiben" } + }, + "ru": { + "stringUnit": { + "state": "translated", + "value": "Напишите сообщение в блоге" + } } } }, @@ -10798,6 +17356,12 @@ "state": "translated", "value": "Schreibe einen Blogbeitrag über " } + }, + "ru": { + "stringUnit": { + "state": "translated", + "value": "Напишите сообщение в блоге о" + } } } }, @@ -10808,6 +17372,12 @@ "state": "translated", "value": "Code schreiben" } + }, + "ru": { + "stringUnit": { + "state": "translated", + "value": "Написать код" + } } } }, @@ -10818,6 +17388,12 @@ "state": "translated", "value": "Schreibe Code, der " } + }, + "ru": { + "stringUnit": { + "state": "translated", + "value": "Напишите код, который" + } } } }, @@ -10828,6 +17404,12 @@ "state": "translated", "value": "Xcode-Builds benötigen separate Berechtigungen. Bei Problemen: 'tccutil reset AppleEvents'." } + }, + "ru": { + "stringUnit": { + "state": "translated", + "value": "Сборки Xcode требуют отдельных грантов. Попробуйте «tccutil сброс AppleEvents», если он застрял." + } } } }, @@ -10838,6 +17420,12 @@ "state": "translated", "value": "Jährlich" } + }, + "ru": { + "stringUnit": { + "state": "translated", + "value": "Ежегодно" + } } } }, @@ -10848,6 +17436,12 @@ "state": "translated", "value": "Du" } + }, + "ru": { + "stringUnit": { + "state": "translated", + "value": "Ты" + } } } }, @@ -10858,6 +17452,12 @@ "state": "translated", "value": "Dein API Key verlässt nie dein Gerät." } + }, + "ru": { + "stringUnit": { + "state": "translated", + "value": "Ваш ключ API никогда не покидает ваше устройство." + } } } }, @@ -10868,6 +17468,12 @@ "state": "translated", "value": "Deine API Keys sind sicher im Schlüsselbund gespeichert." } + }, + "ru": { + "stringUnit": { + "state": "translated", + "value": "Ваши ключи API надежно хранятся в Keychain." + } } } }, @@ -10878,6 +17484,12 @@ "state": "translated", "value": "Deine Überschreibungen" } + }, + "ru": { + "stringUnit": { + "state": "translated", + "value": "Ваши переопределения" + } } } }, @@ -10888,6 +17500,12 @@ "state": "translated", "value": "Deine Identität ist aktiv" } + }, + "ru": { + "stringUnit": { + "state": "translated", + "value": "Ваша личность активна" + } } } }, @@ -10898,6 +17516,12 @@ "state": "translated", "value": "Dein Schlüssel verlässt nie dein Gerät." } + }, + "ru": { + "stringUnit": { + "state": "translated", + "value": "Ваш ключ никогда не покидает ваше устройство." + } } } }, @@ -10908,6 +17532,12 @@ "state": "translated", "value": "Dein Name (optional)" } + }, + "ru": { + "stringUnit": { + "state": "translated", + "value": "Ваше имя (необязательно)" + } } } }, @@ -10918,6 +17548,12 @@ "state": "translated", "value": "Dein Server ist im lokalen Netzwerk sichtbar, solange Bonjour aktiviert ist." } + }, + "ru": { + "stringUnit": { + "state": "translated", + "value": "Ваш сервер доступен в локальной сети, пока Bonjour включен." + } } } }, @@ -10928,6 +17564,12 @@ "state": "translated", "value": "Code" } + }, + "ru": { + "stringUnit": { + "state": "translated", + "value": "код" + } } } }, @@ -10938,6 +17580,12 @@ "state": "translated", "value": "z.B. Downloads-Organizer" } + }, + "ru": { + "stringUnit": { + "state": "translated", + "value": "например, Организатор загрузок" + } } } }, @@ -10948,6 +17596,12 @@ "state": "translated", "value": "z.B. Forschungsanalyst" } + }, + "ru": { + "stringUnit": { + "state": "translated", + "value": "например, аналитик-исследователь" + } } } }, @@ -10958,6 +17612,12 @@ "state": "translated", "value": "z.B. Produktivität" } + }, + "ru": { + "stringUnit": { + "state": "translated", + "value": "например, производительность" + } } } }, @@ -10968,6 +17628,12 @@ "state": "translated", "value": "zum Senden" } + }, + "ru": { + "stringUnit": { + "state": "translated", + "value": "отправить" + } } } }, @@ -10978,6 +17644,12 @@ "state": "translated", "value": "Token" } + }, + "ru": { + "stringUnit": { + "state": "translated", + "value": "жетоны" + } } } }, @@ -10988,6 +17660,12 @@ "state": "translated", "value": "verbraucht" } + }, + "ru": { + "stringUnit": { + "state": "translated", + "value": "использовал" + } } } }, @@ -10998,6 +17676,12 @@ "state": "translated", "value": "Modell" } + }, + "ru": { + "stringUnit": { + "state": "translated", + "value": "модель" + } } } }, @@ -11008,6 +17692,12 @@ "state": "translated", "value": "Modelle" } + }, + "ru": { + "stringUnit": { + "state": "translated", + "value": "модели" + } } } }, @@ -11018,6 +17708,12 @@ "state": "translated", "value": "heruntergeladen" } + }, + "ru": { + "stringUnit": { + "state": "translated", + "value": "скачал" + } } } }, @@ -11028,6 +17724,12 @@ "state": "translated", "value": "Installiert" } + }, + "ru": { + "stringUnit": { + "state": "translated", + "value": "Установлено" + } } } }, @@ -11038,6 +17740,12 @@ "state": "translated", "value": "Wiederherstellung" } + }, + "ru": { + "stringUnit": { + "state": "translated", + "value": "Восстановление" + } } } }, @@ -11048,6 +17756,12 @@ "state": "translated", "value": "Wiederherstellungscode gespeichert" } + }, + "ru": { + "stringUnit": { + "state": "translated", + "value": "Код восстановления сохранен." + } } } }, @@ -11058,6 +17772,12 @@ "state": "translated", "value": "Aus MLX-Registry" } + }, + "ru": { + "stringUnit": { + "state": "translated", + "value": "Из реестра MLX" + } } } }, @@ -11068,6 +17788,12 @@ "state": "translated", "value": "Sprich und sieh deine Worte hier…" } + }, + "ru": { + "stringUnit": { + "state": "translated", + "value": "Говорите и смотрите свои слова здесь..." + } } } }, @@ -11078,6 +17804,12 @@ "state": "translated", "value": "Arbeitsspeicher" } + }, + "ru": { + "stringUnit": { + "state": "translated", + "value": "БАРАН" + } } } }, @@ -11088,6 +17820,12 @@ "state": "translated", "value": "Festplatte" } + }, + "ru": { + "stringUnit": { + "state": "translated", + "value": "Диск" + } } } }, @@ -11098,9 +17836,345 @@ "state": "translated", "value": "%.0f GB frei / %.0f GB" } + }, + "ru": { + "stringUnit": { + "state": "translated", + "value": "%.0f ГБ бесплатно / %.0f ГБ" + } + } + } + }, + "Allow agent to run commands in the sandbox": { + "localizations": { + "ru": { + "stringUnit": { + "state": "translated", + "value": "Разрешить агенту выполнять команды в песочнице" + } + } + } + }, + "Chat back and forth, or hand off long tasks. Schedules, webhooks, and plugins can dispatch a chat session that runs in the background while you keep working.": { + "localizations": { + "ru": { + "stringUnit": { + "state": "translated", + "value": "Общайтесь или передавайте длинные задачи. Расписания, веб-перехватчики и плагины могут запускать сеанс чата, который работает в фоновом режиме, пока вы продолжаете работать." + } + } + } + }, + "Chat that runs anywhere": { + "localizations": { + "ru": { + "stringUnit": { + "state": "translated", + "value": "Чат, который работает где угодно" + } + } + } + }, + "ChatGPT/Codex or Platform API": { + "localizations": { + "ru": { + "stringUnit": { + "state": "translated", + "value": "ChatGPT/Codex или API платформы" + } + } + } + }, + "Click to make this a secret value": { + "localizations": { + "ru": { + "stringUnit": { + "state": "translated", + "value": "Нажмите, чтобы сделать это значение секретным" + } + } + } + }, + "Commands": { + "localizations": { + "ru": { + "stringUnit": { + "state": "translated", + "value": "Команды" + } + } + } + }, + "Configure %@ settings for this agent.": { + "localizations": { + "ru": { + "stringUnit": { + "state": "translated", + "value": "Настройте параметры %@ для этого агента." + } + } + } + }, + "Create Your First Command": { + "localizations": { + "ru": { + "stringUnit": { + "state": "translated", + "value": "Создайте свою первую команду" + } + } + } + }, + "Default. Up to 5 relevant tools loaded.": { + "localizations": { + "ru": { + "stringUnit": { + "state": "translated", + "value": "По умолчанию. Загружено до 5 релевантных инструментов." + } + } + } + }, + "Encrypted storage": { + "localizations": { + "ru": { + "stringUnit": { + "state": "translated", + "value": "Зашифрованное хранилище" + } + } + } + }, + "End-to-end at-rest encryption for your local data": { + "localizations": { + "ru": { + "stringUnit": { + "state": "translated", + "value": "Сквозное шифрование при хранении ваших локальных данных" + } + } + } + }, + "Episodes": { + "localizations": { + "ru": { + "stringUnit": { + "state": "translated", + "value": "Эпизоды" + } + } + } + }, + "Hide Too Large": { + "localizations": { + "ru": { + "stringUnit": { + "state": "translated", + "value": "Скрыть слишком большие" + } + } + } + }, + "Manage your identity, overrides, and memory configuration": { + "localizations": { + "ru": { + "stringUnit": { + "state": "translated", + "value": "Управляйте своей идентификацией, переопределениями и конфигурацией памяти." + } + } + } + }, + "Minimal tool injection. Up to 2 tools loaded.": { + "localizations": { + "ru": { + "stringUnit": { + "state": "translated", + "value": "Минимальная подгрузка инструментов. Загружено до 2 инструментов." + } + } + } + }, + "New Command": { + "localizations": { + "ru": { + "stringUnit": { + "state": "translated", + "value": "Новая команда" + } + } + } + }, + "OpenAI Codex": { + "localizations": { + "ru": { + "stringUnit": { + "state": "translated", + "value": "OpenAI Codex" + } + } + } + }, + "Osaurus distills each conversation into your identity, salience-scored facts, and per-session episodes. Agents pull only what your next question needs. Your memory stays with you, not a provider.": { + "localizations": { + "ru": { + "stringUnit": { + "state": "translated", + "value": "Osaurus превращает каждый разговор в вашу личность, факты с оценкой значимости и эпизоды каждого сеанса. Агенты извлекают только то, что нужно для вашего следующего вопроса. Ваша память остается с вами, а не с поставщиком услуг." + } + } + } + }, + "Permission": { + "localizations": { + "ru": { + "stringUnit": { + "state": "translated", + "value": "Разрешение" + } + } + } + }, + "Pinned Facts": { + "localizations": { + "ru": { + "stringUnit": { + "state": "translated", + "value": "Закрепленные факты" + } + } + } + }, + "Please translate the following to Spanish:": { + "localizations": { + "ru": { + "stringUnit": { + "state": "translated", + "value": "Пожалуйста, переведите следующее на испанский:" + } + } + } + }, + "Refresh OsaurusAI models from Hugging Face": { + "localizations": { + "ru": { + "stringUnit": { + "state": "translated", + "value": "Обновите модели OsaurusAI из Hugging Face." + } + } + } + }, + "Reusable prompt shortcuts invoked by typing / in the chat input": { + "localizations": { + "ru": { + "stringUnit": { + "state": "translated", + "value": "Повторно используемые подсказки, вызываемые при вводе / в поле ввода чата." + } + } + } + }, + "Review this code for bugs and improvements:": { + "localizations": { + "ru": { + "stringUnit": { + "state": "translated", + "value": "Просмотрите этот код на наличие ошибок и улучшений:" + } + } + } + }, + "Server token (optional)": { + "localizations": { + "ru": { + "stringUnit": { + "state": "translated", + "value": "Токен сервера (необязательно)" + } + } + } + }, + "Short description shown in the popup": { + "localizations": { + "ru": { + "stringUnit": { + "state": "translated", + "value": "Краткое описание, отображаемое во всплывающем окне" + } + } + } + }, + "Sign in with ChatGPT": { + "localizations": { + "ru": { + "stringUnit": { + "state": "translated", + "value": "Войдите с помощью ChatGPT" + } + } + } + }, + "Signing in...": { + "localizations": { + "ru": { + "stringUnit": { + "state": "translated", + "value": "Вход в систему..." + } + } + } + }, + "Slash commands let you insert reusable prompts from the chat input by typing /name.": { + "localizations": { + "ru": { + "stringUnit": { + "state": "translated", + "value": "Слэш-команды позволяют вставлять повторно используемые подсказки из поля ввода чата, вводя /name." + } + } + } + }, + "Summarize the following in 3 bullet points:": { + "localizations": { + "ru": { + "stringUnit": { + "state": "translated", + "value": "Обобщите следующее в 3 пунктах:" + } + } + } + }, + "This value is stored securely": { + "localizations": { + "ru": { + "stringUnit": { + "state": "translated", + "value": "Это значение надежно хранится" + } + } + } + }, + "Value": { + "localizations": { + "ru": { + "stringUnit": { + "state": "translated", + "value": "Значение" + } + } + } + }, + "value": { + "localizations": { + "ru": { + "stringUnit": { + "state": "translated", + "value": "Значение" + } } } } }, "version": "1.0" -} \ No newline at end of file +}