From 7b67c9f44f61a000f5d041cea9172b16049de37b Mon Sep 17 00:00:00 2001 From: Sergey Pinus Date: Sat, 2 Sep 2023 03:46:36 +0500 Subject: [PATCH] =?UTF-8?q?=F0=9F=8C=90=20feat:=20Add=20russian=20localy?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- locales/ru_RU/common.json | 85 ++++++++++++++++ locales/ru_RU/empty.json | 6 ++ locales/ru_RU/error.json | 41 ++++++++ locales/ru_RU/plugin.json | 111 +++++++++++++++++++++ locales/ru_RU/setting.json | 175 +++++++++++++++++++++++++++++++++ locales/ru_RU/welcome.json | 14 +++ src/locales/options.ts | 4 + src/locales/resources/index.ts | 2 + src/locales/resources/ru_RU.ts | 17 ++++ 9 files changed, 455 insertions(+) create mode 100644 locales/ru_RU/common.json create mode 100644 locales/ru_RU/empty.json create mode 100644 locales/ru_RU/error.json create mode 100644 locales/ru_RU/plugin.json create mode 100644 locales/ru_RU/setting.json create mode 100644 locales/ru_RU/welcome.json create mode 100644 src/locales/resources/ru_RU.ts diff --git a/locales/ru_RU/common.json b/locales/ru_RU/common.json new file mode 100644 index 000000000000..a81be73f2c30 --- /dev/null +++ b/locales/ru_RU/common.json @@ -0,0 +1,85 @@ +{ + "about": "Наш Github", + "advanceSettings": "Дополнительные настройки", + "agentDefaultMessage": "Здравствуйте, я **{{name}}**. Вы можете начать общаться со мной прямо сейчас или перейти на [Assistant Settings](/chat/{{id}}/setting) для моей настройки.", + "agentDefaultMessageWithSystemRole": "Здравствуйте, Я **{{name}}**, {{systemRole}}. Давайте начнем общаться!", + "agentMaxToken": "Максимальная длина запроса", + "agentModel": "Модель", + "agentProfile": "Информация о помощнике", + "appInitializing": "LobeChat запускается, пожалуйста, подождите...", + "archive": "Архив", + "autoGenerate": "Автогенерация", + "autoGenerateTooltip": "Автогенерация описания помощника на основе подсказок", + "backToBottom": "Перейти к последним сообщениям", + "cancel": "Отмена", + "changelog": "Журнал изменений", + "clearCurrentMessages": "Очистить сообщения текущего сеанса", + "close": "Закрывать", + "confirmClearCurrentMessages": "Вы собираетесь удалить сообщения текущего сеанса? После очистки их невозможно восстановить. Пожалуйста, подтвердите вашу операцию.", + "confirmRemoveSessionItemAlert": "Вы собираетесь удалить этого помощника? После удаления его невозможно восстановить. Пожалуйста, подтвердите вашу операцию.", + "copy": "Копировать", + "copySuccess": "Скопировано", + "defaultAgent": "Пользовательский ассистент", + "defaultSession": "Пользовательский ассистент", + "delete": "Удалить", + "edit": "Редактировать", + "export": "Экспорт конфига", + "exportType": { + "agent": "Экспорт настроек помощника", + "agentWithMessage": "Экспорт помощника и переписки", + "all": "Экспорт глобальных настроек и всех данных ассистента", + "allAgent": "Экспорт всех настроек ассистента", + "allAgentWithMessage": "Экспорт всех помощников и переписок", + "globalSetting": "Экспорт глобальных настроек" + }, + "feedback": "Обратная связь", + "import": "Импорт конфига", + "inbox": { + "defaultMessage": "Hello, I'm your intelligent assistant. You can ask me any questions and I will do my best to answer you. If you need a more professional or customized assistant, you can click + to create a custom assistant.", + "desc": "Activate the brain cluster and spark your thinking. Your intelligent assistant is here to communicate with you about everything.", + "title": "Chat Freely" + }, + "message": { + "function_loading": "Запрос плагина в процессе..." + }, + "moreSetting": "Больше настроек...", + "newAgent": "Новый ассистент", + "noDescription": "Нет описания", + "ok": "ОК", + "pin": "Закрепить", + "pinOff": "Открепить", + "regenerate": "Ре-генерация", + "rename": "Переименовать", + "reset": "Сброс", + "retry": "Повторить", + "roleAndArchive": "Роли и архивы", + "searchAgentPlaceholder": "Поисковые помощники и беседы...", + "send": "Отправить", + "sendPlaceholder": "Введите ваше сообщение...", + "sessionList": "Список помощников", + "setting": "Настройки", + "share": "Поделиться", + "stop": "Остановить", + "tab": { + "chat": "Чат", + "market": "Магазин ассистентов", + "setting": "Настройки" + }, + "temp": "Временный", + "tokenDetail": "Установление ролей: {{systemRoleToken}} · История сообщений: {{chatsToken}}", + "tokenTag": { + "overload": "Превышение лимита", + "remained": "Осталось", + "used": "Использовано" + }, + "topic": { + "confirmRemoveTopic": "Вы собираетесь удалить эту тему? После удаления он не может быть восстановлен. Пожалуйста, действуйте с осторожностью.", + "defaultTitle": "Default", + "saveCurrentMessages": "Сохранить текущую сессию в качестве темы", + "searchPlaceholder": "Поиск тем...", + "title": "Тема" + }, + "updateAgent": "Обновление информации о помощнике", + "updatePrompt": "Обновление подсказок", + "warp": "Разрыв строки" +} diff --git a/locales/ru_RU/empty.json b/locales/ru_RU/empty.json new file mode 100644 index 000000000000..b599ed6ca71c --- /dev/null +++ b/locales/ru_RU/empty.json @@ -0,0 +1,6 @@ +{ + "topic": { + "desc": "Нажмите кнопку слева, чтобы сохранить текущий разговор как историческую тему и начать новый разговор", + "title": "Список тем" + } +} diff --git a/locales/ru_RU/error.json b/locales/ru_RU/error.json new file mode 100644 index 000000000000..8d09470bd5dc --- /dev/null +++ b/locales/ru_RU/error.json @@ -0,0 +1,41 @@ +{ + "pluginSettings": { + "desc": "Чтобы начать использовать этот плагин, выполните следующую конфигурацию", + "title": "{{name}} Конфигурация плагина" + }, + "response": { + "400": "Извините, сервер не понимает ваш запрос. Убедитесь в правильности параметров запроса", + "401": "Извините, сервер отклонил ваш запрос, возможно, из-за недостаточного количества разрешений или недействительной аутентификации.", + "403": "Извините, сервер отклонил ваш запрос. У вас нет разрешения на доступ к этому содержимому", + "404": "Извините, сервер не может найти запрошенную вами страницу или ресурс. Убедитесь, что ваш URL-адрес указан правильно.", + "405": "К сожалению, сервер не поддерживает используемый вами метод запроса. Убедитесь, что ваш метод запроса правильный.", + "429": "Извините, ваш запрос слишком частый, и сервер немного устал. Повторите попытку позже.", + "500": "К сожалению, сервер, похоже, испытывает некоторые трудности и временно не может выполнить ваш запрос. Повторите попытку позже.", + "502": "К сожалению, сервер, похоже, потерян и временно не может предоставлять услуги. Повторите попытку позже.", + "503": "К сожалению, сервер в настоящее время не может обработать ваш запрос, возможно, из-за перегрузки или технического обслуживания. Повторите попытку позже.", + "504": "К сожалению, сервер не получил ответа от вышестоящего сервера. Повторите попытку позже.", + "InvalidAccessCode": "Пароль неверен или пуст. Введите правильный пароль доступа или добавьте собственный ключ API OpenAI.", + "OpenAIBizError": "Ошибка запроса службы OpenAI. Устраните неполадку или повторите попытку, основываясь на следующей информации.", + "PluginMarketIndexNotFound": "К сожалению, сервер не смог найти индекс плагина. Пожалуйста, проверьте правильность адреса индекса", + "PluginMarketIndexInvalid": "К сожалению, проверка индекса плагина не удалась. Пожалуйста, проверьте правильность формата индексного файла", + "PluginMetaNotFound": "К сожалению, плагин не найден в индексе. Пожалуйста, проверьте информацию о конфигурации плагина в индексе", + "PluginMetaInvalid": "К сожалению, проверка метаданных плагина не удалась. Пожалуйста, проверьте правильность формата метаданных плагина", + "PluginManifestNotFound": "К сожалению, серверу не удалось найти файл манифеста плагина (manifest.json). Пожалуйста, проверьте правильность адреса файла манифеста плагина", + "PluginManifestInvalid": "К сожалению, проверка манифеста плагина не удалась. Пожалуйста, проверьте правильность формата манифеста", + "PluginApiNotFound": "К сожалению, API не существует в манифесте плагина. Пожалуйста, проверьте, соответствует ли ваш метод запроса API манифеста плагина", + "PluginApiParamsError": "К сожалению, проверка входных параметров для запроса плагина не удалась. Пожалуйста, проверьте, соответствуют ли входные параметры описанию API", + "PluginSettingsInvalid": "Этот плагин необходимо правильно настроить, прежде чем его можно будет использовать. Пожалуйста, проверьте правильность вашей конфигурации", + "PluginServerError": "Запрос сервера плагина возвратил ошибку. Проверьте файл манифеста плагина, конфигурацию плагина или реализацию сервера на основе информации об ошибке ниже" + }, + "unlock": { + "apikey": { + "description": "Введите свой ключ API OpenAI, чтобы обойти проверку пароля. Приложение не будет записывать ваш ключ API.", + "title": "Использовать собственный ключ API" + }, + "confirm": "Подтвердить и повторить попытку", + "password": { + "description": "Шифрование приложения включено администратором. Введите пароль приложения, чтобы разблокировать приложение. Пароль необходимо ввести только один раз.", + "title": "Введите пароль для разблокировки приложения" + } + } +} diff --git a/locales/ru_RU/plugin.json b/locales/ru_RU/plugin.json new file mode 100644 index 000000000000..4d2bbd366a88 --- /dev/null +++ b/locales/ru_RU/plugin.json @@ -0,0 +1,111 @@ +{ + "debug": { + "arguments": "Аргументы", + "function_call": "Вызов функции", + "response": "Ответ" + }, + "dev": { + "confirmDeleteDevPlugin": "Вы уверены, что хотите удалить этот локальный плагин? После удаления он не может быть восстановлен.", + "deleteSuccess": "Плагин успешно удален", + "manifest": { + "identifier": { + "desc": "Уникальный идентификатор плагина", + "label": "Идентификатор" + }, + "mode": { + "local": "Визуальная конфигурация", + "local-tooltip": "Визуальная конфигурация в настоящее время не поддерживается", + "url": "Онлайн-ссылка" + }, + "name": { + "desc": "Название плагина", + "label": "Название", + "placeholder": "Поисковая система" + } + }, + "meta": { + "author": { + "desc": "Автор плагина", + "label": "Автор" + }, + "avatar": { + "desc": "Иконка плагина, может представлять собой Emoji или URL", + "label": "Иконка" + }, + "description": { + "desc": "Описание плагина", + "label": "Описание", + "placeholder": "Получение информации из поисковых систем" + }, + "formFieldRequired": "Это поле обязательно для заполнения", + "homepage": { + "desc": "Домашняя страница плагина", + "label": "Homepage" + }, + "identifier": { + "desc": "Уникальный идентификатор плагина, поддерживаются только буквенно-цифровые символы, дефис - и символ подчеркивания _", + "errorDuplicate": "Идентификатор уже используется другим плагином, пожалуйста, измените идентификатор", + "label": "Идентификатор", + "pattenErrorMessage": "Допускаются только алфавитно-цифровые символы, дефис - и символ подчеркивания _" + }, + "manifest": { + "desc": "LobeChat установит плагин по этой ссылке", + "invalid": "Входная ссылка манифеста недействительна или не соответствует спецификации", + "label": "URL-адрес манифеста плагина", + "urlError": "Пожалуйста, введите действительный URL" + }, + "title": { + "desc": "Название плагина", + "label": "Название", + "placeholder": "Поисковая система" + } + }, + "metaConfig": "Конфигурация метаданных плагина", + "modalDesc": "После добавления пользовательского плагина его можно использовать для проверки разработки плагина или непосредственно в разговорах. Более подробная информация приведена в документации по разработке плагина.", + "preview": { + "card": "Предварительный просмотр отображения плагина", + "desc": "Предварительный просмотр описания плагина", + "title": "Предварительный просмотр имени плагина" + }, + "save": "Сохранить", + "saveSuccess": "Настройки плагина успешно сохранены", + "tabs": { + "manifest": "Описание функции Манифест (Manifest)", + "meta": "Метаданные плагина" + }, + "title": "Добавить пользовательский плагин" + }, + "list": { + "item": { + "local.config": "Конфигурация", + "local.title": "Местный" + } + }, + "loading": { + "content": "Загрузка...", + "plugin": "Плагин запущен..." + }, + "pluginList": "Список плагинов", + "plugins": { + "realtimeWeather": "Погода в реальном времени", + "searchEngine": "Поисковая система", + "undefined": "Обнаружение плагина...", + "websiteCrawler": "Website Crawler", + "неизвестно": "Идет обнаружение плагина..." + }, + "realtimeWeather": { + "data": { + "дата": "Дата", + "daytemp_float": "Дневная температура", + "dayweather": "Погода в дневное время", + "Дневной ветер": "Дневной ветер", + "nighttemp_float": "Температура в ночное время", + "nightweather": "Погода в ночное время", + "ночной ветер": "Ночной ветер", + "week": "Неделя" + }, + "title": "Данные о погоде на ближайшие 7 дней ({{city}})", + "updateAt": "Последнее обновление" + }, + "responseData": "Ответные данные" +} diff --git a/locales/ru_RU/setting.json b/locales/ru_RU/setting.json new file mode 100644 index 000000000000..b719bacb8c3f --- /dev/null +++ b/locales/ru_RU/setting.json @@ -0,0 +1,175 @@ +{ + "danger": { + "clear": { + "action": "Очистить все", + "confirm": "Подтвердить очистку всех данных чата?", + "desc": "Очистить все данные сессии", + "success": "Все сообщения сессии были очищены", + "title": "Очистить все сообщения сессии" + }, + "reset": { + "action": "Сбросить настройки", + "confirm": "Подтвердить сброс всех настроек?", + "currentVersion": "Текущая версия", + "desc": "Сброс всех настроек к значениям по умолчанию", + "title": "Сброс всех настроек" + } + }, + "header": { + "global": "Глобальные настройки", + "session": "Настройки сессии", + "sessionWithName": "Настройки сессии · {{name}}" + }, + "settingAgent": { + "avatar": { + "title": "Аватар" + }, + "backgroundColor": { + "title": "Цвет фона" + }, + "description": { + "placeholder": "Пожалуйста, введите описание помощника", + "title": "Описание помощника" + }, + "name": { + "placeholder": "Пожалуйста, введите имя ассистента", + "title": "Название" + }, + "prompt": { + "placeholder": "Пожалуйста, введите роль", + "title": "Промт роли" + }, + "tag": { + "placeholder": "Пожалуйста, введите тег", + "title": "Тег" + }, + "title": "Информация о помощнике" + }, + "settingChat": { + "chatStyleType": { + "title": "Стиль окна чата", + "type": { + "chat": "Режим чата", + "docs": "Режим документа" + } + }, + "compressThreshold": { + "desc": "Когда количество несжатых сообщений истории превысит это значение, будет произведено сжатие", + "title": "Порог сжатия длины истории сообщений" + }, + "enableCompressThreshold": { + "title": "Включить порог сжатия длины сообщений истории" + }, + "enableHistoryCount": { + "alias": "Неограниченный", + "limited": "Включать только {{number}} сообщение(й) сессии", + "title": "Ограничить количество истории сообщений", + "unlimited": "Неограниченное количество истории сообщений" + }, + "historyCount": { + "desc": "Количество сообщений, передаваемых в каждом запросе из истории", + "title": "Количество сообщений в прикрепленной истории" + }, + "inputTemplate": { + "desc": "В этот шаблон будет залито последнее сообщение пользователя", + "placeholder": "{{text}} будут заменены входной информацией, поступающей в режиме реального времени", + "title": "Предварительная обработка пользовательского ввода" + }, + "title": "Настройки чата" + }, + "settingModel": { + "enableMaxTokens": { + "title": "Включить ограничение токенов на один ответ" + }, + "frequencyPenalty": { + "desc": "Чем больше значение, тем больше вероятность сокращения повторяющихся слов", + "title": "Штраф за частоту" + }, + "maxTokens": { + "desc": "Максимальное количество токенов, используемых в одном взаимодействии", + "title": "Лимит на один ответ" + }, + "model": { + "desc": "Модель ChatGPT", + "list": { + "gpt-3.5-turbo": "GPT 3.5", + "gpt-3.5-turbo-16k": "GPT 3.5 (16K)", + "gpt-4": "GPT 4", + "gpt-4-32k": "GPT 4 (32K)" + }, + "title": "Модель" + }, + "presencePenalty": { + "desc": "Чем больше значение, тем больше вероятность общение на левые темы", + "title": "Точность темы" + }, + "temperature": { + "desc": "Чем больше значение, тем более случайным будет ответ", + "title": "Случайность", + "titleWithValue": "Случайность {{value}}" + }, + "title": "Настройки модели", + "topP": { + "desc": "Аналогично случайности, но не изменяются вместе со случайностью", + "title": "Ядерное сэмплирование" + } + }, + "settingOpenAI": { + "endpoint": { + "desc": "Должен включать http(s):// в дополнение к адресу по умолчанию.", + "placeholder": "https://api.openai.com/v1", + "title": "Адрес прокси API" + }, + "title": "Настройки OpenAI", + "token": { + "desc": "Используйте свой собственный ключ OpenAI", + "placeholder": "API-ключ OpenAI", + "title": "API-ключ" + } + }, + "settingPlugin": { + "title": "Список плагинов", + "add": "Добавить", + "addTooltip": "Добавить кастомный плагин", + "config": "{{id}} Конфигурация плагина" + }, + "settingSystem": { + "accessCode": { + "desc": "Шифрование доступа включено администратором", + "placeholder": "Пожалуйста, введите пароль доступа", + "title": "Пароль доступа" + }, + "title": "Настройки системы" + }, + "settingTheme": { + "avatar": { + "title": "Аватар" + }, + "fontSize": { + "desc": "Размер шрифта содержимого чата", + "title": "Размер шрифта" + }, + "lang": { + "title": "Языковые настройки" + }, + "neutralColor": { + "desc": "Пользовательская шкала серого для различных цветовых тенденций", + "title": "Нейтральный цвет" + }, + "primaryColor": { + "desc": "Пользовательский цвет темы", + "title": "Цвет темы" + }, + "themeMode": { + "auto": "Авто", + "dark": "Темная", + "light": "Светлая", + "title": "Тема" + }, + "title": "Настройки темы" + }, + "tab": { + "agent": "Помощник по умолчанию", + "common": "Общие настройки" + } +} diff --git a/locales/ru_RU/welcome.json b/locales/ru_RU/welcome.json new file mode 100644 index 000000000000..27aedc248fbd --- /dev/null +++ b/locales/ru_RU/welcome.json @@ -0,0 +1,14 @@ +{ + "button": { + "import": "Импорт конфига", + "start": "Начать" + }, + "header": "Привет", + "pickAgent": "Или выберите один из следующих шаблонов помощника", + "skip": "Пропустить создание", + "slogan": { + "desc1": "Раскройте силу своего мозга и разожгите свой творческий потенциал. Ваш умный помощник всегда под рукой.", + "desc2": "Создайте своего первого помощника и приступим~", + "title": "Используйте свой мозг более продуктивно" + } +} diff --git a/src/locales/options.ts b/src/locales/options.ts index 238dc8207049..40c2f9ef3748 100644 --- a/src/locales/options.ts +++ b/src/locales/options.ts @@ -16,4 +16,8 @@ export const options: LocaleOptions = [ label: 'English', value: 'en-US', }, + { + label: 'Russian', + value: 'ru-RU', + }, ] as LocaleOptions; diff --git a/src/locales/resources/index.ts b/src/locales/resources/index.ts index 88067c941eab..b17b7ba28f18 100644 --- a/src/locales/resources/index.ts +++ b/src/locales/resources/index.ts @@ -1,8 +1,10 @@ import en_US from './en_US'; +import ru_RU from './ru_RU'; import zh_CN from './zh_CN'; const resources = { 'en-US': en_US, + 'ru-RU': ru_RU, 'zh-CN': zh_CN, } as const; export default resources; diff --git a/src/locales/resources/ru_RU.ts b/src/locales/resources/ru_RU.ts new file mode 100644 index 000000000000..b0c3a92f8477 --- /dev/null +++ b/src/locales/resources/ru_RU.ts @@ -0,0 +1,17 @@ +import common from '../../../locales/ru_RU/common.json'; +import empty from '../../../locales/ru_RU/empty.json'; +import error from '../../../locales/ru_RU/error.json'; +import plugin from '../../../locales/ru_RU/plugin.json'; +import setting from '../../../locales/ru_RU/setting.json'; +import welcome from '../../../locales/ru_RU/welcome.json'; + +const resources = { + common, + empty, + error, + plugin, + setting, + welcome, +} as const; + +export default resources;