diff --git a/public/locales/ru-ru.json b/public/locales/ru-ru.json index 716fadf98..2264194db 100644 --- a/public/locales/ru-ru.json +++ b/public/locales/ru-ru.json @@ -1095,5 +1095,89 @@ "Space": "Пробел", "Newline": "Новая строка", "Double Newline": "Две новые строки", - "The next chunk of the continued message will be appended using this as a separator.": "Используется в качестве разделителя между уже имеющимся сообщением и его новым отрывком, при генерации продолжения" + "The next chunk of the continued message will be appended using this as a separator.": "Используется в качестве разделителя между уже имеющимся сообщением и его новым отрывком, при генерации продолжения", + "Regex Editor": "Редактор рег. выражений", + "regex_open_editor": "Открыть редактор", + "regex_import_script": "Импорт скрипта", + "regex_saved_scripts": "Сохранённые скрипты", + "regex_desc": "Regex - это инструмент, позволяющий находить и изменять строки, используя регулярные выражения. Для более подробной информации нажмите ? рядом с заголовком.", + "Input": "Поле ввода", + "regex_test_input_placeholder": "Введите текст...", + "Output": "Результат", + "regex_output_placeholder": "Пусто", + "Script Name": "Название скрипта", + "Find Regex": "Рег. выражение для поиска", + "Replace With": "Замена", + "regex_replace_string_placeholder": "Чтобы вставить всё вхождение рег. выражения, используйте {{match}}. Чтобы вставить группу символов, используйте $1, $2 и т.д.", + "Trim Out": "Усечение", + "regex_trim_placeholder": "Удалить перед обработкой ненужные части текста. Каждый элемент с новой строки.", + "Slash Commands": "Слэш-команды", + "Min Depth": "Мин. глубина", + "regex_min_depth_desc": "При форматировании затрагивать только те сообщения, которые находятся как минимум на глубине N. 0 = последнее сообщение, 1 = предпоследнее и т.д. Учитываются только видимые сообщения, т.е. не скрытые и не системные.", + "regex_max_depth_desc": "При форматировании затрагивать только те сообщения, которые находятся на глубине не более N. 0 = последнее сообщение, 1 = предпоследнее и т.д. Учитываются только видимые сообщения, т.е. не скрытые и не системные.", + "regex_min_depth_placeholder": "Неогранич.", + "regex_other_options": "Другие опции", + "Only Format Display": "Только визуально", + "regex_only_format_prompt_desc": "История чата не изменится, замена будет осуществляться только в промпте (при генерации)", + "Only Format Prompt (?)": "Только промпт", + "Run On Edit": "Выполнять при редактировании", + "Substitute Regex": "Заменить в рег. выражении", + "regex_substitute_regex_desc": "Перед выполнением заменять {{макросы}} в рег. выражении", + "Test Mode": "Протестировать", + "ext_regex_affects": "Затрагивает", + "ext_regex_user_input": "Ваши сообщения", + "ext_regex_ai_output": "Ответы ИИ", + "ext_regex_disable_script": "Отключить скрипт", + "ext_regex_enable_script": "Включить скрипт", + "ext_regex_edit_script": "Редактировать", + "ext_regex_export_script": "Экспортировать", + "ext_regex_delete_script": "Удалить", + "ext_sum_with": "Для пересказа использовать:", + "ext_sum_main_api": "Основное API", + "ext_sum_current_summary": "Текущий пересказ:", + "ext_sum_restore_previous": "Восстановить предыдущий", + "ext_sum_memory_placeholder": "Сгенерированный пересказ будет здесь...", + "ext_sum_force_text": "Пересказать сейчас", + "ext_sum_force_tip": "Сгенерировать пересказ прямо сейчас.", + "Disable automatic summary updates. While paused, the summary remains as-is. You can still force an update by pressing the Summarize now button (which is only available with the Main API).": "Отключить авто-обновление пересказа. Пересказ всё время будет фиксированным. Однако останется возможность принудительно обновить пересказ через кнопку \"Пересказать сейчас\" (доступно только через Основное API)", + "ext_sum_pause": "Приостановить", + "Omit World Info and Author's Note from text to be summarized. Only has an effect when using the Main API. The Extras API always omits WI/AN.": "Исключать из пересказа Информацию о мире и Заметки автора. Работает только для Основного API. Extras API всегда их исключает.", + "ext_sum_no_wi_an": "Без мира и заметок", + "ext_sum_settings_tip": "Изменить промпт пересказа, место для инжекта и т.д.", + "ext_sum_settings": "Настройки пересказа", + "ext_sum_prompt_builder": "Алгоритм формирования промпта", + "ext_sum_prompt_builder_1_desc": "Расширение само составит промпт с учётом непересказанных сообщений. Во время генерации чат недоступен.", + "ext_sum_prompt_builder_1": "Прямой, блокирующий", + "ext_sum_prompt_builder_2_desc": "Расширение само составит промпт с учётом непересказанных сообщений. Во время генерации чат доступен. Может не поддерживаться некоторыми бэкендами.", + "ext_sum_prompt_builder_2": "Прямой, неблокирующий", + "ext_sum_prompt_builder_3_desc": "Расширение будет использовать стандартные основные настройки промпта, и добавит свой промпт в качестве последнего системного сообщения.", + "ext_sum_prompt_builder_3": "Классический, блокирующий", + "Summary Prompt": "Промпт для пересказа", + "ext_sum_restore_default_prompt_tip": "Восстановить стандартный промпт", + "ext_sum_prompt_placeholder": "Этот промпт будет отправлен ИИ при запросе на генерацию пересказа. Макрос {{words}} будет заменён на значение параметра \"Количество слов\".", + "ext_sum_target_length_1": "Целевая длина пересказа", + "ext_sum_words_ru_case1": "слово", + "ext_sum_words_ru_case2": "слова", + "ext_sum_words_ru_case3": "слов", + "ext_sum_api_response_length_1": "Длина ответа от API", + "ext_sum_tokens_ru_case1": "токен", + "ext_sum_tokens_ru_case2": "токена", + "ext_sum_tokens_ru_case3": "токенов", + "ext_sum_0_default": "0 = по умолчанию", + "ext_sum_raw_max_msg": "[Прямое форматирование] Макс. кол-во сообщений в запросе", + "ext_sum_0_unlimited": "0 = неограничено", + "Update frequency": "Частота обновления", + "ext_sum_messages_ru_case1": "сообщение", + "ext_sum_messages_ru_case2": "сообщения", + "ext_sum_messages_ru_case3": "сообщений", + "ext_sum_update_every_messages_1": "Обновлять раз в", + "ext_sum_pause": "Приостановить", + "ext_sum_update_every_words_1": "Обновлять раз в", + "ext_sum_0_disable": "0 = отключено", + "ext_sum_auto_adjust_desc": "Попытаться автоматически рассчитать значение интервала, исходя из статистики чата", + "ext_sum_both_sliders": "Если ни один из ползунков не равен нулю, то оба будут триггерить генерацию пересказа с соответствующей периодичностью.", + "ext_sum_injection_template": "Шаблон для инжекта", + "ext_sum_memory_template_placeholder": "Макрос {{summary}} будет заменён на содержимое пересказа", + "ext_sum_injection_position": "Куда инжектить", + "How many messages before the current end of the chat.": "Сколько сообщений от конца чата." } diff --git a/public/scripts/extensions/memory/index.js b/public/scripts/extensions/memory/index.js index 3cd1d97e5..5357c2a64 100644 --- a/public/scripts/extensions/memory/index.js +++ b/public/scripts/extensions/memory/index.js @@ -228,14 +228,18 @@ function onMemorySkipWIANInput() { function onMemoryPromptWordsInput() { const value = $(this).val(); extension_settings.memory.promptWords = Number(value); - $('#memory_prompt_words_value').text(extension_settings.memory.promptWords); + const display = $('#memory_prompt_words_value'); + display.text(extension_settings.memory.promptWords); + updateCase(display.next(), extension_settings.memory.promptWords); saveSettingsDebounced(); } function onMemoryPromptIntervalInput() { const value = $(this).val(); extension_settings.memory.promptInterval = Number(value); - $('#memory_prompt_interval_value').text(extension_settings.memory.promptInterval); + const display = $('#memory_prompt_interval_value'); + display.text(extension_settings.memory.promptInterval); + updateCase(display.next(), extension_settings.memory.promptInterval); saveSettingsDebounced(); } @@ -280,14 +284,34 @@ function onMemoryPositionChange(e) { function onMemoryPromptWordsForceInput() { const value = $(this).val(); extension_settings.memory.promptForceWords = Number(value); - $('#memory_prompt_words_force_value').text(extension_settings.memory.promptForceWords); + const display = $('#memory_prompt_words_force_value'); + display.text(extension_settings.memory.promptForceWords); + updateCase(display.next(), extension_settings.memory.promptForceWords); saveSettingsDebounced(); } +function updateCase(span, number) { // other languages can use this function too, adding their own attributes to the elements + const ru_case1 = span.attr('ru-case1'); + if (ru_case1) { + const ru_case2 = span.attr('ru-case2'); + const ru_case3 = span.attr('ru-case3'); + const last_digit = number % 10; + if (last_digit == 1) { + span.text(ru_case1); + } else if (last_digit != 0 && last_digit < 5) { + span.text(ru_case2); + } else { + span.text(ru_case3); + } + } +} + function onOverrideResponseLengthInput() { const value = $(this).val(); extension_settings.memory.overrideResponseLength = Number(value); - $('#memory_override_response_length_value').text(extension_settings.memory.overrideResponseLength); + const display = $('#memory_override_response_length_value'); + display.text(extension_settings.memory.overrideResponseLength); + updateCase(display.next(), extension_settings.memory.overrideResponseLength); saveSettingsDebounced(); } diff --git a/public/scripts/extensions/memory/settings.html b/public/scripts/extensions/memory/settings.html index ed3b31ad7..c2b093fab 100644 --- a/public/scripts/extensions/memory/settings.html +++ b/public/scripts/extensions/memory/settings.html @@ -9,73 +9,73 @@