Update ru-ru locale (#4522) * Work on tl * eslint fix * Update data-i18n attribute for expand view button * Add data-i18n to button --------- Co-authored-by: Yokayo <nonameutubecomm@gmail.com> Co-authored-by: Cohee <18619528+Cohee1207@users.noreply.github.com>

1e05eac7dfcc744086f92d6d0830c09db9be6e82

Yokayo <52032299+Yokayo@users.noreply.github.com>

Signed
9 files changed, +148 -51Ignore whitespace
public/index.html+1 -1
@@ -5340,7 +5340,7 @@
5340 <i class="fa-solid fa-wand-magic"></i>5340 <i class="fa-solid fa-wand-magic"></i>
5341 <span data-i18n="Auto-select">Auto-select</span>5341 <span data-i18n="Auto-select">Auto-select</span>
5342 </div>5342 </div>
5343 <label for="add_bg_button" id="add_background_button_top" class="menu_button menu_button_icon interactable" title="Add a new background">5343 <label for="add_bg_button" id="add_background_button_top" class="menu_button menu_button_icon interactable" data-i18n="[title]Add a new background" title="Add a new background">
5344 <i class="fa-solid fa-plus"></i>5344 <i class="fa-solid fa-plus"></i>
5345 <span data-i18n="Add Background">Add Background</span>5345 <span data-i18n="Add Background">Add Background</span>
5346 </label>5346 </label>
public/locales/ru-ru.json+120 -28
@@ -24,7 +24,7 @@
24 "Mirostat_Tau_desc": "Целевая перплексия.",24 "Mirostat_Tau_desc": "Целевая перплексия.",
25 "Mirostat_Eta_desc": "Скорость обучения Mirostat.",25 "Mirostat_Eta_desc": "Скорость обучения Mirostat.",
26 "Temperature Last": "Температура последней",26 "Temperature Last": "Температура последней",
27 "LLaMA / Mistral / Yi models only": "Только для моделей LLaMA / Mistral / Yi. Перед этим обязательно выберите подходящий токенизатор.\nПоследовательности, которых не должно быть на выходе.\nОдна на строку. Текст или [идентификаторы токенов].\nМногие токены имеют пробел впереди. Используйте счетчик токенов, если не уверены, что правильно их определяете.",27 "LLaMA / Mistral / Yi models only": "Только для моделей LLaMA / Mistral / Yi. Перед этим обязательно выберите подходящий токенизатор.\nПоследовательности, которых не должно быть на выходе.\nОдна на строку. Текст или [идентификаторы токенов].\nМногие токены имеют пробел впереди. Используйте счётчик токенов, если не уверены, что правильно их определяете.",
28 "Example: some text [42, 69, 1337]": "Пример:\nкакой-то текст\n[42, 69, 1337]",28 "Example: some text [42, 69, 1337]": "Пример:\nкакой-то текст\n[42, 69, 1337]",
29 "Classifier Free Guidance. More helpful tip coming soon": "Classifier Free Guidance. Чуть позже опишем более подробно",29 "Classifier Free Guidance. More helpful tip coming soon": "Classifier Free Guidance. Чуть позже опишем более подробно",
30 "Scale": "Scale",30 "Scale": "Scale",
@@ -91,7 +91,7 @@
91 "Impersonation prompt": "Промпт для перевоплощения",91 "Impersonation prompt": "Промпт для перевоплощения",
92 "Prompt that is used for Impersonation function": "Промпт, применяемый при генерации действий от лица пользователя",92 "Prompt that is used for Impersonation function": "Промпт, применяемый при генерации действий от лица пользователя",
93 "Logit Bias": "Смещение логитов",93 "Logit Bias": "Смещение логитов",
94 "Helps to ban or reenforce the usage of certain words": "Запрещает или поощряет использование определенных слов",94 "Helps to ban or reenforce the usage of certain words": "Запрещает или поощряет использование определенных слов.",
95 "View / Edit bias preset": "Просмотр / Редактирование пресета смещения",95 "View / Edit bias preset": "Просмотр / Редактирование пресета смещения",
96 "Add bias entry": "Добавить правило смещения",96 "Add bias entry": "Добавить правило смещения",
97 "Connect": "Подключиться",97 "Connect": "Подключиться",
@@ -201,8 +201,8 @@
201 "Bubbles": "Пузыри",201 "Bubbles": "Пузыри",
202 "No Blur Effect": "Отключить размытие",202 "No Blur Effect": "Отключить размытие",
203 "No Text Shadows": "Отключить тень текста",203 "No Text Shadows": "Отключить тень текста",
204 "Waifu Mode": "Режим вайфу",204 "Waifu Mode": "Режим визуальной новеллы",
205 "Message Timer": "Таймер сообщений",205 "Message Timer": "Длительность генерации сообщений",
206 "Model Icon": "Значки моделей",206 "Model Icon": "Значки моделей",
207 "Advanced Character Search": "Расширенный поиск по персонажам",207 "Advanced Character Search": "Расширенный поиск по персонажам",
208 "Allow {{char}}: in bot messages": "Показывать {{char}}: в ответах",208 "Allow {{char}}: in bot messages": "Показывать {{char}}: в ответах",
@@ -211,12 +211,12 @@
211 "Lorebook Import Dialog": "Показывать окно импорта лорбука",211 "Lorebook Import Dialog": "Показывать окно импорта лорбука",
212 "MUI Preset": "Пресет MUI:",212 "MUI Preset": "Пресет MUI:",
213 "If set in the advanced character definitions, this field will be displayed in the characters list.": "Если это поле задано в расширенных параметрах персонажа, оно будет отображаться в списке персонажей.",213 "If set in the advanced character definitions, this field will be displayed in the characters list.": "Если это поле задано в расширенных параметрах персонажа, оно будет отображаться в списке персонажей.",
214 "Relaxed API URLS": "Смягчённые адреса API",214 "Relaxed API URLS": "\"Ленивые\" адреса API",
215 "Custom CSS": "Пользовательский CSS",215 "Custom CSS": "Пользовательский CSS",
216 "Mancer Model": "Модель Mancer",216 "Mancer Model": "Модель Mancer",
217 "API Type": "Тип API",217 "API Type": "Тип API",
218 "Aphrodite API key": "Ключ от API Aphrodite",218 "Aphrodite API key": "Ключ от API Aphrodite",
219 "Relax message trim in Groups": "Мягкая обрезка сообщений в группах",219 "Relax message trim in Groups": "Смягчить требования к сообщениям ИИ в группах",
220 "Characters Hotswap": "HotSwap (смена персонажей на лету)",220 "Characters Hotswap": "HotSwap (смена персонажей на лету)",
221 "Request token probabilities": "Запрашивать вероятность токена",221 "Request token probabilities": "Запрашивать вероятность токена",
222 "Movable UI Panels": "Подвижные панели UI",222 "Movable UI Panels": "Подвижные панели UI",
@@ -229,10 +229,10 @@
229 "Text Shadow Width": "Размер теней текста",229 "Text Shadow Width": "Размер теней текста",
230 "Swipes": "Свайпы",230 "Swipes": "Свайпы",
231 "Miscellaneous": "Разное",231 "Miscellaneous": "Разное",
232 "Background Sound Only": "Только фоновый звук",232 "Background Sound Only": "Только фоновые звуки",
233 "Auto-load Last Chat": "Автозагрузка последнего чата",233 "Auto-load Last Chat": "Автозагрузка последнего чата",
234 "Auto-save Message Edits": "Автоматически сохранять отредактированные сообщения",234 "Auto-save Message Edits": "Автоматически сохранять отредактированные сообщения",
235 "Auto-fix Markdown": "Автоисправление разметки",235 "Auto-fix Markdown": "Автоисправление разметки Markdown",
236 "Auto-scroll Chat": "Автоматическая прокрутка чата",236 "Auto-scroll Chat": "Автоматическая прокрутка чата",
237 "Send on Enter": "Отправка на Enter",237 "Send on Enter": "Отправка на Enter",
238 "Debug Menu": "Меню отладки",238 "Debug Menu": "Меню отладки",
@@ -329,7 +329,7 @@
329 "Global Lore First": "Сначала глобальный лор",329 "Global Lore First": "Сначала глобальный лор",
330 "Recursive Scan": "Рекурсивное сканирование",330 "Recursive Scan": "Рекурсивное сканирование",
331 "Case Sensitive": "Учитывать регистр",331 "Case Sensitive": "Учитывать регистр",
332 "Alert On Overflow": "Оповещение о переполнении",332 "Alert On Overflow": "Оповещение о превышении бюджета",
333 "Use Probability": "Использовать вероятность",333 "Use Probability": "Использовать вероятность",
334 "Exclude from recursion": "Исключить из рекурсии",334 "Exclude from recursion": "Исключить из рекурсии",
335 "Entry Title/Memo": "Название или заметка о записи",335 "Entry Title/Memo": "Название или заметка о записи",
@@ -354,7 +354,7 @@
354 "Chat Background": "Фон чата",354 "Chat Background": "Фон чата",
355 "UI Background": "Фон UI",355 "UI Background": "Фон UI",
356 "Mad Lab Mode": "Режим безумца",356 "Mad Lab Mode": "Режим безумца",
357 "Show Message Token Count": "Счетчик токенов сообщения",357 "Show Message Token Count": "Показывать кол-во токенов в сообщении",
358 "Compact Input Area (Mobile)": "Компактная зона ввода",358 "Compact Input Area (Mobile)": "Компактная зона ввода",
359 "Zen Sliders": "Дзен слайдеры",359 "Zen Sliders": "Дзен слайдеры",
360 "UI Border": "Границы UI",360 "UI Border": "Границы UI",
@@ -363,7 +363,7 @@
363 "Tags as Folders": "Теги как папки",363 "Tags as Folders": "Теги как папки",
364 "Streaming FPS": "FPS для стриминга",364 "Streaming FPS": "FPS для стриминга",
365 "Gestures": "Жесты",365 "Gestures": "Жесты",
366 "Message IDs": "ID сообщений",366 "Message IDs": "Номера сообщений",
367 "Prefer Character Card Prompt": "Приоритет промпту из карточки персонажа",367 "Prefer Character Card Prompt": "Приоритет промпту из карточки персонажа",
368 "Prefer Character Card Jailbreak": "Приоритет джейлбрейку из карточки персонажа",368 "Prefer Character Card Jailbreak": "Приоритет джейлбрейку из карточки персонажа",
369 "Press Send to continue": "Кнопка отправки продолжает сообщение",369 "Press Send to continue": "Кнопка отправки продолжает сообщение",
@@ -372,7 +372,7 @@
372 "Never resize avatars": "Не менять размер аватарок",372 "Never resize avatars": "Не менять размер аватарок",
373 "Show avatar filenames": "Показывать названия файлов аватарок",373 "Show avatar filenames": "Показывать названия файлов аватарок",
374 "Import Card Tags": "Импортировать теги карточки",374 "Import Card Tags": "Импортировать теги карточки",
375 "Confirm message deletion": "Подтверждение удаления сообщений",375 "Confirm message deletion": "Спрашивать при удалении сообщений",
376 "Spoiler Free Mode": "Режим без спойлеров",376 "Spoiler Free Mode": "Режим без спойлеров",
377 "Auto-swipe": "Автоматические свайпы",377 "Auto-swipe": "Автоматические свайпы",
378 "Minimum generated message length": "Минимальная длина сгенерированных сообщений",378 "Minimum generated message length": "Минимальная длина сгенерированных сообщений",
@@ -392,11 +392,11 @@
392 "Always show the full list of the Message Actions context items for chat messages, instead of hiding them behind '...'": "Всегда показывать полный список действий с сообщением, а не прятать их за '...'.",392 "Always show the full list of the Message Actions context items for chat messages, instead of hiding them behind '...'": "Всегда показывать полный список действий с сообщением, а не прятать их за '...'.",
393 "Alternative UI for numeric sampling parameters with fewer steps": "Уменьшить кол-во шагов для параметров, регулируемых слайдерами.",393 "Alternative UI for numeric sampling parameters with fewer steps": "Уменьшить кол-во шагов для параметров, регулируемых слайдерами.",
394 "Entirely unrestrict all numeric sampling parameters": "Снять ограничения со всех числовых сэмплеров.",394 "Entirely unrestrict all numeric sampling parameters": "Снять ограничения со всех числовых сэмплеров.",
395 "Time the AI's message generation, and show the duration in the chat log": "Время генерации сообщений ИИ и его показ в журнале чата.",395 "Time the AI's message generation, and show the duration in the chat log": "Засекать время, за которое было сгенерировано сообщение, и отображать эту информацию в чате.",
396 "Show a timestamp for each message in the chat log": "Показывать временную метку для каждого сообщения в журнале чата.",396 "Show a timestamp for each message in the chat log": "Показывать временную метку для каждого сообщения в журнале чата.",
397 "Show an icon for the API that generated the message": "Показать значок API, сгенерировавшего сообщение.",397 "Show an icon for the API that generated the message": "Показывать значок API, сгенерировавшего сообщение.",
398 "Show sequential message numbers in the chat log": "Показывать порядковые номера сообщений в журнале чата.",398 "Show sequential message numbers in the chat log": "Показывать порядковые номера сообщений в чате.",
399 "Show the number of tokens in each message in the chat log": "Показать количество токенов в каждом сообщении в журнале чата.",399 "Show the number of tokens in each message in the chat log": "Показывать количество токенов в каждом сообщении в чате.",
400 "Single-row message input area. Mobile only, no effect on PC": "Однорядная область ввода сообщений. Только для мобильных устройств, на ПК не работает.",400 "Single-row message input area. Mobile only, no effect on PC": "Однорядная область ввода сообщений. Только для мобильных устройств, на ПК не работает.",
401 "In the Character Management panel, show quick selection buttons for favorited characters": "На панели управления персонажами будут отображены кнопки быстрого выбора для избранных персонажей.",401 "In the Character Management panel, show quick selection buttons for favorited characters": "На панели управления персонажами будут отображены кнопки быстрого выбора для избранных персонажей.",
402 "Show tagged character folders in the character list": "Отобразить теговые папки с персонажами в списке персонажей.",402 "Show tagged character folders in the character list": "Отобразить теговые папки с персонажами в списке персонажей.",
@@ -404,7 +404,7 @@
404 "Only play a sound when ST's browser tab is unfocused": "Воспроизводить звук только тогда, когда вкладка браузера ST не выбрана.",404 "Only play a sound when ST's browser tab is unfocused": "Воспроизводить звук только тогда, когда вкладка браузера ST не выбрана.",
405 "Reduce the formatting requirements on API URLs": "Снижение требований к форматированию URL-адресов API.",405 "Reduce the formatting requirements on API URLs": "Снижение требований к форматированию URL-адресов API.",
406 "Ask to import the World Info/Lorebook for every new character with embedded lorebook. If unchecked, a brief message will be shown instead": "Спрашивать разрешение на импорт лорбука для всех персонажей со встроенным лорбуком. При выключенной опции вместо этого будет показываться короткое сообщение",406 "Ask to import the World Info/Lorebook for every new character with embedded lorebook. If unchecked, a brief message will be shown instead": "Спрашивать разрешение на импорт лорбука для всех персонажей со встроенным лорбуком. При выключенной опции вместо этого будет показываться короткое сообщение",
407 "Restore unsaved user input on page refresh": "Восстановление несохраненного пользовательского запроса при обновлении страницы.",407 "Restore unsaved user input on page refresh": "Восстановление несохраненного пользовательского сообщения при обновлении страницы.",
408 "Allow repositioning certain UI elements by dragging them. PC only, no effect on mobile": "Позволяет перемещать некоторые элементы интерфейса путем их перетаскивания. Только для ПК, на телефонах не работает.",408 "Allow repositioning certain UI elements by dragging them. PC only, no effect on mobile": "Позволяет перемещать некоторые элементы интерфейса путем их перетаскивания. Только для ПК, на телефонах не работает.",
409 "MovingUI preset. Predefined/saved draggable positions": "Пресет для MovingUI. Предопределенные/сохраненные позиции для перетаскивания.",409 "MovingUI preset. Predefined/saved draggable positions": "Пресет для MovingUI. Предопределенные/сохраненные позиции для перетаскивания.",
410 "Save movingUI changes to a new file": "Сохранение изменений MovingUI в новый файл.",410 "Save movingUI changes to a new file": "Сохранение изменений MovingUI в новый файл.",
@@ -419,7 +419,7 @@
419 "Show arrow buttons on the last in-chat message to generate alternative AI responses. Both PC and mobile": "Показывать кнопки со стрелками на последнем сообщении в чате, чтобы генерировать альтернативные ответы ИИ. Как для ПК, так и для мобильных устройств.",419 "Show arrow buttons on the last in-chat message to generate alternative AI responses. Both PC and mobile": "Показывать кнопки со стрелками на последнем сообщении в чате, чтобы генерировать альтернативные ответы ИИ. Как для ПК, так и для мобильных устройств.",
420 "Allow using swiping gestures on the last in-chat message to trigger swipe generation. Mobile only, no effect on PC": "Позволяет использовать жесты смахивания на последнем сообщении в чате, чтобы вызвать альтернативную генерацию. Только для мобильных устройств, на ПК не работает.",420 "Allow using swiping gestures on the last in-chat message to trigger swipe generation. Mobile only, no effect on PC": "Позволяет использовать жесты смахивания на последнем сообщении в чате, чтобы вызвать альтернативную генерацию. Только для мобильных устройств, на ПК не работает.",
421 "Save edits to messages without confirmation as you type": "Сохранять правки в сообщениях без подтверждения по мере ввода текста.",421 "Save edits to messages without confirmation as you type": "Сохранять правки в сообщениях без подтверждения по мере ввода текста.",
422 "Skip encoding and characters in message text, allowing a subset of HTML markup as well as Markdown": "Не кодировать символы < и > в тексте сообщения, что позволяет использовать подмножество HTML-разметки, а также Markdown.",422 "Skip encoding and characters in message text, allowing a subset of HTML markup as well as Markdown": "Не кодировать символы < и > в тексте сообщения, что позволяет использовать часть возможностей HTML-разметки, а также разметку Markdown.",
423 "Allow AI messages in groups to contain lines spoken by other group members": "Разрешить ИИ в группах генерировать строчки за других участников группы в своих сообщениях.",423 "Allow AI messages in groups to contain lines spoken by other group members": "Разрешить ИИ в группах генерировать строчки за других участников группы в своих сообщениях.",
424 "Requests logprobs from the API for the Token Probabilities feature": "Запросить логпробы из API для функции Token Probabilities.",424 "Requests logprobs from the API for the Token Probabilities feature": "Запросить логпробы из API для функции Token Probabilities.",
425 "Automatically reject and re-generate AI message based on configurable criteria": "Автоматическое отклонение и повторная генерация сообщений AI на основе настраиваемых критериев.",425 "Automatically reject and re-generate AI message based on configurable criteria": "Автоматическое отклонение и повторная генерация сообщений AI на основе настраиваемых критериев.",
@@ -549,7 +549,7 @@
549 "Character Management": "Управление персонажами",549 "Character Management": "Управление персонажами",
550 "Locked = Character Management panel will stay open": "Закреплено = Панель управление персонажами останется открытой",550 "Locked = Character Management panel will stay open": "Закреплено = Панель управление персонажами останется открытой",
551 "Select/Create Characters": "Выбрать/Создать персонажа",551 "Select/Create Characters": "Выбрать/Создать персонажа",
552 "Token counts may be inaccurate and provided just for reference.": "Счетчик токенов может быть неточным, используйте как ориентир",552 "Token counts may be inaccurate and provided just for reference.": "Счётчик токенов может быть неточным, используйте как ориентир",
553 "Click to select a new avatar for this character": "Нажмите чтобы выбрать новый аватар для этого персонажа",553 "Click to select a new avatar for this character": "Нажмите чтобы выбрать новый аватар для этого персонажа",
554 "Example: [{{user}} is a 28-year-old Romanian cat girl.]": "Пример:\n [{{user}} is a 28-year-old Romanian cat girl.]",554 "Example: [{{user}} is a 28-year-old Romanian cat girl.]": "Пример:\n [{{user}} is a 28-year-old Romanian cat girl.]",
555 "Toggle grid view": "Сменить вид сетки",555 "Toggle grid view": "Сменить вид сетки",
@@ -1024,10 +1024,10 @@
1024 "image_inlining_hint_2": ". Также это можно сделать через меню",1024 "image_inlining_hint_2": ". Также это можно сделать через меню",
1025 "image_inlining_hint_3": ".",1025 "image_inlining_hint_3": ".",
1026 "Contest Winners": "Победители конкурса",1026 "Contest Winners": "Победители конкурса",
1027 "Rename background": "Переименовать фон",1027 "Rename Background": "Переименовать фон",
1028 "Lock": "Закрепить",1028 "Lock": "Закрепить",
1029 "Unlock": "Открепить",1029 "Unlock": "Открепить",
1030 "Delete background": "Удалить фон",1030 "Delete Background": "Удалить фон",
1031 "Export all": "Экспортировать всё",1031 "Export all": "Экспортировать всё",
1032 "Export all your prompts to a file": "Экспортировать все промпты в виде файла",1032 "Export all your prompts to a file": "Экспортировать все промпты в виде файла",
1033 "Don't add character names.": "Не добавлять имя персонажа",1033 "Don't add character names.": "Не добавлять имя персонажа",
@@ -1621,7 +1621,7 @@
1621 "Auxiliary": "Вспомогательный",1621 "Auxiliary": "Вспомогательный",
1622 "Post-History Instructions": "Инструкции после истории",1622 "Post-History Instructions": "Инструкции после истории",
1623 "Current persona updated": "Текущая персона изменена",1623 "Current persona updated": "Текущая персона изменена",
1624 "Your messages will now be sent as ${0}": "Ваши сообщения будут отправляться от лица ${0}",1624 "Your messages will now be sent as ${0}": "Теперь вы будете подписываться как ${0}",
1625 "Copied!": "Скопировано!",1625 "Copied!": "Скопировано!",
1626 "Are you sure you want to delete this message?": "Вы точно хотите удалить это сообщение?",1626 "Are you sure you want to delete this message?": "Вы точно хотите удалить это сообщение?",
1627 "Delete Message": "Удалить сообщение",1627 "Delete Message": "Удалить сообщение",
@@ -1977,7 +1977,7 @@
1977 "Importing Tags": "Импорт тегов",1977 "Importing Tags": "Импорт тегов",
1978 "Couldn't import tags:": "Не удалось импортировать теги:",1978 "Couldn't import tags:": "Не удалось импортировать теги:",
1979 "Allow fallback models": "Разрешить резервные модели",1979 "Allow fallback models": "Разрешить резервные модели",
1980 "Allow fallback providers": "Разрешить fallback-провайдеров",1980 "Allow fallback providers": "Разрешить резервных провайдеров",
1981 "To use instruct formatting, switch to OpenRouter under Text Completion API.": "Переключитесь на OpenRouter в Text Completion API, чтобы использовать форматирование Instruct-режима.",1981 "To use instruct formatting, switch to OpenRouter under Text Completion API.": "Переключитесь на OpenRouter в Text Completion API, чтобы использовать форматирование Instruct-режима.",
1982 "Select providers. No selection = all providers.": "Выберите провайдера. Нет выбранного = выбраны все.",1982 "Select providers. No selection = all providers.": "Выберите провайдера. Нет выбранного = выбраны все.",
1983 "Model Providers": "Провайдеры моделей",1983 "Model Providers": "Провайдеры моделей",
@@ -2406,7 +2406,7 @@
2406 "${0} is a system assistant. Choose another character.": "Персонаж ${0} выбран в качестве системного помощника. Выберите другого.",2406 "${0} is a system assistant. Choose another character.": "Персонаж ${0} выбран в качестве системного помощника. Выберите другого.",
2407 "Set ${0} as your assistant.": "Персонаж ${0} установлен в качестве помощника.",2407 "Set ${0} as your assistant.": "Персонаж ${0} установлен в качестве помощника.",
2408 "${0} is no longer your assistant.": "Персонаж ${0} снят с роли помощника.",2408 "${0} is no longer your assistant.": "Персонаж ${0} снят с роли помощника.",
2409 "Manage API keys": "Управление ключами",2409 "Manage API keys": "Менеджер ключей",
2410 "Key:": "Ключ:",2410 "Key:": "Ключ:",
2411 "No secrets saved.": "Ключей нет.",2411 "No secrets saved.": "Ключей нет.",
2412 "Add Secret": "Добавить ключ",2412 "Add Secret": "Добавить ключ",
@@ -2433,7 +2433,7 @@
2433 "prompt_post_processing_semi_tools": "Semi-strict (чередовать роли, функции включены)",2433 "prompt_post_processing_semi_tools": "Semi-strict (чередовать роли, функции включены)",
2434 "prompt_post_processing_strict_tools": "Strict (чередовать роли, сначала пользователь; функции включены)",2434 "prompt_post_processing_strict_tools": "Strict (чередовать роли, сначала пользователь; функции включены)",
2435 "prompt_post_processing_single": "Только одно сообщение пользователя (функции отключены)",2435 "prompt_post_processing_single": "Только одно сообщение пользователя (функции отключены)",
2436 "prompt_post_processing_merge_tools": "Объединять идущие подряд сообщение с одной ролью (функции включены)",2436 "prompt_post_processing_merge_tools": "Объединять идущие подряд сообщения с одной ролью (функции включены)",
2437 "completions note prefix": "Постфикс ",2437 "completions note prefix": "Постфикс ",
2438 "suffix will be added automatically.": "будет добавлен автоматически.",2438 "suffix will be added automatically.": "будет добавлен автоматически.",
2439 "Tabby Model": "Модель Tabby",2439 "Tabby Model": "Модель Tabby",
@@ -2548,7 +2548,7 @@
2548 "Default (top of context)": "По умолчанию (наверху контекста)",2548 "Default (top of context)": "По умолчанию (наверху контекста)",
2549 "Bind Model to Templates": "Связать модель с шаблоном",2549 "Bind Model to Templates": "Связать модель с шаблоном",
2550 "Persona Auto Selected": "Персона автоматически изменена",2550 "Persona Auto Selected": "Персона автоматически изменена",
2551 "Auto-selected persona based on ${0} connection.<br />Your messages will now be sent as ${1}.": "Персона выбрана автоматически на основе следующего критерия: ${0}<br />Ваши сообщения будут отправляться от лица ${1}",2551 "Auto-selected persona based on ${0} connection.<br />Your messages will now be sent as ${1}.": "Персона выбрана автоматически на основе следующего критерия: ${0}<br />Теперь вы будете подписываться как ${1}",
2552 "Filter to specific generation types.": "Применять промпт только при определённых типах генерации.",2552 "Filter to specific generation types.": "Применять промпт только при определённых типах генерации.",
2553 "Quiet": "Тихая",2553 "Quiet": "Тихая",
2554 "Swipe": "Свайп",2554 "Swipe": "Свайп",
@@ -2601,7 +2601,7 @@
2601 "sd_snap_txt": "Корректировать автоматически выбранное разрешение",2601 "sd_snap_txt": "Корректировать автоматически выбранное разрешение",
2602 "sd_snap": "Подгонять картинки с фиксированным соотношением сторон (фоны, портреты) к ближайшему известному разрешению (рекомендуется для SDXL)",2602 "sd_snap": "Подгонять картинки с фиксированным соотношением сторон (фоны, портреты) к ближайшему известному разрешению (рекомендуется для SDXL)",
2603 "Source": "API",2603 "Source": "API",
2604 "Hint: Save an API key in AI Horde API settings to use it here.": "Подсказка: сохраните ключ от API в настройках API на сайте AI Horde, чтобы использовать его автоматически.",2604 "Hint: Save an API key in AI Horde API settings to use it here.": "Совет: сохраните ключ от API в настройках API AI Horde, чтобы автоматически подтянуть его сюда.",
2605 "Sanitize prompts (recommended)": "Прогонять промпты через санитайзер (рекомендуется)",2605 "Sanitize prompts (recommended)": "Прогонять промпты через санитайзер (рекомендуется)",
2606 "Sampling method": "Метод сэмплинга",2606 "Sampling method": "Метод сэмплинга",
2607 "Resolution": "Целевое разрешение",2607 "Resolution": "Целевое разрешение",
@@ -2652,5 +2652,97 @@
2652 "sd_auto_auth_warning_1": " запускайте Stable Diffusion с флагом",2652 "sd_auto_auth_warning_1": " запускайте Stable Diffusion с флагом",
2653 "sd_auto_auth_warning_2": "! Адрес SD должен быть доступен с сервера SillyTavern.",2653 "sd_auto_auth_warning_2": "! Адрес SD должен быть доступен с сервера SillyTavern.",
2654 "Upscale by": "Множитель апскейлинга",2654 "Upscale by": "Множитель апскейлинга",
2655 "Hires steps (2nd pass)": "Кол-во шагов Hires (на втором проходе)"2655 "Hires steps (2nd pass)": "Кол-во шагов Hires (на втором проходе)",
2656 "Disallow embedded media from other domains in chat messages": "Запретить медиафайлы со сторонних доменов в сообщениях чата.",
2657 "Add Background": "Добавить фон",
2658 "Add a new background": "Добавить новый фон",
2659 "Backgrounds": "Фоны",
2660 "ext_regex_debugger_desc": "Дополнительные инструменты отладки",
2661 "ext_regex_debugger": "Отладка",
2662 "ext_regex_presets": "Пресеты",
2663 "ext_regex_presets_desc": "Переключайтесь между разными группами активных рег. выражений.",
2664 "ext_regex_preset_create": "Создать новый пресет",
2665 "ext_regex_preset_update": "Обновить текущий пресет",
2666 "ext_regex_preset_apply": "Перезагрузить текущий пресет",
2667 "ext_regex_preset_delete": "Удалить текущий пресет",
2668 "[No presets saved]": "[Пресет не выбран]",
2669 "Enter a name for the new regex preset:": "Введите имя нового пресета:",
2670 "ext_regex_debugger_active_rules": "Активные скрипты",
2671 "No regex rules found.": "Скриптов не найдено.",
2672 "ext_regex_debugger_testing_area": "Зона тестирования",
2673 "ext_regex_debugger_run_test": "Протестировать",
2674 "ext_regex_debugger_display_replace": "Заменить",
2675 "ext_regex_debugger_display_highlight": "Посдветить",
2676 "ext_regex_debugger_render_text": "Отображать как текст",
2677 "ext_regex_debugger_render_message": "Отображать как сообщение",
2678 "ext_regex_debugger_save_order": "Сохранить порядок",
2679 "ext_regex_debugger_save_order_help": "Сохранить текущий порядок скриптов",
2680 "Regex script order saved!": "Порядок сохранён!",
2681 "ext_regex_debugger_raw_input": "Исходный текст",
2682 "ext_regex_debugger_step_by_step": "Пошаговая трансформация",
2683 "ext_regex_debugger_final_output": "Итоговый результат",
2684 "Expand view": "Развернуть",
2685 "Global Rules": "Глобальные скрипты",
2686 "Scoped Rules": "Локальные скрипты",
2687 "Edit Rule": "Редактировать скрипт",
2688 "Global": "Глобальный",
2689 "Scoped": "Локальный",
2690 "Captured:": "Зафиксировано:",
2691 "Added:": "Добавлено:",
2692 "Removed:": "Удалено:",
2693 "Total Captured:": "Всего зафиксировано:",
2694 "Total Added:": "Всего добавлено:",
2695 "Total Removed:": "Всего удалено:",
2696 "ext_regex_debugger_run_test_help": "Прогнать текст через данный набор скриптов",
2697 "After:": "После:",
2698 "Are you sure you want to delete this regex preset?": "Точно хотите удалить этот пресет?",
2699 "Regex preset updated": "Пресет обновлён",
2700 "Regex preset saved": "Пресет сохранён",
2701 "Regex preset deleted": "Пресет удалён",
2702 "Enhance": "Улучшить",
2703 "Enables prompt enhancing (passes prompts through an LLM to add detail).": "Включить улучшение промпта (дополнительно прогоняет промпт через LLM, чтобы добавить больше деталей)",
2704 "Use ADetailer (Face)": "Использовать ADetailer (для лиц)",
2705 "You can find your API key in the Stability AI dashboard.": "Ключ от API можно найти на дашборде на сайте Stability AI",
2706 "sd_stability_style_preset": "Стиль",
2707 "Avoid spending Anlas": "Стараться не тратить Anlas",
2708 "Automatically adjust generation parameters to ensure free image generations.": "Автоматически подгонять параметры таким образом, чтобы генерация получалась бесплатной.",
2709 "View my Anlas": "Узнать баланс Anlas",
2710 "Hint: Save an API key in the NovelAI API settings to use it here.": "Совет: сохраните API-ключ в настройках API NovelAI, чтобы автоматически подтянуть его сюда.",
2711 "Hint: Save an API key in the Hugging Face (Text Completion) API settings to use it here.": "Совет: сохраните API-ключ в настройках API HuggingFace (раздел Text Completion), чтобы автоматически подтянуть его сюда.",
2712 "Model ID": "Идентификатор модели",
2713 "<Enter Model ID above>": "<Введите идентификатор в поле выше>",
2714 "Hint: Save an API key in the NanoGPT (Chat Completion) API settings to use it here.": "Совет: сохраните API-ключ в настройках API NanoGPT (раздел Chat Completion), чтобы автоматически подтянуть его сюда.",
2715 "Hint: Save an API key in the Electron Hub (Chat Completion) API settings to use it here.": "Совет: сохраните API-ключ в настройках API Electron Hub (раздел Chat Completion), чтобы автоматически подтянуть его сюда.",
2716 "sd_drawthings_auth_txt": " запускайте DrawThings только со включенным в UI флажком HTTP API! Сервер должен быть доступен с хоста, на котором запущена SillyTavern.",
2717 "Send me a picture of:": "Пришли мне...",
2718 "sd_Yourself": "Свою фотографию",
2719 "sd_Your_Face": "Своё лицо",
2720 "sd_Me": "Мою фотографию",
2721 "sd_The_Whole_Story": "Изображение всей истории",
2722 "sd_The_Last_Message": "Изображение посл. сообщения",
2723 "sd_Raw_Last_Message": "Изображение посл. сообщения до обработки",
2724 "sd_Background": "Фотографию фона",
2725 "ext_regex_title": "Регулярные выражения",
2726 "ext_sum_title": "Саммари (пересказ)",
2727 "Image Generation": "Генерация изображений",
2728 "ext_translate_title": "Перевод чата",
2729 "Select TTS Provider": "Выберите TTS-движок",
2730 "tts_enabled": "Включить",
2731 "Narrate user messages": "Озвучивать сообщения пользователя",
2732 "Auto Generation": "Автоматическая генерация",
2733 "Narrate by paragraphs (when streaming)": "Озвучивать по параграфу за раз (при вкл. стриминге)",
2734 "Narrate by paragraphs (when not streaming)": "Озвучивать по параграфу за раз (при выкл. стриминге)",
2735 "Only narrate quotes": "Озвучивать только текст \"в кавычках\"",
2736 "Ignore text, even quotes, inside asterisk": "Не озвучивать *текст, даже \"в кавычках\", если он внутри звёздочек*",
2737 "Narrate only the translated text": "Озвучивать только переведённый текст",
2738 "Skip codeblocks": "Пропускать блоки кода",
2739 "Skip tagged blocks": "Пропускать блоки с <тегами>",
2740 "Pass Asterisks to TTS Engine": "Передавать звёздочки TTS-движку",
2741 "Different voices for quotes and text inside asterisks": "Разные голоса для \"кавычек\", *звёздочек* и остального текста.",
2742 "Requires auto generation to be enabled.": "Работает только при включенной функции \"Автоматическая генерация\"",
2743 "tts_refresh": "Обновить",
2744 "Uses the voices provided by your operating system": "Используем стандартные голоса вашей ОС",
2745 "Your browser or operating system doesn't support speech synthesis": "Ваш браузер либо ОС не поддерживают синтез речи",
2746 "Works best when: Pass Asterisks to TTS Engine is enabled, and both Only narrate quotes and Ignore *text, even 'quotes', inside asterisks* are disabled.": "Работает лучше всего, когда: одновременно включена опция \"Передавать звёздочки TTS-движку\", а также отключены обе опции: \"Не озвучивать *текст, даже \"в кавычках\", если он внутри звёздочек*\", и \"Озвучивать только текст \"в кавычках\"\"",
2747 "Available voices": "Доступные голоса"
2656}2748}
public/scripts/extensions/regex/debugger.html+5 -1
@@ -11,6 +11,7 @@
11 <button11 <button
12 id="regex_debugger_save_order"12 id="regex_debugger_save_order"
13 class="menu_button menu_button_icon interactable"13 class="menu_button menu_button_icon interactable"
14 data-i18n="[title]ext_regex_debugger_save_order_help"
14 title="Save current rule order"15 title="Save current rule order"
15 tabindex="0"16 tabindex="0"
16 >17 >
@@ -53,6 +54,7 @@
53 <button54 <button
54 id="regex_debugger_run_test"55 id="regex_debugger_run_test"
55 class="menu_button menu_button_icon interactable"56 class="menu_button menu_button_icon interactable"
57 data-i18n="[title]ext_regex_debugger_run_test_help"
56 title="Run the test pipeline"58 title="Run the test pipeline"
57 tabindex="0"59 tabindex="0"
58 >60 >
@@ -115,6 +117,7 @@
115 <div117 <div
116 id="regex_debugger_expand_steps"118 id="regex_debugger_expand_steps"
117 class="menu_button menu_button_icon"119 class="menu_button menu_button_icon"
120 data-i18n="[title]Expand view"
118 title="Expand view"121 title="Expand view"
119 >122 >
120 <i class="fa-solid fa-expand"></i>123 <i class="fa-solid fa-expand"></i>
@@ -132,6 +135,7 @@
132 <div135 <div
133 id="regex_debugger_expand_final"136 id="regex_debugger_expand_final"
134 class="menu_button menu_button_icon"137 class="menu_button menu_button_icon"
138 data-i18n="[title]Expand view"
135 title="Expand view"139 title="Expand view"
136 >140 >
137 <i class="fa-solid fa-expand"></i>141 <i class="fa-solid fa-expand"></i>
@@ -158,7 +162,7 @@
158 <code class="rule-regex"></code>162 <code class="rule-regex"></code>
159 <small class="rule-scope"></small>163 <small class="rule-scope"></small>
160 </div>164 </div>
161 <div class="menu_button menu_button_icon edit_rule" title="Edit Rule">165 <div class="menu_button menu_button_icon edit_rule" data-i18n="[title]Edit Rule" title="Edit Rule">
162 <i class="fa-solid fa-pencil"></i>166 <i class="fa-solid fa-pencil"></i>
163 </div>167 </div>
164 </li>168 </li>
public/scripts/extensions/regex/index.js+7 -7
@@ -969,7 +969,7 @@ function populateDebuggerRuleList(container) {
969969
970 const allScripts = getRegexScripts();970 const allScripts = getRegexScripts();
971 if (!allScripts || allScripts.length === 0) {971 if (!allScripts || allScripts.length === 0) {
972 rulesContainer.append('<div class="regex-debugger-no-rules">No regex rules found.</div>');972 rulesContainer.append('<div class="regex-debugger-no-rules">' + t`No regex rules found.` + '</div>');
973 return;973 return;
974 }974 }
975975
@@ -1002,7 +1002,7 @@ function populateDebuggerRuleList(container) {
1002 ruleElement.find('.rule-name').text(script.scriptName);1002 ruleElement.find('.rule-name').text(script.scriptName);
1003 ruleElement.find('.rule-regex').text(script.findRegex);1003 ruleElement.find('.rule-regex').text(script.findRegex);
1004 // @ts-ignore1004 // @ts-ignore
1005 ruleElement.find('.rule-scope').text(script.isScoped ? 'Scoped' : 'Global');1005 ruleElement.find('.rule-scope').text(script.isScoped ? t`Scoped` : t`Global`);
1006 ruleElement.find('.rule-enabled').prop('checked', !script.disabled);1006 ruleElement.find('.rule-enabled').prop('checked', !script.disabled);
1007 // @ts-ignore1007 // @ts-ignore
1008 ruleElement.find('.edit_rule').on('click', () => onRegexEditorOpenClick(script.id, script.isScoped));1008 ruleElement.find('.edit_rule').on('click', () => onRegexEditorOpenClick(script.id, script.isScoped));
@@ -1035,14 +1035,14 @@ function populateDebuggerRuleList(container) {
1035 };1035 };
10361036
1037 if (globalScripts.length > 0) {1037 if (globalScripts.length > 0) {
1038 rulesContainer.append('<div class="list-header regex-debugger-list-header">Global Rules</div>');1038 rulesContainer.append('<div class="list-header regex-debugger-list-header">' + t`Global Rules` + '</div>');
1039 const globalList = $('<ul id="regex_debugger_rules_global" class="sortable-list"></ul>');1039 const globalList = $('<ul id="regex_debugger_rules_global" class="sortable-list"></ul>');
1040 globalScripts.forEach(script => globalList.append(renderRule(script)));1040 globalScripts.forEach(script => globalList.append(renderRule(script)));
1041 rulesContainer.append(globalList);1041 rulesContainer.append(globalList);
1042 }1042 }
10431043
1044 if (scopedScripts.length > 0) {1044 if (scopedScripts.length > 0) {
1045 rulesContainer.append('<div class="list-header regex-debugger-list-header">Scoped Rules</div>');1045 rulesContainer.append('<div class="list-header regex-debugger-list-header">' + t`Scoped Rules` + '</div>');
1046 const scopedList = $('<ul id="regex_debugger_rules_scoped" class="sortable-list"></ul>');1046 const scopedList = $('<ul id="regex_debugger_rules_scoped" class="sortable-list"></ul>');
1047 scopedScripts.forEach(script => scopedList.append(renderRule(script)));1047 scopedScripts.forEach(script => scopedList.append(renderRule(script)));
1048 rulesContainer.append(scopedList);1048 rulesContainer.append(scopedList);
@@ -1106,9 +1106,9 @@ async function onRegexDebuggerOpenClick() {
1106 // Set the ID on the TOP-LEVEL element that is being appended.1106 // Set the ID on the TOP-LEVEL element that is being appended.
1107 stepElement.find('>:first-child').attr('id', `step-result-${script.id}`);1107 stepElement.find('>:first-child').attr('id', `step-result-${script.id}`);
1108 const stepHeader = stepElement.find('.step-header');1108 const stepHeader = stepElement.find('.step-header');
1109 stepHeader.find('strong').text(`After: ${script.scriptName}`);1109 stepHeader.find('strong').text(t`After:` + ` ${script.scriptName}`);
11101110
1111 const metricsHtml = `<span class="step-metrics">Captured: ${result.charsCaptured}, Added: +${result.charsAdded}, Removed: -${result.charsRemoved}</span>`;1111 const metricsHtml = '<span class="step-metrics">' + t`Captured:` + ` ${result.charsCaptured}, ` + t`Added:` + ` +${result.charsAdded}, ` + t`Removed:` + ` -${result.charsRemoved}</span>`;
1112 stepHeader.append(metricsHtml);1112 stepHeader.append(metricsHtml);
11131113
1114 if (displayMode === 'highlight') {1114 if (displayMode === 'highlight') {
@@ -1128,7 +1128,7 @@ async function onRegexDebuggerOpenClick() {
11281128
1129 const summaryHtml = `1129 const summaryHtml = `
1130 <div id="regex_debugger_final_summary" class="regex-debugger-summary">1130 <div id="regex_debugger_final_summary" class="regex-debugger-summary">
1131 <strong>Total Captured:</strong> ${totalCharsCaptured} | <strong>Total Added:</strong> +${totalCharsAdded} | <strong>Total Removed:</strong> -${totalCharsRemoved}1131 <strong>` + t`Total Captured:` + `</strong> ${totalCharsCaptured} | <strong>` + t`Total Added:` + `</strong> +${totalCharsAdded} | <strong>` + t`Total Removed:` + `</strong> -${totalCharsRemoved}
1132 </div>1132 </div>
1133 `;1133 `;
1134 finalOutput.before(summaryHtml);1134 finalOutput.before(summaryHtml);
public/scripts/extensions/stable-diffusion/dropdown.html+1 -1
@@ -1,6 +1,6 @@
1<div id="sd_dropdown">1<div id="sd_dropdown">
2 <ul class="list-group">2 <ul class="list-group">
3 <span>Send me a picture of:</span>3 <span data-i18n="Send me a picture of:">Send me a picture of:</span>
4 <li class="list-group-item" id="sd_you" data-value="you" data-i18n="sd_Yourself">Yourself</li>4 <li class="list-group-item" id="sd_you" data-value="you" data-i18n="sd_Yourself">Yourself</li>
5 <li class="list-group-item" id="sd_face" data-value="face" data-i18n="sd_Your_Face">Your Face</li>5 <li class="list-group-item" id="sd_face" data-value="face" data-i18n="sd_Your_Face">Your Face</li>
6 <li class="list-group-item" id="sd_me" data-value="me" data-i18n="sd_Me">Me</li>6 <li class="list-group-item" id="sd_me" data-value="me" data-i18n="sd_Me">Me</li>
public/scripts/extensions/stable-diffusion/index.js+1 -1
@@ -1705,7 +1705,7 @@ async function loadModels() {
1705 models = await loadStabilityModels();1705 models = await loadStabilityModels();
1706 break;1706 break;
1707 case sources.huggingface:1707 case sources.huggingface:
1708 models = [{ value: '', text: '<Enter Model ID above>' }];1708 models = [{ value: '', text: t`<Enter Model ID above>` }];
1709 break;1709 break;
1710 case sources.electronhub:1710 case sources.electronhub:
1711 models = await loadElectronHubModels();1711 models = await loadElectronHubModels();
public/scripts/extensions/stable-diffusion/settings.html+6 -6
@@ -90,15 +90,15 @@
90 <i><b data-i18n="Important:">Important:</b></i><i data-i18n="sd_drawthings_auth_txt"> run DrawThings app with HTTP API switch enabled in the UI! The server must be accessible from the SillyTavern host machine.</i>90 <i><b data-i18n="Important:">Important:</b></i><i data-i18n="sd_drawthings_auth_txt"> run DrawThings app with HTTP API switch enabled in the UI! The server must be accessible from the SillyTavern host machine.</i>
91 </div>91 </div>
92 <div data-sd-source="huggingface">92 <div data-sd-source="huggingface">
93 <i>Hint: Save an API key in the Hugging Face (Text Completion) API settings to use it here.</i>93 <i data-i18n="Hint: Save an API key in the Hugging Face (Text Completion) API settings to use it here.">Hint: Save an API key in the Hugging Face (Text Completion) API settings to use it here.</i>
94 <label for="sd_huggingface_model_id" data-i18n="Model ID">Model ID</label>94 <label for="sd_huggingface_model_id" data-i18n="Model ID">Model ID</label>
95 <input id="sd_huggingface_model_id" type="text" class="text_pole" data-i18n="[placeholder]e.g. black-forest-labs/FLUX.1-dev" placeholder="e.g. black-forest-labs/FLUX.1-dev" value="" />95 <input id="sd_huggingface_model_id" type="text" class="text_pole" data-i18n="[placeholder]e.g. black-forest-labs/FLUX.1-dev" placeholder="e.g. black-forest-labs/FLUX.1-dev" value="" />
96 </div>96 </div>
97 <div data-sd-source="electronhub">97 <div data-sd-source="electronhub">
98 <i>Hint: Save an API key in the Electron Hub (Chat Completion) API settings to use it here.</i>98 <i data-i18n="Hint: Save an API key in the Electron Hub (Chat Completion) API settings to use it here.">Hint: Save an API key in the Electron Hub (Chat Completion) API settings to use it here.</i>
99 </div>99 </div>
100 <div data-sd-source="nanogpt">100 <div data-sd-source="nanogpt">
101 <i>Hint: Save an API key in the NanoGPT (Chat Completion) API settings to use it here.</i>101 <i data-i18n="Hint: Save an API key in the NanoGPT (Chat Completion) API settings to use it here.">Hint: Save an API key in the NanoGPT (Chat Completion) API settings to use it here.</i>
102 </div>102 </div>
103 <div data-sd-source="vlad">103 <div data-sd-source="vlad">
104 <label for="sd_vlad_url">SD.Next API URL</label>104 <label for="sd_vlad_url">SD.Next API URL</label>
@@ -143,7 +143,7 @@
143 View my Anlas143 View my Anlas
144 </div>144 </div>
145 </div>145 </div>
146 <i>Hint: Save an API key in the NovelAI API settings to use it here.</i>146 <i data-i18n="Hint: Save an API key in the NovelAI API settings to use it here.">Hint: Save an API key in the NovelAI API settings to use it here.</i>
147 </div>147 </div>
148 <div data-sd-source="aimlapi">148 <div data-sd-source="aimlapi">
149 <div class="flex-container flexnowrap alignItemsBaseline marginBot5">149 <div class="flex-container flexnowrap alignItemsBaseline marginBot5">
@@ -204,7 +204,7 @@
204 <a href="https://pollinations.ai">Pollinations.ai</a>204 <a href="https://pollinations.ai">Pollinations.ai</a>
205 </p>205 </p>
206 <div class="flex-container">206 <div class="flex-container">
207 <label class="flex1 checkbox_label" for="sd_pollinations_enhance" title="Enables prompt enhancing (passes prompts through an LLM to add detail).">207 <label class="flex1 checkbox_label" for="sd_pollinations_enhance" data-i18n="[title]Enables prompt enhancing (passes prompts through an LLM to add detail)." title="Enables prompt enhancing (passes prompts through an LLM to add detail).">
208 <input id="sd_pollinations_enhance" type="checkbox" />208 <input id="sd_pollinations_enhance" type="checkbox" />
209 <span data-i18n="Enhance">209 <span data-i18n="Enhance">
210 Enhance210 Enhance
@@ -297,7 +297,7 @@
297 </div>297 </div>
298 </div>298 </div>
299 <div class="flex-container">299 <div class="flex-container">
300 <label class="flex1 checkbox_label" for="sd_google_enhance" title="Enables prompt enhancing (passes prompts through an LLM to add detail).">300 <label class="flex1 checkbox_label" for="sd_google_enhance" data-i18n="[title]Enables prompt enhancing (passes prompts through an LLM to add detail)." title="Enables prompt enhancing (passes prompts through an LLM to add detail).">
301 <input id="sd_google_enhance" type="checkbox" />301 <input id="sd_google_enhance" type="checkbox" />
302 <span data-i18n="Enhance">302 <span data-i18n="Enhance">
303 Enhance303 Enhance
public/scripts/extensions/tts/settings.html+2 -2
@@ -12,7 +12,7 @@
12 <div class="tts_block">12 <div class="tts_block">
13 <select id="tts_provider" class="flex1">13 <select id="tts_provider" class="flex1">
14 </select>14 </select>
15 <input id="tts_refresh" class="menu_button" type="submit" value="Reload" />15 <input id="tts_refresh" data-i18n="[value]tts_refresh" class="menu_button" type="submit" value="Reload" />
16 </div>16 </div>
17 <div>17 <div>
18 <label class="checkbox_label" for="tts_enabled">18 <label class="checkbox_label" for="tts_enabled">
@@ -88,7 +88,7 @@
88 <form id="tts_provider_settings">88 <form id="tts_provider_settings">
89 </form>89 </form>
90 <div class="tts_buttons">90 <div class="tts_buttons">
91 <input id="tts_voices" class="menu_button" type="submit" value="Available voices" />91 <input id="tts_voices" class="menu_button" data-i18n="[value]Available voices" type="submit" value="Available voices" />
92 </div>92 </div>
93 </div>93 </div>
94 </div>94 </div>
public/scripts/extensions/tts/system.js+5 -4
@@ -2,6 +2,7 @@ import { isMobile } from '../../RossAscends-mods.js';
2import { getPreviewString } from './index.js';2import { getPreviewString } from './index.js';
3import { saveTtsProviderSettings } from './index.js';3import { saveTtsProviderSettings } from './index.js';
4export { SystemTtsProvider };4export { SystemTtsProvider };
5import { t } from '../../i18n.js';
56
6/**7/**
7 * Chunkify8 * Chunkify
@@ -96,13 +97,13 @@ class SystemTtsProvider {
9697
97 get settingsHtml() {98 get settingsHtml() {
98 if (!('speechSynthesis' in window)) {99 if (!('speechSynthesis' in window)) {
99 return 'Your browser or operating system doesn\'t support speech synthesis';100 return t`Your browser or operating system doesn't support speech synthesis`;
100 }101 }
101102
102 return `<p>Uses the voices provided by your operating system</p>103 return '<p>' + t`Uses the voices provided by your operating system` + `</p>
103 <label for="system_tts_rate">Rate: <span id="system_tts_rate_output"></span></label>104 <label for="system_tts_rate">` + t`Rate:` + ` <span id="system_tts_rate_output"></span></label>
104 <input id="system_tts_rate" type="range" value="${this.defaultSettings.rate}" min="0.1" max="2" step="0.01" />105 <input id="system_tts_rate" type="range" value="${this.defaultSettings.rate}" min="0.1" max="2" step="0.01" />
105 <label for="system_tts_pitch">Pitch: <span id="system_tts_pitch_output"></span></label>106 <label for="system_tts_pitch">` + t`Pitch:` + ` <span id="system_tts_pitch_output"></span></label>
106 <input id="system_tts_pitch" type="range" value="${this.defaultSettings.pitch}" min="0" max="2" step="0.01" />`;107 <input id="system_tts_pitch" type="range" value="${this.defaultSettings.pitch}" min="0" max="2" step="0.01" />`;
107 }108 }
108109