Merge pull request #2708 from Yokayo/staging Update ru-ru translation
Signed| @@ -4097,7 +4097,7 @@ | ||
| 4097 | 4097 | <input id="movingUImode" type="checkbox" /> |
| 4098 | 4098 | <small data-i18n="Movable UI Panels">MovingUI <i class="fa-solid fa-desktop"></i></small> |
| 4099 | 4099 | </label> |
| 4100 | 4100 | <div data-newbie-hidden id="movingUIreset" title="Reset MovingUI panel sizes/locations." class="menu_button margin0" data-i18n="[title]Reset MovingUI panel sizes/locations."><i class=" fa-solid fa-recycle margin-r5"></i> <span data-i18n="mui_reset">Reset</span></div> |
| 4101 | 4101 | </div> |
| 4102 | 4102 | <div data-newbie-hidden id="MovingUI-presets-block" class="flex-container alignitemscenter"> |
| 4103 | 4103 | <div class="flex-container alignItemsFlexEnd"> |
| @@ -43,7 +43,7 @@ | ||
| 43 | 43 | "Smoothing Factor": "Коэффициент сглаживания", |
| 44 | 44 | "No Repeat Ngram Size": "Размер no_repeat_ngram", |
| 45 | 45 | "Min Length": "Мин. длина", |
| 46 | 46 | "Alternative server URL (leave empty to use the default value).": "Альтернативный URL альтернативного сервера (оставьте пустым для стандартного значения)", |
| 47 | 47 | "Remove your real OAI API Key from the API panel BEFORE typing anything into this box": "Удалите свой личный OAI API Key из панели API, и ТОЛЬКО ПОСЛЕ ЭТОГО вводите что-то сюда", |
| 48 | 48 | "We cannot provide support for problems encountered while using an unofficial OpenAI proxy": "Мы не сможем предоставить помощь с проблемами, с которыми вы столкнетесь при использовании неофициальных прокси для OpenAI", |
| 49 | 49 | "Context Size (tokens)": "Размер контекста (в токенах)", |
| @@ -186,7 +186,7 @@ | ||
| 186 | 186 | "Generate only one line per request": "Генерировать одну строку на запрос", |
| 187 | 187 | "Misc. Settings": "Доп. настройки", |
| 188 | 188 | "Auto-Continue": "Авто-продолжение", |
| 189 | 189 | "Collapse Consecutive Newlines": "Сворачивать последовательныенеск. новыеновых строкистрок в одну", |
| 190 | 190 | "Allow for Chat Completion APIs": "Разрешить для Chat Completion API", |
| 191 | 191 | "Target length (tokens)": "Целевая длина (в токенах)", |
| 192 | 192 | "World Info": "Информация о мире", |
| @@ -373,7 +373,7 @@ | ||
| 373 | 373 | "Prefer Character Card Prompt": "Приоритет промпту из карточки персонажа", |
| 374 | 374 | "Prefer Character Card Jailbreak": "Приоритет джейлбрейку из карточки персонажа", |
| 375 | 375 | "Press Send to continue": "Кнопка отправки продолжает сообщение", |
| 376 | 376 | "Quick 'Continue' button": "Кнопка быстрогоБыстрое продолженияпродолжение", |
| 377 | 377 | "Log prompts to console": "Выводить промпты в консоль", |
| 378 | 378 | "Never resize avatars": "Не менять размер аватарок", |
| 379 | 379 | "Show avatar filenames": "Показывать названия файлов аватарок", |
| @@ -495,7 +495,7 @@ | ||
| 495 | 495 | "(Write a comma-separated list of tags)": "(Список тегов через запятую)", |
| 496 | 496 | "(A brief description of the personality)": "(Краткое описание личности)", |
| 497 | 497 | "(Circumstances and context of the interaction)": "(Обстоятельства и контекст этого диалога)", |
| 498 | 498 | "(Examples of chat dialog. Begin each example with START on a new line.)": "(Примеры диалога. Начинайте каждый пример с START или новой линиейстрокой.)", |
| 499 | 499 | "Type here...": "Пишите здесь...", |
| 500 | 500 | "Comma separated (required)": "Через запятую (обязательное поле)", |
| 501 | 501 | "What this keyword should mean to the AI, sent verbatim": "Что это ключевое слово должно означать для ИИ, отправляется дословно", |
| @@ -552,7 +552,7 @@ | ||
| 552 | 552 | "Click to set a new User Name": "Нажмите, чтобы задать новое имя пользователя.", |
| 553 | 553 | "Click to lock your selected persona to the current chat. Click again to remove the lock.": "Нажмите, чтобы закрепить выбранную персону для текущего чата. Нажмите еще раз, чтобы открепить.", |
| 554 | 554 | "Click to set user name for all messages": "Нажмите, чтобы задать имя пользователя для всех сообщений.", |
| 555 | 555 | "Create a dummy persona": "Создать пустую персону-болванку", |
| 556 | 556 | "Character Management": "Управление персонажами", |
| 557 | 557 | "Locked = Character Management panel will stay open": "Закреплено = Панель управление персонажами останется открытой", |
| 558 | 558 | "Select/Create Characters": "Выбрать/Создать персонажа", |
| @@ -625,7 +625,7 @@ | ||
| 625 | 625 | "Automatically select a background based on the chat context": "Автоматический выбор фона в зависимости от контекста чата", |
| 626 | 626 | "Filter": "Фильтр", |
| 627 | 627 | "Exclude message from prompts": "Исключить сообщение из промпта", |
| 628 | 628 | "Include message in prompts": "Включить сообщение в подсказкипромпт", |
| 629 | 629 | "Create checkpoint": "Создать чекпоинт", |
| 630 | 630 | "Create Branch": "Создать ветку", |
| 631 | 631 | "Embed file or image": "Вставить файл или изображение", |
| @@ -1661,5 +1661,52 @@ | ||
| 1661 | 1661 | "ext_regex_ai_output_desc": "Сообщения, полученные от API", |
| 1662 | 1662 | "ext_regex_sts_desc": "Сообщения, отправленные с помощью команд STscript", |
| 1663 | 1663 | "ext_regex_wi_desc": "Содержимое лорбуков и миров. Для работы требует включения флажка \"Только промпт\"!", |
| 1664 | 1664 | "ext_regex_only_format_display_desc": "История чата не изменится, замена будет осуществляться только в отображаемом сообщении (в UI)", |
| 1665 | + "Prefer Character Card Instructions": "Приоритет инструкциям из карточек", | |
| 1666 | + "If checked and the character card contains a Post-History Instructions override, use that instead": "Если в карточке персонажа имеется собственная инструкция после истории, в промпт попадёт именно она", | |
| 1667 | + "Auto-select Input Text": "Автовыделение вводимого текста", | |
| 1668 | + "Enable auto-select of input text in some text fields when clicking/selecting them. Applies to popup input textboxes, and possible other custom input fields.": "Автоматически выделять вводимый текст в некоторых текстовых полях при клике/выборе. Работает для вспл. окон и различных кастомных полей ввода.", | |
| 1669 | + "Reset MovingUI panel sizes/locations.": "Сбросить расположение и размеры панелей MovingUI.", | |
| 1670 | + "mui_reset": "Сброс", | |
| 1671 | + "Quick 'Impersonate' button": "Быстрое перевоплощение", | |
| 1672 | + "Show a button in the input area to ask the AI to impersonate your character for a single message": "Показать в поле ввода кнопку, по нажатии на которую ИИ сгенерирует одно сообщение от лица вашего персонажа.", | |
| 1673 | + "Separators as Stop Strings": "Разделители как стоп-строки", | |
| 1674 | + "Names as Stop Strings": "Имена как стоп-строки", | |
| 1675 | + "Add Character and User names to a list of stopping strings.": "Добавлять имена персонажа и пользователя в список стоп-строк.", | |
| 1676 | + "Allow Post-History Instructions": "Разрешить инструкции после истории", | |
| 1677 | + "context_allow_post_history_instructions": "Добавлять в конец промпта инструкции после истории. Работает только при наличии таких инструкций в карточке И при включенной опции ''Приоритет инструкциям из карточек''.\nНЕ РЕКОМЕНДУЕТСЯ ДЛЯ МОДЕЛЕЙ TEXT COMPLETION, МОЖЕТ ПОРТИТЬ ВЫХОДНОЙ ТЕКСТ.", | |
| 1678 | + "First User Prefix": "Первый префикс пользователя", | |
| 1679 | + "Inserted before the first User's message.": "Вставляется перед первым сообщением пользователя.", | |
| 1680 | + "Last User Prefix": "Последний префикс пользователя", | |
| 1681 | + "instruct_last_input_sequence": "Вставляется перед последним сообщением пользователя.", | |
| 1682 | + "Inserted before a User message and as a last prompt line when impersonating.": "Вставляется перед сообщением пользователя в качестве последней строки промпта при перевоплощении.", | |
| 1683 | + "Inserted before a System (added by slash commands or extensions) message.": "Вставляется перед сообщением системы (может быть добавлено слэш-командой или расширением).", | |
| 1684 | + "Load Asset List": "Загрузить список ресурсов", | |
| 1685 | + "Never add character names.": "Не вставлять имя персонажа.", | |
| 1686 | + "Don't add character names unless necessary.": "Вставлять имя персонажа только когда это необходимо.", | |
| 1687 | + "character_names_none": "Не добавлять имена персонажей в качестве префикса. Может повредить качеству ответов в групповых чатах, используйте с осторожностью.", | |
| 1688 | + "Auxiliary": "Вспомогательный", | |
| 1689 | + "Post-History Instructions": "Инструкции после истории", | |
| 1690 | + "Current persona updated": "Текущая персона изменена", | |
| 1691 | + "Your messages will now be sent as ${0}": "Ваши сообщения будут отправляться от лица ${0}", | |
| 1692 | + "Copied!": "Скопировано!", | |
| 1693 | + "Are you sure you want to delete this message?": "Вы точно хотите удалить это сообщение?", | |
| 1694 | + "Delete Message": "Удалить сообщение", | |
| 1695 | + "Delete Swipe": "Удалить свайп", | |
| 1696 | + "Could not get a reply from API. Check your connection settings / API key and try again.": "Не удалось получить ответ от API. Проверьте настройки соединения и API-ключ и повторите попытку.", | |
| 1697 | + "Connecting To Proxy": "Подключение к прокси", | |
| 1698 | + "Are you sure you want to connect to the following proxy URL?": "Вы точно хотите соединиться с прокси по этому адресу?", | |
| 1699 | + "API connection successful!": "Соединение с API установлено!", | |
| 1700 | + "Proxy Saved": "Прокси сохранена", | |
| 1701 | + "Proxy Deleted": "Прокси удалена", | |
| 1702 | + "Could not find proxy with name '${0}'": "Не удалось найти прокси с названием '${0}'", | |
| 1703 | + "Proxy preset '${0}' not found in proxies array.": "Пресет с названием '${0}' не найден в списке прокси.", | |
| 1704 | + "Please wait for the previous request to complete.": "Пожалуйста, дождитесь окончания обработки предыдущего запроса.", | |
| 1705 | + "Start new chat?": "Начать новый чат?", | |
| 1706 | + "If necessary, you can later restore this chat file from the /backups folder": "При необходимости этот чат можно будет восстановить из папки /backups", | |
| 1707 | + "Also delete the current chat file": "Также удалить текущий чат", | |
| 1708 | + "chat_rename_1": "Введите новое имя чата:", | |
| 1709 | + "chat_rename_2": "!!Не используйте имя уже существующего файла, это приведёт к ошибке!!", | |
| 1710 | + "chat_rename_3": "Будут разрушены связи между чатами-чекпоинтами.", | |
| 1711 | + "chat_rename_4": "Расширение '.jsonl' дописывать не нужно." | |
| 1665 | 1712 | } |
| @@ -2192,7 +2192,7 @@ export function addCopyToCodeBlocks(messageElement) { | ||
| 2192 | 2192 | codeBlocks.get(i).appendChild(copyButton); |
| 2193 | 2193 | copyButton.addEventListener('pointerup', function (event) { |
| 2194 | 2194 | navigator.clipboard.writeText(codeBlocks.get(i).innerText); |
| 2195 | 2195 | toastr.info('t`Copied!'`, '', { timeOut: 2000 }); |
| 2196 | 2196 | }); |
| 2197 | 2197 | } |
| 2198 | 2198 | } |
| @@ -5080,7 +5080,7 @@ async function promptItemize(itemizedPrompts, requestedMesId) { | ||
| 5080 | 5080 | } |
| 5081 | 5081 | |
| 5082 | 5082 | navigator.clipboard.writeText(rawPromptValues); |
| 5083 | 5083 | toastr.info('t`Copied!'`); |
| 5084 | 5084 | }); |
| 5085 | 5085 | |
| 5086 | 5086 | popup.dlg.querySelector('#showRawPrompt').addEventListener('click', function () { |
| @@ -6310,7 +6310,7 @@ export function setUserName(value) { | ||
| 6310 | 6310 | console.log(`User name changed to ${name1}`); |
| 6311 | 6311 | $('#your_name').val(name1); |
| 6312 | 6312 | if (power_user.persona_show_notifications) { |
| 6313 | 6313 | toastr.success(t`Your messages will now be sent as ${name1}`, 't`Current persona updated'`); |
| 6314 | 6314 | } |
| 6315 | 6315 | saveSettingsDebounced(); |
| 6316 | 6316 | } |
| @@ -9532,11 +9532,7 @@ jQuery(async function () { | ||
| 9532 | 9532 | const oldFileNameFull = $(this).closest('.select_chat_block_wrapper').find('.select_chat_block_filename').text(); |
| 9533 | 9533 | const oldFileName = oldFileNameFull.replace('.jsonl', ''); |
| 9534 | 9534 | |
| 9535 | - const popupText = `<h3>Enter the new name for the chat:<h3> | |
| 9535 | + const popupText = await renderTemplateAsync('chatRename'); | |
| 9536 | - <small>!!Using an existing filename will produce an error!!<br> | |
| 9537 | - This will break the link between checkpoint chats.<br> | |
| 9538 | - No need to add '.jsonl' at the end.<br> | |
| 9539 | - </small>`; | |
| 9540 | 9536 | const newName = await callPopup(popupText, 'input', oldFileName); |
| 9541 | 9537 | |
| 9542 | 9538 | if (!newName || newName == oldFileName) { |
| @@ -9744,12 +9740,7 @@ jQuery(async function () { | ||
| 9744 | 9740 | else if (id == 'option_start_new_chat') { |
| 9745 | 9741 | if ((selected_group || this_chid !== undefined) && !is_send_press) { |
| 9746 | 9742 | let deleteCurrentChat = false; |
| 9747 | 9743 | const result = await Popup.show.confirm('t`Start new chat?`, await renderTemplateAsync('newChatConfirm'), `{ |
| 9748 | - <label for="del_chat_checkbox" class="checkbox_label justifyCenter" | |
| 9749 | - title="If necessary, you can later restore this chat file from the /backups folder"> | |
| 9750 | - <input type="checkbox" id="del_chat_checkbox" /> | |
| 9751 | - <small>Also delete the current chat file</small> | |
| 9752 | - </label>`, { | |
| 9753 | 9744 | onClose: () => deleteCurrentChat = !!$('#del_chat_checkbox').prop('checked'), |
| 9754 | 9745 | }); |
| 9755 | 9746 | if (!result) { |
| @@ -10261,10 +10252,10 @@ jQuery(async function () { | ||
| 10261 | 10252 | |
| 10262 | 10253 | let deleteOnlySwipe = false; |
| 10263 | 10254 | if (power_user.confirm_message_delete && fromSlashCommand !== true) { |
| 10264 | 10255 | const result = await callGenericPopup('t`Are you sure you want to delete this message?'`, POPUP_TYPE.CONFIRM, null, { |
| 10265 | 10256 | okButton: canDeleteSwipe ? 't`Delete Swipe'` : 't`Delete Message'`, |
| 10266 | 10257 | cancelButton: 'Cancel', |
| 10267 | 10258 | customButtons: canDeleteSwipe ? ['t`Delete Message'`] : null, |
| 10268 | 10259 | }); |
| 10269 | 10260 | if (!result) { |
| 10270 | 10261 | return; |
| @@ -74,6 +74,7 @@ import { ARGUMENT_TYPE, SlashCommandArgument } from './slash-commands/SlashComma | ||
| 74 | 74 | import { renderTemplateAsync } from './templates.js'; |
| 75 | 75 | import { SlashCommandEnumValue } from './slash-commands/SlashCommandEnumValue.js'; |
| 76 | 76 | import { Popup, POPUP_RESULT } from './popup.js'; |
| 77 | +import { t } from './i18n.js'; | |
| 77 | 78 | |
| 78 | 79 | export { |
| 79 | 80 | openai_messages_count, |
| @@ -402,7 +403,7 @@ async function validateReverseProxy() { | ||
| 402 | 403 | const rememberKey = `Proxy_SkipConfirm_${getStringHash(oai_settings.reverse_proxy)}`; |
| 403 | 404 | const skipConfirm = localStorage.getItem(rememberKey) === 'true'; |
| 404 | 405 | |
| 405 | 406 | const confirmation = skipConfirm || await Popup.show.confirm('t`Connecting To Proxy', `<span>Are you sure you want to connect, toawait therenderTemplateAsync('proxyConnectionWarning', following{ proxyproxyURL: URL?</span><var>${DOMPurify.sanitize(oai_settings.reverse_proxy) }</var>`)); |
| 406 | 407 | |
| 407 | 408 | if (!confirmation) { |
| 408 | 409 | toastr.error('Update or remove your reverse proxy settings.'); |
| @@ -4624,17 +4625,17 @@ function toggleChatCompletionForms() { | ||
| 4624 | 4625 | async function testApiConnection() { |
| 4625 | 4626 | // Check if the previous request is still in progress |
| 4626 | 4627 | if (is_send_press) { |
| 4627 | 4628 | toastr.info('t`Please wait for the previous request to complete.'`); |
| 4628 | 4629 | return; |
| 4629 | 4630 | } |
| 4630 | 4631 | |
| 4631 | 4632 | try { |
| 4632 | 4633 | const reply = await sendOpenAIRequest('quiet', [{ 'role': 'user', 'content': 'Hi' }]); |
| 4633 | 4634 | console.log(reply); |
| 4634 | 4635 | toastr.success('t`API connection successful!'`); |
| 4635 | 4636 | } |
| 4636 | 4637 | catch (err) { |
| 4637 | 4638 | toastr.error('t`Could not get a reply from API. Check your connection settings / API key and try again.'`); |
| 4638 | 4639 | } |
| 4639 | 4640 | } |
| 4640 | 4641 | |
| @@ -4791,7 +4792,7 @@ function onProxyPresetChange() { | ||
| 4791 | 4792 | if (selectedPreset) { |
| 4792 | 4793 | setProxyPreset(selectedPreset.name, selectedPreset.url, selectedPreset.password); |
| 4793 | 4794 | } else { |
| 4794 | 4795 | console.error(t`Proxy preset "'${value}"' not found in proxies array.`); |
| 4795 | 4796 | } |
| 4796 | 4797 | saveSettingsDebounced(); |
| 4797 | 4798 | } |
| @@ -4803,7 +4804,7 @@ $('#save_proxy').on('click', async function () { | ||
| 4803 | 4804 | |
| 4804 | 4805 | setProxyPreset(presetName, reverseProxy, proxyPassword); |
| 4805 | 4806 | saveSettingsDebounced(); |
| 4806 | 4807 | toastr.success('t`Proxy Saved'`); |
| 4807 | 4808 | if ($('#openai_proxy_preset').val() !== presetName) { |
| 4808 | 4809 | const option = document.createElement('option'); |
| 4809 | 4810 | option.text = presetName; |
| @@ -4837,9 +4838,9 @@ $('#delete_proxy').on('click', async function () { | ||
| 4837 | 4838 | |
| 4838 | 4839 | saveSettingsDebounced(); |
| 4839 | 4840 | $('#openai_proxy_preset').val(selected_proxy.name); |
| 4840 | 4841 | toastr.success('t`Proxy Deleted'`); |
| 4841 | 4842 | } else { |
| 4842 | 4843 | toastr.error(t`Could not find proxy with name "'${presetName}"'`); |
| 4843 | 4844 | } |
| 4844 | 4845 | }); |
| 4845 | 4846 | |
| @@ -0,0 +1,6 @@ | ||
| 1 | +<h3 data-i18n="chat_rename_1">Enter the new name for the chat:</h3> | |
| 2 | +<small> | |
| 3 | + <span data-i18n="chat_rename_2">!!Using an existing filename will produce an error!!</span><br> | |
| 4 | + <span data-i18n="chat_rename_3">This will break the link between checkpoint chats.</span><br> | |
| 5 | + <span data-i18n="chat_rename_4">No need to add '.jsonl' at the end.</span><br> | |
| 6 | +</small> | |
| 6 | \ No newline at end of file | |
| @@ -0,0 +1,4 @@ | ||
| 1 | +<label for="del_chat_checkbox" class="checkbox_label justifyCenter" data-i18n="[title]If necessary, you can later restore this chat file from the /backups folder" title="If necessary, you can later restore this chat file from the /backups folder"> | |
| 2 | + <input type="checkbox" id="del_chat_checkbox" /> | |
| 3 | + <small data-i18n="Also delete the current chat file">Also delete the current chat file</small> | |
| 4 | +</label> | |
| 4 | \ No newline at end of file | |
| @@ -0,0 +1 @@ | ||
| 1 | +<span data-i18n="Are you sure you want to connect to the following proxy URL?">Are you sure you want to connect to the following proxy URL?</span><var>{{proxyURL}}</var> | |
| 1 | \ No newline at end of file | |