diff --git a/public/index.html b/public/index.html
index 46942e6d9..a4d645bf0 100644
--- a/public/index.html
+++ b/public/index.html
@@ -1762,6 +1762,19 @@
Use the appropriate tokenizer for Google models via their API. Slower prompt processing, but offers much more accurate token counting.
+
+
+
+
+ Merges all system messages up until the first message with a non system role, and sends them through google's system_instruction field instead of with the rest of the prompt contents.
+
+
+
Assistant Prefill
@@ -2248,7 +2261,7 @@
Connect
-
Authorize
+
Authorize
Cancel
@@ -5843,7 +5856,7 @@
-
+
diff --git a/public/locales/ru-ru.json b/public/locales/ru-ru.json
index d03ff14e7..530108758 100644
--- a/public/locales/ru-ru.json
+++ b/public/locales/ru-ru.json
@@ -1,31 +1,31 @@
{
- "clickslidertips": "Щелкните на цифру ползунка, чтобы вписать вручную.",
- "kobldpresets": "Предустановки Kobold",
- "guikoboldaisettings": "Интерфейс KoboldAI",
- "novelaipreserts": "Предустановки NovelAI",
+ "clickslidertips": "Кликайте по цифрам под ползунками, чтобы менять их вручную.",
+ "kobldpresets": "Пресеты для Kobold",
+ "guikoboldaisettings": "Настройки из интерфейса KoboldAI",
+ "novelaipreserts": "Пресеты для NovelAI",
"default": "По умолчанию",
- "openaipresets": "Предустановки OpenAI",
- "text gen webio(ooba) presets": "Предустановки WebUI(ooba)",
- "response legth(tokens)": "Длина ответа (в токенах)",
+ "openaipresets": "Пресеты для OpenAI",
+ "text gen webio(ooba) presets": "Пресеты для WebUI(ooba)",
+ "response legth(tokens)": "Ответ (в токенах)",
"select": "Выбрать",
- "context size(tokens)": "Размер контекста (в токенах)",
+ "context size(tokens)": "Контекст (в токенах)",
"unlocked": "Неограниченный",
"Only select models support context sizes greater than 4096 tokens. Increase only if you know what you're doing.": "Только отдельные модели поддерживают контекст, превышающий 4096 токенов. Используйте только если понимаете, что делаете.",
- "rep.pen": "Штраф за повторение",
- "WI Entry Status:🔵 Constant🟢 Normal❌ Disabled": "Статус входа WI:\n 🔵 Константа\n 🟢 Cтандартный\n ❌ Отключен",
- "rep.pen range": "Диапазон штрафов за повтор.",
- "Temperature controls the randomness in token selection": "Temperature контролирует случайность выбора токенов:\n- низкая Temperature (<1.0) приводит к более предсказуемому тексту, отдавая предпочтение токенам с высокой вероятностью.\n- высокая Temperature (>1.0) повышает креативность и разнообразие вывода, давая токенам с низкой вероятностью больше шансов.\nУстановите значение 1.0 для исходных вероятностей.",
- "temperature": "Temperature",
- "Top K sets a maximum amount of top tokens that can be chosen from": "Top K задает максимальное количество токенов, которые могут быть выбраны.\nЕсли Top-K равен 20, это означает, что будут сохранены только 20 токенов с наивысшим рейтингом (независимо от того, что их вероятности разнообразны или ограничены)\nУстановите значение 0, чтобы отключить.",
- "Top P (a.k.a. nucleus sampling)": "Top P (также известная как выборка ядра) складывает все верхние токены, необходимые для достижения целевого процента.\nТо есть, если 2 верхних токена составляют 25%, а Top-P равен 0.50, учитываются только эти 2 верхних токена.\nУстановите значение 1.0, чтобы отключить.",
+ "rep.pen": "Штраф за повтор",
+ "WI Entry Status:🔵 Constant🟢 Normal❌ Disabled": "Статус записи:\n 🔵 Постоянная\n 🟢 Обычная\n ❌ Отключена",
+ "rep.pen range": "Окно для штрафов за повтор",
+ "Temperature controls the randomness in token selection": "Температура контролирует процесс выбора токена:\n- при низкой температуре (<1.0) предпочтение отдаётся наиболее вероятным токенам, текст получается предсказуемым.\n- при высокой температуре (>1.0) повышаются шансы у токенов с низкой вероятностью, текст получается более креативным.\nУстановите значение 1.0, чтобы вероятности не менялись.",
+ "temperature": "Температура",
+ "Top K sets a maximum amount of top tokens that can be chosen from": "Top K задает жёсткое ограничение на количество рассматриваемых токенов.\nЕсли Top-K равен 20, это означает, что будут сохранены только 20 наиболее вероятных токенов (распределение их вероятностей в расчёт не берётся)\nУстановите значение 0, чтобы отключить.",
+ "Top P (a.k.a. nucleus sampling)": "Top P (он же nucleus sampling) складывает все верхние токены, пока их суммарные вероятности не достигнут целевого процента.\nТо есть, если 2 верхних токена составляют 25%, а Top-P равен 0.50, учитываются только эти 2 верхних токена.\nУстановите значение 1.0, чтобы отключить.",
"Typical P Sampling prioritizes tokens based on their deviation from the average entropy of the set": "Сэмплер Typical P определяет приоритет токенов на основе их отклонения от средней энтропии набора.\nОстаются токены, чья кумулятивная вероятность близка к заданному порогу (например, 0,5), выделяя те, которые имеют среднее информационное содержание.\nУстановите значение 1.0, чтобы отключить.",
"Min P sets a base minimum probability": "Min P устанавливает базовую минимальную вероятность. Она масштабируется в зависимости от вероятности верхнего токена.\nЕсли вероятность верхнего токена составляет 80%, а Min P - 0.1, будут рассматриваться только токены с вероятностью выше 8%.\nУстановите значение 0, чтобы отключить.",
"Top A sets a threshold for token selection based on the square of the highest token probability": "Top A устанавливает порог для отбора токенов на основе квадрата наибольшей вероятности токена.\nЕсли значение Top A равно 0.2, а вероятность верхнего токена равна 50%, то токены с вероятностью ниже 5% (0.2 * 0.5^2) будут исключены.\nУстановите значение 0, чтобы отключить.",
"Tail-Free Sampling (TFS)": "Tail-Free Sampling (TFS) ищет хвост маловероятных токнов в распределении,\n анализируя скорость изменения вероятностей токенов с помощью производных. Он сохраняет токены до порога (например, 0.3), основанного на нормированной второй производной.\nЧем ближе к 0, тем больше отброшенных токенов. Установите значение 1.0, чтобы отключить.",
"Epsilon cutoff sets a probability floor below which tokens are excluded from being sampled": "Epsilon cutoff устанавливает уровень вероятности, ниже которого токены исключаются из выборки.\nВ единицах 1e-4; разумное значение - 3.\nУстановите 0, чтобы отключить.",
"Scale Temperature dynamically per token, based on the variation of probabilities": "Динамическое масштабирование Temperature для каждого токена, основанное на изменении вероятностей.",
- "Minimum Temp": "Минимальная Temp",
- "Maximum Temp": "Максимальная Temp",
+ "Minimum Temp": "Мин. температура",
+ "Maximum Temp": "Макс. температура",
"Exponent": "Экспонента",
"Mirostat Mode": "Режим",
"Mirostat Tau": "Tau",
@@ -35,35 +35,35 @@
"Strength of the Contrastive Search regularization term. Set to 0 to disable CS": "Сила условия регуляризации контрастивного поиска. Установите значение 0, чтобы отключить CS.",
"Temperature Last": "Temperature Last",
"Use the temperature sampler last": "Использовать Temperature сэмплер в последнюю очередь. Это почти всегда разумно.\nПри включении: сначала выборка набора правдоподобных токенов, затем применение Temperature для корректировки их относительных вероятностей (технически, логитов).\nПри отключении: сначала применение Temperature для корректировки относительных вероятностей ВСЕХ токенов, затем выборка правдоподобных токенов из этого.\nОтключение Temperature Last увеличивает вероятности в хвосте распределения, что увеличивает шансы получить несогласованный ответ.",
- "LLaMA / Mistral / Yi models only": "Только для моделей LLaMA / Mistral / Yi. Убедитесь, что сначала выбрали подходящий токенизатор.\nПоследовательности, которые вы не хотите видеть в выходных данных.\nОдна на строку. Текст или [идентификаторы токенов].\nМногие токены имеют пробел впереди. Используйте счетчик токенов, если не уверены.",
+ "LLaMA / Mistral / Yi models only": "Только для моделей LLaMA / Mistral / Yi. Перед этим обязательно выберите подходящий токенизатор.\nПоследовательности, которых не должно быть на выходе.\nОдна на строку. Текст или [идентификаторы токенов].\nМногие токены имеют пробел впереди. Используйте счетчик токенов, если не уверены.",
"Example: some text [42, 69, 1337]": "Пример:\nкакой-то текст\n[42, 69, 1337]",
- "Classifier Free Guidance. More helpful tip coming soon": "Руководство без классификатора. Больше полезных советов в ближайшее время.",
+ "Classifier Free Guidance. More helpful tip coming soon": "Classifier Free Guidance. Чуть позже опишем более подробно",
"Scale": "Масштаб",
"GBNF Grammar": "Грамматика GBNF",
"Usage Stats": "Статистика исп.",
"Click for stats!": "Нажмите для получения статистики!",
- "Backup": "Резер. копирование",
- "Backup your personas to a file": "Резервное копирование персон в файл",
+ "Backup": "Бэкап",
+ "Backup your personas to a file": "Создать бэкап (резервную копию) персоны в виде файла",
"Restore": "Восстановить",
"Restore your personas from a file": "Восстановление персон из файла",
"Type in the desired custom grammar": "Введите нужную пользовательскую грамматику",
- "Encoder Rep. Pen.": "Штраф за кодирование",
+ "Encoder Rep. Pen.": "Штраф за повтор для кодировщика",
"Smoothing Factor": "Коэффициент сглаживания",
- "No Repeat Ngram Size": "Нет повторов размера Ngram",
- "Min Length": "Минимальная длина",
+ "No Repeat Ngram Size": "Размер no_repeat_ngram",
+ "Min Length": "Мин. длина",
"OpenAI Reverse Proxy": "Прокси с OpenAI",
"Alternative server URL (leave empty to use the default value).": "Альтернативный URL сервера (оставьте пустым для стандартного значения)",
- "Remove your real OAI API Key from the API panel BEFORE typing anything into this box": "Удалите свой личный OAI API Key из панели API прежде, чем вносить сюда ЧТО УГОДНО",
+ "Remove your real OAI API Key from the API panel BEFORE typing anything into this box": "Удалите свой личный OAI API Key из панели API, и ТОЛЬКО ПОСЛЕ ЭТОГО вводите что-то сюда",
"We cannot provide support for problems encountered while using an unofficial OpenAI proxy": "Мы не сможем предоставить помощь с проблемами, с которыми вы столкнетесь при использовании неофициальных прокси для OpenAI",
- "Legacy Streaming Processing": "Старый способ потокового вывода текста",
- "Enable this if the streaming doesn't work with your proxy": "Включите это, если потоковый вывод текста не работает с вашим прокси",
+ "Legacy Streaming Processing": "Старый способ стриминга",
+ "Enable this if the streaming doesn't work with your proxy": "Если на вашей прокси не работает стриминг, попробуйте включить эту опцию",
"Context Size (tokens)": "Размер контекста (в токенах)",
- "Max Response Length (tokens)": "Максимальная длина ответа (в токенах)",
- "Temperature": "Temperature",
+ "Max Response Length (tokens)": "Макс. длина ответа (в токенах)",
+ "Temperature": "Температура",
"Frequency Penalty": "Штраф за частоту",
"Presence Penalty": "Штраф за присутствие",
"Top-p": "Top P",
- "Display bot response text chunks as they are generated": "Отображать ответ ИИ по мере генерации текста",
+ "Display bot response text chunks as they are generated": "Отображать ответ ИИ отрывками по мере генерации текста",
"Top A": "Top А",
"Typical Sampling": "Typical Sampling",
"Tail Free Sampling": "Tail Free Sampling",
@@ -72,10 +72,10 @@
"Top K": "Top K",
"Top P": "Top P",
"Do Sample": "Сделать образец",
- "Add BOS Token": "Добавить BOS-токен",
- "Add the bos_token to the beginning of prompts. Disabling this can make the replies more creative": "Добавлять BOS-токен в начале инструкции. Выключение этого может сделать ответы более креативными. ",
- "Ban EOS Token": "Заблокировать EOS-токен",
- "Ban the eos_token. This forces the model to never end the generation prematurely": "Блокировка EOS-токена вынудит модель никогда не завершать генерацию преждевременно",
+ "Add BOS Token": "Добавлять BOS-токен",
+ "Add the bos_token to the beginning of prompts. Disabling this can make the replies more creative": "Добавлять BOS-токен в начале промпта. Если выключить, ответы могут стать более креативными.",
+ "Ban EOS Token": "Запретить EOS-токен",
+ "Ban the eos_token. This forces the model to never end the generation prematurely": "Запрет EOS-токена не позволит модели завершить генерацию преждевременно",
"Skip Special Tokens": "Пропускать специальные токены",
"Beam search": "Поиск Beam",
"Number of Beams": "Количество Beam",
@@ -86,15 +86,15 @@
"Seed": "Зерно",
"Epsilon Cutoff": "Epsilon Cutoff",
"Eta Cutoff": "Eta Cutoff",
- "Negative Prompt": "Отрицательная подсказка",
- "Mirostat (mode=1 is only for llama.cpp)": "Mirostat",
- "Mirostat is a thermostat for output perplexity": "Mirostat - это термостат для недоумения на выходе.\nMirostat подгоняет недоумение на выходе к недоумению на входе, что позволяет избежать ловушки повторения.\n(когда по мере того, как авторегрессионный вывод производит текст, недоумение на выходе стремится к нулю)\n и ловушки путаницы (когда недоумение расходится)\nДля подробностей смотрите статью Mirostat: A Neural Text Decoding Algorithm that Directly Controls Perplexity by Basu et al. (2020).\nРежим выбирает версию Mirostat. 0=отключить, 1=Mirostat 1.0 (только llama.cpp), 2=Mirostat 2.0.",
- "Add text here that would make the AI generate things you don't want in your outputs.": "Добавьте сюда текст, который заставит ИИ генерировать то, что вы не хотите видеть в своих выводах",
- "Phrase Repetition Penalty": "Штраф за повторение фразы",
+ "Negative Prompt": "Отрицательный промпт",
+ "Mirostat (mode=1 is only for llama.cpp)": "Mirostat (режим=1 предназначен только для llama.cpp)",
+ "Mirostat is a thermostat for output perplexity": "Mirostat - своего рода термометр, измеряющий перплексию для выводимого текста.\nMirostat подгоняет перплексию генерируемого текста к перплексии входного текста, что позволяет избежать повторов.\n(когда по мере генерации текста авторегрессионным инференсом, перплексия всё больше приближается к нулю)\n а также ловушки перплексии (когда перплексия начинает уходить в сторону)\nБолее подробное описание в статье Mirostat: A Neural Text Decoding Algorithm that Directly Controls Perplexity by Basu et al. (2020).\nРежим выбирает версию Mirostat. 0=отключить, 1=Mirostat 1.0 (только llama.cpp), 2=Mirostat 2.0.",
+ "Add text here that would make the AI generate things you don't want in your outputs.": "Добавьте сюда текст, который заставит ИИ генерировать то, что вы не хотите видеть в его текстах",
+ "Phrase Repetition Penalty": "Штраф за повтор фразы",
"Preamble": "Преамбула",
- "Use style tags to modify the writing style of the output.": "Используйте теги стиля, чтобы изменить стиль написания вывода.",
+ "Use style tags to modify the writing style of the output.": "Используйте теги стиля, чтобы изменить стиль написания выходного текста.",
"Banned Tokens": "Запрещенные токены",
- "Sequences you don't want to appear in the output. One per line.": "Последовательности, которые вы не хотите отображать в выводе. По одному на строку.",
+ "Sequences you don't want to appear in the output. One per line.": "Строки, которых не должно быть в выходном тексте. По одной на строчку.",
"AI Module": "Модуль ИИ",
"Changes the style of the generated text.": "Изменяет стиль создаваемого текста.",
"Used if CFG Scale is unset globally, per chat or character": "Используется, если масштаб CFG не установлен глобально, для каждого чата или персонажа.",
@@ -104,42 +104,42 @@
"Tell the AI that NSFW is allowed.": "Сообщает AI, что ему позволено генерировать NSFW.",
"NSFW Prioritized": "Предпочитать NSFW",
"NSFW prompt text goes first in the prompt to emphasize its effect.": "Отправлять NSFW-инструкцию в начале для усиления его эффекта",
- "Streaming": "Потоковый вывод текста",
- "Dynamic Temperature": "Динамическая Temperature",
- "Restore current preset": "Восстановить текущую предустановку",
+ "Streaming": "Стриминг текста",
+ "Dynamic Temperature": "Динамическая температура",
+ "Restore current preset": "Восстановить текущий пресет",
"Neutralize Samplers": "Нейтрализовать сэмплеры",
- "Text Completion presets": "Предустановки Text Completion",
+ "Text Completion presets": "Пресеты для Text Completion",
"Documentation on sampling parameters": "Документация по параметрам сэмплеров",
"Set all samplers to their neutral/disabled state.": "Установить все сэмплеры в нейтральное/отключенное состояние.",
- "Only enable this if your model supports context sizes greater than 4096 tokens": "Включите эту опцию, только если ваша модель поддерживает размер контекста более 4096 токенов.\nУвеличивайте только если вы знаете, что делаете.",
- "Display the response bit by bit as it is generated": "Отображение ответа бит за битом по мере его генерации.\nКогда этот параметр выключен, ответы будут отображаться все сразу после их завершения.",
- "Generate only one line per request (KoboldAI only, ignored by KoboldCpp).": "Генерируйте только одну строку для каждого запроса (только KoboldAI, игнорируется KoboldCpp).",
- "Ban the End-of-Sequence (EOS) token (with KoboldCpp, and possibly also other tokens with KoboldAI).": "Запретите токен конца последовательности (EOS) (с помощью KoboldCpp и, возможно, также других токенов с помощью KoboldAI).",
- "Good for story writing, but should not be used for chat and instruct mode.": "Подходит для написания историй, но не должен использоваться в режиме чата и инструктирования.",
- "Enhance Definitions": "Улучшенная узнаваемость",
- "Use OAI knowledge base to enhance definitions for public figures and known fictional characters": "Позволяет использовать базу знаний, улучшающую узнаваемость ИИ публичных лиц и вымышленных персонажей",
+ "Only enable this if your model supports context sizes greater than 4096 tokens": "Включайте эту опцию, только если ваша модель поддерживает размер контекста более 4096 токенов.\nУвеличивайте только если вы знаете, что делаете.",
+ "Display the response bit by bit as it is generated": "Выводить текст последовательно по мере его генерации.\nЕсли параметр выключен, ответы будут отображаться сразу целиком, и только после полного завершения генерации.",
+ "Generate only one line per request (KoboldAI only, ignored by KoboldCpp).": "Генерировать только одну строку на каждый запрос (только для KoboldAI, игнорируется KoboldCpp).",
+ "Ban the End-of-Sequence (EOS) token (with KoboldCpp, and possibly also other tokens with KoboldAI).": "Запретить токен конца последовательности (EOS) (актуально для KoboldCpp, но KoboldAI может запрещать ещё и другие токены).",
+ "Good for story writing, but should not be used for chat and instruct mode.": "Подходит для написания историй, но не должен использоваться в режиме Chat и Instruct.",
+ "Enhance Definitions": "Улучшить описания",
+ "Use OAI knowledge base to enhance definitions for public figures and known fictional characters": "Позволяет использовать базу знаний OAI, улучшающую описания для публичных лиц и известных вымышленных персонажей",
"Wrap in Quotes": "Заключать в кавычки",
- "Wrap entire user message in quotes before sending.": "Заключить всё сообщение пользователя в кавычки перед отправкой.",
+ "Wrap entire user message in quotes before sending.": "Перед отправкой заключать всё сообщение пользователя в кавычки.",
"Leave off if you use quotes manually for speech.": "Оставьте выключенным, если вручную выставляете кавычки для прямой речи.",
- "Main prompt": "Основная инструкция",
- "The main prompt used to set the model behavior": "Основная инструкция, используемая для установки поведения модели",
- "NSFW prompt": "NSFW-инструкция",
- "Prompt that is used when the NSFW toggle is on": "Инструкция, отправляемая ИИ при включенном поощрении NSFW.",
- "Jailbreak prompt": "Инструкция для JailBreak",
- "Prompt that is used when the Jailbreak toggle is on": "Инструкция, отправляемая ИИ при включенном JailBreak.",
- "Impersonation prompt": "Инструкция для перевоплощения",
- "Prompt that is used for Impersonation function": "Инструкция, отправляемая ИИ для генерации действий за пользователя",
- "Logit Bias": "Ошибка логита",
- "Helps to ban or reenforce the usage of certain words": "Позволяет запретить или поощрять использование определенных слов",
- "View / Edit bias preset": "Посмотреть/Настроить предустановку для bias",
- "Add bias entry": "Добавить инструкцию в Bias",
- "Jailbreak activation message": "Сообщение об активации JailBreak",
- "Message to send when auto-jailbreak is on.": "Сообщение, отправляемое когда автоматический JailBreak включен.",
+ "Main prompt": "Основной промпт",
+ "The main prompt used to set the model behavior": "Основной промпт, задающий поведение модели",
+ "NSFW prompt": "NSFW-промпт",
+ "Prompt that is used when the NSFW toggle is on": "Промпт, применяемый при включенном поощрении NSFW.",
+ "Jailbreak prompt": "Джейлбрейк-промпт",
+ "Prompt that is used when the Jailbreak toggle is on": "Промпт, применяемый при включенном джейлбрейке.",
+ "Impersonation prompt": "Промпт для перевоплощения",
+ "Prompt that is used for Impersonation function": "Промпт, применяемый при генерации действий за пользователя",
+ "Logit Bias": "Смещение логитов",
+ "Helps to ban or reenforce the usage of certain words": "Запрещает или поощряет использование определенных слов",
+ "View / Edit bias preset": "Просмотр / Редактирование пресета смещения",
+ "Add bias entry": "Добавить правило смещения",
+ "Jailbreak activation message": "Сообщение об активации джейлбрейка",
+ "Message to send when auto-jailbreak is on.": "Сообщение, отправляемое когда автоматический джейлбрейк включен.",
"Jailbreak confirmation reply": "Подтверждение JailBreak",
"Bot must send this back to confirm jailbreak": "Это сообщение будет отправлено ИИ при успешном включении JailBreak.",
"Character Note": "Заметки о персонаже",
"Influences bot behavior in its responses": "Влияет на поведение ИИ и его ответы.",
- "Connect": "Подключить",
+ "Connect": "Подключиться",
"Test Message": "Тестовое сообщение",
"API": "API",
"KoboldAI": "KoboldAI",
@@ -153,7 +153,7 @@
"API key": "API-ключ",
"Tabby API key": "Tabby API-ключ",
"Get it here:": "Получить здесь:",
- "Register": "Регистрация",
+ "Register": "Зарегистрироваться",
"TogetherAI Model": "Модель TogetherAI",
"Example: 127.0.0.1:5001": "Пример: http://127.0.0.1:5001",
"ggerganov/llama.cpp": "ggerganov/llama.cpp (сервер вывода)",
@@ -164,18 +164,18 @@
"TogetherAI API Key": "TogetherAI API-ключ",
"-- Connect to the API --": "-- Подключитесь к API --",
"View my Kudos": "Посмотреть мой рейтинг(Kudos)",
- "Enter": "Вставьте",
+ "Enter": "Введите",
"to use anonymous mode.": "чтобы использовать анонимный режим.",
"For privacy reasons": "В целях конфиденциальности API-ключ будет скрыт после перезагрузки страницы",
"Models": "Модели",
- "Hold Control / Command key to select multiple models.": "Удерживайте Control / Command для выбора нескольких моделей.",
+ "Hold Control / Command key to select multiple models.": "Удерживайте клавишу Control / Command для выбора нескольких моделей.",
"Horde models not loaded": "Модели Horde не загружены",
- "Not connected...": "Не подключено...",
+ "Not connected...": "Нет подключения...",
"Novel API key": "API-ключ для NovelAI",
"Follow": "Следуйте",
"these directions": "данным инструкциям",
"to get your NovelAI API key.": "чтобы получить свой API-ключ от NovelAI",
- "Enter it in the box below": "Введите это в окошко ниже",
+ "Enter it in the box below": "Введите его в окошко ниже",
"Novel AI Model": "Модель NovelAI",
"If you are using:": "Если вы используете:",
"oobabooga/text-generation-webui": "",
@@ -189,34 +189,34 @@
"Use API key (Only required for Mancer)": "Нажмите на ячейку (и добавьте свой API ключ!):",
"Blocking API url": "Блокирующий API url",
"Example: 127.0.0.1:5000": "Пример: http://127.0.0.1:5000",
- "Legacy API (pre-OAI, no streaming)": "Устаревший API (до OAI, без потоковой передачи)",
+ "Legacy API (pre-OAI, no streaming)": "Устаревший API (до OAI, без стриминга)",
"Bypass status check": "Обход проверки статуса",
"Streaming API url": "Потоковый API URL",
"Example: ws://127.0.0.1:5005/api/v1/stream": "Пример: ws://127.0.0.1:5005/api/v1/stream",
- "Mancer API key": "Mancer API ключ",
+ "Mancer API key": "Ключ от Mancer API",
"Example: https://neuro.mancer.tech/webui/MODEL/api": "Пример: https://neuro.mancer.tech/webui/MODEL/api",
- "to get your OpenAI API key.": "для получения API-ключа OpenAI",
+ "to get your OpenAI API key.": "для получения ключа от OpenAI API",
"Window AI Model": "Модель Window AI",
"OpenAI Model": "Модель OpenAI",
- "Claude API Key": "Claude API ключ",
- "Get your key from": "Получить ключ из",
- "Anthropic's developer console": "Консоли разработчика Anthropic",
- "Slack and Poe cookies will not work here, do not bother trying.": "Файлы cookie Slack и Poe здесь не подойдут, не пытайтесь.",
+ "Claude API Key": "Ключ от Claude API",
+ "Get your key from": "Получите ключ в",
+ "Anthropic's developer console": "консоли разработчика Anthropic",
+ "Slack and Poe cookies will not work here, do not bother trying.": "Файлы cookie Slack и Poe здесь не подойдут, можете их не пробовать.",
"Claude Model": "Модель Claude",
- "Scale API Key": "Scale API ключ",
+ "Scale API Key": "Ключ от Scale API",
"Alt Method": "Альтернативный метод",
- "AI21 API Key": "AI21 API ключ",
+ "AI21 API Key": "Ключ от API AI21",
"AI21 Model": "Модель AI21",
"View API Usage Metrics": "Посмотреть статистику использования API",
"Show External models (provided by API)": "Показать \"сторонние\" модели (предоставленные API)",
"Bot": "Бот:",
"Allow fallback routes": "Разрешить резервные маршруты",
"Allow fallback routes Description": "Автоматически выбирает альтернативную модель, если выбранная модель не может удовлетворить ваш запрос.",
- "OpenRouter API Key": "OpenRouter API ключ",
+ "OpenRouter API Key": "Ключ от OpenRouter API",
"Connect to the API": "Соединение с API",
"OpenRouter Model": "Модель OpenRouter",
"View Remaining Credits": "Посмотреть оставшиеся кредиты",
- "Click Authorize below or get the key from": "Нажмите «Авторизовать» ниже или получите ключ от",
+ "Click Authorize below or get the key from": "Нажмите «Авторизоваться» ниже или получите ключ от",
"Auto-connect to Last Server": "Автоматическое подключение к последнему серверу",
"View hidden API keys": "Посмотреть скрытые API-ключи",
"Advanced Formatting": "Расширенное форматирование",
@@ -227,56 +227,56 @@
"Disable scenario formatting": "Отключить форматирование сценария",
"Disable example chats formatting": "Отключить форматирование примеров чата",
"Disable chat start formatting": "Отключить форматирование начала чата",
- "Custom Chat Separator": "Пользовательское разделение чата",
+ "Custom Chat Separator": "Кастомный разделитель для чата",
"Replace Macro in Custom Stopping Strings": "Заменить макрос в пользовательских стоп-строках",
"Strip Example Messages from Prompt": "Удалить примеры сообщений из подсказки",
"Story String": "Строка истории",
"Example Separator": "Пример разделителя",
"Chat Start": "Начало чата",
- "Activation Regex": "Активация Regex",
- "Instruct Mode": "Режим \"Инструктаж\"",
- "Wrap Sequences with Newline": "Отделять последовательности красной строкой",
- "Include Names": "Показывать имена",
- "Force for Groups and Personas": "Усилия для Групп и Персон",
- "System Prompt": "Системная инструкция",
- "Instruct Mode Sequences": "Последовательности режима обучения",
+ "Activation Regex": "Regex для активации",
+ "Instruct Mode": "Режим Instruct",
+ "Wrap Sequences with Newline": "Отделять строки символом новой строки",
+ "Include Names": "Добавлять имена",
+ "Force for Groups and Personas": "Также для групп и персон",
+ "System Prompt": "Системный промпт",
+ "Instruct Mode Sequences": "Строки для Instruct-режима",
"Input Sequence": "Входная последовательность",
"Output Sequence": "Выходная последовательность",
"First Output Sequence": "Первая выходная последовательность",
"Last Output Sequence": "Последняя выходная последовательность",
"System Sequence Prefix": "Префикс системной последовательности",
"System Sequence Suffix": "Суффикс системной последовательности",
- "Stop Sequence": "Последовательность остановки",
+ "Stop Sequence": "Стоп-строка",
"Context Formatting": "Форматирование контекста",
"(Saved to Context Template)": "(Сохраняется в шаблоне контекста)",
"Tokenizer": "Токенайзер",
- "None / Estimated": "Отсутствует/Приблизительно",
+ "None / Estimated": "Отсутствует / Приблизительно",
"Sentencepiece (LLaMA)": "Sentencepiece (LLaMA)",
- "Token Padding": "Заполнение токенов",
- "Save preset as": "Сохранить предустановку как",
- "Always add character's name to prompt": "Всегда добавлять имя персонажа в инструкции",
- "Use as Stop Strings": "Использование в качестве стоп-строк",
+ "Token Padding": "Кол-во добавочных токенов",
+ "Save preset as": "Сохранить пресет как",
+ "Always add character's name to prompt": "Всегда добавлять имя персонажа в промпт",
+ "Use as Stop Strings": "Использовать в качестве стоп-строк",
"Bind to Context": "Привязка к контексту",
- "Generate only one line per request": "Генерировать только одну строку для каждого запроса",
+ "Generate only one line per request": "Генерировать одну строку на запрос",
"Misc. Settings": "Доп. настройки",
- "Auto-Continue": "Авто продолжение",
- "Collapse Consecutive Newlines": "Свернуть последовательные новые строки",
- "Allow for Chat Completion APIs": "Разрешить API завершения чата",
+ "Auto-Continue": "Авто-продолжение",
+ "Collapse Consecutive Newlines": "Сворачивать последовательные новые строки",
+ "Allow for Chat Completion APIs": "Разрешить для API Chat Completion",
"Target length (tokens)": "Целевая длина (токены)",
- "Keep Example Messages in Prompt": "Сохранять примеры сообщений в инструкции",
+ "Keep Example Messages in Prompt": "Сохранять примеры сообщений в промпте",
"Remove Empty New Lines from Output": "Удалять пустые строчки из вывода",
"Disabled for all models": "Выключено для всех моделей",
"Automatic (based on model name)": "Автоматически (выбор по названию модели)",
"Enabled for all models": "Включить для всех моделей",
"Anchors Order": "Порядок Anchors",
- "Character then Style": "Персонаж после Стиля",
- "Style then Character": "Стиль после Персонажа",
+ "Character then Style": "Стиль после Персонажа",
+ "Style then Character": "Персонаж после Стиля",
"Character Anchor": "Anchors Персонажа",
"Style Anchor": "Стиль Anchors",
"World Info": "Информация о мире",
"Scan Depth": "Глубина сканирования",
"Case-Sensitive": "С учетом регистра",
- "Match Whole Words": "Сопоставить целые слова",
+ "Match Whole Words": "Только целые слова",
"Use global setting": "Использовать глобальную настройку",
"Yes": "Да",
"No": "Нет",
@@ -291,9 +291,9 @@
"User Settings": "Настройки пользователя",
"UI Mode": "Режим интерфейса",
"UI Language": "Язык интерфейса",
- "MovingUI Preset": "Предустановка MovingUI",
+ "MovingUI Preset": "Пресет MovingUI",
"UI Customization": "Настройки интерфейса",
- "Avatar Style": "Стиль аватаров",
+ "Avatar Style": "Аватарки",
"Circle": "Круглые",
"Rectangle": "Прямоугольные",
"Square": "Квадратные",
@@ -306,28 +306,28 @@
"Message Timer": "Таймер сообщений",
"Model Icon": "Показать значки модели",
"# of messages (0 = disabled)": "# сообщений (0 = отключено)",
- "Advanced Character Search": "Расширенный поиск персонажей",
+ "Advanced Character Search": "Расширенный поиск по персонажам",
"Allow {{char}}: in bot messages": "Показывать {{char}}: в ответах",
"Allow {{user}}: in bot messages": "Показать {{user}}: в ответах",
"Show tags in responses": "Показывать <теги> в ответах",
- "Aux List Field": "Вспомогательное поле списка",
- "Lorebook Import Dialog": "Импрот Lorebook-ка",
- "MUI Preset": "Предустановка MUI:",
- "If set in the advanced character definitions, this field will be displayed in the characters list.": "Если это поле задано в расширенных параметрах персонажа, оно будет отображаться в списке персонажа.",
+ "Aux List Field": "Вспомогательное поле в списке",
+ "Lorebook Import Dialog": "Показывать окно импорта лорбука",
+ "MUI Preset": "Пресет MUI:",
+ "If set in the advanced character definitions, this field will be displayed in the characters list.": "Если это поле задано в расширенных параметрах персонажа, оно будет отображаться в списке персонажей.",
"Relaxed API URLS": "Смягченные URL-адреса API",
"Custom CSS": "Пользовательский CSS",
"Default (oobabooga)": "По умолчанию (oobabooga)",
"Mancer Model": "Модель Mancer",
"API Type": "Тип API",
- "Aphrodite API key": "API-ключ Aphrodite",
- "Relax message trim in Groups": "Расслабленная отделка сообщений в Группах",
- "Characters Hotswap": "Смена персонажей на лету",
- "Request token probabilities": "Вероятность запроса токена",
- "Movable UI Panels": "Перемещение панелей интерфейса",
+ "Aphrodite API key": "Ключ от API Aphrodite",
+ "Relax message trim in Groups": "Мягкая обрезка сообщений в группах",
+ "Characters Hotswap": "HotSwap (смена персонажей на лету)",
+ "Request token probabilities": "Запрашивать вероятность токена",
+ "Movable UI Panels": "Подвижные панели UI",
"Reset Panels": "Сбросить MovingUI",
- "UI Colors": "Цвета интерфейса",
+ "UI Colors": "Цвета UI",
"Main Text": "Основной текст",
- "Italics Text": "Курсивный текст",
+ "Italics Text": "Курсив",
"Quote Text": "Текст в кавычках",
"Shadow Color": "Цвет теней",
"FastUI BG": "Фон FastUI",
@@ -335,15 +335,15 @@
"Font Scale": "Размер текста",
"Blur Strength": "Сила размытия",
"Text Shadow Width": "Размер теней текста",
- "UI Theme Preset": "Предустановки интерфейса",
+ "UI Theme Preset": "Пресет темы UI",
"Power User Options": "Продвинутые параметры",
- "Swipes": "Свайвы",
+ "Swipes": "Свайпы",
"Miscellaneous": "Разное",
- "Theme Toggles": "Переключатели темы",
+ "Theme Toggles": "Настройки темы",
"Background Sound Only": "Только фоновый звук",
- "Auto-load Last Chat": "Автоматически загружать последий чат",
+ "Auto-load Last Chat": "Автозагрузка последнего чата",
"Auto-save Message Edits": "Автоматически сохранять отредактированные сообщения",
- "Auto-fix Markdown": "Автоматическое исправление подчеркиваний",
+ "Auto-fix Markdown": "Автоисправление разметки",
"Allow : in bot messages": "Разрешить : в сообщениях ИИ",
"Auto-scroll Chat": "Автоматическая прокрутка чата",
"Render Formulas": "Рендер формул",
@@ -352,50 +352,50 @@
"Automatic (desktop)": "Автоматически (системные настройки)",
"Always enabled": "Всегда включена",
"Debug Menu": "Меню отладки",
- "Restore User Input": "Восстановить запрос пользователя",
+ "Restore User Input": "Восстанавливать введённый текст",
"Character Handling": "Обработка персонажа",
- "Example Messages Behavior": "Пример поведения в сообщениях:",
+ "Example Messages Behavior": "Примеры сообщений:",
"Gradual push-out": "Постепенное выталкивание",
- "Chat/Message Handling": "Обработка чата/сообщения",
- "Always include examples": "Всегда включать примеры",
- "Never include examples": "Никогда не включать примеры",
+ "Chat/Message Handling": "Обработка чата и сообщений",
+ "Always include examples": "Всегда применять примеры",
+ "Never include examples": "Никогда не применять примеры",
"Forbid External Media": "Запрет внешних медиа",
"System Backgrounds": "Системные фоны",
"Name": "Имя",
- "Your Avatar": "Ваш Аватар",
+ "Your Avatar": "Ваш аватар",
"Extensions API:": "API для расширений",
"SillyTavern-extras": "SillyTavern-extras",
- "Auto-connect": "Автоматическое соединение",
+ "Auto-connect": "Подключаться автоматически",
"Active extensions": "Актививные расширения",
"Extension settings": "Настройки расширений",
"Description": "Описание",
"First message": "Первое сообщение",
- "Group Controls": "Контроль группы",
- "Group reply strategy": "Сортировка ответов в группе",
- "Natural order": "Обычный порядок",
- "List order": "Порядок по листу",
+ "Group Controls": "Управление группой",
+ "Group reply strategy": "Персонажи отвечают...",
+ "Natural order": "По алфавиту",
+ "List order": "По списку",
"Allow self responses": "Разрешить ответ себе",
- "Auto Mode": "Автоматический режим",
- "Add Members": "Добавить членов",
- "Current Members": "Текущие члены",
+ "Auto Mode": "Авто-режим",
+ "Add Members": "Добавить участников",
+ "Current Members": "Текущие участники",
"text": "текст",
"Delete": "Удалить",
"Cancel": "Отменить",
- "Advanced Defininitions": "Улучшенная узнаваемость",
- "Personality summary": "Личная сводка",
+ "Advanced Defininitions": "Продвинутое описание",
+ "Personality summary": "Сводка по личности",
"A brief description of the personality": "Краткое описание личности",
"Scenario": "Сценарий",
"Circumstances and context of the dialogue": "Обстоятельства и контекст диалога",
"Talkativeness": "Разговорчивость",
"How often the chracter speaks in": "Как часто персонаж говорит",
- "group chats!": "в груповых чатах",
+ "group chats!": "в групповых чатах!",
"Shy": "Застенчивый",
"Normal": "Обычный",
"Chatty": "Разговорчивый",
"Examples of dialogue": "Примеры диалога",
- "Forms a personality more clearly": "Определите личность более точно",
+ "Forms a personality more clearly": "Определяет личность более точно",
"Save": "Сохранить",
- "World Info Editor": "Редактирование информации о мире",
+ "World Info Editor": "Редактировать информацию о мире",
"New summary": "Новая переменная",
"Export": "Экспорт",
"Delete World": "Удалить мир",
@@ -408,17 +408,17 @@
"Content": "Содержание",
"What this keyword should mean to the AI": "Значение данного ключевого слова для ИИ",
"Memo/Note": "Напоминание",
- "Not sent to AI": "Не отправлять ИИ",
+ "Not sent to AI": "Не отправляется ИИ",
"Constant": "Постоянно",
"Selective": "Выборочно",
"Before Char": "Перед Персонажем",
"After Char": "После Персонажа",
"Insertion Order": "Порядок внесения",
- "Tokens:": "Токены",
+ "Tokens:": "Токены:",
"Disable": "Отключено",
- "${characterName}": "${имяПерсонажа}",
+ "${characterName}": "${characterName}",
"CHAR": "ПЕРСОНАЖ",
- "is typing": "Печатает...",
+ "is typing": "печатает...",
"Back to parent chat": "Вернуться в основной чат",
"Save bookmark": "Сохранить закладку",
"Convert to group": "Превратить в группу",
@@ -429,18 +429,18 @@
"Regenerate": "Повторная генерация",
"PNG": "PNG",
"JSON": "JSON",
- "presets": "Предустановки",
+ "presets": "Пресеты",
"Message Sound": "Звук сообщения",
- "Author's Note": "Авторские заметки",
- "Send Jailbreak": "Отправлять JailBreak",
+ "Author's Note": "Пометки автора",
+ "Send Jailbreak": "Отправлять джейлбрейк",
"Replace empty message": "Заменять пустые сообщения",
"Send this text instead of nothing when the text box is empty.": "Этот текст будет отправлен в случае отсутствия текста на отправку.",
- "NSFW avoidance prompt": "Инструкции для избегания NSFW",
- "Prompt that is used when the NSFW toggle is off": "Инструкции, используемые, когда поощрение NSFW отключено",
+ "NSFW avoidance prompt": "Анти-NSFW промпт",
+ "Prompt that is used when the NSFW toggle is off": "Промпт, применяемый, когда поощрение NSFW отключено",
"Advanced prompt bits": "Дополнительные инструкции",
- "World Info format": "Шаблон форматирования Информации о мире",
+ "World Info format": "Шаблон форматирования информации о мире",
"Wraps activated World Info entries before inserting into the prompt. Use {0} to mark a place where the content is inserted.": "Выделяет активную Информацию о мире перед внесением в инструкции. Используйте {0} чтобы уточнить место с необходимой информацией.",
- "Unrestricted maximum value for the context slider": "Неограниченное максимальное значение для ползунка с размером контекста",
+ "Unrestricted maximum value for the context slider": "Убрать потолок для ползунка контекста. Включайте только если точно знаете, что делаете",
"Chat Completion Source": "Источник для Chat Completion",
"Avoid sending sensitive information to the Horde.": "Избегайте отправки личной информации Horde",
"Review the Privacy statement": "Ознакомиться с заявлением о конфиденциальности",
@@ -454,25 +454,25 @@
"KoboldAI Horde": "KoboldAI Horde",
"Text Gen WebUI (ooba)": "Text Gen WebUI (ooba)",
"NovelAI": "NovelAI",
- "Chat Completion (OpenAI, Claude, Window/OpenRouter, Scale)": "Дополнение диалога (OpenAI, Claude, Window/OpenRouter, Scale)",
- "OpenAI API key": "API-ключ для OpenAI",
+ "Chat Completion (OpenAI, Claude, Window/OpenRouter, Scale)": "Char Completion (OpenAI, Claude, Window/OpenRouter, Scale)",
+ "OpenAI API key": "Ключ для API OpenAI",
"Trim spaces": "Обрезать пробелы",
- "Trim Incomplete Sentences": "Обрезать неоконченные предложения",
- "Include Newline": "Использовать красную строку",
+ "Trim Incomplete Sentences": "Удалять неоконченные предложения",
+ "Include Newline": "Добавлять новую строку",
"Non-markdown strings": "Строки без разметки",
- "Replace Macro in Sequences": "Заменить макросы в последовательности",
- "Presets": "Предустановки",
+ "Replace Macro in Sequences": "Заменить макросы в строках",
+ "Presets": "Пресеты",
"Separator": "Разделитель",
"Start Reply With": "Начинать ответ с",
- "Show reply prefix in chat": "Показывать префиксы ответов в чате",
- "Worlds/Lorebooks": "Миры/Lorebook-ки",
+ "Show reply prefix in chat": "Показывать префикс ответов в чате",
+ "Worlds/Lorebooks": "Миры и лорбуки",
"Active World(s)": "Активные миры",
"Activation Settings": "Настройки активации",
- "Character Lore Insertion Strategy": "Порядок включения сведений",
+ "Character Lore Insertion Strategy": "Порядок включения лора персонажа",
"Sorted Evenly": "Равномерная сортировка",
"Active World(s) for all chats": "Активные миры для всех чатов",
"-- World Info not found --": "-- Информация о мире не найдена --",
- "--- Pick to Edit ---": "--- Редактировать ---",
+ "--- Pick to Edit ---": "--- Выберите для редактирования ---",
"or": "или",
"New": "Новый",
"Priority": "Приритет",
@@ -485,26 +485,26 @@
"Depth ↘": "Глубина ↘",
"Order ↗": "Порядок ↗",
"Order ↘": "Порядок ↘",
- "UID ↗": "Уник. ID ↗",
- "UID ↘": "Уник. ID ↘",
+ "UID ↗": "UID ↗",
+ "UID ↘": "UID ↘",
"Trigger% ↗": "Триггер% ↗",
"Trigger% ↘": "Триггер% ↘",
"Order:": "Порядок:",
"Depth:": "Глубина:",
- "Character Lore First": "Сначала сведения о персонаже",
- "Global Lore First": "Сначала общие сведения",
+ "Character Lore First": "Сначала лор персонажа",
+ "Global Lore First": "Сначала глобальный лор",
"Recursive Scan": "Рекурсивное сканирование",
"Case Sensitive": "Учитывать регистр",
"Match whole words": "Только полное совпадение",
"Alert On Overflow": "Оповещение о переполнении",
- "World/Lore Editor": "Редактировать Мир/Сведения",
- "--- None ---": "---Отсутствует---",
- "Comma seperated (ignored if empty)": "Разделение запятыми (не используется, если оставлено пустым)",
+ "World/Lore Editor": "Редактировать мир или лор",
+ "--- None ---": "--- Отсутствует ---",
+ "Comma seperated (ignored if empty)": "Через запятую (не используется, если оставлено пустым)",
"Use Probability": "Использовать вероятность",
"Exclude from recursion": "Исключить из рекурсии",
- "Entry Title/Memo": "Вставьте Название/Заметку",
+ "Entry Title/Memo": "Название или заметка о записи",
"Position:": "Положение:",
- "T_Position": "↑Char: Перед определениями Персонажа\n↓Char: После определений Персонажа\n↑AN: Перед Авторскими заметками\n↓AN: После Авторских заметок\n@D: На глубине",
+ "T_Position": "↑Char: Перед определениями Персонажа\n↓Char: После определений Персонажа\n↑AN: Перед Пометок автора\n↓AN: После Пометок автора\n@D: На глубине",
"Before Char Defs": "↑Перс.",
"After Char Defs": "↓Перс.",
"Before AN": "↑АЗ",
@@ -514,35 +514,35 @@
"Probability:": "Вероятность:",
"Update a theme file": "Обновить файл темы",
"Save as a new theme": "Сохранить как новую тему",
- "Minimum number of blacklisted words detected to trigger an auto-swipe": "Минимальное количество обнаруженных слов в черном списке для запуска авто-свайпа.",
- "Delete Entry": "Удалить запись:",
- "User Message Blur Tint": "Сообщение пользователя",
- "AI Message Blur Tint": "Сообщение ИИ",
+ "Minimum number of blacklisted words detected to trigger an auto-swipe": "Минимальное количество обнаруженных запрещённых слов, при котором срабатывает авто-свайп.",
+ "Delete Entry": "Удалить запись",
+ "User Message Blur Tint": "Ваши сообщения",
+ "AI Message Blur Tint": "Сообщения ИИ",
"Chat Backgrounds": "Фоны чата",
"Chat Background": "Фон чата",
- "UI Background": "Фон интерфейса",
+ "UI Background": "Фон UI",
"Mad Lab Mode": "Режим безумца",
"Show Message Token Count": "Счетчик токенов сообщения",
"Compact Input Area (Mobile)": "Компактная зона ввода",
"Zen Sliders": "Дзен слайдеры",
- "UI Border": "Границы интерфейса",
+ "UI Border": "Границы UI",
"Chat Style:": "Стиль чата",
"Chat Width (PC)": "Ширина чата (для ПК)",
"Chat Timestamps": "Временные метки в чате",
"Tags as Folders": "Теги как папки",
"Chat Truncation": "Усечение чата",
"(0 = unlimited)": "(0 = неограниченное)",
- "Streaming FPS": "Потоковый FPS",
+ "Streaming FPS": "FPS для стриминга",
"Gestures": "Жесты",
"Message IDs": "ID сообщений",
- "Prefer Character Card Prompt": "Предпочитать инструкции из Карточки Персонажа",
- "Prefer Character Card Jailbreak": "Предпочитать Джеилбреик из Карточки Персонажа",
- "Press Send to continue": "Нажатие 'Отправить' для продолжения",
- "Quick 'Continue' button": "Кнопка быстрого 'Продолжения'",
- "Log prompts to console": "Выводы журнала в консоли",
+ "Prefer Character Card Prompt": "Предпочитать промпт из карточки персонажа",
+ "Prefer Character Card Jailbreak": "Предпочитать джейлбрейк из карточки керсонажа",
+ "Press Send to continue": "Кнопка отправки продолжает сообщение",
+ "Quick 'Continue' button": "Кнопка быстрого продолжения",
+ "Log prompts to console": "Выводить промпты в консоль",
"Never resize avatars": "Никогда не менять размер аватаров",
"Show avatar filenames": "Показывать названия файлов аватаров",
- "Import Card Tags": "Импорт тегов Карточки",
+ "Import Card Tags": "Импорт тегов карточки",
"Confirm message deletion": "Подтверждение удаления сообщений",
"Spoiler Free Mode": "Режим без спойлеров",
"Auto-swipe": "Автоматические свайпы",
@@ -550,7 +550,7 @@
"Blacklisted words": "Запрещенные слова",
"Blacklisted word count to swipe": "Количество запрещенных слов для свайпа",
"Reload Chat": "Перезагрузить чат",
- "Search Settings": "Поиск настроек",
+ "Search Settings": "Поиск по настройкам",
"Disabled": "Отключено",
"Automatic (PC)": "Автоматическое (ПК)",
"Enabled": "Включено",
@@ -569,54 +569,54 @@
"Show sequential message numbers in the chat log": "Показывать порядковые номера сообщений в журнале чата.",
"Show the number of tokens in each message in the chat log": "Показать количество токенов в каждом сообщении в журнале чата.",
"Single-row message input area. Mobile only, no effect on PC": "Однорядная область ввода сообщений. Только для мобильных устройств, на ПК не работает.",
- "In the Character Management panel, show quick selection buttons for favorited characters": "На панели управления персонажами отображають кнопки быстрого выбора для избранных персонажей.",
+ "In the Character Management panel, show quick selection buttons for favorited characters": "На панели управления персонажами будут отображены кнопки быстрого выбора для избранных персонажей.",
"Show tagged character folders in the character list": "Отобразить теговые папки с персонажами в списке персонажей.",
"Play a sound when a message generation finishes": "Воспроизведение звука при завершении генерации сообщения.",
"Only play a sound when ST's browser tab is unfocused": "Воспроизводить звук только тогда, когда вкладка браузера ST не выбрана.",
"Reduce the formatting requirements on API URLs": "Снижение требований к форматированию URL-адресов API.",
- "Ask to import the World Info/Lorebook for every new character with embedded lorebook. If unchecked, a brief message will be shown instead": "Запросить импорт информации о мире/Lorebook для каждого нового персонажа со встроенным Lorebook. Если флажок снят, вместо этого будет показано короткое сообщение.",
+ "Ask to import the World Info/Lorebook for every new character with embedded lorebook. If unchecked, a brief message will be shown instead": "Спрашивать разрешение на импорт лорбука для всех персонажей со встроенным лорбуком. При выключенной опции вместо этого будет показываться короткое сообщение",
"Restore unsaved user input on page refresh": "Восстановление несохраненного пользовательского запроса при обновлении страницы.",
- "Allow repositioning certain UI elements by dragging them. PC only, no effect on mobile": "Позволяет изменять положение некоторых элементов пользовательского интерфейса путем их перетаскивания. Только для ПК, на мобильных не работает.",
- "MovingUI preset. Predefined/saved draggable positions": "Предварительная настройка MovingUI. Предопределенные/сохраненные позиции для перетаскивания.",
- "Save movingUI changes to a new file": "Сохранение изменений перемещаемого пользовательского интерфейса в новый файл.",
- "Apply a custom CSS style to all of the ST GUI": "Применить пользовательский стиль CSS ко всем элементам графического интерфейса ST.",
- "Use fuzzy matching, and search characters in the list by all data fields, not just by a name substring": "Использовать нечеткое сопоставление и искать символы в списке по всем полям данных, а не только по подстроке имени.",
- "If checked and the character card contains a prompt override (System Prompt), use that instead": "Если установлен флажок и карточка персонажа содержит переопределение подсказки (Системная подсказка), будет использована она вместо изначальной.",
- "If checked and the character card contains a jailbreak override (Post History Instruction), use that instead": "Если установлен флажок и карточка персонажа содержит переопределение джейлбрейка (инструкция Истории сообщений), будет использована он вместо изначального.",
- "Avoid cropping and resizing imported character images. When off, crop/resize to 400x600": "Избегать обрезки и изменения размера импортированных изображений персонажей. Если выключено, обрезать/изменить размер до 400x600.",
- "Show actual file names on the disk, in the characters list display only": "Отображение фактических имен файлов на диске, только в списке персонажей.",
- "Prompt to import embedded card tags on character import. Otherwise embedded tags are ignored": "Запрос на импорт встроенных тегов карт при импорте персонажей. В противном случае встроенные теги игнорируются.",
- "Hide character definitions from the editor panel behind a spoiler button": "Скрыть определения персонажей из панели редактора за кнопкой спойлера.",
- "Show a button in the input area to ask the AI to continue (extend) its last message": "Показать кнопку в области ввода, чтобы попросить ИИ продолжить (продлить) его последнее сообщение.",
+ "Allow repositioning certain UI elements by dragging them. PC only, no effect on mobile": "Позволяет перемещать некоторые элементы интерфейса путем их перетаскивания. Только для ПК, на телефонах не работает.",
+ "MovingUI preset. Predefined/saved draggable positions": "Пресет для MovingUI. Предопределенные/сохраненные позиции для перетаскивания.",
+ "Save movingUI changes to a new file": "Сохранение изменений MovingUI в новый файл.",
+ "Apply a custom CSS style to all of the ST GUI": "Применять пользовательский CSS ко всему интерфейсу Таверны.",
+ "Use fuzzy matching, and search characters in the list by all data fields, not just by a name substring": "Искать персонажей по всем полям данных, а не только по имени.",
+ "If checked and the character card contains a prompt override (System Prompt), use that instead": "При включении этой опции, системный промпт будет заменяться кастомным промптом из карточки (при его наличии).",
+ "If checked and the character card contains a jailbreak override (Post History Instruction), use that instead": "При включении этой опции, пользовательский джейлбрейк будет заменяться кастомным джейлбрейком из карточки (при его наличии).",
+ "Avoid cropping and resizing imported character images. When off, crop/resize to 400x600": "Не растягивать и не обрезать изображения импортируемых персонажей. При выключении опции, изображения будут всегда приводиться к размеру 400x600.",
+ "Show actual file names on the disk, in the characters list display only": "Отображение названий файлов персонажей на диске, только в списке персонажей.",
+ "Prompt to import embedded card tags on character import. Otherwise embedded tags are ignored": "Запрашивать разрешения на импорт встроенных тегов карт при импорте персонажей. В противном случае встроенные теги игнорируются.",
+ "Hide character definitions from the editor panel behind a spoiler button": "Спрятать определения персонажей из панели редактора за кнопку спойлера.",
+ "Show a button in the input area to ask the AI to continue (extend) its last message": "Показывать на форме ответа кнопку, по нажатии на которую ИИ продолжит своё предыдущее сообщение.",
"Show arrow buttons on the last in-chat message to generate alternative AI responses. Both PC and mobile": "Показывать кнопки со стрелками на последнем сообщении в чате, чтобы генерировать альтернативные ответы ИИ. Как для ПК, так и для мобильных устройств.",
"Allow using swiping gestures on the last in-chat message to trigger swipe generation. Mobile only, no effect on PC": "Позволяет использовать жесты смахивания на последнем сообщении в чате, чтобы вызвать альтернативную генерацию. Только для мобильных устройств, на ПК не работает.",
- "Save edits to messages without confirmation as you type": "Сохранять правки в сообщениях без подтверждения при вводе текста.",
+ "Save edits to messages without confirmation as you type": "Сохранять правки в сообщениях без подтверждения по мере ввода текста.",
"Render LaTeX and AsciiMath equation notation in chat messages. Powered by KaTeX": "Отображение нотации уравнений LaTeX и AsciiMath в сообщениях чата. При поддержке KaTeX.",
- "Disalow embedded media from other domains in chat messages": "Запретить встроенные медиафайлы из других доменов в сообщениях чата.",
+ "Disalow embedded media from other domains in chat messages": "Запретить в сообщениях чата встроенные медиафайлы из других доменов.",
"Skip encoding and characters in message text, allowing a subset of HTML markup as well as Markdown": "Не кодировать символы < и > в тексте сообщения, что позволяет использовать подмножество HTML-разметки, а также Markdown.",
- "Allow AI messages in groups to contain lines spoken by other group members": "Разрешить в групповых сообщениях AI содержать реплики, произнесенные другими членами группы.",
+ "Allow AI messages in groups to contain lines spoken by other group members": "Разрешить ИИ в группах генерировать строчки за других участников группы в своих сообщениях.",
"Requests logprobs from the API for the Token Probabilities feature": "Запросить логпробы из API для функции Token Probabilities.",
"Automatically reject and re-generate AI message based on configurable criteria": "Автоматическое отклонение и повторная генерация сообщений AI на основе настраиваемых критериев.",
- "Enable the auto-swipe function. Settings in this section only have an effect when auto-swipe is enabled": "Включить функцию автоматического пролистывания. Настройки в этом разделе действуют только при включенном автопролистывании.",
+ "Enable the auto-swipe function. Settings in this section only have an effect when auto-swipe is enabled": "Включить авто-свайп. Настройки в этом разделе действуют только при включенном авто-свайпе.",
"If the generated message is shorter than this, trigger an auto-swipe": "Если сгенерированное сообщение короче этого значения, срабатывает авто-свайп.",
"Reload and redraw the currently open chat": "Перезагрузить и перерисовать открытый в данный момент чат.",
"Auto-Expand Message Actions": "Развернуть контекстные элементы",
"Not Connected": "Не подключено",
- "Persona Management": "Управление Персоной",
- "Persona Description": "Описание Персоны",
- "Your Persona": "Ваша Персона",
- "Show notifications on switching personas": "Показывать уведомления о смене персоны",
+ "Persona Management": "Управление персоной",
+ "Persona Description": "Описание персоны",
+ "Your Persona": "Ваша персона",
+ "Show notifications on switching personas": "Показывать уведомления при смене персоны",
"Blank": "Пустой",
- "In Story String / Chat Completion: Before Character Card": "В строке истории / Дополнение диалога: Перед Карточкой Персонажа",
- "In Story String / Chat Completion: After Character Card": "В строке истории / Дополнение диалога: После Карточки Персонажа",
- "In Story String / Prompt Manager": "В строке истории/Менеджер подсказок",
- "Top of Author's Note": "Перед Авторскими Заметками",
- "Bottom of Author's Note": "После Авторских Заметок",
- "How do I use this?": "Как мне это использовать?",
- "More...": "Узнать больше...",
+ "In Story String / Chat Completion: Before Character Card": "В строке истории / в Chat Completion: Перед карточкой персонажа",
+ "In Story String / Chat Completion: After Character Card": "В строке истории / в Chat Completion: После карточки персонажа",
+ "In Story String / Prompt Manager": "В строке истории / Менеджер промптов",
+ "Top of Author's Note": "Перед Заметками автора",
+ "Bottom of Author's Note": "После Заметок автора",
+ "How do I use this?": "Как пользоваться?",
+ "More...": "Ещё...",
"Link to World Info": "Ссылка на информацию о мире",
- "Import Card Lore": "Импортировать Карточку Сведений",
- "Scenario Override": "Замещение сценария",
+ "Import Card Lore": "Импортировать лор карточки",
+ "Scenario Override": "Перезапись сценария",
"Rename": "Переименовать",
"Character Description": "Описание персонажа",
"Creator's Notes": "Заметки создателя",
@@ -624,114 +624,113 @@
"Z-A": "Z-A",
"Newest": "Новейшие",
"Oldest": "Старейшие",
- "Favorites": "Любимые",
+ "Favorites": "Избранные",
"Recent": "Последние",
"Most chats": "Больше всего чатов",
"Least chats": "Меньше всего чатов",
"Back": "Назад",
- "Prompt Overrides (For OpenAI/Claude/Scale APIs, Window/OpenRouter, and Instruct mode)": "Замещение инструкций (Для OpenAI/Claude/Scale API, Window/OpenRouter, и Режима Instruct)",
- "Insert {{original}} into either box to include the respective default prompt from system settings.": "Внесите {{original}} в любое поле для внесения стандартных инструкций из системных настроек",
- "Main Prompt": "Главные инструкции",
- "Jailbreak": "Jailbreak",
- "Creator's Metadata (Not sent with the AI prompt)": "Сведения о создателе (не отправляются ИИ с инструкциями)",
- "Everything here is optional": "Всё в данных полях опционально",
- "Created by": "Создано",
- "Character Version": "Версия Персонажа",
- "Tags to Embed": "Теги для встраивания",
+ "Prompt Overrides (For OpenAI/Claude/Scale APIs, Window/OpenRouter, and Instruct mode)": "Перезапись промпта (Для OpenAI/Claude/Scale API, Window/OpenRouter, и режима Instruct)",
+ "Insert {{original}} into either box to include the respective default prompt from system settings.": "Введите {{original}} в любое поле, чтобы использовать соответствующий промпт из системных настроек",
+ "Main Prompt": "Основной промпт",
+ "Jailbreak": "Джейлбрейк",
+ "Creator's Metadata (Not sent with the AI prompt)": "Метаданные (не отправляются ИИ)",
+ "Everything here is optional": "Все поля необязательные",
+ "Created by": "Автор",
+ "Character Version": "Версия персонажа",
+ "Tags to Embed": "Встраиваемые теги",
"How often the character speaks in group chats!": "Как часто персонаж говорит в групповых чатах",
- "Important to set the character's writing style.": "Важные замечания для стиля написания персонажа",
+ "Important to set the character's writing style.": "Серьёзно влияет на стиль письма персонажа.",
"ATTENTION!": "ВНИМАНИЕ!",
- "Samplers Order": "Порядок семплирования",
- "Samplers will be applied in a top-down order. Use with caution.": "Семплирование будет применено в порядке сверху-вниз. Используйте с осторожностью.",
- "Repetition Penalty": "Наказание за повторы",
- "Rep. Pen. Range.": "Размер наказания за повторы",
- "Rep. Pen. Freq.": "Частота наказания за повторы",
- "Rep. Pen. Presence": "Наличие наказания за повторы",
+ "Samplers Order": "Порядок сэмплеров",
+ "Samplers will be applied in a top-down order. Use with caution.": "Сэмплеры будут применяться в порядке от верхнего к нижнему. Используйте с осторожностью.",
+ "Repetition Penalty": "Штраф за повторы",
+ "Rep. Pen. Range.": "Диапазон поиска повторов",
+ "Rep. Pen. Freq.": "Частота штрафа за повторы",
+ "Rep. Pen. Presence": "Наличие штрафа за повторы",
"Enter it in the box below:": "Введите в поле ниже:",
"separate with commas w/o space between": "разделять запятыми без пробела",
"Document": "Документ",
"Suggest replies": "Предлагать ответы",
"Show suggested replies. Not all bots support this.": "Показывать предлагаемые ответы. Не все боты поддерживают это.",
- "Use 'Unlocked Context' to enable chunked generation.": "Использовать 'Безлимитный контекст' для активации кусочной генерации",
+ "Use 'Unlocked Context' to enable chunked generation.": "Использовать 'Неограниченный контекст' для активации кусочной генерации",
"It extends the context window in exchange for reply generation speed.": "Увеличивает размер контекста в обмен на скорость генерации.",
"Continue": "Продолжить",
"CFG Scale": "Масштаб CFG",
"Editing:": "Изменения",
- "AI reply prefix": "Префикс Ответ ИИ",
- "Custom Stopping Strings": "Настройка ограничивающий нитей",
- "JSON serialized array of strings": "JSON ориентированный набор нитей",
- "words you dont want generated separated by comma ','": "Слова, которые вы не хотите генерировать, разделяются запятыми ','",
- "Extensions URL": "URL расширений ",
- "API Key": "Ключ API",
+ "AI reply prefix": "Префикс для ответа ИИ",
+ "Custom Stopping Strings": "Стоп-строки",
+ "JSON serialized array of strings": "Список строк в формате JSON",
+ "words you dont want generated separated by comma ','": "слова, которые вы не хотите генерировать, через запятую ','",
+ "Extensions URL": "URL расширений",
+ "API Key": "Ключ от API",
"Enter your name": "Введите свое имя",
"Name this character": "Назовите этого персонажа",
"Search / Create Tags": "Искать / Создать тэги",
- "Describe your character's physical and mental traits here.": "Опишите ментальные и физические черты персонажа здесь",
- "This will be the first message from the character that starts every chat.": "Это булет первое сообщение от Персонажа при начале нового чата",
- "Chat Name (Optional)": "Название Чата (Необязательно)",
- "Filter...": "Отфильтровать...",
+ "Describe your character's physical and mental traits here.": "Опишите ментальные и физические черты персонажа",
+ "This will be the first message from the character that starts every chat.": "Это будет первое сообщение от персонажа при начале нового чата",
+ "Chat Name (Optional)": "Название чата (необязательно)",
+ "Filter...": "Фильтры...",
"Search...": "Поиск...",
"Any contents here will replace the default Main Prompt used for this character. (v2 spec: system_prompt)": "Все содержание этой ячейки будет заменять стандартный Промт",
"Any contents here will replace the default Jailbreak Prompt used for this character. (v2 spec: post_history_instructions)": "Все содержание этой ячейки будет заменять стандартный Джейлбрейк",
- "(Botmaker's name / Contact Info)": "Ваше имя / Контакты",
- "(If you want to track character versions)": "Если вы хотите отслеживать модель персонажа",
- "(Describe the bot, give use tips, or list the chat models it has been tested on. This will be displayed in the character list.)": "Опишите Персонажа, дайте советы, или упомяните на каких моделях он был протестирован",
- "(Write a comma-separated list of tags)": "Запишите лист тэгов, разделяя запятой",
- "(A brief description of the personality)": "Краткое описание личности)",
- "(Circumstances and context of the interaction)": "(Обстоятельства и контекст этого взаимодействия)",
+ "(Botmaker's name / Contact Info)": "(Имя автора / Контакты)",
+ "(If you want to track character versions)": "Если вы хотите отслеживать версии персонажа",
+ "(Describe the bot, give use tips, or list the chat models it has been tested on. This will be displayed in the character list.)": "(Описание персонажа, советы по использованию, список моделей, на которых он тестировался. Информация будет отображаться в списке персонажей)",
+ "(Write a comma-separated list of tags)": "(Список тегов через запятую)",
+ "(A brief description of the personality)": "(Краткое описание личности)",
+ "(Circumstances and context of the interaction)": "(Обстоятельства и контекст этого диалога)",
"(Examples of chat dialog. Begin each example with START on a new line.)": "(Примеры диалога. Начинайте каждый пример с START или новой линией.)",
- "Injection text (supports parameters)": "Текст включения (Поддерживает параметры)",
- "Injection depth": "Глубина включения",
+ "Injection text (supports parameters)": "Текст для инжекта (поддерживает параметры)",
+ "Injection depth": "Глубина инжекта",
"Type here...": "Пишите здесь...",
- "Comma separated (required)": "Разделять через запятую (Обязательное)",
- "Comma separated (ignored if empty)": "Разделять через запятую (Игнорируется если пусто)",
+ "Comma separated (required)": "Через запятую (обязательное поле)",
+ "Comma separated (ignored if empty)": "Через запятую (пустое поле игнорируется)",
"What this keyword should mean to the AI, sent verbatim": "Что это ключевое слово должно означать для ИИ, отправляется дословно",
- "Filter to Character(s)": "Фильтр к персонажу(ам)",
- "Character Exclusion": "Исключение персонажей",
- "Inclusion Group": "Инклюзивная группа",
- "Only one entry with the same label will be activated": "Будет актив. только одна запись с одинаковой меткой",
- "-- Characters not found --": "-- Персонаж не найден --",
+ "Filter to Character(s)": "Фильтр по персонажу(ам)",
+ "Character Exclusion": "Исключить персонажей",
+ "Inclusion Group": "Включить персонажей",
+ "Only one entry with the same label will be activated": "Будет активна только одна запись с одинаковой меткой",
+ "-- Characters not found --": "-- Персонажей не найдено --",
"Not sent to the AI": "Не отправляется ИИ",
"(This will be the first message from the character that starts every chat)": "(Это будет первое сообщение от персонажа, когда вы начинаете новый чат)",
- "Not connected to API!": "Нет подключения к API",
- "AI Response Configuration": "Еастройка Ответа ИИ",
- "AI Configuration panel will stay open": "Панель Настройки ИИ останется открытой",
- "Update current preset": "Обновить текущую настройку",
- "Create new preset": "Создать новую настройку",
- "Import preset": "Импорт предустановки",
- "Export preset": "Экспорт предустановки",
- "Delete the preset": "Удалить предустановку",
- "Auto-select this preset for Instruct Mode": "Автоматический выбор этой предустановки для режима 'Инструктаж'.",
- "Auto-select this preset on API connection": "Автоматический выбор этой предустановки при подключении к API.",
- "NSFW block goes first in the resulting prompt": "НСФВ блокировка идет первой при отправки Промта",
- "Enables OpenAI completion streaming": "Включить процесс генерации OpenAI",
- "Wrap user messages in quotes before sending": "Заключить ответ Пользователя в кавычки",
- "Restore default prompt": "Восстановить станндартный промт",
- "New preset": "Новая настройка",
- "Delete preset": "Удалить настройку",
+ "AI Response Configuration": "Настройка ответа ИИ",
+ "AI Configuration panel will stay open": "Панель настройки ИИ останется открытой",
+ "Update current preset": "Обновить текущий пресет",
+ "Create new preset": "Создать новый пресет",
+ "Import preset": "Импортировать пресет",
+ "Export preset": "Экспортировать пресет",
+ "Delete the preset": "Удалить пресет",
+ "Auto-select this preset for Instruct Mode": "Автоматический выбор этого пресета для режима Instruct.",
+ "Auto-select this preset on API connection": "Автоматический выбор этого пресета при подключении к API.",
+ "NSFW block goes first in the resulting prompt": "Блок NSFW идёт первым при отправке промпта",
+ "Enables OpenAI completion streaming": "Включить стриминг OpenAI",
+ "Wrap user messages in quotes before sending": "Перед отправкой заключать ответ пользователя в кавычки",
+ "Restore default prompt": "Восстановить станндартный промпт",
+ "New preset": "Новый пресет",
+ "Delete preset": "Удалить пресет",
"Restore default jailbreak": "Восстановить стандартный джейлбрейк",
"Restore default reply": "Восстановить стандартный ответ",
"Restore defaul note": "Восстановить стандартную заметку",
- "API Connections": "Соединения API",
+ "API Connections": "Соединения с API",
"Can help with bad responses by queueing only the approved workers. May slowdown the response time.": "Может помочь с плохими ответами ставя в очередь только подтвержденных работников. Может замедлить время ответа.",
- "Clear your API key": "Очистить свои ключи API",
+ "Clear your API key": "Очистите свой ключ от API",
"Refresh models": "Обновить модели",
"Get your OpenRouter API token using OAuth flow. You will be redirected to openrouter.ai": "Получите свой OpenRouter API токен используя OAuth. У вас будет открыта вкладка openrouter.ai",
- "Verifies your API connection by sending a short test message. Be aware that you'll be credited for it!": "Подверждает ваше соединение к API. Знайте, что за это снимут деньги с вашего счета.",
+ "Verifies your API connection by sending a short test message. Be aware that you'll be credited for it!": "Проверка работоспособности вашего соединения с API. Знайте, что оно будет отправлено от вашего лица.",
"Create New": "Создать новое",
"Edit": "Изменить",
- "Locked = World Editor will stay open": "Закреплено = Редактирование Мира останется открытым",
- "Entries can activate other entries by mentioning their keywords": "Записи могут активировать другие записи если в них содержаться ключевые слова",
+ "Locked = World Editor will stay open": "Закреплено = Редактор мира останется открытым",
+ "Entries can activate other entries by mentioning their keywords": "Записи могут активировать другие записи, если в них содержатся ключевые слова",
"Lookup for the entry keys in the context will respect the case": "Большая буква имеет значение при активации ключевого слова",
"If the entry key consists of only one word, it would not be matched as part of other words": "Если ключевое слово состоит только из одного слова, оно не будет активироваться как часть других слов",
- "Open all Entries": "Открыть все Записи",
- "Close all Entries": "Закрыть все Записи",
+ "Open all Entries": "Открыть все записи",
+ "Close all Entries": "Закрыть все записи",
"Create": "Создать",
- "Import World Info": "Импортировать Мир",
- "Export World Info": "Экспортировать Мир",
- "Delete World Info": "Удалить Мир",
- "Duplicate World Info": "Дублировать Мир",
- "Rename World Info": "Переименовать Мир",
+ "Import World Info": "Импортировать мир",
+ "Export World Info": "Экспортировать мир",
+ "Delete World Info": "Удалить мир",
+ "Duplicate World Info": "Дублировать мир",
+ "Rename World Info": "Переименовать мир",
"Refresh": "Обновить",
"Primary Keywords": "Основные ключевые слова",
"Logic": "Логика",
@@ -740,74 +739,74 @@
"NOT ALL": "НЕ ВСЕ",
"NOT ANY": "НЕ ЛЮБОЙ",
"Optional Filter": "Дополнительный фильтр",
- "New Entry": "Новая Запись",
+ "New Entry": "Новая запись",
"Fill empty Memo/Titles with Keywords": "Заполните пустые Заметки/Названия ключевыми словами",
- "Save changes to a new theme file": "Сохранить изменения в новой теме",
+ "Save changes to a new theme file": "Сохранить изменения в файл новой темы",
"removes blur and uses alternative background color for divs": "убирает размытие и использует альтернативный фон для разделов",
"AI Response Formatting": "Формат ответа ИИ",
"Change Background Image": "Изменить фон",
"Extensions": "Расширения",
"Click to set a new User Name": "Нажмите, чтобы задать новое имя пользователя.",
- "Click to lock your selected persona to the current chat. Click again to remove the lock.": "Нажмите, чтобы закрепить выбранную персону за текущим чатом. Нажмите еще раз, чтобы снять блокировку.",
+ "Click to lock your selected persona to the current chat. Click again to remove the lock.": "Нажмите, чтобы закрепить выбранную персону для текущего чата. Нажмите еще раз, чтобы открепить.",
"Click to set user name for all messages": "Нажмите, чтобы задать имя пользователя для всех сообщений.",
- "Create a dummy persona": "Создать болванку",
- "Character Management": "Управление Персонажами",
- "Locked = Character Management panel will stay open": "Закреплено = Панель Управление Персонажами останется открытой ",
+ "Create a dummy persona": "Создать персону-болванку",
+ "Character Management": "Управление персонажами",
+ "Locked = Character Management panel will stay open": "Закреплено = Панель управление персонажами останется открытой",
"Select/Create Characters": "Выбрать/Создать персонажа",
- "Token counts may be inaccurate and provided just for reference.": "Счетчик токенов может быть неточным и используется только для примера",
- "Click to select a new avatar for this character": "Нажмите что бы выбрать новый аватар для этого персонажа",
+ "Token counts may be inaccurate and provided just for reference.": "Счетчик токенов может быть неточным, используйте как ориентир",
+ "Click to select a new avatar for this character": "Нажмите чтобы выбрать новый аватар для этого персонажа",
"Example: [{{user}} is a 28-year-old Romanian cat girl.]": "Пример:\n [{{user}} is a 28-year-old Romanian cat girl.]",
"Toggle grid view": "Переключить вид сетки",
- "Add to Favorites": "Добавить в Любимые",
- "Advanced Definition": "Расширенные Определения",
- "Character Lore": "Сведения Персонажа",
- "Export and Download": "Экспортировать и Скачать",
+ "Add to Favorites": "Добавить в Избранное",
+ "Advanced Definition": "Расширенное определение",
+ "Character Lore": "Лор персонажа",
+ "Export and Download": "Экспортировать и скачать",
"Duplicate Character": "Дублировать персонажа",
"Create Character": "Создать персонажа",
"Delete Character": "Удалить персонажа",
"View all tags": "Показать все тэги",
- "Click to set additional greeting messages": "Нажмите что бы создать дополнительное вступительное сообщение",
- "Show / Hide Description and First Message": "Показать/Убрать Описание и Первое сообщение",
- "Click to select a new avatar for this group": "Нажмите что бы выбрать новый аватар для этого группового чата",
- "Set a group chat scenario": "Создать сценарий для группового чата",
- "Restore collage avatar": "Восстановить коллаж персонажа",
+ "Click to set additional greeting messages": "Нажмите чтобы создать дополнительное вступительное сообщение",
+ "Show / Hide Description and First Message": "Показать / убрать описание и первое сообщение",
+ "Click to select a new avatar for this group": "Нажмите чтобы выбрать новый аватар для этой группы",
+ "Set a group chat scenario": "Задать сценарий для группового чата",
+ "Restore collage avatar": "Восстановить аватар-коллаж",
"Create New Character": "Создать нового персонажа",
- "Import Character from File": "Внести персонажа из файла",
- "Import content from external URL": "Вставить содержимое из внешнего URL",
+ "Import Character from File": "Импортировать персонажа из файла",
+ "Import content from external URL": "Импортировать содержимое из внешнего URL",
"Create New Chat Group": "Создать новый групповой чат",
- "Characters sorting order": "Упорядовачивание порядка персонажа",
- "Add chat injection": "Добавить включение в чат",
- "Remove injection": "Убрать включение",
+ "Characters sorting order": "Порядок сортировки персонажей",
+ "Add chat injection": "Добавить инжект в чат",
+ "Remove injection": "Убрать инжект",
"Remove": "Убрать",
- "Select a World Info file for": "Выбрать файл для Информации Мира",
- "Primary Lorebook": "Основной Лорбук",
- "A selected World Info will be bound to this character as its own Lorebook.": "Информация Мира будет закреплена на персонажем как собственный Лорбук",
- "When generating an AI reply, it will be combined with the entries from a global World Info selector.": "Когда ИИ генерирует ответ, в него будет включены заметки из Информации Мира",
- "Exporting a character would also export the selected Lorebook file embedded in the JSON data.": "Скачивание этого персонажа так же будет включать в себя закрепленный за ним Сведения",
- "Additional Lorebooks": "Вспомогательные Сведения",
- "Associate one or more auxillary Lorebooks with this character.": "Закрепить этот или еще больше вспомогательных Сведений за этим персонажем",
- "NOTE: These choices are optional and won't be preserved on character export!": "ВНИМАНИЕ: Эти выборы необязательные и не будут сохранены при экспорте персонажа",
+ "Select a World Info file for": "Выбрать файл с миром для",
+ "Primary Lorebook": "Основного лорбука",
+ "A selected World Info will be bound to this character as its own Lorebook.": "Информация о мире будет привязана к персонажу как его собственный лорбук",
+ "When generating an AI reply, it will be combined with the entries from a global World Info selector.": "Когда ИИ генерирует ответ, он будет совмещён с записями из глобально выбранного мира",
+ "Exporting a character would also export the selected Lorebook file embedded in the JSON data.": "При экспорте персонажа вместе с ним также выгрузится выбранный лорбук в виде JSON",
+ "Additional Lorebooks": "Вспомогательные лорбуки",
+ "Associate one or more auxillary Lorebooks with this character.": "Привязать к этому персонажу один или больше вспомогательных лорбуков",
+ "NOTE: These choices are optional and won't be preserved on character export!": "ВНИМАНИЕ: эти выборы необязательные и не будут сохранены при экспорте персонажа!",
"Rename chat file": "Переименовать чат",
- "Export JSONL chat file": "Создать чат в форме JSONL",
- "Download chat as plain text document": "Скачать чат в формте .txt",
+ "Export JSONL chat file": "Экспортировать чат в формате JSONL",
+ "Download chat as plain text document": "Скачать чат в формате .txt",
"Delete chat file": "Удалить файл этого чата",
"Delete tag": "Удалить тэг",
"Translate message": "Перевести сообщение",
"Generate Image": "Создать изображение",
"Narrate": "Повествовать",
- "Prompt": "Промт",
+ "Prompt": "Промпт",
"Create Bookmark": "Создать закладку",
"Copy": "Скопировать",
"Open bookmark chat": "Открыть чат из закладки",
"Confirm": "Подтвердить",
- "Copy this message": "Скопировать это сообщение",
- "Delete this message": "Удалить это сообщение",
+ "Copy this message": "Скопировать сообщение",
+ "Delete this message": "Удалить сообщение",
"Move message up": "Переместить сообщение вверх",
"Move message down": "Переместить сообщение вниз",
"Enlarge": "Увеличить",
- "Temporarily disable automatic replies from this character": "Временно отключить сообщения от этого персонажа",
+ "Temporarily disable automatic replies from this character": "Временно отключить автоматические сообщения от этого персонажа",
"Enable automatic replies from this character": "Включить автоматическую отправку сообщения этого персонажа",
- "Trigger a message from this character": "Активировать сообщение этого персонажа",
+ "Trigger a message from this character": "Запросить сообщение от этого персонажа",
"Move up": "Переместить вверх",
"Move down": "Переместить вниз",
"View character card": "Посмотреть карточку персонажа",
@@ -816,95 +815,95 @@
"Add": "Добавить",
"Abort request": "Прекратить генерацию",
"Send a message": "Отправить сообщение",
- "Ask AI to write your message for you": "Попросить ИИ написать для вас сообщение.",
+ "Ask AI to write your message for you": "Попросить ИИ написать сообщение за вас",
"Continue the last message": "Продолжить текущее сообщение",
- "Bind user name to that avatar": "Закрепить имя за этой Персоной",
+ "Bind user name to that avatar": "Закрепить имя за этим аватаром",
"Select this as default persona for the new chats.": "Выберать эту Персону в качестве персоны по умолчанию для новых чатов.",
- "Change persona image": "Сменить аватар Персоны.",
- "Delete persona": "Удалить Персону.",
+ "Change persona image": "Сменить аватар персоны",
+ "Delete persona": "Удалить персону",
"Reduced Motion": "Сокращение анимаций",
- "Auto-select": "Авто выбор",
+ "Auto-select": "Авто-выбор",
"Automatically select a background based on the chat context": "Автоматический выбор фона в зависимости от контекста чата",
"Filter": "Фильтр",
- "Exclude message from prompts": "Исключить сообщение из подсказок",
+ "Exclude message from prompts": "Исключить сообщение из промпта",
"Include message in prompts": "Включить сообщение в подсказки",
- "Create checkpoint": "Создание контрольной точки",
- "Create Branch": "Создать Ветку",
+ "Create checkpoint": "Создать чекпоинт",
+ "Create Branch": "Создать ветку",
"Embed file or image": "Вставить файл или изображение",
- "UI Theme": "Тема пользовательского интерфейса",
+ "UI Theme": "Тема UI",
"This message is invisible for the AI": "Это сообщение невидимо для ИИ",
- "Sampler Priority": "Приоритет сэмплера",
+ "Sampler Priority": "Приоритет сэмплеров",
"Ooba only. Determines the order of samplers.": "Только Ooba. Определяет порядок сэмплеров.",
"Load default order": "Загрузить стандартный порядок",
"Max Tokens Second": "Максимальное количество токенов в секунду",
"CFG": "CFG",
"No items": "Нет элементов",
- "Extras API key (optional)": "Дополнительный ключ API (необязательно)",
- "Notify on extension updates": "Уведомлять о обновлениях расширения",
- "Toggle character grid view": "Переключить вид сетки персонажа",
+ "Extras API key (optional)": "Ключ от Extras API (необязательно)",
+ "Notify on extension updates": "Уведомлять об обновлениях расширений",
+ "Toggle character grid view": "Изменить вид грида персонажей",
"Bulk edit characters": "Массовое редактирование персонажей",
"Bulk delete characters": "Массовое удаление персонажей",
- "Favorite characters to add them to HotSwaps": "Добавить избранных персонажей в HotSwaps",
- "Underlined Text": "Подчеркнутый текст",
+ "Favorite characters to add them to HotSwaps": "Чтобы включить персонажа в HotSwaps, добавьте его в Избранное",
+ "Underlined Text": "Подчёркнутый",
"Token Probabilities": "Вероятности токенов",
"Close chat": "Закрыть чат",
"Manage chat files": "Управление файлами чата",
"Import Extension From Git Repo": "Импортировать расширение из Git Repository",
"Install extension": "Установить расширение",
"Manage extensions": "Управление расширениями",
- "Tokens persona description": "Описание токенов",
+ "Tokens persona description": "Токенов",
"Most tokens": "Больше всего токенов",
"Least tokens": "Меньше всего токенов",
"Random": "Случайно",
"Skip Example Dialogues Formatting": "Пропустить форматирование примеров диалогов",
"Import a theme file": "Импортировать файл темы",
"Export a theme file": "Экспортировать файл темы",
- "Unlocked Context Size": "Размер разблокированного контекста",
- "Display the response bit by bit as it is generated.": "Показывать ответ по битам по мере его генерации.",
- "When this is off, responses will be displayed all at once when they are complete.": "Когда это отключено, ответы будут отображаться сразу после завершения.",
- "Quick Prompts Edit": "Быстрое редактирование подсказок",
- "Enable OpenAI completion streaming": "Включить потоковое завершение OpenAI",
+ "Unlocked Context Size": "Неограниченный размер контекста",
+ "Display the response bit by bit as it is generated.": "Выводить текст последовательно по мере его генерации.",
+ "When this is off, responses will be displayed all at once when they are complete.": "Если параметр выключен, ответы будут отображаться сразу целиком, и только после полного завершения генерации.",
+ "Quick Prompts Edit": "Быстрое редактирование промптов",
+ "Enable OpenAI completion streaming": "Включить стриминг OpenAI",
"Main": "Главное",
- "Utility Prompts": "Подсказки утилиты",
+ "Utility Prompts": "Служебные промпты",
"Add character names": "Добавить имена персонажей",
"Send names in the message objects. Helps the model to associate messages with characters.": "Отправить имена в объектах сообщений. Помогает модели ассоциировать сообщения с персонажами.",
- "Continue prefill": "Продолжить предварительное заполнение",
+ "Continue prefill": "Префилл для продолжения",
"Continue sends the last message as assistant role instead of system message with instruction.": "Продолжение отправляет последнее сообщение в роли ассистента, а не системное сообщение с инструкцией.",
- "Squash system messages": "Объединять системные сообщения",
+ "Squash system messages": "Склеивать сообщения системыы",
"Combines consecutive system messages into one (excluding example dialogues). May improve coherence for some models.": "Объединяет последовательные системные сообщения в одно (за исключением примеров диалогов). Может улучшить согласованность для некоторых моделей.",
"Send inline images": "Отправлять встроенные изображения",
- "Assistant Prefill": "Предварительное заполнение ассистента",
+ "Assistant Prefill": "Префилл от ассистента",
"Start Claude's answer with...": "Начать ответ Клода с...",
- "Use system prompt (Claude 2.1+ only)": "Использовать системную подсказку (только Claude 2.1+)",
- "Send the system prompt for supported models. If disabled, the user message is added to the beginning of the prompt.": "Отправлять системную подсказку для поддерживаемых моделей. Если отключено, сообщение пользователя добавляется в начало подсказки.",
- "Prompts": "Подсказки",
+ "Use system prompt (Claude 2.1+ only)": "Использовать системный промпт (только Claude 2.1+)",
+ "Send the system prompt for supported models. If disabled, the user message is added to the beginning of the prompt.": "Отправлять системный промпт для поддерживаемых моделей. Если отключено, сообщение пользователя добавляется в начало промпта.",
+ "Prompts": "Промпты",
"Total Tokens:": "Всего токенов:",
- "Insert prompt": "Вставить подсказку",
- "Delete prompt": "Удалить подсказку",
- "Import a prompt list": "Импортировать список подсказок",
- "Export this prompt list": "Экспортировать этот список подсказок",
+ "Insert prompt": "Вставить промпт",
+ "Delete prompt": "Удалить промпт",
+ "Import a prompt list": "Импортировать список промптов",
+ "Export this prompt list": "Экспортировать этот список промпт",
"Reset current character": "Сбросить текущего персонажа",
- "New prompt": "Новая подсказка",
- "Tokens": "Токены",
- "Want to update?": "Хотите обновить SillyTavern?",
+ "New prompt": "Новый промпт",
+ "Tokens": "токенов",
+ "Want to update?": "Хотите обновиться?",
"How to start chatting?": "Как начать общение?",
- "Click": "Нажмите ",
+ "Click": "Нажмите",
"and select a": " и выберите",
"Chat API": "API чата",
- "and pick a character": " и выберите персонажа",
+ "and pick a character": "и выберите персонажа",
"in the chat bar": " в поле чата",
"Confused or lost?": "Запутались или потерялись?",
"click these icons!": "нажмите на эти значки!",
"SillyTavern Documentation Site": "Сайт документации SillyTavern",
- "Extras Installation Guide": "Руководство по установке дополнительных возможностей",
- "Still have questions?": "Есть еще вопросы?",
- "Join the SillyTavern Discord": "Присоединяйтесь к SillyTavern Discord",
- "Post a GitHub issue": "Опубликуйте проблему на GitHub",
+ "Extras Installation Guide": "Руководство по установке Extras",
+ "Still have questions?": "Остались вопросы?",
+ "Join the SillyTavern Discord": "Заходите на сервер SillyTavern в Discord",
+ "Post a GitHub issue": "Опубликуйте GitHub issue",
"Contact the developers": "Свяжитесь с разработчиками",
- "Nucleus Sampling": "Выборка ядра",
- "Typical P": "Типичное P",
- "Top K Sampling": "Выборка лучших K",
- "Top A Sampling": "Выборка лучших A",
+ "Nucleus Sampling": "Nucleus Sampling",
+ "Typical P": "Typical P",
+ "Top K Sampling": "Top K",
+ "Top A Sampling": "Top A",
"Off": "Выключено",
"Very light": "Очень легкий",
"Light": "Легкий",
@@ -914,6 +913,72 @@
"Eta cutoff is the main parameter of the special Eta Sampling technique.
In units of 1e-4; a reasonable value is 3.
Set to 0 to disable.
See the paper Truncation Sampling as Language Model Desmoothing by Hewitt et al. (2022) for details.": "Отсечение эпсилон - основной параметр специальной техники выборки эпсилон.
В единицах 1e-4; разумное значение - 3.
Установите в 0, чтобы отключить.
См. статью Truncation Sampling as Language Model Desmoothing от Хьюитт и др. (2022) для получения подробной информации.",
"Learn how to contribute your idle GPU cycles to the Horde": "Узнайте, как внести свой вклад в свои свободные GPU-циклы в орду",
"Use the appropriate tokenizer for Google models via their API. Slower prompt processing, but offers much more accurate token counting.": "Используйте соответствующий токенизатор для моделей Google через их API. Медленная обработка подсказок, но предлагает намного более точный подсчет токенов.",
- "Load koboldcpp order": "Загрузить порядок koboldcpp",
- "Use Google Tokenizer": "Использовать токенизатор Google"
-}
\ No newline at end of file
+ "Load koboldcpp order": "Загрузить порядок из koboldcpp",
+ "Use Google Tokenizer": "Использовать токенизатор Google",
+ "koboldcpp API key (optional)": "Ключ от API koboldcpp (необязательно)",
+ "Reverse Proxy": "Прокси",
+ "Use Proxy password field instead. This input will be ignored.": "Используйте поле \"Пароль от прокси\". Значение в этом окошке игнорируется",
+ "Proxy Password": "Пароль от прокси",
+ "Will be used as a password for the proxy instead of API key.": "Будет использован в качестве пароля от прокси вместо ключа от API",
+ "Proxy Presets": "Пресеты для прокси",
+ "Saved addresses and passwords.": "Сохранённые адреса и пароли.",
+ "Save Proxy": "Сохранить прокси",
+ "Delete Proxy": "Удалить прокси",
+ "Proxy Name": "Название прокси",
+ "This will show up as your saved preset.": "Будет отображено в вашем списке пресетов.",
+ "Proxy Server URL": "Адрес прокси-сервера",
+ "MistralAI Model": "Модель MistralAI",
+ "MistralAI API Key": "Ключ от API MistralAI",
+ "MakerSuite API Key": "Ключ от API MakerSuite",
+ "Google Model": "Модель Google",
+ "Cohere API Key": "Ключ от API Cohere",
+ "Cohere Model": "Модель Cohere",
+ "Model Order": "Сортировка моделей OpenRouter",
+ "Alphabetically": "По алфавиту",
+ "Price": "По цене (наиболее низкая)",
+ "Context Size": "По размеру контекста",
+ "Group by vendors": "Сгруппировать по владельцу",
+ "Group by vendors Description": "Модели от OpenAI попадут в одну группу, от Anthropic - в другую, и т.д. Можно комбинировать с сортировкой.",
+ "LEGACY": "УСТАР.",
+ "Force Instruct Mode formatting": "Включить форматирование для Instruct-режима",
+ "Force Instruct Mode formatting Description": "Если эта опция включена при активном режиме Instruct, то SillyTavern преобразует промпт в соответствие с настройками расширенного форматирования (кроме системного промпта для instruct). Если опция выключена, промпт форматируется самим OpenRouter.",
+ "Allow Jailbreak": "Разрешить джейлбрейк",
+ "System Prompt Wrapping": "Обрамление для системного промпта",
+ "System Prompt Prefix": "Префикс системного промпта",
+ "System Prompt Suffix": "Постфикс системного промпта",
+ "Chat Messages Wrapping": "Обрамление для сообщений в чате",
+ "User Message Prefix": "Префикс сообщения пользователя",
+ "User Message Suffix": "Постфикс сообщения пользователя",
+ "Assistant Message Prefix": "Префикс сообщения ассистента",
+ "Assistant Message Suffix": "Постфикс сообщения ассистента",
+ "System Message Prefix": "Префикс сообщения системы",
+ "System Message Suffix": "Постфикс сообщения системы",
+ "System same as User": "Для системы то же самое, что и для пользователя",
+ "Misc. Sequences": "Прочие строки",
+ "First Assistant Prefix": "Первый префикс ассистента",
+ "Last Assistant Prefix": "Последний префикс ассистента",
+ "System Instruction Prefix": "Префикс системной инструкции",
+ "User Filler Message": "Принудительное сообщение пользователя",
+ "Permanent": "перманентных",
+ "Alt. Greetings": "Др. варианты",
+ "Smooth Streaming": "Плавный стриминг",
+ "Save checkpoint": "Сохранить чекпоинт",
+ "Min Activations": "Мин. число активаций",
+ "Scan chronologically until reached min entries or token budget.": "Сканировать в хронологической последовательности, пока не будет достигнуто мин. число вхождений или не израсходуется бюджет токенов.",
+ "Max Depth": "Макс. глубина",
+ "(0 = unlimited, use budget)": "(0 = безграничная, использовать бюджет)",
+ "Ext. Media": "Внешн. медиа",
+ "Multiple swipes per generation": "Несколько свайпов на генерацию",
+ "Set to get deterministic results. Use -1 for random seed.": "Используется для получения предсказуемого результата. Введите -1 для случайного зерна",
+ "Most tokens have a leading space.": "У большинства токенов в начале пробел.",
+ "Prompts": "Промпты",
+ "Text or token ids": "Текст или [идентификаторы токенов]",
+ "World Info Format Template": "Шаблон форматирования информации о мире",
+ "Wraps activated World Info entries before inserting into the prompt.": "Дополняет информацию об активном на данный момент мире перед её отправкой в промпт.",
+ "Doesn't work? Try adding": "Не работает? Попробуйте добавить в конце",
+ "at the end!": "!",
+ "Authorize": "Авторизоваться",
+ "No persona description": "[Нет описания]",
+ "Not connected to API!": "Нет соединения с API!",
+ "Type a message, or /? for help": "Введите сообщение, или /? для получения справки по командам"
+}
diff --git a/public/locales/zh-cn.json b/public/locales/zh-cn.json
index ce1d8fa65..d48da734d 100644
--- a/public/locales/zh-cn.json
+++ b/public/locales/zh-cn.json
@@ -4,122 +4,123 @@
"guikoboldaisettings": "KoboldAI 用户界面设置",
"novelaipreserts": "NovelAI 预设",
"default": "默认",
- "openaipresets": "OpenAI 预设",
+ "openaipresets": "对话补全预设",
"text gen webio(ooba) presets": "WebUI(ooba) 预设",
"response legth(tokens)": "响应长度(Token)",
"select": "选择",
"context size(tokens)": "上下文长度(Token)",
"unlocked": "已解锁",
- "Only select models support context sizes greater than 4096 tokens. Increase only if you know what you're doing.": "仅选择的模型支持大于 4096 个Token的上下文大小。只有在知道自己在做什么的情况下才增加。",
+ "Only select models support context sizes greater than 4096 tokens. Increase only if you know what you're doing.": "只有特定的模型支持超过4096 Tokens的上下文长度。仅在你清楚自己在做什么的情况下再增加这个值。",
"rep.pen": "重复惩罚",
- "WI Entry Status:🔵 Constant🟢 Normal❌ Disabled": "WI 输入状态:\n🔵 恒定\n🟢 正常\n❌ 禁用",
+ "WI Entry Status:🔵 Constant🟢 Normal❌ Disabled": "条目输入状态:\n🔵 常开\n🟢 触发\n❌ 禁用",
"rep.pen range": "重复惩罚范围",
"Temperature controls the randomness in token selection": "温度控制Token选择中的随机性:\n- 低温(<1.0)导致更可预测的文本,优先选择高概率的Token。\n- 高温(>1.0)鼓励创造性和输出的多样性,更多地选择低概率的Token。\n将值设置为 1.0 以使用原始概率。",
"temperature": "温度",
- "Top K sets a maximum amount of top tokens that can be chosen from": "Top K 设置可以从中选择的顶级Token的最大数量。",
- "Top P (a.k.a. nucleus sampling)": "Top P(又称核心采样)将所有必需的顶级Token合并到一个特定百分比中。\n换句话说,如果前两个Token代表 25%,而 Top-P 为 0.50,则只考虑这两个Token。\n将值设置为 1.0 以禁用。",
- "Typical P Sampling prioritizes tokens based on their deviation from the average entropy of the set": "典型的 P 采样根据它们与集合平均熵的偏差对Token进行优先排序。\n保留概率累积接近指定阈值(例如 0.5)的Token,区分包含平均信息的那些。\n将值设置为 1.0 以禁用。",
- "Min P sets a base minimum probability": "Min P 设置基本最小概率。它根据顶级Token的概率进行优化。\n如果顶级Token的概率为 80%,而 Min P 为 0.1,则只考虑概率高于 8% 的Token。\n将值设置为 0 以禁用。",
- "Top A sets a threshold for token selection based on the square of the highest token probability": "Top A 根据最高Token概率的平方设置Token选择的阈值。\n如果 Top A 为 0.2,最高Token概率为 50%,则排除概率低于 5% 的Token(0.2 * 0.5^2)。\n将值设置为 0 以禁用。",
- "Tail-Free Sampling (TFS)": "无尾采样(TFS)查找分布中概率较低的尾部Token,\n 通过分析Token概率的变化率以及二阶导数。 Token保留到阈值(例如 0.3),取决于统一的二阶导数。\n值越接近 0,被拒绝的Token数量就越多。将值设置为 1.0 以禁用。",
- "Epsilon cutoff sets a probability floor below which tokens are excluded from being sampled": "ε 截止设置了一个概率下限,低于该下限的Token将被排除在样本之外。\n以 1e-4 单位;合适的值为 3。将其设置为 0 以禁用。",
- "Scale Temperature dynamically per token, based on the variation of probabilities": "根据概率的变化动态地按Token缩放温度。",
+ "Temperature": "温度",
+ "Top K sets a maximum amount of top tokens that can be chosen from": "Top K 限定了可供选择的最高概率 Token 的最大数目。",
+ "Top P (a.k.a. nucleus sampling)": "Top P(又称 nucleus sampling)累加所有需要达到目标百分比的最高概率 Token 。\n例如,如果前两个最高概率标记都是 25%,并且 Top P 设置为 0.50,那么只有这前两个 Token 会被考虑。\n如果将 Top P 设置为 1.0,则表示禁用该功能。",
+ "Typical P Sampling prioritizes tokens based on their deviation from the average entropy of the set": "典型的 P 采样根据令牌与集合平均熵的偏差来确定令牌的优先级。\n它保留累积概率接近预定义阈值(例如0.5)的令牌,强调那些具有平均信息内容的令牌。\n设置为1.0可禁用该功能。",
+ "Min P sets a base minimum probability": "最小概率(Min P)设置了一个基本的最小概率。这个概率会根据概率最高的令牌(top token)的概率进行缩放。\n例如,如果概率最高的令牌的概率为80%,且最小概率设置为0.1,则只有概率高于8%的令牌会被考虑。\n将最小概率设置为0可以禁用该功能。",
+ "Top A sets a threshold for token selection based on the square of the highest token probability": "Top A 根据最高令牌概率的平方设置令牌选择的阈值。\n例如,如果 Top-A 值为0.2,且概率最高的令牌的概率为50%,则概率低于5%(0.2 × 0.5^2)的令牌会被排除在外。\n将 Top A 设置为0可以禁用该功能。",
+ "Tail-Free Sampling (TFS)": "无尾采样(TFS)查找分布中概率较低的尾部Token,\n 通过分析Token概率的变化率以及二阶导数。Token保留到阈值(例如 0.3),取决于统一的二阶导数。\n值越接近 0,被拒绝的Token数量就越多。将值设置为 1.0 以禁用。",
+ "Epsilon cutoff sets a probability floor below which tokens are excluded from being sampled": "Epsilon 截止设置了一个概率下限,低于该下限的Token将被排除在样本之外。\n以 1e-4 单位;合适的值为 3。将其设置为 0 以禁用。",
+ "Scale Temperature dynamically per token, based on the variation of probabilities": "根据概率的变化,动态地调整每个令牌的温度(Temperature)",
"Minimum Temp": "最小温度",
"Maximum Temp": "最大温度",
"Exponent": "指数",
"Mirostat Mode": "Mirostat 模式",
"Mirostat Tau": "Mirostat Tau",
"Mirostat Eta": "Mirostat Eta",
- "Variability parameter for Mirostat outputs": "Mirostat 输出的变异性参数。",
- "Learning rate of Mirostat": "Mirostat 的学习率。",
- "Strength of the Contrastive Search regularization term. Set to 0 to disable CS": "对比搜索正则化项的强度。 将值设置为 0 以禁用 CS。",
- "Temperature Last": "最后温度",
- "Use the temperature sampler last": "最后使用温度采样器。 通常是合理的。\n当启用时:首先进行潜在Token的选择,然后应用温度来修正它们的相对概率(技术上是对数似然)。\n当禁用时:首先应用温度来修正所有Token的相对概率,然后从中选择潜在Token。\n禁用最后的温度。",
- "LLaMA / Mistral / Yi models only": "仅限 LLaMA / Mistral / Yi 模型。 确保首先选择适当的分析师。\n结果中不应出现串。\n每行一个串。 文本或 [Token标识符]。\n许多Token以空格开头。 如果不确定,请使用Token计数器。",
+ "Variability parameter for Mirostat outputs": "Mirostat 输出的可变性参数",
+ "Learning rate of Mirostat": "Mirostat 的学习率",
+ "Strength of the Contrastive Search regularization term. Set to 0 to disable CS": "对比搜索(Contrastive Search)正则化项的强度。设置为 0 可禁用对比搜索。",
+ "Temperature Last": "温度采样器后置",
+ "Use the temperature sampler last": "最后再使用温度采样器。这几乎总是明智的做法。\n当启用时:首先对一组合理的令牌进行采样,然后应用温度来调整它们的相对概率(技术上称为对数概率)。\n当禁用时:首先应用温度来调整所有令牌的相对概率,然后从中采样出合理的令牌。\n禁用会提高分布尾部的概率,这往往会增加得到不连贯响应的几率。",
+ "LLaMA / Mistral / Yi models only": "仅适用于 LLaMA / Mistral / Yi 模型。请确保首先选择适当的分词器。\n每行输入一个你不希望出现在输出中的序列,可以是文本或 [Token ID]。\n大多数Token前面都有一个空格。如果不确定,请使用Token计数器。",
"Example: some text [42, 69, 1337]": "例如:\n一些文本\n[42, 69, 1337]",
- "Classifier Free Guidance. More helpful tip coming soon": "免费的分类器指导。 更多有用的提示词即将推出。",
+ "Classifier Free Guidance. More helpful tip coming soon": "免费的分类器指导。更多有用的提示即将推出。",
"Scale": "比例",
"GBNF Grammar": "GBNF 语法",
"Usage Stats": "使用统计",
"Click for stats!": "点击查看统计!",
"Backup": "备份",
- "Backup your personas to a file": "将您的人设备份到文件中",
+ "Backup your personas to a file": "将我的角色备份到文件中",
"Restore": "恢复",
- "Restore your personas from a file": "从文件中恢复您的人设",
+ "Restore your personas from a file": "从文件中恢复我的角色",
"Type in the desired custom grammar": "输入所需的自定义语法",
"Encoder Rep. Pen.": "编码器重复惩罚",
"Smoothing Factor": "平滑系数",
- "No Repeat Ngram Size": "无重复 n-gram 大小",
+ "No Repeat Ngram Size": "无重复n-gram大小",
"Min Length": "最小长度",
"OpenAI Reverse Proxy": "OpenAI 反向代理",
- "Alternative server URL (leave empty to use the default value).": "备用服务器 URL(留空以使用默认值)。",
- "Remove your real OAI API Key from the API panel BEFORE typing anything into this box": "在键入任何内容之前,从 API 面板中删除您的真实 OAI API 密钥",
- "We cannot provide support for problems encountered while using an unofficial OpenAI proxy": "我们无法为使用非官方 OpenAI 代理时遇到的问题提供支持",
+ "Alternative server URL (leave empty to use the default value).": "备用服务器URL(留空以使用默认值)。",
+ "Remove your real OAI API Key from the API panel BEFORE typing anything into this box": "在键入任何内容之前,从API面板中删除您的真实OpenAI API密钥",
+ "We cannot provide support for problems encountered while using an unofficial OpenAI proxy": "我们无法为使用非官方OpenAI代理时遇到的问题提供支持",
"Legacy Streaming Processing": "传统流处理",
- "Enable this if the streaming doesn't work with your proxy": "如果流媒体与您的代理不兼容,请启用此选项",
+ "Enable this if the streaming doesn't work with your proxy": "如果流式传输与您的代理不兼容,请启用此选项",
"Context Size (tokens)": "上下文长度(Token)",
"Max Response Length (tokens)": "最大回复长度(Token)",
- "Frequency Penalty": "Frequency Penalty 频率惩罚",
- "Presence Penalty": "Presence Penalty 存在惩罚",
- "Top-p": "Top-p",
+ "Frequency Penalty": "频率惩罚",
+ "Presence Penalty": "存在惩罚",
+ "Top-p": "Top P",
"Display bot response text chunks as they are generated": "生成时显示机器人响应文本片段",
"Top A": "Top A",
- "Typical Sampling": "Typical Sampling 典型采样",
- "Tail Free Sampling": "Tail Free Sampling 无尾采样",
- "Rep. Pen. Slope": "Rep. Pen. Slope 重复惩罚斜率",
- "Single-line mode": "Single-line 单行模式",
+ "Typical Sampling": "典型采样",
+ "Tail Free Sampling": "无尾采样",
+ "Rep. Pen. Slope": "重复惩罚斜率",
+ "Single-line mode": "单行模式",
"Top K": "Top K",
"Top P": "Top P",
"Do Sample": "进行采样",
- "Add BOS Token": "添加 BOS Token",
- "Add the bos_token to the beginning of prompts. Disabling this can make the replies more creative": "在提示词的开头添加 bos_token。 禁用此功能可以使回复更具创意",
- "Ban EOS Token": "禁止 EOS Token",
- "Ban the eos_token. This forces the model to never end the generation prematurely": "禁止 eos_token。 这将强制模型永远不会提前结束生成",
+ "Add BOS Token": "添加BOS Token",
+ "Add the bos_token to the beginning of prompts. Disabling this can make the replies more creative": "在提示词的开头添加BOS Token。禁用此功能可以使回复更具创意",
+ "Ban EOS Token": "禁止EOS Token",
+ "Ban the eos_token. This forces the model to never end the generation prematurely": "禁止EOS Token。这将强制模型永远不会提前结束生成",
"Skip Special Tokens": "跳过特殊Token",
"Beam search": "束搜索",
"Number of Beams": "束数量",
"Length Penalty": "长度惩罚",
"Early Stopping": "提前停止",
"Contrastive search": "对比搜索",
- "Penalty Alpha": "惩罚 Alpha",
+ "Penalty Alpha": "惩罚Alpha",
"Seed": "Seed 种子",
- "Epsilon Cutoff": "Epsilon Cutoff",
- "Eta Cutoff": "Eta Cutoff",
+ "Epsilon Cutoff": "Epsilon截断",
+ "Eta Cutoff": "Eta截断",
"Negative Prompt": "负面提示词",
"Mirostat (mode=1 is only for llama.cpp)": "Mirostat(mode=1 仅用于 llama.cpp)",
- "Mirostat is a thermostat for output perplexity": "Mirostat 是输出困惑度的恒温器",
- "Add text here that would make the AI generate things you don't want in your outputs.": "在这里添加文本,使 AI 生成您不希望在输出中出现的内容。",
+ "Mirostat is a thermostat for output perplexity": "Mirostat是控制输出困惑度的恒温器",
+ "Add text here that would make the AI generate things you don't want in your outputs.": "在此处添加可能导致AI生成你不想要的内容的文本。",
"Phrase Repetition Penalty": "短语重复惩罚",
"Preamble": "序文",
"Use style tags to modify the writing style of the output.": "使用样式标签修改输出的写作风格。",
"Banned Tokens": "禁用的Token",
- "Sequences you don't want to appear in the output. One per line.": "您不希望出现在输出中的序列。 每行一个。",
+ "Sequences you don't want to appear in the output. One per line.": "您不希望出现在输出中的序列。每行一个。",
"AI Module": "AI 模块",
"Changes the style of the generated text.": "更改生成文本的样式。",
- "Used if CFG Scale is unset globally, per chat or character": "如果 CFG Scal在全局未设置、它将作用于每个聊天或每个角色",
- "Inserts jailbreak as a last system message.": "将 jailbreak 插入为最后一个系统消息。",
- "This tells the AI to ignore its usual content restrictions.": "这告诉 AI 忽略其通常的内容限制。",
- "NSFW Encouraged": "鼓励 NSFW",
- "Tell the AI that NSFW is allowed.": "告诉 AI NSFW 是允许的。",
- "NSFW Prioritized": "优先考虑 NSFW",
- "NSFW prompt text goes first in the prompt to emphasize its effect.": "NSFW 提示词文本首先出现在提示词中以强调其效果。",
- "Streaming": "Streaming 流式传输",
- "Dynamic Temperature": "Dynamic Temperature 动态温度",
+ "Used if CFG Scale is unset globally, per chat or character": "如果CFG Scale未在全局设置,此项将作用于每个聊天或角色",
+ "Inserts jailbreak as a last system message.": "将jailbreak插入为最后一条系统消息。",
+ "This tells the AI to ignore its usual content restrictions.": "这告诉AI忽略其通常的内容限制。",
+ "NSFW Encouraged": "鼓励NSFW",
+ "Tell the AI that NSFW is allowed.": "告诉AI NSFW是允许的。",
+ "NSFW Prioritized": "优先NSFW",
+ "NSFW prompt text goes first in the prompt to emphasize its effect.": "NSFW提示词文本首先出现在提示词中以强调其效果。",
+ "Streaming": "流式传输",
+ "Dynamic Temperature": "动态温度",
"Restore current preset": "恢复当前预设",
- "Neutralize Samplers": "Neutralize Samplers 中和采样器",
+ "Neutralize Samplers": "中和采样器",
"Text Completion presets": "文本补全预设",
"Documentation on sampling parameters": "有关采样参数的文档",
"Set all samplers to their neutral/disabled state.": "将所有采样器设置为中性/禁用状态。",
- "Only enable this if your model supports context sizes greater than 4096 tokens": "仅在您的模型支持大于4096个标记的上下文大小时启用此选项",
- "Display the response bit by bit as it is generated": "逐位显示生成的响应",
+ "Only enable this if your model supports context sizes greater than 4096 tokens": "仅在您的模型支持大于4096 Tokens的上下文长度时启用此选项",
+ "Display the response bit by bit as it is generated": "随着响应的生成,逐步显示结果",
"Generate only one line per request (KoboldAI only, ignored by KoboldCpp).": "每个请求仅生成一行(仅限KoboldAI,KoboldCpp不支持)。",
- "Ban the End-of-Sequence (EOS) token (with KoboldCpp, and possibly also other tokens with KoboldAI).": "禁止序列末尾(EOS)标记(与KoboldCpp一起,可能还有其他与KoboldAI的标记)。",
- "Good for story writing, but should not be used for chat and instruct mode.": "适用于写故事,但不应用于聊天和指导模式。",
+ "Ban the End-of-Sequence (EOS) token (with KoboldCpp, and possibly also other tokens with KoboldAI).": "禁用序列结束(EOS)Token(使用KoboldCpp,可能还包括KoboldAI中的其他Token。",
+ "Good for story writing, but should not be used for chat and instruct mode.": "适合用于故事写作,但不应用于聊天和指令模式。",
"Enhance Definitions": "增强定义",
- "Use OAI knowledge base to enhance definitions for public figures and known fictional characters": "使用OAI知识库来增强公众人物和已知虚构角色的定义",
- "Wrap in Quotes": "用引号括起来",
- "Wrap entire user message in quotes before sending.": "在发送之前用引号括起整个用户消息。",
- "Leave off if you use quotes manually for speech.": "如果您手动使用引号进行讲话,请省略。",
+ "Use OAI knowledge base to enhance definitions for public figures and known fictional characters": "使用OpenAI知识库来增强对公众人物和已知虚构角色的定义",
+ "Wrap in Quotes": "用引号包裹",
+ "Wrap entire user message in quotes before sending.": "在发送之前用引号包裹整个用户消息。",
+ "Leave off if you use quotes manually for speech.": "如果您手动使用引号包裹对话,请忽略此项。",
"Main prompt": "主提示词",
"The main prompt used to set the model behavior": "用于设置模型行为的主提示词",
"NSFW prompt": "NSFW提示词",
@@ -128,26 +129,26 @@
"Prompt that is used when the Jailbreak toggle is on": "在越狱开关打开时使用的提示词",
"Impersonation prompt": "冒名顶替提示词",
"Prompt that is used for Impersonation function": "用于冒名顶替功能的提示词",
- "Logit Bias": "对数偏差",
+ "Logit Bias": "对数偏置",
"Helps to ban or reenforce the usage of certain words": "有助于禁止或加强某些单词的使用",
"View / Edit bias preset": "查看/编辑偏置预设",
"Add bias entry": "添加偏置条目",
- "Jailbreak activation message": "越狱激活消息",
+ "Jailbreak activation message": "越狱启用消息",
"Message to send when auto-jailbreak is on.": "自动越狱时发送的消息。",
"Jailbreak confirmation reply": "越狱确认回复",
"Bot must send this back to confirm jailbreak": "机器人必须发送此内容以确认越狱",
- "Character Note": "角色注记",
+ "Character Note": "角色注释",
"Influences bot behavior in its responses": "影响机器人在其响应中的行为",
"Connect": "连接",
"Test Message": "发送测试消息",
"API": "API",
"KoboldAI": "KoboldAI",
- "Use Horde": "使用部落",
- "API url": "API地址",
- "PygmalionAI/aphrodite-engine": "PygmalionAI/aphrodite-engine(用于OpenAI API的包装器)",
- "Register a Horde account for faster queue times": "注册Horde部落帐户以加快排队时间",
- "Learn how to contribute your idle GPU cycles to the Hord": "了解如何将闲置的GPU周期贡献给部落",
- "Adjust context size to worker capabilities": "根据工作人员的能力调整上下文大小",
+ "Use Horde": "使用 Horde",
+ "API url": "API URL",
+ "PygmalionAI/aphrodite-engine": "PygmalionAI/aphrodite-engine (OpenAI API wrapper 模式)",
+ "Register a Horde account for faster queue times": "注册Horde帐户以减少排队时间",
+ "Learn how to contribute your idle GPU cycles to the Hord": "了解如何将闲置的GPU算力贡献给Horde",
+ "Adjust context size to worker capabilities": "根据工作人员的能力调整上下文长度",
"Adjust response length to worker capabilities": "根据工作人员的能力调整响应长度",
"API key": "API密钥",
"Tabby API key": "Tabby API密钥",
@@ -168,7 +169,7 @@
"For privacy reasons": "出于隐私考虑",
"Models": "模型",
"Hold Control / Command key to select multiple models.": "按住Control / Command键选择多个模型。",
- "Horde models not loaded": "部落模型未加载",
+ "Horde models not loaded": "Horde模型未加载",
"Not connected...": "未连接...",
"Novel API key": "Novel AI API密钥",
"Follow": "跟随",
@@ -181,16 +182,16 @@
"Make sure you run it with": "确保您用以下方式运行它",
"flag": "标志",
"API key (optional)": "API密钥(可选)",
- "Server url": "服务器地址",
+ "Server url": "服务器URL",
"Custom model (optional)": "自定义模型(可选)",
"Bypass API status check": "绕过API状态检查",
"Mancer AI": "Mancer AI",
"Use API key (Only required for Mancer)": "使用API密钥(仅Mancer需要)",
- "Blocking API url": "阻止API地址",
+ "Blocking API url": "阻止API URL",
"Example: 127.0.0.1:5000": "示例:127.0.0.1:5000",
"Legacy API (pre-OAI, no streaming)": "传统API(OAI之前,无流式传输)",
"Bypass status check": "绕过状态检查",
- "Streaming API url": "流式API地址",
+ "Streaming API url": "流式传输API地址",
"Example: ws://127.0.0.1:5005/api/v1/stream": "示例:ws://127.0.0.1:5005/api/v1/stream",
"Mancer API key": "Mancer API密钥",
"Example: https://neuro.mancer.tech/webui/MODEL/api": "示例:https://neuro.mancer.tech/webui/MODEL/api",
@@ -209,36 +210,36 @@
"View API Usage Metrics": "查看API使用指标",
"Show External models (provided by API)": "显示外部模型(由API提供)",
"Bot": "机器人",
- "Allow fallback routes": "允许后备路由",
+ "Allow fallback routes": "允许路由回退",
"Allow fallback routes Description": "如果所选模型无法响应您的请求,则自动选择备用模型。",
"OpenRouter API Key": "OpenRouter API密钥",
"Connect to the API": "连接到API",
"OpenRouter Model": "OpenRouter模型",
- "View Remaining Credits": "查看剩余信用额",
+ "View Remaining Credits": "查看剩余额度",
"Click Authorize below or get the key from": "点击下方授权或从以下位置获取密钥",
"Auto-connect to Last Server": "自动连接到上次的服务器",
"View hidden API keys": "查看隐藏的API密钥",
- "Advanced Formatting": "高级格式设置",
+ "Advanced Formatting": "高级格式化设置",
"Context Template": "上下文模板",
"AutoFormat Overrides": "自动格式覆盖",
- "Disable description formatting": "禁用描述格式",
- "Disable personality formatting": "禁用人格格式",
- "Disable scenario formatting": "禁用情景格式",
- "Disable example chats formatting": "禁用示例聊天格式",
- "Disable chat start formatting": "禁用聊天开始格式",
+ "Disable description formatting": "禁用描述格式化",
+ "Disable personality formatting": "禁用人格格式化",
+ "Disable scenario formatting": "禁用情景格式化",
+ "Disable example chats formatting": "禁用示例聊天格式化",
+ "Disable chat start formatting": "禁用聊天开始格式化",
"Custom Chat Separator": "自定义聊天分隔符",
- "Replace Macro in Custom Stopping Strings": "自定义停止字符串替换宏",
+ "Replace Macro in Custom Stopping Strings": "在自定义停止字符串中替换宏",
"Strip Example Messages from Prompt": "从提示词中删除示例消息",
- "Story String": "Story String 故事字符串",
+ "Story String": "故事字符串",
"Example Separator": "示例分隔符",
"Chat Start": "聊天开始",
- "Activation Regex": "激活正则表达式",
- "Instruct Mode": "指导模式",
- "Wrap Sequences with Newline": "用换行符包装序列",
+ "Activation Regex": "启用正则表达式",
+ "Instruct Mode": "指令模式",
+ "Wrap Sequences with Newline": "用换行符包裹序列",
"Include Names": "包括名称",
- "Force for Groups and Personas": "强制适配群组和人物",
+ "Force for Groups and Personas": "强制适用于群聊和我的角色",
"System Prompt": "系统提示词",
- "Instruct Mode Sequences": "Instruct Mode Sequences 指导模式序列",
+ "Instruct Mode Sequences": "指令模式序列",
"Input Sequence": "输入序列",
"Output Sequence": "输出序列",
"First Output Sequence": "第一个输出序列",
@@ -246,7 +247,7 @@
"System Sequence Prefix": "系统序列前缀",
"System Sequence Suffix": "系统序列后缀",
"Stop Sequence": "停止序列",
- "Context Formatting": "上下文格式",
+ "Context Formatting": "上下文格式化",
"(Saved to Context Template)": "(保存到上下文模板)",
"Tokenizer": "分词器",
"None / Estimated": "无 / 估计",
@@ -256,11 +257,11 @@
"Always add character's name to prompt": "始终将角色名称添加到提示词",
"Use as Stop Strings": "用作停止字符串",
"Bind to Context": "绑定到上下文",
- "Generate only one line per request": "每个请求只生成一行",
+ "Generate only one line per request": "每次请求只生成一行",
"Misc. Settings": "其他设置",
"Auto-Continue": "自动继续",
"Collapse Consecutive Newlines": "折叠连续的换行符",
- "Allow for Chat Completion APIs": "允许聊天完成API",
+ "Allow for Chat Completion APIs": "允许对话补全API",
"Target length (tokens)": "目标长度(Token)",
"Keep Example Messages in Prompt": "在提示词中保留示例消息",
"Remove Empty New Lines from Output": "从输出中删除空行",
@@ -272,7 +273,7 @@
"Style then Character": "样式然后角色",
"Character Anchor": "角色锚点",
"Style Anchor": "样式锚点",
- "World Info": "世界信息",
+ "World Info": "世界书",
"Scan Depth": "扫描深度",
"Case-Sensitive": "区分大小写",
"Match Whole Words": "匹配整个单词",
@@ -280,7 +281,7 @@
"Yes": "是",
"No": "否",
"Context %": "上下文百分比",
- "Budget Cap": "预算上限",
+ "Budget Cap": "Token预算上限",
"(0 = disabled)": "(0 = 禁用)",
"depth": "深度",
"Token Budget": "Token预算",
@@ -289,7 +290,7 @@
"None": "无",
"User Settings": "用户设置",
"UI Mode": "UI 模式",
- "UI Language": "语言",
+ "UI Language": "UI 语言",
"MovingUI Preset": "MovingUI 预设",
"UI Customization": "UI 自定义",
"Avatar Style": "头像样式",
@@ -301,8 +302,8 @@
"Bubbles": "气泡",
"No Blur Effect": "禁用模糊效果",
"No Text Shadows": "禁用文本阴影",
- "Waifu Mode": "AI老婆模式",
- "Message Timer": "AI回复消息计时器",
+ "Waifu Mode": "视觉小说模式",
+ "Message Timer": "AI回复计时器",
"Model Icon": "模型图标",
"# of messages (0 = disabled)": "消息数量(0 = 禁用)",
"Advanced Character Search": "高级角色搜索",
@@ -310,7 +311,7 @@
"Allow {{user}}: in bot messages": "在机器人消息中允许 {{user}}:",
"Show tags in responses": "在响应中显示标签",
"Aux List Field": "辅助列表字段",
- "Lorebook Import Dialog": "Lorebook 导入对话框",
+ "Lorebook Import Dialog": "世界书导入对话框",
"MUI Preset": "可移动UI 预设",
"If set in the advanced character definitions, this field will be displayed in the characters list.": "如果在高级角色定义中设置,此字段将显示在角色列表中。",
"Relaxed API URLS": "宽松的API URL",
@@ -319,10 +320,10 @@
"Mancer Model": "Mancer 模型",
"API Type": "API 类型",
"Aphrodite API key": "Aphrodite API 密钥",
- "Relax message trim in Groups": "放松群组中的消息修剪",
+ "Relax message trim in Groups": "宽松的群聊消息修剪",
"Characters Hotswap": "收藏角色卡置顶显示",
"Request token probabilities": "请求Token概率",
- "Movable UI Panels": "可移动的 UI 面板",
+ "Movable UI Panels": "可移动UI 面板",
"Reset Panels": "重置面板",
"UI Colors": "UI 颜色",
"Main Text": "主要文本",
@@ -362,15 +363,15 @@
"System Backgrounds": "系统背景",
"Name": "名称",
"Your Avatar": "您的头像",
- "Extensions API:": "扩展 API地址:",
- "SillyTavern-extras": "SillyTavern-额外功能",
+ "Extensions API:": "扩展API地址:",
+ "SillyTavern-extras": "SillyTavern扩展",
"Auto-connect": "自动连接",
- "Active extensions": "激活扩展",
+ "Active extensions": "启用扩展",
"Extension settings": "扩展设置",
"Description": "描述",
"First message": "第一条消息",
- "Group Controls": "群组控制",
- "Group reply strategy": "群组回复策略",
+ "Group Controls": "群聊控制",
+ "Group reply strategy": "群聊回复策略",
"Natural order": "自然顺序",
"List order": "列表顺序",
"Allow self responses": "允许自我回复",
@@ -385,42 +386,42 @@
"A brief description of the personality": "个性的简要描述",
"Scenario": "情景",
"Circumstances and context of the dialogue": "对话的情况和背景",
- "Talkativeness": "健谈",
+ "Talkativeness": "健谈度",
"How often the chracter speaks in": "角色在其中讲话的频率",
"group chats!": "群聊中!",
"Shy": "害羞",
- "Normal": "正常",
+ "Normal": "普通",
"Chatty": "话多",
"Examples of dialogue": "对话示例",
"Forms a personality more clearly": "更清晰地形成个性",
"Save": "保存",
- "World Info Editor": "世界信息编辑器",
+ "World Info Editor": "世界书编辑器",
"New summary": "新摘要",
"Export": "导出",
"Delete World": "删除世界",
"Chat History": "聊天记录",
- "Group Chat Scenario Override": "群组聊天情景替代",
- "All group members will use the following scenario text instead of what is specified in their character cards.": "所有群组成员将使用以下情景文本,而不是在其角色卡中指定的内容。",
+ "Group Chat Scenario Override": "群聊情景覆盖",
+ "All group members will use the following scenario text instead of what is specified in their character cards.": "所有群聊成员将使用以下情景文本,而不是在其角色卡中指定的内容。",
"Keywords": "关键词",
"Separate with commas": "用逗号分隔",
- "Secondary Required Keywords": "次要必需关键词",
+ "Secondary Required Keywords": "第二个必需关键词",
"Content": "内容",
"What this keyword should mean to the AI": "这个关键词对 AI 的含义",
"Memo/Note": "备忘录/注释",
"Not sent to AI": "不发送给 AI",
"Constant": "常量",
"Selective": "选择性",
- "Before Char": "角色之前",
- "After Char": "角色之后",
+ "Before Char": "角色定义之前",
+ "After Char": "角色定义之后",
"Insertion Order": "插入顺序",
- "Tokens:": "Token:",
+ "Tokens:": "Tokens:",
"Disable": "禁用",
"${characterName}": "${角色名称}",
"CHAR": "角色",
"is typing": "正在输入...",
"Back to parent chat": "返回到父级聊天",
"Save bookmark": "保存书签",
- "Convert to group": "转换为群组",
+ "Convert to group": "转换为群聊",
"Start new chat": "开始新聊天",
"View past chats": "查看过去的聊天记录",
"Delete messages": "删除消息",
@@ -437,13 +438,13 @@
"NSFW avoidance prompt": "禁止 NSFW 提示词",
"Prompt that is used when the NSFW toggle is off": "NSFW 开关关闭时使用的提示词",
"Advanced prompt bits": "高级提示词位",
- "World Info format": "世界信息格式",
- "Wraps activated World Info entries before inserting into the prompt. Use {0} to mark a place where the content is inserted.": "在插入到提示词中之前包装激活的世界信息条目。使用 {0} 标记内容插入的位置。",
- "Unrestricted maximum value for the context slider": "AI可见的最大上下文长度",
- "Chat Completion Source": "聊天补全来源",
+ "World Info format": "世界书格式",
+ "Wraps activated World Info entries before inserting into the prompt. Use {0} to mark a place where the content is inserted.": "在插入到提示词中之前包裹启用的世界书条目。使用 {0} 标记内容插入的位置。",
+ "Unrestricted maximum value for the context slider": "上下文长度滑块的最大值无限制,仅在你知道自己在做什么的情况下才启用。",
+ "Chat Completion Source": "对话补全来源",
"Avoid sending sensitive information to the Horde.": "避免向 Horde 发送敏感信息。",
"Review the Privacy statement": "查看隐私声明",
- "Learn how to contribute your idel GPU cycles to the Horde": "了解如何将您的空闲 GPU 周期贡献给 Horde",
+ "Learn how to contribute your idel GPU cycles to the Horde": "了解如何将您的空闲 GPU 算力贡献给 Horde",
"Trusted workers only": "仅信任的工作人员",
"For privacy reasons, your API key will be hidden after you reload the page.": "出于隐私原因,重新加载页面后您的 API 密钥将被隐藏。",
"-- Horde models not loaded --": "-- Horde 模型未加载 --",
@@ -451,9 +452,9 @@
"No connection...": "没有连接...",
"Get your NovelAI API Key": "获取您的 NovelAI API 密钥",
"KoboldAI Horde": "KoboldAI Horde",
- "Text Gen WebUI (ooba)": "文本生成 WebUI(ooba)",
+ "Text Gen WebUI (ooba)": "Text Gen WebUI(ooba)",
"NovelAI": "NovelAI",
- "Chat Completion (OpenAI, Claude, Window/OpenRouter, Scale)": "聊天补全(OpenAI、Claude、Window/OpenRouter、Scale)",
+ "Chat Completion (OpenAI, Claude, Window/OpenRouter, Scale)": "对话补全(OpenAI、Claude、Window/OpenRouter、Scale)",
"OpenAI API key": "OpenAI API 密钥",
"Trim spaces": "修剪空格",
"Trim Incomplete Sentences": "修剪不完整的句子",
@@ -464,16 +465,16 @@
"Separator": "分隔符",
"Start Reply With": "以...开始回复",
"Show reply prefix in chat": "在聊天中显示回复前缀",
- "Worlds/Lorebooks": "世界/传说书",
- "Active World(s)": "活动世界",
- "Activation Settings": "激活配置",
- "Character Lore Insertion Strategy": "角色传说插入策略",
+ "Worlds/Lorebooks": "世界书/传说书",
+ "Active World(s)": "当前启用的世界书",
+ "Activation Settings": "启用配置",
+ "Character Lore Insertion Strategy": "角色世界书条目插入策略",
"Sorted Evenly": "均匀排序",
"Active World(s) for all chats": "已启用的世界书(全局有效)",
- "-- World Info not found --": "-- 未找到世界信息 --",
+ "-- World Info not found --": "-- 未找到世界书 --",
"--- Pick to Edit ---": "--- 选择以编辑 ---",
"or": "或",
- "New": "新",
+ "New": "新建",
"Priority": "优先级",
"Custom": "自定义",
"Title A-Z": "标题 A-Z",
@@ -486,23 +487,23 @@
"Order ↘": "顺序 ↘",
"UID ↗": "UID ↗",
"UID ↘": "UID ↘",
- "Trigger% ↗": "触发器% ↗",
- "Trigger% ↘": "触发器% ↘",
+ "Trigger% ↗": "触发频率% ↗",
+ "Trigger% ↘": "触发频率% ↘",
"Order:": "顺序:",
"Depth:": "深度:",
- "Character Lore First": "角色传说优先",
- "Global Lore First": "全局传说优先",
+ "Character Lore First": "角色世界书优先",
+ "Global Lore First": "全局世界书优先",
"Recursive Scan": "递归扫描",
"Case Sensitive": "区分大小写",
"Match whole words": "完整匹配单词",
"Alert On Overflow": "溢出警报",
- "World/Lore Editor": "世界/传说编辑器",
+ "World/Lore Editor": "世界书编辑器",
"--- None ---": "--- 无 ---",
"Use Probability": "使用概率",
- "Exclude from recursion": "排除递归",
+ "Exclude from recursion": "从递归中排除",
"Entry Title/Memo": "条目标题/备忘录",
"Position:": "位置:",
- "T_Position": "↑Char:在角色定义之前\n↓Char:在角色定义之后\n↑AN:在作者注释之前\n↓AN:在作者注释之后\n@D:在深度处",
+ "T_Position": "↑Char:在角色定义之前\n↓Char:在角色定义之后\n↑AN:在作者注释之前\n↓AN:在作者注释之后\n@D:在深度D处",
"Before Char Defs": "角色定义之前",
"After Char Defs": "角色定义之后",
"Before AN": "作者注释之前",
@@ -512,7 +513,7 @@
"Probability:": "概率:",
"Update a theme file": "更新主题文件",
"Save as a new theme": "另存为新主题",
- "Minimum number of blacklisted words detected to trigger an auto-swipe": "检测到触发自动滑动的黑名单词语的最小数量",
+ "Minimum number of blacklisted words detected to trigger an auto-swipe": "触发自动滑动的检测到的黑名单词汇的最小数量",
"Delete Entry": "删除条目",
"User Message Blur Tint": "用户消息模糊色调",
"AI Message Blur Tint": "AI 消息模糊色调",
@@ -522,7 +523,7 @@
"Mad Lab Mode": "疯狂实验室模式",
"Show Message Token Count": "显示消息Token计数",
"Compact Input Area (Mobile)": "紧凑输入区域(移动端)",
- "Zen Sliders": "禅滑块",
+ "Zen Sliders": "禅意滑块",
"UI Border": "UI 边框",
"Chat Style:": "聊天风格:",
"Chat Width (PC)": "聊天宽度(PC)",
@@ -535,18 +536,18 @@
"Message IDs": "显示消息编号",
"Prefer Character Card Prompt": "角色卡提示词优先",
"Prefer Character Card Jailbreak": "角色卡越狱优先",
- "Press Send to continue": "按发送键继续",
+ "Press Send to continue": "按发送键以继续",
"Quick 'Continue' button": "快速“继续”按钮",
"Log prompts to console": "将提示词记录到控制台",
"Never resize avatars": "不调整头像大小",
"Show avatar filenames": "显示头像文件名",
"Import Card Tags": "导入卡片标签",
- "Confirm message deletion": "确认删除消息",
+ "Confirm message deletion": "删除消息前确认",
"Spoiler Free Mode": "隐藏角色卡信息",
"Auto-swipe": "自动滑动",
"Minimum generated message length": "生成的消息的最小长度",
- "Blacklisted words": "黑名单词语",
- "Blacklisted word count to swipe": "滑动的黑名单词语数量",
+ "Blacklisted words": "黑名单词汇",
+ "Blacklisted word count to swipe": "滑动的黑名单词汇数量",
"Reload Chat": "重新加载聊天",
"Search Settings": "搜索设置",
"Disabled": "已禁用",
@@ -571,8 +572,8 @@
"Show tagged character folders in the character list": "在角色列表中显示已标记的角色文件夹",
"Play a sound when a message generation finishes": "当消息生成完成时播放声音",
"Only play a sound when ST's browser tab is unfocused": "仅在ST的浏览器选项卡未聚焦时播放声音",
- "Reduce the formatting requirements on API URLs": "减少API URL的格式要求",
- "Ask to import the World Info/Lorebook for every new character with embedded lorebook. If unchecked, a brief message will be shown instead": "询问是否为每个具有嵌入式传说书的新角色导入世界信息/传说书。如果未选中,则会显示简短的消息",
+ "Reduce the formatting requirements on API URLs": "减少API URL的格式化要求",
+ "Ask to import the World Info/Lorebook for every new character with embedded lorebook. If unchecked, a brief message will be shown instead": "询问是否为每个具有嵌入的世界书的新角色导入世界书。如果未选中,则会显示简短的消息",
"Restore unsaved user input on page refresh": "在页面刷新时恢复未保存的用户输入",
"Allow repositioning certain UI elements by dragging them. PC only, no effect on mobile": "允许通过拖动重新定位某些UI元素。仅适用于PC,对移动设备无影响",
"MovingUI preset. Predefined/saved draggable positions": "MovingUI预设。预定义/保存的可拖动位置",
@@ -600,20 +601,20 @@
"Reload and redraw the currently open chat": "重新加载和重绘当前打开的聊天",
"Auto-Expand Message Actions": "自动展开消息操作菜单",
"Not Connected": "未连接",
- "Persona Management": "角色管理",
- "Persona Description": "角色描述",
- "Your Persona": "您的角色",
- "Show notifications on switching personas": "切换角色时显示通知",
+ "Persona Management": "我的角色管理",
+ "Persona Description": "我的角色描述",
+ "Your Persona": "我的角色",
+ "Show notifications on switching personas": "切换我的角色时显示通知",
"Blank": "空白",
- "In Story String / Chat Completion: Before Character Card": "故事模式/聊天补全模式:在角色卡之前",
- "In Story String / Chat Completion: After Character Card": "故事模式/聊天补全模式:在角色卡之后",
+ "In Story String / Chat Completion: Before Character Card": "故事模式/对话补全模式:在角色卡之前",
+ "In Story String / Chat Completion: After Character Card": "故事模式/对话补全模式:在角色卡之后",
"In Story String / Prompt Manager": "在故事字符串/提示词管理器",
- "Top of Author's Note": "作者注的顶部",
- "Bottom of Author's Note": "作者注的底部",
+ "Top of Author's Note": "作者注释的顶部",
+ "Bottom of Author's Note": "作者注释的底部",
"How do I use this?": "怎样使用?",
"More...": "更多...",
- "Link to World Info": "链接到世界信息",
- "Import Card Lore": "导入卡片知识",
+ "Link to World Info": "链接到世界书",
+ "Import Card Lore": "导入人物卡的世界书",
"Scenario Override": "场景覆盖",
"Rename": "重命名",
"Character Description": "角色描述",
@@ -627,13 +628,13 @@
"Most chats": "最多聊天",
"Least chats": "最少聊天",
"Back": "返回",
- "Prompt Overrides (For OpenAI/Claude/Scale APIs, Window/OpenRouter, and Instruct mode)": "提示词覆盖(适用于OpenAI/Claude/Scale API、Window/OpenRouter和Instruct模式)",
+ "Prompt Overrides (For OpenAI/Claude/Scale APIs, Window/OpenRouter, and Instruct mode)": "提示词覆盖(适用于OpenAI/Claude/Scale API、Window/OpenRouter和指令模式)",
"Insert {{original}} into either box to include the respective default prompt from system settings.": "将{{original}}插入到任一框中,以包含系统设置中的相应默认提示词。",
"Main Prompt": "主要提示词",
"Jailbreak": "越狱",
"Creator's Metadata (Not sent with the AI prompt)": "创作者的元数据(不与AI提示词一起发送)",
"Everything here is optional": "这里的一切都是可选的",
- "Created by": "作者",
+ "Created by": "创作者",
"Character Version": "角色版本",
"Tags to Embed": "嵌入的标签",
"How often the character speaks in group chats!": "角色在群聊中说话的频率!",
@@ -642,7 +643,7 @@
"Samplers Order": "采样器顺序",
"Samplers will be applied in a top-down order. Use with caution.": "采样器将按自上而下的顺序应用。请谨慎使用。",
"Repetition Penalty": "重复惩罚",
- "Rep. Pen. Range.": "重复惩罚范围。",
+ "Rep. Pen. Range.": "重复惩罚范围",
"Rep. Pen. Freq.": "重复惩罚频率",
"Rep. Pen. Presence": "重复惩罚存在",
"Enter it in the box below:": "在下面的框中输入它:",
@@ -651,9 +652,9 @@
"Suggest replies": "建议回复",
"Show suggested replies. Not all bots support this.": "显示建议的回复。并非所有机器人都支持此功能。",
"Use 'Unlocked Context' to enable chunked generation.": "使用'Unlocked Context'启用分块生成。",
- "It extends the context window in exchange for reply generation speed.": "它扩展了上下文窗口,以换取回复生成速度。",
+ "It extends the context window in exchange for reply generation speed.": "它以回复生成速度为代价,扩展了上下文窗口",
"Continue": "继续",
- "CFG Scale": "CFG规模",
+ "CFG Scale": "CFG Scale",
"Editing:": "编辑:",
"AI reply prefix": "AI回复前缀",
"Custom Stopping Strings": "自定义停止字符串",
@@ -664,8 +665,8 @@
"Enter your name": "输入您的名字",
"Name this character": "为这个角色命名",
"Search / Create Tags": "搜索/创建标签",
- "Describe your character's physical and mental traits here.": "在这里描述您角色的身体和精神特征。",
- "This will be the first message from the character that starts every chat.": "这将是每次开始的角色的第一条消息。",
+ "Describe your character's physical and mental traits here.": "在这里描述您角色的身体和心理特征。",
+ "This will be the first message from the character that starts every chat.": "这将是每次开始对话时角色的第一条消息。",
"Chat Name (Optional)": "聊天名称(可选)",
"Filter...": "过滤...",
"Search...": "搜索...",
@@ -674,10 +675,10 @@
"(Botmaker's name / Contact Info)": "(机器人制作者的姓名/联系信息)",
"(If you want to track character versions)": "(如果您想跟踪角色版本)",
"(Describe the bot, give use tips, or list the chat models it has been tested on. This will be displayed in the character list.)": "(描述机器人,提供使用技巧,或列出已经测试过的聊天模型。这将显示在角色列表中。)",
- "(Write a comma-separated list of tags)": "(编写逗号分隔的标签列表)",
+ "(Write a comma-separated list of tags)": "(编写一个以逗号分隔的标签列表。)",
"(A brief description of the personality)": "(性格的简要描述)",
"(Circumstances and context of the interaction)": "(交互的情况和背景)",
- "(Examples of chat dialog. Begin each example with START on a new line.)": "(聊天对话的示例。每个示例都以新行上的START开头。)",
+ "(Examples of chat dialog. Begin each example with START on a new line.)": "(聊天对话的示例,每个示例都另起一行以开头。)",
"Injection text (supports parameters)": "注入文本(支持参数)",
"Injection depth": "注入深度",
"Type here...": "在此处输入...",
@@ -687,23 +688,23 @@
"Filter to Character(s)": "过滤到角色",
"Character Exclusion": "角色排除",
"Inclusion Group": "包含组",
- "Only one entry with the same label will be activated": "只有一个带有相同标签的条目将被激活",
+ "Only one entry with the same label will be activated": "只有一个带有相同标签的条目将被启用",
"-- Characters not found --": "-- 未找到角色 --",
"Not sent to the AI": "不发送到AI",
- "(This will be the first message from the character that starts every chat)": "(这将是每次开始的角色的第一条消息)",
+ "(This will be the first message from the character that starts every chat)": "(这将是每次开始对话时角色的第一条消息。)",
"Not connected to API!": "未连接到API!",
"AI Response Configuration": "AI响应配置",
- "AI Configuration panel will stay open": "AI配置面板将保持打开状态",
+ "AI Configuration panel will stay open": "AI配置面板将保持打开",
"Update current preset": "更新当前预设",
"Create new preset": "创建新预设",
"Import preset": "导入预设",
"Export preset": "导出预设",
"Delete the preset": "删除预设",
- "Auto-select this preset for Instruct Mode": "自动选择此预设以进行指示模式",
+ "Auto-select this preset for Instruct Mode": "为指令模式自动选择此预设",
"Auto-select this preset on API connection": "在API连接时自动选择此预设",
"NSFW block goes first in the resulting prompt": "结果提示词中首先是NSFW块",
- "Enables OpenAI completion streaming": "启用OpenAI完成流",
- "Wrap user messages in quotes before sending": "在发送之前将用户消息用引号括起来",
+ "Enables OpenAI completion streaming": "启用OpenAI补全流式传输",
+ "Wrap user messages in quotes before sending": "在发送之前将用户消息用引号包裹起来",
"Restore default prompt": "恢复默认提示词",
"New preset": "新预设",
"Delete preset": "删除预设",
@@ -711,56 +712,56 @@
"Restore default reply": "恢复默认回复",
"Restore defaul note": "恢复默认备注",
"API Connections": "API连接",
- "Can help with bad responses by queueing only the approved workers. May slowdown the response time.": "可以通过仅排队批准的工作人员来帮助处理不良响应。可能会减慢响应时间。",
+ "Can help with bad responses by queueing only the approved workers. May slowdown the response time.": "可以通过仅将批准的工作人员加入排队来帮助处理不良响应。可能会延长响应时间。",
"Clear your API key": "清除您的API密钥",
"Refresh models": "刷新模型",
- "Get your OpenRouter API token using OAuth flow. You will be redirected to openrouter.ai": "使用OAuth流程获取您的OpenRouter APIToken。您将被重定向到openrouter.ai",
- "Verifies your API connection by sending a short test message. Be aware that you'll be credited for it!": "通过发送简短的测试消息验证您的API连接。请注意,您将因此而获得信用!",
- "Create New": "创建新",
+ "Get your OpenRouter API token using OAuth flow. You will be redirected to openrouter.ai": "使用OAuth流程获取您的OpenRouter API Token。您将被重定向到openrouter.ai",
+ "Verifies your API connection by sending a short test message. Be aware that you'll be credited for it!": "通过发送简短的测试消息验证您的API连接。请注意,这也将被纳入计费!",
+ "Create New": "新建",
"Edit": "编辑",
- "Locked = World Editor will stay open": "锁定=世界编辑器将保持打开状态",
- "Entries can activate other entries by mentioning their keywords": "条目可以通过提及它们的关键字来激活其他条目",
+ "Locked = World Editor will stay open": "锁定 = 世界书编辑器将保持打开状态",
+ "Entries can activate other entries by mentioning their keywords": "条目可以通过提及对应的关键字来启用其他条目",
"Lookup for the entry keys in the context will respect the case": "在上下文中查找条目键将保持大小写敏感",
"If the entry key consists of only one word, it would not be matched as part of other words": "如果条目键只由一个单词组成,则不会作为其他单词的一部分匹配",
"Open all Entries": "打开所有条目",
"Close all Entries": "关闭所有条目",
"Create": "创建",
- "Import World Info": "导入世界信息",
- "Export World Info": "导出世界信息",
- "Delete World Info": "删除世界信息",
- "Duplicate World Info": "复制世界信息",
- "Rename World Info": "重命名世界信息",
+ "Import World Info": "导入世界书",
+ "Export World Info": "导出世界书",
+ "Delete World Info": "删除世界书",
+ "Duplicate World Info": "复制世界书",
+ "Rename World Info": "重命名世界书",
"Refresh": "刷新",
"Primary Keywords": "主要关键字",
"Logic": "逻辑",
- "AND ANY": "和任意",
- "AND ALL": "和所有",
- "NOT ALL": "不是所有",
- "NOT ANY": "没有任何",
+ "AND ANY": "与任意",
+ "AND ALL": "与所有",
+ "NOT ALL": "非所有",
+ "NOT ANY": "非任何",
"Optional Filter": "可选过滤器",
"New Entry": "新条目",
"Fill empty Memo/Titles with Keywords": "使用关键字填充空的备忘录/标题",
"Save changes to a new theme file": "将更改保存到新的主题文件",
"removes blur and uses alternative background color for divs": "消除模糊并为div使用替代背景颜色",
- "AI Response Formatting": "AI响应格式",
+ "AI Response Formatting": "AI响应格式化",
"Change Background Image": "更改背景图片",
- "Extensions": "扩展管理",
+ "Extensions": "扩展",
"Click to set a new User Name": "点击设置新的用户名",
- "Click to lock your selected persona to the current chat. Click again to remove the lock.": "单击以将您选择的角色锁定到当前聊天。再次单击以移除锁定。",
+ "Click to lock your selected persona to the current chat. Click again to remove the lock.": "单击以将您选择的我的角色锁定到当前聊天。再次单击以移除锁定。",
"Click to set user name for all messages": "点击为所有消息设置用户名",
- "Create a dummy persona": "创建虚拟角色",
+ "Create a dummy persona": "创建虚拟我的角色",
"Character Management": "角色管理",
- "Locked = Character Management panel will stay open": "已锁定=角色管理面板将保持打开状态",
+ "Locked = Character Management panel will stay open": "已锁定 = 角色管理面板将保持打开状态",
"Select/Create Characters": "选择/创建角色",
"Token counts may be inaccurate and provided just for reference.": "Token计数可能不准确,仅供参考。",
"Click to select a new avatar for this character": "单击以为此角色选择新的头像",
- "Example: [{{user}} is a 28-year-old Romanian cat girl.]": "示例:[{{user}}是一个28岁的罗马尼亚猫女孩。]",
+ "Example: [{{user}} is a 28-year-old Romanian cat girl.]": "示例:[{{user}}是一个28岁的罗马尼亚猫娘。]",
"Toggle grid view": "切换网格视图",
"Add to Favorites": "添加到收藏夹",
"Advanced Definition": "高级定义",
- "Character Lore": "角色传说",
+ "Character Lore": "角色世界书",
"Export and Download": "导出并下载",
- "Duplicate Character": "复制角色",
+ "Duplicate Character": "创建角色副本",
"Create Character": "创建角色",
"Delete Character": "删除角色",
"View all tags": "查看所有标签",
@@ -769,22 +770,22 @@
"Click to select a new avatar for this group": "单击以为该组选择新的头像",
"Set a group chat scenario": "设置群组聊天场景",
"Restore collage avatar": "恢复拼贴头像",
- "Create New Character": "创建新角色",
+ "Create New Character": "新建角色",
"Import Character from File": "从文件导入角色",
"Import content from external URL": "从外部URL导入内容",
- "Create New Chat Group": "创建新的聊天组",
+ "Create New Chat Group": "创建新的群聊",
"Characters sorting order": "角色排序顺序",
"Add chat injection": "添加聊天注入",
"Remove injection": "移除注入",
"Remove": "移除",
- "Select a World Info file for": "为...选择一个世界信息文件",
- "Primary Lorebook": "主要传说书",
- "A selected World Info will be bound to this character as its own Lorebook.": "所选的世界信息将作为该角色自己的传说书绑定到此角色。",
- "When generating an AI reply, it will be combined with the entries from a global World Info selector.": "在生成AI回复时,它将与全局世界信息选择器中的条目结合。",
- "Exporting a character would also export the selected Lorebook file embedded in the JSON data.": "导出角色还将导出嵌入在JSON数据中的所选传说书文件。",
- "Additional Lorebooks": "附加传说书",
- "Associate one or more auxillary Lorebooks with this character.": "将一个或多个辅助传说书与此角色关联。",
- "NOTE: These choices are optional and won't be preserved on character export!": "注意:这些选择是可选的,并且不会在角色导出时保留!",
+ "Select a World Info file for": "为...选择一个世界书文件",
+ "Primary Lorebook": "主要世界书",
+ "A selected World Info will be bound to this character as its own Lorebook.": "所选的世界书将会于该角色绑定,作为该角色自己的世界书",
+ "When generating an AI reply, it will be combined with the entries from a global World Info selector.": "在生成AI回复时,它将与全局世界书选择器中的条目相结合。",
+ "Exporting a character would also export the selected Lorebook file embedded in the JSON data.": "导出角色还将导出嵌入在JSON数据中的所选世界书文件。",
+ "Additional Lorebooks": "附加世界书",
+ "Associate one or more auxillary Lorebooks with this character.": "将一个或多个辅助世界书与此角色关联。",
+ "NOTE: These choices are optional and won't be preserved on character export!": "注意:这些选项是可选的,并且不会在角色导出时被一并导出!",
"Rename chat file": "重命名聊天文件",
"Export JSONL chat file": "导出JSONL聊天文件",
"Download chat as plain text document": "将聊天下载为纯文本文档",
@@ -817,9 +818,9 @@
"Ask AI to write your message for you": "请求AI为您撰写消息",
"Continue the last message": "继续上一条消息",
"Bind user name to that avatar": "将用户名称绑定到该头像",
- "Select this as default persona for the new chats.": "选择此项作为新聊天的默认人物。",
- "Change persona image": "更改人物形象",
- "Delete persona": "删除人物",
+ "Select this as default persona for the new chats.": "将这个设置为新聊天的默认我的角色。",
+ "Change persona image": "更改我的角色头像",
+ "Delete persona": "删除我的角色",
"Reduced Motion": "减少动态效果",
"Auto-select": "自动选择",
"Automatically select a background based on the chat context": "根据聊天上下文自动选择背景",
@@ -832,7 +833,7 @@
"UI Theme": "UI主题",
"This message is invisible for the AI": "此消息对AI不可见",
"Sampler Priority": "采样器优先级",
- "Ooba only. Determines the order of samplers.": "仅适用于Ooba。确定采样器的顺序。",
+ "Ooba only. Determines the order of samplers.": "确定采样器的顺序(仅适用于Ooba)",
"Load default order": "加载默认顺序",
"Max Tokens Second": "每秒最大Token数",
"CFG": "CFG",
@@ -850,30 +851,30 @@
"Import Extension From Git Repo": "从Git存储库导入扩展",
"Install extension": "安装扩展",
"Manage extensions": "管理扩展",
- "Tokens persona description": "Token人物描述",
- "Most tokens": "大多数Token",
- "Least tokens": "最少Token",
+ "Tokens persona description": "我的角色描述 Tokens",
+ "Most tokens": "最多Tokens",
+ "Least tokens": "最少Tokens",
"Random": "随机",
- "Skip Example Dialogues Formatting": "跳过示例对话格式",
+ "Skip Example Dialogues Formatting": "跳过示例对话格式化",
"Import a theme file": "导入主题文件",
"Export a theme file": "导出主题文件",
"Unlocked Context Size": "解锁上下文长度",
- "Display the response bit by bit as it is generated.": "逐位显示生成的响应。",
- "When this is off, responses will be displayed all at once when they are complete.": "当此选项关闭时,响应将在完成时一次性显示。",
+ "Display the response bit by bit as it is generated.": "随着响应的生成,逐步显示结果。",
+ "When this is off, responses will be displayed all at once when they are complete.": "当此选项关闭时,响应将在完成后一次性显示。",
"Quick Prompts Edit": "快速提示词编辑",
- "Enable OpenAI completion streaming": "启用OpenAI完成流",
+ "Enable OpenAI completion streaming": "启用OpenAI流式传输补全",
"Main": "主要",
- "Utility Prompts": "Utility Prompts 实用提示词",
+ "Utility Prompts": "实用提示词",
"Add character names": "添加角色名称",
- "Send names in the message objects. Helps the model to associate messages with characters.": "在消息对象中发送名称。有助于模型将消息与角色关联起来。",
- "Continue prefill": "继续预填充",
- "Continue sends the last message as assistant role instead of system message with instruction.": "继续将上一条消息发送为助手角色,而不是带有说明的系统消息。",
+ "Send names in the message objects. Helps the model to associate messages with characters.": "在消息对象中发送名称,有助于模型将消息与角色关联起来。",
+ "Continue prefill": "“继续”预填充",
+ "Continue sends the last message as assistant role instead of system message with instruction.": "继续以AI助手的角色发送最后一条消息,而不是带有指令的系统消息。",
"Squash system messages": "压缩系统消息",
- "Combines consecutive system messages into one (excluding example dialogues). May improve coherence for some models.": "将连续的系统消息合并为一条(不包括示例对话)。可能会提高一些模型的连贯性。",
+ "Combines consecutive system messages into one (excluding example dialogues). May improve coherence for some models.": "将连续的系统消息合并为一条(不包括示例对话),可能会提高一些模型的连贯性。",
"Send inline images": "发送内联图像",
"Assistant Prefill": "助手预填充",
- "Start Claude's answer with...": "以以下内容开始Claude克劳德的回答...",
- "Use system prompt (Claude 2.1+ only)": "仅使用系统提示词(仅适用于Claude 2.1+)",
+ "Start Claude's answer with...": "以如下内容开始Claude的回答...",
+ "Use system prompt (Claude 2.1+ only)": "使用系统提示词(仅适用于Claude 2.1+)",
"Send the system prompt for supported models. If disabled, the user message is added to the beginning of the prompt.": "为支持的模型发送系统提示词。如果禁用,则用户消息将添加到提示词的开头。",
"Prompts": "提示词",
"Total Tokens:": "总Token数:",
@@ -883,7 +884,7 @@
"Export this prompt list": "导出此提示词列表",
"Reset current character": "重置当前角色",
"New prompt": "新提示词",
- "Tokens": "Tokens Token",
+ "Tokens": "Tokens",
"Want to update?": "获取最新版本",
"How to start chatting?": "如何快速开始聊天?",
"Click": "点击",
@@ -899,8 +900,8 @@
"Join the SillyTavern Discord": "加入SillyTavern Discord",
"Post a GitHub issue": "发布GitHub问题",
"Contact the developers": "联系开发人员",
- "Nucleus Sampling": "核心采样",
- "Typical P": "Typical P 典型P",
+ "Nucleus Sampling": "核采样",
+ "Typical P": "典型P",
"Top K Sampling": "Top K 采样",
"Top A Sampling": "Top A 采样",
"Off": "关闭",
@@ -909,9 +910,9 @@
"Medium": "中",
"Aggressive": "激进",
"Very aggressive": "非常激进",
- "Eta cutoff is the main parameter of the special Eta Sampling technique.
In units of 1e-4; a reasonable value is 3.
Set to 0 to disable.
See the paper Truncation Sampling as Language Model Desmoothing by Hewitt et al. (2022) for details.": "Eta截止是特殊Eta采样技术的主要参数。
以1e-4为单位;合理的值为3。
设置为0以禁用。
有关详细信息,请参阅Hewitt等人的论文《Truncation Sampling as Language Model Desmoothing》(2022年)。",
- "Learn how to contribute your idle GPU cycles to the Horde": "了解如何将您的空闲GPU时间分享给Horde",
- "Use the appropriate tokenizer for Google models via their API. Slower prompt processing, but offers much more accurate token counting.": "通过其API为Google模型使用适当的标记器。处理速度较慢,但提供更准确的Token计数。",
+ "Eta cutoff is the main parameter of the special Eta Sampling technique.\nIn units of 1e-4; a reasonable value is 3.\nSet to 0 to disable.\nSee the paper Truncation Sampling as Language Model Desmoothing by Hewitt et al. (2022) for details.": "Eta截止是特殊Eta采样技术的主要参数。\n以1e-4为单位;合理的值为3。\n设置为0以禁用。\n有关详细信息,请参阅Hewitt等人的论文 Truncation Sampling as Language Model Desmoothing (2022)",
+ "Learn how to contribute your idle GPU cycles to the Horde": "了解如何将您的空闲GPU算力分享给Horde",
+ "Use the appropriate tokenizer for Google models via their API. Slower prompt processing, but offers much more accurate token counting.": "通过其API为Google模型使用适当的分词器。处理速度较慢,但提供更准确的Token计数。",
"Load koboldcpp order": "加载koboldcpp顺序",
- "Use Google Tokenizer": "使用Google标记器"
+ "Use Google Tokenizer": "使用Google分词器"
}
diff --git a/public/script.js b/public/script.js
index 84a0e9d5d..a20a04ccb 100644
--- a/public/script.js
+++ b/public/script.js
@@ -153,7 +153,7 @@ import {
ensureImageFormatSupported,
} from './scripts/utils.js';
-import { ModuleWorkerWrapper, doDailyExtensionUpdatesCheck, extension_settings, getContext, loadExtensionSettings, renderExtensionTemplate, runGenerationInterceptors, saveMetadataDebounced, writeExtensionField } from './scripts/extensions.js';
+import { ModuleWorkerWrapper, doDailyExtensionUpdatesCheck, extension_settings, getContext, loadExtensionSettings, renderExtensionTemplate, renderExtensionTemplateAsync, runGenerationInterceptors, saveMetadataDebounced, writeExtensionField } from './scripts/extensions.js';
import { COMMENT_NAME_DEFAULT, executeSlashCommands, getSlashCommandsHelp, processChatSlashCommands, registerSlashCommand } from './scripts/slash-commands.js';
import {
tag_map,
@@ -212,6 +212,7 @@ import { appendFileContent, hasPendingFileAttachment, populateFileAttachment, de
import { initPresetManager } from './scripts/preset-manager.js';
import { evaluateMacros } from './scripts/macros.js';
import { callGenericPopup } from './scripts/popup.js';
+import { renderTemplate, renderTemplateAsync } from './scripts/templates.js';
//exporting functions and vars for mods
export {
@@ -286,6 +287,7 @@ export {
printCharactersDebounced,
isOdd,
countOccurrences,
+ renderTemplate,
};
showLoader();
@@ -575,14 +577,14 @@ export const MAX_INJECTION_DEPTH = 1000;
let system_messages = {};
-function getSystemMessages() {
+async function getSystemMessages() {
system_messages = {
help: {
name: systemUserName,
force_avatar: system_avatar,
is_user: false,
is_system: true,
- mes: renderTemplate('help'),
+ mes: await renderTemplateAsync('help'),
},
slash_commands: {
name: systemUserName,
@@ -596,21 +598,21 @@ function getSystemMessages() {
force_avatar: system_avatar,
is_user: false,
is_system: true,
- mes: renderTemplate('hotkeys'),
+ mes: await renderTemplateAsync('hotkeys'),
},
formatting: {
name: systemUserName,
force_avatar: system_avatar,
is_user: false,
is_system: true,
- mes: renderTemplate('formatting'),
+ mes: await renderTemplateAsync('formatting'),
},
macros: {
name: systemUserName,
force_avatar: system_avatar,
is_user: false,
is_system: true,
- mes: renderTemplate('macros'),
+ mes: await renderTemplateAsync('macros'),
},
welcome:
{
@@ -618,7 +620,7 @@ function getSystemMessages() {
force_avatar: system_avatar,
is_user: false,
is_system: true,
- mes: renderTemplate('welcome'),
+ mes: await renderTemplateAsync('welcome'),
},
group: {
name: systemUserName,
@@ -672,52 +674,6 @@ $(document).ajaxError(function myErrorHandler(_, xhr) {
}
});
-/**
- * Loads a URL content using XMLHttpRequest synchronously.
- * @param {string} url URL to load synchronously
- * @returns {string} Response text
- */
-function getUrlSync(url) {
- console.debug('Loading URL synchronously', url);
- const request = new XMLHttpRequest();
- request.open('GET', url, false); // `false` makes the request synchronous
- request.send();
-
- if (request.status >= 200 && request.status < 300) {
- return request.responseText;
- }
-
- throw new Error(`Error loading ${url}: ${request.status} ${request.statusText}`);
-}
-
-const templateCache = new Map();
-
-export function renderTemplate(templateId, templateData = {}, sanitize = true, localize = true, fullPath = false) {
- try {
- const pathToTemplate = fullPath ? templateId : `/scripts/templates/${templateId}.html`;
- let template = templateCache.get(pathToTemplate);
- if (!template) {
- const templateContent = getUrlSync(pathToTemplate);
- template = Handlebars.compile(templateContent);
- templateCache.set(pathToTemplate, template);
- }
- let result = template(templateData);
-
- if (sanitize) {
- result = DOMPurify.sanitize(result);
- }
-
- if (localize) {
- result = applyLocale(result);
- }
-
- return result;
- } catch (err) {
- console.error('Error rendering template', templateId, templateData, err);
- toastr.error('Check the DevTools console for more information.', 'Error rendering template');
- }
-}
-
async function getClientVersion() {
try {
const response = await fetch('/version');
@@ -781,7 +737,7 @@ function getCurrentChatId() {
if (selected_group) {
return groups.find(x => x.id == selected_group)?.chat_id;
}
- else if (this_chid) {
+ else if (this_chid !== undefined) {
return characters[this_chid]?.chat;
}
}
@@ -901,7 +857,7 @@ async function firstLoadInit() {
await getClientVersion();
await readSecretState();
await getSettings();
- getSystemMessages();
+ await getSystemMessages();
sendSystemMessage(system_message_types.WELCOME);
initLocales();
initTags();
@@ -1204,7 +1160,7 @@ export function resultCheckStatus() {
}
export async function selectCharacterById(id) {
- if (characters[id] == undefined) {
+ if (characters[id] === undefined) {
return;
}
@@ -1567,7 +1523,7 @@ async function getCharacters() {
characters[i]['chat'] = String(characters[i]['chat']);
}
- if (this_chid != undefined && this_chid != 'invalid-safety-id') {
+ if (this_chid !== undefined) {
$('#avatar_url_pole').val(characters[this_chid].avatar);
}
@@ -1720,11 +1676,12 @@ export async function reloadCurrentChat() {
if (selected_group) {
await getGroupChat(selected_group, true);
}
- else if (this_chid) {
+ else if (this_chid !== undefined) {
await getChat();
}
else {
resetChatState();
+ await getCharacters();
await printMessages();
await eventSource.emit(event_types.CHAT_CHANGED, getCurrentChatId());
}
@@ -1827,7 +1784,7 @@ function messageFormatting(mes, ch_name, isSystem, isUser, messageId) {
mes = mes.replaceAll('<', '<').replaceAll('>', '>');
}
- if ((this_chid === undefined || this_chid === 'invalid-safety-id') && !selected_group) {
+ if (this_chid === undefined && !selected_group) {
mes = mes
.replace(/\*\*(.+?)\*\*/g, '$1')
.replace(/\n/g, ' ');
@@ -2084,7 +2041,7 @@ function addOneMessage(mes, { type = 'normal', insertAfter = null, scroll = true
if (!mes['is_user']) {
if (mes.force_avatar) {
avatarImg = mes.force_avatar;
- } else if (this_chid === undefined || this_chid === 'invalid-safety-id') {
+ } else if (this_chid === undefined) {
avatarImg = system_avatar;
} else {
if (characters[this_chid].avatar != 'none') {
@@ -3177,12 +3134,12 @@ async function Generate(type, { automatic_trigger, force_name2, quiet_prompt, qu
quiet_prompt = main_api == 'novel' && !quietToLoud ? adjustNovelInstructionPrompt(quiet_prompt) : quiet_prompt;
}
- const isChatValid = online_status != 'no_connection' && this_chid != undefined && this_chid !== 'invalid-safety-id';
+ const isChatValid = online_status !== 'no_connection' && this_chid !== undefined;
// We can't do anything because we're not in a chat right now. (Unless it's a dry run, in which case we need to
// assemble the prompt so we can count its tokens regardless of whether a chat is active.)
if (!dryRun && !isChatValid) {
- if (this_chid === undefined || this_chid === 'invalid-safety-id') {
+ if (this_chid === undefined) {
toastr.warning('Сharacter is not selected');
}
is_send_press = false;
@@ -4614,7 +4571,7 @@ async function DupeChar() {
}
}
-function promptItemize(itemizedPrompts, requestedMesId) {
+async function promptItemize(itemizedPrompts, requestedMesId) {
console.log('PROMPT ITEMIZE ENTERED');
var incomingMesId = Number(requestedMesId);
console.debug(`looking for MesId ${incomingMesId}`);
@@ -4655,7 +4612,7 @@ function promptItemize(itemizedPrompts, requestedMesId) {
chatInjects: getTokenCount(itemizedPrompts[thisPromptSet].chatInjects),
};
- if (params.chatInjects){
+ if (params.chatInjects) {
params.ActualChatHistoryTokens = params.ActualChatHistoryTokens - params.chatInjects;
}
@@ -4737,10 +4694,12 @@ function promptItemize(itemizedPrompts, requestedMesId) {
}
if (params.this_main_api == 'openai') {
- callPopup(renderTemplate('itemizationChat', params), 'text');
+ const template = await renderTemplateAsync('itemizationChat', params);
+ callPopup(template, 'text');
} else {
- callPopup(renderTemplate('itemizationText', params), 'text');
+ const template = await renderTemplateAsync('itemizationText', params);
+ callPopup(template, 'text');
}
}
@@ -5309,7 +5268,7 @@ export function deactivateSendButtons() {
function resetChatState() {
//unsets expected chid before reloading (related to getCharacters/printCharacters from using old arrays)
- this_chid = 'invalid-safety-id';
+ this_chid = undefined;
// replaces deleted charcter name with system user since it will be displayed next.
name2 = systemUserName;
// sets up system user to tell user about having deleted a character
@@ -5982,7 +5941,7 @@ function getUserAvatarBlock(name) {
const personaName = power_user.personas[name];
const personaDescription = power_user.persona_descriptions[name]?.description;
template.find('.ch_name').text(personaName || '[Unnamed Persona]');
- template.find('.ch_description').text(personaDescription || '[No description]').toggleClass('text_muted', !personaDescription);
+ template.find('.ch_description').text(personaDescription || $('#user_avatar_block').attr('no_desc_text')).toggleClass('text_muted', !personaDescription);
template.attr('imgfile', name);
template.find('.avatar').attr('imgfile', name).attr('title', name);
template.toggleClass('default_persona', name === power_user.default_persona);
@@ -7692,7 +7651,7 @@ async function createOrEditCharacter(e) {
$('#create_button').attr('value', '✅');
let oldSelectedChar = null;
- if (this_chid != undefined && this_chid != 'invalid-safety-id') {
+ if (this_chid !== undefined) {
oldSelectedChar = characters[this_chid].avatar;
}
@@ -7814,7 +7773,11 @@ window['SillyTavern'].getContext = function () {
*/
registerHelper: () => { },
registedDebugFunction: registerDebugFunction,
+ /**
+ * @deprecated Use renderExtensionTemplateAsync instead.
+ */
renderExtensionTemplate: renderExtensionTemplate,
+ renderExtensionTemplateAsync: renderExtensionTemplateAsync,
callPopup: callPopup,
callGenericPopup: callGenericPopup,
mainApi: main_api,
@@ -8439,7 +8402,7 @@ async function importCharacter(file, preserveFileName = false) {
$('#character_search_bar').val('').trigger('input');
let oldSelectedChar = null;
- if (this_chid != undefined && this_chid != 'invalid-safety-id') {
+ if (this_chid !== undefined) {
oldSelectedChar = characters[this_chid].avatar;
}
@@ -8570,7 +8533,7 @@ export async function handleDeleteCharacter(popup_type, this_chid, delete_chats)
export async function deleteCharacter(name, avatar, reloadCharacters = true) {
await clearChat();
$('#character_cross').click();
- this_chid = 'invalid-safety-id';
+ this_chid = undefined;
characters.length = 0;
name2 = systemUserName;
chat = [...safetychat];
diff --git a/public/scripts/RossAscends-mods.js b/public/scripts/RossAscends-mods.js
index 87cbbff2c..b007a0d7e 100644
--- a/public/scripts/RossAscends-mods.js
+++ b/public/scripts/RossAscends-mods.js
@@ -108,13 +108,22 @@ export function humanizeGenTime(total_gen_time) {
return time_spent;
}
-let parsedUA = null;
-try {
- parsedUA = Bowser.parse(navigator.userAgent);
-} catch {
- // In case the user agent is an empty string or Bowser can't parse it for some other reason
-}
+/**
+ * DON'T OPTIMIZE, don't change this to a const or let, it needs to be a var.
+ */
+var parsedUA = null;
+function getParsedUA() {
+ if (!parsedUA) {
+ try {
+ parsedUA = Bowser.parse(navigator.userAgent);
+ } catch {
+ // In case the user agent is an empty string or Bowser can't parse it for some other reason
+ }
+ }
+
+ return parsedUA;
+}
/**
* Checks if the device is a mobile device.
@@ -123,7 +132,7 @@ try {
export function isMobile() {
const mobileTypes = ['mobile', 'tablet'];
- return mobileTypes.includes(parsedUA?.platform?.type);
+ return mobileTypes.includes(getParsedUA()?.platform?.type);
}
export function shouldSendOnEnter() {
@@ -275,7 +284,7 @@ export async function favsToHotswap() {
//helpful instruction message if no characters are favorited
if (favs.length == 0) {
- container.html('Favorite characters to add them to HotSwaps');
+ container.html(`${DOMPurify.sanitize(container.attr('no_favs'))}`);
return;
}
@@ -285,7 +294,8 @@ export async function favsToHotswap() {
//changes input bar and send button display depending on connection status
function RA_checkOnlineStatus() {
if (online_status == 'no_connection') {
- $('#send_textarea').attr('placeholder', 'Not connected to API!'); //Input bar placeholder tells users they are not connected
+ const send_textarea = $('#send_textarea');
+ send_textarea.attr('placeholder', send_textarea.attr('no_connection_text')); //Input bar placeholder tells users they are not connected
$('#send_form').addClass('no-connection'); //entire input form area is red when not connected
$('#send_but').addClass('displayNone'); //send button is hidden when not connected;
$('#mes_continue').addClass('displayNone'); //continue button is hidden when not connected;
@@ -294,7 +304,8 @@ function RA_checkOnlineStatus() {
connection_made = false;
} else {
if (online_status !== undefined && online_status !== 'no_connection') {
- $('#send_textarea').attr('placeholder', 'Type a message, or /? for help'); //on connect, placeholder tells user to type message
+ const send_textarea = $('#send_textarea');
+ send_textarea.attr('placeholder', send_textarea.attr('connected_text')); //on connect, placeholder tells user to type message
$('#send_form').removeClass('no-connection');
$('#API-status-top').removeClass('fa-plug-circle-exclamation redOverlayGlow');
$('#API-status-top').addClass('fa-plug');
diff --git a/public/scripts/extensions.js b/public/scripts/extensions.js
index 8bc3f8769..26e9e58dd 100644
--- a/public/scripts/extensions.js
+++ b/public/scripts/extensions.js
@@ -1,5 +1,6 @@
-import { callPopup, eventSource, event_types, saveSettings, saveSettingsDebounced, getRequestHeaders, substituteParams, renderTemplate, animation_duration } from '../script.js';
+import { callPopup, eventSource, event_types, saveSettings, saveSettingsDebounced, getRequestHeaders, animation_duration } from '../script.js';
import { hideLoader, showLoader } from './loader.js';
+import { renderTemplate, renderTemplateAsync } from './templates.js';
import { isSubsetOf, setValueByPath } from './utils.js';
export {
getContext,
@@ -50,17 +51,31 @@ export function saveMetadataDebounced() {
}
/**
- * Provides an ability for extensions to render HTML templates.
+ * Provides an ability for extensions to render HTML templates synchronously.
* Templates sanitation and localization is forced.
* @param {string} extensionName Extension name
* @param {string} templateId Template ID
* @param {object} templateData Additional data to pass to the template
* @returns {string} Rendered HTML
+ *
+ * @deprecated Use renderExtensionTemplateAsync instead.
*/
export function renderExtensionTemplate(extensionName, templateId, templateData = {}, sanitize = true, localize = true) {
return renderTemplate(`scripts/extensions/${extensionName}/${templateId}.html`, templateData, sanitize, localize, true);
}
+/**
+ * Provides an ability for extensions to render HTML templates asynchronously.
+ * Templates sanitation and localization is forced.
+ * @param {string} extensionName Extension name
+ * @param {string} templateId Template ID
+ * @param {object} templateData Additional data to pass to the template
+ * @returns {Promise} Rendered HTML
+ */
+export function renderExtensionTemplateAsync(extensionName, templateId, templateData = {}, sanitize = true, localize = true) {
+ return renderTemplateAsync(`scripts/extensions/${extensionName}/${templateId}.html`, templateData, sanitize, localize, true);
+}
+
// Disables parallel updates
class ModuleWorkerWrapper {
constructor(callback) {
diff --git a/public/scripts/extensions/assets/index.js b/public/scripts/extensions/assets/index.js
index 66f5e55cb..a44b31727 100644
--- a/public/scripts/extensions/assets/index.js
+++ b/public/scripts/extensions/assets/index.js
@@ -4,7 +4,7 @@ TODO:
//const DEBUG_TONY_SAMA_FORK_MODE = true
import { getRequestHeaders, callPopup, processDroppedFiles } from '../../../script.js';
-import { deleteExtension, extensionNames, getContext, installExtension, renderExtensionTemplate } from '../../extensions.js';
+import { deleteExtension, extensionNames, getContext, installExtension, renderExtensionTemplateAsync } from '../../extensions.js';
import { executeSlashCommands } from '../../slash-commands.js';
import { getStringHash, isValidUrl } from '../../utils.js';
export { MODULE_NAME };
@@ -355,7 +355,8 @@ async function updateCurrentAssets() {
// This function is called when the extension is loaded
jQuery(async () => {
// This is an example of loading HTML from a file
- const windowHtml = $(renderExtensionTemplate(MODULE_NAME, 'window', {}));
+ const windowTemplate = await renderExtensionTemplateAsync(MODULE_NAME, 'window', {});
+ const windowHtml = $(windowTemplate);
const assetsJsonUrl = windowHtml.find('#assets-json-url-field');
assetsJsonUrl.val(ASSETS_JSON_URL);
@@ -366,7 +367,7 @@ jQuery(async () => {
const rememberKey = `Assets_SkipConfirm_${getStringHash(url)}`;
const skipConfirm = localStorage.getItem(rememberKey) === 'true';
- const template = renderExtensionTemplate(MODULE_NAME, 'confirm', { url });
+ const template = await renderExtensionTemplateAsync(MODULE_NAME, 'confirm', { url });
const confirmation = skipConfirm || await callPopup(template, 'confirm');
if (confirmation) {
diff --git a/public/scripts/extensions/expressions/index.js b/public/scripts/extensions/expressions/index.js
index 4ee04f552..15ad253be 100644
--- a/public/scripts/extensions/expressions/index.js
+++ b/public/scripts/extensions/expressions/index.js
@@ -1,6 +1,6 @@
import { callPopup, eventSource, event_types, getRequestHeaders, saveSettingsDebounced } from '../../../script.js';
import { dragElement, isMobile } from '../../RossAscends-mods.js';
-import { getContext, getApiUrl, modules, extension_settings, ModuleWorkerWrapper, doExtrasFetch, renderExtensionTemplate } from '../../extensions.js';
+import { getContext, getApiUrl, modules, extension_settings, ModuleWorkerWrapper, doExtrasFetch, renderExtensionTemplateAsync } from '../../extensions.js';
import { loadMovingUIState, power_user } from '../../power-user.js';
import { registerSlashCommand } from '../../slash-commands.js';
import { onlyUnique, debounce, getCharaFilename, trimToEndSentence, trimToStartSentence } from '../../utils.js';
@@ -594,7 +594,7 @@ async function moduleWorker() {
}
// non-characters not supported
- if (!context.groupId && (context.characterId === undefined || context.characterId === 'invalid-safety-id')) {
+ if (!context.groupId && context.characterId === undefined) {
removeExpression();
return;
}
@@ -977,6 +977,10 @@ async function getExpressionLabel(text) {
return getFallbackExpression();
}
+ if (extension_settings.expressions.translate && typeof window['translate'] === 'function') {
+ text = await window['translate'](text, 'en');
+ }
+
text = sampleClassifyText(text);
try {
@@ -1051,18 +1055,18 @@ async function validateImages(character, forceRedrawCached) {
if (spriteCache[character]) {
if (forceRedrawCached && $('#image_list').data('name') !== character) {
console.debug('force redrawing character sprites list');
- drawSpritesList(character, labels, spriteCache[character]);
+ await drawSpritesList(character, labels, spriteCache[character]);
}
return;
}
const sprites = await getSpritesList(character);
- let validExpressions = drawSpritesList(character, labels, sprites);
+ let validExpressions = await drawSpritesList(character, labels, sprites);
spriteCache[character] = validExpressions;
}
-function drawSpritesList(character, labels, sprites) {
+async function drawSpritesList(character, labels, sprites) {
let validExpressions = [];
$('#no_chat_expressions').hide();
$('#open_chat_expressions').show();
@@ -1074,18 +1078,20 @@ function drawSpritesList(character, labels, sprites) {
return [];
}
- labels.sort().forEach((item) => {
+ for (const item of labels.sort()) {
const sprite = sprites.find(x => x.label == item);
const isCustom = extension_settings.expressions.custom.includes(item);
if (sprite) {
validExpressions.push(sprite);
- $('#image_list').append(getListItem(item, sprite.path, 'success', isCustom));
+ const listItem = await getListItem(item, sprite.path, 'success', isCustom);
+ $('#image_list').append(listItem);
}
else {
- $('#image_list').append(getListItem(item, '/img/No-Image-Placeholder.svg', 'failure', isCustom));
+ const listItem = await getListItem(item, '/img/No-Image-Placeholder.svg', 'failure', isCustom);
+ $('#image_list').append(listItem);
}
- });
+ }
return validExpressions;
}
@@ -1095,12 +1101,12 @@ function drawSpritesList(character, labels, sprites) {
* @param {string} imageSrc Path to image
* @param {'success' | 'failure'} textClass 'success' or 'failure'
* @param {boolean} isCustom If expression is added by user
- * @returns {string} Rendered list item template
+ * @returns {Promise} Rendered list item template
*/
-function getListItem(item, imageSrc, textClass, isCustom) {
+async function getListItem(item, imageSrc, textClass, isCustom) {
const isFirefox = navigator.userAgent.toLowerCase().indexOf('firefox') > -1;
imageSrc = isFirefox ? `${imageSrc}?t=${Date.now()}` : imageSrc;
- return renderExtensionTemplate(MODULE_NAME, 'list-item', { item, imageSrc, textClass, isCustom });
+ return renderExtensionTemplateAsync(MODULE_NAME, 'list-item', { item, imageSrc, textClass, isCustom });
}
async function getSpritesList(name) {
@@ -1162,7 +1168,7 @@ async function renderFallbackExpressionPicker() {
async function getExpressionsList() {
// Return cached list if available
if (Array.isArray(expressionsList)) {
- return expressionsList;
+ return [...expressionsList, ...extension_settings.expressions.custom].filter(onlyUnique);
}
/**
@@ -1211,7 +1217,7 @@ async function getExpressionsList() {
}
const result = await resolveExpressionsList();
- return [...result, ...extension_settings.expressions.custom];
+ return [...result, ...extension_settings.expressions.custom].filter(onlyUnique);
}
async function setExpression(character, expression, force) {
@@ -1367,7 +1373,8 @@ function onClickExpressionImage() {
}
async function onClickExpressionAddCustom() {
- let expressionName = await callPopup(renderExtensionTemplate(MODULE_NAME, 'add-custom-expression'), 'input');
+ const template = await renderExtensionTemplateAsync(MODULE_NAME, 'add-custom-expression');
+ let expressionName = await callPopup(template, 'input');
if (!expressionName) {
console.debug('No custom expression name provided');
@@ -1406,14 +1413,15 @@ async function onClickExpressionAddCustom() {
}
async function onClickExpressionRemoveCustom() {
- const selectedExpression = $('#expression_custom').val();
+ const selectedExpression = String($('#expression_custom').val());
if (!selectedExpression) {
console.debug('No custom expression selected');
return;
}
- const confirmation = await callPopup(renderExtensionTemplate(MODULE_NAME, 'remove-custom-expression', { expression: selectedExpression }), 'confirm');
+ const template = await renderExtensionTemplateAsync(MODULE_NAME, 'remove-custom-expression', { expression: selectedExpression });
+ const confirmation = await callPopup(template, 'confirm');
if (!confirmation) {
console.debug('Custom expression removal cancelled');
@@ -1712,11 +1720,16 @@ async function fetchImagesNoCache() {
$('body').append(element);
}
async function addSettings() {
- $('#extensions_settings').append(renderExtensionTemplate(MODULE_NAME, 'settings'));
+ const template = await renderExtensionTemplateAsync(MODULE_NAME, 'settings');
+ $('#extensions_settings').append(template);
$('#expression_override_button').on('click', onClickExpressionOverrideButton);
$('#expressions_show_default').on('input', onExpressionsShowDefaultInput);
$('#expression_upload_pack_button').on('click', onClickExpressionUploadPackButton);
$('#expressions_show_default').prop('checked', extension_settings.expressions.showDefault).trigger('input');
+ $('#expression_translate').prop('checked', extension_settings.expressions.translate).on('input', function () {
+ extension_settings.expressions.translate = !!$(this).prop('checked');
+ saveSettingsDebounced();
+ });
$('#expression_local').prop('checked', extension_settings.expressions.local).on('input', function () {
extension_settings.expressions.local = !!$(this).prop('checked');
moduleWorker();
@@ -1743,7 +1756,7 @@ async function fetchImagesNoCache() {
$('#expression_custom_add').on('click', onClickExpressionAddCustom);
$('#expression_custom_remove').on('click', onClickExpressionRemoveCustom);
- $('#expression_fallback').on('change', onExpressionFallbackChanged)
+ $('#expression_fallback').on('change', onExpressionFallbackChanged);
}
// Pause Talkinghead to save resources when the ST tab is not visible or the window is minimized.
diff --git a/public/scripts/extensions/expressions/settings.html b/public/scripts/extensions/expressions/settings.html
index 4abc49fcc..b0b3b0bd3 100644
--- a/public/scripts/extensions/expressions/settings.html
+++ b/public/scripts/extensions/expressions/settings.html
@@ -10,6 +10,10 @@
Local server classification
+