ru.ts 26 KB

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