ru.ts 26 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609
  1. import { SubmitKey } from "../store/config";
  2. import { PartialLocaleType } from "../locales/index";
  3. import { getClientConfig } from "../config/client";
  4. import { SAAS_CHAT_UTM_URL } from "@/app/constant";
  5. const isApp = !!getClientConfig()?.isApp;
  6. const ru: PartialLocaleType = {
  7. WIP: "Скоро...",
  8. Error: {
  9. Unauthorized: isApp
  10. ? `😆 В разговоре возникли некоторые проблемы, не переживайте:
  11. \\ 1️⃣ Если вы хотите начать без настройки, [нажмите здесь, чтобы немедленно начать разговор 🚀](${SAAS_CHAT_UTM_URL})
  12. \\ 2️⃣ Если вы хотите использовать свои ресурсы OpenAI, нажмите [здесь](/#/settings), чтобы изменить настройки ⚙️`
  13. : `😆 В разговоре возникли некоторые проблемы, не переживайте:
  14. \ 1️⃣ Если вы хотите начать без настройки, [нажмите здесь, чтобы немедленно начать разговор 🚀](${SAAS_CHAT_UTM_URL})
  15. \ 2️⃣ Если вы используете частную версию развертывания, нажмите [здесь](/#/auth), чтобы ввести ключ доступа 🔑
  16. \ 3️⃣ Если вы хотите использовать свои ресурсы OpenAI, нажмите [здесь](/#/settings), чтобы изменить настройки ⚙️
  17. `,
  18. },
  19. Auth: {
  20. Title: "Требуется пароль",
  21. Tips: "Администратор включил проверку пароля. Пожалуйста, введите код доступа ниже",
  22. SubTips: "Или введите ваш API-ключ OpenAI или Google",
  23. Input: "Введите код доступа здесь",
  24. Confirm: "Подтвердить",
  25. Later: "Позже",
  26. Return: "Назад",
  27. SaasTips: "Настройка слишком сложна, я хочу использовать это немедленно",
  28. TopTips:
  29. "🥳 Предложение по запуску NextChat AI: разблокируйте OpenAI o1, GPT-4o, Claude-3.5 и новейшие большие модели прямо сейчас",
  30. },
  31. ChatItem: {
  32. ChatItemCount: (count: number) => `${count} бесед`,
  33. },
  34. Chat: {
  35. SubTitle: (count: number) => `Всего ${count} бесед`,
  36. EditMessage: {
  37. Title: "Редактировать сообщение",
  38. Topic: {
  39. Title: "Тема чата",
  40. SubTitle: "Изменить текущую тему чата",
  41. },
  42. },
  43. Actions: {
  44. ChatList: "Просмотреть список сообщений",
  45. CompressedHistory: "Просмотреть сжатую историю подсказок",
  46. Export: "Экспортировать чат",
  47. Copy: "Копировать",
  48. Stop: "Остановить",
  49. Retry: "Повторить",
  50. Pin: "Закрепить",
  51. PinToastContent: "1 беседа закреплена в предустановленных подсказках",
  52. PinToastAction: "Просмотреть",
  53. Delete: "Удалить",
  54. Edit: "Редактировать",
  55. RefreshTitle: "Обновить заголовок",
  56. RefreshToast: "Запрос на обновление заголовка отправлен",
  57. },
  58. Commands: {
  59. new: "Новый чат",
  60. newm: "Создать чат из маски",
  61. next: "Следующий чат",
  62. prev: "Предыдущий чат",
  63. clear: "Очистить контекст",
  64. del: "Удалить чат",
  65. },
  66. InputActions: {
  67. Stop: "Остановить ответ",
  68. ToBottom: "Перейти к последнему",
  69. Theme: {
  70. auto: "Автоматическая тема",
  71. light: "Светлая тема",
  72. dark: "Темная тема",
  73. },
  74. Prompt: "Быстрая команда",
  75. Masks: "Все маски",
  76. Clear: "Очистить чат",
  77. Settings: "Настройки чата",
  78. UploadImage: "Загрузить изображение",
  79. },
  80. Rename: "Переименовать чат",
  81. Typing: "Печатает…",
  82. Input: (submitKey: string) => {
  83. var inputHints = `${submitKey} Отправить`;
  84. if (submitKey === String(SubmitKey.Enter)) {
  85. inputHints += ",Shift + Enter для новой строки";
  86. }
  87. return inputHints + ",/ для автозаполнения,: для команд";
  88. },
  89. Send: "Отправить",
  90. Config: {
  91. Reset: "Очистить память",
  92. SaveAs: "Сохранить как маску",
  93. },
  94. IsContext: "Предустановленные подсказки",
  95. },
  96. Export: {
  97. Title: "Поделиться историей чата",
  98. Copy: "Копировать все",
  99. Download: "Скачать файл",
  100. Share: "Поделиться в ShareGPT",
  101. MessageFromYou: "Пользователь",
  102. MessageFromChatGPT: "ChatGPT",
  103. Format: {
  104. Title: "Формат экспорта",
  105. SubTitle: "Можно экспортировать как Markdown текст или PNG изображение",
  106. },
  107. IncludeContext: {
  108. Title: "Включить контекст маски",
  109. SubTitle: "Показывать ли контекст маски в сообщениях",
  110. },
  111. Steps: {
  112. Select: "Выбрать",
  113. Preview: "Предпросмотр",
  114. },
  115. Image: {
  116. Toast: "Создание скриншота",
  117. Modal: "Длительное нажатие или правый клик для сохранения изображения",
  118. },
  119. },
  120. Select: {
  121. Search: "Поиск сообщений",
  122. All: "Выбрать все",
  123. Latest: "Последние сообщения",
  124. Clear: "Очистить выбор",
  125. },
  126. Memory: {
  127. Title: "Историческое резюме",
  128. EmptyContent: "Содержимое чата слишком короткое, чтобы суммировать",
  129. Send: "Автоматически сжать историю чата и отправить как контекст",
  130. Copy: "Копировать резюме",
  131. Reset: "[не используется]",
  132. ResetConfirm: "Подтвердить очистку исторического резюме?",
  133. },
  134. Home: {
  135. NewChat: "Новый чат",
  136. DeleteChat: "Подтвердить удаление выбранного чата?",
  137. DeleteToast: "Беседа удалена",
  138. Revert: "Отменить",
  139. },
  140. Settings: {
  141. Title: "Настройки",
  142. SubTitle: "Все параметры настроек",
  143. Danger: {
  144. Reset: {
  145. Title: "Сброс всех настроек",
  146. SubTitle: "Сброс всех параметров до значений по умолчанию",
  147. Action: "Сбросить сейчас",
  148. Confirm: "Подтвердить сброс всех настроек?",
  149. },
  150. Clear: {
  151. Title: "Очистить все данные",
  152. SubTitle: "Очистить все чаты и данные настроек",
  153. Action: "Очистить сейчас",
  154. Confirm: "Подтвердить очистку всех чатов и данных настроек?",
  155. },
  156. },
  157. Lang: {
  158. Name: "Language", // ATTENTION: если вы хотите добавить новый перевод, не переводите это значение, оставьте его как `Language`
  159. All: "Все языки",
  160. },
  161. Avatar: "Аватар",
  162. FontSize: {
  163. Title: "Размер шрифта",
  164. SubTitle: "Размер шрифта в чате",
  165. },
  166. FontFamily: {
  167. Title: "Шрифт чата",
  168. SubTitle:
  169. "Шрифт содержимого чата, оставьте пустым для применения глобального шрифта по умолчанию",
  170. Placeholder: "Название шрифта",
  171. },
  172. InjectSystemPrompts: {
  173. Title: "Вставить системные подсказки",
  174. SubTitle:
  175. "Принудительно добавлять системную подсказку, имитирующую ChatGPT, в начале каждого запроса",
  176. },
  177. InputTemplate: {
  178. Title: "Предварительная обработка пользовательского ввода",
  179. SubTitle:
  180. "Последнее сообщение пользователя будет подставлено в этот шаблон",
  181. },
  182. Update: {
  183. Version: (x: string) => `Текущая версия: ${x}`,
  184. IsLatest: "Установлена последняя версия",
  185. CheckUpdate: "Проверить обновления",
  186. IsChecking: "Проверка обновлений...",
  187. FoundUpdate: (x: string) => `Найдено новое обновление: ${x}`,
  188. GoToUpdate: "Перейти к обновлению",
  189. },
  190. SendKey: "Кнопка отправки",
  191. Theme: "Тема",
  192. TightBorder: "Режим без границ",
  193. SendPreviewBubble: {
  194. Title: "Предварительный просмотр пузырьков",
  195. SubTitle:
  196. "Просмотр содержимого Markdown в пузырьках предварительного просмотра",
  197. },
  198. AutoGenerateTitle: {
  199. Title: "Автоматическое создание заголовка",
  200. SubTitle: "Создание подходящего заголовка на основе содержания беседы",
  201. },
  202. Sync: {
  203. CloudState: "Облачные данные",
  204. NotSyncYet: "Синхронизация еще не проводилась",
  205. Success: "Синхронизация успешна",
  206. Fail: "Не удалось синхронизировать",
  207. Config: {
  208. Modal: {
  209. Title: "Настройки облачной синхронизации",
  210. Check: "Проверить доступность",
  211. },
  212. SyncType: {
  213. Title: "Тип синхронизации",
  214. SubTitle: "Выберите предпочитаемый сервер синхронизации",
  215. },
  216. Proxy: {
  217. Title: "Включить прокси",
  218. SubTitle:
  219. "При синхронизации в браузере необходимо включить прокси для предотвращения ограничений кросс-домена",
  220. },
  221. ProxyUrl: {
  222. Title: "Адрес прокси",
  223. SubTitle: "Только для встроенного прокси в проекте",
  224. },
  225. WebDav: {
  226. Endpoint: "WebDAV адрес",
  227. UserName: "Имя пользователя",
  228. Password: "Пароль",
  229. },
  230. UpStash: {
  231. Endpoint: "UpStash Redis REST Url",
  232. UserName: "Имя резервной копии",
  233. Password: "UpStash Redis REST Token",
  234. },
  235. },
  236. LocalState: "Локальные данные",
  237. Overview: (overview: any) => {
  238. return `${overview.chat} бесед, ${overview.message} сообщений, ${overview.prompt} подсказок, ${overview.mask} масок`;
  239. },
  240. ImportFailed: "Не удалось импортировать",
  241. },
  242. Mask: {
  243. Splash: {
  244. Title: "Стартовая страница масок",
  245. SubTitle:
  246. "При создании нового чата отображать стартовую страницу масок",
  247. },
  248. Builtin: {
  249. Title: "Скрыть встроенные маски",
  250. SubTitle: "Скрыть встроенные маски во всех списках масок",
  251. },
  252. },
  253. Prompt: {
  254. Disable: {
  255. Title: "Отключить автозаполнение подсказок",
  256. SubTitle: "Введите / в начале строки для активации автозаполнения",
  257. },
  258. List: "Список пользовательских подсказок",
  259. ListCount: (builtin: number, custom: number) =>
  260. `Встроенные ${builtin}, пользовательские ${custom}`,
  261. Edit: "Редактировать",
  262. Modal: {
  263. Title: "Список подсказок",
  264. Add: "Создать",
  265. Search: "Поиск подсказок",
  266. },
  267. EditModal: {
  268. Title: "Редактировать подсказки",
  269. },
  270. },
  271. HistoryCount: {
  272. Title: "Количество истории сообщений",
  273. SubTitle: "Количество историй сообщений, отправляемых с каждым запросом",
  274. },
  275. CompressThreshold: {
  276. Title: "Порог сжатия длины истории сообщений",
  277. SubTitle:
  278. "Когда не сжатая история сообщений превышает это значение, происходит сжатие",
  279. },
  280. Usage: {
  281. Title: "Проверка баланса",
  282. SubTitle(used: any, total: any) {
  283. return `Использовано в этом месяце $${used}, всего по подписке $${total}`;
  284. },
  285. IsChecking: "Проверка…",
  286. Check: "Проверить снова",
  287. NoAccess: "Введите API-ключ или пароль доступа для просмотра баланса",
  288. },
  289. Access: {
  290. SaasStart: {
  291. Title: "Используйте NextChat AI",
  292. Label: "(Самое экономичное решение)",
  293. SubTitle:
  294. "Официально поддерживается NextChat, готов к использованию без настройки, поддерживает последние крупные модели, такие как OpenAI o1, GPT-4o и Claude-3.5",
  295. ChatNow: "Начать чат",
  296. },
  297. AccessCode: {
  298. Title: "Пароль доступа",
  299. SubTitle: "Администратор включил защиту паролем",
  300. Placeholder: "Введите пароль доступа",
  301. },
  302. CustomEndpoint: {
  303. Title: "Пользовательский интерфейс",
  304. SubTitle: "Использовать ли пользовательский Azure или OpenAI сервис",
  305. },
  306. Provider: {
  307. Title: "Провайдер модели",
  308. SubTitle: "Переключиться на другого провайдера",
  309. },
  310. OpenAI: {
  311. ApiKey: {
  312. Title: "API-ключ",
  313. SubTitle:
  314. "Использовать пользовательский OpenAI-ключ для обхода ограничений пароля",
  315. Placeholder: "OpenAI API-ключ",
  316. },
  317. Endpoint: {
  318. Title: "Адрес интерфейса",
  319. SubTitle: "Кроме адреса по умолчанию, должен содержать http(s)://",
  320. },
  321. },
  322. Azure: {
  323. ApiKey: {
  324. Title: "Ключ интерфейса",
  325. SubTitle:
  326. "Использовать пользовательский Azure-ключ для обхода ограничений пароля",
  327. Placeholder: "Azure API-ключ",
  328. },
  329. Endpoint: {
  330. Title: "Адрес интерфейса",
  331. SubTitle: "Пример:",
  332. },
  333. ApiVerion: {
  334. Title: "Версия интерфейса (azure api version)",
  335. SubTitle: "Выберите конкретную версию",
  336. },
  337. },
  338. Anthropic: {
  339. ApiKey: {
  340. Title: "Ключ интерфейса",
  341. SubTitle:
  342. "Использовать пользовательский Anthropic-ключ для обхода ограничений пароля",
  343. Placeholder: "Anthropic API-ключ",
  344. },
  345. Endpoint: {
  346. Title: "Адрес интерфейса",
  347. SubTitle: "Пример:",
  348. },
  349. ApiVerion: {
  350. Title: "Версия интерфейса (claude api version)",
  351. SubTitle: "Выберите конкретную версию API",
  352. },
  353. },
  354. Google: {
  355. ApiKey: {
  356. Title: "API-ключ",
  357. SubTitle: "Получите ваш API-ключ Google AI",
  358. Placeholder: "Введите ваш API-ключ Google AI Studio",
  359. },
  360. Endpoint: {
  361. Title: "Адрес интерфейса",
  362. SubTitle: "Пример:",
  363. },
  364. ApiVersion: {
  365. Title: "Версия API (только для gemini-pro)",
  366. SubTitle: "Выберите конкретную версию API",
  367. },
  368. GoogleSafetySettings: {
  369. Title: "Уровень фильтрации Google",
  370. SubTitle: "Настроить уровень фильтрации контента",
  371. },
  372. },
  373. Baidu: {
  374. ApiKey: {
  375. Title: "API-ключ",
  376. SubTitle: "Использовать пользовательский Baidu API-ключ",
  377. Placeholder: "Baidu API-ключ",
  378. },
  379. SecretKey: {
  380. Title: "Секретный ключ",
  381. SubTitle: "Использовать пользовательский Baidu Secret Key",
  382. Placeholder: "Baidu Secret Key",
  383. },
  384. Endpoint: {
  385. Title: "Адрес интерфейса",
  386. SubTitle:
  387. "Не поддерживает пользовательскую настройку, перейдите в .env",
  388. },
  389. },
  390. ByteDance: {
  391. ApiKey: {
  392. Title: "Ключ интерфейса",
  393. SubTitle: "Использовать пользовательский ByteDance API-ключ",
  394. Placeholder: "ByteDance API-ключ",
  395. },
  396. Endpoint: {
  397. Title: "Адрес интерфейса",
  398. SubTitle: "Пример:",
  399. },
  400. },
  401. Alibaba: {
  402. ApiKey: {
  403. Title: "Ключ интерфейса",
  404. SubTitle: "Использовать пользовательский Alibaba Cloud API-ключ",
  405. Placeholder: "Alibaba Cloud API-ключ",
  406. },
  407. Endpoint: {
  408. Title: "Адрес интерфейса",
  409. SubTitle: "Пример:",
  410. },
  411. },
  412. AI302: {
  413. ApiKey: {
  414. Title: "Ключ интерфейса",
  415. SubTitle: "Использовать пользовательский 302.AI API-ключ",
  416. Placeholder: "302.AI API-ключ",
  417. },
  418. Endpoint: {
  419. Title: "Адрес интерфейса",
  420. SubTitle: "Пример:",
  421. },
  422. },
  423. CustomModel: {
  424. Title: "Название пользовательской модели",
  425. SubTitle:
  426. "Добавьте варианты пользовательских моделей, разделяя запятыми",
  427. },
  428. },
  429. Model: "Модель",
  430. CompressModel: {
  431. Title: "Модель сжатия",
  432. SubTitle: "Модель, используемая для сжатия истории",
  433. },
  434. Temperature: {
  435. Title: "Случайность (temperature)",
  436. SubTitle: "Чем больше значение, тем более случайные ответы",
  437. },
  438. TopP: {
  439. Title: "Ядро выборки (top_p)",
  440. SubTitle: "Похожие на случайность, но не изменяйте вместе с случайностью",
  441. },
  442. MaxTokens: {
  443. Title: "Ограничение на количество токенов за один раз (max_tokens)",
  444. SubTitle: "Максимальное количество токенов на одно взаимодействие",
  445. },
  446. PresencePenalty: {
  447. Title: "Наказание за новизну тем (presence_penalty)",
  448. SubTitle:
  449. "Чем больше значение, тем выше вероятность расширения на новые темы",
  450. },
  451. FrequencyPenalty: {
  452. Title: "Наказание за частоту (frequency_penalty)",
  453. SubTitle:
  454. "Чем больше значение, тем выше вероятность уменьшения повторяющихся слов",
  455. },
  456. },
  457. Store: {
  458. DefaultTopic: "Новый чат",
  459. BotHello: "Чем могу помочь?",
  460. Error: "Произошла ошибка, попробуйте позже",
  461. Prompt: {
  462. History: (content: string) =>
  463. "Это резюме истории чата как предыстория: " + content,
  464. Topic:
  465. "Укажите краткую тему этого сообщения в четырех-пяти словах, без объяснений, знаков препинания, междометий, лишнего текста или выделения. Если темы нет, просто напишите 'Болтовня'",
  466. Summarize:
  467. "Кратко подведите итоги содержимого беседы для использования в качестве последующего контекстного запроса, не более 200 слов",
  468. },
  469. },
  470. Copy: {
  471. Success: "Скопировано в буфер обмена",
  472. Failed: "Не удалось скопировать, предоставьте доступ к буферу обмена",
  473. },
  474. Download: {
  475. Success: "Содержимое успешно загружено в вашу директорию.",
  476. Failed: "Не удалось загрузить.",
  477. },
  478. Context: {
  479. Toast: (x: any) => `Содержит ${x} предустановленных подсказок`,
  480. Edit: "Текущие настройки чата",
  481. Add: "Добавить новый чат",
  482. Clear: "Контекст очищен",
  483. Revert: "Восстановить контекст",
  484. },
  485. Plugin: {
  486. Name: "Плагины",
  487. },
  488. FineTuned: {
  489. Sysmessage: "Вы - помощник",
  490. },
  491. SearchChat: {
  492. Name: "Поиск",
  493. Page: {
  494. Title: "Поиск в истории чатов",
  495. Search: "Введите ключевые слова для поиска",
  496. NoResult: "Результатов не найдено",
  497. NoData: "Нет данных",
  498. Loading: "Загрузка",
  499. SubTitle: (count: number) => `Найдено ${count} результатов`,
  500. },
  501. Item: {
  502. View: "Просмотр",
  503. },
  504. },
  505. Mask: {
  506. Name: "Маска",
  507. Page: {
  508. Title: "Предустановленные роли",
  509. SubTitle: (count: number) => `${count} предустановленных ролей`,
  510. Search: "Поиск ролей",
  511. Create: "Создать",
  512. },
  513. Item: {
  514. Info: (count: number) => `Содержит ${count} предустановленных диалогов`,
  515. Chat: "Диалог",
  516. View: "Просмотреть",
  517. Edit: "Редактировать",
  518. Delete: "Удалить",
  519. DeleteConfirm: "Подтвердить удаление?",
  520. },
  521. EditModal: {
  522. Title: (readonly: boolean) =>
  523. `Редактирование предустановленной маски ${
  524. readonly ? "(только для чтения)" : ""
  525. }`,
  526. Download: "Скачать предустановку",
  527. Clone: "Клонировать предустановку",
  528. },
  529. Config: {
  530. Avatar: "Аватар роли",
  531. Name: "Название роли",
  532. Sync: {
  533. Title: "Использовать глобальные настройки",
  534. SubTitle:
  535. "Будет ли текущий чат использовать глобальные настройки модели",
  536. Confirm:
  537. "Пользовательские настройки текущего чата будут автоматически заменены, подтвердите активацию глобальных настроек?",
  538. },
  539. HideContext: {
  540. Title: "Скрыть предустановленные диалоги",
  541. SubTitle:
  542. "После скрытия предустановленные диалоги не будут отображаться в чате",
  543. },
  544. Share: {
  545. Title: "Поделиться этой маской",
  546. SubTitle: "Создать прямую ссылку на эту маску",
  547. Action: "Скопировать ссылку",
  548. },
  549. },
  550. },
  551. NewChat: {
  552. Return: "Вернуться",
  553. Skip: "Начать сразу",
  554. NotShow: "Больше не показывать",
  555. ConfirmNoShow:
  556. "Подтвердить отключение? После отключения вы всегда сможете включить его снова в настройках.",
  557. Title: "Выберите маску",
  558. SubTitle: "Начните сейчас, столкнитесь с мыслями за маской",
  559. More: "Показать все",
  560. },
  561. URLCommand: {
  562. Code: "Обнаружен код доступа в ссылке, автоматически заполнить?",
  563. Settings:
  564. "Обнаружены предустановленные настройки в ссылке, автоматически заполнить?",
  565. },
  566. UI: {
  567. Confirm: "Подтвердить",
  568. Cancel: "Отмена",
  569. Close: "Закрыть",
  570. Create: "Создать",
  571. Edit: "Редактировать",
  572. Export: "Экспортировать",
  573. Import: "Импортировать",
  574. Sync: "Синхронизировать",
  575. Config: "Настройки",
  576. },
  577. Exporter: {
  578. Description: {
  579. Title: "Только сообщения после очистки контекста будут отображаться",
  580. },
  581. Model: "Модель",
  582. Messages: "Сообщения",
  583. Topic: "Тема",
  584. Time: "Время",
  585. },
  586. };
  587. export default ru;