diff --git a/locales/en.json b/locales/en.json
index bb3bf221..85b026b7 100644
--- a/locales/en.json
+++ b/locales/en.json
@@ -543,6 +543,27 @@
"valuePlaceholder": "Value",
"add": "Add"
},
+ "triggerWords": {
+ "label": "Trigger Words",
+ "noTriggerWordsNeeded": "No trigger word needed",
+ "edit": "Edit trigger words",
+ "cancel": "Cancel editing",
+ "save": "Save changes",
+ "addPlaceholder": "Type to add or click suggestions below",
+ "copyWord": "Copy trigger word",
+ "deleteWord": "Delete trigger word",
+ "suggestions": {
+ "noSuggestions": "No suggestions available",
+ "noTrainedWords": "No trained words or class tokens found in this model. You can manually enter trigger words.",
+ "classToken": "Class Token",
+ "classTokenDescription": "Add to your prompt for best results",
+ "wordSuggestions": "Word Suggestions",
+ "wordsFound": "{count} words found",
+ "loading": "Loading suggestions...",
+ "frequency": "Frequency",
+ "alreadyAdded": "Already added"
+ }
+ },
"description": {
"noDescription": "No model description available",
"failedToLoad": "Failed to load model description",
diff --git a/locales/zh-CN.json b/locales/zh-CN.json
index 7d24b2fe..2a6a58a8 100644
--- a/locales/zh-CN.json
+++ b/locales/zh-CN.json
@@ -543,6 +543,27 @@
"valuePlaceholder": "值",
"add": "添加"
},
+ "triggerWords": {
+ "label": "触发词",
+ "noTriggerWordsNeeded": "无需触发词",
+ "edit": "编辑触发词",
+ "cancel": "取消编辑",
+ "save": "保存更改",
+ "addPlaceholder": "输入以添加或点击下方建议",
+ "copyWord": "复制触发词",
+ "deleteWord": "删除触发词",
+ "suggestions": {
+ "noSuggestions": "暂无可用建议",
+ "noTrainedWords": "此模型未找到训练词或类别标记。您可以手动输入触发词。",
+ "classToken": "类别标记",
+ "classTokenDescription": "添加到提示词以获得最佳效果",
+ "wordSuggestions": "词语建议",
+ "wordsFound": "已找到 {count} 个词",
+ "loading": "正在加载建议...",
+ "frequency": "出现频率",
+ "alreadyAdded": "已添加"
+ }
+ },
"description": {
"noDescription": "无模型描述信息",
"failedToLoad": "加载模型描述失败",
diff --git a/static/js/api/baseModelApi.js b/static/js/api/baseModelApi.js
index 6e0593d5..3c057f23 100644
--- a/static/js/api/baseModelApi.js
+++ b/static/js/api/baseModelApi.js
@@ -1,6 +1,6 @@
import { state, getCurrentPageState } from '../state/index.js';
import { showToast } from '../utils/uiHelpers.js';
-import { translate } from '../utils/i18n.js';
+import { translate } from '../utils/i18nHelpers.js';
import { getStorageItem, getSessionItem, saveMapToStorage } from '../utils/storageHelpers.js';
import {
getCompleteApiConfig,
diff --git a/static/js/components/shared/TriggerWords.js b/static/js/components/shared/TriggerWords.js
index c73dacfe..28d1f173 100644
--- a/static/js/components/shared/TriggerWords.js
+++ b/static/js/components/shared/TriggerWords.js
@@ -4,6 +4,7 @@
* Moved to shared directory for consistency
*/
import { showToast, copyToClipboard } from '../../utils/uiHelpers.js';
+import { translate } from '../../utils/i18nHelpers.js';
import { getModelApiClient } from '../../api/modelApiFactory.js';
/**
@@ -48,9 +49,9 @@ function createSuggestionDropdown(trainedWords, classTokens, existingWords = [])
// No suggestions case
if ((!trainedWords || trainedWords.length === 0) && !classTokens) {
- header.innerHTML = 'No suggestions available';
+ header.innerHTML = `${translate('modals.model.triggerWords.suggestions.noSuggestions')}`;
dropdown.appendChild(header);
- dropdown.innerHTML += '
No trained words or class tokens found in this model. You can manually enter trigger words.
';
+ dropdown.innerHTML += `${translate('modals.model.triggerWords.suggestions.noTrainedWords')}
`;
return dropdown;
}
@@ -65,8 +66,8 @@ function createSuggestionDropdown(trainedWords, classTokens, existingWords = [])
const classTokensHeader = document.createElement('div');
classTokensHeader.className = 'metadata-suggestions-header';
classTokensHeader.innerHTML = `
- Class Token
- Add to your prompt for best results
+ ${translate('modals.model.triggerWords.suggestions.classToken')}
+ ${translate('modals.model.triggerWords.suggestions.classTokenDescription')}
`;
dropdown.appendChild(classTokensHeader);
@@ -77,13 +78,13 @@ function createSuggestionDropdown(trainedWords, classTokens, existingWords = [])
// Create a special item for the class token
const tokenItem = document.createElement('div');
tokenItem.className = `metadata-suggestion-item class-token-item ${existingWords.includes(classTokens) ? 'already-added' : ''}`;
- tokenItem.title = `Class token: ${classTokens}`;
+ tokenItem.title = `${translate('modals.model.triggerWords.suggestions.classToken')}: ${classTokens}`;
tokenItem.innerHTML = `
${classTokens}
- Class Token
+ ${translate('modals.model.triggerWords.suggestions.classToken')}
${existingWords.includes(classTokens) ?
- '' : ''}
+ `` : ''}
`;
@@ -119,8 +120,8 @@ function createSuggestionDropdown(trainedWords, classTokens, existingWords = [])
// Add trained words header if we have any
if (trainedWords && trainedWords.length > 0) {
header.innerHTML = `
- Word Suggestions
- ${trainedWords.length} words found
+ ${translate('modals.model.triggerWords.suggestions.wordSuggestions')}
+ ${translate('modals.model.triggerWords.suggestions.wordsFound', { count: trainedWords.length })}
`;
dropdown.appendChild(header);
@@ -139,7 +140,7 @@ function createSuggestionDropdown(trainedWords, classTokens, existingWords = [])
${word}
${frequency}
- ${isAdded ? '' : ''}
+ ${isAdded ? `` : ''}
`;
@@ -166,7 +167,7 @@ function createSuggestionDropdown(trainedWords, classTokens, existingWords = [])
dropdown.appendChild(container);
} else if (!classTokens) {
// If we have neither class tokens nor trained words
- dropdown.innerHTML += 'No word suggestions found in this model. You can manually enter trigger words.
';
+ dropdown.innerHTML += `${translate('modals.model.triggerWords.suggestions.noTrainedWords')}
`;
}
return dropdown;
@@ -182,22 +183,22 @@ export function renderTriggerWords(words, filePath) {
if (!words.length) return `
`;
@@ -205,20 +206,20 @@ export function renderTriggerWords(words, filePath) {
return `
`;
@@ -265,7 +266,7 @@ export function setupTriggerWordsEditMode() {
if (isEditMode) {
this.innerHTML = '
'; // Change to cancel icon
- this.title = "Cancel editing";
+ this.title = translate('modals.model.triggerWords.cancel');
// Store original trigger words for potential restoration
originalTriggerWords = Array.from(triggerWordTags).map(tag => tag.dataset.word);
@@ -302,7 +303,7 @@ export function setupTriggerWordsEditMode() {
// Add loading indicator
const loadingIndicator = document.createElement('div');
loadingIndicator.className = 'metadata-loading';
- loadingIndicator.innerHTML = '
Loading suggestions...';
+ loadingIndicator.innerHTML = `
${translate('modals.model.triggerWords.suggestions.loading')}`;
addForm.appendChild(loadingIndicator);
// Get currently added trigger words
@@ -329,7 +330,7 @@ export function setupTriggerWordsEditMode() {
} else {
this.innerHTML = '
'; // Change back to edit icon
- this.title = "Edit trigger words";
+ this.title = translate('modals.model.triggerWords.edit');
// Hide edit controls and input form
editControls.style.display = 'none';