mirror of
https://github.com/Physton/sd-webui-prompt-all-in-one.git
synced 2026-05-02 04:01:30 +00:00
New Feature: Enhance Translation with Keyword Group
新功能:使用关键词组增强翻译功能
This commit is contained in:
65
i18n.json
65
i18n.json
@@ -148,7 +148,10 @@
|
|||||||
"lora_blacklist_list": "Lora 黑名单列表",
|
"lora_blacklist_list": "Lora 黑名单列表",
|
||||||
"lycoris_blacklist_list": "Lycoris 黑名单列表",
|
"lycoris_blacklist_list": "Lycoris 黑名单列表",
|
||||||
"embedding_blacklist_list": "Embedding 黑名单列表",
|
"embedding_blacklist_list": "Embedding 黑名单列表",
|
||||||
"one_keyword_per_line": "每行一个关键词"
|
"one_keyword_per_line": "每行一个关键词",
|
||||||
|
"Keyword_group": "关键词组",
|
||||||
|
"enhance_translation_use_keyword_group": "使用关键词组增强翻译功能",
|
||||||
|
"enhance_translation_use_Keyword_group_desc": "<p>关键词组文件位于 group_tags 目录中。</p><p>启用该功能后,优先使用 yaml 文件中的内容进行翻译匹配。如果没有匹配到,再使用翻译接口进行翻译。</p><p>你可以前往 <a href='https://aiodoc.physton.com/GroupTags.html' target='_blank'>https://aiodoc.physton.com/GroupTags.html</a> 查看 group_tags 中文件的具体说明。</p>"
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
@@ -298,7 +301,10 @@
|
|||||||
"lora_blacklist_list": "Lora 黑名單列表",
|
"lora_blacklist_list": "Lora 黑名單列表",
|
||||||
"lycoris_blacklist_list": "Lycoris 黑名單列表",
|
"lycoris_blacklist_list": "Lycoris 黑名單列表",
|
||||||
"embedding_blacklist_list": "Embedding 黑名單列表",
|
"embedding_blacklist_list": "Embedding 黑名單列表",
|
||||||
"one_keyword_per_line": "每行一個關鍵詞"
|
"one_keyword_per_line": "每行一個關鍵詞",
|
||||||
|
"Keyword_group": "關鍵詞組",
|
||||||
|
"enhance_translation_use_keyword_group": "使用關鍵詞組增強翻譯功能",
|
||||||
|
"enhance_translation_use_Keyword_group_desc": "<p>關鍵詞組文件位於 group_tags 目錄中。</p><p>啟用該功能後,優先使用 yaml 文件中的內容進行翻譯匹配。如果沒有匹配到,再使用翻譯接口進行翻譯。</p><p>你可以前往 <a href='https://aiodoc.physton.com/GroupTags.html' target='_blank'>https://aiodoc.physton.com/GroupTags.html</a> 查看 group_tags 中文件的具體說明。</p>"
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
@@ -448,7 +454,10 @@
|
|||||||
"lora_blacklist_list": "Lora 黑名單清單",
|
"lora_blacklist_list": "Lora 黑名單清單",
|
||||||
"lycoris_blacklist_list": "Lycoris 黑名單清單",
|
"lycoris_blacklist_list": "Lycoris 黑名單清單",
|
||||||
"embedding_blacklist_list": "Embedding 黑名單清單",
|
"embedding_blacklist_list": "Embedding 黑名單清單",
|
||||||
"one_keyword_per_line": "每行一個關鍵字"
|
"one_keyword_per_line": "每行一個關鍵字",
|
||||||
|
"Keyword_group": "關鍵詞組",
|
||||||
|
"enhance_translation_use_keyword_group": "使用關鍵詞組增強翻譯功能",
|
||||||
|
"enhance_translation_use_Keyword_group_desc": "<p>關鍵詞組文件位於 group_tags 目錄中。</p><p>啟用該功能後,優先使用 yaml 文件中的內容進行翻譯匹配。如果沒有匹配到,再使用翻譯接口進行翻譯。</p><p>你可以前往 <a href='https://aiodoc.physton.com/GroupTags.html' target='_blank'>https://aiodoc.physton.com/GroupTags.html</a> 查看 group_tags 中文件的具體說明。</p>"
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
@@ -598,7 +607,10 @@
|
|||||||
"lora_blacklist_list": "Lora Blacklist",
|
"lora_blacklist_list": "Lora Blacklist",
|
||||||
"lycoris_blacklist_list": "Lycoris Blacklist",
|
"lycoris_blacklist_list": "Lycoris Blacklist",
|
||||||
"embedding_blacklist_list": "Embedding Blacklist",
|
"embedding_blacklist_list": "Embedding Blacklist",
|
||||||
"one_keyword_per_line": "One keyword per line"
|
"one_keyword_per_line": "One keyword per line",
|
||||||
|
"Keyword_group": "Keyword Group",
|
||||||
|
"enhance_translation_use_keyword_group": "Enhance Translation with Keyword Group",
|
||||||
|
"enhance_translation_use_Keyword_group_desc": "<p>The keyword group file is located in the group_tags directory.</p><p>When this feature is enabled, the contents in the YAML file are prioritized for translation matching. If no match is found, the translation interface is used.</p><p>You can visit <a href='https://aiodoc.physton.com/GroupTags.html' target='_blank'>https://aiodoc.physton.com/GroupTags.html</a> for specific instructions on the files in the group_tags directory.</p>"
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
@@ -759,7 +771,10 @@
|
|||||||
"lora_blacklist_list": "قائمة Lora السوداء",
|
"lora_blacklist_list": "قائمة Lora السوداء",
|
||||||
"lycoris_blacklist_list": "قائمة Lycoris السوداء",
|
"lycoris_blacklist_list": "قائمة Lycoris السوداء",
|
||||||
"embedding_blacklist_list": "قائمة Embedding السوداء",
|
"embedding_blacklist_list": "قائمة Embedding السوداء",
|
||||||
"one_keyword_per_line": "كلمة رئيسية واحدة في كل سطر"
|
"one_keyword_per_line": "كلمة رئيسية واحدة في كل سطر",
|
||||||
|
"Keyword_group": "مجموعة الكلمات الرئيسية",
|
||||||
|
"enhance_translation_use_keyword_group": "استخدام مجموعة الكلمات الرئيسية لتعزيز الترجمة",
|
||||||
|
"enhance_translation_use_Keyword_group_desc": "<p>ملف مجموعة الكلمات الرئيسية موجود في دليل group_tags.</p><p>عند تمكين هذه الميزة، يتم إعطاء الأولوية لمحتويات ملف YAML لمطابقة الترجمة. إذا لم يتم العثور على تطابق، يتم استخدام واجهة الترجمة.</p><p>يمكنك زيارة <a href='https://aiodoc.physton.com/GroupTags.html' target='_blank'>https://aiodoc.physton.com/GroupTags.html</a> للحصول على تعليمات محددة حول الملفات في دليل group_tags.</p>"
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
@@ -1008,7 +1023,10 @@
|
|||||||
"lora_blacklist_list": "Liste noire Lora",
|
"lora_blacklist_list": "Liste noire Lora",
|
||||||
"lycoris_blacklist_list": "Liste noire Lycoris",
|
"lycoris_blacklist_list": "Liste noire Lycoris",
|
||||||
"embedding_blacklist_list": "Liste noire d'embedding",
|
"embedding_blacklist_list": "Liste noire d'embedding",
|
||||||
"one_keyword_per_line": "Un mot-clé par ligne"
|
"one_keyword_per_line": "Un mot-clé par ligne",
|
||||||
|
"Keyword_group": "Groupe de mots-clés",
|
||||||
|
"enhance_translation_use_keyword_group": "Utiliser le groupe de mots-clés pour améliorer la traduction",
|
||||||
|
"enhance_translation_use_Keyword_group_desc": "<p>Le fichier du groupe de mots-clés est situé dans le répertoire group_tags.</p><p>Lorsque cette fonctionnalité est activée, les contenus du fichier YAML sont prioritaires pour la correspondance de traduction. Si aucune correspondance n'est trouvée, l'interface de traduction est utilisée.</p><p>Vous pouvez consulter <a href='https://aiodoc.physton.com/GroupTags.html' target='_blank'>https://aiodoc.physton.com/GroupTags.html</a> pour des instructions spécifiques sur les fichiers du répertoire group_tags.</p>"
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
@@ -1172,7 +1190,10 @@
|
|||||||
"lora_blacklist_list": "Schwarze Liste Lora",
|
"lora_blacklist_list": "Schwarze Liste Lora",
|
||||||
"lycoris_blacklist_list": "Schwarze Liste Lycoris",
|
"lycoris_blacklist_list": "Schwarze Liste Lycoris",
|
||||||
"embedding_blacklist_list": "Schwarze Liste der Einbettung",
|
"embedding_blacklist_list": "Schwarze Liste der Einbettung",
|
||||||
"one_keyword_per_line": "Ein Schlüsselwort pro Zeile"
|
"one_keyword_per_line": "Ein Schlüsselwort pro Zeile",
|
||||||
|
"Keyword_group": "Schlüsselwortgruppe",
|
||||||
|
"enhance_translation_use_keyword_group": "Übersetzung mit Schlüsselwortgruppe verbessern",
|
||||||
|
"enhance_translation_use_Keyword_group_desc": "<p>Die Schlüsselwortgruppendatei befindet sich im Verzeichnis group_tags.</p><p>Wenn diese Funktion aktiviert ist, haben die Inhalte in der YAML-Datei Vorrang für die Übersetzungsübereinstimmung. Wenn keine Übereinstimmung gefunden wird, wird die Übersetzungs-Schnittstelle verwendet.</p><p>Sie können <a href='https://aiodoc.physton.com/GroupTags.html' target='_blank'>https://aiodoc.physton.com/GroupTags.html</a> besuchen, um spezifische Anweisungen zu den Dateien im Verzeichnis group_tags zu erhalten.</p>"
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
@@ -1386,7 +1407,10 @@
|
|||||||
"lora_blacklist_list": "Elenco nero di Lora",
|
"lora_blacklist_list": "Elenco nero di Lora",
|
||||||
"lycoris_blacklist_list": "Elenco nero di Lycoris",
|
"lycoris_blacklist_list": "Elenco nero di Lycoris",
|
||||||
"embedding_blacklist_list": "Elenco nero dell'embedding",
|
"embedding_blacklist_list": "Elenco nero dell'embedding",
|
||||||
"one_keyword_per_line": "Una parola chiave per riga"
|
"one_keyword_per_line": "Una parola chiave per riga",
|
||||||
|
"Keyword_group": "Gruppo di parole chiave",
|
||||||
|
"enhance_translation_use_keyword_group": "Migliora la traduzione con il gruppo di parole chiave",
|
||||||
|
"enhance_translation_use_Keyword_group_desc": "<p>Il file del gruppo di parole chiave si trova nella directory group_tags.</p><p>Quando questa funzionalità è abilitata, i contenuti nel file YAML hanno la priorità per la corrispondenza di traduzione. Se non viene trovata alcuna corrispondenza, viene utilizzata l'interfaccia di traduzione.</p><p>Puoi visitare <a href='https://aiodoc.physton.com/GroupTags.html' target='_blank'>https://aiodoc.physton.com/GroupTags.html</a> per istruzioni specifiche sui file nella directory group_tags.</p>"
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
@@ -1535,7 +1559,10 @@
|
|||||||
"lora_blacklist_list": "Loraのブラックリスト",
|
"lora_blacklist_list": "Loraのブラックリスト",
|
||||||
"lycoris_blacklist_list": "Lycorisのブラックリスト",
|
"lycoris_blacklist_list": "Lycorisのブラックリスト",
|
||||||
"embedding_blacklist_list": "Embeddingのブラックリスト",
|
"embedding_blacklist_list": "Embeddingのブラックリスト",
|
||||||
"one_keyword_per_line": "1行に1つのキーワード"
|
"one_keyword_per_line": "1行に1つのキーワード",
|
||||||
|
"Keyword_group": "キーワードグループ",
|
||||||
|
"enhance_translation_use_keyword_group": "キーワードグループを使用して翻訳を強化する",
|
||||||
|
"enhance_translation_use_Keyword_group_desc": "<p>キーワードグループファイルは、group_tagsディレクトリにあります。</p><p>この機能を有効にすると、翻訳のマッチングにはYAMLファイルの内容が優先されます。マッチが見つからない場合は、翻訳インターフェースが使用されます。</p><p>group_tagsディレクトリのファイルの具体的な説明については、<a href='https://aiodoc.physton.com/GroupTags.html' target='_blank'>https://aiodoc.physton.com/GroupTags.html</a>をご覧ください。</p>"
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
@@ -1709,7 +1736,10 @@
|
|||||||
"lora_blacklist_list": "Lora 블랙리스트",
|
"lora_blacklist_list": "Lora 블랙리스트",
|
||||||
"lycoris_blacklist_list": "Lycoris 블랙리스트",
|
"lycoris_blacklist_list": "Lycoris 블랙리스트",
|
||||||
"embedding_blacklist_list": "Embedding 블랙리스트",
|
"embedding_blacklist_list": "Embedding 블랙리스트",
|
||||||
"one_keyword_per_line": "한 줄에 하나의 키워드"
|
"one_keyword_per_line": "한 줄에 하나의 키워드",
|
||||||
|
"Keyword_group": "키워드 그룹",
|
||||||
|
"enhance_translation_use_keyword_group": "키워드 그룹을 사용하여 번역 개선",
|
||||||
|
"enhance_translation_use_Keyword_group_desc": "<p>키워드 그룹 파일은 group_tags 디렉터리에 있습니다.</p><p>이 기능을 활성화하면 YAML 파일의 내용이 번역 매칭에 우선적으로 사용됩니다. 일치하는 항목이 없는 경우 번역 인터페이스가 사용됩니다.</p><p>group_tags 디렉터리의 파일에 대한 구체적인 설명은 <a href='https://aiodoc.physton.com/GroupTags.html' target='_blank'>https://aiodoc.physton.com/GroupTags.html</a>을 참조하십시오.</p>"
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
@@ -1973,7 +2003,10 @@
|
|||||||
"lora_blacklist_list": "Lista negra de Lora",
|
"lora_blacklist_list": "Lista negra de Lora",
|
||||||
"lycoris_blacklist_list": "Lista negra de Lycoris",
|
"lycoris_blacklist_list": "Lista negra de Lycoris",
|
||||||
"embedding_blacklist_list": "Lista negra de Embedding",
|
"embedding_blacklist_list": "Lista negra de Embedding",
|
||||||
"one_keyword_per_line": "Uma palavra-chave por linha"
|
"one_keyword_per_line": "Uma palavra-chave por linha",
|
||||||
|
"Keyword_group": "Grupo de palavras-chave",
|
||||||
|
"enhance_translation_use_keyword_group": "Melhorar a tradução com o grupo de palavras-chave",
|
||||||
|
"enhance_translation_use_Keyword_group_desc": "<p>O arquivo do grupo de palavras-chave está localizado no diretório group_tags.</p><p>Quando essa funcionalidade está ativada, o conteúdo do arquivo YAML tem prioridade para a correspondência de tradução. Se nenhuma correspondência for encontrada, a interface de tradução é usada.</p><p>Você pode visitar <a href='https://aiodoc.physton.com/GroupTags.html' target='_blank'>https://aiodoc.physton.com/GroupTags.html</a> para obter instruções específicas sobre os arquivos no diretório group_tags.</p>"
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
@@ -2137,7 +2170,10 @@
|
|||||||
"lora_blacklist_list": "Черный список Lora",
|
"lora_blacklist_list": "Черный список Lora",
|
||||||
"lycoris_blacklist_list": "Черный список Lycoris",
|
"lycoris_blacklist_list": "Черный список Lycoris",
|
||||||
"embedding_blacklist_list": "Черный список Embedding",
|
"embedding_blacklist_list": "Черный список Embedding",
|
||||||
"one_keyword_per_line": "Одно ключевое слово на строку"
|
"one_keyword_per_line": "Одно ключевое слово на строку",
|
||||||
|
"Keyword_group": "Группа ключевых слов",
|
||||||
|
"enhance_translation_use_keyword_group": "Улучшить перевод с помощью группы ключевых слов",
|
||||||
|
"enhance_translation_use_Keyword_group_desc": "<p>Файл группы ключевых слов находится в каталоге group_tags.</p><p>При включении этой функции приоритет отдается содержимому файла YAML для соответствия перевода. Если соответствие не найдено, используется интерфейс перевода.</p><p>Вы можете посетить <a href='https://aiodoc.physton.com/GroupTags.html' target='_blank'>https://aiodoc.physton.com/GroupTags.html</a> для получения конкретных инструкций по файлам в каталоге group_tags.</p>"
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
@@ -2316,7 +2352,10 @@
|
|||||||
"lora_blacklist_list": "Lista negra de Lora",
|
"lora_blacklist_list": "Lista negra de Lora",
|
||||||
"lycoris_blacklist_list": "Lista negra de Lycoris",
|
"lycoris_blacklist_list": "Lista negra de Lycoris",
|
||||||
"embedding_blacklist_list": "Lista negra de Embedding",
|
"embedding_blacklist_list": "Lista negra de Embedding",
|
||||||
"one_keyword_per_line": "Una palabra clave por línea"
|
"one_keyword_per_line": "Una palabra clave por línea",
|
||||||
|
"Keyword_group": "Grupo de palabras clave",
|
||||||
|
"enhance_translation_use_keyword_group": "Mejorar la traducción con el grupo de palabras clave",
|
||||||
|
"enhance_translation_use_Keyword_group_desc": "<p>El archivo del grupo de palabras clave se encuentra en el directorio group_tags.</p><p>Cuando esta función está habilitada, se priorizan los contenidos del archivo YAML para la coincidencia de traducción. Si no se encuentra ninguna coincidencia, se utiliza la interfaz de traducción.</p><p>Puedes visitar <a href='https://aiodoc.physton.com/GroupTags.html' target='_blank'>https://aiodoc.physton.com/GroupTags.html</a> para obtener instrucciones específicas sobre los archivos en el directorio group_tags.</p>"
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
|
|||||||
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
@@ -32,6 +32,7 @@
|
|||||||
@click:blacklist="onBlacklistClick"
|
@click:blacklist="onBlacklistClick"
|
||||||
v-model:tag-complete-file="tagCompleteFile"
|
v-model:tag-complete-file="tagCompleteFile"
|
||||||
v-model:only-csv-on-auto="onlyCsvOnAuto"
|
v-model:only-csv-on-auto="onlyCsvOnAuto"
|
||||||
|
v-model:group-tags-translate="groupTagsTranslate"
|
||||||
@click:select-language="onSelectLanguageClick"
|
@click:select-language="onSelectLanguageClick"
|
||||||
@click:select-theme="onSelectThemeClick"
|
@click:select-theme="onSelectThemeClick"
|
||||||
@click:show-chatgpt="onShowChatgpt(item.id, $event)"
|
@click:show-chatgpt="onShowChatgpt(item.id, $event)"
|
||||||
@@ -48,7 +49,9 @@
|
|||||||
:group-tags="groupTags"
|
:group-tags="groupTags"
|
||||||
:hide-group-tags="item.hideGroupTags"
|
:hide-group-tags="item.hideGroupTags"
|
||||||
v-model:group-tags-color="groupTagsColor"
|
v-model:group-tags-color="groupTagsColor"
|
||||||
|
:group-tags-color-key-cache="groupTagsColorKeyCache"
|
||||||
@update:hide-group-tags="onUpdateHideGroupTags(item.id, $event)"
|
@update:hide-group-tags="onUpdateHideGroupTags(item.id, $event)"
|
||||||
|
:group-tags-translate-cache="groupTagsTranslateCache"
|
||||||
:blacklist="blacklist"
|
:blacklist="blacklist"
|
||||||
></physton-prompt>
|
></physton-prompt>
|
||||||
</template>
|
</template>
|
||||||
@@ -57,6 +60,7 @@
|
|||||||
@forceUpdate:translateApi="updateTranslateApiConfig"
|
@forceUpdate:translateApi="updateTranslateApiConfig"
|
||||||
v-model:tag-complete-file="tagCompleteFile"
|
v-model:tag-complete-file="tagCompleteFile"
|
||||||
v-model:only-csv-on-auto="onlyCsvOnAuto"
|
v-model:only-csv-on-auto="onlyCsvOnAuto"
|
||||||
|
v-model:group-tags-translate="groupTagsTranslate"
|
||||||
v-model:translate-api="translateApi"></translate-setting>
|
v-model:translate-api="translateApi"></translate-setting>
|
||||||
<select-language ref="selectLanguage" v-model:language-code="languageCode"
|
<select-language ref="selectLanguage" v-model:language-code="languageCode"
|
||||||
:translate-apis="translateApis"
|
:translate-apis="translateApis"
|
||||||
@@ -290,6 +294,12 @@ export default {
|
|||||||
|
|
||||||
groupTags: [],
|
groupTags: [],
|
||||||
groupTagsColor: {},
|
groupTagsColor: {},
|
||||||
|
groupTagsColorKeyCache: {},
|
||||||
|
groupTagsTranslate: true,
|
||||||
|
groupTagsTranslateCache: {
|
||||||
|
toEn: new Map(),
|
||||||
|
toLocal: new Map()
|
||||||
|
},
|
||||||
|
|
||||||
blacklist: {},
|
blacklist: {},
|
||||||
}
|
}
|
||||||
@@ -467,6 +477,16 @@ export default {
|
|||||||
deep: true,
|
deep: true,
|
||||||
immediate: false,
|
immediate: false,
|
||||||
},
|
},
|
||||||
|
groupTagsTranslate: {
|
||||||
|
handler: function (val, oldVal) {
|
||||||
|
if (!this.startWatchSave) return
|
||||||
|
console.log('onGroupTagsTranslateChange', val, oldVal)
|
||||||
|
this.gradioAPI.setData('groupTagsTranslate', val).then(data => {
|
||||||
|
}).catch(err => {
|
||||||
|
})
|
||||||
|
},
|
||||||
|
immediate: false,
|
||||||
|
},
|
||||||
onlyCsvOnAuto() {
|
onlyCsvOnAuto() {
|
||||||
if (!this.startWatchSave) return
|
if (!this.startWatchSave) return
|
||||||
console.log('onOnlyCsvOnAutoChange', this.onlyCsvOnAuto)
|
console.log('onOnlyCsvOnAutoChange', this.onlyCsvOnAuto)
|
||||||
@@ -522,7 +542,7 @@ export default {
|
|||||||
},
|
},
|
||||||
init() {
|
init() {
|
||||||
this.loadExtraNetworks()
|
this.loadExtraNetworks()
|
||||||
let dataListsKeys = ['languageCode', 'autoTranslate', 'autoTranslateToEnglish', 'autoTranslateToLocal', 'autoRemoveSpace', 'autoRemoveLastComma', 'autoKeepWeightZero', 'autoKeepWeightOne', 'autoBreakBeforeWrap', 'autoBreakAfterWrap', /*'hideDefaultInput', */'translateApi', 'enableTooltip', 'tagCompleteFile', 'onlyCsvOnAuto', 'extensionSelect.minimalist', 'groupTagsColor', 'blacklist']
|
let dataListsKeys = ['languageCode', 'autoTranslate', 'autoTranslateToEnglish', 'autoTranslateToLocal', 'autoRemoveSpace', 'autoRemoveLastComma', 'autoKeepWeightZero', 'autoKeepWeightOne', 'autoBreakBeforeWrap', 'autoBreakAfterWrap', /*'hideDefaultInput', */'translateApi', 'enableTooltip', 'tagCompleteFile', 'onlyCsvOnAuto', 'extensionSelect.minimalist', 'groupTagsColor', 'groupTagsTranslate', 'blacklist']
|
||||||
this.prompts.forEach(item => {
|
this.prompts.forEach(item => {
|
||||||
dataListsKeys.push(item.hideDefaultInputKey)
|
dataListsKeys.push(item.hideDefaultInputKey)
|
||||||
dataListsKeys.push(item.hidePanelKey)
|
dataListsKeys.push(item.hidePanelKey)
|
||||||
@@ -647,6 +667,10 @@ export default {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if (data.groupTagsTranslate !== null) {
|
||||||
|
this.groupTagsTranslate = data.groupTagsTranslate
|
||||||
|
}
|
||||||
|
|
||||||
if (data.blacklist !== null) {
|
if (data.blacklist !== null) {
|
||||||
this.blacklist = data.blacklist
|
this.blacklist = data.blacklist
|
||||||
}
|
}
|
||||||
@@ -715,8 +739,53 @@ export default {
|
|||||||
this.groupTags = []
|
this.groupTags = []
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
this._handleGroupTags()
|
||||||
})
|
})
|
||||||
},
|
},
|
||||||
|
_handleGroupTags() {
|
||||||
|
let data = {toEn: new Map(), toLocal: new Map()}
|
||||||
|
let setData = (en, local) => {
|
||||||
|
const texts = [
|
||||||
|
en,
|
||||||
|
en.replace(/\_/g, ' '),
|
||||||
|
en.replace(/\-/g, ' '),
|
||||||
|
]
|
||||||
|
texts.forEach((t) => {
|
||||||
|
if (data.toLocal.has(t)) {
|
||||||
|
let oldLocal = data.toLocal.get(t)
|
||||||
|
if (!oldLocal.includes(local)) {
|
||||||
|
oldLocal.push(local)
|
||||||
|
}
|
||||||
|
} else {
|
||||||
|
data.toLocal.set(t, [local])
|
||||||
|
}
|
||||||
|
})
|
||||||
|
data.toEn.set(local, en)
|
||||||
|
}
|
||||||
|
for (let item of this.groupTags) {
|
||||||
|
for (let group of item.groups) {
|
||||||
|
if (group.type && group.typ == 'wrap') continue
|
||||||
|
|
||||||
|
let key = common.getTagsColorKey(item.name, group.name)
|
||||||
|
|
||||||
|
if (!this.groupTagsColor[key]) {
|
||||||
|
this.groupTagsColor[key] = ref(common.fitterInputColor(group.color))
|
||||||
|
}
|
||||||
|
|
||||||
|
for (let en in group.tags) {
|
||||||
|
if (!en) continue
|
||||||
|
this.groupTagsColorKeyCache[en] = key
|
||||||
|
|
||||||
|
let local = group.tags[en]
|
||||||
|
if (!local || en == local) continue
|
||||||
|
setData(en, local)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
this.groupTagsTranslateCache = data
|
||||||
|
console.log(this.groupTagsColorKeyCache)
|
||||||
|
console.log(this.groupTagsTranslateCache)
|
||||||
|
},
|
||||||
updateTippyState() {
|
updateTippyState() {
|
||||||
for (const $tippy of this.$tippyList) {
|
for (const $tippy of this.$tippyList) {
|
||||||
if (this.enableTooltip) {
|
if (this.enableTooltip) {
|
||||||
|
|||||||
@@ -618,6 +618,10 @@ export default {
|
|||||||
type: Object,
|
type: Object,
|
||||||
default: () => ({}),
|
default: () => ({}),
|
||||||
},
|
},
|
||||||
|
groupTagsColorKeyCache: {
|
||||||
|
type: Object,
|
||||||
|
default: () => ({}),
|
||||||
|
},
|
||||||
blacklist: {
|
blacklist: {
|
||||||
type: Object,
|
type: Object,
|
||||||
default: () => ({}),
|
default: () => ({}),
|
||||||
@@ -1228,10 +1232,11 @@ export default {
|
|||||||
translateGroup()
|
translateGroup()
|
||||||
}
|
}
|
||||||
|
|
||||||
if (this.tagCompleteFile) {
|
let translateByCSV = (tags) => {
|
||||||
// 开启了使用tagcomplete翻译
|
// 开启了使用tagcomplete翻译
|
||||||
|
console.log('translateByCSV', tags.map(tag => tag.value).join(', '))
|
||||||
let promises = []
|
let promises = []
|
||||||
needTranslateTags.forEach(tag => {
|
tags.forEach(tag => {
|
||||||
// 是否被括号包裹
|
// 是否被括号包裹
|
||||||
const splitTag = common.splitTag(tag.value)
|
const splitTag = common.splitTag(tag.value)
|
||||||
if (splitTag.value !== tag.value) {
|
if (splitTag.value !== tag.value) {
|
||||||
@@ -1249,7 +1254,7 @@ export default {
|
|||||||
Promise.all(promises).then(results => {
|
Promise.all(promises).then(results => {
|
||||||
let needs = []
|
let needs = []
|
||||||
results.forEach((result, index) => {
|
results.forEach((result, index) => {
|
||||||
let tag = needTranslateTags[index]
|
let tag = tags[index]
|
||||||
if (tag.splits) {
|
if (tag.splits) {
|
||||||
// 如果被括号包裹,还原
|
// 如果被括号包裹,还原
|
||||||
tag.value = tag.splits.left + tag.value + tag.splits.right
|
tag.value = tag.splits.left + tag.value + tag.splits.right
|
||||||
@@ -1265,6 +1270,7 @@ export default {
|
|||||||
setTag(tag, result)
|
setTag(tag, result)
|
||||||
}
|
}
|
||||||
})
|
})
|
||||||
|
console.log('No translated keywords: ', needs.map(tag => tag.value).join(', '))
|
||||||
if (useNetwork) {
|
if (useNetwork) {
|
||||||
translate(needs)
|
translate(needs)
|
||||||
} else {
|
} else {
|
||||||
@@ -1273,10 +1279,74 @@ export default {
|
|||||||
}
|
}
|
||||||
}).catch(error => {
|
}).catch(error => {
|
||||||
// 有一个错误,就不翻译了
|
// 有一个错误,就不翻译了
|
||||||
setLoadings(needTranslateTags, false)
|
setLoadings(tags, false)
|
||||||
this.$toastr.error(error)
|
this.$toastr.error(error)
|
||||||
reject(error)
|
reject(error)
|
||||||
})
|
})
|
||||||
|
}
|
||||||
|
|
||||||
|
let translateByGroupTags = (tags) => {
|
||||||
|
// 开启了使用关键词组翻译
|
||||||
|
console.log('translateByGroupTags', tags.map(tag => tag.value).join(', '))
|
||||||
|
let promises = []
|
||||||
|
tags.forEach(tag => {
|
||||||
|
// 是否被括号包裹
|
||||||
|
const splitTag = common.splitTag(tag.value)
|
||||||
|
if (splitTag.value !== tag.value) {
|
||||||
|
tag.value = splitTag.value
|
||||||
|
tag.splits = splitTag
|
||||||
|
}
|
||||||
|
if (tag.toLocal) {
|
||||||
|
// 翻译到本地语言
|
||||||
|
promises.push(this.translateToLocalByGroupTags(tag.value))
|
||||||
|
} else {
|
||||||
|
// 翻译到英文
|
||||||
|
promises.push(this.translateToEnByGroupTags(tag.value))
|
||||||
|
}
|
||||||
|
})
|
||||||
|
Promise.all(promises).then(results => {
|
||||||
|
let needs = []
|
||||||
|
results.forEach((result, index) => {
|
||||||
|
let tag = tags[index]
|
||||||
|
if (tag.splits) {
|
||||||
|
// 如果被括号包裹,还原
|
||||||
|
tag.value = tag.splits.left + tag.value + tag.splits.right
|
||||||
|
}
|
||||||
|
|
||||||
|
if (result === '') {
|
||||||
|
needs.push(tag)
|
||||||
|
} else {
|
||||||
|
if (tag.splits) {
|
||||||
|
result = tag.splits.left + result + tag.splits.right
|
||||||
|
}
|
||||||
|
setLoading(tag, false)
|
||||||
|
setTag(tag, result)
|
||||||
|
}
|
||||||
|
})
|
||||||
|
console.log('No translated keywords: ', needs.map(tag => tag.value).join(', '))
|
||||||
|
if (this.tagCompleteFile) {
|
||||||
|
// 开启了使用tagcomplete翻译
|
||||||
|
translateByCSV(needs)
|
||||||
|
} else {
|
||||||
|
if (useNetwork) {
|
||||||
|
translate(needs)
|
||||||
|
} else {
|
||||||
|
setLoadings(needs, false)
|
||||||
|
resolve()
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}).catch(error => {
|
||||||
|
// 有一个错误,就不翻译了
|
||||||
|
setLoadings(tags, false)
|
||||||
|
this.$toastr.error(error)
|
||||||
|
reject(error)
|
||||||
|
})
|
||||||
|
}
|
||||||
|
|
||||||
|
if (this.groupTagsTranslate) {
|
||||||
|
translateByGroupTags(needTranslateTags)
|
||||||
|
} else if (this.tagCompleteFile) {
|
||||||
|
translateByCSV(needTranslateTags)
|
||||||
} else {
|
} else {
|
||||||
if (useNetwork) {
|
if (useNetwork) {
|
||||||
translate(needTranslateTags)
|
translate(needTranslateTags)
|
||||||
|
|||||||
@@ -78,6 +78,16 @@
|
|||||||
<textarea class="test-input" v-if="translatedText" v-model="translatedText"></textarea>
|
<textarea class="test-input" v-if="translatedText" v-model="translatedText"></textarea>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
|
<div class="setting-line">
|
||||||
|
<div class="line-title">{{ getLang('Keyword_group') }}</div>
|
||||||
|
<div class="line-content">
|
||||||
|
<div v-html="getLang('enhance_translation_use_Keyword_group_desc')"></div>
|
||||||
|
<label class="onlyCsvOnAuto">
|
||||||
|
<input class="hover-scale-120" type="checkbox" value="1" v-model="groupTagsTranslateValue">
|
||||||
|
<span>{{ getLang('enhance_translation_use_keyword_group') }}</span>
|
||||||
|
</label>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
<div class="setting-line">
|
<div class="setting-line">
|
||||||
<div class="line-title">TagComplete</div>
|
<div class="line-title">TagComplete</div>
|
||||||
<div class="line-content">
|
<div class="line-content">
|
||||||
@@ -102,7 +112,7 @@
|
|||||||
</label>
|
</label>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
<div class="setting-line" v-show="tagCompleteFileKey">
|
<div class="setting-line" v-show="tagCompleteFileKey">
|
||||||
<div class="line-title"></div>
|
<div class="line-title"></div>
|
||||||
<div class="line-content">
|
<div class="line-content">
|
||||||
<div class="hover-scale-120 test-btn" @click="onTagCompleteTestClick">{{ getLang('test') }}</div>
|
<div class="hover-scale-120 test-btn" @click="onTagCompleteTestClick">{{ getLang('test') }}</div>
|
||||||
@@ -145,6 +155,8 @@ export default {
|
|||||||
tagCompleteResults: [],
|
tagCompleteResults: [],
|
||||||
onlyCsvOnAutoValue: false,
|
onlyCsvOnAutoValue: false,
|
||||||
|
|
||||||
|
groupTagsTranslateValue: true,
|
||||||
|
|
||||||
mbart50Loading: false,
|
mbart50Loading: false,
|
||||||
mbart50Success: false,
|
mbart50Success: false,
|
||||||
mbart50Message: '',
|
mbart50Message: '',
|
||||||
@@ -172,7 +184,7 @@ export default {
|
|||||||
this.translatedText = ''
|
this.translatedText = ''
|
||||||
this.loading = false
|
this.loading = false
|
||||||
},
|
},
|
||||||
emits: ['update:translateApi', 'forceUpdate:translateApi', 'update:tagCompleteFile', 'update:onlyCsvOnAuto'],
|
emits: ['update:translateApi', 'forceUpdate:translateApi', 'update:tagCompleteFile', 'update:onlyCsvOnAuto', 'update:groupTagsTranslate'],
|
||||||
watch: {
|
watch: {
|
||||||
apiKey: {
|
apiKey: {
|
||||||
handler: function (val, oldVal) {
|
handler: function (val, oldVal) {
|
||||||
@@ -225,6 +237,7 @@ Github: {{name}}`
|
|||||||
this.loading = false
|
this.loading = false
|
||||||
this.tagCompleteFileKey = this.tagCompleteFile
|
this.tagCompleteFileKey = this.tagCompleteFile
|
||||||
this.onlyCsvOnAutoValue = this.onlyCsvOnAuto
|
this.onlyCsvOnAutoValue = this.onlyCsvOnAuto
|
||||||
|
this.groupTagsTranslateValue = this.groupTagsTranslate
|
||||||
this.mbart50Success = false
|
this.mbart50Success = false
|
||||||
this.mbart50Message = ''
|
this.mbart50Message = ''
|
||||||
this.refreshCSVs()
|
this.refreshCSVs()
|
||||||
@@ -314,6 +327,7 @@ Github: {{name}}`
|
|||||||
this.$emit('update:translateApi', this.apiKey)
|
this.$emit('update:translateApi', this.apiKey)
|
||||||
this.$emit('update:tagCompleteFile', this.tagCompleteFileKey)
|
this.$emit('update:tagCompleteFile', this.tagCompleteFileKey)
|
||||||
this.$emit('update:onlyCsvOnAuto', this.onlyCsvOnAutoValue)
|
this.$emit('update:onlyCsvOnAuto', this.onlyCsvOnAutoValue)
|
||||||
|
this.$emit('update:groupTagsTranslate', this.groupTagsTranslateValue)
|
||||||
this.gradioAPI.setData('translate_api.' + this.apiKey, configs).then(res => {
|
this.gradioAPI.setData('translate_api.' + this.apiKey, configs).then(res => {
|
||||||
if (this.apiKey === this.translateApi) this.$emit('forceUpdate:translateApi')
|
if (this.apiKey === this.translateApi) this.$emit('forceUpdate:translateApi')
|
||||||
})
|
})
|
||||||
|
|||||||
@@ -31,7 +31,20 @@ export default {
|
|||||||
onlyCsvOnAuto: {
|
onlyCsvOnAuto: {
|
||||||
type: Boolean,
|
type: Boolean,
|
||||||
default: false
|
default: false
|
||||||
}
|
},
|
||||||
|
groupTagsTranslate: {
|
||||||
|
type: Boolean,
|
||||||
|
default: true
|
||||||
|
},
|
||||||
|
groupTagsTranslateCache: {
|
||||||
|
type: Object,
|
||||||
|
default: () => {
|
||||||
|
return {
|
||||||
|
toEn: new Map(),
|
||||||
|
toLocal: new Map()
|
||||||
|
}
|
||||||
|
},
|
||||||
|
},
|
||||||
},
|
},
|
||||||
data() {
|
data() {
|
||||||
return {
|
return {
|
||||||
@@ -164,5 +177,20 @@ export default {
|
|||||||
}
|
}
|
||||||
return ''
|
return ''
|
||||||
},
|
},
|
||||||
|
async translateToLocalByGroupTags(text) {
|
||||||
|
text = text.trim().toLowerCase()
|
||||||
|
if (this.groupTagsTranslateCache.toLocal.has(text)) {
|
||||||
|
let value = this.groupTagsTranslateCache.toLocal.get(text)
|
||||||
|
return value.join(' / ')
|
||||||
|
}
|
||||||
|
return ''
|
||||||
|
},
|
||||||
|
async translateToEnByGroupTags(text) {
|
||||||
|
text = text.trim().toLowerCase()
|
||||||
|
if (this.groupTagsTranslateCache.toEn.has(text)) {
|
||||||
|
return this.groupTagsTranslateCache.toEn.get(text)
|
||||||
|
}
|
||||||
|
return ''
|
||||||
|
},
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -6,29 +6,9 @@ export default {
|
|||||||
return {
|
return {
|
||||||
groupTagsActive: 0,
|
groupTagsActive: 0,
|
||||||
subGroupTagsActive: 0,
|
subGroupTagsActive: 0,
|
||||||
groupTagsColorKeyCache: {},
|
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
watch: {
|
watch: {},
|
||||||
groupTags: {
|
|
||||||
handler() {
|
|
||||||
for (let item of this.groupTags) {
|
|
||||||
for (let group of item.groups) {
|
|
||||||
if (group.type && group.typ == 'wrap') continue
|
|
||||||
let key = this.getTagsColorKey(item.name, group.name)
|
|
||||||
if (!this.groupTagsColor[key]) {
|
|
||||||
this.groupTagsColor[key] = ref(common.fitterInputColor(group.color))
|
|
||||||
}
|
|
||||||
for (let en in group.tags) {
|
|
||||||
this.groupTagsColorKeyCache[en] = key
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
},
|
|
||||||
deep: true,
|
|
||||||
immediate: true,
|
|
||||||
},
|
|
||||||
},
|
|
||||||
methods: {
|
methods: {
|
||||||
activeGroupTab(index) {
|
activeGroupTab(index) {
|
||||||
this.groupTagsActive = index
|
this.groupTagsActive = index
|
||||||
@@ -59,7 +39,7 @@ export default {
|
|||||||
},
|
},
|
||||||
getGroupTagStyle(groupName, subGroupName) {
|
getGroupTagStyle(groupName, subGroupName) {
|
||||||
let style = {}
|
let style = {}
|
||||||
let colorKey = this.getTagsColorKey(groupName, subGroupName)
|
let colorKey = common.getTagsColorKey(groupName, subGroupName)
|
||||||
let color = ''
|
let color = ''
|
||||||
if (this.groupTagsColor[colorKey]) {
|
if (this.groupTagsColor[colorKey]) {
|
||||||
color = this.groupTagsColor[colorKey]
|
color = this.groupTagsColor[colorKey]
|
||||||
@@ -74,7 +54,7 @@ export default {
|
|||||||
return style
|
return style
|
||||||
},
|
},
|
||||||
getTagsColorKey(groupName, subGroupName) {
|
getTagsColorKey(groupName, subGroupName) {
|
||||||
return groupName + '||' + subGroupName
|
return common.getTagsColorKey(groupName, subGroupName)
|
||||||
},
|
},
|
||||||
onTagsColorChange(key) {
|
onTagsColorChange(key) {
|
||||||
this.$emit('update:groupTagsColor', this.groupTagsColor)
|
this.$emit('update:groupTagsColor', this.groupTagsColor)
|
||||||
@@ -83,7 +63,7 @@ export default {
|
|||||||
for (let item of this.groupTags) {
|
for (let item of this.groupTags) {
|
||||||
for (let group of item.groups) {
|
for (let group of item.groups) {
|
||||||
if (group.type && group.typ == 'wrap') continue
|
if (group.type && group.typ == 'wrap') continue
|
||||||
let key2 = this.getTagsColorKey(item.name, group.name)
|
let key2 = common.getTagsColorKey(item.name, group.name)
|
||||||
if (key === key2) {
|
if (key === key2) {
|
||||||
this.groupTagsColor[key] = ref(common.fitterInputColor(group.color))
|
this.groupTagsColor[key] = ref(common.fitterInputColor(group.color))
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -2,8 +2,6 @@ import splitTags from "@/utils/splitTags";
|
|||||||
import globals from "../../globals";
|
import globals from "../../globals";
|
||||||
import tinycolor from "tinycolor2";
|
import tinycolor from "tinycolor2";
|
||||||
|
|
||||||
const cache = {}
|
|
||||||
|
|
||||||
export default {
|
export default {
|
||||||
loraRegex: /^\<lora:\s*([^\:]+)\s*(:)?\s*([0-9\.]+)?\>$/,
|
loraRegex: /^\<lora:\s*([^\:]+)\s*(:)?\s*([0-9\.]+)?\>$/,
|
||||||
lycoRegex: /^\<lyco:\s*([^\:]+)\s*(:)?\s*([0-9\.]+)?\>$/,
|
lycoRegex: /^\<lyco:\s*([^\:]+)\s*(:)?\s*([0-9\.]+)?\>$/,
|
||||||
@@ -603,25 +601,29 @@ export default {
|
|||||||
|
|
||||||
fitterInputColor(color, defaultColor = 'rgba(0,0,0,0)') {
|
fitterInputColor(color, defaultColor = 'rgba(0,0,0,0)') {
|
||||||
let cacheKey = 'fitterInputColor:' + color + ':' + defaultColor
|
let cacheKey = 'fitterInputColor:' + color + ':' + defaultColor
|
||||||
if (cache[cacheKey]) return cache[cacheKey]
|
if (localStorage[cacheKey]) return localStorage[cacheKey]
|
||||||
|
|
||||||
if (!color || color === '' || color === 'default' || color === 'none' || color === 'null' || color === 'undefined' || color === 'false' || color === 'true') {
|
if (!color || color === '' || color === 'default' || color === 'none' || color === 'null' || color === 'undefined' || color === 'false' || color === 'true') {
|
||||||
cache[cacheKey] = defaultColor
|
localStorage[cacheKey] = defaultColor
|
||||||
return defaultColor
|
return defaultColor
|
||||||
}
|
}
|
||||||
if (!tinycolor(color).isValid()) {
|
if (!tinycolor(color).isValid()) {
|
||||||
cache[cacheKey] = defaultColor
|
localStorage[cacheKey] = defaultColor
|
||||||
return defaultColor
|
return defaultColor
|
||||||
}
|
}
|
||||||
cache[cacheKey] = color
|
localStorage[cacheKey] = color
|
||||||
return color
|
return color
|
||||||
},
|
},
|
||||||
|
|
||||||
isColorTransparent(color) {
|
isColorTransparent(color) {
|
||||||
let cacheKey = 'isColorTransparent:' + color
|
let cacheKey = 'isColorTransparent:' + color
|
||||||
if (cache[cacheKey]) return cache[cacheKey]
|
if (localStorage[cacheKey]) return localStorage[cacheKey]
|
||||||
let result = tinycolor(color).getAlpha() === 0
|
let result = tinycolor(color).getAlpha() === 0
|
||||||
cache[cacheKey] = result
|
localStorage[cacheKey] = result
|
||||||
return result
|
return result
|
||||||
},
|
},
|
||||||
|
|
||||||
|
getTagsColorKey(groupName, subGroupName) {
|
||||||
|
return groupName + '||' + subGroupName
|
||||||
|
},
|
||||||
}
|
}
|
||||||
Reference in New Issue
Block a user